@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 CHANGED
@@ -1,5 +1,5 @@
1
1
  import { JayHtmlValidatorFn } from '@jay-framework/compiler-shared';
2
- import { PluginSetupContext, PluginSetupResult, PluginReferencesContext, PluginReferencesResult } from '@jay-framework/stack-server-runtime';
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
- subCategory: string;
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 generateWixMediaReferences(ctx: PluginReferencesContext): Promise<PluginReferencesResult>;
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, generateWixMediaReferences, rebuildIndex, refreshMediaAddMenuCatalog, setupWixMedia, thumbnailUrlForMedia, uploadPublic, validate, writeGeneratedAddMenuCatalog };
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.folderName && file.folderName !== "Unknown" ? `Folder: ${file.folderName}
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
- subCategory: subCategoryForMediaType(file.mediaType),
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, folder.displayName);
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: folderMap.get(file.folderId) ?? "Unknown"
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 createMediaService() {
396
- const wixClient = getService(WIX_CLIENT_SERVICE);
397
- return provideWixMediaService(wixClient);
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 generateWixMediaReferences(ctx) {
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
- referencesCreated: [
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
- generateWixMediaReferences,
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.21.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.21.0",
29
- "@jay-framework/compiler-shared": "^0.21.0",
30
- "@jay-framework/component": "^0.21.0",
31
- "@jay-framework/fullstack-component": "^0.21.0",
32
- "@jay-framework/stack-server-runtime": "^0.21.0",
33
- "@jay-framework/wix-server-client": "^0.21.0",
34
- "@jay-framework/wix-utils": "^0.21.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.21.0",
41
- "@jay-framework/jay-stack-cli": "^0.21.0",
42
- "@jay-framework/vite-plugin": "^0.21.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
- handler: setupWixMedia
16
- references: generateWixMediaReferences
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