@geekmidas/cli 1.9.1 → 1.10.1

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 (60) hide show
  1. package/CHANGELOG.md +24 -0
  2. package/README.md +42 -6
  3. package/dist/{config-6JHOwLCx.cjs → config-D3ORuiUs.cjs} +2 -2
  4. package/dist/{config-6JHOwLCx.cjs.map → config-D3ORuiUs.cjs.map} +1 -1
  5. package/dist/{config-DxASSNjr.mjs → config-jsRYHOHU.mjs} +2 -2
  6. package/dist/{config-DxASSNjr.mjs.map → config-jsRYHOHU.mjs.map} +1 -1
  7. package/dist/config.cjs +2 -2
  8. package/dist/config.d.cts +2 -2
  9. package/dist/config.d.mts +2 -2
  10. package/dist/config.mjs +2 -2
  11. package/dist/{index-Bt2kX0-R.d.mts → index-3n-giNaw.d.mts} +18 -6
  12. package/dist/index-3n-giNaw.d.mts.map +1 -0
  13. package/dist/{index-Cyk2rTyj.d.cts → index-CiEOtKEX.d.cts} +18 -6
  14. package/dist/index-CiEOtKEX.d.cts.map +1 -0
  15. package/dist/index.cjs +189 -165
  16. package/dist/index.cjs.map +1 -1
  17. package/dist/index.mjs +186 -162
  18. package/dist/index.mjs.map +1 -1
  19. package/dist/{openapi-CnvwSRDU.cjs → openapi-BYxAWwok.cjs} +178 -32
  20. package/dist/openapi-BYxAWwok.cjs.map +1 -0
  21. package/dist/{openapi-BYlyAbH3.mjs → openapi-DenF-okj.mjs} +148 -32
  22. package/dist/openapi-DenF-okj.mjs.map +1 -0
  23. package/dist/openapi.cjs +3 -3
  24. package/dist/openapi.d.cts +1 -1
  25. package/dist/openapi.d.cts.map +1 -1
  26. package/dist/openapi.d.mts +1 -1
  27. package/dist/openapi.d.mts.map +1 -1
  28. package/dist/openapi.mjs +3 -3
  29. package/dist/{types-l53qUmGt.d.cts → types-C7QJJl9f.d.cts} +6 -2
  30. package/dist/types-C7QJJl9f.d.cts.map +1 -0
  31. package/dist/{types-wXMIMOyK.d.mts → types-Iqsq_FIG.d.mts} +6 -2
  32. package/dist/types-Iqsq_FIG.d.mts.map +1 -0
  33. package/dist/workspace/index.cjs +1 -1
  34. package/dist/workspace/index.d.cts +2 -2
  35. package/dist/workspace/index.d.mts +2 -2
  36. package/dist/workspace/index.mjs +1 -1
  37. package/dist/{workspace-D2ocAlpl.cjs → workspace-4SP3Gx4Y.cjs} +11 -3
  38. package/dist/{workspace-D2ocAlpl.cjs.map → workspace-4SP3Gx4Y.cjs.map} +1 -1
  39. package/dist/{workspace-9IQIjwkQ.mjs → workspace-D4z4A4cq.mjs} +11 -3
  40. package/dist/{workspace-9IQIjwkQ.mjs.map → workspace-D4z4A4cq.mjs.map} +1 -1
  41. package/package.json +4 -4
  42. package/src/build/__tests__/manifests.spec.ts +171 -0
  43. package/src/build/__tests__/partitions.spec.ts +110 -0
  44. package/src/build/index.ts +58 -15
  45. package/src/build/manifests.ts +153 -32
  46. package/src/build/partitions.ts +58 -0
  47. package/src/deploy/sniffer.ts +6 -1
  48. package/src/generators/Generator.ts +27 -7
  49. package/src/generators/OpenApiTsGenerator.ts +4 -4
  50. package/src/init/versions.ts +7 -7
  51. package/src/openapi.ts +2 -1
  52. package/src/types.ts +17 -1
  53. package/src/workspace/client-generator.ts +6 -3
  54. package/src/workspace/schema.ts +13 -3
  55. package/dist/index-Bt2kX0-R.d.mts.map +0 -1
  56. package/dist/index-Cyk2rTyj.d.cts.map +0 -1
  57. package/dist/openapi-BYlyAbH3.mjs.map +0 -1
  58. package/dist/openapi-CnvwSRDU.cjs.map +0 -1
  59. package/dist/types-l53qUmGt.d.cts.map +0 -1
  60. package/dist/types-wXMIMOyK.d.mts.map +0 -1
package/CHANGELOG.md CHANGED
@@ -1,5 +1,29 @@
1
1
  # @geekmidas/cli
2
2
 
