@azure/provisioning-core 0.1.0-alpha.20261014.1

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 (152) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +62 -0
  3. package/dist/constructs/built-in-resources/resource-group.d.ts +50 -0
  4. package/dist/constructs/built-in-resources/resource-group.d.ts.map +1 -0
  5. package/dist/constructs/built-in-resources/resource-group.js +97 -0
  6. package/dist/constructs/built-in-resources/resource-group.js.map +1 -0
  7. package/dist/constructs/output.d.ts +80 -0
  8. package/dist/constructs/output.d.ts.map +1 -0
  9. package/dist/constructs/output.js +76 -0
  10. package/dist/constructs/output.js.map +1 -0
  11. package/dist/constructs/parameter.d.ts +77 -0
  12. package/dist/constructs/parameter.d.ts.map +1 -0
  13. package/dist/constructs/parameter.js +93 -0
  14. package/dist/constructs/parameter.js.map +1 -0
  15. package/dist/constructs/provisioning-component.d.ts +91 -0
  16. package/dist/constructs/provisioning-component.d.ts.map +1 -0
  17. package/dist/constructs/provisioning-component.js +150 -0
  18. package/dist/constructs/provisioning-component.js.map +1 -0
  19. package/dist/constructs/resource/resource-proxy.d.ts +134 -0
  20. package/dist/constructs/resource/resource-proxy.d.ts.map +1 -0
  21. package/dist/constructs/resource/resource-proxy.js +523 -0
  22. package/dist/constructs/resource/resource-proxy.js.map +1 -0
  23. package/dist/constructs/resource/resource-query.d.ts +23 -0
  24. package/dist/constructs/resource/resource-query.d.ts.map +1 -0
  25. package/dist/constructs/resource/resource-query.js +71 -0
  26. package/dist/constructs/resource/resource-query.js.map +1 -0
  27. package/dist/constructs/resource/resource-registry.d.ts +99 -0
  28. package/dist/constructs/resource/resource-registry.d.ts.map +1 -0
  29. package/dist/constructs/resource/resource-registry.js +51 -0
  30. package/dist/constructs/resource/resource-registry.js.map +1 -0
  31. package/dist/constructs/resource/resource-type-registry.d.ts +46 -0
  32. package/dist/constructs/resource/resource-type-registry.d.ts.map +1 -0
  33. package/dist/constructs/resource/resource-type-registry.js +156 -0
  34. package/dist/constructs/resource/resource-type-registry.js.map +1 -0
  35. package/dist/constructs/resource/resource-utils.d.ts +60 -0
  36. package/dist/constructs/resource/resource-utils.d.ts.map +1 -0
  37. package/dist/constructs/resource/resource-utils.js +77 -0
  38. package/dist/constructs/resource/resource-utils.js.map +1 -0
  39. package/dist/constructs/resource/resource.d.ts +460 -0
  40. package/dist/constructs/resource/resource.d.ts.map +1 -0
  41. package/dist/constructs/resource/resource.js +584 -0
  42. package/dist/constructs/resource/resource.js.map +1 -0
  43. package/dist/constructs/stack.d.ts +110 -0
  44. package/dist/constructs/stack.d.ts.map +1 -0
  45. package/dist/constructs/stack.js +110 -0
  46. package/dist/constructs/stack.js.map +1 -0
  47. package/dist/constructs/variable.d.ts +63 -0
  48. package/dist/constructs/variable.d.ts.map +1 -0
  49. package/dist/constructs/variable.js +74 -0
  50. package/dist/constructs/variable.js.map +1 -0
  51. package/dist/deployment-context/deployment-context.d.ts +27 -0
  52. package/dist/deployment-context/deployment-context.d.ts.map +1 -0
  53. package/dist/deployment-context/deployment-context.js +4 -0
  54. package/dist/deployment-context/deployment-context.js.map +1 -0
  55. package/dist/expression/ast-nodes.d.ts +100 -0
  56. package/dist/expression/ast-nodes.d.ts.map +1 -0
  57. package/dist/expression/ast-nodes.js +127 -0
  58. package/dist/expression/ast-nodes.js.map +1 -0
  59. package/dist/expression/expressions.d.ts +164 -0
  60. package/dist/expression/expressions.d.ts.map +1 -0
  61. package/dist/expression/expressions.js +211 -0
  62. package/dist/expression/expressions.js.map +1 -0
  63. package/dist/fn.d.ts +194 -0
  64. package/dist/fn.d.ts.map +1 -0
  65. package/dist/fn.js +353 -0
  66. package/dist/fn.js.map +1 -0
  67. package/dist/index.d.ts +25 -0
  68. package/dist/index.d.ts.map +1 -0
  69. package/dist/index.js +19 -0
  70. package/dist/index.js.map +1 -0
  71. package/dist/internal-loop.d.ts +14 -0
  72. package/dist/internal-loop.d.ts.map +1 -0
  73. package/dist/internal-loop.js +16 -0
  74. package/dist/internal-loop.js.map +1 -0
  75. package/dist/internal.d.ts +13 -0
  76. package/dist/internal.d.ts.map +1 -0
  77. package/dist/internal.js +10 -0
  78. package/dist/internal.js.map +1 -0
  79. package/dist/naming/naming-policy.d.ts +56 -0
  80. package/dist/naming/naming-policy.d.ts.map +1 -0
  81. package/dist/naming/naming-policy.js +99 -0
  82. package/dist/naming/naming-policy.js.map +1 -0
  83. package/dist/naming/naming-rules.d.ts +15 -0
  84. package/dist/naming/naming-rules.d.ts.map +1 -0
  85. package/dist/naming/naming-rules.js +15 -0
  86. package/dist/naming/naming-rules.js.map +1 -0
  87. package/dist/serialization/contract/generated/ast.d.ts +508 -0
  88. package/dist/serialization/contract/generated/ast.d.ts.map +1 -0
  89. package/dist/serialization/contract/generated/ast.js +23 -0
  90. package/dist/serialization/contract/generated/ast.js.map +1 -0
  91. package/dist/serialization/contract/index.d.ts +2 -0
  92. package/dist/serialization/contract/index.d.ts.map +1 -0
  93. package/dist/serialization/contract/index.js +4 -0
  94. package/dist/serialization/contract/index.js.map +1 -0
  95. package/dist/serialization/index.d.ts +4 -0
  96. package/dist/serialization/index.d.ts.map +1 -0
  97. package/dist/serialization/index.js +5 -0
  98. package/dist/serialization/index.js.map +1 -0
  99. package/dist/serialization/json/deserialize.d.ts +24 -0
  100. package/dist/serialization/json/deserialize.d.ts.map +1 -0
  101. package/dist/serialization/json/deserialize.js +476 -0
  102. package/dist/serialization/json/deserialize.js.map +1 -0
  103. package/dist/serialization/json/encoding.d.ts +4 -0
  104. package/dist/serialization/json/encoding.d.ts.map +1 -0
  105. package/dist/serialization/json/encoding.js +323 -0
  106. package/dist/serialization/json/encoding.js.map +1 -0
  107. package/dist/serialization/json/expression.d.ts +32 -0
  108. package/dist/serialization/json/expression.d.ts.map +1 -0
  109. package/dist/serialization/json/expression.js +490 -0
  110. package/dist/serialization/json/expression.js.map +1 -0
  111. package/dist/serialization/json/lower.d.ts +41 -0
  112. package/dist/serialization/json/lower.d.ts.map +1 -0
  113. package/dist/serialization/json/lower.js +343 -0
  114. package/dist/serialization/json/lower.js.map +1 -0
  115. package/dist/serialization/json/pluralize-config.d.ts +3 -0
  116. package/dist/serialization/json/pluralize-config.d.ts.map +1 -0
  117. package/dist/serialization/json/pluralize-config.js +7 -0
  118. package/dist/serialization/json/pluralize-config.js.map +1 -0
  119. package/dist/serialization/json/serialize.d.ts +12 -0
  120. package/dist/serialization/json/serialize.d.ts.map +1 -0
  121. package/dist/serialization/json/serialize.js +399 -0
  122. package/dist/serialization/json/serialize.js.map +1 -0
  123. package/dist/serialization/json/util.d.ts +2 -0
  124. package/dist/serialization/json/util.d.ts.map +1 -0
  125. package/dist/serialization/json/util.js +19 -0
  126. package/dist/serialization/json/util.js.map +1 -0
  127. package/dist/serialization/utils.d.ts +3 -0
  128. package/dist/serialization/utils.d.ts.map +1 -0
  129. package/dist/serialization/utils.js +146 -0
  130. package/dist/serialization/utils.js.map +1 -0
  131. package/dist/shape/shape-registry.d.ts +51 -0
  132. package/dist/shape/shape-registry.d.ts.map +1 -0
  133. package/dist/shape/shape-registry.js +41 -0
  134. package/dist/shape/shape-registry.js.map +1 -0
  135. package/dist/shape/shape.d.ts +407 -0
  136. package/dist/shape/shape.d.ts.map +1 -0
  137. package/dist/shape/shape.js +425 -0
  138. package/dist/shape/shape.js.map +1 -0
  139. package/dist/shape/value-encoding.d.ts +121 -0
  140. package/dist/shape/value-encoding.d.ts.map +1 -0
  141. package/dist/shape/value-encoding.js +32 -0
  142. package/dist/shape/value-encoding.js.map +1 -0
  143. package/dist/tsconfig.tsbuildinfo +1 -0
  144. package/dist/types.d.ts +9 -0
  145. package/dist/types.d.ts.map +1 -0
  146. package/dist/types.js +4 -0
  147. package/dist/types.js.map +1 -0
  148. package/dist/util.d.ts +33 -0
  149. package/dist/util.d.ts.map +1 -0
  150. package/dist/util.js +78 -0
  151. package/dist/util.js.map +1 -0
  152. package/package.json +49 -0
