@pixi-ui-editor/schema 0.1.0 → 0.2.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/README.md ADDED
@@ -0,0 +1,11 @@
1
+ # @pixi-ui-editor/schema
2
+
3
+ Versioned document schema, validation and project-manifest format used by [Pixi UI Editor](https://github.com/AlexMariacho/pixi-ui-editor).
4
+
5
+ Consumed together with [`@pixi-ui-editor/runtime-pixi`](https://www.npmjs.com/package/@pixi-ui-editor/runtime-pixi), which renders documents validated against this schema.
6
+
7
+ ## Install
8
+
9
+ ```bash
10
+ pnpm add @pixi-ui-editor/schema
11
+ ```
@@ -19,13 +19,18 @@ export declare function soundFileName(asset: {
19
19
  mediaType: string;
20
20
  };
21
21
  }): string;
22
- /** Package-relative path for one asset file, per the fixed folder layout (`assets/<assetId>/<fileName>`). */
23
- export declare function assetFilePath(assetId: string, fileName: string): string;
22
+ /** Human-readable, collision-safe directory name for an asset. Stable ID remains the identity boundary. */
23
+ export declare function assetDirectoryName(asset: Pick<Asset, "id" | "name">): string;
24
+ /** Package-relative path for one asset file. */
25
+ export declare function assetFilePath(asset: Pick<Asset, "id" | "name">, fileName: string): string;
24
26
  export type AssetFileEntry = {
25
27
  path: string;
26
28
  fileName: string;
27
29
  mediaType: string;
30
+ uri: string;
28
31
  };
29
32
  /** Every relative-path file entry an asset owns: multi-file assets (atlas/Spine) keep their original uploaded file names. */
30
33
  export declare function collectAssetFileEntries(asset: Asset): AssetFileEntry[];
34
+ /** Rewrites every URI owned by an asset to its canonical package-relative location. */
35
+ export declare function rewriteAssetFileUris(asset: Asset): void;
31
36
  //# sourceMappingURL=assetPaths.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"assetPaths.d.ts","sourceRoot":"","sources":["../src/assetPaths.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAyBxC,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAGjD;AAED,yHAAyH;AACzH,wBAAgB,aAAa,CAAC,KAAK,EAAE;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE;QAAE,SAAS,EAAE,MAAM,CAAA;KAAE,CAAA;CAAE,GAAG,MAAM,CAG5F;AAED,wBAAgB,YAAY,CAAC,KAAK,EAAE;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE;QAAE,SAAS,EAAE,MAAM,CAAA;KAAE,CAAA;CAAE,GAAG,MAAM,CAG3F;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE;QAAE,SAAS,EAAE,MAAM,CAAA;KAAE,CAAA;CAAE,GAAG,MAAM,CAG5F;AAED,6GAA6G;AAC7G,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAEvE;AAED,MAAM,MAAM,cAAc,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,CAAC;AAEnF,6HAA6H;AAC7H,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,KAAK,GAAG,cAAc,EAAE,CAetE"}
1
+ {"version":3,"file":"assetPaths.d.ts","sourceRoot":"","sources":["../src/assetPaths.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAyBxC,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAGjD;AAED,yHAAyH;AACzH,wBAAgB,aAAa,CAAC,KAAK,EAAE;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE;QAAE,SAAS,EAAE,MAAM,CAAA;KAAE,CAAA;CAAE,GAAG,MAAM,CAG5F;AAED,wBAAgB,YAAY,CAAC,KAAK,EAAE;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE;QAAE,SAAS,EAAE,MAAM,CAAA;KAAE,CAAA;CAAE,GAAG,MAAM,CAG3F;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE;QAAE,SAAS,EAAE,MAAM,CAAA;KAAE,CAAA;CAAE,GAAG,MAAM,CAG5F;AAED,2GAA2G;AAC3G,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,GAAG,MAAM,CAAC,GAAG,MAAM,CAE5E;AAED,gDAAgD;AAChD,wBAAgB,aAAa,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,GAAG,MAAM,CAAC,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAEzF;AAED,MAAM,MAAM,cAAc,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,CAAC;AAEhG,6HAA6H;AAC7H,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,KAAK,GAAG,cAAc,EAAE,CAetE;AAED,uFAAuF;AACvF,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI,CAavD"}
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * Single source of truth for `Asset -> project folder relative path` naming, shared by the exported ZIP
3
3
  * package (`apps/editor-web/src/shared/exportPackage.ts`) and the IndexedDB working copy (`projectStore`):
4
- * both must resolve the same asset to the same `assets/<assetId>/<fileName>` path.
4
+ * both must resolve the same asset to the same `assets/<assetName>_<assetId>/<fileName>` path.
5
5
  */
6
6
  const IMAGE_EXTENSIONS = {
7
7
  "image/png": ".png",
@@ -35,34 +35,54 @@ export function soundFileName(asset) {
35
35
  const extension = SOUND_EXTENSIONS[asset.source.mediaType] ?? `.${sanitizeName(asset.source.mediaType.split("/")[1] ?? "bin")}`;
36
36
  return `${sanitizeName(asset.name)}${extension}`;
37
37
  }
38
- /** Package-relative path for one asset file, per the fixed folder layout (`assets/<assetId>/<fileName>`). */
39
- export function assetFilePath(assetId, fileName) {
40
- return `assets/${assetId}/${fileName}`;
38
+ /** Human-readable, collision-safe directory name for an asset. Stable ID remains the identity boundary. */
39
+ export function assetDirectoryName(asset) {
40
+ return `${sanitizeName(asset.name)}_${asset.id}`;
41
+ }
42
+ /** Package-relative path for one asset file. */
43
+ export function assetFilePath(asset, fileName) {
44
+ return `assets/${assetDirectoryName(asset)}/${fileName}`;
41
45
  }
42
46
  /** Every relative-path file entry an asset owns: multi-file assets (atlas/Spine) keep their original uploaded file names. */
43
47
  export function collectAssetFileEntries(asset) {
44
48
  if (asset.type === "image") {
45
49
  const fileName = imageFileName(asset);
46
- return [{ path: assetFilePath(asset.id, fileName), fileName, mediaType: asset.source.mediaType }];
50
+ return [{ path: assetFilePath(asset, fileName), fileName, mediaType: asset.source.mediaType, uri: asset.source.uri }];
47
51
  }
48
52
  if (asset.type === "font") {
49
53
  const fileName = fontFileName(asset);
50
- return [{ path: assetFilePath(asset.id, fileName), fileName, mediaType: asset.source.mediaType }];
54
+ return [{ path: assetFilePath(asset, fileName), fileName, mediaType: asset.source.mediaType, uri: asset.source.uri }];
51
55
  }
52
56
  if (asset.type === "sound") {
53
57
  const fileName = soundFileName(asset);
54
- return [{ path: assetFilePath(asset.id, fileName), fileName, mediaType: asset.source.mediaType }];
58
+ return [{ path: assetFilePath(asset, fileName), fileName, mediaType: asset.source.mediaType, uri: asset.source.uri }];
55
59
  }
56
60
  if (asset.type === "atlas") {
57
61
  return [
58
- { path: assetFilePath(asset.id, asset.files.json.name), fileName: asset.files.json.name, mediaType: asset.files.json.mediaType },
59
- { path: assetFilePath(asset.id, asset.files.texture.name), fileName: asset.files.texture.name, mediaType: asset.files.texture.mediaType },
62
+ { path: assetFilePath(asset, asset.files.json.name), fileName: asset.files.json.name, mediaType: asset.files.json.mediaType, uri: asset.files.json.uri },
63
+ { path: assetFilePath(asset, asset.files.texture.name), fileName: asset.files.texture.name, mediaType: asset.files.texture.mediaType, uri: asset.files.texture.uri },
60
64
  ];
61
65
  }
62
66
  return [
63
- { path: assetFilePath(asset.id, asset.files.skeleton.name), fileName: asset.files.skeleton.name, mediaType: asset.files.skeleton.mediaType },
64
- { path: assetFilePath(asset.id, asset.files.atlas.name), fileName: asset.files.atlas.name, mediaType: asset.files.atlas.mediaType },
65
- ...asset.files.textures.map((texture) => ({ path: assetFilePath(asset.id, texture.name), fileName: texture.name, mediaType: texture.mediaType })),
67
+ { path: assetFilePath(asset, asset.files.skeleton.name), fileName: asset.files.skeleton.name, mediaType: asset.files.skeleton.mediaType, uri: asset.files.skeleton.uri },
68
+ { path: assetFilePath(asset, asset.files.atlas.name), fileName: asset.files.atlas.name, mediaType: asset.files.atlas.mediaType, uri: asset.files.atlas.uri },
69
+ ...asset.files.textures.map((texture) => ({ path: assetFilePath(asset, texture.name), fileName: texture.name, mediaType: texture.mediaType, uri: texture.uri })),
66
70
  ];
67
71
  }
72
+ /** Rewrites every URI owned by an asset to its canonical package-relative location. */
73
+ export function rewriteAssetFileUris(asset) {
74
+ if (asset.type === "image" || asset.type === "font" || asset.type === "sound") {
75
+ asset.source.uri = assetFilePath(asset, asset.type === "image" ? imageFileName(asset) : asset.type === "font" ? fontFileName(asset) : soundFileName(asset));
76
+ return;
77
+ }
78
+ if (asset.type === "atlas") {
79
+ asset.files.json.uri = assetFilePath(asset, asset.files.json.name);
80
+ asset.files.texture.uri = assetFilePath(asset, asset.files.texture.name);
81
+ return;
82
+ }
83
+ asset.files.skeleton.uri = assetFilePath(asset, asset.files.skeleton.name);
84
+ asset.files.atlas.uri = assetFilePath(asset, asset.files.atlas.name);
85
+ for (const texture of asset.files.textures)
86
+ texture.uri = assetFilePath(asset, texture.name);
87
+ }
68
88
  //# sourceMappingURL=assetPaths.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"assetPaths.js","sourceRoot":"","sources":["../src/assetPaths.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"assetPaths.js","sourceRoot":"","sources":["../src/assetPaths.ts"],"names":[],"mappings":"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"}
@@ -4,7 +4,7 @@ const assetId = "30000000-0000-4000-8000-000000000001";
4
4
  describe("asset file naming", () => {
5
5
  it("derives an image file name from the sanitized asset name and its mediaType extension", () => {
6
6
  expect(imageFileName({ name: "Hero Icon", source: { mediaType: "image/jpeg" } })).toBe("Hero-Icon.jpg");
7
- expect(assetFilePath(assetId, imageFileName({ name: "Hero Icon", source: { mediaType: "image/jpeg" } }))).toBe(`assets/${assetId}/Hero-Icon.jpg`);
7
+ expect(assetFilePath({ id: assetId, name: "Hero Icon" }, imageFileName({ name: "Hero Icon", source: { mediaType: "image/jpeg" } }))).toBe(`assets/Hero-Icon_${assetId}/Hero-Icon.jpg`);
8
8
  });
9
9
  it("keeps atlas/Spine file names as uploaded when composing their relative path, matching export output", () => {
10
10
  const atlas = {
@@ -18,8 +18,8 @@ describe("asset file naming", () => {
18
18
  frames: {},
19
19
  };
20
20
  expect(collectAssetFileEntries(atlas)).toEqual([
21
- { path: `assets/${assetId}/sparkles.json`, fileName: "sparkles.json", mediaType: "application/json" },
22
- { path: `assets/${assetId}/sparkles.png`, fileName: "sparkles.png", mediaType: "image/png" },
21
+ { path: `assets/Sparkle-Sheet_${assetId}/sparkles.json`, fileName: "sparkles.json", mediaType: "application/json", uri: "assets/sparkles.json" },
22
+ { path: `assets/Sparkle-Sheet_${assetId}/sparkles.png`, fileName: "sparkles.png", mediaType: "image/png", uri: "assets/sparkles.png" },
23
23
  ]);
24
24
  });
25
25
  });
@@ -1 +1 @@
1
- {"version":3,"file":"assetPaths.test.js","sourceRoot":"","sources":["../src/assetPaths.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EAAE,aAAa,EAAE,uBAAuB,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAGxF,MAAM,OAAO,GAAG,sCAAsC,CAAC;AAEvD,QAAQ,CAAC,mBAAmB,EAAE,GAAG,EAAE;IACjC,EAAE,CAAC,sFAAsF,EAAE,GAAG,EAAE;QAC9F,MAAM,CAAC,aAAa,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,EAAE,EAAE,SAAS,EAAE,YAAY,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;QACxG,MAAM,CAAC,aAAa,CAAC,OAAO,EAAE,aAAa,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,EAAE,EAAE,SAAS,EAAE,YAAY,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,OAAO,gBAAgB,CAAC,CAAC;IACpJ,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,qGAAqG,EAAE,GAAG,EAAE;QAC7G,MAAM,KAAK,GAAU;YACnB,EAAE,EAAE,OAAO;YACX,IAAI,EAAE,eAAe;YACrB,IAAI,EAAE,OAAO;YACb,KAAK,EAAE;gBACL,IAAI,EAAE,EAAE,IAAI,EAAE,eAAe,EAAE,GAAG,EAAE,sBAAsB,EAAE,SAAS,EAAE,kBAAkB,EAAE;gBAC3F,OAAO,EAAE,EAAE,IAAI,EAAE,cAAc,EAAE,GAAG,EAAE,qBAAqB,EAAE,SAAS,EAAE,WAAW,EAAE;aACtF;YACD,MAAM,EAAE,EAAE;SACX,CAAC;QACF,MAAM,CAAC,uBAAuB,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC;YAC7C,EAAE,IAAI,EAAE,UAAU,OAAO,gBAAgB,EAAE,QAAQ,EAAE,eAAe,EAAE,SAAS,EAAE,kBAAkB,EAAE;YACrG,EAAE,IAAI,EAAE,UAAU,OAAO,eAAe,EAAE,QAAQ,EAAE,cAAc,EAAE,SAAS,EAAE,WAAW,EAAE;SAC7F,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"assetPaths.test.js","sourceRoot":"","sources":["../src/assetPaths.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EAAE,aAAa,EAAE,uBAAuB,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAGxF,MAAM,OAAO,GAAG,sCAAsC,CAAC;AAEvD,QAAQ,CAAC,mBAAmB,EAAE,GAAG,EAAE;IACjC,EAAE,CAAC,sFAAsF,EAAE,GAAG,EAAE;QAC9F,MAAM,CAAC,aAAa,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,EAAE,EAAE,SAAS,EAAE,YAAY,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;QACxG,MAAM,CAAC,aAAa,CAAC,EAAE,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,EAAE,aAAa,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,EAAE,EAAE,SAAS,EAAE,YAAY,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,oBAAoB,OAAO,gBAAgB,CAAC,CAAC;IACzL,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,qGAAqG,EAAE,GAAG,EAAE;QAC7G,MAAM,KAAK,GAAU;YACnB,EAAE,EAAE,OAAO;YACX,IAAI,EAAE,eAAe;YACrB,IAAI,EAAE,OAAO;YACb,KAAK,EAAE;gBACL,IAAI,EAAE,EAAE,IAAI,EAAE,eAAe,EAAE,GAAG,EAAE,sBAAsB,EAAE,SAAS,EAAE,kBAAkB,EAAE;gBAC3F,OAAO,EAAE,EAAE,IAAI,EAAE,cAAc,EAAE,GAAG,EAAE,qBAAqB,EAAE,SAAS,EAAE,WAAW,EAAE;aACtF;YACD,MAAM,EAAE,EAAE;SACX,CAAC;QACF,MAAM,CAAC,uBAAuB,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC;YAC7C,EAAE,IAAI,EAAE,wBAAwB,OAAO,gBAAgB,EAAE,QAAQ,EAAE,eAAe,EAAE,SAAS,EAAE,kBAAkB,EAAE,GAAG,EAAE,sBAAsB,EAAE;YAChJ,EAAE,IAAI,EAAE,wBAAwB,OAAO,eAAe,EAAE,QAAQ,EAAE,cAAc,EAAE,SAAS,EAAE,WAAW,EAAE,GAAG,EAAE,qBAAqB,EAAE;SACvI,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}