@geekmidas/cli 1.10.35 → 1.10.37

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 (100) hide show
  1. package/CHANGELOG.md +20 -0
  2. package/dist/{config-B62g483e.mjs → config-Bbu1JKvf.mjs} +2 -2
  3. package/dist/{config-B62g483e.mjs.map → config-Bbu1JKvf.mjs.map} +1 -1
  4. package/dist/{config-Cuo8vFsp.cjs → config-DujV8DbR.cjs} +2 -2
  5. package/dist/{config-Cuo8vFsp.cjs.map → config-DujV8DbR.cjs.map} +1 -1
  6. package/dist/config.cjs +2 -2
  7. package/dist/config.d.cts +1 -1
  8. package/dist/config.d.mts +1 -1
  9. package/dist/config.mjs +2 -2
  10. package/dist/deploy/sniffer-loader.cjs +1 -1
  11. package/dist/{fullstack-secrets-Bchl2MDd.cjs → fullstack-secrets-BYzi6Hwl.cjs} +3 -2
  12. package/dist/{fullstack-secrets-Bchl2MDd.cjs.map → fullstack-secrets-BYzi6Hwl.cjs.map} +1 -1
  13. package/dist/{fullstack-secrets-P84v8zWn.mjs → fullstack-secrets-l8s3II_H.mjs} +3 -2
  14. package/dist/{fullstack-secrets-P84v8zWn.mjs.map → fullstack-secrets-l8s3II_H.mjs.map} +1 -1
  15. package/dist/{index-Dt_dZ7K4.d.mts → index-BBvGMG_A.d.mts} +162 -68
  16. package/dist/index-BBvGMG_A.d.mts.map +1 -0
  17. package/dist/{index-C3t5VL4R.d.cts → index-Dz2a7xQU.d.cts} +162 -68
  18. package/dist/index-Dz2a7xQU.d.cts.map +1 -0
  19. package/dist/index.cjs +1366 -149
  20. package/dist/index.cjs.map +1 -1
  21. package/dist/index.mjs +1366 -149
  22. package/dist/index.mjs.map +1 -1
  23. package/dist/{openapi-B_rJjImN.cjs → openapi-0JUzU5Tv.cjs} +72 -15
  24. package/dist/openapi-0JUzU5Tv.cjs.map +1 -0
  25. package/dist/{openapi-CflxypuN.mjs → openapi-C5AycKTR.mjs} +73 -16
  26. package/dist/openapi-C5AycKTR.mjs.map +1 -0
  27. package/dist/openapi.cjs +3 -3
  28. package/dist/openapi.d.cts +7 -0
  29. package/dist/openapi.d.cts.map +1 -1
  30. package/dist/openapi.d.mts +7 -0
  31. package/dist/openapi.d.mts.map +1 -1
  32. package/dist/openapi.mjs +3 -3
  33. package/dist/{reconcile-DAAKa0YR.mjs → reconcile-CYGmqXvq.mjs} +2 -2
  34. package/dist/{reconcile-DAAKa0YR.mjs.map → reconcile-CYGmqXvq.mjs.map} +1 -1
  35. package/dist/{reconcile-CZtzdrnc.cjs → reconcile-D93YG7G5.cjs} +2 -2
  36. package/dist/{reconcile-CZtzdrnc.cjs.map → reconcile-D93YG7G5.cjs.map} +1 -1
  37. package/dist/workspace/index.cjs +4 -1
  38. package/dist/workspace/index.d.cts +2 -2
  39. package/dist/workspace/index.d.mts +2 -2
  40. package/dist/workspace/index.mjs +2 -2
  41. package/dist/{workspace-CGYykWfn.cjs → workspace-CQTT7HJQ.cjs} +107 -27
  42. package/dist/workspace-CQTT7HJQ.cjs.map +1 -0
  43. package/dist/{workspace-Bi4X7Yzy.mjs → workspace-D-37Ylqo.mjs} +90 -28
  44. package/dist/workspace-D-37Ylqo.mjs.map +1 -0
  45. package/docs/dev-server-resilience-design.md +189 -0
  46. package/package.json +4 -4
  47. package/src/__tests__/openapi.spec.ts +99 -9
  48. package/src/build/__tests__/workspace-build.spec.ts +7 -7
  49. package/src/build/index.ts +25 -9
  50. package/src/credentials/__tests__/helpers.ts +1 -1
  51. package/src/credentials/__tests__/workspaceCredentials.spec.ts +1 -1
  52. package/src/deploy/__tests__/domain.spec.ts +12 -12
  53. package/src/deploy/__tests__/env-resolver.spec.ts +29 -1
  54. package/src/deploy/__tests__/index.spec.ts +14 -14
  55. package/src/deploy/__tests__/sniffer.spec.ts +9 -9
  56. package/src/deploy/domain.ts +19 -11
  57. package/src/deploy/env-resolver.ts +5 -10
  58. package/src/deploy/index.ts +25 -8
  59. package/src/deploy/sniffer.ts +11 -5
  60. package/src/deploy/types.ts +1 -1
  61. package/src/dev/__tests__/index.spec.ts +11 -11
  62. package/src/dev/index.ts +43 -9
  63. package/src/docker/__tests__/compose.spec.ts +4 -4
  64. package/src/docker/compose.ts +5 -3
  65. package/src/docker/index.ts +34 -6
  66. package/src/docker/templates.ts +138 -0
  67. package/src/generators/OpenApiTsGenerator.ts +22 -0
  68. package/src/generators/__tests__/OpenApiTsGenerator.registry.spec.ts +77 -0
  69. package/src/index.ts +6 -2
  70. package/src/init/__tests__/generators.spec.ts +147 -0
  71. package/src/init/__tests__/init.spec.ts +1 -1
  72. package/src/init/generators/mobile-expo.ts +576 -0
  73. package/src/init/generators/monorepo.ts +42 -11
  74. package/src/init/generators/web-tanstack.ts +348 -0
  75. package/src/init/index.ts +40 -3
  76. package/src/init/templates/index.ts +31 -0
  77. package/src/init/versions.ts +2 -2
  78. package/src/openapi.ts +110 -23
  79. package/src/secrets/__tests__/reconcile.spec.ts +1 -1
  80. package/src/setup/__tests__/reconcile-secrets.spec.ts +2 -2
  81. package/src/setup/fullstack-secrets.ts +7 -1
  82. package/src/setup/index.ts +2 -1
  83. package/src/test/__tests__/__fixtures__/workspace.ts +1 -1
  84. package/src/test/__tests__/web.spec.ts +2 -2
  85. package/src/workspace/__tests__/client-generator.spec.ts +6 -6
  86. package/src/workspace/__tests__/index.spec.ts +96 -4
  87. package/src/workspace/__tests__/publicEnv.spec.ts +64 -0
  88. package/src/workspace/__tests__/schema.spec.ts +27 -30
  89. package/src/workspace/__tests__/type-inference.spec.ts +5 -5
  90. package/src/workspace/client-generator.ts +10 -7
  91. package/src/workspace/index.ts +17 -3
  92. package/src/workspace/publicEnv.ts +57 -0
  93. package/src/workspace/schema.ts +126 -27
  94. package/src/workspace/types.ts +40 -64
  95. package/dist/index-C3t5VL4R.d.cts.map +0 -1
  96. package/dist/index-Dt_dZ7K4.d.mts.map +0 -1
  97. package/dist/openapi-B_rJjImN.cjs.map +0 -1
  98. package/dist/openapi-CflxypuN.mjs.map +0 -1
  99. package/dist/workspace-Bi4X7Yzy.mjs.map +0 -1
  100. package/dist/workspace-CGYykWfn.cjs.map +0 -1
