@geekmidas/cli 1.10.36 → 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 (82) hide show
  1. package/CHANGELOG.md +10 -0
  2. package/dist/{config-U-gojtxn.mjs → config-Bbu1JKvf.mjs} +2 -2
  3. package/dist/{config-U-gojtxn.mjs.map → config-Bbu1JKvf.mjs.map} +1 -1
  4. package/dist/{config-QnuOcYXp.cjs → config-DujV8DbR.cjs} +2 -2
  5. package/dist/{config-QnuOcYXp.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/{fullstack-secrets-Bchl2MDd.cjs → fullstack-secrets-BYzi6Hwl.cjs} +3 -2
  11. package/dist/{fullstack-secrets-Bchl2MDd.cjs.map → fullstack-secrets-BYzi6Hwl.cjs.map} +1 -1
  12. package/dist/{fullstack-secrets-P84v8zWn.mjs → fullstack-secrets-l8s3II_H.mjs} +3 -2
  13. package/dist/{fullstack-secrets-P84v8zWn.mjs.map → fullstack-secrets-l8s3II_H.mjs.map} +1 -1
  14. package/dist/{index-D7iT4dnv.d.mts → index-BBvGMG_A.d.mts} +124 -67
  15. package/dist/index-BBvGMG_A.d.mts.map +1 -0
  16. package/dist/{index-DRQq26DF.d.cts → index-Dz2a7xQU.d.cts} +124 -67
  17. package/dist/index-Dz2a7xQU.d.cts.map +1 -0
  18. package/dist/index.cjs +244 -91
  19. package/dist/index.cjs.map +1 -1
  20. package/dist/index.mjs +244 -91
  21. package/dist/index.mjs.map +1 -1
  22. package/dist/{openapi-Bb4UEyZN.cjs → openapi-0JUzU5Tv.cjs} +9 -2
  23. package/dist/{openapi-Bb4UEyZN.cjs.map → openapi-0JUzU5Tv.cjs.map} +1 -1
  24. package/dist/{openapi-BA0e3I_s.mjs → openapi-C5AycKTR.mjs} +10 -3
  25. package/dist/{openapi-BA0e3I_s.mjs.map → openapi-C5AycKTR.mjs.map} +1 -1
  26. package/dist/openapi.cjs +3 -3
  27. package/dist/openapi.mjs +3 -3
  28. package/dist/{reconcile-DAAKa0YR.mjs → reconcile-CYGmqXvq.mjs} +2 -2
  29. package/dist/{reconcile-DAAKa0YR.mjs.map → reconcile-CYGmqXvq.mjs.map} +1 -1
  30. package/dist/{reconcile-CZtzdrnc.cjs → reconcile-D93YG7G5.cjs} +2 -2
  31. package/dist/{reconcile-CZtzdrnc.cjs.map → reconcile-D93YG7G5.cjs.map} +1 -1
  32. package/dist/workspace/index.cjs +1 -1
  33. package/dist/workspace/index.d.cts +1 -1
  34. package/dist/workspace/index.d.mts +1 -1
  35. package/dist/workspace/index.mjs +1 -1
  36. package/dist/{workspace-BobDOIG9.cjs → workspace-CQTT7HJQ.cjs} +34 -25
  37. package/dist/workspace-CQTT7HJQ.cjs.map +1 -0
  38. package/dist/{workspace-Cgmvgwh8.mjs → workspace-D-37Ylqo.mjs} +34 -25
  39. package/dist/workspace-D-37Ylqo.mjs.map +1 -0
  40. package/docs/dev-server-resilience-design.md +189 -0
  41. package/package.json +5 -5
  42. package/src/build/__tests__/workspace-build.spec.ts +7 -7
  43. package/src/build/index.ts +25 -9
  44. package/src/credentials/__tests__/helpers.ts +1 -1
  45. package/src/credentials/__tests__/workspaceCredentials.spec.ts +1 -1
  46. package/src/deploy/__tests__/domain.spec.ts +12 -12
  47. package/src/deploy/__tests__/env-resolver.spec.ts +1 -1
  48. package/src/deploy/__tests__/index.spec.ts +14 -14
  49. package/src/deploy/__tests__/sniffer.spec.ts +9 -9
  50. package/src/deploy/domain.ts +19 -11
  51. package/src/deploy/index.ts +12 -1
  52. package/src/deploy/sniffer.ts +1 -1
  53. package/src/deploy/types.ts +1 -1
  54. package/src/dev/__tests__/index.spec.ts +11 -11
  55. package/src/dev/index.ts +14 -8
  56. package/src/docker/__tests__/compose.spec.ts +4 -4
  57. package/src/docker/compose.ts +5 -3
  58. package/src/docker/index.ts +34 -6
  59. package/src/docker/templates.ts +138 -0
  60. package/src/generators/OpenApiTsGenerator.ts +22 -0
  61. package/src/generators/__tests__/OpenApiTsGenerator.registry.spec.ts +77 -0
  62. package/src/init/__tests__/init.spec.ts +1 -1
  63. package/src/init/generators/monorepo.ts +3 -3
  64. package/src/secrets/__tests__/reconcile.spec.ts +1 -1
  65. package/src/setup/__tests__/reconcile-secrets.spec.ts +2 -2
  66. package/src/setup/fullstack-secrets.ts +7 -1
  67. package/src/setup/index.ts +2 -1
  68. package/src/test/__tests__/__fixtures__/workspace.ts +1 -1
  69. package/src/test/__tests__/web.spec.ts +2 -2
  70. package/src/workspace/__tests__/client-generator.spec.ts +6 -6
  71. package/src/workspace/__tests__/index.spec.ts +4 -4
  72. package/src/workspace/__tests__/schema.spec.ts +27 -30
  73. package/src/workspace/__tests__/type-inference.spec.ts +5 -5
  74. package/src/workspace/client-generator.ts +10 -7
  75. package/src/workspace/index.ts +1 -1
  76. package/src/workspace/publicEnv.ts +2 -4
  77. package/src/workspace/schema.ts +126 -27
  78. package/src/workspace/types.ts +40 -69
  79. package/dist/index-D7iT4dnv.d.mts.map +0 -1
  80. package/dist/index-DRQq26DF.d.cts.map +0 -1
  81. package/dist/workspace-BobDOIG9.cjs.map +0 -1
  82. package/dist/workspace-Cgmvgwh8.mjs.map +0 -1
package/dist/openapi.cjs CHANGED
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env -S npx tsx
2
- require('./workspace-BobDOIG9.cjs');
3
- require('./config-QnuOcYXp.cjs');
4
- const require_openapi = require('./openapi-Bb4UEyZN.cjs');
2
+ require('./workspace-CQTT7HJQ.cjs');
3
+ require('./config-DujV8DbR.cjs');
4
+ const require_openapi = require('./openapi-0JUzU5Tv.cjs');
5
5
 
6
6
  exports.OPENAPI_OUTPUT_PATH = require_openapi.OPENAPI_OUTPUT_PATH;
7
7
  exports.generateOpenApi = require_openapi.generateOpenApi;
package/dist/openapi.mjs CHANGED
@@ -1,6 +1,6 @@
1
1
  #!/usr/bin/env -S npx tsx
2
- import "./workspace-Cgmvgwh8.mjs";
3
- import "./config-U-gojtxn.mjs";
4
- import { OPENAPI_OUTPUT_PATH, generateOpenApi, openapiCommand, resolveOpenApiConfig } from "./openapi-BA0e3I_s.mjs";
2
+ import "./workspace-D-37Ylqo.mjs";
3
+ import "./config-Bbu1JKvf.mjs";
4
+ import { OPENAPI_OUTPUT_PATH, generateOpenApi, openapiCommand, resolveOpenApiConfig } from "./openapi-C5AycKTR.mjs";
5
5
 
6
6
  export { OPENAPI_OUTPUT_PATH, generateOpenApi, openapiCommand, resolveOpenApiConfig };
@@ -1,4 +1,4 @@
1
- import { generateFullstackCustomSecrets } from "./fullstack-secrets-P84v8zWn.mjs";
1
+ import { generateFullstackCustomSecrets } from "./fullstack-secrets-l8s3II_H.mjs";
2
2
 
3
3
  //#region src/secrets/reconcile.ts
4
4
  /**
@@ -33,4 +33,4 @@ function reconcileMissingSecrets(secrets, workspace) {
33
33
 
34
34
  //#endregion
35
35
  export { reconcileMissingSecrets };
36
- //# sourceMappingURL=reconcile-DAAKa0YR.mjs.map
36
+ //# sourceMappingURL=reconcile-CYGmqXvq.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"reconcile-DAAKa0YR.mjs","names":["secrets: StageSecrets","workspace: NormalizedWorkspace","addedKeys: string[]"],"sources":["../src/secrets/reconcile.ts"],"sourcesContent":["import { generateFullstackCustomSecrets } from '../setup/fullstack-secrets.js';\nimport type { NormalizedWorkspace } from '../workspace/types.js';\nimport type { StageSecrets } from './types.js';\n\nexport interface ReconcileResult {\n\t/** The updated secrets with missing keys backfilled */\n\tsecrets: StageSecrets;\n\t/** Keys that were added */\n\taddedKeys: string[];\n}\n\n/**\n * Reconcile missing custom secrets for a workspace.\n *\n * Compares current secrets against what generateFullstackCustomSecrets()\n * would produce and backfills any missing keys without overwriting\n * existing values.\n *\n * @returns ReconcileResult if keys were added, null if secrets are up-to-date\n */\nexport function reconcileMissingSecrets(\n\tsecrets: StageSecrets,\n\tworkspace: NormalizedWorkspace,\n): ReconcileResult | null {\n\tconst isMultiApp = Object.keys(workspace.apps).length > 1;\n\tif (!isMultiApp) {\n\t\treturn null;\n\t}\n\n\tconst expectedCustom = generateFullstackCustomSecrets(workspace);\n\tconst addedKeys: string[] = [];\n\tconst mergedCustom = { ...secrets.custom };\n\n\tfor (const [key, value] of Object.entries(expectedCustom)) {\n\t\tif (!(key in mergedCustom)) {\n\t\t\tmergedCustom[key] = value;\n\t\t\taddedKeys.push(key);\n\t\t}\n\t}\n\n\tif (addedKeys.length === 0) {\n\t\treturn null;\n\t}\n\n\treturn {\n\t\tsecrets: {\n\t\t\t...secrets,\n\t\t\tupdatedAt: new Date().toISOString(),\n\t\t\tcustom: mergedCustom,\n\t\t},\n\t\taddedKeys,\n\t};\n}\n"],"mappings":";;;;;;;;;;;;AAoBA,SAAgB,wBACfA,SACAC,WACyB;CACzB,MAAM,aAAa,OAAO,KAAK,UAAU,KAAK,CAAC,SAAS;AACxD,MAAK,WACJ,QAAO;CAGR,MAAM,iBAAiB,+BAA+B,UAAU;CAChE,MAAMC,YAAsB,CAAE;CAC9B,MAAM,eAAe,EAAE,GAAG,QAAQ,OAAQ;AAE1C,MAAK,MAAM,CAAC,KAAK,MAAM,IAAI,OAAO,QAAQ,eAAe,CACxD,OAAM,OAAO,eAAe;AAC3B,eAAa,OAAO;AACpB,YAAU,KAAK,IAAI;CACnB;AAGF,KAAI,UAAU,WAAW,EACxB,QAAO;AAGR,QAAO;EACN,SAAS;GACR,GAAG;GACH,WAAW,qBAAI,QAAO,aAAa;GACnC,QAAQ;EACR;EACD;CACA;AACD"}
1
+ {"version":3,"file":"reconcile-CYGmqXvq.mjs","names":["secrets: StageSecrets","workspace: NormalizedWorkspace","addedKeys: string[]"],"sources":["../src/secrets/reconcile.ts"],"sourcesContent":["import { generateFullstackCustomSecrets } from '../setup/fullstack-secrets.js';\nimport type { NormalizedWorkspace } from '../workspace/types.js';\nimport type { StageSecrets } from './types.js';\n\nexport interface ReconcileResult {\n\t/** The updated secrets with missing keys backfilled */\n\tsecrets: StageSecrets;\n\t/** Keys that were added */\n\taddedKeys: string[];\n}\n\n/**\n * Reconcile missing custom secrets for a workspace.\n *\n * Compares current secrets against what generateFullstackCustomSecrets()\n * would produce and backfills any missing keys without overwriting\n * existing values.\n *\n * @returns ReconcileResult if keys were added, null if secrets are up-to-date\n */\nexport function reconcileMissingSecrets(\n\tsecrets: StageSecrets,\n\tworkspace: NormalizedWorkspace,\n): ReconcileResult | null {\n\tconst isMultiApp = Object.keys(workspace.apps).length > 1;\n\tif (!isMultiApp) {\n\t\treturn null;\n\t}\n\n\tconst expectedCustom = generateFullstackCustomSecrets(workspace);\n\tconst addedKeys: string[] = [];\n\tconst mergedCustom = { ...secrets.custom };\n\n\tfor (const [key, value] of Object.entries(expectedCustom)) {\n\t\tif (!(key in mergedCustom)) {\n\t\t\tmergedCustom[key] = value;\n\t\t\taddedKeys.push(key);\n\t\t}\n\t}\n\n\tif (addedKeys.length === 0) {\n\t\treturn null;\n\t}\n\n\treturn {\n\t\tsecrets: {\n\t\t\t...secrets,\n\t\t\tupdatedAt: new Date().toISOString(),\n\t\t\tcustom: mergedCustom,\n\t\t},\n\t\taddedKeys,\n\t};\n}\n"],"mappings":";;;;;;;;;;;;AAoBA,SAAgB,wBACfA,SACAC,WACyB;CACzB,MAAM,aAAa,OAAO,KAAK,UAAU,KAAK,CAAC,SAAS;AACxD,MAAK,WACJ,QAAO;CAGR,MAAM,iBAAiB,+BAA+B,UAAU;CAChE,MAAMC,YAAsB,CAAE;CAC9B,MAAM,eAAe,EAAE,GAAG,QAAQ,OAAQ;AAE1C,MAAK,MAAM,CAAC,KAAK,MAAM,IAAI,OAAO,QAAQ,eAAe,CACxD,OAAM,OAAO,eAAe;AAC3B,eAAa,OAAO;AACpB,YAAU,KAAK,IAAI;CACnB;AAGF,KAAI,UAAU,WAAW,EACxB,QAAO;AAGR,QAAO;EACN,SAAS;GACR,GAAG;GACH,WAAW,qBAAI,QAAO,aAAa;GACnC,QAAQ;EACR;EACD;CACA;AACD"}
@@ -1,4 +1,4 @@
1
- const require_fullstack_secrets = require('./fullstack-secrets-Bchl2MDd.cjs');
1
+ const require_fullstack_secrets = require('./fullstack-secrets-BYzi6Hwl.cjs');
2
2
 
