@mono-labs/cli 0.0.238 → 0.0.243

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (146) hide show
  1. package/bin/mono.js +1 -1
  2. package/dist/index.js +32 -51
  3. package/dist/lib/app.js +52 -0
  4. package/dist/lib/commands/build-process/boot.js +12 -0
  5. package/dist/lib/commands/build-process/cliFactory.js +145 -0
  6. package/dist/lib/commands/build-process/dataLayer.js +56 -0
  7. package/dist/lib/commands/build-process/index.js +11 -0
  8. package/dist/lib/commands/build-process/readEnv.js +34 -0
  9. package/dist/lib/commands/build-process/runMonoCommand.js +84 -0
  10. package/dist/lib/commands/build-process/runners/processManager.js +45 -0
  11. package/dist/lib/commands/build-process/runners/runBackground.js +46 -0
  12. package/dist/lib/commands/build-process/runners/runForeground.js +52 -0
  13. package/dist/lib/commands/build-process/test.js +32 -0
  14. package/dist/lib/commands/build-process/testflag.js +4 -0
  15. package/dist/lib/commands/build-process/validators.js +17 -0
  16. package/dist/lib/commands/loadFromRoot.js +53 -0
  17. package/dist/lib/commands/prune/index.js +10 -0
  18. package/dist/lib/commands/prune/prune.js +49 -0
  19. package/dist/lib/config.js +6 -0
  20. package/dist/lib/filterUnwantedEnvVars.js +88 -0
  21. package/dist/lib/generateNewEnvList.js +17 -0
  22. package/dist/lib/index.js +49 -0
  23. package/dist/src/cdk/cdk.js +6 -0
  24. package/dist/src/cdk/index.js +17 -0
  25. package/dist/{expo.js → src/expo.js} +18 -34
  26. package/dist/src/index.js +56 -0
  27. package/dist/src/merge-env.js +25 -0
  28. package/dist/{project → src/project}/build-mono-readme.js +11 -20
  29. package/dist/{project → src/project}/generate-readme.js +6 -13
  30. package/dist/{project → src/project}/index.js +4 -12
  31. package/dist/{stack.js → src/stack.js} +2 -2
  32. package/dist/src/tools.js +38 -0
  33. package/dist/types/index.d.ts +50 -9
  34. package/dist/types/lib/app.d.ts +3 -0
  35. package/dist/types/lib/commands/build-process/boot.d.ts +8 -0
  36. package/dist/types/lib/commands/build-process/cliFactory.d.ts +32 -0
  37. package/dist/types/lib/commands/build-process/dataLayer.d.ts +7 -0
  38. package/dist/types/lib/commands/build-process/readEnv.d.ts +1 -0
  39. package/dist/types/lib/commands/build-process/runMonoCommand.d.ts +10 -0
  40. package/dist/types/lib/commands/build-process/runners/processManager.d.ts +5 -0
  41. package/dist/types/lib/commands/build-process/runners/runBackground.d.ts +2 -0
  42. package/dist/types/lib/commands/build-process/runners/runForeground.d.ts +6 -0
  43. package/dist/types/lib/commands/build-process/test.d.ts +1 -0
  44. package/dist/types/lib/commands/build-process/testflag.d.ts +1 -0
  45. package/dist/types/lib/commands/build-process/validators.d.ts +1 -0
  46. package/dist/types/lib/commands/loadFromRoot.d.ts +7 -0
  47. package/dist/types/lib/commands/prune/prune.d.ts +1 -0
  48. package/dist/types/lib/config.d.ts +2 -0
  49. package/dist/types/lib/filterUnwantedEnvVars.d.ts +2 -0
  50. package/dist/types/lib/generateNewEnvList.d.ts +1 -0
  51. package/dist/types/lib/index.d.ts +2 -0
  52. package/dist/types/src/cdk/cdk.d.ts +1 -0
  53. package/dist/types/src/cdk/index.d.ts +1 -0
  54. package/dist/types/src/expo.d.ts +4 -0
  55. package/dist/types/src/index.d.ts +15 -0
  56. package/dist/types/src/project/build-mono-readme.d.ts +1 -0
  57. package/dist/types/src/project/generate-readme.d.ts +1 -0
  58. package/dist/types/{project → src/project}/index.d.ts +1 -1
  59. package/dist/types/src/project/merge-env.d.ts +1 -0
  60. package/dist/types/src/tools.d.ts +3 -0
  61. package/lib/app.ts +58 -0
  62. package/lib/commands/build-process/boot.ts +21 -0
  63. package/lib/commands/build-process/cliFactory.ts +219 -0
  64. package/lib/commands/build-process/dataLayer.ts +61 -0
  65. package/lib/commands/build-process/index.ts +14 -0
  66. package/lib/commands/build-process/readEnv.ts +37 -0
  67. package/lib/commands/build-process/runMonoCommand.ts +97 -0
  68. package/lib/commands/build-process/runners/processManager.ts +42 -0
  69. package/lib/commands/build-process/runners/runBackground.ts +56 -0
  70. package/lib/commands/build-process/runners/runForeground.ts +59 -0
  71. package/lib/commands/build-process/test.ts +42 -0
  72. package/lib/commands/build-process/testflag.ts +1 -0
  73. package/lib/commands/build-process/validators.ts +16 -0
  74. package/lib/commands/loadFromRoot.ts +51 -0
  75. package/lib/commands/prune/index.ts +9 -0
  76. package/lib/commands/prune/prune.ts +50 -0
  77. package/lib/filterUnwantedEnvVars.ts +95 -0
  78. package/lib/generateNewEnvList.ts +17 -0
  79. package/lib/index.ts +59 -0
  80. package/package.json +100 -84
  81. package/src/cdk/cdk.ts +1 -0
  82. package/src/cdk/index.ts +1 -0
  83. package/src/expo-files/filterUnwantedEnvVars.ts +141 -144
  84. package/src/expo.ts +116 -0
  85. package/src/index.ts +39 -42
  86. package/src/merge-env.ts +24 -0
  87. package/src/project/build-mono-readme.ts +460 -514
  88. package/src/project/generate-readme.ts +259 -284
  89. package/src/project/index.ts +134 -144
  90. package/src/stack.ts +54 -55
  91. package/src/tools.ts +39 -0
  92. package/dist/cdk/index.js +0 -55
  93. package/dist/project/merge-env.js +0 -31
  94. package/dist/tools.js +0 -35
  95. package/dist/types/cdk/index.d.ts +0 -2
  96. package/dist/types/expo.d.ts +0 -3
  97. package/dist/types/merge-env.d.ts +0 -1
  98. package/dist/types/tools.d.ts +0 -1
  99. package/lib/app.js +0 -49
  100. package/lib/commands/build-process/boot.js +0 -15
  101. package/lib/commands/build-process/cliFactory.js +0 -163
  102. package/lib/commands/build-process/dataLayer.js +0 -59
  103. package/lib/commands/build-process/index.js +0 -13
  104. package/lib/commands/build-process/readEnv.js +0 -37
  105. package/lib/commands/build-process/runMonoCommand.js +0 -102
  106. package/lib/commands/build-process/runners/processManager.js +0 -38
  107. package/lib/commands/build-process/runners/runBackground.js +0 -60
  108. package/lib/commands/build-process/runners/runForeground.js +0 -60
  109. package/lib/commands/build-process/test.js +0 -50
  110. package/lib/commands/build-process/testflag.js +0 -1
  111. package/lib/commands/build-process/validators.js +0 -17
  112. package/lib/commands/generate/generateSeed.js +0 -223
  113. package/lib/commands/generate/index.js +0 -30
  114. package/lib/commands/loadFromRoot.js +0 -55
  115. package/lib/commands/prune/index.js +0 -12
  116. package/lib/commands/prune/prune.js +0 -50
  117. package/lib/commands/seed/import.js +0 -30
  118. package/lib/commands/seed/index.js +0 -12
  119. package/lib/commands/submit/index.js +0 -38
  120. package/lib/commands/update/eas.js +0 -39
  121. package/lib/commands/update/index.js +0 -87
  122. package/lib/filterUnwantedEnvVars.js +0 -123
  123. package/lib/generateNewEnvList.js +0 -14
  124. package/lib/index.js +0 -58
  125. package/src/cdk/cdk.d.ts +0 -7
  126. package/src/cdk/index.js +0 -59
  127. package/src/expo.d.ts +0 -11
  128. package/src/expo.js +0 -133
  129. package/src/merge-env.js +0 -32
  130. package/src/tools.d.ts +0 -4
  131. package/src/tools.js +0 -36
  132. package/types.d.ts +0 -83
  133. /package/dist/{expo-files → src/expo-files}/filterUnwantedEnvVars.js +0 -0
  134. /package/dist/{loadFromRoot.js → src/loadFromRoot.js} +0 -0
  135. /package/dist/{project → src/project}/build-readme.js +0 -0
  136. /package/dist/{project → src/project}/generate-docs.js +0 -0
  137. /package/dist/{merge-env.js → src/project/merge-env.js} +0 -0
  138. /package/dist/types/{project/build-mono-readme.d.ts → lib/commands/build-process/index.d.ts} +0 -0
  139. /package/dist/types/{project/generate-readme.d.ts → lib/commands/prune/index.d.ts} +0 -0
  140. /package/dist/types/{expo-files → src/expo-files}/filterUnwantedEnvVars.d.ts +0 -0
  141. /package/dist/types/{loadFromRoot.d.ts → src/loadFromRoot.d.ts} +0 -0
  142. /package/dist/types/{project → src}/merge-env.d.ts +0 -0
  143. /package/dist/types/{project → src/project}/build-readme.d.ts +0 -0
  144. /package/dist/types/{project → src/project}/generate-docs.d.ts +0 -0
  145. /package/dist/types/{stack.d.ts → src/stack.d.ts} +0 -0
  146. /package/lib/{config.js → config.ts} +0 -0
