@geekmidas/cli 0.29.0 → 0.31.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.
- package/dist/{config-BhryDQEq.cjs → config-BAE9LFC1.cjs} +2 -2
- package/dist/{config-BhryDQEq.cjs.map → config-BAE9LFC1.cjs.map} +1 -1
- package/dist/{config-C9bdq0l-.mjs → config-BC5n1a2D.mjs} +2 -2
- package/dist/{config-C9bdq0l-.mjs.map → config-BC5n1a2D.mjs.map} +1 -1
- package/dist/config.cjs +2 -2
- package/dist/config.d.cts +1 -1
- package/dist/config.d.mts +1 -1
- package/dist/config.mjs +2 -2
- package/dist/{index-CWN-bgrO.d.mts → index-C7TkoYmt.d.mts} +5 -1
- package/dist/index-C7TkoYmt.d.mts.map +1 -0
- package/dist/{index-DEWYvYvg.d.cts → index-CpchsC9w.d.cts} +5 -1
- package/dist/index-CpchsC9w.d.cts.map +1 -0
- package/dist/index.cjs +58 -9
- package/dist/index.cjs.map +1 -1
- package/dist/index.mjs +58 -9
- package/dist/index.mjs.map +1 -1
- package/dist/{openapi-BCEFhkLh.mjs → openapi-CjYeF-Tg.mjs} +2 -2
- package/dist/{openapi-BCEFhkLh.mjs.map → openapi-CjYeF-Tg.mjs.map} +1 -1
- package/dist/{openapi-D82bBqG7.cjs → openapi-a-e3Y8WA.cjs} +2 -2
- package/dist/{openapi-D82bBqG7.cjs.map → openapi-a-e3Y8WA.cjs.map} +1 -1
- package/dist/openapi.cjs +3 -3
- package/dist/openapi.mjs +3 -3
- package/dist/workspace/index.cjs +1 -1
- package/dist/workspace/index.d.cts +1 -1
- package/dist/workspace/index.d.mts +1 -1
- package/dist/workspace/index.mjs +1 -1
- package/dist/{workspace-DQjmv9lk.mjs → workspace-DFJ3sWfY.mjs} +19 -3
- package/dist/{workspace-DQjmv9lk.mjs.map → workspace-DFJ3sWfY.mjs.map} +1 -1
- package/dist/{workspace-CiZBOjf9.cjs → workspace-My0A4IRO.cjs} +19 -3
- package/dist/{workspace-CiZBOjf9.cjs.map → workspace-My0A4IRO.cjs.map} +1 -1
- package/package.json +4 -4
- package/src/dev/__tests__/entry.spec.ts +140 -0
- package/src/dev/__tests__/index.spec.ts +223 -0
- package/src/dev/index.ts +329 -5
- package/src/index.ts +30 -16
- package/src/init/__tests__/generators.spec.ts +17 -9
- package/src/init/versions.ts +1 -1
- package/src/workspace/__tests__/schema.spec.ts +114 -0
- package/src/workspace/schema.ts +23 -1
- package/tsconfig.tsbuildinfo +1 -1
- package/dist/index-CWN-bgrO.d.mts.map +0 -1
- package/dist/index-DEWYvYvg.d.cts.map +0 -1
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
const require_chunk = require('./chunk-CUT6urMc.cjs');
|
|
2
|
-
const require_workspace = require('./workspace-
|
|
2
|
+
const require_workspace = require('./workspace-My0A4IRO.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-
|
|
225
|
+
//# sourceMappingURL=config-BAE9LFC1.cjs.map
|
|
@@ -1 +1 @@
|
|
|
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
|
+
{"version":3,"file":"config-BAE9LFC1.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-
|
|
1
|
+
import { getAppGkmConfig, isWorkspaceConfig, processConfig } from "./workspace-DFJ3sWfY.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-
|
|
189
|
+
//# sourceMappingURL=config-BC5n1a2D.mjs.map
|
|
@@ -1 +1 @@
|
|
|
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":"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"}
|
|
1
|
+
{"version":3,"file":"config-BC5n1a2D.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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"}
|
package/dist/config.cjs
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
const require_workspace = require('./workspace-
|
|
2
|
-
const require_config = require('./config-
|
|
1
|
+
const require_workspace = require('./workspace-My0A4IRO.cjs');
|
|
2
|
+
const require_config = require('./config-BAE9LFC1.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
1
|
import { GkmConfig } from "./types-l53qUmGt.cjs";
|
|
2
|
-
import { LoadedConfig, NormalizedAppConfig, NormalizedWorkspace, WorkspaceConfig, defineWorkspace } from "./index-
|
|
2
|
+
import { LoadedConfig, NormalizedAppConfig, NormalizedWorkspace, WorkspaceConfig, defineWorkspace } from "./index-CpchsC9w.cjs";
|
|
3
3
|
|
|
4
4
|
//#region src/config.d.ts
|
|
5
5
|
|
package/dist/config.d.mts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { GkmConfig } from "./types-K2uQJ-FO.mjs";
|
|
2
|
-
import { LoadedConfig, NormalizedAppConfig, NormalizedWorkspace, WorkspaceConfig, defineWorkspace } from "./index-
|
|
2
|
+
import { LoadedConfig, NormalizedAppConfig, NormalizedWorkspace, WorkspaceConfig, defineWorkspace } from "./index-C7TkoYmt.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-
|
|
2
|
-
import { defineConfig, getAppNameFromCwd, loadAppConfig, loadConfig, loadWorkspaceConfig, parseModuleConfig } from "./config-
|
|
1
|
+
import { defineWorkspace } from "./workspace-DFJ3sWfY.mjs";
|
|
2
|
+
import { defineConfig, getAppNameFromCwd, loadAppConfig, loadConfig, loadWorkspaceConfig, parseModuleConfig } from "./config-BC5n1a2D.mjs";
|
|
3
3
|
|
|
4
4
|
export { defineConfig, defineWorkspace, getAppNameFromCwd, loadAppConfig, loadConfig, loadWorkspaceConfig, parseModuleConfig };
|
|
@@ -296,6 +296,7 @@ declare const WorkspaceConfigSchema: z.ZodObject<{
|
|
|
296
296
|
type: z.ZodDefault<z.ZodOptional<z.ZodEnum<{
|
|
297
297
|
backend: "backend";
|
|
298
298
|
frontend: "frontend";
|
|
299
|
+
auth: "auth";
|
|
299
300
|
}>>>;
|
|
300
301
|
path: z.ZodString;
|
|
301
302
|
port: z.ZodNumber;
|
|
@@ -345,6 +346,9 @@ declare const WorkspaceConfigSchema: z.ZodObject<{
|
|
|
345
346
|
client: z.ZodOptional<z.ZodObject<{
|
|
346
347
|
output: z.ZodOptional<z.ZodString>;
|
|
347
348
|
}, z.core.$strip>>;
|
|
349
|
+
provider: z.ZodOptional<z.ZodEnum<{
|
|
350
|
+
"better-auth": "better-auth";
|
|
351
|
+
}>>;
|
|
348
352
|
}, z.core.$strip>>;
|
|
349
353
|
shared: z.ZodOptional<z.ZodObject<{
|
|
350
354
|
packages: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
@@ -492,4 +496,4 @@ declare function getDependencyEnvVars(workspace: NormalizedWorkspace, appName: s
|
|
|
492
496
|
|
|
493
497
|
//#endregion
|
|
494
498
|
export { AppConfig, AppConfigInput, AppInput, AppsRecord, ClientConfig, ConstrainedApps, DeployConfig, DeployTarget, DokployWorkspaceConfig, 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, isDeployTargetSupported, isPhase2DeployTarget, isWorkspaceConfig, normalizeWorkspace, processConfig, safeValidateWorkspaceConfig, validateWorkspaceConfig, wrapSingleAppAsWorkspace };
|
|
495
|
-
//# sourceMappingURL=index-
|
|
499
|
+
//# sourceMappingURL=index-C7TkoYmt.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index-C7TkoYmt.d.mts","names":[],"sources":["../src/workspace/types.ts","../src/workspace/schema.ts","../src/workspace/index.ts"],"sourcesContent":[],"mappings":"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"}
|
|
@@ -296,6 +296,7 @@ declare const WorkspaceConfigSchema: z.ZodObject<{
|
|
|
296
296
|
type: z.ZodDefault<z.ZodOptional<z.ZodEnum<{
|
|
297
297
|
backend: "backend";
|
|
298
298
|
frontend: "frontend";
|
|
299
|
+
auth: "auth";
|
|
299
300
|
}>>>;
|
|
300
301
|
path: z.ZodString;
|
|
301
302
|
port: z.ZodNumber;
|
|
@@ -345,6 +346,9 @@ declare const WorkspaceConfigSchema: z.ZodObject<{
|
|
|
345
346
|
client: z.ZodOptional<z.ZodObject<{
|
|
346
347
|
output: z.ZodOptional<z.ZodString>;
|
|
347
348
|
}, z.core.$strip>>;
|
|
349
|
+
provider: z.ZodOptional<z.ZodEnum<{
|
|
350
|
+
"better-auth": "better-auth";
|
|
351
|
+
}>>;
|
|
348
352
|
}, z.core.$strip>>;
|
|
349
353
|
shared: z.ZodOptional<z.ZodObject<{
|
|
350
354
|
packages: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
@@ -492,4 +496,4 @@ declare function getDependencyEnvVars(workspace: NormalizedWorkspace, appName: s
|
|
|
492
496
|
|
|
493
497
|
//#endregion
|
|
494
498
|
export { AppConfig, AppConfigInput, AppInput, AppsRecord, ClientConfig, ConstrainedApps, DeployConfig, DeployTarget, DokployWorkspaceConfig, 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, isDeployTargetSupported, isPhase2DeployTarget, isWorkspaceConfig, normalizeWorkspace, processConfig, safeValidateWorkspaceConfig, validateWorkspaceConfig, wrapSingleAppAsWorkspace };
|
|
495
|
-
//# sourceMappingURL=index-
|
|
499
|
+
//# sourceMappingURL=index-CpchsC9w.d.cts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index-CpchsC9w.d.cts","names":[],"sources":["../src/workspace/types.ts","../src/workspace/schema.ts","../src/workspace/index.ts"],"sourcesContent":[],"mappings":"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"}
|
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-
|
|
4
|
-
const require_config = require('./config-
|
|
5
|
-
const require_openapi = require('./openapi-
|
|
3
|
+
const require_workspace = require('./workspace-My0A4IRO.cjs');
|
|
4
|
+
const require_config = require('./config-BAE9LFC1.cjs');
|
|
5
|
+
const require_openapi = require('./openapi-a-e3Y8WA.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.
|
|
30
|
+
var version = "0.30.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";
|
|
@@ -1017,10 +1017,14 @@ async function devCommand(options) {
|
|
|
1017
1017
|
const appName = require_config.getAppNameFromCwd();
|
|
1018
1018
|
let config;
|
|
1019
1019
|
let appRoot = process.cwd();
|
|
1020
|
+
let secretsRoot = process.cwd();
|
|
1021
|
+
let workspaceAppName;
|
|
1020
1022
|
if (appName) try {
|
|
1021
1023
|
const appConfig = await require_config.loadAppConfig();
|
|
1022
1024
|
config = appConfig.gkmConfig;
|
|
1023
1025
|
appRoot = appConfig.appRoot;
|
|
1026
|
+
secretsRoot = appConfig.workspaceRoot;
|
|
1027
|
+
workspaceAppName = appConfig.appName;
|
|
1024
1028
|
logger$8.log(`📦 Running app: ${appConfig.appName}`);
|
|
1025
1029
|
} catch {
|
|
1026
1030
|
const loadedConfig = await require_config.loadWorkspaceConfig();
|
|
@@ -1073,7 +1077,16 @@ async function devCommand(options) {
|
|
|
1073
1077
|
await buildServer(config, buildContext, resolved.providers[0], enableOpenApi, appRoot);
|
|
1074
1078
|
if (enableOpenApi) await require_openapi.generateOpenApi(config);
|
|
1075
1079
|
const runtime = config.runtime ?? "node";
|
|
1076
|
-
|
|
1080
|
+
let secretsJsonPath;
|
|
1081
|
+
const appSecrets = await loadSecretsForApp(secretsRoot, workspaceAppName);
|
|
1082
|
+
if (Object.keys(appSecrets).length > 0) {
|
|
1083
|
+
const secretsDir = (0, node_path.join)(secretsRoot, ".gkm");
|
|
1084
|
+
await (0, node_fs_promises.mkdir)(secretsDir, { recursive: true });
|
|
1085
|
+
secretsJsonPath = (0, node_path.join)(secretsDir, "dev-secrets.json");
|
|
1086
|
+
await (0, node_fs_promises.writeFile)(secretsJsonPath, JSON.stringify(appSecrets, null, 2));
|
|
1087
|
+
logger$8.log(`🔐 Loaded ${Object.keys(appSecrets).length} secret(s)`);
|
|
1088
|
+
}
|
|
1089
|
+
const devServer = new DevServer(resolved.providers[0], options.port || 3e3, options.portExplicit ?? false, enableOpenApi, telescope, studio, runtime, appRoot, secretsJsonPath);
|
|
1077
1090
|
await devServer.start();
|
|
1078
1091
|
const envParserFile = config.envParser.split("#")[0] ?? config.envParser;
|
|
1079
1092
|
const loggerFile = config.logger.split("#")[0] ?? config.logger;
|
|
@@ -1245,6 +1258,31 @@ async function loadDevSecrets(workspace) {
|
|
|
1245
1258
|
return {};
|
|
1246
1259
|
}
|
|
1247
1260
|
/**
|
|
1261
|
+
* Load secrets from a path for dev mode.
|
|
1262
|
+
* For single app: returns secrets as-is.
|
|
1263
|
+
* For workspace app: maps {APP}_DATABASE_URL → DATABASE_URL.
|
|
1264
|
+
* @internal Exported for testing
|
|
1265
|
+
*/
|
|
1266
|
+
async function loadSecretsForApp(secretsRoot, appName) {
|
|
1267
|
+
const stages = ["dev", "development"];
|
|
1268
|
+
let secrets = {};
|
|
1269
|
+
for (const stage of stages) if (require_storage.secretsExist(stage, secretsRoot)) {
|
|
1270
|
+
const stageSecrets = await require_storage.readStageSecrets(stage, secretsRoot);
|
|
1271
|
+
if (stageSecrets) {
|
|
1272
|
+
logger$8.log(`🔐 Loading secrets from stage: ${stage}`);
|
|
1273
|
+
secrets = require_storage.toEmbeddableSecrets(stageSecrets);
|
|
1274
|
+
break;
|
|
1275
|
+
}
|
|
1276
|
+
}
|
|
1277
|
+
if (Object.keys(secrets).length === 0) return {};
|
|
1278
|
+
if (!appName) return secrets;
|
|
1279
|
+
const prefix = appName.toUpperCase();
|
|
1280
|
+
const mapped = { ...secrets };
|
|
1281
|
+
const appDbUrl = secrets[`${prefix}_DATABASE_URL`];
|
|
1282
|
+
if (appDbUrl) mapped.DATABASE_URL = appDbUrl;
|
|
1283
|
+
return mapped;
|
|
1284
|
+
}
|
|
1285
|
+
/**
|
|
1248
1286
|
* Start docker-compose services for the workspace.
|
|
1249
1287
|
* @internal Exported for testing
|
|
1250
1288
|
*/
|
|
@@ -1489,7 +1527,7 @@ var DevServer = class {
|
|
|
1489
1527
|
serverProcess = null;
|
|
1490
1528
|
isRunning = false;
|
|
1491
1529
|
actualPort;
|
|
1492
|
-
constructor(provider, requestedPort, portExplicit, enableOpenApi, telescope, studio, runtime = "node", appRoot = process.cwd()) {
|
|
1530
|
+
constructor(provider, requestedPort, portExplicit, enableOpenApi, telescope, studio, runtime = "node", appRoot = process.cwd(), secretsJsonPath) {
|
|
1493
1531
|
this.provider = provider;
|
|
1494
1532
|
this.requestedPort = requestedPort;
|
|
1495
1533
|
this.portExplicit = portExplicit;
|
|
@@ -1498,6 +1536,7 @@ var DevServer = class {
|
|
|
1498
1536
|
this.studio = studio;
|
|
1499
1537
|
this.runtime = runtime;
|
|
1500
1538
|
this.appRoot = appRoot;
|
|
1539
|
+
this.secretsJsonPath = secretsJsonPath;
|
|
1501
1540
|
this.actualPort = requestedPort;
|
|
1502
1541
|
}
|
|
1503
1542
|
async start() {
|
|
@@ -1576,10 +1615,20 @@ var DevServer = class {
|
|
|
1576
1615
|
await this.start();
|
|
1577
1616
|
}
|
|
1578
1617
|
async createServerEntry() {
|
|
1579
|
-
const { writeFile:
|
|
1618
|
+
const { writeFile: fsWriteFile } = await import("node:fs/promises");
|
|
1580
1619
|
const { relative: relative$7, dirname: dirname$7 } = await import("node:path");
|
|
1581
1620
|
const serverPath = (0, node_path.join)(this.appRoot, ".gkm", this.provider, "server.ts");
|
|
1582
1621
|
const relativeAppPath = relative$7(dirname$7(serverPath), (0, node_path.join)(dirname$7(serverPath), "app.js"));
|
|
1622
|
+
const credentialsInjection = this.secretsJsonPath ? `import { Credentials } from '@geekmidas/envkit/credentials';
|
|
1623
|
+
import { existsSync, readFileSync } from 'node:fs';
|
|
1624
|
+
|
|
1625
|
+
// Inject dev secrets into Credentials (must happen before app import)
|
|
1626
|
+
const secretsPath = '${this.secretsJsonPath}';
|
|
1627
|
+
if (existsSync(secretsPath)) {
|
|
1628
|
+
Object.assign(Credentials, JSON.parse(readFileSync(secretsPath, 'utf-8')));
|
|
1629
|
+
}
|
|
1630
|
+
|
|
1631
|
+
` : "";
|
|
1583
1632
|
const serveCode = this.runtime === "bun" ? `Bun.serve({
|
|
1584
1633
|
port,
|
|
1585
1634
|
fetch: app.fetch,
|
|
@@ -1599,7 +1648,7 @@ var DevServer = class {
|
|
|
1599
1648
|
* Development server entry point
|
|
1600
1649
|
* This file is auto-generated by 'gkm dev'
|
|
1601
1650
|
*/
|
|
1602
|
-
import { createApp } from './${relativeAppPath.startsWith(".") ? relativeAppPath : `./${relativeAppPath}`}';
|
|
1651
|
+
${credentialsInjection}import { createApp } from './${relativeAppPath.startsWith(".") ? relativeAppPath : `./${relativeAppPath}`}';
|
|
1603
1652
|
|
|
1604
1653
|
const port = process.argv.includes('--port')
|
|
1605
1654
|
? Number.parseInt(process.argv[process.argv.indexOf('--port') + 1])
|
|
@@ -1619,7 +1668,7 @@ start({
|
|
|
1619
1668
|
process.exit(1);
|
|
1620
1669
|
});
|
|
1621
1670
|
`;
|
|
1622
|
-
await
|
|
1671
|
+
await fsWriteFile(serverPath, content);
|
|
1623
1672
|
}
|
|
1624
1673
|
};
|
|
1625
1674
|
|