@putout/engine-loader 17.0.0 → 17.0.2

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.
@@ -1,10 +1,15 @@
1
1
  import process from 'node:process';
2
2
  import {join} from 'node:path';
3
- import {createRequire} from 'node:module';
3
+ import module from 'node:module';
4
4
  import tryToCatch from 'try-to-catch';
5
5
  import {simpleImport as _simpleImport} from './simple-import.js';
6
6
 
7
+ const returns = (a) => () => a;
8
+ const noop = () => {};
9
+
10
+ const {createRequire = returns(noop)} = module;
7
11
  const require = createRequire(import.meta.url);
12
+
8
13
  const {assign} = Object;
9
14
  const stub = () => () => {};
10
15
 
@@ -20,9 +25,10 @@ export const createAsyncLoader = (type, overrides = {}) => {
20
25
  if (name.startsWith('import:')) {
21
26
  const shortName = name.replace('import:', '');
22
27
 
23
- return await cleverLoad([
24
- require.resolve(shortName),
25
- ], simpleImport);
28
+ return await cleverLoad([require.resolve(shortName)], {
29
+ simpleImport,
30
+ require,
31
+ });
26
32
  }
27
33
 
28
34
  const namesBase = [
@@ -37,16 +43,21 @@ export const createAsyncLoader = (type, overrides = {}) => {
37
43
  ...namesFromPluginsDirs,
38
44
  ]));
39
45
 
40
- return await cleverLoad(names, simpleImport);
46
+ return await cleverLoad(names, {
47
+ simpleImport,
48
+ require,
49
+ });
41
50
  };
42
51
  };
43
52
 
