@anvilkit/plugin-asset-manager 0.1.5 → 0.1.7

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.
Files changed (224) hide show
  1. package/README.md +27 -19
  2. package/dist/adapters/data-url.cjs +9 -5
  3. package/dist/adapters/extract-image-dimensions.cjs +12 -8
  4. package/dist/adapters/in-memory.cjs +9 -5
  5. package/dist/adapters/s3-presigned.cjs +9 -5
  6. package/dist/index.cjs +16 -5
  7. package/dist/index.d.cts +11 -3
  8. package/dist/index.d.cts.map +1 -1
  9. package/dist/index.d.ts +11 -3
  10. package/dist/index.d.ts.map +1 -1
  11. package/dist/index.js +2 -1
  12. package/dist/plugin.cjs +76 -9
  13. package/dist/plugin.d.cts +3 -2
  14. package/dist/plugin.d.cts.map +1 -1
  15. package/dist/plugin.d.ts +3 -2
  16. package/dist/plugin.d.ts.map +1 -1
  17. package/dist/plugin.js +67 -4
  18. package/dist/sources/composite-source.cjs +137 -0
  19. package/dist/sources/composite-source.d.cts +39 -0
  20. package/dist/sources/composite-source.d.cts.map +1 -0
  21. package/dist/sources/composite-source.d.ts +39 -0
  22. package/dist/sources/composite-source.d.ts.map +1 -0
  23. package/dist/sources/composite-source.js +99 -0
  24. package/dist/sources/federated-search.cjs +163 -0
  25. package/dist/sources/federated-search.d.cts +33 -0
  26. package/dist/sources/federated-search.d.cts.map +1 -0
  27. package/dist/sources/federated-search.d.ts +33 -0
  28. package/dist/sources/federated-search.d.ts.map +1 -0
  29. package/dist/sources/federated-search.js +113 -0
  30. package/dist/sources/provider.cjs +18 -0
  31. package/dist/sources/provider.d.cts +51 -0
  32. package/dist/sources/provider.d.cts.map +1 -0
  33. package/dist/sources/provider.d.ts +51 -0
  34. package/dist/sources/provider.d.ts.map +1 -0
  35. package/dist/sources/provider.js +1 -0
  36. package/dist/sources/unsplash/client.cjs +189 -0
  37. package/dist/sources/unsplash/client.d.cts +87 -0
  38. package/dist/sources/unsplash/client.d.cts.map +1 -0
  39. package/dist/sources/unsplash/client.d.ts +87 -0
  40. package/dist/sources/unsplash/client.d.ts.map +1 -0
  41. package/dist/sources/unsplash/client.js +151 -0
  42. package/dist/sources/unsplash/index.cjs +192 -0
  43. package/dist/sources/unsplash/index.d.cts +16 -0
  44. package/dist/sources/unsplash/index.d.cts.map +1 -0
  45. package/dist/sources/unsplash/index.d.ts +16 -0
  46. package/dist/sources/unsplash/index.d.ts.map +1 -0
  47. package/dist/sources/unsplash/index.js +148 -0
  48. package/dist/sources/unsplash/themes.cjs +141 -0
  49. package/dist/sources/unsplash/themes.d.cts +18 -0
  50. package/dist/sources/unsplash/themes.d.cts.map +1 -0
  51. package/dist/sources/unsplash/themes.d.ts +18 -0
  52. package/dist/sources/unsplash/themes.d.ts.map +1 -0
  53. package/dist/sources/unsplash/themes.js +93 -0
  54. package/dist/sources/unsplash/throttle-cache.cjs +86 -0
  55. package/dist/sources/unsplash/throttle-cache.d.cts +25 -0
  56. package/dist/sources/unsplash/throttle-cache.d.cts.map +1 -0
  57. package/dist/sources/unsplash/throttle-cache.d.ts +25 -0
  58. package/dist/sources/unsplash/throttle-cache.d.ts.map +1 -0
  59. package/dist/sources/unsplash/throttle-cache.js +45 -0
  60. package/dist/testing/index.cjs +9 -5
  61. package/dist/types/categories.cjs +18 -0
  62. package/dist/types/categories.d.cts +48 -0
  63. package/dist/types/categories.d.cts.map +1 -0
  64. package/dist/types/categories.d.ts +48 -0
  65. package/dist/types/categories.d.ts.map +1 -0
  66. package/dist/types/categories.js +1 -0
  67. package/dist/types/data-source.cjs +18 -0
  68. package/dist/types/data-source.d.cts +59 -0
  69. package/dist/types/data-source.d.cts.map +1 -0
  70. package/dist/types/data-source.d.ts +59 -0
  71. package/dist/types/data-source.d.ts.map +1 -0
  72. package/dist/types/data-source.js +1 -0
  73. package/dist/types/filter.cjs +18 -0
  74. package/dist/types/filter.d.cts +55 -0
  75. package/dist/types/filter.d.cts.map +1 -0
  76. package/dist/types/filter.d.ts +55 -0
  77. package/dist/types/filter.d.ts.map +1 -0
  78. package/dist/types/filter.js +1 -0
  79. package/dist/types/folders.cjs +42 -0
  80. package/dist/types/folders.d.cts +46 -0
  81. package/dist/types/folders.d.cts.map +1 -0
  82. package/dist/types/folders.d.ts +46 -0
  83. package/dist/types/folders.d.ts.map +1 -0
  84. package/dist/types/folders.js +4 -0
  85. package/dist/types/options.cjs +18 -0
  86. package/dist/types/options.d.cts +68 -0
  87. package/dist/types/options.d.cts.map +1 -0
  88. package/dist/types/options.d.ts +68 -0
  89. package/dist/types/options.d.ts.map +1 -0
  90. package/dist/types/options.js +1 -0
  91. package/dist/types/types.d.cts +15 -27
  92. package/dist/types/types.d.cts.map +1 -1
  93. package/dist/types/types.d.ts +15 -27
  94. package/dist/types/types.d.ts.map +1 -1
  95. package/dist/types/unsplash.cjs +18 -0
  96. package/dist/types/unsplash.d.cts +60 -0
  97. package/dist/types/unsplash.d.cts.map +1 -0
  98. package/dist/types/unsplash.d.ts +60 -0
  99. package/dist/types/unsplash.d.ts.map +1 -0
  100. package/dist/types/unsplash.js +1 -0
  101. package/dist/ui/AssetBrowser.cjs +69 -104
  102. package/dist/ui/AssetBrowser.d.cts +17 -7
  103. package/dist/ui/AssetBrowser.d.cts.map +1 -1
  104. package/dist/ui/AssetBrowser.d.ts +17 -7
  105. package/dist/ui/AssetBrowser.d.ts.map +1 -1
  106. package/dist/ui/AssetBrowser.js +60 -99
  107. package/dist/ui/AssetCommandPalette.cjs +9 -5
  108. package/dist/ui/AssetManagerUI.cjs +17 -7
  109. package/dist/ui/AssetManagerUI.d.cts +19 -3
  110. package/dist/ui/AssetManagerUI.d.cts.map +1 -1
  111. package/dist/ui/AssetManagerUI.d.ts +19 -3
  112. package/dist/ui/AssetManagerUI.d.ts.map +1 -1
  113. package/dist/ui/AssetManagerUI.js +8 -2
  114. package/dist/ui/DeleteAssetDialog.cjs +9 -5
  115. package/dist/ui/DeleteFolderDialog.cjs +78 -0
  116. package/dist/ui/DeleteFolderDialog.d.cts +11 -0
  117. package/dist/ui/DeleteFolderDialog.d.cts.map +1 -0
  118. package/dist/ui/DeleteFolderDialog.d.ts +11 -0
  119. package/dist/ui/DeleteFolderDialog.d.ts.map +1 -0
  120. package/dist/ui/DeleteFolderDialog.js +40 -0
  121. package/dist/ui/EmptyFolderState.cjs +53 -0
  122. package/dist/ui/EmptyFolderState.d.cts +6 -0
  123. package/dist/ui/EmptyFolderState.d.cts.map +1 -0
  124. package/dist/ui/EmptyFolderState.d.ts +6 -0
  125. package/dist/ui/EmptyFolderState.d.ts.map +1 -0
  126. package/dist/ui/EmptyFolderState.js +15 -0
  127. package/dist/ui/FolderBreadcrumb.cjs +73 -0
  128. package/dist/ui/FolderBreadcrumb.d.cts +9 -0
  129. package/dist/ui/FolderBreadcrumb.d.cts.map +1 -0
  130. package/dist/ui/FolderBreadcrumb.d.ts +9 -0
  131. package/dist/ui/FolderBreadcrumb.d.ts.map +1 -0
  132. package/dist/ui/FolderBreadcrumb.js +35 -0
  133. package/dist/ui/FolderNameDialog.cjs +98 -0
  134. package/dist/ui/FolderNameDialog.d.cts +14 -0
  135. package/dist/ui/FolderNameDialog.d.cts.map +1 -0
  136. package/dist/ui/FolderNameDialog.d.ts +14 -0
  137. package/dist/ui/FolderNameDialog.d.ts.map +1 -0
  138. package/dist/ui/FolderNameDialog.js +60 -0
  139. package/dist/ui/FolderTree.cjs +83 -0
  140. package/dist/ui/FolderTree.d.cts +13 -0
  141. package/dist/ui/FolderTree.d.cts.map +1 -0
  142. package/dist/ui/FolderTree.d.ts +13 -0
  143. package/dist/ui/FolderTree.d.ts.map +1 -0
  144. package/dist/ui/FolderTree.js +42 -0
  145. package/dist/ui/MetadataPanel.cjs +16 -9
  146. package/dist/ui/MetadataPanel.d.cts.map +1 -1
  147. package/dist/ui/MetadataPanel.d.ts.map +1 -1
  148. package/dist/ui/MetadataPanel.js +7 -4
  149. package/dist/ui/MoveTargetPicker.cjs +84 -0
  150. package/dist/ui/MoveTargetPicker.d.cts +16 -0
  151. package/dist/ui/MoveTargetPicker.d.cts.map +1 -0
  152. package/dist/ui/MoveTargetPicker.d.ts +16 -0
  153. package/dist/ui/MoveTargetPicker.d.ts.map +1 -0
  154. package/dist/ui/MoveTargetPicker.js +46 -0
  155. package/dist/ui/ReplaceAssetDialog.cjs +9 -5
  156. package/dist/ui/ReplaceAssetDialog.d.cts +2 -1
  157. package/dist/ui/ReplaceAssetDialog.d.cts.map +1 -1
  158. package/dist/ui/ReplaceAssetDialog.d.ts +2 -1
  159. package/dist/ui/ReplaceAssetDialog.d.ts.map +1 -1
  160. package/dist/ui/UnsplashPanel.cjs +134 -0
  161. package/dist/ui/UnsplashPanel.d.cts +28 -0
  162. package/dist/ui/UnsplashPanel.d.cts.map +1 -0
  163. package/dist/ui/UnsplashPanel.d.ts +28 -0
  164. package/dist/ui/UnsplashPanel.d.ts.map +1 -0
  165. package/dist/ui/UnsplashPanel.js +96 -0
  166. package/dist/ui/UploadButton.cjs +10 -10
  167. package/dist/ui/UploadButton.d.cts +9 -2
  168. package/dist/ui/UploadButton.d.cts.map +1 -1
  169. package/dist/ui/UploadButton.d.ts +9 -2
  170. package/dist/ui/UploadButton.d.ts.map +1 -1
  171. package/dist/ui/UploadButton.js +1 -5
  172. package/dist/ui/index.cjs +46 -5
  173. package/dist/ui/index.d.cts +14 -0
  174. package/dist/ui/index.d.cts.map +1 -1
  175. package/dist/ui/index.d.ts +14 -0
  176. package/dist/ui/index.d.ts.map +1 -1
  177. package/dist/ui/index.js +7 -0
  178. package/dist/utils/asset-reference.cjs +12 -8
  179. package/dist/utils/csp.cjs +12 -8
  180. package/dist/utils/data-source.cjs +177 -0
  181. package/dist/utils/data-source.d.cts +63 -0
  182. package/dist/utils/data-source.d.cts.map +1 -0
  183. package/dist/utils/data-source.d.ts +63 -0
  184. package/dist/utils/data-source.d.ts.map +1 -0
  185. package/dist/utils/data-source.js +136 -0
  186. package/dist/utils/errors.cjs +31 -9
  187. package/dist/utils/errors.d.cts +27 -0
  188. package/dist/utils/errors.d.cts.map +1 -1
  189. package/dist/utils/errors.d.ts +27 -0
  190. package/dist/utils/errors.d.ts.map +1 -1
  191. package/dist/utils/errors.js +16 -1
  192. package/dist/utils/folders.cjs +261 -0
  193. package/dist/utils/folders.d.cts +49 -0
  194. package/dist/utils/folders.d.cts.map +1 -0
  195. package/dist/utils/folders.d.ts +49 -0
  196. package/dist/utils/folders.d.ts.map +1 -0
  197. package/dist/utils/folders.js +223 -0
  198. package/dist/utils/header-action.cjs +12 -8
  199. package/dist/utils/infer-kind.cjs +12 -8
  200. package/dist/utils/registry.cjs +36 -17
  201. package/dist/utils/registry.d.cts +21 -1
  202. package/dist/utils/registry.d.cts.map +1 -1
  203. package/dist/utils/registry.d.ts +21 -1
  204. package/dist/utils/registry.d.ts.map +1 -1
  205. package/dist/utils/registry.js +20 -11
  206. package/dist/utils/resolver.cjs +9 -5
  207. package/dist/utils/retry.cjs +13 -9
  208. package/dist/utils/studio-asset-source.cjs +14 -7
  209. package/dist/utils/studio-asset-source.d.cts +6 -1
  210. package/dist/utils/studio-asset-source.d.cts.map +1 -1
  211. package/dist/utils/studio-asset-source.d.ts +6 -1
  212. package/dist/utils/studio-asset-source.d.ts.map +1 -1
  213. package/dist/utils/studio-asset-source.js +1 -1
  214. package/dist/utils/validate-upload-result.cjs +9 -5
  215. package/dist/utils/validate-upload-result.d.cts +2 -1
  216. package/dist/utils/validate-upload-result.d.cts.map +1 -1
  217. package/dist/utils/validate-upload-result.d.ts +2 -1
  218. package/dist/utils/validate-upload-result.d.ts.map +1 -1
  219. package/dist/version.cjs +12 -8
  220. package/dist/version.d.cts +1 -1
  221. package/dist/version.d.ts +1 -1
  222. package/dist/version.js +1 -1
  223. package/meta/config.json +1 -1
  224. package/package.json +19 -9
