@platformatic/generators 1.37.1 → 1.39.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/README.md CHANGED
@@ -61,7 +61,3 @@ Called from `prepare` function. You have already access to the current `fastify`
61
61
  #### `_afterPrepare`
62
62
 
63
63
  Called at the end of `prepare` function body
64
-
65
- #### `_generateEnv`
66
-
67
- The `BaseGenerator` will create an empty `.env` file. In this function you can customize and append other values that may be needed. The values in `this.config.env` object will be automatically appended after this method is called.
@@ -94,7 +94,6 @@ export namespace BaseGenerator {
94
94
  setEnvVars(env?: Env): void
95
95
 
96
96
  getDefaultConfig(): { [x: string]: JSONValue }
97
- getDefaultEnv(): Env
98
97
 
99
98
  getFastifyVersion(): Promise<string>
100
99
  getPlatformaticVersion(): Promise<string>
@@ -119,8 +118,6 @@ export namespace BaseGenerator {
119
118
  _beforePrepare(): Promise<void>
120
119
  _afterPrepare(): Promise<void | JSONValue>
121
120
  _getConfigFileContents(): Promise<{ [x: string]: BaseGenerator.JSONValue }>
122
- _generateEnv(): Promise<void>
123
- appendConfigEnv(): Promise<void>
124
121
 
125
122
  postInstallActions(): Promise<void>
126
123
  }
@@ -61,6 +61,7 @@ class BaseGenerator extends FileGenerator {
61
61
  serviceName: '',
62
62
  envPrefix: '',
63
63
  env: {},
64
+ defaultEnv: {},
64
65
  isUpdating: false
65
66
  }
66
67
  }
@@ -88,10 +89,6 @@ class BaseGenerator extends FileGenerator {
88
89
  }
89
90
  }
90
91
 
