diff --git a/package-lock.json b/package-lock.json index 1730d5251..093746852 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "@thegetty/quire", - "version": "1.0.0-rc.33", + "version": "1.0.0-rc.34", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "@thegetty/quire", - "version": "1.0.0-rc.33", + "version": "1.0.0-rc.34", "license": "SEE LICENSE IN https://github.com/thegetty/quire/blob/main/LICENSE", "workspaces": [ "packages/*" @@ -2132,6 +2132,90 @@ "node": ">= 8" } }, + "node_modules/@pagefind/darwin-arm64": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@pagefind/darwin-arm64/-/darwin-arm64-1.4.0.tgz", + "integrity": "sha512-2vMqkbv3lbx1Awea90gTaBsvpzgRs7MuSgKDxW0m9oV1GPZCZbZBJg/qL83GIUEN2BFlY46dtUZi54pwH+/pTQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@pagefind/darwin-x64": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@pagefind/darwin-x64/-/darwin-x64-1.4.0.tgz", + "integrity": "sha512-e7JPIS6L9/cJfow+/IAqknsGqEPjJnVXGjpGm25bnq+NPdoD3c/7fAwr1OXkG4Ocjx6ZGSCijXEV4ryMcH2E3A==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@pagefind/freebsd-x64": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@pagefind/freebsd-x64/-/freebsd-x64-1.4.0.tgz", + "integrity": "sha512-WcJVypXSZ+9HpiqZjFXMUobfFfZZ6NzIYtkhQ9eOhZrQpeY5uQFqNWLCk7w9RkMUwBv1HAMDW3YJQl/8OqsV0Q==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@pagefind/linux-arm64": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@pagefind/linux-arm64/-/linux-arm64-1.4.0.tgz", + "integrity": "sha512-PIt8dkqt4W06KGmQjONw7EZbhDF+uXI7i0XtRLN1vjCUxM9vGPdtJc2mUyVPevjomrGz5M86M8bqTr6cgDp1Uw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@pagefind/linux-x64": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@pagefind/linux-x64/-/linux-x64-1.4.0.tgz", + "integrity": "sha512-z4oddcWwQ0UHrTHR8psLnVlz6USGJ/eOlDPTDYZ4cI8TK8PgwRUPQZp9D2iJPNIPcS6Qx/E4TebjuGJOyK8Mmg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@pagefind/windows-x64": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@pagefind/windows-x64/-/windows-x64-1.4.0.tgz", + "integrity": "sha512-NkT+YAdgS2FPCn8mIA9bQhiBs+xmniMGq1LFPDhcFn0+2yIUEiIG06t7bsZlhdjknEQRTSdT7YitP6fC5qwP0g==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, "node_modules/@parcel/watcher": { "version": "2.5.1", "resolved": "https://registry.npmjs.org/@parcel/watcher/-/watcher-2.5.1.tgz", @@ -10567,12 +10651,6 @@ "node": ">=12" } }, - "node_modules/lunr": { - "version": "2.3.9", - "resolved": "https://registry.npmjs.org/lunr/-/lunr-2.3.9.tgz", - "integrity": "sha512-zTU3DaZaF3Rt9rhN3uBMGQD3dD2/vFQqnvZCDv4dl5iOzq2IZQqTxu90r4E5J+nP70J3ilqVCrbho2eWaeW8Ow==", - "license": "MIT" - }, "node_modules/luxon": { "version": "3.6.1", "resolved": "https://registry.npmjs.org/luxon/-/luxon-3.6.1.tgz", @@ -12090,6 +12168,24 @@ "integrity": "sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==", "license": "CC0-1.0" }, + "node_modules/pagefind": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/pagefind/-/pagefind-1.4.0.tgz", + "integrity": "sha512-z2kY1mQlL4J8q5EIsQkLzQjilovKzfNVhX8De6oyE6uHpfFtyBaqUpcl/XzJC/4fjD8vBDyh1zolimIcVrCn9g==", + "dev": true, + "license": "MIT", + "bin": { + "pagefind": "lib/runner/bin.cjs" + }, + "optionalDependencies": { + "@pagefind/darwin-arm64": "1.4.0", + "@pagefind/darwin-x64": "1.4.0", + "@pagefind/freebsd-x64": "1.4.0", + "@pagefind/linux-arm64": "1.4.0", + "@pagefind/linux-x64": "1.4.0", + "@pagefind/windows-x64": "1.4.0" + } + }, "node_modules/pako": { "version": "1.0.11", "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", @@ -16526,7 +16622,6 @@ "fs-extra": "^11.2.0", "iiif-builder": "^1.0.7", "lit": "^3.1.2", - "lunr": "^2.3.9", "template-polyfill": "^2.0.0", "vite": "^6.3.6" }, @@ -16581,6 +16676,7 @@ "markdown-it-footnote": "^4.0.0", "mime-types": "^2.1.35", "module-alias": "^2.2.2", + "pagefind": "^1.4.0", "path": "^0.12.7", "prettier": "^3.2.5", "remove-markdown": "^0.5.0", @@ -16588,12 +16684,23 @@ "rollup-plugin-scss": "^3.0.0", "sass": "^1.70.0", "sharp": "^0.33.2", + "sinon": "^21.0.0", "toml": "^3.0.0" }, "engines": { "node": ">=22" } }, + "packages/11ty/node_modules/@sinonjs/fake-timers": { + "version": "15.1.0", + "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-15.1.0.tgz", + "integrity": "sha512-cqfapCxwTGsrR80FEgOoPsTonoefMBY7dnUEbQ+GRcved0jvkJLzvX6F4WtN+HBqbPX/SiFsIRUp+IrCW/2I2w==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@sinonjs/commons": "^3.0.1" + } + }, "packages/11ty/node_modules/cross-env": { "version": "7.0.3", "resolved": "https://registry.npmjs.org/cross-env/-/cross-env-7.0.3.tgz", @@ -16613,6 +16720,16 @@ "yarn": ">=1" } }, + "packages/11ty/node_modules/diff": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/diff/-/diff-8.0.3.tgz", + "integrity": "sha512-qejHi7bcSD4hQAZE0tNAawRK1ZtafHDmMTMkrrIGgSLl7hTnQHmKCeB45xAcbfTqK2zowkM3j3bHt/4b/ARbYQ==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.3.1" + } + }, "packages/11ty/node_modules/jsdom": { "version": "24.1.3", "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-24.1.3.tgz", @@ -16661,6 +16778,24 @@ "dev": true, "license": "MIT" }, + "packages/11ty/node_modules/sinon": { + "version": "21.0.1", + "resolved": "https://registry.npmjs.org/sinon/-/sinon-21.0.1.tgz", + "integrity": "sha512-Z0NVCW45W8Mg5oC/27/+fCqIHFnW8kpkFOq0j9XJIev4Ld0mKmERaZv5DMLAb9fGCevjKwaEeIQz5+MBXfZcDw==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@sinonjs/commons": "^3.0.1", + "@sinonjs/fake-timers": "^15.1.0", + "@sinonjs/samsam": "^8.0.3", + "diff": "^8.0.2", + "supports-color": "^7.2.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/sinon" + } + }, "packages/cli": { "name": "@thegetty/quire-cli", "version": "1.0.0-rc.33", @@ -16694,6 +16829,7 @@ "quire": "bin/cli.js" }, "devDependencies": { + "ava": "^6.2.0", "eslint": "^8.32.0", "esmock": "^2.7.3", "jsdoc-to-markdown": "^9.1.1", @@ -18018,6 +18154,48 @@ "fastq": "^1.6.0" } }, + "@pagefind/darwin-arm64": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@pagefind/darwin-arm64/-/darwin-arm64-1.4.0.tgz", + "integrity": "sha512-2vMqkbv3lbx1Awea90gTaBsvpzgRs7MuSgKDxW0m9oV1GPZCZbZBJg/qL83GIUEN2BFlY46dtUZi54pwH+/pTQ==", + "dev": true, + "optional": true + }, + "@pagefind/darwin-x64": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@pagefind/darwin-x64/-/darwin-x64-1.4.0.tgz", + "integrity": "sha512-e7JPIS6L9/cJfow+/IAqknsGqEPjJnVXGjpGm25bnq+NPdoD3c/7fAwr1OXkG4Ocjx6ZGSCijXEV4ryMcH2E3A==", + "dev": true, + "optional": true + }, + "@pagefind/freebsd-x64": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@pagefind/freebsd-x64/-/freebsd-x64-1.4.0.tgz", + "integrity": "sha512-WcJVypXSZ+9HpiqZjFXMUobfFfZZ6NzIYtkhQ9eOhZrQpeY5uQFqNWLCk7w9RkMUwBv1HAMDW3YJQl/8OqsV0Q==", + "dev": true, + "optional": true + }, + "@pagefind/linux-arm64": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@pagefind/linux-arm64/-/linux-arm64-1.4.0.tgz", + "integrity": "sha512-PIt8dkqt4W06KGmQjONw7EZbhDF+uXI7i0XtRLN1vjCUxM9vGPdtJc2mUyVPevjomrGz5M86M8bqTr6cgDp1Uw==", + "dev": true, + "optional": true + }, + "@pagefind/linux-x64": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@pagefind/linux-x64/-/linux-x64-1.4.0.tgz", + "integrity": "sha512-z4oddcWwQ0UHrTHR8psLnVlz6USGJ/eOlDPTDYZ4cI8TK8PgwRUPQZp9D2iJPNIPcS6Qx/E4TebjuGJOyK8Mmg==", + "dev": true, + "optional": true + }, + "@pagefind/windows-x64": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@pagefind/windows-x64/-/windows-x64-1.4.0.tgz", + "integrity": "sha512-NkT+YAdgS2FPCn8mIA9bQhiBs+xmniMGq1LFPDhcFn0+2yIUEiIG06t7bsZlhdjknEQRTSdT7YitP6fC5qwP0g==", + "dev": true, + "optional": true + }, "@parcel/watcher": { "version": "2.5.1", "resolved": "https://registry.npmjs.org/@parcel/watcher/-/watcher-2.5.1.tgz", @@ -18524,7 +18702,6 @@ "lit": "^3.1.2", "locale-en-us": "^0.0.2", "loglevel": "^1.9.1", - "lunr": "^2.3.9", "markdown-it": "^14.0.0", "markdown-it-anchor": "^8.6.7", "markdown-it-attrs": "^4.1.6", @@ -18533,6 +18710,7 @@ "markdown-it-footnote": "^4.0.0", "mime-types": "^2.1.35", "module-alias": "^2.2.2", + "pagefind": "^1.4.0", "path": "^0.12.7", "prettier": "^3.2.5", "remove-markdown": "^0.5.0", @@ -18540,11 +18718,21 @@ "rollup-plugin-scss": "^3.0.0", "sass": "^1.70.0", "sharp": "^0.33.2", + "sinon": "^21.0.0", "template-polyfill": "^2.0.0", "toml": "^3.0.0", "vite": "^6.3.6" }, "dependencies": { + "@sinonjs/fake-timers": { + "version": "15.1.0", + "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-15.1.0.tgz", + "integrity": "sha512-cqfapCxwTGsrR80FEgOoPsTonoefMBY7dnUEbQ+GRcved0jvkJLzvX6F4WtN+HBqbPX/SiFsIRUp+IrCW/2I2w==", + "dev": true, + "requires": { + "@sinonjs/commons": "^3.0.1" + } + }, "cross-env": { "version": "7.0.3", "resolved": "https://registry.npmjs.org/cross-env/-/cross-env-7.0.3.tgz", @@ -18554,6 +18742,12 @@ "cross-spawn": "^7.0.1" } }, + "diff": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/diff/-/diff-8.0.3.tgz", + "integrity": "sha512-qejHi7bcSD4hQAZE0tNAawRK1ZtafHDmMTMkrrIGgSLl7hTnQHmKCeB45xAcbfTqK2zowkM3j3bHt/4b/ARbYQ==", + "dev": true + }, "jsdom": { "version": "24.1.3", "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-24.1.3.tgz", @@ -18588,6 +18782,19 @@ "resolved": "https://registry.npmjs.org/rrweb-cssom/-/rrweb-cssom-0.7.1.tgz", "integrity": "sha512-TrEMa7JGdVm0UThDJSx7ddw5nVm3UJS9o9CCIZ72B1vSyEZoziDqBYP3XIoi/12lKrJR8rE3jeFHMok2F/Mnsg==", "dev": true + }, + "sinon": { + "version": "21.0.1", + "resolved": "https://registry.npmjs.org/sinon/-/sinon-21.0.1.tgz", + "integrity": "sha512-Z0NVCW45W8Mg5oC/27/+fCqIHFnW8kpkFOq0j9XJIev4Ld0mKmERaZv5DMLAb9fGCevjKwaEeIQz5+MBXfZcDw==", + "dev": true, + "requires": { + "@sinonjs/commons": "^3.0.1", + "@sinonjs/fake-timers": "^15.1.0", + "@sinonjs/samsam": "^8.0.3", + "diff": "^8.0.2", + "supports-color": "^7.2.0" + } } } }, @@ -18595,6 +18802,7 @@ "version": "file:packages/cli", "requires": { "ajv": "^8.16.0", + "ava": "^6.2.0", "boxen": "^7.0.1", "chalk": "^5.2.0", "commander": "^12.1.0", @@ -23601,11 +23809,6 @@ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==" }, - "lunr": { - "version": "2.3.9", - "resolved": "https://registry.npmjs.org/lunr/-/lunr-2.3.9.tgz", - "integrity": "sha512-zTU3DaZaF3Rt9rhN3uBMGQD3dD2/vFQqnvZCDv4dl5iOzq2IZQqTxu90r4E5J+nP70J3ilqVCrbho2eWaeW8Ow==" - }, "luxon": { "version": "3.6.1", "resolved": "https://registry.npmjs.org/luxon/-/luxon-3.6.1.tgz", @@ -24554,6 +24757,20 @@ } } }, + "pagefind": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/pagefind/-/pagefind-1.4.0.tgz", + "integrity": "sha512-z2kY1mQlL4J8q5EIsQkLzQjilovKzfNVhX8De6oyE6uHpfFtyBaqUpcl/XzJC/4fjD8vBDyh1zolimIcVrCn9g==", + "dev": true, + "requires": { + "@pagefind/darwin-arm64": "1.4.0", + "@pagefind/darwin-x64": "1.4.0", + "@pagefind/freebsd-x64": "1.4.0", + "@pagefind/linux-arm64": "1.4.0", + "@pagefind/linux-x64": "1.4.0", + "@pagefind/windows-x64": "1.4.0" + } + }, "pako": { "version": "1.0.11", "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", diff --git a/package.json b/package.json index 55876374b..a57e7a3b1 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@thegetty/quire", - "version": "1.0.0-rc.33", + "version": "1.0.0-rc.34", "private": true, "description": "a multi-format book publishing framework", "author": "Getty Digital", diff --git a/packages/11ty/_includes/components/head-tags/pagefind.js b/packages/11ty/_includes/components/head-tags/pagefind.js new file mode 100644 index 000000000..d49c5780b --- /dev/null +++ b/packages/11ty/_includes/components/head-tags/pagefind.js @@ -0,0 +1,37 @@ +/* eslint-disable camelcase */ +import { html } from 'common-tags' + +/** + * Renders data tags for PageFind search + * + * @param {Object} eleventyConfig + * + * @return {String} HTML meta elements + */ +export default function (eleventyConfig) { + const contributors = eleventyConfig.getFilter('contributors') + const removeHTML = eleventyConfig.getFilter('removeHTML') + + return function ({ page, layout }) { + if (!page) { + return + } + + const meta = [ + { + property: 'type', + content: layout + } + ] + + if (page.contributor) { + const contributorContent = contributors({ context: page.contributor, format: 'string', type: 'primary' }) + meta.push({ + property: 'contributors', + content: removeHTML(contributorContent) + }) + } + + return html`${meta.map(({ property, content }) => ``)}` + } +} diff --git a/packages/11ty/_includes/components/head.js b/packages/11ty/_includes/components/head.js index b6568d75d..f5b0920b5 100644 --- a/packages/11ty/_includes/components/head.js +++ b/packages/11ty/_includes/components/head.js @@ -12,6 +12,7 @@ export default function (eleventyConfig) { const opengraph = eleventyConfig.getFilter('opengraph') const removeHTML = eleventyConfig.getFilter('removeHTML') const twitterCard = eleventyConfig.getFilter('twitterCard') + const pagefind = eleventyConfig.getFilter('pagefind') const { application, publication } = eleventyConfig.globalData @@ -70,6 +71,8 @@ export default function (eleventyConfig) { ${twitterCard({ abstract, cover, layout })} + ${pagefind({ page, layout })} + diff --git a/packages/11ty/_includes/components/index.js b/packages/11ty/_includes/components/index.js index b17b444db..d12facfcf 100644 --- a/packages/11ty/_includes/components/index.js +++ b/packages/11ty/_includes/components/index.js @@ -54,6 +54,7 @@ export { default as modal } from './modal/index.js' export { default as navigation } from './navigation.js' export { default as opengraph } from './head-tags/opengraph.js' export { default as pageButtons } from './page-buttons.js' +export { default as pagefind } from './head-tags/pagefind.js' export { default as pageHeader } from './page-header.js' export { default as pageTitle } from './page-title.js' export { default as search } from './search.js' diff --git a/packages/11ty/_includes/components/search.js b/packages/11ty/_includes/components/search.js index 33839054c..7c2c5efab 100644 --- a/packages/11ty/_includes/components/search.js +++ b/packages/11ty/_includes/components/search.js @@ -9,8 +9,6 @@ import { html } from '#lib/common-tags/index.js' export default function (eleventyConfig) { const icon = eleventyConfig.getFilter('icon') return (params) => { - const { url } = params.publication - const searchIndex = new URL('search-index.json', url) return html`