3
3
  //#region src/secrets/reconcile.ts
4
4
  /**
@@ -33,4 +33,4 @@ function reconcileMissingSecrets(secrets, workspace) {
33
33
 
34
34
  //#endregion
35
35
  exports.reconcileMissingSecrets = reconcileMissingSecrets;
36
- //# sourceMappingURL=reconcile-CZtzdrnc.cjs.map
36
+ //# sourceMappingURL=reconcile-D93YG7G5.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"reconcile-CZtzdrnc.cjs","names":["secrets: StageSecrets","workspace: NormalizedWorkspace","addedKeys: string[]"],"sources":["../src/secrets/reconcile.ts"],"sourcesContent":["import { generateFullstackCustomSecrets } from '../setup/fullstack-secrets.js';\nimport type { NormalizedWorkspace } from '../workspace/types.js';\nimport type { StageSecrets } from './types.js';\n\nexport interface ReconcileResult {\n\t/** The updated secrets with missing keys backfilled */\n\tsecrets: StageSecrets;\n\t/** Keys that were added */\n\taddedKeys: string[];\n}\n\n/**\n * Reconcile missing custom secrets for a workspace.\n *\n * Compares current secrets against what generateFullstackCustomSecrets()\n * would produce and backfills any missing keys without overwriting\n * existing values.\n *\n * @returns ReconcileResult if keys were added, null if secrets are up-to-date\n */\nexport function reconcileMissingSecrets(\n\tsecrets: StageSecrets,\n\tworkspace: NormalizedWorkspace,\n): ReconcileResult | null {\n\tconst isMultiApp = Object.keys(workspace.apps).length > 1;\n\tif (!isMultiApp) {\n\t\treturn null;\n\t}\n\n\tconst expectedCustom = generateFullstackCustomSecrets(workspace);\n\tconst addedKeys: string[] = [];\n\tconst mergedCustom = { ...secrets.custom };\n\n\tfor (const [key, value] of Object.entries(expectedCustom)) {\n\t\tif (!(key in mergedCustom)) {\n\t\t\tmergedCustom[key] = value;\n\t\t\taddedKeys.push(key);\n\t\t}\n\t}\n\n\tif (addedKeys.length === 0) {\n\t\treturn null;\n\t}\n\n\treturn {\n\t\tsecrets: {\n\t\t\t...secrets,\n\t\t\tupdatedAt: new Date().toISOString(),\n\t\t\tcustom: mergedCustom,\n\t\t},\n\t\taddedKeys,\n\t};\n}\n"],"mappings":";;;;;;;;;;;;AAoBA,SAAgB,wBACfA,SACAC,WACyB;CACzB,MAAM,aAAa,OAAO,KAAK,UAAU,KAAK,CAAC,SAAS;AACxD,MAAK,WACJ,QAAO;CAGR,MAAM,iBAAiB,yDAA+B,UAAU;CAChE,MAAMC,YAAsB,CAAE;CAC9B,MAAM,eAAe,EAAE,GAAG,QAAQ,OAAQ;AAE1C,MAAK,MAAM,CAAC,KAAK,MAAM,IAAI,OAAO,QAAQ,eAAe,CACxD,OAAM,OAAO,eAAe;AAC3B,eAAa,OAAO;AACpB,YAAU,KAAK,IAAI;CACnB;AAGF,KAAI,UAAU,WAAW,EACxB,QAAO;AAGR,QAAO;EACN,SAAS;GACR,GAAG;GACH,WAAW,qBAAI,QAAO,aAAa;GACnC,QAAQ;EACR;EACD;CACA;AACD"}
1
+ {"version":3,"file":"reconcile-D93YG7G5.cjs","names":["secrets: StageSecrets","workspace: NormalizedWorkspace","addedKeys: string[]"],"sources":["../src/secrets/reconcile.ts"],"sourcesContent":["import { generateFullstackCustomSecrets } from '../setup/fullstack-secrets.js';\nimport type { NormalizedWorkspace } from '../workspace/types.js';\nimport type { StageSecrets } from './types.js';\n\nexport interface ReconcileResult {\n\t/** The updated secrets with missing keys backfilled */\n\tsecrets: StageSecrets;\n\t/** Keys that were added */\n\taddedKeys: string[];\n}\n\n/**\n * Reconcile missing custom secrets for a workspace.\n *\n * Compares current secrets against what generateFullstackCustomSecrets()\n * would produce and backfills any missing keys without overwriting\n * existing values.\n *\n * @returns ReconcileResult if keys were added, null if secrets are up-to-date\n */\nexport function reconcileMissingSecrets(\n\tsecrets: StageSecrets,\n\tworkspace: NormalizedWorkspace,\n): ReconcileResult | null {\n\tconst isMultiApp = Object.keys(workspace.apps).length > 1;\n\tif (!isMultiApp) {\n\t\treturn null;\n\t}\n\n\tconst expectedCustom = generateFullstackCustomSecrets(workspace);\n\tconst addedKeys: string[] = [];\n\tconst mergedCustom = { ...secrets.custom };\n\n\tfor (const [key, value] of Object.entries(expectedCustom)) {\n\t\tif (!(key in mergedCustom)) {\n\t\t\tmergedCustom[key] = value;\n\t\t\taddedKeys.push(key);\n\t\t}\n\t}\n\n\tif (addedKeys.length === 0) {\n\t\treturn null;\n\t}\n\n\treturn {\n\t\tsecrets: {\n\t\t\t...secrets,\n\t\t\tupdatedAt: new Date().toISOString(),\n\t\t\tcustom: mergedCustom,\n\t\t},\n\t\taddedKeys,\n\t};\n}\n"],"mappings":";;;;;;;;;;;;AAoBA,SAAgB,wBACfA,SACAC,WACyB;CACzB,MAAM,aAAa,OAAO,KAAK,UAAU,KAAK,CAAC,SAAS;AACxD,MAAK,WACJ,QAAO;CAGR,MAAM,iBAAiB,yDAA+B,UAAU;CAChE,MAAMC,YAAsB,CAAE;CAC9B,MAAM,eAAe,EAAE,GAAG,QAAQ,OAAQ;AAE1C,MAAK,MAAM,CAAC,KAAK,MAAM,IAAI,OAAO,QAAQ,eAAe,CACxD,OAAM,OAAO,eAAe;AAC3B,eAAa,OAAO;AACpB,YAAU,KAAK,IAAI;CACnB;AAGF,KAAI,UAAU,WAAW,EACxB,QAAO;AAGR,QAAO;EACN,SAAS;GACR,GAAG;GACH,WAAW,qBAAI,QAAO,aAAa;GACnC,QAAQ;EACR;EACD;CACA;AACD"}
@@ -1,4 +1,4 @@
1
- const require_workspace = require('../workspace-BobDOIG9.cjs');
1
+ const require_workspace = require('../workspace-CQTT7HJQ.cjs');
2
2
 
