@wo658/redpact 0.3.0 → 0.4.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 (95) hide show
  1. package/dist/adapters/environment/testcontainers.js +20 -6
  2. package/dist/adapters/environment/unit-container.js +6 -3
  3. package/dist/adapters/environment/unit-worker.js +14 -1
  4. package/dist/adapters/playwright/Dockerfile +3 -0
  5. package/dist/adapters/playwright/worker.js +23 -1
  6. package/dist/ui/assets/{abnfDiagram-O67JEVCF-D5_0c71T.js → abnfDiagram-O67JEVCF-EXZIR7uE.js} +1 -1
  7. package/dist/ui/assets/{arc-CvMU1nxC.js → arc-DZ7IkhQL.js} +1 -1
  8. package/dist/ui/assets/architecture-7GRP2DOG-DPAY49ac.js +1 -0
  9. package/dist/ui/assets/{architectureDiagram-NJMV4G6O-C5pnJhyL.js → architectureDiagram-NJMV4G6O-oFZ4jPG2.js} +1 -1
  10. package/dist/ui/assets/{blockDiagram-BEXU5L5S-CSY4YaYG.js → blockDiagram-BEXU5L5S-BBUTa13d.js} +1 -1
  11. package/dist/ui/assets/{c4Diagram-YGBWAQC7-BAqi3qgX.js → c4Diagram-YGBWAQC7-CrOB8ApR.js} +1 -1
  12. package/dist/ui/assets/channel-B4U25mhB.js +1 -0
  13. package/dist/ui/assets/{chunk-3FUC2YCW-Brp5pppL.js → chunk-3FUC2YCW-W4k2bur_.js} +1 -1
  14. package/dist/ui/assets/{chunk-5DYCD2WN-DPF_imHM.js → chunk-5DYCD2WN-DsvkZxf0.js} +1 -1
  15. package/dist/ui/assets/{chunk-742MDFTN-B7dqi4lM.js → chunk-742MDFTN-Q9c012fL.js} +1 -1
  16. package/dist/ui/assets/{chunk-7INBJB4K-owIg7950.js → chunk-7INBJB4K-D6-5S_eb.js} +1 -1
  17. package/dist/ui/assets/{chunk-7M6MHVWA-DxdsTD3q.js → chunk-7M6MHVWA-BX-zqrmJ.js} +1 -1
  18. package/dist/ui/assets/{chunk-7PRAP22T-CnZEk7pT.js → chunk-7PRAP22T-D5sSirGe.js} +1 -1
  19. package/dist/ui/assets/{chunk-GTNCS2PH-tIfcSoKX.js → chunk-GTNCS2PH-BrjKdoU7.js} +1 -1
  20. package/dist/ui/assets/{chunk-GWA4HPMP-DvKgnHj7.js → chunk-GWA4HPMP-BzyuOibA.js} +1 -1
  21. package/dist/ui/assets/{chunk-MBY4JIJT-DecLyoJ2.js → chunk-MBY4JIJT-Jg4QirYy.js} +1 -1
  22. package/dist/ui/assets/{chunk-NETBCI7D-IIqAxd8x.js → chunk-NETBCI7D-Bo5sr5ak.js} +1 -1
  23. package/dist/ui/assets/{chunk-O7XYJQB3-BYf0cBjb.js → chunk-O7XYJQB3-ADuOEPCt.js} +1 -1
  24. package/dist/ui/assets/{chunk-UA2S7LBM-Axt5K_7j.js → chunk-UA2S7LBM-BWLbUYDY.js} +1 -1
  25. package/dist/ui/assets/{chunk-WEXAMYUT-DZkcP9P-.js → chunk-WEXAMYUT-BfdLD4oE.js} +1 -1
  26. package/dist/ui/assets/{chunk-XXDRQBXY-DEJDL8DG.js → chunk-XXDRQBXY-CEdjCwp8.js} +1 -1
  27. package/dist/ui/assets/{chunk-Z7XXMR3K-B2eslene.js → chunk-Z7XXMR3K-ooKdHdRU.js} +1 -1
  28. package/dist/ui/assets/{chunk-ZIGJFQKS-Bo83y6q0.js → chunk-ZIGJFQKS-u0lffPbH.js} +1 -1
  29. package/dist/ui/assets/{classDiagram-v2-NBCMYWYE-DKtuWfBH.js → classDiagram-v2-NBCMYWYE-kQl6D-HR.js} +1 -1
  30. package/dist/ui/assets/{cose-bilkent-JH36ORCC-jj68zcpo.js → cose-bilkent-JH36ORCC-DFDknAe8.js} +1 -1
  31. package/dist/ui/assets/{cynefin-OW5HDTMX-DHM-y63G.js → cynefin-OW5HDTMX-D4vNepxD.js} +1 -1
  32. package/dist/ui/assets/{cynefinDiagram-VND7K2PF-CcbJEZHa.js → cynefinDiagram-VND7K2PF-BFJ8dEz7.js} +1 -1
  33. package/dist/ui/assets/{dagre-6A5THRUB-ih8pcWrJ.js → dagre-6A5THRUB-CedM101q.js} +1 -1
  34. package/dist/ui/assets/{diagram-22UHCM2B-gOFjM4vX.js → diagram-22UHCM2B-Drvoaqhq.js} +1 -1
  35. package/dist/ui/assets/{diagram-3UASUU5V-A2EuBZrm.js → diagram-3UASUU5V-BqSEx6TG.js} +1 -1
  36. package/dist/ui/assets/{diagram-ATOU4E4O-NEnWb4jR.js → diagram-ATOU4E4O-SZKgc7Zh.js} +1 -1
  37. package/dist/ui/assets/{diagram-CDSNMT55-BDkkiBbT.js → diagram-CDSNMT55-Dt8thVhY.js} +1 -1
  38. package/dist/ui/assets/{diagram-MLGK6HIB-BuxDP96l.js → diagram-MLGK6HIB-CWFs_OOW.js} +1 -1
  39. package/dist/ui/assets/{diagram-MPIPVDR6-DOvr2wp9.js → diagram-MPIPVDR6-Cwm3bA8U.js} +1 -1
  40. package/dist/ui/assets/{dist-BMqRQFXW.js → dist-B7TllD9l.js} +1 -1
  41. package/dist/ui/assets/{ebnfDiagram-ZINNZB2B-C5aqA0VA.js → ebnfDiagram-ZINNZB2B-D6kGEe9D.js} +1 -1
  42. package/dist/ui/assets/{elk-276RUBZZ-C6X_c2Qp.js → elk-276RUBZZ-wW1KTjEC.js} +1 -1
  43. package/dist/ui/assets/{erDiagram-OPXOYQCR-DzZLfUpD.js → erDiagram-OPXOYQCR-vfhl3sOr.js} +1 -1
  44. package/dist/ui/assets/eventmodeling-NTZA5JFV-CJyNnV02.js +1 -0
  45. package/dist/ui/assets/flowDiagram-KWPJA3E3-C0h7u26C.js +1 -0
  46. package/dist/ui/assets/{ganttDiagram-FUAMR5RP-uqyVG-ha.js → ganttDiagram-FUAMR5RP-BZbSmUfV.js} +1 -1
  47. package/dist/ui/assets/{gitGraph-4MIJSDKK-54WYqHOb.js → gitGraph-4MIJSDKK-D59WREq2.js} +1 -1
  48. package/dist/ui/assets/{gitGraphDiagram-X574FWY7-CoyxlEFA.js → gitGraphDiagram-X574FWY7-CEWcL54p.js} +1 -1
  49. package/dist/ui/assets/{index-BPzC2fNH.js → index-Bv8TXM17.js} +85 -36
  50. package/dist/ui/assets/{info-A6RAGUB7-6Lv6e68U.js → info-A6RAGUB7-CCjOD-hV.js} +1 -1
  51. package/dist/ui/assets/{infoDiagram-VRGFBTTK-BghGYAtB.js → infoDiagram-VRGFBTTK-LS-F_-al.js} +1 -1
  52. package/dist/ui/assets/{ishikawaDiagram-OU5B5YK6-BbkNzdDX.js → ishikawaDiagram-OU5B5YK6-D0NTg-LK.js} +1 -1
  53. package/dist/ui/assets/{journeyDiagram-ZHPQQLJL-CK0HYMSC.js → journeyDiagram-ZHPQQLJL-Dw4e6Wl7.js} +1 -1
  54. package/dist/ui/assets/{kanban-definition-PNTS6WVX-CGSylxjl.js → kanban-definition-PNTS6WVX-k5spTfT7.js} +1 -1
  55. package/dist/ui/assets/{line-CVcWw_Fo.js → line-BFO0LY2j.js} +1 -1
  56. package/dist/ui/assets/{linear-RJCo1zL5.js → linear-Cs_Nmu23.js} +1 -1
  57. package/dist/ui/assets/{mermaid-parser.core-Cin6zZf8.js → mermaid-parser.core-CMSpXjeX.js} +3 -3
  58. package/dist/ui/assets/{mermaid.core-Dmtm0D6c.js → mermaid.core-BBeLf7h3.js} +4 -4
  59. package/dist/ui/assets/{mindmap-definition-NLK3R4M7-8pvUDbSj.js → mindmap-definition-NLK3R4M7-BmsEfsvR.js} +1 -1
  60. package/dist/ui/assets/{packet-AYTQ26CC-CEo_fz3H.js → packet-AYTQ26CC-Cv3YK0Ee.js} +1 -1
  61. package/dist/ui/assets/{pegDiagram-GJSIUBJH-DOOIWOJx.js → pegDiagram-GJSIUBJH-31oI4OLR.js} +1 -1
  62. package/dist/ui/assets/{pie-WAS4IAKB-BrexEBCD.js → pie-WAS4IAKB-bdwe8hf8.js} +1 -1
  63. package/dist/ui/assets/{pieDiagram-5QR66LMP-CBc41tNG.js → pieDiagram-5QR66LMP-TTKdYDzT.js} +1 -1
  64. package/dist/ui/assets/{quadrantDiagram-O4NWA36T-yer4erh3.js → quadrantDiagram-O4NWA36T-DxVQLgKu.js} +1 -1
  65. package/dist/ui/assets/{radar-RG4KPBEZ-JE5pdoOY.js → radar-RG4KPBEZ-giEqBoGT.js} +1 -1
  66. package/dist/ui/assets/{railroad-74A4TZTK-B9nKImjh.js → railroad-74A4TZTK-D-K0dGi8.js} +1 -1
  67. package/dist/ui/assets/railroad-abnf-HS5TGJTU-DcEI15f8.js +1 -0
  68. package/dist/ui/assets/railroad-ebnf-LZEXJU2U-COHEIK3C.js +1 -0
  69. package/dist/ui/assets/railroad-peg-WCYAUIDC-DXgo491l.js +1 -0
  70. package/dist/ui/assets/{railroadDiagram-XR7U4H2S-C2FoKWNS.js → railroadDiagram-XR7U4H2S-DrB5UCmO.js} +1 -1
  71. package/dist/ui/assets/{requirementDiagram-PLB6GJNP-BTN63NDy.js → requirementDiagram-PLB6GJNP-BQyLWXsL.js} +1 -1
  72. package/dist/ui/assets/{sankeyDiagram-IPEJSGJF-BjQ9u5cf.js → sankeyDiagram-IPEJSGJF-De5TIeaU.js} +1 -1
  73. package/dist/ui/assets/{sequenceDiagram-PO4LG4MO-B7FKQ9Xt.js → sequenceDiagram-PO4LG4MO-DUtE2LLg.js} +1 -1
  74. package/dist/ui/assets/{src-Bej7g-L4.js → src-DwTKHdVd.js} +1 -1
  75. package/dist/ui/assets/{stateDiagram-v2-GCMORJYK-DzUKzX-s.js → stateDiagram-v2-GCMORJYK-CVT5Ge16.js} +1 -1
  76. package/dist/ui/assets/{swimlanes-2SLR337P-Bjc68vr3.js → swimlanes-2SLR337P-Cu-5s066.js} +1 -1
  77. package/dist/ui/assets/swimlanesDiagram-TC7HE7FX-636k0i2s.js +8 -0
  78. package/dist/ui/assets/{timeline-definition-EJHVYXUP-VZqo3r3d.js → timeline-definition-EJHVYXUP-CJ8w-7KC.js} +1 -1
  79. package/dist/ui/assets/{treeView-Q6P3EWNA--uDmQgIe.js → treeView-Q6P3EWNA-D1S3DvGP.js} +1 -1
  80. package/dist/ui/assets/{treemap-WGGIJYW6-CW9TiLvB.js → treemap-WGGIJYW6-DblW82Ly.js} +1 -1
  81. package/dist/ui/assets/{usecaseDiagram-POWQR4AR-CmyArIke.js → usecaseDiagram-POWQR4AR-D8BYMSlq.js} +1 -1
  82. package/dist/ui/assets/{vennDiagram-UO4OBE2U-DUhnK8jn.js → vennDiagram-UO4OBE2U-CosmdYh9.js} +1 -1
  83. package/dist/ui/assets/{wardley-WFR3VGLG-DZocd00g.js → wardley-WFR3VGLG-D9U9ulTn.js} +1 -1
  84. package/dist/ui/assets/{wardleyDiagram-VNRHLVJA-DnHCIASf.js → wardleyDiagram-VNRHLVJA-CgtqeFIO.js} +1 -1
  85. package/dist/ui/assets/{xychartDiagram-PMCCYNJV-BzqtLoNZ.js → xychartDiagram-PMCCYNJV-DR25rR7D.js} +1 -1
  86. package/dist/ui/index.html +1 -1
  87. package/package.json +1 -1
  88. package/dist/ui/assets/architecture-7GRP2DOG-C_8wRkfR.js +0 -1
  89. package/dist/ui/assets/channel-IXYN7T6d.js +0 -1
  90. package/dist/ui/assets/eventmodeling-NTZA5JFV-DJMyacNa.js +0 -1
  91. package/dist/ui/assets/flowDiagram-KWPJA3E3-iAaJj6dh.js +0 -1
  92. package/dist/ui/assets/railroad-abnf-HS5TGJTU-CAGz711E.js +0 -1
  93. package/dist/ui/assets/railroad-ebnf-LZEXJU2U-y05iApC_.js +0 -1
  94. package/dist/ui/assets/railroad-peg-WCYAUIDC-C18zuwAF.js +0 -1
  95. package/dist/ui/assets/swimlanesDiagram-TC7HE7FX-1XAlwl_J.js +0 -8
