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/history-restorer.js
CHANGED
|
@@ -56,12 +56,40 @@ export async function restoreRevision(opts) {
|
|
|
56
56
|
}
|
|
57
57
|
}
|
|
58
58
|
for (const [path, hash] of toWrite) {
|
|
59
|
-
const
|
|
59
|
+
const bytes = await history.readBlob(hash);
|
|
60
60
|
const abs = contentRoot.path(path);
|
|
61
61
|
const parent = abs.substring(0, abs.lastIndexOf('/'));
|
|
62
62
|
if (parent)
|
|
63
63
|
await contentRoot.storage.mkdir(parent);
|
|
64
|
-
|
|
64
|
+
// Restore via writeBytes — uniform bytes-in for both text and
|
|
65
|
+
// binary content. Text blobs are UTF-8-encoded bytes
|
|
66
|
+
// (indistinguishable from what writeFile would have stored);
|
|
67
|
+
// binary blobs (asset bytes, variants) round-trip raw.
|
|
68
|
+
await contentRoot.storage.writeBytes(abs, bytes);
|
|
69
|
+
}
|
|
70
|
+
// After restoring manifests, rebuild the asset-refs sidecar index.
|
|
71
|
+
// Manifests are the source of truth; a restore can change which
|
|
72
|
+
// assets and fragments each item references, which would leave the
|
|
73
|
+
// per-edge dep sidecars stale. Easier to rebuild than diff per-item —
|
|
74
|
+
// we have the full set of post-restore manifests on disk.
|
|
75
|
+
if (toWrite.length > 0 || toDelete.length > 0) {
|
|
76
|
+
try {
|
|
77
|
+
const { loadSite } = await import('./site-loader.js');
|
|
78
|
+
const { rebuildDepIndex } = await import('./publish-rendered.js');
|
|
79
|
+
const { ASSET_REFS } = await import('./assets/asset-deps.js');
|
|
80
|
+
const { FRAGMENT_DEPS } = await import('./fragment-deps.js');
|
|
81
|
+
const site = await loadSite({ contentRoot });
|
|
82
|
+
await Promise.all([
|
|
83
|
+
rebuildDepIndex(ASSET_REFS, site, contentRoot.storage, contentRoot.rootPath),
|
|
84
|
+
rebuildDepIndex(FRAGMENT_DEPS, site, contentRoot.storage, contentRoot.rootPath),
|
|
85
|
+
]);
|
|
86
|
+
}
|
|
87
|
+
catch (err) {
|
|
88
|
+
// Non-fatal: if site.yaml is missing or load fails, dep indices
|
|
89
|
+
// might drift. Reindex CLI recovers.
|
|
90
|
+
// eslint-disable-next-line no-console
|
|
91
|
+
console.warn(`dep-sidecar rebuild after restore failed: ${err.message}`);
|
|
92
|
+
}
|
|
65
93
|
}
|
|
66
94
|
// Record a new forward revision capturing the restored state. Uses
|
|
67
95
|
// the same snapshot we just wrote — no need to re-read from disk.
|
|
@@ -76,6 +104,10 @@ export async function restoreRevision(opts) {
|
|
|
76
104
|
* Re-record an existing snapshot as a forward revision. Blobs already
|
|
77
105
|
* exist (they're the same content), so the HistoryProvider's exists()
|
|
78
106
|
* check skips the writes — cheap.
|
|
107
|
+
*
|
|
108
|
+
* Items map carries `Uint8Array` because that's what `readBlob`
|
|
109
|
+
* returns. Text and binary blobs round-trip identically — the
|
|
110
|
+
* provider hashes raw bytes either way, so dedup holds.
|
|
79
111
|
*/
|
|
80
112
|
async function recordFromSnapshot(history, target, meta) {
|
|
81
113
|
const items = new Map();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"history-restorer.js","sourceRoot":"","sources":["../src/history-restorer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAkBH;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,IAA4B;IAChE,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,GAAG,IAAI,CAAA;IACjD,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,YAAY,CAAC,UAAU,CAAC,CAAA;IACrD,+DAA+D;IAC/D,oEAAoE;IACpE,sCAAsC;IACtC,MAAM,eAAe,GAAG,MAAM,gBAAgB,CAAC,OAAO,CAAC,CAAA;IAEvD,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAA;IAClF,oEAAoE;IACpE,uEAAuE;IACvE,mEAAmE;IACnE,oEAAoE;IACpE,iEAAiE;IACjE,iCAAiC;IACjC,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,eAAe,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,CAAA;IAExG,sEAAsE;IACtE,kEAAkE;IAClE,+DAA+D;IAC/D,KAAK,MAAM,IAAI,IAAI,QAAQ,EAAE,CAAC;QAC5B,MAAM,GAAG,GAAG,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QAClC,IAAI,CAAC;YACH,MAAM,WAAW,CAAC,OAAO,CAAC,EAAE,CAAC,GAAG,CAAC,CAAA;QACnC,CAAC;QAAC,MAAM,CAAC;YACP,iEAAiE;QACnE,CAAC;IACH,CAAC;IAED,KAAK,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,OAAO,EAAE,CAAC;QACnC,MAAM,
|
|
1
|
+
{"version":3,"file":"history-restorer.js","sourceRoot":"","sources":["../src/history-restorer.ts"],"names":[],"mappings":"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"}
|
package/dist/history.d.ts
CHANGED
|
@@ -56,6 +56,17 @@ export interface HistoryRetention {
|
|
|
56
56
|
/** Keep at most N most-recent revisions. Default: 50. Oldest evicted. */
|
|
57
57
|
maxRevisions?: number;
|
|
58
58
|
}
|
|
59
|
+
/**
|
|
60
|
+
* Content carried in a revision snapshot — either UTF-8 text (for JSON
|
|
61
|
+
* manifests, YAML, HTML, CSS, JS) or raw bytes (asset bytes, variants,
|
|
62
|
+
* fonts). The provider hashes either via SHA-256 over the raw bytes
|
|
63
|
+
* (text encoded as UTF-8 first), so dedup works uniformly: identical
|
|
64
|
+
* text and identical bytes share a blob.
|
|
65
|
+
*
|
|
66
|
+
* Per Q9 lock, one blob store, mixed content. The public `readBlob`
|
|
67
|
+
* always returns bytes; callers that expect text decode on read.
|
|
68
|
+
*/
|
|
69
|
+
export type BlobContent = string | Uint8Array;
|
|
59
70
|
/** Input to `recordRevision` — metadata plus the current content tree. */
|
|
60
71
|
export interface RevisionInput {
|
|
61
72
|
operation: RevisionOperation;
|
|
@@ -68,16 +79,14 @@ export interface RevisionInput {
|
|
|
68
79
|
/** For rollback/restore: the revision id this one restored from. */
|
|
69
80
|
restoredFrom?: string;
|
|
70
81
|
/**
|
|
71
|
-
* Full content tree snapshot at this revision: `itemPath → content
|
|
72
|
-
* Content is
|
|
73
|
-
*
|
|
74
|
-
* (images, fonts) would need a separate mechanism; revisit when those
|
|
75
|
-
* become first-class.
|
|
82
|
+
* Full content tree snapshot at this revision: `itemPath → content`.
|
|
83
|
+
* Content is `string | Uint8Array` — text and binary first-class
|
|
84
|
+
* (asset bytes, variants, fonts; per Q9 lock).
|
|
76
85
|
*
|
|
77
86
|
* Unchanged items should carry identical content across calls so the
|
|
78
87
|
* provider can dedupe via content-addressing.
|
|
79
88
|
*/
|
|
80
|
-
items: Map<string,
|
|
89
|
+
items: Map<string, BlobContent>;
|
|
81
90
|
}
|
|
82
91
|
/**
|
|
83
92
|
* Uniform history API. Implemented on top of any StorageProvider — reads
|
|
@@ -100,8 +109,17 @@ export interface HistoryProvider {
|
|
|
100
109
|
listRevisions(limit?: number): Promise<Revision[]>;
|
|
101
110
|
/** Read a revision's full manifest (metadata + snapshot). */
|
|
102
111
|
readRevision(id: string): Promise<RevisionManifest>;
|
|
103
|
-
/**
|
|
104
|
-
|
|
112
|
+
/**
|
|
113
|
+
* Read a content blob by hash. Returns raw bytes — callers that
|
|
114
|
+
* expect text (page/fragment manifests, site.yaml) decode UTF-8 on
|
|
115
|
+
* receipt. Callers that expect binary (asset bytes, variants) use
|
|
116
|
+
* the bytes as-is.
|
|
117
|
+
*
|
|
118
|
+
* The pre-step-20 signature returned `string`. The widening to
|
|
119
|
+
* `Uint8Array` is a foundation contract change; existing string
|
|
120
|
+
* consumers must wrap with `new TextDecoder().decode(bytes)`.
|
|
121
|
+
*/
|
|
122
|
+
readBlob(hash: string): Promise<Uint8Array>;
|
|
105
123
|
/**
|
|
106
124
|
* Delete a revision and its manifest. Orphaned blobs are garbage-
|
|
107
125
|
* collected by the implementation (lazy or immediate, adapter's choice).
|
package/dist/history.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"history.d.ts","sourceRoot":"","sources":["../src/history.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAEH,0CAA0C;AAC1C,MAAM,MAAM,iBAAiB,GAAG,MAAM,GAAG,SAAS,GAAG,UAAU,CAAA;AAE/D,+DAA+D;AAC/D,MAAM,WAAW,QAAQ;IACvB,oEAAoE;IACpE,EAAE,EAAE,MAAM,CAAA;IACV,yDAAyD;IACzD,SAAS,EAAE,MAAM,CAAA;IACjB,mCAAmC;IACnC,SAAS,EAAE,iBAAiB,CAAA;IAC5B,4EAA4E;IAC5E,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,0FAA0F;IAC1F,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,qFAAqF;IACrF,KAAK,EAAE,MAAM,EAAE,CAAA;IACf,oCAAoC;IACpC,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,oEAAoE;IACpE,YAAY,CAAC,EAAE,MAAM,CAAA;CACtB;AAED,qEAAqE;AACrE,MAAM,WAAW,gBAAiB,SAAQ,QAAQ;IAChD;;;;OAIG;IACH,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CACjC;AAED,+CAA+C;AAC/C,MAAM,WAAW,gBAAgB;IAC/B,yEAAyE;IACzE,YAAY,CAAC,EAAE,MAAM,CAAA;CACtB;AAED,0EAA0E;AAC1E,MAAM,WAAW,aAAa;IAC5B,SAAS,EAAE,iBAAiB,CAAA;IAC5B,4CAA4C;IAC5C,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,mEAAmE;IACnE,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,oCAAoC;IACpC,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,oEAAoE;IACpE,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB
|
|
1
|
+
{"version":3,"file":"history.d.ts","sourceRoot":"","sources":["../src/history.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAEH,0CAA0C;AAC1C,MAAM,MAAM,iBAAiB,GAAG,MAAM,GAAG,SAAS,GAAG,UAAU,CAAA;AAE/D,+DAA+D;AAC/D,MAAM,WAAW,QAAQ;IACvB,oEAAoE;IACpE,EAAE,EAAE,MAAM,CAAA;IACV,yDAAyD;IACzD,SAAS,EAAE,MAAM,CAAA;IACjB,mCAAmC;IACnC,SAAS,EAAE,iBAAiB,CAAA;IAC5B,4EAA4E;IAC5E,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,0FAA0F;IAC1F,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,qFAAqF;IACrF,KAAK,EAAE,MAAM,EAAE,CAAA;IACf,oCAAoC;IACpC,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,oEAAoE;IACpE,YAAY,CAAC,EAAE,MAAM,CAAA;CACtB;AAED,qEAAqE;AACrE,MAAM,WAAW,gBAAiB,SAAQ,QAAQ;IAChD;;;;OAIG;IACH,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CACjC;AAED,+CAA+C;AAC/C,MAAM,WAAW,gBAAgB;IAC/B,yEAAyE;IACzE,YAAY,CAAC,EAAE,MAAM,CAAA;CACtB;AAED;;;;;;;;;GASG;AACH,MAAM,MAAM,WAAW,GAAG,MAAM,GAAG,UAAU,CAAA;AAE7C,0EAA0E;AAC1E,MAAM,WAAW,aAAa;IAC5B,SAAS,EAAE,iBAAiB,CAAA;IAC5B,4CAA4C;IAC5C,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,mEAAmE;IACnE,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,oCAAoC;IACpC,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,oEAAoE;IACpE,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB;;;;;;;OAOG;IACH,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,WAAW,CAAC,CAAA;CAChC;AAED;;;;GAIG;AACH,MAAM,WAAW,eAAe;IAC9B;;;;;;;;;OASG;IACH,cAAc,CAAC,KAAK,EAAE,aAAa,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAA;IAEvD,gEAAgE;IAChE,aAAa,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAA;IAElD,6DAA6D;IAC7D,YAAY,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAAA;IAEnD;;;;;;;;;OASG;IACH,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,CAAA;IAE3C;;;OAGG;IACH,cAAc,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;CAC1C"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export type { RenderOutput, TemplateFunction, EditorMount, FieldMount, TemplateModule, ComponentManifest, FragmentManifest, PageManifest, SiteManifest, ResolvedComponent, TargetConfig, StorageConfig, WorkerConfig, CacheConfig, DirEntry, StorageProvider, PurgeStrategy, } from './types.js';
|
|
1
|
+
export type { RenderOutput, TemplateFunction, EditorMount, FieldMount, TemplateModule, ComponentManifest, FragmentManifest, PageManifest, SiteManifest, ResolvedComponent, TargetConfig, StorageConfig, WorkerConfig, CacheConfig, DirEntry, StorageProvider, ByteRange, PurgeStrategy, } from './types.js';
|
|
2
2
|
export { getType, isEditable } from './types.js';
|
|
3
3
|
export type { TargetType } from './types.js';
|
|
4
4
|
export { createTargetRegistryView, listEditableTargets, UnknownTargetError, NoEditableTargetError, } from './targets.js';
|
|
@@ -31,15 +31,13 @@ export { createAzureBlobProvider } from './providers/azure-blob.js';
|
|
|
31
31
|
export type { AzureBlobProviderOptions } from './providers/azure-blob.js';
|
|
32
32
|
export { createS3Provider } from './providers/s3.js';
|
|
33
33
|
export type { S3ProviderOptions } from './providers/s3.js';
|
|
34
|
-
export { createR2RestProvider } from './providers/r2.js';
|
|
35
|
-
export type { R2RestProviderOptions } from './providers/r2.js';
|
|
36
34
|
export { createStorageProvider, createTargetRegistry } from './targets.js';
|
|
37
35
|
export { bootstrapFromSiteYaml, buildSourceContext } from './cli/bootstrap.js';
|
|
38
36
|
export type { BootstrapResult, BuildSourceContextOptions } from './cli/bootstrap.js';
|
|
39
37
|
export { createServer } from './serve.js';
|
|
40
38
|
export type { ServeOptions } from './serve.js';
|
|
41
39
|
export { publishItems, resolveDependencies } from './publish.js';
|
|
42
|
-
export { publishPageRendered, publishPageStatic, publishFragmentRendered, publishSiteManifest,
|
|
40
|
+
export { publishPageRendered, publishPageStatic, publishFragmentRendered, publishSiteManifest, publishDepIndices, } from './publish-rendered.js';
|
|
43
41
|
export { format } from './formats.js';
|
|
44
42
|
export { assembleEsi, parseCacheComment, splitFragment, findEsiPaths } from './assemble.js';
|
|
45
43
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -20,7 +20,6 @@ export { scopeHtml, scopeCss, hashPath } from './scope.js';
|
|
|
20
20
|
export { createFilesystemProvider } from './providers/filesystem.js';
|
|
21
21
|
export { createAzureBlobProvider } from './providers/azure-blob.js';
|
|
22
22
|
export { createS3Provider } from './providers/s3.js';
|
|
23
|
-
export { createR2RestProvider } from './providers/r2.js';
|
|
24
23
|
// Targets
|
|
25
24
|
export { createStorageProvider, createTargetRegistry } from './targets.js';
|
|
26
25
|
// Bootstrap helpers — read site.yaml, build registry, derive SourceContext
|
|
@@ -29,7 +28,7 @@ export { bootstrapFromSiteYaml, buildSourceContext } from './cli/bootstrap.js';
|
|
|
29
28
|
export { createServer } from './serve.js';
|
|
30
29
|
// Publish
|
|
31
30
|
export { publishItems, resolveDependencies } from './publish.js';
|
|
32
|
-
export { publishPageRendered, publishPageStatic, publishFragmentRendered, publishSiteManifest,
|
|
31
|
+
export { publishPageRendered, publishPageStatic, publishFragmentRendered, publishSiteManifest, publishDepIndices, } from './publish-rendered.js';
|
|
33
32
|
// Format helpers
|
|
34
33
|
export { format } from './formats.js';
|
|
35
34
|
// ESI assembly (for edge workers and servers)
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAqBA,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAA;AAEhD,OAAO,EACL,wBAAwB,EACxB,mBAAmB,EACnB,kBAAkB,EAClB,qBAAqB,GACtB,MAAM,cAAc,CAAA;AAErB,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAA;AAErD,OAAO,EAAE,mBAAmB,EAAE,+BAA+B,EAAE,MAAM,+BAA+B,CAAA;AAUpG,OAAO,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAA;AAE7D,OAAO,EACL,WAAW,EACX,sBAAsB,EACtB,uBAAuB,GACxB,MAAM,uBAAuB,CAAA;AAM9B,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAA;AAEvD,OAAO,EACL,gBAAgB,EAChB,mBAAmB,EACnB,yBAAyB,GAC1B,MAAM,YAAY,CAAA;AAGnB,oBAAoB;AACpB,OAAO,EACL,aAAa,EACb,eAAe,EACf,gBAAgB,EAChB,kBAAkB,EAClB,oBAAoB,EACpB,kBAAkB,EAClB,cAAc,EACd,qBAAqB,EACrB,iBAAiB,GAClB,MAAM,aAAa,CAAA;AAGpB,WAAW;AACX,OAAO,EACL,eAAe,EACf,cAAc,EACd,UAAU,GAGX,MAAM,eAAe,CAAA;AACtB,OAAO,EAAE,cAAc,EAA4B,MAAM,UAAU,CAAA;AACnE,OAAO,EAAE,gBAAgB,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AAC9E,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAA;AAE3C,OAAO,EAAE,cAAc,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAA;AACrE,OAAO,EAAE,YAAY,EAAE,kBAAkB,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAA;AAC/F,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AAE1D,oBAAoB;AACpB,OAAO,EAAE,wBAAwB,EAAE,MAAM,2BAA2B,CAAA;AACpE,OAAO,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAA;AAEnE,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAA;AAGpD,UAAU;AACV,OAAO,EAAE,qBAAqB,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAA;AAE1E,2EAA2E;AAC3E,OAAO,EAAE,qBAAqB,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAA;AAG9E,SAAS;AACT,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AAGzC,UAAU;AACV,OAAO,EAAE,YAAY,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAA;AAChE,OAAO,EACL,mBAAmB,EACnB,iBAAiB,EACjB,uBAAuB,EACvB,mBAAmB,EACnB,iBAAiB,GAClB,MAAM,uBAAuB,CAAA;AAE9B,iBAAiB;AACjB,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAA;AAErC,8CAA8C;AAC9C,OAAO,EAAE,WAAW,EAAE,iBAAiB,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,eAAe,CAAA;AAE3F,0GAA0G"}
|
package/dist/locale.d.ts
CHANGED
|
@@ -71,4 +71,24 @@ export declare function resolveLocaleFallback(locale: string, available: Set<str
|
|
|
71
71
|
* Other locales → '/{locale}'.
|
|
72
72
|
*/
|
|
73
73
|
export declare function localeRoutePrefix(locale: string, resolved: ResolvedLocales): string;
|
|
74
|
+
/**
|
|
75
|
+
* Build the locale fallback chain for a given active locale, EXCLUDING the
|
|
76
|
+
* default locale (which is always read separately as the base manifest).
|
|
77
|
+
*
|
|
78
|
+
* Distinct from `resolveLocaleFallback` (which is "first-found-wins" page
|
|
79
|
+
* resolution). This helper supports **per-field cascade** in asset metadata:
|
|
80
|
+
* the asset walker reads each variant in chain order and merges most-specific-
|
|
81
|
+
* wins, so a French page can pick up `pt-BR` alt overrides through the
|
|
82
|
+
* configured `pt-BR → pt` fallback while still using default for everything
|
|
83
|
+
* else.
|
|
84
|
+
*
|
|
85
|
+
* Examples (with site default `en`, fallbacks `{ 'pt-BR': 'pt' }`):
|
|
86
|
+
* localeFallbackChain('pt-BR', resolved) → ['pt-br', 'pt']
|
|
87
|
+
* localeFallbackChain('fr', resolved) → ['fr']
|
|
88
|
+
* localeFallbackChain('en', resolved) → [] (active === default; no chain)
|
|
89
|
+
*
|
|
90
|
+
* The default locale never appears in the chain — callers always read the
|
|
91
|
+
* default manifest first as the base, then apply the chain on top.
|
|
92
|
+
*/
|
|
93
|
+
export declare function localeFallbackChain(locale: string, resolved: ResolvedLocales): readonly string[];
|
|
74
94
|
//# sourceMappingURL=locale.d.ts.map
|
package/dist/locale.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"locale.d.ts","sourceRoot":"","sources":["../src/locale.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,YAAY,EAAiB,MAAM,YAAY,CAAA;AAE3E,qDAAqD;AACrD,MAAM,WAAW,eAAe;IAC9B,2DAA2D;IAC3D,SAAS,EAAE,MAAM,EAAE,CAAA;IACnB,+BAA+B;IAC/B,OAAO,EAAE,MAAM,CAAA;IACf,oDAAoD;IACpD,aAAa,EAAE,OAAO,CAAA;IACtB,6DAA6D;IAC7D,SAAS,EAAE,OAAO,CAAA;IAClB,+CAA+C;IAC/C,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CAClC;AAKD;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAErD;AAED,iEAAiE;AACjE,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAEtD;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,YAAY,GAAG,MAAM,CAE3D;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,YAAY,GAAG,eAAe,GAAG,IAAI,CAY7E;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,YAAY,EAAE,IAAI,EAAE,YAAY,GAAG,eAAe,GAAG,IAAI,CAsBrG;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAWpF;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,GAAG,MAAM,CAG9E;AAED;;;;;;;;GAQG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,GAAG,CAAC,MAAM,CAAC,EAAE,QAAQ,EAAE,eAAe,GAAG,MAAM,CAiB/G;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,eAAe,GAAG,MAAM,CAInF"}
|
|
1
|
+
{"version":3,"file":"locale.d.ts","sourceRoot":"","sources":["../src/locale.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,YAAY,EAAiB,MAAM,YAAY,CAAA;AAE3E,qDAAqD;AACrD,MAAM,WAAW,eAAe;IAC9B,2DAA2D;IAC3D,SAAS,EAAE,MAAM,EAAE,CAAA;IACnB,+BAA+B;IAC/B,OAAO,EAAE,MAAM,CAAA;IACf,oDAAoD;IACpD,aAAa,EAAE,OAAO,CAAA;IACtB,6DAA6D;IAC7D,SAAS,EAAE,OAAO,CAAA;IAClB,+CAA+C;IAC/C,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CAClC;AAKD;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAErD;AAED,iEAAiE;AACjE,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAEtD;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,YAAY,GAAG,MAAM,CAE3D;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,YAAY,GAAG,eAAe,GAAG,IAAI,CAY7E;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,YAAY,EAAE,IAAI,EAAE,YAAY,GAAG,eAAe,GAAG,IAAI,CAsBrG;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAWpF;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,GAAG,MAAM,CAG9E;AAED;;;;;;;;GAQG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,GAAG,CAAC,MAAM,CAAC,EAAE,QAAQ,EAAE,eAAe,GAAG,MAAM,CAiB/G;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,eAAe,GAAG,MAAM,CAInF;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,eAAe,GAAG,SAAS,MAAM,EAAE,CAehG"}
|
package/dist/locale.js
CHANGED
|
@@ -137,6 +137,44 @@ export function localeRoutePrefix(locale, resolved) {
|
|
|
137
137
|
return '';
|
|
138
138
|
return `/${norm}`;
|
|
139
139
|
}
|
|
140
|
+
/**
|
|
141
|
+
* Build the locale fallback chain for a given active locale, EXCLUDING the
|
|
142
|
+
* default locale (which is always read separately as the base manifest).
|
|
143
|
+
*
|
|
144
|
+
* Distinct from `resolveLocaleFallback` (which is "first-found-wins" page
|
|
145
|
+
* resolution). This helper supports **per-field cascade** in asset metadata:
|
|
146
|
+
* the asset walker reads each variant in chain order and merges most-specific-
|
|
147
|
+
* wins, so a French page can pick up `pt-BR` alt overrides through the
|
|
148
|
+
* configured `pt-BR → pt` fallback while still using default for everything
|
|
149
|
+
* else.
|
|
150
|
+
*
|
|
151
|
+
* Examples (with site default `en`, fallbacks `{ 'pt-BR': 'pt' }`):
|
|
152
|
+
* localeFallbackChain('pt-BR', resolved) → ['pt-br', 'pt']
|
|
153
|
+
* localeFallbackChain('fr', resolved) → ['fr']
|
|
154
|
+
* localeFallbackChain('en', resolved) → [] (active === default; no chain)
|
|
155
|
+
*
|
|
156
|
+
* The default locale never appears in the chain — callers always read the
|
|
157
|
+
* default manifest first as the base, then apply the chain on top.
|
|
158
|
+
*/
|
|
159
|
+
export function localeFallbackChain(locale, resolved) {
|
|
160
|
+
const norm = normalizeLocale(locale);
|
|
161
|
+
if (norm === resolved.default)
|
|
162
|
+
return [];
|
|
163
|
+
const chain = [norm];
|
|
164
|
+
const visited = new Set([norm]);
|
|
165
|
+
let current = norm;
|
|
166
|
+
while (resolved.fallbacks[current]) {
|
|
167
|
+
const next = resolved.fallbacks[current];
|
|
168
|
+
if (next === resolved.default)
|
|
169
|
+
break;
|
|
170
|
+
if (visited.has(next))
|
|
171
|
+
break; // cycle: stop, never re-visit
|
|
172
|
+
visited.add(next);
|
|
173
|
+
chain.push(next);
|
|
174
|
+
current = next;
|
|
175
|
+
}
|
|
176
|
+
return chain;
|
|
177
|
+
}
|
|
140
178
|
/** Normalize fallback keys and values to lowercase. */
|
|
141
179
|
function normalizeFallbacks(fallbacks) {
|
|
142
180
|
if (!fallbacks)
|
package/dist/locale.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"locale.js","sourceRoot":"","sources":["../src/locale.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"locale.js","sourceRoot":"","sources":["../src/locale.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export declare function atomicWriteString(path: string, content: string): Promise<void>;
|
|
2
|
+
/**
|
|
3
|
+
* Atomic byte write — bytes-in, no string round-trip. Used by callers
|
|
4
|
+
* that have a buffer in hand (history blobs, bounded asset writes).
|
|
5
|
+
* Same write-then-rename guarantees as atomicWriteString.
|
|
6
|
+
*/
|
|
7
|
+
export declare function atomicWriteBytes(path: string, bytes: Uint8Array): Promise<void>;
|
|
8
|
+
export declare function atomicWriteStream(path: string, stream: ReadableStream<Uint8Array>): Promise<void>;
|
|
9
|
+
//# sourceMappingURL=_atomic-write.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"_atomic-write.d.ts","sourceRoot":"","sources":["../../src/providers/_atomic-write.ts"],"names":[],"mappings":"AA+BA,wBAAsB,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAKpF;AAED;;;;GAIG;AACH,wBAAsB,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAMrF;AAED,wBAAsB,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,cAAc,CAAC,UAAU,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAuBvG"}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Atomic file write policy for the filesystem provider.
|
|
3
|
+
*
|
|
4
|
+
* Both text and binary-stream writes use a write-then-rename strategy so
|
|
5
|
+
* readers mid-write never see a partial file:
|
|
6
|
+
*
|
|
7
|
+
* - Text (`atomicWriteString`): delegates to the `write-file-atomic` package
|
|
8
|
+
* (same pattern everyone else in the Node ecosystem uses — sharp's internal
|
|
9
|
+
* config, npm's lockfile writer, etc.).
|
|
10
|
+
* - Binary stream (`atomicWriteStream`): pipes the incoming stream into a
|
|
11
|
+
* same-directory temp file, then renames onto the target. Temp is cleaned
|
|
12
|
+
* up on pipeline failure.
|
|
13
|
+
*
|
|
14
|
+
* Atomicity guarantees:
|
|
15
|
+
* - POSIX `rename(2)` is atomic within a single filesystem. Node's
|
|
16
|
+
* `fs.rename` delegates to it on POSIX systems.
|
|
17
|
+
* - Windows `MoveFileEx` with `MOVEFILE_REPLACE_EXISTING` is atomic on NTFS
|
|
18
|
+
* when source and target are on the same volume — write-file-atomic (for
|
|
19
|
+
* text) and our temp-path scheme (for streams) both place the temp file
|
|
20
|
+
* in the same directory as the target to meet this requirement.
|
|
21
|
+
*
|
|
22
|
+
* This module is filesystem-specific. Cloud storage (R2, S3, Azure) has
|
|
23
|
+
* naturally atomic single-object PUT and does not need this policy.
|
|
24
|
+
*/
|
|
25
|
+
import { createWriteStream } from 'node:fs';
|
|
26
|
+
import { mkdir, rename, rm } from 'node:fs/promises';
|
|
27
|
+
import { dirname } from 'node:path';
|
|
28
|
+
import { pipeline } from 'node:stream/promises';
|
|
29
|
+
import writeFileAtomic from 'write-file-atomic';
|
|
30
|
+
import { webReadableToNode } from './_stream-interop.js';
|
|
31
|
+
export async function atomicWriteString(path, content) {
|
|
32
|
+
// Parent directory must exist before write-file-atomic creates its tempfile
|
|
33
|
+
// next to the target. Same contract as atomicWriteStream.
|
|
34
|
+
await mkdir(dirname(path), { recursive: true });
|
|
35
|
+
await writeFileAtomic(path, content, 'utf-8');
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Atomic byte write — bytes-in, no string round-trip. Used by callers
|
|
39
|
+
* that have a buffer in hand (history blobs, bounded asset writes).
|
|
40
|
+
* Same write-then-rename guarantees as atomicWriteString.
|
|
41
|
+
*/
|
|
42
|
+
export async function atomicWriteBytes(path, bytes) {
|
|
43
|
+
await mkdir(dirname(path), { recursive: true });
|
|
44
|
+
// write-file-atomic accepts Buffer | Uint8Array directly; no encoding
|
|
45
|
+
// applied when the second arg is bytes. Wrap in Buffer for consistent
|
|
46
|
+
// typing across Node versions (Buffer extends Uint8Array).
|
|
47
|
+
await writeFileAtomic(path, Buffer.from(bytes.buffer, bytes.byteOffset, bytes.byteLength));
|
|
48
|
+
}
|
|
49
|
+
export async function atomicWriteStream(path, stream) {
|
|
50
|
+
// Parent directory must exist before createWriteStream can create the file.
|
|
51
|
+
// (`write-file-atomic` handles this for text; for streams we do it ourselves.)
|
|
52
|
+
await mkdir(dirname(path), { recursive: true });
|
|
53
|
+
const tmpPath = `${path}.${process.pid}.${Math.random().toString(36).slice(2)}.tmp`;
|
|
54
|
+
const writer = createWriteStream(tmpPath);
|
|
55
|
+
try {
|
|
56
|
+
await pipeline(webReadableToNode(stream), writer);
|
|
57
|
+
}
|
|
58
|
+
catch (err) {
|
|
59
|
+
// Clean up the temp file on pipeline failure; swallow rm errors
|
|
60
|
+
// (already-missing temp is fine).
|
|
61
|
+
await rm(tmpPath, { force: true }).catch(() => { });
|
|
62
|
+
throw err;
|
|
63
|
+
}
|
|
64
|
+
try {
|
|
65
|
+
await rename(tmpPath, path);
|
|
66
|
+
}
|
|
67
|
+
catch (err) {
|
|
68
|
+
await rm(tmpPath, { force: true }).catch(() => { });
|
|
69
|
+
throw err;
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
//# sourceMappingURL=_atomic-write.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"_atomic-write.js","sourceRoot":"","sources":["../../src/providers/_atomic-write.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,OAAO,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAA;AAC3C,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,kBAAkB,CAAA;AACpD,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AACnC,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAA;AAC/C,OAAO,eAAe,MAAM,mBAAmB,CAAA;AAC/C,OAAO,EAAE,iBAAiB,EAAiB,MAAM,sBAAsB,CAAA;AAEvE,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,IAAY,EAAE,OAAe;IACnE,4EAA4E;IAC5E,0DAA0D;IAC1D,MAAM,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;IAC/C,MAAM,eAAe,CAAC,IAAI,EAAE,OAAO,EAAE,OAAO,CAAC,CAAA;AAC/C,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,IAAY,EAAE,KAAiB;IACpE,MAAM,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;IAC/C,sEAAsE;IACtE,sEAAsE;IACtE,2DAA2D;IAC3D,MAAM,eAAe,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,UAAU,EAAE,KAAK,CAAC,UAAU,CAAC,CAAC,CAAA;AAC5F,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,IAAY,EAAE,MAAkC;IACtF,4EAA4E;IAC5E,+EAA+E;IAC/E,MAAM,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;IAE/C,MAAM,OAAO,GAAG,GAAG,IAAI,IAAI,OAAO,CAAC,GAAG,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAA;IACnF,MAAM,MAAM,GAAG,iBAAiB,CAAC,OAAO,CAAC,CAAA;IAEzC,IAAI,CAAC;QACH,MAAM,QAAQ,CAAC,iBAAiB,CAAC,MAAM,CAAC,EAAE,MAAkB,CAAC,CAAA;IAC/D,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,gEAAgE;QAChE,kCAAkC;QAClC,MAAM,EAAE,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAA;QAClD,MAAM,GAAG,CAAA;IACX,CAAC;IAED,IAAI,CAAC;QACH,MAAM,MAAM,CAAC,OAAO,EAAE,IAAI,CAAC,CAAA;IAC7B,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,EAAE,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAA;QAClD,MAAM,GAAG,CAAA;IACX,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Storage adapter utility — idempotent remove via probe-then-delete.
|
|
3
|
+
*
|
|
4
|
+
* Uses `exists()` to determine whether the path is present, then `rm()`
|
|
5
|
+
* only when it is. This delegates the "is it missing?" decision to the
|
|
6
|
+
* provider's own `exists()` implementation — no cross-provider error-
|
|
7
|
+
* shape matching needed.
|
|
8
|
+
*
|
|
9
|
+
* Why probe-then-delete instead of try/catch:
|
|
10
|
+
* - `exists()` is already part of the StorageProvider contract and every
|
|
11
|
+
* provider knows how to answer it correctly for its backend.
|
|
12
|
+
* - Matching raw error messages (`ENOENT`, `NoSuchKey`, etc.) across four
|
|
13
|
+
* providers is fragile and accumulates drift as providers version.
|
|
14
|
+
* - A TOCTOU race (file deleted between probe and rm) just means `rm()`
|
|
15
|
+
* throws, and the caller sees a real error — acceptable because the
|
|
16
|
+
* race is vanishingly rare in our single-writer model (the admin is the
|
|
17
|
+
* only writer on source content during v1).
|
|
18
|
+
*
|
|
19
|
+
* When the storage interface grows a typed `StorageNotFoundError`
|
|
20
|
+
* (separate PR — retrofit across all four providers + all existing `rm`
|
|
21
|
+
* callers), this helper becomes a one-liner try/catch. Until then, the
|
|
22
|
+
* probe is the honest abstraction boundary.
|
|
23
|
+
*/
|
|
24
|
+
import type { StorageProvider } from '../types.js';
|
|
25
|
+
/**
|
|
26
|
+
* `rm(path)` that swallows "already missing" — probes with `exists()`
|
|
27
|
+
* first. Returns `true` if a file was actually removed, `false` if it
|
|
28
|
+
* was already gone. Callers that care can distinguish.
|
|
29
|
+
*/
|
|
30
|
+
export declare function rmIgnoreMissing(storage: StorageProvider, path: string): Promise<boolean>;
|
|
31
|
+
//# sourceMappingURL=_rm-ignore-missing.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"_rm-ignore-missing.d.ts","sourceRoot":"","sources":["../../src/providers/_rm-ignore-missing.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAA;AAElD;;;;GAIG;AACH,wBAAsB,eAAe,CAAC,OAAO,EAAE,eAAe,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAI9F"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `rm(path)` that swallows "already missing" — probes with `exists()`
|
|
3
|
+
* first. Returns `true` if a file was actually removed, `false` if it
|
|
4
|
+
* was already gone. Callers that care can distinguish.
|
|
5
|
+
*/
|
|
6
|
+
export async function rmIgnoreMissing(storage, path) {
|
|
7
|
+
if (!(await storage.exists(path)))
|
|
8
|
+
return false;
|
|
9
|
+
await storage.rm(path);
|
|
10
|
+
return true;
|
|
11
|
+
}
|
|
12
|
+
//# sourceMappingURL=_rm-ignore-missing.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"_rm-ignore-missing.js","sourceRoot":"","sources":["../../src/providers/_rm-ignore-missing.ts"],"names":[],"mappings":"AAyBA;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,OAAwB,EAAE,IAAY;IAC1E,IAAI,CAAC,CAAC,MAAM,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAAE,OAAO,KAAK,CAAA;IAC/C,MAAM,OAAO,CAAC,EAAE,CAAC,IAAI,CAAC,CAAA;IACtB,OAAO,IAAI,CAAA;AACb,CAAC"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Stream interoperability between Node's `stream` module and the WHATWG
|
|
3
|
+
* `ReadableStream` web standard.
|
|
4
|
+
*
|
|
5
|
+
* Node 16.5+ provides `Readable.toWeb` / `Readable.fromWeb`, but the types
|
|
6
|
+
* are subtly wrong for our use case — they return/accept the `node:stream/web`
|
|
7
|
+
* variant of `ReadableStream` rather than the lib-dom global. These helpers
|
|
8
|
+
* do the single-point type coercion so every consumer of the filesystem
|
|
9
|
+
* provider's streaming methods (and future providers) sees the standard
|
|
10
|
+
* web type without casting at each call site.
|
|
11
|
+
*/
|
|
12
|
+
import { Readable, type Writable } from 'node:stream';
|
|
13
|
+
/** Coerce a Node Readable into the standard `ReadableStream<Uint8Array>`. */
|
|
14
|
+
export declare function nodeReadableToWeb(stream: Readable): ReadableStream<Uint8Array>;
|
|
15
|
+
/** Coerce a standard `ReadableStream<Uint8Array>` into a Node Readable. */
|
|
16
|
+
export declare function webReadableToNode(stream: ReadableStream<Uint8Array>): Readable;
|
|
17
|
+
/**
|
|
18
|
+
* Re-exported type alias — callers doing `pipeline(webReadableToNode(s), writer)`
|
|
19
|
+
* need the Writable type for the writer argument, but the Node `stream` module's
|
|
20
|
+
* typing is verbose to import in every provider.
|
|
21
|
+
*/
|
|
22
|
+
export type { Writable };
|
|
23
|
+
//# sourceMappingURL=_stream-interop.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"_stream-interop.d.ts","sourceRoot":"","sources":["../../src/providers/_stream-interop.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,OAAO,EAAE,QAAQ,EAAE,KAAK,QAAQ,EAAE,MAAM,aAAa,CAAA;AAErD,6EAA6E;AAC7E,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,QAAQ,GAAG,cAAc,CAAC,UAAU,CAAC,CAE9E;AAED,2EAA2E;AAC3E,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,cAAc,CAAC,UAAU,CAAC,GAAG,QAAQ,CAE9E;AAED;;;;GAIG;AACH,YAAY,EAAE,QAAQ,EAAE,CAAA"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Stream interoperability between Node's `stream` module and the WHATWG
|
|
3
|
+
* `ReadableStream` web standard.
|
|
4
|
+
*
|
|
5
|
+
* Node 16.5+ provides `Readable.toWeb` / `Readable.fromWeb`, but the types
|
|
6
|
+
* are subtly wrong for our use case — they return/accept the `node:stream/web`
|
|
7
|
+
* variant of `ReadableStream` rather than the lib-dom global. These helpers
|
|
8
|
+
* do the single-point type coercion so every consumer of the filesystem
|
|
9
|
+
* provider's streaming methods (and future providers) sees the standard
|
|
10
|
+
* web type without casting at each call site.
|
|
11
|
+
*/
|
|
12
|
+
import { Readable } from 'node:stream';
|
|
13
|
+
/** Coerce a Node Readable into the standard `ReadableStream<Uint8Array>`. */
|
|
14
|
+
export function nodeReadableToWeb(stream) {
|
|
15
|
+
return Readable.toWeb(stream);
|
|
16
|
+
}
|
|
17
|
+
/** Coerce a standard `ReadableStream<Uint8Array>` into a Node Readable. */
|
|
18
|
+
export function webReadableToNode(stream) {
|
|
19
|
+
return Readable.fromWeb(stream);
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=_stream-interop.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"_stream-interop.js","sourceRoot":"","sources":["../../src/providers/_stream-interop.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,OAAO,EAAE,QAAQ,EAAiB,MAAM,aAAa,CAAA;AAErD,6EAA6E;AAC7E,MAAM,UAAU,iBAAiB,CAAC,MAAgB;IAChD,OAAO,QAAQ,CAAC,KAAK,CAAC,MAAM,CAA+B,CAAA;AAC7D,CAAC;AAED,2EAA2E;AAC3E,MAAM,UAAU,iBAAiB,CAAC,MAAkC;IAClE,OAAO,QAAQ,CAAC,OAAO,CAAC,MAA8D,CAAC,CAAA;AACzF,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"azure-blob.d.ts","sourceRoot":"","sources":["../../src/providers/azure-blob.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"azure-blob.d.ts","sourceRoot":"","sources":["../../src/providers/azure-blob.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAuB,eAAe,EAAE,MAAM,aAAa,CAAA;AAGvE,MAAM,WAAW,wBAAwB;IACvC,gBAAgB,EAAE,MAAM,CAAA;IACxB,SAAS,EAAE,MAAM,CAAA;CAClB;AAWD,wBAAgB,uBAAuB,CACrC,OAAO,EAAE,wBAAwB,GAChC,eAAe,GAAG;IAAE,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAAA;CAAE,CA0I7C"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { BlobServiceClient } from '@azure/storage-blob';
|
|
2
|
+
import { nodeReadableToWeb, webReadableToNode } from './_stream-interop.js';
|
|
2
3
|
async function streamToString(readableStream) {
|
|
3
4
|
return new Promise((resolve, reject) => {
|
|
4
5
|
const chunks = [];
|
|
@@ -64,6 +65,28 @@ export function createAzureBlobProvider(options) {
|
|
|
64
65
|
blobHTTPHeaders: { blobContentType: 'text/plain; charset=utf-8' },
|
|
65
66
|
});
|
|
66
67
|
},
|
|
68
|
+
async readBytes(path) {
|
|
69
|
+
const blobClient = containerClient.getBlockBlobClient(normalizePath(path));
|
|
70
|
+
try {
|
|
71
|
+
// `downloadToBuffer` is the SDK's bytes-in-hand accessor —
|
|
72
|
+
// single round-trip, no manual stream collection. Returns a
|
|
73
|
+
// Buffer (which extends Uint8Array).
|
|
74
|
+
return await blobClient.downloadToBuffer();
|
|
75
|
+
}
|
|
76
|
+
catch (err) {
|
|
77
|
+
const statusCode = err.statusCode;
|
|
78
|
+
if (statusCode === 404)
|
|
79
|
+
throw new Error(`File not found: ${path}`);
|
|
80
|
+
throw new Error(`Cannot read bytes from ${path}: ${err.message}`);
|
|
81
|
+
}
|
|
82
|
+
},
|
|
83
|
+
async writeBytes(path, content) {
|
|
84
|
+
const blobClient = containerClient.getBlockBlobClient(normalizePath(path));
|
|
85
|
+
// `upload` is the bounded, single-PUT path — atomic per object.
|
|
86
|
+
// Wrap in Buffer for stable Uint8Array handling across Node versions.
|
|
87
|
+
const buf = Buffer.from(content.buffer, content.byteOffset, content.byteLength);
|
|
88
|
+
await blobClient.upload(buf, buf.byteLength);
|
|
89
|
+
},
|
|
67
90
|
async mkdir(_path) {
|
|
68
91
|
// Azure Blob has no directories — they're implicit from blob name prefixes.
|
|
69
92
|
// Nothing to do.
|
|
@@ -82,6 +105,43 @@ export function createAzureBlobProvider(options) {
|
|
|
82
105
|
await containerClient.getBlockBlobClient(blob.name).delete();
|
|
83
106
|
}
|
|
84
107
|
},
|
|
108
|
+
async readStream(path, range) {
|
|
109
|
+
const blobClient = containerClient.getBlockBlobClient(normalizePath(path));
|
|
110
|
+
try {
|
|
111
|
+
// Azure's `download(offset, count)` is offset+length, not start+end.
|
|
112
|
+
// Convert from our inclusive ByteRange to Azure's offset+count.
|
|
113
|
+
// Azure with no args returns the full blob.
|
|
114
|
+
const response = range
|
|
115
|
+
? await blobClient.download(range.start, range.end - range.start + 1)
|
|
116
|
+
: await blobClient.download();
|
|
117
|
+
if (!response.readableStreamBody)
|
|
118
|
+
throw new Error(`Empty body for ${path}`);
|
|
119
|
+
// The Azure SDK only ships Node-side streams; the typed return is
|
|
120
|
+
// `NodeJS.ReadableStream` (no web stream variant). Bridge to web.
|
|
121
|
+
return nodeReadableToWeb(response.readableStreamBody);
|
|
122
|
+
}
|
|
123
|
+
catch (err) {
|
|
124
|
+
const statusCode = err.statusCode;
|
|
125
|
+
if (statusCode === 404)
|
|
126
|
+
throw new Error(`File not found: ${path}`);
|
|
127
|
+
throw new Error(`Cannot read stream from ${path}: ${err.message}`);
|
|
128
|
+
}
|
|
129
|
+
},
|
|
130
|
+
async writeStream(path, stream) {
|
|
131
|
+
const blobClient = containerClient.getBlockBlobClient(normalizePath(path));
|
|
132
|
+
try {
|
|
133
|
+
// `uploadStream` reads from the Node Readable in 4 MiB blocks (default
|
|
134
|
+
// `bufferSize`), with up to 5 concurrent block uploads. Atomic from
|
|
135
|
+
// a reader's perspective — Azure commits the block list only after
|
|
136
|
+
// the last block is staged, so partial state is never visible.
|
|
137
|
+
// Memory bound is `bufferSize × maxConcurrency` ≈ 20 MiB regardless
|
|
138
|
+
// of total bytes.
|
|
139
|
+
await blobClient.uploadStream(webReadableToNode(stream));
|
|
140
|
+
}
|
|
141
|
+
catch (err) {
|
|
142
|
+
throw new Error(`Cannot write stream to ${path}: ${err.message}`);
|
|
143
|
+
}
|
|
144
|
+
},
|
|
85
145
|
};
|
|
86
146
|
}
|
|
87
147
|
function normalizePath(path) {
|