From e2d3be10fb6373194c9c0e589e1c17e7952c9398 Mon Sep 17 00:00:00 2001 From: Jason Caldwell Date: Wed, 27 Sep 2023 16:37:19 -0400 Subject: [PATCH] Project update. [p][robotic] --- .browserslistrc | 8 +- .dockerignore | 8 +- .gitattributes | 138 +- .github/workflows/ci.yml | 2 +- .gitignore | 2 +- .npmignore | 8 +- .prettierignore | 4 +- .vscode/extensions.json | 2 +- .vscode/settings.json | 57 +- .vscodeignore | 8 +- ts-types.d.ts => dev-types.d.ts | 12 +- dev/.files/bin/gitattributes/index.mjs | 2 +- dev/.files/bin/includes/exclusions.mjs | 59 +- dev/.files/bin/includes/extensions.mjs | 90 +- dev/.files/bin/includes/node-version.mjs | 6 +- dev/.files/bin/includes/utilities.mjs | 56 +- dev/.files/bin/prettierignore/index.mjs | 2 +- dev/.files/bin/update.mjs | 18 +- .../updater/data/_package.json/updates.json | 2 + dev/.files/bin/updater/index.mjs | 48 +- dev/.files/eslint/config.mjs | 112 +- dev/.files/jest/config.mjs | 10 +- dev/.files/mdx/config.mjs | 6 +- dev/.files/prettier/config.mjs | 48 +- dev/.files/stylelint/config.mjs | 6 +- dev/.files/tailwind/config.mjs | 2 + dev/.files/typescript/config.mjs | 39 +- dev/.files/vite/config.mjs | 23 +- dev/.files/vite/includes/c10n/config.mjs | 10 +- dev/.files/vite/includes/mdx/config.mjs | 4 +- dev/.files/vite/includes/package/updates.mjs | 93 +- dev/.files/vite/includes/rollup/config.mjs | 30 +- dev/.files/vite/includes/vitest/config.mjs | 62 +- dev/.files/vscode/config.mjs | 42 +- dev/.files/wrangler/config.mjs | 65 +- package-lock.json | 1657 ++++++----------- package.json | 18 +- src/cfw.ts | 25 +- src/geo.ts | 4 +- src/resources/init-env.ts | 6 +- tsconfig.json | 11 +- wrangler.toml | 277 ++- 42 files changed, 1581 insertions(+), 1501 deletions(-) rename ts-types.d.ts => dev-types.d.ts (53%) diff --git a/.browserslistrc b/.browserslistrc index 0b91e39..fb1354b 100644 --- a/.browserslistrc +++ b/.browserslistrc @@ -17,11 +17,11 @@ # Generated data. # -# Last generated Thu, Sep 21, 2023, 6:04:41 AM EDT. +# Last generated Wed, Sep 27, 2023, 4:09:09 PM EDT. [production] last 1 chrome versions -node >= 20.5.1 +node >= 20.5.0 and_chr >= 92 chrome >= 92 and_ff >= 90 @@ -46,7 +46,7 @@ not dead [any] last 1 chrome versions -node >= 20.5.1 +node >= 20.5.0 and_chr >= 92 chrome >= 92 and_ff >= 90 @@ -70,7 +70,7 @@ unreleased firefox versions not dead [node] -node >= 20.5.1 +node >= 20.5.0 not dead [cfw] diff --git a/.dockerignore b/.dockerignore index c5ede19..04c885c 100644 --- a/.dockerignore +++ b/.dockerignore @@ -17,7 +17,7 @@ # Generated data. # -# Last generated Thu, Sep 21, 2023, 6:04:41 AM EDT. +# Last generated Wed, Sep 27, 2023, 4:09:09 PM EDT. # Locals @@ -214,9 +214,11 @@ dist # npm:Configs -tsconfig.* -wrangler.* *.config.* +wrangler.* +tsconfig.* +dev-types.d.ts +package.json config.gypi # npm:Locks diff --git a/.gitattributes b/.gitattributes index ab7f00f..a7b63be 100644 --- a/.gitattributes +++ b/.gitattributes @@ -17,7 +17,7 @@ # Generated data. # -# Last generated Thu, Sep 21, 2023, 6:04:41 AM EDT. +# Last generated Wed, Sep 27, 2023, 4:09:08 PM EDT. # Default @@ -26,42 +26,51 @@ # Text *.txt text +*.text text # Markdown -*.md text *.mdx text +*.md text +*.markdown text +*.mdown text +*.mdwn text +*.mkd text +*.mdtxt text +*.mdtext text # Rich Text -*.rtf binary *.rtx binary +*.rtf binary # HTML -*.htm text *.html text -*.shtm text +*.htm text *.shtml text +*.shtm text +*.xhtml text +*.xhtm text # PDF *.pdf binary -# Other Text - -*.vtt text -*.asc text -*.c text -*.cc text -*.h text -*.srt text - # PHP *.php text -*.phtm text *.phtml text +*.phtm text + +# PHP Source + +*.phps text + +# ASP + +*.asp text +*.aspx text # Ruby @@ -71,36 +80,30 @@ *.py text -# ASP - -*.asp text -*.aspx text - # Perl -*.cgi text +*.pl6 text +*.perl6 text *.pl text *.plx text +*.cgi text *.ppl text *.perl text # Shell -*.sh text -*.zsh text *.bash text +*.zsh text +*.sh text -# Node Archive - -*.node binary - -# PHP Archive - -*.phar binary - -# PHP Source +# C -*.phps text +*.c text +*.cs text +*.cpp text +*.cc text +*.o text +*.h text # Docker @@ -124,27 +127,26 @@ *.wasm binary *.js text -*.cjs text *.mjs text +*.cjs text *.jsx text -*.cjsx text *.mjsx text +*.cjsx text # TypeScript *.ts text -*.cts text *.mts text +*.cts text *.tsx text -*.ctsx text *.mtsx text +*.ctsx text # Style *.css text *.scss text *.less text -*.xsd text *.xsl text *.xslt text @@ -210,14 +212,14 @@ # I18n *.po text +*.pot text *.mo binary # XML -*.dtd text -*.xhtm text -*.xhtml text *.xml text +*.xsd text +*.dtd text # Calendar @@ -227,9 +229,9 @@ *.atom text *.rdf text -*.rss-http text *.rss text *.rss2 text +*.rss-http text # Log @@ -237,6 +239,10 @@ # Other Data +*.asx binary +*.vtt text +*.srt text +*.dfxp text *.hex binary # Other Config @@ -249,8 +255,8 @@ *.editorconfig text *.shellcheckrc text *.browserslistrc text -*.gitconfig text *.gitchange text +*.gitconfig text *.gitattributes text *.gitignore text *.npmignore text @@ -262,7 +268,6 @@ # Image *.ai binary -*.apng binary *.bmp binary *.eps binary *.gif binary @@ -273,6 +278,8 @@ *.jpe binary *.pict binary *.png binary +*.apng binary +*.xcf binary *.psd binary *.pspimage binary *.svg text @@ -302,12 +309,7 @@ # Video -*.3g2 binary -*.3gp2 binary -*.3gp binary -*.3gpp binary *.asf binary -*.asx binary *.avi binary *.divx binary *.flv binary @@ -335,36 +337,37 @@ # Archive -*.7z binary +*.iso binary *.dmg binary +*.tar binary *.gtar binary *.gz binary *.tgz binary *.gzip binary -*.iso binary -*.jar binary *.rar binary -*.tar binary *.zip binary -*.sketch binary +*.7z binary +*.jar binary +*.node binary +*.phar binary # Certificate *.csr text *.crt text *.pem text +*.asc text # Other Application +*.so binary *.app binary -*.xcf binary *.bin binary -*.blend binary *.com binary -*.dfxp binary *.dll binary *.exe binary -*.so binary +*.blend binary +*.sketch binary # Google @@ -377,6 +380,12 @@ *.fla binary *.swf binary +# Apple + +*.key binary +*.numbers binary +*.pages binary + # MS Office *.doc binary @@ -386,14 +395,13 @@ *.dotx binary *.mdb binary *.mpp binary +*.one binary *.onetoc binary *.onetoc2 binary -*.onetmp binary *.onepkg binary *.oxps binary -*.pot binary -*.pps binary *.ppt binary +*.pps binary *.potm binary *.potx binary *.ppam binary @@ -428,14 +436,8 @@ # WordPerfect -*.wp binary *.wpd binary - -# iWork - -*.key binary -*.numbers binary -*.pages binary +*.wp binary # Special Cases diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 8bb74a3..1e69095 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -31,7 +31,7 @@ jobs: strategy: matrix: os: [ubuntu-latest] - node-version: [20.5.1] + node-version: [20.5.0] runs-on: ${{matrix.os}} environment: ci # CI environment. diff --git a/.gitignore b/.gitignore index 4ca4dc5..2d8519d 100644 --- a/.gitignore +++ b/.gitignore @@ -17,7 +17,7 @@ # Generated data. # -# Last generated Thu, Sep 21, 2023, 6:04:41 AM EDT. +# Last generated Wed, Sep 27, 2023, 4:09:08 PM EDT. # Locals diff --git a/.npmignore b/.npmignore index 2f7a1e4..fea9e45 100644 --- a/.npmignore +++ b/.npmignore @@ -25,7 +25,7 @@ # Generated data. # -# Last generated Thu, Sep 21, 2023, 6:04:41 AM EDT. +# Last generated Wed, Sep 27, 2023, 4:09:09 PM EDT. # Locals @@ -222,9 +222,11 @@ dist # npm:Configs -tsconfig.* -wrangler.* *.config.* +wrangler.* +tsconfig.* +dev-types.d.ts +package.json config.gypi # npm:Locks diff --git a/.prettierignore b/.prettierignore index 30b0bd9..78aeb7c 100644 --- a/.prettierignore +++ b/.prettierignore @@ -17,7 +17,7 @@ # Generated data. # -# Last generated Thu, Sep 21, 2023, 6:04:41 AM EDT. +# Last generated Wed, Sep 27, 2023, 4:09:09 PM EDT. # Packages @@ -120,7 +120,7 @@ dist *.npmrc # EJS unsupported at this time. -# @todo Build or find an EJS plugin. +# @someday Build or find an EJS plugin. *.ejs diff --git a/.vscode/extensions.json b/.vscode/extensions.json index 4c5835e..2285d4c 100644 --- a/.vscode/extensions.json +++ b/.vscode/extensions.json @@ -35,5 +35,5 @@ * Customizations. * */ - /* */ + /* */ } diff --git a/.vscode/settings.json b/.vscode/settings.json index 8973c3b..2c8a7b4 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -7,7 +7,7 @@ * @note This entire file will be updated automatically. * @note Instead of editing here, please review `./settings.mjs`. * - * Last generated using `./settings.mjs` Thu, Sep 21, 2023, 6:04:41 AM EDT. + * Last generated using `./settings.mjs` Wed, Sep 27, 2023, 4:09:08 PM EDT. */ { "editor.autoIndent": "full", @@ -23,41 +23,46 @@ "files.insertFinalNewline": true, "files.trimTrailingWhitespace": true, "files.associations": { - "**/*.{asc,asp,aspx,c,cc,crt,csr,csv,h,hta,htc,ics,inputrc,log,pem,po,srt,tpl,tsbuildinfo,tsv,txt,vtt,yarnrc}": "plaintext", - "**/*.md": "markdown", + "**/*.{txt,text,hta,htc,tpl,csv,tsv,po,pot,ics,log,vtt,srt,yarnrc,inputrc,tsbuildinfo,gitchange,csr,crt,pem,asc}": "plaintext", "**/*.mdx": "mdx", - "**/*.{3g2,3gp,3gp2,3gpp,7z,aac,ai,apng,app,asf,asx,avi,bin,blend,bmp,class,com,dfxp,divx,dll,dmg,doc,docm,docx,dotm,dotx,eot,eps,exe,fla,flac,flv,gif,gtar,gz,gzip,heic,ico,iso,jar,jpe,jpeg,jpg,key,kmz,m4a,m4b,m4v,mdb,mid,midi,mka,mkv,mo,mov,mp3,mp4,mpe,mpeg,mpg,mpp,node,numbers,odb,odc,odf,odg,odp,ods,odt,oga,ogg,ogv,onepkg,onetmp,onetoc,onetoc2,otf,oxps,pages,pdf,phar,pict,pls,png,pot,potm,potx,ppam,pps,ppsm,ppsx,ppt,pptm,pptx,ps,psd,pspimage,qt,ra,ram,rar,rtf,rtx,sketch,sldm,sldx,so,svgz,swf,tar,tgz,tif,tiff,ttf,wasm,wav,wax,webm,webp,wm,wma,wmv,wmx,woff,woff2,wp,wpd,wri,xcf,xla,xlam,xls,xlsb,xlsm,xlsx,xlt,xltm,xltx,xlw,xps,zip}": "code-text-binary", - "**/*.{ejs,htm,html,liquid,shtm,shtml}": "html", - "**/*.{php,phps,phtm,phtml}": "php", + "**/*.{md,markdown,mdown,mdwn,mkd,mdtxt,mdtext}": "markdown", + "**/*.{rtx,rtf,pdf,wasm,class,mo,ai,bmp,eps,gif,heic,ico,jpg,jpeg,jpe,pict,png,apng,xcf,psd,pspimage,svgz,tiff,tif,webp,aac,flac,mid,midi,mka,mp3,m4a,m4b,ogg,oga,pls,ra,ram,wav,wax,wma,asf,avi,divx,flv,mkv,mov,qt,mp4,m4v,mpeg,mpg,mpe,ogv,webm,wm,wmv,wmx,otf,ttf,woff,woff2,eot,iso,dmg,tar,gtar,gz,tgz,gzip,rar,zip,7z,jar,node,phar,so,app,bin,com,dll,exe,blend,sketch,kmz,ps,fla,swf,key,numbers,pages,doc,docm,docx,dotm,dotx,mdb,mpp,one,onetoc,onetoc2,onepkg,oxps,ppt,pps,potm,potx,ppam,ppsm,ppsx,pptm,pptx,sldm,sldx,wri,xla,xls,xlt,xlw,xlam,xlsb,xlsm,xlsx,xltm,xltx,xps,odb,odc,odf,odg,odp,ods,odt,wpd,wp}": "code-text-binary", + "**/*.{html,htm,shtml,shtm,xhtml,xhtm,ejs,liquid}": "html", + "**/*.{php,phtml,phtm,phps}": "php", + "**/*.{asp,aspx}": "asp", "**/*.rb": "ruby", "**/*.py": "python", - "**/*.{cgi,perl,pl,plx,ppl}": "perl", - "**/*.{bash,sh,zsh}": "shellscript", + "**/*.{pl6,perl6}": "perl6", + "**/*.{pl,plx,cgi,ppl,perl}": "perl", + "**/*.{bash,zsh,sh}": "shellscript", + "**/*.c": "c", + "**/*.cs": "csharp", + "**/*.{cpp,cc,o,h}": "cpp", "**/*.dockerfile": "dockerfile", "**/*.jxa": "jxa", "**/*.applescript": "applescript", "**/*.{scpt,scptd}": "applescript.binary", "**/*.bat": "bat", - "**/*.{cjs,js,mjs}": "javascript", - "**/*.{cjsx,jsx,mjsx}": "javascriptreact", - "**/*.{cts,mts,ts}": "typescript", - "**/*.{ctsx,mtsx,tsx}": "typescriptreact", + "**/*.{js,mjs,cjs}": "javascript", + "**/*.{jsx,mjsx,cjsx}": "javascriptreact", + "**/*.{ts,mts,cts}": "typescript", + "**/*.{tsx,mtsx,ctsx}": "typescriptreact", "**/*.css": "css", "**/*.scss": "scss", "**/*.less": "less", - "**/*.{atom,dtd,kml,rdf,rss,rss-http,rss2,svg,xhtm,xhtml,xml,xsd,xsl,xslt}": "xml", + "**/*.{xsl,xslt,xml,xsd,dtd,atom,rdf,rss,rss2,rss-http,asx,dfxp,svg,kml}": "xml", "**/*.{sql,sqlite}": "sql", "**/*.{json,jsonld}": "json", - "**/*.{babelrc,json5}": "jsonc", + "**/*.{json5,babelrc}": "jsonc", "**/*.toml": "toml", "**/*.{yaml,yml}": "yaml", "**/*.ini": "ini", - "**/*.{editorconfig,env,gitconfig,npmrc,properties,props}": "properties", + "**/*.{env,props,properties,npmrc,editorconfig,gitconfig}": "properties", "**/*.{conf,htaccess,htpasswd}": "apacheconf", "**/*.hex": "hexEditor.hexedit", "**/*.shellcheckrc": "shellcheckrc", "**/*.browserslistrc": "browserslist", - "**/*.{dockerignore,eslintignore,gitattributes,gitchange,gitignore,npmignore,prettierignore,vscodeignore}": "ignore", + "**/*.{gitattributes,gitignore,npmignore,dockerignore,vscodeignore,prettierignore,eslintignore}": "ignore", "**/.env.*": "properties", "**/CODEOWNERS": "ignore", "**/tsconfig.{json,×××××××}": "jsonc", @@ -126,11 +131,12 @@ "/dev/.files": true, "/.*": true, "/*.tsbuildinfo": true, - "/tsconfig.*": true, - "/wrangler.*": true, "/*.config.*": true, - "/config.gypi": true, + "/wrangler.*": true, + "/tsconfig.*": true, + "/dev-types.d.ts": true, "/package.json": true, + "/config.gypi": true, "/LICENSE.txt": true, "**/yarn.lock": true, "**/composer.lock": true, @@ -151,15 +157,15 @@ }, "@someday": { "scope": "workspace", - "iconColor": "#ead1dc", - "highlightColor": "#ead1dc", + "iconColor": "#6d718a", + "highlightColor": "#6d718a", "styleMode": "tag" } }, "commentAnchors.tags.matchCase": true, "commentAnchors.tags.separators": [" ", ": "], - "commentAnchors.workspace.excludeFiles": "{,**/,*(/|[^/\r\n])/}{*.log,*.logs,*~,*.bak,*.rej,*.orig,*.patch,*.diff,*.code-*,.idea,.*.swp,*.ctags,.env.me,.tscache,*.tsbuildinfo,.vite,.vitest,.wrangler,.dev.vars,.dev.vars.*,.rollup,.webpack,.linaria-cache,.sass-cache,.docker,.vagrant,.elasticbeanstalk,.yarn,vendor,node_modules,jspm_packages,bower_components,.git,.svn,_svn,.svnignore,.bzr,.bzrignore,.hg,.hgignore,Thumbs.db,ehthumbs.db,Desktop.ini,$RECYCLE.BIN,._*,Icon,*.icloud,.DS_Store,.disk_label,.LSOverride,.VolumeIcon.icns,.com.apple.timemachine.*,.apdisk,.fseventsd,.AppleDB,.AppleDesktop,.AppleDouble,.Trashes,.TemporaryItems,.Spotlight-V100,.DocumentRevisions-V100,Network Trash Folder,Temporary Items,yarn.lock,composer.lock,package-lock.json,dist}{,/**,/*(/|[^/\r\n])}", - "commentAnchors.workspace.matchFiles": "{,**/,*(/|[^/\r\n])/}*.{mdx,md,atom,dtd,kml,rdf,rss,rss-http,rss2,svg,xhtm,xhtml,xml,xsd,xsl,xslt,ejs,htm,html,liquid,shtm,shtml,php,phps,phtm,phtml,rb,cgi,perl,pl,plx,ppl,py,bash,sh,zsh,js,jsx,cjs,cjsx,mjs,mjsx,ts,tsx,cts,ctsx,mts,mtsx}", + "commentAnchors.workspace.excludeFiles": "**/{*.log,*.logs,*~,*.bak,*.rej,*.orig,*.patch,*.diff,*.code-*,.idea,.*.swp,*.ctags,.env.me,.tscache,*.tsbuildinfo,.vite,.vitest,.wrangler,.dev.vars,.dev.vars.*,.rollup,.webpack,.linaria-cache,.sass-cache,.docker,.vagrant,.elasticbeanstalk,.yarn,vendor,node_modules,jspm_packages,bower_components,.git,.svn,_svn,.svnignore,.bzr,.bzrignore,.hg,.hgignore,Thumbs.db,ehthumbs.db,Desktop.ini,$RECYCLE.BIN,._*,Icon,*.icloud,.DS_Store,.disk_label,.LSOverride,.VolumeIcon.icns,.com.apple.timemachine.*,.apdisk,.fseventsd,.AppleDB,.AppleDesktop,.AppleDouble,.Trashes,.TemporaryItems,.Spotlight-V100,.DocumentRevisions-V100,Network Trash Folder,Temporary Items,yarn.lock,composer.lock,package-lock.json,dist}/**", + "commentAnchors.workspace.matchFiles": "**/*.{mdx,md,markdown,mdown,mdwn,mkd,mdtxt,mdtext,html,htm,shtml,shtm,xhtml,xhtm,ejs,liquid,php,phtml,phtm,phps,asp,aspx,rb,py,pl,plx,cgi,ppl,perl,bash,zsh,sh,js,jsx,mjs,mjsx,cjs,cjsx,ts,tsx,mts,mtsx,cts,ctsx,xsl,xslt,xml,xsd,dtd,atom,rdf,rss,rss2,rss-http,asx,dfxp,svg,kml}", "eslint.enable": true, "eslint.format.enable": true, "eslint.lintTask.enable": false, @@ -167,6 +173,11 @@ "eslint.runtime": "node", "eslint.codeActionsOnSave.mode": "all", "eslint.experimental.useFlatConfig": true, + "eslint.workingDirectories": [ + { + "mode": "auto" + } + ], "eslint.validate": ["mdx", "markdown", "javascript", "javascriptreact", "typescript", "typescriptreact"], "eslint.options": { "overrideConfigFile": "eslint.config.mjs" diff --git a/.vscodeignore b/.vscodeignore index af35f0f..0213ec8 100644 --- a/.vscodeignore +++ b/.vscodeignore @@ -17,7 +17,7 @@ # Generated data. # -# Last generated Thu, Sep 21, 2023, 6:04:41 AM EDT. +# Last generated Wed, Sep 27, 2023, 4:09:09 PM EDT. # Locals @@ -214,9 +214,11 @@ dist # npm:Configs -tsconfig.* -wrangler.* *.config.* +wrangler.* +tsconfig.* +dev-types.d.ts +package.json config.gypi # npm:Locks diff --git a/ts-types.d.ts b/dev-types.d.ts similarity index 53% rename from ts-types.d.ts rename to dev-types.d.ts index 683f6ae..c4ae876 100644 --- a/ts-types.d.ts +++ b/dev-types.d.ts @@ -1,5 +1,5 @@ /** - * Typescript types config file. + * Typescript dev-only types config file. * * Typescript is aware of this config file's location. * @@ -21,10 +21,16 @@ declare const $$__APP_BUILD_TIME_YMD__$$: string; /* * Customizations. * - * Declare project-specific types in this file, or add types using `./tsconfig.mjs`. - * This file is best suited for project-specific types, while `./tsconfig.mjs` + * Declare project-wide dev-only types in this file, or add types using `./tsconfig.mjs`. + * This file is best suited for project-wide dev-only types, while `./tsconfig.mjs` * is best when adding `@types/*` packages that your project depends on. * + * WARNING: Please do not add types to this file arbitrarily. The types you add here will not be + * included in `./dist` when your project is built; i.e., special types in this file are explicitly dev-only. + * + * For example, globals that exist prior to building your app, but definitely do not exist in `./dist`, + * and therefore the types in this file are only relevant during development of *this* project. + * * */ /* */ diff --git a/dev/.files/bin/gitattributes/index.mjs b/dev/.files/bin/gitattributes/index.mjs index 8c283d2..7806c6b 100644 --- a/dev/.files/bin/gitattributes/index.mjs +++ b/dev/.files/bin/gitattributes/index.mjs @@ -32,7 +32,7 @@ export default async ({ projDir }) => { for (const [subgroupExts, subgroup] of Object.entries(group)) { for (const subgroupExt of subgroupExts.split('|')) { - gitAttributesFileContentsTextBinary += '\n*.' + subgroupExt + ' ' + (subgroup.isTextual ? 'text' : 'binary'); + gitAttributesFileContentsTextBinary += '\n*.' + subgroupExt + ' ' + (subgroup.binary ? 'binary' : 'text'); } } } diff --git a/dev/.files/bin/includes/exclusions.mjs b/dev/.files/bin/includes/exclusions.mjs index 9dff7e6..5d97315 100644 --- a/dev/.files/bin/includes/exclusions.mjs +++ b/dev/.files/bin/includes/exclusions.mjs @@ -7,7 +7,7 @@ */ import path from 'node:path'; -import { $obj, $path } from '../../../../node_modules/@clevercanyon/utilities/dist/index.js'; +import { $obj, $path, $str } from '../../../../node_modules/@clevercanyon/utilities/dist/index.js'; /** * Converts an array of exclusions into regular expression strings. @@ -38,8 +38,8 @@ const asRegExps = (globs) => asRegExpStrings(globs).map((rxs) => new RegExp(rxs, */ const asRelativeGlobs = (from, globs, { forceRelative = false } = {}) => { return [...new Set(globs)].map((glob) => { - glob = forceRelative ? glob.replace(/^\*\*\//u, '') : glob; - return /^\*\*/u.test(glob) ? glob : path.relative(from, glob); + glob = forceRelative ? glob.replace(/^(?:\*\*\/)+/u, '') : glob; + return /^(?:\/|\*\*\/)/u.test(glob) ? glob : path.relative(from, glob); }); }; @@ -54,14 +54,16 @@ const asRelativeGlobs = (from, globs, { forceRelative = false } = {}) => { */ const asRootedRelativeGlobs = (from, globs, { forceRelative = false } = {}) => { return [...new Set(globs)].map((glob) => { - glob = forceRelative ? glob.replace(/^\*\*\//u, '') : glob; - return /^\*\*/u.test(glob) ? glob : '/' + path.relative(from, glob); + glob = forceRelative ? glob.replace(/^(?:\*\*\/)+/u, '') : glob; + return /^(?:\/|\*\*\/)/u.test(glob) ? glob : '/' + $str.lTrim(path.relative(from, glob), '/'); }); }; /** * Converts an array of exclusions into negated globs. * + * WARNING: This typically drops existing negations, based on options. + * * @param globs Array of exclusion globs. * @param options Explicit options required for acknowledgment of concerns. * @@ -83,31 +85,41 @@ const asNegatedGlobs = (globs, { dropExistingNegations }) => { /** * Converts an array of exclusions into a braced glob. * + * WARNING: This always drops existing negations & relative exclusions. + * * @param globs Array of exclusion globs. * @param options Explicit options required for acknowledgment of concerns. * - * @returns Exclusions as braced glob; potentially dropping negations. + * @returns Exclusions as braced glob; potentially dropping negations & relative exclusions. * * @note `dropExistingNegations` can *only* be set as true. There’s no other way to handle. + * @note `dropExistingRelatives` can *only* be set as true. There’s no other way to handle. */ -const asBracedGlob = (globs, { dropExistingNegations, dotGlobstars = false }) => { +const asBracedGlob = (globs, { dropExistingNegations, dropExistingRelatives, headGreedy = true, tailGreedy = true }) => { if (true !== dropExistingNegations) { throw new Error('Missing option: `dropExistingNegations`; must be `true`.'); } - let oneGlobs = []; // Initialize. + if (true !== dropExistingRelatives) { + throw new Error('Missing option: `dropExistingRelatives`; must be `true`.'); + } + let bracedGlobs = []; // Initialize. [...new Set(globs)].forEach((glob) => { - if (/^!/u.test(glob)) return; // Dropping. - oneGlobs.push(glob.replace(/^\*\*\//u, '').replace(/\/\*\*$/u, '')); + if (dropExistingNegations && /^!/u.test(glob)) return; + + glob = glob.replace(/^(?:\*\*\/)+|(?:\/\*\*)+$/gu, ''); + if (dropExistingRelatives && /\//u.test(glob)) return; + + bracedGlobs.push(glob); // OK, we can add to braces below. }); - oneGlobs = [...new Set(oneGlobs)]; // Unique; i.e., again, after processing. + bracedGlobs = [...new Set(bracedGlobs)]; // Unique again, after processing. return ( - (dotGlobstars ? $path.dotGlobstarHead : '**/') + - (oneGlobs.length > 1 ? '{' : '') + - oneGlobs.join(',') + - (oneGlobs.length > 1 ? '}' : '') + - (dotGlobstars ? $path.dotGlobstarTail : '/**') + (headGreedy ? '**/' : '') + // + (bracedGlobs.length > 1 ? '{' : '') + + bracedGlobs.join(',') + // Concatenate. + (bracedGlobs.length > 1 ? '}' : '') + + (tailGreedy ? '/**' : '') ); }; @@ -119,11 +131,20 @@ const asBracedGlob = (globs, { dropExistingNegations, dotGlobstars = false }) => * * @returns Exclusions as boolean properties. */ -const asBoolProps = (globs, { tailGreedy = true } = {}) => { +const asBoolProps = (globs, { headGreedy = true, tailGreedy = true } = {}) => { const props = {}; // Initialize. + for (let glob of globs) { - glob = !tailGreedy ? glob.replace(/\/\*\*$/u, '') : glob; - props[glob.replace(/^!/u, '')] = /^!/u.test(glob) ? false : true; + const isNegated = /^!/u.test(glob); + + if (isNegated /* Remove in favor of bool props. */) { + glob = glob.replace(/^!/u, ''); + } + glob = glob.replace(/^(?:\*\*\/)+|(?:\/\*\*)+$/gu, ''); + glob = headGreedy && !/\//u.test(glob) ? '**/' + glob : glob; + glob = tailGreedy ? glob + '/**' : glob; + + props[glob] = isNegated ? false : true; } return props; // Plain object properties. }; diff --git a/dev/.files/bin/includes/extensions.mjs b/dev/.files/bin/includes/extensions.mjs index 07a9ed8..cf70ccf 100644 --- a/dev/.files/bin/includes/extensions.mjs +++ b/dev/.files/bin/includes/extensions.mjs @@ -67,6 +67,9 @@ const asRegExpFrag = (exts) => { * Defines extensions. */ const extensions = { + /** + * Utilities. + */ dot, noDot, asBracedGlob, @@ -74,53 +77,19 @@ const extensions = { asRegExpFrag, /** - * MIME type extensions by VS Code language. VS Code languages added to the default export here. Provided by - * `@clevercanyon/utilities`. This includes everything we have in our MIME types library. + * By canonical. */ - ...$obj.map($path.extsByVSCodeLang(), (exts) => dot(exts)), - - // True HTML/SHTML. - - trueHTML: ['.htm', '.html'], - trueSHTML: ['.shtm', '.shtml'], - - // Standard JS/TS. - - sJavaScript: ['.js'], - sJavaScriptReact: ['.jsx'], - - sTypeScript: ['.ts'], - sTypeScriptReact: ['.tsx'], - - // Common JS/TS. - - cJavaScript: ['.cjs'], - cJavaScriptReact: ['.cjsx'], - - cTypeScript: ['.cts'], - cTypeScriptReact: ['.ctsx'], - - // Module JS/TS. - - mJavaScript: ['.mjs'], - mJavaScriptReact: ['.mjsx'], + byCanonical: $obj.map($path.extsByCanonical(), (exts) => dot(exts)), - mTypeScript: ['.mts'], - mTypeScriptReact: ['.mtsx'], - - // All flavors of JSX/TSX. - - allJavaScriptReact: ['.jsx', '.cjsx', '.mjsx'], - allTypeScriptReact: ['.tsx', '.ctsx', '.mtsx'], - - // All flavors of JS/TS. - - allJavaScript: ['.js', '.jsx', '.cjs', '.cjsx', '.mjs', '.mjsx'], - allTypeScript: ['.ts', '.tsx', '.cts', '.ctsx', '.mts', '.mtsx'], - - // Compiled WASM (WebAssembly). + /** + * By VS Code lang (camelCase, includes `codeTextual`). + */ + byVSCodeLang: $obj.map($path.extsByVSCodeLang({ camelCase: true, enableCodeTextual: true }), (exts) => dot(exts)), - wasm: ['.wasm'], + /** + * By dev group. + */ + byDevGroup: $obj.map($path.jsTSExtsByDevGroup(), (exts) => dot(exts)), }; /** @@ -128,22 +97,21 @@ const extensions = { */ extensions.tailwindContent = [ ...new Set([ - ...extensions.mdx, - ...extensions.markdown, - - ...extensions.xml, - ...extensions.html, - ...extensions.trueHTML, - ...extensions.trueSHTML, - - ...extensions.php, - ...extensions.ruby, - ...extensions.perl, - ...extensions.python, - ...extensions.shellscript, - - ...extensions.allJavaScript, - ...extensions.allTypeScript, + ...extensions.byVSCodeLang.mdx, + ...extensions.byVSCodeLang.markdown, + ...extensions.byVSCodeLang.html, + + ...extensions.byVSCodeLang.php, + ...extensions.byVSCodeLang.asp, + ...extensions.byVSCodeLang.ruby, + ...extensions.byVSCodeLang.python, + ...extensions.byVSCodeLang.perl, + ...extensions.byVSCodeLang.shellscript, + + ...extensions.byDevGroup.allJavaScript, + ...extensions.byDevGroup.allTypeScript, + + ...extensions.byVSCodeLang.xml, // e.g., SVGs. ]), ]; extensions.tailwindPrettierContent = [...extensions.tailwindContent]; @@ -156,7 +124,7 @@ extensions.commentAnchorsContent = [...extensions.tailwindContent]; /** * Extensions to try on import w/o extension. */ -extensions.onImportWithNoExtensionTry = [...extensions.allTypeScript, ...extensions.allJavaScript]; +extensions.onImportWithNoExtensionTry = [...extensions.byDevGroup.allTypeScript, ...extensions.byDevGroup.allJavaScript]; /** * Default export. diff --git a/dev/.files/bin/includes/node-version.mjs b/dev/.files/bin/includes/node-version.mjs index 7d3315b..1d3e6e1 100644 --- a/dev/.files/bin/includes/node-version.mjs +++ b/dev/.files/bin/includes/node-version.mjs @@ -11,10 +11,12 @@ */ export default { previous: '19.1.0', - current: '20.5.1', + current: '20.5.0', + forwardCompat: [], npm: { previous: '8.19.3', - current: '9.2.0', + current: '9.8.0', + forwardCompat: ['10.0.0'], }, }; diff --git a/dev/.files/bin/includes/utilities.mjs b/dev/.files/bin/includes/utilities.mjs index 587ff0f..ec2709a 100755 --- a/dev/.files/bin/includes/utilities.mjs +++ b/dev/.files/bin/includes/utilities.mjs @@ -126,6 +126,21 @@ export default class u { return pkg; // JSON object data. } + static async depPkg(dependency) { + // This is a dependency-specific package file. + const pkgFile = path.resolve(projDir, './node_modules', dependency, './package.json'); + + if (!fs.existsSync(pkgFile)) { + return undefined; // Not possible. + } + const pkg = $json.parse(fs.readFileSync(pkgFile).toString()); + + if (!$is.plainObject(pkg)) { + throw new Error('u.pkg: Unable to parse `' + pkgFile + '`.'); + } + return pkg; // JSON object data. + } + static async isPkgRepo(ownerRepo) { return new RegExp('[:/]' + $str.escRegExp(ownerRepo) + '(?:\\.git)?$', 'iu').test(pkgRepository); } @@ -177,11 +192,19 @@ export default class u { if (!$is.plainObject(updates)) { throw new Error('u.updatePkg: Unable to parse `' + updatesFile + '`.'); } - if ($obj.hasOwn(updates.$ꓺset?.engines, 'node')) { - updates.$ꓺset.engines.node = '^' + nodeVersion.previous + ' || ^' + nodeVersion.current; + if (Object.hasOwn(updates.$ꓺset?.engines || {}, 'node')) { + updates.$ꓺset.engines.node = []; // Initialize. + if (nodeVersion.previous.length) updates.$ꓺset.engines.node.push(nodeVersion.previous); + if (nodeVersion.current.length) updates.$ꓺset.engines.node.push(nodeVersion.current); + if (nodeVersion.forwardCompat.length) updates.$ꓺset.engines.node = updates.$ꓺset.engines.node.concat(nodeVersion.forwardCompat); + updates.$ꓺset.engines.node = (updates.$ꓺset.engines.node.length ? '^' : '') + updates.$ꓺset.engines.node.join(' || ^'); } - if ($obj.hasOwn(updates.$ꓺset?.engines, 'npm')) { - updates.$ꓺset.engines.npm = '^' + nodeVersion.npm.previous + ' || ^' + nodeVersion.npm.current; + if (Object.hasOwn(updates.$ꓺset?.engines || {}, 'npm')) { + updates.$ꓺset.engines.npm = []; // Initialize. + if (nodeVersion.npm.previous.length) updates.$ꓺset.engines.npm.push(nodeVersion.npm.previous); + if (nodeVersion.npm.current.length) updates.$ꓺset.engines.npm.push(nodeVersion.npm.current); + if (nodeVersion.npm.forwardCompat.length) updates.$ꓺset.engines.npm = updates.$ꓺset.engines.npm.concat(nodeVersion.npm.forwardCompat); + updates.$ꓺset.engines.npm = (updates.$ꓺset.engines.npm.length ? '^' : '') + updates.$ꓺset.engines.npm.join(' || ^'); } if (await u.isPkgRepo('clevercanyon/dev-deps')) { if (updates.$ꓺdefaults?.['devDependenciesꓺ@clevercanyon/dev-deps']) { @@ -1146,8 +1169,29 @@ export default class u { await u.spawn('npm', ['ci'], { stdio: 'inherit' }); } - static async npmUpdate() { - await u.spawn('npm', ['update', '--save'], { stdio: 'inherit' }); + static async npmUpdate(opts = { directive: 'default' }) { + if ('no' === opts.directive /* NPM update skipped entirely. */) { + u.log($chalk.gray('Skipping NPM update entirely.')); + } else { + if ('nimble' === opts.directive) { + const pkg = await u.pkg(); + const dependenciesToUpdate = []; + + for (const [dependency] of Object.entries(pkg.dependencies || {})) dependenciesToUpdate.push(dependency); + for (const [dependency] of Object.entries(pkg.peerDependencies || {})) dependenciesToUpdate.push(dependency); + for (const [dependency] of Object.entries((await u.depPkg('@clevercanyon/dev-deps'))?.dependencies || {})) { + if (/^@clevercanyon\//iu.test(dependency)) dependenciesToUpdate.push(dependency); + } + if (dependenciesToUpdate.length) { + u.log($chalk.gray('Updating these specific NPM dependencies:')), u.log($chalk.gray(dependenciesToUpdate.join(', '))); + await u.spawn('npm', ['update', ...[...new Set(dependenciesToUpdate)], '--save'], { stdio: 'inherit' }); + } + u.log($chalk.gray('Updating other NPM dependencies in `--prefer-offline` mode.')); + await u.spawn('npm', ['update', '--prefer-offline', '--save'], { stdio: 'inherit' }); + } else { + await u.spawn('npm', ['update', '--save'], { stdio: 'inherit' }); // Normal (full) NPM update. + } + } await u.updatePkg(); // To our standards. } diff --git a/dev/.files/bin/prettierignore/index.mjs b/dev/.files/bin/prettierignore/index.mjs index dbbfdd3..1194d98 100644 --- a/dev/.files/bin/prettierignore/index.mjs +++ b/dev/.files/bin/prettierignore/index.mjs @@ -64,7 +64,7 @@ export default async ({ projDir }) => { *.npmrc # EJS unsupported at this time. - # @todo Build or find an EJS plugin. + # @someday Build or find an EJS plugin. *.ejs `); diff --git a/dev/.files/bin/update.mjs b/dev/.files/bin/update.mjs index b5a80ed..b8bc8bc 100755 --- a/dev/.files/bin/update.mjs +++ b/dev/.files/bin/update.mjs @@ -576,14 +576,11 @@ class Project { async update() { /** * Updates NPM packages. - * - * @todo Add option to bypass this? It takes a long time and it is potentially damaging upon doing a release, - * where the updates will be untested. Need to think this through a bit further. */ u.log($chalk.green('Updating NPM packages.')); if (!this.args.dryRun) { - await u.npmUpdate(); + await u.npmUpdate({ directive: this.args.npm }); } /** @@ -1181,6 +1178,19 @@ await (async () => { description: 'Publish updated project package(s)?', alias: ['pkg'], }, + npm: { + type: 'string', + requiresArg: true, + demandOption: false, + default: 'default', + choices: ['nimble', 'no', 'default'], + description: // prettier-ignore + 'When set as `nimble`, the updater first does a normal NPM update of your project’s own `dependencies` and `peerDependencies`.' + + ' Also, it updates all `@clevercanyon/*` dependencies used by `@clevercanyon/dev-deps` for local project development.' + + ' Then it does a full update in `--prefer-offline` mode, which is quite effective at optimizing for speedy updates.' + + ' Or, when set as `no`, NPM updates are skipped entirely, which is strongly recommended when updating `--repos --pkgs`.' + + ' Or, when set as `default`, the updater simply does a normal NPM update with no speed optimizations.', + }, mode: { type: 'string', requiresArg: true, diff --git a/dev/.files/bin/updater/data/_package.json/updates.json b/dev/.files/bin/updater/data/_package.json/updates.json index 1b7a22e..080997b 100644 --- a/dev/.files/bin/updater/data/_package.json/updates.json +++ b/dev/.files/bin/updater/data/_package.json/updates.json @@ -49,10 +49,12 @@ "configꓺc10nꓺ&ꓺbuildꓺappType": "cma", "configꓺc10nꓺ&ꓺbuildꓺtargetEnv": "any", "configꓺc10nꓺ&ꓺbuildꓺentryFiles": [], + "configꓺc10nꓺ&ꓺbuildꓺsideEffects": [], "configꓺc10nꓺ&ꓺssrBuildꓺappType": "", "configꓺc10nꓺ&ꓺssrBuildꓺtargetEnv": "", "configꓺc10nꓺ&ꓺssrBuildꓺentryFiles": [], + "configꓺc10nꓺ&ꓺssrBuildꓺsideEffects": [], "configꓺc10nꓺ&ꓺgithubꓺteams": {}, "configꓺc10nꓺ&ꓺgithubꓺlabels": {}, diff --git a/dev/.files/bin/updater/index.mjs b/dev/.files/bin/updater/index.mjs index abc454f..5c51a13 100644 --- a/dev/.files/bin/updater/index.mjs +++ b/dev/.files/bin/updater/index.mjs @@ -99,7 +99,7 @@ export default async ({ projDir }) => { /** * Deletes outdated dotfiles no longer in use. */ - for (const relPath of ['./.vscode/mdx-layout.mjsx', './.madrun.mjs', './tsconfig.d.ts']) { + for (const relPath of ['./.vscode/mdx-layout.mjsx', './.madrun.mjs', './ts-types.d.ts', './tsconfig.d.ts']) { if (await isLocked(relPath)) { continue; // Locked 🔒. } @@ -142,7 +142,7 @@ export default async ({ projDir }) => { './.rehyperc.mjs', './mdx.config.mjs', - './ts-types.d.ts', + './dev-types.d.ts', './tsconfig.json', './tsconfig.mjs', @@ -199,35 +199,45 @@ export default async ({ projDir }) => { await fsp.cp(path.resolve(skeletonDir, relPath), path.resolve(projDir, relPath)); } let json = $json.parse((await fsp.readFile(path.resolve(projDir, relPath))).toString()); - const jsonUpdatesRelPath = relPath.replace(/(^|\/)([^/]+\.[^.]+)$/u, '$1_$2'); // Leading underscore in basename. - const jsonUpdatesFile = path.resolve(skeletonDir, './dev/.files/bin/updater/data', jsonUpdatesRelPath, './updates.json'); + const updatesRelPath = relPath.replace(/(^|\/)([^/]+\.[^.]+)$/u, '$1_$2'); // Leading underscore in basename. + const updatesFile = path.resolve(skeletonDir, './dev/.files/bin/updater/data', updatesRelPath, './updates.json'); if (!$is.plainObject(json)) { throw new Error('updater: Unable to parse `' + relPath + '`.'); } - if (fs.existsSync(jsonUpdatesFile)) { - const jsonUpdates = $json.parse((await fsp.readFile(jsonUpdatesFile)).toString()); + if (fs.existsSync(updatesFile)) { + const updates = $json.parse((await fsp.readFile(updatesFile)).toString()); - if (!$is.plainObject(jsonUpdates)) { - throw new Error('updater: Unable to parse `' + jsonUpdatesFile + '`.'); + if (!$is.plainObject(updates)) { + throw new Error('updater: Unable to parse `' + updatesFile + '`.'); } - if ($obj.hasOwn(jsonUpdates.$ꓺset?.engines, 'node')) { - jsonUpdates.$ꓺset.engines.node = '^' + nodeVersion.previous + ' || ^' + nodeVersion.current; - } - if ($obj.hasOwn(jsonUpdates.$ꓺset?.engines, 'npm')) { - jsonUpdates.$ꓺset.engines.npm = '^' + nodeVersion.npm.previous + ' || ^' + nodeVersion.npm.current; + if ('./package.json' === relPath) { + if (Object.hasOwn(updates.$ꓺset?.engines || {}, 'node')) { + updates.$ꓺset.engines.node = []; // Initialize. + if (nodeVersion.previous.length) updates.$ꓺset.engines.node.push(nodeVersion.previous); + if (nodeVersion.current.length) updates.$ꓺset.engines.node.push(nodeVersion.current); + if (nodeVersion.forwardCompat.length) updates.$ꓺset.engines.node = updates.$ꓺset.engines.node.concat(nodeVersion.forwardCompat); + updates.$ꓺset.engines.node = (updates.$ꓺset.engines.node.length ? '^' : '') + updates.$ꓺset.engines.node.join(' || ^'); + } + if (Object.hasOwn(updates.$ꓺset?.engines || {}, 'npm')) { + updates.$ꓺset.engines.npm = []; // Initialize. + if (nodeVersion.npm.previous.length) updates.$ꓺset.engines.npm.push(nodeVersion.npm.previous); + if (nodeVersion.npm.current.length) updates.$ꓺset.engines.npm.push(nodeVersion.npm.current); + if (nodeVersion.npm.forwardCompat.length) updates.$ꓺset.engines.npm = updates.$ꓺset.engines.npm.concat(nodeVersion.npm.forwardCompat); + updates.$ꓺset.engines.npm = (updates.$ꓺset.engines.npm.length ? '^' : '') + updates.$ꓺset.engines.npm.join(' || ^'); + } } if ('./package.json' === relPath && (await isPkgRepo('clevercanyon/dev-deps'))) { - if (jsonUpdates.$ꓺdefaults?.['devDependenciesꓺ@clevercanyon/dev-deps']) { - delete jsonUpdates.$ꓺdefaults['devDependenciesꓺ@clevercanyon/dev-deps']; + if (updates.$ꓺdefaults?.['devDependenciesꓺ@clevercanyon/dev-deps']) { + delete updates.$ꓺdefaults['devDependenciesꓺ@clevercanyon/dev-deps']; } - if ($is.array(jsonUpdates.$ꓺunset)) { - jsonUpdates.$ꓺunset.push('devDependenciesꓺ@clevercanyon/dev-deps'); + if ($is.array(updates.$ꓺunset)) { + updates.$ꓺunset.push('devDependenciesꓺ@clevercanyon/dev-deps'); } else { - jsonUpdates.$ꓺunset = ['devDependenciesꓺ@clevercanyon/dev-deps']; + updates.$ꓺunset = ['devDependenciesꓺ@clevercanyon/dev-deps']; } } - $obj.patchDeep(json, jsonUpdates); // Potentially declarative ops. + $obj.patchDeep(json, updates); // Potentially declarative ops. const prettierConfig = { ...(await $prettier.resolveConfig(path.resolve(projDir, relPath))), parser: 'json' }; await fsp.writeFile(path.resolve(projDir, relPath), await $prettier.format($json.stringify(json, { pretty: true }), prettierConfig)); } diff --git a/dev/.files/eslint/config.mjs b/dev/.files/eslint/config.mjs index 23afb62..3ccf79e 100644 --- a/dev/.files/eslint/config.mjs +++ b/dev/.files/eslint/config.mjs @@ -11,6 +11,8 @@ * @note This entire file will be updated automatically. * @note Instead of editing here, please review . * + * @minimatch ES Lint uses minimatch under the hood, with `{ dot: true, matchBase: true }`. + * * @see https://eslint.org/docs/latest/user-guide/command-line-interface * @see https://eslint.org/docs/latest/use/configure/configuration-files-new */ @@ -119,35 +121,70 @@ export default async () => { // Source configurations. { - files: ['**/*.' + extensions.asBracedGlob([...extensions.sJavaScript, ...extensions.sJavaScriptReact, ...extensions.sTypeScript, ...extensions.sTypeScriptReact])], + files: [ + '**/*.' + + extensions.asBracedGlob([ + ...extensions.byDevGroup.sJavaScript, + ...extensions.byDevGroup.sJavaScriptReact, + ...extensions.byDevGroup.sTypeScript, + ...extensions.byDevGroup.sTypeScriptReact, + ]), + ], languageOptions: { sourceType: pkg.type || 'script' }, }, { - files: ['**/*.' + extensions.asBracedGlob([...extensions.mJavaScript, ...extensions.mJavaScriptReact, ...extensions.mTypeScript, ...extensions.mTypeScriptReact])], + files: [ + '**/*.' + + extensions.asBracedGlob([ + ...extensions.byDevGroup.mJavaScript, + ...extensions.byDevGroup.mJavaScriptReact, + ...extensions.byDevGroup.mTypeScript, + ...extensions.byDevGroup.mTypeScriptReact, + ]), + ], languageOptions: { sourceType: 'module' }, }, { - files: ['**/*.' + extensions.asBracedGlob([...extensions.cJavaScript, ...extensions.cJavaScriptReact, ...extensions.cTypeScript, ...extensions.cTypeScriptReact])], + files: [ + '**/*.' + + extensions.asBracedGlob([ + ...extensions.byDevGroup.cJavaScript, + ...extensions.byDevGroup.cJavaScriptReact, + ...extensions.byDevGroup.cTypeScript, + ...extensions.byDevGroup.cTypeScriptReact, + ]), + ], languageOptions: { sourceType: 'commonjs' }, }, { - files: ['**/*.' + extensions.asBracedGlob([...extensions.markdown, ...extensions.mdx])], + files: ['**/*.' + extensions.asBracedGlob([...extensions.byVSCodeLang.markdown, ...extensions.byVSCodeLang.mdx])], languageOptions: { sourceType: 'module' }, // MDX only supports modules. }, // Adds Node globals for `dev/.files`, as these always run in Node. { files: [ - '*.' + extensions.asBracedGlob([...extensions.allJavaScript, ...extensions.allTypeScript]), // - 'dev/.files/**/*.' + extensions.asBracedGlob([...extensions.allJavaScript, ...extensions.allTypeScript]), + '*.' + extensions.asBracedGlob([...extensions.byDevGroup.allJavaScript, ...extensions.byDevGroup.allTypeScript]), // + 'dev/.files/**/*.' + extensions.asBracedGlob([...extensions.byDevGroup.allJavaScript, ...extensions.byDevGroup.allTypeScript]), ], languageOptions: { globals: { ...globals.nodeBuiltin } }, }, { files: [ - '*.' + extensions.asBracedGlob([...extensions.cJavaScript, ...extensions.cJavaScriptReact, ...extensions.cTypeScript, ...extensions.cTypeScriptReact]), // + '*.' + + extensions.asBracedGlob([ + ...extensions.byDevGroup.cJavaScript, + ...extensions.byDevGroup.cJavaScriptReact, + ...extensions.byDevGroup.cTypeScript, + ...extensions.byDevGroup.cTypeScriptReact, + ]), // 'dev/.files/**/*.' + - extensions.asBracedGlob([...extensions.cJavaScript, ...extensions.cJavaScriptReact, ...extensions.cTypeScript, ...extensions.cTypeScriptReact]), + extensions.asBracedGlob([ + ...extensions.byDevGroup.cJavaScript, + ...extensions.byDevGroup.cJavaScriptReact, + ...extensions.byDevGroup.cTypeScript, + ...extensions.byDevGroup.cTypeScriptReact, + ]), ], // Includes CJS globals like `__dirname`. languageOptions: { globals: { ...globals.node } }, }, @@ -155,14 +192,14 @@ export default async () => { // Baseline JS/TS/JSX/TSX recommended rule configurations. { // Rules not applied to sandbox|examples. - files: ['**/*.' + extensions.asBracedGlob([...extensions.allJavaScript, ...extensions.allTypeScript])], + files: ['**/*.' + extensions.asBracedGlob([...extensions.byDevGroup.allJavaScript, ...extensions.byDevGroup.allTypeScript])], ignores: [...exclusions.sandboxIgnores, ...exclusions.exampleIgnores], rules: { ...eslintJS.configs.recommended.rules }, }, // JSX/TSX accessbility plugin configurations. { - files: ['**/*.' + extensions.asBracedGlob([...extensions.allJavaScriptReact, ...extensions.allTypeScriptReact])], + files: ['**/*.' + extensions.asBracedGlob([...extensions.byDevGroup.allJavaScriptReact, ...extensions.byDevGroup.allTypeScriptReact])], plugins: { 'jsx-a11y': pluginJSXA11y }, languageOptions: { @@ -173,7 +210,7 @@ export default async () => { }, { // Rules not applied to sandbox|examples. - files: ['**/*.' + extensions.asBracedGlob([...extensions.allJavaScriptReact, ...extensions.allTypeScriptReact])], + files: ['**/*.' + extensions.asBracedGlob([...extensions.byDevGroup.allJavaScriptReact, ...extensions.byDevGroup.allTypeScriptReact])], ignores: [...exclusions.sandboxIgnores, ...exclusions.exampleIgnores], rules: { ...pluginJSXA11y.configs.recommended.rules }, }, @@ -182,9 +219,13 @@ export default async () => { { // Config not applied to MD/MDX fenced code-blocks. // MD/MDX fenced code-blocks are handled separately, below. - files: ['**/*.' + extensions.asBracedGlob([...extensions.allTypeScript])], - ignores: ['**/*.' + extensions.asBracedGlob([...extensions.markdown, ...extensions.mdx]) + '/*.' + extensions.asBracedGlob([...extensions.allTypeScript])], - + files: ['**/*.' + extensions.asBracedGlob([...extensions.byDevGroup.allTypeScript])], + ignores: [ + '**/*.' + + extensions.asBracedGlob([...extensions.byVSCodeLang.markdown, ...extensions.byVSCodeLang.mdx]) + + '/*.' + + extensions.asBracedGlob([...extensions.byDevGroup.allTypeScript]), + ], plugins: { '@typescript-eslint': pluginTypeScript }, languageOptions: { @@ -201,7 +242,12 @@ export default async () => { { // Specifically for MD/MDX fenced code-blocks. // Config not applied to any other TypeScript files. - files: ['**/*.' + extensions.asBracedGlob([...extensions.markdown, ...extensions.mdx]) + '/*.' + extensions.asBracedGlob([...extensions.allTypeScript])], + files: [ + '**/*.' + + extensions.asBracedGlob([...extensions.byVSCodeLang.markdown, ...extensions.byVSCodeLang.mdx]) + + '/*.' + + extensions.asBracedGlob([...extensions.byDevGroup.allTypeScript]), + ], plugins: { '@typescript-eslint': pluginTypeScript }, languageOptions: { @@ -216,11 +262,15 @@ export default async () => { { // Rules not applied to sandbox|examples. // Rules not applied to MD/MDX fenced code-blocks. - files: ['**/*.' + extensions.asBracedGlob([...extensions.allTypeScript])], + files: ['**/*.' + extensions.asBracedGlob([...extensions.byDevGroup.allTypeScript])], ignores: [ - ...exclusions.sandboxIgnores, ...exclusions.exampleIgnores, - '**/*.' + extensions.asBracedGlob([...extensions.markdown, ...extensions.mdx]) + '/*.' + extensions.asBracedGlob([...extensions.allTypeScript]), - ], // prettier-ignore + ...exclusions.sandboxIgnores, + ...exclusions.exampleIgnores, + '**/*.' + + extensions.asBracedGlob([...extensions.byVSCodeLang.markdown, ...extensions.byVSCodeLang.mdx]) + + '/*.' + + extensions.asBracedGlob([...extensions.byDevGroup.allTypeScript]), + ], rules: { ...pluginTypeScript.configs.recommended.rules, ...pluginTypeScript.configs['recommended-requiring-type-checking'].rules, @@ -231,15 +281,15 @@ export default async () => { { // Config not applied to MD/MDX fenced code-blocks. // i.e., This is the processor for those fenced code-blocks. - files: ['**/*.' + extensions.asBracedGlob([...extensions.markdown, ...extensions.mdx])], + files: ['**/*.' + extensions.asBracedGlob([...extensions.byVSCodeLang.markdown, ...extensions.byVSCodeLang.mdx])], plugins: { mdx: pluginMDX }, languageOptions: { parser: parserMDX, parserOptions: { ignoreRemarkConfig: false, - extensions: [...extensions.mdx], - markdownExtensions: [...extensions.markdown], + extensions: [...extensions.byVSCodeLang.mdx], + markdownExtensions: [...extensions.byVSCodeLang.markdown], }, }, processor: pluginMDX.createRemarkProcessor({ @@ -261,14 +311,14 @@ export default async () => { { // Rules not applied to sandbox|examples. // Rules not applied to MD/MDX fenced code-blocks. - files: ['**/*.' + extensions.asBracedGlob([...extensions.markdown, ...extensions.mdx])], + files: ['**/*.' + extensions.asBracedGlob([...extensions.byVSCodeLang.markdown, ...extensions.byVSCodeLang.mdx])], ignores: [...exclusions.sandboxIgnores, ...exclusions.exampleIgnores], rules: { ...pluginMDX.flat.rules }, }, { // MD/MDX fenced code-block rules. // Rules not applied to sandbox|examples. - files: ['**/*.' + extensions.asBracedGlob([...extensions.markdown, ...extensions.mdx]) + '/*'], + files: ['**/*.' + extensions.asBracedGlob([...extensions.byVSCodeLang.markdown, ...extensions.byVSCodeLang.mdx]) + '/*'], ignores: [...exclusions.sandboxIgnores, ...exclusions.exampleIgnores], rules: { ...pluginMDX.flatCodeBlocks.rules }, }, @@ -279,7 +329,15 @@ export default async () => { // Applies to all ESLint-able file extensions. // Such that formatting can occur even if no ESLint rules apply. // Note that we do *not* exclude MDX fenced code-blocks or sandbox|examples. - files: ['**/*.' + extensions.asBracedGlob([...extensions.allJavaScript, ...extensions.allTypeScript, ...extensions.markdown, ...extensions.mdx])], + files: [ + '**/*.' + + extensions.asBracedGlob([ + ...extensions.byDevGroup.allJavaScript, + ...extensions.byDevGroup.allTypeScript, + ...extensions.byVSCodeLang.markdown, + ...extensions.byVSCodeLang.mdx, + ]), + ], plugins: { prettier: pluginPrettier }, rules: { @@ -292,7 +350,7 @@ export default async () => { // These are our own overrides against all of the above. { // Rules not applied to sandbox|examples. - files: ['**/*.' + extensions.asBracedGlob([...extensions.allJavaScript, ...extensions.allTypeScript])], + files: ['**/*.' + extensions.asBracedGlob([...extensions.byDevGroup.allJavaScript, ...extensions.byDevGroup.allTypeScript])], ignores: [...exclusions.sandboxIgnores, ...exclusions.exampleIgnores], rules: { 'no-empty': ['warn', { allowEmptyCatch: true }], @@ -316,7 +374,7 @@ export default async () => { // These are our own overrides against all of the above. { // Rules not applied to sandbox|examples. - files: ['**/*.' + extensions.asBracedGlob([...extensions.allTypeScript])], + files: ['**/*.' + extensions.asBracedGlob([...extensions.byDevGroup.allTypeScript])], ignores: [...exclusions.sandboxIgnores, ...exclusions.exampleIgnores], rules: { 'no-redeclare': 'off', // Disable in favor of TypeScript rule below. diff --git a/dev/.files/jest/config.mjs b/dev/.files/jest/config.mjs index bfa9684..9de9942 100644 --- a/dev/.files/jest/config.mjs +++ b/dev/.files/jest/config.mjs @@ -69,15 +69,15 @@ export default async () => { // Configured to run JS tests only; not TypeScript tests. // To create and run TypeScript tests, use Vitest instead of Jest. testMatch: [ - '**/*.{test|tests|spec|specs}.' + extensions.asBracedGlob([...extensions.allJavaScript]), // - '**/{test,tests,spec,specs}/**/*.' + extensions.asBracedGlob([...extensions.allJavaScript]), + '**/*.{test|tests|spec|specs}.' + extensions.asBracedGlob([...extensions.byDevGroup.allJavaScript]), // + '**/{test,tests,spec,specs}/**/*.' + extensions.asBracedGlob([...extensions.byDevGroup.allJavaScript]), ], moduleNameMapper: importAliases.asRegExpStrings, - moduleFileExtensions: extensions.noDot([...extensions.allJavaScript]), + moduleFileExtensions: extensions.noDot([...extensions.byDevGroup.allJavaScript]), extensionsToTreatAsEsm: [ ...('module' === pkg.type - ? [...extensions.sJavaScript, ...extensions.sJavaScriptReact, ...extensions.mJavaScript, ...extensions.mJavaScriptReact] - : [...extensions.mJavaScript, ...extensions.mJavaScriptReact]), + ? [...extensions.byDevGroup.sJavaScript, ...extensions.byDevGroup.sJavaScriptReact, ...extensions.byDevGroup.mJavaScript, ...extensions.byDevGroup.mJavaScriptReact] + : [...extensions.byDevGroup.mJavaScript, ...extensions.byDevGroup.mJavaScriptReact]), ], }; }; diff --git a/dev/.files/mdx/config.mjs b/dev/.files/mdx/config.mjs index 15c1c0e..f219c51 100644 --- a/dev/.files/mdx/config.mjs +++ b/dev/.files/mdx/config.mjs @@ -22,8 +22,8 @@ export default async () => { return { jsxImportSource: 'preact', - mdExtensions: [...extensions.markdown], - mdxExtensions: [...extensions.mdx], + mdExtensions: [...extensions.byVSCodeLang.markdown], + mdxExtensions: [...extensions.byVSCodeLang.mdx], remarkPlugins: [ (await import('remark-frontmatter')).default, // YAML properties. @@ -33,6 +33,6 @@ export default async () => { (await import('remark-mermaidjs')).default, // Charting and diagramming; {@see https://o5p.me/5z7Yrt}. (await import('remark-directive')).default, // Custom directives; {@see https://o5p.me/0fakce}. ], - rehypePlugins: [await import('@microflash/rehype-starry-night').default], // Syntax highlighting. + rehypePlugins: [(await import('@microflash/rehype-starry-night')).default], // Syntax highlighting. }; }; diff --git a/dev/.files/prettier/config.mjs b/dev/.files/prettier/config.mjs index 60dce7a..d5f8457 100644 --- a/dev/.files/prettier/config.mjs +++ b/dev/.files/prettier/config.mjs @@ -7,6 +7,8 @@ * @note This entire file will be updated automatically. * @note Instead of editing here, please review . * + * @fastglob Prettier uses fast-glob under the hood, with `{ dot: true }`. + * * @see https://prettier.io/docs/en/configuration.html */ @@ -86,7 +88,7 @@ export default async () => { * * @see https://o5p.me/sj8jjz */ - files: ['*.' + extensions.asBracedGlob([...extensions.markdown])], + files: ['*.' + extensions.asBracedGlob([...extensions.byVSCodeLang.markdown])], options: { parser: 'markdown' }, }, { @@ -95,7 +97,7 @@ export default async () => { * * @see https://o5p.me/sj8jjz */ - files: ['*.' + extensions.asBracedGlob([...extensions.mdx])], + files: ['*.' + extensions.asBracedGlob([...extensions.byVSCodeLang.mdx])], options: { parser: 'mdx' }, }, { @@ -104,7 +106,7 @@ export default async () => { * * @see https://o5p.me/sj8jjz */ - files: ['*.' + extensions.asBracedGlob([...extensions.trueHTML, ...extensions.trueSHTML])], + files: ['*.' + extensions.asBracedGlob([...extensions.byCanonical.html, ...extensions.byCanonical.shtml])], options: { parser: 'html' }, }, @@ -118,7 +120,7 @@ export default async () => { * * @see https://o5p.me/BHsZj8 */ - files: ['*.' + extensions.asBracedGlob([...extensions.php])], + files: ['*.' + extensions.asBracedGlob([...extensions.byVSCodeLang.php])], options: { parser: 'php', braceStyle: '1tbs', @@ -132,7 +134,7 @@ export default async () => { * * @see https://o5p.me/tuKNvU */ - files: ['*.' + extensions.asBracedGlob([...extensions.ruby])], + files: ['*.' + extensions.asBracedGlob([...extensions.byVSCodeLang.ruby])], options: { parser: 'ruby', rubyPlugins: '', @@ -145,7 +147,7 @@ export default async () => { * * @see https://o5p.me/wWDiYK */ - files: ['*.' + extensions.asBracedGlob([...extensions.python])], + files: ['*.' + extensions.asBracedGlob([...extensions.byVSCodeLang.python])], options: { parser: '' }, // N/A ... instead, use . }, { @@ -154,7 +156,7 @@ export default async () => { * * @see https://o5p.me/D0rlOV */ - files: ['*.' + extensions.asBracedGlob([...extensions.shellscript.filter((ext) => /^sh/iu.test(ext))])], + files: ['*.' + extensions.asBracedGlob([...extensions.byCanonical.sh])], options: { parser: 'sh', // Posix variant! variant: 1, // Posix variant only. @@ -177,7 +179,7 @@ export default async () => { * @see https://o5p.me/D0rlOV */ files: [ - '*.' + extensions.asBracedGlob([...extensions.shellscript.filter((ext) => /^bash/iu.test(ext))]), // + '*.' + extensions.asBracedGlob([...extensions.byCanonical.bash]), // '{,*.}Dockerfile', // Safe to assume ours always uses bash. ], options: { @@ -206,7 +208,7 @@ export default async () => { * * @see https://o5p.me/sj8jjz */ - files: ['*.' + extensions.asBracedGlob([...extensions.allJavaScript])], + files: ['*.' + extensions.asBracedGlob([...extensions.byDevGroup.allJavaScript])], options: { parser: 'babel' }, }, { @@ -215,7 +217,7 @@ export default async () => { * * @see https://o5p.me/sj8jjz */ - files: ['*.' + extensions.asBracedGlob([...extensions.allTypeScript])], + files: ['*.' + extensions.asBracedGlob([...extensions.byDevGroup.allTypeScript])], options: { parser: 'typescript' }, }, { @@ -224,7 +226,7 @@ export default async () => { * * @see https://o5p.me/dTTfse */ - files: ['*.' + extensions.asBracedGlob([...extensions.allJavaScript, ...extensions.allTypeScript])], + files: ['*.' + extensions.asBracedGlob([...extensions.byDevGroup.allJavaScript, ...extensions.byDevGroup.allTypeScript])], options: { jsdocAddDefaultToDescription: false, jsdocCapitalizeDescription: true, @@ -248,7 +250,7 @@ export default async () => { * * @see https://o5p.me/o7OmDG */ - files: ['*.' + extensions.asBracedGlob([...extensions.allJavaScript, ...extensions.allTypeScript])], + files: ['*.' + extensions.asBracedGlob([...extensions.byDevGroup.allJavaScript, ...extensions.byDevGroup.allTypeScript])], options: { organizeImportsSkipDestructiveCodeActions: true, }, @@ -272,7 +274,7 @@ export default async () => { * * @see https://o5p.me/sj8jjz */ - files: ['*.' + extensions.asBracedGlob([...extensions.css])], + files: ['*.' + extensions.asBracedGlob([...extensions.byVSCodeLang.css])], options: { parser: 'css' }, }, { @@ -281,7 +283,7 @@ export default async () => { * * @see https://o5p.me/sj8jjz */ - files: ['*.' + extensions.asBracedGlob([...extensions.scss])], + files: ['*.' + extensions.asBracedGlob([...extensions.byVSCodeLang.scss])], options: { parser: 'scss' }, }, { @@ -290,7 +292,7 @@ export default async () => { * * @see https://o5p.me/sj8jjz */ - files: ['*.' + extensions.asBracedGlob([...extensions.less])], + files: ['*.' + extensions.asBracedGlob([...extensions.byVSCodeLang.less])], options: { parser: 'less' }, }, @@ -304,7 +306,7 @@ export default async () => { * * @see https://o5p.me/kYq5bx */ - files: ['*.' + extensions.asBracedGlob([...extensions.sql])], + files: ['*.' + extensions.asBracedGlob([...extensions.byVSCodeLang.sql])], options: { parser: 'sql', commaPosition: 'after', @@ -330,7 +332,7 @@ export default async () => { * * @see https://o5p.me/sj8jjz */ - files: ['*.' + extensions.asBracedGlob([...extensions.json])], + files: ['*.' + extensions.asBracedGlob([...extensions.byVSCodeLang.json])], options: { parser: 'json' }, }, { @@ -339,7 +341,7 @@ export default async () => { * * @see https://o5p.me/sj8jjz */ - files: ['*.' + extensions.asBracedGlob([...extensions.jsonc])], + files: ['*.' + extensions.asBracedGlob([...extensions.byVSCodeLang.jsonc])], options: { parser: 'json5' }, }, { @@ -348,7 +350,7 @@ export default async () => { * * @see https://o5p.me/GI5Eiw */ - files: ['*.' + extensions.asBracedGlob([...extensions.toml])], + files: ['*.' + extensions.asBracedGlob([...extensions.byVSCodeLang.toml])], options: { parser: '' }, // Not ready for production yet, but coming soon. }, { @@ -357,7 +359,7 @@ export default async () => { * * @see https://o5p.me/sj8jjz */ - files: ['*.' + extensions.asBracedGlob([...extensions.yaml])], + files: ['*.' + extensions.asBracedGlob([...extensions.byVSCodeLang.yaml])], options: { parser: 'yaml' }, }, { @@ -366,7 +368,7 @@ export default async () => { * * @see https://o5p.me/1fqazf */ - files: ['*.' + extensions.asBracedGlob([...extensions.ini])], + files: ['*.' + extensions.asBracedGlob([...extensions.byVSCodeLang.ini])], options: { parser: 'ini', iniSpaceAroundEquals: true, @@ -378,7 +380,7 @@ export default async () => { * * @see https://o5p.me/IyzRSp */ - files: ['*.' + extensions.asBracedGlob([...extensions.properties]), '*.env{,.*}'], + files: ['*.' + extensions.asBracedGlob([...extensions.byVSCodeLang.properties]), '*.env{,.*}'], options: { parser: 'dot-properties', keySeparator: '=', @@ -391,7 +393,7 @@ export default async () => { * * @see https://o5p.me/OiLPzn */ - files: ['*.' + extensions.asBracedGlob([...extensions.xml])], + files: ['*.' + extensions.asBracedGlob([...extensions.byVSCodeLang.xml])], options: { parser: 'xml', xmlSelfClosingSpace: true, diff --git a/dev/.files/stylelint/config.mjs b/dev/.files/stylelint/config.mjs index a2d64c0..33a3f81 100644 --- a/dev/.files/stylelint/config.mjs +++ b/dev/.files/stylelint/config.mjs @@ -7,6 +7,8 @@ * @note This entire file will be updated automatically. * @note Instead of editing here, please review . * + * @micromatch Stylelint uses micromatch under the hood, with `{ dot: true, matchBase: true }`. + * * @see https://stylelint.io/user-guide/configure */ @@ -61,7 +63,7 @@ export default async () => { overrides: [ { - files: ['**/*.' + extensions.asBracedGlob([...extensions.css])], + files: ['**/*.' + extensions.asBracedGlob([...extensions.byVSCodeLang.css])], plugins: [...baseConfig.plugins], extends: [...baseConfig.extends], @@ -71,7 +73,7 @@ export default async () => { rules: { ...baseConfig.rules }, }, { - files: ['**/*.' + extensions.asBracedGlob([...extensions.scss])], + files: ['**/*.' + extensions.asBracedGlob([...extensions.byVSCodeLang.scss])], plugins: [...baseConfig.plugins], extends: [...baseConfig.extends], diff --git a/dev/.files/tailwind/config.mjs b/dev/.files/tailwind/config.mjs index 18551c9..dffc1b6 100644 --- a/dev/.files/tailwind/config.mjs +++ b/dev/.files/tailwind/config.mjs @@ -7,6 +7,8 @@ * @note This entire file will be updated automatically. * @note Instead of editing here, please review . * + * @micromatch Tailwind uses micromatch with default options; i.e., `{ dot: false }`. + * * @see https://tailwindcss.com/docs/configuration */ /* diff --git a/dev/.files/typescript/config.mjs b/dev/.files/typescript/config.mjs index 1537747..d619f1e 100755 --- a/dev/.files/typescript/config.mjs +++ b/dev/.files/typescript/config.mjs @@ -49,26 +49,28 @@ export default async () => { */ const baseConfig = { include: [ - './' + path.relative(projDir, path.resolve(projDir, './*.d.ts')), // - './' + path.relative(projDir, path.resolve(projDir, './src')) + '/**/*', + './' + path.relative(projDir, path.resolve(projDir, './src')) + '/**/*', // + './' + path.relative(projDir, path.resolve(projDir, './dev-types.d.ts')), ], exclude: exclusions.asRelativeGlobs(projDir, [ - ...new Set([ - ...exclusions.localIgnores, - ...exclusions.logIgnores, - ...exclusions.backupIgnores, - ...exclusions.patchIgnores, - ...exclusions.editorIgnores, - ...exclusions.pkgIgnores, - ...exclusions.vcsIgnores, - ...exclusions.osIgnores, - ...exclusions.dotIgnores, - ...exclusions.configIgnores, - ...exclusions.lockIgnores, - ...exclusions.devIgnores, - ...exclusions.distIgnores, - ...exclusions.docIgnores, - ]), + ...new Set( + [ + ...exclusions.localIgnores, + ...exclusions.logIgnores, + ...exclusions.backupIgnores, + ...exclusions.patchIgnores, + ...exclusions.editorIgnores, + ...exclusions.pkgIgnores, + ...exclusions.vcsIgnores, + ...exclusions.osIgnores, + ...exclusions.dotIgnores, + ...exclusions.configIgnores, + ...exclusions.lockIgnores, + ...exclusions.devIgnores, + ...exclusions.distIgnores, + ...exclusions.docIgnores, + ].filter((excl) => '**/dev-types.d.ts/**' !== excl), + ), ]), compilerOptions: { baseUrl: './' + path.relative(projDir, path.resolve(projDir, './src')), @@ -81,7 +83,6 @@ export default async () => { strict: true, skipLibCheck: true, - experimentalDecorators: true, target: esVersion.lcnYear, lib: [esVersion.lcnYear], diff --git a/dev/.files/vite/config.mjs b/dev/.files/vite/config.mjs index 94dc848..42f6cdd 100644 --- a/dev/.files/vite/config.mjs +++ b/dev/.files/vite/config.mjs @@ -93,11 +93,12 @@ export default async ({ mode, command, ssrBuild: isSSRBuild }) => { const appType = $obp.get(pkg, 'config.c10n.&.' + (isSSRBuild ? 'ssrBuild' : 'build') + '.appType') || 'cma'; const targetEnv = $obp.get(pkg, 'config.c10n.&.' + (isSSRBuild ? 'ssrBuild' : 'build') + '.targetEnv') || 'any'; const entryFiles = $obp.get(pkg, 'config.c10n.&.' + (isSSRBuild ? 'ssrBuild' : 'build') + '.entryFiles') || []; + const sideEffects = $obp.get(pkg, 'config.c10n.&.' + (isSSRBuild ? 'ssrBuild' : 'build') + '.sideEffects') || []; const appDefaultEntryFiles = // Based on app type. - ['spa'].includes(appType) ? ['./src/index.' + extensions.asBracedGlob([...extensions.trueHTML])] - : ['mpa'].includes(appType) ? ['./src/**/index.' + extensions.asBracedGlob([...extensions.trueHTML])] - : ['./src/*.' + extensions.asBracedGlob([...extensions.sTypeScript, ...extensions.sTypeScriptReact])]; // prettier-ignore + ['spa'].includes(appType) ? ['./src/index.' + extensions.asBracedGlob([...extensions.byCanonical.html])] + : ['mpa'].includes(appType) ? ['./src/**/index.' + extensions.asBracedGlob([...extensions.byCanonical.html])] + : ['./src/*.' + extensions.asBracedGlob([...extensions.byDevGroup.sTypeScript, ...extensions.byDevGroup.sTypeScriptReact])]; // prettier-ignore const appEntryFiles = (entryFiles.length ? entryFiles : appDefaultEntryFiles).map((v) => $str.lTrim(v, './')); const appEntries = appEntryFiles.length ? await $glob.promise(appEntryFiles, { cwd: projDir }) : []; @@ -109,11 +110,9 @@ export default async ({ mode, command, ssrBuild: isSSRBuild }) => { /** * Other misc. configuration properties. */ - const useLibMode = ['cma', 'lib'].includes(appType); const peerDepKeys = Object.keys(pkg.peerDependencies || {}); const targetEnvIsServer = ['cfw', 'node'].includes(targetEnv); - const useMinifier = 'dev' !== mode && !['lib'].includes(appType); - const preserveModules = ['lib'].includes(appType) && appEntries.length > 1; + const minifyEnable = 'dev' !== mode && !['lib'].includes(appType); const vitestSandboxEnable = $str.parseValue(String(process.env.VITEST_SANDBOX_ENABLE || '')); const vitestExamplesEnable = $str.parseValue(String(process.env.VITEST_EXAMPLES_ENABLE || '')); @@ -146,7 +145,7 @@ export default async ({ mode, command, ssrBuild: isSSRBuild }) => { * Prepares `package.json` property updates. */ const pkgUpdates = await vitePkgUpdates({ - command, isSSRBuild, projDir, pkg, appType, targetEnv, + command, isSSRBuild, projDir, srcDir, distDir, pkg, appType, targetEnv, sideEffects, appEntriesAsProjRelPaths, appEntriesAsSrcSubpaths, appEntriesAsSrcSubpathsNoExt }); // prettier-ignore @@ -167,12 +166,12 @@ export default async ({ mode, command, ssrBuild: isSSRBuild }) => { /** * Configures esbuild for Vite. */ - const esbuildConfig = await viteESBuildConfig({}); // No props at this time. + const esbuildConfig = await viteESBuildConfig({}); // Minimal config; no props at this time. /** * Configures rollup for Vite. */ - const rollupConfig = await viteRollupConfig({ srcDir, distDir, a16sDir, appEntries, peerDepKeys, preserveModules, useMinifier }); + const rollupConfig = await viteRollupConfig({ srcDir, distDir, a16sDir, appType, appEntries, sideEffects, peerDepKeys, minifyEnable }); /** * Configures tests for Vite. @@ -229,7 +228,7 @@ export default async ({ mode, command, ssrBuild: isSSRBuild }) => { esbuild: esbuildConfig, // esBuild config options. build: /* */ { - target: 'es' + esVersion.year, // Matches TypeScript config. + target: esVersion.lcnYear, // Matches TypeScript config. emptyOutDir: isSSRBuild ? false : true, // Not during SSR builds. outDir: path.relative(srcDir, distDir), // Relative to `root` directory. @@ -243,10 +242,10 @@ export default async ({ mode, command, ssrBuild: isSSRBuild }) => { manifest: !isSSRBuild, // Enables creation of manifest (for assets). sourcemap: 'dev' === mode, // Enables creation of sourcemaps (for debugging). - minify: useMinifier ? 'esbuild' : false, // Minify userland code? + minify: minifyEnable ? 'esbuild' : false, // Minify userland code? modulePreload: false, // Disable. DOM injections conflict with our SPAs. - ...(useLibMode ? { lib: { entry: appEntries, formats: ['es'] } } : {}), + ...(['cma', 'lib'].includes(appType) ? { lib: { entry: appEntries, formats: ['es'] } } : {}), rollupOptions: rollupConfig, // See: . }, }; diff --git a/dev/.files/vite/includes/c10n/config.mjs b/dev/.files/vite/includes/c10n/config.mjs index 6392d39..ce221ed 100644 --- a/dev/.files/vite/includes/c10n/config.mjs +++ b/dev/.files/vite/includes/c10n/config.mjs @@ -14,10 +14,10 @@ import path from 'node:path'; import * as preact from 'preact'; import { $http as $cfpꓺhttp } from '../../../../../node_modules/@clevercanyon/utilities.cfp/dist/index.js'; import { $chalk, $fs, $glob } from '../../../../../node_modules/@clevercanyon/utilities.node/dist/index.js'; -import { $obp, $str } from '../../../../../node_modules/@clevercanyon/utilities/dist/index.js'; -import { renderToString as $preactꓺapisꓺssrꓺrenderToString } from '../../../../../node_modules/@clevercanyon/utilities/dist/preact/apis/ssr.js'; -import { StandAlone as $preactꓺcomponentsꓺ404ꓺStandAlone } from '../../../../../node_modules/@clevercanyon/utilities/dist/preact/routes/404.js'; +import { $obp, $preact, $str } from '../../../../../node_modules/@clevercanyon/utilities/dist/index.js'; +import { StandAlone as $preactꓺcomponentsꓺError404ꓺStandAlone } from '../../../../../node_modules/@clevercanyon/utilities/dist/preact/routes/error-404.js'; import exclusions from '../../../bin/includes/exclusions.mjs'; +import extensions from '../../../bin/includes/extensions.mjs'; import u from '../../../bin/includes/utilities.mjs'; /** @@ -119,7 +119,7 @@ export default async ({ mode, command, isSSRBuild, projDir, distDir, pkg, env, a for (const fileOrDir of await $glob.promise( [ 'types', // Prunes TypeScript type declarations. - 'index.*', // Prunes unused `index.*` files, in favor of SSR routes. + 'index.' + extensions.asBracedGlob([...extensions.byCanonical.html]), ], { cwd: distDir, onlyFiles: false }, )) { @@ -157,7 +157,7 @@ export default async ({ mode, command, isSSRBuild, projDir, distDir, pkg, env, a fileContents = fileContents.replace('$$__APP_CFP_DEFAULT_HEADERS__$$', cfpDefaultHeaders); } if (['404.html'].includes(fileRelPath)) { - const cfpDefault404 = '' + $preactꓺapisꓺssrꓺrenderToString(preact.h($preactꓺcomponentsꓺ404ꓺStandAlone)); + const cfpDefault404 = '' + $preact.ssr.renderToString(preact.h($preactꓺcomponentsꓺError404ꓺStandAlone)); fileContents = fileContents.replace('$$__APP_CFP_DEFAULT_404_HTML__$$', cfpDefault404); } if (['_headers', '_redirects', 'robots.txt'].includes(fileRelPath)) { diff --git a/dev/.files/vite/includes/mdx/config.mjs b/dev/.files/vite/includes/mdx/config.mjs index 5c495dc..003845b 100644 --- a/dev/.files/vite/includes/mdx/config.mjs +++ b/dev/.files/vite/includes/mdx/config.mjs @@ -45,8 +45,8 @@ export default async ({ projDir }) => { include: [ '**/*.' + extensions.asBracedGlob([ - ...extensions.markdown, // Single default export only. - ...extensions.mdx, // Default + potentially other exports. + ...extensions.byVSCodeLang.markdown, // Single default export only. + ...extensions.byVSCodeLang.mdx, // Default + potentially other exports. ]), ], ...(await (await import(path.resolve(projDir, './mdx.config.mjs'))).default()), diff --git a/dev/.files/vite/includes/package/updates.mjs b/dev/.files/vite/includes/package/updates.mjs index d427740..49b4c77 100644 --- a/dev/.files/vite/includes/package/updates.mjs +++ b/dev/.files/vite/includes/package/updates.mjs @@ -22,72 +22,112 @@ import u from '../../../bin/includes/utilities.mjs'; * * @returns Build-related property updates. */ -export default async ({ command, isSSRBuild, projDir, pkg, appType, targetEnv, appEntriesAsProjRelPaths, appEntriesAsSrcSubpaths, appEntriesAsSrcSubpathsNoExt }) => { +export default async ({ + command, + isSSRBuild, + projDir, + srcDir, + distDir, + pkg, + appType, + targetEnv, + sideEffects, + appEntriesAsProjRelPaths, + appEntriesAsSrcSubpaths, + appEntriesAsSrcSubpathsNoExt, +}) => { const updates = {}; // Initialize. if (isSSRBuild) { updates.type = 'module'; // ESM; always. - updates.sideEffects = pkg.sideEffects || []; // . + // Regarding `sideEffects`, {@see https://o5p.me/xVY39g}. + updates.sideEffects = (pkg.sideEffects || []).concat(sideEffects); } else { updates.type = 'module'; // ESM; always. updates.exports = {}; // Exports object initialization. - updates.sideEffects = []; // . + + // Regarding `sideEffects`, {@see https://o5p.me/xVY39g}. + updates.sideEffects = ['**/*.' + extensions.asBracedGlob([...extensions.byVSCodeLang.css, ...extensions.byVSCodeLang.scss, ...extensions.byVSCodeLang.less])]; + updates.sideEffects = updates.sideEffects.concat(sideEffects); + + if (fs.existsSync(path.resolve(srcDir, './resources/init-env.ts'))) { + updates.sideEffects.push('./' + path.relative(projDir, path.resolve(srcDir, './resources/init-env.ts'))); + } + const distDirAsProjRelPath = './' + path.relative(projDir, distDir); // Relative dist directory path. switch (true /* Conditional case handlers. */) { case ['spa', 'mpa'].includes(appType): { - const appEntryIndexAsSrcSubpath = appEntriesAsSrcSubpaths.find((subpath) => $str.mm.isMatch(subpath, 'index.' + extensions.asBracedGlob([...extensions.trueHTML]))); + const trueHTMLExtRegExp = new RegExp('\\.' + extensions.asRegExpFrag([...extensions.byCanonical.html]) + '$', 'ui'); + const appEntryIndexAsSrcSubpath = appEntriesAsSrcSubpaths.find((subpath) => + $str.mm.isMatch(subpath, 'index.' + extensions.asBracedGlob([...extensions.byCanonical.html])), + ); const appEntryIndexAsSrcSubpathNoExt = appEntryIndexAsSrcSubpath.replace(/\.[^.]+$/u, ''); if (['spa'].includes(appType) && (!appEntryIndexAsSrcSubpath || !appEntryIndexAsSrcSubpathNoExt)) { - throw new Error('Single-page apps must have an `./index.' + extensions.asBracedGlob([...extensions.trueHTML]) + '` entry point.'); + throw new Error('Single-page apps must have an `./index.' + extensions.asBracedGlob([...extensions.byCanonical.html]) + '` entry point.'); // } else if (['mpa'].includes(appType) && (!appEntryIndexAsSrcSubpath || !appEntryIndexAsSrcSubpathNoExt)) { - throw new Error('Multipage apps must have an `./index.' + extensions.asBracedGlob([...extensions.trueHTML]) + '` entry point.'); + throw new Error('Multipage apps must have an `./index.' + extensions.asBracedGlob([...extensions.byCanonical.html]) + '` entry point.'); } (updates.exports = null), (updates.typesVersions = {}); updates.main = updates.module = updates.unpkg = updates.browser = updates.types = ''; + for (const appEntryAsProjRelPath of appEntriesAsProjRelPaths) { + if (trueHTMLExtRegExp.test(appEntryAsProjRelPath)) { + updates.sideEffects.push(appEntryAsProjRelPath.replace(trueHTMLExtRegExp, '.tsx')); + + if (fs.existsSync(path.resolve(projDir, appEntryAsProjRelPath.replace(trueHTMLExtRegExp, '.scss')))) { + updates.sideEffects.push(appEntryAsProjRelPath.replace(trueHTMLExtRegExp, '.scss')); + } + } + } break; // Stop here. } case ['cma', 'lib'].includes(appType): { const appEntryIndexAsSrcSubpath = appEntriesAsSrcSubpaths.find((subpath) => - $str.mm.isMatch(subpath, 'index.' + extensions.asBracedGlob([...extensions.sTypeScript, ...extensions.sTypeScriptReact])), + $str.mm.isMatch(subpath, 'index.' + extensions.asBracedGlob([...extensions.byDevGroup.sTypeScript, ...extensions.byDevGroup.sTypeScriptReact])), ); const appEntryIndexAsSrcSubpathNoExt = appEntryIndexAsSrcSubpath.replace(/\.[^.]+$/u, ''); if (['cma'].includes(appType) && (!appEntryIndexAsSrcSubpath || !appEntryIndexAsSrcSubpathNoExt)) { - throw new Error('Custom apps must have an `./index.' + extensions.asBracedGlob([...extensions.sTypeScript, ...extensions.sTypeScriptReact]) + '` entry point.'); + throw new Error( + 'Custom apps must have an `./index.' + + extensions.asBracedGlob([...extensions.byDevGroup.sTypeScript, ...extensions.byDevGroup.sTypeScriptReact]) + + '` entry point.', + ); // } else if (['lib'].includes(appType) && (!appEntryIndexAsSrcSubpath || !appEntryIndexAsSrcSubpathNoExt)) { throw new Error( - 'Library apps must have an `./index.' + extensions.asBracedGlob([...extensions.sTypeScript, ...extensions.sTypeScriptReact]) + '` entry point.', + 'Library apps must have an `./index.' + + extensions.asBracedGlob([...extensions.byDevGroup.sTypeScript, ...extensions.byDevGroup.sTypeScriptReact]) + + '` entry point.', ); } updates.exports = { '.': { - types: './dist/types/' + appEntryIndexAsSrcSubpathNoExt + '.d.ts', // First, always. - import: './dist/' + appEntryIndexAsSrcSubpathNoExt + '.js', // ESM module import path. - default: './dist/' + appEntryIndexAsSrcSubpathNoExt + '.js', // Last, always. + types: distDirAsProjRelPath + '/types/' + appEntryIndexAsSrcSubpathNoExt + '.d.ts', // First, always. + import: distDirAsProjRelPath + '/' + appEntryIndexAsSrcSubpathNoExt + '.js', // ESM module import path. + default: distDirAsProjRelPath + '/' + appEntryIndexAsSrcSubpathNoExt + '.js', // Last, always. }, }; - updates.main = './dist/' + appEntryIndexAsSrcSubpathNoExt + '.js'; - updates.module = './dist/' + appEntryIndexAsSrcSubpathNoExt + '.js'; + updates.main = distDirAsProjRelPath + '/' + appEntryIndexAsSrcSubpathNoExt + '.js'; + updates.module = distDirAsProjRelPath + '/' + appEntryIndexAsSrcSubpathNoExt + '.js'; updates.unpkg = updates.module; // Same, same. ESM-only builds. updates.browser = ['web'].includes(targetEnv) ? updates.module : ''; - updates.typesVersions = { '>=3.1': { './*': ['./dist/types/*'] } }; - updates.types = './dist/types/' + appEntryIndexAsSrcSubpathNoExt + '.d.ts'; + updates.typesVersions = { '>=3.1': { './*': [distDirAsProjRelPath + '/types/*'] } }; + updates.types = distDirAsProjRelPath + '/types/' + appEntryIndexAsSrcSubpathNoExt + '.d.ts'; - for (const appEntryAsSrcSubpathNoExt of appEntriesAsSrcSubpathsNoExt) { + for (const appEntryAsSrcSubpathNoExt of [...appEntriesAsSrcSubpathsNoExt].sort()) { if (appEntryAsSrcSubpathNoExt === appEntryIndexAsSrcSubpathNoExt) { - continue; // Don't remap the entry index. + continue; // i.e., It’s already been defined as `.` above. } $obj.patchDeep(updates.exports, { ['./' + appEntryAsSrcSubpathNoExt]: { - types: './dist/types/' + appEntryAsSrcSubpathNoExt + '.d.ts', // First, always. - import: './dist/' + appEntryAsSrcSubpathNoExt + '.js', // ESM module import path. - default: './dist/' + appEntryAsSrcSubpathNoExt + '.js', // Last, always. + types: distDirAsProjRelPath + '/types/' + appEntryAsSrcSubpathNoExt + '.d.ts', // First, always. + import: distDirAsProjRelPath + '/' + appEntryAsSrcSubpathNoExt + '.js', // ESM module import path. + default: distDirAsProjRelPath + '/' + appEntryAsSrcSubpathNoExt + '.js', // Last, always. }, }); } @@ -97,18 +137,11 @@ export default async ({ command, isSSRBuild, projDir, pkg, appType, targetEnv, a throw new Error('Unexpected `appType`. Failed to update `./package.json` properties.'); } } - if (fs.existsSync(path.resolve(projDir, './src/resources/init-env.ts'))) { - updates.sideEffects.push('./src/resources/init-env.ts'); - } - } - for (const appEntryAsProjRelPath of appEntriesAsProjRelPaths) { - const regExp = new RegExp('\\.' + extensions.asRegExpFrag([...extensions.trueHTML]) + '$', 'ug'); - updates.sideEffects.push(appEntryAsProjRelPath.replace(regExp, '.tsx')); } - updates.sideEffects = [...new Set(updates.sideEffects)]; // Unique array values. + updates.sideEffects = [...new Set(updates.sideEffects)].sort(); // Sorted unique values. if ('build' === command /* Only when building the app. */) { - u.log($chalk.gray('Updating `type,sideEffects` in `./package.json`.')); + u.log($chalk.gray('Updating `type` and `sideEffects` in `./package.json`.')); await u.updatePkg({ $set: { type: updates.type, sideEffects: updates.sideEffects } }); } return updates; diff --git a/dev/.files/vite/includes/rollup/config.mjs b/dev/.files/vite/includes/rollup/config.mjs index bbd38d0..2316f84 100644 --- a/dev/.files/vite/includes/rollup/config.mjs +++ b/dev/.files/vite/includes/rollup/config.mjs @@ -22,22 +22,28 @@ import extensions from '../../../bin/includes/extensions.mjs'; * * @returns Rollup configuration. */ -export default async ({ srcDir, distDir, a16sDir, appEntries, peerDepKeys, preserveModules, useMinifier }) => { +export default async ({ srcDir, distDir, a16sDir, appType, appEntries, sideEffects, peerDepKeys, minifyEnable }) => { return { - input: appEntries, + input: appEntries, // App entry file paths. + ...(['lib'].includes(appType) ? { preserveEntrySignatures: 'strict' } : {}), + treeshake: { + moduleSideEffects: sideEffects, + manualPureFunctions: [], // None for now. + }, external: [ + ...(['lib'].includes(appType) ? [/^(?![./]|file:|data:).*$/iu] : []), ...peerDepKeys.map((k) => new RegExp('^' + $str.escRegExp(k) + '(?:$|[/?])')), '__STATIC_CONTENT_MANIFEST', // Cloudflare worker sites use this for static assets. ], output: { - interop: 'auto', // Matches TypeScript config. - exports: 'named', // Matches TypeScript config. - esModule: true, // Matches TypeScript config. + interop: 'auto', // Matches TypeScript configuration. + exports: 'named', // Matches TypeScript configuration. + esModule: true, // Matches TypeScript configuration. extend: true, // i.e., UMD global `||` checks. noConflict: true, // Behaves the same as `jQuery.noConflict()`. - compact: useMinifier, // Minify wrapper code generated by rollup? + compact: minifyEnable, // Minify wrapper code generated by rollup? // By default, special chars in a path like `[[name]].js` get changed to `__name__.js`. // This prevents that by enforcing a custom sanitizer. More details: . @@ -46,7 +52,7 @@ export default async ({ srcDir, distDir, a16sDir, appEntries, peerDepKeys, prese // By default, in SSR mode, Vite forces all entry files into the `distDir` root. // This prevents that by enforcing a consistently relative location for all entries. entryFileNames: (entry) => { - if ([...extensions.trueHTML].includes($path.ext(entry.facadeModuleId))) { + if (extensions.noDot([...extensions.byCanonical.html]).includes($path.ext(entry.facadeModuleId))) { if (/\//u.test(entry.name)) return '[name]-[hash].js'; // Already a subpath. return path.join(path.relative(distDir, a16sDir), '[name]-[hash].js'); } @@ -64,15 +70,9 @@ export default async ({ srcDir, distDir, a16sDir, appEntries, peerDepKeys, prese // This prevents that by enforcing a consistent location for chunks and assets. assetFileNames: (/* asset */) => path.join(path.relative(distDir, a16sDir), '[name]-[hash].[ext]'), - // Preserves module structure in apps built explicitly as multi-entry libraries. - // The expectation is that its peers will build w/ this flag set as false, which is - // recommended, because preserving module structure in a final build has performance costs. - // However, in builds that are not final (e.g., apps with peer dependencies), preserving modules - // has performance benefits, as it allows for tree-shaking optimization in final builds. - ...(preserveModules ? { preserveModules: true } : {}), - + // Preserves module structure in apps built explicitly as libraries. // Cannot inline dynamic imports when `preserveModules` is enabled, so set as `false` explicitly. - ...(preserveModules ? { inlineDynamicImports: false } : {}), + ...(['lib'].includes(appType) ? { preserveModules: true, hoistTransitiveImports: false, inlineDynamicImports: false } : {}), }, }; }; diff --git a/dev/.files/vite/includes/vitest/config.mjs b/dev/.files/vite/includes/vitest/config.mjs index 7292f05..dd9dc7d 100644 --- a/dev/.files/vite/includes/vitest/config.mjs +++ b/dev/.files/vite/includes/vitest/config.mjs @@ -71,60 +71,67 @@ export default async ({ projDir, srcDir, logsDir, targetEnv, vitestSandboxEnable ? [ ...(vitestSandboxEnable ? [ - '**/sandbox/**/*.{test,tests,spec,specs}.' + extensions.asBracedGlob([...extensions.allJavaScript, ...extensions.allTypeScript]), // - '**/sandbox/**/{test,tests,spec,specs}/**/*.' + extensions.asBracedGlob([...extensions.allJavaScript, ...extensions.allTypeScript]), + '**/sandbox/**/*.{test,tests,spec,specs}.' + extensions.asBracedGlob([...extensions.byDevGroup.allJavaScript, ...extensions.byDevGroup.allTypeScript]), // + '**/sandbox/**/{test,tests,spec,specs}/**/*.' + + extensions.asBracedGlob([...extensions.byDevGroup.allJavaScript, ...extensions.byDevGroup.allTypeScript]), ] : []), ...(vitestExamplesEnable ? [ - '**/{example,examples}/**/*.{test,tests,spec,specs}.' + extensions.asBracedGlob([...extensions.allJavaScript, ...extensions.allTypeScript]), // - '**/{example,examples}/**/{test,tests,spec,specs}/**/*.' + extensions.asBracedGlob([...extensions.allJavaScript, ...extensions.allTypeScript]), + '**/{example,examples}/**/*.{test,tests,spec,specs}.' + + extensions.asBracedGlob([...extensions.byDevGroup.allJavaScript, ...extensions.byDevGroup.allTypeScript]), // + '**/{example,examples}/**/{test,tests,spec,specs}/**/*.' + + extensions.asBracedGlob([...extensions.byDevGroup.allJavaScript, ...extensions.byDevGroup.allTypeScript]), ] : []), ] : [ - '**/*.{test,tests,spec,specs}.' + extensions.asBracedGlob([...extensions.allJavaScript, ...extensions.allTypeScript]), // - '**/{test,tests,spec,specs}/**/*.' + extensions.asBracedGlob([...extensions.allJavaScript, ...extensions.allTypeScript]), + '**/*.{test,tests,spec,specs}.' + extensions.asBracedGlob([...extensions.byDevGroup.allJavaScript, ...extensions.byDevGroup.allTypeScript]), // + '**/{test,tests,spec,specs}/**/*.' + extensions.asBracedGlob([...extensions.byDevGroup.allJavaScript, ...extensions.byDevGroup.allTypeScript]), ]; const vitestTypecheckIncludes = vitestSandboxEnable || vitestExamplesEnable ? [ ...(vitestSandboxEnable ? [ - '**/sandbox/**/*.{test,tests,spec,specs}-d.' + extensions.asBracedGlob([...extensions.allTypeScript]), // - '**/sandbox/**/{test,tests,spec,specs}/**/*-d.' + extensions.asBracedGlob([...extensions.allTypeScript]), + '**/sandbox/**/*.{test,tests,spec,specs}-d.' + extensions.asBracedGlob([...extensions.byDevGroup.allTypeScript]), // + '**/sandbox/**/{test,tests,spec,specs}/**/*-d.' + extensions.asBracedGlob([...extensions.byDevGroup.allTypeScript]), ] : []), ...(vitestExamplesEnable ? [ - '**/{example,examples}/**/*.{test,tests,spec,specs}-d.' + extensions.asBracedGlob([...extensions.allTypeScript]), // - '**/{example,examples}/**/{test,tests,spec,specs}/**/*-d.' + extensions.asBracedGlob([...extensions.allTypeScript]), + '**/{example,examples}/**/*.{test,tests,spec,specs}-d.' + extensions.asBracedGlob([...extensions.byDevGroup.allTypeScript]), // + '**/{example,examples}/**/{test,tests,spec,specs}/**/*-d.' + extensions.asBracedGlob([...extensions.byDevGroup.allTypeScript]), ] : []), ] : [ - '**/*.{test,tests,spec,specs}-d.' + extensions.asBracedGlob([...extensions.allTypeScript]), // - '**/{test,tests,spec,specs}/**/*-d.' + extensions.asBracedGlob([...extensions.allTypeScript]), + '**/*.{test,tests,spec,specs}-d.' + extensions.asBracedGlob([...extensions.byDevGroup.allTypeScript]), // + '**/{test,tests,spec,specs}/**/*-d.' + extensions.asBracedGlob([...extensions.byDevGroup.allTypeScript]), ]; const vitestBenchIncludes = vitestSandboxEnable || vitestExamplesEnable ? [ ...(vitestSandboxEnable ? [ - '**/sandbox/**/*.{bench,benchmark,benchmarks}.' + extensions.asBracedGlob([...extensions.allJavaScript, ...extensions.allTypeScript]), // - '**/sandbox/**/{bench,benchmark,benchmarks}/**/*.' + extensions.asBracedGlob([...extensions.allJavaScript, ...extensions.allTypeScript]), + '**/sandbox/**/*.{bench,benchmark,benchmarks}.' + + extensions.asBracedGlob([...extensions.byDevGroup.allJavaScript, ...extensions.byDevGroup.allTypeScript]), // + '**/sandbox/**/{bench,benchmark,benchmarks}/**/*.' + + extensions.asBracedGlob([...extensions.byDevGroup.allJavaScript, ...extensions.byDevGroup.allTypeScript]), ] : []), ...(vitestExamplesEnable ? [ - '**/{example,examples}/**/*.{bench,benchmark,benchmarks}.' + extensions.asBracedGlob([...extensions.allJavaScript, ...extensions.allTypeScript]), // - '**/{example,examples}/**/{bench,benchmark,benchmarks}/**/*.' + extensions.asBracedGlob([...extensions.allJavaScript, ...extensions.allTypeScript]), + '**/{example,examples}/**/*.{bench,benchmark,benchmarks}.' + + extensions.asBracedGlob([...extensions.byDevGroup.allJavaScript, ...extensions.byDevGroup.allTypeScript]), // + '**/{example,examples}/**/{bench,benchmark,benchmarks}/**/*.' + + extensions.asBracedGlob([...extensions.byDevGroup.allJavaScript, ...extensions.byDevGroup.allTypeScript]), ] : []), ] : [ - '**/*.{bench,benchmark,benchmarks}.' + extensions.asBracedGlob([...extensions.allJavaScript, ...extensions.allTypeScript]), // - '**/{bench,benchmark,benchmarks}/**/*.' + extensions.asBracedGlob([...extensions.allJavaScript, ...extensions.allTypeScript]), + '**/*.{bench,benchmark,benchmarks}.' + extensions.asBracedGlob([...extensions.byDevGroup.allJavaScript, ...extensions.byDevGroup.allTypeScript]), // + '**/{bench,benchmark,benchmarks}/**/*.' + extensions.asBracedGlob([...extensions.byDevGroup.allJavaScript, ...extensions.byDevGroup.allTypeScript]), ]; return { root: srcDir, @@ -146,14 +153,17 @@ export default async ({ projDir, srcDir, logsDir, targetEnv, vitestSandboxEnable // See: for `environment`, `environmentMatchGlobs` precedence. environmentMatchGlobs: [ - ['**/*.{cfp,web}.{test,tests,spec,specs}.' + extensions.asBracedGlob([...extensions.allJavaScript, ...extensions.allTypeScript]), 'jsdom'], - ['**/{test,tests,spec,specs}/**/*.{cfp,web}.' + extensions.asBracedGlob([...extensions.allJavaScript, ...extensions.allTypeScript]), 'jsdom'], + ['**/*.{cfp,web}.{test,tests,spec,specs}.' + extensions.asBracedGlob([...extensions.byDevGroup.allJavaScript, ...extensions.byDevGroup.allTypeScript]), 'jsdom'], + ['**/{test,tests,spec,specs}/**/*.{cfp,web}.' + extensions.asBracedGlob([...extensions.byDevGroup.allJavaScript, ...extensions.byDevGroup.allTypeScript]), 'jsdom'], - ['**/*.{cfw,webw}.{test,tests,spec,specs}.' + extensions.asBracedGlob([...extensions.allJavaScript, ...extensions.allTypeScript]), 'miniflare'], - ['**/{test,tests,spec,specs}/**/*.{cfw,webw}.' + extensions.asBracedGlob([...extensions.allJavaScript, ...extensions.allTypeScript]), 'miniflare'], + ['**/*.{cfw,webw}.{test,tests,spec,specs}.' + extensions.asBracedGlob([...extensions.byDevGroup.allJavaScript, ...extensions.byDevGroup.allTypeScript]), 'miniflare'], + [ + '**/{test,tests,spec,specs}/**/*.{cfw,webw}.' + extensions.asBracedGlob([...extensions.byDevGroup.allJavaScript, ...extensions.byDevGroup.allTypeScript]), + 'miniflare', + ], - ['**/*.{node,any}.{test,tests,spec,specs}.' + extensions.asBracedGlob([...extensions.allJavaScript, ...extensions.allTypeScript]), 'node'], - ['**/{test,tests,spec,specs}/**/*.{node,any}.' + extensions.asBracedGlob([...extensions.allJavaScript, ...extensions.allTypeScript]), 'node'], + ['**/*.{node,any}.{test,tests,spec,specs}.' + extensions.asBracedGlob([...extensions.byDevGroup.allJavaScript, ...extensions.byDevGroup.allTypeScript]), 'node'], + ['**/{test,tests,spec,specs}/**/*.{node,any}.' + extensions.asBracedGlob([...extensions.byDevGroup.allJavaScript, ...extensions.byDevGroup.allTypeScript]), 'node'], ], server: { deps: { inline: [], external: [...new Set([...exclusions.pkgIgnores].concat(rollupConfig.external))] } }, cache: { dir: path.resolve(projDir, './node_modules/.vitest') }, @@ -183,8 +193,8 @@ export default async ({ projDir, srcDir, logsDir, targetEnv, vitestSandboxEnable }, coverage: { all: true, // All of the below. - extension: [...extensions.allJavaScript, ...extensions.allTypeScript], - include: ['**/*.' + extensions.asBracedGlob([...extensions.allJavaScript, ...extensions.allTypeScript])], + extension: [...extensions.byDevGroup.allJavaScript, ...extensions.byDevGroup.allTypeScript], + include: ['**/*.' + extensions.asBracedGlob([...extensions.byDevGroup.allJavaScript, ...extensions.byDevGroup.allTypeScript])], exclude: [...new Set([...vitestExcludes, ...vitestIncludes, ...vitestTypecheckIncludes, ...vitestBenchIncludes])], reporter: ['text', 'html', 'clover', 'json'], // Produces all report formats. diff --git a/dev/.files/vscode/config.mjs b/dev/.files/vscode/config.mjs index 9fb3c3c..0f8d0e0 100755 --- a/dev/.files/vscode/config.mjs +++ b/dev/.files/vscode/config.mjs @@ -120,10 +120,16 @@ export default async () => { // Plus everything in `../../../.gitignore`. // ... plus these additional search ignores. - ...((await u.isPkgRepo('clevercanyon/skeleton')) - ? {} // Search in `clevercanyon/skeleton`. - : { - '/dev/.files': true, + ...(!(await u.isPkgRepo('clevercanyon/skeleton')) + ? { + ...exclusions.asBoolProps( + exclusions.asRootedRelativeGlobs( + projDir, // Skeleton `/dev/.files`. + [...exclusions.devDotFileIgnores], + { forceRelative: true }, + ), + { tailGreedy: false }, + ), ...exclusions.asBoolProps( exclusions.asRootedRelativeGlobs( projDir, @@ -136,7 +142,8 @@ export default async () => { { tailGreedy: false }, ), '/LICENSE.txt': true, - }), + } + : {}), ...exclusions.asBoolProps([...exclusions.lockIgnores], { tailGreedy: false }), }, @@ -158,16 +165,18 @@ export default async () => { }, '@someday': { 'scope': 'workspace', - 'iconColor': '#ead1dc', - 'highlightColor': '#ead1dc', + 'iconColor': '#6d718a', + 'highlightColor': '#6d718a', 'styleMode': 'tag', }, }, 'commentAnchors.tags.matchCase': true, 'commentAnchors.tags.separators': [' ', ': '], + // Comment Anchors uses minimatch, with `{ dot: false }`. 'commentAnchors.workspace.excludeFiles': exclusions.asBracedGlob( [ + ...(!(await u.isPkgRepo('clevercanyon/skeleton')) ? [...exclusions.devDotFileIgnores] : []), ...exclusions.logIgnores, // ...exclusions.backupIgnores, ...exclusions.patchIgnores, @@ -179,9 +188,23 @@ export default async () => { ...exclusions.lockIgnores, ...exclusions.distIgnores, ], - { dropExistingNegations: true, dotGlobstars: true }, + { dropExistingNegations: true, dropExistingRelatives: true }, ), - 'commentAnchors.workspace.matchFiles': $path.dotGlobstarHead + '*.' + extensions.asBracedGlob([...extensions.commentAnchorsContent]), + /** + * Comment Anchors uses two things under the hood: + * + * 1. `workspace.findFiles()` from VS Code API; {@see https://o5p.me/wTHsX1}. + * 2. Minimatch with default `{ dot: false }` option; {@see https://o5p.me/l6XWRg}. + * + * VS Code doesn’t support extglob patterns, unfortunately, so we can’t use dotGlobstars. For that reason, an + * adhoc and highly imperfect solution is used to get Comment Anchors at least working well inside of + * `clevercanyon/skeleton/dev/.files`. Outside of `.` dirs/files, Comment Anchors work fine. + * + * @see https://github.com/StarlaneStudios/vscode-comment-anchors/issues/209 + */ + 'commentAnchors.workspace.matchFiles': (await u.isPkgRepo('clevercanyon/skeleton')) + ? '{**/,**/dev/.files/,**/dev/.files/**/}*.' + extensions.asBracedGlob([...extensions.commentAnchorsContent]) + : '**/*.' + extensions.asBracedGlob([...extensions.commentAnchorsContent]), /** * ESLint options. @@ -196,6 +219,7 @@ export default async () => { 'eslint.codeActionsOnSave.mode': 'all', 'eslint.experimental.useFlatConfig': true, + 'eslint.workingDirectories': [{ 'mode': 'auto' }], 'eslint.validate': [ 'mdx', // diff --git a/dev/.files/wrangler/config.mjs b/dev/.files/wrangler/config.mjs index 54549e7..39cda7d 100755 --- a/dev/.files/wrangler/config.mjs +++ b/dev/.files/wrangler/config.mjs @@ -63,34 +63,71 @@ export default async () => { main: './' + path.relative(projDir, './dist/index.js'), - // Dynamic import configuration. + // Bundling configuration; {@see }. rules: [ - { - type: 'Text', - globs: extensions.asNoBraceGlobstars([]), - fallthrough: false, - }, { type: 'ESModule', globs: extensions.asNoBraceGlobstars([ - ...extensions.sJavaScript, // - ...extensions.mJavaScript, - ...extensions.sJavaScriptReact, - ...extensions.mJavaScriptReact, + ...extensions.byDevGroup.sJavaScript, // + ...extensions.byDevGroup.sJavaScriptReact, + + ...extensions.byDevGroup.mJavaScript, + ...extensions.byDevGroup.mJavaScriptReact, ]), fallthrough: false, }, { type: 'CommonJS', globs: extensions.asNoBraceGlobstars([ - ...extensions.cJavaScript, // - ...extensions.cJavaScriptReact, + ...extensions.byDevGroup.cJavaScript, // + ...extensions.byDevGroup.cJavaScriptReact, ]), fallthrough: false, }, - { type: 'CompiledWasm', globs: extensions.asNoBraceGlobstars([...extensions.wasm]), fallthrough: false }, - { type: 'Data', globs: extensions.asNoBraceGlobstars([].filter((ext) => '.wasm' !== ext)), fallthrough: false }, + { + type: 'Text', + globs: extensions.asNoBraceGlobstars( + [...extensions.byVSCodeLang.codeTextual].filter( + (ext) => + ![ + ...extensions.byDevGroup.sJavaScript, // + ...extensions.byDevGroup.sJavaScriptReact, + + ...extensions.byDevGroup.mJavaScript, + ...extensions.byDevGroup.mJavaScriptReact, + + ...extensions.byDevGroup.cJavaScript, + ...extensions.byDevGroup.cJavaScriptReact, + + ...extensions.byCanonical.wasm, + ].includes(ext), + ), + ), + fallthrough: false, + }, + { + type: 'Data', + globs: extensions.asNoBraceGlobstars( + [...extensions.byVSCodeLang.codeTextBinary].filter( + (ext) => + ![ + ...extensions.byDevGroup.sJavaScript, // + ...extensions.byDevGroup.sJavaScriptReact, + + ...extensions.byDevGroup.mJavaScript, + ...extensions.byDevGroup.mJavaScriptReact, + + ...extensions.byDevGroup.cJavaScript, + ...extensions.byDevGroup.cJavaScriptReact, + + ...extensions.byCanonical.wasm, + ].includes(ext), + ), + ), + fallthrough: false, + }, + { type: 'CompiledWasm', globs: extensions.asNoBraceGlobstars([...extensions.byCanonical.wasm]), fallthrough: false }, ], // Custom build configuration. diff --git a/package-lock.json b/package-lock.json index c7d6eb9..bac0e44 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "@clevercanyon/utilities.cfw", - "version": "1.0.102", + "version": "1.0.103", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@clevercanyon/utilities.cfw", - "version": "1.0.102", + "version": "1.0.103", "cpu": [ "x64", "arm64" @@ -17,17 +17,17 @@ "linux" ], "devDependencies": { - "@clevercanyon/dev-deps": "^1.0.230" + "@clevercanyon/dev-deps": "^1.0.231" }, "engines": { - "node": "^19.1.0 || ^20.5.1", - "npm": "^8.19.3 || ^9.2.0" + "node": "^19.1.0 || ^20.5.0", + "npm": "^8.19.3 || ^9.8.0 || ^10.0.0" }, "funding": { "url": "https://github.com/sponsors/clevercanyon" }, "peerDependencies": { - "@clevercanyon/utilities": "^1.0.266", + "@clevercanyon/utilities": "^1.0.277", "@cloudflare/kv-asset-handler": "^0.2.0" } }, @@ -159,22 +159,22 @@ } }, "node_modules/@babel/core": { - "version": "7.22.20", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.22.20.tgz", - "integrity": "sha512-Y6jd1ahLubuYweD/zJH+vvOY141v4f9igNQAQ+MBgq9JlHS2iTsZKn1aMsb3vGccZsXI16VzTBw52Xx0DWmtnA==", + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.23.0.tgz", + "integrity": "sha512-97z/ju/Jy1rZmDxybphrBuI+jtJjFVoz7Mr9yUQVVVi+DNZE333uFQeMOqcCIy1x3WYBIbWftUSLmbNXNT7qFQ==", "dev": true, "dependencies": { "@ampproject/remapping": "^2.2.0", "@babel/code-frame": "^7.22.13", - "@babel/generator": "^7.22.15", + "@babel/generator": "^7.23.0", "@babel/helper-compilation-targets": "^7.22.15", - "@babel/helper-module-transforms": "^7.22.20", - "@babel/helpers": "^7.22.15", - "@babel/parser": "^7.22.16", + "@babel/helper-module-transforms": "^7.23.0", + "@babel/helpers": "^7.23.0", + "@babel/parser": "^7.23.0", "@babel/template": "^7.22.15", - "@babel/traverse": "^7.22.20", - "@babel/types": "^7.22.19", - "convert-source-map": "^1.7.0", + "@babel/traverse": "^7.23.0", + "@babel/types": "^7.23.0", + "convert-source-map": "^2.0.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", "json5": "^2.2.3", @@ -198,12 +198,12 @@ } }, "node_modules/@babel/generator": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.22.15.tgz", - "integrity": "sha512-Zu9oWARBqeVOW0dZOjXc3JObrzuqothQ3y/n1kUtrjCoCPLkXUwMvOo/F/TCfoHMbWIFlWwpZtkZVb9ga4U2pA==", + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.23.0.tgz", + "integrity": "sha512-lN85QRR+5IbYrMWM6Y4pE/noaQtg4pNiqeNGX60eqOfo6gtEj6uw/JagelB8vVztSd7R6M5n1+PQkDbHbBRU4g==", "dev": true, "dependencies": { - "@babel/types": "^7.22.15", + "@babel/types": "^7.23.0", "@jridgewell/gen-mapping": "^0.3.2", "@jridgewell/trace-mapping": "^0.3.17", "jsesc": "^2.5.1" @@ -247,13 +247,13 @@ } }, "node_modules/@babel/helper-function-name": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.22.5.tgz", - "integrity": "sha512-wtHSq6jMRE3uF2otvfuD3DIvVhOsSNshQl0Qrd7qC9oQJzHvOL4qQXlQn2916+CXGywIjpGuIkoyZRRxHPiNQQ==", + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz", + "integrity": "sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==", "dev": true, "dependencies": { - "@babel/template": "^7.22.5", - "@babel/types": "^7.22.5" + "@babel/template": "^7.22.15", + "@babel/types": "^7.23.0" }, "engines": { "node": ">=6.9.0" @@ -284,9 +284,9 @@ } }, "node_modules/@babel/helper-module-transforms": { - "version": "7.22.20", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.22.20.tgz", - "integrity": "sha512-dLT7JVWIUUxKOs1UnJUBR3S70YK+pKX6AbJgB2vMIvEkZkrfJDbYDJesnPshtKV4LhDOR3Oc5YULeDizRek+5A==", + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.23.0.tgz", + "integrity": "sha512-WhDWw1tdrlT0gMgUJSlX0IQvoO1eN279zrAUbVB+KpV2c3Tylz8+GnKOLllCS6Z/iZQEyVYxhZVUdPTqs2YYPw==", "dev": true, "dependencies": { "@babel/helper-environment-visitor": "^7.22.20", @@ -363,14 +363,14 @@ } }, "node_modules/@babel/helpers": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.22.15.tgz", - "integrity": "sha512-7pAjK0aSdxOwR+CcYAqgWOGy5dcfvzsTIfFTb2odQqW47MDfv14UaJDY6eng8ylM2EaeKXdxaSWESbkmaQHTmw==", + "version": "7.23.1", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.23.1.tgz", + "integrity": "sha512-chNpneuK18yW5Oxsr+t553UZzzAs3aZnFm4bxhebsNTeshrC95yA7l5yl7GBAG+JG1rF0F7zzD2EixK9mWSDoA==", "dev": true, "dependencies": { "@babel/template": "^7.22.15", - "@babel/traverse": "^7.22.15", - "@babel/types": "^7.22.15" + "@babel/traverse": "^7.23.0", + "@babel/types": "^7.23.0" }, "engines": { "node": ">=6.9.0" @@ -462,9 +462,9 @@ } }, "node_modules/@babel/parser": { - "version": "7.22.16", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.22.16.tgz", - "integrity": "sha512-+gPfKv8UWeKKeJTUxe59+OobVcrYHETCsORl61EmSkmgymguYk/X5bp7GuUIXaFsc6y++v8ZxPsLSSuujqDphA==", + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.23.0.tgz", + "integrity": "sha512-vvPKKdMemU85V9WE/l5wZEmImpCtLqbnTvqDS2U1fJ96KrxoW7KrXhNsNCblQlg8Ck4b85yxdTyelsMUgFUXiw==", "dev": true, "bin": { "parser": "bin/babel-parser.js" @@ -651,9 +651,9 @@ } }, "node_modules/@babel/runtime": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.22.15.tgz", - "integrity": "sha512-T0O+aa+4w0u06iNmapipJXMV4HoUir03hpx3/YqXXhu9xim3w+dVphjFWl1OH8NbZHw5Lbm9k45drDkgq2VNNA==", + "version": "7.23.1", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.23.1.tgz", + "integrity": "sha512-hC2v6p8ZSI/W0HUzh3V8C5g+NwSKzKPtJwSpTjwl0o297GP9+ZLQSkdvHz46CM3LqyoXxq+5G9komY+eSqSO0g==", "dev": true, "dependencies": { "regenerator-runtime": "^0.14.0" @@ -677,19 +677,19 @@ } }, "node_modules/@babel/traverse": { - "version": "7.22.20", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.22.20.tgz", - "integrity": "sha512-eU260mPZbU7mZ0N+X10pxXhQFMGTeLb9eFS0mxehS8HZp9o1uSnFeWQuG1UPrlxgA7QoUzFhOnilHDp0AXCyHw==", + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.23.0.tgz", + "integrity": "sha512-t/QaEvyIoIkwzpiZ7aoSKK8kObQYeF7T2v+dazAYCb8SXtp58zEVkWW7zAnju8FNKNdr4ScAOEDmMItbyOmEYw==", "dev": true, "dependencies": { "@babel/code-frame": "^7.22.13", - "@babel/generator": "^7.22.15", + "@babel/generator": "^7.23.0", "@babel/helper-environment-visitor": "^7.22.20", - "@babel/helper-function-name": "^7.22.5", + "@babel/helper-function-name": "^7.23.0", "@babel/helper-hoist-variables": "^7.22.5", "@babel/helper-split-export-declaration": "^7.22.6", - "@babel/parser": "^7.22.16", - "@babel/types": "^7.22.19", + "@babel/parser": "^7.23.0", + "@babel/types": "^7.23.0", "debug": "^4.1.0", "globals": "^11.1.0" }, @@ -707,13 +707,13 @@ } }, "node_modules/@babel/types": { - "version": "7.22.19", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.22.19.tgz", - "integrity": "sha512-P7LAw/LbojPzkgp5oznjE6tQEIWbp4PkkfrZDINTro9zgBRtI324/EYsiSI7lhPbpIQ+DCeR2NNmMWANGGfZsg==", + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.0.tgz", + "integrity": "sha512-0oIyUfKoI3mSqMvsxBdclDwxXKXAUA8v/apZbc+iSyARYou1o8ZGDxbUYyLFoW2arqS2jDGqJuZvv1d/io1axg==", "dev": true, "dependencies": { "@babel/helper-string-parser": "^7.22.5", - "@babel/helper-validator-identifier": "^7.22.19", + "@babel/helper-validator-identifier": "^7.22.20", "to-fast-properties": "^2.0.0" }, "engines": { @@ -766,9 +766,9 @@ "dev": true }, "node_modules/@clevercanyon/dev-deps": { - "version": "1.0.230", - "resolved": "https://registry.npmjs.org/@clevercanyon/dev-deps/-/dev-deps-1.0.230.tgz", - "integrity": "sha512-T64usCA275IUe4JngAqhStCaNe7NxVtnRjAZmX8y98Qipfc8BFOBpIqhx4czpdkKQmT6LhzyyzTxHsJ/PD1uYA==", + "version": "1.0.231", + "resolved": "https://registry.npmjs.org/@clevercanyon/dev-deps/-/dev-deps-1.0.231.tgz", + "integrity": "sha512-kBFLYotQ6JJDuWBKnBRi12VIQfyTi+L9/NeRE9O9PY/Yma/lR9nbWAo8tAE0XLjXjayZ9Oy6voCGq37sGwJrpA==", "cpu": [ "x64", "arm64" @@ -779,11 +779,11 @@ "linux" ], "dependencies": { - "@clevercanyon/madrun": "^1.0.98", - "@clevercanyon/utilities": "^1.0.265", - "@clevercanyon/utilities.cfp": "^1.0.93", - "@clevercanyon/utilities.node": "^1.0.105", - "@cloudflare/workers-types": "^4.20230914.0", + "@clevercanyon/madrun": "^1.0.99", + "@clevercanyon/utilities": "^1.0.271", + "@clevercanyon/utilities.cfp": "^1.0.94", + "@clevercanyon/utilities.node": "^1.0.107", + "@cloudflare/workers-types": "^4.20230922.0", "@eslint/js": "^8.48.0", "@iarna/toml": "^2.2.5", "@mdx-js/mdx": "^2.3.0", @@ -798,25 +798,25 @@ "@tailwindcss/forms": "^0.5.6", "@tailwindcss/typography": "^0.5.10", "@testing-library/preact": "^3.2.3", - "@types/archiver": "^5.3.2", + "@types/archiver": "^5.3.3", "@types/libsodium-wrappers": "^0.7.11", "@types/luxon": "^3.3.2", "@types/mdx": "^2.0.7", "@types/micromatch": "^4.0.2", - "@types/node": "^18.17.18", - "@types/semver": "^7.5.2", - "@types/yargs": "^17.0.24", - "@types/yargs-parser": "^21.0.0", + "@types/node": "^18.17.19", + "@types/semver": "^7.5.3", + "@types/yargs": "^17.0.25", + "@types/yargs-parser": "^21.0.1", "@typescript-eslint/eslint-plugin": "^5.62.0", "@typescript-eslint/parser": "^5.62.0", "@vitejs/plugin-basic-ssl": "^1.0.1", - "@vitest/browser": "^0.34.4", - "@vitest/coverage-v8": "^0.34.4", - "@vitest/ui": "^0.34.4", + "@vitest/browser": "^0.34.5", + "@vitest/coverage-v8": "^0.34.5", + "@vitest/ui": "^0.34.5", "browserslist-generator": "2.0.3", "dotenv": "^16.3.1", "dotenv-vault": "^1.25.0", - "eslint": "^8.49.0", + "eslint": "^8.50.0", "eslint-config-prettier": "^9.0.0", "eslint-plugin-jsx-a11y": "^6.7.1", "eslint-plugin-mdx": "^2.2.0", @@ -863,23 +863,23 @@ "vite": "^4.4.9", "vite-plugin-ejs": "^1.6.4", "vite-plugin-minify": "^1.5.2", - "vitest": "^0.34.4", + "vitest": "^0.34.5", "vitest-environment-miniflare": "^2.14.1", - "webdriverio": "^8.16.11", - "wrangler": "^3.9.0" + "webdriverio": "^8.16.12", + "wrangler": "^3.9.1" }, "engines": { - "node": "^19.1.0 || ^20.5.1", - "npm": "^8.19.3 || ^9.2.0" + "node": "^19.1.0 || ^20.5.0", + "npm": "^8.19.3 || ^9.8.0 || ^10.0.0" }, "funding": { "url": "https://github.com/sponsors/clevercanyon" } }, "node_modules/@clevercanyon/madrun": { - "version": "1.0.99", - "resolved": "https://registry.npmjs.org/@clevercanyon/madrun/-/madrun-1.0.99.tgz", - "integrity": "sha512-X32w6B1jO2Z0r2b48pk68WkAmhmYY6roZw0Brm81pTRjEX2GpJDoavSKWFUERmVe8Rja8ZsRtQGCiSx4EDm/lA==", + "version": "1.0.100", + "resolved": "https://registry.npmjs.org/@clevercanyon/madrun/-/madrun-1.0.100.tgz", + "integrity": "sha512-qHl/P1PActNdwwEJ8voCjMqPWkEcJPTTYJRt9engG1BFv6PAxx9zD+7y5I/8l98jJaP6bS0DFNT8Qs09CPNSjQ==", "cpu": [ "x64", "arm64" @@ -890,24 +890,24 @@ "linux" ], "dependencies": { - "@clevercanyon/utilities": "^1.0.265", - "@clevercanyon/utilities.node": "^1.0.105" + "@clevercanyon/utilities": "^1.0.277", + "@clevercanyon/utilities.node": "^1.0.108" }, "bin": { "madrun": "dist/bin/cli.js" }, "engines": { - "node": "^19.1.0 || ^20.5.1", - "npm": "^8.19.3 || ^9.2.0" + "node": "^19.1.0 || ^20.5.0", + "npm": "^8.19.3 || ^9.8.0 || ^10.0.0" }, "funding": { "url": "https://github.com/sponsors/clevercanyon" } }, "node_modules/@clevercanyon/preact-iso.fork": { - "version": "2.3.62", - "resolved": "https://registry.npmjs.org/@clevercanyon/preact-iso.fork/-/preact-iso.fork-2.3.62.tgz", - "integrity": "sha512-UniJdsCQSdq2XUfSlo0xdVhbz+Qsi2Nc3m8S8ebRFkiyILf2uvD9k1b8RYdEESQg1VjmWAMCdFEAeqNka7W5pQ==", + "version": "2.3.63", + "resolved": "https://registry.npmjs.org/@clevercanyon/preact-iso.fork/-/preact-iso.fork-2.3.63.tgz", + "integrity": "sha512-Oqk2NO5H9vLhDAY7HJIl1h3U6cgFuegclUrIMJq8U39JvHvvzMW1Irtmil0gYg1kk7n87Yr5KcfGON7VD9jDMA==", "cpu": [ "x64", "arm64" @@ -918,8 +918,8 @@ ], "peer": true, "engines": { - "node": "^19.1.0 || ^20.5.1", - "npm": "^8.19.3 || ^9.2.0" + "node": "^19.1.0 || ^20.5.0", + "npm": "^8.19.3 || ^9.8.0 || ^10.0.0" }, "funding": { "url": "https://github.com/sponsors/clevercanyon" @@ -952,9 +952,9 @@ } }, "node_modules/@clevercanyon/utilities": { - "version": "1.0.266", - "resolved": "https://registry.npmjs.org/@clevercanyon/utilities/-/utilities-1.0.266.tgz", - "integrity": "sha512-RPATjhaFjttgLlMYvx8D2e6D4S7DTzZj3xl12vLgrX59AMGmKb59+NStu4udW/OR3+89Z5tssIqXmgDyZhPCKA==", + "version": "1.0.277", + "resolved": "https://registry.npmjs.org/@clevercanyon/utilities/-/utilities-1.0.277.tgz", + "integrity": "sha512-d1IXhyl7O3iv8TwHfnFQRHfPCVCx1t+038X7a5MuUAwRgiVpUnzuL65J4B7UVILOVtPNFhb6Xn9s9mKXy+QCLw==", "cpu": [ "x64", "arm64" @@ -964,19 +964,19 @@ "linux" ], "engines": { - "node": "^19.1.0 || ^20.5.1", - "npm": "^8.19.3 || ^9.2.0" + "node": "^19.1.0 || ^20.5.0", + "npm": "^8.19.3 || ^9.8.0 || ^10.0.0" }, "funding": { "url": "https://github.com/sponsors/clevercanyon" }, "peerDependencies": { - "@clevercanyon/preact-iso.fork": "^2.3.62", - "fast-equals": "^4.0.3", + "@clevercanyon/preact-iso.fork": "^2.3.63", "ignore": "^5.2.4", + "ip-regex": "^5.0.0", "luxon": "^3.4.3", + "micro-memoize": "^4.1.2", "micromatch": "npm:@clevercanyon/micromatch.fork@^4.0.59", - "moize": "^6.1.6", "preact": "^10.17.1", "preact-render-to-string": "^6.2.1", "react": "npm:@preact/compat@^17.1.2", @@ -985,9 +985,9 @@ } }, "node_modules/@clevercanyon/utilities.cfp": { - "version": "1.0.93", - "resolved": "https://registry.npmjs.org/@clevercanyon/utilities.cfp/-/utilities.cfp-1.0.93.tgz", - "integrity": "sha512-ZOXk09Yq7HW1WDhXVbsbRwag7v7xCxPCgaXCZlvriEQdbua+rnTazrtQl9aQRYVQ2gi+3YPv55evoZ32riwN1w==", + "version": "1.0.94", + "resolved": "https://registry.npmjs.org/@clevercanyon/utilities.cfp/-/utilities.cfp-1.0.94.tgz", + "integrity": "sha512-SSQz5ad4jvNzyVXgkhB247dmd0A1lWTwQ8/xFwh1Ii8JeKTa4RcNaC73hfi8XkqdACRSpZR/Qv06TGgpv88g6A==", "cpu": [ "x64", "arm64" @@ -1005,15 +1005,15 @@ "url": "https://github.com/sponsors/clevercanyon" }, "peerDependencies": { - "@clevercanyon/utilities": "^1.0.265", - "@clevercanyon/utilities.cfw": "^1.0.102", - "@clevercanyon/utilities.web": "^1.0.72" + "@clevercanyon/utilities": "^1.0.266", + "@clevercanyon/utilities.cfw": "^1.0.103", + "@clevercanyon/utilities.web": "^1.0.73" } }, "node_modules/@clevercanyon/utilities.cfw": { - "version": "1.0.102", - "resolved": "https://registry.npmjs.org/@clevercanyon/utilities.cfw/-/utilities.cfw-1.0.102.tgz", - "integrity": "sha512-aAd3X8iczvIIyfPsWth7E2lN73Gq5oSpEY2ChJj8NzZZzykeZ1/eH3eqA88hFWyxFv9OndJMMtWmDLAF8gr5cw==", + "version": "1.0.103", + "resolved": "https://registry.npmjs.org/@clevercanyon/utilities.cfw/-/utilities.cfw-1.0.103.tgz", + "integrity": "sha512-ymEet3Gzpwzzav/sMA1GNUDOQU8KVBoQ6y2OswccAlRExVpz8rH+r5jP0lOJPcprRokCMHVUamWKQ1xiRWmbew==", "cpu": [ "x64", "arm64" @@ -1032,14 +1032,14 @@ "url": "https://github.com/sponsors/clevercanyon" }, "peerDependencies": { - "@clevercanyon/utilities": "^1.0.265", + "@clevercanyon/utilities": "^1.0.266", "@cloudflare/kv-asset-handler": "^0.2.0" } }, "node_modules/@clevercanyon/utilities.node": { - "version": "1.0.106", - "resolved": "https://registry.npmjs.org/@clevercanyon/utilities.node/-/utilities.node-1.0.106.tgz", - "integrity": "sha512-uQ/HwQe9uY1GA/X1U53OHDUM10QgtddvqkPEWVcBPzLat0iuYmuKQ/NZ9rncf4kZp1svGHbQgL9WL1+RzKfWDA==", + "version": "1.0.108", + "resolved": "https://registry.npmjs.org/@clevercanyon/utilities.node/-/utilities.node-1.0.108.tgz", + "integrity": "sha512-+mBRJMEnQRcGVpZWrq35lpIMaFd8MfOCGPf0HPqjLArQn8o3z1hY3QQc9NzV4NcNoOXX8S+GEivwirSBKEccCA==", "cpu": [ "x64", "arm64" @@ -1050,15 +1050,15 @@ "linux" ], "engines": { - "node": "^19.1.0 || ^20.5.1", - "npm": "^8.19.3 || ^9.2.0" + "node": "^19.1.0 || ^20.5.0", + "npm": "^8.19.3 || ^9.8.0 || ^10.0.0" }, "funding": { "url": "https://github.com/sponsors/clevercanyon" }, "peerDependencies": { "@clevercanyon/split-cmd.fork": "^1.0.57", - "@clevercanyon/utilities": "^1.0.266", + "@clevercanyon/utilities": "^1.0.277", "archiver": "^5.3.2", "boxen": "^7.1.1", "chalk": "^5.3.0", @@ -1075,9 +1075,9 @@ } }, "node_modules/@clevercanyon/utilities.web": { - "version": "1.0.73", - "resolved": "https://registry.npmjs.org/@clevercanyon/utilities.web/-/utilities.web-1.0.73.tgz", - "integrity": "sha512-fHN4iVKNgfJz+E0jz3PuMpwNVv1XnpfOL/N01Qz2RD+ul0rnkCGJ/+Wv0RTxrFQFjax6y7UGayULjt0JVGNfOQ==", + "version": "1.0.74", + "resolved": "https://registry.npmjs.org/@clevercanyon/utilities.web/-/utilities.web-1.0.74.tgz", + "integrity": "sha512-J1GTv0K1J9lGUEM4IuQB/NJi8y/6F2ZMLMQbHMnhIqVNvIbCAcWTJkZShGTRuA55W6YtxVU/D4JwRaeIZpmykA==", "cpu": [ "x64", "arm64" @@ -1096,7 +1096,7 @@ "url": "https://github.com/sponsors/clevercanyon" }, "peerDependencies": { - "@clevercanyon/utilities": "^1.0.265" + "@clevercanyon/utilities": "^1.0.266" } }, "node_modules/@cloudflare/kv-asset-handler": { @@ -1108,9 +1108,9 @@ } }, "node_modules/@cloudflare/workerd-darwin-64": { - "version": "1.20230904.0", - "resolved": "https://registry.npmjs.org/@cloudflare/workerd-darwin-64/-/workerd-darwin-64-1.20230904.0.tgz", - "integrity": "sha512-/GDlmxAFbDtrQwP4zOXFbqOfaPvkDxdsCoEa+KEBcAl5uR98+7WW5/b8naBHX+t26uS7p4bLlImM8J5F1ienRQ==", + "version": "1.20230922.0", + "resolved": "https://registry.npmjs.org/@cloudflare/workerd-darwin-64/-/workerd-darwin-64-1.20230922.0.tgz", + "integrity": "sha512-g1hkVhLna0ICfg1l4iYOTAlfvqzZ4RD/wu5yYFaEOVwA9HlKcB9axmQxCSmeHTHfC763RqXdfBFVgBabp0SK+A==", "cpu": [ "x64" ], @@ -1124,9 +1124,9 @@ } }, "node_modules/@cloudflare/workerd-darwin-arm64": { - "version": "1.20230904.0", - "resolved": "https://registry.npmjs.org/@cloudflare/workerd-darwin-arm64/-/workerd-darwin-arm64-1.20230904.0.tgz", - "integrity": "sha512-x8WXNc2xnDqr5y1iirnNdyx8GZY3rL5xiF7ebK3mKQeB+jFjkhO71yuPTkDCzUWtOvw1Wfd4jbwy4wxacMX4mQ==", + "version": "1.20230922.0", + "resolved": "https://registry.npmjs.org/@cloudflare/workerd-darwin-arm64/-/workerd-darwin-arm64-1.20230922.0.tgz", + "integrity": "sha512-FMPN7VO6tG3DWUw4XLTB3bL/UKIo0P2aghXC6BG6QxdzLqPMxXWRRfLahdFYc3uPz0ehqrZaQR5Wybck7b9Bdg==", "cpu": [ "arm64" ], @@ -1140,9 +1140,9 @@ } }, "node_modules/@cloudflare/workerd-linux-64": { - "version": "1.20230904.0", - "resolved": "https://registry.npmjs.org/@cloudflare/workerd-linux-64/-/workerd-linux-64-1.20230904.0.tgz", - "integrity": "sha512-V58xyMS3oDpKO8Dpdh0r0BXm99OzoGgvWe9ufttVraj/1NTMGELwb6i9ySb8k3F1J9m/sO26+TV7pQc/bGC1VQ==", + "version": "1.20230922.0", + "resolved": "https://registry.npmjs.org/@cloudflare/workerd-linux-64/-/workerd-linux-64-1.20230922.0.tgz", + "integrity": "sha512-EDRdGVgOdd14jt2LJHne3CueUvjnH6lnpAtETj0Ce0SkbdW27GY/YARtcGcPBGO1AKrEnXvMdnvV6EVYp1Yl/w==", "cpu": [ "x64" ], @@ -1156,9 +1156,9 @@ } }, "node_modules/@cloudflare/workerd-linux-arm64": { - "version": "1.20230904.0", - "resolved": "https://registry.npmjs.org/@cloudflare/workerd-linux-arm64/-/workerd-linux-arm64-1.20230904.0.tgz", - "integrity": "sha512-VrDaW+pjb5IAKEnNWtEaFiG377kXKmk5Fu0Era4W+jKzPON2BW/qRb/4LNHXQ4yxg/2HLm7RiUTn7JZtt1qO6A==", + "version": "1.20230922.0", + "resolved": "https://registry.npmjs.org/@cloudflare/workerd-linux-arm64/-/workerd-linux-arm64-1.20230922.0.tgz", + "integrity": "sha512-QDf3JqRDwnxdCFni/bLWElJowf5xNmk1h2n4nBB30k1lvcfFiQ0HXgbBMhs2W/x/VUUT2j+hAoIGmvkSNlIj4w==", "cpu": [ "arm64" ], @@ -1172,9 +1172,9 @@ } }, "node_modules/@cloudflare/workerd-windows-64": { - "version": "1.20230904.0", - "resolved": "https://registry.npmjs.org/@cloudflare/workerd-windows-64/-/workerd-windows-64-1.20230904.0.tgz", - "integrity": "sha512-/R/dE8uy+8J2YeXfDhI8/Bg7YUirdbbjH5/l/Vv00ZRE0lC3nPLcYeyBXSwXIQ6/Xht3gN+lksLQgKd0ZWRd+Q==", + "version": "1.20230922.0", + "resolved": "https://registry.npmjs.org/@cloudflare/workerd-windows-64/-/workerd-windows-64-1.20230922.0.tgz", + "integrity": "sha512-Tzoq64YMcHjXRheGyWKHNAfklHS9Us2M1lNZ/6y6ziNB0tF06RNRuD5yRhH1LulSOMxVH/KQAqZ0pNEpt3XyPQ==", "cpu": [ "x64" ], @@ -1188,9 +1188,9 @@ } }, "node_modules/@cloudflare/workers-types": { - "version": "4.20230914.0", - "resolved": "https://registry.npmjs.org/@cloudflare/workers-types/-/workers-types-4.20230914.0.tgz", - "integrity": "sha512-OVeN4lFVu1O0PJGZ2d0FwpK8lelFcr33qYOgCh77ErEYmEBO4adwnIxcIsdQbFbhF0ffN6joiVcljD4zakdaeQ==", + "version": "4.20230922.0", + "resolved": "https://registry.npmjs.org/@cloudflare/workers-types/-/workers-types-4.20230922.0.tgz", + "integrity": "sha512-0N3fg4uv9pS7PXMVYmEmEGs1P1yzMIsqym0sO//o2IjtZhsf7RwOozJtdazDAL0fBIWsl1PRX7BmKe92RV+5qw==", "dev": true }, "node_modules/@cspotcode/source-map-support": { @@ -1216,9 +1216,9 @@ } }, "node_modules/@csstools/cascade-layer-name-parser": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@csstools/cascade-layer-name-parser/-/cascade-layer-name-parser-1.0.4.tgz", - "integrity": "sha512-zXMGsJetbLoXe+gjEES07MEGjL0Uy3hMxmnGtVBrRpVKr5KV9OgCB09zr/vLrsEtoVQTgJFewxaU8IYSAE4tjg==", + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@csstools/cascade-layer-name-parser/-/cascade-layer-name-parser-1.0.5.tgz", + "integrity": "sha512-v/5ODKNBMfBl0us/WQjlfsvSlYxfZLhNMVIsuCPib2ulTwGKYbKJbwqw671+qH9Y4wvWVnu7LBChvml/wBKjFg==", "dev": true, "funding": [ { @@ -1234,8 +1234,8 @@ "node": "^14 || ^16 || >=18" }, "peerDependencies": { - "@csstools/css-parser-algorithms": "^2.3.1", - "@csstools/css-tokenizer": "^2.2.0" + "@csstools/css-parser-algorithms": "^2.3.2", + "@csstools/css-tokenizer": "^2.2.1" } }, "node_modules/@csstools/color-helpers": { @@ -1258,9 +1258,9 @@ } }, "node_modules/@csstools/css-calc": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/@csstools/css-calc/-/css-calc-1.1.3.tgz", - "integrity": "sha512-7mJZ8gGRtSQfQKBQFi5N0Z+jzNC0q8bIkwojP1W0w+APzEqHu5wJoGVsvKxVnVklu9F8tW1PikbBRseYnAdv+g==", + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/@csstools/css-calc/-/css-calc-1.1.4.tgz", + "integrity": "sha512-ZV1TSmToiNcQL1P3hfzlzZzA02mmVkVmXGaUDUqpYUG84PmLhVSZpKX+KfxAuOcK7de04UXSQPBrAvaya6iiGg==", "dev": true, "funding": [ { @@ -1276,14 +1276,14 @@ "node": "^14 || ^16 || >=18" }, "peerDependencies": { - "@csstools/css-parser-algorithms": "^2.3.1", - "@csstools/css-tokenizer": "^2.2.0" + "@csstools/css-parser-algorithms": "^2.3.2", + "@csstools/css-tokenizer": "^2.2.1" } }, "node_modules/@csstools/css-color-parser": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/@csstools/css-color-parser/-/css-color-parser-1.3.1.tgz", - "integrity": "sha512-cehc/DQCyb4hL4fspvyL7WiY+uAy8Iuaz0yTyndC/AyBmxkNpgtSgCSsr0aR4vkaSFVZfNNVlKbjHFwOsPGB1Q==", + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/@csstools/css-color-parser/-/css-color-parser-1.3.2.tgz", + "integrity": "sha512-YLCWI+nm18qr5nj7QhRMGuIi4ddFe0SKEtPQliLf1+pmyHFxoHYd0+Hg+bRnbnVbdyCTTlCqBiUvCeNJfd903g==", "dev": true, "funding": [ { @@ -1297,20 +1297,20 @@ ], "dependencies": { "@csstools/color-helpers": "^3.0.2", - "@csstools/css-calc": "^1.1.3" + "@csstools/css-calc": "^1.1.4" }, "engines": { "node": "^14 || ^16 || >=18" }, "peerDependencies": { - "@csstools/css-parser-algorithms": "^2.3.1", - "@csstools/css-tokenizer": "^2.2.0" + "@csstools/css-parser-algorithms": "^2.3.2", + "@csstools/css-tokenizer": "^2.2.1" } }, "node_modules/@csstools/css-parser-algorithms": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/@csstools/css-parser-algorithms/-/css-parser-algorithms-2.3.1.tgz", - "integrity": "sha512-xrvsmVUtefWMWQsGgFffqWSK03pZ1vfDki4IVIIUxxDKnGBzqNgv0A7SB1oXtVNEkcVO8xi1ZrTL29HhSu5kGA==", + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/@csstools/css-parser-algorithms/-/css-parser-algorithms-2.3.2.tgz", + "integrity": "sha512-sLYGdAdEY2x7TSw9FtmdaTrh2wFtRJO5VMbBrA8tEqEod7GEggFmxTSK9XqExib3yMuYNcvcTdCZIP6ukdjAIA==", "dev": true, "funding": [ { @@ -1326,13 +1326,13 @@ "node": "^14 || ^16 || >=18" }, "peerDependencies": { - "@csstools/css-tokenizer": "^2.2.0" + "@csstools/css-tokenizer": "^2.2.1" } }, "node_modules/@csstools/css-tokenizer": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@csstools/css-tokenizer/-/css-tokenizer-2.2.0.tgz", - "integrity": "sha512-wErmsWCbsmig8sQKkM6pFhr/oPha1bHfvxsUY5CYSQxwyhA9Ulrs8EqCgClhg4Tgg2XapVstGqSVcz0xOYizZA==", + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/@csstools/css-tokenizer/-/css-tokenizer-2.2.1.tgz", + "integrity": "sha512-Zmsf2f/CaEPWEVgw29odOj+WEVoiJy9s9NOv5GgNY9mZ1CZ7394By6wONrONrTsnNDv6F9hR02nvFihrGVGHBg==", "dev": true, "funding": [ { @@ -1349,9 +1349,9 @@ } }, "node_modules/@csstools/media-query-list-parser": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/@csstools/media-query-list-parser/-/media-query-list-parser-2.1.4.tgz", - "integrity": "sha512-V/OUXYX91tAC1CDsiY+HotIcJR+vPtzrX8pCplCpT++i8ThZZsq5F5dzZh/bDM3WUOjrvC1ljed1oSJxMfjqhw==", + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@csstools/media-query-list-parser/-/media-query-list-parser-2.1.5.tgz", + "integrity": "sha512-IxVBdYzR8pYe89JiyXQuYk4aVVoCPhMJkz6ElRwlVysjwURTsTk/bmY/z4FfeRE+CRBMlykPwXEVUg8lThv7AQ==", "dev": true, "funding": [ { @@ -1367,8 +1367,8 @@ "node": "^14 || ^16 || >=18" }, "peerDependencies": { - "@csstools/css-parser-algorithms": "^2.3.1", - "@csstools/css-tokenizer": "^2.2.0" + "@csstools/css-parser-algorithms": "^2.3.2", + "@csstools/css-tokenizer": "^2.2.1" } }, "node_modules/@csstools/postcss-cascade-layers": { @@ -1433,9 +1433,9 @@ } }, "node_modules/@csstools/postcss-color-function": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@csstools/postcss-color-function/-/postcss-color-function-3.0.4.tgz", - "integrity": "sha512-ZLi+nSb/u1Tt+zxB8MGE2rOkX7YhWGxM3pBQRz9nn8DIAKT84GkaeHGyVrxwCPBVdko/4nwqApC7YCeqgZxTAw==", + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@csstools/postcss-color-function/-/postcss-color-function-3.0.5.tgz", + "integrity": "sha512-q9E7oJwf1Z8nJqQbob9DmFxrte3RQc+pwV+5WlWw6Ei9XaObaNJlPAQ1HfOpcEg/fxrRf/Yf6fgO8Q01r7u17A==", "dev": true, "funding": [ { @@ -1448,9 +1448,9 @@ } ], "dependencies": { - "@csstools/css-color-parser": "^1.3.1", - "@csstools/css-parser-algorithms": "^2.3.1", - "@csstools/css-tokenizer": "^2.2.0", + "@csstools/css-color-parser": "^1.3.2", + "@csstools/css-parser-algorithms": "^2.3.2", + "@csstools/css-tokenizer": "^2.2.1", "@csstools/postcss-progressive-custom-properties": "^3.0.1" }, "engines": { @@ -1461,9 +1461,9 @@ } }, "node_modules/@csstools/postcss-color-mix-function": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@csstools/postcss-color-mix-function/-/postcss-color-mix-function-2.0.4.tgz", - "integrity": "sha512-EiMi+BkzMLQAz7Z2gak7Gs3XjY1Z7QyJ8yjj1DdogpVc3FBqtxDQn/co4LluZdMda0894XcIpdikH6sCOpRd5w==", + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@csstools/postcss-color-mix-function/-/postcss-color-mix-function-2.0.5.tgz", + "integrity": "sha512-0MDBTG0FPDjNlAYMImNjnQ9lrldiFRCmsBx4dZB1ikbFwt6aYJRWDjgXoZY+1CmQ6m1qPeBJO762i6AKwQDlQQ==", "dev": true, "funding": [ { @@ -1476,9 +1476,9 @@ } ], "dependencies": { - "@csstools/css-color-parser": "^1.3.1", - "@csstools/css-parser-algorithms": "^2.3.1", - "@csstools/css-tokenizer": "^2.2.0", + "@csstools/css-color-parser": "^1.3.2", + "@csstools/css-parser-algorithms": "^2.3.2", + "@csstools/css-tokenizer": "^2.2.1", "@csstools/postcss-progressive-custom-properties": "^3.0.1" }, "engines": { @@ -1489,9 +1489,9 @@ } }, "node_modules/@csstools/postcss-exponential-functions": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@csstools/postcss-exponential-functions/-/postcss-exponential-functions-1.0.0.tgz", - "integrity": "sha512-FPndJ/7oGlML7/4EhLi902wGOukO0Nn37PjwOQGc0BhhjQPy3np3By4d3M8s9Cfmp9EHEKgUHRN2DQ5HLT/hTw==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@csstools/postcss-exponential-functions/-/postcss-exponential-functions-1.0.1.tgz", + "integrity": "sha512-ZLK2iSK4DUxeypGce2PnQSdYugUqDTwxnhNiq1o6OyKMNYgYs4eKbvEhFG8JKr1sJWbeqBi5jRr0017l2EWVvg==", "dev": true, "funding": [ { @@ -1504,9 +1504,9 @@ } ], "dependencies": { - "@csstools/css-calc": "^1.1.3", - "@csstools/css-parser-algorithms": "^2.3.1", - "@csstools/css-tokenizer": "^2.2.0" + "@csstools/css-calc": "^1.1.4", + "@csstools/css-parser-algorithms": "^2.3.2", + "@csstools/css-tokenizer": "^2.2.1" }, "engines": { "node": "^14 || ^16 || >=18" @@ -1541,9 +1541,9 @@ } }, "node_modules/@csstools/postcss-gradients-interpolation-method": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/@csstools/postcss-gradients-interpolation-method/-/postcss-gradients-interpolation-method-4.0.4.tgz", - "integrity": "sha512-JEQ+DqfltCLjzr/gAC9/DLxgjYXHrrDlgtiyhxqZOVpRQaLpJiCxNiKoEJFAPFXH5lbfwxvd4fwFDbCrAArIqA==", + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/@csstools/postcss-gradients-interpolation-method/-/postcss-gradients-interpolation-method-4.0.5.tgz", + "integrity": "sha512-ABDOADpKrTvNb+cUBj9ciocCgFvE832eENKVuONca1u2bkFL4jM9430XFmi/GOgzt0agg5Q8FFJHXgYyKbgOFQ==", "dev": true, "funding": [ { @@ -1556,9 +1556,9 @@ } ], "dependencies": { - "@csstools/css-color-parser": "^1.3.1", - "@csstools/css-parser-algorithms": "^2.3.1", - "@csstools/css-tokenizer": "^2.2.0", + "@csstools/css-color-parser": "^1.3.2", + "@csstools/css-parser-algorithms": "^2.3.2", + "@csstools/css-tokenizer": "^2.2.1", "@csstools/postcss-progressive-custom-properties": "^3.0.1" }, "engines": { @@ -1569,9 +1569,9 @@ } }, "node_modules/@csstools/postcss-hwb-function": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@csstools/postcss-hwb-function/-/postcss-hwb-function-3.0.3.tgz", - "integrity": "sha512-2TqrRD8JzSwQCRKKNc9BFhSEmsz+mR3RtwSw5mQSGILC+LIYCVWeYwC33cI+saFWv0DGZ0NXLx5VSX2tdJyU6w==", + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@csstools/postcss-hwb-function/-/postcss-hwb-function-3.0.4.tgz", + "integrity": "sha512-HxyOVYowL0wsz7BjlAyGu3ydPGliXHgVnXP4pOWFktkAaBvjks8S51NqMbR6AkBQHB9W4nt9KW2qB6Qt2PJ80A==", "dev": true, "funding": [ { @@ -1584,9 +1584,9 @@ } ], "dependencies": { - "@csstools/css-color-parser": "^1.3.1", - "@csstools/css-parser-algorithms": "^2.3.1", - "@csstools/css-tokenizer": "^2.2.0" + "@csstools/css-color-parser": "^1.3.2", + "@csstools/css-parser-algorithms": "^2.3.2", + "@csstools/css-tokenizer": "^2.2.1" }, "engines": { "node": "^14 || ^16 || >=18" @@ -1752,9 +1752,9 @@ } }, "node_modules/@csstools/postcss-logical-viewport-units": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@csstools/postcss-logical-viewport-units/-/postcss-logical-viewport-units-2.0.2.tgz", - "integrity": "sha512-g/QKzESt59SB+08kE3onn8obaqu56TtBg4K03hvsWLrNFoXbkuR6lhooaMyrRwH4f3KP08VnqsHqEtcm7ji87g==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@csstools/postcss-logical-viewport-units/-/postcss-logical-viewport-units-2.0.3.tgz", + "integrity": "sha512-xeVxqND5rlQyqLGdH7rX34sIm/JbbQKxpKQP8oD1YQqUHHCLQR9NUS57WqJKajxKN6AcNAMWJhb5LUH5RfPcyA==", "dev": true, "funding": [ { @@ -1767,7 +1767,7 @@ } ], "dependencies": { - "@csstools/css-tokenizer": "^2.2.0" + "@csstools/css-tokenizer": "^2.2.1" }, "engines": { "node": "^14 || ^16 || >=18" @@ -1777,9 +1777,9 @@ } }, "node_modules/@csstools/postcss-media-minmax": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/@csstools/postcss-media-minmax/-/postcss-media-minmax-1.0.7.tgz", - "integrity": "sha512-5LGLdu8cJgRPmvkjUNqOPKIKeHbyQmoGKooB5Rh0mp5mLaNI9bl+IjFZ2keY0cztZYsriJsGf6Lu8R5XetuwoQ==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@csstools/postcss-media-minmax/-/postcss-media-minmax-1.1.0.tgz", + "integrity": "sha512-t5Li/DPC5QmW/6VFLfUvsw/4dNYYseWR0tOXDeJg/9EKUodBgNawz5tuk5vYKtNvoj+Q08odMuXcpS5YJj0AFA==", "dev": true, "funding": [ { @@ -1792,10 +1792,10 @@ } ], "dependencies": { - "@csstools/css-calc": "^1.1.3", - "@csstools/css-parser-algorithms": "^2.3.1", - "@csstools/css-tokenizer": "^2.2.0", - "@csstools/media-query-list-parser": "^2.1.4" + "@csstools/css-calc": "^1.1.4", + "@csstools/css-parser-algorithms": "^2.3.2", + "@csstools/css-tokenizer": "^2.2.1", + "@csstools/media-query-list-parser": "^2.1.5" }, "engines": { "node": "^14 || ^16 || >=18" @@ -1805,9 +1805,9 @@ } }, "node_modules/@csstools/postcss-media-queries-aspect-ratio-number-values": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@csstools/postcss-media-queries-aspect-ratio-number-values/-/postcss-media-queries-aspect-ratio-number-values-2.0.2.tgz", - "integrity": "sha512-kQJR6NvTRidsaRjCdHGjra2+fLoFiDQOm5B2aZrhmXqng/hweXjruboKzB326rxQO2L0m0T+gCKbZgyuncyhLg==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@csstools/postcss-media-queries-aspect-ratio-number-values/-/postcss-media-queries-aspect-ratio-number-values-2.0.3.tgz", + "integrity": "sha512-IPL8AvnwMYW+cWtp+j8cW3MFN0RyXNT4hLOvs6Rf2N+NcbvXhSyKxZuE3W9Cv4KjaNoNoGx1d0UhT6tktq6tUw==", "dev": true, "funding": [ { @@ -1820,9 +1820,9 @@ } ], "dependencies": { - "@csstools/css-parser-algorithms": "^2.3.1", - "@csstools/css-tokenizer": "^2.2.0", - "@csstools/media-query-list-parser": "^2.1.4" + "@csstools/css-parser-algorithms": "^2.3.2", + "@csstools/css-tokenizer": "^2.2.1", + "@csstools/media-query-list-parser": "^2.1.5" }, "engines": { "node": "^14 || ^16 || >=18" @@ -1882,9 +1882,9 @@ } }, "node_modules/@csstools/postcss-oklab-function": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@csstools/postcss-oklab-function/-/postcss-oklab-function-3.0.4.tgz", - "integrity": "sha512-uofu4uIhwExcFGVy1LckgWU4opiWWEEKYw528ejAXzQwYsyyPflOm7VaXc61SJlqqlqOl/go2Ty3IehW5sMC9Q==", + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@csstools/postcss-oklab-function/-/postcss-oklab-function-3.0.5.tgz", + "integrity": "sha512-tFjYaBbAvoks5yvE9uA3b3xsqVKkZJ2sXwPMw1bxlv2ydrmdiojuoRAskRfvMbZQkzp47DzBP1V9GhDLOyFVYA==", "dev": true, "funding": [ { @@ -1897,9 +1897,9 @@ } ], "dependencies": { - "@csstools/css-color-parser": "^1.3.1", - "@csstools/css-parser-algorithms": "^2.3.1", - "@csstools/css-tokenizer": "^2.2.0", + "@csstools/css-color-parser": "^1.3.2", + "@csstools/css-parser-algorithms": "^2.3.2", + "@csstools/css-tokenizer": "^2.2.1", "@csstools/postcss-progressive-custom-properties": "^3.0.1" }, "engines": { @@ -1935,9 +1935,9 @@ } }, "node_modules/@csstools/postcss-relative-color-syntax": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@csstools/postcss-relative-color-syntax/-/postcss-relative-color-syntax-2.0.4.tgz", - "integrity": "sha512-DxR30Tzpm0RzFlvG6R1jDDPnK6VMDJDatfHtaN+HcFV0L/wI0+jCSmaDQxFYrdTHa91zKVc36JgVg9C8hbJ2CQ==", + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@csstools/postcss-relative-color-syntax/-/postcss-relative-color-syntax-2.0.5.tgz", + "integrity": "sha512-wK8IX6X2+kLKxTTTq5yd7mH2U+GPcTMTpP2rM8ig0/rgxuid7vgTOxup6heZUk1IUA409eak3bYGOtDDYCpxbQ==", "dev": true, "funding": [ { @@ -1950,9 +1950,9 @@ } ], "dependencies": { - "@csstools/css-color-parser": "^1.3.1", - "@csstools/css-parser-algorithms": "^2.3.1", - "@csstools/css-tokenizer": "^2.2.0", + "@csstools/css-color-parser": "^1.3.2", + "@csstools/css-parser-algorithms": "^2.3.2", + "@csstools/css-tokenizer": "^2.2.1", "@csstools/postcss-progressive-custom-properties": "^3.0.1" }, "engines": { @@ -2001,9 +2001,9 @@ } }, "node_modules/@csstools/postcss-stepped-value-functions": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@csstools/postcss-stepped-value-functions/-/postcss-stepped-value-functions-3.0.1.tgz", - "integrity": "sha512-y1sykToXorFE+5cjtp//xAMWEAEple0kcZn2QhzEFIZDDNvGOCp5JvvmmPGsC3eDlj6yQp70l9uXZNLnimEYfA==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@csstools/postcss-stepped-value-functions/-/postcss-stepped-value-functions-3.0.2.tgz", + "integrity": "sha512-I3wX44MZVv+tDuWfrd3BTvRB/YRIM2F5v1MBtTI89sxpFn47mNpTwpPYUOGPVCgKlRDfZSlxIUYhUQmqRQZZFQ==", "dev": true, "funding": [ { @@ -2016,9 +2016,9 @@ } ], "dependencies": { - "@csstools/css-calc": "^1.1.3", - "@csstools/css-parser-algorithms": "^2.3.1", - "@csstools/css-tokenizer": "^2.2.0" + "@csstools/css-calc": "^1.1.4", + "@csstools/css-parser-algorithms": "^2.3.2", + "@csstools/css-tokenizer": "^2.2.1" }, "engines": { "node": "^14 || ^16 || >=18" @@ -2054,9 +2054,9 @@ } }, "node_modules/@csstools/postcss-trigonometric-functions": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@csstools/postcss-trigonometric-functions/-/postcss-trigonometric-functions-3.0.1.tgz", - "integrity": "sha512-hW+JPv0MPQfWC1KARgvJI6bisEUFAZWSvUNq/khGCupYV/h6Z9R2ZFz0Xc633LXBst0ezbXpy7NpnPurSx5Klw==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@csstools/postcss-trigonometric-functions/-/postcss-trigonometric-functions-3.0.2.tgz", + "integrity": "sha512-AwzNhF4QOKaLOKvMljwwFkeYXwufhRO15G+kKohHkyoNOL75xWkN+W2Y9ik9tSeAyDv+cYNlYaF+o/a79WjVjg==", "dev": true, "funding": [ { @@ -2069,9 +2069,9 @@ } ], "dependencies": { - "@csstools/css-calc": "^1.1.3", - "@csstools/css-parser-algorithms": "^2.3.1", - "@csstools/css-tokenizer": "^2.2.0" + "@csstools/css-calc": "^1.1.4", + "@csstools/css-parser-algorithms": "^2.3.2", + "@csstools/css-tokenizer": "^2.2.1" }, "engines": { "node": "^14 || ^16 || >=18" @@ -2298,9 +2298,9 @@ } }, "node_modules/@esbuild/linux-loong64": { - "version": "0.14.54", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.14.54.tgz", - "integrity": "sha512-bZBrLAIX1kpWelV0XemxBZllyRmM6vgFQQG2GdNb+r3Fkp0FOh1NJSvekXDs7jq70k4euu1cryLMfU+mTXlEpw==", + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.18.20.tgz", + "integrity": "sha512-nXW8nqBTrOpDLPgPY9uV+/1DjxoQ7DoB2N8eocyq8I9XuqJ7BiAMDMf9n1xZM9TgW0J8zrquIb/A7s3BJv7rjg==", "cpu": [ "loong64" ], @@ -2505,9 +2505,9 @@ } }, "node_modules/@eslint-community/regexpp": { - "version": "4.8.1", - "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.8.1.tgz", - "integrity": "sha512-PWiOzLIUAjN/w5K17PoF4n6sKBw0gqLHPhywmYHP4t1VFQQVYeb1yWsJwnMVEMl3tUHME7X/SJPZLmtG7XBDxQ==", + "version": "4.9.0", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.9.0.tgz", + "integrity": "sha512-zJmuCWj2VLBt4c25CfBIbMZLGLyhkvs7LznyVX5HfpzeocThgIj5XQK4L+g3U36mMcx8bPMhGyPpwCATamC4jQ==", "dev": true, "engines": { "node": "^12.0.0 || ^14.0.0 || >=16.0.0" @@ -2555,9 +2555,9 @@ } }, "node_modules/@eslint/js": { - "version": "8.49.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.49.0.tgz", - "integrity": "sha512-1S8uAY/MTJqVx0SC4epBq+N2yhuwtNwLbJYNZyhL2pO1ZVKn5HFXav5T41Ryzy9K9V7ZId2JB2oy/W4aCd9/2w==", + "version": "8.50.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.50.0.tgz", + "integrity": "sha512-NCC3zz2+nvYd+Ckfh87rA47zfu2QsQpvc6k1yzTk+b9KzRj0wkGa8LSoGOXN6Zv4lRf/EIoZ80biDh9HOI+RNQ==", "dev": true, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" @@ -3189,12 +3189,6 @@ "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/@jest/transform/node_modules/convert-source-map": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", - "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", - "dev": true - }, "node_modules/@jest/transform/node_modules/slash": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", @@ -3320,15 +3314,15 @@ } }, "node_modules/@jspm/core": { - "version": "2.0.0-beta.24", - "resolved": "https://registry.npmjs.org/@jspm/core/-/core-2.0.0-beta.24.tgz", - "integrity": "sha512-a4Bo/80Z6CoJNor5ldgs6002utmmbttP4JYd/FJ0Ob2fVdf6O6ha5SORBCqrnDnBvMc1TlrHY7dCfat5+H0a6A==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@jspm/core/-/core-2.0.1.tgz", + "integrity": "sha512-Lg3PnLp0QXpxwLIAuuJboLeRaIhrgJjeuh797QADg3xz8wGLugQOS5DpsE8A6i6Adgzf+bacllkKZG3J0tGfDw==", "dev": true }, "node_modules/@mdn/browser-compat-data": { - "version": "5.3.17", - "resolved": "https://registry.npmjs.org/@mdn/browser-compat-data/-/browser-compat-data-5.3.17.tgz", - "integrity": "sha512-XoQWMIFRcg1U6ac7GDmqpWvJ1wkAKp5UwHh2rHzQgwaACVMcC4yWa4lW0HekGcNsvpD5e8OX+trAcEt8N+0Dsg==", + "version": "5.3.19", + "resolved": "https://registry.npmjs.org/@mdn/browser-compat-data/-/browser-compat-data-5.3.19.tgz", + "integrity": "sha512-3k0I0sqa9vyO1z687O4hfoeXnTIf68WI0UBksBj0GPbXdNrOA4VOntP08jtvuaTG7yYHRVXSyoA9xRWxSGv3mw==", "dev": true }, "node_modules/@mdx-js/mdx": { @@ -3749,19 +3743,19 @@ } }, "node_modules/@npmcli/map-workspaces/node_modules/glob": { - "version": "10.3.5", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.5.tgz", - "integrity": "sha512-bYUpUD7XDEHI4Q2O5a7PXGvyw4deKR70kHiDxzQbe925wbZknhOzUt2xBgTkYL6RBcVeXYuD9iNYeqoWbBZQnA==", + "version": "10.3.10", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.10.tgz", + "integrity": "sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==", "dev": true, "dependencies": { "foreground-child": "^3.1.0", - "jackspeak": "^2.0.3", + "jackspeak": "^2.3.5", "minimatch": "^9.0.1", "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0", "path-scurry": "^1.10.1" }, "bin": { - "glob": "dist/cjs/src/bin.js" + "glob": "dist/esm/bin.mjs" }, "engines": { "node": ">=16 || 14 >=14.17" @@ -4656,9 +4650,9 @@ } }, "node_modules/@octokit/openapi-types": { - "version": "18.0.0", - "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-18.0.0.tgz", - "integrity": "sha512-V8GImKs3TeQRxRtXFpG2wl19V7444NIOTDF24AWuIbmNaNYOQMWRbjcGDXV5B+0n887fgDcuMNOmlul+k+oJtw==", + "version": "18.1.1", + "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-18.1.1.tgz", + "integrity": "sha512-VRaeH8nCDtF5aXWnjPuEMIYf1itK/s3JYyJcWFJT8X9pSNnBtriDf7wlEWsGuhPLl4QIH4xM8fqTXDwJ3Mu6sw==", "dev": true }, "node_modules/@octokit/plugin-paginate-rest": { @@ -5154,18 +5148,18 @@ } }, "node_modules/@types/archiver": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/@types/archiver/-/archiver-5.3.2.tgz", - "integrity": "sha512-IctHreBuWE5dvBDz/0WeKtyVKVRs4h75IblxOACL92wU66v+HGAfEYAOyXkOFphvRJMhuXdI9huDXpX0FC6lCw==", + "version": "5.3.3", + "resolved": "https://registry.npmjs.org/@types/archiver/-/archiver-5.3.3.tgz", + "integrity": "sha512-0ABdVcXL6jOwNGY+hjWPqrxUvKelBEwNLcuv/SV2vZ4YCH8w9NttFCt+/QqI5zgMX+iX/XqVy89/r7EmLJmMpQ==", "dev": true, "dependencies": { "@types/readdir-glob": "*" } }, "node_modules/@types/aria-query": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/@types/aria-query/-/aria-query-5.0.1.tgz", - "integrity": "sha512-XTIieEY+gvJ39ChLcB4If5zHtPxt3Syj5rgZR+e1ctpmK8NjPf0zFqsz4JpLJT0xla9GFDKjy8Cpu331nrmE1Q==", + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/@types/aria-query/-/aria-query-5.0.2.tgz", + "integrity": "sha512-PHKZuMN+K5qgKIWhBodXzQslTo5P+K/6LqeKXS6O/4liIDdZqaX5RXrCK++LAw+y/nptN48YmUMFiQHRSWYwtQ==", "dev": true }, "node_modules/@types/babel__core": { @@ -5270,9 +5264,9 @@ } }, "node_modules/@types/d3-scale": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/@types/d3-scale/-/d3-scale-4.0.4.tgz", - "integrity": "sha512-eq1ZeTj0yr72L8MQk6N6heP603ubnywSDRfNpi5enouR112HzGLS6RIvExCzZTraFF4HdzNpJMwA/zGiMoHUUw==", + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/@types/d3-scale/-/d3-scale-4.0.5.tgz", + "integrity": "sha512-w/C++3W394MHzcLKO2kdsIn5KKNTOqeQVzyPSGPLzQbkPw/jpeaGtSRlakcKevGgGsjJxGsbqS0fPrVFDbHrDA==", "dev": true, "dependencies": { "@types/d3-time": "*" @@ -5285,30 +5279,30 @@ "dev": true }, "node_modules/@types/d3-time": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/d3-time/-/d3-time-3.0.0.tgz", - "integrity": "sha512-sZLCdHvBUcNby1cB6Fd3ZBrABbjz3v1Vm90nysCQ6Vt7vd6e/h9Lt7SiJUoEX0l4Dzc7P5llKyhqSi1ycSf1Hg==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@types/d3-time/-/d3-time-3.0.1.tgz", + "integrity": "sha512-5j/AnefKAhCw4HpITmLDTPlf4vhi8o/dES+zbegfPb7LaGfNyqkLxBR6E+4yvTAgnJLmhe80EXFMzUs38fw4oA==", "dev": true }, "node_modules/@types/debug": { - "version": "4.1.8", - "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.8.tgz", - "integrity": "sha512-/vPO1EPOs306Cvhwv7KfVfYvOJqA/S/AXjaHQiJboCZzcNDb+TIJFN9/2C9DZ//ijSKWioNyUxD792QmDJ+HKQ==", + "version": "4.1.9", + "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.9.tgz", + "integrity": "sha512-8Hz50m2eoS56ldRlepxSBa6PWEVCtzUo/92HgLc2qTMnotJNIm7xP+UZhyWoYsyOdd5dxZ+NZLb24rsKyFs2ow==", "dev": true, "dependencies": { "@types/ms": "*" } }, "node_modules/@types/estree": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.1.tgz", - "integrity": "sha512-LG4opVs2ANWZ1TJoKc937iMmNstM/d0ae1vNbnBvBhqCSezgVUOzcLCqbI5elV8Vy6WKwKjaqR+zO9VKirBBCA==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.2.tgz", + "integrity": "sha512-VeiPZ9MMwXjO32/Xu7+OwflfmeoRwkE/qzndw42gGtgJwZopBnzy2gD//NN1+go1mADzkDcqf/KnFRSjTJ8xJA==", "dev": true }, "node_modules/@types/estree-jsx": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@types/estree-jsx/-/estree-jsx-1.0.0.tgz", - "integrity": "sha512-3qvGd0z8F2ENTGr/GG1yViqfiKmRfrXVx5sJyHGFu3z7m5g5utCQtGp/g29JnjflhtQJBv1WDQukHiT58xPcYQ==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@types/estree-jsx/-/estree-jsx-1.0.1.tgz", + "integrity": "sha512-sHyakZlAezNFxmYRo0fopDZW+XvK6ipeZkkp5EAOLjdPfZp8VjZBJ67vSRI99RSCAoqXVmXOHS4fnWoxpuGQtQ==", "dev": true, "dependencies": { "@types/estree": "*" @@ -5351,18 +5345,18 @@ "dev": true }, "node_modules/@types/istanbul-lib-report": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", - "integrity": "sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz", + "integrity": "sha512-gPQuzaPR5h/djlAv2apEG1HVOyj1IUs7GpfMZixU0/0KXT3pm64ylHuMUI1/Akh+sq/iikxg6Z2j+fcMDXaaTQ==", "dev": true, "dependencies": { "@types/istanbul-lib-coverage": "*" } }, "node_modules/@types/istanbul-reports": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz", - "integrity": "sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.2.tgz", + "integrity": "sha512-kv43F9eb3Lhj+lr/Hn6OcLCs/sSM8bt+fIaP11rCYngfV6NVjzWXJ17owQtDQTL9tQ8WSLUrGsSJ6rJz0F1w1A==", "dev": true, "dependencies": { "@types/istanbul-lib-report": "*" @@ -5402,60 +5396,60 @@ "dev": true }, "node_modules/@types/mdast": { - "version": "3.0.12", - "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-3.0.12.tgz", - "integrity": "sha512-DT+iNIRNX884cx0/Q1ja7NyUPpZuv0KPyL5rGNxm1WC1OtHstl7n4Jb7nk+xacNShQMbczJjt8uFzznpp6kYBg==", + "version": "3.0.13", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-3.0.13.tgz", + "integrity": "sha512-HjiGiWedR0DVFkeNljpa6Lv4/IZU1+30VY5d747K7lBudFc3R0Ibr6yJ9lN3BE28VnZyDfLF/VB1Ql1ZIbKrmg==", "dev": true, "dependencies": { "@types/unist": "^2" } }, "node_modules/@types/mdx": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/@types/mdx/-/mdx-2.0.7.tgz", - "integrity": "sha512-BG4tyr+4amr3WsSEmHn/fXPqaCba/AYZ7dsaQTiavihQunHSIxk+uAtqsjvicNpyHN6cm+B9RVrUOtW9VzIKHw==", + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/@types/mdx/-/mdx-2.0.8.tgz", + "integrity": "sha512-r7/zWe+f9x+zjXqGxf821qz++ld8tp6Z4jUS6qmPZUXH6tfh4riXOhAqb12tWGWAevCFtMt1goLWkQMqIJKpsA==", "dev": true }, "node_modules/@types/micromatch": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/@types/micromatch/-/micromatch-4.0.2.tgz", - "integrity": "sha512-oqXqVb0ci19GtH0vOA/U2TmHTcRY9kuZl4mqUxe0QmJAlIW13kzhuK5pi1i9+ngav8FjpSb9FVS/GE00GLX1VA==", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/@types/micromatch/-/micromatch-4.0.3.tgz", + "integrity": "sha512-QX1czv7QoLU76Asb1NSVSlu5zTMx/TFNswUDtQSbH9hgvCg+JHvIEoVvVSzBf1WNCT8XsK515W+p3wFOCuvhCg==", "dev": true, "dependencies": { "@types/braces": "*" } }, "node_modules/@types/minimist": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.2.tgz", - "integrity": "sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ==", + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.3.tgz", + "integrity": "sha512-ZYFzrvyWUNhaPomn80dsMNgMeXxNWZBdkuG/hWlUvXvbdUH8ZERNBGXnU87McuGcWDsyzX2aChCv/SVN348k3A==", "dev": true }, "node_modules/@types/ms": { - "version": "0.7.31", - "resolved": "https://registry.npmjs.org/@types/ms/-/ms-0.7.31.tgz", - "integrity": "sha512-iiUgKzV9AuaEkZqkOLDIvlQiL6ltuZd9tGcW3gwpnX8JbuiuhFlEGmmFXEXkN50Cvq7Os88IY2v0dkDqXYWVgA==", + "version": "0.7.32", + "resolved": "https://registry.npmjs.org/@types/ms/-/ms-0.7.32.tgz", + "integrity": "sha512-xPSg0jm4mqgEkNhowKgZFBNtwoEwF6gJ4Dhww+GFpm3IgtNseHQZ5IqdNwnquZEoANxyDAKDRAdVo4Z72VvD/g==", "dev": true }, "node_modules/@types/nlcst": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@types/nlcst/-/nlcst-1.0.1.tgz", - "integrity": "sha512-aVIyXt6pZiiMOtVByE4Y0gf+BLm1Cxc4ZLSK8VRHn1CgkO+kXbQwN/EBhQmhPdBMjFJCMBKtmNW2zWQuFywz8Q==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@types/nlcst/-/nlcst-1.0.2.tgz", + "integrity": "sha512-ykxL/GDDUhqikjU0LIywZvEwb1NTYXTEWf+XgMSS2o6IXIakafPccxZmxgZcvJPZ3yFl2kdL1gJZz3U3iZF3QA==", "dev": true, "dependencies": { "@types/unist": "^2" } }, "node_modules/@types/node": { - "version": "18.17.18", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.17.18.tgz", - "integrity": "sha512-/4QOuy3ZpV7Ya1GTRz5CYSz3DgkKpyUptXuQ5PPce7uuyJAOR7r9FhkmxJfvcNUXyklbC63a+YvB3jxy7s9ngw==", + "version": "18.18.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.18.0.tgz", + "integrity": "sha512-3xA4X31gHT1F1l38ATDIL9GpRLdwVhnEFC8Uikv5ZLlXATwrCYyPq7ZWHxzxc3J/30SUiwiYT+bQe0/XvKlWbw==", "dev": true }, "node_modules/@types/normalize-package-data": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.1.tgz", - "integrity": "sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==", + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.2.tgz", + "integrity": "sha512-lqa4UEhhv/2sjjIQgjX8B+RBjj47eo0mzGasklVJ78UKGQY1r0VpB9XHDaZZO9qzEFDdy4MrXLuEaSmPrPSe/A==", "dev": true }, "node_modules/@types/object-path": { @@ -5465,27 +5459,27 @@ "dev": true }, "node_modules/@types/readdir-glob": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@types/readdir-glob/-/readdir-glob-1.1.1.tgz", - "integrity": "sha512-ImM6TmoF8bgOwvehGviEj3tRdRBbQujr1N+0ypaln/GWjaerOB26jb93vsRHmdMtvVQZQebOlqt2HROark87mQ==", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@types/readdir-glob/-/readdir-glob-1.1.2.tgz", + "integrity": "sha512-vwAYrNN/8yhp/FJRU6HUSD0yk6xfoOS8HrZa8ZL7j+X8hJpaC1hTcAiXX2IxaAkkvrz9mLyoEhYZTE3cEYvA9Q==", "dev": true, "dependencies": { "@types/node": "*" } }, "node_modules/@types/responselike": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@types/responselike/-/responselike-1.0.0.tgz", - "integrity": "sha512-85Y2BjiufFzaMIlvJDvTTB8Fxl2xfLo4HgmHzVBz08w4wDePCTjYw66PdrolO0kzli3yam/YCgRufyo1DdQVTA==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@types/responselike/-/responselike-1.0.1.tgz", + "integrity": "sha512-TiGnitEDxj2X0j+98Eqk5lv/Cij8oHd32bU4D/Yw6AOq7vvTk0gSD2GPj0G/HkvhMoVsdlhYF4yqqlyPBTM6Sg==", "dev": true, "dependencies": { "@types/node": "*" } }, "node_modules/@types/semver": { - "version": "7.5.2", - "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.2.tgz", - "integrity": "sha512-7aqorHYgdNO4DM36stTiGO3DvKoex9TQRwsJU6vMaFGyqpBA1MNZkz+PG3gaNUPpTAOYhT1WR7M1JyA3fbS9Cw==", + "version": "7.5.3", + "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.3.tgz", + "integrity": "sha512-OxepLK9EuNEIPxWNME+C6WwbRAOOI2o2BaQEGzz5Lu2e4Z5eDnEo+/aVEDMIXywoJitJ7xWd641wrGLZdtwRyw==", "dev": true }, "node_modules/@types/stack-utils": { @@ -5519,33 +5513,33 @@ "dev": true }, "node_modules/@types/ws": { - "version": "8.5.5", - "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.5.tgz", - "integrity": "sha512-lwhs8hktwxSjf9UaZ9tG5M03PGogvFaH8gUgLNbN9HKIg0dvv6q+gkSuJ8HN4/VbyxkuLzCjlN7GquQ0gUJfIg==", + "version": "8.5.6", + "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.6.tgz", + "integrity": "sha512-8B5EO9jLVCy+B58PLHvLDuOD8DRVMgQzq8d55SjLCOn9kqGyqOvy27exVaTio1q1nX5zLu8/6N0n2ThSxOM6tg==", "dev": true, "dependencies": { "@types/node": "*" } }, "node_modules/@types/yargs": { - "version": "17.0.24", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.24.tgz", - "integrity": "sha512-6i0aC7jV6QzQB8ne1joVZ0eSFIstHsCrobmOtghM11yGlH0j43FKL2UhWdELkyps0zuf7qVTUVCCR+tgSlyLLw==", + "version": "17.0.25", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.25.tgz", + "integrity": "sha512-gy7iPgwnzNvxgAEi2bXOHWCVOG6f7xsprVJH4MjlAWeBmJ7vh/Y1kwMtUrs64ztf24zVIRCpr3n/z6gm9QIkgg==", "dev": true, "dependencies": { "@types/yargs-parser": "*" } }, "node_modules/@types/yargs-parser": { - "version": "21.0.0", - "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.0.tgz", - "integrity": "sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA==", + "version": "21.0.1", + "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.1.tgz", + "integrity": "sha512-axdPBuLuEJt0c4yI5OZssC19K2Mq1uKdrfZBzuxLvaztgqUtFYZUNw7lETExPYJR9jdEoIg4mb7RQKRQzOkeGQ==", "dev": true }, "node_modules/@types/yauzl": { - "version": "2.10.0", - "resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.10.0.tgz", - "integrity": "sha512-Cn6WYCm0tXv8p6k+A8PvbDG763EDpBoTzHdA+Q/MF6H3sapGjCm9NzoaJncJS9tUKSuCoDs9XHxYYsQDgxR6kw==", + "version": "2.10.1", + "resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.10.1.tgz", + "integrity": "sha512-CHzgNU3qYBnp/O4S3yv2tXPlvMTq0YWSTVg2/JYLqWZGHwwgJGAwd00poay/11asPq8wLFwHzubyInqHIFmmiw==", "dev": true, "optional": true, "dependencies": { @@ -5782,14 +5776,14 @@ } }, "node_modules/@vitest/browser": { - "version": "0.34.4", - "resolved": "https://registry.npmjs.org/@vitest/browser/-/browser-0.34.4.tgz", - "integrity": "sha512-Ao/+AXplSJlOj5idIKrwi0CvGE8zOzAXzheygDXiX6V3I9EqStlIAtTH98aIrPeJ9Uj0HKECaVdJ5TY4WwXCdg==", + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@vitest/browser/-/browser-0.34.5.tgz", + "integrity": "sha512-cIykJtWNV9T/X2C2ldwKti+M7VWC/T54YUO56TGyOlPUIKXj3WAMYcpfZTbH21dV0PawP7Z2MZ+aGLEUhurrjw==", "dev": true, "dependencies": { "estree-walker": "^3.0.3", "magic-string": "^0.30.1", - "modern-node-polyfills": "^0.1.3", + "modern-node-polyfills": "^1.0.0", "sirv": "^2.0.3" }, "funding": { @@ -5800,9 +5794,9 @@ } }, "node_modules/@vitest/coverage-v8": { - "version": "0.34.4", - "resolved": "https://registry.npmjs.org/@vitest/coverage-v8/-/coverage-v8-0.34.4.tgz", - "integrity": "sha512-TZ5ghzhmg3COQqfBShL+zRQEInHmV9TSwghTdfkHpCTyTOr+rxo6x41vCNcVfWysWULtqtBVpY6YFNovxnESfA==", + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@vitest/coverage-v8/-/coverage-v8-0.34.5.tgz", + "integrity": "sha512-97xjhRTSdmeeHCm2nNHhT3hLsMYkAhHXm/rwj6SZ3voka8xiCJrwgtfIjoZIFEL4OO0KezGmVuHWQXcMunULIA==", "dev": true, "dependencies": { "@ampproject/remapping": "^2.2.1", @@ -5825,13 +5819,13 @@ } }, "node_modules/@vitest/expect": { - "version": "0.34.4", - "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-0.34.4.tgz", - "integrity": "sha512-XlMKX8HyYUqB8dsY8Xxrc64J2Qs9pKMt2Z8vFTL4mBWXJsg4yoALHzJfDWi8h5nkO4Zua4zjqtapQ/IluVkSnA==", + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-0.34.5.tgz", + "integrity": "sha512-/3RBIV9XEH+nRpRMqDJBufKIOQaYUH2X6bt0rKSCW0MfKhXFLYsR5ivHifeajRSTsln0FwJbitxLKHSQz/Xwkw==", "dev": true, "dependencies": { - "@vitest/spy": "0.34.4", - "@vitest/utils": "0.34.4", + "@vitest/spy": "0.34.5", + "@vitest/utils": "0.34.5", "chai": "^4.3.7" }, "funding": { @@ -5839,12 +5833,12 @@ } }, "node_modules/@vitest/runner": { - "version": "0.34.4", - "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-0.34.4.tgz", - "integrity": "sha512-hwwdB1StERqUls8oV8YcpmTIpVeJMe4WgYuDongVzixl5hlYLT2G8afhcdADeDeqCaAmZcSgLTLtqkjPQF7x+w==", + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-0.34.5.tgz", + "integrity": "sha512-RDEE3ViVvl7jFSCbnBRyYuu23XxmvRTSZWW6W4M7eC5dOsK75d5LIf6uhE5Fqf809DQ1+9ICZZNxhIolWHU4og==", "dev": true, "dependencies": { - "@vitest/utils": "0.34.4", + "@vitest/utils": "0.34.5", "p-limit": "^4.0.0", "pathe": "^1.1.1" }, @@ -5880,9 +5874,9 @@ } }, "node_modules/@vitest/snapshot": { - "version": "0.34.4", - "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-0.34.4.tgz", - "integrity": "sha512-GCsh4coc3YUSL/o+BPUo7lHQbzpdttTxL6f4q0jRx2qVGoYz/cyTRDJHbnwks6TILi6560bVWoBpYC10PuTLHw==", + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-0.34.5.tgz", + "integrity": "sha512-+ikwSbhu6z2yOdtKmk/aeoDZ9QPm2g/ZO5rXT58RR9Vmu/kB2MamyDSx77dctqdZfP3Diqv4mbc/yw2kPT8rmA==", "dev": true, "dependencies": { "magic-string": "^0.30.1", @@ -5926,9 +5920,9 @@ "dev": true }, "node_modules/@vitest/spy": { - "version": "0.34.4", - "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-0.34.4.tgz", - "integrity": "sha512-PNU+fd7DUPgA3Ya924b1qKuQkonAW6hL7YUjkON3wmBwSTIlhOSpy04SJ0NrRsEbrXgMMj6Morh04BMf8k+w0g==", + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-0.34.5.tgz", + "integrity": "sha512-epsicsfhvBjRjCMOC/3k00mP/TBGQy8/P0DxOFiWyLt55gnZ99dqCfCiAsKO17BWVjn4eZRIjKvcqNmSz8gvmg==", "dev": true, "dependencies": { "tinyspy": "^2.1.1" @@ -5938,12 +5932,12 @@ } }, "node_modules/@vitest/ui": { - "version": "0.34.4", - "resolved": "https://registry.npmjs.org/@vitest/ui/-/ui-0.34.4.tgz", - "integrity": "sha512-gz0m0r9ErFG32r+DRdwuLJpUDpbi+jrMcw9nJZAau48Fs4LDIBg561PvczvGqyYxzbyFU7vgkSnSlSDfK0d53w==", + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@vitest/ui/-/ui-0.34.5.tgz", + "integrity": "sha512-nK3Ny7fQgoTJMCGXLzYL0oo1ePtruRM9eYT1Y8esQx8fHj05davqVgqWv4Kd+Yy8PfzyrduTx1EYBdSMIbQh8A==", "dev": true, "dependencies": { - "@vitest/utils": "0.34.4", + "@vitest/utils": "0.34.5", "fast-glob": "^3.3.0", "fflate": "^0.8.0", "flatted": "^3.2.7", @@ -5959,9 +5953,9 @@ } }, "node_modules/@vitest/utils": { - "version": "0.34.4", - "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-0.34.4.tgz", - "integrity": "sha512-yR2+5CHhp/K4ySY0Qtd+CAL9f5Yh1aXrKfAT42bq6CtlGPh92jIDDDSg7ydlRow1CP+dys4TrOrbELOyNInHSg==", + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-0.34.5.tgz", + "integrity": "sha512-ur6CmmYQoeHMwmGb0v+qwkwN3yopZuZyf4xt1DBBSGBed8Hf9Gmbm/5dEWqgpLPdRx6Av6jcWXrjcKfkTzg/pw==", "dev": true, "dependencies": { "diff-sequences": "^29.4.3", @@ -6005,14 +5999,14 @@ "dev": true }, "node_modules/@wdio/config": { - "version": "8.16.11", - "resolved": "https://registry.npmjs.org/@wdio/config/-/config-8.16.11.tgz", - "integrity": "sha512-AU4aLRlpzI7qWzpx2sJa+KW/PeWEkVwlDYfaTyq5d/97aEdKGR+xJ+uOyuJGsGKw5asAX2zsXMT5BrtSL+IqaA==", + "version": "8.16.15", + "resolved": "https://registry.npmjs.org/@wdio/config/-/config-8.16.15.tgz", + "integrity": "sha512-2XRSyQy5Rui+sr7ah+2tMiQds1wT1EStf9QO7xyxo/sn7cpjs+/kaBm00LvMB5tFrsHBFbd3lkpejs/SwxBoDA==", "dev": true, "dependencies": { "@wdio/logger": "8.11.0", - "@wdio/types": "8.16.7", - "@wdio/utils": "8.16.11", + "@wdio/types": "8.16.12", + "@wdio/utils": "8.16.15", "decamelize": "^6.0.0", "deepmerge-ts": "^5.0.0", "glob": "^10.2.2", @@ -6045,19 +6039,19 @@ } }, "node_modules/@wdio/config/node_modules/glob": { - "version": "10.3.5", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.5.tgz", - "integrity": "sha512-bYUpUD7XDEHI4Q2O5a7PXGvyw4deKR70kHiDxzQbe925wbZknhOzUt2xBgTkYL6RBcVeXYuD9iNYeqoWbBZQnA==", + "version": "10.3.10", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.10.tgz", + "integrity": "sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==", "dev": true, "dependencies": { "foreground-child": "^3.1.0", - "jackspeak": "^2.0.3", + "jackspeak": "^2.3.5", "minimatch": "^9.0.1", "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0", "path-scurry": "^1.10.1" }, "bin": { - "glob": "dist/cjs/src/bin.js" + "glob": "dist/esm/bin.mjs" }, "engines": { "node": ">=16 || 14 >=14.17" @@ -6203,9 +6197,9 @@ } }, "node_modules/@wdio/config/node_modules/type-fest": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.3.1.tgz", - "integrity": "sha512-pphNW/msgOUSkJbH58x8sqpq8uQj6b0ZKGxEsLKMUnGorRcDjrUaLS+39+/ub41JNTwrrMyJcUB8+YZs3mbwqw==", + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.3.2.tgz", + "integrity": "sha512-VpwuOgnTsQUUWi0id8Hl4/xiQ+OoaeJGe8dnFjzubJYe/lOc2/d1Qx/d3FqWR0FlpOG/cvukAXfB12A49Y4iiA==", "dev": true, "engines": { "node": ">=16" @@ -6275,15 +6269,15 @@ } }, "node_modules/@wdio/repl/node_modules/@types/node": { - "version": "20.6.3", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.6.3.tgz", - "integrity": "sha512-HksnYH4Ljr4VQgEy2lTStbCKv/P590tmPe5HqOnv9Gprffgv5WXAY+Y5Gqniu0GGqeTCUdBnzC3QSrzPkBkAMA==", + "version": "20.7.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.7.0.tgz", + "integrity": "sha512-zI22/pJW2wUZOVyguFaUL1HABdmSVxpXrzIqkjsHmyUjNhPoWM1CKfvVuXfetHhIok4RY573cqS0mZ1SJEnoTg==", "dev": true }, "node_modules/@wdio/types": { - "version": "8.16.7", - "resolved": "https://registry.npmjs.org/@wdio/types/-/types-8.16.7.tgz", - "integrity": "sha512-s7fSO5CbrFdM5gsLgXzdCbZykJzZ7bpfxdW3v7NT0IQMABlv4cYpesK66DHQGjSG8Rr3LEqsMmpkt2TlMiwWVQ==", + "version": "8.16.12", + "resolved": "https://registry.npmjs.org/@wdio/types/-/types-8.16.12.tgz", + "integrity": "sha512-TjCZJ3P9ual21G0dRv0lC9QgHGd3Igv+guEINevBKf/oD4/N84PvQ2eZG1nSbZ3xh8X/dvi+O64A6VEv43gx2w==", "dev": true, "dependencies": { "@types/node": "^20.1.0" @@ -6293,20 +6287,20 @@ } }, "node_modules/@wdio/types/node_modules/@types/node": { - "version": "20.6.3", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.6.3.tgz", - "integrity": "sha512-HksnYH4Ljr4VQgEy2lTStbCKv/P590tmPe5HqOnv9Gprffgv5WXAY+Y5Gqniu0GGqeTCUdBnzC3QSrzPkBkAMA==", + "version": "20.7.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.7.0.tgz", + "integrity": "sha512-zI22/pJW2wUZOVyguFaUL1HABdmSVxpXrzIqkjsHmyUjNhPoWM1CKfvVuXfetHhIok4RY573cqS0mZ1SJEnoTg==", "dev": true }, "node_modules/@wdio/utils": { - "version": "8.16.11", - "resolved": "https://registry.npmjs.org/@wdio/utils/-/utils-8.16.11.tgz", - "integrity": "sha512-hV0p7sK2f6KuaFXYFZLFaRs4o/l2nxvB5z3c4umQ2P71/mms1k8h1A9hK+aMCHg2plPcKr74lzxsGhIT+pD1Zg==", + "version": "8.16.15", + "resolved": "https://registry.npmjs.org/@wdio/utils/-/utils-8.16.15.tgz", + "integrity": "sha512-uVomufAbqSVJZuuy2HW9Zt7MJOLdB1MEJ/1T3wByNYcG9HSMPX3/KGn/1OSBg9kQO7QA7+x6c9rGgQMTgxNrWQ==", "dev": true, "dependencies": { "@puppeteer/browsers": "^1.6.0", "@wdio/logger": "8.11.0", - "@wdio/types": "8.16.7", + "@wdio/types": "8.16.12", "decamelize": "^6.0.0", "deepmerge-ts": "^5.1.0", "edgedriver": "^5.3.5", @@ -7113,9 +7107,9 @@ } }, "node_modules/axe-core": { - "version": "4.8.1", - "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.8.1.tgz", - "integrity": "sha512-9l850jDDPnKq48nbad8SiEelCv4OrUWrKab/cPj0GScVg6cb6NbCCt/Ulk26QEq5jP9NnGr04Bit1BHyV6r5CQ==", + "version": "4.8.2", + "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.8.2.tgz", + "integrity": "sha512-/dlp0fxyM3R8YW7MFzaHWXrf4zzbr0vaYb23VBFCl83R7nWNPg/yaQw2Dc8jzCMmDVLhSdzH8MjrsuIUuvX+6g==", "dev": true, "engines": { "node": ">=4" @@ -7502,9 +7496,9 @@ } }, "node_modules/browserslist": { - "version": "4.21.10", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.10.tgz", - "integrity": "sha512-bipEBdZfVH5/pwrvqc+Ub0kUPVfGUhlKxbvfD+z1BDnPEO/X98ruXGA1WP5ASpAFKan7Qr6j736IacbZQuAlKQ==", + "version": "4.22.0", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.22.0.tgz", + "integrity": "sha512-v+Jcv64L2LbfTC6OnRcaxtqJNJuQAVhZKSJfR/6hn7lhnChUXl4amwVviqN1k411BB+3rRoKMitELRn1CojeRA==", "dev": true, "funding": [ { @@ -7521,10 +7515,10 @@ } ], "dependencies": { - "caniuse-lite": "^1.0.30001517", - "electron-to-chromium": "^1.4.477", + "caniuse-lite": "^1.0.30001539", + "electron-to-chromium": "^1.4.530", "node-releases": "^2.0.13", - "update-browserslist-db": "^1.0.11" + "update-browserslist-db": "^1.0.13" }, "bin": { "browserslist": "cli.js" @@ -7820,9 +7814,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001538", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001538.tgz", - "integrity": "sha512-HWJnhnID+0YMtGlzcp3T9drmBJUVDchPJ08tpUGFLs9CYlwWPH2uLgpHn8fND5pCgXVtnGS3H4QR9XLMHVNkHw==", + "version": "1.0.30001540", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001540.tgz", + "integrity": "sha512-9JL38jscuTJBTcuETxm8QLsFr/F6v0CYYTEU6r5+qSM98P2Q0Hmu0eG1dTG5GBUmywU3UlcVOUSIJYY47rdFSw==", "dev": true, "funding": [ { @@ -7873,13 +7867,13 @@ } }, "node_modules/chai": { - "version": "4.3.8", - "resolved": "https://registry.npmjs.org/chai/-/chai-4.3.8.tgz", - "integrity": "sha512-vX4YvVVtxlfSZ2VecZgFUTU5qPCYsobVI2O9FmwEXBhDigYGQA6jRXCycIs1yJnnWbZ6/+a2zNIF5DfVCcJBFQ==", + "version": "4.3.9", + "resolved": "https://registry.npmjs.org/chai/-/chai-4.3.9.tgz", + "integrity": "sha512-tH8vhfA1CfuYMkALXj+wmZcqiwqOfshU9Gry+NYiiLqIddrobkBhALv6XD4yDz68qapphYI4vSaqhqAdThCAAA==", "dev": true, "dependencies": { "assertion-error": "^1.1.0", - "check-error": "^1.0.2", + "check-error": "^1.0.3", "deep-eql": "^4.1.2", "get-func-name": "^2.0.0", "loupe": "^2.3.1", @@ -7970,10 +7964,13 @@ "dev": true }, "node_modules/check-error": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.2.tgz", - "integrity": "sha512-BrgHpW9NURQgzoNyjfq0Wu6VFO6D7IZEmJNdtgNqpzGG8RuNFHt2jQxWlAs4HMe119chBnv+34syEZtc6IhLtA==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.3.tgz", + "integrity": "sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg==", "dev": true, + "dependencies": { + "get-func-name": "^2.0.2" + }, "engines": { "node": "*" } @@ -8389,9 +8386,9 @@ } }, "node_modules/convert-source-map": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", - "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", "dev": true }, "node_modules/cookie": { @@ -10413,9 +10410,9 @@ } }, "node_modules/electron-to-chromium": { - "version": "1.4.526", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.526.tgz", - "integrity": "sha512-tjjTMjmZAx1g6COrintLTa2/jcafYKxKoiEkdQOrVdbLaHh2wCt2nsAF8ZHweezkrP+dl/VG9T5nabcYoo0U5Q==", + "version": "1.4.532", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.532.tgz", + "integrity": "sha512-piIR0QFdIGKmOJTSNg5AwxZRNWQSXlRYycqDB9Srstx4lip8KpcmRxVP6zuFWExWziHYZpJ0acX7TxqX95KBpg==", "dev": true }, "node_modules/elkjs": { @@ -10523,441 +10520,122 @@ "safe-regex-test": "^1.0.0", "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-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.11" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/es-get-iterator": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/es-get-iterator/-/es-get-iterator-1.1.3.tgz", - "integrity": "sha512-sPZmqHBe6JIiTfN5q2pEi//TwxmAFHwj/XEuYjTuse78i8KxaqMTTzxPoFKuzRpDpTJ+0NAbpfenkmH2rePtuw==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.3", - "has-symbols": "^1.0.3", - "is-arguments": "^1.1.1", - "is-map": "^2.0.2", - "is-set": "^2.0.2", - "is-string": "^1.0.7", - "isarray": "^2.0.5", - "stop-iteration-iterator": "^1.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/es-set-tostringtag": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.1.tgz", - "integrity": "sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg==", - "dev": true, - "dependencies": { - "get-intrinsic": "^1.1.3", - "has": "^1.0.3", - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-shim-unscopables": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz", - "integrity": "sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w==", - "dev": true, - "dependencies": { - "has": "^1.0.3" - } - }, - "node_modules/es-to-primitive": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", - "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", - "dev": true, - "dependencies": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/es6-error": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/es6-error/-/es6-error-4.1.1.tgz", - "integrity": "sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==", - "dev": true - }, - "node_modules/esbuild": { - "version": "0.14.54", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.14.54.tgz", - "integrity": "sha512-Cy9llcy8DvET5uznocPyqL3BFRrFXSVqbgpMJ9Wz8oVjZlh/zUSNbPRbov0VX7VxN2JH1Oa0uNxZ7eLRb62pJA==", - "dev": true, - "hasInstallScript": true, - "bin": { - "esbuild": "bin/esbuild" - }, - "engines": { - "node": ">=12" - }, - "optionalDependencies": { - "@esbuild/linux-loong64": "0.14.54", - "esbuild-android-64": "0.14.54", - "esbuild-android-arm64": "0.14.54", - "esbuild-darwin-64": "0.14.54", - "esbuild-darwin-arm64": "0.14.54", - "esbuild-freebsd-64": "0.14.54", - "esbuild-freebsd-arm64": "0.14.54", - "esbuild-linux-32": "0.14.54", - "esbuild-linux-64": "0.14.54", - "esbuild-linux-arm": "0.14.54", - "esbuild-linux-arm64": "0.14.54", - "esbuild-linux-mips64le": "0.14.54", - "esbuild-linux-ppc64le": "0.14.54", - "esbuild-linux-riscv64": "0.14.54", - "esbuild-linux-s390x": "0.14.54", - "esbuild-netbsd-64": "0.14.54", - "esbuild-openbsd-64": "0.14.54", - "esbuild-sunos-64": "0.14.54", - "esbuild-windows-32": "0.14.54", - "esbuild-windows-64": "0.14.54", - "esbuild-windows-arm64": "0.14.54" - } - }, - "node_modules/esbuild-android-64": { - "version": "0.14.54", - "resolved": "https://registry.npmjs.org/esbuild-android-64/-/esbuild-android-64-0.14.54.tgz", - "integrity": "sha512-Tz2++Aqqz0rJ7kYBfz+iqyE3QMycD4vk7LBRyWaAVFgFtQ/O8EJOnVmTOiDWYZ/uYzB4kvP+bqejYdVKzE5lAQ==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-android-arm64": { - "version": "0.14.54", - "resolved": "https://registry.npmjs.org/esbuild-android-arm64/-/esbuild-android-arm64-0.14.54.tgz", - "integrity": "sha512-F9E+/QDi9sSkLaClO8SOV6etqPd+5DgJje1F9lOWoNncDdOBL2YF59IhsWATSt0TLZbYCf3pNlTHvVV5VfHdvg==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-darwin-64": { - "version": "0.14.54", - "resolved": "https://registry.npmjs.org/esbuild-darwin-64/-/esbuild-darwin-64-0.14.54.tgz", - "integrity": "sha512-jtdKWV3nBviOd5v4hOpkVmpxsBy90CGzebpbO9beiqUYVMBtSc0AL9zGftFuBon7PNDcdvNCEuQqw2x0wP9yug==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-darwin-arm64": { - "version": "0.14.54", - "resolved": "https://registry.npmjs.org/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.14.54.tgz", - "integrity": "sha512-OPafJHD2oUPyvJMrsCvDGkRrVCar5aVyHfWGQzY1dWnzErjrDuSETxwA2HSsyg2jORLY8yBfzc1MIpUkXlctmw==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-freebsd-64": { - "version": "0.14.54", - "resolved": "https://registry.npmjs.org/esbuild-freebsd-64/-/esbuild-freebsd-64-0.14.54.tgz", - "integrity": "sha512-OKwd4gmwHqOTp4mOGZKe/XUlbDJ4Q9TjX0hMPIDBUWWu/kwhBAudJdBoxnjNf9ocIB6GN6CPowYpR/hRCbSYAg==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-freebsd-arm64": { - "version": "0.14.54", - "resolved": "https://registry.npmjs.org/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.14.54.tgz", - "integrity": "sha512-sFwueGr7OvIFiQT6WeG0jRLjkjdqWWSrfbVwZp8iMP+8UHEHRBvlaxL6IuKNDwAozNUmbb8nIMXa7oAOARGs1Q==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-linux-32": { - "version": "0.14.54", - "resolved": "https://registry.npmjs.org/esbuild-linux-32/-/esbuild-linux-32-0.14.54.tgz", - "integrity": "sha512-1ZuY+JDI//WmklKlBgJnglpUL1owm2OX+8E1syCD6UAxcMM/XoWd76OHSjl/0MR0LisSAXDqgjT3uJqT67O3qw==", - "cpu": [ - "ia32" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-linux-64": { - "version": "0.14.54", - "resolved": "https://registry.npmjs.org/esbuild-linux-64/-/esbuild-linux-64-0.14.54.tgz", - "integrity": "sha512-EgjAgH5HwTbtNsTqQOXWApBaPVdDn7XcK+/PtJwZLT1UmpLoznPd8c5CxqsH2dQK3j05YsB3L17T8vE7cp4cCg==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-linux-arm": { - "version": "0.14.54", - "resolved": "https://registry.npmjs.org/esbuild-linux-arm/-/esbuild-linux-arm-0.14.54.tgz", - "integrity": "sha512-qqz/SjemQhVMTnvcLGoLOdFpCYbz4v4fUo+TfsWG+1aOu70/80RV6bgNpR2JCrppV2moUQkww+6bWxXRL9YMGw==", - "cpu": [ - "arm" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-linux-arm64": { - "version": "0.14.54", - "resolved": "https://registry.npmjs.org/esbuild-linux-arm64/-/esbuild-linux-arm64-0.14.54.tgz", - "integrity": "sha512-WL71L+0Rwv+Gv/HTmxTEmpv0UgmxYa5ftZILVi2QmZBgX3q7+tDeOQNqGtdXSdsL8TQi1vIaVFHUPDe0O0kdig==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-linux-mips64le": { - "version": "0.14.54", - "resolved": "https://registry.npmjs.org/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.14.54.tgz", - "integrity": "sha512-qTHGQB8D1etd0u1+sB6p0ikLKRVuCWhYQhAHRPkO+OF3I/iSlTKNNS0Lh2Oc0g0UFGguaFZZiPJdJey3AGpAlw==", - "cpu": [ - "mips64el" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-linux-ppc64le": { - "version": "0.14.54", - "resolved": "https://registry.npmjs.org/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.14.54.tgz", - "integrity": "sha512-j3OMlzHiqwZBDPRCDFKcx595XVfOfOnv68Ax3U4UKZ3MTYQB5Yz3X1mn5GnodEVYzhtZgxEBidLWeIs8FDSfrQ==", - "cpu": [ - "ppc64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-linux-riscv64": { - "version": "0.14.54", - "resolved": "https://registry.npmjs.org/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.14.54.tgz", - "integrity": "sha512-y7Vt7Wl9dkOGZjxQZnDAqqn+XOqFD7IMWiewY5SPlNlzMX39ocPQlOaoxvT4FllA5viyV26/QzHtvTjVNOxHZg==", - "cpu": [ - "riscv64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-linux-s390x": { - "version": "0.14.54", - "resolved": "https://registry.npmjs.org/esbuild-linux-s390x/-/esbuild-linux-s390x-0.14.54.tgz", - "integrity": "sha512-zaHpW9dziAsi7lRcyV4r8dhfG1qBidQWUXweUjnw+lliChJqQr+6XD71K41oEIC3Mx1KStovEmlzm+MkGZHnHA==", - "cpu": [ - "s390x" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-netbsd-64": { - "version": "0.14.54", - "resolved": "https://registry.npmjs.org/esbuild-netbsd-64/-/esbuild-netbsd-64-0.14.54.tgz", - "integrity": "sha512-PR01lmIMnfJTgeU9VJTDY9ZerDWVFIUzAtJuDHwwceppW7cQWjBBqP48NdeRtoP04/AtO9a7w3viI+PIDr6d+w==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "netbsd" - ], + "string.prototype.trimstart": "^1.0.7", + "typed-array-buffer": "^1.0.0", + "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.11" + }, "engines": { - "node": ">=12" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/esbuild-openbsd-64": { - "version": "0.14.54", - "resolved": "https://registry.npmjs.org/esbuild-openbsd-64/-/esbuild-openbsd-64-0.14.54.tgz", - "integrity": "sha512-Qyk7ikT2o7Wu76UsvvDS5q0amJvmRzDyVlL0qf5VLsLchjCa1+IAvd8kTBgUxD7VBUUVgItLkk609ZHUc1oCaw==", - "cpu": [ - "x64" - ], + "node_modules/es-get-iterator": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/es-get-iterator/-/es-get-iterator-1.1.3.tgz", + "integrity": "sha512-sPZmqHBe6JIiTfN5q2pEi//TwxmAFHwj/XEuYjTuse78i8KxaqMTTzxPoFKuzRpDpTJ+0NAbpfenkmH2rePtuw==", "dev": true, - "optional": true, - "os": [ - "openbsd" - ], - "engines": { - "node": ">=12" + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.3", + "has-symbols": "^1.0.3", + "is-arguments": "^1.1.1", + "is-map": "^2.0.2", + "is-set": "^2.0.2", + "is-string": "^1.0.7", + "isarray": "^2.0.5", + "stop-iteration-iterator": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/esbuild-sunos-64": { - "version": "0.14.54", - "resolved": "https://registry.npmjs.org/esbuild-sunos-64/-/esbuild-sunos-64-0.14.54.tgz", - "integrity": "sha512-28GZ24KmMSeKi5ueWzMcco6EBHStL3B6ubM7M51RmPwXQGLe0teBGJocmWhgwccA1GeFXqxzILIxXpHbl9Q/Kw==", - "cpu": [ - "x64" - ], + "node_modules/es-set-tostringtag": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.1.tgz", + "integrity": "sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg==", "dev": true, - "optional": true, - "os": [ - "sunos" - ], + "dependencies": { + "get-intrinsic": "^1.1.3", + "has": "^1.0.3", + "has-tostringtag": "^1.0.0" + }, "engines": { - "node": ">=12" + "node": ">= 0.4" } }, - "node_modules/esbuild-windows-32": { - "version": "0.14.54", - "resolved": "https://registry.npmjs.org/esbuild-windows-32/-/esbuild-windows-32-0.14.54.tgz", - "integrity": "sha512-T+rdZW19ql9MjS7pixmZYVObd9G7kcaZo+sETqNH4RCkuuYSuv9AGHUVnPoP9hhuE1WM1ZimHz1CIBHBboLU7w==", - "cpu": [ - "ia32" - ], + "node_modules/es-shim-unscopables": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz", + "integrity": "sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w==", "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" + "dependencies": { + "has": "^1.0.3" } }, - "node_modules/esbuild-windows-64": { - "version": "0.14.54", - "resolved": "https://registry.npmjs.org/esbuild-windows-64/-/esbuild-windows-64-0.14.54.tgz", - "integrity": "sha512-AoHTRBUuYwXtZhjXZbA1pGfTo8cJo3vZIcWGLiUcTNgHpJJMC1rVA44ZereBHMJtotyN71S8Qw0npiCIkW96cQ==", - "cpu": [ - "x64" - ], + "node_modules/es-to-primitive": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", + "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", "dev": true, - "optional": true, - "os": [ - "win32" - ], + "dependencies": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + }, "engines": { - "node": ">=12" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/esbuild-windows-arm64": { - "version": "0.14.54", - "resolved": "https://registry.npmjs.org/esbuild-windows-arm64/-/esbuild-windows-arm64-0.14.54.tgz", - "integrity": "sha512-M0kuUvXhot1zOISQGXwWn6YtS+Y/1RT9WrVIOywZnJHo3jCDyewAc79aKNQWFCQm+xNHVTq9h8dZKvygoXQQRg==", - "cpu": [ - "arm64" - ], + "node_modules/es6-error": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/es6-error/-/es6-error-4.1.1.tgz", + "integrity": "sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==", + "dev": true + }, + "node_modules/esbuild": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.18.20.tgz", + "integrity": "sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA==", "dev": true, - "optional": true, - "os": [ - "win32" - ], + "hasInstallScript": true, + "bin": { + "esbuild": "bin/esbuild" + }, "engines": { "node": ">=12" + }, + "optionalDependencies": { + "@esbuild/android-arm": "0.18.20", + "@esbuild/android-arm64": "0.18.20", + "@esbuild/android-x64": "0.18.20", + "@esbuild/darwin-arm64": "0.18.20", + "@esbuild/darwin-x64": "0.18.20", + "@esbuild/freebsd-arm64": "0.18.20", + "@esbuild/freebsd-x64": "0.18.20", + "@esbuild/linux-arm": "0.18.20", + "@esbuild/linux-arm64": "0.18.20", + "@esbuild/linux-ia32": "0.18.20", + "@esbuild/linux-loong64": "0.18.20", + "@esbuild/linux-mips64el": "0.18.20", + "@esbuild/linux-ppc64": "0.18.20", + "@esbuild/linux-riscv64": "0.18.20", + "@esbuild/linux-s390x": "0.18.20", + "@esbuild/linux-x64": "0.18.20", + "@esbuild/netbsd-x64": "0.18.20", + "@esbuild/openbsd-x64": "0.18.20", + "@esbuild/sunos-x64": "0.18.20", + "@esbuild/win32-arm64": "0.18.20", + "@esbuild/win32-ia32": "0.18.20", + "@esbuild/win32-x64": "0.18.20" } }, "node_modules/escalade": { @@ -11022,15 +10700,15 @@ } }, "node_modules/eslint": { - "version": "8.49.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.49.0.tgz", - "integrity": "sha512-jw03ENfm6VJI0jA9U+8H5zfl5b+FvuU3YYvZRdZHOlU2ggJkxrlkJH4HcDrZpj6YwD8kuYqvQM8LyesoazrSOQ==", + "version": "8.50.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.50.0.tgz", + "integrity": "sha512-FOnOGSuFuFLv/Sa+FDVRZl4GGVAAFFi8LecRsI5a1tMO5HIE8nCm4ivAlzt4dT3ol/PaaGC0rJEEXQmHJBGoOg==", "dev": true, "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", "@eslint-community/regexpp": "^4.6.1", "@eslint/eslintrc": "^2.1.2", - "@eslint/js": "8.49.0", + "@eslint/js": "8.50.0", "@humanwhocodes/config-array": "^0.11.11", "@humanwhocodes/module-importer": "^1.0.1", "@nodelib/fs.walk": "^1.2.8", @@ -11672,12 +11350,6 @@ "integrity": "sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==", "dev": true }, - "node_modules/fast-equals": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/fast-equals/-/fast-equals-4.0.3.tgz", - "integrity": "sha512-G3BSX9cfKttjr+2o1O22tYMLq0DPluZnYtq1rXumE1SpL/F/SLIfHx08WYQoWSIpeMYf8sRbJ8++71+v6Pnxfg==", - "peer": true - }, "node_modules/fast-fifo": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/fast-fifo/-/fast-fifo-1.3.2.tgz", @@ -12386,9 +12058,9 @@ } }, "node_modules/get-func-name": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.0.tgz", - "integrity": "sha512-Hm0ixYtaSZ/V7C8FJrtZIuBBI+iSgL+1Aq82zSu8VQNB4S3Gk8e7Qs3VwBDJAhmRZcFqkl3tQu36g/Foh5I5ig==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.2.tgz", + "integrity": "sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==", "dev": true, "engines": { "node": "*" @@ -13744,6 +13416,18 @@ "integrity": "sha512-PuExPYUiu6qMBQb4l06ecm6T6ujzhmh+MeJcW9wa89PoAz5pvd4zPgN5WJV104mb6S2T1AwNIAaB70JNrLQWhg==", "dev": true }, + "node_modules/ip-regex": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ip-regex/-/ip-regex-5.0.0.tgz", + "integrity": "sha512-fOCG6lhoKKakwv+C6KdsOnGvgXnmgfmp0myi3bcNwj3qfwPAxRKWEuFhvEFF7ceYIz6+1jRZ+yguLFAmUNPEfw==", + "peer": true, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/is-alphabetical": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-1.0.4.tgz", @@ -14456,9 +14140,9 @@ } }, "node_modules/jackspeak": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-2.3.3.tgz", - "integrity": "sha512-R2bUw+kVZFS/h1AZqBKrSgDmdmjApzgY0AlCPumopFiAlbUxE2gf+SCuBzQ0cP5hHmUmFYF5yw55T97Th5Kstg==", + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-2.3.6.tgz", + "integrity": "sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ==", "dev": true, "dependencies": { "@isaacs/cliui": "^8.0.2" @@ -18868,9 +18552,9 @@ } }, "node_modules/miniflare": { - "version": "3.20230918.0", - "resolved": "https://registry.npmjs.org/miniflare/-/miniflare-3.20230918.0.tgz", - "integrity": "sha512-Dd29HB7ZlT1CXB2tPH8nW6fBOOXi/m7qFZHjKm2jGS+1OaGfrv0PkT5UspWW5jQi8rWI87xtordAUiIJkwWqRw==", + "version": "3.20230922.0", + "resolved": "https://registry.npmjs.org/miniflare/-/miniflare-3.20230922.0.tgz", + "integrity": "sha512-1h8c7b0Ouoml7TmU2mtJo4k/DKMX4ift1vOxyfcktPY/0lqeiRNYulcOCPcF94maI4uATdBIO6Fx/zN2c2Ew0A==", "dev": true, "dependencies": { "acorn": "^8.8.0", @@ -18881,7 +18565,7 @@ "source-map-support": "0.5.21", "stoppable": "^1.1.0", "undici": "^5.22.1", - "workerd": "1.20230904.0", + "workerd": "1.20230922.0", "ws": "^8.11.0", "youch": "^3.2.2", "zod": "^3.20.6" @@ -18910,9 +18594,9 @@ } }, "node_modules/miniflare/node_modules/undici": { - "version": "5.25.1", - "resolved": "https://registry.npmjs.org/undici/-/undici-5.25.1.tgz", - "integrity": "sha512-nTw6b2G2OqP6btYPyghCgV4hSwjJlL/78FMJatVLCa3otj6PCOQSt6dVtYt82OtNqFz8XsnJ+vsXLADPXjPhqw==", + "version": "5.25.2", + "resolved": "https://registry.npmjs.org/undici/-/undici-5.25.2.tgz", + "integrity": "sha512-tch8RbCfn1UUH1PeVCXva4V8gDpGAud/w0WubD6sHC46vYQ3KDxL+xv1A2UxK0N6jrVedutuPHxe1XIoqerwMw==", "dev": true, "dependencies": { "busboy": "^1.6.0" @@ -19002,60 +18686,20 @@ } }, "node_modules/modern-node-polyfills": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/modern-node-polyfills/-/modern-node-polyfills-0.1.3.tgz", - "integrity": "sha512-/4dB85Sdkt9MjWwtpKnsNTYhh0+fqjFC4ZEgDP4B0e6kyzbGUnX4NDxTUCaVwRLVF9gcEDcRQjol8pn05B3TUQ==", + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/modern-node-polyfills/-/modern-node-polyfills-1.0.0.tgz", + "integrity": "sha512-w1yb6ae5qSUJJ2u41krkUAxs+L7i9143Qam8EuXwDMeZHxl1JN8RfTSXG4S2bt0RHIRMeoWm/HCeO0pNIHmIYQ==", "dev": true, "dependencies": { - "@jspm/core": "2.0.0-beta.24", - "@rollup/pluginutils": "^3.1.0", - "esbuild": "^0.14.54", + "@jspm/core": "^2.0.1", + "@rollup/pluginutils": "^5.0.2", "local-pkg": "^0.4.3" - } - }, - "node_modules/modern-node-polyfills/node_modules/@rollup/pluginutils": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-3.1.0.tgz", - "integrity": "sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg==", - "dev": true, - "dependencies": { - "@types/estree": "0.0.39", - "estree-walker": "^1.0.1", - "picomatch": "^2.2.2" }, "engines": { - "node": ">= 8.0.0" + "node": ">=14.0.0" }, "peerDependencies": { - "rollup": "^1.20.0||^2.0.0" - } - }, - "node_modules/modern-node-polyfills/node_modules/@types/estree": { - "version": "0.0.39", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.39.tgz", - "integrity": "sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==", - "dev": true - }, - "node_modules/modern-node-polyfills/node_modules/estree-walker": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-1.0.1.tgz", - "integrity": "sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg==", - "dev": true - }, - "node_modules/modern-node-polyfills/node_modules/rollup": { - "version": "2.79.1", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.79.1.tgz", - "integrity": "sha512-uKxbd0IhMZOhjAiD5oAFp7BqvkA4Dv47qpOCtaNvng4HBwdbWtdOh8f5nZNuk2rp51PMGk3bzfWu5oayNEuYnw==", - "dev": true, - "peer": true, - "bin": { - "rollup": "dist/bin/rollup" - }, - "engines": { - "node": ">=10.0.0" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" + "esbuild": "^0.14.0 || ^0.15.0 || ^0.16.0 || ^0.17.0 || ^0.18.0" } }, "node_modules/module-definition": { @@ -19120,22 +18764,6 @@ "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", "dev": true }, - "node_modules/moize": { - "version": "6.1.6", - "resolved": "https://registry.npmjs.org/moize/-/moize-6.1.6.tgz", - "integrity": "sha512-vSKdIUO61iCmTqhdoIDrqyrtp87nWZUmBPniNjO0fX49wEYmyDO4lvlnFXiGcaH1JLE/s/9HbiK4LSHsbiUY6Q==", - "peer": true, - "dependencies": { - "fast-equals": "^3.0.1", - "micro-memoize": "^4.1.2" - } - }, - "node_modules/moize/node_modules/fast-equals": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/fast-equals/-/fast-equals-3.0.3.tgz", - "integrity": "sha512-NCe8qxnZFARSHGztGMZOO/PC1qa5MIFB5Hp66WdzbCRAz8U8US3bx1UTgLS49efBQPcUtO9gf5oVEY8o7y/7Kg==", - "peer": true - }, "node_modules/moo": { "version": "0.5.2", "resolved": "https://registry.npmjs.org/moo/-/moo-0.5.2.tgz", @@ -19398,9 +19026,9 @@ } }, "node_modules/node-sql-parser": { - "version": "4.10.0", - "resolved": "https://registry.npmjs.org/node-sql-parser/-/node-sql-parser-4.10.0.tgz", - "integrity": "sha512-P4LZNX8drf+0X5zPtcE5o1SV7Wn4VpTGSYOnN8uY+TswtHrg3ymb193tYpF8EMp2LhGqqDUqTAnCr8hqjN3uQw==", + "version": "4.11.0", + "resolved": "https://registry.npmjs.org/node-sql-parser/-/node-sql-parser-4.11.0.tgz", + "integrity": "sha512-ElheoPibjc7IVyRdsORgkzJi0DWm3f0LYSsm/eJIeUt3M/csDLTblLDR4zl5Qi7jmVjJ1KpEkPKSbgVGEzU5Xw==", "dev": true, "dependencies": { "big-integer": "^1.6.48" @@ -20412,9 +20040,9 @@ } }, "node_modules/playwright-core": { - "version": "1.38.0", - "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.38.0.tgz", - "integrity": "sha512-f8z1y8J9zvmHoEhKgspmCvOExF2XdcxMW8jNRuX4vkQFrzV4MlZ55iwb5QeyiFQgOFCUolXiRHgpjSEnqvO48g==", + "version": "1.38.1", + "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.38.1.tgz", + "integrity": "sha512-tQqNFUKa3OfMf4b2jQ7aGLB8o9bS3bOY0yMEtldtC2+spf8QXG9zvXLTXUeRsoNuxEYMgLYR+NXfAa1rjKRcrg==", "dev": true, "bin": { "playwright-core": "cli.js" @@ -20608,9 +20236,9 @@ } }, "node_modules/postcss-custom-properties": { - "version": "13.3.1", - "resolved": "https://registry.npmjs.org/postcss-custom-properties/-/postcss-custom-properties-13.3.1.tgz", - "integrity": "sha512-TAWyOLz95GGMqDK3KJfi+IvY0MDCR72yBtJBAwxSw2iJ8WbBvIo42p7Luie1yRht3ctQlMBG+wDcFqSBtSpGWw==", + "version": "13.3.2", + "resolved": "https://registry.npmjs.org/postcss-custom-properties/-/postcss-custom-properties-13.3.2.tgz", + "integrity": "sha512-2Coszybpo8lpLY24vy2CYv9AasiZ39/bs8Imv0pWMq55Gl8NWzfc24OAo3zIX7rc6uUJAqESnVOMZ6V6lpMjJA==", "dev": true, "funding": [ { @@ -20623,9 +20251,9 @@ } ], "dependencies": { - "@csstools/cascade-layer-name-parser": "^1.0.4", - "@csstools/css-parser-algorithms": "^2.3.1", - "@csstools/css-tokenizer": "^2.2.0", + "@csstools/cascade-layer-name-parser": "^1.0.5", + "@csstools/css-parser-algorithms": "^2.3.2", + "@csstools/css-tokenizer": "^2.2.1", "postcss-value-parser": "^4.2.0" }, "engines": { @@ -20909,9 +20537,9 @@ } }, "node_modules/postcss-lab-function": { - "version": "6.0.4", - "resolved": "https://registry.npmjs.org/postcss-lab-function/-/postcss-lab-function-6.0.4.tgz", - "integrity": "sha512-CAgjmxoAoBgZqotwyRX0osAfPOSAwrUanNT0O0ibHapDAiyv/uDJKhy2j6IdFAwnw6XwwXMP4wwnd5ncXuzTbw==", + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/postcss-lab-function/-/postcss-lab-function-6.0.5.tgz", + "integrity": "sha512-v1NG08v7tN9n76rA5j5HQ4sRu/kqXBuOFNAYhfHqbyDQ1WbsGKfPNN9VnJSSI3V0KIlShodYQPf3ORjMSo1w9g==", "dev": true, "funding": [ { @@ -20924,9 +20552,9 @@ } ], "dependencies": { - "@csstools/css-color-parser": "^1.3.1", - "@csstools/css-parser-algorithms": "^2.3.1", - "@csstools/css-tokenizer": "^2.2.0", + "@csstools/css-color-parser": "^1.3.2", + "@csstools/css-parser-algorithms": "^2.3.2", + "@csstools/css-tokenizer": "^2.2.1", "@csstools/postcss-progressive-custom-properties": "^3.0.1" }, "engines": { @@ -22410,9 +22038,9 @@ } }, "node_modules/pure-rand": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/pure-rand/-/pure-rand-6.0.3.tgz", - "integrity": "sha512-KddyFewCsO0j3+np81IQ+SweXLDnDQTs5s67BOnrYmYe/yNmUhttQyGsYzy8yUnoljGAQ9sl38YB4vH8ur7Y+w==", + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/pure-rand/-/pure-rand-6.0.4.tgz", + "integrity": "sha512-LA0Y9kxMYv47GIPJy6MI84fqTd2HmYZI83W/kM/SkKfDlajnZYfmXFTxkbY+xSBPkLJxltMa9hIkmdc29eguMA==", "dev": true, "funding": [ { @@ -23800,9 +23428,9 @@ "dev": true }, "node_modules/rollup": { - "version": "3.29.2", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.29.2.tgz", - "integrity": "sha512-CJouHoZ27v6siztc21eEQGo0kIcE5D1gVPA571ez0mMYb25LGYGKnVNXpEj5MGlepmDWGXNjDB5q7uNiPHC11A==", + "version": "3.29.3", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.29.3.tgz", + "integrity": "sha512-T7du6Hum8jOkSWetjRgbwpM6Sy0nECYrYRSmZjayFcOddtKJWU4d17AC3HNUk7HRuqy4p+G7aEZclSHytqUmEg==", "dev": true, "bin": { "rollup": "dist/bin/rollup" @@ -26669,9 +26297,9 @@ } }, "node_modules/update-browserslist-db": { - "version": "1.0.12", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.12.tgz", - "integrity": "sha512-tE1smlR58jxbFMtrMpFNRmsrOXlpNXss965T1CrpwuZUzUAg/TBQc94SpyhDLSzrqrJS9xTRBthnZAGcE1oaxg==", + "version": "1.0.13", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz", + "integrity": "sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==", "dev": true, "funding": [ { @@ -26798,6 +26426,12 @@ "node": ">=10.12.0" } }, + "node_modules/v8-to-istanbul/node_modules/convert-source-map": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", + "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", + "dev": true + }, "node_modules/validate-npm-package-license": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", @@ -26980,9 +26614,9 @@ } }, "node_modules/vite-node": { - "version": "0.34.4", - "resolved": "https://registry.npmjs.org/vite-node/-/vite-node-0.34.4.tgz", - "integrity": "sha512-ho8HtiLc+nsmbwZMw8SlghESEE3KxJNp04F/jPUCLVvaURwt0d+r9LxEqCX5hvrrOQ0GSyxbYr5ZfRYhQ0yVKQ==", + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/vite-node/-/vite-node-0.34.5.tgz", + "integrity": "sha512-RNZ+DwbCvDoI5CbCSQSyRyzDTfFvFauvMs6Yq4ObJROKlIKuat1KgSX/Ako5rlDMfVCyMcpMRMTkJBxd6z8YRA==", "dev": true, "dependencies": { "cac": "^6.7.14", @@ -26990,7 +26624,7 @@ "mlly": "^1.4.0", "pathe": "^1.1.1", "picocolors": "^1.0.0", - "vite": "^3.0.0 || ^4.0.0" + "vite": "^3.0.0 || ^4.0.0 || ^5.0.0-0" }, "bin": { "vite-node": "vite-node.mjs" @@ -27023,73 +26657,20 @@ "vite": "*" } }, - "node_modules/vite/node_modules/@esbuild/linux-loong64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.18.20.tgz", - "integrity": "sha512-nXW8nqBTrOpDLPgPY9uV+/1DjxoQ7DoB2N8eocyq8I9XuqJ7BiAMDMf9n1xZM9TgW0J8zrquIb/A7s3BJv7rjg==", - "cpu": [ - "loong64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/vite/node_modules/esbuild": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.18.20.tgz", - "integrity": "sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA==", - "dev": true, - "hasInstallScript": true, - "bin": { - "esbuild": "bin/esbuild" - }, - "engines": { - "node": ">=12" - }, - "optionalDependencies": { - "@esbuild/android-arm": "0.18.20", - "@esbuild/android-arm64": "0.18.20", - "@esbuild/android-x64": "0.18.20", - "@esbuild/darwin-arm64": "0.18.20", - "@esbuild/darwin-x64": "0.18.20", - "@esbuild/freebsd-arm64": "0.18.20", - "@esbuild/freebsd-x64": "0.18.20", - "@esbuild/linux-arm": "0.18.20", - "@esbuild/linux-arm64": "0.18.20", - "@esbuild/linux-ia32": "0.18.20", - "@esbuild/linux-loong64": "0.18.20", - "@esbuild/linux-mips64el": "0.18.20", - "@esbuild/linux-ppc64": "0.18.20", - "@esbuild/linux-riscv64": "0.18.20", - "@esbuild/linux-s390x": "0.18.20", - "@esbuild/linux-x64": "0.18.20", - "@esbuild/netbsd-x64": "0.18.20", - "@esbuild/openbsd-x64": "0.18.20", - "@esbuild/sunos-x64": "0.18.20", - "@esbuild/win32-arm64": "0.18.20", - "@esbuild/win32-ia32": "0.18.20", - "@esbuild/win32-x64": "0.18.20" - } - }, "node_modules/vitest": { - "version": "0.34.4", - "resolved": "https://registry.npmjs.org/vitest/-/vitest-0.34.4.tgz", - "integrity": "sha512-SE/laOsB6995QlbSE6BtkpXDeVNLJc1u2LHRG/OpnN4RsRzM3GQm4nm3PQCK5OBtrsUqnhzLdnT7se3aeNGdlw==", + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/vitest/-/vitest-0.34.5.tgz", + "integrity": "sha512-CPI68mmnr2DThSB3frSuE5RLm9wo5wU4fbDrDwWQQB1CWgq9jQVoQwnQSzYAjdoBOPoH2UtXpOgHVge/uScfZg==", "dev": true, "dependencies": { "@types/chai": "^4.3.5", "@types/chai-subset": "^1.3.3", "@types/node": "*", - "@vitest/expect": "0.34.4", - "@vitest/runner": "0.34.4", - "@vitest/snapshot": "0.34.4", - "@vitest/spy": "0.34.4", - "@vitest/utils": "0.34.4", + "@vitest/expect": "0.34.5", + "@vitest/runner": "0.34.5", + "@vitest/snapshot": "0.34.5", + "@vitest/spy": "0.34.5", + "@vitest/utils": "0.34.5", "acorn": "^8.9.0", "acorn-walk": "^8.2.0", "cac": "^6.7.14", @@ -27104,7 +26685,7 @@ "tinybench": "^2.5.0", "tinypool": "^0.7.0", "vite": "^3.1.0 || ^4.0.0 || ^5.0.0-0", - "vite-node": "0.34.4", + "vite-node": "0.34.5", "why-is-node-running": "^2.2.2" }, "bin": { @@ -27309,18 +26890,18 @@ "dev": true }, "node_modules/webdriver": { - "version": "8.16.11", - "resolved": "https://registry.npmjs.org/webdriver/-/webdriver-8.16.11.tgz", - "integrity": "sha512-pDSOUsq6DOHCUNOw9WUjw1XKZcEqRaKeEXy6V/S2/qPv6HtJBAsZAVgJzKjH+4dVeLmmSphcIEUfIegcFwX7cQ==", + "version": "8.16.15", + "resolved": "https://registry.npmjs.org/webdriver/-/webdriver-8.16.15.tgz", + "integrity": "sha512-lzZaS88ivm6RmPmb7MGafbrXkR6K4/btBMaZz1lgYxS9i/yPuiAq7tMSddM8dXTVkRpXmckICUfSj5oBmcth1Q==", "dev": true, "dependencies": { "@types/node": "^20.1.0", "@types/ws": "^8.5.3", - "@wdio/config": "8.16.11", + "@wdio/config": "8.16.15", "@wdio/logger": "8.11.0", "@wdio/protocols": "8.16.5", - "@wdio/types": "8.16.7", - "@wdio/utils": "8.16.11", + "@wdio/types": "8.16.12", + "@wdio/utils": "8.16.15", "deepmerge-ts": "^5.1.0", "got": "^ 12.6.1", "ky": "^0.33.0", @@ -27355,9 +26936,9 @@ } }, "node_modules/webdriver/node_modules/@types/node": { - "version": "20.6.3", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.6.3.tgz", - "integrity": "sha512-HksnYH4Ljr4VQgEy2lTStbCKv/P590tmPe5HqOnv9Gprffgv5WXAY+Y5Gqniu0GGqeTCUdBnzC3QSrzPkBkAMA==", + "version": "20.7.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.7.0.tgz", + "integrity": "sha512-zI22/pJW2wUZOVyguFaUL1HABdmSVxpXrzIqkjsHmyUjNhPoWM1CKfvVuXfetHhIok4RY573cqS0mZ1SJEnoTg==", "dev": true }, "node_modules/webdriver/node_modules/cacheable-lookup": { @@ -27486,18 +27067,18 @@ } }, "node_modules/webdriverio": { - "version": "8.16.11", - "resolved": "https://registry.npmjs.org/webdriverio/-/webdriverio-8.16.11.tgz", - "integrity": "sha512-r9vefYj1ULR2aU8u3fi5neX2m7zjN+wwh/WgdtRFIolpBBUhyaXZIxiZeD6oGnq7H1mafvyC6p+vPjX129A6mg==", + "version": "8.16.15", + "resolved": "https://registry.npmjs.org/webdriverio/-/webdriverio-8.16.15.tgz", + "integrity": "sha512-M3WJnXoqDFA9vyfPm8p0qpqACjyuPHGKP/iydpiMVcgq++msgInJhu04emnXwk8yY/gGqnacD9434E4lhEA2xA==", "dev": true, "dependencies": { "@types/node": "^20.1.0", - "@wdio/config": "8.16.11", + "@wdio/config": "8.16.15", "@wdio/logger": "8.11.0", "@wdio/protocols": "8.16.5", "@wdio/repl": "8.10.1", - "@wdio/types": "8.16.7", - "@wdio/utils": "8.16.11", + "@wdio/types": "8.16.12", + "@wdio/utils": "8.16.15", "archiver": "^6.0.0", "aria-query": "^5.0.0", "css-shorthand-properties": "^1.1.1", @@ -27514,7 +27095,7 @@ "resq": "^1.9.1", "rgb2hex": "0.2.5", "serialize-error": "^11.0.1", - "webdriver": "8.16.11" + "webdriver": "8.16.15" }, "engines": { "node": "^16.13 || >=18" @@ -27529,9 +27110,9 @@ } }, "node_modules/webdriverio/node_modules/@types/node": { - "version": "20.6.3", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.6.3.tgz", - "integrity": "sha512-HksnYH4Ljr4VQgEy2lTStbCKv/P590tmPe5HqOnv9Gprffgv5WXAY+Y5Gqniu0GGqeTCUdBnzC3QSrzPkBkAMA==", + "version": "20.7.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.7.0.tgz", + "integrity": "sha512-zI22/pJW2wUZOVyguFaUL1HABdmSVxpXrzIqkjsHmyUjNhPoWM1CKfvVuXfetHhIok4RY573cqS0mZ1SJEnoTg==", "dev": true }, "node_modules/webdriverio/node_modules/archiver": { @@ -27873,9 +27454,9 @@ "dev": true }, "node_modules/workerd": { - "version": "1.20230904.0", - "resolved": "https://registry.npmjs.org/workerd/-/workerd-1.20230904.0.tgz", - "integrity": "sha512-t9znszH0rQGK4mJGvF9L3nN0qKEaObAGx0JkywFtAwH8OkSn+YfQbHNZE+YsJ4qa1hOz1DCNEk08UDFRBaYq4g==", + "version": "1.20230922.0", + "resolved": "https://registry.npmjs.org/workerd/-/workerd-1.20230922.0.tgz", + "integrity": "sha512-iFe0tqoHsxgZXCaURVNKYtc0QnWdjORZJ0WzaasdSK4STOwV1aD7yC2v5o3HwnNTaJOpNt7H09AYWKB3y1ju8A==", "dev": true, "hasInstallScript": true, "bin": { @@ -27885,17 +27466,17 @@ "node": ">=16" }, "optionalDependencies": { - "@cloudflare/workerd-darwin-64": "1.20230904.0", - "@cloudflare/workerd-darwin-arm64": "1.20230904.0", - "@cloudflare/workerd-linux-64": "1.20230904.0", - "@cloudflare/workerd-linux-arm64": "1.20230904.0", - "@cloudflare/workerd-windows-64": "1.20230904.0" + "@cloudflare/workerd-darwin-64": "1.20230922.0", + "@cloudflare/workerd-darwin-arm64": "1.20230922.0", + "@cloudflare/workerd-linux-64": "1.20230922.0", + "@cloudflare/workerd-linux-arm64": "1.20230922.0", + "@cloudflare/workerd-windows-64": "1.20230922.0" } }, "node_modules/wrangler": { - "version": "3.9.0", - "resolved": "https://registry.npmjs.org/wrangler/-/wrangler-3.9.0.tgz", - "integrity": "sha512-Ho1A76KxbqfcRgCsuN6xGar3BVPyn4oVWM9zx0HvEVhT9wQ7n/LvB6GlPdXKABqEBYhVe/oTH72S5TgWl0DgaA==", + "version": "3.10.0", + "resolved": "https://registry.npmjs.org/wrangler/-/wrangler-3.10.0.tgz", + "integrity": "sha512-426QvIxEU7JDiZrsCF+B84lWw9BeMVcH4kzn9MZlVTqUD21CbLS1bEs9pdaB8nsnB9Y/n5JTH8bv/vpTBO0Z4g==", "dev": true, "dependencies": { "@cloudflare/kv-asset-handler": "^0.2.0", @@ -27904,7 +27485,7 @@ "blake3-wasm": "^2.1.5", "chokidar": "^3.5.3", "esbuild": "0.17.19", - "miniflare": "3.20230918.0", + "miniflare": "3.20230922.0", "nanoid": "^3.3.3", "path-to-regexp": "^6.2.0", "selfsigned": "^2.0.1", @@ -28608,9 +28189,9 @@ } }, "node_modules/youch": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/youch/-/youch-3.3.1.tgz", - "integrity": "sha512-Rg9ioi+AkKyje2Hk4qILSVvayaFW98KTsOJ4aIkjDf97LZX5WJVIHZmFLnM4ThcVofHo/fbbwtYajfBPHFOVtg==", + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/youch/-/youch-3.3.2.tgz", + "integrity": "sha512-9cwz/z7abtcHOIuH45nzmUFCZbyJA1nLqlirKvyNRx4wDMhqsBaifAJzBej7L4fsVPjFxYq3NK3GAcfvZsydFw==", "dev": true, "dependencies": { "cookie": "^0.5.0", diff --git a/package.json b/package.json index 832cc93..161b92d 100644 --- a/package.json +++ b/package.json @@ -3,7 +3,7 @@ "publishConfig": { "access": "public" }, - "version": "1.0.103", + "version": "1.0.104", "license": "GPL-3.0-or-later", "name": "@clevercanyon/utilities.cfw", "description": "Utilities for JavaScript apps running in a Cloudflare Worker environment.", @@ -37,7 +37,7 @@ "default": "./dist/geo.js" } }, - "sideEffects": ["./src/resources/init-env.ts", "./src/cfw.ts", "./src/geo.ts", "./src/index.ts"], + "sideEffects": ["**/*.{css,scss,less}", "./src/resources/init-env.ts"], "module": "./dist/index.js", "main": "./dist/index.js", "browser": "", @@ -50,21 +50,21 @@ }, "dependencies": {}, "peerDependencies": { - "@clevercanyon/utilities": "^1.0.266", + "@clevercanyon/utilities": "^1.0.277", "@cloudflare/kv-asset-handler": "^0.2.0" }, "peerDependenciesMeta": {}, "optionalDependencies": {}, "bundleDependencies": [], "devDependencies": { - "@clevercanyon/dev-deps": "^1.0.230" + "@clevercanyon/dev-deps": "^1.0.231" }, "overrides": {}, "cpu": ["x64", "arm64"], "os": ["darwin", "linux"], "engines": { - "node": "^19.1.0 || ^20.5.1", - "npm": "^8.19.3 || ^9.2.0" + "node": "^19.1.0 || ^20.5.0", + "npm": "^8.19.3 || ^9.8.0 || ^10.0.0" }, "config": { "c10n": { @@ -75,12 +75,14 @@ "build": { "appType": "lib", "targetEnv": "cfw", - "entryFiles": [] + "entryFiles": [], + "sideEffects": [] }, "ssrBuild": { "appType": "", "targetEnv": "", - "entryFiles": [] + "entryFiles": [], + "sideEffects": [] }, "github": { "teams": { diff --git a/src/cfw.ts b/src/cfw.ts index be414f5..ad75218 100644 --- a/src/cfw.ts +++ b/src/cfw.ts @@ -6,12 +6,7 @@ import './resources/init-env.ts'; import type { $type } from '@clevercanyon/utilities'; import { $env, $http, $json, $str, $url } from '@clevercanyon/utilities'; -import { - MethodNotAllowedError as cfKVAꓺMethodNotAllowedError, - NotFoundError as cfKVAꓺNotFoundError, - getAssetFromKV as cfKVAꓺgetAssetFromKV, - mapRequestToAsset as cfKVAꓺmapRequestToAsset, -} from '@cloudflare/kv-asset-handler'; +import * as cfKVA from '@cloudflare/kv-asset-handler'; const cache = (caches as unknown as $type.cf.CacheStorage).default; @@ -61,7 +56,7 @@ export const handleFetchEvent = async (ifeData: InitialFetchEventData): Promise< const { env, ctx, routes } = ifeData; $env.capture('@global', env); // Captures environment vars. - const appBasePath = String($env.get('@top', 'APP_BASE_PATH', '')); + const appBasePath = $env.get('APP_BASE_PATH', { type: 'string', default: '' }); try { request = $http.prepareRequest(request, {}) as $type.cf.Request; @@ -69,7 +64,7 @@ export const handleFetchEvent = async (ifeData: InitialFetchEventData): Promise< const feData = { request, env, ctx, routes, url }; if ( $http.requestPathIsStatic(request, url) && // - $env.get('@top', '__STATIC_CONTENT' /* Worker site? */) && + $env.get('__STATIC_CONTENT' /* Worker site? */) && $str.matches(url.pathname, appBasePath + '/assets/**') ) { return handleFetchCache(handleFetchStaticAssets, feData); @@ -126,7 +121,7 @@ export const handleFetchCache = async (route: Route, feData: FetchEventData): Pr */ export const handleFetchDynamics = async (feData: FetchEventData): Promise<$type.cf.Response> => { const { request, routes, url } = feData; - const appBasePath = String($env.get('@top', 'APP_BASE_PATH', '')); + const appBasePath = $env.get('APP_BASE_PATH', { type: 'string', default: '' }); for (const [routeSubpathGlob, routeSubpathHandler] of Object.entries(routes.subpathGlobs)) { if ($str.matches(url.pathname, appBasePath + '/' + routeSubpathGlob)) { @@ -145,7 +140,7 @@ export const handleFetchDynamics = async (feData: FetchEventData): Promise<$type */ export const handleFetchStaticAssets = async (feData: FetchEventData): Promise<$type.cf.Response> => { const { request, ctx } = feData; - const appBasePath = String($env.get('@top', 'APP_BASE_PATH', '')); + const appBasePath = $env.get('APP_BASE_PATH', { type: 'string', default: '' }); try { const kvAssetEventData = { @@ -154,8 +149,8 @@ export const handleFetchStaticAssets = async (feData: FetchEventData): Promise<$ ctx.waitUntil(promise); }, }; - const response = await cfKVAꓺgetAssetFromKV(kvAssetEventData, { - ASSET_NAMESPACE: $env.get('@top', '__STATIC_CONTENT') as string, + const response = await cfKVA.getAssetFromKV(kvAssetEventData, { + ASSET_NAMESPACE: $env.get('__STATIC_CONTENT', { type: 'string', default: '' }), // @ts-ignore: This is dynamically resolved by Cloudflare. // eslint-disable-next-line @typescript-eslint/no-unsafe-argument -- manifest ok. ASSET_MANIFEST: $json.parse(await import('__STATIC_CONTENT_MANIFEST')) as { [x: string]: string }, @@ -170,16 +165,16 @@ export const handleFetchStaticAssets = async (feData: FetchEventData): Promise<$ const regExp = new RegExp('^' + $str.escRegExp(appBasePath + '/assets/'), 'u'); url.pathname = url.pathname.replace(regExp, '/'); // Removes `/assets` prefix. - return cfKVAꓺmapRequestToAsset(new Request(url, request)); + return cfKVA.mapRequestToAsset(new Request(url, request)); }, }); return $http.prepareResponse(request, { ...response }) as $type.cf.Response; // } catch (error) { - if (error instanceof cfKVAꓺNotFoundError) { + if (error instanceof cfKVA.NotFoundError) { return $http.prepareResponse(request, { status: 404 }) as $type.cf.Response; } - if (error instanceof cfKVAꓺMethodNotAllowedError) { + if (error instanceof cfKVA.MethodNotAllowedError) { return $http.prepareResponse(request, { status: 405 }) as $type.cf.Response; } return $http.prepareResponse(request, { status: 500 }) as $type.cf.Response; diff --git a/src/geo.ts b/src/geo.ts index 2659d0a..af66813 100644 --- a/src/geo.ts +++ b/src/geo.ts @@ -5,7 +5,7 @@ import './resources/init-env.ts'; import type { $type } from '@clevercanyon/utilities'; -import type { FetchEventData as $cfwꓺFetchEventData } from './cfw.ts'; +import { $cfw } from './index.ts'; /** * Gets geo property. @@ -14,7 +14,7 @@ import type { FetchEventData as $cfwꓺFetchEventData } from './cfw.ts'; * * @returns Geo property value. */ -export const prop = (fed: $cfwꓺFetchEventData, prop: string): string => { +export const prop = (fed: $cfw.FetchEventData, prop: string): string => { const { request } = fed; // Request extraction. const r = request as unknown as $type.cf.Request; // Includes `cf` property. return String(r.cf && prop in r.cf ? r.cf[prop as keyof typeof r.cf] || '' : ''); diff --git a/src/resources/init-env.ts b/src/resources/init-env.ts index 2b0afb2..fb04493 100644 --- a/src/resources/init-env.ts +++ b/src/resources/init-env.ts @@ -2,7 +2,7 @@ * Environment vars. */ -import { capture as $envꓺcapture, setTopLevelObp as $envꓺsetTopLevelObp } from '@clevercanyon/utilities/env'; +import { $env } from '@clevercanyon/utilities'; /** * Acquires app package name. @@ -12,9 +12,9 @@ const appPkgName = $$__APP_PKG_NAME__$$; /** * Sets top-level object path. */ -$envꓺsetTopLevelObp(appPkgName); +$env.setTopLevelObp(appPkgName); /** * Captures environment vars. */ -$envꓺcapture(appPkgName, import.meta.env); +$env.capture(appPkgName, import.meta.env); diff --git a/tsconfig.json b/tsconfig.json index beb4a42..c8ad85b 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -7,10 +7,10 @@ * @note This entire file will be updated automatically. * @note Instead of editing here, please review `./tsconfig.mjs`. * - * Last generated using `./tsconfig.mjs` Thu, Sep 21, 2023, 6:04:41 AM EDT. + * Last generated using `./tsconfig.mjs` Wed, Sep 27, 2023, 4:09:09 PM EDT. */ { - "include": ["./*.d.ts", "./src/**/*"], + "include": ["./src/**/*", "./dev-types.d.ts"], "exclude": [ "**/._*/**", "**/.~*/**", @@ -64,11 +64,11 @@ "**/Temporary Items/**", "**/.*/**", "**/*.tsbuildinfo/**", - "**/tsconfig.*/**", - "**/wrangler.*/**", "**/*.config.*/**", - "**/config.gypi/**", + "**/wrangler.*/**", + "**/tsconfig.*/**", "**/package.json/**", + "**/config.gypi/**", "**/yarn.lock/**", "**/composer.lock/**", "**/package-lock.json/**", @@ -90,7 +90,6 @@ "emitDeclarationOnly": true, "strict": true, "skipLibCheck": true, - "experimentalDecorators": true, "target": "es2022", "lib": ["es2022", "webworker"], "types": ["vite/client", "@types/mdx"], diff --git a/wrangler.toml b/wrangler.toml index ebeec55..918ccdb 100644 --- a/wrangler.toml +++ b/wrangler.toml @@ -7,7 +7,7 @@ # @note This entire file will be updated automatically. # @note Instead of editing here, please review `./wrangler.mjs`. # -# Last generated using `./wrangler.mjs` Thu, Sep 21, 2023, 6:04:42 AM EDT. +# Last generated using `./wrangler.mjs` Wed, Sep 27, 2023, 4:09:10 PM EDT. ## compatibility_date = "2023-08-15" @@ -18,14 +18,9 @@ account_id = "f1176464a976947aa5665d989814a4b1" workers_dev = false main = "./dist/index.js" -[[rules]] -type = "Text" -globs = [ ] -fallthrough = false - [[rules]] type = "ESModule" -globs = [ "**/*.js", "**/*.mjs", "**/*.jsx", "**/*.mjsx" ] +globs = [ "**/*.js", "**/*.jsx", "**/*.mjs", "**/*.mjsx" ] fallthrough = false [[rules]] @@ -34,13 +29,269 @@ globs = [ "**/*.cjs", "**/*.cjsx" ] fallthrough = false [[rules]] -type = "CompiledWasm" -globs = [ "**/*.wasm" ] +type = "Text" +globs = [ + "**/*.txt", + "**/*.text", + "**/*.mdx", + "**/*.md", + "**/*.markdown", + "**/*.mdown", + "**/*.mdwn", + "**/*.mkd", + "**/*.mdtxt", + "**/*.mdtext", + "**/*.html", + "**/*.htm", + "**/*.shtml", + "**/*.shtm", + "**/*.xhtml", + "**/*.xhtm", + "**/*.php", + "**/*.phtml", + "**/*.phtm", + "**/*.phps", + "**/*.asp", + "**/*.aspx", + "**/*.rb", + "**/*.py", + "**/*.pl6", + "**/*.perl6", + "**/*.pl", + "**/*.plx", + "**/*.cgi", + "**/*.ppl", + "**/*.perl", + "**/*.bash", + "**/*.zsh", + "**/*.sh", + "**/*.c", + "**/*.cs", + "**/*.cpp", + "**/*.cc", + "**/*.o", + "**/*.h", + "**/*.dockerfile", + "**/*.jxa", + "**/*.applescript", + "**/*.bat", + "**/*.ts", + "**/*.mts", + "**/*.cts", + "**/*.tsx", + "**/*.mtsx", + "**/*.ctsx", + "**/*.css", + "**/*.scss", + "**/*.less", + "**/*.xsl", + "**/*.xslt", + "**/*.hta", + "**/*.htc", + "**/*.ejs", + "**/*.liquid", + "**/*.tpl", + "**/*.sql", + "**/*.sqlite", + "**/*.csv", + "**/*.tsv", + "**/*.json", + "**/*.json5", + "**/*.jsonld", + "**/*.toml", + "**/*.yaml", + "**/*.yml", + "**/*.ini", + "**/*.env", + "**/*.props", + "**/*.properties", + "**/*.conf", + "**/*.htaccess", + "**/*.htpasswd", + "**/*.po", + "**/*.pot", + "**/*.xml", + "**/*.xsd", + "**/*.dtd", + "**/*.ics", + "**/*.atom", + "**/*.rdf", + "**/*.rss", + "**/*.rss2", + "**/*.rss-http", + "**/*.log", + "**/*.vtt", + "**/*.srt", + "**/*.dfxp", + "**/*.babelrc", + "**/*.npmrc", + "**/*.yarnrc", + "**/*.inputrc", + "**/*.tsbuildinfo", + "**/*.editorconfig", + "**/*.shellcheckrc", + "**/*.browserslistrc", + "**/*.gitchange", + "**/*.gitconfig", + "**/*.gitattributes", + "**/*.gitignore", + "**/*.npmignore", + "**/*.dockerignore", + "**/*.vscodeignore", + "**/*.prettierignore", + "**/*.eslintignore", + "**/*.svg", + "**/*.csr", + "**/*.crt", + "**/*.pem", + "**/*.asc", + "**/*.kml" +] fallthrough = false [[rules]] type = "Data" -globs = [ ] +globs = [ + "**/*.rtx", + "**/*.rtf", + "**/*.pdf", + "**/*.class", + "**/*.mo", + "**/*.ai", + "**/*.bmp", + "**/*.eps", + "**/*.gif", + "**/*.heic", + "**/*.ico", + "**/*.jpg", + "**/*.jpeg", + "**/*.jpe", + "**/*.pict", + "**/*.png", + "**/*.apng", + "**/*.xcf", + "**/*.psd", + "**/*.pspimage", + "**/*.svgz", + "**/*.tiff", + "**/*.tif", + "**/*.webp", + "**/*.aac", + "**/*.flac", + "**/*.mid", + "**/*.midi", + "**/*.mka", + "**/*.mp3", + "**/*.m4a", + "**/*.m4b", + "**/*.ogg", + "**/*.oga", + "**/*.pls", + "**/*.ra", + "**/*.ram", + "**/*.wav", + "**/*.wax", + "**/*.wma", + "**/*.asf", + "**/*.avi", + "**/*.divx", + "**/*.flv", + "**/*.mkv", + "**/*.mov", + "**/*.qt", + "**/*.mp4", + "**/*.m4v", + "**/*.mpeg", + "**/*.mpg", + "**/*.mpe", + "**/*.ogv", + "**/*.webm", + "**/*.wm", + "**/*.wmv", + "**/*.wmx", + "**/*.otf", + "**/*.ttf", + "**/*.woff", + "**/*.woff2", + "**/*.eot", + "**/*.iso", + "**/*.dmg", + "**/*.tar", + "**/*.gtar", + "**/*.gz", + "**/*.tgz", + "**/*.gzip", + "**/*.rar", + "**/*.zip", + "**/*.7z", + "**/*.jar", + "**/*.node", + "**/*.phar", + "**/*.so", + "**/*.app", + "**/*.bin", + "**/*.com", + "**/*.dll", + "**/*.exe", + "**/*.blend", + "**/*.sketch", + "**/*.kmz", + "**/*.ps", + "**/*.fla", + "**/*.swf", + "**/*.key", + "**/*.numbers", + "**/*.pages", + "**/*.doc", + "**/*.docm", + "**/*.docx", + "**/*.dotm", + "**/*.dotx", + "**/*.mdb", + "**/*.mpp", + "**/*.one", + "**/*.onetoc", + "**/*.onetoc2", + "**/*.onepkg", + "**/*.oxps", + "**/*.ppt", + "**/*.pps", + "**/*.potm", + "**/*.potx", + "**/*.ppam", + "**/*.ppsm", + "**/*.ppsx", + "**/*.pptm", + "**/*.pptx", + "**/*.sldm", + "**/*.sldx", + "**/*.wri", + "**/*.xla", + "**/*.xls", + "**/*.xlt", + "**/*.xlw", + "**/*.xlam", + "**/*.xlsb", + "**/*.xlsm", + "**/*.xlsx", + "**/*.xltm", + "**/*.xltx", + "**/*.xps", + "**/*.odb", + "**/*.odc", + "**/*.odf", + "**/*.odg", + "**/*.odp", + "**/*.ods", + "**/*.odt", + "**/*.wpd", + "**/*.wp" +] +fallthrough = false + +[[rules]] +type = "CompiledWasm" +globs = [ "**/*.wasm" ] fallthrough = false [build] @@ -125,9 +376,11 @@ exclude = [ "dist", "!dist", ".*", - "tsconfig.*", - "wrangler.*", "*.config.*", + "wrangler.*", + "tsconfig.*", + "dev-types.d.ts", + "package.json", "config.gypi", "yarn.lock", "composer.lock",