@@ -1,6 +1,53 @@
1
1
  const require_chunk = require('./chunk-CUT6urMc.cjs');
2
2
  const node_path = require_chunk.__toESM(require("node:path"));
3
3
 
4
+ //#region src/workspace/publicEnv.ts
5
+ /**
6
+ * All public env-var prefixes the toolbox understands.
7
+ *
8
+ * Used when resolving incoming var names back to a dependency
9
+ * (e.g. `VITE_AUTH_URL` → `auth`). A var matching any of these
10
+ * is considered safe to inline into a client bundle.
11
+ */
12
+ const PUBLIC_ENV_PREFIXES = [
13
+ "NEXT_PUBLIC_",
14
+ "VITE_",
15
+ "EXPO_PUBLIC_"
16
+ ];
17
+ /**
18
+ * Resolve the public env-var prefix that a frontend framework's bundler
19
+ * inlines into client code at build time:
20
+ *
21
+ * - `nextjs` → `NEXT_PUBLIC_`
22
+ * - `vite` → `VITE_`
23
+ * - `tanstack-start` → `VITE_` (uses Vite under the hood)
24
+ * - `expo` → `EXPO_PUBLIC_`
25
+ * - `remix` → `''` (Remix exposes via loaders, no prefix convention)
26
+ *
27
+ * For backend frameworks or unspecified, falls back to `NEXT_PUBLIC_` to
28
+ * preserve the historical default. Backend apps never read these vars
29
+ * from a bundle, so the prefix only affects scaffolding/symmetry.
30
+ */
31
+ function getPublicEnvPrefix(framework) {
32
+ switch (framework) {
33
+ case "vite":
34
+ case "tanstack-start": return "VITE_";
35
+ case "expo": return "EXPO_PUBLIC_";
36
+ case "remix": return "";
37
+ case "nextjs": return "NEXT_PUBLIC_";
38
+ default: return "NEXT_PUBLIC_";
39
+ }
40
+ }
41
+ /**
42
+ * Strip a known public prefix from a var name.
43
+ * Returns the un-prefixed name, or `null` if no prefix matched.
44
+ */
45
+ function stripPublicPrefix(name) {
46
+ for (const prefix of PUBLIC_ENV_PREFIXES) if (prefix && name.startsWith(prefix)) return name.slice(prefix.length);
47
+ return null;
48
+ }
49
+
50
+ //#endregion
4
51
  //#region ../../node_modules/.pnpm/zod@4.1.13/node_modules/zod/v4/core/core.js