@@ -0,0 +1,261 @@
1
+ "use strict";
2
+ var __webpack_require__ = {};
3
+ (()=>{
4
+ __webpack_require__.d = (exports1, getters, values)=>{
5
+ var define = (defs, kind)=>{
6
+ for(var key in defs)if (__webpack_require__.o(defs, key) && !__webpack_require__.o(exports1, key)) Object.defineProperty(exports1, key, {
7
+ enumerable: true,
8
+ [kind]: defs[key]
9
+ });
10
+ };
11
+ define(getters, "get");
12
+ define(values, "value");
13
+ };
14
+ })();
15
+ (()=>{
16
+ __webpack_require__.o = (obj, prop)=>Object.prototype.hasOwnProperty.call(obj, prop);
17
+ })();
18
+ (()=>{
19
+ __webpack_require__.r = (exports1)=>{
20
+ if ("u" > typeof Symbol && Symbol.toStringTag) Object.defineProperty(exports1, Symbol.toStringTag, {
21
+ value: 'Module'
22
+ });
23
+ Object.defineProperty(exports1, '__esModule', {
24
+ value: true
25
+ });
26
+ };
27
+ })();
28
+ var __webpack_exports__ = {};
29
+ __webpack_require__.r(__webpack_exports__);
30
+ __webpack_require__.d(__webpack_exports__, {
31
+ createFolderStore: ()=>createFolderStore
32
+ });
33
+ const folders_cjs_namespaceObject = require("../types/folders.cjs");
34
+ const external_errors_cjs_namespaceObject = require("./errors.cjs");
35
+ function createFolderStore(options = {}) {
36
+ const now = options.now ?? (()=>Date.now());
37
+ const records = new Map();
38
+ const assetFolder = new Map();
39
+ const listeners = new Set();
40
+ let seq = 0;
41
+ const notify = ()=>{
42
+ for (const listener of listeners)listener();
43
+ };
44
+ const requireRecord = (id)=>{
45
+ const rec = records.get(id);
46
+ if (void 0 === rec) throw new external_errors_cjs_namespaceObject.AssetSourceError("FOLDER_NOT_FOUND", `Unknown folder "${id}".`);
47
+ return rec;
48
+ };
49
+ const childFolderCount = (id)=>{
50
+ let n = 0;
51
+ for (const rec of records.values())if (rec.parentId === id) n += 1;
52
+ return n;
53
+ };
54
+ const directAssetCount = (id)=>{
55
+ let n = 0;
56
+ for (const folderId of assetFolder.values())if (folderId === id) n += 1;
57
+ return n;
58
+ };
59
+ const project = (rec)=>Object.freeze({
60
+ id: rec.id,
61
+ name: rec.name,
62
+ parentId: rec.parentId,
63
+ createdAt: rec.createdAt,
64
+ updatedAt: rec.updatedAt,
65
+ counts: Object.freeze({
66
+ assets: directAssetCount(rec.id),
67
+ folders: childFolderCount(rec.id)
68
+ })
69
+ });
70
+ const depthOf = (id)=>{
71
+ let depth = 0;
72
+ let cursor = id;
73
+ while(null !== cursor){
74
+ const rec = records.get(cursor);
75
+ if (void 0 === rec) break;
76
+ depth += 1;
77
+ cursor = rec.parentId;
78
+ }
79
+ return depth;
80
+ };
81
+ const subtree = (id)=>{
82
+ const out = new Set([
83
+ id
84
+ ]);
85
+ let added = true;
86
+ while(added){
87
+ added = false;
88
+ for (const rec of records.values())if (null !== rec.parentId && out.has(rec.parentId) && !out.has(rec.id)) {
89
+ out.add(rec.id);
90
+ added = true;
91
+ }
92
+ }
93
+ return out;
94
+ };
95
+ const heightOf = (id)=>{
96
+ let height = 0;
97
+ const ids = subtree(id);
98
+ for (const fid of ids){
99
+ const d = depthOf(fid) - depthOf(id);
100
+ if (d > height) height = d;
101
+ }
102
+ return height;
103
+ };
104
+ const assertNameFree = (parentId, name, exceptId)=>{
105
+ const lowered = name.toLowerCase();
106
+ for (const rec of records.values())if (rec.parentId === parentId) {
107
+ if (rec.id !== exceptId) {
108
+ if (rec.name.toLowerCase() === lowered) throw new external_errors_cjs_namespaceObject.AssetSourceError("FOLDER_NAME_CONFLICT", `A folder named "${name}" already exists here.`);
109
+ }
110
+ }
111
+ };
112
+ const normalizeName = (name)=>{
113
+ const trimmed = name.trim();
114
+ if ("" === trimmed) throw new external_errors_cjs_namespaceObject.AssetSourceError("FOLDER_NAME_CONFLICT", "Folder name must not be empty.");
115
+ return trimmed;
116
+ };
117
+ const assertDepthOk = (parentDepth, extraHeight, maxDepth)=>{
118
+ if (void 0 === maxDepth) return;
119
+ if (parentDepth + 1 + extraHeight > maxDepth) throw new external_errors_cjs_namespaceObject.AssetSourceError("MOVE_REJECTED", `Operation would exceed the maximum folder depth of ${maxDepth}.`);
120
+ };
121
+ return {
122
+ listChildren (parentId) {
123
+ const target = (0, folders_cjs_namespaceObject.resolveFolderId)(parentId);
124
+ const out = [];
125
+ for (const rec of records.values())if (rec.parentId === target) out.push(project(rec));
126
+ return Object.freeze(out);
127
+ },
128
+ listAll () {
129
+ return Object.freeze([
130
+ ...records.values()
131
+ ].map(project));
132
+ },
133
+ get (id) {
134
+ const rec = records.get(id);
135
+ return void 0 === rec ? void 0 : project(rec);
136
+ },
137
+ path (id) {
138
+ const target = (0, folders_cjs_namespaceObject.resolveFolderId)(id);
139
+ if (null === target) return Object.freeze([]);
140
+ const chain = [];
141
+ let cursor = target;
142
+ const seen = new Set();
143
+ while(null !== cursor){
144
+ if (seen.has(cursor)) break;
145
+ seen.add(cursor);
146
+ const rec = records.get(cursor);
147
+ if (void 0 === rec) break;
148
+ chain.unshift(project(rec));
149
+ cursor = rec.parentId;
150
+ }
151
+ return Object.freeze(chain);
152
+ },
153
+ createFolder (parentId, name, maxDepth) {
154
+ const target = (0, folders_cjs_namespaceObject.resolveFolderId)(parentId);
155
+ if (null !== target) requireRecord(target);
156
+ const clean = normalizeName(name);
157
+ assertNameFree(target, clean);
158
+ assertDepthOk(depthOf(target), 0, maxDepth);
159
+ const ts = now();
160
+ const rec = {
161
+ id: `folder-${seq += 1}`,
162
+ name: clean,
163
+ parentId: target,
164
+ createdAt: ts,
165
+ updatedAt: ts
166
+ };
167
+ records.set(rec.id, rec);
168
+ notify();
169
+ return project(rec);
170
+ },
171
+ renameFolder (id, name) {
172
+ const rec = requireRecord(id);
173
+ const clean = normalizeName(name);
174
+ assertNameFree(rec.parentId, clean, id);
175
+ rec.name = clean;
176
+ rec.updatedAt = now();
177
+ notify();
178
+ return project(rec);
179
+ },
180
+ moveFolder (id, parentId, maxDepth) {
181
+ const rec = requireRecord(id);
182
+ const target = (0, folders_cjs_namespaceObject.resolveFolderId)(parentId);
183
+ if (target === id) throw new external_errors_cjs_namespaceObject.AssetSourceError("FOLDER_CYCLE", "A folder cannot be moved into itself.");
184
+ if (null !== target) {
185
+ requireRecord(target);
186
+ if (subtree(id).has(target)) throw new external_errors_cjs_namespaceObject.AssetSourceError("FOLDER_CYCLE", "A folder cannot be moved into one of its own descendants.");
187
+ }
188
+ if (rec.parentId === target) return project(rec);
189
+ assertNameFree(target, rec.name, id);
190
+ assertDepthOk(depthOf(target), heightOf(id), maxDepth);
191
+ rec.parentId = target;
192
+ rec.updatedAt = now();
193
+ notify();
194
+ return project(rec);
195
+ },
196
+ removeFolder (id, opts) {
197
+ const rec = requireRecord(id);
198
+ if (opts?.cascade) {
199
+ const ids = subtree(id);
200
+ const removedAssetIds = [];
201
+ for (const [assetId, folderId] of assetFolder)if (ids.has(folderId)) {
202
+ removedAssetIds.push(assetId);
203
+ assetFolder.delete(assetId);
204
+ }
205
+ for (const fid of ids)records.delete(fid);
206
+ notify();
207
+ return {
208
+ removedAssetIds: Object.freeze(removedAssetIds)
209
+ };
210
+ }
211
+ const newParent = rec.parentId;
212
+ for (const child of records.values())if (child.parentId === id) {
213
+ child.parentId = newParent;
214
+ child.updatedAt = now();
215
+ }
216
+ for (const [assetId, folderId] of assetFolder)if (folderId === id) if (null === newParent) assetFolder.delete(assetId);
217
+ else assetFolder.set(assetId, newParent);
218
+ records.delete(id);
219
+ notify();
220
+ return {
221
+ removedAssetIds: Object.freeze([])
222
+ };
223
+ },
224
+ folderOf (assetId) {
225
+ return assetFolder.get(assetId) ?? null;
226
+ },
227
+ moveAsset (assetId, folderId) {
228
+ const target = (0, folders_cjs_namespaceObject.resolveFolderId)(folderId);
229
+ if (null !== target) requireRecord(target);
230
+ if (null === target) assetFolder.delete(assetId);
231
+ else assetFolder.set(assetId, target);
232
+ notify();
233
+ },
234
+ moveAssets (assetIds, folderId) {
235
+ const target = (0, folders_cjs_namespaceObject.resolveFolderId)(folderId);
236
+ if (null !== target) requireRecord(target);
237
+ for (const assetId of assetIds)if (null === target) assetFolder.delete(assetId);
238
+ else assetFolder.set(assetId, target);
239
+ notify();
240
+ },
241
+ removeAsset (assetId) {
242
+ if (assetFolder.delete(assetId)) notify();
243
+ },
244
+ subtreeIds (id) {
245
+ return subtree(id);
246
+ },
247
+ subscribe (listener) {
248
+ listeners.add(listener);
249
+ return ()=>{
250
+ listeners.delete(listener);
251
+ };
252
+ }
253
+ };
254
+ }
255
+ exports.createFolderStore = __webpack_exports__.createFolderStore;
256
+ for(var __rspack_i in __webpack_exports__)if (-1 === [
257
+ "createFolderStore"
258
+ ].indexOf(__rspack_i)) exports[__rspack_i] = __webpack_exports__[__rspack_i];
259
+ Object.defineProperty(exports, '__esModule', {
260
+ value: true
261
+ });
@@ -0,0 +1,49 @@
1
+ /**
2
+ * @file In-memory folder store (PRD 0002 §7). Lazy-importable from the factory
3
+ * so flat callers pay zero headless bytes for it.
4
+ *
5
+ * Owns the folder tree (records) and the asset→folder side-index. Membership is
6
+ * stored ONLY for non-root assets (absence ⇒ root), so `UploadResult` is never
7
+ * extended and the registry's freeze reconstructor can't strip a folder field.
8
+ * `AssetFolder.counts` is computed fresh on read (never denormalized) so it can
9
+ * never drift from the side-index.
10
+ */
11
+ import type { AssetFolder, FolderId } from "../types/folders.js";
12
+ export interface CreateFolderStoreOptions {
13
+ /** Injectable clock for deterministic timestamps in tests. Defaults to `Date.now`. */
14
+ readonly now?: () => number;
15
+ }
16
+ export interface FolderStore {
17
+ /** Direct child folders of `parentId` (`null`/undefined ⇒ root's children). */
18
+ listChildren(parentId?: FolderId | null): readonly AssetFolder[];
19
+ /** All folders, flat. */
20
+ listAll(): readonly AssetFolder[];
21
+ get(id: FolderId): AssetFolder | undefined;
22
+ /** Root → … → `id` (inclusive). `[]` for root/undefined. */
23
+ path(id?: FolderId | null): readonly AssetFolder[];
24
+ createFolder(parentId: FolderId | null, name: string, maxDepth?: number): AssetFolder;
25
+ renameFolder(id: FolderId, name: string): AssetFolder;
26
+ moveFolder(id: FolderId, parentId: FolderId | null, maxDepth?: number): AssetFolder;
27
+ /**
28
+ * Remove a folder. Default policy reparents children (folders + assets) to
29
+ * the removed folder's parent; `{ cascade: true }` instead returns every
30
+ * descendant asset id for the caller to delete from the registry.
31
+ */
32
+ removeFolder(id: FolderId, opts?: {
33
+ readonly cascade?: boolean;
34
+ }): {
35
+ readonly removedAssetIds: readonly string[];
36
+ };
37
+ /** Owning folder of an asset (`null` ⇒ root). */
38
+ folderOf(assetId: string): FolderId | null;
39
+ moveAsset(assetId: string, folderId: FolderId | null): void;
40
+ /** Batch move — validates the target once (all-or-nothing) before applying. */
41
+ moveAssets(assetIds: readonly string[], folderId: FolderId | null): void;
42
+ /** Drop an asset's membership (call when the asset is deleted from the registry). */
43
+ removeAsset(assetId: string): void;
44
+ /** Folder id + every descendant folder id (for recursive listing). */
45
+ subtreeIds(id: FolderId): ReadonlySet<FolderId>;
46
+ subscribe(listener: () => void): () => void;
47
+ }
48
+ export declare function createFolderStore(options?: CreateFolderStoreOptions): FolderStore;
49
+ //# sourceMappingURL=folders.d.cts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"folders.d.cts","sourceRoot":"","sources":["../../src/utils/folders.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAYjE,MAAM,WAAW,wBAAwB;IACxC,sFAAsF;IACtF,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;CAC5B;AAED,MAAM,WAAW,WAAW;IAC3B,+EAA+E;IAC/E,YAAY,CAAC,QAAQ,CAAC,EAAE,QAAQ,GAAG,IAAI,GAAG,SAAS,WAAW,EAAE,CAAC;IACjE,yBAAyB;IACzB,OAAO,IAAI,SAAS,WAAW,EAAE,CAAC;IAClC,GAAG,CAAC,EAAE,EAAE,QAAQ,GAAG,WAAW,GAAG,SAAS,CAAC;IAC3C,4DAA4D;IAC5D,IAAI,CAAC,EAAE,CAAC,EAAE,QAAQ,GAAG,IAAI,GAAG,SAAS,WAAW,EAAE,CAAC;IAEnD,YAAY,CACX,QAAQ,EAAE,QAAQ,GAAG,IAAI,EACzB,IAAI,EAAE,MAAM,EACZ,QAAQ,CAAC,EAAE,MAAM,GACf,WAAW,CAAC;IACf,YAAY,CAAC,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,GAAG,WAAW,CAAC;IACtD,UAAU,CACT,EAAE,EAAE,QAAQ,EACZ,QAAQ,EAAE,QAAQ,GAAG,IAAI,EACzB,QAAQ,CAAC,EAAE,MAAM,GACf,WAAW,CAAC;IACf;;;;OAIG;IACH,YAAY,CACX,EAAE,EAAE,QAAQ,EACZ,IAAI,CAAC,EAAE;QAAE,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAA;KAAE,GACnC;QAAE,QAAQ,CAAC,eAAe,EAAE,SAAS,MAAM,EAAE,CAAA;KAAE,CAAC;IAEnD,iDAAiD;IACjD,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,QAAQ,GAAG,IAAI,CAAC;IAC3C,SAAS,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,GAAG,IAAI,GAAG,IAAI,CAAC;IAC5D,+EAA+E;IAC/E,UAAU,CAAC,QAAQ,EAAE,SAAS,MAAM,EAAE,EAAE,QAAQ,EAAE,QAAQ,GAAG,IAAI,GAAG,IAAI,CAAC;IACzE,qFAAqF;IACrF,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IAEnC,sEAAsE;IACtE,UAAU,CAAC,EAAE,EAAE,QAAQ,GAAG,WAAW,CAAC,QAAQ,CAAC,CAAC;IAEhD,SAAS,CAAC,QAAQ,EAAE,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC;CAC5C;AAED,wBAAgB,iBAAiB,CAChC,OAAO,GAAE,wBAA6B,GACpC,WAAW,CAsSb"}
@@ -0,0 +1,49 @@
1
+ /**
2
+ * @file In-memory folder store (PRD 0002 §7). Lazy-importable from the factory
3
+ * so flat callers pay zero headless bytes for it.
4
+ *
5
+ * Owns the folder tree (records) and the asset→folder side-index. Membership is
6
+ * stored ONLY for non-root assets (absence ⇒ root), so `UploadResult` is never
7
+ * extended and the registry's freeze reconstructor can't strip a folder field.
8
+ * `AssetFolder.counts` is computed fresh on read (never denormalized) so it can
9
+ * never drift from the side-index.
10
+ */
11
+ import type { AssetFolder, FolderId } from "../types/folders.js";
12
+ export interface CreateFolderStoreOptions {
13
+ /** Injectable clock for deterministic timestamps in tests. Defaults to `Date.now`. */
14
+ readonly now?: () => number;
15
+ }
16
+ export interface FolderStore {
17
+ /** Direct child folders of `parentId` (`null`/undefined ⇒ root's children). */
18
+ listChildren(parentId?: FolderId | null): readonly AssetFolder[];
19
+ /** All folders, flat. */
20
+ listAll(): readonly AssetFolder[];
21
+ get(id: FolderId): AssetFolder | undefined;
22
+ /** Root → … → `id` (inclusive). `[]` for root/undefined. */
23
+ path(id?: FolderId | null): readonly AssetFolder[];
24
+ createFolder(parentId: FolderId | null, name: string, maxDepth?: number): AssetFolder;
25
+ renameFolder(id: FolderId, name: string): AssetFolder;
26
+ moveFolder(id: FolderId, parentId: FolderId | null, maxDepth?: number): AssetFolder;
27
+ /**
28
+ * Remove a folder. Default policy reparents children (folders + assets) to
29
+ * the removed folder's parent; `{ cascade: true }` instead returns every
30
+ * descendant asset id for the caller to delete from the registry.
31
+ */
32
+ removeFolder(id: FolderId, opts?: {
33
+ readonly cascade?: boolean;
34
+ }): {
35
+ readonly removedAssetIds: readonly string[];
36
+ };
37
+ /** Owning folder of an asset (`null` ⇒ root). */
38
+ folderOf(assetId: string): FolderId | null;
39
+ moveAsset(assetId: string, folderId: FolderId | null): void;
40
+ /** Batch move — validates the target once (all-or-nothing) before applying. */
41
+ moveAssets(assetIds: readonly string[], folderId: FolderId | null): void;
42
+ /** Drop an asset's membership (call when the asset is deleted from the registry). */
43
+ removeAsset(assetId: string): void;
44
+ /** Folder id + every descendant folder id (for recursive listing). */
45
+ subtreeIds(id: FolderId): ReadonlySet<FolderId>;
46
+ subscribe(listener: () => void): () => void;
47
+ }
48
+ export declare function createFolderStore(options?: CreateFolderStoreOptions): FolderStore;
49
+ //# sourceMappingURL=folders.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"folders.d.ts","sourceRoot":"","sources":["../../src/utils/folders.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAYjE,MAAM,WAAW,wBAAwB;IACxC,sFAAsF;IACtF,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;CAC5B;AAED,MAAM,WAAW,WAAW;IAC3B,+EAA+E;IAC/E,YAAY,CAAC,QAAQ,CAAC,EAAE,QAAQ,GAAG,IAAI,GAAG,SAAS,WAAW,EAAE,CAAC;IACjE,yBAAyB;IACzB,OAAO,IAAI,SAAS,WAAW,EAAE,CAAC;IAClC,GAAG,CAAC,EAAE,EAAE,QAAQ,GAAG,WAAW,GAAG,SAAS,CAAC;IAC3C,4DAA4D;IAC5D,IAAI,CAAC,EAAE,CAAC,EAAE,QAAQ,GAAG,IAAI,GAAG,SAAS,WAAW,EAAE,CAAC;IAEnD,YAAY,CACX,QAAQ,EAAE,QAAQ,GAAG,IAAI,EACzB,IAAI,EAAE,MAAM,EACZ,QAAQ,CAAC,EAAE,MAAM,GACf,WAAW,CAAC;IACf,YAAY,CAAC,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,GAAG,WAAW,CAAC;IACtD,UAAU,CACT,EAAE,EAAE,QAAQ,EACZ,QAAQ,EAAE,QAAQ,GAAG,IAAI,EACzB,QAAQ,CAAC,EAAE,MAAM,GACf,WAAW,CAAC;IACf;;;;OAIG;IACH,YAAY,CACX,EAAE,EAAE,QAAQ,EACZ,IAAI,CAAC,EAAE;QAAE,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAA;KAAE,GACnC;QAAE,QAAQ,CAAC,eAAe,EAAE,SAAS,MAAM,EAAE,CAAA;KAAE,CAAC;IAEnD,iDAAiD;IACjD,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,QAAQ,GAAG,IAAI,CAAC;IAC3C,SAAS,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,GAAG,IAAI,GAAG,IAAI,CAAC;IAC5D,+EAA+E;IAC/E,UAAU,CAAC,QAAQ,EAAE,SAAS,MAAM,EAAE,EAAE,QAAQ,EAAE,QAAQ,GAAG,IAAI,GAAG,IAAI,CAAC;IACzE,qFAAqF;IACrF,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IAEnC,sEAAsE;IACtE,UAAU,CAAC,EAAE,EAAE,QAAQ,GAAG,WAAW,CAAC,QAAQ,CAAC,CAAC;IAEhD,SAAS,CAAC,QAAQ,EAAE,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC;CAC5C;AAED,wBAAgB,iBAAiB,CAChC,OAAO,GAAE,wBAA6B,GACpC,WAAW,CAsSb"}
@@ -0,0 +1,223 @@
1
+ import { resolveFolderId } from "../types/folders.js";
2
+ import { AssetSourceError } from "./errors.js";
3
+ function createFolderStore(options = {}) {
4
+ const now = options.now ?? (()=>Date.now());
5
+ const records = new Map();
6
+ const assetFolder = new Map();
7
+ const listeners = new Set();
8
+ let seq = 0;
9
+ const notify = ()=>{
10
+ for (const listener of listeners)listener();
11
+ };
12
+ const requireRecord = (id)=>{
13
+ const rec = records.get(id);
14
+ if (void 0 === rec) throw new AssetSourceError("FOLDER_NOT_FOUND", `Unknown folder "${id}".`);
15
+ return rec;
16
+ };
17
+ const childFolderCount = (id)=>{
18
+ let n = 0;
19
+ for (const rec of records.values())if (rec.parentId === id) n += 1;
20
+ return n;
21
+ };
22
+ const directAssetCount = (id)=>{
23
+ let n = 0;
24
+ for (const folderId of assetFolder.values())if (folderId === id) n += 1;
25
+ return n;
26
+ };
27
+ const project = (rec)=>Object.freeze({
28
+ id: rec.id,
29
+ name: rec.name,
30
+ parentId: rec.parentId,
31
+ createdAt: rec.createdAt,
32
+ updatedAt: rec.updatedAt,
33
+ counts: Object.freeze({
34
+ assets: directAssetCount(rec.id),
35
+ folders: childFolderCount(rec.id)
36
+ })
37
+ });
38
+ const depthOf = (id)=>{
39
+ let depth = 0;
40
+ let cursor = id;
41
+ while(null !== cursor){
42
+ const rec = records.get(cursor);
43
+ if (void 0 === rec) break;
44
+ depth += 1;
45
+ cursor = rec.parentId;
46
+ }
47
+ return depth;
48
+ };
49
+ const subtree = (id)=>{
50
+ const out = new Set([
51
+ id
52
+ ]);
53
+ let added = true;
54
+ while(added){
55
+ added = false;
56
+ for (const rec of records.values())if (null !== rec.parentId && out.has(rec.parentId) && !out.has(rec.id)) {
57
+ out.add(rec.id);
58
+ added = true;
59
+ }
60
+ }
61
+ return out;
62
+ };
63
+ const heightOf = (id)=>{
64
+ let height = 0;
65
+ const ids = subtree(id);
66
+ for (const fid of ids){
67
+ const d = depthOf(fid) - depthOf(id);
68
+ if (d > height) height = d;
69
+ }
70
+ return height;
71
+ };
72
+ const assertNameFree = (parentId, name, exceptId)=>{
73
+ const lowered = name.toLowerCase();
74
+ for (const rec of records.values())if (rec.parentId === parentId) {
75
+ if (rec.id !== exceptId) {
76
+ if (rec.name.toLowerCase() === lowered) throw new AssetSourceError("FOLDER_NAME_CONFLICT", `A folder named "${name}" already exists here.`);
77
+ }
78
+ }
79
+ };
80
+ const normalizeName = (name)=>{
81
+ const trimmed = name.trim();
82
+ if ("" === trimmed) throw new AssetSourceError("FOLDER_NAME_CONFLICT", "Folder name must not be empty.");
83
+ return trimmed;
84
+ };
85
+ const assertDepthOk = (parentDepth, extraHeight, maxDepth)=>{
86
+ if (void 0 === maxDepth) return;
87
+ if (parentDepth + 1 + extraHeight > maxDepth) throw new AssetSourceError("MOVE_REJECTED", `Operation would exceed the maximum folder depth of ${maxDepth}.`);
88
+ };
89
+ return {
90
+ listChildren (parentId) {
91
+ const target = resolveFolderId(parentId);
92
+ const out = [];
93
+ for (const rec of records.values())if (rec.parentId === target) out.push(project(rec));
94
+ return Object.freeze(out);
95
+ },
96
+ listAll () {
97
+ return Object.freeze([
98
+ ...records.values()
99
+ ].map(project));
100
+ },
101
+ get (id) {
102
+ const rec = records.get(id);
103
+ return void 0 === rec ? void 0 : project(rec);
104
+ },
105
+ path (id) {
106
+ const target = resolveFolderId(id);
107
+ if (null === target) return Object.freeze([]);
108
+ const chain = [];
109
+ let cursor = target;
110
+ const seen = new Set();
111
+ while(null !== cursor){
112
+ if (seen.has(cursor)) break;
113
+ seen.add(cursor);
114
+ const rec = records.get(cursor);
115
+ if (void 0 === rec) break;
116
+ chain.unshift(project(rec));
117
+ cursor = rec.parentId;
118
+ }
119
+ return Object.freeze(chain);
120
+ },
121
+ createFolder (parentId, name, maxDepth) {
122
+ const target = resolveFolderId(parentId);
123
+ if (null !== target) requireRecord(target);
124
+ const clean = normalizeName(name);
125
+ assertNameFree(target, clean);
126
+ assertDepthOk(depthOf(target), 0, maxDepth);
127
+ const ts = now();
128
+ const rec = {
129
+ id: `folder-${seq += 1}`,
130
+ name: clean,
131
+ parentId: target,
132
+ createdAt: ts,
133
+ updatedAt: ts
134
+ };
135
+ records.set(rec.id, rec);
136
+ notify();
137
+ return project(rec);
138
+ },
139
+ renameFolder (id, name) {
140
+ const rec = requireRecord(id);
141
+ const clean = normalizeName(name);
142
+ assertNameFree(rec.parentId, clean, id);
143
+ rec.name = clean;
144
+ rec.updatedAt = now();
145
+ notify();
146
+ return project(rec);
147
+ },
148
+ moveFolder (id, parentId, maxDepth) {
149
+ const rec = requireRecord(id);
150
+ const target = resolveFolderId(parentId);
151
+ if (target === id) throw new AssetSourceError("FOLDER_CYCLE", "A folder cannot be moved into itself.");
152
+ if (null !== target) {
153
+ requireRecord(target);
154
+ if (subtree(id).has(target)) throw new AssetSourceError("FOLDER_CYCLE", "A folder cannot be moved into one of its own descendants.");
155
+ }
156
+ if (rec.parentId === target) return project(rec);
157
+ assertNameFree(target, rec.name, id);
158
+ assertDepthOk(depthOf(target), heightOf(id), maxDepth);
159
+ rec.parentId = target;
160
+ rec.updatedAt = now();
161
+ notify();
162
+ return project(rec);
163
+ },
164
+ removeFolder (id, opts) {
165
+ const rec = requireRecord(id);
166
+ if (opts?.cascade) {
167
+ const ids = subtree(id);
168
+ const removedAssetIds = [];
169
+ for (const [assetId, folderId] of assetFolder)if (ids.has(folderId)) {
170
+ removedAssetIds.push(assetId);
171
+ assetFolder.delete(assetId);
172
+ }
173
+ for (const fid of ids)records.delete(fid);
174
+ notify();
175
+ return {
176
+ removedAssetIds: Object.freeze(removedAssetIds)
177
+ };
178
+ }
179
+ const newParent = rec.parentId;
180
+ for (const child of records.values())if (child.parentId === id) {
181
+ child.parentId = newParent;
182
+ child.updatedAt = now();
183
+ }
184
+ for (const [assetId, folderId] of assetFolder)if (folderId === id) if (null === newParent) assetFolder.delete(assetId);
185
+ else assetFolder.set(assetId, newParent);
186
+ records.delete(id);
187
+ notify();
188
+ return {
189
+ removedAssetIds: Object.freeze([])
190
+ };
191
+ },
192
+ folderOf (assetId) {
193
+ return assetFolder.get(assetId) ?? null;
194
+ },
195
+ moveAsset (assetId, folderId) {
196
+ const target = resolveFolderId(folderId);
197
+ if (null !== target) requireRecord(target);
198
+ if (null === target) assetFolder.delete(assetId);
199
+ else assetFolder.set(assetId, target);
200
+ notify();
201
+ },
202
+ moveAssets (assetIds, folderId) {
203
+ const target = resolveFolderId(folderId);
204
+ if (null !== target) requireRecord(target);
205
+ for (const assetId of assetIds)if (null === target) assetFolder.delete(assetId);
206
+ else assetFolder.set(assetId, target);
207
+ notify();
208
+ },
209
+ removeAsset (assetId) {
210
+ if (assetFolder.delete(assetId)) notify();
211
+ },
212
+ subtreeIds (id) {
213
+ return subtree(id);
214
+ },
215
+ subscribe (listener) {
216
+ listeners.add(listener);
217
+ return ()=>{
218
+ listeners.delete(listener);
219
+ };
220
+ }
221
+ };
222
+ }
223
+ export { createFolderStore };
@@ -1,11 +1,15 @@
1
1
  "use strict";
