@geekmidas/cli 10.0.0-alpha.3 → 10.0.0-alpha.5

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 (41) hide show
  1. package/dist/{config-BholeD-0.cjs → config-C21ocYNd.cjs} +2 -2
  2. package/dist/{config-BholeD-0.cjs.map → config-C21ocYNd.cjs.map} +1 -1
  3. package/dist/{config-CzWnfcXM.mjs → config-WRdsQYZK.mjs} +2 -2
  4. package/dist/{config-CzWnfcXM.mjs.map → config-WRdsQYZK.mjs.map} +1 -1
  5. package/dist/config.cjs +2 -2
  6. package/dist/config.mjs +2 -2
  7. package/dist/{credentials-BZcp3CGx.mjs → credentials-BBIRJVp4.mjs} +4 -4
  8. package/dist/{credentials-BZcp3CGx.mjs.map → credentials-BBIRJVp4.mjs.map} +1 -1
  9. package/dist/{credentials-DQmbRnr1.cjs → credentials-G1JwBoXH.cjs} +4 -4
  10. package/dist/{credentials-DQmbRnr1.cjs.map → credentials-G1JwBoXH.cjs.map} +1 -1
  11. package/dist/index.cjs +87 -120
  12. package/dist/index.cjs.map +1 -1
  13. package/dist/index.mjs +87 -120
  14. package/dist/index.mjs.map +1 -1
  15. package/dist/{openapi-c9bpieI5.cjs → openapi-CA0yJUTN.cjs} +7 -2
  16. package/dist/{openapi-c9bpieI5.cjs.map → openapi-CA0yJUTN.cjs.map} +1 -1
  17. package/dist/{openapi-CY9xFkTH.mjs → openapi-kkQbsRVj.mjs} +7 -2
  18. package/dist/{openapi-CY9xFkTH.mjs.map → openapi-kkQbsRVj.mjs.map} +1 -1
  19. package/dist/openapi.cjs +3 -3
  20. package/dist/openapi.mjs +3 -3
  21. package/dist/setup-B5_oHHUj.cjs +11 -0
  22. package/dist/{setup-C48C9hto.cjs → setup-Cm2UnAdh.cjs} +3 -3
  23. package/dist/{setup-C48C9hto.cjs.map → setup-Cm2UnAdh.cjs.map} +1 -1
  24. package/dist/{setup-Bc73t0ve.mjs → setup-DXvRLTZN.mjs} +3 -3
  25. package/dist/{setup-Bc73t0ve.mjs.map → setup-DXvRLTZN.mjs.map} +1 -1
  26. package/dist/{setup-DCuudnCl.mjs → setup-ZijS4qeC.mjs} +4 -4
  27. package/dist/workspace/index.cjs +1 -1
  28. package/dist/workspace/index.mjs +1 -1
  29. package/dist/workspace-BFMrAKqI.mjs +6634 -0
  30. package/dist/workspace-BFMrAKqI.mjs.map +1 -0
  31. package/dist/workspace-BcucjwvA.cjs +6783 -0
  32. package/dist/workspace-BcucjwvA.cjs.map +1 -0
  33. package/dist/{workspace-BO_KWohI.cjs → workspace-DdJss8I6.cjs} +3 -3
  34. package/dist/workspace-k4l3rsFh.mjs +8 -0
  35. package/package.json +30 -30
  36. package/dist/setup-fG_ivuxO.cjs +0 -11
  37. package/dist/workspace-7FqprxuJ.mjs +0 -4323
  38. package/dist/workspace-7FqprxuJ.mjs.map +0 -1
  39. package/dist/workspace-DK4WWJIn.mjs +0 -8
  40. package/dist/workspace-XvqO9jIv.cjs +0 -4472
  41. package/dist/workspace-XvqO9jIv.cjs.map +0 -1
package/dist/index.mjs CHANGED
@@ -1,13 +1,13 @@
1
1
  #!/usr/bin/env -S npx tsx
2
2
  import { __require } from "./chunk-Duj1WY3L.mjs";
3
3
  import { ConstructGenerator, DEFAULT_CACHE, discover, isPartitionedRoutes } from "./discover-CAlFgYec.mjs";