@@ -1,64 +1,65 @@
1
- import fs from 'node:fs';
2
- import path from 'node:path';
1
+ import fs from 'node:fs'
2
+ import path from 'node:path'
3
3
 
4
4
  /* ──────────────────────────────────────────────────────────
5
5
  * Types
6
6
  * ────────────────────────────────────────────────────────── */
7
7
 
8
8
  type WorkspaceDetectResult = {
9
- cwd: string;
10
- workspaceRoot: string | null;
11
- isWorkspaceRoot: boolean;
12
- configDir: string;
13
- configPath: string;
14
- };
9
+ cwd: string
10
+ workspaceRoot: string | null
11
+ isWorkspaceRoot: boolean
12
+ configDir: string
13
+ configPath: string
14
+ }
15
15
 
16
16
  type DefaultAppConfig = {
17
- appleAppId?: string;
18
- androidAppId?: string;
19
- appName?: string;
20
- easProjectId?: string;
21
- appScheme?: string;
22
- };
17
+ appleAppId?: string
18
+ androidAppId?: string
19
+ appName?: string
20
+ easProjectId?: string
21
+ appScheme?: string
22
+ }
23
23
 
24
24
  type DefaultDeployConfig = {
25
- baseDomain?: string;
26
- webSubdomain?: string;
27
- apiSubdomain?: string;
28
- defaultKeyPair?: string;
29
- regions: string[];
30
- ec2User: string;
31
- warehouseRegion: string;
32
- dbInstanceType: string;
33
- appInstanceType: string;
34
- };
25
+ baseDomain?: string
26
+ webSubdomain?: string
27
+ apiSubdomain?: string
28
+ defaultKeyPair?: string
29
+ regions: string[]
30
+ ec2User: string
31
+ warehouseRegion: string
32
+ dbInstanceType: string
33
+ appInstanceType: string
34
+ }
35
35
 