@@ -0,0 +1,490 @@
1
+ // Copyright (c) Microsoft Corporation.
2
+ // Licensed under the MIT License.
3
+ import { accessExpressionNode, arrayAccessExpressionNode, functionCallExpressionNode, identifierExpressionNode, instanceFunctionCallExpressionNode, isExpressionNode, propertyAccessExpressionNode, } from "../../expression/ast-nodes.js";
4
+ import { isExpression, unwrapExpression, wrapExpression, } from "../../expression/expressions.js";
5
+ import { isResource, isLoopedResource, } from "../../constructs/resource/resource-utils.js";
6
+ import {} from "../../constructs/resource/resource.js";
7
+ // ---------------------------------------------------------------------------
8
+ // ARM property-access lowering
9
+ // ---------------------------------------------------------------------------
10
+ /**
11
+ * Expands armPath stamps along a core property-access chain, replacing each
12
+ * stamped property with its ARM path relative to the lowered base. Empty
13
+ * paths fall back to the original property name. Generated accesses carry
14
+ * no stamps; unchanged nodes retain their identity.
15
+ *
16
+ * Recursion stops at non-property-access nodes and leaves their children
17
+ * untouched. serializeExpression traverses those children and invokes this
18
+ * helper as it reaches them; this is not a whole-expression lowering pass.
19
+ */
20
+ export function lowerArmPropertyAccessChain(node) {
21
+ if (node.kind !== "property-access")
22
+ return node;
23
+ const loweredBase = lowerArmPropertyAccessChain(node.base);
24
+ if (node.armPath !== undefined) {
25
+ const path = node.armPath.length > 0 ? node.armPath : [node.property];
26
+ let current = loweredBase;
27
+ for (const segment of path) {
28
+ // A flattened optional property may be absent at any wire-path segment.
29
+ current = accessExpressionNode(current, segment, {
30
+ nullish: node.nullish,
31
+ });
32
+ }
33
+ return current;
34
+ }
35
+ if (loweredBase === node.base)
36
+ return node;
37
+ return { ...node, base: loweredBase };
38
+ }
39
+ // ---------------------------------------------------------------------------
40
+ // Expression serialization: CDK value -> AST
41
+ // ---------------------------------------------------------------------------
42
+ function splitSymbolicPath(path) {
43
+ const parts = [];
44
+ let current = "";
45
+ let depth = 0;
46
+ for (const character of path) {
47
+ if (character === "." && depth === 0) {
48
+ if (current.length > 0) {
49
+ parts.push(current);
50
+ current = "";
51
+ }
52
+ continue;
53
+ }
54
+ if (character === "(") {
55
+ depth += 1;
56
+ }
57
+ else if (character === ")") {
58
+ depth -= 1;
59
+ }
60
+ current += character;
61
+ }
62
+ if (current.length > 0) {
63
+ parts.push(current);
64
+ }
65
+ return parts;
66
+ }
67
+ function serializeSymbolicPath(path) {
68
+ const parts = splitSymbolicPath(path);
69
+ let current;
70
+ for (const part of parts) {
71
+ if (part.endsWith("()")) {
72
+ const target = part.slice(0, -2);
73
+ const callNode = {
74
+ kind: "function-call",
75
+ target,
76
+ args: [],
77
+ };
78
+ current =
79
+ current === undefined
80
+ ? callNode
81
+ : {
82
+ kind: "instance-function-call",
83
+ base: current,
84
+ name: target,
85
+ args: [],
86
+ };
87
+ continue;
88
+ }
89
+ current =
90
+ current === undefined
91
+ ? {
92
+ kind: "identifier",
93
+ id: part,
94
+ }
95
+ : {
96
+ kind: "property-access",
97
+ base: current,
98
+ property: part,
99
+ nullish: false,
100
+ };
101
+ }
102
+ if (current === undefined) {
103
+ throw new Error(`Cannot serialize empty symbolic path.`);
104
+ }
105
+ return current;
106
+ }
107
+ function serializePlainObject(value, symbolMap) {
108
+ return {
109
+ kind: "object",
110
+ value: serializeDefinedObjectEntries(value, symbolMap),
111
+ };
112
+ }
113
+ export function serializeDefinedObjectEntries(value, symbolMap) {
114
+ return Object.fromEntries(Object.entries(value).flatMap(([key, propertyValue]) => propertyValue === undefined
115
+ ? []
116
+ : [[key, serializeExpression(propertyValue, symbolMap)]]));
117
+ }
118
+ function serializeArray(value, symbolMap) {
119
+ return {
120
+ kind: "array",
121
+ items: value.map((item) => serializeExpression(item, symbolMap)),
122
+ };
123
+ }
124
+ function isSerializableObject(value) {
125
+ return typeof value === "object" && value !== null && !Array.isArray(value);
126
+ }
127
+ function serializeIdentifierExpression(value, symbolMap) {
128
+ if (typeof value.id === "string") {
129
+ return {
130
+ kind: "identifier",
131
+ id: value.id,
132
+ };
133
+ }
134
+ const identifier = symbolMap.get(value.id);
135
+ if (identifier === undefined) {
136
+ throw new Error(`Missing synthesized symbol for referenced resource type ${value.id.type}.`);
137
+ }
138
+ return {
139
+ kind: "identifier",
140
+ id: identifier,
141
+ };
142
+ }
143
+ function isBicepIdentifierSegment(segment) {
144
+ return /^[A-Za-z_][A-Za-z0-9_]*$/u.test(segment);
145
+ }
146
+ function serializeMemberAccessExpression(value, symbolMap) {
147
+ const base = serializeExpression(value.base, symbolMap);
148
+ if (value.kind === "property-access") {
149
+ return {
150
+ kind: "property-access",
151
+ base,
152
+ property: value.property,
153
+ nullish: value.nullish,
154
+ };
155
+ }
156
+ if (typeof value.index === "number") {
157
+ return {
158
+ kind: "array-access",
159
+ base,
160
+ index: {
161
+ kind: "integer",
162
+ value: String(value.index),
163
+ },
164
+ nullish: value.nullish,
165
+ fromEnd: value.fromEnd,
166
+ };
167
+ }
168
+ if (typeof value.index === "string") {
169
+ if (value.fromEnd) {
170
+ throw new Error("Reverse indexing requires an integer index, not a string.");
171
+ }
172
+ return isBicepIdentifierSegment(value.index)
173
+ ? {
174
+ kind: "property-access",
175
+ base,
176
+ property: value.index,
177
+ nullish: value.nullish,
178
+ }
179
+ : {
180
+ kind: "array-access",
181
+ base,
182
+ index: {
183
+ kind: "string",
184
+ value: value.index,
185
+ },
186
+ nullish: value.nullish,
187
+ fromEnd: value.fromEnd,
188
+ };
189
+ }
190
+ // Expression-shaped index (e.g. a loop's `.index` symbolic value or any
191
+ // `Expression<number>` proxy). Recursively serialize into the wire
192
+ // array-access's `index` slot.
193
+ return {
194
+ kind: "array-access",
195
+ base,
196
+ index: serializeExpression(value.index, symbolMap),
197
+ nullish: value.nullish,
198
+ fromEnd: value.fromEnd,
199
+ };
200
+ }
201
+ export function serializeExpression(value, symbolMap = new Map()) {
202
+ if (isExpression(value)) {
203
+ return serializeExpression(unwrapExpression(value), symbolMap);
204
+ }
205
+ // Lower the current property-access chain. Recursive serialization below
206
+ // visits other child expressions, lowering their property chains in turn.
207
+ if (value !== null && typeof value === "object" && isExpressionNode(value)) {
208
+ const lowered = lowerArmPropertyAccessChain(value);
209
+ if (lowered !== value) {
210
+ return serializeExpression(lowered, symbolMap);
211
+ }
212
+ }
213
+ if (typeof value === "string") {
214
+ return {
215
+ kind: "string",
216
+ value,
217
+ };
218
+ }
219
+ if (typeof value === "number") {
220
+ if (!Number.isInteger(value)) {
221
+ throw new Error(`Bicep serialization currently only supports integer numbers.`);
222
+ }
223
+ if (!Number.isSafeInteger(value)) {
224
+ throw new Error(`Bicep serialization currently only supports safe integer numbers.`);
225
+ }
226
+ return {
227
+ kind: "integer",
228
+ value: String(value),
229
+ };
230
+ }
231
+ if (typeof value === "boolean") {
232
+ return {
233
+ kind: "boolean",
234
+ value,
235
+ };
236
+ }
237
+ if (value === null) {
238
+ return {
239
+ kind: "null",
240
+ value: null,
241
+ };
242
+ }
243
+ if (Array.isArray(value)) {
244
+ return serializeArray(value, symbolMap);
245
+ }
246
+ if (isExpressionNode(value)) {
247
+ switch (value.kind) {
248
+ case "binary":
249
+ return {
250
+ kind: "binary-operation",
251
+ operator: value.operator,
252
+ left: serializeExpression(value.left, symbolMap),
253
+ right: serializeExpression(value.right, symbolMap),
254
+ };
255
+ case "unary":
256
+ return {
257
+ kind: "unary-operation",
258
+ operator: value.operator,
259
+ argument: serializeExpression(value.argument, symbolMap),
260
+ };
261
+ case "ternary":
262
+ return {
263
+ kind: "ternary-operation",
264
+ condition: serializeExpression(value.condition, symbolMap),
265
+ trueValue: serializeExpression(value.trueValue, symbolMap),
266
+ falseValue: serializeExpression(value.falseValue, symbolMap),
267
+ };
268
+ case "fn-call":
269
+ return {
270
+ kind: "function-call",
271
+ target: value.operator,
272
+ args: value.args.map((argument) => serializeExpression(argument, symbolMap)),
273
+ };
274
+ case "instance-function-call":
275
+ return {
276
+ kind: "instance-function-call",
277
+ base: serializeExpression(value.base, symbolMap),
278
+ name: value.name,
279
+ args: value.args.map((argument) => serializeExpression(argument, symbolMap)),
280
+ };
281
+ case "interpolated-string":
282
+ return {
283
+ kind: "interpolated-string",
284
+ segments: value.segments.map((segment) => serializeExpression(segment, symbolMap)),
285
+ };
286
+ case "identifier":
287
+ return serializeIdentifierExpression(value, symbolMap);
288
+ case "property-access":
289
+ case "array-access":
290
+ return serializeMemberAccessExpression(value, symbolMap);
291
+ case "symbolic-value": {
292
+ const identifier = symbolMap.get(value);
293
+ return identifier === undefined
294
+ ? serializeSymbolicPath(value.path)
295
+ : { kind: "identifier", id: identifier };
296
+ }
297
+ }
298
+ }
299
+ if (isSerializableObject(value)) {
300
+ return serializePlainObject(value, symbolMap);
301
+ }
302
+ throw new Error(`Unsupported serialization input.`);
303
+ }
304
+ // ---------------------------------------------------------------------------
305
+ // Resource-reference validation
306
+ // ---------------------------------------------------------------------------
307
+ export function requireResourceHandle(targetIdentifier, symbols, resourceIdentifier, field) {
308
+ const handle = symbols.get(targetIdentifier);
309
+ if (handle === undefined) {
310
+ throw new Error(`Resource "${resourceIdentifier}" references unknown resource ` +
311
+ `"${targetIdentifier}" in "${field}".`);
312
+ }
313
+ if (!isResource(handle) && !isLoopedResource(handle)) {
314
+ throw new Error(`Resource "${resourceIdentifier}" references non-resource symbol ` +
315
+ `"${targetIdentifier}" in "${field}".`);
316
+ }
317
+ return handle;
318
+ }
319
+ export function deserializeDependsOnExpression(node, symbols, resourceIdentifier) {
320
+ if (node.kind !== "array") {
321
+ throw new Error(`Resource "${resourceIdentifier}" has an invalid "dependsOn" value; expected an array.`);
322
+ }
323
+ return node.items.map((item) => {
324
+ if (item.kind !== "identifier") {
325
+ throw new Error(`Resource "${resourceIdentifier}" has an invalid "dependsOn" reference; expected a resource identifier.`);
326
+ }
327
+ return requireResourceHandle(item.id, symbols, resourceIdentifier, "dependsOn");
328
+ });
329
+ }
330
+ // ---------------------------------------------------------------------------
331
+ // Expression deserialization: AST -> CDK value
332
+ // ---------------------------------------------------------------------------
333
+ export function deserializeExpression(node, symbols) {
334
+ // TODO(#330): Legacy `contextual-variable` shim. The JS side no longer
335
+ // produces this kind (it emits the composed `property-access` over a
336
+ // zero-arg `function-call` form), but the .NET `ModelReaderWriter`
337
+ // still emits it on re-serialization. Accept it on input by lowering
338
+ // to the composed form, then fall through. Delete this whole block
339
+ // (and any cast it requires) once .NET stops emitting it.
340
+ const legacyKind = node.kind;
341
+ if (legacyKind === "contextual-variable") {
342
+ const legacy = node;
343
+ return wrapExpression(propertyAccessExpressionNode(functionCallExpressionNode(legacy.context, []), legacy.property));
344
+ }
345
+ switch (node.kind) {
346
+ case "string":
347
+ return node.value;
348
+ case "integer": {
349
+ const value = parseInt(node.value, 10);
350
+ if (!Number.isSafeInteger(value)) {
351
+ throw new Error(`Cannot deserialize unsafe integer literal "${node.value}".`);
352
+ }
353
+ return value;
354
+ }
355
+ case "boolean":
356
+ return node.value;
357
+ case "null":
358
+ return null;
359
+ case "identifier": {
360
+ const sym = symbols.get(node.id);
361
+ if (sym !== undefined)
362
+ return sym;
363
+ return wrapExpression(identifierExpressionNode(node.id));
364
+ }
365
+ case "function-call":
366
+ if (typeof node.target !== "string") {
367
+ throw new Error("Cannot deserialize function call with an expression target.");
368
+ }
369
+ return wrapExpression(functionCallExpressionNode(node.target, node.args.map((a) => deserializeExpression(a, symbols))));
370
+ case "instance-function-call": {
371
+ const base = deserializeExpression(node.base, symbols);
372
+ const baseNode = isExpression(base)
373
+ ? unwrapExpression(base)
374
+ : identifierExpressionNode(isResource(base) ? base : String(base));
375
+ return wrapExpression(instanceFunctionCallExpressionNode(baseNode, node.name, node.args.map((a) => deserializeExpression(a, symbols))));
376
+ }
377
+ case "property-access": {
378
+ const base = deserializeExpression(node.base, symbols);
379
+ if (isResource(base)) {
380
+ if (node.nullish) {
381
+ return wrapExpression(propertyAccessExpressionNode(identifierExpressionNode(base), node.property, { nullish: node.nullish }));
382
+ }
383
+ return base[node.property];
384
+ }
385
+ if (isExpression(base)) {
386
+ const inner = unwrapExpression(base);
387
+ return wrapExpression(propertyAccessExpressionNode(inner, node.property, {
388
+ nullish: node.nullish,
389
+ }));
390
+ }
391
+ return wrapExpression(propertyAccessExpressionNode(identifierExpressionNode(String(base)), node.property, { nullish: node.nullish }));
392
+ }
393
+ case "array-access": {
394
+ const base = deserializeExpression(node.base, symbols);
395
+ // Preserve non-literal indexes as expressions so `sym[<expr>]` round-
396
+ // trips faithfully. Literal integer/string indexes lower to native
397
+ // JS number/string values as before.
398
+ let idx;
399
+ if (node.index.kind === "integer") {
400
+ idx = parseInt(node.index.value, 10);
401
+ }
402
+ else if (node.index.kind === "string") {
403
+ idx = node.index.value;
404
+ }
405
+ else {
406
+ const deserializedIndex = deserializeExpression(node.index, symbols);
407
+ idx = isExpression(deserializedIndex)
408
+ ? unwrapExpression(deserializedIndex)
409
+ : deserializedIndex;
410
+ }
411
+ if (isResource(base)) {
412
+ if (node.nullish || node.fromEnd) {
413
+ return wrapExpression(arrayAccessExpressionNode(identifierExpressionNode(base), idx, {
414
+ nullish: node.nullish,
415
+ fromEnd: node.fromEnd,
416
+ }));
417
+ }
418
+ return base[String(idx)];
419
+ }
420
+ if (isLoopedResource(base)) {
421
+ // `sym[idx]` on a looped declaration. Carry the handle itself as the
422
+ // identifier id (not `String(base)`, which would stringify to
423
+ // "[object Object]") so re-serialize maps it back to the resource's
424
+ // symbol. The resulting expression proxy lets an outer `.prop` chain
425
+ // (e.g. `looped.at(0).id`) render as `sym[idx].prop`.
426
+ return wrapExpression(arrayAccessExpressionNode(identifierExpressionNode(base), idx, { nullish: node.nullish, fromEnd: node.fromEnd }));
427
+ }
428
+ if (isExpression(base)) {
429
+ const inner = unwrapExpression(base);
430
+ return wrapExpression(arrayAccessExpressionNode(inner, idx, {
431
+ nullish: node.nullish,
432
+ fromEnd: node.fromEnd,
433
+ }));
434
+ }
435
+ return wrapExpression(arrayAccessExpressionNode(identifierExpressionNode(String(base)), idx, {
436
+ nullish: node.nullish,
437
+ fromEnd: node.fromEnd,
438
+ }));
439
+ }
440
+ case "object": {
441
+ const obj = Object.create(null);
442
+ for (const [key, value] of Object.entries(node.value)) {
443
+ Object.defineProperty(obj, key, {
444
+ value: deserializeExpression(value, symbols),
445
+ enumerable: true,
446
+ configurable: true,
447
+ writable: true,
448
+ });
449
+ }
450
+ return obj;
451
+ }
452
+ case "array":
453
+ return node.items.map((item) => deserializeExpression(item, symbols));
454
+ case "binary-operation": {
455
+ const operation = node;
456
+ return wrapExpression({
457
+ kind: "binary",
458
+ operator: operation.operator,
459
+ left: deserializeExpression(operation.left, symbols),
460
+ right: deserializeExpression(operation.right, symbols),
461
+ });
462
+ }
463
+ case "unary-operation": {
464
+ const operation = node;
465
+ return wrapExpression({
466
+ kind: "unary",
467
+ operator: operation.operator,
468
+ argument: deserializeExpression(operation.argument, symbols),
469
+ });
470
+ }
471
+ case "ternary-operation": {
472
+ const operation = node;
473
+ return wrapExpression({
474
+ kind: "ternary",
475
+ condition: deserializeExpression(operation.condition, symbols),
476
+ trueValue: deserializeExpression(operation.trueValue, symbols),
477
+ falseValue: deserializeExpression(operation.falseValue, symbols),
478
+ });
479
+ }
480
+ case "interpolated-string": {
481
+ return wrapExpression({
482
+ kind: "interpolated-string",
483
+ segments: node.segments.map((segment) => deserializeExpression(segment, symbols)),
484
+ });
485
+ }
486
+ default:
487
+ throw new Error(`Unsupported expression node kind: ${node.kind}`);
488
+ }
489
+ }
490
+ //# sourceMappingURL=expression.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"expression.js","sourceRoot":"","sources":["../../../src/serialization/json/expression.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,kCAAkC;AAElC,OAAO,EACL,oBAAoB,EACpB,yBAAyB,EACzB,0BAA0B,EAC1B,wBAAwB,EACxB,kCAAkC,EAClC,gBAAgB,EAChB,4BAA4B,GAS7B,MAAM,+BAA+B,CAAC;AACvC,OAAO,EACL,YAAY,EACZ,gBAAgB,EAChB,cAAc,GAEf,MAAM,iCAAiC,CAAC;AACzC,OAAO,EACL,UAAU,EACV,gBAAgB,GACjB,MAAM,6CAA6C,CAAC;AACrD,OAAO,EAIN,MAAM,uCAAuC,CAAC;AAoC/C,8EAA8E;AAC9E,+BAA+B;AAC/B,8EAA8E;AAE9E;;;;;;;;;GASG;AACH,MAAM,UAAU,2BAA2B,CACzC,IAAwB;IAExB,IAAI,IAAI,CAAC,IAAI,KAAK,iBAAiB;QAAE,OAAO,IAAI,CAAC;IAEjD,MAAM,WAAW,GAAG,2BAA2B,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC3D,IAAI,IAAI,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;QAC/B,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACtE,IAAI,OAAO,GAAuB,WAAW,CAAC;QAC9C,KAAK,MAAM,OAAO,IAAI,IAAI,EAAE,CAAC;YAC3B,wEAAwE;YACxE,OAAO,GAAG,oBAAoB,CAAC,OAAO,EAAE,OAAO,EAAE;gBAC/C,OAAO,EAAE,IAAI,CAAC,OAAO;aACtB,CAAC,CAAC;QACL,CAAC;QACD,OAAO,OAAO,CAAC;IACjB,CAAC;IACD,IAAI,WAAW,KAAK,IAAI,CAAC,IAAI;QAAE,OAAO,IAAI,CAAC;IAC3C,OAAO,EAAE,GAAG,IAAI,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC;AACxC,CAAC;AAED,8EAA8E;AAC9E,6CAA6C;AAC7C,8EAA8E;AAE9E,SAAS,iBAAiB,CAAC,IAAY;IACrC,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,IAAI,OAAO,GAAG,EAAE,CAAC;IACjB,IAAI,KAAK,GAAG,CAAC,CAAC;IAEd,KAAK,MAAM,SAAS,IAAI,IAAI,EAAE,CAAC;QAC7B,IAAI,SAAS,KAAK,GAAG,IAAI,KAAK,KAAK,CAAC,EAAE,CAAC;YACrC,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACvB,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;gBACpB,OAAO,GAAG,EAAE,CAAC;YACf,CAAC;YACD,SAAS;QACX,CAAC;QAED,IAAI,SAAS,KAAK,GAAG,EAAE,CAAC;YACtB,KAAK,IAAI,CAAC,CAAC;QACb,CAAC;aAAM,IAAI,SAAS,KAAK,GAAG,EAAE,CAAC;YAC7B,KAAK,IAAI,CAAC,CAAC;QACb,CAAC;QAED,OAAO,IAAI,SAAS,CAAC;IACvB,CAAC;IAED,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACvB,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACtB,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,qBAAqB,CAAC,IAAY;IACzC,MAAM,KAAK,GAAG,iBAAiB,CAAC,IAAI,CAAC,CAAC;IACtC,IAAI,OAAmC,CAAC;IAExC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;YACxB,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;YACjC,MAAM,QAAQ,GAA2B;gBACvC,IAAI,EAAE,eAAe;gBACrB,MAAM;gBACN,IAAI,EAAE,EAAE;aACT,CAAC;YAEF,OAAO;gBACL,OAAO,KAAK,SAAS;oBACnB,CAAC,CAAC,QAAQ;oBACV,CAAC,CAAC;wBACE,IAAI,EAAE,wBAAwB;wBAC9B,IAAI,EAAE,OAAO;wBACb,IAAI,EAAE,MAAM;wBACZ,IAAI,EAAE,EAAE;qBACT,CAAC;YACR,SAAS;QACX,CAAC;QAED,OAAO;YACL,OAAO,KAAK,SAAS;gBACnB,CAAC,CAAC;oBACE,IAAI,EAAE,YAAY;oBAClB,EAAE,EAAE,IAAI;iBACT;gBACH,CAAC,CAAC;oBACE,IAAI,EAAE,iBAAiB;oBACvB,IAAI,EAAE,OAAO;oBACb,QAAQ,EAAE,IAAI;oBACd,OAAO,EAAE,KAAK;iBACf,CAAC;IACV,CAAC;IAED,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;QAC1B,MAAM,IAAI,KAAK,CAAC,uCAAuC,CAAC,CAAC;IAC3D,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,SAAS,oBAAoB,CAC3B,KAAgE,EAChE,SAAiC;IAEjC,OAAO;QACL,IAAI,EAAE,QAAQ;QACd,KAAK,EAAE,6BAA6B,CAAC,KAAK,EAAE,SAAS,CAAC;KACvD,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,6BAA6B,CAC3C,KAAgE,EAChE,SAAiC;IAEjC,OAAO,MAAM,CAAC,WAAW,CACvB,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,aAAa,CAAC,EAAE,EAAE,CACrD,aAAa,KAAK,SAAS;QACzB,CAAC,CAAC,EAAE;QACJ,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,mBAAmB,CAAC,aAAa,EAAE,SAAS,CAAC,CAAC,CAAC,CAC3D,CACF,CAAC;AACJ,CAAC;AAED,SAAS,cAAc,CACrB,KAAmC,EACnC,SAAiC;IAEjC,OAAO;QACL,IAAI,EAAE,OAAO;QACb,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,mBAAmB,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;KACjE,CAAC;AACJ,CAAC;AAED,SAAS,oBAAoB,CAC3B,KAAwB;IAExB,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AAC9E,CAAC;AAED,SAAS,6BAA6B,CACpC,KAA+B,EAC/B,SAAiC;IAEjC,IAAI,OAAO,KAAK,CAAC,EAAE,KAAK,QAAQ,EAAE,CAAC;QACjC,OAAO;YACL,IAAI,EAAE,YAAY;YAClB,EAAE,EAAE,KAAK,CAAC,EAAE;SACb,CAAC;IACJ,CAAC;IAED,MAAM,UAAU,GAAG,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IAE3C,IAAI,UAAU,KAAK,SAAS,EAAE,CAAC;QAC7B,MAAM,IAAI,KAAK,CACb,2DAA2D,KAAK,CAAC,EAAE,CAAC,IAAI,GAAG,CAC5E,CAAC;IACJ,CAAC;IAED,OAAO;QACL,IAAI,EAAE,YAAY;QAClB,EAAE,EAAE,UAAU;KACf,CAAC;AACJ,CAAC;AAED,SAAS,wBAAwB,CAAC,OAAe;IAC/C,OAAO,2BAA2B,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AACnD,CAAC;AAED,SAAS,+BAA+B,CACtC,KAA+D,EAC/D,SAAiC;IAEjC,MAAM,IAAI,GAAG,mBAAmB,CAAC,KAAK,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;IAExD,IAAI,KAAK,CAAC,IAAI,KAAK,iBAAiB,EAAE,CAAC;QACrC,OAAO;YACL,IAAI,EAAE,iBAAiB;YACvB,IAAI;YACJ,QAAQ,EAAE,KAAK,CAAC,QAAQ;YACxB,OAAO,EAAE,KAAK,CAAC,OAAO;SACvB,CAAC;IACJ,CAAC;IAED,IAAI,OAAO,KAAK,CAAC,KAAK,KAAK,QAAQ,EAAE,CAAC;QACpC,OAAO;YACL,IAAI,EAAE,cAAc;YACpB,IAAI;YACJ,KAAK,EAAE;gBACL,IAAI,EAAE,SAAS;gBACf,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC;aAC3B;YACD,OAAO,EAAE,KAAK,CAAC,OAAO;YACtB,OAAO,EAAE,KAAK,CAAC,OAAO;SACvB,CAAC;IACJ,CAAC;IAED,IAAI,OAAO,KAAK,CAAC,KAAK,KAAK,QAAQ,EAAE,CAAC;QACpC,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;YAClB,MAAM,IAAI,KAAK,CACb,2DAA2D,CAC5D,CAAC;QACJ,CAAC;QACD,OAAO,wBAAwB,CAAC,KAAK,CAAC,KAAK,CAAC;YAC1C,CAAC,CAAC;gBACE,IAAI,EAAE,iBAAiB;gBACvB,IAAI;gBACJ,QAAQ,EAAE,KAAK,CAAC,KAAK;gBACrB,OAAO,EAAE,KAAK,CAAC,OAAO;aACvB;YACH,CAAC,CAAC;gBACE,IAAI,EAAE,cAAc;gBACpB,IAAI;gBACJ,KAAK,EAAE;oBACL,IAAI,EAAE,QAAQ;oBACd,KAAK,EAAE,KAAK,CAAC,KAAK;iBACnB;gBACD,OAAO,EAAE,KAAK,CAAC,OAAO;gBACtB,OAAO,EAAE,KAAK,CAAC,OAAO;aACvB,CAAC;IACR,CAAC;IAED,wEAAwE;IACxE,mEAAmE;IACnE,+BAA+B;IAC/B,OAAO;QACL,IAAI,EAAE,cAAc;QACpB,IAAI;QACJ,KAAK,EAAE,mBAAmB,CAAC,KAAK,CAAC,KAA0B,EAAE,SAAS,CAAC;QACvE,OAAO,EAAE,KAAK,CAAC,OAAO;QACtB,OAAO,EAAE,KAAK,CAAC,OAAO;KACvB,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,mBAAmB,CACjC,KAAwB,EACxB,YAAoC,IAAI,GAAG,EAAE;IAE7C,IAAI,YAAY,CAAC,KAAK,CAAC,EAAE,CAAC;QACxB,OAAO,mBAAmB,CACxB,gBAAgB,CAAC,KAAK,CAAsB,EAC5C,SAAS,CACV,CAAC;IACJ,CAAC;IAED,yEAAyE;IACzE,0EAA0E;IAC1E,IAAI,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,gBAAgB,CAAC,KAAK,CAAC,EAAE,CAAC;QAC3E,MAAM,OAAO,GAAG,2BAA2B,CAAC,KAA2B,CAAC,CAAC;QACzE,IAAI,OAAO,KAAK,KAAK,EAAE,CAAC;YACtB,OAAO,mBAAmB,CAAC,OAA4B,EAAE,SAAS,CAAC,CAAC;QACtE,CAAC;IACH,CAAC;IAED,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,OAAO;YACL,IAAI,EAAE,QAAQ;YACd,KAAK;SACN,CAAC;IACJ,CAAC;IAED,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC;YAC7B,MAAM,IAAI,KAAK,CACb,8DAA8D,CAC/D,CAAC;QACJ,CAAC;QACD,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,EAAE,CAAC;YACjC,MAAM,IAAI,KAAK,CACb,mEAAmE,CACpE,CAAC;QACJ,CAAC;QAED,OAAO;YACL,IAAI,EAAE,SAAS;YACf,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC;SACrB,CAAC;IACJ,CAAC;IAED,IAAI,OAAO,KAAK,KAAK,SAAS,EAAE,CAAC;QAC/B,OAAO;YACL,IAAI,EAAE,SAAS;YACf,KAAK;SACN,CAAC;IACJ,CAAC;IAED,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;QACnB,OAAO;YACL,IAAI,EAAE,MAAM;YACZ,KAAK,EAAE,IAAI;SACZ,CAAC;IACJ,CAAC;IAED,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACzB,OAAO,cAAc,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;IAC1C,CAAC;IAED,IAAI,gBAAgB,CAAC,KAAK,CAAC,EAAE,CAAC;QAC5B,QAAQ,KAAK,CAAC,IAAI,EAAE,CAAC;YACnB,KAAK,QAAQ;gBACX,OAAO;oBACL,IAAI,EAAE,kBAAkB;oBACxB,QAAQ,EAAE,KAAK,CAAC,QAAQ;oBACxB,IAAI,EAAE,mBAAmB,CAAC,KAAK,CAAC,IAAyB,EAAE,SAAS,CAAC;oBACrE,KAAK,EAAE,mBAAmB,CACxB,KAAK,CAAC,KAA0B,EAChC,SAAS,CACV;iBACF,CAAC;YAEJ,KAAK,OAAO;gBACV,OAAO;oBACL,IAAI,EAAE,iBAAiB;oBACvB,QAAQ,EAAE,KAAK,CAAC,QAAQ;oBACxB,QAAQ,EAAE,mBAAmB,CAC3B,KAAK,CAAC,QAA6B,EACnC,SAAS,CACV;iBACF,CAAC;YAEJ,KAAK,SAAS;gBACZ,OAAO;oBACL,IAAI,EAAE,mBAAmB;oBACzB,SAAS,EAAE,mBAAmB,CAC5B,KAAK,CAAC,SAA8B,EACpC,SAAS,CACV;oBACD,SAAS,EAAE,mBAAmB,CAC5B,KAAK,CAAC,SAA8B,EACpC,SAAS,CACV;oBACD,UAAU,EAAE,mBAAmB,CAC7B,KAAK,CAAC,UAA+B,EACrC,SAAS,CACV;iBACF,CAAC;YAEJ,KAAK,SAAS;gBACZ,OAAO;oBACL,IAAI,EAAE,eAAe;oBACrB,MAAM,EAAE,KAAK,CAAC,QAAQ;oBACtB,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAChC,mBAAmB,CAAC,QAA6B,EAAE,SAAS,CAAC,CAC9D;iBACF,CAAC;YAEJ,KAAK,wBAAwB;gBAC3B,OAAO;oBACL,IAAI,EAAE,wBAAwB;oBAC9B,IAAI,EAAE,mBAAmB,CAAC,KAAK,CAAC,IAAyB,EAAE,SAAS,CAAC;oBACrE,IAAI,EAAE,KAAK,CAAC,IAAI;oBAChB,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAChC,mBAAmB,CAAC,QAA6B,EAAE,SAAS,CAAC,CAC9D;iBACF,CAAC;YAEJ,KAAK,qBAAqB;gBACxB,OAAO;oBACL,IAAI,EAAE,qBAAqB;oBAC3B,QAAQ,EAAE,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CACvC,mBAAmB,CAAC,OAA4B,EAAE,SAAS,CAAC,CAC7D;iBACF,CAAC;YAEJ,KAAK,YAAY;gBACf,OAAO,6BAA6B,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;YAEzD,KAAK,iBAAiB,CAAC;YACvB,KAAK,cAAc;gBACjB,OAAO,+BAA+B,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;YAE3D,KAAK,gBAAgB,CAAC,CAAC,CAAC;gBACtB,MAAM,UAAU,GAAG,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;gBACxC,OAAO,UAAU,KAAK,SAAS;oBAC7B,CAAC,CAAC,qBAAqB,CAAC,KAAK,CAAC,IAAI,CAAC;oBACnC,CAAC,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,EAAE,EAAE,UAAU,EAAE,CAAC;YAC7C,CAAC;QACH,CAAC;IACH,CAAC;IAED,IAAI,oBAAoB,CAAC,KAAK,CAAC,EAAE,CAAC;QAChC,OAAO,oBAAoB,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;IAChD,CAAC;IAED,MAAM,IAAI,KAAK,CAAC,kCAAkC,CAAC,CAAC;AACtD,CAAC;AAED,8EAA8E;AAC9E,gCAAgC;AAChC,8EAA8E;AAE9E,MAAM,UAAU,qBAAqB,CACnC,gBAAwB,EACxB,OAAiC,EACjC,kBAA0B,EAC1B,KAAuC;IAEvC,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;IAC7C,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;QACzB,MAAM,IAAI,KAAK,CACb,aAAa,kBAAkB,gCAAgC;YAC7D,IAAI,gBAAgB,SAAS,KAAK,IAAI,CACzC,CAAC;IACJ,CAAC;IACD,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,EAAE,CAAC;QACrD,MAAM,IAAI,KAAK,CACb,aAAa,kBAAkB,mCAAmC;YAChE,IAAI,gBAAgB,SAAS,KAAK,IAAI,CACzC,CAAC;IACJ,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,UAAU,8BAA8B,CAC5C,IAAoB,EACpB,OAAiC,EACjC,kBAA0B;IAE1B,IAAI,IAAI,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;QAC1B,MAAM,IAAI,KAAK,CACb,aAAa,kBAAkB,wDAAwD,CACxF,CAAC;IACJ,CAAC;IAED,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;QAC7B,IAAI,IAAI,CAAC,IAAI,KAAK,YAAY,EAAE,CAAC;YAC/B,MAAM,IAAI,KAAK,CACb,aAAa,kBAAkB,yEAAyE,CACzG,CAAC;QACJ,CAAC;QACD,OAAO,qBAAqB,CAC1B,IAAI,CAAC,EAAE,EACP,OAAO,EACP,kBAAkB,EAClB,WAAW,CACZ,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC;AAED,8EAA8E;AAC9E,+CAA+C;AAC/C,8EAA8E;AAE9E,MAAM,UAAU,qBAAqB,CACnC,IAAoB,EACpB,OAAiC;IAEjC,uEAAuE;IACvE,qEAAqE;IACrE,mEAAmE;IACnE,qEAAqE;IACrE,mEAAmE;IACnE,0DAA0D;IAC1D,MAAM,UAAU,GAAI,IAAyB,CAAC,IAAI,CAAC;IACnD,IAAI,UAAU,KAAK,qBAAqB,EAAE,CAAC;QACzC,MAAM,MAAM,GAAG,IAId,CAAC;QACF,OAAO,cAAc,CACnB,4BAA4B,CAC1B,0BAA0B,CAAC,MAAM,CAAC,OAAO,EAAE,EAAE,CAAC,EAC9C,MAAM,CAAC,QAAQ,CAChB,CACF,CAAC;IACJ,CAAC;IAED,QAAQ,IAAI,CAAC,IAAI,EAAE,CAAC;QAClB,KAAK,QAAQ;YACX,OAAO,IAAI,CAAC,KAAK,CAAC;QACpB,KAAK,SAAS,CAAC,CAAC,CAAC;YACf,MAAM,KAAK,GAAG,QAAQ,CAAC,IAAI,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;YACvC,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,EAAE,CAAC;gBACjC,MAAM,IAAI,KAAK,CACb,8CAA8C,IAAI,CAAC,KAAK,IAAI,CAC7D,CAAC;YACJ,CAAC;YACD,OAAO,KAAK,CAAC;QACf,CAAC;QACD,KAAK,SAAS;YACZ,OAAO,IAAI,CAAC,KAAK,CAAC;QACpB,KAAK,MAAM;YACT,OAAO,IAAI,CAAC;QAEd,KAAK,YAAY,CAAC,CAAC,CAAC;YAClB,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACjC,IAAI,GAAG,KAAK,SAAS;gBAAE,OAAO,GAAG,CAAC;YAClC,OAAO,cAAc,CAAC,wBAAwB,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;QAC3D,CAAC;QAED,KAAK,eAAe;YAClB,IAAI,OAAO,IAAI,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;gBACpC,MAAM,IAAI,KAAK,CACb,6DAA6D,CAC9D,CAAC;YACJ,CAAC;YACD,OAAO,cAAc,CACnB,0BAA0B,CACxB,IAAI,CAAC,MAAM,EACX,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,qBAAqB,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CACxD,CACF,CAAC;QAEJ,KAAK,wBAAwB,CAAC,CAAC,CAAC;YAC9B,MAAM,IAAI,GAAG,qBAAqB,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;YACvD,MAAM,QAAQ,GAAG,YAAY,CAAC,IAAI,CAAC;gBACjC,CAAC,CAAC,gBAAgB,CAAC,IAA2B,CAAC;gBAC/C,CAAC,CAAC,wBAAwB,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;YACrE,OAAO,cAAc,CACnB,kCAAkC,CAChC,QAAQ,EACR,IAAI,CAAC,IAAI,EACT,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,qBAAqB,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CACxD,CACF,CAAC;QACJ,CAAC;QAED,KAAK,iBAAiB,CAAC,CAAC,CAAC;YACvB,MAAM,IAAI,GAAG,qBAAqB,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;YACvD,IAAI,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;gBACrB,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;oBACjB,OAAO,cAAc,CACnB,4BAA4B,CAC1B,wBAAwB,CAAC,IAAI,CAAC,EAC9B,IAAI,CAAC,QAAQ,EACb,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,CAC1B,CACF,CAAC;gBACJ,CAAC;gBACD,OAAQ,IAA2C,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YACrE,CAAC;YACD,IAAI,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC;gBACvB,MAAM,KAAK,GAAG,gBAAgB,CAAC,IAA2B,CAAC,CAAC;gBAC5D,OAAO,cAAc,CACnB,4BAA4B,CAAC,KAAK,EAAE,IAAI,CAAC,QAAQ,EAAE;oBACjD,OAAO,EAAE,IAAI,CAAC,OAAO;iBACtB,CAAC,CACH,CAAC;YACJ,CAAC;YACD,OAAO,cAAc,CACnB,4BAA4B,CAC1B,wBAAwB,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,EACtC,IAAI,CAAC,QAAQ,EACb,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,CAC1B,CACF,CAAC;QACJ,CAAC;QAED,KAAK,cAAc,CAAC,CAAC,CAAC;YACpB,MAAM,IAAI,GAAG,qBAAqB,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;YACvD,sEAAsE;YACtE,mEAAmE;YACnE,qCAAqC;YACrC,IAAI,GAAqB,CAAC;YAC1B,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;gBAClC,GAAG,GAAG,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;YACvC,CAAC;iBAAM,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;gBACxC,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC;YACzB,CAAC;iBAAM,CAAC;gBACN,MAAM,iBAAiB,GAAG,qBAAqB,CAAC,IAAI,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;gBACrE,GAAG,GAAG,YAAY,CAAC,iBAAiB,CAAC;oBACnC,CAAC,CAAC,gBAAgB,CAAC,iBAAwC,CAAC;oBAC5D,CAAC,CAAE,iBAAsC,CAAC;YAC9C,CAAC;YACD,IAAI,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;gBACrB,IAAI,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;oBACjC,OAAO,cAAc,CACnB,yBAAyB,CAAC,wBAAwB,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE;wBAC7D,OAAO,EAAE,IAAI,CAAC,OAAO;wBACrB,OAAO,EAAE,IAAI,CAAC,OAAO;qBACtB,CAAC,CACH,CAAC;gBACJ,CAAC;gBACD,OAAQ,IAA2C,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;YACnE,CAAC;YACD,IAAI,gBAAgB,CAAC,IAAI,CAAC,EAAE,CAAC;gBAC3B,qEAAqE;gBACrE,8DAA8D;gBAC9D,oEAAoE;gBACpE,qEAAqE;gBACrE,sDAAsD;gBACtD,OAAO,cAAc,CACnB,yBAAyB,CACvB,wBAAwB,CAAC,IAA2B,CAAC,EACrD,GAAG,EACH,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,CACjD,CACF,CAAC;YACJ,CAAC;YACD,IAAI,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC;gBACvB,MAAM,KAAK,GAAG,gBAAgB,CAAC,IAA2B,CAAC,CAAC;gBAC5D,OAAO,cAAc,CACnB,yBAAyB,CAAC,KAAK,EAAE,GAAG,EAAE;oBACpC,OAAO,EAAE,IAAI,CAAC,OAAO;oBACrB,OAAO,EAAE,IAAI,CAAC,OAAO;iBACtB,CAAC,CACH,CAAC;YACJ,CAAC;YACD,OAAO,cAAc,CACnB,yBAAyB,CAAC,wBAAwB,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE,GAAG,EAAE;gBACrE,OAAO,EAAE,IAAI,CAAC,OAAO;gBACrB,OAAO,EAAE,IAAI,CAAC,OAAO;aACtB,CAAC,CACH,CAAC;QACJ,CAAC;QAED,KAAK,QAAQ,CAAC,CAAC,CAAC;YACd,MAAM,GAAG,GAA4B,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;YACzD,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;gBACtD,MAAM,CAAC,cAAc,CAAC,GAAG,EAAE,GAAG,EAAE;oBAC9B,KAAK,EAAE,qBAAqB,CAAC,KAAK,EAAE,OAAO,CAAC;oBAC5C,UAAU,EAAE,IAAI;oBAChB,YAAY,EAAE,IAAI;oBAClB,QAAQ,EAAE,IAAI;iBACf,CAAC,CAAC;YACL,CAAC;YACD,OAAO,GAAG,CAAC;QACb,CAAC;QAED,KAAK,OAAO;YACV,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,qBAAqB,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC;QAExE,KAAK,kBAAkB,CAAC,CAAC,CAAC;YACxB,MAAM,SAAS,GAAG,IAAiC,CAAC;YACpD,OAAO,cAAc,CAAC;gBACpB,IAAI,EAAE,QAAQ;gBACd,QAAQ,EAAE,SAAS,CAAC,QAAQ;gBAC5B,IAAI,EAAE,qBAAqB,CAAC,SAAS,CAAC,IAAI,EAAE,OAAO,CAAC;gBACpD,KAAK,EAAE,qBAAqB,CAAC,SAAS,CAAC,KAAK,EAAE,OAAO,CAAC;aACT,CAAC,CAAC;QACnD,CAAC;QAED,KAAK,iBAAiB,CAAC,CAAC,CAAC;YACvB,MAAM,SAAS,GAAG,IAAgC,CAAC;YACnD,OAAO,cAAc,CAAC;gBACpB,IAAI,EAAE,OAAO;gBACb,QAAQ,EAAE,SAAS,CAAC,QAAQ;gBAC5B,QAAQ,EAAE,qBAAqB,CAAC,SAAS,CAAC,QAAQ,EAAE,OAAO,CAAC;aAChB,CAAC,CAAC;QAClD,CAAC;QAED,KAAK,mBAAmB,CAAC,CAAC,CAAC;YACzB,MAAM,SAAS,GAAG,IAAkC,CAAC;YACrD,OAAO,cAAc,CAAC;gBACpB,IAAI,EAAE,SAAS;gBACf,SAAS,EAAE,qBAAqB,CAAC,SAAS,CAAC,SAAS,EAAE,OAAO,CAAC;gBAC9D,SAAS,EAAE,qBAAqB,CAAC,SAAS,CAAC,SAAS,EAAE,OAAO,CAAC;gBAC9D,UAAU,EAAE,qBAAqB,CAAC,SAAS,CAAC,UAAU,EAAE,OAAO,CAAC;aAClB,CAAC,CAAC;QACpD,CAAC;QAED,KAAK,qBAAqB,CAAC,CAAC,CAAC;YAC3B,OAAO,cAAc,CAAC;gBACpB,IAAI,EAAE,qBAAqB;gBAC3B,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CACtC,qBAAqB,CAAC,OAAO,EAAE,OAAO,CAAC,CACxC;aACoB,CAAC,CAAC;QAC3B,CAAC;QAED;YACE,MAAM,IAAI,KAAK,CAAC,qCAAqC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;IACtE,CAAC;AACH,CAAC"}
@@ -0,0 +1,41 @@
1
+ /**
2
+ * ARM state-shape conversion.
3
+ *
4
+ * lowerState maps JS property names to ARM paths, restores flattened
5
+ * nesting, and encodes terminal values using the supplied model shape.
6
+ * raiseState performs the inverse conversion for deserialization.
7
+ * Both follow nested model, array, and record shapes and preserve unknown
8
+ * keys. Property-access expression lowering lives in expression.ts.
9
+ */
10
+ import { type ModelShape } from "../../shape/shape.js";
11
+ /**
12
+ * Recursively rewrite a raw state object into its ARM wire shape. Keys
13
+ * not present in `shape.byJsName` pass through unchanged. Multi-
14
+ * segment ARM paths (from `@flattenProperty`) re-nest objects; nested
15
+ * models, arrays-of-models and records-of-models recurse via
16
+ * `target`. Empty ARM paths fall back to the JS property name.
17
+ *
18
+ * Collisions where two JS-side keys map to overlapping ARM paths merge
19
+ * when both sides are compatible objects; non-object / object collisions
20
+ * throw.
21
+ */
22
+ export declare function lowerState(state: Record<string, unknown>, shape: ModelShape, visited?: WeakSet<object>): Record<string, unknown>;
23
+ /**
24
+ * Inverse of `lowerState`: walks a wire-shape state object and lifts
25
+ * values at each property entry's `armPath` back onto the flat
26
+ * `jsName` key. Recurses into nested model / array / record values via
27
+ * `target`. Empty ARM paths fall back to the JS property name.
28
+ *
29
+ * ARM-shape keys that consumed a nested object entirely (single-segment
30
+ * paths carrying a model `target`) pop that segment from the source
31
+ * so leftovers at intermediate nodes don't silently leak into the
32
+ * output. For multi-segment paths (`@flattenProperty`), only the leaf
33
+ * is extracted; intermediate shared objects may survive as their own
34
+ * top-level entries if the shape also declares a jsName for them.
35
+ *
36
+ * Keys present in the state but not consumed by any property entry
37
+ * pass through unchanged (preserving the "unknown key" escape hatch
38
+ * documented in `lowerState`).
39
+ */
40
+ export declare function raiseState(state: Record<string, unknown>, shape: ModelShape, visited?: WeakSet<object>): Record<string, unknown>;
41
+ //# sourceMappingURL=lower.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lower.d.ts","sourceRoot":"","sources":["../../../src/serialization/json/lower.ts"],"names":[],"mappings":"AAGA;;;;;;;;GAQG;AAEH,OAAO,EAEL,KAAK,UAAU,EAGhB,MAAM,sBAAsB,CAAC;AAwB9B;;;;;;;;;;GAUG;AACH,wBAAgB,UAAU,CACxB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC9B,KAAK,EAAE,UAAU,EACjB,OAAO,GAAE,OAAO,CAAC,MAAM,CAAiB,GACvC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAmCzB;AAmKD;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,UAAU,CACxB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC9B,KAAK,EAAE,UAAU,EACjB,OAAO,GAAE,OAAO,CAAC,MAAM,CAAiB,GACvC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAiDzB"}