diff --git a/package-lock.json b/package-lock.json index 2aad1ea..176f20f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1535,14 +1535,6 @@ "get-package-type": "^0.1.0", "js-yaml": "^3.13.1", "resolve-from": "^5.0.0" - }, - "dependencies": { - "camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "dev": true - } } }, "@istanbuljs/schema": { @@ -3705,9 +3697,10 @@ } }, "camelcase": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.2.0.tgz", - "integrity": "sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg==" + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true }, "camelcase-keys": { "version": "6.2.2", @@ -3718,14 +3711,6 @@ "camelcase": "^5.3.1", "map-obj": "^4.0.0", "quick-lru": "^4.0.1" - }, - "dependencies": { - "camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "dev": true - } } }, "caniuse-lite": { @@ -14756,14 +14741,6 @@ "requires": { "camelcase": "^5.0.0", "decamelize": "^1.2.0" - }, - "dependencies": { - "camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "dev": true - } } }, "yauzl": { diff --git a/package.json b/package.json index 6d09b63..a9e2830 100644 --- a/package.json +++ b/package.json @@ -41,9 +41,8 @@ "webpack": "^4.0.0 || ^5.0.0" }, "dependencies": { - "camelcase": "^6.2.0", - "loader-utils": "^2.0.0", - "schema-utils": "^3.0.0" + "schema-utils": "^3.0.0", + "loader-utils": "^2.0.0" }, "devDependencies": { "@babel/cli": "^7.11.6", diff --git a/src/utils.js b/src/utils.js index 379a368..d9bcb68 100644 --- a/src/utils.js +++ b/src/utils.js @@ -1,5 +1,4 @@ import { stringifyRequest } from 'loader-utils'; -import camelcase from 'camelcase'; function getDefaultFilename(filename) { if (typeof filename === 'function') { @@ -49,7 +48,7 @@ function workerGenerator(loaderContext, workerFilename, workerSource, options) { const esModule = typeof options.esModule !== 'undefined' ? options.esModule : true; - const fnName = `${camelcase(workerFilename.replace(/\//g, ''))}Worker`; + const fnName = `${camelCase(workerFilename)}Worker`; if (options.inline) { const InlineWorkerPath = stringifyRequest( @@ -114,6 +113,72 @@ const sourceURLWebpackRegex = RegExp( ); /* eslint-enable prefer-template */ +/* + * Based on https://github.com/sindresorhus/camelcase/tree/v6.2.0 + * License: https://github.com/sindresorhus/camelcase/blob/v6.2.0/license + */ +function camelCase(input1) { + let input = input1; + input = input.trim(); + + if (input.length === 0) { + return ''; + } + + if (input.length === 1) { + return input.toLocaleLowerCase(); + } + + const hasUpperCase = input !== input.toLocaleLowerCase(); + + if (hasUpperCase) { + let isLastCharLower = false; + let isLastCharUpper = false; + let isLastLastCharUpper = false; + + for (let i = 0; i < input.length; i++) { + const character = input[i]; + + if (isLastCharLower && /[\p{Lu}]/u.test(character)) { + input = `${input.slice(0, i)}-${input.slice(i)}`; + isLastCharLower = false; + isLastLastCharUpper = isLastCharUpper; + isLastCharUpper = true; + i += 1; + } else if ( + isLastCharUpper && + isLastLastCharUpper && + /[\p{Ll}]/u.test(character) + ) { + input = `${input.slice(0, i - 1)}-${input.slice(i - 1)}`; + isLastLastCharUpper = isLastCharUpper; + isLastCharUpper = false; + isLastCharLower = true; + } else { + isLastCharLower = + character.toLocaleLowerCase() === character && + character.toLocaleUpperCase() !== character; + isLastLastCharUpper = isLastCharUpper; + isLastCharUpper = + character.toLocaleUpperCase() === character && + character.toLocaleLowerCase() !== character; + } + } + } + + input = input.replace(/^[_.\- ]+/, ''); + + input = input.toLocaleLowerCase(); + + return input + .replace(/[_.\- ]+([\p{Alpha}\p{N}_]|$)/gu, (_, p1) => + p1.toLocaleUpperCase() + ) + .replace(/\d+([\p{Alpha}\p{N}_]|$)/gu, (m) => m.toLocaleUpperCase()) + // NOTE: addition to replace `/` or `\` with ``. + .replace(/(\/|\\)/g, ''); +} + export { getDefaultFilename, getDefaultChunkFilename,