@forgeax/engine-import 0.1.24 → 0.1.26

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.
@@ -1,3 +1,4 @@
1
+ import { type NativeCooker } from '@forgeax/engine-pack/native-cooker';
1
2
  import { type AnyScriptablePackDefinition, type PackAuthoringError, PackageId, type PackParameterValue } from '@forgeax/engine-pack/source';
2
3
  import type { AssetPublicationEnvelope, Result } from '@forgeax/engine-types';
3
4
  import { AssetError, ImportError } from '@forgeax/engine-types';
@@ -14,6 +15,8 @@ export interface ScriptablePackBuildOptions {
14
15
  readonly inheritedValues?: Readonly<Record<string, PackParameterValue>>;
15
16
  readonly assetSource?: ScriptablePackAssetSnapshotSource;
16
17
  readonly outputs: AssetOutputProducerRegistry;
18
+ /** Optional build-time cookers for authored producer outputs that need artifacts. */
19
+ readonly cookers?: readonly NativeCooker[];
17
20
  readonly sourceClosure?: readonly ScriptablePackSourceClosureEntry[];
18
21
  readonly authoringContractVersion?: string;
19
22
  /** Known published GUIDs used for the optional global reference gate. */
@@ -47,6 +50,8 @@ export interface ScriptablePackBuildWorkItem {
47
50
  export interface ScriptablePackBuildWorklistOptions {
48
51
  readonly subjects: readonly ScriptablePackBuildWorkItem[];
49
52
  readonly outputs: AssetOutputProducerRegistry;
53
+ /** Optional build-time cookers forwarded to each authored Pack subject. */
54
+ readonly cookers?: readonly NativeCooker[];
50
55
  readonly assetSource?: ScriptablePackAssetSnapshotSource;
51
56
  readonly availableGuids?: ReadonlySet<string>;
52
57
  readonly incomingRefs?: ReadonlyMap<string, readonly string[]>;
@@ -1 +1 @@
1
- {"version":3,"file":"scriptable-pack-build.d.ts","sourceRoot":"","sources":["../src/scriptable-pack-build.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"scriptable-pack-build.d.ts","sourceRoot":"","sources":["../src/scriptable-pack-build.ts"],"names":[],"mappings":"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"}
@@ -31,6 +31,8 @@ export interface ScriptablePackProductionOptions {
31
31
  readonly sources: readonly ScriptablePackInput[];
32
32
  readonly declaredExternalOutputs?: readonly ScriptablePackStagedOutput[];
33
33
  readonly assetSource?: ScriptablePackAssetSnapshotSource;
34
+ /** Build-time producers used for custom or otherwise uncooked asset rows. */
35
+ readonly cookers?: readonly NativeCooker[];
34
36
  readonly availableGuids?: ReadonlySet<string>;
35
37
  readonly incomingRefs?: ReadonlyMap<string, readonly string[]>;
36
38
  readonly maxPasses?: number;
@@ -1 +1 @@
1
- {"version":3,"file":"scriptable-pack-host.d.ts","sourceRoot":"","sources":["../src/scriptable-pack-host.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"scriptable-pack-host.d.ts","sourceRoot":"","sources":["../src/scriptable-pack-host.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"scriptable-pack-output-producers.d.ts","sourceRoot":"","sources":["../src/scriptable-pack-output-producers.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,4BAA4B,EAAE,MAAM,6BAA6B,CAAC;AAmChF,OAAO,EAEL,KAAK,mBAAmB,EACxB,2BAA2B,EAE5B,MAAM,sBAAsB,CAAC;AA0c9B,eAAO,MAAM,2BAA2B,qBAIvC,CAAC;AACF,eAAO,MAAM,uBAAuB,qBAA2D,CAAC;AAChG,eAAO,MAAM,0BAA0B,qBAItC,CAAC;AAEF,wBAAgB,8BAA8B,CAC5C,eAAe,GAAE,SAAS,4BAA4B,EAAO,GAC5D,mBAAmB,CAKrB;AAED,wBAAgB,6CAA6C,IAAI,mBAAmB,CAEnF;AAED,wBAAgB,yCAAyC,CACvD,eAAe,GAAE,SAAS,4BAA4B,EAAO,GAC5D,2BAA2B,CAwB7B"}
1
+ {"version":3,"file":"scriptable-pack-output-producers.d.ts","sourceRoot":"","sources":["../src/scriptable-pack-output-producers.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,4BAA4B,EAAE,MAAM,6BAA6B,CAAC;AAmChF,OAAO,EAEL,KAAK,mBAAmB,EACxB,2BAA2B,EAE5B,MAAM,sBAAsB,CAAC;AA4c9B,eAAO,MAAM,2BAA2B,qBAIvC,CAAC;AACF,eAAO,MAAM,uBAAuB,qBAA2D,CAAC;AAChG,eAAO,MAAM,0BAA0B,qBAItC,CAAC;AAEF,wBAAgB,8BAA8B,CAC5C,eAAe,GAAE,SAAS,4BAA4B,EAAO,GAC5D,mBAAmB,CAKrB;AAED,wBAAgB,6CAA6C,IAAI,mBAAmB,CAEnF;AAED,wBAAgB,yCAAyC,CACvD,eAAe,GAAE,SAAS,4BAA4B,EAAO,GAC5D,2BAA2B,CAwB7B"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@forgeax/engine-import",
3
- "version": "0.1.24",
3
+ "version": "0.1.26",
4
4
  "private": false,
5
5
  "type": "module",
6
6
  "license": "Apache-2.0",
@@ -27,13 +27,13 @@
27
27
  "LICENSE"
28
28
  ],
29
29
  "dependencies": {
30
- "@forgeax/engine-ddc": "0.1.24",
31
- "@forgeax/engine-ecs": "0.1.24",
32
- "@forgeax/engine-geometry": "0.1.24",
33
- "@forgeax/engine-pack": "0.1.24",
34
- "@forgeax/engine-scene": "0.1.24",
35
- "@forgeax/engine-shader": "0.1.24",
36
- "@forgeax/engine-types": "0.1.24",
30
+ "@forgeax/engine-ddc": "0.1.26",
31
+ "@forgeax/engine-ecs": "0.1.26",
32
+ "@forgeax/engine-geometry": "0.1.26",
33
+ "@forgeax/engine-pack": "0.1.26",
34
+ "@forgeax/engine-scene": "0.1.26",
35
+ "@forgeax/engine-shader": "0.1.26",
36
+ "@forgeax/engine-types": "0.1.26",
37
37
  "@noble/hashes": "^2.2.0"
38
38
  },
39
39
  "devDependencies": {
@@ -17,6 +17,7 @@ import { ImporterRegistry } from '../importer-registry.js';
17
17
  import {
18
18
  declaredPackExternalOutputs,
19
19
  prepareDirectPackTransport,
20
+ prepareLegacyPackTransport,
20
21
  } from '../scriptable-pack-host.js';
21
22
 
22
23
  const GUID = '019ffa97-0000-7000-8000-000000000001';
@@ -275,4 +276,51 @@ describe('ScriptablePack external Meta staging', () => {
275
276
  },
276
277
  ]);
277
278
  });
279
+
280
+ it('publishes already-cooked Engine-owned materials from legacy Pack v2', async () => {
281
+ const guid = '019ffa97-0000-0000-8000-000000000012';
282
+ const result = await prepareLegacyPackTransport(
283
+ {
284
+ schemaVersion: '2.0.0',
285
+ kind: 'internal-text-package',
286
+ assets: [
287
+ {
288
+ guid,
289
+ kind: 'material',
290
+ sourceKey: 'shaders/rusted-iron.wgsl',
291
+ execution: 'cooked',
292
+ payload: {
293
+ kind: 'material',
294
+ passes: [
295
+ {
296
+ name: 'forward',
297
+ program: {
298
+ module: 'forgeax::default-standard-pbr',
299
+ fragmentEntry: 'fs_main',
300
+ },
301
+ renderState: { tags: { LightMode: 'Forward' } },
302
+ },
303
+ ],
304
+ parameters: [{ name: 'noiseScale', type: 'f32' }],
305
+ values: { noiseScale: 1.85 },
306
+ },
307
+ refs: [],
308
+ },
309
+ ],
310
+ },
311
+ [],
312
+ (assetGuid) => ({
313
+ base: '/',
314
+ packagePath: `/__forgeax-ddc/${assetGuid}.pack.json`,
315
+ artifactPath: (childGuid, key) => `${childGuid}/${key}.bin`,
316
+ }),
317
+ );
318
+
319
+ expect(result.firstGuid).toBe(guid);
320
+ expect(result.cooked?.refsByGuid.get(guid)).toEqual([]);
321
+ expect(result.finalized?.packageUrl).toBe(`/__forgeax-ddc/${guid}.pack.json`);
322
+ expect(result.finalized?.pack.assets[0]?.payload).toMatchObject({
323
+ passes: [{ program: { module: 'forgeax::default-standard-pbr' } }],
324
+ });
325
+ });
278
326
  });
@@ -71,9 +71,8 @@ describe('ScriptablePack standard output producers', () => {
71
71
  const material: MaterialAsset = {
72
72
  kind: 'material',
73
73
  parent: PARENT_GUID,
74
- parameters: [{ name: 'surface', type: 'texture' }],
75
74
  values: {
76
- surface: {
75
+ baseColorTexture: {
77
76
  texture: TEXTURE_GUID,
78
77
  sampler: SAMPLER_GUID,
79
78
  coordinates: { set: 1, transform: { scale: [2, 2] } },
@@ -93,18 +92,18 @@ describe('ScriptablePack standard output producers', () => {
93
92
  { guid: AssetGuid.format(PARENT_GUID), sourceField: { fieldName: 'parent' } },
94
93
  {
95
94
  guid: AssetGuid.format(TEXTURE_GUID),
96
- sourceField: { componentName: '<material>', fieldName: 'surface' },
95
+ sourceField: { componentName: '<material>', fieldName: 'baseColorTexture' },
97
96
  },
98
97
  {
99
98
  guid: AssetGuid.format(SAMPLER_GUID),
100
- sourceField: { componentName: '<material>', fieldName: 'surface.sampler' },
99
+ sourceField: { componentName: '<material>', fieldName: 'baseColorTexture.sampler' },
101
100
  },
102
101
  ]);
103
102
  expect(result.value.payload).toEqual({
104
103
  ...material,
105
104
  parent: 0,
106
105
  values: {
107
- surface: {
106
+ baseColorTexture: {
108
107
  texture: 1,
109
108
  sampler: 2,
110
109
  coordinates: { set: 1, transform: { scale: [2, 2] } },
@@ -136,7 +135,7 @@ describe('ScriptablePack standard output producers', () => {
136
135
  },
137
136
  ]);
138
137
  const payload = result.value.payload as { values?: Record<string, unknown> };
139
- expect(payload.values).toEqual({ surface: 0 });
138
+ expect(payload.values).toEqual({ surface: { texture: 0 } });
140
139
  expect(payload.values?.surface).not.toEqual({
141
140
  texture: 0,
142
141
  coordinates: { set: 0, transform: { offset: [0, 0], scale: [1, 1], rotation: 0 } },
@@ -164,7 +163,7 @@ describe('ScriptablePack standard output producers', () => {
164
163
  },
165
164
  ]);
166
165
  expect((result.value.payload as { values?: Record<string, unknown> }).values).toEqual({
167
- baseColorTexture: 0,
166
+ baseColorTexture: { texture: 0 },
168
167
  });
169
168
  });
170
169
 
@@ -175,7 +175,7 @@ describe('standard ScriptablePack output producers', () => {
175
175
  equirect: 'ordinary-pod/1',
176
176
  font: 'ordinary-pod/1',
177
177
  'ies-profile': 'ordinary-pod/1',
178
- material: 'material-pack/1',
178
+ material: 'material-pack/2',
179
179
  mesh: 'mesh-binary/4',
180
180
  'particle-effect': 'ordinary-pod/1',
181
181
  'render-pipeline': 'ordinary-pod/1',
@@ -366,6 +366,7 @@ async function buildPackSources(
366
366
  const built = await produceScriptablePackProducts({
367
367
  sources: inputs,
368
368
  declaredExternalOutputs: externalOutputs,
369
+ cookers: context.cookers,
369
370
  availableGuids,
370
371
  });
371
372
  if (!built.ok) dynamicFailure(context, built.error);
@@ -1,4 +1,5 @@
1
1
  import { BUILTIN_MESH_ASSETS } from '@forgeax/engine-pack/builtin';
2
+ import { type NativeCooker, NativeCookerRegistry } from '@forgeax/engine-pack/native-cooker';
2
3
  import {
3
4
  type AnyScriptablePackDefinition,
4
5
  AssetGuid,
@@ -12,6 +13,7 @@ import {
12
13
  type PackParameterValue,
13
14
  resolvePackParameterValues,
14
15
  } from '@forgeax/engine-pack/source';
16
+ import { isEngineMaterial } from '@forgeax/engine-shader';
15
17
  import type {
16
18
  Asset,
17
19
  AssetGuid as AssetGuidType,
@@ -47,6 +49,8 @@ export interface ScriptablePackBuildOptions {
47
49
  readonly inheritedValues?: Readonly<Record<string, PackParameterValue>>;
48
50
  readonly assetSource?: ScriptablePackAssetSnapshotSource;
49
51
  readonly outputs: AssetOutputProducerRegistry;
52
+ /** Optional build-time cookers for authored producer outputs that need artifacts. */
53
+ readonly cookers?: readonly NativeCooker[];
50
54
  readonly sourceClosure?: readonly ScriptablePackSourceClosureEntry[];
51
55
  readonly authoringContractVersion?: string;
52
56
  /** Known published GUIDs used for the optional global reference gate. */
@@ -89,6 +93,10 @@ function isAsset(value: unknown): value is Asset {
89
93
  return record(value) && typeof value.kind === 'string' && isScriptablePackAssetKind(value.kind);
90
94
  }
91
95
 
96
+ function needsMaterialCook(asset: Asset): asset is Extract<Asset, { readonly kind: 'material' }> {
97
+ return asset.kind === 'material' && Array.isArray(asset.passes) && !isEngineMaterial(asset);
98
+ }
99
+
92
100
  function clone<T>(value: T): T {
93
101
  return structuredClone(value);
94
102
  }
@@ -384,6 +392,9 @@ export async function buildScriptablePack(
384
392
  const imported: ImportedAsset<unknown>[] = [];
385
393
  const stagedOutputs: ScriptablePackStagedOutput[] = [];
386
394
  const localGuids = new Set<string>();
395
+ const materialCookerRegistry = new NativeCookerRegistry();
396
+ for (const cooker of options.cookers ?? []) materialCookerRegistry.register(cooker);
397
+ const nativeFingerprints = new Map<string, string>();
387
398
  for (const sourceKey of Object.keys(built.value).sort()) {
388
399
  if (!isValidPackSourceKey(sourceKey))
389
400
  return err(sourceKeyFailure(options.sourcePath, sourceKey));
@@ -459,12 +470,40 @@ export async function buildScriptablePack(
459
470
  const invalidProduct = productError(options.sourcePath, sourceKey, producer, produced.value);
460
471
  if (invalidProduct !== undefined) return err(invalidProduct);
461
472
  const product = produced.value as ImportAssetProduct<unknown>;
473
+ let payload = product.payload;
474
+ let artifacts = product.artifacts;
475
+ if (needsMaterialCook(asset) && materialCookerRegistry.get('material') !== undefined) {
476
+ const cooked = await materialCookerRegistry.runDraft('material', {
477
+ guid,
478
+ source: asset,
479
+ sourceKey,
480
+ sourcePath: options.sourcePath,
481
+ refs: product.refs.map((reference) => reference.guid),
482
+ });
483
+ if (!cooked.ok) return err(cooked.error);
484
+ if (cooked.value.guid.toLowerCase() !== normalizedGuid) {
485
+ return err({
486
+ code: 'pack-source-output-invalid',
487
+ expected: 'the authored material cooker to preserve the derived AssetGuid',
488
+ hint: 'repair the native material cooker output GUID and rebuild the Pack',
489
+ detail: {
490
+ sourcePath: options.sourcePath,
491
+ sourceKey,
492
+ expectedGuid: guid,
493
+ actualGuid: cooked.value.guid,
494
+ },
495
+ });
496
+ }
497
+ payload = cooked.value.payload;
498
+ artifacts = cooked.value.artifacts;
499
+ nativeFingerprints.set(sourceKey, cooked.value.inputFingerprint);
500
+ }
462
501
  imported.push({
463
502
  guid,
464
503
  kind: asset.kind,
465
- payload: product.payload,
504
+ payload,
466
505
  refs: product.refs,
467
- artifacts: product.artifacts,
506
+ artifacts,
468
507
  });
469
508
  stagedOutputs.push({
470
509
  guid: AssetGuid.derive(subjectPackageId, sourceKey),
@@ -499,7 +538,7 @@ export async function buildScriptablePack(
499
538
  digest: read.digest,
500
539
  }),
501
540
  );
502
- const inputFingerprint = await digest({
541
+ const authoredInputFingerprint = await digest({
503
542
  packageId: PackageId.format(subjectPackageId),
504
543
  sourcePath: options.sourcePath,
505
544
  sourceClosure: options.sourceClosure ?? [],
@@ -512,6 +551,15 @@ export async function buildScriptablePack(
512
551
  authoringContractVersion: options.authoringContractVersion ?? 'scriptable-pack/1',
513
552
  producerVersions: options.outputs.versions(),
514
553
  });
554
+ const inputFingerprint =
555
+ nativeFingerprints.size === 0
556
+ ? authoredInputFingerprint
557
+ : await digest({
558
+ sourceRevision: authoredInputFingerprint,
559
+ nativeCookers: [...nativeFingerprints.entries()].sort(([left], [right]) =>
560
+ left.localeCompare(right),
561
+ ),
562
+ });
515
563
  const refs = imported.flatMap((asset) => asset.refs);
516
564
  const artifacts = Object.fromEntries(
517
565
  imported.flatMap((asset) =>
@@ -555,6 +603,8 @@ export interface ScriptablePackBuildWorkItem {
555
603
  export interface ScriptablePackBuildWorklistOptions {
556
604
  readonly subjects: readonly ScriptablePackBuildWorkItem[];
557
605
  readonly outputs: AssetOutputProducerRegistry;
606
+ /** Optional build-time cookers forwarded to each authored Pack subject. */
607
+ readonly cookers?: readonly NativeCooker[];
558
608
  readonly assetSource?: ScriptablePackAssetSnapshotSource;
559
609
  readonly availableGuids?: ReadonlySet<string>;
560
610
  readonly incomingRefs?: ReadonlyMap<string, readonly string[]>;
@@ -644,6 +694,7 @@ export async function buildScriptablePackWorklist(
644
694
  : { inheritedValues: subject.inheritedValues }),
645
695
  ...(subject.sourceClosure === undefined ? {} : { sourceClosure: subject.sourceClosure }),
646
696
  outputs: options.outputs,
697
+ ...(options.cookers === undefined ? {} : { cookers: options.cookers }),
647
698
  assetSource: stagedSource(staged, options.assetSource),
648
699
  availableGuids: new Set([...availableGuids, ...staged.keys()]),
649
700
  deferReferenceValidation: true,
@@ -92,6 +92,8 @@ export interface ScriptablePackProductionOptions {
92
92
  readonly sources: readonly ScriptablePackInput[];
93
93
  readonly declaredExternalOutputs?: readonly ScriptablePackStagedOutput[];
94
94
  readonly assetSource?: ScriptablePackAssetSnapshotSource;
95
+ /** Build-time producers used for custom or otherwise uncooked asset rows. */
96
+ readonly cookers?: readonly NativeCooker[];
95
97
  readonly availableGuids?: ReadonlySet<string>;
96
98
  readonly incomingRefs?: ReadonlyMap<string, readonly string[]>;
97
99
  readonly maxPasses?: number;
@@ -299,6 +301,13 @@ export async function readCookedAuthoredPack(
299
301
  continue;
300
302
  }
301
303
  if (isEngineOwnedMaterial(asset)) {
304
+ // Engine-owned material payloads are already cooked, but a legacy Pack
305
+ // source still needs to be projected into the runtime transport route.
306
+ // Mark the package as cooked so prepareLegacyPackTransport stages a
307
+ // published body instead of falling back to the source URL, which the
308
+ // dev route intentionally rejects for cooked v2 inputs.
309
+ hasCookedAsset = true;
310
+ refsByGuid.set(asset.guid.toLowerCase(), [...asset.refs]);
302
311
  assets.push({
303
312
  guid: asset.guid,
304
313
  kind: asset.kind,
@@ -903,6 +912,7 @@ export async function produceScriptablePackProducts(
903
912
  projectScriptablePackSceneComponents(source.definition.sceneComponents),
904
913
  ),
905
914
  ),
915
+ ...(options.cookers === undefined ? {} : { cookers: options.cookers }),
906
916
  ...(assetSource === undefined ? {} : { assetSource }),
907
917
  availableGuids,
908
918
  ...(options.incomingRefs === undefined ? {} : { incomingRefs: options.incomingRefs }),
@@ -124,7 +124,9 @@ function materialProduct(input: AssetOutputInput): AssetOutputProduct {
124
124
  for (const fieldName of Object.keys(material.values ?? {}).sort()) {
125
125
  const value = material.values?.[fieldName];
126
126
  if (typeof value === 'string' && textureFields.has(fieldName)) {
127
- values[fieldName] = addMaterialRef(value, { componentName: '<material>', fieldName });
127
+ values[fieldName] = {
128
+ texture: addMaterialRef(value, { componentName: '<material>', fieldName }),
129
+ };
128
130
  } else if (
129
131
  value !== null &&
130
132
  typeof value === 'object' &&
@@ -499,7 +501,7 @@ function ordinaryPodProduct(input: AssetOutputInput): AssetOutputProduct {
499
501
 
500
502
  export const materialAssetOutputProducer = createSafeProducer(
501
503
  'material',
502
- 'material-pack/1',
504
+ 'material-pack/2',
503
505
  materialProduct,
504
506
  );
505
507
  export const meshAssetOutputProducer = createSafeProducer('mesh', 'mesh-binary/4', meshProduct);