diff --git a/dev/.files/bin/includes/core-projects.mjs b/dev/.files/bin/includes/core-projects.mjs index 5f49661..697cdcb 100644 --- a/dev/.files/bin/includes/core-projects.mjs +++ b/dev/.files/bin/includes/core-projects.mjs @@ -11,7 +11,7 @@ export default { updates: { ignore: [], order: [ - 'skeleton-dev-deps', + 'dev-deps', 'skeleton', 'madrun', diff --git a/dev/.files/bin/includes/utilities.mjs b/dev/.files/bin/includes/utilities.mjs index 71ee613..220b188 100755 --- a/dev/.files/bin/includes/utilities.mjs +++ b/dev/.files/bin/includes/utilities.mjs @@ -169,14 +169,14 @@ export default class u { if (!$is.plainObject(updates)) { throw new Error('u.updatePkg: Unable to parse `' + updatesFile + '`.'); } - if (await u.isPkgRepo('clevercanyon/skeleton-dev-deps')) { - if (updates.$ꓺdefaults?.['devDependenciesꓺ@clevercanyon/skeleton-dev-deps']) { - delete updates.$ꓺdefaults['devDependenciesꓺ@clevercanyon/skeleton-dev-deps']; + if (await u.isPkgRepo('clevercanyon/dev-deps')) { + if (updates.$ꓺdefaults?.['devDependenciesꓺ@clevercanyon/dev-deps']) { + delete updates.$ꓺdefaults['devDependenciesꓺ@clevercanyon/dev-deps']; } if ($is.array(updates.$ꓺunset)) { - updates.$ꓺunset.push('devDependenciesꓺ@clevercanyon/skeleton-dev-deps'); + updates.$ꓺunset.push('devDependenciesꓺ@clevercanyon/dev-deps'); } else { - updates.$ꓺunset = ['devDependenciesꓺ@clevercanyon/skeleton-dev-deps']; + updates.$ꓺunset = ['devDependenciesꓺ@clevercanyon/dev-deps']; } } $obj.patchDeep(pkg, updates); // Potentially declarative ops. diff --git a/dev/.files/bin/updater/data/package.json/updates.json b/dev/.files/bin/updater/data/package.json/updates.json index 0e07835..20cc924 100644 --- a/dev/.files/bin/updater/data/package.json/updates.json +++ b/dev/.files/bin/updater/data/package.json/updates.json @@ -37,7 +37,7 @@ "optionalDependencies": {}, "bundleDependencies": [], "devDependencies": {}, - "devDependenciesꓺ@clevercanyon/skeleton-dev-deps": "*", + "devDependenciesꓺ@clevercanyon/dev-deps": "*", "overrides": {}, "cpu": [], diff --git a/dev/.files/bin/updater/index.mjs b/dev/.files/bin/updater/index.mjs index cfe3161..dfdcc13 100644 --- a/dev/.files/bin/updater/index.mjs +++ b/dev/.files/bin/updater/index.mjs @@ -180,14 +180,14 @@ export default async ({ projDir }) => { if (!$is.plainObject(jsonUpdates)) { throw new Error('updater: Unable to parse `' + jsonUpdatesFile + '`.'); } - if ('./package.json' === relPath && (await isPkgRepo('clevercanyon/skeleton-dev-deps'))) { - if (jsonUpdates.$ꓺdefaults?.['devDependenciesꓺ@clevercanyon/skeleton-dev-deps']) { - delete jsonUpdates.$ꓺdefaults['devDependenciesꓺ@clevercanyon/skeleton-dev-deps']; + if ('./package.json' === relPath && (await isPkgRepo('clevercanyon/dev-deps'))) { + if (jsonUpdates.$ꓺdefaults?.['devDependenciesꓺ@clevercanyon/dev-deps']) { + delete jsonUpdates.$ꓺdefaults['devDependenciesꓺ@clevercanyon/dev-deps']; } if ($is.array(jsonUpdates.$ꓺunset)) { - jsonUpdates.$ꓺunset.push('devDependenciesꓺ@clevercanyon/skeleton-dev-deps'); + jsonUpdates.$ꓺunset.push('devDependenciesꓺ@clevercanyon/dev-deps'); } else { - jsonUpdates.$ꓺunset = ['devDependenciesꓺ@clevercanyon/skeleton-dev-deps']; + jsonUpdates.$ꓺunset = ['devDependenciesꓺ@clevercanyon/dev-deps']; } } $obj.patchDeep(json, jsonUpdates); // Potentially declarative ops. @@ -197,10 +197,10 @@ export default async ({ projDir }) => { } /** - * Updates `@clevercanyon/skeleton-dev-deps` in project dir. + * Updates `@clevercanyon/dev-deps` in project dir. */ - if (!(await isPkgRepo('clevercanyon/skeleton-dev-deps'))) { - log($chalk.green('Updating project to latest `@clevercanyon/skeleton-dev-deps`.')); - await $cmd.spawn('npm', ['udpate', '@clevercanyon/skeleton-dev-deps'], { cwd: projDir }); + if (!(await isPkgRepo('clevercanyon/dev-deps'))) { + log($chalk.green('Updating project to latest `@clevercanyon/dev-deps`.')); + await $cmd.spawn('npm', ['udpate', '@clevercanyon/dev-deps'], { cwd: projDir }); } }; diff --git a/dev/.files/docs/build-info/app-types.md b/dev/.files/docs/build-info/app-types.md index 480a574..467094e 100644 --- a/dev/.files/docs/build-info/app-types.md +++ b/dev/.files/docs/build-info/app-types.md @@ -2,7 +2,7 @@ ## Four Basic `appType` Options -- `spa` Single-page app. Must use an `index.html` entry. -- `mpa` Multipage app. Must use `index.html` entries. +- `spa` Single-page app. Must use `.html` entry. +- `mpa` Multipage app. Must use `.html` entries. - `cma` Custom-made app. Must use `.{ts,tsx}` entries. - `lib` Library code. Must use `.{ts,tsx}` entries. diff --git a/dev/.files/docs/build-info/possibilities.md b/dev/.files/docs/build-info/possibilities.md new file mode 100644 index 0000000..1a373e3 --- /dev/null +++ b/dev/.files/docs/build-info/possibilities.md @@ -0,0 +1,121 @@ +# `appType` + `targetEnv` Possibilities + +## Default Skeleton + Dependencies + +- [clevercanyon/skeleton](https://github.com/clevercanyon/skeleton) (`cma` on `any`) + - [clevercanyon/dev-deps](https://github.com/clevercanyon/dev-deps) + +## Naming Convention + +All skeleton repos should have a name in this format, at minimum. + +- `clevercanyon/skeleton`.`[app-type]`.`[target-env]` + +Skeleton variants should use a `.` separator preceding their slug. + +- `clevercanyon/skeleton`.`[app-type]`.`[target-env]`.`[variant]` + +## All Possible Combinations + +Our build system supports `appType` on `targetEnv` directives. However, not all combinations actually make sense. For example, we're not likely to create a `mpa` app and target a `webw` environment. The same with an `mpa` on `any`, because a multipage app needs to target something that will serve it as HTML. Likewise, creating a `cma` on `cfp` makes little sense. Instead, we'd create an `spa` or `mpa` on `cfp` app. + +### Single-Page Apps + +- clevercanyon/skeleton.spa `any` +- clevercanyon/skeleton.spa.node +- clevercanyon/skeleton.spa.cfw +- clevercanyon/skeleton.spa.cfp +- clevercanyon/skeleton.spa.web +- clevercanyon/skeleton.spa.webw + +### Multipage Apps + +- clevercanyon/skeleton.mpa `any` +- clevercanyon/skeleton.mpa.node +- clevercanyon/skeleton.mpa.cfw +- clevercanyon/skeleton.mpa.cfp +- clevercanyon/skeleton.mpa.web +- clevercanyon/skeleton.mpa.webw + +### Custom Apps + +- clevercanyon/skeleton (`cma` on `any`) +- clevercanyon/skeleton.cma.node +- clevercanyon/skeleton.cma.cfw +- clevercanyon/skeleton.cma.cfp +- clevercanyon/skeleton.cma.web +- clevercanyon/skeleton.cma.webw + +### Library Apps + +- clevercanyon/skeleton.lib `any` +- clevercanyon/skeleton.lib.node +- clevercanyon/skeleton.lib.cfw +- clevercanyon/skeleton.lib.cfp +- clevercanyon/skeleton.lib.web +- clevercanyon/skeleton.lib.webw + +## All Rational Combinations + +These lists include those from above that actually make sense, at least in theory. + +### Single-Page Apps + +- clevercanyon/skeleton.spa.node +- clevercanyon/skeleton.spa.cfw +- clevercanyon/skeleton.spa.cfp +- clevercanyon/skeleton.spa.web + +### Multipage Apps + +- clevercanyon/skeleton.mpa.node +- clevercanyon/skeleton.mpa.cfw +- clevercanyon/skeleton.mpa.cfp +- clevercanyon/skeleton.mpa.web + +### Custom Apps + +- clevercanyon/skeleton (`cma` on `any`) +- clevercanyon/skeleton.cma.node +- clevercanyon/skeleton.cma.cfw +- clevercanyon/skeleton.cma.cfp +- clevercanyon/skeleton.cma.web +- clevercanyon/skeleton.cma.webw + +### Library Apps + +- clevercanyon/skeleton.lib `any` +- clevercanyon/skeleton.lib.node +- clevercanyon/skeleton.lib.cfw +- clevercanyon/skeleton.lib.cfp +- clevercanyon/skeleton.lib.web +- clevercanyon/skeleton.lib.webw + +## Skeletons We Actually Need + +What do we really care about most, or will likely need? + +### Single-Page Apps + +- [clevercanyon/skeleton.spa.cfp](https://github.com/clevercanyon/skeleton.spa.cfp): Single-page Preact apps with static assets, functions, routes, middleware, and more. This covers most of our needs for general sites, services, and even purpose-built apps. + +### Custom Apps (Easily Converted To Libs As Needed) + +- [clevercanyon/skeleton](https://github.com/clevercanyon/skeleton) (`cma` on `any`) + + - Base skeleton that all others have their dotfiles updated by. + +- [clevercanyon/skeleton.cma.node](https://github.com/clevercanyon/skeleton.cma.node) + + - Apps targeting Node. Let's create this skeleton along with variants that cover common use cases; e.g., CLI tools. + +- [clevercanyon/skeleton.cma.cfw](https://github.com/clevercanyon/skeleton.cma.cfw) + + - Apps targeting Cloudflare workers for backend APIs. Let's create this skeleton along with variants that cover common use cases; e.g., scheduled events. + +- [clevercanyon/skeleton.cma.web](https://github.com/clevercanyon/skeleton.cma.web) + + - Apps targeting web browsers. Let's create this skeleton along with variants that cover common use cases; e.g., DOM manipulation and other purely web-focused components. + +- [clevercanyon/skeleton.cma.webw](https://github.com/clevercanyon/skeleton.cma.webw) + - Apps targeting workers that run in a browser. diff --git a/dev/.files/docs/misc/target-envs.md b/dev/.files/docs/build-info/target-envs.md similarity index 100% rename from dev/.files/docs/misc/target-envs.md rename to dev/.files/docs/build-info/target-envs.md index de3e366..9987707 100644 --- a/dev/.files/docs/misc/target-envs.md +++ b/dev/.files/docs/build-info/target-envs.md @@ -3,8 +3,8 @@ ## `targetEnv` Utilities - [clevercanyon/utilities](https://github.com/clevercanyon/utilities) -- [clevercanyon/utilities.cfp](https://github.com/clevercanyon/utilities.cfp) -- [clevercanyon/utilities.cfw](https://github.com/clevercanyon/utilities.cfw) - [clevercanyon/utilities.node](https://github.com/clevercanyon/utilities.node) +- [clevercanyon/utilities.cfw](https://github.com/clevercanyon/utilities.cfw) +- [clevercanyon/utilities.cfp](https://github.com/clevercanyon/utilities.cfp) - [clevercanyon/utilities.web](https://github.com/clevercanyon/utilities.web) - [clevercanyon/utilities.webw](https://github.com/clevercanyon/utilities.webw) diff --git a/dev/.files/docs/misc/target-langs.md b/dev/.files/docs/build-info/target-langs.md similarity index 100% rename from dev/.files/docs/misc/target-langs.md rename to dev/.files/docs/build-info/target-langs.md index 6fd3432..8b6263d 100644 --- a/dev/.files/docs/misc/target-langs.md +++ b/dev/.files/docs/build-info/target-langs.md @@ -5,9 +5,9 @@ ### JavaScript/TypeScript - [clevercanyon/utilities](https://github.com/clevercanyon/utilities) -- [clevercanyon/utilities.cfp](https://github.com/clevercanyon/utilities.cfp) -- [clevercanyon/utilities.cfw](https://github.com/clevercanyon/utilities.cfw) - [clevercanyon/utilities.node](https://github.com/clevercanyon/utilities.node) +- [clevercanyon/utilities.cfw](https://github.com/clevercanyon/utilities.cfw) +- [clevercanyon/utilities.cfp](https://github.com/clevercanyon/utilities.cfp) - [clevercanyon/utilities.web](https://github.com/clevercanyon/utilities.web) - [clevercanyon/utilities.webw](https://github.com/clevercanyon/utilities.webw) diff --git a/dev/.files/docs/misc/emojis.md b/dev/.files/docs/misc/emojis.md deleted file mode 100644 index 7be3b5c..0000000 --- a/dev/.files/docs/misc/emojis.md +++ /dev/null @@ -1,3 +0,0 @@ -# Full List of Emojis - -See: [Unicode® Emoji Charts v15.0](https://unicode.org/emoji/charts/index.html) diff --git a/dev/.files/docs/misc/possibilities.md b/dev/.files/docs/misc/possibilities.md deleted file mode 100644 index bbdd675..0000000 --- a/dev/.files/docs/misc/possibilities.md +++ /dev/null @@ -1,89 +0,0 @@ -# `appType` + `targetEnv` Possibilities - -## Default Skeleton + Dependencies - -- [clevercanyon/skeleton](https://github.com/clevercanyon/skeleton) (`cma` on `any`) - **+** [clevercanyon/skeleton-dev-deps](https://github.com/clevercanyon/skeleton-dev-deps) - -## Naming Convention - -All skeleton repos should have a name in this format, at minimum. - -- `clevercanyon/skeleton`.`[app-type]`.`[target-env]` - -Skeleton variants should use a `.` separator preceding their slug. - -- `clevercanyon/skeleton`.`[app-type]`.`[target-env]`.`[variant]` - -## All Possible Combinations - -Our build system supports `appType` on `targetEnv` directives. However, not all combinations actually make sense. For example, we're not likely to create a `mpa` app and target a `webw` environment. The same with a `mpa` on `any`, because a multipage app needs to target something that will serve it as HTML. Likewise, creating a `cma` on `cfp` makes little sense. Instead, we'd create a `mpa` on `cfp` app. - -### Multipage Apps - -- clevercanyon/skeleton.mpa `any` -- clevercanyon/skeleton.mpa.cfp -- clevercanyon/skeleton.mpa.cfw -- clevercanyon/skeleton.mpa.node -- clevercanyon/skeleton.mpa.web -- clevercanyon/skeleton.mpa.webw -- clevercanyon/skeleton.mpa.opl - -### Custom Apps - -- clevercanyon/skeleton (`cma` on `any`) -- clevercanyon/skeleton.cma.cfp -- clevercanyon/skeleton.cma.cfw -- clevercanyon/skeleton.cma.node -- clevercanyon/skeleton.cma.web -- clevercanyon/skeleton.cma.webw -- clevercanyon/skeleton.cma.opl - -## All Rational Combinations - -These lists include those from above that actually make sense, at least in theory. - -### Multipage Apps - -- clevercanyon/skeleton.mpa.cfp -- clevercanyon/skeleton.mpa.cfw -- clevercanyon/skeleton.mpa.node -- clevercanyon/skeleton.mpa.web - -### Custom Apps - -- clevercanyon/skeleton (`cma` on `any`) -- clevercanyon/skeleton.cma.cfw -- clevercanyon/skeleton.cma.node -- clevercanyon/skeleton.cma.web -- clevercanyon/skeleton.cma.webw -- clevercanyon/skeleton.cma.opl - -## Skeletons We Actually Need - -What do we really care about most, or will likely need? - -### Multipage Apps - -- [clevercanyon/skeleton.mpa.cfp](#): Multipage or single-page React apps with static assets, functions, routes, middleware, and more. This covers most of our needs for general sites, services, and even purpose-built apps. - -### Custom Apps - -- [clevercanyon/skeleton](https://github.com/clevercanyon/skeleton) (`cma` on `any`) - - - Base skeleton that all others extend in some way and have their dotfiles updated by. - -- [clevercanyon/skeleton.cma.cfw](#) - - - Purpose-built Cloudflare workers for backend APIs and microservices. Let's create this skeleton along with variants that cover common use cases; e.g., scheduled events. - -- [clevercanyon/skeleton.cma.node](#) - - - NPM packages targeting Node. Let's create this skeleton along with variants that cover common use cases; e.g., CLI tools. - -- [clevercanyon/skeleton.cma.web](#) - - - NPM packages targeting web browsers. Let's create this skeleton along with variants that cover common use cases; e.g., UI, React components. - -- [clevercanyon/skeleton.cma.webw](#) - - NPM packages. Scaffolding for workers that run in a browser. diff --git a/dev/.files/docs/usage/bin-scripts/update.md b/dev/.files/docs/usage/bin-scripts/update.md index 02177a9..1447e64 100644 --- a/dev/.files/docs/usage/bin-scripts/update.md +++ b/dev/.files/docs/usage/bin-scripts/update.md @@ -32,7 +32,8 @@ See Also: [Prerequisites](./prerequisites.md) ``` These are the properties that we explicitly disallow. - - Instead of `"scripts"` we use `$ madrun` to configure scripts. See: [Prerequisites](./prerequisites.md). + + - Instead of `"scripts"` we use `$ madrun` to configure scripts. See: [Prerequisites](./prerequisites.md). ```json ["typings", "scripts", "workspaces"] @@ -52,7 +53,7 @@ See Also: [Prerequisites](./prerequisites.md) "typesVersions": {} ``` - - Note the absence of `"files": []` in the lists above, which we discourage. Instead, use `./.npmignore` as the recommended way to establish which files are part of a package. However, `files` is not forbidden, so define and customize `files`, if you must. Just keep in mind that `./.npmignore` is meaningless if you use `files`. + - Note the absence of `"files": []` in the lists above, which we discourage. Instead, use `./.npmignore` as the recommended way to establish which files are part of a package. However, `files` is not forbidden, so define and customize `files`, if you must. Just keep in mind that `./.npmignore` is meaningless if you use `files`. ## Updates Project @@ -110,10 +111,10 @@ _Note: This list of projects is not a suggestion regarding which repos to clone, ```text ~/Projects/clevercanyon - madrun + - dev-deps - my-project - project.fork - skeleton - - skeleton-dev-deps - skeleton.cma.web - utilities - utilities.node diff --git a/dev/.files/vite/config.mjs b/dev/.files/vite/config.mjs index 77ea615..43661d3 100644 --- a/dev/.files/vite/config.mjs +++ b/dev/.files/vite/config.mjs @@ -72,20 +72,21 @@ export default async ({ mode, command, ssrBuild: isSSRBuild }) => { /** * Environment-related vars. */ - const appEnvPrefix = 'APP_'; // Part of app. - const env = loadEnv(mode, envsDir, appEnvPrefix); + let appEnvPrefixes = ['APP_']; // Part of app. + if (isSSRBuild) appEnvPrefixes.push('SSR_APP_'); + const env = loadEnv(mode, envsDir, appEnvPrefixes); const staticDefs = { - ['$$__' + appEnvPrefix + 'PKG_NAME__$$']: pkg.name || '', - ['$$__' + appEnvPrefix + 'PKG_VERSION__$$']: pkg.version || '', - ['$$__' + appEnvPrefix + 'PKG_REPOSITORY__$$']: pkg.repository || '', - ['$$__' + appEnvPrefix + 'PKG_HOMEPAGE__$$']: pkg.homepage || '', - ['$$__' + appEnvPrefix + 'PKG_BUGS__$$']: pkg.bugs || '', + ['$$__' + appEnvPrefixes[0] + 'PKG_NAME__$$']: pkg.name || '', + ['$$__' + appEnvPrefixes[0] + 'PKG_VERSION__$$']: pkg.version || '', + ['$$__' + appEnvPrefixes[0] + 'PKG_REPOSITORY__$$']: pkg.repository || '', + ['$$__' + appEnvPrefixes[0] + 'PKG_HOMEPAGE__$$']: pkg.homepage || '', + ['$$__' + appEnvPrefixes[0] + 'PKG_BUGS__$$']: pkg.bugs || '', }; - staticDefs['$$__' + appEnvPrefix + 'BUILD_TIME_YMD__$$'] = $time.parse('now').toSQLDate() || ''; + staticDefs['$$__' + appEnvPrefixes[0] + 'BUILD_TIME_YMD__$$'] = $time.parse('now').toSQLDate() || ''; Object.keys(env) // Add string env vars to static defines. - .filter((key) => new RegExp('^' + $str.escRegExp(appEnvPrefix), 'u').test(key)) + .filter((key) => new RegExp('^(?:' + appEnvPrefixes.map((v) => $str.escRegExp(v)).join('|') + ')', 'u').test(key)) .forEach((key) => ($is.string(env[key]) ? (staticDefs['$$__' + key + '__$$'] = env[key]) : null)); /** @@ -112,6 +113,16 @@ export default async ({ mode, command, ssrBuild: isSSRBuild }) => { const appEntriesAsSrcSubpaths = appEntries.map((absPath) => path.relative(srcDir, absPath)); const appEntriesAsSrcSubpathsNoExt = appEntriesAsSrcSubpaths.map((subpath) => subpath.replace(/\.[^.]+$/u, '')); + /** + * Configuration data needed below. + */ + 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 useUMD = !isSSRBuild && !targetEnvIsServer && !preserveModules && !peerDepKeys.length && useLibMode && 1 === appEntries.length; + /** * Validates all of the above. */ @@ -121,7 +132,7 @@ export default async ({ mode, command, ssrBuild: isSSRBuild }) => { if (!appEntryFiles.length || !appEntries.length) { throw new Error('Apps must have at least one entry point.'); } - if (isSSRBuild && !['cfw', 'node'].includes(targetEnv)) { + if (isSSRBuild && !targetEnvIsServer) { throw new Error('SSR builds must target an SSR environment.'); } if (!['dev', 'ci', 'stage', 'prod'].includes(mode)) { @@ -170,13 +181,13 @@ export default async ({ mode, command, ssrBuild: isSSRBuild }) => { const appEntryIndexAsSrcSubpath = appEntriesAsSrcSubpaths.find((subpath) => $str.mm.isMatch(subpath, 'index.{ts,tsx}')); const appEntryIndexAsSrcSubpathNoExt = appEntryIndexAsSrcSubpath.replace(/\.[^.]+$/u, ''); - if (['spa'].includes(appType) && (!appEntryIndexAsSrcSubpath || !appEntryIndexAsSrcSubpathNoExt)) { + if (['cma'].includes(appType) && (!appEntryIndexAsSrcSubpath || !appEntryIndexAsSrcSubpathNoExt)) { throw new Error('Custom apps must have an `./index.{ts,tsx}` entry point.'); // } else if (['lib'].includes(appType) && (!appEntryIndexAsSrcSubpath || !appEntryIndexAsSrcSubpathNoExt)) { throw new Error('Library apps must have an `./index.{ts,tsx}` entry point.'); } - if (['lib'].includes(appType) && 1 === appEntries.length && !['cfw', 'node'].includes(targetEnv)) { + if (useUMD) { updatePkg.exports = { '.': { import: './dist/' + appEntryIndexAsSrcSubpathNoExt + '.js', @@ -384,7 +395,6 @@ export default async ({ mode, command, ssrBuild: isSSRBuild }) => { // See . jsx: 'automatic', // Matches TypeScript config. jsxImportSource: 'preact', // Matches TypeScript config. - legalComments: 'none', // See . }; @@ -401,8 +411,8 @@ export default async ({ mode, command, ssrBuild: isSSRBuild }) => { input: appEntries, external: [ - '__STATIC_CONTENT_MANIFEST', // Cloudflare workers use this for static assets. - ...Object.keys(pkg.peerDependencies || {}).map((k) => new RegExp('^' + $str.escRegExp(k) + '(?:$|[/?])')), + ...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. @@ -411,7 +421,7 @@ export default async ({ mode, command, ssrBuild: isSSRBuild }) => { extend: true, // i.e., UMD global `||` checks. noConflict: true, // Behaves the same as `jQuery.noConflict()`. - compact: 'dev' === mode || ['lib'].includes(appType) ? false : true, + compact: useMinifier, // 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. See: for details. @@ -428,7 +438,7 @@ export default async ({ mode, command, ssrBuild: isSSRBuild }) => { const entryKey = JSON.stringify(entry); // JSON serialization. const entryCounter = Number(rollupEntryCounters.get(entryKey) || 0) + 1; - const entryFormat = entryCounter > 1 ? (1 === appEntries.length && !['cfw', 'node'].includes(targetEnv) ? 'umd' : 'cjs') : 'es'; + const entryFormat = entryCounter > 1 ? (useUMD ? 'umd' : 'cjs') : 'es'; const entryExt = 'umd' === entryFormat ? 'umd.cjs' : 'cjs' === entryFormat ? 'cjs' : 'js'; rollupEntryCounters.set(entryKey, entryCounter); // Updates counter. @@ -452,7 +462,7 @@ export default async ({ mode, command, ssrBuild: isSSRBuild }) => { const chunkKey = JSON.stringify(chunk); // JSON serialization. const chunkCounter = Number(rollupChunkCounters.get(chunkKey) || 0) + 1; - const chunkFormat = chunkCounter > 1 ? (1 === appEntries.length && !['cfw', 'node'].includes(targetEnv) ? 'umd' : 'cjs') : 'es'; + const chunkFormat = chunkCounter > 1 ? (useUMD ? 'umd' : 'cjs') : 'es'; const chunkExt = 'umd' === chunkFormat ? 'umd.cjs' : 'cjs' === chunkFormat ? 'cjs' : 'js'; rollupChunkCounters.set(chunkKey, chunkCounter); // Updates counter. @@ -460,15 +470,15 @@ export default async ({ mode, command, ssrBuild: isSSRBuild }) => { }, assetFileNames: (/* asset */) => path.join(path.relative(distDir, a16sDir), '[name]-[hash].[ext]'), - // Preserves module structure in apps built explicitly as libraries. - // The expectation is that peers will build w/ this flag set as false, which is + // 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. - ...(['lib'].includes(appType) && appEntries.length > 1 ? { preserveModules: true } : {}), + ...(preserveModules ? { preserveModules: true } : {}), // Cannot inline dynamic imports when `preserveModules` is enabled, so set as `false` explicitly. - ...(['lib'].includes(appType) && appEntries.length > 1 ? { inlineDynamicImports: false } : {}), + ...(preserveModules ? { inlineDynamicImports: false } : {}), }, }; // @@ -584,12 +594,12 @@ export default async ({ mode, command, ssrBuild: isSSRBuild }) => { resolve: { alias: importAliases }, // Matches TypeScript config import aliases. envDir: path.relative(srcDir, envsDir), // Relative to `root` directory. - envPrefix: appEnvPrefix, // Environment vars w/ this prefix become a part of the app. + envPrefix: appEnvPrefixes, // Env vars w/ these prefixes become part of the app. server: { open: true, https: true }, // Vite dev server. plugins, // Additional Vite plugins that were configured above. - ...(['cfw', 'node'].includes(targetEnv) // . + ...(targetEnvIsServer // Target environment is server-side? ? { ssr: { noExternal: ['cfw'].includes(targetEnv), @@ -612,20 +622,20 @@ export default async ({ mode, command, ssrBuild: isSSRBuild }) => { assetsDir: path.relative(distDir, a16sDir), // Relative to `outDir` directory. // Note: `a16s` is a numeronym for 'acquired resources'; i.e. via imports. - ssr: ['cfw', 'node'].includes(targetEnv), // Server-side rendering? + ssr: targetEnvIsServer, // Target environment is server-side? manifest: !isSSRBuild, // Enables creation of manifest (for assets). sourcemap: 'dev' === mode, // Enables creation of sourcemaps (for debugging). - minify: 'dev' === mode || ['lib'].includes(appType) ? false : 'esbuild', + minify: useMinifier ? 'esbuild' : false, // Minify userland code? modulePreload: false, // Disable. DOM injections conflict with our SPAs. - ...(['lib'].includes(appType) // A library consumed by others. + ...(useLibMode // Use library mode in Vite, with specific formats? ? { lib: { name: appUMDName, // Name of UMD window global var. entry: appEntries, // Should match up with `rollupOptions.input`. - formats: isSSRBuild ? ['es'] : 1 === appEntries.length && !['cfw', 'node'].includes(targetEnv) ? ['es', 'umd'] : ['es', 'cjs'], + formats: isSSRBuild ? ['es'] : useUMD ? ['es', 'umd'] : ['es', 'cjs'], }, } : {}), diff --git a/package-lock.json b/package-lock.json index 837b380..012527e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "@clevercanyon/utilities.cfw", - "version": "1.0.77", + "version": "1.0.78", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "@clevercanyon/utilities.cfw", - "version": "1.0.77", + "version": "1.0.78", "cpu": [ "x64", "arm64" @@ -17,7 +17,7 @@ "linux" ], "devDependencies": { - "@clevercanyon/skeleton-dev-deps": "^1.0.164" + "@clevercanyon/dev-deps": "^1.0.167" }, "engines": { "node": "^19.2.0 || ^19.4.0", @@ -27,7 +27,7 @@ "url": "https://github.com/sponsors/clevercanyon" }, "peerDependencies": { - "@clevercanyon/utilities": "^1.0.198", + "@clevercanyon/utilities": "^1.0.199", "@cloudflare/kv-asset-handler": "^0.2.0" } }, @@ -732,10 +732,10 @@ "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", "dev": true }, - "node_modules/@clevercanyon/madrun": { - "version": "1.0.77", - "resolved": "https://registry.npmjs.org/@clevercanyon/madrun/-/madrun-1.0.77.tgz", - "integrity": "sha512-be4G5ZcDWGzgF2s6jT1w7+i+8Q4hSZpw85srAt1CBoY7QeVYKmFy7512PLa5q1NUgK0FuoQO+llkSb4rLTWyvg==", + "node_modules/@clevercanyon/dev-deps": { + "version": "1.0.167", + "resolved": "https://registry.npmjs.org/@clevercanyon/dev-deps/-/dev-deps-1.0.167.tgz", + "integrity": "sha512-sJv6TNDzGBMiany2WMZs0S3g8/D+5Py1yOlVvJubY5WhhVDfbS/qIomZVqKdjC5p2HaaeHzCIKf5JkzYK4uDxQ==", "cpu": [ "x64", "arm64" @@ -746,63 +746,10 @@ "linux" ], "dependencies": { - "@clevercanyon/utilities": "^1.0.167", - "@clevercanyon/utilities.node": "^1.0.76" - }, - "bin": { - "madrun": "dist/bin/cli.js" - }, - "engines": { - "node": "^19.2.0 || ^19.4.0", - "npm": "^8.19.3 || ^9.2.0" - }, - "funding": { - "url": "https://github.com/sponsors/clevercanyon" - } - }, - "node_modules/@clevercanyon/preact-iso.fork": { - "version": "2.3.22", - "resolved": "https://registry.npmjs.org/@clevercanyon/preact-iso.fork/-/preact-iso.fork-2.3.22.tgz", - "integrity": "sha512-5qi8GD8fpivy/zGX1GG9RXMrz55glpX29JMrZHVviSWjdiqQcnhT3Y3Bkfv/iwrusRiZBF7bXpz8ocE1pwV1Gw==", - "cpu": [ - "x64", - "arm64" - ], - "os": [ - "darwin", - "linux" - ], - "peer": true, - "engines": { - "node": "^19.2.0 || ^19.4.0", - "npm": "^8.19.3 || ^9.2.0" - }, - "funding": { - "url": "https://github.com/sponsors/clevercanyon" - }, - "peerDependencies": { - "preact": "^10.17.1", - "preact-render-to-string": "^6.2.1" - } - }, - "node_modules/@clevercanyon/skeleton-dev-deps": { - "version": "1.0.164", - "resolved": "https://registry.npmjs.org/@clevercanyon/skeleton-dev-deps/-/skeleton-dev-deps-1.0.164.tgz", - "integrity": "sha512-RnvM5/1Z1mxRbcpTc8q8lRfXfZElcdz3IzeUH6y578GpnL0KJRvejKkVPgqueQSEsiXYuu5DKAvSJWX8x/Gm2Q==", - "cpu": [ - "x64", - "arm64" - ], - "dev": true, - "os": [ - "darwin", - "linux" - ], - "dependencies": { - "@clevercanyon/madrun": "^1.0.77", - "@clevercanyon/utilities": "^1.0.175", - "@clevercanyon/utilities.cfp": "^1.0.59", - "@clevercanyon/utilities.node": "^1.0.77", + "@clevercanyon/madrun": "^1.0.78", + "@clevercanyon/utilities": "^1.0.198", + "@clevercanyon/utilities.cfp": "^1.0.67", + "@clevercanyon/utilities.node": "^1.0.78", "@cloudflare/workers-types": "^4.20230821.0", "@octokit/core": "^4.2.4", "@octokit/plugin-paginate-rest": "^5.0.1", @@ -816,7 +763,7 @@ "@types/libsodium-wrappers": "^0.7.10", "@types/luxon": "^3.3.1", "@types/micromatch": "^4.0.2", - "@types/node": "^18.17.9", + "@types/node": "^18.17.11", "@types/prettier": "^2.7.3", "@types/semver": "^7.5.0", "@types/yargs": "^17.0.24", @@ -824,7 +771,7 @@ "@typescript-eslint/eslint-plugin": "^5.62.0", "@typescript-eslint/parser": "^5.62.0", "@vitejs/plugin-basic-ssl": "^1.0.1", - "@vitest/coverage-v8": "^0.34.2", + "@vitest/coverage-v8": "^0.34.3", "@vitest/ui": "^0.28.5", "dotenv": "^16.3.1", "dotenv-vault": "^1.25.0", @@ -836,7 +783,7 @@ "eslint-plugin-import": "^2.28.1", "eslint-plugin-jsx-a11y": "^6.7.1", "eslint-plugin-prettier": "^4.2.1", - "jest": "^29.6.3", + "jest": "^29.6.4", "jsdom": "^21.1.2", "libsodium-wrappers": "^0.7.11", "madge": "^6.1.0", @@ -863,9 +810,37 @@ "vite": "^4.4.9", "vite-plugin-ejs": "^1.6.4", "vite-plugin-minify": "^1.5.2", - "vitest": "^0.34.2", + "vitest": "^0.34.3", "vitest-environment-miniflare": "^2.14.0", - "wrangler": "^3.5.1" + "wrangler": "^3.6.0" + }, + "engines": { + "node": "^19.2.0 || ^19.4.0", + "npm": "^8.19.3 || ^9.2.0" + }, + "funding": { + "url": "https://github.com/sponsors/clevercanyon" + } + }, + "node_modules/@clevercanyon/madrun": { + "version": "1.0.79", + "resolved": "https://registry.npmjs.org/@clevercanyon/madrun/-/madrun-1.0.79.tgz", + "integrity": "sha512-7qOeBWPVWtP7VWCgTC5V40WGrLAW81/+ZNsKA1k9UzqV9u++0qqyd1i0eolEe6BItgn+l0QmfGMFRbRMUhr3pA==", + "cpu": [ + "x64", + "arm64" + ], + "dev": true, + "os": [ + "darwin", + "linux" + ], + "dependencies": { + "@clevercanyon/utilities": "^1.0.198", + "@clevercanyon/utilities.node": "^1.0.78" + }, + "bin": { + "madrun": "dist/bin/cli.js" }, "engines": { "node": "^19.2.0 || ^19.4.0", @@ -875,10 +850,35 @@ "url": "https://github.com/sponsors/clevercanyon" } }, + "node_modules/@clevercanyon/preact-iso.fork": { + "version": "2.3.23", + "resolved": "https://registry.npmjs.org/@clevercanyon/preact-iso.fork/-/preact-iso.fork-2.3.23.tgz", + "integrity": "sha512-ZklfFfiX8uX8SG7mifTZ80+T4P7re8UPTg+meACOnfKNpG+Wx+IZnqrwriBerp1CiiYqkIqNo5srmaEZ0Sa1gA==", + "cpu": [ + "x64", + "arm64" + ], + "os": [ + "darwin", + "linux" + ], + "peer": true, + "engines": { + "node": "^19.2.0 || ^19.4.0", + "npm": "^8.19.3 || ^9.2.0" + }, + "funding": { + "url": "https://github.com/sponsors/clevercanyon" + }, + "peerDependencies": { + "preact": "^10.17.1", + "preact-render-to-string": "^6.2.1" + } + }, "node_modules/@clevercanyon/split-cmd.fork": { - "version": "1.0.40", - "resolved": "https://registry.npmjs.org/@clevercanyon/split-cmd.fork/-/split-cmd.fork-1.0.40.tgz", - "integrity": "sha512-ESGhUPkqwxDAUAue3Ojeb+HkA5P/3xF/bXsaA7QFti3UpOHiXYXxMRGD3X2EGAkvishw9WLYXYI3VGEuvSZelw==", + "version": "1.0.41", + "resolved": "https://registry.npmjs.org/@clevercanyon/split-cmd.fork/-/split-cmd.fork-1.0.41.tgz", + "integrity": "sha512-0WnEFrcUGR7OCAESgkSbF/XwOru2mp3FTF7uGd9rETlLNRxG3S2vUhgMf1lQcnn7jaLtVqyEfl7YdWDtpSEojg==", "cpu": [ "x64", "arm64" @@ -898,9 +898,9 @@ } }, "node_modules/@clevercanyon/utilities": { - "version": "1.0.198", - "resolved": "https://registry.npmjs.org/@clevercanyon/utilities/-/utilities-1.0.198.tgz", - "integrity": "sha512-bHjb2KTTviyrCWofcz+wP2VZTihIcnWCrt5k859ClxyQzP5959mTLn3eeMSKHZMmUmYgPTaT1MGb/2u6Az1FNw==", + "version": "1.0.199", + "resolved": "https://registry.npmjs.org/@clevercanyon/utilities/-/utilities-1.0.199.tgz", + "integrity": "sha512-yzZ9NpqoogyngmIm8fK3BatANwJQz6aBFAWKa7PevQNh1+0GAwJfkwEhr8QbzAm3uZPBubjDKf8QSx/RnmGkYg==", "cpu": [ "x64", "arm64" @@ -917,14 +917,14 @@ "url": "https://github.com/sponsors/clevercanyon" }, "peerDependencies": { - "@clevercanyon/preact-iso.fork": "^2.3.22", + "@clevercanyon/preact-iso.fork": "^2.3.23", "@headlessui/react": "^1.7.17", "@heroicons/react": "^2.0.18", "crypto-js": "^4.1.1", "fast-equals": "^4.0.3", "ignore": "^5.2.4", "luxon": "^3.4.1", - "micromatch": "npm:@clevercanyon/micromatch.fork@^4.0.42", + "micromatch": "npm:@clevercanyon/micromatch.fork@^4.0.43", "moize": "^6.1.6", "preact": "^10.17.1", "preact-render-to-string": "^6.2.1", @@ -932,9 +932,9 @@ } }, "node_modules/@clevercanyon/utilities.cfp": { - "version": "1.0.66", - "resolved": "https://registry.npmjs.org/@clevercanyon/utilities.cfp/-/utilities.cfp-1.0.66.tgz", - "integrity": "sha512-BfKZDVshru1NyMw/efSdz3hGPyrI+6vx533hmCvxLwJTleust8M74t2RFlIeiBXq0hCDK981vTRFD9a04oN3ig==", + "version": "1.0.67", + "resolved": "https://registry.npmjs.org/@clevercanyon/utilities.cfp/-/utilities.cfp-1.0.67.tgz", + "integrity": "sha512-+2n4gkLFQh48m7tjIBqjHimK6uIbAQ0zsP+kda5FYb5GcaQQmmHtS/fqIqGpEOtD0c1Ongr5IuUBiM85cvF9yQ==", "cpu": [ "x64", "arm64" @@ -952,15 +952,15 @@ "url": "https://github.com/sponsors/clevercanyon" }, "peerDependencies": { - "@clevercanyon/utilities": "^1.0.197", - "@clevercanyon/utilities.cfw": "^1.0.77", + "@clevercanyon/utilities": "^1.0.198", + "@clevercanyon/utilities.cfw": "^1.0.78", "@clevercanyon/utilities.web": "^1.0.53" } }, "node_modules/@clevercanyon/utilities.cfw": { - "version": "1.0.77", - "resolved": "https://registry.npmjs.org/@clevercanyon/utilities.cfw/-/utilities.cfw-1.0.77.tgz", - "integrity": "sha512-b9L9Q+OUgIpW7JtGpy704IV6CxaTws7cTCVyuFePl+TLJX+FLq6OHsAse08MwMK6GcVH4Rigif9PFLb9xZ2aKA==", + "version": "1.0.78", + "resolved": "https://registry.npmjs.org/@clevercanyon/utilities.cfw/-/utilities.cfw-1.0.78.tgz", + "integrity": "sha512-H0tRH4Knyqez9FhHobXpaGD2rBS3/46nbwCB6ZK7uiH3OkzrtvZhECuy/7BGv3dA7wUqIb3e6PVLpui1dL5UJw==", "cpu": [ "x64", "arm64" @@ -979,14 +979,14 @@ "url": "https://github.com/sponsors/clevercanyon" }, "peerDependencies": { - "@clevercanyon/utilities": "^1.0.178", + "@clevercanyon/utilities": "^1.0.198", "@cloudflare/kv-asset-handler": "^0.2.0" } }, "node_modules/@clevercanyon/utilities.node": { - "version": "1.0.77", - "resolved": "https://registry.npmjs.org/@clevercanyon/utilities.node/-/utilities.node-1.0.77.tgz", - "integrity": "sha512-5DthF6Y7yY8P971/8ktn+HW7EamyxTBl1RrfGr61XIscPobl9n36vLqUJ5Cjzr+MfxDf9i9BKRevUUHRYnlYfg==", + "version": "1.0.79", + "resolved": "https://registry.npmjs.org/@clevercanyon/utilities.node/-/utilities.node-1.0.79.tgz", + "integrity": "sha512-orJur/bG18014I2xRtFbvb8rcQ2hpnSfl3Rql4VfJ+P1uYeoA9BvtxFUErywStcoQ647GBBOKJQCl+WZRzbXKQ==", "cpu": [ "x64", "arm64" @@ -1004,8 +1004,8 @@ "url": "https://github.com/sponsors/clevercanyon" }, "peerDependencies": { - "@clevercanyon/split-cmd.fork": "^1.0.40", - "@clevercanyon/utilities": "^1.0.168", + "@clevercanyon/split-cmd.fork": "^1.0.41", + "@clevercanyon/utilities": "^1.0.199", "archiver": "^5.3.2", "boxen": "^7.1.1", "chalk": "^5.3.0", @@ -1014,17 +1014,17 @@ "find-up": "^6.3.0", "globby": "^13.2.2", "prettier": "^2.8.8", - "shescape": "npm:@clevercanyon/shescape.fork@^1.6.34", - "spawn-please": "npm:@clevercanyon/spawn-please.fork@^2.0.34", + "shescape": "npm:@clevercanyon/shescape.fork@^1.6.35", + "spawn-please": "npm:@clevercanyon/spawn-please.fork@^2.0.35", "term-img": "^6.0.0", "yargs": "^17.7.2", "yargs-parser": "^21.1.1" } }, "node_modules/@clevercanyon/utilities.web": { - "version": "1.0.53", - "resolved": "https://registry.npmjs.org/@clevercanyon/utilities.web/-/utilities.web-1.0.53.tgz", - "integrity": "sha512-k/TPeCyHogBOvmm8O/9g9EOoLxZxqbYejKmkhwifmE0dSYENOyHe3RZ5WCj+9AUSJR3cWxUFOBGsyQkUuBW0dA==", + "version": "1.0.55", + "resolved": "https://registry.npmjs.org/@clevercanyon/utilities.web/-/utilities.web-1.0.55.tgz", + "integrity": "sha512-MExqd0O5ommRWwlTHTl0mszAHZyYrlqxeQAm+JC2+/GeduHxdZyDR1sx9+zxDUNFoPd6dzApoi/RRzrM2iedEA==", "cpu": [ "x64", "arm64" @@ -1043,7 +1043,7 @@ "url": "https://github.com/sponsors/clevercanyon" }, "peerDependencies": { - "@clevercanyon/utilities": "^1.0.168" + "@clevercanyon/utilities": "^1.0.199" } }, "node_modules/@cloudflare/kv-asset-handler": { @@ -5684,9 +5684,9 @@ }, "node_modules/braces": { "name": "@clevercanyon/braces.fork", - "version": "3.0.38", - "resolved": "https://registry.npmjs.org/@clevercanyon/braces.fork/-/braces.fork-3.0.38.tgz", - "integrity": "sha512-3QnTFqM9IStp1gloA6oKkjy0WwIBs+xQsgg2/Web3WopywkJ8RxX4B2TSl1ATuXRKUS6FOHx6FFII5t6EmU23g==", + "version": "3.0.39", + "resolved": "https://registry.npmjs.org/@clevercanyon/braces.fork/-/braces.fork-3.0.39.tgz", + "integrity": "sha512-93SZcllEDWl+MndMdNyIEVbjT/RQXjVXq98O8bWuov9AQSJP+PVYHp/LnW/cnUWbP4TKBJGeOqCHo2Aqp22l4Q==", "cpu": [ "x64", "arm64" @@ -5696,7 +5696,7 @@ "linux" ], "dependencies": { - "fill-range": "npm:@clevercanyon/fill-range.fork@^7.0.37" + "fill-range": "npm:@clevercanyon/fill-range.fork@^7.0.38" }, "engines": { "node": "^19.2.0 || ^19.4.0", @@ -8501,9 +8501,9 @@ }, "node_modules/fill-range": { "name": "@clevercanyon/fill-range.fork", - "version": "7.0.37", - "resolved": "https://registry.npmjs.org/@clevercanyon/fill-range.fork/-/fill-range.fork-7.0.37.tgz", - "integrity": "sha512-WN9ZkRlxPT7537OOtwe2CwDiHRnWlDorBiUGm52WItnKnJPh974FgvBXOEVA0R0V4k8IHezxXGj8eqkhp9kyzQ==", + "version": "7.0.38", + "resolved": "https://registry.npmjs.org/@clevercanyon/fill-range.fork/-/fill-range.fork-7.0.38.tgz", + "integrity": "sha512-rLb0uNZXr+8SIHmIDdGPnfaK3DNLmBzy/dlHErfQ7qXJQ2/USiHpMqznt0764ZjcFs/94HU6pcaMnFKieItXVQ==", "cpu": [ "x64", "arm64" @@ -8513,7 +8513,7 @@ "linux" ], "dependencies": { - "to-regex-range": "npm:@clevercanyon/to-regex-range.fork@^5.0.37" + "to-regex-range": "npm:@clevercanyon/to-regex-range.fork@^5.0.38" }, "engines": { "node": "^19.2.0 || ^19.4.0", @@ -9757,9 +9757,9 @@ }, "node_modules/is-number": { "name": "@clevercanyon/is-number.fork", - "version": "7.0.40", - "resolved": "https://registry.npmjs.org/@clevercanyon/is-number.fork/-/is-number.fork-7.0.40.tgz", - "integrity": "sha512-is5gNYgqx7X4dasf7j6txGW9Saw/qd0WguCkzcPbmzK9ogAH3tn+xANSGKOgfQyFTqG3gfPDUd4BWZsjjeIbwA==", + "version": "7.0.41", + "resolved": "https://registry.npmjs.org/@clevercanyon/is-number.fork/-/is-number.fork-7.0.41.tgz", + "integrity": "sha512-TGdcIQcM5A1w7FGcBNS3Ojcq7tuthWstK/GA6qE5u2IQfhg/6vZaJZKMN6PMMoIBVd+vyhT+IgoyccjkX4GHYw==", "cpu": [ "x64", "arm64" @@ -12707,9 +12707,9 @@ }, "node_modules/micromatch": { "name": "@clevercanyon/micromatch.fork", - "version": "4.0.42", - "resolved": "https://registry.npmjs.org/@clevercanyon/micromatch.fork/-/micromatch.fork-4.0.42.tgz", - "integrity": "sha512-f3MJzMhB1xowds+J5DkCaiYHqG6wNC9Z0UHOEe6z6GHXGUany+10WHahT+5NNFy823+Dn28OIxJdsmp1gMF0Bw==", + "version": "4.0.43", + "resolved": "https://registry.npmjs.org/@clevercanyon/micromatch.fork/-/micromatch.fork-4.0.43.tgz", + "integrity": "sha512-Aup5KbkvlCjW68lvVOkdwUi1MexQeM1cG3HXa+2NXtugRni9gaz9yucwiSUIlhQNAkSqP9QPlmELayFNzuRHxA==", "cpu": [ "x64", "arm64" @@ -12719,8 +12719,8 @@ "linux" ], "dependencies": { - "braces": "npm:@clevercanyon/braces.fork@^3.0.38", - "picomatch": "npm:@clevercanyon/picomatch.fork@^2.3.37" + "braces": "npm:@clevercanyon/braces.fork@^3.0.39", + "picomatch": "npm:@clevercanyon/picomatch.fork@^2.3.38" }, "engines": { "node": "^19.2.0 || ^19.4.0", @@ -12732,9 +12732,9 @@ }, "node_modules/micromatch/node_modules/picomatch": { "name": "@clevercanyon/picomatch.fork", - "version": "2.3.37", - "resolved": "https://registry.npmjs.org/@clevercanyon/picomatch.fork/-/picomatch.fork-2.3.37.tgz", - "integrity": "sha512-rcWR8LIDGW5YD2B6M1scvrGZ8jlQeiIM3xlxgnDLooGvwcr784GVCb5CUxSfYiVPTVbyBlmY5cMEFHQrq+43Mw==", + "version": "2.3.38", + "resolved": "https://registry.npmjs.org/@clevercanyon/picomatch.fork/-/picomatch.fork-2.3.38.tgz", + "integrity": "sha512-OLIPTMUhps62ttNvbWkkw4r9vigWB4lOHM12L/fghoshRyE8GuqHpPxJhCBiajI+HKNWQMau4i/XNwgwnygnkA==", "cpu": [ "x64", "arm64" @@ -16362,9 +16362,9 @@ }, "node_modules/shescape": { "name": "@clevercanyon/shescape.fork", - "version": "1.6.34", - "resolved": "https://registry.npmjs.org/@clevercanyon/shescape.fork/-/shescape.fork-1.6.34.tgz", - "integrity": "sha512-OCBIWSnzvFFdqsnOzVQ+0OeefJrO6UitIR/rog4UceQnd7FQiteakFgXbP09LpO1dT7pAjvN5ykun+YbrOhMEg==", + "version": "1.6.35", + "resolved": "https://registry.npmjs.org/@clevercanyon/shescape.fork/-/shescape.fork-1.6.35.tgz", + "integrity": "sha512-TOj/fUE4yUfg3Q+NjCWyJFJHCvCeaWgLQ0VBRx0zdgebak2sgplnx66NP1TqsQl2UhX3cGm3Fg5DBn/nD+20zA==", "cpu": [ "x64", "arm64" @@ -16544,9 +16544,9 @@ }, "node_modules/spawn-please": { "name": "@clevercanyon/spawn-please.fork", - "version": "2.0.34", - "resolved": "https://registry.npmjs.org/@clevercanyon/spawn-please.fork/-/spawn-please.fork-2.0.34.tgz", - "integrity": "sha512-oM7QLM3B3lIgmLrhG6kUOFmP4JTiuzVdP4RhKtiGlZ+7SBhFNKFqy+eDsMIjPn2xtC1idkSQZ8opldUOkzM1Hw==", + "version": "2.0.35", + "resolved": "https://registry.npmjs.org/@clevercanyon/spawn-please.fork/-/spawn-please.fork-2.0.35.tgz", + "integrity": "sha512-LZPa6xLp+nGrZLK9E4KoOh5rnsU44ZAi/QvoTNEmyG8B/CLnNk+aDwqUFSxTsuN2ojHfND9Iks0xlHv/L06CzA==", "cpu": [ "x64", "arm64" @@ -17660,9 +17660,9 @@ }, "node_modules/to-regex-range": { "name": "@clevercanyon/to-regex-range.fork", - "version": "5.0.37", - "resolved": "https://registry.npmjs.org/@clevercanyon/to-regex-range.fork/-/to-regex-range.fork-5.0.37.tgz", - "integrity": "sha512-sLGv1IkIQoxZ2djyjaY6OZPQDe6IwOAGTvtLbQtONRip4baYB+Od/s046CR+7py4wdX7xwQ/CMcTmZ0VwhnyEQ==", + "version": "5.0.38", + "resolved": "https://registry.npmjs.org/@clevercanyon/to-regex-range.fork/-/to-regex-range.fork-5.0.38.tgz", + "integrity": "sha512-RG6fRGQ0OjCb0V/Uw0777t7iEyvMQU8a3Vzw8wxkzKXZ3IWstrBn0e1xiEwgGGLW8PETJHjTj1mn5QpmUYBNnA==", "cpu": [ "x64", "arm64" @@ -17672,7 +17672,7 @@ "linux" ], "dependencies": { - "is-number": "npm:@clevercanyon/is-number.fork@^7.0.40" + "is-number": "npm:@clevercanyon/is-number.fork@^7.0.41" }, "engines": { "node": "^19.2.0 || ^19.4.0", @@ -19845,33 +19845,16 @@ "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", "dev": true }, - "@clevercanyon/madrun": { - "version": "1.0.77", - "resolved": "https://registry.npmjs.org/@clevercanyon/madrun/-/madrun-1.0.77.tgz", - "integrity": "sha512-be4G5ZcDWGzgF2s6jT1w7+i+8Q4hSZpw85srAt1CBoY7QeVYKmFy7512PLa5q1NUgK0FuoQO+llkSb4rLTWyvg==", + "@clevercanyon/dev-deps": { + "version": "1.0.167", + "resolved": "https://registry.npmjs.org/@clevercanyon/dev-deps/-/dev-deps-1.0.167.tgz", + "integrity": "sha512-sJv6TNDzGBMiany2WMZs0S3g8/D+5Py1yOlVvJubY5WhhVDfbS/qIomZVqKdjC5p2HaaeHzCIKf5JkzYK4uDxQ==", "dev": true, "requires": { - "@clevercanyon/utilities": "^1.0.167", - "@clevercanyon/utilities.node": "^1.0.76" - } - }, - "@clevercanyon/preact-iso.fork": { - "version": "2.3.22", - "resolved": "https://registry.npmjs.org/@clevercanyon/preact-iso.fork/-/preact-iso.fork-2.3.22.tgz", - "integrity": "sha512-5qi8GD8fpivy/zGX1GG9RXMrz55glpX29JMrZHVviSWjdiqQcnhT3Y3Bkfv/iwrusRiZBF7bXpz8ocE1pwV1Gw==", - "peer": true, - "requires": {} - }, - "@clevercanyon/skeleton-dev-deps": { - "version": "1.0.164", - "resolved": "https://registry.npmjs.org/@clevercanyon/skeleton-dev-deps/-/skeleton-dev-deps-1.0.164.tgz", - "integrity": "sha512-RnvM5/1Z1mxRbcpTc8q8lRfXfZElcdz3IzeUH6y578GpnL0KJRvejKkVPgqueQSEsiXYuu5DKAvSJWX8x/Gm2Q==", - "dev": true, - "requires": { - "@clevercanyon/madrun": "^1.0.77", - "@clevercanyon/utilities": "^1.0.175", - "@clevercanyon/utilities.cfp": "^1.0.59", - "@clevercanyon/utilities.node": "^1.0.77", + "@clevercanyon/madrun": "^1.0.78", + "@clevercanyon/utilities": "^1.0.198", + "@clevercanyon/utilities.cfp": "^1.0.67", + "@clevercanyon/utilities.node": "^1.0.78", "@cloudflare/workers-types": "^4.20230821.0", "@octokit/core": "^4.2.4", "@octokit/plugin-paginate-rest": "^5.0.1", @@ -19885,7 +19868,7 @@ "@types/libsodium-wrappers": "^0.7.10", "@types/luxon": "^3.3.1", "@types/micromatch": "^4.0.2", - "@types/node": "^18.17.9", + "@types/node": "^18.17.11", "@types/prettier": "^2.7.3", "@types/semver": "^7.5.0", "@types/yargs": "^17.0.24", @@ -19893,7 +19876,7 @@ "@typescript-eslint/eslint-plugin": "^5.62.0", "@typescript-eslint/parser": "^5.62.0", "@vitejs/plugin-basic-ssl": "^1.0.1", - "@vitest/coverage-v8": "^0.34.2", + "@vitest/coverage-v8": "^0.34.3", "@vitest/ui": "^0.28.5", "dotenv": "^16.3.1", "dotenv-vault": "^1.25.0", @@ -19905,7 +19888,7 @@ "eslint-plugin-import": "^2.28.1", "eslint-plugin-jsx-a11y": "^6.7.1", "eslint-plugin-prettier": "^4.2.1", - "jest": "^29.6.3", + "jest": "^29.6.4", "jsdom": "^21.1.2", "libsodium-wrappers": "^0.7.11", "madge": "^6.1.0", @@ -19932,50 +19915,67 @@ "vite": "^4.4.9", "vite-plugin-ejs": "^1.6.4", "vite-plugin-minify": "^1.5.2", - "vitest": "^0.34.2", + "vitest": "^0.34.3", "vitest-environment-miniflare": "^2.14.0", - "wrangler": "^3.5.1" + "wrangler": "^3.6.0" + } + }, + "@clevercanyon/madrun": { + "version": "1.0.79", + "resolved": "https://registry.npmjs.org/@clevercanyon/madrun/-/madrun-1.0.79.tgz", + "integrity": "sha512-7qOeBWPVWtP7VWCgTC5V40WGrLAW81/+ZNsKA1k9UzqV9u++0qqyd1i0eolEe6BItgn+l0QmfGMFRbRMUhr3pA==", + "dev": true, + "requires": { + "@clevercanyon/utilities": "^1.0.198", + "@clevercanyon/utilities.node": "^1.0.78" } }, + "@clevercanyon/preact-iso.fork": { + "version": "2.3.23", + "resolved": "https://registry.npmjs.org/@clevercanyon/preact-iso.fork/-/preact-iso.fork-2.3.23.tgz", + "integrity": "sha512-ZklfFfiX8uX8SG7mifTZ80+T4P7re8UPTg+meACOnfKNpG+Wx+IZnqrwriBerp1CiiYqkIqNo5srmaEZ0Sa1gA==", + "peer": true, + "requires": {} + }, "@clevercanyon/split-cmd.fork": { - "version": "1.0.40", - "resolved": "https://registry.npmjs.org/@clevercanyon/split-cmd.fork/-/split-cmd.fork-1.0.40.tgz", - "integrity": "sha512-ESGhUPkqwxDAUAue3Ojeb+HkA5P/3xF/bXsaA7QFti3UpOHiXYXxMRGD3X2EGAkvishw9WLYXYI3VGEuvSZelw==", + "version": "1.0.41", + "resolved": "https://registry.npmjs.org/@clevercanyon/split-cmd.fork/-/split-cmd.fork-1.0.41.tgz", + "integrity": "sha512-0WnEFrcUGR7OCAESgkSbF/XwOru2mp3FTF7uGd9rETlLNRxG3S2vUhgMf1lQcnn7jaLtVqyEfl7YdWDtpSEojg==", "dev": true, "peer": true }, "@clevercanyon/utilities": { - "version": "1.0.198", - "resolved": "https://registry.npmjs.org/@clevercanyon/utilities/-/utilities-1.0.198.tgz", - "integrity": "sha512-bHjb2KTTviyrCWofcz+wP2VZTihIcnWCrt5k859ClxyQzP5959mTLn3eeMSKHZMmUmYgPTaT1MGb/2u6Az1FNw==", + "version": "1.0.199", + "resolved": "https://registry.npmjs.org/@clevercanyon/utilities/-/utilities-1.0.199.tgz", + "integrity": "sha512-yzZ9NpqoogyngmIm8fK3BatANwJQz6aBFAWKa7PevQNh1+0GAwJfkwEhr8QbzAm3uZPBubjDKf8QSx/RnmGkYg==", "requires": {} }, "@clevercanyon/utilities.cfp": { - "version": "1.0.66", - "resolved": "https://registry.npmjs.org/@clevercanyon/utilities.cfp/-/utilities.cfp-1.0.66.tgz", - "integrity": "sha512-BfKZDVshru1NyMw/efSdz3hGPyrI+6vx533hmCvxLwJTleust8M74t2RFlIeiBXq0hCDK981vTRFD9a04oN3ig==", + "version": "1.0.67", + "resolved": "https://registry.npmjs.org/@clevercanyon/utilities.cfp/-/utilities.cfp-1.0.67.tgz", + "integrity": "sha512-+2n4gkLFQh48m7tjIBqjHimK6uIbAQ0zsP+kda5FYb5GcaQQmmHtS/fqIqGpEOtD0c1Ongr5IuUBiM85cvF9yQ==", "dev": true, "requires": {} }, "@clevercanyon/utilities.cfw": { - "version": "1.0.77", - "resolved": "https://registry.npmjs.org/@clevercanyon/utilities.cfw/-/utilities.cfw-1.0.77.tgz", - "integrity": "sha512-b9L9Q+OUgIpW7JtGpy704IV6CxaTws7cTCVyuFePl+TLJX+FLq6OHsAse08MwMK6GcVH4Rigif9PFLb9xZ2aKA==", + "version": "1.0.78", + "resolved": "https://registry.npmjs.org/@clevercanyon/utilities.cfw/-/utilities.cfw-1.0.78.tgz", + "integrity": "sha512-H0tRH4Knyqez9FhHobXpaGD2rBS3/46nbwCB6ZK7uiH3OkzrtvZhECuy/7BGv3dA7wUqIb3e6PVLpui1dL5UJw==", "dev": true, "peer": true, "requires": {} }, "@clevercanyon/utilities.node": { - "version": "1.0.77", - "resolved": "https://registry.npmjs.org/@clevercanyon/utilities.node/-/utilities.node-1.0.77.tgz", - "integrity": "sha512-5DthF6Y7yY8P971/8ktn+HW7EamyxTBl1RrfGr61XIscPobl9n36vLqUJ5Cjzr+MfxDf9i9BKRevUUHRYnlYfg==", + "version": "1.0.79", + "resolved": "https://registry.npmjs.org/@clevercanyon/utilities.node/-/utilities.node-1.0.79.tgz", + "integrity": "sha512-orJur/bG18014I2xRtFbvb8rcQ2hpnSfl3Rql4VfJ+P1uYeoA9BvtxFUErywStcoQ647GBBOKJQCl+WZRzbXKQ==", "dev": true, "requires": {} }, "@clevercanyon/utilities.web": { - "version": "1.0.53", - "resolved": "https://registry.npmjs.org/@clevercanyon/utilities.web/-/utilities.web-1.0.53.tgz", - "integrity": "sha512-k/TPeCyHogBOvmm8O/9g9EOoLxZxqbYejKmkhwifmE0dSYENOyHe3RZ5WCj+9AUSJR3cWxUFOBGsyQkUuBW0dA==", + "version": "1.0.55", + "resolved": "https://registry.npmjs.org/@clevercanyon/utilities.web/-/utilities.web-1.0.55.tgz", + "integrity": "sha512-MExqd0O5ommRWwlTHTl0mszAHZyYrlqxeQAm+JC2+/GeduHxdZyDR1sx9+zxDUNFoPd6dzApoi/RRzrM2iedEA==", "dev": true, "peer": true, "requires": {} @@ -23402,11 +23402,11 @@ } }, "braces": { - "version": "npm:@clevercanyon/braces.fork@3.0.38", - "resolved": "https://registry.npmjs.org/@clevercanyon/braces.fork/-/braces.fork-3.0.38.tgz", - "integrity": "sha512-3QnTFqM9IStp1gloA6oKkjy0WwIBs+xQsgg2/Web3WopywkJ8RxX4B2TSl1ATuXRKUS6FOHx6FFII5t6EmU23g==", + "version": "npm:@clevercanyon/braces.fork@3.0.39", + "resolved": "https://registry.npmjs.org/@clevercanyon/braces.fork/-/braces.fork-3.0.39.tgz", + "integrity": "sha512-93SZcllEDWl+MndMdNyIEVbjT/RQXjVXq98O8bWuov9AQSJP+PVYHp/LnW/cnUWbP4TKBJGeOqCHo2Aqp22l4Q==", "requires": { - "fill-range": "npm:@clevercanyon/fill-range.fork@^7.0.37" + "fill-range": "npm:@clevercanyon/fill-range.fork@^7.0.38" } }, "browserslist": { @@ -25461,11 +25461,11 @@ } }, "fill-range": { - "version": "npm:@clevercanyon/fill-range.fork@7.0.37", - "resolved": "https://registry.npmjs.org/@clevercanyon/fill-range.fork/-/fill-range.fork-7.0.37.tgz", - "integrity": "sha512-WN9ZkRlxPT7537OOtwe2CwDiHRnWlDorBiUGm52WItnKnJPh974FgvBXOEVA0R0V4k8IHezxXGj8eqkhp9kyzQ==", + "version": "npm:@clevercanyon/fill-range.fork@7.0.38", + "resolved": "https://registry.npmjs.org/@clevercanyon/fill-range.fork/-/fill-range.fork-7.0.38.tgz", + "integrity": "sha512-rLb0uNZXr+8SIHmIDdGPnfaK3DNLmBzy/dlHErfQ7qXJQ2/USiHpMqznt0764ZjcFs/94HU6pcaMnFKieItXVQ==", "requires": { - "to-regex-range": "npm:@clevercanyon/to-regex-range.fork@^5.0.37" + "to-regex-range": "npm:@clevercanyon/to-regex-range.fork@^5.0.38" } }, "find-up": { @@ -26346,9 +26346,9 @@ "dev": true }, "is-number": { - "version": "npm:@clevercanyon/is-number.fork@7.0.40", - "resolved": "https://registry.npmjs.org/@clevercanyon/is-number.fork/-/is-number.fork-7.0.40.tgz", - "integrity": "sha512-is5gNYgqx7X4dasf7j6txGW9Saw/qd0WguCkzcPbmzK9ogAH3tn+xANSGKOgfQyFTqG3gfPDUd4BWZsjjeIbwA==" + "version": "npm:@clevercanyon/is-number.fork@7.0.41", + "resolved": "https://registry.npmjs.org/@clevercanyon/is-number.fork/-/is-number.fork-7.0.41.tgz", + "integrity": "sha512-TGdcIQcM5A1w7FGcBNS3Ojcq7tuthWstK/GA6qE5u2IQfhg/6vZaJZKMN6PMMoIBVd+vyhT+IgoyccjkX4GHYw==" }, "is-number-object": { "version": "1.0.7", @@ -28475,18 +28475,18 @@ "dev": true }, "micromatch": { - "version": "npm:@clevercanyon/micromatch.fork@4.0.42", - "resolved": "https://registry.npmjs.org/@clevercanyon/micromatch.fork/-/micromatch.fork-4.0.42.tgz", - "integrity": "sha512-f3MJzMhB1xowds+J5DkCaiYHqG6wNC9Z0UHOEe6z6GHXGUany+10WHahT+5NNFy823+Dn28OIxJdsmp1gMF0Bw==", + "version": "npm:@clevercanyon/micromatch.fork@4.0.43", + "resolved": "https://registry.npmjs.org/@clevercanyon/micromatch.fork/-/micromatch.fork-4.0.43.tgz", + "integrity": "sha512-Aup5KbkvlCjW68lvVOkdwUi1MexQeM1cG3HXa+2NXtugRni9gaz9yucwiSUIlhQNAkSqP9QPlmELayFNzuRHxA==", "requires": { - "braces": "npm:@clevercanyon/braces.fork@^3.0.38", - "picomatch": "npm:@clevercanyon/picomatch.fork@^2.3.37" + "braces": "npm:@clevercanyon/braces.fork@^3.0.39", + "picomatch": "npm:@clevercanyon/picomatch.fork@^2.3.38" }, "dependencies": { "picomatch": { - "version": "npm:@clevercanyon/picomatch.fork@2.3.37", - "resolved": "https://registry.npmjs.org/@clevercanyon/picomatch.fork/-/picomatch.fork-2.3.37.tgz", - "integrity": "sha512-rcWR8LIDGW5YD2B6M1scvrGZ8jlQeiIM3xlxgnDLooGvwcr784GVCb5CUxSfYiVPTVbyBlmY5cMEFHQrq+43Mw==" + "version": "npm:@clevercanyon/picomatch.fork@2.3.38", + "resolved": "https://registry.npmjs.org/@clevercanyon/picomatch.fork/-/picomatch.fork-2.3.38.tgz", + "integrity": "sha512-OLIPTMUhps62ttNvbWkkw4r9vigWB4lOHM12L/fghoshRyE8GuqHpPxJhCBiajI+HKNWQMau4i/XNwgwnygnkA==" } } }, @@ -31032,9 +31032,9 @@ } }, "shescape": { - "version": "npm:@clevercanyon/shescape.fork@1.6.34", - "resolved": "https://registry.npmjs.org/@clevercanyon/shescape.fork/-/shescape.fork-1.6.34.tgz", - "integrity": "sha512-OCBIWSnzvFFdqsnOzVQ+0OeefJrO6UitIR/rog4UceQnd7FQiteakFgXbP09LpO1dT7pAjvN5ykun+YbrOhMEg==", + "version": "npm:@clevercanyon/shescape.fork@1.6.35", + "resolved": "https://registry.npmjs.org/@clevercanyon/shescape.fork/-/shescape.fork-1.6.35.tgz", + "integrity": "sha512-TOj/fUE4yUfg3Q+NjCWyJFJHCvCeaWgLQ0VBRx0zdgebak2sgplnx66NP1TqsQl2UhX3cGm3Fg5DBn/nD+20zA==", "dev": true, "peer": true, "requires": { @@ -31145,9 +31145,9 @@ "dev": true }, "spawn-please": { - "version": "npm:@clevercanyon/spawn-please.fork@2.0.34", - "resolved": "https://registry.npmjs.org/@clevercanyon/spawn-please.fork/-/spawn-please.fork-2.0.34.tgz", - "integrity": "sha512-oM7QLM3B3lIgmLrhG6kUOFmP4JTiuzVdP4RhKtiGlZ+7SBhFNKFqy+eDsMIjPn2xtC1idkSQZ8opldUOkzM1Hw==", + "version": "npm:@clevercanyon/spawn-please.fork@2.0.35", + "resolved": "https://registry.npmjs.org/@clevercanyon/spawn-please.fork/-/spawn-please.fork-2.0.35.tgz", + "integrity": "sha512-LZPa6xLp+nGrZLK9E4KoOh5rnsU44ZAi/QvoTNEmyG8B/CLnNk+aDwqUFSxTsuN2ojHfND9Iks0xlHv/L06CzA==", "dev": true, "peer": true, "requires": { @@ -32001,11 +32001,11 @@ "dev": true }, "to-regex-range": { - "version": "npm:@clevercanyon/to-regex-range.fork@5.0.37", - "resolved": "https://registry.npmjs.org/@clevercanyon/to-regex-range.fork/-/to-regex-range.fork-5.0.37.tgz", - "integrity": "sha512-sLGv1IkIQoxZ2djyjaY6OZPQDe6IwOAGTvtLbQtONRip4baYB+Od/s046CR+7py4wdX7xwQ/CMcTmZ0VwhnyEQ==", + "version": "npm:@clevercanyon/to-regex-range.fork@5.0.38", + "resolved": "https://registry.npmjs.org/@clevercanyon/to-regex-range.fork/-/to-regex-range.fork-5.0.38.tgz", + "integrity": "sha512-RG6fRGQ0OjCb0V/Uw0777t7iEyvMQU8a3Vzw8wxkzKXZ3IWstrBn0e1xiEwgGGLW8PETJHjTj1mn5QpmUYBNnA==", "requires": { - "is-number": "npm:@clevercanyon/is-number.fork@^7.0.40" + "is-number": "npm:@clevercanyon/is-number.fork@^7.0.41" } }, "totalist": { diff --git a/package.json b/package.json index 91323df..c67bcd7 100644 --- a/package.json +++ b/package.json @@ -3,7 +3,7 @@ "publishConfig": { "access": "restricted" }, - "version": "1.0.78", + "version": "1.0.79", "license": "GPL-3.0-or-later", "name": "@clevercanyon/utilities.cfw", "description": "Utilities for JavaScript apps running in a Cloudflare Worker environment.", @@ -50,14 +50,14 @@ }, "dependencies": {}, "peerDependencies": { - "@clevercanyon/utilities": "^1.0.198", + "@clevercanyon/utilities": "^1.0.199", "@cloudflare/kv-asset-handler": "^0.2.0" }, "peerDependenciesMeta": {}, "optionalDependencies": {}, "bundleDependencies": [], "devDependencies": { - "@clevercanyon/skeleton-dev-deps": "^1.0.164" + "@clevercanyon/dev-deps": "^1.0.167" }, "overrides": {}, "cpu": ["x64", "arm64"],