koppler 0.0.9 → 0.2.0

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 (92) hide show
  1. package/README.md +21 -24
  2. package/dist/.built +1 -1
  3. package/dist/core/arrange.js +0 -43
  4. package/dist/core/arrange.js.map +1 -1
  5. package/dist/core/databases.js +70 -0
  6. package/dist/core/databases.js.map +1 -0
  7. package/dist/core/migrations/board/0.1.0.js +14 -0
  8. package/dist/core/migrations/board/0.1.0.js.map +1 -0
  9. package/dist/core/migrations/board/index.js +12 -0
  10. package/dist/core/migrations/board/index.js.map +1 -0
  11. package/dist/core/migrations/board-file/index.js +13 -0
  12. package/dist/core/migrations/board-file/index.js.map +1 -0
  13. package/dist/core/migrations/files.js +24 -0
  14. package/dist/core/migrations/files.js.map +1 -0
  15. package/dist/core/migrations/run.js +47 -0
  16. package/dist/core/migrations/run.js.map +1 -0
  17. package/dist/core/migrations/stack/0.2.0.js +119 -0
  18. package/dist/core/migrations/stack/0.2.0.js.map +1 -0
  19. package/dist/core/migrations/stack/index.js +13 -0
  20. package/dist/core/migrations/stack/index.js.map +1 -0
  21. package/dist/core/plan.js +6 -2
  22. package/dist/core/plan.js.map +1 -1
  23. package/dist/core/presets.js +26 -22
  24. package/dist/core/presets.js.map +1 -1
  25. package/dist/core/stack.js +63 -0
  26. package/dist/core/stack.js.map +1 -1
  27. package/dist/data.js +23 -3
  28. package/dist/data.js.map +1 -1
  29. package/dist/engine/checks.js +4 -1
  30. package/dist/engine/checks.js.map +1 -1
  31. package/dist/engine/history.js +5 -0
  32. package/dist/engine/history.js.map +1 -1
  33. package/dist/engine/local-databases.js +69 -0
  34. package/dist/engine/local-databases.js.map +1 -0
  35. package/dist/engine/runs.js +3 -0
  36. package/dist/engine/runs.js.map +1 -1
  37. package/dist/engine/share.js +5 -3
  38. package/dist/engine/share.js.map +1 -1
  39. package/dist/engine/stack-file.js +17 -2
  40. package/dist/engine/stack-file.js.map +1 -1
  41. package/dist/engine/stacks.js +1 -0
  42. package/dist/engine/stacks.js.map +1 -1
  43. package/dist/engine/sync.js +6 -2
  44. package/dist/engine/sync.js.map +1 -1
  45. package/dist/engine/up.js +61 -5
  46. package/dist/engine/up.js.map +1 -1
  47. package/dist/koppler.mjs +15 -1
  48. package/dist/koppler.mjs.map +1 -1
  49. package/dist/page/appearance.js +18 -0
  50. package/dist/page/assets/Barlow-400-latin-DygnOwyn.woff2 +0 -0
  51. package/dist/page/assets/Barlow-400-latin-ext-BKWkRE1H.woff2 +0 -0
  52. package/dist/page/assets/Barlow-500-latin-D6sGsXIV.woff2 +0 -0
  53. package/dist/page/assets/Barlow-500-latin-ext-CPelPZq1.woff2 +0 -0
  54. package/dist/page/assets/Barlow-600-latin-DO9c7XN2.woff2 +0 -0
  55. package/dist/page/assets/Barlow-600-latin-ext-Cu-we8td.woff2 +0 -0
  56. package/dist/page/assets/Barlow-700-latin-B_0g9oET.woff2 +0 -0
  57. package/dist/page/assets/Barlow-700-latin-ext-CaU1nQ4r.woff2 +0 -0
  58. package/dist/page/assets/BarlowSemiCondensed-500-latin-CREnc4EB.woff2 +0 -0
  59. package/dist/page/assets/BarlowSemiCondensed-500-latin-ext-CoB4J12G.woff2 +0 -0
  60. package/dist/page/assets/BarlowSemiCondensed-600-latin-D36brihh.woff2 +0 -0
  61. package/dist/page/assets/BarlowSemiCondensed-600-latin-ext-CUbUZgPG.woff2 +0 -0
  62. package/dist/page/assets/BarlowSemiCondensed-700-latin-BSuPlIsc.woff2 +0 -0
  63. package/dist/page/assets/BarlowSemiCondensed-700-latin-ext-D_nMxumM.woff2 +0 -0
  64. package/dist/page/assets/SometypeMono-400-700-latin-5eE2nSzF.woff2 +0 -0
  65. package/dist/page/assets/SometypeMono-400-700-latin-ext-BNdIoRtJ.woff2 +0 -0
  66. package/dist/page/assets/index-C1AShWL6.css +1 -0
  67. package/dist/page/assets/index-daRDhJFi.js +43 -0
  68. package/dist/page/favicon.svg +9 -0
  69. package/dist/page/index.html +4 -3
  70. package/dist/server/cable-test.js +1 -1
  71. package/dist/server/cable-test.js.map +1 -1
  72. package/dist/server/files.js +4 -2
  73. package/dist/server/files.js.map +1 -1
  74. package/dist/server/routes.js +33 -1
  75. package/dist/server/routes.js.map +1 -1
  76. package/dist/server/sanitize.js +9 -0
  77. package/dist/server/sanitize.js.map +1 -1
  78. package/dist/upgraded.js +18 -0
  79. package/dist/upgraded.js.map +1 -0
  80. package/package.json +2 -2
  81. package/skills/koppler-run/VERSION +1 -1
  82. package/skills/koppler-run/references/stack.md +4 -1
  83. package/dist/page/assets/JetBrainsMono-cyrillic-D2jMJ_bk.woff2 +0 -0
  84. package/dist/page/assets/JetBrainsMono-greek-D2nYnAec.woff2 +0 -0
  85. package/dist/page/assets/JetBrainsMono-latin-Db4Uuiha.woff2 +0 -0
  86. package/dist/page/assets/JetBrainsMono-latin-ext-Bnd2h4Br.woff2 +0 -0
  87. package/dist/page/assets/JetBrainsMono-vietnamese-CNlsqbWb.woff2 +0 -0
  88. package/dist/page/assets/SchibstedGrotesk-latin-DxefFeRw.woff2 +0 -0
  89. package/dist/page/assets/SchibstedGrotesk-latin-ext-CnpJE18X.woff2 +0 -0
  90. package/dist/page/assets/index-Bi0_sPx0.js +0 -43
  91. package/dist/page/assets/index-e6-Jk1nK.css +0 -1
  92. package/dist/page/theme.js +0 -8
package/README.md CHANGED
@@ -1,6 +1,9 @@
1
1
  # Koppler
2
2
 
3
- Run the part of your stack you need on your own machine, without learning how each backend is run.
3
+ <img alt="koppler: plug your local code into the real stack. npm install -g koppler, on macOS and Linux" src="https://raw.githubusercontent.com/evan-mcgeek/koppler/v0.2.0/docs/images/banner.png">
4
+
5
+ Plug your local code into the real stack.
6
+ The apps you change run on your own machine, the rest keeps calling the deployed environment, and you never learn how each backend is run.
4
7
 
