diff options
Diffstat (limited to 'dev')
| -rw-r--r-- | dev/bin/build.js | 56 | ||||
| -rw-r--r-- | dev/util.js | 68 | 
2 files changed, 37 insertions, 87 deletions
| diff --git a/dev/bin/build.js b/dev/bin/build.js index deb82618..5d7e4f0d 100644 --- a/dev/bin/build.js +++ b/dev/bin/build.js @@ -25,7 +25,8 @@ import path from 'path';  import readline from 'readline';  import {buildLibs} from '../build-libs.js';  import {ManifestUtil} from '../manifest-util.js'; -import {getAllFiles, getArgs, testMain} from '../util.js'; +import {getAllFiles, testMain} from '../util.js'; +import {parseArgs} from 'util';  const dirname = path.dirname(fileURLToPath(import.meta.url)); @@ -218,24 +219,42 @@ function ensureFilesExist(directory, files) {      }  } -  /**   * @param {string[]} argv   */  export async function main(argv) { -    const args = getArgs(argv, new Map(/** @type {[key: string, value: (boolean|null|number|string|string[])][]} */ ([ -        ['all', false], -        ['default', false], -        ['manifest', null], -        ['dry-run', false], -        ['dry-run-build-zip', false], -        ['yomitan-version', '0.0.0.0'], -        [null, []] -    ]))); - -    const dryRun = /** @type {boolean} */ (args.get('dry-run')); -    const dryRunBuildZip = /** @type {boolean} */ (args.get('dry-run-build-zip')); -    const yomitanVersion = /** @type {string} */ (args.get('yomitan-version')); +    /** @type {import('util').ParseArgsConfig['options']} */ +    const parseArgsConfigOptions = { +        all: { +            type: 'boolean', +            default: false +        }, +        default: { +            type: 'boolean', +            default: false +        }, +        manifest: { +            type: 'string' +        }, +        dryRun: { +            type: 'boolean', +            default: false +        }, +        dryRunBuildZip: { +            type: 'boolean', +            default: false +        }, +        version: { +            type: 'string', +            default: '0.0.0.0' +        } +    }; + +    const {values: args} = parseArgs({args: argv, options: parseArgsConfigOptions}); + +    const dryRun = /** @type {boolean} */ (args.dryRun); +    const dryRunBuildZip = /** @type {boolean} */ (args.dryRunBuildZip); +    const yomitanVersion = /** @type {string} */ (args.version);      const manifestUtil = new ManifestUtil(); @@ -247,14 +266,13 @@ export async function main(argv) {      try {          await buildLibs();          const variantNames = /** @type {string[]} */ (( -            argv.length === 0 || args.get('all') ? -            manifestUtil.getVariants().filter(({buildable}) => buildable !== false).map(({name}) => name) : -            args.get(null) +            argv.length === 0 || args.all ? +            manifestUtil.getVariants().filter(({buildable}) => buildable !== false).map(({name}) => name) : []          ));          await build(buildDir, extDir, manifestUtil, variantNames, manifestPath, dryRun, dryRunBuildZip, yomitanVersion);      } finally {          // Restore manifest -        const manifestName = /** @type {?string} */ ((!args.get('default') && args.get('manifest') !== null) ? args.get('manifest') : null); +        const manifestName = /** @type {?string} */ ((!args.default && typeof args.manifest !== 'undefined') ? args.manifest : null);          const restoreManifest = manifestUtil.getManifest(manifestName);          process.stdout.write('Restoring manifest...\n');          if (!dryRun) { diff --git a/dev/util.js b/dev/util.js index 731b5456..ff1c0120 100644 --- a/dev/util.js +++ b/dev/util.js @@ -22,74 +22,6 @@ import path from 'path';  import {parseJson} from './json.js';  /** - * @param {string[]} args - * @param {Map<?string, (boolean|null|number|string|string[])>} argMap - * @returns {Map<?string, (boolean|null|number|string|string[])>} - */ -export function getArgs(args, argMap) { -    let key = null; -    let canKey = true; -    let onKey = false; -    for (const arg of args) { -        onKey = false; - -        if (canKey && arg.startsWith('--')) { -            if (arg.length === 2) { -                canKey = false; -                key = null; -                onKey = false; -            } else { -                key = arg.substring(2); -                onKey = true; -            } -        } - -        const target = argMap.get(key); - -        switch (typeof target) { -            case 'boolean': -                argMap.set(key, true); -                key = null; -                break; -            case 'number': -                argMap.set(key, target + 1); -                key = null; -                break; -            case 'string': -                if (!onKey) { -                    argMap.set(key, arg); -                    key = null; -                } -                break; -            case 'object': -                if (target === null) { -                    if (!onKey) { -                        argMap.set(key, arg); -                        key = null; -                    } -                    return argMap; -                } else if (Array.isArray(target)) { -                    if (!onKey) { -                        target.push(arg); -                        key = null; -                    } -                    return argMap; -                } else { -                    console.error(`Unknown argument: ${arg}`); -                    key = null; -                } -                break; -            default: -                console.error(`Unknown argument: ${arg}`); -                key = null; -                break; -        } -    } - -    return argMap; -} - -/**   * @param {string} baseDirectory   * @param {?(fileName: string, isDirectory: boolean) => boolean} predicate   * @returns {string[]} |