36
36
  const requiredSystemDefaults = {
37
- ec2User: 'ec2-user',
38
- regions: ['us-east-1'],
39
- warehouseRegion: 'us-east-1',
40
- dbInstanceType: 't3.micro',
41
- appInstanceType: 't3.large',
42
- };
37
+ ec2User: 'ec2-user',
38
+ regions: ['us-east-1'],
39
+ warehouseRegion: 'us-east-1',
40
+ dbInstanceType: 't3.micro',
41
+ appInstanceType: 't3.large',
42
+ }
43
43
 
44
44
  type ConfigTypeMap = {
45
- app: DefaultAppConfig;
46
- deployment: DefaultDeployConfig;
47
- };
45
+ app: DefaultAppConfig
46
+ deployment: DefaultDeployConfig
47
+ }
48
48
 
49
49
  /**
50
50
  * If TType is a known key, use the mapped type.
51
51
  * Otherwise use TCustom (default = unknown).
52
52
  */
53
- type ResolveConfig<TType extends string, TCustom = unknown> =
54
- TType extends keyof ConfigTypeMap ? ConfigTypeMap[TType] : TCustom;
53
+ type ResolveConfig<TType extends string, TCustom = unknown> = TType extends keyof ConfigTypeMap
54
+ ? ConfigTypeMap[TType]
55
+ : TCustom
55
56
 