@@ -240,6 +240,13 @@ export function createComposeAdapter(dataDir, secretSource = process.env) {
240
240
  labels,
241
241
  networks: { "redpact-runner": { aliases: [runnerServiceHost(name)] } },
242
242
  ...(ports.length ? { ports } : {}),
243
+ ...(record.lifecycle === "run" && service.build
244
+ ? {
245
+ image: `${record.projectName}-${name}`,
246
+ pull_policy: "build",
247
+ build: { labels, tags: [] },
248
+ }
249
+ : {}),
243
250
  };
244
251
  }
245
252
  for (const name of Object.keys(model.networks ?? { default: {} })) {
@@ -250,7 +257,9 @@ export function createComposeAdapter(dataDir, secretSource = process.env) {
250
257
  override.volumes[name] = { labels };
251
258
  }
252
259
  // Override the complete port sequence; merging entries could otherwise expose an unbound address.
253
- const yaml = stringify(override).replace(/^( {4}ports:)/gm, "$1 !override");
260
+ const yaml = stringify(override)
261
+ .replace(/^( {4}ports:)/gm, "$1 !override")
262
+ .replace(/^( {6}tags:) \[\]/gm, "$1 !override []");
254
263
  const overrideFile = ".redpact-runtime.yaml";
255
264
  await writeFile(join(stage, overrideFile), yaml, { mode: 0o600, flag: "wx" });
256
265
  update({
@@ -263,11 +272,11 @@ export function createComposeAdapter(dataDir, secretSource = process.env) {
263
272
  }
264
273
  }
265
274
  if (record.lifecycle === "run") {
266
- const localBuilds = Object.entries(model.services).filter(([, service]) => service.build && !service.image);
275
+ const localBuilds = Object.entries(model.services).filter(([, service]) => service.build);
267
276
  if (localBuilds.length) {
268
- // Cleanup needs only Compose's implicit image names, never application variables.
277
+ // Capture only environment-owned tags; cleanup must not evaluate application variables.
269
278
  await writeFile(join(stage, ".redpact-image-cleanup.yaml"), stringify({
270
- services: Object.fromEntries(localBuilds.map(([name]) => [name, { build: "." }])),
279
+ services: Object.fromEntries(localBuilds.map(([name]) => [name, { image: `${record.projectName}-${name}` }])),
271
280
  }), { mode: 0o600, flag: "wx" });
272
281
  }
273
282
  }
@@ -345,7 +354,12 @@ export function createComposeAdapter(dataDir, secretSource = process.env) {
345
354
  .map((resource) => resource.image));
346
355
  for (const image of previousBuildImages) {
347
356
  if (!currentImages.has(image)) {
348
- await docker(["image", "rm", image]);
357
+ const tags = JSON.parse(await docker(["image", "inspect", "--format", "{{json .RepoTags}}", image]));
358
+ const users = await docker(["ps", "-aq", "--filter", `ancestor=${image}`]);
359
+ // A replaced project tag does not confer ownership of other tags or containers.
360
+ if (!tags?.length && !users.trim()) {
361
+ await docker(["image", "rm", image]);
362
+ }
349
363
  }
350
364
  }
351
365
  }
@@ -446,7 +460,7 @@ export function createComposeAdapter(dataDir, secretSource = process.env) {
446
460
  imageCleanup,
447
461
  "down",
448
462
  "--rmi",
449
- "local",
463
+ "all",
450
464
  ], Math.max(1, deadline - Date.now()));