5
8
  Pick apps on a canvas and plug cables between them, then press **Run**.
6
9
  Koppler does the wiring, the tunnels, the local queues and the start order, and reverts all of it when you press Stop.
@@ -9,10 +12,7 @@ Everything you leave unplugged keeps calling the deployed environment you chose.
9
12
  Koppler is for local development.
10
13
  It helps most when you work on one app (a mobile app, a front end, one API) and need a few of its neighbours running next to it.
11
14
 
12
- <picture>
13
- <source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/evan-mcgeek/koppler/main/docs/images/board-dark.png">
14
- <img alt="One feature, Checkout, worked on across four apps: the mobile app and web shop cabled to a local Orders API, which calls a local Payments API; each runs its feature/checkout branch, Orders API has a database tunnel and a local SQS queue, two apps carry a note for the agent, and everything runs" src="https://raw.githubusercontent.com/evan-mcgeek/koppler/main/docs/images/board-light.png">
15
- </picture>
15
+ <img alt="One feature, Checkout, worked on across four apps: the mobile app and web shop cabled to a local Orders API, which calls a local Payments API; each runs its feature/checkout branch, Orders API has its deployed QA database and a local SQS queue, two apps carry a note for the agent, and everything runs" src="https://raw.githubusercontent.com/evan-mcgeek/koppler/v0.2.0/docs/images/board.png">
16
16
 
17
17
  ## How it works
18
18
 
@@ -24,10 +24,7 @@ It helps most when you work on one app (a mobile app, a front end, one API) and
24
24
  - **Stop and revert.** One click stops what Koppler started and undoes every temporary change. Apps you started yourself are left alone.
25
25
  - **Secrets stay yours.** You store them in the macOS Keychain (on Linux, in files only you can read); Koppler starts an app with them and never shows them.
26
26
 
27
- <picture>
28
- <source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/evan-mcgeek/koppler/main/docs/images/review-dark.png">
29
- <img alt="The review before a Run on QA: the four apps that start on feature/checkout with their notes for the agent, what keeps calling deployed QA, and the tunnel that opens" src="https://raw.githubusercontent.com/evan-mcgeek/koppler/main/docs/images/review-light.png" width="520">
30
- </picture>
27
+ <img alt="The review before a Run on QA: the four apps that start on feature/checkout with their notes for the agent, what keeps calling deployed QA, and the tunnel that opens" src="https://raw.githubusercontent.com/evan-mcgeek/koppler/v0.2.0/docs/images/review.png" width="520">
31
28
 
32
29
  ## Install
33
30
 
@@ -38,7 +35,7 @@ koppler canvas
38
35
  ```
39
36
 
40
37
  `koppler init` finds your repos and your team's stack (or starts a new one), and `koppler canvas` opens the canvas in your browser.
41
- [Getting started](https://github.com/evan-mcgeek/koppler/blob/main/docs/getting-started.md) walks through the first run.
38
+ [Getting started](https://github.com/evan-mcgeek/koppler/blob/v0.2.0/docs/getting-started.md) walks through the first run.
42
39
 
43
40
  ## The agent add-on
44
41
 
@@ -53,12 +50,12 @@ In Claude Code, add the plugin:
53
50
  ```
54
51
 
55
52
  For any other agent (GitHub Copilot CLI, VS Code, OpenCode), or Claude Code without the plugin, run `koppler agent init`.