56
57
  /* ──────────────────────────────────────────────────────────
57
58
  * Environment helpers
58
59
  * ────────────────────────────────────────────────────────── */
59
60
 
60
61
  function isLambdaRuntime(): boolean {
61
- return !!process.env.AWS_LAMBDA_FUNCTION_NAME;
62
+ return !!process.env.AWS_LAMBDA_FUNCTION_NAME
62
63
  }
63
64
 
64
65
  /* ──────────────────────────────────────────────────────────
@@ -66,57 +67,51 @@ function isLambdaRuntime(): boolean {
66
67
  * ────────────────────────────────────────────────────────── */
67
68
 
68
69
  function detectWorkspaceAndConfigPath(
69
- startDir: string,
70
- configFileName: string
70
+ startDir: string,
71
+ configFileName: string
71
72
  ): WorkspaceDetectResult {
72
- const cwd = path.resolve(startDir);
73
-
74
- const isWorkspaceRootDir = (dir: string): boolean => {
75
- const pkgPath = path.join(dir, 'package.json');
76
- if (fs.existsSync(pkgPath)) {
77
- try {
78
- const pkg = JSON.parse(fs.readFileSync(pkgPath, 'utf8'));
79
- if (pkg?.workspaces) return true;
80
- } catch {
81
- // ignore
82
- }
83
- }
84
-
85
- const markers = [
86
- 'pnpm-workspace.yaml',
87
- 'lerna.json',
88
- 'turbo.json',
89
- 'nx.json',
90
- '.git',
91
- ];
92
-
93
- return markers.some((m) => fs.existsSync(path.join(dir, m)));
94
- };
95
-
96
- let dir = cwd;
97
- while (true) {
98
- if (isWorkspaceRootDir(dir)) {
99
- return {
100
- cwd,
101
- workspaceRoot: dir,
102
- isWorkspaceRoot: dir === cwd,
103
- configDir: dir,
104
- configPath: path.join(dir, configFileName),
105
- };
106
- }
107
-
108
- const parent = path.dirname(dir);
109
- if (parent === dir) break;
110
- dir = parent;
111
- }
112
-
113
- return {
114
- cwd,
115
- workspaceRoot: null,
116
- isWorkspaceRoot: false,
117
- configDir: cwd,
118
- configPath: path.join(cwd, configFileName),
119
- };
73
+ const cwd = path.resolve(startDir)
74
+
75
+ const isWorkspaceRootDir = (dir: string): boolean => {
76
+ const pkgPath = path.join(dir, 'package.json')
77
+ if (fs.existsSync(pkgPath)) {
78
+ try {
79
+ const pkg = JSON.parse(fs.readFileSync(pkgPath, 'utf8'))
80
+ if (pkg?.workspaces) return true
81
+ } catch {
82
+ // ignore
83
+ }
84
+ }
85
+
86
+ const markers = ['pnpm-workspace.yaml', 'lerna.json', 'turbo.json', 'nx.json', '.git']
87
+
88
+ return markers.some((m) => fs.existsSync(path.join(dir, m)))
89
+ }
90
+
91
+ let dir = cwd
92
+ while (true) {
93
+ if (isWorkspaceRootDir(dir)) {
94
+ return {
95
+ cwd,
96
+ workspaceRoot: dir,
97
+ isWorkspaceRoot: dir === cwd,
98
+ configDir: dir,
99
+ configPath: path.join(dir, configFileName),
100
+ }
101
+ }
102
+
103
+ const parent = path.dirname(dir)
104
+ if (parent === dir) break
105
+ dir = parent
106
+ }
107
+
108
+ return {
109
+ cwd,
110
+ workspaceRoot: null,
111
+ isWorkspaceRoot: false,
112
+ configDir: cwd,
113
+ configPath: path.join(cwd, configFileName),
114
+ }
120
115
  }
121
116
 