3
3
  exports.PHASE_2_DEPLOY_TARGETS = require_workspace.PHASE_2_DEPLOY_TARGETS;
4
4
  exports.PUBLIC_ENV_PREFIXES = require_workspace.PUBLIC_ENV_PREFIXES;
@@ -1,3 +1,3 @@
1
1
  import "../types-DdHfUbxk.cjs";
2
- import { AppConfig, AppConfigInput, AppInput, AppsRecord, BackendFramework, ConstrainedApps, DeployConfig, DeployTarget, DokployWorkspaceConfig, FrontendFramework, InferAppNames, InferredWorkspaceConfig, LoadedConfig, MailServiceConfig, ModelsConfig, NormalizedAppConfig, NormalizedWorkspace, PHASE_2_DEPLOY_TARGETS, PUBLIC_ENV_PREFIXES, SUPPORTED_DEPLOY_TARGETS, SecretsConfig, ServiceImageConfig, ServicesConfig, SharedConfig, WorkspaceConfig, WorkspaceConfigSchema, WorkspaceInput, defineWorkspace, formatValidationErrors, getAppBuildOrder, getAppGkmConfig, getDependencyEnvVars, getDeployTargetError, getEndpointForStage, getPublicEnvPrefix, isDeployTargetSupported, isPhase2DeployTarget, isWorkspaceConfig, normalizeWorkspace, processConfig, safeValidateWorkspaceConfig, stripPublicPrefix, validateWorkspaceConfig, wrapSingleAppAsWorkspace } from "../index-DRQq26DF.cjs";
2
+ import { AppConfig, AppConfigInput, AppInput, AppsRecord, BackendFramework, ConstrainedApps, DeployConfig, DeployTarget, DokployWorkspaceConfig, FrontendFramework, InferAppNames, InferredWorkspaceConfig, LoadedConfig, MailServiceConfig, ModelsConfig, NormalizedAppConfig, NormalizedWorkspace, PHASE_2_DEPLOY_TARGETS, PUBLIC_ENV_PREFIXES, SUPPORTED_DEPLOY_TARGETS, SecretsConfig, ServiceImageConfig, ServicesConfig, SharedConfig, WorkspaceConfig, WorkspaceConfigSchema, WorkspaceInput, defineWorkspace, formatValidationErrors, getAppBuildOrder, getAppGkmConfig, getDependencyEnvVars, getDeployTargetError, getEndpointForStage, getPublicEnvPrefix, isDeployTargetSupported, isPhase2DeployTarget, isWorkspaceConfig, normalizeWorkspace, processConfig, safeValidateWorkspaceConfig, stripPublicPrefix, validateWorkspaceConfig, wrapSingleAppAsWorkspace } from "../index-Dz2a7xQU.cjs";
3
3
  export { AppConfig, AppConfigInput, AppInput, AppsRecord, BackendFramework, ConstrainedApps, DeployConfig, DeployTarget, DokployWorkspaceConfig, FrontendFramework, InferAppNames, InferredWorkspaceConfig, LoadedConfig, MailServiceConfig, ModelsConfig, NormalizedAppConfig, NormalizedWorkspace, PHASE_2_DEPLOY_TARGETS, PUBLIC_ENV_PREFIXES, SUPPORTED_DEPLOY_TARGETS, SecretsConfig, ServiceImageConfig, ServicesConfig, SharedConfig, WorkspaceConfig, WorkspaceConfigSchema, WorkspaceInput, defineWorkspace, formatValidationErrors, getAppBuildOrder, getAppGkmConfig, getDependencyEnvVars, getDeployTargetError, getEndpointForStage, getPublicEnvPrefix, isDeployTargetSupported, isPhase2DeployTarget, isWorkspaceConfig, normalizeWorkspace, processConfig, safeValidateWorkspaceConfig, stripPublicPrefix, validateWorkspaceConfig, wrapSingleAppAsWorkspace };
