@anvilkit/plugin-asset-manager 0.1.9 → 0.1.10
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/README.md +96 -3
- package/dist/adapters/data-url.d.cts +1 -0
- package/dist/adapters/data-url.d.cts.map +1 -1
- package/dist/adapters/data-url.d.ts +1 -0
- package/dist/adapters/data-url.d.ts.map +1 -1
- package/dist/adapters/s3-multipart.cjs +425 -0
- package/dist/adapters/s3-multipart.d.cts +43 -0
- package/dist/adapters/s3-multipart.d.cts.map +1 -0
- package/dist/adapters/s3-multipart.d.ts +43 -0
- package/dist/adapters/s3-multipart.d.ts.map +1 -0
- package/dist/adapters/s3-multipart.js +387 -0
- package/dist/adapters/s3-presigned.d.cts +2 -0
- package/dist/adapters/s3-presigned.d.cts.map +1 -1
- package/dist/adapters/s3-presigned.d.ts +2 -0
- package/dist/adapters/s3-presigned.d.ts.map +1 -1
- package/dist/i18n/provider.d.cts +1 -0
- package/dist/i18n/provider.d.cts.map +1 -1
- package/dist/i18n/provider.d.ts +1 -0
- package/dist/i18n/provider.d.ts.map +1 -1
- package/dist/index.cjs +14 -0
- package/dist/index.d.cts +9 -3
- package/dist/index.d.cts.map +1 -1
- package/dist/index.d.ts +9 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -1
- package/dist/plugin.cjs +152 -12
- package/dist/plugin.d.cts +49 -1
- package/dist/plugin.d.cts.map +1 -1
- package/dist/plugin.d.ts +49 -1
- package/dist/plugin.d.ts.map +1 -1
- package/dist/plugin.js +147 -13
- package/dist/sources/composite-source.cjs +3 -0
- package/dist/sources/composite-source.d.cts.map +1 -1
- package/dist/sources/composite-source.d.ts.map +1 -1
- package/dist/sources/composite-source.js +3 -0
- package/dist/sources/federated-search.cjs +45 -7
- package/dist/sources/federated-search.d.cts.map +1 -1
- package/dist/sources/federated-search.d.ts.map +1 -1
- package/dist/sources/federated-search.js +45 -7
- package/dist/sources/provider.d.cts +5 -0
- package/dist/sources/provider.d.cts.map +1 -1
- package/dist/sources/provider.d.ts +5 -0
- package/dist/sources/provider.d.ts.map +1 -1
- package/dist/sources/unsplash/index.d.cts +1 -0
- package/dist/sources/unsplash/index.d.cts.map +1 -1
- package/dist/sources/unsplash/index.d.ts +1 -0
- package/dist/sources/unsplash/index.d.ts.map +1 -1
- package/dist/testing/index.d.cts +4 -0
- package/dist/testing/index.d.cts.map +1 -1
- package/dist/testing/index.d.ts +4 -0
- package/dist/testing/index.d.ts.map +1 -1
- package/dist/types/categories.d.cts +3 -0
- package/dist/types/categories.d.cts.map +1 -1
- package/dist/types/categories.d.ts +3 -0
- package/dist/types/categories.d.ts.map +1 -1
- package/dist/types/data-source.d.cts +9 -0
- package/dist/types/data-source.d.cts.map +1 -1
- package/dist/types/data-source.d.ts +9 -0
- package/dist/types/data-source.d.ts.map +1 -1
- package/dist/types/filter.d.cts +11 -0
- package/dist/types/filter.d.cts.map +1 -1
- package/dist/types/filter.d.ts +11 -0
- package/dist/types/filter.d.ts.map +1 -1
- package/dist/types/folders.d.cts +2 -0
- package/dist/types/folders.d.cts.map +1 -1
- package/dist/types/folders.d.ts +2 -0
- package/dist/types/folders.d.ts.map +1 -1
- package/dist/types/options.d.cts +57 -1
- package/dist/types/options.d.cts.map +1 -1
- package/dist/types/options.d.ts +57 -1
- package/dist/types/options.d.ts.map +1 -1
- package/dist/types/resumable.cjs +42 -0
- package/dist/types/resumable.d.cts +204 -0
- package/dist/types/resumable.d.cts.map +1 -0
- package/dist/types/resumable.d.ts +204 -0
- package/dist/types/resumable.d.ts.map +1 -0
- package/dist/types/resumable.js +4 -0
- package/dist/types/transform.cjs +18 -0
- package/dist/types/transform.d.cts +45 -0
- package/dist/types/transform.d.cts.map +1 -0
- package/dist/types/transform.d.ts +45 -0
- package/dist/types/transform.d.ts.map +1 -0
- package/dist/types/transform.js +1 -0
- package/dist/types/types.d.cts +17 -0
- package/dist/types/types.d.cts.map +1 -1
- package/dist/types/types.d.ts +17 -0
- package/dist/types/types.d.ts.map +1 -1
- package/dist/types/unsplash.d.cts +2 -0
- package/dist/types/unsplash.d.cts.map +1 -1
- package/dist/types/unsplash.d.ts +2 -0
- package/dist/types/unsplash.d.ts.map +1 -1
- package/dist/ui/AssetBrowser.d.cts +3 -1
- package/dist/ui/AssetBrowser.d.cts.map +1 -1
- package/dist/ui/AssetBrowser.d.ts +3 -1
- package/dist/ui/AssetBrowser.d.ts.map +1 -1
- package/dist/ui/AssetCommandPalette.d.cts +4 -1
- package/dist/ui/AssetCommandPalette.d.cts.map +1 -1
- package/dist/ui/AssetCommandPalette.d.ts +4 -1
- package/dist/ui/AssetCommandPalette.d.ts.map +1 -1
- package/dist/ui/AssetManagerUI.cjs +3 -1
- package/dist/ui/AssetManagerUI.d.cts +11 -2
- package/dist/ui/AssetManagerUI.d.cts.map +1 -1
- package/dist/ui/AssetManagerUI.d.ts +11 -2
- package/dist/ui/AssetManagerUI.d.ts.map +1 -1
- package/dist/ui/AssetManagerUI.js +3 -1
- package/dist/ui/DeleteAssetDialog.d.cts +4 -1
- package/dist/ui/DeleteAssetDialog.d.cts.map +1 -1
- package/dist/ui/DeleteAssetDialog.d.ts +4 -1
- package/dist/ui/DeleteAssetDialog.d.ts.map +1 -1
- package/dist/ui/DeleteFolderDialog.d.cts +4 -1
- package/dist/ui/DeleteFolderDialog.d.cts.map +1 -1
- package/dist/ui/DeleteFolderDialog.d.ts +4 -1
- package/dist/ui/DeleteFolderDialog.d.ts.map +1 -1
- package/dist/ui/EmptyFolderState.d.cts +4 -1
- package/dist/ui/EmptyFolderState.d.cts.map +1 -1
- package/dist/ui/EmptyFolderState.d.ts +4 -1
- package/dist/ui/EmptyFolderState.d.ts.map +1 -1
- package/dist/ui/FolderBreadcrumb.d.cts +4 -1
- package/dist/ui/FolderBreadcrumb.d.cts.map +1 -1
- package/dist/ui/FolderBreadcrumb.d.ts +4 -1
- package/dist/ui/FolderBreadcrumb.d.ts.map +1 -1
- package/dist/ui/FolderNameDialog.d.cts +3 -1
- package/dist/ui/FolderNameDialog.d.cts.map +1 -1
- package/dist/ui/FolderNameDialog.d.ts +3 -1
- package/dist/ui/FolderNameDialog.d.ts.map +1 -1
- package/dist/ui/FolderTree.d.cts +4 -1
- package/dist/ui/FolderTree.d.cts.map +1 -1
- package/dist/ui/FolderTree.d.ts +4 -1
- package/dist/ui/FolderTree.d.ts.map +1 -1
- package/dist/ui/MetadataPanel.d.cts +4 -1
- package/dist/ui/MetadataPanel.d.cts.map +1 -1
- package/dist/ui/MetadataPanel.d.ts +4 -1
- package/dist/ui/MetadataPanel.d.ts.map +1 -1
- package/dist/ui/MoveTargetPicker.d.cts +3 -1
- package/dist/ui/MoveTargetPicker.d.cts.map +1 -1
- package/dist/ui/MoveTargetPicker.d.ts +3 -1
- package/dist/ui/MoveTargetPicker.d.ts.map +1 -1
- package/dist/ui/ReplaceAssetDialog.cjs +7 -2
- package/dist/ui/ReplaceAssetDialog.d.cts +5 -2
- package/dist/ui/ReplaceAssetDialog.d.cts.map +1 -1
- package/dist/ui/ReplaceAssetDialog.d.ts +5 -2
- package/dist/ui/ReplaceAssetDialog.d.ts.map +1 -1
- package/dist/ui/ReplaceAssetDialog.js +7 -2
- package/dist/ui/UnsplashPanel.d.cts +4 -1
- package/dist/ui/UnsplashPanel.d.cts.map +1 -1
- package/dist/ui/UnsplashPanel.d.ts +4 -1
- package/dist/ui/UnsplashPanel.d.ts.map +1 -1
- package/dist/ui/UploadButton.cjs +7 -2
- package/dist/ui/UploadButton.d.cts +6 -2
- package/dist/ui/UploadButton.d.cts.map +1 -1
- package/dist/ui/UploadButton.d.ts +6 -2
- package/dist/ui/UploadButton.d.ts.map +1 -1
- package/dist/ui/UploadButton.js +7 -2
- package/dist/utils/asset-reference.cjs +87 -4
- package/dist/utils/asset-reference.d.cts +30 -6
- package/dist/utils/asset-reference.d.cts.map +1 -1
- package/dist/utils/asset-reference.d.ts +30 -6
- package/dist/utils/asset-reference.d.ts.map +1 -1
- package/dist/utils/asset-reference.js +83 -3
- package/dist/utils/csp.cjs +16 -0
- package/dist/utils/csp.d.cts +23 -0
- package/dist/utils/csp.d.cts.map +1 -1
- package/dist/utils/csp.d.ts +23 -0
- package/dist/utils/csp.d.ts.map +1 -1
- package/dist/utils/csp.js +16 -0
- package/dist/utils/data-source.cjs +19 -5
- package/dist/utils/data-source.d.cts +5 -1
- package/dist/utils/data-source.d.cts.map +1 -1
- package/dist/utils/data-source.d.ts +5 -1
- package/dist/utils/data-source.d.ts.map +1 -1
- package/dist/utils/data-source.js +19 -5
- package/dist/utils/errors.d.cts +5 -0
- package/dist/utils/errors.d.cts.map +1 -1
- package/dist/utils/errors.d.ts +5 -0
- package/dist/utils/errors.d.ts.map +1 -1
- package/dist/utils/query-param-transform.cjs +101 -0
- package/dist/utils/query-param-transform.d.cts +46 -0
- package/dist/utils/query-param-transform.d.cts.map +1 -0
- package/dist/utils/query-param-transform.d.ts +46 -0
- package/dist/utils/query-param-transform.d.ts.map +1 -0
- package/dist/utils/query-param-transform.js +60 -0
- package/dist/utils/registry.cjs +3 -0
- package/dist/utils/registry.d.cts +8 -0
- package/dist/utils/registry.d.cts.map +1 -1
- package/dist/utils/registry.d.ts +8 -0
- package/dist/utils/registry.d.ts.map +1 -1
- package/dist/utils/registry.js +3 -0
- package/dist/utils/resolver.cjs +19 -11
- package/dist/utils/resolver.d.cts +24 -0
- package/dist/utils/resolver.d.cts.map +1 -1
- package/dist/utils/resolver.d.ts +24 -0
- package/dist/utils/resolver.d.ts.map +1 -1
- package/dist/utils/resolver.js +19 -11
- package/dist/utils/retry.d.cts +2 -0
- package/dist/utils/retry.d.cts.map +1 -1
- package/dist/utils/retry.d.ts +2 -0
- package/dist/utils/retry.d.ts.map +1 -1
- package/dist/utils/run-resumable-upload.cjs +160 -0
- package/dist/utils/run-resumable-upload.d.cts +56 -0
- package/dist/utils/run-resumable-upload.d.cts.map +1 -0
- package/dist/utils/run-resumable-upload.d.ts +56 -0
- package/dist/utils/run-resumable-upload.d.ts.map +1 -0
- package/dist/utils/run-resumable-upload.js +122 -0
- package/dist/utils/sniff-file-type.cjs +209 -0
- package/dist/utils/sniff-file-type.d.cts +25 -0
- package/dist/utils/sniff-file-type.d.cts.map +1 -0
- package/dist/utils/sniff-file-type.d.ts +25 -0
- package/dist/utils/sniff-file-type.d.ts.map +1 -0
- package/dist/utils/sniff-file-type.js +164 -0
- package/dist/utils/studio-asset-source.cjs +11 -6
- package/dist/utils/studio-asset-source.d.cts +5 -1
- package/dist/utils/studio-asset-source.d.cts.map +1 -1
- package/dist/utils/studio-asset-source.d.ts +5 -1
- package/dist/utils/studio-asset-source.d.ts.map +1 -1
- package/dist/utils/studio-asset-source.js +11 -6
- package/dist/utils/upload-session-store.cjs +125 -0
- package/dist/utils/upload-session-store.d.cts +55 -0
- package/dist/utils/upload-session-store.d.cts.map +1 -0
- package/dist/utils/upload-session-store.d.ts +55 -0
- package/dist/utils/upload-session-store.d.ts.map +1 -0
- package/dist/utils/upload-session-store.js +84 -0
- package/dist/utils/validate-upload-result.cjs +9 -1
- package/dist/utils/validate-upload-result.d.cts +1 -0
- package/dist/utils/validate-upload-result.d.cts.map +1 -1
- package/dist/utils/validate-upload-result.d.ts +1 -0
- package/dist/utils/validate-upload-result.d.ts.map +1 -1
- package/dist/utils/validate-upload-result.js +9 -1
- package/dist/version.cjs +1 -1
- package/dist/version.d.cts +1 -1
- package/dist/version.d.cts.map +1 -1
- package/dist/version.d.ts +1 -1
- package/dist/version.d.ts.map +1 -1
- package/dist/version.js +1 -1
- package/meta/config.json +1 -1
- package/package.json +40 -10
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @file Built-in query-param {@link TransformResolver} (PRD 0004 — review #9).
|
|
3
|
+
*
|
|
4
|
+
* Maps an {@link AssetTransform} onto query parameters appended to the asset's
|
|
5
|
+
* URL — the shape most image CDNs accept (imgix, Cloudinary's `f_`/`w_` via a
|
|
6
|
+
* mapper, Thumbor-ish gateways, etc.). Param names and the `fit`/`format`
|
|
7
|
+
* vocabularies are configurable so one helper covers many CDNs. Lives on its
|
|
8
|
+
* own `./transform` subpath so flat callers never pull it into the eager entry.
|
|
9
|
+
*
|
|
10
|
+
* @experimental Public surface may change before v1.0.
|
|
11
|
+
*/
|
|
12
|
+
import type { AssetTransform, TransformResolver } from "../types/transform.js";
|
|
13
|
+
import type { UploadResult } from "../types/types.js";
|
|
14
|
+
/**
|
|
15
|
+
* Resolve a derivative URL for an asset + transform using `resolver`, falling
|
|
16
|
+
* back to the asset's original URL when the resolver returns `undefined`. The
|
|
17
|
+
* live (non-IR) counterpart to what `createIRAssetResolver` does at export /
|
|
18
|
+
* render time — useful for a host rendering a variant directly.
|
|
19
|
+
*/
|
|
20
|
+
export declare function deriveVariantUrl(asset: UploadResult, transform: AssetTransform, resolver: TransformResolver): string;
|
|
21
|
+
/** Configuration for {@link createQueryParamTransformResolver}. */
|
|
22
|
+
export interface QueryParamTransformResolverOptions {
|
|
23
|
+
/**
|
|
24
|
+
* Override the query parameter names. Defaults to an imgix-style set:
|
|
25
|
+
* `w` / `h` / `fit` / `fm` / `q` / `dpr`.
|
|
26
|
+
*/
|
|
27
|
+
readonly params?: {
|
|
28
|
+
readonly width?: string;
|
|
29
|
+
readonly height?: string;
|
|
30
|
+
readonly fit?: string;
|
|
31
|
+
readonly format?: string;
|
|
32
|
+
readonly quality?: string;
|
|
33
|
+
readonly dpr?: string;
|
|
34
|
+
};
|
|
35
|
+
/** Map the `fit` vocabulary onto the CDN's values (e.g. `cover` → `crop`). */
|
|
36
|
+
readonly fitMap?: Partial<Record<NonNullable<AssetTransform["fit"]>, string>>;
|
|
37
|
+
/** Map the `format` vocabulary onto the CDN's values. */
|
|
38
|
+
readonly formatMap?: Partial<Record<NonNullable<AssetTransform["format"]>, string>>;
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Create a {@link TransformResolver} that appends transform query parameters to
|
|
42
|
+
* each asset's URL, preserving any existing query. Returns `undefined` (→ the
|
|
43
|
+
* original URL) when the transform is empty, so a no-op transform is a no-op.
|
|
44
|
+
*/
|
|
45
|
+
export declare function createQueryParamTransformResolver(options?: QueryParamTransformResolverOptions): TransformResolver;
|
|
46
|
+
//# sourceMappingURL=query-param-transform.d.cts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"query-param-transform.d.cts","sourceRoot":"","sources":["../../src/utils/query-param-transform.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC/E,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEtD;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAC/B,KAAK,EAAE,YAAY,EACnB,SAAS,EAAE,cAAc,EACzB,QAAQ,EAAE,iBAAiB,GACzB,MAAM,CAER;AAED,mEAAmE;AACnE,MAAM,WAAW,kCAAkC;IAClD;;;OAGG;IACH,QAAQ,CAAC,MAAM,CAAC,EAAE;QACjB,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;QACxB,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;QACzB,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC;QACtB,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;QACzB,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;QAC1B,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC;KACtB,CAAC;IACF,8EAA8E;IAC9E,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,WAAW,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC;IAC9E,yDAAyD;IACzD,QAAQ,CAAC,SAAS,CAAC,EAAE,OAAO,CAC3B,MAAM,CAAC,WAAW,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC,CACrD,CAAC;CACF;AAED;;;;GAIG;AACH,wBAAgB,iCAAiC,CAChD,OAAO,GAAE,kCAAuC,GAC9C,iBAAiB,CAuCnB"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @file Built-in query-param {@link TransformResolver} (PRD 0004 — review #9).
|
|
3
|
+
*
|
|
4
|
+
* Maps an {@link AssetTransform} onto query parameters appended to the asset's
|
|
5
|
+
* URL — the shape most image CDNs accept (imgix, Cloudinary's `f_`/`w_` via a
|
|
6
|
+
* mapper, Thumbor-ish gateways, etc.). Param names and the `fit`/`format`
|
|
7
|
+
* vocabularies are configurable so one helper covers many CDNs. Lives on its
|
|
8
|
+
* own `./transform` subpath so flat callers never pull it into the eager entry.
|
|
9
|
+
*
|
|
10
|
+
* @experimental Public surface may change before v1.0.
|
|
11
|
+
*/
|
|
12
|
+
import type { AssetTransform, TransformResolver } from "../types/transform.js";
|
|
13
|
+
import type { UploadResult } from "../types/types.js";
|
|
14
|
+
/**
|
|
15
|
+
* Resolve a derivative URL for an asset + transform using `resolver`, falling
|
|
16
|
+
* back to the asset's original URL when the resolver returns `undefined`. The
|
|
17
|
+
* live (non-IR) counterpart to what `createIRAssetResolver` does at export /
|
|
18
|
+
* render time — useful for a host rendering a variant directly.
|
|
19
|
+
*/
|
|
20
|
+
export declare function deriveVariantUrl(asset: UploadResult, transform: AssetTransform, resolver: TransformResolver): string;
|
|
21
|
+
/** Configuration for {@link createQueryParamTransformResolver}. */
|
|
22
|
+
export interface QueryParamTransformResolverOptions {
|
|
23
|
+
/**
|
|
24
|
+
* Override the query parameter names. Defaults to an imgix-style set:
|
|
25
|
+
* `w` / `h` / `fit` / `fm` / `q` / `dpr`.
|
|
26
|
+
*/
|
|
27
|
+
readonly params?: {
|
|
28
|
+
readonly width?: string;
|
|
29
|
+
readonly height?: string;
|
|
30
|
+
readonly fit?: string;
|
|
31
|
+
readonly format?: string;
|
|
32
|
+
readonly quality?: string;
|
|
33
|
+
readonly dpr?: string;
|
|
34
|
+
};
|
|
35
|
+
/** Map the `fit` vocabulary onto the CDN's values (e.g. `cover` → `crop`). */
|
|
36
|
+
readonly fitMap?: Partial<Record<NonNullable<AssetTransform["fit"]>, string>>;
|
|
37
|
+
/** Map the `format` vocabulary onto the CDN's values. */
|
|
38
|
+
readonly formatMap?: Partial<Record<NonNullable<AssetTransform["format"]>, string>>;
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Create a {@link TransformResolver} that appends transform query parameters to
|
|
42
|
+
* each asset's URL, preserving any existing query. Returns `undefined` (→ the
|
|
43
|
+
* original URL) when the transform is empty, so a no-op transform is a no-op.
|
|
44
|
+
*/
|
|
45
|
+
export declare function createQueryParamTransformResolver(options?: QueryParamTransformResolverOptions): TransformResolver;
|
|
46
|
+
//# sourceMappingURL=query-param-transform.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"query-param-transform.d.ts","sourceRoot":"","sources":["../../src/utils/query-param-transform.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC/E,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEtD;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAC/B,KAAK,EAAE,YAAY,EACnB,SAAS,EAAE,cAAc,EACzB,QAAQ,EAAE,iBAAiB,GACzB,MAAM,CAER;AAED,mEAAmE;AACnE,MAAM,WAAW,kCAAkC;IAClD;;;OAGG;IACH,QAAQ,CAAC,MAAM,CAAC,EAAE;QACjB,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;QACxB,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;QACzB,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC;QACtB,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;QACzB,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;QAC1B,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC;KACtB,CAAC;IACF,8EAA8E;IAC9E,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,WAAW,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC;IAC9E,yDAAyD;IACzD,QAAQ,CAAC,SAAS,CAAC,EAAE,OAAO,CAC3B,MAAM,CAAC,WAAW,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC,CACrD,CAAC;CACF;AAED;;;;GAIG;AACH,wBAAgB,iCAAiC,CAChD,OAAO,GAAE,kCAAuC,GAC9C,iBAAiB,CAuCnB"}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
function deriveVariantUrl(asset, transform, resolver) {
|
|
2
|
+
return resolver(asset, transform) ?? asset.url;
|
|
3
|
+
}
|
|
4
|
+
function createQueryParamTransformResolver(options = {}) {
|
|
5
|
+
const names = {
|
|
6
|
+
width: options.params?.width ?? "w",
|
|
7
|
+
height: options.params?.height ?? "h",
|
|
8
|
+
fit: options.params?.fit ?? "fit",
|
|
9
|
+
format: options.params?.format ?? "fm",
|
|
10
|
+
quality: options.params?.quality ?? "q",
|
|
11
|
+
dpr: options.params?.dpr ?? "dpr"
|
|
12
|
+
};
|
|
13
|
+
return (asset, transform)=>{
|
|
14
|
+
const params = [];
|
|
15
|
+
if (void 0 !== transform.width) params.push([
|
|
16
|
+
names.width,
|
|
17
|
+
String(transform.width)
|
|
18
|
+
]);
|
|
19
|
+
if (void 0 !== transform.height) params.push([
|
|
20
|
+
names.height,
|
|
21
|
+
String(transform.height)
|
|
22
|
+
]);
|
|
23
|
+
if (void 0 !== transform.fit) params.push([
|
|
24
|
+
names.fit,
|
|
25
|
+
options.fitMap?.[transform.fit] ?? transform.fit
|
|
26
|
+
]);
|
|
27
|
+
if (void 0 !== transform.format) params.push([
|
|
28
|
+
names.format,
|
|
29
|
+
options.formatMap?.[transform.format] ?? transform.format
|
|
30
|
+
]);
|
|
31
|
+
if (void 0 !== transform.quality) params.push([
|
|
32
|
+
names.quality,
|
|
33
|
+
String(transform.quality)
|
|
34
|
+
]);
|
|
35
|
+
if (void 0 !== transform.dpr) params.push([
|
|
36
|
+
names.dpr,
|
|
37
|
+
String(transform.dpr)
|
|
38
|
+
]);
|
|
39
|
+
if (0 === params.length) return;
|
|
40
|
+
return appendQueryParams(asset.url, params);
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
function appendQueryParams(rawUrl, params) {
|
|
44
|
+
try {
|
|
45
|
+
const url = new URL(rawUrl);
|
|
46
|
+
for (const [key, value] of params)url.searchParams.set(key, value);
|
|
47
|
+
return url.toString();
|
|
48
|
+
} catch {
|
|
49
|
+
const hashIndex = rawUrl.indexOf("#");
|
|
50
|
+
const hash = -1 === hashIndex ? "" : rawUrl.slice(hashIndex);
|
|
51
|
+
const beforeHash = -1 === hashIndex ? rawUrl : rawUrl.slice(0, hashIndex);
|
|
52
|
+
const queryIndex = beforeHash.indexOf("?");
|
|
53
|
+
const path = -1 === queryIndex ? beforeHash : beforeHash.slice(0, queryIndex);
|
|
54
|
+
const search = new URLSearchParams(-1 === queryIndex ? "" : beforeHash.slice(queryIndex + 1));
|
|
55
|
+
for (const [key, value] of params)search.set(key, value);
|
|
56
|
+
const query = search.toString();
|
|
57
|
+
return `${path}${"" === query ? "" : `?${query}`}${hash}`;
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
export { createQueryParamTransformResolver, deriveVariantUrl };
|
package/dist/utils/registry.cjs
CHANGED
|
@@ -129,6 +129,9 @@ function freezeUploadResult(asset) {
|
|
|
129
129
|
...void 0 !== asset.meta.height ? {
|
|
130
130
|
height: asset.meta.height
|
|
131
131
|
} : {},
|
|
132
|
+
...void 0 !== asset.meta.hash ? {
|
|
133
|
+
hash: asset.meta.hash
|
|
134
|
+
} : {},
|
|
132
135
|
...void 0 !== asset.meta.attribution ? {
|
|
133
136
|
attribution: Object.freeze({
|
|
134
137
|
...asset.meta.attribution
|
|
@@ -1,4 +1,12 @@
|
|
|
1
1
|
import type { AssetKind, AssetRegistry, AssetSearchPage, UploadResult } from "../types/types.js";
|
|
2
|
+
/**
|
|
3
|
+
* Create an in-memory asset registry.
|
|
4
|
+
*
|
|
5
|
+
* The registry stores immutable `UploadResult` records by id and exposes the
|
|
6
|
+
* local catalog operations used by the plugin runtime and Studio asset source:
|
|
7
|
+
* registration, lookup, listing, delete, rename, replace, tag mutation, search,
|
|
8
|
+
* pagination, and mutation subscriptions.
|
|
9
|
+
*/
|
|
2
10
|
export declare function createAssetRegistry(): AssetRegistry;
|
|
3
11
|
/** Query / kind / tag filter shared by the registry and the data-source path. */
|
|
4
12
|
export interface AssetMatchFilter {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"registry.d.cts","sourceRoot":"","sources":["../../src/utils/registry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACX,SAAS,EACT,aAAa,EAGb,eAAe,EACf,YAAY,EACZ,MAAM,mBAAmB,CAAC;AAK3B,wBAAgB,mBAAmB,IAAI,aAAa,CA6EnD;
|
|
1
|
+
{"version":3,"file":"registry.d.cts","sourceRoot":"","sources":["../../src/utils/registry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACX,SAAS,EACT,aAAa,EAGb,eAAe,EACf,YAAY,EACZ,MAAM,mBAAmB,CAAC;AAK3B;;;;;;;GAOG;AACH,wBAAgB,mBAAmB,IAAI,aAAa,CA6EnD;AAoDD,iFAAiF;AACjF,MAAM,WAAW,gBAAgB;IAChC,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,KAAK,CAAC,EAAE,SAAS,SAAS,EAAE,CAAC;IACtC,QAAQ,CAAC,IAAI,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CAClC;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,mBAAmB,CAClC,OAAO,EAAE,gBAAgB,GACvB,CAAC,KAAK,EAAE,YAAY,KAAK,OAAO,CAclC;AAaD;;;;GAIG;AACH,wBAAgB,eAAe,CAC9B,OAAO,EAAE,SAAS,YAAY,EAAE,EAChC,OAAO,EAAE;IAAE,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,GAC5D,eAAe,CAejB"}
|
package/dist/utils/registry.d.ts
CHANGED
|
@@ -1,4 +1,12 @@
|
|
|
1
1
|
import type { AssetKind, AssetRegistry, AssetSearchPage, UploadResult } from "../types/types.js";
|
|
2
|
+
/**
|
|
3
|
+
* Create an in-memory asset registry.
|
|
4
|
+
*
|
|
5
|
+
* The registry stores immutable `UploadResult` records by id and exposes the
|
|
6
|
+
* local catalog operations used by the plugin runtime and Studio asset source:
|
|
7
|
+
* registration, lookup, listing, delete, rename, replace, tag mutation, search,
|
|
8
|
+
* pagination, and mutation subscriptions.
|
|
9
|
+
*/
|
|
2
10
|
export declare function createAssetRegistry(): AssetRegistry;
|
|
3
11
|
/** Query / kind / tag filter shared by the registry and the data-source path. */
|
|
4
12
|
export interface AssetMatchFilter {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/utils/registry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACX,SAAS,EACT,aAAa,EAGb,eAAe,EACf,YAAY,EACZ,MAAM,mBAAmB,CAAC;AAK3B,wBAAgB,mBAAmB,IAAI,aAAa,CA6EnD;
|
|
1
|
+
{"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/utils/registry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACX,SAAS,EACT,aAAa,EAGb,eAAe,EACf,YAAY,EACZ,MAAM,mBAAmB,CAAC;AAK3B;;;;;;;GAOG;AACH,wBAAgB,mBAAmB,IAAI,aAAa,CA6EnD;AAoDD,iFAAiF;AACjF,MAAM,WAAW,gBAAgB;IAChC,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,KAAK,CAAC,EAAE,SAAS,SAAS,EAAE,CAAC;IACtC,QAAQ,CAAC,IAAI,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CAClC;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,mBAAmB,CAClC,OAAO,EAAE,gBAAgB,GACvB,CAAC,KAAK,EAAE,YAAY,KAAK,OAAO,CAclC;AAaD;;;;GAIG;AACH,wBAAgB,eAAe,CAC9B,OAAO,EAAE,SAAS,YAAY,EAAE,EAChC,OAAO,EAAE;IAAE,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,GAC5D,eAAe,CAejB"}
|
package/dist/utils/registry.js
CHANGED
|
@@ -95,6 +95,9 @@ function freezeUploadResult(asset) {
|
|
|
95
95
|
...void 0 !== asset.meta.height ? {
|
|
96
96
|
height: asset.meta.height
|
|
97
97
|
} : {},
|
|
98
|
+
...void 0 !== asset.meta.hash ? {
|
|
99
|
+
hash: asset.meta.hash
|
|
100
|
+
} : {},
|
|
98
101
|
...void 0 !== asset.meta.attribution ? {
|
|
99
102
|
attribution: Object.freeze({
|
|
100
103
|
...asset.meta.attribution
|
package/dist/utils/resolver.cjs
CHANGED
|
@@ -31,6 +31,7 @@ __webpack_require__.d(__webpack_exports__, {
|
|
|
31
31
|
createIRAssetResolver: ()=>createIRAssetResolver,
|
|
32
32
|
resolveAssets: ()=>resolveAssets
|
|
33
33
|
});
|
|
34
|
+
const external_asset_reference_cjs_namespaceObject = require("./asset-reference.cjs");
|
|
34
35
|
const external_errors_cjs_namespaceObject = require("./errors.cjs");
|
|
35
36
|
const external_validate_upload_result_cjs_namespaceObject = require("./validate-upload-result.cjs");
|
|
36
37
|
const URL_REJECTION_VALIDATION_CODES = new Set([
|
|
@@ -41,7 +42,6 @@ const URL_REJECTION_VALIDATION_CODES = new Set([
|
|
|
41
42
|
"PATH_TRAVERSAL_URL",
|
|
42
43
|
"MIXED_SCRIPT_HOSTNAME"
|
|
43
44
|
]);
|
|
44
|
-
const ASSET_REFERENCE_PREFIX = "asset://";
|
|
45
45
|
const ASSET_PROP_KEYS = new Set([
|
|
46
46
|
"src",
|
|
47
47
|
"imageUrl",
|
|
@@ -59,14 +59,24 @@ const ASSET_PROP_KEYS = new Set([
|
|
|
59
59
|
]);
|
|
60
60
|
function createIRAssetResolver(options) {
|
|
61
61
|
return (url)=>{
|
|
62
|
-
const
|
|
63
|
-
if (null ===
|
|
62
|
+
const parsed = (0, external_asset_reference_cjs_namespaceObject.parseAssetReference)(url);
|
|
63
|
+
if (null === parsed) return null;
|
|
64
|
+
const assetId = parsed.id;
|
|
64
65
|
const asset = options.registry.get(assetId);
|
|
65
66
|
if (!asset) throw new external_errors_cjs_namespaceObject.AssetResolutionError(assetId, "ASSET_NOT_FOUND");
|
|
66
67
|
try {
|
|
68
|
+
let effectiveUrl = asset.url;
|
|
69
|
+
let transformApplied = false;
|
|
70
|
+
if (void 0 !== parsed.transform && void 0 !== options.transformResolver) {
|
|
71
|
+
const derived = options.transformResolver(asset, parsed.transform);
|
|
72
|
+
if (void 0 !== derived) {
|
|
73
|
+
effectiveUrl = derived;
|
|
74
|
+
transformApplied = true;
|
|
75
|
+
}
|
|
76
|
+
}
|
|
67
77
|
const validated = (0, external_validate_upload_result_cjs_namespaceObject.validateUploadResult)({
|
|
68
78
|
id: asset.id,
|
|
69
|
-
url:
|
|
79
|
+
url: effectiveUrl,
|
|
70
80
|
...asset.meta ? {
|
|
71
81
|
meta: asset.meta
|
|
72
82
|
} : {}
|
|
@@ -74,10 +84,13 @@ function createIRAssetResolver(options) {
|
|
|
74
84
|
dataUrlAllowlistOptIn: options.dataUrlAllowlistOptIn,
|
|
75
85
|
allowMixedScriptHostnames: options.allowMixedScriptHostnames
|
|
76
86
|
});
|
|
87
|
+
const meta = transformApplied && validated.meta ? void 0 !== validated.meta.attribution ? {
|
|
88
|
+
attribution: validated.meta.attribution
|
|
89
|
+
} : void 0 : validated.meta;
|
|
77
90
|
const resolution = {
|
|
78
91
|
url: validated.url,
|
|
79
|
-
...
|
|
80
|
-
meta:
|
|
92
|
+
...meta ? {
|
|
93
|
+
meta: meta
|
|
81
94
|
} : {}
|
|
82
95
|
};
|
|
83
96
|
return resolution;
|
|
@@ -133,11 +146,6 @@ function collectValueAssetUrls(value, urls, key) {
|
|
|
133
146
|
if (null === value || "object" != typeof value) return;
|
|
134
147
|
for (const [entryKey, entryValue] of Object.entries(value))collectValueAssetUrls(entryValue, urls, entryKey);
|
|
135
148
|
}
|
|
136
|
-
function parseAssetReference(url) {
|
|
137
|
-
if (!url.startsWith(ASSET_REFERENCE_PREFIX)) return null;
|
|
138
|
-
const assetId = url.slice(ASSET_REFERENCE_PREFIX.length).trim();
|
|
139
|
-
return "" === assetId ? null : assetId;
|
|
140
|
-
}
|
|
141
149
|
function cloneNode(node, rewriteMap) {
|
|
142
150
|
return {
|
|
143
151
|
id: node.id,
|
|
@@ -1,10 +1,34 @@
|
|
|
1
1
|
import type { IRAssetResolver, PageIR } from "@anvilkit/core/types";
|
|
2
|
+
import type { TransformResolver } from "../types/transform.js";
|
|
2
3
|
import type { AssetRegistry } from "../types/types.js";
|
|
4
|
+
/** Options for creating an IR asset-reference resolver. */
|
|
3
5
|
export interface CreateIRAssetResolverOptions {
|
|
4
6
|
readonly registry: AssetRegistry;
|
|
5
7
|
readonly dataUrlAllowlistOptIn?: boolean;
|
|
6
8
|
readonly allowMixedScriptHostnames?: boolean;
|
|
9
|
+
/**
|
|
10
|
+
* Maps an asset + transform (carried on the reference as `?w=…&fm=…`) to a
|
|
11
|
+
* derivative URL. When omitted, or when it returns `undefined`, the asset's
|
|
12
|
+
* original URL is used. The derivative URL is re-validated through the same
|
|
13
|
+
* trust boundary as any resolved asset URL.
|
|
14
|
+
*/
|
|
15
|
+
readonly transformResolver?: TransformResolver;
|
|
7
16
|
}
|
|
17
|
+
/**
|
|
18
|
+
* Create an IR asset resolver for `asset://<id>` references.
|
|
19
|
+
*
|
|
20
|
+
* The resolver looks up references in the supplied registry, re-validates the
|
|
21
|
+
* stored URL at export/render time, and translates lookup or validation failures
|
|
22
|
+
* into `AssetResolutionError` codes for callers that need actionable export
|
|
23
|
+
* diagnostics.
|
|
24
|
+
*/
|
|
8
25
|
export declare function createIRAssetResolver(options: CreateIRAssetResolverOptions): IRAssetResolver;
|
|
26
|
+
/**
|
|
27
|
+
* Resolve all asset references found in a Page IR tree.
|
|
28
|
+
*
|
|
29
|
+
* The function scans the IR asset table and asset-like node props, resolves each
|
|
30
|
+
* distinct URL concurrently with the supplied resolver, clones the IR with any
|
|
31
|
+
* resolved URLs/meta applied, and returns a deeply frozen result.
|
|
32
|
+
*/
|
|
9
33
|
export declare function resolveAssets(ir: PageIR, resolver: IRAssetResolver): Promise<PageIR>;
|
|
10
34
|
//# sourceMappingURL=resolver.d.cts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resolver.d.cts","sourceRoot":"","sources":["../../src/utils/resolver.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAEX,eAAe,EACf,MAAM,EAGN,MAAM,sBAAsB,CAAC;AAC9B,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AA8BvD,MAAM,WAAW,4BAA4B;IAC5C,QAAQ,CAAC,QAAQ,EAAE,aAAa,CAAC;IACjC,QAAQ,CAAC,qBAAqB,CAAC,EAAE,OAAO,CAAC;IACzC,QAAQ,CAAC,yBAAyB,CAAC,EAAE,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"resolver.d.cts","sourceRoot":"","sources":["../../src/utils/resolver.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAEX,eAAe,EACf,MAAM,EAGN,MAAM,sBAAsB,CAAC;AAC9B,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC/D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AA8BvD,2DAA2D;AAC3D,MAAM,WAAW,4BAA4B;IAC5C,QAAQ,CAAC,QAAQ,EAAE,aAAa,CAAC;IACjC,QAAQ,CAAC,qBAAqB,CAAC,EAAE,OAAO,CAAC;IACzC,QAAQ,CAAC,yBAAyB,CAAC,EAAE,OAAO,CAAC;IAC7C;;;;;OAKG;IACH,QAAQ,CAAC,iBAAiB,CAAC,EAAE,iBAAiB,CAAC;CAC/C;AAED;;;;;;;GAOG;AACH,wBAAgB,qBAAqB,CACpC,OAAO,EAAE,4BAA4B,GACnC,eAAe,CAwEjB;AAED;;;;;;GAMG;AACH,wBAAsB,aAAa,CAClC,EAAE,EAAE,MAAM,EACV,QAAQ,EAAE,eAAe,GACvB,OAAO,CAAC,MAAM,CAAC,CAwBjB"}
|
package/dist/utils/resolver.d.ts
CHANGED
|
@@ -1,10 +1,34 @@
|
|
|
1
1
|
import type { IRAssetResolver, PageIR } from "@anvilkit/core/types";
|
|
2
|
+
import type { TransformResolver } from "../types/transform.js";
|
|
2
3
|
import type { AssetRegistry } from "../types/types.js";
|
|
4
|
+
/** Options for creating an IR asset-reference resolver. */
|
|
3
5
|
export interface CreateIRAssetResolverOptions {
|
|
4
6
|
readonly registry: AssetRegistry;
|
|
5
7
|
readonly dataUrlAllowlistOptIn?: boolean;
|
|
6
8
|
readonly allowMixedScriptHostnames?: boolean;
|
|
9
|
+
/**
|
|
10
|
+
* Maps an asset + transform (carried on the reference as `?w=…&fm=…`) to a
|
|
11
|
+
* derivative URL. When omitted, or when it returns `undefined`, the asset's
|
|
12
|
+
* original URL is used. The derivative URL is re-validated through the same
|
|
13
|
+
* trust boundary as any resolved asset URL.
|
|
14
|
+
*/
|
|
15
|
+
readonly transformResolver?: TransformResolver;
|
|
7
16
|
}
|
|
17
|
+
/**
|
|
18
|
+
* Create an IR asset resolver for `asset://<id>` references.
|
|
19
|
+
*
|
|
20
|
+
* The resolver looks up references in the supplied registry, re-validates the
|
|
21
|
+
* stored URL at export/render time, and translates lookup or validation failures
|
|
22
|
+
* into `AssetResolutionError` codes for callers that need actionable export
|
|
23
|
+
* diagnostics.
|
|
24
|
+
*/
|
|
8
25
|
export declare function createIRAssetResolver(options: CreateIRAssetResolverOptions): IRAssetResolver;
|
|
26
|
+
/**
|
|
27
|
+
* Resolve all asset references found in a Page IR tree.
|
|
28
|
+
*
|
|
29
|
+
* The function scans the IR asset table and asset-like node props, resolves each
|
|
30
|
+
* distinct URL concurrently with the supplied resolver, clones the IR with any
|
|
31
|
+
* resolved URLs/meta applied, and returns a deeply frozen result.
|
|
32
|
+
*/
|
|
9
33
|
export declare function resolveAssets(ir: PageIR, resolver: IRAssetResolver): Promise<PageIR>;
|
|
10
34
|
//# sourceMappingURL=resolver.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resolver.d.ts","sourceRoot":"","sources":["../../src/utils/resolver.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAEX,eAAe,EACf,MAAM,EAGN,MAAM,sBAAsB,CAAC;AAC9B,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AA8BvD,MAAM,WAAW,4BAA4B;IAC5C,QAAQ,CAAC,QAAQ,EAAE,aAAa,CAAC;IACjC,QAAQ,CAAC,qBAAqB,CAAC,EAAE,OAAO,CAAC;IACzC,QAAQ,CAAC,yBAAyB,CAAC,EAAE,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"resolver.d.ts","sourceRoot":"","sources":["../../src/utils/resolver.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAEX,eAAe,EACf,MAAM,EAGN,MAAM,sBAAsB,CAAC;AAC9B,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC/D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AA8BvD,2DAA2D;AAC3D,MAAM,WAAW,4BAA4B;IAC5C,QAAQ,CAAC,QAAQ,EAAE,aAAa,CAAC;IACjC,QAAQ,CAAC,qBAAqB,CAAC,EAAE,OAAO,CAAC;IACzC,QAAQ,CAAC,yBAAyB,CAAC,EAAE,OAAO,CAAC;IAC7C;;;;;OAKG;IACH,QAAQ,CAAC,iBAAiB,CAAC,EAAE,iBAAiB,CAAC;CAC/C;AAED;;;;;;;GAOG;AACH,wBAAgB,qBAAqB,CACpC,OAAO,EAAE,4BAA4B,GACnC,eAAe,CAwEjB;AAED;;;;;;GAMG;AACH,wBAAsB,aAAa,CAClC,EAAE,EAAE,MAAM,EACV,QAAQ,EAAE,eAAe,GACvB,OAAO,CAAC,MAAM,CAAC,CAwBjB"}
|
package/dist/utils/resolver.js
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { parseAssetReference } from "./asset-reference.js";
|
|
1
2
|
import { AssetResolutionError, AssetValidationError } from "./errors.js";
|
|
2
3
|
import { validateUploadResult } from "./validate-upload-result.js";
|
|
3
4
|
const URL_REJECTION_VALIDATION_CODES = new Set([
|
|
@@ -8,7 +9,6 @@ const URL_REJECTION_VALIDATION_CODES = new Set([
|
|
|
8
9
|
"PATH_TRAVERSAL_URL",
|
|
9
10
|
"MIXED_SCRIPT_HOSTNAME"
|
|
10
11
|
]);
|
|
11
|
-
const ASSET_REFERENCE_PREFIX = "asset://";
|
|
12
12
|
const ASSET_PROP_KEYS = new Set([
|
|
13
13
|
"src",
|
|
14
14
|
"imageUrl",
|
|
@@ -26,14 +26,24 @@ const ASSET_PROP_KEYS = new Set([
|
|
|
26
26
|
]);
|
|
27
27
|
function createIRAssetResolver(options) {
|
|
28
28
|
return (url)=>{
|
|
29
|
-
const
|
|
30
|
-
if (null ===
|
|
29
|
+
const parsed = parseAssetReference(url);
|
|
30
|
+
if (null === parsed) return null;
|
|
31
|
+
const assetId = parsed.id;
|
|
31
32
|
const asset = options.registry.get(assetId);
|
|
32
33
|
if (!asset) throw new AssetResolutionError(assetId, "ASSET_NOT_FOUND");
|
|
33
34
|
try {
|
|
35
|
+
let effectiveUrl = asset.url;
|
|
36
|
+
let transformApplied = false;
|
|
37
|
+
if (void 0 !== parsed.transform && void 0 !== options.transformResolver) {
|
|
38
|
+
const derived = options.transformResolver(asset, parsed.transform);
|
|
39
|
+
if (void 0 !== derived) {
|
|
40
|
+
effectiveUrl = derived;
|
|
41
|
+
transformApplied = true;
|
|
42
|
+
}
|
|
43
|
+
}
|
|
34
44
|
const validated = validateUploadResult({
|
|
35
45
|
id: asset.id,
|
|
36
|
-
url:
|
|
46
|
+
url: effectiveUrl,
|
|
37
47
|
...asset.meta ? {
|
|
38
48
|
meta: asset.meta
|
|
39
49
|
} : {}
|
|
@@ -41,10 +51,13 @@ function createIRAssetResolver(options) {
|
|
|
41
51
|
dataUrlAllowlistOptIn: options.dataUrlAllowlistOptIn,
|
|
42
52
|
allowMixedScriptHostnames: options.allowMixedScriptHostnames
|
|
43
53
|
});
|
|
54
|
+
const meta = transformApplied && validated.meta ? void 0 !== validated.meta.attribution ? {
|
|
55
|
+
attribution: validated.meta.attribution
|
|
56
|
+
} : void 0 : validated.meta;
|
|
44
57
|
const resolution = {
|
|
45
58
|
url: validated.url,
|
|
46
|
-
...
|
|
47
|
-
meta:
|
|
59
|
+
...meta ? {
|
|
60
|
+
meta: meta
|
|
48
61
|
} : {}
|
|
49
62
|
};
|
|
50
63
|
return resolution;
|
|
@@ -100,11 +113,6 @@ function collectValueAssetUrls(value, urls, key) {
|
|
|
100
113
|
if (null === value || "object" != typeof value) return;
|
|
101
114
|
for (const [entryKey, entryValue] of Object.entries(value))collectValueAssetUrls(entryValue, urls, entryKey);
|
|
102
115
|
}
|
|
103
|
-
function parseAssetReference(url) {
|
|
104
|
-
if (!url.startsWith(ASSET_REFERENCE_PREFIX)) return null;
|
|
105
|
-
const assetId = url.slice(ASSET_REFERENCE_PREFIX.length).trim();
|
|
106
|
-
return "" === assetId ? null : assetId;
|
|
107
|
-
}
|
|
108
116
|
function cloneNode(node, rewriteMap) {
|
|
109
117
|
return {
|
|
110
118
|
id: node.id,
|
package/dist/utils/retry.d.cts
CHANGED
|
@@ -24,11 +24,13 @@
|
|
|
24
24
|
*/
|
|
25
25
|
export declare class RetryableError extends Error {
|
|
26
26
|
readonly retryAfterMs?: number;
|
|
27
|
+
/** Create a transient error that `withRetry()` may reschedule. */
|
|
27
28
|
constructor(message: string, options?: {
|
|
28
29
|
readonly cause?: unknown;
|
|
29
30
|
readonly retryAfterMs?: number;
|
|
30
31
|
});
|
|
31
32
|
}
|
|
33
|
+
/** Retry policy used by network-bound upload adapters. */
|
|
32
34
|
export interface RetryOptions {
|
|
33
35
|
/**
|
|
34
36
|
* Maximum number of retry attempts after the initial call.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"retry.d.cts","sourceRoot":"","sources":["../../src/utils/retry.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH;;;;;;;;;;;GAWG;AACH,qBAAa,cAAe,SAAQ,KAAK;IACxC,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"retry.d.cts","sourceRoot":"","sources":["../../src/utils/retry.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH;;;;;;;;;;;GAWG;AACH,qBAAa,cAAe,SAAQ,KAAK;IACxC,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;IAE/B,kEAAkE;gBAEjE,OAAO,EAAE,MAAM,EACf,OAAO,CAAC,EAAE;QAAE,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC;QAAC,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAA;KAAE;CAYvE;AAED,0DAA0D;AAC1D,MAAM,WAAW,YAAY;IAC5B;;;;;OAKG;IACH,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B;;;;;OAKG;IACH,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B;;;;OAIG;IACH,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,kEAAkE;IAClE,QAAQ,CAAC,MAAM,CAAC,EAAE,WAAW,CAAC;IAC9B,mEAAmE;IACnE,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,MAAM,CAAC;IAC/B,2DAA2D;IAC3D,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,WAAW,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CACrE;AAMD;;;;;;;;;GASG;AACH,wBAAsB,SAAS,CAAC,CAAC,EAChC,EAAE,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,CAAC,CAAC,EACnC,OAAO,GAAE,YAAiB,GACxB,OAAO,CAAC,CAAC,CAAC,CAmCZ"}
|
package/dist/utils/retry.d.ts
CHANGED
|
@@ -24,11 +24,13 @@
|
|
|
24
24
|
*/
|
|
25
25
|
export declare class RetryableError extends Error {
|
|
26
26
|
readonly retryAfterMs?: number;
|
|
27
|
+
/** Create a transient error that `withRetry()` may reschedule. */
|
|
27
28
|
constructor(message: string, options?: {
|
|
28
29
|
readonly cause?: unknown;
|
|
29
30
|
readonly retryAfterMs?: number;
|
|
30
31
|
});
|
|
31
32
|
}
|
|
33
|
+
/** Retry policy used by network-bound upload adapters. */
|
|
32
34
|
export interface RetryOptions {
|
|
33
35
|
/**
|
|
34
36
|
* Maximum number of retry attempts after the initial call.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"retry.d.ts","sourceRoot":"","sources":["../../src/utils/retry.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH;;;;;;;;;;;GAWG;AACH,qBAAa,cAAe,SAAQ,KAAK;IACxC,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"retry.d.ts","sourceRoot":"","sources":["../../src/utils/retry.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH;;;;;;;;;;;GAWG;AACH,qBAAa,cAAe,SAAQ,KAAK;IACxC,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;IAE/B,kEAAkE;gBAEjE,OAAO,EAAE,MAAM,EACf,OAAO,CAAC,EAAE;QAAE,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC;QAAC,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAA;KAAE;CAYvE;AAED,0DAA0D;AAC1D,MAAM,WAAW,YAAY;IAC5B;;;;;OAKG;IACH,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B;;;;;OAKG;IACH,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B;;;;OAIG;IACH,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,kEAAkE;IAClE,QAAQ,CAAC,MAAM,CAAC,EAAE,WAAW,CAAC;IAC9B,mEAAmE;IACnE,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,MAAM,CAAC;IAC/B,2DAA2D;IAC3D,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,WAAW,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CACrE;AAMD;;;;;;;;;GASG;AACH,wBAAsB,SAAS,CAAC,CAAC,EAChC,EAAE,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,CAAC,CAAC,EACnC,OAAO,GAAE,YAAiB,GACxB,OAAO,CAAC,CAAC,CAAC,CAmCZ"}
|