gazetta 0.6.0 → 0.7.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/admin-dist/assets/index-BO9-CXmW.css +1 -0
- package/admin-dist/assets/index-Ufu8zZH_.js +668 -0
- package/admin-dist/index.html +2 -2
- package/dist/admin-api/error-response.d.ts +21 -0
- package/dist/admin-api/error-response.d.ts.map +1 -0
- package/dist/admin-api/error-response.js +12 -0
- package/dist/admin-api/error-response.js.map +1 -0
- package/dist/admin-api/index.d.ts +0 -2
- package/dist/admin-api/index.d.ts.map +1 -1
- package/dist/admin-api/index.js +4 -24
- package/dist/admin-api/index.js.map +1 -1
- package/dist/admin-api/routes/assets.d.ts +16 -0
- package/dist/admin-api/routes/assets.d.ts.map +1 -0
- package/dist/admin-api/routes/assets.js +433 -0
- package/dist/admin-api/routes/assets.js.map +1 -0
- package/dist/admin-api/routes/fragments.d.ts.map +1 -1
- package/dist/admin-api/routes/fragments.js +30 -4
- package/dist/admin-api/routes/fragments.js.map +1 -1
- package/dist/admin-api/routes/pages.d.ts.map +1 -1
- package/dist/admin-api/routes/pages.js +37 -4
- package/dist/admin-api/routes/pages.js.map +1 -1
- package/dist/admin-api/routes/publish.d.ts.map +1 -1
- package/dist/admin-api/routes/publish.js +68 -35
- package/dist/admin-api/routes/publish.js.map +1 -1
- package/dist/admin-api/schemas/assets.d.ts +48 -0
- package/dist/admin-api/schemas/assets.d.ts.map +1 -0
- package/dist/admin-api/schemas/assets.js +44 -0
- package/dist/admin-api/schemas/assets.js.map +1 -0
- package/dist/admin-api/schemas/index.d.ts +2 -0
- package/dist/admin-api/schemas/index.d.ts.map +1 -1
- package/dist/admin-api/schemas/index.js +2 -0
- package/dist/admin-api/schemas/index.js.map +1 -1
- package/dist/admin-api/source-context.d.ts +0 -7
- package/dist/admin-api/source-context.d.ts.map +1 -1
- package/dist/admin-api/source-context.js +0 -3
- package/dist/admin-api/source-context.js.map +1 -1
- package/dist/assets/analyze-audio.d.ts +3 -0
- package/dist/assets/analyze-audio.d.ts.map +1 -0
- package/dist/assets/analyze-audio.js +80 -0
- package/dist/assets/analyze-audio.js.map +1 -0
- package/dist/assets/analyze-image.d.ts +19 -0
- package/dist/assets/analyze-image.d.ts.map +1 -0
- package/dist/assets/analyze-image.js +123 -0
- package/dist/assets/analyze-image.js.map +1 -0
- package/dist/assets/analyze.d.ts +94 -0
- package/dist/assets/analyze.d.ts.map +1 -0
- package/dist/assets/analyze.js +45 -0
- package/dist/assets/analyze.js.map +1 -0
- package/dist/assets/asset-deps.d.ts +30 -0
- package/dist/assets/asset-deps.d.ts.map +1 -0
- package/dist/assets/asset-deps.js +42 -0
- package/dist/assets/asset-deps.js.map +1 -0
- package/dist/assets/asset-paths.d.ts +155 -0
- package/dist/assets/asset-paths.d.ts.map +1 -0
- package/dist/assets/asset-paths.js +197 -0
- package/dist/assets/asset-paths.js.map +1 -0
- package/dist/assets/delete.d.ts +75 -0
- package/dist/assets/delete.d.ts.map +1 -0
- package/dist/assets/delete.js +82 -0
- package/dist/assets/delete.js.map +1 -0
- package/dist/assets/errors.d.ts +241 -0
- package/dist/assets/errors.d.ts.map +1 -0
- package/dist/assets/errors.js +300 -0
- package/dist/assets/errors.js.map +1 -0
- package/dist/assets/find-refs.d.ts +37 -0
- package/dist/assets/find-refs.d.ts.map +1 -0
- package/dist/assets/find-refs.js +35 -0
- package/dist/assets/find-refs.js.map +1 -0
- package/dist/assets/hash.d.ts +13 -0
- package/dist/assets/hash.d.ts.map +1 -0
- package/dist/assets/hash.js +43 -0
- package/dist/assets/hash.js.map +1 -0
- package/dist/assets/image-metadata.d.ts +11 -0
- package/dist/assets/image-metadata.d.ts.map +1 -0
- package/dist/assets/image-metadata.js +31 -0
- package/dist/assets/image-metadata.js.map +1 -0
- package/dist/assets/ingest-locale.d.ts +86 -0
- package/dist/assets/ingest-locale.d.ts.map +1 -0
- package/dist/assets/ingest-locale.js +209 -0
- package/dist/assets/ingest-locale.js.map +1 -0
- package/dist/assets/ingest.d.ts +96 -0
- package/dist/assets/ingest.d.ts.map +1 -0
- package/dist/assets/ingest.js +308 -0
- package/dist/assets/ingest.js.map +1 -0
- package/dist/assets/kind-compat.d.ts +34 -0
- package/dist/assets/kind-compat.d.ts.map +1 -0
- package/dist/assets/kind-compat.js +33 -0
- package/dist/assets/kind-compat.js.map +1 -0
- package/dist/assets/list.d.ts +46 -0
- package/dist/assets/list.d.ts.map +1 -0
- package/dist/assets/list.js +102 -0
- package/dist/assets/list.js.map +1 -0
- package/dist/assets/manifest-default.d.ts +56 -0
- package/dist/assets/manifest-default.d.ts.map +1 -0
- package/dist/assets/manifest-default.js +120 -0
- package/dist/assets/manifest-default.js.map +1 -0
- package/dist/assets/manifest-filename.d.ts +52 -0
- package/dist/assets/manifest-filename.d.ts.map +1 -0
- package/dist/assets/manifest-filename.js +104 -0
- package/dist/assets/manifest-filename.js.map +1 -0
- package/dist/assets/manifest-locale.d.ts +60 -0
- package/dist/assets/manifest-locale.d.ts.map +1 -0
- package/dist/assets/manifest-locale.js +206 -0
- package/dist/assets/manifest-locale.js.map +1 -0
- package/dist/assets/manifest-merge.d.ts +66 -0
- package/dist/assets/manifest-merge.d.ts.map +1 -0
- package/dist/assets/manifest-merge.js +82 -0
- package/dist/assets/manifest-merge.js.map +1 -0
- package/dist/assets/manifest.d.ts +83 -0
- package/dist/assets/manifest.d.ts.map +1 -0
- package/dist/assets/manifest.js +93 -0
- package/dist/assets/manifest.js.map +1 -0
- package/dist/assets/mime-sniff.d.ts +18 -0
- package/dist/assets/mime-sniff.d.ts.map +1 -0
- package/dist/assets/mime-sniff.js +84 -0
- package/dist/assets/mime-sniff.js.map +1 -0
- package/dist/assets/preprocess-svg.d.ts +3 -0
- package/dist/assets/preprocess-svg.d.ts.map +1 -0
- package/dist/assets/preprocess-svg.js +49 -0
- package/dist/assets/preprocess-svg.js.map +1 -0
- package/dist/assets/preprocess.d.ts +62 -0
- package/dist/assets/preprocess.d.ts.map +1 -0
- package/dist/assets/preprocess.js +86 -0
- package/dist/assets/preprocess.js.map +1 -0
- package/dist/assets/publish-plan.d.ts +41 -0
- package/dist/assets/publish-plan.d.ts.map +1 -0
- package/dist/assets/publish-plan.js +49 -0
- package/dist/assets/publish-plan.js.map +1 -0
- package/dist/assets/publish.d.ts +33 -0
- package/dist/assets/publish.d.ts.map +1 -0
- package/dist/assets/publish.js +81 -0
- package/dist/assets/publish.js.map +1 -0
- package/dist/assets/refs.d.ts +37 -0
- package/dist/assets/refs.d.ts.map +1 -0
- package/dist/assets/refs.js +33 -0
- package/dist/assets/refs.js.map +1 -0
- package/dist/assets/remove-override.d.ts +42 -0
- package/dist/assets/remove-override.d.ts.map +1 -0
- package/dist/assets/remove-override.js +53 -0
- package/dist/assets/remove-override.js.map +1 -0
- package/dist/assets/rename.d.ts +43 -0
- package/dist/assets/rename.d.ts.map +1 -0
- package/dist/assets/rename.js +271 -0
- package/dist/assets/rename.js.map +1 -0
- package/dist/assets/replace.d.ts +37 -0
- package/dist/assets/replace.d.ts.map +1 -0
- package/dist/assets/replace.js +195 -0
- package/dist/assets/replace.js.map +1 -0
- package/dist/assets/resolve.d.ts +141 -0
- package/dist/assets/resolve.d.ts.map +1 -0
- package/dist/assets/resolve.js +381 -0
- package/dist/assets/resolve.js.map +1 -0
- package/dist/assets/rewrite-manifest-asset-ref.d.ts +44 -0
- package/dist/assets/rewrite-manifest-asset-ref.d.ts.map +1 -0
- package/dist/assets/rewrite-manifest-asset-ref.js +51 -0
- package/dist/assets/rewrite-manifest-asset-ref.js.map +1 -0
- package/dist/assets/scan-manifest-for-asset.d.ts +63 -0
- package/dist/assets/scan-manifest-for-asset.d.ts.map +1 -0
- package/dist/assets/scan-manifest-for-asset.js +105 -0
- package/dist/assets/scan-manifest-for-asset.js.map +1 -0
- package/dist/assets/serve-route.d.ts +45 -0
- package/dist/assets/serve-route.d.ts.map +1 -0
- package/dist/assets/serve-route.js +123 -0
- package/dist/assets/serve-route.js.map +1 -0
- package/dist/assets/svg-sanitize.d.ts +38 -0
- package/dist/assets/svg-sanitize.d.ts.map +1 -0
- package/dist/assets/svg-sanitize.js +209 -0
- package/dist/assets/svg-sanitize.js.map +1 -0
- package/dist/assets/update-metadata.d.ts +61 -0
- package/dist/assets/update-metadata.d.ts.map +1 -0
- package/dist/assets/update-metadata.js +82 -0
- package/dist/assets/update-metadata.js.map +1 -0
- package/dist/assets/url.d.ts +82 -0
- package/dist/assets/url.d.ts.map +1 -0
- package/dist/assets/url.js +103 -0
- package/dist/assets/url.js.map +1 -0
- package/dist/assets/validate.d.ts +74 -0
- package/dist/assets/validate.d.ts.map +1 -0
- package/dist/assets/validate.js +136 -0
- package/dist/assets/validate.js.map +1 -0
- package/dist/assets/variants.d.ts +23 -0
- package/dist/assets/variants.d.ts.map +1 -0
- package/dist/assets/variants.js +74 -0
- package/dist/assets/variants.js.map +1 -0
- package/dist/cli/assets-cli.d.ts +58 -0
- package/dist/cli/assets-cli.d.ts.map +1 -0
- package/dist/cli/assets-cli.js +233 -0
- package/dist/cli/assets-cli.js.map +1 -0
- package/dist/cli/assets-display.d.ts +112 -0
- package/dist/cli/assets-display.d.ts.map +1 -0
- package/dist/cli/assets-display.js +106 -0
- package/dist/cli/assets-display.js.map +1 -0
- package/dist/cli/bootstrap.d.ts +0 -2
- package/dist/cli/bootstrap.d.ts.map +1 -1
- package/dist/cli/bootstrap.js +0 -1
- package/dist/cli/bootstrap.js.map +1 -1
- package/dist/cli/index.js +64 -18
- package/dist/cli/index.js.map +1 -1
- package/dist/compare.d.ts.map +1 -1
- package/dist/compare.js +15 -12
- package/dist/compare.js.map +1 -1
- package/dist/dep-sidecars.d.ts +127 -0
- package/dist/dep-sidecars.d.ts.map +1 -0
- package/dist/dep-sidecars.js +122 -0
- package/dist/dep-sidecars.js.map +1 -0
- package/dist/editor/AssetEmbeddedWidget.d.ts +3 -0
- package/dist/editor/AssetEmbeddedWidget.d.ts.map +1 -0
- package/dist/editor/AssetEmbeddedWidget.js +146 -0
- package/dist/editor/AssetEmbeddedWidget.js.map +1 -0
- package/dist/editor/mount.d.ts +12 -1
- package/dist/editor/mount.d.ts.map +1 -1
- package/dist/editor/mount.js +36 -5
- package/dist/editor/mount.js.map +1 -1
- package/dist/format.d.ts +44 -0
- package/dist/format.d.ts.map +1 -0
- package/dist/format.js +65 -0
- package/dist/format.js.map +1 -0
- package/dist/fragment-deps.d.ts +24 -0
- package/dist/fragment-deps.d.ts.map +1 -0
- package/dist/fragment-deps.js +20 -0
- package/dist/fragment-deps.js.map +1 -0
- package/dist/hash.d.ts +0 -6
- package/dist/hash.d.ts.map +1 -1
- package/dist/hash.js +0 -18
- package/dist/hash.js.map +1 -1
- package/dist/history-provider.d.ts.map +1 -1
- package/dist/history-provider.js +30 -8
- package/dist/history-provider.js.map +1 -1
- package/dist/history-recorder.d.ts +7 -3
- package/dist/history-recorder.d.ts.map +1 -1
- package/dist/history-recorder.js +9 -1
- package/dist/history-recorder.js.map +1 -1
- package/dist/history-restorer.d.ts.map +1 -1
- package/dist/history-restorer.js +34 -2
- package/dist/history-restorer.js.map +1 -1
- package/dist/history.d.ts +26 -8
- package/dist/history.d.ts.map +1 -1
- package/dist/index.d.ts +2 -4
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -2
- package/dist/index.js.map +1 -1
- package/dist/locale.d.ts +20 -0
- package/dist/locale.d.ts.map +1 -1
- package/dist/locale.js +38 -0
- package/dist/locale.js.map +1 -1
- package/dist/providers/_atomic-write.d.ts +9 -0
- package/dist/providers/_atomic-write.d.ts.map +1 -0
- package/dist/providers/_atomic-write.js +72 -0
- package/dist/providers/_atomic-write.js.map +1 -0
- package/dist/providers/_rm-ignore-missing.d.ts +31 -0
- package/dist/providers/_rm-ignore-missing.d.ts.map +1 -0
- package/dist/providers/_rm-ignore-missing.js +12 -0
- package/dist/providers/_rm-ignore-missing.js.map +1 -0
- package/dist/providers/_stream-interop.d.ts +23 -0
- package/dist/providers/_stream-interop.d.ts.map +1 -0
- package/dist/providers/_stream-interop.js +21 -0
- package/dist/providers/_stream-interop.js.map +1 -0
- package/dist/providers/azure-blob.d.ts.map +1 -1
- package/dist/providers/azure-blob.js +60 -0
- package/dist/providers/azure-blob.js.map +1 -1
- package/dist/providers/filesystem.d.ts +4 -0
- package/dist/providers/filesystem.d.ts.map +1 -1
- package/dist/providers/filesystem.js +63 -2
- package/dist/providers/filesystem.js.map +1 -1
- package/dist/providers/s3.d.ts.map +1 -1
- package/dist/providers/s3.js +84 -1
- package/dist/providers/s3.js.map +1 -1
- package/dist/publish-rendered.d.ts +37 -17
- package/dist/publish-rendered.d.ts.map +1 -1
- package/dist/publish-rendered.js +71 -67
- package/dist/publish-rendered.js.map +1 -1
- package/dist/publish.d.ts +13 -12
- package/dist/publish.d.ts.map +1 -1
- package/dist/publish.js +23 -47
- package/dist/publish.js.map +1 -1
- package/dist/resolver.d.ts +12 -2
- package/dist/resolver.d.ts.map +1 -1
- package/dist/resolver.js +54 -9
- package/dist/resolver.js.map +1 -1
- package/dist/schema/dimensions.d.ts +78 -0
- package/dist/schema/dimensions.d.ts.map +1 -0
- package/dist/schema/dimensions.js +97 -0
- package/dist/schema/dimensions.js.map +1 -0
- package/dist/schema/helpers.d.ts +108 -0
- package/dist/schema/helpers.d.ts.map +1 -0
- package/dist/schema/helpers.js +133 -0
- package/dist/schema/helpers.js.map +1 -0
- package/dist/schema/index.d.ts +27 -0
- package/dist/schema/index.d.ts.map +1 -0
- package/dist/schema/index.js +25 -0
- package/dist/schema/index.js.map +1 -0
- package/dist/schema/types.d.ts +390 -0
- package/dist/schema/types.d.ts.map +1 -0
- package/dist/schema/types.js +25 -0
- package/dist/schema/types.js.map +1 -0
- package/dist/selector-chain.d.ts +63 -0
- package/dist/selector-chain.d.ts.map +1 -0
- package/dist/selector-chain.js +58 -0
- package/dist/selector-chain.js.map +1 -0
- package/dist/sidecars.d.ts +19 -18
- package/dist/sidecars.d.ts.map +1 -1
- package/dist/sidecars.js +70 -62
- package/dist/sidecars.js.map +1 -1
- package/dist/targets.d.ts.map +1 -1
- package/dist/targets.js +15 -37
- package/dist/targets.js.map +1 -1
- package/dist/themes.d.ts +69 -0
- package/dist/themes.d.ts.map +1 -0
- package/dist/themes.js +85 -0
- package/dist/themes.js.map +1 -0
- package/dist/transforms/adapter.d.ts +115 -0
- package/dist/transforms/adapter.d.ts.map +1 -0
- package/dist/transforms/adapter.js +2 -0
- package/dist/transforms/adapter.js.map +1 -0
- package/dist/transforms/cloudflare.d.ts +17 -0
- package/dist/transforms/cloudflare.d.ts.map +1 -0
- package/dist/transforms/cloudflare.js +110 -0
- package/dist/transforms/cloudflare.js.map +1 -0
- package/dist/transforms/index.d.ts +24 -0
- package/dist/transforms/index.d.ts.map +1 -0
- package/dist/transforms/index.js +30 -0
- package/dist/transforms/index.js.map +1 -0
- package/dist/transforms/sharp.d.ts +3 -0
- package/dist/transforms/sharp.d.ts.map +1 -0
- package/dist/transforms/sharp.js +43 -0
- package/dist/transforms/sharp.js.map +1 -0
- package/dist/types.d.ts +125 -1
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js.map +1 -1
- package/package.json +20 -1
- package/admin-dist/assets/index-B6pVot0Y.css +0 -1
- package/admin-dist/assets/index-DniLwxJA.js +0 -609
- package/dist/providers/r2.d.ts +0 -8
- package/dist/providers/r2.d.ts.map +0 -1
- package/dist/providers/r2.js +0 -86
- package/dist/providers/r2.js.map +0 -1
- package/dist/source-sidecars.d.ts +0 -32
- package/dist/source-sidecars.d.ts.map +0 -1
- package/dist/source-sidecars.js +0 -98
- package/dist/source-sidecars.js.map +0 -1
package/dist/publish.d.ts
CHANGED
|
@@ -37,24 +37,25 @@ export declare function findFragmentDependents(sourceRoot: ContentRoot, fragment
|
|
|
37
37
|
fragments: string[];
|
|
38
38
|
}>;
|
|
39
39
|
/**
|
|
40
|
-
* Fast path for finding dependents against a *published* target
|
|
40
|
+
* Fast path for finding dependents against a *published* target — or
|
|
41
|
+
* any source/target carrying the fragment-deps reverse-sidecar index.
|
|
41
42
|
*
|
|
42
|
-
* Uses `.
|
|
43
|
-
*
|
|
44
|
-
*
|
|
45
|
-
*
|
|
43
|
+
* Uses `.gazetta/fragment-deps/{fragment}/{item}` per-edge sidecars
|
|
44
|
+
* (written by save handlers and the publish flow). One readDir per
|
|
45
|
+
* fragment in the BFS — for "fragment used by 5 pages", that's 1
|
|
46
|
+
* readDir; for transitive "X → Y → Z", BFS of 3 readDirs total.
|
|
46
47
|
*
|
|
47
|
-
*
|
|
48
|
-
*
|
|
49
|
-
*
|
|
48
|
+
* Compares to the legacy walk, which did one listSidecars per item
|
|
49
|
+
* directory across the whole site (~N readDirs). Bench shows
|
|
50
|
+
* 100×–200× speedup on cloud at N=1000. See the `perf-refs.bench.ts`
|
|
51
|
+
* bench data and design-media-implementation.md for the rationale.
|
|
50
52
|
*
|
|
51
|
-
*
|
|
52
|
-
*
|
|
53
|
+
* Handles transitive fragment→fragment dependencies via BFS: if
|
|
54
|
+
* @inner is referenced by @outer which is referenced by pages/home,
|
|
55
|
+
* querying "@inner" returns home and @outer.
|
|
53
56
|
*/
|
|
54
57
|
export declare function findDependentsFromSidecars(sourceRoot: ContentRoot, query: {
|
|
55
58
|
fragment: string;
|
|
56
|
-
} | {
|
|
57
|
-
template: string;
|
|
58
59
|
}): Promise<{
|
|
59
60
|
pages: string[];
|
|
60
61
|
fragments: string[];
|
package/dist/publish.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"publish.d.ts","sourceRoot":"","sources":["../src/publish.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;
|
|
1
|
+
{"version":3,"file":"publish.d.ts","sourceRoot":"","sources":["../src/publish.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAGpD,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,MAAM,CAAA;IACd,OAAO,EAAE,MAAM,EAAE,CAAA;IACjB,KAAK,EAAE,MAAM,EAAE,CAAA;CAChB;AAED,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,MAAM,CAAA;IACd,OAAO,EAAE,OAAO,CAAA;IAChB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,WAAW,EAAE,MAAM,CAAA;CACpB;AAED;;;;GAIG;AACH,wBAAsB,YAAY,CAChC,UAAU,EAAE,WAAW,EACvB,UAAU,EAAE,WAAW,EACvB,KAAK,EAAE,MAAM,EAAE,GACd,OAAO,CAAC;IAAE,WAAW,EAAE,MAAM,CAAA;CAAE,CAAC,CAsBlC;AA8CD;;;GAGG;AACH,wBAAsB,mBAAmB,CAAC,UAAU,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAUrG;AA4DD;;;;;;;;GAQG;AACH,wBAAsB,sBAAsB,CAC1C,UAAU,EAAE,WAAW,EACvB,YAAY,EAAE,MAAM,GACnB,OAAO,CAAC;IAAE,KAAK,EAAE,MAAM,EAAE,CAAC;IAAC,SAAS,EAAE,MAAM,EAAE,CAAA;CAAE,CAAC,CAEnD;AA0ED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAsB,0BAA0B,CAC9C,UAAU,EAAE,WAAW,EACvB,KAAK,EAAE;IAAE,QAAQ,EAAE,MAAM,CAAA;CAAE,GAC1B,OAAO,CAAC;IAAE,KAAK,EAAE,MAAM,EAAE,CAAC;IAAC,SAAS,EAAE,MAAM,EAAE,CAAA;CAAE,CAAC,CAoBnD"}
|
package/dist/publish.js
CHANGED
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import { join } from 'node:path';
|
|
2
|
-
import { listSidecars } from './sidecars.js';
|
|
3
2
|
import { mapLimit } from './concurrency.js';
|
|
4
3
|
/**
|
|
5
4
|
* Copy items from source storage to target storage.
|
|
@@ -200,63 +199,40 @@ async function findFragmentDependentsImpl(storage, siteBase, fragmentName) {
|
|
|
200
199
|
return { pages: [...pages].sort(), fragments: [...fragments].sort() };
|
|
201
200
|
}
|
|
202
201
|
/**
|
|
203
|
-
* Fast path for finding dependents against a *published* target
|
|
202
|
+
* Fast path for finding dependents against a *published* target — or
|
|
203
|
+
* any source/target carrying the fragment-deps reverse-sidecar index.
|
|
204
204
|
*
|
|
205
|
-
* Uses `.
|
|
206
|
-
*
|
|
207
|
-
*
|
|
208
|
-
*
|
|
205
|
+
* Uses `.gazetta/fragment-deps/{fragment}/{item}` per-edge sidecars
|
|
206
|
+
* (written by save handlers and the publish flow). One readDir per
|
|
207
|
+
* fragment in the BFS — for "fragment used by 5 pages", that's 1
|
|
208
|
+
* readDir; for transitive "X → Y → Z", BFS of 3 readDirs total.
|
|
209
209
|
*
|
|
210
|
-
*
|
|
211
|
-
*
|
|
212
|
-
*
|
|
210
|
+
* Compares to the legacy walk, which did one listSidecars per item
|
|
211
|
+
* directory across the whole site (~N readDirs). Bench shows
|
|
212
|
+
* 100×–200× speedup on cloud at N=1000. See the `perf-refs.bench.ts`
|
|
213
|
+
* bench data and design-media-implementation.md for the rationale.
|
|
213
214
|
*
|
|
214
|
-
*
|
|
215
|
-
*
|
|
215
|
+
* Handles transitive fragment→fragment dependencies via BFS: if
|
|
216
|
+
* @inner is referenced by @outer which is referenced by pages/home,
|
|
217
|
+
* querying "@inner" returns home and @outer.
|
|
216
218
|
*/
|
|
217
219
|
export async function findDependentsFromSidecars(sourceRoot, query) {
|
|
218
|
-
const {
|
|
219
|
-
const pagesRoot = sourceRoot.path('pages');
|
|
220
|
-
const fragmentsRoot = sourceRoot.path('fragments');
|
|
221
|
-
// Single listing pass per root, then all reasoning is in-memory.
|
|
222
|
-
const [pagesList, fragmentsList] = await Promise.all([
|
|
223
|
-
listSidecars(storage, pagesRoot),
|
|
224
|
-
listSidecars(storage, fragmentsRoot),
|
|
225
|
-
]);
|
|
226
|
-
const pagesIndex = new Map();
|
|
227
|
-
for (const [name, state] of pagesList) {
|
|
228
|
-
pagesIndex.set(name, { uses: new Set(state.uses), template: state.template });
|
|
229
|
-
}
|
|
230
|
-
const fragmentsIndex = new Map();
|
|
231
|
-
for (const [name, state] of fragmentsList) {
|
|
232
|
-
fragmentsIndex.set(name, { uses: new Set(state.uses), template: state.template });
|
|
233
|
-
}
|
|
234
|
-
// Now walk the indexes in-memory. No more storage calls from this point.
|
|
220
|
+
const { readDepsForFragment } = await import('./fragment-deps.js');
|
|
235
221
|
const pages = new Set();
|
|
236
222
|
const fragments = new Set();
|
|
237
|
-
if ('template' in query) {
|
|
238
|
-
for (const [name, info] of pagesIndex)
|
|
239
|
-
if (info.template === query.template)
|
|
240
|
-
pages.add(name);
|
|
241
|
-
for (const [name, info] of fragmentsIndex)
|
|
242
|
-
if (info.template === query.template)
|
|
243
|
-
fragments.add(name);
|
|
244
|
-
return { pages: [...pages].sort(), fragments: [...fragments].sort() };
|
|
245
|
-
}
|
|
246
|
-
// Fragment query with transitive walk
|
|
247
223
|
const queue = [query.fragment];
|
|
248
224
|
const seen = new Set([query.fragment]);
|
|
249
225
|
while (queue.length) {
|
|
250
226
|
const current = queue.shift();
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
if (
|
|
257
|
-
seen.add(name);
|
|
258
|
-
fragments.add(name);
|
|
259
|
-
queue.push(name);
|
|
227
|
+
const deps = await readDepsForFragment(sourceRoot, current);
|
|
228
|
+
for (const dep of deps) {
|
|
229
|
+
if (dep.source === 'page') {
|
|
230
|
+
pages.add(dep.name);
|
|
231
|
+
}
|
|
232
|
+
else if (!seen.has(dep.name)) {
|
|
233
|
+
seen.add(dep.name);
|
|
234
|
+
fragments.add(dep.name);
|
|
235
|
+
queue.push(dep.name);
|
|
260
236
|
}
|
|
261
237
|
}
|
|
262
238
|
}
|
package/dist/publish.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"publish.js","sourceRoot":"","sources":["../src/publish.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAGhC,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"publish.js","sourceRoot":"","sources":["../src/publish.ts"],"names":[],"mappings":"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"}
|
package/dist/resolver.d.ts
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import type { ResolvedComponent, ComponentEntry } from './types.js';
|
|
2
2
|
import type { Site } from './site-loader.js';
|
|
3
3
|
import { type ResolvedLocales } from './locale.js';
|
|
4
|
+
import { type ResolvedThemes } from './themes.js';
|
|
4
5
|
interface ResolveContext {
|
|
5
6
|
site: Site;
|
|
6
7
|
templatesDir: string;
|
|
@@ -8,11 +9,20 @@ interface ResolveContext {
|
|
|
8
9
|
path: string[];
|
|
9
10
|
/** When set, fragment references resolve the locale-specific variant first. */
|
|
10
11
|
locale?: string;
|
|
12
|
+
/**
|
|
13
|
+
* Active theme for asset resolution. v1 doesn't yet route a theme value
|
|
14
|
+
* from runtime callers (page/fragment templates emit theme-aware CSS via
|
|
15
|
+
* tokens, not via SSR theme branching); the field is wired so step 18+
|
|
16
|
+
* runtime work can pass it without resolver changes.
|
|
17
|
+
*/
|
|
18
|
+
theme?: string;
|
|
11
19
|
/** Resolved site locales — cached for fallback resolution. */
|
|
12
20
|
resolvedLocales?: ResolvedLocales;
|
|
21
|
+
/** Resolved site themes — needed for font variant enumeration. */
|
|
22
|
+
resolvedThemes?: ResolvedThemes | null;
|
|
13
23
|
}
|
|
14
24
|
export declare function resolveComponent(entry: ComponentEntry, ctx: ResolveContext): Promise<ResolvedComponent>;
|
|
15
|
-
export declare function resolveFragment(fragmentName: string, site: Site, locale?: string): Promise<ResolvedComponent>;
|
|
16
|
-
export declare function resolvePage(pageName: string, site: Site, locale?: string): Promise<ResolvedComponent>;
|
|
25
|
+
export declare function resolveFragment(fragmentName: string, site: Site, locale?: string, theme?: string): Promise<ResolvedComponent>;
|
|
26
|
+
export declare function resolvePage(pageName: string, site: Site, locale?: string, theme?: string): Promise<ResolvedComponent>;
|
|
17
27
|
export {};
|
|
18
28
|
//# sourceMappingURL=resolver.d.ts.map
|
package/dist/resolver.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resolver.d.ts","sourceRoot":"","sources":["../src/resolver.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,cAAc,EAAmB,MAAM,YAAY,CAAA;
|
|
1
|
+
{"version":3,"file":"resolver.d.ts","sourceRoot":"","sources":["../src/resolver.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,cAAc,EAAmB,MAAM,YAAY,CAAA;AAIpF,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAA;AAC5C,OAAO,EAA6C,KAAK,eAAe,EAAE,MAAM,aAAa,CAAA;AAC7F,OAAO,EAAqB,KAAK,cAAc,EAAE,MAAM,aAAa,CAAA;AAwCpE,UAAU,cAAc;IACtB,IAAI,EAAE,IAAI,CAAA;IACV,YAAY,EAAE,MAAM,CAAA;IACpB,OAAO,EAAE,GAAG,CAAC,MAAM,CAAC,CAAA;IACpB,IAAI,EAAE,MAAM,EAAE,CAAA;IACd,+EAA+E;IAC/E,MAAM,CAAC,EAAE,MAAM,CAAA;IACf;;;;;OAKG;IACH,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,8DAA8D;IAC9D,eAAe,CAAC,EAAE,eAAe,CAAA;IACjC,kEAAkE;IAClE,cAAc,CAAC,EAAE,cAAc,GAAG,IAAI,CAAA;CACvC;AAED,wBAAsB,gBAAgB,CAAC,KAAK,EAAE,cAAc,EAAE,GAAG,EAAE,cAAc,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAa7G;AAiFD,wBAAsB,eAAe,CACnC,YAAY,EAAE,MAAM,EACpB,IAAI,EAAE,IAAI,EACV,MAAM,CAAC,EAAE,MAAM,EACf,KAAK,CAAC,EAAE,MAAM,GACb,OAAO,CAAC,iBAAiB,CAAC,CAoD5B;AAED,wBAAsB,WAAW,CAC/B,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,IAAI,EACV,MAAM,CAAC,EAAE,MAAM,EACf,KAAK,CAAC,EAAE,MAAM,GACb,OAAO,CAAC,iBAAiB,CAAC,CA2C5B"}
|
package/dist/resolver.js
CHANGED
|
@@ -1,6 +1,30 @@
|
|
|
1
1
|
import { loadTemplate } from './template-loader.js';
|
|
2
2
|
import { processContent } from './content.js';
|
|
3
|
+
import { resolveAssetRefs } from './assets/resolve.js';
|
|
3
4
|
import { resolveLocaleFallback, resolveSiteLocales } from './locale.js';
|
|
5
|
+
import { resolveSiteThemes } from './themes.js';
|
|
6
|
+
/**
|
|
7
|
+
* Build the asset-resolve context from the site being rendered. Shared
|
|
8
|
+
* across all `processContent` + `resolveAssetRefs` pairs in a single
|
|
9
|
+
* resolution pass. Locale + theme flow in from the render-time
|
|
10
|
+
* `ResolveContext`; locales/themes config is derived from `site.manifest`
|
|
11
|
+
* once and reused.
|
|
12
|
+
*/
|
|
13
|
+
function assetContext(site, locale, theme, resolvedLocales, resolvedThemes) {
|
|
14
|
+
return {
|
|
15
|
+
storage: site.storage,
|
|
16
|
+
assetsRoot: 'assets',
|
|
17
|
+
locale,
|
|
18
|
+
theme,
|
|
19
|
+
locales: resolvedLocales,
|
|
20
|
+
themes: resolvedThemes,
|
|
21
|
+
};
|
|
22
|
+
}
|
|
23
|
+
/** Process content: sync transforms (markdown) + async asset resolution. */
|
|
24
|
+
async function processAndResolve(content, schema, site, ctx) {
|
|
25
|
+
const processed = processContent(content, schema);
|
|
26
|
+
return resolveAssetRefs(processed, assetContext(site, ctx.locale, ctx.theme, ctx.resolvedLocales ?? null, ctx.resolvedThemes ?? null));
|
|
27
|
+
}
|
|
4
28
|
export async function resolveComponent(entry, ctx) {
|
|
5
29
|
if (typeof entry === 'string') {
|
|
6
30
|
if (!entry.startsWith('@')) {
|
|
@@ -51,7 +75,7 @@ async function resolveFragmentRef(fragmentName, ctx) {
|
|
|
51
75
|
ctx.visited.delete(key);
|
|
52
76
|
return {
|
|
53
77
|
template: loaded.render,
|
|
54
|
-
content:
|
|
78
|
+
content: await processAndResolve(fragment.content, loaded.schema, ctx.site, ctx),
|
|
55
79
|
children,
|
|
56
80
|
path: fragment.dir,
|
|
57
81
|
treePath,
|
|
@@ -74,12 +98,21 @@ async function resolveInlineComponent(comp, ctx) {
|
|
|
74
98
|
const treePath = ctx.path.slice(1).join('/');
|
|
75
99
|
ctx.path.pop();
|
|
76
100
|
ctx.visited.delete(key);
|
|
77
|
-
return {
|
|
101
|
+
return {
|
|
102
|
+
template: loaded.render,
|
|
103
|
+
content: await processAndResolve(comp.content, loaded.schema, ctx.site, ctx),
|
|
104
|
+
children,
|
|
105
|
+
treePath,
|
|
106
|
+
};
|
|
78
107
|
}
|
|
79
|
-
export async function resolveFragment(fragmentName, site, locale) {
|
|
108
|
+
export async function resolveFragment(fragmentName, site, locale, theme) {
|
|
80
109
|
// Resolve locale-specific fragment variant
|
|
81
110
|
let fragment = site.fragments.get(fragmentName) ?? null;
|
|
82
|
-
|
|
111
|
+
// Always resolve site-level config — even when no active locale/theme
|
|
112
|
+
// is set, the asset resolver may need it (font enumeration walks the
|
|
113
|
+
// configured theme universe).
|
|
114
|
+
const resolvedLocales = resolveSiteLocales(site.manifest) ?? undefined;
|
|
115
|
+
const resolvedThemes = resolveSiteThemes(site.manifest);
|
|
83
116
|
if (locale && resolvedLocales) {
|
|
84
117
|
const localeEntry = site.fragmentLocales.get(fragmentName);
|
|
85
118
|
if (localeEntry) {
|
|
@@ -102,7 +135,9 @@ export async function resolveFragment(fragmentName, site, locale) {
|
|
|
102
135
|
visited: new Set(),
|
|
103
136
|
path: ['', `@${fragmentName}`],
|
|
104
137
|
locale,
|
|
138
|
+
theme,
|
|
105
139
|
resolvedLocales,
|
|
140
|
+
resolvedThemes,
|
|
106
141
|
};
|
|
107
142
|
const loaded = await loadTemplate(site.storage, templatesDir, fragment.template);
|
|
108
143
|
const children = [];
|
|
@@ -113,13 +148,13 @@ export async function resolveFragment(fragmentName, site, locale) {
|
|
|
113
148
|
}
|
|
114
149
|
return {
|
|
115
150
|
template: loaded.render,
|
|
116
|
-
content:
|
|
151
|
+
content: await processAndResolve(fragment.content, loaded.schema, site, ctx),
|
|
117
152
|
children,
|
|
118
153
|
path: fragment.dir,
|
|
119
154
|
treePath: '',
|
|
120
155
|
};
|
|
121
156
|
}
|
|
122
|
-
export async function resolvePage(pageName, site, locale) {
|
|
157
|
+
export async function resolvePage(pageName, site, locale, theme) {
|
|
123
158
|
const defaultPage = site.pages.get(pageName);
|
|
124
159
|
if (!defaultPage) {
|
|
125
160
|
const available = [...site.pages.keys()];
|
|
@@ -130,8 +165,18 @@ export async function resolvePage(pageName, site, locale) {
|
|
|
130
165
|
const localeEntry = locale ? site.pageLocales.get(pageName) : undefined;
|
|
131
166
|
const page = localeEntry?.locales.get(locale) ?? defaultPage;
|
|
132
167
|
const templatesDir = site.templatesDir;
|
|
133
|
-
const resolvedLocales =
|
|
134
|
-
const
|
|
168
|
+
const resolvedLocales = resolveSiteLocales(site.manifest) ?? undefined;
|
|
169
|
+
const resolvedThemes = resolveSiteThemes(site.manifest);
|
|
170
|
+
const ctx = {
|
|
171
|
+
site,
|
|
172
|
+
templatesDir,
|
|
173
|
+
visited: new Set(),
|
|
174
|
+
path: [pageName],
|
|
175
|
+
locale,
|
|
176
|
+
theme,
|
|
177
|
+
resolvedLocales,
|
|
178
|
+
resolvedThemes,
|
|
179
|
+
};
|
|
135
180
|
const loaded = await loadTemplate(site.storage, templatesDir, page.template);
|
|
136
181
|
const children = [];
|
|
137
182
|
if (page.components) {
|
|
@@ -141,7 +186,7 @@ export async function resolvePage(pageName, site, locale) {
|
|
|
141
186
|
}
|
|
142
187
|
return {
|
|
143
188
|
template: loaded.render,
|
|
144
|
-
content:
|
|
189
|
+
content: await processAndResolve(page.content, loaded.schema, site, ctx),
|
|
145
190
|
children,
|
|
146
191
|
path: page.dir,
|
|
147
192
|
treePath: '',
|
package/dist/resolver.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resolver.js","sourceRoot":"","sources":["../src/resolver.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAA;AACnD,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAA;
|
|
1
|
+
{"version":3,"file":"resolver.js","sourceRoot":"","sources":["../src/resolver.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Asset override dimensions — the axes along which an asset's bytes,
|
|
3
|
+
* variants, and metadata can vary from its default.
|
|
4
|
+
*
|
|
5
|
+
* v1 ships two first-class dimensions:
|
|
6
|
+
* - `locale` — content-level (e.g. text baked into image varies by language)
|
|
7
|
+
* - `theme` — presentation-level (e.g. logo with light/dark variants)
|
|
8
|
+
*
|
|
9
|
+
* Both are peer dimensions in the abstract model. Each asset can opt into
|
|
10
|
+
* any combination — a logo might have `(en, dark)`, `(fr, dark)`, `(de, dark)`
|
|
11
|
+
* variants but no light-mode variants because the default works for light.
|
|
12
|
+
*
|
|
13
|
+
* # Why a closed dimension set
|
|
14
|
+
*
|
|
15
|
+
* A user-defined dimension model (arbitrary axes per site) was rejected
|
|
16
|
+
* during foundation design. 90% of value is locale + theme; arbitrary
|
|
17
|
+
* dimensions complicate the picker UI, fallback chain semantics, and
|
|
18
|
+
* filename composition with no concrete demand. Adding a third dimension
|
|
19
|
+
* later means extending this union and `DIMENSION_ORDER` — mechanical.
|
|
20
|
+
*
|
|
21
|
+
* # Filename composition
|
|
22
|
+
*
|
|
23
|
+
* `DIMENSION_ORDER` fixes the order in which dimensions appear in
|
|
24
|
+
* filenames. `{name}.asset.{locale}.{theme}.json` (locale before theme).
|
|
25
|
+
* Changing the order would re-key every existing locale-only manifest, so
|
|
26
|
+
* it's locked: locale always first.
|
|
27
|
+
*
|
|
28
|
+
* # Selector semantics
|
|
29
|
+
*
|
|
30
|
+
* A `Selector` represents a specific combination of dimension values.
|
|
31
|
+
* `null` selector = "default-default" (no overrides; the canonical asset).
|
|
32
|
+
* Empty `Selector` Map is structurally invalid — callers must use `null`
|
|
33
|
+
* to express "no dimensions selected." Validators enforce.
|
|
34
|
+
*/
|
|
35
|
+
/** The set of override dimensions an asset can vary along. */
|
|
36
|
+
export type DimensionName = 'locale' | 'theme';
|
|
37
|
+
/**
|
|
38
|
+
* Order in which dimensions appear in composed filenames. Locked: locale
|
|
39
|
+
* before theme. Adding a new dimension extends this constant; existing
|
|
40
|
+
* filenames stay valid because they have no value for the new dimension.
|
|
41
|
+
*/
|
|
42
|
+
export declare const DIMENSION_ORDER: readonly DimensionName[];
|
|
43
|
+
/**
|
|
44
|
+
* A specific combination of dimension values that addresses one asset
|
|
45
|
+
* variant (or the default, when null).
|
|
46
|
+
*
|
|
47
|
+
* Examples:
|
|
48
|
+
* `null` — the default asset
|
|
49
|
+
* `Map { 'locale' → 'fr' }` — French (default theme)
|
|
50
|
+
* `Map { 'locale' → 'fr', 'theme' → 'dark' }` — French + dark
|
|
51
|
+
* `Map { 'theme' → 'dark' }` — dark (default locale)
|
|
52
|
+
*/
|
|
53
|
+
export type Selector = ReadonlyMap<DimensionName, string>;
|
|
54
|
+
/** True when `selector` has at least one dimension set. */
|
|
55
|
+
export declare function isNonEmptySelector(selector: Selector | null): selector is Selector;
|
|
56
|
+
/**
|
|
57
|
+
* Build a Selector from individual dimension values, omitting unset ones.
|
|
58
|
+
* Returns `null` when all dimensions are absent — semantically equivalent
|
|
59
|
+
* to "the default asset."
|
|
60
|
+
*/
|
|
61
|
+
export declare function buildSelector(values: Partial<Record<DimensionName, string>>): Selector | null;
|
|
62
|
+
/**
|
|
63
|
+
* Compose the path-suffix portion of a filename for a selector. Walks
|
|
64
|
+
* `DIMENSION_ORDER` so the order is deterministic regardless of insertion
|
|
65
|
+
* order in the underlying Map.
|
|
66
|
+
*
|
|
67
|
+
* null → '' (no suffix)
|
|
68
|
+
* { locale: 'fr' } → '.fr'
|
|
69
|
+
* { theme: 'dark' } → '.dark'
|
|
70
|
+
* { locale: 'fr', theme: 'dark'} → '.fr.dark'
|
|
71
|
+
*/
|
|
72
|
+
export declare function selectorSuffix(selector: Selector | null): string;
|
|
73
|
+
/**
|
|
74
|
+
* Two selectors are equivalent when they have the same dimensions set
|
|
75
|
+
* to the same values, ignoring iteration order.
|
|
76
|
+
*/
|
|
77
|
+
export declare function selectorsEqual(a: Selector | null, b: Selector | null): boolean;
|
|
78
|
+
//# sourceMappingURL=dimensions.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dimensions.d.ts","sourceRoot":"","sources":["../../src/schema/dimensions.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AAEH,8DAA8D;AAC9D,MAAM,MAAM,aAAa,GAAG,QAAQ,GAAG,OAAO,CAAA;AAE9C;;;;GAIG;AACH,eAAO,MAAM,eAAe,EAAE,SAAS,aAAa,EAAwB,CAAA;AAE5E;;;;;;;;;GASG;AACH,MAAM,MAAM,QAAQ,GAAG,WAAW,CAAC,aAAa,EAAE,MAAM,CAAC,CAAA;AAEzD,2DAA2D;AAC3D,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,QAAQ,GAAG,IAAI,GAAG,QAAQ,IAAI,QAAQ,CAElF;AAED;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,MAAM,EAAE,OAAO,CAAC,MAAM,CAAC,aAAa,EAAE,MAAM,CAAC,CAAC,GAAG,QAAQ,GAAG,IAAI,CAO7F;AAED;;;;;;;;;GASG;AACH,wBAAgB,cAAc,CAAC,QAAQ,EAAE,QAAQ,GAAG,IAAI,GAAG,MAAM,CAQhE;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAAC,CAAC,EAAE,QAAQ,GAAG,IAAI,EAAE,CAAC,EAAE,QAAQ,GAAG,IAAI,GAAG,OAAO,CAQ9E"}
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Asset override dimensions — the axes along which an asset's bytes,
|
|
3
|
+
* variants, and metadata can vary from its default.
|
|
4
|
+
*
|
|
5
|
+
* v1 ships two first-class dimensions:
|
|
6
|
+
* - `locale` — content-level (e.g. text baked into image varies by language)
|
|
7
|
+
* - `theme` — presentation-level (e.g. logo with light/dark variants)
|
|
8
|
+
*
|
|
9
|
+
* Both are peer dimensions in the abstract model. Each asset can opt into
|
|
10
|
+
* any combination — a logo might have `(en, dark)`, `(fr, dark)`, `(de, dark)`
|
|
11
|
+
* variants but no light-mode variants because the default works for light.
|
|
12
|
+
*
|
|
13
|
+
* # Why a closed dimension set
|
|
14
|
+
*
|
|
15
|
+
* A user-defined dimension model (arbitrary axes per site) was rejected
|
|
16
|
+
* during foundation design. 90% of value is locale + theme; arbitrary
|
|
17
|
+
* dimensions complicate the picker UI, fallback chain semantics, and
|
|
18
|
+
* filename composition with no concrete demand. Adding a third dimension
|
|
19
|
+
* later means extending this union and `DIMENSION_ORDER` — mechanical.
|
|
20
|
+
*
|
|
21
|
+
* # Filename composition
|
|
22
|
+
*
|
|
23
|
+
* `DIMENSION_ORDER` fixes the order in which dimensions appear in
|
|
24
|
+
* filenames. `{name}.asset.{locale}.{theme}.json` (locale before theme).
|
|
25
|
+
* Changing the order would re-key every existing locale-only manifest, so
|
|
26
|
+
* it's locked: locale always first.
|
|
27
|
+
*
|
|
28
|
+
* # Selector semantics
|
|
29
|
+
*
|
|
30
|
+
* A `Selector` represents a specific combination of dimension values.
|
|
31
|
+
* `null` selector = "default-default" (no overrides; the canonical asset).
|
|
32
|
+
* Empty `Selector` Map is structurally invalid — callers must use `null`
|
|
33
|
+
* to express "no dimensions selected." Validators enforce.
|
|
34
|
+
*/
|
|
35
|
+
/**
|
|
36
|
+
* Order in which dimensions appear in composed filenames. Locked: locale
|
|
37
|
+
* before theme. Adding a new dimension extends this constant; existing
|
|
38
|
+
* filenames stay valid because they have no value for the new dimension.
|
|
39
|
+
*/
|
|
40
|
+
export const DIMENSION_ORDER = ['locale', 'theme'];
|
|
41
|
+
/** True when `selector` has at least one dimension set. */
|
|
42
|
+
export function isNonEmptySelector(selector) {
|
|
43
|
+
return selector !== null && selector.size > 0;
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Build a Selector from individual dimension values, omitting unset ones.
|
|
47
|
+
* Returns `null` when all dimensions are absent — semantically equivalent
|
|
48
|
+
* to "the default asset."
|
|
49
|
+
*/
|
|
50
|
+
export function buildSelector(values) {
|
|
51
|
+
const map = new Map();
|
|
52
|
+
for (const dim of DIMENSION_ORDER) {
|
|
53
|
+
const v = values[dim];
|
|
54
|
+
if (v !== undefined)
|
|
55
|
+
map.set(dim, v);
|
|
56
|
+
}
|
|
57
|
+
return map.size > 0 ? map : null;
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Compose the path-suffix portion of a filename for a selector. Walks
|
|
61
|
+
* `DIMENSION_ORDER` so the order is deterministic regardless of insertion
|
|
62
|
+
* order in the underlying Map.
|
|
63
|
+
*
|
|
64
|
+
* null → '' (no suffix)
|
|
65
|
+
* { locale: 'fr' } → '.fr'
|
|
66
|
+
* { theme: 'dark' } → '.dark'
|
|
67
|
+
* { locale: 'fr', theme: 'dark'} → '.fr.dark'
|
|
68
|
+
*/
|
|
69
|
+
export function selectorSuffix(selector) {
|
|
70
|
+
if (!selector)
|
|
71
|
+
return '';
|
|
72
|
+
const parts = [];
|
|
73
|
+
for (const dim of DIMENSION_ORDER) {
|
|
74
|
+
const v = selector.get(dim);
|
|
75
|
+
if (v !== undefined)
|
|
76
|
+
parts.push(v);
|
|
77
|
+
}
|
|
78
|
+
return parts.length > 0 ? `.${parts.join('.')}` : '';
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* Two selectors are equivalent when they have the same dimensions set
|
|
82
|
+
* to the same values, ignoring iteration order.
|
|
83
|
+
*/
|
|
84
|
+
export function selectorsEqual(a, b) {
|
|
85
|
+
if (a === null && b === null)
|
|
86
|
+
return true;
|
|
87
|
+
if (a === null || b === null)
|
|
88
|
+
return false;
|
|
89
|
+
if (a.size !== b.size)
|
|
90
|
+
return false;
|
|
91
|
+
for (const [k, v] of a) {
|
|
92
|
+
if (b.get(k) !== v)
|
|
93
|
+
return false;
|
|
94
|
+
}
|
|
95
|
+
return true;
|
|
96
|
+
}
|
|
97
|
+
//# sourceMappingURL=dimensions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dimensions.js","sourceRoot":"","sources":["../../src/schema/dimensions.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AAKH;;;;GAIG;AACH,MAAM,CAAC,MAAM,eAAe,GAA6B,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAA;AAc5E,2DAA2D;AAC3D,MAAM,UAAU,kBAAkB,CAAC,QAAyB;IAC1D,OAAO,QAAQ,KAAK,IAAI,IAAI,QAAQ,CAAC,IAAI,GAAG,CAAC,CAAA;AAC/C,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,aAAa,CAAC,MAA8C;IAC1E,MAAM,GAAG,GAAG,IAAI,GAAG,EAAyB,CAAA;IAC5C,KAAK,MAAM,GAAG,IAAI,eAAe,EAAE,CAAC;QAClC,MAAM,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,CAAA;QACrB,IAAI,CAAC,KAAK,SAAS;YAAE,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,CAAA;IACtC,CAAC;IACD,OAAO,GAAG,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAA;AAClC,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,cAAc,CAAC,QAAyB;IACtD,IAAI,CAAC,QAAQ;QAAE,OAAO,EAAE,CAAA;IACxB,MAAM,KAAK,GAAa,EAAE,CAAA;IAC1B,KAAK,MAAM,GAAG,IAAI,eAAe,EAAE,CAAC;QAClC,MAAM,CAAC,GAAG,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;QAC3B,IAAI,CAAC,KAAK,SAAS;YAAE,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IACpC,CAAC;IACD,OAAO,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAA;AACtD,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,cAAc,CAAC,CAAkB,EAAE,CAAkB;IACnE,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,IAAI;QAAE,OAAO,IAAI,CAAA;IACzC,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,IAAI;QAAE,OAAO,KAAK,CAAA;IAC1C,IAAI,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,IAAI;QAAE,OAAO,KAAK,CAAA;IACnC,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC;QACvB,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC;YAAE,OAAO,KAAK,CAAA;IAClC,CAAC;IACD,OAAO,IAAI,CAAA;AACb,CAAC"}
|