122
117
  /* ──────────────────────────────────────────────────────────
@@ -124,13 +119,13 @@ function detectWorkspaceAndConfigPath(
124
119
  * ────────────────────────────────────────────────────────── */
125
120
 
126
121
  function loadConfigFromBundle(fileName: string): unknown | null {
127
- const bundledPath = path.join(__dirname, fileName);
122
+ const bundledPath = path.join(__dirname, fileName)
128
123
 
129
- if (fs.existsSync(bundledPath)) {
130
- return JSON.parse(fs.readFileSync(bundledPath, 'utf8'));
131
- }
124
+ if (fs.existsSync(bundledPath)) {
125
+ return JSON.parse(fs.readFileSync(bundledPath, 'utf8'))
126
+ }
132
127
 
133
- return null;
128
+ return null
134
129
  }
135
130
 
136
131
  /* ──────────────────────────────────────────────────────────
@@ -138,60 +133,55 @@ function loadConfigFromBundle(fileName: string): unknown | null {
138
133
  * ────────────────────────────────────────────────────────── */
139
134
 
140
135
  export function loadAppConfig<TCustom = unknown, TType extends string = 'app'>(
141
- configType: TType = 'app' as TType,
142
- startDir: string = process.cwd()
136
+ configType: TType = 'app' as TType,
137
+ startDir: string = process.cwd()
143
138
  ): { config: ResolveConfig<TType, TCustom>; meta: WorkspaceDetectResult } {
144
- const fileName = `mono.${configType}.json`;
145
-
146
- // ✅ 1. Lambda runtime: load bundled config if present
147
- if (isLambdaRuntime()) {
148
- const bundled = loadConfigFromBundle(fileName);
149
-
150
- if (bundled) {
151
- return {
152
- config: bundled as ResolveConfig<TType, TCustom>,
153
- meta: {
154
- cwd: __dirname,
155
- workspaceRoot: null,
156
- isWorkspaceRoot: false,
157
- configDir: __dirname,
158
- configPath: path.join(__dirname, fileName),
159
- },
160
- };
161
- }
162
- }
163
-
164
- // ✅ 2. CLI / local dev: workspace discovery
165
- const meta = detectWorkspaceAndConfigPath(startDir, fileName);
166
-
167
- if (!fs.existsSync(meta.configPath)) {
168
- const where =
169
- meta.workspaceRoot ?
170
- `workspace root: ${meta.workspaceRoot}`
171
- : `cwd: ${meta.cwd}`;
172
-
173
- throw new Error(
174
- `Could not find ${fileName} at ${meta.configPath} (detected from ${where}).`
175
- );
176
- }
177
-
178
- const raw = fs.readFileSync(meta.configPath, 'utf8');
179
- const config = JSON.parse(raw) as ResolveConfig<TType, TCustom>;
180
-
181
- // Apply required system defaults
182
- if (typeof config === 'object' && config !== null) {
183
- for (const key of Object.keys(requiredSystemDefaults)) {
184
- // @ts-ignore: index signature
185
- if (config[key] === undefined || config[key] === null) {
186
- // @ts-ignore: index signature
187
- config[key] = requiredSystemDefaults[key];
188
- }
189
- }
190
- }
191
-
192
- return { config, meta };
139
+ const fileName = `mono.${configType}.json`
140
+
141
+ // ✅ 1. Lambda runtime: load bundled config if present
142
+ if (isLambdaRuntime()) {
143
+ const bundled = loadConfigFromBundle(fileName)
144
+
145
+ if (bundled) {
146
+ return {
147
+ config: bundled as ResolveConfig<TType, TCustom>,
148
+ meta: {
149
+ cwd: __dirname,
150
+ workspaceRoot: null,
151
+ isWorkspaceRoot: false,
152
+ configDir: __dirname,
153
+ configPath: path.join(__dirname, fileName),
154
+ },
155
+ }
156
+ }
157
+ }
158
+
159
+ // ✅ 2. CLI / local dev: workspace discovery
160
+ const meta = detectWorkspaceAndConfigPath(startDir, fileName)
161
+
162
+ if (!fs.existsSync(meta.configPath)) {
163
+ const where = meta.workspaceRoot ? `workspace root: ${meta.workspaceRoot}` : `cwd: ${meta.cwd}`
164
+
165
+ throw new Error(`Could not find ${fileName} at ${meta.configPath} (detected from ${where}).`)
166
+ }
167
+
168
+ const raw = fs.readFileSync(meta.configPath, 'utf8')
169
+ const config = JSON.parse(raw) as ResolveConfig<TType, TCustom>
170
+
171
+ // ✅ Apply required system defaults
172
+ if (typeof config === 'object' && config !== null) {
173
+ for (const key of Object.keys(requiredSystemDefaults)) {
174
+ // @ts-ignore: index signature
175
+ if (config[key] === undefined || config[key] === null) {
176
+ // @ts-ignore: index signature
177
+ config[key] = requiredSystemDefaults[key]
178
+ }
179
+ }
180
+ }
181
+
182
+ return { config, meta }
193
183
  }
