diff --git a/local/browser-testing/dist/Select.d.ts b/local/browser-testing/dist/Select.d.ts index df4d327..5005192 100644 --- a/local/browser-testing/dist/Select.d.ts +++ b/local/browser-testing/dist/Select.d.ts @@ -1,4 +1,3 @@ -/// export declare const generateSelectCallback: (targetElms: HTMLElement[] | HTMLElement | null, callback: (targetAffectedElm: HTMLElement, possibleValues: string[], selectedValue: string) => any) => (event: Event | HTMLSelectElement | null) => void; export declare const generateClassChangeSelectCallback: (targetElms: HTMLElement[] | HTMLElement | null) => (event: Event | HTMLSelectElement | null) => void; export declare const selectOption: (select: HTMLSelectElement | null, selectedOption: string | number) => boolean; diff --git a/local/browser-testing/tsconfig.json b/local/browser-testing/tsconfig.json index 68d05a4..40a1179 100644 --- a/local/browser-testing/tsconfig.json +++ b/local/browser-testing/tsconfig.json @@ -2,6 +2,7 @@ "extends": "@~local/tsconfig", "compilerOptions": { "outDir": "./dist/", - "baseUrl": "./src/" + "baseUrl": "./src/", + "typeRoots": [] } } diff --git a/local/config/src/jest.js b/local/config/src/jest.js index 89e12a3..0bda1e2 100644 --- a/local/config/src/jest.js +++ b/local/config/src/jest.js @@ -5,14 +5,27 @@ const resolve = require('./resolve'); // https://jestjs.io/docs/en/configuration.html module.exports = { - clearMocks: true, coverageDirectory: './.coverage/jest', - coverageProvider: 'babel', - testEnvironment: 'jsdom', - moduleDirectories: resolve.directories, - moduleFileExtensions: resolve.extensions.map((ext) => ext.replace(/\./, '')), - testPathIgnorePatterns: ['\\\\node_modules\\\\'], - displayName: 'jest', - setupFilesAfterEnv: [path.resolve(__dirname, './jest.setup.js')], - testMatch: ['**/tests/jest/**/*.test.[jt]s?(x)'], + projects: [ + { + displayName: 'node', + testMatch: ['**/tests/jest-node/**/*.test.[jt]s?(x)'], + testEnvironment: 'node', + clearMocks: true, + moduleDirectories: resolve.directories, + moduleFileExtensions: resolve.extensions.map((ext) => ext.replace(/\./, '')), + testPathIgnorePatterns: ['\\\\node_modules\\\\'], + setupFilesAfterEnv: [path.resolve(__dirname, './jest.setup.js')], + }, + { + displayName: 'jsdom', + testMatch: ['**/tests/jest-jsdom/**/*.test.[jt]s?(x)'], + testEnvironment: 'jsdom', + clearMocks: true, + moduleDirectories: resolve.directories, + moduleFileExtensions: resolve.extensions.map((ext) => ext.replace(/\./, '')), + testPathIgnorePatterns: ['\\\\node_modules\\\\'], + setupFilesAfterEnv: [path.resolve(__dirname, './jest.setup.js')], + }, + ], }; diff --git a/local/config/src/jest.setup.js b/local/config/src/jest.setup.js index e8d213b..275152a 100644 --- a/local/config/src/jest.setup.js +++ b/local/config/src/jest.setup.js @@ -1,3 +1,5 @@ // remove jsdom warning for not implemented second argument for window.getComputedStyle -const cmptdStyle = window.getComputedStyle; -window.getComputedStyle = (a) => cmptdStyle(a); +try { + const cmptdStyle = window.getComputedStyle; + window.getComputedStyle = (a) => cmptdStyle(a); +} catch {} diff --git a/local/rollup/src/createRollupConfig.js b/local/rollup/src/createRollupConfig.js index b452a3a..c45d7e8 100644 --- a/local/rollup/src/createRollupConfig.js +++ b/local/rollup/src/createRollupConfig.js @@ -107,22 +107,30 @@ const createConfig = (userOptions = {}) => { const options = mergeAndResolveOptions(userOptions); const { project, mode, extractTypes, extractStyles, verbose } = options; const isBuild = mode === 'build'; - - if (verbose) { - console.log(''); - console.log('PROJECT : ', project); - console.log('OPTIONS : ', options); - } + let result; if (isBuild) { const styles = extractStyles && pipelineStyles(resolve, options); const types = extractTypes && pipelineTypes(resolve, options); const js = pipelineBuild(resolve, options); - return [styles, types, js].flat().filter((build) => !!build); + result = [styles, types, js].flat().filter((build) => !!build); + } else { + result = [pipelineDev(resolve, options)]; } - return [pipelineDev(resolve, options)]; + if (verbose) { + result[0].plugins.push({ + name: 'PROJECT', + buildStart() { + console.log(''); + console.log('PROJECT : ', project); + console.log('OPTIONS : ', options); + }, + }); + } + + return result; }; module.exports = createConfig; diff --git a/local/rollup/src/pipeline.build.js b/local/rollup/src/pipeline.build.js index 635bd66..c2c6d3f 100644 --- a/local/rollup/src/pipeline.build.js +++ b/local/rollup/src/pipeline.build.js @@ -61,10 +61,6 @@ module.exports = (resolve, options) => { return { input, output, - treeshake: { - propertyReadSideEffects: false, - moduleSideEffects: false, - }, ...rollupOptions, plugins: [ rollupLicense(banner, sourcemap), diff --git a/local/rollup/src/pipeline.common.plugins.js b/local/rollup/src/pipeline.common.plugins.js index 2b44c65..14de853 100644 --- a/local/rollup/src/pipeline.common.plugins.js +++ b/local/rollup/src/pipeline.common.plugins.js @@ -87,7 +87,7 @@ module.exports = { ['@babel/plugin-proposal-private-methods', { loose: true }], ], babelHelpers: 'runtime', - shouldPrintComment: () => false, + shouldPrintComment: (comment) => /@__PURE__/.test(comment), caller: { name: 'babel-rollup-build', }, diff --git a/local/rollup/src/playwright/createPlaywrightRollupConfig.js b/local/rollup/src/playwright/createPlaywrightRollupConfig.js index 052956c..2bfb534 100644 --- a/local/rollup/src/playwright/createPlaywrightRollupConfig.js +++ b/local/rollup/src/playwright/createPlaywrightRollupConfig.js @@ -75,7 +75,6 @@ module.exports = (testDir, mode = 'dev', onListening = null) => { output: { sourcemap: true, }, - treeshake: true, plugins: [ rollupPluginStyles(), rollupPluginHtml(`Playwright: ${name}`, htmlName, () => diff --git a/package-lock.json b/package-lock.json index 053b4e2..c5369b6 100644 --- a/package-lock.json +++ b/package-lock.json @@ -70,7 +70,8 @@ "should": "^13.2.3", "tslib": "^2.4.0", "typescript": "^4.7.4", - "v8-to-istanbul": "^9.0.1" + "v8-to-istanbul": "^9.0.1", + "webpack": "^5.74.0" } }, "local/browser-testing": { @@ -2687,6 +2688,26 @@ "cssnano": "*" } }, + "node_modules/@types/eslint": { + "version": "8.4.5", + "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.4.5.tgz", + "integrity": "sha512-dhsC09y1gpJWnK+Ff4SGvCuSnk9DaU0BJZSzOwa6GVSg65XtTugLBITDAAzRU5duGBoXBHpdR/9jHGxJjNflJQ==", + "dev": true, + "dependencies": { + "@types/estree": "*", + "@types/json-schema": "*" + } + }, + "node_modules/@types/eslint-scope": { + "version": "3.7.4", + "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.4.tgz", + "integrity": "sha512-9K4zoImiZc3HlIp6AVUDE4CWYx22a+lhSZMYNpbjW04+YF0KWj4pJXnEMjdnFTiQibFFmElcsasJXDbdI/EPhA==", + "dev": true, + "dependencies": { + "@types/eslint": "*", + "@types/estree": "*" + } + }, "node_modules/@types/estree": { "version": "0.0.39", "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.39.tgz", @@ -3066,6 +3087,164 @@ "url": "https://opencollective.com/typescript-eslint" } }, + "node_modules/@webassemblyjs/ast": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.1.tgz", + "integrity": "sha512-ukBh14qFLjxTQNTXocdyksN5QdM28S1CxHt2rdskFyL+xFV7VremuBLVbmCePj+URalXBENx/9Lm7lnhihtCSw==", + "dev": true, + "dependencies": { + "@webassemblyjs/helper-numbers": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1" + } + }, + "node_modules/@webassemblyjs/floating-point-hex-parser": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.1.tgz", + "integrity": "sha512-iGRfyc5Bq+NnNuX8b5hwBrRjzf0ocrJPI6GWFodBFzmFnyvrQ83SHKhmilCU/8Jv67i4GJZBMhEzltxzcNagtQ==", + "dev": true + }, + "node_modules/@webassemblyjs/helper-api-error": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.1.tgz", + "integrity": "sha512-RlhS8CBCXfRUR/cwo2ho9bkheSXG0+NwooXcc3PAILALf2QLdFyj7KGsKRbVc95hZnhnERon4kW/D3SZpp6Tcg==", + "dev": true + }, + "node_modules/@webassemblyjs/helper-buffer": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.1.tgz", + "integrity": "sha512-gwikF65aDNeeXa8JxXa2BAk+REjSyhrNC9ZwdT0f8jc4dQQeDQ7G4m0f2QCLPJiMTTO6wfDmRmj/pW0PsUvIcA==", + "dev": true + }, + "node_modules/@webassemblyjs/helper-numbers": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.1.tgz", + "integrity": "sha512-vDkbxiB8zfnPdNK9Rajcey5C0w+QJugEglN0of+kmO8l7lDb77AnlKYQF7aarZuCrv+l0UvqL+68gSDr3k9LPQ==", + "dev": true, + "dependencies": { + "@webassemblyjs/floating-point-hex-parser": "1.11.1", + "@webassemblyjs/helper-api-error": "1.11.1", + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webassemblyjs/helper-wasm-bytecode": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.1.tgz", + "integrity": "sha512-PvpoOGiJwXeTrSf/qfudJhwlvDQxFgelbMqtq52WWiXC6Xgg1IREdngmPN3bs4RoO83PnL/nFrxucXj1+BX62Q==", + "dev": true + }, + "node_modules/@webassemblyjs/helper-wasm-section": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.1.tgz", + "integrity": "sha512-10P9No29rYX1j7F3EVPX3JvGPQPae+AomuSTPiF9eBQeChHI6iqjMIwR9JmOJXwpnn/oVGDk7I5IlskuMwU/pg==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-buffer": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/wasm-gen": "1.11.1" + } + }, + "node_modules/@webassemblyjs/ieee754": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.1.tgz", + "integrity": "sha512-hJ87QIPtAMKbFq6CGTkZYJivEwZDbQUgYd3qKSadTNOhVY7p+gfP6Sr0lLRVTaG1JjFj+r3YchoqRYxNH3M0GQ==", + "dev": true, + "dependencies": { + "@xtuc/ieee754": "^1.2.0" + } + }, + "node_modules/@webassemblyjs/leb128": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.1.tgz", + "integrity": "sha512-BJ2P0hNZ0u+Th1YZXJpzW6miwqQUGcIHT1G/sf72gLVD9DZ5AdYTqPNbHZh6K1M5VmKvFXwGSWZADz+qBWxeRw==", + "dev": true, + "dependencies": { + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webassemblyjs/utf8": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.1.tgz", + "integrity": "sha512-9kqcxAEdMhiwQkHpkNiorZzqpGrodQQ2IGrHHxCy+Ozng0ofyMA0lTqiLkVs1uzTRejX+/O0EOT7KxqVPuXosQ==", + "dev": true + }, + "node_modules/@webassemblyjs/wasm-edit": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.1.tgz", + "integrity": "sha512-g+RsupUC1aTHfR8CDgnsVRVZFJqdkFHpsHMfJuWQzWU3tvnLC07UqHICfP+4XyL2tnr1amvl1Sdp06TnYCmVkA==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-buffer": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/helper-wasm-section": "1.11.1", + "@webassemblyjs/wasm-gen": "1.11.1", + "@webassemblyjs/wasm-opt": "1.11.1", + "@webassemblyjs/wasm-parser": "1.11.1", + "@webassemblyjs/wast-printer": "1.11.1" + } + }, + "node_modules/@webassemblyjs/wasm-gen": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.1.tgz", + "integrity": "sha512-F7QqKXwwNlMmsulj6+O7r4mmtAlCWfO/0HdgOxSklZfQcDu0TpLiD1mRt/zF25Bk59FIjEuGAIyn5ei4yMfLhA==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/ieee754": "1.11.1", + "@webassemblyjs/leb128": "1.11.1", + "@webassemblyjs/utf8": "1.11.1" + } + }, + "node_modules/@webassemblyjs/wasm-opt": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.1.tgz", + "integrity": "sha512-VqnkNqnZlU5EB64pp1l7hdm3hmQw7Vgqa0KF/KCNO9sIpI6Fk6brDEiX+iCOYrvMuBWDws0NkTOxYEb85XQHHw==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-buffer": "1.11.1", + "@webassemblyjs/wasm-gen": "1.11.1", + "@webassemblyjs/wasm-parser": "1.11.1" + } + }, + "node_modules/@webassemblyjs/wasm-parser": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.1.tgz", + "integrity": "sha512-rrBujw+dJu32gYB7/Lup6UhdkPx9S9SnobZzRVL7VcBH9Bt9bCBLEuX/YXOOtBsOZ4NQrRykKhffRWHvigQvOA==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-api-error": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/ieee754": "1.11.1", + "@webassemblyjs/leb128": "1.11.1", + "@webassemblyjs/utf8": "1.11.1" + } + }, + "node_modules/@webassemblyjs/wast-printer": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.1.tgz", + "integrity": "sha512-IQboUWM4eKzWW+N/jij2sRatKMh99QEelo3Eb2q0qXkvPRISAj8Qxtmw5itwqK+TTkBuUIE45AxYPToqPtL5gg==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.11.1", + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@xtuc/ieee754": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", + "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", + "dev": true + }, + "node_modules/@xtuc/long": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", + "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", + "dev": true + }, "node_modules/abab": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.6.tgz", @@ -3106,6 +3285,15 @@ "node": ">=0.4.0" } }, + "node_modules/acorn-import-assertions": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.8.0.tgz", + "integrity": "sha512-m7VZ3jwz4eK6A4Vtt8Ew1/mNbP24u0FhdyfA7fSvnJR6LMdfOYnmuIrrJAgrYfYJ10F/otaHTtrtrtmHdMNzEw==", + "dev": true, + "peerDependencies": { + "acorn": "^8" + } + }, "node_modules/acorn-jsx": { "version": "5.3.2", "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", @@ -3165,6 +3353,15 @@ "url": "https://github.com/sponsors/epoberezkin" } }, + "node_modules/ajv-keywords": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", + "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", + "dev": true, + "peerDependencies": { + "ajv": "^6.9.1" + } + }, "node_modules/ansi-escapes": { "version": "4.3.2", "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", @@ -3783,6 +3980,15 @@ "fsevents": "~2.3.2" } }, + "node_modules/chrome-trace-event": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz", + "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==", + "dev": true, + "engines": { + "node": ">=6.0" + } + }, "node_modules/ci-info": { "version": "3.3.2", "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.3.2.tgz", @@ -4431,6 +4637,19 @@ "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", "dev": true }, + "node_modules/enhanced-resolve": { + "version": "5.10.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.10.0.tgz", + "integrity": "sha512-T0yTFjdpldGY8PmuXXR0PyQ1ufZpEGiHVrp7zHKB7jdR4qlmZHhONVM5AQOAWXuF/w3dnHbEQVrNptJgt7F+cQ==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.2.4", + "tapable": "^2.2.0" + }, + "engines": { + "node": ">=10.13.0" + } + }, "node_modules/entities": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", @@ -5602,6 +5821,15 @@ "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", "dev": true }, + "node_modules/events": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", + "dev": true, + "engines": { + "node": ">=0.8.x" + } + }, "node_modules/execa": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", @@ -6042,6 +6270,12 @@ "node": ">= 6" } }, + "node_modules/glob-to-regexp": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", + "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", + "dev": true + }, "node_modules/globals": { "version": "11.12.0", "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", @@ -8016,6 +8250,15 @@ "integrity": "sha512-F/pz9ZZP+R+arY94cECTZco7PXgBXyL+KVWUPZq8AQE9TOu14GV6fYeKOviv02JCvFa4Oi3Rs1hYEpfeajc+ow==", "dev": true }, + "node_modules/loader-runner": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz", + "integrity": "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==", + "dev": true, + "engines": { + "node": ">=6.11.5" + } + }, "node_modules/locate-path": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", @@ -8269,6 +8512,12 @@ "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", "dev": true }, + "node_modules/neo-async": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", + "dev": true + }, "node_modules/node-int64": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", @@ -10216,6 +10465,24 @@ "node": ">=10" } }, + "node_modules/schema-utils": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", + "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", + "dev": true, + "dependencies": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, "node_modules/semver": { "version": "6.3.0", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", @@ -10723,6 +10990,15 @@ "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==", "dev": true }, + "node_modules/tapable": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", + "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, "node_modules/terminal-link": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/terminal-link/-/terminal-link-2.1.1.tgz", @@ -10757,6 +11033,78 @@ "node": ">=10" } }, + "node_modules/terser-webpack-plugin": { + "version": "5.3.3", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.3.tgz", + "integrity": "sha512-Fx60G5HNYknNTNQnzQ1VePRuu89ZVYWfjRAeT5rITuCY/1b08s49e5kSQwHDirKZWuoKOBRFS98EUUoZ9kLEwQ==", + "dev": true, + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.7", + "jest-worker": "^27.4.5", + "schema-utils": "^3.1.1", + "serialize-javascript": "^6.0.0", + "terser": "^5.7.2" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.1.0" + }, + "peerDependenciesMeta": { + "@swc/core": { + "optional": true + }, + "esbuild": { + "optional": true + }, + "uglify-js": { + "optional": true + } + } + }, + "node_modules/terser-webpack-plugin/node_modules/jest-worker": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", + "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", + "dev": true, + "dependencies": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/terser-webpack-plugin/node_modules/serialize-javascript": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz", + "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==", + "dev": true, + "dependencies": { + "randombytes": "^2.1.0" + } + }, + "node_modules/terser-webpack-plugin/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, "node_modules/test-exclude": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", @@ -11155,6 +11503,19 @@ "makeerror": "1.0.12" } }, + "node_modules/watchpack": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.0.tgz", + "integrity": "sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==", + "dev": true, + "dependencies": { + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.1.2" + }, + "engines": { + "node": ">=10.13.0" + } + }, "node_modules/webidl-conversions": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz", @@ -11164,6 +11525,68 @@ "node": ">=12" } }, + "node_modules/webpack": { + "version": "5.74.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.74.0.tgz", + "integrity": "sha512-A2InDwnhhGN4LYctJj6M1JEaGL7Luj6LOmyBHjcI8529cm5p6VXiTIW2sn6ffvEAKmveLzvu4jrihwXtPojlAA==", + "dev": true, + "dependencies": { + "@types/eslint-scope": "^3.7.3", + "@types/estree": "^0.0.51", + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/wasm-edit": "1.11.1", + "@webassemblyjs/wasm-parser": "1.11.1", + "acorn": "^8.7.1", + "acorn-import-assertions": "^1.7.6", + "browserslist": "^4.14.5", + "chrome-trace-event": "^1.0.2", + "enhanced-resolve": "^5.10.0", + "es-module-lexer": "^0.9.0", + "eslint-scope": "5.1.1", + "events": "^3.2.0", + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.2.9", + "json-parse-even-better-errors": "^2.3.1", + "loader-runner": "^4.2.0", + "mime-types": "^2.1.27", + "neo-async": "^2.6.2", + "schema-utils": "^3.1.0", + "tapable": "^2.1.1", + "terser-webpack-plugin": "^5.1.3", + "watchpack": "^2.4.0", + "webpack-sources": "^3.2.3" + }, + "bin": { + "webpack": "bin/webpack.js" + }, + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependenciesMeta": { + "webpack-cli": { + "optional": true + } + } + }, + "node_modules/webpack-sources": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz", + "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==", + "dev": true, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/webpack/node_modules/@types/estree": { + "version": "0.0.51", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.51.tgz", + "integrity": "sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ==", + "dev": true + }, "node_modules/whatwg-encoding": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-2.0.0.tgz", @@ -13263,6 +13686,26 @@ "cssnano": "*" } }, + "@types/eslint": { + "version": "8.4.5", + "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.4.5.tgz", + "integrity": "sha512-dhsC09y1gpJWnK+Ff4SGvCuSnk9DaU0BJZSzOwa6GVSg65XtTugLBITDAAzRU5duGBoXBHpdR/9jHGxJjNflJQ==", + "dev": true, + "requires": { + "@types/estree": "*", + "@types/json-schema": "*" + } + }, + "@types/eslint-scope": { + "version": "3.7.4", + "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.4.tgz", + "integrity": "sha512-9K4zoImiZc3HlIp6AVUDE4CWYx22a+lhSZMYNpbjW04+YF0KWj4pJXnEMjdnFTiQibFFmElcsasJXDbdI/EPhA==", + "dev": true, + "requires": { + "@types/eslint": "*", + "@types/estree": "*" + } + }, "@types/estree": { "version": "0.0.39", "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.39.tgz", @@ -13538,6 +13981,164 @@ "eslint-visitor-keys": "^3.3.0" } }, + "@webassemblyjs/ast": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.1.tgz", + "integrity": "sha512-ukBh14qFLjxTQNTXocdyksN5QdM28S1CxHt2rdskFyL+xFV7VremuBLVbmCePj+URalXBENx/9Lm7lnhihtCSw==", + "dev": true, + "requires": { + "@webassemblyjs/helper-numbers": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1" + } + }, + "@webassemblyjs/floating-point-hex-parser": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.1.tgz", + "integrity": "sha512-iGRfyc5Bq+NnNuX8b5hwBrRjzf0ocrJPI6GWFodBFzmFnyvrQ83SHKhmilCU/8Jv67i4GJZBMhEzltxzcNagtQ==", + "dev": true + }, + "@webassemblyjs/helper-api-error": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.1.tgz", + "integrity": "sha512-RlhS8CBCXfRUR/cwo2ho9bkheSXG0+NwooXcc3PAILALf2QLdFyj7KGsKRbVc95hZnhnERon4kW/D3SZpp6Tcg==", + "dev": true + }, + "@webassemblyjs/helper-buffer": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.1.tgz", + "integrity": "sha512-gwikF65aDNeeXa8JxXa2BAk+REjSyhrNC9ZwdT0f8jc4dQQeDQ7G4m0f2QCLPJiMTTO6wfDmRmj/pW0PsUvIcA==", + "dev": true + }, + "@webassemblyjs/helper-numbers": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.1.tgz", + "integrity": "sha512-vDkbxiB8zfnPdNK9Rajcey5C0w+QJugEglN0of+kmO8l7lDb77AnlKYQF7aarZuCrv+l0UvqL+68gSDr3k9LPQ==", + "dev": true, + "requires": { + "@webassemblyjs/floating-point-hex-parser": "1.11.1", + "@webassemblyjs/helper-api-error": "1.11.1", + "@xtuc/long": "4.2.2" + } + }, + "@webassemblyjs/helper-wasm-bytecode": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.1.tgz", + "integrity": "sha512-PvpoOGiJwXeTrSf/qfudJhwlvDQxFgelbMqtq52WWiXC6Xgg1IREdngmPN3bs4RoO83PnL/nFrxucXj1+BX62Q==", + "dev": true + }, + "@webassemblyjs/helper-wasm-section": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.1.tgz", + "integrity": "sha512-10P9No29rYX1j7F3EVPX3JvGPQPae+AomuSTPiF9eBQeChHI6iqjMIwR9JmOJXwpnn/oVGDk7I5IlskuMwU/pg==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-buffer": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/wasm-gen": "1.11.1" + } + }, + "@webassemblyjs/ieee754": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.1.tgz", + "integrity": "sha512-hJ87QIPtAMKbFq6CGTkZYJivEwZDbQUgYd3qKSadTNOhVY7p+gfP6Sr0lLRVTaG1JjFj+r3YchoqRYxNH3M0GQ==", + "dev": true, + "requires": { + "@xtuc/ieee754": "^1.2.0" + } + }, + "@webassemblyjs/leb128": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.1.tgz", + "integrity": "sha512-BJ2P0hNZ0u+Th1YZXJpzW6miwqQUGcIHT1G/sf72gLVD9DZ5AdYTqPNbHZh6K1M5VmKvFXwGSWZADz+qBWxeRw==", + "dev": true, + "requires": { + "@xtuc/long": "4.2.2" + } + }, + "@webassemblyjs/utf8": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.1.tgz", + "integrity": "sha512-9kqcxAEdMhiwQkHpkNiorZzqpGrodQQ2IGrHHxCy+Ozng0ofyMA0lTqiLkVs1uzTRejX+/O0EOT7KxqVPuXosQ==", + "dev": true + }, + "@webassemblyjs/wasm-edit": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.1.tgz", + "integrity": "sha512-g+RsupUC1aTHfR8CDgnsVRVZFJqdkFHpsHMfJuWQzWU3tvnLC07UqHICfP+4XyL2tnr1amvl1Sdp06TnYCmVkA==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-buffer": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/helper-wasm-section": "1.11.1", + "@webassemblyjs/wasm-gen": "1.11.1", + "@webassemblyjs/wasm-opt": "1.11.1", + "@webassemblyjs/wasm-parser": "1.11.1", + "@webassemblyjs/wast-printer": "1.11.1" + } + }, + "@webassemblyjs/wasm-gen": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.1.tgz", + "integrity": "sha512-F7QqKXwwNlMmsulj6+O7r4mmtAlCWfO/0HdgOxSklZfQcDu0TpLiD1mRt/zF25Bk59FIjEuGAIyn5ei4yMfLhA==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/ieee754": "1.11.1", + "@webassemblyjs/leb128": "1.11.1", + "@webassemblyjs/utf8": "1.11.1" + } + }, + "@webassemblyjs/wasm-opt": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.1.tgz", + "integrity": "sha512-VqnkNqnZlU5EB64pp1l7hdm3hmQw7Vgqa0KF/KCNO9sIpI6Fk6brDEiX+iCOYrvMuBWDws0NkTOxYEb85XQHHw==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-buffer": "1.11.1", + "@webassemblyjs/wasm-gen": "1.11.1", + "@webassemblyjs/wasm-parser": "1.11.1" + } + }, + "@webassemblyjs/wasm-parser": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.1.tgz", + "integrity": "sha512-rrBujw+dJu32gYB7/Lup6UhdkPx9S9SnobZzRVL7VcBH9Bt9bCBLEuX/YXOOtBsOZ4NQrRykKhffRWHvigQvOA==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-api-error": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/ieee754": "1.11.1", + "@webassemblyjs/leb128": "1.11.1", + "@webassemblyjs/utf8": "1.11.1" + } + }, + "@webassemblyjs/wast-printer": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.1.tgz", + "integrity": "sha512-IQboUWM4eKzWW+N/jij2sRatKMh99QEelo3Eb2q0qXkvPRISAj8Qxtmw5itwqK+TTkBuUIE45AxYPToqPtL5gg==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.11.1", + "@xtuc/long": "4.2.2" + } + }, + "@xtuc/ieee754": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", + "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", + "dev": true + }, + "@xtuc/long": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", + "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", + "dev": true + }, "abab": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.6.tgz", @@ -13568,6 +14169,13 @@ } } }, + "acorn-import-assertions": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.8.0.tgz", + "integrity": "sha512-m7VZ3jwz4eK6A4Vtt8Ew1/mNbP24u0FhdyfA7fSvnJR6LMdfOYnmuIrrJAgrYfYJ10F/otaHTtrtrtmHdMNzEw==", + "dev": true, + "requires": {} + }, "acorn-jsx": { "version": "5.3.2", "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", @@ -13612,6 +14220,13 @@ "uri-js": "^4.2.2" } }, + "ajv-keywords": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", + "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", + "dev": true, + "requires": {} + }, "ansi-escapes": { "version": "4.3.2", "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", @@ -14059,6 +14674,12 @@ "readdirp": "~3.6.0" } }, + "chrome-trace-event": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz", + "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==", + "dev": true + }, "ci-info": { "version": "3.3.2", "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.3.2.tgz", @@ -14555,6 +15176,16 @@ "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", "dev": true }, + "enhanced-resolve": { + "version": "5.10.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.10.0.tgz", + "integrity": "sha512-T0yTFjdpldGY8PmuXXR0PyQ1ufZpEGiHVrp7zHKB7jdR4qlmZHhONVM5AQOAWXuF/w3dnHbEQVrNptJgt7F+cQ==", + "dev": true, + "requires": { + "graceful-fs": "^4.2.4", + "tapable": "^2.2.0" + } + }, "entities": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", @@ -15329,6 +15960,12 @@ "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", "dev": true }, + "events": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", + "dev": true + }, "execa": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", @@ -15650,6 +16287,12 @@ "is-glob": "^4.0.1" } }, + "glob-to-regexp": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", + "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", + "dev": true + }, "globals": { "version": "11.12.0", "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", @@ -17120,6 +17763,12 @@ "integrity": "sha512-F/pz9ZZP+R+arY94cECTZco7PXgBXyL+KVWUPZq8AQE9TOu14GV6fYeKOviv02JCvFa4Oi3Rs1hYEpfeajc+ow==", "dev": true }, + "loader-runner": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz", + "integrity": "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==", + "dev": true + }, "locate-path": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", @@ -17316,6 +17965,12 @@ "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", "dev": true }, + "neo-async": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", + "dev": true + }, "node-int64": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", @@ -18699,6 +19354,17 @@ "xmlchars": "^2.2.0" } }, + "schema-utils": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", + "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + } + }, "semver": { "version": "6.3.0", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", @@ -19118,6 +19784,12 @@ "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==", "dev": true }, + "tapable": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", + "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", + "dev": true + }, "terminal-link": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/terminal-link/-/terminal-link-2.1.1.tgz", @@ -19140,6 +19812,50 @@ "source-map-support": "~0.5.20" } }, + "terser-webpack-plugin": { + "version": "5.3.3", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.3.tgz", + "integrity": "sha512-Fx60G5HNYknNTNQnzQ1VePRuu89ZVYWfjRAeT5rITuCY/1b08s49e5kSQwHDirKZWuoKOBRFS98EUUoZ9kLEwQ==", + "dev": true, + "requires": { + "@jridgewell/trace-mapping": "^0.3.7", + "jest-worker": "^27.4.5", + "schema-utils": "^3.1.1", + "serialize-javascript": "^6.0.0", + "terser": "^5.7.2" + }, + "dependencies": { + "jest-worker": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", + "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", + "dev": true, + "requires": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + } + }, + "serialize-javascript": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz", + "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==", + "dev": true, + "requires": { + "randombytes": "^2.1.0" + } + }, + "supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, "test-exclude": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", @@ -19452,12 +20168,68 @@ "makeerror": "1.0.12" } }, + "watchpack": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.0.tgz", + "integrity": "sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==", + "dev": true, + "requires": { + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.1.2" + } + }, "webidl-conversions": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz", "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==", "dev": true }, + "webpack": { + "version": "5.74.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.74.0.tgz", + "integrity": "sha512-A2InDwnhhGN4LYctJj6M1JEaGL7Luj6LOmyBHjcI8529cm5p6VXiTIW2sn6ffvEAKmveLzvu4jrihwXtPojlAA==", + "dev": true, + "requires": { + "@types/eslint-scope": "^3.7.3", + "@types/estree": "^0.0.51", + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/wasm-edit": "1.11.1", + "@webassemblyjs/wasm-parser": "1.11.1", + "acorn": "^8.7.1", + "acorn-import-assertions": "^1.7.6", + "browserslist": "^4.14.5", + "chrome-trace-event": "^1.0.2", + "enhanced-resolve": "^5.10.0", + "es-module-lexer": "^0.9.0", + "eslint-scope": "5.1.1", + "events": "^3.2.0", + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.2.9", + "json-parse-even-better-errors": "^2.3.1", + "loader-runner": "^4.2.0", + "mime-types": "^2.1.27", + "neo-async": "^2.6.2", + "schema-utils": "^3.1.0", + "tapable": "^2.1.1", + "terser-webpack-plugin": "^5.1.3", + "watchpack": "^2.4.0", + "webpack-sources": "^3.2.3" + }, + "dependencies": { + "@types/estree": { + "version": "0.0.51", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.51.tgz", + "integrity": "sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ==", + "dev": true + } + } + }, + "webpack-sources": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz", + "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==", + "dev": true + }, "whatwg-encoding": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-2.0.0.tgz", diff --git a/package.json b/package.json index 14b3ea7..c7c8af2 100644 --- a/package.json +++ b/package.json @@ -66,7 +66,8 @@ "should": "^13.2.3", "tslib": "^2.4.0", "typescript": "^4.7.4", - "v8-to-istanbul": "^9.0.1" + "v8-to-istanbul": "^9.0.1", + "webpack": "^5.74.0" }, "scripts": { "jest": "npm run jest --workspace=overlayscrollbars", diff --git a/packages/overlayscrollbars/package.json b/packages/overlayscrollbars/package.json index d586d32..bd71414 100644 --- a/packages/overlayscrollbars/package.json +++ b/packages/overlayscrollbars/package.json @@ -44,8 +44,10 @@ "build": "rollup -c", "jest": "jest --coverage --runInBand --detectOpenHandles --testPathPattern", "postjest": "full-coverage", + "jest:node": "jest --runInBand --detectOpenHandles --selectProjects node --testPathPattern", + "jest:jsdom": "jest --runInBand --detectOpenHandles --selectProjects jsdom --testPathPattern", "playwright": "playwright test --quiet", - "playwright:dev": "playwright test --workers 1", - "postplaywright": "playwright-merge-coverage && full-coverage" + "postplaywright": "playwright-merge-coverage && full-coverage", + "playwright:dev": "playwright test --workers 1" } } diff --git a/packages/overlayscrollbars/rollup.config.js b/packages/overlayscrollbars/rollup.config.js index 09938fd..2fcb5fd 100644 --- a/packages/overlayscrollbars/rollup.config.js +++ b/packages/overlayscrollbars/rollup.config.js @@ -70,6 +70,8 @@ Released under the MIT license.`, max_line_len: 80, // eslint-disable-line camelcase braces: true, indent_level: 2, // eslint-disable-line camelcase + comments: 'all', + preserve_annotations: true, // eslint-disable-line camelcase }, }), ], @@ -85,5 +87,10 @@ Released under the MIT license.`, totalHigh: 35000, }), ], + treeshake: { + propertyReadSideEffects: false, + moduleSideEffects: false, + annotations: false, + }, }, }); diff --git a/packages/overlayscrollbars/src/plugins/optionsValidationPlugin/optionsValidationPlugin.ts b/packages/overlayscrollbars/src/plugins/optionsValidationPlugin/optionsValidationPlugin.ts index bca5abb..2ea764d 100644 --- a/packages/overlayscrollbars/src/plugins/optionsValidationPlugin/optionsValidationPlugin.ts +++ b/packages/overlayscrollbars/src/plugins/optionsValidationPlugin/optionsValidationPlugin.ts @@ -61,11 +61,12 @@ export type OptionsValidationPluginInstance = { export const optionsValidationPluginName = '__osOptionsValidationPlugin'; -export const optionsValidationPlugin: Plugin = { - [optionsValidationPluginName]: { - _: (options: DeepPartial, doWriteErrors?: boolean) => { - const [validated, foreign] = validateOptions(optionsTemplate, options, doWriteErrors); - return { ...foreign, ...validated }; +export const optionsValidationPlugin: Plugin = + /* @__PURE__ */ (() => ({ + [optionsValidationPluginName]: { + _: (options: DeepPartial, doWriteErrors?: boolean) => { + const [validated, foreign] = validateOptions(optionsTemplate, options, doWriteErrors); + return { ...foreign, ...validated }; + }, }, - }, -}; + }))(); diff --git a/packages/overlayscrollbars/src/plugins/scrollbarsHidingPlugin/scrollbarsHidingPlugin.ts b/packages/overlayscrollbars/src/plugins/scrollbarsHidingPlugin/scrollbarsHidingPlugin.ts index 3dbb49f..4558f08 100644 --- a/packages/overlayscrollbars/src/plugins/scrollbarsHidingPlugin/scrollbarsHidingPlugin.ts +++ b/packages/overlayscrollbars/src/plugins/scrollbarsHidingPlugin/scrollbarsHidingPlugin.ts @@ -79,206 +79,209 @@ const diffBiggerThanOne = (valOne: number, valTwo: number): boolean => { export const scrollbarsHidingPluginName = '__osScrollbarsHidingPlugin'; -export const scrollbarsHidingPlugin: Plugin = { - [scrollbarsHidingPluginName]: { - _createUniqueViewportArrangeElement: (env: InternalEnvironment) => { - const { _nativeScrollbarsHiding, _nativeScrollbarsOverlaid, _cssCustomProperties } = env; - const create = - !_cssCustomProperties && - !_nativeScrollbarsHiding && - (_nativeScrollbarsOverlaid.x || _nativeScrollbarsOverlaid.y); - const result = create ? document.createElement('style') : false; +export const scrollbarsHidingPlugin: Plugin = + /* @__PURE__ */ (() => ({ + [scrollbarsHidingPluginName]: { + _createUniqueViewportArrangeElement: (env: InternalEnvironment) => { + const { _nativeScrollbarsHiding, _nativeScrollbarsOverlaid, _cssCustomProperties } = env; + const create = + !_cssCustomProperties && + !_nativeScrollbarsHiding && + (_nativeScrollbarsOverlaid.x || _nativeScrollbarsOverlaid.y); + const result = create ? document.createElement('style') : false; - if (result) { - attr(result, 'id', `${classNameViewportArrange}-${contentArrangeCounter}`); - contentArrangeCounter++; - } + if (result) { + attr(result, 'id', `${classNameViewportArrange}-${contentArrangeCounter}`); + contentArrangeCounter++; + } - return result; - }, - _overflowUpdateSegment: ( - doViewportArrange, - flexboxGlue, - viewport, - viewportArrange, - getState, - getViewportOverflowState, - hideNativeScrollbars - ) => { - /** - * Sets the styles of the viewport arrange element. - * @param viewportOverflowState The viewport overflow state according to which the scrollbars shall be hidden. - * @param viewportScrollSize The content scroll size. - * @param directionIsRTL Whether the direction is RTL or not. - * @returns A boolean which indicates whether the viewport arrange element was adjusted. - */ - const arrangeViewport: ArrangeViewport = ( - viewportOverflowState, - viewportScrollSize, - sizeFraction, - directionIsRTL + return result; + }, + _overflowUpdateSegment: ( + doViewportArrange, + flexboxGlue, + viewport, + viewportArrange, + getState, + getViewportOverflowState, + hideNativeScrollbars ) => { - if (doViewportArrange) { - const { _viewportPaddingStyle } = getState(); - const { _scrollbarsHideOffset, _scrollbarsHideOffsetArrange } = viewportOverflowState; - const { x: arrangeX, y: arrangeY } = _scrollbarsHideOffsetArrange; - const { x: hideOffsetX, y: hideOffsetY } = _scrollbarsHideOffset; - const viewportArrangeHorizontalPaddingKey: keyof StyleObject = directionIsRTL - ? 'paddingRight' - : 'paddingLeft'; - const viewportArrangeHorizontalPaddingValue = _viewportPaddingStyle[ - viewportArrangeHorizontalPaddingKey - ] as number; - const viewportArrangeVerticalPaddingValue = _viewportPaddingStyle.paddingTop as number; - const fractionalContentWidth = viewportScrollSize.w + sizeFraction.w; - const fractionalContenHeight = viewportScrollSize.h + sizeFraction.h; - const arrangeSize = { - w: - hideOffsetY && arrangeY - ? `${ - hideOffsetY + fractionalContentWidth - viewportArrangeHorizontalPaddingValue - }px` - : '', - h: - hideOffsetX && arrangeX - ? `${hideOffsetX + fractionalContenHeight - viewportArrangeVerticalPaddingValue}px` - : '', + /** + * Sets the styles of the viewport arrange element. + * @param viewportOverflowState The viewport overflow state according to which the scrollbars shall be hidden. + * @param viewportScrollSize The content scroll size. + * @param directionIsRTL Whether the direction is RTL or not. + * @returns A boolean which indicates whether the viewport arrange element was adjusted. + */ + const arrangeViewport: ArrangeViewport = ( + viewportOverflowState, + viewportScrollSize, + sizeFraction, + directionIsRTL + ) => { + if (doViewportArrange) { + const { _viewportPaddingStyle } = getState(); + const { _scrollbarsHideOffset, _scrollbarsHideOffsetArrange } = viewportOverflowState; + const { x: arrangeX, y: arrangeY } = _scrollbarsHideOffsetArrange; + const { x: hideOffsetX, y: hideOffsetY } = _scrollbarsHideOffset; + const viewportArrangeHorizontalPaddingKey: keyof StyleObject = directionIsRTL + ? 'paddingRight' + : 'paddingLeft'; + const viewportArrangeHorizontalPaddingValue = _viewportPaddingStyle[ + viewportArrangeHorizontalPaddingKey + ] as number; + const viewportArrangeVerticalPaddingValue = _viewportPaddingStyle.paddingTop as number; + const fractionalContentWidth = viewportScrollSize.w + sizeFraction.w; + const fractionalContenHeight = viewportScrollSize.h + sizeFraction.h; + const arrangeSize = { + w: + hideOffsetY && arrangeY + ? `${ + hideOffsetY + fractionalContentWidth - viewportArrangeHorizontalPaddingValue + }px` + : '', + h: + hideOffsetX && arrangeX + ? `${ + hideOffsetX + fractionalContenHeight - viewportArrangeVerticalPaddingValue + }px` + : '', + }; + + // adjust content arrange / before element + if (viewportArrange) { + const { sheet } = viewportArrange; + if (sheet) { + const { cssRules } = sheet; + if (cssRules) { + if (!cssRules.length) { + sheet.insertRule( + `#${attr(viewportArrange, 'id')} + .${classNameViewportArrange}::before {}`, + 0 + ); + } + + // @ts-ignore + const ruleStyle = cssRules[0].style; + + ruleStyle.width = arrangeSize.w; + ruleStyle.height = arrangeSize.h; + } + } + } else { + style<'--os-vaw' | '--os-vah'>(viewport, { + '--os-vaw': arrangeSize.w, + '--os-vah': arrangeSize.h, + }); + } + } + + return doViewportArrange; + }; + + /** + * Removes all styles applied because of the viewport arrange strategy. + * @param showNativeOverlaidScrollbars Whether native overlaid scrollbars are shown instead of hidden. + * @param directionIsRTL Whether the direction is RTL or not. + * @param viewportOverflowState The currentviewport overflow state or undefined if it has to be determined. + * @returns A object with a function which applies all the removed styles and the determined viewport vverflow state. + */ + const undoViewportArrange: UndoArrangeViewport = ( + showNativeOverlaidScrollbars, + directionIsRTL, + viewportOverflowState? + ) => { + if (doViewportArrange) { + const finalViewportOverflowState = + viewportOverflowState || getViewportOverflowState(showNativeOverlaidScrollbars); + const { _viewportPaddingStyle: viewportPaddingStyle } = getState(); + const { _scrollbarsHideOffsetArrange } = finalViewportOverflowState; + const { x: arrangeX, y: arrangeY } = _scrollbarsHideOffsetArrange; + const finalPaddingStyle: StyleObject = {}; + const assignProps = (props: string) => + each(props.split(' '), (prop) => { + finalPaddingStyle[prop] = viewportPaddingStyle[prop]; + }); + + if (arrangeX) { + assignProps('marginBottom paddingTop paddingBottom'); + } + + if (arrangeY) { + assignProps('marginLeft marginRight paddingLeft paddingRight'); + } + + const prevStyle = style(viewport, keys(finalPaddingStyle)); + + removeClass(viewport, classNameViewportArrange); + + if (!flexboxGlue) { + finalPaddingStyle.height = ''; + } + + style(viewport, finalPaddingStyle); + + return [ + () => { + hideNativeScrollbars( + finalViewportOverflowState, + directionIsRTL, + doViewportArrange, + prevStyle + ); + style(viewport, prevStyle); + addClass(viewport, classNameViewportArrange); + }, + finalViewportOverflowState, + ]; + } + return [noop]; + }; + + return [arrangeViewport, undoViewportArrange]; + }, + _envWindowZoom: () => { + let size = { w: 0, h: 0 }; + let dpr = 0; + + return (envInstance, updateNativeScrollbarSizeCache, triggerEvent) => { + const sizeNew = windowSize(); + const deltaSize = { + w: sizeNew.w - size.w, + h: sizeNew.h - size.h, }; - // adjust content arrange / before element - if (viewportArrange) { - const { sheet } = viewportArrange; - if (sheet) { - const { cssRules } = sheet; - if (cssRules) { - if (!cssRules.length) { - sheet.insertRule( - `#${attr(viewportArrange, 'id')} + .${classNameViewportArrange}::before {}`, - 0 - ); - } + if (deltaSize.w === 0 && deltaSize.h === 0) { + return; + } - // @ts-ignore - const ruleStyle = cssRules[0].style; + const deltaAbsSize = { + w: abs(deltaSize.w), + h: abs(deltaSize.h), + }; + const deltaAbsRatio = { + w: abs(round(sizeNew.w / (size.w / 100.0))), + h: abs(round(sizeNew.h / (size.h / 100.0))), + }; + const dprNew = getWindowDPR(); + const deltaIsBigger = deltaAbsSize.w > 2 && deltaAbsSize.h > 2; + const difference = !diffBiggerThanOne(deltaAbsRatio.w, deltaAbsRatio.h); + const dprChanged = dprNew !== dpr && dprNew > 0; + const isZoom = deltaIsBigger && difference && dprChanged; - ruleStyle.width = arrangeSize.w; - ruleStyle.height = arrangeSize.h; - } + if (isZoom) { + const [scrollbarSize, scrollbarSizeChanged] = updateNativeScrollbarSizeCache(); + + assignDeep(envInstance._nativeScrollbarsSize, scrollbarSize); // keep the object same! + + if (scrollbarSizeChanged) { + triggerEvent(); } - } else { - style<'--os-vaw' | '--os-vah'>(viewport, { - '--os-vaw': arrangeSize.w, - '--os-vah': arrangeSize.h, - }); - } - } - - return doViewportArrange; - }; - - /** - * Removes all styles applied because of the viewport arrange strategy. - * @param showNativeOverlaidScrollbars Whether native overlaid scrollbars are shown instead of hidden. - * @param directionIsRTL Whether the direction is RTL or not. - * @param viewportOverflowState The currentviewport overflow state or undefined if it has to be determined. - * @returns A object with a function which applies all the removed styles and the determined viewport vverflow state. - */ - const undoViewportArrange: UndoArrangeViewport = ( - showNativeOverlaidScrollbars, - directionIsRTL, - viewportOverflowState? - ) => { - if (doViewportArrange) { - const finalViewportOverflowState = - viewportOverflowState || getViewportOverflowState(showNativeOverlaidScrollbars); - const { _viewportPaddingStyle: viewportPaddingStyle } = getState(); - const { _scrollbarsHideOffsetArrange } = finalViewportOverflowState; - const { x: arrangeX, y: arrangeY } = _scrollbarsHideOffsetArrange; - const finalPaddingStyle: StyleObject = {}; - const assignProps = (props: string) => - each(props.split(' '), (prop) => { - finalPaddingStyle[prop] = viewportPaddingStyle[prop]; - }); - - if (arrangeX) { - assignProps('marginBottom paddingTop paddingBottom'); } - if (arrangeY) { - assignProps('marginLeft marginRight paddingLeft paddingRight'); - } - - const prevStyle = style(viewport, keys(finalPaddingStyle)); - - removeClass(viewport, classNameViewportArrange); - - if (!flexboxGlue) { - finalPaddingStyle.height = ''; - } - - style(viewport, finalPaddingStyle); - - return [ - () => { - hideNativeScrollbars( - finalViewportOverflowState, - directionIsRTL, - doViewportArrange, - prevStyle - ); - style(viewport, prevStyle); - addClass(viewport, classNameViewportArrange); - }, - finalViewportOverflowState, - ]; - } - return [noop]; - }; - - return [arrangeViewport, undoViewportArrange]; + size = sizeNew; + dpr = dprNew; + }; + }, }, - _envWindowZoom: () => { - let size = { w: 0, h: 0 }; - let dpr = 0; - - return (envInstance, updateNativeScrollbarSizeCache, triggerEvent) => { - const sizeNew = windowSize(); - const deltaSize = { - w: sizeNew.w - size.w, - h: sizeNew.h - size.h, - }; - - if (deltaSize.w === 0 && deltaSize.h === 0) { - return; - } - - const deltaAbsSize = { - w: abs(deltaSize.w), - h: abs(deltaSize.h), - }; - const deltaAbsRatio = { - w: abs(round(sizeNew.w / (size.w / 100.0))), - h: abs(round(sizeNew.h / (size.h / 100.0))), - }; - const dprNew = getWindowDPR(); - const deltaIsBigger = deltaAbsSize.w > 2 && deltaAbsSize.h > 2; - const difference = !diffBiggerThanOne(deltaAbsRatio.w, deltaAbsRatio.h); - const dprChanged = dprNew !== dpr && dprNew > 0; - const isZoom = deltaIsBigger && difference && dprChanged; - - if (isZoom) { - const [scrollbarSize, scrollbarSizeChanged] = updateNativeScrollbarSizeCache(); - - assignDeep(envInstance._nativeScrollbarsSize, scrollbarSize); // keep the object same! - - if (scrollbarSizeChanged) { - triggerEvent(); - } - } - - size = sizeNew; - dpr = dprNew; - }; - }, - }, -}; + }))(); diff --git a/packages/overlayscrollbars/src/plugins/sizeObserverPlugin/sizeObserverPlugin.ts b/packages/overlayscrollbars/src/plugins/sizeObserverPlugin/sizeObserverPlugin.ts index dc0bbf5..bff3226 100644 --- a/packages/overlayscrollbars/src/plugins/sizeObserverPlugin/sizeObserverPlugin.ts +++ b/packages/overlayscrollbars/src/plugins/sizeObserverPlugin/sizeObserverPlugin.ts @@ -32,7 +32,7 @@ const scrollAmount = 3333333; const scrollEventName = 'scroll'; export const sizeObserverPluginName = '__osSizeObserverPlugin'; -export const sizeObserverPlugin: Plugin = { +export const sizeObserverPlugin: Plugin = /* @__PURE__ */ (() => ({ [sizeObserverPluginName]: { _: (listenerElement, onSizeChangedCallback, observeAppearChange) => { const observerElementChildren = createDOM( @@ -96,4 +96,4 @@ export const sizeObserverPlugin: Plugin = { return [observeAppearChange ? onScroll.bind(0, false) : reset, offListeners]; }, }, -}; +}))(); diff --git a/packages/overlayscrollbars/styles/overlayscrollbars.css b/packages/overlayscrollbars/styles/overlayscrollbars.css index 57f6d95..09421e9 100644 --- a/packages/overlayscrollbars/styles/overlayscrollbars.css +++ b/packages/overlayscrollbars/styles/overlayscrollbars.css @@ -225,6 +225,7 @@ html.os-viewport-scrollbar-hidden::-webkit-scrollbar-corner, html.os-viewport-scrollbar-hidden, html.os-viewport-scrollbar-hidden > body[data-overlayscrollbars] { box-sizing: border-box; + margin: 0; width: 100%; height: 100%; } diff --git a/packages/overlayscrollbars/styles/overlayscrollbars.css.map b/packages/overlayscrollbars/styles/overlayscrollbars.css.map index b67cf2d..afcfbd1 100644 --- a/packages/overlayscrollbars/styles/overlayscrollbars.css.map +++ b/packages/overlayscrollbars/styles/overlayscrollbars.css.map @@ -1 +1 @@ -{"version":3,"sources":["../stdin","../../src/styles/sizeobserver.scss","../overlayscrollbars.css","../../src/styles/trinsicobserver.scss","../../src/styles/structure.scss","../../src/styles/scrollbars.scss"],"names":[],"mappings":"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","file":"overlayscrollbars.css"} \ No newline at end of file +{"version":3,"sources":["../stdin","../../src/styles/sizeobserver.scss","../overlayscrollbars.css","../../src/styles/trinsicobserver.scss","../../src/styles/structure.scss","../../src/styles/scrollbars.scss"],"names":[],"mappings":"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","file":"overlayscrollbars.css"} \ No newline at end of file diff --git a/packages/overlayscrollbars/styles/overlayscrollbars.min.css b/packages/overlayscrollbars/styles/overlayscrollbars.min.css index be746d3..e69de29 100644 --- a/packages/overlayscrollbars/styles/overlayscrollbars.min.css +++ b/packages/overlayscrollbars/styles/overlayscrollbars.min.css @@ -1,9 +0,0 @@ -/*! - * OverlayScrollbars - * Version: 2.0.0-beta.0 - * - * Copyright (c) Rene Haas | KingSora. - * https://github.com/KingSora - * - * Released under the MIT license. - */.os-size-observer,.os-size-observer-listener{box-sizing:border-box;direction:inherit;overflow:hidden;pointer-events:none;visibility:hidden}.os-size-observer,.os-size-observer-listener,.os-size-observer-listener-item,.os-size-observer-listener-item-final{left:0;position:absolute;top:0;writing-mode:horizontal-tb}.os-size-observer{border:inherit;bottom:0;box-sizing:inherit;contain:strict;display:flex;flex-direction:row;flex-wrap:nowrap;left:0;margin:-133px;padding:inherit;right:0;top:0;transform:scale(.1);z-index:-1}.os-size-observer:before{box-sizing:inherit;content:"";flex:none;height:10px;padding:10px;width:10px}.os-size-observer-appear{-webkit-animation:os-size-observer-appear-animation 1ms forwards;animation:os-size-observer-appear-animation 1ms forwards}.os-size-observer-listener{border:inherit;box-sizing:border-box;flex:auto;margin:-133px;padding:inherit;position:relative;transform:scale(10)}.os-size-observer-listener.ltr{margin-left:0;margin-right:-266px}.os-size-observer-listener.rtl{margin-left:-266px;margin-right:0}.os-size-observer-listener:empty:before{content:"";height:100%;width:100%}.os-size-observer-listener:empty:before,.os-size-observer-listener>.os-size-observer-listener-item{border:inherit;box-sizing:content-box;display:block;flex:auto;padding:inherit;position:relative}.os-size-observer-listener-scroll{box-sizing:border-box;display:flex}.os-size-observer-listener-item{bottom:0;direction:ltr;flex:none;overflow:hidden;right:0}.os-size-observer-listener-item-final{transition:none}@-webkit-keyframes os-size-observer-appear-animation{0%{cursor:auto}to{cursor:none}}@keyframes os-size-observer-appear-animation{0%{cursor:auto}to{cursor:none}}.os-trinsic-observer{border:none;box-sizing:border-box;contain:strict;flex:none;height:0;margin:0;max-height:1px;max-width:0;overflow:hidden;padding:0;position:relative;top:calc(100% + 1px);z-index:-1}.os-trinsic-observer:not(:empty){height:calc(100% + 1px);top:-1px}.os-trinsic-observer:not(:empty)>.os-size-observer{height:1000%;min-height:1px;min-width:1px;width:1000%}.os-environment{--os-custom-prop:-1;height:200px;opacity:0;overflow:scroll;position:fixed;visibility:hidden;width:200px;z-index:var(--os-custom-prop)}.os-environment div{height:200%;margin:10px 0;width:200%}.os-environment.os-environment-flexbox-glue{display:flex;flex-direction:row;flex-wrap:nowrap;height:auto;min-height:200px;min-width:200px;width:auto}.os-environment.os-environment-flexbox-glue div{flex:auto;height:auto;margin:0;max-height:100%;max-width:100%;width:auto}.os-environment.os-environment-flexbox-glue-max{max-height:200px}.os-environment.os-environment-flexbox-glue-max div{overflow:visible}.os-environment.os-environment-flexbox-glue-max div:before{content:"";display:block;height:999px;width:999px}.os-environment,.os-viewport{-ms-overflow-style:scrollbar!important}.os-viewport-scrollbar-hidden.os-environment,.os-viewport-scrollbar-hidden.os-viewport,[data-overlayscrollbars=""],[data-overlayscrollbars~=scrollbarHidden],html.os-viewport-scrollbar-hidden{scrollbar-width:none!important}.os-viewport-scrollbar-hidden.os-environment::-webkit-scrollbar,.os-viewport-scrollbar-hidden.os-environment::-webkit-scrollbar-corner,.os-viewport-scrollbar-hidden.os-viewport::-webkit-scrollbar,.os-viewport-scrollbar-hidden.os-viewport::-webkit-scrollbar-corner,[data-overlayscrollbars=""]::-webkit-scrollbar,[data-overlayscrollbars=""]::-webkit-scrollbar-corner,[data-overlayscrollbars~=scrollbarHidden]::-webkit-scrollbar,[data-overlayscrollbars~=scrollbarHidden]::-webkit-scrollbar-corner,html.os-viewport-scrollbar-hidden::-webkit-scrollbar,html.os-viewport-scrollbar-hidden::-webkit-scrollbar-corner{background:transparent!important;display:none!important;height:0!important;visibility:hidden!important;width:0!important}html.os-viewport-scrollbar-hidden,html.os-viewport-scrollbar-hidden>body[data-overlayscrollbars]{box-sizing:border-box;height:100%;width:100%}.os-padding,[data-overlayscrollbars~=host]{display:flex;flex-direction:row!important;flex-wrap:nowrap!important;position:relative}.os-padding,.os-viewport{border:none;box-sizing:inherit;flex:auto!important;height:auto;margin:0;padding:0;position:relative;width:100%;z-index:0}.os-viewport{--os-vaw:0;--os-vah:0}.os-viewport.os-viewport-arrange:before{content:"";height:var(--os-vah);min-height:1px;min-width:1px;pointer-events:none;position:absolute;width:var(--os-vaw);z-index:-1}[data-overlayscrollbars~=host],[data-overlayscrollbars~=viewport]{overflow:hidden!important}[data-overlayscrollbars~=overflowVisible]{overflow:visible!important}[data-overlayscrollbars-overflow-x=hidden]{overflow-x:hidden!important}[data-overlayscrollbars-overflow-x=scroll]{overflow-x:scroll!important}[data-overlayscrollbars-overflow-x=hidden]{overflow-y:hidden!important}[data-overlayscrollbars-overflow-y=scroll]{overflow-y:scroll!important}.os-padding,.os-viewport{overflow:hidden}.os-overflow-visible{overflow:visible}.os-content{box-sizing:inherit}.os-scrollbar{contain:strict;opacity:0;pointer-events:none;position:absolute;transition:opacity .3s,visibility .3s,top .3s,right .3s,bottom .3s,left .3s;visibility:hidden;z-index:99999}body>.os-scrollbar{position:fixed}.os-scrollbar-transitionless{transition:none}.os-scrollbar-track{border:none!important;direction:ltr!important;padding:0!important;position:relative}.os-scrollbar-handle{position:absolute}.os-scrollbar-handle,.os-scrollbar-track{height:100%;pointer-events:none;width:100%}.os-scrollbar.os-scrollbar-handle-interactive .os-scrollbar-handle,.os-scrollbar.os-scrollbar-track-interactive .os-scrollbar-track{pointer-events:auto;touch-action:none}.os-scrollbar-horizontal{bottom:0;left:0}.os-scrollbar-vertical{right:0;top:0}.os-scrollbar-rtl.os-scrollbar-horizontal{right:0}.os-scrollbar-rtl.os-scrollbar-vertical{left:0;right:auto}.os-scrollbar-interaction.os-scrollbar-visible,.os-scrollbar-visible{opacity:1;visibility:visible}.os-scrollbar-auto-hidden{opacity:0;visibility:hidden}.os-scrollbar-unusable,.os-scrollbar-unusable *,.os-scrollbar-wheel,.os-scrollbar-wheel *{pointer-events:none!important}.os-scrollbar-unusable .os-scrollbar-handle{opacity:0!important}.os-scrollbar.os-scrollbar-horizontal.os-scrollbar-cornerless{left:0;right:0}.os-scrollbar.os-scrollbar-vertical.os-scrollbar-cornerless{bottom:0;top:0}.os-theme-none.os-scrollbar,[data-overlayscrollbars~=updating]>.os-scrollbar{display:none!important}.os-theme-dark.os-scrollbar-horizontal,.os-theme-light.os-scrollbar-horizontal{height:10px;right:10px}.os-theme-dark.os-scrollbar-vertical,.os-theme-light.os-scrollbar-vertical{bottom:10px;width:10px}.os-theme-dark.os-scrollbar-rtl.os-scrollbar-horizontal,.os-theme-light.os-scrollbar-rtl.os-scrollbar-horizontal{left:10px;right:0}.os-theme-dark.os-scrollbar,.os-theme-light.os-scrollbar{background:transparent;box-sizing:border-box;padding:2px}.os-theme-dark.os-scrollbar-unusable,.os-theme-dark.os-scrollbar>.os-scrollbar-track,.os-theme-light.os-scrollbar-unusable,.os-theme-light.os-scrollbar>.os-scrollbar-track{background:transparent}.os-theme-dark.os-scrollbar-horizontal>.os-scrollbar-track>.os-scrollbar-handle,.os-theme-light.os-scrollbar-horizontal>.os-scrollbar-track>.os-scrollbar-handle{min-width:30px}.os-theme-dark.os-scrollbar-vertical>.os-scrollbar-track>.os-scrollbar-handle,.os-theme-light.os-scrollbar-vertical>.os-scrollbar-track>.os-scrollbar-handle{min-height:30px}.os-theme-dark.os-scrollbar-transition>.os-scrollbar-track>.os-scrollbar-handle,.os-theme-light.os-scrollbar-transition>.os-scrollbar-track>.os-scrollbar-handle{transition:background-color .3s}.os-theme-dark.os-scrollbar>.os-scrollbar-track,.os-theme-dark.os-scrollbar>.os-scrollbar-track>.os-scrollbar-handle,.os-theme-light.os-scrollbar>.os-scrollbar-track,.os-theme-light.os-scrollbar>.os-scrollbar-track>.os-scrollbar-handle{border-radius:10px}.os-theme-dark.os-scrollbar>.os-scrollbar-track>.os-scrollbar-handle{background:rgba(0,0,0,.4)}.os-theme-light.os-scrollbar>.os-scrollbar-track>.os-scrollbar-handle{background:hsla(0,0%,100%,.4)}.os-theme-dark.os-scrollbar:hover>.os-scrollbar-track>.os-scrollbar-handle{background:rgba(0,0,0,.55)}.os-theme-light.os-scrollbar:hover>.os-scrollbar-track>.os-scrollbar-handle{background:hsla(0,0%,100%,.55)}.os-theme-dark.os-scrollbar>.os-scrollbar-track>.os-scrollbar-handle.active{background:rgba(0,0,0,.7)}.os-theme-light.os-scrollbar>.os-scrollbar-track>.os-scrollbar-handle.active{background:hsla(0,0%,100%,.7)}.os-theme-dark.os-scrollbar-horizontal .os-scrollbar-handle:before,.os-theme-dark.os-scrollbar-vertical .os-scrollbar-handle:before,.os-theme-light.os-scrollbar-horizontal .os-scrollbar-handle:before,.os-theme-light.os-scrollbar-vertical .os-scrollbar-handle:before{bottom:0;content:"";display:block;left:0;position:absolute;right:0;top:0}.os-theme-dark.os-host-scrollbar-hidden>.os-scrollbar-handle:before{display:none}.os-theme-dark.os-scrollbar-horizontal .os-scrollbar-handle:before,.os-theme-light.os-scrollbar-horizontal .os-scrollbar-handle:before{bottom:-2px;top:-6px}.os-theme-dark.os-scrollbar-vertical .os-scrollbar-handle:before,.os-theme-light.os-scrollbar-vertical .os-scrollbar-handle:before{left:-6px;right:-2px}.os-theme-dark.os-scrollbar-rtl.os-scrollbar-vertical .os-scrollbar-handle:before,.os-theme-light.os-scrollbar-rtl.os-scrollbar-vertical .os-scrollbar-handle:before{left:-2px;right:-6px} \ No newline at end of file diff --git a/packages/overlayscrollbars/tests/jest/autoUpdateLoop.test.ts b/packages/overlayscrollbars/tests/jest-jsdom/autoUpdateLoop.test.ts similarity index 100% rename from packages/overlayscrollbars/tests/jest/autoUpdateLoop.test.ts rename to packages/overlayscrollbars/tests/jest-jsdom/autoUpdateLoop.test.ts diff --git a/packages/overlayscrollbars/tests/jest/instances.test.ts b/packages/overlayscrollbars/tests/jest-jsdom/instances.test.ts similarity index 100% rename from packages/overlayscrollbars/tests/jest/instances.test.ts rename to packages/overlayscrollbars/tests/jest-jsdom/instances.test.ts diff --git a/packages/overlayscrollbars/tests/jest/options.test.ts b/packages/overlayscrollbars/tests/jest-jsdom/options.test.ts similarity index 99% rename from packages/overlayscrollbars/tests/jest/options.test.ts rename to packages/overlayscrollbars/tests/jest-jsdom/options.test.ts index c6da23c..ce77859 100644 --- a/packages/overlayscrollbars/tests/jest/options.test.ts +++ b/packages/overlayscrollbars/tests/jest-jsdom/options.test.ts @@ -5,7 +5,7 @@ describe('options', () => { expect(defaultOptions).toEqual({ paddingAbsolute: false, showNativeOverlaidScrollbars: false, - updating: { + update: { elementEvents: [['img', 'load']], debounce: [0, 33], attributes: null, diff --git a/packages/overlayscrollbars/tests/jest/plugins/optionsValidation/optionsValidation.test.ts b/packages/overlayscrollbars/tests/jest-jsdom/plugins/optionsValidation/optionsValidation.test.ts similarity index 100% rename from packages/overlayscrollbars/tests/jest/plugins/optionsValidation/optionsValidation.test.ts rename to packages/overlayscrollbars/tests/jest-jsdom/plugins/optionsValidation/optionsValidation.test.ts diff --git a/packages/overlayscrollbars/tests/jest/plugins/optionsValidation/transformation.test.ts b/packages/overlayscrollbars/tests/jest-jsdom/plugins/optionsValidation/transformation.test.ts similarity index 100% rename from packages/overlayscrollbars/tests/jest/plugins/optionsValidation/transformation.test.ts rename to packages/overlayscrollbars/tests/jest-jsdom/plugins/optionsValidation/transformation.test.ts diff --git a/packages/overlayscrollbars/tests/jest/plugins/optionsValidation/validation.test.ts b/packages/overlayscrollbars/tests/jest-jsdom/plugins/optionsValidation/validation.test.ts similarity index 100% rename from packages/overlayscrollbars/tests/jest/plugins/optionsValidation/validation.test.ts rename to packages/overlayscrollbars/tests/jest-jsdom/plugins/optionsValidation/validation.test.ts diff --git a/packages/overlayscrollbars/tests/jest/plugins/plugins.test.ts b/packages/overlayscrollbars/tests/jest-jsdom/plugins/plugins.test.ts similarity index 100% rename from packages/overlayscrollbars/tests/jest/plugins/plugins.test.ts rename to packages/overlayscrollbars/tests/jest-jsdom/plugins/plugins.test.ts diff --git a/packages/overlayscrollbars/tests/jest/setups/structureSetup/structureSetup.elements.test.ts b/packages/overlayscrollbars/tests/jest-jsdom/setups/structureSetup/structureSetup.elements.test.ts similarity index 100% rename from packages/overlayscrollbars/tests/jest/setups/structureSetup/structureSetup.elements.test.ts rename to packages/overlayscrollbars/tests/jest-jsdom/setups/structureSetup/structureSetup.elements.test.ts diff --git a/packages/overlayscrollbars/tests/jest/support/cache.test.ts b/packages/overlayscrollbars/tests/jest-jsdom/support/cache.test.ts similarity index 100% rename from packages/overlayscrollbars/tests/jest/support/cache.test.ts rename to packages/overlayscrollbars/tests/jest-jsdom/support/cache.test.ts diff --git a/packages/overlayscrollbars/tests/jest/support/compatibility/vendors.test.ts b/packages/overlayscrollbars/tests/jest-jsdom/support/compatibility/vendors.test.ts similarity index 100% rename from packages/overlayscrollbars/tests/jest/support/compatibility/vendors.test.ts rename to packages/overlayscrollbars/tests/jest-jsdom/support/compatibility/vendors.test.ts diff --git a/packages/overlayscrollbars/tests/jest/support/dom/attribute.test.ts b/packages/overlayscrollbars/tests/jest-jsdom/support/dom/attribute.test.ts similarity index 100% rename from packages/overlayscrollbars/tests/jest/support/dom/attribute.test.ts rename to packages/overlayscrollbars/tests/jest-jsdom/support/dom/attribute.test.ts diff --git a/packages/overlayscrollbars/tests/jest/support/dom/class.test.ts b/packages/overlayscrollbars/tests/jest-jsdom/support/dom/class.test.ts similarity index 100% rename from packages/overlayscrollbars/tests/jest/support/dom/class.test.ts rename to packages/overlayscrollbars/tests/jest-jsdom/support/dom/class.test.ts diff --git a/packages/overlayscrollbars/tests/jest/support/dom/create.test.ts b/packages/overlayscrollbars/tests/jest-jsdom/support/dom/create.test.ts similarity index 100% rename from packages/overlayscrollbars/tests/jest/support/dom/create.test.ts rename to packages/overlayscrollbars/tests/jest-jsdom/support/dom/create.test.ts diff --git a/packages/overlayscrollbars/tests/jest/support/dom/dimensions.test.ts b/packages/overlayscrollbars/tests/jest-jsdom/support/dom/dimensions.test.ts similarity index 100% rename from packages/overlayscrollbars/tests/jest/support/dom/dimensions.test.ts rename to packages/overlayscrollbars/tests/jest-jsdom/support/dom/dimensions.test.ts diff --git a/packages/overlayscrollbars/tests/jest/support/dom/events.test.ts b/packages/overlayscrollbars/tests/jest-jsdom/support/dom/events.test.ts similarity index 100% rename from packages/overlayscrollbars/tests/jest/support/dom/events.test.ts rename to packages/overlayscrollbars/tests/jest-jsdom/support/dom/events.test.ts diff --git a/packages/overlayscrollbars/tests/jest/support/dom/manipulation.test.ts b/packages/overlayscrollbars/tests/jest-jsdom/support/dom/manipulation.test.ts similarity index 100% rename from packages/overlayscrollbars/tests/jest/support/dom/manipulation.test.ts rename to packages/overlayscrollbars/tests/jest-jsdom/support/dom/manipulation.test.ts diff --git a/packages/overlayscrollbars/tests/jest/support/dom/offset.test.ts b/packages/overlayscrollbars/tests/jest-jsdom/support/dom/offset.test.ts similarity index 100% rename from packages/overlayscrollbars/tests/jest/support/dom/offset.test.ts rename to packages/overlayscrollbars/tests/jest-jsdom/support/dom/offset.test.ts diff --git a/packages/overlayscrollbars/tests/jest/support/dom/style.test.ts b/packages/overlayscrollbars/tests/jest-jsdom/support/dom/style.test.ts similarity index 100% rename from packages/overlayscrollbars/tests/jest/support/dom/style.test.ts rename to packages/overlayscrollbars/tests/jest-jsdom/support/dom/style.test.ts diff --git a/packages/overlayscrollbars/tests/jest/support/dom/traversal.test.ts b/packages/overlayscrollbars/tests/jest-jsdom/support/dom/traversal.test.ts similarity index 100% rename from packages/overlayscrollbars/tests/jest/support/dom/traversal.test.ts rename to packages/overlayscrollbars/tests/jest-jsdom/support/dom/traversal.test.ts diff --git a/packages/overlayscrollbars/tests/jest/support/eventListeners.test.ts b/packages/overlayscrollbars/tests/jest-jsdom/support/eventListeners.test.ts similarity index 100% rename from packages/overlayscrollbars/tests/jest/support/eventListeners.test.ts rename to packages/overlayscrollbars/tests/jest-jsdom/support/eventListeners.test.ts diff --git a/packages/overlayscrollbars/tests/jest/support/utils/arrays.test.ts b/packages/overlayscrollbars/tests/jest-jsdom/support/utils/arrays.test.ts similarity index 100% rename from packages/overlayscrollbars/tests/jest/support/utils/arrays.test.ts rename to packages/overlayscrollbars/tests/jest-jsdom/support/utils/arrays.test.ts diff --git a/packages/overlayscrollbars/tests/jest/support/utils/equal.test.ts b/packages/overlayscrollbars/tests/jest-jsdom/support/utils/equal.test.ts similarity index 100% rename from packages/overlayscrollbars/tests/jest/support/utils/equal.test.ts rename to packages/overlayscrollbars/tests/jest-jsdom/support/utils/equal.test.ts diff --git a/packages/overlayscrollbars/tests/jest/support/utils/function.test.ts b/packages/overlayscrollbars/tests/jest-jsdom/support/utils/function.test.ts similarity index 100% rename from packages/overlayscrollbars/tests/jest/support/utils/function.test.ts rename to packages/overlayscrollbars/tests/jest-jsdom/support/utils/function.test.ts diff --git a/packages/overlayscrollbars/tests/jest/support/utils/object.test.ts b/packages/overlayscrollbars/tests/jest-jsdom/support/utils/object.test.ts similarity index 100% rename from packages/overlayscrollbars/tests/jest/support/utils/object.test.ts rename to packages/overlayscrollbars/tests/jest-jsdom/support/utils/object.test.ts diff --git a/packages/overlayscrollbars/tests/jest/support/utils/types.test.ts b/packages/overlayscrollbars/tests/jest-jsdom/support/utils/types.test.ts similarity index 100% rename from packages/overlayscrollbars/tests/jest/support/utils/types.test.ts rename to packages/overlayscrollbars/tests/jest-jsdom/support/utils/types.test.ts diff --git a/packages/overlayscrollbars/tests/jest-node/treeshaking.test.js b/packages/overlayscrollbars/tests/jest-node/treeshaking.test.js new file mode 100644 index 0000000..dd315a0 --- /dev/null +++ b/packages/overlayscrollbars/tests/jest-node/treeshaking.test.js @@ -0,0 +1,148 @@ +import path from 'path'; +import fs from 'fs'; +import { rollup } from 'rollup'; +import { webpack } from 'webpack'; +import { build } from 'esbuild'; +import { terser } from 'rollup-plugin-terser'; + +import pkg from '../../package.json'; +import rollupConfig from '../../rollup.config'; + +const cleanBundle = true; +const cleanFixture = true; +const expectedBundleDiff = 1800; + +const normalizePath = (pathName) => + pathName ? pathName.split(path.sep).join(path.posix.sep) : pathName; + +const fixturesDir = path.join(__dirname, '.fixtures'); +const libraryFixturePath = normalizePath(path.join(fixturesDir, 'lib.js')); +const unshakedFixturePath = normalizePath(path.join(fixturesDir, 'unshaked.js')); +const shakedFixturePath = normalizePath(path.join(fixturesDir, 'shaked.js')); + +const unshakedFixtureContent = ` + export * as os from '${libraryFixturePath}'; +`; + +const shakedFixtureContent = ` + export { OverlayScrollbars } from '${libraryFixturePath}'; +`; + +const bundleFunctions = { + webpack: async (input, output) => { + const outputPath = path.dirname(output); + const outputfilename = path.basename(output); + const compiler = webpack({ + mode: 'production', + entry: input, + output: { + path: outputPath, + filename: outputfilename, + library: 'treeshaking', + }, + optimization: { + minimize: true, + }, + }); + + const result = await new Promise((resolve, reject) => { + compiler.run((err, res) => { + if (err) { + return reject(err); + } + resolve(res); + }); + }); + + return result.compilation.assetsInfo.get(outputfilename).size; + }, + rollup: async (input, output) => { + const config = { + input, + output: { + format: 'iife', + name: 'treeshaking', + file: output, + plugins: [terser()], + }, + }; + const bundle = await rollup(config); + await bundle.write(config.output); + + return fs.statSync(config.output.file).size; + }, + esbuild: async (input, output) => { + await build({ + entryPoints: [input], + outfile: output, + format: 'iife', + globalName: 'treeshaking', + bundle: true, + minify: true, + treeShaking: true, + }); + + return fs.statSync(output).size; + }, +}; + +const testBundler = (bundlerName) => async () => { + const bundleFunction = bundleFunctions[bundlerName]; + const outputDir = path.join(__dirname, `.${bundlerName}`); + const unshaked = await bundleFunction(unshakedFixturePath, path.join(outputDir, 'unshaked.js')); + const shaked = await bundleFunction(shakedFixturePath, path.join(outputDir, 'shaked.js')); + + cleanBundle && fs.rmSync(outputDir, { recursive: true }); + + console.info(`${bundlerName} size`, { + unshaked, + shaked, + diff: unshaked - shaked, + }); + + expect(unshaked - shaked).toBeGreaterThan(expectedBundleDiff); +}; + +describe('tree shaking', () => { + // build the fixture + beforeAll(async () => { + const { module } = pkg; + const esmEntryFilename = path.basename(module); + const config = rollupConfig.find((inputConfig) => { + const { output } = inputConfig; + if (output) { + const outputArr = Array.isArray(output) ? output : [output]; + const outputConfig = outputArr.find(({ file }) => path.basename(file) === esmEntryFilename); + if (outputConfig) { + inputConfig.output = outputConfig; + inputConfig.output.sourcemap = false; + inputConfig.output.file = libraryFixturePath; + inputConfig.plugins = inputConfig.plugins.filter((plugin) => plugin.name !== 'PROJECT'); + return true; + } + } + return false; + }); + + const bundle = await rollup(config); + await bundle.write(config.output); + + if (!fs.existsSync(fixturesDir)) { + fs.mkdirSync(fixturesDir); + } + + fs.writeFileSync(unshakedFixturePath, unshakedFixtureContent); + fs.writeFileSync(shakedFixturePath, shakedFixtureContent); + }, 60000 * 2); + + // clean the fixture + afterAll(() => { + cleanFixture && fs.rmSync(fixturesDir, { recursive: true }); + }); + + test('webpack', testBundler('webpack'), 60000); + + test('rollup', testBundler('rollup'), 60000); + + test('esbuild', testBundler('esbuild'), 60000); +});