2
2
  var __webpack_require__ = {};
3
3
  (()=>{
4
- __webpack_require__.d = (exports1, definition)=>{
5
- for(var key in definition)if (__webpack_require__.o(definition, key) && !__webpack_require__.o(exports1, key)) Object.defineProperty(exports1, key, {
6
- enumerable: true,
7
- get: definition[key]
8
- });
4
+ __webpack_require__.d = (exports1, getters, values)=>{
5
+ var define = (defs, kind)=>{
6
+ for(var key in defs)if (__webpack_require__.o(defs, key) && !__webpack_require__.o(exports1, key)) Object.defineProperty(exports1, key, {
7
+ enumerable: true,
8
+ [kind]: defs[key]
9
+ });
10
+ };
11
+ define(getters, "get");
12
+ define(values, "value");
9
13
  };
10
14
  })();
11
15
  (()=>{
@@ -23,9 +27,6 @@ var __webpack_require__ = {};
23
27
  })();
24
28
  var __webpack_exports__ = {};
25
29
  __webpack_require__.r(__webpack_exports__);
26
- __webpack_require__.d(__webpack_exports__, {
27
- uploadAssetAction: ()=>uploadAssetAction
28
- });
29
30
  const uploadAssetAction = {
30
31
  id: "asset-manager:upload",
31
32
  label: "Upload asset",
@@ -35,6 +36,9 @@ const uploadAssetAction = {
35
36
  ctx.emit("asset-manager:upload-requested");
36
37
  }
37
38
  };
39
+ __webpack_require__.d(__webpack_exports__, {}, {
40
+ uploadAssetAction: uploadAssetAction
41
+ });
38
42
  exports.uploadAssetAction = __webpack_exports__.uploadAssetAction;
39
43
  for(var __rspack_i in __webpack_exports__)if (-1 === [
40
44
  "uploadAssetAction"
@@ -1,11 +1,15 @@
1
1
  "use strict";
2
2
  var __webpack_require__ = {};
3
3
  (()=>{
4
- __webpack_require__.d = (exports1, definition)=>{
5
- for(var key in definition)if (__webpack_require__.o(definition, key) && !__webpack_require__.o(exports1, key)) Object.defineProperty(exports1, key, {
6
- enumerable: true,
7
- get: definition[key]
8
- });
4
+ __webpack_require__.d = (exports1, getters, values)=>{
5
+ var define = (defs, kind)=>{
6
+ for(var key in defs)if (__webpack_require__.o(defs, key) && !__webpack_require__.o(exports1, key)) Object.defineProperty(exports1, key, {
7
+ enumerable: true,
8
+ [kind]: defs[key]
9
+ });
10
+ };
11
+ define(getters, "get");
12
+ define(values, "value");
9
13
  };
10
14
  })();
11
15
  (()=>{
@@ -23,9 +27,6 @@ var __webpack_require__ = {};
23
27
  })();
24
28
  var __webpack_exports__ = {};
25
29
  __webpack_require__.r(__webpack_exports__);
26
- __webpack_require__.d(__webpack_exports__, {
27
- inferAssetKind: ()=>inferAssetKind
28
- });
29
30
  function inferAssetKind(entry) {
30
31
  const mimeType = entry.meta?.mimeType;
31
32
  const url = entry.url;
@@ -36,6 +37,9 @@ function inferAssetKind(entry) {
36
37
  if ("application/pdf" === mimeType || /\.pdf(?:$|[?#])/i.test(url)) return "document";
37
38
  return "other";
38
39
  }
40
+ __webpack_require__.d(__webpack_exports__, {
41
+ inferAssetKind: ()=>inferAssetKind
42
+ });
39
43
  exports.inferAssetKind = __webpack_exports__.inferAssetKind;
40
44
  for(var __rspack_i in __webpack_exports__)if (-1 === [
41
45
  "inferAssetKind"