@geekmidas/cli 0.25.0 → 0.27.0

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 (36) hide show
  1. package/dist/{config-CTftATBX.cjs → config-BhryDQEq.cjs} +2 -2
  2. package/dist/{config-CTftATBX.cjs.map → config-BhryDQEq.cjs.map} +1 -1
  3. package/dist/{config-BogU0_oQ.mjs → config-C9bdq0l-.mjs} +2 -2
  4. package/dist/{config-BogU0_oQ.mjs.map → config-C9bdq0l-.mjs.map} +1 -1
  5. package/dist/config.cjs +2 -2
  6. package/dist/config.mjs +2 -2
  7. package/dist/index-CWN-bgrO.d.mts.map +1 -1
  8. package/dist/index-DEWYvYvg.d.cts.map +1 -1
  9. package/dist/index.cjs +128 -27
  10. package/dist/index.cjs.map +1 -1
  11. package/dist/index.mjs +128 -27
  12. package/dist/index.mjs.map +1 -1
  13. package/dist/{openapi-DNbXfhXE.mjs → openapi-BCEFhkLh.mjs} +2 -2
  14. package/dist/{openapi-DNbXfhXE.mjs.map → openapi-BCEFhkLh.mjs.map} +1 -1
  15. package/dist/{openapi-BrhkPKM7.cjs → openapi-D82bBqG7.cjs} +2 -2
  16. package/dist/{openapi-BrhkPKM7.cjs.map → openapi-D82bBqG7.cjs.map} +1 -1
  17. package/dist/openapi.cjs +3 -3
  18. package/dist/openapi.mjs +3 -3
  19. package/dist/workspace/index.cjs +1 -1
  20. package/dist/workspace/index.mjs +1 -1
  21. package/dist/{workspace-iWgBlX6h.cjs → workspace-CiZBOjf9.cjs} +1 -7
  22. package/dist/{workspace-iWgBlX6h.cjs.map → workspace-CiZBOjf9.cjs.map} +1 -1
  23. package/dist/{workspace-CPLEZDZf.mjs → workspace-DQjmv9lk.mjs} +1 -7
  24. package/dist/{workspace-CPLEZDZf.mjs.map → workspace-DQjmv9lk.mjs.map} +1 -1
  25. package/package.json +4 -4
  26. package/src/init/__tests__/generators.spec.ts +12 -6
  27. package/src/init/__tests__/init.spec.ts +18 -6
  28. package/src/init/generators/models.ts +49 -19
  29. package/src/init/templates/api.ts +57 -3
  30. package/src/init/templates/minimal.ts +8 -0
  31. package/src/init/templates/serverless.ts +9 -0
  32. package/src/init/templates/worker.ts +9 -1
  33. package/src/init/versions.ts +1 -1
  34. package/src/workspace/__tests__/index.spec.ts +5 -6
  35. package/src/workspace/__tests__/schema.spec.ts +5 -5
  36. package/src/workspace/schema.ts +1 -13
@@ -1,5 +1,5 @@
1
1
  const require_chunk = require('./chunk-CUT6urMc.cjs');
2
- const require_workspace = require('./workspace-iWgBlX6h.cjs');
2
+ const require_workspace = require('./workspace-CiZBOjf9.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
 
@@ -222,4 +222,4 @@ Object.defineProperty(exports, 'parseModuleConfig', {
222
222
  return parseModuleConfig;
223
223
  }
224
224
  });
225
- //# sourceMappingURL=config-CTftATBX.cjs.map
225
+ //# sourceMappingURL=config-BhryDQEq.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"config-CTftATBX.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"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;AAiCA,SAAgB,aAAaA,QAA8B;AAC1D,QAAO;AACP;;;;;;;;;;;;;;;;;;AAwBD,SAAgB,kBACfC,cACAC,cACqB;CACrB,MAAM,QAAQ,aAAa,MAAM,IAAI;CACrC,MAAM,OAAO,MAAM,MAAM;CACzB,MAAM,aAAa,MAAM;CACzB,MAAM,iBAAiB,aACpB,eACA,eAAe,gBACb,IAAI,aAAa,OACjB,IAAI,WAAW,MAAM,aAAa;AAEvC,QAAO;EAAE;EAAM;CAAe;AAC9B;;;;;;;;AAcD,SAAS,eAAeC,KAAoC;CAC3D,MAAM,QAAQ;EAAC;EAAmB;EAAiB;CAAgB;CAGnE,MAAM,gBAAgB,QAAQ,IAAI;AAClC,KAAI,iBAAiB,wBAAW,cAAc,CAC7C,QAAO;EACN,YAAY;EACZ,eAAe,uBAAQ,cAAc;CACrC;CAIF,IAAI,aAAa;CACjB,MAAM,EAAE,MAAM,GAAG,qBAAM,WAAW;AAElC,QAAO,eAAe,MAAM;AAC3B,OAAK,MAAM,QAAQ,OAAO;GACzB,MAAM,aAAa,oBAAK,YAAY,KAAK;AACzC,OAAI,wBAAW,WAAW,CACzB,QAAO;IACN;IACA,eAAe;GACf;EAEF;AACD,eAAa,uBAAQ,WAAW;CAChC;AAED,OAAM,IAAI,MACT;AAED;;;;;;;;;;AAWD,SAAgB,kBAAkBA,MAAc,QAAQ,KAAK,EAAiB;CAC7E,MAAM,kBAAkB,oBAAK,KAAK,eAAe;AAEjD,MAAK,wBAAW,gBAAgB,CAC/B,QAAO;AAGR,KAAI;EACH,MAAM,cAAc,KAAK,MAAM,0BAAa,iBAAiB,QAAQ,CAAC;EACtE,MAAM,OAAO,YAAY;AAEzB,OAAK,KACJ,QAAO;AAIR,MAAI,KAAK,WAAW,IAAI,IAAI,KAAK,SAAS,IAAI,CAC7C,QAAO,KAAK,MAAM,IAAI,CAAC,MAAM;AAG9B,SAAO;CACP,QAAO;AACP,SAAO;CACP;AACD;;;;AAUD,eAAe,cAAcA,KAAuC;CACnE,MAAM,EAAE,YAAY,eAAe,GAAG,eAAe,IAAI;AAEzD,KAAI;EACH,MAAM,SAAS,MAAM,OAAO;AAC5B,SAAO;GACN,QAAQ,OAAO;GACf;EACA;CACD,SAAQ,OAAO;AACf,QAAM,IAAI,OAAO,yBAA0B,MAAgB,QAAQ;CACnE;AACD;;;;;;;AAQD,eAAsB,WACrBA,MAAc,QAAQ,KAAK,EACN;CACrB,MAAM,EAAE,QAAQ,GAAG,MAAM,cAAc,IAAI;AAG3C,KAAI,oCAAkB,OAAO,CAC5B,OAAM,IAAI,MACT;AAIF,QAAO;AACP;;;;;;;;;;;;;;;;;;AAmBD,eAAsB,oBACrBA,MAAc,QAAQ,KAAK,EACH;CACxB,MAAM,EAAE,QAAQ,eAAe,GAAG,MAAM,cAAc,IAAI;AAC1D,QAAO,gCAAc,QAAQ,cAAc;AAC3C;;;;;;;;;;;;AAsBD,eAAsB,cACrBA,MAAc,QAAQ,KAAK,EACA;CAC3B,MAAM,UAAU,kBAAkB,IAAI;AAEtC,MAAK,QACJ,OAAM,IAAI,MACT;CAIF,MAAM,EAAE,QAAQ,eAAe,GAAG,MAAM,cAAc,IAAI;CAC1D,MAAM,eAAe,gCAAc,QAAQ,cAAc;CAGzD,MAAM,MAAM,aAAa,UAAU,KAAK;AAExC,MAAK,KAAK;EACT,MAAM,gBAAgB,OAAO,KAAK,aAAa,UAAU,KAAK,CAAC,KAAK,KAAK;AACzE,QAAM,IAAI,OACR,OAAO,QAAQ,mDAAmD,cAAc;CAGlF;CAGD,MAAM,YAAY,kCAAgB,aAAa,WAAW,QAAQ;AAElE,MAAK,UACJ,OAAM,IAAI,OACR,OAAO,QAAQ;AAIlB,QAAO;EACN;EACA;EACA;EACA,WAAW,aAAa;EACxB;EACA,SAAS,oBAAK,eAAe,IAAI,KAAK;CACtC;AACD"}
1
+ {"version":3,"file":"config-BhryDQEq.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"],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import { getAppGkmConfig, isWorkspaceConfig, processConfig } from "./workspace-CPLEZDZf.mjs";
1
+ import { getAppGkmConfig, isWorkspaceConfig, processConfig } from "./workspace-DQjmv9lk.mjs";
2
2
  import { existsSync, readFileSync } from "node:fs";
