From 04047dce65c4f4fe35891a9e5e782a319447ba3d Mon Sep 17 00:00:00 2001 From: George Borisov Date: Mon, 3 May 2021 19:05:08 +0100 Subject: [PATCH 01/25] remove broken test --- test/index.js | 8 -------- 1 file changed, 8 deletions(-) diff --git a/test/index.js b/test/index.js index 5091a7f..89b174e 100644 --- a/test/index.js +++ b/test/index.js @@ -205,14 +205,6 @@ describe('HTML output', function () { done(); }); }); - it('JavaScript syntax does not accept UTF newlines', function (done) { - w('input.pug', '.foo= loc'); - w('input.html', '

output not written

'); - run(['--no-debug', '--obj', "{'loc':'st\u2028r'}", 'input.pug'], function (err) { - if (!err) return done(new Error('expecting error')); - done(); - }); - }); it('JSON syntax accept UTF newlines', function (done) { w('input.pug', '.foo= loc'); w('input.html', '

output not written

'); From 77190b2ade8eb8d32153fa0c62f6cb486c9c5e01 Mon Sep 17 00:00:00 2001 From: George Borisov Date: Mon, 3 May 2021 19:05:31 +0100 Subject: [PATCH 02/25] upgrade packages --- index.js | 43 +- package-lock.json | 1411 +++++++++++++++++++++++++++++++++++++++++++++ package.json | 10 +- test/index.js | 2 +- 4 files changed, 1435 insertions(+), 31 deletions(-) create mode 100644 package-lock.json diff --git a/index.js b/index.js index 84cbe42..9bd59d5 100644 --- a/index.js +++ b/index.js @@ -4,7 +4,7 @@ var fs = require('fs'); var path = require('path'); -var program = require('commander'); +var { program } = require('commander'); var mkdirp = require('mkdirp'); var chalk = require('chalk'); var pug = require('pug'); @@ -16,10 +16,6 @@ var normalize = path.normalize; var join = path.join; var relative = path.relative; -// Pug options - -var options = {}; - // options program @@ -75,11 +71,8 @@ program.on('--help', function(){ program.parse(process.argv); -// options given, parse them - -if (program.obj) { - options = parseObj(program.obj); -} +var args = program.opts(); +var options = (args.obj) ? parseObj(args.obj) : {}; /** * Parse object either in `input` or in the file called `input`. The latter is @@ -91,9 +84,9 @@ function parseObj (input) { } catch (e) { var str; try { - str = fs.readFileSync(program.obj, 'utf8'); + str = fs.readFileSync(args.obj, 'utf8'); } catch (e) { - str = program.obj; + str = args.obj; } try { return JSON.parse(str); @@ -111,18 +104,18 @@ function parseObj (input) { ['basedir', 'basedir'], // --basedir ['doctype', 'doctype'], // --doctype ].forEach(function (o) { - options[o[1]] = program[o[0]] !== undefined ? program[o[0]] : options[o[1]]; + options[o[1]] = args[o[0]] !== undefined ? args[o[0]] : options[o[1]]; }); // --name -if (typeof program.name === 'string') { - options.name = program.name; +if (typeof args.name === 'string') { + options.name = args.name; } // --silent -var consoleLog = program.silent ? function() {} : console.log; +var consoleLog = args.silent ? function() {} : console.log; // left-over args are file paths @@ -134,13 +127,13 @@ var files = program.args; var watchList = {}; // function for rendering -var render = program.watch ? tryRender : renderFile; +var render = args.watch ? tryRender : renderFile; // compile files if (files.length) { consoleLog(); - if (program.watch) { + if (args.watch) { process.on('SIGINT', function() { process.exit(1); }); @@ -249,14 +242,14 @@ function renderFile(path, rootPath) { // Found pug file if (stat.isFile() && isPug.test(path) && !isIgnored.test(path)) { // Try to watch the file if needed. watchFile takes care of duplicates. - if (program.watch) watchFile(path, null, rootPath); - if (program.nameAfterFile) { + if (args.watch) watchFile(path, null, rootPath); + if (args.nameAfterFile) { options.name = getNameFromFileName(path); } var fn = options.client ? pug.compileFileClient(path, options) : pug.compileFile(path, options); - if (program.watch && fn.dependencies) { + if (args.watch && fn.dependencies) { // watch dependencies, and recompile the base fn.dependencies.forEach(function (dep) { watchFile(dep, path, rootPath); @@ -265,14 +258,14 @@ function renderFile(path, rootPath) { // --extension var extname; - if (program.extension) extname = '.' + program.extension; + if (args.extension) extname = '.' + args.extension; else if (options.client) extname = '.js'; - else if (program.extension === '') extname = ''; + else if (args.extension === '') extname = ''; else extname = '.html'; // path: foo.pug -> foo. path = path.replace(isPug, extname); - if (program.out) { + if (args.out) { // prepend output directory if (rootPath) { // replace the rootPath of the resolved path with output directory @@ -281,7 +274,7 @@ function renderFile(path, rootPath) { // if no rootPath handling is needed path = basename(path); } - path = resolve(program.out, path); + path = resolve(args.out, path); } var dir = resolve(dirname(path)); mkdirp.sync(dir); diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..9db653a --- /dev/null +++ b/package-lock.json @@ -0,0 +1,1411 @@ +{ + "name": "pug-cli", + "version": "1.0.0-alpha6", + "lockfileVersion": 1, + "requires": true, + "dependencies": { + "@babel/helper-validator-identifier": { + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.0.tgz", + "integrity": "sha512-V3ts7zMSu5lfiwWDVWzRDGIN+lnCEUdaXgtVHJgLb1rGaA6jMrtB9EmE7L18foXJIE8Un/A/h6NJfGQp/e1J4A==" + }, + "@babel/parser": { + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.14.0.tgz", + "integrity": "sha512-AHbfoxesfBALg33idaTBVUkLnfXtsgvJREf93p4p0Lwsz4ppfE7g1tpEXVm4vrxUcH4DVhAa9Z1m1zqf9WUC7Q==" + }, + "@babel/types": { + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.0.tgz", + "integrity": "sha512-O2LVLdcnWplaGxiPBz12d0HcdN8QdxdsWYhz5LSeuukV/5mn2xUUc3gBeU4QBYPJ18g/UToe8F532XJ608prmg==", + "requires": { + "@babel/helper-validator-identifier": "^7.14.0", + "to-fast-properties": "^2.0.0" + } + }, + "@ungap/promise-all-settled": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@ungap/promise-all-settled/-/promise-all-settled-1.1.2.tgz", + "integrity": "sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q==", + "dev": true + }, + "abbrev": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.0.9.tgz", + "integrity": "sha1-kbR5JYinc4wl813W9jdSovh3YTU=", + "dev": true + }, + "acorn": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", + "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==" + }, + "amdefine": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz", + "integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU=", + "dev": true, + "optional": true + }, + "ansi-colors": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", + "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", + "dev": true + }, + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "requires": { + "color-convert": "^2.0.1" + } + }, + "anymatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", + "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", + "dev": true, + "requires": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + } + }, + "argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "requires": { + "sprintf-js": "~1.0.2" + } + }, + "asap": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", + "integrity": "sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY=" + }, + "assert-never": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/assert-never/-/assert-never-1.2.1.tgz", + "integrity": "sha512-TaTivMB6pYI1kXwrFlEhLeGfOqoDNdTxjCdwRfFFkEA30Eu+k48W34nlok2EYWJfFFzqaEmichdNM7th6M5HNw==" + }, + "async": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", + "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=", + "dev": true + }, + "babel-walk": { + "version": "3.0.0-canary-5", + "resolved": "https://registry.npmjs.org/babel-walk/-/babel-walk-3.0.0-canary-5.tgz", + "integrity": "sha512-GAwkz0AihzY5bkwIY5QDR+LvsRQgB/B+1foMPvi0FZPMl5fjD7ICiznUiBdLYMH1QYe6vqu4gWYytZOccLouFw==", + "requires": { + "@babel/types": "^7.9.6" + } + }, + "balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true + }, + "binary-extensions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "dev": true + }, + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "requires": { + "fill-range": "^7.0.1" + } + }, + "browser-stdout": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", + "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", + "dev": true + }, + "call-bind": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "requires": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + } + }, + "chalk": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz", + "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==", + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "character-parser": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/character-parser/-/character-parser-2.2.0.tgz", + "integrity": "sha1-x84o821LzZdE5f/CxfzeHHMmH8A=", + "requires": { + "is-regex": "^1.0.3" + } + }, + "chokidar": { + "version": "3.5.1", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.1.tgz", + "integrity": "sha512-9+s+Od+W0VJJzawDma/gvBNQqkTiqYTWLuZoyAsivsI4AaWTCzHG06/TMjsf1cYe9Cb97UCEhjz7HvnPk2p/tw==", + "dev": true, + "requires": { + "anymatch": "~3.1.1", + "braces": "~3.0.2", + "fsevents": "~2.3.1", + "glob-parent": "~5.1.0", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.5.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "commander": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", + "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==" + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "dev": true + }, + "constantinople": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/constantinople/-/constantinople-4.0.1.tgz", + "integrity": "sha512-vCrqcSIq4//Gx74TXXCGnHpulY1dskqLTFGDmhrGxzeXL8lF8kvXv6mpNWlJj1uD4DW23D4ljAqbY4RRaaUZIw==", + "requires": { + "@babel/parser": "^7.6.0", + "@babel/types": "^7.6.1" + } + }, + "debug": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", + "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", + "dev": true, + "requires": { + "ms": "2.1.2" + }, + "dependencies": { + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + } + } + }, + "deep-is": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", + "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", + "dev": true + }, + "diff": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz", + "integrity": "sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==", + "dev": true + }, + "doctypes": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/doctypes/-/doctypes-1.1.0.tgz", + "integrity": "sha1-6oCxBqh1OHdOijpKWv4pPeSJ4Kk=" + }, + "emoji-regex": { + "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 + }, + "escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "dev": true + }, + "escodegen": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.8.1.tgz", + "integrity": "sha1-WltTr0aTEQvrsIZ6o0MN07cKEBg=", + "dev": true, + "requires": { + "esprima": "^2.7.1", + "estraverse": "^1.9.1", + "esutils": "^2.0.2", + "optionator": "^0.8.1", + "source-map": "~0.2.0" + }, + "dependencies": { + "source-map": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.2.0.tgz", + "integrity": "sha1-2rc/vPwrqBm03gO9b26qSBZLP50=", + "dev": true, + "optional": true, + "requires": { + "amdefine": ">=0.0.4" + } + } + } + }, + "esprima": { + "version": "2.7.3", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz", + "integrity": "sha1-luO3DVd59q1JzQMmc9HDEnZ7pYE=", + "dev": true + }, + "estraverse": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-1.9.3.tgz", + "integrity": "sha1-r2fy3JIlgkFZUJJgkaQAXSnJu0Q=", + "dev": true + }, + "esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true + }, + "fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", + "dev": true + }, + "fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "requires": { + "to-regex-range": "^5.0.1" + } + }, + "find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "requires": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + } + }, + "flat": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", + "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", + "dev": true + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "dev": true + }, + "fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "dev": true, + "optional": true + }, + "function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" + }, + "get-caller-file": { + "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 + }, + "get-intrinsic": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", + "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", + "requires": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1" + } + }, + "glob": { + "version": "5.0.15", + "resolved": "https://registry.npmjs.org/glob/-/glob-5.0.15.tgz", + "integrity": "sha1-G8k2ueAvSmA/zCIuz3Yz0wuLk7E=", + "dev": true, + "requires": { + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "2 || 3", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "requires": { + "is-glob": "^4.0.1" + } + }, + "growl": { + "version": "1.10.5", + "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz", + "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==", + "dev": true + }, + "handlebars": { + "version": "4.7.7", + "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.7.tgz", + "integrity": "sha512-aAcXm5OAfE/8IXkcZvCepKU3VzW1/39Fb5ZuqMtgI/hT8X2YgoMvBY5dLhq/cpOvw7Lk1nK/UF71aLG/ZnVYRA==", + "dev": true, + "requires": { + "minimist": "^1.2.5", + "neo-async": "^2.6.0", + "source-map": "^0.6.1", + "uglify-js": "^3.1.4", + "wordwrap": "^1.0.0" + }, + "dependencies": { + "uglify-js": { + "version": "3.13.5", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.13.5.tgz", + "integrity": "sha512-xtB8yEqIkn7zmOyS2zUNBsYCBRhDkvlNxMMY2smuJ/qA8NCHeQvKCF3i9Z4k8FJH4+PJvZRtMrPynfZ75+CSZw==", + "dev": true, + "optional": true + }, + "wordwrap": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", + "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=", + "dev": true + } + } + }, + "has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "requires": { + "function-bind": "^1.1.1" + } + }, + "has-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", + "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", + "dev": true + }, + "has-symbols": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", + "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==" + }, + "he": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", + "dev": true + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "dev": true, + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "requires": { + "binary-extensions": "^2.0.0" + } + }, + "is-core-module": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.3.0.tgz", + "integrity": "sha512-xSphU2KG9867tsYdLD4RWQ1VqdFl4HTO9Thf3I/3dLEfr0dbPTWKsuCKrgqMljg4nPE+Gq0VCnzT3gr0CyBmsw==", + "requires": { + "has": "^1.0.3" + } + }, + "is-expression": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-expression/-/is-expression-4.0.0.tgz", + "integrity": "sha512-zMIXX63sxzG3XrkHkrAPvm/OVZVSCPNkwMHU8oTX7/U3AL78I0QXCEICXUM13BIa8TYGZ68PiTKfQz3yaTNr4A==", + "requires": { + "acorn": "^7.1.1", + "object-assign": "^4.1.1" + } + }, + "is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true + }, + "is-glob": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", + "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", + "dev": true, + "requires": { + "is-extglob": "^2.1.1" + } + }, + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true + }, + "is-plain-obj": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", + "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", + "dev": true + }, + "is-promise": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.2.2.tgz", + "integrity": "sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ==" + }, + "is-regex": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.2.tgz", + "integrity": "sha512-axvdhb5pdhEVThqJzYXwMlVuZwC+FF2DpcOhTS+y/8jVq4trxyPgfcwIxIKiyeuLlSQYKkmUaPQJ8ZE4yNKXDg==", + "requires": { + "call-bind": "^1.0.2", + "has-symbols": "^1.0.1" + } + }, + "isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", + "dev": true + }, + "istanbul": { + "version": "0.4.5", + "resolved": "https://registry.npmjs.org/istanbul/-/istanbul-0.4.5.tgz", + "integrity": "sha1-ZcfXPUxNqE1POsMQuRj7C4Azczs=", + "dev": true, + "requires": { + "abbrev": "1.0.x", + "async": "1.x", + "escodegen": "1.8.x", + "esprima": "2.7.x", + "glob": "^5.0.15", + "handlebars": "^4.0.1", + "js-yaml": "3.x", + "mkdirp": "0.5.x", + "nopt": "3.x", + "once": "1.x", + "resolve": "1.1.x", + "supports-color": "^3.1.0", + "which": "^1.1.1", + "wordwrap": "^1.0.0" + }, + "dependencies": { + "mkdirp": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", + "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", + "dev": true, + "requires": { + "minimist": "^1.2.5" + } + }, + "resolve": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.1.7.tgz", + "integrity": "sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs=", + "dev": true + }, + "supports-color": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", + "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "dev": true, + "requires": { + "has-flag": "^1.0.0" + } + }, + "wordwrap": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", + "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=", + "dev": true + } + } + }, + "js-stringify": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/js-stringify/-/js-stringify-1.0.2.tgz", + "integrity": "sha1-Fzb939lyTyijaCrcYjCufk6Weds=" + }, + "js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "dev": true, + "requires": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "dependencies": { + "esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "dev": true + } + } + }, + "jstransformer": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/jstransformer/-/jstransformer-1.0.0.tgz", + "integrity": "sha1-7Yvwkh4vPx7U1cGkT2hwntJHIsM=", + "requires": { + "is-promise": "^2.0.0", + "promise": "^7.0.1" + } + }, + "levn": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", + "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", + "dev": true, + "requires": { + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2" + } + }, + "locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "requires": { + "p-locate": "^5.0.0" + } + }, + "log-symbols": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.0.0.tgz", + "integrity": "sha512-FN8JBzLx6CzeMrB0tg6pqlGU1wCrXW+ZXGH481kfsBqer0hToTIiHdjH4Mq8xJUbvATujKCvaREGWpGUionraA==", + "dev": true, + "requires": { + "chalk": "^4.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz", + "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "dev": true, + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "minimist": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", + "dev": true + }, + "mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==" + }, + "mocha": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-8.3.2.tgz", + "integrity": "sha512-UdmISwr/5w+uXLPKspgoV7/RXZwKRTiTjJ2/AC5ZiEztIoOYdfKb19+9jNmEInzx5pBsCyJQzarAxqIGBNYJhg==", + "dev": true, + "requires": { + "@ungap/promise-all-settled": "1.1.2", + "ansi-colors": "4.1.1", + "browser-stdout": "1.3.1", + "chokidar": "3.5.1", + "debug": "4.3.1", + "diff": "5.0.0", + "escape-string-regexp": "4.0.0", + "find-up": "5.0.0", + "glob": "7.1.6", + "growl": "1.10.5", + "he": "1.2.0", + "js-yaml": "4.0.0", + "log-symbols": "4.0.0", + "minimatch": "3.0.4", + "ms": "2.1.3", + "nanoid": "3.1.20", + "serialize-javascript": "5.0.1", + "strip-json-comments": "3.1.1", + "supports-color": "8.1.1", + "which": "2.0.2", + "wide-align": "1.1.3", + "workerpool": "6.1.0", + "yargs": "16.2.0", + "yargs-parser": "20.2.4", + "yargs-unparser": "2.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", + "dev": true + }, + "argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "cliui": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "dev": true, + "requires": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } + }, + "escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true + }, + "glob": { + "version": "7.1.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", + "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true + }, + "js-yaml": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.0.0.tgz", + "integrity": "sha512-pqon0s+4ScYUvX30wxQi3PogGFAlUyH0awepWvwkj4jD4v+ova3RiYw8bmA6x2rDrEaj8i/oWKoRxpVNW+Re8Q==", + "dev": true, + "requires": { + "argparse": "^2.0.1" + } + }, + "string-width": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz", + "integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==", + "dev": true, + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.0" + } + }, + "strip-ansi": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "dev": true, + "requires": { + "ansi-regex": "^5.0.0" + } + }, + "supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + }, + "which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + }, + "yargs": { + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "dev": true, + "requires": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" + } + } + } + }, + "ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true + }, + "nanoid": { + "version": "3.1.20", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.1.20.tgz", + "integrity": "sha512-a1cQNyczgKbLX9jwbS/+d7W8fX/RfgYR7lVWwWOGIPNgK2m0MWvrGF6/m4kk6U3QcFMnZf3RIhL0v2Jgh/0Uxw==", + "dev": true + }, + "neo-async": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", + "dev": true + }, + "nopt": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz", + "integrity": "sha1-xkZdvwirzU2zWTF/eaxopkayj/k=", + "dev": true, + "requires": { + "abbrev": "1" + } + }, + "normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true + }, + "object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dev": true, + "requires": { + "wrappy": "1" + } + }, + "optionator": { + "version": "0.8.3", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", + "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", + "dev": true, + "requires": { + "deep-is": "~0.1.3", + "fast-levenshtein": "~2.0.6", + "levn": "~0.3.0", + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2", + "word-wrap": "~1.2.3" + } + }, + "p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "requires": { + "yocto-queue": "^0.1.0" + } + }, + "p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "requires": { + "p-limit": "^3.0.2" + } + }, + "path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true + }, + "path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "dev": true + }, + "path-parse": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", + "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==" + }, + "picomatch": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.3.tgz", + "integrity": "sha512-KpELjfwcCDUb9PeigTs2mBJzXUPzAuP2oPcA989He8Rte0+YUAjw1JVedDhuTKPkHjSYzMN3npC9luThGYEKdg==", + "dev": true + }, + "prelude-ls": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", + "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=", + "dev": true + }, + "promise": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz", + "integrity": "sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==", + "requires": { + "asap": "~2.0.3" + } + }, + "pug": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/pug/-/pug-3.0.2.tgz", + "integrity": "sha512-bp0I/hiK1D1vChHh6EfDxtndHji55XP/ZJKwsRqrz6lRia6ZC2OZbdAymlxdVFwd1L70ebrVJw4/eZ79skrIaw==", + "requires": { + "pug-code-gen": "^3.0.2", + "pug-filters": "^4.0.0", + "pug-lexer": "^5.0.1", + "pug-linker": "^4.0.0", + "pug-load": "^3.0.0", + "pug-parser": "^6.0.0", + "pug-runtime": "^3.0.1", + "pug-strip-comments": "^2.0.0" + } + }, + "pug-attrs": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pug-attrs/-/pug-attrs-3.0.0.tgz", + "integrity": "sha512-azINV9dUtzPMFQktvTXciNAfAuVh/L/JCl0vtPCwvOA21uZrC08K/UnmrL+SXGEVc1FwzjW62+xw5S/uaLj6cA==", + "requires": { + "constantinople": "^4.0.1", + "js-stringify": "^1.0.2", + "pug-runtime": "^3.0.0" + } + }, + "pug-code-gen": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/pug-code-gen/-/pug-code-gen-3.0.2.tgz", + "integrity": "sha512-nJMhW16MbiGRiyR4miDTQMRWDgKplnHyeLvioEJYbk1RsPI3FuA3saEP8uwnTb2nTJEKBU90NFVWJBk4OU5qyg==", + "requires": { + "constantinople": "^4.0.1", + "doctypes": "^1.1.0", + "js-stringify": "^1.0.2", + "pug-attrs": "^3.0.0", + "pug-error": "^2.0.0", + "pug-runtime": "^3.0.0", + "void-elements": "^3.1.0", + "with": "^7.0.0" + } + }, + "pug-error": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/pug-error/-/pug-error-2.0.0.tgz", + "integrity": "sha512-sjiUsi9M4RAGHktC1drQfCr5C5eriu24Lfbt4s+7SykztEOwVZtbFk1RRq0tzLxcMxMYTBR+zMQaG07J/btayQ==" + }, + "pug-filters": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/pug-filters/-/pug-filters-4.0.0.tgz", + "integrity": "sha512-yeNFtq5Yxmfz0f9z2rMXGw/8/4i1cCFecw/Q7+D0V2DdtII5UvqE12VaZ2AY7ri6o5RNXiweGH79OCq+2RQU4A==", + "requires": { + "constantinople": "^4.0.1", + "jstransformer": "1.0.0", + "pug-error": "^2.0.0", + "pug-walk": "^2.0.0", + "resolve": "^1.15.1" + } + }, + "pug-lexer": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/pug-lexer/-/pug-lexer-5.0.1.tgz", + "integrity": "sha512-0I6C62+keXlZPZkOJeVam9aBLVP2EnbeDw3An+k0/QlqdwH6rv8284nko14Na7c0TtqtogfWXcRoFE4O4Ff20w==", + "requires": { + "character-parser": "^2.2.0", + "is-expression": "^4.0.0", + "pug-error": "^2.0.0" + } + }, + "pug-linker": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/pug-linker/-/pug-linker-4.0.0.tgz", + "integrity": "sha512-gjD1yzp0yxbQqnzBAdlhbgoJL5qIFJw78juN1NpTLt/mfPJ5VgC4BvkoD3G23qKzJtIIXBbcCt6FioLSFLOHdw==", + "requires": { + "pug-error": "^2.0.0", + "pug-walk": "^2.0.0" + } + }, + "pug-load": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pug-load/-/pug-load-3.0.0.tgz", + "integrity": "sha512-OCjTEnhLWZBvS4zni/WUMjH2YSUosnsmjGBB1An7CsKQarYSWQ0GCVyd4eQPMFJqZ8w9xgs01QdiZXKVjk92EQ==", + "requires": { + "object-assign": "^4.1.1", + "pug-walk": "^2.0.0" + } + }, + "pug-parser": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/pug-parser/-/pug-parser-6.0.0.tgz", + "integrity": "sha512-ukiYM/9cH6Cml+AOl5kETtM9NR3WulyVP2y4HOU45DyMim1IeP/OOiyEWRr6qk5I5klpsBnbuHpwKmTx6WURnw==", + "requires": { + "pug-error": "^2.0.0", + "token-stream": "1.0.0" + } + }, + "pug-runtime": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/pug-runtime/-/pug-runtime-3.0.1.tgz", + "integrity": "sha512-L50zbvrQ35TkpHwv0G6aLSuueDRwc/97XdY8kL3tOT0FmhgG7UypU3VztfV/LATAvmUfYi4wNxSajhSAeNN+Kg==" + }, + "pug-strip-comments": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/pug-strip-comments/-/pug-strip-comments-2.0.0.tgz", + "integrity": "sha512-zo8DsDpH7eTkPHCXFeAk1xZXJbyoTfdPlNR0bK7rpOMuhBYb0f5qUVCO1xlsitYd3w5FQTK7zpNVKb3rZoUrrQ==", + "requires": { + "pug-error": "^2.0.0" + } + }, + "pug-walk": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/pug-walk/-/pug-walk-2.0.0.tgz", + "integrity": "sha512-yYELe9Q5q9IQhuvqsZNwA5hfPkMJ8u92bQLIMcsMxf/VADjNtEYptU+inlufAFYcWdHlwNfZOEnOOQrZrcyJCQ==" + }, + "randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "dev": true, + "requires": { + "safe-buffer": "^5.1.0" + } + }, + "readdirp": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.5.0.tgz", + "integrity": "sha512-cMhu7c/8rdhkHXWsY+osBhfSy0JikwpHK/5+imo+LpeasTF8ouErHrlYkwT0++njiyuDvc7OFY5T3ukvZ8qmFQ==", + "dev": true, + "requires": { + "picomatch": "^2.2.1" + } + }, + "require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", + "dev": true + }, + "resolve": { + "version": "1.20.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", + "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==", + "requires": { + "is-core-module": "^2.2.0", + "path-parse": "^1.0.6" + } + }, + "rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, + "requires": { + "glob": "^7.1.3" + }, + "dependencies": { + "glob": { + "version": "7.1.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", + "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + } + } + }, + "safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true + }, + "serialize-javascript": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-5.0.1.tgz", + "integrity": "sha512-SaaNal9imEO737H2c05Og0/8LUXG7EnsZyMa8MzkmuHoELfT6txuj0cMqRj6zfPKnmQ1yasR4PCJc8x+M4JSPA==", + "dev": true, + "requires": { + "randombytes": "^2.1.0" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + }, + "sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", + "dev": true + }, + "string-width": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "dev": true, + "requires": { + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "requires": { + "ansi-regex": "^3.0.0" + } + } + } + }, + "strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "requires": { + "has-flag": "^4.0.0" + }, + "dependencies": { + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + } + } + }, + "to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=" + }, + "to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "requires": { + "is-number": "^7.0.0" + } + }, + "token-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/token-stream/-/token-stream-1.0.0.tgz", + "integrity": "sha1-zCAOqyYT9BZtJ/+a/HylbUnfbrQ=" + }, + "type-check": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", + "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", + "dev": true, + "requires": { + "prelude-ls": "~1.1.2" + } + }, + "void-elements": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/void-elements/-/void-elements-3.1.0.tgz", + "integrity": "sha1-YU9/v42AHwu18GYfWy9XhXUOTwk=" + }, + "which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + }, + "wide-align": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz", + "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==", + "dev": true, + "requires": { + "string-width": "^1.0.2 || 2" + } + }, + "with": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/with/-/with-7.0.2.tgz", + "integrity": "sha512-RNGKj82nUPg3g5ygxkQl0R937xLyho1J24ItRCBTr/m1YnZkzJy1hUiHUJrc/VlsDQzsCnInEGSg3bci0Lmd4w==", + "requires": { + "@babel/parser": "^7.9.6", + "@babel/types": "^7.9.6", + "assert-never": "^1.2.1", + "babel-walk": "3.0.0-canary-5" + } + }, + "word-wrap": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", + "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", + "dev": true + }, + "workerpool": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.1.0.tgz", + "integrity": "sha512-toV7q9rWNYha963Pl/qyeZ6wG+3nnsyvolaNUS8+R5Wtw6qJPTxIlOP1ZSvcGhEJw+l3HMMmtiNo9Gl61G4GVg==", + "dev": true + }, + "wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "requires": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", + "dev": true + }, + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true + }, + "string-width": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz", + "integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==", + "dev": true, + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.0" + } + }, + "strip-ansi": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "dev": true, + "requires": { + "ansi-regex": "^5.0.0" + } + } + } + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", + "dev": true + }, + "y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "dev": true + }, + "yargs-parser": { + "version": "20.2.4", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz", + "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==", + "dev": true + }, + "yargs-unparser": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz", + "integrity": "sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==", + "dev": true, + "requires": { + "camelcase": "^6.0.0", + "decamelize": "^4.0.0", + "flat": "^5.0.2", + "is-plain-obj": "^2.1.0" + }, + "dependencies": { + "camelcase": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.2.0.tgz", + "integrity": "sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg==", + "dev": true + }, + "decamelize": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz", + "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==", + "dev": true + } + } + }, + "yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true + } + } +} diff --git a/package.json b/package.json index 846e96c..e723028 100644 --- a/package.json +++ b/package.json @@ -9,15 +9,15 @@ "preferGlobal": true, "keywords": [], "dependencies": { - "chalk": "^1.0.0", - "commander": "^2.8.1", - "pug": "^2.0.0-alpha7", - "mkdirp": "^0.5.1" + "chalk": "^4.1.1", + "commander": "^7.2.0", + "pug": "^3.0.2", + "mkdirp": "^1.0.4" }, "devDependencies": { "istanbul": "*", "mocha": "*", - "rimraf": "^2.3.4" + "rimraf": "*" }, "scripts": { "test": "mocha -R spec --bail", diff --git a/test/index.js b/test/index.js index 89b174e..2de7807 100644 --- a/test/index.js +++ b/test/index.js @@ -265,7 +265,7 @@ describe('HTML output', function () { w(['outputs', 'level-1-1', 'input.html'], 'BIG FAT HEN 1-1'); w(['outputs', 'level-1-2', 'input.html'], 'BIG FAT HEN 1-2'); - run(['--no-debug', '--hierarchy', '--out', 'outputs', 'inputs'], function (err) { + run(['--no-debug', '--out', 'outputs', 'inputs'], function (err) { if (err) return done(err); var html = r(['outputs', 'input.html']); assert(html === '
bar 1
'); From be4d10c2332855163f1c0ce8e86ecf6ccd904040 Mon Sep 17 00:00:00 2001 From: George Borisov Date: Mon, 3 May 2021 19:09:48 +0100 Subject: [PATCH 03/25] bump Node versions in Travis --- .travis.yml | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/.travis.yml b/.travis.yml index 7c816d2..89d1ab0 100644 --- a/.travis.yml +++ b/.travis.yml @@ -2,10 +2,9 @@ language: node_js sudo: false node_js: - - "0.10" - - "0.12" - - "4" - - "6" + - "10" + - "12" + - "14" after_success: - npm run coverage From f89b8173668a4513e18499a5e97701577da5ae75 Mon Sep 17 00:00:00 2001 From: Andreas Johansson Date: Sun, 13 Jun 2021 15:19:16 +0300 Subject: [PATCH 04/25] increase version & update changelog --- HISTORY.md | 10 ++++++++++ package.json | 2 +- 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/HISTORY.md b/HISTORY.md index 45f8c59..93b52d5 100644 --- a/HISTORY.md +++ b/HISTORY.md @@ -2,6 +2,16 @@ As with most npm modules, this project adheres to [Semantic Versioning](http://semver.org/). +## [1.0.0-alpha7] - 2021-06 + +### Changed + +- Removing broken test ("JavaScript syntax does not accept UTF newlines") +- upgrade to Pug 3 +- upgrade all dependencies +- configure Travis to test with Node 10, 12 and 14 (Pug 3 supports Node 10+) + + ## [1.0.0-alpha6] - 2016-06-01 ### Added diff --git a/package.json b/package.json index e723028..37888cb 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "pug-cli", - "version": "1.0.0-alpha6", + "version": "1.0.0-alpha7", "description": "Pug's CLI interface", "bin": { "pug": "./index.js", From 3710e996788161e198fcafd4ff63ee5838c09714 Mon Sep 17 00:00:00 2001 From: Andreas Johansson Date: Sun, 13 Jun 2021 16:40:11 +0300 Subject: [PATCH 05/25] rename pkg to scoped --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 37888cb..966f76e 100644 --- a/package.json +++ b/package.json @@ -1,5 +1,5 @@ { - "name": "pug-cli", + "name": "@anduh/pug-cli", "version": "1.0.0-alpha7", "description": "Pug's CLI interface", "bin": { From cbe67a1a7a92d5fff3f260b497b20f12a76e7778 Mon Sep 17 00:00:00 2001 From: Andreas Johansson Date: Sun, 13 Jun 2021 22:03:23 +0300 Subject: [PATCH 06/25] change pkg-name, change cmd to pug3, add man page, update readme/pkg.json --- .gitignore | 1 + HISTORY.md | 9 +++++--- README.md | 28 +++++++++++++----------- index.js | 16 +++++++------- man/pug-cli.1 | 59 +++++++++++++++++++++++++++++++++++++++++++++++++++ package.json | 17 ++++++--------- 6 files changed, 96 insertions(+), 34 deletions(-) create mode 100644 man/pug-cli.1 diff --git a/.gitignore b/.gitignore index a5fc750..9d23a32 100644 --- a/.gitignore +++ b/.gitignore @@ -10,6 +10,7 @@ logs results npm-debug.log node_modules +package-lock.json coverage cov-pt* test/temp diff --git a/HISTORY.md b/HISTORY.md index 93b52d5..5d1a158 100644 --- a/HISTORY.md +++ b/HISTORY.md @@ -2,15 +2,18 @@ As with most npm modules, this project adheres to [Semantic Versioning](http://semver.org/). -## [1.0.0-alpha7] - 2021-06 +## [1.0.0] - 2021-06-13 ### Changed - +- command is now `pug3`, to make it possible to have installed globally alongside pug-cli +- update Readme - Removing broken test ("JavaScript syntax does not accept UTF newlines") -- upgrade to Pug 3 +- upgrade to PUG 3 - upgrade all dependencies - configure Travis to test with Node 10, 12 and 14 (Pug 3 supports Node 10+) +### Added +- `man` page ## [1.0.0-alpha6] - 2016-06-01 diff --git a/README.md b/README.md index 677f9c3..ceeb225 100644 --- a/README.md +++ b/README.md @@ -1,16 +1,20 @@ -# pug-cli +# @anduh/pug-cli -Pug's CLI interface +PUG 3 CLI interface [![Build Status](https://img.shields.io/travis/pugjs/pug-cli/master.svg)](https://travis-ci.org/pugjs/pug-cli) [![Dependency Status](https://img.shields.io/david/pugjs/pug-cli.svg)](https://david-dm.org/pugjs/pug-cli) [![NPM version](https://img.shields.io/npm/v/pug-cli.svg)](https://www.npmjs.org/package/pug-cli) [![Coverage Status](https://img.shields.io/codecov/c/github/pugjs/pug-cli.svg)](https://codecov.io/gh/pugjs/pug-cli) +**@anduh/pug-cli** is a CLI for rendering [PUG](https://pugjs.org/), using PUG 3. It's a fork of the original [pug-cli](https://github.com/pugjs/pug-cli), which still uses PUG 2. + +**warning:** this is my first try at publishing an npm package, so this might not work. + ## Usage ``` -$ pug [options] [dir|file ...] +$ pug3 [options] [dir|file ...] ``` Render ``s and all files in ``s. If no files are specified, @@ -44,49 +48,49 @@ input is taken from standard input and output to standard output. Render all files in the `templates` directory: ``` -$ pug templates +$ pug3 templates ``` Create `{foo,bar}.html`: ``` -$ pug {foo,bar}.pug +$ pug3 {foo,bar}.pug ``` Using `pug` over standard input and output streams: ``` -$ pug < my.pug > my.html +$ pug3 < my.pug > my.html $ echo "h1 Pug!" | pug ``` Render all files in `foo` and `bar` directories to `/tmp`: ``` -$ pug foo bar --out /tmp +$ pug3 foo bar --out /tmp ``` Specify options through a string: ``` -$ pug -O '{"doctype": "html"}' foo.pug +$ pug3 -O '{"doctype": "html"}' foo.pug # or, using JavaScript instead of JSON -$ pug -O "{doctype: 'html'}" foo.pug +$ pug3 -O "{doctype: 'html'}" foo.pug ``` Specify options through a file: ``` $ echo "exports.doctype = 'html';" > options.js -$ pug -O options.js foo.pug +$ pug3 -O options.js foo.pug # or, JSON works too $ echo '{"doctype": "html"}' > options.json -$ pug -O options.json foo.pug +$ pug3 -O options.json foo.pug ``` ## Installation - npm install pug-cli -g + npm install @anduh/pug-cli -g ## License diff --git a/index.js b/index.js index 9bd59d5..a66e451 100644 --- a/index.js +++ b/index.js @@ -21,7 +21,7 @@ var relative = path.relative; program .version( 'pug version: ' + require('pug/package.json').version + '\n' + - 'pug-cli version: ' + require( './package.json').version + '@anduh/pug-cli version: ' + require( './package.json').version ) .usage('[options] [dir|file ...]') .option('-O, --obj ', 'JSON/JavaScript options object or file') @@ -43,29 +43,29 @@ program.on('--help', function(){ console.log(' Examples:'); console.log(''); console.log(' # Render all files in the `templates` directory:'); - console.log(' $ pug templates'); + console.log(' $ pug3 templates'); console.log(''); console.log(' # Create {foo,bar}.html:'); - console.log(' $ pug {foo,bar}.pug'); + console.log(' $ pug3 {foo,bar}.pug'); console.log(''); console.log(' # Using `pug` over standard input and output streams'); - console.log(' $ pug < my.pug > my.html'); + console.log(' $ pug3 < my.pug > my.html'); console.log(' $ echo \'h1 Pug!\' | pug'); console.log(''); console.log(' # Render all files in `foo` and `bar` directories to `/tmp`:'); - console.log(' $ pug foo bar --out /tmp'); + console.log(' $ pug3 foo bar --out /tmp'); console.log(''); console.log(' # Specify options through a string:'); console.log(' $ pug -O \'{"doctype": "html"}\' foo.pug'); console.log(' # or, using JavaScript instead of JSON'); - console.log(' $ pug -O "{doctype: \'html\'}" foo.pug'); + console.log(' $ pug3 -O "{doctype: \'html\'}" foo.pug'); console.log(''); console.log(' # Specify options through a file:'); console.log(' $ echo "exports.doctype = \'html\';" > options.js'); - console.log(' $ pug -O options.js foo.pug'); + console.log(' $ pug3 -O options.js foo.pug'); console.log(' # or, JSON works too'); console.log(' $ echo \'{"doctype": "html"}\' > options.json'); - console.log(' $ pug -O options.json foo.pug'); + console.log(' $ pug3 -O options.json foo.pug'); console.log(''); }); diff --git a/man/pug-cli.1 b/man/pug-cli.1 new file mode 100644 index 0000000..067806e --- /dev/null +++ b/man/pug-cli.1 @@ -0,0 +1,59 @@ +.\" Manpage for pug-cli. +.TH man 1 "13 June 2021" "1.0.0" "pug-cli man page" +.SH NAME +@anduh/pug-cli \- PUG 3 CLI interface +.SH SYNOPSIS +pug3 [OPTIONS] [DIR|FILE ...] +.SH DESCRIPTION +@anduh/pug-cli is a CLI for rendering PUG, using PUG 3. It's a fork of the original "pug-cli", which still uses PUG 2. +.SH OPTIONS + -h, --help output usage information + -V, --version output the version number + -O, --obj JSON/JavaScript options object or file + -o, --out output rendered HTML or compiled JS to + -p, --path filename used to resolve includes + -b, --basedir path used as root dir to resolve absolute includes + -P, --pretty compile pretty HTML output + -c, --client compile function for client-side runtime.js + -n, --name name of the compiled template (req. --client) + -D, --no-debug compile without debugging (smaller functions) + -w, --watch watch files for changes and auto re-render + -E, --extension specify the output file extension + -s, --silent do not output logs + + --name-after-file name the template after the last section of the file path (requires --client and overriden by --name) + + --doctype specify the doctype on the command line (useful if it is not specified by the template) + +.SH EXAMPLES + +Render all files in the `templates` directory: + + $ pug3 templates + +Create `{foo,bar}.html`: + + $ pug3 {foo,bar}.pug + +Using `pug` over standard input and output streams: + + $ pug3 < my.pug > my.html + $ echo "h1 Pug!" | pug + +Render all files in `foo` and `bar` directories to `/tmp`: + + $ pug3 foo bar --out /tmp + +Specify options through a string: + + $ pug3 -O '{"doctype": "html"}' foo.pug + # or, using JavaScript instead of JSON + $ pug3 -O "{doctype: 'html'}" foo.pug + +Specify options through a file: + + $ echo "exports.doctype = 'html';" > options.js + $ pug3 -O options.js foo.pug + # or, JSON works too + $ echo '{"doctype": "html"}' > options.json + $ pug3 -O options.json foo.pug diff --git a/package.json b/package.json index 966f76e..3866b85 100644 --- a/package.json +++ b/package.json @@ -1,13 +1,13 @@ { "name": "@anduh/pug-cli", - "version": "1.0.0-alpha7", - "description": "Pug's CLI interface", + "version": "1.0.0", + "description": "a PUG (3) CLI interface", + "man": "/man/pug-cli.1", "bin": { - "pug": "./index.js", - "pug-cli": "./index.js" + "pug3": "./index.js" }, "preferGlobal": true, - "keywords": [], + "keywords": ["pug"], "dependencies": { "chalk": "^4.1.1", "commander": "^7.2.0", @@ -27,12 +27,7 @@ }, "repository": { "type": "git", - "url": "https://github.com/pugjs/pug-cli.git" + "url": "https://github.com/Anduh/pug-cli.git" }, - "author": "TJ Holowaychuk ", - "maintainers": [ - "Timothy Gu ", - "Forbes Lindesay " - ], "license": "MIT" } From 8129b2c4746feae7585efa21b806fe0c67b5e998 Mon Sep 17 00:00:00 2001 From: Andreas Johansson Date: Sun, 13 Jun 2021 22:58:08 +0300 Subject: [PATCH 07/25] man fix attempt --- index.js | 0 man/{pug-cli.1 => pug3.1} | 0 package-lock.json | 1779 ++++++++++++++++++++++++++++++++++++- package.json | 7 +- 4 files changed, 1781 insertions(+), 5 deletions(-) mode change 100644 => 100755 index.js rename man/{pug-cli.1 => pug3.1} (100%) diff --git a/index.js b/index.js old mode 100644 new mode 100755 diff --git a/man/pug-cli.1 b/man/pug3.1 similarity index 100% rename from man/pug-cli.1 rename to man/pug3.1 diff --git a/package-lock.json b/package-lock.json index 9db653a..4b9126b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,8 +1,1781 @@ { - "name": "pug-cli", - "version": "1.0.0-alpha6", - "lockfileVersion": 1, + "name": "@anduh/pug-cli", + "version": "1.0.0", + "lockfileVersion": 2, "requires": true, + "packages": { + "": { + "name": "@anduh/pug-cli", + "version": "1.0.0", + "license": "MIT", + "dependencies": { + "chalk": "^4.1.1", + "commander": "^7.2.0", + "mkdirp": "^1.0.4", + "pug": "^3.0.2" + }, + "bin": { + "pug3": "index.js" + }, + "devDependencies": { + "istanbul": "*", + "mocha": "*", + "rimraf": "*" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.0.tgz", + "integrity": "sha512-V3ts7zMSu5lfiwWDVWzRDGIN+lnCEUdaXgtVHJgLb1rGaA6jMrtB9EmE7L18foXJIE8Un/A/h6NJfGQp/e1J4A==" + }, + "node_modules/@babel/parser": { + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.14.0.tgz", + "integrity": "sha512-AHbfoxesfBALg33idaTBVUkLnfXtsgvJREf93p4p0Lwsz4ppfE7g1tpEXVm4vrxUcH4DVhAa9Z1m1zqf9WUC7Q==", + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/types": { + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.0.tgz", + "integrity": "sha512-O2LVLdcnWplaGxiPBz12d0HcdN8QdxdsWYhz5LSeuukV/5mn2xUUc3gBeU4QBYPJ18g/UToe8F532XJ608prmg==", + "dependencies": { + "@babel/helper-validator-identifier": "^7.14.0", + "to-fast-properties": "^2.0.0" + } + }, + "node_modules/@ungap/promise-all-settled": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@ungap/promise-all-settled/-/promise-all-settled-1.1.2.tgz", + "integrity": "sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q==", + "dev": true + }, + "node_modules/abbrev": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.0.9.tgz", + "integrity": "sha1-kbR5JYinc4wl813W9jdSovh3YTU=", + "dev": true + }, + "node_modules/acorn": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", + "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/amdefine": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz", + "integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU=", + "dev": true, + "optional": true, + "engines": { + "node": ">=0.4.2" + } + }, + "node_modules/ansi-colors": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", + "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/anymatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", + "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", + "dev": true, + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "node_modules/asap": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", + "integrity": "sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY=" + }, + "node_modules/assert-never": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/assert-never/-/assert-never-1.2.1.tgz", + "integrity": "sha512-TaTivMB6pYI1kXwrFlEhLeGfOqoDNdTxjCdwRfFFkEA30Eu+k48W34nlok2EYWJfFFzqaEmichdNM7th6M5HNw==" + }, + "node_modules/async": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", + "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=", + "dev": true + }, + "node_modules/babel-walk": { + "version": "3.0.0-canary-5", + "resolved": "https://registry.npmjs.org/babel-walk/-/babel-walk-3.0.0-canary-5.tgz", + "integrity": "sha512-GAwkz0AihzY5bkwIY5QDR+LvsRQgB/B+1foMPvi0FZPMl5fjD7ICiznUiBdLYMH1QYe6vqu4gWYytZOccLouFw==", + "dependencies": { + "@babel/types": "^7.9.6" + }, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true + }, + "node_modules/binary-extensions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "dependencies": { + "fill-range": "^7.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/browser-stdout": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", + "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", + "dev": true + }, + "node_modules/call-bind": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "dependencies": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + } + }, + "node_modules/chalk": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz", + "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/character-parser": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/character-parser/-/character-parser-2.2.0.tgz", + "integrity": "sha1-x84o821LzZdE5f/CxfzeHHMmH8A=", + "dependencies": { + "is-regex": "^1.0.3" + } + }, + "node_modules/chokidar": { + "version": "3.5.1", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.1.tgz", + "integrity": "sha512-9+s+Od+W0VJJzawDma/gvBNQqkTiqYTWLuZoyAsivsI4AaWTCzHG06/TMjsf1cYe9Cb97UCEhjz7HvnPk2p/tw==", + "dev": true, + "dependencies": { + "anymatch": "~3.1.1", + "braces": "~3.0.2", + "glob-parent": "~5.1.0", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.5.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.1" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "node_modules/commander": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", + "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", + "engines": { + "node": ">= 10" + } + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "dev": true + }, + "node_modules/constantinople": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/constantinople/-/constantinople-4.0.1.tgz", + "integrity": "sha512-vCrqcSIq4//Gx74TXXCGnHpulY1dskqLTFGDmhrGxzeXL8lF8kvXv6mpNWlJj1uD4DW23D4ljAqbY4RRaaUZIw==", + "dependencies": { + "@babel/parser": "^7.6.0", + "@babel/types": "^7.6.1" + } + }, + "node_modules/debug": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", + "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + } + }, + "node_modules/debug/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "node_modules/deep-is": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", + "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", + "dev": true + }, + "node_modules/diff": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz", + "integrity": "sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==", + "dev": true, + "engines": { + "node": ">=0.3.1" + } + }, + "node_modules/doctypes": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/doctypes/-/doctypes-1.1.0.tgz", + "integrity": "sha1-6oCxBqh1OHdOijpKWv4pPeSJ4Kk=" + }, + "node_modules/emoji-regex": { + "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 + }, + "node_modules/escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/escodegen": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.8.1.tgz", + "integrity": "sha1-WltTr0aTEQvrsIZ6o0MN07cKEBg=", + "dev": true, + "dependencies": { + "esprima": "^2.7.1", + "estraverse": "^1.9.1", + "esutils": "^2.0.2", + "optionator": "^0.8.1" + }, + "bin": { + "escodegen": "bin/escodegen.js", + "esgenerate": "bin/esgenerate.js" + }, + "engines": { + "node": ">=0.12.0" + }, + "optionalDependencies": { + "source-map": "~0.2.0" + } + }, + "node_modules/escodegen/node_modules/source-map": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.2.0.tgz", + "integrity": "sha1-2rc/vPwrqBm03gO9b26qSBZLP50=", + "dev": true, + "optional": true, + "dependencies": { + "amdefine": ">=0.0.4" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/esprima": { + "version": "2.7.3", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz", + "integrity": "sha1-luO3DVd59q1JzQMmc9HDEnZ7pYE=", + "dev": true, + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/estraverse": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-1.9.3.tgz", + "integrity": "sha1-r2fy3JIlgkFZUJJgkaQAXSnJu0Q=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", + "dev": true + }, + "node_modules/fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/flat": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", + "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", + "dev": true, + "bin": { + "flat": "cli.js" + } + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "dev": true + }, + "node_modules/fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" + }, + "node_modules/get-caller-file": { + "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, + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/get-intrinsic": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", + "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", + "dependencies": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1" + } + }, + "node_modules/glob": { + "version": "5.0.15", + "resolved": "https://registry.npmjs.org/glob/-/glob-5.0.15.tgz", + "integrity": "sha1-G8k2ueAvSmA/zCIuz3Yz0wuLk7E=", + "dev": true, + "dependencies": { + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "2 || 3", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + } + }, + "node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/growl": { + "version": "1.10.5", + "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz", + "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==", + "dev": true, + "engines": { + "node": ">=4.x" + } + }, + "node_modules/handlebars": { + "version": "4.7.7", + "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.7.tgz", + "integrity": "sha512-aAcXm5OAfE/8IXkcZvCepKU3VzW1/39Fb5ZuqMtgI/hT8X2YgoMvBY5dLhq/cpOvw7Lk1nK/UF71aLG/ZnVYRA==", + "dev": true, + "dependencies": { + "minimist": "^1.2.5", + "neo-async": "^2.6.0", + "source-map": "^0.6.1", + "wordwrap": "^1.0.0" + }, + "bin": { + "handlebars": "bin/handlebars" + }, + "engines": { + "node": ">=0.4.7" + }, + "optionalDependencies": { + "uglify-js": "^3.1.4" + } + }, + "node_modules/handlebars/node_modules/uglify-js": { + "version": "3.13.5", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.13.5.tgz", + "integrity": "sha512-xtB8yEqIkn7zmOyS2zUNBsYCBRhDkvlNxMMY2smuJ/qA8NCHeQvKCF3i9Z4k8FJH4+PJvZRtMrPynfZ75+CSZw==", + "dev": true, + "optional": true, + "bin": { + "uglifyjs": "bin/uglifyjs" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/handlebars/node_modules/wordwrap": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", + "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=", + "dev": true + }, + "node_modules/has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dependencies": { + "function-bind": "^1.1.1" + }, + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/has-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", + "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/has-symbols": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", + "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/he": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", + "dev": true, + "bin": { + "he": "bin/he" + } + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "dev": true, + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-core-module": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.3.0.tgz", + "integrity": "sha512-xSphU2KG9867tsYdLD4RWQ1VqdFl4HTO9Thf3I/3dLEfr0dbPTWKsuCKrgqMljg4nPE+Gq0VCnzT3gr0CyBmsw==", + "dependencies": { + "has": "^1.0.3" + } + }, + "node_modules/is-expression": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-expression/-/is-expression-4.0.0.tgz", + "integrity": "sha512-zMIXX63sxzG3XrkHkrAPvm/OVZVSCPNkwMHU8oTX7/U3AL78I0QXCEICXUM13BIa8TYGZ68PiTKfQz3yaTNr4A==", + "dependencies": { + "acorn": "^7.1.1", + "object-assign": "^4.1.1" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/is-glob": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", + "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", + "dev": true, + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-plain-obj": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", + "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-promise": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.2.2.tgz", + "integrity": "sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ==" + }, + "node_modules/is-regex": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.2.tgz", + "integrity": "sha512-axvdhb5pdhEVThqJzYXwMlVuZwC+FF2DpcOhTS+y/8jVq4trxyPgfcwIxIKiyeuLlSQYKkmUaPQJ8ZE4yNKXDg==", + "dependencies": { + "call-bind": "^1.0.2", + "has-symbols": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", + "dev": true + }, + "node_modules/istanbul": { + "version": "0.4.5", + "resolved": "https://registry.npmjs.org/istanbul/-/istanbul-0.4.5.tgz", + "integrity": "sha1-ZcfXPUxNqE1POsMQuRj7C4Azczs=", + "dev": true, + "dependencies": { + "abbrev": "1.0.x", + "async": "1.x", + "escodegen": "1.8.x", + "esprima": "2.7.x", + "glob": "^5.0.15", + "handlebars": "^4.0.1", + "js-yaml": "3.x", + "mkdirp": "0.5.x", + "nopt": "3.x", + "once": "1.x", + "resolve": "1.1.x", + "supports-color": "^3.1.0", + "which": "^1.1.1", + "wordwrap": "^1.0.0" + }, + "bin": { + "istanbul": "lib/cli.js" + } + }, + "node_modules/istanbul/node_modules/mkdirp": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", + "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", + "dev": true, + "dependencies": { + "minimist": "^1.2.5" + }, + "bin": { + "mkdirp": "bin/cmd.js" + } + }, + "node_modules/istanbul/node_modules/resolve": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.1.7.tgz", + "integrity": "sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs=", + "dev": true + }, + "node_modules/istanbul/node_modules/supports-color": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", + "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "dev": true, + "dependencies": { + "has-flag": "^1.0.0" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/istanbul/node_modules/wordwrap": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", + "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=", + "dev": true + }, + "node_modules/js-stringify": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/js-stringify/-/js-stringify-1.0.2.tgz", + "integrity": "sha1-Fzb939lyTyijaCrcYjCufk6Weds=" + }, + "node_modules/js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "dev": true, + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/js-yaml/node_modules/esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "dev": true, + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/jstransformer": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/jstransformer/-/jstransformer-1.0.0.tgz", + "integrity": "sha1-7Yvwkh4vPx7U1cGkT2hwntJHIsM=", + "dependencies": { + "is-promise": "^2.0.0", + "promise": "^7.0.1" + } + }, + "node_modules/levn": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", + "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", + "dev": true, + "dependencies": { + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/log-symbols": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.0.0.tgz", + "integrity": "sha512-FN8JBzLx6CzeMrB0tg6pqlGU1wCrXW+ZXGH481kfsBqer0hToTIiHdjH4Mq8xJUbvATujKCvaREGWpGUionraA==", + "dev": true, + "dependencies": { + "chalk": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/log-symbols/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/log-symbols/node_modules/chalk": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz", + "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/log-symbols/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/log-symbols/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/minimist": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", + "dev": true + }, + "node_modules/mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "bin": { + "mkdirp": "bin/cmd.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/mocha": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-8.3.2.tgz", + "integrity": "sha512-UdmISwr/5w+uXLPKspgoV7/RXZwKRTiTjJ2/AC5ZiEztIoOYdfKb19+9jNmEInzx5pBsCyJQzarAxqIGBNYJhg==", + "dev": true, + "dependencies": { + "@ungap/promise-all-settled": "1.1.2", + "ansi-colors": "4.1.1", + "browser-stdout": "1.3.1", + "chokidar": "3.5.1", + "debug": "4.3.1", + "diff": "5.0.0", + "escape-string-regexp": "4.0.0", + "find-up": "5.0.0", + "glob": "7.1.6", + "growl": "1.10.5", + "he": "1.2.0", + "js-yaml": "4.0.0", + "log-symbols": "4.0.0", + "minimatch": "3.0.4", + "ms": "2.1.3", + "nanoid": "3.1.20", + "serialize-javascript": "5.0.1", + "strip-json-comments": "3.1.1", + "supports-color": "8.1.1", + "which": "2.0.2", + "wide-align": "1.1.3", + "workerpool": "6.1.0", + "yargs": "16.2.0", + "yargs-parser": "20.2.4", + "yargs-unparser": "2.0.0" + }, + "bin": { + "_mocha": "bin/_mocha", + "mocha": "bin/mocha" + }, + "engines": { + "node": ">= 10.12.0" + } + }, + "node_modules/mocha/node_modules/ansi-regex": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/mocha/node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "node_modules/mocha/node_modules/cliui": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "dev": true, + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } + }, + "node_modules/mocha/node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/mocha/node_modules/glob": { + "version": "7.1.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", + "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + } + }, + "node_modules/mocha/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/mocha/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/mocha/node_modules/js-yaml": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.0.0.tgz", + "integrity": "sha512-pqon0s+4ScYUvX30wxQi3PogGFAlUyH0awepWvwkj4jD4v+ova3RiYw8bmA6x2rDrEaj8i/oWKoRxpVNW+Re8Q==", + "dev": true, + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/mocha/node_modules/string-width": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz", + "integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==", + "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/mocha/node_modules/strip-ansi": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/mocha/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/mocha/node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/mocha/node_modules/yargs": { + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "dev": true, + "dependencies": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true + }, + "node_modules/nanoid": { + "version": "3.1.20", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.1.20.tgz", + "integrity": "sha512-a1cQNyczgKbLX9jwbS/+d7W8fX/RfgYR7lVWwWOGIPNgK2m0MWvrGF6/m4kk6U3QcFMnZf3RIhL0v2Jgh/0Uxw==", + "dev": true, + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/neo-async": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", + "dev": true + }, + "node_modules/nopt": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz", + "integrity": "sha1-xkZdvwirzU2zWTF/eaxopkayj/k=", + "dev": true, + "dependencies": { + "abbrev": "1" + }, + "bin": { + "nopt": "bin/nopt.js" + } + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dev": true, + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/optionator": { + "version": "0.8.3", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", + "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", + "dev": true, + "dependencies": { + "deep-is": "~0.1.3", + "fast-levenshtein": "~2.0.6", + "levn": "~0.3.0", + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2", + "word-wrap": "~1.2.3" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-parse": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", + "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==" + }, + "node_modules/picomatch": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.3.tgz", + "integrity": "sha512-KpELjfwcCDUb9PeigTs2mBJzXUPzAuP2oPcA989He8Rte0+YUAjw1JVedDhuTKPkHjSYzMN3npC9luThGYEKdg==", + "dev": true, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/prelude-ls": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", + "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=", + "dev": true, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/promise": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz", + "integrity": "sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==", + "dependencies": { + "asap": "~2.0.3" + } + }, + "node_modules/pug": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/pug/-/pug-3.0.2.tgz", + "integrity": "sha512-bp0I/hiK1D1vChHh6EfDxtndHji55XP/ZJKwsRqrz6lRia6ZC2OZbdAymlxdVFwd1L70ebrVJw4/eZ79skrIaw==", + "dependencies": { + "pug-code-gen": "^3.0.2", + "pug-filters": "^4.0.0", + "pug-lexer": "^5.0.1", + "pug-linker": "^4.0.0", + "pug-load": "^3.0.0", + "pug-parser": "^6.0.0", + "pug-runtime": "^3.0.1", + "pug-strip-comments": "^2.0.0" + } + }, + "node_modules/pug-attrs": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pug-attrs/-/pug-attrs-3.0.0.tgz", + "integrity": "sha512-azINV9dUtzPMFQktvTXciNAfAuVh/L/JCl0vtPCwvOA21uZrC08K/UnmrL+SXGEVc1FwzjW62+xw5S/uaLj6cA==", + "dependencies": { + "constantinople": "^4.0.1", + "js-stringify": "^1.0.2", + "pug-runtime": "^3.0.0" + } + }, + "node_modules/pug-code-gen": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/pug-code-gen/-/pug-code-gen-3.0.2.tgz", + "integrity": "sha512-nJMhW16MbiGRiyR4miDTQMRWDgKplnHyeLvioEJYbk1RsPI3FuA3saEP8uwnTb2nTJEKBU90NFVWJBk4OU5qyg==", + "dependencies": { + "constantinople": "^4.0.1", + "doctypes": "^1.1.0", + "js-stringify": "^1.0.2", + "pug-attrs": "^3.0.0", + "pug-error": "^2.0.0", + "pug-runtime": "^3.0.0", + "void-elements": "^3.1.0", + "with": "^7.0.0" + } + }, + "node_modules/pug-error": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/pug-error/-/pug-error-2.0.0.tgz", + "integrity": "sha512-sjiUsi9M4RAGHktC1drQfCr5C5eriu24Lfbt4s+7SykztEOwVZtbFk1RRq0tzLxcMxMYTBR+zMQaG07J/btayQ==" + }, + "node_modules/pug-filters": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/pug-filters/-/pug-filters-4.0.0.tgz", + "integrity": "sha512-yeNFtq5Yxmfz0f9z2rMXGw/8/4i1cCFecw/Q7+D0V2DdtII5UvqE12VaZ2AY7ri6o5RNXiweGH79OCq+2RQU4A==", + "dependencies": { + "constantinople": "^4.0.1", + "jstransformer": "1.0.0", + "pug-error": "^2.0.0", + "pug-walk": "^2.0.0", + "resolve": "^1.15.1" + } + }, + "node_modules/pug-lexer": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/pug-lexer/-/pug-lexer-5.0.1.tgz", + "integrity": "sha512-0I6C62+keXlZPZkOJeVam9aBLVP2EnbeDw3An+k0/QlqdwH6rv8284nko14Na7c0TtqtogfWXcRoFE4O4Ff20w==", + "dependencies": { + "character-parser": "^2.2.0", + "is-expression": "^4.0.0", + "pug-error": "^2.0.0" + } + }, + "node_modules/pug-linker": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/pug-linker/-/pug-linker-4.0.0.tgz", + "integrity": "sha512-gjD1yzp0yxbQqnzBAdlhbgoJL5qIFJw78juN1NpTLt/mfPJ5VgC4BvkoD3G23qKzJtIIXBbcCt6FioLSFLOHdw==", + "dependencies": { + "pug-error": "^2.0.0", + "pug-walk": "^2.0.0" + } + }, + "node_modules/pug-load": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pug-load/-/pug-load-3.0.0.tgz", + "integrity": "sha512-OCjTEnhLWZBvS4zni/WUMjH2YSUosnsmjGBB1An7CsKQarYSWQ0GCVyd4eQPMFJqZ8w9xgs01QdiZXKVjk92EQ==", + "dependencies": { + "object-assign": "^4.1.1", + "pug-walk": "^2.0.0" + } + }, + "node_modules/pug-parser": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/pug-parser/-/pug-parser-6.0.0.tgz", + "integrity": "sha512-ukiYM/9cH6Cml+AOl5kETtM9NR3WulyVP2y4HOU45DyMim1IeP/OOiyEWRr6qk5I5klpsBnbuHpwKmTx6WURnw==", + "dependencies": { + "pug-error": "^2.0.0", + "token-stream": "1.0.0" + } + }, + "node_modules/pug-runtime": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/pug-runtime/-/pug-runtime-3.0.1.tgz", + "integrity": "sha512-L50zbvrQ35TkpHwv0G6aLSuueDRwc/97XdY8kL3tOT0FmhgG7UypU3VztfV/LATAvmUfYi4wNxSajhSAeNN+Kg==" + }, + "node_modules/pug-strip-comments": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/pug-strip-comments/-/pug-strip-comments-2.0.0.tgz", + "integrity": "sha512-zo8DsDpH7eTkPHCXFeAk1xZXJbyoTfdPlNR0bK7rpOMuhBYb0f5qUVCO1xlsitYd3w5FQTK7zpNVKb3rZoUrrQ==", + "dependencies": { + "pug-error": "^2.0.0" + } + }, + "node_modules/pug-walk": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/pug-walk/-/pug-walk-2.0.0.tgz", + "integrity": "sha512-yYELe9Q5q9IQhuvqsZNwA5hfPkMJ8u92bQLIMcsMxf/VADjNtEYptU+inlufAFYcWdHlwNfZOEnOOQrZrcyJCQ==" + }, + "node_modules/randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "dev": true, + "dependencies": { + "safe-buffer": "^5.1.0" + } + }, + "node_modules/readdirp": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.5.0.tgz", + "integrity": "sha512-cMhu7c/8rdhkHXWsY+osBhfSy0JikwpHK/5+imo+LpeasTF8ouErHrlYkwT0++njiyuDvc7OFY5T3ukvZ8qmFQ==", + "dev": true, + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/resolve": { + "version": "1.20.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", + "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==", + "dependencies": { + "is-core-module": "^2.2.0", + "path-parse": "^1.0.6" + } + }, + "node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + } + }, + "node_modules/rimraf/node_modules/glob": { + "version": "7.1.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", + "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + } + }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true + }, + "node_modules/serialize-javascript": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-5.0.1.tgz", + "integrity": "sha512-SaaNal9imEO737H2c05Og0/8LUXG7EnsZyMa8MzkmuHoELfT6txuj0cMqRj6zfPKnmQ1yasR4PCJc8x+M4JSPA==", + "dev": true, + "dependencies": { + "randombytes": "^2.1.0" + } + }, + "node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", + "dev": true + }, + "node_modules/string-width": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "dev": true, + "dependencies": { + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/string-width/node_modules/ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/string-width/node_modules/strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "dependencies": { + "ansi-regex": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/supports-color/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", + "engines": { + "node": ">=4" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/token-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/token-stream/-/token-stream-1.0.0.tgz", + "integrity": "sha1-zCAOqyYT9BZtJ/+a/HylbUnfbrQ=" + }, + "node_modules/type-check": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", + "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", + "dev": true, + "dependencies": { + "prelude-ls": "~1.1.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/void-elements": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/void-elements/-/void-elements-3.1.0.tgz", + "integrity": "sha1-YU9/v42AHwu18GYfWy9XhXUOTwk=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "which": "bin/which" + } + }, + "node_modules/wide-align": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz", + "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==", + "dev": true, + "dependencies": { + "string-width": "^1.0.2 || 2" + } + }, + "node_modules/with": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/with/-/with-7.0.2.tgz", + "integrity": "sha512-RNGKj82nUPg3g5ygxkQl0R937xLyho1J24ItRCBTr/m1YnZkzJy1hUiHUJrc/VlsDQzsCnInEGSg3bci0Lmd4w==", + "dependencies": { + "@babel/parser": "^7.9.6", + "@babel/types": "^7.9.6", + "assert-never": "^1.2.1", + "babel-walk": "3.0.0-canary-5" + }, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/word-wrap": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", + "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/workerpool": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.1.0.tgz", + "integrity": "sha512-toV7q9rWNYha963Pl/qyeZ6wG+3nnsyvolaNUS8+R5Wtw6qJPTxIlOP1ZSvcGhEJw+l3HMMmtiNo9Gl61G4GVg==", + "dev": true + }, + "node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/wrap-ansi/node_modules/ansi-regex": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi/node_modules/string-width": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz", + "integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==", + "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi/node_modules/strip-ansi": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", + "dev": true + }, + "node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/yargs-parser": { + "version": "20.2.4", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz", + "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/yargs-unparser": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz", + "integrity": "sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==", + "dev": true, + "dependencies": { + "camelcase": "^6.0.0", + "decamelize": "^4.0.0", + "flat": "^5.0.2", + "is-plain-obj": "^2.1.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/yargs-unparser/node_modules/camelcase": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.2.0.tgz", + "integrity": "sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/yargs-unparser/node_modules/decamelize": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz", + "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true, + "engines": { + "node": ">=10" + } + } + }, "dependencies": { "@babel/helper-validator-identifier": { "version": "7.14.0", diff --git a/package.json b/package.json index 3866b85..302ae97 100644 --- a/package.json +++ b/package.json @@ -2,7 +2,9 @@ "name": "@anduh/pug-cli", "version": "1.0.0", "description": "a PUG (3) CLI interface", - "man": "/man/pug-cli.1", + "directories": { + "man": "man" + }, "bin": { "pug3": "./index.js" }, @@ -23,7 +25,8 @@ "test": "mocha -R spec --bail", "precoverage": "rimraf coverage && rimraf cov-pt*", "coverage": "istanbul cover --report none --dir cov-pt0 node_modules/mocha/bin/_mocha -- -R dot", - "postcoverage": "istanbul report --include cov-pt\\*/coverage.json && rimraf cov-pt*" + "postcoverage": "istanbul report --include cov-pt\\*/coverage.json && rimraf cov-pt*", + "man": "man ./pug3.1" }, "repository": { "type": "git", From 2f9dfb13883886682921f98808f1dcfc87cf4f8a Mon Sep 17 00:00:00 2001 From: Andreas Johansson Date: Sun, 13 Jun 2021 23:56:25 +0300 Subject: [PATCH 08/25] update readme --- README.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index ceeb225..ac2247a 100644 --- a/README.md +++ b/README.md @@ -2,10 +2,10 @@ PUG 3 CLI interface -[![Build Status](https://img.shields.io/travis/pugjs/pug-cli/master.svg)](https://travis-ci.org/pugjs/pug-cli) -[![Dependency Status](https://img.shields.io/david/pugjs/pug-cli.svg)](https://david-dm.org/pugjs/pug-cli) -[![NPM version](https://img.shields.io/npm/v/pug-cli.svg)](https://www.npmjs.org/package/pug-cli) -[![Coverage Status](https://img.shields.io/codecov/c/github/pugjs/pug-cli.svg)](https://codecov.io/gh/pugjs/pug-cli) +`[![Build Status](https://img.shields.io/travis/pugjs/pug-cli/master.svg)](https://travis-ci.org/pugjs/pug-cli)` +[![Dependency Status](https://img.shields.io/david/anduh/pug-cli.svg)](https://david-dm.org/anduh/pug-cli) +[![NPM version](https://img.shields.io/npm/v/@anduh/pug-cli.svg)](https://www.npmjs.org/package/@anduh/pug-cli) +[![Coverage Status](https://img.shields.io/codecov/c/github/anduh/pug-cli.svg)](https://codecov.io/gh/anduh/pug-cli) **@anduh/pug-cli** is a CLI for rendering [PUG](https://pugjs.org/), using PUG 3. It's a fork of the original [pug-cli](https://github.com/pugjs/pug-cli), which still uses PUG 2. From 6f4eaa39ab40858a6696e50544be6fed039e9458 Mon Sep 17 00:00:00 2001 From: Andreas Johansson Date: Mon, 14 Jun 2021 00:20:10 +0300 Subject: [PATCH 09/25] readme cleanup --- README.md | 7 +++++-- package.json | 4 ++-- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index ac2247a..4dbe246 100644 --- a/README.md +++ b/README.md @@ -2,12 +2,11 @@ PUG 3 CLI interface -`[![Build Status](https://img.shields.io/travis/pugjs/pug-cli/master.svg)](https://travis-ci.org/pugjs/pug-cli)` [![Dependency Status](https://img.shields.io/david/anduh/pug-cli.svg)](https://david-dm.org/anduh/pug-cli) [![NPM version](https://img.shields.io/npm/v/@anduh/pug-cli.svg)](https://www.npmjs.org/package/@anduh/pug-cli) [![Coverage Status](https://img.shields.io/codecov/c/github/anduh/pug-cli.svg)](https://codecov.io/gh/anduh/pug-cli) -**@anduh/pug-cli** is a CLI for rendering [PUG](https://pugjs.org/), using PUG 3. It's a fork of the original [pug-cli](https://github.com/pugjs/pug-cli), which still uses PUG 2. +**@anduh/pug-cli** is a CLI for rendering [PUG](https://pugjs.org/), updated to PUG 3. It's a fork of the original [pug-cli](https://www.npmjs.com/package/pug-cli), which still uses PUG 2. **warning:** this is my first try at publishing an npm package, so this might not work. @@ -92,6 +91,10 @@ $ pug3 -O options.json foo.pug npm install @anduh/pug-cli -g +## Original +The original project this was forked from: +* [github.com/pugjs/pug-cli](https://github.com/pugjs/pug-cli) + ## License MIT diff --git a/package.json b/package.json index 302ae97..7cd7bc0 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@anduh/pug-cli", - "version": "1.0.0", + "version": "1.0.0-alpha8", "description": "a PUG (3) CLI interface", "directories": { "man": "man" @@ -9,7 +9,7 @@ "pug3": "./index.js" }, "preferGlobal": true, - "keywords": ["pug"], + "keywords": ["pug", "pug-cli", "html", "cli"], "dependencies": { "chalk": "^4.1.1", "commander": "^7.2.0", From 71a0972a9bb6852b938f2b54aaa320c96c9a4883 Mon Sep 17 00:00:00 2001 From: anthony-tron Date: Mon, 9 Aug 2021 18:24:31 +0200 Subject: [PATCH 10/25] =?UTF-8?q?=E2=9C=A8=20Support=20hot=20reload=20for?= =?UTF-8?q?=20object=20files=20(JS,=20JSON)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- index.js | 25 +++++++++++++++++++++++-- 1 file changed, 23 insertions(+), 2 deletions(-) diff --git a/index.js b/index.js index a66e451..78428c1 100755 --- a/index.js +++ b/index.js @@ -80,7 +80,9 @@ var options = (args.obj) ? parseObj(args.obj) : {}; */ function parseObj (input) { try { - return require(path.resolve(input)); + resolved = require.resolve(input); + delete require[resolved]; // delete cache + return require(resolved); } catch (e) { var str; try { @@ -133,7 +135,26 @@ var render = args.watch ? tryRender : renderFile; if (files.length) { consoleLog(); - if (args.watch) { + + if (program.watch) { + if (program.obj && fs.existsSync(program.obj)) { + fs.watch(program.obj, {persistent: true, interval: 200}, function() { + consoleLog(' ' + chalk.yellow(program.obj) + ' ' + chalk.gray('changed')); + + // update object without losing previous data + Object.assign(options, parseObj(options)); + + // then update all files + for (const [path, bases] of Object.entries(watchList)) { + if (watchList.hasOwnProperty(path)) { + bases.forEach(render); + } + } + }); + + consoleLog(' ' + chalk.gray('watching') + ' ' + chalk.yellow(program.obj)); + } + process.on('SIGINT', function() { process.exit(1); }); From f51a9451c208a06f8a23c2751428f78b5a9ffec0 Mon Sep 17 00:00:00 2001 From: anthony-tron Date: Mon, 9 Aug 2021 18:50:54 +0200 Subject: [PATCH 11/25] =?UTF-8?q?=E2=9C=A8=20Support=20YAML?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- index.js | 12 +++++++++++- package.json | 1 + 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/index.js b/index.js index 78428c1..6b9c746 100755 --- a/index.js +++ b/index.js @@ -8,6 +8,7 @@ var { program } = require('commander'); var mkdirp = require('mkdirp'); var chalk = require('chalk'); var pug = require('pug'); +var yaml = require('js-yaml') var basename = path.basename; var dirname = path.dirname; @@ -74,6 +75,11 @@ program.parse(process.argv); var args = program.opts(); var options = (args.obj) ? parseObj(args.obj) : {}; +if (program.obj) { + options = parseObj(program.obj); + console.log(options); +} + /** * Parse object either in `input` or in the file called `input`. The latter is * searched first. @@ -93,7 +99,11 @@ function parseObj (input) { try { return JSON.parse(str); } catch (e) { - return eval('(' + str + ')'); + try { + return yaml.load(str, 'utf-8'); + } catch(e) { + return eval('(' + str + ')'); + } } } } diff --git a/package.json b/package.json index 7cd7bc0..995af05 100644 --- a/package.json +++ b/package.json @@ -15,6 +15,7 @@ "commander": "^7.2.0", "pug": "^3.0.2", "mkdirp": "^1.0.4" + "js-yaml": "^4.1.0", }, "devDependencies": { "istanbul": "*", From 952d71769562091af01842ce457f60c7524be7e7 Mon Sep 17 00:00:00 2001 From: anthony-tron Date: Mon, 9 Aug 2021 18:54:16 +0200 Subject: [PATCH 12/25] =?UTF-8?q?=E2=8F=AA=EF=B8=8F=20Switch=20back=20to?= =?UTF-8?q?=20fs.watchFile=20because=20it's=20less=20buggy=20even=20though?= =?UTF-8?q?=20node=20recommends=20to=20use=20fs.watch=20instead?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- index.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/index.js b/index.js index 6b9c746..2f00910 100755 --- a/index.js +++ b/index.js @@ -148,7 +148,7 @@ if (files.length) { if (program.watch) { if (program.obj && fs.existsSync(program.obj)) { - fs.watch(program.obj, {persistent: true, interval: 200}, function() { + fs.watchFile(program.obj, {persistent: true, interval: 200}, function() { consoleLog(' ' + chalk.yellow(program.obj) + ' ' + chalk.gray('changed')); // update object without losing previous data From f4ca49d9d96318a51972eebef6ba99808ac6e9f1 Mon Sep 17 00:00:00 2001 From: anthony-tron Date: Mon, 9 Aug 2021 19:08:47 +0200 Subject: [PATCH 13/25] =?UTF-8?q?=F0=9F=93=9D=20Updated=20usage=20for=20YA?= =?UTF-8?q?ML?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 6 ++++-- index.js | 2 +- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 4dbe246..99ff9ec 100644 --- a/README.md +++ b/README.md @@ -24,7 +24,7 @@ input is taken from standard input and output to standard output. ``` -h, --help output usage information -V, --version output the version number --O, --obj JSON/JavaScript options object or file +-O, --obj JSON/JavaScript/YAML options object or file -o, --out output the rendered HTML or compiled JavaScript to -p, --path filename used to resolve includes @@ -85,13 +85,15 @@ $ pug3 -O options.js foo.pug # or, JSON works too $ echo '{"doctype": "html"}' > options.json $ pug3 -O options.json foo.pug +# YAML works as well +$ pug3 -O options.yaml foo.pug ``` ## Installation npm install @anduh/pug-cli -g -## Original +## Original The original project this was forked from: * [github.com/pugjs/pug-cli](https://github.com/pugjs/pug-cli) diff --git a/index.js b/index.js index 2f00910..0f799c6 100755 --- a/index.js +++ b/index.js @@ -25,7 +25,7 @@ program '@anduh/pug-cli version: ' + require( './package.json').version ) .usage('[options] [dir|file ...]') - .option('-O, --obj ', 'JSON/JavaScript options object or file') + .option('-O, --obj ', 'JSON/JavaScript/YAML options object or file') .option('-o, --out ', 'output the rendered HTML or compiled JavaScript to ') .option('-p, --path ', 'filename used to resolve includes') .option('-b, --basedir ', 'path used as root directory to resolve absolute includes') From 403c26336b4bbedba98e58658f71fc22c710124e Mon Sep 17 00:00:00 2001 From: anthony-tron Date: Mon, 9 Aug 2021 19:18:00 +0200 Subject: [PATCH 14/25] =?UTF-8?q?=E2=8F=AE=20=20Removed=20useless=20consol?= =?UTF-8?q?e.log?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- index.js | 1 - 1 file changed, 1 deletion(-) diff --git a/index.js b/index.js index 0f799c6..92faa76 100755 --- a/index.js +++ b/index.js @@ -77,7 +77,6 @@ var options = (args.obj) ? parseObj(args.obj) : {}; if (program.obj) { options = parseObj(program.obj); - console.log(options); } /** From cf7c2926ac44b83ed979d3d14c5572ad7853be4f Mon Sep 17 00:00:00 2001 From: Jun FUNAI Date: Wed, 9 Sep 2020 14:38:09 +0900 Subject: [PATCH 15/25] Require 'gray-matter'. --- package.json | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index 995af05..1a95a6d 100644 --- a/package.json +++ b/package.json @@ -13,9 +13,10 @@ "dependencies": { "chalk": "^4.1.1", "commander": "^7.2.0", - "pug": "^3.0.2", - "mkdirp": "^1.0.4" + "gray-matter": "^4.0.2", "js-yaml": "^4.1.0", + "mkdirp": "^1.0.4" + "pug": "^3.0.2", }, "devDependencies": { "istanbul": "*", From 55e4f4455dfada4d5f55fb1dcdcd38522ec34375 Mon Sep 17 00:00:00 2001 From: Jun FUNAI Date: Wed, 9 Sep 2020 14:47:37 +0900 Subject: [PATCH 16/25] Allow templates to use YAML front-matter. --- index.js | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/index.js b/index.js index 92faa76..3adeb77 100755 --- a/index.js +++ b/index.js @@ -9,6 +9,7 @@ var mkdirp = require('mkdirp'); var chalk = require('chalk'); var pug = require('pug'); var yaml = require('js-yaml') +var matter = require('gray-matter'); var basename = path.basename; var dirname = path.dirname; @@ -276,10 +277,19 @@ function renderFile(path, rootPath) { if (args.nameAfterFile) { options.name = getNameFromFileName(path); } + + let page = matter.read(path); + options.filename = page.path; + if(page.data.layout){ + page.content = `extends _layouts/${page.data.layout} +${page.content}`; + } + options.page = page; + var fn = options.client - ? pug.compileFileClient(path, options) - : pug.compileFile(path, options); - if (args.watch && fn.dependencies) { + ? pug.compileClient(page.content, options) + : pug.compile(page.content, options); + if (program.watch && fn.dependencies) { // watch dependencies, and recompile the base fn.dependencies.forEach(function (dep) { watchFile(dep, path, rootPath); From 4e2542cc2c5b0bfbb61254f7073447fe43ac9a99 Mon Sep 17 00:00:00 2001 From: Jun FUNAI Date: Wed, 23 Sep 2020 10:52:22 +0900 Subject: [PATCH 17/25] include directory should be specified with `--obj` option (json config). --- index.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/index.js b/index.js index 3adeb77..bee05cb 100755 --- a/index.js +++ b/index.js @@ -281,7 +281,7 @@ function renderFile(path, rootPath) { let page = matter.read(path); options.filename = page.path; if(page.data.layout){ - page.content = `extends _layouts/${page.data.layout} + page.content = `extends ${options.includes}/${page.data.layout} ${page.content}`; } options.page = page; From 115eeb1d58ca7867484653e6dae25c5960ea0b3d Mon Sep 17 00:00:00 2001 From: Jun FUNAI Date: Wed, 23 Sep 2020 11:38:10 +0900 Subject: [PATCH 18/25] fixed: injected `extends` added up with reloads. --- index.js | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/index.js b/index.js index bee05cb..046315d 100755 --- a/index.js +++ b/index.js @@ -281,14 +281,16 @@ function renderFile(path, rootPath) { let page = matter.read(path); options.filename = page.path; if(page.data.layout){ - page.content = `extends ${options.includes}/${page.data.layout} + page.extended = `extends ${options.includes}/${page.data.layout} ${page.content}`; + } else { + page.extended = page.content; } options.page = page; var fn = options.client - ? pug.compileClient(page.content, options) - : pug.compile(page.content, options); + ? pug.compileClient(page.extended, options) + : pug.compile(page.extended, options); if (program.watch && fn.dependencies) { // watch dependencies, and recompile the base fn.dependencies.forEach(function (dep) { From 3a081f5381ce59dfcba5e29059fc913ff5786208 Mon Sep 17 00:00:00 2001 From: "jf@intrix" <2344609+funai@users.noreply.github.com> Date: Tue, 19 Jul 2022 12:21:55 +0900 Subject: [PATCH 19/25] support YAML for `--obj` option. (port from "anthony-tron/pug-cli") --- index.js | 1 + 1 file changed, 1 insertion(+) diff --git a/index.js b/index.js index 046315d..8ffd644 100755 --- a/index.js +++ b/index.js @@ -10,6 +10,7 @@ var chalk = require('chalk'); var pug = require('pug'); var yaml = require('js-yaml') var matter = require('gray-matter'); +var yaml = require('js-yaml') var basename = path.basename; var dirname = path.dirname; From c53438a2409ec4960d183f8fe986fddeb54621f7 Mon Sep 17 00:00:00 2001 From: "jf@intrix" <2344609+funai@users.noreply.github.com> Date: Tue, 19 Jul 2022 13:00:23 +0900 Subject: [PATCH 20/25] assign `page.data` directly to `options.page`. i.e. `page.data.foo` -> `page.foo`. --- index.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/index.js b/index.js index 8ffd644..977daf9 100755 --- a/index.js +++ b/index.js @@ -287,7 +287,7 @@ ${page.content}`; } else { page.extended = page.content; } - options.page = page; + options.page = page.data; var fn = options.client ? pug.compileClient(page.extended, options) From ebc24ea201d0dbf5af59e40f0fd3471dc291e5ad Mon Sep 17 00:00:00 2001 From: Saulo Vallory Date: Sun, 23 Apr 2023 18:40:05 -0300 Subject: [PATCH 21/25] Fix bugs and tests --- .gitignore | 58 +++- index.js | 361 +++++++++++++---------- package.json | 11 +- test/index.js | 786 +++++++++++++++++++++++++++++--------------------- 4 files changed, 723 insertions(+), 493 deletions(-) diff --git a/.gitignore b/.gitignore index 9d23a32..84eb2ba 100644 --- a/.gitignore +++ b/.gitignore @@ -1,16 +1,56 @@ -*.seed -*.log +# See https://help.github.com/articles/ignoring-files/ for more about ignoring files. + +# cache files +build/ +dist/ +logs/ +out/ +results/ +temp/ *.csv *.dat +*.gz +*.log *.out *.pid -*.gz +*.seed pids -logs -results -npm-debug.log -node_modules -package-lock.json -coverage + +# testing cov-pt* +coverage test/temp + +# next.js +.next/ + +# misc +.DS_Store +*.pem + +# debug +.pnpm-debug.log* +npm-debug.log* +yarn-debug.log* +yarn-error.log* + +# local env files +.env.development.local +.env.local +.env.production.local +.env.test.local + +# dependencies +node_modules +package-lock.json +.pnp +.pnp.* + +# Yarn +yarn.lock +.yarn/* +!.yarn/patches +!.yarn/plugins +!.yarn/releases +!.yarn/sdks +!.yarn/versions diff --git a/index.js b/index.js index 977daf9..b386d16 100755 --- a/index.js +++ b/index.js @@ -1,16 +1,15 @@ #!/usr/bin/env node -'use strict'; - -var fs = require('fs'); -var path = require('path'); -var { program } = require('commander'); -var mkdirp = require('mkdirp'); -var chalk = require('chalk'); -var pug = require('pug'); -var yaml = require('js-yaml') -var matter = require('gray-matter'); -var yaml = require('js-yaml') +"use strict"; + +var fs = require("fs"); +var path = require("path"); +var { program } = require("commander"); +var mkdirp = require("mkdirp"); +var chalk = require("chalk"); +var pug = require("pug"); +var yaml = require("js-yaml"); +var matter = require("gray-matter"); var basename = path.basename; var dirname = path.dirname; @@ -23,112 +22,142 @@ var relative = path.relative; program .version( - 'pug version: ' + require('pug/package.json').version + '\n' + - '@anduh/pug-cli version: ' + require( './package.json').version + "pug version: " + + require("pug/package.json").version + + "\n" + + "pug-cli version: " + + require("./package.json").version + ) + .usage("[options] [dir|file ...]") + .option("-O, --obj ", "JSON/JavaScript/YAML options object or file") + .option( + "-o, --out ", + "output the rendered HTML or compiled JavaScript to " + ) + .option("-p, --path ", "filename used to resolve includes") + .option( + "-b, --basedir ", + "path used as root directory to resolve absolute includes" ) - .usage('[options] [dir|file ...]') - .option('-O, --obj ', 'JSON/JavaScript/YAML options object or file') - .option('-o, --out ', 'output the rendered HTML or compiled JavaScript to ') - .option('-p, --path ', 'filename used to resolve includes') - .option('-b, --basedir ', 'path used as root directory to resolve absolute includes') - .option('-P, --pretty', 'compile pretty HTML output') - .option('-c, --client', 'compile function for client-side') - .option('-n, --name ', 'the name of the compiled template (requires --client)') - .option('-D, --no-debug', 'compile without debugging (smaller functions)') - .option('-w, --watch', 'watch files for changes and automatically re-render') - .option('-E, --extension ', 'specify the output file extension') - .option('-s, --silent', 'do not output logs') - .option('--name-after-file', 'name the template after the last section of the file path (requires --client and overriden by --name)') - .option('--doctype ', 'specify the doctype on the command line (useful if it is not specified by the template)') - - -program.on('--help', function(){ - console.log(' Examples:'); - console.log(''); - console.log(' # Render all files in the `templates` directory:'); - console.log(' $ pug3 templates'); - console.log(''); - console.log(' # Create {foo,bar}.html:'); - console.log(' $ pug3 {foo,bar}.pug'); - console.log(''); - console.log(' # Using `pug` over standard input and output streams'); - console.log(' $ pug3 < my.pug > my.html'); - console.log(' $ echo \'h1 Pug!\' | pug'); - console.log(''); - console.log(' # Render all files in `foo` and `bar` directories to `/tmp`:'); - console.log(' $ pug3 foo bar --out /tmp'); - console.log(''); - console.log(' # Specify options through a string:'); + .option("-P, --pretty", "compile pretty HTML output") + .option("-c, --client", "compile function for client-side") + .option( + "-n, --name ", + "the name of the compiled template (requires --client)" + ) + .option("-D, --no-debug", "compile without debugging (smaller functions)") + .option("-w, --watch", "watch files for changes and automatically re-render") + .option("-E, --extension ", "specify the output file extension") + .option("-s, --silent", "do not output logs") + .option( + "--name-after-file", + "name the template after the last section of the file path (requires --client and overriden by --name)" + ) + .option( + "--doctype ", + "specify the doctype on the command line (useful if it is not specified by the template)" + ); + +program.on("--help", function () { + console.log(" Examples:"); + console.log(""); + console.log(" # Render all files in the `templates` directory:"); + console.log(" $ pug3 templates"); + console.log(""); + console.log(" # Create {foo,bar}.html:"); + console.log(" $ pug3 {foo,bar}.pug"); + console.log(""); + console.log(" # Using `pug` over standard input and output streams"); + console.log(" $ pug3 < my.pug > my.html"); + console.log(" $ echo 'h1 Pug!' | pug"); + console.log(""); + console.log( + " # Render all files in `foo` and `bar` directories to `/tmp`:" + ); + console.log(" $ pug3 foo bar --out /tmp"); + console.log(""); + console.log(" # Specify options through a string:"); console.log(' $ pug -O \'{"doctype": "html"}\' foo.pug'); - console.log(' # or, using JavaScript instead of JSON'); - console.log(' $ pug3 -O "{doctype: \'html\'}" foo.pug'); - console.log(''); - console.log(' # Specify options through a file:'); - console.log(' $ echo "exports.doctype = \'html\';" > options.js'); - console.log(' $ pug3 -O options.js foo.pug'); - console.log(' # or, JSON works too'); + console.log(" # or, using JavaScript instead of JSON"); + console.log(" $ pug3 -O \"{doctype: 'html'}\" foo.pug"); + console.log(""); + console.log(" # Specify options through a file:"); + console.log(" $ echo \"exports.doctype = 'html';\" > options.js"); + console.log(" $ pug3 -O options.js foo.pug"); + console.log(" # or, JSON works too"); console.log(' $ echo \'{"doctype": "html"}\' > options.json'); - console.log(' $ pug3 -O options.json foo.pug'); - console.log(''); + console.log(" $ pug3 -O options.json foo.pug"); + console.log(""); }); program.parse(process.argv); -var args = program.opts(); -var options = (args.obj) ? parseObj(args.obj) : {}; - -if (program.obj) { - options = parseObj(program.obj); -} +var cmdOptions = program.opts(); +var pugOptions = cmdOptions.obj ? parseObj(cmdOptions.obj) : {}; /** * Parse object either in `input` or in the file called `input`. The latter is * searched first. */ -function parseObj (input) { +function parseObj(input) { + let err = `PARSING ${input}\n`; try { - resolved = require.resolve(input); - delete require[resolved]; // delete cache + const resolved = path.resolve(input); return require(resolved); } catch (e) { - var str; + err += `Require didn't work for ${input}: ${e}\n`; + let str; try { - str = fs.readFileSync(args.obj, 'utf8'); + str = fs.readFileSync(cmdOptions.obj, "utf8"); } catch (e) { - str = args.obj; + err += ` and ${cmdOptions.obj} doesn't exist\n`; + str = cmdOptions.obj; } + + err += `Trying JSON.parse ${str}\n`; try { return JSON.parse(str); } catch (e) { + err += `JSON.parse ERROR ${e}\n`; try { - return yaml.load(str, 'utf-8'); - } catch(e) { - return eval('(' + str + ')'); + return yaml.load(str, "utf-8"); + } catch (e) { + err += `YAML ERROR ${e}\n`; + err += `Trying EVAL ${str}`; + + try { + return eval("(" + str + ")"); + } catch (e) { + err += `EVAL ERROR: ${e}\n`; + console.error(err); + throw new Error(err); + } } } } } [ - ['path', 'filename'], // --path - ['debug', 'compileDebug'], // --no-debug - ['client', 'client'], // --client - ['pretty', 'pretty'], // --pretty - ['basedir', 'basedir'], // --basedir - ['doctype', 'doctype'], // --doctype + ["path", "filename"], // --path + ["debug", "compileDebug"], // --no-debug + ["client", "client"], // --client + ["pretty", "pretty"], // --pretty + ["basedir", "basedir"], // --basedir + ["doctype", "doctype"], // --doctype ].forEach(function (o) { - options[o[1]] = args[o[0]] !== undefined ? args[o[0]] : options[o[1]]; + pugOptions[o[1]] = + cmdOptions[o[0]] !== undefined ? cmdOptions[o[0]] : pugOptions[o[1]]; }); // --name -if (typeof args.name === 'string') { - options.name = args.name; +if (typeof cmdOptions.name === "string") { + pugOptions.name = cmdOptions.name; } // --silent -var consoleLog = args.silent ? function() {} : console.log; +var consoleLog = cmdOptions.silent ? function () {} : console.log; // left-over args are file paths @@ -140,40 +169,48 @@ var files = program.args; var watchList = {}; // function for rendering -var render = args.watch ? tryRender : renderFile; +var render = cmdOptions.watch ? tryRender : renderFile; // compile files if (files.length) { consoleLog(); - if (program.watch) { - if (program.obj && fs.existsSync(program.obj)) { - fs.watchFile(program.obj, {persistent: true, interval: 200}, function() { - consoleLog(' ' + chalk.yellow(program.obj) + ' ' + chalk.gray('changed')); - - // update object without losing previous data - Object.assign(options, parseObj(options)); - - // then update all files - for (const [path, bases] of Object.entries(watchList)) { - if (watchList.hasOwnProperty(path)) { - bases.forEach(render); + if (cmdOptions.watch) { + if (cmdOptions.obj && fs.existsSync(cmdOptions.obj)) { + fs.watchFile( + cmdOptions.obj, + { persistent: true, interval: 200 }, + function () { + consoleLog( + " " + chalk.yellow(cmdOptions.obj) + " " + chalk.gray("changed") + ); + + // update object without losing previous data + Object.assign(pugOptions, parseObj(pugOptions)); + + // then update all files + for (const [path, bases] of Object.entries(watchList)) { + if (watchList.hasOwnProperty(path)) { + bases.forEach(render); + } } } - }); + ); - consoleLog(' ' + chalk.gray('watching') + ' ' + chalk.yellow(program.obj)); + consoleLog( + " " + chalk.gray("watching") + " " + chalk.yellow(cmdOptions.obj) + ); } - process.on('SIGINT', function() { + process.on("SIGINT", function () { process.exit(1); }); } files.forEach(function (file) { render(file); }); -// stdio + // stdio } else { stdin(); } @@ -186,12 +223,12 @@ if (files.length) { function watchFile(path, base, rootPath) { path = normalize(path); - var log = ' ' + chalk.gray('watching') + ' ' + chalk.cyan(path); + var log = " " + chalk.gray("watching") + " " + chalk.cyan(path); if (!base) { base = path; } else { base = normalize(base); - log += '\n ' + chalk.gray('as a dependency of') + ' '; + log += "\n " + chalk.gray("as a dependency of") + " "; log += chalk.cyan(base); } @@ -204,23 +241,26 @@ function watchFile(path, base, rootPath) { consoleLog(log); watchList[path] = [base]; - fs.watchFile(path, {persistent: true, interval: 200}, - function (curr, prev) { - // File doesn't exist anymore. Keep watching. - if (curr.mtime.getTime() === 0) return; - // istanbul ignore if - if (curr.mtime.getTime() === prev.mtime.getTime()) return; - watchList[path].forEach(function(file) { - tryRender(file, rootPath); - }); - }); + fs.watchFile( + path, + { persistent: true, interval: 200 }, + function (curr, prev) { + // File doesn't exist anymore. Keep watching. + if (curr.mtime.getTime() === 0) return; + // istanbul ignore if + if (curr.mtime.getTime() === prev.mtime.getTime()) return; + watchList[path].forEach(function (file) { + tryRender(file, rootPath); + }); + } + ); } /** * Convert error to string */ function errorToString(e) { - return e.stack || /* istanbul ignore next */ (e.message || e); + return e.stack || /* istanbul ignore next */ e.message || e; } /** @@ -234,7 +274,7 @@ function tryRender(path, rootPath) { renderFile(path, rootPath); } catch (e) { // keep watching when error occured. - console.error(errorToString(e) + '\x07'); + console.error(errorToString(e) + "\x07"); } } @@ -243,19 +283,23 @@ function tryRender(path, rootPath) { */ function stdin() { - var buf = ''; - process.stdin.setEncoding('utf8'); - process.stdin.on('data', function(chunk){ buf += chunk; }); - process.stdin.on('end', function(){ - var output; - if (options.client) { - output = pug.compileClient(buf, options); - } else { - var fn = pug.compile(buf, options); - var output = fn(options); - } - process.stdout.write(output); - }).resume(); + var buf = ""; + process.stdin.setEncoding("utf8"); + process.stdin.on("data", function (chunk) { + buf += chunk; + }); + process.stdin + .on("end", function () { + var output; + if (pugOptions.client) { + output = pug.compileClient(buf, pugOptions); + } else { + var fn = pug.compile(buf, pugOptions); + var output = fn(pugOptions); + } + process.stdout.write(output); + }) + .resume(); } /** @@ -274,25 +318,25 @@ function renderFile(path, rootPath) { // Found pug file if (stat.isFile() && isPug.test(path) && !isIgnored.test(path)) { // Try to watch the file if needed. watchFile takes care of duplicates. - if (args.watch) watchFile(path, null, rootPath); - if (args.nameAfterFile) { - options.name = getNameFromFileName(path); + if (cmdOptions.watch) watchFile(path, null, rootPath); + if (cmdOptions.nameAfterFile) { + pugOptions.name = getNameFromFileName(path); } - + let page = matter.read(path); - options.filename = page.path; - if(page.data.layout){ - page.extended = `extends ${options.includes}/${page.data.layout} -${page.content}`; + pugOptions.filename = page.path; + if (page.data.layout) { + page.extended = `extends ${pugOptions.includes}/${page.data.layout} + ${page.content}`; } else { page.extended = page.content; } - options.page = page.data; + pugOptions.page = page.data; - var fn = options.client - ? pug.compileClient(page.extended, options) - : pug.compile(page.extended, options); - if (program.watch && fn.dependencies) { + var fn = pugOptions.client + ? pug.compileClient(page.extended, pugOptions) + : pug.compile(page.extended, pugOptions); + if (cmdOptions.watch && fn.dependencies) { // watch dependencies, and recompile the base fn.dependencies.forEach(function (dep) { watchFile(dep, path, rootPath); @@ -301,14 +345,14 @@ ${page.content}`; // --extension var extname; - if (args.extension) extname = '.' + args.extension; - else if (options.client) extname = '.js'; - else if (args.extension === '') extname = ''; - else extname = '.html'; + if (cmdOptions.extension) extname = "." + cmdOptions.extension; + else if (pugOptions.client) extname = ".js"; + else if (cmdOptions.extension === "") extname = ""; + else extname = ".html"; // path: foo.pug -> foo. path = path.replace(isPug, extname); - if (args.out) { + if (cmdOptions.out) { // prepend output directory if (rootPath) { // replace the rootPath of the resolved path with output directory @@ -317,21 +361,26 @@ ${page.content}`; // if no rootPath handling is needed path = basename(path); } - path = resolve(args.out, path); + path = resolve(cmdOptions.out, path); } var dir = resolve(dirname(path)); mkdirp.sync(dir); - var output = options.client ? fn : fn(options); + var output = pugOptions.client ? fn : fn(pugOptions); fs.writeFileSync(path, output); - consoleLog(' ' + chalk.gray('rendered') + ' ' + chalk.cyan('%s'), normalize(path)); - // Found directory + consoleLog( + " " + chalk.gray("rendered") + " " + chalk.cyan("%s"), + normalize(path) + ); + // Found directory } else if (stat.isDirectory()) { var files = fs.readdirSync(path); - files.map(function(filename) { - return path + '/' + filename; - }).forEach(function (file) { - render(file, rootPath || path); - }); + files + .map(function (filename) { + return path + "/" + filename; + }) + .forEach(function (file) { + render(file, rootPath || path); + }); } } @@ -342,8 +391,10 @@ ${page.content}`; * @returns {String} */ function getNameFromFileName(filename) { - var file = basename(filename).replace(/\.(?:pug|jade)$/, ''); - return file.toLowerCase().replace(/[^a-z0-9]+([a-z])/g, function (_, character) { - return character.toUpperCase(); - }) + 'Template'; + var file = basename(filename).replace(/\.(?:pug|jade)$/, ""); + return ( + file.toLowerCase().replace(/[^a-z0-9]+([a-z])/g, function (_, character) { + return character.toUpperCase(); + }) + "Template" + ); } diff --git a/package.json b/package.json index 1a95a6d..2f9661e 100644 --- a/package.json +++ b/package.json @@ -9,14 +9,19 @@ "pug3": "./index.js" }, "preferGlobal": true, - "keywords": ["pug", "pug-cli", "html", "cli"], + "keywords": [ + "pug", + "pug-cli", + "html", + "cli" + ], "dependencies": { "chalk": "^4.1.1", "commander": "^7.2.0", "gray-matter": "^4.0.2", "js-yaml": "^4.1.0", - "mkdirp": "^1.0.4" - "pug": "^3.0.2", + "mkdirp": "^1.0.4", + "pug": "^3.0.2" }, "devDependencies": { "istanbul": "*", diff --git a/test/index.js b/test/index.js index 2de7807..f45fa33 100644 --- a/test/index.js +++ b/test/index.js @@ -1,48 +1,45 @@ -'use strict'; +"use strict"; +console.log("RUNNING MY TESTS"); -var fs = require('fs'); -var path = require('path'); -var assert = require('assert'); -var cp = require('child_process'); -var mkdirp = require('mkdirp'); -var rimraf = require('rimraf'); +const fs = require("fs"); +const { join } = require("path"); +const assert = require("assert"); +const cp = require("child_process"); +const mkdirp = require("mkdirp"); +const rimraf = require("rimraf"); // Sets directory to output coverage data to // Incremented every time getRunner() is called. -var covCount = 1; -var isIstanbul = process.env.running_under_istanbul; +let covCount = 1; +const isIstanbul = process.env.running_under_istanbul; -/* - * I/O utilities for temporary directory. - */ -function j(paths) { - return path.join.apply(path, paths); -} - -function t(paths) { +//---------------------------------------------------// +// I/O utilities for temporary directory. +// +function temp(paths) { paths = Array.isArray(paths) ? paths : [paths]; - var args = [__dirname, 'temp'].concat(paths); - return j(args); + const args = [__dirname, "temp"].concat(paths); + return join(...args); } -function r(paths) { - return fs.readFileSync(t(paths), 'utf8'); +function read(paths) { + return fs.readFileSync(temp(paths), "utf8"); } -function rs(paths) { - return fs.createReadStream(t(paths)); +function getReadStream(paths) { + return fs.createReadStream(temp(paths)); } -function w(paths, content) { - return fs.writeFileSync(t(paths), content); +function write(paths, content) { + return fs.writeFileSync(temp(paths), content); } -function a(paths, content) { - return fs.appendFileSync(t(paths), content); +function append(paths, content) { + return fs.appendFileSync(temp(paths), content); } -function u(paths) { - return fs.unlinkSync(t(paths)); +function unlink(paths) { + return fs.unlinkSync(temp(paths)); } /** @@ -52,18 +49,26 @@ function u(paths) { * (cov-pt/). */ function getRunner() { - var pugExe = j([__dirname, '..', 'index.js']); + const pugExe = join(__dirname, "..", "index.js"); if (!isIstanbul) return [process.argv[0], [pugExe]]; else { - return [ 'istanbul', - [ 'cover', - '--print', 'none', - '--report', 'none', - '--root', process.cwd(), - '--dir', process.cwd() + '/cov-pt' + (covCount++), - pugExe, - '--' ] ]; + return [ + "istanbul", + [ + "cover", + "--print", + "none", + "--report", + "none", + "--root", + process.cwd(), + "--dir", + process.cwd() + "/cov-pt" + covCount++, + pugExe, + "--", + ], + ]; } } @@ -77,12 +82,17 @@ function getRunner() { function run(args, stdin, callback) { if (arguments.length === 2) { callback = stdin; - stdin = null; + stdin = null; } - var runner = getRunner(); - var proc = cp.execFile(runner[0], runner[1].concat(args), { - cwd: t([]) - }, callback); + const runner = getRunner(); + const proc = cp.execFile( + runner[0], + runner[1].concat(args), + { + cwd: temp([]), + }, + callback + ); if (stdin) stdin.pipe(proc.stdin); } @@ -102,283 +112,360 @@ function timing(testCase) { /* * Make temporary directories */ -rimraf.sync(t([])); -mkdirp.sync(t(['_omittedDir'])); -mkdirp.sync(t(['depwatch'])); -mkdirp.sync(t(['inputs', 'level-1-1'])); -mkdirp.sync(t(['inputs', 'level-1-2'])); -mkdirp.sync(t(['outputs', 'level-1-1'])); -mkdirp.sync(t(['outputs', 'level-1-2'])); +rimraf.sync(temp([])); +mkdirp.sync(temp(["_omittedDir"])); +mkdirp.sync(temp(["dep-watch"])); +mkdirp.sync(temp(["inputs", "level-1-1"])); +mkdirp.sync(temp(["inputs", "level-1-2"])); +mkdirp.sync(temp(["outputs", "level-1-1"])); +mkdirp.sync(temp(["outputs", "level-1-2"])); /* * CLI utilities */ -describe('miscellanea', function () { +describe("miscellanea", function () { timing(this); - it('--version', function (done) { - run(['-V'], function (err, stdout) { + it("--version", function (done) { + run(["-V"], function (err, stdout) { if (err) done(err); - assert.equal(stdout.trim(), 'pug version: ' + require('pug/package.json').version + '\npug-cli version: ' + require('../package.json').version); - run(['--version'], function (err, stdout) { + assert.equal( + stdout.trim(), + "pug version: " + + require("pug/package.json").version + + "\npug-cli version: " + + require("../package.json").version + ); + run(["--version"], function (err, stdout) { if (err) done(err); - assert.equal(stdout.trim(), 'pug version: ' + require('pug/package.json').version + '\npug-cli version: ' + require('../package.json').version); - done() + assert.equal( + stdout.trim(), + "pug version: " + + require("pug/package.json").version + + "\npug-cli version: " + + require("../package.json").version + ); + done(); }); }); }); - it('--help', function (done) { + it("--help", function (done) { // only check that it doesn't crash - run(['-h'], function (err, stdout) { + run(["-h"], function (err, stdout) { if (err) done(err); - run(['--help'], function (err, stdout) { + run(["--help"], function (err, stdout) { if (err) done(err); - done() + done(); }); }); }); - it('Omits files starting with an underscore', function (done) { - w('_omitted.pug', '.foo bar'); - w('_omitted.html', '

output not written

'); + it("Omits files starting with an underscore", function (done) { + write("_omitted.pug", ".foo bar"); + write("_omitted.html", "

output not written

"); - run(['_omitted.pug'], function (err) { + run(["_omitted.pug"], function (err) { if (err) return done(err); - var html = r('_omitted.html'); - assert(html === '

output not written

'); + const html = read("_omitted.html"); + assert(html === "

output not written

"); done(); }); }); - it('Omits directories starting with an underscore', function (done) { - w('_omittedDir/file.pug', '.foo bar'); - w('_omittedDir/file.html', '

output not written

'); + it("Omits directories starting with an underscore", function (done) { + write("_omittedDir/file.pug", ".foo bar"); + write("_omittedDir/file.html", "

output not written

"); - run(['--no-debug', '_omittedDir/file.pug'], function (err, stdout) { + run(["--no-debug", "_omittedDir/file.pug"], function (err, stdout) { if (err) return done(err); - var html = r('_omittedDir/file.html'); - assert.equal(html, '

output not written

'); + const html = read("_omittedDir/file.html"); + assert.equal(html, "

output not written

"); done(); }); }); }); -describe('HTML output', function () { +describe("HTML output", function () { timing(this); - it('works', function (done) { - w('input.pug', '.foo bar'); - w('input.html', '

output not written

'); + it("works", function (done) { + write("input.pug", ".foo bar"); + write("input.html", "

output not written

"); - run(['--no-debug', 'input.pug'], function (err) { + run(["--no-debug", "input.pug"], function (err) { if (err) return done(err); - var html = r('input.html'); + const html = read("input.html"); assert(html === '
bar
'); done(); }); }); - it('--extension', function (done) { - w('input.pug', '.foo bar'); - w('input.special-html', '

output not written

'); + it("--extension", function (done) { + write("input.pug", ".foo bar"); + write("input.special-html", "

output not written

"); - run(['--no-debug', '-E', 'special-html', 'input.pug'], function (err) { + run(["--no-debug", "-E", "special-html", "input.pug"], function (err) { if (err) return done(err); - var html = r('input.special-html'); + const html = read("input.special-html"); assert(html === '
bar
'); done(); }); }); - it('--basedir', function (done) { - w('input.pug', 'extends /dependency1.pug'); - w('input.html', '

output not written

'); - run(['--no-debug', '-b', j([__dirname, 'dependencies']), 'input.pug'], function (err, stdout) { - if (err) return done(err); - var html = r('input.html'); - assert.equal(html, ''); - done(); - }); - }); - context('--obj', function () { - it('JavaScript syntax works', function (done) { - w('input.pug', '.foo= loc'); - w('input.html', '

output not written

'); - run(['--no-debug', '--obj', "{'loc':'str'}", 'input.pug'], function (err) { + it("--basedir", function (done) { + write("input.pug", "extends /dependency1.pug"); + write("input.html", "

output not written

"); + run( + ["--no-debug", "-b", join(__dirname, "dependencies"), "input.pug"], + function (err, stdout) { if (err) return done(err); - var html = r('input.html'); - assert(html === '
str
'); + const html = read("input.html"); + assert.equal(html, ""); done(); - }); - }); - it('JSON syntax accept UTF newlines', function (done) { - w('input.pug', '.foo= loc'); - w('input.html', '

output not written

'); - run(['--no-debug', '--obj', '{"loc":"st\u2028r"}', 'input.pug'], function (err) { - if (err) return done(err); - var html = r('input.html'); - assert.equal(html, '
st\u2028r
'); - done(); - }); - }); - it('JSON file', function (done) { - w('obj.json', '{"loc":"str"}'); - w('input.pug', '.foo= loc'); - w('input.html', '

output not written

'); - run(['--no-debug', '--obj', 'obj.json', 'input.pug'], function (err) { + } + ); + }); + context("--obj", function () { + it("JavaScript syntax works", function (done) { + write("input.pug", ".foo= loc"); + write("input.html", "

output not written

"); + run( + ["--no-debug", "--obj", "{'loc':'str'}", "input.pug"], + function (err) { + if (err) return done(err); + const html = read("input.html"); + assert(html === '
str
'); + done(); + } + ); + }); + it("JSON syntax accept UTF newlines", function (done) { + write("input.pug", ".foo= loc"); + write("input.html", "

output not written

"); + run( + ["--no-debug", "--obj", '{"loc":"st\u2028r"}', "input.pug"], + function (err) { + if (err) return done(err); + const html = read("input.html"); + assert.equal(html, '
st\u2028r
'); + done(); + } + ); + }); + + it("JSON file", function (done) { + write("obj.json", '{"loc":"str"}'); + write("input.pug", ".foo= loc"); + write("input.html", "

output not written

"); + run(["--no-debug", "--obj", "obj.json", "input.pug"], function (err) { if (err) return done(err); - var html = r('input.html'); + const html = read("input.html"); assert(html === '
str
'); done(); }); }); - it('JavaScript module', function (done) { - w('obj.js', 'module.exports = {loc: "str"};'); - w('input.pug', '.foo= loc'); - w('input.html', '

output not written

'); - run(['--no-debug', '--obj', 'obj.js', 'input.pug'], function (err) { + + it("JavaScript module", function (done) { + write("obj.js", 'module.exports = {loc: "str"};'); + write("input.pug", ".foo= loc"); + write("input.html", "

output not written

"); + + run(["--no-debug", "--obj", "obj.js", "input.pug"], function (err) { if (err) return done(err); - var html = r('input.html'); + const html = read("input.html"); assert(html === '
str
'); done(); }); }); }); - it('stdio', function (done) { - w('input.pug', '.foo bar'); - run(['--no-debug'], rs('input.pug'), function (err, stdout, stderr) { - if (err) return done(err); - assert(stdout === '
bar
'); - done(); - }); + + it("stdio", function (done) { + write("input.pug", ".foo bar"); + run( + ["--no-debug"], + getReadStream("input.pug"), + function (err, stdout, stderr) { + if (err) return done(err); + assert(stdout === '
bar
'); + done(); + } + ); }); - context('--out', function () { - it('works', function (done) { - w('input.pug', '.foo bar'); - w('input.html', '

output not written

'); - run(['--no-debug', '--out', 'outputs', 'input.pug'], function (err) { + context("--out", function () { + it("works", function (done) { + write("input.pug", ".foo bar"); + write("input.html", "

output not written

"); + run(["--no-debug", "--out", "outputs", "input.pug"], function (err) { if (err) return done(err); - var html = r(['outputs', 'input.html']); + const html = read(["outputs", "input.html"]); assert(html === '
bar
'); done(); }); }); - it('works when input is a directory', function (done) { - w(['inputs', 'input.pug'], '.foo bar 1'); - w(['inputs', 'level-1-1', 'input.pug'], '.foo bar 1-1'); - w(['inputs', 'level-1-2', 'input.pug'], '.foo bar 1-2'); - w(['outputs', 'input.html'], 'BIG FAT HEN 1'); - w(['outputs', 'level-1-1', 'input.html'], 'BIG FAT HEN 1-1'); - w(['outputs', 'level-1-2', 'input.html'], 'BIG FAT HEN 1-2'); - - run(['--no-debug', '--out', 'outputs', 'inputs'], function (err) { + it("works when input is a directory", function (done) { + write(["inputs", "input.pug"], ".foo bar 1"); + write(["inputs", "level-1-1", "input.pug"], ".foo bar 1-1"); + write(["inputs", "level-1-2", "input.pug"], ".foo bar 1-2"); + write(["outputs", "input.html"], "BIG FAT HEN 1"); + write(["outputs", "level-1-1", "input.html"], "BIG FAT HEN 1-1"); + write(["outputs", "level-1-2", "input.html"], "BIG FAT HEN 1-2"); + + run(["--no-debug", "--out", "outputs", "inputs"], function (err) { if (err) return done(err); - var html = r(['outputs', 'input.html']); + let html = read(["outputs", "input.html"]); assert(html === '
bar 1
'); - var html = r(['outputs', 'level-1-1', 'input.html']); + html = read(["outputs", "level-1-1", "input.html"]); assert(html === '
bar 1-1
'); - var html = r(['outputs', 'level-1-2', 'input.html']); + html = read(["outputs", "level-1-2", "input.html"]); assert(html === '
bar 1-2
'); done(); }); }); }); - it('--silent', function (done) { - w('input.pug', '.foo bar'); - w('input.html', '

output not written

'); - run(['--no-debug', '-s', 'input.pug'], function (err, stdout) { + it("--silent", function (done) { + write("input.pug", ".foo bar"); + write("input.html", "

output not written

"); + run(["--no-debug", "-s", "input.pug"], function (err, stdout) { if (err) return done(err); - var html = r('input.html'); + const html = read("input.html"); assert.equal(html, '
bar
'); - assert.equal(stdout, ''); + assert.equal(stdout, ""); - w('input.html', '

output not written

'); - run(['--no-debug', '--silent', 'input.pug'], function (err, stdout) { + write("input.html", "

output not written

"); + run(["--no-debug", "--silent", "input.pug"], function (err, stdout) { if (err) return done(err); - var html = r('input.html'); + const html = read("input.html"); assert.equal(html, '
bar
'); - assert.equal(stdout, ''); + assert.equal(stdout, ""); done(); }); }); }); }); -describe('client JavaScript output', function () { +describe("client JavaScript output", function () { timing(this); - it('works', function (done) { - w('input.pug', '.foo bar'); - w('input.js', 'throw new Error("output not written");'); - run(['--no-debug', '--client', 'input.pug'], function (err) { + it("works", function (done) { + write("input.pug", ".foo bar"); + write("input.js", 'throw new Error("output not written");'); + run(["--no-debug", "--client", "input.pug"], function (err) { if (err) return done(err); - var template = Function('', r('input.js') + ';return template;')(); + const template = Function("", read("input.js") + ";return template;")(); assert(template() === '
bar
'); done(); }); }); - it('--name', function (done) { - w('input.pug', '.foo bar'); - w('input.js', 'throw new Error("output not written");'); - run(['--no-debug', '--client', '--name', 'myTemplate', 'input.pug'], function (err) { - if (err) return done(err); - var template = Function('', r('input.js') + ';return myTemplate;')(); - assert(template() === '
bar
'); - done(); - }); + it("--name", function (done) { + write("input.pug", ".foo bar"); + write("input.js", 'throw new Error("output not written");'); + run( + ["--no-debug", "--client", "--name", "myTemplate", "input.pug"], + function (err) { + if (err) return done(err); + const template = Function( + "", + read("input.js") + ";return myTemplate;" + )(); + assert(template() === '
bar
'); + done(); + } + ); }); - it('--name --extension', function (done) { - w('input.pug', '.foo bar'); - w('input.special-js', 'throw new Error("output not written");'); - run(['--no-debug', '--client', '-E', 'special-js', 'input.pug'], function (err) { - if (err) return done(err); - var template = Function('', r('input.special-js') + ';return template;')(); - assert(template() === '
bar
'); - done(); - }); + it("--name --extension", function (done) { + write("input.pug", ".foo bar"); + write("input.special-js", 'throw new Error("output not written");'); + run( + ["--no-debug", "--client", "-E", "special-js", "input.pug"], + function (err) { + if (err) return done(err); + const template = Function( + "", + read("input.special-js") + ";return template;" + )(); + assert(template() === '
bar
'); + done(); + } + ); }); - it('stdio', function (done) { - w('input.pug', '.foo bar'); - w('input.js', 'throw new Error("output not written");'); - run(['--no-debug', '--client'], rs('input.pug'), function (err, stdout) { - if (err) return done(err); - var template = Function('', stdout + ';return template;')(); - assert(template() === '
bar
'); - done(); - }); + it("stdio", function (done) { + write("input.pug", ".foo bar"); + write("input.js", 'throw new Error("output not written");'); + run( + ["--no-debug", "--client"], + getReadStream("input.pug"), + function (err, stdout) { + if (err) return done(err); + const template = Function("", stdout + ";return template;")(); + assert(template() === '
bar
'); + done(); + } + ); }); - it('--name-after-file', function (done) { - w('input-file.pug', '.foo bar'); - w('input-file.js', 'throw new Error("output not written");'); - run(['--no-debug', '--client', '--name-after-file', 'input-file.pug'], function (err, stdout, stderr) { - if (err) return done(err); - var template = Function('', r('input-file.js') + ';return inputFileTemplate;')(); - assert(template() === '
bar
'); - return done(); - }); + it("--name-after-file", function (done) { + write("input-file.pug", ".foo bar"); + write("input-file.js", 'throw new Error("output not written");'); + run( + ["--no-debug", "--client", "--name-after-file", "input-file.pug"], + function (err, stdout, stderr) { + if (err) return done(err); + const template = Function( + "", + read("input-file.js") + ";return inputFileTemplate;" + )(); + assert(template() === '
bar
'); + return done(); + } + ); }); - it('--name-after-file ·InPuTwIthWEiRdNaMME.pug', function (done) { - w('·InPuTwIthWEiRdNaMME.pug', '.foo bar'); - w('·InPuTwIthWEiRdNaMME.js', 'throw new Error("output not written");'); - run(['--no-debug', '--client', '--name-after-file', '·InPuTwIthWEiRdNaMME.pug'], function (err, stdout, stderr) { - if (err) return done(err); - var template = Function('', r('·InPuTwIthWEiRdNaMME.js') + ';return InputwithweirdnammeTemplate;')(); - assert(template() === '
bar
'); - return done(); - }); + it("--name-after-file ·InPuTwIthWEiRdNaMME.pug", function (done) { + write("·InPuTwIthWEiRdNaMME.pug", ".foo bar"); + write("·InPuTwIthWEiRdNaMME.js", 'throw new Error("output not written");'); + run( + [ + "--no-debug", + "--client", + "--name-after-file", + "·InPuTwIthWEiRdNaMME.pug", + ], + function (err, stdout, stderr) { + if (err) return done(err); + const template = Function( + "", + read("·InPuTwIthWEiRdNaMME.js") + + ";return InputwithweirdnammeTemplate;" + )(); + assert(template() === '
bar
'); + return done(); + } + ); }); }); -describe('--watch', function () { - var watchProc; - var stdout = ''; +describe("--watch", function () { + let watchProc; + let stdout = ""; function cleanup() { - stdout = ''; + stdout = ""; if (!watchProc) return; - watchProc.stderr.removeAllListeners('data'); - watchProc.stdout.removeAllListeners('data'); - watchProc.removeAllListeners('error'); - watchProc.removeAllListeners('close'); + watchProc.stderr.removeAllListeners("data"); + watchProc.stdout.removeAllListeners("data"); + watchProc.removeAllListeners("error"); + watchProc.removeAllListeners("close"); } + before(function () { + const cmd = getRunner(); + cmd[1].push( + // "--no-debug", + "--client", + "--name-after-file", + "--watch", + "input-file.pug" + ); + watchProc = cp.spawn(cmd[0], cmd[1], { + cwd: temp([]), + }); + }); + after(function () { cleanup(); - watchProc.kill('SIGINT'); + watchProc.kill("SIGINT"); watchProc = null; }); @@ -389,141 +476,151 @@ describe('--watch', function () { setTimeout(done, 1000); }); - it('pass 1: initial compilation', function (done) { + it("pass 1: initial compilation", function (done) { timing(this); - w('input-file.pug', '.foo bar'); - w('input-file.js', 'throw new Error("output not written (pass 1)");'); - var cmd = getRunner(); - cmd[1].push('--no-debug', '--client', '--name-after-file', '--watch', 'input-file.pug'); - watchProc = cp.spawn(cmd[0], cmd[1], { - cwd: t([]) - }); + write("input-file.pug", ".foo bar"); + write("input-file.js", 'throw new Error("output not written (pass 1)");'); - watchProc.stdout.setEncoding('utf8'); - watchProc.stderr.setEncoding('utf8'); - watchProc.on('error', done); - watchProc.stdout.on('data', function(buf) { + watchProc.stdout.setEncoding("utf8"); + watchProc.stderr.setEncoding("utf8"); + watchProc.on("error", done); + watchProc.stdout.on("data", function (buf) { stdout += buf; + if (/rendered/.test(stdout)) { cleanup(); - var template = Function('', r('input-file.js') + ';return inputFileTemplate;')(); + const template = Function( + "", + read("input-file.js") + ";return inputFileTemplate;" + )(); assert(template() === '
bar
'); return done(); } }); }); - it('pass 2: change the file', function (done) { - w('input-file.js', 'throw new Error("output not written (pass 2)");'); - watchProc.on('error', done); - watchProc.stdout.on('data', function(buf) { + it("pass 2: change the file", function (done) { + write("input-file.js", 'throw new Error("output not written (pass 2)");'); + + watchProc.on("error", done); + watchProc.stdout.on("data", function (buf) { stdout += buf; + if (/rendered/.test(stdout)) { cleanup(); - var template = Function('', r('input-file.js') + ';return inputFileTemplate;')(); + const template = Function( + "", + read("input-file.js") + ";return inputFileTemplate;" + )(); assert(template() === '
baz
'); return done(); } }); - w('input-file.pug', '.foo baz'); + write("input-file.pug", ".foo baz"); }); - it('pass 3: remove the file then add it back', function (done) { - w('input-file.js', 'throw new Error("output not written (pass 3)");'); - watchProc.on('error', done) - watchProc.stdout.on('data', function(buf) { + it("pass 3: remove the file then add it back", function (done) { + write("input-file.js", 'throw new Error("output not written (pass 3)");'); + + watchProc.on("error", done); + watchProc.stdout.on("data", function (buf) { stdout += buf; if (/rendered/.test(stdout)) { cleanup(); - var template = Function('', r('input-file.js') + ';return inputFileTemplate;')(); + const template = Function( + "", + read("input-file.js") + ";return inputFileTemplate;" + )(); assert(template() === '
bat
'); return done(); } }); - u('input-file.pug'); + unlink("input-file.pug"); setTimeout(function () { - w('input-file.pug', '.foo bat'); + write("input-file.pug", ".foo bat"); }, 250); }); - it('pass 4: intentional errors in the pug file', function (done) { - var stderr = ''; - var errored = false; - watchProc.on('error', done); - watchProc.on('close', function() { + it("pass 4: intentional errors in the pug file", function (done) { + let stderr = ""; + let errored = false; + + watchProc.on("error", done); + watchProc.on("close", function () { errored = true; - return done(new Error('Pug should not terminate in watch mode')); + return done(new Error("Pug should not terminate in watch mode")); }); - watchProc.stdout.on('data', function(buf) { + watchProc.stdout.on("data", function (buf) { stdout += buf; if (/rendered/.test(stdout)) { - stdout = ''; - return done(new Error('Pug compiles an erroneous file w/o error')); + stdout = ""; + return done(new Error("Pug compiles an erroneous file w/o error")); } }); - watchProc.stderr.on('data', function(buf) { + watchProc.stderr.on("data", function (buf) { stderr += buf; if (!/Invalid indentation/.test(stderr)) return; - stderr = ''; - var template = Function('', r('input-file.js') + ';return inputFileTemplate;')(); + stderr = ""; + const template = Function( + "", + read("input-file.js") + ";return inputFileTemplate;" + )(); assert(template() === '
bat
'); - watchProc.stderr.removeAllListeners('data'); - watchProc.stdout.removeAllListeners('data'); - watchProc.removeAllListeners('error'); - watchProc.removeAllListeners('exit'); + watchProc.stderr.removeAllListeners("data"); + watchProc.stdout.removeAllListeners("data"); + watchProc.removeAllListeners("error"); + watchProc.removeAllListeners("exit"); // The stderr event will always fire sooner than the close event. // Wait for it. - setTimeout(function() { + setTimeout(function () { if (!errored) done(); }, 100); }); - w('input-file.pug', [ - 'div', - ' div', - '\tarticle' - ].join('\n')); + write("input-file.pug", ["div", " div", "\tarticle"].join("\n")); }); }); -describe('--watch with dependencies', function () { - var watchProc; - var stdout = ''; +describe("--watch with dependencies", function () { + let watchProc; + let stdout = ""; before(function () { function copy(file) { - w(['depwatch', file], - fs.readFileSync(j([__dirname, 'dependencies', file]))); + write( + ["dep-watch", file], + fs.readFileSync(join(__dirname, "dependencies", file)) + ); } - copy('include2.pug'); - copy('dependency2.pug'); - copy('dependency3.pug'); + copy("include2.pug"); + copy("dependency2.pug"); + copy("dependency3.pug"); }); function cleanup() { - stdout = ''; + stdout = ""; if (!watchProc) return; - watchProc.stderr.removeAllListeners('data'); - watchProc.stdout.removeAllListeners('data'); - watchProc.removeAllListeners('error'); - watchProc.removeAllListeners('close'); + watchProc.stderr.removeAllListeners("data"); + watchProc.stdout.removeAllListeners("data"); + watchProc.removeAllListeners("error"); + watchProc.removeAllListeners("close"); } after(function () { cleanup(); - watchProc.kill('SIGINT'); + watchProc.kill("SIGINT"); watchProc = null; }); @@ -534,101 +631,138 @@ describe('--watch with dependencies', function () { setTimeout(done, 1000); }); - it('pass 1: initial compilation', function (done) { + it("pass 1: initial compilation", function (done) { timing(this); - w(['depwatch', 'include2.html'], 'output not written (pass 1)'); - w(['depwatch', 'dependency2.html'], 'output not written (pass 1)'); + write( + ["dep-watch", "include2.html"], + "output not written to include2.html (pass 1)" + ); + write( + ["dep-watch", "dependency2.html"], + "output not written to dependency2.html (pass 1)" + ); var cmd = getRunner(); - cmd[1].push('--watch', 'include2.pug', 'dependency2.pug'); - watchProc = cp.spawn(cmd[0], cmd[1], { - cwd: t('depwatch') + cmd[1].push("--watch", "include2.pug", "dependency2.pug"); + watchProc = cp.spawn(cmd[0], cmd[1], { + cwd: temp("dep-watch"), }); - watchProc.stdout.setEncoding('utf8'); - watchProc.stderr.setEncoding('utf8'); - watchProc.on('error', done); - watchProc.stdout.on('data', function(buf) { + watchProc.stdout.setEncoding("utf8"); + watchProc.stderr.setEncoding("utf8"); + + watchProc.on("error", done); + + watchProc.stdout.on("data", function (buf) { stdout += buf; + if ((stdout.match(/rendered/g) || []).length === 2) { cleanup(); - var output = r(['depwatch', 'include2.html']); - assert.equal(output.trim(), 'dependency3'); - output = r(['depwatch', 'dependency2.html']); - assert.equal(output.trim(), 'dependency3'); + let output = ""; + + output = read(["dep-watch", "dependency2.html"]); + assert.equal(output.trim(), "dependency3"); + + output = read(["dep-watch", "include2.html"]); + assert.equal(output.trim(), "dependency3"); return done(); } }); }); - it('pass 2: change a dependency', function (done) { + + it("pass 2: change a dependency", function (done) { timing(this); - w(['depwatch', 'include2.html'], 'output not written (pass 2)'); - w(['depwatch', 'dependency2.html'], 'output not written (pass 2)'); + write( + ["dep-watch", "include2.html"], + "output not written to include2.html (pass 2)" + ); + write( + ["dep-watch", "dependency2.html"], + "output not written to dependency2.html (pass 2)" + ); - watchProc.on('error', done); - watchProc.stdout.on('data', function(buf) { + watchProc.on("error", done); + + watchProc.stdout.on("data", function (buf) { stdout += buf; + if ((stdout.match(/rendered/g) || []).length === 2) { cleanup(); - var output = r(['depwatch', 'include2.html']); - assert.equal(output.trim(), 'dependency3

Hey

'); - output = r(['depwatch', 'dependency2.html']); - assert.equal(output.trim(), 'dependency3

Hey

'); + let output = ""; + + output = read(["dep-watch", "dependency2.html"]); + assert.equal(output.trim(), "dependency3

Hey

"); + + output = read(["dep-watch", "include2.html"]); + assert.equal(output.trim(), "dependency3

Hey

"); return done(); } }); - a(['depwatch', 'dependency2.pug'], '\np Hey\n'); + append(["dep-watch", "dependency2.pug"], "\np Hey\n"); }); - it('pass 3: change a deeper dependency', function (done) { + + it("pass 3: change a deeper dependency", function (done) { timing(this); - w(['depwatch', 'include2.html'], 'output not written (pass 3)'); - w(['depwatch', 'dependency2.html'], 'output not written (pass 3)'); + write(["dep-watch", "include2.html"], "output not written (pass 3)"); + write(["dep-watch", "dependency2.html"], "output not written (pass 3)"); - watchProc.on('error', done) - watchProc.stdout.on('data', function(buf) { + watchProc.on("error", done); + watchProc.stdout.on("data", function (buf) { stdout += buf; + if ((stdout.match(/rendered/g) || []).length === 2) { cleanup(); - var output = r(['depwatch', 'include2.html']); - assert.equal(output.trim(), 'dependency3

Foo

Hey

'); - output = r(['depwatch', 'dependency2.html']); - assert.equal(output.trim(), 'dependency3

Foo

Hey

'); + let output = read(["dep-watch", "include2.html"]); + assert.equal( + output.trim(), + "dependency3

Foo

Hey

" + ); + output = read(["dep-watch", "dependency2.html"]); + assert.equal( + output.trim(), + "dependency3

Foo

Hey

" + ); return done(); } }); - a(['depwatch', 'dependency3.pug'], '\np Foo\n'); + append(["dep-watch", "dependency3.pug"], "\np Foo\n"); }); - it('pass 4: change main file', function (done) { + + it("pass 4: change main file", function (done) { timing(this); - w(['depwatch', 'include2.html'], 'output not written (pass 4)'); - w(['depwatch', 'dependency2.html'], 'output not written (pass 4)'); + write(["dep-watch", "include2.html"], "output not written (pass 4)"); + write(["dep-watch", "dependency2.html"], "output not written (pass 4)"); + + watchProc.on("error", done); - watchProc.on('error', done); - watchProc.stdout.on('data', function(buf) { + watchProc.stdout.on("data", function (buf) { stdout += buf; if ((stdout.match(/rendered/g) || []).length === 1) { cleanup(); - var output = r(['depwatch', 'include2.html']); - assert.equal(output.trim(), 'dependency3

Foo

Hey

Baz

'); - output = r(['depwatch', 'dependency2.html']); - assert.equal(output.trim(), 'output not written (pass 4)'); + let output = read(["dep-watch", "include2.html"]); + assert.equal( + output.trim(), + "dependency3

Foo

Hey

Baz

" + ); + output = read(["dep-watch", "dependency2.html"]); + assert.equal(output.trim(), "output not written (pass 4)"); return done(); } }); - a(['depwatch', 'include2.pug'], '\np Baz\n'); + append(["dep-watch", "include2.pug"], "\np Baz\n"); }); }); From 931f446a65a222c25a83e7a0d7b1a4996eb1175f Mon Sep 17 00:00:00 2001 From: "Dmitry M. Lazutkin" Date: Wed, 26 Feb 2020 14:37:32 +0300 Subject: [PATCH 22/25] Allow symlink as input (Closes #80) Previous implementation used 'lstatSync' which returns stat info about link itself, not the file that it refers to. That behaviour didn't allow to use the tool in case of separate build (source and build dirs are separate, and sources linked back into build directory). As workaround there we could provide file content through stdin, but that approach has limitations: - you cannot process multiple files at once - you cannot use 'include' directives This commit changes the use of 'lstatSync' to 'statSync' which makes symlink files be processed as expected. --- index.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/index.js b/index.js index b386d16..7e24e56 100755 --- a/index.js +++ b/index.js @@ -314,7 +314,7 @@ function renderFile(path, rootPath) { var isPug = /\.(?:pug|jade)$/; var isIgnored = /([\/\\]_)|(^_)/; - var stat = fs.lstatSync(path); + var stat = fs.statSync(path); // Found pug file if (stat.isFile() && isPug.test(path) && !isIgnored.test(path)) { // Try to watch the file if needed. watchFile takes care of duplicates. From 04ad6212eae333965757405631d9be743ebde22c Mon Sep 17 00:00:00 2001 From: Saulo Vallory Date: Sun, 23 Apr 2023 19:38:37 -0300 Subject: [PATCH 23/25] Update package name and info --- README.md | 32 ++++++++++++++++++++++---------- index.js | 2 +- man/{pug3.1 => pug3.0.2} | 8 ++++---- package.json | 18 ++++++++++-------- test/index.js | 5 ++--- 5 files changed, 39 insertions(+), 26 deletions(-) rename man/{pug3.1 => pug3.0.2} (86%) diff --git a/README.md b/README.md index 99ff9ec..9520733 100644 --- a/README.md +++ b/README.md @@ -1,14 +1,10 @@ -# @anduh/pug-cli +# @tokilabs/pug3-cli -PUG 3 CLI interface +Pug 3 CLI with many fixes and improvements -[![Dependency Status](https://img.shields.io/david/anduh/pug-cli.svg)](https://david-dm.org/anduh/pug-cli) -[![NPM version](https://img.shields.io/npm/v/@anduh/pug-cli.svg)](https://www.npmjs.org/package/@anduh/pug-cli) -[![Coverage Status](https://img.shields.io/codecov/c/github/anduh/pug-cli.svg)](https://codecov.io/gh/anduh/pug-cli) +[![NPM version](https://img.shields.io/npm/v/@tokilabs/pug3-cli.svg)](https://www.npmjs.org/package/@tokilabs/pug3-cli) -**@anduh/pug-cli** is a CLI for rendering [PUG](https://pugjs.org/), updated to PUG 3. It's a fork of the original [pug-cli](https://www.npmjs.com/package/pug-cli), which still uses PUG 2. - -**warning:** this is my first try at publishing an npm package, so this might not work. +**@tokilabs/pug-cli** is a CLI for running [Pug](https://pugjs.org/), updated to Pug 3.0.2. It's a fork of the original [pug-cli](https://www.npmjs.com/package/pug-cli), which still uses PUG 2. ## Usage @@ -91,11 +87,27 @@ $ pug3 -O options.yaml foo.pug ## Installation - npm install @anduh/pug-cli -g +### Global installation + + npm install -g @tokilabs/pug-cli + +Use --help to learn how to use it + + pug3 --help + +### Local installation + + yarn add -D install @tokilabs/pug-cli + +Run with yarn: + + yarn pug3 ... ## Original + The original project this was forked from: -* [github.com/pugjs/pug-cli](https://github.com/pugjs/pug-cli) + +- [github.com/pugjs/pug-cli](https://github.com/pugjs/pug-cli) ## License diff --git a/index.js b/index.js index 7e24e56..616c105 100755 --- a/index.js +++ b/index.js @@ -25,7 +25,7 @@ program "pug version: " + require("pug/package.json").version + "\n" + - "pug-cli version: " + + "@tokilabs/pug3-cli version: " + require("./package.json").version ) .usage("[options] [dir|file ...]") diff --git a/man/pug3.1 b/man/pug3.0.2 similarity index 86% rename from man/pug3.1 rename to man/pug3.0.2 index 067806e..2612ef6 100644 --- a/man/pug3.1 +++ b/man/pug3.0.2 @@ -1,11 +1,11 @@ -.\" Manpage for pug-cli. -.TH man 1 "13 June 2021" "1.0.0" "pug-cli man page" +.\" Manpage for pug3-cli. +.TH man 1 "23 April June 2023" "1.0.0" "pug3 man page" .SH NAME -@anduh/pug-cli \- PUG 3 CLI interface +@tokilabs/pug3-cli \- A cli for Pug 3.0.2 with many fixes and improvements .SH SYNOPSIS pug3 [OPTIONS] [DIR|FILE ...] .SH DESCRIPTION -@anduh/pug-cli is a CLI for rendering PUG, using PUG 3. It's a fork of the original "pug-cli", which still uses PUG 2. +@tokilabs/pug3-cli is a CLI for rendering PUG, using PUG 3. It's a fork of the original "pug-cli", which still uses PUG 2. .SH OPTIONS -h, --help output usage information -V, --version output the version number diff --git a/package.json b/package.json index 2f9661e..35b411b 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,11 @@ { - "name": "@anduh/pug-cli", - "version": "1.0.0-alpha8", - "description": "a PUG (3) CLI interface", + "name": "@tokilabs/pug3-cli", + "version": "3.0.0", + "description": "A cli for Pug 3.0.2 with many fixes and improvements", + "repository": { + "type": "git", + "url": "https://github.com/tokilabs/pug3-cli.git" + }, "directories": { "man": "man" }, @@ -11,7 +15,9 @@ "preferGlobal": true, "keywords": [ "pug", + "pug3", "pug-cli", + "pug3-cli", "html", "cli" ], @@ -33,11 +39,7 @@ "precoverage": "rimraf coverage && rimraf cov-pt*", "coverage": "istanbul cover --report none --dir cov-pt0 node_modules/mocha/bin/_mocha -- -R dot", "postcoverage": "istanbul report --include cov-pt\\*/coverage.json && rimraf cov-pt*", - "man": "man ./pug3.1" - }, - "repository": { - "type": "git", - "url": "https://github.com/Anduh/pug-cli.git" + "man": "man ./man/pug3.0.2" }, "license": "MIT" } diff --git a/test/index.js b/test/index.js index f45fa33..2d66431 100644 --- a/test/index.js +++ b/test/index.js @@ -1,5 +1,4 @@ "use strict"; -console.log("RUNNING MY TESTS"); const fs = require("fs"); const { join } = require("path"); @@ -132,7 +131,7 @@ describe("miscellanea", function () { stdout.trim(), "pug version: " + require("pug/package.json").version + - "\npug-cli version: " + + "\n@tokilabs/pug3-cli version: " + require("../package.json").version ); run(["--version"], function (err, stdout) { @@ -141,7 +140,7 @@ describe("miscellanea", function () { stdout.trim(), "pug version: " + require("pug/package.json").version + - "\npug-cli version: " + + "\n@tokilabs/pug3-cli version: " + require("../package.json").version ); done(); From 4e9dd8ee9da4bf5ce42a9ab54142cce71a24ec0e Mon Sep 17 00:00:00 2001 From: Saulo Vallory Date: Sun, 23 Apr 2023 19:45:39 -0300 Subject: [PATCH 24/25] Set package access to public --- package.json | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/package.json b/package.json index 35b411b..a0f2b12 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,10 @@ { "name": "@tokilabs/pug3-cli", "version": "3.0.0", + "publishConfig": { + "access": "public", + "registry": "https://registry.npmjs.org/" + }, "description": "A cli for Pug 3.0.2 with many fixes and improvements", "repository": { "type": "git", From 1d3a7b6bda77805d91dcd1ac39eff66f1f3a890b Mon Sep 17 00:00:00 2001 From: Saulo Vallory Date: Tue, 30 Jul 2024 13:27:47 -0300 Subject: [PATCH 25/25] Update package.json Co-authored-by: Andreas J. --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index a0f2b12..ab3ab60 100644 --- a/package.json +++ b/package.json @@ -31,7 +31,7 @@ "gray-matter": "^4.0.2", "js-yaml": "^4.1.0", "mkdirp": "^1.0.4", - "pug": "^3.0.2" + "pug": "^3.0.3" }, "devDependencies": { "istanbul": "*",