194
184
 
195
- export const loadProjectConfig = loadAppConfig;
185
+ export const loadProjectConfig = loadAppConfig
196
186
 
197
- export { loadMergedEnv } from './merge-env.js';
187
+ export { loadMergedEnv } from './merge-env'
package/src/stack.ts CHANGED
@@ -1,74 +1,73 @@
1
- import * as cdk from 'aws-cdk-lib';
2
- import { Construct } from 'constructs';
3
- import { loadMergedEnv } from './project/merge-env.js';
1
+ import * as cdk from 'aws-cdk-lib'
2
+ import { Construct } from 'constructs'
3
+ import { loadMergedEnv } from './project/merge-env'
4
4
 
5
- loadMergedEnv();
5
+ loadMergedEnv()
6
6
  //cdk deploy --context owner=cody --context region=us-west-1
7
7
 
8
- const dev = 'dev';
8
+ const dev = 'dev'
9
9
  export interface ICustomStack extends cdk.Stack {
10
- ownerName: string;
11
- region: string;
12
- enableNATGateway: boolean;
10
+ ownerName: string
11
+ region: string
12
+ enableNATGateway: boolean
13
13
  }
14
14
 
15
15
  export interface CustomStackProps extends cdk.StackProps {
16
- ownerName?: string;
17
- region?: string;
18
- enableNATGateway?: boolean;
19
- domainName?: string;
16
+ ownerName?: string
17
+ region?: string
18
+ enableNATGateway?: boolean
19
+ domainName?: string
20
20
  }
21
21
 
