diff --git a/build/tasks.js b/build/tasks.js index e1269cd..e03e962 100644 --- a/build/tasks.js +++ b/build/tasks.js @@ -2,6 +2,7 @@ const {join, relative} = require('path'); const {PassThrough} = require('stream'); const {pipesink, processCode, spawnWith} = require('@flecks/core/src/server'); +const chalk = require('chalk'); const {glob} = require('glob'); const concurrent = require('./concurrent'); @@ -27,10 +28,15 @@ const {workspaces} = require(join(FLECKS_CORE_ROOT, 'package.json')); const stdio = new PassThrough(); const buffer = pipesink(child.stderr.pipe(child.stdout.pipe(stdio))); const code = await processCode(child); - console.log(`::group::@flecks/${relative(join(FLECKS_CORE_ROOT, 'packages'), cwd)}`); + console.log( + `::group::@flecks/${ + chalk.blue(relative(join(FLECKS_CORE_ROOT, 'packages'), cwd)) + } ${0 === code ? chalk.green('passed') : chalk.red('failed')}`, + ); process.stdout.write(await buffer); - console.log('::endgroup::'); + console.log('::endgroup::\n'); return code; }, ); + console.log(0 === process.exitCode ? chalk.green('success') : chalk.red('failure'), '\n'); })(); diff --git a/package-lock.json b/package-lock.json index b79c754..1e4596b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -11,7 +11,8 @@ "packages/*" ], "devDependencies": { - "@npmcli/arborist": "^7.3.1" + "@npmcli/arborist": "^7.3.1", + "chalk": "^4.1.2" } }, "node_modules/@aashutoshrathi/word-wrap": { @@ -46,6 +47,62 @@ "node": ">=6.9.0" } }, + "node_modules/@babel/code-frame/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/code-frame/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/code-frame/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/@babel/code-frame/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" + }, + "node_modules/@babel/code-frame/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/@babel/code-frame/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/@babel/compat-data": { "version": "7.23.5", "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.23.5.tgz", @@ -477,6 +534,62 @@ "node": ">=6.9.0" } }, + "node_modules/@babel/highlight/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/highlight/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/highlight/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/@babel/highlight/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" + }, + "node_modules/@babel/highlight/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/@babel/highlight/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/@babel/parser": { "version": "7.23.9", "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.23.9.tgz", @@ -2853,21 +2966,6 @@ "node": ">=18" } }, - "node_modules/@puppeteer/browsers/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, "node_modules/@puppeteer/browsers/node_modules/cliui": { "version": "8.0.1", "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", @@ -2882,24 +2980,6 @@ "node": ">=12" } }, - "node_modules/@puppeteer/browsers/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/@puppeteer/browsers/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, "node_modules/@puppeteer/browsers/node_modules/debug": { "version": "4.3.4", "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", @@ -4013,14 +4093,17 @@ } }, "node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dependencies": { - "color-convert": "^1.9.0" + "color-convert": "^2.0.1" }, "engines": { - "node": ">=4" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, "node_modules/anymatch": { @@ -4826,14 +4909,15 @@ } }, "node_modules/call-bind": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.6.tgz", - "integrity": "sha512-Mj50FLHtlsoVfRfnHaZvyrooHcrlceNZdL/QBvJJVd9Ta55qCQK0gs4ss2oZDeV9zFCs6ewzYgVE5yfVmfFpVg==", + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", + "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", "dependencies": { + "es-define-property": "^1.0.0", "es-errors": "^1.3.0", "function-bind": "^1.1.2", - "get-intrinsic": "^1.2.3", - "set-function-length": "^1.2.0" + "get-intrinsic": "^1.2.4", + "set-function-length": "^1.2.1" }, "engines": { "node": ">= 0.4" @@ -4876,9 +4960,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001585", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001585.tgz", - "integrity": "sha512-yr2BWR1yLXQ8fMpdS/4ZZXpseBgE7o4g41x3a6AJOqZuOi+iE/WdJYAuZ6Y95i4Ohd2Y+9MzIWRR+uGABH4s3Q==", + "version": "1.0.30001587", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001587.tgz", + "integrity": "sha512-HMFNotUmLXn71BQxg8cijvqxnIAofforZOwGsxyXJ0qugTdspUF4sPSJ2vhgprHCB996tIDzEq1ubumPDV8ULA==", "funding": [ { "type": "opencollective", @@ -4922,27 +5006,37 @@ } }, "node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" }, "engines": { - "node": ">=4" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/chalk/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "engines": { + "node": ">=8" } }, "node_modules/chalk/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dependencies": { - "has-flag": "^3.0.0" + "has-flag": "^4.0.0" }, "engines": { - "node": ">=4" + "node": ">=8" } }, "node_modules/check-error": { @@ -5068,36 +5162,6 @@ "wrap-ansi": "^7.0.0" } }, - "node_modules/cliui/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/cliui/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/cliui/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, "node_modules/cliui/node_modules/emoji-regex": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", @@ -5182,17 +5246,20 @@ } }, "node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dependencies": { - "color-name": "1.1.3" + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" } }, "node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, "node_modules/color-support": { "version": "1.1.3", @@ -5385,11 +5452,11 @@ } }, "node_modules/core-js-compat": { - "version": "3.35.1", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.35.1.tgz", - "integrity": "sha512-sftHa5qUJY3rs9Zht1WEnmkvXputCyDBczPnr7QDgL8n3qrF3CMXY4VPSYtOLLiOUJcah2WNXREd48iOl6mQIw==", + "version": "3.36.0", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.36.0.tgz", + "integrity": "sha512-iV9Pd/PsgjNWBXeq8XRtWVSgz2tKAfhfvBs7qxYty+RlRd+OCksaWmOnc4JKrTc1cToXL1N0s3l/vwlxPtdElw==", "dependencies": { - "browserslist": "^4.22.2" + "browserslist": "^4.22.3" }, "funding": { "type": "opencollective", @@ -5397,9 +5464,9 @@ } }, "node_modules/core-js-pure": { - "version": "3.35.1", - "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.35.1.tgz", - "integrity": "sha512-zcIdi/CL3MWbBJYo5YCeVAAx+Sy9yJE9I3/u9LkFABwbeaPhTMRWraM8mYFp9jW5Z50hOy7FVzCc8dCrpZqtIQ==", + "version": "3.36.0", + "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.36.0.tgz", + "integrity": "sha512-cN28qmhRNgbMZZMc/RFu5w8pK9VJzpb2rJVR/lHuZJKwmXnoWOpXmMkxqBB514igkp1Hu8WGROsiOAzUcKdHOQ==", "hasInstallScript": true, "funding": { "type": "opencollective", @@ -5619,9 +5686,9 @@ "integrity": "sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==" }, "node_modules/data-uri-to-buffer": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-6.0.1.tgz", - "integrity": "sha512-MZd3VlchQkp8rdend6vrx7MmVDJzSNTBvghvKjirLkD+WTChA3KUf0jkE68Q4UyctNqI11zZO9/x2Yx+ub5Cvg==", + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-6.0.2.tgz", + "integrity": "sha512-7hvf7/GW8e86rW0ptuwS3OcBGDjIi6SZva7hCyWC0yYry2cOPmLIjXAUHI6DK2HsnwJd9ifmt57i8eV2n4YNpw==", "dev": true, "engines": { "node": ">= 14" @@ -5731,17 +5798,19 @@ } }, "node_modules/define-data-property": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.2.tgz", - "integrity": "sha512-SRtsSqsDbgpJBbW3pABMCOt6rQyeM8s8RiyeSN8jYG8sYmt/kGJejbydttUsnDs1tadr19tvhT4ShwMyoqAm4g==", + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", + "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", "dependencies": { + "es-define-property": "^1.0.0", "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.2", - "gopd": "^1.0.1", - "has-property-descriptors": "^1.0.1" + "gopd": "^1.0.1" }, "engines": { "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, "node_modules/define-lazy-prop": { @@ -6289,9 +6358,9 @@ "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" }, "node_modules/electron-to-chromium": { - "version": "1.4.665", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.665.tgz", - "integrity": "sha512-UpyCWObBoD+nSZgOC2ToaIdZB0r9GhqT2WahPKiSki6ckkSuKhQNso8V2PrFcHBMleI/eqbKgVQgVC4Wni4ilw==" + "version": "1.4.668", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.668.tgz", + "integrity": "sha512-ZOBocMYCehr9W31+GpMclR+KBaDZOoAEabLdhpZ8oU1JFDwIaFY0UDbpXVEUFc0BIP2O2Qn3rkfCjQmMR4T/bQ==" }, "node_modules/electron/node_modules/@types/node": { "version": "18.19.15", @@ -6493,49 +6562,51 @@ } }, "node_modules/es-abstract": { - "version": "1.22.3", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.22.3.tgz", - "integrity": "sha512-eiiY8HQeYfYH2Con2berK+To6GrK2RxbPawDkGq4UiCQQfZHb6wX9qQqkbpPqaxQFcl8d9QzZqo0tGE0VcrdwA==", + "version": "1.22.4", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.22.4.tgz", + "integrity": "sha512-vZYJlk2u6qHYxBOTjAeg7qUxHdNfih64Uu2J8QqWgXZ2cri0ZpJAkzDUK/q593+mvKwlxyaxr6F1Q+3LKoQRgg==", "dependencies": { - "array-buffer-byte-length": "^1.0.0", - "arraybuffer.prototype.slice": "^1.0.2", - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.5", - "es-set-tostringtag": "^2.0.1", + "array-buffer-byte-length": "^1.0.1", + "arraybuffer.prototype.slice": "^1.0.3", + "available-typed-arrays": "^1.0.6", + "call-bind": "^1.0.7", + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "es-set-tostringtag": "^2.0.2", "es-to-primitive": "^1.2.1", "function.prototype.name": "^1.1.6", - "get-intrinsic": "^1.2.2", - "get-symbol-description": "^1.0.0", + "get-intrinsic": "^1.2.4", + "get-symbol-description": "^1.0.2", "globalthis": "^1.0.3", "gopd": "^1.0.1", - "has-property-descriptors": "^1.0.0", + "has-property-descriptors": "^1.0.2", "has-proto": "^1.0.1", "has-symbols": "^1.0.3", - "hasown": "^2.0.0", - "internal-slot": "^1.0.5", - "is-array-buffer": "^3.0.2", + "hasown": "^2.0.1", + "internal-slot": "^1.0.7", + "is-array-buffer": "^3.0.4", "is-callable": "^1.2.7", "is-negative-zero": "^2.0.2", "is-regex": "^1.1.4", "is-shared-array-buffer": "^1.0.2", "is-string": "^1.0.7", - "is-typed-array": "^1.1.12", + "is-typed-array": "^1.1.13", "is-weakref": "^1.0.2", "object-inspect": "^1.13.1", "object-keys": "^1.1.1", - "object.assign": "^4.1.4", - "regexp.prototype.flags": "^1.5.1", - "safe-array-concat": "^1.0.1", - "safe-regex-test": "^1.0.0", + "object.assign": "^4.1.5", + "regexp.prototype.flags": "^1.5.2", + "safe-array-concat": "^1.1.0", + "safe-regex-test": "^1.0.3", "string.prototype.trim": "^1.2.8", "string.prototype.trimend": "^1.0.7", "string.prototype.trimstart": "^1.0.7", - "typed-array-buffer": "^1.0.0", + "typed-array-buffer": "^1.0.1", "typed-array-byte-length": "^1.0.0", "typed-array-byte-offset": "^1.0.0", "typed-array-length": "^1.0.4", "unbox-primitive": "^1.0.2", - "which-typed-array": "^1.1.13" + "which-typed-array": "^1.1.14" }, "engines": { "node": ">= 0.4" @@ -6549,6 +6620,17 @@ "resolved": "https://registry.npmjs.org/es-array-method-boxes-properly/-/es-array-method-boxes-properly-1.0.0.tgz", "integrity": "sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA==" }, + "node_modules/es-define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz", + "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==", + "dependencies": { + "get-intrinsic": "^1.2.4" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/es-errors": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", @@ -6558,20 +6640,20 @@ } }, "node_modules/es-iterator-helpers": { - "version": "1.0.16", - "resolved": "https://registry.npmjs.org/es-iterator-helpers/-/es-iterator-helpers-1.0.16.tgz", - "integrity": "sha512-CREG2A9Vq7bpDRnldhFcMKuKArvkZtsH6Y0DHOHVg49qhf+LD8uEdUM3OkOAICv0EziGtDEnQtqY2/mfBILpFw==", + "version": "1.0.17", + "resolved": "https://registry.npmjs.org/es-iterator-helpers/-/es-iterator-helpers-1.0.17.tgz", + "integrity": "sha512-lh7BsUqelv4KUbR5a/ZTaGGIMLCjPGPqJ6q+Oq24YP0RdyptX1uzm4vvaqzk7Zx3bpl/76YLTTDj9L7uYQ92oQ==", "dependencies": { "asynciterator.prototype": "^1.0.0", - "call-bind": "^1.0.6", + "call-bind": "^1.0.7", "define-properties": "^1.2.1", - "es-abstract": "^1.22.3", + "es-abstract": "^1.22.4", "es-errors": "^1.3.0", "es-set-tostringtag": "^2.0.2", "function-bind": "^1.1.2", "get-intrinsic": "^1.2.4", "globalthis": "^1.0.3", - "has-property-descriptors": "^1.0.1", + "has-property-descriptors": "^1.0.2", "has-proto": "^1.0.1", "has-symbols": "^1.0.3", "internal-slot": "^1.0.7", @@ -6644,11 +6726,14 @@ "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==" }, "node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", "engines": { - "node": ">=0.8.0" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/escodegen": { @@ -7150,20 +7235,6 @@ "webpack": "^5.0.0" } }, - "node_modules/eslint/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, "node_modules/eslint/node_modules/brace-expansion": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", @@ -7173,37 +7244,6 @@ "concat-map": "0.0.1" } }, - "node_modules/eslint/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/eslint/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/eslint/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, "node_modules/eslint/node_modules/debug": { "version": "4.3.4", "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", @@ -7220,17 +7260,6 @@ } } }, - "node_modules/eslint/node_modules/escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/eslint/node_modules/eslint-scope": { "version": "7.2.2", "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", @@ -7257,14 +7286,6 @@ "url": "https://opencollective.com/eslint" } }, - "node_modules/eslint/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "engines": { - "node": ">=8" - } - }, "node_modules/eslint/node_modules/minimatch": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", @@ -7276,17 +7297,6 @@ "node": "*" } }, - "node_modules/eslint/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/espree": { "version": "9.6.1", "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", @@ -7948,20 +7958,6 @@ } } }, - "node_modules/fork-ts-checker-webpack-plugin/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, "node_modules/fork-ts-checker-webpack-plugin/node_modules/brace-expansion": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", @@ -7971,37 +7967,6 @@ "concat-map": "0.0.1" } }, - "node_modules/fork-ts-checker-webpack-plugin/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/fork-ts-checker-webpack-plugin/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/fork-ts-checker-webpack-plugin/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, "node_modules/fork-ts-checker-webpack-plugin/node_modules/cosmiconfig": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-6.0.0.tgz", @@ -8058,14 +8023,6 @@ "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/fork-ts-checker-webpack-plugin/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "engines": { - "node": ">=8" - } - }, "node_modules/fork-ts-checker-webpack-plugin/node_modules/jsonfile": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", @@ -8105,17 +8062,6 @@ "url": "https://opencollective.com/webpack" } }, - "node_modules/fork-ts-checker-webpack-plugin/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/fork-ts-checker-webpack-plugin/node_modules/tapable": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.3.tgz", @@ -8386,15 +8332,15 @@ } }, "node_modules/get-uri": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/get-uri/-/get-uri-6.0.2.tgz", - "integrity": "sha512-5KLucCJobh8vBY1K07EFV4+cPZH3mrV9YeAruUseCQKHB58SGjjT2l9/eA9LD082IiuMjSlFJEcdJ27TXvbZNw==", + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/get-uri/-/get-uri-6.0.3.tgz", + "integrity": "sha512-BzUrJBS9EcUb4cFol8r4W3v1cPsSyajLSthNkz5BxbpDcHN5tIrM10E2eNvfnvBn3DaT3DUgx0OpsBKkaOpanw==", "dev": true, "dependencies": { "basic-ftp": "^5.0.2", - "data-uri-to-buffer": "^6.0.0", + "data-uri-to-buffer": "^6.0.2", "debug": "^4.3.4", - "fs-extra": "^8.1.0" + "fs-extra": "^11.2.0" }, "engines": { "node": ">= 14" @@ -8417,6 +8363,41 @@ } } }, + "node_modules/get-uri/node_modules/fs-extra": { + "version": "11.2.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.2.0.tgz", + "integrity": "sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=14.14" + } + }, + "node_modules/get-uri/node_modules/jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dev": true, + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/get-uri/node_modules/universalify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", + "dev": true, + "engines": { + "node": ">= 10.0.0" + } + }, "node_modules/github-from-package": { "version": "0.0.0", "resolved": "https://registry.npmjs.org/github-from-package/-/github-from-package-0.0.0.tgz", @@ -8657,11 +8638,11 @@ } }, "node_modules/has-property-descriptors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.1.tgz", - "integrity": "sha512-VsX8eaIewvas0xnvinAe9bw4WfIeODpGYikiWYLH+dma0Jw6KHYqWiWfhQlgOVK8D6PvjubK5Uc4P0iIhIcNVg==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", + "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", "dependencies": { - "get-intrinsic": "^1.2.2" + "es-define-property": "^1.0.0" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -8709,9 +8690,9 @@ "integrity": "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==" }, "node_modules/hasown": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.0.tgz", - "integrity": "sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.1.tgz", + "integrity": "sha512-1/th4MHjnwncwXsIW6QMzlvYL9kG5e/CpVvLRZe4XPa8TOUNbCELqmvhDmnkNsAjwaG4+I8gJJL0JBvTTLO9qA==", "dependencies": { "function-bind": "^1.1.2" }, @@ -8998,9 +8979,9 @@ } }, "node_modules/http-proxy-agent": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.0.tgz", - "integrity": "sha512-+ZT+iBxVUQ1asugqnD6oWoRiS25AkjNfG085dKJGtGxkdwLQrMKU5wJr2bOOFAXzKcTuqq+7fZlTMgG3SRfIYQ==", + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.1.tgz", + "integrity": "sha512-My1KCEPs6A0hb4qCVzYp8iEvA8j8YqcvXLZZH8C9OFuTYpYjHE7N2dtG3mRl1HMD4+VGXpF3XcDVcxGBT7yDZQ==", "dev": true, "dependencies": { "agent-base": "^7.1.0", @@ -9074,9 +9055,9 @@ } }, "node_modules/https-proxy-agent": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.2.tgz", - "integrity": "sha512-NmLNjm6ucYwtcUmL7JQC1ZQ57LmHP4lT15FQ8D61nak1rO6DH+fz5qNK2Ap5UN4ZapYICE3/0KodcLYSPsPbaA==", + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.3.tgz", + "integrity": "sha512-kCnwztfX0KZJSLOBrcL0emLeFako55NWMovvyPP2AjsghNk9RB1yjSI+jVumPHYZsNXegNoqupSW9IY3afSH8w==", "dev": true, "dependencies": { "agent-base": "^7.0.2", @@ -9104,9 +9085,9 @@ } }, "node_modules/husky": { - "version": "9.0.10", - "resolved": "https://registry.npmjs.org/husky/-/husky-9.0.10.tgz", - "integrity": "sha512-TQGNknoiy6bURzIO77pPRu+XHi6zI7T93rX+QnJsoYFf3xdjKOur+IlfqzJGMHIK/wXrLg+GsvMs8Op7vI2jVA==", + "version": "9.0.11", + "resolved": "https://registry.npmjs.org/husky/-/husky-9.0.11.tgz", + "integrity": "sha512-AB6lFlbwwyIqMdHYhwPe+kjOC3Oc5P3nThEoW/AaO2BX3vJDjWPFxYLxokUZOo6RNX20He3AaT8sESs9NJcmEw==", "bin": { "husky": "bin.mjs" }, @@ -9365,11 +9346,18 @@ "node": ">= 0.10" } }, - "node_modules/ip": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ip/-/ip-2.0.0.tgz", - "integrity": "sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ==", - "devOptional": true + "node_modules/ip-address": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/ip-address/-/ip-address-9.0.5.tgz", + "integrity": "sha512-zHtQzGojZXTwZTHQqra+ETKd4Sn3vgi7uBmlPoXVWZqYvuKmtI0l/VZTjqGmJY9x88GGOaZ9+G9ES8hC4T4X8g==", + "devOptional": true, + "dependencies": { + "jsbn": "1.1.0", + "sprintf-js": "^1.1.3" + }, + "engines": { + "node": ">= 12" + } }, "node_modules/ipaddr.js": { "version": "1.9.1", @@ -9984,6 +9972,12 @@ "js-yaml": "bin/js-yaml.js" } }, + "node_modules/jsbn": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-1.1.0.tgz", + "integrity": "sha512-4bYVV3aAMtDTTu4+xsDYa6sy9GyJ69/amsu9sYF2zqjiEoZA5xJi3BrfX3uY+/IekIu7MwdObdbDWpoZdBv3/A==", + "devOptional": true + }, "node_modules/jsesc": { "version": "2.5.2", "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", @@ -10287,70 +10281,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/log-symbols/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/log-symbols/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/log-symbols/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/log-symbols/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "node_modules/log-symbols/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "engines": { - "node": ">=8" - } - }, - "node_modules/log-symbols/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/loose-envify": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", @@ -10447,18 +10377,6 @@ "node": ">=10" } }, - "node_modules/matcher/node_modules/escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "optional": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/media-typer": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", @@ -10907,17 +10825,6 @@ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" }, - "node_modules/mocha/node_modules/escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/mocha/node_modules/glob": { "version": "8.1.0", "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz", @@ -11767,25 +11674,18 @@ } }, "node_modules/pac-resolver": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/pac-resolver/-/pac-resolver-7.0.0.tgz", - "integrity": "sha512-Fd9lT9vJbHYRACT8OhCbZBbxr6KRSawSovFpy8nDGshaK99S/EBhVIHp9+crhxrsZOuvLpgL1n23iyPg6Rl2hg==", + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/pac-resolver/-/pac-resolver-7.0.1.tgz", + "integrity": "sha512-5NPgf87AT2STgwa2ntRMr45jTKrYBGkVU36yT0ig/n/GMAa3oPqhZfIQ2kMEimReg0+t9kZViDVZ83qfVUlckg==", "dev": true, "dependencies": { "degenerator": "^5.0.0", - "ip": "^1.1.8", "netmask": "^2.0.2" }, "engines": { "node": ">= 14" } }, - "node_modules/pac-resolver/node_modules/ip": { - "version": "1.1.8", - "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.8.tgz", - "integrity": "sha512-PuExPYUiu6qMBQb4l06ecm6T6ujzhmh+MeJcW9wa89PoAz5pvd4zPgN5WJV104mb6S2T1AwNIAaB70JNrLQWhg==", - "dev": true - }, "node_modules/pacote": { "version": "17.0.6", "resolved": "https://registry.npmjs.org/pacote/-/pacote-17.0.6.tgz", @@ -12094,6 +11994,14 @@ "node": ">=0.10.0" } }, + "node_modules/pirates": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz", + "integrity": "sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==", + "engines": { + "node": ">= 6" + } + }, "node_modules/pkg-dir": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-7.0.0.tgz", @@ -12396,11 +12304,6 @@ "postcss": "^8.2.9" } }, - "node_modules/postcss-values-parser/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, "node_modules/prebuild-install": { "version": "7.1.1", "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-7.1.1.tgz", @@ -12899,62 +12802,6 @@ "node": ">=14" } }, - "node_modules/react-dev-utils/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/react-dev-utils/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/react-dev-utils/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/react-dev-utils/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "node_modules/react-dev-utils/node_modules/escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/react-dev-utils/node_modules/globby": { "version": "11.1.0", "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", @@ -12974,14 +12821,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/react-dev-utils/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "engines": { - "node": ">=8" - } - }, "node_modules/react-dev-utils/node_modules/loader-utils": { "version": "3.2.1", "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-3.2.1.tgz", @@ -12998,17 +12837,6 @@ "node": ">=8" } }, - "node_modules/react-dev-utils/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/react-dom": { "version": "18.2.0", "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.2.0.tgz", @@ -13319,13 +13147,14 @@ } }, "node_modules/regexp.prototype.flags": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.1.tgz", - "integrity": "sha512-sy6TXMN+hnP/wMy+ISxg3krXx7BAtWVO4UouuCN/ziM9UEne0euamVNafDfvC83bRNr95y0V5iijeDQFUNpvrg==", + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.2.tgz", + "integrity": "sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw==", "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "set-function-name": "^2.0.0" + "call-bind": "^1.0.6", + "define-properties": "^1.2.1", + "es-errors": "^1.3.0", + "set-function-name": "^2.0.1" }, "engines": { "node": ">= 0.4" @@ -13905,9 +13734,9 @@ "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" }, "node_modules/sequelize": { - "version": "6.36.0", - "resolved": "https://registry.npmjs.org/sequelize/-/sequelize-6.36.0.tgz", - "integrity": "sha512-PqOa11EHwA/zLmGDU4aynbsavbHJUlgRvFuC/2cA4LhOuV6NHKcQ0IXB+hNdFrGT3rULmvc4kdIwnfCNsrECMQ==", + "version": "6.37.0", + "resolved": "https://registry.npmjs.org/sequelize/-/sequelize-6.37.0.tgz", + "integrity": "sha512-MS6j6aXqWzB3fe9FhmfpQMgVC16bBdYroJCqIqR0l9M2ko8pZdKoi/0PiNWgMyFQDXUHxXyAOG3K07CbnOhteQ==", "funding": [ { "type": "opencollective", @@ -14440,16 +14269,16 @@ } }, "node_modules/socks": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/socks/-/socks-2.7.1.tgz", - "integrity": "sha512-7maUZy1N7uo6+WVEX6psASxtNlKaNVMlGQKkG/63nEDdLOWNbiUMoLK7X4uYoLhQstau72mLgfEWcXcwsaHbYQ==", + "version": "2.7.3", + "resolved": "https://registry.npmjs.org/socks/-/socks-2.7.3.tgz", + "integrity": "sha512-vfuYK48HXCTFD03G/1/zkIls3Ebr2YNa4qU9gHDZdblHLiqhJrJGkY3+0Nx0JpN9qBhJbVObc1CNciT1bIZJxw==", "devOptional": true, "dependencies": { - "ip": "^2.0.0", + "ip-address": "^9.0.5", "smart-buffer": "^4.2.0" }, "engines": { - "node": ">= 10.13.0", + "node": ">= 10.0.0", "npm": ">= 3.0.0" } }, @@ -14593,7 +14422,7 @@ "version": "1.1.3", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.3.tgz", "integrity": "sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==", - "optional": true + "devOptional": true }, "node_modules/sqlite3": { "version": "5.1.7", @@ -16618,36 +16447,6 @@ "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, - "node_modules/wrap-ansi-cjs/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/wrap-ansi-cjs/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/wrap-ansi-cjs/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, "node_modules/wrap-ansi-cjs/node_modules/emoji-regex": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", @@ -16899,6 +16698,7 @@ "globals": "^13.23.0", "graceful-fs": "^4.2.11", "mocha": "^10.2.0", + "pirates": "^4.0.6", "precinct": "^11.0.5", "rimraf": "^5.0.5", "source-map-loader": "4.0.1", diff --git a/package.json b/package.json index 48016d5..1ac2175 100644 --- a/package.json +++ b/package.json @@ -13,13 +13,14 @@ "gh-pages": "cd gh-pages && git add . && git commit -m $(git -C ../website rev-parse HEAD) && git push origin gh-pages", "lint": "node build/tasks npm run -- lint", "publish": "node build/publish --provenance", - "test": "node build/tasks npm run -- test", + "test": "MOCHA_COLORS=1 node build/tasks npm run -- test", "verify": "act -j test --matrix node-version:20.x" }, "workspaces": [ "packages/*" ], "devDependencies": { - "@npmcli/arborist": "^7.3.1" + "@npmcli/arborist": "^7.3.1", + "chalk": "^4.1.2" } } diff --git a/packages/build/build/build.js b/packages/build/build/build.js index a9770be..391918f 100644 --- a/packages/build/build/build.js +++ b/packages/build/build/build.js @@ -1,3 +1,16 @@ +const {addHook} = require('pirates'); +// Hack in `require.context`. +addHook( + (code) => ( + code.replaceAll('require.context', "require('@flecks/core/build/flecks').Flecks.context") + ), + { + exts: ['.js'], + ignoreNodeModules: false, + matcher: (request) => request.match(/flecks\.bootstrap\.js$/), + }, +); + const {join} = require('path'); const D = require('@flecks/core/build/debug'); diff --git a/packages/build/build/flecks.bootstrap.js b/packages/build/build/flecks.bootstrap.js index 5bd92f5..cd2a459 100644 --- a/packages/build/build/flecks.bootstrap.js +++ b/packages/build/build/flecks.bootstrap.js @@ -1,71 +1,3 @@ -const {join} = require('path'); +const {Flecks} = require('@flecks/core/build/flecks'); -const webpack = require('webpack'); - -const {commands} = require('./commands'); -const {ProcessAssets} = require('./process-assets'); -const {externals} = require('./webpack'); - -const { - FLECKS_CORE_ROOT = process.cwd(), -} = process.env; - -exports.hooks = { - '@flecks/build.extensions': () => ['.mjs', '.js', '.json', '.wasm'], - '@flecks/build.commands': commands, - '@flecks/build.config': async (target, config, env, argv, flecks) => { - if (flecks.get('@flecks/build.profile').includes(target)) { - config.plugins.push( - new webpack.debug.ProfilingPlugin({ - outputPath: join(FLECKS_CORE_ROOT, `profile.build-${target}.json`), - }), - ); - } - if (flecks.roots.some(([path, request]) => path !== request)) { - config.resolve.symlinks = false; - } - config.plugins.push(new ProcessAssets(target, flecks)); - }, - '@flecks/build.config.alter': async ({test}, env, argv, flecks) => { - if (test) { - // Externalize the rest. - test.externals = await externals({ - additionalModuleDirs: flecks.resolver.modules, - allowlist: Object.keys(test.resolve.fallback).map((fallback) => new RegExp(fallback)), - }); - } - }, - '@flecks/build.files': () => [ - /** - * Babel configuration. See: https://babeljs.io/docs/en/config-files - */ - 'babel.config.js', - /** - * ESLint defaults. The generated `eslint.config.js` just reads from this file so that the - * build can dynamically configure parts of ESLint. - */ - 'default.eslint.config.js', - /** - * ESLint configuration managed by flecks to allow async. - */ - 'eslint.config.js', - /** - * Flecks webpack configuration. See: https://webpack.js.org/configuration/ - */ - 'fleckspack.config.js', - /** - * Fleck source build configuration. See: https://webpack.js.org/configuration/ - */ - 'fleck.webpack.config.js', - /** - * Fleck test build configuration. See: https://webpack.js.org/configuration/ - */ - 'test.webpack.config.js', - ], - '@flecks/core.config': () => ({ - /** - * Build targets to profile with `webpack.debug.ProfilingPlugin`. - */ - profile: [], - }), -}; +exports.hooks = Flecks.hooks(require.context('./hooks')); diff --git a/packages/build/build/commands.js b/packages/build/build/hooks/@flecks/build.commands.js similarity index 99% rename from packages/build/build/commands.js rename to packages/build/build/hooks/@flecks/build.commands.js index b162d98..a8a784d 100644 --- a/packages/build/build/commands.js +++ b/packages/build/build/hooks/@flecks/build.commands.js @@ -96,7 +96,7 @@ async function rootsDependencies(roots, resolver) { ); } -exports.commands = (program, flecks) => { +exports.hook = (program, flecks) => { const commands = { add: { args: [ diff --git a/packages/build/build/hooks/@flecks/build.config.alter.js b/packages/build/build/hooks/@flecks/build.config.alter.js new file mode 100644 index 0000000..68d9c84 --- /dev/null +++ b/packages/build/build/hooks/@flecks/build.config.alter.js @@ -0,0 +1,11 @@ +const {externals} = require('../../webpack'); + +exports.hook = async ({test}, env, argv, flecks) => { + if (test) { + // Externalize the rest. + test.externals = await externals({ + additionalModuleDirs: flecks.resolver.modules, + allowlist: Object.keys(test.resolve.fallback).map((fallback) => new RegExp(fallback)), + }); + } +}; diff --git a/packages/build/build/hooks/@flecks/build.config.js b/packages/build/build/hooks/@flecks/build.config.js new file mode 100644 index 0000000..27c2faf --- /dev/null +++ b/packages/build/build/hooks/@flecks/build.config.js @@ -0,0 +1,23 @@ +const {join} = require('path'); + +const webpack = require('webpack'); + +const {ProcessAssets} = require('../../process-assets'); + +const { + FLECKS_CORE_ROOT = process.cwd(), +} = process.env; + +exports.hook = async (target, config, env, argv, flecks) => { + if (flecks.get('@flecks/build.profile').includes(target)) { + config.plugins.push( + new webpack.debug.ProfilingPlugin({ + outputPath: join(FLECKS_CORE_ROOT, `profile.build-${target}.json`), + }), + ); + } + if (flecks.roots.some(([path, request]) => path !== request)) { + config.resolve.symlinks = false; + } + config.plugins.push(new ProcessAssets(target, flecks)); +}; diff --git a/packages/build/build/hooks/@flecks/build.extensions.js b/packages/build/build/hooks/@flecks/build.extensions.js new file mode 100644 index 0000000..5e127bb --- /dev/null +++ b/packages/build/build/hooks/@flecks/build.extensions.js @@ -0,0 +1 @@ +exports.hook = () => ['.mjs', '.js', '.json', '.wasm']; diff --git a/packages/build/build/hooks/@flecks/build.files.js b/packages/build/build/hooks/@flecks/build.files.js new file mode 100644 index 0000000..3253b62 --- /dev/null +++ b/packages/build/build/hooks/@flecks/build.files.js @@ -0,0 +1,27 @@ +exports.hook = () => [ + /** + * Babel configuration. See: https://babeljs.io/docs/en/config-files + */ + 'babel.config.js', + /** + * ESLint defaults. The generated `eslint.config.js` just reads from this file so that the + * build can dynamically configure parts of ESLint. + */ + 'default.eslint.config.js', + /** + * ESLint configuration managed by flecks to allow async. + */ + 'eslint.config.js', + /** + * Flecks webpack configuration. See: https://webpack.js.org/configuration/ + */ + 'fleckspack.config.js', + /** + * Fleck source build configuration. See: https://webpack.js.org/configuration/ + */ + 'fleck.webpack.config.js', + /** + * Fleck test build configuration. See: https://webpack.js.org/configuration/ + */ + 'test.webpack.config.js', +]; diff --git a/packages/build/build/hooks/@flecks/core.config.js b/packages/build/build/hooks/@flecks/core.config.js new file mode 100644 index 0000000..1a565ff --- /dev/null +++ b/packages/build/build/hooks/@flecks/core.config.js @@ -0,0 +1,6 @@ +exports.hook = () => ({ + /** + * Build targets to profile with `webpack.debug.ProfilingPlugin`. + */ + profile: [], +}); diff --git a/packages/build/package.json b/packages/build/package.json index a7891e4..7e5567c 100644 --- a/packages/build/package.json +++ b/packages/build/package.json @@ -54,6 +54,7 @@ "globals": "^13.23.0", "graceful-fs": "^4.2.11", "mocha": "^10.2.0", + "pirates": "^4.0.6", "precinct": "^11.0.5", "rimraf": "^5.0.5", "source-map-loader": "4.0.1", diff --git a/packages/core/src/hooks/@flecks/core.hmr.js b/packages/core/src/hooks/@flecks/core.hmr.js new file mode 100644 index 0000000..817c7e9 --- /dev/null +++ b/packages/core/src/hooks/@flecks/core.hmr.js @@ -0,0 +1,34 @@ +const {join} = require('path'); + +const { + FLECKS_CORE_ROOT = process.cwd(), +} = process.env; + +exports.hook = (path, config, flecks) => { + if (path !== join(FLECKS_CORE_ROOT, 'build', 'flecks.yml')) { + return; + } + const dealiasedConfig = flecks.constructor.dealiasedConfig(config); + if ( + JSON.stringify(Object.keys(flecks.originalConfig).sort()) + !== JSON.stringify(Object.keys(dealiasedConfig).sort()) + ) { + throw new Error('build manifest keys changed!'); + } + Object.entries(dealiasedConfig) + .forEach(([fleck, value]) => { + if (JSON.stringify(flecks.originalConfig[fleck]) !== JSON.stringify(value)) { + const fleckList = flecks.flecksImplementing('@flecks/core.reload'); + for (let i = 0; i < fleckList.length; ++i) { + try { + flecks.invokeFleck('@flecks/core.reload', fleckList[i], fleck, value); + } + catch (error) { + throw new Error(`'${fleck}' aborted reload: ${error.name}: ${error.message}`); + } + } + flecks.originalConfig[fleck] = value; + flecks.configureFleckDefaults(fleck); + } + }); +}; diff --git a/packages/core/src/hooks/@flecks/web.config.js b/packages/core/src/hooks/@flecks/web.config.js new file mode 100644 index 0000000..58915b1 --- /dev/null +++ b/packages/core/src/hooks/@flecks/web.config.js @@ -0,0 +1,3 @@ +exports.hook = async (req, flecks) => ({ + id: flecks.get('@flecks/core.id'), +}); diff --git a/packages/core/src/index.js b/packages/core/src/index.js index a9f367a..af84cd9 100644 --- a/packages/core/src/index.js +++ b/packages/core/src/index.js @@ -1,48 +1,11 @@ /* eslint-disable global-require */ -const {join} = require('path'); +const {Flecks} = require('../build/flecks'); -const { - FLECKS_CORE_ROOT = process.cwd(), -} = process.env; +export {default as Class} from '../build/class'; +export {default as compose} from '../build/compose'; +export {default as D} from '../build/debug'; +export {default as EventEmitter} from '../build/event-emitter'; +export * from '../build/flecks'; -module.exports = { - Class: require('../build/class'), - compose: require('../build/compose'), - D: require('../build/debug'), - EventEmitter: require('../build/event-emitter'), - ...require('../build/flecks'), - hooks: { - '@flecks/core.hmr': (path, config, flecks) => { - if (path !== join(FLECKS_CORE_ROOT, 'build', 'flecks.yml')) { - return; - } - const dealiasedConfig = flecks.constructor.dealiasedConfig(config); - if ( - JSON.stringify(Object.keys(flecks.originalConfig).sort()) - !== JSON.stringify(Object.keys(dealiasedConfig).sort()) - ) { - throw new Error('build manifest keys changed!'); - } - Object.entries(dealiasedConfig) - .forEach(([fleck, value]) => { - if (JSON.stringify(flecks.originalConfig[fleck]) !== JSON.stringify(value)) { - const fleckList = flecks.flecksImplementing('@flecks/core.reload'); - for (let i = 0; i < fleckList.length; ++i) { - try { - flecks.invokeFleck('@flecks/core.reload', fleckList[i], fleck, value); - } - catch (error) { - throw new Error(`'${fleck}' aborted reload: ${error.name}: ${error.message}`); - } - } - flecks.originalConfig[fleck] = value; - flecks.configureFleckDefaults(fleck); - } - }); - }, - '@flecks/web.config': async (req, flecks) => ({ - id: flecks.get('@flecks/core.id'), - }), - }, -}; +export const hooks = Flecks.hooks(require.context('./hooks')); diff --git a/packages/db/src/connection.js b/packages/db/src/server/connection.js similarity index 100% rename from packages/db/src/connection.js rename to packages/db/src/server/connection.js diff --git a/packages/db/src/server/hooks/@flecks/core.hmr.gathered.js b/packages/db/src/server/hooks/@flecks/core.hmr.gathered.js new file mode 100644 index 0000000..3178c39 --- /dev/null +++ b/packages/db/src/server/hooks/@flecks/core.hmr.gathered.js @@ -0,0 +1,7 @@ +import register from '@flecks/db/server/register'; + +export const hook = (gathered, hook, flecks) => { + if ('@flecks/db.models' === hook) { + register(gathered, flecks.db.sequelize); + } +}; diff --git a/packages/db/src/server/hooks/@flecks/docker.containers.js b/packages/db/src/server/hooks/@flecks/docker.containers.js new file mode 100644 index 0000000..1dcfddd --- /dev/null +++ b/packages/db/src/server/hooks/@flecks/docker.containers.js @@ -0,0 +1,3 @@ +import containers from '@flecks/db/build/containers'; + +export const hook = containers; diff --git a/packages/db/src/server/hooks/@flecks/server.up.js b/packages/db/src/server/hooks/@flecks/server.up.js new file mode 100644 index 0000000..fd51424 --- /dev/null +++ b/packages/db/src/server/hooks/@flecks/server.up.js @@ -0,0 +1,10 @@ +import {Flecks} from '@flecks/core'; + +import {createDatabaseConnection} from '@flecks/db/server/connection'; + +export const hook = Flecks.priority( + async (flecks) => { + flecks.db.sequelize = await createDatabaseConnection(flecks); + }, + {after: '@flecks/docker/server'}, +); diff --git a/packages/db/src/server.js b/packages/db/src/server/index.js similarity index 59% rename from packages/db/src/server.js rename to packages/db/src/server/index.js index faf38ba..208088b 100644 --- a/packages/db/src/server.js +++ b/packages/db/src/server/index.js @@ -1,9 +1,5 @@ import {Flecks} from '@flecks/core'; -import containers from '../build/containers'; -import {createDatabaseConnection} from './connection'; -import register from './register'; - export { DataTypes as Types, Op, @@ -13,22 +9,7 @@ export { export {default as Model} from './model'; -export {createDatabaseConnection}; - -export const hooks = { - '@flecks/core.hmr.gathered': (gathered, hook, flecks) => { - if ('@flecks/db.models' === hook) { - register(gathered, flecks.db.sequelize); - } - }, - '@flecks/docker.containers': containers, - '@flecks/server.up': Flecks.priority( - async (flecks) => { - flecks.db.sequelize = await createDatabaseConnection(flecks); - }, - {after: '@flecks/docker/server'}, - ), -}; +export const hooks = Flecks.hooks(require.context('./hooks')); export const mixin = (Flecks) => class FlecksWithDb extends Flecks { diff --git a/packages/db/src/model.js b/packages/db/src/server/model.js similarity index 100% rename from packages/db/src/model.js rename to packages/db/src/server/model.js diff --git a/packages/db/src/register.js b/packages/db/src/server/register.js similarity index 100% rename from packages/db/src/register.js rename to packages/db/src/server/register.js diff --git a/packages/db/test/server/thing/index.js b/packages/db/test/server/thing/index.js index 88f0b3b..c4aac8d 100644 --- a/packages/db/test/server/thing/index.js +++ b/packages/db/test/server/thing/index.js @@ -1,4 +1,4 @@ -import Model from '../../../src/model'; +import Model from '@flecks/db/server/model'; export const hooks = { '@flecks/db.models': () => ({ diff --git a/packages/fleck/build/commands.js b/packages/fleck/build/commands.js index cd69f0d..47cd088 100644 --- a/packages/fleck/build/commands.js +++ b/packages/fleck/build/commands.js @@ -1,9 +1,9 @@ const {access} = require('fs/promises'); const {join} = require('path'); -const {commands: coreCommands} = require('@flecks/build/build/commands'); +const {hook: coreCommands} = require('@flecks/build/build/hooks/@flecks/build.commands'); const {rimraf} = require('@flecks/build/src/server'); -const {D} = require('@flecks/core/src'); +const D = require('@flecks/core/build/debug'); const {glob, pipesink, processCode} = require('@flecks/core/src/server'); const Mocha = require('mocha'); const {watchParallelRun} = require('mocha/lib/cli/watch-run'); @@ -23,8 +23,7 @@ module.exports = (program, flecks) => { ], options: [ program.createOption('-d, --no-production', 'dev build'), - program.createOption('-p, --platform [platforms...]', 'platforms to test') - .default(['default', 'server']), + program.createOption('-p, --platform [platforms...]', 'platforms to test'), program.createOption('-t, --timeout ', 'timeout').default(2000), program.createOption('-v, --verbose', 'verbose output'), program.createOption('-w, --watch', 'watch for changes'), @@ -44,6 +43,9 @@ module.exports = (program, flecks) => { const {build} = coreCommands(program, flecks); // Check for work. const [env, argv] = [{}, {mode: production ? 'production' : 'development'}]; + if (platforms) { + process.env.FLECKS_CORE_TEST_PLATFORMS = JSON.stringify(platforms); + } const filename = await flecks.resolveBuildConfig('test.webpack.config.js', '@flecks/build'); const config = {test: await require(filename)(env, argv, flecks)}; await flecks.configureBuilds(config, env, argv); @@ -57,7 +59,7 @@ module.exports = (program, flecks) => { 'test', { env: { - FLECKS_CORE_TEST_PLATFORMS: JSON.stringify(platforms), + FLECKS_CORE_TEST_PLATFORMS: platforms && JSON.stringify(platforms), FORCE_COLOR: 'dumb' !== TERM, }, production, diff --git a/packages/repl/build/commands.js b/packages/repl/build/commands.js index 427ae24..18c2483 100644 --- a/packages/repl/build/commands.js +++ b/packages/repl/build/commands.js @@ -3,7 +3,7 @@ const {readdir} = require('fs/promises'); const {tmpdir} = require('os'); const {join} = require('path'); -const {D} = require('@flecks/core/src'); +const D = require('@flecks/core/build/debug'); const commandExists = require('command-exists'); const debug = D('@flecks/repl/commands'); diff --git a/packages/server/build/flecks.bootstrap.js b/packages/server/build/flecks.bootstrap.js index c18fe5e..0bbb2f7 100644 --- a/packages/server/build/flecks.bootstrap.js +++ b/packages/server/build/flecks.bootstrap.js @@ -1,61 +1,5 @@ -const {banner} = require('@flecks/build/src/server'); +const {Flecks} = require('@flecks/core/build/flecks'); exports.dependencies = ['@flecks/build']; -exports.hooks = { - '@flecks/build.config.alter': ({server}, env, argv, flecks) => { - if (server) { - const resolver = JSON.stringify({ - alias: server.resolve.alias, - fallback: server.resolve.fallback, - }); - const stubs = JSON.stringify(flecks.stubs); - if ('{"alias":{},"fallback":{}}' !== resolver || '[]' !== stubs) { - server.plugins.push( - banner({ - // `require()` magic. - banner: `require('@flecks/core/build/resolve')(${resolver}, ${stubs})`, - include: 'index.js', - }), - ); - } - } - }, - '@flecks/build.files': () => [ - /** - * Server build configuration. See: https://webpack.js.org/configuration/ - */ - 'server.webpack.config.js', - ], - '@flecks/build.targets': () => ['server'], - '@flecks/build.targets.alter': (targets) => { - // Don't build if there's a fleck target. - if (targets.has('fleck')) { - targets.delete('server'); - } - }, - '@flecks/core.config': () => ({ - /** - * Whether HMR is enabled. - */ - hot: false, - /** - * Arguments to pass along to node. See: https://nodejs.org/api/cli.html - */ - nodeArgs: [], - /** - * Environment to pass along to node. See: https://nodejs.org/api/cli.html#environment-variables - */ - nodeEnv: {}, - /** - * Whether to start the server after building. - */ - start: true, - /** - * Webpack stats configuration. - */ - stats: { - preset: 'minimal', - }, - }), -}; +exports.hooks = Flecks.hooks(require.context('./hooks')); diff --git a/packages/server/build/hooks/@flecks/build.config.alter.js b/packages/server/build/hooks/@flecks/build.config.alter.js new file mode 100644 index 0000000..84b21eb --- /dev/null +++ b/packages/server/build/hooks/@flecks/build.config.alter.js @@ -0,0 +1,20 @@ +const {banner} = require('@flecks/build/src/server'); + +exports.hook = ({server}, env, argv, flecks) => { + if (server) { + const resolver = JSON.stringify({ + alias: server.resolve.alias, + fallback: server.resolve.fallback, + }); + const stubs = JSON.stringify(flecks.stubs); + if ('{"alias":{},"fallback":{}}' !== resolver || '[]' !== stubs) { + server.plugins.push( + banner({ + // `require()` magic. + banner: `require('@flecks/core/build/resolve')(${resolver}, ${stubs})`, + include: 'index.js', + }), + ); + } + } +}; diff --git a/packages/server/build/hooks/@flecks/build.files.js b/packages/server/build/hooks/@flecks/build.files.js new file mode 100644 index 0000000..dea2c9b --- /dev/null +++ b/packages/server/build/hooks/@flecks/build.files.js @@ -0,0 +1,6 @@ +exports.hook = () => [ + /** + * Server build configuration. See: https://webpack.js.org/configuration/ + */ + 'server.webpack.config.js', +]; diff --git a/packages/server/build/hooks/@flecks/build.targets.alter.js b/packages/server/build/hooks/@flecks/build.targets.alter.js new file mode 100644 index 0000000..e865549 --- /dev/null +++ b/packages/server/build/hooks/@flecks/build.targets.alter.js @@ -0,0 +1,6 @@ +exports.hook = (targets) => { + // Don't build if there's a fleck target. + if (targets.has('fleck')) { + targets.delete('server'); + } +}; diff --git a/packages/server/build/hooks/@flecks/build.targets.js b/packages/server/build/hooks/@flecks/build.targets.js new file mode 100644 index 0000000..a5fdf85 --- /dev/null +++ b/packages/server/build/hooks/@flecks/build.targets.js @@ -0,0 +1 @@ +exports.hook = () => ['server']; diff --git a/packages/server/build/hooks/@flecks/core.config.js b/packages/server/build/hooks/@flecks/core.config.js new file mode 100644 index 0000000..66b1224 --- /dev/null +++ b/packages/server/build/hooks/@flecks/core.config.js @@ -0,0 +1,24 @@ +exports.hook = () => ({ + /** + * Whether HMR is enabled. + */ + hot: false, + /** + * Arguments to pass along to node. See: https://nodejs.org/api/cli.html + */ + nodeArgs: [], + /** + * Environment to pass along to node. See: https://nodejs.org/api/cli.html#environment-variables + */ + nodeEnv: {}, + /** + * Whether to start the server after building. + */ + start: true, + /** + * Webpack stats configuration. + */ + stats: { + preset: 'minimal', + }, +}); diff --git a/packages/server/src/server.js b/packages/server/src/server.js deleted file mode 100644 index e17c94a..0000000 --- a/packages/server/src/server.js +++ /dev/null @@ -1,59 +0,0 @@ -import cluster from 'cluster'; -import {createConnection} from 'net'; - -const { - FLECKS_SERVER_TEST_SOCKET, - NODE_ENV, -} = process.env; - -export const hooks = { - '@flecks/core.hmr.hook': (hook) => { - if ('@flecks/server.up' === hook) { - if (cluster.isWorker) { - cluster.worker.disconnect(); - const error = new Error('@flecks/server.up implementation changed!'); - error.stack = ''; - throw error; - } - } - }, - '@flecks/server.up': (flecks) => { - if (!FLECKS_SERVER_TEST_SOCKET || 'test' !== NODE_ENV) { - return; - } - const socket = createConnection(FLECKS_SERVER_TEST_SOCKET); - if (cluster.isWorker) { - cluster.worker.on('disconnect', () => { - socket.end(); - }); - } - flecks.server.socket = socket; - socket.on('connect', () => { - socket.on('data', (data) => { - const {meta, payload, type} = JSON.parse(data); - switch (type) { - case 'config.get': - socket.write(JSON.stringify({ - meta, - payload: flecks.get(payload), - })); - break; - case 'exit': - socket.end(); - process.exit(payload); - break; - default: - } - }); - }); - }, -}; - -export const mixin = (Flecks) => class FlecksWithServer extends Flecks { - - constructor(runtime) { - super(runtime); - this.server = {}; - } - -}; diff --git a/packages/server/src/server/hooks/@flecks/core.hmr.hook.js b/packages/server/src/server/hooks/@flecks/core.hmr.hook.js new file mode 100644 index 0000000..162f725 --- /dev/null +++ b/packages/server/src/server/hooks/@flecks/core.hmr.hook.js @@ -0,0 +1,12 @@ +import cluster from 'cluster'; + +export const hook = (hook) => { + if ('@flecks/server.up' === hook) { + if (cluster.isWorker) { + cluster.worker.disconnect(); + const error = new Error('@flecks/server.up implementation changed!'); + error.stack = ''; + throw error; + } + } +}; diff --git a/packages/server/src/server/hooks/@flecks/server.up.js b/packages/server/src/server/hooks/@flecks/server.up.js new file mode 100644 index 0000000..a117f54 --- /dev/null +++ b/packages/server/src/server/hooks/@flecks/server.up.js @@ -0,0 +1,38 @@ +import cluster from 'cluster'; +import {createConnection} from 'net'; + +const { + FLECKS_SERVER_TEST_SOCKET, + NODE_ENV, +} = process.env; + +export const hook = (flecks) => { + if (!FLECKS_SERVER_TEST_SOCKET || 'test' !== NODE_ENV) { + return; + } + const socket = createConnection(FLECKS_SERVER_TEST_SOCKET); + if (cluster.isWorker) { + cluster.worker.on('disconnect', () => { + socket.end(); + }); + } + flecks.server.socket = socket; + socket.on('connect', () => { + socket.on('data', (data) => { + const {meta, payload, type} = JSON.parse(data); + switch (type) { + case 'config.get': + socket.write(JSON.stringify({ + meta, + payload: flecks.get(payload), + })); + break; + case 'exit': + socket.end(); + process.exit(payload); + break; + default: + } + }); + }); +}; diff --git a/packages/server/src/server/index.js b/packages/server/src/server/index.js new file mode 100644 index 0000000..1f72da6 --- /dev/null +++ b/packages/server/src/server/index.js @@ -0,0 +1,12 @@ +import {Flecks} from '@flecks/core'; + +export const hooks = Flecks.hooks(require.context('./hooks')); + +export const mixin = (Flecks) => class FlecksWithServer extends Flecks { + + constructor(runtime) { + super(runtime); + this.server = {}; + } + +}; diff --git a/packages/web/build/flecks.bootstrap.js b/packages/web/build/flecks.bootstrap.js index 8384922..2b2240d 100644 --- a/packages/web/build/flecks.bootstrap.js +++ b/packages/web/build/flecks.bootstrap.js @@ -14,6 +14,7 @@ const MiniCssExtractPlugin = require('mini-css-extract-plugin'); const { FLECKS_CORE_ROOT = process.cwd(), + FLECKS_CORE_TEST_PLATFORMS, } = process.env; const tests = join(FLECKS_CORE_ROOT, 'test'); @@ -36,14 +37,20 @@ exports.hooks = { case 'test': { finalLoader = {loader: MiniCssExtractPlugin.loader}; config.plugins.push(new MiniCssExtractPlugin({filename: 'assets/[name].css'})); - (await glob(join(tests, 'client', '*.js'))) - .forEach((path) => { - const entry = relative(tests, path); - config.entry[join(dirname(entry), basename(entry, extname(entry)))] = [ - 'source-map-support/register', - path, - ]; - }); + if ( + FLECKS_CORE_TEST_PLATFORMS + ? JSON.parse(FLECKS_CORE_TEST_PLATFORMS).includes('client') + : true + ) { + (await glob(join(tests, 'client', '*.js'))) + .forEach((path) => { + const entry = relative(tests, path); + config.entry[join(dirname(entry), basename(entry, extname(entry)))] = [ + 'source-map-support/register', + path, + ]; + }); + } break; } case 'web': {