4
- import { derivedApps, getAppNameFromCwd, loadAppConfig, loadConfig, loadWorkspaceConfig, parseModuleConfig, resolveAppSpec } from "./config-CzWnfcXM.mjs";
5
- import { allConstructGlobs, getAppBuildOrder, getDependencyEnvVars, getDeployTargetError, getPublicEnvPrefix, isDeployTargetSupported, stripPublicPrefix } from "./workspace-7FqprxuJ.mjs";
4
+ import { derivedApps, getAppNameFromCwd, loadAppConfig, loadConfig, loadWorkspaceConfig, parseModuleConfig, resolveAppSpec } from "./config-WRdsQYZK.mjs";
5
+ import { allConstructGlobs, getAppBuildOrder, getDependencyEnvVars, getDeployTargetError, getPublicEnvPrefix, isDeployTargetSupported, stripPublicPrefix } from "./workspace-BFMrAKqI.mjs";
6
6
  import { getCredentialsPath, getDokployCredentials, getDokployRegistryId, getDokployToken, removeDokployCredentials, storeDokployCredentials, storeDokployRegistryId, storeHostingerToken } from "./credentials-B5zRHdAl.mjs";
7
- import { applyPostgres, cacheBackendOf, constructGlobs, createCredentialsPreload, createEntryWrapper, derivedContainers, emailBackendOf, findAvailablePort, isPortAvailable, loadEnvFiles, loadSecretsForApp, prepareEntryCredentials, providerOf, reconcileWorkspace, resolveServicePorts, resourceName, rewriteUrlsWithPorts, startWorkspaceServices, storageBackendOf, usesConstructs } from "./credentials-BZcp3CGx.mjs";
7
+ import { applyPostgres, cacheBackendOf, constructGlobs, createCredentialsPreload, createEntryWrapper, derivedContainers, emailBackendOf, findAvailablePort, isPortAvailable, loadEnvFiles, loadSecretsForApp, prepareEntryCredentials, providerOf, reconcileWorkspace, resolveServicePorts, resourceName, rewriteUrlsWithPorts, startWorkspaceServices, storageBackendOf, usesConstructs } from "./credentials-BBIRJVp4.mjs";
8
8
  import { createStageSecrets, rotateServicePassword } from "./generator-VE2JrFlY.mjs";
9
9
  import { getKeyPath, maskPassword, readStageSecrets, secretsExist, setCustomSecret, toEmbeddableSecrets, writeStageSecrets } from "./storage-Bi24WfoW.mjs";
10
- import { EndpointGenerator, OPENAPI_OUTPUT_PATH, generateOpenApi, normalizeRoutes, openapiCommand, resolveOpenApiConfig } from "./openapi-CY9xFkTH.mjs";
10
+ import { EndpointGenerator, OPENAPI_OUTPUT_PATH, generateOpenApi, normalizeRoutes, openapiCommand, resolveOpenApiConfig } from "./openapi-kkQbsRVj.mjs";
11
11
  import { withCompute, withRoutes } from "./emit-CiZS_5Ub.mjs";
12
12
  import { DokployApi } from "./dokploy-api-aTFPz7_4.mjs";
13
13
  import { encryptSecrets } from "./encryption-D-abyhZx.mjs";
@@ -15,7 +15,7 @@ import { CachedStateProvider } from "./CachedStateProvider-DTniehMP.mjs";
15
15
  import { generateDbPassword, generateDbUrl, generateFullstackCustomSecrets } from "./fullstack-secrets-D1o9-G5l.mjs";
16
16
  import { generateReactQueryCommand } from "./openapi-react-query-Byltvm_7.mjs";
17
17
  import "./sync-CmEuNZsB.mjs";
18
- import { setupCommand, trustCommand } from "./setup-Bc73t0ve.mjs";
18
+ import { setupCommand, trustCommand } from "./setup-DXvRLTZN.mjs";
19
19
  import { createRequire } from "node:module";
20
20
  import { copyFileSync, existsSync, readFileSync, unlinkSync } from "node:fs";
21
21
  import { basename, dirname, isAbsolute, join, parse, relative, resolve } from "node:path";
@@ -43,7 +43,7 @@ import prompts from "prompts";
43
43
 
44
44
  //#region package.json
45
45
  var name = "@geekmidas/cli";
46
- var version = "10.0.0-alpha.2";
46
+ var version = "10.0.0-alpha.4";
47
47
  var description = "CLI tools for building Lambda handlers, server applications, and generating OpenAPI specs";