44
- async function cleverLoad(names, load) {
53
+ async function cleverLoad(names, overrides) {
54
+ const {simpleImport, require} = overrides;
55
+
45
56
  let e;
46
57
  let reporter;
47
58
 
48
59
  for (const name of names) {
49
- [e, reporter] = await tryToCatch(load, name);
60
+ [e, reporter] = await tryToCatch(simpleImport, name);
50
61
 
51
62
  if (!e)
52
63
  return reporter;
@@ -54,7 +65,7 @@ async function cleverLoad(names, load) {
54
65
  if (e.code === 'ERR_UNSUPPORTED_DIR_IMPORT') {
55
66
  const fullName = require.resolve(name);
56
67
 
57
- [e, reporter] = await tryToCatch(load, fullName);
68
+ [e, reporter] = await tryToCatch(simpleImport, fullName);
58
69
 
59
70
  if (!e)
60
71
  return reporter;
package/lib/load/load.js CHANGED
@@ -1,12 +1,13 @@
1
1
  import process from 'node:process';
2
- import {
3
- createRequire as _createRequire,
4
- createRequire,
5
- } from 'node:module';
2
+ import module from 'node:module';
6
3
  import {join} from 'node:path';
7
4
  import tryCatch from 'try-catch';
8
5
 
9
- const require = createRequire(import.meta.url);
6
+ const returns = (a) => () => a;
7
+ const noop = () => {};
8
+
9
+ const {createRequire: _createRequire = returns(noop)} = module;
10
+
10
11
  const bigFirst = (a) => `${a[0].toUpperCase()}${a.slice(1)}`;
11
12
 
12
13
  const load = (type) => (overrides) => {
@@ -63,8 +64,15 @@ function getPath(namespace, type, name, overrides) {
63
64
 
64
65
  const {env} = process;
65
66
 
66
- const createCustomRequire = (createRequire) => createRequire(require.resolve(env.PUTOUT_YARN_PNP || 'putout'));
67
- const createPutoutRequire = (createRequire) => createRequire(require.resolve('putout'));
67
+ const createCustomRequire = (createRequire) => {
68
+ const require = createRequire(import.meta.url);
69
+ return createRequire(require.resolve(env.PUTOUT_YARN_PNP || 'putout'));
70
+ };
71
+
72
+ const createPutoutRequire = (createRequire) => {
73
+ const require = createRequire(import.meta.url);
74
+ return createRequire(require.resolve('putout'));
75
+ };
68
76
 
69
77
  // That's all for Yarn P'n'P
70
78
  //
@@ -1,12 +1,14 @@
1
- import {createRequire} from 'node:module';
1
+ import module from 'node:module';
2
2
  import validatePlugin from './validate-plugin.js';
3
3
  import {prepareRules} from './prepare-rules.js';
4
4
  import {isEnabled} from '../rules/index.js';
5
5
  import {filterEnabledPlugins} from './filter-enabled-plugins.js';
6
6
  import {check, checkRule} from '../check/index.js';
7
7
 
8
- const require = createRequire(import.meta.url);
8
+ const noop = () => {};
9
+ const returns = (a) => () => a;
9
10
 
11
+ const {createRequire = returns(noop)} = module;
10
12
  const {isArray} = Array;
11
13
 
12
14
  export const loadPlugins = (options) => {
@@ -89,6 +91,7 @@ function extendRules(rule, plugin) {
89
91
  // add support of esm.sh
90
92
  // https://github.com/esm-dev/esm.sh/issues/1045
91
93
  function loadOnePlugin({name, namespace}) {
94
+ const require = createRequire(import.meta.url);
92
95
  const {loadPlugin} = require('../load/load.js');
93
96
 
94
97
  return loadPlugin({
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@putout/engine-loader",
3
- "version": "17.0.0",
3
+ "version": "17.0.2",
4
4
  "type": "module",
5
5
  "author": "coderaiser <mnemonic.enemy@gmail.com> (https://github.com/coderaiser)",
6
6
  "description": "load plugins and prepare them to run",
@@ -44,6 +44,7 @@
44
44
  "@putout/plugin-remove-debugger": "*",
45
45
  "@putout/processor-javascript": "*",
46
46
  "@putout/processor-markdown": "*",
47
+ "@putout/test": "^14.2.0",
47
48
  "c8": "^10.0.0",
48
49
  "eslint": "^10.0.0-alpha.0",
49
50
  "eslint-plugin-n": "^17.0.0",
@@ -0,0 +1,3 @@
1
+ # Rules
2
+
3
+ - ✅ [`apply-import-module`](https://putout.cloudcmd.io/#/gist/8b79f8b172c6f9a532468ab7f79592f1/cd1d416c6104863c1b65f5c30118297ed5b2fc14);
@@ -0,0 +1,6 @@
1
+ {
2
+ import module from 'node:module';
3
+
4
+ const {createRequire = returns(noop)} = module;
5
+ }
6
+ const require = createRequire(import.meta.url);
@@ -0,0 +1,3 @@
1
+ import {createRequire} from 'node:module';
2
+
3
+ const require = createRequire(import.meta.url);
@@ -0,0 +1,6 @@
1
+ {
2
+ import module from 'node:module';
3
+
4
+ const {createRequire: _createRequire = returns(noop)} = module;
5
+ }
6
+ const require = createRequire(import.meta.url);
@@ -0,0 +1,5 @@
1
+ import {
2
+ createRequire as _createRequire,
3
+ } from 'node:module';
4
+
5
+ const require = createRequire(import.meta.url);
@@ -0,0 +1,4 @@
1
+ import {createRequire} from 'node:module';
2
+ import {test, stub} from 'supertape';
3
+
4
+ const require = createRequire(import.meta.url);
@@ -0,0 +1,4 @@
1
+ import {createRequire} from 'node:module';
2
+ import {test} from 'supertape';
3
+
4
+ const require = createRequire(import.meta.url);
@@ -0,0 +1,32 @@
1
+ import {operator} from 'putout';
2
+
3
+ const {compare} = operator;
4
+
5
+ export const report = () => `Use 'import {createRequire}' -> 'import module' for rollup'`;
6
+
7
+ export const match = () => ({
8
+ 'import {createRequire} from "node:module"': isTest,
9
+ 'const require = createRequire(import.meta.url)': isTest,
10
+ });
11
+
12
+ export const replace = () => ({
13
+ 'import {createRequire} from "node:module"': `{
14
+ import module from "node:module";
15
+ const {createRequire = returns(noop)} = module;
16
+ }`,
17
+ 'import {createRequire as __a} from "node:module"': `{
18
+ import module from "node:module";
19
+ const {createRequire: __a = returns(noop)} = module;
20
+ }`,
21
+ });
22
+
23
+ function isTest(vars, path) {
24
+ const {body} = path.parentPath.node;
25
+
26
+ for (const current of body) {
27
+ if (compare(current, 'import __imports from "supertape"'))
28
+ return false;
29
+ }
30
+
31
+ return true;
32
+ }