corejs-upgrade-webpack-plugin
Advanced tools
Comparing version 1.0.1 to 2.0.0
import { NormalModuleReplacementPlugin } from 'webpack'; | ||
export declare const rewriteCoreJsRequest: (originalRequest: string) => string; | ||
export declare const rewriteCoreJsRequest: (originalRequest: string, lowerVersion?: boolean) => string; | ||
export interface Options { | ||
@@ -4,0 +4,0 @@ resolveFrom: string | false; |
@@ -21,12 +21,26 @@ "use strict"; | ||
const rewriteCoreJsRequest = originalRequest => { | ||
const rewriteRenamedModules = path => { | ||
if (path === 'web.dom.iterable') { | ||
return path.replace('web.dom.', 'web.dom-collections.'); | ||
} | ||
return path; | ||
}; | ||
const rewriteCoreJsRequest = (originalRequest, lowerVersion = false) => { | ||
if (!originalRequest) { | ||
throw new Error('no originalRequest'); | ||
} | ||
if (/core-js\/modules\/es(6|7)\.(.*)/.test(originalRequest)) { | ||
const [, esVersion, originalPath] = originalRequest.match(/core-js\/modules\/es(6|7)\.(.*)/); | ||
const [, matchedVersion, matchedPath] = originalRequest.match(/core-js\/modules\/es(6|7)\.(.*)/); | ||
const version = matchedVersion; | ||
const path = rewriteRenamedModules(matchedPath); | ||
if (esVersion === '6') { | ||
return rewriteAndPreservePrefix(originalRequest, `modules/es.${originalPath}`); | ||
if (version === '6' || lowerVersion) { | ||
return rewriteAndPreservePrefix(originalRequest, `modules/es.${path}`); | ||
} | ||
if (esVersion === '7') { | ||
return rewriteAndPreservePrefix(originalRequest, `modules/esnext.${originalPath}`); | ||
if (version === '7') { | ||
return rewriteAndPreservePrefix(originalRequest, `modules/esnext.${path}`); | ||
} | ||
@@ -36,19 +50,22 @@ } | ||
if (/core-js\/library\/fn\/(.*)/.test(originalRequest)) { | ||
const [, originalPath] = originalRequest.match(/core-js\/library\/fn\/(.*)/); | ||
return rewriteAndPreservePrefix(originalRequest, `features/${originalPath}`, 'core-js-pure'); | ||
const [, matchedPath] = originalRequest.match(/core-js\/library\/fn\/(.*)/); | ||
const path = rewriteRenamedModules(matchedPath); | ||
return rewriteAndPreservePrefix(originalRequest, `features/${path}`, 'core-js-pure'); | ||
} | ||
if (/core-js\/es(5|6|7)(.*)/.test(originalRequest)) { | ||
const [, esVersion, originalPath] = originalRequest.match(/core-js\/es(5|6|7)(.*)?/); | ||
const [, matchedVersion, matchedPath] = originalRequest.match(/core-js\/es(5|6|7)(.*)?/); | ||
const version = matchedVersion; | ||
if (esVersion === '5') { | ||
if (version === '5') { | ||
return null; | ||
} | ||
if (esVersion === '6') { | ||
const asAModule = originalPath.replace('.js', ''); | ||
return rewriteAndPreservePrefix(originalRequest, `es${asAModule}`); | ||
if (version === '6' || lowerVersion) { | ||
const asAModule = matchedPath.replace('.js', ''); | ||
const path = rewriteRenamedModules(asAModule); | ||
return rewriteAndPreservePrefix(originalRequest, `es${path}`); | ||
} | ||
if (esVersion === '7') { | ||
if (version === '7') { | ||
return null; | ||
@@ -59,4 +76,5 @@ } | ||
if (/core-js\/(object)\/(.*)/.test(originalRequest)) { | ||
const [, originalPath] = originalRequest.match(/core-js\/(.*)?/); | ||
return rewriteAndPreservePrefix(originalRequest, `features/${originalPath}`); | ||
const [, matchedPath] = originalRequest.match(/core-js\/(.*)?/); | ||
const path = rewriteRenamedModules(matchedPath); | ||
return rewriteAndPreservePrefix(originalRequest, `features/${path}`); | ||
} | ||
@@ -83,14 +101,24 @@ | ||
try { | ||
resolve(originalRequest); | ||
require.resolve(originalRequest); | ||
} catch (originalError) { | ||
const newRequest = rewriteCoreJsRequest(originalRequest); | ||
let error = true; // attempt to upgrade the path from core-js v2 to v3 | ||
if (!newRequest) { | ||
throw originalError; | ||
if (error) { | ||
try { | ||
// eslint-disable-next-line no-param-reassign | ||
resource.request = resolve(rewriteCoreJsRequest(originalRequest)); | ||
error = false; | ||
} catch (e) {} | ||
} // attempt to downgrade the path from es7 to es6 | ||
if (error) { | ||
try { | ||
// eslint-disable-next-line no-param-reassign | ||
resource.request = resolve(rewriteCoreJsRequest(originalRequest, true)); | ||
error = false; | ||
} catch (e) {} | ||
} | ||
try { | ||
// eslint-disable-next-line no-param-reassign | ||
resource.request = resolve(newRequest); | ||
} catch (newRequestError) { | ||
if (error) { | ||
throw originalError; | ||
@@ -97,0 +125,0 @@ } |
{ | ||
"name": "corejs-upgrade-webpack-plugin", | ||
"version": "1.0.1", | ||
"version": "2.0.0", | ||
"description": "a webpack plugin that transforms core-js v2 paths to core-js v3 paths", | ||
@@ -5,0 +5,0 @@ "keywords": [ |
@@ -85,1 +85,31 @@ import CoreJsAutoUpgradePlugin, { rewriteCoreJsRequest } from './index'; | ||
}); | ||
describe('rewriteCoreJsRequest with downgrade option enabled', () => { | ||
const fakeRequire = jest.mock(); | ||
describe('rewrite `core-js/modules/*`', () => { | ||
it('should rewrite `core-js/modules/es6.*` import to `core-js/modules/es.*`', () => { | ||
expect(rewriteCoreJsRequest('core-js/modules/es6.object.is-frozen.js', true)).toBe( | ||
'core-js/modules/es.object.is-frozen.js' | ||
); | ||
}); | ||
it('should rewrite `core-js/modules/es7.*` import to `core-js/modules/es.*`', () => { | ||
expect(rewriteCoreJsRequest('core-js/modules/es7.symbol.async-iterator', true)).toBe( | ||
'core-js/modules/es.symbol.async-iterator' | ||
); | ||
}); | ||
it('should rewrite `core-js/modules/es.*` import to `core-js/modules/es.*`', () => { | ||
expect(rewriteCoreJsRequest('core-js/modules/es.object.is-frozen.js', true)).toBe( | ||
'core-js/modules/es.object.is-frozen.js' | ||
); | ||
}); | ||
it('should rewrite `core-js/modules/esnext.*` import to `core-js/modules/esnext.*`', () => { | ||
expect(rewriteCoreJsRequest('core-js/modules/esnext.set.some.js', true)).toBe( | ||
'core-js/modules/esnext.set.some.js' | ||
); | ||
}); | ||
}); | ||
}); |
@@ -11,11 +11,25 @@ import { NormalModuleReplacementPlugin } from 'webpack'; | ||
export const rewriteCoreJsRequest = (originalRequest: string) => { | ||
const rewriteRenamedModules = (path: string) => { | ||
if (path === 'web.dom.iterable') { | ||
return path.replace('web.dom.', 'web.dom-collections.') | ||
} | ||
return path; | ||
} | ||
export const rewriteCoreJsRequest = (originalRequest: string, lowerVersion = false) => { | ||
if (!originalRequest) { | ||
throw new Error('no originalRequest') | ||
} | ||
if (/core-js\/modules\/es(6|7)\.(.*)/.test(originalRequest)) { | ||
const [,esVersion, originalPath] = originalRequest.match(/core-js\/modules\/es(6|7)\.(.*)/); | ||
const [,matchedVersion, matchedPath] = originalRequest.match(/core-js\/modules\/es(6|7)\.(.*)/); | ||
if (esVersion === '6') { | ||
return rewriteAndPreservePrefix(originalRequest, `modules/es.${originalPath}`); | ||
const version = matchedVersion; | ||
const path = rewriteRenamedModules(matchedPath); | ||
if (version === '6' || lowerVersion) { | ||
return rewriteAndPreservePrefix(originalRequest, `modules/es.${path}`); | ||
} | ||
if (esVersion === '7') { | ||
return rewriteAndPreservePrefix(originalRequest, `modules/esnext.${originalPath}`); | ||
if (version === '7') { | ||
return rewriteAndPreservePrefix(originalRequest, `modules/esnext.${path}`); | ||
} | ||
@@ -25,19 +39,24 @@ } | ||
if (/core-js\/library\/fn\/(.*)/.test(originalRequest)) { | ||
const [,originalPath] = originalRequest.match(/core-js\/library\/fn\/(.*)/); | ||
const [,matchedPath] = originalRequest.match(/core-js\/library\/fn\/(.*)/); | ||
return rewriteAndPreservePrefix(originalRequest, `features/${originalPath}`, 'core-js-pure'); | ||
const path = rewriteRenamedModules(matchedPath); | ||
return rewriteAndPreservePrefix(originalRequest, `features/${path}`, 'core-js-pure'); | ||
} | ||
if (/core-js\/es(5|6|7)(.*)/.test(originalRequest)) { | ||
const [,esVersion, originalPath] = originalRequest.match(/core-js\/es(5|6|7)(.*)?/); | ||
const [,matchedVersion, matchedPath] = originalRequest.match(/core-js\/es(5|6|7)(.*)?/); | ||
if (esVersion === '5') { | ||
const version = matchedVersion; | ||
if (version === '5') { | ||
return null; | ||
} | ||
if (esVersion === '6') { | ||
const asAModule = originalPath.replace('.js', ''); | ||
if (version === '6' || lowerVersion) { | ||
const asAModule = matchedPath.replace('.js', ''); | ||
const path = rewriteRenamedModules(asAModule); | ||
return rewriteAndPreservePrefix(originalRequest, `es${asAModule}`); | ||
return rewriteAndPreservePrefix(originalRequest, `es${path}`); | ||
} | ||
if (esVersion === '7') { | ||
if (version === '7') { | ||
return null; | ||
@@ -48,5 +67,7 @@ } | ||
if (/core-js\/(object)\/(.*)/.test(originalRequest)) { | ||
const [,originalPath] = originalRequest.match(/core-js\/(.*)?/); | ||
const [,matchedPath] = originalRequest.match(/core-js\/(.*)?/); | ||
return rewriteAndPreservePrefix(originalRequest, `features/${originalPath}`); | ||
const path = rewriteRenamedModules(matchedPath); | ||
return rewriteAndPreservePrefix(originalRequest, `features/${path}`); | ||
} | ||
@@ -74,15 +95,27 @@ | ||
} | ||
try { | ||
resolve(originalRequest); | ||
require.resolve(originalRequest); | ||
} catch (originalError) { | ||
const newRequest = rewriteCoreJsRequest(originalRequest); | ||
if (!newRequest) { | ||
throw originalError; | ||
let error = true; | ||
// attempt to upgrade the path from core-js v2 to v3 | ||
if (error) { | ||
try { | ||
// eslint-disable-next-line no-param-reassign | ||
resource.request = resolve(rewriteCoreJsRequest(originalRequest)); | ||
error = false; | ||
} catch (e) {} | ||
} | ||
try { | ||
// eslint-disable-next-line no-param-reassign | ||
resource.request = resolve(newRequest); | ||
} catch (newRequestError) { | ||
// attempt to downgrade the path from es7 to es6 | ||
if (error) { | ||
try { | ||
// eslint-disable-next-line no-param-reassign | ||
resource.request = resolve(rewriteCoreJsRequest(originalRequest, true)); | ||
error = false; | ||
} catch (e) {} | ||
} | ||
if (error) { | ||
throw originalError; | ||
@@ -89,0 +122,0 @@ } |
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
Dynamic require
Supply chain riskDynamic require can indicate the package is performing dangerous or unsafe dynamic code execution.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
14298
294
6
2