livemark 0.27.2 → 0.28.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build/components/HeaderSearch.js +3 -2
- package/build/components/SearchDialog.js +3 -2
- package/build/components/SearchResultGroups.d.ts +6 -0
- package/build/components/SearchResultGroups.js +25 -0
- package/build/content-collections.js +33 -8
- package/build/helpers/article-search.d.ts +1 -7
- package/build/helpers/article-search.js +1 -24
- package/build/helpers/fence-languages.d.ts +2 -0
- package/build/helpers/fence-languages.js +14 -0
- package/build/helpers/fence-languages.unit.d.ts +1 -0
- package/build/helpers/fence-languages.unit.js +22 -0
- package/build/helpers/tailwind-sources.d.ts +4 -2
- package/build/helpers/tailwind-sources.js +10 -5
- package/build/helpers/tailwind-sources.unit.js +9 -8
- package/build/plugins/vite-livemark.js +3 -3
- package/build/router.js +6 -1
- package/build/routes/$.js +5 -1
- package/build/vite.config.js +4 -2
- package/package.json +1 -1
- package/skills/livemark-customization/SKILL.md +2 -1
- package/skills/livemark-deployment/SKILL.md +72 -0
- package/skills/livemark-landing/SKILL.md +84 -0
- package/source/components/HeaderSearch.tsx +2 -1
- package/source/components/SearchDialog.tsx +2 -1
- package/source/components/SearchResultGroups.tsx +54 -0
- package/source/content-collections.ts +37 -9
- package/source/helpers/{article-search.tsx → article-search.ts} +1 -53
- package/source/helpers/fence-languages.ts +21 -0
- package/source/helpers/fence-languages.unit.ts +28 -0
- package/source/helpers/tailwind-sources.ts +9 -4
- package/source/helpers/tailwind-sources.unit.ts +9 -8
- package/source/plugins/vite-livemark.ts +2 -2
- package/source/router.tsx +6 -0
- package/source/routes/$.tsx +3 -0
- package/source/vite.config.ts +3 -1
|
@@ -4,7 +4,7 @@ import { mergeConfig } from "vite";
|
|
|
4
4
|
import packageJson from "../../package.json" with { type: "json" };
|
|
5
5
|
import { buildTarget } from "../actions/target/build.js";
|
|
6
6
|
import { renderInlineMarkdown } from "../helpers/render-inline-markdown.js";
|
|
7
|
-
import {
|
|
7
|
+
import { excludeTailwindSources } from "../helpers/tailwind-sources.js";
|
|
8
8
|
import { resolveTargetExport } from "../helpers/target-export.js";
|
|
9
9
|
import { WebsiteConfig } from "../models/config.js";
|
|
10
10
|
import { ESCAPABLE_FILES, ESCAPABLE_FOLDERS } from "../settings.js";
|
|
@@ -74,7 +74,7 @@ export function livemark(opts) {
|
|
|
74
74
|
transform: {
|
|
75
75
|
filter: { id: /\.css(\?|$)/ },
|
|
76
76
|
handler(css) {
|
|
77
|
-
return
|
|
77
|
+
return excludeTailwindSources({ css, targetDir });
|
|
78
78
|
},
|
|
79
79
|
},
|
|
80
80
|
resolveId(id) {
|
|
@@ -193,4 +193,4 @@ async function resolveViteOverride(vite, env) {
|
|
|
193
193
|
function isObject(v) {
|
|
194
194
|
return v !== null && typeof v === "object";
|
|
195
195
|
}
|
|
196
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidml0ZS1saXZlbWFyay5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NvdXJjZS9wbHVnaW5zL3ZpdGUtbGl2ZW1hcmsudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxNQUFNLFNBQVMsQ0FBQTtBQUM5RCxPQUFPLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxNQUFNLFdBQVcsQ0FBQTtBQUVyQyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sTUFBTSxDQUFBO0FBQ2xDLE9BQU8sV0FBVyxNQUFNLG9CQUFvQixDQUFDLE9BQU8sSUFBSSxFQUFFLE1BQU0sRUFBRSxDQUFBO0FBQ2xFLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQTtBQUN4RCxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQTtBQUMzRSxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQTtBQUN6RSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQTtBQUVqRSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0scUJBQXFCLENBQUE7QUFDbkQsT0FBTyxFQUFFLGVBQWUsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGdCQUFnQixDQUFBO0FBTW5FLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxPQUFPLElBQUksQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLENBQUE7QUFDbEQsTUFBTSxZQUFZLEdBQUcsVUFBVSxDQUFDLFFBQVEsQ0FBQyxHQUFHLEdBQUcsZUFBZSxHQUFHLEVBQUUsQ0FBQyxDQUFBO0FBRXBFOzs7Ozs7Ozs7Ozs7NkJBWTZCO0FBQzdCLE1BQU0sVUFBVSxHQUFHLGtCQUFrQixDQUFBO0FBQ3JDLE1BQU0sbUJBQW1CLEdBQUcsS0FBSyxVQUFVLEVBQUUsQ0FBQTtBQUU3Qzs7OzttRUFJbUU7QUFDbkUs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cUNBR3FDO0FBQ3JDLEtBQUssVUFBVSxtQkFBbUIsQ0FDaEMsSUFBYSxFQUNiLEdBQWM7SUFFZCxJQUFJLENBQUMsSUFBSTtRQUFFLE9BQU8sSUFBSSxDQUFBO0lBQ3RCLElBQUksT0FBTyxJQUFJLEtBQUssVUFBVSxFQUFFLENBQUM7UUFDL0IsTUFBTSxNQUFNLEdBQUcsTUFBTSxPQUFPLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxTQUFTLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFBO1FBQzFELE9BQU8sUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQTtJQUN6QyxDQUFDO0lBQ0QsT0FBTyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFBO0FBQ3JDLENBQUM7QUFFRCxTQUFTLFFBQVEsQ0FBQyxDQUFVO0lBQzFCLE9BQU8sQ0FBQyxLQUFLLElBQUksSUFBSSxPQUFPLENBQUMsS0FBSyxRQUFRLENBQUE7QUFDNUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGNwU3luYywgZXhpc3RzU3luYywgcm1TeW5jLCBzdGF0U3luYyB9IGZyb20gXCJub2RlOmZzXCJcbmltcG9ydCB7IGpvaW4sIHNlcCB9IGZyb20gXCJub2RlOnBhdGhcIlxuaW1wb3J0IHR5cGUgeyBDb25maWdFbnYsIFBsdWdpbiwgVXNlckNvbmZpZyBhcyBWaXRlVXNlckNvbmZpZyB9IGZyb20gXCJ2aXRlXCJcbmltcG9ydCB7IG1lcmdlQ29uZmlnIH0gZnJvbSBcInZpdGVcIlxuaW1wb3J0IHBhY2thZ2VKc29uIGZyb20gXCIuLi8uLi9wYWNrYWdlLmpzb25cIiB3aXRoIHsgdHlwZTogXCJqc29uXCIgfVxuaW1wb3J0IHsgYnVpbGRUYXJnZXQgfSBmcm9tIFwiLi4vYWN0aW9ucy90YXJnZXQvYnVpbGQudHNcIlxuaW1wb3J0IHsgcmVuZGVySW5saW5lTWFya2Rvd24gfSBmcm9tIFwiLi4vaGVscGVycy9yZW5kZXItaW5saW5lLW1hcmtkb3duLnRzXCJcbmltcG9ydCB7IGV4Y2x1ZGVEZXBlbmRlbmN5U291cmNlcyB9IGZyb20gXCIuLi9oZWxwZXJzL3RhaWx3aW5kLXNvdXJjZXMudHNcIlxuaW1wb3J0IHsgcmVzb2x2ZVRhcmdldEV4cG9ydCB9IGZyb20gXCIuLi9oZWxwZXJzL3RhcmdldC1leHBvcnQudHNcIlxuaW1wb3J0IHR5cGUgeyBDb25maWcgfSBmcm9tIFwiLi4vbW9kZWxzL2NvbmZpZy50c1wiXG5pbXBvcnQgeyBXZWJzaXRlQ29uZmlnIH0gZnJvbSBcIi4uL21vZGVscy9jb25maWcudHNcIlxuaW1wb3J0IHsgRVNDQVBBQkxFX0ZJTEVTLCBFU0NBUEFCTEVfRk9MREVSUyB9IGZyb20gXCIuLi9zZXR0aW5ncy50c1wiXG5cbmV4cG9ydCBpbnRlcmZhY2UgTGl2ZW1hcmtPcHRpb25zIHtcbiAgY29uZmlnOiBDb25maWdcbn1cblxuY29uc3QgU09VUkNFX0RJUiA9IGpvaW4oaW1wb3J0Lm1ldGEuZGlybmFtZSwgXCIuLlwiKVxuY29uc3QgSVNfSU5TVEFMTEVEID0gU09VUkNFX0RJUi5pbmNsdWRlcyhgJHtzZXB9bm9kZV9tb2R1bGVzJHtzZXB9YClcblxuLyoqIFNpbmdsZSB2aXJ0dWFsIG1vZHVsZSBleHBvc2luZyBsaXZlbWFyaydzIHJ1bnRpbWUgdmFsdWVzIHRvIGNvbnN1bWVyXG4gKiAgb3ZlcnJpZGUgZmlsZXMgdmlhIG5hbWVkIGV4cG9ydHM6XG4gKlxuICogICAgICBpbXBvcnQgeyBjb25maWcgfSBmcm9tIFwibGl2ZW1hcms6dmlydHVhbFwiXG4gKlxuICogIEN1cnJlbnRseSBleHBvcnRzIGBjb25maWdgICh2YWxpZGF0ZWQgYFdlYnNpdGVDb25maWdgKSBhbmQgYGJhbm5lckh0bWxgXG4gKiAgKGBjb25maWcuYmFubmVyYCByZW5kZXJlZCBmcm9tIGlubGluZSBNYXJrZG93biBhdCBidWlsZCB0aW1lKTsgZnV0dXJlXG4gKiAgYWRkaXRpb25zIChlLmcuIGBhcnRpY2xlc2AsIGBzZWN0aW9uc2ApIGxhbmQgaGVyZSBhcyBuZXcgbmFtZWRcbiAqICBleHBvcnRzIHdpdGhvdXQgY29uc3VtZXJzIGNoYW5naW5nIHRoZWlyIGltcG9ydCBzdGF0ZW1lbnRzLlxuICpcbiAqICBUaGUgYFxcMGAgcHJlZml4IG9uIHRoZSByZXNvbHZlZCBpZCBpcyBWaXRlJ3MgY29udmVudGlvbiB0byBzaWduYWxcbiAqICBcInRoaXMgaXMgYSB2aXJ0dWFsIG1vZHVsZSDigJQgbm8gb3RoZXIgcGx1Z2luIHNob3VsZCB0cnkgdG8gcmVzb2x2ZVxuICogIG9yIGxvYWQgaXQgZnJvbSBkaXNrXCIuICovXG5jb25zdCBWSVJUVUFMX0lEID0gXCJsaXZlbWFyazp2aXJ0dWFsXCJcbmNvbnN0IFZJUlRVQUxfUkVTT0xWRURfSUQgPSBgXFwwJHtWSVJUVUFMX0lEfWBcblxuLyoqIE93bnMgdGhlIHByb2plY3QncyBgLmxpdmVtYXJrLy50YXJnZXQvYCBtb3VudDogc3ludGhlc2l6ZXMgaXQgdmlhXG4gKiAgYGJ1aWxkVGFyZ2V0KClgLCByZXR1cm5zIHRoZSBWaXRlIGNvbmZpZyB0aGF0IGFuY2hvcnMgdGhlcmUsIGFuZFxuICogIGNvcGllcyBgLmxpdmVtYXJrL2AgZWRpdHMgKHBsdXMgbGl2ZW1hcmsncyBgc291cmNlL2AgaW4gaXRzIG93biBkZXYpXG4gKiAgaW50byB0aGUgdGFyZ2V0LiBWaXRlIHdhdGNoZXMgdGhlIHRhcmdldCBuYXRpdmVseSwgc28gaXRzIG93biBITVJcbiAqICBkZWNpZGVzIGJldHdlZW4gRmFzdCBSZWZyZXNoLCBDU1MgdXBkYXRlcyBhbmQgYSBwYWdlIHJlbG9hZC4gKi9cbmV4cG9ydCBmdW5jdGlvbiBsaXZlbWFyayhvcHRzOiBMaXZlbWFya09wdGlvbnMpOiBQbHVnaW4ge1xuICBjb25zdCBvdmVycmlkZXNSb290ID0gam9pbihvcHRzLmNvbmZpZy5yb290LCBcIi5saXZlbWFya1wiKVxuICBjb25zdCBvdXREaXIgPSBqb2luKG92ZXJyaWRlc1Jvb3QsIFwiYnVpbGRcIilcbiAgbGV0IHRhcmdldERpciA9IFwiXCJcbiAgcmV0dXJuIHtcbiAgICBuYW1lOiBcImxpdmVtYXJrXCIsXG4gICAgZW5mb3JjZTogXCJwcmVcIixcbiAgICBhc3luYyBjb25maWcoXywgZW52KSB7XG4gICAgICB0YXJnZXREaXIgPSBidWlsZFRhcmdldCh7XG4gICAgICAgIGNvbmZpZ1BhdGg6IG9wdHMuY29uZmlnLmNvbmZpZ1BhdGgsXG4gICAgICAgIHNvdXJjZURpcjogU09VUkNFX0RJUixcbiAgICAgIH0pXG4gICAgICBjb25zdCBiYXNlOiBWaXRlVXNlckNvbmZpZyA9IHtcbiAgICAgICAgcm9vdDogdGFyZ2V0RGlyLFxuICAgICAgICAvLyBUaGUgZGVmYXVsdCBgPHJvb3Q+L25vZGVfbW9kdWxlcy8udml0ZWAgd291bGQgbGFuZCBpbnNpZGUgdGhlXG4gICAgICAgIC8vIGRlcGVuZGVuY3kgbGluaywgaS5lLiBpbiBsaXZlbWFyaydzIHNoYXJlZCBpbnN0YWxsLlxuICAgICAgICBjYWNoZURpcjogam9pbih0YXJnZXREaXIsIFwiLnZpdGVcIiksXG4gICAgICAgIC8vIE1vdW50IGV2ZXJ5dGhpbmcgKGFzc2V0IFVSTHMsIG1vZHVsZXByZWxvYWRzLCBkZXYgc2VydmVyKSB1bmRlclxuICAgICAgICAvLyBgY29uZmlnLmJhc2VgIHNvIHRoZSBzYW1lIGJ1aWxkIHdvcmtzIGF0IHJvb3Qgb3IgYXQgYSBzdWItcGF0aFxuICAgICAgICAvLyAoZS5nLiBHaXRIdWIgUGFnZXMgYGh0dHBzOi8vdXNlci5naXRodWIuaW8vcmVwby9gKS4gVGhlIHJvdXRlclxuICAgICAgICAvLyBhbmQgYXNzZXQtcGF0aCByZXNvbHZlciBtaXJyb3IgdGhpcyBhdCBydW50aW1lLlxuICAgICAgICBiYXNlOiBvcHRzLmNvbmZpZy5iYXNlID8gYCR7b3B0cy5jb25maWcuYmFzZX0vYCA6IFwiL1wiLFxuICAgICAgICAvLyBvdXREaXIgbGl2ZXMgb3V0c2lkZSB0aGUgdGFyZ2V0IHJvb3QsIHNvIFZpdGUncyByZWZ1c2FsIHRvXG4gICAgICAgIC8vIGVtcHR5IG91dC1vZi1yb290IGRpcmVjdG9yaWVzIG5lZWRzIGBlbXB0eU91dERpcmAuXG4gICAgICAgIGJ1aWxkOiB7IG91dERpciwgZW1wdHlPdXREaXI6IHRydWUgfSxcbiAgICAgICAgcmVzb2x2ZTogeyBkZWR1cGU6IFtcInJlYWN0XCIsIFwicmVhY3QtZG9tXCJdIH0sXG4gICAgICAgIC8vIEZvciB0aGUgU1NSIGJ1aWxkIG9ubHksIGlubGluZSBldmVyeSBub2RlX21vZHVsZXMgZGVwIGludG9cbiAgICAgICAgLy8gc2VydmVyLmpzLiBUaGUgcHJlcmVuZGVyIHN0ZXAgKHdoaWNoIHJ1bnMgc2VydmVyLmpzIHdpdGhcbiAgICAgICAgLy8gTm9kZSkgd2Fsa3Mgbm9kZV9tb2R1bGVzIGZyb20gdGhlIGJ1aWxkLyBkaXIgYW5kIGNhbid0IHJlYWNoXG4gICAgICAgIC8vIHBhY2thZ2VzIGJ1cmllZCBpbiBwbnBtJ3MgYC5wbnBtLyovbm9kZV9tb2R1bGVzL2AgKGUuZy5cbiAgICAgICAgLy8gVGFuU3RhY2staW50ZXJuYWwgYWxpYXNlcyBsaWtlIGBoMy12MmApLiBTZWxmLWNvbnRhaW5lZFxuICAgICAgICAvLyBidW5kbGUgYnlwYXNzZXMgdGhlIGlzc3VlLiBEZXYgU1NSIGtlZXBzIGV4dGVybmFscyAoZmFzdGVyKS5cbiAgICAgICAgLi4uKGVudi5jb21tYW5kID09PSBcImJ1aWxkXCIgJiYge1xuICAgICAgICAgIGVudmlyb25tZW50czogeyBzc3I6IHsgcmVzb2x2ZTogeyBub0V4dGVybmFsOiB0cnVlIH0gfSB9LFxuICAgICAgICB9KSxcbiAgICAgIH1cbiAgICAgIGNvbnN0IG92ZXJyaWRlID0gYXdhaXQgcmVzb2x2ZVZpdGVPdmVycmlkZShvcHRzLmNvbmZpZy52aXRlLCBlbnYpXG4gICAgICByZXR1cm4gb3ZlcnJpZGUgPyBtZXJnZUNvbmZpZyhiYXNlLCBvdmVycmlkZSkgOiBiYXNlXG4gICAgfSxcbiAgICAvLyBIZXJlLCBub3QgaW4gYHN0eWxlcy9nZW5lcmFsLmNzc2AsIHNvIGFuIGVzY2FwZWQgc3R5bGVzaGVldCBrZWVwcyBpdC4gV29ya3Mgb25seVxuICAgIC8vIHdoaWxlIHRoaXMgcGx1Z2luIHByZWNlZGVzIGB0YWlsd2luZCgpYDogYm90aCBhcmUgYHByZWAsIHNvIGFycmF5IG9yZGVyIGRlY2lkZXMuXG4gICAgdHJhbnNmb3JtOiB7XG4gICAgICBmaWx0ZXI6IHsgaWQ6IC9cXC5jc3MoXFw/fCQpLyB9LFxuICAgICAgaGFuZGxlcihjc3MpIHtcbiAgICAgICAgcmV0dXJuIGV4Y2x1ZGVEZXBlbmRlbmN5U291cmNlcyh7IGNzcywgdGFyZ2V0RGlyIH0pXG4gICAgICB9LFxuICAgIH0sXG4gICAgcmVzb2x2ZUlkKGlkKSB7XG4gICAgICBpZiAoaWQgPT09IFZJUlRVQUxfSUQpIHJldHVybiBWSVJUVUFMX1JFU09MVkVEX0lEXG4gICAgICByZXR1cm4gcmVzb2x2ZVRhcmdldEV4cG9ydCh7IGlkLCB0YXJnZXREaXIsIGV4cG9ydHM6IHBhY2thZ2VKc29uLmV4cG9ydHMgfSkgPz8gbnVsbFxuICAgIH0sXG4gICAgbG9hZChpZCkge1xuICAgICAgaWYgKGlkICE9PSBWSVJUVUFMX1JFU09MVkVEX0lEKSByZXR1cm4gbnVsbFxuICAgICAgY29uc3QgY29uZmlnID0gV2Vic2l0ZUNvbmZpZy5wYXJzZShvcHRzLmNvbmZpZylcbiAgICAgIGNvbnN0IGJhbm5lckh0bWwgPSBjb25maWcuYmFubmVyXG4gICAgICAgID8gcmVuZGVySW5saW5lTWFya2Rvd24oY29uZmlnLmJhbm5lciwgY29uZmlnLmJhc2UpXG4gICAgICAgIDogdW5kZWZpbmVkXG4gICAgICByZXR1cm4gW1xuICAgICAgICBgZXhwb3J0IGNvbnN0IGNvbmZpZyA9ICR7SlNPTi5zdHJpbmdpZnkoY29uZmlnKX1gLFxuICAgICAgICBgZXhwb3J0IGNvbnN0IGJhbm5lckh0bWwgPSAke0pTT04uc3RyaW5naWZ5KGJhbm5lckh0bWwpfWAsXG4gICAgICBdLmpvaW4oXCJcXG5cIilcbiAgICB9LFxuICAgIGNvbmZpZ3VyZVNlcnZlcihzZXJ2ZXIpIHtcbiAgICAgIC8vIFZpdGUgd2F0Y2hlcyBvbmx5IGl0cyByb290ICh0aGUgdGFyZ2V0KTsgdGhlIGZpbGVzIHRoZSB0YXJnZXQgaXNcbiAgICAgIC8vIGNvcGllZCBmcm9tIGpvaW4gaXRzIHdhdGNoZXIgaGVyZS4gYC5saXZlbWFyay9gIGFsd2F5cyBleGlzdHNcbiAgICAgIC8vIGJlY2F1c2UgdGhlIHRhcmdldCBsaXZlcyBpbnNpZGUgaXQuXG4gICAgICBzZXJ2ZXIud2F0Y2hlci5hZGQoW29wdHMuY29uZmlnLmNvbmZpZ1BhdGgsIG92ZXJyaWRlc1Jvb3RdKVxuICAgICAgaWYgKCFJU19JTlNUQUxMRUQpIHNlcnZlci53YXRjaGVyLmFkZChTT1VSQ0VfRElSKVxuICAgICAgc2VydmVyLndhdGNoZXIub24oXCJjaGFuZ2VcIiwgZmlsZSA9PiBvbkNoYW5nZShmaWxlLCBcImNoYW5nZVwiKSlcbiAgICAgIHNlcnZlci53YXRjaGVyLm9uKFwiYWRkXCIsIGZpbGUgPT4gb25DaGFuZ2UoZmlsZSwgXCJhZGRcIikpXG4gICAgICBzZXJ2ZXIud2F0Y2hlci5vbihcInVubGlua1wiLCBmaWxlID0+IG9uQ2hhbmdlKGZpbGUsIFwidW5saW5rXCIpKVxuICAgICAgc2VydmVyLndhdGNoZXIub24oXCJ1bmxpbmtEaXJcIiwgZmlsZSA9PiBvbkNoYW5nZShmaWxlLCBcInVubGlua1wiKSlcblxuICAgICAgZnVuY3Rpb24gb25DaGFuZ2UoZmlsZTogc3RyaW5nLCBraW5kOiBcImNoYW5nZVwiIHwgXCJhZGRcIiB8IFwidW5saW5rXCIpIHtcbiAgICAgICAgaWYgKGZpbGUgPT09IG9wdHMuY29uZmlnLmNvbmZpZ1BhdGgpIHtcbiAgICAgICAgICBzZXJ2ZXIucmVzdGFydCgpXG4gICAgICAgICAgcmV0dXJuXG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzV2l0aGluKGZpbGUsIHRhcmdldERpcikgfHwgaXNXaXRoaW4oZmlsZSwgb3V0RGlyKSkgcmV0dXJuXG4gICAgICAgIGNvbnN0IG92ZXJsYXlIaXQgPSBtYXRjaFBhdGgoZmlsZSwgb3ZlcnJpZGVzUm9vdClcbiAgICAgICAgaWYgKG92ZXJsYXlIaXQpIHtcbiAgICAgICAgICBzeW5jT3ZlcmxheShvdmVybGF5SGl0LCBraW5kLCB0YXJnZXREaXIsIG92ZXJyaWRlc1Jvb3QpXG4gICAgICAgICAgcmV0dXJuXG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgc291cmNlSGl0ID0gbWF0Y2hQYXRoKGZpbGUsIFNPVVJDRV9ESVIpXG4gICAgICAgIGlmIChzb3VyY2VIaXQgJiYgIXNvdXJjZUhpdC5yZWwuaW5jbHVkZXMoXCJyb3V0ZVRyZWUuZ2VuLnRzXCIpKSB7XG4gICAgICAgICAgc3luY1NvdXJjZShzb3VyY2VIaXQsIGtpbmQsIHRhcmdldERpciwgb3ZlcnJpZGVzUm9vdClcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG4gIH1cbn1cblxuaW50ZXJmYWNlIEhpdCB7XG4gIHJlbDogc3RyaW5nXG4gIGNhdGVnb3J5OiBcImZvbGRlclwiIHwgXCJmaWxlXCIgfCBudWxsXG59XG5cbmZ1bmN0aW9uIG1hdGNoUGF0aChmaWxlOiBzdHJpbmcsIHJvb3Q6IHN0cmluZyk6IEhpdCB8IG51bGwge1xuICBpZiAoIWlzV2l0aGluKGZpbGUsIHJvb3QpIHx8IGZpbGUgPT09IHJvb3QpIHJldHVybiBudWxsXG4gIGNvbnN0IHJlbCA9IGZpbGUuc2xpY2Uocm9vdC5sZW5ndGggKyBzZXAubGVuZ3RoKVxuICByZXR1cm4geyByZWwsIGNhdGVnb3J5OiBjbGFzc2lmeShyZWwpIH1cbn1cblxuZnVuY3Rpb24gaXNXaXRoaW4oZmlsZTogc3RyaW5nLCBkaXI6IHN0cmluZykge1xuICByZXR1cm4gZmlsZSA9PT0gZGlyIHx8IGZpbGUuc3RhcnRzV2l0aChgJHtkaXJ9JHtzZXB9YClcbn1cblxuZnVuY3Rpb24gY2xhc3NpZnkocmVsOiBzdHJpbmcpOiBcImZvbGRlclwiIHwgXCJmaWxlXCIgfCBudWxsIHtcbiAgY29uc3QgW2hlYWRdID0gcmVsLnNwbGl0KHNlcClcbiAgaWYgKGhlYWQgJiYgRVNDQVBBQkxFX0ZPTERFUlMuaW5jbHVkZXMoaGVhZCkpIHJldHVybiBcImZvbGRlclwiXG4gIGlmIChFU0NBUEFCTEVfRklMRVMuaW5jbHVkZXMocmVsKSkgcmV0dXJuIFwiZmlsZVwiXG4gIC8vIE5vbi1lc2NhcGFibGUgc291cmNlIGZpbGVzIHN0aWxsIG5lZWQgdG8gZmxvdyBpbnRvIHRhcmdldCBkdXJpbmdcbiAgLy8gbGl2ZW1hcmsncyBvd24gZGV2IOKAlCB0aGUgdXNlciBpcyBlZGl0aW5nIHRoZSBjYW5vbmljYWwgc291cmNlLlxuICByZXR1cm4gbnVsbFxufVxuXG5mdW5jdGlvbiBzeW5jT3ZlcmxheShcbiAgaGl0OiBIaXQsXG4gIGtpbmQ6IFwiY2hhbmdlXCIgfCBcImFkZFwiIHwgXCJ1bmxpbmtcIixcbiAgdGFyZ2V0RGlyOiBzdHJpbmcsXG4gIG92ZXJyaWRlc1Jvb3Q6IHN0cmluZyxcbikge1xuICBpZiAoIWhpdC5jYXRlZ29yeSkgcmV0dXJuXG4gIGNvbnN0IGRlc3QgPSBqb2luKHRhcmdldERpciwgaGl0LnJlbClcbiAgY29uc3Qgc291cmNlID0gam9pbihTT1VSQ0VfRElSLCBoaXQucmVsKVxuICBpZiAoa2luZCA9PT0gXCJ1bmxpbmtcIikge1xuICAgIC8vIENvcHkgYSBmaWxlJ3MgZGVmYXVsdCBvdmVyIHRoZSBlc2NhcGUgaW4gb25lIHdyaXRlOiBhbiB1bmxpbmsgdGhlblxuICAgIC8vIGFuIGFkZCByZWFjaGVzIFZpdGUgYXMgdHdvIGV2ZW50cyBhbmQgY29zdHMgYSBwYWdlIHJlbG9hZC5cbiAgICBpZiAoIWV4aXN0c1N5bmMoc291cmNlKSB8fCBzdGF0U3luYyhzb3VyY2UpLmlzRGlyZWN0b3J5KCkpIHtcbiAgICAgIHJtU3luYyhkZXN0LCB7IGZvcmNlOiB0cnVlLCByZWN1cnNpdmU6IHRydWUgfSlcbiAgICB9XG4gICAgaWYgKGV4aXN0c1N5bmMoc291cmNlKSkgY3BTeW5jKHNvdXJjZSwgZGVzdCwgeyByZWN1cnNpdmU6IHRydWUsIGZvcmNlOiB0cnVlIH0pXG4gICAgcmV0dXJuXG4gIH1cbiAgY29uc3Qgb3ZlcmxheSA9IGpvaW4ob3ZlcnJpZGVzUm9vdCwgaGl0LnJlbClcbiAgaWYgKGV4aXN0c1N5bmMob3ZlcmxheSkpIGNwU3luYyhvdmVybGF5LCBkZXN0LCB7IHJlY3Vyc2l2ZTogdHJ1ZSwgZm9yY2U6IHRydWUgfSlcbn1cblxuZnVuY3Rpb24gc3luY1NvdXJjZShcbiAgaGl0OiBIaXQsXG4gIGtpbmQ6IFwiY2hhbmdlXCIgfCBcImFkZFwiIHwgXCJ1bmxpbmtcIixcbiAgdGFyZ2V0RGlyOiBzdHJpbmcsXG4gIG92ZXJyaWRlc1Jvb3Q6IHN0cmluZyxcbikge1xuICAvLyBJZiB0aGUgY29uc3VtZXIgaGFzIGFuIG92ZXJsYXkgZm9yIHRoaXMgZmlsZSAoYW5kIGl0J3MgZXNjYXBhYmxlKSxcbiAgLy8gdGhlIG92ZXJsYXkgd2lucyDigJQgaWdub3JlIHNvdXJjZSBjaGFuZ2VzLlxuICBpZiAoaGl0LmNhdGVnb3J5ICYmIGV4aXN0c1N5bmMoam9pbihvdmVycmlkZXNSb290LCBoaXQucmVsKSkpIHJldHVyblxuICBjb25zdCBkZXN0ID0gam9pbih0YXJnZXREaXIsIGhpdC5yZWwpXG4gIGNvbnN0IHNvdXJjZSA9IGpvaW4oU09VUkNFX0RJUiwgaGl0LnJlbClcbiAgaWYgKGtpbmQgPT09IFwidW5saW5rXCIpIHtcbiAgICBybVN5bmMoZGVzdCwgeyBmb3JjZTogdHJ1ZSwgcmVjdXJzaXZlOiB0cnVlIH0pXG4gICAgcmV0dXJuXG4gIH1cbiAgaWYgKGV4aXN0c1N5bmMoc291cmNlKSkgY3BTeW5jKHNvdXJjZSwgZGVzdCwgeyByZWN1cnNpdmU6IHRydWUsIGZvcmNlOiB0cnVlIH0pXG59XG5cbi8qKiBSZXNvbHZlIGxpdmVtYXJrLmNvbmZpZy50cydzIGB2aXRlYCBmaWVsZCDigJQgZWl0aGVyIGEgY29uZmlnIG9iamVjdFxuICogIG9yIGEgZnVuY3Rpb24gYChlbnYpID0+IGNvbmZpZ2AgKG1hdGNoaW5nIFZpdGUncyBvd24gYGRlZmluZUNvbmZpZ2ApLlxuICogIFNjaGVtYSBzdG9yZXMgaXQgYXMgYHVua25vd25gOyB0eXBpbmcgZm9yIHRoZSBjb25zdW1lcidzIGVkaXRvclxuICogIGxpdmVzIG9uIHtAbGluayBWaXRlT3ZlcnJpZGV9LiAqL1xuYXN5bmMgZnVuY3Rpb24gcmVzb2x2ZVZpdGVPdmVycmlkZShcbiAgdml0ZTogdW5rbm93bixcbiAgZW52OiBDb25maWdFbnYsXG4pOiBQcm9taXNlPFJlY29yZDxzdHJpbmcsIHVua25vd24+IHwgbnVsbD4ge1xuICBpZiAoIXZpdGUpIHJldHVybiBudWxsXG4gIGlmICh0eXBlb2Ygdml0ZSA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgUmVmbGVjdC5hcHBseSh2aXRlLCB1bmRlZmluZWQsIFtlbnZdKVxuICAgIHJldHVybiBpc09iamVjdChyZXN1bHQpID8gcmVzdWx0IDogbnVsbFxuICB9XG4gIHJldHVybiBpc09iamVjdCh2aXRlKSA/IHZpdGUgOiBudWxsXG59XG5cbmZ1bmN0aW9uIGlzT2JqZWN0KHY6IHVua25vd24pOiB2IGlzIFJlY29yZDxzdHJpbmcsIHVua25vd24+IHtcbiAgcmV0dXJuIHYgIT09IG51bGwgJiYgdHlwZW9mIHYgPT09IFwib2JqZWN0XCJcbn1cbiJdfQ==
|
|
196
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidml0ZS1saXZlbWFyay5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NvdXJjZS9wbHVnaW5zL3ZpdGUtbGl2ZW1hcmsudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxNQUFNLFNBQVMsQ0FBQTtBQUM5RCxPQUFPLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxNQUFNLFdBQVcsQ0FBQTtBQUVyQyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sTUFBTSxDQUFBO0FBQ2xDLE9BQU8sV0FBVyxNQUFNLG9CQUFvQixDQUFDLE9BQU8sSUFBSSxFQUFFLE1BQU0sRUFBRSxDQUFBO0FBQ2xFLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQTtBQUN4RCxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQTtBQUMzRSxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQTtBQUN2RSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQTtBQUVqRSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0scUJBQXFCLENBQUE7QUFDbkQsT0FBTyxFQUFFLGVBQWUsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGdCQUFnQixDQUFBO0FBTW5FLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxPQUFPLElBQUksQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLENBQUE7QUFDbEQsTUFBTSxZQUFZLEdBQUcsVUFBVSxDQUFDLFFBQVEsQ0FBQyxHQUFHLEdBQUcsZUFBZSxHQUFHLEVBQUUsQ0FBQyxDQUFBO0FBRXBFOzs7Ozs7Ozs7Ozs7NkJBWTZCO0FBQzdCLE1BQU0sVUFBVSxHQUFHLGtCQUFrQixDQUFBO0FBQ3JDLE1BQU0sbUJBQW1CLEdBQUcsS0FBSyxVQUFVLEVBQUUsQ0FBQTtBQUU3Qzs7OzttRUFJbUU7QUFDbkUs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cUNBR3FDO0FBQ3JDLEtBQUssVUFBVSxtQkFBbUIsQ0FDaEMsSUFBYSxFQUNiLEdBQWM7SUFFZCxJQUFJLENBQUMsSUFBSTtRQUFFLE9BQU8sSUFBSSxDQUFBO0lBQ3RCLElBQUksT0FBTyxJQUFJLEtBQUssVUFBVSxFQUFFLENBQUM7UUFDL0IsTUFBTSxNQUFNLEdBQUcsTUFBTSxPQUFPLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxTQUFTLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFBO1FBQzFELE9BQU8sUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQTtJQUN6QyxDQUFDO0lBQ0QsT0FBTyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFBO0FBQ3JDLENBQUM7QUFFRCxTQUFTLFFBQVEsQ0FBQyxDQUFVO0lBQzFCLE9BQU8sQ0FBQyxLQUFLLElBQUksSUFBSSxPQUFPLENBQUMsS0FBSyxRQUFRLENBQUE7QUFDNUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGNwU3luYywgZXhpc3RzU3luYywgcm1TeW5jLCBzdGF0U3luYyB9IGZyb20gXCJub2RlOmZzXCJcbmltcG9ydCB7IGpvaW4sIHNlcCB9IGZyb20gXCJub2RlOnBhdGhcIlxuaW1wb3J0IHR5cGUgeyBDb25maWdFbnYsIFBsdWdpbiwgVXNlckNvbmZpZyBhcyBWaXRlVXNlckNvbmZpZyB9IGZyb20gXCJ2aXRlXCJcbmltcG9ydCB7IG1lcmdlQ29uZmlnIH0gZnJvbSBcInZpdGVcIlxuaW1wb3J0IHBhY2thZ2VKc29uIGZyb20gXCIuLi8uLi9wYWNrYWdlLmpzb25cIiB3aXRoIHsgdHlwZTogXCJqc29uXCIgfVxuaW1wb3J0IHsgYnVpbGRUYXJnZXQgfSBmcm9tIFwiLi4vYWN0aW9ucy90YXJnZXQvYnVpbGQudHNcIlxuaW1wb3J0IHsgcmVuZGVySW5saW5lTWFya2Rvd24gfSBmcm9tIFwiLi4vaGVscGVycy9yZW5kZXItaW5saW5lLW1hcmtkb3duLnRzXCJcbmltcG9ydCB7IGV4Y2x1ZGVUYWlsd2luZFNvdXJjZXMgfSBmcm9tIFwiLi4vaGVscGVycy90YWlsd2luZC1zb3VyY2VzLnRzXCJcbmltcG9ydCB7IHJlc29sdmVUYXJnZXRFeHBvcnQgfSBmcm9tIFwiLi4vaGVscGVycy90YXJnZXQtZXhwb3J0LnRzXCJcbmltcG9ydCB0eXBlIHsgQ29uZmlnIH0gZnJvbSBcIi4uL21vZGVscy9jb25maWcudHNcIlxuaW1wb3J0IHsgV2Vic2l0ZUNvbmZpZyB9IGZyb20gXCIuLi9tb2RlbHMvY29uZmlnLnRzXCJcbmltcG9ydCB7IEVTQ0FQQUJMRV9GSUxFUywgRVNDQVBBQkxFX0ZPTERFUlMgfSBmcm9tIFwiLi4vc2V0dGluZ3MudHNcIlxuXG5leHBvcnQgaW50ZXJmYWNlIExpdmVtYXJrT3B0aW9ucyB7XG4gIGNvbmZpZzogQ29uZmlnXG59XG5cbmNvbnN0IFNPVVJDRV9ESVIgPSBqb2luKGltcG9ydC5tZXRhLmRpcm5hbWUsIFwiLi5cIilcbmNvbnN0IElTX0lOU1RBTExFRCA9IFNPVVJDRV9ESVIuaW5jbHVkZXMoYCR7c2VwfW5vZGVfbW9kdWxlcyR7c2VwfWApXG5cbi8qKiBTaW5nbGUgdmlydHVhbCBtb2R1bGUgZXhwb3NpbmcgbGl2ZW1hcmsncyBydW50aW1lIHZhbHVlcyB0byBjb25zdW1lclxuICogIG92ZXJyaWRlIGZpbGVzIHZpYSBuYW1lZCBleHBvcnRzOlxuICpcbiAqICAgICAgaW1wb3J0IHsgY29uZmlnIH0gZnJvbSBcImxpdmVtYXJrOnZpcnR1YWxcIlxuICpcbiAqICBDdXJyZW50bHkgZXhwb3J0cyBgY29uZmlnYCAodmFsaWRhdGVkIGBXZWJzaXRlQ29uZmlnYCkgYW5kIGBiYW5uZXJIdG1sYFxuICogIChgY29uZmlnLmJhbm5lcmAgcmVuZGVyZWQgZnJvbSBpbmxpbmUgTWFya2Rvd24gYXQgYnVpbGQgdGltZSk7IGZ1dHVyZVxuICogIGFkZGl0aW9ucyAoZS5nLiBgYXJ0aWNsZXNgLCBgc2VjdGlvbnNgKSBsYW5kIGhlcmUgYXMgbmV3IG5hbWVkXG4gKiAgZXhwb3J0cyB3aXRob3V0IGNvbnN1bWVycyBjaGFuZ2luZyB0aGVpciBpbXBvcnQgc3RhdGVtZW50cy5cbiAqXG4gKiAgVGhlIGBcXDBgIHByZWZpeCBvbiB0aGUgcmVzb2x2ZWQgaWQgaXMgVml0ZSdzIGNvbnZlbnRpb24gdG8gc2lnbmFsXG4gKiAgXCJ0aGlzIGlzIGEgdmlydHVhbCBtb2R1bGUg4oCUIG5vIG90aGVyIHBsdWdpbiBzaG91bGQgdHJ5IHRvIHJlc29sdmVcbiAqICBvciBsb2FkIGl0IGZyb20gZGlza1wiLiAqL1xuY29uc3QgVklSVFVBTF9JRCA9IFwibGl2ZW1hcms6dmlydHVhbFwiXG5jb25zdCBWSVJUVUFMX1JFU09MVkVEX0lEID0gYFxcMCR7VklSVFVBTF9JRH1gXG5cbi8qKiBPd25zIHRoZSBwcm9qZWN0J3MgYC5saXZlbWFyay8udGFyZ2V0L2AgbW91bnQ6IHN5bnRoZXNpemVzIGl0IHZpYVxuICogIGBidWlsZFRhcmdldCgpYCwgcmV0dXJucyB0aGUgVml0ZSBjb25maWcgdGhhdCBhbmNob3JzIHRoZXJlLCBhbmRcbiAqICBjb3BpZXMgYC5saXZlbWFyay9gIGVkaXRzIChwbHVzIGxpdmVtYXJrJ3MgYHNvdXJjZS9gIGluIGl0cyBvd24gZGV2KVxuICogIGludG8gdGhlIHRhcmdldC4gVml0ZSB3YXRjaGVzIHRoZSB0YXJnZXQgbmF0aXZlbHksIHNvIGl0cyBvd24gSE1SXG4gKiAgZGVjaWRlcyBiZXR3ZWVuIEZhc3QgUmVmcmVzaCwgQ1NTIHVwZGF0ZXMgYW5kIGEgcGFnZSByZWxvYWQuICovXG5leHBvcnQgZnVuY3Rpb24gbGl2ZW1hcmsob3B0czogTGl2ZW1hcmtPcHRpb25zKTogUGx1Z2luIHtcbiAgY29uc3Qgb3ZlcnJpZGVzUm9vdCA9IGpvaW4ob3B0cy5jb25maWcucm9vdCwgXCIubGl2ZW1hcmtcIilcbiAgY29uc3Qgb3V0RGlyID0gam9pbihvdmVycmlkZXNSb290LCBcImJ1aWxkXCIpXG4gIGxldCB0YXJnZXREaXIgPSBcIlwiXG4gIHJldHVybiB7XG4gICAgbmFtZTogXCJsaXZlbWFya1wiLFxuICAgIGVuZm9yY2U6IFwicHJlXCIsXG4gICAgYXN5bmMgY29uZmlnKF8sIGVudikge1xuICAgICAgdGFyZ2V0RGlyID0gYnVpbGRUYXJnZXQoe1xuICAgICAgICBjb25maWdQYXRoOiBvcHRzLmNvbmZpZy5jb25maWdQYXRoLFxuICAgICAgICBzb3VyY2VEaXI6IFNPVVJDRV9ESVIsXG4gICAgICB9KVxuICAgICAgY29uc3QgYmFzZTogVml0ZVVzZXJDb25maWcgPSB7XG4gICAgICAgIHJvb3Q6IHRhcmdldERpcixcbiAgICAgICAgLy8gVGhlIGRlZmF1bHQgYDxyb290Pi9ub2RlX21vZHVsZXMvLnZpdGVgIHdvdWxkIGxhbmQgaW5zaWRlIHRoZVxuICAgICAgICAvLyBkZXBlbmRlbmN5IGxpbmssIGkuZS4gaW4gbGl2ZW1hcmsncyBzaGFyZWQgaW5zdGFsbC5cbiAgICAgICAgY2FjaGVEaXI6IGpvaW4odGFyZ2V0RGlyLCBcIi52aXRlXCIpLFxuICAgICAgICAvLyBNb3VudCBldmVyeXRoaW5nIChhc3NldCBVUkxzLCBtb2R1bGVwcmVsb2FkcywgZGV2IHNlcnZlcikgdW5kZXJcbiAgICAgICAgLy8gYGNvbmZpZy5iYXNlYCBzbyB0aGUgc2FtZSBidWlsZCB3b3JrcyBhdCByb290IG9yIGF0IGEgc3ViLXBhdGhcbiAgICAgICAgLy8gKGUuZy4gR2l0SHViIFBhZ2VzIGBodHRwczovL3VzZXIuZ2l0aHViLmlvL3JlcG8vYCkuIFRoZSByb3V0ZXJcbiAgICAgICAgLy8gYW5kIGFzc2V0LXBhdGggcmVzb2x2ZXIgbWlycm9yIHRoaXMgYXQgcnVudGltZS5cbiAgICAgICAgYmFzZTogb3B0cy5jb25maWcuYmFzZSA/IGAke29wdHMuY29uZmlnLmJhc2V9L2AgOiBcIi9cIixcbiAgICAgICAgLy8gb3V0RGlyIGxpdmVzIG91dHNpZGUgdGhlIHRhcmdldCByb290LCBzbyBWaXRlJ3MgcmVmdXNhbCB0b1xuICAgICAgICAvLyBlbXB0eSBvdXQtb2Ytcm9vdCBkaXJlY3RvcmllcyBuZWVkcyBgZW1wdHlPdXREaXJgLlxuICAgICAgICBidWlsZDogeyBvdXREaXIsIGVtcHR5T3V0RGlyOiB0cnVlIH0sXG4gICAgICAgIHJlc29sdmU6IHsgZGVkdXBlOiBbXCJyZWFjdFwiLCBcInJlYWN0LWRvbVwiXSB9LFxuICAgICAgICAvLyBGb3IgdGhlIFNTUiBidWlsZCBvbmx5LCBpbmxpbmUgZXZlcnkgbm9kZV9tb2R1bGVzIGRlcCBpbnRvXG4gICAgICAgIC8vIHNlcnZlci5qcy4gVGhlIHByZXJlbmRlciBzdGVwICh3aGljaCBydW5zIHNlcnZlci5qcyB3aXRoXG4gICAgICAgIC8vIE5vZGUpIHdhbGtzIG5vZGVfbW9kdWxlcyBmcm9tIHRoZSBidWlsZC8gZGlyIGFuZCBjYW4ndCByZWFjaFxuICAgICAgICAvLyBwYWNrYWdlcyBidXJpZWQgaW4gcG5wbSdzIGAucG5wbS8qL25vZGVfbW9kdWxlcy9gIChlLmcuXG4gICAgICAgIC8vIFRhblN0YWNrLWludGVybmFsIGFsaWFzZXMgbGlrZSBgaDMtdjJgKS4gU2VsZi1jb250YWluZWRcbiAgICAgICAgLy8gYnVuZGxlIGJ5cGFzc2VzIHRoZSBpc3N1ZS4gRGV2IFNTUiBrZWVwcyBleHRlcm5hbHMgKGZhc3RlcikuXG4gICAgICAgIC4uLihlbnYuY29tbWFuZCA9PT0gXCJidWlsZFwiICYmIHtcbiAgICAgICAgICBlbnZpcm9ubWVudHM6IHsgc3NyOiB7IHJlc29sdmU6IHsgbm9FeHRlcm5hbDogdHJ1ZSB9IH0gfSxcbiAgICAgICAgfSksXG4gICAgICB9XG4gICAgICBjb25zdCBvdmVycmlkZSA9IGF3YWl0IHJlc29sdmVWaXRlT3ZlcnJpZGUob3B0cy5jb25maWcudml0ZSwgZW52KVxuICAgICAgcmV0dXJuIG92ZXJyaWRlID8gbWVyZ2VDb25maWcoYmFzZSwgb3ZlcnJpZGUpIDogYmFzZVxuICAgIH0sXG4gICAgLy8gSGVyZSwgbm90IGluIGBzdHlsZXMvZ2VuZXJhbC5jc3NgLCBzbyBhbiBlc2NhcGVkIHN0eWxlc2hlZXQga2VlcHMgaXQuIFdvcmtzIG9ubHlcbiAgICAvLyB3aGlsZSB0aGlzIHBsdWdpbiBwcmVjZWRlcyBgdGFpbHdpbmQoKWA6IGJvdGggYXJlIGBwcmVgLCBzbyBhcnJheSBvcmRlciBkZWNpZGVzLlxuICAgIHRyYW5zZm9ybToge1xuICAgICAgZmlsdGVyOiB7IGlkOiAvXFwuY3NzKFxcP3wkKS8gfSxcbiAgICAgIGhhbmRsZXIoY3NzKSB7XG4gICAgICAgIHJldHVybiBleGNsdWRlVGFpbHdpbmRTb3VyY2VzKHsgY3NzLCB0YXJnZXREaXIgfSlcbiAgICAgIH0sXG4gICAgfSxcbiAgICByZXNvbHZlSWQoaWQpIHtcbiAgICAgIGlmIChpZCA9PT0gVklSVFVBTF9JRCkgcmV0dXJuIFZJUlRVQUxfUkVTT0xWRURfSURcbiAgICAgIHJldHVybiByZXNvbHZlVGFyZ2V0RXhwb3J0KHsgaWQsIHRhcmdldERpciwgZXhwb3J0czogcGFja2FnZUpzb24uZXhwb3J0cyB9KSA/PyBudWxsXG4gICAgfSxcbiAgICBsb2FkKGlkKSB7XG4gICAgICBpZiAoaWQgIT09IFZJUlRVQUxfUkVTT0xWRURfSUQpIHJldHVybiBudWxsXG4gICAgICBjb25zdCBjb25maWcgPSBXZWJzaXRlQ29uZmlnLnBhcnNlKG9wdHMuY29uZmlnKVxuICAgICAgY29uc3QgYmFubmVySHRtbCA9IGNvbmZpZy5iYW5uZXJcbiAgICAgICAgPyByZW5kZXJJbmxpbmVNYXJrZG93bihjb25maWcuYmFubmVyLCBjb25maWcuYmFzZSlcbiAgICAgICAgOiB1bmRlZmluZWRcbiAgICAgIHJldHVybiBbXG4gICAgICAgIGBleHBvcnQgY29uc3QgY29uZmlnID0gJHtKU09OLnN0cmluZ2lmeShjb25maWcpfWAsXG4gICAgICAgIGBleHBvcnQgY29uc3QgYmFubmVySHRtbCA9ICR7SlNPTi5zdHJpbmdpZnkoYmFubmVySHRtbCl9YCxcbiAgICAgIF0uam9pbihcIlxcblwiKVxuICAgIH0sXG4gICAgY29uZmlndXJlU2VydmVyKHNlcnZlcikge1xuICAgICAgLy8gVml0ZSB3YXRjaGVzIG9ubHkgaXRzIHJvb3QgKHRoZSB0YXJnZXQpOyB0aGUgZmlsZXMgdGhlIHRhcmdldCBpc1xuICAgICAgLy8gY29waWVkIGZyb20gam9pbiBpdHMgd2F0Y2hlciBoZXJlLiBgLmxpdmVtYXJrL2AgYWx3YXlzIGV4aXN0c1xuICAgICAgLy8gYmVjYXVzZSB0aGUgdGFyZ2V0IGxpdmVzIGluc2lkZSBpdC5cbiAgICAgIHNlcnZlci53YXRjaGVyLmFkZChbb3B0cy5jb25maWcuY29uZmlnUGF0aCwgb3ZlcnJpZGVzUm9vdF0pXG4gICAgICBpZiAoIUlTX0lOU1RBTExFRCkgc2VydmVyLndhdGNoZXIuYWRkKFNPVVJDRV9ESVIpXG4gICAgICBzZXJ2ZXIud2F0Y2hlci5vbihcImNoYW5nZVwiLCBmaWxlID0+IG9uQ2hhbmdlKGZpbGUsIFwiY2hhbmdlXCIpKVxuICAgICAgc2VydmVyLndhdGNoZXIub24oXCJhZGRcIiwgZmlsZSA9PiBvbkNoYW5nZShmaWxlLCBcImFkZFwiKSlcbiAgICAgIHNlcnZlci53YXRjaGVyLm9uKFwidW5saW5rXCIsIGZpbGUgPT4gb25DaGFuZ2UoZmlsZSwgXCJ1bmxpbmtcIikpXG4gICAgICBzZXJ2ZXIud2F0Y2hlci5vbihcInVubGlua0RpclwiLCBmaWxlID0+IG9uQ2hhbmdlKGZpbGUsIFwidW5saW5rXCIpKVxuXG4gICAgICBmdW5jdGlvbiBvbkNoYW5nZShmaWxlOiBzdHJpbmcsIGtpbmQ6IFwiY2hhbmdlXCIgfCBcImFkZFwiIHwgXCJ1bmxpbmtcIikge1xuICAgICAgICBpZiAoZmlsZSA9PT0gb3B0cy5jb25maWcuY29uZmlnUGF0aCkge1xuICAgICAgICAgIHNlcnZlci5yZXN0YXJ0KClcbiAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNXaXRoaW4oZmlsZSwgdGFyZ2V0RGlyKSB8fCBpc1dpdGhpbihmaWxlLCBvdXREaXIpKSByZXR1cm5cbiAgICAgICAgY29uc3Qgb3ZlcmxheUhpdCA9IG1hdGNoUGF0aChmaWxlLCBvdmVycmlkZXNSb290KVxuICAgICAgICBpZiAob3ZlcmxheUhpdCkge1xuICAgICAgICAgIHN5bmNPdmVybGF5KG92ZXJsYXlIaXQsIGtpbmQsIHRhcmdldERpciwgb3ZlcnJpZGVzUm9vdClcbiAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuICAgICAgICBjb25zdCBzb3VyY2VIaXQgPSBtYXRjaFBhdGgoZmlsZSwgU09VUkNFX0RJUilcbiAgICAgICAgaWYgKHNvdXJjZUhpdCAmJiAhc291cmNlSGl0LnJlbC5pbmNsdWRlcyhcInJvdXRlVHJlZS5nZW4udHNcIikpIHtcbiAgICAgICAgICBzeW5jU291cmNlKHNvdXJjZUhpdCwga2luZCwgdGFyZ2V0RGlyLCBvdmVycmlkZXNSb290KVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcbiAgfVxufVxuXG5pbnRlcmZhY2UgSGl0IHtcbiAgcmVsOiBzdHJpbmdcbiAgY2F0ZWdvcnk6IFwiZm9sZGVyXCIgfCBcImZpbGVcIiB8IG51bGxcbn1cblxuZnVuY3Rpb24gbWF0Y2hQYXRoKGZpbGU6IHN0cmluZywgcm9vdDogc3RyaW5nKTogSGl0IHwgbnVsbCB7XG4gIGlmICghaXNXaXRoaW4oZmlsZSwgcm9vdCkgfHwgZmlsZSA9PT0gcm9vdCkgcmV0dXJuIG51bGxcbiAgY29uc3QgcmVsID0gZmlsZS5zbGljZShyb290Lmxlbmd0aCArIHNlcC5sZW5ndGgpXG4gIHJldHVybiB7IHJlbCwgY2F0ZWdvcnk6IGNsYXNzaWZ5KHJlbCkgfVxufVxuXG5mdW5jdGlvbiBpc1dpdGhpbihmaWxlOiBzdHJpbmcsIGRpcjogc3RyaW5nKSB7XG4gIHJldHVybiBmaWxlID09PSBkaXIgfHwgZmlsZS5zdGFydHNXaXRoKGAke2Rpcn0ke3NlcH1gKVxufVxuXG5mdW5jdGlvbiBjbGFzc2lmeShyZWw6IHN0cmluZyk6IFwiZm9sZGVyXCIgfCBcImZpbGVcIiB8IG51bGwge1xuICBjb25zdCBbaGVhZF0gPSByZWwuc3BsaXQoc2VwKVxuICBpZiAoaGVhZCAmJiBFU0NBUEFCTEVfRk9MREVSUy5pbmNsdWRlcyhoZWFkKSkgcmV0dXJuIFwiZm9sZGVyXCJcbiAgaWYgKEVTQ0FQQUJMRV9GSUxFUy5pbmNsdWRlcyhyZWwpKSByZXR1cm4gXCJmaWxlXCJcbiAgLy8gTm9uLWVzY2FwYWJsZSBzb3VyY2UgZmlsZXMgc3RpbGwgbmVlZCB0byBmbG93IGludG8gdGFyZ2V0IGR1cmluZ1xuICAvLyBsaXZlbWFyaydzIG93biBkZXYg4oCUIHRoZSB1c2VyIGlzIGVkaXRpbmcgdGhlIGNhbm9uaWNhbCBzb3VyY2UuXG4gIHJldHVybiBudWxsXG59XG5cbmZ1bmN0aW9uIHN5bmNPdmVybGF5KFxuICBoaXQ6IEhpdCxcbiAga2luZDogXCJjaGFuZ2VcIiB8IFwiYWRkXCIgfCBcInVubGlua1wiLFxuICB0YXJnZXREaXI6IHN0cmluZyxcbiAgb3ZlcnJpZGVzUm9vdDogc3RyaW5nLFxuKSB7XG4gIGlmICghaGl0LmNhdGVnb3J5KSByZXR1cm5cbiAgY29uc3QgZGVzdCA9IGpvaW4odGFyZ2V0RGlyLCBoaXQucmVsKVxuICBjb25zdCBzb3VyY2UgPSBqb2luKFNPVVJDRV9ESVIsIGhpdC5yZWwpXG4gIGlmIChraW5kID09PSBcInVubGlua1wiKSB7XG4gICAgLy8gQ29weSBhIGZpbGUncyBkZWZhdWx0IG92ZXIgdGhlIGVzY2FwZSBpbiBvbmUgd3JpdGU6IGFuIHVubGluayB0aGVuXG4gICAgLy8gYW4gYWRkIHJlYWNoZXMgVml0ZSBhcyB0d28gZXZlbnRzIGFuZCBjb3N0cyBhIHBhZ2UgcmVsb2FkLlxuICAgIGlmICghZXhpc3RzU3luYyhzb3VyY2UpIHx8IHN0YXRTeW5jKHNvdXJjZSkuaXNEaXJlY3RvcnkoKSkge1xuICAgICAgcm1TeW5jKGRlc3QsIHsgZm9yY2U6IHRydWUsIHJlY3Vyc2l2ZTogdHJ1ZSB9KVxuICAgIH1cbiAgICBpZiAoZXhpc3RzU3luYyhzb3VyY2UpKSBjcFN5bmMoc291cmNlLCBkZXN0LCB7IHJlY3Vyc2l2ZTogdHJ1ZSwgZm9yY2U6IHRydWUgfSlcbiAgICByZXR1cm5cbiAgfVxuICBjb25zdCBvdmVybGF5ID0gam9pbihvdmVycmlkZXNSb290LCBoaXQucmVsKVxuICBpZiAoZXhpc3RzU3luYyhvdmVybGF5KSkgY3BTeW5jKG92ZXJsYXksIGRlc3QsIHsgcmVjdXJzaXZlOiB0cnVlLCBmb3JjZTogdHJ1ZSB9KVxufVxuXG5mdW5jdGlvbiBzeW5jU291cmNlKFxuICBoaXQ6IEhpdCxcbiAga2luZDogXCJjaGFuZ2VcIiB8IFwiYWRkXCIgfCBcInVubGlua1wiLFxuICB0YXJnZXREaXI6IHN0cmluZyxcbiAgb3ZlcnJpZGVzUm9vdDogc3RyaW5nLFxuKSB7XG4gIC8vIElmIHRoZSBjb25zdW1lciBoYXMgYW4gb3ZlcmxheSBmb3IgdGhpcyBmaWxlIChhbmQgaXQncyBlc2NhcGFibGUpLFxuICAvLyB0aGUgb3ZlcmxheSB3aW5zIOKAlCBpZ25vcmUgc291cmNlIGNoYW5nZXMuXG4gIGlmIChoaXQuY2F0ZWdvcnkgJiYgZXhpc3RzU3luYyhqb2luKG92ZXJyaWRlc1Jvb3QsIGhpdC5yZWwpKSkgcmV0dXJuXG4gIGNvbnN0IGRlc3QgPSBqb2luKHRhcmdldERpciwgaGl0LnJlbClcbiAgY29uc3Qgc291cmNlID0gam9pbihTT1VSQ0VfRElSLCBoaXQucmVsKVxuICBpZiAoa2luZCA9PT0gXCJ1bmxpbmtcIikge1xuICAgIHJtU3luYyhkZXN0LCB7IGZvcmNlOiB0cnVlLCByZWN1cnNpdmU6IHRydWUgfSlcbiAgICByZXR1cm5cbiAgfVxuICBpZiAoZXhpc3RzU3luYyhzb3VyY2UpKSBjcFN5bmMoc291cmNlLCBkZXN0LCB7IHJlY3Vyc2l2ZTogdHJ1ZSwgZm9yY2U6IHRydWUgfSlcbn1cblxuLyoqIFJlc29sdmUgbGl2ZW1hcmsuY29uZmlnLnRzJ3MgYHZpdGVgIGZpZWxkIOKAlCBlaXRoZXIgYSBjb25maWcgb2JqZWN0XG4gKiAgb3IgYSBmdW5jdGlvbiBgKGVudikgPT4gY29uZmlnYCAobWF0Y2hpbmcgVml0ZSdzIG93biBgZGVmaW5lQ29uZmlnYCkuXG4gKiAgU2NoZW1hIHN0b3JlcyBpdCBhcyBgdW5rbm93bmA7IHR5cGluZyBmb3IgdGhlIGNvbnN1bWVyJ3MgZWRpdG9yXG4gKiAgbGl2ZXMgb24ge0BsaW5rIFZpdGVPdmVycmlkZX0uICovXG5hc3luYyBmdW5jdGlvbiByZXNvbHZlVml0ZU92ZXJyaWRlKFxuICB2aXRlOiB1bmtub3duLFxuICBlbnY6IENvbmZpZ0Vudixcbik6IFByb21pc2U8UmVjb3JkPHN0cmluZywgdW5rbm93bj4gfCBudWxsPiB7XG4gIGlmICghdml0ZSkgcmV0dXJuIG51bGxcbiAgaWYgKHR5cGVvZiB2aXRlID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBSZWZsZWN0LmFwcGx5KHZpdGUsIHVuZGVmaW5lZCwgW2Vudl0pXG4gICAgcmV0dXJuIGlzT2JqZWN0KHJlc3VsdCkgPyByZXN1bHQgOiBudWxsXG4gIH1cbiAgcmV0dXJuIGlzT2JqZWN0KHZpdGUpID8gdml0ZSA6IG51bGxcbn1cblxuZnVuY3Rpb24gaXNPYmplY3QodjogdW5rbm93bik6IHYgaXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4ge1xuICByZXR1cm4gdiAhPT0gbnVsbCAmJiB0eXBlb2YgdiA9PT0gXCJvYmplY3RcIlxufVxuIl19
|
package/build/router.js
CHANGED
|
@@ -23,6 +23,11 @@ export function getRouter() {
|
|
|
23
23
|
router,
|
|
24
24
|
queryClient,
|
|
25
25
|
});
|
|
26
|
+
// Route HMR swaps a route's options but keeps its loader data, so an edited article
|
|
27
|
+
// would stay stale until a full page reload.
|
|
28
|
+
if (import.meta.hot && typeof window !== "undefined") {
|
|
29
|
+
import.meta.hot.on("vite:afterUpdate", () => router.invalidate());
|
|
30
|
+
}
|
|
26
31
|
return router;
|
|
27
32
|
}
|
|
28
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
33
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc291cmNlL3JvdXRlci50c3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQTtBQUN6QyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sdUJBQXVCLENBQUE7QUFDbkQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHdCQUF3QixDQUFBO0FBQ3JELE9BQU8sRUFBRSw4QkFBOEIsRUFBRSxNQUFNLGtDQUFrQyxDQUFBO0FBQ2pGLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLHNDQUF1QyxDQUFBO0FBQzVFLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSwwQkFBMkIsQ0FBQTtBQUNwRCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sb0JBQW9CLENBQUE7QUFFOUMsTUFBTSxVQUFVLFNBQVM7SUFDdkIsTUFBTSxXQUFXLEdBQUcsSUFBSSxXQUFXLEVBQUUsQ0FBQTtJQUVyQyxNQUFNLE1BQU0sR0FBRyxZQUFZLENBQUM7UUFDMUIsU0FBUztRQUNULFFBQVEsRUFBRSxNQUFNLENBQUMsSUFBSTtRQUNyQixPQUFPLEVBQUUsRUFBRSxXQUFXLEVBQUU7UUFDeEIsYUFBYSxFQUFFLFFBQVE7UUFDdkIsY0FBYyxFQUFFLFFBQVE7UUFDeEIscUJBQXFCLEVBQUUsSUFBSTtRQUMzQixxQkFBcUIsRUFBRSxvQkFBb0I7UUFDM0Msd0JBQXdCLEVBQUUsR0FBRyxFQUFFLENBQUMsS0FBQyxRQUFRLEtBQUc7UUFDNUMsaUJBQWlCLEVBQUUsSUFBSTtLQUN4QixDQUFDLENBQUE7SUFFRiw4QkFBOEIsQ0FBQztRQUM3QixNQUFNO1FBQ04sV0FBVztLQUNaLENBQUMsQ0FBQTtJQUVGLG9GQUFvRjtJQUNwRiw2Q0FBNkM7SUFDN0MsSUFBSSxPQUFPLElBQUksQ0FBQyxHQUFHLElBQUksT0FBTyxNQUFNLEtBQUssV0FBVyxFQUFFLENBQUM7UUFDckQsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxrQkFBa0IsRUFBRSxHQUFHLEVBQUUsQ0FBQyxNQUFNLENBQUMsVUFBVSxFQUFFLENBQUMsQ0FBQTtJQUNuRSxDQUFDO0lBRUQsT0FBTyxNQUFNLENBQUE7QUFDZixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY29uZmlnIH0gZnJvbSBcImxpdmVtYXJrOnZpcnR1YWxcIlxuaW1wb3J0IHsgUXVlcnlDbGllbnQgfSBmcm9tIFwiQHRhbnN0YWNrL3JlYWN0LXF1ZXJ5XCJcbmltcG9ydCB7IGNyZWF0ZVJvdXRlciB9IGZyb20gXCJAdGFuc3RhY2svcmVhY3Qtcm91dGVyXCJcbmltcG9ydCB7IHNldHVwUm91dGVyU3NyUXVlcnlJbnRlZ3JhdGlvbiB9IGZyb20gXCJAdGFuc3RhY2svcmVhY3Qtcm91dGVyLXNzci1xdWVyeVwiXG5pbXBvcnQgeyBEZWZhdWx0Q2F0Y2hCb3VuZGFyeSB9IGZyb20gXCIuL2NvbXBvbmVudHMvRGVmYXVsdENhdGNoQm91bmRhcnkudHN4XCJcbmltcG9ydCB7IE5vdEZvdW5kIH0gZnJvbSBcIi4vY29tcG9uZW50cy9Ob3RGb3VuZC50c3hcIlxuaW1wb3J0IHsgcm91dGVUcmVlIH0gZnJvbSBcIi4vcm91dGVUcmVlLmdlbi50c1wiXG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRSb3V0ZXIoKSB7XG4gIGNvbnN0IHF1ZXJ5Q2xpZW50ID0gbmV3IFF1ZXJ5Q2xpZW50KClcblxuICBjb25zdCByb3V0ZXIgPSBjcmVhdGVSb3V0ZXIoe1xuICAgIHJvdXRlVHJlZSxcbiAgICBiYXNlcGF0aDogY29uZmlnLmJhc2UsXG4gICAgY29udGV4dDogeyBxdWVyeUNsaWVudCB9LFxuICAgIHRyYWlsaW5nU2xhc2g6IFwiYWx3YXlzXCIsXG4gICAgZGVmYXVsdFByZWxvYWQ6IFwiaW50ZW50XCIsXG4gICAgZGVmYXVsdFZpZXdUcmFuc2l0aW9uOiB0cnVlLFxuICAgIGRlZmF1bHRFcnJvckNvbXBvbmVudDogRGVmYXVsdENhdGNoQm91bmRhcnksXG4gICAgZGVmYXVsdE5vdEZvdW5kQ29tcG9uZW50OiAoKSA9PiA8Tm90Rm91bmQgLz4sXG4gICAgc2Nyb2xsUmVzdG9yYXRpb246IHRydWUsXG4gIH0pXG5cbiAgc2V0dXBSb3V0ZXJTc3JRdWVyeUludGVncmF0aW9uKHtcbiAgICByb3V0ZXIsXG4gICAgcXVlcnlDbGllbnQsXG4gIH0pXG5cbiAgLy8gUm91dGUgSE1SIHN3YXBzIGEgcm91dGUncyBvcHRpb25zIGJ1dCBrZWVwcyBpdHMgbG9hZGVyIGRhdGEsIHNvIGFuIGVkaXRlZCBhcnRpY2xlXG4gIC8vIHdvdWxkIHN0YXkgc3RhbGUgdW50aWwgYSBmdWxsIHBhZ2UgcmVsb2FkLlxuICBpZiAoaW1wb3J0Lm1ldGEuaG90ICYmIHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICBpbXBvcnQubWV0YS5ob3Qub24oXCJ2aXRlOmFmdGVyVXBkYXRlXCIsICgpID0+IHJvdXRlci5pbnZhbGlkYXRlKCkpXG4gIH1cblxuICByZXR1cm4gcm91dGVyXG59XG5cbmRlY2xhcmUgbW9kdWxlIFwiQHRhbnN0YWNrL3JlYWN0LXJvdXRlclwiIHtcbiAgaW50ZXJmYWNlIFJlZ2lzdGVyIHtcbiAgICByb3V0ZXI6IFJldHVyblR5cGU8dHlwZW9mIGdldFJvdXRlcj5cbiAgfVxufVxuIl19
|
package/build/routes/$.js
CHANGED
|
@@ -75,6 +75,10 @@ export const Route = createFileRoute("/$")({
|
|
|
75
75
|
});
|
|
76
76
|
function Component() {
|
|
77
77
|
const data = Route.useLoaderData();
|
|
78
|
+
// Undefined for one render when HMR reloads a deleted article, before the root's
|
|
79
|
+
// not-found takes over.
|
|
80
|
+
if (!data)
|
|
81
|
+
return null;
|
|
78
82
|
return (_jsx(Layout, { withSidebar: data.sidebar, children: _jsx(Page, {}) }));
|
|
79
83
|
}
|
|
80
84
|
function Page() {
|
|
@@ -91,4 +95,4 @@ function Page() {
|
|
|
91
95
|
}
|
|
92
96
|
return _jsx(Article, { article: data, highlight: search.highlight });
|
|
93
97
|
}
|
|
94
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
98
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiJC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NvdXJjZS9yb3V0ZXMvJC50c3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQTtBQUN6QyxPQUFPLEVBQUUsZUFBZSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQTtBQUM1RSxPQUFPLEVBQUUsQ0FBQyxFQUFFLE1BQU0sS0FBSyxDQUFBO0FBQ3ZCLE9BQU8sRUFDTCxjQUFjLEVBQ2QsWUFBWSxFQUNaLFdBQVcsRUFDWCxjQUFjLEdBQ2YsTUFBTSx1QkFBdUIsQ0FBQTtBQUM5QixPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sbUJBQW1CLENBQUE7QUFDL0MsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLG9CQUFvQixDQUFBO0FBQ2xELE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSwwQkFBMkIsQ0FBQTtBQUNuRCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sNEJBQTZCLENBQUE7QUFDdkQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGlDQUFrQyxDQUFBO0FBQ2pFLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSx5QkFBMEIsQ0FBQTtBQUNqRCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sMkJBQTRCLENBQUE7QUFFckQsTUFBTSxDQUFDLE1BQU0sS0FBSyxHQUFHLGVBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN6Qyw2RUFBNkU7SUFDN0UsY0FBYyxFQUFFLENBQUMsQ0FBQyxXQUFXLENBQUMsRUFBRSxTQUFTLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLFFBQVEsRUFBRSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDO0lBQ3BGLE1BQU0sRUFBRSxDQUFDLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRTtRQUNyQixJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxD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QUFBO0FBQ2hFLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjb25maWcgfSBmcm9tIFwibGl2ZW1hcms6dmlydHVhbFwiXG5pbXBvcnQgeyBjcmVhdGVGaWxlUm91dGUsIG5vdEZvdW5kLCByZWRpcmVjdCB9IGZyb20gXCJAdGFuc3RhY2svcmVhY3Qtcm91dGVyXCJcbmltcG9ydCB7IHogfSBmcm9tIFwiem9kXCJcbmltcG9ydCB7XG4gIGN1cnJlbnRTZWN0aW9uLFxuICBmaXJzdEFydGljbGUsXG4gIGhvbWVBcnRpY2xlLFxuICBzb3J0ZWRBcnRpY2xlcyxcbn0gZnJvbSBcIi4uL2NvbnRlbnQvYXJ0aWNsZS50c1wiXG5pbXBvcnQgeyBzZWN0aW9uVGFncyB9IGZyb20gXCIuLi9jb250ZW50L3RhZy50c1wiXG5pbXBvcnQgeyBidWlsZFBhZ2VIZWFkIH0gZnJvbSBcIi4uL2hlbHBlcnMvaGVhZC50c1wiXG5pbXBvcnQgeyBBcnRpY2xlIH0gZnJvbSBcIi4uL2NvbXBvbmVudHMvQXJ0aWNsZS50c3hcIlxuaW1wb3J0IHsgQmxvZ0luZGV4IH0gZnJvbSBcIi4uL2NvbXBvbmVudHMvQmxvZ0luZGV4LnRzeFwiXG5pbXBvcnQgeyBDaGFuZ2Vsb2dJbmRleCB9IGZyb20gXCIuLi9jb21wb25lbnRzL0NoYW5nZWxvZ0luZGV4LnRzeFwiXG5pbXBvcnQgeyBMYXlvdXQgfSBmcm9tIFwiLi4vY29tcG9uZW50cy9MYXlvdXQudHN4XCJcbmltcG9ydCB7IFRhZ0luZGV4IH0gZnJvbSBcIi4uL2NvbXBvbmVudHMvVGFnSW5kZXgudHN4XCJcblxuZXhwb3J0IGNvbnN0IFJvdXRlID0gY3JlYXRlRmlsZVJvdXRlKFwiLyRcIikoe1xuICAvLyBMb29zZSwgc28ga2V5cyB0aGlzIHJvdXRlIGRvZXMgbm90IG93biAoVVRNIHRhZ3MsIGRldnRvb2xzIGZsYWdzKSBzdXJ2aXZlLlxuICB2YWxpZGF0ZVNlYXJjaDogei5sb29zZU9iamVjdCh7IGhpZ2hsaWdodDogei5zdHJpbmcoKS5vcHRpb25hbCgpLmNhdGNoKHVuZGVmaW5lZCkgfSksXG4gIGxvYWRlcjogKHsgcGFyYW1zIH0pID0+IHtcbiAgICBpZiAoIXBhcmFtcy5fc3BsYXQpIHtcbiAgICAgIGlmIChob21lQXJ0aWNsZSkgcmV0dXJuIHsgLi4uaG9tZUFydGljbGUsIHNpZGViYXI6IGhvbWVBcnRpY2xlLnNpZGViYXIgfVxuICAgICAgaWYgKCFmaXJzdEFydGljbGUpIHRocm93IG5vdEZvdW5kKClcbiAgICAgIHRocm93IHJlZGlyZWN0KHtcbiAgICAgICAgdG86IFwiLyRcIixcbiAgICAgICAgcGFyYW1zOiB7IF9zcGxhdDogZmlyc3RBcnRpY2xlLnBhdGgucmVwbGFjZSgvXlxcL3xcXC8kL2csIFwiXCIpIH0sXG4gICAgICB9KVxuICAgIH1cbiAgICBjb25zdCBzcGxhdCA9IGAvJHtwYXJhbXMuX3NwbGF0fS9gXG4gICAgY29uc3QgYXJ0aWNsZSA9IHNvcnRlZEFydGljbGVzLmZpbmQoYSA9PiBhLnBhdGggPT09IHNwbGF0KVxuICAgIGlmIChhcnRpY2xlKSByZXR1cm4gYXJ0aWNsZVxuXG4gICAgY29uc3Qgc2VjdGlvbiA9IGN1cnJlbnRTZWN0aW9uKHNwbGF0KVxuICAgIGlmIChzZWN0aW9uPy50eXBlID09PSBcImNoYW5nZWxvZ1wiICYmIHNlY3Rpb24ucHJlZml4ID09PSBzcGxhdCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY2hhbmdlbG9nSW5kZXg6IHRydWUgYXMgY29uc3QsXG4gICAgICAgIHNlY3Rpb25QcmVmaXg6IHNlY3Rpb24ucHJlZml4LFxuICAgICAgICB0aXRsZTogc2VjdGlvbi50aXRsZSxcbiAgICAgICAgc2lkZWJhcjogdHJ1ZSxcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHNlY3Rpb24/LnR5cGUgPT09IFwiYmxvZ1wiKSB7XG4gICAgICBpZiAoc2VjdGlvbi5wcmVmaXggPT09IHNwbGF0KSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgYmxvZ0luZGV4OiB0cnVlIGFzIGNvbnN0LFxuICAgICAgICAgIHNlY3Rpb25QcmVmaXg6IHNlY3Rpb24ucHJlZml4LFxuICAgICAgICAgIHRpdGxlOiBzZWN0aW9uLnRpdGxlLFxuICAgICAgICAgIHNpZGViYXI6IHRydWUsXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgY29uc3QgdGFnTWF0Y2ggPSBzcGxhdC5tYXRjaChuZXcgUmVnRXhwKGBeJHtzZWN0aW9uLnByZWZpeH10YWdzLyhbXi9dKykvJGApKVxuICAgICAgY29uc3QgdGFnID0gdGFnTWF0Y2g/LlsxXVxuICAgICAgaWYgKHRhZykge1xuICAgICAgICBjb25zdCB0YWdNYXAgPSBzZWN0aW9uVGFncy5nZXQoc2VjdGlvbi5wcmVmaXgpXG4gICAgICAgIGlmICh0YWdNYXA/Lmhhcyh0YWcpKSB7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHRhZ1BhZ2U6IHRydWUgYXMgY29uc3QsXG4gICAgICAgICAgICBzZWN0aW9uUHJlZml4OiBzZWN0aW9uLnByZWZpeCxcbiAgICAgICAgICAgIHRhZyxcbiAgICAgICAgICAgIHRpdGxlOiBgUG9zdHMgdGFnZ2VkICcke3RhZ30nYCxcbiAgICAgICAgICAgIHNpZGViYXI6IHRydWUsXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhyb3cgbm90Rm91bmQoKVxuICB9LFxuICBoZWFkOiAoeyBsb2FkZXJEYXRhLCBwYXJhbXMgfSkgPT5cbiAgICBidWlsZFBhZ2VIZWFkKHtcbiAgICAgIGNvbmZpZyxcbiAgICAgIHBhdGg6IHBhcmFtcy5fc3BsYXQgPyBgLyR7cGFyYW1zLl9zcGxhdH0vYCA6IFwiL1wiLFxuICAgICAgdGl0bGU6IGxvYWRlckRhdGE/LnRpdGxlLFxuICAgICAgZGVzY3JpcHRpb246XG4gICAgICAgIGxvYWRlckRhdGEgJiYgXCJkZXNjcmlwdGlvblwiIGluIGxvYWRlckRhdGEgPyBsb2FkZXJEYXRhLmRlc2NyaXB0aW9uIDogdW5kZWZpbmVkLFxuICAgICAgaW1hZ2U6IGxvYWRlckRhdGEgJiYgXCJpbWFnZVwiIGluIGxvYWRlckRhdGEgPyBsb2FkZXJEYXRhLmltYWdlIDogdW5kZWZpbmVkLFxuICAgICAgaXNBcnRpY2xlOiBsb2FkZXJEYXRhICYmIFwiZmlsZVwiIGluIGxvYWRlckRhdGEsXG4gICAgfSksXG4gIGNvbXBvbmVudDogQ29tcG9uZW50LFxufSlcblxuZnVuY3Rpb24gQ29tcG9uZW50KCkge1xuICBjb25zdCBkYXRhID0gUm91dGUudXNlTG9hZGVyRGF0YSgpXG4gIC8vIFVuZGVmaW5lZCBmb3Igb25lIHJlbmRlciB3aGVuIEhNUiByZWxvYWRzIGEgZGVsZXRlZCBhcnRpY2xlLCBiZWZvcmUgdGhlIHJvb3Qnc1xuICAvLyBub3QtZm91bmQgdGFrZXMgb3Zlci5cbiAgaWYgKCFkYXRhKSByZXR1cm4gbnVsbFxuICByZXR1cm4gKFxuICAgIDxMYXlvdXQgd2l0aFNpZGViYXI9e2RhdGEuc2lkZWJhcn0+XG4gICAgICA8UGFnZSAvPlxuICAgIDwvTGF5b3V0PlxuICApXG59XG5cbmZ1bmN0aW9uIFBhZ2UoKSB7XG4gIGNvbnN0IGRhdGEgPSBSb3V0ZS51c2VMb2FkZXJEYXRhKClcbiAgY29uc3Qgc2VhcmNoID0gUm91dGUudXNlU2VhcmNoKClcbiAgaWYgKFwiYmxvZ0luZGV4XCIgaW4gZGF0YSkge1xuICAgIHJldHVybiA8QmxvZ0luZGV4IHNlY3Rpb25QcmVmaXg9e2RhdGEuc2VjdGlvblByZWZpeH0gLz5cbiAgfVxuICBpZiAoXCJjaGFuZ2Vsb2dJbmRleFwiIGluIGRhdGEpIHtcbiAgICByZXR1cm4gPENoYW5nZWxvZ0luZGV4IHNlY3Rpb25QcmVmaXg9e2RhdGEuc2VjdGlvblByZWZpeH0gLz5cbiAgfVxuICBpZiAoXCJ0YWdQYWdlXCIgaW4gZGF0YSkge1xuICAgIHJldHVybiA8VGFnSW5kZXggc2VjdGlvblByZWZpeD17ZGF0YS5zZWN0aW9uUHJlZml4fSB0YWc9e2RhdGEudGFnfSAvPlxuICB9XG4gIHJldHVybiA8QXJ0aWNsZSBhcnRpY2xlPXtkYXRhfSBoaWdobGlnaHQ9e3NlYXJjaC5oaWdobGlnaHR9IC8+XG59XG4iXX0=
|
package/build/vite.config.js
CHANGED
|
@@ -27,7 +27,9 @@ export default defineConfig({
|
|
|
27
27
|
livemark({ config }),
|
|
28
28
|
robots({ config }),
|
|
29
29
|
agents({ config }),
|
|
30
|
-
|
|
30
|
+
// Its server-to-browser console piping and Vite's browser-to-server forwarding echo
|
|
31
|
+
// any browser error back and forth forever.
|
|
32
|
+
devtools({ consolePiping: { enabled: false } }),
|
|
31
33
|
tailwind(),
|
|
32
34
|
contentCollections({ configPath: "content-collections.ts" }),
|
|
33
35
|
tanstackStart({
|
|
@@ -55,4 +57,4 @@ export default defineConfig({
|
|
|
55
57
|
svgr(),
|
|
56
58
|
],
|
|
57
59
|
});
|
|
58
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
60
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidml0ZS5jb25maWcuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zb3VyY2Uvdml0ZS5jb25maWcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxrQkFBa0IsTUFBTSwyQkFBMkIsQ0FBQTtBQUMxRCxPQUFPLFFBQVEsTUFBTSxtQkFBbUIsQ0FBQTtBQUN4QyxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0seUJBQXlCLENBQUE7QUFDbEQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLG1DQUFtQyxDQUFBO0FBQ2pFLE9BQU8sS0FBSyxNQUFNLHNCQUFzQixDQUFBO0FBQ3hDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxNQUFNLENBQUE7QUFDbkMsT0FBTyxJQUFJLE1BQU0sa0JBQWtCLENBQUE7QUFDbkMsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLDBCQUEwQixDQUFBO0FBQ3JELE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQTtBQUNqRCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sNEJBQTRCLENBQUE7QUFDckQsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLDBCQUEwQixDQUFBO0FBRWpELE1BQU0sTUFBTSxHQUFHLE1BQU0sVUFBVSxFQUFFLENBQUE7QUFFakMsdUVBQXVFO0FBQ3ZFLHdFQUF3RTtBQUN4RSx5RUFBeUU7QUFDekUsbURBQW1EO0FBQ25ELE1BQU0sYUFBYSxHQUFHLE1BQU0sQ0FBQyxJQUFJO0lBQy9CLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxRQUFRLElBQUksRUFBRSxDQUFDO1NBQ3BCLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssTUFBTSxDQUFDO1NBQzlCLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDVCxJQUFJLEVBQUUsR0FBRyxNQUFNLENBQUMsSUFBSSxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsTUFBTSxTQUFTO1FBQzlDLE9BQU8sRUFBRSxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUU7S0FDM0IsQ0FBQyxDQUFDO0lBQ1AsQ0FBQyxDQUFDLEVBQUUsQ0FBQTtBQUVOLGVBQWUsWUFBWSxDQUFDO0lBQzFCLE9BQU8sRUFBRTtRQUNQLFFBQVEsQ0FBQyxFQUFFLE1BQU0sRUFBRSxDQUFDO1FBQ3BCLE1BQU0sQ0FBQyxFQUFFLE1BQU0sRUFBRSxDQUFDO1FBQ2xCLE1BQU0sQ0FBQyxFQUFFLE1BQU0sRUFBRSxDQUFDO1FBQ2xCLG9GQUFvRjtRQUNwRiw0Q0FBNEM7UUFDNUMsUUFBUSxDQUFDLEVBQUUsYUFBYSxFQUFFLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxFQUFFLENBQUM7UUFDL0MsUUFBUSxFQUFFO1FBQ1Ysa0JBQWtCLENBQUMsRUFBRSxVQUFVLEVBQUUsd0JBQXdCLEVBQUUsQ0FBQztRQUM1RCxhQUFhLENBQUM7WUFDWixZQUFZLEVBQUUsR0FBRztZQUNqQixpRUFBaUU7WUFDakUsZ0VBQWdFO1lBQ2hFLHlEQUF5RDtZQUN6RCxLQUFLLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsR0FBRyxhQUFhLENBQUM7WUFDMUUsZ0VBQWdFO1lBQ2hFLG9FQUFvRTtZQUNwRSxrRUFBa0U7WUFDbEUsNkJBQTZCO1lBQzdCLFNBQVMsRUFBRTtnQkFDVCxPQUFPLEVBQUUsSUFBSTtnQkFDYixVQUFVLEVBQUUsSUFBSTtnQkFDaEIsd0JBQXdCLEVBQUUsS0FBSzthQUNoQztZQUNELE9BQU8sRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFO1lBQ2hGLE1BQU0sRUFBRTtnQkFDTixrQkFBa0IsRUFBRSxrQkFBa0I7Z0JBQ3RDLFFBQVEsRUFBRSxNQUFNLENBQUMsSUFBSTthQUN0QjtTQUNGLENBQUM7UUFDRixLQUFLLEVBQUU7UUFDUCxJQUFJLEVBQUU7S0FDUDtDQUNGLENBQUMsQ0FBQSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBjb250ZW50Q29sbGVjdGlvbnMgZnJvbSBcIkBjb250ZW50LWNvbGxlY3Rpb25zL3ZpdGVcIlxuaW1wb3J0IHRhaWx3aW5kIGZyb20gXCJAdGFpbHdpbmRjc3Mvdml0ZVwiXG5pbXBvcnQgeyBkZXZ0b29scyB9IGZyb20gXCJAdGFuc3RhY2svZGV2dG9vbHMtdml0ZVwiXG5pbXBvcnQgeyB0YW5zdGFja1N0YXJ0IH0gZnJvbSBcIkB0YW5zdGFjay9yZWFjdC1zdGFydC9wbHVnaW4vdml0ZVwiXG5pbXBvcnQgcmVhY3QgZnJvbSBcIkB2aXRlanMvcGx1Z2luLXJlYWN0XCJcbmltcG9ydCB7IGRlZmluZUNvbmZpZyB9IGZyb20gXCJ2aXRlXCJcbmltcG9ydCBzdmdyIGZyb20gXCJ2aXRlLXBsdWdpbi1zdmdyXCJcbmltcG9ydCB7IGxvYWRDb25maWcgfSBmcm9tIFwiLi9hY3Rpb25zL2NvbmZpZy9sb2FkLnRzXCJcbmltcG9ydCB7IGFnZW50cyB9IGZyb20gXCIuL3BsdWdpbnMvdml0ZS1hZ2VudHMudHNcIlxuaW1wb3J0IHsgbGl2ZW1hcmsgfSBmcm9tIFwiLi9wbHVnaW5zL3ZpdGUtbGl2ZW1hcmsudHNcIlxuaW1wb3J0IHsgcm9ib3RzIH0gZnJvbSBcIi4vcGx1Z2lucy92aXRlLXJvYm90cy50c1wiXG5cbmNvbnN0IGNvbmZpZyA9IGF3YWl0IGxvYWRDb25maWcoKVxuXG4vLyBQZXItYmxvZy1zZWN0aW9uIFJTUyBmZWVkIHBhdGhzIHRvIHByZXJlbmRlci4gR2F0ZWQgb24gYGNvbmZpZy5zaXRlYFxuLy8gYmVjYXVzZSBmZWVkIFVSTHMgYXJlIGFic29sdXRlIChtYXRjaGluZyB0aGUgc2l0ZW1hcC9yb2JvdHMudHh0IGdhdGUpXG4vLyBhbmQgdGhlIHJvdXRlIHJldHVybnMgNDA0IHdpdGhvdXQgaXQgYW55d2F5LiBFeGNsdWRlZCBmcm9tIHRoZSBzaXRlbWFwXG4vLyBzaW5jZSBgLnhtbGAgcGF5bG9hZHMgZG9uJ3QgYmVsb25nIGluIGEgc2l0ZW1hcC5cbmNvbnN0IGJsb2dGZWVkUGFnZXMgPSBjb25maWcuc2l0ZVxuICA/IChjb25maWcuc2VjdGlvbnMgPz8gW10pXG4gICAgICAuZmlsdGVyKHMgPT4gcy50eXBlID09PSBcImJsb2dcIilcbiAgICAgIC5tYXAocyA9PiAoe1xuICAgICAgICBwYXRoOiBgJHtjb25maWcuYmFzZSA/PyBcIlwifSR7cy5wcmVmaXh9cnNzLnhtbGAsXG4gICAgICAgIHNpdGVtYXA6IHsgZXhjbHVkZTogdHJ1ZSB9LFxuICAgICAgfSkpXG4gIDogW11cblxuZXhwb3J0IGRlZmF1bHQgZGVmaW5lQ29uZmlnKHtcbiAgcGx1Z2luczogW1xuICAgIGxpdmVtYXJrKHsgY29uZmlnIH0pLFxuICAgIHJvYm90cyh7IGNvbmZpZyB9KSxcbiAgICBhZ2VudHMoeyBjb25maWcgfSksXG4gICAgLy8gSXRzIHNlcnZlci10by1icm93c2VyIGNvbnNvbGUgcGlwaW5nIGFuZCBWaXRlJ3MgYnJvd3Nlci10by1zZXJ2ZXIgZm9yd2FyZGluZyBlY2hvXG4gICAgLy8gYW55IGJyb3dzZXIgZXJyb3IgYmFjayBhbmQgZm9ydGggZm9yZXZlci5cbiAgICBkZXZ0b29scyh7IGNvbnNvbGVQaXBpbmc6IHsgZW5hYmxlZDogZmFsc2UgfSB9KSxcbiAgICB0YWlsd2luZCgpLFxuICAgIGNvbnRlbnRDb2xsZWN0aW9ucyh7IGNvbmZpZ1BhdGg6IFwiY29udGVudC1jb2xsZWN0aW9ucy50c1wiIH0pLFxuICAgIHRhbnN0YWNrU3RhcnQoe1xuICAgICAgc3JjRGlyZWN0b3J5OiBcIi5cIixcbiAgICAgIC8vIFNlZWQgcGF0aCBtdXN0IG1hdGNoIHdoYXQgdGhlIGNyYXdsZXIgcHJvZHVjZXMgKHJvdXRlci1lbWl0dGVkXG4gICAgICAvLyBocmVmcyBpbmNsdWRlIHRoZSBiYXNlcGF0aCksIG90aGVyd2lzZSBwcmVyZW5kZXIgcmVjb3JkcyBib3RoXG4gICAgICAvLyBzaGFwZXMgYW5kIHRoZSBzaXRlbWFwIGVuZHMgdXAgd2l0aCBkdXBsaWNhdGUgZW50cmllcy5cbiAgICAgIHBhZ2VzOiBbeyBwYXRoOiBjb25maWcuYmFzZSA/IGAke2NvbmZpZy5iYXNlfS9gIDogXCIvXCIgfSwgLi4uYmxvZ0ZlZWRQYWdlc10sXG4gICAgICAvLyBEaXNhYmxlIHJvdXRlLXRyZWUgYXV0by1kaXNjb3Zlcnk6IGl0IHByb2R1Y2VzIGJhc2VwYXRoLW5haXZlXG4gICAgICAvLyBwYXRocyAoZS5nLiBgL2ApIHRoYXQgZHVwbGljYXRlIHRoZSBjcmF3bC1kZXJpdmVkIHByZWZpeGVkIHBhdGhzLFxuICAgICAgLy8gYmxvYXRpbmcgcGFnZXMuanNvbiBhbmQgc2l0ZW1hcC4gQ3Jhd2xpbmcgZnJvbSB0aGUgc2VlZCBhbHJlYWR5XG4gICAgICAvLyByZWFjaGVzIGV2ZXJ5IGxpbmtlZCBwYWdlLlxuICAgICAgcHJlcmVuZGVyOiB7XG4gICAgICAgIGVuYWJsZWQ6IHRydWUsXG4gICAgICAgIGNyYXdsTGlua3M6IHRydWUsXG4gICAgICAgIGF1dG9TdGF0aWNQYXRoc0Rpc2NvdmVyeTogZmFsc2UsXG4gICAgICB9LFxuICAgICAgc2l0ZW1hcDogY29uZmlnLnNpdGUgPyB7IGVuYWJsZWQ6IHRydWUsIGhvc3Q6IGNvbmZpZy5zaXRlIH0gOiB7IGVuYWJsZWQ6IGZhbHNlIH0sXG4gICAgICByb3V0ZXI6IHtcbiAgICAgICAgZ2VuZXJhdGVkUm91dGVUcmVlOiBcInJvdXRlVHJlZS5nZW4udHNcIixcbiAgICAgICAgYmFzZXBhdGg6IGNvbmZpZy5iYXNlLFxuICAgICAgfSxcbiAgICB9KSxcbiAgICByZWFjdCgpLFxuICAgIHN2Z3IoKSxcbiAgXSxcbn0pXG4iXX0=
|
package/package.json
CHANGED
|
@@ -107,7 +107,7 @@ A custom route renders **bare**: the root wraps every route in the headless `com
|
|
|
107
107
|
|
|
108
108
|
Filename maps to URL path: `.livemark/routes/pricing.tsx` → `/pricing/`. Nested paths work via nested folders.
|
|
109
109
|
|
|
110
|
-
An `index.tsx` in `.livemark/routes/` **replaces** Livemark's default landing at `/`.
|
|
110
|
+
An `index.tsx` in `.livemark/routes/` **replaces** Livemark's default landing at `/`. For what to put on it, load `livemark-landing`.
|
|
111
111
|
|
|
112
112
|
Custom routes win over the Markdown catch-all at exact URLs. Don't create a route that collides with an article URL unless you intend to hide the article.
|
|
113
113
|
|
|
@@ -121,6 +121,7 @@ Custom routes win over the Markdown catch-all at exact URLs. Don't create a rout
|
|
|
121
121
|
6. **Never edit `.livemark/.target/`** — it is the generated mount Vite runs (Livemark's source with your overrides copied in), rebuilt on every run, so stack traces point there but edits are lost. Gitignore it alongside `.livemark/build/`.
|
|
122
122
|
7. **Keyboard shortcuts live in the component they drive** — bare keys through `@tanstack/react-hotkeys`, ignored while typing: `L` sidebar (`Sidebar`), `S` search (`Search`), `T` theme (`Theme`), `J`/`K` scroll (`Root`), `B` back to top (`BackToTop`). Overriding one of these drops its key unless the copy keeps the `useHotkey` call; register a key in a component that mounts once, or one press fires twice.
|
|
123
123
|
8. **Search highlights live in `Article`** — picking a result opens the page with `?highlight=<query>`, and `Article` passes it to `useSearchHighlight` with a ref on its `.prose` wrapper. An overridden `components/Article.tsx` must keep that call and ref, or matches stop being marked. Theme the mark through the `--highlight` and `--highlight-foreground` tokens; code blocks are never marked.
|
|
124
|
+
9. **Edited Markdown reaches the page through `router.tsx`** — articles are route loader data, and route HMR keeps loader data, so `getRouter` re-runs loaders on Vite's `vite:afterUpdate`. An overridden `router.tsx` must keep that hook, or Markdown edits show only after a reload.
|
|
124
125
|
|
|
125
126
|
## Head tags
|
|
126
127
|
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: livemark-deployment
|
|
3
|
+
description: Use when publishing a Livemark site — building into .livemark/build/client/, setting site and base, and wiring Cloudflare, GitHub Pages, Vercel, Netlify or any static host, by hand or from CI.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Livemark Deployment
|
|
7
|
+
|
|
8
|
+
Guidance for shipping a Livemark project's production build to a host.
|
|
9
|
+
|
|
10
|
+
## When to use this skill
|
|
11
|
+
|
|
12
|
+
Invoke when the user asks to:
|
|
13
|
+
|
|
14
|
+
- Deploy, publish or host the site, or set up a deploy workflow in CI.
|
|
15
|
+
- Add a host config file (`wrangler.jsonc`, `vercel.json`, `netlify.toml`, nginx, Caddy, S3).
|
|
16
|
+
- Serve the site under a sub-path such as a GitHub Pages project site.
|
|
17
|
+
- Attach a custom domain, or fix broken links, assets or feeds after a deploy.
|
|
18
|
+
|
|
19
|
+
## The build
|
|
20
|
+
|
|
21
|
+
```bash
|
|
22
|
+
npx livemark build # prerender every route into .livemark/build/client/
|
|
23
|
+
npx livemark preview # serve that build locally on port 8000
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
`.livemark/build/client/` is the **only** directory to publish: an `index.html` per route plus assets, `sitemap.xml`, `robots.txt`, RSS feeds, Markdown twins, `llms.txt` and a `_headers` file. Not `dist/`, and not `.livemark/build/` itself — its `server/` sibling is the prerender bundle, not a site. Gitignore `.livemark/build/` and `.livemark/.target/`; both are regenerated on every build.
|
|
27
|
+
|
|
28
|
+
## Config that affects deployment
|
|
29
|
+
|
|
30
|
+
```ts
|
|
31
|
+
// livemark.config.ts
|
|
32
|
+
import { defineConfig } from "livemark"
|
|
33
|
+
|
|
34
|
+
export default defineConfig({
|
|
35
|
+
site: "https://acme.github.io/my-docs", // final public origin, with any sub-path
|
|
36
|
+
base: command => (command === "build" ? "/my-docs" : undefined),
|
|
37
|
+
})
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
- **`site`** — without it there is no `sitemap.xml` and no RSS feed, and `robots.txt` and `llms.txt` lose their absolute URLs. Set it to the final domain, including after attaching a custom domain.
|
|
41
|
+
- **`base`** — only for a site mounted under a sub-path. Use the function form so `livemark start` still serves at `/`. A custom domain removes the sub-path: drop `base` again.
|
|
42
|
+
|
|
43
|
+
## Hosts
|
|
44
|
+
|
|
45
|
+
| Host | What to add |
|
|
46
|
+
| ------------- | -------------------------------------------------------------------------------------------- |
|
|
47
|
+
| Cloudflare | `wrangler.jsonc` with `assets.directory: ".livemark/build/client"`, then `wrangler deploy` |
|
|
48
|
+
| GitHub Pages | `actions/upload-pages-artifact` with `path: .livemark/build/client`, then `deploy-pages` |
|
|
49
|
+
| Vercel | `vercel.json`: `buildCommand: "livemark build"`, `outputDirectory: ".livemark/build/client"` |
|
|
50
|
+
| Netlify | `netlify.toml`: `command = "livemark build"`, `publish = ".livemark/build/client"` |
|
|
51
|
+
| Static server | Copy `.livemark/build/client/*` to the docroot; try `$uri`, `$uri/index.html`, `/index.html` |
|
|
52
|
+
|
|
53
|
+
A CI workflow installs dependencies, runs `livemark build`, then hands `.livemark/build/client` to the host's action or CLI. Name it `.github/workflows/deploy.yaml`.
|
|
54
|
+
|
|
55
|
+
## Rules of thumb
|
|
56
|
+
|
|
57
|
+
1. **Static files go in `.livemark/public/`**, not the build output — a `CNAME` for GitHub Pages, extra `_headers` rules. Anything written into `.livemark/build/client/` by hand is lost on the next build.
|
|
58
|
+
2. **`_headers` is generated.** Cloudflare and Netlify read it. To add rules, ship `.livemark/public/_headers`; Livemark keeps it and appends its own `Link` rule.
|
|
59
|
+
3. **Prerendered routes end in `/`.** `/guide/` is the file `guide/index.html`; a host that does not resolve directory indexes serves 404s for every page.
|
|
60
|
+
4. **Agents asking for Markdown** (`Accept: text/markdown`) need a host rewrite from `<path>/` to `<path>/index.md`. On Cloudflare that's a zone URL Rewrite Rule; deploy a build with the twins before enabling it.
|
|
61
|
+
|
|
62
|
+
## Verification
|
|
63
|
+
|
|
64
|
+
- `npx livemark build`, then `npx livemark preview` — click through a deep link and an asset.
|
|
65
|
+
- With `base` set, grep `.livemark/build/client/index.html` for `/<base>/assets/` to confirm asset URLs carry the prefix.
|
|
66
|
+
- With `site` set, check `.livemark/build/client/sitemap.xml` exists and uses the right origin.
|
|
67
|
+
|
|
68
|
+
## References
|
|
69
|
+
|
|
70
|
+
- Narrative docs, one page per host: https://livemark.dev/deployment/.
|
|
71
|
+
- `site` and `base`: `models/config.ts`.
|
|
72
|
+
- Generated agent files and `_headers`: `plugins/vite-agents.ts`.
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: livemark-landing
|
|
3
|
+
description: Use when designing or rewriting a Livemark project's landing page at .livemark/routes/index.tsx — section structure, hero, screenshots, motion and theming, taking livemark.dev's own landing as the reference.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Livemark Landing
|
|
7
|
+
|
|
8
|
+
Guidance for designing the page at `/` of a Livemark project. The mechanics of a custom route — the file, the chrome, the imports — are in `livemark-customization`; this skill is about what goes on the page.
|
|
9
|
+
|
|
10
|
+
## When to use this skill
|
|
11
|
+
|
|
12
|
+
Invoke when the user asks to:
|
|
13
|
+
|
|
14
|
+
- Build a landing, home or marketing page for the site, or redesign the existing one.
|
|
15
|
+
- Add a hero, feature grid, screenshot carousel, comparison or call-to-action section.
|
|
16
|
+
- Make the landing look as polished as livemark.dev.
|
|
17
|
+
|
|
18
|
+
## Start from the reference
|
|
19
|
+
|
|
20
|
+
livemark.dev's landing is itself a Livemark custom route, built only from public `livemark/*` exports. Read it before writing anything, see it live, and borrow its structure:
|
|
21
|
+
|
|
22
|
+
- Live: https://livemark.dev/
|
|
23
|
+
- Source: https://github.com/datisthq/livemark/blob/main/.livemark/routes/index.tsx
|
|
24
|
+
|
|
25
|
+
It is not in the npm package, so fetch it from GitHub. Take the patterns, not the content: rewrite every heading and line of copy for the project, and use the project's own screenshots and links. Shipping Livemark's copy, screenshots or Datist credit on someone else's site is a bug.
|
|
26
|
+
|
|
27
|
+
## Skeleton
|
|
28
|
+
|
|
29
|
+
```tsx title=".livemark/routes/index.tsx"
|
|
30
|
+
import { createFileRoute } from "@tanstack/react-router"
|
|
31
|
+
import { BackToTop } from "livemark/components/BackToTop"
|
|
32
|
+
import { Banner } from "livemark/components/Banner"
|
|
33
|
+
import { Header } from "livemark/components/Header"
|
|
34
|
+
|
|
35
|
+
export const Route = createFileRoute("/")({ component: Landing })
|
|
36
|
+
|
|
37
|
+
function Landing() {
|
|
38
|
+
return (
|
|
39
|
+
<>
|
|
40
|
+
<Banner />
|
|
41
|
+
<Header />
|
|
42
|
+
<main className="flex flex-col">
|
|
43
|
+
<Hero />
|
|
44
|
+
<Features />
|
|
45
|
+
<FinalCta />
|
|
46
|
+
</main>
|
|
47
|
+
<BackToTop />
|
|
48
|
+
</>
|
|
49
|
+
)
|
|
50
|
+
}
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
The reference runs Hero → a differentiator ("Stays out of your way") → a feature grid → show-don't-tell (Markdown source beside its rendered page) → an audience section (agents) → a final call to action → a credit strip. Pick the sections the project has something real to say in; three strong ones beat seven thin ones.
|
|
54
|
+
|
|
55
|
+
## Patterns from the reference
|
|
56
|
+
|
|
57
|
+
- **Section shell** — `<section className="border-b border-border">` around `mx-auto max-w-6xl px-6 py-24`, a centred heading block (`max-w-2xl`, `h2` at `text-3xl md:text-4xl`), and one showcase section tinted with `bg-primary/5` to break the rhythm. Two-column sections pair a text list with a visual: `grid grid-cols-1 md:grid-cols-2`.
|
|
58
|
+
- **Hero** — a small uppercase eyebrow in `text-primary`, a short `h1`, a lede capped at `max-w-[52ch]`, then two actions: a primary button to the docs and an outline one to the source. Buttons are `buttonVariants` from `livemark/elements/button` on a `Link` or `<a>`, plus `no-underline`.
|
|
59
|
+
- **Internal links** go through `<Link to="/$" params={{ _splat: "introduction" }}>`, so `base` and client navigation keep working; external links get `target="_blank" rel="noopener noreferrer"`.
|
|
60
|
+
- **Show the product** — real screenshots, not stock art. Each shot ships light and dark as two `<img>`, toggled with `dark:hidden` / `hidden dark:block`: the theme is a class on `<html>`, which `<picture media>` cannot see. Put them in `.livemark/public/` and reference them from `/`.
|
|
61
|
+
- **Window cards** — a bordered `rounded-card` frame with a title bar and a mono file label (`WindowCard`) makes code, file trees and rendered output read as the real thing.
|
|
62
|
+
- **Data-driven repeats** — features and points are typed arrays (`icon`, `title`, `description`) mapped into cards, so copy edits never touch markup. Icons come from `lucide-react`.
|
|
63
|
+
- **Tokens, not colours** — `text-primary`, `bg-muted`, `text-muted-foreground`, `border-border`, `bg-card`. A rebrand in `styles/general.css` then reaches the landing too. Hardcoded hex is only for syntax-coloured samples, always with a `dark:` pair.
|
|
64
|
+
- **Motion** — sections fade up on scroll through a small `Reveal` wrapper over `useInView` from `livemark/hooks/in-view`, with a `delayMs` stagger for list items; the hero uses `animate-in fade-in-0 slide-in-from-bottom-4`. Page-local keyframes go in a React `<style href="…" precedence="default">` tag.
|
|
65
|
+
|
|
66
|
+
## Rules of thumb
|
|
67
|
+
|
|
68
|
+
1. **Every animation honours reduced motion** — `motion-reduce:` utilities or a `@media (prefers-reduced-motion: reduce)` block, as the reference's carousel and background do.
|
|
69
|
+
2. **Phone first.** Grids start at one column, action rows `flex-wrap`, secondary labels are `hidden sm:inline`. Check 375px wide: no horizontal scroll.
|
|
70
|
+
3. **Prerender-safe.** `/` is rendered at build time, so nothing touches `window` or `document` during render — only in effects and handlers.
|
|
71
|
+
4. **Import via `livemark/*`** (`components`, `elements`, `hooks`), never relative paths into `node_modules`, so escaped components compose.
|
|
72
|
+
5. **One file is fine.** Keep the landing in `index.tsx`; move a piece to `.livemark/components/` only when another route reuses it.
|
|
73
|
+
|
|
74
|
+
## Verification
|
|
75
|
+
|
|
76
|
+
- `npx livemark start`, open `/` in light and dark, at phone width, and with reduced motion emulated.
|
|
77
|
+
- `npx livemark build` — confirms `/` prerenders without touching browser globals.
|
|
78
|
+
- Every link and button resolves; screenshots load in both themes.
|
|
79
|
+
|
|
80
|
+
## References
|
|
81
|
+
|
|
82
|
+
- Reference landing: https://github.com/datisthq/livemark/blob/main/.livemark/routes/index.tsx.
|
|
83
|
+
- Custom routes and chrome: https://livemark.dev/customization/custom-routes/ and `livemark-customization`.
|
|
84
|
+
- Theming tokens: `livemark-customization`, "Typical workflow: rebrand".
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { useLayoutEffect, useRef, useState } from "react"
|
|
2
2
|
import { X } from "lucide-react"
|
|
3
|
-
import {
|
|
3
|
+
import { useArticleSearch } from "../helpers/article-search.ts"
|
|
4
|
+
import { SearchResultGroups } from "./SearchResultGroups.tsx"
|
|
4
5
|
import { Command, CommandEmpty, CommandInput, CommandList } from "../elements/command.tsx"
|
|
5
6
|
|
|
6
7
|
/** Search field that takes over the header below `lg`, with results dropping under it */
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import { CommandGroup, CommandItem } from "../elements/command.tsx"
|
|
2
|
+
import { resolveArticleIcon } from "../helpers/article-icon.ts"
|
|
3
|
+
import type { SearchResult } from "../helpers/article-search.ts"
|
|
4
|
+
import { buildHighlightPattern, findTextMatches } from "../helpers/search-highlight.ts"
|
|
5
|
+
|
|
6
|
+
export function SearchResultGroups(props: {
|
|
7
|
+
query: string
|
|
8
|
+
grouped: Map<string, SearchResult[]>
|
|
9
|
+
onSelect: (path: string) => void
|
|
10
|
+
}) {
|
|
11
|
+
return [...props.grouped.entries()].map(([group, items]) => (
|
|
12
|
+
<CommandGroup key={group} heading={group}>
|
|
13
|
+
{items.map(result => {
|
|
14
|
+
const Icon = resolveArticleIcon(result.icon)
|
|
15
|
+
return (
|
|
16
|
+
<CommandItem
|
|
17
|
+
key={result.path}
|
|
18
|
+
value={result.path}
|
|
19
|
+
onSelect={() => props.onSelect(result.path)}
|
|
20
|
+
className="py-2.5"
|
|
21
|
+
>
|
|
22
|
+
{Icon && <Icon className="size-5 shrink-0 mt-0.5 self-start opacity-60" />}
|
|
23
|
+
<div className="flex flex-col gap-0.5 min-w-0">
|
|
24
|
+
<span className="text-base font-medium">{result.title}</span>
|
|
25
|
+
{result.snippet && (
|
|
26
|
+
<span className="text-sm text-muted-foreground line-clamp-1">
|
|
27
|
+
<HighlightedText text={result.snippet} term={props.query} />
|
|
28
|
+
</span>
|
|
29
|
+
)}
|
|
30
|
+
</div>
|
|
31
|
+
</CommandItem>
|
|
32
|
+
)
|
|
33
|
+
})}
|
|
34
|
+
</CommandGroup>
|
|
35
|
+
))
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
function HighlightedText(props: { text: string; term: string }) {
|
|
39
|
+
const pattern = buildHighlightPattern(props.term)
|
|
40
|
+
if (!pattern) return <>{props.text}</>
|
|
41
|
+
const parts: React.ReactNode[] = []
|
|
42
|
+
let cursor = 0
|
|
43
|
+
for (const [start, end] of findTextMatches(props.text, pattern)) {
|
|
44
|
+
parts.push(props.text.slice(cursor, start))
|
|
45
|
+
parts.push(
|
|
46
|
+
<span key={start} className="text-foreground font-medium">
|
|
47
|
+
{props.text.slice(start, end)}
|
|
48
|
+
</span>,
|
|
49
|
+
)
|
|
50
|
+
cursor = end
|
|
51
|
+
}
|
|
52
|
+
parts.push(props.text.slice(cursor))
|
|
53
|
+
return <>{parts}</>
|
|
54
|
+
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { execFileSync } from "node:child_process"
|
|
2
2
|
import { existsSync } from "node:fs"
|
|
3
3
|
import { basename, relative, resolve } from "node:path"
|
|
4
4
|
import { DEFAULT_EXCLUDES } from "./settings.ts"
|
|
@@ -48,6 +48,7 @@ import { rehypeTaskListA11y } from "./plugins/rehype-task-list-a11y.ts"
|
|
|
48
48
|
import { transformerIcon } from "./plugins/shiki-icon.ts"
|
|
49
49
|
import { resolveAssetPath } from "./helpers/resolve-asset-path.ts"
|
|
50
50
|
import { resolveIncludes } from "./helpers/resolve-includes.ts"
|
|
51
|
+
import { collectFenceLanguages } from "./helpers/fence-languages.ts"
|
|
51
52
|
import { extractSearchText } from "./helpers/search-text.ts"
|
|
52
53
|
import { stripLeadingH1 } from "./helpers/llms.ts"
|
|
53
54
|
import { extractToc } from "./helpers/toc.ts"
|
|
@@ -87,15 +88,38 @@ function toPath(filePath: string) {
|
|
|
87
88
|
return slugify(name)
|
|
88
89
|
}
|
|
89
90
|
|
|
90
|
-
|
|
91
|
+
const lastUpdatedByFile = readLastUpdatedDates()
|
|
92
|
+
|
|
93
|
+
// One `git log` for every file: a spawn per article blocks the build ~30 ms each, and
|
|
94
|
+
// isn't cached across builds like the MDX is.
|
|
95
|
+
function readLastUpdatedDates() {
|
|
96
|
+
const dates = new Map<string, string>()
|
|
91
97
|
try {
|
|
92
|
-
const
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
98
|
+
const log = execFileSync(
|
|
99
|
+
"git",
|
|
100
|
+
[
|
|
101
|
+
"-c",
|
|
102
|
+
"core.quotePath=false",
|
|
103
|
+
"log",
|
|
104
|
+
"--format=%x00%cI",
|
|
105
|
+
"--name-only",
|
|
106
|
+
"--relative",
|
|
107
|
+
],
|
|
108
|
+
{
|
|
109
|
+
cwd: config.root,
|
|
110
|
+
encoding: "utf-8",
|
|
111
|
+
maxBuffer: 256 * 1024 * 1024,
|
|
112
|
+
stdio: ["ignore", "pipe", "ignore"],
|
|
113
|
+
},
|
|
114
|
+
)
|
|
115
|
+
let date: string | undefined
|
|
116
|
+
for (const line of log.split("\n")) {
|
|
117
|
+
if (line.startsWith("\0")) date = line.slice(1)
|
|
118
|
+
else if (line && date && !dates.has(line)) dates.set(line, date)
|
|
119
|
+
}
|
|
120
|
+
return dates
|
|
97
121
|
} catch {
|
|
98
|
-
return
|
|
122
|
+
return dates
|
|
99
123
|
}
|
|
100
124
|
}
|
|
101
125
|
|
|
@@ -184,6 +208,10 @@ const articles = defineCollection({
|
|
|
184
208
|
// renders without line padding, theme colours or transformers.
|
|
185
209
|
defaultLanguage: "text",
|
|
186
210
|
fallbackLanguage: "text",
|
|
211
|
+
// Without `langs`, Shiki compiles all ~360 bundled grammars up front (~4 s).
|
|
212
|
+
// `lazy` covers fences a remark plugin generates, which the scan cannot see.
|
|
213
|
+
langs: await collectFenceLanguages(bodyContent),
|
|
214
|
+
lazy: true,
|
|
187
215
|
// Darken catppuccin-latte's green (the colour used for strings and
|
|
188
216
|
// some comments) — the theme default #40A02B lands at 3.2:1 on the
|
|
189
217
|
// code-block background, below the WCAG AA 4.5:1 threshold.
|
|
@@ -210,7 +238,7 @@ const articles = defineCollection({
|
|
|
210
238
|
)
|
|
211
239
|
const tocItems = extractToc(content)
|
|
212
240
|
const searchText = extractSearchText(content)
|
|
213
|
-
const lastUpdated =
|
|
241
|
+
const lastUpdated = lastUpdatedByFile.get(doc._meta.filePath)
|
|
214
242
|
const image = doc.image
|
|
215
243
|
? resolveAssetPath(doc.image, filePath, config.root, config.base)
|
|
216
244
|
: undefined
|