@geekmidas/cli 10.0.0-alpha.49 → 10.0.0-alpha.50
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/dist/{HostingerProvider-Bh6K7QYz.mjs → HostingerProvider-GF6NAZAK.mjs} +2 -2
- package/dist/{HostingerProvider-Bh6K7QYz.mjs.map → HostingerProvider-GF6NAZAK.mjs.map} +1 -1
- package/dist/index.cjs +242 -46
- package/dist/index.cjs.map +1 -1
- package/dist/index.mjs +239 -49
- package/dist/index.mjs.map +1 -1
- package/dist/{migrate-DhxTIA0z.mjs → migrate-B00XpVaO.mjs} +2 -2
- package/dist/{migrate-DhxTIA0z.mjs.map → migrate-B00XpVaO.mjs.map} +1 -1
- package/dist/{migrate-BgEY9pdP.cjs → migrate-CNlew9Ek.cjs} +2 -2
- package/dist/{migrate-BgEY9pdP.cjs.map → migrate-CNlew9Ek.cjs.map} +1 -1
- package/dist/{workspace-cb6U29EL.mjs → workspace-BsbxbqV-.mjs} +51 -7
- package/dist/workspace-BsbxbqV-.mjs.map +1 -0
- package/dist/{workspace-vafrzZTC.cjs → workspace-j6ZxvJqq.cjs} +50 -6
- package/dist/workspace-j6ZxvJqq.cjs.map +1 -0
- package/package.json +14 -14
- package/dist/workspace-cb6U29EL.mjs.map +0 -1
- package/dist/workspace-vafrzZTC.cjs.map +0 -1
package/dist/index.mjs
CHANGED
|
@@ -5,7 +5,7 @@ import { d as parseModuleConfig, f as appKey, l as loadWorkspaceConfig, n as Not
|
|
|
5
5
|
import { D as assertDeployedStage, E as TEST_STAGE, O as deployedProblems, T as InvalidStages, a as getAppBuildOrder, b as getDeployTargetError, k as stageProblems, m as stripPublicPrefix, o as getAppGkmConfig, p as getPublicEnvPrefix, t as allConstructGlobs, x as isDeployTargetSupported } from "./workspace-DNzWgM1J.mjs";
|
|
6
6
|
import { a as withCustomSecret, i as toEmbeddableSecrets, n as maskPassword, t as initStageSecrets } from "./storage-BzaUxmqe.mjs";
|
|
7
7
|
import { a as getKeyPath, i as FileSecretsStore, n as secretsStoreFor } from "./store-DeGATCS-.mjs";
|
|
8
|
-
import { C as loadEnvFiles, S as isPortAvailable, T as prepareEntryCredentials, _ as fakeKey, a as reconcileWorkspace, b as createEntryWrapper, c as LOCAL_CA_PATH, d as postgresDatabaseNames, f as quoteIdentifier, g as describeServices, h as rootSite, i as derivedContainers, l as forgetState, m as resourceName, n as backendsOf$1, p as pgClient, r as constructGlobs, s as COMPOSE_PATH, t as FAKE_ENV, u as applyPostgres, v as primaryPortKey, w as loadSecretsForApp, x as findAvailablePort, y as createCredentialsPreload } from "./workspace-
|
|
8
|
+
import { C as loadEnvFiles, S as isPortAvailable, T as prepareEntryCredentials, _ as fakeKey, a as reconcileWorkspace, b as createEntryWrapper, c as LOCAL_CA_PATH, d as postgresDatabaseNames, f as quoteIdentifier, g as describeServices, h as rootSite, i as derivedContainers, l as forgetState, m as resourceName, n as backendsOf$1, p as pgClient, r as constructGlobs, s as COMPOSE_PATH, t as FAKE_ENV, u as applyPostgres, v as primaryPortKey, w as loadSecretsForApp, x as findAvailablePort, y as createCredentialsPreload } from "./workspace-BsbxbqV-.mjs";
|
|
9
9
|
import { n as EndpointGenerator, r as runtimeFor } from "./OpenApiTsGenerator-BzIGy8KE.mjs";
|
|
10
10
|
import { generateOpenApi, openapiCommand, resolveOpenApiConfig } from "./openapi.mjs";
|
|
11
11
|
import { a as writeTestHarness, c as driversFor, i as TEST_MANIFEST_ENV, n as TEST_READY_FILE, o as SubscriberGenerator, s as cacheBackendsIn, t as TEST_READY_ENV } from "./ready-WfT-eWlm.mjs";
|
|
@@ -19,7 +19,7 @@ import { copyFileSync, existsSync, mkdirSync, readFileSync, unlinkSync, writeFil
|
|
|
19
19
|
import { mkdir, readFile, rm, writeFile } from "node:fs/promises";
|
|
20
20
|
import { homedir } from "node:os";
|
|
21
21
|
import { basename, dirname, isAbsolute, join, parse, relative, resolve } from "node:path";
|
|
22
|
-
import { execFile, execSync, spawn } from "node:child_process";
|
|
22
|
+
import { execFile, execFileSync, execSync, spawn } from "node:child_process";
|
|
23
23
|
import { cacheTable, canonicalId, cloudName, cookieDomain, dependentsOf, externalApiUrl, kebabCase, migrationFolder, mobileOrigins, provideKey, provisionOrder, schemeBase, scopedName, serviceKey } from "@geekmidas/manifest";
|
|
24
24
|
import fg from "fast-glob";
|
|
25
25
|
import chokidar from "chokidar";
|
|
@@ -42,7 +42,7 @@ import { Queue } from "@geekmidas/constructs/queue";
|
|
|
42
42
|
import { Topic } from "@geekmidas/constructs/topic";
|
|
43
43
|
import { lookup } from "node:dns/promises";
|
|
44
44
|
//#region package.json
|
|
45
|
-
var version = "10.0.0-alpha.
|
|
45
|
+
var version = "10.0.0-alpha.50";
|
|
46
46
|
//#endregion
|
|
47
47
|
//#region src/auth/credentials.ts
|
|
48
48
|
/**
|
|
@@ -551,6 +551,181 @@ var UnsupportedPlatform = class extends Error {
|
|
|
551
551
|
}
|
|
552
552
|
};
|
|
553
553
|
//#endregion
|
|
554
|
+
//#region src/dev/appPorts.ts
|
|
555
|
+
/**
|
|
556
|
+
* Which local port each app answers on — and what to do when it is taken.
|
|
557
|
+
*
|
|
558
|
+
* An app's port used to be fixed: 3000, 3001, … and `gkm dev` refused to start
|
|
559
|
+
* if anything held one. That is right when the holder is this same app, left
|
|
560
|
+
* running by a previous `gkm dev` — moving would start a second copy beside it.
|
|
561
|
+
* It is wrong when the holder is another project's dev server, which also
|
|
562
|
+
* defaults to 3000: two projects could not run at once, and nothing about the
|
|
563
|
+
* app needs that port. A browser reaches it through the edge, whose URL carries
|
|
564
|
+
* no app port, and every address a phone or a route uses is derived on each
|
|
565
|
+
* start.
|
|
566
|
+
*
|
|
567
|
+
* So the holder is asked who it is. Every app process gkm starts is tagged with
|
|
568
|
+
* {@link APP_TAG_ENV} — the workspace and the app — and children inherit it, so
|
|
569
|
+
* whatever actually binds the port (`next-server`, a Metro worker, the tsx
|
|
570
|
+
* server) carries it. A held port whose holder carries this app's tag is a
|
|
571
|
+
* leftover, and is refused; anything else — untagged, another workspace's,
|
|
572
|
+
* unreadable — is not ours, and the app moves to the next free port.
|
|
573
|
+
*
|
|
574
|
+
* The choice is kept in `.gkm/app-ports.json`, not recomputed: an app that
|
|
575
|
+
* moved stays where it moved, so a bookmark or a phone's saved address does not
|
|
576
|
+
* break the next time the other project happens to be stopped. Local only —
|
|
577
|
+
* `gkm deploy` and `gkm docker` never read it.
|
|
578
|
+
*/
|
|
579
|
+
var appPorts_exports = /* @__PURE__ */ __exportAll({
|
|
580
|
+
APP_TAG_ENV: () => APP_TAG_ENV,
|
|
581
|
+
appTag: () => appTag,
|
|
582
|
+
assignAppPorts: () => assignAppPorts,
|
|
583
|
+
describeHolder: () => describeHolder,
|
|
584
|
+
holderOf: () => holderOf,
|
|
585
|
+
savedAppPorts: () => savedAppPorts,
|
|
586
|
+
withAppPorts: () => withAppPorts
|
|
587
|
+
});
|
|
588
|
+
/** Carried by every app process gkm starts: `<workspace root>#<app>`. */
|
|
589
|
+
const APP_TAG_ENV = "GKM_DEV_APP";
|
|
590
|
+
const APP_PORTS_PATH = ".gkm/app-ports.json";
|
|
591
|
+
/** The tag an app's processes carry. The root is encoded, so it has no spaces. */
|
|
592
|
+
function appTag(root, app) {
|
|
593
|
+
return `${encodeURIComponent(resolve(root))}#${app}`;
|
|
594
|
+
}
|
|
595
|
+
/** Says, as `command (pid N)`, what holds a port. */
|
|
596
|
+
function describeHolder(holder) {
|
|
597
|
+
if (!holder) return "another process";
|
|
598
|
+
return `${holder.command ?? "a process"} (pid ${holder.pid})`;
|
|
599
|
+
}
|
|
600
|
+
/**
|
|
601
|
+
* Who is listening on a port, read the way a person would: `lsof` for the
|
|
602
|
+
* pid, then that process's environment for its tag — `/proc/<pid>/environ` on
|
|
603
|
+
* Linux, `ps eww` elsewhere. Both work for the user's own processes, which is
|
|
604
|
+
* every process gkm starts; one that cannot be read has no tag, so is not ours.
|
|
605
|
+
*/
|
|
606
|
+
function holderOf(port) {
|
|
607
|
+
let out;
|
|
608
|
+
try {
|
|
609
|
+
out = execFileSync("lsof", [
|
|
610
|
+
"-nP",
|
|
611
|
+
`-iTCP:${port}`,
|
|
612
|
+
"-sTCP:LISTEN",
|
|
613
|
+
"-Fpc"
|
|
614
|
+
], {
|
|
615
|
+
encoding: "utf8",
|
|
616
|
+
stdio: [
|
|
617
|
+
"ignore",
|
|
618
|
+
"pipe",
|
|
619
|
+
"ignore"
|
|
620
|
+
]
|
|
621
|
+
});
|
|
622
|
+
} catch {
|
|
623
|
+
return;
|
|
624
|
+
}
|
|
625
|
+
const pid = Number(out.match(/^p(\d+)/m)?.[1]);
|
|
626
|
+
if (!pid) return void 0;
|
|
627
|
+
const command = out.match(/^c(.+)$/m)?.[1];
|
|
628
|
+
const tag = tagOf(pid);
|
|
629
|
+
return {
|
|
630
|
+
pid,
|
|
631
|
+
...command ? { command } : {},
|
|
632
|
+
...tag ? { tag } : {}
|
|
633
|
+
};
|
|
634
|
+
}
|
|
635
|
+
function tagOf(pid) {
|
|
636
|
+
const prefix = `${APP_TAG_ENV}=`;
|
|
637
|
+
try {
|
|
638
|
+
return (process.platform === "linux" ? readFileSync(`/proc/${pid}/environ`, "utf8").split("\0") : execFileSync("ps", [
|
|
639
|
+
"eww",
|
|
640
|
+
"-o",
|
|
641
|
+
"command=",
|
|
642
|
+
"-p",
|
|
643
|
+
String(pid)
|
|
644
|
+
], {
|
|
645
|
+
encoding: "utf8",
|
|
646
|
+
stdio: [
|
|
647
|
+
"ignore",
|
|
648
|
+
"pipe",
|
|
649
|
+
"ignore"
|
|
650
|
+
]
|
|
651
|
+
}).split(/\s+/)).find((entry) => entry.startsWith(prefix))?.slice(prefix.length);
|
|
652
|
+
} catch {
|
|
653
|
+
return;
|
|
654
|
+
}
|
|
655
|
+
}
|
|
656
|
+
/** The ports apps were given before, by app name. */
|
|
657
|
+
async function savedAppPorts(root) {
|
|
658
|
+
try {
|
|
659
|
+
return JSON.parse(await readFile(join(root, APP_PORTS_PATH), "utf8"));
|
|
660
|
+
} catch {
|
|
661
|
+
return {};
|
|
662
|
+
}
|
|
663
|
+
}
|
|
664
|
+
async function saveAppPorts(root, ports) {
|
|
665
|
+
await mkdir(join(root, ".gkm"), { recursive: true });
|
|
666
|
+
await writeFile(join(root, APP_PORTS_PATH), `${JSON.stringify(ports, null, 2)}\n`);
|
|
667
|
+
}
|
|
668
|
+
/** The workspace, with each app on the port it was given locally. */
|
|
669
|
+
function withAppPorts(workspace, ports) {
|
|
670
|
+
const apps = Object.fromEntries(Object.entries(workspace.apps).map(([name, app]) => [name, ports[name] ? {
|
|
671
|
+
...app,
|
|
672
|
+
port: ports[name]
|
|
673
|
+
} : app]));
|
|
674
|
+
return {
|
|
675
|
+
...workspace,
|
|
676
|
+
apps
|
|
677
|
+
};
|
|
678
|
+
}
|
|
679
|
+
/**
|
|
680
|
+
* Give each named app a local port: the one it had, or its usual one, unless
|
|
681
|
+
* another project holds it — then the next free one, which is kept.
|
|
682
|
+
*
|
|
683
|
+
* @returns every app's port, the apps that moved, and the apps this workspace
|
|
684
|
+
* already has running (the caller refuses to start those).
|
|
685
|
+
*/
|
|
686
|
+
async function assignAppPorts(workspace, names, deps) {
|
|
687
|
+
const saved = await savedAppPorts(workspace.root);
|
|
688
|
+
const wanted = {};
|
|
689
|
+
for (const name of names) {
|
|
690
|
+
const port = saved[name] ?? workspace.apps[name]?.port;
|
|
691
|
+
if (port) wanted[name] = port;
|
|
692
|
+
}
|
|
693
|
+
const taken = /* @__PURE__ */ new Set([...Object.values(saved), ...Object.values(wanted)]);
|
|
694
|
+
const ports = { ...saved };
|
|
695
|
+
const moved = [];
|
|
696
|
+
const running = [];
|
|
697
|
+
for (const name of Object.keys(wanted).sort()) {
|
|
698
|
+
const want = wanted[name];
|
|
699
|
+
ports[name] = want;
|
|
700
|
+
if (await deps.free(want)) continue;
|
|
701
|
+
const holder = deps.holder(want);
|
|
702
|
+
if (holder?.tag === appTag(workspace.root, name)) {
|
|
703
|
+
running.push({
|
|
704
|
+
app: name,
|
|
705
|
+
port: want,
|
|
706
|
+
holder
|
|
707
|
+
});
|
|
708
|
+
continue;
|
|
709
|
+
}
|
|
710
|
+
let next = want + 1;
|
|
711
|
+
while (taken.has(next) || !await deps.free(next)) next += 1;
|
|
712
|
+
taken.add(next);
|
|
713
|
+
ports[name] = next;
|
|
714
|
+
moved.push({
|
|
715
|
+
app: name,
|
|
716
|
+
from: want,
|
|
717
|
+
to: next,
|
|
718
|
+
holder
|
|
719
|
+
});
|
|
720
|
+
}
|
|
721
|
+
await saveAppPorts(workspace.root, ports);
|
|
722
|
+
return {
|
|
723
|
+
ports,
|
|
724
|
+
moved,
|
|
725
|
+
running
|
|
726
|
+
};
|
|
727
|
+
}
|
|
728
|
+
//#endregion
|
|
554
729
|
//#region ../../node_modules/.pnpm/@hono+node-server@1.19.5_hono@4.13.8/node_modules/@hono/node-server/dist/index.mjs
|
|
555
730
|
var RequestError = class extends Error {
|
|
556
731
|
constructor(message, options) {
|
|
@@ -1186,6 +1361,7 @@ async function devCommand(options) {
|
|
|
1186
1361
|
throw error;
|
|
1187
1362
|
});
|
|
1188
1363
|
if (!appConfig) {
|
|
1364
|
+
logger$9.log("🔎 Reading gkm.config.ts and the constructs");
|
|
1189
1365
|
const { workspace: everything } = await loadWorkspaceConfig();
|
|
1190
1366
|
return workspaceDevCommand(everything, options);
|
|
1191
1367
|
}
|
|
@@ -1193,8 +1369,15 @@ async function devCommand(options) {
|
|
|
1193
1369
|
const appRoot = appConfig.appRoot;
|
|
1194
1370
|
const secretsRoot = appConfig.workspaceRoot;
|
|
1195
1371
|
const workspaceAppName = appConfig.appName;
|
|
1196
|
-
const
|
|
1197
|
-
|
|
1372
|
+
const assigned = await assignAppPorts(appConfig.workspace, [workspaceAppName], {
|
|
1373
|
+
free: isPortAvailable,
|
|
1374
|
+
holder: holderOf
|
|
1375
|
+
});
|
|
1376
|
+
if (assigned.running.length > 0) throw new WorkspacePortsInUse(assigned.running);
|
|
1377
|
+
for (const { app, from, to, holder } of assigned.moved) logger$9.log(`↪️ ${app}: ${from} is held by ${describeHolder(holder)}, which is not this workspace's — using ${to}`);
|
|
1378
|
+
const workspace = withAppPorts(appConfig.workspace, assigned.ports);
|
|
1379
|
+
const workspaceAppPort = assigned.ports[workspaceAppName] ?? appConfig.app.port;
|
|
1380
|
+
process.env[APP_TAG_ENV] = appTag(appConfig.workspaceRoot, workspaceAppName);
|
|
1198
1381
|
if (appConfig.app.entry) {
|
|
1199
1382
|
logger$9.log(`📄 Using entry point: ${appConfig.app.entry}`);
|
|
1200
1383
|
return entryDevCommand({
|
|
@@ -1227,6 +1410,7 @@ async function devCommand(options) {
|
|
|
1227
1410
|
bustCache,
|
|
1228
1411
|
serveEmpty: true
|
|
1229
1412
|
}));
|
|
1413
|
+
logger$9.log(`🔨 Building ${workspaceAppName ?? "the app"}`);
|
|
1230
1414
|
const initial = await build();
|
|
1231
1415
|
const runtime = config.runtime ?? "node";
|
|
1232
1416
|
let secretsJsonPath;
|
|
@@ -1235,7 +1419,8 @@ async function devCommand(options) {
|
|
|
1235
1419
|
if (workspace) {
|
|
1236
1420
|
const reconciled = await reconcileWorkspace(workspace, {
|
|
1237
1421
|
stage: workspace.stages.local,
|
|
1238
|
-
...options.fake ? { fake: true } : {}
|
|
1422
|
+
...options.fake ? { fake: true } : {},
|
|
1423
|
+
progress: (message) => logger$9.log(message)
|
|
1239
1424
|
});
|
|
1240
1425
|
if (reconciled.services.length > 0) {
|
|
1241
1426
|
logger$9.log("🐳 Services");
|
|
@@ -1494,7 +1679,14 @@ async function loadDevSecrets(workspace) {
|
|
|
1494
1679
|
* 3. Generate dependency URLs ({APP_NAME}_URL)
|
|
1495
1680
|
* 4. Spawn turbo run dev with injected env vars
|
|
1496
1681
|
*/
|
|
1497
|
-
async function workspaceDevCommand(
|
|
1682
|
+
async function workspaceDevCommand(configured, options) {
|
|
1683
|
+
const assigned = await assignAppPorts(configured, options.app ? [options.app] : options.filter ? [] : Object.keys(configured.apps), {
|
|
1684
|
+
free: isPortAvailable,
|
|
1685
|
+
holder: holderOf
|
|
1686
|
+
});
|
|
1687
|
+
if (assigned.running.length > 0) throw new WorkspacePortsInUse(assigned.running);
|
|
1688
|
+
for (const { app, from, to, holder } of assigned.moved) logger$9.log(`↪️ ${app}: ${from} is held by ${describeHolder(holder)}, which is not this workspace's — using ${to}`);
|
|
1689
|
+
const workspace = withAppPorts(configured, assigned.ports);
|
|
1498
1690
|
const appCount = Object.keys(workspace.apps).length;
|
|
1499
1691
|
const frontendApps = Object.entries(workspace.apps).filter(([_, app]) => app.type === "web");
|
|
1500
1692
|
const conflicts = checkPortConflicts(workspace);
|
|
@@ -1518,7 +1710,8 @@ async function workspaceDevCommand(workspace, options) {
|
|
|
1518
1710
|
const rawSecrets = await loadDevSecrets(workspace);
|
|
1519
1711
|
const reconciled = await reconcileWorkspace(workspace, {
|
|
1520
1712
|
stage: workspace.stages.local,
|
|
1521
|
-
...options.fake ? { fake: true } : {}
|
|
1713
|
+
...options.fake ? { fake: true } : {},
|
|
1714
|
+
progress: (message) => logger$9.log(message)
|
|
1522
1715
|
});
|
|
1523
1716
|
if (reconciled.services.length > 0) {
|
|
1524
1717
|
logger$9.log("🐳 Services");
|
|
@@ -1530,10 +1723,11 @@ async function workspaceDevCommand(workspace, options) {
|
|
|
1530
1723
|
};
|
|
1531
1724
|
const fakes = options.fake ? await serveFakes(reconciled.fakes, reconciled.ports) : [];
|
|
1532
1725
|
for (const { id, port } of fakes) logger$9.log(`🎭 ${id} fake: http://localhost:${port}`);
|
|
1726
|
+
logger$9.log(options.migrate || options.seed ? "🗄️ Migrating the databases" : "🗄️ Checking for pending migrations");
|
|
1533
1727
|
if (options.migrate || options.seed) {
|
|
1534
|
-
const { prepareDevDatabases } = await import("./migrate-
|
|
1728
|
+
const { prepareDevDatabases } = await import("./migrate-B00XpVaO.mjs");
|
|
1535
1729
|
await prepareDevDatabases(workspace, reconciled.env, { seed: !!options.seed });
|
|
1536
|
-
} else await import("./migrate-
|
|
1730
|
+
} else await import("./migrate-B00XpVaO.mjs").then(({ reportPendingMigrations }) => reportPendingMigrations(workspace, reconciled.env)).catch((error) => {
|
|
1537
1731
|
logger$9.log(`⚠️ Could not check for pending migrations: ${error instanceof Error ? error.message : String(error)}`);
|
|
1538
1732
|
});
|
|
1539
1733
|
const appUrls = {};
|
|
@@ -1595,17 +1789,7 @@ async function workspaceDevCommand(workspace, options) {
|
|
|
1595
1789
|
...configPath ? { GKM_CONFIG_PATH: configPath } : {},
|
|
1596
1790
|
...options.fake ? { [FAKE_ENV]: "1" } : {}
|
|
1597
1791
|
};
|
|
1598
|
-
|
|
1599
|
-
const held = [];
|
|
1600
|
-
for (const appName of scoped) {
|
|
1601
|
-
const port = workspace.apps[appName]?.port;
|
|
1602
|
-
if (port && !await isPortAvailable(port)) held.push({
|
|
1603
|
-
app: appName,
|
|
1604
|
-
port,
|
|
1605
|
-
holder: listenerOn(port)
|
|
1606
|
-
});
|
|
1607
|
-
}
|
|
1608
|
-
if (held.length > 0) throw new WorkspacePortsInUse(held);
|
|
1792
|
+
logger$9.log(`🚀 Starting ${appCount} app(s) — each builds before it answers, and says so when it is ready`);
|
|
1609
1793
|
const turboProcess = spawn("pnpm", [
|
|
1610
1794
|
"turbo",
|
|
1611
1795
|
"run",
|
|
@@ -1900,10 +2084,16 @@ var DevPortInUse = class extends Error {
|
|
|
1900
2084
|
}
|
|
1901
2085
|
};
|
|
1902
2086
|
/** Apps whose provisioned ports are held before the workspace starts. */
|
|
2087
|
+
/**
|
|
2088
|
+
* This workspace's own apps are already running — left by a previous start.
|
|
2089
|
+
*
|
|
2090
|
+
* Only these are refused: a port another project holds is moved off instead
|
|
2091
|
+
* (see `assignAppPorts`), but moving off our own would start a second copy.
|
|
2092
|
+
*/
|
|
1903
2093
|
var WorkspacePortsInUse = class extends Error {
|
|
1904
2094
|
held;
|
|
1905
2095
|
constructor(held) {
|
|
1906
|
-
super(`
|
|
2096
|
+
super(`This workspace's apps are already running:\n${held.map(({ app, port, holder }) => ` ${app}: ${port} — ${describeHolder(holder)}`).join("\n")}\nA previous \`gkm dev\` left them behind. Stop them (kill the pids above) and start again. Nothing was started.`);
|
|
1907
2097
|
this.held = held;
|
|
1908
2098
|
this.name = "WorkspacePortsInUse";
|
|
1909
2099
|
}
|
|
@@ -3999,7 +4189,7 @@ async function createDnsProvider(options) {
|
|
|
3999
4189
|
if (isDnsProvider(config.provider)) return config.provider;
|
|
4000
4190
|
const provider = config.provider;
|
|
4001
4191
|
if (provider === "hostinger") {
|
|
4002
|
-
const { HostingerProvider } = await import("./HostingerProvider-
|
|
4192
|
+
const { HostingerProvider } = await import("./HostingerProvider-GF6NAZAK.mjs");
|
|
4003
4193
|
return new HostingerProvider();
|
|
4004
4194
|
}
|
|
4005
4195
|
if (provider === "route53") {
|
|
@@ -9126,26 +9316,26 @@ function loadPackageJson() {
|
|
|
9126
9316
|
* Run: pnpm --filter @geekmidas/cli sync-versions
|
|
9127
9317
|
*/
|
|
9128
9318
|
const GEEKMIDAS_VERSIONS = {
|
|
9129
|
-
"@geekmidas/audit": "~10.0.0-alpha.
|
|
9130
|
-
"@geekmidas/auth": "~10.0.0-alpha.
|
|
9131
|
-
"@geekmidas/cache": "~10.0.0-alpha.
|
|
9132
|
-
"@geekmidas/client": "~10.0.0-alpha.
|
|
9133
|
-
"@geekmidas/cloud": "~10.0.0-alpha.
|
|
9134
|
-
"@geekmidas/constructs": "~10.0.0-alpha.
|
|
9135
|
-
"@geekmidas/db": "~10.0.0-alpha.
|
|
9136
|
-
"@geekmidas/emailkit": "~10.0.0-alpha.
|
|
9137
|
-
"@geekmidas/envkit": "~10.0.0-alpha.
|
|
9138
|
-
"@geekmidas/errors": "~10.0.0-alpha.
|
|
9139
|
-
"@geekmidas/events": "~10.0.0-alpha.
|
|
9140
|
-
"@geekmidas/logger": "~10.0.0-alpha.
|
|
9141
|
-
"@geekmidas/manifest": "~10.0.0-alpha.
|
|
9142
|
-
"@geekmidas/rate-limit": "~10.0.0-alpha.
|
|
9143
|
-
"@geekmidas/schema": "~10.0.0-alpha.
|
|
9144
|
-
"@geekmidas/services": "~10.0.0-alpha.
|
|
9145
|
-
"@geekmidas/storage": "~10.0.0-alpha.
|
|
9146
|
-
"@geekmidas/studio": "~10.0.0-alpha.
|
|
9147
|
-
"@geekmidas/telescope": "~10.0.0-alpha.
|
|
9148
|
-
"@geekmidas/testkit": "~10.0.0-alpha.
|
|
9319
|
+
"@geekmidas/audit": "~10.0.0-alpha.50",
|
|
9320
|
+
"@geekmidas/auth": "~10.0.0-alpha.50",
|
|
9321
|
+
"@geekmidas/cache": "~10.0.0-alpha.50",
|
|
9322
|
+
"@geekmidas/client": "~10.0.0-alpha.50",
|
|
9323
|
+
"@geekmidas/cloud": "~10.0.0-alpha.50",
|
|
9324
|
+
"@geekmidas/constructs": "~10.0.0-alpha.50",
|
|
9325
|
+
"@geekmidas/db": "~10.0.0-alpha.50",
|
|
9326
|
+
"@geekmidas/emailkit": "~10.0.0-alpha.50",
|
|
9327
|
+
"@geekmidas/envkit": "~10.0.0-alpha.50",
|
|
9328
|
+
"@geekmidas/errors": "~10.0.0-alpha.50",
|
|
9329
|
+
"@geekmidas/events": "~10.0.0-alpha.50",
|
|
9330
|
+
"@geekmidas/logger": "~10.0.0-alpha.50",
|
|
9331
|
+
"@geekmidas/manifest": "~10.0.0-alpha.50",
|
|
9332
|
+
"@geekmidas/rate-limit": "~10.0.0-alpha.50",
|
|
9333
|
+
"@geekmidas/schema": "~10.0.0-alpha.50",
|
|
9334
|
+
"@geekmidas/services": "~10.0.0-alpha.50",
|
|
9335
|
+
"@geekmidas/storage": "~10.0.0-alpha.50",
|
|
9336
|
+
"@geekmidas/studio": "~10.0.0-alpha.50",
|
|
9337
|
+
"@geekmidas/telescope": "~10.0.0-alpha.50",
|
|
9338
|
+
"@geekmidas/testkit": "~10.0.0-alpha.50",
|
|
9149
9339
|
"@geekmidas/cli": `~${loadPackageJson().version}`
|
|
9150
9340
|
};
|
|
9151
9341
|
//#endregion
|
|
@@ -15888,7 +16078,7 @@ function testDatabases(reconciled) {
|
|
|
15888
16078
|
* starts without the reference data the app needs.
|
|
15889
16079
|
*/
|
|
15890
16080
|
async function migrateTestStage(workspace, env) {
|
|
15891
|
-
const { migrateAndSeed } = await import("./migrate-
|
|
16081
|
+
const { migrateAndSeed } = await import("./migrate-B00XpVaO.mjs");
|
|
15892
16082
|
const { discover } = await import("./discover-Cf2jAcgF.mjs").then((n) => n.n);
|
|
15893
16083
|
const sources = {};
|
|
15894
16084
|
const manifest = await discover({
|
|
@@ -16319,7 +16509,7 @@ program.command("migrate").description("Apply each database construct's migratio
|
|
|
16319
16509
|
try {
|
|
16320
16510
|
const globalOptions = program.opts();
|
|
16321
16511
|
if (globalOptions.cwd) process.chdir(globalOptions.cwd);
|
|
16322
|
-
const { migrateCommand } = await import("./migrate-
|
|
16512
|
+
const { migrateCommand } = await import("./migrate-B00XpVaO.mjs");
|
|
16323
16513
|
await migrateCommand({
|
|
16324
16514
|
...options,
|
|
16325
16515
|
...construct ? { construct } : {}
|
|
@@ -16333,7 +16523,7 @@ program.command("seed").description("Migrate, then run each database construct's
|
|
|
16333
16523
|
try {
|
|
16334
16524
|
const globalOptions = program.opts();
|
|
16335
16525
|
if (globalOptions.cwd) process.chdir(globalOptions.cwd);
|
|
16336
|
-
const { seedCommand } = await import("./migrate-
|
|
16526
|
+
const { seedCommand } = await import("./migrate-B00XpVaO.mjs");
|
|
16337
16527
|
await seedCommand({
|
|
16338
16528
|
...options,
|
|
16339
16529
|
...construct ? { construct } : {}
|
|
@@ -16347,7 +16537,7 @@ program.command("migration").description("Write a construct's next migration: an
|
|
|
16347
16537
|
try {
|
|
16348
16538
|
const globalOptions = program.opts();
|
|
16349
16539
|
if (globalOptions.cwd) process.chdir(globalOptions.cwd);
|
|
16350
|
-
const { migrationCommand } = await import("./migrate-
|
|
16540
|
+
const { migrationCommand } = await import("./migrate-B00XpVaO.mjs");
|
|
16351
16541
|
await migrationCommand({
|
|
16352
16542
|
construct,
|
|
16353
16543
|
...name ? { name } : {}
|
|
@@ -16508,7 +16698,7 @@ program.command("secrets:reconcile").description("Backfill missing custom secret
|
|
|
16508
16698
|
console.error(`No secrets found for stage "${stage}". Run "gkm secrets:init --stage ${stage}" first.`);
|
|
16509
16699
|
process.exit(1);
|
|
16510
16700
|
}
|
|
16511
|
-
const { derivedContainers } = await import("./workspace-
|
|
16701
|
+
const { derivedContainers } = await import("./workspace-BsbxbqV-.mjs").then((n) => n.o);
|
|
16512
16702
|
const result = reconcileMissingSecrets(secrets, workspace, await derivedContainers(workspace, stage));
|
|
16513
16703
|
if (!result) {
|
|
16514
16704
|
console.log(`\n✓ Secrets for stage "${stage}" are up-to-date`);
|
|
@@ -16692,6 +16882,6 @@ program.command("upgrade").description("Upgrade @geekmidas/cli (with --all, ever
|
|
|
16692
16882
|
});
|
|
16693
16883
|
program.parse();
|
|
16694
16884
|
//#endregion
|
|
16695
|
-
export {
|
|
16885
|
+
export { appPorts_exports as a, encryption_exports as i, slug as n, getHostingerToken as o, stamp as r, generateFullstackCustomSecrets as t };
|
|
16696
16886
|
|
|
16697
16887
|
//# sourceMappingURL=index.mjs.map
|