@forgeax/engine-pack 0.1.21 → 0.1.23

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.
Files changed (124) hide show
  1. package/README.md +159 -46
  2. package/dist/__tests__/inventory-schema.test.d.ts +2 -0
  3. package/dist/__tests__/inventory-schema.test.d.ts.map +1 -0
  4. package/dist/__tests__/parameterized-pack-authoring-gateway.unit.test.d.ts +2 -0
  5. package/dist/__tests__/parameterized-pack-authoring-gateway.unit.test.d.ts.map +1 -0
  6. package/dist/__tests__/parameterized-pack-scanner.unit.test.d.ts +2 -0
  7. package/dist/__tests__/parameterized-pack-scanner.unit.test.d.ts.map +1 -0
  8. package/dist/__tests__/parameterized-pack.unit.test.d.ts +2 -0
  9. package/dist/__tests__/parameterized-pack.unit.test.d.ts.map +1 -0
  10. package/dist/__tests__/scanner-blacklist.test.d.ts +2 -0
  11. package/dist/__tests__/scanner-blacklist.test.d.ts.map +1 -0
  12. package/dist/build.d.ts +9 -4
  13. package/dist/build.d.ts.map +1 -1
  14. package/dist/build.mjs +3314 -803
  15. package/dist/build.mjs.map +1 -1
  16. package/dist/builtin.mjs +37 -4
  17. package/dist/builtin.mjs.map +1 -1
  18. package/dist/catalog-builder.d.ts.map +1 -1
  19. package/dist/cli-asset.d.ts.map +1 -1
  20. package/dist/cli-asset.mjs +1368 -850
  21. package/dist/cli-asset.mjs.map +1 -1
  22. package/dist/deriveAssetName.d.ts +11 -7
  23. package/dist/deriveAssetName.d.ts.map +1 -1
  24. package/dist/evidence/source-inventory.d.ts.map +1 -1
  25. package/dist/guid.d.ts +15 -0
  26. package/dist/guid.d.ts.map +1 -1
  27. package/dist/guid.mjs +53 -5
  28. package/dist/guid.mjs.map +1 -1
  29. package/dist/index.d.ts +3 -1
  30. package/dist/index.d.ts.map +1 -1
  31. package/dist/index.mjs +1252 -560
  32. package/dist/index.mjs.map +1 -1
  33. package/dist/inventory/binding.d.ts +6 -0
  34. package/dist/inventory/binding.d.ts.map +1 -0
  35. package/dist/inventory/declaration.d.ts +24 -0
  36. package/dist/inventory/declaration.d.ts.map +1 -0
  37. package/dist/inventory/index.d.ts +3 -0
  38. package/dist/inventory/index.d.ts.map +1 -0
  39. package/dist/inventory/sync.d.ts +5 -0
  40. package/dist/inventory/sync.d.ts.map +1 -0
  41. package/dist/name.mjs +4 -7
  42. package/dist/name.mjs.map +1 -1
  43. package/dist/package-finalizer.d.ts +2 -20
  44. package/dist/package-finalizer.d.ts.map +1 -1
  45. package/dist/parameterized-pack-node.d.ts +26 -0
  46. package/dist/parameterized-pack-node.d.ts.map +1 -0
  47. package/dist/parameterized-pack-node.mjs +11093 -0
  48. package/dist/parameterized-pack-node.mjs.map +1 -0
  49. package/dist/parameterized-pack.d.ts +233 -0
  50. package/dist/parameterized-pack.d.ts.map +1 -0
  51. package/dist/resolve-asset-source.d.ts +1 -3
  52. package/dist/resolve-asset-source.d.ts.map +1 -1
  53. package/dist/resolve-asset-source.mjs +6 -81
  54. package/dist/resolve-asset-source.mjs.map +1 -1
  55. package/dist/runtime.mjs +77 -7
  56. package/dist/runtime.mjs.map +1 -1
  57. package/dist/scanner.d.ts +19 -8
  58. package/dist/scanner.d.ts.map +1 -1
  59. package/dist/scanner.mjs +1169 -690
  60. package/dist/scanner.mjs.map +1 -1
  61. package/dist/schema-compiled.d.ts.map +1 -1
  62. package/dist/schema.mjs +79 -7
  63. package/dist/schema.mjs.map +1 -1
  64. package/dist/scriptable-pack-node.d.ts +8 -32
  65. package/dist/scriptable-pack-node.d.ts.map +1 -1
  66. package/dist/scriptable-pack-node.mjs +576 -1021
  67. package/dist/scriptable-pack-node.mjs.map +1 -1
  68. package/dist/scriptable-pack-worker.mjs +29 -11
  69. package/dist/scriptable-pack-worker.mjs.map +1 -1
  70. package/dist/scriptable-pack.d.ts +19 -532
  71. package/dist/scriptable-pack.d.ts.map +1 -1
  72. package/dist/scriptable-pack.mjs +1042 -527
  73. package/dist/scriptable-pack.mjs.map +1 -1
  74. package/package.json +7 -7
  75. package/schema/meta.schema.json +1 -1
  76. package/schema/pack.schema.json +76 -6
  77. package/src/__tests__/guid-collision.unit.test.ts +18 -9
  78. package/src/__tests__/inventory-schema.test.ts +109 -0
  79. package/src/__tests__/pack.unit.test.ts +1 -238
  80. package/src/__tests__/package-finalizer.contract.test.ts +55 -0
  81. package/src/__tests__/parameterized-pack-authoring-gateway.unit.test.ts +249 -0
  82. package/src/__tests__/parameterized-pack-scanner.unit.test.ts +123 -0
  83. package/src/__tests__/parameterized-pack.unit.test.ts +266 -0
  84. package/src/__tests__/resolve-asset-source.test.ts +15 -98
  85. package/src/__tests__/scanner-blacklist.test.ts +55 -0
  86. package/src/__tests__/scanner-inventory.contract.test.ts +14 -15
  87. package/src/__tests__/scanner-inventory.test.ts +24 -12
  88. package/src/__tests__/scriptable-pack-cli.integration.test.ts +4 -9
  89. package/src/__tests__/topology.unit.test.ts +23 -0
  90. package/src/build.ts +28 -18
  91. package/src/catalog-builder.ts +61 -34
  92. package/src/cli-asset.ts +70 -85
  93. package/src/deriveAssetName.ts +14 -13
  94. package/src/evidence/source-inventory.ts +34 -21
  95. package/src/guid.ts +65 -4
  96. package/src/index.ts +12 -11
  97. package/src/inventory/binding.ts +25 -0
  98. package/src/inventory/declaration.ts +168 -0
  99. package/src/inventory/index.ts +18 -0
  100. package/src/inventory/sync.ts +22 -0
  101. package/src/package-finalizer.ts +2 -42
  102. package/src/parameterized-pack-node.ts +1968 -0
  103. package/src/parameterized-pack.ts +1493 -0
  104. package/src/resolve-asset-source.ts +4 -76
  105. package/src/scanner.ts +241 -59
  106. package/src/schema-compiled.ts +2 -0
  107. package/src/scriptable-pack-node.ts +111 -722
  108. package/src/scriptable-pack-worker.ts +48 -16
  109. package/src/scriptable-pack.ts +27 -939
  110. package/dist/.tsbuildinfo +0 -1
  111. package/dist/__tests__/load-asset-config.test.d.ts +0 -2
  112. package/dist/__tests__/load-asset-config.test.d.ts.map +0 -1
  113. package/dist/__tests__/scriptable-pack.test-d.d.ts +0 -2
  114. package/dist/__tests__/scriptable-pack.test-d.d.ts.map +0 -1
  115. package/dist/__tests__/scriptable-pack.unit.test.d.ts +0 -2
  116. package/dist/__tests__/scriptable-pack.unit.test.d.ts.map +0 -1
  117. package/dist/config.d.ts +0 -6
  118. package/dist/config.d.ts.map +0 -1
  119. package/dist/config.mjs +0 -29
  120. package/dist/config.mjs.map +0 -1
  121. package/src/__tests__/load-asset-config.test.ts +0 -121
  122. package/src/__tests__/scriptable-pack.test-d.ts +0 -131
  123. package/src/__tests__/scriptable-pack.unit.test.ts +0 -789
  124. package/src/config.ts +0 -36