22
22
  export abstract class CustomStack extends cdk.Stack {
23
- public ownerName: string;
24
- public region: string;
25
- public domainName?: string;
26
- protected enableNATGateway: boolean = false;
23
+ public ownerName: string
24
+ public region: string
25
+ public domainName?: string
26
+ protected enableNATGateway: boolean = false
27
27
 
28
- constructor(scope: Construct, id: string, props: CustomStackProps = {}) {
29
- // 🔑 Resolve account + region BEFORE super()
30
- const resolvedEnv: cdk.Environment | undefined = {
31
- account:
32
- props.env?.account ?? process.env.AWS_ACCOUNT ?? cdk.Aws.ACCOUNT_ID, // final fallback (lazy token)
33
- region: props.env?.region ?? process.env.AWS_REGION ?? 'us-east-2',
34
- };
28
+ constructor(scope: Construct, id: string, props: CustomStackProps = {}) {
29
+ // 🔑 Resolve account + region BEFORE super()
30
+ const resolvedEnv: cdk.Environment | undefined = {
31
+ account: props.env?.account ?? process.env.AWS_ACCOUNT ?? cdk.Aws.ACCOUNT_ID, // final fallback (lazy token)
32
+ region: props.env?.region ?? process.env.AWS_REGION ?? 'us-east-2',
33
+ }
35
34
 
36
- super(scope, id, {
37
- ...props,
38
- env: resolvedEnv,
39
- });
35
+ super(scope, id, {
36
+ ...props,
37
+ env: resolvedEnv,
38
+ })
40
39
 
41
- // ✅ Now it’s safe to read these
42
- this.ownerName = props.ownerName ?? 'dev';
43
- this.domainName = props.domainName;
44
- this.region = resolvedEnv.region!;
45
- this.enableNATGateway = props.enableNATGateway ?? false;
46
- }
40
+ // ✅ Now it’s safe to read these
41
+ this.ownerName = props.ownerName ?? 'dev'
42
+ this.domainName = props.domainName
43
+ this.region = resolvedEnv.region!
44
+ this.enableNATGateway = props.enableNATGateway ?? false
45
+ }
47
46
 
48
- public initializeStackConfig(): void {
49
- // Context overrides (deploy-time flags)
50
- const ctxOwner = this.node.tryGetContext('owner') || dev;
51
- const ctxRegion = this.node.tryGetContext('region') || 'us-east-2';
52
- const ctxNat = this.node.tryGetContext('enableNATGateway');
47
+ public initializeStackConfig(): void {
48
+ // Context overrides (deploy-time flags)
49
+ const ctxOwner = this.node.tryGetContext('owner') || dev
50
+ const ctxRegion = this.node.tryGetContext('region') || 'us-east-2'
51
+ const ctxNat = this.node.tryGetContext('enableNATGateway')
53
52
 
54
- if (ctxOwner) this.ownerName = ctxOwner;
55
- if (ctxRegion) this.region = ctxRegion;
53
+ if (ctxOwner) this.ownerName = ctxOwner
54
+ if (ctxRegion) this.region = ctxRegion
56
55
 
57
- // NAT logic
58
- if (ctxNat !== undefined) {
59
- this.enableNATGateway = ctxNat === 'true';
60
- }
56
+ // NAT logic
57
+ if (ctxNat !== undefined) {
58
+ this.enableNATGateway = ctxNat === 'true'
59
+ }
61
60
 
62
- // Production default
63
- if (this.ownerName === 'prod' || this.ownerName === 'production') {
64
- this.enableNATGateway = ctxNat !== 'false';
65
- }
61
+ // Production default
62
+ if (this.ownerName === 'prod' || this.ownerName === 'production') {
63
+ this.enableNATGateway = ctxNat !== 'false'
64
+ }
66
65
 
67
- console.log('[Stack Config]', {
68
- owner: this.ownerName,
69
- region: this.region,
70
- account: this.account,
71
- natGateway: this.enableNATGateway,
72
- });
73
- }
66
+ console.log('[Stack Config]', {
67
+ owner: this.ownerName,
68
+ region: this.region,
69
+ account: this.account,
70
+ natGateway: this.enableNATGateway,
71
+ })
72
+ }
74
73
  }
