@geekmidas/cli 10.0.0-alpha.32 → 10.0.0-alpha.33
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/{config-URVD4bTj.cjs → config-DMpzmsQL.cjs} +2 -2
- package/dist/{config-URVD4bTj.cjs.map → config-DMpzmsQL.cjs.map} +1 -1
- package/dist/{config-BH3Ki69F.mjs → config-Du8AQJRK.mjs} +2 -2
- package/dist/{config-BH3Ki69F.mjs.map → config-Du8AQJRK.mjs.map} +1 -1
- package/dist/config.cjs +2 -2
- package/dist/config.d.cts +2 -2
- package/dist/config.d.mts +2 -2
- package/dist/config.mjs +2 -2
- package/dist/discover-CMxesskG.mjs.map +1 -1
- package/dist/discover-CroTIm0K.cjs.map +1 -1
- package/dist/{github-BrDmlm1x.mjs → github-DN-92LWP.mjs} +3 -3
- package/dist/{github-BrDmlm1x.mjs.map → github-DN-92LWP.mjs.map} +1 -1
- package/dist/{github-B2fis34P.cjs → github-JhvrmjQp.cjs} +3 -3
- package/dist/{github-B2fis34P.cjs.map → github-JhvrmjQp.cjs.map} +1 -1
- package/dist/{index-p89EzILa.d.mts → index-CAp22ul5.d.cts} +2 -2
- package/dist/{index-p89EzILa.d.mts.map → index-CAp22ul5.d.cts.map} +1 -1
- package/dist/{index-rU9u761a.d.cts → index-DxXMtQNT.d.mts} +2 -2
- package/dist/{index-rU9u761a.d.cts.map → index-DxXMtQNT.d.mts.map} +1 -1
- package/dist/index.cjs +110 -81
- package/dist/index.cjs.map +1 -1
- package/dist/index.mjs +111 -82
- package/dist/index.mjs.map +1 -1
- package/dist/{migrate-BiasgAIN.cjs → migrate-BkytlJlU.cjs} +4 -4
- package/dist/{migrate-BiasgAIN.cjs.map → migrate-BkytlJlU.cjs.map} +1 -1
- package/dist/{migrate-CnPtWnkR.mjs → migrate-D2rtGKYi.mjs} +4 -4
- package/dist/{migrate-CnPtWnkR.mjs.map → migrate-D2rtGKYi.mjs.map} +1 -1
- package/dist/openapi.cjs +1 -1
- package/dist/openapi.d.cts +1 -1
- package/dist/openapi.d.mts +1 -1
- package/dist/openapi.mjs +1 -1
- package/dist/{ready-DXtNfk7v.cjs → ready-CXhoutix.cjs} +108 -25
- package/dist/ready-CXhoutix.cjs.map +1 -0
- package/dist/{ready-CvP3JVEw.mjs → ready-D1BCiaYU.mjs} +106 -29
- package/dist/ready-D1BCiaYU.mjs.map +1 -0
- package/dist/reconcile/public.d.cts +1 -1
- package/dist/reconcile/public.d.mts +1 -1
- package/dist/{types-CzK6hsXP.d.mts → types-BTiu5kwo.d.mts} +26 -1
- package/dist/{types-CzK6hsXP.d.mts.map → types-BTiu5kwo.d.mts.map} +1 -1
- package/dist/{types-DOOAevjG.d.cts → types-Bj_FpeTc.d.cts} +26 -1
- package/dist/{types-DOOAevjG.d.cts.map → types-Bj_FpeTc.d.cts.map} +1 -1
- package/dist/vitest.cjs +1 -1
- package/dist/vitest.mjs +1 -1
- package/dist/workspace/index.cjs +1 -1
- package/dist/workspace/index.d.cts +2 -2
- package/dist/workspace/index.d.mts +2 -2
- package/dist/workspace/index.mjs +1 -1
- package/dist/{workspace-C97QUCIf.mjs → workspace-BNurJoFx.mjs} +3 -3
- package/dist/{workspace-C97QUCIf.mjs.map → workspace-BNurJoFx.mjs.map} +1 -1
- package/dist/{workspace-BhiMkRuA.cjs → workspace-C8TbIWxO.cjs} +3 -3
- package/dist/{workspace-BhiMkRuA.cjs.map → workspace-C8TbIWxO.cjs.map} +1 -1
- package/dist/{workspace-Bav3TVrP.cjs → workspace-CAJk6UmC.cjs} +11 -4
- package/dist/{workspace-Bav3TVrP.cjs.map → workspace-CAJk6UmC.cjs.map} +1 -1
- package/dist/{workspace-T4IVGSoB.mjs → workspace-CsL76tpc.mjs} +11 -4
- package/dist/{workspace-T4IVGSoB.mjs.map → workspace-CsL76tpc.mjs.map} +1 -1
- package/package.json +14 -14
- package/dist/ready-CvP3JVEw.mjs.map +0 -1
- package/dist/ready-DXtNfk7v.cjs.map +0 -1
package/dist/index.mjs
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
#!/usr/bin/env -S npx tsx
|
|
2
2
|
import { n as __require, t as __exportAll } from "./rolldown-runtime-BhDjJH2R.mjs";
|
|
3
3
|
import { c as isPartitionedRoutes, i as ConstructGenerator, t as discover } from "./discover-CMxesskG.mjs";
|
|
4
|
-
import { a as loadConfig, c as parseModuleConfig, i as loadAppConfig, l as appKey, r as getAppNameFromCwd, s as loadWorkspaceConfig, u as derivedApps } from "./config-
|
|
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-
|
|
4
|
+
import { a as loadConfig, c as parseModuleConfig, i as loadAppConfig, l as appKey, r as getAppNameFromCwd, s as loadWorkspaceConfig, u as derivedApps } from "./config-Du8AQJRK.mjs";
|
|
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-CsL76tpc.mjs";
|
|
6
6
|
import { c as getKeyPath, i as setCustomSecret, n as readStageSecrets, o as toEmbeddableSecrets, r as secretsExist, s as writeStageSecrets, t as maskPassword } from "./storage-BjTLjDDp.mjs";
|
|
7
|
-
import { _ as findAvailablePort, b as loadSecretsForApp, c as applyPostgres, d as cacheBackendFor, f as eventsBackendFor, g as createEntryWrapper, h as createCredentialsPreload, i as reconcileWorkspace, l as resourceName, m as storageBackendFor, n as constructGlobs, o as COMPOSE_PATH, p as providerOf, r as derivedContainers, s as LOCAL_CA_PATH, t as backendsOf, u as rootSite, v as isPortAvailable, x as prepareEntryCredentials, y as loadEnvFiles } from "./workspace-
|
|
7
|
+
import { _ as findAvailablePort, b as loadSecretsForApp, c as applyPostgres, d as cacheBackendFor, f as eventsBackendFor, g as createEntryWrapper, h as createCredentialsPreload, i as reconcileWorkspace, l as resourceName, m as storageBackendFor, n as constructGlobs, o as COMPOSE_PATH, p as providerOf, r as derivedContainers, s as LOCAL_CA_PATH, t as backendsOf, u as rootSite, v as isPortAvailable, x as prepareEntryCredentials, y as loadEnvFiles } from "./workspace-BNurJoFx.mjs";
|
|
8
8
|
import { n as EndpointGenerator, r as runtimeFor } from "./OpenApiTsGenerator-hDINScnz.mjs";
|
|
9
9
|
import { generateOpenApi, openapiCommand, resolveOpenApiConfig } from "./openapi.mjs";
|
|
10
|
-
import { a as
|
|
10
|
+
import { a as writeTestHarness, i as TEST_MANIFEST_ENV, n as TEST_READY_FILE, o as cacheBackendsIn, s as driversFor, t as TEST_READY_ENV } from "./ready-D1BCiaYU.mjs";
|
|
11
11
|
import { i as withRoutes, r as withCompute } from "./emit-Bzq7JsMP.mjs";
|
|
12
12
|
import { a as createStageSecrets, c as generateServiceCredentials, i as writeDockerEnvFromSecrets, l as rotateServicePassword, o as generateConnectionUrls, r as generateFullstackCustomSecrets, s as generateSecurePassword, t as reconcileMissingSecrets } from "./reconcile-yNq6Shau.mjs";
|
|
13
13
|
import { createRequire } from "node:module";
|
|
@@ -19,7 +19,7 @@ import { mkdir, readFile, writeFile } from "node:fs/promises";
|
|
|
19
19
|
import { homedir } from "node:os";
|
|
20
20
|
import { basename, dirname, isAbsolute, join, parse, relative, resolve } from "node:path";
|
|
21
21
|
import { execFile, execSync, spawn } from "node:child_process";
|
|
22
|
-
import { cacheTable, canonicalId, cloudName, cookieDomain, dependentsOf, migrationFolder, provideKey, provisionOrder, scopedName, serviceKey } from "@geekmidas/manifest";
|
|
22
|
+
import { cacheTable, canonicalId, cloudName, cookieDomain, dependentsOf, kebabCase, migrationFolder, provideKey, provisionOrder, scopedName, serviceKey } from "@geekmidas/manifest";
|
|
23
23
|
import fg from "fast-glob";
|
|
24
24
|
import chokidar from "chokidar";
|
|
25
25
|
import { createCipheriv, createHash, randomBytes } from "node:crypto";
|
|
@@ -37,7 +37,7 @@ import { Subscriber } from "@geekmidas/constructs/subscribers";
|
|
|
37
37
|
import { Topic } from "@geekmidas/constructs/topic";
|
|
38
38
|
import { lookup } from "node:dns/promises";
|
|
39
39
|
//#region package.json
|
|
40
|
-
var version = "10.0.0-alpha.
|
|
40
|
+
var version = "10.0.0-alpha.33";
|
|
41
41
|
//#endregion
|
|
42
42
|
//#region src/auth/credentials.ts
|
|
43
43
|
/**
|
|
@@ -1087,9 +1087,9 @@ async function workspaceDevCommand(workspace, options) {
|
|
|
1087
1087
|
...reconciled.env
|
|
1088
1088
|
};
|
|
1089
1089
|
if (options.migrate || options.seed) {
|
|
1090
|
-
const { prepareDevDatabases } = await import("./migrate-
|
|
1090
|
+
const { prepareDevDatabases } = await import("./migrate-D2rtGKYi.mjs");
|
|
1091
1091
|
await prepareDevDatabases(workspace, reconciled.env, { seed: !!options.seed });
|
|
1092
|
-
} else await import("./migrate-
|
|
1092
|
+
} else await import("./migrate-D2rtGKYi.mjs").then(({ reportPendingMigrations }) => reportPendingMigrations(workspace, reconciled.env)).catch((error) => {
|
|
1093
1093
|
logger$10.log(`⚠️ Could not check for pending migrations: ${error instanceof Error ? error.message : String(error)}`);
|
|
1094
1094
|
});
|
|
1095
1095
|
const appUrls = {};
|
|
@@ -8635,7 +8635,27 @@ functions it called on the way.
|
|
|
8635
8635
|
${database ? "gkm test # starts services, injects secrets, then runs vitest" : "gkm test"}
|
|
8636
8636
|
\`\`\`
|
|
8637
8637
|
|
|
8638
|
-
Run tests through \`gkm test\`, not \`vitest\` directly${database ? " — it is what starts the database and injects the secrets the suite needs" : ""}
|
|
8638
|
+
Run tests through \`gkm test\`, not \`vitest\` directly${database ? " — it is what starts the database and injects the secrets the suite needs" : ""}.${database ? `
|
|
8639
|
+
|
|
8640
|
+
**Factories, one per database.** \`test/factories/<construct>.ts\` at the
|
|
8641
|
+
project root — \`database.ts\` for \`Database\` — exports
|
|
8642
|
+
\`createFactory(db)\`. A feature test gets each by service name, on that
|
|
8643
|
+
test's transaction — the one \`db.get\` returns and its endpoints use — so
|
|
8644
|
+
ask for it rather than importing and building one. Sign in the way a person
|
|
8645
|
+
does, through \`browser.signIn\`:
|
|
8646
|
+
|
|
8647
|
+
\`\`\`typescript
|
|
8648
|
+
it('reads a user', async ({ browser, db, factories }) => {
|
|
8649
|
+
const factory = await factories.get('database');
|
|
8650
|
+
const ada = await factory.insert('users', { email: 'ada@example.com' });
|
|
8651
|
+
|
|
8652
|
+
await browser.signIn(ada.email);
|
|
8653
|
+
// … act through browser.api …
|
|
8654
|
+
|
|
8655
|
+
const app = await db.get('database');
|
|
8656
|
+
// … assert on what was written …
|
|
8657
|
+
});
|
|
8658
|
+
\`\`\`` : ""}`;
|
|
8639
8659
|
}
|
|
8640
8660
|
//#endregion
|
|
8641
8661
|
//#region src/init/dependencies.ts
|
|
@@ -8763,26 +8783,26 @@ function loadPackageJson() {
|
|
|
8763
8783
|
* Run: pnpm --filter @geekmidas/cli sync-versions
|
|
8764
8784
|
*/
|
|
8765
8785
|
const GEEKMIDAS_VERSIONS = {
|
|
8766
|
-
"@geekmidas/audit": "~10.0.0-alpha.
|
|
8767
|
-
"@geekmidas/auth": "~10.0.0-alpha.
|
|
8768
|
-
"@geekmidas/cache": "~10.0.0-alpha.
|
|
8769
|
-
"@geekmidas/client": "~10.0.0-alpha.
|
|
8770
|
-
"@geekmidas/cloud": "~10.0.0-alpha.
|
|
8771
|
-
"@geekmidas/constructs": "~10.0.0-alpha.
|
|
8772
|
-
"@geekmidas/db": "~10.0.0-alpha.
|
|
8773
|
-
"@geekmidas/emailkit": "~10.0.0-alpha.
|
|
8774
|
-
"@geekmidas/envkit": "~10.0.0-alpha.
|
|
8775
|
-
"@geekmidas/errors": "~10.0.0-alpha.
|
|
8776
|
-
"@geekmidas/events": "~10.0.0-alpha.
|
|
8777
|
-
"@geekmidas/logger": "~10.0.0-alpha.
|
|
8778
|
-
"@geekmidas/manifest": "~10.0.0-alpha.
|
|
8779
|
-
"@geekmidas/rate-limit": "~10.0.0-alpha.
|
|
8780
|
-
"@geekmidas/schema": "~10.0.0-alpha.
|
|
8781
|
-
"@geekmidas/services": "~10.0.0-alpha.
|
|
8782
|
-
"@geekmidas/storage": "~10.0.0-alpha.
|
|
8783
|
-
"@geekmidas/studio": "~10.0.0-alpha.
|
|
8784
|
-
"@geekmidas/telescope": "~10.0.0-alpha.
|
|
8785
|
-
"@geekmidas/testkit": "~10.0.0-alpha.
|
|
8786
|
+
"@geekmidas/audit": "~10.0.0-alpha.33",
|
|
8787
|
+
"@geekmidas/auth": "~10.0.0-alpha.33",
|
|
8788
|
+
"@geekmidas/cache": "~10.0.0-alpha.33",
|
|
8789
|
+
"@geekmidas/client": "~10.0.0-alpha.33",
|
|
8790
|
+
"@geekmidas/cloud": "~10.0.0-alpha.33",
|
|
8791
|
+
"@geekmidas/constructs": "~10.0.0-alpha.33",
|
|
8792
|
+
"@geekmidas/db": "~10.0.0-alpha.33",
|
|
8793
|
+
"@geekmidas/emailkit": "~10.0.0-alpha.33",
|
|
8794
|
+
"@geekmidas/envkit": "~10.0.0-alpha.33",
|
|
8795
|
+
"@geekmidas/errors": "~10.0.0-alpha.33",
|
|
8796
|
+
"@geekmidas/events": "~10.0.0-alpha.33",
|
|
8797
|
+
"@geekmidas/logger": "~10.0.0-alpha.33",
|
|
8798
|
+
"@geekmidas/manifest": "~10.0.0-alpha.33",
|
|
8799
|
+
"@geekmidas/rate-limit": "~10.0.0-alpha.33",
|
|
8800
|
+
"@geekmidas/schema": "~10.0.0-alpha.33",
|
|
8801
|
+
"@geekmidas/services": "~10.0.0-alpha.33",
|
|
8802
|
+
"@geekmidas/storage": "~10.0.0-alpha.33",
|
|
8803
|
+
"@geekmidas/studio": "~10.0.0-alpha.33",
|
|
8804
|
+
"@geekmidas/telescope": "~10.0.0-alpha.33",
|
|
8805
|
+
"@geekmidas/testkit": "~10.0.0-alpha.33",
|
|
8786
8806
|
"@geekmidas/cli": `~${loadPackageJson().version}`
|
|
8787
8807
|
};
|
|
8788
8808
|
//#endregion
|
|
@@ -11976,9 +11996,9 @@ function generateSourceFiles(options, template) {
|
|
|
11976
11996
|
//#endregion
|
|
11977
11997
|
//#region src/init/generators/test.ts
|
|
11978
11998
|
/**
|
|
11979
|
-
* Generate test infrastructure files when database is enabled
|
|
11980
|
-
*
|
|
11981
|
-
* factory
|
|
11999
|
+
* Generate test infrastructure files when database is enabled: the
|
|
12000
|
+
* transaction-isolated test config and an example spec, in the app. The
|
|
12001
|
+
* factory is the project's — see {@link generateTestFactoryFiles}.
|
|
11982
12002
|
*/
|
|
11983
12003
|
function generateTestFiles(options, _template) {
|
|
11984
12004
|
if (!options.constructs.database) return [];
|
|
@@ -11986,10 +12006,9 @@ function generateTestFiles(options, _template) {
|
|
|
11986
12006
|
const schema = !options.monorepo ? "../src/constructs/database.ts" : `@${options.name}/constructs/database.ts`;
|
|
11987
12007
|
db.urlKey;
|
|
11988
12008
|
db.ownerUrlKey;
|
|
11989
|
-
return [
|
|
11990
|
-
|
|
11991
|
-
|
|
11992
|
-
content: `import { it as itVitest } from 'vitest';
|
|
12009
|
+
return [{
|
|
12010
|
+
path: "test/config.ts",
|
|
12011
|
+
content: `import { it as itVitest } from 'vitest';
|
|
11993
12012
|
import { wrapVitestKyselyTransaction } from '@geekmidas/testkit/kysely';
|
|
11994
12013
|
import { type Database, database } from '${schema}';
|
|
11995
12014
|
|
|
@@ -11999,17 +12018,56 @@ export const it = wrapVitestKyselyTransaction<Database>(itVitest, {
|
|
|
11999
12018
|
connection: database,
|
|
12000
12019
|
});
|
|
12001
12020
|
`
|
|
12002
|
-
|
|
12003
|
-
|
|
12004
|
-
|
|
12005
|
-
|
|
12021
|
+
}, {
|
|
12022
|
+
path: "test/example.spec.ts",
|
|
12023
|
+
content: `import { describe, expect } from 'vitest';
|
|
12024
|
+
import { it } from './config.ts';
|
|
12025
|
+
|
|
12026
|
+
describe('example', () => {
|
|
12027
|
+
it('should have a working test setup', async ({ trx }) => {
|
|
12028
|
+
// trx is a Kysely transaction; everything in it is rolled back after the
|
|
12029
|
+
// test
|
|
12030
|
+
expect(trx).toBeDefined();
|
|
12031
|
+
});
|
|
12032
|
+
});
|
|
12033
|
+
`
|
|
12034
|
+
}];
|
|
12035
|
+
}
|
|
12036
|
+
/**
|
|
12037
|
+
* The database's test factory, at the project root:
|
|
12038
|
+
* `test/factories/<construct>.ts`.
|
|
12039
|
+
*
|
|
12040
|
+
* A factory belongs to a database, not to an app, so there is one per database
|
|
12041
|
+
* for the whole project. `gkm test` finds it by that name and hands every
|
|
12042
|
+
* feature test \`factories.get('database')\`, built on the test's transaction.
|
|
12043
|
+
*/
|
|
12044
|
+
function generateTestFactoryFiles(options) {
|
|
12045
|
+
if (!options.constructs.database) return [];
|
|
12046
|
+
const db = databaseFor();
|
|
12047
|
+
const schema = options.monorepo ? `@${options.name}/constructs/database.ts` : "../../src/constructs/database.ts";
|
|
12048
|
+
return [{
|
|
12049
|
+
path: `test/factories/${kebabCase(db.id)}.ts`,
|
|
12050
|
+
content: `import type { Kysely } from 'kysely';
|
|
12006
12051
|
import { KyselyFactory } from '@geekmidas/testkit/kysely';
|
|
12007
12052
|
import type { Database } from '${schema}';
|
|
12008
|
-
|
|
12053
|
+
|
|
12054
|
+
const usersBuilder = KyselyFactory.createBuilder<Database, 'users'>(
|
|
12055
|
+
'users',
|
|
12056
|
+
({ faker }) => ({
|
|
12057
|
+
id: faker.string.uuid(),
|
|
12058
|
+
name: faker.person.fullName(),
|
|
12059
|
+
email: faker.internet.email(),
|
|
12060
|
+
createdAt: new Date(),
|
|
12061
|
+
}),
|
|
12062
|
+
);
|
|
12009
12063
|
|
|
12010
12064
|
const builders = { users: usersBuilder };
|
|
12011
12065
|
const seeds = {};
|
|
12012
12066
|
|
|
12067
|
+
/**
|
|
12068
|
+
* This database's factory. \`gkm test\` builds it on each feature test's
|
|
12069
|
+
* transaction and hands it over as \`factories.get('${serviceKey(db.id)}')\`.
|
|
12070
|
+
*/
|
|
12013
12071
|
export function createFactory(db: Kysely<Database>) {
|
|
12014
12072
|
return new KyselyFactory<Database, typeof builders, typeof seeds>(
|
|
12015
12073
|
builders,
|
|
@@ -12020,38 +12078,7 @@ export function createFactory(db: Kysely<Database>) {
|
|
|
12020
12078
|
|
|
12021
12079
|
export type Factory = ReturnType<typeof createFactory>;
|
|
12022
12080
|
`
|
|
12023
|
-
|
|
12024
|
-
{
|
|
12025
|
-
path: "test/factory/users.ts",
|
|
12026
|
-
content: `import { KyselyFactory } from '@geekmidas/testkit/kysely';
|
|
12027
|
-
import type { Database } from '${schema}';
|
|
12028
|
-
|
|
12029
|
-
export const usersBuilder = KyselyFactory.createBuilder<Database, 'users'>(
|
|
12030
|
-
'users',
|
|
12031
|
-
({ faker }) => ({
|
|
12032
|
-
id: faker.string.uuid(),
|
|
12033
|
-
name: faker.person.fullName(),
|
|
12034
|
-
email: faker.internet.email(),
|
|
12035
|
-
createdAt: new Date(),
|
|
12036
|
-
}),
|
|
12037
|
-
);
|
|
12038
|
-
`
|
|
12039
|
-
},
|
|
12040
|
-
{
|
|
12041
|
-
path: "test/example.spec.ts",
|
|
12042
|
-
content: `import { describe, expect } from 'vitest';
|
|
12043
|
-
import { it } from './config.ts';
|
|
12044
|
-
|
|
12045
|
-
describe('example', () => {
|
|
12046
|
-
it('should have a working test setup', async ({ trx }) => {
|
|
12047
|
-
// trx is a Kysely transaction; everything in it is rolled back after the
|
|
12048
|
-
// test
|
|
12049
|
-
expect(trx).toBeDefined();
|
|
12050
|
-
});
|
|
12051
|
-
});
|
|
12052
|
-
`
|
|
12053
|
-
}
|
|
12054
|
-
];
|
|
12081
|
+
}];
|
|
12055
12082
|
}
|
|
12056
12083
|
//#endregion
|
|
12057
12084
|
//#region src/init/generators/ui.ts
|
|
@@ -14521,7 +14548,8 @@ async function initCommand(projectName, options = {}) {
|
|
|
14521
14548
|
...generateGithubFiles(templateOptions),
|
|
14522
14549
|
...generateMonorepoFiles(templateOptions, baseTemplate),
|
|
14523
14550
|
...generateRootConstructs(templateOptions),
|
|
14524
|
-
...generateModelsPackage(templateOptions)
|
|
14551
|
+
...generateModelsPackage(templateOptions),
|
|
14552
|
+
...generateTestFactoryFiles(templateOptions)
|
|
14525
14553
|
] : [];
|
|
14526
14554
|
const webAppFiles = isFullstack ? frontendFramework === "tanstack-start" ? generateTanStackWebFiles(templateOptions) : frontendFramework === "expo" ? generateExpoAppFiles(templateOptions) : generateWebAppFiles(templateOptions) : [];
|
|
14527
14555
|
const authAppFiles = isFullstack ? generateAuthAppFiles(templateOptions) : [];
|
|
@@ -14984,7 +15012,7 @@ var NoStoredSecrets = class extends Error {
|
|
|
14984
15012
|
}
|
|
14985
15013
|
};
|
|
14986
15014
|
async function reconcile(secrets, workspace, stage) {
|
|
14987
|
-
const { derivedContainers } = await import("./workspace-
|
|
15015
|
+
const { derivedContainers } = await import("./workspace-BNurJoFx.mjs").then((n) => n.a);
|
|
14988
15016
|
const result = reconcileMissingSecrets(secrets, workspace, await derivedContainers(workspace, stage));
|
|
14989
15017
|
return result ? {
|
|
14990
15018
|
secrets: result.secrets,
|
|
@@ -15328,7 +15356,8 @@ async function testCommand(options = {}) {
|
|
|
15328
15356
|
patterns: constructGlobs(workspace),
|
|
15329
15357
|
cacheBackend: backendsOf(workspace).cache,
|
|
15330
15358
|
stage: TEST_STAGE,
|
|
15331
|
-
env: finalCredentials
|
|
15359
|
+
env: finalCredentials,
|
|
15360
|
+
factories: join(workspace.root, workspace.test.factories ?? "test/factories")
|
|
15332
15361
|
}) : void 0;
|
|
15333
15362
|
if (options.prepare) {
|
|
15334
15363
|
console.log(manifestPath ? ` 🧪 Test harness written beside ${manifestPath}` : " 🧪 Nothing to prepare: this project declares no constructs");
|
|
@@ -15382,7 +15411,7 @@ async function testCommand(options = {}) {
|
|
|
15382
15411
|
* starts without the reference data the app needs.
|
|
15383
15412
|
*/
|
|
15384
15413
|
async function migrateTestStage(workspace, env) {
|
|
15385
|
-
const { migrateAndSeed } = await import("./migrate-
|
|
15414
|
+
const { migrateAndSeed } = await import("./migrate-D2rtGKYi.mjs");
|
|
15386
15415
|
const { discover } = await import("./discover-CMxesskG.mjs").then((n) => n.n);
|
|
15387
15416
|
const sources = {};
|
|
15388
15417
|
const manifest = await discover({
|
|
@@ -15827,7 +15856,7 @@ program.command("migrate").description("Apply each database construct's migratio
|
|
|
15827
15856
|
try {
|
|
15828
15857
|
const globalOptions = program.opts();
|
|
15829
15858
|
if (globalOptions.cwd) process.chdir(globalOptions.cwd);
|
|
15830
|
-
const { migrateCommand } = await import("./migrate-
|
|
15859
|
+
const { migrateCommand } = await import("./migrate-D2rtGKYi.mjs");
|
|
15831
15860
|
await migrateCommand({
|
|
15832
15861
|
...options,
|
|
15833
15862
|
...construct ? { construct } : {}
|
|
@@ -15841,7 +15870,7 @@ program.command("seed").description("Migrate, then run each database construct's
|
|
|
15841
15870
|
try {
|
|
15842
15871
|
const globalOptions = program.opts();
|
|
15843
15872
|
if (globalOptions.cwd) process.chdir(globalOptions.cwd);
|
|
15844
|
-
const { seedCommand } = await import("./migrate-
|
|
15873
|
+
const { seedCommand } = await import("./migrate-D2rtGKYi.mjs");
|
|
15845
15874
|
await seedCommand({
|
|
15846
15875
|
...options,
|
|
15847
15876
|
...construct ? { construct } : {}
|
|
@@ -15855,7 +15884,7 @@ program.command("migration").description("Write a construct's next migration: an
|
|
|
15855
15884
|
try {
|
|
15856
15885
|
const globalOptions = program.opts();
|
|
15857
15886
|
if (globalOptions.cwd) process.chdir(globalOptions.cwd);
|
|
15858
|
-
const { migrationCommand } = await import("./migrate-
|
|
15887
|
+
const { migrationCommand } = await import("./migrate-D2rtGKYi.mjs");
|
|
15859
15888
|
await migrationCommand({
|
|
15860
15889
|
construct,
|
|
15861
15890
|
...name ? { name } : {}
|
|
@@ -16023,7 +16052,7 @@ program.command("secrets:reconcile").description("Backfill missing custom secret
|
|
|
16023
16052
|
console.error(`No secrets found for stage "${stage}". Run "gkm secrets:init --stage ${stage}" first.`);
|
|
16024
16053
|
process.exit(1);
|
|
16025
16054
|
}
|
|
16026
|
-
const { derivedContainers } = await import("./workspace-
|
|
16055
|
+
const { derivedContainers } = await import("./workspace-BNurJoFx.mjs").then((n) => n.a);
|
|
16027
16056
|
const result = reconcileMissingSecrets(secrets, workspace, await derivedContainers(workspace, stage));
|
|
16028
16057
|
if (!result) {
|
|
16029
16058
|
console.log(`\n✓ Secrets for stage "${stage}" are up-to-date`);
|
|
@@ -16082,7 +16111,7 @@ program.command("deploy:github").description("Let GitHub Actions deploy a stage:
|
|
|
16082
16111
|
try {
|
|
16083
16112
|
const globalOptions = program.opts();
|
|
16084
16113
|
if (globalOptions.cwd) process.chdir(globalOptions.cwd);
|
|
16085
|
-
const { deployGithubCommand } = await import("./github-
|
|
16114
|
+
const { deployGithubCommand } = await import("./github-DN-92LWP.mjs");
|
|
16086
16115
|
await deployGithubCommand(options);
|
|
16087
16116
|
} catch (error) {
|
|
16088
16117
|
console.error(formatError(error));
|