451
465
  }
452
466
  await rm(join(directory(record), "source"), { recursive: true, force: true });
@@ -145,8 +145,8 @@ export function createUnitContainer(dataDir, ownerId, readLimits = async () => t
145
145
  await owned(id, run);
146
146
  await docker(["rm", "-fv", id]);
147
147
  }
148
- if (run.imageId) {
149
- const result = await execa("docker", ["image", "inspect", "--format", "{{.Id}}", image(run)], {
148
+ {
149
+ const result = await execa("docker", ["image", "inspect", image(run)], {
150
150
  env: minimalEnvironment(),
151
151
  extendEnv: false,
152
152
  timeout: 30000,
@@ -154,7 +154,10 @@ export function createUnitContainer(dataDir, ownerId, readLimits = async () => t
154
154
  reject: false,
155
155
  });
156
156
  if (result.exitCode === 0) {
157
- if (result.stdout.trim() !== run.imageId) {
157
+ const [built] = JSON.parse(result.stdout);
158
+ if (built.Config.Labels?.["io.redpact.owner"] !== ownerId ||
159
+ built.Config.Labels?.["io.redpact.unit-run"] !== run.id ||
160
+ (run.imageId && built.Id !== run.imageId)) {
158
161
  throw new Error("Unit image ownership mismatch");
159
162
  }
160
163
  await docker(["image", "rm", image(run)]);
@@ -1,3 +1,4 @@
1
+ import { execa } from "execa";
1
2
  import { GenericContainer, Wait } from "testcontainers";
2
3
  process.once("disconnect", () => {
3
4
  try {
@@ -14,7 +15,19 @@ for await (const chunk of process.stdin) {
14
15
  }
15
16
  const spec = JSON.parse(input);
16
17
  try {
17
- const image = await GenericContainer.fromDockerfile(spec.source, spec.dockerfile).build(spec.image, { deleteOnExit: false });
18
+ await execa("docker", [
19
+ "build",
20
+ "--tag",
21
+ spec.image,
22
+ "--label",
23
+ `io.redpact.owner=${spec.ownerId}`,
24
+ "--label",
25
+ `io.redpact.unit-run=${spec.id}`,
26
+ "--file",
27
+ spec.dockerfile,
28
+ ".",
29
+ ], { cwd: spec.source, maxBuffer: 1024 * 1024 });
30
+ const image = new GenericContainer(spec.image);
18
31
  const container = await image
19
32
  .withLabels({ "io.redpact.owner": spec.ownerId, "io.redpact.unit-run": spec.id })
20
33
  .withResourcesQuota({ memory: spec.limits.memoryMiB / 1024 })
@@ -7,3 +7,6 @@ RUN printf '{"private":true}' > package.json && pnpm add --ignore-scripts --save
7
7
  COPY reporter.mjs viewport.cjs capture-viewport.cjs /review/
8
8
  RUN mkdir -p /review/tests /review/results /review/output && chown -R pwuser:pwuser /review
9
9
  USER pwuser
10
+
11
+ ARG REDPACT_PLAYWRIGHT_INPUTS
12
+ LABEL io.redpact.playwright-inputs=$REDPACT_PLAYWRIGHT_INPUTS
@@ -1,3 +1,7 @@
1
+ import { createHash } from "node:crypto";
2
+ import { readFile } from "node:fs/promises";
3
+ import { join } from "node:path";
4
+ import { execa } from "execa";
1
5
  import { GenericContainer, Wait } from "testcontainers";
2
6
  process.once("disconnect", () => {
3
7
  try {
@@ -14,7 +18,25 @@ for await (const chunk of process.stdin) {
14
18
  }
15
19
  const spec = JSON.parse(input);
16
20
  try {
17
- const image = await GenericContainer.fromDockerfile(spec.assets, "Dockerfile").build("redpact-playwright:1.63.0-v1", { deleteOnExit: false });
21
+ const hash = createHash("sha256");
22
+ for (const file of ["Dockerfile", "reporter.mjs", "viewport.cjs", "capture-viewport.cjs"]) {
23
+ hash.update(file).update(await readFile(join(spec.assets, file)));
24
+ }
25
+ const digest = hash.digest("hex");
26
+ const existing = await execa("docker", [
27
+ "image",
28
+ "ls",
29
+ "--no-trunc",
30
+ "--quiet",
31
+ "--filter",
32
+ `label=io.redpact.playwright-inputs=${digest}`,
33
+ ]);
34
+ const cached = existing.stdout.trim().split(/\s+/)[0];
35
+ const image = cached
36
+ ? new GenericContainer(cached)
37
+ : await GenericContainer.fromDockerfile(spec.assets, "Dockerfile")
38
+ .withBuildArgs({ REDPACT_PLAYWRIGHT_INPUTS: digest })
39
+ .build("redpact-playwright:1.63.0-v1", { deleteOnExit: false });
18
40
  const container = await image
19
41
  .withLabels({
20
42
  "io.redpact.owner": spec.ownerId,
@@ -1 +1 @@
1
- import{m as e,t}from"./mermaid-parser.core-Cin6zZf8.js";import{n}from"./chunk-Y2CYZVJY-DsF7k-Jl.js";import{m as r}from"./src-Bej7g-L4.js";import"./chunk-O7XYJQB3-BYf0cBjb.js";import{n as i,r as a,t as o}from"./chunk-GTNCS2PH-tIfcSoKX.js";import{t as s}from"./chunk-JWPE2WC7-DVXcaiue.js";import"./mermaid.core-Dmtm0D6c.js";var c=e().RailroadAbnf.parser.LangiumParser,l=n(e=>{let t=e.alternatives.map(u);return t.length===1?t[0]:{type:`choice`,alternatives:t}},`transformAlternation`),u=n(e=>{let t=e.elements.map(f);return t.length===1?t[0]:{type:`sequence`,elements:t}},`transformConcatenation`),d=n(e=>{if(e.includes(`*`)){let[t,n]=e.split(`*`);return{min:t?parseInt(t,10):0,max:n?parseInt(n,10):1/0}}let t=parseInt(e,10);return{min:t,max:t}},`parseRepeat`),f=n(e=>{let t=p(e.primary);if(!e.repeat)return t;let{min:n,max:r}=d(e.repeat);return n===0&&r===1?{type:`optional`,element:t}:{type:`repetition`,element:t,min:n,max:r}},`transformElement`),p=n(e=>{switch(e.$type){case`AbnfStringLiteral`:return{type:`terminal`,value:e.value};case`AbnfNumVal`:return{type:`terminal`,value:e.value};case`AbnfRuleName`:return{type:`nonterminal`,name:e.name};case`AbnfGroup`:return l(e.element);case`AbnfOptionalGroup`:return{type:`optional`,element:l(e.element)};default:throw Error(`Unsupported ABNF primary node: ${e.$type}`)}},`transformPrimary`),m=n(e=>({name:e.name,definition:l(e.definition)}),`transformRule`),h=n(e=>{s(e,o),e.title&&o.setTitle(e.title),e.rules.map(e=>o.addRule(m(e)))},`populateDb`),g={parser:{parse:n(e=>{o.clear(),r.debug(`[ABNF Parser] Starting Langium parse`);let n=c.parse(e);if(n.lexerErrors.length>0||n.parserErrors.length>0)throw new t(n);let i=n.value;r.debug(`[ABNF Parser] Parsed rules:`,i.rules.length),h(i),r.debug(`[ABNF Parser] Parse complete`)},`parse`),parser:{yy:o}},db:o,renderer:a,styles:i};export{g as diagram};
1
+ import{m as e,t}from"./mermaid-parser.core-CMSpXjeX.js";import{n}from"./chunk-Y2CYZVJY-DsF7k-Jl.js";import{m as r}from"./src-DwTKHdVd.js";import"./chunk-O7XYJQB3-ADuOEPCt.js";import{n as i,r as a,t as o}from"./chunk-GTNCS2PH-BrjKdoU7.js";import{t as s}from"./chunk-JWPE2WC7-DVXcaiue.js";import"./mermaid.core-BBeLf7h3.js";var c=e().RailroadAbnf.parser.LangiumParser,l=n(e=>{let t=e.alternatives.map(u);return t.length===1?t[0]:{type:`choice`,alternatives:t}},`transformAlternation`),u=n(e=>{let t=e.elements.map(f);return t.length===1?t[0]:{type:`sequence`,elements:t}},`transformConcatenation`),d=n(e=>{if(e.includes(`*`)){let[t,n]=e.split(`*`);return{min:t?parseInt(t,10):0,max:n?parseInt(n,10):1/0}}let t=parseInt(e,10);return{min:t,max:t}},`parseRepeat`),f=n(e=>{let t=p(e.primary);if(!e.repeat)return t;let{min:n,max:r}=d(e.repeat);return n===0&&r===1?{type:`optional`,element:t}:{type:`repetition`,element:t,min:n,max:r}},`transformElement`),p=n(e=>{switch(e.$type){case`AbnfStringLiteral`:return{type:`terminal`,value:e.value};case`AbnfNumVal`:return{type:`terminal`,value:e.value};case`AbnfRuleName`:return{type:`nonterminal`,name:e.name};case`AbnfGroup`:return l(e.element);case`AbnfOptionalGroup`:return{type:`optional`,element:l(e.element)};default:throw Error(`Unsupported ABNF primary node: ${e.$type}`)}},`transformPrimary`),m=n(e=>({name:e.name,definition:l(e.definition)}),`transformRule`),h=n(e=>{s(e,o),e.title&&o.setTitle(e.title),e.rules.map(e=>o.addRule(m(e)))},`populateDb`),g={parser:{parse:n(e=>{o.clear(),r.debug(`[ABNF Parser] Starting Langium parse`);let n=c.parse(e);if(n.lexerErrors.length>0||n.parserErrors.length>0)throw new t(n);let i=n.value;r.debug(`[ABNF Parser] Parsed rules:`,i.rules.length),h(i),r.debug(`[ABNF Parser] Parse complete`)},`parse`),parser:{yy:o}},db:o,renderer:a,styles:i};export{g as diagram};
@@ -1 +1 @@
1
- import{n as e,t}from"./path-fybaL0A-.js";import{a as n,c as r,d as i,f as a,i as o,l as s,m as c,n as l,o as u,p as d,r as f,u as p}from"./dist-BMqRQFXW.js";function m(e){return e.innerRadius}function h(e){return e.outerRadius}function g(e){return e.startAngle}function _(e){return e.endAngle}function v(e){return e&&e.padAngle}function y(e,t,n,r,i,a,o,s){var c=n-e,l=r-t,u=o-i,d=s-a,f=d*c-u*l;if(!(f*f<1e-12))return f=(u*(t-a)-d*(e-i))/f,[e+f*c,t+f*l]}function b(e,t,n,r,i,a,o){var c=e-n,l=t-r,u=(o?a:-a)/d(c*c+l*l),f=u*l,p=-u*c,m=e+f,h=t+p,g=n+f,_=r+p,v=(m+g)/2,y=(h+_)/2,b=g-m,x=_-h,S=b*b+x*x,C=i-a,w=m*_-g*h,T=(x<0?-1:1)*d(s(0,C*C*S-w*w)),E=(w*x-b*T)/S,D=(-w*b-x*T)/S,O=(w*x+b*T)/S,k=(-w*b+x*T)/S,A=E-v,j=D-y,M=O-v,N=k-y;return A*A+j*j>M*M+N*N&&(E=O,D=k),{cx:E,cy:D,x01:-f,y01:-p,x11:E*(i/C-1),y11:D*(i/C-1)}}function x(){var s=m,x=h,S=e(0),C=null,w=g,T=_,E=v,D=null,O=t(k);function k(){var e,t,m=+s.apply(this,arguments),h=+x.apply(this,arguments),g=w.apply(this,arguments)-r,_=T.apply(this,arguments)-r,v=l(_-g),k=_>g;if(D||=e=O(),h<m&&(t=h,h=m,m=t),!(h>1e-12))D.moveTo(0,0);else if(v>c-1e-12)D.moveTo(h*u(g),h*a(g)),D.arc(0,0,h,g,_,!k),m>1e-12&&(D.moveTo(m*u(_),m*a(_)),D.arc(0,0,m,_,g,k));else{var A=g,j=_,M=g,N=_,P=v,F=v,I=E.apply(this,arguments)/2,L=I>1e-12&&(C?+C.apply(this,arguments):d(m*m+h*h)),R=p(l(h-m)/2,+S.apply(this,arguments)),z=R,B=R,V,H;if(L>1e-12){var U=o(L/m*a(I)),W=o(L/h*a(I));(P-=U*2)>1e-12?(U*=k?1:-1,M+=U,N-=U):(P=0,M=N=(g+_)/2),(F-=W*2)>1e-12?(W*=k?1:-1,A+=W,j-=W):(F=0,A=j=(g+_)/2)}var G=h*u(A),K=h*a(A),q=m*u(N),J=m*a(N);if(R>1e-12){var Y=h*u(j),X=h*a(j),Z=m*u(M),Q=m*a(M),$;if(v<i){if($=y(G,K,Z,Q,Y,X,q,J)){var ee=G-$[0],te=K-$[1],ne=Y-$[0],re=X-$[1],ie=1/a(f((ee*ne+te*re)/(d(ee*ee+te*te)*d(ne*ne+re*re)))/2),ae=d($[0]*$[0]+$[1]*$[1]);z=p(R,(m-ae)/(ie-1)),B=p(R,(h-ae)/(ie+1))}else z=B=0}}F>1e-12?B>1e-12?(V=b(Z,Q,G,K,h,B,k),H=b(Y,X,q,J,h,B,k),D.moveTo(V.cx+V.x01,V.cy+V.y01),B<R?D.arc(V.cx,V.cy,B,n(V.y01,V.x01),n(H.y01,H.x01),!k):(D.arc(V.cx,V.cy,B,n(V.y01,V.x01),n(V.y11,V.x11),!k),D.arc(0,0,h,n(V.cy+V.y11,V.cx+V.x11),n(H.cy+H.y11,H.cx+H.x11),!k),D.arc(H.cx,H.cy,B,n(H.y11,H.x11),n(H.y01,H.x01),!k))):(D.moveTo(G,K),D.arc(0,0,h,A,j,!k)):D.moveTo(G,K),!(m>1e-12)||!(P>1e-12)?D.lineTo(q,J):z>1e-12?(V=b(q,J,Y,X,m,-z,k),H=b(G,K,Z,Q,m,-z,k),D.lineTo(V.cx+V.x01,V.cy+V.y01),z<R?D.arc(V.cx,V.cy,z,n(V.y01,V.x01),n(H.y01,H.x01),!k):(D.arc(V.cx,V.cy,z,n(V.y01,V.x01),n(V.y11,V.x11),!k),D.arc(0,0,m,n(V.cy+V.y11,V.cx+V.x11),n(H.cy+H.y11,H.cx+H.x11),k),D.arc(H.cx,H.cy,z,n(H.y11,H.x11),n(H.y01,H.x01),!k))):D.arc(0,0,m,N,M,k)}if(D.closePath(),e)return D=null,e+``||null}return k.centroid=function(){var e=(+s.apply(this,arguments)+ +x.apply(this,arguments))/2,t=(+w.apply(this,arguments)+ +T.apply(this,arguments))/2-i/2;return[u(t)*e,a(t)*e]},k.innerRadius=function(t){return arguments.length?(s=typeof t==`function`?t:e(+t),k):s},k.outerRadius=function(t){return arguments.length?(x=typeof t==`function`?t:e(+t),k):x},k.cornerRadius=function(t){return arguments.length?(S=typeof t==`function`?t:e(+t),k):S},k.padRadius=function(t){return arguments.length?(C=t==null?null:typeof t==`function`?t:e(+t),k):C},k.startAngle=function(t){return arguments.length?(w=typeof t==`function`?t:e(+t),k):w},k.endAngle=function(t){return arguments.length?(T=typeof t==`function`?t:e(+t),k):T},k.padAngle=function(t){return arguments.length?(E=typeof t==`function`?t:e(+t),k):E},k.context=function(e){return arguments.length?(D=e??null,k):D},k}export{x as t};
1
+ import{n as e,t}from"./path-fybaL0A-.js";import{a as n,c as r,d as i,f as a,i as o,l as s,m as c,n as l,o as u,p as d,r as f,u as p}from"./dist-B7TllD9l.js";function m(e){return e.innerRadius}function h(e){return e.outerRadius}function g(e){return e.startAngle}function _(e){return e.endAngle}function v(e){return e&&e.padAngle}function y(e,t,n,r,i,a,o,s){var c=n-e,l=r-t,u=o-i,d=s-a,f=d*c-u*l;if(!(f*f<1e-12))return f=(u*(t-a)-d*(e-i))/f,[e+f*c,t+f*l]}function b(e,t,n,r,i,a,o){var c=e-n,l=t-r,u=(o?a:-a)/d(c*c+l*l),f=u*l,p=-u*c,m=e+f,h=t+p,g=n+f,_=r+p,v=(m+g)/2,y=(h+_)/2,b=g-m,x=_-h,S=b*b+x*x,C=i-a,w=m*_-g*h,T=(x<0?-1:1)*d(s(0,C*C*S-w*w)),E=(w*x-b*T)/S,D=(-w*b-x*T)/S,O=(w*x+b*T)/S,k=(-w*b+x*T)/S,A=E-v,j=D-y,M=O-v,N=k-y;return A*A+j*j>M*M+N*N&&(E=O,D=k),{cx:E,cy:D,x01:-f,y01:-p,x11:E*(i/C-1),y11:D*(i/C-1)}}function x(){var s=m,x=h,S=e(0),C=null,w=g,T=_,E=v,D=null,O=t(k);function k(){var e,t,m=+s.apply(this,arguments),h=+x.apply(this,arguments),g=w.apply(this,arguments)-r,_=T.apply(this,arguments)-r,v=l(_-g),k=_>g;if(D||=e=O(),h<m&&(t=h,h=m,m=t),!(h>1e-12))D.moveTo(0,0);else if(v>c-1e-12)D.moveTo(h*u(g),h*a(g)),D.arc(0,0,h,g,_,!k),m>1e-12&&(D.moveTo(m*u(_),m*a(_)),D.arc(0,0,m,_,g,k));else{var A=g,j=_,M=g,N=_,P=v,F=v,I=E.apply(this,arguments)/2,L=I>1e-12&&(C?+C.apply(this,arguments):d(m*m+h*h)),R=p(l(h-m)/2,+S.apply(this,arguments)),z=R,B=R,V,H;if(L>1e-12){var U=o(L/m*a(I)),W=o(L/h*a(I));(P-=U*2)>1e-12?(U*=k?1:-1,M+=U,N-=U):(P=0,M=N=(g+_)/2),(F-=W*2)>1e-12?(W*=k?1:-1,A+=W,j-=W):(F=0,A=j=(g+_)/2)}var G=h*u(A),K=h*a(A),q=m*u(N),J=m*a(N);if(R>1e-12){var Y=h*u(j),X=h*a(j),Z=m*u(M),Q=m*a(M),$;if(v<i){if($=y(G,K,Z,Q,Y,X,q,J)){var ee=G-$[0],te=K-$[1],ne=Y-$[0],re=X-$[1],ie=1/a(f((ee*ne+te*re)/(d(ee*ee+te*te)*d(ne*ne+re*re)))/2),ae=d($[0]*$[0]+$[1]*$[1]);z=p(R,(m-ae)/(ie-1)),B=p(R,(h-ae)/(ie+1))}else z=B=0}}F>1e-12?B>1e-12?(V=b(Z,Q,G,K,h,B,k),H=b(Y,X,q,J,h,B,k),D.moveTo(V.cx+V.x01,V.cy+V.y01),B<R?D.arc(V.cx,V.cy,B,n(V.y01,V.x01),n(H.y01,H.x01),!k):(D.arc(V.cx,V.cy,B,n(V.y01,V.x01),n(V.y11,V.x11),!k),D.arc(0,0,h,n(V.cy+V.y11,V.cx+V.x11),n(H.cy+H.y11,H.cx+H.x11),!k),D.arc(H.cx,H.cy,B,n(H.y11,H.x11),n(H.y01,H.x01),!k))):(D.moveTo(G,K),D.arc(0,0,h,A,j,!k)):D.moveTo(G,K),!(m>1e-12)||!(P>1e-12)?D.lineTo(q,J):z>1e-12?(V=b(q,J,Y,X,m,-z,k),H=b(G,K,Z,Q,m,-z,k),D.lineTo(V.cx+V.x01,V.cy+V.y01),z<R?D.arc(V.cx,V.cy,z,n(V.y01,V.x01),n(H.y01,H.x01),!k):(D.arc(V.cx,V.cy,z,n(V.y01,V.x01),n(V.y11,V.x11),!k),D.arc(0,0,m,n(V.cy+V.y11,V.cx+V.x11),n(H.cy+H.y11,H.cx+H.x11),k),D.arc(H.cx,H.cy,z,n(H.y11,H.x11),n(H.y01,H.x01),!k))):D.arc(0,0,m,N,M,k)}if(D.closePath(),e)return D=null,e+``||null}return k.centroid=function(){var e=(+s.apply(this,arguments)+ +x.apply(this,arguments))/2,t=(+w.apply(this,arguments)+ +T.apply(this,arguments))/2-i/2;return[u(t)*e,a(t)*e]},k.innerRadius=function(t){return arguments.length?(s=typeof t==`function`?t:e(+t),k):s},k.outerRadius=function(t){return arguments.length?(x=typeof t==`function`?t:e(+t),k):x},k.cornerRadius=function(t){return arguments.length?(S=typeof t==`function`?t:e(+t),k):S},k.padRadius=function(t){return arguments.length?(C=t==null?null:typeof t==`function`?t:e(+t),k):C},k.startAngle=function(t){return arguments.length?(w=typeof t==`function`?t:e(+t),k):w},k.endAngle=function(t){return arguments.length?(T=typeof t==`function`?t:e(+t),k):T},k.padAngle=function(t){return arguments.length?(E=typeof t==`function`?t:e(+t),k):E},k.context=function(e){return arguments.length?(D=e??null,k):D},k}export{x as t};
@@ -0,0 +1 @@
1
+ import"./chunk-FOHPRMQF-DHwB1DNv.js";import{M as e}from"./mermaid-parser.core-CMSpXjeX.js";export{e as createArchitectureServices};