@@ -1,3 +1,3 @@
1
1
  import "../types-OszPdw9m.mjs";
2
- import { AppConfig, AppConfigInput, AppInput, AppsRecord, BackendFramework, ConstrainedApps, DeployConfig, DeployTarget, DokployWorkspaceConfig, FrontendFramework, InferAppNames, InferredWorkspaceConfig, LoadedConfig, MailServiceConfig, ModelsConfig, NormalizedAppConfig, NormalizedWorkspace, PHASE_2_DEPLOY_TARGETS, PUBLIC_ENV_PREFIXES, SUPPORTED_DEPLOY_TARGETS, SecretsConfig, ServiceImageConfig, ServicesConfig, SharedConfig, WorkspaceConfig, WorkspaceConfigSchema, WorkspaceInput, defineWorkspace, formatValidationErrors, getAppBuildOrder, getAppGkmConfig, getDependencyEnvVars, getDeployTargetError, getEndpointForStage, getPublicEnvPrefix, isDeployTargetSupported, isPhase2DeployTarget, isWorkspaceConfig, normalizeWorkspace, processConfig, safeValidateWorkspaceConfig, stripPublicPrefix, validateWorkspaceConfig, wrapSingleAppAsWorkspace } from "../index-D7iT4dnv.mjs";
2
+ import { AppConfig, AppConfigInput, AppInput, AppsRecord, BackendFramework, ConstrainedApps, DeployConfig, DeployTarget, DokployWorkspaceConfig, FrontendFramework, InferAppNames, InferredWorkspaceConfig, LoadedConfig, MailServiceConfig, ModelsConfig, NormalizedAppConfig, NormalizedWorkspace, PHASE_2_DEPLOY_TARGETS, PUBLIC_ENV_PREFIXES, SUPPORTED_DEPLOY_TARGETS, SecretsConfig, ServiceImageConfig, ServicesConfig, SharedConfig, WorkspaceConfig, WorkspaceConfigSchema, WorkspaceInput, defineWorkspace, formatValidationErrors, getAppBuildOrder, getAppGkmConfig, getDependencyEnvVars, getDeployTargetError, getEndpointForStage, getPublicEnvPrefix, isDeployTargetSupported, isPhase2DeployTarget, isWorkspaceConfig, normalizeWorkspace, processConfig, safeValidateWorkspaceConfig, stripPublicPrefix, validateWorkspaceConfig, wrapSingleAppAsWorkspace } from "../index-BBvGMG_A.mjs";
3
3
  export { AppConfig, AppConfigInput, AppInput, AppsRecord, BackendFramework, ConstrainedApps, DeployConfig, DeployTarget, DokployWorkspaceConfig, FrontendFramework, InferAppNames, InferredWorkspaceConfig, LoadedConfig, MailServiceConfig, ModelsConfig, NormalizedAppConfig, NormalizedWorkspace, PHASE_2_DEPLOY_TARGETS, PUBLIC_ENV_PREFIXES, SUPPORTED_DEPLOY_TARGETS, SecretsConfig, ServiceImageConfig, ServicesConfig, SharedConfig, WorkspaceConfig, WorkspaceConfigSchema, WorkspaceInput, defineWorkspace, formatValidationErrors, getAppBuildOrder, getAppGkmConfig, getDependencyEnvVars, getDeployTargetError, getEndpointForStage, getPublicEnvPrefix, isDeployTargetSupported, isPhase2DeployTarget, isWorkspaceConfig, normalizeWorkspace, processConfig, safeValidateWorkspaceConfig, stripPublicPrefix, validateWorkspaceConfig, wrapSingleAppAsWorkspace };