56
- It links the [skill](https://github.com/evan-mcgeek/koppler/blob/main/plugin/skills/koppler-run) into each agent it finds and registers `koppler mcp`, its MCP server.
53
+ It links the [skill](https://github.com/evan-mcgeek/koppler/blob/v0.2.0/plugin/skills/koppler-run) into each agent it finds and registers `koppler mcp`, its MCP server.
57
54
  Either way, the agent drives the `koppler` command, so install the app first.
58
55
 
59
56
  ## Requirements
60
57
 
61
- - macOS (secrets live in the Keychain) or Linux (secrets live in private files, without the per-read prompt; see [security](https://github.com/evan-mcgeek/koppler/blob/main/docs/security.md)).
58
+ - macOS (secrets live in the Keychain) or Linux (secrets live in private files, without the per-read prompt; see [security](https://github.com/evan-mcgeek/koppler/blob/v0.2.0/docs/security.md)).
62
59
  - git and Node 22 or newer.
63
60
 
64
61
  Everything else depends on your stack (the .NET SDK, Flutter, Docker, the AWS CLI, ...).
@@ -66,26 +63,26 @@ Everything else depends on your stack (the .NET SDK, Flutter, Docker, the AWS CL
66
63
 
67
64
  ## Documentation
68
65
 
69
- - [Getting started](https://github.com/evan-mcgeek/koppler/blob/main/docs/getting-started.md): install, the first stack, the first run.
70
- - [The canvas](https://github.com/evan-mcgeek/koppler/blob/main/docs/canvas.md): boards, cables, queues, environments, Run and Stop.
71
- - [App kinds](https://github.com/evan-mcgeek/koppler/blob/main/docs/app-kinds.md): what Koppler can run and how.
72
- - [Secrets and safety](https://github.com/evan-mcgeek/koppler/blob/main/docs/security.md): how secrets are kept, and what an agent may and may not do.
73
- - [Commands](https://github.com/evan-mcgeek/koppler/blob/main/docs/commands.md): every `koppler` command.
74
- - [Stack format](https://github.com/evan-mcgeek/koppler/blob/main/plugin/skills/koppler-run/references/stack.md): the `stack.json` reference.
75
- - [Releasing](https://github.com/evan-mcgeek/koppler/blob/main/docs/releasing.md): how a version tag publishes Koppler to npm.
66
+ - [Getting started](https://github.com/evan-mcgeek/koppler/blob/v0.2.0/docs/getting-started.md): install, the first stack, the first run.
67
+ - [The canvas](https://github.com/evan-mcgeek/koppler/blob/v0.2.0/docs/canvas.md): boards, cables, queues, environments, Run and Stop.
68
+ - [App kinds](https://github.com/evan-mcgeek/koppler/blob/v0.2.0/docs/app-kinds.md): what Koppler can run and how.
69
+ - [Secrets and safety](https://github.com/evan-mcgeek/koppler/blob/v0.2.0/docs/security.md): how secrets are kept, and what an agent may and may not do.
70
+ - [Commands](https://github.com/evan-mcgeek/koppler/blob/v0.2.0/docs/commands.md): every `koppler` command.
71
+ - [Stack format](https://github.com/evan-mcgeek/koppler/blob/v0.2.0/plugin/skills/koppler-run/references/stack.md): the `stack.json` reference.
72
+ - [Releasing](https://github.com/evan-mcgeek/koppler/blob/v0.2.0/docs/releasing.md): how a version tag publishes Koppler to npm.
76
73
 
77
74
  ## Repository
78
75
 
79
76
  | Folder | What |
80
77
  |---|---|
81
- | [`app/`](https://github.com/evan-mcgeek/koppler/blob/main/app) | The `koppler` package: the command, the engine, the canvas and its local server |
82
- | [`plugin/`](https://github.com/evan-mcgeek/koppler/blob/main/plugin) | The agent add-on: a Claude Code plugin with the `koppler-run` skill |
83
- | [`docs/`](https://github.com/evan-mcgeek/koppler/blob/main/docs) | User documentation |
78
+ | [`app/`](https://github.com/evan-mcgeek/koppler/blob/v0.2.0/app) | The `koppler` package: the command, the engine, the canvas and its local server |
79
+ | [`plugin/`](https://github.com/evan-mcgeek/koppler/blob/v0.2.0/plugin) | The agent add-on: a Claude Code plugin with the `koppler-run` skill |
80
+ | [`docs/`](https://github.com/evan-mcgeek/koppler/blob/v0.2.0/docs) | User documentation |
84
81
 
85
82
  Koppler runs from `app/dist/`, which `npm run build` makes from `app/src/` (`npm install` first).
86
83
  While working on Koppler itself, link `app/scripts/koppler-dev.mjs` as `koppler`: it rebuilds when the source is newer, then runs the build.
87
84
  Run the tests with `npm test` in `app/`; unit tests sit next to their module as `<name>.test.ts`.
88
- The documentation's screenshots come from `npm run screenshots` in `app/`: it drives the canvas on a demo stack and writes `docs/images/`, each in a light and a dark copy.
85
+ The documentation's screenshots come from `npm run screenshots` in `app/`: it drives the canvas on a demo stack and writes `docs/images/`, with the hero and the social card drawn from `app/screenshots/brand.html`.
89
86
  The canvas has tests of its own that drive it in a browser: `npm install`, `npx playwright install chromium` once, then `npm run test:canvas`.
90
87
  `npm run lint`, `npm run types` and `npm run format:check` are what CI checks besides the tests; `npm run format` formats.
91
88
 
@@ -103,4 +100,4 @@ See the [project board](https://github.com/users/evan-mcgeek/projects/2) for wha
103
100
 
104
101
  ## License
105
102
 
106
- [MIT](https://github.com/evan-mcgeek/koppler/blob/main/LICENSE)
103
+ [MIT](https://github.com/evan-mcgeek/koppler/blob/v0.2.0/LICENSE)
package/dist/.built CHANGED
@@ -1 +1 @@
1
- 2026-10-18T11:11:19.030Z
1
+ 2026-10-19T11:54:00.542Z
@@ -283,47 +283,4 @@ export function sidesFor(pos, edge, dir, sizeOf, keep = {}) {
283
283
  const free = (sides) => keep[edge.from] !== sides.fromSide && keep[edge.to] !== sides.toSide;
284
284
  return free(first) || !free(second) ? first : second;
285
285
  }
286
- /**
287
- * Closes up the room the cards take only in full: each band in `needed` that nothing in `taken` covers is cut out.
288
- * `show` gives where a place is drawn, `back` where a drawn place is kept.
289
- */
290
- export function squeeze(taken, needed) {
291
- const merged = (spans) => [...spans]
292
- .sort((a, b) => a[0] - b[0])
293
- .reduce((all, [top, end]) => {
294
- const last = all.at(-1);
295
- if (last && top <= last[1])
296
- last[1] = Math.max(last[1], end);
297
- else
298
- all.push([top, end]);
299
- return all;
300
- }, []);
301
- const busy = merged(taken);
302
- const bands = merged(needed).flatMap(([top, end]) => {
303
- const free = [];
304
- let at = top;
305
- for (const [s, e] of busy) {
306
- if (e <= at || s >= end)
307
- continue;
308
- if (s > at)
309
- free.push([at, s]);
310
- at = Math.max(at, e);
311
- }
312
- if (at < end)
313
- free.push([at, end]);
314
- return free;
315
- });
316
- return {
317
- show: y => y - bands.reduce((cut, [s, e]) => cut + Math.max(0, Math.min(y, e) - s), 0),
318
- back: d => {
319
- let cut = 0;
320
- for (const [s, e] of bands) {
321
- if (d < s - cut)
322
- break;
323
- cut += e - s;
324
- }
325
- return d + cut;
326
- },
327
- };
328
- }
329
286
  //# sourceMappingURL=arrange.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"arrange.js","sourceRoot":"","sources":["../../src/core/arrange.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"arrange.js","sourceRoot":"","sources":["../../src/core/arrange.ts"],"names":[],"mappings":"AAyBA,MAAM,KAAK,GAAG,EAAE,CAAC;AACjB,MAAM,KAAK,GAAG,EAAE,CAAC;AACjB,MAAM,GAAG,GAAG,CAAI,IAAuB,EAAE,GAAW,EAAK,EAAE,CAAC,IAAI,CAAC,GAAG,CAAM,CAAC;AAE3E;;;GAGG;AACH,SAAS,aAAa,CAAC,MAAkB,EAAE,KAAa;IACtD,qGAAqG;IACrG,MAAM,IAAI,GAAG,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;IAC7C,MAAM,KAAK,GAAuB,EAAE,CAAC;IACrC,MAAM,GAAG,GAA2B,EAAE,CAAC;IACvC,IAAI,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE,EAAE,EAAE;QACzB,KAAK,MAAM,EAAE,IAAI,KAAK;YAAE,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC;IACvC,CAAC,CAAC,CAAC;IACH,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,QAAQ,GAAG,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC;QAC1D,MAAM,EAAE,GAAG,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;QAC1C,IAAI,IAAI,GAAG,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC;QAC1C,IAAI,GAAG,CAAC,IAAI,CAAC,KAAK,GAAG,CAAC,EAAE,CAAC;YAAE,SAAS;QACpC,KAAK,IAAI,EAAE,GAAG,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,GAAG,GAAG,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC;YAC1D,MAAM,QAAQ,GAAG,IAAI,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,EAAE,IAAI,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC;YAC1D,GAAG,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAC;YACnB,IAAI,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;YACzB,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC;YAC7B,IAAI,GAAG,QAAQ,CAAC;QAClB,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC;IACzB,CAAC;IACD,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC;AAC9B,CAAC;AACD,MAAM,QAAQ,GAAG,CAAC,IAAgB,EAAE,EAAE;IACpC,MAAM,KAAK,GAA2B,EAAE,CAAC;IACzC,KAAK,MAAM,KAAK,IAAI,IAAI;QAAE,KAAK,CAAC,OAAO,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;IACtE,OAAO,KAAK,CAAC;AACf,CAAC,CAAC;AACF,SAAS,WAAW,CAAC,IAAgB,EAAE,KAAyB,EAAE,GAA2B;IAC3F,MAAM,KAAK,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC;IAC7B,IAAI,SAAS,GAAG,CAAC,CAAC;IAClB,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE;QAChC,KAAK,MAAM,CAAC,EAAE,EAAE,EAAE,CAAC,IAAI,KAAK,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC,EAAE,CAAC;YAC9C,IAAI,GAAG,CAAC,EAAE,CAAC,KAAK,GAAG,CAAC,EAAE,CAAC;gBAAE,SAAS;YAClC,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC;gBAAE,SAAS,EAAE,CAAC;QAC7F,CAAC;IACH,CAAC,CAAC,CAAC;IACH,OAAO,SAAS,CAAC;AACnB,CAAC;AACD;;;;GAIG;AACH,SAAS,WAAW,CAAC,MAAkB,EAAE,KAAa;IACpD,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,aAAa,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;IAC1D,MAAM,IAAI,GAA6B,EAAE,CAAC;IAC1C,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,KAAK,EAAE,CAAC;QAC3B,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACzB,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAC3B,CAAC;IACD,IAAI,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;IACzC,IAAI,MAAM,GAAG,WAAW,CAAC,IAAI,EAAE,KAAK,EAAE,GAAG,CAAC,CAAC;IAC3C,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,EAAE,IAAI,MAAM,EAAE,KAAK,EAAE,EAAE,CAAC;QAClD,MAAM,IAAI,GAAG,KAAK,GAAG,CAAC,KAAK,CAAC,CAAC;QAC7B,MAAM,KAAK,GAAG,IAAI;YAChB,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;YAClC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC;QACpE,KAAK,MAAM,EAAE,IAAI,KAAK,EAAE,CAAC;YACvB,MAAM,KAAK,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC;YAC7B,MAAM,IAAI,GAAG,CAAC,EAAU,EAAE,EAAE;gBAC1B,MAAM,MAAM,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBACrF,OAAO,MAAM,CAAC,MAAM;oBAClB,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE,CAAC,GAAG,GAAG,GAAG,CAAC,KAAK,EAAE,KAAK,CAAC,EAAE,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM;oBAC3E,CAAC,CAAC,GAAG,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;YACrB,CAAC,CAAC;YACF,IAAI,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;QAC9C,CAAC;QACD,MAAM,SAAS,GAAG,WAAW,CAAC,IAAI,EAAE,KAAK,EAAE,GAAG,CAAC,CAAC;QAChD,IAAI,SAAS,GAAG,MAAM,EAAE,CAAC;YACvB,MAAM,GAAG,SAAS,CAAC;YACnB,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;QACvC,CAAC;IACH,CAAC;IACD,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE,EAAE,EAAE;QAC3B,KAAK,CAAC,MAAM,CAAC,CAAC,EAAE,KAAK,CAAC,MAAM,EAAE,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IACvF,CAAC,CAAC,CAAC;IACH,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,WAAW,CAAC,GAAa,EAAE,KAAa;IACtD,MAAM,GAAG,GAA6B,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;IAClF,KAAK,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,KAAK;QAAE,IAAI,IAAI,IAAI,GAAG,IAAI,EAAE,IAAI,GAAG,IAAI,IAAI,KAAK,EAAE;YAAE,GAAG,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC;IACnG,MAAM,KAAK,GAAG,CAAC,KAAa,EAAE,EAAE;QAC9B,MAAM,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC;QACrB,KAAK,IAAI,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,IAAI,CAAC,MAAM,EAAE,EAAE,EAAE;YACrC,KAAK,MAAM,IAAI,IAAI,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE;gBAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;oBAAE,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC1F,OAAO,IAAI,CAAC,MAAM,CAAC;IACrB,CAAC,CAAC;IACF,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;IAC/C,MAAM,MAAM,GAAG;QACb,GAAG,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QACrE,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;KAChD,CAAC;IACF,kGAAkG;IAClG,MAAM,OAAO,GAA6B,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;IACtF,MAAM,IAAI,GAAa,EAAE,CAAC;IAC1B,MAAM,KAAK,GAAoC,EAAE,CAAC;IAClD,MAAM,KAAK,GAAG,CAAC,EAAU,EAAE,EAAE;QAC3B,KAAK,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC;QACnB,KAAK,MAAM,IAAI,IAAI,GAAG,CAAC,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC;YACjC,IAAI,KAAK,CAAC,IAAI,CAAC,KAAK,MAAM;gBAAE,SAAS;YACrC,OAAO,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;YACxB,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;gBAAE,KAAK,CAAC,IAAI,CAAC,CAAC;QAChC,CAAC;QACD,KAAK,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC;QACnB,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAChB,CAAC,CAAC;IACF,KAAK,MAAM,EAAE,IAAI,MAAM;QAAE,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;YAAE,KAAK,CAAC,EAAE,CAAC,CAAC;IACnD,4FAA4F;IAC5F,MAAM,KAAK,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC,OAAO,EAAE,CAAC;IAClC,MAAM,KAAK,GAA2B,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IACjF,KAAK,MAAM,EAAE,IAAI,KAAK;QACpB,KAAK,MAAM,IAAI,IAAI,OAAO,CAAC,EAAE,CAAC,IAAI,EAAE;YAAE,KAAK,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,CAAC,EAAE,GAAG,CAAC,KAAK,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACrG,KAAK,MAAM,EAAE,IAAI,IAAI,EAAE,CAAC;QACtB,MAAM,KAAK,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC;QAChE,IAAI,KAAK,CAAC,MAAM;YAAE,KAAK,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,EAAE,EAAE,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;IACjF,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;;;GAKG;AACH,SAAS,UAAU,CACjB,MAAkB,EAClB,KAAa,EACb,EAA0B,EAC1B,IAA4B,EAC5B,GAAW,EACX,MAA8B;IAE9B,MAAM,OAAO,GAA2B,EAAE,CAAC;IAC3C,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE;QAC1B,KAAK,MAAM,EAAE,IAAI,KAAK;YAAE,OAAO,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;IAC1C,CAAC,CAAC,CAAC;IACH,MAAM,IAAI,GAA6B,EAAE,CAAC;IAC1C,KAAK,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,KAAK,EAAE,CAAC;QACjC,IAAI,CAAC,CAAC,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,OAAO,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,KAAK,OAAO,CAAC,EAAE,CAAC;YAAE,SAAS;QACtF,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAC7B,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC/B,CAAC;IACD,oFAAoF;IACpF,MAAM,GAAG,GAA2B,MAAM,CAAC,WAAW,CACpD,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,GAAG,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAC/D,CAAC;IACF,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,QAAQ,EAAE,KAAK,GAAG,GAAG,IAAI,KAAK,GAAG,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;QAC3E,KAAK,GAAG,CAAC,CAAC;QACV,KAAK,MAAM,KAAK,IAAI,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;YAC/D,oGAAoG;YACpG,MAAM,OAAO,GAAa,EAAE,CAAC;YAC7B,KAAK,CAAC,OAAO,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE;gBACtB,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;gBAC5B,OAAO,CAAC,IAAI,CACV,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,GAAG,GAAG,GAAG,MAAM,CAAC,EAAE,CAAC,CACpG,CAAC;YACJ,CAAC,CAAC,CAAC;YACH,MAAM,MAAM,GAAqD,EAAE,CAAC;YACpE,KAAK,CAAC,OAAO,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE;gBACtB,MAAM,MAAM,GAAG,IAAI,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC;gBAC9B,wEAAwE;gBACxE,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,IAAI,IAAI,CAAC;gBACrC,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM;oBACxB,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE,CAAC,GAAG,GAAG,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM;oBACzE,CAAC,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;gBACjB,MAAM,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC,IAAI,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC;gBAC5E,SAAS,CAAC;oBACR,MAAM,IAAI,GAAG,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;oBAC3B,MAAM,MAAM,GAAG,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;oBAC7B,IAAI,CAAC,IAAI,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,GAAG,GAAG,MAAM,CAAC,MAAM,IAAI,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,MAAM;wBAAE,MAAM;oBACpF,MAAM,CAAC,GAAG,EAAE,CAAC;oBACb,MAAM,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC;oBACvB,MAAM,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,CAAC;oBAC7B,MAAM,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC;gBAC7B,CAAC;YACH,CAAC,CAAC,CAAC;YACH,IAAI,CAAC,GAAG,CAAC,CAAC;YACV,KAAK,MAAM,KAAK,IAAI,MAAM;gBACxB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC;oBAC1C,MAAM,EAAE,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;oBAC1B,MAAM,IAAI,GAAG,KAAK,CAAC,GAAG,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;oBAC1D,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,GAAG,GAAG,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;oBACvD,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC;gBACjB,CAAC;QACL,CAAC;IACH,CAAC;IACD,KAAK,MAAM,EAAE,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC;QAAE,EAAE,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,MAAM,CAAC,EAAE,CAAC,CAAC;AACxE,CAAC;AAED,uGAAuG;AACvG,MAAM,UAAU,OAAO,CACrB,GAAa,EACb,KAAa,EACb,MAA4B,EAC5B,MAAiB,MAAM,EACvB,MAAM,GAAG,KAAK,EACd,EAAE,GAAG,EAAE,KAAK,GAAG,KAAK,EAAE,MAAM,KAAc,EAAE,GAAG,EAAE,CAAC,EAAE;IAEpD,MAAM,KAAK,GAAG,WAAW,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;IACtC,MAAM,MAAM,GAAe,EAAE,CAAC;IAC9B,KAAK,MAAM,EAAE,IAAI,GAAG;QAAE,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAC/D,iDAAiD;IACjD,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IACtC,WAAW,CACT,MAAM,EACN,KAAK,CAAC,MAAM,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,IAAI,IAAI,KAAK,IAAI,EAAE,IAAI,KAAK,IAAI,IAAI,KAAK,EAAE,CAAC,CAC5E,CAAC;IACF,2EAA2E;IAC3E,IAAI,MAAM;QAAE,KAAK,MAAM,KAAK,IAAI,MAAM;YAAE,KAAK,CAAC,OAAO,EAAE,CAAC;IACxD,MAAM,KAAK,GAAG,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IAClE,kHAAkH;IAClH,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IAC9B,MAAM,IAAI,GAAG,GAAG,KAAK,MAAM,CAAC;IAC5B,MAAM,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;IAC/B,MAAM,MAAM,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;IAChC,MAAM,QAAQ,GAAG,IAAI,CAAC,CAAC,CAAC,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,KAAK,GAAG,GAAG,GAAG,KAAK,CAAC;IAC5D,MAAM,SAAS,GAAG,IAAI,CAAC,CAAC,CAAC,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,KAAK,GAAG,GAAG,GAAG,KAAK,CAAC;IAC7D,MAAM,MAAM,GAAG,CAAC,KAAe,EAAE,EAAE,CACjC,KAAK,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,EAAE,EAAE,CAAC,GAAG,GAAG,GAAG,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,GAAG,QAAQ,GAAG,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IAC5F,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC;IAChD,MAAM,OAAO,GAA2B,EAAE,CAAC;IAC3C,MAAM,QAAQ,GAA2B,EAAE,CAAC;IAC5C,IAAI,QAAQ,GAAG,GAAG,GAAG,EAAE,CAAC;IACxB,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,IAAI,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,CAAC,OAAO,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC;QAClD,KAAK,MAAM,EAAE,IAAI,KAAK,EAAE,CAAC;YACvB,OAAO,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC;YACjB,QAAQ,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC;YACxB,EAAE,IAAI,GAAG,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,QAAQ,CAAC;QACzC,CAAC;QACD,QAAQ,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC;IAC/E,CAAC;IACD,UAAU,CACR,MAAM,EACN,KAAK,EACL,OAAO,EACP,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,EAC3B,QAAQ,EACR,EAAE,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC,IAAI,GAAG,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAChD,CAAC;IACF,+EAA+E;IAC/E,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC;IAClD,MAAM,GAAG,GAA0B,EAAE,CAAC;IACtC,KAAK,MAAM,EAAE,IAAI,GAAG,EAAE,CAAC;QACrB,MAAM,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,EAAE,EAAE,CAAC,GAAG,KAAK,GAAG,GAAG,GAAG,EAAE,CAAC,CAAC;QAC3D,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC,QAAQ,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,QAAQ,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC;IACrF,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,+BAA+B;AAC/B,MAAM,UAAU,SAAS,CAAC,GAA0B,EAAE,MAA4B;IAChF,MAAM,KAAK,GAAG,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,EAAE,GAAG,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IAChF,OAAO;QACL,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC3F,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;KAC5F,CAAC;AACJ,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,QAAQ,CACtB,GAA0B,EAC1B,IAAU,EACV,GAAc,EACd,MAA4B,EAC5B,OAAyC,EAAE;IAE3C,MAAM,GAAG,GAAG,CAAC,EAAU,EAAE,EAAE;QACzB,MAAM,EAAE,GAAG,GAAG,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;QACxB,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,MAAM,CAAC,EAAE,CAAC,CAAC;QAC5B,OAAO,EAAE,GAAG,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;IAC7D,CAAC,CAAC;IACF,MAAM,CAAC,GAAG,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACzB,MAAM,CAAC,GAAG,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACvB,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC5D,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC5D,MAAM,QAAQ,GACZ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAY,CAAC,CAAC,CAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAY,CAAC;IACpH,MAAM,QAAQ,GACZ,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAY,CAAC,CAAC,CAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAY,CAAC;IACrH,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,GACnB,IAAI,GAAG,IAAI,IAAI,CAAC,IAAI,KAAK,IAAI,IAAI,GAAG,KAAK,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;IACjG,MAAM,IAAI,GAAG,CAAC,KAAmB,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,KAAK,CAAC,QAAQ,IAAI,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,KAAK,CAAC,MAAM,CAAC;IAC3G,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC;AACvD,CAAC"}
@@ -0,0 +1,70 @@
1
+ /** The kinds of database Koppler knows, by their words. */
2
+ export const DATABASE_KINDS = {
3
+ postgres: 'Postgres',
4
+ mysql: 'MySQL',
5
+ valkey: 'Valkey',
6
+ redis: 'Redis',
7
+ };
8
+ /** The needs a database brings on one environment, or none when it is not reached there. */
9
+ export function databaseNeeds(database, env, first) {
10
+ // Another environment's tunnel or name is never borrowed: each environment states its own.
11
+ const reach = env === first ? database : database.envs?.[env];
12
+ if (!reach)
13
+ return [];
14
+ const kind = database.kind ? (DATABASE_KINDS[database.kind] ?? database.kind) : '';
15
+ const what = `${database.name ?? 'Database'}${kind ? ` (${kind})` : ''}`;
16
+ return [
17
+ ...(reach.tunnel && reach.port
18
+ ? [{ tunnel: reach.tunnel, port: reach.port, what, ...(reach.cmd && { cmd: reach.cmd }) }]
19
+ : []),
20
+ ...(reach.hosts ? [{ hosts: reach.hosts, note: `${what}: the name its connection settings dial.` }] : []),
21
+ ];
22
+ }
23
+ /** Adds a list's needs that it does not have yet, by tunnel host or hosts name. */
24
+ const add = (own, more) => [
25
+ ...own,
26
+ ...more.filter(need => !own.some(have => (need.tunnel && have.tunnel === need.tunnel) || (need.hosts && have.hosts === need.hosts))),
27
+ ];
28
+ /** The databases an app uses, by id, that the stack names. */
29
+ export const databasesOf = (stack, id) => Object.keys(stack.apps[id]?.uses ?? {}).filter(key => !!stack.databases?.[key]);
30
+ /**
31
+ * The stack with each app's databases folded into its needs, on every environment. One switched to this Mac (`local`)
32
+ * brings none: it has no tunnel. Never written back.
33
+ */
34
+ export function withDatabases(stack, local = new Set()) {
35
+ const databases = Object.fromEntries(Object.entries(stack.databases ?? {}).filter(([id]) => !local.has(id)));
36
+ const first = stack.envs[0] ?? '';
37
+ const apps = Object.fromEntries(Object.entries(stack.apps).map(([id, app]) => {
38
+ const used = Object.keys(app?.uses ?? {}).flatMap(key => (databases[key] ? [databases[key]] : []));
39
+ if (!app || !used.length)
40
+ return [id, app];
41
+ const needs = (env) => used.flatMap(database => databaseNeeds(database, env, first));
42
+ const envs = Object.fromEntries(stack.envs.slice(1).flatMap(env => {
43
+ const own = app.envs?.[env];
44
+ const more = needs(env);
45
+ if (!own?.prereqs && !more.length)
46
+ return own ? [[env, own]] : [];
47
+ return [[env, { ...own, prereqs: add(own?.prereqs ?? [], more) }]];
48
+ }));
49
+ return [id, { ...app, prereqs: add(app.prereqs ?? [], needs(first)), envs: { ...app.envs, ...envs } }];
50
+ }));
51
+ return { ...stack, apps };
52
+ }
53
+ const CACHES = ['valkey', 'redis'];
54
+ /**
55
+ * The value an app's connection setting takes for a database on this Mac, in the form its kind expects: a .NET app's
56
+ * key=value connection string, else a URL; a cache is its host and port. The local server's user is the Mac's own,
57
+ * as Homebrew and Postgres.app set them up, with no password.
58
+ */
59
+ export function localValue(kind, appKind, at, user) {
60
+ const where = `${at.host}:${String(at.port)}`;
61
+ if (CACHES.includes(kind ?? ''))
62
+ return where;
63
+ const name = at.database ?? '';
64
+ if (appKind === 'dotnet')
65
+ return kind === 'mysql'
66
+ ? `Server=${at.host};Port=${String(at.port)};Database=${name};User=${user}`
67
+ : `Host=${at.host};Port=${String(at.port)};Database=${name};Username=${user}`;
68
+ return `${kind === 'mysql' ? 'mysql' : 'postgres'}://${encodeURIComponent(user)}@${where}/${encodeURIComponent(name)}`;
69
+ }
70
+ //# sourceMappingURL=databases.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"databases.js","sourceRoot":"","sources":["../../src/core/databases.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ export const everyAppSaysHowItRuns = {
2
+ version: '0.1.0',
3
+ about: 'Every app on a board says how it runs',
4
+ up: (raw, say) => {
5
+ const nodes = (raw['nodes'] ?? {});
6
+ for (const [id, node] of Object.entries(nodes))
7
+ if (node['run'] === undefined) {
8
+ node['run'] = 'cli';
9
+ say(`${id} runs by Koppler, as it did`);
10
+ }
11
+ return { ...raw, nodes };
12
+ },
13
+ };
14
+ //# sourceMappingURL=0.1.0.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"0.1.0.js","sourceRoot":"","sources":["../../../../src/core/migrations/board/0.1.0.ts"],"names":[],"mappings":"AAGA,MAAM,CAAC,MAAM,qBAAqB,GAAc;IAC9C,OAAO,EAAE,OAAO;IAChB,KAAK,EAAE,uCAAuC;IAC9C,EAAE,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE;QACf,MAAM,KAAK,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,CAAwB,CAAC;QAC1D,KAAK,MAAM,CAAC,EAAE,EAAE,IAAI,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC;YAC5C,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,SAAS,EAAE,CAAC;gBAC9B,IAAI,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC;gBACpB,GAAG,CAAC,GAAG,EAAE,6BAA6B,CAAC,CAAC;YAC1C,CAAC;QACH,OAAO,EAAE,GAAG,GAAG,EAAE,KAAK,EAAE,CAAC;IAC3B,CAAC;CACF,CAAC"}
@@ -0,0 +1,12 @@
1
+ // A board's format, wherever the board is kept: the stack's team boards, the user's own, a shared board file. One
2
+ // migration for each Koppler version that changed it, oldest first.
3
+ import { migrate } from "../run.js";
4
+ import { everyAppSaysHowItRuns } from "./0.1.0.js";
5
+ export const BOARD_FORMAT = {
6
+ name: 'The board',
7
+ key: 'koppler',
8
+ version: '0.1.0',
9
+ migrations: [everyAppSaysHowItRuns],
10
+ };
11
+ export const migrateBoard = (raw) => migrate(raw, BOARD_FORMAT);
12
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/core/migrations/board/index.ts"],"names":[],"mappings":"AAAA,kHAAkH;AAClH,oEAAoE;AACpE,OAAO,EAAE,OAAO,EAAyB,MAAM,WAAW,CAAC;AAC3D,OAAO,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;AAEnD,MAAM,CAAC,MAAM,YAAY,GAAW;IAClC,IAAI,EAAE,WAAW;IACjB,GAAG,EAAE,SAAS;IACd,OAAO,EAAE,OAAO;IAChB,UAAU,EAAE,CAAC,qBAAqB,CAAC;CACpC,CAAC;AAEF,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,GAAQ,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE,YAAY,CAAC,CAAC"}
@@ -0,0 +1,13 @@
1
+ // The board file: what the canvas keeps per stack on this Mac (the board on screen, the user's own boards, the view).
2
+ // One migration for each Koppler version that changed it, oldest first; the boards inside it are boards
3
+ // (migrations/board).
4
+ import { migrate } from "../run.js";
5
+ export const BOARD_FILE_FORMAT = {
6
+ name: 'The board file',
7
+ key: 'koppler',
8
+ // 0.2.0 added which databases run locally and, per app, whether its database lines go through the tunnel card.
9
+ version: '0.2.0',
10
+ migrations: [],
11
+ };
12
+ export const migrateBoardFile = (raw) => migrate(raw, BOARD_FILE_FORMAT);
13
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/core/migrations/board-file/index.ts"],"names":[],"mappings":"AAAA,sHAAsH;AACtH,wGAAwG;AACxG,sBAAsB;AACtB,OAAO,EAAE,OAAO,EAAyB,MAAM,WAAW,CAAC;AAE3D,MAAM,CAAC,MAAM,iBAAiB,GAAW;IACvC,IAAI,EAAE,gBAAgB;IACtB,GAAG,EAAE,SAAS;IACd,+GAA+G;IAC/G,OAAO,EAAE,OAAO;IAChB,UAAU,EAAE,EAAE;CACf,CAAC;AAEF,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,GAAQ,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE,iBAAiB,CAAC,CAAC"}
@@ -0,0 +1,24 @@
1
+ // Each of Koppler's files as this Koppler reads it: brought up to its format, with the boards it holds in the board
2
+ // format. Pure; reading from disk and writing back is the caller's.
3
+ import { migrate as migrateBoard } from "../presets.js";
4
+ import { migrateBoardFile } from "./board-file/index.js";
5
+ import { migrateStack } from "./stack/index.js";
6
+ /** The boards under these keys, each in the board format; one that is not a board is kept as it is. */
7
+ const withBoards = (raw, keys) => ({
8
+ ...raw,
9
+ ...Object.fromEntries(keys.flatMap(key => {
10
+ const list = raw[key];
11
+ return Array.isArray(list) ? [[key, list.map((one) => migrateBoard(one).preset ?? one)]] : [];
12
+ })),
13
+ });
14
+ /** The stack, and its team boards. */
15
+ export const upgradeStack = raw => {
16
+ const done = migrateStack(raw);
17
+ return done.error === undefined ? { value: withBoards(done.value, ['presets']) } : done;
18
+ };
19
+ /** The board file, and the user's own boards in it, kept and deleted. */
20
+ export const upgradeBoardFile = raw => {
21
+ const done = migrateBoardFile(raw);
22
+ return done.error === undefined ? { value: withBoards(done.value, ['presets', 'trash']) } : done;
23
+ };
24
+ //# sourceMappingURL=files.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"files.js","sourceRoot":"","sources":["../../../src/core/migrations/files.ts"],"names":[],"mappings":"AAAA,oHAAoH;AACpH,oEAAoE;AACpE,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,eAAe,CAAC;AACxD,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAEzD,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAIhD,uGAAuG;AACvG,MAAM,UAAU,GAAG,CAAC,GAAQ,EAAE,IAAc,EAAO,EAAE,CAAC,CAAC;IACrD,GAAG,GAAG;IACN,GAAG,MAAM,CAAC,WAAW,CACnB,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;QACjB,MAAM,IAAI,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC;QACtB,OAAO,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,GAAY,EAAE,EAAE,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,MAAM,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IACzG,CAAC,CAAC,CACH;CACF,CAAC,CAAC;AAEH,sCAAsC;AACtC,MAAM,CAAC,MAAM,YAAY,GAAY,GAAG,CAAC,EAAE;IACzC,MAAM,IAAI,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC;IAC/B,OAAO,IAAI,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,UAAU,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;AAC1F,CAAC,CAAC;AACF,yEAAyE;AACzE,MAAM,CAAC,MAAM,gBAAgB,GAAY,GAAG,CAAC,EAAE;IAC7C,MAAM,IAAI,GAAG,gBAAgB,CAAC,GAAG,CAAC,CAAC;IACnC,OAAO,IAAI,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,UAAU,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;AACnG,CAAC,CAAC"}
@@ -0,0 +1,47 @@
1
+ // Migrations: every JSON file Koppler keeps records the Koppler version whose format it is written in. Each Koppler
2
+ // version that changes a file's format adds one migration for it, and reading an older file runs every migration after
3
+ // its version, in order, on the raw JSON. An older file keeps working without being rewritten; writing the result back
4
+ // is a step of its own.
5
+ const VERSION = /^(\d+)\.(\d+)\.(\d+)$/;
6
+ export const isVersion = (text) => typeof text === 'string' && VERSION.test(text);
7
+ /** Orders two versions: below zero when `a` is older. */
8
+ export function compareVersions(a, b) {
9
+ const [x, y] = [a, b].map(one => (VERSION.exec(one) ?? []).slice(1).map(Number));
10
+ for (let at = 0; at < 3; at++) {
11
+ const diff = (x?.[at] ?? 0) - (y?.[at] ?? 0);
12
+ if (diff)
13
+ return diff;
14
+ }
15
+ return 0;
16
+ }
17
+ /** The version a file says it is written in; one with none is older than any. */
18
+ export const versionOf = (raw, format) => {
19
+ const own = raw[format.key];
20
+ return isVersion(own) ? own : '0.0.0';
21
+ };
22
+ /**
23
+ * The one way a file is read: brought up to this Koppler's format by every migration newer than the version it
24
+ * records, oldest first, each on a copy, and stamped with the format. A file from a newer Koppler is refused.
25
+ */
26
+ export function migrate(raw, format) {
27
+ const from = versionOf(raw, format);
28
+ if (compareVersions(from, format.version) > 0)
29
+ return {
30
+ error: `${format.name} is written for Koppler ${from}, newer than this one reads (${format.version}); update Koppler`,
31
+ };
32
+ let value = raw;
33
+ const applied = [];
34
+ for (const migration of format.migrations) {
35
+ if (compareVersions(migration.version, from) <= 0)
36
+ continue;
37
+ const changes = [];
38
+ value = migration.up(structuredClone(value), change => changes.push(change));
39
+ applied.push({ migration, changes });
40
+ }
41
+ return { value: { ...value, [format.key]: format.version }, from, applied };
42
+ }
43
+ /** Whether a format's migrations are in order and none is newer than the format itself. */
44
+ export const inOrder = (format) => format.migrations.every((one, at) => isVersion(one.version) &&
45
+ compareVersions(one.version, format.version) <= 0 &&
46
+ (at === 0 || compareVersions(format.migrations[at - 1]?.version ?? '0.0.0', one.version) < 0));
47
+ //# sourceMappingURL=run.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"run.js","sourceRoot":"","sources":["../../../src/core/migrations/run.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,119 @@
1
+ // 0.2.0: databases are named once under `databases` and apps `uses` them, where before each app stated a tunnel to
2
+ // each database (and the hosts entry its settings dial) among its own needs.
3
+ import { withDatabases } from "../../databases.js";
4
+ import { tunnelKind } from "../../ports.js";
5
+ const PORTS = { 5432: 'postgres', 3306: 'mysql', 6379: 'valkey', 6380: 'valkey' };
6
+ const ENGINE = /postgres|mysql|aurora|rds|cluster|valkey|redis|elasticache|database|\bdb\b|cache/i;
7
+ /** A tunnel to a database or cache: by its port, or by what it says it reaches. One a setting points at stays. */
8
+ const isDatabase = (need) => !!need.tunnel &&
9
+ !!need.port &&
10
+ !need.env &&
11
+ !need.connectsAs &&
12
+ (!!PORTS[need.port] || ENGINE.test(`${need.tunnel} ${need.what ?? ''}`));
13
+ const kindOf = (need) => /redis/i.test(need.tunnel ?? '')
14
+ ? 'redis'
15
+ : (PORTS[need.port ?? 0] ?? (/mysql/i.test(need.what ?? '') ? 'mysql' : 'postgres'));
16
+ /** A hosts entry for a database endpoint, not for an app. */
17
+ const isEndpoint = (need) => !!need.hosts && !need.tunnel && ENGINE.test(need.hosts);
18
+ const slug = (text) => text
19
+ .toLowerCase()
20
+ .replace(/[^a-z0-9]+/g, '-')
21
+ .replace(/^-|-$/g, '') || 'database';
22
+ /** What each app needs on each environment, to compare before and after. */
23
+ function needsOf(stack) {
24
+ const folded = withDatabases(stack);
25
+ const key = (need) => JSON.stringify([need.tunnel, need.port, need.hosts, need.sso, need.signIn, need.cmd]);
26
+ return Object.fromEntries(Object.entries(folded.apps).flatMap(([id, app]) => folded.envs.map(env => [
27
+ `${id}@${env}`,
28
+ ((env === folded.envs[0] ? undefined : app.envs?.[env]?.prereqs) ?? app.prereqs ?? []).map(key).sort(),
29
+ ])));
30
+ }
31
+ function up(raw, say) {
32
+ const before = raw;
33
+ if (!Array.isArray(before.envs) || typeof before.apps !== 'object')
34
+ return raw;
35
+ const stack = structuredClone(before);
36
+ const [first = ''] = stack.envs;
37
+ const databases = (stack.databases ??= {});
38
+ const byHost = new Map();
39
+ const changes = [];
40
+ /** Per database and environment, the hosts entry each app using it dials, if it has exactly one. */
41
+ const dials = new Map();
42
+ for (const [id, app] of Object.entries(stack.apps)) {
43
+ const own = (app.prereqs ?? []).filter(isDatabase);
44
+ for (const need of own) {
45
+ const host = need.tunnel ?? '';
46
+ let key = byHost.get(host);
47
+ if (!key) {
48
+ // "Orders (Postgres)" is the database Orders; its kind is said apart.
49
+ const said = need.what && !/^(database|cache)\b/i.test(need.what) ? need.what : tunnelKind({ tunnel: host });
50
+ const name = said.replace(/\s*\([^)]*\)$/, '') || said;
51
+ key = slug(name);
52
+ while (databases[key])
53
+ key = `${key}-2`;
54
+ byHost.set(host, key);
55
+ databases[key] = {
56
+ name,
57
+ kind: kindOf(need),
58
+ tunnel: host,
59
+ port: need.port,
60
+ ...(need.cmd && { cmd: need.cmd }),
61
+ };
62
+ changes.push(`New database ${key}: ${name}, through the tunnel to ${host}`);
63
+ }
64
+ (app.uses ??= {})[key] ??= {};
65
+ changes.push(`${app.name ?? id} uses ${key} instead of its own tunnel to ${host}`);
66
+ }
67
+ // On each environment, the tunnel of the same port, in the same order, reaches the same database there.
68
+ for (const env of own.length ? stack.envs : []) {
69
+ const list = env === first ? app.prereqs : app.envs?.[env]?.prereqs;
70
+ if (!list)
71
+ continue;
72
+ const tunnels = list.filter(isDatabase);
73
+ const endpoints = list.filter(isEndpoint);
74
+ for (const need of own) {
75
+ const same = own.filter(one => one.port === need.port);
76
+ const there = env === first ? need : tunnels.filter(one => one.port === need.port)[same.indexOf(need)];
77
+ const key = byHost.get(need.tunnel ?? '') ?? '';
78
+ const database = databases[key];
79
+ if (!there || !database)
80
+ continue;
81
+ const reach = env === first ? database : ((database.envs ??= {})[env] ??= { tunnel: there.tunnel, port: there.port });
82
+ if (reach['tunnel'] !== there.tunnel || reach['port'] !== there.port)
83
+ continue;
84
+ list.splice(list.indexOf(there), 1);
85
+ const users = dials.get(`${key}@${env}`) ?? [];
86
+ users.push({ list, endpoint: own.length === 1 && endpoints.length === 1 ? endpoints[0] : undefined });
87
+ dials.set(`${key}@${env}`, users);
88
+ }
89
+ }
90
+ }
91
+ // The name a database's apps dial goes with it when every one of them dials it.
92
+ for (const [at, users] of dials) {
93
+ const [key = '', env = ''] = at.split('@');
94
+ const name = users[0]?.endpoint?.hosts;
95
+ if (!name || users.some(one => one.endpoint?.hosts !== name))
96
+ continue;
97
+ const database = databases[key];
98
+ const reach = env === first ? database : database?.envs?.[env];
99
+ if (!reach)
100
+ continue;
101
+ reach['hosts'] = name;
102
+ for (const { list, endpoint } of users)
103
+ if (endpoint)
104
+ list.splice(list.indexOf(endpoint), 1);
105
+ }
106
+ // Only when every app still needs exactly what it did, on every environment.
107
+ const [was, now] = [needsOf(before), needsOf(stack)];
108
+ if (!changes.length || Object.keys(was).some(key => JSON.stringify(was[key]) !== JSON.stringify(now[key])))
109
+ return raw;
110
+ for (const change of new Set(changes))
111
+ say(change);
112
+ return stack;
113
+ }
114
+ export const databasesNamedOnce = {
115
+ version: '0.2.0',
116
+ about: 'Names each database once under databases, used by its apps, instead of a tunnel on each app',
117
+ up,
118
+ };
119
+ //# sourceMappingURL=0.2.0.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"0.2.0.js","sourceRoot":"","sources":["../../../../src/core/migrations/stack/0.2.0.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ // The stack's format: one migration for each Koppler version that changed it, oldest first. A new one goes last, in a
2
+ // file named for the version that introduces it, and the format's version moves to it.
3
+ import { migrate } from "../run.js";
4
+ import { databasesNamedOnce } from "./0.2.0.js";
5
+ export const STACK_FORMAT = {
6
+ name: 'The stack',
7
+ key: 'koppler',
8
+ version: '0.2.0',
9
+ migrations: [databasesNamedOnce],
10
+ };
11
+ /** A stack as written, in this Koppler's format: what every reader of the stack works with. */
12
+ export const migrateStack = (raw) => migrate(raw, STACK_FORMAT);
13
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/core/migrations/stack/index.ts"],"names":[],"mappings":"AAAA,sHAAsH;AACtH,uFAAuF;AACvF,OAAO,EAAE,OAAO,EAAyB,MAAM,WAAW,CAAC;AAC3D,OAAO,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAEhD,MAAM,CAAC,MAAM,YAAY,GAAW;IAClC,IAAI,EAAE,WAAW;IACjB,GAAG,EAAE,SAAS;IACd,OAAO,EAAE,OAAO;IAChB,UAAU,EAAE,CAAC,kBAAkB,CAAC;CACjC,CAAC;AAEF,+FAA+F;AAC/F,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,GAAQ,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE,YAAY,CAAC,CAAC"}