@anvilkit/plugin-asset-manager 0.1.2 → 0.1.4
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 +366 -108
- package/dist/adapters/data-url.cjs +10 -6
- package/dist/adapters/data-url.d.cts +1 -1
- package/dist/adapters/data-url.d.cts.map +1 -1
- package/dist/adapters/data-url.d.ts +1 -1
- package/dist/adapters/data-url.d.ts.map +1 -1
- package/dist/adapters/data-url.js +7 -3
- package/dist/adapters/extract-image-dimensions.cjs +9 -0
- package/dist/adapters/extract-image-dimensions.d.cts +6 -0
- package/dist/adapters/extract-image-dimensions.d.cts.map +1 -1
- package/dist/adapters/extract-image-dimensions.d.ts +6 -0
- package/dist/adapters/extract-image-dimensions.d.ts.map +1 -1
- package/dist/adapters/extract-image-dimensions.js +9 -0
- package/dist/adapters/in-memory.cjs +6 -4
- package/dist/adapters/in-memory.d.cts +7 -1
- package/dist/adapters/in-memory.d.cts.map +1 -1
- package/dist/adapters/in-memory.d.ts +7 -1
- package/dist/adapters/in-memory.d.ts.map +1 -1
- package/dist/adapters/in-memory.js +6 -4
- package/dist/adapters/s3-presigned.cjs +90 -40
- package/dist/adapters/s3-presigned.d.cts +5 -4
- package/dist/adapters/s3-presigned.d.cts.map +1 -1
- package/dist/adapters/s3-presigned.d.ts +5 -4
- package/dist/adapters/s3-presigned.d.ts.map +1 -1
- package/dist/adapters/s3-presigned.js +80 -30
- package/dist/index.cjs +20 -20
- package/dist/index.d.cts +13 -13
- package/dist/index.d.cts.map +1 -1
- package/dist/index.d.ts +13 -13
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +7 -7
- package/dist/plugin.cjs +56 -31
- package/dist/plugin.d.cts +6 -5
- package/dist/plugin.d.cts.map +1 -1
- package/dist/plugin.d.ts +6 -5
- package/dist/plugin.d.ts.map +1 -1
- package/dist/plugin.js +34 -17
- package/dist/testing/index.cjs +2 -2
- package/dist/testing/index.d.cts +1 -1
- package/dist/testing/index.d.cts.map +1 -1
- package/dist/testing/index.d.ts +1 -1
- package/dist/testing/index.d.ts.map +1 -1
- package/dist/testing/index.js +1 -1
- package/dist/{types.d.cts → types/types.d.cts} +9 -1
- package/dist/types/types.d.cts.map +1 -0
- package/dist/{types.d.ts → types/types.d.ts} +9 -1
- package/dist/types/types.d.ts.map +1 -0
- package/dist/types/types.js +1 -0
- package/dist/ui/AssetBrowser.cjs +55 -20
- package/dist/ui/AssetBrowser.d.cts +11 -2
- package/dist/ui/AssetBrowser.d.cts.map +1 -1
- package/dist/ui/AssetBrowser.d.ts +11 -2
- package/dist/ui/AssetBrowser.d.ts.map +1 -1
- package/dist/ui/AssetBrowser.js +55 -20
- package/dist/ui/AssetCommandPalette.cjs +20 -11
- package/dist/ui/AssetCommandPalette.d.cts +1 -1
- package/dist/ui/AssetCommandPalette.d.cts.map +1 -1
- package/dist/ui/AssetCommandPalette.d.ts +1 -1
- package/dist/ui/AssetCommandPalette.d.ts.map +1 -1
- package/dist/ui/AssetCommandPalette.js +19 -10
- package/dist/ui/AssetManagerUI.cjs +3 -2
- package/dist/ui/AssetManagerUI.d.cts +1 -1
- package/dist/ui/AssetManagerUI.d.cts.map +1 -1
- package/dist/ui/AssetManagerUI.d.ts +1 -1
- package/dist/ui/AssetManagerUI.d.ts.map +1 -1
- package/dist/ui/AssetManagerUI.js +2 -1
- package/dist/ui/DeleteAssetDialog.cjs +1 -0
- package/dist/ui/DeleteAssetDialog.d.cts +1 -1
- package/dist/ui/DeleteAssetDialog.d.cts.map +1 -1
- package/dist/ui/DeleteAssetDialog.d.ts +1 -1
- package/dist/ui/DeleteAssetDialog.d.ts.map +1 -1
- package/dist/ui/DeleteAssetDialog.js +1 -0
- package/dist/ui/MetadataPanel.cjs +1 -0
- package/dist/ui/MetadataPanel.d.cts +1 -1
- package/dist/ui/MetadataPanel.d.cts.map +1 -1
- package/dist/ui/MetadataPanel.d.ts +1 -1
- package/dist/ui/MetadataPanel.d.ts.map +1 -1
- package/dist/ui/MetadataPanel.js +1 -0
- package/dist/ui/ReplaceAssetDialog.cjs +1 -0
- package/dist/ui/ReplaceAssetDialog.d.cts +1 -1
- package/dist/ui/ReplaceAssetDialog.d.cts.map +1 -1
- package/dist/ui/ReplaceAssetDialog.d.ts +1 -1
- package/dist/ui/ReplaceAssetDialog.d.ts.map +1 -1
- package/dist/ui/ReplaceAssetDialog.js +1 -0
- package/dist/ui/UploadButton.cjs +24 -9
- package/dist/ui/UploadButton.d.cts +1 -1
- package/dist/ui/UploadButton.d.cts.map +1 -1
- package/dist/ui/UploadButton.d.ts +1 -1
- package/dist/ui/UploadButton.d.ts.map +1 -1
- package/dist/ui/UploadButton.js +23 -8
- package/dist/ui/index.cjs +5 -5
- package/dist/utils/asset-reference.d.cts.map +1 -0
- package/dist/utils/asset-reference.d.ts.map +1 -0
- package/dist/utils/csp.d.cts.map +1 -0
- package/dist/utils/csp.d.ts.map +1 -0
- package/dist/utils/errors.d.cts.map +1 -0
- package/dist/utils/errors.d.ts.map +1 -0
- package/dist/utils/header-action.d.cts.map +1 -0
- package/dist/utils/header-action.d.ts.map +1 -0
- package/dist/{infer-kind.d.cts → utils/infer-kind.d.cts} +1 -1
- package/dist/utils/infer-kind.d.cts.map +1 -0
- package/dist/{infer-kind.d.ts → utils/infer-kind.d.ts} +1 -1
- package/dist/utils/infer-kind.d.ts.map +1 -0
- package/dist/utils/registry.d.cts +3 -0
- package/dist/utils/registry.d.cts.map +1 -0
- package/dist/utils/registry.d.ts +3 -0
- package/dist/utils/registry.d.ts.map +1 -0
- package/dist/{resolver.cjs → utils/resolver.cjs} +8 -3
- package/dist/{resolver.d.cts → utils/resolver.d.cts} +1 -1
- package/dist/utils/resolver.d.cts.map +1 -0
- package/dist/{resolver.d.ts → utils/resolver.d.ts} +1 -1
- package/dist/utils/resolver.d.ts.map +1 -0
- package/dist/{resolver.js → utils/resolver.js} +6 -1
- package/dist/{retry.cjs → utils/retry.cjs} +10 -8
- package/dist/utils/retry.d.cts.map +1 -0
- package/dist/utils/retry.d.ts.map +1 -0
- package/dist/{retry.js → utils/retry.js} +10 -8
- package/dist/{studio-asset-source.cjs → utils/studio-asset-source.cjs} +28 -7
- package/dist/{studio-asset-source.d.cts → utils/studio-asset-source.d.cts} +2 -2
- package/dist/utils/studio-asset-source.d.cts.map +1 -0
- package/dist/{studio-asset-source.d.ts → utils/studio-asset-source.d.ts} +2 -2
- package/dist/utils/studio-asset-source.d.ts.map +1 -0
- package/dist/{studio-asset-source.js → utils/studio-asset-source.js} +26 -5
- package/dist/{validate-upload-result.cjs → utils/validate-upload-result.cjs} +49 -10
- package/dist/{validate-upload-result.d.cts → utils/validate-upload-result.d.cts} +1 -1
- package/dist/utils/validate-upload-result.d.cts.map +1 -0
- package/dist/{validate-upload-result.d.ts → utils/validate-upload-result.d.ts} +1 -1
- package/dist/utils/validate-upload-result.d.ts.map +1 -0
- package/dist/{validate-upload-result.js → utils/validate-upload-result.js} +49 -10
- package/dist/version.cjs +36 -0
- package/dist/version.d.cts +20 -0
- package/dist/version.d.cts.map +1 -0
- package/dist/version.d.ts +20 -0
- package/dist/version.d.ts.map +1 -0
- package/dist/version.js +2 -0
- package/meta/config.json +8 -0
- package/package.json +23 -22
- package/dist/asset-reference.d.cts.map +0 -1
- package/dist/asset-reference.d.ts.map +0 -1
- package/dist/csp.d.cts.map +0 -1
- package/dist/csp.d.ts.map +0 -1
- package/dist/errors.d.cts.map +0 -1
- package/dist/errors.d.ts.map +0 -1
- package/dist/header-action.d.cts.map +0 -1
- package/dist/header-action.d.ts.map +0 -1
- package/dist/infer-kind.d.cts.map +0 -1
- package/dist/infer-kind.d.ts.map +0 -1
- package/dist/registry.d.cts +0 -3
- package/dist/registry.d.cts.map +0 -1
- package/dist/registry.d.ts +0 -3
- package/dist/registry.d.ts.map +0 -1
- package/dist/resolver.d.cts.map +0 -1
- package/dist/resolver.d.ts.map +0 -1
- package/dist/retry.d.cts.map +0 -1
- package/dist/retry.d.ts.map +0 -1
- package/dist/studio-asset-source.d.cts.map +0 -1
- package/dist/studio-asset-source.d.ts.map +0 -1
- package/dist/types.d.cts.map +0 -1
- package/dist/types.d.ts.map +0 -1
- package/dist/types.js +0 -0
- package/dist/validate-upload-result.d.cts.map +0 -1
- package/dist/validate-upload-result.d.ts.map +0 -1
- /package/dist/{types.cjs → types/types.cjs} +0 -0
- /package/dist/{asset-reference.cjs → utils/asset-reference.cjs} +0 -0
- /package/dist/{asset-reference.d.cts → utils/asset-reference.d.cts} +0 -0
- /package/dist/{asset-reference.d.ts → utils/asset-reference.d.ts} +0 -0
- /package/dist/{asset-reference.js → utils/asset-reference.js} +0 -0
- /package/dist/{csp.cjs → utils/csp.cjs} +0 -0
- /package/dist/{csp.d.cts → utils/csp.d.cts} +0 -0
- /package/dist/{csp.d.ts → utils/csp.d.ts} +0 -0
- /package/dist/{csp.js → utils/csp.js} +0 -0
- /package/dist/{errors.cjs → utils/errors.cjs} +0 -0
- /package/dist/{errors.d.cts → utils/errors.d.cts} +0 -0
- /package/dist/{errors.d.ts → utils/errors.d.ts} +0 -0
- /package/dist/{errors.js → utils/errors.js} +0 -0
- /package/dist/{header-action.cjs → utils/header-action.cjs} +0 -0
- /package/dist/{header-action.d.cts → utils/header-action.d.cts} +0 -0
- /package/dist/{header-action.d.ts → utils/header-action.d.ts} +0 -0
- /package/dist/{header-action.js → utils/header-action.js} +0 -0
- /package/dist/{infer-kind.cjs → utils/infer-kind.cjs} +0 -0
- /package/dist/{infer-kind.js → utils/infer-kind.js} +0 -0
- /package/dist/{registry.cjs → utils/registry.cjs} +0 -0
- /package/dist/{registry.js → utils/registry.js} +0 -0
- /package/dist/{retry.d.cts → utils/retry.d.cts} +0 -0
- /package/dist/{retry.d.ts → utils/retry.d.ts} +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"UploadButton.d.ts","sourceRoot":"","sources":["../../src/ui/UploadButton.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"UploadButton.d.ts","sourceRoot":"","sources":["../../src/ui/UploadButton.tsx"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,mBAAmB,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAG3E,MAAM,WAAW,sBAAsB;IACtC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,iBAChB,SAAQ,IAAI,CACX,mBAAmB,EACjB,mBAAmB,GACnB,aAAa,GACb,UAAU,GACV,uBAAuB,GACvB,2BAA2B,CAC7B;IACD,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC,KAAK,EAAE,YAAY,KAAK,IAAI,CAAC;IACpD,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,CAAC;IAC5C;;;;OAIG;IACH,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC,QAAQ,EAAE,sBAAsB,GAAG,IAAI,KAAK,IAAI,CAAC;CACxE;AAED,wBAAgB,YAAY,CAAC,EAC5B,iBAAiB,EACjB,yBAAyB,EACzB,qBAAqB,EACrB,WAAW,EACX,OAAO,EACP,UAAU,EACV,UAAU,EACV,QAAQ,GACR,EAAE,iBAAiB,2CA6KnB"}
|
package/dist/ui/UploadButton.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
|
+
"use client";
|
|
1
2
|
import { Button } from "@anvilkit/ui/button";
|
|
2
3
|
import { validateSelectedFile } from "../plugin.js";
|
|
3
|
-
import { validateUploadResult } from "../validate-upload-result.js";
|
|
4
|
+
import { validateUploadResult } from "../utils/validate-upload-result.js";
|
|
4
5
|
import * as __rspack_external_react from "react";
|
|
5
6
|
function UploadButton({ acceptedMimeTypes, allowMixedScriptHostnames, dataUrlAllowlistOptIn, maxFileSize, onError, onProgress, onUploaded, uploader }) {
|
|
6
7
|
const inputRef = __rspack_external_react.useRef(null);
|
|
@@ -8,11 +9,17 @@ function UploadButton({ acceptedMimeTypes, allowMixedScriptHostnames, dataUrlAll
|
|
|
8
9
|
const [batch, setBatch] = __rspack_external_react.useState(null);
|
|
9
10
|
const [isDragOver, setIsDragOver] = __rspack_external_react.useState(false);
|
|
10
11
|
const isUploading = null !== batch;
|
|
12
|
+
const uploadAbortRef = __rspack_external_react.useRef(null);
|
|
13
|
+
__rspack_external_react.useEffect(()=>()=>uploadAbortRef.current?.abort(), []);
|
|
11
14
|
const acceptAttr = __rspack_external_react.useMemo(()=>acceptedMimeTypes?.join(","), [
|
|
12
15
|
acceptedMimeTypes
|
|
13
16
|
]);
|
|
14
17
|
async function processFiles(files) {
|
|
15
18
|
if (0 === files.length) return;
|
|
19
|
+
uploadAbortRef.current?.abort();
|
|
20
|
+
const controller = new AbortController();
|
|
21
|
+
uploadAbortRef.current = controller;
|
|
22
|
+
const { signal } = controller;
|
|
16
23
|
const total = files.length;
|
|
17
24
|
setErrorMessage(null);
|
|
18
25
|
const initial = {
|
|
@@ -23,13 +30,17 @@ function UploadButton({ acceptedMimeTypes, allowMixedScriptHostnames, dataUrlAll
|
|
|
23
30
|
onProgress?.(initial);
|
|
24
31
|
let lastError = null;
|
|
25
32
|
for(let index = 0; index < files.length; index += 1){
|
|
33
|
+
if (signal.aborted) return;
|
|
26
34
|
const file = files[index];
|
|
27
35
|
if (file) try {
|
|
28
36
|
validateSelectedFile(file, {
|
|
29
37
|
acceptedMimeTypes,
|
|
30
38
|
maxFileSize
|
|
31
39
|
});
|
|
32
|
-
const uploaded = await uploader(file
|
|
40
|
+
const uploaded = await uploader(file, {
|
|
41
|
+
signal
|
|
42
|
+
});
|
|
43
|
+
if (signal.aborted) return;
|
|
33
44
|
const validated = validateUploadResult({
|
|
34
45
|
...uploaded,
|
|
35
46
|
meta: {
|
|
@@ -45,17 +56,21 @@ function UploadButton({ acceptedMimeTypes, allowMixedScriptHostnames, dataUrlAll
|
|
|
45
56
|
});
|
|
46
57
|
onUploaded?.(validated);
|
|
47
58
|
} catch (error) {
|
|
59
|
+
if (signal.aborted) return;
|
|
48
60
|
lastError = error instanceof Error ? error.message : String(error);
|
|
49
61
|
onError?.(error);
|
|
50
62
|
} finally{
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
63
|
+
if (!signal.aborted) {
|
|
64
|
+
const next = {
|
|
65
|
+
completed: index + 1,
|
|
66
|
+
total
|
|
67
|
+
};
|
|
68
|
+
setBatch(next);
|
|
69
|
+
onProgress?.(next);
|
|
70
|
+
}
|
|
57
71
|
}
|
|
58
72
|
}
|
|
73
|
+
if (signal.aborted) return;
|
|
59
74
|
if (null !== lastError) setErrorMessage(lastError);
|
|
60
75
|
setBatch(null);
|
|
61
76
|
onProgress?.(null);
|
package/dist/ui/index.cjs
CHANGED
|
@@ -24,13 +24,13 @@ var __webpack_require__ = {};
|
|
|
24
24
|
var __webpack_exports__ = {};
|
|
25
25
|
__webpack_require__.r(__webpack_exports__);
|
|
26
26
|
__webpack_require__.d(__webpack_exports__, {
|
|
27
|
-
MetadataPanel: ()=>external_MetadataPanel_cjs_namespaceObject.MetadataPanel,
|
|
28
|
-
DeleteAssetDialog: ()=>external_DeleteAssetDialog_cjs_namespaceObject.DeleteAssetDialog,
|
|
29
|
-
AssetCommandPalette: ()=>external_AssetCommandPalette_cjs_namespaceObject.AssetCommandPalette,
|
|
30
|
-
UploadButton: ()=>external_UploadButton_cjs_namespaceObject.UploadButton,
|
|
31
27
|
AssetBrowser: ()=>external_AssetBrowser_cjs_namespaceObject.AssetBrowser,
|
|
28
|
+
AssetCommandPalette: ()=>external_AssetCommandPalette_cjs_namespaceObject.AssetCommandPalette,
|
|
32
29
|
AssetManagerUI: ()=>external_AssetManagerUI_cjs_namespaceObject.AssetManagerUI,
|
|
33
|
-
|
|
30
|
+
DeleteAssetDialog: ()=>external_DeleteAssetDialog_cjs_namespaceObject.DeleteAssetDialog,
|
|
31
|
+
MetadataPanel: ()=>external_MetadataPanel_cjs_namespaceObject.MetadataPanel,
|
|
32
|
+
ReplaceAssetDialog: ()=>external_ReplaceAssetDialog_cjs_namespaceObject.ReplaceAssetDialog,
|
|
33
|
+
UploadButton: ()=>external_UploadButton_cjs_namespaceObject.UploadButton
|
|
34
34
|
});
|
|
35
35
|
const external_AssetBrowser_cjs_namespaceObject = require("./AssetBrowser.cjs");
|
|
36
36
|
const external_AssetCommandPalette_cjs_namespaceObject = require("./AssetCommandPalette.cjs");
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"asset-reference.d.cts","sourceRoot":"","sources":["../../src/utils/asset-reference.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,wBAAgB,oBAAoB,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,CAEvD"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"asset-reference.d.ts","sourceRoot":"","sources":["../../src/utils/asset-reference.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,wBAAgB,oBAAoB,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,CAEvD"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"csp.d.cts","sourceRoot":"","sources":["../../src/utils/csp.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,MAAM,WAAW,YAAY;IAC5B,+DAA+D;IAC/D,QAAQ,CAAC,eAAe,EAAE,MAAM,GAAG,GAAG,CAAC;IACvC;;;;;OAKG;IACH,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;CAC7B;AAED,MAAM,WAAW,kBAAkB;IAClC,+DAA+D;IAC/D,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC;IAC3B,gEAAgE;IAChE,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC;IAC5B,2DAA2D;IAC3D,QAAQ,CAAC,EAAE,CAAC,EAAE,YAAY,GAAG,SAAS,YAAY,EAAE,CAAC;CACrD;AAED,MAAM,WAAW,WAAW;IAC3B,QAAQ,CAAC,UAAU,EAAE,SAAS,MAAM,EAAE,CAAC;IACvC,QAAQ,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC;IACnC,QAAQ,CAAC,QAAQ,EAAE,SAAS,MAAM,EAAE,CAAC;CACrC;AAED,wBAAgB,cAAc,CAAC,OAAO,GAAE,kBAAuB,GAAG,WAAW,CA4C5E"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"csp.d.ts","sourceRoot":"","sources":["../../src/utils/csp.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,MAAM,WAAW,YAAY;IAC5B,+DAA+D;IAC/D,QAAQ,CAAC,eAAe,EAAE,MAAM,GAAG,GAAG,CAAC;IACvC;;;;;OAKG;IACH,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;CAC7B;AAED,MAAM,WAAW,kBAAkB;IAClC,+DAA+D;IAC/D,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC;IAC3B,gEAAgE;IAChE,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC;IAC5B,2DAA2D;IAC3D,QAAQ,CAAC,EAAE,CAAC,EAAE,YAAY,GAAG,SAAS,YAAY,EAAE,CAAC;CACrD;AAED,MAAM,WAAW,WAAW;IAC3B,QAAQ,CAAC,UAAU,EAAE,SAAS,MAAM,EAAE,CAAC;IACvC,QAAQ,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC;IACnC,QAAQ,CAAC,QAAQ,EAAE,SAAS,MAAM,EAAE,CAAC;CACrC;AAED,wBAAgB,cAAc,CAAC,OAAO,GAAE,kBAAuB,GAAG,WAAW,CA4C5E"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.d.cts","sourceRoot":"","sources":["../../src/utils/errors.ts"],"names":[],"mappings":"AAAA,qBAAa,oBAAqB,SAAQ,KAAK;IAC9C,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;gBAGrB,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,MAAM,EACf,OAAO,CAAC,EAAE;QAAE,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,CAAA;KAAE;CAUvC;AAED,MAAM,MAAM,wBAAwB,GACjC,iBAAiB,GACjB,oBAAoB,GACpB,yBAAyB,CAAC;AAE7B,qBAAa,oBAAqB,SAAQ,KAAK;IAC9C,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,IAAI,EAAE,wBAAwB,CAAC;gBAGvC,OAAO,EAAE,MAAM,EACf,IAAI,GAAE,wBAA4C,EAClD,OAAO,SAAyC,EAChD,OAAO,CAAC,EAAE;QAAE,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,CAAA;KAAE;CAWvC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/utils/errors.ts"],"names":[],"mappings":"AAAA,qBAAa,oBAAqB,SAAQ,KAAK;IAC9C,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;gBAGrB,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,MAAM,EACf,OAAO,CAAC,EAAE;QAAE,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,CAAA;KAAE;CAUvC;AAED,MAAM,MAAM,wBAAwB,GACjC,iBAAiB,GACjB,oBAAoB,GACpB,yBAAyB,CAAC;AAE7B,qBAAa,oBAAqB,SAAQ,KAAK;IAC9C,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,IAAI,EAAE,wBAAwB,CAAC;gBAGvC,OAAO,EAAE,MAAM,EACf,IAAI,GAAE,wBAA4C,EAClD,OAAO,SAAyC,EAChD,OAAO,CAAC,EAAE;QAAE,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,CAAA;KAAE;CAWvC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"header-action.d.cts","sourceRoot":"","sources":["../../src/utils/header-action.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAE/D,eAAO,MAAM,iBAAiB,EAAE,kBAQ/B,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"header-action.d.ts","sourceRoot":"","sources":["../../src/utils/header-action.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAE/D,eAAO,MAAM,iBAAiB,EAAE,kBAQ/B,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"infer-kind.d.cts","sourceRoot":"","sources":["../../src/utils/infer-kind.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEjE;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,YAAY,GAAG,SAAS,CAgB7D"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"infer-kind.d.ts","sourceRoot":"","sources":["../../src/utils/infer-kind.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEjE;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,YAAY,GAAG,SAAS,CAgB7D"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registry.d.cts","sourceRoot":"","sources":["../../src/utils/registry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACX,aAAa,EAKb,MAAM,mBAAmB,CAAC;AAK3B,wBAAgB,mBAAmB,IAAI,aAAa,CA6EnD"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/utils/registry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACX,aAAa,EAKb,MAAM,mBAAmB,CAAC;AAK3B,wBAAgB,mBAAmB,IAAI,aAAa,CA6EnD"}
|
|
@@ -24,8 +24,8 @@ var __webpack_require__ = {};
|
|
|
24
24
|
var __webpack_exports__ = {};
|
|
25
25
|
__webpack_require__.r(__webpack_exports__);
|
|
26
26
|
__webpack_require__.d(__webpack_exports__, {
|
|
27
|
-
|
|
28
|
-
|
|
27
|
+
createIRAssetResolver: ()=>createIRAssetResolver,
|
|
28
|
+
resolveAssets: ()=>resolveAssets
|
|
29
29
|
});
|
|
30
30
|
const external_errors_cjs_namespaceObject = require("./errors.cjs");
|
|
31
31
|
const external_validate_upload_result_cjs_namespaceObject = require("./validate-upload-result.cjs");
|
|
@@ -137,7 +137,7 @@ function cloneNode(node, rewriteMap) {
|
|
|
137
137
|
return {
|
|
138
138
|
id: node.id,
|
|
139
139
|
type: node.type,
|
|
140
|
-
props:
|
|
140
|
+
props: cloneProps(node.props, rewriteMap),
|
|
141
141
|
...node.children ? {
|
|
142
142
|
children: node.children.map((child)=>cloneNode(child, rewriteMap))
|
|
143
143
|
} : {},
|
|
@@ -157,6 +157,11 @@ function cloneAsset(asset, rewriteMap) {
|
|
|
157
157
|
} : {}
|
|
158
158
|
};
|
|
159
159
|
}
|
|
160
|
+
function cloneProps(props, rewriteMap) {
|
|
161
|
+
const next = {};
|
|
162
|
+
for (const [key, value] of Object.entries(props))next[key] = cloneValue(value, rewriteMap, key);
|
|
163
|
+
return next;
|
|
164
|
+
}
|
|
160
165
|
function cloneValue(value, rewriteMap, key) {
|
|
161
166
|
if (Array.isArray(value)) return value.map((item)=>cloneValue(item, rewriteMap));
|
|
162
167
|
if ("string" == typeof value) {
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { IRAssetResolver, PageIR } from "@anvilkit/core/types";
|
|
2
|
-
import type { AssetRegistry } from "
|
|
2
|
+
import type { AssetRegistry } from "../types/types.js";
|
|
3
3
|
export interface CreateIRAssetResolverOptions {
|
|
4
4
|
readonly registry: AssetRegistry;
|
|
5
5
|
readonly dataUrlAllowlistOptIn?: boolean;
|
|
@@ -0,0 +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;CAC7C;AAED,wBAAgB,qBAAqB,CACpC,OAAO,EAAE,4BAA4B,GACnC,eAAe,CAgDjB;AAED,wBAAsB,aAAa,CAClC,EAAE,EAAE,MAAM,EACV,QAAQ,EAAE,eAAe,GACvB,OAAO,CAAC,MAAM,CAAC,CAmBjB"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { IRAssetResolver, PageIR } from "@anvilkit/core/types";
|
|
2
|
-
import type { AssetRegistry } from "
|
|
2
|
+
import type { AssetRegistry } from "../types/types.js";
|
|
3
3
|
export interface CreateIRAssetResolverOptions {
|
|
4
4
|
readonly registry: AssetRegistry;
|
|
5
5
|
readonly dataUrlAllowlistOptIn?: boolean;
|
|
@@ -0,0 +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;CAC7C;AAED,wBAAgB,qBAAqB,CACpC,OAAO,EAAE,4BAA4B,GACnC,eAAe,CAgDjB;AAED,wBAAsB,aAAa,CAClC,EAAE,EAAE,MAAM,EACV,QAAQ,EAAE,eAAe,GACvB,OAAO,CAAC,MAAM,CAAC,CAmBjB"}
|
|
@@ -108,7 +108,7 @@ function cloneNode(node, rewriteMap) {
|
|
|
108
108
|
return {
|
|
109
109
|
id: node.id,
|
|
110
110
|
type: node.type,
|
|
111
|
-
props:
|
|
111
|
+
props: cloneProps(node.props, rewriteMap),
|
|
112
112
|
...node.children ? {
|
|
113
113
|
children: node.children.map((child)=>cloneNode(child, rewriteMap))
|
|
114
114
|
} : {},
|
|
@@ -128,6 +128,11 @@ function cloneAsset(asset, rewriteMap) {
|
|
|
128
128
|
} : {}
|
|
129
129
|
};
|
|
130
130
|
}
|
|
131
|
+
function cloneProps(props, rewriteMap) {
|
|
132
|
+
const next = {};
|
|
133
|
+
for (const [key, value] of Object.entries(props))next[key] = cloneValue(value, rewriteMap, key);
|
|
134
|
+
return next;
|
|
135
|
+
}
|
|
131
136
|
function cloneValue(value, rewriteMap, key) {
|
|
132
137
|
if (Array.isArray(value)) return value.map((item)=>cloneValue(item, rewriteMap));
|
|
133
138
|
if ("string" == typeof value) {
|
|
@@ -92,21 +92,23 @@ function defaultSleep(ms, signal) {
|
|
|
92
92
|
return Promise.resolve();
|
|
93
93
|
}
|
|
94
94
|
return new Promise((resolve, reject)=>{
|
|
95
|
+
let onAbort;
|
|
95
96
|
const timer = setTimeout(()=>{
|
|
96
|
-
signal
|
|
97
|
+
if (signal && onAbort) signal.removeEventListener("abort", onAbort);
|
|
97
98
|
resolve();
|
|
98
99
|
}, ms);
|
|
99
|
-
const onAbort = ()=>{
|
|
100
|
-
clearTimeout(timer);
|
|
101
|
-
reject(makeAbortError(signal));
|
|
102
|
-
};
|
|
103
100
|
if (signal) {
|
|
104
|
-
|
|
101
|
+
const activeSignal = signal;
|
|
102
|
+
onAbort = ()=>{
|
|
105
103
|
clearTimeout(timer);
|
|
106
|
-
reject(makeAbortError(
|
|
104
|
+
reject(makeAbortError(activeSignal));
|
|
105
|
+
};
|
|
106
|
+
if (activeSignal.aborted) {
|
|
107
|
+
clearTimeout(timer);
|
|
108
|
+
reject(makeAbortError(activeSignal));
|
|
107
109
|
return;
|
|
108
110
|
}
|
|
109
|
-
|
|
111
|
+
activeSignal.addEventListener("abort", onAbort, {
|
|
110
112
|
once: true
|
|
111
113
|
});
|
|
112
114
|
}
|
|
@@ -0,0 +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;gBAG9B,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,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"}
|
|
@@ -0,0 +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;gBAG9B,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,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"}
|
|
@@ -63,21 +63,23 @@ function defaultSleep(ms, signal) {
|
|
|
63
63
|
return Promise.resolve();
|
|
64
64
|
}
|
|
65
65
|
return new Promise((resolve, reject)=>{
|
|
66
|
+
let onAbort;
|
|
66
67
|
const timer = setTimeout(()=>{
|
|
67
|
-
signal
|
|
68
|
+
if (signal && onAbort) signal.removeEventListener("abort", onAbort);
|
|
68
69
|
resolve();
|
|
69
70
|
}, ms);
|
|
70
|
-
const onAbort = ()=>{
|
|
71
|
-
clearTimeout(timer);
|
|
72
|
-
reject(makeAbortError(signal));
|
|
73
|
-
};
|
|
74
71
|
if (signal) {
|
|
75
|
-
|
|
72
|
+
const activeSignal = signal;
|
|
73
|
+
onAbort = ()=>{
|
|
76
74
|
clearTimeout(timer);
|
|
77
|
-
reject(makeAbortError(
|
|
75
|
+
reject(makeAbortError(activeSignal));
|
|
76
|
+
};
|
|
77
|
+
if (activeSignal.aborted) {
|
|
78
|
+
clearTimeout(timer);
|
|
79
|
+
reject(makeAbortError(activeSignal));
|
|
78
80
|
return;
|
|
79
81
|
}
|
|
80
|
-
|
|
82
|
+
activeSignal.addEventListener("abort", onAbort, {
|
|
81
83
|
once: true
|
|
82
84
|
});
|
|
83
85
|
}
|
|
@@ -25,8 +25,8 @@ var __webpack_exports__ = {};
|
|
|
25
25
|
__webpack_require__.r(__webpack_exports__);
|
|
26
26
|
__webpack_require__.d(__webpack_exports__, {
|
|
27
27
|
MAX_CONCURRENT_UPLOADS: ()=>MAX_CONCURRENT_UPLOADS,
|
|
28
|
-
|
|
29
|
-
|
|
28
|
+
createStudioAssetSource: ()=>createStudioAssetSource,
|
|
29
|
+
inferStudioAssetKind: ()=>inferStudioAssetKind
|
|
30
30
|
});
|
|
31
31
|
const external_asset_reference_cjs_namespaceObject = require("./asset-reference.cjs");
|
|
32
32
|
const external_infer_kind_cjs_namespaceObject = require("./infer-kind.cjs");
|
|
@@ -68,7 +68,7 @@ function createStudioAssetSource(options) {
|
|
|
68
68
|
};
|
|
69
69
|
return Promise.resolve(projected);
|
|
70
70
|
},
|
|
71
|
-
async upload (files, listener) {
|
|
71
|
+
async upload (files, listener, signal) {
|
|
72
72
|
const fileList = Array.from(files);
|
|
73
73
|
if (0 === fileList.length) return [];
|
|
74
74
|
const totalBytes = fileList.reduce((acc, file)=>acc + file.size, 0);
|
|
@@ -80,6 +80,13 @@ function createStudioAssetSource(options) {
|
|
|
80
80
|
listener?.(event);
|
|
81
81
|
fanOut(event);
|
|
82
82
|
};
|
|
83
|
+
const abortFromSignal = ()=>{
|
|
84
|
+
if (void 0 === abortError) abortError = signal?.reason instanceof Error ? signal.reason : makeAbortError();
|
|
85
|
+
};
|
|
86
|
+
if (signal?.aborted) abortFromSignal();
|
|
87
|
+
signal?.addEventListener("abort", abortFromSignal, {
|
|
88
|
+
once: true
|
|
89
|
+
});
|
|
83
90
|
const runWorker = async ()=>{
|
|
84
91
|
while(true){
|
|
85
92
|
if (void 0 !== abortError) return;
|
|
@@ -88,7 +95,10 @@ function createStudioAssetSource(options) {
|
|
|
88
95
|
const file = fileList[index];
|
|
89
96
|
if (void 0 === file) return;
|
|
90
97
|
try {
|
|
91
|
-
const result = await upload(file
|
|
98
|
+
const result = await upload(file, {
|
|
99
|
+
signal
|
|
100
|
+
});
|
|
101
|
+
if (void 0 !== abortError) return;
|
|
92
102
|
bytesUploaded += file.size;
|
|
93
103
|
const asset = project(result);
|
|
94
104
|
results[index] = asset;
|
|
@@ -106,6 +116,7 @@ function createStudioAssetSource(options) {
|
|
|
106
116
|
abortError = error;
|
|
107
117
|
return;
|
|
108
118
|
}
|
|
119
|
+
if (void 0 !== abortError || signal?.aborted) return;
|
|
109
120
|
const message = error instanceof Error ? error.message : String(error);
|
|
110
121
|
emit({
|
|
111
122
|
type: "error",
|
|
@@ -117,9 +128,13 @@ function createStudioAssetSource(options) {
|
|
|
117
128
|
const workerCount = Math.min(maxConcurrent, fileList.length);
|
|
118
129
|
const workers = [];
|
|
119
130
|
for(let i = 0; i < workerCount; i += 1)workers.push(runWorker());
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
131
|
+
try {
|
|
132
|
+
await Promise.all(workers);
|
|
133
|
+
if (void 0 !== abortError) throw abortError;
|
|
134
|
+
return results.filter((value)=>null !== value);
|
|
135
|
+
} finally{
|
|
136
|
+
signal?.removeEventListener("abort", abortFromSignal);
|
|
137
|
+
}
|
|
123
138
|
},
|
|
124
139
|
delete (assetId) {
|
|
125
140
|
registry.delete(assetId);
|
|
@@ -198,6 +213,12 @@ function isAbortError(error) {
|
|
|
198
213
|
const name = error.name;
|
|
199
214
|
return "AbortError" === name;
|
|
200
215
|
}
|
|
216
|
+
function makeAbortError() {
|
|
217
|
+
if ("u" > typeof DOMException) return new DOMException("Upload aborted", "AbortError");
|
|
218
|
+
const error = new Error("Upload aborted");
|
|
219
|
+
error.name = "AbortError";
|
|
220
|
+
return error;
|
|
221
|
+
}
|
|
201
222
|
exports.MAX_CONCURRENT_UPLOADS = __webpack_exports__.MAX_CONCURRENT_UPLOADS;
|
|
202
223
|
exports.createStudioAssetSource = __webpack_exports__.createStudioAssetSource;
|
|
203
224
|
exports.inferStudioAssetKind = __webpack_exports__.inferStudioAssetKind;
|
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
* registry so the IR resolver and the sidebar see the same data.
|
|
13
13
|
*/
|
|
14
14
|
import type { StudioAssetKind, StudioAssetSource } from "@anvilkit/core/types";
|
|
15
|
-
import type { AssetRegistry, UploadResult } from "
|
|
15
|
+
import type { AssetRegistry, UploadAdapterOptions, UploadResult } from "../types/types.js";
|
|
16
16
|
/**
|
|
17
17
|
* Default concurrency cap for batched uploads. Editors typically drag
|
|
18
18
|
* 1–10 files at a time; three concurrent uploads strikes a balance
|
|
@@ -25,7 +25,7 @@ export interface CreateStudioAssetSourceOptions {
|
|
|
25
25
|
* Performs the upload. Provided by the plugin so the adapter does
|
|
26
26
|
* not need to depend on `StudioPluginContext` directly.
|
|
27
27
|
*/
|
|
28
|
-
readonly upload: (file: File) => Promise<UploadResult>;
|
|
28
|
+
readonly upload: (file: File, options?: UploadAdapterOptions) => Promise<UploadResult>;
|
|
29
29
|
/**
|
|
30
30
|
* Optional thumbnail derivation. Returning a string sets
|
|
31
31
|
* `StudioAsset.thumbnailUrl`; returning `undefined` suppresses the
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"studio-asset-source.d.cts","sourceRoot":"","sources":["../../src/utils/studio-asset-source.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,KAAK,EAEX,eAAe,EAGf,iBAAiB,EAGjB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,KAAK,EACX,aAAa,EACb,oBAAoB,EACpB,YAAY,EACZ,MAAM,mBAAmB,CAAC;AAI3B;;;;GAIG;AACH,eAAO,MAAM,sBAAsB,IAAI,CAAC;AAExC,MAAM,WAAW,8BAA8B;IAC9C,QAAQ,CAAC,QAAQ,EAAE,aAAa,CAAC;IACjC;;;OAGG;IACH,QAAQ,CAAC,MAAM,EAAE,CAChB,IAAI,EAAE,IAAI,EACV,OAAO,CAAC,EAAE,oBAAoB,KAC1B,OAAO,CAAC,YAAY,CAAC,CAAC;IAC3B;;;;;;;OAOG;IACH,QAAQ,CAAC,YAAY,CAAC,EAAE,CAAC,KAAK,EAAE,YAAY,KAAK,MAAM,GAAG,SAAS,CAAC;IACpE;;;;OAIG;IACH,QAAQ,CAAC,oBAAoB,CAAC,EAAE,MAAM,CAAC;CACvC;AAED,wBAAgB,uBAAuB,CACtC,OAAO,EAAE,8BAA8B,GACrC,iBAAiB,CAqLnB;AA4BD;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,YAAY,GAAG,eAAe,CAEzE"}
|
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
* registry so the IR resolver and the sidebar see the same data.
|
|
13
13
|
*/
|
|
14
14
|
import type { StudioAssetKind, StudioAssetSource } from "@anvilkit/core/types";
|
|
15
|
-
import type { AssetRegistry, UploadResult } from "
|
|
15
|
+
import type { AssetRegistry, UploadAdapterOptions, UploadResult } from "../types/types.js";
|
|
16
16
|
/**
|
|
17
17
|
* Default concurrency cap for batched uploads. Editors typically drag
|
|
18
18
|
* 1–10 files at a time; three concurrent uploads strikes a balance
|
|
@@ -25,7 +25,7 @@ export interface CreateStudioAssetSourceOptions {
|
|
|
25
25
|
* Performs the upload. Provided by the plugin so the adapter does
|
|
26
26
|
* not need to depend on `StudioPluginContext` directly.
|
|
27
27
|
*/
|
|
28
|
-
readonly upload: (file: File) => Promise<UploadResult>;
|
|
28
|
+
readonly upload: (file: File, options?: UploadAdapterOptions) => Promise<UploadResult>;
|
|
29
29
|
/**
|
|
30
30
|
* Optional thumbnail derivation. Returning a string sets
|
|
31
31
|
* `StudioAsset.thumbnailUrl`; returning `undefined` suppresses the
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"studio-asset-source.d.ts","sourceRoot":"","sources":["../../src/utils/studio-asset-source.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,KAAK,EAEX,eAAe,EAGf,iBAAiB,EAGjB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,KAAK,EACX,aAAa,EACb,oBAAoB,EACpB,YAAY,EACZ,MAAM,mBAAmB,CAAC;AAI3B;;;;GAIG;AACH,eAAO,MAAM,sBAAsB,IAAI,CAAC;AAExC,MAAM,WAAW,8BAA8B;IAC9C,QAAQ,CAAC,QAAQ,EAAE,aAAa,CAAC;IACjC;;;OAGG;IACH,QAAQ,CAAC,MAAM,EAAE,CAChB,IAAI,EAAE,IAAI,EACV,OAAO,CAAC,EAAE,oBAAoB,KAC1B,OAAO,CAAC,YAAY,CAAC,CAAC;IAC3B;;;;;;;OAOG;IACH,QAAQ,CAAC,YAAY,CAAC,EAAE,CAAC,KAAK,EAAE,YAAY,KAAK,MAAM,GAAG,SAAS,CAAC;IACpE;;;;OAIG;IACH,QAAQ,CAAC,oBAAoB,CAAC,EAAE,MAAM,CAAC;CACvC;AAED,wBAAgB,uBAAuB,CACtC,OAAO,EAAE,8BAA8B,GACrC,iBAAiB,CAqLnB;AA4BD;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,YAAY,GAAG,eAAe,CAEzE"}
|
|
@@ -38,7 +38,7 @@ function createStudioAssetSource(options) {
|
|
|
38
38
|
};
|
|
39
39
|
return Promise.resolve(projected);
|
|
40
40
|
},
|
|
41
|
-
async upload (files, listener) {
|
|
41
|
+
async upload (files, listener, signal) {
|
|
42
42
|
const fileList = Array.from(files);
|
|
43
43
|
if (0 === fileList.length) return [];
|
|
44
44
|
const totalBytes = fileList.reduce((acc, file)=>acc + file.size, 0);
|
|
@@ -50,6 +50,13 @@ function createStudioAssetSource(options) {
|
|
|
50
50
|
listener?.(event);
|
|
51
51
|
fanOut(event);
|
|
52
52
|
};
|
|
53
|
+
const abortFromSignal = ()=>{
|
|
54
|
+
if (void 0 === abortError) abortError = signal?.reason instanceof Error ? signal.reason : makeAbortError();
|
|
55
|
+
};
|
|
56
|
+
if (signal?.aborted) abortFromSignal();
|
|
57
|
+
signal?.addEventListener("abort", abortFromSignal, {
|
|
58
|
+
once: true
|
|
59
|
+
});
|
|
53
60
|
const runWorker = async ()=>{
|
|
54
61
|
while(true){
|
|
55
62
|
if (void 0 !== abortError) return;
|
|
@@ -58,7 +65,10 @@ function createStudioAssetSource(options) {
|
|
|
58
65
|
const file = fileList[index];
|
|
59
66
|
if (void 0 === file) return;
|
|
60
67
|
try {
|
|
61
|
-
const result = await upload(file
|
|
68
|
+
const result = await upload(file, {
|
|
69
|
+
signal
|
|
70
|
+
});
|
|
71
|
+
if (void 0 !== abortError) return;
|
|
62
72
|
bytesUploaded += file.size;
|
|
63
73
|
const asset = project(result);
|
|
64
74
|
results[index] = asset;
|
|
@@ -76,6 +86,7 @@ function createStudioAssetSource(options) {
|
|
|
76
86
|
abortError = error;
|
|
77
87
|
return;
|
|
78
88
|
}
|
|
89
|
+
if (void 0 !== abortError || signal?.aborted) return;
|
|
79
90
|
const message = error instanceof Error ? error.message : String(error);
|
|
80
91
|
emit({
|
|
81
92
|
type: "error",
|
|
@@ -87,9 +98,13 @@ function createStudioAssetSource(options) {
|
|
|
87
98
|
const workerCount = Math.min(maxConcurrent, fileList.length);
|
|
88
99
|
const workers = [];
|
|
89
100
|
for(let i = 0; i < workerCount; i += 1)workers.push(runWorker());
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
101
|
+
try {
|
|
102
|
+
await Promise.all(workers);
|
|
103
|
+
if (void 0 !== abortError) throw abortError;
|
|
104
|
+
return results.filter((value)=>null !== value);
|
|
105
|
+
} finally{
|
|
106
|
+
signal?.removeEventListener("abort", abortFromSignal);
|
|
107
|
+
}
|
|
93
108
|
},
|
|
94
109
|
delete (assetId) {
|
|
95
110
|
registry.delete(assetId);
|
|
@@ -168,4 +183,10 @@ function isAbortError(error) {
|
|
|
168
183
|
const name = error.name;
|
|
169
184
|
return "AbortError" === name;
|
|
170
185
|
}
|
|
186
|
+
function makeAbortError() {
|
|
187
|
+
if ("u" > typeof DOMException) return new DOMException("Upload aborted", "AbortError");
|
|
188
|
+
const error = new Error("Upload aborted");
|
|
189
|
+
error.name = "AbortError";
|
|
190
|
+
return error;
|
|
191
|
+
}
|
|
171
192
|
export { MAX_CONCURRENT_UPLOADS, createStudioAssetSource, inferStudioAssetKind };
|
|
@@ -96,18 +96,57 @@ function assertNoMixedScriptHostname(url, options) {
|
|
|
96
96
|
].filter((s)=>scripts.has(s));
|
|
97
97
|
if (hasLatin && confusable.length > 0) throw new external_errors_cjs_namespaceObject.AssetValidationError("MIXED_SCRIPT_HOSTNAME", `Upload adapter returned a URL whose hostname mixes Latin with a visually confusable script (${confusable.join(", ")}). Set allowMixedScriptHostnames: true to permit this.`);
|
|
98
98
|
}
|
|
99
|
+
const SKIP_SCRIPT_RE = /[\p{Script=Common}\p{Script=Inherited}]/u;
|
|
100
|
+
const SCRIPT_MATCHERS = [
|
|
101
|
+
[
|
|
102
|
+
"Latin",
|
|
103
|
+
/\p{Script=Latin}/u
|
|
104
|
+
],
|
|
105
|
+
[
|
|
106
|
+
"Cyrillic",
|
|
107
|
+
/\p{Script=Cyrillic}/u
|
|
108
|
+
],
|
|
109
|
+
[
|
|
110
|
+
"Greek",
|
|
111
|
+
/\p{Script=Greek}/u
|
|
112
|
+
],
|
|
113
|
+
[
|
|
114
|
+
"Han",
|
|
115
|
+
/\p{Script=Han}/u
|
|
116
|
+
],
|
|
117
|
+
[
|
|
118
|
+
"Hiragana",
|
|
119
|
+
/\p{Script=Hiragana}/u
|
|
120
|
+
],
|
|
121
|
+
[
|
|
122
|
+
"Katakana",
|
|
123
|
+
/\p{Script=Katakana}/u
|
|
124
|
+
],
|
|
125
|
+
[
|
|
126
|
+
"Hangul",
|
|
127
|
+
/\p{Script=Hangul}/u
|
|
128
|
+
],
|
|
129
|
+
[
|
|
130
|
+
"Arabic",
|
|
131
|
+
/\p{Script=Arabic}/u
|
|
132
|
+
],
|
|
133
|
+
[
|
|
134
|
+
"Hebrew",
|
|
135
|
+
/\p{Script=Hebrew}/u
|
|
136
|
+
]
|
|
137
|
+
];
|
|
99
138
|
function detectHostnameScripts(host) {
|
|
100
139
|
const scripts = new Set();
|
|
101
|
-
for (const ch of host)
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
140
|
+
for (const ch of host){
|
|
141
|
+
if (SKIP_SCRIPT_RE.test(ch)) continue;
|
|
142
|
+
let matched = false;
|
|
143
|
+
for (const [name, re] of SCRIPT_MATCHERS)if (re.test(ch)) {
|
|
144
|
+
scripts.add(name);
|
|
145
|
+
matched = true;
|
|
146
|
+
break;
|
|
147
|
+
}
|
|
148
|
+
if (!matched) scripts.add("Other");
|
|
149
|
+
}
|
|
111
150
|
return scripts;
|
|
112
151
|
}
|
|
113
152
|
function normalizeCandidate(input) {
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { AssetManagerOptions, UploadResult } from "
|
|
1
|
+
import type { AssetManagerOptions, UploadResult } from "../types/types.js";
|
|
2
2
|
/**
|
|
3
3
|
* Subset of {@link AssetManagerOptions} consulted by the trust boundary.
|
|
4
4
|
* `urlAllowlist` is intentionally absent — Phase 4 replaced the raw
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validate-upload-result.d.cts","sourceRoot":"","sources":["../../src/utils/validate-upload-result.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAM3E;;;;GAIG;AACH,MAAM,MAAM,2BAA2B,GAAG,IAAI,CAC7C,mBAAmB,EACnB,uBAAuB,GAAG,2BAA2B,CACrD,CAAC;AAEF,wBAAgB,oBAAoB,CACnC,MAAM,EAAE,YAAY,EACpB,OAAO,GAAE,2BAAgC,GACvC,YAAY,CAqBd"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { AssetManagerOptions, UploadResult } from "
|
|
1
|
+
import type { AssetManagerOptions, UploadResult } from "../types/types.js";
|
|
2
2
|
/**
|
|
3
3
|
* Subset of {@link AssetManagerOptions} consulted by the trust boundary.
|
|
4
4
|
* `urlAllowlist` is intentionally absent — Phase 4 replaced the raw
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validate-upload-result.d.ts","sourceRoot":"","sources":["../../src/utils/validate-upload-result.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAM3E;;;;GAIG;AACH,MAAM,MAAM,2BAA2B,GAAG,IAAI,CAC7C,mBAAmB,EACnB,uBAAuB,GAAG,2BAA2B,CACrD,CAAC;AAEF,wBAAgB,oBAAoB,CACnC,MAAM,EAAE,YAAY,EACpB,OAAO,GAAE,2BAAgC,GACvC,YAAY,CAqBd"}
|