3
3
  import { dirname, join, parse } from "node:path";
4
4
 
@@ -186,4 +186,4 @@ async function loadAppConfig(cwd = process.cwd()) {
186
186
 
187
187
  //#endregion
188
188
  export { defineConfig, getAppNameFromCwd, loadAppConfig, loadConfig, loadWorkspaceConfig, parseModuleConfig };
189
- //# sourceMappingURL=config-BogU0_oQ.mjs.map
189
+ //# sourceMappingURL=config-C9bdq0l-.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"config-BogU0_oQ.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"],"mappings":"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"}
1
+ {"version":3,"file":"config-C9bdq0l-.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"],"mappings":";;;;;;;;;;;;;;;;;;;;;;AAiCA,SAAgB,aAAaA,QAA8B;AAC1D,QAAO;AACP;;;;;;;;;;;;;;;;;;AAwBD,SAAgB,kBACfC,cACAC,cACqB;CACrB,MAAM,QAAQ,aAAa,MAAM,IAAI;CACrC,MAAM,OAAO,MAAM,MAAM;CACzB,MAAM,aAAa,MAAM;CACzB,MAAM,iBAAiB,aACpB,eACA,eAAe,gBACb,IAAI,aAAa,OACjB,IAAI,WAAW,MAAM,aAAa;AAEvC,QAAO;EAAE;EAAM;CAAe;AAC9B;;;;;;;;AAcD,SAAS,eAAeC,KAAoC;CAC3D,MAAM,QAAQ;EAAC;EAAmB;EAAiB;CAAgB;CAGnE,MAAM,gBAAgB,QAAQ,IAAI;AAClC,KAAI,iBAAiB,WAAW,cAAc,CAC7C,QAAO;EACN,YAAY;EACZ,eAAe,QAAQ,cAAc;CACrC;CAIF,IAAI,aAAa;CACjB,MAAM,EAAE,MAAM,GAAG,MAAM,WAAW;AAElC,QAAO,eAAe,MAAM;AAC3B,OAAK,MAAM,QAAQ,OAAO;GACzB,MAAM,aAAa,KAAK,YAAY,KAAK;AACzC,OAAI,WAAW,WAAW,CACzB,QAAO;IACN;IACA,eAAe;GACf;EAEF;AACD,eAAa,QAAQ,WAAW;CAChC;AAED,OAAM,IAAI,MACT;AAED;;;;;;;;;;AAWD,SAAgB,kBAAkBA,MAAc,QAAQ,KAAK,EAAiB;CAC7E,MAAM,kBAAkB,KAAK,KAAK,eAAe;AAEjD,MAAK,WAAW,gBAAgB,CAC/B,QAAO;AAGR,KAAI;EACH,MAAM,cAAc,KAAK,MAAM,aAAa,iBAAiB,QAAQ,CAAC;EACtE,MAAM,OAAO,YAAY;AAEzB,OAAK,KACJ,QAAO;AAIR,MAAI,KAAK,WAAW,IAAI,IAAI,KAAK,SAAS,IAAI,CAC7C,QAAO,KAAK,MAAM,IAAI,CAAC,MAAM;AAG9B,SAAO;CACP,QAAO;AACP,SAAO;CACP;AACD;;;;AAUD,eAAe,cAAcA,KAAuC;CACnE,MAAM,EAAE,YAAY,eAAe,GAAG,eAAe,IAAI;AAEzD,KAAI;EACH,MAAM,SAAS,MAAM,OAAO;AAC5B,SAAO;GACN,QAAQ,OAAO;GACf;EACA;CACD,SAAQ,OAAO;AACf,QAAM,IAAI,OAAO,yBAA0B,MAAgB,QAAQ;CACnE;AACD;;;;;;;AAQD,eAAsB,WACrBA,MAAc,QAAQ,KAAK,EACN;CACrB,MAAM,EAAE,QAAQ,GAAG,MAAM,cAAc,IAAI;AAG3C,KAAI,kBAAkB,OAAO,CAC5B,OAAM,IAAI,MACT;AAIF,QAAO;AACP;;;;;;;;;;;;;;;;;;AAmBD,eAAsB,oBACrBA,MAAc,QAAQ,KAAK,EACH;CACxB,MAAM,EAAE,QAAQ,eAAe,GAAG,MAAM,cAAc,IAAI;AAC1D,QAAO,cAAc,QAAQ,cAAc;AAC3C;;;;;;;;;;;;AAsBD,eAAsB,cACrBA,MAAc,QAAQ,KAAK,EACA;CAC3B,MAAM,UAAU,kBAAkB,IAAI;AAEtC,MAAK,QACJ,OAAM,IAAI,MACT;CAIF,MAAM,EAAE,QAAQ,eAAe,GAAG,MAAM,cAAc,IAAI;CAC1D,MAAM,eAAe,cAAc,QAAQ,cAAc;CAGzD,MAAM,MAAM,aAAa,UAAU,KAAK;AAExC,MAAK,KAAK;EACT,MAAM,gBAAgB,OAAO,KAAK,aAAa,UAAU,KAAK,CAAC,KAAK,KAAK;AACzE,QAAM,IAAI,OACR,OAAO,QAAQ,mDAAmD,cAAc;CAGlF;CAGD,MAAM,YAAY,gBAAgB,aAAa,WAAW,QAAQ;AAElE,MAAK,UACJ,OAAM,IAAI,OACR,OAAO,QAAQ;AAIlB,QAAO;EACN;EACA;EACA;EACA,WAAW,aAAa;EACxB;EACA,SAAS,KAAK,eAAe,IAAI,KAAK;CACtC;AACD"}
package/dist/config.cjs CHANGED
@@ -1,5 +1,5 @@
1
- const require_workspace = require('./workspace-iWgBlX6h.cjs');
2
- const require_config = require('./config-CTftATBX.cjs');
1
+ const require_workspace = require('./workspace-CiZBOjf9.cjs');
2
+ const require_config = require('./config-BhryDQEq.cjs');
3
3
 
4
4
  exports.defineConfig = require_config.defineConfig;
5
5
  exports.defineWorkspace = require_workspace.defineWorkspace;
package/dist/config.mjs CHANGED
@@ -1,4 +1,4 @@
1
- import { defineWorkspace } from "./workspace-CPLEZDZf.mjs";
2
- import { defineConfig, getAppNameFromCwd, loadAppConfig, loadConfig, loadWorkspaceConfig, parseModuleConfig } from "./config-BogU0_oQ.mjs";
1
+ import { defineWorkspace } from "./workspace-DQjmv9lk.mjs";
2
+ import { defineConfig, getAppNameFromCwd, loadAppConfig, loadConfig, loadWorkspaceConfig, parseModuleConfig } from "./config-C9bdq0l-.mjs";
3
3
 
4
4
  export { defineConfig, defineWorkspace, getAppNameFromCwd, loadAppConfig, loadConfig, loadWorkspaceConfig, parseModuleConfig };
