From f42430957c38a82d8e3fb1bd505efb50d9bc91cc Mon Sep 17 00:00:00 2001 From: Karolis Date: Sat, 9 Jan 2021 20:26:42 +0200 Subject: [PATCH] VueUI 2 Part 2 - Reporting tool (#10850) --- tools/vueui-report/.gitignore | 2 + tools/vueui-report/.prettierrc.js | 7 + tools/vueui-report/README.md | 19 + tools/vueui-report/config.js | 35 + tools/vueui-report/index.js | 48 + tools/vueui-report/package-lock.json | 1201 +++++++++++++++++ tools/vueui-report/package.json | 17 + tools/vueui-report/src/app.js | 38 + tools/vueui-report/src/processPromisify.js | 15 + tools/vueui-report/stages/00_null/index.js | 5 + .../vueui-report/stages/01_build/component.js | 31 + tools/vueui-report/stages/01_build/index.js | 7 + tools/vueui-report/stages/01_build/run.js | 24 + .../vueui-report/stages/02_lint/component.js | 21 + tools/vueui-report/stages/02_lint/index.js | 7 + tools/vueui-report/stages/02_lint/run.js | 16 + .../stages/03_puppeteer/component.js | 17 + .../vueui-report/stages/03_puppeteer/index.js | 7 + tools/vueui-report/stages/03_puppeteer/run.js | 92 ++ tools/vueui-report/stages/index.js | 5 + vueui/tests/ghost spawners.json | 559 ++++++++ vueui/tests/join meniu.json | 201 +++ vueui/tests/manifest.json | 165 +++ vueui/tests/vote.json | 25 + 24 files changed, 2564 insertions(+) create mode 100644 tools/vueui-report/.gitignore create mode 100644 tools/vueui-report/.prettierrc.js create mode 100644 tools/vueui-report/README.md create mode 100644 tools/vueui-report/config.js create mode 100644 tools/vueui-report/index.js create mode 100644 tools/vueui-report/package-lock.json create mode 100644 tools/vueui-report/package.json create mode 100644 tools/vueui-report/src/app.js create mode 100644 tools/vueui-report/src/processPromisify.js create mode 100644 tools/vueui-report/stages/00_null/index.js create mode 100644 tools/vueui-report/stages/01_build/component.js create mode 100644 tools/vueui-report/stages/01_build/index.js create mode 100644 tools/vueui-report/stages/01_build/run.js create mode 100644 tools/vueui-report/stages/02_lint/component.js create mode 100644 tools/vueui-report/stages/02_lint/index.js create mode 100644 tools/vueui-report/stages/02_lint/run.js create mode 100644 tools/vueui-report/stages/03_puppeteer/component.js create mode 100644 tools/vueui-report/stages/03_puppeteer/index.js create mode 100644 tools/vueui-report/stages/03_puppeteer/run.js create mode 100644 tools/vueui-report/stages/index.js create mode 100644 vueui/tests/ghost spawners.json create mode 100644 vueui/tests/join meniu.json create mode 100644 vueui/tests/manifest.json create mode 100644 vueui/tests/vote.json diff --git a/tools/vueui-report/.gitignore b/tools/vueui-report/.gitignore new file mode 100644 index 00000000000..523e72898cd --- /dev/null +++ b/tools/vueui-report/.gitignore @@ -0,0 +1,2 @@ +node_modules +report.htm \ No newline at end of file diff --git a/tools/vueui-report/.prettierrc.js b/tools/vueui-report/.prettierrc.js new file mode 100644 index 00000000000..1544422c90b --- /dev/null +++ b/tools/vueui-report/.prettierrc.js @@ -0,0 +1,7 @@ +module.exports = { + trailingComma: 'es5', + tabWidth: 2, + semi: false, + singleQuote: true, + printWidth: 120, +} \ No newline at end of file diff --git a/tools/vueui-report/README.md b/tools/vueui-report/README.md new file mode 100644 index 00000000000..af5226cc574 --- /dev/null +++ b/tools/vueui-report/README.md @@ -0,0 +1,19 @@ +# VueUI report generator +This program is used to make reports for VueUI. Reports include varius checks. +## How to add a check stage +Stages are sequential, they run one after each other. To add stage copy `00_null` stage and modify it's code. And finally add appropriate require to `stages/index.js`. +## How to use +1. Get Node.js 10.0.0 or newer. +0. Run `npm install` +0. Run `node .` +0. Wait for all stages to finish +0. Look at `report.htm` in same directory. +## How to add more UI tests to Puppeteer report? +Create a json file somewhere under `/vueui/tests` folder with containing following object +```JSON +{ + "size": [100, 100], + "data": ... +} +``` +`size` specifies width and height of UI while data determines root UI data to be used. It is same data that is shown in debug section of VueUI. \ No newline at end of file diff --git a/tools/vueui-report/config.js b/tools/vueui-report/config.js new file mode 100644 index 00000000000..c0bffa831d0 --- /dev/null +++ b/tools/vueui-report/config.js @@ -0,0 +1,35 @@ +module.exports = { + vueui: '../../vueui', + themes: ['vueui theme-nano dark-theme', 'vueui theme-nano-light', 'vueui theme-basic', 'vueui theme-basic-dark dark-theme'], + template: (theme, data) => ` + + + + + + + + + +
+ Javascript file has failed to load. Click here to force load resources +
+
+
+ + + + + ` +} diff --git a/tools/vueui-report/index.js b/tools/vueui-report/index.js new file mode 100644 index 00000000000..d180acaccbe --- /dev/null +++ b/tools/vueui-report/index.js @@ -0,0 +1,48 @@ +const { Signale } = require('signale') +const Vue = require('vue') +const fs = require('fs-extra') + +const stages = require('./stages') + + +// run +const mainLogger = new Signale({scope: 'main'}) +var states = {} +async function runStages () { + mainLogger.time('All Stages') + for (const [i, stage] of stages.entries()) { + const name = stage.name() + const subLogger = mainLogger.scope('stage', name) + mainLogger.time(name) + let result = await Promise.resolve(stage.run(subLogger)) + mainLogger.timeEnd(name) + states[i] = result + } + mainLogger.timeEnd('All Stages') +} + + +// Build HTML + +async function generateHTML() { + const app = new Vue(require('./src/app')(states, stages)) + const renderer = require('vue-server-renderer').createRenderer() + + await fs.outputFile('report.htm', await renderer.renderToString(app)) +} + + +async function main() { + await runStages() + await generateHTML() +} + +main() + + + + + + + + diff --git a/tools/vueui-report/package-lock.json b/tools/vueui-report/package-lock.json new file mode 100644 index 00000000000..bb0811d3fe3 --- /dev/null +++ b/tools/vueui-report/package-lock.json @@ -0,0 +1,1201 @@ +{ + "name": "vueui-report", + "version": "1.0.0", + "lockfileVersion": 1, + "requires": true, + "dependencies": { + "@types/node": { + "version": "14.14.14", + "resolved": "https://registry.npmjs.org/@types/node/-/node-14.14.14.tgz", + "integrity": "sha512-UHnOPWVWV1z+VV8k6L1HhG7UbGBgIdghqF3l9Ny9ApPghbjICXkUJSd/b9gOgQfjM1r+37cipdw/HJ3F6ICEnQ==", + "optional": true + }, + "@types/yauzl": { + "version": "2.9.1", + "resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.9.1.tgz", + "integrity": "sha512-A1b8SU4D10uoPjwb0lnHmmu8wZhR9d+9o2PKBQT2jU5YPTKsxac6M2qGAdY7VcL+dHHhARVUDmeg0rOrcd9EjA==", + "optional": true, + "requires": { + "@types/node": "*" + } + }, + "accepts": { + "version": "1.3.7", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", + "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==", + "requires": { + "mime-types": "~2.1.24", + "negotiator": "0.6.2" + } + }, + "agent-base": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-5.1.1.tgz", + "integrity": "sha512-TMeqbNl2fMW0nMjTEPOwe3J/PRFP4vqeoNuQMG0HlMrtm5QxKqdvAkZ1pRBQ/ulIyDD5Yq0nJ7YbdD8ey0TO3g==" + }, + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" + }, + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "requires": { + "color-convert": "^1.9.0" + } + }, + "ansi-to-html": { + "version": "0.6.14", + "resolved": "https://registry.npmjs.org/ansi-to-html/-/ansi-to-html-0.6.14.tgz", + "integrity": "sha512-7ZslfB1+EnFSDO5Ju+ue5Y6It19DRnZXWv8jrGHgIlPna5Mh4jz7BV5jCbQneXNFurQcKoolaaAjHtgSBfOIuA==", + "requires": { + "entities": "^1.1.2" + } + }, + "array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=" + }, + "at-least-node": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", + "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==" + }, + "balanced-match": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" + }, + "base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==" + }, + "bl": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/bl/-/bl-4.0.3.tgz", + "integrity": "sha512-fs4G6/Hu4/EE+F75J8DuN/0IpQqNjAdC7aEQv7Qt8MHGUH7Ckv2MwTEEeN9QehD0pfIDkMI1bkHYkKy7xHyKIg==", + "requires": { + "buffer": "^5.5.0", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" + }, + "dependencies": { + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + } + } + }, + "body-parser": { + "version": "1.19.0", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz", + "integrity": "sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==", + "requires": { + "bytes": "3.1.0", + "content-type": "~1.0.4", + "debug": "2.6.9", + "depd": "~1.1.2", + "http-errors": "1.7.2", + "iconv-lite": "0.4.24", + "on-finished": "~2.3.0", + "qs": "6.7.0", + "raw-body": "2.4.0", + "type-is": "~1.6.17" + } + }, + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "requires": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, + "buffer-crc32": { + "version": "0.2.13", + "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", + "integrity": "sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI=" + }, + "bytes": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", + "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==" + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "chownr": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", + "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==" + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" + }, + "content-disposition": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz", + "integrity": "sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==", + "requires": { + "safe-buffer": "5.1.2" + }, + "dependencies": { + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + } + } + }, + "content-type": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", + "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==" + }, + "cookie": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz", + "integrity": "sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg==" + }, + "cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=" + }, + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + }, + "depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=" + }, + "destroy": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", + "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=" + }, + "devtools-protocol": { + "version": "0.0.818844", + "resolved": "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.818844.tgz", + "integrity": "sha512-AD1hi7iVJ8OD0aMLQU5VK0XH9LDlA1+BcPIgrAxPfaibx2DbWucuyOhc4oyQCbnvDDO68nN6/LcKfqTP343Jjg==" + }, + "ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" + }, + "encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=" + }, + "end-of-stream": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "requires": { + "once": "^1.4.0" + } + }, + "entities": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz", + "integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==" + }, + "error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "requires": { + "is-arrayish": "^0.2.1" + } + }, + "escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=" + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" + }, + "etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=" + }, + "express": { + "version": "4.17.1", + "resolved": "https://registry.npmjs.org/express/-/express-4.17.1.tgz", + "integrity": "sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g==", + "requires": { + "accepts": "~1.3.7", + "array-flatten": "1.1.1", + "body-parser": "1.19.0", + "content-disposition": "0.5.3", + "content-type": "~1.0.4", + "cookie": "0.4.0", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "~1.1.2", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "~1.1.2", + "fresh": "0.5.2", + "merge-descriptors": "1.0.1", + "methods": "~1.1.2", + "on-finished": "~2.3.0", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.7", + "proxy-addr": "~2.0.5", + "qs": "6.7.0", + "range-parser": "~1.2.1", + "safe-buffer": "5.1.2", + "send": "0.17.1", + "serve-static": "1.14.1", + "setprototypeof": "1.1.1", + "statuses": "~1.5.0", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + }, + "dependencies": { + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + } + } + }, + "extract-zip": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz", + "integrity": "sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==", + "requires": { + "@types/yauzl": "^2.9.1", + "debug": "^4.1.1", + "get-stream": "^5.1.0", + "yauzl": "^2.10.0" + }, + "dependencies": { + "debug": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", + "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", + "requires": { + "ms": "2.1.2" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + } + } + }, + "fd-slicer": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", + "integrity": "sha1-JcfInLH5B3+IkbvmHY85Dq4lbx4=", + "requires": { + "pend": "~1.2.0" + } + }, + "figures": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz", + "integrity": "sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=", + "requires": { + "escape-string-regexp": "^1.0.5" + } + }, + "finalhandler": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", + "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", + "requires": { + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "~2.3.0", + "parseurl": "~1.3.3", + "statuses": "~1.5.0", + "unpipe": "~1.0.0" + } + }, + "find-up": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", + "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", + "requires": { + "locate-path": "^2.0.0" + } + }, + "forwarded": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz", + "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=" + }, + "fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=" + }, + "fs-constants": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", + "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==" + }, + "fs-extra": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.0.1.tgz", + "integrity": "sha512-h2iAoN838FqAFJY2/qVpzFXy+EBxfVE220PalAqQLDVsFOHLJrZvut5puAbCdNv6WJk+B8ihI+k0c7JK5erwqQ==", + "requires": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^1.0.0" + } + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" + }, + "function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" + }, + "get-stream": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "requires": { + "pump": "^3.0.0" + } + }, + "glob": { + "version": "7.1.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", + "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "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" + } + }, + "graceful-fs": { + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz", + "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==" + }, + "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-ansi": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", + "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" + }, + "hash-sum": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/hash-sum/-/hash-sum-1.0.2.tgz", + "integrity": "sha1-M7QHd3VMZDJXPBIMw4CLvRDUfwQ=" + }, + "he": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==" + }, + "http-errors": { + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz", + "integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==", + "requires": { + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.1", + "statuses": ">= 1.5.0 < 2", + "toidentifier": "1.0.0" + } + }, + "https-proxy-agent": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-4.0.0.tgz", + "integrity": "sha512-zoDhWrkR3of1l9QAL8/scJZyLu8j/gBkcwcaQOZh7Gyh/+uJQzGVETdgT30akuwkpL8HTRfssqI3BZuV18teDg==", + "requires": { + "agent-base": "5", + "debug": "4" + }, + "dependencies": { + "debug": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", + "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", + "requires": { + "ms": "2.1.2" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + } + } + }, + "iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + }, + "ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==" + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" + }, + "ipaddr.js": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==" + }, + "is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=" + }, + "is-core-module": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.2.0.tgz", + "integrity": "sha512-XRAfAdyyY5F5cOXn7hYQDqh2Xmii+DEfIcQGxK/uNwMHhIkPWO0g8msXcbzLe+MpGoR951MlqM/2iIlU4vKDdQ==", + "requires": { + "has": "^1.0.3" + } + }, + "json-parse-better-errors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", + "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==" + }, + "jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "requires": { + "graceful-fs": "^4.1.6", + "universalify": "^2.0.0" + }, + "dependencies": { + "universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==" + } + } + }, + "klaw": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/klaw/-/klaw-3.0.0.tgz", + "integrity": "sha512-0Fo5oir+O9jnXu5EefYbVK+mHMBeEVEy2cmctR1O1NECcCkPRreJKrS6Qt/j3KC2C148Dfo9i3pCmCMsdqGr0g==", + "requires": { + "graceful-fs": "^4.1.9" + } + }, + "load-json-file": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz", + "integrity": "sha1-L19Fq5HjMhYjT9U62rZo607AmTs=", + "requires": { + "graceful-fs": "^4.1.2", + "parse-json": "^4.0.0", + "pify": "^3.0.0", + "strip-bom": "^3.0.0" + } + }, + "locate-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", + "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", + "requires": { + "p-locate": "^2.0.0", + "path-exists": "^3.0.0" + } + }, + "lodash._reinterpolate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz", + "integrity": "sha1-DM8tiRZq8Ds2Y8eWU4t1rG4RTZ0=" + }, + "lodash.template": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.template/-/lodash.template-4.5.0.tgz", + "integrity": "sha512-84vYFxIkmidUiFxidA/KjjH9pAycqW+h980j7Fuz5qxRtO9pgB7MDFTdys1N7A5mcucRiDyEq4fusljItR1T/A==", + "requires": { + "lodash._reinterpolate": "^3.0.0", + "lodash.templatesettings": "^4.0.0" + } + }, + "lodash.templatesettings": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/lodash.templatesettings/-/lodash.templatesettings-4.2.0.tgz", + "integrity": "sha512-stgLz+i3Aa9mZgnjr/O+v9ruKZsPsndy7qPZOchbqk2cnTU1ZaldKK+v7m54WoKIyxiuMZTKT2H81F8BeAc3ZQ==", + "requires": { + "lodash._reinterpolate": "^3.0.0" + } + }, + "lodash.uniq": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", + "integrity": "sha1-0CJTc662Uq3BvILklFM5qEJ1R3M=" + }, + "media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=" + }, + "merge-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", + "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=" + }, + "methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=" + }, + "mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==" + }, + "mime-db": { + "version": "1.44.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.44.0.tgz", + "integrity": "sha512-/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg==" + }, + "mime-types": { + "version": "2.1.27", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.27.tgz", + "integrity": "sha512-JIhqnCasI9yD+SsmkquHBxTSEuZdQX5BuQnS2Vc7puQQQ+8yiP5AY5uWhpdv4YL4VM5c6iliiYWPgJ/nJQLp7w==", + "requires": { + "mime-db": "1.44.0" + } + }, + "minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "mkdirp-classic": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", + "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==" + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + }, + "negotiator": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", + "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==" + }, + "node-fetch": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.1.tgz", + "integrity": "sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw==" + }, + "on-finished": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", + "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", + "requires": { + "ee-first": "1.1.1" + } + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "requires": { + "wrappy": "1" + } + }, + "p-limit": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", + "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", + "requires": { + "p-try": "^1.0.0" + } + }, + "p-locate": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", + "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", + "requires": { + "p-limit": "^1.1.0" + } + }, + "p-try": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", + "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=" + }, + "parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", + "requires": { + "error-ex": "^1.3.1", + "json-parse-better-errors": "^1.0.1" + } + }, + "parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==" + }, + "path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=" + }, + "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=" + }, + "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==" + }, + "path-to-regexp": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", + "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=" + }, + "pend": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", + "integrity": "sha1-elfrVQpng/kRUzH89GY9XI4AelA=" + }, + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=" + }, + "pkg-conf": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/pkg-conf/-/pkg-conf-2.1.0.tgz", + "integrity": "sha1-ISZRTKbyq/69FoWW3xi6V4Z/AFg=", + "requires": { + "find-up": "^2.0.0", + "load-json-file": "^4.0.0" + } + }, + "pkg-dir": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", + "requires": { + "find-up": "^4.0.0" + }, + "dependencies": { + "find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "requires": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + } + }, + "locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "requires": { + "p-locate": "^4.1.0" + } + }, + "p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "requires": { + "p-limit": "^2.2.0" + } + }, + "p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==" + }, + "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==" + } + } + }, + "progress": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", + "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==" + }, + "proxy-addr": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.6.tgz", + "integrity": "sha512-dh/frvCBVmSsDYzw6n926jv974gddhkFPfiN8hPOi30Wax25QZyZEGveluCgliBnqmuM+UJmBErbAUFIoDbjOw==", + "requires": { + "forwarded": "~0.1.2", + "ipaddr.js": "1.9.1" + } + }, + "proxy-from-env": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", + "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==" + }, + "pump": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "requires": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "puppeteer": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/puppeteer/-/puppeteer-5.5.0.tgz", + "integrity": "sha512-OM8ZvTXAhfgFA7wBIIGlPQzvyEETzDjeRa4mZRCRHxYL+GNH5WAuYUQdja3rpWZvkX/JKqmuVgbsxDNsDFjMEg==", + "requires": { + "debug": "^4.1.0", + "devtools-protocol": "0.0.818844", + "extract-zip": "^2.0.0", + "https-proxy-agent": "^4.0.0", + "node-fetch": "^2.6.1", + "pkg-dir": "^4.2.0", + "progress": "^2.0.1", + "proxy-from-env": "^1.0.0", + "rimraf": "^3.0.2", + "tar-fs": "^2.0.0", + "unbzip2-stream": "^1.3.3", + "ws": "^7.2.3" + }, + "dependencies": { + "debug": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", + "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", + "requires": { + "ms": "2.1.2" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + } + } + }, + "qs": { + "version": "6.7.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz", + "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==" + }, + "randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "requires": { + "safe-buffer": "^5.1.0" + } + }, + "range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==" + }, + "raw-body": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.0.tgz", + "integrity": "sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==", + "requires": { + "bytes": "3.1.0", + "http-errors": "1.7.2", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + } + }, + "readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + }, + "resolve": { + "version": "1.19.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.19.0.tgz", + "integrity": "sha512-rArEXAgsBG4UgRGcynxWIWKFvh/XZCcS8UJdHhwy91zwAvCZIbcs+vAbflgBnNjYMs/i/i+/Ux6IZhML1yPvxg==", + "requires": { + "is-core-module": "^2.1.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==", + "requires": { + "glob": "^7.1.3" + } + }, + "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==" + }, + "safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + }, + "send": { + "version": "0.17.1", + "resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz", + "integrity": "sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==", + "requires": { + "debug": "2.6.9", + "depd": "~1.1.2", + "destroy": "~1.0.4", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "~1.7.2", + "mime": "1.6.0", + "ms": "2.1.1", + "on-finished": "~2.3.0", + "range-parser": "~1.2.1", + "statuses": "~1.5.0" + }, + "dependencies": { + "ms": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", + "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==" + } + } + }, + "serialize-javascript": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-3.1.0.tgz", + "integrity": "sha512-JIJT1DGiWmIKhzRsG91aS6Ze4sFUrYbltlkg2onR5OrnNM02Kl/hnY/T4FN2omvyeBbQmMJv+K4cPOpGzOTFBg==", + "requires": { + "randombytes": "^2.1.0" + } + }, + "serve-static": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.1.tgz", + "integrity": "sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg==", + "requires": { + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.17.1" + } + }, + "setprototypeof": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", + "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==" + }, + "signale": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/signale/-/signale-1.4.0.tgz", + "integrity": "sha512-iuh+gPf28RkltuJC7W5MRi6XAjTDCAPC/prJUpQoG4vIP3MJZ+GTydVnodXA7pwvTKb2cA0m9OFZW/cdWy/I/w==", + "requires": { + "chalk": "^2.3.2", + "figures": "^2.0.0", + "pkg-conf": "^2.1.0" + } + }, + "source-map": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.6.tgz", + "integrity": "sha1-dc449SvwczxafwwRjYEzSiu19BI=" + }, + "statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=" + }, + "string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "requires": { + "safe-buffer": "~5.2.0" + } + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=" + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "requires": { + "has-flag": "^3.0.0" + } + }, + "tar-fs": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.1.tgz", + "integrity": "sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==", + "requires": { + "chownr": "^1.1.1", + "mkdirp-classic": "^0.5.2", + "pump": "^3.0.0", + "tar-stream": "^2.1.4" + } + }, + "tar-stream": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.1.4.tgz", + "integrity": "sha512-o3pS2zlG4gxr67GmFYBLlq+dM8gyRGUOvsrHclSkvtVtQbjV0s/+ZE8OpICbaj8clrX3tjeHngYGP7rweaBnuw==", + "requires": { + "bl": "^4.0.3", + "end-of-stream": "^1.4.1", + "fs-constants": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^3.1.1" + } + }, + "through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=" + }, + "toidentifier": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz", + "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==" + }, + "type-is": { + "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "requires": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + } + }, + "unbzip2-stream": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/unbzip2-stream/-/unbzip2-stream-1.4.3.tgz", + "integrity": "sha512-mlExGW4w71ebDJviH16lQLtZS32VKqsSfk80GCfUlwT/4/hNRFsoscrF/c++9xinkMzECL1uL9DDwXqFWkruPg==", + "requires": { + "buffer": "^5.2.1", + "through": "^2.3.8" + } + }, + "universalify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-1.0.0.tgz", + "integrity": "sha512-rb6X1W158d7pRQBg5gkR8uPaSfiids68LTJQYOtEUhoJUWBdaQHsuT/EUduxXYxcrt4r5PJ4fuHW1MHT6p0qug==" + }, + "unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=" + }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" + }, + "utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=" + }, + "vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=" + }, + "vue": { + "version": "2.6.12", + "resolved": "https://registry.npmjs.org/vue/-/vue-2.6.12.tgz", + "integrity": "sha512-uhmLFETqPPNyuLLbsKz6ioJ4q7AZHzD8ZVFNATNyICSZouqP2Sz0rotWQC8UNBF6VGSCs5abnKJoStA6JbCbfg==" + }, + "vue-server-renderer": { + "version": "2.6.12", + "resolved": "https://registry.npmjs.org/vue-server-renderer/-/vue-server-renderer-2.6.12.tgz", + "integrity": "sha512-3LODaOsnQx7iMFTBLjki8xSyOxhCtbZ+nQie0wWY4iOVeEtTg1a3YQAjd82WvKxrWHHTshjvLb7OXMc2/dYuxw==", + "requires": { + "chalk": "^1.1.3", + "hash-sum": "^1.0.2", + "he": "^1.1.0", + "lodash.template": "^4.5.0", + "lodash.uniq": "^4.5.0", + "resolve": "^1.2.0", + "serialize-javascript": "^3.1.0", + "source-map": "0.5.6" + }, + "dependencies": { + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=" + }, + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "requires": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + } + }, + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=" + } + } + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" + }, + "ws": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.1.tgz", + "integrity": "sha512-pTsP8UAfhy3sk1lSk/O/s4tjD0CRwvMnzvwr4OKGX7ZvqZtUyx4KIJB5JWbkykPoc55tixMGgTNoh3k4FkNGFQ==" + }, + "yauzl": { + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", + "integrity": "sha1-x+sXyT4RLLEIb6bY5R+wZnt5pfk=", + "requires": { + "buffer-crc32": "~0.2.3", + "fd-slicer": "~1.1.0" + } + } + } +} diff --git a/tools/vueui-report/package.json b/tools/vueui-report/package.json new file mode 100644 index 00000000000..18ffc9b6818 --- /dev/null +++ b/tools/vueui-report/package.json @@ -0,0 +1,17 @@ +{ + "name": "vueui-report", + "version": "1.0.0", + "description": "Tools for building VueUI BYOND UI framework reports.", + "main": "index.mjs", + "author": "Karolis K.", + "dependencies": { + "ansi-to-html": "^0.6.14", + "express": "^4.17.1", + "fs-extra": "^9.0.1", + "klaw": "^3.0.0", + "puppeteer": "^5.5.0", + "signale": "^1.4.0", + "vue": "^2.6.12", + "vue-server-renderer": "^2.6.12" + } +} diff --git a/tools/vueui-report/src/app.js b/tools/vueui-report/src/app.js new file mode 100644 index 00000000000..e7a46624cd0 --- /dev/null +++ b/tools/vueui-report/src/app.js @@ -0,0 +1,38 @@ +module.exports = function (states, stages) { + var components = stages.map((stage, i) => ({i, n: stage.name(), c: stage.component(states[i])})) + return ({ + template: ` + + + + + + + + + + VueUI report + + +
+

VueUi Report

+
+

{{ stage.n }}

+ +
+
+ + + `, + data() { + return { + stages: components + } + } + }) +} \ No newline at end of file diff --git a/tools/vueui-report/src/processPromisify.js b/tools/vueui-report/src/processPromisify.js new file mode 100644 index 00000000000..89b5edd3842 --- /dev/null +++ b/tools/vueui-report/src/processPromisify.js @@ -0,0 +1,15 @@ +const child_process = require('child_process') + +module.exports = { + exec(command, options = {}) { + return new Promise((resolve, reject) => { + child_process.exec(command, options, (error, stdout, stderr) => { + if (error) { + reject({ error, stdout, stderr }) + return + } + resolve({ stdout, stderr }) + }) + }) + }, +} diff --git a/tools/vueui-report/stages/00_null/index.js b/tools/vueui-report/stages/00_null/index.js new file mode 100644 index 00000000000..f0699498c32 --- /dev/null +++ b/tools/vueui-report/stages/00_null/index.js @@ -0,0 +1,5 @@ +module.exports = { + name: () => 'null', + run: (signale) => ({result: 'fail'}), + component: (state) => ({template: '
{{ $data }}
'}) +} \ No newline at end of file diff --git a/tools/vueui-report/stages/01_build/component.js b/tools/vueui-report/stages/01_build/component.js new file mode 100644 index 00000000000..95ae5be4bef --- /dev/null +++ b/tools/vueui-report/stages/01_build/component.js @@ -0,0 +1,31 @@ +var Convert = require('ansi-to-html'); +var convert = new Convert(); +module.exports = function (state) { + return ({ + template: `
+

npm install

+

+      

npm run build-dev

+

+    
`, + data() { + return state + }, + computed: { + installOut() { + if(this.install) + { + return convert.toHtml(this.install) + } + return '' + }, + buildOut() { + if(this.build) + { + return convert.toHtml(this.build.stdout) + } + return '' + } + } + }) +} \ No newline at end of file diff --git a/tools/vueui-report/stages/01_build/index.js b/tools/vueui-report/stages/01_build/index.js new file mode 100644 index 00000000000..a3db234f10b --- /dev/null +++ b/tools/vueui-report/stages/01_build/index.js @@ -0,0 +1,7 @@ +const run = require('./run') +const component = require('./component') +module.exports = { + name: () => 'Build', + run, + component +} \ No newline at end of file diff --git a/tools/vueui-report/stages/01_build/run.js b/tools/vueui-report/stages/01_build/run.js new file mode 100644 index 00000000000..d254f0577eb --- /dev/null +++ b/tools/vueui-report/stages/01_build/run.js @@ -0,0 +1,24 @@ +const config = require('../../config') +const processPromisify = require('../../src/processPromisify') +const path = require('path') +const vueuiPath = path.resolve(config.vueui) +module.exports = async function (signale) { + try { + const { stdout, stderr } = await processPromisify.exec('npm install --colors', { + cwd: vueuiPath, + }) + signale.debug("Install done. Building...") + const build = await processPromisify.exec('npm run build-dev --colors', + { + cwd: vueuiPath, + } + ) + signale.debug("Build done.") + return { + install: stdout, + build + } + } catch (error) { + return {fail: error} + } +} diff --git a/tools/vueui-report/stages/02_lint/component.js b/tools/vueui-report/stages/02_lint/component.js new file mode 100644 index 00000000000..764b5543259 --- /dev/null +++ b/tools/vueui-report/stages/02_lint/component.js @@ -0,0 +1,21 @@ +var Convert = require('ansi-to-html'); +var convert = new Convert(); +module.exports = function (state) { + return ({ + template: `
+

+    
`, + data() { + return state + }, + computed: { + lintOut() { + if(this.lint) + { + return convert.toHtml(this.lint) + } + return '' + } + } + }) +} \ No newline at end of file diff --git a/tools/vueui-report/stages/02_lint/index.js b/tools/vueui-report/stages/02_lint/index.js new file mode 100644 index 00000000000..1aef054338f --- /dev/null +++ b/tools/vueui-report/stages/02_lint/index.js @@ -0,0 +1,7 @@ +const run = require('./run') +const component = require('./component') +module.exports = { + name: () => 'Lint', + run, + component +} \ No newline at end of file diff --git a/tools/vueui-report/stages/02_lint/run.js b/tools/vueui-report/stages/02_lint/run.js new file mode 100644 index 00000000000..9f2fc101ba5 --- /dev/null +++ b/tools/vueui-report/stages/02_lint/run.js @@ -0,0 +1,16 @@ +const config = require('../../config') +const processPromisify = require('../../src/processPromisify') +const path = require('path') +const vueuiPath = path.resolve(config.vueui) +module.exports = async function (signale) { + try { + const { stdout, stderr } = await processPromisify.exec('npm run lint --colors', { + cwd: vueuiPath, + }) + return { + lint: stdout, + } + } catch (error) { + return {lint_error: error} + } +} diff --git a/tools/vueui-report/stages/03_puppeteer/component.js b/tools/vueui-report/stages/03_puppeteer/component.js new file mode 100644 index 00000000000..a7dd0b4eb1e --- /dev/null +++ b/tools/vueui-report/stages/03_puppeteer/component.js @@ -0,0 +1,17 @@ +module.exports = function (state) { + return ({ + template: `
+
+
{{ path }}
+
+
+
{{ err }}
+
+
+ +
`, + data() { + return state + } + }) +} \ No newline at end of file diff --git a/tools/vueui-report/stages/03_puppeteer/index.js b/tools/vueui-report/stages/03_puppeteer/index.js new file mode 100644 index 00000000000..1de058dfe13 --- /dev/null +++ b/tools/vueui-report/stages/03_puppeteer/index.js @@ -0,0 +1,7 @@ +const run = require('./run') +const component = require('./component') +module.exports = { + name: () => 'Puppeteer', + run, + component +} \ No newline at end of file diff --git a/tools/vueui-report/stages/03_puppeteer/run.js b/tools/vueui-report/stages/03_puppeteer/run.js new file mode 100644 index 00000000000..de4ad779098 --- /dev/null +++ b/tools/vueui-report/stages/03_puppeteer/run.js @@ -0,0 +1,92 @@ +const config = require('../../config') +const path = require('path') +const fs = require('fs-extra') +const vueuiTestsPath = path.resolve(config.vueui, './tests') +const vueuiDistPath = path.resolve(config.vueui, './dist') +const klaw = require('klaw') +const express = require('express') +const puppeteer = require('puppeteer') +const app = express() + +app.use(express.static(vueuiDistPath)) + +app.use('/tmpl', async (req, res) => { + const file = req.query.test + const theme = req.query.theme + const { data } = await fs.readJson(file) + res.send(config.template(theme, data)) +}) + +module.exports = async function (signale) { + let tests = [] + for await (const file of klaw(vueuiTestsPath)) { + if (!file.stats.isDirectory()) { + tests.push(file.path) + } + } + + var server = app.listen(5221, () => { + signale.info(`Puppeteer web server listening at http://localhost:5221`) + }) + + // C:\Projektai\Aurora.3\vueui\tests\manifest.json + + // http://localhost:5221/tmpl?test=C:\Projektai\Aurora.3\vueui\tests\manifest.json&theme=vueui%20theme-nano%20dark-theme + + const browser = await puppeteer.launch({headless: false}); + const page = await browser.newPage(); + + let results = {} + + for (const testFile of tests) { + const { size } = await fs.readJson(testFile) + results[testFile] = {} + for (const theme of config.themes) { + results[testFile][theme] = {errors: []} + + const ConsoleHandler = (message) => { + const type = message.type().substr(0, 3).toUpperCase() + if(type == 'ERR') + { + results[testFile][theme].errors.push(`${message._text}`) + } + } + const PageErrorHandler = ({ message }) => { + results[testFile][theme].errors.push(`${message}`) + } + + page.on('console', ConsoleHandler) + page.on('pageerror', PageErrorHandler) + + await page.goto(`http://localhost:5221/tmpl?test=${encodeURI(testFile)}&theme=${encodeURI(theme)}`) + await page.setViewport({ + width: size[0], + height: size[1], + deviceScaleFactor: 1, + }) + const screen = await page.screenshot({encoding: 'base64'}) + results[testFile][theme].image = screen + + // await new Promise((resolve, reject) => { + // setTimeout(() => { + // resolve() + // }, 3000) + // }) + + page.off('console', ConsoleHandler) + page.off('pageerror', PageErrorHandler) + } + } + + + + // await new Promise((resolve, reject) => { + // setTimeout(() => { + // resolve() + // }, 1000 * 60) + // }) + + await browser.close() + server.close() + return {results} +} diff --git a/tools/vueui-report/stages/index.js b/tools/vueui-report/stages/index.js new file mode 100644 index 00000000000..59eb89d1439 --- /dev/null +++ b/tools/vueui-report/stages/index.js @@ -0,0 +1,5 @@ +module.exports = [ + require('./01_build'), + require('./02_lint'), + require('./03_puppeteer'), +] \ No newline at end of file diff --git a/vueui/tests/ghost spawners.json b/vueui/tests/ghost spawners.json new file mode 100644 index 00000000000..979f93eb0ec --- /dev/null +++ b/vueui/tests/ghost spawners.json @@ -0,0 +1,559 @@ +{ + "size": [950, 700], + "data": { + "state": { + "spawnpoint": null, + "current_tag": "All", + "spawners": { + "ertcommander": { + "name": "ERT Commander", + "desc": "Command the response team from Central Command", + "cant_spawn": 0, + "can_edit": 1, + "enabled": 1, + "count": 0, + "spawnatoms": 0, + "max_count": 0, + "tags": ["Admin"], + "spawnpoints": null + }, + "legionlegate": { + "name": "TCFL Legate", + "desc": "Command the TCFL onboard BLV The Tower, a legion patrolship from where Task Force XIII - Fortune operates from.", + "cant_spawn": 0, + "can_edit": 1, + "enabled": 1, + "count": 0, + "spawnatoms": 0, + "max_count": 0, + "tags": ["Admin"], + "spawnpoints": null + }, + "cciaagent": { + "name": "CCIA Agent", + "desc": "Board the Aurora, annoy crew with your interviews and get squashed by your own shuttle.", + "cant_spawn": 0, + "can_edit": 1, + "enabled": 1, + "count": 0, + "spawnatoms": 0, + "max_count": 0, + "tags": ["Admin"], + "spawnpoints": null + }, + "cciaescort": { + "name": "CCIA Escort", + "desc": "Escort a CCIA Agent to the station, watch them annoy the crew and prevent them from throwing themselves under their own shuttle. (This spawner is not enabled.)", + "cant_spawn": "This spawner is not enabled.", + "can_edit": 1, + "enabled": 0, + "count": 0, + "spawnatoms": 0, + "max_count": 1, + "tags": ["Admin"], + "spawnpoints": null + }, + "checkpointsec_prepatory": { + "name": "Aurora Prepatory Wing Security", + "desc": "Act as an Odin security officer, guide lost newcomers onto the arrivals shuttle if the need arises.", + "cant_spawn": 0, + "can_edit": 1, + "enabled": 1, + "count": 0, + "spawnatoms": 0, + "max_count": 3, + "tags": ["Admin"], + "spawnpoints": ["OdinPrepatory"] + }, + "checkpointsec": { + "name": "Odin Checkpoint Security", + "desc": "Secure the Odin checkpoint. Verify the identity of everyone passing through, perform random searches on \"suspicious\" crew. (This spawner is not enabled.)", + "cant_spawn": "This spawner is not enabled.", + "can_edit": 1, + "enabled": 0, + "count": 0, + "spawnatoms": 0, + "max_count": 4, + "tags": ["Admin"], + "spawnpoints": ["OdinCheckpoint"] + }, + "odindoc": { + "name": "Odin Medical Doctor", + "desc": "Provide medical assistance for those arriving on the Odin. (This spawner is not enabled.)", + "cant_spawn": "This spawner is not enabled.", + "can_edit": 1, + "enabled": 0, + "count": 0, + "spawnatoms": 0, + "max_count": 4, + "tags": ["Admin"], + "spawnpoints": ["OdinDoctor"] + }, + "odinpharm": { + "name": "Odin Pharmacist", + "desc": "Provide medication for the Doctors on the Odin and those in need. (This spawner is not enabled.)", + "cant_spawn": "This spawner is not enabled.", + "can_edit": 1, + "enabled": 0, + "count": 0, + "spawnatoms": 0, + "max_count": 1, + "tags": ["Admin"], + "spawnpoints": ["OdinPharm"] + }, + "odinchef": { + "name": "Odin Chef", + "desc": "Feed starving crew members on the Odin. (This spawner is not enabled.)", + "cant_spawn": "This spawner is not enabled.", + "can_edit": 1, + "enabled": 0, + "count": 0, + "spawnatoms": 0, + "max_count": 2, + "tags": ["Admin"], + "spawnpoints": ["OdinChef"] + }, + "odinbartender": { + "name": "Odin Bartender", + "desc": "Ensure enough drinks are available to the crew on the Odin. (This spawner is not enabled.)", + "cant_spawn": "This spawner is not enabled.", + "can_edit": 1, + "enabled": 0, + "count": 0, + "spawnatoms": 0, + "max_count": 1, + "tags": ["Admin"], + "spawnpoints": ["OdinBartender"] + }, + "odinjanitor": { + "name": "Odin Sanitation Specialist", + "desc": "You are a expert in your field. A true authority. The crew looks to you when they get into a sticky situation. You are a janitor on the Odin. (This spawner is not enabled.)", + "cant_spawn": "This spawner is not enabled.", + "can_edit": 1, + "enabled": 0, + "count": 0, + "spawnatoms": 0, + "max_count": 1, + "tags": ["Admin"], + "spawnpoints": ["OdinJanitor"] + }, + "tcflsentinel": { + "name": "TCFL Sentinel", + "desc": "Secure BLV The Tower from any would-be interlopers, provide assistance to returning personnel and/or evacuees. (This spawner is not enabled.)", + "cant_spawn": "This spawner is not enabled.", + "can_edit": 1, + "enabled": 0, + "count": 0, + "spawnatoms": 0, + "max_count": 4, + "tags": ["Admin"], + "spawnpoints": ["TCFLSentinel"] + }, + "fibescort": { + "name": "FIB Escort", + "desc": "Protect the agents of the Federal Investigations Bureau while on the field. (This spawner is not enabled.)", + "cant_spawn": "This spawner is not enabled.", + "can_edit": 1, + "enabled": 0, + "count": 0, + "spawnatoms": 0, + "max_count": 1, + "tags": ["Admin"], + "spawnpoints": null + }, + "fib": { + "name": "FIB Agent", + "desc": "Investigate issues related to crimes under the jurisdiction of the Federal Investigations Bureau.", + "cant_spawn": 0, + "can_edit": 1, + "enabled": 1, + "count": 0, + "spawnatoms": 0, + "max_count": 0, + "tags": ["Admin"], + "spawnpoints": null + }, + "burglarpod": { + "name": "Burglar", + "desc": "Your last attempt at petty theft went awry, and now you're heading toward an asteroid in a ratty escape pod. (This spawner is not enabled.)", + "cant_spawn": "This spawner is not enabled.", + "can_edit": 1, + "enabled": 0, + "count": 0, + "spawnatoms": 0, + "max_count": 1, + "tags": ["External"], + "spawnpoints": null + }, + "rescuepodsurv": { + "name": "Rescue Pod Survivor", + "desc": "You managed to get into a rescue pod and landed somewhere on an asteroid. (This spawner is not enabled.)", + "cant_spawn": "This spawner is not enabled.", + "can_edit": 1, + "enabled": 0, + "count": 0, + "spawnatoms": 0, + "max_count": 1, + "tags": ["External"], + "spawnpoints": null + }, + "merchantass": { + "name": "Merchants Assistant", + "desc": "Assist the Merchant with their duties. (This spawner is not enabled.)", + "cant_spawn": "This spawner is not enabled.", + "can_edit": 1, + "enabled": 0, + "count": 0, + "spawnatoms": 0, + "max_count": 1, + "tags": ["External"], + "spawnpoints": ["MerchantAss"] + }, + "visitor": { + "name": "Visitor", + "desc": "You are a random visitor that boarded the NSS Aurora, visiting for any reason you can think of. You do not have any records, as you are not a Nanotrasen employee. (This spawner is not enabled.)", + "cant_spawn": "This spawner is not enabled.", + "can_edit": 1, + "enabled": 0, + "count": 0, + "spawnatoms": 0, + "max_count": 1, + "tags": ["External"], + "spawnpoints": null + }, + "ntapl": { + "name": "NT Asset Protection Leader", + "desc": "Leader of NT's Asset Protection team. (This spawner is not enabled.)", + "cant_spawn": "This spawner is not enabled.", + "can_edit": 1, + "enabled": 0, + "count": 0, + "spawnatoms": 0, + "max_count": 1, + "tags": ["Response Teams"], + "spawnpoints": ["DeathERTSpawn"] + }, + "ntaps": { + "name": "NT Asset Protection Specialist", + "desc": "Protectors of NanoTrasen's bottom line. The last thing you never see. (This spawner is not enabled.)", + "cant_spawn": "This spawner is not enabled.", + "can_edit": 1, + "enabled": 0, + "count": 0, + "spawnatoms": 0, + "max_count": 3, + "tags": ["Response Teams"], + "spawnpoints": ["DeathERTSpawn"] + }, + "iacbodyguard": { + "name": "IAC Bodyguard", + "desc": "A highly trained bodyguard. Sticks close to the medics while they work. (This spawner is not enabled.)", + "cant_spawn": "This spawner is not enabled.", + "can_edit": 1, + "enabled": 0, + "count": 0, + "spawnatoms": 0, + "max_count": 2, + "tags": ["Response Teams"], + "spawnpoints": ["ERTSpawn"] + }, + "iacparamedic": { + "name": "IAC Paramedic", + "desc": "A highly trained paramedic. You grab injured people and bring them to the doctor. You are trained in nursing duties as well. (This spawner is not enabled.)", + "cant_spawn": "This spawner is not enabled.", + "can_edit": 1, + "enabled": 0, + "count": 0, + "spawnatoms": 0, + "max_count": 2, + "tags": ["Response Teams"], + "spawnpoints": ["ERTSpawn"] + }, + "iacdoctor": { + "name": "IAC Doctor", + "desc": "A highly trained doctor. Can do most medical procedures even under severe stress. The de-facto lead of the IAC response team. (This spawner is not enabled.)", + "cant_spawn": "This spawner is not enabled.", + "can_edit": 1, + "enabled": 0, + "count": 0, + "spawnatoms": 0, + "max_count": 3, + "tags": ["Response Teams"], + "spawnpoints": ["ERTSpawn"] + }, + "katspec": { + "name": "Kataphract-Hopeful Specialist", + "desc": "A Zo'saa (squire) trained in medicine from the local Kataphract guild. (This spawner is not enabled.)", + "cant_spawn": "This spawner is not enabled.", + "can_edit": 1, + "enabled": 0, + "count": 0, + "spawnatoms": 0, + "max_count": 1, + "tags": ["Response Teams"], + "spawnpoints": ["ERTSpawn"] + }, + "katlead": { + "name": "Kataphract Knight", + "desc": "A brave Saa (Knight) of the local Kataphract Guild. Two together operate as leaders of the team. (This spawner is not enabled.)", + "cant_spawn": "This spawner is not enabled.", + "can_edit": 1, + "enabled": 0, + "count": 0, + "spawnatoms": 0, + "max_count": 2, + "tags": ["Response Teams"], + "spawnpoints": ["ERTSpawn"] + }, + "kathope": { + "name": "Kataphract-Hopeful", + "desc": "A Zo'saa (squire) of the local Kataphract Guild. (This spawner is not enabled.)", + "cant_spawn": "This spawner is not enabled.", + "can_edit": 1, + "enabled": 0, + "count": 0, + "spawnatoms": 0, + "max_count": 2, + "tags": ["Response Teams"], + "spawnpoints": ["ERTSpawn"] + }, + "eridanidocbodyguard": { + "name": "Eridani Medical Contractor Bodyguard", + "desc": "A highly trained bodyguard. Sticks close to the medics while they work. (This spawner is not enabled.)", + "cant_spawn": "This spawner is not enabled.", + "can_edit": 1, + "enabled": 0, + "count": 0, + "spawnatoms": 0, + "max_count": 2, + "tags": ["Response Teams"], + "spawnpoints": ["ERTSpawn"] + }, + "eridaniparamedic": { + "name": "Eridani Medical Contractor Paramedic", + "desc": "A highly trained paramedic. You grab injured people and bring them to the medical doctor. You are trained in nursing duties as well. (This spawner is not enabled.)", + "cant_spawn": "This spawner is not enabled.", + "can_edit": 1, + "enabled": 0, + "count": 0, + "spawnatoms": 0, + "max_count": 2, + "tags": ["Response Teams"], + "spawnpoints": ["ERTSpawn"] + }, + "eridanidoctor": { + "name": "Eridani Medical Contractor Doctor", + "desc": "A highly trained Eridani contractor doctor medical doctor. Can do most medical procedures even under severe stress. (This spawner is not enabled.)", + "cant_spawn": "This spawner is not enabled.", + "can_edit": 1, + "enabled": 0, + "count": 0, + "spawnatoms": 0, + "max_count": 2, + "tags": ["Response Teams"], + "spawnpoints": ["ERTSpawn"] + }, + "mercs": { + "name": "Mercenary Medical Specialist", + "desc": "The only medic of the freelancer mercenary team. (This spawner is not enabled.)", + "cant_spawn": "This spawner is not enabled.", + "can_edit": 1, + "enabled": 0, + "count": 0, + "spawnatoms": 0, + "max_count": 1, + "tags": ["Response Teams"], + "spawnpoints": ["ERTSpawn"] + }, + "merce": { + "name": "Mercenary Combat Engineer", + "desc": "The only dedicated engineer of the freelancer mercenary team. (This spawner is not enabled.)", + "cant_spawn": "This spawner is not enabled.", + "can_edit": 1, + "enabled": 0, + "count": 0, + "spawnatoms": 0, + "max_count": 1, + "tags": ["Response Teams"], + "spawnpoints": ["ERTSpawn"] + }, + "mercl": { + "name": "Mercenary Leader", + "desc": "The leader of the freelancer mercenary team. (This spawner is not enabled.)", + "cant_spawn": "This spawner is not enabled.", + "can_edit": 1, + "enabled": 0, + "count": 0, + "spawnatoms": 0, + "max_count": 1, + "tags": ["Response Teams"], + "spawnpoints": ["ERTSpawn"] + }, + "mercr": { + "name": "Mercenary Responder", + "desc": "Rank and file of a freelancer mercenary team. (This spawner is not enabled.)", + "cant_spawn": "This spawner is not enabled.", + "can_edit": 1, + "enabled": 0, + "count": 0, + "spawnatoms": 0, + "max_count": 2, + "tags": ["Response Teams"], + "spawnpoints": ["ERTSpawn"] + }, + "ntmed": { + "name": "Nanotrasen Medical Specialist", + "desc": "A medical specialist of the Nanotrasen Phoenix ERT. (This spawner is not enabled.)", + "cant_spawn": "This spawner is not enabled.", + "can_edit": 1, + "enabled": 0, + "count": 0, + "spawnatoms": 0, + "max_count": 1, + "tags": ["Response Teams"], + "spawnpoints": ["NTERTSpawn"] + }, + "nteng": { + "name": "Nanotrasen Engineering Specialist", + "desc": "An engineering specialist of the Nanotrasen Phoenix ERT. (This spawner is not enabled.)", + "cant_spawn": "This spawner is not enabled.", + "can_edit": 1, + "enabled": 0, + "count": 0, + "spawnatoms": 0, + "max_count": 1, + "tags": ["Response Teams"], + "spawnpoints": ["NTERTSpawn"] + }, + "ntlead": { + "name": "Nanotrasen Leader", + "desc": "The leader of the Nanotrasen Phoenix ERT. (This spawner is not enabled.)", + "cant_spawn": "This spawner is not enabled.", + "can_edit": 1, + "enabled": 0, + "count": 0, + "spawnatoms": 0, + "max_count": 1, + "tags": ["Response Teams"], + "spawnpoints": ["NTERTSpawn"] + }, + "ntert": { + "name": "Nanotrasen Responder", + "desc": "A responder of the Nanotrasen Phoenix ERT. (This spawner is not enabled.)", + "cant_spawn": "This spawner is not enabled.", + "can_edit": 1, + "enabled": 0, + "count": 0, + "spawnatoms": 0, + "max_count": 2, + "tags": ["Response Teams"], + "spawnpoints": ["NTERTSpawn"] + }, + "syndl": { + "name": "Syndicate Commando Leader", + "desc": "The leader of the Syndicate's elite commandos. (This spawner is not enabled.)", + "cant_spawn": "This spawner is not enabled.", + "can_edit": 1, + "enabled": 0, + "count": 0, + "spawnatoms": 0, + "max_count": 1, + "tags": ["Response Teams"], + "spawnpoints": ["SyndERTSpawn"] + }, + "syndc": { + "name": "Syndicate Commando", + "desc": "Well-equipped commandos of the criminal Syndicate. (This spawner is not enabled.)", + "cant_spawn": "This spawner is not enabled.", + "can_edit": 1, + "enabled": 0, + "count": 0, + "spawnatoms": 0, + "max_count": 3, + "tags": ["Response Teams"], + "spawnpoints": ["SyndERTSpawn"] + }, + "tcfls": { + "name": "TCFL Legionnaire", + "desc": "An experienced Legionnaire of the TCFL. (This spawner is not enabled.)", + "cant_spawn": "This spawner is not enabled.", + "can_edit": 1, + "enabled": 0, + "count": 0, + "spawnatoms": 0, + "max_count": 2, + "tags": ["Response Teams"], + "spawnpoints": ["TCFLERTSpawn"] + }, + "tcfll": { + "name": "TCFL Prefect", + "desc": "A leader of Task Force XIII - Fortune. (This spawner is not enabled.)", + "cant_spawn": "This spawner is not enabled.", + "can_edit": 1, + "enabled": 0, + "count": 0, + "spawnatoms": 0, + "max_count": 1, + "tags": ["Response Teams"], + "spawnpoints": ["TCFLERTSpawn - Prefect"] + }, + "tcflpl": { + "name": "TCFL Dropship Pilot", + "desc": "A dropship pilot of the TCFL. (This spawner is not enabled.)", + "cant_spawn": "This spawner is not enabled.", + "can_edit": 1, + "enabled": 0, + "count": 0, + "spawnatoms": 0, + "max_count": 1, + "tags": ["Response Teams"], + "spawnpoints": ["TCFLERTSpawn - Pilot"] + }, + "tcflr": { + "name": "TCFL Volunteer", + "desc": "The Tau Ceti Foreign Legion's rank and file. (This spawner is not enabled.)", + "cant_spawn": "This spawner is not enabled.", + "can_edit": 1, + "enabled": 0, + "count": 0, + "spawnatoms": 0, + "max_count": 3, + "tags": ["Response Teams"], + "spawnpoints": ["TCFLERTSpawn"] + }, + "maintdrone": { + "name": "Maintenance Drone", + "desc": "Maintain and Improve the Systems on the Aurora.", + "cant_spawn": 0, + "can_edit": 1, + "enabled": 1, + "count": 0, + "spawnatoms": 0, + "max_count": 0, + "tags": ["Simple Mobs"], + "spawnpoints": ["the plating", "the plating"] + }, + "rat": { + "name": "Rat", + "desc": "Join as a Rat on the aurora, a common nuisance to the crew.", + "cant_spawn": 0, + "can_edit": 1, + "enabled": 1, + "count": 0, + "spawnatoms": 0, + "max_count": 0, + "tags": ["Simple Mobs"], + "spawnpoints": null + } + } + }, + "assets": [], + "active": "misc-ghostspawner", + "uiref": "[0x0]", + "status": 2, + "title": "Ghost Role Spawner", + "wtime": 0, + "debug": 1, + "roundstart_hour": 15 + } +} diff --git a/vueui/tests/join meniu.json b/vueui/tests/join meniu.json new file mode 100644 index 00000000000..0f744bcb24b --- /dev/null +++ b/vueui/tests/join meniu.json @@ -0,0 +1,201 @@ +{ + "size": [330, 720], + "data": { + "state": { + "round_duration": "01:14", + "alert_level": "Green", + "character_name": "Hadriana Antonia", + "shuttle_status": "", + "unique_role_available": 0, + "jobs_available": 27, + "jobs_list": { + "Command": [], + "Security": { + "Warden": { + "title": "Warden", + "head": 0, + "total_positions": 1, + "current_positions": 0 + }, + "Detective": { + "title": "Detective", + "head": 0, + "total_positions": 1, + "current_positions": 0 + }, + "Security Officer": { + "title": "Security Officer", + "head": 0, + "total_positions": 4, + "current_positions": 1 + }, + "Security Cadet": { + "title": "Security Cadet", + "head": 0, + "total_positions": 2, + "current_positions": 0 + } + }, + "Engineering": { + "Station Engineer": { + "title": "Station Engineer", + "head": 0, + "total_positions": 5, + "current_positions": 3 + }, + "Atmospheric Technician": { + "title": "Atmospheric Technician", + "head": 0, + "total_positions": 3, + "current_positions": 0 + }, + "Engineering Apprentice": { + "title": "Engineering Apprentice", + "head": 0, + "total_positions": 3, + "current_positions": 0 + } + }, + "Medical": { + "Physician": { + "title": "Physician", + "head": 0, + "total_positions": 4, + "current_positions": 1 + }, + "Pharmacist": { + "title": "Pharmacist", + "head": 0, + "total_positions": 2, + "current_positions": 1 + }, + "First Responder": { + "title": "First Responder", + "head": 0, + "total_positions": 2, + "current_positions": 1 + }, + "Medical Intern": { + "title": "Medical Intern", + "head": 0, + "total_positions": 3, + "current_positions": 1 + } + }, + "Science": { + "Roboticist": { + "title": "Roboticist", + "head": 0, + "total_positions": 2, + "current_positions": 1 + }, + "Lab Assistant": { + "title": "Lab Assistant", + "head": 0, + "total_positions": 3, + "current_positions": 0 + } + }, + "Cargo": { + "Quartermaster": { + "title": "Quartermaster", + "head": 1, + "total_positions": 1, + "current_positions": 0 + }, + "Cargo Technician": { + "title": "Cargo Technician", + "head": 0, + "total_positions": 4, + "current_positions": 1 + }, + "Shaft Miner": { + "title": "Shaft Miner", + "head": 0, + "total_positions": 4, + "current_positions": 1 + } + }, + "Civilian": { + "Assistant": { + "title": "Assistant", + "head": 0, + "total_positions": -1, + "current_positions": 0 + }, + "Visitor": { + "title": "Visitor", + "head": 0, + "total_positions": -1, + "current_positions": 0 + }, + "Bartender": { + "title": "Bartender", + "head": 0, + "total_positions": 2, + "current_positions": 0 + }, + "Chef": { + "title": "Chef", + "head": 0, + "total_positions": 2, + "current_positions": 1 + }, + "Gardener": { + "title": "Gardener", + "head": 0, + "total_positions": 2, + "current_positions": 0 + }, + "Janitor": { + "title": "Janitor", + "head": 0, + "total_positions": 2, + "current_positions": 0 + }, + "Corporate Reporter": { + "title": "Corporate Reporter", + "head": 0, + "total_positions": 1, + "current_positions": 0 + }, + "Librarian": { + "title": "Librarian", + "head": 0, + "total_positions": 1, + "current_positions": 0 + }, + "Chaplain": { + "title": "Chaplain", + "head": 0, + "total_positions": 1, + "current_positions": 0 + } + }, + "Equipment": { + "AI": { + "title": "AI", + "head": 1, + "total_positions": 1, + "current_positions": 0 + }, + "Cyborg": { + "title": "Cyborg", + "head": 0, + "total_positions": 2, + "current_positions": 0 + } + }, + "Miscellaneous": [] + } + }, + "assets": { "character": { "ref": "0x0" } }, + "active": "late-choices", + "uiref": "[0x0]", + "status": 2, + "title": "Late-Join Choices", + "wtime": 0, + "debug": 0, + "roundstart_hour": 11 + } +} diff --git a/vueui/tests/manifest.json b/vueui/tests/manifest.json new file mode 100644 index 00000000000..d2b8ae4e142 --- /dev/null +++ b/vueui/tests/manifest.json @@ -0,0 +1,165 @@ +{ + "size": [580, 700], + "data": { + "state": { + "manifest": { + "Command": [ + { + "name": "Xiao Zemin", + "rank": "Research Director", + "active": "Active", + "head": 0 + } + ], + "Security": [ + { + "name": "Idus Martiae", + "rank": "Forensic Technician", + "active": "Active", + "head": 0 + }, + { + "name": "Ronald Monday", + "rank": "Security Officer", + "active": "Active", + "head": 0 + } + ], + "Engineering": [ + { + "name": "Yeva Petrova", + "rank": "Station Engineer", + "active": "Active", + "head": 0 + }, + { + "name": "Valetzrhonaja Nayrragh'Rakhan", + "rank": "Station Engineer", + "active": "Active", + "head": 0 + }, + { + "name": "Julian Chet", + "rank": "Station Engineer", + "active": "Active", + "head": 0 + } + ], + "Medical": [ + { + "name": "Odessa Arenth", + "rank": "Medical Intern", + "active": "Active", + "head": 0 + }, + { + "name": "Sanaa Al-Mansoor", + "rank": "Physician", + "active": "Active", + "head": 0 + }, + { + "name": "Imari Mneme", + "rank": "First Responder", + "active": "Active", + "head": 0 + }, + { + "name": "Jared Looper", + "rank": "Pharmacist", + "active": "Active", + "head": 0 + }, + { + "name": "Eric Foster", + "rank": "Surgeon", + "active": "Active", + "head": 0 + } + ], + "Science": [ + { + "name": "Xiao Zemin", + "rank": "Research Director", + "active": "Active", + "head": 1 + }, + { + "name": "Sezrak Han'San", + "rank": "Anomalist", + "active": "Active", + "head": 0 + }, + { + "name": "Astra Zemin", + "rank": "Xenobotanist", + "active": "Active", + "head": 0 + }, + { + "name": "Tavarr Batov", + "rank": "Scientist", + "active": "Active", + "head": 0 + }, + { + "name": "Sam Chalegre", + "rank": "Roboticist", + "active": "Active", + "head": 0 + }, + { + "name": "Jack Monroe", + "rank": "Anomalist", + "active": "Active", + "head": 0 + }, + { + "name": "Zeya Zemphir", + "rank": "Xenobiologist", + "active": "Active", + "head": 0 + } + ], + "Cargo": [ + { + "name": "Safaa Sadar", + "rank": "Cargo Technician", + "active": "Active", + "head": 0 + }, + { + "name": "Joe Harry", + "rank": "Shaft Miner", + "active": "Active", + "head": 0 + }, + { + "name": "To Arrange The Gifts Of Those Above", + "rank": "Cargo Technician", + "active": "Active", + "head": 0 + } + ], + "Civilian": [ + { + "name": "Huey Richter", + "rank": "Chef", + "active": "Active", + "head": 0 + } + ], + "Equipment": [], + "Miscellaneous": [] + } + }, + "assets": [], + "active": "manifest", + "uiref": "[0x0]", + "status": 2, + "title": "Crew Manifest", + "wtime": 0, + "debug": 0, + "roundstart_hour": 11 + } +} diff --git a/vueui/tests/vote.json b/vueui/tests/vote.json new file mode 100644 index 00000000000..0f6dfe58b84 --- /dev/null +++ b/vueui/tests/vote.json @@ -0,0 +1,25 @@ +{ + "size": [400, 500], + "data": { + "state": { + "choices": [], + "mode": null, + "voted": null, + "endtime": 1894, + "allow_vote_restart": 1, + "allow_vote_mode": 0, + "allow_extra_antags": 0, + "question": "", + "is_code_red": 0, + "isstaff": 0 + }, + "assets": [], + "active": "misc-voting", + "uiref": "[0x0]", + "status": 2, + "title": "Voting panel", + "wtime": 0, + "debug": 0, + "roundstart_hour": 11 + } +}