5
52
  /** A special constant with type `never` */
6
53
  const NEVER = Object.freeze({ status: "aborted" });
@@ -3401,11 +3448,6 @@ const OpenApiConfigSchema = object({
3401
3448
  */
3402
3449
  const HooksConfigSchema = object({ server: string().optional() });
3403
3450
  /**
3404
- * Auth provider schema.
3405
- * Currently only 'better-auth' is supported.
3406
- */
3407
- const AuthProviderSchema = _enum(["better-auth"]);
3408
- /**
3409
3451
  * Backend framework schema for non-gkm apps.
3410
3452
  */
3411
3453
  const BackendFrameworkSchema = _enum([
@@ -3420,12 +3462,30 @@ const BackendFrameworkSchema = _enum([
3420
3462
  const FrontendFrameworkSchema = _enum([
3421
3463
  "nextjs",
3422
3464
  "remix",
3423
- "vite"
3465
+ "vite",
3466
+ "tanstack-start"
3424
3467
  ]);
3425
3468
  /**
3426
- * Combined framework schema (backend or frontend).
3469
+ * Mobile framework schema.
3470
+ */
3471
+ const MobileFrameworkSchema = _enum(["expo"]);
3472
+ /**
3473
+ * Combined framework schema (backend, frontend, or mobile).
3427
3474
  */
3428
- const FrameworkSchema = union([BackendFrameworkSchema, FrontendFrameworkSchema]);
3475
+ const FrameworkSchema = union([
3476
+ BackendFrameworkSchema,
3477
+ FrontendFrameworkSchema,
3478
+ MobileFrameworkSchema
3479
+ ]);
3480
+ /** Frontend framework values, kept in sync with FrontendFrameworkSchema. */
3481
+ const FRONTEND_FRAMEWORKS = [
3482
+ "nextjs",
3483
+ "remix",
3484
+ "vite",
3485
+ "tanstack-start"
3486
+ ];
3487
+ /** Mobile framework values, kept in sync with MobileFrameworkSchema. */
3488
+ const MOBILE_FRAMEWORKS = ["expo"];
3429
3489
  /**
3430
3490
  * Deploy target schema.
3431
3491
  * Currently only 'dokploy' is supported.
@@ -3735,8 +3795,8 @@ const StateConfigSchema = union([BuiltInStateConfigSchema, CustomStateConfigSche
3735
3795
  const AppConfigSchema = object({
3736
3796
  type: _enum([
3737
3797
  "backend",
3738
- "frontend",
3739
- "auth"
3798
+ "web",
3799
+ "mobile"
3740
3800
  ]).optional().default("backend"),
3741
3801
  path: string().min(1, "App path is required"),
3742
3802
  port: number().int().positive("Port must be a positive integer"),
@@ -3767,27 +3827,23 @@ const AppConfigSchema = object({
3767
3827
  config: object({
3768
3828
  client: string().optional(),
3769
3829
  server: string().optional()
3770
- }).optional(),
3771
- provider: AuthProviderSchema.optional()
3830
+ }).optional()
3772
3831
  }).refine((data) => {
3773
- if (data.type === "frontend") {
3774
- const frontendFrameworks = [
3775
- "nextjs",
3776
- "remix",
3777
- "vite"
3778
- ];
3779
- if (!data.framework || !frontendFrameworks.includes(data.framework)) return false;
3832
+ if (data.type === "web") {
3833
+ if (!data.framework || !FRONTEND_FRAMEWORKS.includes(data.framework)) return false;
3780
3834
  }
3781
3835
  return true;
3782
3836
  }, {
3783
- message: "Frontend apps must have a valid frontend framework (nextjs, remix, vite)",
3837
+ message: `Web apps must have a valid web framework (${FRONTEND_FRAMEWORKS.join(", ")})`,
3784
3838
  path: ["framework"]
3785
3839
  }).refine((data) => {
3786
- if (data.type === "auth" && !data.provider) return false;
3840
+ if (data.type === "mobile") {
3841
+ if (!data.framework || !MOBILE_FRAMEWORKS.includes(data.framework)) return false;
3842
+ }
3787
3843
  return true;
3788
3844
  }, {
3789
- message: "Auth apps must have provider defined",
3790
- path: ["provider"]
3845
+ message: `Mobile apps must have a valid mobile framework (${MOBILE_FRAMEWORKS.join(", ")})`,
3846
+ path: ["framework"]
3791
3847
  });
3792
3848
  /**
3793
3849
  * Workspace configuration schema.
@@ -3943,7 +3999,7 @@ function validateDependencies(apps) {
3943
3999
  * logger: './src/logger',
3944
4000
  * },
3945
4001
  * web: {
3946
- * type: 'frontend',
4002
+ * type: 'web',
3947
4003
  * framework: 'nextjs',
3948
4004
  * path: 'apps/web',
3949
4005
  * port: 3001,
@@ -4120,19 +4176,25 @@ function getAppBuildOrder(workspace) {
4120
4176
  }
4121
4177
  /**
4122
4178
  * Generate environment variables for app dependencies.
4123
- * Each dependency gets both a `{DEP_NAME}_URL` and `NEXT_PUBLIC_{DEP_NAME}_URL` variable.
4179
+ *
4180
+ * Each dependency gets the un-prefixed `{DEP}_URL` (for server-side use) and,
4181
+ * when the consuming app's framework supports a public-var prefix, also the
4182
+ * prefixed form (e.g. `NEXT_PUBLIC_{DEP}_URL` for Next.js, `VITE_{DEP}_URL`
4183
+ * for Vite/TanStack Start). The prefixed form is what gets bundled into the
4184
+ * client at build time.
4124
4185
  */
4125
4186
  function getDependencyEnvVars(workspace, appName, urlPrefix = "http://localhost") {
4126
4187
  const app = workspace.apps[appName];
4127
4188
  if (!app) return {};
4128
4189
  const env = {};
4190
+ const publicPrefix = getPublicEnvPrefix(app.framework);
4129
4191
  for (const depName of app.dependencies) {
4130
4192
  const dep = workspace.apps[depName];
4131
4193
  if (dep) {
4132
4194
  const url$1 = `${urlPrefix}:${dep.port}`;
4133
4195
  const envKey = `${depName.toUpperCase()}_URL`;
4134
4196
  env[envKey] = url$1;
4135
- env[`NEXT_PUBLIC_${envKey}`] = url$1;
4197
+ if (publicPrefix) env[`${publicPrefix}${envKey}`] = url$1;
4136
4198
  }
4137
4199
  }
4138
4200
  return env;
@@ -4176,6 +4238,12 @@ Object.defineProperty(exports, 'PHASE_2_DEPLOY_TARGETS', {
4176
4238
  return PHASE_2_DEPLOY_TARGETS;
4177
4239
  }
4178
4240
  });
4241
+ Object.defineProperty(exports, 'PUBLIC_ENV_PREFIXES', {
4242
+ enumerable: true,
4243
+ get: function () {
4244
+ return PUBLIC_ENV_PREFIXES;
4245
+ }
4246
+ });
4179
4247
  Object.defineProperty(exports, 'SUPPORTED_DEPLOY_TARGETS', {
4180
4248
  enumerable: true,
4181
4249
  get: function () {
@@ -4230,6 +4298,12 @@ Object.defineProperty(exports, 'getEndpointForStage', {
4230
4298
  return getEndpointForStage;
4231
4299
  }
4232
4300
  });
4301
+ Object.defineProperty(exports, 'getPublicEnvPrefix', {
4302
+ enumerable: true,
4303
+ get: function () {
4304
+ return getPublicEnvPrefix;
4305
+ }
4306
+ });
4233
4307
  Object.defineProperty(exports, 'isDeployTargetSupported', {
4234
4308
  enumerable: true,
4235
4309
  get: function () {
@@ -4266,6 +4340,12 @@ Object.defineProperty(exports, 'safeValidateWorkspaceConfig', {
4266
4340
  return safeValidateWorkspaceConfig;
4267
4341
  }
4268
4342
  });
4343
+ Object.defineProperty(exports, 'stripPublicPrefix', {
4344
+ enumerable: true,
4345
+ get: function () {
4346
+ return stripPublicPrefix;
4347
+ }
4348
+ });
4269
4349
  Object.defineProperty(exports, 'validateWorkspaceConfig', {
4270
4350
  enumerable: true,
4271
4351
  get: function () {
@@ -4278,4 +4358,4 @@ Object.defineProperty(exports, 'wrapSingleAppAsWorkspace', {
4278
4358
  return wrapSingleAppAsWorkspace;
4279
4359
  }
4280
4360
  });
4281
- //# sourceMappingURL=workspace-CGYykWfn.cjs.map
4361
+ //# sourceMappingURL=workspace-CQTT7HJQ.cjs.map