@@ -0,0 +1,233 @@
1
+ import type { Asset, AssetGuid, Result } from '@forgeax/engine-types';
2
+ import { PackageId } from './guid.js';
3
+ import type { ScriptablePackSceneComponentInput } from './scriptable-pack.js';
4
+ /** Values deliberately stay finite and serialisable at the authoring boundary. */
5
+ export type PackParameterScalar = boolean | number | string;
6
+ export type PackParameterValue = PackParameterScalar | readonly number[] | AssetGuid;
7
+ export type PackParameterType = 'bool' | 'u32' | 'i32' | 'f32' | 'f64' | 'string' | 'enum' | 'vec2' | 'vec3' | 'vec4' | 'color' | 'asset-guid';
8
+ export declare const PACK_PARAMETER_TYPES: readonly ["bool", "u32", "i32", "f32", "f64", "string", "enum", "vec2", "vec3", "vec4", "color", "asset-guid"];
9
+ export interface PackParameterDefinition<TName extends string = string, TType extends PackParameterType = PackParameterType, TDefault extends PackParameterValue = PackParameterValue> {
10
+ readonly name: TName;
11
+ readonly type: TType;
12
+ readonly default: TDefault;
13
+ readonly minimum?: number;
14
+ readonly maximum?: number;
15
+ /** Closed choices are required for `enum` and forbidden for other types. */
16
+ readonly values?: readonly PackParameterScalar[];
17
+ /** Optional authoring-only kind constraint for asset GUID parameters. */
18
+ readonly kind?: Asset['kind'];
19
+ }
20
+ export type PackParameterValueFor<T extends PackParameterType> = T extends 'bool' ? boolean : T extends 'u32' | 'i32' | 'f32' | 'f64' ? number : T extends 'string' | 'enum' ? string : T extends 'vec2' ? readonly [number, number] : T extends 'vec3' ? readonly [number, number, number] : T extends 'vec4' | 'color' ? readonly [number, number, number, number] : T extends 'asset-guid' ? AssetGuid : never;
21
+ export type PackParameterValues<TParameters extends readonly PackParameterDefinition[]> = Readonly<{
22
+ [TParameter in TParameters[number] as TParameter['name']]: TParameter extends {
23
+ readonly type: infer TType extends PackParameterType;
24
+ } ? TType extends 'enum' ? TParameter extends {
25
+ readonly values: readonly (infer TValue)[];
26
+ } ? Extract<TValue, string> : string : PackParameterValueFor<TType> : never;
27
+ }>;
28
+ export interface PackAuthoringError {
29
+ readonly code: PackAuthoringErrorCode;
30
+ readonly expected: string;
31
+ readonly hint: string;
32
+ readonly actual?: string;
33
+ readonly detail: Readonly<Record<string, unknown>>;
34
+ }
35
+ export type PackAuthoringErrorCode = 'pack-package-id-invalid' | 'pack-package-id-collision' | 'pack-source-key-invalid' | 'pack-guid-collision' | 'pack-parent-not-found' | 'pack-parent-cycle' | 'pack-parent-not-parameterized' | 'pack-parameter-invalid' | 'pack-content-dependency-stalled' | 'pack-output-reference-missing' | 'pack-output-reference-conflict' | 'pack-output-not-materialized' | 'asset-not-ready' | 'pack-source-revision-conflict' | 'pack-source-path-invalid' | 'pack-source-not-found' | 'pack-source-mutation-unsupported' | 'pack-source-write-failed';
36
+ export interface PackBuildReadContext {
37
+ readByGuid<TAsset extends Asset = Asset>(guid: AssetGuid): Promise<Result<TAsset, unknown>>;
38
+ }
39
+ export interface PackBuildContextWithoutParameters extends PackBuildReadContext {
40
+ readonly packageId: PackageId;
41
+ }
42
+ export interface PackBuildContextWithParameters<TParameters extends readonly PackParameterDefinition[]> extends PackBuildReadContext {
43
+ readonly packageId: PackageId;
44
+ readonly values: PackParameterValues<TParameters>;
45
+ }
46
+ export type PackBuildContext<TParameters extends readonly PackParameterDefinition[] | undefined> = TParameters extends readonly PackParameterDefinition[] ? PackBuildContextWithParameters<TParameters> : PackBuildContextWithoutParameters;
47
+ export type PackOutputMap = Readonly<Record<string, Asset>>;
48
+ export type PackBuildResult<TError = unknown> = Result<PackOutputMap, TError> | Promise<Result<PackOutputMap, TError>>;
49
+ interface PackDefinitionBase {
50
+ readonly schemaVersion: '2.0.0';
51
+ readonly packageId: PackageId;
52
+ readonly name?: string;
53
+ /** Neutral component schemas used only to externalize SceneAsset refs at cook time. */
54
+ readonly sceneComponents?: readonly ScriptablePackSceneComponentInput[];
55
+ }
56
+ export type ParameterizedPackDefinition<TParameters extends readonly PackParameterDefinition[] | undefined = undefined> = PackDefinitionBase & (TParameters extends readonly PackParameterDefinition[] ? {
57
+ readonly parameters: TParameters;
58
+ readonly build: (context: PackBuildContextWithParameters<TParameters>) => PackBuildResult;
59
+ } : {
60
+ readonly build: (context: PackBuildContextWithoutParameters) => PackBuildResult;
61
+ });
62
+ export type PackDefinition = ParameterizedPackDefinition<undefined> | ParameterizedPackDefinition<readonly [PackParameterDefinition, ...PackParameterDefinition[]]>;
63
+ export type PackParameterList = readonly [PackParameterDefinition, ...PackParameterDefinition[]];
64
+ type NonEmptyParameters = PackParameterList;
65
+ type NoParameterPackInput = PackDefinitionBase & {
66
+ readonly parameters?: never;
67
+ readonly build: (context: PackBuildContextWithoutParameters) => PackBuildResult;
68
+ };
69
+ type ParameterizedPackInput<TParameters extends NonEmptyParameters> = PackDefinitionBase & {
70
+ readonly parameters: TParameters;
71
+ readonly build: (context: PackBuildContextWithParameters<TParameters>) => PackBuildResult;
72
+ };
73
+ /** Convert a UUID literal into the distinct Pack-level identity brand. */
74
+ export declare function definePackageId(value: string | PackageId): PackageId;
75
+ /**
76
+ * Define the only executable authoring shape. A missing `parameters` property
77
+ * is meaningful: its build context has no `values` member.
78
+ */
79
+ export declare function definePack(definition: NoParameterPackInput): ParameterizedPackDefinition<undefined>;
80
+ export declare function definePack<const TParameters extends NonEmptyParameters>(definition: ParameterizedPackInput<TParameters>): ParameterizedPackDefinition<TParameters>;
81
+ /** Union used only at orchestration boundaries that accept either source form. */
82
+ export type AnyParameterizedPackDefinition = ParameterizedPackDefinition<PackParameterList> | ParameterizedPackDefinition<undefined>;
83
+ export interface ParameterizedPackSourceMeta {
84
+ readonly schemaVersion: '2.0.0';
85
+ readonly kind: 'parameterized-pack-source';
86
+ readonly packageId: string;
87
+ readonly source: string;
88
+ readonly parameters?: readonly Readonly<Record<string, unknown>>[];
89
+ }
90
+ /** Ephemeral scan evidence; it intentionally contains no output GUID table. */
91
+ export declare function projectParameterizedPackMeta(definition: AnyParameterizedPackDefinition, sourcePath: string): ParameterizedPackSourceMeta;
92
+ /** Runtime validation used by the isolated module loader and source scanner. */
93
+ export declare function validatePackDefinition(value: unknown, sourcePath?: string): Result<ParameterizedPackDefinition<NonEmptyParameters> | ParameterizedPackDefinition<undefined>, PackAuthoringError>;
94
+ export declare function isParameterizedPack(value: ParameterizedPackDefinition | unknown): value is ParameterizedPackDefinition<NonEmptyParameters>;
95
+ /** Resolve defaults plus a sparse instance override with shallow replacement. */
96
+ export declare function resolvePackParameterValues(definition: ParameterizedPackDefinition<NonEmptyParameters>, overrides?: unknown, inheritedValues?: Readonly<Record<string, PackParameterValue>>): Result<PackParameterValues<NonEmptyParameters>, PackAuthoringError>;
97
+ export interface DirectPackJsonAsset {
98
+ readonly kind: string;
99
+ readonly payload: Readonly<Record<string, unknown>>;
100
+ readonly refs: readonly string[];
101
+ readonly name?: string;
102
+ readonly artifacts?: Readonly<Record<string, Readonly<Record<string, unknown>>>>;
103
+ }
104
+ export interface DirectPackJson {
105
+ readonly schemaVersion: '3.0.0';
106
+ readonly packageId: string;
107
+ readonly assets: Readonly<Record<string, DirectPackJsonAsset>>;
108
+ }
109
+ export interface PackInstanceJson {
110
+ readonly schemaVersion: '3.0.0';
111
+ readonly packageId: string;
112
+ readonly parent: string;
113
+ readonly values: Readonly<Record<string, unknown>>;
114
+ }
115
+ export interface ParsedDirectPackJson {
116
+ readonly format: 'direct';
117
+ readonly schemaVersion: '3.0.0';
118
+ readonly packageId: PackageId;
119
+ readonly assets: Readonly<Record<string, DirectPackJsonAsset>>;
120
+ }
121
+ export interface ParsedPackInstanceJson {
122
+ readonly format: 'instance';
123
+ readonly schemaVersion: '3.0.0';
124
+ readonly packageId: PackageId;
125
+ readonly parent: PackageId;
126
+ readonly values: Readonly<Record<string, unknown>>;
127
+ }
128
+ export type ParsedPackJson = ParsedDirectPackJson | ParsedPackInstanceJson;
129
+ /** Parse the two mutually exclusive v3 pack.json branches. */
130
+ export declare function parseParameterizedPackJson(value: unknown): Result<ParsedPackJson, PackAuthoringError>;
131
+ export declare const parsePackJson: typeof parseParameterizedPackJson;
132
+ export declare const parsePackAuthoringJson: typeof parseParameterizedPackJson;
133
+ export interface DirectPackAssetProjection extends DirectPackJsonAsset {
134
+ readonly guid: string;
135
+ readonly sourceKey: string;
136
+ }
137
+ export interface DirectPackProjection {
138
+ readonly packageId: string;
139
+ readonly assets: readonly DirectPackAssetProjection[];
140
+ }
141
+ /** Add the computed GUIDs needed by the ordinary Pack v2 publication path. */
142
+ export declare function projectDirectPackJson(value: ParsedDirectPackJson | DirectPackJson): Result<DirectPackProjection, PackAuthoringError>;
143
+ export interface PackParameterRootSubject {
144
+ readonly format: 'source';
145
+ readonly packageId: PackageId;
146
+ readonly parameters: readonly PackParameterDefinition[];
147
+ }
148
+ export interface PackParameterInstanceSubject {
149
+ readonly format: 'instance';
150
+ readonly packageId: PackageId;
151
+ readonly parent: PackageId;
152
+ readonly values: Readonly<Record<string, unknown>>;
153
+ }
154
+ export interface PackDirectSubject {
155
+ readonly format: 'direct';
156
+ readonly packageId: PackageId;
157
+ }
158
+ export type PackParameterInheritanceSubject = PackParameterRootSubject | PackParameterInstanceSubject | PackDirectSubject;
159
+ export interface ResolvedPackParameterInheritance {
160
+ readonly packageId: PackageId;
161
+ readonly rootPackageId: PackageId;
162
+ readonly values: Readonly<Record<string, PackParameterValue>>;
163
+ readonly parentChain: readonly string[];
164
+ readonly parameters: readonly PackParameterDefinition[];
165
+ }
166
+ export type PackParameterSubjectReader = (packageId: PackageId) => PackParameterInheritanceSubject | undefined | Promise<PackParameterInheritanceSubject | undefined>;
167
+ /** Resolve one finite parent chain. Every instance keeps its own packageId. */
168
+ export declare function resolvePackParameterInheritance(subject: PackParameterInheritanceSubject, readParent: PackParameterSubjectReader): Promise<Result<ResolvedPackParameterInheritance, PackAuthoringError>>;
169
+ export declare const resolvePackInheritance: typeof resolvePackParameterInheritance;
170
+ export declare const PARAMETERIZED_PACK_OPERATION_IDS: readonly ["asset.list", "asset.inspect", "asset.resolve", "asset.verify", "asset-source.create", "asset-source.clone", "asset-source.create-instance", "asset-source.apply-values", "asset-source.rebuild", "asset-source.cold-cook"];
171
+ export type ParameterizedPackOperationId = (typeof PARAMETERIZED_PACK_OPERATION_IDS)[number];
172
+ export interface ParameterizedPackOperation {
173
+ readonly requestId: string;
174
+ readonly expectedRevision?: string;
175
+ readonly operation: ParameterizedPackOperationId;
176
+ readonly subject?: string;
177
+ readonly sourcePath?: string;
178
+ readonly targetPath?: string;
179
+ readonly packageId?: string;
180
+ /** Parent package identity used by asset-source.create-instance. */
181
+ readonly parentPackageId?: string;
182
+ /** JSON-facing alias accepted by adapters at the operation boundary. */
183
+ readonly parent?: string;
184
+ readonly sourceKey?: string;
185
+ readonly values?: Readonly<Record<string, unknown>>;
186
+ /** `pack.ts` or `pack.json`; omitted defaults to the target extension. */
187
+ readonly format?: 'pack.ts' | 'pack.json';
188
+ /** Direct v3 entries for asset-source.create. */
189
+ readonly initialAssets?: Readonly<Record<string, DirectPackJsonAsset>>;
190
+ /** Explicit non-empty parameter declarations for a generated pack.ts scaffold. */
191
+ readonly parameters?: readonly Readonly<Record<string, unknown>>[];
192
+ /** Required proof level for asset.resolve. */
193
+ readonly require?: 'identity' | 'present' | 'ready';
194
+ }
195
+ export type ParameterizedPackResolutionStatus = 'identity' | 'present' | 'ready';
196
+ export interface ParameterizedPackOperationResult {
197
+ readonly operation: ParameterizedPackOperationId;
198
+ readonly requestId: string;
199
+ readonly sourcePath?: string;
200
+ readonly targetPath?: string;
201
+ readonly revision?: string;
202
+ readonly packageId?: string;
203
+ readonly parentPackageId?: string;
204
+ readonly sourceKey?: string;
205
+ readonly guid?: string;
206
+ readonly format?: 'pack.ts' | 'pack.json' | 'direct' | 'instance';
207
+ readonly status?: ParameterizedPackResolutionStatus;
208
+ readonly kind?: string;
209
+ readonly parameters?: readonly Readonly<Record<string, unknown>>[];
210
+ readonly values?: Readonly<Record<string, unknown>>;
211
+ readonly effectiveValues?: Readonly<Record<string, unknown>>;
212
+ readonly parentChain?: readonly string[];
213
+ readonly assets?: readonly Readonly<Record<string, unknown>>[];
214
+ readonly sources?: readonly Readonly<Record<string, unknown>>[];
215
+ readonly capabilities?: readonly ParameterizedPackOperationId[];
216
+ readonly snapshot?: {
217
+ readonly sourceCount: number;
218
+ readonly assetCount: number;
219
+ };
220
+ }
221
+ export interface ParameterizedPackGatewayPort<TResult = unknown> {
222
+ execute(operation: ParameterizedPackOperation): Promise<Result<TResult, PackAuthoringError>>;
223
+ }
224
+ /** One idempotent gateway wrapper shared by Editor and CLI adapters. */
225
+ export declare function createParameterizedPackAuthoringGateway<TResult = unknown>(port: ParameterizedPackGatewayPort<TResult>): ParameterizedPackGatewayPort<TResult>;
226
+ export declare const PARAMETERIZED_PACK_OPERATION_DESCRIPTORS: readonly {
227
+ id: ParameterizedPackOperationId;
228
+ domain: "asset" | "session";
229
+ readOnly: boolean;
230
+ requiresRevision: boolean;
231
+ }[];
232
+ export {};
233
+ //# sourceMappingURL=parameterized-pack.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parameterized-pack.d.ts","sourceRoot":"","sources":["../src/parameterized-pack.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,2 @@
1
- import type { Result } from '@forgeax/engine-types';
2
- import { PackError } from './errors.js';
3
- export declare function resolveAssetSource(metaPath: string, source: string | undefined, paths: Record<string, string>): Result<string, PackError>;
1
+ export declare function resolveAssetSource(metaPath: string, source: string | undefined): string;
4
2
  //# sourceMappingURL=resolve-asset-source.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"resolve-asset-source.d.ts","sourceRoot":"","sources":["../src/resolve-asset-source.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAGpD,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAaxC,wBAAgB,kBAAkB,CAChC,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,GAAG,SAAS,EAC1B,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAC5B,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,CAkE3B"}
