Skip to content

Commit 861529e

Browse files
committed
module: add module.customConditions
Add module.customConditions which exposes the custom resolution conditions specified by the user. Fixes: #55824
1 parent 34f2496 commit 861529e

File tree

5 files changed

+84
-0
lines changed

5 files changed

+84
-0
lines changed

doc/api/module.md

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,46 @@ const require = createRequire(import.meta.url);
6666
const siblingModule = require('./sibling-module');
6767
```
6868
69+
### `module.customConditions`
70+
71+
<!-- YAML
72+
added: REPLACEME
73+
-->
74+
75+
* Type: {Set<string>}
76+
77+
The custom resolution conditions specified by the user. The default Node.js conditions are not included.
78+
79+
For example, assuming the following script for `module-customconditions.js`:
80+
81+
```mjs
82+
import module from 'node:module';
83+
84+
if (module.customConditions.has('development')) {
85+
console.warn('warning: running in development mode')
86+
}
87+
```
88+
89+
```cjs
90+
const module = require('node:module');
91+
92+
if (module.customConditions.has('development')) {
93+
console.warn('warning: running in development mode')
94+
}
95+
```
96+
97+
Launching the Node.js process as:
98+
99+
```console
100+
$ node -C development module-customconditions.js
101+
```
102+
103+
Would generate the output:
104+
105+
```text
106+
warning: running in development mode
107+
```
108+
69109
### `module.findPackageJSON(specifier[, base])`
70110
71111
<!-- YAML

lib/module.js

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,11 @@
11
'use strict';
22

3+
const {
4+
ObjectDefineProperty,
5+
SafeArrayIterator,
6+
Set,
7+
} = primordials;
8+
const { getOptionValue } = require('internal/options');
39
const {
410
findSourceMap,
511
getSourceMapsSupport,
@@ -23,6 +29,16 @@ const { stripTypeScriptTypes } = require('internal/modules/typescript');
2329

2430
Module.register = register;
2531
Module.constants = constants;
32+
ObjectDefineProperty(Module, 'customConditions', {
33+
__proto__: null,
34+
get() {
35+
const value = new Set(new SafeArrayIterator(getOptionValue('--conditions')));
36+
ObjectDefineProperty(this, 'customConditions', { __proto__: null, value, configurable: false });
37+
return value;
38+
},
39+
enumerable: true,
40+
configurable: true,
41+
});
2642
Module.enableCompileCache = enableCompileCache;
2743
Module.findPackageJSON = findPackageJSON;
2844
Module.flushCompileCache = flushCompileCache;
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
'use strict';
2+
3+
require('../common');
4+
const assert = require('node:assert');
5+
const { customConditions } = require('module');
6+
7+
assert.deepStrictEqual(customConditions, new Set());
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
'use strict';
2+
3+
// Flags: -C additional -C additional2
4+
5+
require('../common');
6+
const assert = require('node:assert');
7+
const { customConditions } = require('module');
8+
9+
assert.deepStrictEqual(
10+
customConditions,
11+
new Set(['additional', 'additional2'])
12+
);
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
'use strict';
2+
3+
// Flags: -C additional
4+
5+
require('../common');
6+
const assert = require('node:assert');
7+
const { customConditions } = require('module');
8+
9+
assert.deepStrictEqual(customConditions, new Set(['additional']));

0 commit comments

Comments
 (0)