@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,399 @@
1
+ // Copyright (c) Microsoft Corporation.
2
+ // Licensed under the MIT License.
3
+ import pluralizeLib from "./pluralize-config.js";
4
+ import { ResourceGroup } from "../../constructs/built-in-resources/resource-group.js";
5
+ import { STATE_PARENT_INDEX, unwrapResourceHandle, } from "../../constructs/resource/resource-proxy.js";
6
+ import { definedProps } from "../../util.js";
7
+ import { getShape } from "../../shape/shape-registry.js";
8
+ import { isExpression, unwrapExpression, } from "../../expression/expressions.js";
9
+ import { isExpressionNode } from "../../expression/ast-nodes.js";
10
+ import { isResource, isResourceDeclaration, isLoopedResource, } from "../../constructs/resource/resource-utils.js";
11
+ import { sanitizeIdentifier } from "./util.js";
12
+ import { lowerState } from "./lower.js";
13
+ import { serializeDefinedObjectEntries, serializeExpression, } from "./expression.js";
14
+ const RESOURCE_RESERVED_KEYS = new Set([
15
+ "apiVersion",
16
+ "existing",
17
+ "id",
18
+ "name",
19
+ "scope",
20
+ "type",
21
+ "condition",
22
+ "dependsOn",
23
+ STATE_PARENT_INDEX,
24
+ ]);
25
+ function hasNestedResourceHandle(value) {
26
+ if (isExpression(value) || isExpressionNode(value)) {
27
+ return false;
28
+ }
29
+ if (isResource(value)) {
30
+ return true;
31
+ }
32
+ if (Array.isArray(value)) {
33
+ return value.some((item) => hasNestedResourceHandle(item));
34
+ }
35
+ if (typeof value === "object" && value !== null) {
36
+ return Object.values(value).some((item) => hasNestedResourceHandle(item));
37
+ }
38
+ return false;
39
+ }
40
+ function createSymbolMap(resources, stack) {
41
+ const symbolMap = new Map();
42
+ const counts = new Map();
43
+ const usedNames = new Set();
44
+ function allocateName(stem) {
45
+ let count = counts.get(stem) ?? 0;
46
+ let identifier;
47
+ do {
48
+ count++;
49
+ identifier = count === 1 ? stem : `${stem}${count}`;
50
+ } while (usedNames.has(identifier));
51
+ counts.set(stem, count);
52
+ usedNames.add(identifier);
53
+ return identifier;
54
+ }
55
+ for (const parameter of stack.parameters.listMetadata()) {
56
+ const identifier = allocateName(parameter.name);
57
+ symbolMap.set(parameter, identifier);
58
+ symbolMap.set(unwrapExpression(stack.parameters.get(parameter.name)), identifier);
59
+ }
60
+ for (const variable of stack.variables.listMetadata()) {
61
+ const identifier = allocateName(variable.name);
62
+ symbolMap.set(variable, identifier);
63
+ symbolMap.set(unwrapExpression(stack.variables.get(variable.name)), identifier);
64
+ }
65
+ for (const resource of resources) {
66
+ const typeName = resource.type.split("/").at(-1) ?? "resource";
67
+ const stem = sanitizeIdentifier(pluralizeLib.singular(typeName));
68
+ symbolMap.set(resource, allocateName(stem));
69
+ }
70
+ // Outputs have a separate Bicep namespace and are not same-stack expression
71
+ // targets, so they keep their authored names outside this symbol map.
72
+ return symbolMap;
73
+ }
74
+ /**
75
+ * Returns the nearest Resource ancestor whose type/scope makes it a Bicep
76
+ * `parent:` target. This includes both:
77
+ *
78
+ * - True ARM nested children (e.g. vault → secret), where the renderer
79
+ * emits `parent: vault`
80
+ * - Extension resources (e.g. storage → diagnosticSetting), where the
81
+ * renderer downgrades to `scope: storage`
82
+ *
83
+ * The renderer (`render.ts`) decides between `parent:` and `scope:` by
84
+ * checking ARM type nesting. The file-layout uses this relationship to
85
+ * co-locate related resources in the same Bicep file.
86
+ *
87
+ * Excludes deployment-scope boundaries like `ResourceGroup` (it's a parent
88
+ * ProvisioningComponent but not an ARM nesting/extension target — child resources are
89
+ * deployed *into* the resource group, expressed as `scope: rg` only when
90
+ * the deployment crosses the RG boundary).
91
+ */
92
+ function getArmParent(resource) {
93
+ const p = resource.parent;
94
+ if (p === undefined || !isResourceDeclaration(p)) {
95
+ return undefined;
96
+ }
97
+ // Exclude ResourceGroup (deployment scope boundary, not an ARM parent).
98
+ if (p.type === ResourceGroup.resourceType)
99
+ return undefined;
100
+ return p;
101
+ }
102
+ /**
103
+ * Walk a resource's ProvisioningComponent-tree ancestor chain to find the nearest
104
+ * `ResourceGroup` component, if any. Used by the serializer to emit a
105
+ * synthetic `scope: rgSymbol` field on regular resources whose deployment
106
+ * scope is a `ResourceGroup` component rather than the stack's `targetScope`.
107
+ *
108
+ * The file-layout pass consumes this signal to split the resource into a
109
+ * child Bicep module scoped to the ResourceGroup; the per-resource `scope:`
110
+ * is stripped at that point because inside the child module the resource is
111
+ * implicitly at the right scope.
112
+ *
113
+ * Returns `undefined` when the resource has no ResourceGroup ancestor (i.e.
114
+ * the stack itself is the nearest scope-providing component).
115
+ */
116
+ function getResourceGroupAncestor(resource) {
117
+ let current = resource.parent;
118
+ while (current !== undefined) {
119
+ if (isResourceDeclaration(current) &&
120
+ current.type === ResourceGroup.resourceType) {
121
+ return current;
122
+ }
123
+ current = current.parent;
124
+ }
125
+ return undefined;
126
+ }
127
+ function collectAllResources(root) {
128
+ const result = [];
129
+ root.visit((node) => {
130
+ if (isResourceDeclaration(node)) {
131
+ result.push(node.self);
132
+ }
133
+ });
134
+ return result;
135
+ }
136
+ function serializeResourceProperties(resource, symbolMap) {
137
+ const rawResource = unwrapResourceHandle(resource);
138
+ const properties = {
139
+ name: serializeExpression(rawResource.name, symbolMap),
140
+ };
141
+ const armParent = getArmParent(resource);
142
+ if (armParent !== undefined) {
143
+ const parentId = symbolMap.get(armParent);
144
+ if (parentId === undefined) {
145
+ throw new Error(`Missing parent symbol for resource type ${rawResource.type}.`);
146
+ }
147
+ const parentNode = { kind: "identifier", id: parentId };
148
+ // Explicit parent index recorded by `Resource`'s constructor when a
149
+ // child is created with `parent.at(i)` / `parent.current()` as its
150
+ // context. When the child is created under a looped parent without an
151
+ // explicit index (only reachable by unwrapping the raw handle out of a
152
+ // `LoopedResource` — not part of the user-facing API), we emit
153
+ // `parent: parentSym` unchanged; Bicep rejects the resulting
154
+ // `parent: parents` (an array) at validation, producing a loud failure
155
+ // instead of a silently-guessed index variable.
156
+ const parentIndex = rawResource[STATE_PARENT_INDEX];
157
+ if (parentIndex !== undefined) {
158
+ properties.parent = {
159
+ kind: "array-access",
160
+ base: parentNode,
161
+ index: serializeExpression(parentIndex, symbolMap),
162
+ nullish: false,
163
+ fromEnd: false,
164
+ };
165
+ }
166
+ else {
167
+ properties.parent = parentNode;
168
+ }
169
+ }
170
+ // Existing resources may carry an explicit scope expression for cross-RG
171
+ // / cross-sub / cross-MG / cross-tenant lookups. Read from state directly;
172
+ // non-existing resources never have `scope` on state.
173
+ const scopeValue = rawResource.scope;
174
+ if (scopeValue !== undefined) {
175
+ properties.scope = serializeExpression(scopeValue, symbolMap);
176
+ }
177
+ else if (armParent === undefined) {
178
+ const rgAncestor = getResourceGroupAncestor(resource);
179
+ if (rgAncestor !== undefined) {
180
+ const groupId = symbolMap.get(rgAncestor);
181
+ if (groupId === undefined) {
182
+ throw new Error("Resource group not found in symbol map.");
183
+ }
184
+ properties.scope = {
185
+ kind: "identifier",
186
+ id: groupId,
187
+ };
188
+ }
189
+ }
190
+ const dependsOn = rawResource["dependsOn"];
191
+ if (dependsOn !== undefined) {
192
+ properties.dependsOn = {
193
+ kind: "array",
194
+ items: dependsOn.map((dependency) => {
195
+ const identifier = symbolMap.get(dependency);
196
+ if (identifier === undefined) {
197
+ throw new Error("Dependency not found in symbol map. Ensure it belongs to the same stack.");
198
+ }
199
+ return { kind: "identifier", id: identifier };
200
+ }),
201
+ };
202
+ }
203
+ // Build the per-resource custom property bag first, applying ARM-
204
+ // shape lowering (rename/flatten/encode) when a shape is
205
+ // registered for `(type, apiVersion)`. The registry resolves
206
+ // discriminated variants from the instance state. No-op when no
207
+ // shape is registered for this resource type.
208
+ const descriptor = typeof rawResource.type === "string" &&
209
+ typeof rawResource.apiVersion === "string"
210
+ ? getShape(rawResource.type, rawResource.apiVersion, rawResource)
211
+ : undefined;
212
+ const userProps = {};
213
+ for (const [key, value] of Object.entries(rawResource)) {
214
+ if (rawResource.existing)
215
+ continue;
216
+ if (value === undefined ||
217
+ RESOURCE_RESERVED_KEYS.has(key) ||
218
+ hasNestedResourceHandle(value)) {
219
+ continue;
220
+ }
221
+ userProps[key] = value;
222
+ }
223
+ const loweredUserProps = descriptor
224
+ ? lowerState(userProps, descriptor)
225
+ : userProps;
226
+ for (const key of Object.keys(loweredUserProps).sort()) {
227
+ properties[key] = serializeExpression(loweredUserProps[key], symbolMap);
228
+ }
229
+ return properties;
230
+ }
231
+ function serializeResource(resource, symbolMap) {
232
+ const resourceId = symbolMap.get(resource);
233
+ if (resourceId === undefined) {
234
+ throw new Error(`Missing synthesized symbol for resource type ${resource.type}.`);
235
+ }
236
+ const properties = serializeResourceProperties(resource, symbolMap);
237
+ const rawResource = unwrapResourceHandle(resource);
238
+ const condition = rawResource["condition"] !== undefined
239
+ ? serializeExpression(rawResource["condition"], symbolMap)
240
+ : undefined;
241
+ // Loop metadata lives on `LoopedResource.loop` — a public field on the
242
+ // wrapper subclass. Scalar `Resource` instances don't have one.
243
+ const loopCtx = isLoopedResource(resource) ? resource.loop : undefined;
244
+ // Build decorators for the resource (currently only batchSize from forEach)
245
+ const batchSize = loopCtx?.batchSize;
246
+ const decorators = batchSize !== undefined ? { batchSize } : undefined;
247
+ // Wrap `value` in `if-condition` / `for-expression` when the resource is
248
+ // guarded / looped. Bicep source order is `for` outer, `if` inner —
249
+ // `[for item in coll: if (cond) { ... }]` — so wrap if-condition first,
250
+ // then for-expression around it.
251
+ let wireValue = { kind: "object", value: properties };
252
+ if (condition !== undefined) {
253
+ wireValue = { kind: "if-condition", condition, body: wireValue };
254
+ }
255
+ if (loopCtx !== undefined) {
256
+ wireValue = {
257
+ kind: "for-expression",
258
+ itemVariable: loopCtx.itemVariable,
259
+ ...(loopCtx.indexVariable !== undefined
260
+ ? { indexVariable: loopCtx.indexVariable }
261
+ : {}),
262
+ collection: serializeExpression(loopCtx.collection, symbolMap),
263
+ body: wireValue,
264
+ };
265
+ }
266
+ const node = {
267
+ bicepIdentifier: resourceId,
268
+ type: resource.type,
269
+ apiVersion: resource.apiVersion,
270
+ existing: resource.existing ?? false,
271
+ value: wireValue,
272
+ ...(decorators !== undefined ? { decorators } : {}),
273
+ };
274
+ return [resourceId, node];
275
+ }
276
+ function buildDecorators(decl, symbolMap) {
277
+ const d = {};
278
+ if (decl.description !== undefined)
279
+ d.description = decl.description;
280
+ if ("secure" in decl && decl.secure)
281
+ d.secure = true;
282
+ if ("minValue" in decl && decl.minValue !== undefined) {
283
+ d.minValue = decl.minValue;
284
+ }
285
+ if ("maxValue" in decl && decl.maxValue !== undefined) {
286
+ d.maxValue = decl.maxValue;
287
+ }
288
+ if ("minLength" in decl && decl.minLength !== undefined) {
289
+ d.minLength = decl.minLength;
290
+ }
291
+ if ("maxLength" in decl && decl.maxLength !== undefined) {
292
+ d.maxLength = decl.maxLength;
293
+ }
294
+ if ("metadata" in decl && decl.metadata !== undefined) {
295
+ d.metadata = serializeDefinedObjectEntries(decl.metadata, symbolMap);
296
+ }
297
+ if ("allowed" in decl && decl.allowed !== undefined) {
298
+ d.allowed = decl.allowed.map((v) => serializeExpression(v, symbolMap));
299
+ }
300
+ if ("discriminator" in decl && decl.discriminator !== undefined) {
301
+ d.discriminator = decl.discriminator;
302
+ }
303
+ if ("sealed" in decl && decl.sealed)
304
+ d.sealed = true;
305
+ if ("export" in decl && decl.export)
306
+ d.export = true;
307
+ return Object.keys(d).length > 0 ? d : undefined;
308
+ }
309
+ function serializeParameters(stack, symbolMap) {
310
+ if (stack.parameters.size === 0)
311
+ return undefined;
312
+ return Object.fromEntries(stack.parameters.listMetadata().map((p) => {
313
+ const identifier = symbolMap.get(p);
314
+ const node = definedProps({
315
+ bicepIdentifier: identifier,
316
+ valueType: { kind: "primitive-type", name: p.type },
317
+ defaultValue: p.defaultValue !== undefined
318
+ ? serializeExpression(p.defaultValue, symbolMap)
319
+ : undefined,
320
+ decorators: buildDecorators(p, symbolMap),
321
+ });
322
+ return [identifier, node];
323
+ }));
324
+ }
325
+ function serializeVariables(stack, symbolMap) {
326
+ if (stack.variables.size === 0)
327
+ return undefined;
328
+ return Object.fromEntries(stack.variables.listMetadata().map((v) => {
329
+ const identifier = symbolMap.get(v);
330
+ const node = definedProps({
331
+ bicepIdentifier: identifier,
332
+ value: serializeExpression(v.value, symbolMap),
333
+ decorators: buildDecorators(v, symbolMap),
334
+ });
335
+ return [identifier, node];
336
+ }));
337
+ }
338
+ function serializeOutputs(stack, symbolMap) {
339
+ if (stack.outputs.size === 0)
340
+ return undefined;
341
+ return Object.fromEntries(stack.outputs.list().map((o) => {
342
+ let value;
343
+ if (isResource(o.value)) {
344
+ const symbol = symbolMap.get(o.value);
345
+ if (symbol === undefined) {
346
+ throw new Error(`Resource not found in symbol map. Ensure it belongs to the same stack.`);
347
+ }
348
+ value = { kind: "identifier", id: symbol };
349
+ }
350
+ else {
351
+ value = serializeExpression(o.value, symbolMap);
352
+ }
353
+ const node = definedProps({
354
+ bicepIdentifier: o.name,
355
+ valueType: { kind: "primitive-type", name: o.type },
356
+ value,
357
+ decorators: buildDecorators(o, symbolMap),
358
+ });
359
+ return [o.name, node];
360
+ }));
361
+ }
362
+ function serializeFile(stack, resources, symbolMap) {
363
+ return {
364
+ ...(stack.targetScope !== "resourceGroup"
365
+ ? { targetScope: stack.targetScope }
366
+ : {}),
367
+ fileName: `${stack.name}.bicep`,
368
+ ...definedProps({
369
+ parameters: serializeParameters(stack, symbolMap),
370
+ variables: serializeVariables(stack, symbolMap),
371
+ resources: resources.length === 0
372
+ ? undefined
373
+ : Object.fromEntries(resources.map((resource) => serializeResource(resource, symbolMap))),
374
+ outputs: serializeOutputs(stack, symbolMap),
375
+ }),
376
+ };
377
+ }
378
+ /**
379
+ * Serializes a stack or a nonempty array of stacks into a JSON-compatible
380
+ * {@link SerializationDocument} with one `infras` entry per stack.
381
+ *
382
+ * The document preserves declarations and symbolic expressions for rendering
383
+ * or restoration. Pass `JSON.stringify(serialize(stack))` to {@link deserialize}
384
+ * to reconstruct the authored stack; this does not deploy any resources.
385
+ */
386
+ export function serialize(input) {
387
+ const stacks = Array.isArray(input) ? input : [input];
388
+ if (stacks.length === 0) {
389
+ throw new Error("Cannot serialize an empty stack collection.");
390
+ }
391
+ return {
392
+ infras: stacks.map((stack) => {
393
+ const resources = collectAllResources(stack);
394
+ const symbolMap = createSymbolMap(resources, stack);
395
+ return serializeFile(stack, resources, symbolMap);
396
+ }),
397
+ };
398
+ }
399
+ //# sourceMappingURL=serialize.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"serialize.js","sourceRoot":"","sources":["../../../src/serialization/json/serialize.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare function sanitizeIdentifier(value: string, fallback?: string): string;
2
+ //# sourceMappingURL=util.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"util.d.ts","sourceRoot":"","sources":["../../../src/serialization/json/util.ts"],"names":[],"mappings":"AAGA,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,MAAM,EACb,QAAQ,SAAa,GACpB,MAAM,CAmBR"}
@@ -0,0 +1,19 @@
1
+ // Copyright (c) Microsoft Corporation.
2
+ // Licensed under the MIT License.
3
+ export function sanitizeIdentifier(value, fallback = "resource") {
4
+ const words = value
5
+ .replace(/[^A-Za-z0-9]+/g, " ")
6
+ .trim()
7
+ .split(/\s+/)
8
+ .filter((w) => w.length > 0);
9
+ if (words.length === 0) {
10
+ return fallback;
11
+ }
12
+ const identifier = words
13
+ .map((word, index) => index === 0
14
+ ? word.charAt(0).toLowerCase() + word.slice(1)
15
+ : word.charAt(0).toUpperCase() + word.slice(1))
16
+ .join("");
17
+ return /^[0-9]/.test(identifier) ? `_${identifier}` : identifier;
18
+ }
19
+ //# sourceMappingURL=util.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"util.js","sourceRoot":"","sources":["../../../src/serialization/json/util.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,kCAAkC;AAElC,MAAM,UAAU,kBAAkB,CAChC,KAAa,EACb,QAAQ,GAAG,UAAU;IAErB,MAAM,KAAK,GAAG,KAAK;SAChB,OAAO,CAAC,gBAAgB,EAAE,GAAG,CAAC;SAC9B,IAAI,EAAE;SACN,KAAK,CAAC,KAAK,CAAC;SACZ,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IAE/B,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACvB,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED,MAAM,UAAU,GAAG,KAAK;SACrB,GAAG,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CACnB,KAAK,KAAK,CAAC;QACT,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;QAC9C,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CACjD;SACA,IAAI,CAAC,EAAE,CAAC,CAAC;IACZ,OAAO,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,IAAI,UAAU,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC;AACnE,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { ModuleDeclarationNode, OutputDeclarationNode, ResourceDeclarationNode, VariableDeclarationNode } from "./contract/index.js";
2
+ export declare function collectDependenciesForDeclaration(node: ResourceDeclarationNode | VariableDeclarationNode | OutputDeclarationNode | ModuleDeclarationNode): Set<string>;
3
+ //# sourceMappingURL=utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/serialization/utils.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAGV,qBAAqB,EACrB,qBAAqB,EACrB,uBAAuB,EAEvB,uBAAuB,EACxB,MAAM,qBAAqB,CAAC;AAE7B,wBAAgB,iCAAiC,CAC/C,IAAI,EACA,uBAAuB,GACvB,uBAAuB,GACvB,qBAAqB,GACrB,qBAAqB,GACxB,GAAG,CAAC,MAAM,CAAC,CAQb"}
@@ -0,0 +1,146 @@
1
+ // Copyright (c) Microsoft Corporation.
2
+ // Licensed under the MIT License.
3
+ export function collectDependenciesForDeclaration(node) {
4
+ const identifiers = new Set();
5
+ if ("valueType" in node) {
6
+ collectIdentifierIdsFromType(node.valueType, identifiers);
7
+ }
8
+ collectIdentifierIdsFromExpression(node.value, identifiers);
9
+ collectIdentifierIdsFromDecorators(node.decorators, identifiers);
10
+ return identifiers;
11
+ }
12
+ function collectIdentifierIdsFromDecorators(decorators, identifiers) {
13
+ for (const value of Object.values(decorators?.metadata ?? {})) {
14
+ collectIdentifierIdsFromExpression(value, identifiers);
15
+ }
16
+ for (const value of decorators?.allowed ?? []) {
17
+ collectIdentifierIdsFromExpression(value, identifiers);
18
+ }
19
+ }
20
+ function collectIdentifierIdsFromType(type, identifiers) {
21
+ switch (type.kind) {
22
+ case "type-reference":
23
+ identifiers.add(type.name);
24
+ return;
25
+ case "union-type-member":
26
+ case "parameterized-type-argument":
27
+ collectIdentifierIdsFromType(type.valueType, identifiers);
28
+ return;
29
+ case "array-type":
30
+ collectIdentifierIdsFromType(type.item, identifiers);
31
+ return;
32
+ case "object-type-property":
33
+ case "object-type-additional-properties":
34
+ collectIdentifierIdsFromType(type.valueType, identifiers);
35
+ collectIdentifierIdsFromDecorators(type.decorators, identifiers);
36
+ return;
37
+ case "object-type":
38
+ for (const property of type.properties) {
39
+ collectIdentifierIdsFromType(property, identifiers);
40
+ }
41
+ if (type.additionalProperties !== undefined) {
42
+ collectIdentifierIdsFromType(type.additionalProperties, identifiers);
43
+ }
44
+ return;
45
+ case "union-type":
46
+ for (const member of type.members) {
47
+ collectIdentifierIdsFromType(member.valueType, identifiers);
48
+ }
49
+ return;
50
+ case "nullable-type":
51
+ collectIdentifierIdsFromType(type.base, identifiers);
52
+ return;
53
+ case "parameterized-type-instantiation":
54
+ collectIdentifierIdsFromType(type.base, identifiers);
55
+ for (const argument of type.args) {
56
+ collectIdentifierIdsFromType(argument.valueType, identifiers);
57
+ }
58
+ return;
59
+ case "primitive-type":
60
+ case "string-type-literal":
61
+ case "integer-type-literal":
62
+ case "boolean-type-literal":
63
+ case "null-type-literal":
64
+ return;
65
+ default: {
66
+ const exhaustive = type;
67
+ throw new Error(`Unsupported type kind: ${exhaustive.kind}`);
68
+ }
69
+ }
70
+ }
71
+ function collectIdentifierIdsFromExpression(expr, out, boundIdentifiers = new Set()) {
72
+ switch (expr.kind) {
73
+ case "identifier":
74
+ if (!boundIdentifiers.has(expr.id))
75
+ out.add(expr.id);
76
+ break;
77
+ case "property-access":
78
+ collectIdentifierIdsFromExpression(expr.base, out, boundIdentifiers);
79
+ break;
80
+ case "array-access":
81
+ collectIdentifierIdsFromExpression(expr.base, out, boundIdentifiers);
82
+ collectIdentifierIdsFromExpression(expr.index, out, boundIdentifiers);
83
+ break;
84
+ case "function-call":
85
+ if (typeof expr.target !== "string") {
86
+ collectIdentifierIdsFromExpression(expr.target, out, boundIdentifiers);
87
+ }
88
+ for (const arg of expr.args) {
89
+ collectIdentifierIdsFromExpression(arg, out, boundIdentifiers);
90
+ }
91
+ break;
92
+ case "instance-function-call":
93
+ collectIdentifierIdsFromExpression(expr.base, out, boundIdentifiers);
94
+ for (const arg of expr.args) {
95
+ collectIdentifierIdsFromExpression(arg, out, boundIdentifiers);
96
+ }
97
+ break;
98
+ case "binary-operation":
99
+ collectIdentifierIdsFromExpression(expr.left, out, boundIdentifiers);
100
+ collectIdentifierIdsFromExpression(expr.right, out, boundIdentifiers);
101
+ break;
102
+ case "unary-operation":
103
+ collectIdentifierIdsFromExpression(expr.argument, out, boundIdentifiers);
104
+ break;
105
+ case "ternary-operation":
106
+ collectIdentifierIdsFromExpression(expr.condition, out, boundIdentifiers);
107
+ collectIdentifierIdsFromExpression(expr.trueValue, out, boundIdentifiers);
108
+ collectIdentifierIdsFromExpression(expr.falseValue, out, boundIdentifiers);
109
+ break;
110
+ case "if-condition":
111
+ collectIdentifierIdsFromExpression(expr.condition, out, boundIdentifiers);
112
+ collectIdentifierIdsFromExpression(expr.body, out, boundIdentifiers);
113
+ break;
114
+ case "for-expression": {
115
+ collectIdentifierIdsFromExpression(expr.collection, out, boundIdentifiers);
116
+ const loopBindings = new Set(boundIdentifiers);
117
+ loopBindings.add(expr.itemVariable);
118
+ if (expr.indexVariable !== undefined) {
119
+ loopBindings.add(expr.indexVariable);
120
+ }
121
+ collectIdentifierIdsFromExpression(expr.body, out, loopBindings);
122
+ break;
123
+ }
124
+ case "interpolated-string":
125
+ for (const segment of expr.segments) {
126
+ collectIdentifierIdsFromExpression(segment, out, boundIdentifiers);
127
+ }
128
+ break;
129
+ case "object":
130
+ for (const value of Object.values(expr.value)) {
131
+ collectIdentifierIdsFromExpression(value, out, boundIdentifiers);
132
+ }
133
+ break;
134
+ case "array":
135
+ for (const item of expr.items) {
136
+ collectIdentifierIdsFromExpression(item, out, boundIdentifiers);
137
+ }
138
+ break;
139
+ case "null":
140
+ case "boolean":
141
+ case "integer":
142
+ case "string":
143
+ break;
144
+ }
145
+ }
146
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/serialization/utils.ts"],"names":[],"mappings":"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"}