swallowkit 1.1.2 → 2.0.0-alpha.10

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 (262) hide show
  1. package/README.ja.md +61 -7
  2. package/README.md +61 -7
  3. package/dist/cli/commands/add-auth.d.ts.map +1 -1
  4. package/dist/cli/commands/add-auth.js +103 -27
  5. package/dist/cli/commands/add-auth.js.map +1 -1
  6. package/dist/cli/commands/configure-mcp.d.ts +12 -0
  7. package/dist/cli/commands/configure-mcp.d.ts.map +1 -0
  8. package/dist/cli/commands/configure-mcp.js +42 -0
  9. package/dist/cli/commands/configure-mcp.js.map +1 -0
  10. package/dist/cli/commands/dev.d.ts +5 -2
  11. package/dist/cli/commands/dev.d.ts.map +1 -1
  12. package/dist/cli/commands/dev.js +143 -67
  13. package/dist/cli/commands/dev.js.map +1 -1
  14. package/dist/cli/commands/init.d.ts +14 -7
  15. package/dist/cli/commands/init.d.ts.map +1 -1
  16. package/dist/cli/commands/init.js +149 -170
  17. package/dist/cli/commands/init.js.map +1 -1
  18. package/dist/cli/commands/migrations.d.ts.map +1 -1
  19. package/dist/cli/commands/migrations.js +25 -0
  20. package/dist/cli/commands/migrations.js.map +1 -1
  21. package/dist/cli/commands/provision.d.ts +5 -0
  22. package/dist/cli/commands/provision.d.ts.map +1 -1
  23. package/dist/cli/commands/provision.js +278 -55
  24. package/dist/cli/commands/provision.js.map +1 -1
  25. package/dist/cli/commands/scaffold.d.ts +5 -1
  26. package/dist/cli/commands/scaffold.d.ts.map +1 -1
  27. package/dist/cli/commands/scaffold.js +123 -18
  28. package/dist/cli/commands/scaffold.js.map +1 -1
  29. package/dist/cli/index.d.ts +2 -0
  30. package/dist/cli/index.d.ts.map +1 -1
  31. package/dist/cli/index.js +49 -8
  32. package/dist/cli/index.js.map +1 -1
  33. package/dist/core/config.d.ts +2 -1
  34. package/dist/core/config.d.ts.map +1 -1
  35. package/dist/core/config.js +19 -0
  36. package/dist/core/config.js.map +1 -1
  37. package/dist/core/operations/create-model.d.ts +2 -0
  38. package/dist/core/operations/create-model.d.ts.map +1 -1
  39. package/dist/core/operations/create-model.js +60 -8
  40. package/dist/core/operations/create-model.js.map +1 -1
  41. package/dist/core/operations/migration-generator.d.ts.map +1 -1
  42. package/dist/core/operations/migration-generator.js +12 -1
  43. package/dist/core/operations/migration-generator.js.map +1 -1
  44. package/dist/core/operations/model-migration.d.ts +22 -0
  45. package/dist/core/operations/model-migration.d.ts.map +1 -0
  46. package/dist/core/operations/model-migration.js +36 -0
  47. package/dist/core/operations/model-migration.js.map +1 -0
  48. package/dist/core/operations/provision-deployment.d.ts +52 -0
  49. package/dist/core/operations/provision-deployment.d.ts.map +1 -0
  50. package/dist/core/operations/provision-deployment.js +164 -0
  51. package/dist/core/operations/provision-deployment.js.map +1 -0
  52. package/dist/core/operations/provision-operations.d.ts +62 -6
  53. package/dist/core/operations/provision-operations.d.ts.map +1 -1
  54. package/dist/core/operations/provision-operations.js +653 -115
  55. package/dist/core/operations/provision-operations.js.map +1 -1
  56. package/dist/core/operations/scaffold-apply.d.ts +1 -0
  57. package/dist/core/operations/scaffold-apply.d.ts.map +1 -1
  58. package/dist/core/operations/scaffold-apply.js +1 -0
  59. package/dist/core/operations/scaffold-apply.js.map +1 -1
  60. package/dist/core/operations/scaffold-machine.d.ts +1 -0
  61. package/dist/core/operations/scaffold-machine.d.ts.map +1 -1
  62. package/dist/core/operations/scaffold-machine.js.map +1 -1
  63. package/dist/core/operations/scaffold-plan.d.ts +2 -0
  64. package/dist/core/operations/scaffold-plan.d.ts.map +1 -1
  65. package/dist/core/operations/scaffold-plan.js +3 -1
  66. package/dist/core/operations/scaffold-plan.js.map +1 -1
  67. package/dist/core/project/agent-instructions.d.ts +2 -1
  68. package/dist/core/project/agent-instructions.d.ts.map +1 -1
  69. package/dist/core/project/agent-instructions.js +15 -0
  70. package/dist/core/project/agent-instructions.js.map +1 -1
  71. package/dist/core/project/boundaries.d.ts +5 -2
  72. package/dist/core/project/boundaries.d.ts.map +1 -1
  73. package/dist/core/project/boundaries.js +51 -20
  74. package/dist/core/project/boundaries.js.map +1 -1
  75. package/dist/core/project/capabilities.d.ts +17 -0
  76. package/dist/core/project/capabilities.d.ts.map +1 -1
  77. package/dist/core/project/capabilities.js +45 -6
  78. package/dist/core/project/capabilities.js.map +1 -1
  79. package/dist/core/project/home-page.d.ts +4 -0
  80. package/dist/core/project/home-page.d.ts.map +1 -0
  81. package/dist/core/project/home-page.js +113 -0
  82. package/dist/core/project/home-page.js.map +1 -0
  83. package/dist/core/project/manifest.d.ts +3 -1
  84. package/dist/core/project/manifest.d.ts.map +1 -1
  85. package/dist/core/project/manifest.js +47 -25
  86. package/dist/core/project/manifest.js.map +1 -1
  87. package/dist/core/project/mcp-config.d.ts +26 -0
  88. package/dist/core/project/mcp-config.d.ts.map +1 -0
  89. package/dist/core/project/mcp-config.js +117 -0
  90. package/dist/core/project/mcp-config.js.map +1 -0
  91. package/dist/core/project/react-project.d.ts +26 -0
  92. package/dist/core/project/react-project.d.ts.map +1 -0
  93. package/dist/core/project/react-project.js +443 -0
  94. package/dist/core/project/react-project.js.map +1 -0
  95. package/dist/core/project/state.d.ts +7 -0
  96. package/dist/core/project/state.d.ts.map +1 -1
  97. package/dist/core/project/state.js +86 -0
  98. package/dist/core/project/state.js.map +1 -1
  99. package/dist/core/project/validation.d.ts.map +1 -1
  100. package/dist/core/project/validation.js +32 -10
  101. package/dist/core/project/validation.js.map +1 -1
  102. package/dist/core/project/workflows.d.ts.map +1 -1
  103. package/dist/core/project/workflows.js +53 -7
  104. package/dist/core/project/workflows.js.map +1 -1
  105. package/dist/core/scaffold/auth-generator.d.ts.map +1 -1
  106. package/dist/core/scaffold/auth-generator.js +26 -27
  107. package/dist/core/scaffold/auth-generator.js.map +1 -1
  108. package/dist/core/scaffold/model-parser.d.ts +23 -0
  109. package/dist/core/scaffold/model-parser.d.ts.map +1 -1
  110. package/dist/core/scaffold/model-parser.js +407 -137
  111. package/dist/core/scaffold/model-parser.js.map +1 -1
  112. package/dist/core/scaffold/native-schema-generator.d.ts +13 -0
  113. package/dist/core/scaffold/native-schema-generator.d.ts.map +1 -1
  114. package/dist/core/scaffold/native-schema-generator.js +294 -91
  115. package/dist/core/scaffold/native-schema-generator.js.map +1 -1
  116. package/dist/core/scaffold/openapi-generator.d.ts +5 -0
  117. package/dist/core/scaffold/openapi-generator.d.ts.map +1 -1
  118. package/dist/core/scaffold/openapi-generator.js +53 -3
  119. package/dist/core/scaffold/openapi-generator.js.map +1 -1
  120. package/dist/core/scaffold/react-bff-generator.d.ts +10 -0
  121. package/dist/core/scaffold/react-bff-generator.d.ts.map +1 -0
  122. package/dist/core/scaffold/react-bff-generator.js +252 -0
  123. package/dist/core/scaffold/react-bff-generator.js.map +1 -0
  124. package/dist/core/scaffold/react-ui-generator.d.ts +6 -0
  125. package/dist/core/scaffold/react-ui-generator.d.ts.map +1 -0
  126. package/dist/core/scaffold/react-ui-generator.js +41 -0
  127. package/dist/core/scaffold/react-ui-generator.js.map +1 -0
  128. package/dist/core/scaffold/ui-generator.d.ts +0 -3
  129. package/dist/core/scaffold/ui-generator.d.ts.map +1 -1
  130. package/dist/core/scaffold/ui-generator.js +68 -7
  131. package/dist/core/scaffold/ui-generator.js.map +1 -1
  132. package/dist/core/verify/index.d.ts +4 -3
  133. package/dist/core/verify/index.d.ts.map +1 -1
  134. package/dist/core/verify/index.js +122 -5
  135. package/dist/core/verify/index.js.map +1 -1
  136. package/dist/index.d.ts +3 -3
  137. package/dist/index.d.ts.map +1 -1
  138. package/dist/index.js +3 -2
  139. package/dist/index.js.map +1 -1
  140. package/dist/machine/contracts.d.ts +1 -0
  141. package/dist/machine/contracts.d.ts.map +1 -1
  142. package/dist/machine/errors.d.ts +3 -2
  143. package/dist/machine/errors.d.ts.map +1 -1
  144. package/dist/machine/errors.js +2 -1
  145. package/dist/machine/errors.js.map +1 -1
  146. package/dist/machine/index.d.ts.map +1 -1
  147. package/dist/machine/index.js +61 -30
  148. package/dist/machine/index.js.map +1 -1
  149. package/dist/mcp/index.d.ts +6 -4
  150. package/dist/mcp/index.d.ts.map +1 -1
  151. package/dist/mcp/index.js +210 -25
  152. package/dist/mcp/index.js.map +1 -1
  153. package/dist/mcp/version-selection.d.ts +55 -0
  154. package/dist/mcp/version-selection.d.ts.map +1 -0
  155. package/dist/mcp/version-selection.js +152 -0
  156. package/dist/mcp/version-selection.js.map +1 -0
  157. package/dist/types/index.d.ts +4 -0
  158. package/dist/types/index.d.ts.map +1 -1
  159. package/dist/utils/azure-cli.d.ts +56 -0
  160. package/dist/utils/azure-cli.d.ts.map +1 -0
  161. package/dist/utils/azure-cli.js +326 -0
  162. package/dist/utils/azure-cli.js.map +1 -0
  163. package/dist/utils/azure-diagnostics.d.ts +16 -0
  164. package/dist/utils/azure-diagnostics.d.ts.map +1 -0
  165. package/dist/utils/azure-diagnostics.js +68 -0
  166. package/dist/utils/azure-diagnostics.js.map +1 -0
  167. package/dist/utils/package-manager.d.ts +2 -2
  168. package/dist/utils/package-manager.d.ts.map +1 -1
  169. package/dist/utils/package-manager.js +6 -3
  170. package/dist/utils/package-manager.js.map +1 -1
  171. package/dist/utils/python-uv.d.ts +5 -7
  172. package/dist/utils/python-uv.d.ts.map +1 -1
  173. package/dist/utils/python-uv.js +50 -24
  174. package/dist/utils/python-uv.js.map +1 -1
  175. package/dist/utils/react-dev.d.ts +4 -0
  176. package/dist/utils/react-dev.d.ts.map +1 -0
  177. package/dist/utils/react-dev.js +35 -0
  178. package/dist/utils/react-dev.js.map +1 -0
  179. package/dist/utils/semver.d.ts +14 -0
  180. package/dist/utils/semver.d.ts.map +1 -0
  181. package/dist/utils/semver.js +61 -0
  182. package/dist/utils/semver.js.map +1 -0
  183. package/package.json +7 -4
  184. package/src/__tests__/__snapshots__/boundaries.test.ts.snap +154 -0
  185. package/src/__tests__/agent-instructions.test.ts +6 -1
  186. package/src/__tests__/agent-loop-phase34.test.ts +143 -8
  187. package/src/__tests__/auth.test.ts +9 -0
  188. package/src/__tests__/azure-cli.test.ts +202 -0
  189. package/src/__tests__/boundaries.test.ts +42 -0
  190. package/src/__tests__/csharp-schema.test.ts +261 -0
  191. package/src/__tests__/dev.test.ts +13 -6
  192. package/src/__tests__/fixtures/az wrapper.cmd +2 -0
  193. package/src/__tests__/fixtures/azure-cli.cjs +153 -0
  194. package/src/__tests__/fixtures/provision-runner.cjs +28 -0
  195. package/src/__tests__/generated-project-matrix.test.ts +789 -0
  196. package/src/__tests__/home-page.test.ts +50 -0
  197. package/src/__tests__/init.test.ts +145 -5
  198. package/src/__tests__/mcp-version.test.ts +262 -0
  199. package/src/__tests__/mcp.test.ts +120 -3
  200. package/src/__tests__/multi-auth.test.ts +115 -4
  201. package/src/__tests__/package-manager.test.ts +17 -2
  202. package/src/__tests__/plan-apply.test.ts +179 -0
  203. package/src/__tests__/provision-runtime.test.ts +722 -0
  204. package/src/__tests__/python-uv.test.ts +50 -14
  205. package/src/__tests__/python-venv.test.ts +48 -0
  206. package/src/__tests__/react-dev.test.ts +72 -0
  207. package/src/__tests__/react.test.ts +838 -0
  208. package/src/__tests__/release-metadata.test.ts +121 -0
  209. package/src/__tests__/schema-analysis.test.ts +329 -0
  210. package/src/cli/commands/add-auth.ts +103 -29
  211. package/src/cli/commands/configure-mcp.ts +54 -0
  212. package/src/cli/commands/dev.ts +145 -73
  213. package/src/cli/commands/init.ts +147 -172
  214. package/src/cli/commands/migrations.ts +22 -0
  215. package/src/cli/commands/provision.ts +294 -56
  216. package/src/cli/commands/scaffold.ts +145 -22
  217. package/src/cli/index.ts +46 -10
  218. package/src/core/config.ts +21 -1
  219. package/src/core/operations/create-model.ts +51 -13
  220. package/src/core/operations/migration-generator.ts +14 -1
  221. package/src/core/operations/model-migration.ts +52 -0
  222. package/src/core/operations/provision-deployment.ts +183 -0
  223. package/src/core/operations/provision-operations.ts +662 -154
  224. package/src/core/operations/scaffold-apply.ts +2 -0
  225. package/src/core/operations/scaffold-machine.ts +1 -0
  226. package/src/core/operations/scaffold-plan.ts +5 -1
  227. package/src/core/project/agent-instructions.ts +17 -1
  228. package/src/core/project/agent-templates/AGENTS.md +113 -15
  229. package/src/core/project/agent-templates/CLAUDE.md +14 -1
  230. package/src/core/project/agent-templates/bff-routes.instructions.md +5 -3
  231. package/src/core/project/agent-templates/copilot-instructions.md +15 -1
  232. package/src/core/project/agent-templates/shared-models.instructions.md +11 -3
  233. package/src/core/project/boundaries.ts +62 -20
  234. package/src/core/project/capabilities.ts +63 -6
  235. package/src/core/project/home-page.ts +114 -0
  236. package/src/core/project/manifest.ts +52 -27
  237. package/src/core/project/mcp-config.ts +84 -0
  238. package/src/core/project/react-project.ts +529 -0
  239. package/src/core/project/state.ts +70 -0
  240. package/src/core/project/validation.ts +32 -10
  241. package/src/core/project/workflows.ts +53 -7
  242. package/src/core/scaffold/auth-generator.ts +26 -27
  243. package/src/core/scaffold/model-parser.ts +413 -129
  244. package/src/core/scaffold/native-schema-generator.ts +319 -103
  245. package/src/core/scaffold/openapi-generator.ts +63 -5
  246. package/src/core/scaffold/react-bff-generator.ts +292 -0
  247. package/src/core/scaffold/react-ui-generator.ts +51 -0
  248. package/src/core/scaffold/ui-generator.ts +70 -8
  249. package/src/core/verify/index.ts +118 -6
  250. package/src/index.ts +3 -1
  251. package/src/machine/contracts.ts +1 -0
  252. package/src/machine/errors.ts +4 -2
  253. package/src/machine/index.ts +67 -36
  254. package/src/mcp/index.ts +221 -31
  255. package/src/mcp/version-selection.ts +163 -0
  256. package/src/types/index.ts +4 -0
  257. package/src/utils/azure-cli.ts +315 -0
  258. package/src/utils/azure-diagnostics.ts +75 -0
  259. package/src/utils/package-manager.ts +7 -4
  260. package/src/utils/python-uv.ts +53 -33
  261. package/src/utils/react-dev.ts +31 -0
  262. package/src/utils/semver.ts +59 -0