3
+ ## 1.10.1
4
+
5
+ ### Patch Changes
6
+
7
+ - ✨ [`bfc5a4f`](https://github.com/geekmidas/toolbox/commit/bfc5a4f656445bb389b0532e9d3385d2e66a28fe) Thanks [@geekmidas](https://github.com/geekmidas)! - Add function context and suport for partitions
8
+
9
+ - Updated dependencies [[`bfc5a4f`](https://github.com/geekmidas/toolbox/commit/bfc5a4f656445bb389b0532e9d3385d2e66a28fe)]:
10
+ - @geekmidas/constructs@3.0.1
11
+
12
+ ## 1.10.0
13
+
14
+ ### Minor Changes
15
+
16
+ - ✨ [`be4f7a9`](https://github.com/geekmidas/toolbox/commit/be4f7a9bd5de7f08adbca582916d6902e0c24de2) Thanks [@geekmidas](https://github.com/geekmidas)! - Add partition support for manifest generation. Users can now group constructs (routes, functions, crons, subscribers) into named partitions by providing a `partition` callback per construct type in the config. Manifests output partitioned fields as `Record<string, T[]>` while remaining flat `T[]` arrays when no partitions are configured.
17
+
18
+ Fix mutation type inference in endpoint hooks by using `UseMutationResult` and `UseQueryResult` types directly instead of `ReturnType<typeof useMutation>`, which could resolve to `never` for complex path definitions.
19
+
20
+ Add `FileCache` implementation that persists cache entries to a JSON file on disk. Default location is `process.cwd()/.gkm/cache.json`. Uses an in-process mutex combined with `proper-lockfile` for safe concurrent and cross-process writes.
21
+
22
+ ### Patch Changes
23
+
24
+ - Updated dependencies []:
25
+ - @geekmidas/constructs@3.0.0
26
+
3
27
  ## 1.9.1
4
28
 
5
29
  ### Patch Changes
package/README.md CHANGED
@@ -1002,14 +1002,22 @@ The following commands are planned for future releases:
1002
1002
  The `gkm.config.ts` file defines how the CLI discovers and processes your endpoints:
1003
1003
 
1004
1004
  ```typescript
1005
+ // Construct types accept a string, string[], or partitioned config
1006
+ type Routes = string | string[] | PartitionedRoutes;
1007
+
1008
+ interface PartitionedRoutes {
1009
+ paths: string | string[];
1010
+ partition: (filepath: string) => string;
1011
+ }
1012
+
1005
1013
  interface GkmConfig {
1006
- routes: string | string[]; // Glob patterns for endpoint files
1014
+ routes: Routes; // Glob patterns or partitioned config
1007
1015
  envParser: string; // Path to environment parser
1008
1016
  logger: string; // Path to logger configuration
1009
- functions?: string | string[]; // Glob patterns for function files
1010
- crons?: string | string[]; // Glob patterns for cron files
1011
- subscribers?: string | string[];// Glob patterns for subscriber files
1012
- runtime?: 'node' | 'bun'; // Runtime environment (default: 'node')
1017
+ functions?: Routes; // Glob patterns or partitioned config
1018
+ crons?: Routes; // Glob patterns or partitioned config
1019
+ subscribers?: Routes; // Glob patterns or partitioned config
1020
+ runtime?: 'node' | 'bun'; // Runtime environment (default: 'node')
1013
1021
  telescope?: boolean | TelescopeConfig; // Telescope debugging config
1014
1022
  }
1015
1023
 
@@ -1027,7 +1035,7 @@ interface TelescopeConfig {
1027
1035
 
1028
1036
  #### `routes`
1029
1037
 
1030
- Glob pattern(s) to discover endpoint files. Can be a single pattern or array of patterns.
1038
+ Glob pattern(s) to discover endpoint files. Can be a single pattern, array of patterns, or a partitioned config:
1031
1039
 
1032
1040
  ```typescript
1033
1041
  // Single pattern
@@ -1039,8 +1047,19 @@ routes: [
1039
1047
  'src/api/**/*.ts',
1040
1048
  'src/handlers/**/*.ts'
1041
1049
  ]
1050
+
1051
+ // Partitioned — groups constructs in the generated manifest
1052
+ routes: {
1053
+ paths: './src/endpoints/**/*.ts',
1054
+ partition: (filepath) => {
1055
+ const match = filepath.match(/endpoints\/([^/]+)\//);
1056
+ return match?.[1] ?? 'default';
1057
+ },
1058
+ }
1042
1059
  ```
1043
1060
 
1061
+ The same partitioned format works for `functions`, `crons`, and `subscribers`. When a `partition` callback is provided, the generated manifest groups constructs by partition name (e.g., `manifest.routes.admin`). Without it, manifest fields remain flat arrays.
1062
+
1044
1063
  #### `envParser`
1045
1064
 
1046
1065
  Path to your environment parser configuration. Supports both default and named exports.
@@ -1498,6 +1517,23 @@ export type HttpMethod = Route['method'];
1498
1517
  export type RoutePath = Route['path'];
1499
1518
  ```
1500
1519
 
1520
+ When routes are partitioned, the manifest groups them by partition name and generates partition-aware types:
1521
+
1522
+ ```typescript
1523
+ export const manifest = {
1524
+ routes: {
1525
+ "admin": [{ path: '/admin/users', method: 'GET', handler: '...', authorizer: 'jwt' }],
1526
+ "default": [{ path: '/users', method: 'GET', handler: '...', authorizer: 'jwt' }],
1527
+ },
1528
+ functions: [...], // flat if not partitioned
1529
+ } as const;
1530
+
1531
+ // Partition-aware derived types
1532
+ export type RoutePartition = keyof typeof manifest.routes;
1533
+ export type Route<P extends RoutePartition = RoutePartition> =
1534
+ (typeof manifest.routes)[P][number];
1535
+ ```
1536
+
1501
1537
  #### Server Manifest (`.gkm/manifest/server.ts`)
1502
1538
 
1503
1539
  ```typescript
@@ -1,5 +1,5 @@
1
1
  const require_chunk = require('./chunk-CUT6urMc.cjs');
2
- const require_workspace = require('./workspace-D2ocAlpl.cjs');
2
+ const require_workspace = require('./workspace-4SP3Gx4Y.cjs');
3
3
  const node_fs = require_chunk.__toESM(require("node:fs"));
4
4
  const node_path = require_chunk.__toESM(require("node:path"));
5
5
 
@@ -250,4 +250,4 @@ Object.defineProperty(exports, 'parseModuleConfig', {
250
250
  return parseModuleConfig;
251
251
  }
252
252
  });
253
- //# sourceMappingURL=config-6JHOwLCx.cjs.map
253
+ //# sourceMappingURL=config-D3ORuiUs.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"config-6JHOwLCx.cjs","names":["config: GkmConfig","configString: string","defaultAlias: string","cwd: string"],"sources":["../src/config.ts"],"sourcesContent":["import { existsSync, readFileSync } from 'node:fs';\nimport { dirname, join, parse } from 'node:path';\nimport type { GkmConfig } from './types.js';\nimport {\n\tgetAppGkmConfig,\n\tisWorkspaceConfig,\n\ttype LoadedConfig,\n\ttype NormalizedAppConfig,\n\ttype NormalizedWorkspace,\n\tprocessConfig,\n\ttype WorkspaceConfig,\n} from './workspace/index.js';\n\nexport type { GkmConfig } from './types.js';\nexport type { LoadedConfig, WorkspaceConfig } from './workspace/index.js';\nexport { defineWorkspace } from './workspace/index.js';\n/**\n * Define GKM configuration with full TypeScript support.\n * This is an identity function that provides type safety and autocomplete.\n *\n * @example\n * ```ts\n * // gkm.config.ts\n * import { defineConfig } from '@geekmidas/cli/config';\n *\n * export default defineConfig({\n * routes: './src/endpoints/**\\/*.ts',\n * envParser: './src/config/env',\n * logger: './src/config/logger',\n * telescope: true,\n * });\n * ```\n */\nexport function defineConfig(config: GkmConfig): GkmConfig {\n\treturn config;\n}\n\nexport interface ParsedModuleConfig {\n\tpath: string;\n\timportPattern: string;\n}\n\n/**\n * Parse a module config string into path and import pattern.\n *\n * @param configString - Config string in format \"./path/to/module\" or \"./path/to/module#exportName\"\n * @param defaultAlias - The default alias name to use if no export name specified\n * @returns Object with path and import pattern\n *\n * @example\n * parseModuleConfig('./src/config/env', 'envParser')\n * // { path: './src/config/env', importPattern: 'envParser' }\n *\n * parseModuleConfig('./src/config/env#envParser', 'envParser')\n * // { path: './src/config/env', importPattern: '{ envParser }' }\n *\n * parseModuleConfig('./src/config/env#myEnv', 'envParser')\n * // { path: './src/config/env', importPattern: '{ myEnv as envParser }' }\n */\nexport function parseModuleConfig(\n\tconfigString: string,\n\tdefaultAlias: string,\n): ParsedModuleConfig {\n\tconst parts = configString.split('#');\n\tconst path = parts[0] ?? configString;\n\tconst exportName = parts[1];\n\tconst importPattern = !exportName\n\t\t? defaultAlias\n\t\t: exportName === defaultAlias\n\t\t\t? `{ ${defaultAlias} }`\n\t\t\t: `{ ${exportName} as ${defaultAlias} }`;\n\n\treturn { path, importPattern };\n}\n\nexport interface ConfigDiscoveryResult {\n\tconfigPath: string;\n\tworkspaceRoot: string;\n}\n\n/**\n * Find and return the path to the config file.\n *\n * Resolution order:\n * 1. GKM_CONFIG_PATH env var (set by workspace dev command)\n * 2. Walk up directory tree from cwd\n */\nfunction findConfigPath(cwd: string): ConfigDiscoveryResult {\n\tconst files = ['gkm.config.json', 'gkm.config.ts', 'gkm.config.js'];\n\n\t// Check GKM_CONFIG_PATH env var first (set by workspace dev command)\n\tconst envConfigPath = process.env.GKM_CONFIG_PATH;\n\tif (envConfigPath && existsSync(envConfigPath)) {\n\t\treturn {\n\t\t\tconfigPath: envConfigPath,\n\t\t\tworkspaceRoot: dirname(envConfigPath),\n\t\t};\n\t}\n\n\t// Walk up directory tree to find config\n\tlet currentDir = cwd;\n\tconst { root } = parse(currentDir);\n\n\twhile (currentDir !== root) {\n\t\tfor (const file of files) {\n\t\t\tconst configPath = join(currentDir, file);\n\t\t\tif (existsSync(configPath)) {\n\t\t\t\treturn {\n\t\t\t\t\tconfigPath,\n\t\t\t\t\tworkspaceRoot: currentDir,\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\t\tcurrentDir = dirname(currentDir);\n\t}\n\n\tthrow new Error(\n\t\t'Configuration file not found. Please create gkm.config.json, gkm.config.ts, or gkm.config.js in the project root.',\n\t);\n}\n\n/**\n * Get app name from package.json in the given directory.\n * Handles scoped packages by extracting the name after the scope.\n *\n * @example\n * getAppNameFromCwd('/path/to/apps/api')\n * // package.json: { \"name\": \"@myorg/api\" }\n * // Returns: 'api'\n */\nexport function getAppNameFromCwd(cwd: string = process.cwd()): string | null {\n\tconst packageJsonPath = join(cwd, 'package.json');\n\n\tif (!existsSync(packageJsonPath)) {\n\t\treturn null;\n\t}\n\n\ttry {\n\t\tconst packageJson = JSON.parse(readFileSync(packageJsonPath, 'utf-8'));\n\t\tconst name = packageJson.name as string | undefined;\n\n\t\tif (!name) {\n\t\t\treturn null;\n\t\t}\n\n\t\t// Handle scoped packages: @scope/name -> name\n\t\tif (name.startsWith('@') && name.includes('/')) {\n\t\t\treturn name.split('/')[1] ?? null;\n\t\t}\n\n\t\treturn name;\n\t} catch {\n\t\treturn null;\n\t}\n}\n\ninterface RawConfigResult {\n\tconfig: GkmConfig | WorkspaceConfig;\n\tworkspaceRoot: string;\n}\n\n/**\n * Load raw configuration from file.\n */\nasync function loadRawConfig(cwd: string): Promise<RawConfigResult> {\n\tconst { configPath, workspaceRoot } = findConfigPath(cwd);\n\n\ttry {\n\t\tconst config = await import(configPath);\n\t\treturn {\n\t\t\tconfig: config.default,\n\t\t\tworkspaceRoot,\n\t\t};\n\t} catch (error) {\n\t\tthrow new Error(`Failed to load config: ${(error as Error).message}`);\n\t}\n}\n\n/**\n * Load configuration file (single-app format).\n * For backwards compatibility with existing code.\n *\n * @deprecated Use loadWorkspaceConfig for new code\n */\nexport async function loadConfig(\n\tcwd: string = process.cwd(),\n): Promise<GkmConfig> {\n\tconst { config } = await loadRawConfig(cwd);\n\n\t// If it's a workspace config, throw an error\n\tif (isWorkspaceConfig(config)) {\n\t\tthrow new Error(\n\t\t\t'Workspace configuration detected. Use loadWorkspaceConfig() instead.',\n\t\t);\n\t}\n\n\treturn config;\n}\n\n/**\n * Load configuration file and process it as a workspace.\n * Works with both single-app and workspace configurations.\n *\n * Single-app configs are automatically wrapped as a workspace with one app.\n *\n * @example\n * ```ts\n * const { type, workspace } = await loadWorkspaceConfig();\n *\n * if (type === 'workspace') {\n * console.log('Multi-app workspace:', workspace.apps);\n * } else {\n * console.log('Single app wrapped as workspace');\n * }\n * ```\n */\nexport async function loadWorkspaceConfig(\n\tcwd: string = process.cwd(),\n): Promise<LoadedConfig> {\n\tconst { config, workspaceRoot } = await loadRawConfig(cwd);\n\treturn processConfig(config, workspaceRoot);\n}\n\nexport interface AppConfigResult {\n\tappName: string;\n\tapp: NormalizedAppConfig;\n\tgkmConfig: GkmConfig;\n\tworkspace: NormalizedWorkspace;\n\tworkspaceRoot: string;\n\tappRoot: string;\n}\n\n/**\n * Load app-specific configuration from workspace.\n * Uses the app name from package.json to find the correct app config.\n *\n * @example\n * ```ts\n * // From apps/api directory with package.json: { \"name\": \"@myorg/api\" }\n * const { app, workspace, workspaceRoot } = await loadAppConfig();\n * console.log(app.routes); // './src/endpoints/**\\/*.ts'\n * ```\n */\nexport async function loadAppConfig(\n\tcwd: string = process.cwd(),\n): Promise<AppConfigResult> {\n\tconst appName = getAppNameFromCwd(cwd);\n\n\tif (!appName) {\n\t\tthrow new Error(\n\t\t\t'Could not determine app name. Ensure package.json exists with a \"name\" field.',\n\t\t);\n\t}\n\n\tconst { config, workspaceRoot } = await loadRawConfig(cwd);\n\tconst loadedConfig = processConfig(config, workspaceRoot);\n\n\t// Find the app in workspace (apps is a Record<string, NormalizedAppConfig>)\n\tconst app = loadedConfig.workspace.apps[appName];\n\n\tif (!app) {\n\t\tconst availableApps = Object.keys(loadedConfig.workspace.apps).join(', ');\n\t\tthrow new Error(\n\t\t\t`App \"${appName}\" not found in workspace config. Available apps: ${availableApps}. ` +\n\t\t\t\t`Ensure the package.json name matches the app key in gkm.config.ts.`,\n\t\t);\n\t}\n\n\t// Get the app's GKM config using the helper\n\tconst gkmConfig = getAppGkmConfig(loadedConfig.workspace, appName);\n\n\tif (!gkmConfig) {\n\t\tthrow new Error(\n\t\t\t`App \"${appName}\" is not a backend app and cannot be run with gkm dev.`,\n\t\t);\n\t}\n\n\treturn {\n\t\tappName,\n\t\tapp,\n\t\tgkmConfig,\n\t\tworkspace: loadedConfig.workspace,\n\t\tworkspaceRoot,\n\t\tappRoot: join(workspaceRoot, app.path),\n\t};\n}\n\nexport interface WorkspaceAppInfo {\n\tappName: string;\n\tapp: NormalizedAppConfig;\n\tworkspace: NormalizedWorkspace;\n\tworkspaceRoot: string;\n}\n\n/**\n * Load workspace info for any app (frontend or backend).\n * Unlike loadAppConfig, this does NOT require the app to have a gkm config\n * (routes, entry, etc.), making it suitable for gkm exec/test from frontend apps.\n */\nexport async function loadWorkspaceAppInfo(\n\tcwd: string = process.cwd(),\n): Promise<WorkspaceAppInfo> {\n\tconst appName = getAppNameFromCwd(cwd);\n\n\tif (!appName) {\n\t\tthrow new Error(\n\t\t\t'Could not determine app name. Ensure package.json exists with a \"name\" field.',\n\t\t);\n\t}\n\n\tconst { config, workspaceRoot } = await loadRawConfig(cwd);\n\tconst loadedConfig = processConfig(config, workspaceRoot);\n\n\tconst app = loadedConfig.workspace.apps[appName];\n\n\tif (!app) {\n\t\tconst availableApps = Object.keys(loadedConfig.workspace.apps).join(', ');\n\t\tthrow new Error(\n\t\t\t`App \"${appName}\" not found in workspace config. Available apps: ${availableApps}. ` +\n\t\t\t\t`Ensure the package.json name matches the app key in gkm.config.ts.`,\n\t\t);\n\t}\n\n\treturn {\n\t\tappName,\n\t\tapp,\n\t\tworkspace: loadedConfig.workspace,\n\t\tworkspaceRoot,\n\t};\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"config-D3ORuiUs.cjs","names":["config: GkmConfig","configString: string","defaultAlias: string","cwd: string"],"sources":["../src/config.ts"],"sourcesContent":["import { existsSync, readFileSync } from 'node:fs';\nimport { dirname, join, parse } from 'node:path';\nimport type { GkmConfig } from './types.js';\nimport {\n\tgetAppGkmConfig,\n\tisWorkspaceConfig,\n\ttype LoadedConfig,\n\ttype NormalizedAppConfig,\n\ttype NormalizedWorkspace,\n\tprocessConfig,\n\ttype WorkspaceConfig,\n} from './workspace/index.js';\n\nexport type { GkmConfig } from './types.js';\nexport type { LoadedConfig, WorkspaceConfig } from './workspace/index.js';\nexport { defineWorkspace } from './workspace/index.js';\n/**\n * Define GKM configuration with full TypeScript support.\n * This is an identity function that provides type safety and autocomplete.\n *\n * @example\n * ```ts\n * // gkm.config.ts\n * import { defineConfig } from '@geekmidas/cli/config';\n *\n * export default defineConfig({\n * routes: './src/endpoints/**\\/*.ts',\n * envParser: './src/config/env',\n * logger: './src/config/logger',\n * telescope: true,\n * });\n * ```\n */\nexport function defineConfig(config: GkmConfig): GkmConfig {\n\treturn config;\n}\n\nexport interface ParsedModuleConfig {\n\tpath: string;\n\timportPattern: string;\n}\n\n/**\n * Parse a module config string into path and import pattern.\n *\n * @param configString - Config string in format \"./path/to/module\" or \"./path/to/module#exportName\"\n * @param defaultAlias - The default alias name to use if no export name specified\n * @returns Object with path and import pattern\n *\n * @example\n * parseModuleConfig('./src/config/env', 'envParser')\n * // { path: './src/config/env', importPattern: 'envParser' }\n *\n * parseModuleConfig('./src/config/env#envParser', 'envParser')\n * // { path: './src/config/env', importPattern: '{ envParser }' }\n *\n * parseModuleConfig('./src/config/env#myEnv', 'envParser')\n * // { path: './src/config/env', importPattern: '{ myEnv as envParser }' }\n */\nexport function parseModuleConfig(\n\tconfigString: string,\n\tdefaultAlias: string,\n): ParsedModuleConfig {\n\tconst parts = configString.split('#');\n\tconst path = parts[0] ?? configString;\n\tconst exportName = parts[1];\n\tconst importPattern = !exportName\n\t\t? defaultAlias\n\t\t: exportName === defaultAlias\n\t\t\t? `{ ${defaultAlias} }`\n\t\t\t: `{ ${exportName} as ${defaultAlias} }`;\n\n\treturn { path, importPattern };\n}\n\nexport interface ConfigDiscoveryResult {\n\tconfigPath: string;\n\tworkspaceRoot: string;\n}\n\n/**\n * Find and return the path to the config file.\n *\n * Resolution order:\n * 1. GKM_CONFIG_PATH env var (set by workspace dev command)\n * 2. Walk up directory tree from cwd\n */\nfunction findConfigPath(cwd: string): ConfigDiscoveryResult {\n\tconst files = ['gkm.config.json', 'gkm.config.ts', 'gkm.config.js'];\n\n\t// Check GKM_CONFIG_PATH env var first (set by workspace dev command)\n\tconst envConfigPath = process.env.GKM_CONFIG_PATH;\n\tif (envConfigPath && existsSync(envConfigPath)) {\n\t\treturn {\n\t\t\tconfigPath: envConfigPath,\n\t\t\tworkspaceRoot: dirname(envConfigPath),\n\t\t};\n\t}\n\n\t// Walk up directory tree to find config\n\tlet currentDir = cwd;\n\tconst { root } = parse(currentDir);\n\n\twhile (currentDir !== root) {\n\t\tfor (const file of files) {\n\t\t\tconst configPath = join(currentDir, file);\n\t\t\tif (existsSync(configPath)) {\n\t\t\t\treturn {\n\t\t\t\t\tconfigPath,\n\t\t\t\t\tworkspaceRoot: currentDir,\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\t\tcurrentDir = dirname(currentDir);\n\t}\n\n\tthrow new Error(\n\t\t'Configuration file not found. Please create gkm.config.json, gkm.config.ts, or gkm.config.js in the project root.',\n\t);\n}\n\n/**\n * Get app name from package.json in the given directory.\n * Handles scoped packages by extracting the name after the scope.\n *\n * @example\n * getAppNameFromCwd('/path/to/apps/api')\n * // package.json: { \"name\": \"@myorg/api\" }\n * // Returns: 'api'\n */\nexport function getAppNameFromCwd(cwd: string = process.cwd()): string | null {\n\tconst packageJsonPath = join(cwd, 'package.json');\n\n\tif (!existsSync(packageJsonPath)) {\n\t\treturn null;\n\t}\n\n\ttry {\n\t\tconst packageJson = JSON.parse(readFileSync(packageJsonPath, 'utf-8'));\n\t\tconst name = packageJson.name as string | undefined;\n\n\t\tif (!name) {\n\t\t\treturn null;\n\t\t}\n\n\t\t// Handle scoped packages: @scope/name -> name\n\t\tif (name.startsWith('@') && name.includes('/')) {\n\t\t\treturn name.split('/')[1] ?? null;\n\t\t}\n\n\t\treturn name;\n\t} catch {\n\t\treturn null;\n\t}\n}\n\ninterface RawConfigResult {\n\tconfig: GkmConfig | WorkspaceConfig;\n\tworkspaceRoot: string;\n}\n\n/**\n * Load raw configuration from file.\n */\nasync function loadRawConfig(cwd: string): Promise<RawConfigResult> {\n\tconst { configPath, workspaceRoot } = findConfigPath(cwd);\n\n\ttry {\n\t\tconst config = await import(configPath);\n\t\treturn {\n\t\t\tconfig: config.default,\n\t\t\tworkspaceRoot,\n\t\t};\n\t} catch (error) {\n\t\tthrow new Error(`Failed to load config: ${(error as Error).message}`);\n\t}\n}\n\n/**\n * Load configuration file (single-app format).\n * For backwards compatibility with existing code.\n *\n * @deprecated Use loadWorkspaceConfig for new code\n */\nexport async function loadConfig(\n\tcwd: string = process.cwd(),\n): Promise<GkmConfig> {\n\tconst { config } = await loadRawConfig(cwd);\n\n\t// If it's a workspace config, throw an error\n\tif (isWorkspaceConfig(config)) {\n\t\tthrow new Error(\n\t\t\t'Workspace configuration detected. Use loadWorkspaceConfig() instead.',\n\t\t);\n\t}\n\n\treturn config;\n}\n\n/**\n * Load configuration file and process it as a workspace.\n * Works with both single-app and workspace configurations.\n *\n * Single-app configs are automatically wrapped as a workspace with one app.\n *\n * @example\n * ```ts\n * const { type, workspace } = await loadWorkspaceConfig();\n *\n * if (type === 'workspace') {\n * console.log('Multi-app workspace:', workspace.apps);\n * } else {\n * console.log('Single app wrapped as workspace');\n * }\n * ```\n */\nexport async function loadWorkspaceConfig(\n\tcwd: string = process.cwd(),\n): Promise<LoadedConfig> {\n\tconst { config, workspaceRoot } = await loadRawConfig(cwd);\n\treturn processConfig(config, workspaceRoot);\n}\n\nexport interface AppConfigResult {\n\tappName: string;\n\tapp: NormalizedAppConfig;\n\tgkmConfig: GkmConfig;\n\tworkspace: NormalizedWorkspace;\n\tworkspaceRoot: string;\n\tappRoot: string;\n}\n\n/**\n * Load app-specific configuration from workspace.\n * Uses the app name from package.json to find the correct app config.\n *\n * @example\n * ```ts\n * // From apps/api directory with package.json: { \"name\": \"@myorg/api\" }\n * const { app, workspace, workspaceRoot } = await loadAppConfig();\n * console.log(app.routes); // './src/endpoints/**\\/*.ts'\n * ```\n */\nexport async function loadAppConfig(\n\tcwd: string = process.cwd(),\n): Promise<AppConfigResult> {\n\tconst appName = getAppNameFromCwd(cwd);\n\n\tif (!appName) {\n\t\tthrow new Error(\n\t\t\t'Could not determine app name. Ensure package.json exists with a \"name\" field.',\n\t\t);\n\t}\n\n\tconst { config, workspaceRoot } = await loadRawConfig(cwd);\n\tconst loadedConfig = processConfig(config, workspaceRoot);\n\n\t// Find the app in workspace (apps is a Record<string, NormalizedAppConfig>)\n\tconst app = loadedConfig.workspace.apps[appName];\n\n\tif (!app) {\n\t\tconst availableApps = Object.keys(loadedConfig.workspace.apps).join(', ');\n\t\tthrow new Error(\n\t\t\t`App \"${appName}\" not found in workspace config. Available apps: ${availableApps}. ` +\n\t\t\t\t`Ensure the package.json name matches the app key in gkm.config.ts.`,\n\t\t);\n\t}\n\n\t// Get the app's GKM config using the helper\n\tconst gkmConfig = getAppGkmConfig(loadedConfig.workspace, appName);\n\n\tif (!gkmConfig) {\n\t\tthrow new Error(\n\t\t\t`App \"${appName}\" is not a backend app and cannot be run with gkm dev.`,\n\t\t);\n\t}\n\n\treturn {\n\t\tappName,\n\t\tapp,\n\t\tgkmConfig,\n\t\tworkspace: loadedConfig.workspace,\n\t\tworkspaceRoot,\n\t\tappRoot: join(workspaceRoot, app.path),\n\t};\n}\n\nexport interface WorkspaceAppInfo {\n\tappName: string;\n\tapp: NormalizedAppConfig;\n\tworkspace: NormalizedWorkspace;\n\tworkspaceRoot: string;\n}\n\n/**\n * Load workspace info for any app (frontend or backend).\n * Unlike loadAppConfig, this does NOT require the app to have a gkm config\n * (routes, entry, etc.), making it suitable for gkm exec/test from frontend apps.\n */\nexport async function loadWorkspaceAppInfo(\n\tcwd: string = process.cwd(),\n): Promise<WorkspaceAppInfo> {\n\tconst appName = getAppNameFromCwd(cwd);\n\n\tif (!appName) {\n\t\tthrow new Error(\n\t\t\t'Could not determine app name. Ensure package.json exists with a \"name\" field.',\n\t\t);\n\t}\n\n\tconst { config, workspaceRoot } = await loadRawConfig(cwd);\n\tconst loadedConfig = processConfig(config, workspaceRoot);\n\n\tconst app = loadedConfig.workspace.apps[appName];\n\n\tif (!app) {\n\t\tconst availableApps = Object.keys(loadedConfig.workspace.apps).join(', ');\n\t\tthrow new Error(\n\t\t\t`App \"${appName}\" not found in workspace config. Available apps: ${availableApps}. ` +\n\t\t\t\t`Ensure the package.json name matches the app key in gkm.config.ts.`,\n\t\t);\n\t}\n\n\treturn {\n\t\tappName,\n\t\tapp,\n\t\tworkspace: loadedConfig.workspace,\n\t\tworkspaceRoot,\n\t};\n}\n"],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import { getAppGkmConfig, isWorkspaceConfig, processConfig } from "./workspace-9IQIjwkQ.mjs";
1
+ import { getAppGkmConfig, isWorkspaceConfig, processConfig } from "./workspace-D4z4A4cq.mjs";
2
2
  import { existsSync, readFileSync } from "node:fs";
3
3
  import { dirname, join, parse } from "node:path";
4
4
 
@@ -208,4 +208,4 @@ async function loadWorkspaceAppInfo(cwd = process.cwd()) {
208
208
 
209
209
  //#endregion
210
210
  export { defineConfig, getAppNameFromCwd, loadAppConfig, loadConfig, loadWorkspaceAppInfo, loadWorkspaceConfig, parseModuleConfig };
211
- //# sourceMappingURL=config-DxASSNjr.mjs.map
211
+ //# sourceMappingURL=config-jsRYHOHU.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"config-DxASSNjr.mjs","names":["config: GkmConfig","configString: string","defaultAlias: string","cwd: string"],"sources":["../src/config.ts"],"sourcesContent":["import { existsSync, readFileSync } from 'node:fs';\nimport { dirname, join, parse } from 'node:path';\nimport type { GkmConfig } from './types.js';\nimport {\n\tgetAppGkmConfig,\n\tisWorkspaceConfig,\n\ttype LoadedConfig,\n\ttype NormalizedAppConfig,\n\ttype NormalizedWorkspace,\n\tprocessConfig,\n\ttype WorkspaceConfig,\n} from './workspace/index.js';\n\nexport type { GkmConfig } from './types.js';\nexport type { LoadedConfig, WorkspaceConfig } from './workspace/index.js';\nexport { defineWorkspace } from './workspace/index.js';\n/**\n * Define GKM configuration with full TypeScript support.\n * This is an identity function that provides type safety and autocomplete.\n *\n * @example\n * ```ts\n * // gkm.config.ts\n * import { defineConfig } from '@geekmidas/cli/config';\n *\n * export default defineConfig({\n * routes: './src/endpoints/**\\/*.ts',\n * envParser: './src/config/env',\n * logger: './src/config/logger',\n * telescope: true,\n * });\n * ```\n */\nexport function defineConfig(config: GkmConfig): GkmConfig {\n\treturn config;\n}\n\nexport interface ParsedModuleConfig {\n\tpath: string;\n\timportPattern: string;\n}\n\n/**\n * Parse a module config string into path and import pattern.\n *\n * @param configString - Config string in format \"./path/to/module\" or \"./path/to/module#exportName\"\n * @param defaultAlias - The default alias name to use if no export name specified\n * @returns Object with path and import pattern\n *\n * @example\n * parseModuleConfig('./src/config/env', 'envParser')\n * // { path: './src/config/env', importPattern: 'envParser' }\n *\n * parseModuleConfig('./src/config/env#envParser', 'envParser')\n * // { path: './src/config/env', importPattern: '{ envParser }' }\n *\n * parseModuleConfig('./src/config/env#myEnv', 'envParser')\n * // { path: './src/config/env', importPattern: '{ myEnv as envParser }' }\n */\nexport function parseModuleConfig(\n\tconfigString: string,\n\tdefaultAlias: string,\n): ParsedModuleConfig {\n\tconst parts = configString.split('#');\n\tconst path = parts[0] ?? configString;\n\tconst exportName = parts[1];\n\tconst importPattern = !exportName\n\t\t? defaultAlias\n\t\t: exportName === defaultAlias\n\t\t\t? `{ ${defaultAlias} }`\n\t\t\t: `{ ${exportName} as ${defaultAlias} }`;\n\n\treturn { path, importPattern };\n}\n\nexport interface ConfigDiscoveryResult {\n\tconfigPath: string;\n\tworkspaceRoot: string;\n}\n\n/**\n * Find and return the path to the config file.\n *\n * Resolution order:\n * 1. GKM_CONFIG_PATH env var (set by workspace dev command)\n * 2. Walk up directory tree from cwd\n */\nfunction findConfigPath(cwd: string): ConfigDiscoveryResult {\n\tconst files = ['gkm.config.json', 'gkm.config.ts', 'gkm.config.js'];\n\n\t// Check GKM_CONFIG_PATH env var first (set by workspace dev command)\n\tconst envConfigPath = process.env.GKM_CONFIG_PATH;\n\tif (envConfigPath && existsSync(envConfigPath)) {\n\t\treturn {\n\t\t\tconfigPath: envConfigPath,\n\t\t\tworkspaceRoot: dirname(envConfigPath),\n\t\t};\n\t}\n\n\t// Walk up directory tree to find config\n\tlet currentDir = cwd;\n\tconst { root } = parse(currentDir);\n\n\twhile (currentDir !== root) {\n\t\tfor (const file of files) {\n\t\t\tconst configPath = join(currentDir, file);\n\t\t\tif (existsSync(configPath)) {\n\t\t\t\treturn {\n\t\t\t\t\tconfigPath,\n\t\t\t\t\tworkspaceRoot: currentDir,\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\t\tcurrentDir = dirname(currentDir);\n\t}\n\n\tthrow new Error(\n\t\t'Configuration file not found. Please create gkm.config.json, gkm.config.ts, or gkm.config.js in the project root.',\n\t);\n}\n\n/**\n * Get app name from package.json in the given directory.\n * Handles scoped packages by extracting the name after the scope.\n *\n * @example\n * getAppNameFromCwd('/path/to/apps/api')\n * // package.json: { \"name\": \"@myorg/api\" }\n * // Returns: 'api'\n */\nexport function getAppNameFromCwd(cwd: string = process.cwd()): string | null {\n\tconst packageJsonPath = join(cwd, 'package.json');\n\n\tif (!existsSync(packageJsonPath)) {\n\t\treturn null;\n\t}\n\n\ttry {\n\t\tconst packageJson = JSON.parse(readFileSync(packageJsonPath, 'utf-8'));\n\t\tconst name = packageJson.name as string | undefined;\n\n\t\tif (!name) {\n\t\t\treturn null;\n\t\t}\n\n\t\t// Handle scoped packages: @scope/name -> name\n\t\tif (name.startsWith('@') && name.includes('/')) {\n\t\t\treturn name.split('/')[1] ?? null;\n\t\t}\n\n\t\treturn name;\n\t} catch {\n\t\treturn null;\n\t}\n}\n\ninterface RawConfigResult {\n\tconfig: GkmConfig | WorkspaceConfig;\n\tworkspaceRoot: string;\n}\n\n/**\n * Load raw configuration from file.\n */\nasync function loadRawConfig(cwd: string): Promise<RawConfigResult> {\n\tconst { configPath, workspaceRoot } = findConfigPath(cwd);\n\n\ttry {\n\t\tconst config = await import(configPath);\n\t\treturn {\n\t\t\tconfig: config.default,\n\t\t\tworkspaceRoot,\n\t\t};\n\t} catch (error) {\n\t\tthrow new Error(`Failed to load config: ${(error as Error).message}`);\n\t}\n}\n\n/**\n * Load configuration file (single-app format).\n * For backwards compatibility with existing code.\n *\n * @deprecated Use loadWorkspaceConfig for new code\n */\nexport async function loadConfig(\n\tcwd: string = process.cwd(),\n): Promise<GkmConfig> {\n\tconst { config } = await loadRawConfig(cwd);\n\n\t// If it's a workspace config, throw an error\n\tif (isWorkspaceConfig(config)) {\n\t\tthrow new Error(\n\t\t\t'Workspace configuration detected. Use loadWorkspaceConfig() instead.',\n\t\t);\n\t}\n\n\treturn config;\n}\n\n/**\n * Load configuration file and process it as a workspace.\n * Works with both single-app and workspace configurations.\n *\n * Single-app configs are automatically wrapped as a workspace with one app.\n *\n * @example\n * ```ts\n * const { type, workspace } = await loadWorkspaceConfig();\n *\n * if (type === 'workspace') {\n * console.log('Multi-app workspace:', workspace.apps);\n * } else {\n * console.log('Single app wrapped as workspace');\n * }\n * ```\n */\nexport async function loadWorkspaceConfig(\n\tcwd: string = process.cwd(),\n): Promise<LoadedConfig> {\n\tconst { config, workspaceRoot } = await loadRawConfig(cwd);\n\treturn processConfig(config, workspaceRoot);\n}\n\nexport interface AppConfigResult {\n\tappName: string;\n\tapp: NormalizedAppConfig;\n\tgkmConfig: GkmConfig;\n\tworkspace: NormalizedWorkspace;\n\tworkspaceRoot: string;\n\tappRoot: string;\n}\n\n/**\n * Load app-specific configuration from workspace.\n * Uses the app name from package.json to find the correct app config.\n *\n * @example\n * ```ts\n * // From apps/api directory with package.json: { \"name\": \"@myorg/api\" }\n * const { app, workspace, workspaceRoot } = await loadAppConfig();\n * console.log(app.routes); // './src/endpoints/**\\/*.ts'\n * ```\n */\nexport async function loadAppConfig(\n\tcwd: string = process.cwd(),\n): Promise<AppConfigResult> {\n\tconst appName = getAppNameFromCwd(cwd);\n\n\tif (!appName) {\n\t\tthrow new Error(\n\t\t\t'Could not determine app name. Ensure package.json exists with a \"name\" field.',\n\t\t);\n\t}\n\n\tconst { config, workspaceRoot } = await loadRawConfig(cwd);\n\tconst loadedConfig = processConfig(config, workspaceRoot);\n\n\t// Find the app in workspace (apps is a Record<string, NormalizedAppConfig>)\n\tconst app = loadedConfig.workspace.apps[appName];\n\n\tif (!app) {\n\t\tconst availableApps = Object.keys(loadedConfig.workspace.apps).join(', ');\n\t\tthrow new Error(\n\t\t\t`App \"${appName}\" not found in workspace config. Available apps: ${availableApps}. ` +\n\t\t\t\t`Ensure the package.json name matches the app key in gkm.config.ts.`,\n\t\t);\n\t}\n\n\t// Get the app's GKM config using the helper\n\tconst gkmConfig = getAppGkmConfig(loadedConfig.workspace, appName);\n\n\tif (!gkmConfig) {\n\t\tthrow new Error(\n\t\t\t`App \"${appName}\" is not a backend app and cannot be run with gkm dev.`,\n\t\t);\n\t}\n\n\treturn {\n\t\tappName,\n\t\tapp,\n\t\tgkmConfig,\n\t\tworkspace: loadedConfig.workspace,\n\t\tworkspaceRoot,\n\t\tappRoot: join(workspaceRoot, app.path),\n\t};\n}\n\nexport interface WorkspaceAppInfo {\n\tappName: string;\n\tapp: NormalizedAppConfig;\n\tworkspace: NormalizedWorkspace;\n\tworkspaceRoot: string;\n}\n\n/**\n * Load workspace info for any app (frontend or backend).\n * Unlike loadAppConfig, this does NOT require the app to have a gkm config\n * (routes, entry, etc.), making it suitable for gkm exec/test from frontend apps.\n */\nexport async function loadWorkspaceAppInfo(\n\tcwd: string = process.cwd(),\n): Promise<WorkspaceAppInfo> {\n\tconst appName = getAppNameFromCwd(cwd);\n\n\tif (!appName) {\n\t\tthrow new Error(\n\t\t\t'Could not determine app name. Ensure package.json exists with a \"name\" field.',\n\t\t);\n\t}\n\n\tconst { config, workspaceRoot } = await loadRawConfig(cwd);\n\tconst loadedConfig = processConfig(config, workspaceRoot);\n\n\tconst app = loadedConfig.workspace.apps[appName];\n\n\tif (!app) {\n\t\tconst availableApps = Object.keys(loadedConfig.workspace.apps).join(', ');\n\t\tthrow new Error(\n\t\t\t`App \"${appName}\" not found in workspace config. Available apps: ${availableApps}. ` +\n\t\t\t\t`Ensure the package.json name matches the app key in gkm.config.ts.`,\n\t\t);\n\t}\n\n\treturn {\n\t\tappName,\n\t\tapp,\n\t\tworkspace: loadedConfig.workspace,\n\t\tworkspaceRoot,\n\t};\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"config-jsRYHOHU.mjs","names":["config: GkmConfig","configString: string","defaultAlias: string","cwd: string"],"sources":["../src/config.ts"],"sourcesContent":["import { existsSync, readFileSync } from 'node:fs';\nimport { dirname, join, parse } from 'node:path';\nimport type { GkmConfig } from './types.js';\nimport {\n\tgetAppGkmConfig,\n\tisWorkspaceConfig,\n\ttype LoadedConfig,\n\ttype NormalizedAppConfig,\n\ttype NormalizedWorkspace,\n\tprocessConfig,\n\ttype WorkspaceConfig,\n} from './workspace/index.js';\n\nexport type { GkmConfig } from './types.js';\nexport type { LoadedConfig, WorkspaceConfig } from './workspace/index.js';\nexport { defineWorkspace } from './workspace/index.js';\n/**\n * Define GKM configuration with full TypeScript support.\n * This is an identity function that provides type safety and autocomplete.\n *\n * @example\n * ```ts\n * // gkm.config.ts\n * import { defineConfig } from '@geekmidas/cli/config';\n *\n * export default defineConfig({\n * routes: './src/endpoints/**\\/*.ts',\n * envParser: './src/config/env',\n * logger: './src/config/logger',\n * telescope: true,\n * });\n * ```\n */\nexport function defineConfig(config: GkmConfig): GkmConfig {\n\treturn config;\n}\n\nexport interface ParsedModuleConfig {\n\tpath: string;\n\timportPattern: string;\n}\n\n/**\n * Parse a module config string into path and import pattern.\n *\n * @param configString - Config string in format \"./path/to/module\" or \"./path/to/module#exportName\"\n * @param defaultAlias - The default alias name to use if no export name specified\n * @returns Object with path and import pattern\n *\n * @example\n * parseModuleConfig('./src/config/env', 'envParser')\n * // { path: './src/config/env', importPattern: 'envParser' }\n *\n * parseModuleConfig('./src/config/env#envParser', 'envParser')\n * // { path: './src/config/env', importPattern: '{ envParser }' }\n *\n * parseModuleConfig('./src/config/env#myEnv', 'envParser')\n * // { path: './src/config/env', importPattern: '{ myEnv as envParser }' }\n */\nexport function parseModuleConfig(\n\tconfigString: string,\n\tdefaultAlias: string,\n): ParsedModuleConfig {\n\tconst parts = configString.split('#');\n\tconst path = parts[0] ?? configString;\n\tconst exportName = parts[1];\n\tconst importPattern = !exportName\n\t\t? defaultAlias\n\t\t: exportName === defaultAlias\n\t\t\t? `{ ${defaultAlias} }`\n\t\t\t: `{ ${exportName} as ${defaultAlias} }`;\n\n\treturn { path, importPattern };\n}\n\nexport interface ConfigDiscoveryResult {\n\tconfigPath: string;\n\tworkspaceRoot: string;\n}\n\n/**\n * Find and return the path to the config file.\n *\n * Resolution order:\n * 1. GKM_CONFIG_PATH env var (set by workspace dev command)\n * 2. Walk up directory tree from cwd\n */\nfunction findConfigPath(cwd: string): ConfigDiscoveryResult {\n\tconst files = ['gkm.config.json', 'gkm.config.ts', 'gkm.config.js'];\n\n\t// Check GKM_CONFIG_PATH env var first (set by workspace dev command)\n\tconst envConfigPath = process.env.GKM_CONFIG_PATH;\n\tif (envConfigPath && existsSync(envConfigPath)) {\n\t\treturn {\n\t\t\tconfigPath: envConfigPath,\n\t\t\tworkspaceRoot: dirname(envConfigPath),\n\t\t};\n\t}\n\n\t// Walk up directory tree to find config\n\tlet currentDir = cwd;\n\tconst { root } = parse(currentDir);\n\n\twhile (currentDir !== root) {\n\t\tfor (const file of files) {\n\t\t\tconst configPath = join(currentDir, file);\n\t\t\tif (existsSync(configPath)) {\n\t\t\t\treturn {\n\t\t\t\t\tconfigPath,\n\t\t\t\t\tworkspaceRoot: currentDir,\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\t\tcurrentDir = dirname(currentDir);\n\t}\n\n\tthrow new Error(\n\t\t'Configuration file not found. Please create gkm.config.json, gkm.config.ts, or gkm.config.js in the project root.',\n\t);\n}\n\n/**\n * Get app name from package.json in the given directory.\n * Handles scoped packages by extracting the name after the scope.\n *\n * @example\n * getAppNameFromCwd('/path/to/apps/api')\n * // package.json: { \"name\": \"@myorg/api\" }\n * // Returns: 'api'\n */\nexport function getAppNameFromCwd(cwd: string = process.cwd()): string | null {\n\tconst packageJsonPath = join(cwd, 'package.json');\n\n\tif (!existsSync(packageJsonPath)) {\n\t\treturn null;\n\t}\n\n\ttry {\n\t\tconst packageJson = JSON.parse(readFileSync(packageJsonPath, 'utf-8'));\n\t\tconst name = packageJson.name as string | undefined;\n\n\t\tif (!name) {\n\t\t\treturn null;\n\t\t}\n\n\t\t// Handle scoped packages: @scope/name -> name\n\t\tif (name.startsWith('@') && name.includes('/')) {\n\t\t\treturn name.split('/')[1] ?? null;\n\t\t}\n\n\t\treturn name;\n\t} catch {\n\t\treturn null;\n\t}\n}\n\ninterface RawConfigResult {\n\tconfig: GkmConfig | WorkspaceConfig;\n\tworkspaceRoot: string;\n}\n\n/**\n * Load raw configuration from file.\n */\nasync function loadRawConfig(cwd: string): Promise<RawConfigResult> {\n\tconst { configPath, workspaceRoot } = findConfigPath(cwd);\n\n\ttry {\n\t\tconst config = await import(configPath);\n\t\treturn {\n\t\t\tconfig: config.default,\n\t\t\tworkspaceRoot,\n\t\t};\n\t} catch (error) {\n\t\tthrow new Error(`Failed to load config: ${(error as Error).message}`);\n\t}\n}\n\n/**\n * Load configuration file (single-app format).\n * For backwards compatibility with existing code.\n *\n * @deprecated Use loadWorkspaceConfig for new code\n */\nexport async function loadConfig(\n\tcwd: string = process.cwd(),\n): Promise<GkmConfig> {\n\tconst { config } = await loadRawConfig(cwd);\n\n\t// If it's a workspace config, throw an error\n\tif (isWorkspaceConfig(config)) {\n\t\tthrow new Error(\n\t\t\t'Workspace configuration detected. Use loadWorkspaceConfig() instead.',\n\t\t);\n\t}\n\n\treturn config;\n}\n\n/**\n * Load configuration file and process it as a workspace.\n * Works with both single-app and workspace configurations.\n *\n * Single-app configs are automatically wrapped as a workspace with one app.\n *\n * @example\n * ```ts\n * const { type, workspace } = await loadWorkspaceConfig();\n *\n * if (type === 'workspace') {\n * console.log('Multi-app workspace:', workspace.apps);\n * } else {\n * console.log('Single app wrapped as workspace');\n * }\n * ```\n */\nexport async function loadWorkspaceConfig(\n\tcwd: string = process.cwd(),\n): Promise<LoadedConfig> {\n\tconst { config, workspaceRoot } = await loadRawConfig(cwd);\n\treturn processConfig(config, workspaceRoot);\n}\n\nexport interface AppConfigResult {\n\tappName: string;\n\tapp: NormalizedAppConfig;\n\tgkmConfig: GkmConfig;\n\tworkspace: NormalizedWorkspace;\n\tworkspaceRoot: string;\n\tappRoot: string;\n}\n\n/**\n * Load app-specific configuration from workspace.\n * Uses the app name from package.json to find the correct app config.\n *\n * @example\n * ```ts\n * // From apps/api directory with package.json: { \"name\": \"@myorg/api\" }\n * const { app, workspace, workspaceRoot } = await loadAppConfig();\n * console.log(app.routes); // './src/endpoints/**\\/*.ts'\n * ```\n */\nexport async function loadAppConfig(\n\tcwd: string = process.cwd(),\n): Promise<AppConfigResult> {\n\tconst appName = getAppNameFromCwd(cwd);\n\n\tif (!appName) {\n\t\tthrow new Error(\n\t\t\t'Could not determine app name. Ensure package.json exists with a \"name\" field.',\n\t\t);\n\t}\n\n\tconst { config, workspaceRoot } = await loadRawConfig(cwd);\n\tconst loadedConfig = processConfig(config, workspaceRoot);\n\n\t// Find the app in workspace (apps is a Record<string, NormalizedAppConfig>)\n\tconst app = loadedConfig.workspace.apps[appName];\n\n\tif (!app) {\n\t\tconst availableApps = Object.keys(loadedConfig.workspace.apps).join(', ');\n\t\tthrow new Error(\n\t\t\t`App \"${appName}\" not found in workspace config. Available apps: ${availableApps}. ` +\n\t\t\t\t`Ensure the package.json name matches the app key in gkm.config.ts.`,\n\t\t);\n\t}\n\n\t// Get the app's GKM config using the helper\n\tconst gkmConfig = getAppGkmConfig(loadedConfig.workspace, appName);\n\n\tif (!gkmConfig) {\n\t\tthrow new Error(\n\t\t\t`App \"${appName}\" is not a backend app and cannot be run with gkm dev.`,\n\t\t);\n\t}\n\n\treturn {\n\t\tappName,\n\t\tapp,\n\t\tgkmConfig,\n\t\tworkspace: loadedConfig.workspace,\n\t\tworkspaceRoot,\n\t\tappRoot: join(workspaceRoot, app.path),\n\t};\n}\n\nexport interface WorkspaceAppInfo {\n\tappName: string;\n\tapp: NormalizedAppConfig;\n\tworkspace: NormalizedWorkspace;\n\tworkspaceRoot: string;\n}\n\n/**\n * Load workspace info for any app (frontend or backend).\n * Unlike loadAppConfig, this does NOT require the app to have a gkm config\n * (routes, entry, etc.), making it suitable for gkm exec/test from frontend apps.\n */\nexport async function loadWorkspaceAppInfo(\n\tcwd: string = process.cwd(),\n): Promise<WorkspaceAppInfo> {\n\tconst appName = getAppNameFromCwd(cwd);\n\n\tif (!appName) {\n\t\tthrow new Error(\n\t\t\t'Could not determine app name. Ensure package.json exists with a \"name\" field.',\n\t\t);\n\t}\n\n\tconst { config, workspaceRoot } = await loadRawConfig(cwd);\n\tconst loadedConfig = processConfig(config, workspaceRoot);\n\n\tconst app = loadedConfig.workspace.apps[appName];\n\n\tif (!app) {\n\t\tconst availableApps = Object.keys(loadedConfig.workspace.apps).join(', ');\n\t\tthrow new Error(\n\t\t\t`App \"${appName}\" not found in workspace config. Available apps: ${availableApps}. ` +\n\t\t\t\t`Ensure the package.json name matches the app key in gkm.config.ts.`,\n\t\t);\n\t}\n\n\treturn {\n\t\tappName,\n\t\tapp,\n\t\tworkspace: loadedConfig.workspace,\n\t\tworkspaceRoot,\n\t};\n}\n"],"mappings":"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"}
package/dist/config.cjs CHANGED
@@ -1,5 +1,5 @@
1
- const require_workspace = require('./workspace-D2ocAlpl.cjs');
2
- const require_config = require('./config-6JHOwLCx.cjs');
1
+ const require_workspace = require('./workspace-4SP3Gx4Y.cjs');
2
+ const require_config = require('./config-D3ORuiUs.cjs');
3
3
 
4
4
  exports.defineConfig = require_config.defineConfig;
5
5
  exports.defineWorkspace = require_workspace.defineWorkspace;
package/dist/config.d.cts CHANGED
@@ -1,5 +1,5 @@
1
- import { GkmConfig } from "./types-l53qUmGt.cjs";
2
- import { LoadedConfig, NormalizedAppConfig, NormalizedWorkspace, WorkspaceConfig, defineWorkspace } from "./index-Cyk2rTyj.cjs";
1
+ import { GkmConfig } from "./types-C7QJJl9f.cjs";
2
+ import { LoadedConfig, NormalizedAppConfig, NormalizedWorkspace, WorkspaceConfig, defineWorkspace } from "./index-CiEOtKEX.cjs";
3
3
 
4
4
  //#region src/config.d.ts
5
5
 
package/dist/config.d.mts CHANGED
@@ -1,5 +1,5 @@
1
- import { GkmConfig } from "./types-wXMIMOyK.mjs";
2
- import { LoadedConfig, NormalizedAppConfig, NormalizedWorkspace, WorkspaceConfig, defineWorkspace } from "./index-Bt2kX0-R.mjs";
1
+ import { GkmConfig } from "./types-Iqsq_FIG.mjs";
2
+ import { LoadedConfig, NormalizedAppConfig, NormalizedWorkspace, WorkspaceConfig, defineWorkspace } from "./index-3n-giNaw.mjs";
3
3
 
4
4
  //#region src/config.d.ts
5
5
 
package/dist/config.mjs CHANGED
@@ -1,4 +1,4 @@
1
- import { defineWorkspace } from "./workspace-9IQIjwkQ.mjs";
2
- import { defineConfig, getAppNameFromCwd, loadAppConfig, loadConfig, loadWorkspaceAppInfo, loadWorkspaceConfig, parseModuleConfig } from "./config-DxASSNjr.mjs";
1
+ import { defineWorkspace } from "./workspace-D4z4A4cq.mjs";
2
+ import { defineConfig, getAppNameFromCwd, loadAppConfig, loadConfig, loadWorkspaceAppInfo, loadWorkspaceConfig, parseModuleConfig } from "./config-jsRYHOHU.mjs";
3
3
 
4
4
  export { defineConfig, defineWorkspace, getAppNameFromCwd, loadAppConfig, loadConfig, loadWorkspaceAppInfo, loadWorkspaceConfig, parseModuleConfig };
@@ -1,4 +1,4 @@
1
- import { GkmConfig, HooksConfig, OpenApiConfig, ProvidersConfig, Routes, Runtime, StudioConfig, TelescopeConfig } from "./types-wXMIMOyK.mjs";
1
+ import { GkmConfig, HooksConfig, OpenApiConfig, ProvidersConfig, Routes, Runtime, StudioConfig, TelescopeConfig } from "./types-Iqsq_FIG.mjs";
2
2
  import { z } from "zod/v4";
3
3
 
4
4
  //#region src/deploy/state.d.ts
@@ -355,10 +355,22 @@ declare const WorkspaceConfigSchema: z.ZodObject<{
355
355
  vercel: "vercel";
356
356
  cloudflare: "cloudflare";
357
357
  }>>;
358
- routes: z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.ZodArray<z.ZodString>]>>;
359
- functions: z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.ZodArray<z.ZodString>]>>;
360
- crons: z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.ZodArray<z.ZodString>]>>;
361
- subscribers: z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.ZodArray<z.ZodString>]>>;
358
+ routes: z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.ZodArray<z.ZodString>, z.ZodObject<{
359
+ paths: z.ZodUnion<readonly [z.ZodString, z.ZodArray<z.ZodString>]>;
360
+ partition: z.ZodCustom<(filepath: string) => string, (filepath: string) => string>;
361
+ }, z.core.$strip>]>>;
362
+ functions: z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.ZodArray<z.ZodString>, z.ZodObject<{
363
+ paths: z.ZodUnion<readonly [z.ZodString, z.ZodArray<z.ZodString>]>;
364
+ partition: z.ZodCustom<(filepath: string) => string, (filepath: string) => string>;
365
+ }, z.core.$strip>]>>;
366
+ crons: z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.ZodArray<z.ZodString>, z.ZodObject<{
367
+ paths: z.ZodUnion<readonly [z.ZodString, z.ZodArray<z.ZodString>]>;
368
+ partition: z.ZodCustom<(filepath: string) => string, (filepath: string) => string>;
369
+ }, z.core.$strip>]>>;
370
+ subscribers: z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.ZodArray<z.ZodString>, z.ZodObject<{
371
+ paths: z.ZodUnion<readonly [z.ZodString, z.ZodArray<z.ZodString>]>;
372
+ partition: z.ZodCustom<(filepath: string) => string, (filepath: string) => string>;
373
+ }, z.core.$strip>]>>;
362
374
  envParser: z.ZodOptional<z.ZodString>;
