diff --git a/.eslintrc.cjs b/.eslintrc.cjs index 0719bda9..1e0da0c1 100644 --- a/.eslintrc.cjs +++ b/.eslintrc.cjs @@ -9,13 +9,13 @@ */ /* eslint-env es2021, node */ -const mc = require('merge-change'); +const $obj = require('@clevercanyon/utilities/obj'); const baseConfig = require('./dev/.files/eslint/config.cjs'); /* * Customizations. * */ -module.exports = mc.merge({}, baseConfig, {}); +module.exports = $obj.mc.merge({}, baseConfig, {}); /* */ diff --git a/.madrun.mjs b/.madrun.mjs index 6a99aae2..51c940c6 100644 --- a/.madrun.mjs +++ b/.madrun.mjs @@ -9,13 +9,13 @@ */ /* eslint-env es2021, node */ -import mc from 'merge-change'; +import { $obj } from '@clevercanyon/utilities'; import baseConfig from './dev/.files/madrun/config.mjs'; /* * Customizations. * */ -export default mc.merge({}, baseConfig, {}); +export default $obj.mc.merge({}, baseConfig, {}); /* */ diff --git a/.postcssrc.cjs b/.postcssrc.cjs index 32d76258..51b765d3 100644 --- a/.postcssrc.cjs +++ b/.postcssrc.cjs @@ -9,13 +9,13 @@ */ /* eslint-env es2021, node */ -const mc = require('merge-change'); +const $obj = require('@clevercanyon/utilities/obj'); const baseConfig = require('./dev/.files/postcss/config.cjs'); /* * Customizations. * */ -module.exports = mc.merge({}, baseConfig, {}); +module.exports = $obj.mc.merge({}, baseConfig, {}); /* */ diff --git a/.prettierrc.cjs b/.prettierrc.cjs index a5b9e717..fe3a7e9d 100644 --- a/.prettierrc.cjs +++ b/.prettierrc.cjs @@ -9,13 +9,13 @@ */ /* eslint-env es2021, node */ -const mc = require('merge-change'); +const $obj = require('@clevercanyon/utilities/obj'); const baseConfig = require('./dev/.files/prettier/config.cjs'); /* * Customizations. * */ -module.exports = mc.merge({}, baseConfig, {}); +module.exports = $obj.mc.merge({}, baseConfig, {}); /* */ diff --git a/.stylelintrc.cjs b/.stylelintrc.cjs index d51bc78a..dc425a9c 100644 --- a/.stylelintrc.cjs +++ b/.stylelintrc.cjs @@ -9,13 +9,13 @@ */ /* eslint-env es2021, node */ -const mc = require('merge-change'); +const $obj = require('@clevercanyon/utilities/obj'); const baseConfig = require('./dev/.files/stylelint/config.cjs'); /* * Customizations. * */ -module.exports = mc.merge({}, baseConfig, {}); +module.exports = $obj.mc.merge({}, baseConfig, {}); /* */ diff --git a/.tailwindrc.cjs b/.tailwindrc.cjs index a93c57c7..864cb92f 100644 --- a/.tailwindrc.cjs +++ b/.tailwindrc.cjs @@ -9,13 +9,13 @@ */ /* eslint-env es2021, node */ -const mc = require('merge-change'); +const $obj = require('@clevercanyon/utilities/obj'); const baseConfig = require('./dev/.files/tailwind/config.cjs'); /* * Customizations. * */ -module.exports = mc.merge({}, baseConfig, {}); +module.exports = $obj.mc.merge({}, baseConfig, {}); /* */ diff --git a/dev/.files/bin/envs.mjs b/dev/.files/bin/envs.mjs index 67e76657..895a7261 100755 --- a/dev/.files/bin/envs.mjs +++ b/dev/.files/bin/envs.mjs @@ -15,15 +15,11 @@ import fsp from 'node:fs/promises'; import chalk from 'chalk'; import u from './includes/utilities.mjs'; +import { $yargs } from '@clevercanyon/utilities.node'; const __dirname = dirname(import.meta.url); const projDir = path.resolve(__dirname, '../../..'); -/** - * NOTE: Most of these commands _must_ be performed interactively. Please review the Yargs configuration below for - * further details. At this time, only the `decrypt` command is allowed noninteractively, and _only_ noninteractively. - */ - /** * Install command. */ @@ -479,9 +475,13 @@ class Decrypt { * Yargs ⛵🏴‍☠. */ void (async () => { - await u.propagateUserEnvVars(); // i.e., `USER_` env vars. - const yargs = await u.yargs({ scriptName: 'madrun envs' }); - await yargs + await u.propagateUserEnvVars(); + await ( + await $yargs.cli({ + scriptName: 'madrun envs', + version: (await u.pkg()).version, + }) + ) .command({ command: 'install', describe: 'Installs all envs for Dotenv Vault.', diff --git a/dev/.files/bin/includes/utilities.mjs b/dev/.files/bin/includes/utilities.mjs index ae956bf9..b971fc0d 100755 --- a/dev/.files/bin/includes/utilities.mjs +++ b/dev/.files/bin/includes/utilities.mjs @@ -9,7 +9,6 @@ import _ from 'lodash'; import deeps from 'deeps'; -import mc from 'merge-change'; import os from 'node:os'; import fs from 'node:fs'; @@ -17,22 +16,15 @@ import path from 'node:path'; import { dirname } from 'desm'; import fsp from 'node:fs/promises'; -import * as se from 'shescape'; -import spawn from 'spawn-please'; - -import coloredBox from 'boxen'; -import terminalImage from 'term-img'; -import chalk, { supportsColor } from 'chalk'; - +import chalk from 'chalk'; import semver from 'semver'; import prettier from 'prettier'; import dotenv from 'dotenv'; import dotenvVaultCore from 'dotenv-vault-core'; -import yArgs from 'yargs'; -// ↓ Incompatible with Vite’s config file bundler. -// import { hideBin as yArgsꓺhideBin } from 'yargs/helpers'; +import { $str, $obj, $url } from '@clevercanyon/utilities'; +import { $cmd, $chalk } from '@clevercanyon/utilities.node'; import { Octokit as OctokitCore } from '@octokit/core'; import { paginateRest as OctokitPluginPaginateRest } from '@octokit/plugin-paginate-rest'; @@ -44,6 +36,10 @@ const projDir = path.resolve(__dirname, '../../../..'); const { pkgFile, pkgName, pkgPrivate, pkgRepository, pkgBuildAppType } = (() => { const pkgFile = path.resolve(projDir, './package.json'); + + if (!fs.existsSync(pkgFile)) { + throw new Error('u: Missing `./package.json`.'); + } const pkg = JSON.parse(fs.readFileSync(pkgFile).toString()); if (typeof pkg !== 'object') { @@ -64,11 +60,8 @@ const githubEnvsVersion = '1.0.2'; // Bump when environments change in routines const npmjsConfigVersion = '1.0.2'; // Bump when config changes in routines below. const c10nLogo = path.resolve(__dirname, '../../assets/brands/c10n/logo.png'); -const c10nLogoDev = path.resolve(__dirname, '../../assets/brands/c10n/logo-dev.png'); -const yArgsꓺhideBin = (argv) => argv.slice(2); // Polyfill for incompatible import noted above. - -mc.addOperation('$default', (current, defaults) => { +$obj.mc.addOperation('$default', (current, defaults) => { const paths = Object.keys(defaults); for (const path of paths) { @@ -78,7 +71,7 @@ mc.addOperation('$default', (current, defaults) => { } return paths.length > 0; }); -mc.addOperation('$ꓺdefault', (current, defaults) => { +$obj.mc.addOperation('$ꓺdefault', (current, defaults) => { const paths = Object.keys(defaults); for (const path of paths) { @@ -89,17 +82,6 @@ mc.addOperation('$ꓺdefault', (current, defaults) => { return paths.length > 0; }); -const yargsꓺdefaultOpts = { - bracketedArrays: true, - scriptName: '', - errorBoxName: '', - helpOption: 'help', - versionOption: 'version', - maxTerminalWidth: 80, - showHidden: false, - strict: true, -}; - /** * Utilities. */ @@ -109,45 +91,13 @@ export default class u { */ /* - * StdIO utilities. + * Output utilities. */ static log(...args) { return console.log(...args); } - static logError(...args) { - return console.error(...args); - } - - static logDebug(...args) { - return console.debug(...args); - } - - static echo(...args) { - return process.stdout.write.bind(process.stdout)(...args); - } - - static echoError(...args) { - return process.stdout.write.bind(process.stderr)(...args); - } - - static echoDebug(...args) { - return process.stdout.write.bind(process.stdout)(...args); - } - - /* - * String utilities. - */ - - static encURI(...args) { - return encodeURIComponent(...args); - } - - static escRegExp(str) { - return str.replace(/[.*+?^${}()|[\]\\]/gu, '\\$&'); - } - /** * Asynchronous utilities. */ @@ -163,97 +113,6 @@ export default class u { process.env.CLOUDFLARE_API_TOKEN = process.env.USER_CLOUDFLARE_TOKEN || ''; } - /** - * Yargs utilities. - */ - - static async yargs(opts = yargsꓺdefaultOpts) { - let newYargs; // Initialize. - opts = Object.assign({}, yargsꓺdefaultOpts, opts); - - if (opts.bracketedArrays) { - newYargs = await u._yArgsꓺwithBracketedArrays(); - } else { - newYargs = yArgs(yArgsꓺhideBin(process.argv)); - } - if (opts.scriptName) { - newYargs.scriptName(opts.scriptName); - } - return newYargs - .parserConfiguration({ - 'strip-dashed': true, - 'strip-aliased': true, - 'greedy-arrays': true, - 'dot-notation': false, - 'boolean-negation': false, - }) - .help(opts.helpOption) // Given explicitly. - .version(opts.versionOption, (await u.pkg()).version || '0.0.0') - - .wrap(Math.max(opts.maxTerminalWidth, newYargs.terminalWidth() / 2)) - .showHidden(opts.showHidden) // `false` = permanently hide hidden options. - .strict(opts.strict) // `true` = no arbitrary commands|options. - - .fail(async (message, error /* , yargs */) => { - if (error?.stack && typeof error.stack === 'string') u.logError(chalk.gray(error.stack)); - u.logError(await u.errorBox((opts.errorBoxName ? opts.errorBoxName + ': ' : '') + 'Problem', error ? error.toString() : message || 'Unexpected unknown errror.')); - process.exit(1); - }); - } - - static async _yArgsꓺwithBracketedArrays() { - const bracketedArrayArgNames = []; - const newYargsArgs = yArgsꓺhideBin(process.argv); - - for (const arg of newYargsArgs) { - let m = null; // Initializes variable. - if ((m = arg.match(/^-{1,2}((?:[^-[\]\s][^[\]\s]*)?\[\]?)$/u))) { - if ('[]' === m[1]) bracketedArrayArgNames.push('['); - bracketedArrayArgNames.push(m[1]); - } - } - if (!bracketedArrayArgNames.length) { - return yArgs(newYargsArgs); // New Yargs instance. - } - for (let i = 0, inBracketedArrayArgs = false; i < newYargsArgs.length; i++) { - if (inBracketedArrayArgs) { - if (']' === newYargsArgs[i] || '-]' === newYargsArgs[i]) { - inBracketedArrayArgs = false; - newYargsArgs[i] = '-]'; // Closing arg. - } - } else if (newYargsArgs[i].match(/^-{1,2}((?:[^-[\]\s][^[\]\s]*)?\[)$/u)) { - inBracketedArrayArgs = true; - } - } - return yArgs(newYargsArgs) // New Yargs instance. - .array(bracketedArrayArgNames) - .options({ - ']': { - hidden: true, - type: 'boolean', - requiresArg: false, - demandOption: false, - default: false, - }, - }) - .middleware((args) => { - delete args[']']; // Ditch closing brackets. - - for (const [name] of Object.entries(args)) { - if (['$0', '_', ']'].includes(name)) { - continue; // Not applicable. - } else if (!bracketedArrayArgNames.includes(name)) { - continue; // Not applicable. - } - if (args[name] instanceof Array) { - args[name] = args[name] // - .map((v) => (typeof v === 'string' ? v.replace(/,$/u, '') : v)) - .filter((v) => '' !== v); - } - } - }, true); - } - /* * TTY utilities. */ @@ -268,28 +127,14 @@ export default class u { */ static async spawn(cmd, args = [], opts = {}) { - if ('shell' in opts ? opts.shell : 'bash') { - // When using a shell, we must escape everything ourselves. - // i.e., Node does not escape `cmd` or `args` when a `shell` is given. - (cmd = se.quote(cmd)), (args = se.quoteAll(args)); - } - return await spawn(cmd, args, { + return await $cmd.spawn(cmd, args, { cwd: projDir, - shell: 'bash', stdio: 'pipe', env: { - ...process.env, - PARENT_IS_TTY: - process.stdout.isTTY || // - process.env.PARENT_IS_TTY - ? 'true' - : 'false', + ...process.env, // Parent TTY assists {@see isInteractive()}. + PARENT_IS_TTY: process.stdout.isTTY || process.env.PARENT_IS_TTY ? 'true' : 'false', }, - // Output handlers do not run when `stdio: 'inherit'` or `quiet: true`. - stdout: opts.quiet ? null : (buffer) => u.echo(chalk.white(buffer.toString())), - stderr: opts.quiet ? null : (buffer) => u.echoError(chalk.gray(buffer.toString())), - - ..._.omit(opts, ['quiet']), + ...opts, }); } @@ -298,6 +143,9 @@ export default class u { */ static async pkg() { + if (!fs.existsSync(pkgFile)) { + throw new Error('u.pkg: Missing `./package.json`.'); + } const pkg = JSON.parse(fs.readFileSync(pkgFile).toString()); if (typeof pkg !== 'object') { @@ -307,7 +155,7 @@ export default class u { } static async isPkgRepo(ownerRepo) { - return new RegExp('[:/]' + u.escRegExp(ownerRepo) + '(?:\\.git)?$', 'iu').test(pkgRepository); + return new RegExp('[:/]' + $str.escRegExp(ownerRepo) + '(?:\\.git)?$', 'iu').test(pkgRepository); } static async isPkgRepoTemplate() { @@ -343,7 +191,7 @@ export default class u { // } else if (typeof propsOrPath === 'object') { const props = propsOrPath; // Object props. - mc.patch(pkg, props); // Potentially declarative ops. + $obj.mc.patch(pkg, props); // Potentially declarative ops. } else { throw new Error('u.updatePkg: Invalid arguments.'); } @@ -372,7 +220,7 @@ export default class u { delete updates.$ꓺdefault['devDependenciesꓺ@clevercanyon/skeleton-dev-deps']; } } - mc.patch(curPkg, updates); // Potentially declarative ops. + $obj.mc.patch(curPkg, updates); // Potentially declarative ops. for (const path of sortOrder) { const value = deeps.get(curPkg, path, 'ꓺ'); @@ -476,7 +324,7 @@ export default class u { */ static async gistGetJSON(user, gistId) { - return await (await fetch('https://gist.github.com/' + encodeURIComponent(user) + '/' + encodeURIComponent(gistId) + '/raw')).json(); + return await (await fetch('https://gist.github.com/' + $url.encode(user) + '/' + $url.encode(gistId) + '/raw')).json(); } static async gistGetC10NUsers() { @@ -612,7 +460,7 @@ export default class u { const protectedBranches = await u._githubRepoProtectedBranches(); const protectedBranchesToDelete = Object.assign({}, protectedBranches); - const defaultHomepage = 'https://github.com/' + encodeURIComponent(owner) + '/' + encodeURIComponent(repo) + '#readme'; + const defaultHomepage = 'https://github.com/' + $url.encode(owner) + '/' + $url.encode(repo) + '#readme'; const defaultDescription = 'Another great project by @' + repoData.owner.login + '.'; u.log(chalk.gray('Configuring GitHub repo using org-wide standards.')); @@ -1067,7 +915,7 @@ export default class u { if (!opts.dryRun) { for (const [envName, envFile] of Object.entries(_.omit(envFiles, ['main']))) { const thisEnv = dotenv.parse(envFile); - const env = mc.merge({}, mainEnv, thisEnv); + const env = $obj.mc.merge({}, mainEnv, thisEnv); const compDir = path.resolve(path.dirname(envFile), './.~comp'); const envJSONFile = path.resolve(compDir, path.basename(envFile) + '.json'); @@ -1354,59 +1202,11 @@ export default class u { await u.spawn('npx', ['vite', 'build', '--mode', opts.mode]); } - /** - * Error utilities. - */ - - static async errorBox(title, text) { - if (!process.stdout.isTTY || !supportsColor || !supportsColor?.has16m) { - return chalk.red(text); // No box. - } - return ( - '\n' + - coloredBox(chalk.bold.red(text), { - margin: 0, - padding: 0.75, - textAlignment: 'left', - - dimBorder: false, - borderStyle: 'round', - borderColor: '#551819', - backgroundColor: '', - - titleAlignment: 'left', - title: chalk.bold.redBright('⚑ ' + title), - }) + - '\n' + - (await terminalImage(c10nLogoDev, { width: '300px', fallback: () => '' })) - ); - } - /** * Finale utilities. */ static async finaleBox(title, text) { - if (!process.stdout.isTTY || !supportsColor || !supportsColor?.has16m) { - return chalk.green(text); // No box. - } - return ( - '\n' + - coloredBox(chalk.bold.hex('#ed5f3b')(text), { - margin: 0, - padding: 0.75, - textAlignment: 'left', - - dimBorder: false, - borderStyle: 'round', - borderColor: '#8e3923', - backgroundColor: '', - - titleAlignment: 'left', - title: chalk.bold.green('✓ ' + title), - }) + - '\n' + - (await terminalImage(c10nLogo, { width: '300px', fallback: () => '' })) - ); + return await $chalk.finaleBox(title, text, { image: c10nLogo }); } } diff --git a/dev/.files/bin/install.mjs b/dev/.files/bin/install.mjs index 564a2b4f..ccafd506 100755 --- a/dev/.files/bin/install.mjs +++ b/dev/.files/bin/install.mjs @@ -14,15 +14,11 @@ import { dirname } from 'desm'; import chalk from 'chalk'; import u from './includes/utilities.mjs'; +import { $yargs } from '@clevercanyon/utilities.node'; const __dirname = dirname(import.meta.url); const projDir = path.resolve(__dirname, '../../..'); -/** - * NOTE: All commands in this file must support both interactive and noninteractive sessions. Installations occur across - * a variety of platforms and environments. Therefore, it's important to exercise caution before making changes. - */ - /** * Project command. */ @@ -111,9 +107,13 @@ class Project { * Yargs ⛵🏴‍☠. */ void (async () => { - await u.propagateUserEnvVars(); // i.e., `USER_` env vars. - const yargs = await u.yargs({ scriptName: 'madrun install' }); - await yargs + await u.propagateUserEnvVars(); + await ( + await $yargs.cli({ + scriptName: 'madrun install', + version: (await u.pkg()).version, + }) + ) .command({ command: ['project'], describe: 'Installs NPM packages, envs, and builds distro.', diff --git a/dev/.files/bin/update.mjs b/dev/.files/bin/update.mjs index 6746ac32..11a11012 100755 --- a/dev/.files/bin/update.mjs +++ b/dev/.files/bin/update.mjs @@ -15,25 +15,16 @@ import path from 'node:path'; import { dirname } from 'desm'; import fsp from 'node:fs/promises'; -import mm from 'micromatch'; -import { globby } from 'globby'; - import chalk from 'chalk'; -import * as se from 'shescape'; - import u from './includes/utilities.mjs'; +import { $mm } from '@clevercanyon/utilities'; import coreProjects from './includes/core-projects.mjs'; -import { splitCMD } from '@clevercanyon/split-cmd.fork'; +import { $cmd, $glob, $yargs } from '@clevercanyon/utilities.node'; const __dirname = dirname(import.meta.url); const projDir = path.resolve(__dirname, '../../..'); const projsDir = path.resolve(__dirname, '../../../..'); -/** - * NOTE: All of these commands _must_ be performed interactively. Please review the Yargs configuration below for - * further details. At this time, there are no exceptions. Every update _must_ occur interactively. - */ - /** * Dotfiles command. */ @@ -322,11 +313,10 @@ class Projects { * Acquires unordered glob results. */ - const unorderedResults = await globby(this.args.globs, { + const unorderedResults = await $glob.promise(this.args.globs, { cwd: projsDir, onlyDirectories: true, - expandDirectories: false, - + absolute: false, gitignore: true, ignoreFiles: ['.~gitignore'], ignore: coreProjects.updates.ignore.concat(this.args.ignores), @@ -337,7 +327,7 @@ class Projects { */ for (const projDirSubpathGlob of coreProjects.updates.order.concat(this.args.order)) { - for (const projDirSubpath of mm(unorderedResults, projDirSubpathGlob)) { + for (const projDirSubpath of $mm.match(unorderedResults, projDirSubpathGlob)) { if (-1 === (i = unorderedResults.indexOf(projDirSubpath))) { continue; // Not applicable. } @@ -380,10 +370,10 @@ class Projects { if (this.args.cmds.length) { for (const cmd of this.args.cmds) { for (const cmdArgs of cmd.split(/\s*&&\s*/u)) { - const split = splitCMD(cmdArgs); // Splits into properties: `{cmd,args}`. + const split = $cmd.split(cmdArgs); // Splits into: `{cmd,args}`. - const quotedCMD = se.quote(split.cmd); // Used only in output logging. - const quotedArgs = se.quoteAll(split.args); // Only in output logging. + const quotedCMD = $cmd.quote(split.cmd); // Used only in output logging. + const quotedArgs = $cmd.quoteAll(split.args); // Only in output logging. u.log(chalk.green('Running `' + quotedCMD + (quotedArgs.length ? ' ' + quotedArgs.join(' ') : '') + '` in:') + ' ' + chalk.yellow(projDisplayDir)); if (!this.args.dryRun) { @@ -400,10 +390,10 @@ class Projects { if (this.args.runs.length) { for (const run of this.args.runs) { for (const cmdArgs of run.split(/\s*&&\s*/u)) { - const split = splitCMD(cmdArgs); // Splits into properties: `{cmd,args}`. + const split = $cmd.split(cmdArgs); // Splits into: `{cmd,args}`. - const quotedCMD = se.quote(split.cmd); // Used only in output logging. - const quotedArgs = se.quoteAll(split.args); // Only in output logging. + const quotedCMD = $cmd.quote(split.cmd); // Used only in output logging. + const quotedArgs = $cmd.quoteAll(split.args); // Only in output logging. u.log(chalk.green('Running `madrun ' + quotedCMD + (quotedArgs.length ? ' ' + quotedArgs.join(' ') : '') + '` in:') + ' ' + chalk.yellow(projDisplayDir)); if (!this.args.dryRun) { @@ -436,9 +426,13 @@ class Projects { * Yargs ⛵🏴‍☠. */ void (async () => { - await u.propagateUserEnvVars(); // i.e., `USER_` env vars. - const yargs = await u.yargs({ scriptName: 'madrun update' }); - await yargs + await u.propagateUserEnvVars(); + await ( + await $yargs.cli({ + scriptName: 'madrun update', + version: (await u.pkg()).version, + }) + ) .command({ command: ['dotfiles'], describe: 'Updates project dotfiles.', @@ -605,7 +599,7 @@ void (async () => { if (!args.globs.length) { throw new Error('Empty `glob` option.'); } - if (args.globs.includes('**') || mm(args.globs, ['\\*\\*'], { contains: true }).length) { + if (args.globs.includes('**') || $mm.match(args.globs, ['\\*\\*'], { contains: true }).length) { throw new Error('Globstars `**` are prohitibed in `glob` option.'); } if (!args.cmds.length && !args.runs.length) { diff --git a/dev/.files/bin/updater/index.mjs b/dev/.files/bin/updater/index.mjs index acbf45ff..ba09ae39 100644 --- a/dev/.files/bin/updater/index.mjs +++ b/dev/.files/bin/updater/index.mjs @@ -16,15 +16,15 @@ import fsp from 'node:fs/promises'; import chalk from 'chalk'; import deeps from 'deeps'; -import mc from 'merge-change'; import prettier from 'prettier'; -import spawn from 'spawn-please'; +import { $str, $obj } from '@clevercanyon/utilities'; import customRegexp from './data/custom-regexp.mjs'; +import { $cmd } from '@clevercanyon/utilities.node'; const { log } = console; // Shorter reference. -mc.addOperation('$default', (current, defaults) => { +$obj.mc.addOperation('$default', (current, defaults) => { const paths = Object.keys(defaults); for (const path of paths) { @@ -34,7 +34,7 @@ mc.addOperation('$default', (current, defaults) => { } return paths.length > 0; }); -mc.addOperation('$ꓺdefault', (current, defaults) => { +$obj.mc.addOperation('$ꓺdefault', (current, defaults) => { const paths = Object.keys(defaults); for (const path of paths) { @@ -52,17 +52,6 @@ export default async ({ projDir }) => { const __dirname = dirname(import.meta.url); const skeletonDir = path.resolve(__dirname, '../../../..'); - /** - * Escapes string for use in a regular expression. - * - * @param {string} str String to escape. - * - * @returns {string} Escaped string. - */ - const escRegExp = (str) => { - return str.replace(/[.*+?^${}()|[\]\\]/gu, '\\$&'); - }; - /** * Gets current `./package.json`. * @@ -70,6 +59,10 @@ export default async ({ projDir }) => { */ const getPkg = async () => { const pkgFile = path.resolve(projDir, './package.json'); + + if (!fs.existsSync(pkgFile)) { + throw new Error('updater.getPkg: Missing `./package.json`.'); + } const pkg = JSON.parse(fs.readFileSync(pkgFile).toString()); if (typeof pkg !== 'object') { @@ -99,7 +92,7 @@ export default async ({ projDir }) => { * @returns {boolean} True if current package repo is `ownerRepo`. */ const isPkgRepo = async (ownerRepo) => { - return new RegExp('[:/]' + escRegExp(ownerRepo) + '(?:\\.git)?$', 'iu').test(pkgRepository); + return new RegExp('[:/]' + $str.escRegExp(ownerRepo) + '(?:\\.git)?$', 'iu').test(pkgRepository); }; /** @@ -219,7 +212,7 @@ export default async ({ projDir }) => { delete jsonUpdates.$ꓺdefault['devDependenciesꓺ@clevercanyon/skeleton-dev-deps']; } } - mc.patch(json, jsonUpdates); // Potentially declarative ops. + $obj.mc.patch(json, jsonUpdates); // Potentially declarative ops. const prettierCfg = { ...(await prettier.resolveConfig(path.resolve(projDir, relPath))), parser: 'json' }; await fsp.writeFile(path.resolve(projDir, relPath), prettier.format(JSON.stringify(json, null, 4), prettierCfg)); } @@ -248,6 +241,6 @@ export default async ({ projDir }) => { */ if (!(await isPkgRepo('clevercanyon/skeleton-dev-deps'))) { log(chalk.green('Updating project to latest `@clevercanyon/skeleton-dev-deps`.')); - await spawn('npm', ['udpate', '@clevercanyon/skeleton-dev-deps', '--silent'], { cwd: projDir }); + await $cmd.spawn('npm', ['udpate', '@clevercanyon/skeleton-dev-deps'], { cwd: projDir }); } }; diff --git a/dev/.files/docs/usage/bin-scripts/update.md b/dev/.files/docs/usage/bin-scripts/update.md index 649308f0..175c577c 100644 --- a/dev/.files/docs/usage/bin-scripts/update.md +++ b/dev/.files/docs/usage/bin-scripts/update.md @@ -151,9 +151,9 @@ $ madrun update projects --run[ 'update dotfiles' ] --dryRun - 👍🏻 Valid Examples - `--run[ 'a', 'b', 'c' ]` and `--run[ 'a' 'b' 'c' ]` are equivalent (commas optional). - `--run[ 'a' ]` and `--run[ 'a', ]` are equivalent. A single array item (comma optional). -- 👍🏻 Alternate Syntax w/ Caveats +- Alternate Syntax w/ Caveats - `--run 'a'` shorthand is valid, but this syntax supports just a single array item. - - `--run[] 'a' 'b' 'c'` shorthand is valid and supports multiple array items. Commas are not allowed with this syntax, even if purely cosmetic. Also, this syntax cannot be followed by positional arguments, because `--run[]` is greedy in the collection of array items that follow its array option name. + - `--run[] 'a' 'b' 'c'` shorthand is valid and supports multiple array items. However, commas are not allowed with this syntax. Also, this syntax cannot be followed by any positional arguments, because `--run[]` is greedy in the collection of array items that follow its array option name. ### Updates Dotfiles + Project diff --git a/dev/.files/eslint/config.cjs b/dev/.files/eslint/config.cjs index 56cefde5..b5a964d7 100644 --- a/dev/.files/eslint/config.cjs +++ b/dev/.files/eslint/config.cjs @@ -22,8 +22,15 @@ const path = require('node:path'); const projDir = path.resolve(__dirname, '../../..'); const pkgFile = path.resolve(projDir, './package.json'); + +if (!fs.existsSync(pkgFile)) { + throw new Error('eslint/config.cjs: Missing `./package.json`.'); +} const pkg = JSON.parse(fs.readFileSync(pkgFile).toString()); +const allJSExtns = ['.js', '.jsx', '.cjs', '.cjsx', '.json', '.node', '.mjs', '.mjsx']; +const allTSExtns = ['.ts', '.tsx', '.cts', '.ctsx', '.mts', '.mtsx']; + /** * Base config. */ @@ -55,7 +62,13 @@ const baseConfig = { '**/jspm_packages/**', '**/bower_components/**', ], - settings: {}, // None at this time. + settings: { + // . + 'import/extensions': [...allJSExtns], + 'import/resolver': { + node: { extensions: [...allJSExtns] }, + }, + }, // None at this time. parser: 'espree', // Default parser. // , . @@ -70,6 +83,8 @@ const baseConfig = { }, rules: { 'import/no-named-as-default-member': ['off'], + 'import/no-duplicates': ['off'], // Redundant & not smart. + 'import/extensions': ['warn', 'always', { ignorePackages: true }], 'no-empty': ['warn', { allowEmptyCatch: true }], }, }; @@ -93,19 +108,19 @@ tsExtends.splice(-1, 0, // Prettier must come last. * Typescript overrides. */ const tsOverrides = { - plugins: tsPlugins, - extends: tsExtends, + plugins: [...tsPlugins], + extends: [...tsExtends], settings: { ...baseConfig.settings, - 'import/parsers': { - '@typescript-eslint/parser': ['.ts', '.tsx', '.cts', '.ctsx', '.mts', '.mtsx'], - }, + 'import/extensions': [...allJSExtns, ...allTSExtns], + 'import/parsers': { '@typescript-eslint/parser': [...allTSExtns] }, 'import/resolver': { typescript: { alwaysTryTypes: true, project: ['**/tsconfig.json'], }, + node: { extensions: [...allJSExtns, ...allTSExtns] }, }, }, parser: '@typescript-eslint/parser', @@ -137,6 +152,14 @@ const tsOverrides = { 'lib': 'always', }, ], + 'import/extensions': [ + 'warn', + 'always', // Require all imports to include a file extension. + { + ignorePackages: true, // ↓ Never use TS extensions in imports. + pattern: { ...Object.fromEntries(Array.from(allTSExtns, (e) => [e.slice(1), 'never'])) }, + }, + ], }, }; @@ -147,7 +170,7 @@ module.exports = { ...baseConfig, overrides: [ { - files: ['**/*.cjs'], + files: ['**/*.{cjs,node}'], parserOptions: { ...baseConfig.parserOptions, diff --git a/dev/.files/madrun/includes/events.mjs b/dev/.files/madrun/includes/events.mjs index 26131805..59f889ca 100644 --- a/dev/.files/madrun/includes/events.mjs +++ b/dev/.files/madrun/includes/events.mjs @@ -9,10 +9,11 @@ /* eslint-env es2021, node */ import fs from 'node:fs'; -import fsp from 'node:fs/promises'; -import { dirname } from 'desm'; import path from 'node:path'; +import { dirname } from 'desm'; +import fsp from 'node:fs/promises'; +import { $url } from '@clevercanyon/utilities'; import u from '../../bin/includes/utilities.mjs'; const __dirname = dirname(import.meta.url); @@ -33,10 +34,10 @@ export default { */ async (args) => { /** - * Propagates `USER_` env vars. + * Propagates env vars. */ - await u.propagateUserEnvVars(); // i.e., `USER_` env vars. + await u.propagateUserEnvVars(); /** * Deletes Dotenv Vault associated with template. @@ -50,7 +51,7 @@ export default { */ const dirBasename = path.basename(projDir); - const parentDir = path.dirname(projDir); // One level up. + const parentDir = path.dirname(projDir); const parentDirBasename = path.basename(parentDir); /** @@ -59,9 +60,9 @@ export default { await u.updatePkg({ name: args.pkgName || '@' + parentDirBasename + '/' + dirBasename, - repository: 'https://github.com/' + u.encURI(parentDirBasename) + '/' + u.encURI(dirBasename), - homepage: 'https://github.com/' + u.encURI(parentDirBasename) + '/' + u.encURI(dirBasename) + '#readme', - bugs: 'https://github.com/' + u.encURI(parentDirBasename) + '/' + u.encURI(dirBasename) + '/issues', + repository: 'https://github.com/' + $url.encode(parentDirBasename) + '/' + $url.encode(dirBasename), + homepage: 'https://github.com/' + $url.encode(parentDirBasename) + '/' + $url.encode(dirBasename) + '#readme', + bugs: 'https://github.com/' + $url.encode(parentDirBasename) + '/' + $url.encode(dirBasename) + '/issues', $unset: /* Effectively resets these to default values. */ [ 'private', // @@ -93,10 +94,13 @@ export default { */ const readmeFile = path.resolve(projDir, './README.md'); - let readme = fs.readFileSync(readmeFile).toString(); // Markdown. - readme = readme.replace(/@clevercanyon\/[^/?#\s]+/gu, args.pkgName || '@' + parentDirBasename + '/' + dirBasename); - await fsp.writeFile(readmeFile, readme); // Updates `./README.md` file. + if (fs.existsSync(readmeFile)) { + let readme = fs.readFileSync(readmeFile).toString(); // Markdown. + + readme = readme.replace(/@clevercanyon\/[^/?#\s]+/gu, args.pkgName || '@' + parentDirBasename + '/' + dirBasename); + await fsp.writeFile(readmeFile, readme); // Updates `./README.md` file. + } /** * Initializes this as a new git repository. @@ -123,14 +127,14 @@ export default { if (process.env.GH_TOKEN && 'owner' === (await u.gistGetC10NUser()).github?.role) { await u.spawn('gh', ['repo', 'create', parentDirBasename + '/' + dirBasename, '--source=.', args.public ? '--public' : '--private'], { stdio: 'inherit' }); } else { - const origin = 'https://github.com/' + u.encURI(parentDirBasename) + '/' + u.encURI(dirBasename) + '.git'; + const origin = 'https://github.com/' + $url.encode(parentDirBasename) + '/' + $url.encode(dirBasename) + '.git'; await u.spawn('git', ['remote', 'add', 'origin', origin], { stdio: 'inherit' }); } } else if (process.env.USER_GITHUB_USERNAME === parentDirBasename) { if (process.env.GH_TOKEN) { await u.spawn('gh', ['repo', 'create', parentDirBasename + '/' + dirBasename, '--source=.', args.public ? '--public' : '--private'], { stdio: 'inherit' }); } else { - const origin = 'https://github.com/' + u.encURI(parentDirBasename) + '/' + u.encURI(dirBasename) + '.git'; + const origin = 'https://github.com/' + $url.encode(parentDirBasename) + '/' + $url.encode(dirBasename) + '.git'; await u.spawn('git', ['remote', 'add', 'origin', origin], { stdio: 'inherit' }); } } @@ -139,7 +143,7 @@ export default { * Signals completion with success. */ - u.log(await u.finale('Success', 'New project ready.')); + u.log(await u.finaleBox('Success', 'New project ready.')); }, ], }; diff --git a/dev/.files/prettier/config.cjs b/dev/.files/prettier/config.cjs index 501de1eb..697ef8f7 100644 --- a/dev/.files/prettier/config.cjs +++ b/dev/.files/prettier/config.cjs @@ -83,7 +83,7 @@ module.exports = { * * @see https://o5p.me/dTTfse */ - files: ['*.{js,jsx,cjs,cjsx,mjs,mjsx,ts,tsx,cts,ctsx,mts,mtsx}'], + files: ['*.{js,jsx,cjs,cjsx,mjs,mjsx,ts,tsx,cts,ctsx,mts,mtsx,node}'], options: { jsdocAddDefaultToDescription: false, jsdocCapitalizeDescription: true, diff --git a/dev/.files/tailwind/config.cjs b/dev/.files/tailwind/config.cjs index 1094e142..fb84b0e7 100644 --- a/dev/.files/tailwind/config.cjs +++ b/dev/.files/tailwind/config.cjs @@ -36,5 +36,5 @@ module.exports = { serif: ['Georgia', 'serif'], }, }, - content: [path.resolve(projDir, './src/**/*.{md,xml,html,shtml,php,ejs,js,jsx,cjs,cjsx,mjs,mjsx,ts,tsx,cts,ctsx,mts,mtsx}')], + content: [path.resolve(projDir, './src/**/*.{md,xml,html,shtml,php,ejs,js,jsx,cjs,cjsx,mjs,mjsx,ts,tsx,cts,ctsx,mts,mtsx,node}')], }; diff --git a/dev/.files/vite/config.mjs b/dev/.files/vite/config.mjs index 85b2120d..07e91dcb 100644 --- a/dev/.files/vite/config.mjs +++ b/dev/.files/vite/config.mjs @@ -12,7 +12,6 @@ /* eslint-env es2021, node */ import _ from 'lodash'; -import mc from 'merge-change'; import fs from 'node:fs'; import path from 'node:path'; @@ -20,15 +19,14 @@ import { dirname } from 'desm'; import fsp from 'node:fs/promises'; import archiver from 'archiver'; -import mm from 'micromatch'; -import { globby } from 'globby'; - import { loadEnv } from 'vite'; import pluginBasicSSL from '@vitejs/plugin-basic-ssl'; import { ViteEjsPlugin as pluginEJS } from 'vite-plugin-ejs'; import { ViteMinifyPlugin as pluginMinifyHTML } from 'vite-plugin-minify'; import u from '../bin/includes/utilities.mjs'; +import { $obj, $mm } from '@clevercanyon/utilities'; +import { $glob } from '@clevercanyon/utilities.node'; import importAliases from './includes/aliases.mjs'; import { createRequire } from 'node:module'; @@ -88,16 +86,16 @@ export default async ({ mode, command /*, ssrBuild */ }) => { cmaName = cmaName.replace(/[^a-z.0-9]([^.])/gu, (m0, m1) => m1.toUpperCase()); cmaName = cmaName.replace(/^\.|\.$/u, ''); - const mpaIndexes = await globby('**/index.html', { expandDirectories: false, cwd: srcDir, absolute: true }); + const mpaIndexes = await $glob.promise('**/index.html', { cwd: srcDir }); const mpaIndexesSubPaths = mpaIndexes.map((absPath) => path.relative(srcDir, absPath)); - const cmaEntries = await globby('*.{ts,tsx}', { expandDirectories: false, cwd: srcDir, absolute: true }); + const cmaEntries = await $glob.promise('*.{ts,tsx}', { cwd: srcDir }); const cmaEntriesRelPaths = cmaEntries.map((absPath) => './' + path.relative(srcDir, absPath)); const cmaEntriesSubpaths = cmaEntries.map((absPath) => path.relative(srcDir, absPath)); const cmaEntriesSubpathsNoExt = cmaEntriesSubpaths.map((subpath) => subpath.replace(/\.[^.]+$/u, '')); - const mpaEntryIndexSubpath = mpaIndexesSubPaths.find((subpath) => mm.isMatch(subpath, 'index.html')); - const cmaEntryIndexSubpath = cmaEntriesSubpaths.find((subpath) => mm.isMatch(subpath, 'index.{ts,tsx}')); + const mpaEntryIndexSubpath = mpaIndexesSubPaths.find((subpath) => $mm.isMatch(subpath, 'index.html')); + const cmaEntryIndexSubpath = cmaEntriesSubpaths.find((subpath) => $mm.isMatch(subpath, 'index.{ts,tsx}')); const cmaEntryIndexSubpathNoExt = cmaEntryIndexSubpath.replace(/\.[^.]+$/u, ''); const isWeb = ['web', 'webw'].includes(targetEnv); @@ -155,7 +153,7 @@ export default async ({ mode, command /*, ssrBuild */ }) => { if (cmaEntrySubPathNoExt === cmaEntryIndexSubpathNoExt) { continue; // Don't remap the entry index. } - mc.patch(updatePkg.exports, { + $obj.mc.patch(updatePkg.exports, { ['./' + cmaEntrySubPathNoExt]: { import: './dist/' + cmaEntrySubPathNoExt + '.js', require: './dist/' + cmaEntrySubPathNoExt + '.cjs', diff --git a/package-lock.json b/package-lock.json index 039f4cdc..4d83ee17 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "@clevercanyon/micromatch.fork", - "version": "4.0.18", + "version": "4.0.19", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "@clevercanyon/micromatch.fork", - "version": "4.0.18", + "version": "4.0.19", "cpu": [ "x64", "arm64" @@ -17,11 +17,11 @@ "linux" ], "dependencies": { - "braces": "npm:@clevercanyon/braces.fork@^3.0.15", - "picomatch": "npm:@clevercanyon/picomatch.fork@^2.3.14" + "braces": "npm:@clevercanyon/braces.fork@^3.0.16", + "picomatch": "npm:@clevercanyon/picomatch.fork@^2.3.15" }, "devDependencies": { - "@clevercanyon/skeleton-dev-deps": "^1.0.103" + "@clevercanyon/skeleton-dev-deps": "^1.0.108" }, "engines": { "node": "^19.2.0 || ^19.4.0", @@ -150,9 +150,9 @@ } }, "node_modules/@clevercanyon/madrun": { - "version": "1.0.43", - "resolved": "https://registry.npmjs.org/@clevercanyon/madrun/-/madrun-1.0.43.tgz", - "integrity": "sha512-auiE9hPTgIfzrcKWk99sQhXva9E3crJ0Rl4mS5WcMaFCgxhF0b8r+mYZ7pu1tUUYg53+uEtgMWLRWbYlkvhmog==", + "version": "1.0.48", + "resolved": "https://registry.npmjs.org/@clevercanyon/madrun/-/madrun-1.0.48.tgz", + "integrity": "sha512-NOrNPf94a1QaZOhA0nOyhuxxgrpGhq0HmNWdq1oAV7Xp7ibX7ZNd2DlTVStA+ErwSt58G5BTg5SZwoRGE32iww==", "cpu": [ "x64", "arm64" @@ -163,15 +163,11 @@ "linux" ], "dependencies": { - "boxen": "^7.0.1", + "@clevercanyon/utilities": "^1.0.88", + "@clevercanyon/utilities.node": "^1.0.45", "chalk": "^5.2.0", - "desm": "^1.3.0", "find-up": "^6.3.0", - "lodash": "^4.17.21", - "shescape": "npm:@clevercanyon/shescape.fork@^1.6.10", - "spawn-please": "npm:@clevercanyon/spawn-please.fork@^2.0.10", - "yargs": "^17.6.2", - "yargs-parser": "^21.1.1" + "lodash": "^4.17.21" }, "bin": { "madrun": "dist/bin/cli.js" @@ -185,9 +181,9 @@ } }, "node_modules/@clevercanyon/skeleton-dev-deps": { - "version": "1.0.103", - "resolved": "https://registry.npmjs.org/@clevercanyon/skeleton-dev-deps/-/skeleton-dev-deps-1.0.103.tgz", - "integrity": "sha512-QYkQzvlTGgf+cs5qdvRbGWR69MlusTGYTXQeOdqstIqM73skY7Cm5aMX62u58zyAkPUX2g5nyG2n0+bFvZa35Q==", + "version": "1.0.108", + "resolved": "https://registry.npmjs.org/@clevercanyon/skeleton-dev-deps/-/skeleton-dev-deps-1.0.108.tgz", + "integrity": "sha512-LMGZKMDBguKjVVktABk6AUJ2nUaNoGgEOG6zTCZdVlC0Bs8FnVHApCDiH8h2G3RksHuxtmCPXQPGW/4TLjsQZw==", "cpu": [ "x64", "arm64" @@ -198,8 +194,9 @@ "linux" ], "dependencies": { - "@clevercanyon/madrun": "^1.0.42", - "@clevercanyon/split-cmd.fork": "^1.0.14", + "@clevercanyon/madrun": "^1.0.47", + "@clevercanyon/utilities": "^1.0.88", + "@clevercanyon/utilities.node": "^1.0.45", "@octokit/core": "^4.2.0", "@octokit/plugin-paginate-rest": "^5.0.1", "@prettier/plugin-php": "^0.19.3", @@ -210,12 +207,12 @@ "@types/micromatch": "^4.0.2", "@types/node": "^18.11.18", "@types/semver": "^7.3.13", - "@types/yargs": "^17.0.20", - "@typescript-eslint/eslint-plugin": "^5.49.0", - "@typescript-eslint/parser": "^5.49.0", + "@types/yargs": "^17.0.22", + "@types/yargs-parser": "^21.0.0", + "@typescript-eslint/eslint-plugin": "^5.50.0", + "@typescript-eslint/parser": "^5.50.0", "@vitejs/plugin-basic-ssl": "^1.0.1", "archiver": "^5.3.1", - "boxen": "^7.0.1", "chalk": "^5.2.0", "deeps": "^1.4.5", "desm": "^1.3.0", @@ -230,13 +227,10 @@ "eslint-plugin-prettier": "^4.2.1", "eslint-plugin-react": "^7.32.2", "eslint-plugin-react-hooks": "^4.6.0", - "globby": "^13.1.3", "ignore": "^5.2.4", "install": "^0.13.0", "libsodium-wrappers": "^0.7.10", "lodash": "^4.17.21", - "merge-change": "npm:@clevercanyon/merge-change.fork@^1.8.21", - "micromatch": "npm:@clevercanyon/micromatch.fork@^4.0.18", "postcss": "^8.4.21", "postcss-preset-env": "^7.8.3", "postcss-safe-parser": "^6.0.0", @@ -250,21 +244,16 @@ "sass": "^1.57.1", "semver": "^7.3.8", "shellcheck": "^1.1.0", - "shescape": "npm:@clevercanyon/shescape.fork@^1.6.10", - "spawn-please": "npm:@clevercanyon/spawn-please.fork@^2.0.10", "stylelint": "^14.16.1", "stylelint-config-prettier": "^9.0.4", "stylelint-config-recess-order": "^3.1.0", "stylelint-config-standard-scss": "^6.1.0", "stylelint-scss": "^4.3.0", "tailwindcss": "^3.2.4", - "term-img": "^6.0.0", - "typescript": "^4.9.4", + "typescript": "^4.9.5", "vite": "^4.0.4", "vite-plugin-ejs": "^1.6.4", - "vite-plugin-minify": "^1.5.2", - "yargs": "^17.6.2", - "yargs-parser": "^21.1.1" + "vite-plugin-minify": "^1.5.2" }, "engines": { "node": "^19.2.0 || ^19.4.0", @@ -275,9 +264,62 @@ } }, "node_modules/@clevercanyon/split-cmd.fork": { - "version": "1.0.14", - "resolved": "https://registry.npmjs.org/@clevercanyon/split-cmd.fork/-/split-cmd.fork-1.0.14.tgz", - "integrity": "sha512-YBSoLxCRaw2QMRxqx58QJBG9kVeDvxD1fcuc0Za0diQSbCQ1qGAVeiVeQNUhEANMkVjaC29b+Cg6saYiAmaeUQ==", + "version": "1.0.17", + "resolved": "https://registry.npmjs.org/@clevercanyon/split-cmd.fork/-/split-cmd.fork-1.0.17.tgz", + "integrity": "sha512-frexW4AVTamrKSeKHcdWSmNMXacoFhLD0SlG7y+pmvnBfPWiYD3evlStEyKYlq4Wwt1UnjzeHuOXAZLhJ6c23Q==", + "cpu": [ + "x64", + "arm64" + ], + "dev": true, + "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" + } + }, + "node_modules/@clevercanyon/utilities": { + "version": "1.0.88", + "resolved": "https://registry.npmjs.org/@clevercanyon/utilities/-/utilities-1.0.88.tgz", + "integrity": "sha512-hOxOmjcgQLnRQBiPW76puxP0Tw5Qk0zSuAiRJ++SNtvlkVu1fFE9Pqe0al8S7zhaDyc03i1kSaKQ7bFVCpk9JQ==", + "cpu": [ + "x64", + "arm64" + ], + "dev": true, + "os": [ + "darwin", + "linux" + ], + "engines": { + "node": "^19.2.0 || ^19.4.0", + "npm": "^8.19.3 || ^9.2.0" + }, + "funding": { + "url": "https://github.com/sponsors/clevercanyon" + }, + "peerDependencies": { + "crypto-js": "^4.1.1", + "ignore": "^5.2.4", + "locutus": "^2.0.16", + "lodash": "^4.17.21", + "merge-change": "npm:@clevercanyon/merge-change.fork@^1.8.24", + "micromatch": "npm:@clevercanyon/micromatch.fork@^4.0.19", + "react": "^18.2.0", + "react-dom": "^18.2.0" + } + }, + "node_modules/@clevercanyon/utilities.node": { + "version": "1.0.45", + "resolved": "https://registry.npmjs.org/@clevercanyon/utilities.node/-/utilities.node-1.0.45.tgz", + "integrity": "sha512-B5viIU3Np8hJGflC92RrZWx3bcNdQIkerCns+zMZOIfXYv4RJnOGPY/t2RwBX58DRhqHdD6qlvN/9sGcpDzdRg==", "cpu": [ "x64", "arm64" @@ -293,6 +335,20 @@ }, "funding": { "url": "https://github.com/sponsors/clevercanyon" + }, + "peerDependencies": { + "@clevercanyon/split-cmd.fork": "^1.0.17", + "@clevercanyon/utilities": "^1.0.86", + "boxen": "^7.0.1", + "chalk": "^5.2.0", + "globby": "^13.1.3", + "ignore": "^5.2.4", + "lodash": "^4.17.21", + "shescape": "npm:@clevercanyon/shescape.fork@^1.6.11", + "spawn-please": "npm:@clevercanyon/spawn-please.fork@^2.0.11", + "term-img": "^6.0.0", + "yargs": "^17.6.2", + "yargs-parser": "^21.1.1" } }, "node_modules/@csstools/postcss-cascade-layers": { @@ -1303,9 +1359,9 @@ } }, "node_modules/@oclif/plugin-help/node_modules/@oclif/core": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/@oclif/core/-/core-2.0.7.tgz", - "integrity": "sha512-pj7hIH8SBeH3qha47fmyqdaBdNVEqesRgnKFh8Ytdb4S41/4BYOiQuyQGuvnKgvicH6DMxp4FbM9EQEW46V9xw==", + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/@oclif/core/-/core-2.0.8.tgz", + "integrity": "sha512-jt06vEZfpazkR0C8vYuVMKmsxjky52y1B1oFGPnCa6/17qH+PByd5knQP6/QbRoE5OT9RAf4zzpxx2wcihVslw==", "dev": true, "dependencies": { "@types/cli-progress": "^3.11.0", @@ -1463,9 +1519,9 @@ } }, "node_modules/@oclif/plugin-not-found/node_modules/@oclif/core": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/@oclif/core/-/core-2.0.7.tgz", - "integrity": "sha512-pj7hIH8SBeH3qha47fmyqdaBdNVEqesRgnKFh8Ytdb4S41/4BYOiQuyQGuvnKgvicH6DMxp4FbM9EQEW46V9xw==", + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/@oclif/core/-/core-2.0.8.tgz", + "integrity": "sha512-jt06vEZfpazkR0C8vYuVMKmsxjky52y1B1oFGPnCa6/17qH+PByd5knQP6/QbRoE5OT9RAf4zzpxx2wcihVslw==", "dev": true, "dependencies": { "@types/cli-progress": "^3.11.0", @@ -1631,9 +1687,9 @@ } }, "node_modules/@oclif/plugin-update/node_modules/@oclif/core": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/@oclif/core/-/core-2.0.7.tgz", - "integrity": "sha512-pj7hIH8SBeH3qha47fmyqdaBdNVEqesRgnKFh8Ytdb4S41/4BYOiQuyQGuvnKgvicH6DMxp4FbM9EQEW46V9xw==", + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/@oclif/core/-/core-2.0.8.tgz", + "integrity": "sha512-jt06vEZfpazkR0C8vYuVMKmsxjky52y1B1oFGPnCa6/17qH+PByd5knQP6/QbRoE5OT9RAf4zzpxx2wcihVslw==", "dev": true, "dependencies": { "@types/cli-progress": "^3.11.0", @@ -1794,9 +1850,9 @@ } }, "node_modules/@oclif/plugin-warn-if-update-available/node_modules/@oclif/core": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/@oclif/core/-/core-2.0.7.tgz", - "integrity": "sha512-pj7hIH8SBeH3qha47fmyqdaBdNVEqesRgnKFh8Ytdb4S41/4BYOiQuyQGuvnKgvicH6DMxp4FbM9EQEW46V9xw==", + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/@oclif/core/-/core-2.0.8.tgz", + "integrity": "sha512-jt06vEZfpazkR0C8vYuVMKmsxjky52y1B1oFGPnCa6/17qH+PByd5knQP6/QbRoE5OT9RAf4zzpxx2wcihVslw==", "dev": true, "dependencies": { "@types/cli-progress": "^3.11.0", @@ -2252,9 +2308,9 @@ "dev": true }, "node_modules/@types/yargs": { - "version": "17.0.20", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.20.tgz", - "integrity": "sha512-eknWrTHofQuPk2iuqDm1waA7V6xPlbgBoaaXEgYkClhLOnB0TtbW+srJaOToAgawPxPlHQzwypFA2bhZaUGP5A==", + "version": "17.0.22", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.22.tgz", + "integrity": "sha512-pet5WJ9U8yPVRhkwuEIp5ktAeAqRZOq4UdAyWLWzxbtpyXnzbtLdKiXAjJzi/KLmPGS9wk86lUFWZFN6sISo4g==", "dev": true, "dependencies": { "@types/yargs-parser": "*" @@ -2267,15 +2323,16 @@ "dev": true }, "node_modules/@typescript-eslint/eslint-plugin": { - "version": "5.49.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.49.0.tgz", - "integrity": "sha512-IhxabIpcf++TBaBa1h7jtOWyon80SXPRLDq0dVz5SLFC/eW6tofkw/O7Ar3lkx5z5U6wzbKDrl2larprp5kk5Q==", + "version": "5.50.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.50.0.tgz", + "integrity": "sha512-vwksQWSFZiUhgq3Kv7o1Jcj0DUNylwnIlGvKvLLYsq8pAWha6/WCnXUeaSoNNha/K7QSf2+jvmkxggC1u3pIwQ==", "dev": true, "dependencies": { - "@typescript-eslint/scope-manager": "5.49.0", - "@typescript-eslint/type-utils": "5.49.0", - "@typescript-eslint/utils": "5.49.0", + "@typescript-eslint/scope-manager": "5.50.0", + "@typescript-eslint/type-utils": "5.50.0", + "@typescript-eslint/utils": "5.50.0", "debug": "^4.3.4", + "grapheme-splitter": "^1.0.4", "ignore": "^5.2.0", "natural-compare-lite": "^1.4.0", "regexpp": "^3.2.0", @@ -2300,14 +2357,14 @@ } }, "node_modules/@typescript-eslint/parser": { - "version": "5.49.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.49.0.tgz", - "integrity": "sha512-veDlZN9mUhGqU31Qiv2qEp+XrJj5fgZpJ8PW30sHU+j/8/e5ruAhLaVDAeznS7A7i4ucb/s8IozpDtt9NqCkZg==", + "version": "5.50.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.50.0.tgz", + "integrity": "sha512-KCcSyNaogUDftK2G9RXfQyOCt51uB5yqC6pkUYqhYh8Kgt+DwR5M0EwEAxGPy/+DH6hnmKeGsNhiZRQxjH71uQ==", "dev": true, "dependencies": { - "@typescript-eslint/scope-manager": "5.49.0", - "@typescript-eslint/types": "5.49.0", - "@typescript-eslint/typescript-estree": "5.49.0", + "@typescript-eslint/scope-manager": "5.50.0", + "@typescript-eslint/types": "5.50.0", + "@typescript-eslint/typescript-estree": "5.50.0", "debug": "^4.3.4" }, "engines": { @@ -2327,13 +2384,13 @@ } }, "node_modules/@typescript-eslint/scope-manager": { - "version": "5.49.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.49.0.tgz", - "integrity": "sha512-clpROBOiMIzpbWNxCe1xDK14uPZh35u4QaZO1GddilEzoCLAEz4szb51rBpdgurs5k2YzPtJeTEN3qVbG+LRUQ==", + "version": "5.50.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.50.0.tgz", + "integrity": "sha512-rt03kaX+iZrhssaT974BCmoUikYtZI24Vp/kwTSy841XhiYShlqoshRFDvN1FKKvU2S3gK+kcBW1EA7kNUrogg==", "dev": true, "dependencies": { - "@typescript-eslint/types": "5.49.0", - "@typescript-eslint/visitor-keys": "5.49.0" + "@typescript-eslint/types": "5.50.0", + "@typescript-eslint/visitor-keys": "5.50.0" }, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" @@ -2344,13 +2401,13 @@ } }, "node_modules/@typescript-eslint/type-utils": { - "version": "5.49.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.49.0.tgz", - "integrity": "sha512-eUgLTYq0tR0FGU5g1YHm4rt5H/+V2IPVkP0cBmbhRyEmyGe4XvJ2YJ6sYTmONfjmdMqyMLad7SB8GvblbeESZA==", + "version": "5.50.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.50.0.tgz", + "integrity": "sha512-dcnXfZ6OGrNCO7E5UY/i0ktHb7Yx1fV6fnQGGrlnfDhilcs6n19eIRcvLBqx6OQkrPaFlDPk3OJ0WlzQfrV0bQ==", "dev": true, "dependencies": { - "@typescript-eslint/typescript-estree": "5.49.0", - "@typescript-eslint/utils": "5.49.0", + "@typescript-eslint/typescript-estree": "5.50.0", + "@typescript-eslint/utils": "5.50.0", "debug": "^4.3.4", "tsutils": "^3.21.0" }, @@ -2371,9 +2428,9 @@ } }, "node_modules/@typescript-eslint/types": { - "version": "5.49.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.49.0.tgz", - "integrity": "sha512-7If46kusG+sSnEpu0yOz2xFv5nRz158nzEXnJFCGVEHWnuzolXKwrH5Bsf9zsNlOQkyZuk0BZKKoJQI+1JPBBg==", + "version": "5.50.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.50.0.tgz", + "integrity": "sha512-atruOuJpir4OtyNdKahiHZobPKFvZnBnfDiyEaBf6d9vy9visE7gDjlmhl+y29uxZ2ZDgvXijcungGFjGGex7w==", "dev": true, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" @@ -2384,13 +2441,13 @@ } }, "node_modules/@typescript-eslint/typescript-estree": { - "version": "5.49.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.49.0.tgz", - "integrity": "sha512-PBdx+V7deZT/3GjNYPVQv1Nc0U46dAHbIuOG8AZ3on3vuEKiPDwFE/lG1snN2eUB9IhF7EyF7K1hmTcLztNIsA==", + "version": "5.50.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.50.0.tgz", + "integrity": "sha512-Gq4zapso+OtIZlv8YNAStFtT6d05zyVCK7Fx3h5inlLBx2hWuc/0465C2mg/EQDDU2LKe52+/jN4f0g9bd+kow==", "dev": true, "dependencies": { - "@typescript-eslint/types": "5.49.0", - "@typescript-eslint/visitor-keys": "5.49.0", + "@typescript-eslint/types": "5.50.0", + "@typescript-eslint/visitor-keys": "5.50.0", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", @@ -2440,16 +2497,16 @@ } }, "node_modules/@typescript-eslint/utils": { - "version": "5.49.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.49.0.tgz", - "integrity": "sha512-cPJue/4Si25FViIb74sHCLtM4nTSBXtLx1d3/QT6mirQ/c65bV8arBEebBJJizfq8W2YyMoPI/WWPFWitmNqnQ==", + "version": "5.50.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.50.0.tgz", + "integrity": "sha512-v/AnUFImmh8G4PH0NDkf6wA8hujNNcrwtecqW4vtQ1UOSNBaZl49zP1SHoZ/06e+UiwzHpgb5zP5+hwlYYWYAw==", "dev": true, "dependencies": { "@types/json-schema": "^7.0.9", "@types/semver": "^7.3.12", - "@typescript-eslint/scope-manager": "5.49.0", - "@typescript-eslint/types": "5.49.0", - "@typescript-eslint/typescript-estree": "5.49.0", + "@typescript-eslint/scope-manager": "5.50.0", + "@typescript-eslint/types": "5.50.0", + "@typescript-eslint/typescript-estree": "5.50.0", "eslint-scope": "^5.1.1", "eslint-utils": "^3.0.0", "semver": "^7.3.7" @@ -2466,12 +2523,12 @@ } }, "node_modules/@typescript-eslint/visitor-keys": { - "version": "5.49.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.49.0.tgz", - "integrity": "sha512-v9jBMjpNWyn8B6k/Mjt6VbUS4J1GvUlR4x3Y+ibnP1z7y7V4n0WRz+50DY6+Myj0UaXVSuUlHohO+eZ8IJEnkg==", + "version": "5.50.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.50.0.tgz", + "integrity": "sha512-cdMeD9HGu6EXIeGOh2yVW6oGf9wq8asBgZx7nsR/D36gTfQ0odE5kcRYe5M81vjEFAcPeugXrHg78Imu55F6gg==", "dev": true, "dependencies": { - "@typescript-eslint/types": "5.49.0", + "@typescript-eslint/types": "5.50.0", "eslint-visitor-keys": "^3.3.0" }, "engines": { @@ -2583,6 +2640,7 @@ "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.1.tgz", "integrity": "sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==", "dev": true, + "peer": true, "dependencies": { "string-width": "^4.1.0" } @@ -2591,13 +2649,15 @@ "version": "8.0.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true + "dev": true, + "peer": true }, "node_modules/ansi-align/node_modules/string-width": { "version": "4.2.3", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "dev": true, + "peer": true, "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", @@ -2682,6 +2742,7 @@ "resolved": "https://registry.npmjs.org/app-path/-/app-path-4.0.0.tgz", "integrity": "sha512-mgBO9PZJ3MpbKbwFTljTi36ZKBvG5X/fkVR1F85ANsVcVllEb+C0LGNdJfGUm84GpC4xxgN6HFkmkMU8VEO4mA==", "dev": true, + "peer": true, "dependencies": { "execa": "^5.0.0" }, @@ -3064,6 +3125,7 @@ "resolved": "https://registry.npmjs.org/boxen/-/boxen-7.0.1.tgz", "integrity": "sha512-8k2eH6SRAK00NDl1iX5q17RJ8rfl53TajdYxE3ssMLehbg487dEVgsad4pIsZb/QqBgYWIl6JOauMTLGX2Kpkw==", "dev": true, + "peer": true, "dependencies": { "ansi-align": "^3.0.1", "camelcase": "^7.0.0", @@ -3093,9 +3155,9 @@ }, "node_modules/braces": { "name": "@clevercanyon/braces.fork", - "version": "3.0.15", - "resolved": "https://registry.npmjs.org/@clevercanyon/braces.fork/-/braces.fork-3.0.15.tgz", - "integrity": "sha512-CEIQBKjH8Bcg0Rit6NsDB74h709HUitGTB4mJDwog5Dt/EqfjCTsFLaJ+l63G+C9czNqV+Kx/fphYcxHwdZ7FA==", + "version": "3.0.16", + "resolved": "https://registry.npmjs.org/@clevercanyon/braces.fork/-/braces.fork-3.0.16.tgz", + "integrity": "sha512-IQ6FFd4AdBGLDwwoydz4kdQVSyvLMqMZI0n+LnBLjd+RZNXgfJMQiNghSz1gMP1kNOwFVs9sBnxzvQgEg3LwnQ==", "cpu": [ "x64", "arm64" @@ -3105,7 +3167,7 @@ "linux" ], "dependencies": { - "fill-range": "npm:@clevercanyon/fill-range.fork@^7.0.14" + "fill-range": "npm:@clevercanyon/fill-range.fork@^7.0.15" }, "engines": { "node": "^19.2.0 || ^19.4.0", @@ -3116,9 +3178,9 @@ } }, "node_modules/browserslist": { - "version": "4.21.4", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.4.tgz", - "integrity": "sha512-CBHJJdDmgjl3daYjN5Cp5kbTf1mUhZoS+beLklHIvkOWscs83YAhLlF3Wsh/lciQYAcbBJgTOD44VtG31ZM4Hw==", + "version": "4.21.5", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.5.tgz", + "integrity": "sha512-tUkiguQGW7S3IhB7N+c2MV/HZPSCPAAiYBZXLsBhFB/PCy6ZKKsZrmBayHV9fdGV/ARIfJ14NkxKzRDjvp7L6w==", "dev": true, "funding": [ { @@ -3131,10 +3193,10 @@ } ], "dependencies": { - "caniuse-lite": "^1.0.30001400", - "electron-to-chromium": "^1.4.251", - "node-releases": "^2.0.6", - "update-browserslist-db": "^1.0.9" + "caniuse-lite": "^1.0.30001449", + "electron-to-chromium": "^1.4.284", + "node-releases": "^2.0.8", + "update-browserslist-db": "^1.0.10" }, "bin": { "browserslist": "cli.js" @@ -3228,6 +3290,7 @@ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-7.0.1.tgz", "integrity": "sha512-xlx1yCK2Oc1APsPXDL2LdlNP6+uu8OCDdhOBSVT279M/S+y75O30C2VuD8T2ogdePBBl7PfPF4504tnLgX3zfw==", "dev": true, + "peer": true, "engines": { "node": ">=14.16" }, @@ -3413,6 +3476,7 @@ "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-3.0.0.tgz", "integrity": "sha512-/lzGpEWL/8PfI0BmBOPRwp0c/wFNX1RdUML3jK/RcSBA9T8mZDdQpqYBKtCFTOfQbwPqWEOpjqW+Fnayc0969g==", "dev": true, + "peer": true, "engines": { "node": ">=10" }, @@ -3490,6 +3554,7 @@ "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", "dev": true, + "peer": true, "dependencies": { "string-width": "^4.2.0", "strip-ansi": "^6.0.1", @@ -3503,13 +3568,15 @@ "version": "8.0.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true + "dev": true, + "peer": true }, "node_modules/cliui/node_modules/string-width": { "version": "4.2.3", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "dev": true, + "peer": true, "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", @@ -3524,6 +3591,7 @@ "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", "dev": true, + "peer": true, "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", @@ -3705,6 +3773,13 @@ "node": ">= 8" } }, + "node_modules/crypto-js": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/crypto-js/-/crypto-js-4.1.1.tgz", + "integrity": "sha512-o2JlM7ydqd3Qk9CA0L4NL6mTzU2sdx96a+oOfPu8Mkl/PK51vSyoi8/rQ8NknZtk44vq15lmhAj9CIAGwgeWKw==", + "dev": true, + "peer": true + }, "node_modules/css-blank-pseudo": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/css-blank-pseudo/-/css-blank-pseudo-3.0.3.tgz", @@ -4155,7 +4230,8 @@ "version": "0.2.0", "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", - "dev": true + "dev": true, + "peer": true }, "node_modules/ejs": { "version": "3.1.8", @@ -4999,6 +5075,7 @@ "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", "dev": true, + "peer": true, "dependencies": { "cross-spawn": "^7.0.3", "get-stream": "^6.0.0", @@ -5181,9 +5258,9 @@ }, "node_modules/fill-range": { "name": "@clevercanyon/fill-range.fork", - "version": "7.0.14", - "resolved": "https://registry.npmjs.org/@clevercanyon/fill-range.fork/-/fill-range.fork-7.0.14.tgz", - "integrity": "sha512-7PxCDvBFGlpA4+CrOTJ43Ecoeyt7bgLtd6LoNdaEZO+eVf1GrqCPYDNkZMZTmecFXcxB8XrB2s/QrngcjOHeQw==", + "version": "7.0.15", + "resolved": "https://registry.npmjs.org/@clevercanyon/fill-range.fork/-/fill-range.fork-7.0.15.tgz", + "integrity": "sha512-FBboh/NxRlHfV4CbzLMzAyMq4JqqG8KY6JIB8V23TGCoOh8vst40jVUQEY1jkluvhyJbtd1FXglQAtZcuFCPTA==", "cpu": [ "x64", "arm64" @@ -5193,7 +5270,7 @@ "linux" ], "dependencies": { - "to-regex-range": "npm:@clevercanyon/to-regex-range.fork@^5.0.14" + "to-regex-range": "npm:@clevercanyon/to-regex-range.fork@^5.0.15" }, "engines": { "node": "^19.2.0 || ^19.4.0", @@ -5373,6 +5450,7 @@ "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", "dev": true, + "peer": true, "engines": { "node": "6.* || 8.* || >= 10.*" } @@ -5405,6 +5483,7 @@ "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", "dev": true, + "peer": true, "engines": { "node": ">=10" }, @@ -5802,6 +5881,7 @@ "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", "dev": true, + "peer": true, "engines": { "node": ">=10.17.0" } @@ -6233,9 +6313,9 @@ }, "node_modules/is-number": { "name": "@clevercanyon/is-number.fork", - "version": "7.0.15", - "resolved": "https://registry.npmjs.org/@clevercanyon/is-number.fork/-/is-number.fork-7.0.15.tgz", - "integrity": "sha512-Tu6UNWyxoytZJ6v73aKB+qPU/DPwGHQMmwP4wrqr18Zyt4sagTwDSQw7QN1mw3MuFhFvryJn06Tp0dj7xbaHiw==", + "version": "7.0.18", + "resolved": "https://registry.npmjs.org/@clevercanyon/is-number.fork/-/is-number.fork-7.0.18.tgz", + "integrity": "sha512-ZLexL7B43n2mbSXlB7ucCcDbTQIdokQJNV3D8j1b9TKH00D2pqKBDbOzvh1ZH5xumrCtuCLu6/N5maSwfITnsw==", "cpu": [ "x64", "arm64" @@ -6476,6 +6556,7 @@ "resolved": "https://registry.npmjs.org/iterm2-version/-/iterm2-version-5.0.0.tgz", "integrity": "sha512-WdLXcMYvN3SXT6vEtuW78vnZs4pVWm2nBnb4VKjOPPXmdlR1xTHmBgqKacOzAe4RXOiY/V+0u/0zsU3LoGQoBg==", "dev": true, + "peer": true, "dependencies": { "app-path": "^4.0.0", "plist": "^3.0.2" @@ -6780,6 +6861,16 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/locutus": { + "version": "2.0.16", + "resolved": "https://registry.npmjs.org/locutus/-/locutus-2.0.16.tgz", + "integrity": "sha512-pGfl6Hb/1mXLzrX5kl5lH7gz25ey0vwQssZp8Qo2CEF59di6KrAgdFm+0pW8ghLnvNzzJGj5tlWhhv2QbK3jeQ==", + "dev": true, + "peer": true, + "engines": { + "node": ">= 10" + } + }, "node_modules/lodash": { "version": "4.17.21", "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", @@ -7077,9 +7168,9 @@ }, "node_modules/merge-change": { "name": "@clevercanyon/merge-change.fork", - "version": "1.8.21", - "resolved": "https://registry.npmjs.org/@clevercanyon/merge-change.fork/-/merge-change.fork-1.8.21.tgz", - "integrity": "sha512-dq2bbag8vvhmQFcOgHp1BceAGhiOvhc89IYEwUPTWZaqmlC5Js+Ahm1hECWt8Cq0zH7nxuvY3J++yOTl8zu2sw==", + "version": "1.8.24", + "resolved": "https://registry.npmjs.org/@clevercanyon/merge-change.fork/-/merge-change.fork-1.8.24.tgz", + "integrity": "sha512-VNd5PI/bXgAYhMUEFwwZlUtwVlQnNub/WdBIM3c1J3/JCr2qMU2igJTc0S9c1GFbbyeUlddAMqDGGEY7mK96/Q==", "cpu": [ "x64", "arm64" @@ -7089,6 +7180,7 @@ "darwin", "linux" ], + "peer": true, "engines": { "node": "^19.2.0 || ^19.4.0", "npm": "^8.19.3 || ^9.2.0" @@ -7101,7 +7193,8 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", - "dev": true + "dev": true, + "peer": true }, "node_modules/merge2": { "version": "1.4.1", @@ -7557,9 +7650,9 @@ }, "node_modules/micromatch": { "name": "@clevercanyon/micromatch.fork", - "version": "4.0.18", - "resolved": "https://registry.npmjs.org/@clevercanyon/micromatch.fork/-/micromatch.fork-4.0.18.tgz", - "integrity": "sha512-uo2ESWSyqE8AaNkMSjdbK0taGna+lGPaFFi3kIvKDsUl6J6fFFDpT1OvioAMfj3L9W+I/U7dIC7wV1zdP6fVAw==", + "version": "4.0.19", + "resolved": "https://registry.npmjs.org/@clevercanyon/micromatch.fork/-/micromatch.fork-4.0.19.tgz", + "integrity": "sha512-wQHaBU0Mk4JGCEJQ1f09q7dbfF9yFAuX/QOdufJAtuQHqFwrdijyX3zWx95L6I1uh8SO+XCTANKGxPOpC7a6UQ==", "cpu": [ "x64", "arm64" @@ -7570,8 +7663,8 @@ "linux" ], "dependencies": { - "braces": "npm:@clevercanyon/braces.fork@^3.0.14", - "picomatch": "npm:@clevercanyon/picomatch.fork@^2.3.13" + "braces": "npm:@clevercanyon/braces.fork@^3.0.15", + "picomatch": "npm:@clevercanyon/picomatch.fork@^2.3.14" }, "engines": { "node": "^19.2.0 || ^19.4.0", @@ -7766,9 +7859,9 @@ } }, "node_modules/node-fetch": { - "version": "2.6.8", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.8.tgz", - "integrity": "sha512-RZ6dBYuj8dRSfxpUSu+NsdF1dpPpluJxwOp+6IoDp/sH2QNDSvurYsAa+F1WxY2RjA1iP93xhcsUoYbF2XBqVg==", + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.9.tgz", + "integrity": "sha512-DJm/CJkZkRjKKj4Zi4BsKVZh3ValV5IR5s7LVZnW+6YMh0W1BfNA8XSs6DLMGYlId5F3KnA70uu2qepcR08Qqg==", "dev": true, "dependencies": { "whatwg-url": "^5.0.0" @@ -7786,9 +7879,9 @@ } }, "node_modules/node-releases": { - "version": "2.0.8", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.8.tgz", - "integrity": "sha512-dFSmB8fFHEH/s81Xi+Y/15DQY6VHW81nXRj86EMSL3lmuTmK1e+aT4wrFCkTbm+gSwkw4KpX+rT/pMM2c1mF+A==", + "version": "2.0.9", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.9.tgz", + "integrity": "sha512-2xfmOrRkGogbTK9R6Leda0DGiXeY3p2NJpy4+gNCffdUvV6mdEJnaDEic1i3Ec2djAo8jWYoJMR5PB0MSMpxUA==", "dev": true }, "node_modules/node-sql-parser": { @@ -7841,6 +7934,7 @@ "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", "dev": true, + "peer": true, "dependencies": { "path-key": "^3.0.0" }, @@ -8356,9 +8450,9 @@ }, "node_modules/picomatch": { "name": "@clevercanyon/picomatch.fork", - "version": "2.3.14", - "resolved": "https://registry.npmjs.org/@clevercanyon/picomatch.fork/-/picomatch.fork-2.3.14.tgz", - "integrity": "sha512-TNKQXgN5gP9C8FET0SUds49NdR+k75vhvYeVmfauuOirfyeAkL9cSMP229um6Gj8yzdWTcdleOlSP8Ays39++g==", + "version": "2.3.15", + "resolved": "https://registry.npmjs.org/@clevercanyon/picomatch.fork/-/picomatch.fork-2.3.15.tgz", + "integrity": "sha512-4PrOLQK8JtlZaZwt6XbaLiYJo8uyWq65u4/XwmyYTL7i2rGfwxXW4+yMuBcYbnKd43m+OOe9MpVlAP3P9G8Iig==", "cpu": [ "x64", "arm64" @@ -8389,6 +8483,7 @@ "resolved": "https://registry.npmjs.org/plist/-/plist-3.0.6.tgz", "integrity": "sha512-WiIVYyrp8TD4w8yCvyeIr+lkmrGRd5u0VbRnU+tP/aRLxP/YadJUYOMZJ/6hIa3oUyVCsycXvtNRgd5XBJIbiA==", "dev": true, + "peer": true, "dependencies": { "base64-js": "^1.5.1", "xmlbuilder": "^15.1.1" @@ -9310,6 +9405,33 @@ "node": ">=0.12" } }, + "node_modules/react": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react/-/react-18.2.0.tgz", + "integrity": "sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==", + "dev": true, + "peer": true, + "dependencies": { + "loose-envify": "^1.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react-dom": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.2.0.tgz", + "integrity": "sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==", + "dev": true, + "peer": true, + "dependencies": { + "loose-envify": "^1.1.0", + "scheduler": "^0.23.0" + }, + "peerDependencies": { + "react": "^18.2.0" + } + }, "node_modules/react-is": { "version": "16.13.1", "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", @@ -9614,6 +9736,7 @@ "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", "dev": true, + "peer": true, "engines": { "node": ">=0.10.0" } @@ -9849,6 +9972,16 @@ "node": ">=12.0.0" } }, + "node_modules/scheduler": { + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.0.tgz", + "integrity": "sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==", + "dev": true, + "peer": true, + "dependencies": { + "loose-envify": "^1.1.0" + } + }, "node_modules/semver": { "version": "7.3.8", "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", @@ -9948,9 +10081,9 @@ }, "node_modules/shescape": { "name": "@clevercanyon/shescape.fork", - "version": "1.6.10", - "resolved": "https://registry.npmjs.org/@clevercanyon/shescape.fork/-/shescape.fork-1.6.10.tgz", - "integrity": "sha512-ZjfhzyO3sKCzlZ9D7yvC+R1s7rohmXDnrsHgHv5z3Mx54Xi06Mt/AIFK4T9tQompSOBktaME32omwn1wbAWZIQ==", + "version": "1.6.11", + "resolved": "https://registry.npmjs.org/@clevercanyon/shescape.fork/-/shescape.fork-1.6.11.tgz", + "integrity": "sha512-9wmWoSVt6jDiI67uQuU9N/A/q0jm0oDHUiWcLep0B+bwMcNZAEMOyIn02wHl4kS4YMyhwYmPrgep1O/s8rk8Gw==", "cpu": [ "x64", "arm64" @@ -9960,6 +10093,7 @@ "darwin", "linux" ], + "peer": true, "dependencies": { "which": "^2.0.2" }, @@ -10050,9 +10184,9 @@ }, "node_modules/spawn-please": { "name": "@clevercanyon/spawn-please.fork", - "version": "2.0.10", - "resolved": "https://registry.npmjs.org/@clevercanyon/spawn-please.fork/-/spawn-please.fork-2.0.10.tgz", - "integrity": "sha512-ZnGdGRUFwhw2hNsu5d/NuCGhQvOeOaMPP5YTdnixE2qkVQBo9OFB6omZa38uZlxM1ZQc8OxwzS2IPKJpfUWwXw==", + "version": "2.0.11", + "resolved": "https://registry.npmjs.org/@clevercanyon/spawn-please.fork/-/spawn-please.fork-2.0.11.tgz", + "integrity": "sha512-47DDZwvvjFOQOQ41RXcJfuYbLzLwABnj7L32ZAdSlSIhaNYSlL+s/LfQiqLnzH8ncSkbnYRGGDQO1dx3a7V+SA==", "cpu": [ "x64", "arm64" @@ -10062,6 +10196,7 @@ "darwin", "linux" ], + "peer": true, "dependencies": { "cross-spawn": "^7.0.3" }, @@ -10156,6 +10291,7 @@ "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", "dev": true, + "peer": true, "dependencies": { "eastasianwidth": "^0.2.0", "emoji-regex": "^9.2.2", @@ -10173,6 +10309,7 @@ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", "dev": true, + "peer": true, "engines": { "node": ">=12" }, @@ -10185,6 +10322,7 @@ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.0.1.tgz", "integrity": "sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw==", "dev": true, + "peer": true, "dependencies": { "ansi-regex": "^6.0.1" }, @@ -10268,6 +10406,7 @@ "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", "dev": true, + "peer": true, "engines": { "node": ">=6" } @@ -10779,6 +10918,7 @@ "resolved": "https://registry.npmjs.org/term-img/-/term-img-6.0.0.tgz", "integrity": "sha512-R4c+XtUiN/9lMlw+wldmxjPO/xlG3sIE79tcnE3A8CtcYMTDiOgAKy/EhroI+rmjB3cVyCkYSzTPBBjPsC7YdQ==", "dev": true, + "peer": true, "dependencies": { "ansi-escapes": "^5.0.0", "iterm2-version": "^5.0.0" @@ -10795,6 +10935,7 @@ "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-5.0.0.tgz", "integrity": "sha512-5GFMVX8HqE/TB+FuBJGuO5XG0WrsA6ptUqoODaT/n9mmUaZFkqnBueB4leqGBCmrUHnCnC4PCZTCd0E7QQ83bA==", "dev": true, + "peer": true, "dependencies": { "type-fest": "^1.0.2" }, @@ -10810,6 +10951,7 @@ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-1.4.0.tgz", "integrity": "sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==", "dev": true, + "peer": true, "engines": { "node": ">=10" }, @@ -10818,9 +10960,9 @@ } }, "node_modules/terser": { - "version": "5.16.1", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.16.1.tgz", - "integrity": "sha512-xvQfyfA1ayT0qdK47zskQgRZeWLoOQ8JQ6mIgRGVNwZKdQMU+5FkCBjmv4QjcrTzyZquRw2FVtlJSRUmMKQslw==", + "version": "5.16.2", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.16.2.tgz", + "integrity": "sha512-JKuM+KvvWVqT7muHVyrwv7FVRPnmHDwF6XwoIxdbF5Witi0vu99RYpxDexpJndXt3jbZZmmWr2/mQa6HvSNdSg==", "dev": true, "dependencies": { "@jridgewell/source-map": "^0.3.2", @@ -10871,9 +11013,9 @@ }, "node_modules/to-regex-range": { "name": "@clevercanyon/to-regex-range.fork", - "version": "5.0.14", - "resolved": "https://registry.npmjs.org/@clevercanyon/to-regex-range.fork/-/to-regex-range.fork-5.0.14.tgz", - "integrity": "sha512-x2/+Uslh6bZV9EbswMnHr9+7Om8Pul0YiFxqjMAzXq7JeJWwrffiil/a8lRKAM9oGbS4bd/fy5DULq/gLn+vFA==", + "version": "5.0.15", + "resolved": "https://registry.npmjs.org/@clevercanyon/to-regex-range.fork/-/to-regex-range.fork-5.0.15.tgz", + "integrity": "sha512-srxoYRysJ3pi8d2vlFK14JxDnEi6ik7ceYb5C+FL77bsTdZquFGUdhnczbcUyZoLYRN0RMgxY6V4HUcVORDtCQ==", "cpu": [ "x64", "arm64" @@ -10883,7 +11025,7 @@ "linux" ], "dependencies": { - "is-number": "npm:@clevercanyon/is-number.fork@^7.0.15" + "is-number": "npm:@clevercanyon/is-number.fork@^7.0.18" }, "engines": { "node": "^19.2.0 || ^19.4.0", @@ -10976,6 +11118,7 @@ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-2.19.0.tgz", "integrity": "sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==", "dev": true, + "peer": true, "engines": { "node": ">=12.20" }, @@ -10998,9 +11141,9 @@ } }, "node_modules/typescript": { - "version": "4.9.4", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.4.tgz", - "integrity": "sha512-Uz+dTXYzxXXbsFpM86Wh3dKCxrQqUcVMxwU54orwlJjOpO3ao8L7j5lH+dWfTwgCwIuM9GQ2kvVotzYJMXTBZg==", + "version": "4.9.5", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz", + "integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==", "dev": true, "bin": { "tsc": "bin/tsc", @@ -11294,6 +11437,7 @@ "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-4.0.1.tgz", "integrity": "sha512-o0cyEG0e8GPzT4iGHphIOh0cJOV8fivsXxddQasHPHfoZf1ZexrfeA21w2NaEN1RHE+fXlfISmOE8R9N3u3Qig==", "dev": true, + "peer": true, "dependencies": { "string-width": "^5.0.1" }, @@ -11324,6 +11468,7 @@ "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", "dev": true, + "peer": true, "dependencies": { "ansi-styles": "^6.1.0", "string-width": "^5.0.1", @@ -11341,6 +11486,7 @@ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", "dev": true, + "peer": true, "engines": { "node": ">=12" }, @@ -11353,6 +11499,7 @@ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", "dev": true, + "peer": true, "engines": { "node": ">=12" }, @@ -11365,6 +11512,7 @@ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.0.1.tgz", "integrity": "sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw==", "dev": true, + "peer": true, "dependencies": { "ansi-regex": "^6.0.1" }, @@ -11399,6 +11547,7 @@ "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-15.1.1.tgz", "integrity": "sha512-yMqGBqtXyeN1e3TGYvgNgDVZ3j84W4cwkOXQswghol6APgZWaff9lnbvN7MHYJOiXsvGPXtjTYJEiC9J2wv9Eg==", "dev": true, + "peer": true, "engines": { "node": ">=8.0" } @@ -11417,6 +11566,7 @@ "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", "dev": true, + "peer": true, "engines": { "node": ">=10" } @@ -11441,6 +11591,7 @@ "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.6.2.tgz", "integrity": "sha512-1/9UrdHjDZc0eOU0HxOHoS78C69UD3JRMvzlJ7S79S2nTaWRA/whGCTV8o9e/N/1Va9YIV7Q4sOxD8VV4pCWOw==", "dev": true, + "peer": true, "dependencies": { "cliui": "^8.0.1", "escalade": "^3.1.1", @@ -11459,6 +11610,7 @@ "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", "dev": true, + "peer": true, "engines": { "node": ">=12" } @@ -11467,13 +11619,15 @@ "version": "8.0.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true + "dev": true, + "peer": true }, "node_modules/yargs/node_modules/string-width": { "version": "4.2.3", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "dev": true, + "peer": true, "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", @@ -11605,30 +11759,27 @@ } }, "@clevercanyon/madrun": { - "version": "1.0.43", - "resolved": "https://registry.npmjs.org/@clevercanyon/madrun/-/madrun-1.0.43.tgz", - "integrity": "sha512-auiE9hPTgIfzrcKWk99sQhXva9E3crJ0Rl4mS5WcMaFCgxhF0b8r+mYZ7pu1tUUYg53+uEtgMWLRWbYlkvhmog==", + "version": "1.0.48", + "resolved": "https://registry.npmjs.org/@clevercanyon/madrun/-/madrun-1.0.48.tgz", + "integrity": "sha512-NOrNPf94a1QaZOhA0nOyhuxxgrpGhq0HmNWdq1oAV7Xp7ibX7ZNd2DlTVStA+ErwSt58G5BTg5SZwoRGE32iww==", "dev": true, "requires": { - "boxen": "^7.0.1", + "@clevercanyon/utilities": "^1.0.88", + "@clevercanyon/utilities.node": "^1.0.45", "chalk": "^5.2.0", - "desm": "^1.3.0", "find-up": "^6.3.0", - "lodash": "^4.17.21", - "shescape": "npm:@clevercanyon/shescape.fork@^1.6.10", - "spawn-please": "npm:@clevercanyon/spawn-please.fork@^2.0.10", - "yargs": "^17.6.2", - "yargs-parser": "^21.1.1" + "lodash": "^4.17.21" } }, "@clevercanyon/skeleton-dev-deps": { - "version": "1.0.103", - "resolved": "https://registry.npmjs.org/@clevercanyon/skeleton-dev-deps/-/skeleton-dev-deps-1.0.103.tgz", - "integrity": "sha512-QYkQzvlTGgf+cs5qdvRbGWR69MlusTGYTXQeOdqstIqM73skY7Cm5aMX62u58zyAkPUX2g5nyG2n0+bFvZa35Q==", + "version": "1.0.108", + "resolved": "https://registry.npmjs.org/@clevercanyon/skeleton-dev-deps/-/skeleton-dev-deps-1.0.108.tgz", + "integrity": "sha512-LMGZKMDBguKjVVktABk6AUJ2nUaNoGgEOG6zTCZdVlC0Bs8FnVHApCDiH8h2G3RksHuxtmCPXQPGW/4TLjsQZw==", "dev": true, "requires": { - "@clevercanyon/madrun": "^1.0.42", - "@clevercanyon/split-cmd.fork": "^1.0.14", + "@clevercanyon/madrun": "^1.0.47", + "@clevercanyon/utilities": "^1.0.88", + "@clevercanyon/utilities.node": "^1.0.45", "@octokit/core": "^4.2.0", "@octokit/plugin-paginate-rest": "^5.0.1", "@prettier/plugin-php": "^0.19.3", @@ -11639,12 +11790,12 @@ "@types/micromatch": "^4.0.2", "@types/node": "^18.11.18", "@types/semver": "^7.3.13", - "@types/yargs": "^17.0.20", - "@typescript-eslint/eslint-plugin": "^5.49.0", - "@typescript-eslint/parser": "^5.49.0", + "@types/yargs": "^17.0.22", + "@types/yargs-parser": "^21.0.0", + "@typescript-eslint/eslint-plugin": "^5.50.0", + "@typescript-eslint/parser": "^5.50.0", "@vitejs/plugin-basic-ssl": "^1.0.1", "archiver": "^5.3.1", - "boxen": "^7.0.1", "chalk": "^5.2.0", "deeps": "^1.4.5", "desm": "^1.3.0", @@ -11659,13 +11810,10 @@ "eslint-plugin-prettier": "^4.2.1", "eslint-plugin-react": "^7.32.2", "eslint-plugin-react-hooks": "^4.6.0", - "globby": "^13.1.3", "ignore": "^5.2.4", "install": "^0.13.0", "libsodium-wrappers": "^0.7.10", "lodash": "^4.17.21", - "merge-change": "npm:@clevercanyon/merge-change.fork@^1.8.21", - "micromatch": "npm:@clevercanyon/micromatch.fork@^4.0.18", "postcss": "^8.4.21", "postcss-preset-env": "^7.8.3", "postcss-safe-parser": "^6.0.0", @@ -11679,28 +11827,38 @@ "sass": "^1.57.1", "semver": "^7.3.8", "shellcheck": "^1.1.0", - "shescape": "npm:@clevercanyon/shescape.fork@^1.6.10", - "spawn-please": "npm:@clevercanyon/spawn-please.fork@^2.0.10", "stylelint": "^14.16.1", "stylelint-config-prettier": "^9.0.4", "stylelint-config-recess-order": "^3.1.0", "stylelint-config-standard-scss": "^6.1.0", "stylelint-scss": "^4.3.0", "tailwindcss": "^3.2.4", - "term-img": "^6.0.0", - "typescript": "^4.9.4", + "typescript": "^4.9.5", "vite": "^4.0.4", "vite-plugin-ejs": "^1.6.4", - "vite-plugin-minify": "^1.5.2", - "yargs": "^17.6.2", - "yargs-parser": "^21.1.1" + "vite-plugin-minify": "^1.5.2" } }, "@clevercanyon/split-cmd.fork": { - "version": "1.0.14", - "resolved": "https://registry.npmjs.org/@clevercanyon/split-cmd.fork/-/split-cmd.fork-1.0.14.tgz", - "integrity": "sha512-YBSoLxCRaw2QMRxqx58QJBG9kVeDvxD1fcuc0Za0diQSbCQ1qGAVeiVeQNUhEANMkVjaC29b+Cg6saYiAmaeUQ==", - "dev": true + "version": "1.0.17", + "resolved": "https://registry.npmjs.org/@clevercanyon/split-cmd.fork/-/split-cmd.fork-1.0.17.tgz", + "integrity": "sha512-frexW4AVTamrKSeKHcdWSmNMXacoFhLD0SlG7y+pmvnBfPWiYD3evlStEyKYlq4Wwt1UnjzeHuOXAZLhJ6c23Q==", + "dev": true, + "peer": true + }, + "@clevercanyon/utilities": { + "version": "1.0.88", + "resolved": "https://registry.npmjs.org/@clevercanyon/utilities/-/utilities-1.0.88.tgz", + "integrity": "sha512-hOxOmjcgQLnRQBiPW76puxP0Tw5Qk0zSuAiRJ++SNtvlkVu1fFE9Pqe0al8S7zhaDyc03i1kSaKQ7bFVCpk9JQ==", + "dev": true, + "requires": {} + }, + "@clevercanyon/utilities.node": { + "version": "1.0.45", + "resolved": "https://registry.npmjs.org/@clevercanyon/utilities.node/-/utilities.node-1.0.45.tgz", + "integrity": "sha512-B5viIU3Np8hJGflC92RrZWx3bcNdQIkerCns+zMZOIfXYv4RJnOGPY/t2RwBX58DRhqHdD6qlvN/9sGcpDzdRg==", + "dev": true, + "requires": {} }, "@csstools/postcss-cascade-layers": { "version": "1.1.1", @@ -12292,9 +12450,9 @@ }, "dependencies": { "@oclif/core": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/@oclif/core/-/core-2.0.7.tgz", - "integrity": "sha512-pj7hIH8SBeH3qha47fmyqdaBdNVEqesRgnKFh8Ytdb4S41/4BYOiQuyQGuvnKgvicH6DMxp4FbM9EQEW46V9xw==", + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/@oclif/core/-/core-2.0.8.tgz", + "integrity": "sha512-jt06vEZfpazkR0C8vYuVMKmsxjky52y1B1oFGPnCa6/17qH+PByd5knQP6/QbRoE5OT9RAf4zzpxx2wcihVslw==", "dev": true, "requires": { "@types/cli-progress": "^3.11.0", @@ -12420,9 +12578,9 @@ }, "dependencies": { "@oclif/core": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/@oclif/core/-/core-2.0.7.tgz", - "integrity": "sha512-pj7hIH8SBeH3qha47fmyqdaBdNVEqesRgnKFh8Ytdb4S41/4BYOiQuyQGuvnKgvicH6DMxp4FbM9EQEW46V9xw==", + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/@oclif/core/-/core-2.0.8.tgz", + "integrity": "sha512-jt06vEZfpazkR0C8vYuVMKmsxjky52y1B1oFGPnCa6/17qH+PByd5knQP6/QbRoE5OT9RAf4zzpxx2wcihVslw==", "dev": true, "requires": { "@types/cli-progress": "^3.11.0", @@ -12556,9 +12714,9 @@ }, "dependencies": { "@oclif/core": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/@oclif/core/-/core-2.0.7.tgz", - "integrity": "sha512-pj7hIH8SBeH3qha47fmyqdaBdNVEqesRgnKFh8Ytdb4S41/4BYOiQuyQGuvnKgvicH6DMxp4FbM9EQEW46V9xw==", + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/@oclif/core/-/core-2.0.8.tgz", + "integrity": "sha512-jt06vEZfpazkR0C8vYuVMKmsxjky52y1B1oFGPnCa6/17qH+PByd5knQP6/QbRoE5OT9RAf4zzpxx2wcihVslw==", "dev": true, "requires": { "@types/cli-progress": "^3.11.0", @@ -12687,9 +12845,9 @@ }, "dependencies": { "@oclif/core": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/@oclif/core/-/core-2.0.7.tgz", - "integrity": "sha512-pj7hIH8SBeH3qha47fmyqdaBdNVEqesRgnKFh8Ytdb4S41/4BYOiQuyQGuvnKgvicH6DMxp4FbM9EQEW46V9xw==", + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/@oclif/core/-/core-2.0.8.tgz", + "integrity": "sha512-jt06vEZfpazkR0C8vYuVMKmsxjky52y1B1oFGPnCa6/17qH+PByd5knQP6/QbRoE5OT9RAf4zzpxx2wcihVslw==", "dev": true, "requires": { "@types/cli-progress": "^3.11.0", @@ -13079,9 +13237,9 @@ "dev": true }, "@types/yargs": { - "version": "17.0.20", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.20.tgz", - "integrity": "sha512-eknWrTHofQuPk2iuqDm1waA7V6xPlbgBoaaXEgYkClhLOnB0TtbW+srJaOToAgawPxPlHQzwypFA2bhZaUGP5A==", + "version": "17.0.22", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.22.tgz", + "integrity": "sha512-pet5WJ9U8yPVRhkwuEIp5ktAeAqRZOq4UdAyWLWzxbtpyXnzbtLdKiXAjJzi/KLmPGS9wk86lUFWZFN6sISo4g==", "dev": true, "requires": { "@types/yargs-parser": "*" @@ -13094,15 +13252,16 @@ "dev": true }, "@typescript-eslint/eslint-plugin": { - "version": "5.49.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.49.0.tgz", - "integrity": "sha512-IhxabIpcf++TBaBa1h7jtOWyon80SXPRLDq0dVz5SLFC/eW6tofkw/O7Ar3lkx5z5U6wzbKDrl2larprp5kk5Q==", + "version": "5.50.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.50.0.tgz", + "integrity": "sha512-vwksQWSFZiUhgq3Kv7o1Jcj0DUNylwnIlGvKvLLYsq8pAWha6/WCnXUeaSoNNha/K7QSf2+jvmkxggC1u3pIwQ==", "dev": true, "requires": { - "@typescript-eslint/scope-manager": "5.49.0", - "@typescript-eslint/type-utils": "5.49.0", - "@typescript-eslint/utils": "5.49.0", + "@typescript-eslint/scope-manager": "5.50.0", + "@typescript-eslint/type-utils": "5.50.0", + "@typescript-eslint/utils": "5.50.0", "debug": "^4.3.4", + "grapheme-splitter": "^1.0.4", "ignore": "^5.2.0", "natural-compare-lite": "^1.4.0", "regexpp": "^3.2.0", @@ -13111,53 +13270,53 @@ } }, "@typescript-eslint/parser": { - "version": "5.49.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.49.0.tgz", - "integrity": "sha512-veDlZN9mUhGqU31Qiv2qEp+XrJj5fgZpJ8PW30sHU+j/8/e5ruAhLaVDAeznS7A7i4ucb/s8IozpDtt9NqCkZg==", + "version": "5.50.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.50.0.tgz", + "integrity": "sha512-KCcSyNaogUDftK2G9RXfQyOCt51uB5yqC6pkUYqhYh8Kgt+DwR5M0EwEAxGPy/+DH6hnmKeGsNhiZRQxjH71uQ==", "dev": true, "requires": { - "@typescript-eslint/scope-manager": "5.49.0", - "@typescript-eslint/types": "5.49.0", - "@typescript-eslint/typescript-estree": "5.49.0", + "@typescript-eslint/scope-manager": "5.50.0", + "@typescript-eslint/types": "5.50.0", + "@typescript-eslint/typescript-estree": "5.50.0", "debug": "^4.3.4" } }, "@typescript-eslint/scope-manager": { - "version": "5.49.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.49.0.tgz", - "integrity": "sha512-clpROBOiMIzpbWNxCe1xDK14uPZh35u4QaZO1GddilEzoCLAEz4szb51rBpdgurs5k2YzPtJeTEN3qVbG+LRUQ==", + "version": "5.50.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.50.0.tgz", + "integrity": "sha512-rt03kaX+iZrhssaT974BCmoUikYtZI24Vp/kwTSy841XhiYShlqoshRFDvN1FKKvU2S3gK+kcBW1EA7kNUrogg==", "dev": true, "requires": { - "@typescript-eslint/types": "5.49.0", - "@typescript-eslint/visitor-keys": "5.49.0" + "@typescript-eslint/types": "5.50.0", + "@typescript-eslint/visitor-keys": "5.50.0" } }, "@typescript-eslint/type-utils": { - "version": "5.49.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.49.0.tgz", - "integrity": "sha512-eUgLTYq0tR0FGU5g1YHm4rt5H/+V2IPVkP0cBmbhRyEmyGe4XvJ2YJ6sYTmONfjmdMqyMLad7SB8GvblbeESZA==", + "version": "5.50.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.50.0.tgz", + "integrity": "sha512-dcnXfZ6OGrNCO7E5UY/i0ktHb7Yx1fV6fnQGGrlnfDhilcs6n19eIRcvLBqx6OQkrPaFlDPk3OJ0WlzQfrV0bQ==", "dev": true, "requires": { - "@typescript-eslint/typescript-estree": "5.49.0", - "@typescript-eslint/utils": "5.49.0", + "@typescript-eslint/typescript-estree": "5.50.0", + "@typescript-eslint/utils": "5.50.0", "debug": "^4.3.4", "tsutils": "^3.21.0" } }, "@typescript-eslint/types": { - "version": "5.49.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.49.0.tgz", - "integrity": "sha512-7If46kusG+sSnEpu0yOz2xFv5nRz158nzEXnJFCGVEHWnuzolXKwrH5Bsf9zsNlOQkyZuk0BZKKoJQI+1JPBBg==", + "version": "5.50.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.50.0.tgz", + "integrity": "sha512-atruOuJpir4OtyNdKahiHZobPKFvZnBnfDiyEaBf6d9vy9visE7gDjlmhl+y29uxZ2ZDgvXijcungGFjGGex7w==", "dev": true }, "@typescript-eslint/typescript-estree": { - "version": "5.49.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.49.0.tgz", - "integrity": "sha512-PBdx+V7deZT/3GjNYPVQv1Nc0U46dAHbIuOG8AZ3on3vuEKiPDwFE/lG1snN2eUB9IhF7EyF7K1hmTcLztNIsA==", + "version": "5.50.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.50.0.tgz", + "integrity": "sha512-Gq4zapso+OtIZlv8YNAStFtT6d05zyVCK7Fx3h5inlLBx2hWuc/0465C2mg/EQDDU2LKe52+/jN4f0g9bd+kow==", "dev": true, "requires": { - "@typescript-eslint/types": "5.49.0", - "@typescript-eslint/visitor-keys": "5.49.0", + "@typescript-eslint/types": "5.50.0", + "@typescript-eslint/visitor-keys": "5.50.0", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", @@ -13188,28 +13347,28 @@ } }, "@typescript-eslint/utils": { - "version": "5.49.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.49.0.tgz", - "integrity": "sha512-cPJue/4Si25FViIb74sHCLtM4nTSBXtLx1d3/QT6mirQ/c65bV8arBEebBJJizfq8W2YyMoPI/WWPFWitmNqnQ==", + "version": "5.50.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.50.0.tgz", + "integrity": "sha512-v/AnUFImmh8G4PH0NDkf6wA8hujNNcrwtecqW4vtQ1UOSNBaZl49zP1SHoZ/06e+UiwzHpgb5zP5+hwlYYWYAw==", "dev": true, "requires": { "@types/json-schema": "^7.0.9", "@types/semver": "^7.3.12", - "@typescript-eslint/scope-manager": "5.49.0", - "@typescript-eslint/types": "5.49.0", - "@typescript-eslint/typescript-estree": "5.49.0", + "@typescript-eslint/scope-manager": "5.50.0", + "@typescript-eslint/types": "5.50.0", + "@typescript-eslint/typescript-estree": "5.50.0", "eslint-scope": "^5.1.1", "eslint-utils": "^3.0.0", "semver": "^7.3.7" } }, "@typescript-eslint/visitor-keys": { - "version": "5.49.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.49.0.tgz", - "integrity": "sha512-v9jBMjpNWyn8B6k/Mjt6VbUS4J1GvUlR4x3Y+ibnP1z7y7V4n0WRz+50DY6+Myj0UaXVSuUlHohO+eZ8IJEnkg==", + "version": "5.50.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.50.0.tgz", + "integrity": "sha512-cdMeD9HGu6EXIeGOh2yVW6oGf9wq8asBgZx7nsR/D36gTfQ0odE5kcRYe5M81vjEFAcPeugXrHg78Imu55F6gg==", "dev": true, "requires": { - "@typescript-eslint/types": "5.49.0", + "@typescript-eslint/types": "5.50.0", "eslint-visitor-keys": "^3.3.0" } }, @@ -13290,6 +13449,7 @@ "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.1.tgz", "integrity": "sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==", "dev": true, + "peer": true, "requires": { "string-width": "^4.1.0" }, @@ -13298,13 +13458,15 @@ "version": "8.0.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true + "dev": true, + "peer": true }, "string-width": { "version": "4.2.3", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "dev": true, + "peer": true, "requires": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", @@ -13366,6 +13528,7 @@ "resolved": "https://registry.npmjs.org/app-path/-/app-path-4.0.0.tgz", "integrity": "sha512-mgBO9PZJ3MpbKbwFTljTi36ZKBvG5X/fkVR1F85ANsVcVllEb+C0LGNdJfGUm84GpC4xxgN6HFkmkMU8VEO4mA==", "dev": true, + "peer": true, "requires": { "execa": "^5.0.0" } @@ -13660,6 +13823,7 @@ "resolved": "https://registry.npmjs.org/boxen/-/boxen-7.0.1.tgz", "integrity": "sha512-8k2eH6SRAK00NDl1iX5q17RJ8rfl53TajdYxE3ssMLehbg487dEVgsad4pIsZb/QqBgYWIl6JOauMTLGX2Kpkw==", "dev": true, + "peer": true, "requires": { "ansi-align": "^3.0.1", "camelcase": "^7.0.0", @@ -13682,23 +13846,23 @@ } }, "braces": { - "version": "npm:@clevercanyon/braces.fork@3.0.15", - "resolved": "https://registry.npmjs.org/@clevercanyon/braces.fork/-/braces.fork-3.0.15.tgz", - "integrity": "sha512-CEIQBKjH8Bcg0Rit6NsDB74h709HUitGTB4mJDwog5Dt/EqfjCTsFLaJ+l63G+C9czNqV+Kx/fphYcxHwdZ7FA==", + "version": "npm:@clevercanyon/braces.fork@3.0.16", + "resolved": "https://registry.npmjs.org/@clevercanyon/braces.fork/-/braces.fork-3.0.16.tgz", + "integrity": "sha512-IQ6FFd4AdBGLDwwoydz4kdQVSyvLMqMZI0n+LnBLjd+RZNXgfJMQiNghSz1gMP1kNOwFVs9sBnxzvQgEg3LwnQ==", "requires": { - "fill-range": "npm:@clevercanyon/fill-range.fork@^7.0.14" + "fill-range": "npm:@clevercanyon/fill-range.fork@^7.0.15" } }, "browserslist": { - "version": "4.21.4", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.4.tgz", - "integrity": "sha512-CBHJJdDmgjl3daYjN5Cp5kbTf1mUhZoS+beLklHIvkOWscs83YAhLlF3Wsh/lciQYAcbBJgTOD44VtG31ZM4Hw==", + "version": "4.21.5", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.5.tgz", + "integrity": "sha512-tUkiguQGW7S3IhB7N+c2MV/HZPSCPAAiYBZXLsBhFB/PCy6ZKKsZrmBayHV9fdGV/ARIfJ14NkxKzRDjvp7L6w==", "dev": true, "requires": { - "caniuse-lite": "^1.0.30001400", - "electron-to-chromium": "^1.4.251", - "node-releases": "^2.0.6", - "update-browserslist-db": "^1.0.9" + "caniuse-lite": "^1.0.30001449", + "electron-to-chromium": "^1.4.284", + "node-releases": "^2.0.8", + "update-browserslist-db": "^1.0.10" } }, "buffer": { @@ -13759,7 +13923,8 @@ "version": "7.0.1", "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-7.0.1.tgz", "integrity": "sha512-xlx1yCK2Oc1APsPXDL2LdlNP6+uu8OCDdhOBSVT279M/S+y75O30C2VuD8T2ogdePBBl7PfPF4504tnLgX3zfw==", - "dev": true + "dev": true, + "peer": true }, "camelcase-css": { "version": "2.0.1", @@ -13884,7 +14049,8 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-3.0.0.tgz", "integrity": "sha512-/lzGpEWL/8PfI0BmBOPRwp0c/wFNX1RdUML3jK/RcSBA9T8mZDdQpqYBKtCFTOfQbwPqWEOpjqW+Fnayc0969g==", - "dev": true + "dev": true, + "peer": true }, "cli-cursor": { "version": "3.1.0", @@ -13940,6 +14106,7 @@ "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", "dev": true, + "peer": true, "requires": { "string-width": "^4.2.0", "strip-ansi": "^6.0.1", @@ -13950,13 +14117,15 @@ "version": "8.0.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true + "dev": true, + "peer": true }, "string-width": { "version": "4.2.3", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "dev": true, + "peer": true, "requires": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", @@ -13968,6 +14137,7 @@ "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", "dev": true, + "peer": true, "requires": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", @@ -14108,6 +14278,13 @@ "which": "^2.0.1" } }, + "crypto-js": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/crypto-js/-/crypto-js-4.1.1.tgz", + "integrity": "sha512-o2JlM7ydqd3Qk9CA0L4NL6mTzU2sdx96a+oOfPu8Mkl/PK51vSyoi8/rQ8NknZtk44vq15lmhAj9CIAGwgeWKw==", + "dev": true, + "peer": true + }, "css-blank-pseudo": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/css-blank-pseudo/-/css-blank-pseudo-3.0.3.tgz", @@ -14433,7 +14610,8 @@ "version": "0.2.0", "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", - "dev": true + "dev": true, + "peer": true }, "ejs": { "version": "3.1.8", @@ -15068,6 +15246,7 @@ "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", "dev": true, + "peer": true, "requires": { "cross-spawn": "^7.0.3", "get-stream": "^6.0.0", @@ -15219,11 +15398,11 @@ "dev": true }, "fill-range": { - "version": "npm:@clevercanyon/fill-range.fork@7.0.14", - "resolved": "https://registry.npmjs.org/@clevercanyon/fill-range.fork/-/fill-range.fork-7.0.14.tgz", - "integrity": "sha512-7PxCDvBFGlpA4+CrOTJ43Ecoeyt7bgLtd6LoNdaEZO+eVf1GrqCPYDNkZMZTmecFXcxB8XrB2s/QrngcjOHeQw==", + "version": "npm:@clevercanyon/fill-range.fork@7.0.15", + "resolved": "https://registry.npmjs.org/@clevercanyon/fill-range.fork/-/fill-range.fork-7.0.15.tgz", + "integrity": "sha512-FBboh/NxRlHfV4CbzLMzAyMq4JqqG8KY6JIB8V23TGCoOh8vst40jVUQEY1jkluvhyJbtd1FXglQAtZcuFCPTA==", "requires": { - "to-regex-range": "npm:@clevercanyon/to-regex-range.fork@^5.0.14" + "to-regex-range": "npm:@clevercanyon/to-regex-range.fork@^5.0.15" } }, "find-up": { @@ -15343,7 +15522,8 @@ "version": "2.0.5", "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", - "dev": true + "dev": true, + "peer": true }, "get-intrinsic": { "version": "1.2.0", @@ -15366,7 +15546,8 @@ "version": "6.0.1", "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", - "dev": true + "dev": true, + "peer": true }, "get-symbol-description": { "version": "1.0.0", @@ -15649,7 +15830,8 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", - "dev": true + "dev": true, + "peer": true }, "hyperlinker": { "version": "1.0.0", @@ -15948,9 +16130,9 @@ "dev": true }, "is-number": { - "version": "npm:@clevercanyon/is-number.fork@7.0.15", - "resolved": "https://registry.npmjs.org/@clevercanyon/is-number.fork/-/is-number.fork-7.0.15.tgz", - "integrity": "sha512-Tu6UNWyxoytZJ6v73aKB+qPU/DPwGHQMmwP4wrqr18Zyt4sagTwDSQw7QN1mw3MuFhFvryJn06Tp0dj7xbaHiw==" + "version": "npm:@clevercanyon/is-number.fork@7.0.18", + "resolved": "https://registry.npmjs.org/@clevercanyon/is-number.fork/-/is-number.fork-7.0.18.tgz", + "integrity": "sha512-ZLexL7B43n2mbSXlB7ucCcDbTQIdokQJNV3D8j1b9TKH00D2pqKBDbOzvh1ZH5xumrCtuCLu6/N5maSwfITnsw==" }, "is-number-object": { "version": "1.0.7", @@ -16104,6 +16286,7 @@ "resolved": "https://registry.npmjs.org/iterm2-version/-/iterm2-version-5.0.0.tgz", "integrity": "sha512-WdLXcMYvN3SXT6vEtuW78vnZs4pVWm2nBnb4VKjOPPXmdlR1xTHmBgqKacOzAe4RXOiY/V+0u/0zsU3LoGQoBg==", "dev": true, + "peer": true, "requires": { "app-path": "^4.0.0", "plist": "^3.0.2" @@ -16355,6 +16538,13 @@ "p-locate": "^6.0.0" } }, + "locutus": { + "version": "2.0.16", + "resolved": "https://registry.npmjs.org/locutus/-/locutus-2.0.16.tgz", + "integrity": "sha512-pGfl6Hb/1mXLzrX5kl5lH7gz25ey0vwQssZp8Qo2CEF59di6KrAgdFm+0pW8ghLnvNzzJGj5tlWhhv2QbK3jeQ==", + "dev": true, + "peer": true + }, "lodash": { "version": "4.17.21", "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", @@ -16586,16 +16776,18 @@ } }, "merge-change": { - "version": "npm:@clevercanyon/merge-change.fork@1.8.21", - "resolved": "https://registry.npmjs.org/@clevercanyon/merge-change.fork/-/merge-change.fork-1.8.21.tgz", - "integrity": "sha512-dq2bbag8vvhmQFcOgHp1BceAGhiOvhc89IYEwUPTWZaqmlC5Js+Ahm1hECWt8Cq0zH7nxuvY3J++yOTl8zu2sw==", - "dev": true + "version": "npm:@clevercanyon/merge-change.fork@1.8.24", + "resolved": "https://registry.npmjs.org/@clevercanyon/merge-change.fork/-/merge-change.fork-1.8.24.tgz", + "integrity": "sha512-VNd5PI/bXgAYhMUEFwwZlUtwVlQnNub/WdBIM3c1J3/JCr2qMU2igJTc0S9c1GFbbyeUlddAMqDGGEY7mK96/Q==", + "dev": true, + "peer": true }, "merge-stream": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", - "dev": true + "dev": true, + "peer": true }, "merge2": { "version": "1.4.1", @@ -16837,13 +17029,13 @@ "dev": true }, "micromatch": { - "version": "npm:@clevercanyon/micromatch.fork@4.0.18", - "resolved": "https://registry.npmjs.org/@clevercanyon/micromatch.fork/-/micromatch.fork-4.0.18.tgz", - "integrity": "sha512-uo2ESWSyqE8AaNkMSjdbK0taGna+lGPaFFi3kIvKDsUl6J6fFFDpT1OvioAMfj3L9W+I/U7dIC7wV1zdP6fVAw==", + "version": "npm:@clevercanyon/micromatch.fork@4.0.19", + "resolved": "https://registry.npmjs.org/@clevercanyon/micromatch.fork/-/micromatch.fork-4.0.19.tgz", + "integrity": "sha512-wQHaBU0Mk4JGCEJQ1f09q7dbfF9yFAuX/QOdufJAtuQHqFwrdijyX3zWx95L6I1uh8SO+XCTANKGxPOpC7a6UQ==", "dev": true, "requires": { - "braces": "npm:@clevercanyon/braces.fork@^3.0.14", - "picomatch": "npm:@clevercanyon/picomatch.fork@^2.3.13" + "braces": "npm:@clevercanyon/braces.fork@^3.0.15", + "picomatch": "npm:@clevercanyon/picomatch.fork@^2.3.14" } }, "mime-db": { @@ -16988,18 +17180,18 @@ } }, "node-fetch": { - "version": "2.6.8", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.8.tgz", - "integrity": "sha512-RZ6dBYuj8dRSfxpUSu+NsdF1dpPpluJxwOp+6IoDp/sH2QNDSvurYsAa+F1WxY2RjA1iP93xhcsUoYbF2XBqVg==", + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.9.tgz", + "integrity": "sha512-DJm/CJkZkRjKKj4Zi4BsKVZh3ValV5IR5s7LVZnW+6YMh0W1BfNA8XSs6DLMGYlId5F3KnA70uu2qepcR08Qqg==", "dev": true, "requires": { "whatwg-url": "^5.0.0" } }, "node-releases": { - "version": "2.0.8", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.8.tgz", - "integrity": "sha512-dFSmB8fFHEH/s81Xi+Y/15DQY6VHW81nXRj86EMSL3lmuTmK1e+aT4wrFCkTbm+gSwkw4KpX+rT/pMM2c1mF+A==", + "version": "2.0.9", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.9.tgz", + "integrity": "sha512-2xfmOrRkGogbTK9R6Leda0DGiXeY3p2NJpy4+gNCffdUvV6mdEJnaDEic1i3Ec2djAo8jWYoJMR5PB0MSMpxUA==", "dev": true }, "node-sql-parser": { @@ -17040,6 +17232,7 @@ "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", "dev": true, + "peer": true, "requires": { "path-key": "^3.0.0" } @@ -17421,9 +17614,9 @@ "dev": true }, "picomatch": { - "version": "npm:@clevercanyon/picomatch.fork@2.3.14", - "resolved": "https://registry.npmjs.org/@clevercanyon/picomatch.fork/-/picomatch.fork-2.3.14.tgz", - "integrity": "sha512-TNKQXgN5gP9C8FET0SUds49NdR+k75vhvYeVmfauuOirfyeAkL9cSMP229um6Gj8yzdWTcdleOlSP8Ays39++g==" + "version": "npm:@clevercanyon/picomatch.fork@2.3.15", + "resolved": "https://registry.npmjs.org/@clevercanyon/picomatch.fork/-/picomatch.fork-2.3.15.tgz", + "integrity": "sha512-4PrOLQK8JtlZaZwt6XbaLiYJo8uyWq65u4/XwmyYTL7i2rGfwxXW4+yMuBcYbnKd43m+OOe9MpVlAP3P9G8Iig==" }, "pify": { "version": "2.3.0", @@ -17436,6 +17629,7 @@ "resolved": "https://registry.npmjs.org/plist/-/plist-3.0.6.tgz", "integrity": "sha512-WiIVYyrp8TD4w8yCvyeIr+lkmrGRd5u0VbRnU+tP/aRLxP/YadJUYOMZJ/6hIa3oUyVCsycXvtNRgd5XBJIbiA==", "dev": true, + "peer": true, "requires": { "base64-js": "^1.5.1", "xmlbuilder": "^15.1.1" @@ -17969,6 +18163,27 @@ "ret": "~0.1.10" } }, + "react": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react/-/react-18.2.0.tgz", + "integrity": "sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==", + "dev": true, + "peer": true, + "requires": { + "loose-envify": "^1.1.0" + } + }, + "react-dom": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.2.0.tgz", + "integrity": "sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==", + "dev": true, + "peer": true, + "requires": { + "loose-envify": "^1.1.0", + "scheduler": "^0.23.0" + } + }, "react-is": { "version": "16.13.1", "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", @@ -18209,7 +18424,8 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", - "dev": true + "dev": true, + "peer": true }, "require-from-string": { "version": "2.0.2", @@ -18363,6 +18579,16 @@ "source-map-js": ">=0.6.2 <2.0.0" } }, + "scheduler": { + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.0.tgz", + "integrity": "sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==", + "dev": true, + "peer": true, + "requires": { + "loose-envify": "^1.1.0" + } + }, "semver": { "version": "7.3.8", "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", @@ -18429,10 +18655,11 @@ } }, "shescape": { - "version": "npm:@clevercanyon/shescape.fork@1.6.10", - "resolved": "https://registry.npmjs.org/@clevercanyon/shescape.fork/-/shescape.fork-1.6.10.tgz", - "integrity": "sha512-ZjfhzyO3sKCzlZ9D7yvC+R1s7rohmXDnrsHgHv5z3Mx54Xi06Mt/AIFK4T9tQompSOBktaME32omwn1wbAWZIQ==", + "version": "npm:@clevercanyon/shescape.fork@1.6.11", + "resolved": "https://registry.npmjs.org/@clevercanyon/shescape.fork/-/shescape.fork-1.6.11.tgz", + "integrity": "sha512-9wmWoSVt6jDiI67uQuU9N/A/q0jm0oDHUiWcLep0B+bwMcNZAEMOyIn02wHl4kS4YMyhwYmPrgep1O/s8rk8Gw==", "dev": true, + "peer": true, "requires": { "which": "^2.0.2" } @@ -18494,10 +18721,11 @@ } }, "spawn-please": { - "version": "npm:@clevercanyon/spawn-please.fork@2.0.10", - "resolved": "https://registry.npmjs.org/@clevercanyon/spawn-please.fork/-/spawn-please.fork-2.0.10.tgz", - "integrity": "sha512-ZnGdGRUFwhw2hNsu5d/NuCGhQvOeOaMPP5YTdnixE2qkVQBo9OFB6omZa38uZlxM1ZQc8OxwzS2IPKJpfUWwXw==", + "version": "npm:@clevercanyon/spawn-please.fork@2.0.11", + "resolved": "https://registry.npmjs.org/@clevercanyon/spawn-please.fork/-/spawn-please.fork-2.0.11.tgz", + "integrity": "sha512-47DDZwvvjFOQOQ41RXcJfuYbLzLwABnj7L32ZAdSlSIhaNYSlL+s/LfQiqLnzH8ncSkbnYRGGDQO1dx3a7V+SA==", "dev": true, + "peer": true, "requires": { "cross-spawn": "^7.0.3" } @@ -18581,6 +18809,7 @@ "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", "dev": true, + "peer": true, "requires": { "eastasianwidth": "^0.2.0", "emoji-regex": "^9.2.2", @@ -18591,13 +18820,15 @@ "version": "6.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", - "dev": true + "dev": true, + "peer": true }, "strip-ansi": { "version": "7.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.0.1.tgz", "integrity": "sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw==", "dev": true, + "peer": true, "requires": { "ansi-regex": "^6.0.1" } @@ -18661,7 +18892,8 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", - "dev": true + "dev": true, + "peer": true }, "strip-indent": { "version": "3.0.0", @@ -19044,6 +19276,7 @@ "resolved": "https://registry.npmjs.org/term-img/-/term-img-6.0.0.tgz", "integrity": "sha512-R4c+XtUiN/9lMlw+wldmxjPO/xlG3sIE79tcnE3A8CtcYMTDiOgAKy/EhroI+rmjB3cVyCkYSzTPBBjPsC7YdQ==", "dev": true, + "peer": true, "requires": { "ansi-escapes": "^5.0.0", "iterm2-version": "^5.0.0" @@ -19054,6 +19287,7 @@ "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-5.0.0.tgz", "integrity": "sha512-5GFMVX8HqE/TB+FuBJGuO5XG0WrsA6ptUqoODaT/n9mmUaZFkqnBueB4leqGBCmrUHnCnC4PCZTCd0E7QQ83bA==", "dev": true, + "peer": true, "requires": { "type-fest": "^1.0.2" } @@ -19062,14 +19296,15 @@ "version": "1.4.0", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-1.4.0.tgz", "integrity": "sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==", - "dev": true + "dev": true, + "peer": true } } }, "terser": { - "version": "5.16.1", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.16.1.tgz", - "integrity": "sha512-xvQfyfA1ayT0qdK47zskQgRZeWLoOQ8JQ6mIgRGVNwZKdQMU+5FkCBjmv4QjcrTzyZquRw2FVtlJSRUmMKQslw==", + "version": "5.16.2", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.16.2.tgz", + "integrity": "sha512-JKuM+KvvWVqT7muHVyrwv7FVRPnmHDwF6XwoIxdbF5Witi0vu99RYpxDexpJndXt3jbZZmmWr2/mQa6HvSNdSg==", "dev": true, "requires": { "@jridgewell/source-map": "^0.3.2", @@ -19110,11 +19345,11 @@ } }, "to-regex-range": { - "version": "npm:@clevercanyon/to-regex-range.fork@5.0.14", - "resolved": "https://registry.npmjs.org/@clevercanyon/to-regex-range.fork/-/to-regex-range.fork-5.0.14.tgz", - "integrity": "sha512-x2/+Uslh6bZV9EbswMnHr9+7Om8Pul0YiFxqjMAzXq7JeJWwrffiil/a8lRKAM9oGbS4bd/fy5DULq/gLn+vFA==", + "version": "npm:@clevercanyon/to-regex-range.fork@5.0.15", + "resolved": "https://registry.npmjs.org/@clevercanyon/to-regex-range.fork/-/to-regex-range.fork-5.0.15.tgz", + "integrity": "sha512-srxoYRysJ3pi8d2vlFK14JxDnEi6ik7ceYb5C+FL77bsTdZquFGUdhnczbcUyZoLYRN0RMgxY6V4HUcVORDtCQ==", "requires": { - "is-number": "npm:@clevercanyon/is-number.fork@^7.0.15" + "is-number": "npm:@clevercanyon/is-number.fork@^7.0.18" } }, "tr46": { @@ -19186,7 +19421,8 @@ "version": "2.19.0", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-2.19.0.tgz", "integrity": "sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==", - "dev": true + "dev": true, + "peer": true }, "typed-array-length": { "version": "1.0.4", @@ -19200,9 +19436,9 @@ } }, "typescript": { - "version": "4.9.4", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.4.tgz", - "integrity": "sha512-Uz+dTXYzxXXbsFpM86Wh3dKCxrQqUcVMxwU54orwlJjOpO3ao8L7j5lH+dWfTwgCwIuM9GQ2kvVotzYJMXTBZg==", + "version": "4.9.5", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz", + "integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==", "dev": true }, "unbox-primitive": { @@ -19400,6 +19636,7 @@ "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-4.0.1.tgz", "integrity": "sha512-o0cyEG0e8GPzT4iGHphIOh0cJOV8fivsXxddQasHPHfoZf1ZexrfeA21w2NaEN1RHE+fXlfISmOE8R9N3u3Qig==", "dev": true, + "peer": true, "requires": { "string-width": "^5.0.1" } @@ -19421,6 +19658,7 @@ "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", "dev": true, + "peer": true, "requires": { "ansi-styles": "^6.1.0", "string-width": "^5.0.1", @@ -19431,19 +19669,22 @@ "version": "6.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", - "dev": true + "dev": true, + "peer": true }, "ansi-styles": { "version": "6.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", - "dev": true + "dev": true, + "peer": true }, "strip-ansi": { "version": "7.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.0.1.tgz", "integrity": "sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw==", "dev": true, + "peer": true, "requires": { "ansi-regex": "^6.0.1" } @@ -19470,7 +19711,8 @@ "version": "15.1.1", "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-15.1.1.tgz", "integrity": "sha512-yMqGBqtXyeN1e3TGYvgNgDVZ3j84W4cwkOXQswghol6APgZWaff9lnbvN7MHYJOiXsvGPXtjTYJEiC9J2wv9Eg==", - "dev": true + "dev": true, + "peer": true }, "xtend": { "version": "4.0.2", @@ -19482,7 +19724,8 @@ "version": "5.0.8", "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", - "dev": true + "dev": true, + "peer": true }, "yallist": { "version": "4.0.0", @@ -19501,6 +19744,7 @@ "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.6.2.tgz", "integrity": "sha512-1/9UrdHjDZc0eOU0HxOHoS78C69UD3JRMvzlJ7S79S2nTaWRA/whGCTV8o9e/N/1Va9YIV7Q4sOxD8VV4pCWOw==", "dev": true, + "peer": true, "requires": { "cliui": "^8.0.1", "escalade": "^3.1.1", @@ -19515,13 +19759,15 @@ "version": "8.0.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true + "dev": true, + "peer": true }, "string-width": { "version": "4.2.3", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "dev": true, + "peer": true, "requires": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", @@ -19534,7 +19780,8 @@ "version": "21.1.1", "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", - "dev": true + "dev": true, + "peer": true }, "yocto-queue": { "version": "1.0.0", diff --git a/package.json b/package.json index 5980f06b..61ffccd0 100644 --- a/package.json +++ b/package.json @@ -3,7 +3,7 @@ "publishConfig": { "access": "public" }, - "version": "4.0.19", + "version": "4.0.20", "license": "MIT", "name": "@clevercanyon/micromatch.fork", "description": "Glob matching. A replacement and faster alternative to minimatch and multimatch.", @@ -35,15 +35,15 @@ "types": "", "typesVersions": {}, "dependencies": { - "braces": "npm:@clevercanyon/braces.fork@^3.0.15", - "picomatch": "npm:@clevercanyon/picomatch.fork@^2.3.14" + "braces": "npm:@clevercanyon/braces.fork@^3.0.16", + "picomatch": "npm:@clevercanyon/picomatch.fork@^2.3.15" }, "peerDependencies": {}, "peerDependenciesMeta": {}, "optionalDependencies": {}, "bundleDependencies": [], "devDependencies": { - "@clevercanyon/skeleton-dev-deps": "^1.0.103" + "@clevercanyon/skeleton-dev-deps": "^1.0.108" }, "overrides": {}, "workspaces": [], diff --git a/vite.config.mjs b/vite.config.mjs index 7b77d0a2..381faa7d 100644 --- a/vite.config.mjs +++ b/vite.config.mjs @@ -9,7 +9,7 @@ */ /* eslint-env es2021, node */ -import mc from 'merge-change'; +import { $obj } from '@clevercanyon/utilities'; import baseConfig from './dev/.files/vite/config.mjs'; /* @@ -17,7 +17,7 @@ import baseConfig from './dev/.files/vite/config.mjs'; * */ export default async (vite) => { - return mc.merge({}, await baseConfig(vite), {}); + return $obj.mc.merge({}, await baseConfig(vite), {}); }; /* */