From 25716e714e286f43d7123379e0a1b128d4de461c Mon Sep 17 00:00:00 2001 From: Robin Malfait Date: Mon, 13 Mar 2023 16:38:46 +0100 Subject: [PATCH 01/44] add `jiti` and `detective-typescript` dependencies --- package-lock.json | 571 ++++++++++++++++++++++++++++++++++------------ package.json | 3 +- 2 files changed, 433 insertions(+), 141 deletions(-) diff --git a/package-lock.json b/package-lock.json index c55ff7e6e2f8..2948fef51ae0 100644 --- a/package-lock.json +++ b/package-lock.json @@ -18,12 +18,13 @@ "browserslist": "^4.21.5", "chokidar": "^3.5.3", "color-name": "^1.1.4", - "detective": "^5.2.1", + "detective-typescript": "^9.0.0", "didyoumean": "^1.2.2", "dlv": "^1.1.3", "fast-glob": "^3.2.12", "glob-parent": "^6.0.2", "is-glob": "^4.0.3", + "jiti": "^1.17.2", "lightningcss": "^1.18.0", "lilconfig": "^2.1.0", "micromatch": "^4.0.5", @@ -54,7 +55,7 @@ "cssnano": "^5.1.15", "esbuild": "^0.17.10", "eslint": "^8.35.0", - "eslint-config-prettier": "^8.6.0", + "eslint-config-prettier": "^8.7.0", "eslint-plugin-prettier": "^4.2.1", "jest": "^29.4.3", "jest-diff": "^29.4.3", @@ -924,7 +925,6 @@ "version": "7.21.2", "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.21.2.tgz", "integrity": "sha512-URpaIJQwEkEC2T9Kn+Ai6Xe/02iNaVCuT/PtoRz3GPVJVDpPd7mLo+VddTbhCRU9TXqW5mSrQfXZyi8kDKOVpQ==", - "dev": true, "bin": { "parser": "bin/babel-parser.js" }, @@ -4190,6 +4190,101 @@ "dev": true, "license": "MIT" }, + "node_modules/@typescript-eslint/types": { + "version": "5.54.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.54.1.tgz", + "integrity": "sha512-G9+1vVazrfAfbtmCapJX8jRo2E4MDXxgm/IMOF4oGh3kq7XuK3JRkOg6y2Qu1VsTRmWETyTkWt1wxy7X7/yLkw==", + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/typescript-estree": { + "version": "5.54.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.54.1.tgz", + "integrity": "sha512-bjK5t+S6ffHnVwA0qRPTZrxKSaFYocwFIkZx5k7pvWfsB1I57pO/0M0Skatzzw1sCkjJ83AfGTL0oFIFiDX3bg==", + "dependencies": { + "@typescript-eslint/types": "5.54.1", + "@typescript-eslint/visitor-keys": "5.54.1", + "debug": "^4.3.4", + "globby": "^11.1.0", + "is-glob": "^4.0.3", + "semver": "^7.3.7", + "tsutils": "^3.21.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "engines": { + "node": ">=8" + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/globby": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "dependencies": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/semver": { + "version": "7.3.8", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", + "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@typescript-eslint/visitor-keys": { + "version": "5.54.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.54.1.tgz", + "integrity": "sha512-q8iSoHTgwCfgcRJ2l2x+xCbu8nBlRAlsQ33k24Adj8eoVBE0f8dUeI+bAa8F84Mv05UGbAx57g2zrRsYIooqQg==", + "dependencies": { + "@typescript-eslint/types": "5.54.1", + "eslint-visitor-keys": "^3.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, "node_modules/@webassemblyjs/ast": { "version": "1.11.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.1.tgz", @@ -4504,7 +4599,9 @@ }, "node_modules/acorn": { "version": "7.4.1", + "dev": true, "license": "MIT", + "peer": true, "bin": { "acorn": "bin/acorn" }, @@ -4521,22 +4618,6 @@ "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" } }, - "node_modules/acorn-node": { - "version": "1.8.2", - "license": "Apache-2.0", - "dependencies": { - "acorn": "^7.0.0", - "acorn-walk": "^7.0.0", - "xtend": "^4.0.2" - } - }, - "node_modules/acorn-walk": { - "version": "7.2.0", - "license": "MIT", - "engines": { - "node": ">=0.4.0" - } - }, "node_modules/ajv": { "version": "6.12.6", "dev": true, @@ -4808,6 +4889,14 @@ "node": ">=0.10.0" } }, + "node_modules/ast-module-types": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ast-module-types/-/ast-module-types-3.0.0.tgz", + "integrity": "sha512-CMxMCOCS+4D+DkOQfuZf+vLrSEmY/7xtORwdxs4wtcC1wVgvk2MqFFTwQCFhvWsI4KPU9lcWXPI8DgRiz+xetQ==", + "engines": { + "node": ">=6.0" + } + }, "node_modules/async-each": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.3.tgz", @@ -6461,9 +6550,9 @@ } }, "node_modules/debug": { - "version": "4.3.2", - "dev": true, - "license": "MIT", + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", "dependencies": { "ms": "2.1.2" }, @@ -6553,10 +6642,6 @@ "node": ">=0.10.0" } }, - "node_modules/defined": { - "version": "1.0.0", - "license": "MIT" - }, "node_modules/dependency-graph": { "version": "0.11.0", "resolved": "https://registry.npmjs.org/dependency-graph/-/dependency-graph-0.11.0.tgz", @@ -6596,19 +6681,18 @@ "node": ">=8" } }, - "node_modules/detective": { - "version": "5.2.1", - "license": "MIT", + "node_modules/detective-typescript": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/detective-typescript/-/detective-typescript-9.0.0.tgz", + "integrity": "sha512-lR78AugfUSBojwlSRZBeEqQ1l8LI7rbxOl1qTUnGLcjZQDjZmrZCb7R46rK8U8B5WzFvJrxa7fEBA8FoD/n5fA==", "dependencies": { - "acorn-node": "^1.8.2", - "defined": "^1.0.0", - "minimist": "^1.2.6" - }, - "bin": { - "detective": "bin/detective.js" + "@typescript-eslint/typescript-estree": "^5.13.0", + "ast-module-types": "^3.0.0", + "node-source-walk": "^5.0.0", + "typescript": "^4.5.5" }, "engines": { - "node": ">=0.8.0" + "node": "^12.20.0 || ^14.14.0 || >=16.0.0" } }, "node_modules/didyoumean": { @@ -6645,7 +6729,6 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", - "dev": true, "dependencies": { "path-type": "^4.0.0" }, @@ -6988,11 +7071,10 @@ } }, "node_modules/eslint-config-prettier": { - "version": "8.6.0", - "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.6.0.tgz", - "integrity": "sha512-bAF0eLpLVqP5oEVUFKpMA+NnRFICwn9X8B5jrR9FcqnYBuPbqWEjTEspPWMj5ye6czoSLDweCzSo3Ko7gGrZaA==", + "version": "8.7.0", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.7.0.tgz", + "integrity": "sha512-HHVXLSlVUhMSmyW4ZzEuvjpwqamgmlfkutD53cYXLikh4pt/modINRcCIApJ84czDxM4GZInwUrromsDdTImTA==", "dev": true, - "license": "MIT", "bin": { "eslint-config-prettier": "bin/cli.js" }, @@ -7036,7 +7118,6 @@ "version": "3.3.0", "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz", "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==", - "dev": true, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" } @@ -8449,7 +8530,6 @@ }, "node_modules/ignore": { "version": "5.2.4", - "dev": true, "license": "MIT", "engines": { "node": ">= 4" @@ -9835,6 +9915,14 @@ "@types/yargs-parser": "*" } }, + "node_modules/jiti": { + "version": "1.17.2", + "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.17.2.tgz", + "integrity": "sha512-Xf0nU8+8wuiQpLcqdb2HRyHqYwGk2Pd+F7kstyp20ZuqTyCmB9dqpX2NxaxFc1kovraa2bG6c1RL3W7XfapiZg==", + "bin": { + "jiti": "bin/jiti.js" + } + }, "node_modules/js-sdsl": { "version": "4.1.4", "dev": true, @@ -10298,7 +10386,6 @@ }, "node_modules/lru-cache": { "version": "6.0.0", - "dev": true, "license": "ISC", "dependencies": { "yallist": "^4.0.0" @@ -10569,6 +10656,7 @@ }, "node_modules/minimist": { "version": "1.2.6", + "dev": true, "license": "MIT" }, "node_modules/mississippi": { @@ -10645,7 +10733,6 @@ }, "node_modules/ms": { "version": "2.1.2", - "dev": true, "license": "MIT" }, "node_modules/msgpackr": { @@ -10836,6 +10923,17 @@ "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.10.tgz", "integrity": "sha512-5GFldHPXVG/YZmFzJvKK2zDSzPKhEp0+ZR5SVaoSag9fsL5YgHbUHDfnG5494ISANDcK4KwPXAx2xqVEydmd7w==" }, + "node_modules/node-source-walk": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/node-source-walk/-/node-source-walk-5.0.0.tgz", + "integrity": "sha512-58APXoMXpmmU+oVBJFajhTCoD8d/OGtngnVAWzIo2A8yn0IXwBzvIVIsTzoie/SrA37u+1hnpNz2HMWx/VIqlw==", + "dependencies": { + "@babel/parser": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, "node_modules/normalize-path": { "version": "3.0.0", "license": "MIT", @@ -11333,7 +11431,6 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", - "dev": true, "engines": { "node": ">=8" } @@ -11389,9 +11486,10 @@ } }, "node_modules/pirates": { - "version": "4.0.4", + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.5.tgz", + "integrity": "sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ==", "dev": true, - "license": "MIT", "engines": { "node": ">= 6" } @@ -12994,7 +13092,6 @@ }, "node_modules/slash": { "version": "3.0.0", - "dev": true, "license": "MIT", "engines": { "node": ">=8" @@ -13971,6 +14068,25 @@ "dev": true, "license": "0BSD" }, + "node_modules/tsutils": { + "version": "3.21.0", + "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", + "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", + "dependencies": { + "tslib": "^1.8.1" + }, + "engines": { + "node": ">= 6" + }, + "peerDependencies": { + "typescript": ">=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta" + } + }, + "node_modules/tsutils/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + }, "node_modules/tty-browserify": { "version": "0.0.0", "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.0.tgz", @@ -14099,6 +14215,18 @@ "integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==", "dev": true }, + "node_modules/typescript": { + "version": "4.9.5", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz", + "integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=4.2.0" + } + }, "node_modules/union-value": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz", @@ -15460,6 +15588,7 @@ }, "node_modules/xtend": { "version": "4.0.2", + "dev": true, "license": "MIT", "engines": { "node": ">=0.4" @@ -15481,7 +15610,6 @@ }, "node_modules/yallist": { "version": "4.0.0", - "dev": true, "license": "ISC" }, "node_modules/yaml": { @@ -15827,8 +15955,7 @@ "@babel/parser": { "version": "7.21.2", "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.21.2.tgz", - "integrity": "sha512-URpaIJQwEkEC2T9Kn+Ai6Xe/02iNaVCuT/PtoRz3GPVJVDpPd7mLo+VddTbhCRU9TXqW5mSrQfXZyi8kDKOVpQ==", - "dev": true + "integrity": "sha512-URpaIJQwEkEC2T9Kn+Ai6Xe/02iNaVCuT/PtoRz3GPVJVDpPd7mLo+VddTbhCRU9TXqW5mSrQfXZyi8kDKOVpQ==" }, "@babel/plugin-syntax-async-generators": { "version": "7.8.4", @@ -18338,6 +18465,62 @@ "version": "20.2.1", "dev": true }, + "@typescript-eslint/types": { + "version": "5.54.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.54.1.tgz", + "integrity": "sha512-G9+1vVazrfAfbtmCapJX8jRo2E4MDXxgm/IMOF4oGh3kq7XuK3JRkOg6y2Qu1VsTRmWETyTkWt1wxy7X7/yLkw==" + }, + "@typescript-eslint/typescript-estree": { + "version": "5.54.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.54.1.tgz", + "integrity": "sha512-bjK5t+S6ffHnVwA0qRPTZrxKSaFYocwFIkZx5k7pvWfsB1I57pO/0M0Skatzzw1sCkjJ83AfGTL0oFIFiDX3bg==", + "requires": { + "@typescript-eslint/types": "5.54.1", + "@typescript-eslint/visitor-keys": "5.54.1", + "debug": "^4.3.4", + "globby": "^11.1.0", + "is-glob": "^4.0.3", + "semver": "^7.3.7", + "tsutils": "^3.21.0" + }, + "dependencies": { + "array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==" + }, + "globby": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "requires": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" + } + }, + "semver": { + "version": "7.3.8", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", + "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", + "requires": { + "lru-cache": "^6.0.0" + } + } + } + }, + "@typescript-eslint/visitor-keys": { + "version": "5.54.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.54.1.tgz", + "integrity": "sha512-q8iSoHTgwCfgcRJ2l2x+xCbu8nBlRAlsQ33k24Adj8eoVBE0f8dUeI+bAa8F84Mv05UGbAx57g2zrRsYIooqQg==", + "requires": { + "@typescript-eslint/types": "5.54.1", + "eslint-visitor-keys": "^3.3.0" + } + }, "@webassemblyjs/ast": { "version": "1.11.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.1.tgz", @@ -18644,7 +18827,9 @@ "dev": true }, "acorn": { - "version": "7.4.1" + "version": "7.4.1", + "dev": true, + "peer": true }, "acorn-jsx": { "version": "5.3.2", @@ -18653,17 +18838,6 @@ "dev": true, "requires": {} }, - "acorn-node": { - "version": "1.8.2", - "requires": { - "acorn": "^7.0.0", - "acorn-walk": "^7.0.0", - "xtend": "^4.0.2" - } - }, - "acorn-walk": { - "version": "7.2.0" - }, "ajv": { "version": "6.12.6", "dev": true, @@ -18859,6 +19033,11 @@ "integrity": "sha512-Q+JC7Whu8HhmTdBph/Tq59IoRtoy6KAm5zzPv00WdujX82lbAL8K7WVjne7vdCsAmbF4AYaDOPyO3k0kl8qIrw==", "dev": true }, + "ast-module-types": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ast-module-types/-/ast-module-types-3.0.0.tgz", + "integrity": "sha512-CMxMCOCS+4D+DkOQfuZf+vLrSEmY/7xtORwdxs4wtcC1wVgvk2MqFFTwQCFhvWsI4KPU9lcWXPI8DgRiz+xetQ==" + }, "async-each": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.3.tgz", @@ -20096,8 +20275,9 @@ "dev": true }, "debug": { - "version": "4.3.2", - "dev": true, + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", "requires": { "ms": "2.1.2" } @@ -20155,9 +20335,6 @@ "isobject": "^3.0.1" } }, - "defined": { - "version": "1.0.0" - }, "dependency-graph": { "version": "0.11.0", "resolved": "https://registry.npmjs.org/dependency-graph/-/dependency-graph-0.11.0.tgz", @@ -20185,12 +20362,15 @@ "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==", "dev": true }, - "detective": { - "version": "5.2.1", + "detective-typescript": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/detective-typescript/-/detective-typescript-9.0.0.tgz", + "integrity": "sha512-lR78AugfUSBojwlSRZBeEqQ1l8LI7rbxOl1qTUnGLcjZQDjZmrZCb7R46rK8U8B5WzFvJrxa7fEBA8FoD/n5fA==", "requires": { - "acorn-node": "^1.8.2", - "defined": "^1.0.0", - "minimist": "^1.2.6" + "@typescript-eslint/typescript-estree": "^5.13.0", + "ast-module-types": "^3.0.0", + "node-source-walk": "^5.0.0", + "typescript": "^4.5.5" } }, "didyoumean": { @@ -20225,7 +20405,6 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", - "dev": true, "requires": { "path-type": "^4.0.0" } @@ -20520,9 +20699,9 @@ } }, "eslint-config-prettier": { - "version": "8.6.0", - "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.6.0.tgz", - "integrity": "sha512-bAF0eLpLVqP5oEVUFKpMA+NnRFICwn9X8B5jrR9FcqnYBuPbqWEjTEspPWMj5ye6czoSLDweCzSo3Ko7gGrZaA==", + "version": "8.7.0", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.7.0.tgz", + "integrity": "sha512-HHVXLSlVUhMSmyW4ZzEuvjpwqamgmlfkutD53cYXLikh4pt/modINRcCIApJ84czDxM4GZInwUrromsDdTImTA==", "dev": true, "requires": {} }, @@ -20544,8 +20723,7 @@ "eslint-visitor-keys": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz", - "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==", - "dev": true + "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==" }, "espree": { "version": "9.5.0", @@ -21501,8 +21679,7 @@ "dev": true }, "ignore": { - "version": "5.2.4", - "dev": true + "version": "5.2.4" }, "immutable": { "version": "4.2.2", @@ -22616,6 +22793,11 @@ } } }, + "jiti": { + "version": "1.17.2", + "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.17.2.tgz", + "integrity": "sha512-Xf0nU8+8wuiQpLcqdb2HRyHqYwGk2Pd+F7kstyp20ZuqTyCmB9dqpX2NxaxFc1kovraa2bG6c1RL3W7XfapiZg==" + }, "js-sdsl": { "version": "4.1.4", "dev": true @@ -22900,7 +23082,6 @@ }, "lru-cache": { "version": "6.0.0", - "dev": true, "requires": { "yallist": "^4.0.0" } @@ -23097,7 +23278,8 @@ } }, "minimist": { - "version": "1.2.6" + "version": "1.2.6", + "dev": true }, "mississippi": { "version": "3.0.0", @@ -23162,8 +23344,7 @@ } }, "ms": { - "version": "2.1.2", - "dev": true + "version": "2.1.2" }, "msgpackr": { "version": "1.8.2", @@ -23317,6 +23498,14 @@ "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.10.tgz", "integrity": "sha512-5GFldHPXVG/YZmFzJvKK2zDSzPKhEp0+ZR5SVaoSag9fsL5YgHbUHDfnG5494ISANDcK4KwPXAx2xqVEydmd7w==" }, + "node-source-walk": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/node-source-walk/-/node-source-walk-5.0.0.tgz", + "integrity": "sha512-58APXoMXpmmU+oVBJFajhTCoD8d/OGtngnVAWzIo2A8yn0IXwBzvIVIsTzoie/SrA37u+1hnpNz2HMWx/VIqlw==", + "requires": { + "@babel/parser": "^7.0.0" + } + }, "normalize-path": { "version": "3.0.0" }, @@ -23669,8 +23858,7 @@ "path-type": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", - "dev": true + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==" }, "pbkdf2": { "version": "3.1.2", @@ -23701,7 +23889,9 @@ "version": "2.3.0" }, "pirates": { - "version": "4.0.4", + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.5.tgz", + "integrity": "sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ==", "dev": true }, "pkg-dir": { @@ -24775,8 +24965,7 @@ "dev": true }, "slash": { - "version": "3.0.0", - "dev": true + "version": "3.0.0" }, "snapdragon": { "version": "0.8.2", @@ -25312,18 +25501,19 @@ "color-name": "^1.1.4", "concurrently": "^7.5.0", "cssnano": "^5.1.15", - "detective": "^5.2.1", + "detective-typescript": "^9.0.0", "didyoumean": "^1.2.2", "dlv": "^1.1.3", "esbuild": "^0.17.10", "eslint": "^8.35.0", - "eslint-config-prettier": "^8.6.0", + "eslint-config-prettier": "^8.7.0", "eslint-plugin-prettier": "^4.2.1", "fast-glob": "^3.2.12", "glob-parent": "^6.0.2", "is-glob": "^4.0.3", "jest": "^29.4.3", "jest-diff": "^29.4.3", + "jiti": "^1.17.2", "lightningcss": "^1.18.0", "lilconfig": "^2.1.0", "micromatch": "^4.0.5", @@ -25613,8 +25803,7 @@ "@babel/parser": { "version": "7.21.2", "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.21.2.tgz", - "integrity": "sha512-URpaIJQwEkEC2T9Kn+Ai6Xe/02iNaVCuT/PtoRz3GPVJVDpPd7mLo+VddTbhCRU9TXqW5mSrQfXZyi8kDKOVpQ==", - "dev": true + "integrity": "sha512-URpaIJQwEkEC2T9Kn+Ai6Xe/02iNaVCuT/PtoRz3GPVJVDpPd7mLo+VddTbhCRU9TXqW5mSrQfXZyi8kDKOVpQ==" }, "@babel/plugin-syntax-async-generators": { "version": "7.8.4", @@ -28124,6 +28313,62 @@ "version": "20.2.1", "dev": true }, + "@typescript-eslint/types": { + "version": "5.54.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.54.1.tgz", + "integrity": "sha512-G9+1vVazrfAfbtmCapJX8jRo2E4MDXxgm/IMOF4oGh3kq7XuK3JRkOg6y2Qu1VsTRmWETyTkWt1wxy7X7/yLkw==" + }, + "@typescript-eslint/typescript-estree": { + "version": "5.54.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.54.1.tgz", + "integrity": "sha512-bjK5t+S6ffHnVwA0qRPTZrxKSaFYocwFIkZx5k7pvWfsB1I57pO/0M0Skatzzw1sCkjJ83AfGTL0oFIFiDX3bg==", + "requires": { + "@typescript-eslint/types": "5.54.1", + "@typescript-eslint/visitor-keys": "5.54.1", + "debug": "^4.3.4", + "globby": "^11.1.0", + "is-glob": "^4.0.3", + "semver": "^7.3.7", + "tsutils": "^3.21.0" + }, + "dependencies": { + "array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==" + }, + "globby": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "requires": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" + } + }, + "semver": { + "version": "7.3.8", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", + "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", + "requires": { + "lru-cache": "^6.0.0" + } + } + } + }, + "@typescript-eslint/visitor-keys": { + "version": "5.54.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.54.1.tgz", + "integrity": "sha512-q8iSoHTgwCfgcRJ2l2x+xCbu8nBlRAlsQ33k24Adj8eoVBE0f8dUeI+bAa8F84Mv05UGbAx57g2zrRsYIooqQg==", + "requires": { + "@typescript-eslint/types": "5.54.1", + "eslint-visitor-keys": "^3.3.0" + } + }, "@webassemblyjs/ast": { "version": "1.11.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.1.tgz", @@ -28430,7 +28675,9 @@ "dev": true }, "acorn": { - "version": "7.4.1" + "version": "7.4.1", + "dev": true, + "peer": true }, "acorn-jsx": { "version": "5.3.2", @@ -28439,17 +28686,6 @@ "dev": true, "requires": {} }, - "acorn-node": { - "version": "1.8.2", - "requires": { - "acorn": "^7.0.0", - "acorn-walk": "^7.0.0", - "xtend": "^4.0.2" - } - }, - "acorn-walk": { - "version": "7.2.0" - }, "ajv": { "version": "6.12.6", "dev": true, @@ -28645,6 +28881,11 @@ "integrity": "sha512-Q+JC7Whu8HhmTdBph/Tq59IoRtoy6KAm5zzPv00WdujX82lbAL8K7WVjne7vdCsAmbF4AYaDOPyO3k0kl8qIrw==", "dev": true }, + "ast-module-types": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ast-module-types/-/ast-module-types-3.0.0.tgz", + "integrity": "sha512-CMxMCOCS+4D+DkOQfuZf+vLrSEmY/7xtORwdxs4wtcC1wVgvk2MqFFTwQCFhvWsI4KPU9lcWXPI8DgRiz+xetQ==" + }, "async-each": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.3.tgz", @@ -29882,8 +30123,9 @@ "dev": true }, "debug": { - "version": "4.3.2", - "dev": true, + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", "requires": { "ms": "2.1.2" } @@ -29941,9 +30183,6 @@ "isobject": "^3.0.1" } }, - "defined": { - "version": "1.0.0" - }, "dependency-graph": { "version": "0.11.0", "resolved": "https://registry.npmjs.org/dependency-graph/-/dependency-graph-0.11.0.tgz", @@ -29971,12 +30210,15 @@ "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==", "dev": true }, - "detective": { - "version": "5.2.1", + "detective-typescript": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/detective-typescript/-/detective-typescript-9.0.0.tgz", + "integrity": "sha512-lR78AugfUSBojwlSRZBeEqQ1l8LI7rbxOl1qTUnGLcjZQDjZmrZCb7R46rK8U8B5WzFvJrxa7fEBA8FoD/n5fA==", "requires": { - "acorn-node": "^1.8.2", - "defined": "^1.0.0", - "minimist": "^1.2.6" + "@typescript-eslint/typescript-estree": "^5.13.0", + "ast-module-types": "^3.0.0", + "node-source-walk": "^5.0.0", + "typescript": "^4.5.5" } }, "didyoumean": { @@ -30011,7 +30253,6 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", - "dev": true, "requires": { "path-type": "^4.0.0" } @@ -30306,9 +30547,9 @@ } }, "eslint-config-prettier": { - "version": "8.6.0", - "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.6.0.tgz", - "integrity": "sha512-bAF0eLpLVqP5oEVUFKpMA+NnRFICwn9X8B5jrR9FcqnYBuPbqWEjTEspPWMj5ye6czoSLDweCzSo3Ko7gGrZaA==", + "version": "8.7.0", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.7.0.tgz", + "integrity": "sha512-HHVXLSlVUhMSmyW4ZzEuvjpwqamgmlfkutD53cYXLikh4pt/modINRcCIApJ84czDxM4GZInwUrromsDdTImTA==", "dev": true, "requires": {} }, @@ -30330,8 +30571,7 @@ "eslint-visitor-keys": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz", - "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==", - "dev": true + "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==" }, "espree": { "version": "9.5.0", @@ -31287,8 +31527,7 @@ "dev": true }, "ignore": { - "version": "5.2.4", - "dev": true + "version": "5.2.4" }, "immutable": { "version": "4.2.2", @@ -32402,6 +32641,11 @@ } } }, + "jiti": { + "version": "1.17.2", + "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.17.2.tgz", + "integrity": "sha512-Xf0nU8+8wuiQpLcqdb2HRyHqYwGk2Pd+F7kstyp20ZuqTyCmB9dqpX2NxaxFc1kovraa2bG6c1RL3W7XfapiZg==" + }, "js-sdsl": { "version": "4.1.4", "dev": true @@ -32686,7 +32930,6 @@ }, "lru-cache": { "version": "6.0.0", - "dev": true, "requires": { "yallist": "^4.0.0" } @@ -32883,7 +33126,8 @@ } }, "minimist": { - "version": "1.2.6" + "version": "1.2.6", + "dev": true }, "mississippi": { "version": "3.0.0", @@ -32948,8 +33192,7 @@ } }, "ms": { - "version": "2.1.2", - "dev": true + "version": "2.1.2" }, "msgpackr": { "version": "1.8.2", @@ -33103,6 +33346,14 @@ "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.10.tgz", "integrity": "sha512-5GFldHPXVG/YZmFzJvKK2zDSzPKhEp0+ZR5SVaoSag9fsL5YgHbUHDfnG5494ISANDcK4KwPXAx2xqVEydmd7w==" }, + "node-source-walk": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/node-source-walk/-/node-source-walk-5.0.0.tgz", + "integrity": "sha512-58APXoMXpmmU+oVBJFajhTCoD8d/OGtngnVAWzIo2A8yn0IXwBzvIVIsTzoie/SrA37u+1hnpNz2HMWx/VIqlw==", + "requires": { + "@babel/parser": "^7.0.0" + } + }, "normalize-path": { "version": "3.0.0" }, @@ -33455,8 +33706,7 @@ "path-type": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", - "dev": true + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==" }, "pbkdf2": { "version": "3.1.2", @@ -33487,7 +33737,9 @@ "version": "2.3.0" }, "pirates": { - "version": "4.0.4", + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.5.tgz", + "integrity": "sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ==", "dev": true }, "pkg-dir": { @@ -34561,8 +34813,7 @@ "dev": true }, "slash": { - "version": "3.0.0", - "dev": true + "version": "3.0.0" }, "snapdragon": { "version": "0.8.2", @@ -35314,6 +35565,21 @@ "version": "2.4.1", "dev": true }, + "tsutils": { + "version": "3.21.0", + "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", + "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", + "requires": { + "tslib": "^1.8.1" + }, + "dependencies": { + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + } + } + }, "tty-browserify": { "version": "0.0.0", "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.0.tgz", @@ -35392,6 +35658,11 @@ "integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==", "dev": true }, + "typescript": { + "version": "4.9.5", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz", + "integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==" + }, "union-value": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz", @@ -36341,7 +36612,8 @@ } }, "xtend": { - "version": "4.0.2" + "version": "4.0.2", + "dev": true }, "xxhash-wasm": { "version": "0.4.2", @@ -36354,8 +36626,7 @@ "dev": true }, "yallist": { - "version": "4.0.0", - "dev": true + "version": "4.0.0" }, "yaml": { "version": "1.10.2" @@ -36623,6 +36894,21 @@ "version": "2.4.1", "dev": true }, + "tsutils": { + "version": "3.21.0", + "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", + "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", + "requires": { + "tslib": "^1.8.1" + }, + "dependencies": { + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + } + } + }, "tty-browserify": { "version": "0.0.0", "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.0.tgz", @@ -36701,6 +36987,11 @@ "integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==", "dev": true }, + "typescript": { + "version": "4.9.5", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz", + "integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==" + }, "union-value": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz", @@ -37650,7 +37941,8 @@ } }, "xtend": { - "version": "4.0.2" + "version": "4.0.2", + "dev": true }, "xxhash-wasm": { "version": "0.4.2", @@ -37663,8 +37955,7 @@ "dev": true }, "yallist": { - "version": "4.0.0", - "dev": true + "version": "4.0.0" }, "yaml": { "version": "1.10.2" diff --git a/package.json b/package.json index 3cd2133c8160..fd85e45d25a7 100644 --- a/package.json +++ b/package.json @@ -75,12 +75,13 @@ "browserslist": "^4.21.5", "chokidar": "^3.5.3", "color-name": "^1.1.4", - "detective": "^5.2.1", + "detective-typescript": "^9.0.0", "didyoumean": "^1.2.2", "dlv": "^1.1.3", "fast-glob": "^3.2.12", "glob-parent": "^6.0.2", "is-glob": "^4.0.3", + "jiti": "^1.17.2", "lightningcss": "^1.18.0", "lilconfig": "^2.1.0", "micromatch": "^4.0.5", From e1bc35399709455f4427c95ff61c20621114fc58 Mon Sep 17 00:00:00 2001 From: Robin Malfait Date: Mon, 13 Mar 2023 16:40:24 +0100 Subject: [PATCH 02/44] use `jiti` and `detective-typescript` Instead of `detective`, this way we will be able to support `tailwind.config.ts` files and `ESM` files. --- src/cli/build/plugin.js | 14 +++++++++- src/lib/getModuleDependencies.js | 47 +++++++++++++++----------------- src/oxide/cli/build/plugin.ts | 14 +++++++++- 3 files changed, 48 insertions(+), 27 deletions(-) diff --git a/src/cli/build/plugin.js b/src/cli/build/plugin.js index 893a8c955c6f..fb2e96a4dd6e 100644 --- a/src/cli/build/plugin.js +++ b/src/cli/build/plugin.js @@ -6,6 +6,7 @@ import postcssrc from 'postcss-load-config' import { lilconfig } from 'lilconfig' import loadPlugins from 'postcss-load-config/src/plugins' // Little bit scary, looking at private/internal API import loadOptions from 'postcss-load-config/src/options' // Little bit scary, looking at private/internal API +import jitiFactory from 'jiti' import tailwind from '../../processTailwindFeatures' import { loadAutoprefixer, loadCssNano, loadPostcss, loadPostcssImport } from './deps' @@ -19,6 +20,11 @@ import fastGlob from 'fast-glob' import { findAtConfigPath } from '../../lib/findAtConfigPath.js' import log from '../../util/log' +let jiti = null +function lazyJiti() { + return jiti ?? (jiti = jitiFactory(__filename, { interopDefault: true })) +} + /** * * @param {string} [customPostCssPath ] @@ -145,7 +151,13 @@ let state = { this.refreshConfigDependencies(configPath) } - let config = configPath ? require(configPath) : {} + let config = (() => { + try { + return configPath ? require(configPath) : {} + } catch { + return lazyJiti()(configPath) + } + })() // @ts-ignore config = resolveConfig(config, { content: { files: [] } }) diff --git a/src/lib/getModuleDependencies.js b/src/lib/getModuleDependencies.js index 92ba78f1e626..7bc12aa720de 100644 --- a/src/lib/getModuleDependencies.js +++ b/src/lib/getModuleDependencies.js @@ -1,39 +1,36 @@ import fs from 'fs' import path from 'path' import resolve from 'resolve' -import detective from 'detective' +import detective from 'detective-typescript' function createModule(file) { - const source = fs.readFileSync(file, 'utf-8') - const requires = detective(source) - - return { file, requires } + let source = fs.readFileSync(file, 'utf-8') + return { file, requires: detective(source, { mixedImports: true }) } } -export default function getModuleDependencies(entryFile) { - const rootModule = createModule(entryFile) - const modules = [rootModule] +function* _getModuleDependencies(entryFile) { + let mod = createModule(entryFile) + + yield mod // Iterate over the modules, even when new // ones are being added - for (const mdl of modules) { - mdl.requires - .filter((dep) => { - // Only track local modules, not node_modules - return dep.startsWith('./') || dep.startsWith('../') - }) - .forEach((dep) => { - try { - const basedir = path.dirname(mdl.file) - const depPath = resolve.sync(dep, { basedir }) - const depModule = createModule(depPath) + for (let dep of mod.requires) { + // Only track local modules, not node_modules + if (!dep.startsWith('./') && !dep.startsWith('../')) { + continue + } - modules.push(depModule) - } catch (_err) { - // eslint-disable-next-line no-empty - } - }) + try { + let basedir = path.dirname(mod.file) + let depPath = resolve.sync(dep, { basedir }) + yield* _getModuleDependencies(depPath) + } catch (_err) { + // eslint-disable-next-line no-empty + } } +} - return modules +export default function getModuleDependencies(entryFile) { + return Array.from(_getModuleDependencies(entryFile)) } diff --git a/src/oxide/cli/build/plugin.ts b/src/oxide/cli/build/plugin.ts index bea85a09c838..fd7ad713c67f 100644 --- a/src/oxide/cli/build/plugin.ts +++ b/src/oxide/cli/build/plugin.ts @@ -4,6 +4,7 @@ import postcssrc from 'postcss-load-config' import { lilconfig } from 'lilconfig' import loadPlugins from 'postcss-load-config/src/plugins' // Little bit scary, looking at private/internal API import loadOptions from 'postcss-load-config/src/options' // Little bit scary, looking at private/internal API +import jitiFactory from 'jiti' import tailwind from '../../../processTailwindFeatures' import { loadPostcss, loadPostcssImport, lightningcss } from './deps' @@ -17,6 +18,11 @@ import fastGlob from 'fast-glob' import { findAtConfigPath } from '../../../lib/findAtConfigPath' import log from '../../../util/log' +let jiti: ReturnType | null = null +function lazyJiti() { + return jiti ?? (jiti = jitiFactory(__filename, { interopDefault: true })) +} + /** * * @param {string} [customPostCssPath ] @@ -143,7 +149,13 @@ let state = { this.refreshConfigDependencies(configPath) } - let config = configPath ? require(configPath) : {} + let config = (() => { + try { + return configPath ? require(configPath) : {} + } catch { + return lazyJiti()(configPath) + } + })() // @ts-ignore config = resolveConfig(config, { content: { files: [] } }) From f1614c8d9ef50d507e271a30de6213cbaa932f0f Mon Sep 17 00:00:00 2001 From: Robin Malfait Date: Mon, 13 Mar 2023 17:36:42 +0100 Subject: [PATCH 03/44] use `@swc/core` instead of the built-in `babel` form `jiti` --- src/cli/build/plugin.js | 4 +++- src/oxide/cli/build/plugin.ts | 4 +++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/src/cli/build/plugin.js b/src/cli/build/plugin.js index fb2e96a4dd6e..9439be7d5fd7 100644 --- a/src/cli/build/plugin.js +++ b/src/cli/build/plugin.js @@ -7,6 +7,7 @@ import { lilconfig } from 'lilconfig' import loadPlugins from 'postcss-load-config/src/plugins' // Little bit scary, looking at private/internal API import loadOptions from 'postcss-load-config/src/options' // Little bit scary, looking at private/internal API import jitiFactory from 'jiti' +import { transform } from '@swc/core' import tailwind from '../../processTailwindFeatures' import { loadAutoprefixer, loadCssNano, loadPostcss, loadPostcssImport } from './deps' @@ -22,7 +23,8 @@ import log from '../../util/log' let jiti = null function lazyJiti() { - return jiti ?? (jiti = jitiFactory(__filename, { interopDefault: true })) + // @ts-expect-error SWC's transform function should be compatible + return jiti ?? (jiti = jitiFactory(__filename, { interopDefault: true, transform })) } /** diff --git a/src/oxide/cli/build/plugin.ts b/src/oxide/cli/build/plugin.ts index fd7ad713c67f..9682313fcf7b 100644 --- a/src/oxide/cli/build/plugin.ts +++ b/src/oxide/cli/build/plugin.ts @@ -5,6 +5,7 @@ import { lilconfig } from 'lilconfig' import loadPlugins from 'postcss-load-config/src/plugins' // Little bit scary, looking at private/internal API import loadOptions from 'postcss-load-config/src/options' // Little bit scary, looking at private/internal API import jitiFactory from 'jiti' +import { transform } from '@swc/core' import tailwind from '../../../processTailwindFeatures' import { loadPostcss, loadPostcssImport, lightningcss } from './deps' @@ -20,7 +21,8 @@ import log from '../../../util/log' let jiti: ReturnType | null = null function lazyJiti() { - return jiti ?? (jiti = jitiFactory(__filename, { interopDefault: true })) + // @ts-expect-error SWC's transform function should be compatible + return jiti ?? (jiti = jitiFactory(__filename, { interopDefault: true, transform })) } /** From dff3dc99658797c21a2ca481b18c95434ee9b09e Mon Sep 17 00:00:00 2001 From: Robin Malfait Date: Mon, 13 Mar 2023 17:48:15 +0100 Subject: [PATCH 04/44] update changelog --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 739ccfd1fd57..be254901c24c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -20,6 +20,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Add `justify-normal` and `justify-stretch` utilities ([#10560](https://github.com/tailwindlabs/tailwindcss/pull/10560)) - Add `content-normal` and `content-stretch` utilities ([#10645](https://github.com/tailwindlabs/tailwindcss/pull/10645)) - Add `line-clamp` utilities from `@tailwindcss/line-clamp` to core ([#10768](https://github.com/tailwindlabs/tailwindcss/pull/10768)) +- Enable ESM and TS based config files ([#10785](https://github.com/tailwindlabs/tailwindcss/pull/10785)) ### Fixed From de52eb7fb8a6d5883ba128644ff15900d95ac230 Mon Sep 17 00:00:00 2001 From: Robin Malfait Date: Tue, 14 Mar 2023 14:41:24 +0100 Subject: [PATCH 05/44] add `jiti` and `detective-typescript` dependencies to `stable` --- package-lock.stable.json | 791 +++++++++++++++++++++++++++++---------- package.stable.json | 18 +- 2 files changed, 617 insertions(+), 192 deletions(-) diff --git a/package-lock.stable.json b/package-lock.stable.json index 552ad21e8c46..f0fa6e37d82c 100644 --- a/package-lock.stable.json +++ b/package-lock.stable.json @@ -1,24 +1,24 @@ { "name": "tailwindcss", - "version": "3.2.6", + "version": "3.2.7", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "tailwindcss", - "version": "3.2.6", + "version": "3.2.7", "license": "MIT", "dependencies": { - "@tailwindcss/oxide": "file:./oxide-node-api-shim", "arg": "^5.0.2", "chokidar": "^3.5.3", "color-name": "^1.1.4", - "detective": "^5.2.1", + "detective-typescript": "^9.0.0", "didyoumean": "^1.2.2", "dlv": "^1.1.3", "fast-glob": "^3.2.12", "glob-parent": "^6.0.2", "is-glob": "^4.0.3", + "jiti": "^1.17.2", "lilconfig": "^2.0.6", "micromatch": "^4.0.5", "normalize-path": "^3.0.0", @@ -453,7 +453,6 @@ }, "node_modules/@babel/parser": { "version": "7.18.9", - "dev": true, "license": "MIT", "bin": { "parser": "bin/babel-parser.js" @@ -665,10 +664,14 @@ "version": "0.16.10", "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.16.10.tgz", "integrity": "sha512-RmJjQTRrO6VwUWDrzTBLmV4OJZTarYsiepLGlF2rYTVB701hSorPywPGvP6d8HCuuRibyXa5JX4s3jN2kHEtjQ==", - "cpu": ["arm"], + "cpu": [ + "arm" + ], "dev": true, "optional": true, - "os": ["android"], + "os": [ + "android" + ], "engines": { "node": ">=12" } @@ -677,10 +680,14 @@ "version": "0.16.10", "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.16.10.tgz", "integrity": "sha512-47Y+NwVKTldTlDhSgJHZ/RpvBQMUDG7eKihqaF/u6g7s0ZPz4J1vy8A3rwnnUOF2CuDn7w7Gj/QcMoWz3U3SJw==", - "cpu": ["arm64"], + "cpu": [ + "arm64" + ], "dev": true, "optional": true, - "os": ["android"], + "os": [ + "android" + ], "engines": { "node": ">=12" } @@ -689,21 +696,29 @@ "version": "0.16.10", "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.16.10.tgz", "integrity": "sha512-C4PfnrBMcuAcOurQzpF1tTtZz94IXO5JmICJJ3NFJRHbXXsQUg9RFG45KvydKqtFfBaFLCHpduUkUfXwIvGnRg==", - "cpu": ["x64"], + "cpu": [ + "x64" + ], "dev": true, "optional": true, - "os": ["android"], + "os": [ + "android" + ], "engines": { "node": ">=12" } }, "node_modules/@esbuild/darwin-arm64": { "version": "0.16.10", - "cpu": ["arm64"], + "cpu": [ + "arm64" + ], "dev": true, "license": "MIT", "optional": true, - "os": ["darwin"], + "os": [ + "darwin" + ], "engines": { "node": ">=12" } @@ -712,10 +727,14 @@ "version": "0.16.10", "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.16.10.tgz", "integrity": "sha512-OXt7ijoLuy+AjDSKQWu+KdDFMBbdeaL6wtgMKtDUXKWHiAMKHan5+R1QAG6HD4+K0nnOvEJXKHeA9QhXNAjOTQ==", - "cpu": ["x64"], + "cpu": [ + "x64" + ], "dev": true, "optional": true, - "os": ["darwin"], + "os": [ + "darwin" + ], "engines": { "node": ">=12" } @@ -724,10 +743,14 @@ "version": "0.16.10", "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.16.10.tgz", "integrity": "sha512-shSQX/3GHuspE3Uxtq5kcFG/zqC+VuMnJkqV7LczO41cIe6CQaXHD3QdMLA4ziRq/m0vZo7JdterlgbmgNIAlQ==", - "cpu": ["arm64"], + "cpu": [ + "arm64" + ], "dev": true, "optional": true, - "os": ["freebsd"], + "os": [ + "freebsd" + ], "engines": { "node": ">=12" } @@ -736,10 +759,14 @@ "version": "0.16.10", "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.16.10.tgz", "integrity": "sha512-5YVc1zdeaJGASijZmTzSO4h6uKzsQGG3pkjI6fuXvolhm3hVRhZwnHJkforaZLmzvNv5Tb7a3QL2FAVmrgySIA==", - "cpu": ["x64"], + "cpu": [ + "x64" + ], "dev": true, "optional": true, - "os": ["freebsd"], + "os": [ + "freebsd" + ], "engines": { "node": ">=12" } @@ -748,10 +775,14 @@ "version": "0.16.10", "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.16.10.tgz", "integrity": "sha512-c360287ZWI2miBnvIj23bPyVctgzeMT2kQKR+x94pVqIN44h3GF8VMEs1SFPH1UgyDr3yBbx3vowDS1SVhyVhA==", - "cpu": ["arm"], + "cpu": [ + "arm" + ], "dev": true, "optional": true, - "os": ["linux"], + "os": [ + "linux" + ], "engines": { "node": ">=12" } @@ -760,10 +791,14 @@ "version": "0.16.10", "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.16.10.tgz", "integrity": "sha512-2aqeNVxIaRfPcIaMZIFoblLh588sWyCbmj1HHCCs9WmeNWm+EIN0SmvsmPvTa/TsNZFKnxTcvkX2eszTcCqIrA==", - "cpu": ["arm64"], + "cpu": [ + "arm64" + ], "dev": true, "optional": true, - "os": ["linux"], + "os": [ + "linux" + ], "engines": { "node": ">=12" } @@ -772,10 +807,14 @@ "version": "0.16.10", "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.16.10.tgz", "integrity": "sha512-sqMIEWeyrLGU7J5RB5fTkLRIFwsgsQ7ieWXlDLEmC2HblPYGb3AucD7inw2OrKFpRPKsec1l+lssiM3+NV5aOw==", - "cpu": ["ia32"], + "cpu": [ + "ia32" + ], "dev": true, "optional": true, - "os": ["linux"], + "os": [ + "linux" + ], "engines": { "node": ">=12" } @@ -784,10 +823,14 @@ "version": "0.16.10", "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.16.10.tgz", "integrity": "sha512-FN8mZOH7531iPHM0kaFhAOqqNHoAb6r/YHW2ZIxNi0a85UBi2DO4Vuyn7t1p4UN8a4LoAnLOT1PqNgHkgBJgbA==", - "cpu": ["mips64el"], + "cpu": [ + "mips64el" + ], "dev": true, "optional": true, - "os": ["linux"], + "os": [ + "linux" + ], "engines": { "node": ">=12" } @@ -796,10 +839,14 @@ "version": "0.16.10", "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.16.10.tgz", "integrity": "sha512-Dg9RiqdvHOAWnOKIOTsIx8dFX9EDlY2IbPEY7YFzchrCiTZmMkD7jWA9UdZbNUygPjdmQBVPRCrLydReFlX9yg==", - "cpu": ["ppc64"], + "cpu": [ + "ppc64" + ], "dev": true, "optional": true, - "os": ["linux"], + "os": [ + "linux" + ], "engines": { "node": ">=12" } @@ -808,10 +855,14 @@ "version": "0.16.10", "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.16.10.tgz", "integrity": "sha512-XMqtpjwzbmlar0BJIxmzu/RZ7EWlfVfH68Vadrva0Wj5UKOdKvqskuev2jY2oPV3aoQUyXwnMbMrFmloO2GfAw==", - "cpu": ["riscv64"], + "cpu": [ + "riscv64" + ], "dev": true, "optional": true, - "os": ["linux"], + "os": [ + "linux" + ], "engines": { "node": ">=12" } @@ -820,10 +871,14 @@ "version": "0.16.10", "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.16.10.tgz", "integrity": "sha512-fu7XtnoeRNFMx8DjK3gPWpFBDM2u5ba+FYwg27SjMJwKvJr4bDyKz5c+FLXLUSSAkMAt/UL+cUbEbra+rYtUgw==", - "cpu": ["s390x"], + "cpu": [ + "s390x" + ], "dev": true, "optional": true, - "os": ["linux"], + "os": [ + "linux" + ], "engines": { "node": ">=12" } @@ -832,10 +887,14 @@ "version": "0.16.10", "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.16.10.tgz", "integrity": "sha512-61lcjVC/RldNNMUzQQdyCWjCxp9YLEQgIxErxU9XluX7juBdGKb0pvddS0vPNuCvotRbzijZ1pzII+26haWzbA==", - "cpu": ["x64"], + "cpu": [ + "x64" + ], "dev": true, "optional": true, - "os": ["linux"], + "os": [ + "linux" + ], "engines": { "node": ">=12" } @@ -844,10 +903,14 @@ "version": "0.16.10", "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.16.10.tgz", "integrity": "sha512-JeZXCX3viSA9j4HqSoygjssdqYdfHd6yCFWyfSekLbz4Ef+D2EjvsN02ZQPwYl5a5gg/ehdHgegHhlfOFP0HCA==", - "cpu": ["x64"], + "cpu": [ + "x64" + ], "dev": true, "optional": true, - "os": ["netbsd"], + "os": [ + "netbsd" + ], "engines": { "node": ">=12" } @@ -856,10 +919,14 @@ "version": "0.16.10", "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.16.10.tgz", "integrity": "sha512-3qpxQKuEVIIg8SebpXsp82OBrqjPV/OwNWmG+TnZDr3VGyChNnGMHccC1xkbxCHDQNnnXjxhMQNyHmdFJbmbRA==", - "cpu": ["x64"], + "cpu": [ + "x64" + ], "dev": true, "optional": true, - "os": ["openbsd"], + "os": [ + "openbsd" + ], "engines": { "node": ">=12" } @@ -868,10 +935,14 @@ "version": "0.16.10", "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.16.10.tgz", "integrity": "sha512-z+q0xZ+et/7etz7WoMyXTHZ1rB8PMSNp/FOqURLJLOPb3GWJ2aj4oCqFCjPwEbW1rsT7JPpxeH/DwGAWk/I1Bg==", - "cpu": ["x64"], + "cpu": [ + "x64" + ], "dev": true, "optional": true, - "os": ["sunos"], + "os": [ + "sunos" + ], "engines": { "node": ">=12" } @@ -880,10 +951,14 @@ "version": "0.16.10", "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.16.10.tgz", "integrity": "sha512-+YYu5sbQ9npkNT9Dec+tn1F/kjg6SMgr6bfi/6FpXYZvCRfu2YFPZGb+3x8K30s8eRxFpoG4sGhiSUkr1xbHEw==", - "cpu": ["arm64"], + "cpu": [ + "arm64" + ], "dev": true, "optional": true, - "os": ["win32"], + "os": [ + "win32" + ], "engines": { "node": ">=12" } @@ -892,10 +967,14 @@ "version": "0.16.10", "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.16.10.tgz", "integrity": "sha512-Aw7Fupk7XNehR1ftHGYwUteyJ2q+em/aE+fVU3YMTBN2V5A7Z4aVCSV+SvCp9HIIHZavPFBpbdP3VfjQpdf6Xg==", - "cpu": ["ia32"], + "cpu": [ + "ia32" + ], "dev": true, "optional": true, - "os": ["win32"], + "os": [ + "win32" + ], "engines": { "node": ">=12" } @@ -904,10 +983,14 @@ "version": "0.16.10", "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.16.10.tgz", "integrity": "sha512-qddWullt3sC1EIpfHvCRBq3H4g3L86DZpD6n8k2XFjFVyp01D++uNbN1hT/JRsHxTbyyemZcpwL5aRlJwc/zFw==", - "cpu": ["x64"], + "cpu": [ + "x64" + ], "dev": true, "optional": true, - "os": ["win32"], + "os": [ + "win32" + ], "engines": { "node": ">=12" } @@ -1672,11 +1755,15 @@ }, "node_modules/@swc/core-darwin-arm64": { "version": "1.3.24", - "cpu": ["arm64"], + "cpu": [ + "arm64" + ], "dev": true, "license": "Apache-2.0 AND MIT", "optional": true, - "os": ["darwin"], + "os": [ + "darwin" + ], "engines": { "node": ">=10" } @@ -1685,10 +1772,14 @@ "version": "1.3.24", "resolved": "https://registry.npmjs.org/@swc/core-darwin-x64/-/core-darwin-x64-1.3.24.tgz", "integrity": "sha512-px+5vkGtgPH0m3FkkTBHynlRdS5rRz+lK+wiXIuBZFJSySWFl6RkKbvwkD+sf0MpazQlqwlv/rTOGJBw6oDffg==", - "cpu": ["x64"], + "cpu": [ + "x64" + ], "dev": true, "optional": true, - "os": ["darwin"], + "os": [ + "darwin" + ], "engines": { "node": ">=10" } @@ -1697,10 +1788,14 @@ "version": "1.3.24", "resolved": "https://registry.npmjs.org/@swc/core-linux-arm-gnueabihf/-/core-linux-arm-gnueabihf-1.3.24.tgz", "integrity": "sha512-jLs8ZOdTV4UW4J12E143QJ4mOMONQtqgAnuhBbRuWFzQ3ny1dfoC3P1jNWAJ2Xi59XdxAIXn0PggPNH4Kh34kw==", - "cpu": ["arm"], + "cpu": [ + "arm" + ], "dev": true, "optional": true, - "os": ["linux"], + "os": [ + "linux" + ], "engines": { "node": ">=10" } @@ -1709,10 +1804,14 @@ "version": "1.3.24", "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.3.24.tgz", "integrity": "sha512-A/v0h70BekrwGpp1DlzIFGcHQ3QQ2PexXcnnuIBZeMc9gNmHlcZmg3EcwAnaUDiokhNuSUFA/wV94yk1OqmSkw==", - "cpu": ["arm64"], + "cpu": [ + "arm64" + ], "dev": true, "optional": true, - "os": ["linux"], + "os": [ + "linux" + ], "engines": { "node": ">=10" } @@ -1721,10 +1820,14 @@ "version": "1.3.24", "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.3.24.tgz", "integrity": "sha512-pbc9eArWPTiMrbpS/pJo0IiQNAKAQBcBIDjWBGP1tcw2iDXYLw4bruwz9kI/VjakbshWb8MoE4T5ClkeuULvSw==", - "cpu": ["arm64"], + "cpu": [ + "arm64" + ], "dev": true, "optional": true, - "os": ["linux"], + "os": [ + "linux" + ], "engines": { "node": ">=10" } @@ -1733,10 +1836,14 @@ "version": "1.3.24", "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.3.24.tgz", "integrity": "sha512-pP5pOLlY1xd352qo7rTlpVPUI9/9VhOd4b3Lk+LzfZDq9bTL2NDlGfyrPiwa5DGHMSzrugH56K2J68eutkxYVA==", - "cpu": ["x64"], + "cpu": [ + "x64" + ], "dev": true, "optional": true, - "os": ["linux"], + "os": [ + "linux" + ], "engines": { "node": ">=10" } @@ -1745,10 +1852,14 @@ "version": "1.3.24", "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.3.24.tgz", "integrity": "sha512-phNbP7zGp+Wcyxq1Qxlpe5KkxO7WLT2kVQUC7aDFGlVdCr+xdXsfH1MzheHtnr0kqTVQX1aiM8XXXHfFxR0oNA==", - "cpu": ["x64"], + "cpu": [ + "x64" + ], "dev": true, "optional": true, - "os": ["linux"], + "os": [ + "linux" + ], "engines": { "node": ">=10" } @@ -1757,10 +1868,14 @@ "version": "1.3.24", "resolved": "https://registry.npmjs.org/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.3.24.tgz", "integrity": "sha512-qhbiJTWAOqyR+K9xnGmCkOWSz2EmWpDBstEJCEOTc6FZiEdbiTscDmqTcMbCKaTHGu8t+6erVA4t65/Eg6uWPA==", - "cpu": ["arm64"], + "cpu": [ + "arm64" + ], "dev": true, "optional": true, - "os": ["win32"], + "os": [ + "win32" + ], "engines": { "node": ">=10" } @@ -1769,10 +1884,14 @@ "version": "1.3.24", "resolved": "https://registry.npmjs.org/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.3.24.tgz", "integrity": "sha512-JfghIlscE4Rz+Lc08lSoDh+R0cWxrISed5biogFfE6vZqhaDnw3E5Qshqw7O3pIaiq8L2u1nmzuyP581ZmpbRA==", - "cpu": ["ia32"], + "cpu": [ + "ia32" + ], "dev": true, "optional": true, - "os": ["win32"], + "os": [ + "win32" + ], "engines": { "node": ">=10" } @@ -1781,10 +1900,14 @@ "version": "1.3.24", "resolved": "https://registry.npmjs.org/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.3.24.tgz", "integrity": "sha512-3AmJRr0hwciwDBbzUNqaftvppzS8v9X/iv/Wl7YaVLBVpPfQvaZzfqLycvNMGLZb5vIKXR/u58txg3dRBGsJtw==", - "cpu": ["x64"], + "cpu": [ + "x64" + ], "dev": true, "optional": true, - "os": ["win32"], + "os": [ + "win32" + ], "engines": { "node": ">=10" } @@ -1822,10 +1945,6 @@ "@swc/core": "^1.0.46" } }, - "node_modules/@tailwindcss/oxide": { - "resolved": "oxide-node-api-shim", - "link": true - }, "node_modules/@trysound/sax": { "version": "0.2.0", "dev": true, @@ -1928,9 +2047,79 @@ "dev": true, "license": "MIT" }, + "node_modules/@typescript-eslint/types": { + "version": "5.55.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.55.0.tgz", + "integrity": "sha512-M4iRh4AG1ChrOL6Y+mETEKGeDnT7Sparn6fhZ5LtVJF1909D5O4uqK+C5NPbLmpfZ0XIIxCdwzKiijpZUOvOug==", + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/typescript-estree": { + "version": "5.55.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.55.0.tgz", + "integrity": "sha512-I7X4A9ovA8gdpWMpr7b1BN9eEbvlEtWhQvpxp/yogt48fy9Lj3iE3ild/1H3jKBBIYj5YYJmS2+9ystVhC7eaQ==", + "dependencies": { + "@typescript-eslint/types": "5.55.0", + "@typescript-eslint/visitor-keys": "5.55.0", + "debug": "^4.3.4", + "globby": "^11.1.0", + "is-glob": "^4.0.3", + "semver": "^7.3.7", + "tsutils": "^3.21.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/semver": { + "version": "7.3.8", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", + "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@typescript-eslint/visitor-keys": { + "version": "5.55.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.55.0.tgz", + "integrity": "sha512-q2dlHHwWgirKh1D3acnuApXG+VNXpEY5/AwRxDVuEQpxWaB0jCDe0jFMVMALJ3ebSfuOVE8/rMS+9ZOYGg1GWw==", + "dependencies": { + "@typescript-eslint/types": "5.55.0", + "eslint-visitor-keys": "^3.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, "node_modules/acorn": { "version": "7.4.1", + "dev": true, "license": "MIT", + "peer": true, "bin": { "acorn": "bin/acorn" }, @@ -1947,22 +2136,6 @@ "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" } }, - "node_modules/acorn-node": { - "version": "1.8.2", - "license": "Apache-2.0", - "dependencies": { - "acorn": "^7.0.0", - "acorn-walk": "^7.0.0", - "xtend": "^4.0.2" - } - }, - "node_modules/acorn-walk": { - "version": "7.2.0", - "license": "MIT", - "engines": { - "node": ">=0.4.0" - } - }, "node_modules/ajv": { "version": "6.12.6", "dev": true, @@ -2086,6 +2259,22 @@ "sprintf-js": "~1.0.2" } }, + "node_modules/array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "engines": { + "node": ">=8" + } + }, + "node_modules/ast-module-types": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ast-module-types/-/ast-module-types-3.0.0.tgz", + "integrity": "sha512-CMxMCOCS+4D+DkOQfuZf+vLrSEmY/7xtORwdxs4wtcC1wVgvk2MqFFTwQCFhvWsI4KPU9lcWXPI8DgRiz+xetQ==", + "engines": { + "node": ">=6.0" + } + }, "node_modules/autoprefixer": { "version": "10.4.13", "dev": true, @@ -3180,9 +3369,9 @@ } }, "node_modules/debug": { - "version": "4.3.2", - "dev": true, - "license": "MIT", + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", "dependencies": { "ms": "2.1.2" }, @@ -3392,10 +3581,6 @@ "node": ">=0.10.0" } }, - "node_modules/defined": { - "version": "1.0.0", - "license": "MIT" - }, "node_modules/detect-libc": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz", @@ -3416,19 +3601,18 @@ "node": ">=8" } }, - "node_modules/detective": { - "version": "5.2.1", - "license": "MIT", + "node_modules/detective-typescript": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/detective-typescript/-/detective-typescript-9.0.0.tgz", + "integrity": "sha512-lR78AugfUSBojwlSRZBeEqQ1l8LI7rbxOl1qTUnGLcjZQDjZmrZCb7R46rK8U8B5WzFvJrxa7fEBA8FoD/n5fA==", "dependencies": { - "acorn-node": "^1.8.2", - "defined": "^1.0.0", - "minimist": "^1.2.6" - }, - "bin": { - "detective": "bin/detective.js" + "@typescript-eslint/typescript-estree": "^5.13.0", + "ast-module-types": "^3.0.0", + "node-source-walk": "^5.0.0", + "typescript": "^4.5.5" }, "engines": { - "node": ">=0.8.0" + "node": "^12.20.0 || ^14.14.0 || >=16.0.0" } }, "node_modules/didyoumean": { @@ -3443,6 +3627,17 @@ "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" } }, + "node_modules/dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "dependencies": { + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/dlv": { "version": "1.1.3", "license": "MIT" @@ -3648,10 +3843,14 @@ "version": "0.16.10", "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.16.10.tgz", "integrity": "sha512-O7Pd5hLEtTg37NC73pfhUOGTjx/+aXu5YoSq3ahCxcN7Bcr2F47mv+kG5t840thnsEzrv0oB70+LJu3gUgchvg==", - "cpu": ["loong64"], + "cpu": [ + "loong64" + ], "dev": true, "optional": true, - "os": ["linux"], + "os": [ + "linux" + ], "engines": { "node": ">=12" } @@ -3805,7 +4004,6 @@ "version": "3.3.0", "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz", "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==", - "dev": true, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" } @@ -4222,7 +4420,9 @@ "version": "2.3.2", "license": "MIT", "optional": true, - "os": ["darwin"], + "os": [ + "darwin" + ], "engines": { "node": "^8.16.0 || ^10.6.0 || >=11.0.0" } @@ -4314,6 +4514,25 @@ "node": ">=4" } }, + "node_modules/globby": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "dependencies": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/got": { "version": "8.3.2", "dev": true, @@ -4443,7 +4662,6 @@ }, "node_modules/ignore": { "version": "5.2.4", - "dev": true, "license": "MIT", "engines": { "node": ">= 4" @@ -5636,6 +5854,14 @@ "@types/yargs-parser": "*" } }, + "node_modules/jiti": { + "version": "1.17.2", + "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.17.2.tgz", + "integrity": "sha512-Xf0nU8+8wuiQpLcqdb2HRyHqYwGk2Pd+F7kstyp20ZuqTyCmB9dqpX2NxaxFc1kovraa2bG6c1RL3W7XfapiZg==", + "bin": { + "jiti": "bin/jiti.js" + } + }, "node_modules/js-sdsl": { "version": "4.1.4", "dev": true, @@ -5790,10 +6016,14 @@ "version": "1.18.0", "resolved": "https://registry.npmjs.org/lightningcss-darwin-arm64/-/lightningcss-darwin-arm64-1.18.0.tgz", "integrity": "sha512-OqjydwtiNPgdH1ByIjA1YzqvDG/OMR6L3LPN6wRl1729LB0y4Mik7L06kmZaTb+pvUHr+NmDd2KCwnlrQ4zO3w==", - "cpu": ["arm64"], + "cpu": [ + "arm64" + ], "dev": true, "optional": true, - "os": ["darwin"], + "os": [ + "darwin" + ], "engines": { "node": ">= 12.0.0" }, @@ -5806,10 +6036,14 @@ "version": "1.18.0", "resolved": "https://registry.npmjs.org/lightningcss-darwin-x64/-/lightningcss-darwin-x64-1.18.0.tgz", "integrity": "sha512-mNiuPHj89/JHZmJMp+5H8EZSt6EL5DZRWJ31O6k3DrLLnRIQjXuXdDdN8kP7LoIkeWI5xvyD60CsReJm+YWYAw==", - "cpu": ["x64"], + "cpu": [ + "x64" + ], "dev": true, "optional": true, - "os": ["darwin"], + "os": [ + "darwin" + ], "engines": { "node": ">= 12.0.0" }, @@ -5822,10 +6056,14 @@ "version": "1.18.0", "resolved": "https://registry.npmjs.org/lightningcss-linux-arm-gnueabihf/-/lightningcss-linux-arm-gnueabihf-1.18.0.tgz", "integrity": "sha512-S+25JjI6601HiAVoTDXW6SqH+E94a+FHA7WQqseyNHunOgVWKcAkNEc2LJvVxgwTq6z41sDIb9/M3Z9wa9lk4A==", - "cpu": ["arm"], + "cpu": [ + "arm" + ], "dev": true, "optional": true, - "os": ["linux"], + "os": [ + "linux" + ], "engines": { "node": ">= 12.0.0" }, @@ -5838,10 +6076,14 @@ "version": "1.18.0", "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-gnu/-/lightningcss-linux-arm64-gnu-1.18.0.tgz", "integrity": "sha512-JSqh4+21dCgBecIQUet35dtE4PhhSEMyqe3y0ZNQrAJQ5kyUPSQHiw81WXnPJcOSTTpG0TyMLiC8K//+BsFGQA==", - "cpu": ["arm64"], + "cpu": [ + "arm64" + ], "dev": true, "optional": true, - "os": ["linux"], + "os": [ + "linux" + ], "engines": { "node": ">= 12.0.0" }, @@ -5854,10 +6096,14 @@ "version": "1.18.0", "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-musl/-/lightningcss-linux-arm64-musl-1.18.0.tgz", "integrity": "sha512-2FWHa8iUhShnZnqhn2wfIcK5adJat9hAAaX7etNsoXJymlliDIOFuBQEsba2KBAZSM4QqfQtvRdR7m8i0I7ybQ==", - "cpu": ["arm64"], + "cpu": [ + "arm64" + ], "dev": true, "optional": true, - "os": ["linux"], + "os": [ + "linux" + ], "engines": { "node": ">= 12.0.0" }, @@ -5870,10 +6116,14 @@ "version": "1.18.0", "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-gnu/-/lightningcss-linux-x64-gnu-1.18.0.tgz", "integrity": "sha512-plCPGQJtDZHcLVKVRLnQVF2XRsIC32WvuJhQ7fJ7F6BV98b/VZX0OlX05qUaOESD9dCDHjYSfxsgcvOKgCWh7A==", - "cpu": ["x64"], + "cpu": [ + "x64" + ], "dev": true, "optional": true, - "os": ["linux"], + "os": [ + "linux" + ], "engines": { "node": ">= 12.0.0" }, @@ -5886,10 +6136,14 @@ "version": "1.18.0", "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-musl/-/lightningcss-linux-x64-musl-1.18.0.tgz", "integrity": "sha512-na+BGtVU6fpZvOHKhnlA0XHeibkT3/46nj6vLluG3kzdJYoBKU6dIl7DSOk++8jv4ybZyFJ0aOFMMSc8g2h58A==", - "cpu": ["x64"], + "cpu": [ + "x64" + ], "dev": true, "optional": true, - "os": ["linux"], + "os": [ + "linux" + ], "engines": { "node": ">= 12.0.0" }, @@ -5902,10 +6156,14 @@ "version": "1.18.0", "resolved": "https://registry.npmjs.org/lightningcss-win32-x64-msvc/-/lightningcss-win32-x64-msvc-1.18.0.tgz", "integrity": "sha512-5qeAH4RMNy2yMNEl7e5TI6upt/7xD2ZpHWH4RkT8iJ7/6POS5mjHbXWUO9Q1hhDhqkdzGa76uAdMzEouIeCyNw==", - "cpu": ["x64"], + "cpu": [ + "x64" + ], "dev": true, "optional": true, - "os": ["win32"], + "os": [ + "win32" + ], "engines": { "node": ">= 12.0.0" }, @@ -5972,7 +6230,6 @@ }, "node_modules/lru-cache": { "version": "6.0.0", - "dev": true, "license": "ISC", "dependencies": { "yallist": "^4.0.0" @@ -6103,13 +6360,8 @@ "node": "*" } }, - "node_modules/minimist": { - "version": "1.2.6", - "license": "MIT" - }, "node_modules/ms": { "version": "2.1.2", - "dev": true, "license": "MIT" }, "node_modules/nanoid": { @@ -6142,6 +6394,17 @@ "dev": true, "license": "MIT" }, + "node_modules/node-source-walk": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/node-source-walk/-/node-source-walk-5.0.0.tgz", + "integrity": "sha512-58APXoMXpmmU+oVBJFajhTCoD8d/OGtngnVAWzIo2A8yn0IXwBzvIVIsTzoie/SrA37u+1hnpNz2HMWx/VIqlw==", + "dependencies": { + "@babel/parser": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, "node_modules/normalize-path": { "version": "3.0.0", "license": "MIT", @@ -6442,6 +6705,14 @@ "version": "1.0.7", "license": "MIT" }, + "node_modules/path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "engines": { + "node": ">=8" + } + }, "node_modules/pend": { "version": "1.2.0", "dev": true, @@ -7393,7 +7664,6 @@ }, "node_modules/slash": { "version": "3.0.0", - "dev": true, "license": "MIT", "engines": { "node": ">=8" @@ -7775,6 +8045,25 @@ "dev": true, "license": "0BSD" }, + "node_modules/tsutils": { + "version": "3.21.0", + "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", + "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", + "dependencies": { + "tslib": "^1.8.1" + }, + "engines": { + "node": ">= 6" + }, + "peerDependencies": { + "typescript": ">=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta" + } + }, + "node_modules/tsutils/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + }, "node_modules/tunnel-agent": { "version": "0.6.0", "dev": true, @@ -7808,55 +8097,79 @@ "version": "1.6.3", "resolved": "https://registry.npmjs.org/turbo-darwin-64/-/turbo-darwin-64-1.6.3.tgz", "integrity": "sha512-QmDIX0Yh1wYQl0bUS0gGWwNxpJwrzZU2GIAYt3aOKoirWA2ecnyb3R6ludcS1znfNV2MfunP+l8E3ncxUHwtjA==", - "cpu": ["x64"], + "cpu": [ + "x64" + ], "dev": true, "optional": true, - "os": ["darwin"] + "os": [ + "darwin" + ] }, "node_modules/turbo-darwin-arm64": { "version": "1.6.3", "resolved": "https://registry.npmjs.org/turbo-darwin-arm64/-/turbo-darwin-arm64-1.6.3.tgz", "integrity": "sha512-75DXhFpwE7CinBbtxTxH08EcWrxYSPFow3NaeFwsG8aymkWXF+U2aukYHJA6I12n9/dGqf7yRXzkF0S/9UtdyQ==", - "cpu": ["arm64"], + "cpu": [ + "arm64" + ], "dev": true, "optional": true, - "os": ["darwin"] + "os": [ + "darwin" + ] }, "node_modules/turbo-linux-64": { "version": "1.6.3", "resolved": "https://registry.npmjs.org/turbo-linux-64/-/turbo-linux-64-1.6.3.tgz", "integrity": "sha512-O9uc6J0yoRPWdPg9THRQi69K6E2iZ98cRHNvus05lZbcPzZTxJYkYGb5iagCmCW/pq6fL4T4oLWAd6evg2LGQA==", - "cpu": ["x64"], + "cpu": [ + "x64" + ], "dev": true, "optional": true, - "os": ["linux"] + "os": [ + "linux" + ] }, "node_modules/turbo-linux-arm64": { "version": "1.6.3", "resolved": "https://registry.npmjs.org/turbo-linux-arm64/-/turbo-linux-arm64-1.6.3.tgz", "integrity": "sha512-dCy667qqEtZIhulsRTe8hhWQNCJO0i20uHXv7KjLHuFZGCeMbWxB8rsneRoY+blf8+QNqGuXQJxak7ayjHLxiA==", - "cpu": ["arm64"], + "cpu": [ + "arm64" + ], "dev": true, "optional": true, - "os": ["linux"] + "os": [ + "linux" + ] }, "node_modules/turbo-windows-64": { "version": "1.6.3", "resolved": "https://registry.npmjs.org/turbo-windows-64/-/turbo-windows-64-1.6.3.tgz", "integrity": "sha512-lKRqwL3mrVF09b9KySSaOwetehmGknV9EcQTF7d2dxngGYYX1WXoQLjFP9YYH8ZV07oPm+RUOAKSCQuDuMNhiA==", - "cpu": ["x64"], + "cpu": [ + "x64" + ], "dev": true, "optional": true, - "os": ["win32"] + "os": [ + "win32" + ] }, "node_modules/turbo-windows-arm64": { "version": "1.6.3", "resolved": "https://registry.npmjs.org/turbo-windows-arm64/-/turbo-windows-arm64-1.6.3.tgz", "integrity": "sha512-BXY1sDPEA1DgPwuENvDCD8B7Hb0toscjus941WpL8CVd10hg9pk/MWn9CNgwDO5Q9ks0mw+liDv2EMnleEjeNA==", - "cpu": ["arm64"], + "cpu": [ + "arm64" + ], "dev": true, "optional": true, - "os": ["win32"] + "os": [ + "win32" + ] }, "node_modules/type-detect": { "version": "4.0.8", @@ -7877,6 +8190,18 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/typescript": { + "version": "4.9.5", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz", + "integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=4.2.0" + } + }, "node_modules/unbzip2-stream": { "version": "1.4.3", "dev": true, @@ -8020,6 +8345,7 @@ }, "node_modules/xtend": { "version": "4.0.2", + "dev": true, "license": "MIT", "engines": { "node": ">=0.4" @@ -8035,7 +8361,6 @@ }, "node_modules/yallist": { "version": "4.0.0", - "dev": true, "license": "ISC" }, "node_modules/yaml": { @@ -8095,10 +8420,13 @@ "version": "0.1.0", "extraneous": true, "license": "MIT", - "workspaces": ["node"] + "workspaces": [ + "node" + ] }, "oxide-node-api-shim": { "name": "@tailwindcss/oxide-shim", + "extraneous": true, "license": "MIT" }, "oxide/crates/node": { @@ -8325,8 +8653,7 @@ } }, "@babel/parser": { - "version": "7.18.9", - "dev": true + "version": "7.18.9" }, "@babel/plugin-syntax-async-generators": { "version": "7.8.4", @@ -9244,9 +9571,6 @@ "source-map-support": "^0.5.13" } }, - "@tailwindcss/oxide": { - "version": "file:oxide-node-api-shim" - }, "@trysound/sax": { "version": "0.2.0", "dev": true @@ -9332,8 +9656,48 @@ "version": "20.2.1", "dev": true }, + "@typescript-eslint/types": { + "version": "5.55.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.55.0.tgz", + "integrity": "sha512-M4iRh4AG1ChrOL6Y+mETEKGeDnT7Sparn6fhZ5LtVJF1909D5O4uqK+C5NPbLmpfZ0XIIxCdwzKiijpZUOvOug==" + }, + "@typescript-eslint/typescript-estree": { + "version": "5.55.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.55.0.tgz", + "integrity": "sha512-I7X4A9ovA8gdpWMpr7b1BN9eEbvlEtWhQvpxp/yogt48fy9Lj3iE3ild/1H3jKBBIYj5YYJmS2+9ystVhC7eaQ==", + "requires": { + "@typescript-eslint/types": "5.55.0", + "@typescript-eslint/visitor-keys": "5.55.0", + "debug": "^4.3.4", + "globby": "^11.1.0", + "is-glob": "^4.0.3", + "semver": "^7.3.7", + "tsutils": "^3.21.0" + }, + "dependencies": { + "semver": { + "version": "7.3.8", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", + "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", + "requires": { + "lru-cache": "^6.0.0" + } + } + } + }, + "@typescript-eslint/visitor-keys": { + "version": "5.55.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.55.0.tgz", + "integrity": "sha512-q2dlHHwWgirKh1D3acnuApXG+VNXpEY5/AwRxDVuEQpxWaB0jCDe0jFMVMALJ3ebSfuOVE8/rMS+9ZOYGg1GWw==", + "requires": { + "@typescript-eslint/types": "5.55.0", + "eslint-visitor-keys": "^3.3.0" + } + }, "acorn": { - "version": "7.4.1" + "version": "7.4.1", + "dev": true, + "peer": true }, "acorn-jsx": { "version": "5.3.2", @@ -9342,17 +9706,6 @@ "dev": true, "requires": {} }, - "acorn-node": { - "version": "1.8.2", - "requires": { - "acorn": "^7.0.0", - "acorn-walk": "^7.0.0", - "xtend": "^4.0.2" - } - }, - "acorn-walk": { - "version": "7.2.0" - }, "ajv": { "version": "6.12.6", "dev": true, @@ -9421,6 +9774,16 @@ "sprintf-js": "~1.0.2" } }, + "array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==" + }, + "ast-module-types": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ast-module-types/-/ast-module-types-3.0.0.tgz", + "integrity": "sha512-CMxMCOCS+4D+DkOQfuZf+vLrSEmY/7xtORwdxs4wtcC1wVgvk2MqFFTwQCFhvWsI4KPU9lcWXPI8DgRiz+xetQ==" + }, "autoprefixer": { "version": "10.4.13", "dev": true, @@ -10106,8 +10469,9 @@ "dev": true }, "debug": { - "version": "4.3.2", - "dev": true, + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", "requires": { "ms": "2.1.2" } @@ -10247,9 +10611,6 @@ "version": "4.2.2", "dev": true }, - "defined": { - "version": "1.0.0" - }, "detect-libc": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz", @@ -10260,12 +10621,15 @@ "version": "3.1.0", "dev": true }, - "detective": { - "version": "5.2.1", + "detective-typescript": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/detective-typescript/-/detective-typescript-9.0.0.tgz", + "integrity": "sha512-lR78AugfUSBojwlSRZBeEqQ1l8LI7rbxOl1qTUnGLcjZQDjZmrZCb7R46rK8U8B5WzFvJrxa7fEBA8FoD/n5fA==", "requires": { - "acorn-node": "^1.8.2", - "defined": "^1.0.0", - "minimist": "^1.2.6" + "@typescript-eslint/typescript-estree": "^5.13.0", + "ast-module-types": "^3.0.0", + "node-source-walk": "^5.0.0", + "typescript": "^4.5.5" } }, "didyoumean": { @@ -10275,6 +10639,14 @@ "version": "28.1.1", "dev": true }, + "dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "requires": { + "path-type": "^4.0.0" + } + }, "dlv": { "version": "1.1.3" }, @@ -10555,8 +10927,7 @@ "eslint-visitor-keys": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz", - "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==", - "dev": true + "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==" }, "espree": { "version": "9.4.1", @@ -10832,6 +11203,19 @@ "version": "11.12.0", "dev": true }, + "globby": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "requires": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" + } + }, "got": { "version": "8.3.2", "dev": true, @@ -10911,8 +11295,7 @@ "dev": true }, "ignore": { - "version": "5.2.4", - "dev": true + "version": "5.2.4" }, "import-fresh": { "version": "3.3.0", @@ -11780,6 +12163,11 @@ } } }, + "jiti": { + "version": "1.17.2", + "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.17.2.tgz", + "integrity": "sha512-Xf0nU8+8wuiQpLcqdb2HRyHqYwGk2Pd+F7kstyp20ZuqTyCmB9dqpX2NxaxFc1kovraa2bG6c1RL3W7XfapiZg==" + }, "js-sdsl": { "version": "4.1.4", "dev": true @@ -11973,7 +12361,6 @@ }, "lru-cache": { "version": "6.0.0", - "dev": true, "requires": { "yallist": "^4.0.0" } @@ -12052,12 +12439,8 @@ "brace-expansion": "^1.1.7" } }, - "minimist": { - "version": "1.2.6" - }, "ms": { - "version": "2.1.2", - "dev": true + "version": "2.1.2" }, "nanoid": { "version": "3.3.4" @@ -12078,6 +12461,14 @@ "version": "2.0.6", "dev": true }, + "node-source-walk": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/node-source-walk/-/node-source-walk-5.0.0.tgz", + "integrity": "sha512-58APXoMXpmmU+oVBJFajhTCoD8d/OGtngnVAWzIo2A8yn0IXwBzvIVIsTzoie/SrA37u+1hnpNz2HMWx/VIqlw==", + "requires": { + "@babel/parser": "^7.0.0" + } + }, "normalize-path": { "version": "3.0.0" }, @@ -12255,6 +12646,11 @@ "path-parse": { "version": "1.0.7" }, + "path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==" + }, "pend": { "version": "1.2.0", "dev": true @@ -12764,8 +13160,7 @@ "dev": true }, "slash": { - "version": "3.0.0", - "dev": true + "version": "3.0.0" }, "sort-keys": { "version": "1.1.2", @@ -13008,6 +13403,21 @@ "version": "2.4.1", "dev": true }, + "tsutils": { + "version": "3.21.0", + "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", + "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", + "requires": { + "tslib": "^1.8.1" + }, + "dependencies": { + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + } + } + }, "tunnel-agent": { "version": "0.6.0", "dev": true, @@ -13079,6 +13489,11 @@ "version": "0.20.2", "dev": true }, + "typescript": { + "version": "4.9.5", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz", + "integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==" + }, "unbzip2-stream": { "version": "1.4.3", "dev": true, @@ -13165,15 +13580,15 @@ } }, "xtend": { - "version": "4.0.2" + "version": "4.0.2", + "dev": true }, "y18n": { "version": "5.0.8", "dev": true }, "yallist": { - "version": "4.0.0", - "dev": true + "version": "4.0.0" }, "yaml": { "version": "1.10.2" diff --git a/package.stable.json b/package.stable.json index 3c2efc25fd19..4b5d8acd1665 100644 --- a/package.stable.json +++ b/package.stable.json @@ -73,12 +73,13 @@ "arg": "^5.0.2", "chokidar": "^3.5.3", "color-name": "^1.1.4", - "detective": "^5.2.1", + "detective-typescript": "^9.0.0", "didyoumean": "^1.2.2", "dlv": "^1.1.3", "fast-glob": "^3.2.12", "glob-parent": "^6.0.2", "is-glob": "^4.0.3", + "jiti": "^1.17.2", "lilconfig": "^2.0.6", "micromatch": "^4.0.5", "normalize-path": "^3.0.0", @@ -94,17 +95,26 @@ "quick-lru": "^5.1.1", "resolve": "^1.22.1" }, - "browserslist": ["> 1%", "not edge <= 18", "not ie 11", "not op_mini all"], + "browserslist": [ + "> 1%", + "not edge <= 18", + "not ie 11", + "not op_mini all" + ], "jest": { "testTimeout": 30000, - "setupFilesAfterEnv": ["/jest/customMatchers.js"], + "setupFilesAfterEnv": [ + "/jest/customMatchers.js" + ], "testPathIgnorePatterns": [ "/node_modules/", "/integrations/", "/standalone-cli/", "\\.test\\.skip\\.js$" ], - "transformIgnorePatterns": ["node_modules/(?!lightningcss)"], + "transformIgnorePatterns": [ + "node_modules/(?!lightningcss)" + ], "transform": { "\\.js$": "@swc/jest", "\\.ts$": "@swc/jest" From ca82433186f2435d1a9486bf232cace845504065 Mon Sep 17 00:00:00 2001 From: Robin Malfait Date: Tue, 14 Mar 2023 15:12:57 +0100 Subject: [PATCH 06/44] use `sucrase` to transform the configs --- package-lock.json | 261 ++++++++++++++++++++++++++-------- package.json | 3 +- src/cli/build/plugin.js | 15 +- src/oxide/cli/build/plugin.ts | 15 +- 4 files changed, 226 insertions(+), 68 deletions(-) diff --git a/package-lock.json b/package-lock.json index 2948fef51ae0..f40cf1db2d97 100644 --- a/package-lock.json +++ b/package-lock.json @@ -39,7 +39,8 @@ "postcss-selector-parser": "^6.0.11", "postcss-value-parser": "^4.2.0", "quick-lru": "^5.1.1", - "resolve": "^1.22.1" + "resolve": "^1.22.1", + "sucrase": "^3.29.0" }, "bin": { "tailwind": "lib/cli.js", @@ -4739,6 +4740,11 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, + "node_modules/any-promise": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", + "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==" + }, "node_modules/anymatch": { "version": "3.1.2", "license": "ISC", @@ -5041,7 +5047,6 @@ }, "node_modules/balanced-match": { "version": "1.0.0", - "dev": true, "license": "MIT" }, "node_modules/base": { @@ -5325,7 +5330,6 @@ }, "node_modules/brace-expansion": { "version": "1.1.11", - "dev": true, "license": "MIT", "dependencies": { "balanced-match": "^1.0.0", @@ -6072,7 +6076,6 @@ }, "node_modules/concat-map": { "version": "0.0.1", - "dev": true, "license": "MIT" }, "node_modules/concat-stream": { @@ -8026,7 +8029,6 @@ }, "node_modules/fs.realpath": { "version": "1.0.0", - "dev": true, "license": "ISC" }, "node_modules/fsevents": { @@ -8132,7 +8134,6 @@ }, "node_modules/glob": { "version": "7.1.6", - "dev": true, "license": "ISC", "dependencies": { "fs.realpath": "^1.0.0", @@ -8622,7 +8623,6 @@ }, "node_modules/inflight": { "version": "1.0.6", - "dev": true, "license": "ISC", "dependencies": { "once": "^1.3.0", @@ -8631,7 +8631,6 @@ }, "node_modules/inherits": { "version": "2.0.4", - "dev": true, "license": "ISC" }, "node_modules/interpret": { @@ -10277,7 +10276,6 @@ }, "node_modules/lines-and-columns": { "version": "1.2.4", - "dev": true, "license": "MIT" }, "node_modules/lmdb": { @@ -10645,7 +10643,6 @@ }, "node_modules/minimatch": { "version": "3.1.2", - "dev": true, "license": "ISC", "dependencies": { "brace-expansion": "^1.1.7" @@ -10766,6 +10763,16 @@ "@msgpackr-extract/msgpackr-extract-win32-x64": "2.2.0" } }, + "node_modules/mz": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", + "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", + "dependencies": { + "any-promise": "^1.0.0", + "object-assign": "^4.0.1", + "thenify-all": "^1.0.0" + } + }, "node_modules/nan": { "version": "2.17.0", "resolved": "https://registry.npmjs.org/nan/-/nan-2.17.0.tgz", @@ -10991,7 +10998,6 @@ }, "node_modules/object-assign": { "version": "4.1.1", - "dev": true, "license": "MIT", "engines": { "node": ">=0.10.0" @@ -11115,7 +11121,6 @@ }, "node_modules/once": { "version": "1.4.0", - "dev": true, "license": "ISC", "dependencies": { "wrappy": "1" @@ -11409,7 +11414,6 @@ }, "node_modules/path-is-absolute": { "version": "1.0.1", - "dev": true, "license": "MIT", "engines": { "node": ">=0.10.0" @@ -11489,7 +11493,6 @@ "version": "4.0.5", "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.5.tgz", "integrity": "sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ==", - "dev": true, "engines": { "node": ">= 6" } @@ -13715,6 +13718,34 @@ "postcss": "^8.2.15" } }, + "node_modules/sucrase": { + "version": "3.29.0", + "resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.29.0.tgz", + "integrity": "sha512-bZPAuGA5SdFHuzqIhTAqt9fvNEo9rESqXIG3oiKdF8K4UmkQxC4KlNL3lVyAErXp+mPvUqZ5l13qx6TrDIGf3A==", + "dependencies": { + "commander": "^4.0.0", + "glob": "7.1.6", + "lines-and-columns": "^1.1.6", + "mz": "^2.7.0", + "pirates": "^4.0.1", + "ts-interface-checker": "^0.1.9" + }, + "bin": { + "sucrase": "bin/sucrase", + "sucrase-node": "bin/sucrase-node" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/sucrase/node_modules/commander": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", + "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", + "engines": { + "node": ">= 6" + } + }, "node_modules/supports-color": { "version": "7.2.0", "dev": true, @@ -13907,6 +13938,25 @@ "integrity": "sha512-89Gi5raiWA3QZ4b2ePcEwswC3me9JIg+ToSgtE0JWeCynLnLxNr/f9G+xfo9K+Oj4AFdom8YNJjibIARTJmapQ==", "dev": true }, + "node_modules/thenify": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz", + "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==", + "dependencies": { + "any-promise": "^1.0.0" + } + }, + "node_modules/thenify-all": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz", + "integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==", + "dependencies": { + "thenify": ">= 3.1.0 < 4" + }, + "engines": { + "node": ">=0.8" + } + }, "node_modules/through2": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", @@ -14063,6 +14113,11 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/ts-interface-checker": { + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz", + "integrity": "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==" + }, "node_modules/tslib": { "version": "2.4.1", "dev": true, @@ -15570,7 +15625,6 @@ }, "node_modules/wrappy": { "version": "1.0.2", - "dev": true, "license": "ISC" }, "node_modules/write-file-atomic": { @@ -18919,6 +18973,11 @@ "color-convert": "^2.0.1" } }, + "any-promise": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", + "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==" + }, "anymatch": { "version": "3.1.2", "requires": { @@ -19134,8 +19193,7 @@ } }, "balanced-match": { - "version": "1.0.0", - "dev": true + "version": "1.0.0" }, "base": { "version": "0.11.2", @@ -19350,7 +19408,6 @@ }, "brace-expansion": { "version": "1.1.11", - "dev": true, "requires": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -19925,8 +19982,7 @@ "dev": true }, "concat-map": { - "version": "0.0.1", - "dev": true + "version": "0.0.1" }, "concat-stream": { "version": "1.6.2", @@ -21351,8 +21407,7 @@ } }, "fs.realpath": { - "version": "1.0.0", - "dev": true + "version": "1.0.0" }, "fsevents": { "version": "2.3.2", @@ -21420,7 +21475,6 @@ }, "glob": { "version": "7.1.6", - "dev": true, "requires": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -21739,15 +21793,13 @@ }, "inflight": { "version": "1.0.6", - "dev": true, "requires": { "once": "^1.3.0", "wrappy": "1" } }, "inherits": { - "version": "2.0.4", - "dev": true + "version": "2.0.4" }, "interpret": { "version": "2.2.0", @@ -22990,8 +23042,7 @@ "integrity": "sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==" }, "lines-and-columns": { - "version": "1.2.4", - "dev": true + "version": "1.2.4" }, "lmdb": { "version": "2.5.2", @@ -23272,7 +23323,6 @@ }, "minimatch": { "version": "3.1.2", - "dev": true, "requires": { "brace-expansion": "^1.1.7" } @@ -23371,6 +23421,16 @@ "node-gyp-build-optional-packages": "5.0.3" } }, + "mz": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", + "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", + "requires": { + "any-promise": "^1.0.0", + "object-assign": "^4.0.1", + "thenify-all": "^1.0.0" + } + }, "nan": { "version": "2.17.0", "resolved": "https://registry.npmjs.org/nan/-/nan-2.17.0.tgz", @@ -23540,8 +23600,7 @@ "dev": true }, "object-assign": { - "version": "4.1.1", - "dev": true + "version": "4.1.1" }, "object-copy": { "version": "0.1.0", @@ -23634,7 +23693,6 @@ }, "once": { "version": "1.4.0", - "dev": true, "requires": { "wrappy": "1" } @@ -23845,8 +23903,7 @@ "dev": true }, "path-is-absolute": { - "version": "1.0.1", - "dev": true + "version": "1.0.1" }, "path-key": { "version": "3.1.1", @@ -23891,8 +23948,7 @@ "pirates": { "version": "4.0.5", "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.5.tgz", - "integrity": "sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ==", - "dev": true + "integrity": "sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ==" }, "pkg-dir": { "version": "4.2.0", @@ -25454,6 +25510,26 @@ "postcss-selector-parser": "^6.0.4" } }, + "sucrase": { + "version": "3.29.0", + "resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.29.0.tgz", + "integrity": "sha512-bZPAuGA5SdFHuzqIhTAqt9fvNEo9rESqXIG3oiKdF8K4UmkQxC4KlNL3lVyAErXp+mPvUqZ5l13qx6TrDIGf3A==", + "requires": { + "commander": "^4.0.0", + "glob": "7.1.6", + "lines-and-columns": "^1.1.6", + "mz": "^2.7.0", + "pirates": "^4.0.1", + "ts-interface-checker": "^0.1.9" + }, + "dependencies": { + "commander": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", + "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==" + } + } + }, "supports-color": { "version": "7.2.0", "dev": true, @@ -25532,6 +25608,7 @@ "resolve": "^1.22.1", "rimraf": "^4.1.2", "source-map-js": "^1.0.2", + "sucrase": "^3.29.0", "turbo": "^1.8.3" }, "dependencies": { @@ -28767,6 +28844,11 @@ "color-convert": "^2.0.1" } }, + "any-promise": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", + "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==" + }, "anymatch": { "version": "3.1.2", "requires": { @@ -28982,8 +29064,7 @@ } }, "balanced-match": { - "version": "1.0.0", - "dev": true + "version": "1.0.0" }, "base": { "version": "0.11.2", @@ -29198,7 +29279,6 @@ }, "brace-expansion": { "version": "1.1.11", - "dev": true, "requires": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -29773,8 +29853,7 @@ "dev": true }, "concat-map": { - "version": "0.0.1", - "dev": true + "version": "0.0.1" }, "concat-stream": { "version": "1.6.2", @@ -31199,8 +31278,7 @@ } }, "fs.realpath": { - "version": "1.0.0", - "dev": true + "version": "1.0.0" }, "fsevents": { "version": "2.3.2", @@ -31268,7 +31346,6 @@ }, "glob": { "version": "7.1.6", - "dev": true, "requires": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -31587,15 +31664,13 @@ }, "inflight": { "version": "1.0.6", - "dev": true, "requires": { "once": "^1.3.0", "wrappy": "1" } }, "inherits": { - "version": "2.0.4", - "dev": true + "version": "2.0.4" }, "interpret": { "version": "2.2.0", @@ -32838,8 +32913,7 @@ "integrity": "sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==" }, "lines-and-columns": { - "version": "1.2.4", - "dev": true + "version": "1.2.4" }, "lmdb": { "version": "2.5.2", @@ -33120,7 +33194,6 @@ }, "minimatch": { "version": "3.1.2", - "dev": true, "requires": { "brace-expansion": "^1.1.7" } @@ -33219,6 +33292,16 @@ "node-gyp-build-optional-packages": "5.0.3" } }, + "mz": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", + "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", + "requires": { + "any-promise": "^1.0.0", + "object-assign": "^4.0.1", + "thenify-all": "^1.0.0" + } + }, "nan": { "version": "2.17.0", "resolved": "https://registry.npmjs.org/nan/-/nan-2.17.0.tgz", @@ -33388,8 +33471,7 @@ "dev": true }, "object-assign": { - "version": "4.1.1", - "dev": true + "version": "4.1.1" }, "object-copy": { "version": "0.1.0", @@ -33482,7 +33564,6 @@ }, "once": { "version": "1.4.0", - "dev": true, "requires": { "wrappy": "1" } @@ -33693,8 +33774,7 @@ "dev": true }, "path-is-absolute": { - "version": "1.0.1", - "dev": true + "version": "1.0.1" }, "path-key": { "version": "3.1.1", @@ -33739,8 +33819,7 @@ "pirates": { "version": "4.0.5", "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.5.tgz", - "integrity": "sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ==", - "dev": true + "integrity": "sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ==" }, "pkg-dir": { "version": "4.2.0", @@ -35302,6 +35381,26 @@ "postcss-selector-parser": "^6.0.4" } }, + "sucrase": { + "version": "3.29.0", + "resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.29.0.tgz", + "integrity": "sha512-bZPAuGA5SdFHuzqIhTAqt9fvNEo9rESqXIG3oiKdF8K4UmkQxC4KlNL3lVyAErXp+mPvUqZ5l13qx6TrDIGf3A==", + "requires": { + "commander": "^4.0.0", + "glob": "7.1.6", + "lines-and-columns": "^1.1.6", + "mz": "^2.7.0", + "pirates": "^4.0.1", + "ts-interface-checker": "^0.1.9" + }, + "dependencies": { + "commander": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", + "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==" + } + } + }, "supports-color": { "version": "7.2.0", "dev": true, @@ -35439,6 +35538,22 @@ "integrity": "sha512-89Gi5raiWA3QZ4b2ePcEwswC3me9JIg+ToSgtE0JWeCynLnLxNr/f9G+xfo9K+Oj4AFdom8YNJjibIARTJmapQ==", "dev": true }, + "thenify": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz", + "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==", + "requires": { + "any-promise": "^1.0.0" + } + }, + "thenify-all": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz", + "integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==", + "requires": { + "thenify": ">= 3.1.0 < 4" + } + }, "through2": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", @@ -35561,6 +35676,11 @@ } } }, + "ts-interface-checker": { + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz", + "integrity": "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==" + }, "tslib": { "version": "2.4.1", "dev": true @@ -36598,8 +36718,7 @@ } }, "wrappy": { - "version": "1.0.2", - "dev": true + "version": "1.0.2" }, "write-file-atomic": { "version": "4.0.2", @@ -36768,6 +36887,22 @@ "integrity": "sha512-89Gi5raiWA3QZ4b2ePcEwswC3me9JIg+ToSgtE0JWeCynLnLxNr/f9G+xfo9K+Oj4AFdom8YNJjibIARTJmapQ==", "dev": true }, + "thenify": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz", + "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==", + "requires": { + "any-promise": "^1.0.0" + } + }, + "thenify-all": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz", + "integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==", + "requires": { + "thenify": ">= 3.1.0 < 4" + } + }, "through2": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", @@ -36890,6 +37025,11 @@ } } }, + "ts-interface-checker": { + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz", + "integrity": "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==" + }, "tslib": { "version": "2.4.1", "dev": true @@ -37927,8 +38067,7 @@ } }, "wrappy": { - "version": "1.0.2", - "dev": true + "version": "1.0.2" }, "write-file-atomic": { "version": "4.0.2", diff --git a/package.json b/package.json index fd85e45d25a7..86d2813e83c5 100644 --- a/package.json +++ b/package.json @@ -96,7 +96,8 @@ "postcss-selector-parser": "^6.0.11", "postcss-value-parser": "^4.2.0", "quick-lru": "^5.1.1", - "resolve": "^1.22.1" + "resolve": "^1.22.1", + "sucrase": "^3.29.0" }, "browserslist": [ "> 1%", diff --git a/src/cli/build/plugin.js b/src/cli/build/plugin.js index 9439be7d5fd7..5e67de90fd36 100644 --- a/src/cli/build/plugin.js +++ b/src/cli/build/plugin.js @@ -7,7 +7,7 @@ import { lilconfig } from 'lilconfig' import loadPlugins from 'postcss-load-config/src/plugins' // Little bit scary, looking at private/internal API import loadOptions from 'postcss-load-config/src/options' // Little bit scary, looking at private/internal API import jitiFactory from 'jiti' -import { transform } from '@swc/core' +import { transform } from 'sucrase' import tailwind from '../../processTailwindFeatures' import { loadAutoprefixer, loadCssNano, loadPostcss, loadPostcssImport } from './deps' @@ -23,8 +23,17 @@ import log from '../../util/log' let jiti = null function lazyJiti() { - // @ts-expect-error SWC's transform function should be compatible - return jiti ?? (jiti = jitiFactory(__filename, { interopDefault: true, transform })) + return ( + jiti ?? + (jiti = jitiFactory(__filename, { + interopDefault: true, + transform: (opts) => { + return transform(opts.source, { + transforms: ['typescript', 'imports'], + }) + }, + })) + ) } /** diff --git a/src/oxide/cli/build/plugin.ts b/src/oxide/cli/build/plugin.ts index 9682313fcf7b..a53998a53c98 100644 --- a/src/oxide/cli/build/plugin.ts +++ b/src/oxide/cli/build/plugin.ts @@ -5,7 +5,7 @@ import { lilconfig } from 'lilconfig' import loadPlugins from 'postcss-load-config/src/plugins' // Little bit scary, looking at private/internal API import loadOptions from 'postcss-load-config/src/options' // Little bit scary, looking at private/internal API import jitiFactory from 'jiti' -import { transform } from '@swc/core' +import { transform } from 'sucrase' import tailwind from '../../../processTailwindFeatures' import { loadPostcss, loadPostcssImport, lightningcss } from './deps' @@ -21,8 +21,17 @@ import log from '../../../util/log' let jiti: ReturnType | null = null function lazyJiti() { - // @ts-expect-error SWC's transform function should be compatible - return jiti ?? (jiti = jitiFactory(__filename, { interopDefault: true, transform })) + return ( + jiti ?? + (jiti = jitiFactory(__filename, { + interopDefault: true, + transform: (opts) => { + return transform(opts.source, { + transforms: ['typescript', 'imports'], + }) + }, + })) + ) } /** From 44fffbb284138872467ae0c1e70dd9f04cb03215 Mon Sep 17 00:00:00 2001 From: Robin Malfait Date: Tue, 14 Mar 2023 15:14:00 +0100 Subject: [PATCH 07/44] add `sucrase` dependency to `stable` engine --- package-lock.stable.json | 172 ++++++++++++++++++++++++++++++--------- package.stable.json | 3 +- 2 files changed, 136 insertions(+), 39 deletions(-) diff --git a/package-lock.stable.json b/package-lock.stable.json index f0fa6e37d82c..0561cd3a167d 100644 --- a/package-lock.stable.json +++ b/package-lock.stable.json @@ -32,7 +32,8 @@ "postcss-selector-parser": "^6.0.11", "postcss-value-parser": "^4.2.0", "quick-lru": "^5.1.1", - "resolve": "^1.22.1" + "resolve": "^1.22.1", + "sucrase": "^3.29.0" }, "bin": { "tailwind": "lib/cli.js", @@ -2198,6 +2199,11 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, + "node_modules/any-promise": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", + "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==" + }, "node_modules/anymatch": { "version": "3.1.2", "license": "ISC", @@ -2395,7 +2401,6 @@ }, "node_modules/balanced-match": { "version": "1.0.0", - "dev": true, "license": "MIT" }, "node_modules/base64-js": { @@ -2723,7 +2728,6 @@ }, "node_modules/brace-expansion": { "version": "1.1.11", - "dev": true, "license": "MIT", "dependencies": { "balanced-match": "^1.0.0", @@ -3105,7 +3109,6 @@ }, "node_modules/concat-map": { "version": "0.0.1", - "dev": true, "license": "MIT" }, "node_modules/concurrently": { @@ -4413,7 +4416,6 @@ }, "node_modules/fs.realpath": { "version": "1.0.0", - "dev": true, "license": "ISC" }, "node_modules/fsevents": { @@ -4479,7 +4481,6 @@ }, "node_modules/glob": { "version": "7.1.6", - "dev": true, "license": "ISC", "dependencies": { "fs.realpath": "^1.0.0", @@ -4726,7 +4727,6 @@ }, "node_modules/inflight": { "version": "1.0.6", - "dev": true, "license": "ISC", "dependencies": { "once": "^1.3.0", @@ -4735,7 +4735,6 @@ }, "node_modules/inherits": { "version": "2.0.4", - "dev": true, "license": "ISC" }, "node_modules/ini": { @@ -6181,7 +6180,6 @@ }, "node_modules/lines-and-columns": { "version": "1.2.4", - "dev": true, "license": "MIT" }, "node_modules/locate-path": { @@ -6351,7 +6349,6 @@ }, "node_modules/minimatch": { "version": "3.1.2", - "dev": true, "license": "ISC", "dependencies": { "brace-expansion": "^1.1.7" @@ -6364,6 +6361,16 @@ "version": "2.1.2", "license": "MIT" }, + "node_modules/mz": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", + "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", + "dependencies": { + "any-promise": "^1.0.0", + "object-assign": "^4.0.1", + "thenify-all": "^1.0.0" + } + }, "node_modules/nanoid": { "version": "3.3.4", "license": "MIT", @@ -6475,7 +6482,6 @@ }, "node_modules/object-assign": { "version": "4.1.1", - "dev": true, "license": "MIT", "engines": { "node": ">=0.10.0" @@ -6490,7 +6496,6 @@ }, "node_modules/once": { "version": "1.4.0", - "dev": true, "license": "ISC", "dependencies": { "wrappy": "1" @@ -6687,7 +6692,6 @@ }, "node_modules/path-is-absolute": { "version": "1.0.1", - "dev": true, "license": "MIT", "engines": { "node": ">=0.10.0" @@ -6760,7 +6764,6 @@ }, "node_modules/pirates": { "version": "4.0.4", - "dev": true, "license": "MIT", "engines": { "node": ">= 6" @@ -7879,6 +7882,34 @@ "postcss": "^8.2.15" } }, + "node_modules/sucrase": { + "version": "3.29.0", + "resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.29.0.tgz", + "integrity": "sha512-bZPAuGA5SdFHuzqIhTAqt9fvNEo9rESqXIG3oiKdF8K4UmkQxC4KlNL3lVyAErXp+mPvUqZ5l13qx6TrDIGf3A==", + "dependencies": { + "commander": "^4.0.0", + "glob": "7.1.6", + "lines-and-columns": "^1.1.6", + "mz": "^2.7.0", + "pirates": "^4.0.1", + "ts-interface-checker": "^0.1.9" + }, + "bin": { + "sucrase": "bin/sucrase", + "sucrase-node": "bin/sucrase-node" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/sucrase/node_modules/commander": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", + "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", + "engines": { + "node": ">= 6" + } + }, "node_modules/supports-color": { "version": "7.2.0", "dev": true, @@ -7982,6 +8013,25 @@ "dev": true, "license": "MIT" }, + "node_modules/thenify": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz", + "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==", + "dependencies": { + "any-promise": "^1.0.0" + } + }, + "node_modules/thenify-all": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz", + "integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==", + "dependencies": { + "thenify": ">= 3.1.0 < 4" + }, + "engines": { + "node": ">=0.8" + } + }, "node_modules/through": { "version": "2.3.8", "dev": true, @@ -8040,6 +8090,11 @@ "node": ">=0.8.0" } }, + "node_modules/ts-interface-checker": { + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz", + "integrity": "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==" + }, "node_modules/tslib": { "version": "2.4.1", "dev": true, @@ -8328,7 +8383,6 @@ }, "node_modules/wrappy": { "version": "1.0.2", - "dev": true, "license": "ISC" }, "node_modules/write-file-atomic": { @@ -9740,6 +9794,11 @@ "color-convert": "^2.0.1" } }, + "any-promise": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", + "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==" + }, "anymatch": { "version": "3.1.2", "requires": { @@ -9857,8 +9916,7 @@ } }, "balanced-match": { - "version": "1.0.0", - "dev": true + "version": "1.0.0" }, "base64-js": { "version": "1.5.1", @@ -10073,7 +10131,6 @@ }, "brace-expansion": { "version": "1.1.11", - "dev": true, "requires": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -10309,8 +10366,7 @@ "dev": true }, "concat-map": { - "version": "0.0.1", - "dev": true + "version": "0.0.1" }, "concurrently": { "version": "7.5.0", @@ -11148,8 +11204,7 @@ "dev": true }, "fs.realpath": { - "version": "1.0.0", - "dev": true + "version": "1.0.0" }, "fsevents": { "version": "2.3.2", @@ -11183,7 +11238,6 @@ }, "glob": { "version": "7.1.6", - "dev": true, "requires": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -11329,15 +11383,13 @@ }, "inflight": { "version": "1.0.6", - "dev": true, "requires": { "once": "^1.3.0", "wrappy": "1" } }, "inherits": { - "version": "2.0.4", - "dev": true + "version": "2.0.4" }, "ini": { "version": "1.3.8", @@ -12325,8 +12377,7 @@ "version": "2.0.6" }, "lines-and-columns": { - "version": "1.2.4", - "dev": true + "version": "1.2.4" }, "locate-path": { "version": "5.0.0", @@ -12434,7 +12485,6 @@ }, "minimatch": { "version": "3.1.2", - "dev": true, "requires": { "brace-expansion": "^1.1.7" } @@ -12442,6 +12492,16 @@ "ms": { "version": "2.1.2" }, + "mz": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", + "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", + "requires": { + "any-promise": "^1.0.0", + "object-assign": "^4.0.1", + "thenify-all": "^1.0.0" + } + }, "nanoid": { "version": "3.3.4" }, @@ -12509,15 +12569,13 @@ } }, "object-assign": { - "version": "4.1.1", - "dev": true + "version": "4.1.1" }, "object-hash": { "version": "3.0.0" }, "once": { "version": "1.4.0", - "dev": true, "requires": { "wrappy": "1" } @@ -12636,8 +12694,7 @@ "dev": true }, "path-is-absolute": { - "version": "1.0.1", - "dev": true + "version": "1.0.1" }, "path-key": { "version": "3.1.1", @@ -12676,8 +12733,7 @@ } }, "pirates": { - "version": "4.0.4", - "dev": true + "version": "4.0.4" }, "pkg-dir": { "version": "4.2.0", @@ -13297,6 +13353,26 @@ "postcss-selector-parser": "^6.0.4" } }, + "sucrase": { + "version": "3.29.0", + "resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.29.0.tgz", + "integrity": "sha512-bZPAuGA5SdFHuzqIhTAqt9fvNEo9rESqXIG3oiKdF8K4UmkQxC4KlNL3lVyAErXp+mPvUqZ5l13qx6TrDIGf3A==", + "requires": { + "commander": "^4.0.0", + "glob": "7.1.6", + "lines-and-columns": "^1.1.6", + "mz": "^2.7.0", + "pirates": "^4.0.1", + "ts-interface-checker": "^0.1.9" + }, + "dependencies": { + "commander": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", + "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==" + } + } + }, "supports-color": { "version": "7.2.0", "dev": true, @@ -13362,6 +13438,22 @@ "version": "0.2.0", "dev": true }, + "thenify": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz", + "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==", + "requires": { + "any-promise": "^1.0.0" + } + }, + "thenify-all": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz", + "integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==", + "requires": { + "thenify": ">= 3.1.0 < 4" + } + }, "through": { "version": "2.3.8", "dev": true @@ -13399,6 +13491,11 @@ } } }, + "ts-interface-checker": { + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz", + "integrity": "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==" + }, "tslib": { "version": "2.4.1", "dev": true @@ -13568,8 +13665,7 @@ } }, "wrappy": { - "version": "1.0.2", - "dev": true + "version": "1.0.2" }, "write-file-atomic": { "version": "4.0.1", diff --git a/package.stable.json b/package.stable.json index 4b5d8acd1665..0f40e61ca4d4 100644 --- a/package.stable.json +++ b/package.stable.json @@ -93,7 +93,8 @@ "postcss-selector-parser": "^6.0.11", "postcss-value-parser": "^4.2.0", "quick-lru": "^5.1.1", - "resolve": "^1.22.1" + "resolve": "^1.22.1", + "sucrase": "^3.29.0" }, "browserslist": [ "> 1%", From ff9540c883d9e67b9f34d8a63f59584403339bc8 Mon Sep 17 00:00:00 2001 From: Robin Malfait Date: Tue, 14 Mar 2023 15:50:01 +0100 Subject: [PATCH 08/44] make loading the config easier --- src/lib/load-config.ts | 45 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 45 insertions(+) create mode 100644 src/lib/load-config.ts diff --git a/src/lib/load-config.ts b/src/lib/load-config.ts new file mode 100644 index 000000000000..9db17e2533cb --- /dev/null +++ b/src/lib/load-config.ts @@ -0,0 +1,45 @@ +import jitiFactory from 'jiti' +import { transform } from 'sucrase' +import { Config } from '../../types/config' +import getModuleDependencies from './getModuleDependencies' + +let jiti: ReturnType | null = null +function lazyJiti() { + return ( + jiti ?? + (jiti = jitiFactory(__filename, { + interopDefault: true, + transform: (opts) => { + return transform(opts.source, { + transforms: ['typescript', 'imports'], + }) + }, + })) + ) +} + +export function load(path: string) { + let config: Config = (() => { + try { + return path ? require(path) : {} + } catch { + return lazyJiti()(path) + } + })() + + let deps = dependencies(path) + + return { + config, + dependencies: deps, + dispose() { + for (let file of deps) { + delete require.cache[require.resolve(file)] + } + }, + } +} + +export function dependencies(path: string) { + return new Set(getModuleDependencies(path).map(({ file }) => file)) +} From 96f683e3f57e51b21ff06b7f36cd232242947b9b Mon Sep 17 00:00:00 2001 From: Robin Malfait Date: Tue, 14 Mar 2023 15:50:21 +0100 Subject: [PATCH 09/44] use abstracted loading config utils --- src/cli/build/plugin.js | 53 +++++++-------------------------- src/cli/build/watching.js | 2 +- src/oxide/cli/build/plugin.ts | 53 +++++++-------------------------- src/oxide/cli/build/watching.ts | 2 +- 4 files changed, 22 insertions(+), 88 deletions(-) diff --git a/src/cli/build/plugin.js b/src/cli/build/plugin.js index 5e67de90fd36..bfe30ee8988c 100644 --- a/src/cli/build/plugin.js +++ b/src/cli/build/plugin.js @@ -6,35 +6,18 @@ import postcssrc from 'postcss-load-config' import { lilconfig } from 'lilconfig' import loadPlugins from 'postcss-load-config/src/plugins' // Little bit scary, looking at private/internal API import loadOptions from 'postcss-load-config/src/options' // Little bit scary, looking at private/internal API -import jitiFactory from 'jiti' -import { transform } from 'sucrase' import tailwind from '../../processTailwindFeatures' import { loadAutoprefixer, loadCssNano, loadPostcss, loadPostcssImport } from './deps' import { formatNodes, drainStdin, outputFile } from './utils' import { env } from '../../lib/sharedState' import resolveConfig from '../../../resolveConfig.js' -import getModuleDependencies from '../../lib/getModuleDependencies.js' import { parseCandidateFiles } from '../../lib/content.js' import { createWatcher } from './watching.js' import fastGlob from 'fast-glob' import { findAtConfigPath } from '../../lib/findAtConfigPath.js' import log from '../../util/log' - -let jiti = null -function lazyJiti() { - return ( - jiti ?? - (jiti = jitiFactory(__filename, { - interopDefault: true, - transform: (opts) => { - return transform(opts.source, { - transforms: ['typescript', 'imports'], - }) - }, - })) - ) -} +import { load } from '../../lib/load-config' /** * @@ -134,7 +117,9 @@ let state = { /** @type {{content: string, extension: string}[]} */ changedContent: [], - configDependencies: new Set(), + /** @type {ReturnType | null} */ + configBag: null, + contextDependencies: new Set(), /** @type {import('../../lib/content.js').ContentPath[]} */ @@ -162,40 +147,22 @@ let state = { this.refreshConfigDependencies(configPath) } - let config = (() => { - try { - return configPath ? require(configPath) : {} - } catch { - return lazyJiti()(configPath) - } - })() + this.configBag = load(configPath) // @ts-ignore - config = resolveConfig(config, { content: { files: [] } }) + this.configBag.config = resolveConfig(this.configBag.config, { content: { files: [] } }) // Override content files if `--content` has been passed explicitly if (content?.length > 0) { - config.content.files = content + this.configBag.config.content.files = content } - return config + return this.configBag.config }, refreshConfigDependencies(configPath) { env.DEBUG && console.time('Module dependencies') - - for (let file of this.configDependencies) { - delete require.cache[require.resolve(file)] - } - - if (configPath) { - let deps = getModuleDependencies(configPath).map(({ file }) => file) - - for (let dependency of deps) { - this.configDependencies.add(dependency) - } - } - + this.configBag?.dispose() env.DEBUG && console.timeEnd('Module dependencies') }, @@ -443,7 +410,7 @@ export async function createProcessor(args, cliConfigPath) { async rebuild(changes) { let needsNewContext = changes.some((change) => { return ( - state.configDependencies.has(change.file) || + state.configBag?.dependencies.has(change.file) || state.contextDependencies.has(change.file) ) }) diff --git a/src/cli/build/watching.js b/src/cli/build/watching.js index ffbfd1ac096a..7a3724348f50 100644 --- a/src/cli/build/watching.js +++ b/src/cli/build/watching.js @@ -220,7 +220,7 @@ export function createWatcher(args, { state, rebuild }) { refreshWatchedFiles() { watcher.add(Array.from(state.contextDependencies)) - watcher.add(Array.from(state.configDependencies)) + watcher.add(Array.from(state.configBag.dependencies)) watcher.add(state.contentPatterns.all) }, } diff --git a/src/oxide/cli/build/plugin.ts b/src/oxide/cli/build/plugin.ts index a53998a53c98..99b3a267b29f 100644 --- a/src/oxide/cli/build/plugin.ts +++ b/src/oxide/cli/build/plugin.ts @@ -4,35 +4,18 @@ import postcssrc from 'postcss-load-config' import { lilconfig } from 'lilconfig' import loadPlugins from 'postcss-load-config/src/plugins' // Little bit scary, looking at private/internal API import loadOptions from 'postcss-load-config/src/options' // Little bit scary, looking at private/internal API -import jitiFactory from 'jiti' -import { transform } from 'sucrase' import tailwind from '../../../processTailwindFeatures' import { loadPostcss, loadPostcssImport, lightningcss } from './deps' import { formatNodes, drainStdin, outputFile } from './utils' import { env } from '../../../lib/sharedState' import resolveConfig from '../../../../resolveConfig' -import getModuleDependencies from '../../../lib/getModuleDependencies' import { parseCandidateFiles } from '../../../lib/content' import { createWatcher } from './watching' import fastGlob from 'fast-glob' import { findAtConfigPath } from '../../../lib/findAtConfigPath' import log from '../../../util/log' - -let jiti: ReturnType | null = null -function lazyJiti() { - return ( - jiti ?? - (jiti = jitiFactory(__filename, { - interopDefault: true, - transform: (opts) => { - return transform(opts.source, { - transforms: ['typescript', 'imports'], - }) - }, - })) - ) -} +import { load } from '../../../lib/load-config' /** * @@ -132,7 +115,9 @@ let state = { /** @type {{content: string, extension: string}[]} */ changedContent: [], - configDependencies: new Set(), + /** @type {ReturnType | null} */ + configBag: null, + contextDependencies: new Set(), /** @type {import('../../lib/content.js').ContentPath[]} */ @@ -160,40 +145,22 @@ let state = { this.refreshConfigDependencies(configPath) } - let config = (() => { - try { - return configPath ? require(configPath) : {} - } catch { - return lazyJiti()(configPath) - } - })() + this.configBag = load(configPath) // @ts-ignore - config = resolveConfig(config, { content: { files: [] } }) + this.configBag.config = resolveConfig(this.configBag.config, { content: { files: [] } }) // Override content files if `--content` has been passed explicitly if (content?.length > 0) { - config.content.files = content + this.configBag.config.content.files = content } - return config + return this.configBag.config }, refreshConfigDependencies(configPath) { env.DEBUG && console.time('Module dependencies') - - for (let file of this.configDependencies) { - delete require.cache[require.resolve(file)] - } - - if (configPath) { - let deps = getModuleDependencies(configPath).map(({ file }) => file) - - for (let dependency of deps) { - this.configDependencies.add(dependency) - } - } - + this.configBag?.dispose() env.DEBUG && console.timeEnd('Module dependencies') }, @@ -440,7 +407,7 @@ export async function createProcessor(args, cliConfigPath) { async rebuild(changes) { let needsNewContext = changes.some((change) => { return ( - state.configDependencies.has(change.file) || + state.configBag?.dependencies.has(change.file) || state.contextDependencies.has(change.file) ) }) diff --git a/src/oxide/cli/build/watching.ts b/src/oxide/cli/build/watching.ts index 2d7b12a08c9b..9d5680a16300 100644 --- a/src/oxide/cli/build/watching.ts +++ b/src/oxide/cli/build/watching.ts @@ -218,7 +218,7 @@ export function createWatcher(args, { state, rebuild }) { refreshWatchedFiles() { watcher.add(Array.from(state.contextDependencies)) - watcher.add(Array.from(state.configDependencies)) + watcher.add(Array.from(state.configBag.dependencies)) watcher.add(state.contentPatterns.all) }, } From 3a4a421c17c29f58e6a4f427eef30c7e857b81ba Mon Sep 17 00:00:00 2001 From: Robin Malfait Date: Tue, 14 Mar 2023 16:11:39 +0100 Subject: [PATCH 10/44] WIP: make `load` related files public API --- load.d.ts | 2 ++ load.js | 1 + src/lib/load-config.ts | 2 +- src/public/load-config.js | 2 ++ 4 files changed, 6 insertions(+), 1 deletion(-) create mode 100644 load.d.ts create mode 100644 load.js create mode 100644 src/public/load-config.js diff --git a/load.d.ts b/load.d.ts new file mode 100644 index 000000000000..9cee43b68da1 --- /dev/null +++ b/load.d.ts @@ -0,0 +1,2 @@ +import type { load, dependencies } from './src/lib/load-config' +export { load, dependencies } diff --git a/load.js b/load.js new file mode 100644 index 000000000000..05262c6b100d --- /dev/null +++ b/load.js @@ -0,0 +1 @@ +module.exports = require('./lib/public/load-config') diff --git a/src/lib/load-config.ts b/src/lib/load-config.ts index 9db17e2533cb..04922a8b2e56 100644 --- a/src/lib/load-config.ts +++ b/src/lib/load-config.ts @@ -40,6 +40,6 @@ export function load(path: string) { } } -export function dependencies(path: string) { +export function dependencies(path: string): Set { return new Set(getModuleDependencies(path).map(({ file }) => file)) } diff --git a/src/public/load-config.js b/src/public/load-config.js new file mode 100644 index 000000000000..6a9f2fcf9c56 --- /dev/null +++ b/src/public/load-config.js @@ -0,0 +1,2 @@ +import { load, dependencies } from '../lib/load-config' +export { load, dependencies } From 59f25949491d6c75804980214bb29fde5f085e90 Mon Sep 17 00:00:00 2001 From: Robin Malfait Date: Tue, 14 Mar 2023 16:22:56 +0100 Subject: [PATCH 11/44] use new config loader in PostCSS plugin --- src/lib/setupTrackingContext.js | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/src/lib/setupTrackingContext.js b/src/lib/setupTrackingContext.js index a6a7659bbd13..b2271498e0b0 100644 --- a/src/lib/setupTrackingContext.js +++ b/src/lib/setupTrackingContext.js @@ -4,13 +4,13 @@ import fs from 'fs' import LRU from 'quick-lru' import hash from '../util/hashConfig' -import getModuleDependencies from '../lib/getModuleDependencies' import resolveConfig from '../public/resolve-config' import resolveConfigPath from '../util/resolveConfigPath' import { getContext, getFileModifiedMap } from './setupContextUtils' import parseDependency from '../util/parseDependency' import { validateConfig } from '../util/validateConfig.js' import { parseCandidateFiles, resolvedChangedContent } from './content.js' +import { load, dependencies } from '../lib/load-config' let configPathCache = new LRU({ maxSize: 100 }) @@ -34,7 +34,7 @@ function getTailwindConfig(configOrPath) { let [prevConfig, prevConfigHash, prevDeps, prevModified] = configPathCache.get(userConfigPath) || [] - let newDeps = getModuleDependencies(userConfigPath).map((dep) => dep.file) + let newDeps = dependencies(userConfigPath) let modified = false let newModified = new Map() @@ -55,8 +55,7 @@ function getTailwindConfig(configOrPath) { for (let file of newDeps) { delete require.cache[file] } - let newConfig = resolveConfig(require(userConfigPath)) - newConfig = validateConfig(newConfig) + let newConfig = validateConfig(resolveConfig(load(userConfigPath).config)) let newHash = hash(newConfig) configPathCache.set(userConfigPath, [newConfig, newHash, newDeps, newModified]) return [newConfig, userConfigPath, newHash, newDeps] From 08909e0d9d1d4b5528a32cbb4c0c339268da2294 Mon Sep 17 00:00:00 2001 From: Robin Malfait Date: Tue, 14 Mar 2023 16:26:39 +0100 Subject: [PATCH 12/44] add list of default config files to look for --- src/constants.js | 7 +++++++ src/util/resolveConfigPath.js | 3 ++- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/src/constants.js b/src/constants.js index 4d6e08c07616..2b08f72f6445 100644 --- a/src/constants.js +++ b/src/constants.js @@ -15,3 +15,10 @@ export const defaultPostCssConfigStubFile = path.resolve( __dirname, '../stubs/defaultPostCssConfig.stub.js' ) + +export const defaultConfigFiles = [ + './tailwind.config.js', + './tailwind.config.cjs', + './tailwind.config.mjs', + './tailwind.config.ts', +] diff --git a/src/util/resolveConfigPath.js b/src/util/resolveConfigPath.js index 646a46fd4255..a184e37615b3 100644 --- a/src/util/resolveConfigPath.js +++ b/src/util/resolveConfigPath.js @@ -1,5 +1,6 @@ import fs from 'fs' import path from 'path' +import { defaultConfigFiles } from '../constants' function isObject(value) { return typeof value === 'object' && value !== null @@ -43,7 +44,7 @@ export default function resolveConfigPath(pathOrConfig) { } // require('tailwindcss') - for (const configFile of ['./tailwind.config.js', './tailwind.config.cjs']) { + for (const configFile of defaultConfigFiles) { try { const configPath = path.resolve(configFile) fs.accessSync(configPath) From 7498f39bf514240a5a2cb1535b90694fa4b012f4 Mon Sep 17 00:00:00 2001 From: Robin Malfait Date: Tue, 14 Mar 2023 16:37:03 +0100 Subject: [PATCH 13/44] cleanup unused arguments --- src/cli/build/plugin.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/cli/build/plugin.js b/src/cli/build/plugin.js index bfe30ee8988c..1755b21c2ef4 100644 --- a/src/cli/build/plugin.js +++ b/src/cli/build/plugin.js @@ -144,7 +144,7 @@ let state = { loadConfig(configPath, content) { if (this.watcher && configPath) { - this.refreshConfigDependencies(configPath) + this.refreshConfigDependencies() } this.configBag = load(configPath) @@ -160,7 +160,7 @@ let state = { return this.configBag.config }, - refreshConfigDependencies(configPath) { + refreshConfigDependencies() { env.DEBUG && console.time('Module dependencies') this.configBag?.dispose() env.DEBUG && console.timeEnd('Module dependencies') From 90e3d8f9551cdc5e5db8e05216b79775a0dab443 Mon Sep 17 00:00:00 2001 From: Robin Malfait Date: Tue, 14 Mar 2023 16:53:48 +0100 Subject: [PATCH 14/44] find default config path when using CLI --- src/cli/build/index.js | 7 ++----- src/oxide/cli/build/index.ts | 7 ++----- src/util/resolveConfigPath.js | 4 ++++ 3 files changed, 8 insertions(+), 10 deletions(-) diff --git a/src/cli/build/index.js b/src/cli/build/index.js index ebb4aa38b6bf..e46e67e8a238 100644 --- a/src/cli/build/index.js +++ b/src/cli/build/index.js @@ -2,6 +2,7 @@ import fs from 'fs' import path from 'path' +import { resolveDefaultConfigPath } from '../../util/resolveConfigPath.js' import { createProcessor } from './plugin.js' export async function build(args, configs) { @@ -25,11 +26,7 @@ export async function build(args, configs) { } // TODO: Reference the @config path here if exists - let configPath = args['--config'] - ? args['--config'] - : ((defaultPath) => (fs.existsSync(defaultPath) ? defaultPath : null))( - path.resolve(`./${configs.tailwind}`) - ) + let configPath = args['--config'] ? args['--config'] : resolveDefaultConfigPath() let processor = await createProcessor(args, configPath) diff --git a/src/oxide/cli/build/index.ts b/src/oxide/cli/build/index.ts index b7fb2d93294b..6744c64d5d73 100644 --- a/src/oxide/cli/build/index.ts +++ b/src/oxide/cli/build/index.ts @@ -1,5 +1,6 @@ import fs from 'fs' import path from 'path' +import { resolveDefaultConfigPath } from '../../../util/resolveConfigPath' import { createProcessor } from './plugin' export async function build(args, configs) { @@ -23,11 +24,7 @@ export async function build(args, configs) { } // TODO: Reference the @config path here if exists - let configPath = args['--config'] - ? args['--config'] - : ((defaultPath) => (fs.existsSync(defaultPath) ? defaultPath : null))( - path.resolve(`./${configs.tailwind}`) - ) + let configPath = args['--config'] ? args['--config'] : resolveDefaultConfigPath() let processor = await createProcessor(args, configPath) diff --git a/src/util/resolveConfigPath.js b/src/util/resolveConfigPath.js index a184e37615b3..3a0afaa01cad 100644 --- a/src/util/resolveConfigPath.js +++ b/src/util/resolveConfigPath.js @@ -44,6 +44,10 @@ export default function resolveConfigPath(pathOrConfig) { } // require('tailwindcss') + return resolveDefaultConfigPath() +} + +export function resolveDefaultConfigPath() { for (const configFile of defaultConfigFiles) { try { const configPath = path.resolve(configFile) From ebec943899362788f59d10bf54783391e2262117 Mon Sep 17 00:00:00 2001 From: Robin Malfait Date: Tue, 14 Mar 2023 17:41:49 +0100 Subject: [PATCH 15/44] improve `init` command --- src/cli/index.js | 4 +- src/cli/init/index.js | 36 +- stubs/full.js | 964 ++++++++++++++++++++++++++++++++++++++ stubs/simple.js | 7 + stubs/tailwind.config.cjs | 2 + stubs/tailwind.config.ts | 3 + 6 files changed, 1010 insertions(+), 6 deletions(-) create mode 100644 stubs/full.js create mode 100644 stubs/simple.js create mode 100644 stubs/tailwind.config.cjs create mode 100644 stubs/tailwind.config.ts diff --git a/src/cli/index.js b/src/cli/index.js index 14e387250a49..0942839fa53d 100644 --- a/src/cli/index.js +++ b/src/cli/index.js @@ -51,8 +51,10 @@ let commands = { init: { run: init, args: { - '--full': { type: Boolean, description: `Initialize a full \`${configs.tailwind}\` file` }, + '--esm': { type: Boolean, description: `Initialize a \`tailwind.config.js\` file` }, + '--ts': { type: Boolean, description: `Initialize a \`tailwind.config.ts\` file` }, '--postcss': { type: Boolean, description: `Initialize a \`${configs.postcss}\` file` }, + '--full': { type: Boolean, description: `Initialize a full \`${configs.tailwind}\` file` }, '-f': '--full', '-p': '--postcss', }, diff --git a/src/cli/init/index.js b/src/cli/init/index.js index 470680318fa6..f5011697372d 100644 --- a/src/cli/init/index.js +++ b/src/cli/init/index.js @@ -3,22 +3,48 @@ import fs from 'fs' import path from 'path' +function isESM() { + const pkgPath = path.resolve('./package.json') + + try { + let pkg = JSON.parse(fs.readFileSync(pkgPath, 'utf8')) + return pkg.type && pkg.type === 'module' + } catch (err) { + return false + } +} + export function init(args, configs) { let messages = [] - let tailwindConfigLocation = path.resolve(args['_'][1] ?? `./${configs.tailwind}`) + let syntax = args['--ts'] ? 'ts' : args['--esm'] ? 'js' : isESM() ? 'js' : 'cjs' + let extension = args['--ts'] ? 'ts' : 'js' + + let tailwindConfigLocation = path.resolve(args['_'][1] ?? `./tailwind.config.${extension}`) + if (fs.existsSync(tailwindConfigLocation)) { messages.push(`${path.basename(tailwindConfigLocation)} already exists.`) } else { - let stubFile = fs.readFileSync( + let stubContentsFile = fs.readFileSync( args['--full'] - ? path.resolve(__dirname, '../../../stubs/defaultConfig.stub.js') - : path.resolve(__dirname, '../../../stubs/simpleConfig.stub.js'), + ? path.resolve(__dirname, '../../../stubs/full.js') + : path.resolve(__dirname, '../../../stubs/simple.js'), + 'utf8' + ) + + let stubFile = fs.readFileSync( + path.resolve(__dirname, `../../../stubs/tailwind.config.${syntax}`), 'utf8' ) // Change colors import - stubFile = stubFile.replace('../colors', 'tailwindcss/colors') + stubContentsFile = stubContentsFile.replace('../colors', 'tailwindcss/colors') + + // Replace contents of {ts,js,cjs} file with the stub {simple,full}. + stubFile = + stubFile + .replace('__CONFIG__', stubContentsFile.replace('module.exports =', '').trim()) + .trim() + '\n\n' fs.writeFileSync(tailwindConfigLocation, stubFile, 'utf8') diff --git a/stubs/full.js b/stubs/full.js new file mode 100644 index 000000000000..d2c9526390fe --- /dev/null +++ b/stubs/full.js @@ -0,0 +1,964 @@ +module.exports = { + content: [], + presets: [], + darkMode: 'media', // or 'class' + theme: { + accentColor: ({ theme }) => ({ + ...theme('colors'), + auto: 'auto', + }), + animation: { + none: 'none', + spin: 'spin 1s linear infinite', + ping: 'ping 1s cubic-bezier(0, 0, 0.2, 1) infinite', + pulse: 'pulse 2s cubic-bezier(0.4, 0, 0.6, 1) infinite', + bounce: 'bounce 1s infinite', + }, + aria: { + checked: 'checked="true"', + disabled: 'disabled="true"', + expanded: 'expanded="true"', + hidden: 'hidden="true"', + pressed: 'pressed="true"', + readonly: 'readonly="true"', + required: 'required="true"', + selected: 'selected="true"', + }, + aspectRatio: { + auto: 'auto', + square: '1 / 1', + video: '16 / 9', + }, + backdropBlur: ({ theme }) => theme('blur'), + backdropBrightness: ({ theme }) => theme('brightness'), + backdropContrast: ({ theme }) => theme('contrast'), + backdropGrayscale: ({ theme }) => theme('grayscale'), + backdropHueRotate: ({ theme }) => theme('hueRotate'), + backdropInvert: ({ theme }) => theme('invert'), + backdropOpacity: ({ theme }) => theme('opacity'), + backdropSaturate: ({ theme }) => theme('saturate'), + backdropSepia: ({ theme }) => theme('sepia'), + backgroundColor: ({ theme }) => theme('colors'), + backgroundImage: { + none: 'none', + 'gradient-to-t': 'linear-gradient(to top, var(--tw-gradient-stops))', + 'gradient-to-tr': 'linear-gradient(to top right, var(--tw-gradient-stops))', + 'gradient-to-r': 'linear-gradient(to right, var(--tw-gradient-stops))', + 'gradient-to-br': 'linear-gradient(to bottom right, var(--tw-gradient-stops))', + 'gradient-to-b': 'linear-gradient(to bottom, var(--tw-gradient-stops))', + 'gradient-to-bl': 'linear-gradient(to bottom left, var(--tw-gradient-stops))', + 'gradient-to-l': 'linear-gradient(to left, var(--tw-gradient-stops))', + 'gradient-to-tl': 'linear-gradient(to top left, var(--tw-gradient-stops))', + }, + backgroundOpacity: ({ theme }) => theme('opacity'), + backgroundPosition: { + bottom: 'bottom', + center: 'center', + left: 'left', + 'left-bottom': 'left bottom', + 'left-top': 'left top', + right: 'right', + 'right-bottom': 'right bottom', + 'right-top': 'right top', + top: 'top', + }, + backgroundSize: { + auto: 'auto', + cover: 'cover', + contain: 'contain', + }, + blur: { + 0: '0', + none: '0', + sm: '4px', + DEFAULT: '8px', + md: '12px', + lg: '16px', + xl: '24px', + '2xl': '40px', + '3xl': '64px', + }, + borderColor: ({ theme }) => ({ + ...theme('colors'), + DEFAULT: theme('colors.gray.200', 'currentColor'), + }), + borderOpacity: ({ theme }) => theme('opacity'), + borderRadius: { + none: '0px', + sm: '0.125rem', + DEFAULT: '0.25rem', + md: '0.375rem', + lg: '0.5rem', + xl: '0.75rem', + '2xl': '1rem', + '3xl': '1.5rem', + full: '9999px', + }, + borderSpacing: ({ theme }) => ({ + ...theme('spacing'), + }), + borderWidth: { + DEFAULT: '1px', + 0: '0px', + 2: '2px', + 4: '4px', + 8: '8px', + }, + boxShadow: { + sm: '0 1px 2px 0 rgb(0 0 0 / 0.05)', + DEFAULT: '0 1px 3px 0 rgb(0 0 0 / 0.1), 0 1px 2px -1px rgb(0 0 0 / 0.1)', + md: '0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1)', + lg: '0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1)', + xl: '0 20px 25px -5px rgb(0 0 0 / 0.1), 0 8px 10px -6px rgb(0 0 0 / 0.1)', + '2xl': '0 25px 50px -12px rgb(0 0 0 / 0.25)', + inner: 'inset 0 2px 4px 0 rgb(0 0 0 / 0.05)', + none: 'none', + }, + boxShadowColor: ({ theme }) => theme('colors'), + brightness: { + 0: '0', + 50: '.5', + 75: '.75', + 90: '.9', + 95: '.95', + 100: '1', + 105: '1.05', + 110: '1.1', + 125: '1.25', + 150: '1.5', + 200: '2', + }, + caretColor: ({ theme }) => theme('colors'), + colors: ({ colors }) => ({ + inherit: colors.inherit, + current: colors.current, + transparent: colors.transparent, + black: colors.black, + white: colors.white, + slate: colors.slate, + gray: colors.gray, + zinc: colors.zinc, + neutral: colors.neutral, + stone: colors.stone, + red: colors.red, + orange: colors.orange, + amber: colors.amber, + yellow: colors.yellow, + lime: colors.lime, + green: colors.green, + emerald: colors.emerald, + teal: colors.teal, + cyan: colors.cyan, + sky: colors.sky, + blue: colors.blue, + indigo: colors.indigo, + violet: colors.violet, + purple: colors.purple, + fuchsia: colors.fuchsia, + pink: colors.pink, + rose: colors.rose, + }), + columns: { + auto: 'auto', + 1: '1', + 2: '2', + 3: '3', + 4: '4', + 5: '5', + 6: '6', + 7: '7', + 8: '8', + 9: '9', + 10: '10', + 11: '11', + 12: '12', + '3xs': '16rem', + '2xs': '18rem', + xs: '20rem', + sm: '24rem', + md: '28rem', + lg: '32rem', + xl: '36rem', + '2xl': '42rem', + '3xl': '48rem', + '4xl': '56rem', + '5xl': '64rem', + '6xl': '72rem', + '7xl': '80rem', + }, + container: {}, + content: { + none: 'none', + }, + contrast: { + 0: '0', + 50: '.5', + 75: '.75', + 100: '1', + 125: '1.25', + 150: '1.5', + 200: '2', + }, + cursor: { + auto: 'auto', + default: 'default', + pointer: 'pointer', + wait: 'wait', + text: 'text', + move: 'move', + help: 'help', + 'not-allowed': 'not-allowed', + none: 'none', + 'context-menu': 'context-menu', + progress: 'progress', + cell: 'cell', + crosshair: 'crosshair', + 'vertical-text': 'vertical-text', + alias: 'alias', + copy: 'copy', + 'no-drop': 'no-drop', + grab: 'grab', + grabbing: 'grabbing', + 'all-scroll': 'all-scroll', + 'col-resize': 'col-resize', + 'row-resize': 'row-resize', + 'n-resize': 'n-resize', + 'e-resize': 'e-resize', + 's-resize': 's-resize', + 'w-resize': 'w-resize', + 'ne-resize': 'ne-resize', + 'nw-resize': 'nw-resize', + 'se-resize': 'se-resize', + 'sw-resize': 'sw-resize', + 'ew-resize': 'ew-resize', + 'ns-resize': 'ns-resize', + 'nesw-resize': 'nesw-resize', + 'nwse-resize': 'nwse-resize', + 'zoom-in': 'zoom-in', + 'zoom-out': 'zoom-out', + }, + divideColor: ({ theme }) => theme('borderColor'), + divideOpacity: ({ theme }) => theme('borderOpacity'), + divideWidth: ({ theme }) => theme('borderWidth'), + dropShadow: { + sm: '0 1px 1px rgb(0 0 0 / 0.05)', + DEFAULT: ['0 1px 2px rgb(0 0 0 / 0.1)', '0 1px 1px rgb(0 0 0 / 0.06)'], + md: ['0 4px 3px rgb(0 0 0 / 0.07)', '0 2px 2px rgb(0 0 0 / 0.06)'], + lg: ['0 10px 8px rgb(0 0 0 / 0.04)', '0 4px 3px rgb(0 0 0 / 0.1)'], + xl: ['0 20px 13px rgb(0 0 0 / 0.03)', '0 8px 5px rgb(0 0 0 / 0.08)'], + '2xl': '0 25px 25px rgb(0 0 0 / 0.15)', + none: '0 0 #0000', + }, + fill: ({ theme }) => ({ + none: 'none', + ...theme('colors'), + }), + flex: { + 1: '1 1 0%', + auto: '1 1 auto', + initial: '0 1 auto', + none: 'none', + }, + flexBasis: ({ theme }) => ({ + auto: 'auto', + ...theme('spacing'), + '1/2': '50%', + '1/3': '33.333333%', + '2/3': '66.666667%', + '1/4': '25%', + '2/4': '50%', + '3/4': '75%', + '1/5': '20%', + '2/5': '40%', + '3/5': '60%', + '4/5': '80%', + '1/6': '16.666667%', + '2/6': '33.333333%', + '3/6': '50%', + '4/6': '66.666667%', + '5/6': '83.333333%', + '1/12': '8.333333%', + '2/12': '16.666667%', + '3/12': '25%', + '4/12': '33.333333%', + '5/12': '41.666667%', + '6/12': '50%', + '7/12': '58.333333%', + '8/12': '66.666667%', + '9/12': '75%', + '10/12': '83.333333%', + '11/12': '91.666667%', + full: '100%', + }), + flexGrow: { + 0: '0', + DEFAULT: '1', + }, + flexShrink: { + 0: '0', + DEFAULT: '1', + }, + fontFamily: { + sans: [ + 'ui-sans-serif', + 'system-ui', + '-apple-system', + 'BlinkMacSystemFont', + '"Segoe UI"', + 'Roboto', + '"Helvetica Neue"', + 'Arial', + '"Noto Sans"', + 'sans-serif', + '"Apple Color Emoji"', + '"Segoe UI Emoji"', + '"Segoe UI Symbol"', + '"Noto Color Emoji"', + ], + serif: ['ui-serif', 'Georgia', 'Cambria', '"Times New Roman"', 'Times', 'serif'], + mono: [ + 'ui-monospace', + 'SFMono-Regular', + 'Menlo', + 'Monaco', + 'Consolas', + '"Liberation Mono"', + '"Courier New"', + 'monospace', + ], + }, + fontSize: { + xs: ['0.75rem', { lineHeight: '1rem' }], + sm: ['0.875rem', { lineHeight: '1.25rem' }], + base: ['1rem', { lineHeight: '1.5rem' }], + lg: ['1.125rem', { lineHeight: '1.75rem' }], + xl: ['1.25rem', { lineHeight: '1.75rem' }], + '2xl': ['1.5rem', { lineHeight: '2rem' }], + '3xl': ['1.875rem', { lineHeight: '2.25rem' }], + '4xl': ['2.25rem', { lineHeight: '2.5rem' }], + '5xl': ['3rem', { lineHeight: '1' }], + '6xl': ['3.75rem', { lineHeight: '1' }], + '7xl': ['4.5rem', { lineHeight: '1' }], + '8xl': ['6rem', { lineHeight: '1' }], + '9xl': ['8rem', { lineHeight: '1' }], + }, + fontWeight: { + thin: '100', + extralight: '200', + light: '300', + normal: '400', + medium: '500', + semibold: '600', + bold: '700', + extrabold: '800', + black: '900', + }, + gap: ({ theme }) => theme('spacing'), + gradientColorStops: ({ theme }) => theme('colors'), + grayscale: { + 0: '0', + DEFAULT: '100%', + }, + gridAutoColumns: { + auto: 'auto', + min: 'min-content', + max: 'max-content', + fr: 'minmax(0, 1fr)', + }, + gridAutoRows: { + auto: 'auto', + min: 'min-content', + max: 'max-content', + fr: 'minmax(0, 1fr)', + }, + gridColumn: { + auto: 'auto', + 'span-1': 'span 1 / span 1', + 'span-2': 'span 2 / span 2', + 'span-3': 'span 3 / span 3', + 'span-4': 'span 4 / span 4', + 'span-5': 'span 5 / span 5', + 'span-6': 'span 6 / span 6', + 'span-7': 'span 7 / span 7', + 'span-8': 'span 8 / span 8', + 'span-9': 'span 9 / span 9', + 'span-10': 'span 10 / span 10', + 'span-11': 'span 11 / span 11', + 'span-12': 'span 12 / span 12', + 'span-full': '1 / -1', + }, + gridColumnEnd: { + auto: 'auto', + 1: '1', + 2: '2', + 3: '3', + 4: '4', + 5: '5', + 6: '6', + 7: '7', + 8: '8', + 9: '9', + 10: '10', + 11: '11', + 12: '12', + 13: '13', + }, + gridColumnStart: { + auto: 'auto', + 1: '1', + 2: '2', + 3: '3', + 4: '4', + 5: '5', + 6: '6', + 7: '7', + 8: '8', + 9: '9', + 10: '10', + 11: '11', + 12: '12', + 13: '13', + }, + gridRow: { + auto: 'auto', + 'span-1': 'span 1 / span 1', + 'span-2': 'span 2 / span 2', + 'span-3': 'span 3 / span 3', + 'span-4': 'span 4 / span 4', + 'span-5': 'span 5 / span 5', + 'span-6': 'span 6 / span 6', + 'span-full': '1 / -1', + }, + gridRowEnd: { + auto: 'auto', + 1: '1', + 2: '2', + 3: '3', + 4: '4', + 5: '5', + 6: '6', + 7: '7', + }, + gridRowStart: { + auto: 'auto', + 1: '1', + 2: '2', + 3: '3', + 4: '4', + 5: '5', + 6: '6', + 7: '7', + }, + gridTemplateColumns: { + none: 'none', + 1: 'repeat(1, minmax(0, 1fr))', + 2: 'repeat(2, minmax(0, 1fr))', + 3: 'repeat(3, minmax(0, 1fr))', + 4: 'repeat(4, minmax(0, 1fr))', + 5: 'repeat(5, minmax(0, 1fr))', + 6: 'repeat(6, minmax(0, 1fr))', + 7: 'repeat(7, minmax(0, 1fr))', + 8: 'repeat(8, minmax(0, 1fr))', + 9: 'repeat(9, minmax(0, 1fr))', + 10: 'repeat(10, minmax(0, 1fr))', + 11: 'repeat(11, minmax(0, 1fr))', + 12: 'repeat(12, minmax(0, 1fr))', + }, + gridTemplateRows: { + none: 'none', + 1: 'repeat(1, minmax(0, 1fr))', + 2: 'repeat(2, minmax(0, 1fr))', + 3: 'repeat(3, minmax(0, 1fr))', + 4: 'repeat(4, minmax(0, 1fr))', + 5: 'repeat(5, minmax(0, 1fr))', + 6: 'repeat(6, minmax(0, 1fr))', + }, + height: ({ theme }) => ({ + auto: 'auto', + ...theme('spacing'), + '1/2': '50%', + '1/3': '33.333333%', + '2/3': '66.666667%', + '1/4': '25%', + '2/4': '50%', + '3/4': '75%', + '1/5': '20%', + '2/5': '40%', + '3/5': '60%', + '4/5': '80%', + '1/6': '16.666667%', + '2/6': '33.333333%', + '3/6': '50%', + '4/6': '66.666667%', + '5/6': '83.333333%', + full: '100%', + screen: '100vh', + min: 'min-content', + max: 'max-content', + fit: 'fit-content', + }), + hueRotate: { + 0: '0deg', + 15: '15deg', + 30: '30deg', + 60: '60deg', + 90: '90deg', + 180: '180deg', + }, + inset: ({ theme }) => ({ + auto: 'auto', + ...theme('spacing'), + '1/2': '50%', + '1/3': '33.333333%', + '2/3': '66.666667%', + '1/4': '25%', + '2/4': '50%', + '3/4': '75%', + full: '100%', + }), + invert: { + 0: '0', + DEFAULT: '100%', + }, + keyframes: { + spin: { + to: { + transform: 'rotate(360deg)', + }, + }, + ping: { + '75%, 100%': { + transform: 'scale(2)', + opacity: '0', + }, + }, + pulse: { + '50%': { + opacity: '.5', + }, + }, + bounce: { + '0%, 100%': { + transform: 'translateY(-25%)', + animationTimingFunction: 'cubic-bezier(0.8,0,1,1)', + }, + '50%': { + transform: 'none', + animationTimingFunction: 'cubic-bezier(0,0,0.2,1)', + }, + }, + }, + letterSpacing: { + tighter: '-0.05em', + tight: '-0.025em', + normal: '0em', + wide: '0.025em', + wider: '0.05em', + widest: '0.1em', + }, + lineHeight: { + none: '1', + tight: '1.25', + snug: '1.375', + normal: '1.5', + relaxed: '1.625', + loose: '2', + 3: '.75rem', + 4: '1rem', + 5: '1.25rem', + 6: '1.5rem', + 7: '1.75rem', + 8: '2rem', + 9: '2.25rem', + 10: '2.5rem', + }, + listStyleType: { + none: 'none', + disc: 'disc', + decimal: 'decimal', + }, + margin: ({ theme }) => ({ + auto: 'auto', + ...theme('spacing'), + }), + lineClamp: { + 1: '1', + 2: '2', + 3: '3', + 4: '4', + 5: '5', + 6: '6', + }, + maxHeight: ({ theme }) => ({ + ...theme('spacing'), + none: 'none', + full: '100%', + screen: '100vh', + min: 'min-content', + max: 'max-content', + fit: 'fit-content', + }), + maxWidth: ({ theme, breakpoints }) => ({ + none: 'none', + 0: '0rem', + xs: '20rem', + sm: '24rem', + md: '28rem', + lg: '32rem', + xl: '36rem', + '2xl': '42rem', + '3xl': '48rem', + '4xl': '56rem', + '5xl': '64rem', + '6xl': '72rem', + '7xl': '80rem', + full: '100%', + min: 'min-content', + max: 'max-content', + fit: 'fit-content', + prose: '65ch', + ...breakpoints(theme('screens')), + }), + minHeight: { + 0: '0px', + full: '100%', + screen: '100vh', + min: 'min-content', + max: 'max-content', + fit: 'fit-content', + }, + minWidth: { + 0: '0px', + full: '100%', + min: 'min-content', + max: 'max-content', + fit: 'fit-content', + }, + objectPosition: { + bottom: 'bottom', + center: 'center', + left: 'left', + 'left-bottom': 'left bottom', + 'left-top': 'left top', + right: 'right', + 'right-bottom': 'right bottom', + 'right-top': 'right top', + top: 'top', + }, + opacity: { + 0: '0', + 5: '0.05', + 10: '0.1', + 20: '0.2', + 25: '0.25', + 30: '0.3', + 40: '0.4', + 50: '0.5', + 60: '0.6', + 70: '0.7', + 75: '0.75', + 80: '0.8', + 90: '0.9', + 95: '0.95', + 100: '1', + }, + order: { + first: '-9999', + last: '9999', + none: '0', + 1: '1', + 2: '2', + 3: '3', + 4: '4', + 5: '5', + 6: '6', + 7: '7', + 8: '8', + 9: '9', + 10: '10', + 11: '11', + 12: '12', + }, + outlineColor: ({ theme }) => theme('colors'), + outlineOffset: { + 0: '0px', + 1: '1px', + 2: '2px', + 4: '4px', + 8: '8px', + }, + outlineWidth: { + 0: '0px', + 1: '1px', + 2: '2px', + 4: '4px', + 8: '8px', + }, + padding: ({ theme }) => theme('spacing'), + placeholderColor: ({ theme }) => theme('colors'), + placeholderOpacity: ({ theme }) => theme('opacity'), + ringColor: ({ theme }) => ({ + DEFAULT: theme('colors.blue.500', '#3b82f6'), + ...theme('colors'), + }), + ringOffsetColor: ({ theme }) => theme('colors'), + ringOffsetWidth: { + 0: '0px', + 1: '1px', + 2: '2px', + 4: '4px', + 8: '8px', + }, + ringOpacity: ({ theme }) => ({ + DEFAULT: '0.5', + ...theme('opacity'), + }), + ringWidth: { + DEFAULT: '3px', + 0: '0px', + 1: '1px', + 2: '2px', + 4: '4px', + 8: '8px', + }, + rotate: { + 0: '0deg', + 1: '1deg', + 2: '2deg', + 3: '3deg', + 6: '6deg', + 12: '12deg', + 45: '45deg', + 90: '90deg', + 180: '180deg', + }, + saturate: { + 0: '0', + 50: '.5', + 100: '1', + 150: '1.5', + 200: '2', + }, + scale: { + 0: '0', + 50: '.5', + 75: '.75', + 90: '.9', + 95: '.95', + 100: '1', + 105: '1.05', + 110: '1.1', + 125: '1.25', + 150: '1.5', + }, + screens: { + sm: '640px', + md: '768px', + lg: '1024px', + xl: '1280px', + '2xl': '1536px', + }, + scrollMargin: ({ theme }) => ({ + ...theme('spacing'), + }), + scrollPadding: ({ theme }) => theme('spacing'), + sepia: { + 0: '0', + DEFAULT: '100%', + }, + skew: { + 0: '0deg', + 1: '1deg', + 2: '2deg', + 3: '3deg', + 6: '6deg', + 12: '12deg', + }, + space: ({ theme }) => ({ + ...theme('spacing'), + }), + spacing: { + px: '1px', + 0: '0px', + 0.5: '0.125rem', + 1: '0.25rem', + 1.5: '0.375rem', + 2: '0.5rem', + 2.5: '0.625rem', + 3: '0.75rem', + 3.5: '0.875rem', + 4: '1rem', + 5: '1.25rem', + 6: '1.5rem', + 7: '1.75rem', + 8: '2rem', + 9: '2.25rem', + 10: '2.5rem', + 11: '2.75rem', + 12: '3rem', + 14: '3.5rem', + 16: '4rem', + 20: '5rem', + 24: '6rem', + 28: '7rem', + 32: '8rem', + 36: '9rem', + 40: '10rem', + 44: '11rem', + 48: '12rem', + 52: '13rem', + 56: '14rem', + 60: '15rem', + 64: '16rem', + 72: '18rem', + 80: '20rem', + 96: '24rem', + }, + stroke: ({ theme }) => ({ + none: 'none', + ...theme('colors'), + }), + strokeWidth: { + 0: '0', + 1: '1', + 2: '2', + }, + supports: {}, + data: {}, + textColor: ({ theme }) => theme('colors'), + textDecorationColor: ({ theme }) => theme('colors'), + textDecorationThickness: { + auto: 'auto', + 'from-font': 'from-font', + 0: '0px', + 1: '1px', + 2: '2px', + 4: '4px', + 8: '8px', + }, + textIndent: ({ theme }) => ({ + ...theme('spacing'), + }), + textOpacity: ({ theme }) => theme('opacity'), + textUnderlineOffset: { + auto: 'auto', + 0: '0px', + 1: '1px', + 2: '2px', + 4: '4px', + 8: '8px', + }, + transformOrigin: { + center: 'center', + top: 'top', + 'top-right': 'top right', + right: 'right', + 'bottom-right': 'bottom right', + bottom: 'bottom', + 'bottom-left': 'bottom left', + left: 'left', + 'top-left': 'top left', + }, + transitionDelay: { + 0: '0s', + 75: '75ms', + 100: '100ms', + 150: '150ms', + 200: '200ms', + 300: '300ms', + 500: '500ms', + 700: '700ms', + 1000: '1000ms', + }, + transitionDuration: { + DEFAULT: '150ms', + 0: '0s', + 75: '75ms', + 100: '100ms', + 150: '150ms', + 200: '200ms', + 300: '300ms', + 500: '500ms', + 700: '700ms', + 1000: '1000ms', + }, + transitionProperty: { + none: 'none', + all: 'all', + DEFAULT: + 'color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, backdrop-filter', + colors: 'color, background-color, border-color, text-decoration-color, fill, stroke', + opacity: 'opacity', + shadow: 'box-shadow', + transform: 'transform', + }, + transitionTimingFunction: { + DEFAULT: 'cubic-bezier(0.4, 0, 0.2, 1)', + linear: 'linear', + in: 'cubic-bezier(0.4, 0, 1, 1)', + out: 'cubic-bezier(0, 0, 0.2, 1)', + 'in-out': 'cubic-bezier(0.4, 0, 0.2, 1)', + }, + translate: ({ theme }) => ({ + ...theme('spacing'), + '1/2': '50%', + '1/3': '33.333333%', + '2/3': '66.666667%', + '1/4': '25%', + '2/4': '50%', + '3/4': '75%', + full: '100%', + }), + width: ({ theme }) => ({ + auto: 'auto', + ...theme('spacing'), + '1/2': '50%', + '1/3': '33.333333%', + '2/3': '66.666667%', + '1/4': '25%', + '2/4': '50%', + '3/4': '75%', + '1/5': '20%', + '2/5': '40%', + '3/5': '60%', + '4/5': '80%', + '1/6': '16.666667%', + '2/6': '33.333333%', + '3/6': '50%', + '4/6': '66.666667%', + '5/6': '83.333333%', + '1/12': '8.333333%', + '2/12': '16.666667%', + '3/12': '25%', + '4/12': '33.333333%', + '5/12': '41.666667%', + '6/12': '50%', + '7/12': '58.333333%', + '8/12': '66.666667%', + '9/12': '75%', + '10/12': '83.333333%', + '11/12': '91.666667%', + full: '100%', + screen: '100vw', + min: 'min-content', + max: 'max-content', + fit: 'fit-content', + }), + willChange: { + auto: 'auto', + scroll: 'scroll-position', + contents: 'contents', + transform: 'transform', + }, + zIndex: { + auto: 'auto', + 0: '0', + 10: '10', + 20: '20', + 30: '30', + 40: '40', + 50: '50', + }, + }, + plugins: [], +} diff --git a/stubs/simple.js b/stubs/simple.js new file mode 100644 index 000000000000..9843c05570a6 --- /dev/null +++ b/stubs/simple.js @@ -0,0 +1,7 @@ +module.exports = { + content: [], + theme: { + extend: {}, + }, + plugins: [], +} diff --git a/stubs/tailwind.config.cjs b/stubs/tailwind.config.cjs new file mode 100644 index 000000000000..48b702b09916 --- /dev/null +++ b/stubs/tailwind.config.cjs @@ -0,0 +1,2 @@ +/** @type {import('tailwindcss').Config} */ +module.exports = __CONFIG__ diff --git a/stubs/tailwind.config.ts b/stubs/tailwind.config.ts new file mode 100644 index 000000000000..d9ea7111ea76 --- /dev/null +++ b/stubs/tailwind.config.ts @@ -0,0 +1,3 @@ +import type { Config } from 'tailwindcss' + +export default __CONFIG__ satisfies Config From ddacbc8d8b6b0915926350028fdeec0002654ef1 Mon Sep 17 00:00:00 2001 From: Robin Malfait Date: Tue, 14 Mar 2023 19:44:54 +0100 Subject: [PATCH 16/44] make eslint happy --- src/cli/build/index.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/cli/build/index.js b/src/cli/build/index.js index e46e67e8a238..2b4575c5bcdd 100644 --- a/src/cli/build/index.js +++ b/src/cli/build/index.js @@ -5,7 +5,7 @@ import path from 'path' import { resolveDefaultConfigPath } from '../../util/resolveConfigPath.js' import { createProcessor } from './plugin.js' -export async function build(args, configs) { +export async function build(args, _configs) { let input = args['--input'] let shouldWatch = args['--watch'] From b9dfa14eec1c4180d302c0cc2ef72ae3b3b5cbdf Mon Sep 17 00:00:00 2001 From: Robin Malfait Date: Tue, 14 Mar 2023 19:49:32 +0100 Subject: [PATCH 17/44] keep all files in `stubs` folder --- stubs/.gitignore | 1 + 1 file changed, 1 insertion(+) create mode 100644 stubs/.gitignore diff --git a/stubs/.gitignore b/stubs/.gitignore new file mode 100644 index 000000000000..f9be8dfe0908 --- /dev/null +++ b/stubs/.gitignore @@ -0,0 +1 @@ +!* From 30cf66f8197b95e48f10b3d3bfb69f1f9241c3b0 Mon Sep 17 00:00:00 2001 From: Robin Malfait Date: Tue, 14 Mar 2023 19:51:19 +0100 Subject: [PATCH 18/44] add `tailwind.config.js` stub file --- stubs/tailwind.config.js | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 stubs/tailwind.config.js diff --git a/stubs/tailwind.config.js b/stubs/tailwind.config.js new file mode 100644 index 000000000000..c5f54b450048 --- /dev/null +++ b/stubs/tailwind.config.js @@ -0,0 +1,2 @@ +/** @type {import('tailwindcss').Config} */ +export default __CONFIG__ From b3c608601f3b04ab0c017edcfe10ddf354d32153 Mon Sep 17 00:00:00 2001 From: Adam Wathan <4323180+adamwathan@users.noreply.github.com> Date: Tue, 14 Mar 2023 15:39:59 -0400 Subject: [PATCH 19/44] Initialize PostCSS config using the same format as Tailwind config --- src/cli/init/index.js | 9 ++++++--- stubs/postcss.config.cjs | 6 ++++++ stubs/postcss.config.js | 6 ++++++ 3 files changed, 18 insertions(+), 3 deletions(-) create mode 100644 stubs/postcss.config.cjs create mode 100644 stubs/postcss.config.js diff --git a/src/cli/init/index.js b/src/cli/init/index.js index f5011697372d..8dafe836e9a8 100644 --- a/src/cli/init/index.js +++ b/src/cli/init/index.js @@ -17,7 +17,8 @@ function isESM() { export function init(args, configs) { let messages = [] - let syntax = args['--ts'] ? 'ts' : args['--esm'] ? 'js' : isESM() ? 'js' : 'cjs' + let isProjectESM = args['--ts'] || args['--esm'] || isESM() + let syntax = args['--ts'] ? 'ts' : isProjectESM ? 'js' : 'cjs' let extension = args['--ts'] ? 'ts' : 'js' let tailwindConfigLocation = path.resolve(args['_'][1] ?? `./tailwind.config.${extension}`) @@ -52,12 +53,14 @@ export function init(args, configs) { } if (args['--postcss']) { - let postcssConfigLocation = path.resolve(`./${configs.postcss}`) + let postcssConfigLocation = path.resolve('./postcss.config.js') if (fs.existsSync(postcssConfigLocation)) { messages.push(`${path.basename(postcssConfigLocation)} already exists.`) } else { let stubFile = fs.readFileSync( - path.resolve(__dirname, '../../../stubs/defaultPostCssConfig.stub.js'), + isProjectESM + ? path.resolve(__dirname, '../../../stubs/postcss.config.js') + : path.resolve(__dirname, '../../../stubs/postcss.config.cjs'), 'utf8' ) diff --git a/stubs/postcss.config.cjs b/stubs/postcss.config.cjs new file mode 100644 index 000000000000..33ad091d26d8 --- /dev/null +++ b/stubs/postcss.config.cjs @@ -0,0 +1,6 @@ +module.exports = { + plugins: { + tailwindcss: {}, + autoprefixer: {}, + }, +} diff --git a/stubs/postcss.config.js b/stubs/postcss.config.js new file mode 100644 index 000000000000..2e7af2b7f1a6 --- /dev/null +++ b/stubs/postcss.config.js @@ -0,0 +1,6 @@ +export default { + plugins: { + tailwindcss: {}, + autoprefixer: {}, + }, +} From 33c3b04f3a0c2cb105ae92c1e5fe6ac6ac6b5d9b Mon Sep 17 00:00:00 2001 From: Adam Wathan <4323180+adamwathan@users.noreply.github.com> Date: Tue, 14 Mar 2023 15:40:29 -0400 Subject: [PATCH 20/44] Rename config content stubs to config.*.js --- src/cli/init/index.js | 4 ++-- stubs/{full.js => config.full.js} | 0 stubs/{simple.js => config.simple.js} | 0 3 files changed, 2 insertions(+), 2 deletions(-) rename stubs/{full.js => config.full.js} (100%) rename stubs/{simple.js => config.simple.js} (100%) diff --git a/src/cli/init/index.js b/src/cli/init/index.js index 8dafe836e9a8..6158f7b9c10a 100644 --- a/src/cli/init/index.js +++ b/src/cli/init/index.js @@ -28,8 +28,8 @@ export function init(args, configs) { } else { let stubContentsFile = fs.readFileSync( args['--full'] - ? path.resolve(__dirname, '../../../stubs/full.js') - : path.resolve(__dirname, '../../../stubs/simple.js'), + ? path.resolve(__dirname, '../../../stubs/config.full.js') + : path.resolve(__dirname, '../../../stubs/config.simple.js'), 'utf8' ) diff --git a/stubs/full.js b/stubs/config.full.js similarity index 100% rename from stubs/full.js rename to stubs/config.full.js diff --git a/stubs/simple.js b/stubs/config.simple.js similarity index 100% rename from stubs/simple.js rename to stubs/config.simple.js From 13b03d744d7bcaea93e6f161703ccaa42476402e Mon Sep 17 00:00:00 2001 From: Adam Wathan <4323180+adamwathan@users.noreply.github.com> Date: Tue, 14 Mar 2023 15:40:52 -0400 Subject: [PATCH 21/44] Improve option descriptions for init options --- src/cli/index.js | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/src/cli/index.js b/src/cli/index.js index 0942839fa53d..fa3e1969ff1c 100644 --- a/src/cli/index.js +++ b/src/cli/index.js @@ -51,10 +51,13 @@ let commands = { init: { run: init, args: { - '--esm': { type: Boolean, description: `Initialize a \`tailwind.config.js\` file` }, - '--ts': { type: Boolean, description: `Initialize a \`tailwind.config.ts\` file` }, - '--postcss': { type: Boolean, description: `Initialize a \`${configs.postcss}\` file` }, - '--full': { type: Boolean, description: `Initialize a full \`${configs.tailwind}\` file` }, + '--esm': { type: Boolean, description: `Initialize configuration file as ESM` }, + '--ts': { type: Boolean, description: `Initialize configuration file as TypeScript` }, + '--postcss': { type: Boolean, description: `Initialize a \`postcss.config.js\` file` }, + '--full': { + type: Boolean, + description: `Include the default values for all options in the generated configuration file`, + }, '-f': '--full', '-p': '--postcss', }, From 8283c2de24b5ecb274c981c376356328da8970a7 Mon Sep 17 00:00:00 2001 From: Adam Wathan <4323180+adamwathan@users.noreply.github.com> Date: Tue, 14 Mar 2023 15:42:53 -0400 Subject: [PATCH 22/44] Remove unused code, remove `constants` file --- src/cli/build/index.js | 2 +- src/cli/index.js | 25 +- src/cli/init/index.js | 2 +- src/constants.js | 24 - src/util/resolveConfigPath.js | 8 +- stubs/defaultConfig.stub.js | 966 +---------------------------- stubs/defaultPostCssConfig.stub.js | 6 - tests/customConfig.test.js | 4 +- 8 files changed, 14 insertions(+), 1023 deletions(-) delete mode 100644 src/constants.js delete mode 100644 stubs/defaultPostCssConfig.stub.js diff --git a/src/cli/build/index.js b/src/cli/build/index.js index 2b4575c5bcdd..62c020e59f1a 100644 --- a/src/cli/build/index.js +++ b/src/cli/build/index.js @@ -5,7 +5,7 @@ import path from 'path' import { resolveDefaultConfigPath } from '../../util/resolveConfigPath.js' import { createProcessor } from './plugin.js' -export async function build(args, _configs) { +export async function build(args) { let input = args['--input'] let shouldWatch = args['--watch'] diff --git a/src/cli/index.js b/src/cli/index.js index fa3e1969ff1c..fc1497f6272e 100644 --- a/src/cli/index.js +++ b/src/cli/index.js @@ -8,29 +8,6 @@ import { build } from './build' import { help } from './help' import { init } from './init' -function isESM() { - const pkgPath = path.resolve('./package.json') - - try { - let pkg = JSON.parse(fs.readFileSync(pkgPath, 'utf8')) - return pkg.type && pkg.type === 'module' - } catch (err) { - return false - } -} - -let configs = isESM() - ? { - tailwind: 'tailwind.config.cjs', - postcss: 'postcss.config.cjs', - } - : { - tailwind: 'tailwind.config.js', - postcss: 'postcss.config.js', - } - -// --- - function oneOf(...options) { return Object.assign( (value = true) => { @@ -236,4 +213,4 @@ if (args['--help']) { process.exit(0) } -run(args, configs) +run(args) diff --git a/src/cli/init/index.js b/src/cli/init/index.js index 6158f7b9c10a..6bd7e41e2ced 100644 --- a/src/cli/init/index.js +++ b/src/cli/init/index.js @@ -14,7 +14,7 @@ function isESM() { } } -export function init(args, configs) { +export function init(args) { let messages = [] let isProjectESM = args['--ts'] || args['--esm'] || isESM() diff --git a/src/constants.js b/src/constants.js deleted file mode 100644 index 2b08f72f6445..000000000000 --- a/src/constants.js +++ /dev/null @@ -1,24 +0,0 @@ -import path from 'path' - -export const cli = 'tailwind' -export const defaultConfigFile = './tailwind.config.js' -export const defaultPostCssConfigFile = './postcss.config.js' -export const cjsConfigFile = './tailwind.config.cjs' -export const cjsPostCssConfigFile = './postcss.config.cjs' - -export const supportedConfigFiles = [cjsConfigFile, defaultConfigFile] -export const supportedPostCssConfigFile = [cjsPostCssConfigFile, defaultPostCssConfigFile] - -export const defaultConfigStubFile = path.resolve(__dirname, '../stubs/defaultConfig.stub.js') -export const simpleConfigStubFile = path.resolve(__dirname, '../stubs/simpleConfig.stub.js') -export const defaultPostCssConfigStubFile = path.resolve( - __dirname, - '../stubs/defaultPostCssConfig.stub.js' -) - -export const defaultConfigFiles = [ - './tailwind.config.js', - './tailwind.config.cjs', - './tailwind.config.mjs', - './tailwind.config.ts', -] diff --git a/src/util/resolveConfigPath.js b/src/util/resolveConfigPath.js index 3a0afaa01cad..2b5078949761 100644 --- a/src/util/resolveConfigPath.js +++ b/src/util/resolveConfigPath.js @@ -1,6 +1,12 @@ import fs from 'fs' import path from 'path' -import { defaultConfigFiles } from '../constants' + +const defaultConfigFiles = [ + './tailwind.config.js', + './tailwind.config.cjs', + './tailwind.config.mjs', + './tailwind.config.ts', +] function isObject(value) { return typeof value === 'object' && value !== null diff --git a/stubs/defaultConfig.stub.js b/stubs/defaultConfig.stub.js index b29eb4cf479d..374dd7b5bc29 100644 --- a/stubs/defaultConfig.stub.js +++ b/stubs/defaultConfig.stub.js @@ -1,965 +1 @@ -/** @type {import('tailwindcss').Config} */ -module.exports = { - content: [], - presets: [], - darkMode: 'media', // or 'class' - theme: { - accentColor: ({ theme }) => ({ - ...theme('colors'), - auto: 'auto', - }), - animation: { - none: 'none', - spin: 'spin 1s linear infinite', - ping: 'ping 1s cubic-bezier(0, 0, 0.2, 1) infinite', - pulse: 'pulse 2s cubic-bezier(0.4, 0, 0.6, 1) infinite', - bounce: 'bounce 1s infinite', - }, - aria: { - checked: 'checked="true"', - disabled: 'disabled="true"', - expanded: 'expanded="true"', - hidden: 'hidden="true"', - pressed: 'pressed="true"', - readonly: 'readonly="true"', - required: 'required="true"', - selected: 'selected="true"', - }, - aspectRatio: { - auto: 'auto', - square: '1 / 1', - video: '16 / 9', - }, - backdropBlur: ({ theme }) => theme('blur'), - backdropBrightness: ({ theme }) => theme('brightness'), - backdropContrast: ({ theme }) => theme('contrast'), - backdropGrayscale: ({ theme }) => theme('grayscale'), - backdropHueRotate: ({ theme }) => theme('hueRotate'), - backdropInvert: ({ theme }) => theme('invert'), - backdropOpacity: ({ theme }) => theme('opacity'), - backdropSaturate: ({ theme }) => theme('saturate'), - backdropSepia: ({ theme }) => theme('sepia'), - backgroundColor: ({ theme }) => theme('colors'), - backgroundImage: { - none: 'none', - 'gradient-to-t': 'linear-gradient(to top, var(--tw-gradient-stops))', - 'gradient-to-tr': 'linear-gradient(to top right, var(--tw-gradient-stops))', - 'gradient-to-r': 'linear-gradient(to right, var(--tw-gradient-stops))', - 'gradient-to-br': 'linear-gradient(to bottom right, var(--tw-gradient-stops))', - 'gradient-to-b': 'linear-gradient(to bottom, var(--tw-gradient-stops))', - 'gradient-to-bl': 'linear-gradient(to bottom left, var(--tw-gradient-stops))', - 'gradient-to-l': 'linear-gradient(to left, var(--tw-gradient-stops))', - 'gradient-to-tl': 'linear-gradient(to top left, var(--tw-gradient-stops))', - }, - backgroundOpacity: ({ theme }) => theme('opacity'), - backgroundPosition: { - bottom: 'bottom', - center: 'center', - left: 'left', - 'left-bottom': 'left bottom', - 'left-top': 'left top', - right: 'right', - 'right-bottom': 'right bottom', - 'right-top': 'right top', - top: 'top', - }, - backgroundSize: { - auto: 'auto', - cover: 'cover', - contain: 'contain', - }, - blur: { - 0: '0', - none: '0', - sm: '4px', - DEFAULT: '8px', - md: '12px', - lg: '16px', - xl: '24px', - '2xl': '40px', - '3xl': '64px', - }, - borderColor: ({ theme }) => ({ - ...theme('colors'), - DEFAULT: theme('colors.gray.200', 'currentColor'), - }), - borderOpacity: ({ theme }) => theme('opacity'), - borderRadius: { - none: '0px', - sm: '0.125rem', - DEFAULT: '0.25rem', - md: '0.375rem', - lg: '0.5rem', - xl: '0.75rem', - '2xl': '1rem', - '3xl': '1.5rem', - full: '9999px', - }, - borderSpacing: ({ theme }) => ({ - ...theme('spacing'), - }), - borderWidth: { - DEFAULT: '1px', - 0: '0px', - 2: '2px', - 4: '4px', - 8: '8px', - }, - boxShadow: { - sm: '0 1px 2px 0 rgb(0 0 0 / 0.05)', - DEFAULT: '0 1px 3px 0 rgb(0 0 0 / 0.1), 0 1px 2px -1px rgb(0 0 0 / 0.1)', - md: '0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1)', - lg: '0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1)', - xl: '0 20px 25px -5px rgb(0 0 0 / 0.1), 0 8px 10px -6px rgb(0 0 0 / 0.1)', - '2xl': '0 25px 50px -12px rgb(0 0 0 / 0.25)', - inner: 'inset 0 2px 4px 0 rgb(0 0 0 / 0.05)', - none: 'none', - }, - boxShadowColor: ({ theme }) => theme('colors'), - brightness: { - 0: '0', - 50: '.5', - 75: '.75', - 90: '.9', - 95: '.95', - 100: '1', - 105: '1.05', - 110: '1.1', - 125: '1.25', - 150: '1.5', - 200: '2', - }, - caretColor: ({ theme }) => theme('colors'), - colors: ({ colors }) => ({ - inherit: colors.inherit, - current: colors.current, - transparent: colors.transparent, - black: colors.black, - white: colors.white, - slate: colors.slate, - gray: colors.gray, - zinc: colors.zinc, - neutral: colors.neutral, - stone: colors.stone, - red: colors.red, - orange: colors.orange, - amber: colors.amber, - yellow: colors.yellow, - lime: colors.lime, - green: colors.green, - emerald: colors.emerald, - teal: colors.teal, - cyan: colors.cyan, - sky: colors.sky, - blue: colors.blue, - indigo: colors.indigo, - violet: colors.violet, - purple: colors.purple, - fuchsia: colors.fuchsia, - pink: colors.pink, - rose: colors.rose, - }), - columns: { - auto: 'auto', - 1: '1', - 2: '2', - 3: '3', - 4: '4', - 5: '5', - 6: '6', - 7: '7', - 8: '8', - 9: '9', - 10: '10', - 11: '11', - 12: '12', - '3xs': '16rem', - '2xs': '18rem', - xs: '20rem', - sm: '24rem', - md: '28rem', - lg: '32rem', - xl: '36rem', - '2xl': '42rem', - '3xl': '48rem', - '4xl': '56rem', - '5xl': '64rem', - '6xl': '72rem', - '7xl': '80rem', - }, - container: {}, - content: { - none: 'none', - }, - contrast: { - 0: '0', - 50: '.5', - 75: '.75', - 100: '1', - 125: '1.25', - 150: '1.5', - 200: '2', - }, - cursor: { - auto: 'auto', - default: 'default', - pointer: 'pointer', - wait: 'wait', - text: 'text', - move: 'move', - help: 'help', - 'not-allowed': 'not-allowed', - none: 'none', - 'context-menu': 'context-menu', - progress: 'progress', - cell: 'cell', - crosshair: 'crosshair', - 'vertical-text': 'vertical-text', - alias: 'alias', - copy: 'copy', - 'no-drop': 'no-drop', - grab: 'grab', - grabbing: 'grabbing', - 'all-scroll': 'all-scroll', - 'col-resize': 'col-resize', - 'row-resize': 'row-resize', - 'n-resize': 'n-resize', - 'e-resize': 'e-resize', - 's-resize': 's-resize', - 'w-resize': 'w-resize', - 'ne-resize': 'ne-resize', - 'nw-resize': 'nw-resize', - 'se-resize': 'se-resize', - 'sw-resize': 'sw-resize', - 'ew-resize': 'ew-resize', - 'ns-resize': 'ns-resize', - 'nesw-resize': 'nesw-resize', - 'nwse-resize': 'nwse-resize', - 'zoom-in': 'zoom-in', - 'zoom-out': 'zoom-out', - }, - divideColor: ({ theme }) => theme('borderColor'), - divideOpacity: ({ theme }) => theme('borderOpacity'), - divideWidth: ({ theme }) => theme('borderWidth'), - dropShadow: { - sm: '0 1px 1px rgb(0 0 0 / 0.05)', - DEFAULT: ['0 1px 2px rgb(0 0 0 / 0.1)', '0 1px 1px rgb(0 0 0 / 0.06)'], - md: ['0 4px 3px rgb(0 0 0 / 0.07)', '0 2px 2px rgb(0 0 0 / 0.06)'], - lg: ['0 10px 8px rgb(0 0 0 / 0.04)', '0 4px 3px rgb(0 0 0 / 0.1)'], - xl: ['0 20px 13px rgb(0 0 0 / 0.03)', '0 8px 5px rgb(0 0 0 / 0.08)'], - '2xl': '0 25px 25px rgb(0 0 0 / 0.15)', - none: '0 0 #0000', - }, - fill: ({ theme }) => ({ - none: 'none', - ...theme('colors'), - }), - flex: { - 1: '1 1 0%', - auto: '1 1 auto', - initial: '0 1 auto', - none: 'none', - }, - flexBasis: ({ theme }) => ({ - auto: 'auto', - ...theme('spacing'), - '1/2': '50%', - '1/3': '33.333333%', - '2/3': '66.666667%', - '1/4': '25%', - '2/4': '50%', - '3/4': '75%', - '1/5': '20%', - '2/5': '40%', - '3/5': '60%', - '4/5': '80%', - '1/6': '16.666667%', - '2/6': '33.333333%', - '3/6': '50%', - '4/6': '66.666667%', - '5/6': '83.333333%', - '1/12': '8.333333%', - '2/12': '16.666667%', - '3/12': '25%', - '4/12': '33.333333%', - '5/12': '41.666667%', - '6/12': '50%', - '7/12': '58.333333%', - '8/12': '66.666667%', - '9/12': '75%', - '10/12': '83.333333%', - '11/12': '91.666667%', - full: '100%', - }), - flexGrow: { - 0: '0', - DEFAULT: '1', - }, - flexShrink: { - 0: '0', - DEFAULT: '1', - }, - fontFamily: { - sans: [ - 'ui-sans-serif', - 'system-ui', - '-apple-system', - 'BlinkMacSystemFont', - '"Segoe UI"', - 'Roboto', - '"Helvetica Neue"', - 'Arial', - '"Noto Sans"', - 'sans-serif', - '"Apple Color Emoji"', - '"Segoe UI Emoji"', - '"Segoe UI Symbol"', - '"Noto Color Emoji"', - ], - serif: ['ui-serif', 'Georgia', 'Cambria', '"Times New Roman"', 'Times', 'serif'], - mono: [ - 'ui-monospace', - 'SFMono-Regular', - 'Menlo', - 'Monaco', - 'Consolas', - '"Liberation Mono"', - '"Courier New"', - 'monospace', - ], - }, - fontSize: { - xs: ['0.75rem', { lineHeight: '1rem' }], - sm: ['0.875rem', { lineHeight: '1.25rem' }], - base: ['1rem', { lineHeight: '1.5rem' }], - lg: ['1.125rem', { lineHeight: '1.75rem' }], - xl: ['1.25rem', { lineHeight: '1.75rem' }], - '2xl': ['1.5rem', { lineHeight: '2rem' }], - '3xl': ['1.875rem', { lineHeight: '2.25rem' }], - '4xl': ['2.25rem', { lineHeight: '2.5rem' }], - '5xl': ['3rem', { lineHeight: '1' }], - '6xl': ['3.75rem', { lineHeight: '1' }], - '7xl': ['4.5rem', { lineHeight: '1' }], - '8xl': ['6rem', { lineHeight: '1' }], - '9xl': ['8rem', { lineHeight: '1' }], - }, - fontWeight: { - thin: '100', - extralight: '200', - light: '300', - normal: '400', - medium: '500', - semibold: '600', - bold: '700', - extrabold: '800', - black: '900', - }, - gap: ({ theme }) => theme('spacing'), - gradientColorStops: ({ theme }) => theme('colors'), - grayscale: { - 0: '0', - DEFAULT: '100%', - }, - gridAutoColumns: { - auto: 'auto', - min: 'min-content', - max: 'max-content', - fr: 'minmax(0, 1fr)', - }, - gridAutoRows: { - auto: 'auto', - min: 'min-content', - max: 'max-content', - fr: 'minmax(0, 1fr)', - }, - gridColumn: { - auto: 'auto', - 'span-1': 'span 1 / span 1', - 'span-2': 'span 2 / span 2', - 'span-3': 'span 3 / span 3', - 'span-4': 'span 4 / span 4', - 'span-5': 'span 5 / span 5', - 'span-6': 'span 6 / span 6', - 'span-7': 'span 7 / span 7', - 'span-8': 'span 8 / span 8', - 'span-9': 'span 9 / span 9', - 'span-10': 'span 10 / span 10', - 'span-11': 'span 11 / span 11', - 'span-12': 'span 12 / span 12', - 'span-full': '1 / -1', - }, - gridColumnEnd: { - auto: 'auto', - 1: '1', - 2: '2', - 3: '3', - 4: '4', - 5: '5', - 6: '6', - 7: '7', - 8: '8', - 9: '9', - 10: '10', - 11: '11', - 12: '12', - 13: '13', - }, - gridColumnStart: { - auto: 'auto', - 1: '1', - 2: '2', - 3: '3', - 4: '4', - 5: '5', - 6: '6', - 7: '7', - 8: '8', - 9: '9', - 10: '10', - 11: '11', - 12: '12', - 13: '13', - }, - gridRow: { - auto: 'auto', - 'span-1': 'span 1 / span 1', - 'span-2': 'span 2 / span 2', - 'span-3': 'span 3 / span 3', - 'span-4': 'span 4 / span 4', - 'span-5': 'span 5 / span 5', - 'span-6': 'span 6 / span 6', - 'span-full': '1 / -1', - }, - gridRowEnd: { - auto: 'auto', - 1: '1', - 2: '2', - 3: '3', - 4: '4', - 5: '5', - 6: '6', - 7: '7', - }, - gridRowStart: { - auto: 'auto', - 1: '1', - 2: '2', - 3: '3', - 4: '4', - 5: '5', - 6: '6', - 7: '7', - }, - gridTemplateColumns: { - none: 'none', - 1: 'repeat(1, minmax(0, 1fr))', - 2: 'repeat(2, minmax(0, 1fr))', - 3: 'repeat(3, minmax(0, 1fr))', - 4: 'repeat(4, minmax(0, 1fr))', - 5: 'repeat(5, minmax(0, 1fr))', - 6: 'repeat(6, minmax(0, 1fr))', - 7: 'repeat(7, minmax(0, 1fr))', - 8: 'repeat(8, minmax(0, 1fr))', - 9: 'repeat(9, minmax(0, 1fr))', - 10: 'repeat(10, minmax(0, 1fr))', - 11: 'repeat(11, minmax(0, 1fr))', - 12: 'repeat(12, minmax(0, 1fr))', - }, - gridTemplateRows: { - none: 'none', - 1: 'repeat(1, minmax(0, 1fr))', - 2: 'repeat(2, minmax(0, 1fr))', - 3: 'repeat(3, minmax(0, 1fr))', - 4: 'repeat(4, minmax(0, 1fr))', - 5: 'repeat(5, minmax(0, 1fr))', - 6: 'repeat(6, minmax(0, 1fr))', - }, - height: ({ theme }) => ({ - auto: 'auto', - ...theme('spacing'), - '1/2': '50%', - '1/3': '33.333333%', - '2/3': '66.666667%', - '1/4': '25%', - '2/4': '50%', - '3/4': '75%', - '1/5': '20%', - '2/5': '40%', - '3/5': '60%', - '4/5': '80%', - '1/6': '16.666667%', - '2/6': '33.333333%', - '3/6': '50%', - '4/6': '66.666667%', - '5/6': '83.333333%', - full: '100%', - screen: '100vh', - min: 'min-content', - max: 'max-content', - fit: 'fit-content', - }), - hueRotate: { - 0: '0deg', - 15: '15deg', - 30: '30deg', - 60: '60deg', - 90: '90deg', - 180: '180deg', - }, - inset: ({ theme }) => ({ - auto: 'auto', - ...theme('spacing'), - '1/2': '50%', - '1/3': '33.333333%', - '2/3': '66.666667%', - '1/4': '25%', - '2/4': '50%', - '3/4': '75%', - full: '100%', - }), - invert: { - 0: '0', - DEFAULT: '100%', - }, - keyframes: { - spin: { - to: { - transform: 'rotate(360deg)', - }, - }, - ping: { - '75%, 100%': { - transform: 'scale(2)', - opacity: '0', - }, - }, - pulse: { - '50%': { - opacity: '.5', - }, - }, - bounce: { - '0%, 100%': { - transform: 'translateY(-25%)', - animationTimingFunction: 'cubic-bezier(0.8,0,1,1)', - }, - '50%': { - transform: 'none', - animationTimingFunction: 'cubic-bezier(0,0,0.2,1)', - }, - }, - }, - letterSpacing: { - tighter: '-0.05em', - tight: '-0.025em', - normal: '0em', - wide: '0.025em', - wider: '0.05em', - widest: '0.1em', - }, - lineHeight: { - none: '1', - tight: '1.25', - snug: '1.375', - normal: '1.5', - relaxed: '1.625', - loose: '2', - 3: '.75rem', - 4: '1rem', - 5: '1.25rem', - 6: '1.5rem', - 7: '1.75rem', - 8: '2rem', - 9: '2.25rem', - 10: '2.5rem', - }, - listStyleType: { - none: 'none', - disc: 'disc', - decimal: 'decimal', - }, - margin: ({ theme }) => ({ - auto: 'auto', - ...theme('spacing'), - }), - lineClamp: { - 1: '1', - 2: '2', - 3: '3', - 4: '4', - 5: '5', - 6: '6', - }, - maxHeight: ({ theme }) => ({ - ...theme('spacing'), - none: 'none', - full: '100%', - screen: '100vh', - min: 'min-content', - max: 'max-content', - fit: 'fit-content', - }), - maxWidth: ({ theme, breakpoints }) => ({ - none: 'none', - 0: '0rem', - xs: '20rem', - sm: '24rem', - md: '28rem', - lg: '32rem', - xl: '36rem', - '2xl': '42rem', - '3xl': '48rem', - '4xl': '56rem', - '5xl': '64rem', - '6xl': '72rem', - '7xl': '80rem', - full: '100%', - min: 'min-content', - max: 'max-content', - fit: 'fit-content', - prose: '65ch', - ...breakpoints(theme('screens')), - }), - minHeight: { - 0: '0px', - full: '100%', - screen: '100vh', - min: 'min-content', - max: 'max-content', - fit: 'fit-content', - }, - minWidth: { - 0: '0px', - full: '100%', - min: 'min-content', - max: 'max-content', - fit: 'fit-content', - }, - objectPosition: { - bottom: 'bottom', - center: 'center', - left: 'left', - 'left-bottom': 'left bottom', - 'left-top': 'left top', - right: 'right', - 'right-bottom': 'right bottom', - 'right-top': 'right top', - top: 'top', - }, - opacity: { - 0: '0', - 5: '0.05', - 10: '0.1', - 20: '0.2', - 25: '0.25', - 30: '0.3', - 40: '0.4', - 50: '0.5', - 60: '0.6', - 70: '0.7', - 75: '0.75', - 80: '0.8', - 90: '0.9', - 95: '0.95', - 100: '1', - }, - order: { - first: '-9999', - last: '9999', - none: '0', - 1: '1', - 2: '2', - 3: '3', - 4: '4', - 5: '5', - 6: '6', - 7: '7', - 8: '8', - 9: '9', - 10: '10', - 11: '11', - 12: '12', - }, - outlineColor: ({ theme }) => theme('colors'), - outlineOffset: { - 0: '0px', - 1: '1px', - 2: '2px', - 4: '4px', - 8: '8px', - }, - outlineWidth: { - 0: '0px', - 1: '1px', - 2: '2px', - 4: '4px', - 8: '8px', - }, - padding: ({ theme }) => theme('spacing'), - placeholderColor: ({ theme }) => theme('colors'), - placeholderOpacity: ({ theme }) => theme('opacity'), - ringColor: ({ theme }) => ({ - DEFAULT: theme('colors.blue.500', '#3b82f6'), - ...theme('colors'), - }), - ringOffsetColor: ({ theme }) => theme('colors'), - ringOffsetWidth: { - 0: '0px', - 1: '1px', - 2: '2px', - 4: '4px', - 8: '8px', - }, - ringOpacity: ({ theme }) => ({ - DEFAULT: '0.5', - ...theme('opacity'), - }), - ringWidth: { - DEFAULT: '3px', - 0: '0px', - 1: '1px', - 2: '2px', - 4: '4px', - 8: '8px', - }, - rotate: { - 0: '0deg', - 1: '1deg', - 2: '2deg', - 3: '3deg', - 6: '6deg', - 12: '12deg', - 45: '45deg', - 90: '90deg', - 180: '180deg', - }, - saturate: { - 0: '0', - 50: '.5', - 100: '1', - 150: '1.5', - 200: '2', - }, - scale: { - 0: '0', - 50: '.5', - 75: '.75', - 90: '.9', - 95: '.95', - 100: '1', - 105: '1.05', - 110: '1.1', - 125: '1.25', - 150: '1.5', - }, - screens: { - sm: '640px', - md: '768px', - lg: '1024px', - xl: '1280px', - '2xl': '1536px', - }, - scrollMargin: ({ theme }) => ({ - ...theme('spacing'), - }), - scrollPadding: ({ theme }) => theme('spacing'), - sepia: { - 0: '0', - DEFAULT: '100%', - }, - skew: { - 0: '0deg', - 1: '1deg', - 2: '2deg', - 3: '3deg', - 6: '6deg', - 12: '12deg', - }, - space: ({ theme }) => ({ - ...theme('spacing'), - }), - spacing: { - px: '1px', - 0: '0px', - 0.5: '0.125rem', - 1: '0.25rem', - 1.5: '0.375rem', - 2: '0.5rem', - 2.5: '0.625rem', - 3: '0.75rem', - 3.5: '0.875rem', - 4: '1rem', - 5: '1.25rem', - 6: '1.5rem', - 7: '1.75rem', - 8: '2rem', - 9: '2.25rem', - 10: '2.5rem', - 11: '2.75rem', - 12: '3rem', - 14: '3.5rem', - 16: '4rem', - 20: '5rem', - 24: '6rem', - 28: '7rem', - 32: '8rem', - 36: '9rem', - 40: '10rem', - 44: '11rem', - 48: '12rem', - 52: '13rem', - 56: '14rem', - 60: '15rem', - 64: '16rem', - 72: '18rem', - 80: '20rem', - 96: '24rem', - }, - stroke: ({ theme }) => ({ - none: 'none', - ...theme('colors'), - }), - strokeWidth: { - 0: '0', - 1: '1', - 2: '2', - }, - supports: {}, - data: {}, - textColor: ({ theme }) => theme('colors'), - textDecorationColor: ({ theme }) => theme('colors'), - textDecorationThickness: { - auto: 'auto', - 'from-font': 'from-font', - 0: '0px', - 1: '1px', - 2: '2px', - 4: '4px', - 8: '8px', - }, - textIndent: ({ theme }) => ({ - ...theme('spacing'), - }), - textOpacity: ({ theme }) => theme('opacity'), - textUnderlineOffset: { - auto: 'auto', - 0: '0px', - 1: '1px', - 2: '2px', - 4: '4px', - 8: '8px', - }, - transformOrigin: { - center: 'center', - top: 'top', - 'top-right': 'top right', - right: 'right', - 'bottom-right': 'bottom right', - bottom: 'bottom', - 'bottom-left': 'bottom left', - left: 'left', - 'top-left': 'top left', - }, - transitionDelay: { - 0: '0s', - 75: '75ms', - 100: '100ms', - 150: '150ms', - 200: '200ms', - 300: '300ms', - 500: '500ms', - 700: '700ms', - 1000: '1000ms', - }, - transitionDuration: { - DEFAULT: '150ms', - 0: '0s', - 75: '75ms', - 100: '100ms', - 150: '150ms', - 200: '200ms', - 300: '300ms', - 500: '500ms', - 700: '700ms', - 1000: '1000ms', - }, - transitionProperty: { - none: 'none', - all: 'all', - DEFAULT: - 'color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, backdrop-filter', - colors: 'color, background-color, border-color, text-decoration-color, fill, stroke', - opacity: 'opacity', - shadow: 'box-shadow', - transform: 'transform', - }, - transitionTimingFunction: { - DEFAULT: 'cubic-bezier(0.4, 0, 0.2, 1)', - linear: 'linear', - in: 'cubic-bezier(0.4, 0, 1, 1)', - out: 'cubic-bezier(0, 0, 0.2, 1)', - 'in-out': 'cubic-bezier(0.4, 0, 0.2, 1)', - }, - translate: ({ theme }) => ({ - ...theme('spacing'), - '1/2': '50%', - '1/3': '33.333333%', - '2/3': '66.666667%', - '1/4': '25%', - '2/4': '50%', - '3/4': '75%', - full: '100%', - }), - width: ({ theme }) => ({ - auto: 'auto', - ...theme('spacing'), - '1/2': '50%', - '1/3': '33.333333%', - '2/3': '66.666667%', - '1/4': '25%', - '2/4': '50%', - '3/4': '75%', - '1/5': '20%', - '2/5': '40%', - '3/5': '60%', - '4/5': '80%', - '1/6': '16.666667%', - '2/6': '33.333333%', - '3/6': '50%', - '4/6': '66.666667%', - '5/6': '83.333333%', - '1/12': '8.333333%', - '2/12': '16.666667%', - '3/12': '25%', - '4/12': '33.333333%', - '5/12': '41.666667%', - '6/12': '50%', - '7/12': '58.333333%', - '8/12': '66.666667%', - '9/12': '75%', - '10/12': '83.333333%', - '11/12': '91.666667%', - full: '100%', - screen: '100vw', - min: 'min-content', - max: 'max-content', - fit: 'fit-content', - }), - willChange: { - auto: 'auto', - scroll: 'scroll-position', - contents: 'contents', - transform: 'transform', - }, - zIndex: { - auto: 'auto', - 0: '0', - 10: '10', - 20: '20', - 30: '30', - 40: '40', - 50: '50', - }, - }, - plugins: [], -} +module.exports = require('./config.full.js') diff --git a/stubs/defaultPostCssConfig.stub.js b/stubs/defaultPostCssConfig.stub.js deleted file mode 100644 index 33ad091d26d8..000000000000 --- a/stubs/defaultPostCssConfig.stub.js +++ /dev/null @@ -1,6 +0,0 @@ -module.exports = { - plugins: { - tailwindcss: {}, - autoprefixer: {}, - }, -} diff --git a/tests/customConfig.test.js b/tests/customConfig.test.js index 7c5a9ead28d7..5b83f9f2e81f 100644 --- a/tests/customConfig.test.js +++ b/tests/customConfig.test.js @@ -1,10 +1,12 @@ import fs from 'fs' import path from 'path' -import { cjsConfigFile, defaultConfigFile } from '../src/constants' import inTempDirectory from '../jest/runInTempDirectory' import { crosscheck, run, html, css, javascript } from './util/run' +const defaultConfigFile = 'tailwind.config.js' +const cjsConfigFile = 'tailwind.config.cjs' + crosscheck(() => { test('it uses the values from the custom config file', () => { let config = require(path.resolve(`${__dirname}/fixtures/custom-config.js`)) From 9604485e4450d7cdb3c7bef365dd89bbb88aab27 Mon Sep 17 00:00:00 2001 From: Adam Wathan <4323180+adamwathan@users.noreply.github.com> Date: Tue, 14 Mar 2023 15:43:01 -0400 Subject: [PATCH 23/44] Fix TS warning --- src/oxide/cli/init/index.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/oxide/cli/init/index.ts b/src/oxide/cli/init/index.ts index 5bf8af2709fc..da47b44d9e29 100644 --- a/src/oxide/cli/init/index.ts +++ b/src/oxide/cli/init/index.ts @@ -2,7 +2,7 @@ import fs from 'fs' import path from 'path' export function init(args, configs) { - let messages = [] + let messages: string[] = [] let tailwindConfigLocation = path.resolve(args['_'][1] ?? `./${configs.tailwind}`) if (fs.existsSync(tailwindConfigLocation)) { From 76296e7670e459871f0636bc97bbe50e1a35f911 Mon Sep 17 00:00:00 2001 From: Robin Malfait Date: Tue, 14 Mar 2023 20:55:48 +0100 Subject: [PATCH 24/44] apply CLI changes to the Oxide version --- src/oxide/cli/build/index.ts | 2 +- src/oxide/cli/index.ts | 22 +++++++------------- src/oxide/cli/init/index.ts | 39 +++++++++++++++++++++++++++++------- 3 files changed, 40 insertions(+), 23 deletions(-) diff --git a/src/oxide/cli/build/index.ts b/src/oxide/cli/build/index.ts index 6744c64d5d73..ba7c87459603 100644 --- a/src/oxide/cli/build/index.ts +++ b/src/oxide/cli/build/index.ts @@ -3,7 +3,7 @@ import path from 'path' import { resolveDefaultConfigPath } from '../../../util/resolveConfigPath' import { createProcessor } from './plugin' -export async function build(args, configs) { +export async function build(args) { let input = args['--input'] let shouldWatch = args['--watch'] diff --git a/src/oxide/cli/index.ts b/src/oxide/cli/index.ts index ca6b9263ca4f..96b284db9393 100644 --- a/src/oxide/cli/index.ts +++ b/src/oxide/cli/index.ts @@ -8,19 +8,6 @@ import { build } from './build' import { help } from './help' import { init } from './init' -function isESM() { - const pkgPath = path.resolve('./package.json') - - try { - let pkg = JSON.parse(fs.readFileSync(pkgPath, 'utf8')) - return pkg.type && pkg.type === 'module' - } catch (err) { - return false - } -} - -let configs = isESM() ? { tailwind: 'tailwind.config.cjs' } : { tailwind: 'tailwind.config.js' } - // --- function oneOf(...options) { @@ -43,7 +30,12 @@ let commands = { init: { run: init, args: { - '--full': { type: Boolean, description: `Initialize a full \`${configs.tailwind}\` file` }, + '--esm': { type: Boolean, description: `Initialize configuration file as ESM` }, + '--ts': { type: Boolean, description: `Initialize configuration file as TypeScript` }, + '--full': { + type: Boolean, + description: `Include the default values for all options in the generated configuration file`, + }, '-f': '--full', }, }, @@ -209,4 +201,4 @@ if (args['--help']) { process.exit(0) } -run(args, configs) +run(args) diff --git a/src/oxide/cli/init/index.ts b/src/oxide/cli/init/index.ts index da47b44d9e29..208890540605 100644 --- a/src/oxide/cli/init/index.ts +++ b/src/oxide/cli/init/index.ts @@ -1,24 +1,49 @@ import fs from 'fs' import path from 'path' -export function init(args, configs) { +function isESM() { + const pkgPath = path.resolve('./package.json') + + try { + let pkg = JSON.parse(fs.readFileSync(pkgPath, 'utf8')) + return pkg.type && pkg.type === 'module' + } catch (err) { + return false + } +} + +export function init(args) { let messages: string[] = [] - let tailwindConfigLocation = path.resolve(args['_'][1] ?? `./${configs.tailwind}`) + let isProjectESM = args['--ts'] || args['--esm'] || isESM() + let syntax = args['--ts'] ? 'ts' : isProjectESM ? 'js' : 'cjs' + let extension = args['--ts'] ? 'ts' : 'js' + + let tailwindConfigLocation = path.resolve(args['_'][1] ?? `./tailwind.config.${extension}`) + if (fs.existsSync(tailwindConfigLocation)) { messages.push(`${path.basename(tailwindConfigLocation)} already exists.`) } else { - let stubFile = fs.readFileSync( + let stubContentsFile = fs.readFileSync( args['--full'] - ? path.resolve(__dirname, '../../../../stubs/defaultConfig.stub.js') - : path.resolve(__dirname, '../../../../stubs/simpleConfig.stub.js'), + ? path.resolve(__dirname, '../../../../stubs/config.full.js') + : path.resolve(__dirname, '../../../../stubs/config.simple.js'), + 'utf8' + ) + + let stubFile = fs.readFileSync( + path.resolve(__dirname, `../../../../stubs/tailwind.config.${syntax}`), 'utf8' ) // Change colors import - stubFile = stubFile.replace('../colors', 'tailwindcss/colors') + stubContentsFile = stubContentsFile.replace('../colors', 'tailwindcss/colors') - fs.writeFileSync(tailwindConfigLocation, stubFile, 'utf8') + // Replace contents of {ts,js,cjs} file with the stub {simple,full}. + stubFile = + stubFile + .replace('__CONFIG__', stubContentsFile.replace('module.exports =', '').trim()) + .trim() + '\n\n' messages.push(`Created Tailwind CSS config file: ${path.basename(tailwindConfigLocation)}`) } From 1ec55a2dee0a330cbd6bf5123a6be74d5e0eedf9 Mon Sep 17 00:00:00 2001 From: Robin Malfait Date: Tue, 14 Mar 2023 21:04:37 +0100 Subject: [PATCH 25/44] update `--help` output in CLI tests --- integrations/tailwindcss-cli/tests/cli.test.js | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/integrations/tailwindcss-cli/tests/cli.test.js b/integrations/tailwindcss-cli/tests/cli.test.js index def432cab4e5..acadabe442f4 100644 --- a/integrations/tailwindcss-cli/tests/cli.test.js +++ b/integrations/tailwindcss-cli/tests/cli.test.js @@ -577,8 +577,10 @@ describe('Init command', () => { tailwindcss init [options] Options: - -f, --full Initialize a full \`tailwind.config.js\` file + --esm Initialize configuration file as ESM + --ts Initialize configuration file as TypeScript -p, --postcss Initialize a \`postcss.config.js\` file + -f, --full Include the default values for all options in the generated configuration file -h, --help Display usage information `) ) @@ -605,8 +607,10 @@ describe('Init command', () => { tailwindcss init [options] Options: - -f, --full Initialize a full \`tailwind.config.cjs\` file - -p, --postcss Initialize a \`postcss.config.cjs\` file + --esm Initialize configuration file as ESM + --ts Initialize configuration file as TypeScript + -p, --postcss Initialize a \`postcss.config.js\` file + -f, --full Include the default values for all options in the generated configuration file -h, --help Display usage information `) ) From f114cb0d0814133f2f09cf8bbb30809b56abe0f7 Mon Sep 17 00:00:00 2001 From: Robin Malfait Date: Tue, 14 Mar 2023 21:17:32 +0100 Subject: [PATCH 26/44] WIP: make tests work on CI TODO: Test all combinations of `--full`, `--ts`, `--postcss`, and `--esm`. --- .../tailwindcss-cli/tests/cli.test.js | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/integrations/tailwindcss-cli/tests/cli.test.js b/integrations/tailwindcss-cli/tests/cli.test.js index acadabe442f4..552800e16359 100644 --- a/integrations/tailwindcss-cli/tests/cli.test.js +++ b/integrations/tailwindcss-cli/tests/cli.test.js @@ -532,6 +532,17 @@ describe('Build command', () => { }) describe('Init command', () => { + xit.each([ + { flags: [] }, + { flags: ['--ts'] }, + { flags: ['--esm'] }, + { flags: ['--full'] }, + { flags: ['--ts', '--full'] }, + { flags: ['--esm', '--full'] }, + ])('works with all these flags: %j', async ({ flags }) => { + let { combined } = await $(`${EXECUTABLE} init ${flags.join(' ')}`) + }) + test('--full', async () => { cleanupFile('full.config.js') @@ -618,8 +629,8 @@ describe('Init command', () => { await writeInputFile('../package.json', pkg) }) - test('cjs config created when in ESM package', async () => { - cleanupFile('tailwind.config.cjs') + xtest('cjs config created when in ESM package', async () => { + cleanupFile('tailwind.config.js') let pkg = await readOutputFile('../package.json') @@ -635,14 +646,14 @@ describe('Init command', () => { expect(combined).toMatchInlineSnapshot(` " - Created Tailwind CSS config file: tailwind.config.cjs + Created Tailwind CSS config file: tailwind.config.js " `) expect(await fileExists('./tailwind.config.cjs')).toBe(true) // Not a clean way to test this. - expect(await readOutputFile('../tailwind.config.cjs')).toContain('module.exports =') + expect(await readOutputFile('../tailwind.config.js')).toContain('module.exports =') await writeInputFile('../package.json', pkg) }) From 2367d02cd44db3aad5e16f64d361aba1a8025fee Mon Sep 17 00:00:00 2001 From: Jordan Pittman Date: Wed, 15 Mar 2023 09:18:41 -0400 Subject: [PATCH 27/44] wip --- .../tailwindcss-cli/tests/cli.test.js | 39 +++++++++++++++---- 1 file changed, 32 insertions(+), 7 deletions(-) diff --git a/integrations/tailwindcss-cli/tests/cli.test.js b/integrations/tailwindcss-cli/tests/cli.test.js index 552800e16359..0e817e8a1718 100644 --- a/integrations/tailwindcss-cli/tests/cli.test.js +++ b/integrations/tailwindcss-cli/tests/cli.test.js @@ -1,3 +1,4 @@ +let fs = require('fs') let path = require('path') let $ = require('../../execute') let { css, html, javascript } = require('../../syntax') @@ -533,14 +534,38 @@ describe('Build command', () => { describe('Init command', () => { xit.each([ - { flags: [] }, - { flags: ['--ts'] }, - { flags: ['--esm'] }, - { flags: ['--full'] }, - { flags: ['--ts', '--full'] }, - { flags: ['--esm', '--full'] }, - ])('works with all these flags: %j', async ({ flags }) => { + { flags: [], name: 'tailwind.config.js' }, + { flags: ['--ts'], name: 'tailwind.config.ts' }, + { flags: ['--esm'], name: 'tailwind.config.js' }, + { flags: ['--full'], name: 'tailwind.config.js' }, + { flags: ['--ts', '--full'], name: 'tailwind.config.ts' }, + { flags: ['--esm', '--full'], name: 'tailwind.config.js' }, + ])('works with all these flags: %j', async ({ flags, name }) => { + cleanupFile(name) + let { combined } = await $(`${EXECUTABLE} init ${flags.join(' ')}`) + + expect(combined).toMatchInlineSnapshot(` + " + Created Tailwind CSS config file: ${name} + " + `) + + expect(await fileExists(name)).toBe(true) + + let content = await readOutputFile(`../${name}`) + + if (flags.includes('--ts') || flags.includes('--esm')) { + expect(content).toContain('export default') + expect(content).not.toContain('module.exports =') + } else { + expect(content).toContain('module.exports =') + expect(content).not.toContain('export default') + } + + if (flags.includes('--full')) { + expect(content.split('\n').length).toBeGreaterThan(50) + } }) test('--full', async () => { From 74d51f640fcb5b98f0e4028211ce4544f7129b35 Mon Sep 17 00:00:00 2001 From: Robin Malfait Date: Wed, 15 Mar 2023 14:32:08 +0100 Subject: [PATCH 28/44] remove unused `fs` --- integrations/tailwindcss-cli/tests/cli.test.js | 1 - 1 file changed, 1 deletion(-) diff --git a/integrations/tailwindcss-cli/tests/cli.test.js b/integrations/tailwindcss-cli/tests/cli.test.js index 0e817e8a1718..a7c2ae758536 100644 --- a/integrations/tailwindcss-cli/tests/cli.test.js +++ b/integrations/tailwindcss-cli/tests/cli.test.js @@ -1,4 +1,3 @@ -let fs = require('fs') let path = require('path') let $ = require('../../execute') let { css, html, javascript } = require('../../syntax') From 5f83b5719ff19be8b9abf213f336ca8cbb1ed634 Mon Sep 17 00:00:00 2001 From: Jordan Pittman Date: Wed, 15 Mar 2023 09:46:59 -0400 Subject: [PATCH 29/44] Fix init tests MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Did you know you could pass an empty args to a command? No? Me neither. ¯\_(ツ)_/¯ --- integrations/execute.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/integrations/execute.js b/integrations/execute.js index 57dc14e8ed41..f5ab2131804a 100644 --- a/integrations/execute.js +++ b/integrations/execute.js @@ -26,7 +26,7 @@ module.exports = function $(command, options = {}) { let args = options.shell ? [command] : (() => { - let args = command.split(' ') + let args = command.trim().split(/\s+/) command = args.shift() command = command === 'node' From 8435352f8ecee5aa65cd36e4b26ee75747e0c381 Mon Sep 17 00:00:00 2001 From: Robin Malfait Date: Wed, 15 Mar 2023 15:26:01 +0100 Subject: [PATCH 30/44] bump `napi-derive` --- oxide/Cargo.lock | 21 +++++++++++++++------ oxide/crates/node/Cargo.toml | 2 +- 2 files changed, 16 insertions(+), 7 deletions(-) diff --git a/oxide/Cargo.lock b/oxide/Cargo.lock index f15b12ee3afd..5b959d72682a 100644 --- a/oxide/Cargo.lock +++ b/oxide/Cargo.lock @@ -132,9 +132,12 @@ dependencies = [ [[package]] name = "convert_case" -version = "0.5.0" +version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fb4a24b1aaf0fd0ce8b45161144d6f42cd91677fd5940fd431183eb023b3a2b8" +checksum = "ec182b0ca2f35d8fc196cf3404988fd8b8c739a4d270ff118a398feb0cbec1ca" +dependencies = [ + "unicode-segmentation", +] [[package]] name = "criterion" @@ -461,9 +464,9 @@ checksum = "882a73d9ef23e8dc2ebbffb6a6ae2ef467c0f18ac10711e4cc59c5485d41df0e" [[package]] name = "napi-derive" -version = "2.9.1" +version = "2.11.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "39f3d8b02ef355898ea98f69082d9a183c8701c836942c2daf3e92364e88a0fa" +checksum = "6e367c72b3f0243d490f0cf4feed9a28e40e4e9cba16912951dbeccf6c607576" dependencies = [ "convert_case", "napi-derive-backend", @@ -474,9 +477,9 @@ dependencies = [ [[package]] name = "napi-derive-backend" -version = "1.0.38" +version = "1.0.45" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c35640513eb442fcbd1653a1c112fb6b2cc12b54d82f9c141f5859c721cab36" +checksum = "c2cf4ba5f1f6d51b9b5e2d809e229201f3aa14f198d58ec9ba4ecf82dbabb381" dependencies = [ "convert_case", "once_cell", @@ -908,6 +911,12 @@ version = "1.0.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6ceab39d59e4c9499d4e5a8ee0e2735b891bb7308ac83dfb4e80cad195c9f6f3" +[[package]] +name = "unicode-segmentation" +version = "1.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1dd624098567895118886609431a7c3b8f516e41d30e0643f03d94592a147e36" + [[package]] name = "unicode-width" version = "0.1.10" diff --git a/oxide/crates/node/Cargo.toml b/oxide/crates/node/Cargo.toml index 38735bf5c056..54995fa9ebd3 100644 --- a/oxide/crates/node/Cargo.toml +++ b/oxide/crates/node/Cargo.toml @@ -9,7 +9,7 @@ crate-type = ["cdylib"] [dependencies] # Default enable napi4 feature, see https://nodejs.org/api/n-api.html#node-api-version-matrix napi = { version = "2.10.0", default-features = false, features = ["napi4"] } -napi-derive = "2.9.1" +napi-derive = "2.11.1" tailwindcss-core = { path = "../core" } rayon = "1.5.3" From eeb8eb4754c11673d0949a2a5c7135705633c2e3 Mon Sep 17 00:00:00 2001 From: Robin Malfait Date: Wed, 15 Mar 2023 15:59:10 +0100 Subject: [PATCH 31/44] list extensions we are interested in --- src/lib/getModuleDependencies.js | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/lib/getModuleDependencies.js b/src/lib/getModuleDependencies.js index 7bc12aa720de..3069eedffeeb 100644 --- a/src/lib/getModuleDependencies.js +++ b/src/lib/getModuleDependencies.js @@ -23,7 +23,10 @@ function* _getModuleDependencies(entryFile) { try { let basedir = path.dirname(mod.file) - let depPath = resolve.sync(dep, { basedir }) + let depPath = resolve.sync(dep, { + basedir, + extensions: ['.js', '.cjs', '.mjs', '.ts', '.cts', '.mts'], + }) yield* _getModuleDependencies(depPath) } catch (_err) { // eslint-disable-next-line no-empty From 407ab202a0bd303874e5c24386465970b14177c0 Mon Sep 17 00:00:00 2001 From: Robin Malfait Date: Wed, 15 Mar 2023 16:17:49 +0100 Subject: [PATCH 32/44] no-op the `removeFile` if file doesn't exist --- integrations/io.js | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/integrations/io.js b/integrations/io.js index 383776838a4e..f5ebe315de78 100644 --- a/integrations/io.js +++ b/integrations/io.js @@ -97,6 +97,17 @@ module.exports = function ({ }, async removeFile(file) { let filePath = path.resolve(toolRoot, file) + + // File doesn't exist, so we don't need to cache it. + if ( + !(await fs + .access(filePath) + .then(() => true) + .catch(() => false)) + ) { + return + } + if (!fileCache[filePath]) { fileCache[filePath] = await fs.readFile(filePath, 'utf8') } From cbfae9889d77f1d8dc96d369727b7b975fe5115c Mon Sep 17 00:00:00 2001 From: Robin Malfait Date: Wed, 15 Mar 2023 16:18:17 +0100 Subject: [PATCH 33/44] ensure all `init` flags work --- integrations/tailwindcss-cli/tests/cli.test.js | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/integrations/tailwindcss-cli/tests/cli.test.js b/integrations/tailwindcss-cli/tests/cli.test.js index a7c2ae758536..5a7847fd239f 100644 --- a/integrations/tailwindcss-cli/tests/cli.test.js +++ b/integrations/tailwindcss-cli/tests/cli.test.js @@ -532,7 +532,7 @@ describe('Build command', () => { }) describe('Init command', () => { - xit.each([ + it.each([ { flags: [], name: 'tailwind.config.js' }, { flags: ['--ts'], name: 'tailwind.config.ts' }, { flags: ['--esm'], name: 'tailwind.config.js' }, @@ -540,7 +540,7 @@ describe('Init command', () => { { flags: ['--ts', '--full'], name: 'tailwind.config.ts' }, { flags: ['--esm', '--full'], name: 'tailwind.config.js' }, ])('works with all these flags: %j', async ({ flags, name }) => { - cleanupFile(name) + await removeFile(name) let { combined } = await $(`${EXECUTABLE} init ${flags.join(' ')}`) @@ -562,6 +562,10 @@ describe('Init command', () => { expect(content).not.toContain('export default') } + if (flags.includes('--ts')) { + expect(content).toContain('satisfies Config') + } + if (flags.includes('--full')) { expect(content.split('\n').length).toBeGreaterThan(50) } From 6813c0c7eabe1b101270a660b1b17c0f3358ce52 Mon Sep 17 00:00:00 2001 From: Robin Malfait Date: Wed, 15 Mar 2023 16:25:08 +0100 Subject: [PATCH 34/44] ensure we cleanup the new files --- integrations/tailwindcss-cli/tests/cli.test.js | 1 + 1 file changed, 1 insertion(+) diff --git a/integrations/tailwindcss-cli/tests/cli.test.js b/integrations/tailwindcss-cli/tests/cli.test.js index 5a7847fd239f..46d7e206527f 100644 --- a/integrations/tailwindcss-cli/tests/cli.test.js +++ b/integrations/tailwindcss-cli/tests/cli.test.js @@ -540,6 +540,7 @@ describe('Init command', () => { { flags: ['--ts', '--full'], name: 'tailwind.config.ts' }, { flags: ['--esm', '--full'], name: 'tailwind.config.js' }, ])('works with all these flags: %j', async ({ flags, name }) => { + cleanupFile(name) await removeFile(name) let { combined } = await $(`${EXECUTABLE} init ${flags.join(' ')}`) From 1fd103f23b866298b12380bb4f8ba8ed21f81938 Mon Sep 17 00:00:00 2001 From: Robin Malfait Date: Wed, 15 Mar 2023 16:29:30 +0100 Subject: [PATCH 35/44] test ESM/CJS generation based on package.json --- .../tailwindcss-cli/tests/cli.test.js | 36 +++++++++++++++++-- 1 file changed, 33 insertions(+), 3 deletions(-) diff --git a/integrations/tailwindcss-cli/tests/cli.test.js b/integrations/tailwindcss-cli/tests/cli.test.js index 46d7e206527f..42c68058bb4a 100644 --- a/integrations/tailwindcss-cli/tests/cli.test.js +++ b/integrations/tailwindcss-cli/tests/cli.test.js @@ -658,8 +658,9 @@ describe('Init command', () => { await writeInputFile('../package.json', pkg) }) - xtest('cjs config created when in ESM package', async () => { + test('ESM config is created by default in an ESM project', async () => { cleanupFile('tailwind.config.js') + await removeFile('tailwind.config.js') let pkg = await readOutputFile('../package.json') @@ -679,10 +680,39 @@ describe('Init command', () => { " `) - expect(await fileExists('./tailwind.config.cjs')).toBe(true) + expect(await fileExists('./tailwind.config.js')).toBe(true) // Not a clean way to test this. - expect(await readOutputFile('../tailwind.config.js')).toContain('module.exports =') + expect(await readOutputFile('../tailwind.config.js')).toContain('export default') + + await writeInputFile('../package.json', pkg) + }) + + test('CJS config is created by default in a non-ESM project', async () => { + cleanupFile('tailwind.config.js') + await removeFile('tailwind.config.js') + + let pkg = await readOutputFile('../package.json') + + await writeInputFile( + '../package.json', + JSON.stringify({ + ...JSON.parse(pkg), + }) + ) + + let { combined } = await $(`${EXECUTABLE} init`) + + expect(combined).toMatchInlineSnapshot(` + " + Created Tailwind CSS config file: tailwind.config.js + " + `) + + expect(await fileExists('./tailwind.config.js')).toBe(true) + + // Not a clean way to test this. + expect(await readOutputFile('../tailwind.config.js')).toContain('module.exports') await writeInputFile('../package.json', pkg) }) From 32540696789950486df7da2dce87b3cb7719b2f1 Mon Sep 17 00:00:00 2001 From: Robin Malfait Date: Wed, 15 Mar 2023 16:30:22 +0100 Subject: [PATCH 36/44] remove unnecessary test We are not displaying output in the `--help` anymore based on whether `type: module` is present or not. Therefore this test is unneeded. --- .../tailwindcss-cli/tests/cli.test.js | 32 ------------------- 1 file changed, 32 deletions(-) diff --git a/integrations/tailwindcss-cli/tests/cli.test.js b/integrations/tailwindcss-cli/tests/cli.test.js index 42c68058bb4a..f30260b0b6de 100644 --- a/integrations/tailwindcss-cli/tests/cli.test.js +++ b/integrations/tailwindcss-cli/tests/cli.test.js @@ -626,38 +626,6 @@ describe('Init command', () => { ) }) - test('--help in ESM package', async () => { - let pkg = await readOutputFile('../package.json') - - await writeInputFile( - '../package.json', - JSON.stringify({ - ...JSON.parse(pkg), - type: 'module', - }) - ) - - let { combined } = await $(`${EXECUTABLE} init --help`) - - expect(dedent(combined)).toEqual( - dedent(` - tailwindcss v${version} - - Usage: - tailwindcss init [options] - - Options: - --esm Initialize configuration file as ESM - --ts Initialize configuration file as TypeScript - -p, --postcss Initialize a \`postcss.config.js\` file - -f, --full Include the default values for all options in the generated configuration file - -h, --help Display usage information - `) - ) - - await writeInputFile('../package.json', pkg) - }) - test('ESM config is created by default in an ESM project', async () => { cleanupFile('tailwind.config.js') await removeFile('tailwind.config.js') From e3102e88054cf27f32d4428c8e82a9808bf132a8 Mon Sep 17 00:00:00 2001 From: Robin Malfait Date: Wed, 15 Mar 2023 16:43:59 +0100 Subject: [PATCH 37/44] only look for `TypeScript` files when the entryFile is `TypeScript` as well --- src/lib/getModuleDependencies.js | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/src/lib/getModuleDependencies.js b/src/lib/getModuleDependencies.js index 3069eedffeeb..8b0c85e0b468 100644 --- a/src/lib/getModuleDependencies.js +++ b/src/lib/getModuleDependencies.js @@ -13,6 +13,10 @@ function* _getModuleDependencies(entryFile) { yield mod + let ext = path.extname(entryFile) + let isTypeScript = ext === '.ts' || ext === '.cts' || ext === '.mts' + let extensions = [...(isTypeScript ? ['.ts', '.cts', '.mts'] : []), '.js', '.cjs', '.mjs'] + // Iterate over the modules, even when new // ones are being added for (let dep of mod.requires) { @@ -23,10 +27,7 @@ function* _getModuleDependencies(entryFile) { try { let basedir = path.dirname(mod.file) - let depPath = resolve.sync(dep, { - basedir, - extensions: ['.js', '.cjs', '.mjs', '.ts', '.cts', '.mts'], - }) + let depPath = resolve.sync(dep, { basedir, extensions }) yield* _getModuleDependencies(depPath) } catch (_err) { // eslint-disable-next-line no-empty From eaac06c867d31db01173261b278691ed715e2019 Mon Sep 17 00:00:00 2001 From: Robin Malfait Date: Wed, 15 Mar 2023 17:32:22 +0100 Subject: [PATCH 38/44] refactor `load` to be `loadConfig` This will allow you to use: ```js import loadConfig from 'tailwindcss/loadConfig' let config = loadConfig("/Users/xyz/projects/my-app/tailwind.config.ts") ``` The `loadConfig` function will return the configuration object based on the given absolute path of a tailwind configuration file. The given path can be a CJS, an ESM or a TS file. --- load.d.ts | 2 -- load.js | 1 - loadConfig.d.ts | 4 ++++ loadConfig.js | 2 ++ src/cli/build/plugin.js | 15 +++++++++++++-- src/lib/getModuleDependencies.js | 6 +++--- src/lib/load-config.ts | 30 ++++++------------------------ src/lib/setupTrackingContext.js | 7 ++++--- src/public/load-config.js | 4 ++-- 9 files changed, 34 insertions(+), 37 deletions(-) delete mode 100644 load.d.ts delete mode 100644 load.js create mode 100644 loadConfig.d.ts create mode 100644 loadConfig.js diff --git a/load.d.ts b/load.d.ts deleted file mode 100644 index 9cee43b68da1..000000000000 --- a/load.d.ts +++ /dev/null @@ -1,2 +0,0 @@ -import type { load, dependencies } from './src/lib/load-config' -export { load, dependencies } diff --git a/load.js b/load.js deleted file mode 100644 index 05262c6b100d..000000000000 --- a/load.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('./lib/public/load-config') diff --git a/loadConfig.d.ts b/loadConfig.d.ts new file mode 100644 index 000000000000..f17ad23d9afc --- /dev/null +++ b/loadConfig.d.ts @@ -0,0 +1,4 @@ +import type { Config } from './types/config' + +declare function loadConfig(path: string): Config +export = loadConfig diff --git a/loadConfig.js b/loadConfig.js new file mode 100644 index 000000000000..838d72de05bc --- /dev/null +++ b/loadConfig.js @@ -0,0 +1,2 @@ +let loadConfig = require('./lib/public/load-config') +module.exports = (loadConfig.__esModule ? loadConfig : { default: loadConfig }).default diff --git a/src/cli/build/plugin.js b/src/cli/build/plugin.js index 1755b21c2ef4..5705326c988a 100644 --- a/src/cli/build/plugin.js +++ b/src/cli/build/plugin.js @@ -17,7 +17,8 @@ import { createWatcher } from './watching.js' import fastGlob from 'fast-glob' import { findAtConfigPath } from '../../lib/findAtConfigPath.js' import log from '../../util/log' -import { load } from '../../lib/load-config' +import { loadConfig } from '../../lib/load-config' +import getModuleDependencies from '../../lib/getModuleDependencies' /** * @@ -147,7 +148,17 @@ let state = { this.refreshConfigDependencies() } - this.configBag = load(configPath) + let config = loadConfig(configPath) + let dependencies = getModuleDependencies(configPath) + this.configBag = { + config, + dependencies, + dispose() { + for (let file of dependencies) { + delete require.cache[require.resolve(file)] + } + }, + } // @ts-ignore this.configBag.config = resolveConfig(this.configBag.config, { content: { files: [] } }) diff --git a/src/lib/getModuleDependencies.js b/src/lib/getModuleDependencies.js index 8b0c85e0b468..c8192bc69adc 100644 --- a/src/lib/getModuleDependencies.js +++ b/src/lib/getModuleDependencies.js @@ -9,9 +9,9 @@ function createModule(file) { } function* _getModuleDependencies(entryFile) { - let mod = createModule(entryFile) + yield entryFile - yield mod + let mod = createModule(entryFile) let ext = path.extname(entryFile) let isTypeScript = ext === '.ts' || ext === '.cts' || ext === '.mts' @@ -36,5 +36,5 @@ function* _getModuleDependencies(entryFile) { } export default function getModuleDependencies(entryFile) { - return Array.from(_getModuleDependencies(entryFile)) + return new Set(_getModuleDependencies(entryFile)) } diff --git a/src/lib/load-config.ts b/src/lib/load-config.ts index 04922a8b2e56..89ce3a368d0b 100644 --- a/src/lib/load-config.ts +++ b/src/lib/load-config.ts @@ -1,7 +1,7 @@ import jitiFactory from 'jiti' import { transform } from 'sucrase' + import { Config } from '../../types/config' -import getModuleDependencies from './getModuleDependencies' let jiti: ReturnType | null = null function lazyJiti() { @@ -18,28 +18,10 @@ function lazyJiti() { ) } -export function load(path: string) { - let config: Config = (() => { - try { - return path ? require(path) : {} - } catch { - return lazyJiti()(path) - } - })() - - let deps = dependencies(path) - - return { - config, - dependencies: deps, - dispose() { - for (let file of deps) { - delete require.cache[require.resolve(file)] - } - }, +export function loadConfig(path: string): Config { + try { + return path ? require(path) : {} + } catch { + return lazyJiti()(path) } } - -export function dependencies(path: string): Set { - return new Set(getModuleDependencies(path).map(({ file }) => file)) -} diff --git a/src/lib/setupTrackingContext.js b/src/lib/setupTrackingContext.js index b2271498e0b0..5abf05170298 100644 --- a/src/lib/setupTrackingContext.js +++ b/src/lib/setupTrackingContext.js @@ -10,7 +10,8 @@ import { getContext, getFileModifiedMap } from './setupContextUtils' import parseDependency from '../util/parseDependency' import { validateConfig } from '../util/validateConfig.js' import { parseCandidateFiles, resolvedChangedContent } from './content.js' -import { load, dependencies } from '../lib/load-config' +import { loadConfig } from '../lib/load-config' +import getModuleDependencies from './getModuleDependencies' let configPathCache = new LRU({ maxSize: 100 }) @@ -34,7 +35,7 @@ function getTailwindConfig(configOrPath) { let [prevConfig, prevConfigHash, prevDeps, prevModified] = configPathCache.get(userConfigPath) || [] - let newDeps = dependencies(userConfigPath) + let newDeps = getModuleDependencies(userConfigPath) let modified = false let newModified = new Map() @@ -55,7 +56,7 @@ function getTailwindConfig(configOrPath) { for (let file of newDeps) { delete require.cache[file] } - let newConfig = validateConfig(resolveConfig(load(userConfigPath).config)) + let newConfig = validateConfig(resolveConfig(loadConfig(userConfigPath))) let newHash = hash(newConfig) configPathCache.set(userConfigPath, [newConfig, newHash, newDeps, newModified]) return [newConfig, userConfigPath, newHash, newDeps] diff --git a/src/public/load-config.js b/src/public/load-config.js index 6a9f2fcf9c56..d5d371271324 100644 --- a/src/public/load-config.js +++ b/src/public/load-config.js @@ -1,2 +1,2 @@ -import { load, dependencies } from '../lib/load-config' -export { load, dependencies } +import { loadConfig } from '../lib/load-config' +export default loadConfig From 9fb6160804d5d924f14f05e0db997111427092b3 Mon Sep 17 00:00:00 2001 From: Robin Malfait Date: Wed, 15 Mar 2023 18:39:53 +0100 Subject: [PATCH 39/44] use the `config.full.js` stub instead of the `defaultConfig.stub.js` file The root `defaultConfig` is still there for backwards compatibilty reasons. But the `module.exports = requrie('./config.full.js')` was causing some problems when actually using tailwindcss. So dropped it instead. --- src/public/default-config.js | 2 +- src/public/default-theme.js | 4 ++-- src/util/getAllConfigs.js | 4 ++-- stubs/defaultConfig.stub.js | 1 - tests/defaultConfig.test.js | 2 +- tests/defaultTheme.test.js | 2 +- tests/screenAtRule.test.js | 2 +- 7 files changed, 8 insertions(+), 9 deletions(-) delete mode 100644 stubs/defaultConfig.stub.js diff --git a/src/public/default-config.js b/src/public/default-config.js index 78dc69c14780..4c7e90712959 100644 --- a/src/public/default-config.js +++ b/src/public/default-config.js @@ -1,4 +1,4 @@ import { cloneDeep } from '../util/cloneDeep' -import defaultConfig from '../../stubs/defaultConfig.stub' +import defaultConfig from '../../stubs/config.full' export default cloneDeep(defaultConfig) diff --git a/src/public/default-theme.js b/src/public/default-theme.js index dc2400c31288..582edc303e5e 100644 --- a/src/public/default-theme.js +++ b/src/public/default-theme.js @@ -1,4 +1,4 @@ import { cloneDeep } from '../util/cloneDeep' -import defaultConfig from '../../stubs/defaultConfig.stub' +import defaultFullConfig from '../../stubs/config.full' -export default cloneDeep(defaultConfig.theme) +export default cloneDeep(defaultFullConfig.theme) diff --git a/src/util/getAllConfigs.js b/src/util/getAllConfigs.js index ebf28e172e3a..ce3665b977d0 100644 --- a/src/util/getAllConfigs.js +++ b/src/util/getAllConfigs.js @@ -1,8 +1,8 @@ -import defaultConfig from '../../stubs/defaultConfig.stub.js' +import defaultFullConfig from '../../stubs/config.full.js' import { flagEnabled } from '../featureFlags' export default function getAllConfigs(config) { - const configs = (config?.presets ?? [defaultConfig]) + const configs = (config?.presets ?? [defaultFullConfig]) .slice() .reverse() .flatMap((preset) => getAllConfigs(preset instanceof Function ? preset() : preset)) diff --git a/stubs/defaultConfig.stub.js b/stubs/defaultConfig.stub.js deleted file mode 100644 index 374dd7b5bc29..000000000000 --- a/stubs/defaultConfig.stub.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('./config.full.js') diff --git a/tests/defaultConfig.test.js b/tests/defaultConfig.test.js index b98251d8513d..4e7ca558b14f 100644 --- a/tests/defaultConfig.test.js +++ b/tests/defaultConfig.test.js @@ -1,5 +1,5 @@ import config from '../src/public/default-config' -import configStub from '../stubs/defaultConfig.stub.js' +import configStub from '../stubs/config.full' test.todo('remove mutation from these tests so we can run against both engines') diff --git a/tests/defaultTheme.test.js b/tests/defaultTheme.test.js index d618bcfafde1..c6356b89acdd 100644 --- a/tests/defaultTheme.test.js +++ b/tests/defaultTheme.test.js @@ -1,5 +1,5 @@ import theme from '../src/public/default-theme' -import configStub from '../stubs/defaultConfig.stub.js' +import configStub from '../stubs/config.full.js' test.todo('remove mutation from these tests so we can run against both engines') diff --git a/tests/screenAtRule.test.js b/tests/screenAtRule.test.js index 42ed22e0bed4..6352fcde09bd 100644 --- a/tests/screenAtRule.test.js +++ b/tests/screenAtRule.test.js @@ -1,6 +1,6 @@ import postcss from 'postcss' import plugin from '../src/lib/substituteScreenAtRules' -import config from '../stubs/defaultConfig.stub.js' +import config from '../stubs/config.full.js' import { crosscheck, css } from './util/run' function run(input, opts = config) { From 2e385d5ada51762240dfdbb2427446c9d55cfeaa Mon Sep 17 00:00:00 2001 From: Robin Malfait Date: Wed, 15 Mar 2023 18:48:44 +0100 Subject: [PATCH 40/44] apply `load` -> `loadConfig` changes to `Oxide` engine CLI --- src/oxide/cli/build/plugin.ts | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/src/oxide/cli/build/plugin.ts b/src/oxide/cli/build/plugin.ts index 99b3a267b29f..6edc883fad38 100644 --- a/src/oxide/cli/build/plugin.ts +++ b/src/oxide/cli/build/plugin.ts @@ -15,7 +15,8 @@ import { createWatcher } from './watching' import fastGlob from 'fast-glob' import { findAtConfigPath } from '../../../lib/findAtConfigPath' import log from '../../../util/log' -import { load } from '../../../lib/load-config' +import { loadConfig } from '../../../lib/load-config' +import getModuleDependencies from '../../../lib/getModuleDependencies' /** * @@ -142,10 +143,20 @@ let state = { loadConfig(configPath, content) { if (this.watcher && configPath) { - this.refreshConfigDependencies(configPath) + this.refreshConfigDependencies() } - this.configBag = load(configPath) + let config = loadConfig(configPath) + let dependencies = getModuleDependencies(configPath) + this.configBag = { + config, + dependencies, + dispose() { + for (let file of dependencies) { + delete require.cache[require.resolve(file)] + } + }, + } // @ts-ignore this.configBag.config = resolveConfig(this.configBag.config, { content: { files: [] } }) From 9bcf8ba5bfbcf2260a0a190e074480b8e16a7967 Mon Sep 17 00:00:00 2001 From: Robin Malfait Date: Wed, 15 Mar 2023 18:48:59 +0100 Subject: [PATCH 41/44] ensure we write the config file in the Oxide engine --- src/oxide/cli/init/index.ts | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/oxide/cli/init/index.ts b/src/oxide/cli/init/index.ts index 208890540605..abc93cdc1351 100644 --- a/src/oxide/cli/init/index.ts +++ b/src/oxide/cli/init/index.ts @@ -45,6 +45,8 @@ export function init(args) { .replace('__CONFIG__', stubContentsFile.replace('module.exports =', '').trim()) .trim() + '\n\n' + fs.writeFileSync(tailwindConfigLocation, stubFile, 'utf8') + messages.push(`Created Tailwind CSS config file: ${path.basename(tailwindConfigLocation)}`) } From 444b5262b6b1122ec180054e7cf548f3ec90a81e Mon Sep 17 00:00:00 2001 From: Robin Malfait Date: Wed, 15 Mar 2023 19:21:42 +0100 Subject: [PATCH 42/44] improve type in Oxide engine CLI --- src/oxide/cli/build/plugin.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/oxide/cli/build/plugin.ts b/src/oxide/cli/build/plugin.ts index 6edc883fad38..078820c85c9a 100644 --- a/src/oxide/cli/build/plugin.ts +++ b/src/oxide/cli/build/plugin.ts @@ -17,6 +17,7 @@ import { findAtConfigPath } from '../../../lib/findAtConfigPath' import log from '../../../util/log' import { loadConfig } from '../../../lib/load-config' import getModuleDependencies from '../../../lib/getModuleDependencies' +import type { Config } from '../../../../types' /** * @@ -116,7 +117,7 @@ let state = { /** @type {{content: string, extension: string}[]} */ changedContent: [], - /** @type {ReturnType | null} */ + /** @type {{config: Config, dependencies: Set, dispose: Function } | null} */ configBag: null, contextDependencies: new Set(), From f40fdc4a4843510a2f678f6b0edc7f408001f3a8 Mon Sep 17 00:00:00 2001 From: Robin Malfait Date: Wed, 15 Mar 2023 19:26:44 +0100 Subject: [PATCH 43/44] catch errors instead of checking if the file exists MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit A little smaller but just for tests so doesn't matter too much here 👍 --- integrations/io.js | 15 +++------------ 1 file changed, 3 insertions(+), 12 deletions(-) diff --git a/integrations/io.js b/integrations/io.js index f5ebe315de78..c555ac8ba02c 100644 --- a/integrations/io.js +++ b/integrations/io.js @@ -98,20 +98,11 @@ module.exports = function ({ async removeFile(file) { let filePath = path.resolve(toolRoot, file) - // File doesn't exist, so we don't need to cache it. - if ( - !(await fs - .access(filePath) - .then(() => true) - .catch(() => false)) - ) { - return - } - if (!fileCache[filePath]) { - fileCache[filePath] = await fs.readFile(filePath, 'utf8') + fileCache[filePath] = await fs.readFile(filePath, 'utf8').catch(() => null) } - await fs.unlink(filePath) + + await fs.unlink(filePath).catch(() => null) }, async readOutputFile(file) { file = await resolveFile(file, absoluteOutputFolder) From e853901591c410ec0ce053c6fc57c92e4ff11548 Mon Sep 17 00:00:00 2001 From: Robin Malfait Date: Wed, 15 Mar 2023 19:32:10 +0100 Subject: [PATCH 44/44] ensure we publish the correct stub files --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 86d2813e83c5..a6a806406909 100644 --- a/package.json +++ b/package.json @@ -40,7 +40,7 @@ "lib/*", "peers/*", "scripts/*.js", - "stubs/*.stub.js", + "stubs/*.{js,ts,cjs}", "nesting/*", "types/**/*", "*.d.ts",