@forgeax/engine-import 0.1.24 → 0.1.25

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":"AACA,OAAO,EACL,KAAK,2BAA2B,EAIhC,KAAK,kBAAkB,EACvB,SAAS,EAIT,KAAK,kBAAkB,EAExB,MAAM,6BAA6B,CAAC;AACrC,OAAO,KAAK,EAGV,wBAAwB,EAExB,MAAM,EACP,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,UAAU,EAAO,WAAW,EAAM,MAAM,uBAAuB,CAAC;AACzE,OAAO,EAGL,KAAK,qBAAqB,EAC3B,MAAM,qBAAqB,CAAC;AAC7B,OAAO,KAAK,EAEV,2BAA2B,EAC3B,gBAAgB,EAChB,iCAAiC,EACjC,yBAAyB,EAEzB,gCAAgC,EAChC,0BAA0B,EAC3B,MAAM,sBAAsB,CAAC;AAE9B,MAAM,WAAW,0BAA0B;IACzC,QAAQ,CAAC,UAAU,EAAE,2BAA2B,CAAC;IACjD,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,yFAAyF;IACzF,QAAQ,CAAC,gBAAgB,CAAC,EAAE,SAAS,CAAC;IACtC,iEAAiE;IACjE,QAAQ,CAAC,MAAM,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IACpD,oEAAoE;IACpE,QAAQ,CAAC,eAAe,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAAC,CAAC;IACxE,QAAQ,CAAC,WAAW,CAAC,EAAE,iCAAiC,CAAC;IACzD,QAAQ,CAAC,OAAO,EAAE,2BAA2B,CAAC;IAC9C,QAAQ,CAAC,aAAa,CAAC,EAAE,SAAS,gCAAgC,EAAE,CAAC;IACrE,QAAQ,CAAC,wBAAwB,CAAC,EAAE,MAAM,CAAC;IAC3C,yEAAyE;IACzE,QAAQ,CAAC,cAAc,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IAC9C,kFAAkF;IAClF,QAAQ,CAAC,wBAAwB,CAAC,EAAE,OAAO,CAAC;IAC5C,QAAQ,CAAC,WAAW,CAAC,EAAE,wBAAwB,CAAC;CACjD;AAED,MAAM,WAAW,0BAA2B,SAAQ,gBAAgB;IAClE,QAAQ,CAAC,WAAW,CAAC,EAAE,wBAAwB,CAAC;CACjD;AAED,MAAM,MAAM,yBAAyB,GAAG,MAAM,CAC5C,0BAA0B,EACxB,kBAAkB,GAClB,yBAAyB,GACzB,UAAU,GACV,WAAW,GACX;IACE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC;CAC3B,CACJ,CAAC;AAqNF;;;GAGG;AACH,wBAAsB,mBAAmB,CACvC,OAAO,EAAE,0BAA0B,GAClC,OAAO,CAAC,yBAAyB,CAAC,CA0PpC;AAED,MAAM,WAAW,2BAA2B;IAC1C,QAAQ,CAAC,UAAU,EAAE,2BAA2B,CAAC;IACjD,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,gBAAgB,CAAC,EAAE,SAAS,CAAC;IACtC,QAAQ,CAAC,MAAM,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IACpD,QAAQ,CAAC,eAAe,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAAC,CAAC;IACxE,QAAQ,CAAC,aAAa,CAAC,EAAE,SAAS,gCAAgC,EAAE,CAAC;CACtE;AAED,MAAM,WAAW,kCAAkC;IACjD,QAAQ,CAAC,QAAQ,EAAE,SAAS,2BAA2B,EAAE,CAAC;IAC1D,QAAQ,CAAC,OAAO,EAAE,2BAA2B,CAAC;IAC9C,QAAQ,CAAC,WAAW,CAAC,EAAE,iCAAiC,CAAC;IACzD,QAAQ,CAAC,cAAc,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IAC9C,QAAQ,CAAC,YAAY,CAAC,EAAE,WAAW,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC,CAAC;IAC/D,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;CAC7B;AAED,MAAM,WAAW,kCAAkC;IACjD,QAAQ,CAAC,QAAQ,EAAE,SAAS,qBAAqB,CAAC,OAAO,CAAC,EAAE,CAAC;IAC7D,QAAQ,CAAC,aAAa,EAAE,SAAS,0BAA0B,EAAE,CAAC;IAC9D,QAAQ,CAAC,aAAa,EAAE,SAAS,0BAA0B,EAAE,CAAC;IAC9D,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;CAC7B;AA8BD,mFAAmF;AACnF,wBAAsB,2BAA2B,CAC/C,OAAO,EAAE,kCAAkC,GAC1C,OAAO,CACR,MAAM,CACJ,kCAAkC,EAChC,kBAAkB,GAClB,yBAAyB,GACzB,UAAU,GACV,WAAW,GACX;IACE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC;CAC3B,CACJ,CACF,CA6GA"}
1
+ {"version":3,"file":"scriptable-pack-build.d.ts","sourceRoot":"","sources":["../src/scriptable-pack-build.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,YAAY,EAAwB,MAAM,oCAAoC,CAAC;AAC7F,OAAO,EACL,KAAK,2BAA2B,EAIhC,KAAK,kBAAkB,EACvB,SAAS,EAIT,KAAK,kBAAkB,EAExB,MAAM,6BAA6B,CAAC;AAErC,OAAO,KAAK,EAGV,wBAAwB,EAExB,MAAM,EACP,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,UAAU,EAAO,WAAW,EAAM,MAAM,uBAAuB,CAAC;AACzE,OAAO,EAGL,KAAK,qBAAqB,EAC3B,MAAM,qBAAqB,CAAC;AAC7B,OAAO,KAAK,EAEV,2BAA2B,EAC3B,gBAAgB,EAChB,iCAAiC,EACjC,yBAAyB,EAEzB,gCAAgC,EAChC,0BAA0B,EAC3B,MAAM,sBAAsB,CAAC;AAE9B,MAAM,WAAW,0BAA0B;IACzC,QAAQ,CAAC,UAAU,EAAE,2BAA2B,CAAC;IACjD,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,yFAAyF;IACzF,QAAQ,CAAC,gBAAgB,CAAC,EAAE,SAAS,CAAC;IACtC,iEAAiE;IACjE,QAAQ,CAAC,MAAM,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IACpD,oEAAoE;IACpE,QAAQ,CAAC,eAAe,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAAC,CAAC;IACxE,QAAQ,CAAC,WAAW,CAAC,EAAE,iCAAiC,CAAC;IACzD,QAAQ,CAAC,OAAO,EAAE,2BAA2B,CAAC;IAC9C,qFAAqF;IACrF,QAAQ,CAAC,OAAO,CAAC,EAAE,SAAS,YAAY,EAAE,CAAC;IAC3C,QAAQ,CAAC,aAAa,CAAC,EAAE,SAAS,gCAAgC,EAAE,CAAC;IACrE,QAAQ,CAAC,wBAAwB,CAAC,EAAE,MAAM,CAAC;IAC3C,yEAAyE;IACzE,QAAQ,CAAC,cAAc,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IAC9C,kFAAkF;IAClF,QAAQ,CAAC,wBAAwB,CAAC,EAAE,OAAO,CAAC;IAC5C,QAAQ,CAAC,WAAW,CAAC,EAAE,wBAAwB,CAAC;CACjD;AAED,MAAM,WAAW,0BAA2B,SAAQ,gBAAgB;IAClE,QAAQ,CAAC,WAAW,CAAC,EAAE,wBAAwB,CAAC;CACjD;AAED,MAAM,MAAM,yBAAyB,GAAG,MAAM,CAC5C,0BAA0B,EACxB,kBAAkB,GAClB,yBAAyB,GACzB,UAAU,GACV,WAAW,GACX;IACE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC;CAC3B,CACJ,CAAC;AAsOF;;;GAGG;AACH,wBAAsB,mBAAmB,CACvC,OAAO,EAAE,0BAA0B,GAClC,OAAO,CAAC,yBAAyB,CAAC,CAkSpC;AAED,MAAM,WAAW,2BAA2B;IAC1C,QAAQ,CAAC,UAAU,EAAE,2BAA2B,CAAC;IACjD,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,gBAAgB,CAAC,EAAE,SAAS,CAAC;IACtC,QAAQ,CAAC,MAAM,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IACpD,QAAQ,CAAC,eAAe,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAAC,CAAC;IACxE,QAAQ,CAAC,aAAa,CAAC,EAAE,SAAS,gCAAgC,EAAE,CAAC;CACtE;AAED,MAAM,WAAW,kCAAkC;IACjD,QAAQ,CAAC,QAAQ,EAAE,SAAS,2BAA2B,EAAE,CAAC;IAC1D,QAAQ,CAAC,OAAO,EAAE,2BAA2B,CAAC;IAC9C,2EAA2E;IAC3E,QAAQ,CAAC,OAAO,CAAC,EAAE,SAAS,YAAY,EAAE,CAAC;IAC3C,QAAQ,CAAC,WAAW,CAAC,EAAE,iCAAiC,CAAC;IACzD,QAAQ,CAAC,cAAc,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IAC9C,QAAQ,CAAC,YAAY,CAAC,EAAE,WAAW,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC,CAAC;IAC/D,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;CAC7B;AAED,MAAM,WAAW,kCAAkC;IACjD,QAAQ,CAAC,QAAQ,EAAE,SAAS,qBAAqB,CAAC,OAAO,CAAC,EAAE,CAAC;IAC7D,QAAQ,CAAC,aAAa,EAAE,SAAS,0BAA0B,EAAE,CAAC;IAC9D,QAAQ,CAAC,aAAa,EAAE,SAAS,0BAA0B,EAAE,CAAC;IAC9D,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;CAC7B;AA8BD,mFAAmF;AACnF,wBAAsB,2BAA2B,CAC/C,OAAO,EAAE,kCAAkC,GAC1C,OAAO,CACR,MAAM,CACJ,kCAAkC,EAChC,kBAAkB,GAClB,yBAAyB,GACzB,UAAU,GACV,WAAW,GACX;IACE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC;CAC3B,CACJ,CACF,CA8GA"}
@@ -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":"AAGA,OAAO,EACL,8BAA8B,EAC9B,KAAK,qBAAqB,EAI3B,MAAM,4BAA4B,CAAC;AAEpC,OAAO,EAAwB,KAAK,SAAS,IAAI,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAClG,OAAO,EAEL,KAAK,YAAY,EAElB,MAAM,oCAAoC,CAAC;AAC5C,OAAO,KAAK,EACV,2BAA2B,EAC3B,qBAAqB,EACtB,MAAM,8BAA8B,CAAC;AACtC,OAAO,EACL,KAAK,2BAA2B,EAChC,KAAK,yBAAyB,EAK9B,KAAK,gCAAgC,EACtC,MAAM,6BAA6B,CAAC;AAErC,OAAO,KAAK,EAEV,SAAS,IAAI,aAAa,EAC1B,wBAAwB,EACxB,sBAAsB,EAKtB,gBAAgB,EAChB,MAAM,EACP,MAAM,uBAAuB,CAAC;AAE/B,OAAO,KAAK,EAAE,OAAO,EAAE,cAAc,EAAiB,MAAM,oBAAoB,CAAC;AACjF,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAE/D,OAAO,KAAK,EACV,iCAAiC,EAEjC,0BAA0B,EAC3B,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAGL,KAAK,0BAA0B,EAEhC,MAAM,4BAA4B,CAAC;AAOpC,KAAK,yBAAyB,GAAG,OAAO,CAAC,UAAU,CAAC,OAAO,8BAA8B,CAAC,CAAC,CAAC;AAE5F,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAC;IACnC,QAAQ,CAAC,UAAU,EAAE,2BAA2B,CAAC;IACjD,QAAQ,CAAC,aAAa,EAAE,SAAS,gCAAgC,EAAE,CAAC;IACpE,QAAQ,CAAC,qBAAqB,EAAE,MAAM,CAAC;IACvC,QAAQ,CAAC,MAAM,EACX,qBAAqB,GACrB,CAAC,CAAC,OAAO,EAAE,0BAA0B,KAAK,qBAAqB,CAAC,CAAC;IACrE,QAAQ,CAAC,gBAAgB,CAAC,EAAE,aAAa,CAAC;IAC1C,QAAQ,CAAC,MAAM,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IACpD,QAAQ,CAAC,eAAe,CAAC,EAAE,QAAQ,CACjC,MAAM,CAAC,MAAM,EAAE,OAAO,6BAA6B,EAAE,kBAAkB,CAAC,CACzE,CAAC;CACH;AAED,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,OAAO,EAAE,0BAA0B,CAAC;IAC7C,QAAQ,CAAC,SAAS,EAAE,yBAAyB,CAAC;IAC9C,QAAQ,CAAC,KAAK,EAAE,8BAA8B,CAAC;IAC/C,QAAQ,CAAC,QAAQ,EAAE,gBAAgB,CAAC;IACpC,QAAQ,CAAC,WAAW,EAAE,wBAAwB,CAAC;CAChD;AAED,MAAM,WAAW,+BAA+B;IAC9C,QAAQ,CAAC,OAAO,EAAE,SAAS,mBAAmB,EAAE,CAAC;IACjD,QAAQ,CAAC,uBAAuB,CAAC,EAAE,SAAS,0BAA0B,EAAE,CAAC;IACzE,QAAQ,CAAC,WAAW,CAAC,EAAE,iCAAiC,CAAC;IACzD,QAAQ,CAAC,cAAc,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IAC9C,QAAQ,CAAC,YAAY,CAAC,EAAE,WAAW,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC,CAAC;IAC/D,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;CAC7B;AAED,MAAM,WAAW,8BAA8B;IAC7C,QAAQ,CAAC,OAAO,EAAE,SAAS,sBAAsB,EAAE,CAAC;IACpD,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC,CAAC;CACvD;AAED,MAAM,WAAW,4BAA4B;IAC3C,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,YAAY,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,CAAC;IAChD,QAAQ,CAAC,WAAW,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,CAAC;CAChD;AAED,MAAM,WAAW,2BAA2B;IAC1C,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC/D,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACvF,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAChE;AAED,mFAAmF;AACnF,MAAM,WAAW,mCAAmC;IAClD,QAAQ,CAAC,gBAAgB,EAAE,gBAAgB,CAAC;IAC5C,QAAQ,CAAC,WAAW,EAAE,cAAc,CAAC;CACtC;AAED,wBAAgB,6BAA6B,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAKxE;AAED,sFAAsF;AACtF,wBAAsB,2BAA2B,CAC/C,YAAY,EAAE,WAAW,CAAC,MAAM,EAAE,qBAAqB,CAAC,EACxD,OAAO,GAAE,SAAS,YAAY,EAAO,EACrC,aAAa,GAAE,SAAS,aAAa,EAAO,EAC5C,cAAc,CAAC,EAAE,mCAAmC,GACnD,OAAO,CAAC,SAAS,0BAA0B,EAAE,CAAC,CAqIhD;AAED,qFAAqF;AACrF,wBAAsB,sBAAsB,CAC1C,YAAY,EAAE,2BAA2B,EACzC,OAAO,GAAE,SAAS,YAAY,EAAO,EACrC,UAAU,CAAC,EAAE,MAAM,GAClB,OAAO,CACN;IACE,QAAQ,CAAC,cAAc,EAAE,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;IACjD,QAAQ,CAAC,UAAU,EAAE,WAAW,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC,CAAC;CAC7D,GACD,SAAS,CACZ,CA2DA;AAED,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,IAAI,EAAE,2BAA2B,CAAC;IAC3C,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC,UAAU,CAAC,OAAO,sBAAsB,CAAC,CAAC,CAAC;IACrE,QAAQ,CAAC,SAAS,CAAC,EAAE,yBAAyB,CAAC;CAChD;AAED,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,SAAS,EAAE;QAClB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;QAC3B,QAAQ,CAAC,MAAM,EAAE,SAAS,yBAAyB,EAAE,CAAC;KACvD,CAAC;IACF,QAAQ,CAAC,OAAO,EAAE,0BAA0B,CAAC;IAC7C,QAAQ,CAAC,SAAS,EAAE,yBAAyB,CAAC;IAC9C,QAAQ,CAAC,KAAK,EAAE,8BAA8B,CAAC;IAC/C,QAAQ,CAAC,QAAQ,EAAE,gBAAgB,CAAC;CACrC;AAED,MAAM,WAAW,wBAAwB;IACvC,QAAQ,CAAC,SAAS,EAAE,mBAAmB,CAAC,WAAW,CAAC,CAAC;IACrD,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,iBAAiB,CAAC,EAAE,MAAM,CAAC;IACpC,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,MAAM,EAAE,qBAAqB,CAAC;IACvC,QAAQ,CAAC,cAAc,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IAC9C,QAAQ,CAAC,OAAO,CAAC,EAAE,SAAS,YAAY,EAAE,CAAC;CAC5C;AAyKD,mFAAmF;AACnF,wBAAsB,0BAA0B,CAC9C,KAAK,EAAE,wBAAwB,GAC9B,OAAO,CAAC,MAAM,CAAC,mBAAmB,EAAE,OAAO,CAAC,CAAC,CAqM/C;AAED,uFAAuF;AACvF,wBAAsB,0BAA0B,CAC9C,YAAY,EAAE,2BAA2B,EACzC,OAAO,EAAE,SAAS,YAAY,EAAE,GAAG,SAAS,EAC5C,SAAS,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,qBAAqB,EAClD,UAAU,CAAC,EAAE,MAAM,GAClB,OAAO,CAAC,mBAAmB,CAAC,CAa9B;AAED,8EAA8E;AAC9E,wBAAsB,iCAAiC,CACrD,QAAQ,EAAE,sBAAsB,EAChC,KAAK,EAAE,4BAA4B,EACnC,IAAI,EAAE,2BAA2B,GAChC,OAAO,CAAC,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CA0BtC;AAiFD;;;;GAIG;AACH,wBAAsB,6BAA6B,CACjD,OAAO,EAAE,+BAA+B,GACvC,OAAO,CAAC,MAAM,CAAC,WAAW,CAAC,MAAM,EAAE,sBAAsB,CAAC,EAAE,OAAO,CAAC,CAAC,CAkFvE"}
1
+ {"version":3,"file":"scriptable-pack-host.d.ts","sourceRoot":"","sources":["../src/scriptable-pack-host.ts"],"names":[],"mappings":"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"}
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.25",
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.25",
31
+ "@forgeax/engine-ecs": "0.1.25",
32
+ "@forgeax/engine-geometry": "0.1.25",
33
+ "@forgeax/engine-pack": "0.1.25",
34
+ "@forgeax/engine-scene": "0.1.25",
35
+ "@forgeax/engine-shader": "0.1.25",
36
+ "@forgeax/engine-types": "0.1.25",
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] } },
@@ -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 { DEFAULT_STANDARD_SURFACE_MODULE } 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,23 @@ 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
+ if (asset.kind !== 'material' || !Array.isArray(asset.passes)) return false;
98
+ return asset.passes.some((pass) => {
99
+ const module = pass.program.module;
100
+ const surface = pass.program.moduleSlots?.surface;
101
+ return (
102
+ surface !== undefined &&
103
+ surface !== DEFAULT_STANDARD_SURFACE_MODULE &&
104
+ (module === 'forgeax_material::standard' ||
105
+ module === 'forgeax::default-standard-pbr' ||
106
+ module === 'forgeax_material::pbr-skin' ||
107
+ module === 'forgeax::pbr-skin' ||
108
+ module === 'forgeax::default-standard-pbr-skin')
109
+ );
110
+ });
111
+ }
112
+
92
113
  function clone<T>(value: T): T {
93
114
  return structuredClone(value);
94
115
  }