@@ -0,0 +1,153 @@
1
+ const fs = require("node:fs");
2
+ const args = process.argv.slice(2);
3
+ const emit = (value) => process.stdout.write(JSON.stringify(value));
4
+
5
+ if (args[0] === "process") {
6
+ const mode = args[1];
7
+ if (mode === "warning" || mode === "slow") {
8
+ console.error("WARNING: fixture Bicep warning");
9
+ if (mode === "slow") setTimeout(() => emit({ done: true }), Number(args[2] ?? 600));
10
+ } else if (mode === "flood") {
11
+ process.stdout.write("x".repeat(2 * 1024 * 1024));
12
+ process.stderr.write("y".repeat(2 * 1024 * 1024));
13
+ } else if (mode === "communication") {
14
+ console.error("ConnectionResetError: fixture communication interrupted");
15
+ process.exitCode = 1;
16
+ } else if (mode === "nonzero") {
17
+ console.error("ERROR: fixture az failure");
18
+ process.exitCode = 7;
19
+ } else if (mode === "echo") {
20
+ emit(args.slice(2));
21
+ } else if (mode === "terminate") {
22
+ process.kill(process.pid, "SIGTERM");
23
+ }
24
+ return;
25
+ }
26
+
27
+ const file = process.env.SWALLOWKIT_AZ_FIXTURE_STATE;
28
+ if (!file) throw new Error("This fixture requires its isolated state file; it never invokes Azure.");
29
+ const state = JSON.parse(fs.readFileSync(file, "utf8"));
30
+ state.calls.push(args);
31
+ const save = () => {
32
+ const temporary = `${file}.tmp-${process.pid}`;
33
+ fs.writeFileSync(temporary, JSON.stringify(state));
34
+ fs.renameSync(temporary, file);
35
+ };
36
+ const value = (flag) => args[args.indexOf(flag) + 1];
37
+ const subscription = state.subscription;
38
+ const resourceGroup = state.resourceGroup;
39
+ const groupId = `/subscriptions/${subscription}/resourceGroups/${resourceGroup}`;
40
+ save();
41
+
42
+ if (args[0] === "--version") {
43
+ process.stdout.write("azure-cli fixture");
44
+ } else if (args[0] === "account" && args[1] === "show") {
45
+ process.stdout.write(subscription);
46
+ } else if (args[0] === "bicep" && args[1] === "build") {
47
+ emit(state.template);
48
+ } else if (args[0] === "group" && args[1] === "exists") {
49
+ process.stdout.write(String(state.groupExists));
50
+ } else if (args[0] === "group" && args[1] === "show") {
51
+ emit({ id: groupId, tags: state.tags });
52
+ } else if (args[0] === "group" && args[1] === "create") {
53
+ state.groupExists = true;
54
+ state.groupCreates++;
55
+ save();
56
+ emit(groupId);
57
+ } else if ((args[0] === "tag" && args[1] === "update") || (args[0] === "group" && args[1] === "update")) {
58
+ state.tagAttempts++;
59
+ const assignment = value(args[0] === "tag" ? "--tags" : "--set").replace(/^tags\./, "");
60
+ const index = assignment.indexOf("=");
61
+ const apply = () => { state.tags[assignment.slice(0, index)] = assignment.slice(index + 1); };
62
+ if (state.failTags > 0) {
63
+ state.failTags--;
64
+ if (state.applyTagBeforeFailure) apply();
65
+ save();
66
+ console.error("ERROR: fixture tag update failed");
67
+ process.exitCode = 9;
68
+ } else {
69
+ apply();
70
+ save();
71
+ }
72
+ } else if (args[0] === "staticwebapp" && args[1] === "secrets" && args[2] === "list") {
73
+ if (state.secretQueryFails) {
74
+ console.error("ERROR: fixture secret query failed");
75
+ process.exitCode = 1;
76
+ } else {
77
+ process.stdout.write(`fixture-swa-token-for-${value("--name")}\n`);
78
+ }
79
+ } else if (args[0] === "webapp" && args[1] === "deployment" && args[2] === "list-publishing-profiles") {
80
+ if (state.secretQueryFails) {
81
+ console.error("ERROR: fixture publish profile query failed");
82
+ process.exitCode = 1;
83
+ } else {
84
+ process.stdout.write(`<publishData><publishProfile publishUrl="${value("--name")}.scm.azurewebsites.net" /></publishData>\n`);
85
+ }
86
+ } else if (args[0] === "deployment" && args[1] === "operation") {
87
+ emit(state.operations ?? []);
88
+ } else if (args[0] === "deployment" && args[2] === "export") {
89
+ emit(state.remoteTemplate ?? state.template);
90
+ } else if (args[0] === "deployment" && args[2] === "what-if") {
91
+ emit({ changes: [] });
92
+ } else if (args[0] === "deployment" && args[2] === "create") {
93
+ const name = value("--name");
94
+ state.deploymentCreates++;
95
+ state.deployments[name] = {
96
+ correlationId: `fixture-correlation-${state.deploymentCreates}`,
97
+ templateHash: "fixture-template-hash",
98
+ };
99
+ save();
100
+ if (state.warning) console.error("WARNING: The configuration value of bicep.use_binary_from_path has been set to 'false'.");
101
+ if (state.submitStderr) console.error(state.submitStderr);
102
+ if (state.submitMode === "communication") {
103
+ console.error("ConnectionResetError: fixture connection closed after acceptance");
104
+ process.exitCode = 1;
105
+ } else if (state.submitMode === "nonzero") {
106
+ console.error("ERROR: fixture submit exited nonzero");
107
+ process.exitCode = 7;
108
+ } else if (state.submitMode === "flood") {
109
+ process.stdout.write(JSON.stringify({ properties: { outputs: { apiKey: { value: "fixture-secret-do-not-print" } } } }));
110
+ process.stdout.write("x".repeat(2 * 1024 * 1024));
111
+ process.stderr.write("y".repeat(2 * 1024 * 1024));
112
+ } else if (state.submitMode === "slow") {
113
+ setTimeout(() => emit({ accepted: true }), state.submitDelay ?? 2000);
114
+ } else {
115
+ emit({ accepted: true });
116
+ }
117
+ } else if (args[0] === "deployment" && args[2] === "show") {
118
+ const name = value("--name");
119
+ const deployment = state.deployments[name];
120
+ if (!deployment || state.queryMode === "not-found") {
121
+ console.error("ERROR: (DeploymentNotFound) fixture deployment is not visible");
122
+ process.exitCode = 3;
123
+ } else if (state.queryMode === "communication" || (state.transientQueryFailures ?? 0) > 0) {
124
+ if (state.transientQueryFailures) { state.transientQueryFailures -= 1; save(); }
125
+ console.error("ConnectionResetError: fixture status query interrupted");
126
+ process.exitCode = 1;
127
+ } else if (state.queryMode === "invalid") {
128
+ process.stdout.write("{invalid JSON");
129
+ } else if (value("--query") === "properties.parameters") {
130
+ emit(state.parameters);
131
+ } else if (value("--query").includes("properties.outputs.")) {
132
+ if (state.outputQueryFails) {
133
+ console.error("ERROR: resource output query failed");
134
+ process.exitCode = 1;
135
+ } else {
136
+ const outputs = state.outputs ?? {};
137
+ emit(Object.fromEntries(["staticWebAppName", "staticWebAppUrl", "functionsAppName", "functionsAppUrl", "cosmosDbAccountName", "cosmosDatabaseName"].map(key => [key, outputs[key] ?? null])));
138
+ }
139
+ } else {
140
+ const states = state.states ?? ["Succeeded"];
141
+ const provisioningState = states.length > 1 ? states.shift() : states[0];
142
+ save();
143
+ emit({
144
+ id: `${groupId}/providers/Microsoft.Resources/deployments/${name}`,
145
+ name, state: provisioningState,
146
+ correlationId: deployment.correlationId, templateHash: deployment.templateHash,
147
+ error: state.error ?? null,
148
+ });
149
+ }
150
+ } else {
151
+ console.error("ERROR: fixture does not support this command");
152
+ process.exitCode = 4;
153
+ }
@@ -0,0 +1,28 @@
1
+ const fs = require("node:fs");
2
+ const path = require("node:path");
3
+ const ts = require("typescript");
4
+ const root = path.resolve(__dirname, "..", "..", "..");
5
+ require.extensions[".ts"] = (module, file) => {
6
+ module._compile(ts.transpileModule(fs.readFileSync(file, "utf8"), {
7
+ compilerOptions: { module: ts.ModuleKind.CommonJS, target: ts.ScriptTarget.ES2020, esModuleInterop: true },
8
+ fileName: file,
9
+ }).outputText, file);
10
+ };
11
+ const azure = require(path.join(root, "src", "utils", "azure-cli.ts"));
12
+ azure.setAzCliInvocationForTesting({
13
+ command: process.execPath,
14
+ prefixArgs: [path.join(__dirname, "azure-cli.cjs")],
15
+ source: "isolated fixture",
16
+ });
17
+ const provision = require(path.join(root, "src", "core", "operations", "provision-operations.ts"));
18
+ const state = JSON.parse(fs.readFileSync(process.env.SWALLOWKIT_AZ_FIXTURE_STATE, "utf8"));
19
+ void (async () => {
20
+ const plan = await provision.planProvisionOperation({
21
+ resourceGroup: state.resourceGroup, location: "japaneast", swaLocation: "eastasia",
22
+ });
23
+ const result = await provision.executeProvisionPlan(plan, { approve: true });
24
+ console.log(JSON.stringify(result));
25
+ })().catch((error) => {
26
+ console.error(error.message);
27
+ process.exitCode = 1;
28
+ });