48
48
  var private$1 = false;
49
49
  var type = "module";
@@ -124,12 +124,12 @@ var repository = {
124
124
  "url": "https://github.com/geekmidas/toolbox"
125
125
  };
126
126
  var dependencies = {
127
- "@apidevtools/swagger-parser": "^10.1.0",
128
- "@aws-sdk/client-iam": "~3.992.0",
129
- "@aws-sdk/client-route-53": "~3.992.0",
130
- "@aws-sdk/client-s3": "~3.992.0",
131
- "@aws-sdk/client-ssm": "~3.992.0",
132
- "@aws-sdk/credential-providers": "~3.992.0",
127
+ "@apidevtools/swagger-parser": "~13.1.0",
128
+ "@aws-sdk/client-iam": "~3.1136.0",
129
+ "@aws-sdk/client-route-53": "~3.1136.0",
130
+ "@aws-sdk/client-s3": "~3.1136.0",
131
+ "@aws-sdk/client-ssm": "~3.1136.0",
132
+ "@aws-sdk/credential-providers": "~3.1136.0",
133
133
  "@geekmidas/cache": "workspace:*",
134
134
  "@geekmidas/constructs": "workspace:~",
135
135
  "@geekmidas/db": "workspace:*",
@@ -138,28 +138,28 @@ var dependencies = {
138
138
  "@geekmidas/logger": "workspace:~",
139
139
  "@geekmidas/manifest": "workspace:*",
140
140
  "@geekmidas/schema": "workspace:~",
141
- "chokidar": "~4.0.3",
142
- "commander": "^12.1.0",
143
- "dotenv": "~17.2.3",
144
- "esbuild": "^0.28.2",
145
- "fast-glob": "^3.3.2",
146
- "hono": "~4.8.0",
147
- "lodash.kebabcase": "^4.1.1",
148
- "openapi-typescript": "^7.4.2",
149
- "pg": "~8.17.1",
141
+ "chokidar": "~5.0.0",
142
+ "commander": "~15.0.0",
143
+ "dotenv": "~18.0.1",
144
+ "esbuild": "~0.28.2",
145
+ "fast-glob": "~3.3.3",
146
+ "hono": "~4.13.8",
147
+ "lodash.kebabcase": "~4.1.1",
148
+ "openapi-typescript": "~7.13.0",
149
+ "pg": "~8.23.0",
150
150
  "prompts": "~2.4.2",
151
151
  "tsx": "~4.20.3",
152
- "yaml": "~2.8.2"
152
+ "yaml": "~2.9.1"
153
153
  };
154
154
  var devDependencies = {
155
155
  "@geekmidas/testkit": "workspace:*",
156
- "@types/lodash.kebabcase": "^4.1.9",
156
+ "@types/lodash.kebabcase": "~4.1.9",
157
157
  "@types/node": "~24.9.1",
158
- "@types/pg": "~8.16.0",
158
+ "@types/pg": "~8.23.1",
159
159
  "@types/prompts": "~2.4.9",
160
160
  "typescript": "^5.8.2",
161
161
  "vitest": "^3.2.4",
162
- "zod": "~4.1.13"
162
+ "zod": "~4.6.5"
163
163
  };
164
164
  var peerDependencies = { "@geekmidas/telescope": "workspace:~" };
165
165
  var peerDependenciesMeta = { "@geekmidas/telescope": { "optional": true } };
@@ -7814,26 +7814,26 @@ const CLI_VERSION = `~${pkg.version}`;
7814
7814
  * Run: pnpm --filter @geekmidas/cli sync-versions
7815
7815
  */
7816
7816
  const GEEKMIDAS_VERSIONS = {
7817
- "@geekmidas/audit": "~10.0.0-alpha.2",
7818
- "@geekmidas/auth": "~10.0.0-alpha.2",
7819
- "@geekmidas/cache": "~10.0.0-alpha.2",
7820
- "@geekmidas/client": "~10.0.0-alpha.2",
7821
- "@geekmidas/cloud": "~10.0.0-alpha.2",
7822
- "@geekmidas/constructs": "~10.0.0-alpha.2",
7823
- "@geekmidas/db": "~10.0.0-alpha.2",
7824
- "@geekmidas/emailkit": "~10.0.0-alpha.2",
7825
- "@geekmidas/envkit": "~10.0.0-alpha.2",
7826
- "@geekmidas/errors": "~10.0.0-alpha.2",
7827
- "@geekmidas/events": "~10.0.0-alpha.2",
7828
- "@geekmidas/logger": "~10.0.0-alpha.2",
7829
- "@geekmidas/manifest": "~10.0.0-alpha.2",
7830
- "@geekmidas/rate-limit": "~10.0.0-alpha.2",
7831
- "@geekmidas/schema": "~10.0.0-alpha.2",
7832
- "@geekmidas/services": "~10.0.0-alpha.2",
7833
- "@geekmidas/storage": "~10.0.0-alpha.2",
7834
- "@geekmidas/studio": "~10.0.0-alpha.2",
7835
- "@geekmidas/telescope": "~10.0.0-alpha.2",
7836
- "@geekmidas/testkit": "~10.0.0-alpha.2",
7817
+ "@geekmidas/audit": "~10.0.0-alpha.4",
7818
+ "@geekmidas/auth": "~10.0.0-alpha.4",
7819
+ "@geekmidas/cache": "~10.0.0-alpha.4",
7820
+ "@geekmidas/client": "~10.0.0-alpha.4",
7821
+ "@geekmidas/cloud": "~10.0.0-alpha.4",
7822
+ "@geekmidas/constructs": "~10.0.0-alpha.4",
7823
+ "@geekmidas/db": "~10.0.0-alpha.4",
7824
+ "@geekmidas/emailkit": "~10.0.0-alpha.4",
7825
+ "@geekmidas/envkit": "~10.0.0-alpha.4",
7826
+ "@geekmidas/errors": "~10.0.0-alpha.4",
7827
+ "@geekmidas/events": "~10.0.0-alpha.4",
7828
+ "@geekmidas/logger": "~10.0.0-alpha.4",
7829
+ "@geekmidas/manifest": "~10.0.0-alpha.4",
7830
+ "@geekmidas/rate-limit": "~10.0.0-alpha.4",
7831
+ "@geekmidas/schema": "~10.0.0-alpha.4",
7832
+ "@geekmidas/services": "~10.0.0-alpha.4",
7833
+ "@geekmidas/storage": "~10.0.0-alpha.4",
7834
+ "@geekmidas/studio": "~10.0.0-alpha.4",
7835
+ "@geekmidas/telescope": "~10.0.0-alpha.4",
7836
+ "@geekmidas/testkit": "~10.0.0-alpha.4",
7837
7837
  "@geekmidas/cli": CLI_VERSION
7838
7838
  };
7839
7839
 
@@ -10480,6 +10480,23 @@ export const telescope = new Telescope({
10480
10480
 
10481
10481
  //#endregion
10482
10482
  //#region src/init/templates/worker.ts
10483
+ /**
10484
+ * A project that is background work and nothing else.
10485
+ *
10486
+ * It used to scaffold a `RestApi` with no endpoints on it — an HTTP surface
10487
+ * declared by a project whose premise is that nothing calls it over HTTP —
10488
+ * because a surface was the only construct that made an app exist and the only
10489
+ * way to get a logger into the generated runtime. `Worker` is the construct
10490
+ * that was missing: it takes no authorizer, publishes no address, and hands out
10491
+ * factories already carrying its logger.
10492
+ *
10493
+ * It scaffolds no cron. A cron is the obvious thing to put in a worker and it
10494
+ * would not run: `CronGenerator` emits handlers for `aws-lambda` only, and
10495
+ * `.gkm/server/` has no crons file, so a scheduled job on a server target
10496
+ * deploys nothing at all. Subscribers and queues do have a server runtime,
10497
+ * which is why those are what this template teaches. The cron example returns
10498
+ * when there is a scheduler to run it.
10499
+ */
10483
10500
  const workerTemplate = {
10484
10501
  name: "worker",
10485
10502
  description: "Background job processing",
@@ -10489,11 +10506,8 @@ const workerTemplate = {
10489
10506
  "@geekmidas/envkit": GEEKMIDAS_VERSIONS["@geekmidas/envkit"],
10490
10507
  "@geekmidas/events": GEEKMIDAS_VERSIONS["@geekmidas/events"],
10491
10508
  "@geekmidas/logger": GEEKMIDAS_VERSIONS["@geekmidas/logger"],
10492
- "@geekmidas/rate-limit": GEEKMIDAS_VERSIONS["@geekmidas/rate-limit"],
10493
10509
  "@geekmidas/schema": GEEKMIDAS_VERSIONS["@geekmidas/schema"],
10494
- "@hono/node-server": "~1.14.1",
10495
- hono: "~4.8.2",
10496
- pino: "~9.6.0"
10510
+ pino: "~10.3.1"
10497
10511
  },
10498
10512
  devDependencies: {
10499
10513
  "@biomejs/biome": "~2.3.0",
@@ -10515,34 +10529,18 @@ const workerTemplate = {
10515
10529
  "fmt:check": "biome format ."
10516
10530
  },
10517
10531
  files: (options) => {
10518
- const { loggerType, routesStructure, name: name$1 } = options;
10532
+ const { loggerType, name: name$1 } = options;
10519
10533
  const loggerContent = `import { createLogger } from '@geekmidas/logger/${loggerType}';
10520
10534
 
10521
10535
  export const logger = createLogger();
10522
10536
  `;
10523
- const getRoutePath = (file) => {
10524
- switch (routesStructure) {
10525
- case "centralized-endpoints": return `src/endpoints/${file}`;
10526
- case "centralized-routes": return `src/routes/${file}`;
10527
- case "domain-based": return `src/${file.replace(".ts", "")}/routes/index.ts`;
10528
- }
10529
- };
10530
- const apiImport = routesStructure === "domain-based" ? "../../constructs/api.js" : "../constructs/api.js";
10531
10537
  const files$1 = [
10532
10538
  {
10533
- path: "src/constructs/api.ts",
10534
- content: `import { RestApi } from '@geekmidas/constructs/rest-api';
10539
+ path: "src/constructs/worker.ts",
10540
+ content: `import { Worker } from '@geekmidas/constructs/worker';
10535
10541
  import { logger } from '../config/logger.ts';
10536
10542
 
10537
- export const api = new RestApi('Api', {
10538
- // Typed out rather than omitted: an API that ships open because a field was
10539
- // left off is the one default worth refusing to have.
10540
- defaultAuthorizer: 'none',
10541
-
10542
- // The actual logger, not a path to one. Every endpoint built from this
10543
- // surface runs with it, and so does the generated entry.
10544
- logger,
10545
- });
10543
+ export const worker = new Worker('Jobs', { logger });
10546
10544
  `
10547
10545
  },
10548
10546
  {
@@ -10566,23 +10564,6 @@ export const config = envParser
10566
10564
  path: "src/config/logger.ts",
10567
10565
  content: loggerContent
10568
10566
  },
10569
- {
10570
- path: getRoutePath("health.ts"),
10571
- content: `import { z } from 'zod';
10572
- import { api } from '${apiImport}';
10573
-
10574
- export const healthEndpoint = api
10575
- .get('/health')
10576
- .output(z.object({
10577
- status: z.string(),
10578
- timestamp: z.string(),
10579
- }))
10580
- .handle(async () => ({
10581
- status: 'ok',
10582
- timestamp: new Date().toISOString(),
10583
- }));
10584
- `
10585
- },
10586
10567
  {
10587
10568
  path: "src/events/types.ts",
10588
10569
  content: `import type { PublishableMessage } from '@geekmidas/events';
@@ -10624,42 +10605,28 @@ export const eventsPublisherService = {
10624
10605
  },
10625
10606
  {
10626
10607
  path: "src/subscribers/user-events.ts",
10627
- content: `import { s } from '@geekmidas/constructs/subscribers';
10608
+ content: `import { worker } from '~/constructs/worker.ts';
10628
10609
  import { eventsPublisherService } from '~/events/publisher.ts';
10629
10610
 
10630
- export const userEventsSubscriber = s
10611
+ export const userEventsSubscriber = worker.subscribers
10631
10612
  .publisher(eventsPublisherService)
10632
10613
  .subscribe(['user.created', 'user.updated'])
10633
- .handle(async ({ event, logger }) => {
10634
- logger.info({ type: event.type, payload: event.payload }, 'Processing user event');
10635
-
10636
- switch (event.type) {
10637
- case 'user.created':
10638
- // Handle user creation
10639
- logger.info({ userId: event.payload.userId }, 'New user created');
10640
- break;
10641
- case 'user.updated':
10642
- // Handle user update
10643
- logger.info({ userId: event.payload.userId }, 'User updated');
10644
- break;
10614
+ .handle(async ({ events, logger }) => {
10615
+ // A batch, not a single event. Both transports deliver in batches, so
10616
+ // handling them one at a time is a round trip per event for no reason.
10617
+ logger.info({ count: events.length }, 'Processing user events');
10618
+
10619
+ for (const event of events) {
10620
+ switch (event.type) {
10621
+ case 'user.created':
10622
+ logger.info({ userId: event.payload.userId }, 'New user created');
10623
+ break;
10624
+ case 'user.updated':
10625
+ logger.info({ userId: event.payload.userId }, 'User updated');
10626
+ break;
10627
+ }
10645
10628
  }
10646
10629
  });
10647
- `
10648
- },
10649
- {
10650
- path: "src/crons/cleanup.ts",
10651
- content: `import { cron } from '@geekmidas/constructs/crons';
10652
-
10653
- // Run every day at midnight
10654
- export const cleanupCron = cron('0 0 * * *')
10655
- .handle(async ({ logger }) => {
10656
- logger.info('Running cleanup job');
10657
-
10658
- // Add your cleanup logic here
10659
- // e.g., delete old sessions, clean up temp files, etc.
10660
-
10661
- logger.info('Cleanup job completed');
10662
- });
10663
10630
  `
10664
10631
  }
10665
10632
  ];
@@ -13908,7 +13875,7 @@ async function testCommand(options = {}) {
13908
13875
  console.log(`\n🧪 Running tests with ${stage} environment...\n`);
13909
13876
  const autoSetup = options.autoSetup || Boolean(process.env.GKM_AUTO_SETUP);
13910
13877
  if (autoSetup) {
13911
- const { ensureStageSecrets } = await import("./setup-DCuudnCl.mjs");
13878
+ const { ensureStageSecrets } = await import("./setup-ZijS4qeC.mjs");
13912
13879
  const generated = await ensureStageSecrets(stage, cwd);
13913
13880
  if (generated) console.log(` 🔐 Generated fresh ${stage} secrets (auto-setup)`);
13914
13881
  }
@@ -14383,7 +14350,7 @@ program.command("secrets:push").description("Push secrets to remote provider (SS
14383
14350
  const { workspace } = await loadWorkspaceConfig$1();
14384
14351
  const secrets = await readStageSecrets$1(options.stage, workspace.root);
14385
14352
  if (secrets) {
14386
- const { derivedContainers: derivedContainers$1 } = await import("./workspace-DK4WWJIn.mjs");
14353
+ const { derivedContainers: derivedContainers$1 } = await import("./workspace-k4l3rsFh.mjs");
14387
14354
  const result = reconcileMissingSecrets(secrets, workspace, await derivedContainers$1(workspace, options.stage));
14388
14355
  if (result) {
14389
14356
  await writeStageSecrets$1(result.secrets, workspace.root);
@@ -14412,7 +14379,7 @@ program.command("secrets:pull").description("Pull secrets from remote provider (
14412
14379
  console.error(`No remote secrets found for stage "${options.stage}".`);
14413
14380
  process.exit(1);
14414
14381
  }
14415
- const { derivedContainers: derivedContainers$1 } = await import("./workspace-DK4WWJIn.mjs");
14382
+ const { derivedContainers: derivedContainers$1 } = await import("./workspace-k4l3rsFh.mjs");
14416
14383
  const result = reconcileMissingSecrets(secrets, workspace, await derivedContainers$1(workspace, options.stage));
14417
14384
  if (result) {
14418
14385
  secrets = result.secrets;
@@ -14439,7 +14406,7 @@ program.command("secrets:reconcile").description("Backfill missing custom secret
14439
14406
  console.error(`No secrets found for stage "${options.stage}". Run "gkm secrets:init --stage ${options.stage}" first.`);
14440
14407
  process.exit(1);
14441
14408
  }
14442
- const { derivedContainers: derivedContainers$1 } = await import("./workspace-DK4WWJIn.mjs");
14409
+ const { derivedContainers: derivedContainers$1 } = await import("./workspace-k4l3rsFh.mjs");
14443
14410
  const result = reconcileMissingSecrets(secrets, workspace, await derivedContainers$1(workspace, options.stage));
14444
14411
  if (!result) {
14445
14412
  console.log(`\n✓ Secrets for stage "${options.stage}" are up-to-date`);