@geekmidas/cli 1.10.28 → 1.10.30

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 (29) hide show
  1. package/CHANGELOG.md +18 -0
  2. package/dist/{fullstack-secrets-CsxU84eN.cjs → fullstack-secrets-Bchl2MDd.cjs} +2 -1
  3. package/dist/{fullstack-secrets-CsxU84eN.cjs.map → fullstack-secrets-Bchl2MDd.cjs.map} +1 -1
  4. package/dist/{fullstack-secrets-BDE7Sk93.mjs → fullstack-secrets-P84v8zWn.mjs} +2 -1
  5. package/dist/{fullstack-secrets-BDE7Sk93.mjs.map → fullstack-secrets-P84v8zWn.mjs.map} +1 -1
  6. package/dist/index.cjs +74 -21
  7. package/dist/index.cjs.map +1 -1
  8. package/dist/index.mjs +74 -21
  9. package/dist/index.mjs.map +1 -1
  10. package/dist/{openapi-CQCoLuzh.mjs → openapi-CTARkkkn.mjs} +2 -2
  11. package/dist/openapi-CTARkkkn.mjs.map +1 -0
  12. package/dist/{openapi-CBU4TEi-.cjs → openapi-ClA8lIhO.cjs} +2 -2
  13. package/dist/openapi-ClA8lIhO.cjs.map +1 -0
  14. package/dist/openapi.cjs +1 -1
  15. package/dist/openapi.mjs +1 -1
  16. package/dist/{reconcile-DF8t4HC7.cjs → reconcile-CZtzdrnc.cjs} +2 -2
  17. package/dist/{reconcile-DF8t4HC7.cjs.map → reconcile-CZtzdrnc.cjs.map} +1 -1
  18. package/dist/{reconcile-BjWhjfSp.mjs → reconcile-DAAKa0YR.mjs} +2 -2
  19. package/dist/{reconcile-BjWhjfSp.mjs.map → reconcile-DAAKa0YR.mjs.map} +1 -1
  20. package/package.json +5 -5
  21. package/src/generators/EndpointGenerator.ts +1 -1
  22. package/src/init/__tests__/generators.spec.ts +5 -3
  23. package/src/init/generators/package.ts +3 -0
  24. package/src/init/generators/test.ts +61 -17
  25. package/src/init/templates/index.ts +5 -0
  26. package/src/init/versions.ts +1 -1
  27. package/src/setup/fullstack-secrets.ts +11 -0
  28. package/dist/openapi-CBU4TEi-.cjs.map +0 -1
  29. package/dist/openapi-CQCoLuzh.mjs.map +0 -1
package/dist/index.mjs CHANGED
@@ -3,9 +3,9 @@ import { __require } from "./chunk-Duj1WY3L.mjs";
3
3
  import { getAppBuildOrder, getDependencyEnvVars, getDeployTargetError, isDeployTargetSupported } from "./workspace-D4z4A4cq.mjs";
4
4
  import { getAppNameFromCwd, loadAppConfig, loadConfig, loadWorkspaceAppInfo, loadWorkspaceConfig, parseModuleConfig } from "./config-jsRYHOHU.mjs";
5
5
  import { getCredentialsPath, getDokployCredentials, getDokployRegistryId, getDokployToken, removeDokployCredentials, storeDokployCredentials, storeDokployRegistryId } from "./credentials-s1kLcIzK.mjs";
6
- import { createStageSecrets, generateConnectionUrls, generateDbPassword, generateDbUrl, generateFullstackCustomSecrets, generateLocalStackCredentials, generatePgBossUrl, generateSecurePassword, generateServiceCredentials, rotateServicePassword, writeDockerEnvFromSecrets } from "./fullstack-secrets-BDE7Sk93.mjs";
6
+ import { createStageSecrets, generateConnectionUrls, generateDbPassword, generateDbUrl, generateFullstackCustomSecrets, generateLocalStackCredentials, generatePgBossUrl, generateSecurePassword, generateServiceCredentials, rotateServicePassword, writeDockerEnvFromSecrets } from "./fullstack-secrets-P84v8zWn.mjs";
7
7
  import { getKeyPath, maskPassword, readStageSecrets, secretsExist, setCustomSecret, toEmbeddableSecrets, writeStageSecrets } from "./storage-dbb9RyBl.mjs";
