From 955074130e20603ed50725d5b1f2143d868de185 Mon Sep 17 00:00:00 2001 From: Blaine Bublitz Date: Wed, 6 Apr 2022 20:56:30 -0700 Subject: [PATCH 1/5] feat: Implement default configuration where possible --- index.js | 81 +++++++++++++++++++++++--- test/fixtures/babel.js/0/.babelrc | 3 - test/fixtures/babel.js/0/package.json | 2 +- test/fixtures/babel.jsx/0/.babelrc | 3 - test/fixtures/babel.jsx/0/package.json | 1 + test/fixtures/babel.ts/0/.babelrc | 3 - test/fixtures/babel.ts/0/package.json | 1 + test/fixtures/babel.tsx/0/.babelrc | 13 ----- test/fixtures/jsx/0/.babelrc | 3 - test/fixtures/jsx/0/package.json | 1 + test/fixtures/swc.js/0/.swcrc | 10 ---- test/fixtures/swc.jsx/0/.swcrc | 11 ---- test/fixtures/swc.ts/0/.swcrc | 10 ---- test/fixtures/swc.tsx/0/.swcrc | 11 ---- test/fixtures/ts/2/.babelrc | 13 ----- test/fixtures/ts/2/component.ts | 18 ------ test/fixtures/ts/2/package.json | 1 - test/fixtures/ts/2/test.ts | 20 ++++++- test/fixtures/ts/4/.swcrc | 10 ---- test/fixtures/tsx/2/.babelrc | 13 ----- test/fixtures/tsx/4/.swcrc | 11 ---- 21 files changed, 95 insertions(+), 144 deletions(-) delete mode 100644 test/fixtures/babel.js/0/.babelrc delete mode 100644 test/fixtures/babel.jsx/0/.babelrc delete mode 100644 test/fixtures/babel.ts/0/.babelrc delete mode 100644 test/fixtures/babel.tsx/0/.babelrc delete mode 100644 test/fixtures/jsx/0/.babelrc delete mode 100644 test/fixtures/swc.js/0/.swcrc delete mode 100644 test/fixtures/swc.jsx/0/.swcrc delete mode 100644 test/fixtures/swc.ts/0/.swcrc delete mode 100644 test/fixtures/swc.tsx/0/.swcrc delete mode 100644 test/fixtures/ts/2/.babelrc delete mode 100644 test/fixtures/ts/2/component.ts delete mode 100644 test/fixtures/ts/4/.swcrc delete mode 100644 test/fixtures/tsx/2/.babelrc delete mode 100644 test/fixtures/tsx/4/.swcrc diff --git a/index.js b/index.js index 4cb8083..d1ec14d 100644 --- a/index.js +++ b/index.js @@ -74,7 +74,7 @@ var extensions = { hook({ extensions: '.js', rootMode: 'upward-optional', - overrides: [{ only: [endsInBabelJs] }], + overrides: [{ only: [endsInBabelJs], presets: ['@babel/preset-env'] }], }); }, }, @@ -84,7 +84,7 @@ var extensions = { hook({ extensions: '.jsx', rootMode: 'upward-optional', - overrides: [{ only: [endsInBabelJsx] }], + overrides: [{ only: [endsInBabelJsx], presets: ['@babel/preset-env', '@babel/preset-react'] }], }); }, }, @@ -95,7 +95,7 @@ var extensions = { hook({ extensions: '.ts', rootMode: 'upward-optional', - overrides: [{ only: [endsInBabelTs] }], + overrides: [{ only: [endsInBabelTs], presets: ['@babel/preset-env', '@babel/preset-typescript'] }], }); }, }, @@ -106,7 +106,15 @@ var extensions = { hook({ extensions: '.tsx', rootMode: 'upward-optional', - overrides: [{ only: [endsInBabelTsx] }], + overrides: [{ + only: [endsInBabelTsx], presets: ['@babel/preset-env', '@babel/preset-react', [ + "@babel/preset-typescript", + { + "isTSX": true, + "allExtensions": true + } + ]] + }], }); }, }, @@ -172,7 +180,7 @@ var extensions = { hook({ extensions: '.jsx', rootMode: 'upward-optional', - overrides: [{ only: [endsInJsx] }], + overrides: [{ only: [endsInJsx], presets: ['@babel/preset-env', '@babel/preset-react'] }], }); }, }, @@ -223,6 +231,14 @@ var extensions = { extensions: '.js', only: [endsInSwcJs], ignore: [isNodeModules], + jsc: { + parser: { + syntax: 'ecmascript' + } + }, + module: { + type: 'commonjs' + } }); }, }, @@ -233,6 +249,15 @@ var extensions = { extensions: '.jsx', only: [endsInSwcJsx], ignore: [isNodeModules], + jsc: { + parser: { + syntax: 'ecmascript', + jsx: true + } + }, + module: { + type: 'commonjs' + } }); }, }, @@ -243,6 +268,14 @@ var extensions = { extensions: '.ts', only: [endsInSwcTs], ignore: [isNodeModules], + jsc: { + parser: { + syntax: 'typescript' + } + }, + module: { + type: 'commonjs' + } }); }, }, @@ -253,6 +286,15 @@ var extensions = { extensions: '.tsx', only: [endsInSwcTsx], ignore: [isNodeModules], + jsc: { + parser: { + syntax: 'typescript', + tsx: true + } + }, + module: { + type: 'commonjs' + } }); }, }, @@ -271,7 +313,7 @@ var extensions = { hook({ extensions: '.ts', rootMode: 'upward-optional', - overrides: [{ only: [endsInTs] }], + overrides: [{ only: [endsInTs], presets: ['@babel/preset-env', '@babel/preset-typescript'] }], }); }, }, @@ -292,6 +334,14 @@ var extensions = { extensions: '.ts', only: [endsInTs], ignore: [isNodeModules], + jsc: { + parser: { + syntax: 'typescript' + } + }, + module: { + type: 'commonjs' + } }); }, }, @@ -305,7 +355,15 @@ var extensions = { hook({ extensions: '.tsx', rootMode: 'upward-optional', - overrides: [{ only: [endsInTsx] }], + overrides: [{ + only: [endsInTsx], presets: ['@babel/preset-env', '@babel/preset-react', [ + "@babel/preset-typescript", + { + "isTSX": true, + "allExtensions": true + } + ]] + }], }); }, }, @@ -326,6 +384,15 @@ var extensions = { extensions: '.tsx', only: [endsInTsx], ignore: [isNodeModules], + jsc: { + parser: { + syntax: 'typescript', + tsx: true + } + }, + module: { + type: 'commonjs' + } }); }, }, diff --git a/test/fixtures/babel.js/0/.babelrc b/test/fixtures/babel.js/0/.babelrc deleted file mode 100644 index 7dd5e9d..0000000 --- a/test/fixtures/babel.js/0/.babelrc +++ /dev/null @@ -1,3 +0,0 @@ -{ - "presets": ["@babel/preset-react"] -} diff --git a/test/fixtures/babel.js/0/package.json b/test/fixtures/babel.js/0/package.json index 3d1a2a6..c98805b 100644 --- a/test/fixtures/babel.js/0/package.json +++ b/test/fixtures/babel.js/0/package.json @@ -1,7 +1,7 @@ { "dependencies": { "@babel/core": "^7.2.2", - "@babel/preset-react": "^7.0.0", + "@babel/preset-env": "^7.0.0", "@babel/register": "^7.0.0" } } diff --git a/test/fixtures/babel.jsx/0/.babelrc b/test/fixtures/babel.jsx/0/.babelrc deleted file mode 100644 index 7dd5e9d..0000000 --- a/test/fixtures/babel.jsx/0/.babelrc +++ /dev/null @@ -1,3 +0,0 @@ -{ - "presets": ["@babel/preset-react"] -} diff --git a/test/fixtures/babel.jsx/0/package.json b/test/fixtures/babel.jsx/0/package.json index 3d1a2a6..cec293f 100644 --- a/test/fixtures/babel.jsx/0/package.json +++ b/test/fixtures/babel.jsx/0/package.json @@ -1,6 +1,7 @@ { "dependencies": { "@babel/core": "^7.2.2", + "@babel/preset-env": "^7.0.0", "@babel/preset-react": "^7.0.0", "@babel/register": "^7.0.0" } diff --git a/test/fixtures/babel.ts/0/.babelrc b/test/fixtures/babel.ts/0/.babelrc deleted file mode 100644 index e15ac01..0000000 --- a/test/fixtures/babel.ts/0/.babelrc +++ /dev/null @@ -1,3 +0,0 @@ -{ - "presets": ["@babel/preset-typescript"] -} diff --git a/test/fixtures/babel.ts/0/package.json b/test/fixtures/babel.ts/0/package.json index 6298ebf..71c22d5 100644 --- a/test/fixtures/babel.ts/0/package.json +++ b/test/fixtures/babel.ts/0/package.json @@ -1,6 +1,7 @@ { "dependencies": { "@babel/core": "^7.2.2", + "@babel/preset-env": "^7.0.0", "@babel/preset-typescript": "^7.1.0", "@babel/register": "^7.0.0" } diff --git a/test/fixtures/babel.tsx/0/.babelrc b/test/fixtures/babel.tsx/0/.babelrc deleted file mode 100644 index 5bcced6..0000000 --- a/test/fixtures/babel.tsx/0/.babelrc +++ /dev/null @@ -1,13 +0,0 @@ -{ - "presets": [ - "@babel/preset-env", - "@babel/preset-react", - [ - "@babel/preset-typescript", - { - "isTSX": true, - "allExtensions": true - } - ] - ] -} diff --git a/test/fixtures/jsx/0/.babelrc b/test/fixtures/jsx/0/.babelrc deleted file mode 100644 index 7dd5e9d..0000000 --- a/test/fixtures/jsx/0/.babelrc +++ /dev/null @@ -1,3 +0,0 @@ -{ - "presets": ["@babel/preset-react"] -} diff --git a/test/fixtures/jsx/0/package.json b/test/fixtures/jsx/0/package.json index 3d1a2a6..cec293f 100644 --- a/test/fixtures/jsx/0/package.json +++ b/test/fixtures/jsx/0/package.json @@ -1,6 +1,7 @@ { "dependencies": { "@babel/core": "^7.2.2", + "@babel/preset-env": "^7.0.0", "@babel/preset-react": "^7.0.0", "@babel/register": "^7.0.0" } diff --git a/test/fixtures/swc.js/0/.swcrc b/test/fixtures/swc.js/0/.swcrc deleted file mode 100644 index a38ca9b..0000000 --- a/test/fixtures/swc.js/0/.swcrc +++ /dev/null @@ -1,10 +0,0 @@ -{ - "jsc": { - "parser": { - "syntax": "ecmascript" - } - }, - "module": { - "type": "commonjs" - } -} diff --git a/test/fixtures/swc.jsx/0/.swcrc b/test/fixtures/swc.jsx/0/.swcrc deleted file mode 100644 index 89600e0..0000000 --- a/test/fixtures/swc.jsx/0/.swcrc +++ /dev/null @@ -1,11 +0,0 @@ -{ - "jsc": { - "parser": { - "syntax": "ecmascript", - "jsx": true - } - }, - "module": { - "type": "commonjs" - } -} diff --git a/test/fixtures/swc.ts/0/.swcrc b/test/fixtures/swc.ts/0/.swcrc deleted file mode 100644 index a9c9497..0000000 --- a/test/fixtures/swc.ts/0/.swcrc +++ /dev/null @@ -1,10 +0,0 @@ -{ - "jsc": { - "parser": { - "syntax": "typescript" - } - }, - "module": { - "type": "commonjs" - } -} diff --git a/test/fixtures/swc.tsx/0/.swcrc b/test/fixtures/swc.tsx/0/.swcrc deleted file mode 100644 index 98f536d..0000000 --- a/test/fixtures/swc.tsx/0/.swcrc +++ /dev/null @@ -1,11 +0,0 @@ -{ - "jsc": { - "parser": { - "syntax": "typescript", - "tsx": true - } - }, - "module": { - "type": "commonjs" - } -} diff --git a/test/fixtures/ts/2/.babelrc b/test/fixtures/ts/2/.babelrc deleted file mode 100644 index 5bcced6..0000000 --- a/test/fixtures/ts/2/.babelrc +++ /dev/null @@ -1,13 +0,0 @@ -{ - "presets": [ - "@babel/preset-env", - "@babel/preset-react", - [ - "@babel/preset-typescript", - { - "isTSX": true, - "allExtensions": true - } - ] - ] -} diff --git a/test/fixtures/ts/2/component.ts b/test/fixtures/ts/2/component.ts deleted file mode 100644 index d26bcf1..0000000 --- a/test/fixtures/ts/2/component.ts +++ /dev/null @@ -1,18 +0,0 @@ -const React = { - createElement(Component: () => any) { - return Component(); - }, -}; - -// Test harmony arrow functions. -const Component = () => { - var trueKey: boolean = true; - var falseKey: boolean = false; - var subKey = { subProp: 1 }; - - // Test harmony object short notation. - return { data: { trueKey, falseKey, subKey } }; -}; - -// Test TSX syntax. -export default ; diff --git a/test/fixtures/ts/2/package.json b/test/fixtures/ts/2/package.json index 5fa8c33..cc3213f 100644 --- a/test/fixtures/ts/2/package.json +++ b/test/fixtures/ts/2/package.json @@ -2,7 +2,6 @@ "dependencies": { "@babel/core": "^7.2.2", "@babel/preset-env": "^7.2.3", - "@babel/preset-react": "^7.0.0", "@babel/preset-typescript": "^7.1.0", "@babel/register": "^7.0.0" } diff --git a/test/fixtures/ts/2/test.ts b/test/fixtures/ts/2/test.ts index 28103e5..a3a60b1 100644 --- a/test/fixtures/ts/2/test.ts +++ b/test/fixtures/ts/2/test.ts @@ -1,5 +1,19 @@ -import Component from './component'; - -var test: typeof Component = { ...Component }; +var test: { + data: { + trueKey: boolean; + falseKey: boolean; + subKey: { + subProp: number; + }; + }; +} = { + data: { + trueKey: true, + falseKey: false, + subKey: { + subProp: 1, + }, + }, +}; export default test; diff --git a/test/fixtures/ts/4/.swcrc b/test/fixtures/ts/4/.swcrc deleted file mode 100644 index a9c9497..0000000 --- a/test/fixtures/ts/4/.swcrc +++ /dev/null @@ -1,10 +0,0 @@ -{ - "jsc": { - "parser": { - "syntax": "typescript" - } - }, - "module": { - "type": "commonjs" - } -} diff --git a/test/fixtures/tsx/2/.babelrc b/test/fixtures/tsx/2/.babelrc deleted file mode 100644 index 5bcced6..0000000 --- a/test/fixtures/tsx/2/.babelrc +++ /dev/null @@ -1,13 +0,0 @@ -{ - "presets": [ - "@babel/preset-env", - "@babel/preset-react", - [ - "@babel/preset-typescript", - { - "isTSX": true, - "allExtensions": true - } - ] - ] -} diff --git a/test/fixtures/tsx/4/.swcrc b/test/fixtures/tsx/4/.swcrc deleted file mode 100644 index 98f536d..0000000 --- a/test/fixtures/tsx/4/.swcrc +++ /dev/null @@ -1,11 +0,0 @@ -{ - "jsc": { - "parser": { - "syntax": "typescript", - "tsx": true - } - }, - "module": { - "type": "commonjs" - } -} From b825d8cce7ec1dc63279791a1201cb56b1fbef85 Mon Sep 17 00:00:00 2001 From: Blaine Bublitz Date: Wed, 6 Apr 2022 20:59:25 -0700 Subject: [PATCH 2/5] some formatting --- index.js | 126 +++++++++++++++++++++++++++++++++++-------------------- 1 file changed, 80 insertions(+), 46 deletions(-) diff --git a/index.js b/index.js index d1ec14d..02d35e3 100644 --- a/index.js +++ b/index.js @@ -84,7 +84,12 @@ var extensions = { hook({ extensions: '.jsx', rootMode: 'upward-optional', - overrides: [{ only: [endsInBabelJsx], presets: ['@babel/preset-env', '@babel/preset-react'] }], + overrides: [ + { + only: [endsInBabelJsx], + presets: ['@babel/preset-env', '@babel/preset-react'], + }, + ], }); }, }, @@ -95,7 +100,12 @@ var extensions = { hook({ extensions: '.ts', rootMode: 'upward-optional', - overrides: [{ only: [endsInBabelTs], presets: ['@babel/preset-env', '@babel/preset-typescript'] }], + overrides: [ + { + only: [endsInBabelTs], + presets: ['@babel/preset-env', '@babel/preset-typescript'], + }, + ], }); }, }, @@ -106,15 +116,22 @@ var extensions = { hook({ extensions: '.tsx', rootMode: 'upward-optional', - overrides: [{ - only: [endsInBabelTsx], presets: ['@babel/preset-env', '@babel/preset-react', [ - "@babel/preset-typescript", - { - "isTSX": true, - "allExtensions": true - } - ]] - }], + overrides: [ + { + only: [endsInBabelTsx], + presets: [ + '@babel/preset-env', + '@babel/preset-react', + [ + '@babel/preset-typescript', + { + isTSX: true, + allExtensions: true, + }, + ], + ], + }, + ], }); }, }, @@ -180,7 +197,12 @@ var extensions = { hook({ extensions: '.jsx', rootMode: 'upward-optional', - overrides: [{ only: [endsInJsx], presets: ['@babel/preset-env', '@babel/preset-react'] }], + overrides: [ + { + only: [endsInJsx], + presets: ['@babel/preset-env', '@babel/preset-react'], + }, + ], }); }, }, @@ -233,12 +255,12 @@ var extensions = { ignore: [isNodeModules], jsc: { parser: { - syntax: 'ecmascript' - } + syntax: 'ecmascript', + }, }, module: { - type: 'commonjs' - } + type: 'commonjs', + }, }); }, }, @@ -252,12 +274,12 @@ var extensions = { jsc: { parser: { syntax: 'ecmascript', - jsx: true - } + jsx: true, + }, }, module: { - type: 'commonjs' - } + type: 'commonjs', + }, }); }, }, @@ -270,12 +292,12 @@ var extensions = { ignore: [isNodeModules], jsc: { parser: { - syntax: 'typescript' - } + syntax: 'typescript', + }, }, module: { - type: 'commonjs' - } + type: 'commonjs', + }, }); }, }, @@ -289,12 +311,12 @@ var extensions = { jsc: { parser: { syntax: 'typescript', - tsx: true - } + tsx: true, + }, }, module: { - type: 'commonjs' - } + type: 'commonjs', + }, }); }, }, @@ -313,7 +335,12 @@ var extensions = { hook({ extensions: '.ts', rootMode: 'upward-optional', - overrides: [{ only: [endsInTs], presets: ['@babel/preset-env', '@babel/preset-typescript'] }], + overrides: [ + { + only: [endsInTs], + presets: ['@babel/preset-env', '@babel/preset-typescript'], + }, + ], }); }, }, @@ -336,12 +363,12 @@ var extensions = { ignore: [isNodeModules], jsc: { parser: { - syntax: 'typescript' - } + syntax: 'typescript', + }, }, module: { - type: 'commonjs' - } + type: 'commonjs', + }, }); }, }, @@ -355,15 +382,22 @@ var extensions = { hook({ extensions: '.tsx', rootMode: 'upward-optional', - overrides: [{ - only: [endsInTsx], presets: ['@babel/preset-env', '@babel/preset-react', [ - "@babel/preset-typescript", - { - "isTSX": true, - "allExtensions": true - } - ]] - }], + overrides: [ + { + only: [endsInTsx], + presets: [ + '@babel/preset-env', + '@babel/preset-react', + [ + '@babel/preset-typescript', + { + isTSX: true, + allExtensions: true, + }, + ], + ], + }, + ], }); }, }, @@ -387,12 +421,12 @@ var extensions = { jsc: { parser: { syntax: 'typescript', - tsx: true - } + tsx: true, + }, }, module: { - type: 'commonjs' - } + type: 'commonjs', + }, }); }, }, From b69ce02510f81413186873d5bd3952248a7ce598 Mon Sep 17 00:00:00 2001 From: Blaine Bublitz Date: Mon, 11 Apr 2022 17:32:35 -0700 Subject: [PATCH 3/5] Allow overriding config when calling register for a hook --- index.js | 247 +++++++++++++++++++++++++++++++++++-------------------- 1 file changed, 157 insertions(+), 90 deletions(-) diff --git a/index.js b/index.js index 02d35e3..8c79279 100644 --- a/index.js +++ b/index.js @@ -70,19 +70,19 @@ function isNodeModules(file) { var extensions = { '.babel.js': { module: '@babel/register', - register: function (hook) { - hook({ - extensions: '.js', + register: function (hook, config) { + config = config || { rootMode: 'upward-optional', overrides: [{ only: [endsInBabelJs], presets: ['@babel/preset-env'] }], - }); + }; + + hook(Object.assign({}, config, { extensions: '.js' })); }, }, '.babel.jsx': { module: '@babel/register', - register: function (hook) { - hook({ - extensions: '.jsx', + register: function (hook, config) { + config = config || { rootMode: 'upward-optional', overrides: [ { @@ -90,15 +90,16 @@ var extensions = { presets: ['@babel/preset-env', '@babel/preset-react'], }, ], - }); + }; + + hook(Object.assign({}, config, { extensions: '.jsx' })); }, }, '.babel.ts': [ { module: '@babel/register', - register: function (hook) { - hook({ - extensions: '.ts', + register: function (hook, config) { + config = config || { rootMode: 'upward-optional', overrides: [ { @@ -106,15 +107,16 @@ var extensions = { presets: ['@babel/preset-env', '@babel/preset-typescript'], }, ], - }); + }; + + hook(Object.assign({}, config, { extensions: '.ts' })); }, }, ], '.babel.tsx': { module: '@babel/register', - register: function (hook) { - hook({ - extensions: '.tsx', + register: function (hook, config) { + config = config || { rootMode: 'upward-optional', overrides: [ { @@ -132,7 +134,9 @@ var extensions = { ], }, ], - }); + }; + + hook(Object.assign({}, config, { extensions: '.tsx' })); }, }, '.cjs': cjsStub, @@ -140,42 +144,46 @@ var extensions = { '.coffee.md': 'coffeescript/register', '.esbuild.js': { module: 'esbuild-register/dist/node', - register: function (mod) { - mod.register({ - extensions: ['.js'], + register: function (mod, config) { + config = config || { target: 'node' + process.version.slice(1), hookMatcher: endsInEsbuildJs, - }); + }; + + mod.register(Object.assign({}, config, { extensions: ['.js'] })); }, }, '.esbuild.jsx': { module: 'esbuild-register/dist/node', - register: function (mod) { - mod.register({ - extensions: ['.jsx'], + register: function (mod, config) { + config = config || { target: 'node' + process.version.slice(1), hookMatcher: endsInEsbuildJsx, - }); + }; + + mod.register(Object.assign({}, config, { extensions: ['.jsx'] })); }, }, '.esbuild.ts': { module: 'esbuild-register/dist/node', - register: function (mod) { - mod.register({ - extensions: ['.ts'], + register: function (mod, config) { + config = config || { target: 'node' + process.version.slice(1), hookMatcher: endsInEsbuildTs, - }); + }; + + mod.register(Object.assign({}, config, { extensions: ['.ts'] })); }, }, '.esbuild.tsx': { module: 'esbuild-register/dist/node', - register: function (mod) { - mod.register({ - extensions: ['.tsx'], + register: function (mod, config) { + config = config || { target: 'node' + process.version.slice(1), hookMatcher: endsInEsbuildTsx, - }); + }; + + mod.register(Object.assign({}, config, { extensions: ['.tsx'] })); }, }, '.esm.js': { @@ -193,9 +201,8 @@ var extensions = { '.jsx': [ { module: '@babel/register', - register: function (hook) { - hook({ - extensions: '.jsx', + register: function (hook, config) { + config = config || { rootMode: 'upward-optional', overrides: [ { @@ -203,7 +210,9 @@ var extensions = { presets: ['@babel/preset-env', '@babel/preset-react'], }, ], - }); + }; + + hook(Object.assign({}, config, { extensions: '.jsx' })); }, }, 'sucrase/register/jsx', @@ -216,41 +225,48 @@ var extensions = { '.node': null, '.sucrase.js': { module: 'sucrase/dist/register', - register: function (hook) { - hook.registerJS({ + register: function (hook, config) { + config = config || { matcher: endsInSucraseJs, - }); + }; + + hook.registerJS(config); }, }, '.sucrase.jsx': { module: 'sucrase/dist/register', - register: function (hook) { - hook.registerJSX({ + register: function (hook, config) { + config = config || { matcher: endsInSucraseJsx, - }); + }; + + hook.registerJSX(config); }, }, '.sucrase.ts': { module: 'sucrase/dist/register', - register: function (hook) { - hook.registerTS({ + register: function (hook, config) { + config = config || { matcher: endsInSucraseTs, - }); + }; + + hook.registerTS(config); }, }, '.sucrase.tsx': { module: 'sucrase/dist/register', - register: function (hook) { - hook.registerTSX({ + register: function (hook, config) { + config = config || { matcher: endsInSucraseTsx, - }); + }; + + hook.registerTSX(config); }, }, '.swc.js': { module: '@swc/register', - register: function (hook) { - hook({ - extensions: '.js', + register: function (hook, config) { + config = config || { only: [endsInSwcJs], ignore: [isNodeModules], jsc: { @@ -261,14 +277,19 @@ var extensions = { module: { type: 'commonjs', }, - }); + }; + + hook( + Object.assign({}, config, { + extensions: '.js', + }) + ); }, }, '.swc.jsx': { module: '@swc/register', - register: function (hook) { - hook({ - extensions: '.jsx', + register: function (hook, config) { + config = config || { only: [endsInSwcJsx], ignore: [isNodeModules], jsc: { @@ -280,14 +301,19 @@ var extensions = { module: { type: 'commonjs', }, - }); + }; + + hook( + Object.assign({}, config, { + extensions: '.jsx', + }) + ); }, }, '.swc.ts': { module: '@swc/register', - register: function (hook) { - hook({ - extensions: '.ts', + register: function (hook, config) { + config = config || { only: [endsInSwcTs], ignore: [isNodeModules], jsc: { @@ -298,14 +324,19 @@ var extensions = { module: { type: 'commonjs', }, - }); + }; + + hook( + Object.assign({}, config, { + extensions: '.ts', + }) + ); }, }, '.swc.tsx': { module: '@swc/register', - register: function (hook) { - hook({ - extensions: '.tsx', + register: function (hook, config) { + config = config || { only: [endsInSwcTsx], ignore: [isNodeModules], jsc: { @@ -317,13 +348,19 @@ var extensions = { module: { type: 'commonjs', }, - }); + }; + + hook( + Object.assign({}, config, { + extensions: '.tsx', + }) + ); }, }, '.toml': { module: 'toml-require', - register: function (hook) { - hook.install(); + register: function (hook, config) { + hook.install(config); }, }, '.ts': [ @@ -331,9 +368,8 @@ var extensions = { 'sucrase/register/ts', { module: '@babel/register', - register: function (hook) { - hook({ - extensions: '.ts', + register: function (hook, config) { + config = config || { rootMode: 'upward-optional', overrides: [ { @@ -341,24 +377,34 @@ var extensions = { presets: ['@babel/preset-env', '@babel/preset-typescript'], }, ], - }); + }; + + hook( + Object.assign({}, config, { + extensions: '.ts', + }) + ); }, }, { module: 'esbuild-register/dist/node', - register: function (mod) { - mod.register({ - extensions: ['.ts'], + register: function (mod, config) { + config = config || { target: 'node' + process.version.slice(1), hookMatcher: endsInTs, - }); + }; + + mod.register( + Object.assign({}, config, { + extensions: ['.ts'], + }) + ); }, }, { module: '@swc/register', - register: function (hook) { - hook({ - extensions: '.ts', + register: function (hook, config) { + config = config || { only: [endsInTs], ignore: [isNodeModules], jsc: { @@ -369,7 +415,13 @@ var extensions = { module: { type: 'commonjs', }, - }); + }; + + hook( + Object.assign({}, config, { + extensions: '.ts', + }) + ); }, }, ], @@ -378,9 +430,8 @@ var extensions = { 'sucrase/register/tsx', { module: '@babel/register', - register: function (hook) { - hook({ - extensions: '.tsx', + register: function (hook, config) { + config = config || { rootMode: 'upward-optional', overrides: [ { @@ -398,24 +449,34 @@ var extensions = { ], }, ], - }); + }; + + hook( + Object.assign({}, config, { + extensions: '.tsx', + }) + ); }, }, { module: 'esbuild-register/dist/node', - register: function (mod) { - mod.register({ - extensions: ['.tsx'], + register: function (mod, config) { + config = config || { target: 'node' + process.version.slice(1), hookMatcher: endsInTsx, - }); + }; + + mod.register( + Object.assign({}, config, { + extensions: ['.tsx'], + }) + ); }, }, { module: '@swc/register', - register: function (hook) { - hook({ - extensions: '.tsx', + register: function (hook, config) { + config = config || { only: [endsInTsx], ignore: [isNodeModules], jsc: { @@ -427,7 +488,13 @@ var extensions = { module: { type: 'commonjs', }, - }); + }; + + hook( + Object.assign({}, config, { + extensions: '.tsx', + }) + ); }, }, ], From 8741ac8d2b332ca987422910b04f801dc9fe9d7d Mon Sep 17 00:00:00 2001 From: Blaine Bublitz Date: Mon, 11 Apr 2022 17:32:42 -0700 Subject: [PATCH 4/5] formatting --- test/fixtures/ts/2/test.ts | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/test/fixtures/ts/2/test.ts b/test/fixtures/ts/2/test.ts index a3a60b1..3fa0969 100644 --- a/test/fixtures/ts/2/test.ts +++ b/test/fixtures/ts/2/test.ts @@ -1,19 +1,19 @@ var test: { - data: { - trueKey: boolean; - falseKey: boolean; - subKey: { - subProp: number; - }; + data: { + trueKey: boolean; + falseKey: boolean; + subKey: { + subProp: number; }; + }; } = { - data: { - trueKey: true, - falseKey: false, - subKey: { - subProp: 1, - }, + data: { + trueKey: true, + falseKey: false, + subKey: { + subProp: 1, }, + }, }; export default test; From 2cd9efb1bffe2bff6fad067ad47a09e1149a99ec Mon Sep 17 00:00:00 2001 From: Blaine Bublitz Date: Mon, 11 Apr 2022 17:38:31 -0700 Subject: [PATCH 5/5] Update docs for config overrides --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 7a58f52..146d8a5 100644 --- a/README.md +++ b/README.md @@ -20,7 +20,7 @@ Consumers should use the exported `extensions` or `jsVariants` object to determi 1. If the value is null, do nothing. 2. If the value is a string, try to require it. -3. If the value is an object, try to require the `module` property. If successful, the `register` property (a function) should be called with the module passed as the first argument. +3. If the value is an object, try to require the `module` property. If successful, the `register` property (a function) should be called with the module passed as the first argument. **Advanced:** An optional second argument can be provided to replace the default configuration for a hook. 4. If the value is an array, iterate over it, attempting step #2 or #3 until one of the attempts does not throw. ## API