package/src/tools.ts ADDED
@@ -0,0 +1,39 @@
1
+ import type { ExpoConfig, AppJSONConfig } from 'expo/config'
2
+
3
+ export function replaceTokens(input: string, tokens: Record<string, string>): string {
4
+ return input.replace(/\$\{([^}]+)\}|\$([A-Z0-9_]+)/g, (_m, k1, k2) => {
5
+ const key = (k1 || k2) as string
6
+ const val = tokens[key]
7
+ return val == null ? '' : String(val)
8
+ })
9
+ }
10
+
11
+ function filterEnvByPrefix(env: NodeJS.ProcessEnv, prefix: string): Record<string, string> {
12
+ const filtered: Record<string, string> = {}
13
+ for (const [key, value] of Object.entries(env)) {
14
+ if (key.startsWith(prefix) && typeof value === 'string') {
15
+ filtered[key] = value
16
+ }
17
+ }
18
+ return filtered
19
+ }
20
+
21
+ export function setUpConfig(config: AppJSONConfig): ExpoConfig {
22
+ const { extra = {}, ...other } = (config.expo ?? {}) as any
23
+ const router = extra['router'] ? { origin: false, ...extra['router'] } : { origin: false }
24
+
25
+ return {
26
+ ...(config as any),
27
+ expo: {
28
+ ...other,
29
+ extra: {
30
+ ...filterEnvByPrefix(process.env, 'NEXT_PUBLIC_'),
31
+ eas: {
32
+ projectId: process.env.EAS_PROJECT_ID,
33
+ },
34
+ router,
35
+ ...extra,
36
+ },
37
+ },
38
+ } as ExpoConfig
39
+ }
package/dist/cdk/index.js DELETED
@@ -1,55 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.replaceTokens = replaceTokens;
4
- exports.setUpConfig = setUpConfig;
5
- function replaceTokens(str, env) {
6
- if (typeof str !== 'string')
7
- return str;
8
- return str.replace(/\$\{([^}]+)\}|\$([A-Z0-9_]+)/g, (m, k1, k2) => {
9
- const k = k1 || k2;
10
- // existing data layer takes priority (guarded in case not defined)
11
- if (typeof hasData === 'function' && hasData(k)) {
12
- const val = typeof getData === 'function' ? getData(k) : undefined;
13
- return val == null ? '' : String(val);
14
- }
15
- // environment variables
16
- if (env && Object.prototype.hasOwnProperty.call(env, k)) {
17
- const val = env[k];
18
- return val == null ? '' : String(val);
19
- }
20
- // fallback
21
- return '';
22
- });
23
- }
24
- function filterEnvByPrefix(env, prefix) {
25
- const filtered = {};
26
- for (const key in env) {
27
- if (key.startsWith(prefix)) {
28
- filtered[key] = env[key];
29
- }
30
- }
31
- return filtered;
32
- }
33
- function setUpConfig(config) {
34
- const { extra = {}, ...other } = config.expo || {};
35
- const router = extra['router'] ?
36
- { origin: false, ...extra['router'] }
37
- : {
38
- origin: false,
39
- };
40
- const appConfig = {
41
- ...config,
42
- expo: {
43
- ...other,
44
- extra: {
45
- ...filterEnvByPrefix(process.env, 'NEXT_PUBLIC_'),
46
- eas: {
47
- projectId: process.env.EAS_PROJECT_ID,
48
- },
49
- router,
50
- ...extra,
51
- },
52
- },
53
- };
54
- return appConfig;
55
- }
@@ -1,31 +0,0 @@
1
- "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.loadMergedEnv = loadMergedEnv;
7
- const fs_1 = __importDefault(require("fs"));
8
- const path_1 = __importDefault(require("path"));
9
- const dotenv_1 = __importDefault(require("dotenv"));
10
- function loadMergedEnv() {
11
- const ENV_PATH = path_1.default.resolve(process.cwd(), '.env');
12
- const ENV_LOCAL_PATH = path_1.default.resolve(process.cwd(), '.env.local');
13
- // Load base .env
14
- const base = fs_1.default.existsSync(ENV_PATH) ? dotenv_1.default.parse(fs_1.default.readFileSync(ENV_PATH)) : {};
15
- // Load overrides .env.local
16
- const local = fs_1.default.existsSync(ENV_LOCAL_PATH) ?
17
- dotenv_1.default.parse(fs_1.default.readFileSync(ENV_LOCAL_PATH))
18
- : {};
19
- // Merge: local overrides base
20
- const merged = {
21
- ...base,
22
- ...local,
23
- };
24
- // Inject into process.env (do NOT overwrite existing real env vars)
25
- for (const [key, value] of Object.entries(merged)) {
26
- if (process.env[key] === undefined) {
27
- process.env[key] = value;
28
- }
29
- }
30
- return process.env;
31
- }
package/dist/tools.js DELETED
@@ -1,35 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.setUpConfig = setUpConfig;
4
- function filterEnvByPrefix(env, prefix) {
5
- const filtered = {};
6
- for (const key in env) {
7
- if (key.startsWith(prefix)) {
8
- filtered[key] = env[key];
9
- }
10
- }
11
- return filtered;
12
- }
13
- function setUpConfig(config) {
14
- const { extra = {}, ...other } = config.expo || {};
15
- const router = extra['router'] ?
16
- { origin: false, ...extra['router'] }
17
- : {
18
- origin: false,
19
- };
20
- const appConfig = {
21
- ...config,
22
- expo: {
23
- ...other,
24
- extra: {
25
- ...filterEnvByPrefix(process.env, 'NEXT_PUBLIC_'),
26
- eas: {
27
- projectId: process.env.EAS_PROJECT_ID,
28
- },
29
- router,
30
- ...extra,
31
- },
32
- },
33
- };
34
- return appConfig;
35
- }
@@ -1,2 +0,0 @@
1
- export function replaceTokens(str: any, env: any): any;
2
- export function setUpConfig(config: any): any;
@@ -1,3 +0,0 @@
1
- export function replaceTokens(str: any, env: any): any;
2
- export function setUpConfig(config: any): any;
3
- export function filterUnwantedEnvVarsEAS(env: any): {};
@@ -1 +0,0 @@
1
- export function loadMergedEnv(): NodeJS.ProcessEnv;
@@ -1 +0,0 @@
1
- export function setUpConfig(config: any): any;