91
- getDefaultEnv () {
92
- return {}
93
- }
94
-
95
92
  getEnvVarName (envVarName) {
96
93
  const envVarPrefix = 'PLT_' + this.config.envPrefix + '_'
97
94
  if (this.config.isRuntimeContext && !envVarName.startsWith(envVarPrefix)) {
@@ -112,10 +109,15 @@ class BaseGenerator extends FileGenerator {
112
109
 
113
110
  addEnvVar (envVarName, envVarValue, opts = {}) {
114
111
  opts.overwrite ??= true
112
+ opts.default ??= false
113
+
115
114
  envVarName = this.getEnvVarName(envVarName)
116
115
  if (opts.overwrite || !this.config.env[envVarName]) {
117
116
  this.config.env[envVarName] = envVarValue
118
117
  }
118
+ if ((opts.overwrite || !this.config.defaultEnv[envVarName]) && opts.default) {
119
+ this.config.defaultEnv[envVarName] = envVarValue
120
+ }
119
121
  }
120
122
 
121
123
  getEnvVar (envVarName) {
@@ -123,9 +125,10 @@ class BaseGenerator extends FileGenerator {
123
125
  return this.config.env[envVarName]
124
126
  }
125
127
 
126
- setEnvVars (envVars) {
128
+ setEnvVars (envVars, opts) {
127
129
  this.config.env = {}
128
- this.addEnvVars(envVars)
130
+ this.config.defaultEnv = {}
131
+ this.addEnvVars(envVars, opts)
129
132
  }
130
133
 
131
134
  setConfig (config) {
@@ -167,19 +170,6 @@ class BaseGenerator extends FileGenerator {
167
170
  }
168
171
  }
169
172
 
170
- /* c8 ignore stop */
171
- appendConfigEnv () {
172
- const dotEnvFile = this.getFileObject('.env')
173
- let dotEnvFileContents = dotEnvFile.contents
174
-
175
- if (this.config.env) {
176
- Object.entries(this.config.env).forEach((kv) => {
177
- dotEnvFileContents += `${kv[0]}=${kv[1]}\n`
178
- })
179
- dotEnvFile.contents = dotEnvFileContents
180
- }
181
- }
182
-
183
173
  async prepare () {
184
174
  try {
185
175
  this.reset()
@@ -416,20 +406,26 @@ class BaseGenerator extends FileGenerator {
416
406
 
417
407
  async generateEnv () {
418
408
  if (!this.config.isRuntimeContext) {
419
- // generate an empty .env file
420
409
  this.addFile({
421
410
  path: '',
422
411
  file: '.env',
423
- contents: ''
412
+ contents: serializeEnvVars(this.config.env)
424
413
  })
425
- await this._generateEnv()
426
- this.appendConfigEnv()
427
414
 
428
- const { contents } = this.getFileObject('.env')
415
+ const emptyEnvVars = {}
416
+ for (const envVarName of Object.keys(this.config.env)) {
417
+ if (!this.config.defaultEnv[envVarName]) {
418
+ emptyEnvVars[envVarName] = ''
419
+ }
420
+ }
421
+
429
422
  this.addFile({
430
423
  path: '',
431
424
  file: '.env.sample',
432
- contents
425
+ contents: serializeEnvVars({
426
+ ...this.config.defaultEnv,
427
+ ...emptyEnvVars
428
+ })
433
429
  })
434
430
  }
435
431
  }
@@ -501,7 +497,15 @@ class BaseGenerator extends FileGenerator {
501
497
  async _beforePrepare () {}
502
498
  async _afterPrepare () {}
503
499
  async _getConfigFileContents () { return {} }
504
- async _generateEnv () {}
500
+ }
501
+
502
+ function serializeEnvVars (envVars) {
503
+ let envVarsString = ''
504
+ for (const envVarName of Object.keys(envVars)) {
505
+ const envVarValue = envVars[envVarName]
506
+ envVarsString += `${envVarName}=${envVarValue}\n`
507
+ }
508
+ return envVarsString
505
509
  }
506
510
 
507
511
  module.exports = BaseGenerator
@@ -193,7 +193,7 @@ class ${stackableGeneratorType} extends ServiceGenerator {
193
193
 
194
194
  this.addEnvVars({
195
195
  PLT_GREETING_TEXT: this.config.greeting ?? 'Hello world!'
196
- }, { overwrite: false })
196
+ }, { overwrite: false, default: true })
197
197
 
198
198
  const packageJson = await this.getStackablePackageJson()
199
199
 
@@ -301,7 +301,7 @@ class ${stackableGeneratorType} extends ServiceGenerator {
301
301
 
302
302
  this.addEnvVars({
303
303
  PLT_GREETING_TEXT: this.config.greeting ?? 'Hello world!'
304
- }, { overwrite: false })
304
+ }, { overwrite: false, default: true })
305
305
 
306
306
  const packageJson = await this.getStackablePackageJson()
307
307
 
@@ -311,7 +311,6 @@ class StackableGenerator extends FileGenerator {
311
311
  async _beforePrepare () {}
312
312
  async _afterPrepare () {}
313
313
  async _getConfigFileContents () { return {} }
314
- async _generateEnv () {}
315
314
  }
316
315
 
317
316
  module.exports = StackableGenerator
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@platformatic/generators",
3
- "version": "1.37.1",
3
+ "version": "1.39.0",
4
4
  "description": "Main classes and utils for generators.",
5
5
  "main": "index.js",
6
6
  "keywords": [],
@@ -95,6 +95,7 @@ test('setConfig', async (t) => {
95
95
  staticWorkspaceGitHubActions: false,
96
96
  dynamicWorkspaceGitHubActions: false,
97
97
  env: {},
98
+ defaultEnv: {},
98
99
  dependencies: {},
99
100
  devDependencies: {},
100
101
  isRuntimeContext: false,
@@ -123,6 +124,7 @@ test('setConfig', async (t) => {
123
124
  staticWorkspaceGitHubActions: false,
124
125
  dynamicWorkspaceGitHubActions: false,
125
126
  env: {},
127
+ defaultEnv: {},
126
128
  dependencies: {},
127
129
  devDependencies: {},
128
130
  isRuntimeContext: false,
@@ -143,6 +145,7 @@ test('setConfig', async (t) => {
143
145
  staticWorkspaceGitHubActions: false,
144
146
  dynamicWorkspaceGitHubActions: false,
145
147
  env: {},
148
+ defaultEnv: {},
146
149
  dependencies: {},
147
150
  devDependencies: {},
148
151
  isRuntimeContext: false,
@@ -171,6 +174,7 @@ test('setConfig', async (t) => {
171
174
  staticWorkspaceGitHubActions: false,
172
175
  dynamicWorkspaceGitHubActions: false,
173
176
  env: {},
177
+ defaultEnv: {},
174
178
  dependencies: {},
175
179
  devDependencies: {},
176
180
  isRuntimeContext: false,
@@ -197,7 +201,30 @@ test('should append env values', async (t) => {
197
201
  assert.equal(dotEnvFile.contents.trim(), 'FOO=bar')
198
202
 
199
203
  const dotEnvSampleFile = bg.getFileObject('.env.sample')
200
- assert.equal(dotEnvSampleFile.contents.trim(), 'FOO=bar')
204
+ assert.equal(dotEnvSampleFile.contents.trim(), 'FOO=')
205
+ })
206
+
207
+ test('should add a default env var to the .env.sample config', async (t) => {
208
+ const bg = new BaseGenerator({
209
+ module: '@platformatic/service'
210
+ })
211
+ // partial config with defaults
212
+ bg.setConfig({
213
+ env: {
214
+ FOO: 'bar'
215
+ }
216
+ })
217
+
218
+ bg.addEnvVars({
219
+ BAR: 'baz'
220
+ }, { overwrite: false, default: true })
221
+
222
+ await bg.prepare()
223
+ const dotEnvFile = bg.getFileObject('.env')
224
+ assert.equal(dotEnvFile.contents.trim(), 'FOO=bar\nBAR=baz')
225
+
226
+ const dotEnvSampleFile = bg.getFileObject('.env.sample')
227
+ assert.equal(dotEnvSampleFile.contents.trim(), 'BAR=baz\nFOO=')
201
228
  })
202
229
 
203
230
  test('should prepare the questions', async (t) => {