363
375
  logger: z.ZodOptional<z.ZodString>;
364
376
  hooks: z.ZodOptional<z.ZodObject<{
@@ -1645,4 +1657,4 @@ declare function getEndpointForStage(dokployConfig: {
1645
1657
 
1646
1658
  //#endregion
1647
1659
  export { AppConfig, AppConfigInput, AppInput, AppsRecord, BackendFramework, ClientConfig, ConstrainedApps, DeployConfig, DeployTarget, DokployWorkspaceConfig, FrontendFramework, InferAppNames, InferredWorkspaceConfig, LoadedConfig, MailServiceConfig, ModelsConfig, NormalizedAppConfig, NormalizedWorkspace, PHASE_2_DEPLOY_TARGETS, SUPPORTED_DEPLOY_TARGETS, SecretsConfig, ServiceImageConfig, ServicesConfig, SharedConfig, WorkspaceConfig, WorkspaceConfigSchema, WorkspaceInput, defineWorkspace, formatValidationErrors, getAppBuildOrder, getAppGkmConfig, getDependencyEnvVars, getDeployTargetError, getEndpointForStage, isDeployTargetSupported, isPhase2DeployTarget, isWorkspaceConfig, normalizeWorkspace, processConfig, safeValidateWorkspaceConfig, validateWorkspaceConfig, wrapSingleAppAsWorkspace };
1648
- //# sourceMappingURL=index-Bt2kX0-R.d.mts.map
1660
+ //# sourceMappingURL=index-3n-giNaw.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index-3n-giNaw.d.mts","names":[],"sources":["../src/deploy/state.ts","../src/deploy/StateProvider.ts","../src/workspace/schema.ts","../src/workspace/types.ts","../src/workspace/index.ts"],"sourcesContent":[],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import { GkmConfig, HooksConfig, OpenApiConfig, ProvidersConfig, Routes, Runtime, StudioConfig, TelescopeConfig } from "./types-l53qUmGt.cjs";
1
+ import { GkmConfig, HooksConfig, OpenApiConfig, ProvidersConfig, Routes, Runtime, StudioConfig, TelescopeConfig } from "./types-C7QJJl9f.cjs";
2
2
  import { z } from "zod/v4";
3
3
 
4
4
  //#region src/deploy/state.d.ts
@@ -355,10 +355,22 @@ declare const WorkspaceConfigSchema: z.ZodObject<{
355
355
  vercel: "vercel";
356
356
  cloudflare: "cloudflare";
357
357
  }>>;
358
- routes: z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.ZodArray<z.ZodString>]>>;
359
- functions: z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.ZodArray<z.ZodString>]>>;
360
- crons: z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.ZodArray<z.ZodString>]>>;
361
- subscribers: z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.ZodArray<z.ZodString>]>>;
358
+ routes: z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.ZodArray<z.ZodString>, z.ZodObject<{
359
+ paths: z.ZodUnion<readonly [z.ZodString, z.ZodArray<z.ZodString>]>;
360
+ partition: z.ZodCustom<(filepath: string) => string, (filepath: string) => string>;
361
+ }, z.core.$strip>]>>;
362
+ functions: z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.ZodArray<z.ZodString>, z.ZodObject<{
363
+ paths: z.ZodUnion<readonly [z.ZodString, z.ZodArray<z.ZodString>]>;
364
+ partition: z.ZodCustom<(filepath: string) => string, (filepath: string) => string>;
365
+ }, z.core.$strip>]>>;
366
+ crons: z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.ZodArray<z.ZodString>, z.ZodObject<{
367
+ paths: z.ZodUnion<readonly [z.ZodString, z.ZodArray<z.ZodString>]>;
368
+ partition: z.ZodCustom<(filepath: string) => string, (filepath: string) => string>;
369
+ }, z.core.$strip>]>>;
370
+ subscribers: z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.ZodArray<z.ZodString>, z.ZodObject<{
371
+ paths: z.ZodUnion<readonly [z.ZodString, z.ZodArray<z.ZodString>]>;
372
+ partition: z.ZodCustom<(filepath: string) => string, (filepath: string) => string>;
373
+ }, z.core.$strip>]>>;
362
374
  envParser: z.ZodOptional<z.ZodString>;
