@axinom/mosaic-cli 0.17.1-rc.0 → 0.18.0-rc.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.
@@ -8,6 +8,7 @@ export interface ApplyTemplatesOptions {
8
8
  verbose: boolean;
9
9
  replace: boolean;
10
10
  bitwardenUrl: string | undefined;
11
+ commentObsolete: boolean;
11
12
  }
12
13
  export interface DiffResult {
13
14
  result: 'created' | 'same' | 'different' | 'differentLayout';
@@ -22,7 +23,7 @@ export declare class ConfigTransform {
22
23
  readonly target: string;
23
24
  constructor(template: string, target: string);
24
25
  readonly targetExists: boolean;
25
- compare(_: boolean, __: boolean): DiffResult;
26
+ compare(_: boolean, __: boolean, ___: boolean): DiffResult;
26
27
  writeTarget(): void;
27
28
  }
28
29
  /**
@@ -34,8 +35,8 @@ export declare class EnvConfigTransform extends ConfigTransform {
34
35
  private newContent?;
35
36
  private readTemplate;
36
37
  private mergeContent;
37
- compare(replace: boolean, verbose: boolean): DiffResult;
38
+ compare(replace: boolean, verbose: boolean, commentObsolete: boolean): DiffResult;
38
39
  writeTarget(): void;
39
40
  }
40
41
  export declare function getEnvConfigTransforms(template: string): string[];
41
- export declare function transformComparison(transform: ConfigTransform, replace: boolean, verbose: boolean): DiffResult['result'];
42
+ export declare function transformComparison(transform: ConfigTransform, replace: boolean, verbose: boolean, commentObsolete: boolean): DiffResult['result'];
@@ -12,6 +12,7 @@ const glob = require("glob");
12
12
  const path = require("path");
13
13
  const readline = require("readline");
14
14
  const yargs = require("yargs");
15
+ const common_1 = require("../../common");
15
16
  const bitwarden_vault_1 = require("./bitwarden-vault");
16
17
  exports.applyTemplates = {
17
18
  command: 'apply-templates',
@@ -66,6 +67,13 @@ exports.applyTemplates = {
66
67
  "Placeholders must be in the form: <BITWARDEN_{itemName::fieldName}> where fieldname can be 'username', 'password', or the name of a custom field.",
67
68
  default: undefined,
68
69
  hidden: true,
70
+ })
71
+ .option('commentObsolete', {
72
+ alias: 'co',
73
+ type: 'boolean',
74
+ describe: 'Comments out all variables that are no longer in the template.',
75
+ default: false,
76
+ boolean: true,
69
77
  }),
70
78
  handler: compareTemplates,
71
79
  };
@@ -78,7 +86,7 @@ class ConfigTransform {
78
86
  this.target = target;
79
87
  this.targetExists = (0, fs_1.existsSync)(this.target);
80
88
  }
81
- compare(_, __) {
89
+ compare(_, __, ___) {
82
90
  const templateContent = (0, fs_1.readFileSync)(this.template).toString();
83
91
  const targetContent = (0, fs_1.readFileSync)(this.target).toString();
84
92
  const diff = Diff.diffLines(targetContent, templateContent);
@@ -119,41 +127,55 @@ class EnvConfigTransform extends ConfigTransform {
119
127
  return value !== null && value !== void 0 ? value : match;
120
128
  });
121
129
  }
122
- mergeContent(templateContent, targetContent) {
123
- const vars = envfile.parse(templateContent);
130
+ mergeContent(templateContent, targetContent, commentObsolete) {
131
+ const templateVars = envfile.parse(templateContent);
124
132
  const targetVars = envfile.parse(targetContent);
125
- let mergedContent = templateContent;
133
+ const optionalCommentTag = commentObsolete ? '# ' : '';
134
+ let mergedContent = targetContent;
126
135
  let additionalContent = '';
136
+ for (const [k, v] of Object.entries(templateVars)) {
137
+ // if template variable is not in the .env file - append it at the end
138
+ if (!(k in targetVars)) {
139
+ additionalContent += `${envfile.stringify({ [k]: v })}`;
140
+ }
141
+ }
127
142
  for (const [k, v] of Object.entries(targetVars)) {
128
- // if key is not in template, then append target value to merged content
129
- if (!(k in vars)) {
130
- additionalContent += `\n${envfile.stringify({ [k]: v })}`;
143
+ if (!(k in templateVars)) {
144
+ // Handle obsolete variables in the existing .env file
145
+ // Add a comment (if not already present) that the variable is obsolete
146
+ // Comment the variable out if explicit flag is provided
147
+ const lineRegex = new RegExp(`(?<=(\n|^))${k}=`);
148
+ const line = targetContent.match(lineRegex);
149
+ const obsoleteVarDescription = `# Variable ${k} is not a part of the template.\n`;
150
+ const prefixToAttach = mergedContent.includes(obsoleteVarDescription)
151
+ ? ''
152
+ : obsoleteVarDescription;
153
+ mergedContent = mergedContent.replace(lineRegex, prefixToAttach + optionalCommentTag + (line === null || line === void 0 ? void 0 : line[0]));
131
154
  }
132
- else if (vars[k] !== v) {
155
+ else if (templateVars[k] !== v) {
133
156
  const commentRegex = new RegExp(`(?<=(\n|^))#${k}=`);
134
157
  const commented = targetContent.match(commentRegex);
135
- // use target value if template value looks like a placeholder
136
- // use target value if key is also included as a comment
137
- if (isPlaceholder(vars[k]) || vars[k] === '' || commented) {
138
- // keep commented template value (updated with current template value)
139
- const commentPrefix = commented && !mergedContent.match(commentRegex)
140
- ? '#' + envfile.stringify({ [k]: vars[k] })
141
- : '';
142
- mergedContent = mergedContent.replace(new RegExp(`(?<=(\n|^))${k}=.*?(\r?\n|$)`), commentPrefix + envfile.stringify({ [k]: vars[k], [k]: v }));
158
+ // if there is no dedicated comment for variable to preserve custom
159
+ // value, template value is not a placeholder, and template value is not
160
+ // empty - .env variable value is outdated and replaced with template value
161
+ if (!commented &&
162
+ !isPlaceholder(templateVars[k]) &&
163
+ templateVars[k] !== '') {
164
+ mergedContent = mergedContent.replace(new RegExp(`(?<=(\n|^))${k}=.*?(\r?\n|$)`), envfile.stringify({ [k]: templateVars[k] }));
143
165
  }
144
166
  }
145
167
  }
146
168
  if (additionalContent !== '') {
147
- mergedContent += `\n\n# Additional keys (not in template)${additionalContent}`;
169
+ mergedContent += `\n# ${(0, common_1.getTimestamp)()} Newly added variables:\n${additionalContent}`;
148
170
  }
149
171
  return mergedContent;
150
172
  }
151
- compare(replace, verbose) {
173
+ compare(replace, verbose, commentObsolete) {
152
174
  const templateContent = this.readTemplate();
153
175
  const targetContent = (0, fs_1.readFileSync)(this.target).toString();
154
176
  this.newContent = replace
155
177
  ? templateContent
156
- : this.mergeContent(templateContent, targetContent);
178
+ : this.mergeContent(templateContent, targetContent, commentObsolete);
157
179
  // set the #@TARGET prefix line
158
180
  this.newContent = setDefinedTemplate(this.newContent, path.basename(this.template));
159
181
  const changed = this.newContent !== targetContent;
@@ -206,7 +228,7 @@ function compareTemplates(options) {
206
228
  ? getEnvConfigTransforms(template).map((target) => new EnvConfigTransform(template, target, bitwardenVault))
207
229
  : [new ConfigTransform(template, defaultTargetFor(template))];
208
230
  for (const transform of transforms) {
209
- const resultKey = transformComparison(transform, options.replace, options.verbose);
231
+ const resultKey = transformComparison(transform, options.replace, options.verbose, options.commentObsolete);
210
232
  results[resultKey].push(transform);
211
233
  }
212
234
  }
@@ -258,7 +280,9 @@ function compareTemplates(options) {
258
280
  }
259
281
  }
260
282
  function setDefinedTemplate(targetText, templateName) {
261
- return `#@TEMPLATE = ${path.basename(templateName)}\n` + targetText;
283
+ return getDefinedTemplate(targetText)
284
+ ? targetText
285
+ : `#@TEMPLATE = ${path.basename(templateName)}\n` + targetText;
262
286
  }
263
287
  function getDefinedTemplate(targetText) {
264
288
  const match = targetText.match(/^#\s*@TEMPLATE\s*=(.+)/);
@@ -297,13 +321,13 @@ exports.getEnvConfigTransforms = getEnvConfigTransforms;
297
321
  * If target file doesn't exist then create it.
298
322
  * If both exist and there are differences, return 'different' and do nothing.
299
323
  */
300
- function transformComparison(transform, replace, verbose) {
324
+ function transformComparison(transform, replace, verbose, commentObsolete) {
301
325
  if (!transform.targetExists) {
302
326
  transform.writeTarget();
303
327
  console.log(`Target file ${transform.target} did not exist and has been created.`);
304
328
  return 'created';
305
329
  }
306
- const { result, diff } = transform.compare(replace, verbose);
330
+ const { result, diff } = transform.compare(replace, verbose, commentObsolete);
307
331
  if (result === 'same') {
308
332
  if (verbose) {
309
333
  console.log((0, chalk_1.gray)(`File ${transform.target} has no changes.`));
@@ -1 +1 @@
1
- {"version":3,"file":"apply-templates.js","sourceRoot":"","sources":["../../../src/commands/apply-templates/apply-templates.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"apply-templates.js","sourceRoot":"","sources":["../../../src/commands/apply-templates/apply-templates.ts"],"names":[],"mappings":"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"}
@@ -6,6 +6,7 @@ const chalk = require("chalk");
6
6
  const child_process_1 = require("child_process");
7
7
  const fs_1 = require("fs");
8
8
  const path_1 = require("path");
9
+ const common_1 = require("../../common");
9
10
  /**
10
11
  * Calculates a path to `docker-compose.yaml` file based on initial path.
11
12
  * For example, if `scripts/infra` is provided as initial path, it will look for `scripts/infra/docker-compose.yml` in current folder, then in folder one hierarchy level up, traversing directories towards root.
@@ -61,20 +62,9 @@ const ensureDumpDirectoryExist = (targetPath) => {
61
62
  }
62
63
  return dbSchemaExportPath;
63
64
  };
64
- /**
65
- * Returns a readable timestamp in current locale time, e.g. `[2021-05-13 13:02:12.685]`
66
- */
67
- const getTimestamp = () => {
68
- const offset = new Date().getTimezoneOffset() * 60000; //offset in milliseconds
69
- const localISOTime = new Date(Date.now() - offset)
70
- .toISOString()
71
- .slice(0, -1)
72
- .replace('T', ' ');
73
- return `[${localISOTime}]`;
74
- };
75
65
  const generate = (options) => {
76
66
  try {
77
- console.log(getTimestamp(), `Starting pg-dump command...`);
67
+ console.log((0, common_1.getTimestamp)(), `Starting pg-dump command...`);
78
68
  const composePath = findComposePath(options.composeFolderPath);
79
69
  const connectionString = getDumpDbConnectionString(options.connectionString);
80
70
  const dumpPath = ensureDumpDirectoryExist(options.dumpPath);
@@ -92,19 +82,19 @@ const generate = (options) => {
92
82
  ].join(' ');
93
83
  (0, child_process_1.exec)(`cd ${composePath} && docker-compose exec -T postgres pg_dump ${dumpOptions} > ${dumpPath}`, (_error, stdout, stderr) => {
94
84
  if (stdout) {
95
- console.log(getTimestamp(), 'pg_dump info:', stdout);
85
+ console.log((0, common_1.getTimestamp)(), 'pg_dump info:', stdout);
96
86
  }
97
87
  if (stderr) {
98
- console.log(getTimestamp(), chalk.red('Command failed:'), stderr.trim());
88
+ console.log((0, common_1.getTimestamp)(), chalk.red('Command failed:'), stderr.trim());
99
89
  }
100
90
  else {
101
- console.log(getTimestamp(), chalk.green('Success:'), `Database schema dump created at '${chalk.blueBright(options.dumpPath)}'`);
91
+ console.log((0, common_1.getTimestamp)(), chalk.green('Success:'), `Database schema dump created at '${chalk.blueBright(options.dumpPath)}'`);
102
92
  }
103
93
  });
104
94
  }
105
95
  catch (err) {
106
96
  (0, mosaic_service_common_1.assertError)(err);
107
- console.log(getTimestamp(), chalk.red('Command failed:'), err.message);
97
+ console.log((0, common_1.getTimestamp)(), chalk.red('Command failed:'), err.message);
108
98
  }
109
99
  };
110
100
  exports.generate = generate;
@@ -1 +1 @@
1
- {"version":3,"file":"generate.js","sourceRoot":"","sources":["../../../src/commands/pg-dump/generate.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"generate.js","sourceRoot":"","sources":["../../../src/commands/pg-dump/generate.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export * from './utils';
@@ -0,0 +1,5 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const tslib_1 = require("tslib");
4
+ (0, tslib_1.__exportStar)(require("./utils"), exports);
5
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/common/index.ts"],"names":[],"mappings":";;;AAAA,uDAAwB"}
@@ -0,0 +1,4 @@
1
+ /**
2
+ * Returns a readable timestamp in current locale time, e.g. `[2021-05-13 13:02:12.685]`
3
+ */
4
+ export declare const getTimestamp: () => string;
@@ -0,0 +1,16 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getTimestamp = void 0;
4
+ /**
5
+ * Returns a readable timestamp in current locale time, e.g. `[2021-05-13 13:02:12.685]`
6
+ */
7
+ const getTimestamp = () => {
8
+ const offset = new Date().getTimezoneOffset() * 60000; //offset in milliseconds
9
+ const localISOTime = new Date(Date.now() - offset)
10
+ .toISOString()
11
+ .slice(0, -1)
12
+ .replace('T', ' ');
13
+ return `[${localISOTime}]`;
14
+ };
15
+ exports.getTimestamp = getTimestamp;
16
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/common/utils.ts"],"names":[],"mappings":";;;AAAA;;GAEG;AACI,MAAM,YAAY,GAAG,GAAW,EAAE;IACvC,MAAM,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC,iBAAiB,EAAE,GAAG,KAAK,CAAC,CAAC,wBAAwB;IAC/E,MAAM,YAAY,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,MAAM,CAAC;SAC/C,WAAW,EAAE;SACb,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;SACZ,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;IACrB,OAAO,IAAI,YAAY,GAAG,CAAC;AAC7B,CAAC,CAAC;AAPW,QAAA,YAAY,gBAOvB"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@axinom/mosaic-cli",
3
- "version": "0.17.1-rc.0",
3
+ "version": "0.18.0-rc.0",
4
4
  "description": "The Axinom Mosaic CLI",
5
5
  "author": "Axinom",
6
6
  "license": "PROPRIETARY",
@@ -33,8 +33,8 @@
33
33
  "@asyncapi/diff": "^0.4.0",
34
34
  "@asyncapi/modelina": "^0.43.0",
35
35
  "@asyncapi/parser": "^1.15.0",
36
- "@axinom/mosaic-id-link-be": "^0.12.1-rc.0",
37
- "@axinom/mosaic-service-common": "^0.29.1-rc.0",
36
+ "@axinom/mosaic-id-link-be": "^0.12.1-rc.1",
37
+ "@axinom/mosaic-service-common": "^0.29.1-rc.1",
38
38
  "@graphql-inspector/core": "^3.1.2",
39
39
  "@stoplight/spectral": "^5.9.1",
40
40
  "chalk": "^4.1.0",
@@ -65,5 +65,5 @@
65
65
  "publishConfig": {
66
66
  "access": "public"
67
67
  },
68
- "gitHead": "4a9c4dd5b7a48562a00f2e107754e834f404499d"
68
+ "gitHead": "4c902a0a3c6106b63b8e4a0dee30d510dc9eea89"
69
69
  }
@@ -19,6 +19,10 @@ jest.mock('fs', () => ({
19
19
  readdirSync: jest.fn((_) => Object.keys(mockFiles)),
20
20
  }));
21
21
 
22
+ jest.mock('../../common/utils', () => ({
23
+ getTimestamp: jest.fn(() => '[2023-03-14 10:33:52.223]'),
24
+ }));
25
+
22
26
  class MockVault implements Vault {
23
27
  constructor(
24
28
  private values: Record<string, string> = {
@@ -70,11 +74,9 @@ describe('applyTemplates', () => {
70
74
  saveEnv('1.env', template, prefix);
71
75
 
72
76
  // Act
73
- const result = transformComparison(
74
- new EnvConfigTransform('1.env.template', '1.env'),
75
- false,
76
- false,
77
- );
77
+ const transform = new EnvConfigTransform('1.env.template', '1.env');
78
+ const result = transformComparison(transform, false, false, false);
79
+ transform.writeTarget();
78
80
 
79
81
  // Assert
80
82
  expect(result).toBe('same');
@@ -91,11 +93,9 @@ describe('applyTemplates', () => {
91
93
  saveEnv('1.env.template', template);
92
94
 
93
95
  // Act
94
- const result = transformComparison(
95
- new EnvConfigTransform('1.env.template', '1.env'),
96
- false,
97
- false,
98
- );
96
+ const transform = new EnvConfigTransform('1.env.template', '1.env');
97
+ const result = transformComparison(transform, false, false, false);
98
+ transform.writeTarget();
99
99
 
100
100
  // Assert
101
101
  expect(result).toBe('created');
@@ -112,7 +112,9 @@ describe('applyTemplates', () => {
112
112
  'VAR4=<BITWARDEN_{placeholder}>\n' +
113
113
  'VAR5=<BITWARDEN_{placeholder}>\n' +
114
114
  'VAR6=\n' +
115
- 'VAR7=\n';
115
+ '# new template comment\n' + // ignored
116
+ 'VAR7=\n' +
117
+ 'VAR9=new-template-value';
116
118
  const target =
117
119
  'VAR1=1\n' +
118
120
  'VAR2=Old value\n' +
@@ -120,14 +122,16 @@ describe('applyTemplates', () => {
120
122
  'VAR3=Custom value\n' +
121
123
  'VAR4=Placeholder replaced\n' +
122
124
  'VAR6=Blank value replaced\n' +
123
- 'VAR8=My new value\n';
125
+ 'VAR8=My new value\n' +
126
+ '#VAR9=old-template-value\n' +
127
+ 'VAR9=custom-value\n';
124
128
  const prefix = '#@TEMPLATE = 1.env.template\n';
125
129
  writeFileSync('1.env.template', template);
126
130
  writeFileSync('1.env', target, prefix);
127
131
 
128
132
  // Act
129
133
  const transform = new EnvConfigTransform('1.env.template', '1.env');
130
- const result = transformComparison(transform, false, false);
134
+ const result = transformComparison(transform, false, false, false);
131
135
  transform.writeTarget();
132
136
 
133
137
  // Assert
@@ -139,13 +143,38 @@ describe('applyTemplates', () => {
139
143
  '#VAR3=3\n' +
140
144
  'VAR3=Custom value\n' +
141
145
  'VAR4=Placeholder replaced\n' +
142
- 'VAR5=<BITWARDEN_{placeholder}>\n' +
143
146
  'VAR6=Blank value replaced\n' +
144
- 'VAR7=\n' +
145
- '\n' +
147
+ '# Variable VAR8 is not a part of the template.\n' +
148
+ 'VAR8=My new value\n' +
149
+ '#VAR9=old-template-value\n' +
150
+ 'VAR9=custom-value\n' +
146
151
  '\n' +
147
- '# Additional keys (not in template)\n' +
148
- 'VAR8=My new value\n',
152
+ '# [2023-03-14 10:33:52.223] Newly added variables:\n' +
153
+ 'VAR5=<BITWARDEN_{placeholder}>\n' +
154
+ 'VAR7=\n',
155
+ );
156
+ });
157
+
158
+ it('target with differences and commentObsolete option -> different, non-template variables commented', () => {
159
+ // Arrange
160
+ const template = 'VAR1=1\n';
161
+ const target = 'VAR1=1\n' + 'VAR8=My new value\n';
162
+ const prefix = '#@TEMPLATE = 1.env.template\n';
163
+ writeFileSync('1.env.template', template);
164
+ writeFileSync('1.env', target, prefix);
165
+
166
+ // Act
167
+ const transform = new EnvConfigTransform('1.env.template', '1.env');
168
+ const result = transformComparison(transform, false, false, true);
169
+ transform.writeTarget();
170
+
171
+ // Assert
172
+ expect(result).toBe('different');
173
+ expect(readFileSync('1.env').toString()).toEqual(
174
+ prefix +
175
+ 'VAR1=1\n' +
176
+ '# Variable VAR8 is not a part of the template.\n' +
177
+ '# VAR8=My new value\n',
149
178
  );
150
179
  });
151
180
 
@@ -174,7 +203,7 @@ describe('applyTemplates', () => {
174
203
 
175
204
  // Act
176
205
  const transform = new EnvConfigTransform('1.env.template', '1.env');
177
- const result = transformComparison(transform, true, false);
206
+ const result = transformComparison(transform, true, false, false);
178
207
  transform.writeTarget();
179
208
 
180
209
  // Assert
@@ -182,7 +211,7 @@ describe('applyTemplates', () => {
182
211
  expect(readFileSync('1.env').toString()).toEqual(prefix + template);
183
212
  });
184
213
 
185
- it('comment changes -> different-layout', () => {
214
+ it('comment changes -> same', () => {
186
215
  // Arrange
187
216
  const template =
188
217
  '# some comment\n' +
@@ -190,8 +219,9 @@ describe('applyTemplates', () => {
190
219
  '# a new comment\n' +
191
220
  'BAR=2\n' +
192
221
  'FOO=3';
222
+ const prefix = '#@TEMPLATE = 1.env.template\n';
193
223
  const target0 =
194
- '#@TEMPLATE = 1.env.template\n' +
224
+ prefix +
195
225
  '# some slightly different comment\n' +
196
226
  'BLAH=1\n' +
197
227
  'BAR=2\n' +
@@ -200,27 +230,26 @@ describe('applyTemplates', () => {
200
230
  writeFileSync('1.env', target0);
201
231
 
202
232
  // Act
203
- const result = transformComparison(
204
- new EnvConfigTransform('1.env.template', '1.env'),
205
- false,
206
- false,
207
- );
233
+ const transform = new EnvConfigTransform('1.env.template', '1.env');
234
+ const result = transformComparison(transform, false, false, false);
235
+ transform.writeTarget();
208
236
 
209
237
  // Assert
210
- expect(result).toBe('differentLayout');
238
+ expect(result).toBe('same');
211
239
  expect(readFileSync('1.env.template').toString()).toEqual(template);
212
240
  expect(readFileSync('1.env').toString()).toEqual(target0);
213
241
  });
214
242
 
215
- it('whitespace changes -> different-layout', () => {
243
+ it('whitespace changes -> same', () => {
216
244
  // Arrange
217
245
  const template =
218
246
  '# a really really interesting comment\n' +
219
247
  'BLAH=1\n' +
220
248
  'FOO=2\n' +
221
249
  'BAR=3\n';
250
+ const prefix = '#@TEMPLATE = 1.env.template\n';
222
251
  const target0 =
223
- '#@TEMPLATE = 1.env.template\n' +
252
+ prefix +
224
253
  '# a really really interesting comment\n' +
225
254
  'BLAH=1\n' +
226
255
  '\n' +
@@ -231,27 +260,26 @@ describe('applyTemplates', () => {
231
260
  writeFileSync('1.env', target0);
232
261
 
233
262
  // Act
234
- const result = transformComparison(
235
- new EnvConfigTransform('1.env.template', '1.env'),
236
- false,
237
- false,
238
- );
263
+ const transform = new EnvConfigTransform('1.env.template', '1.env');
264
+ const result = transformComparison(transform, false, false, false);
265
+ transform.writeTarget();
239
266
 
240
267
  // Assert
241
- expect(result).toBe('differentLayout');
268
+ expect(result).toBe('same');
242
269
  expect(readFileSync('1.env.template').toString()).toEqual(template);
243
270
  expect(readFileSync('1.env').toString()).toEqual(target0);
244
271
  });
245
272
 
246
- it('ordering changes -> different-layout', () => {
273
+ it('ordering changes -> same', () => {
247
274
  // Arrange
248
275
  const template =
249
276
  '# a really really interesting comment\n' +
250
277
  'BLAH=1\n' +
251
278
  'FOO=2\n' +
252
279
  'BAR=3\n';
280
+ const prefix = '#@TEMPLATE = 1.env.template\n';
253
281
  const target0 =
254
- '#@TEMPLATE = 1.env.template\n' +
282
+ prefix +
255
283
  'FOO=2\n' +
256
284
  'BLAH=1\n' +
257
285
  'BAR=3\n' +
@@ -260,14 +288,12 @@ describe('applyTemplates', () => {
260
288
  writeFileSync('1.env', target0);
261
289
 
262
290
  // Act
263
- const result = transformComparison(
264
- new EnvConfigTransform('1.env.template', '1.env'),
265
- false,
266
- false,
267
- );
291
+ const transform = new EnvConfigTransform('1.env.template', '1.env');
292
+ const result = transformComparison(transform, false, false, false);
293
+ transform.writeTarget();
268
294
 
269
295
  // Assert
270
- expect(result).toBe('differentLayout');
296
+ expect(result).toBe('same');
271
297
  expect(readFileSync('1.env.template').toString()).toEqual(template);
272
298
  expect(readFileSync('1.env').toString()).toEqual(target0);
273
299
  });
@@ -279,7 +305,7 @@ describe('applyTemplates', () => {
279
305
 
280
306
  // Act
281
307
  const transform = new EnvConfigTransform('1.env.template', '1.env');
282
- const result = transformComparison(transform, false, false);
308
+ const result = transformComparison(transform, false, false, false);
283
309
  transform.writeTarget();
284
310
 
285
311
  const expectedTarget = '#@TEMPLATE = 1.env.template\n' + template;
@@ -298,7 +324,7 @@ describe('applyTemplates', () => {
298
324
 
299
325
  // Act
300
326
  const transform = new EnvConfigTransform('1.env.template', '1.env');
301
- const result = transformComparison(transform, false, false);
327
+ const result = transformComparison(transform, false, false, false);
302
328
  transform.writeTarget();
303
329
 
304
330
  const expectedTarget = '#@TEMPLATE = 1.env.template\n' + template;
@@ -318,7 +344,7 @@ describe('applyTemplates', () => {
318
344
 
319
345
  // Act
320
346
  const transform = new EnvConfigTransform('1.env.template', '1.env');
321
- const result = transformComparison(transform, false, false);
347
+ const result = transformComparison(transform, false, false, false);
322
348
  transform.writeTarget();
323
349
 
324
350
  // Assert
@@ -342,11 +368,13 @@ describe('applyTemplates', () => {
342
368
  saveEnv('1.env.template', template);
343
369
 
344
370
  // Act
345
- const result = transformComparison(
346
- new EnvConfigTransform('1.env.template', '1.env', new MockVault()),
347
- false,
348
- false,
371
+ const transform = new EnvConfigTransform(
372
+ '1.env.template',
373
+ '1.env',
374
+ new MockVault(),
349
375
  );
376
+ const result = transformComparison(transform, false, false, false);
377
+ transform.writeTarget();
350
378
 
351
379
  // Assert
352
380
  expect(result).toBe('created');
@@ -369,7 +397,7 @@ describe('applyTemplates', () => {
369
397
  '1.env',
370
398
  new MockVault(),
371
399
  );
372
- const result = transformComparison(transform, false, false);
400
+ const result = transformComparison(transform, false, false, false);
373
401
  transform.writeTarget();
374
402
 
375
403
  // Assert
@@ -395,11 +423,13 @@ describe('applyTemplates', () => {
395
423
  saveEnv('1.env', target, '#@TEMPLATE = 1.env.template\n');
396
424
 
397
425
  // Act
398
- const result = transformComparison(
399
- new EnvConfigTransform('1.env.template', '1.env', new MockVault()),
400
- false,
401
- false,
426
+ const transform = new EnvConfigTransform(
427
+ '1.env.template',
428
+ '1.env',
429
+ new MockVault(),
402
430
  );
431
+ const result = transformComparison(transform, false, false, false);
432
+ transform.writeTarget();
403
433
 
404
434
  // Assert
405
435
  expect(result).toBe('same');
@@ -426,7 +456,7 @@ describe('applyTemplates', () => {
426
456
  '1.env',
427
457
  new MockVault(),
428
458
  );
429
- const result = transformComparison(transform, false, false);
459
+ const result = transformComparison(transform, false, false, false);
430
460
  transform.writeTarget();
431
461
 
432
462
  // Assert
@@ -558,11 +588,9 @@ describe('applyTemplates', () => {
558
588
  writeFileSync('1', template);
559
589
 
560
590
  // Act
561
- const result = transformComparison(
562
- new ConfigTransform('1.template', '1'),
563
- false,
564
- false,
565
- );
591
+ const transform = new ConfigTransform('1.template', '1');
592
+ const result = transformComparison(transform, false, false, false);
593
+ transform.writeTarget();
566
594
 
567
595
  // Assert
568
596
  expect(result).toBe('same');
@@ -580,11 +608,9 @@ describe('applyTemplates', () => {
580
608
  writeFileSync('1.template', template);
581
609
 
582
610
  // Act
583
- const result = transformComparison(
584
- new ConfigTransform('1.template', '1'),
585
- false,
586
- false,
587
- );
611
+ const transform = new ConfigTransform('1.template', '1');
612
+ const result = transformComparison(transform, false, false, false);
613
+ transform.writeTarget();
588
614
 
589
615
  // Assert
590
616
  expect(result).toBe('created');
@@ -592,7 +618,7 @@ describe('applyTemplates', () => {
592
618
  expect(readFileSync('1').toString()).toEqual(template);
593
619
  });
594
620
 
595
- it('target with differences -> different', () => {
621
+ it('target with differences in order -> different', () => {
596
622
  // Arrange
597
623
  const template = `
598
624
  BLAH
@@ -608,16 +634,14 @@ describe('applyTemplates', () => {
608
634
  writeFileSync('1', target0);
609
635
 
610
636
  // Act
611
- const result = transformComparison(
612
- new ConfigTransform('1.template', '1'),
613
- false,
614
- false,
615
- );
637
+ const transform = new ConfigTransform('1.template', '1');
638
+ const result = transformComparison(transform, false, false, false);
639
+ transform.writeTarget();
616
640
 
617
641
  // Assert
618
642
  expect(result).toBe('different');
619
643
  expect(readFileSync('1.template').toString()).toEqual(template);
620
- expect(readFileSync('1').toString()).toEqual(target0);
644
+ expect(readFileSync('1').toString()).toEqual(template);
621
645
  });
622
646
  });
623
647
  });
@@ -10,6 +10,7 @@ import * as path from 'path';
10
10
  import * as readline from 'readline';
11
11
  import * as yargs from 'yargs';
12
12
  import { CommandModule } from 'yargs';
13
+ import { getTimestamp } from '../../common';
13
14
  import { BitwardenVault, Vault } from './bitwarden-vault';
14
15
 
15
16
  export interface ApplyTemplatesOptions {
@@ -19,6 +20,7 @@ export interface ApplyTemplatesOptions {
19
20
  verbose: boolean;
20
21
  replace: boolean;
21
22
  bitwardenUrl: string | undefined;
23
+ commentObsolete: boolean;
22
24
  }
23
25
 
24
26
  export interface DiffResult {
@@ -85,6 +87,14 @@ export const applyTemplates: CommandModule<unknown, ApplyTemplatesOptions> = {
85
87
  "Placeholders must be in the form: <BITWARDEN_{itemName::fieldName}> where fieldname can be 'username', 'password', or the name of a custom field.",
86
88
  default: undefined,
87
89
  hidden: true,
90
+ })
91
+ .option('commentObsolete', {
92
+ alias: 'co',
93
+ type: 'boolean',
94
+ describe:
95
+ 'Comments out all variables that are no longer in the template.',
96
+ default: false,
97
+ boolean: true,
88
98
  }),
89
99
  handler: compareTemplates,
90
100
  };
@@ -102,7 +112,7 @@ export class ConfigTransform {
102
112
 
103
113
  readonly targetExists: boolean;
104
114
 
105
- compare(_: boolean, __: boolean): DiffResult {
115
+ compare(_: boolean, __: boolean, ___: boolean): DiffResult {
106
116
  const templateContent = readFileSync(this.template).toString();
107
117
  const targetContent = readFileSync(this.target).toString();
108
118
  const diff = Diff.diffLines(targetContent, templateContent);
@@ -159,45 +169,73 @@ export class EnvConfigTransform extends ConfigTransform {
159
169
  );
160
170
  }
161
171
 
162
- private mergeContent(templateContent: string, targetContent: string): string {
163
- const vars = envfile.parse(templateContent);
172
+ private mergeContent(
173
+ templateContent: string,
174
+ targetContent: string,
175
+ commentObsolete: boolean,
176
+ ): string {
177
+ const templateVars = envfile.parse(templateContent);
164
178
  const targetVars = envfile.parse(targetContent);
165
- let mergedContent = templateContent;
179
+ const optionalCommentTag = commentObsolete ? '# ' : '';
180
+ let mergedContent = targetContent;
166
181
  let additionalContent = '';
182
+ for (const [k, v] of Object.entries(templateVars)) {
183
+ // if template variable is not in the .env file - append it at the end
184
+ if (!(k in targetVars)) {
185
+ additionalContent += `${envfile.stringify({ [k]: v })}`;
186
+ }
187
+ }
188
+
167
189
  for (const [k, v] of Object.entries(targetVars)) {
168
- // if key is not in template, then append target value to merged content
169
- if (!(k in vars)) {
170
- additionalContent += `\n${envfile.stringify({ [k]: v })}`;
171
- } else if (vars[k] !== v) {
190
+ if (!(k in templateVars)) {
191
+ // Handle obsolete variables in the existing .env file
192
+ // Add a comment (if not already present) that the variable is obsolete
193
+ // Comment the variable out if explicit flag is provided
194
+ const lineRegex = new RegExp(`(?<=(\n|^))${k}=`);
195
+ const line = targetContent.match(lineRegex);
196
+ const obsoleteVarDescription = `# Variable ${k} is not a part of the template.\n`;
197
+ const prefixToAttach = mergedContent.includes(obsoleteVarDescription)
198
+ ? ''
199
+ : obsoleteVarDescription;
200
+ mergedContent = mergedContent.replace(
201
+ lineRegex,
202
+ prefixToAttach + optionalCommentTag + line?.[0],
203
+ );
204
+ } else if (templateVars[k] !== v) {
172
205
  const commentRegex = new RegExp(`(?<=(\n|^))#${k}=`);
173
206
  const commented = targetContent.match(commentRegex);
174
- // use target value if template value looks like a placeholder
175
- // use target value if key is also included as a comment
176
- if (isPlaceholder(vars[k]) || vars[k] === '' || commented) {
177
- // keep commented template value (updated with current template value)
178
- const commentPrefix =
179
- commented && !mergedContent.match(commentRegex)
180
- ? '#' + envfile.stringify({ [k]: vars[k] })
181
- : '';
207
+ // if there is no dedicated comment for variable to preserve custom
208
+ // value, template value is not a placeholder, and template value is not
209
+ // empty - .env variable value is outdated and replaced with template value
210
+ if (
211
+ !commented &&
212
+ !isPlaceholder(templateVars[k]) &&
213
+ templateVars[k] !== ''
214
+ ) {
182
215
  mergedContent = mergedContent.replace(
183
216
  new RegExp(`(?<=(\n|^))${k}=.*?(\r?\n|$)`),
184
- commentPrefix + envfile.stringify({ [k]: vars[k], [k]: v }),
217
+ envfile.stringify({ [k]: templateVars[k] }),
185
218
  );
186
219
  }
187
220
  }
188
221
  }
222
+
189
223
  if (additionalContent !== '') {
190
- mergedContent += `\n\n# Additional keys (not in template)${additionalContent}`;
224
+ mergedContent += `\n# ${getTimestamp()} Newly added variables:\n${additionalContent}`;
191
225
  }
192
226
  return mergedContent;
193
227
  }
194
228
 
195
- compare(replace: boolean, verbose: boolean): DiffResult {
229
+ compare(
230
+ replace: boolean,
231
+ verbose: boolean,
232
+ commentObsolete: boolean,
233
+ ): DiffResult {
196
234
  const templateContent = this.readTemplate();
197
235
  const targetContent = readFileSync(this.target).toString();
198
236
  this.newContent = replace
199
237
  ? templateContent
200
- : this.mergeContent(templateContent, targetContent);
238
+ : this.mergeContent(templateContent, targetContent, commentObsolete);
201
239
 
202
240
  // set the #@TARGET prefix line
203
241
  this.newContent = setDefinedTemplate(
@@ -280,6 +318,7 @@ function compareTemplates(options: ApplyTemplatesOptions): void {
280
318
  transform,
281
319
  options.replace,
282
320
  options.verbose,
321
+ options.commentObsolete,
283
322
  );
284
323
  results[resultKey].push(transform);
285
324
  }
@@ -360,7 +399,9 @@ function compareTemplates(options: ApplyTemplatesOptions): void {
360
399
  }
361
400
 
362
401
  function setDefinedTemplate(targetText: string, templateName: string): string {
363
- return `#@TEMPLATE = ${path.basename(templateName)}\n` + targetText;
402
+ return getDefinedTemplate(targetText)
403
+ ? targetText
404
+ : `#@TEMPLATE = ${path.basename(templateName)}\n` + targetText;
364
405
  }
365
406
 
366
407
  function getDefinedTemplate(targetText: string): string | undefined {
@@ -407,6 +448,7 @@ export function transformComparison(
407
448
  transform: ConfigTransform,
408
449
  replace: boolean,
409
450
  verbose: boolean,
451
+ commentObsolete: boolean,
410
452
  ): DiffResult['result'] {
411
453
  if (!transform.targetExists) {
412
454
  transform.writeTarget();
@@ -416,7 +458,7 @@ export function transformComparison(
416
458
  return 'created';
417
459
  }
418
460
 
419
- const { result, diff } = transform.compare(replace, verbose);
461
+ const { result, diff } = transform.compare(replace, verbose, commentObsolete);
420
462
  if (result === 'same') {
421
463
  if (verbose) {
422
464
  console.log(gray(`File ${transform.target} has no changes.`));
@@ -9,6 +9,7 @@ import * as chalk from 'chalk';
9
9
  import { exec, ExecException } from 'child_process';
10
10
  import { existsSync, mkdirSync } from 'fs';
11
11
  import { dirname, join, normalize, relative } from 'path';
12
+ import { getTimestamp } from '../../common';
12
13
  import { PgDumpOptions } from './pg-dump-options';
13
14
 
14
15
  /**
@@ -83,18 +84,6 @@ const ensureDumpDirectoryExist = (targetPath: string): string => {
83
84
  return dbSchemaExportPath;
84
85
  };
85
86
 
86
- /**
87
- * Returns a readable timestamp in current locale time, e.g. `[2021-05-13 13:02:12.685]`
88
- */
89
- const getTimestamp = (): string => {
90
- const offset = new Date().getTimezoneOffset() * 60000; //offset in milliseconds
91
- const localISOTime = new Date(Date.now() - offset)
92
- .toISOString()
93
- .slice(0, -1)
94
- .replace('T', ' ');
95
- return `[${localISOTime}]`;
96
- };
97
-
98
87
  export const generate = (options: PgDumpOptions): void => {
99
88
  try {
100
89
  console.log(getTimestamp(), `Starting pg-dump command...`);
@@ -0,0 +1 @@
1
+ export * from './utils';
@@ -0,0 +1,11 @@
1
+ /**
2
+ * Returns a readable timestamp in current locale time, e.g. `[2021-05-13 13:02:12.685]`
3
+ */
4
+ export const getTimestamp = (): string => {
5
+ const offset = new Date().getTimezoneOffset() * 60000; //offset in milliseconds
6
+ const localISOTime = new Date(Date.now() - offset)
7
+ .toISOString()
8
+ .slice(0, -1)
9
+ .replace('T', ' ');
10
+ return `[${localISOTime}]`;
11
+ };