@kindgi/cli 0.1.0 → 0.1.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.
Files changed (151) hide show
  1. package/README.md +79 -22
  2. package/dist/build/bundle.d.ts +5 -2
  3. package/dist/build/bundle.d.ts.map +1 -1
  4. package/dist/build/bundle.js +8 -4
  5. package/dist/build/bundle.js.map +1 -1
  6. package/dist/build/containerfile.d.ts.map +1 -1
  7. package/dist/build/containerfile.js +1 -0
  8. package/dist/build/containerfile.js.map +1 -1
  9. package/dist/build/defaults.d.ts +3 -3
  10. package/dist/build/defaults.d.ts.map +1 -1
  11. package/dist/build/defaults.js +20 -12
  12. package/dist/build/defaults.js.map +1 -1
  13. package/dist/build/host-install.d.ts +52 -0
  14. package/dist/build/host-install.d.ts.map +1 -1
  15. package/dist/build/host-install.js +68 -0
  16. package/dist/build/host-install.js.map +1 -1
  17. package/dist/build/python-image.d.ts +2 -0
  18. package/dist/build/python-image.d.ts.map +1 -1
  19. package/dist/build/python-image.js +12 -1
  20. package/dist/build/python-image.js.map +1 -1
  21. package/dist/build/runners.d.ts +6 -5
  22. package/dist/build/runners.d.ts.map +1 -1
  23. package/dist/commands/auth.d.ts +22 -0
  24. package/dist/commands/auth.d.ts.map +1 -1
  25. package/dist/commands/auth.js +197 -2
  26. package/dist/commands/auth.js.map +1 -1
  27. package/dist/commands/build.d.ts +7 -0
  28. package/dist/commands/build.d.ts.map +1 -1
  29. package/dist/commands/build.js +73 -42
  30. package/dist/commands/build.js.map +1 -1
  31. package/dist/commands/dev.d.ts +1 -2
  32. package/dist/commands/dev.d.ts.map +1 -1
  33. package/dist/commands/dev.js +136 -58
  34. package/dist/commands/dev.js.map +1 -1
  35. package/dist/commands/helpers.d.ts +14 -3
  36. package/dist/commands/helpers.d.ts.map +1 -1
  37. package/dist/commands/helpers.js +20 -3
  38. package/dist/commands/helpers.js.map +1 -1
  39. package/dist/commands/init.d.ts.map +1 -1
  40. package/dist/commands/init.js +2 -3
  41. package/dist/commands/init.js.map +1 -1
  42. package/dist/commands/key.d.ts.map +1 -1
  43. package/dist/commands/key.js +143 -11
  44. package/dist/commands/key.js.map +1 -1
  45. package/dist/commands/providers.d.ts.map +1 -1
  46. package/dist/commands/providers.js +11 -1
  47. package/dist/commands/providers.js.map +1 -1
  48. package/dist/commands/runs.d.ts.map +1 -1
  49. package/dist/commands/runs.js +17 -15
  50. package/dist/commands/runs.js.map +1 -1
  51. package/dist/commands/secrets.d.ts +1 -4
  52. package/dist/commands/secrets.d.ts.map +1 -1
  53. package/dist/commands/secrets.js +7 -55
  54. package/dist/commands/secrets.js.map +1 -1
  55. package/dist/commands/test.js +1 -1
  56. package/dist/commands/test.js.map +1 -1
  57. package/dist/commands/tools.d.ts.map +1 -1
  58. package/dist/commands/tools.js +11 -2
  59. package/dist/commands/tools.js.map +1 -1
  60. package/dist/commands/unwired.d.ts +5 -0
  61. package/dist/commands/unwired.d.ts.map +1 -1
  62. package/dist/commands/unwired.js +11 -0
  63. package/dist/commands/unwired.js.map +1 -1
  64. package/dist/context.d.ts +9 -0
  65. package/dist/context.d.ts.map +1 -1
  66. package/dist/context.js +1 -0
  67. package/dist/context.js.map +1 -1
  68. package/dist/dev/bundler.d.ts +2 -0
  69. package/dist/dev/bundler.d.ts.map +1 -1
  70. package/dist/dev/bundler.js +91 -10
  71. package/dist/dev/bundler.js.map +1 -1
  72. package/dist/dev/defaults.d.ts +8 -6
  73. package/dist/dev/defaults.d.ts.map +1 -1
  74. package/dist/dev/defaults.js +78 -60
  75. package/dist/dev/defaults.js.map +1 -1
  76. package/dist/dev/dev-only-imports.d.ts +15 -0
  77. package/dist/dev/dev-only-imports.d.ts.map +1 -0
  78. package/dist/dev/dev-only-imports.js +57 -0
  79. package/dist/dev/dev-only-imports.js.map +1 -0
  80. package/dist/dev/docker-compose.dev.yml +19 -7
  81. package/dist/dev/pack-service.d.ts +8 -0
  82. package/dist/dev/pack-service.d.ts.map +1 -1
  83. package/dist/dev/pack-service.js +1 -0
  84. package/dist/dev/pack-service.js.map +1 -1
  85. package/dist/dev/postgres-container.d.ts +77 -0
  86. package/dist/dev/postgres-container.d.ts.map +1 -0
  87. package/dist/dev/postgres-container.js +346 -0
  88. package/dist/dev/postgres-container.js.map +1 -0
  89. package/dist/dev/runners.d.ts +36 -11
  90. package/dist/dev/runners.d.ts.map +1 -1
  91. package/dist/dev/runtime-container.d.ts +11 -2
  92. package/dist/dev/runtime-container.d.ts.map +1 -1
  93. package/dist/dev/runtime-container.js +16 -7
  94. package/dist/dev/runtime-container.js.map +1 -1
  95. package/dist/dev/runtime-image.d.ts +15 -2
  96. package/dist/dev/runtime-image.d.ts.map +1 -1
  97. package/dist/dev/runtime-image.js +31 -2
  98. package/dist/dev/runtime-image.js.map +1 -1
  99. package/dist/dev/runtime-registry.d.ts +73 -0
  100. package/dist/dev/runtime-registry.d.ts.map +1 -0
  101. package/dist/dev/runtime-registry.js +111 -0
  102. package/dist/dev/runtime-registry.js.map +1 -0
  103. package/dist/errors.d.ts.map +1 -1
  104. package/dist/errors.js +5 -1
  105. package/dist/errors.js.map +1 -1
  106. package/dist/init/augment-scaffolder.d.ts +12 -0
  107. package/dist/init/augment-scaffolder.d.ts.map +1 -1
  108. package/dist/init/augment-scaffolder.js +93 -14
  109. package/dist/init/augment-scaffolder.js.map +1 -1
  110. package/dist/init/pnpm-workspace-patcher.d.ts +55 -0
  111. package/dist/init/pnpm-workspace-patcher.d.ts.map +1 -0
  112. package/dist/init/pnpm-workspace-patcher.js +248 -0
  113. package/dist/init/pnpm-workspace-patcher.js.map +1 -0
  114. package/dist/init/template-files.d.ts +2 -0
  115. package/dist/init/template-files.d.ts.map +1 -1
  116. package/dist/init/template-files.js +16 -1
  117. package/dist/init/template-files.js.map +1 -1
  118. package/dist/main.d.ts +7 -0
  119. package/dist/main.d.ts.map +1 -1
  120. package/dist/main.js +1 -0
  121. package/dist/main.js.map +1 -1
  122. package/dist/parse.d.ts +6 -0
  123. package/dist/parse.d.ts.map +1 -1
  124. package/dist/parse.js +1 -0
  125. package/dist/parse.js.map +1 -1
  126. package/dist/sdk-skills/kindgi-authoring-agents/SKILL.md +3 -4
  127. package/dist/sdk-skills/kindgi-authoring-flows/SKILL.md +12 -9
  128. package/dist/sdk-skills/kindgi-authoring-guardrails/SKILL.md +21 -9
  129. package/dist/sdk-skills/kindgi-authoring-mcp-servers/SKILL.md +1 -1
  130. package/dist/sdk-skills/kindgi-authoring-providers/SKILL.md +10 -9
  131. package/dist/sdk-skills/kindgi-authoring-tools/SKILL.md +26 -5
  132. package/dist/sdk-skills/kindgi-framework-feedback/SKILL.md +1 -1
  133. package/dist/sdk-skills/kindgi-getting-started/SKILL.md +58 -8
  134. package/dist/sdk-skills/kindgi-python-authoring-agents/SKILL.md +1 -1
  135. package/dist/sdk-skills/kindgi-python-authoring-flows/SKILL.md +12 -9
  136. package/dist/sdk-skills/kindgi-python-authoring-guardrails/SKILL.md +10 -7
  137. package/dist/sdk-skills/kindgi-python-authoring-tools/SKILL.md +8 -2
  138. package/dist/sdk-skills/kindgi-python-getting-started/SKILL.md +37 -4
  139. package/dist/templates/minimal/package.json.tmpl +1 -1
  140. package/dist/templates/minimal/pnpm-workspace.yaml +6 -4
  141. package/dist/templates/sample/guardrails/response-not-empty/index.ts.tmpl +14 -6
  142. package/dist/templates/sample/package.json.tmpl +1 -1
  143. package/dist/templates/sample/pnpm-workspace.yaml +6 -4
  144. package/dist/terminal-input.d.ts +17 -0
  145. package/dist/terminal-input.d.ts.map +1 -0
  146. package/dist/terminal-input.js +88 -0
  147. package/dist/terminal-input.js.map +1 -0
  148. package/package.json +13 -12
  149. /package/dist/templates/minimal/{.gitignore → gitignore} +0 -0
  150. /package/dist/templates/python/{.gitignore → gitignore} +0 -0
  151. /package/dist/templates/sample/{.gitignore → gitignore} +0 -0