1
+ {"version":3,"file":"resolve-asset-source.d.ts","sourceRoot":"","sources":["../src/resolve-asset-source.ts"],"names":[],"mappings":"AAOA,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,CAQvF"}
@@ -1,5 +1,4 @@
1
- import { dirname, resolve, posix } from 'path';
2
- import { ok, err, PACK_ERROR_HINTS } from '@forgeax/engine-types';
1
+ import { dirname, resolve } from 'path';
3
2
 
4
3
  // src/resolve-asset-source.ts
5
4
 
@@ -9,99 +8,25 @@ function baseName(p) {
9
8
  const idx = Math.max(trimmed.lastIndexOf("/"), trimmed.lastIndexOf("\\"));
10
9
  return idx === -1 ? trimmed : trimmed.slice(idx + 1);
11
10
  }
12
- function deriveAssetName(packagePath, assetCount, storedName) {
11
+ function deriveAssetName(packagePath, _assetCount, storedName) {
13
12
  if (packagePath === null) {
14
13
  return "";
15
14
  }
16
- {
17
- return baseName(packagePath);
18
- }
15
+ return baseName(packagePath);
19
16
  }
20
17
 
21
- // src/errors.ts
22
- var PackError = class extends Error {
23
- code;
24
- expected;
25
- hint;
26
- detail;
27
- constructor(args) {
28
- super(`[PackError ${args.code}] expected: ${args.expected}; hint: ${args.hint}`);
29
- this.name = "PackError";
30
- this.code = args.code;
31
- this.expected = args.expected;
32
- this.hint = args.hint;
33
- this.detail = args.detail;
34
- }
35
- };
36
-
37
18
  // src/resolve-asset-source.ts
38
19
  function deriveSourceName(metaFileName) {
39
20
  return metaFileName.replace(/\.meta\.json$/, "");
40
21
  }
41
- var PATH_REF_RE = /^@([^/]+)\/(.+)$/;
42
- function isPathEscape(pathDir, resolved) {
43
- const rel = posix.relative(pathDir, resolved);
44
- return rel.startsWith("..") || posix.isAbsolute(rel);
45
- }
46
- function resolveAssetSource(metaPath, source, paths) {
22
+ function resolveAssetSource(metaPath, source) {
47
23
  if (source === void 0) {
48
24
  const metaDir = dirname(metaPath);
49
25
  const metaName = deriveAssetName(metaPath);
50
26
  const derived = deriveSourceName(metaName);
51
- return ok(resolve(metaDir, derived));
52
- }
53
- if (source.startsWith("@")) {
54
- const match = source.match(PATH_REF_RE);
55
- if (!match) {
56
- return err(
57
- new PackError({
58
- code: "pack-malformed-path-ref",
59
- expected: "source in format @<name>/<rest>",
60
- hint: PACK_ERROR_HINTS["pack-malformed-path-ref"],
61
- detail: {
62
- code: "pack-malformed-path-ref",
63
- reason: "format",
64
- rawSource: source,
65
- expectedFormat: "@<name>/<rest>"
66
- }
67
- })
68
- );
69
- }
70
- const [, name, rest] = match;
71
- const pathDir = paths[name];
72
- if (pathDir === void 0) {
73
- return err(
74
- new PackError({
75
- code: "pack-unknown-path",
76
- expected: "path name found in package.json#forgeax.assets.paths",
77
- hint: PACK_ERROR_HINTS["pack-unknown-path"],
78
- detail: {
79
- code: "pack-unknown-path",
80
- pathName: name,
81
- knownNames: Object.keys(paths)
82
- }
83
- })
84
- );
85
- }
86
- const resolved = resolve(pathDir, rest);
87
- if (isPathEscape(pathDir, resolved)) {
88
- return err(
89
- new PackError({
90
- code: "pack-malformed-path-ref",
91
- expected: "rest path must not escape the declared path directory",
92
- hint: PACK_ERROR_HINTS["pack-malformed-path-ref"],
93
- detail: {
94
- code: "pack-malformed-path-ref",
95
- reason: "escape",
96
- rawSource: source,
97
- expectedFormat: "@<name>/<rest>"
98
- }
99
- })
100
- );
101
- }
102
- return ok(resolved);
27
+ return resolve(metaDir, derived);
103
28
  }
104
- return ok(resolve(dirname(metaPath), source));
29
+ return resolve(dirname(metaPath), source);
105
30
  }
106
31
 
107
32
  export { resolveAssetSource };
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/deriveAssetName.ts","../src/errors.ts","../src/resolve-asset-source.ts"],"names":["resultOk","resultErr"],"mappings":"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","file":"resolve-asset-source.mjs","sourcesContent":["/**\n * Last path segment of a `/`- or `\\`-separated path, trailing separators\n * stripped. Inlined rather than imported from `node:path` so this module stays\n * browser-safe: the dev-server pack path (`vite-plugin-pack` `/__pack/`) runs\n * `buildCatalog` -> `deriveAssetName` in client code where `node:path` is\n * externalized and `path.basename` throws.\n */\nfunction baseName(p: string): string {\n const trimmed = p.replace(/[/\\\\]+$/, '');\n const idx = Math.max(trimmed.lastIndexOf('/'), trimmed.lastIndexOf('\\\\'));\n return idx === -1 ? trimmed : trimmed.slice(idx + 1);\n}\n\n/**\n * Derive an asset's display name from package metadata.\n *\n * Pure function -- zero IO, zero side effects, browser-safe. Build-time\n * (build-catalog) and runtime (resolveName) share this single source of truth\n * for the XOR name-resolution rules (plan-strategy D-6).\n *\n * Branches:\n * 1. single-asset package (assetCount === 1) -> baseName(packagePath)\n * 2. multi-asset package + storedName -> storedName\n * 3. multi-asset package + no storedName (AC-15.1) -> baseName(packagePath)\n * 4. null packagePath + no storedName (AC-15.2) -> ''\n */\nexport function deriveAssetName(\n packagePath: string | null,\n assetCount: number,\n storedName?: string,\n): string {\n if (packagePath === null) {\n return storedName ?? '';\n }\n if (assetCount === 1) {\n return baseName(packagePath);\n }\n if (storedName !== undefined) {\n return storedName;\n }\n return baseName(packagePath);\n}\n","// errors.ts — PackError class (feat-20260513-guid-asset-package-system w15)\n//\n// Four-field surface: .code / .expected / .hint / .detail\n// Structurally parallel to AssetError / RhiError / RemoteError\n// (charter proposition 5 consistent abstraction).\n//\n// .detail is narrowed per .code via PackErrorDetail discriminated union\n// (requirements §6.2 AC-07; plan-strategy §D-5).\n\nimport type { PackErrorCode, PackErrorDetail } from '@forgeax/engine-types';\n\n/**\n * Structured error for the engine-pack disk scanner fail-fast chain.\n *\n * AI users consume via exhaustive switch on .code — no default case needed:\n * ```ts\n * switch (err.code) {\n * case 'pack-guid-collision':\n * console.error(err.detail.paths);\n * break;\n * case 'pack-cyclic-reference':\n * console.error(err.detail.cycle);\n * break;\n * // ...all 8 cases\n * }\n * ```\n */\nexport class PackError extends Error {\n readonly code: PackErrorCode;\n readonly expected: string;\n readonly hint: string;\n readonly detail: PackErrorDetail;\n\n constructor(args: {\n code: PackErrorCode;\n expected: string;\n hint: string;\n detail: PackErrorDetail;\n }) {\n super(`[PackError ${args.code}] expected: ${args.expected}; hint: ${args.hint}`);\n this.name = 'PackError';\n this.code = args.code;\n this.expected = args.expected;\n this.hint = args.hint;\n this.detail = args.detail;\n }\n}\n","import { dirname, posix, resolve } from 'node:path';\nimport type { Result } from '@forgeax/engine-types';\nimport { PACK_ERROR_HINTS, err as resultErr, ok as resultOk } from '@forgeax/engine-types';\nimport { deriveAssetName } from './deriveAssetName.js';\nimport { PackError } from './errors.js';\n\nfunction deriveSourceName(metaFileName: string): string {\n return metaFileName.replace(/\\.meta\\.json$/, '');\n}\n\nconst PATH_REF_RE = /^@([^/]+)\\/(.+)$/;\n\nfunction isPathEscape(pathDir: string, resolved: string): boolean {\n const rel = posix.relative(pathDir, resolved);\n return rel.startsWith('..') || posix.isAbsolute(rel);\n}\n\nexport function resolveAssetSource(\n metaPath: string,\n source: string | undefined,\n paths: Record<string, string>,\n): Result<string, PackError> {\n if (source === undefined) {\n const metaDir = dirname(metaPath);\n const metaName = deriveAssetName(metaPath, 1);\n const derived = deriveSourceName(metaName);\n return resultOk(resolve(metaDir, derived));\n }\n\n if (source.startsWith('@')) {\n const match = source.match(PATH_REF_RE);\n if (!match) {\n return resultErr(\n new PackError({\n code: 'pack-malformed-path-ref',\n expected: 'source in format @<name>/<rest>',\n hint: PACK_ERROR_HINTS['pack-malformed-path-ref'],\n detail: {\n code: 'pack-malformed-path-ref',\n reason: 'format',\n rawSource: source,\n expectedFormat: '@<name>/<rest>',\n },\n }),\n );\n }\n\n const [, name, rest] = match as [string, string, string];\n const pathDir = paths[name];\n\n if (pathDir === undefined) {\n return resultErr(\n new PackError({\n code: 'pack-unknown-path',\n expected: 'path name found in package.json#forgeax.assets.paths',\n hint: PACK_ERROR_HINTS['pack-unknown-path'],\n detail: {\n code: 'pack-unknown-path',\n pathName: name,\n knownNames: Object.keys(paths),\n },\n }),\n );\n }\n\n const resolved = resolve(pathDir, rest);\n\n if (isPathEscape(pathDir, resolved)) {\n return resultErr(\n new PackError({\n code: 'pack-malformed-path-ref',\n expected: 'rest path must not escape the declared path directory',\n hint: PACK_ERROR_HINTS['pack-malformed-path-ref'],\n detail: {\n code: 'pack-malformed-path-ref',\n reason: 'escape',\n rawSource: source,\n expectedFormat: '@<name>/<rest>',\n },\n }),\n );\n }\n\n return resultOk(resolved);\n }\n\n return resultOk(resolve(dirname(metaPath), source));\n}\n"]}
1
+ {"version":3,"sources":["../src/deriveAssetName.ts","../src/resolve-asset-source.ts"],"names":[],"mappings":";;;;;AAOA,SAAS,SAAS,CAAA,EAAmB;AACnC,EAAA,MAAM,OAAA,GAAU,CAAA,CAAE,OAAA,CAAQ,SAAA,EAAW,EAAE,CAAA;AACvC,EAAA,MAAM,GAAA,GAAM,IAAA,CAAK,GAAA,CAAI,OAAA,CAAQ,WAAA,CAAY,GAAG,CAAA,EAAG,OAAA,CAAQ,WAAA,CAAY,IAAI,CAAC,CAAA;AACxE,EAAA,OAAO,QAAQ,EAAA,GAAK,OAAA,GAAU,OAAA,CAAQ,KAAA,CAAM,MAAM,CAAC,CAAA;AACrD;AAmBO,SAAS,eAAA,CACd,WAAA,EACA,WAAA,EACA,UAAA,EACQ;AAIR,EAAA,IAAI,gBAAgB,IAAA,EAAM;AACxB,IAAA,OAAO,EAAA;AAAA,EACT;AACA,EAAA,OAAO,SAAS,WAAW,CAAA;AAC7B;;;ACvCA,SAAS,iBAAiB,YAAA,EAA8B;AACtD,EAAA,OAAO,YAAA,CAAa,OAAA,CAAQ,eAAA,EAAiB,EAAE,CAAA;AACjD;AAEO,SAAS,kBAAA,CAAmB,UAAkB,MAAA,EAAoC;AACvF,EAAA,IAAI,WAAW,MAAA,EAAW;AACxB,IAAA,MAAM,OAAA,GAAU,QAAQ,QAAQ,CAAA;AAChC,IAAA,MAAM,QAAA,GAAW,eAAA,CAAgB,QAAW,CAAA;AAC5C,IAAA,MAAM,OAAA,GAAU,iBAAiB,QAAQ,CAAA;AACzC,IAAA,OAAO,OAAA,CAAQ,SAAS,OAAO,CAAA;AAAA,EACjC;AACA,EAAA,OAAO,OAAA,CAAQ,OAAA,CAAQ,QAAQ,CAAA,EAAG,MAAM,CAAA;AAC1C","file":"resolve-asset-source.mjs","sourcesContent":["/**\n * Last path segment of a `/`- or `\\`-separated path, trailing separators\n * stripped. Inlined rather than imported from `node:path` so this module stays\n * browser-safe: the dev-server pack path (`vite-plugin-pack` `/__pack/`) runs\n * `buildCatalog` -> `deriveAssetName` in client code where `node:path` is\n * externalized and `path.basename` throws.\n */\nfunction baseName(p: string): string {\n const trimmed = p.replace(/[/\\\\]+$/, '');\n const idx = Math.max(trimmed.lastIndexOf('/'), trimmed.lastIndexOf('\\\\'));\n return idx === -1 ? trimmed : trimmed.slice(idx + 1);\n}\n\n/**\n * Derive an asset's display name from package metadata.\n *\n * Pure function -- zero IO, zero side effects, browser-safe. Build-time\n * (build-catalog) and runtime (resolveName) share this single source of truth\n * for deterministic asset display-name resolution.\n *\n * Resolution contract:\n * - an explicit storedName is authoritative;\n * - a package path is the fallback when no storedName is present;\n * - an asset without a package and without a storedName resolves to ''.\n *\n * `assetCount` remains in the signature because callers derive it from their\n * package model, but it must not erase an explicitly authored name. In\n * particular, a single authored entry in `Materials.pack.json` resolves to its\n * entry name rather than temporarily appearing as the package basename.\n */\nexport function deriveAssetName(\n packagePath: string | null,\n _assetCount: number,\n storedName?: string,\n): string {\n if (storedName !== undefined) {\n return storedName;\n }\n if (packagePath === null) {\n return '';\n }\n return baseName(packagePath);\n}\n","import { dirname, resolve } from 'node:path';\nimport { deriveAssetName } from './deriveAssetName.js';\n\nfunction deriveSourceName(metaFileName: string): string {\n return metaFileName.replace(/\\.meta\\.json$/, '');\n}\n\nexport function resolveAssetSource(metaPath: string, source: string | undefined): string {\n if (source === undefined) {\n const metaDir = dirname(metaPath);\n const metaName = deriveAssetName(metaPath, 1);\n const derived = deriveSourceName(metaName);\n return resolve(metaDir, derived);\n }\n return resolve(dirname(metaPath), source);\n}\n"]}
package/dist/runtime.mjs CHANGED
@@ -6859,7 +6859,7 @@ var meta_schema_default = {
6859
6859
  source: {
6860
6860
  type: "string",
6861
6861
  minLength: 1,
6862
- description: "Optional. Omit to derive the companion file in the same directory (strip .meta.json suffix from the meta filename). Or write @<name>/<rest> to reference a declared path table entry (see package.json#forgeax.assets.paths). Existing relative paths remain unchanged."
6862
+ description: "Optional. Omit to derive the companion file in the same directory (strip .meta.json suffix from the meta filename). An explicit source is resolved relative to this sidecar."
6863
6863
  },
6864
6864
  importSettings: {
6865
6865
  type: "object",
@@ -7000,11 +7000,11 @@ var pack_schema_default = {
7000
7000
  $comment: "The ordinary durable consumer matrix is SCRIPTABLE_PACK_ASSET_KINDS in @forgeax/engine-pack/source. Pack kind fields remain open for registered producer extensions.",
7001
7001
  type: "object",
7002
7002
  additionalProperties: false,
7003
- required: ["schemaVersion", "kind", "assets"],
7003
+ required: ["schemaVersion"],
7004
7004
  properties: {
7005
7005
  schemaVersion: {
7006
7006
  type: "string",
7007
- enum: ["1.0.0", "2.0.0"]
7007
+ enum: ["1.0.0", "2.0.0", "3.0.0"]
7008
7008
  },
7009
7009
  kind: {
7010
7010
  type: "string",
@@ -7026,12 +7026,58 @@ var pack_schema_default = {
7026
7026
  items: { $ref: "#/$defs/diagnostic" }
7027
7027
  },
7028
7028
  assets: {
7029
- type: "array",
7030
- items: {
7031
- $ref: "#/$defs/asset"
7032
- }
7029
+ oneOf: [
7030
+ {
7031
+ type: "array",
7032
+ items: { $ref: "#/$defs/asset" }
7033
+ },
7034
+ { $ref: "#/$defs/authoringAssets" }
7035
+ ]
7036
+ },
7037
+ parent: {
7038
+ $ref: "#/$defs/guid36",
7039
+ description: "Parent parameterized Pack packageId for one v3 instance."
7040
+ },
7041
+ values: {
7042
+ type: "object",
7043
+ additionalProperties: true,
7044
+ description: "Sparse shallow parameter overrides for one v3 instance."
7033
7045
  }
7034
7046
  },
7047
+ oneOf: [
7048
+ {
7049
+ required: ["kind", "assets"],
7050
+ properties: {
7051
+ schemaVersion: { enum: ["1.0.0", "2.0.0"] },
7052
+ kind: { const: "internal-text-package" },
7053
+ assets: { type: "array" },
7054
+ parent: false,
7055
+ values: false
7056
+ }
7057
+ },
7058
+ {
7059
+ required: ["packageId", "assets"],
7060
+ properties: {
7061
+ schemaVersion: { const: "3.0.0" },
7062
+ kind: false,
7063
+ packageId: { $ref: "#/$defs/guid36" },
7064
+ assets: { $ref: "#/$defs/authoringAssets" },
7065
+ parent: false,
7066
+ values: false
7067
+ }
7068
+ },
7069
+ {
7070
+ required: ["packageId", "parent", "values"],
7071
+ properties: {
7072
+ schemaVersion: { const: "3.0.0" },
7073
+ kind: false,
7074
+ packageId: { $ref: "#/$defs/guid36" },
7075
+ parent: { $ref: "#/$defs/guid36" },
7076
+ values: { type: "object" },
7077
+ assets: false
7078
+ }
7079
+ }
7080
+ ],
7035
7081
  allOf: [
7036
7082
  {
7037
7083
  if: {
@@ -7123,6 +7169,30 @@ var pack_schema_default = {
7123
7169
  }
7124
7170
  ]
7125
7171
  },
7172
+ authoringAssets: {
7173
+ type: "object",
7174
+ additionalProperties: false,
7175
+ patternProperties: {
7176
+ "^[a-z0-9][a-z0-9._-]*(/[a-z0-9][a-z0-9._-]*)*$": {
7177
+ $ref: "#/$defs/authoringAsset"
7178
+ }
7179
+ }
7180
+ },
7181
+ authoringAsset: {
7182
+ type: "object",
7183
+ additionalProperties: false,
7184
+ required: ["kind", "payload", "refs"],
7185
+ properties: {
7186
+ kind: { type: "string", minLength: 1 },
7187
+ name: { type: "string", minLength: 1 },
7188
+ payload: { type: "object" },
7189
+ refs: {
7190
+ type: "array",
7191
+ items: { $ref: "#/$defs/guid36" }
7192
+ },
7193
+ artifacts: { $ref: "#/$defs/artifacts" }
7194
+ }
7195
+ },
7126
7196
  artifacts: {
7127
7197
  type: "object",
7128
7198
  additionalProperties: false,