@geekmidas/cli 1.10.35 → 1.10.36
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/CHANGELOG.md +10 -0
- package/dist/{config-Cuo8vFsp.cjs → config-QnuOcYXp.cjs} +2 -2
- package/dist/{config-Cuo8vFsp.cjs.map → config-QnuOcYXp.cjs.map} +1 -1
- package/dist/{config-B62g483e.mjs → config-U-gojtxn.mjs} +2 -2
- package/dist/{config-B62g483e.mjs.map → config-U-gojtxn.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/deploy/sniffer-loader.cjs +1 -1
- package/dist/{index-Dt_dZ7K4.d.mts → index-D7iT4dnv.d.mts} +41 -4
- package/dist/index-D7iT4dnv.d.mts.map +1 -0
- package/dist/{index-C3t5VL4R.d.cts → index-DRQq26DF.d.cts} +41 -4
- package/dist/index-DRQq26DF.d.cts.map +1 -0
- package/dist/index.cjs +1094 -30
- package/dist/index.cjs.map +1 -1
- package/dist/index.mjs +1094 -30
- package/dist/index.mjs.map +1 -1
- package/dist/{openapi-CflxypuN.mjs → openapi-BA0e3I_s.mjs} +65 -15
- package/dist/openapi-BA0e3I_s.mjs.map +1 -0
- package/dist/{openapi-B_rJjImN.cjs → openapi-Bb4UEyZN.cjs} +65 -15
- package/dist/openapi-Bb4UEyZN.cjs.map +1 -0
- package/dist/openapi.cjs +3 -3
- package/dist/openapi.d.cts +7 -0
- package/dist/openapi.d.cts.map +1 -1
- package/dist/openapi.d.mts +7 -0
- package/dist/openapi.d.mts.map +1 -1
- package/dist/openapi.mjs +3 -3
- package/dist/workspace/index.cjs +4 -1
- package/dist/workspace/index.d.cts +2 -2
- package/dist/workspace/index.d.mts +2 -2
- package/dist/workspace/index.mjs +2 -2
- package/dist/{workspace-CGYykWfn.cjs → workspace-BobDOIG9.cjs} +74 -3
- package/dist/workspace-BobDOIG9.cjs.map +1 -0
- package/dist/{workspace-Bi4X7Yzy.mjs → workspace-Cgmvgwh8.mjs} +57 -4
- package/dist/workspace-Cgmvgwh8.mjs.map +1 -0
- package/package.json +4 -4
- package/src/__tests__/openapi.spec.ts +99 -9
- package/src/deploy/__tests__/env-resolver.spec.ts +28 -0
- package/src/deploy/env-resolver.ts +5 -10
- package/src/deploy/index.ts +13 -7
- package/src/deploy/sniffer.ts +10 -4
- package/src/dev/index.ts +29 -1
- package/src/index.ts +6 -2
- package/src/init/__tests__/generators.spec.ts +147 -0
- package/src/init/generators/mobile-expo.ts +576 -0
- package/src/init/generators/monorepo.ts +42 -11
- package/src/init/generators/web-tanstack.ts +348 -0
- package/src/init/index.ts +40 -3
- package/src/init/templates/index.ts +31 -0
- package/src/init/versions.ts +2 -2
- package/src/openapi.ts +110 -23
- package/src/workspace/__tests__/index.spec.ts +92 -0
- package/src/workspace/__tests__/publicEnv.spec.ts +64 -0
- package/src/workspace/index.ts +16 -2
- package/src/workspace/publicEnv.ts +59 -0
- package/src/workspace/types.ts +6 -1
- package/dist/index-C3t5VL4R.d.cts.map +0 -1
- package/dist/index-Dt_dZ7K4.d.mts.map +0 -1
- package/dist/openapi-B_rJjImN.cjs.map +0 -1
- package/dist/openapi-CflxypuN.mjs.map +0 -1
- package/dist/workspace-Bi4X7Yzy.mjs.map +0 -1
- package/dist/workspace-CGYykWfn.cjs.map +0 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,15 @@
|
|
|
1
1
|
# @geekmidas/cli
|
|
2
2
|
|
|
3
|
+
## 1.10.36
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- [`2b83833`](https://github.com/geekmidas/toolbox/commit/2b83833758dce93e37104e7f4a83653000ab027b) Thanks [@geekmidas](https://github.com/geekmidas)! - Support custom environment variables for frontends
|
|
8
|
+
|
|
9
|
+
- 🐛 [`017e93a`](https://github.com/geekmidas/toolbox/commit/017e93aeaa1edc55a7f1f0520b08e8823e26343c) Thanks [@geekmidas](https://github.com/geekmidas)! - Fix `gkm openapi` failing on workspace builds when an app uses tsconfig path aliases (e.g. `~/*`) defined only in that app's `tsconfig.json`.
|
|
10
|
+
|
|
11
|
+
Workspace mode now spawns one subprocess per backend app with `cwd` set to the app's directory, giving each generation its own tsx instance whose tsconfig discovery picks up the app's `paths` aliases. Adds a `--app <name>` flag to `gkm openapi` that the workspace flow uses internally to target a single app.
|
|
12
|
+
|
|
3
13
|
## 1.10.35
|
|
4
14
|
|
|
5
15
|
### Patch Changes
|
|
@@ -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-BobDOIG9.cjs');
|
|
3
3
|
const node_fs = require_chunk.__toESM(require("node:fs"));
|
|
4
4
|
const node_path = require_chunk.__toESM(require("node:path"));
|
|
5
5
|
|
|
@@ -250,4 +250,4 @@ Object.defineProperty(exports, 'parseModuleConfig', {
|
|
|
250
250
|
return parseModuleConfig;
|
|
251
251
|
}
|
|
252
252
|
});
|
|
253
|
-
//# sourceMappingURL=config-
|
|
253
|
+
//# sourceMappingURL=config-QnuOcYXp.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config-Cuo8vFsp.cjs","names":["config: GkmConfig","configString: string","defaultAlias: string","cwd: string"],"sources":["../src/config.ts"],"sourcesContent":["import { existsSync, readFileSync } from 'node:fs';\nimport { dirname, join, parse } from 'node:path';\nimport type { GkmConfig } from './types.js';\nimport {\n\tgetAppGkmConfig,\n\tisWorkspaceConfig,\n\ttype LoadedConfig,\n\ttype NormalizedAppConfig,\n\ttype NormalizedWorkspace,\n\tprocessConfig,\n\ttype WorkspaceConfig,\n} from './workspace/index.js';\n\nexport type { GkmConfig } from './types.js';\nexport type { LoadedConfig, WorkspaceConfig } from './workspace/index.js';\nexport { defineWorkspace } from './workspace/index.js';\n/**\n * Define GKM configuration with full TypeScript support.\n * This is an identity function that provides type safety and autocomplete.\n *\n * @example\n * ```ts\n * // gkm.config.ts\n * import { defineConfig } from '@geekmidas/cli/config';\n *\n * export default defineConfig({\n * routes: './src/endpoints/**\\/*.ts',\n * envParser: './src/config/env',\n * logger: './src/config/logger',\n * telescope: true,\n * });\n * ```\n */\nexport function defineConfig(config: GkmConfig): GkmConfig {\n\treturn config;\n}\n\nexport interface ParsedModuleConfig {\n\tpath: string;\n\timportPattern: string;\n}\n\n/**\n * Parse a module config string into path and import pattern.\n *\n * @param configString - Config string in format \"./path/to/module\" or \"./path/to/module#exportName\"\n * @param defaultAlias - The default alias name to use if no export name specified\n * @returns Object with path and import pattern\n *\n * @example\n * parseModuleConfig('./src/config/env', 'envParser')\n * // { path: './src/config/env', importPattern: 'envParser' }\n *\n * parseModuleConfig('./src/config/env#envParser', 'envParser')\n * // { path: './src/config/env', importPattern: '{ envParser }' }\n *\n * parseModuleConfig('./src/config/env#myEnv', 'envParser')\n * // { path: './src/config/env', importPattern: '{ myEnv as envParser }' }\n */\nexport function parseModuleConfig(\n\tconfigString: string,\n\tdefaultAlias: string,\n): ParsedModuleConfig {\n\tconst parts = configString.split('#');\n\tconst path = parts[0] ?? configString;\n\tconst exportName = parts[1];\n\tconst importPattern = !exportName\n\t\t? defaultAlias\n\t\t: exportName === defaultAlias\n\t\t\t? `{ ${defaultAlias} }`\n\t\t\t: `{ ${exportName} as ${defaultAlias} }`;\n\n\treturn { path, importPattern };\n}\n\nexport interface ConfigDiscoveryResult {\n\tconfigPath: string;\n\tworkspaceRoot: string;\n}\n\n/**\n * Find and return the path to the config file.\n *\n * Resolution order:\n * 1. GKM_CONFIG_PATH env var (set by workspace dev command)\n * 2. Walk up directory tree from cwd\n */\nfunction findConfigPath(cwd: string): ConfigDiscoveryResult {\n\tconst files = ['gkm.config.json', 'gkm.config.ts', 'gkm.config.js'];\n\n\t// Check GKM_CONFIG_PATH env var first (set by workspace dev command)\n\tconst envConfigPath = process.env.GKM_CONFIG_PATH;\n\tif (envConfigPath && existsSync(envConfigPath)) {\n\t\treturn {\n\t\t\tconfigPath: envConfigPath,\n\t\t\tworkspaceRoot: dirname(envConfigPath),\n\t\t};\n\t}\n\n\t// Walk up directory tree to find config\n\tlet currentDir = cwd;\n\tconst { root } = parse(currentDir);\n\n\twhile (currentDir !== root) {\n\t\tfor (const file of files) {\n\t\t\tconst configPath = join(currentDir, file);\n\t\t\tif (existsSync(configPath)) {\n\t\t\t\treturn {\n\t\t\t\t\tconfigPath,\n\t\t\t\t\tworkspaceRoot: currentDir,\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\t\tcurrentDir = dirname(currentDir);\n\t}\n\n\tthrow new Error(\n\t\t'Configuration file not found. Please create gkm.config.json, gkm.config.ts, or gkm.config.js in the project root.',\n\t);\n}\n\n/**\n * Get app name from package.json in the given directory.\n * Handles scoped packages by extracting the name after the scope.\n *\n * @example\n * getAppNameFromCwd('/path/to/apps/api')\n * // package.json: { \"name\": \"@myorg/api\" }\n * // Returns: 'api'\n */\nexport function getAppNameFromCwd(cwd: string = process.cwd()): string | null {\n\tconst packageJsonPath = join(cwd, 'package.json');\n\n\tif (!existsSync(packageJsonPath)) {\n\t\treturn null;\n\t}\n\n\ttry {\n\t\tconst packageJson = JSON.parse(readFileSync(packageJsonPath, 'utf-8'));\n\t\tconst name = packageJson.name as string | undefined;\n\n\t\tif (!name) {\n\t\t\treturn null;\n\t\t}\n\n\t\t// Handle scoped packages: @scope/name -> name\n\t\tif (name.startsWith('@') && name.includes('/')) {\n\t\t\treturn name.split('/')[1] ?? null;\n\t\t}\n\n\t\treturn name;\n\t} catch {\n\t\treturn null;\n\t}\n}\n\ninterface RawConfigResult {\n\tconfig: GkmConfig | WorkspaceConfig;\n\tworkspaceRoot: string;\n}\n\n/**\n * Load raw configuration from file.\n */\nasync function loadRawConfig(cwd: string): Promise<RawConfigResult> {\n\tconst { configPath, workspaceRoot } = findConfigPath(cwd);\n\n\ttry {\n\t\tconst config = await import(configPath);\n\t\treturn {\n\t\t\tconfig: config.default,\n\t\t\tworkspaceRoot,\n\t\t};\n\t} catch (error) {\n\t\tthrow new Error(`Failed to load config: ${(error as Error).message}`);\n\t}\n}\n\n/**\n * Load configuration file (single-app format).\n * For backwards compatibility with existing code.\n *\n * @deprecated Use loadWorkspaceConfig for new code\n */\nexport async function loadConfig(\n\tcwd: string = process.cwd(),\n): Promise<GkmConfig> {\n\tconst { config } = await loadRawConfig(cwd);\n\n\t// If it's a workspace config, throw an error\n\tif (isWorkspaceConfig(config)) {\n\t\tthrow new Error(\n\t\t\t'Workspace configuration detected. Use loadWorkspaceConfig() instead.',\n\t\t);\n\t}\n\n\treturn config;\n}\n\n/**\n * Load configuration file and process it as a workspace.\n * Works with both single-app and workspace configurations.\n *\n * Single-app configs are automatically wrapped as a workspace with one app.\n *\n * @example\n * ```ts\n * const { type, workspace } = await loadWorkspaceConfig();\n *\n * if (type === 'workspace') {\n * console.log('Multi-app workspace:', workspace.apps);\n * } else {\n * console.log('Single app wrapped as workspace');\n * }\n * ```\n */\nexport async function loadWorkspaceConfig(\n\tcwd: string = process.cwd(),\n): Promise<LoadedConfig> {\n\tconst { config, workspaceRoot } = await loadRawConfig(cwd);\n\treturn processConfig(config, workspaceRoot);\n}\n\nexport interface AppConfigResult {\n\tappName: string;\n\tapp: NormalizedAppConfig;\n\tgkmConfig: GkmConfig;\n\tworkspace: NormalizedWorkspace;\n\tworkspaceRoot: string;\n\tappRoot: string;\n}\n\n/**\n * Load app-specific configuration from workspace.\n * Uses the app name from package.json to find the correct app config.\n *\n * @example\n * ```ts\n * // From apps/api directory with package.json: { \"name\": \"@myorg/api\" }\n * const { app, workspace, workspaceRoot } = await loadAppConfig();\n * console.log(app.routes); // './src/endpoints/**\\/*.ts'\n * ```\n */\nexport async function loadAppConfig(\n\tcwd: string = process.cwd(),\n): Promise<AppConfigResult> {\n\tconst appName = getAppNameFromCwd(cwd);\n\n\tif (!appName) {\n\t\tthrow new Error(\n\t\t\t'Could not determine app name. Ensure package.json exists with a \"name\" field.',\n\t\t);\n\t}\n\n\tconst { config, workspaceRoot } = await loadRawConfig(cwd);\n\tconst loadedConfig = processConfig(config, workspaceRoot);\n\n\t// Find the app in workspace (apps is a Record<string, NormalizedAppConfig>)\n\tconst app = loadedConfig.workspace.apps[appName];\n\n\tif (!app) {\n\t\tconst availableApps = Object.keys(loadedConfig.workspace.apps).join(', ');\n\t\tthrow new Error(\n\t\t\t`App \"${appName}\" not found in workspace config. Available apps: ${availableApps}. ` +\n\t\t\t\t`Ensure the package.json name matches the app key in gkm.config.ts.`,\n\t\t);\n\t}\n\n\t// Get the app's GKM config using the helper\n\tconst gkmConfig = getAppGkmConfig(loadedConfig.workspace, appName);\n\n\tif (!gkmConfig) {\n\t\tthrow new Error(\n\t\t\t`App \"${appName}\" is not a backend app and cannot be run with gkm dev.`,\n\t\t);\n\t}\n\n\treturn {\n\t\tappName,\n\t\tapp,\n\t\tgkmConfig,\n\t\tworkspace: loadedConfig.workspace,\n\t\tworkspaceRoot,\n\t\tappRoot: join(workspaceRoot, app.path),\n\t};\n}\n\nexport interface WorkspaceAppInfo {\n\tappName: string;\n\tapp: NormalizedAppConfig;\n\tworkspace: NormalizedWorkspace;\n\tworkspaceRoot: string;\n}\n\n/**\n * Load workspace info for any app (frontend or backend).\n * Unlike loadAppConfig, this does NOT require the app to have a gkm config\n * (routes, entry, etc.), making it suitable for gkm exec/test from frontend apps.\n */\nexport async function loadWorkspaceAppInfo(\n\tcwd: string = process.cwd(),\n): Promise<WorkspaceAppInfo> {\n\tconst appName = getAppNameFromCwd(cwd);\n\n\tif (!appName) {\n\t\tthrow new Error(\n\t\t\t'Could not determine app name. Ensure package.json exists with a \"name\" field.',\n\t\t);\n\t}\n\n\tconst { config, workspaceRoot } = await loadRawConfig(cwd);\n\tconst loadedConfig = processConfig(config, workspaceRoot);\n\n\tconst app = loadedConfig.workspace.apps[appName];\n\n\tif (!app) {\n\t\tconst availableApps = Object.keys(loadedConfig.workspace.apps).join(', ');\n\t\tthrow new Error(\n\t\t\t`App \"${appName}\" not found in workspace config. Available apps: ${availableApps}. ` +\n\t\t\t\t`Ensure the package.json name matches the app key in gkm.config.ts.`,\n\t\t);\n\t}\n\n\treturn {\n\t\tappName,\n\t\tapp,\n\t\tworkspace: loadedConfig.workspace,\n\t\tworkspaceRoot,\n\t};\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"config-QnuOcYXp.cjs","names":["config: GkmConfig","configString: string","defaultAlias: string","cwd: string"],"sources":["../src/config.ts"],"sourcesContent":["import { existsSync, readFileSync } from 'node:fs';\nimport { dirname, join, parse } from 'node:path';\nimport type { GkmConfig } from './types.js';\nimport {\n\tgetAppGkmConfig,\n\tisWorkspaceConfig,\n\ttype LoadedConfig,\n\ttype NormalizedAppConfig,\n\ttype NormalizedWorkspace,\n\tprocessConfig,\n\ttype WorkspaceConfig,\n} from './workspace/index.js';\n\nexport type { GkmConfig } from './types.js';\nexport type { LoadedConfig, WorkspaceConfig } from './workspace/index.js';\nexport { defineWorkspace } from './workspace/index.js';\n/**\n * Define GKM configuration with full TypeScript support.\n * This is an identity function that provides type safety and autocomplete.\n *\n * @example\n * ```ts\n * // gkm.config.ts\n * import { defineConfig } from '@geekmidas/cli/config';\n *\n * export default defineConfig({\n * routes: './src/endpoints/**\\/*.ts',\n * envParser: './src/config/env',\n * logger: './src/config/logger',\n * telescope: true,\n * });\n * ```\n */\nexport function defineConfig(config: GkmConfig): GkmConfig {\n\treturn config;\n}\n\nexport interface ParsedModuleConfig {\n\tpath: string;\n\timportPattern: string;\n}\n\n/**\n * Parse a module config string into path and import pattern.\n *\n * @param configString - Config string in format \"./path/to/module\" or \"./path/to/module#exportName\"\n * @param defaultAlias - The default alias name to use if no export name specified\n * @returns Object with path and import pattern\n *\n * @example\n * parseModuleConfig('./src/config/env', 'envParser')\n * // { path: './src/config/env', importPattern: 'envParser' }\n *\n * parseModuleConfig('./src/config/env#envParser', 'envParser')\n * // { path: './src/config/env', importPattern: '{ envParser }' }\n *\n * parseModuleConfig('./src/config/env#myEnv', 'envParser')\n * // { path: './src/config/env', importPattern: '{ myEnv as envParser }' }\n */\nexport function parseModuleConfig(\n\tconfigString: string,\n\tdefaultAlias: string,\n): ParsedModuleConfig {\n\tconst parts = configString.split('#');\n\tconst path = parts[0] ?? configString;\n\tconst exportName = parts[1];\n\tconst importPattern = !exportName\n\t\t? defaultAlias\n\t\t: exportName === defaultAlias\n\t\t\t? `{ ${defaultAlias} }`\n\t\t\t: `{ ${exportName} as ${defaultAlias} }`;\n\n\treturn { path, importPattern };\n}\n\nexport interface ConfigDiscoveryResult {\n\tconfigPath: string;\n\tworkspaceRoot: string;\n}\n\n/**\n * Find and return the path to the config file.\n *\n * Resolution order:\n * 1. GKM_CONFIG_PATH env var (set by workspace dev command)\n * 2. Walk up directory tree from cwd\n */\nfunction findConfigPath(cwd: string): ConfigDiscoveryResult {\n\tconst files = ['gkm.config.json', 'gkm.config.ts', 'gkm.config.js'];\n\n\t// Check GKM_CONFIG_PATH env var first (set by workspace dev command)\n\tconst envConfigPath = process.env.GKM_CONFIG_PATH;\n\tif (envConfigPath && existsSync(envConfigPath)) {\n\t\treturn {\n\t\t\tconfigPath: envConfigPath,\n\t\t\tworkspaceRoot: dirname(envConfigPath),\n\t\t};\n\t}\n\n\t// Walk up directory tree to find config\n\tlet currentDir = cwd;\n\tconst { root } = parse(currentDir);\n\n\twhile (currentDir !== root) {\n\t\tfor (const file of files) {\n\t\t\tconst configPath = join(currentDir, file);\n\t\t\tif (existsSync(configPath)) {\n\t\t\t\treturn {\n\t\t\t\t\tconfigPath,\n\t\t\t\t\tworkspaceRoot: currentDir,\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\t\tcurrentDir = dirname(currentDir);\n\t}\n\n\tthrow new Error(\n\t\t'Configuration file not found. Please create gkm.config.json, gkm.config.ts, or gkm.config.js in the project root.',\n\t);\n}\n\n/**\n * Get app name from package.json in the given directory.\n * Handles scoped packages by extracting the name after the scope.\n *\n * @example\n * getAppNameFromCwd('/path/to/apps/api')\n * // package.json: { \"name\": \"@myorg/api\" }\n * // Returns: 'api'\n */\nexport function getAppNameFromCwd(cwd: string = process.cwd()): string | null {\n\tconst packageJsonPath = join(cwd, 'package.json');\n\n\tif (!existsSync(packageJsonPath)) {\n\t\treturn null;\n\t}\n\n\ttry {\n\t\tconst packageJson = JSON.parse(readFileSync(packageJsonPath, 'utf-8'));\n\t\tconst name = packageJson.name as string | undefined;\n\n\t\tif (!name) {\n\t\t\treturn null;\n\t\t}\n\n\t\t// Handle scoped packages: @scope/name -> name\n\t\tif (name.startsWith('@') && name.includes('/')) {\n\t\t\treturn name.split('/')[1] ?? null;\n\t\t}\n\n\t\treturn name;\n\t} catch {\n\t\treturn null;\n\t}\n}\n\ninterface RawConfigResult {\n\tconfig: GkmConfig | WorkspaceConfig;\n\tworkspaceRoot: string;\n}\n\n/**\n * Load raw configuration from file.\n */\nasync function loadRawConfig(cwd: string): Promise<RawConfigResult> {\n\tconst { configPath, workspaceRoot } = findConfigPath(cwd);\n\n\ttry {\n\t\tconst config = await import(configPath);\n\t\treturn {\n\t\t\tconfig: config.default,\n\t\t\tworkspaceRoot,\n\t\t};\n\t} catch (error) {\n\t\tthrow new Error(`Failed to load config: ${(error as Error).message}`);\n\t}\n}\n\n/**\n * Load configuration file (single-app format).\n * For backwards compatibility with existing code.\n *\n * @deprecated Use loadWorkspaceConfig for new code\n */\nexport async function loadConfig(\n\tcwd: string = process.cwd(),\n): Promise<GkmConfig> {\n\tconst { config } = await loadRawConfig(cwd);\n\n\t// If it's a workspace config, throw an error\n\tif (isWorkspaceConfig(config)) {\n\t\tthrow new Error(\n\t\t\t'Workspace configuration detected. Use loadWorkspaceConfig() instead.',\n\t\t);\n\t}\n\n\treturn config;\n}\n\n/**\n * Load configuration file and process it as a workspace.\n * Works with both single-app and workspace configurations.\n *\n * Single-app configs are automatically wrapped as a workspace with one app.\n *\n * @example\n * ```ts\n * const { type, workspace } = await loadWorkspaceConfig();\n *\n * if (type === 'workspace') {\n * console.log('Multi-app workspace:', workspace.apps);\n * } else {\n * console.log('Single app wrapped as workspace');\n * }\n * ```\n */\nexport async function loadWorkspaceConfig(\n\tcwd: string = process.cwd(),\n): Promise<LoadedConfig> {\n\tconst { config, workspaceRoot } = await loadRawConfig(cwd);\n\treturn processConfig(config, workspaceRoot);\n}\n\nexport interface AppConfigResult {\n\tappName: string;\n\tapp: NormalizedAppConfig;\n\tgkmConfig: GkmConfig;\n\tworkspace: NormalizedWorkspace;\n\tworkspaceRoot: string;\n\tappRoot: string;\n}\n\n/**\n * Load app-specific configuration from workspace.\n * Uses the app name from package.json to find the correct app config.\n *\n * @example\n * ```ts\n * // From apps/api directory with package.json: { \"name\": \"@myorg/api\" }\n * const { app, workspace, workspaceRoot } = await loadAppConfig();\n * console.log(app.routes); // './src/endpoints/**\\/*.ts'\n * ```\n */\nexport async function loadAppConfig(\n\tcwd: string = process.cwd(),\n): Promise<AppConfigResult> {\n\tconst appName = getAppNameFromCwd(cwd);\n\n\tif (!appName) {\n\t\tthrow new Error(\n\t\t\t'Could not determine app name. Ensure package.json exists with a \"name\" field.',\n\t\t);\n\t}\n\n\tconst { config, workspaceRoot } = await loadRawConfig(cwd);\n\tconst loadedConfig = processConfig(config, workspaceRoot);\n\n\t// Find the app in workspace (apps is a Record<string, NormalizedAppConfig>)\n\tconst app = loadedConfig.workspace.apps[appName];\n\n\tif (!app) {\n\t\tconst availableApps = Object.keys(loadedConfig.workspace.apps).join(', ');\n\t\tthrow new Error(\n\t\t\t`App \"${appName}\" not found in workspace config. Available apps: ${availableApps}. ` +\n\t\t\t\t`Ensure the package.json name matches the app key in gkm.config.ts.`,\n\t\t);\n\t}\n\n\t// Get the app's GKM config using the helper\n\tconst gkmConfig = getAppGkmConfig(loadedConfig.workspace, appName);\n\n\tif (!gkmConfig) {\n\t\tthrow new Error(\n\t\t\t`App \"${appName}\" is not a backend app and cannot be run with gkm dev.`,\n\t\t);\n\t}\n\n\treturn {\n\t\tappName,\n\t\tapp,\n\t\tgkmConfig,\n\t\tworkspace: loadedConfig.workspace,\n\t\tworkspaceRoot,\n\t\tappRoot: join(workspaceRoot, app.path),\n\t};\n}\n\nexport interface WorkspaceAppInfo {\n\tappName: string;\n\tapp: NormalizedAppConfig;\n\tworkspace: NormalizedWorkspace;\n\tworkspaceRoot: string;\n}\n\n/**\n * Load workspace info for any app (frontend or backend).\n * Unlike loadAppConfig, this does NOT require the app to have a gkm config\n * (routes, entry, etc.), making it suitable for gkm exec/test from frontend apps.\n */\nexport async function loadWorkspaceAppInfo(\n\tcwd: string = process.cwd(),\n): Promise<WorkspaceAppInfo> {\n\tconst appName = getAppNameFromCwd(cwd);\n\n\tif (!appName) {\n\t\tthrow new Error(\n\t\t\t'Could not determine app name. Ensure package.json exists with a \"name\" field.',\n\t\t);\n\t}\n\n\tconst { config, workspaceRoot } = await loadRawConfig(cwd);\n\tconst loadedConfig = processConfig(config, workspaceRoot);\n\n\tconst app = loadedConfig.workspace.apps[appName];\n\n\tif (!app) {\n\t\tconst availableApps = Object.keys(loadedConfig.workspace.apps).join(', ');\n\t\tthrow new Error(\n\t\t\t`App \"${appName}\" not found in workspace config. Available apps: ${availableApps}. ` +\n\t\t\t\t`Ensure the package.json name matches the app key in gkm.config.ts.`,\n\t\t);\n\t}\n\n\treturn {\n\t\tappName,\n\t\tapp,\n\t\tworkspace: loadedConfig.workspace,\n\t\tworkspaceRoot,\n\t};\n}\n"],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { getAppGkmConfig, isWorkspaceConfig, processConfig } from "./workspace-
|
|
1
|
+
import { getAppGkmConfig, isWorkspaceConfig, processConfig } from "./workspace-Cgmvgwh8.mjs";
|
|
2
2
|
import { existsSync, readFileSync } from "node:fs";
|
|
3
3
|
import { dirname, join, parse } from "node:path";
|
|
4
4
|
|
|
@@ -208,4 +208,4 @@ async function loadWorkspaceAppInfo(cwd = process.cwd()) {
|
|
|
208
208
|
|
|
209
209
|
//#endregion
|
|
210
210
|
export { defineConfig, getAppNameFromCwd, loadAppConfig, loadConfig, loadWorkspaceAppInfo, loadWorkspaceConfig, parseModuleConfig };
|
|
211
|
-
//# sourceMappingURL=config-
|
|
211
|
+
//# sourceMappingURL=config-U-gojtxn.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config-B62g483e.mjs","names":["config: GkmConfig","configString: string","defaultAlias: string","cwd: string"],"sources":["../src/config.ts"],"sourcesContent":["import { existsSync, readFileSync } from 'node:fs';\nimport { dirname, join, parse } from 'node:path';\nimport type { GkmConfig } from './types.js';\nimport {\n\tgetAppGkmConfig,\n\tisWorkspaceConfig,\n\ttype LoadedConfig,\n\ttype NormalizedAppConfig,\n\ttype NormalizedWorkspace,\n\tprocessConfig,\n\ttype WorkspaceConfig,\n} from './workspace/index.js';\n\nexport type { GkmConfig } from './types.js';\nexport type { LoadedConfig, WorkspaceConfig } from './workspace/index.js';\nexport { defineWorkspace } from './workspace/index.js';\n/**\n * Define GKM configuration with full TypeScript support.\n * This is an identity function that provides type safety and autocomplete.\n *\n * @example\n * ```ts\n * // gkm.config.ts\n * import { defineConfig } from '@geekmidas/cli/config';\n *\n * export default defineConfig({\n * routes: './src/endpoints/**\\/*.ts',\n * envParser: './src/config/env',\n * logger: './src/config/logger',\n * telescope: true,\n * });\n * ```\n */\nexport function defineConfig(config: GkmConfig): GkmConfig {\n\treturn config;\n}\n\nexport interface ParsedModuleConfig {\n\tpath: string;\n\timportPattern: string;\n}\n\n/**\n * Parse a module config string into path and import pattern.\n *\n * @param configString - Config string in format \"./path/to/module\" or \"./path/to/module#exportName\"\n * @param defaultAlias - The default alias name to use if no export name specified\n * @returns Object with path and import pattern\n *\n * @example\n * parseModuleConfig('./src/config/env', 'envParser')\n * // { path: './src/config/env', importPattern: 'envParser' }\n *\n * parseModuleConfig('./src/config/env#envParser', 'envParser')\n * // { path: './src/config/env', importPattern: '{ envParser }' }\n *\n * parseModuleConfig('./src/config/env#myEnv', 'envParser')\n * // { path: './src/config/env', importPattern: '{ myEnv as envParser }' }\n */\nexport function parseModuleConfig(\n\tconfigString: string,\n\tdefaultAlias: string,\n): ParsedModuleConfig {\n\tconst parts = configString.split('#');\n\tconst path = parts[0] ?? configString;\n\tconst exportName = parts[1];\n\tconst importPattern = !exportName\n\t\t? defaultAlias\n\t\t: exportName === defaultAlias\n\t\t\t? `{ ${defaultAlias} }`\n\t\t\t: `{ ${exportName} as ${defaultAlias} }`;\n\n\treturn { path, importPattern };\n}\n\nexport interface ConfigDiscoveryResult {\n\tconfigPath: string;\n\tworkspaceRoot: string;\n}\n\n/**\n * Find and return the path to the config file.\n *\n * Resolution order:\n * 1. GKM_CONFIG_PATH env var (set by workspace dev command)\n * 2. Walk up directory tree from cwd\n */\nfunction findConfigPath(cwd: string): ConfigDiscoveryResult {\n\tconst files = ['gkm.config.json', 'gkm.config.ts', 'gkm.config.js'];\n\n\t// Check GKM_CONFIG_PATH env var first (set by workspace dev command)\n\tconst envConfigPath = process.env.GKM_CONFIG_PATH;\n\tif (envConfigPath && existsSync(envConfigPath)) {\n\t\treturn {\n\t\t\tconfigPath: envConfigPath,\n\t\t\tworkspaceRoot: dirname(envConfigPath),\n\t\t};\n\t}\n\n\t// Walk up directory tree to find config\n\tlet currentDir = cwd;\n\tconst { root } = parse(currentDir);\n\n\twhile (currentDir !== root) {\n\t\tfor (const file of files) {\n\t\t\tconst configPath = join(currentDir, file);\n\t\t\tif (existsSync(configPath)) {\n\t\t\t\treturn {\n\t\t\t\t\tconfigPath,\n\t\t\t\t\tworkspaceRoot: currentDir,\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\t\tcurrentDir = dirname(currentDir);\n\t}\n\n\tthrow new Error(\n\t\t'Configuration file not found. Please create gkm.config.json, gkm.config.ts, or gkm.config.js in the project root.',\n\t);\n}\n\n/**\n * Get app name from package.json in the given directory.\n * Handles scoped packages by extracting the name after the scope.\n *\n * @example\n * getAppNameFromCwd('/path/to/apps/api')\n * // package.json: { \"name\": \"@myorg/api\" }\n * // Returns: 'api'\n */\nexport function getAppNameFromCwd(cwd: string = process.cwd()): string | null {\n\tconst packageJsonPath = join(cwd, 'package.json');\n\n\tif (!existsSync(packageJsonPath)) {\n\t\treturn null;\n\t}\n\n\ttry {\n\t\tconst packageJson = JSON.parse(readFileSync(packageJsonPath, 'utf-8'));\n\t\tconst name = packageJson.name as string | undefined;\n\n\t\tif (!name) {\n\t\t\treturn null;\n\t\t}\n\n\t\t// Handle scoped packages: @scope/name -> name\n\t\tif (name.startsWith('@') && name.includes('/')) {\n\t\t\treturn name.split('/')[1] ?? null;\n\t\t}\n\n\t\treturn name;\n\t} catch {\n\t\treturn null;\n\t}\n}\n\ninterface RawConfigResult {\n\tconfig: GkmConfig | WorkspaceConfig;\n\tworkspaceRoot: string;\n}\n\n/**\n * Load raw configuration from file.\n */\nasync function loadRawConfig(cwd: string): Promise<RawConfigResult> {\n\tconst { configPath, workspaceRoot } = findConfigPath(cwd);\n\n\ttry {\n\t\tconst config = await import(configPath);\n\t\treturn {\n\t\t\tconfig: config.default,\n\t\t\tworkspaceRoot,\n\t\t};\n\t} catch (error) {\n\t\tthrow new Error(`Failed to load config: ${(error as Error).message}`);\n\t}\n}\n\n/**\n * Load configuration file (single-app format).\n * For backwards compatibility with existing code.\n *\n * @deprecated Use loadWorkspaceConfig for new code\n */\nexport async function loadConfig(\n\tcwd: string = process.cwd(),\n): Promise<GkmConfig> {\n\tconst { config } = await loadRawConfig(cwd);\n\n\t// If it's a workspace config, throw an error\n\tif (isWorkspaceConfig(config)) {\n\t\tthrow new Error(\n\t\t\t'Workspace configuration detected. Use loadWorkspaceConfig() instead.',\n\t\t);\n\t}\n\n\treturn config;\n}\n\n/**\n * Load configuration file and process it as a workspace.\n * Works with both single-app and workspace configurations.\n *\n * Single-app configs are automatically wrapped as a workspace with one app.\n *\n * @example\n * ```ts\n * const { type, workspace } = await loadWorkspaceConfig();\n *\n * if (type === 'workspace') {\n * console.log('Multi-app workspace:', workspace.apps);\n * } else {\n * console.log('Single app wrapped as workspace');\n * }\n * ```\n */\nexport async function loadWorkspaceConfig(\n\tcwd: string = process.cwd(),\n): Promise<LoadedConfig> {\n\tconst { config, workspaceRoot } = await loadRawConfig(cwd);\n\treturn processConfig(config, workspaceRoot);\n}\n\nexport interface AppConfigResult {\n\tappName: string;\n\tapp: NormalizedAppConfig;\n\tgkmConfig: GkmConfig;\n\tworkspace: NormalizedWorkspace;\n\tworkspaceRoot: string;\n\tappRoot: string;\n}\n\n/**\n * Load app-specific configuration from workspace.\n * Uses the app name from package.json to find the correct app config.\n *\n * @example\n * ```ts\n * // From apps/api directory with package.json: { \"name\": \"@myorg/api\" }\n * const { app, workspace, workspaceRoot } = await loadAppConfig();\n * console.log(app.routes); // './src/endpoints/**\\/*.ts'\n * ```\n */\nexport async function loadAppConfig(\n\tcwd: string = process.cwd(),\n): Promise<AppConfigResult> {\n\tconst appName = getAppNameFromCwd(cwd);\n\n\tif (!appName) {\n\t\tthrow new Error(\n\t\t\t'Could not determine app name. Ensure package.json exists with a \"name\" field.',\n\t\t);\n\t}\n\n\tconst { config, workspaceRoot } = await loadRawConfig(cwd);\n\tconst loadedConfig = processConfig(config, workspaceRoot);\n\n\t// Find the app in workspace (apps is a Record<string, NormalizedAppConfig>)\n\tconst app = loadedConfig.workspace.apps[appName];\n\n\tif (!app) {\n\t\tconst availableApps = Object.keys(loadedConfig.workspace.apps).join(', ');\n\t\tthrow new Error(\n\t\t\t`App \"${appName}\" not found in workspace config. Available apps: ${availableApps}. ` +\n\t\t\t\t`Ensure the package.json name matches the app key in gkm.config.ts.`,\n\t\t);\n\t}\n\n\t// Get the app's GKM config using the helper\n\tconst gkmConfig = getAppGkmConfig(loadedConfig.workspace, appName);\n\n\tif (!gkmConfig) {\n\t\tthrow new Error(\n\t\t\t`App \"${appName}\" is not a backend app and cannot be run with gkm dev.`,\n\t\t);\n\t}\n\n\treturn {\n\t\tappName,\n\t\tapp,\n\t\tgkmConfig,\n\t\tworkspace: loadedConfig.workspace,\n\t\tworkspaceRoot,\n\t\tappRoot: join(workspaceRoot, app.path),\n\t};\n}\n\nexport interface WorkspaceAppInfo {\n\tappName: string;\n\tapp: NormalizedAppConfig;\n\tworkspace: NormalizedWorkspace;\n\tworkspaceRoot: string;\n}\n\n/**\n * Load workspace info for any app (frontend or backend).\n * Unlike loadAppConfig, this does NOT require the app to have a gkm config\n * (routes, entry, etc.), making it suitable for gkm exec/test from frontend apps.\n */\nexport async function loadWorkspaceAppInfo(\n\tcwd: string = process.cwd(),\n): Promise<WorkspaceAppInfo> {\n\tconst appName = getAppNameFromCwd(cwd);\n\n\tif (!appName) {\n\t\tthrow new Error(\n\t\t\t'Could not determine app name. Ensure package.json exists with a \"name\" field.',\n\t\t);\n\t}\n\n\tconst { config, workspaceRoot } = await loadRawConfig(cwd);\n\tconst loadedConfig = processConfig(config, workspaceRoot);\n\n\tconst app = loadedConfig.workspace.apps[appName];\n\n\tif (!app) {\n\t\tconst availableApps = Object.keys(loadedConfig.workspace.apps).join(', ');\n\t\tthrow new Error(\n\t\t\t`App \"${appName}\" not found in workspace config. Available apps: ${availableApps}. ` +\n\t\t\t\t`Ensure the package.json name matches the app key in gkm.config.ts.`,\n\t\t);\n\t}\n\n\treturn {\n\t\tappName,\n\t\tapp,\n\t\tworkspace: loadedConfig.workspace,\n\t\tworkspaceRoot,\n\t};\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"config-U-gojtxn.mjs","names":["config: GkmConfig","configString: string","defaultAlias: string","cwd: string"],"sources":["../src/config.ts"],"sourcesContent":["import { existsSync, readFileSync } from 'node:fs';\nimport { dirname, join, parse } from 'node:path';\nimport type { GkmConfig } from './types.js';\nimport {\n\tgetAppGkmConfig,\n\tisWorkspaceConfig,\n\ttype LoadedConfig,\n\ttype NormalizedAppConfig,\n\ttype NormalizedWorkspace,\n\tprocessConfig,\n\ttype WorkspaceConfig,\n} from './workspace/index.js';\n\nexport type { GkmConfig } from './types.js';\nexport type { LoadedConfig, WorkspaceConfig } from './workspace/index.js';\nexport { defineWorkspace } from './workspace/index.js';\n/**\n * Define GKM configuration with full TypeScript support.\n * This is an identity function that provides type safety and autocomplete.\n *\n * @example\n * ```ts\n * // gkm.config.ts\n * import { defineConfig } from '@geekmidas/cli/config';\n *\n * export default defineConfig({\n * routes: './src/endpoints/**\\/*.ts',\n * envParser: './src/config/env',\n * logger: './src/config/logger',\n * telescope: true,\n * });\n * ```\n */\nexport function defineConfig(config: GkmConfig): GkmConfig {\n\treturn config;\n}\n\nexport interface ParsedModuleConfig {\n\tpath: string;\n\timportPattern: string;\n}\n\n/**\n * Parse a module config string into path and import pattern.\n *\n * @param configString - Config string in format \"./path/to/module\" or \"./path/to/module#exportName\"\n * @param defaultAlias - The default alias name to use if no export name specified\n * @returns Object with path and import pattern\n *\n * @example\n * parseModuleConfig('./src/config/env', 'envParser')\n * // { path: './src/config/env', importPattern: 'envParser' }\n *\n * parseModuleConfig('./src/config/env#envParser', 'envParser')\n * // { path: './src/config/env', importPattern: '{ envParser }' }\n *\n * parseModuleConfig('./src/config/env#myEnv', 'envParser')\n * // { path: './src/config/env', importPattern: '{ myEnv as envParser }' }\n */\nexport function parseModuleConfig(\n\tconfigString: string,\n\tdefaultAlias: string,\n): ParsedModuleConfig {\n\tconst parts = configString.split('#');\n\tconst path = parts[0] ?? configString;\n\tconst exportName = parts[1];\n\tconst importPattern = !exportName\n\t\t? defaultAlias\n\t\t: exportName === defaultAlias\n\t\t\t? `{ ${defaultAlias} }`\n\t\t\t: `{ ${exportName} as ${defaultAlias} }`;\n\n\treturn { path, importPattern };\n}\n\nexport interface ConfigDiscoveryResult {\n\tconfigPath: string;\n\tworkspaceRoot: string;\n}\n\n/**\n * Find and return the path to the config file.\n *\n * Resolution order:\n * 1. GKM_CONFIG_PATH env var (set by workspace dev command)\n * 2. Walk up directory tree from cwd\n */\nfunction findConfigPath(cwd: string): ConfigDiscoveryResult {\n\tconst files = ['gkm.config.json', 'gkm.config.ts', 'gkm.config.js'];\n\n\t// Check GKM_CONFIG_PATH env var first (set by workspace dev command)\n\tconst envConfigPath = process.env.GKM_CONFIG_PATH;\n\tif (envConfigPath && existsSync(envConfigPath)) {\n\t\treturn {\n\t\t\tconfigPath: envConfigPath,\n\t\t\tworkspaceRoot: dirname(envConfigPath),\n\t\t};\n\t}\n\n\t// Walk up directory tree to find config\n\tlet currentDir = cwd;\n\tconst { root } = parse(currentDir);\n\n\twhile (currentDir !== root) {\n\t\tfor (const file of files) {\n\t\t\tconst configPath = join(currentDir, file);\n\t\t\tif (existsSync(configPath)) {\n\t\t\t\treturn {\n\t\t\t\t\tconfigPath,\n\t\t\t\t\tworkspaceRoot: currentDir,\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\t\tcurrentDir = dirname(currentDir);\n\t}\n\n\tthrow new Error(\n\t\t'Configuration file not found. Please create gkm.config.json, gkm.config.ts, or gkm.config.js in the project root.',\n\t);\n}\n\n/**\n * Get app name from package.json in the given directory.\n * Handles scoped packages by extracting the name after the scope.\n *\n * @example\n * getAppNameFromCwd('/path/to/apps/api')\n * // package.json: { \"name\": \"@myorg/api\" }\n * // Returns: 'api'\n */\nexport function getAppNameFromCwd(cwd: string = process.cwd()): string | null {\n\tconst packageJsonPath = join(cwd, 'package.json');\n\n\tif (!existsSync(packageJsonPath)) {\n\t\treturn null;\n\t}\n\n\ttry {\n\t\tconst packageJson = JSON.parse(readFileSync(packageJsonPath, 'utf-8'));\n\t\tconst name = packageJson.name as string | undefined;\n\n\t\tif (!name) {\n\t\t\treturn null;\n\t\t}\n\n\t\t// Handle scoped packages: @scope/name -> name\n\t\tif (name.startsWith('@') && name.includes('/')) {\n\t\t\treturn name.split('/')[1] ?? null;\n\t\t}\n\n\t\treturn name;\n\t} catch {\n\t\treturn null;\n\t}\n}\n\ninterface RawConfigResult {\n\tconfig: GkmConfig | WorkspaceConfig;\n\tworkspaceRoot: string;\n}\n\n/**\n * Load raw configuration from file.\n */\nasync function loadRawConfig(cwd: string): Promise<RawConfigResult> {\n\tconst { configPath, workspaceRoot } = findConfigPath(cwd);\n\n\ttry {\n\t\tconst config = await import(configPath);\n\t\treturn {\n\t\t\tconfig: config.default,\n\t\t\tworkspaceRoot,\n\t\t};\n\t} catch (error) {\n\t\tthrow new Error(`Failed to load config: ${(error as Error).message}`);\n\t}\n}\n\n/**\n * Load configuration file (single-app format).\n * For backwards compatibility with existing code.\n *\n * @deprecated Use loadWorkspaceConfig for new code\n */\nexport async function loadConfig(\n\tcwd: string = process.cwd(),\n): Promise<GkmConfig> {\n\tconst { config } = await loadRawConfig(cwd);\n\n\t// If it's a workspace config, throw an error\n\tif (isWorkspaceConfig(config)) {\n\t\tthrow new Error(\n\t\t\t'Workspace configuration detected. Use loadWorkspaceConfig() instead.',\n\t\t);\n\t}\n\n\treturn config;\n}\n\n/**\n * Load configuration file and process it as a workspace.\n * Works with both single-app and workspace configurations.\n *\n * Single-app configs are automatically wrapped as a workspace with one app.\n *\n * @example\n * ```ts\n * const { type, workspace } = await loadWorkspaceConfig();\n *\n * if (type === 'workspace') {\n * console.log('Multi-app workspace:', workspace.apps);\n * } else {\n * console.log('Single app wrapped as workspace');\n * }\n * ```\n */\nexport async function loadWorkspaceConfig(\n\tcwd: string = process.cwd(),\n): Promise<LoadedConfig> {\n\tconst { config, workspaceRoot } = await loadRawConfig(cwd);\n\treturn processConfig(config, workspaceRoot);\n}\n\nexport interface AppConfigResult {\n\tappName: string;\n\tapp: NormalizedAppConfig;\n\tgkmConfig: GkmConfig;\n\tworkspace: NormalizedWorkspace;\n\tworkspaceRoot: string;\n\tappRoot: string;\n}\n\n/**\n * Load app-specific configuration from workspace.\n * Uses the app name from package.json to find the correct app config.\n *\n * @example\n * ```ts\n * // From apps/api directory with package.json: { \"name\": \"@myorg/api\" }\n * const { app, workspace, workspaceRoot } = await loadAppConfig();\n * console.log(app.routes); // './src/endpoints/**\\/*.ts'\n * ```\n */\nexport async function loadAppConfig(\n\tcwd: string = process.cwd(),\n): Promise<AppConfigResult> {\n\tconst appName = getAppNameFromCwd(cwd);\n\n\tif (!appName) {\n\t\tthrow new Error(\n\t\t\t'Could not determine app name. Ensure package.json exists with a \"name\" field.',\n\t\t);\n\t}\n\n\tconst { config, workspaceRoot } = await loadRawConfig(cwd);\n\tconst loadedConfig = processConfig(config, workspaceRoot);\n\n\t// Find the app in workspace (apps is a Record<string, NormalizedAppConfig>)\n\tconst app = loadedConfig.workspace.apps[appName];\n\n\tif (!app) {\n\t\tconst availableApps = Object.keys(loadedConfig.workspace.apps).join(', ');\n\t\tthrow new Error(\n\t\t\t`App \"${appName}\" not found in workspace config. Available apps: ${availableApps}. ` +\n\t\t\t\t`Ensure the package.json name matches the app key in gkm.config.ts.`,\n\t\t);\n\t}\n\n\t// Get the app's GKM config using the helper\n\tconst gkmConfig = getAppGkmConfig(loadedConfig.workspace, appName);\n\n\tif (!gkmConfig) {\n\t\tthrow new Error(\n\t\t\t`App \"${appName}\" is not a backend app and cannot be run with gkm dev.`,\n\t\t);\n\t}\n\n\treturn {\n\t\tappName,\n\t\tapp,\n\t\tgkmConfig,\n\t\tworkspace: loadedConfig.workspace,\n\t\tworkspaceRoot,\n\t\tappRoot: join(workspaceRoot, app.path),\n\t};\n}\n\nexport interface WorkspaceAppInfo {\n\tappName: string;\n\tapp: NormalizedAppConfig;\n\tworkspace: NormalizedWorkspace;\n\tworkspaceRoot: string;\n}\n\n/**\n * Load workspace info for any app (frontend or backend).\n * Unlike loadAppConfig, this does NOT require the app to have a gkm config\n * (routes, entry, etc.), making it suitable for gkm exec/test from frontend apps.\n */\nexport async function loadWorkspaceAppInfo(\n\tcwd: string = process.cwd(),\n): Promise<WorkspaceAppInfo> {\n\tconst appName = getAppNameFromCwd(cwd);\n\n\tif (!appName) {\n\t\tthrow new Error(\n\t\t\t'Could not determine app name. Ensure package.json exists with a \"name\" field.',\n\t\t);\n\t}\n\n\tconst { config, workspaceRoot } = await loadRawConfig(cwd);\n\tconst loadedConfig = processConfig(config, workspaceRoot);\n\n\tconst app = loadedConfig.workspace.apps[appName];\n\n\tif (!app) {\n\t\tconst availableApps = Object.keys(loadedConfig.workspace.apps).join(', ');\n\t\tthrow new Error(\n\t\t\t`App \"${appName}\" not found in workspace config. Available apps: ${availableApps}. ` +\n\t\t\t\t`Ensure the package.json name matches the app key in gkm.config.ts.`,\n\t\t);\n\t}\n\n\treturn {\n\t\tappName,\n\t\tapp,\n\t\tworkspace: loadedConfig.workspace,\n\t\tworkspaceRoot,\n\t};\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;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;;;;;;AAcD,eAAsB,qBACrBA,MAAc,QAAQ,KAAK,EACC;CAC5B,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;CAEzD,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;AAED,QAAO;EACN;EACA;EACA,WAAW,aAAa;EACxB;CACA;AACD"}
|
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-BobDOIG9.cjs');
|
|
2
|
+
const require_config = require('./config-QnuOcYXp.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-DdHfUbxk.cjs";
|
|
2
|
-
import { LoadedConfig, NormalizedAppConfig, NormalizedWorkspace, WorkspaceConfig, defineWorkspace } from "./index-
|
|
2
|
+
import { LoadedConfig, NormalizedAppConfig, NormalizedWorkspace, WorkspaceConfig, defineWorkspace } from "./index-DRQq26DF.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-OszPdw9m.mjs";
|
|
2
|
-
import { LoadedConfig, NormalizedAppConfig, NormalizedWorkspace, WorkspaceConfig, defineWorkspace } from "./index-
|
|
2
|
+
import { LoadedConfig, NormalizedAppConfig, NormalizedWorkspace, WorkspaceConfig, defineWorkspace } from "./index-D7iT4dnv.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, loadWorkspaceAppInfo, loadWorkspaceConfig, parseModuleConfig } from "./config-
|
|
1
|
+
import { defineWorkspace } from "./workspace-Cgmvgwh8.mjs";
|
|
2
|
+
import { defineConfig, getAppNameFromCwd, loadAppConfig, loadConfig, loadWorkspaceAppInfo, loadWorkspaceConfig, parseModuleConfig } from "./config-U-gojtxn.mjs";
|
|
3
3
|
|
|
4
4
|
export { defineConfig, defineWorkspace, getAppNameFromCwd, loadAppConfig, loadConfig, loadWorkspaceAppInfo, loadWorkspaceConfig, parseModuleConfig };
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
const require_chunk = require('../chunk-CUT6urMc.cjs');
|
|
2
2
|
const node_fs = require_chunk.__toESM(require("node:fs"));
|
|
3
3
|
const node_path = require_chunk.__toESM(require("node:path"));
|
|
4
|
-
const node_module = require_chunk.__toESM(require("node:module"));
|
|
5
4
|
const node_url = require_chunk.__toESM(require("node:url"));
|
|
5
|
+
const node_module = require_chunk.__toESM(require("node:module"));
|
|
6
6
|
|
|
7
7
|
//#region src/deploy/sniffer-loader.ts
|
|
8
8
|
const __filename$1 = (0, node_url.fileURLToPath)(require("url").pathToFileURL(__filename).href);
|
|
@@ -740,7 +740,7 @@ type BackendFramework = 'hono' | 'better-auth' | 'express' | 'fastify';
|
|
|
740
740
|
* }
|
|
741
741
|
* ```
|
|
742
742
|
*/
|
|
743
|
-
type FrontendFramework = 'nextjs' | 'remix' | 'vite';
|
|
743
|
+
type FrontendFramework = 'nextjs' | 'remix' | 'vite' | 'tanstack-start' | 'expo';
|
|
744
744
|
/**
|
|
745
745
|
* Service image configuration for custom Docker images.
|
|
746
746
|
*
|
|
@@ -1532,6 +1532,38 @@ interface LoadedConfig {
|
|
|
1532
1532
|
*/
|
|
1533
1533
|
declare function isWorkspaceConfig(config: GkmConfig | WorkspaceConfig): config is WorkspaceConfig;
|
|
1534
1534
|
//# sourceMappingURL=types.d.ts.map
|
|
1535
|
+
//#endregion
|
|
1536
|
+
//#region src/workspace/publicEnv.d.ts
|
|
1537
|
+
/**
|
|
1538
|
+
* All public env-var prefixes the toolbox understands.
|
|
1539
|
+
*
|
|
1540
|
+
* Used when resolving incoming var names back to a dependency
|
|
1541
|
+
* (e.g. `VITE_AUTH_URL` → `auth`). A var matching any of these
|
|
1542
|
+
* is considered safe to inline into a client bundle.
|
|
1543
|
+
*/
|
|
1544
|
+
declare const PUBLIC_ENV_PREFIXES: readonly ["NEXT_PUBLIC_", "VITE_", "EXPO_PUBLIC_"];
|
|
1545
|
+
/**
|
|
1546
|
+
* Resolve the public env-var prefix that a frontend framework's bundler
|
|
1547
|
+
* inlines into client code at build time:
|
|
1548
|
+
*
|
|
1549
|
+
* - `nextjs` → `NEXT_PUBLIC_`
|
|
1550
|
+
* - `vite` → `VITE_`
|
|
1551
|
+
* - `tanstack-start` → `VITE_` (uses Vite under the hood)
|
|
1552
|
+
* - `expo` → `EXPO_PUBLIC_`
|
|
1553
|
+
* - `remix` → `''` (Remix exposes via loaders, no prefix convention)
|
|
1554
|
+
*
|
|
1555
|
+
* For backend frameworks or unspecified, falls back to `NEXT_PUBLIC_` to
|
|
1556
|
+
* preserve the historical default. Backend apps never read these vars
|
|
1557
|
+
* from a bundle, so the prefix only affects scaffolding/symmetry.
|
|
1558
|
+
*/
|
|
1559
|
+
declare function getPublicEnvPrefix(framework?: FrontendFramework | BackendFramework): string;
|
|
1560
|
+
/**
|
|
1561
|
+
* Strip a known public prefix from a var name.
|
|
1562
|
+
* Returns the un-prefixed name, or `null` if no prefix matched.
|
|
1563
|
+
*/
|
|
1564
|
+
declare function stripPublicPrefix(name: string): string | null;
|
|
1565
|
+
//# sourceMappingURL=publicEnv.d.ts.map
|
|
1566
|
+
|
|
1535
1567
|
//#endregion
|
|
1536
1568
|
//#region src/workspace/index.d.ts
|
|
1537
1569
|
/**
|
|
@@ -1603,7 +1635,12 @@ declare function getAppGkmConfig(workspace: NormalizedWorkspace, appName: string
|
|
|
1603
1635
|
declare function getAppBuildOrder(workspace: NormalizedWorkspace): string[];
|
|
1604
1636
|
/**
|
|
1605
1637
|
* Generate environment variables for app dependencies.
|
|
1606
|
-
*
|
|
1638
|
+
*
|
|
1639
|
+
* Each dependency gets the un-prefixed `{DEP}_URL` (for server-side use) and,
|
|
1640
|
+
* when the consuming app's framework supports a public-var prefix, also the
|
|
1641
|
+
* prefixed form (e.g. `NEXT_PUBLIC_{DEP}_URL` for Next.js, `VITE_{DEP}_URL`
|
|
1642
|
+
* for Vite/TanStack Start). The prefixed form is what gets bundled into the
|
|
1643
|
+
* client at build time.
|
|
1607
1644
|
*/
|
|
1608
1645
|
declare function getDependencyEnvVars(workspace: NormalizedWorkspace, appName: string, urlPrefix?: string): Record<string, string>;
|
|
1609
1646
|
/**
|
|
@@ -1639,5 +1676,5 @@ declare function getEndpointForStage(dokployConfig: {
|
|
|
1639
1676
|
//# sourceMappingURL=index.d.ts.map
|
|
1640
1677
|
|
|
1641
1678
|
//#endregion
|
|
1642
|
-
export { AppConfig, AppConfigInput, AppInput, AppsRecord, BackendFramework, ConstrainedApps, DeployConfig, DeployTarget, DokployWorkspaceConfig, FrontendFramework, InferAppNames, InferredWorkspaceConfig, LoadedConfig, MailServiceConfig, ModelsConfig, NormalizedAppConfig, NormalizedWorkspace, PHASE_2_DEPLOY_TARGETS, SUPPORTED_DEPLOY_TARGETS, SecretsConfig, ServiceImageConfig, ServicesConfig, SharedConfig, WorkspaceConfig, WorkspaceConfigSchema, WorkspaceInput, defineWorkspace, formatValidationErrors, getAppBuildOrder, getAppGkmConfig, getDependencyEnvVars, getDeployTargetError, getEndpointForStage, isDeployTargetSupported, isPhase2DeployTarget, isWorkspaceConfig, normalizeWorkspace, processConfig, safeValidateWorkspaceConfig, validateWorkspaceConfig, wrapSingleAppAsWorkspace };
|
|
1643
|
-
//# sourceMappingURL=index-
|
|
1679
|
+
export { AppConfig, AppConfigInput, AppInput, AppsRecord, BackendFramework, ConstrainedApps, DeployConfig, DeployTarget, DokployWorkspaceConfig, FrontendFramework, InferAppNames, InferredWorkspaceConfig, LoadedConfig, MailServiceConfig, ModelsConfig, NormalizedAppConfig, NormalizedWorkspace, PHASE_2_DEPLOY_TARGETS, PUBLIC_ENV_PREFIXES, SUPPORTED_DEPLOY_TARGETS, SecretsConfig, ServiceImageConfig, ServicesConfig, SharedConfig, WorkspaceConfig, WorkspaceConfigSchema, WorkspaceInput, defineWorkspace, formatValidationErrors, getAppBuildOrder, getAppGkmConfig, getDependencyEnvVars, getDeployTargetError, getEndpointForStage, getPublicEnvPrefix, isDeployTargetSupported, isPhase2DeployTarget, isWorkspaceConfig, normalizeWorkspace, processConfig, safeValidateWorkspaceConfig, stripPublicPrefix, validateWorkspaceConfig, wrapSingleAppAsWorkspace };
|
|
1680
|
+
//# sourceMappingURL=index-D7iT4dnv.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index-D7iT4dnv.d.mts","names":[],"sources":["../src/deploy/state.ts","../src/deploy/StateProvider.ts","../src/workspace/schema.ts","../src/workspace/types.ts","../src/workspace/publicEnv.ts","../src/workspace/index.ts"],"sourcesContent":[],"mappings":"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"}
|
|
@@ -740,7 +740,7 @@ type BackendFramework = 'hono' | 'better-auth' | 'express' | 'fastify';
|
|
|
740
740
|
* }
|
|
741
741
|
* ```
|
|
742
742
|
*/
|
|
743
|
-
type FrontendFramework = 'nextjs' | 'remix' | 'vite';
|
|
743
|
+
type FrontendFramework = 'nextjs' | 'remix' | 'vite' | 'tanstack-start' | 'expo';
|
|
744
744
|
/**
|
|
745
745
|
* Service image configuration for custom Docker images.
|
|
746
746
|
*
|
|
@@ -1532,6 +1532,38 @@ interface LoadedConfig {
|
|
|
1532
1532
|
*/
|
|
1533
1533
|
declare function isWorkspaceConfig(config: GkmConfig | WorkspaceConfig): config is WorkspaceConfig;
|
|
1534
1534
|
//# sourceMappingURL=types.d.ts.map
|
|
1535
|
+
//#endregion
|
|
1536
|
+
//#region src/workspace/publicEnv.d.ts
|
|
1537
|
+
/**
|
|
1538
|
+
* All public env-var prefixes the toolbox understands.
|
|
1539
|
+
*
|
|
1540
|
+
* Used when resolving incoming var names back to a dependency
|
|
1541
|
+
* (e.g. `VITE_AUTH_URL` → `auth`). A var matching any of these
|
|
1542
|
+
* is considered safe to inline into a client bundle.
|
|
1543
|
+
*/
|
|
1544
|
+
declare const PUBLIC_ENV_PREFIXES: readonly ["NEXT_PUBLIC_", "VITE_", "EXPO_PUBLIC_"];
|
|
1545
|
+
/**
|
|
1546
|
+
* Resolve the public env-var prefix that a frontend framework's bundler
|
|
1547
|
+
* inlines into client code at build time:
|
|
1548
|
+
*
|
|
1549
|
+
* - `nextjs` → `NEXT_PUBLIC_`
|
|
1550
|
+
* - `vite` → `VITE_`
|
|
1551
|
+
* - `tanstack-start` → `VITE_` (uses Vite under the hood)
|
|
1552
|
+
* - `expo` → `EXPO_PUBLIC_`
|
|
1553
|
+
* - `remix` → `''` (Remix exposes via loaders, no prefix convention)
|
|
1554
|
+
*
|
|
1555
|
+
* For backend frameworks or unspecified, falls back to `NEXT_PUBLIC_` to
|
|
1556
|
+
* preserve the historical default. Backend apps never read these vars
|
|
1557
|
+
* from a bundle, so the prefix only affects scaffolding/symmetry.
|
|
1558
|
+
*/
|
|
1559
|
+
declare function getPublicEnvPrefix(framework?: FrontendFramework | BackendFramework): string;
|
|
1560
|
+
/**
|
|
1561
|
+
* Strip a known public prefix from a var name.
|
|
1562
|
+
* Returns the un-prefixed name, or `null` if no prefix matched.
|
|
1563
|
+
*/
|
|
1564
|
+
declare function stripPublicPrefix(name: string): string | null;
|
|
1565
|
+
//# sourceMappingURL=publicEnv.d.ts.map
|
|
1566
|
+
|
|
1535
1567
|
//#endregion
|
|
1536
1568
|
//#region src/workspace/index.d.ts
|
|
1537
1569
|
/**
|
|
@@ -1603,7 +1635,12 @@ declare function getAppGkmConfig(workspace: NormalizedWorkspace, appName: string
|
|
|
1603
1635
|
declare function getAppBuildOrder(workspace: NormalizedWorkspace): string[];
|
|
1604
1636
|
/**
|
|
1605
1637
|
* Generate environment variables for app dependencies.
|
|
1606
|
-
*
|
|
1638
|
+
*
|
|
1639
|
+
* Each dependency gets the un-prefixed `{DEP}_URL` (for server-side use) and,
|
|
1640
|
+
* when the consuming app's framework supports a public-var prefix, also the
|
|
1641
|
+
* prefixed form (e.g. `NEXT_PUBLIC_{DEP}_URL` for Next.js, `VITE_{DEP}_URL`
|
|
1642
|
+
* for Vite/TanStack Start). The prefixed form is what gets bundled into the
|
|
1643
|
+
* client at build time.
|
|
1607
1644
|
*/
|
|
1608
1645
|
declare function getDependencyEnvVars(workspace: NormalizedWorkspace, appName: string, urlPrefix?: string): Record<string, string>;
|
|
1609
1646
|
/**
|
|
@@ -1639,5 +1676,5 @@ declare function getEndpointForStage(dokployConfig: {
|
|
|
1639
1676
|
//# sourceMappingURL=index.d.ts.map
|
|
1640
1677
|
|
|
1641
1678
|
//#endregion
|
|
1642
|
-
export { AppConfig, AppConfigInput, AppInput, AppsRecord, BackendFramework, ConstrainedApps, DeployConfig, DeployTarget, DokployWorkspaceConfig, FrontendFramework, InferAppNames, InferredWorkspaceConfig, LoadedConfig, MailServiceConfig, ModelsConfig, NormalizedAppConfig, NormalizedWorkspace, PHASE_2_DEPLOY_TARGETS, SUPPORTED_DEPLOY_TARGETS, SecretsConfig, ServiceImageConfig, ServicesConfig, SharedConfig, WorkspaceConfig, WorkspaceConfigSchema, WorkspaceInput, defineWorkspace, formatValidationErrors, getAppBuildOrder, getAppGkmConfig, getDependencyEnvVars, getDeployTargetError, getEndpointForStage, isDeployTargetSupported, isPhase2DeployTarget, isWorkspaceConfig, normalizeWorkspace, processConfig, safeValidateWorkspaceConfig, validateWorkspaceConfig, wrapSingleAppAsWorkspace };
|
|
1643
|
-
//# sourceMappingURL=index-
|
|
1679
|
+
export { AppConfig, AppConfigInput, AppInput, AppsRecord, BackendFramework, ConstrainedApps, DeployConfig, DeployTarget, DokployWorkspaceConfig, FrontendFramework, InferAppNames, InferredWorkspaceConfig, LoadedConfig, MailServiceConfig, ModelsConfig, NormalizedAppConfig, NormalizedWorkspace, PHASE_2_DEPLOY_TARGETS, PUBLIC_ENV_PREFIXES, SUPPORTED_DEPLOY_TARGETS, SecretsConfig, ServiceImageConfig, ServicesConfig, SharedConfig, WorkspaceConfig, WorkspaceConfigSchema, WorkspaceInput, defineWorkspace, formatValidationErrors, getAppBuildOrder, getAppGkmConfig, getDependencyEnvVars, getDeployTargetError, getEndpointForStage, getPublicEnvPrefix, isDeployTargetSupported, isPhase2DeployTarget, isWorkspaceConfig, normalizeWorkspace, processConfig, safeValidateWorkspaceConfig, stripPublicPrefix, validateWorkspaceConfig, wrapSingleAppAsWorkspace };
|
|
1680
|
+
//# sourceMappingURL=index-DRQq26DF.d.cts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index-DRQq26DF.d.cts","names":[],"sources":["../src/deploy/state.ts","../src/deploy/StateProvider.ts","../src/workspace/schema.ts","../src/workspace/types.ts","../src/workspace/publicEnv.ts","../src/workspace/index.ts"],"sourcesContent":[],"mappings":"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"}
|