363
375
  logger: z.ZodOptional<z.ZodString>;
364
376
  hooks: z.ZodOptional<z.ZodObject<{
@@ -1645,4 +1657,4 @@ declare function getEndpointForStage(dokployConfig: {
1645
1657
 
1646
1658
  //#endregion
1647
1659
  export { AppConfig, AppConfigInput, AppInput, AppsRecord, BackendFramework, ClientConfig, ConstrainedApps, DeployConfig, DeployTarget, DokployWorkspaceConfig, FrontendFramework, InferAppNames, InferredWorkspaceConfig, LoadedConfig, MailServiceConfig, ModelsConfig, NormalizedAppConfig, NormalizedWorkspace, PHASE_2_DEPLOY_TARGETS, SUPPORTED_DEPLOY_TARGETS, SecretsConfig, ServiceImageConfig, ServicesConfig, SharedConfig, WorkspaceConfig, WorkspaceConfigSchema, WorkspaceInput, defineWorkspace, formatValidationErrors, getAppBuildOrder, getAppGkmConfig, getDependencyEnvVars, getDeployTargetError, getEndpointForStage, isDeployTargetSupported, isPhase2DeployTarget, isWorkspaceConfig, normalizeWorkspace, processConfig, safeValidateWorkspaceConfig, validateWorkspaceConfig, wrapSingleAppAsWorkspace };
1648
- //# sourceMappingURL=index-Cyk2rTyj.d.cts.map
1660
+ //# sourceMappingURL=index-CiEOtKEX.d.cts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index-CiEOtKEX.d.cts","names":[],"sources":["../src/deploy/state.ts","../src/deploy/StateProvider.ts","../src/workspace/schema.ts","../src/workspace/types.ts","../src/workspace/index.ts"],"sourcesContent":[],"mappings":"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"}