From 4caf5e086dad53b05496101c49b50309066822fb Mon Sep 17 00:00:00 2001 From: MrWook Date: Mon, 30 Sep 2024 21:05:31 +0200 Subject: [PATCH] feat(scripts)!: remove iief and use mjs and cjs extensions and use additional compression --- packages/languages/ar/package.json | 7 +- packages/languages/common/package.json | 7 +- packages/languages/cs/package.json | 7 +- packages/languages/da-dk/package.json | 7 +- packages/languages/de/package.json | 7 +- packages/languages/en/package.json | 7 +- packages/languages/es-es/package.json | 7 +- packages/languages/fi/package.json | 7 +- packages/languages/fr/package.json | 7 +- packages/languages/id/package.json | 7 +- packages/languages/it/package.json | 7 +- packages/languages/ja/package.json | 7 +- packages/languages/nl-be/package.json | 7 +- packages/languages/pl/package.json | 7 +- packages/languages/pt-br/package.json | 7 +- .../dictionaryCompression/package.json | 18 ++++- packages/libraries/main/package.json | 4 +- packages/libraries/pwned/package.json | 4 +- scripts/jsonPlugin.mjs | 68 +++++++++++++++---- scripts/rollup.config.mjs | 49 ++----------- yarn.lock | 5 ++ 21 files changed, 132 insertions(+), 121 deletions(-) diff --git a/packages/languages/ar/package.json b/packages/languages/ar/package.json index 6fd1aa76..077c7902 100644 --- a/packages/languages/ar/package.json +++ b/packages/languages/ar/package.json @@ -1,8 +1,8 @@ { "name": "@zxcvbn-ts/language-ar", "version": "4.0.0-beta.1", - "main": "dist/index.js", - "module": "dist/index.esm.js", + "main": "dist/index.cjs", + "module": "dist/index.mjs", "types": "dist/index.d.ts", "sideEffects": false, "description": "The Arabic language package for zxcvbn-ts", @@ -27,7 +27,6 @@ "arabic" ], "dependencies": { - "@alttiri/base85": "^1.8.0", - "fflate": "^0.8.2" + "@zxcvbn-ts/dictionary-compression": "4.0.0-beta.1" } } diff --git a/packages/languages/common/package.json b/packages/languages/common/package.json index 113378a2..08b4a5be 100644 --- a/packages/languages/common/package.json +++ b/packages/languages/common/package.json @@ -1,8 +1,8 @@ { "name": "@zxcvbn-ts/language-common", "version": "4.0.0-beta.1", - "main": "dist/index.js", - "module": "dist/index.esm.js", + "main": "dist/index.cjs", + "module": "dist/index.mjs", "types": "dist/index.d.ts", "sideEffects": false, "description": "The common language package for zxcvbn-ts", @@ -27,7 +27,6 @@ "common" ], "dependencies": { - "@alttiri/base85": "^1.8.0", - "fflate": "^0.8.2" + "@zxcvbn-ts/dictionary-compression": "4.0.0-beta.1" } } diff --git a/packages/languages/cs/package.json b/packages/languages/cs/package.json index 92bf3d7f..150ce6a3 100644 --- a/packages/languages/cs/package.json +++ b/packages/languages/cs/package.json @@ -1,8 +1,8 @@ { "name": "@zxcvbn-ts/language-cs", "version": "4.0.0-beta.1", - "main": "dist/index.js", - "module": "dist/index.esm.js", + "main": "dist/index.cjs", + "module": "dist/index.mjs", "types": "dist/index.d.ts", "sideEffects": false, "description": "The Czech language package for zxcvbn-ts", @@ -27,7 +27,6 @@ "czech" ], "dependencies": { - "@alttiri/base85": "^1.8.0", - "fflate": "^0.8.2" + "@zxcvbn-ts/dictionary-compression": "4.0.0-beta.1" } } diff --git a/packages/languages/da-dk/package.json b/packages/languages/da-dk/package.json index b86c2c7b..3ac871d8 100644 --- a/packages/languages/da-dk/package.json +++ b/packages/languages/da-dk/package.json @@ -1,8 +1,8 @@ { "name": "@zxcvbn-ts/language-da-dk", "version": "4.0.0-beta.1", - "main": "dist/index.js", - "module": "dist/index.esm.js", + "main": "dist/index.cjs", + "module": "dist/index.mjs", "types": "dist/index.d.ts", "sideEffects": false, "description": "The Danish language package for zxcvbn-ts", @@ -27,7 +27,6 @@ "danish" ], "dependencies": { - "@alttiri/base85": "^1.8.0", - "fflate": "^0.8.2" + "@zxcvbn-ts/dictionary-compression": "4.0.0-beta.1" } } diff --git a/packages/languages/de/package.json b/packages/languages/de/package.json index bec3f7a8..6590daaf 100644 --- a/packages/languages/de/package.json +++ b/packages/languages/de/package.json @@ -1,8 +1,8 @@ { "name": "@zxcvbn-ts/language-de", "version": "4.0.0-beta.1", - "main": "dist/index.js", - "module": "dist/index.esm.js", + "main": "dist/index.cjs", + "module": "dist/index.mjs", "types": "dist/index.d.ts", "sideEffects": false, "description": "The German language package for zxcvbn-ts", @@ -27,7 +27,6 @@ "german" ], "dependencies": { - "@alttiri/base85": "^1.8.0", - "fflate": "^0.8.2" + "@zxcvbn-ts/dictionary-compression": "4.0.0-beta.1" } } diff --git a/packages/languages/en/package.json b/packages/languages/en/package.json index 7f00d135..79e99e33 100644 --- a/packages/languages/en/package.json +++ b/packages/languages/en/package.json @@ -1,8 +1,8 @@ { "name": "@zxcvbn-ts/language-en", "version": "4.0.0-beta.1", - "main": "dist/index.js", - "module": "dist/index.esm.js", + "main": "dist/index.cjs", + "module": "dist/index.mjs", "types": "dist/index.d.ts", "sideEffects": false, "description": "The English language package for zxcvbn-ts", @@ -27,7 +27,6 @@ "english" ], "dependencies": { - "@alttiri/base85": "^1.8.0", - "fflate": "^0.8.2" + "@zxcvbn-ts/dictionary-compression": "4.0.0-beta.1" } } diff --git a/packages/languages/es-es/package.json b/packages/languages/es-es/package.json index cfa43c09..ed46835c 100644 --- a/packages/languages/es-es/package.json +++ b/packages/languages/es-es/package.json @@ -1,8 +1,8 @@ { "name": "@zxcvbn-ts/language-es-es", "version": "4.0.0-beta.1", - "main": "dist/index.js", - "module": "dist/index.esm.js", + "main": "dist/index.cjs", + "module": "dist/index.mjs", "types": "dist/index.d.ts", "sideEffects": false, "description": "The European Spanish language package for zxcvbn-ts", @@ -28,7 +28,6 @@ "spain" ], "dependencies": { - "@alttiri/base85": "^1.8.0", - "fflate": "^0.8.2" + "@zxcvbn-ts/dictionary-compression": "4.0.0-beta.1" } } diff --git a/packages/languages/fi/package.json b/packages/languages/fi/package.json index aebd67f0..09286deb 100644 --- a/packages/languages/fi/package.json +++ b/packages/languages/fi/package.json @@ -1,8 +1,8 @@ { "name": "@zxcvbn-ts/language-fi", "version": "4.0.0-beta.1", - "main": "dist/index.js", - "module": "dist/index.esm.js", + "main": "dist/index.cjs", + "module": "dist/index.mjs", "types": "dist/index.d.ts", "sideEffects": false, "description": "The Finnish language package for zxcvbn-ts", @@ -27,7 +27,6 @@ "finnish" ], "dependencies": { - "@alttiri/base85": "^1.8.0", - "fflate": "^0.8.2" + "@zxcvbn-ts/dictionary-compression": "4.0.0-beta.1" } } diff --git a/packages/languages/fr/package.json b/packages/languages/fr/package.json index e6b9a13e..5e023af0 100644 --- a/packages/languages/fr/package.json +++ b/packages/languages/fr/package.json @@ -1,8 +1,8 @@ { "name": "@zxcvbn-ts/language-fr", "version": "4.0.0-beta.1", - "main": "dist/index.js", - "module": "dist/index.esm.js", + "main": "dist/index.cjs", + "module": "dist/index.mjs", "types": "dist/index.d.ts", "sideEffects": false, "description": "The French language package for zxcvbn-ts", @@ -27,7 +27,6 @@ "french" ], "dependencies": { - "@alttiri/base85": "^1.8.0", - "fflate": "^0.8.2" + "@zxcvbn-ts/dictionary-compression": "4.0.0-beta.1" } } diff --git a/packages/languages/id/package.json b/packages/languages/id/package.json index 6edd4bc7..cd2160ae 100644 --- a/packages/languages/id/package.json +++ b/packages/languages/id/package.json @@ -1,8 +1,8 @@ { "name": "@zxcvbn-ts/language-id", "version": "4.0.0-beta.1", - "main": "dist/index.js", - "module": "dist/index.esm.js", + "main": "dist/index.cjs", + "module": "dist/index.mjs", "types": "dist/index.d.ts", "sideEffects": false, "description": "The Indonesia language package for zxcvbn-ts", @@ -27,7 +27,6 @@ "indonesia" ], "dependencies": { - "@alttiri/base85": "^1.8.0", - "fflate": "^0.8.2" + "@zxcvbn-ts/dictionary-compression": "4.0.0-beta.1" } } diff --git a/packages/languages/it/package.json b/packages/languages/it/package.json index b667b957..4b539536 100644 --- a/packages/languages/it/package.json +++ b/packages/languages/it/package.json @@ -1,8 +1,8 @@ { "name": "@zxcvbn-ts/language-it", "version": "4.0.0-beta.1", - "main": "dist/index.js", - "module": "dist/index.esm.js", + "main": "dist/index.cjs", + "module": "dist/index.mjs", "types": "dist/index.d.ts", "sideEffects": false, "description": "The Italian language package for zxcvbn-ts", @@ -27,7 +27,6 @@ "italian" ], "dependencies": { - "@alttiri/base85": "^1.8.0", - "fflate": "^0.8.2" + "@zxcvbn-ts/dictionary-compression": "4.0.0-beta.1" } } diff --git a/packages/languages/ja/package.json b/packages/languages/ja/package.json index a65169ae..e1e7e445 100644 --- a/packages/languages/ja/package.json +++ b/packages/languages/ja/package.json @@ -1,8 +1,8 @@ { "name": "@zxcvbn-ts/language-ja", "version": "4.0.0-beta.1", - "main": "dist/index.js", - "module": "dist/index.esm.js", + "main": "dist/index.cjs", + "module": "dist/index.mjs", "types": "dist/index.d.ts", "sideEffects": false, "description": "The Japanese language package for zxcvbn-ts", @@ -27,7 +27,6 @@ "japanese" ], "dependencies": { - "@alttiri/base85": "^1.8.0", - "fflate": "^0.8.2" + "@zxcvbn-ts/dictionary-compression": "4.0.0-beta.1" } } diff --git a/packages/languages/nl-be/package.json b/packages/languages/nl-be/package.json index e2df178a..25e313b3 100644 --- a/packages/languages/nl-be/package.json +++ b/packages/languages/nl-be/package.json @@ -1,8 +1,8 @@ { "name": "@zxcvbn-ts/language-nl-be", "version": "4.0.0-beta.1", - "main": "dist/index.js", - "module": "dist/index.esm.js", + "main": "dist/index.cjs", + "module": "dist/index.mjs", "types": "dist/index.d.ts", "sideEffects": false, "description": "The Dutch Belgian language package for zxcvbn-ts", @@ -28,7 +28,6 @@ "belgium" ], "dependencies": { - "@alttiri/base85": "^1.8.0", - "fflate": "^0.8.2" + "@zxcvbn-ts/dictionary-compression": "4.0.0-beta.1" } } diff --git a/packages/languages/pl/package.json b/packages/languages/pl/package.json index 9f57e59b..9a833e79 100644 --- a/packages/languages/pl/package.json +++ b/packages/languages/pl/package.json @@ -1,8 +1,8 @@ { "name": "@zxcvbn-ts/language-pl", "version": "4.0.0-beta.1", - "main": "dist/index.js", - "module": "dist/index.esm.js", + "main": "dist/index.cjs", + "module": "dist/index.mjs", "types": "dist/index.d.ts", "sideEffects": false, "description": "The Polish language package for zxcvbn-ts", @@ -29,7 +29,6 @@ "pl" ], "dependencies": { - "@alttiri/base85": "^1.8.0", - "fflate": "^0.8.2" + "@zxcvbn-ts/dictionary-compression": "4.0.0-beta.1" } } diff --git a/packages/languages/pt-br/package.json b/packages/languages/pt-br/package.json index cdef4a6c..24f490bd 100644 --- a/packages/languages/pt-br/package.json +++ b/packages/languages/pt-br/package.json @@ -1,8 +1,8 @@ { "name": "@zxcvbn-ts/language-pt-br", "version": "4.0.0-beta.1", - "main": "dist/index.js", - "module": "dist/index.esm.js", + "main": "dist/index.cjs", + "module": "dist/index.mjs", "types": "dist/index.d.ts", "sideEffects": false, "description": "The Brazilian portuguese language package for zxcvbn-ts", @@ -31,7 +31,6 @@ "ptbr" ], "dependencies": { - "@alttiri/base85": "^1.8.0", - "fflate": "^0.8.2" + "@zxcvbn-ts/dictionary-compression": "4.0.0-beta.1" } } diff --git a/packages/libraries/dictionaryCompression/package.json b/packages/libraries/dictionaryCompression/package.json index d73cfc1e..a33a6b9e 100644 --- a/packages/libraries/dictionaryCompression/package.json +++ b/packages/libraries/dictionaryCompression/package.json @@ -1,9 +1,23 @@ { "name": "@zxcvbn-ts/dictionary-compression", "version": "4.0.0-beta.1", - "main": "dist/index.js", - "module": "dist/index.esm.js", + "main": "dist/index.cjs", + "module": "dist/index.mjs", "types": "dist/index.d.ts", + "type": "commonjs", + "exports": { + ".": { + "import": { + "types": "./dist/index.d.ts", + "default": "./dist/index.mjs" + }, + "require": { + "types": "./dist/index.d.ts", + "default": "./dist/index.cjs" + }, + "default": "./dist/index.cjs" + } + }, "description": "dictionary-compression helper for zxcvbn-ts language packages", "license": "MIT", "homepage": "https://github.com/zxcvbn-ts/zxcvbn", diff --git a/packages/libraries/main/package.json b/packages/libraries/main/package.json index f9bef688..f1f3e14f 100644 --- a/packages/libraries/main/package.json +++ b/packages/libraries/main/package.json @@ -1,8 +1,8 @@ { "name": "@zxcvbn-ts/core", "version": "4.0.0-beta.1", - "main": "dist/index.js", - "module": "dist/index.esm.js", + "main": "dist/index.cjs", + "module": "dist/index.mjs", "types": "dist/index.d.ts", "description": "Realistic password strength estimation written in typescript", "license": "MIT", diff --git a/packages/libraries/pwned/package.json b/packages/libraries/pwned/package.json index 94005a1c..677c9164 100644 --- a/packages/libraries/pwned/package.json +++ b/packages/libraries/pwned/package.json @@ -1,8 +1,8 @@ { "name": "@zxcvbn-ts/matcher-pwned", "version": "4.0.0-beta.1", - "main": "dist/index.js", - "module": "dist/index.esm.js", + "main": "dist/index.cjs", + "module": "dist/index.mjs", "types": "dist/index.d.ts", "description": "HaveIBeenPwned Matcher for zxcvbn-ts", "license": "MIT", diff --git a/scripts/jsonPlugin.mjs b/scripts/jsonPlugin.mjs index 341b0dce..690c69f9 100644 --- a/scripts/jsonPlugin.mjs +++ b/scripts/jsonPlugin.mjs @@ -1,6 +1,55 @@ import { compressSync, strToU8 } from 'fflate' import { encodeBase85 } from '@alttiri/base85' +const isCompactDoubleQuotedString = (string) => { + // eslint-disable-next-line no-control-regex + return !string.match(/[\x00-\x1f\u2028\u2029\\"]/) +} + +const compressWithPrefix = (parsed) => { + if (!Array.isArray(parsed)) { + return parsed + } + if ( + !parsed.every( + (entry) => + typeof entry === 'string' && isCompactDoubleQuotedString(entry), + ) + ) { + // Should be rare enough, so don't bother escape them. + return parsed + } + + const deltas = [] + let last = '' + parsed.forEach((entry) => { + let prefixLen = 0 + const maxPrefixLen = Math.min(entry.length, last.length, 25) + while ( + prefixLen < maxPrefixLen && + entry.charAt(prefixLen) === last.charAt(prefixLen) + ) { + prefixLen += 1 + } + deltas.push(String.fromCharCode(65 + prefixLen) + entry.slice(prefixLen)) + last = entry + }) + + return deltas +} + +function compress(data) { + const compressedWithPrefix = compressWithPrefix(data) + const compressedWithGzip = compressSync( + strToU8(compressedWithPrefix.join('')), + { + level: 9, + mem: 12, + }, + ) + + return encodeBase85(compressedWithGzip) +} const json = () => { return { name: 'json', @@ -15,22 +64,15 @@ const json = () => { const parsed = JSON.parse(json) let code if (Array.isArray(parsed)) { - const data = parsed.join(',') - const dataBuf = strToU8(data) - const compressed = compressSync(dataBuf, { level: 9, mem: 12 }) - const encoded = encodeBase85(compressed) + const encoded = compress(parsed) code = ` - import { decompressSync, strFromU8 } from 'fflate' - import { decodeBase85 } from '@alttiri/base85' - - const encoded = "${encoded}" +import { decompress } from '@zxcvbn-ts/dictionary-compression' - const decoded = decodeBase85(encoded) - const decompressedBuf = decompressSync(decoded) - const decompressed = strFromU8(decompressedBuf); - const decompressedArray = decompressed.split(',') - export default decompressedArray` +export default () => { + const encoded = "${encoded}" + return decompress(encoded) +}` } else { const data = JSON.stringify(parsed) code = `export default ${data}` diff --git a/scripts/rollup.config.mjs b/scripts/rollup.config.mjs index 81478081..e7d5c5a9 100644 --- a/scripts/rollup.config.mjs +++ b/scripts/rollup.config.mjs @@ -1,22 +1,12 @@ -import path from 'path' import babel from '@rollup/plugin-babel' import commonjs from '@rollup/plugin-commonjs' import typescript from '@rollup/plugin-typescript' import del from 'rollup-plugin-delete' -import nodeResolve from '@rollup/plugin-node-resolve' import terser from '@rollup/plugin-terser' -import fs from 'fs' import json from './jsonPlugin.mjs' -const packagePath = process.cwd() - let generateCounter = 0 const generateConfig = async (type, minify = false) => { - const pkgString = fs.readFileSync( - path.join(packagePath, 'package.json'), - 'utf-8', - ) - const pkg = JSON.parse(pkgString) let typescriptOptions = { declaration: false, } @@ -25,10 +15,10 @@ const generateConfig = async (type, minify = false) => { const output = { dir: 'dist/', format: type, - entryFileNames: '[name].js', - assetFileNames: '[name].js', + entryFileNames: '[name].cjs', + assetFileNames: '[name].cjs', sourcemap: true, - preserveModules: type !== 'iife', + preserveModules: true, } if (type === 'esm') { typescriptOptions = { @@ -37,8 +27,8 @@ const generateConfig = async (type, minify = false) => { rootDir: 'src/', exclude: ['test/**/*', 'dist/**/*'], } - output.entryFileNames = '[name].esm.js' - output.assetFileNames = '[name].esm.js' + output.entryFileNames = '[name].mjs' + output.assetFileNames = '[name].mjs' output.exports = 'named' babelrc = false } @@ -46,18 +36,6 @@ const generateConfig = async (type, minify = false) => { output.exports = 'auto' } - if (type === 'iife') { - output.name = pkg.name.replace('@', '').replace('-', '').replace('/', '.') - - if (minify) { - output.entryFileNames = 'zxcvbn-ts.min.js' - output.assetFileNames = 'zxcvbn-ts.min.js' - } else { - output.entryFileNames = 'zxcvbn-ts.js' - output.assetFileNames = 'zxcvbn-ts.js' - } - } - const pluginsOnlyOnce = [] if (generateCounter === 0) { pluginsOnlyOnce.push( @@ -69,15 +47,7 @@ const generateConfig = async (type, minify = false) => { generateCounter += 1 } - if (type === 'iife') { - pluginsOnlyOnce.push( - nodeResolve({ - resolveOnly: ['fastest-levenshtein', '@alttiri/base85', 'fflate'], - }), - ) - } else { - external.push('fastest-levenshtein', '@alttiri/base85', 'fflate') - } + external.push('fastest-levenshtein', '@alttiri/base85', 'fflate') return { input: ['./src/index.ts'], @@ -98,9 +68,4 @@ const generateConfig = async (type, minify = false) => { } } -export default Promise.all([ - generateConfig('esm'), - generateConfig('cjs'), - generateConfig('iife'), - generateConfig('iife', true), // cdn build -]) +export default Promise.all([generateConfig('esm'), generateConfig('cjs')]) diff --git a/yarn.lock b/yarn.lock index 6460d897..aede8e33 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2,6 +2,11 @@ # yarn lockfile v1 +"@alttiri/base85@1.8.0": + version "1.8.0" + resolved "https://registry.yarnpkg.com/@alttiri/base85/-/base85-1.8.0.tgz#9a859a9b9bd1847173260e37b58d6fc6c8fd50ce" + integrity sha512-HrfdFtOPJ2dlZjHcCDgd9o4ph9+iQnZ+ayWNALImDm1VLv46aMriO13QZ0bpZuvDc8XbPcQK2rb4o38Xt+MMpA== + "@ampproject/remapping@^2.2.0": version "2.3.0" resolved "https://registry.yarnpkg.com/@ampproject/remapping/-/remapping-2.3.0.tgz#ed441b6fa600072520ce18b43d2c8cc8caecc7f4"