@@ -384,6 +405,9 @@ export async function buildScriptablePack(
384
405
  const imported: ImportedAsset<unknown>[] = [];
385
406
  const stagedOutputs: ScriptablePackStagedOutput[] = [];
386
407
  const localGuids = new Set<string>();
408
+ const materialCookerRegistry = new NativeCookerRegistry();
409
+ for (const cooker of options.cookers ?? []) materialCookerRegistry.register(cooker);
410
+ const nativeFingerprints = new Map<string, string>();
387
411
  for (const sourceKey of Object.keys(built.value).sort()) {
388
412
  if (!isValidPackSourceKey(sourceKey))
389
413
  return err(sourceKeyFailure(options.sourcePath, sourceKey));
@@ -459,12 +483,40 @@ export async function buildScriptablePack(
459
483
  const invalidProduct = productError(options.sourcePath, sourceKey, producer, produced.value);
460
484
  if (invalidProduct !== undefined) return err(invalidProduct);
461
485
  const product = produced.value as ImportAssetProduct<unknown>;
486
+ let payload = product.payload;
487
+ let artifacts = product.artifacts;
488
+ if (needsMaterialCook(asset) && materialCookerRegistry.get('material') !== undefined) {
489
+ const cooked = await materialCookerRegistry.runDraft('material', {
490
+ guid,
491
+ source: asset,
492
+ sourceKey,
493
+ sourcePath: options.sourcePath,
494
+ refs: product.refs.map((reference) => reference.guid),
495
+ });
496
+ if (!cooked.ok) return err(cooked.error);
497
+ if (cooked.value.guid.toLowerCase() !== normalizedGuid) {
498
+ return err({
499
+ code: 'pack-source-output-invalid',
500
+ expected: 'the authored material cooker to preserve the derived AssetGuid',
501
+ hint: 'repair the native material cooker output GUID and rebuild the Pack',
502
+ detail: {
503
+ sourcePath: options.sourcePath,
504
+ sourceKey,
505
+ expectedGuid: guid,
506
+ actualGuid: cooked.value.guid,
507
+ },
508
+ });
509
+ }
510
+ payload = cooked.value.payload;
511
+ artifacts = cooked.value.artifacts;
512
+ nativeFingerprints.set(sourceKey, cooked.value.inputFingerprint);
513
+ }
462
514
  imported.push({
463
515
  guid,
464
516
  kind: asset.kind,
465
- payload: product.payload,
517
+ payload,
466
518
  refs: product.refs,
467
- artifacts: product.artifacts,
519
+ artifacts,
468
520
  });
469
521
  stagedOutputs.push({
470
522
  guid: AssetGuid.derive(subjectPackageId, sourceKey),
@@ -499,7 +551,7 @@ export async function buildScriptablePack(
499
551
  digest: read.digest,
500
552
  }),
501
553
  );
502
- const inputFingerprint = await digest({
554
+ const authoredInputFingerprint = await digest({
503
555
  packageId: PackageId.format(subjectPackageId),
504
556
  sourcePath: options.sourcePath,
505
557
  sourceClosure: options.sourceClosure ?? [],
@@ -512,6 +564,15 @@ export async function buildScriptablePack(
512
564
  authoringContractVersion: options.authoringContractVersion ?? 'scriptable-pack/1',
513
565
  producerVersions: options.outputs.versions(),
514
566
  });
567
+ const inputFingerprint =
568
+ nativeFingerprints.size === 0
569
+ ? authoredInputFingerprint
570
+ : await digest({
571
+ sourceRevision: authoredInputFingerprint,
572
+ nativeCookers: [...nativeFingerprints.entries()].sort(([left], [right]) =>
573
+ left.localeCompare(right),
574
+ ),
575
+ });
515
576
  const refs = imported.flatMap((asset) => asset.refs);
516
577
  const artifacts = Object.fromEntries(
517
578
  imported.flatMap((asset) =>
@@ -555,6 +616,8 @@ export interface ScriptablePackBuildWorkItem {
555
616
  export interface ScriptablePackBuildWorklistOptions {
556
617
  readonly subjects: readonly ScriptablePackBuildWorkItem[];
557
618
  readonly outputs: AssetOutputProducerRegistry;
619
+ /** Optional build-time cookers forwarded to each authored Pack subject. */
620
+ readonly cookers?: readonly NativeCooker[];
558
621
  readonly assetSource?: ScriptablePackAssetSnapshotSource;
559
622
  readonly availableGuids?: ReadonlySet<string>;
560
623
  readonly incomingRefs?: ReadonlyMap<string, readonly string[]>;
@@ -644,6 +707,7 @@ export async function buildScriptablePackWorklist(
644
707
  : { inheritedValues: subject.inheritedValues }),
645
708
  ...(subject.sourceClosure === undefined ? {} : { sourceClosure: subject.sourceClosure }),
646
709
  outputs: options.outputs,
710
+ ...(options.cookers === undefined ? {} : { cookers: options.cookers }),
647
711
  assetSource: stagedSource(staged, options.assetSource),
648
712
  availableGuids: new Set([...availableGuids, ...staged.keys()]),
649
713
  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 }),