create-ragen-app 0.6.1 → 0.6.2
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.
- package/README.md +26 -7
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +129 -25
- package/dist/cli.js.map +1 -1
- package/dist/node-version.d.ts +71 -11
- package/dist/node-version.d.ts.map +1 -1
- package/dist/node-version.js +155 -19
- package/dist/node-version.js.map +1 -1
- package/dist/tasks.d.ts +101 -11
- package/dist/tasks.d.ts.map +1 -1
- package/dist/tasks.js +142 -19
- package/dist/tasks.js.map +1 -1
- package/package.json +2 -2
package/README.md
CHANGED
|
@@ -33,14 +33,32 @@ yourself.
|
|
|
33
33
|
|
|
34
34
|
## Node version
|
|
35
35
|
|
|
36
|
-
A Ragen installation
|
|
37
|
-
anything
|
|
38
|
-
and 0.2.0 was published and verified on Node 22 by accident — but
|
|
39
|
-
setup it runs for you (`npm install` across the monorepo, `prisma
|
|
40
|
-
`migrate deploy`, the seed) runs under the caller's Node and leaves a
|
|
41
|
-
that fails much later, nowhere near the cause. npm's `EBADENGINE` does warn,
|
|
36
|
+
A Ragen installation runs on `^24.15.0 || >=26.0.0`, and the wizard refuses
|
|
37
|
+
anything outside that _before_ it clones. Not because the CLI needs it —
|
|
38
|
+
it does not, and 0.2.0 was published and verified on Node 22 by accident — but
|
|
39
|
+
because the setup it runs for you (`npm install` across the monorepo, `prisma
|
|
40
|
+
generate`, `migrate deploy`, the seed) runs under the caller's Node and leaves a
|
|
41
|
+
tree that fails much later, nowhere near the cause. npm's `EBADENGINE` does warn,
|
|
42
42
|
as one line inside a wall of install output that does not say what breaks.
|
|
43
43
|
|
|
44
|
+
**It is a range rather than a minimum, and both ends matter.** `jsdom` — a
|
|
45
|
+
transitive dependency, which narrowed its range with no version bump of ours —
|
|
46
|
+
requires `^22.22.2 || ^24.15.0 || >=26.0.0`, and the repository sets
|
|
47
|
+
`engine-strict=true`, so npm stops rather than warns. Two consequences:
|
|
48
|
+
|
|
49
|
+
- Node 24.0 through 24.14 fail `npm install` while looking, to every other
|
|
50
|
+
check, like a supported Node. The refusal names the reason, because "needs
|
|
51
|
+
Node 24" read by someone who has Node 24 is a riddle.
|
|
52
|
+
- **Node 25 fails too**, and no minimum version can say so — `>=24.15.0` accepts
|
|
53
|
+
it. Odd-numbered Node lines never become LTS and libraries routinely omit
|
|
54
|
+
them, so the gap is normal rather than an oversight. A caller on 25 gets a
|
|
55
|
+
refusal that says "newer than the minimum and still not supported", not "too
|
|
56
|
+
old", which would send them to upgrade again.
|
|
57
|
+
|
|
58
|
+
Node 22 is inside jsdom's range and deliberately outside ours: this repository
|
|
59
|
+
has required 24 since long before any of this, and widening support is a
|
|
60
|
+
decision rather than a consequence of a dependency's range.
|
|
61
|
+
|
|
44
62
|
`--skip-install` turns the refusal into a warning, because then the wizard
|
|
45
63
|
runs nothing itself: scaffold here, run the setup on a supported Node. `--yes`
|
|
46
64
|
does not bypass it — that flag means "accept the defaults", not "ignore a
|
|
@@ -66,7 +84,8 @@ What counts as install-affecting:
|
|
|
66
84
|
| An app the web app can no longer run without | the outro in `src/cli.ts`, which tells people what to start |
|
|
67
85
|
| A variable a provider seam makes required | `src/worker-runtime.ts`, `src/storage-provider.ts` or `src/encryption-provider.ts` — the selection writes it, and `tests/architecture/create-ragen-app-knows-the-provider-seams.test.ts` fails when it does not |
|
|
68
86
|
| A new first-run step (migration, seed, generate) | `src/tasks.ts` and `maybeRunFirstTimeSetup` |
|
|
69
|
-
| A `docker-compose.yml` service
|
|
87
|
+
| A `docker-compose.yml` service or published port change | `PUBLISHED_PORTS` in `src/tasks.ts` — the wizard probes those ports before starting the stack, and `tests/architecture/installer-ports-agree-with-compose.test.ts` fails when the two tables disagree |
|
|
88
|
+
| A change to how Compose scopes its resources | `resolveComposeProjectName` in `src/tasks.ts` — it writes `COMPOSE_PROJECT_NAME` into the install's `.env`, which is the only thing keeping two installs in same-named directories apart |
|
|
70
89
|
| A gate that a brand-new install cannot pass (registration, licensing, onboarding) | usually the app, not this package — a fresh install must be able to reach a working chat without an administrator who does not exist yet |
|
|
71
90
|
|
|
72
91
|
`tests/architecture/create-ragen-app-manifest-is-current.test.ts` catches one
|
package/dist/cli.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"AAuFA;;;;;;GAMG;AACH,wBAAsB,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC,CA2Q1D"}
|
package/dist/cli.js
CHANGED
|
@@ -154,6 +154,11 @@ async function run(argv) {
|
|
|
154
154
|
].join('\n'));
|
|
155
155
|
return false;
|
|
156
156
|
}
|
|
157
|
+
// Compose's project name, pinned for this directory before anything starts.
|
|
158
|
+
// Two installs whose directories share a basename would otherwise share the
|
|
159
|
+
// project — and therefore the containers and volumes — and a *stopped* first
|
|
160
|
+
// stack makes that silent: no port is held, so nothing refuses.
|
|
161
|
+
await writeComposeProjectName(targetDir);
|
|
157
162
|
// After the env write, so a run that stops on drifted keys has not already
|
|
158
163
|
// rewritten a file in the clone.
|
|
159
164
|
try {
|
|
@@ -321,6 +326,98 @@ function overridesForTarget(target, resolved) {
|
|
|
321
326
|
}
|
|
322
327
|
return overrides;
|
|
323
328
|
}
|
|
329
|
+
/**
|
|
330
|
+
* Writes `COMPOSE_PROJECT_NAME` into the new tree's `.env`.
|
|
331
|
+
*
|
|
332
|
+
* `.env`, not `.env.local`, and the distinction is the point: Compose reads
|
|
333
|
+
* `.env` from the project directory by itself, so every later `docker compose`
|
|
334
|
+
* the caller runs — days after this wizard exited — uses the same name. A
|
|
335
|
+
* value passed only in the installer's own environment would name one project
|
|
336
|
+
* here and a different one afterwards, which is the empty-database failure
|
|
337
|
+
* rather than a fix for it.
|
|
338
|
+
*
|
|
339
|
+
* Safe to sit beside the install's own config: `scripts/load-root-env.mjs`
|
|
340
|
+
* reads `.env` last, `.env.local` wins over it, nothing in the apps reads this
|
|
341
|
+
* variable, and `.env` is gitignored.
|
|
342
|
+
*
|
|
343
|
+
* Failure here is a warning, not an abort. The files are correct and Compose
|
|
344
|
+
* still works — it simply falls back to the basename, which is where this
|
|
345
|
+
* started.
|
|
346
|
+
*/
|
|
347
|
+
async function writeComposeProjectName(targetDir) {
|
|
348
|
+
// An existing value wins over anything resolved here, and this is not
|
|
349
|
+
// politeness — it is what makes the mechanism stable. Re-running the wizard
|
|
350
|
+
// over a tree that already has a stack must not rename its project: the new
|
|
351
|
+
// name would address empty volumes and abandon the database the first run
|
|
352
|
+
// migrated. That can happen for an innocent reason too — the first run
|
|
353
|
+
// decided while Docker was up, this one cannot reach it — so the rule is
|
|
354
|
+
// "whatever this directory already decided", not "whatever we would decide
|
|
355
|
+
// again".
|
|
356
|
+
const existing = readComposeProjectName(targetDir);
|
|
357
|
+
if (existing) {
|
|
358
|
+
clack.log.info(`Keeping this directory's Compose project name: ${existing} (from .env).`);
|
|
359
|
+
return;
|
|
360
|
+
}
|
|
361
|
+
const project = await (0, tasks_1.resolveComposeProjectName)(targetDir);
|
|
362
|
+
try {
|
|
363
|
+
(0, node_fs_1.writeFileSync)((0, node_path_1.join)(targetDir, '.env'), [
|
|
364
|
+
"# Read by docker compose, not by the apps. It scopes this install's",
|
|
365
|
+
'# containers, volumes and network, so a second Ragen checkout cannot',
|
|
366
|
+
'# reuse them — which it would if both directories had the same name,',
|
|
367
|
+
'# since that basename is what Compose uses when this is unset.',
|
|
368
|
+
`COMPOSE_PROJECT_NAME=${project.name}`,
|
|
369
|
+
'',
|
|
370
|
+
].join('\n'), { mode: 0o600 });
|
|
371
|
+
}
|
|
372
|
+
catch (error) {
|
|
373
|
+
clack.log.warn([
|
|
374
|
+
`Could not write .env with COMPOSE_PROJECT_NAME: ${String(error)}`,
|
|
375
|
+
"Compose will fall back to this directory's name, which another",
|
|
376
|
+
`install in a directory called "${(0, node_path_1.basename)((0, node_path_1.resolve)(targetDir))}" would`,
|
|
377
|
+
'share — add the line by hand if you have one.',
|
|
378
|
+
].join('\n'));
|
|
379
|
+
return;
|
|
380
|
+
}
|
|
381
|
+
if (project.daemonUnreachable) {
|
|
382
|
+
// Not a collision — a question that could not be asked. Said plainly, or
|
|
383
|
+
// the hashed name in `docker ps` looks like something went wrong.
|
|
384
|
+
clack.log.info([
|
|
385
|
+
'Could not ask Docker which Compose projects exist, so this install',
|
|
386
|
+
`took a name derived from its path: ${project.name}. A stopped daemon`,
|
|
387
|
+
'still holds the volumes of earlier installs, and the plain directory',
|
|
388
|
+
'name would have reused them.',
|
|
389
|
+
].join(' '));
|
|
390
|
+
return;
|
|
391
|
+
}
|
|
392
|
+
if (project.disambiguated) {
|
|
393
|
+
clack.log.warn([
|
|
394
|
+
`This machine already runs a Compose project called "${(0, node_path_1.basename)((0, node_path_1.resolve)(targetDir))}"`,
|
|
395
|
+
project.takenBy ? `(from ${project.takenBy}).` : '.',
|
|
396
|
+
'',
|
|
397
|
+
'Compose names a project after its directory, so this install would',
|
|
398
|
+
"have reused that one's containers and volumes — including its",
|
|
399
|
+
`database. Written .env with COMPOSE_PROJECT_NAME=${project.name}`,
|
|
400
|
+
'instead, so the two stay apart. Host ports are separate and may still',
|
|
401
|
+
'collide; see below.',
|
|
402
|
+
].join(' '));
|
|
403
|
+
}
|
|
404
|
+
}
|
|
405
|
+
/**
|
|
406
|
+
* Reads `COMPOSE_PROJECT_NAME` back out of an install's `.env`, or undefined
|
|
407
|
+
* when there is no such file or no such line. Parsed with dotenv rather than a
|
|
408
|
+
* regex so a quoted value reads the same way Compose reads it.
|
|
409
|
+
*/
|
|
410
|
+
function readComposeProjectName(targetDir) {
|
|
411
|
+
try {
|
|
412
|
+
const parsed = (0, dotenv_1.parse)((0, node_fs_1.readFileSync)((0, node_path_1.join)(targetDir, '.env'), 'utf8'));
|
|
413
|
+
const name = parsed.COMPOSE_PROJECT_NAME?.trim();
|
|
414
|
+
return name === undefined || name === '' ? undefined : name;
|
|
415
|
+
}
|
|
416
|
+
catch {
|
|
417
|
+
// No `.env` is the normal case on a fresh clone.
|
|
418
|
+
return undefined;
|
|
419
|
+
}
|
|
420
|
+
}
|
|
324
421
|
function writeEnvFile(targetDir, target, overrides) {
|
|
325
422
|
const paths = ENV_PATHS[target];
|
|
326
423
|
const examplePath = (0, node_path_1.join)(targetDir, paths.example);
|
|
@@ -716,33 +813,41 @@ async function runStep(spinner, label, successMessage, task) {
|
|
|
716
813
|
*/
|
|
717
814
|
async function maybeStartDocker(targetDir, yes, profiles = []) {
|
|
718
815
|
const withPii = profiles.includes(pii_masking_1.PII_COMPOSE_PROFILE);
|
|
719
|
-
// Before the confirm, not after:
|
|
720
|
-
// already
|
|
816
|
+
// Before the confirm, not after: starting a stack onto ports something else
|
|
817
|
+
// already answers on is the kind of thing to decline, and you can only
|
|
721
818
|
// decline it if you are told first.
|
|
722
|
-
|
|
819
|
+
//
|
|
820
|
+
// This used to warn about *data* — pinned volume names meant a second
|
|
821
|
+
// install silently opened the first one's database. docker-compose.yml no
|
|
822
|
+
// longer pins them, so containers, volumes and the network are scoped to the
|
|
823
|
+
// project directory and two installs coexist. Ports are the half that
|
|
824
|
+
// prefixing cannot fix: a published port is a host port either way.
|
|
825
|
+
const candidates = withPii
|
|
826
|
+
? [...tasks_1.PUBLISHED_PORTS, ...tasks_1.PII_PUBLISHED_PORTS]
|
|
827
|
+
: tasks_1.PUBLISHED_PORTS;
|
|
828
|
+
const busy = await (0, tasks_1.busyPublishedPorts)(candidates);
|
|
829
|
+
if (busy.length > 0) {
|
|
723
830
|
clack.log.warn([
|
|
724
|
-
'
|
|
725
|
-
'
|
|
726
|
-
|
|
831
|
+
'Something is already listening on ports this stack publishes:',
|
|
832
|
+
'',
|
|
833
|
+
...busy.map(({ service, variable, port }) => ` ${port} ${service} (${variable})`),
|
|
834
|
+
'',
|
|
835
|
+
'Usually that is another Ragen install. Its containers and volumes no',
|
|
836
|
+
'longer collide with this one — Compose scopes those to the directory —',
|
|
837
|
+
'but a host port belongs to whoever bound it first, so `docker compose',
|
|
838
|
+
'up` will fail, and worse, DATABASE_URL here would point at that other',
|
|
839
|
+
"install's Postgres if it did not.",
|
|
727
840
|
'',
|
|
728
|
-
'
|
|
729
|
-
'distinct name *and* distinct host ports — the name only moves the',
|
|
730
|
-
'containers and volumes, while the published ports would still collide',
|
|
731
|
-
'with the running stack:',
|
|
841
|
+
'Answer no here and start this stack on ports of its own:',
|
|
732
842
|
'',
|
|
733
843
|
` cd ${targetDir} \\`,
|
|
734
|
-
|
|
735
|
-
' POSTGRES_PORT=55532 QDRANT_PORT=6343 QDRANT_GRPC_PORT=6344 \\',
|
|
736
|
-
' DOCLING_PORT=5011 REDIS_PORT=56479 \\',
|
|
844
|
+
` && ${busy.map(({ variable, port }) => `${variable}=${port + 100}`).join(' ')} \\`,
|
|
737
845
|
// Built from what this install actually chose. A command that omits
|
|
738
846
|
// the profile starts a stack without the services whose urls were just
|
|
739
847
|
// written — which is the same half-configuration the profile exists to
|
|
740
848
|
// prevent, only printed instead of executed.
|
|
741
849
|
...(withPii
|
|
742
|
-
? [
|
|
743
|
-
' PRESIDIO_ANALYZER_PORT=5012 PRESIDIO_ANONYMIZER_PORT=5013 \\',
|
|
744
|
-
` docker compose --profile ${pii_masking_1.PII_COMPOSE_PROFILE} up -d`,
|
|
745
|
-
]
|
|
850
|
+
? [` docker compose --profile ${pii_masking_1.PII_COMPOSE_PROFILE} up -d`]
|
|
746
851
|
: [' docker compose up -d']),
|
|
747
852
|
'',
|
|
748
853
|
'Then update .env.local to match: DATABASE_URL, QDRANT_URL, REDIS_URL',
|
|
@@ -782,12 +887,11 @@ async function maybeStartDocker(targetDir, yes, profiles = []) {
|
|
|
782
887
|
clack.log.warn([
|
|
783
888
|
'docker compose could not start the services, and the install carried',
|
|
784
889
|
'on: the files are written, so this is the one step you can redo by',
|
|
785
|
-
'hand. The usual cause is another
|
|
786
|
-
'
|
|
787
|
-
'container name … is already in use".',
|
|
890
|
+
'hand. The usual cause is another stack already holding these host',
|
|
891
|
+
'ports — compose says so with "port is already allocated".',
|
|
788
892
|
'',
|
|
789
|
-
'Either stop the other stack, or start this one
|
|
790
|
-
'
|
|
893
|
+
'Either stop the other stack, or start this one on ports of its own,',
|
|
894
|
+
'then point .env.local at them.',
|
|
791
895
|
'',
|
|
792
896
|
`The error was: ${String(error)}`,
|
|
793
897
|
].join('\n'));
|
|
@@ -797,9 +901,9 @@ async function maybeStartDocker(targetDir, yes, profiles = []) {
|
|
|
797
901
|
}
|
|
798
902
|
/**
|
|
799
903
|
* `skipDatabaseSteps` is the compose failure reaching this far, and it is not
|
|
800
|
-
* caution for its own sake. The usual cause of that failure is another
|
|
801
|
-
*
|
|
802
|
-
*
|
|
904
|
+
* caution for its own sake. The usual cause of that failure is another stack
|
|
905
|
+
* holding these host ports — which means its Postgres is answering on the very
|
|
906
|
+
* port this install was just configured for. Running `migrate
|
|
803
907
|
* deploy` and the seed then writes into *that* install's database: the exact
|
|
804
908
|
* thing the warning two prompts earlier exists to prevent, arrived at by a
|
|
805
909
|
* different road.
|
package/dist/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA2FA,kBAqQC;AAhWD,qCAMiB;AACjB,yCAAiC;AAEjC,sDAAwC;AACxC,mCAA8C;AAE9C,iCAAqE;AACrE,mCAAwC;AACxC,+CAAiD;AACjD,+DAK+B;AAC/B,yCAA+C;AAC/C,iDAA4D;AAC5D,+CAAkE;AAClE,iDAAkD;AAClD,iDAKwB;AACxB,yCAKoB;AACpB,+CAIuB;AACvB,uCAA2C;AAC3C,yDAI4B;AAC5B,qDAK0B;AAC1B,mCAQiB;AAEjB,mFAAmF;AACnF,MAAM,qBAAqB,GAAG,cAAc,CAAC;AAE7C,MAAM,SAAS,GAA0D;IACvE,IAAI,EAAE,EAAE,OAAO,EAAE,cAAc,EAAE,KAAK,EAAE,YAAY,EAAE;IACtD,KAAK,EAAE,EAAE,OAAO,EAAE,yBAAyB,EAAE,KAAK,EAAE,uBAAuB,EAAE;CAC9E,CAAC;AAcF;;;;;;GAMG;AACI,KAAK,UAAU,GAAG,CAAC,IAAc;IACtC,MAAM,IAAI,GAAG,IAAA,gBAAS,EAAC,IAAI,CAAC,CAAC;IAE7B,KAAK,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC;IAEhC,2EAA2E;IAC3E,0CAA0C;IAC1C,MAAM,WAAW,GAAG,IAAA,+BAAgB,EAAC;QACnC,OAAO,EAAE,OAAO,CAAC,OAAO;QACxB,YAAY,EAAE,CAAC,IAAI,CAAC,WAAW;KAChC,CAAC,CAAC;IAEH,IAAI,WAAW,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;QAClC,KAAK,CAAC,MAAM,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;QAClC,OAAO,KAAK,CAAC;IACf,CAAC;IAED,IAAI,WAAW,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;QAChC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;IACtC,CAAC;IAED,MAAM,SAAS,GAAG,MAAM,gBAAgB,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;IACnE,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,OAAO,KAAK,CAAC;IACf,CAAC;IAED,MAAM,YAAY,GAAG,KAAK,CAAC,OAAO,EAAE,CAAC;IACrC,YAAY,CAAC,KAAK,CAAC,sBAAsB,SAAS,EAAE,CAAC,CAAC;IACtD,IAAI,CAAC;QACH,MAAM,IAAA,qBAAa,EAAC,SAAS,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;IAC3C,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,YAAY,CAAC,IAAI,CAAC,eAAe,EAAE,CAAC,CAAC,CAAC;QACtC,KAAK,CAAC,MAAM,CACV,sBAAsB,IAAI,CAAC,GAAG,+BAA+B,MAAM,CAAC,KAAK,CAAC,EAAE,CAC7E,CAAC;QACF,OAAO,KAAK,CAAC;IACf,CAAC;IACD,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IAE7B,MAAM,cAAc,GAAG,qBAAqB,EAAE,CAAC;IAC/C,MAAM,aAAa,GAAG,kBAAkB,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;IACjE,MAAM,cAAc,GAAG,kBAAkB,CAAC,OAAO,EAAE,cAAc,CAAC,CAAC;IAEnE,MAAM,SAAS,GAAG,MAAM,kBAAkB,CAAC,IAAI,CAAC,CAAC;IAEjD,IAAI,SAAS,CAAC,SAAS,EAAE,CAAC;QACxB,KAAK,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;QAC3B,OAAO,KAAK,CAAC;IACf,CAAC;IAED,MAAM,SAAS,GAAG,SAAS,CAAC,MAAM,CAAC;IACnC,IAAI,SAAS,EAAE,CAAC;QACd,MAAM,CAAC,MAAM,CAAC,aAAa,EAAE,SAAS,CAAC,UAAU,CAAC,CAAC;IACrD,CAAC;IAED,uEAAuE;IACvE,6EAA6E;IAC7E,6EAA6E;IAC7E,8EAA8E;IAC9E,MAAM,aAAa,GAAG,MAAM,cAAc,CAAC,IAAI,CAAC,CAAC;IACjD,IAAI,aAAa,CAAC,SAAS,EAAE,CAAC;QAC5B,KAAK,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;QAC3B,OAAO,KAAK,CAAC;IACf,CAAC;IAED,MAAM,gBAAgB,GAAG,MAAM,iBAAiB,CAAC,IAAI,CAAC,CAAC;IACvD,IAAI,gBAAgB,CAAC,SAAS,EAAE,CAAC;QAC/B,KAAK,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;QAC3B,OAAO,KAAK,CAAC;IACf,CAAC;IAED,MAAM,SAAS,GAAG,MAAM,iBAAiB,CAAC,IAAI,CAAC,CAAC;IAChD,IAAI,SAAS,CAAC,SAAS,EAAE,CAAC;QACxB,KAAK,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;QAC3B,OAAO,KAAK,CAAC;IACf,CAAC;IACD,MAAM,UAAU,GAAG,SAAS,CAAC,SAAS,CAAC;IACvC,MAAM,CAAC,MAAM,CAAC,aAAa,EAAE,UAAU,CAAC,UAAU,CAAC,CAAC;IAEpD,yEAAyE;IACzE,4EAA4E;IAC5E,4EAA4E;IAC5E,8CAA8C;IAC9C,MAAM,aAAa,GAAG,MAAM,oBAAoB,CAAC,IAAI,CAAC,CAAC;IACvD,IAAI,aAAa,CAAC,SAAS,EAAE,CAAC;QAC5B,KAAK,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;QAC3B,OAAO,KAAK,CAAC;IACf,CAAC;IACD,MAAM,aAAa,GAAG,aAAa,CAAC,SAAS,CAAC;IAC9C,MAAM,CAAC,MAAM,CAAC,aAAa,EAAE,aAAa,CAAC,UAAU,CAAC,CAAC;IAEvD,MAAM,OAAO,GAAG,aAAa,CAAC,SAAS,CAAC;IACxC,MAAM,UAAU,GAAG,gBAAgB,CAAC,SAAS,CAAC;IAE9C,MAAM,CAAC,MAAM,CAAC,aAAa,EAAE,OAAO,CAAC,UAAU,EAAE,UAAU,CAAC,UAAU,CAAC,CAAC;IAExE,MAAM,SAAS,GAAG,YAAY,CAAC,SAAS,EAAE,MAAM,EAAE,aAAa,CAAC,CAAC;IACjE,MAAM,UAAU,GAAG,YAAY,CAAC,SAAS,EAAE,OAAO,EAAE,cAAc,CAAC,CAAC;IAEpE,MAAM,WAAW,GAAG,CAAC,GAAG,SAAS,CAAC,WAAW,EAAE,GAAG,UAAU,CAAC,WAAW,CAAC,CAAC;IAC1E,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC3B,KAAK,CAAC,MAAM,CACV;YACE,+FAA+F,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG;YACxH,sNAAsN;SACvN,CAAC,IAAI,CAAC,IAAI,CAAC,CACb,CAAC;QACF,OAAO,KAAK,CAAC;IACf,CAAC;IAED,2EAA2E;IAC3E,iCAAiC;IACjC,IAAI,CAAC;QACH,IAAA,8BAAgB,EAAC,SAAS,EAAE,OAAO,EAAE,UAAU,CAAC,CAAC;IACnD,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,KAAK,CAAC,MAAM,CACV,qCAAqC,MAAM,CAAC,KAAK,CAAC,IAAI;YACpD,yHAAyH,CAC5H,CAAC;QACF,OAAO,KAAK,CAAC;IACf,CAAC;IAED,IAAI,UAAU,CAAC,YAAY,EAAE,CAAC;QAC5B,KAAK,CAAC,GAAG,CAAC,IAAI,CACZ;YACE,uEAAuE;YACvE,qEAAqE;YACrE,2CAA2C;SAC5C,CAAC,IAAI,CAAC,GAAG,CAAC,CACZ,CAAC;IACJ,CAAC;IAED,IAAI,UAAU,CAAC,QAAQ,KAAK,MAAM,EAAE,CAAC;QACnC,KAAK,CAAC,GAAG,CAAC,IAAI,CACZ;YACE,uEAAuE;YACvE,yEAAyE;YACzE,8BAA8B;SAC/B,CAAC,IAAI,CAAC,GAAG,CAAC,CACZ,CAAC;IACJ,CAAC;IAED,IAAI,SAAS,EAAE,CAAC;QACd,yEAAyE;QACzE,oEAAoE;QACpE,IAAA,6BAAe,EAAC,SAAS,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC;QAE7C,IAAI,CAAC,SAAS,CAAC,oBAAoB,EAAE,CAAC;YACpC,KAAK,CAAC,GAAG,CAAC,IAAI,CACZ;gBACE,mEAAmE;gBACnE,qDAAqD;gBACrD,GAAG,qBAAqB,wBAAwB;aACjD,CAAC,IAAI,CAAC,GAAG,CAAC,CACZ,CAAC;YACF,qBAAqB,CAAC,SAAS,CAAC,CAAC;QACnC,CAAC;IACH,CAAC;SAAM,CAAC;QACN,+DAA+D;QAC/D,wEAAwE;QACxE,qDAAqD;QACrD,MAAM,SAAS,GAAG,qBAAqB,CAAC,SAAS,CAAC,CAAC;QACnD,KAAK,CAAC,IAAI,CACR;YACE,qEAAqE;YACrE,EAAE;YACF,oBAAoB;YACpB,4DAA4D;YAC5D,qEAAqE;YACrE,+CAA+C;YAC/C,KAAK,8BAAgB,sBAAsB;YAC3C,EAAE;YACF,wDAAwD,SAAS,GAAG;SACrE,CAAC,IAAI,CAAC,IAAI,CAAC,EACZ,yBAAyB,CAC1B,CAAC;IACJ,CAAC;IAED,IAAI,YAAY,GAAG,KAAK,CAAC;IACzB,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC;QACrB,CAAC,EAAE,MAAM,EAAE,YAAY,EAAE,GAAG,MAAM,gBAAgB,CAChD,SAAS,EACT,IAAI,CAAC,GAAG,EACR,UAAU,CAAC,eAAe,CAC3B,CAAC,CAAC;IACL,CAAC;IAED,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;QACtB,qEAAqE;QACrE,8DAA8D;QAC9D,oEAAoE;QACpE,uEAAuE;QACvE,sBAAsB;QACtB,MAAM,OAAO,GAAG,IAAA,cAAW,EAAC,SAAS,CAAC,OAAO,CAAC,CAAC;QAC/C,IACE,CAAC,CAAC,MAAM,sBAAsB,CAC5B,SAAS,EACT,IAAI,CAAC,GAAG,EACR,OAAO,EACP,YAAY,CACb,CAAC,EACF,CAAC;YACD,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;IAED,2EAA2E;IAC3E,6EAA6E;IAC7E,IAAI,UAAU,CAAC,OAAO,EAAE,CAAC;QACvB,KAAK,CAAC,GAAG,CAAC,IAAI,CACZ,qDAAqD;YACnD,iCAAmB;YACnB,+DAA+D;YAC/D,iCAAmB;YACnB,sEAAsE;YACtE,mCAAmC,CACtC,CAAC;IACJ,CAAC;IAED,IAAI,aAAa,CAAC,SAAS,EAAE,CAAC;QAC5B,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,GAAG,aAAa,CAAC,SAAS,CAAC;QACzD,KAAK,CAAC,IAAI,CACR;YACE,oBAAoB,IAAI,EAAE;YAC1B,aAAa,IAAI,EAAE;YACnB,aAAa,QAAQ,EAAE;YACvB,EAAE;YACF,mEAAmE;YACnE,qEAAqE;YACrE,yCAAyC;SAC1C,CAAC,IAAI,CAAC,IAAI,CAAC,EACZ,iBAAiB,CAClB,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,KAAK,CACT;QACE,mBAAmB;QACnB,QAAQ,SAAS,EAAE;QACnB,yCAAyC;QACzC,oCAAoC;QACpC,gEAAgE;QAChE,EAAE;QACF,qEAAqE;QACrE,uEAAuE;QACvE,oEAAoE;QACpE,UAAU;QACV,oEAAoE;QACpE,wEAAwE;QACxE,sDAAsD;QACtD,EAAE;QACF,8BAA8B;QAC9B,8BAA8B;QAC9B,mDAAmD;QACnD,EAAE;QACF,oEAAoE;QACpE,iDAAiD;KAClD,CAAC,IAAI,CAAC,IAAI,CAAC,CACb,CAAC;IAEF,OAAO,IAAI,CAAC;AACd,CAAC;AAED,KAAK,UAAU,gBAAgB,CAC7B,KAAyB,EACzB,GAAY;IAEZ,IAAI,SAAS,GAAG,KAAK,CAAC;IAEtB,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,IAAI,GAAG,EAAE,CAAC;YACR,SAAS,GAAG,yBAAkB,CAAC;QACjC,CAAC;aAAM,CAAC;YACN,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,IAAI,CAAC;gBAC9B,OAAO,EAAE,gCAAgC;gBACzC,WAAW,EAAE,yBAAkB;gBAC/B,YAAY,EAAE,yBAAkB;aACjC,CAAC,CAAC;YAEH,IAAI,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;gBAC3B,KAAK,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;gBAC3B,OAAO,SAAS,CAAC;YACnB,CAAC;YAED,SAAS,GAAG,MAAM,IAAI,yBAAkB,CAAC;QAC3C,CAAC;IACH,CAAC;IAED,IAAI,IAAA,oBAAU,EAAC,SAAS,CAAC,EAAE,CAAC;QAC1B,MAAM,KAAK,GAAG,IAAA,kBAAQ,EAAC,SAAS,CAAC,CAAC;QAClC,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,EAAE,CAAC;YACzB,KAAK,CAAC,MAAM,CAAC,GAAG,SAAS,yCAAyC,CAAC,CAAC;YACpE,OAAO,SAAS,CAAC;QACnB,CAAC;QACD,IAAI,IAAA,qBAAW,EAAC,SAAS,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACtC,KAAK,CAAC,MAAM,CAAC,GAAG,SAAS,mCAAmC,CAAC,CAAC;YAC9D,OAAO,SAAS,CAAC;QACnB,CAAC;IACH,CAAC;IAED,OAAO,SAAS,CAAC;AACnB,CAAC;AAED;;;;;GAKG;AACH,SAAS,qBAAqB;IAC5B,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAyB,CAAC;IAClD,KAAK,MAAM,KAAK,IAAI,mBAAQ,EAAE,CAAC;QAC7B,QAAQ,CAAC,GAAG,CACV,KAAK,EACL,KAAK,CAAC,QAAQ,KAAK,iBAAiB,CAAC,CAAC,CAAC,IAAA,wBAAc,GAAE,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CACtE,CAAC;IACJ,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,SAAS,kBAAkB,CACzB,MAAiB,EACjB,QAAoC;IAEpC,MAAM,SAAS,GAA2B,EAAE,CAAC;IAC7C,KAAK,MAAM,KAAK,IAAI,IAAA,2BAAgB,EAAC,MAAM,CAAC,EAAE,CAAC;QAC7C,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAW,CAAC;IACvD,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAOD,SAAS,YAAY,CACnB,SAAiB,EACjB,MAAiB,EACjB,SAAiC;IAEjC,MAAM,KAAK,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC;IAChC,MAAM,WAAW,GAAG,IAAA,gBAAI,EAAC,SAAS,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;IACnD,MAAM,SAAS,GAAG,IAAA,gBAAI,EAAC,SAAS,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;IAE/C,MAAM,QAAQ,GAAG,IAAA,sBAAY,EAAC,WAAW,EAAE,MAAM,CAAC,CAAC;IACnD,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,GAAG,IAAA,4BAAiB,EAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;IACxE,qEAAqE;IACrE,IAAA,uBAAa,EAAC,SAAS,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;IAEnD,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,CAAC;AAClC,CAAC;AAQD;;;;;;;;;;;GAWG;AACH,SAAS,YAAY,CAAC,IAAa;IACjC,OAAO,IAAI,CAAC,GAAG,IAAI,IAAI,CAAC,QAAQ,KAAK,SAAS,CAAC;AACjD,CAAC;AAED;;;;;;;;GAQG;AACH,KAAK,UAAU,cAAc,CAAC,IAAa;IACzC,IAAI,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC;QACvB,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE,IAAA,0CAAuB,EAAC,OAAO,CAAC,EAAE,CAAC;IAC3E,CAAC;IACD,OAAO,aAAa,EAAE,CAAC;AACzB,CAAC;AAKD;;;;;;;GAOG;AACH,KAAK,UAAU,iBAAiB,CAAC,IAAa;IAC5C,IAAI,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC;QACvB,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE,IAAA,wCAA0B,EAAC,KAAK,CAAC,EAAE,CAAC;IAC5E,CAAC;IAED,MAAM,OAAO,GAAG,MAAM,KAAK,CAAC,OAAO,CAAC;QAClC,OAAO,EACL,6EAA6E;QAC/E,YAAY,EAAE,KAAK;KACpB,CAAC,CAAC;IAEH,IAAI,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;QAC5B,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;IAC7B,CAAC;IAED,OAAO;QACL,SAAS,EAAE,KAAK;QAChB,SAAS,EAAE,IAAA,wCAA0B,EAAC,OAAO,KAAK,IAAI,CAAC;KACxD,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,iBAAiB,CAC9B,IAAa;IAEb,IAAI,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC;QACvB,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE,IAAA,gDAA0B,EAAC,OAAO,CAAC,EAAE,CAAC;IAC9E,CAAC;IACD,OAAO,gBAAgB,EAAE,CAAC;AAC5B,CAAC;AAKD;;;;;;;;;GASG;AACH,KAAK,UAAU,oBAAoB,CACjC,IAAa;IAEb,IAAI,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC;QACvB,OAAO;YACL,SAAS,EAAE,KAAK;YAChB,SAAS,EAAE,IAAA,8CAA6B,EAAC,QAAQ,CAAC;SACnD,CAAC;IACJ,CAAC;IACD,OAAO,mBAAmB,EAAE,CAAC;AAC/B,CAAC;AAED,KAAK,UAAU,mBAAmB;IAChC,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,MAAM,CAAC;QAChC,OAAO,EAAE,0CAA0C;QACnD,qEAAqE;QACrE,0EAA0E;QAC1E,OAAO,EAAG,CAAC,QAAQ,EAAE,UAAU,CAAW,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;YACzD,KAAK;YACL,KAAK,EAAE,sCAAqB,CAAC,KAAK,CAAC;SACpC,CAAC,CAAC;KACJ,CAAC,CAAC;IAEH,IAAI,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;QAC3B,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;IAC7B,CAAC;IAED,IAAI,MAAM,KAAK,UAAU,EAAE,CAAC;QAC1B,OAAO;YACL,SAAS,EAAE,KAAK;YAChB,SAAS,EAAE,IAAA,8CAA6B,EAAC,QAAQ,CAAC;SACnD,CAAC;IACJ,CAAC;IAED,uEAAuE;IACvE,6EAA6E;IAC7E,sEAAsE;IACtE,6EAA6E;IAC7E,2DAA2D;IAC3D,KAAK,CAAC,GAAG,CAAC,IAAI,CACZ;QACE,0EAA0E;QAC1E,yEAAyE;KAC1E,CAAC,IAAI,CAAC,GAAG,CAAC,CACZ,CAAC;IAEF,MAAM,OAAO,GAAG,MAAM,KAAK,CAAC,IAAI,CAAC;QAC/B,OAAO,EAAE,0BAA0B;QACnC,YAAY,EAAE,gDAA+B;QAC7C,WAAW,EAAE,gDAA+B;KAC7C,CAAC,CAAC;IAEH,IAAI,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;QAC5B,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;IAC7B,CAAC;IAED,OAAO;QACL,SAAS,EAAE,KAAK;QAChB,SAAS,EAAE,IAAA,8CAA6B,EAAC,UAAU,EAAE;YACnD,qBAAqB,EAAE,MAAM,CAAC,OAAO,CAAC;SACvC,CAAC;KACH,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,aAAa;IAC1B,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,MAAM,CAAC;QAChC,OAAO,EAAE,4CAA4C;QACrD,OAAO,EAAG,CAAC,OAAO,EAAE,IAAI,CAAW,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;YAClD,KAAK;YACL,KAAK,EAAE,iCAAc,CAAC,KAAK,CAAC;SAC7B,CAAC,CAAC;KACJ,CAAC,CAAC;IAEH,IAAI,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;QAC3B,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;IAC7B,CAAC;IACD,IAAI,MAAM,KAAK,OAAO,EAAE,CAAC;QACvB,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE,IAAA,0CAAuB,EAAC,OAAO,CAAC,EAAE,CAAC;IAC3E,CAAC;IAED,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,IAAI,CAAC;QAC9B,OAAO,EAAE,aAAa;QACtB,QAAQ,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,kBAAkB,CAAC;KACrE,CAAC,CAAC;IACH,IAAI,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;QAC3B,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;IAC7B,CAAC;IAED,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,IAAI,CAAC;QAC9B,OAAO,EAAE,QAAQ;QACjB,WAAW,EAAE,yBAAyB;QACtC,QAAQ,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,kBAAkB,CAAC;KACrE,CAAC,CAAC;IACH,IAAI,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;QAC3B,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;IAC7B,CAAC;IAED,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,IAAI,CAAC;QAChC,OAAO,EAAE,8BAA8B;QACvC,WAAW,EAAE,6BAA6B;QAC1C,YAAY,EAAE,EAAE;KACjB,CAAC,CAAC;IACH,IAAI,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC7B,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;IAC7B,CAAC;IAED,MAAM,WAAW,GAAG,MAAM,KAAK,CAAC,IAAI,CAAC;QACnC,OAAO,EAAE,eAAe;QACxB,QAAQ,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,kBAAkB,CAAC;KACrE,CAAC,CAAC;IACH,IAAI,KAAK,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC;QAChC,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;IAC7B,CAAC;IAED,2EAA2E;IAC3E,gDAAgD;IAChD,MAAM,eAAe,GAAG,MAAM,KAAK,CAAC,QAAQ,CAAC;QAC3C,OAAO,EAAE,mBAAmB;KAC7B,CAAC,CAAC;IACH,IAAI,KAAK,CAAC,QAAQ,CAAC,eAAe,CAAC,EAAE,CAAC;QACpC,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;IAC7B,CAAC;IACD,IAAI,CAAC,eAAe,CAAC,IAAI,EAAE,EAAE,CAAC;QAC5B,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,sDAAsD,CAAC,CAAC;QACvE,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE,IAAA,0CAAuB,EAAC,OAAO,CAAC,EAAE,CAAC;IAC3E,CAAC;IAED,OAAO;QACL,SAAS,EAAE,KAAK;QAChB,SAAS,EAAE,IAAA,0CAAuB,EAAC,IAAI,EAAE;YACvC,MAAM;YACN,MAAM;YACN,QAAQ;YACR,WAAW;YACX,eAAe;SAChB,CAAC;KACH,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,gBAAgB;IAC7B,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,MAAM,CAAC;QAChC,OAAO,EAAE,yCAAyC;QAClD,OAAO,EAAG,CAAC,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,CAAW,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;YACvE,KAAK;YACL,KAAK,EAAE,uCAAiB,CAAC,KAAK,CAAC;SAChC,CAAC,CAAC;KACJ,CAAC,CAAC;IAEH,IAAI,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;QAC3B,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;IAC7B,CAAC;IAED,MAAM,QAAQ,GAAG,MAA0B,CAAC;IAC5C,IAAI,QAAQ,KAAK,MAAM,IAAI,QAAQ,KAAK,OAAO,EAAE,CAAC;QAChD,OAAO;YACL,SAAS,EAAE,KAAK;YAChB,SAAS,EAAE,IAAA,gDAA0B,EAAC,QAAQ,CAAC;SAChD,CAAC;IACJ,CAAC;IAED,MAAM,KAAK,GAAG,MAAM,KAAK,CAAC,IAAI,CAAC;QAC7B,OAAO,EAAE,QAAQ,KAAK,KAAK,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,oBAAoB;QACxE,QAAQ,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,WAAW,CAAC;KAC9D,CAAC,CAAC;IACH,IAAI,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QAC1B,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;IAC7B,CAAC;IAED,IAAI,QAAQ,KAAK,KAAK,EAAE,CAAC;QACvB,OAAO;YACL,SAAS,EAAE,KAAK;YAChB,SAAS,EAAE,IAAA,gDAA0B,EAAC,KAAK,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC;SACpE,CAAC;IACJ,CAAC;IAED,4EAA4E;IAC5E,6EAA6E;IAC7E,0EAA0E;IAC1E,4CAA4C;IAC5C,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,QAAQ,CAAC;QAClC,OAAO,EAAE,yBAAyB;QAClC,QAAQ,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,wBAAwB,CAAC;KAC3E,CAAC,CAAC;IACH,IAAI,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;QAC3B,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;IAC7B,CAAC;IAED,OAAO;QACL,SAAS,EAAE,KAAK;QAChB,SAAS,EAAE,IAAA,gDAA0B,EAAC,UAAU,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC;KACrE,CAAC;AACJ,CAAC;AAED;;;;GAIG;AACH,KAAK,UAAU,kBAAkB,CAC/B,IAAa;IAEb,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;QAClB,OAAO,uBAAuB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAChD,CAAC;IACD,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC;QACb,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC;IACjD,CAAC;IACD,OAAO,iBAAiB,EAAE,CAAC;AAC7B,CAAC;AAED;;;;;;;;;;;;;GAaG;AACH,SAAS,uBAAuB,CAC9B,MAAyB;IAEzB,MAAM,MAAM,GAAG,4BAAa,CAAC,MAAM,CAAC,CAAC;IACrC,MAAM,EAAE,YAAY,EAAE,KAAK,EAAE,GAAG,MAAM,CAAC;IACvC,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,EAAE,IAAI,EAAE,CAAC;IAEjD,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,KAAK,CAAC,MAAM,CACV,cAAc,MAAM,cAAc,KAAK,WAAW,YAAY,6FAA6F,CAC5J,CAAC;QACF,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;IAC7B,CAAC;IAED,2EAA2E;IAC3E,8DAA8D;IAC9D,yEAAyE;IACzE,oEAAoE;IACpE,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO;QAC5B,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE;QAC5C,CAAC,CAAC,SAAS,CAAC;IACd,IAAI,MAAM,CAAC,OAAO,IAAI,CAAC,OAAO,EAAE,CAAC;QAC/B,KAAK,CAAC,MAAM,CACV,cAAc,MAAM,eAAe,MAAM,CAAC,OAAO,CAAC,MAAM,0FAA0F,CACnJ,CAAC;QACF,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;IAC7B,CAAC;IAED,OAAO;QACL,SAAS,EAAE,KAAK;QAChB,MAAM,EAAE,IAAA,uCAAwB,EAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC;KAC1D,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,iBAAiB;IAC9B,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,MAAM,CAAC;QAChC,OAAO,EAAE,uCAAuC;QAChD,yEAAyE;QACzE,yEAAyE;QACzE,iCAAiC;QACjC,OAAO,EAAE;YACP,EAAE,KAAK,EAAE,YAAqB,EAAE,KAAK,EAAE,4BAAa,CAAC,UAAU,CAAC,KAAK,EAAE;YACvE,EAAE,KAAK,EAAE,UAAmB,EAAE,KAAK,EAAE,4BAAa,CAAC,QAAQ,CAAC,KAAK,EAAE;YACnE,EAAE,KAAK,EAAE,QAAiB,EAAE,KAAK,EAAE,4BAAa,CAAC,MAAM,CAAC,KAAK,EAAE;YAC/D,EAAE,KAAK,EAAE,WAAoB,EAAE,KAAK,EAAE,4BAAa,CAAC,SAAS,CAAC,KAAK,EAAE;YACrE,EAAE,KAAK,EAAE,MAAe,EAAE,KAAK,EAAE,oCAAoC,EAAE;SACxE;KACF,CAAC,CAAC;IAEH,IAAI,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;QAC3B,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;IAC7B,CAAC;IACD,IAAI,MAAM,KAAK,MAAM,EAAE,CAAC;QACtB,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC;IACjD,CAAC;IAED,MAAM,MAAM,GAAG,4BAAa,CAAC,MAA2B,CAAC,CAAC;IAE1D,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,QAAQ,CAAC;QAClC,OAAO,EAAE,cAAc,MAAM,CAAC,KAAK,UAAU;KAC9C,CAAC,CAAC;IAEH,IAAI,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;QAC3B,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;IAC7B,CAAC;IACD,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC;IACjD,CAAC;IAED,wEAAwE;IACxE,2EAA2E;IAC3E,uEAAuE;IACvE,IAAI,OAA2B,CAAC;IAChC,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;QACnB,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;QACpE,IAAI,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;YAC3B,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;QAC7B,CAAC;QACD,2EAA2E;QAC3E,yEAAyE;QACzE,wEAAwE;QACxE,iEAAiE;QACjE,OAAO,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC;QACxB,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC;QACjD,CAAC;IACH,CAAC;IAED,OAAO;QACL,SAAS,EAAE,KAAK;QAChB,MAAM,EAAE,IAAA,uCAAwB,EAC9B,MAA2B,EAC3B,MAAM,EACN,OAAO,CACR;KACF,CAAC;AACJ,CAAC;AAED;;;;GAIG;AACH,SAAS,qBAAqB,CAAC,SAAiB;IAC9C,MAAM,IAAI,GAAG,IAAA,gBAAI,EAAC,SAAS,EAAE,qBAAqB,CAAC,CAAC;IACpD,IAAA,uBAAa,EAAC,IAAI,EAAE,IAAA,yCAA0B,GAAE,CAAC,CAAC;IAClD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,KAAK,UAAU,aAAa,CAAC,OAAe,EAAE,GAAY;IACxD,IAAI,GAAG,EAAE,CAAC;QACR,OAAO,IAAI,CAAC;IACd,CAAC;IACD,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,OAAO,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC;IAChD,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC;AAC3C,CAAC;AAED;;;;;;GAMG;AACH,KAAK,UAAU,OAAO,CACpB,OAAyC,EACzC,KAAa,EACb,cAAsB,EACtB,IAAyB;IAEzB,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IACrB,IAAI,CAAC;QACH,MAAM,IAAI,EAAE,CAAC;IACf,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,IAAI,CAAC,GAAG,KAAK,YAAY,EAAE,CAAC,CAAC,CAAC;QACtC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;QAC5B,OAAO,KAAK,CAAC;IACf,CAAC;IACD,OAAO,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;IAC7B,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;;GAIG;AACH,KAAK,UAAU,gBAAgB,CAC7B,SAAiB,EACjB,GAAY,EACZ,WAAqB,EAAE;IAEvB,MAAM,OAAO,GAAG,QAAQ,CAAC,QAAQ,CAAC,iCAAmB,CAAC,CAAC;IAEvD,wEAAwE;IACxE,sEAAsE;IACtE,oCAAoC;IACpC,IAAI,MAAM,IAAA,8BAAsB,GAAE,EAAE,CAAC;QACnC,KAAK,CAAC,GAAG,CAAC,IAAI,CACZ;YACE,sEAAsE;YACtE,qEAAqE;YACrE,wEAAwE;YACxE,EAAE;YACF,yEAAyE;YACzE,mEAAmE;YACnE,uEAAuE;YACvE,yBAAyB;YACzB,EAAE;YACF,QAAQ,SAAS,KAAK;YACtB,qCAAqC;YACrC,sEAAsE;YACtE,8CAA8C;YAC9C,oEAAoE;YACpE,uEAAuE;YACvE,uEAAuE;YACvE,6CAA6C;YAC7C,GAAG,CAAC,OAAO;gBACT,CAAC,CAAC;oBACE,qEAAqE;oBACrE,mCAAmC,iCAAmB,QAAQ;iBAC/D;gBACH,CAAC,CAAC,CAAC,6BAA6B,CAAC,CAAC;YACpC,EAAE;YACF,sEAAsE;YACtE,OAAO;gBACL,CAAC,CAAC,+DAA+D;gBACjE,CAAC,CAAC,uCAAuC;YAC3C,EAAE;YACF,qEAAqE;YACrE,sEAAsE;YACtE,kEAAkE;YAClE,gEAAgE;SACjE,CAAC,IAAI,CAAC,IAAI,CAAC,CACb,CAAC;IACJ,CAAC;IAED,MAAM,OAAO,GAAG,MAAM,aAAa,CACjC,8DAA8D,EAC9D,GAAG,CACJ,CAAC;IACF,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC;IAC3B,CAAC;IAED,IAAI,CAAC,CAAC,MAAM,IAAA,yBAAiB,GAAE,CAAC,EAAE,CAAC;QACjC,KAAK,CAAC,GAAG,CAAC,IAAI,CACZ,0GAA0G,CAC3G,CAAC;QACF,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC;IAC3B,CAAC;IAED,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,EAAE,CAAC;IAChC,OAAO,CAAC,KAAK,CAAC,sDAAsD,CAAC,CAAC;IAEtE,IAAI,CAAC;QACH,MAAM,IAAA,2BAAmB,EAAC,EAAE,GAAG,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC,CAAC;QACxD,OAAO,CAAC,IAAI,CAAC,2BAA2B,CAAC,CAAC;IAC5C,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,2EAA2E;QAC3E,0EAA0E;QAC1E,sEAAsE;QACtE,uEAAuE;QACvE,sEAAsE;QACtE,yEAAyE;QACzE,6DAA6D;QAC7D,OAAO,CAAC,IAAI,CAAC,iCAAiC,EAAE,CAAC,CAAC,CAAC;QACnD,KAAK,CAAC,GAAG,CAAC,IAAI,CACZ;YACE,sEAAsE;YACtE,oEAAoE;YACpE,oEAAoE;YACpE,sEAAsE;YACtE,sCAAsC;YACtC,EAAE;YACF,uEAAuE;YACvE,sEAAsE;YACtE,EAAE;YACF,kBAAkB,MAAM,CAAC,KAAK,CAAC,EAAE;SAClC,CAAC,IAAI,CAAC,IAAI,CAAC,CACb,CAAC;QACF,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;IAC1B,CAAC;IAED,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC;AAC3B,CAAC;AAED;;;;;;;;;;;;GAYG;AACH,KAAK,UAAU,sBAAsB,CACnC,SAAiB,EACjB,GAAY,EACZ,GAAsB,EACtB,iBAAiB,GAAG,KAAK;IAEzB,MAAM,OAAO,GAAG,MAAM,aAAa,CACjC,iFAAiF,EACjF,GAAG,CACJ,CAAC;IACF,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,EAAE,CAAC;IAEhC,MAAM,KAAK,GAAiD;QAC1D;YACE,aAAa;YACb,yBAAyB;YACzB,GAAG,EAAE,CAAC,IAAA,2BAAmB,EAAC,EAAE,GAAG,EAAE,SAAS,EAAE,CAAC;SAC9C;QACD;YACE,8BAA8B;YAC9B,0BAA0B;YAC1B,GAAG,EAAE,CAAC,IAAA,4BAAoB,EAAC,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC;SACpD;QACD,GAAG,CAAC,iBAAiB;YACnB,CAAC,CAAC,EAAE;YACJ,CAAC,CAAE;gBACC;oBACE,8BAA8B;oBAC9B,qBAAqB;oBACrB,GAAG,EAAE,CAAC,IAAA,uBAAe,EAAC,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC;iBAC/C;gBACD;oBACE,sBAAsB;oBACtB,kBAAkB;oBAClB,GAAG,EAAE,CAAC,IAAA,oBAAY,EAAC,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC;iBAC5C;aAC+C,CAAC;KACxD,CAAC;IAEF,KAAK,MAAM,CAAC,KAAK,EAAE,cAAc,EAAE,IAAI,CAAC,IAAI,KAAK,EAAE,CAAC;QAClD,IAAI,CAAC,CAAC,MAAM,OAAO,CAAC,OAAO,EAAE,KAAK,EAAE,cAAc,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC;YAC3D,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;IAED,IAAI,iBAAiB,EAAE,CAAC;QACtB,KAAK,CAAC,GAAG,CAAC,IAAI,CACZ;YACE,mEAAmE;YACnE,gEAAgE;YAChE,uEAAuE;YACvE,uDAAuD;YACvD,EAAE;YACF,4CAA4C;YAC5C,6BAA6B;YAC7B,mBAAmB;SACpB,CAAC,IAAI,CAAC,IAAI,CAAC,CACb,CAAC;IACJ,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC"}
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA8FA,kBA2QC;AAzWD,qCAMiB;AACjB,yCAAoD;AAEpD,sDAAwC;AACxC,mCAA8C;AAE9C,iCAAqE;AACrE,mCAAwC;AACxC,+CAAiD;AACjD,+DAK+B;AAC/B,yCAA+C;AAC/C,iDAA4D;AAC5D,+CAAkE;AAClE,iDAAkD;AAClD,iDAKwB;AACxB,yCAKoB;AACpB,+CAIuB;AACvB,uCAA2C;AAC3C,yDAI4B;AAC5B,qDAK0B;AAC1B,mCAWiB;AAEjB,mFAAmF;AACnF,MAAM,qBAAqB,GAAG,cAAc,CAAC;AAE7C,MAAM,SAAS,GAA0D;IACvE,IAAI,EAAE,EAAE,OAAO,EAAE,cAAc,EAAE,KAAK,EAAE,YAAY,EAAE;IACtD,KAAK,EAAE,EAAE,OAAO,EAAE,yBAAyB,EAAE,KAAK,EAAE,uBAAuB,EAAE;CAC9E,CAAC;AAcF;;;;;;GAMG;AACI,KAAK,UAAU,GAAG,CAAC,IAAc;IACtC,MAAM,IAAI,GAAG,IAAA,gBAAS,EAAC,IAAI,CAAC,CAAC;IAE7B,KAAK,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC;IAEhC,2EAA2E;IAC3E,0CAA0C;IAC1C,MAAM,WAAW,GAAG,IAAA,+BAAgB,EAAC;QACnC,OAAO,EAAE,OAAO,CAAC,OAAO;QACxB,YAAY,EAAE,CAAC,IAAI,CAAC,WAAW;KAChC,CAAC,CAAC;IAEH,IAAI,WAAW,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;QAClC,KAAK,CAAC,MAAM,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;QAClC,OAAO,KAAK,CAAC;IACf,CAAC;IAED,IAAI,WAAW,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;QAChC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;IACtC,CAAC;IAED,MAAM,SAAS,GAAG,MAAM,gBAAgB,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;IACnE,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,OAAO,KAAK,CAAC;IACf,CAAC;IAED,MAAM,YAAY,GAAG,KAAK,CAAC,OAAO,EAAE,CAAC;IACrC,YAAY,CAAC,KAAK,CAAC,sBAAsB,SAAS,EAAE,CAAC,CAAC;IACtD,IAAI,CAAC;QACH,MAAM,IAAA,qBAAa,EAAC,SAAS,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;IAC3C,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,YAAY,CAAC,IAAI,CAAC,eAAe,EAAE,CAAC,CAAC,CAAC;QACtC,KAAK,CAAC,MAAM,CACV,sBAAsB,IAAI,CAAC,GAAG,+BAA+B,MAAM,CAAC,KAAK,CAAC,EAAE,CAC7E,CAAC;QACF,OAAO,KAAK,CAAC;IACf,CAAC;IACD,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IAE7B,MAAM,cAAc,GAAG,qBAAqB,EAAE,CAAC;IAC/C,MAAM,aAAa,GAAG,kBAAkB,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;IACjE,MAAM,cAAc,GAAG,kBAAkB,CAAC,OAAO,EAAE,cAAc,CAAC,CAAC;IAEnE,MAAM,SAAS,GAAG,MAAM,kBAAkB,CAAC,IAAI,CAAC,CAAC;IAEjD,IAAI,SAAS,CAAC,SAAS,EAAE,CAAC;QACxB,KAAK,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;QAC3B,OAAO,KAAK,CAAC;IACf,CAAC;IAED,MAAM,SAAS,GAAG,SAAS,CAAC,MAAM,CAAC;IACnC,IAAI,SAAS,EAAE,CAAC;QACd,MAAM,CAAC,MAAM,CAAC,aAAa,EAAE,SAAS,CAAC,UAAU,CAAC,CAAC;IACrD,CAAC;IAED,uEAAuE;IACvE,6EAA6E;IAC7E,6EAA6E;IAC7E,8EAA8E;IAC9E,MAAM,aAAa,GAAG,MAAM,cAAc,CAAC,IAAI,CAAC,CAAC;IACjD,IAAI,aAAa,CAAC,SAAS,EAAE,CAAC;QAC5B,KAAK,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;QAC3B,OAAO,KAAK,CAAC;IACf,CAAC;IAED,MAAM,gBAAgB,GAAG,MAAM,iBAAiB,CAAC,IAAI,CAAC,CAAC;IACvD,IAAI,gBAAgB,CAAC,SAAS,EAAE,CAAC;QAC/B,KAAK,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;QAC3B,OAAO,KAAK,CAAC;IACf,CAAC;IAED,MAAM,SAAS,GAAG,MAAM,iBAAiB,CAAC,IAAI,CAAC,CAAC;IAChD,IAAI,SAAS,CAAC,SAAS,EAAE,CAAC;QACxB,KAAK,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;QAC3B,OAAO,KAAK,CAAC;IACf,CAAC;IACD,MAAM,UAAU,GAAG,SAAS,CAAC,SAAS,CAAC;IACvC,MAAM,CAAC,MAAM,CAAC,aAAa,EAAE,UAAU,CAAC,UAAU,CAAC,CAAC;IAEpD,yEAAyE;IACzE,4EAA4E;IAC5E,4EAA4E;IAC5E,8CAA8C;IAC9C,MAAM,aAAa,GAAG,MAAM,oBAAoB,CAAC,IAAI,CAAC,CAAC;IACvD,IAAI,aAAa,CAAC,SAAS,EAAE,CAAC;QAC5B,KAAK,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;QAC3B,OAAO,KAAK,CAAC;IACf,CAAC;IACD,MAAM,aAAa,GAAG,aAAa,CAAC,SAAS,CAAC;IAC9C,MAAM,CAAC,MAAM,CAAC,aAAa,EAAE,aAAa,CAAC,UAAU,CAAC,CAAC;IAEvD,MAAM,OAAO,GAAG,aAAa,CAAC,SAAS,CAAC;IACxC,MAAM,UAAU,GAAG,gBAAgB,CAAC,SAAS,CAAC;IAE9C,MAAM,CAAC,MAAM,CAAC,aAAa,EAAE,OAAO,CAAC,UAAU,EAAE,UAAU,CAAC,UAAU,CAAC,CAAC;IAExE,MAAM,SAAS,GAAG,YAAY,CAAC,SAAS,EAAE,MAAM,EAAE,aAAa,CAAC,CAAC;IACjE,MAAM,UAAU,GAAG,YAAY,CAAC,SAAS,EAAE,OAAO,EAAE,cAAc,CAAC,CAAC;IAEpE,MAAM,WAAW,GAAG,CAAC,GAAG,SAAS,CAAC,WAAW,EAAE,GAAG,UAAU,CAAC,WAAW,CAAC,CAAC;IAC1E,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC3B,KAAK,CAAC,MAAM,CACV;YACE,+FAA+F,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG;YACxH,sNAAsN;SACvN,CAAC,IAAI,CAAC,IAAI,CAAC,CACb,CAAC;QACF,OAAO,KAAK,CAAC;IACf,CAAC;IAED,4EAA4E;IAC5E,4EAA4E;IAC5E,6EAA6E;IAC7E,gEAAgE;IAChE,MAAM,uBAAuB,CAAC,SAAS,CAAC,CAAC;IAEzC,2EAA2E;IAC3E,iCAAiC;IACjC,IAAI,CAAC;QACH,IAAA,8BAAgB,EAAC,SAAS,EAAE,OAAO,EAAE,UAAU,CAAC,CAAC;IACnD,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,KAAK,CAAC,MAAM,CACV,qCAAqC,MAAM,CAAC,KAAK,CAAC,IAAI;YACpD,yHAAyH,CAC5H,CAAC;QACF,OAAO,KAAK,CAAC;IACf,CAAC;IAED,IAAI,UAAU,CAAC,YAAY,EAAE,CAAC;QAC5B,KAAK,CAAC,GAAG,CAAC,IAAI,CACZ;YACE,uEAAuE;YACvE,qEAAqE;YACrE,2CAA2C;SAC5C,CAAC,IAAI,CAAC,GAAG,CAAC,CACZ,CAAC;IACJ,CAAC;IAED,IAAI,UAAU,CAAC,QAAQ,KAAK,MAAM,EAAE,CAAC;QACnC,KAAK,CAAC,GAAG,CAAC,IAAI,CACZ;YACE,uEAAuE;YACvE,yEAAyE;YACzE,8BAA8B;SAC/B,CAAC,IAAI,CAAC,GAAG,CAAC,CACZ,CAAC;IACJ,CAAC;IAED,IAAI,SAAS,EAAE,CAAC;QACd,yEAAyE;QACzE,oEAAoE;QACpE,IAAA,6BAAe,EAAC,SAAS,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC;QAE7C,IAAI,CAAC,SAAS,CAAC,oBAAoB,EAAE,CAAC;YACpC,KAAK,CAAC,GAAG,CAAC,IAAI,CACZ;gBACE,mEAAmE;gBACnE,qDAAqD;gBACrD,GAAG,qBAAqB,wBAAwB;aACjD,CAAC,IAAI,CAAC,GAAG,CAAC,CACZ,CAAC;YACF,qBAAqB,CAAC,SAAS,CAAC,CAAC;QACnC,CAAC;IACH,CAAC;SAAM,CAAC;QACN,+DAA+D;QAC/D,wEAAwE;QACxE,qDAAqD;QACrD,MAAM,SAAS,GAAG,qBAAqB,CAAC,SAAS,CAAC,CAAC;QACnD,KAAK,CAAC,IAAI,CACR;YACE,qEAAqE;YACrE,EAAE;YACF,oBAAoB;YACpB,4DAA4D;YAC5D,qEAAqE;YACrE,+CAA+C;YAC/C,KAAK,8BAAgB,sBAAsB;YAC3C,EAAE;YACF,wDAAwD,SAAS,GAAG;SACrE,CAAC,IAAI,CAAC,IAAI,CAAC,EACZ,yBAAyB,CAC1B,CAAC;IACJ,CAAC;IAED,IAAI,YAAY,GAAG,KAAK,CAAC;IACzB,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC;QACrB,CAAC,EAAE,MAAM,EAAE,YAAY,EAAE,GAAG,MAAM,gBAAgB,CAChD,SAAS,EACT,IAAI,CAAC,GAAG,EACR,UAAU,CAAC,eAAe,CAC3B,CAAC,CAAC;IACL,CAAC;IAED,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;QACtB,qEAAqE;QACrE,8DAA8D;QAC9D,oEAAoE;QACpE,uEAAuE;QACvE,sBAAsB;QACtB,MAAM,OAAO,GAAG,IAAA,cAAW,EAAC,SAAS,CAAC,OAAO,CAAC,CAAC;QAC/C,IACE,CAAC,CAAC,MAAM,sBAAsB,CAC5B,SAAS,EACT,IAAI,CAAC,GAAG,EACR,OAAO,EACP,YAAY,CACb,CAAC,EACF,CAAC;YACD,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;IAED,2EAA2E;IAC3E,6EAA6E;IAC7E,IAAI,UAAU,CAAC,OAAO,EAAE,CAAC;QACvB,KAAK,CAAC,GAAG,CAAC,IAAI,CACZ,qDAAqD;YACnD,iCAAmB;YACnB,+DAA+D;YAC/D,iCAAmB;YACnB,sEAAsE;YACtE,mCAAmC,CACtC,CAAC;IACJ,CAAC;IAED,IAAI,aAAa,CAAC,SAAS,EAAE,CAAC;QAC5B,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,GAAG,aAAa,CAAC,SAAS,CAAC;QACzD,KAAK,CAAC,IAAI,CACR;YACE,oBAAoB,IAAI,EAAE;YAC1B,aAAa,IAAI,EAAE;YACnB,aAAa,QAAQ,EAAE;YACvB,EAAE;YACF,mEAAmE;YACnE,qEAAqE;YACrE,yCAAyC;SAC1C,CAAC,IAAI,CAAC,IAAI,CAAC,EACZ,iBAAiB,CAClB,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,KAAK,CACT;QACE,mBAAmB;QACnB,QAAQ,SAAS,EAAE;QACnB,yCAAyC;QACzC,oCAAoC;QACpC,gEAAgE;QAChE,EAAE;QACF,qEAAqE;QACrE,uEAAuE;QACvE,oEAAoE;QACpE,UAAU;QACV,oEAAoE;QACpE,wEAAwE;QACxE,sDAAsD;QACtD,EAAE;QACF,8BAA8B;QAC9B,8BAA8B;QAC9B,mDAAmD;QACnD,EAAE;QACF,oEAAoE;QACpE,iDAAiD;KAClD,CAAC,IAAI,CAAC,IAAI,CAAC,CACb,CAAC;IAEF,OAAO,IAAI,CAAC;AACd,CAAC;AAED,KAAK,UAAU,gBAAgB,CAC7B,KAAyB,EACzB,GAAY;IAEZ,IAAI,SAAS,GAAG,KAAK,CAAC;IAEtB,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,IAAI,GAAG,EAAE,CAAC;YACR,SAAS,GAAG,yBAAkB,CAAC;QACjC,CAAC;aAAM,CAAC;YACN,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,IAAI,CAAC;gBAC9B,OAAO,EAAE,gCAAgC;gBACzC,WAAW,EAAE,yBAAkB;gBAC/B,YAAY,EAAE,yBAAkB;aACjC,CAAC,CAAC;YAEH,IAAI,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;gBAC3B,KAAK,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;gBAC3B,OAAO,SAAS,CAAC;YACnB,CAAC;YAED,SAAS,GAAG,MAAM,IAAI,yBAAkB,CAAC;QAC3C,CAAC;IACH,CAAC;IAED,IAAI,IAAA,oBAAU,EAAC,SAAS,CAAC,EAAE,CAAC;QAC1B,MAAM,KAAK,GAAG,IAAA,kBAAQ,EAAC,SAAS,CAAC,CAAC;QAClC,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,EAAE,CAAC;YACzB,KAAK,CAAC,MAAM,CAAC,GAAG,SAAS,yCAAyC,CAAC,CAAC;YACpE,OAAO,SAAS,CAAC;QACnB,CAAC;QACD,IAAI,IAAA,qBAAW,EAAC,SAAS,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACtC,KAAK,CAAC,MAAM,CAAC,GAAG,SAAS,mCAAmC,CAAC,CAAC;YAC9D,OAAO,SAAS,CAAC;QACnB,CAAC;IACH,CAAC;IAED,OAAO,SAAS,CAAC;AACnB,CAAC;AAED;;;;;GAKG;AACH,SAAS,qBAAqB;IAC5B,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAyB,CAAC;IAClD,KAAK,MAAM,KAAK,IAAI,mBAAQ,EAAE,CAAC;QAC7B,QAAQ,CAAC,GAAG,CACV,KAAK,EACL,KAAK,CAAC,QAAQ,KAAK,iBAAiB,CAAC,CAAC,CAAC,IAAA,wBAAc,GAAE,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CACtE,CAAC;IACJ,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,SAAS,kBAAkB,CACzB,MAAiB,EACjB,QAAoC;IAEpC,MAAM,SAAS,GAA2B,EAAE,CAAC;IAC7C,KAAK,MAAM,KAAK,IAAI,IAAA,2BAAgB,EAAC,MAAM,CAAC,EAAE,CAAC;QAC7C,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAW,CAAC;IACvD,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,KAAK,UAAU,uBAAuB,CAAC,SAAiB;IACtD,sEAAsE;IACtE,4EAA4E;IAC5E,4EAA4E;IAC5E,0EAA0E;IAC1E,uEAAuE;IACvE,yEAAyE;IACzE,2EAA2E;IAC3E,UAAU;IACV,MAAM,QAAQ,GAAG,sBAAsB,CAAC,SAAS,CAAC,CAAC;IACnD,IAAI,QAAQ,EAAE,CAAC;QACb,KAAK,CAAC,GAAG,CAAC,IAAI,CACZ,kDAAkD,QAAQ,eAAe,CAC1E,CAAC;QACF,OAAO;IACT,CAAC;IAED,MAAM,OAAO,GAAG,MAAM,IAAA,iCAAyB,EAAC,SAAS,CAAC,CAAC;IAE3D,IAAI,CAAC;QACH,IAAA,uBAAa,EACX,IAAA,gBAAI,EAAC,SAAS,EAAE,MAAM,CAAC,EACvB;YACE,qEAAqE;YACrE,sEAAsE;YACtE,sEAAsE;YACtE,gEAAgE;YAChE,wBAAwB,OAAO,CAAC,IAAI,EAAE;YACtC,EAAE;SACH,CAAC,IAAI,CAAC,IAAI,CAAC,EACZ,EAAE,IAAI,EAAE,KAAK,EAAE,CAChB,CAAC;IACJ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,KAAK,CAAC,GAAG,CAAC,IAAI,CACZ;YACE,mDAAmD,MAAM,CAAC,KAAK,CAAC,EAAE;YAClE,gEAAgE;YAChE,kCAAkC,IAAA,oBAAQ,EAAC,IAAA,mBAAO,EAAC,SAAS,CAAC,CAAC,SAAS;YACvE,+CAA+C;SAChD,CAAC,IAAI,CAAC,IAAI,CAAC,CACb,CAAC;QACF,OAAO;IACT,CAAC;IAED,IAAI,OAAO,CAAC,iBAAiB,EAAE,CAAC;QAC9B,yEAAyE;QACzE,kEAAkE;QAClE,KAAK,CAAC,GAAG,CAAC,IAAI,CACZ;YACE,oEAAoE;YACpE,sCAAsC,OAAO,CAAC,IAAI,oBAAoB;YACtE,sEAAsE;YACtE,8BAA8B;SAC/B,CAAC,IAAI,CAAC,GAAG,CAAC,CACZ,CAAC;QACF,OAAO;IACT,CAAC;IAED,IAAI,OAAO,CAAC,aAAa,EAAE,CAAC;QAC1B,KAAK,CAAC,GAAG,CAAC,IAAI,CACZ;YACE,uDAAuD,IAAA,oBAAQ,EAAC,IAAA,mBAAO,EAAC,SAAS,CAAC,CAAC,GAAG;YACtF,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,OAAO,CAAC,OAAO,IAAI,CAAC,CAAC,CAAC,GAAG;YACpD,EAAE;YACF,oEAAoE;YACpE,+DAA+D;YAC/D,oDAAoD,OAAO,CAAC,IAAI,EAAE;YAClE,uEAAuE;YACvE,qBAAqB;SACtB,CAAC,IAAI,CAAC,GAAG,CAAC,CACZ,CAAC;IACJ,CAAC;AACH,CAAC;AAED;;;;GAIG;AACH,SAAS,sBAAsB,CAAC,SAAiB;IAC/C,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,IAAA,cAAW,EAAC,IAAA,sBAAY,EAAC,IAAA,gBAAI,EAAC,SAAS,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC;QAC1E,MAAM,IAAI,GAAG,MAAM,CAAC,oBAAoB,EAAE,IAAI,EAAE,CAAC;QACjD,OAAO,IAAI,KAAK,SAAS,IAAI,IAAI,KAAK,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC;IAC9D,CAAC;IAAC,MAAM,CAAC;QACP,iDAAiD;QACjD,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC;AAOD,SAAS,YAAY,CACnB,SAAiB,EACjB,MAAiB,EACjB,SAAiC;IAEjC,MAAM,KAAK,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC;IAChC,MAAM,WAAW,GAAG,IAAA,gBAAI,EAAC,SAAS,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;IACnD,MAAM,SAAS,GAAG,IAAA,gBAAI,EAAC,SAAS,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;IAE/C,MAAM,QAAQ,GAAG,IAAA,sBAAY,EAAC,WAAW,EAAE,MAAM,CAAC,CAAC;IACnD,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,GAAG,IAAA,4BAAiB,EAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;IACxE,qEAAqE;IACrE,IAAA,uBAAa,EAAC,SAAS,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;IAEnD,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,CAAC;AAClC,CAAC;AAQD;;;;;;;;;;;GAWG;AACH,SAAS,YAAY,CAAC,IAAa;IACjC,OAAO,IAAI,CAAC,GAAG,IAAI,IAAI,CAAC,QAAQ,KAAK,SAAS,CAAC;AACjD,CAAC;AAED;;;;;;;;GAQG;AACH,KAAK,UAAU,cAAc,CAAC,IAAa;IACzC,IAAI,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC;QACvB,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE,IAAA,0CAAuB,EAAC,OAAO,CAAC,EAAE,CAAC;IAC3E,CAAC;IACD,OAAO,aAAa,EAAE,CAAC;AACzB,CAAC;AAKD;;;;;;;GAOG;AACH,KAAK,UAAU,iBAAiB,CAAC,IAAa;IAC5C,IAAI,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC;QACvB,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE,IAAA,wCAA0B,EAAC,KAAK,CAAC,EAAE,CAAC;IAC5E,CAAC;IAED,MAAM,OAAO,GAAG,MAAM,KAAK,CAAC,OAAO,CAAC;QAClC,OAAO,EACL,6EAA6E;QAC/E,YAAY,EAAE,KAAK;KACpB,CAAC,CAAC;IAEH,IAAI,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;QAC5B,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;IAC7B,CAAC;IAED,OAAO;QACL,SAAS,EAAE,KAAK;QAChB,SAAS,EAAE,IAAA,wCAA0B,EAAC,OAAO,KAAK,IAAI,CAAC;KACxD,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,iBAAiB,CAC9B,IAAa;IAEb,IAAI,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC;QACvB,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE,IAAA,gDAA0B,EAAC,OAAO,CAAC,EAAE,CAAC;IAC9E,CAAC;IACD,OAAO,gBAAgB,EAAE,CAAC;AAC5B,CAAC;AAKD;;;;;;;;;GASG;AACH,KAAK,UAAU,oBAAoB,CACjC,IAAa;IAEb,IAAI,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC;QACvB,OAAO;YACL,SAAS,EAAE,KAAK;YAChB,SAAS,EAAE,IAAA,8CAA6B,EAAC,QAAQ,CAAC;SACnD,CAAC;IACJ,CAAC;IACD,OAAO,mBAAmB,EAAE,CAAC;AAC/B,CAAC;AAED,KAAK,UAAU,mBAAmB;IAChC,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,MAAM,CAAC;QAChC,OAAO,EAAE,0CAA0C;QACnD,qEAAqE;QACrE,0EAA0E;QAC1E,OAAO,EAAG,CAAC,QAAQ,EAAE,UAAU,CAAW,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;YACzD,KAAK;YACL,KAAK,EAAE,sCAAqB,CAAC,KAAK,CAAC;SACpC,CAAC,CAAC;KACJ,CAAC,CAAC;IAEH,IAAI,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;QAC3B,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;IAC7B,CAAC;IAED,IAAI,MAAM,KAAK,UAAU,EAAE,CAAC;QAC1B,OAAO;YACL,SAAS,EAAE,KAAK;YAChB,SAAS,EAAE,IAAA,8CAA6B,EAAC,QAAQ,CAAC;SACnD,CAAC;IACJ,CAAC;IAED,uEAAuE;IACvE,6EAA6E;IAC7E,sEAAsE;IACtE,6EAA6E;IAC7E,2DAA2D;IAC3D,KAAK,CAAC,GAAG,CAAC,IAAI,CACZ;QACE,0EAA0E;QAC1E,yEAAyE;KAC1E,CAAC,IAAI,CAAC,GAAG,CAAC,CACZ,CAAC;IAEF,MAAM,OAAO,GAAG,MAAM,KAAK,CAAC,IAAI,CAAC;QAC/B,OAAO,EAAE,0BAA0B;QACnC,YAAY,EAAE,gDAA+B;QAC7C,WAAW,EAAE,gDAA+B;KAC7C,CAAC,CAAC;IAEH,IAAI,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;QAC5B,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;IAC7B,CAAC;IAED,OAAO;QACL,SAAS,EAAE,KAAK;QAChB,SAAS,EAAE,IAAA,8CAA6B,EAAC,UAAU,EAAE;YACnD,qBAAqB,EAAE,MAAM,CAAC,OAAO,CAAC;SACvC,CAAC;KACH,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,aAAa;IAC1B,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,MAAM,CAAC;QAChC,OAAO,EAAE,4CAA4C;QACrD,OAAO,EAAG,CAAC,OAAO,EAAE,IAAI,CAAW,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;YAClD,KAAK;YACL,KAAK,EAAE,iCAAc,CAAC,KAAK,CAAC;SAC7B,CAAC,CAAC;KACJ,CAAC,CAAC;IAEH,IAAI,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;QAC3B,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;IAC7B,CAAC;IACD,IAAI,MAAM,KAAK,OAAO,EAAE,CAAC;QACvB,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE,IAAA,0CAAuB,EAAC,OAAO,CAAC,EAAE,CAAC;IAC3E,CAAC;IAED,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,IAAI,CAAC;QAC9B,OAAO,EAAE,aAAa;QACtB,QAAQ,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,kBAAkB,CAAC;KACrE,CAAC,CAAC;IACH,IAAI,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;QAC3B,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;IAC7B,CAAC;IAED,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,IAAI,CAAC;QAC9B,OAAO,EAAE,QAAQ;QACjB,WAAW,EAAE,yBAAyB;QACtC,QAAQ,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,kBAAkB,CAAC;KACrE,CAAC,CAAC;IACH,IAAI,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;QAC3B,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;IAC7B,CAAC;IAED,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,IAAI,CAAC;QAChC,OAAO,EAAE,8BAA8B;QACvC,WAAW,EAAE,6BAA6B;QAC1C,YAAY,EAAE,EAAE;KACjB,CAAC,CAAC;IACH,IAAI,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC7B,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;IAC7B,CAAC;IAED,MAAM,WAAW,GAAG,MAAM,KAAK,CAAC,IAAI,CAAC;QACnC,OAAO,EAAE,eAAe;QACxB,QAAQ,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,kBAAkB,CAAC;KACrE,CAAC,CAAC;IACH,IAAI,KAAK,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC;QAChC,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;IAC7B,CAAC;IAED,2EAA2E;IAC3E,gDAAgD;IAChD,MAAM,eAAe,GAAG,MAAM,KAAK,CAAC,QAAQ,CAAC;QAC3C,OAAO,EAAE,mBAAmB;KAC7B,CAAC,CAAC;IACH,IAAI,KAAK,CAAC,QAAQ,CAAC,eAAe,CAAC,EAAE,CAAC;QACpC,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;IAC7B,CAAC;IACD,IAAI,CAAC,eAAe,CAAC,IAAI,EAAE,EAAE,CAAC;QAC5B,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,sDAAsD,CAAC,CAAC;QACvE,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE,IAAA,0CAAuB,EAAC,OAAO,CAAC,EAAE,CAAC;IAC3E,CAAC;IAED,OAAO;QACL,SAAS,EAAE,KAAK;QAChB,SAAS,EAAE,IAAA,0CAAuB,EAAC,IAAI,EAAE;YACvC,MAAM;YACN,MAAM;YACN,QAAQ;YACR,WAAW;YACX,eAAe;SAChB,CAAC;KACH,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,gBAAgB;IAC7B,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,MAAM,CAAC;QAChC,OAAO,EAAE,yCAAyC;QAClD,OAAO,EAAG,CAAC,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,CAAW,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;YACvE,KAAK;YACL,KAAK,EAAE,uCAAiB,CAAC,KAAK,CAAC;SAChC,CAAC,CAAC;KACJ,CAAC,CAAC;IAEH,IAAI,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;QAC3B,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;IAC7B,CAAC;IAED,MAAM,QAAQ,GAAG,MAA0B,CAAC;IAC5C,IAAI,QAAQ,KAAK,MAAM,IAAI,QAAQ,KAAK,OAAO,EAAE,CAAC;QAChD,OAAO;YACL,SAAS,EAAE,KAAK;YAChB,SAAS,EAAE,IAAA,gDAA0B,EAAC,QAAQ,CAAC;SAChD,CAAC;IACJ,CAAC;IAED,MAAM,KAAK,GAAG,MAAM,KAAK,CAAC,IAAI,CAAC;QAC7B,OAAO,EAAE,QAAQ,KAAK,KAAK,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,oBAAoB;QACxE,QAAQ,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,WAAW,CAAC;KAC9D,CAAC,CAAC;IACH,IAAI,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QAC1B,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;IAC7B,CAAC;IAED,IAAI,QAAQ,KAAK,KAAK,EAAE,CAAC;QACvB,OAAO;YACL,SAAS,EAAE,KAAK;YAChB,SAAS,EAAE,IAAA,gDAA0B,EAAC,KAAK,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC;SACpE,CAAC;IACJ,CAAC;IAED,4EAA4E;IAC5E,6EAA6E;IAC7E,0EAA0E;IAC1E,4CAA4C;IAC5C,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,QAAQ,CAAC;QAClC,OAAO,EAAE,yBAAyB;QAClC,QAAQ,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,wBAAwB,CAAC;KAC3E,CAAC,CAAC;IACH,IAAI,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;QAC3B,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;IAC7B,CAAC;IAED,OAAO;QACL,SAAS,EAAE,KAAK;QAChB,SAAS,EAAE,IAAA,gDAA0B,EAAC,UAAU,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC;KACrE,CAAC;AACJ,CAAC;AAED;;;;GAIG;AACH,KAAK,UAAU,kBAAkB,CAC/B,IAAa;IAEb,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;QAClB,OAAO,uBAAuB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAChD,CAAC;IACD,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC;QACb,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC;IACjD,CAAC;IACD,OAAO,iBAAiB,EAAE,CAAC;AAC7B,CAAC;AAED;;;;;;;;;;;;;GAaG;AACH,SAAS,uBAAuB,CAC9B,MAAyB;IAEzB,MAAM,MAAM,GAAG,4BAAa,CAAC,MAAM,CAAC,CAAC;IACrC,MAAM,EAAE,YAAY,EAAE,KAAK,EAAE,GAAG,MAAM,CAAC;IACvC,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,EAAE,IAAI,EAAE,CAAC;IAEjD,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,KAAK,CAAC,MAAM,CACV,cAAc,MAAM,cAAc,KAAK,WAAW,YAAY,6FAA6F,CAC5J,CAAC;QACF,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;IAC7B,CAAC;IAED,2EAA2E;IAC3E,8DAA8D;IAC9D,yEAAyE;IACzE,oEAAoE;IACpE,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO;QAC5B,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE;QAC5C,CAAC,CAAC,SAAS,CAAC;IACd,IAAI,MAAM,CAAC,OAAO,IAAI,CAAC,OAAO,EAAE,CAAC;QAC/B,KAAK,CAAC,MAAM,CACV,cAAc,MAAM,eAAe,MAAM,CAAC,OAAO,CAAC,MAAM,0FAA0F,CACnJ,CAAC;QACF,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;IAC7B,CAAC;IAED,OAAO;QACL,SAAS,EAAE,KAAK;QAChB,MAAM,EAAE,IAAA,uCAAwB,EAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC;KAC1D,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,iBAAiB;IAC9B,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,MAAM,CAAC;QAChC,OAAO,EAAE,uCAAuC;QAChD,yEAAyE;QACzE,yEAAyE;QACzE,iCAAiC;QACjC,OAAO,EAAE;YACP,EAAE,KAAK,EAAE,YAAqB,EAAE,KAAK,EAAE,4BAAa,CAAC,UAAU,CAAC,KAAK,EAAE;YACvE,EAAE,KAAK,EAAE,UAAmB,EAAE,KAAK,EAAE,4BAAa,CAAC,QAAQ,CAAC,KAAK,EAAE;YACnE,EAAE,KAAK,EAAE,QAAiB,EAAE,KAAK,EAAE,4BAAa,CAAC,MAAM,CAAC,KAAK,EAAE;YAC/D,EAAE,KAAK,EAAE,WAAoB,EAAE,KAAK,EAAE,4BAAa,CAAC,SAAS,CAAC,KAAK,EAAE;YACrE,EAAE,KAAK,EAAE,MAAe,EAAE,KAAK,EAAE,oCAAoC,EAAE;SACxE;KACF,CAAC,CAAC;IAEH,IAAI,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;QAC3B,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;IAC7B,CAAC;IACD,IAAI,MAAM,KAAK,MAAM,EAAE,CAAC;QACtB,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC;IACjD,CAAC;IAED,MAAM,MAAM,GAAG,4BAAa,CAAC,MAA2B,CAAC,CAAC;IAE1D,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,QAAQ,CAAC;QAClC,OAAO,EAAE,cAAc,MAAM,CAAC,KAAK,UAAU;KAC9C,CAAC,CAAC;IAEH,IAAI,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;QAC3B,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;IAC7B,CAAC;IACD,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC;IACjD,CAAC;IAED,wEAAwE;IACxE,2EAA2E;IAC3E,uEAAuE;IACvE,IAAI,OAA2B,CAAC;IAChC,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;QACnB,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;QACpE,IAAI,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;YAC3B,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;QAC7B,CAAC;QACD,2EAA2E;QAC3E,yEAAyE;QACzE,wEAAwE;QACxE,iEAAiE;QACjE,OAAO,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC;QACxB,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC;QACjD,CAAC;IACH,CAAC;IAED,OAAO;QACL,SAAS,EAAE,KAAK;QAChB,MAAM,EAAE,IAAA,uCAAwB,EAC9B,MAA2B,EAC3B,MAAM,EACN,OAAO,CACR;KACF,CAAC;AACJ,CAAC;AAED;;;;GAIG;AACH,SAAS,qBAAqB,CAAC,SAAiB;IAC9C,MAAM,IAAI,GAAG,IAAA,gBAAI,EAAC,SAAS,EAAE,qBAAqB,CAAC,CAAC;IACpD,IAAA,uBAAa,EAAC,IAAI,EAAE,IAAA,yCAA0B,GAAE,CAAC,CAAC;IAClD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,KAAK,UAAU,aAAa,CAAC,OAAe,EAAE,GAAY;IACxD,IAAI,GAAG,EAAE,CAAC;QACR,OAAO,IAAI,CAAC;IACd,CAAC;IACD,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,OAAO,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC;IAChD,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC;AAC3C,CAAC;AAED;;;;;;GAMG;AACH,KAAK,UAAU,OAAO,CACpB,OAAyC,EACzC,KAAa,EACb,cAAsB,EACtB,IAAyB;IAEzB,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IACrB,IAAI,CAAC;QACH,MAAM,IAAI,EAAE,CAAC;IACf,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,IAAI,CAAC,GAAG,KAAK,YAAY,EAAE,CAAC,CAAC,CAAC;QACtC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;QAC5B,OAAO,KAAK,CAAC;IACf,CAAC;IACD,OAAO,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;IAC7B,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;;GAIG;AACH,KAAK,UAAU,gBAAgB,CAC7B,SAAiB,EACjB,GAAY,EACZ,WAAqB,EAAE;IAEvB,MAAM,OAAO,GAAG,QAAQ,CAAC,QAAQ,CAAC,iCAAmB,CAAC,CAAC;IAEvD,4EAA4E;IAC5E,uEAAuE;IACvE,oCAAoC;IACpC,EAAE;IACF,sEAAsE;IACtE,0EAA0E;IAC1E,6EAA6E;IAC7E,sEAAsE;IACtE,oEAAoE;IACpE,MAAM,UAAU,GAAG,OAAO;QACxB,CAAC,CAAC,CAAC,GAAG,uBAAe,EAAE,GAAG,2BAAmB,CAAC;QAC9C,CAAC,CAAC,uBAAe,CAAC;IACpB,MAAM,IAAI,GAAG,MAAM,IAAA,0BAAkB,EAAC,UAAU,CAAC,CAAC;IAElD,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACpB,KAAK,CAAC,GAAG,CAAC,IAAI,CACZ;YACE,+DAA+D;YAC/D,EAAE;YACF,GAAG,IAAI,CAAC,GAAG,CACT,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,EAAE,EAAE,CAC9B,KAAK,IAAI,KAAK,OAAO,KAAK,QAAQ,GAAG,CACxC;YACD,EAAE;YACF,sEAAsE;YACtE,wEAAwE;YACxE,uEAAuE;YACvE,uEAAuE;YACvE,mCAAmC;YACnC,EAAE;YACF,0DAA0D;YAC1D,EAAE;YACF,QAAQ,SAAS,KAAK;YACtB,UAAU,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,GAAG,QAAQ,IAAI,IAAI,GAAG,GAAG,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK;YACtF,oEAAoE;YACpE,uEAAuE;YACvE,uEAAuE;YACvE,6CAA6C;YAC7C,GAAG,CAAC,OAAO;gBACT,CAAC,CAAC,CAAC,mCAAmC,iCAAmB,QAAQ,CAAC;gBAClE,CAAC,CAAC,CAAC,6BAA6B,CAAC,CAAC;YACpC,EAAE;YACF,sEAAsE;YACtE,OAAO;gBACL,CAAC,CAAC,+DAA+D;gBACjE,CAAC,CAAC,uCAAuC;YAC3C,EAAE;YACF,qEAAqE;YACrE,sEAAsE;YACtE,kEAAkE;YAClE,gEAAgE;SACjE,CAAC,IAAI,CAAC,IAAI,CAAC,CACb,CAAC;IACJ,CAAC;IAED,MAAM,OAAO,GAAG,MAAM,aAAa,CACjC,8DAA8D,EAC9D,GAAG,CACJ,CAAC;IACF,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC;IAC3B,CAAC;IAED,IAAI,CAAC,CAAC,MAAM,IAAA,yBAAiB,GAAE,CAAC,EAAE,CAAC;QACjC,KAAK,CAAC,GAAG,CAAC,IAAI,CACZ,0GAA0G,CAC3G,CAAC;QACF,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC;IAC3B,CAAC;IAED,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,EAAE,CAAC;IAChC,OAAO,CAAC,KAAK,CAAC,sDAAsD,CAAC,CAAC;IAEtE,IAAI,CAAC;QACH,MAAM,IAAA,2BAAmB,EAAC,EAAE,GAAG,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC,CAAC;QACxD,OAAO,CAAC,IAAI,CAAC,2BAA2B,CAAC,CAAC;IAC5C,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,2EAA2E;QAC3E,0EAA0E;QAC1E,sEAAsE;QACtE,uEAAuE;QACvE,sEAAsE;QACtE,yEAAyE;QACzE,6DAA6D;QAC7D,OAAO,CAAC,IAAI,CAAC,iCAAiC,EAAE,CAAC,CAAC,CAAC;QACnD,KAAK,CAAC,GAAG,CAAC,IAAI,CACZ;YACE,sEAAsE;YACtE,oEAAoE;YACpE,mEAAmE;YACnE,2DAA2D;YAC3D,EAAE;YACF,qEAAqE;YACrE,gCAAgC;YAChC,EAAE;YACF,kBAAkB,MAAM,CAAC,KAAK,CAAC,EAAE;SAClC,CAAC,IAAI,CAAC,IAAI,CAAC,CACb,CAAC;QACF,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;IAC1B,CAAC;IAED,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC;AAC3B,CAAC;AAED;;;;;;;;;;;;GAYG;AACH,KAAK,UAAU,sBAAsB,CACnC,SAAiB,EACjB,GAAY,EACZ,GAAsB,EACtB,iBAAiB,GAAG,KAAK;IAEzB,MAAM,OAAO,GAAG,MAAM,aAAa,CACjC,iFAAiF,EACjF,GAAG,CACJ,CAAC;IACF,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,EAAE,CAAC;IAEhC,MAAM,KAAK,GAAiD;QAC1D;YACE,aAAa;YACb,yBAAyB;YACzB,GAAG,EAAE,CAAC,IAAA,2BAAmB,EAAC,EAAE,GAAG,EAAE,SAAS,EAAE,CAAC;SAC9C;QACD;YACE,8BAA8B;YAC9B,0BAA0B;YAC1B,GAAG,EAAE,CAAC,IAAA,4BAAoB,EAAC,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC;SACpD;QACD,GAAG,CAAC,iBAAiB;YACnB,CAAC,CAAC,EAAE;YACJ,CAAC,CAAE;gBACC;oBACE,8BAA8B;oBAC9B,qBAAqB;oBACrB,GAAG,EAAE,CAAC,IAAA,uBAAe,EAAC,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC;iBAC/C;gBACD;oBACE,sBAAsB;oBACtB,kBAAkB;oBAClB,GAAG,EAAE,CAAC,IAAA,oBAAY,EAAC,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC;iBAC5C;aAC+C,CAAC;KACxD,CAAC;IAEF,KAAK,MAAM,CAAC,KAAK,EAAE,cAAc,EAAE,IAAI,CAAC,IAAI,KAAK,EAAE,CAAC;QAClD,IAAI,CAAC,CAAC,MAAM,OAAO,CAAC,OAAO,EAAE,KAAK,EAAE,cAAc,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC;YAC3D,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;IAED,IAAI,iBAAiB,EAAE,CAAC;QACtB,KAAK,CAAC,GAAG,CAAC,IAAI,CACZ;YACE,mEAAmE;YACnE,gEAAgE;YAChE,uEAAuE;YACvE,uDAAuD;YACvD,EAAE;YACF,4CAA4C;YAC5C,6BAA6B;YAC7B,mBAAmB;SACpB,CAAC,IAAI,CAAC,IAAI,CAAC,CACb,CAAC;IACJ,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC"}
|
package/dist/node-version.d.ts
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Whether this Node can be used to create a Ragen installation.
|
|
3
3
|
*
|
|
4
|
-
* The distinction that matters: **the installation** needs Node
|
|
5
|
-
* CLI. The CLI itself runs happily on older majors — it was published and
|
|
4
|
+
* The distinction that matters: **the installation** needs a recent Node, not
|
|
5
|
+
* this CLI. The CLI itself runs happily on older majors — it was published and
|
|
6
6
|
* verified on Node 22 by accident — so refusing on the grounds that "this
|
|
7
7
|
* tool requires Node 24" would be both untrue and unhelpfully broad.
|
|
8
8
|
*
|
|
@@ -18,17 +18,52 @@
|
|
|
18
18
|
*
|
|
19
19
|
* - running the setup steps → refuse, before anything is cloned
|
|
20
20
|
* - `--skip-install` → proceed, because nothing runs here; warn instead,
|
|
21
|
-
* since the scaffolded app still needs Node
|
|
21
|
+
* since the scaffolded app still needs a supported Node to start
|
|
22
22
|
*
|
|
23
23
|
* `--yes` deliberately does not bypass it. That flag means "accept the
|
|
24
24
|
* defaults", not "ignore a requirement".
|
|
25
25
|
*/
|
|
26
26
|
/**
|
|
27
|
-
*
|
|
28
|
-
*
|
|
29
|
-
*
|
|
27
|
+
* What the install actually runs on — a set of ranges, not a floor, and both
|
|
28
|
+
* the patch digit and the gap are load-bearing.
|
|
29
|
+
*
|
|
30
|
+
* A bare major used to be enough, and stopped being enough when a transitive
|
|
31
|
+
* dependency narrowed its own range mid-line. `jsdom@30.0.1` requires
|
|
32
|
+
* `^22.22.2 || ^24.15.0 || >=26.0.0`, and the repository sets
|
|
33
|
+
* `engine-strict=true`, so npm *stops* on a mismatch rather than warning.
|
|
34
|
+
* Two consequences, and only the first was obvious:
|
|
35
|
+
*
|
|
36
|
+
* - **Node 24.0–24.14 fail `npm install`.** The old `>=24` check waved them
|
|
37
|
+
* through, so someone on 24.13 got a cloned tree, a written `.env.local`, a
|
|
38
|
+
* running docker compose, and then EBADENGINE.
|
|
39
|
+
* - **Node 25 fails too, and a floor cannot say that.** `>=24.15.0` accepts
|
|
40
|
+
* 25.x, which that range skips entirely. Odd-numbered Node lines are never
|
|
41
|
+
* LTS and libraries routinely omit them, so the gap is normal rather than an
|
|
42
|
+
* oversight — and a single minimum version cannot express it.
|
|
43
|
+
*
|
|
44
|
+
* Node 22 is inside jsdom's range and deliberately *not* here: the repository
|
|
45
|
+
* has required 24 since long before this, and widening support is a decision,
|
|
46
|
+
* not a consequence of a dependency's range.
|
|
47
|
+
*
|
|
48
|
+
* Kept in step with `engines.node` across the root and every workspace by
|
|
49
|
+
* `tests/architecture/the-node-floor-is-one-number.test.ts`, with this
|
|
50
|
+
* package's own `engines` by `src/__tests__/node-version.test.ts`, and proved
|
|
51
|
+
* against real Nodes by `.github/workflows/installer.yml`, which pins 24.14
|
|
52
|
+
* (must refuse), 25 (must refuse) and 24.15 (must scaffold).
|
|
53
|
+
*/
|
|
54
|
+
export declare const SUPPORTED_NODE_RANGES: readonly [{
|
|
55
|
+
readonly from: "24.15.0";
|
|
56
|
+
readonly belowMajor: 25;
|
|
57
|
+
}, {
|
|
58
|
+
readonly from: "26.0.0";
|
|
59
|
+
}];
|
|
60
|
+
/** The oldest Node the install accepts — the first range's start. */
|
|
61
|
+
export declare const REQUIRED_NODE_VERSION: "24.15.0";
|
|
62
|
+
/**
|
|
63
|
+
* The same thing in the notation `engines.node` uses, so one constant can be
|
|
64
|
+
* compared against twenty-one manifests instead of being retyped into them.
|
|
30
65
|
*/
|
|
31
|
-
export declare const
|
|
66
|
+
export declare const SUPPORTED_NODE_ENGINES_RANGE: string;
|
|
32
67
|
export type NodeVersionVerdict = {
|
|
33
68
|
kind: 'ok';
|
|
34
69
|
} | {
|
|
@@ -39,16 +74,41 @@ export type NodeVersionVerdict = {
|
|
|
39
74
|
message: string;
|
|
40
75
|
};
|
|
41
76
|
export interface NodeVersionCheck {
|
|
42
|
-
/** As `process.version` gives it, e.g. `
|
|
77
|
+
/** As `process.version` gives it, e.g. `v24.13.0`. */
|
|
43
78
|
version: string;
|
|
44
79
|
/** False when `--skip-install` means the wizard runs nothing itself. */
|
|
45
80
|
willRunSetup: boolean;
|
|
46
81
|
}
|
|
82
|
+
export interface NodeVersion {
|
|
83
|
+
major: number;
|
|
84
|
+
minor: number;
|
|
85
|
+
patch: number;
|
|
86
|
+
/**
|
|
87
|
+
* The `-nightly`/`-rc.1` tail, without its dash. Kept because dropping it
|
|
88
|
+
* would make a prerelease compare equal to the release it precedes, and
|
|
89
|
+
* semver puts it *below*: `24.15.0-nightly` does not satisfy `^24.15.0`.
|
|
90
|
+
* npm checks engines with `includePrerelease: true`, which changes which
|
|
91
|
+
* prereleases pass but not that one — so ignoring the tail would accept a
|
|
92
|
+
* Node whose `npm install` fails, which is this whole exercise again.
|
|
93
|
+
*/
|
|
94
|
+
prerelease?: string;
|
|
95
|
+
}
|
|
47
96
|
/**
|
|
48
97
|
* Returns undefined for anything that is not a recognisable Node version, so
|
|
49
|
-
* an unexpected format cannot be read as
|
|
50
|
-
* would have worked.
|
|
98
|
+
* an unexpected format cannot be read as unsupported and block an install that
|
|
99
|
+
* would have worked. A version missing its patch digit counts as unreadable
|
|
100
|
+
* for the same reason: guessing `.0` would refuse a release that may be fine.
|
|
101
|
+
*/
|
|
102
|
+
export declare function parseNodeVersion(version: string): NodeVersion | undefined;
|
|
103
|
+
export declare function formatNodeVersion({ major, minor, patch, prerelease, }: NodeVersion): string;
|
|
104
|
+
/**
|
|
105
|
+
* Whether a version falls inside any supported range.
|
|
106
|
+
*
|
|
107
|
+
* A range with `belowMajor` is closed at that major (`^24.15.0`); one without
|
|
108
|
+
* is open above (`>=26.0.0`). An unparseable range entry cannot happen — the
|
|
109
|
+
* table is a literal in this file — but it fails *open* if it ever does,
|
|
110
|
+
* matching `parseNodeVersion`.
|
|
51
111
|
*/
|
|
52
|
-
export declare function
|
|
112
|
+
export declare function isSupportedNodeVersion(version: NodeVersion): boolean;
|
|
53
113
|
export declare function checkNodeVersion({ version, willRunSetup, }: NodeVersionCheck): NodeVersionVerdict;
|
|
54
114
|
//# sourceMappingURL=node-version.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"node-version.d.ts","sourceRoot":"","sources":["../src/node-version.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAEH
|
|
1
|
+
{"version":3,"file":"node-version.d.ts","sourceRoot":"","sources":["../src/node-version.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAEH;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,eAAO,MAAM,qBAAqB;;;;;EAGxB,CAAC;AAEX,qEAAqE;AACrE,eAAO,MAAM,qBAAqB,WAAgC,CAAC;AAEnE;;;GAGG;AACH,eAAO,MAAM,4BAA4B,QAE3B,CAAC;AAWf,MAAM,MAAM,kBAAkB,GAC1B;IAAE,IAAI,EAAE,IAAI,CAAA;CAAE,GACd;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GACjC;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC;AAExC,MAAM,WAAW,gBAAgB;IAC/B,sDAAsD;IACtD,OAAO,EAAE,MAAM,CAAC;IAChB,wEAAwE;IACxE,YAAY,EAAE,OAAO,CAAC;CACvB;AAED,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd;;;;;;;OAOG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,WAAW,GAAG,SAAS,CAazE;AAED,wBAAgB,iBAAiB,CAAC,EAChC,KAAK,EACL,KAAK,EACL,KAAK,EACL,UAAU,GACX,EAAE,WAAW,GAAG,MAAM,CAGtB;AAqBD;;;;;;;GAOG;AACH,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAWpE;AA6CD,wBAAgB,gBAAgB,CAAC,EAC/B,OAAO,EACP,YAAY,GACb,EAAE,gBAAgB,GAAG,kBAAkB,CA4CvC"}
|
package/dist/node-version.js
CHANGED
|
@@ -2,8 +2,8 @@
|
|
|
2
2
|
/**
|
|
3
3
|
* Whether this Node can be used to create a Ragen installation.
|
|
4
4
|
*
|
|
5
|
-
* The distinction that matters: **the installation** needs Node
|
|
6
|
-
* CLI. The CLI itself runs happily on older majors — it was published and
|
|
5
|
+
* The distinction that matters: **the installation** needs a recent Node, not
|
|
6
|
+
* this CLI. The CLI itself runs happily on older majors — it was published and
|
|
7
7
|
* verified on Node 22 by accident — so refusing on the grounds that "this
|
|
8
8
|
* tool requires Node 24" would be both untrue and unhelpfully broad.
|
|
9
9
|
*
|
|
@@ -19,43 +19,172 @@
|
|
|
19
19
|
*
|
|
20
20
|
* - running the setup steps → refuse, before anything is cloned
|
|
21
21
|
* - `--skip-install` → proceed, because nothing runs here; warn instead,
|
|
22
|
-
* since the scaffolded app still needs Node
|
|
22
|
+
* since the scaffolded app still needs a supported Node to start
|
|
23
23
|
*
|
|
24
24
|
* `--yes` deliberately does not bypass it. That flag means "accept the
|
|
25
25
|
* defaults", not "ignore a requirement".
|
|
26
26
|
*/
|
|
27
27
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
28
|
-
exports.
|
|
29
|
-
exports.
|
|
28
|
+
exports.SUPPORTED_NODE_ENGINES_RANGE = exports.REQUIRED_NODE_VERSION = exports.SUPPORTED_NODE_RANGES = void 0;
|
|
29
|
+
exports.parseNodeVersion = parseNodeVersion;
|
|
30
|
+
exports.formatNodeVersion = formatNodeVersion;
|
|
31
|
+
exports.isSupportedNodeVersion = isSupportedNodeVersion;
|
|
30
32
|
exports.checkNodeVersion = checkNodeVersion;
|
|
31
33
|
/**
|
|
32
|
-
*
|
|
33
|
-
*
|
|
34
|
-
*
|
|
34
|
+
* What the install actually runs on — a set of ranges, not a floor, and both
|
|
35
|
+
* the patch digit and the gap are load-bearing.
|
|
36
|
+
*
|
|
37
|
+
* A bare major used to be enough, and stopped being enough when a transitive
|
|
38
|
+
* dependency narrowed its own range mid-line. `jsdom@30.0.1` requires
|
|
39
|
+
* `^22.22.2 || ^24.15.0 || >=26.0.0`, and the repository sets
|
|
40
|
+
* `engine-strict=true`, so npm *stops* on a mismatch rather than warning.
|
|
41
|
+
* Two consequences, and only the first was obvious:
|
|
42
|
+
*
|
|
43
|
+
* - **Node 24.0–24.14 fail `npm install`.** The old `>=24` check waved them
|
|
44
|
+
* through, so someone on 24.13 got a cloned tree, a written `.env.local`, a
|
|
45
|
+
* running docker compose, and then EBADENGINE.
|
|
46
|
+
* - **Node 25 fails too, and a floor cannot say that.** `>=24.15.0` accepts
|
|
47
|
+
* 25.x, which that range skips entirely. Odd-numbered Node lines are never
|
|
48
|
+
* LTS and libraries routinely omit them, so the gap is normal rather than an
|
|
49
|
+
* oversight — and a single minimum version cannot express it.
|
|
50
|
+
*
|
|
51
|
+
* Node 22 is inside jsdom's range and deliberately *not* here: the repository
|
|
52
|
+
* has required 24 since long before this, and widening support is a decision,
|
|
53
|
+
* not a consequence of a dependency's range.
|
|
54
|
+
*
|
|
55
|
+
* Kept in step with `engines.node` across the root and every workspace by
|
|
56
|
+
* `tests/architecture/the-node-floor-is-one-number.test.ts`, with this
|
|
57
|
+
* package's own `engines` by `src/__tests__/node-version.test.ts`, and proved
|
|
58
|
+
* against real Nodes by `.github/workflows/installer.yml`, which pins 24.14
|
|
59
|
+
* (must refuse), 25 (must refuse) and 24.15 (must scaffold).
|
|
60
|
+
*/
|
|
61
|
+
exports.SUPPORTED_NODE_RANGES = [
|
|
62
|
+
{ from: '24.15.0', belowMajor: 25 },
|
|
63
|
+
{ from: '26.0.0' },
|
|
64
|
+
];
|
|
65
|
+
/** The oldest Node the install accepts — the first range's start. */
|
|
66
|
+
exports.REQUIRED_NODE_VERSION = exports.SUPPORTED_NODE_RANGES[0].from;
|
|
67
|
+
/**
|
|
68
|
+
* The same thing in the notation `engines.node` uses, so one constant can be
|
|
69
|
+
* compared against twenty-one manifests instead of being retyped into them.
|
|
70
|
+
*/
|
|
71
|
+
exports.SUPPORTED_NODE_ENGINES_RANGE = exports.SUPPORTED_NODE_RANGES.map((range) => ('belowMajor' in range ? `^${range.from}` : `>=${range.from}`)).join(' || ');
|
|
72
|
+
/**
|
|
73
|
+
* Why the range is shaped the way it is. Named in the refusal, because
|
|
74
|
+
* "you need 24.15" read by someone who *has* Node 24 is a riddle, not an
|
|
75
|
+
* instruction — and "you need 24.15 or newer" read by someone on Node 25 is
|
|
76
|
+
* simply wrong.
|
|
35
77
|
*/
|
|
36
|
-
|
|
78
|
+
const REQUIRED_NODE_REASON = 'jsdom, a transitive dependency, requires ^22.22.2 || ^24.15.0 || >=26.0.0, and this repository sets engine-strict=true — so npm stops rather than warns.';
|
|
37
79
|
/**
|
|
38
80
|
* Returns undefined for anything that is not a recognisable Node version, so
|
|
39
|
-
* an unexpected format cannot be read as
|
|
40
|
-
* would have worked.
|
|
81
|
+
* an unexpected format cannot be read as unsupported and block an install that
|
|
82
|
+
* would have worked. A version missing its patch digit counts as unreadable
|
|
83
|
+
* for the same reason: guessing `.0` would refuse a release that may be fine.
|
|
41
84
|
*/
|
|
42
|
-
function
|
|
43
|
-
const match = /^v?(\d+)
|
|
85
|
+
function parseNodeVersion(version) {
|
|
86
|
+
const match = /^v?(\d+)\.(\d+)\.(\d+)(?:-([0-9A-Za-z.-]+))?/.exec(version.trim());
|
|
44
87
|
if (!match) {
|
|
45
88
|
return undefined;
|
|
46
89
|
}
|
|
47
|
-
return
|
|
90
|
+
return {
|
|
91
|
+
major: Number(match[1]),
|
|
92
|
+
minor: Number(match[2]),
|
|
93
|
+
patch: Number(match[3]),
|
|
94
|
+
...(match[4] === undefined ? {} : { prerelease: match[4] }),
|
|
95
|
+
};
|
|
96
|
+
}
|
|
97
|
+
function formatNodeVersion({ major, minor, patch, prerelease, }) {
|
|
98
|
+
const base = `${major}.${minor}.${patch}`;
|
|
99
|
+
return prerelease === undefined ? base : `${base}-${prerelease}`;
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* Negative when `a` is older than `b`, positive when newer, 0 when equal.
|
|
103
|
+
*
|
|
104
|
+
* Prereleases follow semver: `24.15.0-rc.1` is *older* than `24.15.0`, which
|
|
105
|
+
* is the rule that matters here — it is what makes a prerelease of a range's
|
|
106
|
+
* starting version fall outside that range, exactly as npm finds it.
|
|
107
|
+
* Prereleases are not ordered against each other, because nothing here needs
|
|
108
|
+
* it: a version either reaches a range's start or it does not.
|
|
109
|
+
*/
|
|
110
|
+
function compareNodeVersions(a, b) {
|
|
111
|
+
const numeric = a.major - b.major || a.minor - b.minor || a.patch - b.patch;
|
|
112
|
+
if (numeric !== 0) {
|
|
113
|
+
return numeric;
|
|
114
|
+
}
|
|
115
|
+
const aPre = a.prerelease === undefined ? 0 : -1;
|
|
116
|
+
const bPre = b.prerelease === undefined ? 0 : -1;
|
|
117
|
+
return aPre - bPre;
|
|
118
|
+
}
|
|
119
|
+
/**
|
|
120
|
+
* Whether a version falls inside any supported range.
|
|
121
|
+
*
|
|
122
|
+
* A range with `belowMajor` is closed at that major (`^24.15.0`); one without
|
|
123
|
+
* is open above (`>=26.0.0`). An unparseable range entry cannot happen — the
|
|
124
|
+
* table is a literal in this file — but it fails *open* if it ever does,
|
|
125
|
+
* matching `parseNodeVersion`.
|
|
126
|
+
*/
|
|
127
|
+
function isSupportedNodeVersion(version) {
|
|
128
|
+
return exports.SUPPORTED_NODE_RANGES.some((range) => {
|
|
129
|
+
const from = parseNodeVersion(range.from);
|
|
130
|
+
if (!from) {
|
|
131
|
+
return true;
|
|
132
|
+
}
|
|
133
|
+
if (compareNodeVersions(version, from) < 0) {
|
|
134
|
+
return false;
|
|
135
|
+
}
|
|
136
|
+
return !('belowMajor' in range) || version.major < range.belowMajor;
|
|
137
|
+
});
|
|
138
|
+
}
|
|
139
|
+
/**
|
|
140
|
+
* One deliberate difference from npm, in the safe direction.
|
|
141
|
+
*
|
|
142
|
+
* npm passes `includePrerelease: true`, under which `25.0.0-rc.1` satisfies
|
|
143
|
+
* `^24.15.0` — it sorts below the `<25.0.0` bound. The check here refuses it,
|
|
144
|
+
* because the *released* 25 line is unsupported and scaffolding onto a release
|
|
145
|
+
* candidate of it would work today and stop working at 25.0.0 final. The cases
|
|
146
|
+
* that matter agree with npm exactly: a prerelease of a range's own starting
|
|
147
|
+
* version (`24.15.0-nightly`, `26.0.0-rc.1`) is refused by both, and one above
|
|
148
|
+
* it (`24.16.0-rc.1`, `27.0.0-nightly`) is accepted by both.
|
|
149
|
+
*/
|
|
150
|
+
/**
|
|
151
|
+
* A line the caller can paste. `nvm install`, not `nvm use`: someone in this
|
|
152
|
+
* position usually has *some* Node of that major already, and `nvm use 24`
|
|
153
|
+
* would select exactly the one that does not work.
|
|
154
|
+
*/
|
|
155
|
+
const REMEDY = ` nvm install ${exports.REQUIRED_NODE_VERSION} # or fnm, volta, asdf, …`;
|
|
156
|
+
/**
|
|
157
|
+
* Whether this Node is below every supported range, or inside a gap between
|
|
158
|
+
* two of them. The distinction is the whole message: "too old" is actionable
|
|
159
|
+
* and "unsupported release line" is a different instruction.
|
|
160
|
+
*/
|
|
161
|
+
function describeUnsupported(version) {
|
|
162
|
+
const floor = parseNodeVersion(exports.REQUIRED_NODE_VERSION);
|
|
163
|
+
const tooOld = floor ? compareNodeVersions(version, floor) < 0 : false;
|
|
164
|
+
const current = formatNodeVersion(version);
|
|
165
|
+
// A prerelease reads as a supported version to the eye, so the message has
|
|
166
|
+
// to say which part of it is the problem — otherwise the number in the
|
|
167
|
+
// refusal looks identical to the number in the requirement.
|
|
168
|
+
if (version.prerelease !== undefined) {
|
|
169
|
+
return `Node ${current} is a prerelease, and a Ragen installation needs ${exports.SUPPORTED_NODE_ENGINES_RANGE}. semver sorts a prerelease below the release it precedes, so ${current} does not satisfy that range and npm will refuse it — use a released Node.`;
|
|
170
|
+
}
|
|
171
|
+
if (tooOld) {
|
|
172
|
+
return `A Ragen installation needs Node ${exports.SUPPORTED_NODE_ENGINES_RANGE}, and this is Node ${current}.`;
|
|
173
|
+
}
|
|
174
|
+
return `Node ${current} is newer than the minimum and still not supported: a Ragen installation needs ${exports.SUPPORTED_NODE_ENGINES_RANGE}, which skips the ${version.major}.x line. Odd-numbered Node lines never become LTS, and libraries routinely omit them.`;
|
|
48
175
|
}
|
|
49
176
|
function checkNodeVersion({ version, willRunSetup, }) {
|
|
50
|
-
const
|
|
51
|
-
if (
|
|
177
|
+
const current = parseNodeVersion(version);
|
|
178
|
+
if (current === undefined || isSupportedNodeVersion(current)) {
|
|
52
179
|
return { kind: 'ok' };
|
|
53
180
|
}
|
|
181
|
+
const headline = describeUnsupported(current);
|
|
54
182
|
if (!willRunSetup) {
|
|
55
183
|
return {
|
|
56
184
|
kind: 'warn',
|
|
57
185
|
message: [
|
|
58
|
-
|
|
186
|
+
headline,
|
|
187
|
+
REQUIRED_NODE_REASON,
|
|
59
188
|
'Nothing is being installed here, so the files will be written anyway —',
|
|
60
189
|
'but switch before running npm install or the app in the new directory.',
|
|
61
190
|
].join(' '),
|
|
@@ -64,14 +193,21 @@ function checkNodeVersion({ version, willRunSetup, }) {
|
|
|
64
193
|
return {
|
|
65
194
|
kind: 'refuse',
|
|
66
195
|
message: [
|
|
67
|
-
|
|
196
|
+
headline,
|
|
197
|
+
'',
|
|
198
|
+
// The reason comes second and in full, because the interesting cases are
|
|
199
|
+
// someone who already has the right major and someone on a *newer* Node,
|
|
200
|
+
// both of whom read the line above as nonsense without it.
|
|
201
|
+
`Why: ${REQUIRED_NODE_REASON}`,
|
|
202
|
+
'On this Node, npm install fails with EBADENGINE partway through the',
|
|
203
|
+
'setup below.',
|
|
68
204
|
'',
|
|
69
205
|
'Stopping before anything is written: the setup this runs for you —',
|
|
70
206
|
'npm install, prisma generate, migrate and seed — would run under this',
|
|
71
207
|
'Node and leave a tree that fails later, somewhere that does not point',
|
|
72
208
|
'back here.',
|
|
73
209
|
'',
|
|
74
|
-
|
|
210
|
+
REMEDY,
|
|
75
211
|
'',
|
|
76
212
|
'Or pass --skip-install to write the files now and run the setup',
|
|
77
213
|
'yourself on a supported Node.',
|
package/dist/node-version.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"node-version.js","sourceRoot":"","sources":["../src/node-version.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;;;
|
|
1
|
+
{"version":3,"file":"node-version.js","sourceRoot":"","sources":["../src/node-version.ts"],"names":[],"mappings":"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"}
|
package/dist/tasks.d.ts
CHANGED
|
@@ -15,20 +15,110 @@ export interface MigrateOptions {
|
|
|
15
15
|
}
|
|
16
16
|
export declare function isDockerAvailable(): Promise<boolean>;
|
|
17
17
|
/**
|
|
18
|
-
*
|
|
18
|
+
* Compose takes its project name from the **directory basename**, which is not
|
|
19
|
+
* the same as being unique per install.
|
|
19
20
|
*
|
|
20
|
-
*
|
|
21
|
-
*
|
|
22
|
-
*
|
|
23
|
-
*
|
|
24
|
-
*
|
|
25
|
-
*
|
|
21
|
+
* Removing the pinned `container_name`/volume `name:` from docker-compose.yml
|
|
22
|
+
* scopes every resource to the project, and that is what lets two checkouts
|
|
23
|
+
* coexist. But `/work/a/ragen` and `/work/b/ragen` produce the same project
|
|
24
|
+
* name, and therefore the same containers, volumes and network — the original
|
|
25
|
+
* bug, narrowed to same-named directories rather than fixed. Worse than the
|
|
26
|
+
* port collision, because a *stopped* first stack collides silently: no port
|
|
27
|
+
* is held, nothing refuses, and the second install opens the first one's
|
|
28
|
+
* database.
|
|
26
29
|
*
|
|
27
|
-
*
|
|
28
|
-
*
|
|
29
|
-
*
|
|
30
|
+
* So the name is decided here, at install time, and written to the new tree's
|
|
31
|
+
* `.env` — which Compose reads from the project directory on every later
|
|
32
|
+
* `docker compose` the user runs, with no flag to remember. `.env` is the
|
|
33
|
+
* lowest-precedence file `scripts/load-root-env.mjs` reads and is gitignored,
|
|
34
|
+
* and nothing in the apps reads `COMPOSE_PROJECT_NAME`, so it cannot collide
|
|
35
|
+
* with the install's own configuration.
|
|
36
|
+
*
|
|
37
|
+
* The basename is kept whenever it is free, because the readability given up
|
|
38
|
+
* with the pinned names is worth not giving up twice. A suffix appears only
|
|
39
|
+
* when this daemon already runs a project of that name from somewhere else.
|
|
40
|
+
*/
|
|
41
|
+
export interface ComposeProjectName {
|
|
42
|
+
name: string;
|
|
43
|
+
/** True when the plain basename was taken and a suffix was added. */
|
|
44
|
+
disambiguated: boolean;
|
|
45
|
+
/** The compose file of the project that took it, for the message. */
|
|
46
|
+
takenBy?: string;
|
|
47
|
+
/**
|
|
48
|
+
* True when the suffix was added because Docker could not be asked, rather
|
|
49
|
+
* than because a collision was seen. A different sentence to the reader:
|
|
50
|
+
* nothing is wrong, and the name is cautious rather than forced.
|
|
51
|
+
*/
|
|
52
|
+
daemonUnreachable?: boolean;
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Compose accepts `[a-z0-9][a-z0-9_-]*`. A directory called `My Ragen!` or
|
|
56
|
+
* `.ragen` is perfectly legal and would otherwise make every compose command
|
|
57
|
+
* fail with a validation error after the install had finished.
|
|
58
|
+
*/
|
|
59
|
+
export declare function normalizeComposeProjectName(raw: string): string;
|
|
60
|
+
export declare function resolveComposeProjectName(targetDir: string): Promise<ComposeProjectName>;
|
|
61
|
+
/**
|
|
62
|
+
* Every host port a default `docker compose up` publishes, with the variable
|
|
63
|
+
* that moves it. The order is the order the warning prints them in.
|
|
64
|
+
*
|
|
65
|
+
* Defaults are duplicated from docker-compose.yml rather than parsed out of
|
|
66
|
+
* it, because this runs *before* the repository is cloned — there is no file
|
|
67
|
+
* to read yet. `ports-agree-with-compose.test.ts` holds the two in step.
|
|
68
|
+
*/
|
|
69
|
+
export declare const PUBLISHED_PORTS: readonly [{
|
|
70
|
+
readonly service: "Postgres";
|
|
71
|
+
readonly variable: "POSTGRES_PORT";
|
|
72
|
+
readonly port: 55432;
|
|
73
|
+
}, {
|
|
74
|
+
readonly service: "Qdrant";
|
|
75
|
+
readonly variable: "QDRANT_PORT";
|
|
76
|
+
readonly port: 6333;
|
|
77
|
+
}, {
|
|
78
|
+
readonly service: "Qdrant (gRPC)";
|
|
79
|
+
readonly variable: "QDRANT_GRPC_PORT";
|
|
80
|
+
readonly port: 6334;
|
|
81
|
+
}, {
|
|
82
|
+
readonly service: "Docling";
|
|
83
|
+
readonly variable: "DOCLING_PORT";
|
|
84
|
+
readonly port: 5001;
|
|
85
|
+
}, {
|
|
86
|
+
readonly service: "Redis";
|
|
87
|
+
readonly variable: "REDIS_PORT";
|
|
88
|
+
readonly port: 56379;
|
|
89
|
+
}];
|
|
90
|
+
/** The two more, behind the `pii` profile, that only a masking install starts. */
|
|
91
|
+
export declare const PII_PUBLISHED_PORTS: readonly [{
|
|
92
|
+
readonly service: "Presidio analyzer";
|
|
93
|
+
readonly variable: "PRESIDIO_ANALYZER_PORT";
|
|
94
|
+
readonly port: 5002;
|
|
95
|
+
}, {
|
|
96
|
+
readonly service: "Presidio anonymizer";
|
|
97
|
+
readonly variable: "PRESIDIO_ANONYMIZER_PORT";
|
|
98
|
+
readonly port: 5003;
|
|
99
|
+
}];
|
|
100
|
+
export interface PublishedPort {
|
|
101
|
+
service: string;
|
|
102
|
+
variable: string;
|
|
103
|
+
port: number;
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* Which of these host ports something is already listening on.
|
|
107
|
+
*
|
|
108
|
+
* This replaces a check for the volume `ragen-postgres-data`. That volume name
|
|
109
|
+
* was pinned in docker-compose.yml, which is what made a second install share
|
|
110
|
+
* the first one's database — and removing the pin removed the sharing, so the
|
|
111
|
+
* old check now answers a question nobody is asking and would answer "clear"
|
|
112
|
+
* for every install made after the change. A guard that quietly stops firing
|
|
113
|
+
* is worse than no guard.
|
|
114
|
+
*
|
|
115
|
+
* Ports are what is genuinely left: Compose prefixes names per project, and
|
|
116
|
+
* prefixes nothing about a published port, so two stacks still collide on
|
|
117
|
+
* 55432. Binding is also a better probe than asking Docker — it sees a native
|
|
118
|
+
* Postgres on the port as well, which is the other way this install ends up
|
|
119
|
+
* talking to a database it did not start.
|
|
30
120
|
*/
|
|
31
|
-
export declare function
|
|
121
|
+
export declare function busyPublishedPorts(candidates?: readonly PublishedPort[]): Promise<PublishedPort[]>;
|
|
32
122
|
/**
|
|
33
123
|
* `profiles` names compose profiles to add to the default set.
|
|
34
124
|
*
|
package/dist/tasks.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tasks.d.ts","sourceRoot":"","sources":["../src/tasks.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"tasks.d.ts","sourceRoot":"","sources":["../src/tasks.ts"],"names":[],"mappings":"AAMA,MAAM,WAAW,UAAU;IACzB,GAAG,EAAE,MAAM,CAAC;IACZ;;;;;;OAMG;IACH,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;CACzB;AAED,MAAM,WAAW,cAAc;IAC7B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,wBAAsB,iBAAiB,IAAI,OAAO,CAAC,OAAO,CAAC,CAU1D;AAED;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,qEAAqE;IACrE,aAAa,EAAE,OAAO,CAAC;IACvB,qEAAqE;IACrE,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB;;;;OAIG;IACH,iBAAiB,CAAC,EAAE,OAAO,CAAC;CAC7B;AAED;;;;GAIG;AACH,wBAAgB,2BAA2B,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAO/D;AA4BD,wBAAsB,yBAAyB,CAC7C,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,kBAAkB,CAAC,CA8C7B;AAED;;;;;;;GAOG;AACH,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;;;;;;EAMlB,CAAC;AAEX,kFAAkF;AAClF,eAAO,MAAM,mBAAmB;;;;;;;;EAWtB,CAAC;AAEX,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;CACd;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAsB,kBAAkB,CACtC,UAAU,GAAE,SAAS,aAAa,EAAoB,GACrD,OAAO,CAAC,aAAa,EAAE,CAAC,CAS1B;AAyBD;;;;;;GAMG;AACH,wBAAsB,mBAAmB,CAAC,EACxC,GAAG,EACH,QAAa,GACd,EAAE,UAAU,GAAG;IAAE,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAA;CAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAMtD;AAED,wBAAsB,mBAAmB,CAAC,EAAE,GAAG,EAAE,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAE5E;AAED,wBAAsB,oBAAoB,CAAC,EACzC,GAAG,EACH,GAAG,GACJ,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAE5B;AAED,wBAAsB,YAAY,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAE1E;AAED;;;;GAIG;AACH,wBAAsB,eAAe,CACnC,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,UAAU,EACxB,EAAE,OAAW,EAAE,YAAmB,EAAE,GAAE,cAAmB,GACxD,OAAO,CAAC,IAAI,CAAC,CAsBf"}
|
package/dist/tasks.js
CHANGED
|
@@ -1,12 +1,18 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.PII_PUBLISHED_PORTS = exports.PUBLISHED_PORTS = void 0;
|
|
3
4
|
exports.isDockerAvailable = isDockerAvailable;
|
|
4
|
-
exports.
|
|
5
|
+
exports.normalizeComposeProjectName = normalizeComposeProjectName;
|
|
6
|
+
exports.resolveComposeProjectName = resolveComposeProjectName;
|
|
7
|
+
exports.busyPublishedPorts = busyPublishedPorts;
|
|
5
8
|
exports.startDockerServices = startDockerServices;
|
|
6
9
|
exports.installDependencies = installDependencies;
|
|
7
10
|
exports.generatePrismaClient = generatePrismaClient;
|
|
8
11
|
exports.seedDatabase = seedDatabase;
|
|
9
12
|
exports.migrateDatabase = migrateDatabase;
|
|
13
|
+
const node_crypto_1 = require("node:crypto");
|
|
14
|
+
const node_net_1 = require("node:net");
|
|
15
|
+
const node_path_1 = require("node:path");
|
|
10
16
|
const execa_1 = require("execa");
|
|
11
17
|
async function isDockerAvailable() {
|
|
12
18
|
try {
|
|
@@ -21,31 +27,148 @@ async function isDockerAvailable() {
|
|
|
21
27
|
}
|
|
22
28
|
}
|
|
23
29
|
/**
|
|
24
|
-
*
|
|
30
|
+
* Compose accepts `[a-z0-9][a-z0-9_-]*`. A directory called `My Ragen!` or
|
|
31
|
+
* `.ragen` is perfectly legal and would otherwise make every compose command
|
|
32
|
+
* fail with a validation error after the install had finished.
|
|
33
|
+
*/
|
|
34
|
+
function normalizeComposeProjectName(raw) {
|
|
35
|
+
const cleaned = raw
|
|
36
|
+
.toLowerCase()
|
|
37
|
+
.replace(/[^a-z0-9_-]+/g, '-')
|
|
38
|
+
.replace(/^[^a-z0-9]+/, '')
|
|
39
|
+
.replace(/-+$/, '');
|
|
40
|
+
return cleaned || 'ragen';
|
|
41
|
+
}
|
|
42
|
+
/** Six hex characters of the absolute path — stable for this directory. */
|
|
43
|
+
function pathSuffix(absoluteDir) {
|
|
44
|
+
return (0, node_crypto_1.createHash)('sha256').update(absoluteDir).digest('hex').slice(0, 6);
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Whether a compose file belongs to the install in `absoluteDir`.
|
|
25
48
|
*
|
|
26
|
-
*
|
|
27
|
-
*
|
|
28
|
-
*
|
|
29
|
-
*
|
|
30
|
-
*
|
|
31
|
-
*
|
|
49
|
+
* `relative()` rather than a `startsWith(dir + '/')` prefix test, for two
|
|
50
|
+
* reasons: on Windows `resolve()` returns backslashes, so a forward-slash
|
|
51
|
+
* prefix never matches and every re-run would look like a collision — which
|
|
52
|
+
* renames the stack and abandons its volumes, the worst outcome available
|
|
53
|
+
* here. And a prefix test is true for `/work/ragen-app-2` against
|
|
54
|
+
* `/work/ragen-app` unless the separator is appended exactly right.
|
|
32
55
|
*
|
|
33
|
-
*
|
|
34
|
-
*
|
|
35
|
-
*
|
|
56
|
+
* A file *inside* the directory counts, at any depth: `-f infra/compose.yml`
|
|
57
|
+
* is a legitimate way to run this stack, and treating it as someone else's
|
|
58
|
+
* project is the same destructive mistake.
|
|
36
59
|
*/
|
|
37
|
-
|
|
38
|
-
const
|
|
39
|
-
|
|
60
|
+
function isInsideDirectory(file, absoluteDir) {
|
|
61
|
+
const path = (0, node_path_1.relative)(absoluteDir, (0, node_path_1.resolve)(file.trim()));
|
|
62
|
+
// `..` means outside; an absolute result means a different Windows drive,
|
|
63
|
+
// where "inside" is not a question that has a yes.
|
|
64
|
+
return !path.startsWith('..') && !(0, node_path_1.isAbsolute)(path);
|
|
65
|
+
}
|
|
66
|
+
async function resolveComposeProjectName(targetDir) {
|
|
67
|
+
const absoluteDir = (0, node_path_1.resolve)(targetDir);
|
|
68
|
+
const base = normalizeComposeProjectName((0, node_path_1.basename)(absoluteDir));
|
|
69
|
+
const suffixed = `${base}-${pathSuffix(absoluteDir)}`;
|
|
70
|
+
let projects = [];
|
|
40
71
|
try {
|
|
41
|
-
const { stdout } = await (0, execa_1.execa)('docker', ['
|
|
42
|
-
|
|
72
|
+
const { stdout } = await (0, execa_1.execa)('docker', ['compose', 'ls', '--all', '--format', 'json'], { timeout: 10_000 });
|
|
73
|
+
projects = JSON.parse(stdout);
|
|
43
74
|
}
|
|
44
75
|
catch {
|
|
45
|
-
//
|
|
46
|
-
//
|
|
47
|
-
|
|
76
|
+
// An unreachable daemon, or a Compose too old for `ls --format json`.
|
|
77
|
+
//
|
|
78
|
+
// The plain basename is *not* the safe answer here, which is what it first
|
|
79
|
+
// looked like. A daemon that cannot be reached still holds the volumes of
|
|
80
|
+
// every install made before it stopped, and they collide as soon as it
|
|
81
|
+
// starts — so falling back to the basename fails in the silent, expensive
|
|
82
|
+
// direction: a second install quietly opening the first one's database.
|
|
83
|
+
// The suffix fails in the visible, cheap one: a less pretty name in
|
|
84
|
+
// `docker ps`.
|
|
85
|
+
return { name: suffixed, disambiguated: true, daemonUnreachable: true };
|
|
48
86
|
}
|
|
87
|
+
// A project whose compose files live under *this* directory is this install
|
|
88
|
+
// — a re-run of the wizard over an existing tree — and must keep its name,
|
|
89
|
+
// or the second run would point at empty volumes.
|
|
90
|
+
const collision = projects.find((project) => project.Name === base &&
|
|
91
|
+
!(project.ConfigFiles ?? '')
|
|
92
|
+
.split(',')
|
|
93
|
+
.some((file) => isInsideDirectory(file, absoluteDir)));
|
|
94
|
+
if (!collision) {
|
|
95
|
+
return { name: base, disambiguated: false };
|
|
96
|
+
}
|
|
97
|
+
return {
|
|
98
|
+
name: suffixed,
|
|
99
|
+
disambiguated: true,
|
|
100
|
+
takenBy: collision.ConfigFiles?.split(',')[0]?.trim(),
|
|
101
|
+
};
|
|
102
|
+
}
|
|
103
|
+
/**
|
|
104
|
+
* Every host port a default `docker compose up` publishes, with the variable
|
|
105
|
+
* that moves it. The order is the order the warning prints them in.
|
|
106
|
+
*
|
|
107
|
+
* Defaults are duplicated from docker-compose.yml rather than parsed out of
|
|
108
|
+
* it, because this runs *before* the repository is cloned — there is no file
|
|
109
|
+
* to read yet. `ports-agree-with-compose.test.ts` holds the two in step.
|
|
110
|
+
*/
|
|
111
|
+
exports.PUBLISHED_PORTS = [
|
|
112
|
+
{ service: 'Postgres', variable: 'POSTGRES_PORT', port: 55432 },
|
|
113
|
+
{ service: 'Qdrant', variable: 'QDRANT_PORT', port: 6333 },
|
|
114
|
+
{ service: 'Qdrant (gRPC)', variable: 'QDRANT_GRPC_PORT', port: 6334 },
|
|
115
|
+
{ service: 'Docling', variable: 'DOCLING_PORT', port: 5001 },
|
|
116
|
+
{ service: 'Redis', variable: 'REDIS_PORT', port: 56379 },
|
|
117
|
+
];
|
|
118
|
+
/** The two more, behind the `pii` profile, that only a masking install starts. */
|
|
119
|
+
exports.PII_PUBLISHED_PORTS = [
|
|
120
|
+
{
|
|
121
|
+
service: 'Presidio analyzer',
|
|
122
|
+
variable: 'PRESIDIO_ANALYZER_PORT',
|
|
123
|
+
port: 5002,
|
|
124
|
+
},
|
|
125
|
+
{
|
|
126
|
+
service: 'Presidio anonymizer',
|
|
127
|
+
variable: 'PRESIDIO_ANONYMIZER_PORT',
|
|
128
|
+
port: 5003,
|
|
129
|
+
},
|
|
130
|
+
];
|
|
131
|
+
/**
|
|
132
|
+
* Which of these host ports something is already listening on.
|
|
133
|
+
*
|
|
134
|
+
* This replaces a check for the volume `ragen-postgres-data`. That volume name
|
|
135
|
+
* was pinned in docker-compose.yml, which is what made a second install share
|
|
136
|
+
* the first one's database — and removing the pin removed the sharing, so the
|
|
137
|
+
* old check now answers a question nobody is asking and would answer "clear"
|
|
138
|
+
* for every install made after the change. A guard that quietly stops firing
|
|
139
|
+
* is worse than no guard.
|
|
140
|
+
*
|
|
141
|
+
* Ports are what is genuinely left: Compose prefixes names per project, and
|
|
142
|
+
* prefixes nothing about a published port, so two stacks still collide on
|
|
143
|
+
* 55432. Binding is also a better probe than asking Docker — it sees a native
|
|
144
|
+
* Postgres on the port as well, which is the other way this install ends up
|
|
145
|
+
* talking to a database it did not start.
|
|
146
|
+
*/
|
|
147
|
+
async function busyPublishedPorts(candidates = exports.PUBLISHED_PORTS) {
|
|
148
|
+
const results = await Promise.all(candidates.map(async (candidate) => (await isPortInUse(candidate.port)) ? candidate : undefined));
|
|
149
|
+
return results.filter((candidate) => Boolean(candidate));
|
|
150
|
+
}
|
|
151
|
+
/**
|
|
152
|
+
* Loopback only, because that is where docker-compose.yml publishes
|
|
153
|
+
* (`RAGEN_BIND_ADDR` defaults to 127.0.0.1). Anything other than EADDRINUSE —
|
|
154
|
+
* a permission error, a system without IPv4 loopback — reports "free": the
|
|
155
|
+
* cost of a missed warning is a compose error the caller then reads, and the
|
|
156
|
+
* cost of a false one is telling someone their machine is occupied when it is
|
|
157
|
+
* not.
|
|
158
|
+
*/
|
|
159
|
+
function isPortInUse(port) {
|
|
160
|
+
return new Promise((resolve) => {
|
|
161
|
+
const server = (0, node_net_1.createServer)();
|
|
162
|
+
server.once('error', (error) => {
|
|
163
|
+
resolve(error.code === 'EADDRINUSE');
|
|
164
|
+
});
|
|
165
|
+
server.once('listening', () => {
|
|
166
|
+
server.close(() => {
|
|
167
|
+
resolve(false);
|
|
168
|
+
});
|
|
169
|
+
});
|
|
170
|
+
server.listen(port, '127.0.0.1');
|
|
171
|
+
});
|
|
49
172
|
}
|
|
50
173
|
/**
|
|
51
174
|
* `profiles` names compose profiles to add to the default set.
|
package/dist/tasks.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tasks.js","sourceRoot":"","sources":["../src/tasks.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"tasks.js","sourceRoot":"","sources":["../src/tasks.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "create-ragen-app",
|
|
3
|
-
"version": "0.6.
|
|
3
|
+
"version": "0.6.2",
|
|
4
4
|
"private": false,
|
|
5
5
|
"description": "Scaffold a self-hosted Ragen AI installation with one command",
|
|
6
6
|
"license": "Apache-2.0",
|
|
@@ -39,6 +39,6 @@
|
|
|
39
39
|
"typescript": "~5.7.0"
|
|
40
40
|
},
|
|
41
41
|
"engines": {
|
|
42
|
-
"node": ">=
|
|
42
|
+
"node": "^24.15.0 || >=26.0.0"
|
|
43
43
|
}
|
|
44
44
|
}
|