8
- import { ConstructGenerator, EndpointGenerator, OPENAPI_OUTPUT_PATH, generateOpenApi, isPartitionedRoutes, normalizeRoutes, openapiCommand, resolveOpenApiConfig } from "./openapi-CQCoLuzh.mjs";
8
+ import { ConstructGenerator, EndpointGenerator, OPENAPI_OUTPUT_PATH, generateOpenApi, isPartitionedRoutes, normalizeRoutes, openapiCommand, resolveOpenApiConfig } from "./openapi-CTARkkkn.mjs";
9
9
  import { DokployApi } from "./dokploy-api-BIT0683o.mjs";
10
10
  import { encryptSecrets } from "./encryption-DSkIlEZ6.mjs";
11
11
  import { CachedStateProvider } from "./CachedStateProvider-C8A-cCm5.mjs";
@@ -35,7 +35,7 @@ import prompts from "prompts";
35
35
 
36
36
  //#region package.json
37
37
  var name = "@geekmidas/cli";
38
- var version = "1.10.27";
38
+ var version = "1.10.29";
39
39
  var description = "CLI tools for building Lambda handlers, server applications, and generating OpenAPI specs";
40
40
  var private$1 = false;
41
41
  var type = "module";
@@ -6806,7 +6806,7 @@ const GEEKMIDAS_VERSIONS = {
6806
6806
  "@geekmidas/cache": "~1.1.0",
6807
6807
  "@geekmidas/client": "~4.0.4",
6808
6808
  "@geekmidas/cloud": "~1.0.0",
6809
- "@geekmidas/constructs": "~3.0.5",
6809
+ "@geekmidas/constructs": "~3.0.6",
6810
6810
  "@geekmidas/db": "~1.0.1",
6811
6811
  "@geekmidas/emailkit": "~1.0.0",
6812
6812
  "@geekmidas/envkit": "~1.0.4",
@@ -8933,6 +8933,10 @@ export const telescope = new Telescope({
8933
8933
  */
8934
8934
  const OPENAPI_OUTPUT_PATH$1 = "./.gkm/openapi.ts";
8935
8935
  /**
8936
+ * Endpoints output path (generated by gkm dev/build)
8937
+ */
8938
+ const ENDPOINTS_OUTPUT_PATH = "./.gkm/server/endpoints.ts";
8939
+ /**
8936
8940
  * All available templates
8937
8941
  */
8938
8942
  const templates = {
@@ -9107,6 +9111,7 @@ function generatePackageJson(options, template) {
9107
9111
  devDependencies$1["@types/pg"] = "~8.15.0";
9108
9112
  devDependencies$1["@geekmidas/testkit"] = GEEKMIDAS_VERSIONS["@geekmidas/testkit"];
9109
9113
  devDependencies$1["@faker-js/faker"] = "~9.8.0";
9114
+ devDependencies$1["kysely-ctl"] = "~0.10.0";
9110
9115
  devDependencies$1["vite-tsconfig-paths"] = "~5.1.0";
9111
9116
  }
9112
9117
  if (monorepo) {
@@ -9131,7 +9136,10 @@ function generatePackageJson(options, template) {
9131
9136
  version: "0.0.1",
9132
9137
  private: true,
9133
9138
  type: "module",
9134
- exports: { "./client": OPENAPI_OUTPUT_PATH$1 },
9139
+ exports: {
9140
+ "./client": OPENAPI_OUTPUT_PATH$1,
9141
+ "./endpoints": ENDPOINTS_OUTPUT_PATH
9142
+ },
9135
9143
  scripts: scripts$1,
9136
9144
  dependencies: sortObject(dependencies$1),
9137
9145
  devDependencies: sortObject(devDependencies$1)
@@ -9161,6 +9169,29 @@ function generateSourceFiles(options, template) {
9161
9169
  function generateTestFiles(options, _template) {
9162
9170
  if (!options.database) return [];
9163
9171
  return [
9172
+ {
9173
+ path: "kysely.config.ts",
9174
+ content: `import { Credentials } from '@geekmidas/envkit/credentials';
9175
+ import { PostgresDialect } from 'kysely';
9176
+ import { defineConfig } from 'kysely-ctl';
9177
+ import pg from 'pg';
9178
+
9179
+ export default defineConfig({
9180
+ dialect: new PostgresDialect({
9181
+ pool: new pg.Pool({
9182
+ password: Credentials.POSTGRES_PASSWORD,
9183
+ user: Credentials.POSTGRES_USER,
9184
+ database: Credentials.POSTGRES_DB,
9185
+ port: Number(Credentials.POSTGRES_PORT),
9186
+ host: Credentials.POSTGRES_HOST,
9187
+ }),
9188
+ }),
9189
+ migrations: {
9190
+ migrationFolder: './src/db/migrations',
9191
+ },
9192
+ });
9193
+ `
9194
+ },
9164
9195
  {
9165
9196
  path: "test/config.ts",
9166
9197
  content: `import { it as itVitest } from 'vitest';
@@ -9182,30 +9213,52 @@ export const it = wrapVitestKyselyTransaction<Database>(itVitest, {
9182
9213
  },
9183
9214
  {
9184
9215
  path: "test/globalSetup.ts",
9185
- content: `import { Kysely, PostgresDialect } from 'kysely';
9186
- import pg from 'pg';
9216
+ content: `import fs from 'node:fs/promises';
9217
+ import path from 'node:path';
9218
+ import { Credentials } from '@geekmidas/envkit/credentials';
9187
9219
  import { PostgresKyselyMigrator } from '@geekmidas/testkit/kysely';
9188
- import type { Database } from '~/services/database.ts';
9220
+ import { runInitScript } from '@geekmidas/testkit/postgres';
9221
+ import { FileMigrationProvider, Kysely, PostgresDialect } from 'kysely';
9222
+ import pg from 'pg';
9189
9223
 
9190
- export async function setup() {
9191
- const testUrl = process.env.DATABASE_URL;
9192
- if (!testUrl) throw new Error('DATABASE_URL is required for tests');
9224
+ export default async function globalSetup() {
9225
+ const databaseUrl = Credentials.DATABASE_URL!;
9226
+ const migrationFolder = path.resolve(import.meta.dirname, '../db/migrations');
9193
9227
 
9194
- // Run migrations on the test database
9195
- // (gkm test already rewrites DATABASE_URL to point to the _test database)
9196
- const db = new Kysely<Database>({
9228
+ const db = new Kysely({
9197
9229
  dialect: new PostgresDialect({
9198
- pool: new pg.Pool({ connectionString: testUrl }),
9230
+ pool: new pg.Pool({ connectionString: databaseUrl }),
9199
9231
  }),
9200
9232
  });
9201
9233
 
9202
9234
  const migrator = new PostgresKyselyMigrator({
9235
+ uri: databaseUrl,
9203
9236
  db,
9204
- migrationsPath: './src/migrations',
9237
+ afterCreate: async (uri) => {
9238
+ const initScriptPath = path.resolve(process.cwd(), 'docker/postgres/init.sh');
9239
+ const dbUrl = new URL(Credentials.DATABASE_URL!);
9240
+ const apiUrl = new URL(Credentials.API_DATABASE_URL!);
9241
+ const authUrl = new URL(Credentials.AUTH_DATABASE_URL!);
9242
+
9243
+ const env = {
9244
+ POSTGRES_USER: dbUrl.username,
9245
+ POSTGRES_DB: dbUrl.pathname.slice(1),
9246
+ API_DB_PASSWORD: decodeURIComponent(apiUrl.password),
9247
+ AUTH_DB_PASSWORD: decodeURIComponent(authUrl.password),
9248
+ PGBOSS_DB_PASSWORD: Credentials.PGBOSS_DB_PASSWORD ?? 'pgboss-dev-password',
9249
+ };
9250
+
9251
+ await runInitScript(initScriptPath, uri, env);
9252
+ },
9253
+ provider: new FileMigrationProvider({
9254
+ fs,
9255
+ path,
9256
+ migrationFolder,
9257
+ }),
9205
9258
  });
9206
9259
 
9207
- await migrator.migrateToLatest();
9208
- await db.destroy();
9260
+ const teardown = await migrator.start();
9261
+ return teardown;
9209
9262
  }
9210
9263
  `
9211
9264
  },
@@ -12384,7 +12437,7 @@ program.command("secrets:push").description("Push secrets to remote provider (SS
12384
12437
  if (globalOptions.cwd) process.chdir(globalOptions.cwd);
12385
12438
  const { loadWorkspaceConfig: loadWorkspaceConfig$1 } = await import("./config.mjs");
12386
12439
  const { pushSecrets: pushSecrets$1 } = await import("./sync-COnAugP-.mjs");
12387
- const { reconcileMissingSecrets } = await import("./reconcile-BjWhjfSp.mjs");
12440
+ const { reconcileMissingSecrets } = await import("./reconcile-DAAKa0YR.mjs");
12388
12441
  const { readStageSecrets: readStageSecrets$1, writeStageSecrets: writeStageSecrets$1 } = await import("./storage-Cs4WBsc4.mjs");
12389
12442
  const { workspace } = await loadWorkspaceConfig$1();
12390
12443
  const secrets = await readStageSecrets$1(options.stage, workspace.root);
@@ -12410,7 +12463,7 @@ program.command("secrets:pull").description("Pull secrets from remote provider (
12410
12463
  const { loadWorkspaceConfig: loadWorkspaceConfig$1 } = await import("./config.mjs");
12411
12464
  const { pullSecrets: pullSecrets$1 } = await import("./sync-COnAugP-.mjs");
12412
12465
  const { writeStageSecrets: writeStageSecrets$1 } = await import("./storage-Cs4WBsc4.mjs");
12413
- const { reconcileMissingSecrets } = await import("./reconcile-BjWhjfSp.mjs");
12466
+ const { reconcileMissingSecrets } = await import("./reconcile-DAAKa0YR.mjs");
12414
12467
  const { workspace } = await loadWorkspaceConfig$1();
12415
12468
  let secrets = await pullSecrets$1(options.stage, workspace);
12416
12469
  if (!secrets) {
@@ -12435,7 +12488,7 @@ program.command("secrets:reconcile").description("Backfill missing custom secret
12435
12488
  const globalOptions = program.opts();
12436
12489
  if (globalOptions.cwd) process.chdir(globalOptions.cwd);
12437
12490
  const { loadWorkspaceConfig: loadWorkspaceConfig$1 } = await import("./config.mjs");
12438
- const { reconcileMissingSecrets } = await import("./reconcile-BjWhjfSp.mjs");
12491
+ const { reconcileMissingSecrets } = await import("./reconcile-DAAKa0YR.mjs");
12439
12492
  const { readStageSecrets: readStageSecrets$1, writeStageSecrets: writeStageSecrets$1 } = await import("./storage-Cs4WBsc4.mjs");
12440
12493
  const { workspace } = await loadWorkspaceConfig$1();
12441
12494
  const secrets = await readStageSecrets$1(options.stage, workspace.root);