@@ -1 +1 @@
1
- {"version":3,"file":"index-CWN-bgrO.d.mts","names":[],"sources":["../src/workspace/types.ts","../src/workspace/schema.ts","../src/workspace/index.ts"],"sourcesContent":[],"mappings":"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"}
1
+ {"version":3,"file":"index-CWN-bgrO.d.mts","names":[],"sources":["../src/workspace/types.ts","../src/workspace/schema.ts","../src/workspace/index.ts"],"sourcesContent":[],"mappings":";;;;;;;;AAgBA;AAKA;AAUiB,KAfL,YAAA,GAeuB,SAAQ,GAAA,QAAA,GAAA,YAAkB;AAa7D;;;AAImB,UA3BF,kBAAA,CA2BE;EAAkB;EAEF,OAAA,CAAA,EAAA,MAAA;EAMlB;EAcA,KAAA,CAAA,EAAA,MAAA;;;;AAIgB;AAMhB,UAjDA,iBAAA,SAA0B,kBAiDd,CAAA;EAcZ;EAUA,IAAA,CAAA,EAAA;IAYA,IAAA,EAAA,MAAY;IAQnB,IAAA,EAAA,MAAa;IAAA,IAAA,CAAA,EAAA,MAAA;IAWb,IAAA,CAAA,EAAA,MAAA;EAAY,CAAA;;;;;AAkBb,UA7GQ,cAAA,CA6GR;EAAW;EAE2B,EAAA,CAElB,EAAA,OAAA,GA/Gb,kBA+Ga;EAAY;EAEP,KAEvB,CAAA,EAAA,OAAA,GAjHQ,kBAiHR;EAAO;EAQI,IAAA,CAAA,EAAA,OAAA,GAvHJ,iBAuHI;AAOtB;;;;AACsB,UAzHL,sBAAA,CAyHK;EASL;EAQL,QAAA,EAAA,MAAQ;EAOR;EAAU,SAAA,EAAA,MAAA;EAAA;EAA0B,QAAvB,CAAA,EAAA,MAAA;EAAM;EAMnB,UAAA,CAAA,EAAA,MAAe;;;;;AACK,UA1If,YAAA,CA0Ie;EAAC;EAAR,OACQ,CAAA,EAzItB,YAyIsB;EAAK;EAO1B,OAAA,CAAA,EA9ID,sBA8Ie;;;;;AAGhB,UA3IO,YAAA,CA2IP;EAAY;EACA,IACV,CAAA,EAAA,MAAA;EAAc;AACF;AAMxB;;;EAAkD,MAAU,CAAA,EAAA,KAAA;AAAK;AAKjE;;;AAGc,UA9IG,YAAA,CA8IH;EAAK;EAAa,QAAC,CAAA,EAAA,MAAA,EAAA;EAAC;EAAR,MACM,CAAA,EA3ItB,YA2IsB;;;;;AAMrB,UA3IM,aAAA,CA2IN;EAAa;EAuBP,OAAA,CAAA,EAAA,OAAA;EAAe;EAAA,SAKV,CAAA,EAAA,MAAA;EAAS;EAAlB,GAGH,CAAA,EAAA,QAAA,GAAA,QAAA;;;;AASc;AAMP,UA7KA,YAAA,CA6KoB;EAAA;EAAA,MAAa,CAAA,EAAA,MAAA;;;AAAD;AAYjD;UAjLU,aAAA,CAiL0B;EAAA;EAGK,IAAlC,CAAA,EAAA,SAAA,GAAA,UAAA;EAAM;EACY,IAChB,EAAA,MAAA;EAAY;EACA,IACX,EAAA,MAAA;EAAa;EAMN,MAAA,CAAA,EAnLP,YAmLmB;EAAA;EAAA,MAIvB,CAAA,EAnLI,MAmLJ;EAAS;EAAkB,SAErB,CAAA,EAnLC,MAmLD;EAAmB;EAMf,KAAA,CAAA,EAvLP,MAuLO;EAAiB;EAAA,WACxB,CAAA,EAtLM,MAsLN;EAAS;EAAkB,SACvB,CAAA,EAAA,MAAA;EAAe;;;cAjLf;ECxFP;EAKA,KAAA,CAAA,EDqFG,WCrFH;EAKU;EASA,SAAA,CAAA,EAAA,MAAA,GAAA,OAAoB,GDyEJ,eCzEI;EASpB;EAoIH,MAAA,CAAA,EAAA,MAAA,GAAA,OA2FV,GD7J0B,YC6J1B;EAAA;EAAA,OAAA,CAAA,EAAA,OAAA,GD3JkB,aC2JlB;;YDzJQ;;;;;;WAQD;;;;;;UAOO,0DACR;;iBAEO;;;;;;UAOC,SAAA,SAAkB;;;;;;;KAQvB,QAAA,GAAW;;;;;;KAOX,UAAA,GAAa,eAAe;;;;;KAM5B,8BAA8B,4BAC7B,QAAQ,KAAK,MAAM;iCACC;;;;;KAOrB,6BAA6B;;QAElC,gBAAgB;WACb;WACA;aACE;YACD;;;;;KAMC,4BAA4B,oBAAoB;;;;KAKhD,sCAAsC;;sBAGpC,QAAQ,KAAK,MAAM;mBACf,cAAc;;WAGtB;WACA;aACE;YACD;;;;;;;;UAuBM,eAAA;;;;QAKV,eAAe;;WAGZ;;WAGA;;aAGE;;YAGD;;;;;UAMM,mBAAA,SAA4B,KAAK;;;;;;wBAM3B;;;;;UAMN,mBAAA;;;QAGV,eAAe;YACX;UACF;UACA;WACC;;;;;UAMO,YAAA;;;;OAIX,YAAY;;aAEN;;;;;iBAMI,iBAAA,SACP,YAAY,4BACR;;;;;;AAxTb,cC+CM,wBD/CkB,EAAA,SAAA,CAAA,SAAA,CAAA;AAKxB;AAUA;AAaA;cCwBM,sBDxByB,EAAA,SAAA,CAAA,QAAA,EAAA,YAAA,CAAA;;;;AAMI,iBCuBnB,uBAAA,CDvBmB,MAAA,EAAA,MAAA,CAAA,EAAA,OAAA;AAMnC;AAcA;;AAEW,iBCUK,oBAAA,CDVL,MAAA,EAAA,MAAA,CAAA,EAAA,OAAA;;AAEsB;AAMjC;AAciB,iBCHD,oBAAA,CDOM,MAAA,EAAA,MAAA,EAAA,OAAA,CAAA,EAAA,MAAA,CAAA,EAAA,MAAA;AAMtB;AAYA;AAGC;AAKsB,cCmGV,qBDnGU,ECmGW,CAAA,CAAA,SDnGX,CAAA;EAAA,IAWb,eAAA,CCmLP,CAAA,CAAA,SDnLO,CAAA;EAAY,IAIZ,aAAA,YAAA,aAAA,CAAA;IAEG,IAAA,cAAA,cAAA,UAAA,CAAA;MAEJ,OAAA,EAAA,SAAA;MAEM,QAAA,EAAA,UAAA;IAMF,CAAA,CAAA,CAAA,CAAA;IAEJ,IAAA,aAAA;IAEuB,IAAA,aAAA;IAEH,YAAA,eAAA,WAAA,YAAA,CAAA,CAAA;IAER,MAAA,eAAA,UAAA,CAAA;MAEV,OAAA,EAAA,SAAA;MAQD,MAAA,EAAA,QAAA;MAAY,UAAA,EAAA,YAAA;IAOL,CAAA,CAAA,CAAA;IAAc,MAAA,eAAA,WAAA,CAAA,SAAA,YAAA,YAAA,YAAA,CAAA,CAAA,CAAA,CAAA;IAGf,SAAA,eAAA,WAAA,CAAA,SAAA,YAAA,YAAA,YAAA,CAAA,CAAA,CAAA,CAAA;IAFP,KAAA,eAAA,WAAA,CAAA,SAAA,YAAA,YAAA,YAAA,CAAA,CAAA,CAAA,CAAA;IAAa,WAAA,eAAA,WAAA,CAAA,SAAA,YAAA,YAAA,YAAA,CAAA,CAAA,CAAA,CAAA;IASL,SAAU,eAAQ,YAAa,CAAA;IAQpC,MAAA,eAAW,YAAa,CAAA;IAOxB,KAAA,eAAU,YAAA,CAAA;MAAA,MAAA,eAAA,YAAA,CAAA;IAAkB,CAAA,eAAA,CAAA,CAAA;IAAf,SAAA,eAAA,WAAA,CAAA,SAAA,YAAA,cAAA,aAAA,CAAA;MAAM,OAAA,eAAA,aAAA,CAAA;MAMnB,IAAA,eAAe,YAAA,CAAA;MAAA,IAAA,eAAA,YAAA,CAAA;MAAe,MAAA,eAAA,WAAA,YAAA,CAAA,CAAA;MAC7B,UAAA,eAAA,aAAA,CAAA;MAAa,UAAA,eAAA,YAAA,CAAA;MAAM,SAAA,eAAA,aAAA,CAAA;IAAX,CAAA,eAAA,CAAA,CAAA,CAAA,CAAA;IACY,MAAA,eAAA,WAAA,CAAA,SAAA,YAAA,cAAA,aAAA,CAAA;MAAK,OAAA,eAAA,aAAA,CAAA;MAO1B,IAAA,eAAc,YAAA,CAAA;MAAA,MAAA,eAAA,YAAA,CAAA;IAAe,CAAA,eAAA,CAAA,CAAA,CAAA,CAAA;IAElB,OAAA,eAAA,WAAA,CAAA,SAAA,aAAA,aAAA,CAAA;MAAhB,OAAA,eAAA,aAAA,CAAA;MACG,KAAA,eAAA,YAAA,CAAA;MACA,OAAA,eAAA,YAAA,CAAA;MACE,WAAA,eAAA,YAAA,CAAA;IACD,CAAA,eAAA,CAAA,CAAA,CAAA,CAAA;IAAa,OAAA,eAAA,UAAA,CAAA;MAMZ,IAAA,EAAA,MAAa;MAAA,GAAA,EAAA,KAAA;IAAe,CAAA,CAAA,CAAA;IAAoB,GAAA,eAAA,WAAA,CAAA,SAAA,YAAA,YAAA,YAAA,CAAA,CAAA,CAAA,CAAA;IAAK,SAAA,eAAA,UAAA,CAAA;MAKrD,MAAA,EAAA,QAAA;IAAuB,CAAA,CAAA,CAAA;IAAe,MAAA,eAAA,YAAA,CAAA;MAGpC,MAAA,eAAA,YAAA,CAAA;IAAa,CAAA,eAAA,CAAA,CAAA;EAAK,CAAA,eAAC,CAAA,CAAA;EAAC,MAAZ,eAAA,YAAA,CAAA;IACU,QAAA,eAAA,WAAA,YAAA,CAAA,CAAA;IAAd,MAAA,eAAA,YAAA,CAAA;MAGR,IAAA,eAAA,YAAA,CAAA;MACA,MAAA,eAAA,UAAA,CAAA;QACE,GAAA,EAAA,KAAA;MACD,CAAA,CAAA,CAAA;IAAa,CAAA,eAAA,CAAA,CAAA;EAuBP,CAAA,eAAA,CAAA,CAAe;EAAA,MAAA,eAAA,YAAA,CAAA;IAKV,OAAA,eAAA,UAAA,CAAA;MAAf,OAAA,EAAA,SAAA;MAGG,MAAA,EAAA,QAAA;MAGA,UAAA,EAAA,YAAA;IAGE,CAAA,CAAA,CAAA;IAGD,OAAA,eAAA,YAAA,CAAA;MAAa,QAAA,UAAA;MAMP,SAAA,aAAoB;MAAA,QAAA,eAAA,YAAA,CAAA;MAAa,UAAA,eAAA,YAAA,CAAA;IAM3B,CAAA,eAAA,CAAA,CAAA;EAAY,CAAA,eANU,CAAA,CAAA;EAAI,QAAA,eAAA,YAAA,CAAA;IAYhC,EAAA,eAAA,WAAmB,CAAA,SAAA,aAAA,aAAA,CAAA;MAAA,OAAA,eAAA,YAAA,CAAA;MAGd,KAAA,eAAA,YAAA,CAAA;IAAf,CAAA,eAAA,CAAA,CAAA,CAAA,CAAA;IACI,KAAA,eAAA,WAAA,CAAA,SAAA,aAAA,aAAA,CAAA;MACF,OAAA,eAAA,YAAA,CAAA;MACA,KAAA,eAAA,YAAA,CAAA;IACC,CAAA,eAAA,CAAA,CAAA,CAAA,CAAA;IAAa,IAAA,eAAA,WAAA,CAAA,SAAA,aAAA,aAAA,CAAA;MAMN,OAAY,eAAA,YAAA,CAAA;MAAA,KAAA,eAAA,YAAA,CAAA;MAIvB,IAAA,eAAA,YAAA,CAAA;QAAY,IAAA,aAAA;QAEN,IAAA,aAAA;QAAmB,IAAA,eAAA,YAAA,CAAA;QAMf,IAAA,eAAiB,YAAA,CAAA;MAAA,CAAA,eAAA,CAAA,CAAA;IACxB,CAAA,eAAA,CAAA,CAAA,CAAA,CAAA;EAAS,CAAA,eAAG,CAAA,CAAA;EAAe,OACvB,eAAA,YAAA,CAAA;IAAe,OAAA,eAAA,aAAA,CAAA;;;;MCzQtB,MAAA,EAAA,QAAA;IAKA,CAAA,CAAA,CAAA;EAKU,CAAA,eAAA,CAAA,CAAA;AAShB,CAAA,eAAgB,CAAA;AAShB;AAoIA;;;iBAiGgB,uBAAA,mBAEb,CAAA,CAAE,aAAa;;;;iBAOF,2BAAA;;SAER,CAAA,CAAE,aAAa;UACd,CAAA,CAAE;;;;;iBAYK,sBAAA,QAA8B,CAAA,CAAE;;;ADnUhD;AAUA;AAaA;;;;;AAMmC;AAMnC;AAcA;;;;AAIiC;AAMjC;AAcA;AAUA;AAYA;AAGC;;;;;;;;;;;;;;AAkDqB;AAOtB;;;;AACsB;AAStB;AAQA;AAOA;;AAAwC,iBE9ExB,eF8EwB,CAAA,oBE9EY,UF8EZ,CAAA,CAAA,MAAA,EE7E/B,cF6E+B,CE7EhB,KF6EgB,CAAA,CAAA,EE5ErC,uBF4EqC,CE5Eb,KF4Ea,CAAA;;AAAT;AAM/B;AAA2B,iBEpDX,kBAAA,CFoDW,MAAA,EEnDlB,eFmDkB,EAAA,GAAA,EAAA,MAAA,CAAA,EEjDxB,mBFiDwB;;;;;AACN,iBENL,wBAAA,CFMK,MAAA,EELZ,SFKY,EAAA,GAAA,EAAA,MAAA,CAAA,EEHlB,mBFGkB;;AACiB;AAOtC;;AAAyC,iBE8CzB,aAAA,CF9CyB,MAAA,EE+ChC,SF/CgC,GE+CpB,eF/CoB,EAAA,GAAA,EAAA,MAAA,CAAA,EEiDtC,YFjDsC;;;;;AAK7B,iBEuEI,eAAA,CFvEJ,SAAA,EEwEA,mBFxEA,EAAA,OAAA,EAAA,MAAA,CAAA,EE0ET,SF1ES,GAAA,SAAA;;AACY;AAMxB;;AAAwC,iBE8FxB,gBAAA,CF9FwB,SAAA,EE8FI,mBF9FJ,CAAA,EAAA,MAAA,EAAA;;AAAyB;AAKjE;;AAAkD,iBEuHlC,oBAAA,CFvHkC,SAAA,EEwHtC,mBFxHsC,EAAA,OAAA,EAAA,MAAA,EAAA,SAAA,CAAA,EAAA,MAAA,CAAA,EE2H/C,MF3H+C,CAAA,MAAA,EAAA,MAAA,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"index-DEWYvYvg.d.cts","names":[],"sources":["../src/workspace/types.ts","../src/workspace/schema.ts","../src/workspace/index.ts"],"sourcesContent":[],"mappings":"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"}
1
+ {"version":3,"file":"index-DEWYvYvg.d.cts","names":[],"sources":["../src/workspace/types.ts","../src/workspace/schema.ts","../src/workspace/index.ts"],"sourcesContent":[],"mappings":";;;;;;;;AAgBA;AAKA;AAUiB,KAfL,YAAA,GAeuB,SAAQ,GAAA,QAAA,GAAA,YAAkB;AAa7D;;;AAImB,UA3BF,kBAAA,CA2BE;EAAkB;EAEF,OAAA,CAAA,EAAA,MAAA;EAMlB;EAcA,KAAA,CAAA,EAAA,MAAA;;;;AAIgB;AAMhB,UAjDA,iBAAA,SAA0B,kBAiDd,CAAA;EAcZ;EAUA,IAAA,CAAA,EAAA;IAYA,IAAA,EAAA,MAAY;IAQnB,IAAA,EAAA,MAAa;IAAA,IAAA,CAAA,EAAA,MAAA;IAWb,IAAA,CAAA,EAAA,MAAA;EAAY,CAAA;;;;;AAkBb,UA7GQ,cAAA,CA6GR;EAAW;EAE2B,EAAA,CAElB,EAAA,OAAA,GA/Gb,kBA+Ga;EAAY;EAEP,KAEvB,CAAA,EAAA,OAAA,GAjHQ,kBAiHR;EAAO;EAQI,IAAA,CAAA,EAAA,OAAA,GAvHJ,iBAuHI;AAOtB;;;;AACsB,UAzHL,sBAAA,CAyHK;EASL;EAQL,QAAA,EAAA,MAAQ;EAOR;EAAU,SAAA,EAAA,MAAA;EAAA;EAA0B,QAAvB,CAAA,EAAA,MAAA;EAAM;EAMnB,UAAA,CAAA,EAAA,MAAe;;;;;AACK,UA1If,YAAA,CA0Ie;EAAC;EAAR,OACQ,CAAA,EAzItB,YAyIsB;EAAK;EAO1B,OAAA,CAAA,EA9ID,sBA8Ie;;;;;AAGhB,UA3IO,YAAA,CA2IP;EAAY;EACA,IACV,CAAA,EAAA,MAAA;EAAc;AACF;AAMxB;;;EAAkD,MAAU,CAAA,EAAA,KAAA;AAAK;AAKjE;;;AAGc,UA9IG,YAAA,CA8IH;EAAK;EAAa,QAAC,CAAA,EAAA,MAAA,EAAA;EAAC;EAAR,MACM,CAAA,EA3ItB,YA2IsB;;;;;AAMrB,UA3IM,aAAA,CA2IN;EAAa;EAuBP,OAAA,CAAA,EAAA,OAAA;EAAe;EAAA,SAKV,CAAA,EAAA,MAAA;EAAS;EAAlB,GAGH,CAAA,EAAA,QAAA,GAAA,QAAA;;;;AASc;AAMP,UA7KA,YAAA,CA6KoB;EAAA;EAAA,MAAa,CAAA,EAAA,MAAA;;;AAAD;AAYjD;UAjLU,aAAA,CAiL0B;EAAA;EAGK,IAAlC,CAAA,EAAA,SAAA,GAAA,UAAA;EAAM;EACY,IAChB,EAAA,MAAA;EAAY;EACA,IACX,EAAA,MAAA;EAAa;EAMN,MAAA,CAAA,EAnLP,YAmLmB;EAAA;EAAA,MAIvB,CAAA,EAnLI,MAmLJ;EAAS;EAAkB,SAErB,CAAA,EAnLC,MAmLD;EAAmB;EAMf,KAAA,CAAA,EAvLP,MAuLO;EAAiB;EAAA,WACxB,CAAA,EAtLM,MAsLN;EAAS;EAAkB,SACvB,CAAA,EAAA,MAAA;EAAe;;;cAjLf;ECxFP;EAKA,KAAA,CAAA,EDqFG,WCrFH;EAKU;EASA,SAAA,CAAA,EAAA,MAAA,GAAA,OAAoB,GDyEJ,eCzEI;EASpB;EAoIH,MAAA,CAAA,EAAA,MAAA,GAAA,OA2FV,GD7J0B,YC6J1B;EAAA;EAAA,OAAA,CAAA,EAAA,OAAA,GD3JkB,aC2JlB;;YDzJQ;;;;;;WAQD;;;;;;UAOO,0DACR;;iBAEO;;;;;;UAOC,SAAA,SAAkB;;;;;;;KAQvB,QAAA,GAAW;;;;;;KAOX,UAAA,GAAa,eAAe;;;;;KAM5B,8BAA8B,4BAC7B,QAAQ,KAAK,MAAM;iCACC;;;;;KAOrB,6BAA6B;;QAElC,gBAAgB;WACb;WACA;aACE;YACD;;;;;KAMC,4BAA4B,oBAAoB;;;;KAKhD,sCAAsC;;sBAGpC,QAAQ,KAAK,MAAM;mBACf,cAAc;;WAGtB;WACA;aACE;YACD;;;;;;;;UAuBM,eAAA;;;;QAKV,eAAe;;WAGZ;;WAGA;;aAGE;;YAGD;;;;;UAMM,mBAAA,SAA4B,KAAK;;;;;;wBAM3B;;;;;UAMN,mBAAA;;;QAGV,eAAe;YACX;UACF;UACA;WACC;;;;;UAMO,YAAA;;;;OAIX,YAAY;;aAEN;;;;;iBAMI,iBAAA,SACP,YAAY,4BACR;;;;;;AAxTb,cC+CM,wBD/CkB,EAAA,SAAA,CAAA,SAAA,CAAA;AAKxB;AAUA;AAaA;cCwBM,sBDxByB,EAAA,SAAA,CAAA,QAAA,EAAA,YAAA,CAAA;;;;AAMI,iBCuBnB,uBAAA,CDvBmB,MAAA,EAAA,MAAA,CAAA,EAAA,OAAA;AAMnC;AAcA;;AAEW,iBCUK,oBAAA,CDVL,MAAA,EAAA,MAAA,CAAA,EAAA,OAAA;;AAEsB;AAMjC;AAciB,iBCHD,oBAAA,CDOM,MAAA,EAAA,MAAA,EAAA,OAAA,CAAA,EAAA,MAAA,CAAA,EAAA,MAAA;AAMtB;AAYA;AAGC;AAKsB,cCmGV,qBDnGU,ECmGW,CAAA,CAAA,SDnGX,CAAA;EAAA,IAWb,eAAA,CCmLP,CAAA,CAAA,SDnLO,CAAA;EAAY,IAIZ,aAAA,YAAA,aAAA,CAAA;IAEG,IAAA,cAAA,cAAA,UAAA,CAAA;MAEJ,OAAA,EAAA,SAAA;MAEM,QAAA,EAAA,UAAA;IAMF,CAAA,CAAA,CAAA,CAAA;IAEJ,IAAA,aAAA;IAEuB,IAAA,aAAA;IAEH,YAAA,eAAA,WAAA,YAAA,CAAA,CAAA;IAER,MAAA,eAAA,UAAA,CAAA;MAEV,OAAA,EAAA,SAAA;MAQD,MAAA,EAAA,QAAA;MAAY,UAAA,EAAA,YAAA;IAOL,CAAA,CAAA,CAAA;IAAc,MAAA,eAAA,WAAA,CAAA,SAAA,YAAA,YAAA,YAAA,CAAA,CAAA,CAAA,CAAA;IAGf,SAAA,eAAA,WAAA,CAAA,SAAA,YAAA,YAAA,YAAA,CAAA,CAAA,CAAA,CAAA;IAFP,KAAA,eAAA,WAAA,CAAA,SAAA,YAAA,YAAA,YAAA,CAAA,CAAA,CAAA,CAAA;IAAa,WAAA,eAAA,WAAA,CAAA,SAAA,YAAA,YAAA,YAAA,CAAA,CAAA,CAAA,CAAA;IASL,SAAU,eAAQ,YAAa,CAAA;IAQpC,MAAA,eAAW,YAAa,CAAA;IAOxB,KAAA,eAAU,YAAA,CAAA;MAAA,MAAA,eAAA,YAAA,CAAA;IAAkB,CAAA,eAAA,CAAA,CAAA;IAAf,SAAA,eAAA,WAAA,CAAA,SAAA,YAAA,cAAA,aAAA,CAAA;MAAM,OAAA,eAAA,aAAA,CAAA;MAMnB,IAAA,eAAe,YAAA,CAAA;MAAA,IAAA,eAAA,YAAA,CAAA;MAAe,MAAA,eAAA,WAAA,YAAA,CAAA,CAAA;MAC7B,UAAA,eAAA,aAAA,CAAA;MAAa,UAAA,eAAA,YAAA,CAAA;MAAM,SAAA,eAAA,aAAA,CAAA;IAAX,CAAA,eAAA,CAAA,CAAA,CAAA,CAAA;IACY,MAAA,eAAA,WAAA,CAAA,SAAA,YAAA,cAAA,aAAA,CAAA;MAAK,OAAA,eAAA,aAAA,CAAA;MAO1B,IAAA,eAAc,YAAA,CAAA;MAAA,MAAA,eAAA,YAAA,CAAA;IAAe,CAAA,eAAA,CAAA,CAAA,CAAA,CAAA;IAElB,OAAA,eAAA,WAAA,CAAA,SAAA,aAAA,aAAA,CAAA;MAAhB,OAAA,eAAA,aAAA,CAAA;MACG,KAAA,eAAA,YAAA,CAAA;MACA,OAAA,eAAA,YAAA,CAAA;MACE,WAAA,eAAA,YAAA,CAAA;IACD,CAAA,eAAA,CAAA,CAAA,CAAA,CAAA;IAAa,OAAA,eAAA,UAAA,CAAA;MAMZ,IAAA,EAAA,MAAa;MAAA,GAAA,EAAA,KAAA;IAAe,CAAA,CAAA,CAAA;IAAoB,GAAA,eAAA,WAAA,CAAA,SAAA,YAAA,YAAA,YAAA,CAAA,CAAA,CAAA,CAAA;IAAK,SAAA,eAAA,UAAA,CAAA;MAKrD,MAAA,EAAA,QAAA;IAAuB,CAAA,CAAA,CAAA;IAAe,MAAA,eAAA,YAAA,CAAA;MAGpC,MAAA,eAAA,YAAA,CAAA;IAAa,CAAA,eAAA,CAAA,CAAA;EAAK,CAAA,eAAC,CAAA,CAAA;EAAC,MAAZ,eAAA,YAAA,CAAA;IACU,QAAA,eAAA,WAAA,YAAA,CAAA,CAAA;IAAd,MAAA,eAAA,YAAA,CAAA;MAGR,IAAA,eAAA,YAAA,CAAA;MACA,MAAA,eAAA,UAAA,CAAA;QACE,GAAA,EAAA,KAAA;MACD,CAAA,CAAA,CAAA;IAAa,CAAA,eAAA,CAAA,CAAA;EAuBP,CAAA,eAAA,CAAA,CAAe;EAAA,MAAA,eAAA,YAAA,CAAA;IAKV,OAAA,eAAA,UAAA,CAAA;MAAf,OAAA,EAAA,SAAA;MAGG,MAAA,EAAA,QAAA;MAGA,UAAA,EAAA,YAAA;IAGE,CAAA,CAAA,CAAA;IAGD,OAAA,eAAA,YAAA,CAAA;MAAa,QAAA,UAAA;MAMP,SAAA,aAAoB;MAAA,QAAA,eAAA,YAAA,CAAA;MAAa,UAAA,eAAA,YAAA,CAAA;IAM3B,CAAA,eAAA,CAAA,CAAA;EAAY,CAAA,eANU,CAAA,CAAA;EAAI,QAAA,eAAA,YAAA,CAAA;IAYhC,EAAA,eAAA,WAAmB,CAAA,SAAA,aAAA,aAAA,CAAA;MAAA,OAAA,eAAA,YAAA,CAAA;MAGd,KAAA,eAAA,YAAA,CAAA;IAAf,CAAA,eAAA,CAAA,CAAA,CAAA,CAAA;IACI,KAAA,eAAA,WAAA,CAAA,SAAA,aAAA,aAAA,CAAA;MACF,OAAA,eAAA,YAAA,CAAA;MACA,KAAA,eAAA,YAAA,CAAA;IACC,CAAA,eAAA,CAAA,CAAA,CAAA,CAAA;IAAa,IAAA,eAAA,WAAA,CAAA,SAAA,aAAA,aAAA,CAAA;MAMN,OAAY,eAAA,YAAA,CAAA;MAAA,KAAA,eAAA,YAAA,CAAA;MAIvB,IAAA,eAAA,YAAA,CAAA;QAAY,IAAA,aAAA;QAEN,IAAA,aAAA;QAAmB,IAAA,eAAA,YAAA,CAAA;QAMf,IAAA,eAAiB,YAAA,CAAA;MAAA,CAAA,eAAA,CAAA,CAAA;IACxB,CAAA,eAAA,CAAA,CAAA,CAAA,CAAA;EAAS,CAAA,eAAG,CAAA,CAAA;EAAe,OACvB,eAAA,YAAA,CAAA;IAAe,OAAA,eAAA,aAAA,CAAA;;;;MCzQtB,MAAA,EAAA,QAAA;IAKA,CAAA,CAAA,CAAA;EAKU,CAAA,eAAA,CAAA,CAAA;AAShB,CAAA,eAAgB,CAAA;AAShB;AAoIA;;;iBAiGgB,uBAAA,mBAEb,CAAA,CAAE,aAAa;;;;iBAOF,2BAAA;;SAER,CAAA,CAAE,aAAa;UACd,CAAA,CAAE;;;;;iBAYK,sBAAA,QAA8B,CAAA,CAAE;;;ADnUhD;AAUA;AAaA;;;;;AAMmC;AAMnC;AAcA;;;;AAIiC;AAMjC;AAcA;AAUA;AAYA;AAGC;;;;;;;;;;;;;;AAkDqB;AAOtB;;;;AACsB;AAStB;AAQA;AAOA;;AAAwC,iBE9ExB,eF8EwB,CAAA,oBE9EY,UF8EZ,CAAA,CAAA,MAAA,EE7E/B,cF6E+B,CE7EhB,KF6EgB,CAAA,CAAA,EE5ErC,uBF4EqC,CE5Eb,KF4Ea,CAAA;;AAAT;AAM/B;AAA2B,iBEpDX,kBAAA,CFoDW,MAAA,EEnDlB,eFmDkB,EAAA,GAAA,EAAA,MAAA,CAAA,EEjDxB,mBFiDwB;;;;;AACN,iBENL,wBAAA,CFMK,MAAA,EELZ,SFKY,EAAA,GAAA,EAAA,MAAA,CAAA,EEHlB,mBFGkB;;AACiB;AAOtC;;AAAyC,iBE8CzB,aAAA,CF9CyB,MAAA,EE+ChC,SF/CgC,GE+CpB,eF/CoB,EAAA,GAAA,EAAA,MAAA,CAAA,EEiDtC,YFjDsC;;;;;AAK7B,iBEuEI,eAAA,CFvEJ,SAAA,EEwEA,mBFxEA,EAAA,OAAA,EAAA,MAAA,CAAA,EE0ET,SF1ES,GAAA,SAAA;;AACY;AAMxB;;AAAwC,iBE8FxB,gBAAA,CF9FwB,SAAA,EE8FI,mBF9FJ,CAAA,EAAA,MAAA,EAAA;;AAAyB;AAKjE;;AAAkD,iBEuHlC,oBAAA,CFvHkC,SAAA,EEwHtC,mBFxHsC,EAAA,OAAA,EAAA,MAAA,EAAA,SAAA,CAAA,EAAA,MAAA,CAAA,EE2H/C,MF3H+C,CAAA,MAAA,EAAA,MAAA,CAAA"}
package/dist/index.cjs CHANGED
@@ -1,8 +1,8 @@
1
1
  #!/usr/bin/env -S npx tsx
2
2
  const require_chunk = require('./chunk-CUT6urMc.cjs');
3
- const require_workspace = require('./workspace-iWgBlX6h.cjs');
4
- const require_config = require('./config-CTftATBX.cjs');
5
- const require_openapi = require('./openapi-BrhkPKM7.cjs');
3
+ const require_workspace = require('./workspace-CiZBOjf9.cjs');
4
+ const require_config = require('./config-BhryDQEq.cjs');
5
+ const require_openapi = require('./openapi-D82bBqG7.cjs');
6
6
  const require_storage = require('./storage-BPRgh3DU.cjs');
7
7
  const require_dokploy_api = require('./dokploy-api-C5czOZoc.cjs');
8
8
  const require_openapi_react_query = require('./openapi-react-query-DvNpdDpM.cjs');
@@ -27,7 +27,7 @@ const node_module = require_chunk.__toESM(require("node:module"));
27
27
 
28
28
  //#region package.json
29
29
  var name = "@geekmidas/cli";
30
- var version = "0.25.0";
30
+ var version = "0.27.0";
31
31
  var description = "CLI tools for building Lambda handlers, server applications, and generating OpenAPI specs";
32
32
  var private$1 = false;
33
33
  var type = "module";
@@ -4293,7 +4293,7 @@ const GEEKMIDAS_VERSIONS = {
4293
4293
  "@geekmidas/services": "~0.2.0",
4294
4294
  "@geekmidas/storage": "~0.1.0",
4295
4295
  "@geekmidas/studio": "~0.4.0",
4296
- "@geekmidas/telescope": "~0.4.0",
4296
+ "@geekmidas/telescope": "~0.5.0",
4297
4297
  "@geekmidas/testkit": "~0.6.0"
4298
4298
  };
4299
4299
 
@@ -4975,25 +4975,25 @@ function generateModelsPackage(options) {
4975
4975
  include: ["src/**/*.ts"],
4976
4976
  exclude: ["node_modules", "dist"]
4977
4977
  };
4978
- const indexTs = `import { z } from 'zod';
4978
+ const commonTs = `import { z } from 'zod';
4979
4979
 
4980
4980
  // ============================================
4981
4981
  // Common Schemas
4982
4982
  // ============================================
4983
4983
 
4984
- export const idSchema = z.string().uuid();
4984
+ export const IdSchema = z.string().uuid();
4985
4985
 
4986
- export const timestampsSchema = z.object({
4986
+ export const TimestampsSchema = z.object({
4987
4987
  createdAt: z.coerce.date(),
4988
4988
  updatedAt: z.coerce.date(),
4989
4989
  });
4990
4990
 
4991
- export const paginationSchema = z.object({
4991
+ export const PaginationSchema = z.object({
4992
4992
  page: z.coerce.number().int().positive().default(1),
4993
4993
  limit: z.coerce.number().int().positive().max(100).default(20),
4994
4994
  });
4995
4995
 
4996
- export const paginatedResponseSchema = <T extends z.ZodTypeAny>(itemSchema: T) =>
4996
+ export const PaginatedResponseSchema = <T extends z.ZodTypeAny>(itemSchema: T) =>
4997
4997
  z.object({
4998
4998
  items: z.array(itemSchema),
4999
4999
  total: z.number(),
@@ -5002,35 +5002,59 @@ export const paginatedResponseSchema = <T extends z.ZodTypeAny>(itemSchema: T) =
5002
5002
  totalPages: z.number(),
5003
5003
  });
5004
5004
 
5005
+ // ============================================
5006
+ // Type Exports
5007
+ // ============================================
5008
+
5009
+ export type Id = z.infer<typeof IdSchema>;
5010
+ export type Timestamps = z.infer<typeof TimestampsSchema>;
5011
+ export type Pagination = z.infer<typeof PaginationSchema>;
5012
+ `;
5013
+ const userTs = `import { z } from 'zod';
5014
+ import { IdSchema, TimestampsSchema } from './common.js';
5015
+
5005
5016
  // ============================================
5006
5017
  // User Schemas
5007
5018
  // ============================================
5008
5019
 
5009
- export const userSchema = z.object({
5010
- id: idSchema,
5020
+ export const UserSchema = z.object({
5021
+ id: IdSchema,
5011
5022
  email: z.string().email(),
5012
5023
  name: z.string().min(1).max(100),
5013
- ...timestampsSchema.shape,
5024
+ ...TimestampsSchema.shape,
5014
5025
  });
5015
5026
 
5016
- export const createUserSchema = userSchema.omit({
5027
+ export const CreateUserSchema = UserSchema.omit({
5017
5028
  id: true,
5018
5029
  createdAt: true,
5019
5030
  updatedAt: true,
5020
5031
  });
5021
5032
 
5022
- export const updateUserSchema = createUserSchema.partial();
5033
+ export const UpdateUserSchema = CreateUserSchema.partial();
5034
+
5035
+ // ============================================
5036
+ // Response Schemas
5037
+ // ============================================
5038
+
5039
+ export const UserResponseSchema = UserSchema.pick({
5040
+ id: true,
5041
+ name: true,
5042
+ email: true,
5043
+ });
5044
+
5045
+ export const ListUsersResponseSchema = z.object({
5046
+ users: z.array(UserSchema.pick({ id: true, name: true })),
5047
+ });
5023
5048
 
5024
5049
  // ============================================
5025
5050
  // Type Exports
5026
5051
  // ============================================
5027
5052
 
5028
- export type Id = z.infer<typeof idSchema>;
5029
- export type Timestamps = z.infer<typeof timestampsSchema>;
5030
- export type Pagination = z.infer<typeof paginationSchema>;
5031
- export type User = z.infer<typeof userSchema>;
5032
- export type CreateUser = z.infer<typeof createUserSchema>;
5033
- export type UpdateUser = z.infer<typeof updateUserSchema>;
5053
+ export type User = z.infer<typeof UserSchema>;
5054
+ export type CreateUser = z.infer<typeof CreateUserSchema>;
5055
+ export type UpdateUser = z.infer<typeof UpdateUserSchema>;
5056
+ export type UserResponse = z.infer<typeof UserResponseSchema>;
5057
+ export type ListUsersResponse = z.infer<typeof ListUsersResponseSchema>;
5034
5058
  `;
5035
5059
  return [
5036
5060
  {
@@ -5042,8 +5066,12 @@ export type UpdateUser = z.infer<typeof updateUserSchema>;
5042
5066
  content: `${JSON.stringify(tsConfig, null, 2)}\n`
5043
5067
  },
5044
5068
  {
5045
- path: "packages/models/src/index.ts",
5046
- content: indexTs
5069
+ path: "packages/models/src/common.ts",
5070
+ content: commonTs
5071
+ },
5072
+ {
5073
+ path: "packages/models/src/user.ts",
5074
+ content: userTs
5047
5075
  }
5048
5076
  ];
5049
5077
  }
@@ -5343,10 +5371,13 @@ const apiTemplate = {
5343
5371
  name: "api",
5344
5372
  description: "Full API with auth, database, services",
5345
5373
  dependencies: {
5374
+ "@geekmidas/audit": GEEKMIDAS_VERSIONS["@geekmidas/audit"],
5346
5375
  "@geekmidas/constructs": GEEKMIDAS_VERSIONS["@geekmidas/constructs"],
5347
5376
  "@geekmidas/envkit": GEEKMIDAS_VERSIONS["@geekmidas/envkit"],
5348
5377
  "@geekmidas/events": GEEKMIDAS_VERSIONS["@geekmidas/events"],
5349
5378
  "@geekmidas/logger": GEEKMIDAS_VERSIONS["@geekmidas/logger"],
5379
+ "@geekmidas/rate-limit": GEEKMIDAS_VERSIONS["@geekmidas/rate-limit"],
5380
+ "@geekmidas/schema": GEEKMIDAS_VERSIONS["@geekmidas/schema"],
5350
5381
  "@geekmidas/services": GEEKMIDAS_VERSIONS["@geekmidas/services"],
5351
5382
  "@geekmidas/errors": GEEKMIDAS_VERSIONS["@geekmidas/errors"],
5352
5383
  "@geekmidas/auth": GEEKMIDAS_VERSIONS["@geekmidas/auth"],
@@ -5374,11 +5405,12 @@ const apiTemplate = {
5374
5405
  "fmt:check": "biome format ."
5375
5406
  },
5376
5407
  files: (options) => {
5377
- const { loggerType, routesStructure } = options;
5408
+ const { loggerType, routesStructure, monorepo, name: name$1 } = options;
5378
5409
  const loggerContent = `import { createLogger } from '@geekmidas/logger/${loggerType}';
5379
5410
 
5380
5411
  export const logger = createLogger();
5381
5412
  `;
5413
+ const modelsImport = monorepo ? `@${name$1}/models` : null;
5382
5414
  const getRoutePath = (file) => {
5383
5415
  switch (routesStructure) {
5384
5416
  case "centralized-endpoints": return `src/endpoints/${file}`;
@@ -5415,9 +5447,14 @@ export const config = envParser
5415
5447
  {
5416
5448
  path: getRoutePath("health.ts"),
5417
5449
  content: `import { e } from '@geekmidas/constructs/endpoints';
5450
+ import { z } from 'zod';
5418
5451
 
5419
5452
  export const healthEndpoint = e
5420
5453
  .get('/health')
5454
+ .output(z.object({
5455
+ status: z.string(),
5456
+ timestamp: z.string(),
5457
+ }))
5421
5458
  .handle(async () => ({
5422
5459
  status: 'ok',
5423
5460
  timestamp: new Date().toISOString(),
@@ -5426,10 +5463,31 @@ export const healthEndpoint = e
5426
5463
  },
5427
5464
  {
5428
5465
  path: getRoutePath("users/list.ts"),
5429
- content: `import { e } from '@geekmidas/constructs/endpoints';
5466
+ content: modelsImport ? `import { e } from '@geekmidas/constructs/endpoints';
5467
+ import { ListUsersResponseSchema } from '${modelsImport}/user';
5468
+
5469
+ export const listUsersEndpoint = e
5470
+ .get('/users')
5471
+ .output(ListUsersResponseSchema)
5472
+ .handle(async () => ({
5473
+ users: [
5474
+ { id: '1', name: 'Alice' },
5475
+ { id: '2', name: 'Bob' },
5476
+ ],
5477
+ }));
5478
+ ` : `import { e } from '@geekmidas/constructs/endpoints';
5479
+ import { z } from 'zod';
5480
+
5481
+ const UserSchema = z.object({
5482
+ id: z.string(),
5483
+ name: z.string(),
5484
+ });
5430
5485
 
5431
5486
  export const listUsersEndpoint = e
5432
5487
  .get('/users')
5488
+ .output(z.object({
5489
+ users: z.array(UserSchema),
5490
+ }))
5433
5491
  .handle(async () => ({
5434
5492
  users: [
5435
5493
  { id: '1', name: 'Alice' },
@@ -5440,12 +5498,30 @@ export const listUsersEndpoint = e
5440
5498
  },
5441
5499
  {
5442
5500
  path: getRoutePath("users/get.ts"),
5443
- content: `import { e } from '@geekmidas/constructs/endpoints';
5501
+ content: modelsImport ? `import { e } from '@geekmidas/constructs/endpoints';
5444
5502
  import { z } from 'zod';
5503
+ import { UserResponseSchema } from '${modelsImport}/user';
5445
5504
 
5446
5505
  export const getUserEndpoint = e
5447
5506
  .get('/users/:id')
5448
5507
  .params(z.object({ id: z.string() }))
5508
+ .output(UserResponseSchema)
5509
+ .handle(async ({ params }) => ({
5510
+ id: params.id,
5511
+ name: 'Alice',
5512
+ email: 'alice@example.com',
5513
+ }));
5514
+ ` : `import { e } from '@geekmidas/constructs/endpoints';
5515
+ import { z } from 'zod';
5516
+
5517
+ export const getUserEndpoint = e
5518
+ .get('/users/:id')
5519
+ .params(z.object({ id: z.string() }))
5520
+ .output(z.object({
5521
+ id: z.string(),
5522
+ name: z.string(),
5523
+ email: z.string().email(),
5524
+ }))
5449
5525
  .handle(async ({ params }) => ({
5450
5526
  id: params.id,
5451
5527
  name: 'Alice',
@@ -5549,9 +5625,12 @@ const minimalTemplate = {
5549
5625
  name: "minimal",
5550
5626
  description: "Basic health endpoint",
5551
5627
  dependencies: {
5628
+ "@geekmidas/audit": GEEKMIDAS_VERSIONS["@geekmidas/audit"],
5552
5629
  "@geekmidas/constructs": GEEKMIDAS_VERSIONS["@geekmidas/constructs"],
5553
5630
  "@geekmidas/envkit": GEEKMIDAS_VERSIONS["@geekmidas/envkit"],
5554
5631
  "@geekmidas/logger": GEEKMIDAS_VERSIONS["@geekmidas/logger"],
5632
+ "@geekmidas/rate-limit": GEEKMIDAS_VERSIONS["@geekmidas/rate-limit"],
5633
+ "@geekmidas/schema": GEEKMIDAS_VERSIONS["@geekmidas/schema"],
5555
5634
  "@hono/node-server": "~1.14.1",
5556
5635
  hono: "~4.8.2",
5557
5636
  pino: "~9.6.0"
@@ -5613,9 +5692,14 @@ export const config = envParser
5613
5692
  {
5614
5693
  path: getRoutePath("health.ts"),
5615
5694
  content: `import { e } from '@geekmidas/constructs/endpoints';
5695
+ import { z } from 'zod';
5616
5696
 
5617
5697
  export const healthEndpoint = e
5618
5698
  .get('/health')
5699
+ .output(z.object({
5700
+ status: z.string(),
5701
+ timestamp: z.string(),
5702
+ }))
5619
5703
  .handle(async () => ({
5620
5704
  status: 'ok',
5621
5705
  timestamp: new Date().toISOString(),
@@ -5713,10 +5797,13 @@ const serverlessTemplate = {
5713
5797
  name: "serverless",
5714
5798
  description: "AWS Lambda handlers",
5715
5799
  dependencies: {
5800
+ "@geekmidas/audit": GEEKMIDAS_VERSIONS["@geekmidas/audit"],
5716
5801
  "@geekmidas/constructs": GEEKMIDAS_VERSIONS["@geekmidas/constructs"],
5717
5802
  "@geekmidas/envkit": GEEKMIDAS_VERSIONS["@geekmidas/envkit"],
5718
5803
  "@geekmidas/logger": GEEKMIDAS_VERSIONS["@geekmidas/logger"],
5719
5804
  "@geekmidas/cloud": GEEKMIDAS_VERSIONS["@geekmidas/cloud"],
5805
+ "@geekmidas/rate-limit": GEEKMIDAS_VERSIONS["@geekmidas/rate-limit"],
5806
+ "@geekmidas/schema": GEEKMIDAS_VERSIONS["@geekmidas/schema"],
5720
5807
  "@hono/node-server": "~1.14.1",
5721
5808
  hono: "~4.8.2",
5722
5809
  pino: "~9.6.0"
@@ -5779,9 +5866,15 @@ export const config = envParser
5779
5866
  {
5780
5867
  path: getRoutePath("health.ts"),
5781
5868
  content: `import { e } from '@geekmidas/constructs/endpoints';
5869
+ import { z } from 'zod';
5782
5870
 
5783
5871
  export const healthEndpoint = e
5784
5872
  .get('/health')
5873
+ .output(z.object({
5874
+ status: z.string(),
5875
+ timestamp: z.string(),
5876
+ region: z.string(),
5877
+ }))
5785
5878
  .handle(async () => ({
5786
5879
  status: 'ok',
5787
5880
  timestamp: new Date().toISOString(),
@@ -5825,10 +5918,13 @@ const workerTemplate = {
5825
5918
  name: "worker",
5826
5919
  description: "Background job processing",
5827
5920
  dependencies: {
5921
+ "@geekmidas/audit": GEEKMIDAS_VERSIONS["@geekmidas/audit"],
5828
5922
  "@geekmidas/constructs": GEEKMIDAS_VERSIONS["@geekmidas/constructs"],
5829
5923
  "@geekmidas/envkit": GEEKMIDAS_VERSIONS["@geekmidas/envkit"],
5830
- "@geekmidas/logger": GEEKMIDAS_VERSIONS["@geekmidas/logger"],
5831
5924
  "@geekmidas/events": GEEKMIDAS_VERSIONS["@geekmidas/events"],
5925
+ "@geekmidas/logger": GEEKMIDAS_VERSIONS["@geekmidas/logger"],
5926
+ "@geekmidas/rate-limit": GEEKMIDAS_VERSIONS["@geekmidas/rate-limit"],
5927
+ "@geekmidas/schema": GEEKMIDAS_VERSIONS["@geekmidas/schema"],
5832
5928
  "@hono/node-server": "~1.14.1",
5833
5929
  hono: "~4.8.2",
5834
5930
  pino: "~9.6.0"
@@ -5890,9 +5986,14 @@ export const config = envParser
5890
5986
  {
5891
5987
  path: getRoutePath("health.ts"),
5892
5988
  content: `import { e } from '@geekmidas/constructs/endpoints';
5989
+ import { z } from 'zod';
5893
5990
 
5894
5991
  export const healthEndpoint = e
5895
5992
  .get('/health')
5993
+ .output(z.object({
5994
+ status: z.string(),
5995
+ timestamp: z.string(),
5996
+ }))
5896
5997
  .handle(async () => ({
5897
5998
  status: 'ok',
5898
5999
  timestamp: new Date().toISOString(),