@@ -1,3 +1,3 @@
1
- import { PHASE_2_DEPLOY_TARGETS, PUBLIC_ENV_PREFIXES, SUPPORTED_DEPLOY_TARGETS, WorkspaceConfigSchema, defineWorkspace, formatValidationErrors, getAppBuildOrder, getAppGkmConfig, getDependencyEnvVars, getDeployTargetError, getEndpointForStage, getPublicEnvPrefix, isDeployTargetSupported, isPhase2DeployTarget, isWorkspaceConfig, normalizeWorkspace, processConfig, safeValidateWorkspaceConfig, stripPublicPrefix, validateWorkspaceConfig, wrapSingleAppAsWorkspace } from "../workspace-Cgmvgwh8.mjs";
1
+ import { PHASE_2_DEPLOY_TARGETS, PUBLIC_ENV_PREFIXES, SUPPORTED_DEPLOY_TARGETS, WorkspaceConfigSchema, defineWorkspace, formatValidationErrors, getAppBuildOrder, getAppGkmConfig, getDependencyEnvVars, getDeployTargetError, getEndpointForStage, getPublicEnvPrefix, isDeployTargetSupported, isPhase2DeployTarget, isWorkspaceConfig, normalizeWorkspace, processConfig, safeValidateWorkspaceConfig, stripPublicPrefix, validateWorkspaceConfig, wrapSingleAppAsWorkspace } from "../workspace-D-37Ylqo.mjs";
2
2
 
