@jay-framework/wix-media 0.21.0 → 0.22.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.ts +5 -5
- package/dist/index.js +53 -33
- package/package.json +11 -11
- package/plugin.yaml +3 -4
package/dist/index.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { JayHtmlValidatorFn } from '@jay-framework/compiler-shared';
|
|
2
|
-
import { PluginSetupContext, PluginSetupResult,
|
|
2
|
+
import { PluginSetupContext, PluginSetupResult, PluginAgentKitContext, PluginAgentKitResult } from '@jay-framework/stack-server-runtime';
|
|
3
3
|
import * as _jay_framework_fullstack_component from '@jay-framework/fullstack-component';
|
|
4
4
|
|
|
5
5
|
declare const validate: JayHtmlValidatorFn;
|
|
@@ -15,6 +15,7 @@ interface MediaFileInfo {
|
|
|
15
15
|
labels: string[];
|
|
16
16
|
folderId: string;
|
|
17
17
|
folderName: string;
|
|
18
|
+
folderPath: string[];
|
|
18
19
|
}
|
|
19
20
|
interface UploadUrlResult {
|
|
20
21
|
uploadUrl: string;
|
|
@@ -32,14 +33,13 @@ declare function generateMediaIndex(files: MediaFileInfo[]): string;
|
|
|
32
33
|
|
|
33
34
|
interface MediaAddMenuInteraction {
|
|
34
35
|
mode: 'stage-place' | 'reference';
|
|
35
|
-
persistOnPage?: boolean;
|
|
36
36
|
stagePromptTemplate?: string;
|
|
37
37
|
}
|
|
38
38
|
interface MediaAddMenuItem {
|
|
39
39
|
id: string;
|
|
40
40
|
title: string;
|
|
41
41
|
category: string;
|
|
42
|
-
|
|
42
|
+
folderPath?: string[];
|
|
43
43
|
pluginName: string;
|
|
44
44
|
packageName: string;
|
|
45
45
|
thumbnail?: string;
|
|
@@ -59,7 +59,7 @@ declare function refreshMediaAddMenuCatalog(projectRoot: string, mediaService: W
|
|
|
59
59
|
}>;
|
|
60
60
|
|
|
61
61
|
declare function setupWixMedia(ctx: PluginSetupContext): Promise<PluginSetupResult>;
|
|
62
|
-
declare function
|
|
62
|
+
declare function generateWixMediaAgentKit(ctx: PluginAgentKitContext): Promise<PluginAgentKitResult>;
|
|
63
63
|
|
|
64
64
|
declare const rebuildIndex: _jay_framework_fullstack_component.JayCliCommand<{}> & _jay_framework_fullstack_component.JayCliCommandDefinition<{}, [_jay_framework_fullstack_component.ConsoleContext]>;
|
|
65
65
|
|
|
@@ -71,4 +71,4 @@ declare const uploadPublic: _jay_framework_fullstack_component.JayCliCommand<{
|
|
|
71
71
|
dryRun?: boolean;
|
|
72
72
|
}, [_jay_framework_fullstack_component.ConsoleContext]>;
|
|
73
73
|
|
|
74
|
-
export { ADD_MENU_GENERATED_REL, buildMediaAddMenuItems, generateMediaIndex,
|
|
74
|
+
export { ADD_MENU_GENERATED_REL, buildMediaAddMenuItems, generateMediaIndex, generateWixMediaAgentKit, rebuildIndex, refreshMediaAddMenuCatalog, setupWixMedia, thumbnailUrlForMedia, uploadPublic, validate, writeGeneratedAddMenuCatalog };
|
package/dist/index.js
CHANGED
|
@@ -148,20 +148,6 @@ function generateMediaIndex(files2) {
|
|
|
148
148
|
return lines.join("\n");
|
|
149
149
|
}
|
|
150
150
|
const CATEGORY = "Media";
|
|
151
|
-
function subCategoryForMediaType(mediaType) {
|
|
152
|
-
switch (mediaType.toLowerCase()) {
|
|
153
|
-
case "image":
|
|
154
|
-
return "Images";
|
|
155
|
-
case "video":
|
|
156
|
-
return "Videos";
|
|
157
|
-
case "audio":
|
|
158
|
-
return "Audio";
|
|
159
|
-
case "document":
|
|
160
|
-
return "Documents";
|
|
161
|
-
default:
|
|
162
|
-
return "Other";
|
|
163
|
-
}
|
|
164
|
-
}
|
|
165
151
|
function uniqueItemId(slug, mediaId, usedIds) {
|
|
166
152
|
const base = slug.trim() || mediaId.slice(0, 8);
|
|
167
153
|
let id = `wix-media:${base}`;
|
|
@@ -179,10 +165,6 @@ function formatDimensions(file) {
|
|
|
179
165
|
return "-";
|
|
180
166
|
}
|
|
181
167
|
function formatTitle(file) {
|
|
182
|
-
const folder = file.folderName?.trim();
|
|
183
|
-
if (folder && folder !== "Media Root" && folder !== "Unknown") {
|
|
184
|
-
return `${folder} — ${file.displayName}`;
|
|
185
|
-
}
|
|
186
168
|
return file.displayName;
|
|
187
169
|
}
|
|
188
170
|
const VISUAL_FILE_EXTENSION_RE = /\.(svg|png|jpe?g|gif|webp|bmp|ico)($|[?#])/i;
|
|
@@ -204,7 +186,6 @@ function stagePlaceInteractionForMedia(file) {
|
|
|
204
186
|
if (mediaType === "image" || mediaType === "vector" || isPreviewableVisualMedia(file)) {
|
|
205
187
|
return {
|
|
206
188
|
mode: "stage-place",
|
|
207
|
-
persistOnPage: true,
|
|
208
189
|
stagePromptTemplate: `Place this image at the marker location on the page.
|
|
209
190
|
URL: ${file.url}`
|
|
210
191
|
};
|
|
@@ -212,7 +193,6 @@ URL: ${file.url}`
|
|
|
212
193
|
if (mediaType === "video") {
|
|
213
194
|
return {
|
|
214
195
|
mode: "stage-place",
|
|
215
|
-
persistOnPage: true,
|
|
216
196
|
stagePromptTemplate: `Place this video at the marker location on the page.
|
|
217
197
|
URL: ${file.url}`
|
|
218
198
|
};
|
|
@@ -222,7 +202,8 @@ URL: ${file.url}`
|
|
|
222
202
|
function buildMediaPrompt(file) {
|
|
223
203
|
const labels = file.labels.length > 0 ? `Labels: ${file.labels.join(", ")}
|
|
224
204
|
` : "";
|
|
225
|
-
const folderLine = file.
|
|
205
|
+
const folderLine = file.folderPath.length > 0 ? `Folder: ${file.folderPath.join(" / ")}
|
|
206
|
+
` : file.folderName && file.folderName !== "Unknown" ? `Folder: ${file.folderName}
|
|
226
207
|
` : "";
|
|
227
208
|
return [
|
|
228
209
|
"Use this Wix Media Manager asset in jay-html (do not copy to public/):",
|
|
@@ -245,7 +226,7 @@ function buildMediaAddMenuItems(files2) {
|
|
|
245
226
|
id: uniqueItemId(file.slug, file.id, usedIds),
|
|
246
227
|
title: formatTitle(file),
|
|
247
228
|
category: CATEGORY,
|
|
248
|
-
|
|
229
|
+
...file.folderPath.length > 0 ? { folderPath: [...file.folderPath] } : {},
|
|
249
230
|
pluginName: "wix-media",
|
|
250
231
|
packageName: "@jay-framework/wix-media",
|
|
251
232
|
...thumbnail ? { thumbnail } : {},
|
|
@@ -269,6 +250,32 @@ async function refreshMediaAddMenuCatalog(projectRoot, mediaService) {
|
|
|
269
250
|
const outputRel = writeGeneratedAddMenuCatalog(projectRoot, items);
|
|
270
251
|
return { itemCount: items.length, outputRel };
|
|
271
252
|
}
|
|
253
|
+
const WIX_MEDIA_SITE_FILES_LABEL = "Site Files";
|
|
254
|
+
function stripSiteFilesContainer(segments) {
|
|
255
|
+
const path2 = [...segments];
|
|
256
|
+
while (path2[0] === WIX_MEDIA_SITE_FILES_LABEL) {
|
|
257
|
+
path2.shift();
|
|
258
|
+
}
|
|
259
|
+
return path2;
|
|
260
|
+
}
|
|
261
|
+
function buildMediaFolderPath(folderId, folderIndex) {
|
|
262
|
+
if (!folderId || folderId === "media-root") {
|
|
263
|
+
return [];
|
|
264
|
+
}
|
|
265
|
+
const segments = [];
|
|
266
|
+
let currentFolderId = folderId;
|
|
267
|
+
const visitedFolderIds = /* @__PURE__ */ new Set();
|
|
268
|
+
while (currentFolderId && currentFolderId !== "media-root" && !visitedFolderIds.has(currentFolderId)) {
|
|
269
|
+
visitedFolderIds.add(currentFolderId);
|
|
270
|
+
const folder = folderIndex.get(currentFolderId);
|
|
271
|
+
if (!folder) break;
|
|
272
|
+
segments.unshift(folder.name);
|
|
273
|
+
const parentFolderId = folder.parentFolderId ?? void 0;
|
|
274
|
+
if (!parentFolderId || parentFolderId === "media-root") break;
|
|
275
|
+
currentFolderId = parentFolderId;
|
|
276
|
+
}
|
|
277
|
+
return stripSiteFilesContainer(segments);
|
|
278
|
+
}
|
|
272
279
|
const WIX_MEDIA_SERVICE_MARKER = createJayService("Wix Media Service");
|
|
273
280
|
let filesClientInstance;
|
|
274
281
|
let foldersClientInstance;
|
|
@@ -308,7 +315,7 @@ function extractDimensions(file) {
|
|
|
308
315
|
}
|
|
309
316
|
async function fetchAllFolders(foldersClient) {
|
|
310
317
|
const folderMap = /* @__PURE__ */ new Map();
|
|
311
|
-
folderMap.set("media-root", "Media Root");
|
|
318
|
+
folderMap.set("media-root", { name: "Media Root", parentFolderId: null });
|
|
312
319
|
let cursor;
|
|
313
320
|
do {
|
|
314
321
|
const result = await foldersClient.searchFolders({
|
|
@@ -317,7 +324,10 @@ async function fetchAllFolders(foldersClient) {
|
|
|
317
324
|
});
|
|
318
325
|
for (const folder of result.folders ?? []) {
|
|
319
326
|
if (folder._id && folder.displayName) {
|
|
320
|
-
folderMap.set(folder._id,
|
|
327
|
+
folderMap.set(folder._id, {
|
|
328
|
+
name: folder.displayName,
|
|
329
|
+
parentFolderId: folder.parentFolderId ?? null
|
|
330
|
+
});
|
|
321
331
|
}
|
|
322
332
|
}
|
|
323
333
|
cursor = result.nextCursor?.cursors?.next;
|
|
@@ -367,6 +377,9 @@ function provideWixMediaService(wixClient) {
|
|
|
367
377
|
]);
|
|
368
378
|
const items = rawFiles.map((file) => {
|
|
369
379
|
const dims = extractDimensions(file);
|
|
380
|
+
const folderRecord = folderMap.get(file.folderId);
|
|
381
|
+
const folderName = folderRecord?.name ?? "Unknown";
|
|
382
|
+
const folderPath = buildMediaFolderPath(file.folderId, folderMap);
|
|
370
383
|
return {
|
|
371
384
|
id: file.id,
|
|
372
385
|
displayName: file.displayName,
|
|
@@ -377,7 +390,8 @@ function provideWixMediaService(wixClient) {
|
|
|
377
390
|
height: dims.height,
|
|
378
391
|
labels: file.labels,
|
|
379
392
|
folderId: file.folderId,
|
|
380
|
-
folderName
|
|
393
|
+
folderName,
|
|
394
|
+
folderPath
|
|
381
395
|
};
|
|
382
396
|
});
|
|
383
397
|
deduplicateSlugs(items);
|
|
@@ -392,9 +406,15 @@ function provideWixMediaService(wixClient) {
|
|
|
392
406
|
registerService(WIX_MEDIA_SERVICE_MARKER, service);
|
|
393
407
|
return service;
|
|
394
408
|
}
|
|
395
|
-
function
|
|
396
|
-
const
|
|
397
|
-
|
|
409
|
+
function getWixClient(services) {
|
|
410
|
+
const fromContext = services.get(WIX_CLIENT_SERVICE);
|
|
411
|
+
if (fromContext !== void 0) {
|
|
412
|
+
return fromContext;
|
|
413
|
+
}
|
|
414
|
+
return getService(WIX_CLIENT_SERVICE);
|
|
415
|
+
}
|
|
416
|
+
function createMediaService(services) {
|
|
417
|
+
return provideWixMediaService(getWixClient(services));
|
|
398
418
|
}
|
|
399
419
|
async function setupWixMedia(ctx) {
|
|
400
420
|
if (ctx.initError) {
|
|
@@ -404,7 +424,7 @@ async function setupWixMedia(ctx) {
|
|
|
404
424
|
};
|
|
405
425
|
}
|
|
406
426
|
try {
|
|
407
|
-
createMediaService();
|
|
427
|
+
createMediaService(ctx.services);
|
|
408
428
|
} catch {
|
|
409
429
|
return {
|
|
410
430
|
status: "needs-config",
|
|
@@ -416,13 +436,13 @@ async function setupWixMedia(ctx) {
|
|
|
416
436
|
message: "Wix Media Manager access verified."
|
|
417
437
|
};
|
|
418
438
|
}
|
|
419
|
-
async function
|
|
439
|
+
async function generateWixMediaAgentKit(ctx) {
|
|
420
440
|
if (ctx.initError) {
|
|
421
441
|
throw new Error(`init failed: ${ctx.initError.message}`);
|
|
422
442
|
}
|
|
423
443
|
let mediaService;
|
|
424
444
|
try {
|
|
425
|
-
mediaService = createMediaService();
|
|
445
|
+
mediaService = createMediaService(ctx.services);
|
|
426
446
|
} catch {
|
|
427
447
|
throw new Error("WixMediaService not available. Run jay-stack setup first.");
|
|
428
448
|
}
|
|
@@ -434,7 +454,7 @@ async function generateWixMediaReferences(ctx) {
|
|
|
434
454
|
const addMenuItems = buildMediaAddMenuItems(mediaFiles);
|
|
435
455
|
const addMenuGenerated = writeGeneratedAddMenuCatalog(ctx.projectRoot, addMenuItems);
|
|
436
456
|
return {
|
|
437
|
-
|
|
457
|
+
agentKitCreated: [
|
|
438
458
|
`agent-kit/references/${ctx.pluginName}/MEDIA-INDEX.md`,
|
|
439
459
|
addMenuGenerated
|
|
440
460
|
],
|
|
@@ -606,7 +626,7 @@ export {
|
|
|
606
626
|
ADD_MENU_GENERATED_REL,
|
|
607
627
|
buildMediaAddMenuItems,
|
|
608
628
|
generateMediaIndex,
|
|
609
|
-
|
|
629
|
+
generateWixMediaAgentKit,
|
|
610
630
|
rebuildIndex,
|
|
611
631
|
refreshMediaAddMenuCatalog,
|
|
612
632
|
setupWixMedia,
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@jay-framework/wix-media",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.22.0",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "Wix Media Manager plugin for Jay Framework — media validation, index generation, and agent-kit references",
|
|
6
6
|
"license": "Apache-2.0",
|
|
@@ -25,21 +25,21 @@
|
|
|
25
25
|
"test": "vitest run"
|
|
26
26
|
},
|
|
27
27
|
"dependencies": {
|
|
28
|
-
"@jay-framework/compiler-jay-html": "^0.
|
|
29
|
-
"@jay-framework/compiler-shared": "^0.
|
|
30
|
-
"@jay-framework/component": "^0.
|
|
31
|
-
"@jay-framework/fullstack-component": "^0.
|
|
32
|
-
"@jay-framework/stack-server-runtime": "^0.
|
|
33
|
-
"@jay-framework/wix-server-client": "^0.
|
|
34
|
-
"@jay-framework/wix-utils": "^0.
|
|
28
|
+
"@jay-framework/compiler-jay-html": "^0.22.0",
|
|
29
|
+
"@jay-framework/compiler-shared": "^0.22.0",
|
|
30
|
+
"@jay-framework/component": "^0.22.0",
|
|
31
|
+
"@jay-framework/fullstack-component": "^0.22.0",
|
|
32
|
+
"@jay-framework/stack-server-runtime": "^0.22.0",
|
|
33
|
+
"@jay-framework/wix-server-client": "^0.22.0",
|
|
34
|
+
"@jay-framework/wix-utils": "^0.22.0",
|
|
35
35
|
"@wix/media": "^1.0.247",
|
|
36
36
|
"@wix/sdk": "^1.21.5",
|
|
37
37
|
"js-yaml": "^4.1.0"
|
|
38
38
|
},
|
|
39
39
|
"devDependencies": {
|
|
40
|
-
"@jay-framework/compiler-jay-stack": "^0.
|
|
41
|
-
"@jay-framework/jay-stack-cli": "^0.
|
|
42
|
-
"@jay-framework/vite-plugin": "^0.
|
|
40
|
+
"@jay-framework/compiler-jay-stack": "^0.22.0",
|
|
41
|
+
"@jay-framework/jay-stack-cli": "^0.22.0",
|
|
42
|
+
"@jay-framework/vite-plugin": "^0.22.0",
|
|
43
43
|
"@types/node": "^20.11.0",
|
|
44
44
|
"node-html-parser": "^6.1.0",
|
|
45
45
|
"rimraf": "^5.0.5",
|
package/plugin.yaml
CHANGED
|
@@ -11,7 +11,6 @@ commands:
|
|
|
11
11
|
- name: rebuild-index
|
|
12
12
|
command: rebuild-index.jay-command
|
|
13
13
|
|
|
14
|
-
setup:
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
description: Validates Wix Media Manager access, generates agent-kit media index
|
|
14
|
+
setup: setupWixMedia
|
|
15
|
+
agentkit: generateWixMediaAgentKit
|
|
16
|
+
description: Validates Wix Media Manager access, generates agent-kit media index
|