livemark 0.27.2 → 0.28.1
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 +3 -2
- 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
|
@@ -59,7 +59,7 @@ The command refuses to overwrite an existing override (and exits 1 after copying
|
|
|
59
59
|
|
|
60
60
|
## Typical workflow: announcement banner
|
|
61
61
|
|
|
62
|
-
Prefer the `banner` config option — an inline Markdown string, rendered to HTML at build time and exposed as `bannerHtml` from `livemark:virtual`. Escape `components/Banner.tsx` only for icons or custom markup. The strip spans the full page width above both the sidebar and the sticky header — it scrolls away while the sidebar and header pin to the top (the sidebar container is `sticky`, not `fixed`, for this). Let it wrap (`flex-wrap`, `text-balance`, `min-w-0`) rather than `truncate`, so phones neither clip it nor scroll sideways. Style the injected HTML from the wrapper (`[&_a]:underline`): Tailwind never sees classes inside a config string. Search and the theme toggle sit at the right of the header, not in the sidebar. The header's section strip is `components/HeaderNav.tsx`; it tells `Header` when to render `<Search compact />` and folds what still doesn't fit into a "More" menu. Below `lg`, `Search` opens `components/HeaderSearch.tsx` instead of the dialog: a field that covers the whole header bar, with results dropping full-width beneath it — positioned `absolute` against the sticky header, so an override must stay inside `<header>`.
|
|
62
|
+
Prefer the `banner` config option — an inline Markdown string, rendered to HTML at build time and exposed as `bannerHtml` from `livemark:virtual`. Escape `components/Banner.tsx` only for icons or custom markup. The strip spans the full page width above both the sidebar and the sticky header — it scrolls away while the sidebar and header pin to the top (the sidebar container is `sticky`, not `fixed`, for this). Let it wrap (`flex-wrap`, `text-balance`, `min-w-0`) rather than `truncate`, so phones neither clip it nor scroll sideways. An escaped strip may keep to one line instead, as livemark.dev's does: `truncate` the message (`min-w-0` lets a flex item shrink), keep the link `shrink-0`, and hide its label with `sr-only sm:not-sr-only` — `hidden` would leave the phone's arrow-only link without a name. Style the injected HTML from the wrapper (`[&_a]:underline`): Tailwind never sees classes inside a config string. Search and the theme toggle sit at the right of the header, not in the sidebar. The header's section strip is `components/HeaderNav.tsx`; it tells `Header` when to render `<Search compact />` and folds what still doesn't fit into a "More" menu. Below `lg`, `Search` opens `components/HeaderSearch.tsx` instead of the dialog: a field that covers the whole header bar, with results dropping full-width beneath it — positioned `absolute` against the sticky header, so an override must stay inside `<header>`.
|
|
63
63
|
|
|
64
64
|
## Sidebar escapes
|
|
65
65
|
|
|
@@ -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-16 md:py-24`, a centred heading block (`max-w-2xl`, `mb-10 md:mb-16`, `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`. On phones give each `flex-1 px-3 sm:flex-none sm:px-5`: the pair shares one row, and when it cannot, wraps into two equal full-width buttons instead of two ragged ones.
|
|
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, then again with the root font at 125% — Android text scaling grows every rem, padding included: no horizontal scroll, the `h1` and the action row still fit.
|
|
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
|