@flexent/stack-backend 2.16.0 → 2.17.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.
@@ -20,7 +20,7 @@ import { ProcessMetrics } from './ProcessMetrics.js';
20
20
  import { ProcessSignals } from './ProcessSignals.js';
21
21
  import { StandardLogger } from './StandardLogger.js';
22
22
  import { assertMissingDeps } from './utils/deps.js';
23
- import { configureEnv, getEnvName } from './utils/env.js';
23
+ import { assertEnv, configureEnv, getEnvName } from './utils/env.js';
24
24
  const process = global.process;
25
25
  /**
26
26
  * Common application setup with Mesh IoC, logger, metrics and start/stop hooks.
@@ -62,6 +62,7 @@ export class BaseApp {
62
62
  async start() {
63
63
  const env = getEnvName();
64
64
  configureEnv(env);
65
+ assertEnv();
65
66
  this.processEnvConfig.refresh();
66
67
  this.logger.info('Starting application', { env });
67
68
  assertMissingDeps(this.mesh);
@@ -1 +1 @@
1
- {"version":3,"file":"BaseApp.js","sourceRoot":"","sources":["../../src/main/BaseApp.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"BaseApp.js","sourceRoot":"","sources":["../../src/main/BaseApp.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,6 @@
1
1
  export type EnvName = 'development' | 'test' | 'production';
2
2
  export declare function getEnvName(): "development" | "test" | "production";
3
- export declare function loadEnvFile(path: string): void;
3
+ export declare function isLikelyTestRunner(argv?: string[]): boolean;
4
+ export declare function loadEnvFile(path: string, override?: boolean): void;
4
5
  export declare function configureEnv(env: EnvName): void;
6
+ export declare function assertEnv(): void;
@@ -1,3 +1,5 @@
1
+ import { readFileSync } from 'node:fs';
2
+ import { parseEnv } from 'node:util';
1
3
  export function getEnvName() {
2
4
  if (process.env.NODE_ENV === 'development') {
3
5
  return 'development';
@@ -7,15 +9,26 @@ export function getEnvName() {
7
9
  }
8
10
  return 'production';
9
11
  }
10
- export function loadEnvFile(path) {
11
- try {
12
- process.loadEnvFile(path);
12
+ export function isLikelyTestRunner(argv = process.argv) {
13
+ for (const arg of argv) {
14
+ if (isMochaPath(arg) || isTestFilePath(arg)) {
15
+ return true;
16
+ }
13
17
  }
14
- catch (error) {
15
- if (error?.code === 'ENOENT') {
16
- return;
18
+ return false;
19
+ }
20
+ export function loadEnvFile(path, override = false) {
21
+ const parsed = readEnvFile(path);
22
+ if (parsed == null) {
23
+ return;
24
+ }
25
+ for (const [key, value] of Object.entries(parsed)) {
26
+ if (value === undefined) {
27
+ continue;
28
+ }
29
+ if (override || process.env[key] === undefined) {
30
+ process.env[key] = value;
17
31
  }
18
- throw error;
19
32
  }
20
33
  }
21
34
  export function configureEnv(env) {
@@ -24,8 +37,73 @@ export function configureEnv(env) {
24
37
  loadEnvFile('.env.dev');
25
38
  }
26
39
  if (env === 'test') {
27
- loadEnvFile('.env.test');
40
+ loadEnvFile('.env.test', true);
28
41
  loadEnvFile('.env.dev');
29
42
  }
30
43
  }
44
+ export function assertEnv() {
45
+ if (!isLikelyTestRunner()) {
46
+ return;
47
+ }
48
+ if (process.env.NODE_ENV !== 'test') {
49
+ failTestEnv(formatNodeEnvError());
50
+ }
51
+ const expected = readEnvFile('.env.test');
52
+ if (expected == null) {
53
+ return;
54
+ }
55
+ const mismatches = findMismatches(expected);
56
+ if (mismatches.length > 0) {
57
+ failTestEnv(formatMismatchError(mismatches));
58
+ }
59
+ }
60
+ function readEnvFile(path) {
61
+ try {
62
+ return parseEnv(readFileSync(path, 'utf8'));
63
+ }
64
+ catch (error) {
65
+ if (error?.code === 'ENOENT') {
66
+ return null;
67
+ }
68
+ throw error;
69
+ }
70
+ }
71
+ function findMismatches(expected) {
72
+ const mismatches = [];
73
+ for (const [key, value] of Object.entries(expected)) {
74
+ if (value === undefined) {
75
+ continue;
76
+ }
77
+ if (process.env[key] !== value) {
78
+ mismatches.push(key);
79
+ }
80
+ }
81
+ return mismatches;
82
+ }
83
+ function isMochaPath(arg) {
84
+ return /(?:^|[/\\])_?mocha(?:\.js|\.cjs|\.mjs|\.cmd|\.exe)?$/.test(arg);
85
+ }
86
+ function isTestFilePath(arg) {
87
+ return /\.test\.[cm]?[jt]s$/.test(arg);
88
+ }
89
+ function failTestEnv(message) {
90
+ console.error(message);
91
+ process.exit(1);
92
+ }
93
+ function formatNodeEnvError() {
94
+ const actual = process.env.NODE_ENV;
95
+ const shown = actual == null ? '<unset>' : JSON.stringify(actual);
96
+ return [
97
+ 'Refusing to start: this process looks like a test runner, but NODE_ENV is not "test".',
98
+ `Current NODE_ENV: ${shown}`,
99
+ 'Run tests with NODE_ENV=test (e.g. npm test).',
100
+ ].join('\n');
101
+ }
102
+ function formatMismatchError(mismatches) {
103
+ return [
104
+ 'Refusing to start: this process looks like a test runner, but process.env does not match .env.test.',
105
+ `Mismatched keys: ${mismatches.join(', ')}`,
106
+ 'Run tests with NODE_ENV=test so .env.test is applied.',
107
+ ].join('\n');
108
+ }
31
109
  //# sourceMappingURL=env.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"env.js","sourceRoot":"","sources":["../../../src/main/utils/env.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,UAAU;IACtB,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,aAAa,EAAE,CAAC;QACzC,OAAO,aAAa,CAAC;IACzB,CAAC;IACD,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,MAAM,EAAE,CAAC;QAClC,OAAO,MAAM,CAAC;IAClB,CAAC;IACD,OAAO,YAAY,CAAC;AACxB,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,IAAY;IACpC,IAAI,CAAC;QACD,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;IAC9B,CAAC;IAAC,OAAO,KAAU,EAAE,CAAC;QAClB,IAAI,KAAK,EAAE,IAAI,KAAK,QAAQ,EAAE,CAAC;YAC3B,OAAO;QACX,CAAC;QACD,MAAM,KAAK,CAAC;IAChB,CAAC;AACL,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,GAAY;IACrC,WAAW,CAAC,MAAM,CAAC,CAAC;IACpB,IAAI,GAAG,KAAK,aAAa,EAAE,CAAC;QACxB,WAAW,CAAC,UAAU,CAAC,CAAC;IAC5B,CAAC;IACD,IAAI,GAAG,KAAK,MAAM,EAAE,CAAC;QACjB,WAAW,CAAC,WAAW,CAAC,CAAC;QACzB,WAAW,CAAC,UAAU,CAAC,CAAC;IAC5B,CAAC;AACL,CAAC"}
1
+ {"version":3,"file":"env.js","sourceRoot":"","sources":["../../../src/main/utils/env.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,144 @@
1
+ import assert from 'node:assert';
2
+ import { mkdtempSync, rmSync, writeFileSync } from 'node:fs';
3
+ import { tmpdir } from 'node:os';
4
+ import { join } from 'node:path';
5
+ import { assertEnv, configureEnv, isLikelyTestRunner, loadEnvFile, } from '../main/utils/env.js';
6
+ const KEY_A = 'FLEXENT_ENV_TEST_A';
7
+ const KEY_B = 'FLEXENT_ENV_TEST_B';
8
+ const KEY_SHARED = 'FLEXENT_ENV_TEST_SHARED';
9
+ describe('isLikelyTestRunner', () => {
10
+ it('detects mocha binaries', () => {
11
+ assert.strictEqual(isLikelyTestRunner(['node', '/app/node_modules/.bin/mocha']), true);
12
+ assert.strictEqual(isLikelyTestRunner(['node', '/app/node_modules/mocha/bin/mocha.js']), true);
13
+ assert.strictEqual(isLikelyTestRunner(['node', 'C:\\app\\node_modules\\.bin\\mocha.cmd']), true);
14
+ });
15
+ it('detects test files', () => {
16
+ assert.strictEqual(isLikelyTestRunner(['node', './out/foo.test.js']), true);
17
+ assert.strictEqual(isLikelyTestRunner(['node', './out/foo.test.mjs']), true);
18
+ assert.strictEqual(isLikelyTestRunner(['tsx', './src/foo.test.ts']), true);
19
+ });
20
+ it('ignores regular app entrypoints', () => {
21
+ assert.strictEqual(isLikelyTestRunner(['node', './out/main/index.js']), false);
22
+ assert.strictEqual(isLikelyTestRunner(['node', './scripts/mocha-reporter.js']), false);
23
+ });
24
+ });
25
+ describe('loadEnvFile', () => {
26
+ let dir = '';
27
+ let file = '';
28
+ beforeEach(() => {
29
+ dir = mkdtempSync(join(tmpdir(), 'flexent-env-'));
30
+ file = join(dir, '.env');
31
+ delete process.env[KEY_A];
32
+ delete process.env[KEY_B];
33
+ });
34
+ afterEach(() => {
35
+ delete process.env[KEY_A];
36
+ delete process.env[KEY_B];
37
+ rmSync(dir, { recursive: true, force: true });
38
+ });
39
+ it('does not throw when the file is missing', () => {
40
+ loadEnvFile(join(dir, 'missing.env'));
41
+ });
42
+ it('does not override existing variables by default', () => {
43
+ writeFileSync(file, `${KEY_A}=fromfile\n${KEY_B}=fromfile\n`);
44
+ process.env[KEY_A] = 'fromshell';
45
+ loadEnvFile(file);
46
+ assert.strictEqual(process.env[KEY_A], 'fromshell');
47
+ assert.strictEqual(process.env[KEY_B], 'fromfile');
48
+ });
49
+ it('overrides existing variables when requested', () => {
50
+ writeFileSync(file, `${KEY_A}=fromfile\n`);
51
+ process.env[KEY_A] = 'fromshell';
52
+ loadEnvFile(file, true);
53
+ assert.strictEqual(process.env[KEY_A], 'fromfile');
54
+ });
55
+ });
56
+ describe('configureEnv', () => {
57
+ let dir = '';
58
+ let cwd = '';
59
+ beforeEach(() => {
60
+ dir = mkdtempSync(join(tmpdir(), 'flexent-env-'));
61
+ cwd = process.cwd();
62
+ writeFileSync(join(dir, '.env'), `${KEY_A}=base\n`);
63
+ writeFileSync(join(dir, '.env.dev'), `${KEY_B}=dev\n${KEY_SHARED}=dev\n`);
64
+ writeFileSync(join(dir, '.env.test'), `${KEY_SHARED}=test\n`);
65
+ delete process.env[KEY_A];
66
+ delete process.env[KEY_B];
67
+ delete process.env[KEY_SHARED];
68
+ process.chdir(dir);
69
+ });
70
+ afterEach(() => {
71
+ process.chdir(cwd);
72
+ delete process.env[KEY_A];
73
+ delete process.env[KEY_B];
74
+ delete process.env[KEY_SHARED];
75
+ rmSync(dir, { recursive: true, force: true });
76
+ });
77
+ it('lets .env.test override a polluted shell in test mode', () => {
78
+ process.env[KEY_SHARED] = 'fromshell';
79
+ configureEnv('test');
80
+ assert.strictEqual(process.env[KEY_A], 'base');
81
+ assert.strictEqual(process.env[KEY_B], 'dev');
82
+ assert.strictEqual(process.env[KEY_SHARED], 'test');
83
+ });
84
+ it('does not load .env.test in development', () => {
85
+ process.env[KEY_SHARED] = 'fromshell';
86
+ configureEnv('development');
87
+ assert.strictEqual(process.env[KEY_SHARED], 'fromshell');
88
+ assert.strictEqual(process.env[KEY_B], 'dev');
89
+ });
90
+ });
91
+ describe('assertTestEnv', () => {
92
+ let dir = '';
93
+ let cwd = '';
94
+ let exitCode;
95
+ const originalExit = process.exit;
96
+ const originalError = console.error;
97
+ let errors = [];
98
+ beforeEach(() => {
99
+ dir = mkdtempSync(join(tmpdir(), 'flexent-env-'));
100
+ cwd = process.cwd();
101
+ exitCode = undefined;
102
+ errors = [];
103
+ process.chdir(dir);
104
+ process.exit = ((code) => {
105
+ exitCode = code ?? 0;
106
+ throw new Error('EXIT');
107
+ });
108
+ console.error = (...args) => {
109
+ errors.push(args.map(String).join(' '));
110
+ };
111
+ });
112
+ afterEach(() => {
113
+ process.exit = originalExit;
114
+ console.error = originalError;
115
+ process.chdir(cwd);
116
+ process.env.NODE_ENV = 'test';
117
+ delete process.env[KEY_SHARED];
118
+ rmSync(dir, { recursive: true, force: true });
119
+ });
120
+ it('passes when NODE_ENV=test and .env.test is absent', () => {
121
+ assertEnv();
122
+ assert.strictEqual(exitCode, undefined);
123
+ });
124
+ it('exits when NODE_ENV is not test', () => {
125
+ process.env.NODE_ENV = 'development';
126
+ assert.throws(() => assertEnv(), /EXIT/);
127
+ assert.strictEqual(exitCode, 1);
128
+ assert.match(errors.join('\n'), /NODE_ENV is not "test"/);
129
+ });
130
+ it('exits when process.env does not match .env.test', () => {
131
+ writeFileSync(join(dir, '.env.test'), `${KEY_SHARED}=test\n`);
132
+ process.env[KEY_SHARED] = 'fromshell';
133
+ assert.throws(() => assertEnv(), /EXIT/);
134
+ assert.strictEqual(exitCode, 1);
135
+ assert.match(errors.join('\n'), new RegExp(KEY_SHARED));
136
+ });
137
+ it('passes when process.env matches .env.test', () => {
138
+ writeFileSync(join(dir, '.env.test'), `${KEY_SHARED}=test\n`);
139
+ process.env[KEY_SHARED] = 'test';
140
+ assertEnv();
141
+ assert.strictEqual(exitCode, undefined);
142
+ });
143
+ });
144
+ //# sourceMappingURL=env.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"env.test.js","sourceRoot":"","sources":["../../src/test/env.test.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@flexent/stack-backend",
3
- "version": "2.16.0",
3
+ "version": "2.17.0",
4
4
  "description": "Backend basic setup",
5
5
  "author": "Boris Okunskiy",
6
6
  "license": "MIT",
@@ -11,11 +11,14 @@
11
11
  "files": [
12
12
  "out"
13
13
  ],
14
+ "scripts": {
15
+ "test": "NODE_ENV=test mocha"
16
+ },
14
17
  "peerDependencies": {
15
- "@flexent/errors": "^2.16.0",
16
- "@flexent/http-router": "^2.16.0",
17
- "@flexent/http-server": "^2.16.0",
18
- "@flexent/logger": "^2.16.0",
18
+ "@flexent/errors": "^2.17.0",
19
+ "@flexent/http-router": "^2.17.0",
20
+ "@flexent/http-server": "^2.17.0",
21
+ "@flexent/logger": "^2.17.0",
19
22
  "mesh-config": "^1.3.4",
20
23
  "mesh-decorators": "^1.3.6",
21
24
  "mesh-ioc": "^4.3.1",