From 3442ceb00e5b46b2f6a25d66f2cdcde615a8f0cf Mon Sep 17 00:00:00 2001 From: Ben Gubler Date: Fri, 20 Jan 2023 21:43:51 -0700 Subject: [PATCH] Switch build process to use microbundle (#209) --- .eslintignore | 5 + .eslintrc.json | 17 +- .prettierrc | 5 - LICENSE | 2 +- deno_dist/LICENSE | 2 +- deno_dist/file-utils.ts | 4 +- deno_dist/parse.ts | 2 +- deno_dist/utils.ts | 2 +- package-lock.json | 4906 ++++++++++++++++++++++++++------ package.json | 62 +- rollup.config.ts | 68 - src/browser.ts | 12 +- src/compile-string.ts | 74 +- src/compile.ts | 38 +- src/config.ts | 102 +- src/containers.ts | 8 +- src/err.ts | 38 +- src/file-handlers.ts | 130 +- src/file-helpers.ts | 10 +- src/file-methods.ts | 6 +- src/file-utils.ts | 78 +- src/index.ts | 22 +- src/parse.ts | 152 +- src/polyfills.ts | 18 +- src/render.ts | 58 +- src/storage.ts | 14 +- src/utils.ts | 84 +- test/async.spec.ts | 74 +- test/compile-string.spec.ts | 56 +- test/compile.spec.ts | 48 +- test/config.spec.ts | 86 +- test/deno/basic.spec.ts | 12 +- test/deno/config.spec.ts | 28 +- test/deno/file-helpers.spec.ts | 74 +- test/deno/helpers.spec.ts | 20 +- test/err.spec.ts | 34 +- test/file-handlers.spec.ts | 176 +- test/file-helpers.spec.ts | 62 +- test/file-utils.spec.ts | 52 +- test/helpers.spec.ts | 22 +- test/layouts.spec.ts | 50 +- test/parse.spec.ts | 171 +- test/plugins.spec.ts | 32 +- test/render.spec.ts | 158 +- test/storage.spec.ts | 48 +- test/utils.spec.ts | 110 +- tsconfig.eslint.json | 18 - tsconfig.json | 23 +- 48 files changed, 5136 insertions(+), 2137 deletions(-) create mode 100644 .eslintignore delete mode 100644 .prettierrc delete mode 100644 rollup.config.ts delete mode 100644 tsconfig.eslint.json diff --git a/.eslintignore b/.eslintignore new file mode 100644 index 00000000..0d77edab --- /dev/null +++ b/.eslintignore @@ -0,0 +1,5 @@ +node_modules +typings +dist +deno_dist +src/*.deno.ts diff --git a/.eslintrc.json b/.eslintrc.json index e3044abb..cad7be4e 100644 --- a/.eslintrc.json +++ b/.eslintrc.json @@ -1,3 +1,18 @@ { - "extends": ["eta-dev"] + "env": { + "browser": true, + "es2021": true, + "node": true + }, + "extends": ["eslint:recommended", "plugin:@typescript-eslint/recommended", "prettier"], + "overrides": [], + "parserOptions": { + "ecmaVersion": "latest", + "sourceType": "module" + }, + "rules": { + "@typescript-eslint/no-var-requires": 0, + "@typescript-eslint/no-explicit-any": 1, + "@typescript-eslint/ban-types": 0 + } } diff --git a/.prettierrc b/.prettierrc deleted file mode 100644 index 49955e2e..00000000 --- a/.prettierrc +++ /dev/null @@ -1,5 +0,0 @@ -{ - "semi": false, - "singleQuote": true, - "trailingComma": "none" -} diff --git a/LICENSE b/LICENSE index e30a7e49..c6734d93 100644 --- a/LICENSE +++ b/LICENSE @@ -1,4 +1,4 @@ -Copyright 2019 Ben Gubler +Copyright 2023 Ben Gubler Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: diff --git a/deno_dist/LICENSE b/deno_dist/LICENSE index e30a7e49..c6734d93 100644 --- a/deno_dist/LICENSE +++ b/deno_dist/LICENSE @@ -1,4 +1,4 @@ -Copyright 2019 Ben Gubler +Copyright 2023 Ben Gubler Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: diff --git a/deno_dist/file-utils.ts b/deno_dist/file-utils.ts index f0015882..cd943f46 100644 --- a/deno_dist/file-utils.ts +++ b/deno_dist/file-utils.ts @@ -56,7 +56,7 @@ function getWholeFilePath( function getPath(path: string, options: EtaConfig): string { let includePath: string | false = false; const views = options.views; - let searchedPaths: Array = []; + const searchedPaths: Array = []; // If these four values are the same, // getPath() will return the same result every time. @@ -111,7 +111,7 @@ function getPath(path: string, options: EtaConfig): string { ) { // If the above returned true, we know that the filePath was just set to a path // That exists (Array.some() returns as soon as it finds a valid element) - return (filePath as unknown) as string; + return filePath as unknown as string; } else if (typeof views === "string") { // Search for the file if views is a single directory filePath = getWholeFilePath(path, views, true); diff --git a/deno_dist/parse.ts b/deno_dist/parse.ts index 442630cf..451fac04 100644 --- a/deno_dist/parse.ts +++ b/deno_dist/parse.ts @@ -133,7 +133,7 @@ export default function parse( while ((closeTag = parseCloseReg.exec(str))) { if (closeTag[1]) { - let content = str.slice(lastIndex, closeTag.index); + const content = str.slice(lastIndex, closeTag.index); parseOpenReg.lastIndex = lastIndex = parseCloseReg.lastIndex; diff --git a/deno_dist/utils.ts b/deno_dist/utils.ts index 9e08b437..680c55fe 100644 --- a/deno_dist/utils.ts +++ b/deno_dist/utils.ts @@ -24,7 +24,7 @@ export function hasOwnProp(obj: object, prop: string): boolean { export function copyProps(toObj: T, fromObj: T): T { for (const key in fromObj) { - if (hasOwnProp((fromObj as unknown) as object, key)) { + if (hasOwnProp(fromObj as unknown as object, key)) { toObj[key] = fromObj[key]; } } diff --git a/package-lock.json b/package-lock.json index 361f97b5..e410328d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -11,35 +11,28 @@ "devDependencies": { "@commitlint/cli": "^9.1.2", "@commitlint/config-conventional": "^17.3.0", - "@rollup/plugin-commonjs": "^15.1.0", - "@rollup/plugin-node-resolve": "^9.0.0", "@size-limit/preset-small-lib": "^8.1.0", "@types/jest": "^26.0.13", "@types/node": "^14.11.1", - "@typescript-eslint/eslint-plugin": "5", - "@typescript-eslint/parser": "^5.46.1", + "@typescript-eslint/eslint-plugin": "^5.48.2", + "@typescript-eslint/parser": "^5.48.2", "commitizen": "^4.2.1", "coveralls": "^3.1.0", "cross-env": "^7.0.2", "cz-conventional-changelog": "^3.3.0", - "denoify": "^0.6.3", - "eslint": "^8.29.0", - "eslint-config-eta-dev": "^1.0.0", - "eslint-config-prettier": "^8.5.0", - "eslint-plugin-import": "2", - "eslint-plugin-node": "11", - "eslint-plugin-promise": "4", - "eslint-plugin-standard": "4", + "denoify": "^1.4.5", + "eslint": "^8.32.0", + "eslint-config-prettier": "^8.6.0", + "eslint-plugin-import": "^2.27.5", + "eslint-plugin-n": "^15.6.1", + "eslint-plugin-promise": "^6.1.1", "husky": "^4.3.0", "jest": "^29.3.1", "lint-staged": "^10.3.0", + "microbundle": "^0.15.1", "np": "^6.5.0", - "prettier": "2.1.1", + "prettier": "^2.8.3", "rimraf": "^3.0.2", - "rollup": "^2.26.11", - "rollup-plugin-prettier": "^2.1.0", - "rollup-plugin-terser": "^7.0.2", - "rollup-plugin-typescript2": "^0.27.2", "shelljs": "^0.8.4", "size-limit": "^8.1.0", "travis-deploy-once": "^5.0.11", @@ -967,6 +960,21 @@ "@babel/core": "^7.0.0-0" } }, + "node_modules/@babel/plugin-syntax-flow": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.18.6.tgz", + "integrity": "sha512-LUbR+KNTBWCUAqRG9ex5Gnzu2IOkt8jRJbHHXFT9q+L9zm7M/QQbEqXyw1n1pohYvOyWC8CjeyjrSaIwiYjK7A==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, "node_modules/@babel/plugin-syntax-import-assertions": { "version": "7.20.0", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.20.0.tgz", @@ -1309,6 +1317,22 @@ "@babel/core": "^7.0.0-0" } }, + "node_modules/@babel/plugin-transform-flow-strip-types": { + "version": "7.19.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.19.0.tgz", + "integrity": "sha512-sgeMlNaQVbCSpgLSKP4ZZKfsJVnFnNQlUSk6gPYzR/q7tzCgQF2t8RBKAP6cKJeZdveei7Q7Jm527xepI8lNLg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.19.0", + "@babel/plugin-syntax-flow": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, "node_modules/@babel/plugin-transform-for-of": { "version": "7.18.8", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.18.8.tgz", @@ -1515,6 +1539,71 @@ "@babel/core": "^7.0.0-0" } }, + "node_modules/@babel/plugin-transform-react-display-name": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.18.6.tgz", + "integrity": "sha512-TV4sQ+T013n61uMoygyMRm+xf04Bd5oqFpv2jAEQwSZ8NwQA7zeRPg1LMVg2PWi3zWBz+CLKD+v5bcpZ/BS0aA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx": { + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.20.7.tgz", + "integrity": "sha512-Tfq7qqD+tRj3EoDhY00nn2uP2hsRxgYGi5mLQ5TimKav0a9Lrpd4deE+fcLXU8zFYRjlKPHZhpCvfEA6qnBxqQ==", + "dev": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.18.6", + "@babel/helper-module-imports": "^7.18.6", + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/plugin-syntax-jsx": "^7.18.6", + "@babel/types": "^7.20.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx-development": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.18.6.tgz", + "integrity": "sha512-SA6HEjwYFKF7WDjWcMcMGUimmw/nhNRDWxr+KaLSCrkD/LMDBvWRmHAYgE1HDeF8KUuI8OAu+RT6EOtKxSW2qA==", + "dev": true, + "dependencies": { + "@babel/plugin-transform-react-jsx": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-pure-annotations": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.18.6.tgz", + "integrity": "sha512-I8VfEPg9r2TRDdvnHgPepTKvuRomzA8+u+nhY7qSI1fR2hRNebasZEETLyM5mAUr0Ku56OkXJ0I7NHJnO6cJiQ==", + "dev": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, "node_modules/@babel/plugin-transform-regenerator": { "version": "7.20.5", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.20.5.tgz", @@ -1770,6 +1859,23 @@ "semver": "bin/semver.js" } }, + "node_modules/@babel/preset-flow": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/preset-flow/-/preset-flow-7.18.6.tgz", + "integrity": "sha512-E7BDhL64W6OUqpuyHnSroLnqyRTcG6ZdOBl1OKI/QK/HJfplqK/S3sq1Cckx7oTodJ5yOXyfw7rEADJ6UjoQDQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/helper-validator-option": "^7.18.6", + "@babel/plugin-transform-flow-strip-types": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, "node_modules/@babel/preset-modules": { "version": "0.1.5", "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.5.tgz", @@ -1786,6 +1892,26 @@ "@babel/core": "^7.0.0-0" } }, + "node_modules/@babel/preset-react": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.18.6.tgz", + "integrity": "sha512-zXr6atUmyYdiWRVLOZahakYmOBHtWc2WGCkP8PYTgZi0iJXDY2CN180TdrIW4OGOAdLc7TifzDIvtx6izaRIzg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/helper-validator-option": "^7.18.6", + "@babel/plugin-transform-react-display-name": "^7.18.6", + "@babel/plugin-transform-react-jsx": "^7.18.6", + "@babel/plugin-transform-react-jsx-development": "^7.18.6", + "@babel/plugin-transform-react-pure-annotations": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, "node_modules/@babel/register": { "version": "7.18.9", "resolved": "https://registry.npmjs.org/@babel/register/-/register-7.18.9.tgz", @@ -1981,9 +2107,9 @@ } }, "node_modules/@babel/types": { - "version": "7.20.5", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.20.5.tgz", - "integrity": "sha512-c9fst/h2/dcF7H+MJKZ2T0KjEQ8hY/BNnDk/H3XY8C4Aw/eWQXWn/lWntHF9ooUBnGmEvbfGrTgLWc+um0YDUg==", + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.20.7.tgz", + "integrity": "sha512-69OnhBxSSgK0OzTJai4kyPDiKTIe3j+ctaHdIGVbRahTLAT7L3R9oeXHC2aVSuGYt3cVnoAMDmOCgJ2yaiLMvg==", "dev": true, "dependencies": { "@babel/helper-string-parser": "^7.19.4", @@ -2270,9 +2396,9 @@ } }, "node_modules/@eslint/eslintrc": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.4.0.tgz", - "integrity": "sha512-7yfvXy6MWLgWSFsLhz5yH3iQ52St8cdUY6FoGieKkRDVxuxmrNuUetIuu6cmjNWwniUHiWXjxCr5tTXDrbYS5A==", + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.4.1.tgz", + "integrity": "sha512-XXrH9Uarn0stsyldqDYq8r++mROmWRI1xKMXa640Bb//SY1+ECYX6VzT6Lcx5frD0V30XieqJ0oX9I2Xj5aoMA==", "dev": true, "dependencies": { "ajv": "^6.12.4", @@ -2925,10 +3051,48 @@ "@octokit/openapi-types": "^12.11.0" } }, + "node_modules/@rollup/plugin-alias": { + "version": "3.1.9", + "resolved": "https://registry.npmjs.org/@rollup/plugin-alias/-/plugin-alias-3.1.9.tgz", + "integrity": "sha512-QI5fsEvm9bDzt32k39wpOwZhVzRcL5ydcffUHMyLVaVaLeC70I8TJZ17F1z1eMoLu4E/UOcH9BWVkKpIKdrfiw==", + "dev": true, + "dependencies": { + "slash": "^3.0.0" + }, + "engines": { + "node": ">=8.0.0" + }, + "peerDependencies": { + "rollup": "^1.20.0||^2.0.0" + } + }, + "node_modules/@rollup/plugin-babel": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/@rollup/plugin-babel/-/plugin-babel-5.3.1.tgz", + "integrity": "sha512-WFfdLWU/xVWKeRQnKmIAQULUI7Il0gZnBIH/ZFO069wYIfPu+8zrfp/KMW0atmELoRDq8FbiP3VCss9MhCut7Q==", + "dev": true, + "dependencies": { + "@babel/helper-module-imports": "^7.10.4", + "@rollup/pluginutils": "^3.1.0" + }, + "engines": { + "node": ">= 10.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0", + "@types/babel__core": "^7.1.9", + "rollup": "^1.20.0||^2.0.0" + }, + "peerDependenciesMeta": { + "@types/babel__core": { + "optional": true + } + } + }, "node_modules/@rollup/plugin-commonjs": { - "version": "15.1.0", - "resolved": "https://registry.npmjs.org/@rollup/plugin-commonjs/-/plugin-commonjs-15.1.0.tgz", - "integrity": "sha512-xCQqz4z/o0h2syQ7d9LskIMvBSH4PX5PjYdpSSvgS+pQik3WahkQVNWg3D8XJeYjZoVWnIUQYDghuEMRGrmQYQ==", + "version": "17.1.0", + "resolved": "https://registry.npmjs.org/@rollup/plugin-commonjs/-/plugin-commonjs-17.1.0.tgz", + "integrity": "sha512-PoMdXCw0ZyvjpCMT5aV4nkL0QywxP29sODQsSGeDpr/oI49Qq9tRtAsb/LbYbDzFlOydVEqHmmZWFtXJEAX9ew==", "dev": true, "dependencies": { "@rollup/pluginutils": "^3.1.0", @@ -2943,13 +3107,25 @@ "node": ">= 8.0.0" }, "peerDependencies": { - "rollup": "^2.22.0" + "rollup": "^2.30.0" + } + }, + "node_modules/@rollup/plugin-json": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/@rollup/plugin-json/-/plugin-json-4.1.0.tgz", + "integrity": "sha512-yfLbTdNS6amI/2OpmbiBoW12vngr5NW2jCJVZSBEz+H5KfUJZ2M7sDjk0U6GOOdCWFVScShte29o9NezJ53TPw==", + "dev": true, + "dependencies": { + "@rollup/pluginutils": "^3.0.8" + }, + "peerDependencies": { + "rollup": "^1.20.0 || ^2.0.0" } }, "node_modules/@rollup/plugin-node-resolve": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-9.0.0.tgz", - "integrity": "sha512-gPz+utFHLRrd41WMP13Jq5mqqzHL3OXrfj3/MkSyB6UBIcuNt9j60GCbarzMzdf1VHFpOxfQh/ez7wyadLMqkg==", + "version": "11.2.1", + "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-11.2.1.tgz", + "integrity": "sha512-yc2n43jcqVyGE2sqV5/YCmocy9ArjVAP/BeXyTtADTBBX6V0e5UMqwO8CdQ0kzjb6zu5P1qMzsScCMRvE9OlVg==", "dev": true, "dependencies": { "@rollup/pluginutils": "^3.1.0", @@ -2957,7 +3133,7 @@ "builtin-modules": "^3.1.0", "deepmerge": "^4.2.2", "is-module": "^1.0.0", - "resolve": "^1.17.0" + "resolve": "^1.19.0" }, "engines": { "node": ">= 10.0.0" @@ -3113,6 +3289,18 @@ "size-limit": "8.1.0" } }, + "node_modules/@surma/rollup-plugin-off-main-thread": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/@surma/rollup-plugin-off-main-thread/-/rollup-plugin-off-main-thread-2.2.3.tgz", + "integrity": "sha512-lR8q/9W7hZpMWweNiAKU7NQerBnzQQLvi8qnTDU/fxItPhtZVMbPV3lbCwjhIlNBe9Bbr5V+KHshvWmVSG9cxQ==", + "dev": true, + "dependencies": { + "ejs": "^3.1.6", + "json5": "^2.2.0", + "magic-string": "^0.25.0", + "string.prototype.matchall": "^4.0.6" + } + }, "node_modules/@szmarczak/http-timer": { "version": "4.0.6", "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-4.0.6.tgz", @@ -3125,6 +3313,15 @@ "node": ">=10" } }, + "node_modules/@trysound/sax": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/@trysound/sax/-/sax-0.2.0.tgz", + "integrity": "sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==", + "dev": true, + "engines": { + "node": ">=10.13.0" + } + }, "node_modules/@tsconfig/node10": { "version": "1.0.9", "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.9.tgz", @@ -3376,14 +3573,14 @@ "dev": true }, "node_modules/@typescript-eslint/eslint-plugin": { - "version": "5.46.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.46.1.tgz", - "integrity": "sha512-YpzNv3aayRBwjs4J3oz65eVLXc9xx0PDbIRisHj+dYhvBn02MjYOD96P8YGiWEIFBrojaUjxvkaUpakD82phsA==", + "version": "5.48.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.48.2.tgz", + "integrity": "sha512-sR0Gja9Ky1teIq4qJOl0nC+Tk64/uYdX+mi+5iB//MH8gwyx8e3SOyhEzeLZEFEEfCaLf8KJq+Bd/6je1t+CAg==", "dev": true, "dependencies": { - "@typescript-eslint/scope-manager": "5.46.1", - "@typescript-eslint/type-utils": "5.46.1", - "@typescript-eslint/utils": "5.46.1", + "@typescript-eslint/scope-manager": "5.48.2", + "@typescript-eslint/type-utils": "5.48.2", + "@typescript-eslint/utils": "5.48.2", "debug": "^4.3.4", "ignore": "^5.2.0", "natural-compare-lite": "^1.4.0", @@ -3424,14 +3621,14 @@ } }, "node_modules/@typescript-eslint/parser": { - "version": "5.46.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.46.1.tgz", - "integrity": "sha512-RelQ5cGypPh4ySAtfIMBzBGyrNerQcmfA1oJvPj5f+H4jI59rl9xxpn4bonC0tQvUKOEN7eGBFWxFLK3Xepneg==", + "version": "5.48.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.48.2.tgz", + "integrity": "sha512-38zMsKsG2sIuM5Oi/olurGwYJXzmtdsHhn5mI/pQogP+BjYVkK5iRazCQ8RGS0V+YLk282uWElN70zAAUmaYHw==", "dev": true, "dependencies": { - "@typescript-eslint/scope-manager": "5.46.1", - "@typescript-eslint/types": "5.46.1", - "@typescript-eslint/typescript-estree": "5.46.1", + "@typescript-eslint/scope-manager": "5.48.2", + "@typescript-eslint/types": "5.48.2", + "@typescript-eslint/typescript-estree": "5.48.2", "debug": "^4.3.4" }, "engines": { @@ -3451,13 +3648,13 @@ } }, "node_modules/@typescript-eslint/scope-manager": { - "version": "5.46.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.46.1.tgz", - "integrity": "sha512-iOChVivo4jpwUdrJZyXSMrEIM/PvsbbDOX1y3UCKjSgWn+W89skxWaYXACQfxmIGhPVpRWK/VWPYc+bad6smIA==", + "version": "5.48.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.48.2.tgz", + "integrity": "sha512-zEUFfonQid5KRDKoI3O+uP1GnrFd4tIHlvs+sTJXiWuypUWMuDaottkJuR612wQfOkjYbsaskSIURV9xo4f+Fw==", "dev": true, "dependencies": { - "@typescript-eslint/types": "5.46.1", - "@typescript-eslint/visitor-keys": "5.46.1" + "@typescript-eslint/types": "5.48.2", + "@typescript-eslint/visitor-keys": "5.48.2" }, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" @@ -3468,13 +3665,13 @@ } }, "node_modules/@typescript-eslint/type-utils": { - "version": "5.46.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.46.1.tgz", - "integrity": "sha512-V/zMyfI+jDmL1ADxfDxjZ0EMbtiVqj8LUGPAGyBkXXStWmCUErMpW873zEHsyguWCuq2iN4BrlWUkmuVj84yng==", + "version": "5.48.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.48.2.tgz", + "integrity": "sha512-QVWx7J5sPMRiOMJp5dYshPxABRoZV1xbRirqSk8yuIIsu0nvMTZesKErEA3Oix1k+uvsk8Cs8TGJ6kQ0ndAcew==", "dev": true, "dependencies": { - "@typescript-eslint/typescript-estree": "5.46.1", - "@typescript-eslint/utils": "5.46.1", + "@typescript-eslint/typescript-estree": "5.48.2", + "@typescript-eslint/utils": "5.48.2", "debug": "^4.3.4", "tsutils": "^3.21.0" }, @@ -3495,9 +3692,9 @@ } }, "node_modules/@typescript-eslint/types": { - "version": "5.46.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.46.1.tgz", - "integrity": "sha512-Z5pvlCaZgU+93ryiYUwGwLl9AQVB/PQ1TsJ9NZ/gHzZjN7g9IAn6RSDkpCV8hqTwAiaj6fmCcKSQeBPlIpW28w==", + "version": "5.48.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.48.2.tgz", + "integrity": "sha512-hE7dA77xxu7ByBc6KCzikgfRyBCTst6dZQpwaTy25iMYOnbNljDT4hjhrGEJJ0QoMjrfqrx+j1l1B9/LtKeuqA==", "dev": true, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" @@ -3508,13 +3705,13 @@ } }, "node_modules/@typescript-eslint/typescript-estree": { - "version": "5.46.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.46.1.tgz", - "integrity": "sha512-j9W4t67QiNp90kh5Nbr1w92wzt+toiIsaVPnEblB2Ih2U9fqBTyqV9T3pYWZBRt6QoMh/zVWP59EpuCjc4VRBg==", + "version": "5.48.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.48.2.tgz", + "integrity": "sha512-bibvD3z6ilnoVxUBFEgkO0k0aFvUc4Cttt0dAreEr+nrAHhWzkO83PEVVuieK3DqcgL6VAK5dkzK8XUVja5Zcg==", "dev": true, "dependencies": { - "@typescript-eslint/types": "5.46.1", - "@typescript-eslint/visitor-keys": "5.46.1", + "@typescript-eslint/types": "5.48.2", + "@typescript-eslint/visitor-keys": "5.48.2", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", @@ -3550,16 +3747,16 @@ } }, "node_modules/@typescript-eslint/utils": { - "version": "5.46.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.46.1.tgz", - "integrity": "sha512-RBdBAGv3oEpFojaCYT4Ghn4775pdjvwfDOfQ2P6qzNVgQOVrnSPe5/Pb88kv7xzYQjoio0eKHKB9GJ16ieSxvA==", + "version": "5.48.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.48.2.tgz", + "integrity": "sha512-2h18c0d7jgkw6tdKTlNaM7wyopbLRBiit8oAxoP89YnuBOzCZ8g8aBCaCqq7h208qUTroL7Whgzam7UY3HVLow==", "dev": true, "dependencies": { "@types/json-schema": "^7.0.9", "@types/semver": "^7.3.12", - "@typescript-eslint/scope-manager": "5.46.1", - "@typescript-eslint/types": "5.46.1", - "@typescript-eslint/typescript-estree": "5.46.1", + "@typescript-eslint/scope-manager": "5.48.2", + "@typescript-eslint/types": "5.48.2", + "@typescript-eslint/typescript-estree": "5.48.2", "eslint-scope": "^5.1.1", "eslint-utils": "^3.0.0", "semver": "^7.3.7" @@ -3591,12 +3788,12 @@ } }, "node_modules/@typescript-eslint/visitor-keys": { - "version": "5.46.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.46.1.tgz", - "integrity": "sha512-jczZ9noovXwy59KjRTk1OftT78pwygdcmCuBf8yMoWt/8O8l+6x2LSEze0E4TeepXK4MezW3zGSyoDRZK7Y9cg==", + "version": "5.48.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.48.2.tgz", + "integrity": "sha512-z9njZLSkwmjFWUelGEwEbdf4NwKvfHxvGC0OcGN1Hp/XNDIcJ7D5DpPNPv6x6/mFvc1tQHsaWmpD/a4gOvvCJQ==", "dev": true, "dependencies": { - "@typescript-eslint/types": "5.46.1", + "@typescript-eslint/types": "5.48.2", "eslint-visitor-keys": "^3.3.0" }, "engines": { @@ -3853,6 +4050,24 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/array.prototype.flatmap": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.1.tgz", + "integrity": "sha512-8UGn9O1FDVvMNB0UlLv4voxRMze7+FpHyF5mSMRjWHUMlpoDViniy05870VlxhfgTnLbpuwTzvD76MTtWxB/mQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4", + "es-shim-unscopables": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/arrify": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", @@ -3889,6 +4104,12 @@ "node": ">=8" } }, + "node_modules/async": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.4.tgz", + "integrity": "sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==", + "dev": true + }, "node_modules/async-exit-hook": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/async-exit-hook/-/async-exit-hook-2.0.1.tgz", @@ -3904,6 +4125,12 @@ "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", "dev": true }, + "node_modules/asyncro": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/asyncro/-/asyncro-3.0.0.tgz", + "integrity": "sha512-nEnWYfrBmA3taTiuiOoZYmgJ/CNrSoQLeLs29SeLcPu60yaw/mHDBHV0iOZ051fTvsTHxpCY+gXibqT9wbQYfg==", + "dev": true + }, "node_modules/at-least-node": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", @@ -3913,6 +4140,39 @@ "node": ">= 4.0.0" } }, + "node_modules/autoprefixer": { + "version": "10.4.13", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.13.tgz", + "integrity": "sha512-49vKpMqcZYsJjwotvt4+h/BCjJVnhGwcLpDt5xkcaOG3eLrG/HUYLagrihYsQ+qrIBgIzX1Rw7a6L8I/ZA1Atg==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/autoprefixer" + } + ], + "dependencies": { + "browserslist": "^4.21.4", + "caniuse-lite": "^1.0.30001426", + "fraction.js": "^4.2.0", + "normalize-range": "^0.1.2", + "picocolors": "^1.0.0", + "postcss-value-parser": "^4.2.0" + }, + "bin": { + "autoprefixer": "bin/autoprefixer" + }, + "engines": { + "node": "^10 || ^12 || >=14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, "node_modules/aws-sign2": { "version": "0.7.0", "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", @@ -3980,6 +4240,37 @@ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, + "node_modules/babel-plugin-macros": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/babel-plugin-macros/-/babel-plugin-macros-3.1.0.tgz", + "integrity": "sha512-Cg7TFGpIr01vOQNODXOOaGz2NpCU5gl8x1qJFbb6hbZxR7XrcE2vtbAsTAbJ7/xwJtUuJEw8K8Zr/AE0LHlesg==", + "dev": true, + "dependencies": { + "@babel/runtime": "^7.12.5", + "cosmiconfig": "^7.0.0", + "resolve": "^1.19.0" + }, + "engines": { + "node": ">=10", + "npm": ">=6" + } + }, + "node_modules/babel-plugin-macros/node_modules/cosmiconfig": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.1.0.tgz", + "integrity": "sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==", + "dev": true, + "dependencies": { + "@types/parse-json": "^4.0.0", + "import-fresh": "^3.2.1", + "parse-json": "^5.0.0", + "path-type": "^4.0.0", + "yaml": "^1.10.0" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/babel-plugin-polyfill-corejs2": { "version": "0.3.3", "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.3.tgz", @@ -4028,6 +4319,24 @@ "@babel/core": "^7.0.0-0" } }, + "node_modules/babel-plugin-transform-async-to-promises": { + "version": "0.8.18", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-async-to-promises/-/babel-plugin-transform-async-to-promises-0.8.18.tgz", + "integrity": "sha512-WpOrF76nUHijnNn10eBGOHZmXQC8JYRME9rOLxStOga7Av2VO53ehVFvVNImMksVtQuL2/7ZNxEgxnx7oo/3Hw==", + "dev": true + }, + "node_modules/babel-plugin-transform-replace-expressions": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-replace-expressions/-/babel-plugin-transform-replace-expressions-0.2.0.tgz", + "integrity": "sha512-Eh1rRd9hWEYgkgoA3D0kGp7xJ/wgVshgsqmq60iC4HVWD+Lux+fNHSHBa2v1Hsv+dHflShC71qKhiH40OiPtDA==", + "dev": true, + "dependencies": { + "@babel/parser": "^7.3.3" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, "node_modules/babel-preset-current-node-syntax": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz", @@ -4128,6 +4437,12 @@ "readable-stream": "^3.4.0" } }, + "node_modules/boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", + "dev": true + }, "node_modules/boxen": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/boxen/-/boxen-4.2.0.tgz", @@ -4194,6 +4509,18 @@ "node": ">=8" } }, + "node_modules/brotli-size": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/brotli-size/-/brotli-size-4.0.0.tgz", + "integrity": "sha512-uA9fOtlTRC0iqKfzff1W34DXUA3GyVqbUaeo3Rw3d4gd1eavKVCETXrn3NzO74W+UVkG3UHu8WxUi+XvKI/huA==", + "dev": true, + "dependencies": { + "duplexer": "0.1.1" + }, + "engines": { + "node": ">= 10.16.0" + } + }, "node_modules/browserslist": { "version": "4.21.4", "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.4.tgz", @@ -4403,6 +4730,18 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/caniuse-api": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-3.0.0.tgz", + "integrity": "sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==", + "dev": true, + "dependencies": { + "browserslist": "^4.0.0", + "caniuse-lite": "^1.0.0", + "lodash.memoize": "^4.1.2", + "lodash.uniq": "^4.5.0" + } + }, "node_modules/caniuse-lite": { "version": "1.0.30001439", "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001439.tgz", @@ -4719,6 +5058,12 @@ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, + "node_modules/colord": { + "version": "2.9.3", + "resolved": "https://registry.npmjs.org/colord/-/colord-2.9.3.tgz", + "integrity": "sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw==", + "dev": true + }, "node_modules/colorette": { "version": "2.0.19", "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.19.tgz", @@ -4855,6 +5200,15 @@ "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", "dev": true }, + "node_modules/concat-with-sourcemaps": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/concat-with-sourcemaps/-/concat-with-sourcemaps-1.1.0.tgz", + "integrity": "sha512-4gEjHJFT9e+2W/77h/DS5SGUgwDaOwprX8L/gl5+3ixnzkVJJsZWDSelmN3Oilw3LNDZjZV0yqH1hLG3k6nghg==", + "dev": true, + "dependencies": { + "source-map": "^0.6.1" + } + }, "node_modules/configstore": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/configstore/-/configstore-5.0.1.tgz", @@ -5067,10 +5421,163 @@ "node": ">=8" } }, - "node_modules/cz-conventional-changelog": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/cz-conventional-changelog/-/cz-conventional-changelog-3.3.0.tgz", - "integrity": "sha512-U466fIzU5U22eES5lTNiNbZ+d8dfcHcssH4o7QsdWaCcRs/feIPCxKYSWkYBNs5mny7MvEfwpTLWjvbm94hecw==", + "node_modules/css-declaration-sorter": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-6.3.1.tgz", + "integrity": "sha512-fBffmak0bPAnyqc/HO8C3n2sHrp9wcqQz6ES9koRF2/mLOVAx9zIQ3Y7R29sYCteTPqMCwns4WYQoCX91Xl3+w==", + "dev": true, + "engines": { + "node": "^10 || ^12 || >=14" + }, + "peerDependencies": { + "postcss": "^8.0.9" + } + }, + "node_modules/css-select": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.3.0.tgz", + "integrity": "sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==", + "dev": true, + "dependencies": { + "boolbase": "^1.0.0", + "css-what": "^6.0.1", + "domhandler": "^4.3.1", + "domutils": "^2.8.0", + "nth-check": "^2.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/css-tree": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.1.3.tgz", + "integrity": "sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==", + "dev": true, + "dependencies": { + "mdn-data": "2.0.14", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/css-what": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz", + "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==", + "dev": true, + "engines": { + "node": ">= 6" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/cssesc": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", + "dev": true, + "bin": { + "cssesc": "bin/cssesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/cssnano": { + "version": "5.1.14", + "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-5.1.14.tgz", + "integrity": "sha512-Oou7ihiTocbKqi0J1bB+TRJIQX5RMR3JghA8hcWSw9mjBLQ5Y3RWqEDoYG3sRNlAbCIXpqMoZGbq5KDR3vdzgw==", + "dev": true, + "dependencies": { + "cssnano-preset-default": "^5.2.13", + "lilconfig": "^2.0.3", + "yaml": "^1.10.2" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/cssnano" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/cssnano-preset-default": { + "version": "5.2.13", + "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-5.2.13.tgz", + "integrity": "sha512-PX7sQ4Pb+UtOWuz8A1d+Rbi+WimBIxJTRyBdgGp1J75VU0r/HFQeLnMYgHiCAp6AR4rqrc7Y4R+1Rjk3KJz6DQ==", + "dev": true, + "dependencies": { + "css-declaration-sorter": "^6.3.1", + "cssnano-utils": "^3.1.0", + "postcss-calc": "^8.2.3", + "postcss-colormin": "^5.3.0", + "postcss-convert-values": "^5.1.3", + "postcss-discard-comments": "^5.1.2", + "postcss-discard-duplicates": "^5.1.0", + "postcss-discard-empty": "^5.1.1", + "postcss-discard-overridden": "^5.1.0", + "postcss-merge-longhand": "^5.1.7", + "postcss-merge-rules": "^5.1.3", + "postcss-minify-font-values": "^5.1.0", + "postcss-minify-gradients": "^5.1.1", + "postcss-minify-params": "^5.1.4", + "postcss-minify-selectors": "^5.2.1", + "postcss-normalize-charset": "^5.1.0", + "postcss-normalize-display-values": "^5.1.0", + "postcss-normalize-positions": "^5.1.1", + "postcss-normalize-repeat-style": "^5.1.1", + "postcss-normalize-string": "^5.1.0", + "postcss-normalize-timing-functions": "^5.1.0", + "postcss-normalize-unicode": "^5.1.1", + "postcss-normalize-url": "^5.1.0", + "postcss-normalize-whitespace": "^5.1.1", + "postcss-ordered-values": "^5.1.3", + "postcss-reduce-initial": "^5.1.1", + "postcss-reduce-transforms": "^5.1.0", + "postcss-svgo": "^5.1.0", + "postcss-unique-selectors": "^5.1.1" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/cssnano-utils": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cssnano-utils/-/cssnano-utils-3.1.0.tgz", + "integrity": "sha512-JQNR19/YZhz4psLX/rQ9M83e3z2Wf/HdJbryzte4a3NSuafyp9w/I4U+hx5C2S9g41qlstH7DEWnZaaj83OuEA==", + "dev": true, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/csso": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/csso/-/csso-4.2.0.tgz", + "integrity": "sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA==", + "dev": true, + "dependencies": { + "css-tree": "^1.1.2" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/cz-conventional-changelog": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/cz-conventional-changelog/-/cz-conventional-changelog-3.3.0.tgz", + "integrity": "sha512-U466fIzU5U22eES5lTNiNbZ+d8dfcHcssH4o7QsdWaCcRs/feIPCxKYSWkYBNs5mny7MvEfwpTLWjvbm94hecw==", "dev": true, "dependencies": { "chalk": "^2.4.1", @@ -5299,6 +5806,15 @@ "node": ">=10" } }, + "node_modules/define-lazy-prop": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", + "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==", + "dev": true, + "engines": { + "node": ">=8" + } + }, "node_modules/define-properties": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.4.tgz", @@ -5401,27 +5917,48 @@ } }, "node_modules/denoify": { - "version": "0.6.5", - "resolved": "https://registry.npmjs.org/denoify/-/denoify-0.6.5.tgz", - "integrity": "sha512-AhKBlvO91QdP5T/fRcxiMj3b6cDe5ucr+7YVlePXCuV/kImbiR0V1qjGTCfmVuC3wvRn5Xf6r34qJJRbo86AqA==", + "version": "1.4.5", + "resolved": "https://registry.npmjs.org/denoify/-/denoify-1.4.5.tgz", + "integrity": "sha512-hk75EoJgI8kCizSAQ8wT7Vmopg67k9+rsos/ScYSFmEk/wMSSgi8xlQMkf99dvNDFck07BgnlywIBLpbs8oU5w==", "dev": true, "dependencies": { "@octokit/rest": "^18.0.0", "@types/comment-json": "^1.1.1", "commander": "^4.1.1", "comment-json": "^3.0.2", - "evt": "^1.9.2", + "cosmiconfig": "^7.0.1", + "evt": "^2.4.13", "get-github-default-branch-name": "^0.0.4", "gitignore-parser": "0.0.2", "glob": "^7.1.6", - "node-fetch": "^2.6.0", + "minimal-polyfills": "^2.2.2", + "node-fetch": "^2.6.7", + "parse-dont-validate": "^4.0.1", "path-depth": "^1.0.0", - "scripting-tools": "^0.19.13", + "scripting-tools": "^0.19.14", + "tsafe": "^1.4.1", "url-join": "^4.0.1" }, "bin": { "denoify": "bin/denoify.js", - "denoify_enable_short_npm_import_path": "bin/enableShortNpmImportPath.js" + "enable_short_npm_import_path": "bin/enable_short_npm_import_path.js", + "remove_deno_dist_from_gitignore": "bin/remove_deno_dist_from_gitignore.js" + } + }, + "node_modules/denoify/node_modules/cosmiconfig": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.1.0.tgz", + "integrity": "sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==", + "dev": true, + "dependencies": { + "@types/parse-json": "^4.0.0", + "import-fresh": "^3.2.1", + "parse-json": "^5.0.0", + "path-type": "^4.0.0", + "yaml": "^1.10.0" + }, + "engines": { + "node": ">=10" } }, "node_modules/deprecation": { @@ -5457,15 +5994,6 @@ "node": ">=8" } }, - "node_modules/diff": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-5.1.0.tgz", - "integrity": "sha512-D+mk+qE8VC/PAUrlAU34N+VfXev0ghe5ywmpqrawphmVZc1bEfn56uo9qpyGp1p4xpzOHkSW4ztBd6L7Xx4ACw==", - "dev": true, - "engines": { - "node": ">=0.3.1" - } - }, "node_modules/diff-sequences": { "version": "26.6.2", "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-26.6.2.tgz", @@ -5499,6 +6027,61 @@ "node": ">=6.0.0" } }, + "node_modules/dom-serializer": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz", + "integrity": "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==", + "dev": true, + "dependencies": { + "domelementtype": "^2.0.1", + "domhandler": "^4.2.0", + "entities": "^2.0.0" + }, + "funding": { + "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" + } + }, + "node_modules/domelementtype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", + "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ] + }, + "node_modules/domhandler": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz", + "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==", + "dev": true, + "dependencies": { + "domelementtype": "^2.2.0" + }, + "engines": { + "node": ">= 4" + }, + "funding": { + "url": "https://github.com/fb55/domhandler?sponsor=1" + } + }, + "node_modules/domutils": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", + "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", + "dev": true, + "dependencies": { + "dom-serializer": "^1.0.1", + "domelementtype": "^2.2.0", + "domhandler": "^4.2.0" + }, + "funding": { + "url": "https://github.com/fb55/domutils?sponsor=1" + } + }, "node_modules/dot-prop": { "version": "5.3.0", "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz", @@ -5511,6 +6094,12 @@ "node": ">=8" } }, + "node_modules/duplexer": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.1.tgz", + "integrity": "sha512-sxNZ+ljy+RA1maXoUReeqBBpBC6RLKmg5ewzV+x+mSETmWNoKdZN6vcQjpFROemza23hGFskJtFNoUWUaQ+R4Q==", + "dev": true + }, "node_modules/duplexer3": { "version": "0.1.5", "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.5.tgz", @@ -5527,6 +6116,21 @@ "safer-buffer": "^2.1.0" } }, + "node_modules/ejs": { + "version": "3.1.8", + "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.8.tgz", + "integrity": "sha512-/sXZeMlhS0ArkfX2Aw780gJzXSMPnKjtspYZv+f3NiKLlubezAHDU5+9xz6gd3/NhG3txQCo6xlglmTS+oTGEQ==", + "dev": true, + "dependencies": { + "jake": "^10.8.5" + }, + "bin": { + "ejs": "bin/cli.js" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/electron-to-chromium": { "version": "1.4.284", "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.284.tgz", @@ -5581,6 +6185,15 @@ "node": ">=8.6" } }, + "node_modules/entities": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", + "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", + "dev": true, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, "node_modules/error-ex": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", @@ -6046,12 +6659,12 @@ } }, "node_modules/eslint": { - "version": "8.30.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.30.0.tgz", - "integrity": "sha512-MGADB39QqYuzEGov+F/qb18r4i7DohCDOfatHaxI2iGlPuC65bwG2gxgO+7DkyL38dRFaRH7RaRAgU6JKL9rMQ==", + "version": "8.32.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.32.0.tgz", + "integrity": "sha512-nETVXpnthqKPFyuY2FNjz/bEd6nbosRgKbkgS/y1C7LJop96gYHWpiguLecMHQ2XCPxn77DS0P+68WzG6vkZSQ==", "dev": true, "dependencies": { - "@eslint/eslintrc": "^1.4.0", + "@eslint/eslintrc": "^1.4.1", "@humanwhocodes/config-array": "^0.11.8", "@humanwhocodes/module-importer": "^1.0.1", "@nodelib/fs.walk": "^1.2.8", @@ -6101,177 +6714,10 @@ "url": "https://opencollective.com/eslint" } }, - "node_modules/eslint-config-eta-dev": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/eslint-config-eta-dev/-/eslint-config-eta-dev-1.0.0.tgz", - "integrity": "sha512-MoiaM3SRXmHPQdS2Pbn4rcxKawhTisHZi/wh/7iCHdUx4BcbmuiZc2Oni+0p8yINGVC5iIg2mFkptsDIcYoUww==", - "dev": true, - "dependencies": { - "@typescript-eslint/parser": "^4.5.0", - "eslint-config-prettier": "^6.13.0" - }, - "peerDependencies": { - "@typescript-eslint/eslint-plugin": ">=4.2.0", - "eslint": ">=0.8.0", - "eslint-plugin-import": ">=2.x.x", - "eslint-plugin-node": ">=11.x.x", - "eslint-plugin-promise": ">=4.x.x", - "eslint-plugin-standard": ">=4.x.x" - } - }, - "node_modules/eslint-config-eta-dev/node_modules/@typescript-eslint/parser": { - "version": "4.33.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-4.33.0.tgz", - "integrity": "sha512-ZohdsbXadjGBSK0/r+d87X0SBmKzOq4/S5nzK6SBgJspFo9/CUDJ7hjayuze+JK7CZQLDMroqytp7pOcFKTxZA==", - "dev": true, - "dependencies": { - "@typescript-eslint/scope-manager": "4.33.0", - "@typescript-eslint/types": "4.33.0", - "@typescript-eslint/typescript-estree": "4.33.0", - "debug": "^4.3.1" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^5.0.0 || ^6.0.0 || ^7.0.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/eslint-config-eta-dev/node_modules/@typescript-eslint/scope-manager": { - "version": "4.33.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-4.33.0.tgz", - "integrity": "sha512-5IfJHpgTsTZuONKbODctL4kKuQje/bzBRkwHE8UOZ4f89Zeddg+EGZs8PD8NcN4LdM3ygHWYB3ukPAYjvl/qbQ==", - "dev": true, - "dependencies": { - "@typescript-eslint/types": "4.33.0", - "@typescript-eslint/visitor-keys": "4.33.0" - }, - "engines": { - "node": "^8.10.0 || ^10.13.0 || >=11.10.1" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/eslint-config-eta-dev/node_modules/@typescript-eslint/types": { - "version": "4.33.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-4.33.0.tgz", - "integrity": "sha512-zKp7CjQzLQImXEpLt2BUw1tvOMPfNoTAfb8l51evhYbOEEzdWyQNmHWWGPR6hwKJDAi+1VXSBmnhL9kyVTTOuQ==", - "dev": true, - "engines": { - "node": "^8.10.0 || ^10.13.0 || >=11.10.1" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/eslint-config-eta-dev/node_modules/@typescript-eslint/typescript-estree": { - "version": "4.33.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-4.33.0.tgz", - "integrity": "sha512-rkWRY1MPFzjwnEVHsxGemDzqqddw2QbTJlICPD9p9I9LfsO8fdmfQPOX3uKfUaGRDFJbfrtm/sXhVXN4E+bzCA==", - "dev": true, - "dependencies": { - "@typescript-eslint/types": "4.33.0", - "@typescript-eslint/visitor-keys": "4.33.0", - "debug": "^4.3.1", - "globby": "^11.0.3", - "is-glob": "^4.0.1", - "semver": "^7.3.5", - "tsutils": "^3.21.0" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/eslint-config-eta-dev/node_modules/@typescript-eslint/visitor-keys": { - "version": "4.33.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-4.33.0.tgz", - "integrity": "sha512-uqi/2aSz9g2ftcHWf8uLPJA70rUv6yuMW5Bohw+bwcuzaxQIHaKFZCKGoGXIrc9vkTJ3+0txM73K0Hq3d5wgIg==", - "dev": true, - "dependencies": { - "@typescript-eslint/types": "4.33.0", - "eslint-visitor-keys": "^2.0.0" - }, - "engines": { - "node": "^8.10.0 || ^10.13.0 || >=11.10.1" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/eslint-config-eta-dev/node_modules/eslint-config-prettier": { - "version": "6.15.0", - "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-6.15.0.tgz", - "integrity": "sha512-a1+kOYLR8wMGustcgAjdydMsQ2A/2ipRPwRKUmfYaSxc9ZPcrku080Ctl6zrZzZNs/U82MjSv+qKREkoq3bJaw==", - "dev": true, - "dependencies": { - "get-stdin": "^6.0.0" - }, - "bin": { - "eslint-config-prettier-check": "bin/cli.js" - }, - "peerDependencies": { - "eslint": ">=3.14.1" - } - }, - "node_modules/eslint-config-eta-dev/node_modules/eslint-visitor-keys": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", - "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/eslint-config-eta-dev/node_modules/get-stdin": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-6.0.0.tgz", - "integrity": "sha512-jp4tHawyV7+fkkSKyvjuLZswblUtz+SQKzSWnBbii16BuZksJlU1wuBYXY75r+duh/llF1ur6oNwi+2ZzjKZ7g==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/eslint-config-eta-dev/node_modules/semver": { - "version": "7.3.8", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", - "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/eslint-config-prettier": { - "version": "8.5.0", - "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.5.0.tgz", - "integrity": "sha512-obmWKLUNCnhtQRKc+tmnYuQl0pFU1ibYJQ5BGhTVB08bHe9wC8qUeG7c08dj9XX+AuPj1YSGSQIHl1pnDHZR0Q==", + "version": "8.6.0", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.6.0.tgz", + "integrity": "sha512-bAF0eLpLVqP5oEVUFKpMA+NnRFICwn9X8B5jrR9FcqnYBuPbqWEjTEspPWMj5ye6czoSLDweCzSo3Ko7gGrZaA==", "dev": true, "bin": { "eslint-config-prettier": "bin/cli.js" @@ -6281,13 +6727,14 @@ } }, "node_modules/eslint-import-resolver-node": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.6.tgz", - "integrity": "sha512-0En0w03NRVMn9Uiyn8YRPDKvWjxCWkslUEhGNTdGx15RvPJYQ+lbOlqrlNI2vEAs4pDYK4f/HN2TbDmk5TP0iw==", + "version": "0.3.7", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.7.tgz", + "integrity": "sha512-gozW2blMLJCeFpBwugLTGyvVjNoeo1knonXAcatC6bjPBZitotxdWf7Gimr25N4c0AAOo4eOUfaG82IJPDpqCA==", "dev": true, "dependencies": { "debug": "^3.2.7", - "resolve": "^1.20.0" + "is-core-module": "^2.11.0", + "resolve": "^1.22.1" } }, "node_modules/eslint-import-resolver-node/node_modules/debug": { @@ -6325,124 +6772,119 @@ "ms": "^2.1.1" } }, - "node_modules/eslint-plugin-es": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-es/-/eslint-plugin-es-3.0.1.tgz", - "integrity": "sha512-GUmAsJaN4Fc7Gbtl8uOBlayo2DqhwWvEzykMHSCZHU3XdJ+NSzzZcVhXh3VxX5icqQ+oQdIEawXX8xkR3mIFmQ==", + "node_modules/eslint-plugin-import": { + "version": "2.27.5", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.27.5.tgz", + "integrity": "sha512-LmEt3GVofgiGuiE+ORpnvP+kAm3h6MLZJ4Q5HCyHADofsb4VzXFsRiWj3c0OFiV+3DWFh0qg3v9gcPlfc3zRow==", "dev": true, "dependencies": { - "eslint-utils": "^2.0.0", - "regexpp": "^3.0.0" + "array-includes": "^3.1.6", + "array.prototype.flat": "^1.3.1", + "array.prototype.flatmap": "^1.3.1", + "debug": "^3.2.7", + "doctrine": "^2.1.0", + "eslint-import-resolver-node": "^0.3.7", + "eslint-module-utils": "^2.7.4", + "has": "^1.0.3", + "is-core-module": "^2.11.0", + "is-glob": "^4.0.3", + "minimatch": "^3.1.2", + "object.values": "^1.1.6", + "resolve": "^1.22.1", + "semver": "^6.3.0", + "tsconfig-paths": "^3.14.1" }, "engines": { - "node": ">=8.10.0" - }, - "funding": { - "url": "https://github.com/sponsors/mysticatea" + "node": ">=4" }, "peerDependencies": { - "eslint": ">=4.19.1" + "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8" + } + }, + "node_modules/eslint-plugin-import/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "dependencies": { + "ms": "^2.1.1" } }, - "node_modules/eslint-plugin-es/node_modules/eslint-utils": { + "node_modules/eslint-plugin-import/node_modules/doctrine": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", - "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", "dev": true, "dependencies": { - "eslint-visitor-keys": "^1.1.0" + "esutils": "^2.0.2" }, "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/mysticatea" + "node": ">=0.10.0" } }, - "node_modules/eslint-plugin-es/node_modules/eslint-visitor-keys": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", - "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", + "node_modules/eslint-plugin-import/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", "dev": true, - "engines": { - "node": ">=4" + "bin": { + "semver": "bin/semver.js" } }, - "node_modules/eslint-plugin-import": { - "version": "2.26.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.26.0.tgz", - "integrity": "sha512-hYfi3FXaM8WPLf4S1cikh/r4IxnO6zrhZbEGz2b660EJRbuxgpDS5gkCuYgGWg2xxh2rBuIr4Pvhve/7c31koA==", + "node_modules/eslint-plugin-n": { + "version": "15.6.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-n/-/eslint-plugin-n-15.6.1.tgz", + "integrity": "sha512-R9xw9OtCRxxaxaszTQmQAlPgM+RdGjaL1akWuY/Fv9fRAi8Wj4CUKc6iYVG8QNRjRuo8/BqVYIpfqberJUEacA==", "dev": true, "dependencies": { - "array-includes": "^3.1.4", - "array.prototype.flat": "^1.2.5", - "debug": "^2.6.9", - "doctrine": "^2.1.0", - "eslint-import-resolver-node": "^0.3.6", - "eslint-module-utils": "^2.7.3", - "has": "^1.0.3", - "is-core-module": "^2.8.1", - "is-glob": "^4.0.3", + "builtins": "^5.0.1", + "eslint-plugin-es": "^4.1.0", + "eslint-utils": "^3.0.0", + "ignore": "^5.1.1", + "is-core-module": "^2.11.0", "minimatch": "^3.1.2", - "object.values": "^1.1.5", - "resolve": "^1.22.0", - "tsconfig-paths": "^3.14.1" + "resolve": "^1.22.1", + "semver": "^7.3.8" }, "engines": { - "node": ">=4" + "node": ">=12.22.0" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" }, "peerDependencies": { - "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8" - } - }, - "node_modules/eslint-plugin-import/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "dependencies": { - "ms": "2.0.0" + "eslint": ">=7.0.0" } }, - "node_modules/eslint-plugin-import/node_modules/doctrine": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", - "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "node_modules/eslint-plugin-n/node_modules/builtins": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/builtins/-/builtins-5.0.1.tgz", + "integrity": "sha512-qwVpFEHNfhYJIzNRBvd2C1kyo6jz3ZSMPyyuR47OPdiKWlbYnZNyDWuyR175qDnAJLiCo5fBBqPb3RiXgWlkOQ==", "dev": true, "dependencies": { - "esutils": "^2.0.2" - }, - "engines": { - "node": ">=0.10.0" + "semver": "^7.0.0" } }, - "node_modules/eslint-plugin-import/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true - }, - "node_modules/eslint-plugin-node": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-node/-/eslint-plugin-node-11.1.0.tgz", - "integrity": "sha512-oUwtPJ1W0SKD0Tr+wqu92c5xuCeQqB3hSCHasn/ZgjFdA9iDGNkNf2Zi9ztY7X+hNuMib23LNGRm6+uN+KLE3g==", + "node_modules/eslint-plugin-n/node_modules/eslint-plugin-es": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-es/-/eslint-plugin-es-4.1.0.tgz", + "integrity": "sha512-GILhQTnjYE2WorX5Jyi5i4dz5ALWxBIdQECVQavL6s7cI76IZTDWleTHkxz/QT3kvcs2QlGHvKLYsSlPOlPXnQ==", "dev": true, "dependencies": { - "eslint-plugin-es": "^3.0.0", "eslint-utils": "^2.0.0", - "ignore": "^5.1.1", - "minimatch": "^3.0.4", - "resolve": "^1.10.1", - "semver": "^6.1.0" + "regexpp": "^3.0.0" }, "engines": { "node": ">=8.10.0" }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + }, "peerDependencies": { - "eslint": ">=5.16.0" + "eslint": ">=4.19.1" } }, - "node_modules/eslint-plugin-node/node_modules/eslint-utils": { + "node_modules/eslint-plugin-n/node_modules/eslint-plugin-es/node_modules/eslint-utils": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", @@ -6457,7 +6899,7 @@ "url": "https://github.com/sponsors/mysticatea" } }, - "node_modules/eslint-plugin-node/node_modules/eslint-visitor-keys": { + "node_modules/eslint-plugin-n/node_modules/eslint-visitor-keys": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", @@ -6466,45 +6908,31 @@ "node": ">=4" } }, - "node_modules/eslint-plugin-node/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "node_modules/eslint-plugin-n/node_modules/semver": { + "version": "7.3.8", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", + "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, "bin": { "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" } }, "node_modules/eslint-plugin-promise": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-promise/-/eslint-plugin-promise-4.3.1.tgz", - "integrity": "sha512-bY2sGqyptzFBDLh/GMbAxfdJC+b0f23ME63FOE4+Jao0oZ3E1LEwFtWJX/1pGMJLiTtrSSern2CRM/g+dfc0eQ==", + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-promise/-/eslint-plugin-promise-6.1.1.tgz", + "integrity": "sha512-tjqWDwVZQo7UIPMeDReOpUgHCmCiH+ePnVT+5zVapL0uuHnegBUs2smM13CzOs2Xb5+MHMRFTs9v24yjba4Oig==", "dev": true, "engines": { - "node": ">=6" - } - }, - "node_modules/eslint-plugin-standard": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-standard/-/eslint-plugin-standard-4.1.0.tgz", - "integrity": "sha512-ZL7+QRixjTR6/528YNGyDotyffm5OQst/sGxKDwGb9Uqs4In5Egi4+jbobhqJoyoCM6/7v/1A5fhQ7ScMtDjaQ==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, "peerDependencies": { - "eslint": ">=5.0.0" + "eslint": "^7.0.0 || ^8.0.0" } }, "node_modules/eslint-scope": { @@ -6738,14 +7166,21 @@ "node": ">=0.10.0" } }, + "node_modules/eventemitter3": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", + "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", + "dev": true + }, "node_modules/evt": { - "version": "1.11.2", - "resolved": "https://registry.npmjs.org/evt/-/evt-1.11.2.tgz", - "integrity": "sha512-TShpDKBsHQslCV83lkH2A070gywfZD7SRjh0fYALHWUKteSHTI07L7YjCpoJOM4k4sL8Ue/9CB7vtL3DukDaLA==", + "version": "2.4.13", + "resolved": "https://registry.npmjs.org/evt/-/evt-2.4.13.tgz", + "integrity": "sha512-haTVOsmjzk+28zpzvVwan9Zw2rLQF2izgi7BKjAPRzZAfcv+8scL0TpM8MzvGNKFYHiy+Bq3r6FYIIUPl9kt3A==", "dev": true, "dependencies": { - "minimal-polyfills": "^2.1.5", - "run-exclusive": "^2.2.14" + "minimal-polyfills": "^2.2.2", + "run-exclusive": "^2.2.18", + "tsafe": "^1.4.1" } }, "node_modules/execa": { @@ -6937,6 +7372,45 @@ "node": "^10.12.0 || >=12.0.0" } }, + "node_modules/filelist": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.4.tgz", + "integrity": "sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==", + "dev": true, + "dependencies": { + "minimatch": "^5.0.1" + } + }, + "node_modules/filelist/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/filelist/node_modules/minimatch": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/filesize": { + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/filesize/-/filesize-6.4.0.tgz", + "integrity": "sha512-mjFIpOHC4jbfcTfoh4rkWpI31mF7viw9ikj/JyLoKzqlwG/YsefKfvYlYhdYdg/9mtK2z1AzgN/0LvVQ3zdlSQ==", + "dev": true, + "engines": { + "node": ">= 0.4.0" + } + }, "node_modules/fill-range": { "version": "7.0.1", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", @@ -7079,6 +7553,19 @@ "node": ">= 0.12" } }, + "node_modules/fraction.js": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.2.0.tgz", + "integrity": "sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA==", + "dev": true, + "engines": { + "node": "*" + }, + "funding": { + "type": "patreon", + "url": "https://www.patreon.com/infusion" + } + }, "node_modules/fs-extra": { "version": "8.1.0", "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", @@ -7146,6 +7633,15 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/generic-names": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/generic-names/-/generic-names-4.0.0.tgz", + "integrity": "sha512-ySFolZQfw9FoDb3ed9d80Cm9f0+r7qj+HJkWjeD9RBfpxEVTlVhol+gvaQB/78WbwYfbnNh8nWHHBSlg072y6A==", + "dev": true, + "dependencies": { + "loader-utils": "^3.2.0" + } + }, "node_modules/gensync": { "version": "1.0.0-beta.2", "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", @@ -7387,6 +7883,12 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/globalyzer": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/globalyzer/-/globalyzer-0.1.0.tgz", + "integrity": "sha512-40oNTM9UfG6aBmuKxk/giHn5nQ8RVz/SS4Ir6zgzOv9/qC3kKZ9v4etGTcJbEl/NyVQH7FGU7d+X1egr57Md2Q==", + "dev": true + }, "node_modules/globby": { "version": "11.1.0", "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", @@ -7407,6 +7909,12 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/globrex": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/globrex/-/globrex-0.1.2.tgz", + "integrity": "sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg==", + "dev": true + }, "node_modules/gopd": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", @@ -7487,6 +7995,27 @@ "integrity": "sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==", "dev": true }, + "node_modules/gzip-size": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/gzip-size/-/gzip-size-6.0.0.tgz", + "integrity": "sha512-ax7ZYomf6jqPTQ4+XCpUGyXKHk5WweS+e05MBO4/y3WJ5RkmPXNKvX+bx1behVILVwr6JSQvZAku021CHPXG3Q==", + "dev": true, + "dependencies": { + "duplexer": "^0.1.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/gzip-size/node_modules/duplexer": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz", + "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==", + "dev": true + }, "node_modules/har-schema": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", @@ -7745,6 +8274,24 @@ "node": ">=0.10.0" } }, + "node_modules/icss-replace-symbols": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/icss-replace-symbols/-/icss-replace-symbols-1.1.0.tgz", + "integrity": "sha512-chIaY3Vh2mh2Q3RGXttaDIzeiPvaVXJ+C4DAh/w3c37SKZ/U6PGMmuicR2EQQp9bKG8zLMCl7I+PtIoOOPp8Gg==", + "dev": true + }, + "node_modules/icss-utils": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz", + "integrity": "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==", + "dev": true, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, "node_modules/ieee754": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", @@ -7774,6 +8321,18 @@ "node": ">= 4" } }, + "node_modules/import-cwd": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/import-cwd/-/import-cwd-3.0.0.tgz", + "integrity": "sha512-4pnzH16plW+hgvRECbDWpQl3cqtvSofHWh44met7ESfZ8UZOWWddm8hEyDTqREJ9RbYHY8gi8DqmaelApoOGMg==", + "dev": true, + "dependencies": { + "import-from": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/import-fresh": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", @@ -7799,6 +8358,18 @@ "node": ">=4" } }, + "node_modules/import-from": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/import-from/-/import-from-3.0.0.tgz", + "integrity": "sha512-CiuXOFFSzkU5x/CR0+z7T91Iht4CXgfCxVOFRhh2Zyhg5wOpWvvDLQUsWl+gcN+QscYBjez8hDCt85O7RLDttQ==", + "dev": true, + "dependencies": { + "resolve-from": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/import-lazy": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-2.1.0.tgz", @@ -8844,6 +9415,24 @@ "node": ">=8" } }, + "node_modules/jake": { + "version": "10.8.5", + "resolved": "https://registry.npmjs.org/jake/-/jake-10.8.5.tgz", + "integrity": "sha512-sVpxYeuAhWt0OTWITwT98oyV0GsXyMlXCF+3L1SuafBVUIr/uILGRB+NqwkzhgXKvoJpDIpQvqkUALgdmQsQxw==", + "dev": true, + "dependencies": { + "async": "^3.2.3", + "chalk": "^4.0.2", + "filelist": "^1.0.1", + "minimatch": "^3.0.4" + }, + "bin": { + "jake": "bin/cli.js" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/jest": { "version": "29.3.1", "resolved": "https://registry.npmjs.org/jest/-/jest-29.3.1.tgz", @@ -10723,6 +11312,15 @@ } } }, + "node_modules/loader-utils": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-3.2.1.tgz", + "integrity": "sha512-ZvFw1KWS3GVyYBYb7qkmRM/WwL2TQQBxgCK62rlvm4WpVQ23Nb4tYjApUlfjrEGvOs7KHEsmyUn75OHZrJMWPw==", + "dev": true, + "engines": { + "node": ">= 12.13.0" + } + }, "node_modules/locate-path": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", @@ -10741,30 +11339,18 @@ "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", "dev": true }, + "node_modules/lodash.camelcase": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", + "integrity": "sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==", + "dev": true + }, "node_modules/lodash.debounce": { "version": "4.0.8", "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==", "dev": true }, - "node_modules/lodash.hasin": { - "version": "4.5.2", - "resolved": "https://registry.npmjs.org/lodash.hasin/-/lodash.hasin-4.5.2.tgz", - "integrity": "sha512-AFAitwTSq1Ka/1J9uBaVxpLBP5OI3INQvkl4wKcgIYxoA0S3aqO1QWXHR9aCcOrWtPFqP7GzlFncZfe0Jz0kNw==", - "dev": true - }, - "node_modules/lodash.isempty": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/lodash.isempty/-/lodash.isempty-4.4.0.tgz", - "integrity": "sha512-oKMuF3xEeqDltrGMfDxAPGIVMSSRv8tbRSODbrs4KGsRRLEhrW8N8Rd4DRgB2+621hY8A8XwwrTVhXWpxFvMzg==", - "dev": true - }, - "node_modules/lodash.isnil": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/lodash.isnil/-/lodash.isnil-4.0.0.tgz", - "integrity": "sha512-up2Mzq3545mwVnMhTDMdfoG1OurpA/s5t88JmQX809eH3C8491iu2sfKhTfhQtKY78oPNhiaHJUpT/dUDAAtng==", - "dev": true - }, "node_modules/lodash.map": { "version": "4.6.0", "resolved": "https://registry.npmjs.org/lodash.map/-/lodash.map-4.6.0.tgz", @@ -10783,10 +11369,10 @@ "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", "dev": true }, - "node_modules/lodash.omitby": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/lodash.omitby/-/lodash.omitby-4.6.0.tgz", - "integrity": "sha512-5OrRcIVR75M288p4nbI2WLAf3ndw2GD9fyNv3Bc15+WCxJDdZ4lYndSxGd7hnG6PVjiJTeJE2dHEGhIuKGicIQ==", + "node_modules/lodash.uniq": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", + "integrity": "sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==", "dev": true }, "node_modules/lodash.zip": { @@ -10989,40 +11575,162 @@ "node": ">= 12" } }, - "node_modules/mem": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/mem/-/mem-4.3.0.tgz", - "integrity": "sha512-qX2bG48pTqYRVmDB37rn/6PT7LcR8T7oAX3bf99u1Tt1nzxYfxkgqDwUwolPlXweM0XzBOBFzSx4kfp7KP1s/w==", + "node_modules/maxmin": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/maxmin/-/maxmin-2.1.0.tgz", + "integrity": "sha512-NWlApBjW9az9qRPaeg7CX4sQBWwytqz32bIEo1PW9pRW+kBP9KLRfJO3UC+TV31EcQZEUq7eMzikC7zt3zPJcw==", "dev": true, "dependencies": { - "map-age-cleaner": "^0.1.1", - "mimic-fn": "^2.0.0", - "p-is-promise": "^2.0.0" + "chalk": "^1.0.0", + "figures": "^1.0.1", + "gzip-size": "^3.0.0", + "pretty-bytes": "^3.0.0" }, "engines": { - "node": ">=6" + "node": ">=0.12" } }, - "node_modules/meow": { - "version": "8.1.2", - "resolved": "https://registry.npmjs.org/meow/-/meow-8.1.2.tgz", - "integrity": "sha512-r85E3NdZ+mpYk1C6RjPFEMSE+s1iZMuHtsHAqY0DT3jZczl0diWUZ8g6oU7h0M9cD2EL+PzaYghhCLzR0ZNn5Q==", + "node_modules/maxmin/node_modules/ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==", "dev": true, - "dependencies": { - "@types/minimist": "^1.2.0", - "camelcase-keys": "^6.2.2", - "decamelize-keys": "^1.1.0", - "hard-rejection": "^2.1.0", - "minimist-options": "4.1.0", - "normalize-package-data": "^3.0.0", - "read-pkg-up": "^7.0.1", - "redent": "^3.0.0", - "trim-newlines": "^3.0.0", - "type-fest": "^0.18.0", - "yargs-parser": "^20.2.3" - }, "engines": { - "node": ">=10" + "node": ">=0.10.0" + } + }, + "node_modules/maxmin/node_modules/ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha512-kmCevFghRiWM7HB5zTPULl4r9bVFSWjz62MhqizDGUrq2NWuNMQyuv4tHHoKJHs69M/MF64lEcHdYIocrdWQYA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/maxmin/node_modules/chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A==", + "dev": true, + "dependencies": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/maxmin/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/maxmin/node_modules/figures": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-1.7.0.tgz", + "integrity": "sha512-UxKlfCRuCBxSXU4C6t9scbDyWZ4VlaFFdojKtzJuSkuOBQ5CNFum+zZXFwHjo+CxBC1t6zlYPgHIgFjL8ggoEQ==", + "dev": true, + "dependencies": { + "escape-string-regexp": "^1.0.5", + "object-assign": "^4.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/maxmin/node_modules/gzip-size": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/gzip-size/-/gzip-size-3.0.0.tgz", + "integrity": "sha512-6s8trQiK+OMzSaCSVXX+iqIcLV9tC+E73jrJrJTyS4h/AJhlxHvzFKqM1YLDJWRGgHX8uLkBeXkA0njNj39L4w==", + "dev": true, + "dependencies": { + "duplexer": "^0.1.1" + }, + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/maxmin/node_modules/pretty-bytes": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-3.0.1.tgz", + "integrity": "sha512-eb7ZAeUTgfh294cElcu51w+OTRp/6ItW758LjwJSK72LDevcuJn0P4eD71PLMDGPwwatXmAmYHTkzvpKlJE3ow==", + "dev": true, + "dependencies": { + "number-is-nan": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/maxmin/node_modules/strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==", + "dev": true, + "dependencies": { + "ansi-regex": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/maxmin/node_modules/supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha512-KKNVtd6pCYgPIKU4cp2733HWYCpplQhddZLBUryaAHou723x+FRzQ5Df824Fj+IyyuiQTRoub4SnIFfIcrp70g==", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/mdn-data": { + "version": "2.0.14", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.14.tgz", + "integrity": "sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==", + "dev": true + }, + "node_modules/mem": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/mem/-/mem-4.3.0.tgz", + "integrity": "sha512-qX2bG48pTqYRVmDB37rn/6PT7LcR8T7oAX3bf99u1Tt1nzxYfxkgqDwUwolPlXweM0XzBOBFzSx4kfp7KP1s/w==", + "dev": true, + "dependencies": { + "map-age-cleaner": "^0.1.1", + "mimic-fn": "^2.0.0", + "p-is-promise": "^2.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/meow": { + "version": "8.1.2", + "resolved": "https://registry.npmjs.org/meow/-/meow-8.1.2.tgz", + "integrity": "sha512-r85E3NdZ+mpYk1C6RjPFEMSE+s1iZMuHtsHAqY0DT3jZczl0diWUZ8g6oU7h0M9cD2EL+PzaYghhCLzR0ZNn5Q==", + "dev": true, + "dependencies": { + "@types/minimist": "^1.2.0", + "camelcase-keys": "^6.2.2", + "decamelize-keys": "^1.1.0", + "hard-rejection": "^2.1.0", + "minimist-options": "4.1.0", + "normalize-package-data": "^3.0.0", + "read-pkg-up": "^7.0.1", + "redent": "^3.0.0", + "trim-newlines": "^3.0.0", + "type-fest": "^0.18.0", + "yargs-parser": "^20.2.3" + }, + "engines": { + "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" @@ -11061,6 +11769,93 @@ "node": ">= 8" } }, + "node_modules/microbundle": { + "version": "0.15.1", + "resolved": "https://registry.npmjs.org/microbundle/-/microbundle-0.15.1.tgz", + "integrity": "sha512-aAF+nwFbkSIJGfrJk+HyzmJOq3KFaimH6OIFBU6J2DPjQeg1jXIYlIyEv81Gyisb9moUkudn+wj7zLNYMOv75Q==", + "dev": true, + "dependencies": { + "@babel/core": "^7.12.10", + "@babel/plugin-proposal-class-properties": "7.12.1", + "@babel/plugin-syntax-import-meta": "^7.10.4", + "@babel/plugin-syntax-jsx": "^7.12.1", + "@babel/plugin-transform-flow-strip-types": "^7.12.10", + "@babel/plugin-transform-react-jsx": "^7.12.11", + "@babel/plugin-transform-regenerator": "^7.12.1", + "@babel/preset-env": "^7.12.11", + "@babel/preset-flow": "^7.12.1", + "@babel/preset-react": "^7.12.10", + "@rollup/plugin-alias": "^3.1.1", + "@rollup/plugin-babel": "^5.2.2", + "@rollup/plugin-commonjs": "^17.0.0", + "@rollup/plugin-json": "^4.1.0", + "@rollup/plugin-node-resolve": "^11.0.1", + "@surma/rollup-plugin-off-main-thread": "^2.2.2", + "asyncro": "^3.0.0", + "autoprefixer": "^10.1.0", + "babel-plugin-macros": "^3.0.1", + "babel-plugin-transform-async-to-promises": "^0.8.18", + "babel-plugin-transform-replace-expressions": "^0.2.0", + "brotli-size": "^4.0.0", + "builtin-modules": "^3.1.0", + "camelcase": "^6.2.0", + "escape-string-regexp": "^4.0.0", + "filesize": "^6.1.0", + "gzip-size": "^6.0.0", + "kleur": "^4.1.3", + "lodash.merge": "^4.6.2", + "postcss": "^8.2.1", + "pretty-bytes": "^5.4.1", + "rollup": "^2.35.1", + "rollup-plugin-bundle-size": "^1.0.3", + "rollup-plugin-postcss": "^4.0.0", + "rollup-plugin-terser": "^7.0.2", + "rollup-plugin-typescript2": "^0.32.0", + "rollup-plugin-visualizer": "^5.6.0", + "sade": "^1.7.4", + "terser": "^5.7.0", + "tiny-glob": "^0.2.8", + "tslib": "^2.0.3", + "typescript": "^4.1.3" + }, + "bin": { + "microbundle": "dist/cli.js" + } + }, + "node_modules/microbundle/node_modules/@babel/plugin-proposal-class-properties": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.12.1.tgz", + "integrity": "sha512-cKp3dlQsFsEs5CWKnN7BnSHOd0EOW8EKpEjkoz1pO2E5KzIDNV9Ros1b0CnmbVgAGXJubOYVBOGCT1OmJwOI7w==", + "dev": true, + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.12.1", + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/microbundle/node_modules/camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/microbundle/node_modules/kleur": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/kleur/-/kleur-4.1.5.tgz", + "integrity": "sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, "node_modules/micromatch": { "version": "4.0.5", "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", @@ -11175,6 +11970,15 @@ "node": ">=10" } }, + "node_modules/mri": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/mri/-/mri-1.2.0.tgz", + "integrity": "sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==", + "dev": true, + "engines": { + "node": ">=4" + } + }, "node_modules/ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", @@ -11318,6 +12122,15 @@ "node": ">=0.10.0" } }, + "node_modules/normalize-range": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", + "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/normalize-url": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz", @@ -11743,6 +12556,18 @@ "node": ">=8" } }, + "node_modules/nth-check": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", + "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", + "dev": true, + "dependencies": { + "boolbase": "^1.0.0" + }, + "funding": { + "url": "https://github.com/fb55/nth-check?sponsor=1" + } + }, "node_modules/number-is-nan": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", @@ -12207,6 +13032,22 @@ "node": ">=6" } }, + "node_modules/p-queue": { + "version": "6.6.2", + "resolved": "https://registry.npmjs.org/p-queue/-/p-queue-6.6.2.tgz", + "integrity": "sha512-RwFpb72c/BhQLEXIZ5K2e+AhgNVmIejGlTgiB9MzZ0e93GRvqZ7uSi0dvRF7/XIXDeNkra2fNHBxTyPDGySpjQ==", + "dev": true, + "dependencies": { + "eventemitter3": "^4.0.4", + "p-timeout": "^3.2.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/p-retry": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-3.0.1.tgz", @@ -12460,6 +13301,12 @@ "node": ">=6" } }, + "node_modules/parse-dont-validate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/parse-dont-validate/-/parse-dont-validate-4.1.0.tgz", + "integrity": "sha512-MrrhzYT4A6Ft3vf6W5DaGt/i8/p3/YgISC2FQxJ+cENp7C08sln8hcP2eU9fsTf9VG3m0AE/VH/x7R/4nuWafQ==", + "dev": true + }, "node_modules/parse-json": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", @@ -12674,74 +13521,653 @@ "semver-compare": "^1.0.0" } }, - "node_modules/prelude-ls": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", - "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "node_modules/postcss": { + "version": "8.4.21", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.21.tgz", + "integrity": "sha512-tP7u/Sn/dVxK2NnruI4H9BG+x+Wxz6oeZ1cJ8P6G/PZY0IKk4k/63TDsQf2kQq3+qoJeLm2kIBUNlZe3zgb4Zg==", "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + } + ], + "dependencies": { + "nanoid": "^3.3.4", + "picocolors": "^1.0.0", + "source-map-js": "^1.0.2" + }, "engines": { - "node": ">= 0.8.0" + "node": "^10 || ^12 || >=14" } }, - "node_modules/prepend-http": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz", - "integrity": "sha512-ravE6m9Atw9Z/jjttRUZ+clIXogdghyZAuWJ3qEzjT+jI/dL1ifAqhZeC5VHzQp1MSt1+jxKkFNemj/iO7tVUA==", + "node_modules/postcss-calc": { + "version": "8.2.4", + "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-8.2.4.tgz", + "integrity": "sha512-SmWMSJmB8MRnnULldx0lQIyhSNvuDl9HfrZkaqqE/WHAhToYsAvDq+yAsA/kIyINDszOp3Rh0GFoNuH5Ypsm3Q==", "dev": true, - "engines": { - "node": ">=4" + "dependencies": { + "postcss-selector-parser": "^6.0.9", + "postcss-value-parser": "^4.2.0" + }, + "peerDependencies": { + "postcss": "^8.2.2" } }, - "node_modules/prettier": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.1.1.tgz", - "integrity": "sha512-9bY+5ZWCfqj3ghYBLxApy2zf6m+NJo5GzmLTpr9FsApsfjriNnS2dahWReHMi7qNPhhHl9SYHJs2cHZLgexNIw==", + "node_modules/postcss-colormin": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-5.3.0.tgz", + "integrity": "sha512-WdDO4gOFG2Z8n4P8TWBpshnL3JpmNmJwdnfP2gbk2qBA8PWwOYcmjmI/t3CmMeL72a7Hkd+x/Mg9O2/0rD54Pg==", "dev": true, - "bin": { - "prettier": "bin-prettier.js" + "dependencies": { + "browserslist": "^4.16.6", + "caniuse-api": "^3.0.0", + "colord": "^2.9.1", + "postcss-value-parser": "^4.2.0" }, "engines": { - "node": ">=10.13.0" + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" } }, - "node_modules/pretty-format": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-26.6.2.tgz", - "integrity": "sha512-7AeGuCYNGmycyQbCqd/3PWH4eOoX/OiCa0uphp57NVTeAGdJGaAliecxwBDHYQCIvrW7aDBZCYeNTP/WX69mkg==", + "node_modules/postcss-convert-values": { + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-5.1.3.tgz", + "integrity": "sha512-82pC1xkJZtcJEfiLw6UXnXVXScgtBrjlO5CBmuDQc+dlb88ZYheFsjTn40+zBVi3DkfF7iezO0nJUPLcJK3pvA==", "dev": true, "dependencies": { - "@jest/types": "^26.6.2", - "ansi-regex": "^5.0.0", - "ansi-styles": "^4.0.0", - "react-is": "^17.0.1" + "browserslist": "^4.21.4", + "postcss-value-parser": "^4.2.0" }, "engines": { - "node": ">= 10" + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" } }, - "node_modules/pretty-format/node_modules/@jest/types": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.6.2.tgz", - "integrity": "sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==", + "node_modules/postcss-discard-comments": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-5.1.2.tgz", + "integrity": "sha512-+L8208OVbHVF2UQf1iDmRcbdjJkuBF6IS29yBDSiWUIzpYaAhtNl6JYnYm12FnkeCwQqF5LeklOu6rAqgfBZqQ==", "dev": true, - "dependencies": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^15.0.0", - "chalk": "^4.0.0" - }, "engines": { - "node": ">= 10.14.2" + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" } }, - "node_modules/pretty-format/node_modules/@types/yargs": { - "version": "15.0.14", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.14.tgz", - "integrity": "sha512-yEJzHoxf6SyQGhBhIYGXQDSCkJjB6HohDShto7m8vaKg9Yp0Yn8+71J9eakh2bnPg6BfsH9PRMhiRTZnd4eXGQ==", + "node_modules/postcss-discard-duplicates": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-5.1.0.tgz", + "integrity": "sha512-zmX3IoSI2aoenxHV6C7plngHWWhUOV3sP1T8y2ifzxzbtnuhk1EdPwm0S1bIUNaJ2eNbWeGLEwzw8huPD67aQw==", "dev": true, - "dependencies": { - "@types/yargs-parser": "*" + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-discard-empty": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-5.1.1.tgz", + "integrity": "sha512-zPz4WljiSuLWsI0ir4Mcnr4qQQ5e1Ukc3i7UfE2XcrwKK2LIPIqE5jxMRxO6GbI3cv//ztXDsXwEWT3BHOGh3A==", + "dev": true, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-discard-overridden": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-5.1.0.tgz", + "integrity": "sha512-21nOL7RqWR1kasIVdKs8HNqQJhFxLsyRfAnUDm4Fe4t4mCWL9OJiHvlHPjcd8zc5Myu89b/7wZDnOSjFgeWRtw==", + "dev": true, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-load-config": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-3.1.4.tgz", + "integrity": "sha512-6DiM4E7v4coTE4uzA8U//WhtPwyhiim3eyjEMFCnUpzbrkK9wJHgKDT2mR+HbtSrd/NubVaYTOpSpjUl8NQeRg==", + "dev": true, + "dependencies": { + "lilconfig": "^2.0.5", + "yaml": "^1.10.2" + }, + "engines": { + "node": ">= 10" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + "peerDependencies": { + "postcss": ">=8.0.9", + "ts-node": ">=9.0.0" + }, + "peerDependenciesMeta": { + "postcss": { + "optional": true + }, + "ts-node": { + "optional": true + } + } + }, + "node_modules/postcss-merge-longhand": { + "version": "5.1.7", + "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-5.1.7.tgz", + "integrity": "sha512-YCI9gZB+PLNskrK0BB3/2OzPnGhPkBEwmwhfYk1ilBHYVAZB7/tkTHFBAnCrvBBOmeYyMYw3DMjT55SyxMBzjQ==", + "dev": true, + "dependencies": { + "postcss-value-parser": "^4.2.0", + "stylehacks": "^5.1.1" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-merge-rules": { + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-5.1.3.tgz", + "integrity": "sha512-LbLd7uFC00vpOuMvyZop8+vvhnfRGpp2S+IMQKeuOZZapPRY4SMq5ErjQeHbHsjCUgJkRNrlU+LmxsKIqPKQlA==", + "dev": true, + "dependencies": { + "browserslist": "^4.21.4", + "caniuse-api": "^3.0.0", + "cssnano-utils": "^3.1.0", + "postcss-selector-parser": "^6.0.5" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-minify-font-values": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-5.1.0.tgz", + "integrity": "sha512-el3mYTgx13ZAPPirSVsHqFzl+BBBDrXvbySvPGFnQcTI4iNslrPaFq4muTkLZmKlGk4gyFAYUBMH30+HurREyA==", + "dev": true, + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-minify-gradients": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-5.1.1.tgz", + "integrity": "sha512-VGvXMTpCEo4qHTNSa9A0a3D+dxGFZCYwR6Jokk+/3oB6flu2/PnPXAh2x7x52EkY5xlIHLm+Le8tJxe/7TNhzw==", + "dev": true, + "dependencies": { + "colord": "^2.9.1", + "cssnano-utils": "^3.1.0", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-minify-params": { + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-5.1.4.tgz", + "integrity": "sha512-+mePA3MgdmVmv6g+30rn57USjOGSAyuxUmkfiWpzalZ8aiBkdPYjXWtHuwJGm1v5Ojy0Z0LaSYhHaLJQB0P8Jw==", + "dev": true, + "dependencies": { + "browserslist": "^4.21.4", + "cssnano-utils": "^3.1.0", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-minify-selectors": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-5.2.1.tgz", + "integrity": "sha512-nPJu7OjZJTsVUmPdm2TcaiohIwxP+v8ha9NehQ2ye9szv4orirRU3SDdtUmKH+10nzn0bAyOXZ0UEr7OpvLehg==", + "dev": true, + "dependencies": { + "postcss-selector-parser": "^6.0.5" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-modules": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/postcss-modules/-/postcss-modules-4.3.1.tgz", + "integrity": "sha512-ItUhSUxBBdNamkT3KzIZwYNNRFKmkJrofvC2nWab3CPKhYBQ1f27XXh1PAPE27Psx58jeelPsxWB/+og+KEH0Q==", + "dev": true, + "dependencies": { + "generic-names": "^4.0.0", + "icss-replace-symbols": "^1.1.0", + "lodash.camelcase": "^4.3.0", + "postcss-modules-extract-imports": "^3.0.0", + "postcss-modules-local-by-default": "^4.0.0", + "postcss-modules-scope": "^3.0.0", + "postcss-modules-values": "^4.0.0", + "string-hash": "^1.1.1" + }, + "peerDependencies": { + "postcss": "^8.0.0" + } + }, + "node_modules/postcss-modules-extract-imports": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.0.0.tgz", + "integrity": "sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw==", + "dev": true, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-modules-local-by-default": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.0.tgz", + "integrity": "sha512-sT7ihtmGSF9yhm6ggikHdV0hlziDTX7oFoXtuVWeDd3hHObNkcHRo9V3yg7vCAY7cONyxJC/XXCmmiHHcvX7bQ==", + "dev": true, + "dependencies": { + "icss-utils": "^5.0.0", + "postcss-selector-parser": "^6.0.2", + "postcss-value-parser": "^4.1.0" + }, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-modules-scope": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.0.0.tgz", + "integrity": "sha512-hncihwFA2yPath8oZ15PZqvWGkWf+XUfQgUGamS4LqoP1anQLOsOJw0vr7J7IwLpoY9fatA2qiGUGmuZL0Iqlg==", + "dev": true, + "dependencies": { + "postcss-selector-parser": "^6.0.4" + }, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-modules-values": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz", + "integrity": "sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==", + "dev": true, + "dependencies": { + "icss-utils": "^5.0.0" + }, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-normalize-charset": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-5.1.0.tgz", + "integrity": "sha512-mSgUJ+pd/ldRGVx26p2wz9dNZ7ji6Pn8VWBajMXFf8jk7vUoSrZ2lt/wZR7DtlZYKesmZI680qjr2CeFF2fbUg==", + "dev": true, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-normalize-display-values": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-5.1.0.tgz", + "integrity": "sha512-WP4KIM4o2dazQXWmFaqMmcvsKmhdINFblgSeRgn8BJ6vxaMyaJkwAzpPpuvSIoG/rmX3M+IrRZEz2H0glrQNEA==", + "dev": true, + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-normalize-positions": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-5.1.1.tgz", + "integrity": "sha512-6UpCb0G4eofTCQLFVuI3EVNZzBNPiIKcA1AKVka+31fTVySphr3VUgAIULBhxZkKgwLImhzMR2Bw1ORK+37INg==", + "dev": true, + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-normalize-repeat-style": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-5.1.1.tgz", + "integrity": "sha512-mFpLspGWkQtBcWIRFLmewo8aC3ImN2i/J3v8YCFUwDnPu3Xz4rLohDO26lGjwNsQxB3YF0KKRwspGzE2JEuS0g==", + "dev": true, + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-normalize-string": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-5.1.0.tgz", + "integrity": "sha512-oYiIJOf4T9T1N4i+abeIc7Vgm/xPCGih4bZz5Nm0/ARVJ7K6xrDlLwvwqOydvyL3RHNf8qZk6vo3aatiw/go3w==", + "dev": true, + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-normalize-timing-functions": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-5.1.0.tgz", + "integrity": "sha512-DOEkzJ4SAXv5xkHl0Wa9cZLF3WCBhF3o1SKVxKQAa+0pYKlueTpCgvkFAHfk+Y64ezX9+nITGrDZeVGgITJXjg==", + "dev": true, + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-normalize-unicode": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-5.1.1.tgz", + "integrity": "sha512-qnCL5jzkNUmKVhZoENp1mJiGNPcsJCs1aaRmURmeJGES23Z/ajaln+EPTD+rBeNkSryI+2WTdW+lwcVdOikrpA==", + "dev": true, + "dependencies": { + "browserslist": "^4.21.4", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-normalize-url": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-5.1.0.tgz", + "integrity": "sha512-5upGeDO+PVthOxSmds43ZeMeZfKH+/DKgGRD7TElkkyS46JXAUhMzIKiCa7BabPeIy3AQcTkXwVVN7DbqsiCew==", + "dev": true, + "dependencies": { + "normalize-url": "^6.0.1", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-normalize-whitespace": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-5.1.1.tgz", + "integrity": "sha512-83ZJ4t3NUDETIHTa3uEg6asWjSBYL5EdkVB0sDncx9ERzOKBVJIUeDO9RyA9Zwtig8El1d79HBp0JEi8wvGQnA==", + "dev": true, + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-ordered-values": { + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-5.1.3.tgz", + "integrity": "sha512-9UO79VUhPwEkzbb3RNpqqghc6lcYej1aveQteWY+4POIwlqkYE21HKWaLDF6lWNuqCobEAyTovVhtI32Rbv2RQ==", + "dev": true, + "dependencies": { + "cssnano-utils": "^3.1.0", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-reduce-initial": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-5.1.1.tgz", + "integrity": "sha512-//jeDqWcHPuXGZLoolFrUXBDyuEGbr9S2rMo19bkTIjBQ4PqkaO+oI8wua5BOUxpfi97i3PCoInsiFIEBfkm9w==", + "dev": true, + "dependencies": { + "browserslist": "^4.21.4", + "caniuse-api": "^3.0.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-reduce-transforms": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-5.1.0.tgz", + "integrity": "sha512-2fbdbmgir5AvpW9RLtdONx1QoYG2/EtqpNQbFASDlixBbAYuTcJ0dECwlqNqH7VbaUnEnh8SrxOe2sRIn24XyQ==", + "dev": true, + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-selector-parser": { + "version": "6.0.11", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.11.tgz", + "integrity": "sha512-zbARubNdogI9j7WY4nQJBiNqQf3sLS3wCP4WfOidu+p28LofJqDH1tcXypGrcmMHhDk2t9wGhCsYe/+szLTy1g==", + "dev": true, + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-svgo": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-5.1.0.tgz", + "integrity": "sha512-D75KsH1zm5ZrHyxPakAxJWtkyXew5qwS70v56exwvw542d9CRtTo78K0WeFxZB4G7JXKKMbEZtZayTGdIky/eA==", + "dev": true, + "dependencies": { + "postcss-value-parser": "^4.2.0", + "svgo": "^2.7.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-unique-selectors": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-5.1.1.tgz", + "integrity": "sha512-5JiODlELrz8L2HwxfPnhOWZYWDxVHWL83ufOv84NrcgipI7TaeRsatAhK4Tr2/ZiYldpK/wBvw5BD3qfaK96GA==", + "dev": true, + "dependencies": { + "postcss-selector-parser": "^6.0.5" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-value-parser": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", + "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", + "dev": true + }, + "node_modules/prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/prepend-http": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz", + "integrity": "sha512-ravE6m9Atw9Z/jjttRUZ+clIXogdghyZAuWJ3qEzjT+jI/dL1ifAqhZeC5VHzQp1MSt1+jxKkFNemj/iO7tVUA==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/prettier": { + "version": "2.8.3", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.3.tgz", + "integrity": "sha512-tJ/oJ4amDihPoufT5sM0Z1SKEuKay8LfVAMlbbhnnkvt6BUserZylqo2PN+p9KeljLr0OHa2rXHU1T8reeoTrw==", + "dev": true, + "bin": { + "prettier": "bin-prettier.js" + }, + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" + } + }, + "node_modules/pretty-bytes": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-5.6.0.tgz", + "integrity": "sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg==", + "dev": true, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/pretty-format": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-26.6.2.tgz", + "integrity": "sha512-7AeGuCYNGmycyQbCqd/3PWH4eOoX/OiCa0uphp57NVTeAGdJGaAliecxwBDHYQCIvrW7aDBZCYeNTP/WX69mkg==", + "dev": true, + "dependencies": { + "@jest/types": "^26.6.2", + "ansi-regex": "^5.0.0", + "ansi-styles": "^4.0.0", + "react-is": "^17.0.1" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/pretty-format/node_modules/@jest/types": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.6.2.tgz", + "integrity": "sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==", + "dev": true, + "dependencies": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^15.0.0", + "chalk": "^4.0.0" + }, + "engines": { + "node": ">= 10.14.2" + } + }, + "node_modules/pretty-format/node_modules/@types/yargs": { + "version": "15.0.14", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.14.tgz", + "integrity": "sha512-yEJzHoxf6SyQGhBhIYGXQDSCkJjB6HohDShto7m8vaKg9Yp0Yn8+71J9eakh2bnPg6BfsH9PRMhiRTZnd4eXGQ==", + "dev": true, + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/promise.series": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/promise.series/-/promise.series-0.2.0.tgz", + "integrity": "sha512-VWQJyU2bcDTgZw8kpfBpB/ejZASlCrzwz5f2hjb/zlujOEB4oeiAhHygAWq8ubsX2GVkD4kCU5V2dwOTaCY5EQ==", + "dev": true, + "engines": { + "node": ">=0.12" } }, "node_modules/prompts": { @@ -13343,78 +14769,157 @@ "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", "dev": true, "engines": { - "iojs": ">=1.0.0", - "node": ">=0.10.0" + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/rfdc": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.3.0.tgz", + "integrity": "sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA==", + "dev": true + }, + "node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/rollup": { + "version": "2.79.1", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.79.1.tgz", + "integrity": "sha512-uKxbd0IhMZOhjAiD5oAFp7BqvkA4Dv47qpOCtaNvng4HBwdbWtdOh8f5nZNuk2rp51PMGk3bzfWu5oayNEuYnw==", + "dev": true, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=10.0.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/rollup-plugin-bundle-size": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/rollup-plugin-bundle-size/-/rollup-plugin-bundle-size-1.0.3.tgz", + "integrity": "sha512-aWj0Pvzq90fqbI5vN1IvUrlf4utOqy+AERYxwWjegH1G8PzheMnrRIgQ5tkwKVtQMDP0bHZEACW/zLDF+XgfXQ==", + "dev": true, + "dependencies": { + "chalk": "^1.1.3", + "maxmin": "^2.1.0" + } + }, + "node_modules/rollup-plugin-bundle-size/node_modules/ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/rollup-plugin-bundle-size/node_modules/ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha512-kmCevFghRiWM7HB5zTPULl4r9bVFSWjz62MhqizDGUrq2NWuNMQyuv4tHHoKJHs69M/MF64lEcHdYIocrdWQYA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/rollup-plugin-bundle-size/node_modules/chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A==", + "dev": true, + "dependencies": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/rollup-plugin-bundle-size/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true, + "engines": { + "node": ">=0.8.0" } }, - "node_modules/rfdc": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.3.0.tgz", - "integrity": "sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA==", - "dev": true - }, - "node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "node_modules/rollup-plugin-bundle-size/node_modules/strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==", "dev": true, "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" + "ansi-regex": "^2.0.0" }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "engines": { + "node": ">=0.10.0" } }, - "node_modules/rollup": { - "version": "2.79.1", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.79.1.tgz", - "integrity": "sha512-uKxbd0IhMZOhjAiD5oAFp7BqvkA4Dv47qpOCtaNvng4HBwdbWtdOh8f5nZNuk2rp51PMGk3bzfWu5oayNEuYnw==", + "node_modules/rollup-plugin-bundle-size/node_modules/supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha512-KKNVtd6pCYgPIKU4cp2733HWYCpplQhddZLBUryaAHou723x+FRzQ5Df824Fj+IyyuiQTRoub4SnIFfIcrp70g==", "dev": true, - "bin": { - "rollup": "dist/bin/rollup" - }, "engines": { - "node": ">=10.0.0" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" + "node": ">=0.8.0" } }, - "node_modules/rollup-plugin-prettier": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/rollup-plugin-prettier/-/rollup-plugin-prettier-2.3.0.tgz", - "integrity": "sha512-4jE47L78+MJd6teTRk620mZRX3xZlMx9cTFDJjoR7S37ZDFlJo6xprBraemjVckcVDKdMsG0eppV778V83jbmQ==", + "node_modules/rollup-plugin-postcss": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/rollup-plugin-postcss/-/rollup-plugin-postcss-4.0.2.tgz", + "integrity": "sha512-05EaY6zvZdmvPUDi3uCcAQoESDcYnv8ogJJQRp6V5kZ6J6P7uAVJlrTZcaaA20wTH527YTnKfkAoPxWI/jPp4w==", "dev": true, "dependencies": { - "@types/prettier": "^1.0.0 || ^2.0.0", - "diff": "5.1.0", - "lodash.hasin": "4.5.2", - "lodash.isempty": "4.4.0", - "lodash.isnil": "4.0.0", - "lodash.omitby": "4.6.0", - "magic-string": "0.26.7" + "chalk": "^4.1.0", + "concat-with-sourcemaps": "^1.1.0", + "cssnano": "^5.0.1", + "import-cwd": "^3.0.0", + "p-queue": "^6.6.2", + "pify": "^5.0.0", + "postcss-load-config": "^3.0.0", + "postcss-modules": "^4.0.0", + "promise.series": "^0.2.0", + "resolve": "^1.19.0", + "rollup-pluginutils": "^2.8.2", + "safe-identifier": "^0.4.2", + "style-inject": "^0.3.0" }, "engines": { - "node": ">=6.0.0" + "node": ">=10" }, "peerDependencies": { - "prettier": "^1.0.0 || ^2.0.0", - "rollup": "^1.0.0 || ^2.0.0" + "postcss": "8.x" } }, - "node_modules/rollup-plugin-prettier/node_modules/magic-string": { - "version": "0.26.7", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.26.7.tgz", - "integrity": "sha512-hX9XH3ziStPoPhJxLq1syWuZMxbDvGNbVchfrdCtanC7D13888bMFow61x8axrx+GfHLtVeAx2kxL7tTGRl+Ow==", + "node_modules/rollup-plugin-postcss/node_modules/pify": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-5.0.0.tgz", + "integrity": "sha512-eW/gHNMlxdSP6dmG6uJip6FXN0EQBwm2clYYd8Wul42Cwu/DK8HEftzsapcNdYe2MfLiIwZqsDk2RDEsTE79hA==", "dev": true, - "dependencies": { - "sourcemap-codec": "^1.4.8" - }, "engines": { - "node": ">=12" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/rollup-plugin-terser": { @@ -13448,38 +14953,185 @@ } }, "node_modules/rollup-plugin-typescript2": { - "version": "0.27.3", - "resolved": "https://registry.npmjs.org/rollup-plugin-typescript2/-/rollup-plugin-typescript2-0.27.3.tgz", - "integrity": "sha512-gmYPIFmALj9D3Ga1ZbTZAKTXq1JKlTQBtj299DXhqYz9cL3g/AQfUvbb2UhH+Nf++cCq941W2Mv7UcrcgLzJJg==", + "version": "0.32.1", + "resolved": "https://registry.npmjs.org/rollup-plugin-typescript2/-/rollup-plugin-typescript2-0.32.1.tgz", + "integrity": "sha512-RanO8bp1WbeMv0bVlgcbsFNCn+Y3rX7wF97SQLDxf0fMLsg0B/QFF005t4AsGUcDgF3aKJHoqt4JF2xVaABeKw==", "dev": true, "dependencies": { - "@rollup/pluginutils": "^3.1.0", - "find-cache-dir": "^3.3.1", - "fs-extra": "8.1.0", - "resolve": "1.17.0", - "tslib": "2.0.1" + "@rollup/pluginutils": "^4.1.2", + "find-cache-dir": "^3.3.2", + "fs-extra": "^10.0.0", + "resolve": "^1.20.0", + "tslib": "^2.4.0" }, "peerDependencies": { "rollup": ">=1.26.3", "typescript": ">=2.4.0" } }, - "node_modules/rollup-plugin-typescript2/node_modules/resolve": { - "version": "1.17.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.17.0.tgz", - "integrity": "sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w==", + "node_modules/rollup-plugin-typescript2/node_modules/@rollup/pluginutils": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-4.2.1.tgz", + "integrity": "sha512-iKnFXr7NkdZAIHiIWE+BX5ULi/ucVFYWD6TbAV+rZctiRTY2PL6tsIKhoIOaoskiWAkgu+VsbXgUVDNLHf+InQ==", + "dev": true, + "dependencies": { + "estree-walker": "^2.0.1", + "picomatch": "^2.2.2" + }, + "engines": { + "node": ">= 8.0.0" + } + }, + "node_modules/rollup-plugin-typescript2/node_modules/fs-extra": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", + "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/rollup-plugin-typescript2/node_modules/jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dev": true, + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/rollup-plugin-typescript2/node_modules/universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "dev": true, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/rollup-plugin-visualizer": { + "version": "5.9.0", + "resolved": "https://registry.npmjs.org/rollup-plugin-visualizer/-/rollup-plugin-visualizer-5.9.0.tgz", + "integrity": "sha512-bbDOv47+Bw4C/cgs0czZqfm8L82xOZssk4ayZjG40y9zbXclNk7YikrZTDao6p7+HDiGxrN0b65SgZiVm9k1Cg==", + "dev": true, + "dependencies": { + "open": "^8.4.0", + "picomatch": "^2.3.1", + "source-map": "^0.7.4", + "yargs": "^17.5.1" + }, + "bin": { + "rollup-plugin-visualizer": "dist/bin/cli.js" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "rollup": "2.x || 3.x" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + } + } + }, + "node_modules/rollup-plugin-visualizer/node_modules/cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "dev": true, + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/rollup-plugin-visualizer/node_modules/open": { + "version": "8.4.0", + "resolved": "https://registry.npmjs.org/open/-/open-8.4.0.tgz", + "integrity": "sha512-XgFPPM+B28FtCCgSb9I+s9szOC1vZRSwgWsRUA5ylIxRTgKozqjOCrVOqGsYABPYK5qnfqClxZTFBa8PKt2v6Q==", "dev": true, "dependencies": { - "path-parse": "^1.0.6" + "define-lazy-prop": "^2.0.0", + "is-docker": "^2.1.1", + "is-wsl": "^2.2.0" + }, + "engines": { + "node": ">=12" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/rollup-plugin-typescript2/node_modules/tslib": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.0.1.tgz", - "integrity": "sha512-SgIkNheinmEBgx1IUNirK0TUD4X9yjjBRTqqjggWCU3pUEqIk3/Uwl3yRixYKT6WjQuGiwDv4NomL3wqRCj+CQ==", + "node_modules/rollup-plugin-visualizer/node_modules/source-map": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", + "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/rollup-plugin-visualizer/node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/rollup-plugin-visualizer/node_modules/yargs": { + "version": "17.6.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.6.2.tgz", + "integrity": "sha512-1/9UrdHjDZc0eOU0HxOHoS78C69UD3JRMvzlJ7S79S2nTaWRA/whGCTV8o9e/N/1Va9YIV7Q4sOxD8VV4pCWOw==", + "dev": true, + "dependencies": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/rollup-plugin-visualizer/node_modules/yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "dev": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/rollup-pluginutils": { + "version": "2.8.2", + "resolved": "https://registry.npmjs.org/rollup-pluginutils/-/rollup-pluginutils-2.8.2.tgz", + "integrity": "sha512-EEp9NhnUkwY8aif6bxgovPHMoMoNr2FulJziTndpt5H9RdwC47GSGuII9XxpSdzVGM0GWrNPHV6ie1LTNJPaLQ==", + "dev": true, + "dependencies": { + "estree-walker": "^0.6.1" + } + }, + "node_modules/rollup-pluginutils/node_modules/estree-walker": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-0.6.1.tgz", + "integrity": "sha512-SqmZANLWS0mnatqbSfRP5g8OXZC12Fgg1IwNtLsyHDzJizORW4khDfjPqJZsemPWBB2uqykUah5YpQ6epsqC/w==", "dev": true }, "node_modules/run-async": { @@ -13532,6 +15184,18 @@ "tslib": "^2.1.0" } }, + "node_modules/sade": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/sade/-/sade-1.8.1.tgz", + "integrity": "sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A==", + "dev": true, + "dependencies": { + "mri": "^1.1.0" + }, + "engines": { + "node": ">=6" + } + }, "node_modules/safe-buffer": { "version": "5.2.1", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", @@ -13552,6 +15216,12 @@ } ] }, + "node_modules/safe-identifier": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/safe-identifier/-/safe-identifier-0.4.2.tgz", + "integrity": "sha512-6pNbSMW6OhAi9j+N8V+U715yBQsaWJ7eyEUaOrawX+isg5ZxhUlV1NipNtgaKHmFGiABwt+ZF04Ii+3Xjkg+8w==", + "dev": true + }, "node_modules/safe-regex-test": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.0.tgz", @@ -13794,6 +15464,15 @@ "node": ">=0.10.0" } }, + "node_modules/source-map-js": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", + "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/source-map-support": { "version": "0.5.13", "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.13.tgz", @@ -13895,6 +15574,13 @@ "node": ">=0.10.0" } }, + "node_modules/stable": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/stable/-/stable-0.1.8.tgz", + "integrity": "sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==", + "deprecated": "Modern JS already guarantees Array#sort() is a stable sort, so this library is deprecated. See the compatibility table on MDN: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort#browser_compatibility", + "dev": true + }, "node_modules/stack-utils": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz", @@ -13934,6 +15620,12 @@ "node": ">=0.6.19" } }, + "node_modules/string-hash": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/string-hash/-/string-hash-1.1.3.tgz", + "integrity": "sha512-kJUvRUFK49aub+a7T1nNE66EJbZBMnBgoC1UbCZ5n6bsZKBRga4KgBRTMn/pFkeCZSYtNeSyMxPDM0AXWELk2A==", + "dev": true + }, "node_modules/string-length": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz", @@ -13961,6 +15653,25 @@ "node": ">=8" } }, + "node_modules/string.prototype.matchall": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.8.tgz", + "integrity": "sha512-6zOCOcJ+RJAQshcTvXPHoxoQGONa3e/Lqx90wUA+wEzX78sg5Bo+1tQo4N0pohS0erG9qtCqJDjNCQBjeWVxyg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4", + "get-intrinsic": "^1.1.3", + "has-symbols": "^1.0.3", + "internal-slot": "^1.0.3", + "regexp.prototype.flags": "^1.4.3", + "side-channel": "^1.0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/string.prototype.trimend": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.6.tgz", @@ -14075,6 +15786,28 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/style-inject": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/style-inject/-/style-inject-0.3.0.tgz", + "integrity": "sha512-IezA2qp+vcdlhJaVm5SOdPPTUu0FCEqfNSli2vRuSIBbu5Nq5UvygTk/VzeCqfLz2Atj3dVII5QBKGZRZ0edzw==", + "dev": true + }, + "node_modules/stylehacks": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-5.1.1.tgz", + "integrity": "sha512-sBpcd5Hx7G6seo7b1LkpttvTz7ikD0LlH5RmdcBNb6fFR0Fl7LQwHDFr300q4cwUqi+IYrFGmsIHieMBfnN/Bw==", + "dev": true, + "dependencies": { + "browserslist": "^4.21.4", + "postcss-selector-parser": "^6.0.4" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, "node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -14112,6 +15845,36 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/svgo": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/svgo/-/svgo-2.8.0.tgz", + "integrity": "sha512-+N/Q9kV1+F+UeWYoSiULYo4xYSDQlTgb+ayMobAXPwMnLvop7oxKMo9OzIrX5x3eS4L4f2UHhc9axXwY8DpChg==", + "dev": true, + "dependencies": { + "@trysound/sax": "0.2.0", + "commander": "^7.2.0", + "css-select": "^4.1.3", + "css-tree": "^1.1.3", + "csso": "^4.2.0", + "picocolors": "^1.0.0", + "stable": "^0.1.8" + }, + "bin": { + "svgo": "bin/svgo" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/svgo/node_modules/commander": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", + "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", + "dev": true, + "engines": { + "node": ">= 10" + } + }, "node_modules/symbol-observable": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-1.2.0.tgz", @@ -14236,6 +15999,16 @@ "node": ">=0.10.0" } }, + "node_modules/tiny-glob": { + "version": "0.2.9", + "resolved": "https://registry.npmjs.org/tiny-glob/-/tiny-glob-0.2.9.tgz", + "integrity": "sha512-g/55ssRPUjShh+xkfx9UPDXqhckHEsHr4Vd9zX55oSdGZc/MD0m3sferOkwWtp98bv+kcVfEHtRJgBVJzelrzg==", + "dev": true, + "dependencies": { + "globalyzer": "0.1.0", + "globrex": "^0.1.2" + } + }, "node_modules/tmp": { "version": "0.0.33", "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", @@ -15460,6 +17233,12 @@ "node": ">=0.3.1" } }, + "node_modules/tsafe": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/tsafe/-/tsafe-1.4.1.tgz", + "integrity": "sha512-3IDBalvf6SyvHFS14UiwCWzqdSdo+Q0k2J7DZyJYaHW/iraW9DJpaBKDJpry3yQs3o/t/A+oGaRW3iVt2lKxzA==", + "dev": true + }, "node_modules/tsconfig-paths": { "version": "3.14.1", "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.14.1.tgz", @@ -16802,6 +18581,15 @@ "@babel/helper-plugin-utils": "^7.8.3" } }, + "@babel/plugin-syntax-flow": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.18.6.tgz", + "integrity": "sha512-LUbR+KNTBWCUAqRG9ex5Gnzu2IOkt8jRJbHHXFT9q+L9zm7M/QQbEqXyw1n1pohYvOyWC8CjeyjrSaIwiYjK7A==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.6" + } + }, "@babel/plugin-syntax-import-assertions": { "version": "7.20.0", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.20.0.tgz", @@ -17029,6 +18817,16 @@ "@babel/helper-plugin-utils": "^7.18.6" } }, + "@babel/plugin-transform-flow-strip-types": { + "version": "7.19.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.19.0.tgz", + "integrity": "sha512-sgeMlNaQVbCSpgLSKP4ZZKfsJVnFnNQlUSk6gPYzR/q7tzCgQF2t8RBKAP6cKJeZdveei7Q7Jm527xepI8lNLg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.19.0", + "@babel/plugin-syntax-flow": "^7.18.6" + } + }, "@babel/plugin-transform-for-of": { "version": "7.18.8", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.18.8.tgz", @@ -17157,6 +18955,47 @@ "@babel/helper-plugin-utils": "^7.18.6" } }, + "@babel/plugin-transform-react-display-name": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.18.6.tgz", + "integrity": "sha512-TV4sQ+T013n61uMoygyMRm+xf04Bd5oqFpv2jAEQwSZ8NwQA7zeRPg1LMVg2PWi3zWBz+CLKD+v5bcpZ/BS0aA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/plugin-transform-react-jsx": { + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.20.7.tgz", + "integrity": "sha512-Tfq7qqD+tRj3EoDhY00nn2uP2hsRxgYGi5mLQ5TimKav0a9Lrpd4deE+fcLXU8zFYRjlKPHZhpCvfEA6qnBxqQ==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.18.6", + "@babel/helper-module-imports": "^7.18.6", + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/plugin-syntax-jsx": "^7.18.6", + "@babel/types": "^7.20.7" + } + }, + "@babel/plugin-transform-react-jsx-development": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.18.6.tgz", + "integrity": "sha512-SA6HEjwYFKF7WDjWcMcMGUimmw/nhNRDWxr+KaLSCrkD/LMDBvWRmHAYgE1HDeF8KUuI8OAu+RT6EOtKxSW2qA==", + "dev": true, + "requires": { + "@babel/plugin-transform-react-jsx": "^7.18.6" + } + }, + "@babel/plugin-transform-react-pure-annotations": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.18.6.tgz", + "integrity": "sha512-I8VfEPg9r2TRDdvnHgPepTKvuRomzA8+u+nhY7qSI1fR2hRNebasZEETLyM5mAUr0Ku56OkXJ0I7NHJnO6cJiQ==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + } + }, "@babel/plugin-transform-regenerator": { "version": "7.20.5", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.20.5.tgz", @@ -17350,6 +19189,17 @@ } } }, + "@babel/preset-flow": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/preset-flow/-/preset-flow-7.18.6.tgz", + "integrity": "sha512-E7BDhL64W6OUqpuyHnSroLnqyRTcG6ZdOBl1OKI/QK/HJfplqK/S3sq1Cckx7oTodJ5yOXyfw7rEADJ6UjoQDQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/helper-validator-option": "^7.18.6", + "@babel/plugin-transform-flow-strip-types": "^7.18.6" + } + }, "@babel/preset-modules": { "version": "0.1.5", "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.5.tgz", @@ -17363,6 +19213,20 @@ "esutils": "^2.0.2" } }, + "@babel/preset-react": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.18.6.tgz", + "integrity": "sha512-zXr6atUmyYdiWRVLOZahakYmOBHtWc2WGCkP8PYTgZi0iJXDY2CN180TdrIW4OGOAdLc7TifzDIvtx6izaRIzg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/helper-validator-option": "^7.18.6", + "@babel/plugin-transform-react-display-name": "^7.18.6", + "@babel/plugin-transform-react-jsx": "^7.18.6", + "@babel/plugin-transform-react-jsx-development": "^7.18.6", + "@babel/plugin-transform-react-pure-annotations": "^7.18.6" + } + }, "@babel/register": { "version": "7.18.9", "resolved": "https://registry.npmjs.org/@babel/register/-/register-7.18.9.tgz", @@ -17514,9 +19378,9 @@ } }, "@babel/types": { - "version": "7.20.5", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.20.5.tgz", - "integrity": "sha512-c9fst/h2/dcF7H+MJKZ2T0KjEQ8hY/BNnDk/H3XY8C4Aw/eWQXWn/lWntHF9ooUBnGmEvbfGrTgLWc+um0YDUg==", + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.20.7.tgz", + "integrity": "sha512-69OnhBxSSgK0OzTJai4kyPDiKTIe3j+ctaHdIGVbRahTLAT7L3R9oeXHC2aVSuGYt3cVnoAMDmOCgJ2yaiLMvg==", "dev": true, "requires": { "@babel/helper-string-parser": "^7.19.4", @@ -17730,9 +19594,9 @@ "optional": true }, "@eslint/eslintrc": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.4.0.tgz", - "integrity": "sha512-7yfvXy6MWLgWSFsLhz5yH3iQ52St8cdUY6FoGieKkRDVxuxmrNuUetIuu6cmjNWwniUHiWXjxCr5tTXDrbYS5A==", + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.4.1.tgz", + "integrity": "sha512-XXrH9Uarn0stsyldqDYq8r++mROmWRI1xKMXa640Bb//SY1+ECYX6VzT6Lcx5frD0V30XieqJ0oX9I2Xj5aoMA==", "dev": true, "requires": { "ajv": "^6.12.4", @@ -18267,10 +20131,29 @@ "@octokit/openapi-types": "^12.11.0" } }, + "@rollup/plugin-alias": { + "version": "3.1.9", + "resolved": "https://registry.npmjs.org/@rollup/plugin-alias/-/plugin-alias-3.1.9.tgz", + "integrity": "sha512-QI5fsEvm9bDzt32k39wpOwZhVzRcL5ydcffUHMyLVaVaLeC70I8TJZ17F1z1eMoLu4E/UOcH9BWVkKpIKdrfiw==", + "dev": true, + "requires": { + "slash": "^3.0.0" + } + }, + "@rollup/plugin-babel": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/@rollup/plugin-babel/-/plugin-babel-5.3.1.tgz", + "integrity": "sha512-WFfdLWU/xVWKeRQnKmIAQULUI7Il0gZnBIH/ZFO069wYIfPu+8zrfp/KMW0atmELoRDq8FbiP3VCss9MhCut7Q==", + "dev": true, + "requires": { + "@babel/helper-module-imports": "^7.10.4", + "@rollup/pluginutils": "^3.1.0" + } + }, "@rollup/plugin-commonjs": { - "version": "15.1.0", - "resolved": "https://registry.npmjs.org/@rollup/plugin-commonjs/-/plugin-commonjs-15.1.0.tgz", - "integrity": "sha512-xCQqz4z/o0h2syQ7d9LskIMvBSH4PX5PjYdpSSvgS+pQik3WahkQVNWg3D8XJeYjZoVWnIUQYDghuEMRGrmQYQ==", + "version": "17.1.0", + "resolved": "https://registry.npmjs.org/@rollup/plugin-commonjs/-/plugin-commonjs-17.1.0.tgz", + "integrity": "sha512-PoMdXCw0ZyvjpCMT5aV4nkL0QywxP29sODQsSGeDpr/oI49Qq9tRtAsb/LbYbDzFlOydVEqHmmZWFtXJEAX9ew==", "dev": true, "requires": { "@rollup/pluginutils": "^3.1.0", @@ -18282,10 +20165,19 @@ "resolve": "^1.17.0" } }, + "@rollup/plugin-json": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/@rollup/plugin-json/-/plugin-json-4.1.0.tgz", + "integrity": "sha512-yfLbTdNS6amI/2OpmbiBoW12vngr5NW2jCJVZSBEz+H5KfUJZ2M7sDjk0U6GOOdCWFVScShte29o9NezJ53TPw==", + "dev": true, + "requires": { + "@rollup/pluginutils": "^3.0.8" + } + }, "@rollup/plugin-node-resolve": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-9.0.0.tgz", - "integrity": "sha512-gPz+utFHLRrd41WMP13Jq5mqqzHL3OXrfj3/MkSyB6UBIcuNt9j60GCbarzMzdf1VHFpOxfQh/ez7wyadLMqkg==", + "version": "11.2.1", + "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-11.2.1.tgz", + "integrity": "sha512-yc2n43jcqVyGE2sqV5/YCmocy9ArjVAP/BeXyTtADTBBX6V0e5UMqwO8CdQ0kzjb6zu5P1qMzsScCMRvE9OlVg==", "dev": true, "requires": { "@rollup/pluginutils": "^3.1.0", @@ -18293,7 +20185,7 @@ "builtin-modules": "^3.1.0", "deepmerge": "^4.2.2", "is-module": "^1.0.0", - "resolve": "^1.17.0" + "resolve": "^1.19.0" } }, "@rollup/pluginutils": { @@ -18402,6 +20294,18 @@ "@size-limit/file": "8.1.0" } }, + "@surma/rollup-plugin-off-main-thread": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/@surma/rollup-plugin-off-main-thread/-/rollup-plugin-off-main-thread-2.2.3.tgz", + "integrity": "sha512-lR8q/9W7hZpMWweNiAKU7NQerBnzQQLvi8qnTDU/fxItPhtZVMbPV3lbCwjhIlNBe9Bbr5V+KHshvWmVSG9cxQ==", + "dev": true, + "requires": { + "ejs": "^3.1.6", + "json5": "^2.2.0", + "magic-string": "^0.25.0", + "string.prototype.matchall": "^4.0.6" + } + }, "@szmarczak/http-timer": { "version": "4.0.6", "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-4.0.6.tgz", @@ -18411,6 +20315,12 @@ "defer-to-connect": "^2.0.0" } }, + "@trysound/sax": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/@trysound/sax/-/sax-0.2.0.tgz", + "integrity": "sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==", + "dev": true + }, "@tsconfig/node10": { "version": "1.0.9", "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.9.tgz", @@ -18662,14 +20572,14 @@ "dev": true }, "@typescript-eslint/eslint-plugin": { - "version": "5.46.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.46.1.tgz", - "integrity": "sha512-YpzNv3aayRBwjs4J3oz65eVLXc9xx0PDbIRisHj+dYhvBn02MjYOD96P8YGiWEIFBrojaUjxvkaUpakD82phsA==", + "version": "5.48.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.48.2.tgz", + "integrity": "sha512-sR0Gja9Ky1teIq4qJOl0nC+Tk64/uYdX+mi+5iB//MH8gwyx8e3SOyhEzeLZEFEEfCaLf8KJq+Bd/6je1t+CAg==", "dev": true, "requires": { - "@typescript-eslint/scope-manager": "5.46.1", - "@typescript-eslint/type-utils": "5.46.1", - "@typescript-eslint/utils": "5.46.1", + "@typescript-eslint/scope-manager": "5.48.2", + "@typescript-eslint/type-utils": "5.48.2", + "@typescript-eslint/utils": "5.48.2", "debug": "^4.3.4", "ignore": "^5.2.0", "natural-compare-lite": "^1.4.0", @@ -18690,53 +20600,53 @@ } }, "@typescript-eslint/parser": { - "version": "5.46.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.46.1.tgz", - "integrity": "sha512-RelQ5cGypPh4ySAtfIMBzBGyrNerQcmfA1oJvPj5f+H4jI59rl9xxpn4bonC0tQvUKOEN7eGBFWxFLK3Xepneg==", + "version": "5.48.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.48.2.tgz", + "integrity": "sha512-38zMsKsG2sIuM5Oi/olurGwYJXzmtdsHhn5mI/pQogP+BjYVkK5iRazCQ8RGS0V+YLk282uWElN70zAAUmaYHw==", "dev": true, "requires": { - "@typescript-eslint/scope-manager": "5.46.1", - "@typescript-eslint/types": "5.46.1", - "@typescript-eslint/typescript-estree": "5.46.1", + "@typescript-eslint/scope-manager": "5.48.2", + "@typescript-eslint/types": "5.48.2", + "@typescript-eslint/typescript-estree": "5.48.2", "debug": "^4.3.4" } }, "@typescript-eslint/scope-manager": { - "version": "5.46.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.46.1.tgz", - "integrity": "sha512-iOChVivo4jpwUdrJZyXSMrEIM/PvsbbDOX1y3UCKjSgWn+W89skxWaYXACQfxmIGhPVpRWK/VWPYc+bad6smIA==", + "version": "5.48.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.48.2.tgz", + "integrity": "sha512-zEUFfonQid5KRDKoI3O+uP1GnrFd4tIHlvs+sTJXiWuypUWMuDaottkJuR612wQfOkjYbsaskSIURV9xo4f+Fw==", "dev": true, "requires": { - "@typescript-eslint/types": "5.46.1", - "@typescript-eslint/visitor-keys": "5.46.1" + "@typescript-eslint/types": "5.48.2", + "@typescript-eslint/visitor-keys": "5.48.2" } }, "@typescript-eslint/type-utils": { - "version": "5.46.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.46.1.tgz", - "integrity": "sha512-V/zMyfI+jDmL1ADxfDxjZ0EMbtiVqj8LUGPAGyBkXXStWmCUErMpW873zEHsyguWCuq2iN4BrlWUkmuVj84yng==", + "version": "5.48.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.48.2.tgz", + "integrity": "sha512-QVWx7J5sPMRiOMJp5dYshPxABRoZV1xbRirqSk8yuIIsu0nvMTZesKErEA3Oix1k+uvsk8Cs8TGJ6kQ0ndAcew==", "dev": true, "requires": { - "@typescript-eslint/typescript-estree": "5.46.1", - "@typescript-eslint/utils": "5.46.1", + "@typescript-eslint/typescript-estree": "5.48.2", + "@typescript-eslint/utils": "5.48.2", "debug": "^4.3.4", "tsutils": "^3.21.0" } }, "@typescript-eslint/types": { - "version": "5.46.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.46.1.tgz", - "integrity": "sha512-Z5pvlCaZgU+93ryiYUwGwLl9AQVB/PQ1TsJ9NZ/gHzZjN7g9IAn6RSDkpCV8hqTwAiaj6fmCcKSQeBPlIpW28w==", + "version": "5.48.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.48.2.tgz", + "integrity": "sha512-hE7dA77xxu7ByBc6KCzikgfRyBCTst6dZQpwaTy25iMYOnbNljDT4hjhrGEJJ0QoMjrfqrx+j1l1B9/LtKeuqA==", "dev": true }, "@typescript-eslint/typescript-estree": { - "version": "5.46.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.46.1.tgz", - "integrity": "sha512-j9W4t67QiNp90kh5Nbr1w92wzt+toiIsaVPnEblB2Ih2U9fqBTyqV9T3pYWZBRt6QoMh/zVWP59EpuCjc4VRBg==", + "version": "5.48.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.48.2.tgz", + "integrity": "sha512-bibvD3z6ilnoVxUBFEgkO0k0aFvUc4Cttt0dAreEr+nrAHhWzkO83PEVVuieK3DqcgL6VAK5dkzK8XUVja5Zcg==", "dev": true, "requires": { - "@typescript-eslint/types": "5.46.1", - "@typescript-eslint/visitor-keys": "5.46.1", + "@typescript-eslint/types": "5.48.2", + "@typescript-eslint/visitor-keys": "5.48.2", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", @@ -18756,16 +20666,16 @@ } }, "@typescript-eslint/utils": { - "version": "5.46.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.46.1.tgz", - "integrity": "sha512-RBdBAGv3oEpFojaCYT4Ghn4775pdjvwfDOfQ2P6qzNVgQOVrnSPe5/Pb88kv7xzYQjoio0eKHKB9GJ16ieSxvA==", + "version": "5.48.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.48.2.tgz", + "integrity": "sha512-2h18c0d7jgkw6tdKTlNaM7wyopbLRBiit8oAxoP89YnuBOzCZ8g8aBCaCqq7h208qUTroL7Whgzam7UY3HVLow==", "dev": true, "requires": { "@types/json-schema": "^7.0.9", "@types/semver": "^7.3.12", - "@typescript-eslint/scope-manager": "5.46.1", - "@typescript-eslint/types": "5.46.1", - "@typescript-eslint/typescript-estree": "5.46.1", + "@typescript-eslint/scope-manager": "5.48.2", + "@typescript-eslint/types": "5.48.2", + "@typescript-eslint/typescript-estree": "5.48.2", "eslint-scope": "^5.1.1", "eslint-utils": "^3.0.0", "semver": "^7.3.7" @@ -18783,12 +20693,12 @@ } }, "@typescript-eslint/visitor-keys": { - "version": "5.46.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.46.1.tgz", - "integrity": "sha512-jczZ9noovXwy59KjRTk1OftT78pwygdcmCuBf8yMoWt/8O8l+6x2LSEze0E4TeepXK4MezW3zGSyoDRZK7Y9cg==", + "version": "5.48.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.48.2.tgz", + "integrity": "sha512-z9njZLSkwmjFWUelGEwEbdf4NwKvfHxvGC0OcGN1Hp/XNDIcJ7D5DpPNPv6x6/mFvc1tQHsaWmpD/a4gOvvCJQ==", "dev": true, "requires": { - "@typescript-eslint/types": "5.46.1", + "@typescript-eslint/types": "5.48.2", "eslint-visitor-keys": "^3.3.0" } }, @@ -18962,6 +20872,18 @@ "es-shim-unscopables": "^1.0.0" } }, + "array.prototype.flatmap": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.1.tgz", + "integrity": "sha512-8UGn9O1FDVvMNB0UlLv4voxRMze7+FpHyF5mSMRjWHUMlpoDViniy05870VlxhfgTnLbpuwTzvD76MTtWxB/mQ==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4", + "es-shim-unscopables": "^1.0.0" + } + }, "arrify": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", @@ -18989,6 +20911,12 @@ "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", "dev": true }, + "async": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.4.tgz", + "integrity": "sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==", + "dev": true + }, "async-exit-hook": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/async-exit-hook/-/async-exit-hook-2.0.1.tgz", @@ -19001,12 +20929,32 @@ "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", "dev": true }, + "asyncro": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/asyncro/-/asyncro-3.0.0.tgz", + "integrity": "sha512-nEnWYfrBmA3taTiuiOoZYmgJ/CNrSoQLeLs29SeLcPu60yaw/mHDBHV0iOZ051fTvsTHxpCY+gXibqT9wbQYfg==", + "dev": true + }, "at-least-node": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", "dev": true }, + "autoprefixer": { + "version": "10.4.13", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.13.tgz", + "integrity": "sha512-49vKpMqcZYsJjwotvt4+h/BCjJVnhGwcLpDt5xkcaOG3eLrG/HUYLagrihYsQ+qrIBgIzX1Rw7a6L8I/ZA1Atg==", + "dev": true, + "requires": { + "browserslist": "^4.21.4", + "caniuse-lite": "^1.0.30001426", + "fraction.js": "^4.2.0", + "normalize-range": "^0.1.2", + "picocolors": "^1.0.0", + "postcss-value-parser": "^4.2.0" + } + }, "aws-sign2": { "version": "0.7.0", "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", @@ -19059,6 +21007,32 @@ "@types/babel__traverse": "^7.0.6" } }, + "babel-plugin-macros": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/babel-plugin-macros/-/babel-plugin-macros-3.1.0.tgz", + "integrity": "sha512-Cg7TFGpIr01vOQNODXOOaGz2NpCU5gl8x1qJFbb6hbZxR7XrcE2vtbAsTAbJ7/xwJtUuJEw8K8Zr/AE0LHlesg==", + "dev": true, + "requires": { + "@babel/runtime": "^7.12.5", + "cosmiconfig": "^7.0.0", + "resolve": "^1.19.0" + }, + "dependencies": { + "cosmiconfig": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.1.0.tgz", + "integrity": "sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==", + "dev": true, + "requires": { + "@types/parse-json": "^4.0.0", + "import-fresh": "^3.2.1", + "parse-json": "^5.0.0", + "path-type": "^4.0.0", + "yaml": "^1.10.0" + } + } + } + }, "babel-plugin-polyfill-corejs2": { "version": "0.3.3", "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.3.tgz", @@ -19097,6 +21071,21 @@ "@babel/helper-define-polyfill-provider": "^0.3.3" } }, + "babel-plugin-transform-async-to-promises": { + "version": "0.8.18", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-async-to-promises/-/babel-plugin-transform-async-to-promises-0.8.18.tgz", + "integrity": "sha512-WpOrF76nUHijnNn10eBGOHZmXQC8JYRME9rOLxStOga7Av2VO53ehVFvVNImMksVtQuL2/7ZNxEgxnx7oo/3Hw==", + "dev": true + }, + "babel-plugin-transform-replace-expressions": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-replace-expressions/-/babel-plugin-transform-replace-expressions-0.2.0.tgz", + "integrity": "sha512-Eh1rRd9hWEYgkgoA3D0kGp7xJ/wgVshgsqmq60iC4HVWD+Lux+fNHSHBa2v1Hsv+dHflShC71qKhiH40OiPtDA==", + "dev": true, + "requires": { + "@babel/parser": "^7.3.3" + } + }, "babel-preset-current-node-syntax": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz", @@ -19171,6 +21160,12 @@ "readable-stream": "^3.4.0" } }, + "boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", + "dev": true + }, "boxen": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/boxen/-/boxen-4.2.0.tgz", @@ -19224,6 +21219,15 @@ "fill-range": "^7.0.1" } }, + "brotli-size": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/brotli-size/-/brotli-size-4.0.0.tgz", + "integrity": "sha512-uA9fOtlTRC0iqKfzff1W34DXUA3GyVqbUaeo3Rw3d4gd1eavKVCETXrn3NzO74W+UVkG3UHu8WxUi+XvKI/huA==", + "dev": true, + "requires": { + "duplexer": "0.1.1" + } + }, "browserslist": { "version": "4.21.4", "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.4.tgz", @@ -19363,6 +21367,18 @@ "quick-lru": "^4.0.1" } }, + "caniuse-api": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-3.0.0.tgz", + "integrity": "sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==", + "dev": true, + "requires": { + "browserslist": "^4.0.0", + "caniuse-lite": "^1.0.0", + "lodash.memoize": "^4.1.2", + "lodash.uniq": "^4.5.0" + } + }, "caniuse-lite": { "version": "1.0.30001439", "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001439.tgz", @@ -19593,6 +21609,12 @@ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, + "colord": { + "version": "2.9.3", + "resolved": "https://registry.npmjs.org/colord/-/colord-2.9.3.tgz", + "integrity": "sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw==", + "dev": true + }, "colorette": { "version": "2.0.19", "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.19.tgz", @@ -19706,6 +21728,15 @@ "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", "dev": true }, + "concat-with-sourcemaps": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/concat-with-sourcemaps/-/concat-with-sourcemaps-1.1.0.tgz", + "integrity": "sha512-4gEjHJFT9e+2W/77h/DS5SGUgwDaOwprX8L/gl5+3ixnzkVJJsZWDSelmN3Oilw3LNDZjZV0yqH1hLG3k6nghg==", + "dev": true, + "requires": { + "source-map": "^0.6.1" + } + }, "configstore": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/configstore/-/configstore-5.0.1.tgz", @@ -19869,6 +21900,112 @@ "integrity": "sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==", "dev": true }, + "css-declaration-sorter": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-6.3.1.tgz", + "integrity": "sha512-fBffmak0bPAnyqc/HO8C3n2sHrp9wcqQz6ES9koRF2/mLOVAx9zIQ3Y7R29sYCteTPqMCwns4WYQoCX91Xl3+w==", + "dev": true, + "requires": {} + }, + "css-select": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.3.0.tgz", + "integrity": "sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==", + "dev": true, + "requires": { + "boolbase": "^1.0.0", + "css-what": "^6.0.1", + "domhandler": "^4.3.1", + "domutils": "^2.8.0", + "nth-check": "^2.0.1" + } + }, + "css-tree": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.1.3.tgz", + "integrity": "sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==", + "dev": true, + "requires": { + "mdn-data": "2.0.14", + "source-map": "^0.6.1" + } + }, + "css-what": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz", + "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==", + "dev": true + }, + "cssesc": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", + "dev": true + }, + "cssnano": { + "version": "5.1.14", + "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-5.1.14.tgz", + "integrity": "sha512-Oou7ihiTocbKqi0J1bB+TRJIQX5RMR3JghA8hcWSw9mjBLQ5Y3RWqEDoYG3sRNlAbCIXpqMoZGbq5KDR3vdzgw==", + "dev": true, + "requires": { + "cssnano-preset-default": "^5.2.13", + "lilconfig": "^2.0.3", + "yaml": "^1.10.2" + } + }, + "cssnano-preset-default": { + "version": "5.2.13", + "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-5.2.13.tgz", + "integrity": "sha512-PX7sQ4Pb+UtOWuz8A1d+Rbi+WimBIxJTRyBdgGp1J75VU0r/HFQeLnMYgHiCAp6AR4rqrc7Y4R+1Rjk3KJz6DQ==", + "dev": true, + "requires": { + "css-declaration-sorter": "^6.3.1", + "cssnano-utils": "^3.1.0", + "postcss-calc": "^8.2.3", + "postcss-colormin": "^5.3.0", + "postcss-convert-values": "^5.1.3", + "postcss-discard-comments": "^5.1.2", + "postcss-discard-duplicates": "^5.1.0", + "postcss-discard-empty": "^5.1.1", + "postcss-discard-overridden": "^5.1.0", + "postcss-merge-longhand": "^5.1.7", + "postcss-merge-rules": "^5.1.3", + "postcss-minify-font-values": "^5.1.0", + "postcss-minify-gradients": "^5.1.1", + "postcss-minify-params": "^5.1.4", + "postcss-minify-selectors": "^5.2.1", + "postcss-normalize-charset": "^5.1.0", + "postcss-normalize-display-values": "^5.1.0", + "postcss-normalize-positions": "^5.1.1", + "postcss-normalize-repeat-style": "^5.1.1", + "postcss-normalize-string": "^5.1.0", + "postcss-normalize-timing-functions": "^5.1.0", + "postcss-normalize-unicode": "^5.1.1", + "postcss-normalize-url": "^5.1.0", + "postcss-normalize-whitespace": "^5.1.1", + "postcss-ordered-values": "^5.1.3", + "postcss-reduce-initial": "^5.1.1", + "postcss-reduce-transforms": "^5.1.0", + "postcss-svgo": "^5.1.0", + "postcss-unique-selectors": "^5.1.1" + } + }, + "cssnano-utils": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cssnano-utils/-/cssnano-utils-3.1.0.tgz", + "integrity": "sha512-JQNR19/YZhz4psLX/rQ9M83e3z2Wf/HdJbryzte4a3NSuafyp9w/I4U+hx5C2S9g41qlstH7DEWnZaaj83OuEA==", + "dev": true, + "requires": {} + }, + "csso": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/csso/-/csso-4.2.0.tgz", + "integrity": "sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA==", + "dev": true, + "requires": { + "css-tree": "^1.1.2" + } + }, "cz-conventional-changelog": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/cz-conventional-changelog/-/cz-conventional-changelog-3.3.0.tgz", @@ -20044,6 +22181,12 @@ "integrity": "sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==", "dev": true }, + "define-lazy-prop": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", + "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==", + "dev": true + }, "define-properties": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.4.tgz", @@ -20123,23 +22266,42 @@ "dev": true }, "denoify": { - "version": "0.6.5", - "resolved": "https://registry.npmjs.org/denoify/-/denoify-0.6.5.tgz", - "integrity": "sha512-AhKBlvO91QdP5T/fRcxiMj3b6cDe5ucr+7YVlePXCuV/kImbiR0V1qjGTCfmVuC3wvRn5Xf6r34qJJRbo86AqA==", + "version": "1.4.5", + "resolved": "https://registry.npmjs.org/denoify/-/denoify-1.4.5.tgz", + "integrity": "sha512-hk75EoJgI8kCizSAQ8wT7Vmopg67k9+rsos/ScYSFmEk/wMSSgi8xlQMkf99dvNDFck07BgnlywIBLpbs8oU5w==", "dev": true, "requires": { "@octokit/rest": "^18.0.0", "@types/comment-json": "^1.1.1", "commander": "^4.1.1", "comment-json": "^3.0.2", - "evt": "^1.9.2", + "cosmiconfig": "^7.0.1", + "evt": "^2.4.13", "get-github-default-branch-name": "^0.0.4", "gitignore-parser": "0.0.2", "glob": "^7.1.6", - "node-fetch": "^2.6.0", + "minimal-polyfills": "^2.2.2", + "node-fetch": "^2.6.7", + "parse-dont-validate": "^4.0.1", "path-depth": "^1.0.0", - "scripting-tools": "^0.19.13", + "scripting-tools": "^0.19.14", + "tsafe": "^1.4.1", "url-join": "^4.0.1" + }, + "dependencies": { + "cosmiconfig": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.1.0.tgz", + "integrity": "sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==", + "dev": true, + "requires": { + "@types/parse-json": "^4.0.0", + "import-fresh": "^3.2.1", + "parse-json": "^5.0.0", + "path-type": "^4.0.0", + "yaml": "^1.10.0" + } + } } }, "deprecation": { @@ -20166,12 +22328,6 @@ "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==", "dev": true }, - "diff": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-5.1.0.tgz", - "integrity": "sha512-D+mk+qE8VC/PAUrlAU34N+VfXev0ghe5ywmpqrawphmVZc1bEfn56uo9qpyGp1p4xpzOHkSW4ztBd6L7Xx4ACw==", - "dev": true - }, "diff-sequences": { "version": "26.6.2", "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-26.6.2.tgz", @@ -20196,6 +22352,43 @@ "esutils": "^2.0.2" } }, + "dom-serializer": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz", + "integrity": "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==", + "dev": true, + "requires": { + "domelementtype": "^2.0.1", + "domhandler": "^4.2.0", + "entities": "^2.0.0" + } + }, + "domelementtype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", + "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", + "dev": true + }, + "domhandler": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz", + "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==", + "dev": true, + "requires": { + "domelementtype": "^2.2.0" + } + }, + "domutils": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", + "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", + "dev": true, + "requires": { + "dom-serializer": "^1.0.1", + "domelementtype": "^2.2.0", + "domhandler": "^4.2.0" + } + }, "dot-prop": { "version": "5.3.0", "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz", @@ -20205,6 +22398,12 @@ "is-obj": "^2.0.0" } }, + "duplexer": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.1.tgz", + "integrity": "sha512-sxNZ+ljy+RA1maXoUReeqBBpBC6RLKmg5ewzV+x+mSETmWNoKdZN6vcQjpFROemza23hGFskJtFNoUWUaQ+R4Q==", + "dev": true + }, "duplexer3": { "version": "0.1.5", "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.5.tgz", @@ -20221,6 +22420,15 @@ "safer-buffer": "^2.1.0" } }, + "ejs": { + "version": "3.1.8", + "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.8.tgz", + "integrity": "sha512-/sXZeMlhS0ArkfX2Aw780gJzXSMPnKjtspYZv+f3NiKLlubezAHDU5+9xz6gd3/NhG3txQCo6xlglmTS+oTGEQ==", + "dev": true, + "requires": { + "jake": "^10.8.5" + } + }, "electron-to-chromium": { "version": "1.4.284", "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.284.tgz", @@ -20263,6 +22471,12 @@ "ansi-colors": "^4.1.1" } }, + "entities": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", + "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", + "dev": true + }, "error-ex": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", @@ -20514,12 +22728,12 @@ "dev": true }, "eslint": { - "version": "8.30.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.30.0.tgz", - "integrity": "sha512-MGADB39QqYuzEGov+F/qb18r4i7DohCDOfatHaxI2iGlPuC65bwG2gxgO+7DkyL38dRFaRH7RaRAgU6JKL9rMQ==", + "version": "8.32.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.32.0.tgz", + "integrity": "sha512-nETVXpnthqKPFyuY2FNjz/bEd6nbosRgKbkgS/y1C7LJop96gYHWpiguLecMHQ2XCPxn77DS0P+68WzG6vkZSQ==", "dev": true, "requires": { - "@eslint/eslintrc": "^1.4.0", + "@eslint/eslintrc": "^1.4.1", "@humanwhocodes/config-array": "^0.11.8", "@humanwhocodes/module-importer": "^1.0.1", "@nodelib/fs.walk": "^1.2.8", @@ -20595,142 +22809,48 @@ "js-yaml": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dev": true, - "requires": { - "argparse": "^2.0.1" - } - }, - "locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", - "dev": true, - "requires": { - "p-locate": "^5.0.0" - } - }, - "p-locate": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", - "dev": true, - "requires": { - "p-limit": "^3.0.2" - } - } - } - }, - "eslint-config-eta-dev": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/eslint-config-eta-dev/-/eslint-config-eta-dev-1.0.0.tgz", - "integrity": "sha512-MoiaM3SRXmHPQdS2Pbn4rcxKawhTisHZi/wh/7iCHdUx4BcbmuiZc2Oni+0p8yINGVC5iIg2mFkptsDIcYoUww==", - "dev": true, - "requires": { - "@typescript-eslint/parser": "^4.5.0", - "eslint-config-prettier": "^6.13.0" - }, - "dependencies": { - "@typescript-eslint/parser": { - "version": "4.33.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-4.33.0.tgz", - "integrity": "sha512-ZohdsbXadjGBSK0/r+d87X0SBmKzOq4/S5nzK6SBgJspFo9/CUDJ7hjayuze+JK7CZQLDMroqytp7pOcFKTxZA==", - "dev": true, - "requires": { - "@typescript-eslint/scope-manager": "4.33.0", - "@typescript-eslint/types": "4.33.0", - "@typescript-eslint/typescript-estree": "4.33.0", - "debug": "^4.3.1" - } - }, - "@typescript-eslint/scope-manager": { - "version": "4.33.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-4.33.0.tgz", - "integrity": "sha512-5IfJHpgTsTZuONKbODctL4kKuQje/bzBRkwHE8UOZ4f89Zeddg+EGZs8PD8NcN4LdM3ygHWYB3ukPAYjvl/qbQ==", - "dev": true, - "requires": { - "@typescript-eslint/types": "4.33.0", - "@typescript-eslint/visitor-keys": "4.33.0" - } - }, - "@typescript-eslint/types": { - "version": "4.33.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-4.33.0.tgz", - "integrity": "sha512-zKp7CjQzLQImXEpLt2BUw1tvOMPfNoTAfb8l51evhYbOEEzdWyQNmHWWGPR6hwKJDAi+1VXSBmnhL9kyVTTOuQ==", - "dev": true - }, - "@typescript-eslint/typescript-estree": { - "version": "4.33.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-4.33.0.tgz", - "integrity": "sha512-rkWRY1MPFzjwnEVHsxGemDzqqddw2QbTJlICPD9p9I9LfsO8fdmfQPOX3uKfUaGRDFJbfrtm/sXhVXN4E+bzCA==", - "dev": true, - "requires": { - "@typescript-eslint/types": "4.33.0", - "@typescript-eslint/visitor-keys": "4.33.0", - "debug": "^4.3.1", - "globby": "^11.0.3", - "is-glob": "^4.0.1", - "semver": "^7.3.5", - "tsutils": "^3.21.0" - } - }, - "@typescript-eslint/visitor-keys": { - "version": "4.33.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-4.33.0.tgz", - "integrity": "sha512-uqi/2aSz9g2ftcHWf8uLPJA70rUv6yuMW5Bohw+bwcuzaxQIHaKFZCKGoGXIrc9vkTJ3+0txM73K0Hq3d5wgIg==", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", "dev": true, "requires": { - "@typescript-eslint/types": "4.33.0", - "eslint-visitor-keys": "^2.0.0" + "argparse": "^2.0.1" } }, - "eslint-config-prettier": { - "version": "6.15.0", - "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-6.15.0.tgz", - "integrity": "sha512-a1+kOYLR8wMGustcgAjdydMsQ2A/2ipRPwRKUmfYaSxc9ZPcrku080Ctl6zrZzZNs/U82MjSv+qKREkoq3bJaw==", + "locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", "dev": true, "requires": { - "get-stdin": "^6.0.0" + "p-locate": "^5.0.0" } }, - "eslint-visitor-keys": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", - "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", - "dev": true - }, - "get-stdin": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-6.0.0.tgz", - "integrity": "sha512-jp4tHawyV7+fkkSKyvjuLZswblUtz+SQKzSWnBbii16BuZksJlU1wuBYXY75r+duh/llF1ur6oNwi+2ZzjKZ7g==", - "dev": true - }, - "semver": { - "version": "7.3.8", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", - "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", + "p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", "dev": true, "requires": { - "lru-cache": "^6.0.0" + "p-limit": "^3.0.2" } } } }, "eslint-config-prettier": { - "version": "8.5.0", - "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.5.0.tgz", - "integrity": "sha512-obmWKLUNCnhtQRKc+tmnYuQl0pFU1ibYJQ5BGhTVB08bHe9wC8qUeG7c08dj9XX+AuPj1YSGSQIHl1pnDHZR0Q==", + "version": "8.6.0", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.6.0.tgz", + "integrity": "sha512-bAF0eLpLVqP5oEVUFKpMA+NnRFICwn9X8B5jrR9FcqnYBuPbqWEjTEspPWMj5ye6czoSLDweCzSo3Ko7gGrZaA==", "dev": true, "requires": {} }, "eslint-import-resolver-node": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.6.tgz", - "integrity": "sha512-0En0w03NRVMn9Uiyn8YRPDKvWjxCWkslUEhGNTdGx15RvPJYQ+lbOlqrlNI2vEAs4pDYK4f/HN2TbDmk5TP0iw==", + "version": "0.3.7", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.7.tgz", + "integrity": "sha512-gozW2blMLJCeFpBwugLTGyvVjNoeo1knonXAcatC6bjPBZitotxdWf7Gimr25N4c0AAOo4eOUfaG82IJPDpqCA==", "dev": true, "requires": { "debug": "^3.2.7", - "resolve": "^1.20.0" + "is-core-module": "^2.11.0", + "resolve": "^1.22.1" }, "dependencies": { "debug": { @@ -20764,61 +22884,36 @@ } } }, - "eslint-plugin-es": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-es/-/eslint-plugin-es-3.0.1.tgz", - "integrity": "sha512-GUmAsJaN4Fc7Gbtl8uOBlayo2DqhwWvEzykMHSCZHU3XdJ+NSzzZcVhXh3VxX5icqQ+oQdIEawXX8xkR3mIFmQ==", - "dev": true, - "requires": { - "eslint-utils": "^2.0.0", - "regexpp": "^3.0.0" - }, - "dependencies": { - "eslint-utils": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", - "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", - "dev": true, - "requires": { - "eslint-visitor-keys": "^1.1.0" - } - }, - "eslint-visitor-keys": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", - "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", - "dev": true - } - } - }, "eslint-plugin-import": { - "version": "2.26.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.26.0.tgz", - "integrity": "sha512-hYfi3FXaM8WPLf4S1cikh/r4IxnO6zrhZbEGz2b660EJRbuxgpDS5gkCuYgGWg2xxh2rBuIr4Pvhve/7c31koA==", + "version": "2.27.5", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.27.5.tgz", + "integrity": "sha512-LmEt3GVofgiGuiE+ORpnvP+kAm3h6MLZJ4Q5HCyHADofsb4VzXFsRiWj3c0OFiV+3DWFh0qg3v9gcPlfc3zRow==", "dev": true, "requires": { - "array-includes": "^3.1.4", - "array.prototype.flat": "^1.2.5", - "debug": "^2.6.9", + "array-includes": "^3.1.6", + "array.prototype.flat": "^1.3.1", + "array.prototype.flatmap": "^1.3.1", + "debug": "^3.2.7", "doctrine": "^2.1.0", - "eslint-import-resolver-node": "^0.3.6", - "eslint-module-utils": "^2.7.3", + "eslint-import-resolver-node": "^0.3.7", + "eslint-module-utils": "^2.7.4", "has": "^1.0.3", - "is-core-module": "^2.8.1", + "is-core-module": "^2.11.0", "is-glob": "^4.0.3", "minimatch": "^3.1.2", - "object.values": "^1.1.5", - "resolve": "^1.22.0", + "object.values": "^1.1.6", + "resolve": "^1.22.1", + "semver": "^6.3.0", "tsconfig-paths": "^3.14.1" }, "dependencies": { "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", "dev": true, "requires": { - "ms": "2.0.0" + "ms": "^2.1.1" } }, "doctrine": { @@ -20830,35 +22925,58 @@ "esutils": "^2.0.2" } }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", "dev": true } } }, - "eslint-plugin-node": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-node/-/eslint-plugin-node-11.1.0.tgz", - "integrity": "sha512-oUwtPJ1W0SKD0Tr+wqu92c5xuCeQqB3hSCHasn/ZgjFdA9iDGNkNf2Zi9ztY7X+hNuMib23LNGRm6+uN+KLE3g==", + "eslint-plugin-n": { + "version": "15.6.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-n/-/eslint-plugin-n-15.6.1.tgz", + "integrity": "sha512-R9xw9OtCRxxaxaszTQmQAlPgM+RdGjaL1akWuY/Fv9fRAi8Wj4CUKc6iYVG8QNRjRuo8/BqVYIpfqberJUEacA==", "dev": true, "requires": { - "eslint-plugin-es": "^3.0.0", - "eslint-utils": "^2.0.0", + "builtins": "^5.0.1", + "eslint-plugin-es": "^4.1.0", + "eslint-utils": "^3.0.0", "ignore": "^5.1.1", - "minimatch": "^3.0.4", - "resolve": "^1.10.1", - "semver": "^6.1.0" + "is-core-module": "^2.11.0", + "minimatch": "^3.1.2", + "resolve": "^1.22.1", + "semver": "^7.3.8" }, "dependencies": { - "eslint-utils": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", - "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", + "builtins": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/builtins/-/builtins-5.0.1.tgz", + "integrity": "sha512-qwVpFEHNfhYJIzNRBvd2C1kyo6jz3ZSMPyyuR47OPdiKWlbYnZNyDWuyR175qDnAJLiCo5fBBqPb3RiXgWlkOQ==", + "dev": true, + "requires": { + "semver": "^7.0.0" + } + }, + "eslint-plugin-es": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-es/-/eslint-plugin-es-4.1.0.tgz", + "integrity": "sha512-GILhQTnjYE2WorX5Jyi5i4dz5ALWxBIdQECVQavL6s7cI76IZTDWleTHkxz/QT3kvcs2QlGHvKLYsSlPOlPXnQ==", "dev": true, "requires": { - "eslint-visitor-keys": "^1.1.0" + "eslint-utils": "^2.0.0", + "regexpp": "^3.0.0" + }, + "dependencies": { + "eslint-utils": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", + "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", + "dev": true, + "requires": { + "eslint-visitor-keys": "^1.1.0" + } + } } }, "eslint-visitor-keys": { @@ -20868,23 +22986,20 @@ "dev": true }, "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true + "version": "7.3.8", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", + "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } } } }, "eslint-plugin-promise": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-promise/-/eslint-plugin-promise-4.3.1.tgz", - "integrity": "sha512-bY2sGqyptzFBDLh/GMbAxfdJC+b0f23ME63FOE4+Jao0oZ3E1LEwFtWJX/1pGMJLiTtrSSern2CRM/g+dfc0eQ==", - "dev": true - }, - "eslint-plugin-standard": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-standard/-/eslint-plugin-standard-4.1.0.tgz", - "integrity": "sha512-ZL7+QRixjTR6/528YNGyDotyffm5OQst/sGxKDwGb9Uqs4In5Egi4+jbobhqJoyoCM6/7v/1A5fhQ7ScMtDjaQ==", + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-promise/-/eslint-plugin-promise-6.1.1.tgz", + "integrity": "sha512-tjqWDwVZQo7UIPMeDReOpUgHCmCiH+ePnVT+5zVapL0uuHnegBUs2smM13CzOs2Xb5+MHMRFTs9v24yjba4Oig==", "dev": true, "requires": {} }, @@ -20990,14 +23105,21 @@ "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", "dev": true }, + "eventemitter3": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", + "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", + "dev": true + }, "evt": { - "version": "1.11.2", - "resolved": "https://registry.npmjs.org/evt/-/evt-1.11.2.tgz", - "integrity": "sha512-TShpDKBsHQslCV83lkH2A070gywfZD7SRjh0fYALHWUKteSHTI07L7YjCpoJOM4k4sL8Ue/9CB7vtL3DukDaLA==", + "version": "2.4.13", + "resolved": "https://registry.npmjs.org/evt/-/evt-2.4.13.tgz", + "integrity": "sha512-haTVOsmjzk+28zpzvVwan9Zw2rLQF2izgi7BKjAPRzZAfcv+8scL0TpM8MzvGNKFYHiy+Bq3r6FYIIUPl9kt3A==", "dev": true, "requires": { - "minimal-polyfills": "^2.1.5", - "run-exclusive": "^2.2.14" + "minimal-polyfills": "^2.2.2", + "run-exclusive": "^2.2.18", + "tsafe": "^1.4.1" } }, "execa": { @@ -21154,6 +23276,41 @@ "flat-cache": "^3.0.4" } }, + "filelist": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.4.tgz", + "integrity": "sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==", + "dev": true, + "requires": { + "minimatch": "^5.0.1" + }, + "dependencies": { + "brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "requires": { + "balanced-match": "^1.0.0" + } + }, + "minimatch": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "dev": true, + "requires": { + "brace-expansion": "^2.0.1" + } + } + } + }, + "filesize": { + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/filesize/-/filesize-6.4.0.tgz", + "integrity": "sha512-mjFIpOHC4jbfcTfoh4rkWpI31mF7viw9ikj/JyLoKzqlwG/YsefKfvYlYhdYdg/9mtK2z1AzgN/0LvVQ3zdlSQ==", + "dev": true + }, "fill-range": { "version": "7.0.1", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", @@ -21265,6 +23422,12 @@ "mime-types": "^2.1.12" } }, + "fraction.js": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.2.0.tgz", + "integrity": "sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA==", + "dev": true + }, "fs-extra": { "version": "8.1.0", "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", @@ -21313,6 +23476,15 @@ "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", "dev": true }, + "generic-names": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/generic-names/-/generic-names-4.0.0.tgz", + "integrity": "sha512-ySFolZQfw9FoDb3ed9d80Cm9f0+r7qj+HJkWjeD9RBfpxEVTlVhol+gvaQB/78WbwYfbnNh8nWHHBSlg072y6A==", + "dev": true, + "requires": { + "loader-utils": "^3.2.0" + } + }, "gensync": { "version": "1.0.0-beta.2", "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", @@ -21490,6 +23662,12 @@ "type-fest": "^0.20.2" } }, + "globalyzer": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/globalyzer/-/globalyzer-0.1.0.tgz", + "integrity": "sha512-40oNTM9UfG6aBmuKxk/giHn5nQ8RVz/SS4Ir6zgzOv9/qC3kKZ9v4etGTcJbEl/NyVQH7FGU7d+X1egr57Md2Q==", + "dev": true + }, "globby": { "version": "11.1.0", "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", @@ -21504,6 +23682,12 @@ "slash": "^3.0.0" } }, + "globrex": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/globrex/-/globrex-0.1.2.tgz", + "integrity": "sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg==", + "dev": true + }, "gopd": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", @@ -21565,6 +23749,23 @@ "integrity": "sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==", "dev": true }, + "gzip-size": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/gzip-size/-/gzip-size-6.0.0.tgz", + "integrity": "sha512-ax7ZYomf6jqPTQ4+XCpUGyXKHk5WweS+e05MBO4/y3WJ5RkmPXNKvX+bx1behVILVwr6JSQvZAku021CHPXG3Q==", + "dev": true, + "requires": { + "duplexer": "^0.1.2" + }, + "dependencies": { + "duplexer": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz", + "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==", + "dev": true + } + } + }, "har-schema": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", @@ -21750,6 +23951,19 @@ "safer-buffer": ">= 2.1.2 < 3" } }, + "icss-replace-symbols": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/icss-replace-symbols/-/icss-replace-symbols-1.1.0.tgz", + "integrity": "sha512-chIaY3Vh2mh2Q3RGXttaDIzeiPvaVXJ+C4DAh/w3c37SKZ/U6PGMmuicR2EQQp9bKG8zLMCl7I+PtIoOOPp8Gg==", + "dev": true + }, + "icss-utils": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz", + "integrity": "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==", + "dev": true, + "requires": {} + }, "ieee754": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", @@ -21762,6 +23976,15 @@ "integrity": "sha512-d2qQLzTJ9WxQftPAuEQpSPmKqzxePjzVbpAVv62AQ64NTL+wR4JkrVqR/LqFsFEUsHDAiId52mJteHDFuDkElA==", "dev": true }, + "import-cwd": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/import-cwd/-/import-cwd-3.0.0.tgz", + "integrity": "sha512-4pnzH16plW+hgvRECbDWpQl3cqtvSofHWh44met7ESfZ8UZOWWddm8hEyDTqREJ9RbYHY8gi8DqmaelApoOGMg==", + "dev": true, + "requires": { + "import-from": "^3.0.0" + } + }, "import-fresh": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", @@ -21780,6 +24003,15 @@ } } }, + "import-from": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/import-from/-/import-from-3.0.0.tgz", + "integrity": "sha512-CiuXOFFSzkU5x/CR0+z7T91Iht4CXgfCxVOFRhh2Zyhg5wOpWvvDLQUsWl+gcN+QscYBjez8hDCt85O7RLDttQ==", + "dev": true, + "requires": { + "resolve-from": "^5.0.0" + } + }, "import-lazy": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-2.1.0.tgz", @@ -22552,6 +24784,18 @@ "istanbul-lib-report": "^3.0.0" } }, + "jake": { + "version": "10.8.5", + "resolved": "https://registry.npmjs.org/jake/-/jake-10.8.5.tgz", + "integrity": "sha512-sVpxYeuAhWt0OTWITwT98oyV0GsXyMlXCF+3L1SuafBVUIr/uILGRB+NqwkzhgXKvoJpDIpQvqkUALgdmQsQxw==", + "dev": true, + "requires": { + "async": "^3.2.3", + "chalk": "^4.0.2", + "filelist": "^1.0.1", + "minimatch": "^3.0.4" + } + }, "jest": { "version": "29.3.1", "resolved": "https://registry.npmjs.org/jest/-/jest-29.3.1.tgz", @@ -23998,6 +26242,12 @@ "wrap-ansi": "^7.0.0" } }, + "loader-utils": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-3.2.1.tgz", + "integrity": "sha512-ZvFw1KWS3GVyYBYb7qkmRM/WwL2TQQBxgCK62rlvm4WpVQ23Nb4tYjApUlfjrEGvOs7KHEsmyUn75OHZrJMWPw==", + "dev": true + }, "locate-path": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", @@ -24013,30 +26263,18 @@ "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", "dev": true }, + "lodash.camelcase": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", + "integrity": "sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==", + "dev": true + }, "lodash.debounce": { "version": "4.0.8", "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==", "dev": true }, - "lodash.hasin": { - "version": "4.5.2", - "resolved": "https://registry.npmjs.org/lodash.hasin/-/lodash.hasin-4.5.2.tgz", - "integrity": "sha512-AFAitwTSq1Ka/1J9uBaVxpLBP5OI3INQvkl4wKcgIYxoA0S3aqO1QWXHR9aCcOrWtPFqP7GzlFncZfe0Jz0kNw==", - "dev": true - }, - "lodash.isempty": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/lodash.isempty/-/lodash.isempty-4.4.0.tgz", - "integrity": "sha512-oKMuF3xEeqDltrGMfDxAPGIVMSSRv8tbRSODbrs4KGsRRLEhrW8N8Rd4DRgB2+621hY8A8XwwrTVhXWpxFvMzg==", - "dev": true - }, - "lodash.isnil": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/lodash.isnil/-/lodash.isnil-4.0.0.tgz", - "integrity": "sha512-up2Mzq3545mwVnMhTDMdfoG1OurpA/s5t88JmQX809eH3C8491iu2sfKhTfhQtKY78oPNhiaHJUpT/dUDAAtng==", - "dev": true - }, "lodash.map": { "version": "4.6.0", "resolved": "https://registry.npmjs.org/lodash.map/-/lodash.map-4.6.0.tgz", @@ -24055,10 +26293,10 @@ "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", "dev": true }, - "lodash.omitby": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/lodash.omitby/-/lodash.omitby-4.6.0.tgz", - "integrity": "sha512-5OrRcIVR75M288p4nbI2WLAf3ndw2GD9fyNv3Bc15+WCxJDdZ4lYndSxGd7hnG6PVjiJTeJE2dHEGhIuKGicIQ==", + "lodash.uniq": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", + "integrity": "sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==", "dev": true }, "lodash.zip": { @@ -24196,16 +26434,110 @@ "p-defer": "^1.0.0" } }, - "map-obj": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-4.3.0.tgz", - "integrity": "sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ==", - "dev": true - }, - "marked": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/marked/-/marked-4.2.4.tgz", - "integrity": "sha512-Wcc9ikX7Q5E4BYDPvh1C6QNSxrjC9tBgz+A/vAhp59KXUgachw++uMvMKiSW8oA85nopmPZcEvBoex/YLMsiyA==", + "map-obj": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-4.3.0.tgz", + "integrity": "sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ==", + "dev": true + }, + "marked": { + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/marked/-/marked-4.2.4.tgz", + "integrity": "sha512-Wcc9ikX7Q5E4BYDPvh1C6QNSxrjC9tBgz+A/vAhp59KXUgachw++uMvMKiSW8oA85nopmPZcEvBoex/YLMsiyA==", + "dev": true + }, + "maxmin": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/maxmin/-/maxmin-2.1.0.tgz", + "integrity": "sha512-NWlApBjW9az9qRPaeg7CX4sQBWwytqz32bIEo1PW9pRW+kBP9KLRfJO3UC+TV31EcQZEUq7eMzikC7zt3zPJcw==", + "dev": true, + "requires": { + "chalk": "^1.0.0", + "figures": "^1.0.1", + "gzip-size": "^3.0.0", + "pretty-bytes": "^3.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==", + "dev": true + }, + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha512-kmCevFghRiWM7HB5zTPULl4r9bVFSWjz62MhqizDGUrq2NWuNMQyuv4tHHoKJHs69M/MF64lEcHdYIocrdWQYA==", + "dev": true + }, + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A==", + "dev": true, + "requires": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + } + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true + }, + "figures": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-1.7.0.tgz", + "integrity": "sha512-UxKlfCRuCBxSXU4C6t9scbDyWZ4VlaFFdojKtzJuSkuOBQ5CNFum+zZXFwHjo+CxBC1t6zlYPgHIgFjL8ggoEQ==", + "dev": true, + "requires": { + "escape-string-regexp": "^1.0.5", + "object-assign": "^4.1.0" + } + }, + "gzip-size": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/gzip-size/-/gzip-size-3.0.0.tgz", + "integrity": "sha512-6s8trQiK+OMzSaCSVXX+iqIcLV9tC+E73jrJrJTyS4h/AJhlxHvzFKqM1YLDJWRGgHX8uLkBeXkA0njNj39L4w==", + "dev": true, + "requires": { + "duplexer": "^0.1.1" + } + }, + "pretty-bytes": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-3.0.1.tgz", + "integrity": "sha512-eb7ZAeUTgfh294cElcu51w+OTRp/6ItW758LjwJSK72LDevcuJn0P4eD71PLMDGPwwatXmAmYHTkzvpKlJE3ow==", + "dev": true, + "requires": { + "number-is-nan": "^1.0.0" + } + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==", + "dev": true, + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha512-KKNVtd6pCYgPIKU4cp2733HWYCpplQhddZLBUryaAHou723x+FRzQ5Df824Fj+IyyuiQTRoub4SnIFfIcrp70g==", + "dev": true + } + } + }, + "mdn-data": { + "version": "2.0.14", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.14.tgz", + "integrity": "sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==", "dev": true }, "mem": { @@ -24264,6 +26596,80 @@ "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", "dev": true }, + "microbundle": { + "version": "0.15.1", + "resolved": "https://registry.npmjs.org/microbundle/-/microbundle-0.15.1.tgz", + "integrity": "sha512-aAF+nwFbkSIJGfrJk+HyzmJOq3KFaimH6OIFBU6J2DPjQeg1jXIYlIyEv81Gyisb9moUkudn+wj7zLNYMOv75Q==", + "dev": true, + "requires": { + "@babel/core": "^7.12.10", + "@babel/plugin-proposal-class-properties": "7.12.1", + "@babel/plugin-syntax-import-meta": "^7.10.4", + "@babel/plugin-syntax-jsx": "^7.12.1", + "@babel/plugin-transform-flow-strip-types": "^7.12.10", + "@babel/plugin-transform-react-jsx": "^7.12.11", + "@babel/plugin-transform-regenerator": "^7.12.1", + "@babel/preset-env": "^7.12.11", + "@babel/preset-flow": "^7.12.1", + "@babel/preset-react": "^7.12.10", + "@rollup/plugin-alias": "^3.1.1", + "@rollup/plugin-babel": "^5.2.2", + "@rollup/plugin-commonjs": "^17.0.0", + "@rollup/plugin-json": "^4.1.0", + "@rollup/plugin-node-resolve": "^11.0.1", + "@surma/rollup-plugin-off-main-thread": "^2.2.2", + "asyncro": "^3.0.0", + "autoprefixer": "^10.1.0", + "babel-plugin-macros": "^3.0.1", + "babel-plugin-transform-async-to-promises": "^0.8.18", + "babel-plugin-transform-replace-expressions": "^0.2.0", + "brotli-size": "^4.0.0", + "builtin-modules": "^3.1.0", + "camelcase": "^6.2.0", + "escape-string-regexp": "^4.0.0", + "filesize": "^6.1.0", + "gzip-size": "^6.0.0", + "kleur": "^4.1.3", + "lodash.merge": "^4.6.2", + "postcss": "^8.2.1", + "pretty-bytes": "^5.4.1", + "rollup": "^2.35.1", + "rollup-plugin-bundle-size": "^1.0.3", + "rollup-plugin-postcss": "^4.0.0", + "rollup-plugin-terser": "^7.0.2", + "rollup-plugin-typescript2": "^0.32.0", + "rollup-plugin-visualizer": "^5.6.0", + "sade": "^1.7.4", + "terser": "^5.7.0", + "tiny-glob": "^0.2.8", + "tslib": "^2.0.3", + "typescript": "^4.1.3" + }, + "dependencies": { + "@babel/plugin-proposal-class-properties": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.12.1.tgz", + "integrity": "sha512-cKp3dlQsFsEs5CWKnN7BnSHOd0EOW8EKpEjkoz1pO2E5KzIDNV9Ros1b0CnmbVgAGXJubOYVBOGCT1OmJwOI7w==", + "dev": true, + "requires": { + "@babel/helper-create-class-features-plugin": "^7.12.1", + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "dev": true + }, + "kleur": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/kleur/-/kleur-4.1.5.tgz", + "integrity": "sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==", + "dev": true + } + } + }, "micromatch": { "version": "4.0.5", "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", @@ -24345,6 +26751,12 @@ "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", "dev": true }, + "mri": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/mri/-/mri-1.2.0.tgz", + "integrity": "sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==", + "dev": true + }, "ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", @@ -24457,6 +26869,12 @@ "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", "dev": true }, + "normalize-range": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", + "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==", + "dev": true + }, "normalize-url": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz", @@ -24787,6 +27205,15 @@ "path-key": "^3.0.0" } }, + "nth-check": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", + "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", + "dev": true, + "requires": { + "boolbase": "^1.0.0" + } + }, "number-is-nan": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", @@ -25116,6 +27543,16 @@ "mimic-fn": "^2.1.0" } }, + "p-queue": { + "version": "6.6.2", + "resolved": "https://registry.npmjs.org/p-queue/-/p-queue-6.6.2.tgz", + "integrity": "sha512-RwFpb72c/BhQLEXIZ5K2e+AhgNVmIejGlTgiB9MzZ0e93GRvqZ7uSi0dvRF7/XIXDeNkra2fNHBxTyPDGySpjQ==", + "dev": true, + "requires": { + "eventemitter3": "^4.0.4", + "p-timeout": "^3.2.0" + } + }, "p-retry": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-3.0.1.tgz", @@ -25317,6 +27754,12 @@ "callsites": "^3.0.0" } }, + "parse-dont-validate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/parse-dont-validate/-/parse-dont-validate-4.1.0.tgz", + "integrity": "sha512-MrrhzYT4A6Ft3vf6W5DaGt/i8/p3/YgISC2FQxJ+cENp7C08sln8hcP2eU9fsTf9VG3m0AE/VH/x7R/4nuWafQ==", + "dev": true + }, "parse-json": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", @@ -25413,63 +27856,403 @@ "integrity": "sha512-0Gni6D4UcLTbv9c57DfxDGdr41XfgUjqWZu492f0cIGr16zDU06BWP/RAEvOuo7CQ0CNjHaLlM59YJJFm3NWlw==", "dev": true, "requires": { - "pinkie": "^2.0.0" + "pinkie": "^2.0.0" + } + }, + "pirates": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.5.tgz", + "integrity": "sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ==", + "dev": true + }, + "pkg-dir": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-5.0.0.tgz", + "integrity": "sha512-NPE8TDbzl/3YQYY7CSS228s3g2ollTFnc+Qi3tqmqJp9Vg2ovUpixcJEo2HJScN2Ez+kEaal6y70c0ehqJBJeA==", + "dev": true, + "requires": { + "find-up": "^5.0.0" + }, + "dependencies": { + "find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "requires": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + } + }, + "locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "requires": { + "p-locate": "^5.0.0" + } + }, + "p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "requires": { + "p-limit": "^3.0.2" + } + } + } + }, + "please-upgrade-node": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/please-upgrade-node/-/please-upgrade-node-3.2.0.tgz", + "integrity": "sha512-gQR3WpIgNIKwBMVLkpMUeR3e1/E1y42bqDQZfql+kDeXd8COYfM8PQA4X6y7a8u9Ua9FHmsrrmirW2vHs45hWg==", + "dev": true, + "requires": { + "semver-compare": "^1.0.0" + } + }, + "postcss": { + "version": "8.4.21", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.21.tgz", + "integrity": "sha512-tP7u/Sn/dVxK2NnruI4H9BG+x+Wxz6oeZ1cJ8P6G/PZY0IKk4k/63TDsQf2kQq3+qoJeLm2kIBUNlZe3zgb4Zg==", + "dev": true, + "requires": { + "nanoid": "^3.3.4", + "picocolors": "^1.0.0", + "source-map-js": "^1.0.2" + } + }, + "postcss-calc": { + "version": "8.2.4", + "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-8.2.4.tgz", + "integrity": "sha512-SmWMSJmB8MRnnULldx0lQIyhSNvuDl9HfrZkaqqE/WHAhToYsAvDq+yAsA/kIyINDszOp3Rh0GFoNuH5Ypsm3Q==", + "dev": true, + "requires": { + "postcss-selector-parser": "^6.0.9", + "postcss-value-parser": "^4.2.0" + } + }, + "postcss-colormin": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-5.3.0.tgz", + "integrity": "sha512-WdDO4gOFG2Z8n4P8TWBpshnL3JpmNmJwdnfP2gbk2qBA8PWwOYcmjmI/t3CmMeL72a7Hkd+x/Mg9O2/0rD54Pg==", + "dev": true, + "requires": { + "browserslist": "^4.16.6", + "caniuse-api": "^3.0.0", + "colord": "^2.9.1", + "postcss-value-parser": "^4.2.0" + } + }, + "postcss-convert-values": { + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-5.1.3.tgz", + "integrity": "sha512-82pC1xkJZtcJEfiLw6UXnXVXScgtBrjlO5CBmuDQc+dlb88ZYheFsjTn40+zBVi3DkfF7iezO0nJUPLcJK3pvA==", + "dev": true, + "requires": { + "browserslist": "^4.21.4", + "postcss-value-parser": "^4.2.0" + } + }, + "postcss-discard-comments": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-5.1.2.tgz", + "integrity": "sha512-+L8208OVbHVF2UQf1iDmRcbdjJkuBF6IS29yBDSiWUIzpYaAhtNl6JYnYm12FnkeCwQqF5LeklOu6rAqgfBZqQ==", + "dev": true, + "requires": {} + }, + "postcss-discard-duplicates": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-5.1.0.tgz", + "integrity": "sha512-zmX3IoSI2aoenxHV6C7plngHWWhUOV3sP1T8y2ifzxzbtnuhk1EdPwm0S1bIUNaJ2eNbWeGLEwzw8huPD67aQw==", + "dev": true, + "requires": {} + }, + "postcss-discard-empty": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-5.1.1.tgz", + "integrity": "sha512-zPz4WljiSuLWsI0ir4Mcnr4qQQ5e1Ukc3i7UfE2XcrwKK2LIPIqE5jxMRxO6GbI3cv//ztXDsXwEWT3BHOGh3A==", + "dev": true, + "requires": {} + }, + "postcss-discard-overridden": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-5.1.0.tgz", + "integrity": "sha512-21nOL7RqWR1kasIVdKs8HNqQJhFxLsyRfAnUDm4Fe4t4mCWL9OJiHvlHPjcd8zc5Myu89b/7wZDnOSjFgeWRtw==", + "dev": true, + "requires": {} + }, + "postcss-load-config": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-3.1.4.tgz", + "integrity": "sha512-6DiM4E7v4coTE4uzA8U//WhtPwyhiim3eyjEMFCnUpzbrkK9wJHgKDT2mR+HbtSrd/NubVaYTOpSpjUl8NQeRg==", + "dev": true, + "requires": { + "lilconfig": "^2.0.5", + "yaml": "^1.10.2" + } + }, + "postcss-merge-longhand": { + "version": "5.1.7", + "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-5.1.7.tgz", + "integrity": "sha512-YCI9gZB+PLNskrK0BB3/2OzPnGhPkBEwmwhfYk1ilBHYVAZB7/tkTHFBAnCrvBBOmeYyMYw3DMjT55SyxMBzjQ==", + "dev": true, + "requires": { + "postcss-value-parser": "^4.2.0", + "stylehacks": "^5.1.1" + } + }, + "postcss-merge-rules": { + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-5.1.3.tgz", + "integrity": "sha512-LbLd7uFC00vpOuMvyZop8+vvhnfRGpp2S+IMQKeuOZZapPRY4SMq5ErjQeHbHsjCUgJkRNrlU+LmxsKIqPKQlA==", + "dev": true, + "requires": { + "browserslist": "^4.21.4", + "caniuse-api": "^3.0.0", + "cssnano-utils": "^3.1.0", + "postcss-selector-parser": "^6.0.5" + } + }, + "postcss-minify-font-values": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-5.1.0.tgz", + "integrity": "sha512-el3mYTgx13ZAPPirSVsHqFzl+BBBDrXvbySvPGFnQcTI4iNslrPaFq4muTkLZmKlGk4gyFAYUBMH30+HurREyA==", + "dev": true, + "requires": { + "postcss-value-parser": "^4.2.0" + } + }, + "postcss-minify-gradients": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-5.1.1.tgz", + "integrity": "sha512-VGvXMTpCEo4qHTNSa9A0a3D+dxGFZCYwR6Jokk+/3oB6flu2/PnPXAh2x7x52EkY5xlIHLm+Le8tJxe/7TNhzw==", + "dev": true, + "requires": { + "colord": "^2.9.1", + "cssnano-utils": "^3.1.0", + "postcss-value-parser": "^4.2.0" + } + }, + "postcss-minify-params": { + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-5.1.4.tgz", + "integrity": "sha512-+mePA3MgdmVmv6g+30rn57USjOGSAyuxUmkfiWpzalZ8aiBkdPYjXWtHuwJGm1v5Ojy0Z0LaSYhHaLJQB0P8Jw==", + "dev": true, + "requires": { + "browserslist": "^4.21.4", + "cssnano-utils": "^3.1.0", + "postcss-value-parser": "^4.2.0" + } + }, + "postcss-minify-selectors": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-5.2.1.tgz", + "integrity": "sha512-nPJu7OjZJTsVUmPdm2TcaiohIwxP+v8ha9NehQ2ye9szv4orirRU3SDdtUmKH+10nzn0bAyOXZ0UEr7OpvLehg==", + "dev": true, + "requires": { + "postcss-selector-parser": "^6.0.5" + } + }, + "postcss-modules": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/postcss-modules/-/postcss-modules-4.3.1.tgz", + "integrity": "sha512-ItUhSUxBBdNamkT3KzIZwYNNRFKmkJrofvC2nWab3CPKhYBQ1f27XXh1PAPE27Psx58jeelPsxWB/+og+KEH0Q==", + "dev": true, + "requires": { + "generic-names": "^4.0.0", + "icss-replace-symbols": "^1.1.0", + "lodash.camelcase": "^4.3.0", + "postcss-modules-extract-imports": "^3.0.0", + "postcss-modules-local-by-default": "^4.0.0", + "postcss-modules-scope": "^3.0.0", + "postcss-modules-values": "^4.0.0", + "string-hash": "^1.1.1" + } + }, + "postcss-modules-extract-imports": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.0.0.tgz", + "integrity": "sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw==", + "dev": true, + "requires": {} + }, + "postcss-modules-local-by-default": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.0.tgz", + "integrity": "sha512-sT7ihtmGSF9yhm6ggikHdV0hlziDTX7oFoXtuVWeDd3hHObNkcHRo9V3yg7vCAY7cONyxJC/XXCmmiHHcvX7bQ==", + "dev": true, + "requires": { + "icss-utils": "^5.0.0", + "postcss-selector-parser": "^6.0.2", + "postcss-value-parser": "^4.1.0" + } + }, + "postcss-modules-scope": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.0.0.tgz", + "integrity": "sha512-hncihwFA2yPath8oZ15PZqvWGkWf+XUfQgUGamS4LqoP1anQLOsOJw0vr7J7IwLpoY9fatA2qiGUGmuZL0Iqlg==", + "dev": true, + "requires": { + "postcss-selector-parser": "^6.0.4" + } + }, + "postcss-modules-values": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz", + "integrity": "sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==", + "dev": true, + "requires": { + "icss-utils": "^5.0.0" + } + }, + "postcss-normalize-charset": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-5.1.0.tgz", + "integrity": "sha512-mSgUJ+pd/ldRGVx26p2wz9dNZ7ji6Pn8VWBajMXFf8jk7vUoSrZ2lt/wZR7DtlZYKesmZI680qjr2CeFF2fbUg==", + "dev": true, + "requires": {} + }, + "postcss-normalize-display-values": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-5.1.0.tgz", + "integrity": "sha512-WP4KIM4o2dazQXWmFaqMmcvsKmhdINFblgSeRgn8BJ6vxaMyaJkwAzpPpuvSIoG/rmX3M+IrRZEz2H0glrQNEA==", + "dev": true, + "requires": { + "postcss-value-parser": "^4.2.0" + } + }, + "postcss-normalize-positions": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-5.1.1.tgz", + "integrity": "sha512-6UpCb0G4eofTCQLFVuI3EVNZzBNPiIKcA1AKVka+31fTVySphr3VUgAIULBhxZkKgwLImhzMR2Bw1ORK+37INg==", + "dev": true, + "requires": { + "postcss-value-parser": "^4.2.0" + } + }, + "postcss-normalize-repeat-style": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-5.1.1.tgz", + "integrity": "sha512-mFpLspGWkQtBcWIRFLmewo8aC3ImN2i/J3v8YCFUwDnPu3Xz4rLohDO26lGjwNsQxB3YF0KKRwspGzE2JEuS0g==", + "dev": true, + "requires": { + "postcss-value-parser": "^4.2.0" + } + }, + "postcss-normalize-string": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-5.1.0.tgz", + "integrity": "sha512-oYiIJOf4T9T1N4i+abeIc7Vgm/xPCGih4bZz5Nm0/ARVJ7K6xrDlLwvwqOydvyL3RHNf8qZk6vo3aatiw/go3w==", + "dev": true, + "requires": { + "postcss-value-parser": "^4.2.0" + } + }, + "postcss-normalize-timing-functions": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-5.1.0.tgz", + "integrity": "sha512-DOEkzJ4SAXv5xkHl0Wa9cZLF3WCBhF3o1SKVxKQAa+0pYKlueTpCgvkFAHfk+Y64ezX9+nITGrDZeVGgITJXjg==", + "dev": true, + "requires": { + "postcss-value-parser": "^4.2.0" + } + }, + "postcss-normalize-unicode": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-5.1.1.tgz", + "integrity": "sha512-qnCL5jzkNUmKVhZoENp1mJiGNPcsJCs1aaRmURmeJGES23Z/ajaln+EPTD+rBeNkSryI+2WTdW+lwcVdOikrpA==", + "dev": true, + "requires": { + "browserslist": "^4.21.4", + "postcss-value-parser": "^4.2.0" + } + }, + "postcss-normalize-url": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-5.1.0.tgz", + "integrity": "sha512-5upGeDO+PVthOxSmds43ZeMeZfKH+/DKgGRD7TElkkyS46JXAUhMzIKiCa7BabPeIy3AQcTkXwVVN7DbqsiCew==", + "dev": true, + "requires": { + "normalize-url": "^6.0.1", + "postcss-value-parser": "^4.2.0" + } + }, + "postcss-normalize-whitespace": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-5.1.1.tgz", + "integrity": "sha512-83ZJ4t3NUDETIHTa3uEg6asWjSBYL5EdkVB0sDncx9ERzOKBVJIUeDO9RyA9Zwtig8El1d79HBp0JEi8wvGQnA==", + "dev": true, + "requires": { + "postcss-value-parser": "^4.2.0" + } + }, + "postcss-ordered-values": { + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-5.1.3.tgz", + "integrity": "sha512-9UO79VUhPwEkzbb3RNpqqghc6lcYej1aveQteWY+4POIwlqkYE21HKWaLDF6lWNuqCobEAyTovVhtI32Rbv2RQ==", + "dev": true, + "requires": { + "cssnano-utils": "^3.1.0", + "postcss-value-parser": "^4.2.0" + } + }, + "postcss-reduce-initial": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-5.1.1.tgz", + "integrity": "sha512-//jeDqWcHPuXGZLoolFrUXBDyuEGbr9S2rMo19bkTIjBQ4PqkaO+oI8wua5BOUxpfi97i3PCoInsiFIEBfkm9w==", + "dev": true, + "requires": { + "browserslist": "^4.21.4", + "caniuse-api": "^3.0.0" + } + }, + "postcss-reduce-transforms": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-5.1.0.tgz", + "integrity": "sha512-2fbdbmgir5AvpW9RLtdONx1QoYG2/EtqpNQbFASDlixBbAYuTcJ0dECwlqNqH7VbaUnEnh8SrxOe2sRIn24XyQ==", + "dev": true, + "requires": { + "postcss-value-parser": "^4.2.0" } }, - "pirates": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.5.tgz", - "integrity": "sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ==", - "dev": true + "postcss-selector-parser": { + "version": "6.0.11", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.11.tgz", + "integrity": "sha512-zbARubNdogI9j7WY4nQJBiNqQf3sLS3wCP4WfOidu+p28LofJqDH1tcXypGrcmMHhDk2t9wGhCsYe/+szLTy1g==", + "dev": true, + "requires": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + } }, - "pkg-dir": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-5.0.0.tgz", - "integrity": "sha512-NPE8TDbzl/3YQYY7CSS228s3g2ollTFnc+Qi3tqmqJp9Vg2ovUpixcJEo2HJScN2Ez+kEaal6y70c0ehqJBJeA==", + "postcss-svgo": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-5.1.0.tgz", + "integrity": "sha512-D75KsH1zm5ZrHyxPakAxJWtkyXew5qwS70v56exwvw542d9CRtTo78K0WeFxZB4G7JXKKMbEZtZayTGdIky/eA==", "dev": true, "requires": { - "find-up": "^5.0.0" - }, - "dependencies": { - "find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", - "dev": true, - "requires": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - } - }, - "locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", - "dev": true, - "requires": { - "p-locate": "^5.0.0" - } - }, - "p-locate": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", - "dev": true, - "requires": { - "p-limit": "^3.0.2" - } - } + "postcss-value-parser": "^4.2.0", + "svgo": "^2.7.0" } }, - "please-upgrade-node": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/please-upgrade-node/-/please-upgrade-node-3.2.0.tgz", - "integrity": "sha512-gQR3WpIgNIKwBMVLkpMUeR3e1/E1y42bqDQZfql+kDeXd8COYfM8PQA4X6y7a8u9Ua9FHmsrrmirW2vHs45hWg==", + "postcss-unique-selectors": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-5.1.1.tgz", + "integrity": "sha512-5JiODlELrz8L2HwxfPnhOWZYWDxVHWL83ufOv84NrcgipI7TaeRsatAhK4Tr2/ZiYldpK/wBvw5BD3qfaK96GA==", "dev": true, "requires": { - "semver-compare": "^1.0.0" + "postcss-selector-parser": "^6.0.5" } }, + "postcss-value-parser": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", + "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", + "dev": true + }, "prelude-ls": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", @@ -25483,9 +28266,15 @@ "dev": true }, "prettier": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.1.1.tgz", - "integrity": "sha512-9bY+5ZWCfqj3ghYBLxApy2zf6m+NJo5GzmLTpr9FsApsfjriNnS2dahWReHMi7qNPhhHl9SYHJs2cHZLgexNIw==", + "version": "2.8.3", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.3.tgz", + "integrity": "sha512-tJ/oJ4amDihPoufT5sM0Z1SKEuKay8LfVAMlbbhnnkvt6BUserZylqo2PN+p9KeljLr0OHa2rXHU1T8reeoTrw==", + "dev": true + }, + "pretty-bytes": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-5.6.0.tgz", + "integrity": "sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg==", "dev": true }, "pretty-format": { @@ -25524,6 +28313,12 @@ } } }, + "promise.series": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/promise.series/-/promise.series-0.2.0.tgz", + "integrity": "sha512-VWQJyU2bcDTgZw8kpfBpB/ejZASlCrzwz5f2hjb/zlujOEB4oeiAhHygAWq8ubsX2GVkD4kCU5V2dwOTaCY5EQ==", + "dev": true + }, "prompts": { "version": "2.4.2", "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", @@ -26013,29 +28808,90 @@ "fsevents": "~2.3.2" } }, - "rollup-plugin-prettier": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/rollup-plugin-prettier/-/rollup-plugin-prettier-2.3.0.tgz", - "integrity": "sha512-4jE47L78+MJd6teTRk620mZRX3xZlMx9cTFDJjoR7S37ZDFlJo6xprBraemjVckcVDKdMsG0eppV778V83jbmQ==", + "rollup-plugin-bundle-size": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/rollup-plugin-bundle-size/-/rollup-plugin-bundle-size-1.0.3.tgz", + "integrity": "sha512-aWj0Pvzq90fqbI5vN1IvUrlf4utOqy+AERYxwWjegH1G8PzheMnrRIgQ5tkwKVtQMDP0bHZEACW/zLDF+XgfXQ==", "dev": true, "requires": { - "@types/prettier": "^1.0.0 || ^2.0.0", - "diff": "5.1.0", - "lodash.hasin": "4.5.2", - "lodash.isempty": "4.4.0", - "lodash.isnil": "4.0.0", - "lodash.omitby": "4.6.0", - "magic-string": "0.26.7" + "chalk": "^1.1.3", + "maxmin": "^2.1.0" }, "dependencies": { - "magic-string": { - "version": "0.26.7", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.26.7.tgz", - "integrity": "sha512-hX9XH3ziStPoPhJxLq1syWuZMxbDvGNbVchfrdCtanC7D13888bMFow61x8axrx+GfHLtVeAx2kxL7tTGRl+Ow==", + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==", + "dev": true + }, + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha512-kmCevFghRiWM7HB5zTPULl4r9bVFSWjz62MhqizDGUrq2NWuNMQyuv4tHHoKJHs69M/MF64lEcHdYIocrdWQYA==", + "dev": true + }, + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A==", + "dev": true, + "requires": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + } + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==", "dev": true, "requires": { - "sourcemap-codec": "^1.4.8" + "ansi-regex": "^2.0.0" } + }, + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha512-KKNVtd6pCYgPIKU4cp2733HWYCpplQhddZLBUryaAHou723x+FRzQ5Df824Fj+IyyuiQTRoub4SnIFfIcrp70g==", + "dev": true + } + } + }, + "rollup-plugin-postcss": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/rollup-plugin-postcss/-/rollup-plugin-postcss-4.0.2.tgz", + "integrity": "sha512-05EaY6zvZdmvPUDi3uCcAQoESDcYnv8ogJJQRp6V5kZ6J6P7uAVJlrTZcaaA20wTH527YTnKfkAoPxWI/jPp4w==", + "dev": true, + "requires": { + "chalk": "^4.1.0", + "concat-with-sourcemaps": "^1.1.0", + "cssnano": "^5.0.1", + "import-cwd": "^3.0.0", + "p-queue": "^6.6.2", + "pify": "^5.0.0", + "postcss-load-config": "^3.0.0", + "postcss-modules": "^4.0.0", + "promise.series": "^0.2.0", + "resolve": "^1.19.0", + "rollup-pluginutils": "^2.8.2", + "safe-identifier": "^0.4.2", + "style-inject": "^0.3.0" + }, + "dependencies": { + "pify": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-5.0.0.tgz", + "integrity": "sha512-eW/gHNMlxdSP6dmG6uJip6FXN0EQBwm2clYYd8Wul42Cwu/DK8HEftzsapcNdYe2MfLiIwZqsDk2RDEsTE79hA==", + "dev": true } } }, @@ -26065,31 +28921,139 @@ } }, "rollup-plugin-typescript2": { - "version": "0.27.3", - "resolved": "https://registry.npmjs.org/rollup-plugin-typescript2/-/rollup-plugin-typescript2-0.27.3.tgz", - "integrity": "sha512-gmYPIFmALj9D3Ga1ZbTZAKTXq1JKlTQBtj299DXhqYz9cL3g/AQfUvbb2UhH+Nf++cCq941W2Mv7UcrcgLzJJg==", + "version": "0.32.1", + "resolved": "https://registry.npmjs.org/rollup-plugin-typescript2/-/rollup-plugin-typescript2-0.32.1.tgz", + "integrity": "sha512-RanO8bp1WbeMv0bVlgcbsFNCn+Y3rX7wF97SQLDxf0fMLsg0B/QFF005t4AsGUcDgF3aKJHoqt4JF2xVaABeKw==", "dev": true, "requires": { - "@rollup/pluginutils": "^3.1.0", - "find-cache-dir": "^3.3.1", - "fs-extra": "8.1.0", - "resolve": "1.17.0", - "tslib": "2.0.1" + "@rollup/pluginutils": "^4.1.2", + "find-cache-dir": "^3.3.2", + "fs-extra": "^10.0.0", + "resolve": "^1.20.0", + "tslib": "^2.4.0" }, "dependencies": { - "resolve": { - "version": "1.17.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.17.0.tgz", - "integrity": "sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w==", + "@rollup/pluginutils": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-4.2.1.tgz", + "integrity": "sha512-iKnFXr7NkdZAIHiIWE+BX5ULi/ucVFYWD6TbAV+rZctiRTY2PL6tsIKhoIOaoskiWAkgu+VsbXgUVDNLHf+InQ==", "dev": true, "requires": { - "path-parse": "^1.0.6" + "estree-walker": "^2.0.1", + "picomatch": "^2.2.2" } }, - "tslib": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.0.1.tgz", - "integrity": "sha512-SgIkNheinmEBgx1IUNirK0TUD4X9yjjBRTqqjggWCU3pUEqIk3/Uwl3yRixYKT6WjQuGiwDv4NomL3wqRCj+CQ==", + "fs-extra": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", + "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", + "dev": true, + "requires": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + } + }, + "jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.6", + "universalify": "^2.0.0" + } + }, + "universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "dev": true + } + } + }, + "rollup-plugin-visualizer": { + "version": "5.9.0", + "resolved": "https://registry.npmjs.org/rollup-plugin-visualizer/-/rollup-plugin-visualizer-5.9.0.tgz", + "integrity": "sha512-bbDOv47+Bw4C/cgs0czZqfm8L82xOZssk4ayZjG40y9zbXclNk7YikrZTDao6p7+HDiGxrN0b65SgZiVm9k1Cg==", + "dev": true, + "requires": { + "open": "^8.4.0", + "picomatch": "^2.3.1", + "source-map": "^0.7.4", + "yargs": "^17.5.1" + }, + "dependencies": { + "cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "dev": true, + "requires": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + } + }, + "open": { + "version": "8.4.0", + "resolved": "https://registry.npmjs.org/open/-/open-8.4.0.tgz", + "integrity": "sha512-XgFPPM+B28FtCCgSb9I+s9szOC1vZRSwgWsRUA5ylIxRTgKozqjOCrVOqGsYABPYK5qnfqClxZTFBa8PKt2v6Q==", + "dev": true, + "requires": { + "define-lazy-prop": "^2.0.0", + "is-docker": "^2.1.1", + "is-wsl": "^2.2.0" + } + }, + "source-map": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", + "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", + "dev": true + }, + "y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "dev": true + }, + "yargs": { + "version": "17.6.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.6.2.tgz", + "integrity": "sha512-1/9UrdHjDZc0eOU0HxOHoS78C69UD3JRMvzlJ7S79S2nTaWRA/whGCTV8o9e/N/1Va9YIV7Q4sOxD8VV4pCWOw==", + "dev": true, + "requires": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + } + }, + "yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "dev": true + } + } + }, + "rollup-pluginutils": { + "version": "2.8.2", + "resolved": "https://registry.npmjs.org/rollup-pluginutils/-/rollup-pluginutils-2.8.2.tgz", + "integrity": "sha512-EEp9NhnUkwY8aif6bxgovPHMoMoNr2FulJziTndpt5H9RdwC47GSGuII9XxpSdzVGM0GWrNPHV6ie1LTNJPaLQ==", + "dev": true, + "requires": { + "estree-walker": "^0.6.1" + }, + "dependencies": { + "estree-walker": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-0.6.1.tgz", + "integrity": "sha512-SqmZANLWS0mnatqbSfRP5g8OXZC12Fgg1IwNtLsyHDzJizORW4khDfjPqJZsemPWBB2uqykUah5YpQ6epsqC/w==", "dev": true } } @@ -26127,12 +29091,27 @@ "tslib": "^2.1.0" } }, + "sade": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/sade/-/sade-1.8.1.tgz", + "integrity": "sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A==", + "dev": true, + "requires": { + "mri": "^1.1.0" + } + }, "safe-buffer": { "version": "5.2.1", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", "dev": true }, + "safe-identifier": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/safe-identifier/-/safe-identifier-0.4.2.tgz", + "integrity": "sha512-6pNbSMW6OhAi9j+N8V+U715yBQsaWJ7eyEUaOrawX+isg5ZxhUlV1NipNtgaKHmFGiABwt+ZF04Ii+3Xjkg+8w==", + "dev": true + }, "safe-regex-test": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.0.tgz", @@ -26320,6 +29299,12 @@ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true }, + "source-map-js": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", + "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", + "dev": true + }, "source-map-support": { "version": "0.5.13", "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.13.tgz", @@ -26409,6 +29394,12 @@ "tweetnacl": "~0.14.0" } }, + "stable": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/stable/-/stable-0.1.8.tgz", + "integrity": "sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==", + "dev": true + }, "stack-utils": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz", @@ -26441,6 +29432,12 @@ "integrity": "sha512-a1uQGz7IyVy9YwhqjZIZu1c8JO8dNIe20xBmSS6qu9kv++k3JGzCVmprbNN5Kn+BgzD5E7YYwg1CcjuJMRNsvg==", "dev": true }, + "string-hash": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/string-hash/-/string-hash-1.1.3.tgz", + "integrity": "sha512-kJUvRUFK49aub+a7T1nNE66EJbZBMnBgoC1UbCZ5n6bsZKBRga4KgBRTMn/pFkeCZSYtNeSyMxPDM0AXWELk2A==", + "dev": true + }, "string-length": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz", @@ -26462,6 +29459,22 @@ "strip-ansi": "^6.0.1" } }, + "string.prototype.matchall": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.8.tgz", + "integrity": "sha512-6zOCOcJ+RJAQshcTvXPHoxoQGONa3e/Lqx90wUA+wEzX78sg5Bo+1tQo4N0pohS0erG9qtCqJDjNCQBjeWVxyg==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4", + "get-intrinsic": "^1.1.3", + "has-symbols": "^1.0.3", + "internal-slot": "^1.0.3", + "regexp.prototype.flags": "^1.4.3", + "side-channel": "^1.0.4" + } + }, "string.prototype.trimend": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.6.tgz", @@ -26545,6 +29558,22 @@ "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", "dev": true }, + "style-inject": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/style-inject/-/style-inject-0.3.0.tgz", + "integrity": "sha512-IezA2qp+vcdlhJaVm5SOdPPTUu0FCEqfNSli2vRuSIBbu5Nq5UvygTk/VzeCqfLz2Atj3dVII5QBKGZRZ0edzw==", + "dev": true + }, + "stylehacks": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-5.1.1.tgz", + "integrity": "sha512-sBpcd5Hx7G6seo7b1LkpttvTz7ikD0LlH5RmdcBNb6fFR0Fl7LQwHDFr300q4cwUqi+IYrFGmsIHieMBfnN/Bw==", + "dev": true, + "requires": { + "browserslist": "^4.21.4", + "postcss-selector-parser": "^6.0.4" + } + }, "supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -26570,6 +29599,29 @@ "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", "dev": true }, + "svgo": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/svgo/-/svgo-2.8.0.tgz", + "integrity": "sha512-+N/Q9kV1+F+UeWYoSiULYo4xYSDQlTgb+ayMobAXPwMnLvop7oxKMo9OzIrX5x3eS4L4f2UHhc9axXwY8DpChg==", + "dev": true, + "requires": { + "@trysound/sax": "0.2.0", + "commander": "^7.2.0", + "css-select": "^4.1.3", + "css-tree": "^1.1.3", + "csso": "^4.2.0", + "picocolors": "^1.0.0", + "stable": "^0.1.8" + }, + "dependencies": { + "commander": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", + "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", + "dev": true + } + } + }, "symbol-observable": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-1.2.0.tgz", @@ -26666,6 +29718,16 @@ "integrity": "sha512-G7r3AhovYtr5YKOWQkta8RKAPb+J9IsO4uVmzjl8AZwfhs8UcUwTiD6gcJYSgOtzyjvQKrKYn41syHbUWMkafA==", "dev": true }, + "tiny-glob": { + "version": "0.2.9", + "resolved": "https://registry.npmjs.org/tiny-glob/-/tiny-glob-0.2.9.tgz", + "integrity": "sha512-g/55ssRPUjShh+xkfx9UPDXqhckHEsHr4Vd9zX55oSdGZc/MD0m3sferOkwWtp98bv+kcVfEHtRJgBVJzelrzg==", + "dev": true, + "requires": { + "globalyzer": "0.1.0", + "globrex": "^0.1.2" + } + }, "tmp": { "version": "0.0.33", "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", @@ -27608,6 +30670,12 @@ } } }, + "tsafe": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/tsafe/-/tsafe-1.4.1.tgz", + "integrity": "sha512-3IDBalvf6SyvHFS14UiwCWzqdSdo+Q0k2J7DZyJYaHW/iraW9DJpaBKDJpry3yQs3o/t/A+oGaRW3iVt2lKxzA==", + "dev": true + }, "tsconfig-paths": { "version": "3.14.1", "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.14.1.tgz", diff --git a/package.json b/package.json index 90a0020c..f29a9e50 100644 --- a/package.json +++ b/package.json @@ -13,20 +13,22 @@ "typescript types" ], "homepage": "https://eta.js.org", - "main": "dist/eta.cjs", - "browser": "dist/browser/eta.min.js", - "module": "dist/eta.es.js", "type": "module", + "main": "./dist/eta.umd.js", + "module": "./dist/eta.module.js", + "umd:main": "./dist/eta.umd.js", + "unpkg": "./dist/browser.min.umd.js", + "types": "./dist/types/eta.d.ts", + "source": "src/index.ts", "exports": { - "types": "./dist/types/index.d.ts", - "import": "./dist/eta.es.js", - "require": "./dist/eta.cjs", - "browser": "./dist/browser/eta.min.js" + ".": { + "types": "./dist/types/eta.d.ts", + "browser": "./dist/browser.min.umd.js", + "require": "./dist/eta.umd.js", + "import": "./dist/eta.module.js", + "default": "./dist/eta.umd.js" + } }, - "types": "dist/types/index.d.ts", - "typings": "dist/types/index.d.ts", - "jsdelivr": "dist/browser/eta.min.js", - "unpkg": "dist/browser/eta.min.js", "sideEffects": false, "files": [ "dist" @@ -45,7 +47,9 @@ "node": ">=6.0.0" }, "scripts": { - "build": "denoify && rollup -c rollup.config.ts && rimraf docs && typedoc --tsconfig tsconfig.json src && deno fmt deno_dist/*.ts", + "build:node": "microbundle src/index.ts --target node --format esm,umd", + "build:browser": "microbundle src/browser.ts --target web --format umd --output dist/browser.min.js", + "build": "denoify && npm run build:node && npm run build:browser && rimraf docs && typedoc --tsconfig tsconfig.json src && deno fmt deno_dist/*.ts", "commit": "git-cz", "deploy-docs": "ts-node tools/gh-pages-publish", "format": "prettier --write '{src,test}/**/!(*.deno).ts' && deno fmt deno_dist/*.ts", @@ -54,7 +58,7 @@ "release": "npm run build && np", "report-coverage": "cat ./coverage/lcov.info | coveralls", "size": "size-limit", - "start": "rollup -c rollup.config.ts -w", + "start": "microbundle watch", "test": "jest --coverage && npm run test:deno && npm run size", "test:deno": "deno test test/deno/*.spec.ts --allow-read --unstable", "test:prod": "npm run lint && npm run test -- --no-cache", @@ -63,7 +67,7 @@ }, "size-limit": [ { - "path": "dist/browser/eta.min.js", + "path": "dist/browser.min.umd.js", "limit": "3 KB" } ], @@ -81,6 +85,9 @@ "transform": { ".(ts)": "ts-jest" }, + "moduleNameMapper": { + "^(\\.{1,2}/.*)\\.js$": "$1" + }, "testEnvironment": "node", "testRegex": "\\/test\\/(?!deno\\/).*(\\.spec\\.ts)$", "moduleFileExtensions": [ @@ -123,35 +130,28 @@ "devDependencies": { "@commitlint/cli": "^9.1.2", "@commitlint/config-conventional": "^17.3.0", - "@rollup/plugin-commonjs": "^15.1.0", - "@rollup/plugin-node-resolve": "^9.0.0", "@size-limit/preset-small-lib": "^8.1.0", "@types/jest": "^26.0.13", "@types/node": "^14.11.1", - "@typescript-eslint/eslint-plugin": "5", - "@typescript-eslint/parser": "^5.46.1", + "@typescript-eslint/eslint-plugin": "^5.48.2", + "@typescript-eslint/parser": "^5.48.2", "commitizen": "^4.2.1", "coveralls": "^3.1.0", "cross-env": "^7.0.2", "cz-conventional-changelog": "^3.3.0", - "denoify": "^0.6.3", - "eslint": "^8.29.0", - "eslint-config-eta-dev": "^1.0.0", - "eslint-config-prettier": "^8.5.0", - "eslint-plugin-import": "2", - "eslint-plugin-node": "11", - "eslint-plugin-promise": "4", - "eslint-plugin-standard": "4", + "denoify": "^1.4.5", + "eslint": "^8.32.0", + "eslint-config-prettier": "^8.6.0", + "eslint-plugin-import": "^2.27.5", + "eslint-plugin-n": "^15.6.1", + "eslint-plugin-promise": "^6.1.1", "husky": "^4.3.0", "jest": "^29.3.1", "lint-staged": "^10.3.0", + "microbundle": "^0.15.1", "np": "^6.5.0", - "prettier": "2.1.1", + "prettier": "^2.8.3", "rimraf": "^3.0.2", - "rollup": "^2.26.11", - "rollup-plugin-prettier": "^2.1.0", - "rollup-plugin-terser": "^7.0.2", - "rollup-plugin-typescript2": "^0.27.2", "shelljs": "^0.8.4", "size-limit": "^8.1.0", "travis-deploy-once": "^5.0.11", diff --git a/rollup.config.ts b/rollup.config.ts deleted file mode 100644 index b6aee0f1..00000000 --- a/rollup.config.ts +++ /dev/null @@ -1,68 +0,0 @@ -import resolve from '@rollup/plugin-node-resolve' -import commonjs from '@rollup/plugin-commonjs' -import typescript from 'rollup-plugin-typescript2' -// import json from 'rollup-plugin-json' // shouldn't need this. Was first in plugins -import { terser } from 'rollup-plugin-terser' -// import { sizeSnapshot } from 'rollup-plugin-size-snapshot' // possibly add this - -// TODO: Someday don't transpile ES6 module dist files to ES5, ex. removing classes -const pkg = require('./package.json') - -export default [ - { - input: 'src/browser.ts', // todo: use rollup-plugin-replace - output: [ - { - file: 'dist/browser/eta.dev.js', - format: 'umd', - name: 'Eta', - sourcemap: true - }, - { - file: pkg.browser, - format: 'umd', - name: 'Eta', - sourcemap: true, - plugins: [terser()] - }, - { - file: 'dist/browser/eta.es.dev.js', - format: 'es', - sourcemap: true - }, - { - file: 'dist/browser/eta.es.min.js', - format: 'es', - sourcemap: true, - plugins: [terser()] - } - ], - plugins: [typescript({ useTsconfigDeclarationDir: true }), commonjs(), resolve()], - // Indicate here external modules you don't wanna include in your bundle (i.e.: 'lodash') - external: [], - watch: { - include: 'src/**' - } - }, - { - input: 'src/index.ts', - output: [ - { - file: pkg.main, - format: 'cjs', - sourcemap: true - }, - { - file: pkg.module, - format: 'es', - sourcemap: true - } - ], - plugins: [typescript({ useTsconfigDeclarationDir: true }), commonjs(), resolve()], - // Indicate here external modules you don't wanna include in your bundle (i.e.: 'lodash') - external: [], - watch: { - include: 'src/**' - } - } -] diff --git a/src/browser.ts b/src/browser.ts index 0d835e3a..b9da9788 100644 --- a/src/browser.ts +++ b/src/browser.ts @@ -1,6 +1,6 @@ -export { default as compileToString } from './compile-string' -export { default as compile } from './compile' -export { default as parse } from './parse' -export { default as render, renderAsync } from './render' -export { templates } from './containers' -export { config, config as defaultConfig, getConfig, configure } from './config' +export { default as compileToString } from "./compile-string.js"; +export { default as compile } from "./compile.js"; +export { default as parse } from "./parse.js"; +export { default as render, renderAsync } from "./render.js"; +export { templates } from "./containers.js"; +export { config, config as defaultConfig, getConfig, configure } from "./config.js"; diff --git a/src/compile-string.ts b/src/compile-string.ts index b360c84a..15988ee4 100644 --- a/src/compile-string.ts +++ b/src/compile-string.ts @@ -1,9 +1,9 @@ -import Parse from './parse' +import Parse from "./parse.js"; /* TYPES */ -import type { EtaConfig } from './config' -import type { AstObject } from './parse' +import type { EtaConfig } from "./config.js"; +import type { AstObject } from "./parse.js"; /* END TYPES */ @@ -19,37 +19,37 @@ import type { AstObject } from './parse' */ export default function compileToString(str: string, config: EtaConfig): string { - const buffer: Array = Parse(str, config) + const buffer: Array = Parse(str, config); let res = "var tR='',__l,__lP" + - (config.include ? ',include=E.include.bind(E)' : '') + - (config.includeFile ? ',includeFile=E.includeFile.bind(E)' : '') + - '\nfunction layout(p,d){__l=p;__lP=d}\n' + - (config.useWith ? 'with(' + config.varName + '||{}){' : '') + + (config.include ? ",include=E.include.bind(E)" : "") + + (config.includeFile ? ",includeFile=E.includeFile.bind(E)" : "") + + "\nfunction layout(p,d){__l=p;__lP=d}\n" + + (config.useWith ? "with(" + config.varName + "||{}){" : "") + compileScope(buffer, config) + (config.includeFile - ? 'if(__l)tR=' + - (config.async ? 'await ' : '') + + ? "if(__l)tR=" + + (config.async ? "await " : "") + `includeFile(__l,Object.assign(${config.varName},{body:tR},__lP))\n` : config.include - ? 'if(__l)tR=' + - (config.async ? 'await ' : '') + + ? "if(__l)tR=" + + (config.async ? "await " : "") + `include(__l,Object.assign(${config.varName},{body:tR},__lP))\n` - : '') + - 'if(cb){cb(null,tR)} return tR' + - (config.useWith ? '}' : '') + : "") + + "if(cb){cb(null,tR)} return tR" + + (config.useWith ? "}" : ""); if (config.plugins) { for (let i = 0; i < config.plugins.length; i++) { - const plugin = config.plugins[i] + const plugin = config.plugins[i]; if (plugin.processFnString) { - res = plugin.processFnString(res, config) + res = plugin.processFnString(res, config); } } } - return res + return res; } /** @@ -66,47 +66,47 @@ export default function compileToString(str: string, config: EtaConfig): string */ function compileScope(buff: Array, config: EtaConfig) { - let i = 0 - const buffLength = buff.length - let returnStr = '' + let i = 0; + const buffLength = buff.length; + let returnStr = ""; for (i; i < buffLength; i++) { - const currentBlock = buff[i] - if (typeof currentBlock === 'string') { - const str = currentBlock + const currentBlock = buff[i]; + if (typeof currentBlock === "string") { + const str = currentBlock; // we know string exists - returnStr += "tR+='" + str + "'\n" + returnStr += "tR+='" + str + "'\n"; } else { - const type = currentBlock.t // ~, s, !, ?, r - let content = currentBlock.val || '' + const type = currentBlock.t; // ~, s, !, ?, r + let content = currentBlock.val || ""; - if (type === 'r') { + if (type === "r") { // raw if (config.filter) { - content = 'E.filter(' + content + ')' + content = "E.filter(" + content + ")"; } - returnStr += 'tR+=' + content + '\n' - } else if (type === 'i') { + returnStr += "tR+=" + content + "\n"; + } else if (type === "i") { // interpolate if (config.filter) { - content = 'E.filter(' + content + ')' + content = "E.filter(" + content + ")"; } if (config.autoEscape) { - content = 'E.e(' + content + ')' + content = "E.e(" + content + ")"; } - returnStr += 'tR+=' + content + '\n' + returnStr += "tR+=" + content + "\n"; // reference - } else if (type === 'e') { + } else if (type === "e") { // execute - returnStr += content + '\n' // you need a \n in case you have <% } %> + returnStr += content + "\n"; // you need a \n in case you have <% } %> } } } - return returnStr + return returnStr; } diff --git a/src/compile.ts b/src/compile.ts index 72841ebc..fb1358e6 100644 --- a/src/compile.ts +++ b/src/compile.ts @@ -1,13 +1,13 @@ -import compileToString from './compile-string' -import { getConfig } from './config' -import EtaErr from './err' +import compileToString from "./compile-string.js"; +import { getConfig } from "./config.js"; +import EtaErr from "./err.js"; /* TYPES */ -import type { EtaConfig, PartialConfig } from './config' -import type { CallbackFn } from './file-handlers' -import { getAsyncFunctionConstructor } from './polyfills' -export type TemplateFunction = (data: object, config: EtaConfig, cb?: CallbackFn) => string +import type { EtaConfig, PartialConfig } from "./config.js"; +import type { CallbackFn } from "./file-handlers.js"; +import { getAsyncFunctionConstructor } from "./polyfills.js"; +export type TemplateFunction = (data: object, config: EtaConfig, cb?: CallbackFn) => string; /* END TYPES */ @@ -28,33 +28,33 @@ export type TemplateFunction = (data: object, config: EtaConfig, cb?: CallbackFn */ export default function compile(str: string, config?: PartialConfig): TemplateFunction { - const options: EtaConfig = getConfig(config || {}) + const options: EtaConfig = getConfig(config || {}); /* ASYNC HANDLING */ // The below code is modified from mde/ejs. All credit should go to them. - const ctor = options.async ? (getAsyncFunctionConstructor() as FunctionConstructor) : Function + const ctor = options.async ? (getAsyncFunctionConstructor() as FunctionConstructor) : Function; /* END ASYNC HANDLING */ try { return new ctor( options.varName, - 'E', // EtaConfig - 'cb', // optional callback + "E", // EtaConfig + "cb", // optional callback compileToString(str, options) - ) as TemplateFunction // eslint-disable-line no-new-func + ) as TemplateFunction; // eslint-disable-line no-new-func } catch (e) { if (e instanceof SyntaxError) { throw EtaErr( - 'Bad template syntax\n\n' + + "Bad template syntax\n\n" + e.message + - '\n' + - Array(e.message.length + 1).join('=') + - '\n' + + "\n" + + Array(e.message.length + 1).join("=") + + "\n" + compileToString(str, options) + - '\n' // This will put an extra newline before the callstack for extra readability - ) + "\n" // This will put an extra newline before the callstack for extra readability + ); } else { - throw e + throw e; } } } diff --git a/src/config.ts b/src/config.ts index 36b4b49c..ee5d4ff8 100644 --- a/src/config.ts +++ b/src/config.ts @@ -1,96 +1,96 @@ -import { templates } from './containers' -import { copyProps, XMLEscape } from './utils' -import EtaErr from './err' +import { templates } from "./containers.js"; +import { copyProps, XMLEscape } from "./utils.js"; +import EtaErr from "./err.js"; /* TYPES */ -import type { TemplateFunction } from './compile' -import type { Cacher } from './storage' +import type { TemplateFunction } from "./compile.js"; +import type { Cacher } from "./storage.js"; -type trimConfig = 'nl' | 'slurp' | false +type trimConfig = "nl" | "slurp" | false; export interface EtaConfig { /** Whether or not to automatically XML-escape interpolations. Default true */ - autoEscape: boolean + autoEscape: boolean; /** Configure automatic whitespace trimming. Default `[false, 'nl']` */ - autoTrim: trimConfig | [trimConfig, trimConfig] + autoTrim: trimConfig | [trimConfig, trimConfig]; /** Compile to async function */ - async: boolean + async: boolean; /** Whether or not to cache templates if `name` or `filename` is passed */ - cache: boolean + cache: boolean; /** XML-escaping function */ - e: (str: string) => string + e: (str: string) => string; /** Parsing options */ parse: { /** Which prefix to use for evaluation. Default `""` */ - exec: string + exec: string; /** Which prefix to use for interpolation. Default `"="` */ - interpolate: string + interpolate: string; /** Which prefix to use for raw interpolation. Default `"~"` */ - raw: string - } + raw: string; + }; /** Array of plugins */ - plugins: Array<{ processFnString?: Function; processAST?: Function; processTemplate?: Function }> + plugins: Array<{ processFnString?: Function; processAST?: Function; processTemplate?: Function }>; /** Remove all safe-to-remove whitespace */ - rmWhitespace: boolean + rmWhitespace: boolean; /** Delimiters: by default `['<%', '%>']` */ - tags: [string, string] + tags: [string, string]; /** Holds template cache */ - templates: Cacher + templates: Cacher; /** Name of the data object. Default `it` */ - varName: string + varName: string; /** Absolute path to template file */ - filename?: string + filename?: string; /** Holds cache of resolved filepaths. Set to `false` to disable */ - filepathCache?: Record | false + filepathCache?: Record | false; /** A filter function applied to every interpolation or raw interpolation */ - filter?: Function + filter?: Function; /** Function to include templates by name */ - include?: Function + include?: Function; /** Function to include templates by filepath */ - includeFile?: Function + includeFile?: Function; /** Name of template */ - name?: string + name?: string; /** Where should absolute paths begin? Default '/' */ - root?: string + root?: string; /** Make data available on the global object instead of varName */ - useWith?: boolean + useWith?: boolean; /** Whether or not to cache templates if `name` or `filename` is passed: duplicate of `cache` */ - 'view cache'?: boolean + "view cache"?: boolean; /** Directory or directories that contain templates */ - views?: string | Array + views?: string | Array; - [index: string]: any // eslint-disable-line @typescript-eslint/no-explicit-any + [index: string]: any; // eslint-disable-line @typescript-eslint/no-explicit-any } export interface EtaConfigWithFilename extends EtaConfig { - filename: string + filename: string; } -export type PartialConfig = Partial -export type PartialAsyncConfig = PartialConfig & { async: true } +export type PartialConfig = Partial; +export type PartialAsyncConfig = PartialConfig & { async: true }; /* END TYPES */ @@ -101,33 +101,33 @@ export type PartialAsyncConfig = PartialConfig & { async: true } */ function includeHelper(this: EtaConfig, templateNameOrPath: string, data: object): string { - const template = this.templates.get(templateNameOrPath) + const template = this.templates.get(templateNameOrPath); if (!template) { - throw EtaErr('Could not fetch template "' + templateNameOrPath + '"') + throw EtaErr('Could not fetch template "' + templateNameOrPath + '"'); } - return template(data, this) + return template(data, this); } /** Eta's base (global) configuration */ const config: EtaConfig = { async: false, autoEscape: true, - autoTrim: [false, 'nl'], + autoTrim: [false, "nl"], cache: false, e: XMLEscape, include: includeHelper, parse: { - exec: '', - interpolate: '=', - raw: '~' + exec: "", + interpolate: "=", + raw: "~", }, plugins: [], rmWhitespace: false, - tags: ['<%', '%>'], + tags: ["<%", "%>"], templates: templates, useWith: false, - varName: 'it' -} + varName: "it", +}; /** * Takes one or two partial (not necessarily complete) configuration objects, merges them 1 layer deep into eta.config, and returns the result @@ -145,24 +145,24 @@ const config: EtaConfig = { function getConfig(override: PartialConfig, baseConfig?: EtaConfig): EtaConfig { // TODO: run more tests on this - const res: PartialConfig = {} // Linked - copyProps(res, config) // Creates deep clone of eta.config, 1 layer deep + const res: PartialConfig = {}; // Linked + copyProps(res, config); // Creates deep clone of eta.config, 1 layer deep if (baseConfig) { - copyProps(res, baseConfig) + copyProps(res, baseConfig); } if (override) { - copyProps(res, override) + copyProps(res, override); } - return res as EtaConfig + return res as EtaConfig; } /** Update Eta's base config */ function configure(options: PartialConfig): Partial { - return copyProps(config, options) + return copyProps(config, options); } -export { config, getConfig, configure } +export { config, getConfig, configure }; diff --git a/src/containers.ts b/src/containers.ts index 6357c055..dbf1d4af 100644 --- a/src/containers.ts +++ b/src/containers.ts @@ -1,8 +1,8 @@ -import { Cacher } from './storage' +import { Cacher } from "./storage.js"; /* TYPES */ -import type { TemplateFunction } from './compile' +import type { TemplateFunction } from "./compile.js"; /* END TYPES */ @@ -12,6 +12,6 @@ import type { TemplateFunction } from './compile' * Stores partials and cached templates */ -const templates = new Cacher({}) +const templates = new Cacher({}); -export { templates } +export { templates }; diff --git a/src/err.ts b/src/err.ts index 1756fb19..d24b06d5 100755 --- a/src/err.ts +++ b/src/err.ts @@ -1,9 +1,9 @@ function setPrototypeOf(obj: any, proto: any) { // eslint-disable-line @typescript-eslint/no-explicit-any if (Object.setPrototypeOf) { - Object.setPrototypeOf(obj, proto) + Object.setPrototypeOf(obj, proto); } else { - obj.__proto__ = proto + obj.__proto__ = proto; } } @@ -23,35 +23,35 @@ function setPrototypeOf(obj: any, proto: any) { */ export default function EtaErr(message: string): Error { - const err = new Error(message) - setPrototypeOf(err, EtaErr.prototype) - return err as Error + const err = new Error(message); + setPrototypeOf(err, EtaErr.prototype); + return err as Error; } EtaErr.prototype = Object.create(Error.prototype, { - name: { value: 'Eta Error', enumerable: false } -}) + name: { value: "Eta Error", enumerable: false }, +}); /** * Throws an EtaErr with a nicely formatted error and message showing where in the template the error occurred. */ export function ParseErr(message: string, str: string, indx: number): void { - const whitespace = str.slice(0, indx).split(/\n/) + const whitespace = str.slice(0, indx).split(/\n/); - const lineNo = whitespace.length - const colNo = whitespace[lineNo - 1].length + 1 + const lineNo = whitespace.length; + const colNo = whitespace[lineNo - 1].length + 1; message += - ' at line ' + + " at line " + lineNo + - ' col ' + + " col " + colNo + - ':\n\n' + - ' ' + + ":\n\n" + + " " + str.split(/\n/)[lineNo - 1] + - '\n' + - ' ' + - Array(colNo).join(' ') + - '^' - throw EtaErr(message) + "\n" + + " " + + Array(colNo).join(" ") + + "^"; + throw EtaErr(message); } diff --git a/src/file-handlers.ts b/src/file-handlers.ts index aae1b70a..3a1c1b33 100644 --- a/src/file-handlers.ts +++ b/src/file-handlers.ts @@ -1,29 +1,29 @@ // express is set like: app.engine('html', require('eta').renderFile) -import EtaErr from './err' -import compile from './compile' -import { getConfig } from './config' -import { getPath, readFile } from './file-utils' -import { copyProps } from './utils' -import { promiseImpl } from './polyfills' +import EtaErr from "./err.js"; +import compile from "./compile.js"; +import { getConfig } from "./config.js"; +import { getPath, readFile } from "./file-utils.js"; +import { copyProps } from "./utils.js"; +import { promiseImpl } from "./polyfills.js"; /* TYPES */ -import type { EtaConfig, PartialConfig, EtaConfigWithFilename } from './config' -import type { TemplateFunction } from './compile' +import type { EtaConfig, PartialConfig, EtaConfigWithFilename } from "./config.js"; +import type { TemplateFunction } from "./compile.js"; -export type CallbackFn = (err: Error | null, str?: string) => void +export type CallbackFn = (err: Error | null, str?: string) => void; interface DataObj { /** Express.js settings may be stored here */ settings?: { - [key: string]: any // eslint-disable-line @typescript-eslint/no-explicit-any - } - [key: string]: any // eslint-disable-line @typescript-eslint/no-explicit-any + [key: string]: any; // eslint-disable-line @typescript-eslint/no-explicit-any + }; + [key: string]: any; // eslint-disable-line @typescript-eslint/no-explicit-any } interface PartialConfigWithFilename extends Partial { - filename: string + filename: string; } /* END TYPES */ @@ -41,16 +41,16 @@ export function loadFile( options: PartialConfigWithFilename, noCache?: boolean ): TemplateFunction { - const config = getConfig(options) - const template = readFile(filePath) + const config = getConfig(options); + const template = readFile(filePath); try { - const compiledTemplate = compile(template, config) + const compiledTemplate = compile(template, config); if (!noCache) { - config.templates.define((config as EtaConfigWithFilename).filename, compiledTemplate) + config.templates.define((config as EtaConfigWithFilename).filename, compiledTemplate); } - return compiledTemplate + return compiledTemplate; } catch (e) { - throw EtaErr('Loading file: ' + filePath + ' failed:\n\n' + (e as Error).message) + throw EtaErr("Loading file: " + filePath + " failed:\n\n" + (e as Error).message); } } @@ -66,19 +66,19 @@ export function loadFile( */ function handleCache(options: EtaConfigWithFilename): TemplateFunction { - const filename = options.filename + const filename = options.filename; if (options.cache) { - const func = options.templates.get(filename) + const func = options.templates.get(filename); if (func) { - return func + return func; } - return loadFile(filename, options) + return loadFile(filename, options); } // Caching is disabled, so pass noCache = true - return loadFile(filename, options, true) + return loadFile(filename, options, true); } /** @@ -96,25 +96,25 @@ function tryHandleCache(data: object, options: EtaConfigWithFilename, cb: Callba try { // Note: if there is an error while rendering the template, // It will bubble up and be caught here - const templateFn = handleCache(options) - templateFn(data, options, cb) + const templateFn = handleCache(options); + templateFn(data, options, cb); } catch (err) { - return cb(err as Error) + return cb(err as Error); } } else { // No callback, try returning a promise - if (typeof promiseImpl === 'function') { + if (typeof promiseImpl === "function") { return new promiseImpl(function (resolve: Function, reject: Function) { try { - const templateFn = handleCache(options) - const result = templateFn(data, options) - resolve(result) + const templateFn = handleCache(options); + const result = templateFn(data, options); + resolve(result); } catch (err) { - reject(err) + reject(err); } - }) + }); } else { - throw EtaErr("Please provide a callback function, this env doesn't support Promises") + throw EtaErr("Please provide a callback function, this env doesn't support Promises"); } } } @@ -138,9 +138,9 @@ function tryHandleCache(data: object, options: EtaConfigWithFilename, cb: Callba function includeFile(path: string, options: EtaConfig): [TemplateFunction, EtaConfig] { // the below creates a new options object, using the parent filepath of the old options object and the path - const newFileOptions = getConfig({ filename: getPath(path, options) }, options) + const newFileOptions = getConfig({ filename: getPath(path, options) }, options); // TODO: make sure properties are currectly copied over - return [handleCache(newFileOptions as EtaConfigWithFilename), newFileOptions] + return [handleCache(newFileOptions as EtaConfigWithFilename), newFileOptions]; } /** @@ -170,18 +170,18 @@ function includeFile(path: string, options: EtaConfig): [TemplateFunction, EtaCo * ``` */ -function renderFile(filename: string, data: DataObj, config?: PartialConfig): Promise +function renderFile(filename: string, data: DataObj, config?: PartialConfig): Promise; -function renderFile(filename: string, data: DataObj, config: PartialConfig, cb: CallbackFn): void +function renderFile(filename: string, data: DataObj, config: PartialConfig, cb: CallbackFn): void; function renderFile( filename: string, data: DataObj, config?: PartialConfig, cb?: CallbackFn -): Promise | void +): Promise | void; -function renderFile(filename: string, data: DataObj, cb: CallbackFn): void +function renderFile(filename: string, data: DataObj, cb: CallbackFn): void; function renderFile( filename: string, @@ -197,52 +197,52 @@ function renderFile( And we want to also make (filename, data, options, cb) available */ - let renderConfig: EtaConfigWithFilename - let callback: CallbackFn | undefined - data = data || {} // If data is undefined, we don't want accessing data.settings to error + let renderConfig: EtaConfigWithFilename; + let callback: CallbackFn | undefined; + data = data || {}; // If data is undefined, we don't want accessing data.settings to error // First, assign our callback function to `callback` // We can leave it undefined if neither parameter is a function; // Callbacks are optional - if (typeof cb === 'function') { + if (typeof cb === "function") { // The 4th argument is the callback - callback = cb - } else if (typeof config === 'function') { + callback = cb; + } else if (typeof config === "function") { // The 3rd arg is the callback - callback = config + callback = config; } // If there is a config object passed in explicitly, use it - if (typeof config === 'object') { - renderConfig = getConfig((config as PartialConfig) || {}) as EtaConfigWithFilename + if (typeof config === "object") { + renderConfig = getConfig((config as PartialConfig) || {}) as EtaConfigWithFilename; } else { // Otherwise, get the config from the data object // And then grab some config options from data.settings // Which is where Express sometimes stores them - renderConfig = getConfig(data as PartialConfig) as EtaConfigWithFilename + renderConfig = getConfig(data as PartialConfig) as EtaConfigWithFilename; if (data.settings) { // Pull a few things from known locations if (data.settings.views) { - renderConfig.views = data.settings.views + renderConfig.views = data.settings.views; } - if (data.settings['view cache']) { - renderConfig.cache = true + if (data.settings["view cache"]) { + renderConfig.cache = true; } // Undocumented after Express 2, but still usable, esp. for // items that are unsafe to be passed along with data, like `root` - const viewOpts = data.settings['view options'] + const viewOpts = data.settings["view options"]; if (viewOpts) { - copyProps(renderConfig, viewOpts) + copyProps(renderConfig, viewOpts); } } } // Set the filename option on the template // This will first try to resolve the file path (see getPath for details) - renderConfig.filename = getPath(filename, renderConfig) + renderConfig.filename = getPath(filename, renderConfig); - return tryHandleCache(data, renderConfig, callback) + return tryHandleCache(data, renderConfig, callback); } /** @@ -272,23 +272,23 @@ function renderFile( * ``` */ -function renderFileAsync(filename: string, data: DataObj, config?: PartialConfig): Promise +function renderFileAsync(filename: string, data: DataObj, config?: PartialConfig): Promise; function renderFileAsync( filename: string, data: DataObj, config: PartialConfig, cb: CallbackFn -): void +): void; function renderFileAsync( filename: string, data: DataObj, config?: PartialConfig, cb?: CallbackFn -): Promise | void +): Promise | void; -function renderFileAsync(filename: string, data: DataObj, cb: CallbackFn): void +function renderFileAsync(filename: string, data: DataObj, cb: CallbackFn): void; function renderFileAsync( filename: string, @@ -298,10 +298,10 @@ function renderFileAsync( ): Promise | void { return renderFile( filename, - typeof config === 'function' ? { ...data, async: true } : data, - typeof config === 'object' ? { ...config, async: true } : config, + typeof config === "function" ? { ...data, async: true } : data, + typeof config === "object" ? { ...config, async: true } : config, cb - ) + ); } -export { includeFile, renderFile, renderFileAsync } +export { includeFile, renderFile, renderFileAsync }; diff --git a/src/file-helpers.ts b/src/file-helpers.ts index b8a717de..0cdb5133 100644 --- a/src/file-helpers.ts +++ b/src/file-helpers.ts @@ -1,11 +1,11 @@ -import { includeFile } from './file-handlers' +import { includeFile } from "./file-handlers.js"; /* TYPES */ -import type { EtaConfig } from './config' +import type { EtaConfig } from "./config.js"; interface GenericData { - [index: string]: any // eslint-disable-line @typescript-eslint/no-explicit-any + [index: string]: any; // eslint-disable-line @typescript-eslint/no-explicit-any } /* END TYPES */ @@ -15,6 +15,6 @@ interface GenericData { */ export function includeFileHelper(this: EtaConfig, path: string, data: GenericData): string { - const templateAndConfig = includeFile(path, this) - return templateAndConfig[0](data, templateAndConfig[1]) + const templateAndConfig = includeFile(path, this); + return templateAndConfig[0](data, templateAndConfig[1]); } diff --git a/src/file-methods.ts b/src/file-methods.ts index 94b29cd6..5a34bdca 100644 --- a/src/file-methods.ts +++ b/src/file-methods.ts @@ -1,5 +1,5 @@ -export { readFileSync, existsSync } from 'fs' +export { readFileSync, existsSync } from "fs"; -import * as path from 'path' +import * as path from "path"; -export { path } +export { path }; diff --git a/src/file-utils.ts b/src/file-utils.ts index c828b226..0db982db 100644 --- a/src/file-utils.ts +++ b/src/file-utils.ts @@ -1,13 +1,13 @@ -import { path, existsSync, readFileSync } from './file-methods' -const _BOM = /^\uFEFF/ +import { path, existsSync, readFileSync } from "./file-methods.js"; +const _BOM = /^\uFEFF/; // express is set like: app.engine('html', require('eta').renderFile) -import EtaErr from './err' +import EtaErr from "./err.js"; /* TYPES */ -import type { EtaConfig } from './config' +import type { EtaConfig } from "./config.js"; /* END TYPES */ @@ -28,8 +28,8 @@ function getWholeFilePath(name: string, parentfile: string, isDirectory?: boolea path.resolve( isDirectory ? parentfile : path.dirname(parentfile), // returns directory the parent file is in name // file - ) + (path.extname(name) ? '' : '.eta') - return includePath + ) + (path.extname(name) ? "" : ".eta"); + return includePath; } /** @@ -51,9 +51,9 @@ function getWholeFilePath(name: string, parentfile: string, isDirectory?: boolea */ function getPath(path: string, options: EtaConfig): string { - let includePath: string | false = false - const views = options.views - let searchedPaths: Array = [] + let includePath: string | false = false; + const views = options.views; + const searchedPaths: Array = []; // If these four values are the same, // getPath() will return the same result every time. @@ -63,18 +63,18 @@ function getPath(path: string, options: EtaConfig): string { filename: options.filename, // filename of the template which called includeFile() path: path, root: options.root, - views: options.views - }) + views: options.views, + }); if (options.cache && options.filepathCache && options.filepathCache[pathOptions]) { // Use the cached filepath - return options.filepathCache[pathOptions] + return options.filepathCache[pathOptions]; } /** Add a filepath to the list of paths we've checked for a template */ function addPathToSearched(pathSearched: string) { if (!searchedPaths.includes(pathSearched)) { - searchedPaths.push(pathSearched) + searchedPaths.push(pathSearched); } } @@ -87,86 +87,86 @@ function getPath(path: string, options: EtaConfig): string { */ function searchViews(views: Array | string | undefined, path: string): string | false { - let filePath + let filePath; // If views is an array, then loop through each directory // And attempt to find the template if ( Array.isArray(views) && views.some(function (v) { - filePath = getWholeFilePath(path, v, true) + filePath = getWholeFilePath(path, v, true); - addPathToSearched(filePath) + addPathToSearched(filePath); - return existsSync(filePath) + return existsSync(filePath); }) ) { // If the above returned true, we know that the filePath was just set to a path // That exists (Array.some() returns as soon as it finds a valid element) - return (filePath as unknown) as string - } else if (typeof views === 'string') { + return filePath as unknown as string; + } else if (typeof views === "string") { // Search for the file if views is a single directory - filePath = getWholeFilePath(path, views, true) + filePath = getWholeFilePath(path, views, true); - addPathToSearched(filePath) + addPathToSearched(filePath); if (existsSync(filePath)) { - return filePath + return filePath; } } // Unable to find a file - return false + return false; } // Path starts with '/', 'C:\', etc. - const match = /^[A-Za-z]+:\\|^\//.exec(path) + const match = /^[A-Za-z]+:\\|^\//.exec(path); // Absolute path, like /partials/partial.eta if (match && match.length) { // We have to trim the beginning '/' off the path, or else // path.resolve(dir, path) will always resolve to just path - const formattedPath = path.replace(/^\/*/, '') + const formattedPath = path.replace(/^\/*/, ""); // First, try to resolve the path within options.views - includePath = searchViews(views, formattedPath) + includePath = searchViews(views, formattedPath); if (!includePath) { // If that fails, searchViews will return false. Try to find the path // inside options.root (by default '/', the base of the filesystem) - const pathFromRoot = getWholeFilePath(formattedPath, options.root || '/', true) + const pathFromRoot = getWholeFilePath(formattedPath, options.root || "/", true); - addPathToSearched(pathFromRoot) + addPathToSearched(pathFromRoot); - includePath = pathFromRoot + includePath = pathFromRoot; } } else { // Relative paths // Look relative to a passed filename first if (options.filename) { - const filePath = getWholeFilePath(path, options.filename) + const filePath = getWholeFilePath(path, options.filename); - addPathToSearched(filePath) + addPathToSearched(filePath); if (existsSync(filePath)) { - includePath = filePath + includePath = filePath; } } // Then look for the template in options.views if (!includePath) { - includePath = searchViews(views, path) + includePath = searchViews(views, path); } if (!includePath) { - throw EtaErr('Could not find the template "' + path + '". Paths tried: ' + searchedPaths) + throw EtaErr('Could not find the template "' + path + '". Paths tried: ' + searchedPaths); } } // If caching and filepathCache are enabled, // cache the input & output of this function. if (options.cache && options.filepathCache) { - options.filepathCache[pathOptions] = includePath + options.filepathCache[pathOptions] = includePath; } - return includePath + return includePath; } /** @@ -175,10 +175,10 @@ function getPath(path: string, options: EtaConfig): string { function readFile(filePath: string): string { try { - return readFileSync(filePath).toString().replace(_BOM, '') // TODO: is replacing BOM's necessary? + return readFileSync(filePath).toString().replace(_BOM, ""); // TODO: is replacing BOM's necessary? } catch { - throw EtaErr("Failed to read template at '" + filePath + "'") + throw EtaErr("Failed to read template at '" + filePath + "'"); } } -export { getPath, readFile } +export { getPath, readFile }; diff --git a/src/index.ts b/src/index.ts index 307bf4fb..349d8224 100644 --- a/src/index.ts +++ b/src/index.ts @@ -1,19 +1,19 @@ // @denoify-ignore /* Export file stuff */ -import { includeFileHelper } from './file-helpers' -import { config } from './config' +import { includeFileHelper } from "./file-helpers.js"; +import { config } from "./config.js"; -config.includeFile = includeFileHelper -config.filepathCache = {} +config.includeFile = includeFileHelper; +config.filepathCache = {}; -export { loadFile, renderFile, renderFileAsync, renderFile as __express } from './file-handlers' +export { loadFile, renderFile, renderFileAsync, renderFile as __express } from "./file-handlers.js"; /* End file stuff */ -export { default as compileToString } from './compile-string' -export { default as compile } from './compile' -export { default as parse } from './parse' -export { default as render, renderAsync } from './render' -export { templates } from './containers' -export { config, config as defaultConfig, getConfig, configure } from './config' +export { default as compileToString } from "./compile-string.js"; +export { default as compile } from "./compile.js"; +export { default as parse } from "./parse.js"; +export { default as render, renderAsync } from "./render.js"; +export { templates } from "./containers.js"; +export { config, config as defaultConfig, getConfig, configure } from "./config.js"; diff --git a/src/parse.ts b/src/parse.ts index 563d90a1..7a650b39 100644 --- a/src/parse.ts +++ b/src/parse.ts @@ -1,45 +1,45 @@ -import { ParseErr } from './err' -import { trimWS } from './utils' +import { ParseErr } from "./err.js"; +import { trimWS } from "./utils.js"; /* TYPES */ -import type { EtaConfig } from './config' +import type { EtaConfig } from "./config.js"; -export type TagType = 'r' | 'e' | 'i' | '' +export type TagType = "r" | "e" | "i" | ""; export interface TemplateObject { - t: TagType - val: string + t: TagType; + val: string; } -export type AstObject = string | TemplateObject +export type AstObject = string | TemplateObject; /* END TYPES */ -const templateLitReg = /`(?:\\[\s\S]|\${(?:[^{}]|{(?:[^{}]|{[^}]*})*})*}|(?!\${)[^\\`])*`/g +const templateLitReg = /`(?:\\[\s\S]|\${(?:[^{}]|{(?:[^{}]|{[^}]*})*})*}|(?!\${)[^\\`])*`/g; -const singleQuoteReg = /'(?:\\[\s\w"'\\`]|[^\n\r'\\])*?'/g +const singleQuoteReg = /'(?:\\[\s\w"'\\`]|[^\n\r'\\])*?'/g; -const doubleQuoteReg = /"(?:\\[\s\w"'\\`]|[^\n\r"\\])*?"/g +const doubleQuoteReg = /"(?:\\[\s\w"'\\`]|[^\n\r"\\])*?"/g; /** Escape special regular expression characters inside a string */ function escapeRegExp(string: string) { // From MDN - return string.replace(/[.*+\-?^${}()|[\]\\]/g, '\\$&') // $& means the whole matched string + return string.replace(/[.*+\-?^${}()|[\]\\]/g, "\\$&"); // $& means the whole matched string } export default function parse(str: string, config: EtaConfig): Array { - let buffer: Array = [] - let trimLeftOfNextStr: string | false = false - let lastIndex = 0 - const parseOptions = config.parse + let buffer: Array = []; + let trimLeftOfNextStr: string | false = false; + let lastIndex = 0; + const parseOptions = config.parse; if (config.plugins) { for (let i = 0; i < config.plugins.length; i++) { - const plugin = config.plugins[i] + const plugin = config.plugins[i]; if (plugin.processTemplate) { - str = plugin.processTemplate(str, config) + str = plugin.processTemplate(str, config); } } } @@ -51,13 +51,13 @@ export default function parse(str: string, config: EtaConfig): Array // work well with `\r` and empty lines don't work well with the `m` flag. // Essentially, this replaces the whitespace at the beginning and end of // each line and removes multiple newlines. - str = str.replace(/[\r\n]+/g, '\n').replace(/^\s+|\s+$/gm, '') + str = str.replace(/[\r\n]+/g, "\n").replace(/^\s+|\s+$/gm, ""); } /* End rmWhitespace option */ - templateLitReg.lastIndex = 0 - singleQuoteReg.lastIndex = 0 - doubleQuoteReg.lastIndex = 0 + templateLitReg.lastIndex = 0; + singleQuoteReg.lastIndex = 0; + doubleQuoteReg.lastIndex = 0; function pushString(strng: string, shouldTrimRightOfString?: string | false) { if (strng) { @@ -68,15 +68,15 @@ export default function parse(str: string, config: EtaConfig): Array config, trimLeftOfNextStr, // this will only be false on the first str, the next ones will be null or undefined shouldTrimRightOfString - ) + ); if (strng) { // replace \ with \\, ' with \' // we're going to convert all CRLF to LF so it doesn't take more than one replace - strng = strng.replace(/\\|'/g, '\\$&').replace(/\r\n|\n|\r/g, '\\n') + strng = strng.replace(/\\|'/g, "\\$&").replace(/\r\n|\n|\r/g, "\\n"); - buffer.push(strng) + buffer.push(strng); } } } @@ -86,117 +86,117 @@ export default function parse(str: string, config: EtaConfig): Array prefix ) { if (accumulator && prefix) { - return accumulator + '|' + escapeRegExp(prefix) + return accumulator + "|" + escapeRegExp(prefix); } else if (prefix) { // accumulator is falsy - return escapeRegExp(prefix) + return escapeRegExp(prefix); } else { // prefix and accumulator are both falsy - return accumulator + return accumulator; } }, - '') + ""); const parseOpenReg = new RegExp( - '([^]*?)' + escapeRegExp(config.tags[0]) + '(-|_)?\\s*(' + prefixes + ')?\\s*', - 'g' - ) + "([^]*?)" + escapeRegExp(config.tags[0]) + "(-|_)?\\s*(" + prefixes + ")?\\s*", + "g" + ); const parseCloseReg = new RegExp( - '\'|"|`|\\/\\*|(\\s*(-|_)?' + escapeRegExp(config.tags[1]) + ')', - 'g' - ) + "'|\"|`|\\/\\*|(\\s*(-|_)?" + escapeRegExp(config.tags[1]) + ")", + "g" + ); // TODO: benchmark having the \s* on either side vs using str.trim() - let m + let m; while ((m = parseOpenReg.exec(str))) { - lastIndex = m[0].length + m.index + lastIndex = m[0].length + m.index; - const precedingString = m[1] - const wsLeft = m[2] - const prefix = m[3] || '' // by default either ~, =, or empty + const precedingString = m[1]; + const wsLeft = m[2]; + const prefix = m[3] || ""; // by default either ~, =, or empty - pushString(precedingString, wsLeft) + pushString(precedingString, wsLeft); - parseCloseReg.lastIndex = lastIndex - let closeTag - let currentObj: AstObject | false = false + parseCloseReg.lastIndex = lastIndex; + let closeTag; + let currentObj: AstObject | false = false; while ((closeTag = parseCloseReg.exec(str))) { if (closeTag[1]) { - let content = str.slice(lastIndex, closeTag.index) + const content = str.slice(lastIndex, closeTag.index); - parseOpenReg.lastIndex = lastIndex = parseCloseReg.lastIndex + parseOpenReg.lastIndex = lastIndex = parseCloseReg.lastIndex; - trimLeftOfNextStr = closeTag[2] + trimLeftOfNextStr = closeTag[2]; const currentType: TagType = prefix === parseOptions.exec - ? 'e' + ? "e" : prefix === parseOptions.raw - ? 'r' + ? "r" : prefix === parseOptions.interpolate - ? 'i' - : '' + ? "i" + : ""; - currentObj = { t: currentType, val: content } - break + currentObj = { t: currentType, val: content }; + break; } else { - const char = closeTag[0] - if (char === '/*') { - const commentCloseInd = str.indexOf('*/', parseCloseReg.lastIndex) + const char = closeTag[0]; + if (char === "/*") { + const commentCloseInd = str.indexOf("*/", parseCloseReg.lastIndex); if (commentCloseInd === -1) { - ParseErr('unclosed comment', str, closeTag.index) + ParseErr("unclosed comment", str, closeTag.index); } - parseCloseReg.lastIndex = commentCloseInd + parseCloseReg.lastIndex = commentCloseInd; } else if (char === "'") { - singleQuoteReg.lastIndex = closeTag.index + singleQuoteReg.lastIndex = closeTag.index; - const singleQuoteMatch = singleQuoteReg.exec(str) + const singleQuoteMatch = singleQuoteReg.exec(str); if (singleQuoteMatch) { - parseCloseReg.lastIndex = singleQuoteReg.lastIndex + parseCloseReg.lastIndex = singleQuoteReg.lastIndex; } else { - ParseErr('unclosed string', str, closeTag.index) + ParseErr("unclosed string", str, closeTag.index); } } else if (char === '"') { - doubleQuoteReg.lastIndex = closeTag.index - const doubleQuoteMatch = doubleQuoteReg.exec(str) + doubleQuoteReg.lastIndex = closeTag.index; + const doubleQuoteMatch = doubleQuoteReg.exec(str); if (doubleQuoteMatch) { - parseCloseReg.lastIndex = doubleQuoteReg.lastIndex + parseCloseReg.lastIndex = doubleQuoteReg.lastIndex; } else { - ParseErr('unclosed string', str, closeTag.index) + ParseErr("unclosed string", str, closeTag.index); } - } else if (char === '`') { - templateLitReg.lastIndex = closeTag.index - const templateLitMatch = templateLitReg.exec(str) + } else if (char === "`") { + templateLitReg.lastIndex = closeTag.index; + const templateLitMatch = templateLitReg.exec(str); if (templateLitMatch) { - parseCloseReg.lastIndex = templateLitReg.lastIndex + parseCloseReg.lastIndex = templateLitReg.lastIndex; } else { - ParseErr('unclosed string', str, closeTag.index) + ParseErr("unclosed string", str, closeTag.index); } } } } if (currentObj) { - buffer.push(currentObj) + buffer.push(currentObj); } else { - ParseErr('unclosed tag', str, m.index + precedingString.length) + ParseErr("unclosed tag", str, m.index + precedingString.length); } } - pushString(str.slice(lastIndex, str.length), false) + pushString(str.slice(lastIndex, str.length), false); if (config.plugins) { for (let i = 0; i < config.plugins.length; i++) { - const plugin = config.plugins[i] + const plugin = config.plugins[i]; if (plugin.processAST) { - buffer = plugin.processAST(buffer, config) + buffer = plugin.processAST(buffer, config); } } } - return buffer + return buffer; } diff --git a/src/polyfills.ts b/src/polyfills.ts index 7000c5f6..38b96226 100644 --- a/src/polyfills.ts +++ b/src/polyfills.ts @@ -1,10 +1,10 @@ -import EtaErr from './err' +import EtaErr from "./err.js"; /** * @returns The global Promise function */ -export const promiseImpl: PromiseConstructor = new Function('return this')().Promise +export const promiseImpl: PromiseConstructor = new Function("return this")().Promise; /** * @returns A new AsyncFunction constuctor @@ -12,12 +12,12 @@ export const promiseImpl: PromiseConstructor = new Function('return this')().Pro export function getAsyncFunctionConstructor(): Function { try { - return new Function('return (async function(){}).constructor')() + return new Function("return (async function(){}).constructor")(); } catch (e) { if (e instanceof SyntaxError) { - throw EtaErr("This environment doesn't support async/await") + throw EtaErr("This environment doesn't support async/await"); } else { - throw e + throw e; } } } @@ -33,9 +33,9 @@ export function getAsyncFunctionConstructor(): Function { export function trimLeft(str: string): string { // eslint-disable-next-line no-extra-boolean-cast if (!!String.prototype.trimLeft) { - return str.trimLeft() + return str.trimLeft(); } else { - return str.replace(/^\s+/, '') + return str.replace(/^\s+/, ""); } } @@ -50,8 +50,8 @@ export function trimLeft(str: string): string { export function trimRight(str: string): string { // eslint-disable-next-line no-extra-boolean-cast if (!!String.prototype.trimRight) { - return str.trimRight() + return str.trimRight(); } else { - return str.replace(/\s+$/, '') // TODO: do we really need to replace BOM's? + return str.replace(/\s+$/, ""); // TODO: do we really need to replace BOM's? } } diff --git a/src/render.ts b/src/render.ts index 4a808735..fd08c2d8 100644 --- a/src/render.ts +++ b/src/render.ts @@ -1,30 +1,30 @@ -import compile from './compile' -import { getConfig } from './config' -import { promiseImpl } from './polyfills' -import EtaErr from './err' +import compile from "./compile.js"; +import { getConfig } from "./config.js"; +import { promiseImpl } from "./polyfills.js"; +import EtaErr from "./err.js"; /* TYPES */ -import type { EtaConfig, PartialConfig, PartialAsyncConfig } from './config' -import type { TemplateFunction } from './compile' -import type { CallbackFn } from './file-handlers' +import type { EtaConfig, PartialConfig, PartialAsyncConfig } from "./config.js"; +import type { TemplateFunction } from "./compile.js"; +import type { CallbackFn } from "./file-handlers.js"; /* END TYPES */ function handleCache(template: string | TemplateFunction, options: EtaConfig): TemplateFunction { if (options.cache && options.name && options.templates.get(options.name)) { - return options.templates.get(options.name) + return options.templates.get(options.name); } - const templateFunc = typeof template === 'function' ? template : compile(template, options) + const templateFunc = typeof template === "function" ? template : compile(template, options); // Note that we don't have to check if it already exists in the cache; // it would have returned earlier if it had if (options.cache && options.name) { - options.templates.define(options.name, templateFunc) + options.templates.define(options.name, templateFunc); } - return templateFunc + return templateFunc; } /** @@ -50,7 +50,7 @@ export default function render( data: object, config: PartialAsyncConfig, cb: CallbackFn -): void +): void; /** * Render a template @@ -73,7 +73,7 @@ export default function render( template: string | TemplateFunction, data: object, config: PartialAsyncConfig -): Promise +): Promise; /** * Render a template @@ -96,7 +96,7 @@ export default function render( template: string | TemplateFunction, data: object, config?: PartialConfig -): string +): string; /** * Render a template @@ -121,7 +121,7 @@ export default function render( data: object, config?: PartialConfig, cb?: CallbackFn -): string | Promise | void +): string | Promise | void; export default function render( template: string | TemplateFunction, @@ -129,7 +129,7 @@ export default function render( config?: PartialConfig, cb?: CallbackFn ): string | Promise | void { - const options = getConfig(config || {}) + const options = getConfig(config || {}); if (options.async) { if (cb) { @@ -137,27 +137,27 @@ export default function render( try { // Note: if there is an error while rendering the template, // It will bubble up and be caught here - const templateFn = handleCache(template, options) - templateFn(data, options, cb) + const templateFn = handleCache(template, options); + templateFn(data, options, cb); } catch (err) { - return cb(err as Error) + return cb(err as Error); } } else { // No callback, try returning a promise - if (typeof promiseImpl === 'function') { + if (typeof promiseImpl === "function") { return new promiseImpl(function (resolve: Function, reject: Function) { try { - resolve(handleCache(template, options)(data, options)) + resolve(handleCache(template, options)(data, options)); } catch (err) { - reject(err) + reject(err); } - }) + }); } else { - throw EtaErr("Please provide a callback function, this env doesn't support Promises") + throw EtaErr("Please provide a callback function, this env doesn't support Promises"); } } } else { - return handleCache(template, options)(data, options) + return handleCache(template, options)(data, options); } } @@ -178,7 +178,7 @@ export function renderAsync( template: string | TemplateFunction, data: object, config?: PartialConfig -): Promise +): Promise; /** * Render a template asynchronously @@ -199,7 +199,7 @@ export function renderAsync( data: object, config: PartialConfig, cb: CallbackFn -): void +): void; /** * Render a template asynchronously @@ -220,7 +220,7 @@ export function renderAsync( data: object, config?: PartialConfig, cb?: CallbackFn -): string | Promise | void +): string | Promise | void; export function renderAsync( template: string | TemplateFunction, @@ -229,5 +229,5 @@ export function renderAsync( cb?: CallbackFn ): string | Promise | void { // Using Object.assign to lower bundle size, using spread operator makes it larger because of typescript injected polyfills - return render(template, data, Object.assign({}, config, { async: true }), cb) + return render(template, data, Object.assign({}, config, { async: true }), cb); } diff --git a/src/storage.ts b/src/storage.ts index 0bd29f85..b7eaa9df 100644 --- a/src/storage.ts +++ b/src/storage.ts @@ -1,4 +1,4 @@ -import { copyProps } from './utils' +import { copyProps } from "./utils.js"; /** * Handles storage and accessing of values @@ -9,23 +9,23 @@ import { copyProps } from './utils' class Cacher { constructor(private cache: Record) {} define(key: string, val: T): void { - this.cache[key] = val + this.cache[key] = val; } get(key: string): T { // string | array. // TODO: allow array of keys to look down // TODO: create plugin to allow referencing helpers, filters with dot notation - return this.cache[key] + return this.cache[key]; } remove(key: string): void { - delete this.cache[key] + delete this.cache[key]; } reset(): void { - this.cache = {} + this.cache = {}; } load(cacheObj: Record): void { - copyProps(this.cache, cacheObj) + copyProps(this.cache, cacheObj); } } -export { Cacher } +export { Cacher }; diff --git a/src/utils.ts b/src/utils.ts index 83cadcaf..dcd23132 100644 --- a/src/utils.ts +++ b/src/utils.ts @@ -1,34 +1,34 @@ // TODO: allow '-' to trim up until newline. Use [^\S\n\r] instead of \s // TODO: only include trimLeft polyfill if not in ES6 -import { trimLeft, trimRight } from './polyfills' +import { trimLeft, trimRight } from "./polyfills.js"; /* TYPES */ -import type { EtaConfig } from './config' +import type { EtaConfig } from "./config.js"; interface EscapeMap { - '&': '&' - '<': '<' - '>': '>' - '"': '"' - "'": ''' - [index: string]: string + "&": "&"; + "<": "<"; + ">": ">"; + '"': """; + "'": "'"; + [index: string]: string; } /* END TYPES */ export function hasOwnProp(obj: object, prop: string): boolean { - return Object.prototype.hasOwnProperty.call(obj, prop) + return Object.prototype.hasOwnProperty.call(obj, prop); } export function copyProps(toObj: T, fromObj: T): T { for (const key in fromObj) { - if (hasOwnProp((fromObj as unknown) as object, key)) { - toObj[key] = fromObj[key] + if (hasOwnProp(fromObj as unknown as object, key)) { + toObj[key] = fromObj[key]; } } - return toObj + return toObj; } /** @@ -41,53 +41,53 @@ function trimWS( wsLeft: string | false, wsRight?: string | false ): string { - let leftTrim - let rightTrim + let leftTrim; + let rightTrim; if (Array.isArray(config.autoTrim)) { // kinda confusing // but _}} will trim the left side of the following string - leftTrim = config.autoTrim[1] - rightTrim = config.autoTrim[0] + leftTrim = config.autoTrim[1]; + rightTrim = config.autoTrim[0]; } else { - leftTrim = rightTrim = config.autoTrim + leftTrim = rightTrim = config.autoTrim; } if (wsLeft || wsLeft === false) { - leftTrim = wsLeft + leftTrim = wsLeft; } if (wsRight || wsRight === false) { - rightTrim = wsRight + rightTrim = wsRight; } if (!rightTrim && !leftTrim) { - return str + return str; } - if (leftTrim === 'slurp' && rightTrim === 'slurp') { - return str.trim() + if (leftTrim === "slurp" && rightTrim === "slurp") { + return str.trim(); } - if (leftTrim === '_' || leftTrim === 'slurp') { + if (leftTrim === "_" || leftTrim === "slurp") { // console.log('trimming left' + leftTrim) // full slurp - str = trimLeft(str) - } else if (leftTrim === '-' || leftTrim === 'nl') { + str = trimLeft(str); + } else if (leftTrim === "-" || leftTrim === "nl") { // nl trim - str = str.replace(/^(?:\r\n|\n|\r)/, '') + str = str.replace(/^(?:\r\n|\n|\r)/, ""); } - if (rightTrim === '_' || rightTrim === 'slurp') { + if (rightTrim === "_" || rightTrim === "slurp") { // full slurp - str = trimRight(str) - } else if (rightTrim === '-' || rightTrim === 'nl') { + str = trimRight(str); + } else if (rightTrim === "-" || rightTrim === "nl") { // nl trim - str = str.replace(/(?:\r\n|\n|\r)$/, '') // TODO: make sure this gets \r\n + str = str.replace(/(?:\r\n|\n|\r)$/, ""); // TODO: make sure this gets \r\n } - return str + return str; } /** @@ -95,15 +95,15 @@ function trimWS( */ const escMap: EscapeMap = { - '&': '&', - '<': '<', - '>': '>', - '"': '"', - "'": ''' -} + "&": "&", + "<": "<", + ">": ">", + '"': """, + "'": "'", +}; function replaceChar(s: string): string { - return escMap[s] + return escMap[s]; } /** @@ -116,12 +116,12 @@ function replaceChar(s: string): string { function XMLEscape(str: any): string { // eslint-disable-line @typescript-eslint/no-explicit-any // To deal with XSS. Based on Escape implementations of Mustache.JS and Marko, then customized. - const newStr = String(str) + const newStr = String(str); if (/[&<>"']/.test(newStr)) { - return newStr.replace(/[&<>"']/g, replaceChar) + return newStr.replace(/[&<>"']/g, replaceChar); } else { - return newStr + return newStr; } } -export { trimWS, XMLEscape } +export { trimWS, XMLEscape }; diff --git a/test/async.spec.ts b/test/async.spec.ts index 374a09d4..ad4ace47 100644 --- a/test/async.spec.ts +++ b/test/async.spec.ts @@ -1,50 +1,50 @@ /* global it, expect, describe */ -import * as Eta from '../src/index' -import { buildRegEx } from './err.spec' +import * as Eta from "../src/index"; +import { buildRegEx } from "./err.spec"; function resolveAfter2Seconds(val: string): Promise { return new Promise((resolve) => { setTimeout(() => { - resolve(val) - }, 20) - }) + resolve(val); + }, 20); + }); } async function asyncTest() { - const result = await resolveAfter2Seconds('HI FROM ASYNC') - return result + const result = await resolveAfter2Seconds("HI FROM ASYNC"); + return result; } -describe('Async Render checks', () => { - describe('Async works', () => { - it('Simple template compiles asynchronously', async () => { +describe("Async Render checks", () => { + describe("Async works", () => { + it("Simple template compiles asynchronously", async () => { expect( - await Eta.render('Hi <%= it.name %>', { name: 'Ada Lovelace' }, { async: true }) - ).toEqual('Hi Ada Lovelace') - }) + await Eta.render("Hi <%= it.name %>", { name: "Ada Lovelace" }, { async: true }) + ).toEqual("Hi Ada Lovelace"); + }); - it('Simple template compiles asynchronously with callback', (done) => { + it("Simple template compiles asynchronously with callback", (done) => { function cb(_err: Error | null, res?: string) { - expect(res).toEqual(res) - done() + expect(res).toEqual(res); + done(); } - Eta.render('Hi <%= it.name %>', { name: 'Ada Lovelace' }, { async: true }, cb) - }) + Eta.render("Hi <%= it.name %>", { name: "Ada Lovelace" }, { async: true }, cb); + }); - it('Async function works', async () => { + it("Async function works", async () => { expect( await Eta.render( - '<%= await it.asyncTest() %>', - { name: 'Ada Lovelace', asyncTest: asyncTest }, + "<%= await it.asyncTest() %>", + { name: "Ada Lovelace", asyncTest: asyncTest }, { async: true } ) - ).toEqual('HI FROM ASYNC') - }) + ).toEqual("HI FROM ASYNC"); + }); - it('Async template w/ syntax error throws', async () => { + it("Async template w/ syntax error throws", async () => { await expect(async () => { - await Eta.render('<%= @#$%^ %>', {}, { async: true }) + await Eta.render("<%= @#$%^ %>", {}, { async: true }); }).rejects.toThrow( buildRegEx(` var tR='',__l,__lP,include=E.include.bind(E),includeFile=E.includeFile.bind(E) @@ -53,12 +53,12 @@ tR+=E.e(@#$%^) if(__l)tR=await includeFile(__l,Object.assign(it,{body:tR},__lP)) if(cb){cb(null,tR)} return tR `) - ) - }) + ); + }); - it('Async template w/ syntax error passes error to callback', (done) => { + it("Async template w/ syntax error passes error to callback", (done) => { function cb(err: Error | null, _res?: string) { - expect(err).toBeTruthy() + expect(err).toBeTruthy(); expect((err as Error).message).toMatch( buildRegEx(` var tR='',__l,__lP,include=E.include.bind(E),includeFile=E.includeFile.bind(E) @@ -67,15 +67,15 @@ tR+=E.e(@#$%^) if(__l)tR=await includeFile(__l,Object.assign(it,{body:tR},__lP)) if(cb){cb(null,tR)} return tR `) - ) - done() + ); + done(); } - Eta.render('<%= @#$%^ %>', {}, { name: 'Ada Lovelace', async: true }, cb) - }) - }) -}) + Eta.render("<%= @#$%^ %>", {}, { name: "Ada Lovelace", async: true }, cb); + }); + }); +}); -describe('Async Loops', () => { +describe("Async Loops", () => { // TODO -}) +}); diff --git a/test/compile-string.spec.ts b/test/compile-string.spec.ts index 242e1601..80175fd0 100644 --- a/test/compile-string.spec.ts +++ b/test/compile-string.spec.ts @@ -1,49 +1,49 @@ /* global it, expect, describe */ -import { compileToString, defaultConfig, getConfig } from '../src/index' +import { compileToString, defaultConfig, getConfig } from "../src/index"; -const fs = require('fs'), - path = require('path'), - filePath = path.join(__dirname, 'templates/complex.eta') +const fs = require("fs"), + path = require("path"), + filePath = path.join(__dirname, "templates/complex.eta"); -const complexTemplate = fs.readFileSync(filePath, 'utf8') +const complexTemplate = fs.readFileSync(filePath, "utf8"); -describe('Compile to String test', () => { - it('parses a simple template', () => { - const str = compileToString('hi <%= hey %>', defaultConfig) +describe("Compile to String test", () => { + it("parses a simple template", () => { + const str = compileToString("hi <%= hey %>", defaultConfig); expect(str) .toEqual(`var tR='',__l,__lP,include=E.include.bind(E),includeFile=E.includeFile.bind(E) function layout(p,d){__l=p;__lP=d} tR+='hi ' tR+=E.e(hey) if(__l)tR=includeFile(__l,Object.assign(it,{body:tR},__lP)) -if(cb){cb(null,tR)} return tR`) - }) +if(cb){cb(null,tR)} return tR`); + }); - it('parses a simple template without partial helpers defined', () => { + it("parses a simple template without partial helpers defined", () => { const str = compileToString( - 'hi <%= hey %>', + "hi <%= hey %>", getConfig({ include: undefined, includeFile: undefined }) - ) + ); expect(str).toEqual(`var tR='',__l,__lP function layout(p,d){__l=p;__lP=d} tR+='hi ' tR+=E.e(hey) -if(cb){cb(null,tR)} return tR`) - }) +if(cb){cb(null,tR)} return tR`); + }); - it('parses a simple template with raw tag', () => { - const str = compileToString('hi <%~ hey %>', defaultConfig) + it("parses a simple template with raw tag", () => { + const str = compileToString("hi <%~ hey %>", defaultConfig); expect(str) .toEqual(`var tR='',__l,__lP,include=E.include.bind(E),includeFile=E.includeFile.bind(E) function layout(p,d){__l=p;__lP=d} tR+='hi ' tR+=hey if(__l)tR=includeFile(__l,Object.assign(it,{body:tR},__lP)) -if(cb){cb(null,tR)} return tR`) - }) +if(cb){cb(null,tR)} return tR`); + }); - it('works with whitespace trimming', () => { - const str = compileToString('hi\n<%- = hey-%>\n<%_ = hi_%>', defaultConfig) + it("works with whitespace trimming", () => { + const str = compileToString("hi\n<%- = hey-%>\n<%_ = hi_%>", defaultConfig); expect(str) .toEqual(`var tR='',__l,__lP,include=E.include.bind(E),includeFile=E.includeFile.bind(E) function layout(p,d){__l=p;__lP=d} @@ -51,11 +51,11 @@ tR+='hi' tR+=E.e(hey) tR+=E.e(hi) if(__l)tR=includeFile(__l,Object.assign(it,{body:tR},__lP)) -if(cb){cb(null,tR)} return tR`) - }) +if(cb){cb(null,tR)} return tR`); + }); - it('compiles complex template', () => { - const str = compileToString(complexTemplate, defaultConfig) + it("compiles complex template", () => { + const str = compileToString(complexTemplate, defaultConfig); expect(str).toEqual( `var tR='',__l,__lP,include=E.include.bind(E),includeFile=E.includeFile.bind(E) function layout(p,d){__l=p;__lP=d} @@ -84,6 +84,6 @@ tR+='\\nThis is a partial: ' tR+=include("mypartial") if(__l)tR=includeFile(__l,Object.assign(it,{body:tR},__lP)) if(cb){cb(null,tR)} return tR` - ) - }) -}) + ); + }); +}); diff --git a/test/compile.spec.ts b/test/compile.spec.ts index eb2db6a2..5af173e1 100644 --- a/test/compile.spec.ts +++ b/test/compile.spec.ts @@ -1,34 +1,34 @@ /* global it, expect, describe */ -import { compile } from '../src/index' -import { buildRegEx } from './err.spec' +import { compile } from "../src/index"; +import { buildRegEx } from "./err.spec"; -const fs = require('fs'), - path = require('path'), - filePath = path.join(__dirname, 'templates/complex.eta') +const fs = require("fs"), + path = require("path"), + filePath = path.join(__dirname, "templates/complex.eta"); -const complexTemplate = fs.readFileSync(filePath, 'utf8') +const complexTemplate = fs.readFileSync(filePath, "utf8"); -describe('Compile test', () => { - it('parses a simple template', () => { - const str = compile('hi <%= hey %>') - expect(str).toBeTruthy() - }) +describe("Compile test", () => { + it("parses a simple template", () => { + const str = compile("hi <%= hey %>"); + expect(str).toBeTruthy(); + }); - it('works with plain string templates', () => { - const str = compile('hi this is a template') - expect(str).toBeTruthy() - }) + it("works with plain string templates", () => { + const str = compile("hi this is a template"); + expect(str).toBeTruthy(); + }); // TODO: Update - it('compiles complex template', () => { - const str = compile(complexTemplate) - expect(str).toBeTruthy() - }) + it("compiles complex template", () => { + const str = compile(complexTemplate); + expect(str).toBeTruthy(); + }); - test('throws with bad inner JS syntax', () => { + test("throws with bad inner JS syntax", () => { expect(() => { - compile('<% hi (=h) %>') + compile("<% hi (=h) %>"); }).toThrow( buildRegEx(` var tR='',__l,__lP,include=E.include.bind(E),includeFile=E.includeFile.bind(E) @@ -37,6 +37,6 @@ hi (=h) if(__l)tR=includeFile(__l,Object.assign(it,{body:tR},__lP)) if(cb){cb(null,tR)} return tR `) - ) - }) -}) + ); + }); +}); diff --git a/test/config.spec.ts b/test/config.spec.ts index f0bb4de1..67a9e49b 100644 --- a/test/config.spec.ts +++ b/test/config.spec.ts @@ -1,28 +1,28 @@ /* global it, expect, describe */ -import { render, defaultConfig } from '../src/index' -import { config, configure, getConfig } from '../src/config' +import { render, defaultConfig } from "../src/index"; +import { config, configure, getConfig } from "../src/config"; -describe('Config Tests', () => { - it('Renders a simple template with default env', () => { - const res = render('hi <%= it.name %>', { name: 'Ben' }, defaultConfig) - expect(res).toEqual('hi Ben') - }) +describe("Config Tests", () => { + it("Renders a simple template with default env", () => { + const res = render("hi <%= it.name %>", { name: "Ben" }, defaultConfig); + expect(res).toEqual("hi Ben"); + }); - it('Renders a simple template with custom tags', () => { - const res = render('hi <<= it.name >>', { name: 'Ben' }, { tags: ['<<', '>>'] }) - expect(res).toEqual('hi Ben') - }) + it("Renders a simple template with custom tags", () => { + const res = render("hi <<= it.name >>", { name: "Ben" }, { tags: ["<<", ">>"] }); + expect(res).toEqual("hi Ben"); + }); - it('Renders a simple template with stored env', () => { - const res = render('<%= it.html %>', { html: '

Hi

' }, { autoEscape: false }) - expect(res).toEqual('

Hi

') // not escaped - }) + it("Renders a simple template with stored env", () => { + const res = render("<%= it.html %>", { html: "

Hi

" }, { autoEscape: false }); + expect(res).toEqual("

Hi

"); // not escaped + }); - it('config.filter works', () => { - const template = 'My favorite food is <%= it.fav %>' + it("config.filter works", () => { + const template = "My favorite food is <%= it.fav %>"; - expect(render(template, {})).toEqual('My favorite food is undefined') + expect(render(template, {})).toEqual("My favorite food is undefined"); expect( render( @@ -30,49 +30,49 @@ describe('Config Tests', () => { {}, { filter: function () { - return 'apples' - } + return "apples"; + }, } ) - ).toEqual('My favorite food is apples') + ).toEqual("My favorite food is apples"); - let timesFilterCalled = 0 + let timesFilterCalled = 0; expect( render( - '<%= it.val1 %>, <%~ it.val2 %>, <%~ it.val3 %>', + "<%= it.val1 %>, <%~ it.val2 %>, <%~ it.val3 %>", {}, { filter: function () { - timesFilterCalled++ + timesFilterCalled++; if (timesFilterCalled <= 1) { - return 'The first' + return "The first"; } else { - return 'another' + return "another"; } - } + }, } ) - ).toEqual('The first, another, another') - }) + ).toEqual("The first, another, another"); + }); - it('Configure command works', () => { - const updatedConfig = configure({ tags: ['{{', '}}'] }) + it("Configure command works", () => { + const updatedConfig = configure({ tags: ["{{", "}}"] }); - const res = render('{{= it.name }}', { name: 'John Appleseed' }) - expect(res).toEqual('John Appleseed') + const res = render("{{= it.name }}", { name: "John Appleseed" }); + expect(res).toEqual("John Appleseed"); - expect(defaultConfig).toEqual(updatedConfig) - expect(defaultConfig.tags).toEqual(['{{', '}}']) - }) + expect(defaultConfig).toEqual(updatedConfig); + expect(defaultConfig.tags).toEqual(["{{", "}}"]); + }); - it('config and defaultConfig are the same object', () => { - expect(defaultConfig).toEqual(config) - }) + it("config and defaultConfig are the same object", () => { + expect(defaultConfig).toEqual(config); + }); - it('getConfig creates a clone of config with no arguments', () => { + it("getConfig creates a clone of config with no arguments", () => { /* eslint-disable @typescript-eslint/ban-ts-comment */ // @ts-ignore (in this case, we're calling getConfig w/ 0 arguments even though it takes 1 or 2) - expect(getConfig()).toEqual(config) - }) -}) + expect(getConfig()).toEqual(config); + }); +}); diff --git a/test/deno/basic.spec.ts b/test/deno/basic.spec.ts index 2427d7f6..eb9f5784 100644 --- a/test/deno/basic.spec.ts +++ b/test/deno/basic.spec.ts @@ -1,7 +1,7 @@ -import { assertEquals } from 'https://deno.land/std@0.97.0/testing/asserts.ts' -import * as eta from '../../deno_dist/mod.ts' +import { assertEquals } from "https://deno.land/std@0.97.0/testing/asserts.ts"; +import * as eta from "../../deno_dist/mod.ts"; -Deno.test('simple render', () => { - const t = `Hi <%=it.name%>` - assertEquals(eta.render(t, { name: 'Ben' }), 'Hi Ben') -}) +Deno.test("simple render", () => { + const t = `Hi <%=it.name%>`; + assertEquals(eta.render(t, { name: "Ben" }), "Hi Ben"); +}); diff --git a/test/deno/config.spec.ts b/test/deno/config.spec.ts index a3eb16e3..73b8bb29 100644 --- a/test/deno/config.spec.ts +++ b/test/deno/config.spec.ts @@ -1,20 +1,20 @@ -import { assertEquals } from 'https://deno.land/std@0.97.0/testing/asserts.ts' -import * as eta from '../../deno_dist/mod.ts' +import { assertEquals } from "https://deno.land/std@0.97.0/testing/asserts.ts"; +import * as eta from "../../deno_dist/mod.ts"; -Deno.test('Renders a simple template with default env', () => { - const res = eta.render('hi <%= it.name %>', { name: 'Ben' }, eta.defaultConfig) +Deno.test("Renders a simple template with default env", () => { + const res = eta.render("hi <%= it.name %>", { name: "Ben" }, eta.defaultConfig); - assertEquals(res, 'hi Ben') -}) + assertEquals(res, "hi Ben"); +}); -Deno.test('Renders a simple template with custom tags', () => { - const res = eta.render('hi <<= it.name >>', { name: 'Ben' }, { tags: ['<<', '>>'] }) +Deno.test("Renders a simple template with custom tags", () => { + const res = eta.render("hi <<= it.name >>", { name: "Ben" }, { tags: ["<<", ">>"] }); - assertEquals(res, 'hi Ben') -}) + assertEquals(res, "hi Ben"); +}); -Deno.test('Renders a simple template without autoescaping', () => { - const res = eta.render('<%= it.html %>', { html: '

Hi

' }, { autoEscape: false }) +Deno.test("Renders a simple template without autoescaping", () => { + const res = eta.render("<%= it.html %>", { html: "

Hi

" }, { autoEscape: false }); - assertEquals(res, '

Hi

') // not escaped -}) + assertEquals(res, "

Hi

"); // not escaped +}); diff --git a/test/deno/file-helpers.spec.ts b/test/deno/file-helpers.spec.ts index a4c93bb1..5d89f7d1 100644 --- a/test/deno/file-helpers.spec.ts +++ b/test/deno/file-helpers.spec.ts @@ -1,70 +1,70 @@ -import { assertEquals, assertThrows } from 'https://deno.land/std@0.97.0/testing/asserts.ts' -import * as path from 'https://deno.land/std@0.97.0/path/mod.ts' -const __dirname = new URL('.', import.meta.url).pathname +import { assertEquals, assertThrows } from "https://deno.land/std@0.97.0/testing/asserts.ts"; +import * as path from "https://deno.land/std@0.97.0/path/mod.ts"; +const __dirname = new URL(".", import.meta.url).pathname; -import { render, templates, compile } from '../../deno_dist/mod.ts' +import { render, templates, compile } from "../../deno_dist/mod.ts"; -templates.define('test-template', compile('Saluton <%=it.name%>')) +templates.define("test-template", compile("Saluton <%=it.name%>")); -Deno.test('include works', () => { - const renderedTemplate = render('<%~ include("test-template", it) %>', { name: 'Ada' }) +Deno.test("include works", () => { + const renderedTemplate = render('<%~ include("test-template", it) %>', { name: "Ada" }); - assertEquals(renderedTemplate, 'Saluton Ada') -}) + assertEquals(renderedTemplate, "Saluton Ada"); +}); -Deno.test('includeFile works w/ filename prop', () => { +Deno.test("includeFile works w/ filename prop", () => { const renderedTemplate = render( '<%~ includeFile("simple", it) %>', - { name: 'Ada' }, - { filename: path.join(__dirname, '../templates/placeholder.eta') } - ) + { name: "Ada" }, + { filename: path.join(__dirname, "../templates/placeholder.eta") } + ); - assertEquals(renderedTemplate, 'Hi Ada') -}) + assertEquals(renderedTemplate, "Hi Ada"); +}); Deno.test('"E.includeFile" works with "views" array', () => { const renderedTemplate = render( '<%~ E.includeFile("randomtemplate", it) %>', - { user: 'Ben' }, - { views: [path.join(__dirname, '../templates'), path.join(__dirname, '../othertemplates')] } - ) + { user: "Ben" }, + { views: [path.join(__dirname, "../templates"), path.join(__dirname, "../othertemplates")] } + ); - assertEquals(renderedTemplate, 'This is a random template. Hey Ben') -}) + assertEquals(renderedTemplate, "This is a random template. Hey Ben"); +}); Deno.test('"includeFile" works with "views" array', () => { const renderedTemplate = render( '<%~ includeFile("randomtemplate", it) %>', - { user: 'Ben' }, - { views: [path.join(__dirname, '../templates'), path.join(__dirname, '../othertemplates')] } - ) + { user: "Ben" }, + { views: [path.join(__dirname, "../templates"), path.join(__dirname, "../othertemplates")] } + ); - assertEquals(renderedTemplate, 'This is a random template. Hey Ben') -}) + assertEquals(renderedTemplate, "This is a random template. Hey Ben"); +}); Deno.test('"includeFile" works with "views" string', () => { const renderedTemplate = render( '<%~ includeFile("randomtemplate", it) %>', - { user: 'Ben' }, - { views: path.join(__dirname, '../othertemplates') } - ) + { user: "Ben" }, + { views: path.join(__dirname, "../othertemplates") } + ); - assertEquals(renderedTemplate, 'This is a random template. Hey Ben') -}) + assertEquals(renderedTemplate, "This is a random template. Hey Ben"); +}); Deno.test('throws if helper "includeFile" cannot find template', () => { assertThrows( () => { render( '<%~ includeFile("imaginary-template", it) %>', - { user: 'Ben' }, - { views: [path.join(__dirname, '../templates'), path.join(__dirname, '../othertemplates')] } - ) + { user: "Ben" }, + { views: [path.join(__dirname, "../templates"), path.join(__dirname, "../othertemplates")] } + ); }, Error, `Could not find the template "imaginary-template". Paths tried: ${path.join( __dirname, - '../templates' - )}/imaginary-template.eta,${path.join(__dirname, '../othertemplates')}/imaginary-template.eta` - ) -}) + "../templates" + )}/imaginary-template.eta,${path.join(__dirname, "../othertemplates")}/imaginary-template.eta` + ); +}); diff --git a/test/deno/helpers.spec.ts b/test/deno/helpers.spec.ts index 7801cdd6..e701ecb5 100644 --- a/test/deno/helpers.spec.ts +++ b/test/deno/helpers.spec.ts @@ -1,5 +1,5 @@ -import { assertEquals, assertThrows } from 'https://deno.land/std@0.97.0/testing/asserts.ts' -import { render } from '../../deno_dist/mod.ts' +import { assertEquals, assertThrows } from "https://deno.land/std@0.97.0/testing/asserts.ts"; +import { render } from "../../deno_dist/mod.ts"; // SHOULD TEST COMMON ETA USAGE PATTERNS HERE @@ -9,10 +9,10 @@ The Daugherty's have 5 kids: <% it.kids.forEach(function(kid){ %>
  • <%= kid %>
  • <% }) %> -` +`; -Deno.test('Loop over an array', () => { - const res = render(eachTemplate, { kids: ['Ben', 'Polly', 'Joel', 'Phronsie', 'Davie'] }) +Deno.test("Loop over an array", () => { + const res = render(eachTemplate, { kids: ["Ben", "Polly", "Joel", "Phronsie", "Davie"] }); assertEquals( res, @@ -25,15 +25,15 @@ The Daugherty's have 5 kids:
  • Phronsie
  • Davie
  • ` - ) -}) + ); +}); Deno.test('throws if helper "include" cannot find template', () => { assertThrows( () => { - render('<%~ include("missing-template", it) %>', {}) + render('<%~ include("missing-template", it) %>', {}); }, Error, 'Could not fetch template "missing-template"' - ) -}) + ); +}); diff --git a/test/err.spec.ts b/test/err.spec.ts index 3142c48b..5aafc15e 100644 --- a/test/err.spec.ts +++ b/test/err.spec.ts @@ -1,36 +1,36 @@ /* global it, expect, describe */ -import { ParseErr } from '../src/err' +import { ParseErr } from "../src/err"; // So we can build a RegEx to test our errors against (used in other spec files) export function buildRegEx(string: string) { - return RegExp(string.replace(/[.*+\-?^${}()|[\]\\]/g, '\\$&').replace(/\r\n|\n|\r/g, '\\n')) + return RegExp(string.replace(/[.*+\-?^${}()|[\]\\]/g, "\\$&").replace(/\r\n|\n|\r/g, "\\n")); } -describe('ParseErr', () => { - it('error throws correctly', () => { +describe("ParseErr", () => { + it("error throws correctly", () => { try { - ParseErr('Something Unexpected Happened!', 'template {{', 9) + ParseErr("Something Unexpected Happened!", "template {{", 9); } catch (ex) { - expect((ex as Error).name).toBe('Eta Error') + expect((ex as Error).name).toBe("Eta Error"); expect((ex as Error).message).toBe(`Something Unexpected Happened! at line 1 col 10: template {{ - ^`) - expect(ex instanceof Error).toBe(true) + ^`); + expect(ex instanceof Error).toBe(true); } - }) - it('error throws without Object.setPrototypeOf', () => { - Object.defineProperty(Object, 'setPrototypeOf', { value: undefined }) + }); + it("error throws without Object.setPrototypeOf", () => { + Object.defineProperty(Object, "setPrototypeOf", { value: undefined }); try { - ParseErr('Something Unexpected Happened!', 'template {{', 9) + ParseErr("Something Unexpected Happened!", "template {{", 9); } catch (ex) { - expect((ex as Error).name).toBe('Eta Error') + expect((ex as Error).name).toBe("Eta Error"); expect((ex as Error).message).toBe(`Something Unexpected Happened! at line 1 col 10: template {{ - ^`) - expect(ex instanceof Error).toBe(true) + ^`); + expect(ex instanceof Error).toBe(true); } - }) -}) + }); +}); diff --git a/test/file-handlers.spec.ts b/test/file-handlers.spec.ts index fc22d69e..560d3395 100644 --- a/test/file-handlers.spec.ts +++ b/test/file-handlers.spec.ts @@ -1,110 +1,112 @@ /* global it, expect, describe */ -import { renderFile, renderFileAsync, __express, templates, compile } from '../src/index' +import { renderFile, renderFileAsync, __express, templates, compile } from "../src/index"; -import { buildRegEx } from './err.spec' +import { buildRegEx } from "./err.spec"; -const path = require('path'), - filePath = path.join(__dirname, 'templates/simple.eta'), - errFilePath = path.join(__dirname, 'templates/badsyntax.eta'), - fakeFilePath = path.join(__dirname, 'templates/fake.eta') +const path = require("path"), + filePath = path.join(__dirname, "templates/simple.eta"), + errFilePath = path.join(__dirname, "templates/badsyntax.eta"), + fakeFilePath = path.join(__dirname, "templates/fake.eta"); -describe('Simple renderFile tests', () => { - it('renders a simple template file', async () => { - const renderedFile = await renderFile(filePath, { name: 'Ben' }) +describe("Simple renderFile tests", () => { + it("renders a simple template file", async () => { + const renderedFile = await renderFile(filePath, { name: "Ben" }); - expect(renderedFile).toEqual('Hi Ben') - }) + expect(renderedFile).toEqual("Hi Ben"); + }); - it('renderFile is aliased as __express', async () => { - const renderedFile = await __express(filePath, { name: 'Ben' }) + it("renderFile is aliased as __express", async () => { + const renderedFile = await __express(filePath, { name: "Ben" }); - expect(renderedFile).toEqual('Hi Ben') - }) + expect(renderedFile).toEqual("Hi Ben"); + }); - it('renders async template with callback', (done) => { + it("renders async template with callback", (done) => { function cb(_err: Error | null, res?: string) { try { - expect(res).toBe('Hi Ada Lovelace') - done() + expect(res).toBe("Hi Ada Lovelace"); + done(); } catch (error) { - done(error) + done(error); } } - renderFile(filePath, { name: 'Ada Lovelace', async: true }, cb) - }) + renderFile(filePath, { name: "Ada Lovelace", async: true }, cb); + }); - it('renders a simple template w/ a callback', async () => { - renderFile(filePath, { name: 'Ben' }, function (_err: Error | null, res?: string) { - expect(res).toEqual('Hi Ben') - }) - }) + it("renders a simple template w/ a callback", async () => { + renderFile(filePath, { name: "Ben" }, function (_err: Error | null, res?: string) { + expect(res).toEqual("Hi Ben"); + }); + }); - it('renders a simple template w/ callback and explicit config', async () => { + it("renders a simple template w/ callback and explicit config", async () => { // Note that rmWhitespace doesn't do anything specific - renderFile(filePath, { name: 'Ben' }, { rmWhitespace: true }, function ( - _err: Error | null, - res?: string - ) { - expect(res).toEqual('Hi Ben') - }) - }) - - it('renders an async template using Promises', async () => { - const res = await renderFile(filePath, { name: 'Ada', async: true }) - expect(res).toEqual('Hi Ada') - }) - - it('renders an async template with an explicit config using Promises', async () => { - const res = await renderFile(filePath, { name: 'Ada' }, { async: true }) - expect(res).toEqual('Hi Ada') - }) - - it('uses cached version of a file', async () => { - templates.define(fakeFilePath, compile('This template does not exist')) + renderFile( + filePath, + { name: "Ben" }, + { rmWhitespace: true }, + function (_err: Error | null, res?: string) { + expect(res).toEqual("Hi Ben"); + } + ); + }); + + it("renders an async template using Promises", async () => { + const res = await renderFile(filePath, { name: "Ada", async: true }); + expect(res).toEqual("Hi Ada"); + }); + + it("renders an async template with an explicit config using Promises", async () => { + const res = await renderFile(filePath, { name: "Ada" }, { async: true }); + expect(res).toEqual("Hi Ada"); + }); + + it("uses cached version of a file", async () => { + templates.define(fakeFilePath, compile("This template does not exist")); // renderFile should just look straight in the cache for the template renderFile(fakeFilePath, { cache: true }, function (_err: Error | null, res?: string) { - expect(res).toEqual('This template does not exist') - }) - }) + expect(res).toEqual("This template does not exist"); + }); + }); - it('parses a simple template w/ settings from Express', async () => { + it("parses a simple template w/ settings from Express", async () => { renderFile( filePath, { - name: '

    Ben

    ', + name: "

    Ben

    ", cache: true, settings: { - views: [path.join(__dirname, 'templates'), path.join(__dirname, 'othertemplates')], - 'view cache': true, - 'view options': { autoEscape: false } - } + views: [path.join(__dirname, "templates"), path.join(__dirname, "othertemplates")], + "view cache": true, + "view options": { autoEscape: false }, + }, }, function (_err: Error | null, res?: string) { - expect(res).toEqual('Hi

    Ben

    ') + expect(res).toEqual("Hi

    Ben

    "); } - ) - }) -}) + ); + }); +}); -describe('File location tests', () => { - it('locates a file with the views option', async () => { +describe("File location tests", () => { + it("locates a file with the views option", async () => { const res = await renderFile( - 'simple.eta', - { name: 'Ada' }, - { views: path.join(__dirname, 'templates') } - ) + "simple.eta", + { name: "Ada" }, + { views: path.join(__dirname, "templates") } + ); - expect(res).toEqual('Hi Ada') - }) -}) + expect(res).toEqual("Hi Ada"); + }); +}); -describe('renderFile error tests', () => { - it('render file with callback works on error', (done) => { +describe("renderFile error tests", () => { + it("render file with callback works on error", (done) => { function cb(err: Error, _res?: string) { - expect(err).toBeTruthy() + expect(err).toBeTruthy(); expect(err.message).toMatch( buildRegEx(` var tR='',__l,__lP,include=E.include.bind(E),includeFile=E.includeFile.bind(E) @@ -114,16 +116,16 @@ tR+=E.e(badSyntax(=!) if(__l)tR=await includeFile(__l,Object.assign(it,{body:tR},__lP)) if(cb){cb(null,tR)} return tR `) - ) - done() + ); + done(); } - renderFile(errFilePath, { name: 'Ada Lovelace', async: true }, cb) - }) + renderFile(errFilePath, { name: "Ada Lovelace", async: true }, cb); + }); - test('throws with bad inner JS syntax using Promises', async () => { + test("throws with bad inner JS syntax using Promises", async () => { await expect(async () => { - await renderFile(errFilePath, {}) + await renderFile(errFilePath, {}); }).rejects.toThrow( buildRegEx(` var tR='',__l,__lP,include=E.include.bind(E),includeFile=E.includeFile.bind(E) @@ -133,15 +135,15 @@ tR+=E.e(badSyntax(=!) if(__l)tR=includeFile(__l,Object.assign(it,{body:tR},__lP)) if(cb){cb(null,tR)} return tR `) - ) - }) -}) - -describe('renderFileAsync function', () => { - it('should render properly', async () => { - expect(await renderFileAsync(filePath, { name: 'foo' })).toBe('Hi foo') - }) -}) + ); + }); +}); + +describe("renderFileAsync function", () => { + it("should render properly", async () => { + expect(await renderFileAsync(filePath, { name: "foo" })).toBe("Hi foo"); + }); +}); // NOTE: the errors will really look like this: diff --git a/test/file-helpers.spec.ts b/test/file-helpers.spec.ts index 22facdff..2812ac66 100644 --- a/test/file-helpers.spec.ts +++ b/test/file-helpers.spec.ts @@ -1,50 +1,50 @@ /* global it, expect, describe */ -import { render, templates, compile } from '../src/index' +import { render, templates, compile } from "../src/index"; -const path = require('path') +const path = require("path"); -templates.define('test-template', compile('HEY <%=it.name%>')) +templates.define("test-template", compile("HEY <%=it.name%>")); -describe('include works', () => { +describe("include works", () => { it('simple parser works with "E.includeFile"', async () => { const renderedTemplate = render( '<%~ E.includeFile("simple", it) %>', - { name: 'Ben' }, - { filename: path.join(__dirname, 'templates/placeholder.eta') } - ) + { name: "Ben" }, + { filename: path.join(__dirname, "templates/placeholder.eta") } + ); - expect(renderedTemplate).toEqual('Hi Ben') - }) + expect(renderedTemplate).toEqual("Hi Ben"); + }); it('simple parser works with "includeFile"', async () => { const renderedTemplate = render( '<%~ includeFile("simple", it) %>', - { name: 'Ben' }, - { filename: path.join(__dirname, 'templates/placeholder.eta') } - ) + { name: "Ben" }, + { filename: path.join(__dirname, "templates/placeholder.eta") } + ); - expect(renderedTemplate).toEqual('Hi Ben') - }) + expect(renderedTemplate).toEqual("Hi Ben"); + }); it('"includeFile" works with "views" array', async () => { const renderedTemplate = render( '<%~ includeFile("randomtemplate", it) %>', - { user: 'Ben' }, + { user: "Ben" }, { - filename: path.join(__dirname, 'templates/placeholder.eta'), - views: [path.join(__dirname, 'templates'), path.join(__dirname, 'othertemplates')] + filename: path.join(__dirname, "templates/placeholder.eta"), + views: [path.join(__dirname, "templates"), path.join(__dirname, "othertemplates")], } - ) + ); - expect(renderedTemplate).toEqual('This is a random template. Hey Ben') - }) + expect(renderedTemplate).toEqual("This is a random template. Hey Ben"); + }); it('simple parser works with "include"', async () => { - const renderedTemplate = render('<%~ include("test-template", it) %>', { name: 'Ben' }) + const renderedTemplate = render('<%~ include("test-template", it) %>', { name: "Ben" }); - expect(renderedTemplate).toEqual('HEY Ben') - }) + expect(renderedTemplate).toEqual("HEY Ben"); + }); test('throws if helper "includeFile" cannot find template', () => { expect(() => { @@ -52,15 +52,15 @@ describe('include works', () => { '<%~ includeFile("missing-template", it) %>', {}, { - filename: path.join(__dirname, 'templates/placeholder.eta'), - views: [path.join(__dirname, 'templates'), path.join(__dirname, 'othertemplates')] + filename: path.join(__dirname, "templates/placeholder.eta"), + views: [path.join(__dirname, "templates"), path.join(__dirname, "othertemplates")], } - ) + ); }).toThrow( `Could not find the template "missing-template". Paths tried: ${path.join( __dirname, - '/templates' - )}/missing-template.eta,${path.join(__dirname, '/othertemplates')}/missing-template.eta` - ) - }) -}) + "/templates" + )}/missing-template.eta,${path.join(__dirname, "/othertemplates")}/missing-template.eta` + ); + }); +}); diff --git a/test/file-utils.spec.ts b/test/file-utils.spec.ts index 50087d0e..53094f50 100644 --- a/test/file-utils.spec.ts +++ b/test/file-utils.spec.ts @@ -1,27 +1,27 @@ /* global it, expect, describe */ -import { renderFile, loadFile, templates } from '../src/index' -import { config } from '../src/config' - -const path = require('path'), - filePath = path.join(__dirname, 'templates/simple.eta') - -describe('File tests', () => { - it('loadFile works', () => { - loadFile(filePath, { filename: filePath }) - expect(templates.get(filePath)).toBeTruthy() - expect(templates.get(filePath)({ name: 'Ben' }, config)).toBeTruthy() - }) -}) - -describe('Filepath caching', () => { - it('Filepath caching works as expected', async () => { +import { renderFile, loadFile, templates } from "../src/index"; +import { config } from "../src/config"; + +const path = require("path"), + filePath = path.join(__dirname, "templates/simple.eta"); + +describe("File tests", () => { + it("loadFile works", () => { + loadFile(filePath, { filename: filePath }); + expect(templates.get(filePath)).toBeTruthy(); + expect(templates.get(filePath)({ name: "Ben" }, config)).toBeTruthy(); + }); +}); + +describe("Filepath caching", () => { + it("Filepath caching works as expected", async () => { // This test renders templates/has-include.eta with caching enabled, then checks to make sure // `config.filepathCache` contains the expected result afterward - const viewsDir = path.join(__dirname, 'templates') + const viewsDir = path.join(__dirname, "templates"); - const templateResult = await renderFile('has-include', {}, { views: viewsDir, cache: true }) + const templateResult = await renderFile("has-include", {}, { views: viewsDir, cache: true }); expect(templateResult).toEqual( `This is the outermost template. Now we'll include a partial @@ -29,23 +29,23 @@ describe('Filepath caching', () => { =========================================================== This is a partial. Hi Test Runner` - ) + ); // The cache is indexed by {filename, path, root, views} (JSON.stringify ignores keys with undefined as their value) // Filepath caching is based on the premise that given the same path, includer filename, root directory, and views directory (or directories) // the getPath function will always return the same result (assuming that caching is enabled and we're not expecting the templates to change) - const pathToHasInclude = `{"filename":"${viewsDir}/has-include.eta","path":"./partial","views":"${viewsDir}"}` + const pathToHasInclude = `{"filename":"${viewsDir}/has-include.eta","path":"./partial","views":"${viewsDir}"}`; - const pathToPartial = `{"filename":"${viewsDir}/partial.eta","path":"./simple","views":"${viewsDir}"}` + const pathToPartial = `{"filename":"${viewsDir}/partial.eta","path":"./simple","views":"${viewsDir}"}`; - const pathToSimple = `{"path":"has-include","views":"${viewsDir}"}` + const pathToSimple = `{"path":"has-include","views":"${viewsDir}"}`; expect(config.filepathCache).toEqual({ [pathToHasInclude]: `${viewsDir}/partial.eta`, [pathToPartial]: `${viewsDir}/simple.eta`, - [pathToSimple]: `${viewsDir}/has-include.eta` - }) - }) -}) + [pathToSimple]: `${viewsDir}/has-include.eta`, + }); + }); +}); diff --git a/test/helpers.spec.ts b/test/helpers.spec.ts index f7579fde..71d70412 100644 --- a/test/helpers.spec.ts +++ b/test/helpers.spec.ts @@ -1,6 +1,6 @@ /* global it, expect, describe */ -import { render } from '../src/index' +import { render } from "../src/index"; // SHOULD TEST COMMON ETA USAGE PATTERNS HERE @@ -10,11 +10,11 @@ The Daugherty's have 5 kids: <% it.kids.forEach(function(kid){ %>
  • <%= kid %>
  • <% }) %> -` +`; -describe('Helper tests', () => { - it('parses a simple array foreach', () => { - const res = render(eachTemplate, { kids: ['Ben', 'Polly', 'Joel', 'Phronsie', 'Davie'] }) +describe("Helper tests", () => { + it("parses a simple array foreach", () => { + const res = render(eachTemplate, { kids: ["Ben", "Polly", "Joel", "Phronsie", "Davie"] }); expect(res).toEqual( ` The Daugherty's have 5 kids: @@ -25,12 +25,12 @@ The Daugherty's have 5 kids:
  • Phronsie
  • Davie
  • ` - ) - }) + ); + }); test('throws if helper "include" cannot find template', () => { expect(() => { - render('<%~ include("missing-template", it) %>', {}) - }).toThrow(new Error('Could not fetch template "missing-template"')) - }) -}) + render('<%~ include("missing-template", it) %>', {}); + }).toThrow(new Error('Could not fetch template "missing-template"')); + }); +}); diff --git a/test/layouts.spec.ts b/test/layouts.spec.ts index a0e7192c..8c4b6415 100644 --- a/test/layouts.spec.ts +++ b/test/layouts.spec.ts @@ -1,16 +1,16 @@ -import { path } from '../src/file-methods' +import { path } from "../src/file-methods"; /* global it, expect, describe */ -import { compile, render, renderFile, templates } from '../src/index' +import { compile, render, renderFile, templates } from "../src/index"; -describe('Layout Tests', () => { - it('Nested layouts work as expected', async () => { +describe("Layout Tests", () => { + it("Nested layouts work as expected", async () => { const res = await renderFile( - 'index.eta', - { title: 'Cool Title' }, + "index.eta", + { title: "Cool Title" }, // Async can be true or false - { views: path.join(__dirname, 'templates'), async: true } - ) + { views: path.join(__dirname, "templates"), async: true } + ); expect(res).toEqual(` @@ -20,43 +20,43 @@ describe('Layout Tests', () => { This is the template body. -`) - }) +`); + }); - it('Layouts fall back to include if includeFile is undefined', async () => { + it("Layouts fall back to include if includeFile is undefined", async () => { templates.define( - 'my-layout', + "my-layout", compile(`###<%= it.title %>###,<%~ it.body %>`, { includeFile: undefined }) - ) + ); const res = await render( `<% layout("my-layout") %> This is a layout`, - { title: 'Cool Title' }, + { title: "Cool Title" }, { includeFile: undefined } - ) + ); - expect(res).toEqual('###Cool Title###,This is a layout') - }) + expect(res).toEqual("###Cool Title###,This is a layout"); + }); it("Layouts are called with arguments if they're provided", async () => { templates.define( - 'my-layout', + "my-layout", compile(`<%= it.title %> - <%~ it.body %> - <%~ it.content %> - <%~ it.randomNum %>`, { - includeFile: undefined + includeFile: undefined, }) - ) + ); const res = await render( `<% layout("my-layout", { title: 'Nifty title', content: 'Nice content'}) %> This is a layout`, - { title: 'Cool Title', randomNum: 3 }, + { title: "Cool Title", randomNum: 3 }, { includeFile: undefined } - ) + ); // Note that layouts automatically accept the data of the template which called them, // after it is merged with {body:tR} and custom data - expect(res).toEqual('Nifty title - This is a layout - Nice content - 3') - }) -}) + expect(res).toEqual("Nifty title - This is a layout - Nice content - 3"); + }); +}); diff --git a/test/parse.spec.ts b/test/parse.spec.ts index 60a12a9d..87f27465 100644 --- a/test/parse.spec.ts +++ b/test/parse.spec.ts @@ -1,111 +1,112 @@ /* global it, expect, describe */ -import { parse } from '../src/index' -import { config } from '../src/config' - -const fs = require('fs'), - path = require('path'), - filePath = path.join(__dirname, 'templates/complex.eta') - -const complexTemplate = fs.readFileSync(filePath, 'utf8') - -describe('parse test', () => { - it('parses a simple template', () => { - const buff = parse('hi <%= hey %>', config) - expect(buff).toEqual(['hi ', { val: 'hey', t: 'i' }]) - }) - - it('parses a raw tag', () => { - const buff = parse('hi <%~ hey %>', config) - expect(buff).toEqual(['hi ', { val: 'hey', t: 'r' }]) - }) - - it('works with whitespace trimming', () => { - const buff = parse('hi\n<%- = hey-%> <%_ = hi _%>', config) - expect(buff).toEqual(['hi', { val: 'hey', t: 'i' }, { val: 'hi', t: 'i' }]) - }) - - it('works with multiline comments', () => { - const buff = parse('hi <% /* comment contains delimiter %> */ %>', config) - expect(buff).toEqual(['hi ', { val: '/* comment contains delimiter %> */', t: 'e' }]) - }) - - it('parses with simple template literal', () => { - const buff = parse('hi <%= `template %> ${value}` %>', config) - expect(buff).toEqual(['hi ', { val: '`template %> ${value}`', t: 'i' }]) - }) - - it('compiles complex template', () => { - const buff = parse(complexTemplate, config) +import { parse } from "../src/index"; +import { config } from "../src/config"; + +const fs = require("fs"); +const path = require("path"); + +const filePath = path.join(__dirname, "templates/complex.eta"); + +const complexTemplate = fs.readFileSync(filePath, "utf8"); + +describe("parse test", () => { + it("parses a simple template", () => { + const buff = parse("hi <%= hey %>", config); + expect(buff).toEqual(["hi ", { val: "hey", t: "i" }]); + }); + + it("parses a raw tag", () => { + const buff = parse("hi <%~ hey %>", config); + expect(buff).toEqual(["hi ", { val: "hey", t: "r" }]); + }); + + it("works with whitespace trimming", () => { + const buff = parse("hi\n<%- = hey-%> <%_ = hi _%>", config); + expect(buff).toEqual(["hi", { val: "hey", t: "i" }, { val: "hi", t: "i" }]); + }); + + it("works with multiline comments", () => { + const buff = parse("hi <% /* comment contains delimiter %> */ %>", config); + expect(buff).toEqual(["hi ", { val: "/* comment contains delimiter %> */", t: "e" }]); + }); + + it("parses with simple template literal", () => { + const buff = parse("hi <%= `template %> ${value}` %>", config); + expect(buff).toEqual(["hi ", { val: "`template %> ${value}`", t: "i" }]); + }); + + it("compiles complex template", () => { + const buff = parse(complexTemplate, config); expect(buff).toEqual([ - 'Hi\\n', - { t: 'e', val: 'console.log("Hope you like Eta!")' }, - { t: 'i', val: 'it.htmlstuff' }, - '\\n', - { t: 'e', val: 'for (var key in it.obj) {' }, - 'Value: ', - { t: 'i', val: 'it.obj[key]' }, - ', Key: ', - { t: 'i', val: 'key' }, - '\\n', - { t: 'e', val: "if (key === 'thirdchild') {" }, - ' ', + "Hi\\n", + { t: "e", val: 'console.log("Hope you like Eta!")' }, + { t: "i", val: "it.htmlstuff" }, + "\\n", + { t: "e", val: "for (var key in it.obj) {" }, + "Value: ", + { t: "i", val: "it.obj[key]" }, + ", Key: ", + { t: "i", val: "key" }, + "\\n", + { t: "e", val: "if (key === 'thirdchild') {" }, + " ", { - t: 'e', - val: 'for (var i = 0, arr = it.obj[key]; i < arr.length; i++) {' + t: "e", + val: "for (var i = 0, arr = it.obj[key]; i < arr.length; i++) {", }, - ' Salutations! Index: ', - { t: 'i', val: 'i' }, - ', parent key: ', - { t: 'i', val: 'key' }, - ' \\n ', - { t: 'e', val: '}' }, - { t: 'e', val: '}' }, - { t: 'e', val: '}' }, - '\\nThis is a partial: ', - { t: 'r', val: 'include("mypartial")' } - ]) - }) - - test('throws with unclosed tag', () => { + " Salutations! Index: ", + { t: "i", val: "i" }, + ", parent key: ", + { t: "i", val: "key" }, + " \\n ", + { t: "e", val: "}" }, + { t: "e", val: "}" }, + { t: "e", val: "}" }, + "\\nThis is a partial: ", + { t: "r", val: 'include("mypartial")' }, + ]); + }); + + test("throws with unclosed tag", () => { expect(() => { - parse('<%hi("hey")', config) - }).toThrowError('hi') - }) + parse('<%hi("hey")', config); + }).toThrowError("hi"); + }); - test('throws with unclosed single-quote string', () => { + test("throws with unclosed single-quote string", () => { expect(() => { - parse("<%= ' %>", config) + parse("<%= ' %>", config); }).toThrowError(`unclosed string at line 1 col 5: <%= ' %> - ^`) - }) + ^`); + }); - test('throws with unclosed double-quote string', () => { + test("throws with unclosed double-quote string", () => { expect(() => { - parse('<%= " %>', config) + parse('<%= " %>', config); }).toThrowError(`unclosed string at line 1 col 5: <%= " %> - ^`) - }) + ^`); + }); - test('throws with unclosed template literal', () => { + test("throws with unclosed template literal", () => { expect(() => { - parse('<%= ` %>', config) + parse("<%= ` %>", config); }).toThrowError(`unclosed string at line 1 col 5: <%= \` %> - ^`) - }) + ^`); + }); - test('throws with unclosed multi-line comment', () => { + test("throws with unclosed multi-line comment", () => { expect(() => { - parse('<%= /* %>', config) + parse("<%= /* %>", config); }).toThrowError(`unclosed comment at line 1 col 5: <%= /* %> - ^`) - }) -}) + ^`); + }); +}); diff --git a/test/plugins.spec.ts b/test/plugins.spec.ts index b93b38d0..0d8a39bf 100644 --- a/test/plugins.spec.ts +++ b/test/plugins.spec.ts @@ -1,28 +1,28 @@ /* global it, expect, describe */ -import * as Eta from '../src/index' -import { EtaConfig } from '../src/config' -import { AstObject } from '../src/parse' +import * as Eta from "../src/index"; +import { EtaConfig } from "../src/config"; +import { AstObject } from "../src/parse"; function myPlugin() { return { // eslint-disable-next-line @typescript-eslint/no-unused-vars processAST: function (ast: Array, _env?: EtaConfig) { - ast.push('String to append') - return ast + ast.push("String to append"); + return ast; }, // eslint-disable-next-line @typescript-eslint/no-unused-vars processFnString: function (str: string, _env?: EtaConfig) { - return str.replace(/@@num@@/, '2352.3') - } - } + return str.replace(/@@num@@/, "2352.3"); + }, + }; } -const template = `<%= it.val %> <%= @@num@@ %>.` +const template = `<%= it.val %> <%= @@num@@ %>.`; -describe('Plugins', () => { - it('Plugins function properly', () => { - expect(Eta.render(template, { val: 'value' }, { plugins: [myPlugin()] })).toEqual( - 'value 2352.3.String to append' - ) - }) -}) +describe("Plugins", () => { + it("Plugins function properly", () => { + expect(Eta.render(template, { val: "value" }, { plugins: [myPlugin()] })).toEqual( + "value 2352.3.String to append" + ); + }); +}); diff --git a/test/render.spec.ts b/test/render.spec.ts index 08e2da2d..9ba544dc 100644 --- a/test/render.spec.ts +++ b/test/render.spec.ts @@ -1,120 +1,120 @@ /* global it, expect, describe */ -import render, { renderAsync } from '../src/render' -import compile from '../src/compile' -import { templates } from '../src/containers' +import render, { renderAsync } from "../src/render"; +import compile from "../src/compile"; +import { templates } from "../src/containers"; -describe('Simple Render checks', () => { - describe('Render works', () => { - it('Simple template compiles', () => { - expect(render('Hi <%= it.name%>', { name: 'Ada Lovelace' })).toEqual('Hi Ada Lovelace') - }) - it('String trimming works', () => { - expect(render('Hi \n<%- =it.name_%> !', { name: 'Ada Lovelace' })).toEqual( - 'Hi Ada Lovelace!' - ) - }) - it('Rendering function works', () => { - expect(render(compile('Hi \n<%- =it.name_%> !'), { name: 'Ada Lovelace' })).toEqual( - 'Hi Ada Lovelace!' - ) - }) - it('Rendering function works', async () => { - const template = 'Hello <%= await it.getName() %>!' +describe("Simple Render checks", () => { + describe("Render works", () => { + it("Simple template compiles", () => { + expect(render("Hi <%= it.name%>", { name: "Ada Lovelace" })).toEqual("Hi Ada Lovelace"); + }); + it("String trimming works", () => { + expect(render("Hi \n<%- =it.name_%> !", { name: "Ada Lovelace" })).toEqual( + "Hi Ada Lovelace!" + ); + }); + it("Rendering function works", () => { + expect(render(compile("Hi \n<%- =it.name_%> !"), { name: "Ada Lovelace" })).toEqual( + "Hi Ada Lovelace!" + ); + }); + it("Rendering function works", async () => { + const template = "Hello <%= await it.getName() %>!"; const getName = () => { return new Promise((res) => { setTimeout(() => { - res('Ada') - }, 20) - }) - } - expect(await render(template, { getName }, { async: true })).toEqual('Hello Ada!') - }) - it('Rendering async function works', async () => { - const template = 'Hello <%= await it.getName() %>!' + res("Ada"); + }, 20); + }); + }; + expect(await render(template, { getName }, { async: true })).toEqual("Hello Ada!"); + }); + it("Rendering async function works", async () => { + const template = "Hello <%= await it.getName() %>!"; const getName = () => { return new Promise((res) => { setTimeout(() => { - res('Ada') - }, 20) - }) - } - expect(await renderAsync(template, { getName })).toEqual('Hello Ada!') - }) - }) -}) + res("Ada"); + }, 20); + }); + }; + expect(await renderAsync(template, { getName })).toEqual("Hello Ada!"); + }); + }); +}); -describe('Render caching checks', () => { - it('Simple template caches', () => { - render('Hi <%=it.name%>', { name: 'Ada Lovelace' }, { cache: true, name: 'template1' }) - expect(templates.get('template1')).toBeTruthy() - }) +describe("Render caching checks", () => { + it("Simple template caches", () => { + render("Hi <%=it.name%>", { name: "Ada Lovelace" }, { cache: true, name: "template1" }); + expect(templates.get("template1")).toBeTruthy(); + }); - it('Simple template works again', () => { + it("Simple template works again", () => { expect( - render("This shouldn't show up", { name: 'Ada Lovelace' }, { cache: true, name: 'template1' }) - ).toEqual('Hi Ada Lovelace') - }) -}) + render("This shouldn't show up", { name: "Ada Lovelace" }, { cache: true, name: "template1" }) + ).toEqual("Hi Ada Lovelace"); + }); +}); -describe('Renders with different scopes', () => { - it('Puts `it` in global scope with env.useWith', () => { - expect(render('Hi <%=name%>', { name: 'Ada Lovelace' }, { useWith: true })).toEqual( - 'Hi Ada Lovelace' - ) - }) -}) +describe("Renders with different scopes", () => { + it("Puts `it` in global scope with env.useWith", () => { + expect(render("Hi <%=name%>", { name: "Ada Lovelace" }, { useWith: true })).toEqual( + "Hi Ada Lovelace" + ); + }); +}); -describe('processTemplate plugin', () => { - it('Simple plugin works correctly', () => { - const template = ':thumbsup:' +describe("processTemplate plugin", () => { + it("Simple plugin works correctly", () => { + const template = ":thumbsup:"; const emojiTransform = { processTemplate: function (str: string) { - return str.replace(':thumbsup:', '👍') - } - } + return str.replace(":thumbsup:", "👍"); + }, + }; const res = render( template, {}, { - plugins: [emojiTransform] + plugins: [emojiTransform], } - ) + ); - expect(res).toEqual('👍') - }) + expect(res).toEqual("👍"); + }); - it('Multiple chained plugins work correctly', () => { - const template = ':thumbsup: This is a cool template' + it("Multiple chained plugins work correctly", () => { + const template = ":thumbsup: This is a cool template"; const emojiTransform = { processTemplate: function (str: string) { - return str.replace(':thumbsup:', '👍') - } - } + return str.replace(":thumbsup:", "👍"); + }, + }; const capitalizeCool = { processTemplate: function (str: string) { - return str.replace('cool', 'COOL') - } - } + return str.replace("cool", "COOL"); + }, + }; const replaceThumbsUp = { processTemplate: function (str: string) { - return str.replace('👍', '✨') - } - } + return str.replace("👍", "✨"); + }, + }; const res = render( template, {}, { - plugins: [emojiTransform, capitalizeCool, replaceThumbsUp] + plugins: [emojiTransform, capitalizeCool, replaceThumbsUp], } - ) + ); - expect(res).toEqual('✨ This is a COOL template') - }) -}) + expect(res).toEqual("✨ This is a COOL template"); + }); +}); diff --git a/test/storage.spec.ts b/test/storage.spec.ts index dcc94bbc..547524ff 100644 --- a/test/storage.spec.ts +++ b/test/storage.spec.ts @@ -1,32 +1,32 @@ /* global it, expect, describe */ -import { Cacher } from '../src/storage' +import { Cacher } from "../src/storage"; -const Container = new Cacher({ one: 1, two: 2 }) +const Container = new Cacher({ one: 1, two: 2 }); -describe('Config Tests', () => { - it('Cache.get works', () => { - expect(Container.get('one')).toEqual(1) - }) +describe("Config Tests", () => { + it("Cache.get works", () => { + expect(Container.get("one")).toEqual(1); + }); - it('Cache.define works', () => { - Container.define('three', 3) - expect(Container.get('three')).toEqual(3) - }) + it("Cache.define works", () => { + Container.define("three", 3); + expect(Container.get("three")).toEqual(3); + }); - it('Cache.remove works', () => { - Container.remove('one') - expect(Container.get('one')).toEqual(undefined) - }) + it("Cache.remove works", () => { + Container.remove("one"); + expect(Container.get("one")).toEqual(undefined); + }); - it('Cache.reset works', () => { - Container.reset() - expect(Container.get('two')).toEqual(undefined) - }) + it("Cache.reset works", () => { + Container.reset(); + expect(Container.get("two")).toEqual(undefined); + }); - it('Cache.load works', () => { - Container.reset() - Container.load({ seven: 7, eight: 8 }) - expect(Container.get('eight')).toEqual(8) - }) -}) + it("Cache.load works", () => { + Container.reset(); + Container.load({ seven: 7, eight: 8 }); + expect(Container.get("eight")).toEqual(8); + }); +}); diff --git a/test/utils.spec.ts b/test/utils.spec.ts index b3a86721..fbec55de 100644 --- a/test/utils.spec.ts +++ b/test/utils.spec.ts @@ -1,62 +1,62 @@ /* global it, expect, describe */ -import { trimWS, XMLEscape } from '../src/utils' -import { defaultConfig, getConfig } from '../src/index' +import { trimWS, XMLEscape } from "../src/utils"; +import { defaultConfig, getConfig } from "../src/index"; -describe('Whitespace trim', () => { - describe('#trimLeft', () => { - it('WS slurp with str.trimLeft', () => { - expect(trimWS(' jestjs', defaultConfig, '_')).toBe('jestjs') - }) - it('WS slurp without str.trimLeft', () => { - Object.defineProperty(String.prototype, 'trimLeft', { value: undefined }) - expect(trimWS(' jestjs', defaultConfig, '_')).toBe('jestjs') - }) - it('WS newline', () => { - expect(trimWS('\njestjs', defaultConfig, '-')).toBe('jestjs') - }) - it('WS slurp and WS newline are equal with newline', () => { - Object.defineProperty(String.prototype, 'trimLeft', { value: undefined }) - expect(trimWS(' jestjs', defaultConfig, '_')).toBe(trimWS('\njestjs', defaultConfig, '-')) - }) - }) +describe("Whitespace trim", () => { + describe("#trimLeft", () => { + it("WS slurp with str.trimLeft", () => { + expect(trimWS(" jestjs", defaultConfig, "_")).toBe("jestjs"); + }); + it("WS slurp without str.trimLeft", () => { + Object.defineProperty(String.prototype, "trimLeft", { value: undefined }); + expect(trimWS(" jestjs", defaultConfig, "_")).toBe("jestjs"); + }); + it("WS newline", () => { + expect(trimWS("\njestjs", defaultConfig, "-")).toBe("jestjs"); + }); + it("WS slurp and WS newline are equal with newline", () => { + Object.defineProperty(String.prototype, "trimLeft", { value: undefined }); + expect(trimWS(" jestjs", defaultConfig, "_")).toBe(trimWS("\njestjs", defaultConfig, "-")); + }); + }); - describe('#trimRight', () => { - it('WS slurp with str.trimRight', () => { - expect(trimWS('jestjs ', defaultConfig, '', '_')).toBe('jestjs') - }) - it('WS slurp without str.trimRight', () => { - Object.defineProperty(String.prototype, 'trimRight', { value: undefined }) - expect(trimWS('jestjs ', defaultConfig, '', '_')).toBe('jestjs') - }) - it('WS newline', () => { - expect(trimWS('jestjs\n', defaultConfig, '', '-')).toBe('jestjs') - }) - it('WS slurp and WS newline are equal with newline', () => { - Object.defineProperty(String.prototype, 'trimRight', { value: undefined }) - expect(trimWS('jestjs ', defaultConfig, '', '_')).toBe( - trimWS('jestjs\n', defaultConfig, '', '-') - ) - }) - }) + describe("#trimRight", () => { + it("WS slurp with str.trimRight", () => { + expect(trimWS("jestjs ", defaultConfig, "", "_")).toBe("jestjs"); + }); + it("WS slurp without str.trimRight", () => { + Object.defineProperty(String.prototype, "trimRight", { value: undefined }); + expect(trimWS("jestjs ", defaultConfig, "", "_")).toBe("jestjs"); + }); + it("WS newline", () => { + expect(trimWS("jestjs\n", defaultConfig, "", "-")).toBe("jestjs"); + }); + it("WS slurp and WS newline are equal with newline", () => { + Object.defineProperty(String.prototype, "trimRight", { value: undefined }); + expect(trimWS("jestjs ", defaultConfig, "", "_")).toBe( + trimWS("jestjs\n", defaultConfig, "", "-") + ); + }); + }); - describe('#trim', () => { - it('WS slurp both sides', () => { - expect(trimWS(' somestring ', getConfig({ autoTrim: ['slurp', 'slurp'] }), '', '')).toBe( - 'somestring' - ) - }) + describe("#trim", () => { + it("WS slurp both sides", () => { + expect(trimWS(" somestring ", getConfig({ autoTrim: ["slurp", "slurp"] }), "", "")).toBe( + "somestring" + ); + }); - it('defaultConfig.autoTrim set to false', () => { - expect(trimWS(' some string\n ', getConfig({ autoTrim: false }), '', '')).toBe( - ' some string\n ' - ) - }) - }) -}) + it("defaultConfig.autoTrim set to false", () => { + expect(trimWS(" some string\n ", getConfig({ autoTrim: false }), "", "")).toBe( + " some string\n " + ); + }); + }); +}); -describe('HTML Escape', () => { - it('properly escapes HTML characters', () => { - expect(XMLEscape('

    HTML

    ')).toBe('<p>HTML</p>') - }) -}) +describe("HTML Escape", () => { + it("properly escapes HTML characters", () => { + expect(XMLEscape("

    HTML

    ")).toBe("<p>HTML</p>"); + }); +}); diff --git a/tsconfig.eslint.json b/tsconfig.eslint.json deleted file mode 100644 index 8273a2db..00000000 --- a/tsconfig.eslint.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "compilerOptions": { - "moduleResolution": "node", - "target": "es5", - "module": "es2015", - "lib": ["es2015", "es2016", "es2017", "es2019.string", "dom"], - "strict": true, - "sourceMap": true, - "declaration": true, - "allowSyntheticDefaultImports": true, - "experimentalDecorators": true, - "emitDecoratorMetadata": true, - "declarationDir": "dist/types", - "outDir": "dist" - }, - "include": ["src", "test", "examples"], - "exclude": ["node_modules", "typings", "dist", "deno_dist", "src/*.deno.ts"] -} diff --git a/tsconfig.json b/tsconfig.json index 7056641b..87bf1b1e 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,21 +1,20 @@ { "compilerOptions": { - "moduleResolution": "node", - "target": "es5", - "module": "es2015", - "lib": ["es2015", "es2016", "es2017", "es2019.string", "dom"], "strict": true, - "sourceMap": true, + "lib": ["ES2022", "DOM"], + "target": "ESNext", + "module": "ESNext", + "moduleResolution": "NodeNext", + "forceConsistentCasingInFileNames": true, + "skipLibCheck": true, "declaration": true, "declarationMap": true, - "allowSyntheticDefaultImports": true, - "experimentalDecorators": true, - "emitDecoratorMetadata": true, + "declarationDir": "dist/types", + "outDir": "dist", + "noImplicitAny": true, "noUnusedLocals": true, "noUnusedParameters": true, - "declarationDir": "dist/types", - "outDir": "dist" + "esModuleInterop": true }, - "include": ["src"], - "exclude": ["node_modules", "typings", "dist", "deno_dist", "src/*.deno.ts"] + "files": ["src/index.ts", "src/browser.ts"] }