@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
package/dist/index.d.cts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.cts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,sBAAsB,EAAE,MAAM,wBAAwB,CAAC;AACrE,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3D,YAAY,EACX,WAAW,EACX,kBAAkB,EAClB,YAAY,GACZ,MAAM,
|
|
1
|
+
{"version":3,"file":"index.d.cts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,sBAAsB,EAAE,MAAM,wBAAwB,CAAC;AACrE,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EACN,wBAAwB,EACxB,oBAAoB,EACpB,gBAAgB,EAChB,WAAW,GACX,MAAM,aAAa,CAAC;AACrB,YAAY,EACX,SAAS,EACT,mBAAmB,EACnB,SAAS,EACT,aAAa,EACb,qBAAqB,EACrB,kBAAkB,EAClB,eAAe,EACf,aAAa,EACb,oBAAoB,EACpB,YAAY,GACZ,MAAM,kBAAkB,CAAC;AAC1B,YAAY,EACX,WAAW,EACX,kBAAkB,EAClB,YAAY,GACZ,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAChD,YAAY,EAAE,wBAAwB,EAAE,MAAM,mBAAmB,CAAC;AAClE,OAAO,EAAE,oBAAoB,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AAC/E,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAC1D,YAAY,EAAE,4BAA4B,EAAE,MAAM,qBAAqB,CAAC;AACxE,OAAO,EAAE,qBAAqB,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAC3E,YAAY,EAAE,8BAA8B,EAAE,MAAM,gCAAgC,CAAC;AACrF,OAAO,EACN,uBAAuB,EACvB,oBAAoB,GACpB,MAAM,gCAAgC,CAAC;AACxC,YAAY,EAAE,2BAA2B,EAAE,MAAM,mCAAmC,CAAC;AACrF,OAAO,EAAE,oBAAoB,EAAE,MAAM,mCAAmC,CAAC"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,18 +1,18 @@
|
|
|
1
1
|
export type { DataUrlUploaderOptions } from "./adapters/data-url.js";
|
|
2
2
|
export { dataUrlUploader } from "./adapters/data-url.js";
|
|
3
3
|
export { inMemoryUploader } from "./adapters/in-memory.js";
|
|
4
|
-
export type { RequiredCsp, RequiredCspOptions, S3CspOptions, } from "./csp.js";
|
|
5
|
-
export { getRequiredCsp } from "./csp.js";
|
|
6
|
-
export type { AssetResolutionErrorCode } from "./errors.js";
|
|
7
|
-
export { AssetResolutionError, AssetValidationError, } from "./errors.js";
|
|
8
|
-
export { inferAssetKind } from "./infer-kind.js";
|
|
9
4
|
export { createAssetManagerPlugin, createAssetReference, getAssetRegistry, uploadAsset, } from "./plugin.js";
|
|
10
|
-
export {
|
|
11
|
-
export type {
|
|
12
|
-
export {
|
|
13
|
-
export type {
|
|
14
|
-
export {
|
|
15
|
-
export
|
|
16
|
-
export
|
|
17
|
-
export {
|
|
5
|
+
export type { AssetKind, AssetManagerOptions, AssetMeta, AssetRegistry, AssetRegistryListener, AssetSearchOptions, AssetSearchPage, UploadAdapter, UploadAdapterOptions, UploadResult, } from "./types/types.js";
|
|
6
|
+
export type { RequiredCsp, RequiredCspOptions, S3CspOptions, } from "./utils/csp.js";
|
|
7
|
+
export { getRequiredCsp } from "./utils/csp.js";
|
|
8
|
+
export type { AssetResolutionErrorCode } from "./utils/errors.js";
|
|
9
|
+
export { AssetResolutionError, AssetValidationError } from "./utils/errors.js";
|
|
10
|
+
export { inferAssetKind } from "./utils/infer-kind.js";
|
|
11
|
+
export { createAssetRegistry } from "./utils/registry.js";
|
|
12
|
+
export type { CreateIRAssetResolverOptions } from "./utils/resolver.js";
|
|
13
|
+
export { createIRAssetResolver, resolveAssets } from "./utils/resolver.js";
|
|
14
|
+
export type { CreateStudioAssetSourceOptions } from "./utils/studio-asset-source.js";
|
|
15
|
+
export { createStudioAssetSource, inferStudioAssetKind, } from "./utils/studio-asset-source.js";
|
|
16
|
+
export type { ValidateUploadResultOptions } from "./utils/validate-upload-result.js";
|
|
17
|
+
export { validateUploadResult } from "./utils/validate-upload-result.js";
|
|
18
18
|
//# 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":"AAAA,YAAY,EAAE,sBAAsB,EAAE,MAAM,wBAAwB,CAAC;AACrE,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3D,YAAY,EACX,WAAW,EACX,kBAAkB,EAClB,YAAY,GACZ,MAAM,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,sBAAsB,EAAE,MAAM,wBAAwB,CAAC;AACrE,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EACN,wBAAwB,EACxB,oBAAoB,EACpB,gBAAgB,EAChB,WAAW,GACX,MAAM,aAAa,CAAC;AACrB,YAAY,EACX,SAAS,EACT,mBAAmB,EACnB,SAAS,EACT,aAAa,EACb,qBAAqB,EACrB,kBAAkB,EAClB,eAAe,EACf,aAAa,EACb,oBAAoB,EACpB,YAAY,GACZ,MAAM,kBAAkB,CAAC;AAC1B,YAAY,EACX,WAAW,EACX,kBAAkB,EAClB,YAAY,GACZ,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAChD,YAAY,EAAE,wBAAwB,EAAE,MAAM,mBAAmB,CAAC;AAClE,OAAO,EAAE,oBAAoB,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AAC/E,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAC1D,YAAY,EAAE,4BAA4B,EAAE,MAAM,qBAAqB,CAAC;AACxE,OAAO,EAAE,qBAAqB,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAC3E,YAAY,EAAE,8BAA8B,EAAE,MAAM,gCAAgC,CAAC;AACrF,OAAO,EACN,uBAAuB,EACvB,oBAAoB,GACpB,MAAM,gCAAgC,CAAC;AACxC,YAAY,EAAE,2BAA2B,EAAE,MAAM,mCAAmC,CAAC;AACrF,OAAO,EAAE,oBAAoB,EAAE,MAAM,mCAAmC,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
export { dataUrlUploader } from "./adapters/data-url.js";
|
|
2
2
|
export { inMemoryUploader } from "./adapters/in-memory.js";
|
|
3
|
-
export { getRequiredCsp } from "./csp.js";
|
|
4
|
-
export { AssetResolutionError, AssetValidationError } from "./errors.js";
|
|
5
|
-
export { inferAssetKind } from "./infer-kind.js";
|
|
6
3
|
export { createAssetManagerPlugin, createAssetReference, getAssetRegistry, uploadAsset } from "./plugin.js";
|
|
7
|
-
export {
|
|
8
|
-
export {
|
|
9
|
-
export {
|
|
10
|
-
export {
|
|
4
|
+
export { getRequiredCsp } from "./utils/csp.js";
|
|
5
|
+
export { AssetResolutionError, AssetValidationError } from "./utils/errors.js";
|
|
6
|
+
export { inferAssetKind } from "./utils/infer-kind.js";
|
|
7
|
+
export { createAssetRegistry } from "./utils/registry.js";
|
|
8
|
+
export { createIRAssetResolver, resolveAssets } from "./utils/resolver.js";
|
|
9
|
+
export { createStudioAssetSource, inferStudioAssetKind } from "./utils/studio-asset-source.js";
|
|
10
|
+
export { validateUploadResult } from "./utils/validate-upload-result.js";
|
package/dist/plugin.cjs
CHANGED
|
@@ -1,5 +1,14 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
var __webpack_require__ = {};
|
|
3
|
+
(()=>{
|
|
4
|
+
__webpack_require__.n = (module)=>{
|
|
5
|
+
var getter = module && module.__esModule ? ()=>module['default'] : ()=>module;
|
|
6
|
+
__webpack_require__.d(getter, {
|
|
7
|
+
a: getter
|
|
8
|
+
});
|
|
9
|
+
return getter;
|
|
10
|
+
};
|
|
11
|
+
})();
|
|
3
12
|
(()=>{
|
|
4
13
|
__webpack_require__.d = (exports1, definition)=>{
|
|
5
14
|
for(var key in definition)if (__webpack_require__.o(definition, key) && !__webpack_require__.o(exports1, key)) Object.defineProperty(exports1, key, {
|
|
@@ -24,34 +33,34 @@ var __webpack_require__ = {};
|
|
|
24
33
|
var __webpack_exports__ = {};
|
|
25
34
|
__webpack_require__.r(__webpack_exports__);
|
|
26
35
|
__webpack_require__.d(__webpack_exports__, {
|
|
27
|
-
uploadAsset: ()=>uploadAsset,
|
|
28
|
-
validateSelectedFile: ()=>validateSelectedFile,
|
|
29
36
|
createAssetManagerPlugin: ()=>createAssetManagerPlugin,
|
|
37
|
+
createAssetReference: ()=>asset_reference_cjs_namespaceObject.createAssetReference,
|
|
30
38
|
getAssetRegistry: ()=>getAssetRegistry,
|
|
31
|
-
|
|
39
|
+
uploadAsset: ()=>uploadAsset,
|
|
40
|
+
validateSelectedFile: ()=>validateSelectedFile
|
|
32
41
|
});
|
|
33
|
-
const
|
|
34
|
-
|
|
35
|
-
const
|
|
36
|
-
const
|
|
37
|
-
const
|
|
38
|
-
const
|
|
39
|
-
const
|
|
40
|
-
const
|
|
42
|
+
const config_json_namespaceObject = require("../meta/config.json");
|
|
43
|
+
var config_json_default = /*#__PURE__*/ __webpack_require__.n(config_json_namespaceObject);
|
|
44
|
+
const asset_reference_cjs_namespaceObject = require("./utils/asset-reference.cjs");
|
|
45
|
+
const errors_cjs_namespaceObject = require("./utils/errors.cjs");
|
|
46
|
+
const header_action_cjs_namespaceObject = require("./utils/header-action.cjs");
|
|
47
|
+
const infer_kind_cjs_namespaceObject = require("./utils/infer-kind.cjs");
|
|
48
|
+
const registry_cjs_namespaceObject = require("./utils/registry.cjs");
|
|
49
|
+
const resolver_cjs_namespaceObject = require("./utils/resolver.cjs");
|
|
50
|
+
const studio_asset_source_cjs_namespaceObject = require("./utils/studio-asset-source.cjs");
|
|
51
|
+
const validate_upload_result_cjs_namespaceObject = require("./utils/validate-upload-result.cjs");
|
|
52
|
+
const external_version_cjs_namespaceObject = require("./version.cjs");
|
|
41
53
|
const META = {
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
version: "1.0.0",
|
|
45
|
-
coreVersion: "^0.1.0-alpha",
|
|
46
|
-
description: "Headless asset upload plugin with host-provided persistence and a separate React UI subpath."
|
|
54
|
+
...config_json_default(),
|
|
55
|
+
version: external_version_cjs_namespaceObject.ASSET_MANAGER_VERSION
|
|
47
56
|
};
|
|
48
57
|
const stateByToken = new WeakMap();
|
|
49
58
|
const tokenByContext = new WeakMap();
|
|
50
59
|
function createAssetManagerPlugin(options) {
|
|
51
60
|
const token = {};
|
|
52
|
-
const registry = (0,
|
|
61
|
+
const registry = (0, registry_cjs_namespaceObject.createAssetRegistry)();
|
|
53
62
|
const normalizedOptions = normalizeOptions(options);
|
|
54
|
-
const assetResolver = (0,
|
|
63
|
+
const assetResolver = (0, resolver_cjs_namespaceObject.createIRAssetResolver)({
|
|
55
64
|
registry,
|
|
56
65
|
dataUrlAllowlistOptIn: normalizedOptions.dataUrlAllowlistOptIn,
|
|
57
66
|
allowMixedScriptHostnames: normalizedOptions.allowMixedScriptHostnames
|
|
@@ -62,7 +71,7 @@ function createAssetManagerPlugin(options) {
|
|
|
62
71
|
const registration = {
|
|
63
72
|
meta: META,
|
|
64
73
|
headerActions: [
|
|
65
|
-
|
|
74
|
+
header_action_cjs_namespaceObject.uploadAssetAction
|
|
66
75
|
],
|
|
67
76
|
hooks: {
|
|
68
77
|
onInit (initCtx) {
|
|
@@ -74,9 +83,9 @@ function createAssetManagerPlugin(options) {
|
|
|
74
83
|
});
|
|
75
84
|
tokenByContext.set(initCtx, token);
|
|
76
85
|
initCtx.registerAssetResolver(assetResolver);
|
|
77
|
-
const studioAssetSource = (0,
|
|
86
|
+
const studioAssetSource = (0, studio_asset_source_cjs_namespaceObject.createStudioAssetSource)({
|
|
78
87
|
registry,
|
|
79
|
-
upload: (file)=>uploadAsset(initCtx, file),
|
|
88
|
+
upload: (file, opts)=>uploadAsset(initCtx, file, opts?.signal),
|
|
80
89
|
...normalizedOptions.getThumbnail ? {
|
|
81
90
|
getThumbnail: normalizedOptions.getThumbnail
|
|
82
91
|
} : {}
|
|
@@ -100,23 +109,27 @@ function getAssetRegistry(ctx) {
|
|
|
100
109
|
const token = tokenByContext.get(ctx);
|
|
101
110
|
return token ? stateByToken.get(token)?.registry : void 0;
|
|
102
111
|
}
|
|
103
|
-
async function uploadAsset(ctx, file) {
|
|
112
|
+
async function uploadAsset(ctx, file, signal) {
|
|
104
113
|
const state = getRuntimeState(ctx);
|
|
105
114
|
const { options, registry } = state;
|
|
106
115
|
try {
|
|
107
116
|
validateSelectedFile(file, options);
|
|
108
|
-
const uploadResult = await options.uploader(file
|
|
109
|
-
|
|
117
|
+
const uploadResult = await options.uploader(file, signal ? {
|
|
118
|
+
signal
|
|
119
|
+
} : void 0);
|
|
120
|
+
if (signal?.aborted) throw makePluginAbortError();
|
|
121
|
+
const validated = (0, validate_upload_result_cjs_namespaceObject.validateUploadResult)(mergeUploadMeta(uploadResult, file), options);
|
|
110
122
|
const tagged = withDerivedTags(validated, file);
|
|
111
123
|
const stored = registry.register(tagged);
|
|
112
124
|
dispatchAssetReference(ctx, stored);
|
|
113
125
|
ctx.emit("asset-manager:uploaded", {
|
|
114
126
|
asset: stored,
|
|
115
|
-
reference: (0,
|
|
127
|
+
reference: (0, asset_reference_cjs_namespaceObject.createAssetReference)(stored.id)
|
|
116
128
|
});
|
|
117
129
|
return stored;
|
|
118
130
|
} catch (error) {
|
|
119
|
-
|
|
131
|
+
if (isAbortLikeError(error) || signal?.aborted) throw error;
|
|
132
|
+
const normalizedError = error instanceof errors_cjs_namespaceObject.AssetValidationError ? error : new errors_cjs_namespaceObject.AssetValidationError("UPLOAD_FAILED", error instanceof Error ? error.message : String(error), {
|
|
120
133
|
cause: error
|
|
121
134
|
});
|
|
122
135
|
ctx.emit("asset-manager:error", {
|
|
@@ -130,10 +143,10 @@ async function uploadAsset(ctx, file) {
|
|
|
130
143
|
}
|
|
131
144
|
}
|
|
132
145
|
function validateSelectedFile(file, options) {
|
|
133
|
-
if (void 0 !== options.maxFileSize && file.size > options.maxFileSize) throw new
|
|
146
|
+
if (void 0 !== options.maxFileSize && file.size > options.maxFileSize) throw new errors_cjs_namespaceObject.AssetValidationError("FILE_TOO_LARGE", `File size ${file.size} bytes exceeds the configured maxFileSize of ${options.maxFileSize} bytes.`);
|
|
134
147
|
if (options.acceptedMimeTypes && options.acceptedMimeTypes.length > 0 && !mimeTypeMatches(file.type, options.acceptedMimeTypes)) {
|
|
135
148
|
const mimeType = file.type || "unknown";
|
|
136
|
-
throw new
|
|
149
|
+
throw new errors_cjs_namespaceObject.AssetValidationError("UNSUPPORTED_MIME_TYPE", `File MIME type "${mimeType}" is not in acceptedMimeTypes.`);
|
|
137
150
|
}
|
|
138
151
|
}
|
|
139
152
|
function getRuntimeState(ctx) {
|
|
@@ -155,7 +168,7 @@ function normalizeOptions(options) {
|
|
|
155
168
|
function withDerivedTags(asset, file) {
|
|
156
169
|
if (void 0 !== asset.tags && asset.tags.length > 0) return asset;
|
|
157
170
|
const tags = new Set();
|
|
158
|
-
const kind = (0,
|
|
171
|
+
const kind = (0, infer_kind_cjs_namespaceObject.inferAssetKind)(asset);
|
|
159
172
|
if ("other" !== kind) tags.add(kind);
|
|
160
173
|
for (const token of filenameTokens(file.name)){
|
|
161
174
|
if (tags.size >= 3) break;
|
|
@@ -202,7 +215,8 @@ function mimeTypeMatches(input, acceptedMimeTypes) {
|
|
|
202
215
|
}
|
|
203
216
|
function dispatchAssetReference(ctx, asset) {
|
|
204
217
|
const currentData = ctx.getData();
|
|
205
|
-
const
|
|
218
|
+
const assetsView = currentData.assets;
|
|
219
|
+
const currentAssetsRaw = Array.isArray(assetsView) ? assetsView : [];
|
|
206
220
|
const assetEntry = toIRAsset(asset);
|
|
207
221
|
const nextAssets = [];
|
|
208
222
|
let replaced = false;
|
|
@@ -224,7 +238,7 @@ function toIRAsset(asset) {
|
|
|
224
238
|
return {
|
|
225
239
|
id: asset.id,
|
|
226
240
|
kind: inferIRAssetKind(asset.meta?.mimeType, asset.url),
|
|
227
|
-
url: (0,
|
|
241
|
+
url: (0, asset_reference_cjs_namespaceObject.createAssetReference)(asset.id),
|
|
228
242
|
...asset.meta ? {
|
|
229
243
|
meta: asset.meta
|
|
230
244
|
} : {}
|
|
@@ -241,6 +255,17 @@ function inferIRAssetKind(mimeType, url) {
|
|
|
241
255
|
function isRecord(value) {
|
|
242
256
|
return "object" == typeof value && null !== value;
|
|
243
257
|
}
|
|
258
|
+
function makePluginAbortError() {
|
|
259
|
+
if ("u" > typeof DOMException) return new DOMException("Upload aborted", "AbortError");
|
|
260
|
+
const error = new Error("Upload aborted");
|
|
261
|
+
error.name = "AbortError";
|
|
262
|
+
return error;
|
|
263
|
+
}
|
|
264
|
+
function isAbortLikeError(error) {
|
|
265
|
+
if (null === error || "object" != typeof error) return false;
|
|
266
|
+
const name = error.name;
|
|
267
|
+
return "AbortError" === name;
|
|
268
|
+
}
|
|
244
269
|
exports.createAssetManagerPlugin = __webpack_exports__.createAssetManagerPlugin;
|
|
245
270
|
exports.createAssetReference = __webpack_exports__.createAssetReference;
|
|
246
271
|
exports.getAssetRegistry = __webpack_exports__.getAssetRegistry;
|
package/dist/plugin.d.cts
CHANGED
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
import type { StudioPlugin, StudioPluginContext } from "@anvilkit/core/types";
|
|
2
|
-
import {
|
|
3
|
-
import type { AssetManagerOptions, AssetRegistry, UploadResult } from "./types.js";
|
|
2
|
+
import type { Config as PuckConfig } from "@puckeditor/core";
|
|
3
|
+
import type { AssetManagerOptions, AssetRegistry, UploadResult } from "./types/types.js";
|
|
4
|
+
import { createAssetReference } from "./utils/asset-reference.js";
|
|
4
5
|
export { createAssetReference };
|
|
5
|
-
export declare function createAssetManagerPlugin(options: AssetManagerOptions): StudioPlugin
|
|
6
|
-
export declare function getAssetRegistry(ctx: StudioPluginContext): AssetRegistry | undefined;
|
|
7
|
-
export declare function uploadAsset(ctx: StudioPluginContext
|
|
6
|
+
export declare function createAssetManagerPlugin<UserConfig extends PuckConfig = PuckConfig>(options: AssetManagerOptions): StudioPlugin<UserConfig>;
|
|
7
|
+
export declare function getAssetRegistry<UserConfig extends PuckConfig = PuckConfig>(ctx: StudioPluginContext<UserConfig>): AssetRegistry | undefined;
|
|
8
|
+
export declare function uploadAsset<UserConfig extends PuckConfig = PuckConfig>(ctx: StudioPluginContext<UserConfig>, file: File, signal?: AbortSignal): Promise<UploadResult>;
|
|
8
9
|
export declare function validateSelectedFile(file: File, options: Pick<AssetManagerOptions, "acceptedMimeTypes" | "maxFileSize">): void;
|
|
9
10
|
//# sourceMappingURL=plugin.d.cts.map
|
package/dist/plugin.d.cts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plugin.d.cts","sourceRoot":"","sources":["../src/plugin.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAEX,YAAY,EACZ,mBAAmB,EAEnB,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"plugin.d.cts","sourceRoot":"","sources":["../src/plugin.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAEX,YAAY,EACZ,mBAAmB,EAEnB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,KAAK,EAAE,MAAM,IAAI,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAG7D,OAAO,KAAK,EACX,mBAAmB,EAEnB,aAAa,EACb,YAAY,EACZ,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AAUlE,OAAO,EAAE,oBAAoB,EAAE,CAAC;AA0BhC,wBAAgB,wBAAwB,CACvC,UAAU,SAAS,UAAU,GAAG,UAAU,EACzC,OAAO,EAAE,mBAAmB,GAAG,YAAY,CAAC,UAAU,CAAC,CAwDxD;AAED,wBAAgB,gBAAgB,CAAC,UAAU,SAAS,UAAU,GAAG,UAAU,EAC1E,GAAG,EAAE,mBAAmB,CAAC,UAAU,CAAC,GAClC,aAAa,GAAG,SAAS,CAG3B;AAED,wBAAsB,WAAW,CAAC,UAAU,SAAS,UAAU,GAAG,UAAU,EAC3E,GAAG,EAAE,mBAAmB,CAAC,UAAU,CAAC,EACpC,IAAI,EAAE,IAAI,EACV,MAAM,CAAC,EAAE,WAAW,GAClB,OAAO,CAAC,YAAY,CAAC,CAwDvB;AAED,wBAAgB,oBAAoB,CACnC,IAAI,EAAE,IAAI,EACV,OAAO,EAAE,IAAI,CAAC,mBAAmB,EAAE,mBAAmB,GAAG,aAAa,CAAC,GACrE,IAAI,CAmBN"}
|
package/dist/plugin.d.ts
CHANGED
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
import type { StudioPlugin, StudioPluginContext } from "@anvilkit/core/types";
|
|
2
|
-
import {
|
|
3
|
-
import type { AssetManagerOptions, AssetRegistry, UploadResult } from "./types.js";
|
|
2
|
+
import type { Config as PuckConfig } from "@puckeditor/core";
|
|
3
|
+
import type { AssetManagerOptions, AssetRegistry, UploadResult } from "./types/types.js";
|
|
4
|
+
import { createAssetReference } from "./utils/asset-reference.js";
|
|
4
5
|
export { createAssetReference };
|
|
5
|
-
export declare function createAssetManagerPlugin(options: AssetManagerOptions): StudioPlugin
|
|
6
|
-
export declare function getAssetRegistry(ctx: StudioPluginContext): AssetRegistry | undefined;
|
|
7
|
-
export declare function uploadAsset(ctx: StudioPluginContext
|
|
6
|
+
export declare function createAssetManagerPlugin<UserConfig extends PuckConfig = PuckConfig>(options: AssetManagerOptions): StudioPlugin<UserConfig>;
|
|
7
|
+
export declare function getAssetRegistry<UserConfig extends PuckConfig = PuckConfig>(ctx: StudioPluginContext<UserConfig>): AssetRegistry | undefined;
|
|
8
|
+
export declare function uploadAsset<UserConfig extends PuckConfig = PuckConfig>(ctx: StudioPluginContext<UserConfig>, file: File, signal?: AbortSignal): Promise<UploadResult>;
|
|
8
9
|
export declare function validateSelectedFile(file: File, options: Pick<AssetManagerOptions, "acceptedMimeTypes" | "maxFileSize">): void;
|
|
9
10
|
//# sourceMappingURL=plugin.d.ts.map
|
package/dist/plugin.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../src/plugin.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAEX,YAAY,EACZ,mBAAmB,EAEnB,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../src/plugin.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAEX,YAAY,EACZ,mBAAmB,EAEnB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,KAAK,EAAE,MAAM,IAAI,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAG7D,OAAO,KAAK,EACX,mBAAmB,EAEnB,aAAa,EACb,YAAY,EACZ,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AAUlE,OAAO,EAAE,oBAAoB,EAAE,CAAC;AA0BhC,wBAAgB,wBAAwB,CACvC,UAAU,SAAS,UAAU,GAAG,UAAU,EACzC,OAAO,EAAE,mBAAmB,GAAG,YAAY,CAAC,UAAU,CAAC,CAwDxD;AAED,wBAAgB,gBAAgB,CAAC,UAAU,SAAS,UAAU,GAAG,UAAU,EAC1E,GAAG,EAAE,mBAAmB,CAAC,UAAU,CAAC,GAClC,aAAa,GAAG,SAAS,CAG3B;AAED,wBAAsB,WAAW,CAAC,UAAU,SAAS,UAAU,GAAG,UAAU,EAC3E,GAAG,EAAE,mBAAmB,CAAC,UAAU,CAAC,EACpC,IAAI,EAAE,IAAI,EACV,MAAM,CAAC,EAAE,WAAW,GAClB,OAAO,CAAC,YAAY,CAAC,CAwDvB;AAED,wBAAgB,oBAAoB,CACnC,IAAI,EAAE,IAAI,EACV,OAAO,EAAE,IAAI,CAAC,mBAAmB,EAAE,mBAAmB,GAAG,aAAa,CAAC,GACrE,IAAI,CAmBN"}
|
package/dist/plugin.js
CHANGED
|
@@ -1,17 +1,18 @@
|
|
|
1
|
-
import
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
8
|
-
import {
|
|
1
|
+
import config from "../meta/config.json" with {
|
|
2
|
+
type: "json"
|
|
3
|
+
};
|
|
4
|
+
import { createAssetReference } from "./utils/asset-reference.js";
|
|
5
|
+
import { AssetValidationError } from "./utils/errors.js";
|
|
6
|
+
import { uploadAssetAction } from "./utils/header-action.js";
|
|
7
|
+
import { inferAssetKind } from "./utils/infer-kind.js";
|
|
8
|
+
import { createAssetRegistry } from "./utils/registry.js";
|
|
9
|
+
import { createIRAssetResolver } from "./utils/resolver.js";
|
|
10
|
+
import { createStudioAssetSource } from "./utils/studio-asset-source.js";
|
|
11
|
+
import { validateUploadResult } from "./utils/validate-upload-result.js";
|
|
12
|
+
import { ASSET_MANAGER_VERSION } from "./version.js";
|
|
9
13
|
const META = {
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
version: "1.0.0",
|
|
13
|
-
coreVersion: "^0.1.0-alpha",
|
|
14
|
-
description: "Headless asset upload plugin with host-provided persistence and a separate React UI subpath."
|
|
14
|
+
...config,
|
|
15
|
+
version: ASSET_MANAGER_VERSION
|
|
15
16
|
};
|
|
16
17
|
const stateByToken = new WeakMap();
|
|
17
18
|
const tokenByContext = new WeakMap();
|
|
@@ -44,7 +45,7 @@ function createAssetManagerPlugin(options) {
|
|
|
44
45
|
initCtx.registerAssetResolver(assetResolver);
|
|
45
46
|
const studioAssetSource = createStudioAssetSource({
|
|
46
47
|
registry,
|
|
47
|
-
upload: (file)=>uploadAsset(initCtx, file),
|
|
48
|
+
upload: (file, opts)=>uploadAsset(initCtx, file, opts?.signal),
|
|
48
49
|
...normalizedOptions.getThumbnail ? {
|
|
49
50
|
getThumbnail: normalizedOptions.getThumbnail
|
|
50
51
|
} : {}
|
|
@@ -68,12 +69,15 @@ function getAssetRegistry(ctx) {
|
|
|
68
69
|
const token = tokenByContext.get(ctx);
|
|
69
70
|
return token ? stateByToken.get(token)?.registry : void 0;
|
|
70
71
|
}
|
|
71
|
-
async function uploadAsset(ctx, file) {
|
|
72
|
+
async function uploadAsset(ctx, file, signal) {
|
|
72
73
|
const state = getRuntimeState(ctx);
|
|
73
74
|
const { options, registry } = state;
|
|
74
75
|
try {
|
|
75
76
|
validateSelectedFile(file, options);
|
|
76
|
-
const uploadResult = await options.uploader(file
|
|
77
|
+
const uploadResult = await options.uploader(file, signal ? {
|
|
78
|
+
signal
|
|
79
|
+
} : void 0);
|
|
80
|
+
if (signal?.aborted) throw makePluginAbortError();
|
|
77
81
|
const validated = validateUploadResult(mergeUploadMeta(uploadResult, file), options);
|
|
78
82
|
const tagged = withDerivedTags(validated, file);
|
|
79
83
|
const stored = registry.register(tagged);
|
|
@@ -84,6 +88,7 @@ async function uploadAsset(ctx, file) {
|
|
|
84
88
|
});
|
|
85
89
|
return stored;
|
|
86
90
|
} catch (error) {
|
|
91
|
+
if (isAbortLikeError(error) || signal?.aborted) throw error;
|
|
87
92
|
const normalizedError = error instanceof AssetValidationError ? error : new AssetValidationError("UPLOAD_FAILED", error instanceof Error ? error.message : String(error), {
|
|
88
93
|
cause: error
|
|
89
94
|
});
|
|
@@ -170,7 +175,8 @@ function mimeTypeMatches(input, acceptedMimeTypes) {
|
|
|
170
175
|
}
|
|
171
176
|
function dispatchAssetReference(ctx, asset) {
|
|
172
177
|
const currentData = ctx.getData();
|
|
173
|
-
const
|
|
178
|
+
const assetsView = currentData.assets;
|
|
179
|
+
const currentAssetsRaw = Array.isArray(assetsView) ? assetsView : [];
|
|
174
180
|
const assetEntry = toIRAsset(asset);
|
|
175
181
|
const nextAssets = [];
|
|
176
182
|
let replaced = false;
|
|
@@ -209,4 +215,15 @@ function inferIRAssetKind(mimeType, url) {
|
|
|
209
215
|
function isRecord(value) {
|
|
210
216
|
return "object" == typeof value && null !== value;
|
|
211
217
|
}
|
|
218
|
+
function makePluginAbortError() {
|
|
219
|
+
if ("u" > typeof DOMException) return new DOMException("Upload aborted", "AbortError");
|
|
220
|
+
const error = new Error("Upload aborted");
|
|
221
|
+
error.name = "AbortError";
|
|
222
|
+
return error;
|
|
223
|
+
}
|
|
224
|
+
function isAbortLikeError(error) {
|
|
225
|
+
if (null === error || "object" != typeof error) return false;
|
|
226
|
+
const name = error.name;
|
|
227
|
+
return "AbortError" === name;
|
|
228
|
+
}
|
|
212
229
|
export { createAssetManagerPlugin, createAssetReference, getAssetRegistry, uploadAsset, validateSelectedFile };
|
package/dist/testing/index.cjs
CHANGED
|
@@ -27,9 +27,9 @@ __webpack_require__.d(__webpack_exports__, {
|
|
|
27
27
|
createTestRegistry: ()=>createTestRegistry,
|
|
28
28
|
fakeUploader: ()=>fakeUploader
|
|
29
29
|
});
|
|
30
|
-
const
|
|
30
|
+
const registry_cjs_namespaceObject = require("../utils/registry.cjs");
|
|
31
31
|
function createTestRegistry(options = {}) {
|
|
32
|
-
const registry = (0,
|
|
32
|
+
const registry = (0, registry_cjs_namespaceObject.createAssetRegistry)();
|
|
33
33
|
for (const entry of options.initial ?? [])registry.register(entry);
|
|
34
34
|
return registry;
|
|
35
35
|
}
|
package/dist/testing/index.d.cts
CHANGED
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
* `@anvilkit/core/testing.createFakeStudioContext` — these helpers focus
|
|
7
7
|
* on the registry + uploader contracts owned by this package.
|
|
8
8
|
*/
|
|
9
|
-
import type { AssetRegistry, UploadAdapter, UploadResult } from "../types.js";
|
|
9
|
+
import type { AssetRegistry, UploadAdapter, UploadResult } from "../types/types.js";
|
|
10
10
|
export interface CreateTestRegistryOptions {
|
|
11
11
|
readonly initial?: readonly UploadResult[];
|
|
12
12
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.cts","sourceRoot":"","sources":["../../src/testing/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;
|
|
1
|
+
{"version":3,"file":"index.d.cts","sourceRoot":"","sources":["../../src/testing/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAEX,aAAa,EACb,aAAa,EACb,YAAY,EACZ,MAAM,mBAAmB,CAAC;AAG3B,MAAM,WAAW,yBAAyB;IACzC,QAAQ,CAAC,OAAO,CAAC,EAAE,SAAS,YAAY,EAAE,CAAC;CAC3C;AAED,wBAAgB,kBAAkB,CACjC,OAAO,GAAE,yBAA8B,GACrC,aAAa,CAMf;AAED,MAAM,WAAW,mBAAmB;IACnC;;;;;OAKG;IACH,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;CAClD;AAED,wBAAgB,YAAY,CAAC,OAAO,GAAE,mBAAwB,GAAG,aAAa,CAkB7E"}
|
package/dist/testing/index.d.ts
CHANGED
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
* `@anvilkit/core/testing.createFakeStudioContext` — these helpers focus
|
|
7
7
|
* on the registry + uploader contracts owned by this package.
|
|
8
8
|
*/
|
|
9
|
-
import type { AssetRegistry, UploadAdapter, UploadResult } from "../types.js";
|
|
9
|
+
import type { AssetRegistry, UploadAdapter, UploadResult } from "../types/types.js";
|
|
10
10
|
export interface CreateTestRegistryOptions {
|
|
11
11
|
readonly initial?: readonly UploadResult[];
|
|
12
12
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/testing/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/testing/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAEX,aAAa,EACb,aAAa,EACb,YAAY,EACZ,MAAM,mBAAmB,CAAC;AAG3B,MAAM,WAAW,yBAAyB;IACzC,QAAQ,CAAC,OAAO,CAAC,EAAE,SAAS,YAAY,EAAE,CAAC;CAC3C;AAED,wBAAgB,kBAAkB,CACjC,OAAO,GAAE,yBAA8B,GACrC,aAAa,CAMf;AAED,MAAM,WAAW,mBAAmB;IACnC;;;;;OAKG;IACH,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;CAClD;AAED,wBAAgB,YAAY,CAAC,OAAO,GAAE,mBAAwB,GAAG,aAAa,CAkB7E"}
|
package/dist/testing/index.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { createAssetRegistry } from "../registry.js";
|
|
1
|
+
import { createAssetRegistry } from "../utils/registry.js";
|
|
2
2
|
function createTestRegistry(options = {}) {
|
|
3
3
|
const registry = createAssetRegistry();
|
|
4
4
|
for (const entry of options.initial ?? [])registry.register(entry);
|
|
@@ -31,7 +31,15 @@ export interface UploadResult {
|
|
|
31
31
|
*/
|
|
32
32
|
readonly tags?: readonly string[];
|
|
33
33
|
}
|
|
34
|
-
|
|
34
|
+
/**
|
|
35
|
+
* Options passed to an {@link UploadAdapter}. Currently carries an
|
|
36
|
+
* optional `AbortSignal` so a cancelled upload batch can short-circuit
|
|
37
|
+
* the adapter (network request, image decode). Adapters may ignore it.
|
|
38
|
+
*/
|
|
39
|
+
export interface UploadAdapterOptions {
|
|
40
|
+
readonly signal?: AbortSignal;
|
|
41
|
+
}
|
|
42
|
+
export type UploadAdapter = (file: File, options?: UploadAdapterOptions) => Promise<UploadResult>;
|
|
35
43
|
export interface AssetManagerOptions {
|
|
36
44
|
readonly uploader: UploadAdapter;
|
|
37
45
|
readonly maxFileSize?: number;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.cts","sourceRoot":"","sources":["../../src/types/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -31,7 +31,15 @@ export interface UploadResult {
|
|
|
31
31
|
*/
|
|
32
32
|
readonly tags?: readonly string[];
|
|
33
33
|
}
|
|
34
|
-
|
|
34
|
+
/**
|
|
35
|
+
* Options passed to an {@link UploadAdapter}. Currently carries an
|
|
36
|
+
* optional `AbortSignal` so a cancelled upload batch can short-circuit
|
|
37
|
+
* the adapter (network request, image decode). Adapters may ignore it.
|
|
38
|
+
*/
|
|
39
|
+
export interface UploadAdapterOptions {
|
|
40
|
+
readonly signal?: AbortSignal;
|
|
41
|
+
}
|
|
42
|
+
export type UploadAdapter = (file: File, options?: UploadAdapterOptions) => Promise<UploadResult>;
|
|
35
43
|
export interface AssetManagerOptions {
|
|
36
44
|
readonly uploader: UploadAdapter;
|
|
37
45
|
readonly maxFileSize?: number;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/types/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { };
|
package/dist/ui/AssetBrowser.cjs
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
"use client";
|
|
2
3
|
var __webpack_require__ = {};
|
|
3
4
|
(()=>{
|
|
4
5
|
__webpack_require__.d = (exports1, definition)=>{
|
|
@@ -29,7 +30,8 @@ __webpack_require__.d(__webpack_exports__, {
|
|
|
29
30
|
const card_namespaceObject = require("@anvilkit/ui/card");
|
|
30
31
|
const input_namespaceObject = require("@anvilkit/ui/input");
|
|
31
32
|
const external_react_namespaceObject = require("react");
|
|
32
|
-
const
|
|
33
|
+
const external_react_dom_namespaceObject = require("react-dom");
|
|
34
|
+
const infer_kind_cjs_namespaceObject = require("../utils/infer-kind.cjs");
|
|
33
35
|
const KIND_FILTERS = [
|
|
34
36
|
"image",
|
|
35
37
|
"video",
|
|
@@ -50,22 +52,40 @@ function AssetBrowser({ assets, onInsert, onDelete, onReplace, onEdit, searchEna
|
|
|
50
52
|
const [pageLimit, setPageLimit] = external_react_namespaceObject.useState(pageSize);
|
|
51
53
|
const buttonRefs = external_react_namespaceObject.useRef([]);
|
|
52
54
|
const scrollContainerRef = external_react_namespaceObject.useRef(null);
|
|
55
|
+
const scrollFrameRef = external_react_namespaceObject.useRef(null);
|
|
56
|
+
const pendingScrollTopRef = external_react_namespaceObject.useRef(0);
|
|
57
|
+
external_react_namespaceObject.useEffect(()=>()=>{
|
|
58
|
+
if (null !== scrollFrameRef.current && "function" == typeof cancelAnimationFrame) cancelAnimationFrame(scrollFrameRef.current);
|
|
59
|
+
}, []);
|
|
60
|
+
const searchIndex = external_react_namespaceObject.useMemo(()=>{
|
|
61
|
+
if (!searchEnabled) return null;
|
|
62
|
+
return assets.map((asset)=>({
|
|
63
|
+
asset,
|
|
64
|
+
kind: (0, infer_kind_cjs_namespaceObject.inferAssetKind)(asset),
|
|
65
|
+
haystack: [
|
|
66
|
+
asset.id,
|
|
67
|
+
asset.name ?? "",
|
|
68
|
+
asset.meta?.mimeType ?? "",
|
|
69
|
+
...asset.tags ?? []
|
|
70
|
+
].join("\u0000").toLowerCase()
|
|
71
|
+
}));
|
|
72
|
+
}, [
|
|
73
|
+
assets,
|
|
74
|
+
searchEnabled
|
|
75
|
+
]);
|
|
53
76
|
const filteredAssets = external_react_namespaceObject.useMemo(()=>{
|
|
54
|
-
if (!searchEnabled) return assets;
|
|
77
|
+
if (!searchEnabled || null === searchIndex) return assets;
|
|
55
78
|
const lower = query.trim().toLowerCase();
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
if ("" === lower)
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
if (asset.meta?.mimeType?.toLowerCase().includes(lower)) return true;
|
|
64
|
-
if (asset.tags?.some((tag)=>tag.toLowerCase().includes(lower))) return true;
|
|
65
|
-
return false;
|
|
66
|
-
});
|
|
79
|
+
const hasKindFilter = activeKinds.length > 0;
|
|
80
|
+
if ("" === lower && !hasKindFilter) return assets;
|
|
81
|
+
const result = [];
|
|
82
|
+
for (const entry of searchIndex)if (!hasKindFilter || activeKinds.includes(entry.kind)) {
|
|
83
|
+
if ("" === lower || entry.haystack.includes(lower)) result.push(entry.asset);
|
|
84
|
+
}
|
|
85
|
+
return result;
|
|
67
86
|
}, [
|
|
68
87
|
assets,
|
|
88
|
+
searchIndex,
|
|
69
89
|
activeKinds,
|
|
70
90
|
query,
|
|
71
91
|
searchEnabled
|
|
@@ -87,19 +107,27 @@ function AssetBrowser({ assets, onInsert, onDelete, onReplace, onEdit, searchEna
|
|
|
87
107
|
function moveFocus(nextIndex) {
|
|
88
108
|
if (0 === total) return;
|
|
89
109
|
const clampedIndex = Math.max(0, Math.min(nextIndex, total - 1));
|
|
90
|
-
setActiveIndex(clampedIndex);
|
|
91
110
|
if (isVirtualized && scrollContainerRef.current) {
|
|
92
111
|
const targetTop = clampedIndex * itemHeight;
|
|
93
112
|
const targetBottom = targetTop + itemHeight;
|
|
94
113
|
const viewTop = scrollContainerRef.current.scrollTop;
|
|
95
|
-
|
|
96
|
-
if (targetTop < viewTop)
|
|
97
|
-
else if (targetBottom >
|
|
98
|
-
|
|
99
|
-
|
|
114
|
+
let nextScrollTop = viewTop;
|
|
115
|
+
if (targetTop < viewTop) nextScrollTop = targetTop;
|
|
116
|
+
else if (targetBottom > viewTop + maxHeight) nextScrollTop = targetBottom - maxHeight;
|
|
117
|
+
if (null !== scrollFrameRef.current && "function" == typeof cancelAnimationFrame) {
|
|
118
|
+
cancelAnimationFrame(scrollFrameRef.current);
|
|
119
|
+
scrollFrameRef.current = null;
|
|
120
|
+
}
|
|
121
|
+
pendingScrollTopRef.current = nextScrollTop;
|
|
122
|
+
(0, external_react_dom_namespaceObject.flushSync)(()=>{
|
|
123
|
+
setActiveIndex(clampedIndex);
|
|
124
|
+
setScrollTop(nextScrollTop);
|
|
100
125
|
});
|
|
126
|
+
scrollContainerRef.current.scrollTop = nextScrollTop;
|
|
127
|
+
buttonRefs.current[clampedIndex]?.focus();
|
|
101
128
|
return;
|
|
102
129
|
}
|
|
130
|
+
setActiveIndex(clampedIndex);
|
|
103
131
|
buttonRefs.current[clampedIndex]?.focus();
|
|
104
132
|
}
|
|
105
133
|
function toggleKind(kind) {
|
|
@@ -230,7 +258,14 @@ function AssetBrowser({ assets, onInsert, onDelete, onReplace, onEdit, searchEna
|
|
|
230
258
|
return /*#__PURE__*/ external_react_namespaceObject.createElement(card_namespaceObject.Card, null, /*#__PURE__*/ external_react_namespaceObject.createElement(card_namespaceObject.CardHeader, null, /*#__PURE__*/ external_react_namespaceObject.createElement(card_namespaceObject.CardTitle, null, "Asset browser"), /*#__PURE__*/ external_react_namespaceObject.createElement(card_namespaceObject.CardDescription, null, "Validated assets currently registered in memory.")), /*#__PURE__*/ external_react_namespaceObject.createElement(card_namespaceObject.CardContent, null, filterRow, /*#__PURE__*/ external_react_namespaceObject.createElement("div", {
|
|
231
259
|
"data-asset-manager-virtual": true,
|
|
232
260
|
onScroll: (event)=>{
|
|
233
|
-
|
|
261
|
+
const next = event.currentTarget.scrollTop;
|
|
262
|
+
if ("function" != typeof requestAnimationFrame) return void setScrollTop(next);
|
|
263
|
+
pendingScrollTopRef.current = next;
|
|
264
|
+
if (null !== scrollFrameRef.current) return;
|
|
265
|
+
scrollFrameRef.current = requestAnimationFrame(()=>{
|
|
266
|
+
scrollFrameRef.current = null;
|
|
267
|
+
setScrollTop(pendingScrollTopRef.current);
|
|
268
|
+
});
|
|
234
269
|
},
|
|
235
270
|
ref: scrollContainerRef,
|
|
236
271
|
style: {
|