@@ -0,0 +1,346 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ // Copyright (C) 2026 Kindgi Inc.
3
+ /**
4
+ * The bundled Postgres with plain `docker`, for a Docker engine without
5
+ * `docker compose` (common on a bare Linux engine). `kindgi dev` starts
6
+ * the same container the compose file defines, read from that file:
7
+ *
8
+ * - the same names: the container (`kindgi-dev_postgres`), its data
9
+ * volume (`kindgi-dev_postgres-data`) and the network (`kindgi-dev`),
10
+ * so the data is shared whichever way it was started;
11
+ * - the same image, environment, command, healthcheck, and the port
12
+ * published to a random host port on loopback (`127.0.0.1`): the
13
+ * password is a fixed dev one, so the database must not be reachable
14
+ * from the LAN;
15
+ * - the compose project's labels on what it creates, so
16
+ * `docker compose -p kindgi-dev` (`up --no-recreate`, `port`,
17
+ * `down -v`) takes them as its own once compose is installed.
18
+ *
19
+ * An existing container is reused as it is, whichever way it was
20
+ * started: started if stopped, never recreated or removed, since
21
+ * another `kindgi dev` may be using it.
22
+ */
23
+ import { parse as parseYaml } from 'yaml';
24
+ import { docker } from './runtime-container.js';
25
+ /** The service keys the plain-docker start carries over; any other is refused. */
26
+ const SERVICE_KEYS = new Set([
27
+ 'image',
28
+ 'container_name',
29
+ 'environment',
30
+ 'command',
31
+ 'volumes',
32
+ 'ports',
33
+ 'healthcheck',
34
+ ]);
35
+ function isRecord(value) {
36
+ return value !== null && typeof value === 'object' && !Array.isArray(value);
37
+ }
38
+ function isStringList(value) {
39
+ return Array.isArray(value) && value.every((v) => typeof v === 'string');
40
+ }
41
+ /**
42
+ * The container `service` defines in a compose file, for `docker run`.
43
+ * Strict: a key or shape the plain-docker start can't carry over throws,
44
+ * so the two ways of starting it never drift apart silently.
45
+ */
46
+ export function postgresSpecFromCompose(composeYaml, project, service = 'postgres') {
47
+ const unsupported = (what) => new Error(`the compose file's ${service} service: ${what}, which a plain docker start can't carry over`);
48
+ const file = parseYaml(composeYaml);
49
+ if (!isRecord(file) || !isRecord(file.services))
50
+ throw unsupported('no services');
51
+ const svc = file.services[service];
52
+ if (!isRecord(svc))
53
+ throw unsupported('not defined');
54
+ for (const key of Object.keys(svc)) {
55
+ if (!SERVICE_KEYS.has(key))
56
+ throw unsupported(`sets \`${key}\``);
57
+ }
58
+ if (typeof svc.image !== 'string')
59
+ throw unsupported('no image');
60
+ if (typeof svc.container_name !== 'string')
61
+ throw unsupported('no container_name');
62
+ const environment = {};
63
+ if (svc.environment !== undefined) {
64
+ if (!isRecord(svc.environment))
65
+ throw unsupported('environment is not a map');
66
+ for (const [name, value] of Object.entries(svc.environment)) {
67
+ if (typeof value !== 'string' && typeof value !== 'number' && typeof value !== 'boolean') {
68
+ throw unsupported(`environment ${name} has no value`);
69
+ }
70
+ environment[name] = String(value);
71
+ }
72
+ }
73
+ const command = svc.command ?? [];
74
+ if (!isStringList(command))
75
+ throw unsupported('command is not a list of strings');
76
+ if (!isStringList(svc.volumes) || svc.volumes.length !== 1) {
77
+ throw unsupported('not exactly one volume');
78
+ }
79
+ const mount = svc.volumes[0] ?? '';
80
+ const [volumeKey, target, ...rest] = mount.split(':');
81
+ const volumes = isRecord(file.volumes) ? file.volumes : {};
82
+ const volumeDef = volumes[volumeKey ?? ''];
83
+ if (volumeKey === undefined ||
84
+ target === undefined ||
85
+ rest.length > 0 ||
86
+ volumeDef === undefined) {
87
+ throw unsupported(`volume ${mount} is not a named volume`);
88
+ }
89
+ const volumeName = isRecord(volumeDef) && typeof volumeDef.name === 'string'
90
+ ? volumeDef.name
91
+ : `${project}_${volumeKey}`;
92
+ // `5432` or `127.0.0.1::5432`: a random host port, on one address or all.
93
+ const published = isStringList(svc.ports) && svc.ports.length === 1
94
+ ? /^(?:(\d{1,3}(?:\.\d{1,3}){3})::)?(\d+)$/.exec(svc.ports[0] ?? '')
95
+ : null;
96
+ if (published === null) {
97
+ throw unsupported('not exactly one port published to a random host port');
98
+ }
99
+ const hostIp = published[1];
100
+ const port = Number(published[2]);
101
+ const networks = isRecord(file.networks) ? file.networks : {};
102
+ for (const key of Object.keys(networks)) {
103
+ if (key !== 'default')
104
+ throw unsupported(`network ${key}`);
105
+ }
106
+ const defaultNetwork = networks.default;
107
+ const networkName = isRecord(defaultNetwork) && typeof defaultNetwork.name === 'string'
108
+ ? defaultNetwork.name
109
+ : `${project}_default`;
110
+ const hc = svc.healthcheck;
111
+ if (!isRecord(hc))
112
+ throw unsupported('no healthcheck');
113
+ const test = hc.test;
114
+ const healthCommand = typeof test === 'string'
115
+ ? test
116
+ : isStringList(test) && test.length === 2 && test[0] === 'CMD-SHELL'
117
+ ? test[1]
118
+ : undefined;
119
+ if (healthCommand === undefined)
120
+ throw unsupported('healthcheck test is not CMD-SHELL');
121
+ for (const key of Object.keys(hc)) {
122
+ if (!['test', 'interval', 'timeout', 'retries', 'start_period'].includes(key)) {
123
+ throw unsupported(`healthcheck sets \`${key}\``);
124
+ }
125
+ }
126
+ const duration = (key) => {
127
+ const value = hc[key];
128
+ if (value === undefined)
129
+ return undefined;
130
+ if (typeof value !== 'string')
131
+ throw unsupported(`healthcheck ${key} is not a duration`);
132
+ return value;
133
+ };
134
+ if (hc.retries !== undefined && typeof hc.retries !== 'number') {
135
+ throw unsupported('healthcheck retries is not a number');
136
+ }
137
+ const interval = duration('interval');
138
+ const timeout = duration('timeout');
139
+ const startPeriod = duration('start_period');
140
+ return {
141
+ project,
142
+ service,
143
+ name: svc.container_name,
144
+ image: svc.image,
145
+ environment,
146
+ command,
147
+ volume: { key: volumeKey, name: volumeName, target },
148
+ network: { key: 'default', name: networkName },
149
+ port,
150
+ ...(hostIp !== undefined && { hostIp }),
151
+ healthcheck: {
152
+ command: healthCommand,
153
+ ...(interval !== undefined && { interval }),
154
+ ...(timeout !== undefined && { timeout }),
155
+ ...(typeof hc.retries === 'number' && { retries: hc.retries }),
156
+ ...(startPeriod !== undefined && { startPeriod }),
157
+ },
158
+ };
159
+ }
160
+ /**
161
+ * The compose project's labels for the container: compose finds a
162
+ * project's containers by them. The config hash is left empty, so compose
163
+ * takes the definition as changed: `--no-recreate` reuses the container,
164
+ * and only a recreate asked for (`--recreate-services`) replaces it.
165
+ */
166
+ function containerLabels(spec) {
167
+ return [
168
+ `com.docker.compose.project=${spec.project}`,
169
+ `com.docker.compose.service=${spec.service}`,
170
+ 'com.docker.compose.oneoff=False',
171
+ 'com.docker.compose.container-number=1',
172
+ 'com.docker.compose.config-hash=',
173
+ ];
174
+ }
175
+ function labelArgs(labels) {
176
+ return labels.flatMap((label) => ['--label', label]);
177
+ }
178
+ /** The `docker run` arguments for the container the compose file defines. */
179
+ export function postgresRunArgs(spec) {
180
+ const args = ['run', '--detach', '--name', spec.name, ...labelArgs(containerLabels(spec))];
181
+ // On the project's network under its service name, as compose attaches it.
182
+ args.push('--network', spec.network.name, '--network-alias', spec.service);
183
+ args.push('--volume', `${spec.volume.name}:${spec.volume.target}`);
184
+ // `127.0.0.1::5432`: a random host port, on loopback only when the
185
+ // compose file says so (a fixed dev password stays off the LAN).
186
+ args.push('--publish', spec.hostIp === undefined ? String(spec.port) : `${spec.hostIp}::${spec.port}`);
187
+ for (const [name, value] of Object.entries(spec.environment)) {
188
+ args.push('--env', `${name}=${value}`);
189
+ }
190
+ const hc = spec.healthcheck;
191
+ args.push('--health-cmd', hc.command);
192
+ if (hc.interval !== undefined)
193
+ args.push('--health-interval', hc.interval);
194
+ if (hc.timeout !== undefined)
195
+ args.push('--health-timeout', hc.timeout);
196
+ if (hc.retries !== undefined)
197
+ args.push('--health-retries', String(hc.retries));
198
+ if (hc.startPeriod !== undefined)
199
+ args.push('--health-start-period', hc.startPeriod);
200
+ args.push(spec.image, ...spec.command);
201
+ return args;
202
+ }
203
+ /**
204
+ * The host port in `docker port` / `docker compose port` output
205
+ * (`0.0.0.0:51741`, or `[::]:51741`); `undefined` when there is none.
206
+ */
207
+ export function hostPortOf(portOutput) {
208
+ const line = portOutput.trim().split('\n')[0] ?? '';
209
+ const port = Number(line.slice(line.lastIndexOf(':') + 1));
210
+ return Number.isInteger(port) && port > 0 ? port : undefined;
211
+ }
212
+ function lastLines(text, n = 5) {
213
+ return text.trim().split('\n').slice(-n).join('\n');
214
+ }
215
+ function failure(command, outcome) {
216
+ const detail = lastLines(outcome.stderr);
217
+ return `\`${command}\` failed (exit ${outcome.code ?? 'spawn error'})${detail === '' ? '' : `: ${detail}`}`;
218
+ }
219
+ /** Create the network or volume when it's missing; an existing one is used as it is. */
220
+ async function ensureResource(kind, name, labels, run) {
221
+ if ((await run([kind, 'inspect', name])).code === 0)
222
+ return undefined;
223
+ const created = await run([kind, 'create', ...labelArgs(labels), name]);
224
+ if (created.code === 0)
225
+ return undefined;
226
+ // Another kindgi dev made it meanwhile.
227
+ if ((await run([kind, 'inspect', name])).code === 0)
228
+ return undefined;
229
+ return failure(`docker ${kind} create ${name}`, created);
230
+ }
231
+ /**
232
+ * The container's status (`docker container inspect`), or `missing`; an
233
+ * error when docker can't tell.
234
+ */
235
+ async function containerStatus(name, run) {
236
+ const inspected = await run(['container', 'inspect', '--format', '{{.State.Status}}', name]);
237
+ if (inspected.code === 0)
238
+ return { status: inspected.stdout.trim() };
239
+ if (inspected.code !== null && /no such (container|object)/i.test(inspected.stderr)) {
240
+ return { status: 'missing' };
241
+ }
242
+ return { error: failure(`docker container inspect ${name}`, inspected) };
243
+ }
244
+ /** Reuse an existing container as it is: start it when it's stopped. */
245
+ async function reuseContainer(name, status, run) {
246
+ if (status === 'running' || status === 'restarting')
247
+ return { kind: 'reused', container: 'running' };
248
+ if (status === 'created' || status === 'exited') {
249
+ const started = await run(['start', name]);
250
+ return started.code === 0
251
+ ? { kind: 'reused', container: 'started' }
252
+ : { kind: 'error', message: failure(`docker start ${name}`, started) };
253
+ }
254
+ if (status === 'paused') {
255
+ return {
256
+ kind: 'error',
257
+ message: `${name} is paused: unpause it (docker unpause ${name}), then run kindgi dev again`,
258
+ };
259
+ }
260
+ return { kind: 'error', message: `${name} is ${status}` };
261
+ }
262
+ /**
263
+ * Wait until the container is healthy (or running, without a
264
+ * healthcheck), as `docker compose up --wait` does; an error when it
265
+ * turns unhealthy or stops.
266
+ */
267
+ async function waitHealthy(name, run, wait) {
268
+ const deadline = Date.now() + wait.timeoutMs;
269
+ const format = '{{.State.Status}} {{if .State.Health}}{{.State.Health.Status}}{{end}}';
270
+ for (;;) {
271
+ const inspected = await run(['container', 'inspect', '--format', format, name]);
272
+ if (inspected.code !== 0)
273
+ return failure(`docker container inspect ${name}`, inspected);
274
+ const [status, health] = inspected.stdout.trim().split(/\s+/);
275
+ if (status === 'running' && (health === undefined || health === 'healthy'))
276
+ return undefined;
277
+ const stopped = status === 'exited' || status === 'dead';
278
+ if (stopped || health === 'unhealthy' || Date.now() > deadline) {
279
+ const what = stopped
280
+ ? `stopped while starting (${status})`
281
+ : health === 'unhealthy'
282
+ ? 'is unhealthy'
283
+ : `wasn't healthy after ${Math.round(wait.timeoutMs / 1000)}s`;
284
+ const logs = await run(['logs', '--tail', '15', name]);
285
+ const tail = lastLines(`${logs.stdout}\n${logs.stderr}`, 15);
286
+ return `${name} ${what}${tail === '' ? '' : `:\n${tail}`}`;
287
+ }
288
+ await new Promise((r) => setTimeout(r, wait.pollMs));
289
+ }
290
+ }
291
+ /**
292
+ * Start the container `spec` defines with plain `docker`, wait until it's
293
+ * healthy, and read its host port back:
294
+ *
295
+ * - none exists: create the network and the volume when missing, then
296
+ * `docker run` it;
297
+ * - it exists, whichever way it was started: reuse it as it is, and
298
+ * start it when it's stopped. It is never recreated or removed.
299
+ */
300
+ export async function startPostgresContainer(spec, run = docker, wait = {}) {
301
+ const found = await containerStatus(spec.name, run);
302
+ if ('error' in found)
303
+ return { kind: 'error', message: found.error };
304
+ let status = found.status;
305
+ let container;
306
+ if (status === 'missing') {
307
+ const project = `com.docker.compose.project=${spec.project}`;
308
+ const network = await ensureResource('network', spec.network.name, [project, `com.docker.compose.network=${spec.network.key}`], run);
309
+ if (network !== undefined)
310
+ return { kind: 'error', message: network };
311
+ const volume = await ensureResource('volume', spec.volume.name, [project, `com.docker.compose.volume=${spec.volume.key}`], run);
312
+ if (volume !== undefined)
313
+ return { kind: 'error', message: volume };
314
+ const created = await run(postgresRunArgs(spec));
315
+ if (created.code === 0) {
316
+ container = 'created';
317
+ }
318
+ else {
319
+ // Another kindgi dev made it meanwhile: reuse that one.
320
+ const again = await containerStatus(spec.name, run);
321
+ if ('error' in again || again.status === 'missing') {
322
+ return { kind: 'error', message: failure(`docker run --name ${spec.name}`, created) };
323
+ }
324
+ status = again.status;
325
+ }
326
+ }
327
+ if (container === undefined) {
328
+ const reused = await reuseContainer(spec.name, status, run);
329
+ if (reused.kind === 'error')
330
+ return reused;
331
+ container = reused.container;
332
+ }
333
+ const unhealthy = await waitHealthy(spec.name, run, {
334
+ timeoutMs: wait.timeoutMs ?? 120_000,
335
+ pollMs: wait.pollMs ?? 500,
336
+ });
337
+ if (unhealthy !== undefined)
338
+ return { kind: 'error', message: unhealthy };
339
+ const published = await run(['port', spec.name, String(spec.port)]);
340
+ const port = published.code === 0 ? hostPortOf(published.stdout) : undefined;
341
+ if (port === undefined) {
342
+ return { kind: 'error', message: failure(`docker port ${spec.name} ${spec.port}`, published) };
343
+ }
344
+ return { kind: 'ok', port, container };
345
+ }
346
+ //# sourceMappingURL=postgres-container.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"postgres-container.js","sourceRoot":"","sources":["../../src/dev/postgres-container.ts"],"names":[],"mappings":"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"}
@@ -78,14 +78,26 @@ export interface StartApiServerOptions {
78
78
  * One bundle of the pack's code: each primitive's source path (as the
79
79
  * index records it) mapped to its bundle, both relative to the pack
80
80
  * root — or the build errors, located `file:line:column`.
81
+ *
82
+ * `externals` (a Node pack's): the packages the code loads from the
83
+ * app's `node_modules`, the same ones a pack image's bundles load — its
84
+ * primitives' and its config's. Absent for a Python pack.
81
85
  */
82
86
  export type PackBuild = {
83
87
  readonly kind: 'ok';
84
88
  readonly bundleMap: Readonly<Record<string, string>>;
89
+ readonly externals?: readonly ExternalPackage[];
85
90
  } | {
86
91
  readonly kind: 'err';
87
92
  readonly errors: readonly string[];
88
93
  };
94
+ /** A package the pack's code loads from `node_modules`, and the files that import it. */
95
+ export interface ExternalPackage {
96
+ /** `@scope/name` or `name`. */
97
+ readonly name: string;
98
+ /** Relative to the pack root, sorted. */
99
+ readonly importers: readonly string[];
100
+ }
89
101
  /**
90
102
  * Makes the pack's code ready for the pack service: esbuild bundles for a
91
103
  * Node pack, the sources themselves for a Python one.
@@ -190,18 +202,28 @@ export interface WatchHandle {
190
202
  *
191
203
  * The services aren't stopped when `kindgi dev` exits: every `kindgi dev`
192
204
  * on the machine shares the one `kindgi-dev` compose project, so another
193
- * session's runtime may be using them. The next boot picks them up;
194
- * `kindgi dev --reset` removes them and their data.
205
+ * session's runtime may be using them. The next boot picks them up.
206
+ * `kindgi dev --reset` leaves them alone; `docker compose -p kindgi-dev
207
+ * down -v` removes them and their data.
195
208
  */
196
209
  export interface StartedServicesHandle {
197
210
  readonly databaseUrl: string;
198
211
  readonly services: readonly string[];
212
+ /**
213
+ * How they were started: with `docker compose`, or with plain `docker`
214
+ * when compose isn't available (a Docker engine without the plugin).
215
+ * The same containers, volume and network either way.
216
+ */
217
+ readonly startedWith: 'docker compose' | 'docker';
218
+ /** What the developer should know about this start: a flag that needs compose. */
219
+ readonly notes?: readonly string[];
199
220
  }
200
221
  /**
201
- * Outcome of `startServices`. `kind: 'ok'` = docker-compose available
202
- * AND all containers healthy. `kind: 'unavailable'` = docker-compose
203
- * not detected (or docker not installed); caller falls back to the
204
- * missing-KINDGI_DATABASE_URL error. `kind: 'error'` = docker-compose was
222
+ * Outcome of `startServices`. `kind: 'ok'` = started (with docker
223
+ * compose, or plain docker without it) AND all containers healthy.
224
+ * `kind: 'unavailable'` = docker itself isn't available (not installed,
225
+ * or the engine doesn't answer); caller falls back to the
226
+ * missing-KINDGI_DATABASE_URL error. `kind: 'error'` = docker was
205
227
  * available but the boot failed (image pull, port collision, health
206
228
  * timeout) — caller surfaces the reason.
207
229
  */
@@ -233,6 +255,8 @@ export interface DevRunners {
233
255
  readonly createPackBuilder: (opts: {
234
256
  readonly packDir: string;
235
257
  readonly patterns: readonly string[];
258
+ /** A Node pack's `kindgi.config.*`: its imports count among the externals, as in a pack image. */
259
+ readonly configPath?: string;
236
260
  readonly code: PackCode;
237
261
  /** The pack's environment (a Python build runs the pack's interpreter with it). */
238
262
  readonly env: () => Promise<Readonly<Record<string, string>>>;
@@ -266,19 +290,20 @@ export interface DevRunners {
266
290
  }) => Promise<WatchHandle>;
267
291
  /**
268
292
  * Auto-start the bundled `docker-compose.dev.yml` (Postgres) with
269
- * `docker compose`, in the `kindgi-dev` project. Called only when the user did NOT
293
+ * `docker compose`, in the `kindgi-dev` project, or with plain `docker`
294
+ * when compose isn't available. Called only when the user did NOT
270
295
  * provide `--database-url` / `KINDGI_DATABASE_URL`. Returns an outcome
271
296
  * enum: `ok` (fall through with the container's URL), `unavailable`
272
- * (docker-compose not detected — caller falls back to the manual
273
- * error), or `error` (docker was available but boot failed).
297
+ * (docker isn't available — caller falls back to the manual error),
298
+ * or `error` (docker was available but boot failed).
274
299
  *
275
300
  * Optional so tests can leave it unset (falls through to the
276
301
  * current "manual KINDGI_DATABASE_URL required" error).
277
- */
278
- /**
302
+ *
279
303
  * `recreate`: let compose recreate the shared Postgres when its
280
304
  * definition changed (`--recreate-services`). Default: an existing
281
305
  * container is reused as it is — another `kindgi dev` may be using it.
306
+ * Without compose it is always reused; the handle's `notes` say so.
282
307
  */
283
308
  readonly startServices?: (options: {
284
309
  readonly recreate: boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"runners.d.ts","sourceRoot":"","sources":["../../src/dev/runners.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"runners.d.ts","sourceRoot":"","sources":["../../src/dev/runners.ts"],"names":[],"mappings":"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"}
@@ -7,8 +7,17 @@ export interface DockerOutcome {
7
7
  readonly stdout: string;
8
8
  readonly stderr: string;
9
9
  }
10
+ export interface DockerRunOptions {
11
+ /**
12
+ * Written to the command's stdin, which is then closed. A secret (a
13
+ * registry token) goes here, never in the arguments or the environment.
14
+ */
15
+ readonly stdin?: string;
16
+ }
17
+ /** Runs one `docker` command to completion: `docker` below, or a fake in tests. */
18
+ export type DockerRunner = (args: readonly string[], options?: DockerRunOptions) => Promise<DockerOutcome>;
10
19
  /** Run one `docker` command to completion. */
11
- export declare function docker(args: readonly string[]): Promise<DockerOutcome>;
20
+ export declare function docker(args: readonly string[], options?: DockerRunOptions): Promise<DockerOutcome>;
12
21
  /**
13
22
  * How this machine's Docker reaches the host: Docker Desktop (any OS)
14
23
  * can't see the host's loopback; a Linux engine can share the host
@@ -19,7 +28,7 @@ export declare function detectRuntimeNetwork(): Promise<RuntimeNetwork>;
19
28
  export declare function runtimeContainerName(packDir: string): string;
20
29
  /**
21
30
  * Make sure the image is here, pulling it if not. A private image needs
22
- * `docker login` first; the error says so.
31
+ * a registry login first (`kindgi auth registry`); the error says so.
23
32
  */
24
33
  export declare function ensureRuntimeImage(image: string, onProgress: (line: string) => void): Promise<{
25
34
  readonly kind: 'ok';
@@ -1 +1 @@
1
- {"version":3,"file":"runtime-container.d.ts","sourceRoot":"","sources":["../../src/dev/runtime-container.ts"],"names":[],"mappings":"AA0BA,MAAM,MAAM,cAAc,GAAG,OAAO,GAAG,cAAc,CAAC;AAEtD,sEAAsE;AACtE,eAAO,MAAM,cAAc,OAAO,CAAC;AAEnC,MAAM,WAAW,aAAa;IAC5B,+DAA+D;IAC/D,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACzB;AAED,8CAA8C;AAC9C,wBAAgB,MAAM,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,GAAG,OAAO,CAAC,aAAa,CAAC,CActE;AAMD;;;;GAIG;AACH,wBAAsB,oBAAoB,IAAI,OAAO,CAAC,cAAc,CAAC,CAIpE;AAED,8FAA8F;AAC9F,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAE5D;AAED;;;GAGG;AACH,wBAAsB,kBAAkB,CACtC,KAAK,EAAE,MAAM,EACb,UAAU,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,GACjC,OAAO,CAAC;IAAE,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAA;CAAE,GAAG;IAAE,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC,CAczF;AAED,MAAM,WAAW,uBAAuB;IACtC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,0DAA0D;IAC1D,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,wDAAwD;IACxD,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,OAAO,EAAE,cAAc,CAAC;IACjC,mEAAmE;IACnE,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,wDAAwD;IACxD,QAAQ,CAAC,iBAAiB,CAAC,EAAE,MAAM,CAAC;IACpC,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC;IACjC,qCAAqC;IACrC,QAAQ,CAAC,KAAK,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;CACxC;AAED,MAAM,WAAW,uBAAuB;IACtC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,4DAA4D;IAC5D,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACvB;AAED,4DAA4D;AAC5D,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,uBAAuB,GAAG,MAAM,EAAE,CAuBvF;AAKD;;;GAGG;AACH,wBAAsB,qBAAqB,CACzC,OAAO,EAAE,uBAAuB,EAChC,IAAI,GAAE;IAAE,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,KAAK,CAAA;CAAO,GACxE,OAAO,CAAC,uBAAuB,CAAC,CAgElC"}
1
+ {"version":3,"file":"runtime-container.d.ts","sourceRoot":"","sources":["../../src/dev/runtime-container.ts"],"names":[],"mappings":"AA2BA,MAAM,MAAM,cAAc,GAAG,OAAO,GAAG,cAAc,CAAC;AAEtD,sEAAsE;AACtE,eAAO,MAAM,cAAc,OAAO,CAAC;AAEnC,MAAM,WAAW,aAAa;IAC5B,+DAA+D;IAC/D,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,gBAAgB;IAC/B;;;OAGG;IACH,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,mFAAmF;AACnF,MAAM,MAAM,YAAY,GAAG,CACzB,IAAI,EAAE,SAAS,MAAM,EAAE,EACvB,OAAO,CAAC,EAAE,gBAAgB,KACvB,OAAO,CAAC,aAAa,CAAC,CAAC;AAE5B,8CAA8C;AAC9C,wBAAgB,MAAM,CACpB,IAAI,EAAE,SAAS,MAAM,EAAE,EACvB,OAAO,GAAE,gBAAqB,GAC7B,OAAO,CAAC,aAAa,CAAC,CAsBxB;AAMD;;;;GAIG;AACH,wBAAsB,oBAAoB,IAAI,OAAO,CAAC,cAAc,CAAC,CAIpE;AAED,8FAA8F;AAC9F,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAE5D;AAED;;;GAGG;AACH,wBAAsB,kBAAkB,CACtC,KAAK,EAAE,MAAM,EACb,UAAU,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,GACjC,OAAO,CAAC;IAAE,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAA;CAAE,GAAG;IAAE,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC,CAczF;AAED,MAAM,WAAW,uBAAuB;IACtC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,0DAA0D;IAC1D,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,wDAAwD;IACxD,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,OAAO,EAAE,cAAc,CAAC;IACjC,mEAAmE;IACnE,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,wDAAwD;IACxD,QAAQ,CAAC,iBAAiB,CAAC,EAAE,MAAM,CAAC;IACpC,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC;IACjC,qCAAqC;IACrC,QAAQ,CAAC,KAAK,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;CACxC;AAED,MAAM,WAAW,uBAAuB;IACtC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,4DAA4D;IAC5D,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACvB;AAED,4DAA4D;AAC5D,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,uBAAuB,GAAG,MAAM,EAAE,CAuBvF;AAKD;;;GAGG;AACH,wBAAsB,qBAAqB,CACzC,OAAO,EAAE,uBAAuB,EAChC,IAAI,GAAE;IAAE,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,KAAK,CAAA;CAAO,GACxE,OAAO,CAAC,uBAAuB,CAAC,CAgElC"}
@@ -16,22 +16,31 @@
16
16
  import { spawn } from 'node:child_process';
17
17
  import { createHash } from 'node:crypto';
18
18
  import { RUNTIME_GOOGLE_CREDENTIALS, RUNTIME_PACK_DIR, RUNTIME_PUBLIC_TOKEN_KEY, } from './runtime-env.js';
19
+ import { isRegistryAuthFailure, registryLoginCommand } from './runtime-registry.js';
19
20
  /** The port the image's server listens on (its `KINDGI_API_PORT`). */
20
21
  export const IMAGE_API_PORT = 4000;
21
22
  /** Run one `docker` command to completion. */
22
- export function docker(args) {
23
+ export function docker(args, options = {}) {
23
24
  return new Promise((resolve) => {
24
- const child = spawn('docker', args, { stdio: ['ignore', 'pipe', 'pipe'] });
25
+ const child = spawn('docker', args, {
26
+ stdio: [options.stdin === undefined ? 'ignore' : 'pipe', 'pipe', 'pipe'],
27
+ });
25
28
  let stdout = '';
26
29
  let stderr = '';
27
- child.stdout.on('data', (chunk) => {
30
+ child.stdout?.on('data', (chunk) => {
28
31
  stdout += chunk.toString();
29
32
  });
30
- child.stderr.on('data', (chunk) => {
33
+ child.stderr?.on('data', (chunk) => {
31
34
  stderr += chunk.toString();
32
35
  });
33
36
  child.once('error', (err) => resolve({ code: null, stdout, stderr: err.message }));
34
37
  child.once('close', (code) => resolve({ code, stdout, stderr }));
38
+ if (options.stdin !== undefined) {
39
+ // `docker` may exit without reading it (a bad flag, or no `docker`
40
+ // at all): the write's EPIPE is reported by the exit, not thrown.
41
+ child.stdin?.on('error', () => undefined);
42
+ child.stdin?.end(options.stdin);
43
+ }
35
44
  });
36
45
  }
37
46
  function lastLines(text, n = 5) {
@@ -54,7 +63,7 @@ export function runtimeContainerName(packDir) {
54
63
  }
55
64
  /**
56
65
  * Make sure the image is here, pulling it if not. A private image needs
57
- * `docker login` first; the error says so.
66
+ * a registry login first (`kindgi auth registry`); the error says so.
58
67
  */
59
68
  export async function ensureRuntimeImage(image, onProgress) {
60
69
  const present = await docker(['image', 'inspect', '--format', '{{.Id}}', image]);
@@ -68,8 +77,8 @@ export async function ensureRuntimeImage(image, onProgress) {
68
77
  if (pulled.code === 0)
69
78
  return { kind: 'ok' };
70
79
  const detail = lastLines(pulled.stderr);
71
- const auth = /unauthorized|denied|authentication required/i.test(pulled.stderr)
72
- ? `\n The runtime image is in private preview: request access at contact@kindgi.com, log in with the pull credentials you receive (docker login ${image.split('/')[0]}), then run kindgi dev again.`
80
+ const auth = isRegistryAuthFailure(pulled.stderr)
81
+ ? `\n The runtime image is in private preview: request access at contact@kindgi.com, log in with the pull credentials you receive (${registryLoginCommand(image)}), then run kindgi dev again.`
73
82
  : '';
74
83
  return { kind: 'error', message: `Couldn't pull ${image}: ${detail}${auth}` };
75
84
  }
@@ -1 +1 @@
1
- {"version":3,"file":"runtime-container.js","sourceRoot":"","sources":["../../src/dev/runtime-container.ts"],"names":[],"mappings":"AAAA,sCAAsC;AACtC,iCAAiC;AAEjC;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAqB,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAC9D,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAEzC,OAAO,EACL,0BAA0B,EAC1B,gBAAgB,EAChB,wBAAwB,GACzB,MAAM,kBAAkB,CAAC;AAI1B,sEAAsE;AACtE,MAAM,CAAC,MAAM,cAAc,GAAG,IAAI,CAAC;AASnC,8CAA8C;AAC9C,MAAM,UAAU,MAAM,CAAC,IAAuB;IAC5C,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QAC7B,MAAM,KAAK,GAAG,KAAK,CAAC,QAAQ,EAAE,IAAI,EAAE,EAAE,KAAK,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC;QAC3E,IAAI,MAAM,GAAG,EAAE,CAAC;QAChB,IAAI,MAAM,GAAG,EAAE,CAAC;QAChB,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,KAAa,EAAE,EAAE;YACxC,MAAM,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;QAC7B,CAAC,CAAC,CAAC;QACH,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,KAAa,EAAE,EAAE;YACxC,MAAM,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;QAC7B,CAAC,CAAC,CAAC;QACH,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;QACnF,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC;IACnE,CAAC,CAAC,CAAC;AACL,CAAC;AAED,SAAS,SAAS,CAAC,IAAY,EAAE,CAAC,GAAG,CAAC;IACpC,OAAO,IAAI,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACtD,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,oBAAoB;IACxC,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO;QAAE,OAAO,OAAO,CAAC;IACjD,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,CAAC,MAAM,EAAE,UAAU,EAAE,sBAAsB,CAAC,CAAC,CAAC;IACxE,OAAO,IAAI,CAAC,IAAI,KAAK,CAAC,IAAI,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,cAAc,CAAC;AAC3F,CAAC;AAED,8FAA8F;AAC9F,MAAM,UAAU,oBAAoB,CAAC,OAAe;IAClD,OAAO,sBAAsB,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC;AACjG,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,KAAa,EACb,UAAkC;IAElC,MAAM,OAAO,GAAG,MAAM,MAAM,CAAC,CAAC,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,SAAS,EAAE,KAAK,CAAC,CAAC,CAAC;IACjF,IAAI,OAAO,CAAC,IAAI,KAAK,CAAC;QAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;IAC9C,IAAI,OAAO,CAAC,IAAI,KAAK,IAAI,EAAE,CAAC;QAC1B,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,2BAA2B,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC;IACjF,CAAC;IACD,UAAU,CAAC,oCAAoC,KAAK,sBAAsB,CAAC,CAAC;IAC5E,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC;IAC7C,IAAI,MAAM,CAAC,IAAI,KAAK,CAAC;QAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;IAC7C,MAAM,MAAM,GAAG,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IACxC,MAAM,IAAI,GAAG,8CAA8C,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC;QAC7E,CAAC,CAAC,iJAAiJ,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,+BAA+B;QACrM,CAAC,CAAC,EAAE,CAAC;IACP,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,iBAAiB,KAAK,KAAK,MAAM,GAAG,IAAI,EAAE,EAAE,CAAC;AAChF,CAAC;AA0BD,4DAA4D;AAC5D,MAAM,UAAU,cAAc,CAAC,IAAY,EAAE,OAAgC;IAC3E,MAAM,IAAI,GAAG,CAAC,KAAK,EAAE,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,YAAY,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;IACxF,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,GAAG,OAAO,CAAC,OAAO,IAAI,gBAAgB,EAAE,CAAC,CAAC;IAChE,IAAI,OAAO,CAAC,iBAAiB,KAAK,SAAS,EAAE,CAAC;QAC5C,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,GAAG,OAAO,CAAC,iBAAiB,IAAI,0BAA0B,KAAK,CAAC,CAAC;IACzF,CAAC;IACD,IAAI,OAAO,CAAC,cAAc,KAAK,SAAS,EAAE,CAAC;QACzC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,GAAG,OAAO,CAAC,cAAc,IAAI,wBAAwB,KAAK,CAAC,CAAC;IACpF,CAAC;IACD,IAAI,OAAO,CAAC,OAAO,KAAK,cAAc,EAAE,CAAC;QACvC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;QAC/B,yEAAyE;QACzE,IAAI,OAAO,OAAO,CAAC,MAAM,KAAK,UAAU,IAAI,OAAO,OAAO,CAAC,MAAM,KAAK,UAAU,EAAE,CAAC;YACjF,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,OAAO,CAAC,MAAM,EAAE,IAAI,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;QACjE,CAAC;IACH,CAAC;SAAM,CAAC;QACN,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,aAAa,OAAO,CAAC,QAAQ,IAAI,cAAc,EAAE,CAAC,CAAC;QAC1E,mEAAmE;QACnE,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,mCAAmC,CAAC,CAAC;IAC/D,CAAC;IACD,sEAAsE;IACtE,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,sBAAsB,EAAE,cAAc,EAAE,qBAAqB,CAAC,CAAC;IACxF,OAAO,IAAI,CAAC;AACd,CAAC;AAED,mEAAmE;AACnE,MAAM,eAAe,GAAG,WAAW,gBAAgB,GAAG,CAAC;AAEvD;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,qBAAqB,CACzC,OAAgC,EAChC,OAAuE,EAAE;IAEzE,MAAM,IAAI,GAAG,oBAAoB,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IACnD,MAAM,MAAM,CAAC,CAAC,IAAI,EAAE,SAAS,EAAE,IAAI,CAAC,CAAC,CAAC;IACtC,MAAM,OAAO,GAAG,MAAM,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC;IAC5D,IAAI,OAAO,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;QACvB,MAAM,IAAI,KAAK,CAAC,sBAAsB,SAAS,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IACrE,CAAC;IAED,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,IAAI,IAAI,GAA6B,KAAK,CAAC,QAAQ,EAAE,CAAC,MAAM,EAAE,UAAU,EAAE,IAAI,CAAC,EAAE;QAC/E,KAAK,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC;KAClC,CAAC,CAAC;IACH,MAAM,OAAO,GAAG,CAAC,KAAa,EAAE,EAAE;QAChC,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;YAChD,IAAI,IAAI,KAAK,EAAE;gBAAE,SAAS;YAC1B,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACjB,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACtB,CAAC;IACH,CAAC,CAAC;IACF,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACjC,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAEjC,MAAM,IAAI,GAAG,KAAK,IAAI,EAAE;QACtB,IAAI,EAAE,IAAI,EAAE,CAAC;QACb,IAAI,GAAG,SAAS,CAAC;QACjB,MAAM,MAAM,CAAC,CAAC,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC;IAC/C,CAAC,CAAC;IAEF,MAAM,OAAO,GAAG,oBAAoB,OAAO,CAAC,QAAQ,EAAE,CAAC;IACvD,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC;IACpC,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,IAAI,CAAC,SAAS,IAAI,OAAO,CAAC,CAAC;IAC1D,SAAS,CAAC;QACR,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,GAAG,OAAO,SAAS,EAAE,EAAE,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;aACvF,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aACjB,KAAK,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC;QACtB,uEAAuE;QACvE,IAAI,OAAO,IAAI,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,eAAe,CAAC,CAAC;YAAE,MAAM;QACvE,MAAM,OAAO,GAAG,MAAM,MAAM,CAAC,CAAC,SAAS,EAAE,UAAU,EAAE,oBAAoB,EAAE,IAAI,CAAC,CAAC,CAAC;QAClF,IAAI,OAAO,CAAC,IAAI,KAAK,CAAC,IAAI,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,MAAM,EAAE,CAAC;YAC3D,MAAM,IAAI,EAAE,CAAC;YACb,MAAM,IAAI,KAAK,CACb,yDAAyD,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CACvF,CAAC;QACJ,CAAC;QACD,qEAAqE;QACrE,wEAAwE;QACxE,IACE,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;YAC1C,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,eAAe,CAAC,CAAC,EACjD,CAAC;YACD,MAAM,IAAI,EAAE,CAAC;YACb,MAAM,IAAI,KAAK,CACb,GAAG,OAAO,CAAC,KAAK,oHAAoH,CACrI,CAAC;QACJ,CAAC;QACD,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,QAAQ,EAAE,CAAC;YAC1B,MAAM,IAAI,EAAE,CAAC;YACb,MAAM,IAAI,KAAK,CACb,qDAAqD,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CACnF,CAAC;QACJ,CAAC;QACD,MAAM,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;IAC/C,CAAC;IACD,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC;AAC3D,CAAC"}
1
+ {"version":3,"file":"runtime-container.js","sourceRoot":"","sources":["../../src/dev/runtime-container.ts"],"names":[],"mappings":"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"}