3
3
  export { PHASE_2_DEPLOY_TARGETS, PUBLIC_ENV_PREFIXES, SUPPORTED_DEPLOY_TARGETS, WorkspaceConfigSchema, defineWorkspace, formatValidationErrors, getAppBuildOrder, getAppGkmConfig, getDependencyEnvVars, getDeployTargetError, getEndpointForStage, getPublicEnvPrefix, isDeployTargetSupported, isPhase2DeployTarget, isWorkspaceConfig, normalizeWorkspace, processConfig, safeValidateWorkspaceConfig, stripPublicPrefix, validateWorkspaceConfig, wrapSingleAppAsWorkspace };
@@ -3448,11 +3448,6 @@ const OpenApiConfigSchema = object({
3448
3448
  */
3449
3449
  const HooksConfigSchema = object({ server: string().optional() });
3450
3450
  /**
3451
- * Auth provider schema.
3452
- * Currently only 'better-auth' is supported.
3453
- */
3454
- const AuthProviderSchema = _enum(["better-auth"]);
3455
- /**
3456
3451
  * Backend framework schema for non-gkm apps.
3457
3452
  */
3458
3453
  const BackendFrameworkSchema = _enum([
@@ -3467,12 +3462,30 @@ const BackendFrameworkSchema = _enum([
3467
3462
  const FrontendFrameworkSchema = _enum([
3468
3463
  "nextjs",
3469
3464
  "remix",
3470
- "vite"
3465
+ "vite",
3466
+ "tanstack-start"
3471
3467
  ]);
3472
3468
  /**
3473
- * Combined framework schema (backend or frontend).
3469
+ * Mobile framework schema.
3474
3470
  */
3475
- const FrameworkSchema = union([BackendFrameworkSchema, FrontendFrameworkSchema]);
3471
+ const MobileFrameworkSchema = _enum(["expo"]);
3472
+ /**
3473
+ * Combined framework schema (backend, frontend, or mobile).
3474
+ */
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"];
3476
3489
  /**
3477
3490
  * Deploy target schema.
3478
3491
  * Currently only 'dokploy' is supported.
@@ -3782,8 +3795,8 @@ const StateConfigSchema = union([BuiltInStateConfigSchema, CustomStateConfigSche
3782
3795
  const AppConfigSchema = object({
3783
3796
  type: _enum([
3784
3797
  "backend",
3785
- "frontend",
3786
- "auth"
3798
+ "web",
3799
+ "mobile"
3787
3800
  ]).optional().default("backend"),
3788
3801
  path: string().min(1, "App path is required"),
3789
3802
  port: number().int().positive("Port must be a positive integer"),
@@ -3814,27 +3827,23 @@ const AppConfigSchema = object({
3814
3827
  config: object({
3815
3828
  client: string().optional(),
3816
3829
  server: string().optional()
3817
- }).optional(),
3818
- provider: AuthProviderSchema.optional()
3830
+ }).optional()
3819
3831
  }).refine((data) => {
3820
- if (data.type === "frontend") {
3821
- const frontendFrameworks = [
3822
- "nextjs",
3823
- "remix",
3824
- "vite"
3825
- ];
3826
- 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;
3827
3834
  }
3828
3835
  return true;
3829
3836
  }, {
3830
- 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(", ")})`,
3831
3838
  path: ["framework"]
3832
3839
  }).refine((data) => {
3833
- 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
+ }
3834
3843
  return true;
3835
3844
  }, {
3836
- message: "Auth apps must have provider defined",
3837
- path: ["provider"]
3845
+ message: `Mobile apps must have a valid mobile framework (${MOBILE_FRAMEWORKS.join(", ")})`,
3846
+ path: ["framework"]
3838
3847
  });
3839
3848
  /**
3840
3849
  * Workspace configuration schema.
@@ -3990,7 +3999,7 @@ function validateDependencies(apps) {
3990
3999
  * logger: './src/logger',
3991
4000
  * },
3992
4001
  * web: {
3993
- * type: 'frontend',
4002
+ * type: 'web',
3994
4003
  * framework: 'nextjs',
3995
4004
  * path: 'apps/web',
3996
4005
  * port: 3001,
@@ -4349,4 +4358,4 @@ Object.defineProperty(exports, 'wrapSingleAppAsWorkspace', {
4349
4358
  return wrapSingleAppAsWorkspace;
4350
4359
  }
4351
4360
  });
4352
- //# sourceMappingURL=workspace-BobDOIG9.cjs.map
4361
+ //# sourceMappingURL=workspace-CQTT7HJQ.cjs.map