@geekmidas/cli 1.0.1 → 1.1.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/CHANGELOG.md +12 -0
- package/dist/{SSMStateProvider-C4wp4AZe.mjs → SSMStateProvider-BjCi_58g.mjs} +16 -7
- package/dist/SSMStateProvider-BjCi_58g.mjs.map +1 -0
- package/dist/{SSMStateProvider-BxAPU99a.cjs → SSMStateProvider-D79o_JjM.cjs} +16 -7
- package/dist/SSMStateProvider-D79o_JjM.cjs.map +1 -0
- package/dist/{config-BGeJsW1r.cjs → config-CKfif10N.cjs} +2 -2
- package/dist/{config-BGeJsW1r.cjs.map → config-CKfif10N.cjs.map} +1 -1
- package/dist/{config-C6awcFBx.mjs → config-ClfjsfwH.mjs} +2 -2
- package/dist/{config-C6awcFBx.mjs.map → config-ClfjsfwH.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-KFEbMIRa.d.mts → index-CHQs8G3q.d.mts} +6 -1
- package/dist/index-CHQs8G3q.d.mts.map +1 -0
- package/dist/{index-B5rGIc4g.d.cts → index-afBljZKY.d.cts} +6 -1
- package/dist/index-afBljZKY.d.cts.map +1 -0
- package/dist/index.cjs +39 -26
- package/dist/index.cjs.map +1 -1
- package/dist/index.mjs +39 -26
- package/dist/index.mjs.map +1 -1
- package/dist/{openapi-BMFmLnX6.mjs → openapi-C6sa0L8b.mjs} +2 -2
- package/dist/{openapi-BMFmLnX6.mjs.map → openapi-C6sa0L8b.mjs.map} +1 -1
- package/dist/{openapi-D1KXv2Ml.cjs → openapi-D3p6s8UA.cjs} +2 -2
- package/dist/{openapi-D1KXv2Ml.cjs.map → openapi-D3p6s8UA.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-BFRUOOrh.cjs → workspace-CjT323qw.cjs} +3 -2
- package/dist/{workspace-BFRUOOrh.cjs.map → workspace-CjT323qw.cjs.map} +1 -1
- package/dist/{workspace-DAxG3_H2.mjs → workspace-CmITpum4.mjs} +3 -2
- package/dist/{workspace-DAxG3_H2.mjs.map → workspace-CmITpum4.mjs.map} +1 -1
- package/package.json +4 -4
- package/scripts/sync-versions.ts +25 -3
- package/src/deploy/SSMStateProvider.ts +20 -7
- package/src/deploy/StateProvider.ts +1 -1
- package/src/deploy/__tests__/SSMStateProvider.spec.ts +15 -8
- package/src/deploy/__tests__/state-e2e.spec.ts +385 -0
- package/src/init/__tests__/init.spec.ts +10 -1
- package/src/init/versions.ts +24 -2
- package/src/secrets/__tests__/storage.spec.ts +6 -2
- package/src/workspace/__tests__/index.spec.ts +61 -0
- package/src/workspace/index.ts +1 -0
- package/src/workspace/types.ts +7 -0
- package/dist/SSMStateProvider-BxAPU99a.cjs.map +0 -1
- package/dist/SSMStateProvider-C4wp4AZe.mjs.map +0 -1
- package/dist/index-B5rGIc4g.d.cts.map +0 -1
- package/dist/index-KFEbMIRa.d.mts.map +0 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,17 @@
|
|
|
1
1
|
# @geekmidas/cli
|
|
2
2
|
|
|
3
|
+
## 1.1.0
|
|
4
|
+
|
|
5
|
+
### Minor Changes
|
|
6
|
+
|
|
7
|
+
- ✨ [`3b6d7d9`](https://github.com/geekmidas/toolbox/commit/3b6d7d9ed41dc08675395d937248a8ab754af9e1) Thanks [@geekmidas](https://github.com/geekmidas)! - Add state provider configuration to workspace config
|
|
8
|
+
|
|
9
|
+
## 1.0.2
|
|
10
|
+
|
|
11
|
+
### Patch Changes
|
|
12
|
+
|
|
13
|
+
- 🐛 [`159e365`](https://github.com/geekmidas/toolbox/commit/159e36572adb2b489629d4ab2a0142f8ff59b7a8) Thanks [@geekmidas](https://github.com/geekmidas)! - Resolve correct cli version at runtime
|
|
14
|
+
|
|
3
15
|
## 1.0.1
|
|
4
16
|
|
|
5
17
|
### Patch Changes
|
|
@@ -7,12 +7,21 @@ import { GetParameterCommand, ParameterNotFound, PutParameterCommand, SSMClient
|
|
|
7
7
|
* Stores state as encrypted SecureString parameters.
|
|
8
8
|
* Parameter path: /gkm/{workspaceName}/{stage}/state
|
|
9
9
|
*/
|
|
10
|
-
var SSMStateProvider = class {
|
|
11
|
-
client
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
10
|
+
var SSMStateProvider = class SSMStateProvider {
|
|
11
|
+
constructor(workspaceName, client) {
|
|
12
|
+
this.workspaceName = workspaceName;
|
|
13
|
+
this.client = client;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Create an SSMStateProvider with a new SSMClient.
|
|
17
|
+
*/
|
|
18
|
+
static create(options) {
|
|
19
|
+
const client = new SSMClient({
|
|
20
|
+
region: options.region,
|
|
21
|
+
credentials: options.credentials,
|
|
22
|
+
endpoint: options.endpoint
|
|
23
|
+
});
|
|
24
|
+
return new SSMStateProvider(options.workspaceName, client);
|
|
16
25
|
}
|
|
17
26
|
/**
|
|
18
27
|
* Get the SSM parameter name for a stage.
|
|
@@ -49,4 +58,4 @@ var SSMStateProvider = class {
|
|
|
49
58
|
|
|
50
59
|
//#endregion
|
|
51
60
|
export { SSMStateProvider };
|
|
52
|
-
//# sourceMappingURL=SSMStateProvider-
|
|
61
|
+
//# sourceMappingURL=SSMStateProvider-BjCi_58g.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SSMStateProvider-BjCi_58g.mjs","names":["workspaceName: string","client: SSMClient","options: SSMStateProviderOptions","stage: string","state: DokployStageState"],"sources":["../src/deploy/SSMStateProvider.ts"],"sourcesContent":["/**\n * AWS SSM Parameter Store State Provider\n *\n * Stores deployment state as SecureString parameters in AWS SSM.\n * Uses AWS-managed KMS key for encryption (free tier).\n *\n * Parameter naming: /gkm/{workspaceName}/{stage}/state\n */\n\nimport {\n\tGetParameterCommand,\n\tParameterNotFound,\n\tPutParameterCommand,\n\tSSMClient,\n\ttype SSMClientConfig,\n} from '@aws-sdk/client-ssm';\nimport type { AwsRegion, StateProvider } from './StateProvider';\nimport type { DokployStageState } from './state';\n\nexport interface SSMStateProviderOptions {\n\t/** Workspace name (used in parameter path) */\n\tworkspaceName: string;\n\t/** AWS region */\n\tregion?: AwsRegion;\n\t/** AWS credentials (optional - uses default credential chain if not provided) */\n\tcredentials?: SSMClientConfig['credentials'];\n\t/** Custom endpoint (for LocalStack or other S3-compatible services) */\n\tendpoint?: string;\n}\n\n/**\n * AWS SSM Parameter Store state provider.\n *\n * Stores state as encrypted SecureString parameters.\n * Parameter path: /gkm/{workspaceName}/{stage}/state\n */\nexport class SSMStateProvider implements StateProvider {\n\tconstructor(\n\t\treadonly workspaceName: string,\n\t\tprivate readonly client: SSMClient,\n\t) {}\n\n\t/**\n\t * Create an SSMStateProvider with a new SSMClient.\n\t */\n\tstatic create(options: SSMStateProviderOptions): SSMStateProvider {\n\t\tconst client = new SSMClient({\n\t\t\tregion: options.region,\n\t\t\tcredentials: options.credentials,\n\t\t\tendpoint: options.endpoint,\n\t\t});\n\n\t\treturn new SSMStateProvider(options.workspaceName, client);\n\t}\n\n\t/**\n\t * Get the SSM parameter name for a stage.\n\t */\n\tprivate getParameterName(stage: string): string {\n\t\treturn `/gkm/${this.workspaceName}/${stage}/state`;\n\t}\n\n\tasync read(stage: string): Promise<DokployStageState | null> {\n\t\tconst parameterName = this.getParameterName(stage);\n\n\t\ttry {\n\t\t\tconst response = await this.client.send(\n\t\t\t\tnew GetParameterCommand({\n\t\t\t\t\tName: parameterName,\n\t\t\t\t\tWithDecryption: true,\n\t\t\t\t}),\n\t\t\t);\n\n\t\t\tif (!response.Parameter?.Value) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\treturn JSON.parse(response.Parameter.Value) as DokployStageState;\n\t\t} catch (error) {\n\t\t\t// Parameter doesn't exist - return null (new deployment)\n\t\t\tif (error instanceof ParameterNotFound) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\t// Re-throw other errors (permission denied, network, etc.)\n\t\t\tthrow error;\n\t\t}\n\t}\n\n\tasync write(stage: string, state: DokployStageState): Promise<void> {\n\t\tconst parameterName = this.getParameterName(stage);\n\n\t\t// Update last deployed timestamp\n\t\tstate.lastDeployedAt = new Date().toISOString();\n\n\t\tawait this.client.send(\n\t\t\tnew PutParameterCommand({\n\t\t\t\tName: parameterName,\n\t\t\t\tValue: JSON.stringify(state),\n\t\t\t\tType: 'SecureString',\n\t\t\t\tOverwrite: true,\n\t\t\t\tDescription: `GKM deployment state for ${this.workspaceName}/${stage}`,\n\t\t\t}),\n\t\t);\n\t}\n}\n"],"mappings":";;;;;;;;;AAoCA,IAAa,mBAAb,MAAa,iBAA0C;CACtD,YACUA,eACQC,QAChB;EAFQ;EACQ;CACd;;;;CAKJ,OAAO,OAAOC,SAAoD;EACjE,MAAM,SAAS,IAAI,UAAU;GAC5B,QAAQ,QAAQ;GAChB,aAAa,QAAQ;GACrB,UAAU,QAAQ;EAClB;AAED,SAAO,IAAI,iBAAiB,QAAQ,eAAe;CACnD;;;;CAKD,AAAQ,iBAAiBC,OAAuB;AAC/C,UAAQ,OAAO,KAAK,cAAc,GAAG,MAAM;CAC3C;CAED,MAAM,KAAKA,OAAkD;EAC5D,MAAM,gBAAgB,KAAK,iBAAiB,MAAM;AAElD,MAAI;GACH,MAAM,WAAW,MAAM,KAAK,OAAO,KAClC,IAAI,oBAAoB;IACvB,MAAM;IACN,gBAAgB;GAChB,GACD;AAED,QAAK,SAAS,WAAW,MACxB,QAAO;AAGR,UAAO,KAAK,MAAM,SAAS,UAAU,MAAM;EAC3C,SAAQ,OAAO;AAEf,OAAI,iBAAiB,kBACpB,QAAO;AAIR,SAAM;EACN;CACD;CAED,MAAM,MAAMA,OAAeC,OAAyC;EACnE,MAAM,gBAAgB,KAAK,iBAAiB,MAAM;AAGlD,QAAM,iBAAiB,qBAAI,QAAO,aAAa;AAE/C,QAAM,KAAK,OAAO,KACjB,IAAI,oBAAoB;GACvB,MAAM;GACN,OAAO,KAAK,UAAU,MAAM;GAC5B,MAAM;GACN,WAAW;GACX,cAAc,2BAA2B,KAAK,cAAc,GAAG,MAAM;EACrE,GACD;CACD;AACD"}
|
|
@@ -8,12 +8,21 @@ const __aws_sdk_client_ssm = require_chunk.__toESM(require("@aws-sdk/client-ssm"
|
|
|
8
8
|
* Stores state as encrypted SecureString parameters.
|
|
9
9
|
* Parameter path: /gkm/{workspaceName}/{stage}/state
|
|
10
10
|
*/
|
|
11
|
-
var SSMStateProvider = class {
|
|
12
|
-
client
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
11
|
+
var SSMStateProvider = class SSMStateProvider {
|
|
12
|
+
constructor(workspaceName, client) {
|
|
13
|
+
this.workspaceName = workspaceName;
|
|
14
|
+
this.client = client;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Create an SSMStateProvider with a new SSMClient.
|
|
18
|
+
*/
|
|
19
|
+
static create(options) {
|
|
20
|
+
const client = new __aws_sdk_client_ssm.SSMClient({
|
|
21
|
+
region: options.region,
|
|
22
|
+
credentials: options.credentials,
|
|
23
|
+
endpoint: options.endpoint
|
|
24
|
+
});
|
|
25
|
+
return new SSMStateProvider(options.workspaceName, client);
|
|
17
26
|
}
|
|
18
27
|
/**
|
|
19
28
|
* Get the SSM parameter name for a stage.
|
|
@@ -50,4 +59,4 @@ var SSMStateProvider = class {
|
|
|
50
59
|
|
|
51
60
|
//#endregion
|
|
52
61
|
exports.SSMStateProvider = SSMStateProvider;
|
|
53
|
-
//# sourceMappingURL=SSMStateProvider-
|
|
62
|
+
//# sourceMappingURL=SSMStateProvider-D79o_JjM.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SSMStateProvider-D79o_JjM.cjs","names":["workspaceName: string","client: SSMClient","options: SSMStateProviderOptions","SSMClient","stage: string","GetParameterCommand","ParameterNotFound","state: DokployStageState","PutParameterCommand"],"sources":["../src/deploy/SSMStateProvider.ts"],"sourcesContent":["/**\n * AWS SSM Parameter Store State Provider\n *\n * Stores deployment state as SecureString parameters in AWS SSM.\n * Uses AWS-managed KMS key for encryption (free tier).\n *\n * Parameter naming: /gkm/{workspaceName}/{stage}/state\n */\n\nimport {\n\tGetParameterCommand,\n\tParameterNotFound,\n\tPutParameterCommand,\n\tSSMClient,\n\ttype SSMClientConfig,\n} from '@aws-sdk/client-ssm';\nimport type { AwsRegion, StateProvider } from './StateProvider';\nimport type { DokployStageState } from './state';\n\nexport interface SSMStateProviderOptions {\n\t/** Workspace name (used in parameter path) */\n\tworkspaceName: string;\n\t/** AWS region */\n\tregion?: AwsRegion;\n\t/** AWS credentials (optional - uses default credential chain if not provided) */\n\tcredentials?: SSMClientConfig['credentials'];\n\t/** Custom endpoint (for LocalStack or other S3-compatible services) */\n\tendpoint?: string;\n}\n\n/**\n * AWS SSM Parameter Store state provider.\n *\n * Stores state as encrypted SecureString parameters.\n * Parameter path: /gkm/{workspaceName}/{stage}/state\n */\nexport class SSMStateProvider implements StateProvider {\n\tconstructor(\n\t\treadonly workspaceName: string,\n\t\tprivate readonly client: SSMClient,\n\t) {}\n\n\t/**\n\t * Create an SSMStateProvider with a new SSMClient.\n\t */\n\tstatic create(options: SSMStateProviderOptions): SSMStateProvider {\n\t\tconst client = new SSMClient({\n\t\t\tregion: options.region,\n\t\t\tcredentials: options.credentials,\n\t\t\tendpoint: options.endpoint,\n\t\t});\n\n\t\treturn new SSMStateProvider(options.workspaceName, client);\n\t}\n\n\t/**\n\t * Get the SSM parameter name for a stage.\n\t */\n\tprivate getParameterName(stage: string): string {\n\t\treturn `/gkm/${this.workspaceName}/${stage}/state`;\n\t}\n\n\tasync read(stage: string): Promise<DokployStageState | null> {\n\t\tconst parameterName = this.getParameterName(stage);\n\n\t\ttry {\n\t\t\tconst response = await this.client.send(\n\t\t\t\tnew GetParameterCommand({\n\t\t\t\t\tName: parameterName,\n\t\t\t\t\tWithDecryption: true,\n\t\t\t\t}),\n\t\t\t);\n\n\t\t\tif (!response.Parameter?.Value) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\treturn JSON.parse(response.Parameter.Value) as DokployStageState;\n\t\t} catch (error) {\n\t\t\t// Parameter doesn't exist - return null (new deployment)\n\t\t\tif (error instanceof ParameterNotFound) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\t// Re-throw other errors (permission denied, network, etc.)\n\t\t\tthrow error;\n\t\t}\n\t}\n\n\tasync write(stage: string, state: DokployStageState): Promise<void> {\n\t\tconst parameterName = this.getParameterName(stage);\n\n\t\t// Update last deployed timestamp\n\t\tstate.lastDeployedAt = new Date().toISOString();\n\n\t\tawait this.client.send(\n\t\t\tnew PutParameterCommand({\n\t\t\t\tName: parameterName,\n\t\t\t\tValue: JSON.stringify(state),\n\t\t\t\tType: 'SecureString',\n\t\t\t\tOverwrite: true,\n\t\t\t\tDescription: `GKM deployment state for ${this.workspaceName}/${stage}`,\n\t\t\t}),\n\t\t);\n\t}\n}\n"],"mappings":";;;;;;;;;;AAoCA,IAAa,mBAAb,MAAa,iBAA0C;CACtD,YACUA,eACQC,QAChB;EAFQ;EACQ;CACd;;;;CAKJ,OAAO,OAAOC,SAAoD;EACjE,MAAM,SAAS,IAAIC,+BAAU;GAC5B,QAAQ,QAAQ;GAChB,aAAa,QAAQ;GACrB,UAAU,QAAQ;EAClB;AAED,SAAO,IAAI,iBAAiB,QAAQ,eAAe;CACnD;;;;CAKD,AAAQ,iBAAiBC,OAAuB;AAC/C,UAAQ,OAAO,KAAK,cAAc,GAAG,MAAM;CAC3C;CAED,MAAM,KAAKA,OAAkD;EAC5D,MAAM,gBAAgB,KAAK,iBAAiB,MAAM;AAElD,MAAI;GACH,MAAM,WAAW,MAAM,KAAK,OAAO,KAClC,IAAIC,yCAAoB;IACvB,MAAM;IACN,gBAAgB;GAChB,GACD;AAED,QAAK,SAAS,WAAW,MACxB,QAAO;AAGR,UAAO,KAAK,MAAM,SAAS,UAAU,MAAM;EAC3C,SAAQ,OAAO;AAEf,OAAI,iBAAiBC,uCACpB,QAAO;AAIR,SAAM;EACN;CACD;CAED,MAAM,MAAMF,OAAeG,OAAyC;EACnE,MAAM,gBAAgB,KAAK,iBAAiB,MAAM;AAGlD,QAAM,iBAAiB,qBAAI,QAAO,aAAa;AAE/C,QAAM,KAAK,OAAO,KACjB,IAAIC,yCAAoB;GACvB,MAAM;GACN,OAAO,KAAK,UAAU,MAAM;GAC5B,MAAM;GACN,WAAW;GACX,cAAc,2BAA2B,KAAK,cAAc,GAAG,MAAM;EACrE,GACD;CACD;AACD"}
|
|
@@ -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-CjT323qw.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-CKfif10N.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config-BGeJsW1r.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-CKfif10N.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-CmITpum4.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-ClfjsfwH.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config-C6awcFBx.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-ClfjsfwH.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-CjT323qw.cjs');
|
|
2
|
+
const require_config = require('./config-CKfif10N.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-afBljZKY.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-BldpmqQX.mjs";
|
|
2
|
-
import { LoadedConfig, NormalizedAppConfig, NormalizedWorkspace, WorkspaceConfig, defineWorkspace } from "./index-
|
|
2
|
+
import { LoadedConfig, NormalizedAppConfig, NormalizedWorkspace, WorkspaceConfig, defineWorkspace } from "./index-CHQs8G3q.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-CmITpum4.mjs";
|
|
2
|
+
import { defineConfig, getAppNameFromCwd, loadAppConfig, loadConfig, loadWorkspaceConfig, parseModuleConfig } from "./config-ClfjsfwH.mjs";
|
|
3
3
|
|
|
4
4
|
export { defineConfig, defineWorkspace, getAppNameFromCwd, loadAppConfig, loadConfig, loadWorkspaceConfig, parseModuleConfig };
|
|
@@ -1205,6 +1205,8 @@ type WorkspaceInput<TApps extends AppsRecord> = {
|
|
|
1205
1205
|
services?: ServicesConfig;
|
|
1206
1206
|
/** Encrypted secrets configuration */
|
|
1207
1207
|
secrets?: SecretsConfig;
|
|
1208
|
+
/** State provider configuration (local filesystem by default, or SSM for team collaboration) */
|
|
1209
|
+
state?: StateConfig;
|
|
1208
1210
|
};
|
|
1209
1211
|
/**
|
|
1210
1212
|
* Extract app names from apps record.
|
|
@@ -1222,6 +1224,7 @@ type InferredWorkspaceConfig<TApps extends AppsRecord> = {
|
|
|
1222
1224
|
deploy?: DeployConfig;
|
|
1223
1225
|
services?: ServicesConfig;
|
|
1224
1226
|
secrets?: SecretsConfig;
|
|
1227
|
+
state?: StateConfig;
|
|
1225
1228
|
};
|
|
1226
1229
|
/** @deprecated Use WorkspaceInput */
|
|
1227
1230
|
|
|
@@ -1313,6 +1316,8 @@ interface WorkspaceConfig {
|
|
|
1313
1316
|
services?: ServicesConfig;
|
|
1314
1317
|
/** Encrypted secrets configuration */
|
|
1315
1318
|
secrets?: SecretsConfig;
|
|
1319
|
+
/** State provider configuration (local filesystem by default, or SSM for team collaboration) */
|
|
1320
|
+
state?: StateConfig;
|
|
1316
1321
|
}
|
|
1317
1322
|
/**
|
|
1318
1323
|
* Normalized app configuration with resolved defaults.
|
|
@@ -1466,4 +1471,4 @@ declare function getDependencyEnvVars(workspace: NormalizedWorkspace, appName: s
|
|
|
1466
1471
|
|
|
1467
1472
|
//#endregion
|
|
1468
1473
|
export { AppConfig, AppConfigInput, AppInput, AppsRecord, BackendFramework, ClientConfig, ConstrainedApps, DeployConfig, DeployTarget, DokployWorkspaceConfig, FrontendFramework, InferAppNames, InferredWorkspaceConfig, LoadedConfig, MailServiceConfig, ModelsConfig, NormalizedAppConfig, NormalizedWorkspace, PHASE_2_DEPLOY_TARGETS, SUPPORTED_DEPLOY_TARGETS, SecretsConfig, ServiceImageConfig, ServicesConfig, SharedConfig, WorkspaceConfig, WorkspaceConfigSchema, WorkspaceInput, defineWorkspace, formatValidationErrors, getAppBuildOrder, getAppGkmConfig, getDependencyEnvVars, getDeployTargetError, isDeployTargetSupported, isPhase2DeployTarget, isWorkspaceConfig, normalizeWorkspace, processConfig, safeValidateWorkspaceConfig, validateWorkspaceConfig, wrapSingleAppAsWorkspace };
|
|
1469
|
-
//# sourceMappingURL=index-
|
|
1474
|
+
//# sourceMappingURL=index-CHQs8G3q.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index-CHQs8G3q.d.mts","names":[],"sources":["../src/deploy/state.ts","../src/deploy/StateProvider.ts","../src/workspace/schema.ts","../src/workspace/types.ts","../src/workspace/index.ts"],"sourcesContent":[],"mappings":"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"}
|
|
@@ -1205,6 +1205,8 @@ type WorkspaceInput<TApps extends AppsRecord> = {
|
|
|
1205
1205
|
services?: ServicesConfig;
|
|
1206
1206
|
/** Encrypted secrets configuration */
|
|
1207
1207
|
secrets?: SecretsConfig;
|
|
1208
|
+
/** State provider configuration (local filesystem by default, or SSM for team collaboration) */
|
|
1209
|
+
state?: StateConfig;
|
|
1208
1210
|
};
|
|
1209
1211
|
/**
|
|
1210
1212
|
* Extract app names from apps record.
|
|
@@ -1222,6 +1224,7 @@ type InferredWorkspaceConfig<TApps extends AppsRecord> = {
|
|
|
1222
1224
|
deploy?: DeployConfig;
|
|
1223
1225
|
services?: ServicesConfig;
|
|
1224
1226
|
secrets?: SecretsConfig;
|
|
1227
|
+
state?: StateConfig;
|
|
1225
1228
|
};
|
|
1226
1229
|
/** @deprecated Use WorkspaceInput */
|
|
1227
1230
|
|
|
@@ -1313,6 +1316,8 @@ interface WorkspaceConfig {
|
|
|
1313
1316
|
services?: ServicesConfig;
|
|
1314
1317
|
/** Encrypted secrets configuration */
|
|
1315
1318
|
secrets?: SecretsConfig;
|
|
1319
|
+
/** State provider configuration (local filesystem by default, or SSM for team collaboration) */
|
|
1320
|
+
state?: StateConfig;
|
|
1316
1321
|
}
|
|
1317
1322
|
/**
|
|
1318
1323
|
* Normalized app configuration with resolved defaults.
|
|
@@ -1466,4 +1471,4 @@ declare function getDependencyEnvVars(workspace: NormalizedWorkspace, appName: s
|
|
|
1466
1471
|
|
|
1467
1472
|
//#endregion
|
|
1468
1473
|
export { AppConfig, AppConfigInput, AppInput, AppsRecord, BackendFramework, ClientConfig, ConstrainedApps, DeployConfig, DeployTarget, DokployWorkspaceConfig, FrontendFramework, InferAppNames, InferredWorkspaceConfig, LoadedConfig, MailServiceConfig, ModelsConfig, NormalizedAppConfig, NormalizedWorkspace, PHASE_2_DEPLOY_TARGETS, SUPPORTED_DEPLOY_TARGETS, SecretsConfig, ServiceImageConfig, ServicesConfig, SharedConfig, WorkspaceConfig, WorkspaceConfigSchema, WorkspaceInput, defineWorkspace, formatValidationErrors, getAppBuildOrder, getAppGkmConfig, getDependencyEnvVars, getDeployTargetError, isDeployTargetSupported, isPhase2DeployTarget, isWorkspaceConfig, normalizeWorkspace, processConfig, safeValidateWorkspaceConfig, validateWorkspaceConfig, wrapSingleAppAsWorkspace };
|
|
1469
|
-
//# sourceMappingURL=index-
|
|
1474
|
+
//# sourceMappingURL=index-afBljZKY.d.cts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index-afBljZKY.d.cts","names":[],"sources":["../src/deploy/state.ts","../src/deploy/StateProvider.ts","../src/workspace/schema.ts","../src/workspace/types.ts","../src/workspace/index.ts"],"sourcesContent":[],"mappings":"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"}
|
package/dist/index.cjs
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
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-
|
|
3
|
+
const require_workspace = require('./workspace-CjT323qw.cjs');
|
|
4
|
+
const require_config = require('./config-CKfif10N.cjs');
|
|
5
5
|
const require_credentials = require('./credentials-C8DWtnMY.cjs');
|
|
6
|
-
const require_openapi = require('./openapi-
|
|
6
|
+
const require_openapi = require('./openapi-D3p6s8UA.cjs');
|
|
7
7
|
const require_storage = require('./storage-CoCNe0Pt.cjs');
|
|
8
8
|
const require_dokploy_api = require('./dokploy-api-CQvhV6Hd.cjs');
|
|
9
9
|
const require_encryption = require('./encryption-BE0UOb8j.cjs');
|
|
@@ -32,7 +32,7 @@ const prompts = require_chunk.__toESM(require("prompts"));
|
|
|
32
32
|
|
|
33
33
|
//#region package.json
|
|
34
34
|
var name = "@geekmidas/cli";
|
|
35
|
-
var version = "1.0.
|
|
35
|
+
var version = "1.0.2";
|
|
36
36
|
var description = "CLI tools for building Lambda handlers, server applications, and generating OpenAPI specs";
|
|
37
37
|
var private$1 = false;
|
|
38
38
|
var type = "module";
|
|
@@ -1126,13 +1126,13 @@ async function validateFrontendApp(appName, appPath, workspaceRoot) {
|
|
|
1126
1126
|
if (!hasConfigFile) errors.push(`Next.js config file not found. Expected one of: ${NEXTJS_CONFIG_FILES.join(", ")}`);
|
|
1127
1127
|
const packageJsonPath = (0, node_path.join)(fullPath, "package.json");
|
|
1128
1128
|
if ((0, node_fs.existsSync)(packageJsonPath)) try {
|
|
1129
|
-
const pkg = require(packageJsonPath);
|
|
1129
|
+
const pkg$1 = require(packageJsonPath);
|
|
1130
1130
|
const deps = {
|
|
1131
|
-
...pkg.dependencies,
|
|
1132
|
-
...pkg.devDependencies
|
|
1131
|
+
...pkg$1.dependencies,
|
|
1132
|
+
...pkg$1.devDependencies
|
|
1133
1133
|
};
|
|
1134
1134
|
if (!deps.next) errors.push("Next.js not found in dependencies. Run: pnpm add next react react-dom");
|
|
1135
|
-
if (!pkg.scripts?.dev) warnings.push("No \"dev\" script found in package.json. Turbo expects a \"dev\" script to run.");
|
|
1135
|
+
if (!pkg$1.scripts?.dev) warnings.push("No \"dev\" script found in package.json. Turbo expects a \"dev\" script to run.");
|
|
1136
1136
|
} catch {
|
|
1137
1137
|
errors.push(`Failed to read package.json at ${packageJsonPath}`);
|
|
1138
1138
|
}
|
|
@@ -3365,8 +3365,8 @@ function resolveDockerConfig$1(config) {
|
|
|
3365
3365
|
const docker = config.docker ?? {};
|
|
3366
3366
|
let defaultImageName = "api";
|
|
3367
3367
|
try {
|
|
3368
|
-
const pkg = require(`${process.cwd()}/package.json`);
|
|
3369
|
-
if (pkg.name) defaultImageName = pkg.name.replace(/^@[^/]+\//, "");
|
|
3368
|
+
const pkg$1 = require(`${process.cwd()}/package.json`);
|
|
3369
|
+
if (pkg$1.name) defaultImageName = pkg$1.name.replace(/^@[^/]+\//, "");
|
|
3370
3370
|
} catch {}
|
|
3371
3371
|
return {
|
|
3372
3372
|
registry: docker.registry ?? "",
|
|
@@ -3722,9 +3722,9 @@ async function dockerCommand(options) {
|
|
|
3722
3722
|
} else throw new Error("Monorepo detected but turbo.json not found.\n\nDocker builds in monorepos require Turborepo for proper dependency isolation.\n\nTo fix this:\n 1. Install turbo: pnpm add -Dw turbo\n 2. Create turbo.json in your monorepo root\n 3. Run this command again\n\nSee: https://turbo.build/repo/docs/guides/tools/docker");
|
|
3723
3723
|
let turboPackage = options.turboPackage ?? dockerConfig.imageName;
|
|
3724
3724
|
if (useTurbo && !options.turboPackage) try {
|
|
3725
|
-
const pkg = require(`${process.cwd()}/package.json`);
|
|
3726
|
-
if (pkg.name) {
|
|
3727
|
-
turboPackage = pkg.name;
|
|
3725
|
+
const pkg$1 = require(`${process.cwd()}/package.json`);
|
|
3726
|
+
if (pkg$1.name) {
|
|
3727
|
+
turboPackage = pkg$1.name;
|
|
3728
3728
|
logger$5.log(` Turbo package: ${turboPackage}`);
|
|
3729
3729
|
}
|
|
3730
3730
|
} catch {}
|
|
@@ -3849,8 +3849,8 @@ function getAppPackageName(appPath) {
|
|
|
3849
3849
|
const pkgPath = (0, node_path.join)(appPath, "package.json");
|
|
3850
3850
|
if (!(0, node_fs.existsSync)(pkgPath)) return void 0;
|
|
3851
3851
|
const content = (0, node_fs.readFileSync)(pkgPath, "utf-8");
|
|
3852
|
-
const pkg = JSON.parse(content);
|
|
3853
|
-
return pkg.name;
|
|
3852
|
+
const pkg$1 = JSON.parse(content);
|
|
3853
|
+
return pkg$1.name;
|
|
3854
3854
|
} catch {
|
|
3855
3855
|
return void 0;
|
|
3856
3856
|
}
|
|
@@ -3946,8 +3946,8 @@ function getAppNameFromCwd$1() {
|
|
|
3946
3946
|
const packageJsonPath = (0, node_path.join)(process.cwd(), "package.json");
|
|
3947
3947
|
if (!(0, node_fs.existsSync)(packageJsonPath)) return void 0;
|
|
3948
3948
|
try {
|
|
3949
|
-
const pkg = JSON.parse((0, node_fs.readFileSync)(packageJsonPath, "utf-8"));
|
|
3950
|
-
if (pkg.name) return pkg.name.replace(/^@[^/]+\//, "");
|
|
3949
|
+
const pkg$1 = JSON.parse((0, node_fs.readFileSync)(packageJsonPath, "utf-8"));
|
|
3950
|
+
if (pkg$1.name) return pkg$1.name.replace(/^@[^/]+\//, "");
|
|
3951
3951
|
} catch {}
|
|
3952
3952
|
return void 0;
|
|
3953
3953
|
}
|
|
@@ -3963,8 +3963,8 @@ function getAppNameFromPackageJson() {
|
|
|
3963
3963
|
const packageJsonPath = (0, node_path.join)(projectRoot, "package.json");
|
|
3964
3964
|
if (!(0, node_fs.existsSync)(packageJsonPath)) return void 0;
|
|
3965
3965
|
try {
|
|
3966
|
-
const pkg = JSON.parse((0, node_fs.readFileSync)(packageJsonPath, "utf-8"));
|
|
3967
|
-
if (pkg.name) return pkg.name.replace(/^@[^/]+\//, "");
|
|
3966
|
+
const pkg$1 = JSON.parse((0, node_fs.readFileSync)(packageJsonPath, "utf-8"));
|
|
3967
|
+
if (pkg$1.name) return pkg$1.name.replace(/^@[^/]+\//, "");
|
|
3968
3968
|
} catch {}
|
|
3969
3969
|
return void 0;
|
|
3970
3970
|
}
|
|
@@ -4541,10 +4541,10 @@ async function createStateProvider(options) {
|
|
|
4541
4541
|
if (provider === "ssm") {
|
|
4542
4542
|
if (!workspaceName) throw new Error("Workspace name is required for SSM state provider. Set \"name\" in gkm.config.ts.");
|
|
4543
4543
|
const { LocalStateProvider } = await Promise.resolve().then(() => require("./LocalStateProvider-CdspeSVL.cjs"));
|
|
4544
|
-
const { SSMStateProvider } = await Promise.resolve().then(() => require("./SSMStateProvider-
|
|
4544
|
+
const { SSMStateProvider } = await Promise.resolve().then(() => require("./SSMStateProvider-D79o_JjM.cjs"));
|
|
4545
4545
|
const { CachedStateProvider: CachedStateProvider$1 } = await Promise.resolve().then(() => require("./CachedStateProvider-D_uISMmJ.cjs"));
|
|
4546
4546
|
const local = new LocalStateProvider(workspaceRoot);
|
|
4547
|
-
const ssm =
|
|
4547
|
+
const ssm = SSMStateProvider.create({
|
|
4548
4548
|
workspaceName,
|
|
4549
4549
|
region: config.region
|
|
4550
4550
|
});
|
|
@@ -4659,8 +4659,8 @@ const __dirname$1 = (0, node_path.dirname)(__filename$1);
|
|
|
4659
4659
|
* This ensures tsx is available regardless of whether the target project has it installed.
|
|
4660
4660
|
*/
|
|
4661
4661
|
function resolveTsxPath() {
|
|
4662
|
-
const require$
|
|
4663
|
-
return require$
|
|
4662
|
+
const require$2 = (0, node_module.createRequire)(require("url").pathToFileURL(__filename).href);
|
|
4663
|
+
return require$2.resolve("tsx");
|
|
4664
4664
|
}
|
|
4665
4665
|
/**
|
|
4666
4666
|
* Resolve the path to a sniffer helper file.
|
|
@@ -6292,17 +6292,29 @@ function rotateServicePassword(secrets, service) {
|
|
|
6292
6292
|
|
|
6293
6293
|
//#endregion
|
|
6294
6294
|
//#region src/init/versions.ts
|
|
6295
|
+
const require$1 = (0, node_module.createRequire)(require("url").pathToFileURL(__filename).href);
|
|
6296
|
+
function loadPackageJson() {
|
|
6297
|
+
try {
|
|
6298
|
+
return require$1("../package.json");
|
|
6299
|
+
} catch {
|
|
6300
|
+
return require$1("../../package.json");
|
|
6301
|
+
}
|
|
6302
|
+
}
|
|
6303
|
+
const pkg = loadPackageJson();
|
|
6304
|
+
/**
|
|
6305
|
+
* CLI version resolved from package.json at runtime
|
|
6306
|
+
*/
|
|
6307
|
+
const CLI_VERSION = `~${pkg.version}`;
|
|
6295
6308
|
/**
|
|
6296
6309
|
* Package versions for @geekmidas packages
|
|
6297
6310
|
*
|
|
6298
|
-
* AUTO-GENERATED - Do not edit manually
|
|
6311
|
+
* AUTO-GENERATED (except CLI) - Do not edit manually
|
|
6299
6312
|
* Run: pnpm --filter @geekmidas/cli sync-versions
|
|
6300
6313
|
*/
|
|
6301
6314
|
const GEEKMIDAS_VERSIONS = {
|
|
6302
6315
|
"@geekmidas/audit": "~1.0.0",
|
|
6303
6316
|
"@geekmidas/auth": "~1.0.0",
|
|
6304
6317
|
"@geekmidas/cache": "~1.0.0",
|
|
6305
|
-
"@geekmidas/cli": "~1.0.0",
|
|
6306
6318
|
"@geekmidas/client": "~1.0.0",
|
|
6307
6319
|
"@geekmidas/cloud": "~1.0.0",
|
|
6308
6320
|
"@geekmidas/constructs": "~1.0.0",
|
|
@@ -6318,7 +6330,8 @@ const GEEKMIDAS_VERSIONS = {
|
|
|
6318
6330
|
"@geekmidas/storage": "~1.0.0",
|
|
6319
6331
|
"@geekmidas/studio": "~1.0.0",
|
|
6320
6332
|
"@geekmidas/telescope": "~1.0.0",
|
|
6321
|
-
"@geekmidas/testkit": "~1.0.0"
|
|
6333
|
+
"@geekmidas/testkit": "~1.0.0",
|
|
6334
|
+
"@geekmidas/cli": CLI_VERSION
|
|
6322
6335
|
};
|
|
6323
6336
|
|
|
6324
6337
|
//#endregion
|