From aa53d5e4751aa184071b9690b46c85a1129a99c3 Mon Sep 17 00:00:00 2001 From: kmin Date: Sun, 27 Jun 2021 17:19:55 +0900 Subject: [PATCH 1/6] feat: calculator --- cypress.json | 1 + cypress/fixtures/example.json | 5 + cypress/integration/sample_spec.ts | 5 + cypress/plugins/index.js | 22 + cypress/support/commands.js | 25 + cypress/support/index.js | 20 + cypress/videos/sample_spec.ts.mp4 | Bin 0 -> 81949 bytes index.html | 71 +- package-lock.json | 2035 ++++++++++++++++++++++++++++ package.json | 18 + src/index.ts | 3 + src/tsfile/component/board.ts | 29 + src/tsfile/component/calculator.ts | 62 + src/tsfile/component/screen.ts | 21 + src/types/types.ts | 24 + src/utils/utils.ts | 36 + tsconfig.json | 73 + 17 files changed, 2415 insertions(+), 35 deletions(-) create mode 100644 cypress.json create mode 100644 cypress/fixtures/example.json create mode 100644 cypress/integration/sample_spec.ts create mode 100644 cypress/plugins/index.js create mode 100644 cypress/support/commands.js create mode 100644 cypress/support/index.js create mode 100644 cypress/videos/sample_spec.ts.mp4 create mode 100644 package-lock.json create mode 100644 package.json create mode 100644 src/index.ts create mode 100644 src/tsfile/component/board.ts create mode 100644 src/tsfile/component/calculator.ts create mode 100644 src/tsfile/component/screen.ts create mode 100644 src/types/types.ts create mode 100644 src/utils/utils.ts create mode 100644 tsconfig.json diff --git a/cypress.json b/cypress.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/cypress.json @@ -0,0 +1 @@ +{} diff --git a/cypress/fixtures/example.json b/cypress/fixtures/example.json new file mode 100644 index 0000000..02e4254 --- /dev/null +++ b/cypress/fixtures/example.json @@ -0,0 +1,5 @@ +{ + "name": "Using fixtures to represent data", + "email": "hello@cypress.io", + "body": "Fixtures are a great way to mock data for responses to routes" +} diff --git a/cypress/integration/sample_spec.ts b/cypress/integration/sample_spec.ts new file mode 100644 index 0000000..b3c95f5 --- /dev/null +++ b/cypress/integration/sample_spec.ts @@ -0,0 +1,5 @@ +describe("Reg form", () => { + it("enter some value", () => { + cy.visit() + }) +}) \ No newline at end of file diff --git a/cypress/plugins/index.js b/cypress/plugins/index.js new file mode 100644 index 0000000..63fa4f5 --- /dev/null +++ b/cypress/plugins/index.js @@ -0,0 +1,22 @@ +/// +// *********************************************************** +// This example plugins/index.tsfile can be used to load plugins +// +// You can change the location of this file or turn off loading +// the plugins file with the 'pluginsFile' configuration option. +// +// You can read more here: +// https://on.cypress.io/plugins-guide +// *********************************************************** + +// This function is called when a project is opened or re-opened (e.g. due to +// the project's config changing) + +/** + * @type {Cypress.PluginConfig} + */ +// eslint-disable-next-line no-unused-vars +module.exports = (on, config) => { + // `on` is used to hook into various events Cypress emits + // `config` is the resolved Cypress config +} diff --git a/cypress/support/commands.js b/cypress/support/commands.js new file mode 100644 index 0000000..3d8b9b6 --- /dev/null +++ b/cypress/support/commands.js @@ -0,0 +1,25 @@ +// *********************************************** +// This example commands.tsfile shows you how to +// create various custom commands and overwrite +// existing commands. +// +// For more comprehensive examples of custom +// commands please read more here: +// https://on.cypress.io/custom-commands +// *********************************************** +// +// +// -- This is a parent command -- +// Cypress.Commands.add('login', (email, password) => { ... }) +// +// +// -- This is a child command -- +// Cypress.Commands.add('drag', { prevSubject: 'element'}, (subject, options) => { ... }) +// +// +// -- This is a dual command -- +// Cypress.Commands.add('dismiss', { prevSubject: 'optional'}, (subject, options) => { ... }) +// +// +// -- This will overwrite an existing command -- +// Cypress.Commands.overwrite('visit', (originalFn, url, options) => { ... }) diff --git a/cypress/support/index.js b/cypress/support/index.js new file mode 100644 index 0000000..265454b --- /dev/null +++ b/cypress/support/index.js @@ -0,0 +1,20 @@ +// *********************************************************** +// This example support/index.tsfile is processed and +// loaded automatically before your test files. +// +// This is a great place to put global configuration and +// behavior that modifies Cypress. +// +// You can change the location of this file or turn off +// automatically serving support files with the +// 'supportFile' configuration option. +// +// You can read more here: +// https://on.cypress.io/configuration +// *********************************************************** + +// Import commands.tsfile using ES2015 syntax: +import './commands' + +// Alternatively you can use CommonJS syntax: +// require('./commands') diff --git a/cypress/videos/sample_spec.ts.mp4 b/cypress/videos/sample_spec.ts.mp4 new file mode 100644 index 0000000000000000000000000000000000000000..3678cf5176fcfff6cef7aac6a9902eccb9d141d1 GIT binary patch literal 81949 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 literal 0 HcmV?d00001 diff --git a/index.html b/index.html index 8bf48ab..58e3603 100644 --- a/index.html +++ b/index.html @@ -1,38 +1,39 @@ - - - - Calculator - - - -
-
-

0

-
- - - - - - - - - - -
-
- -
-
- - - - - -
-
+ + + + Calculator + + + +
+
+

0

+
+ + + + + + + + + +
- - +
+ +
+
+ + + + + +
+
+
+ + + \ No newline at end of file diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..8c87d77 --- /dev/null +++ b/package-lock.json @@ -0,0 +1,2035 @@ +{ + "name": "learning", + "version": "1.0.0", + "lockfileVersion": 1, + "requires": true, + "dependencies": { + "@babel/code-frame": { + "version": "7.12.11", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.11.tgz", + "integrity": "sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw==", + "dev": true, + "requires": { + "@babel/highlight": "^7.10.4" + } + }, + "@babel/helper-validator-identifier": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.5.tgz", + "integrity": "sha512-5lsetuxCLilmVGyiLEfoHBRX8UCFD+1m2x3Rj97WrW3V7H3u4RWRXA4evMjImCsin2J2YT0QaVDGf+z8ondbAg==", + "dev": true + }, + "@babel/highlight": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.5.tgz", + "integrity": "sha512-qf9u2WFWVV0MppaL877j2dBtQIDgmidgjGk5VIMw3OadXvYaXn66U1BFlH2t4+t3i+8PhedppRv+i40ABzd+gg==", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.14.5", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + }, + "dependencies": { + "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==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "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==", + "dev": true, + "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=", + "dev": true + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "@cypress/request": { + "version": "2.88.5", + "resolved": "https://registry.npmjs.org/@cypress/request/-/request-2.88.5.tgz", + "integrity": "sha512-TzEC1XMi1hJkywWpRfD2clreTa/Z+lOrXDCxxBTBPEcY5azdPi56A6Xw+O4tWJnaJH3iIE7G5aDXZC6JgRZLcA==", + "dev": true, + "requires": { + "aws-sign2": "~0.7.0", + "aws4": "^1.8.0", + "caseless": "~0.12.0", + "combined-stream": "~1.0.6", + "extend": "~3.0.2", + "forever-agent": "~0.6.1", + "form-data": "~2.3.2", + "har-validator": "~5.1.3", + "http-signature": "~1.2.0", + "is-typedarray": "~1.0.0", + "isstream": "~0.1.2", + "json-stringify-safe": "~5.0.1", + "mime-types": "~2.1.19", + "oauth-sign": "~0.9.0", + "performance-now": "^2.1.0", + "qs": "~6.5.2", + "safe-buffer": "^5.1.2", + "tough-cookie": "~2.5.0", + "tunnel-agent": "^0.6.0", + "uuid": "^3.3.2" + } + }, + "@cypress/xvfb": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@cypress/xvfb/-/xvfb-1.2.4.tgz", + "integrity": "sha512-skbBzPggOVYCbnGgV+0dmBdW/s77ZkAOXIC1knS8NagwDjBrNC1LuXtQJeiN6l+m7lzmHtaoUw/ctJKdqkG57Q==", + "dev": true, + "requires": { + "debug": "^3.1.0", + "lodash.once": "^4.1.1" + }, + "dependencies": { + "debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + } + } + }, + "@eslint/eslintrc": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.4.2.tgz", + "integrity": "sha512-8nmGq/4ycLpIwzvhI4tNDmQztZ8sp+hI7cyG8i1nQDhkAbRzHpXPidRAHlNvCZQpJTKw5ItIpMw9RSToGF00mg==", + "dev": true, + "requires": { + "ajv": "^6.12.4", + "debug": "^4.1.1", + "espree": "^7.3.0", + "globals": "^13.9.0", + "ignore": "^4.0.6", + "import-fresh": "^3.2.1", + "js-yaml": "^3.13.1", + "minimatch": "^3.0.4", + "strip-json-comments": "^3.1.1" + } + }, + "@types/node": { + "version": "15.12.4", + "resolved": "https://registry.npmjs.org/@types/node/-/node-15.12.4.tgz", + "integrity": "sha512-zrNj1+yqYF4WskCMOHwN+w9iuD12+dGm0rQ35HLl9/Ouuq52cEtd0CH9qMgrdNmi5ejC1/V7vKEXYubB+65DkA==", + "dev": true + }, + "@types/sinonjs__fake-timers": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/@types/sinonjs__fake-timers/-/sinonjs__fake-timers-6.0.2.tgz", + "integrity": "sha512-dIPoZ3g5gcx9zZEszaxLSVTvMReD3xxyyDnQUjA6IYDG9Ba2AV0otMPs+77sG9ojB4Qr2N2Vk5RnKeuA0X/0bg==", + "dev": true + }, + "@types/sizzle": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/@types/sizzle/-/sizzle-2.3.3.tgz", + "integrity": "sha512-JYM8x9EGF163bEyhdJBpR2QX1R5naCJHC8ucJylJ3w9/CVBaskdQ8WqBf8MmQrd1kRvp/a4TS8HJ+bxzR7ZJYQ==", + "dev": true + }, + "@types/yauzl": { + "version": "2.9.1", + "resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.9.1.tgz", + "integrity": "sha512-A1b8SU4D10uoPjwb0lnHmmu8wZhR9d+9o2PKBQT2jU5YPTKsxac6M2qGAdY7VcL+dHHhARVUDmeg0rOrcd9EjA==", + "dev": true, + "optional": true, + "requires": { + "@types/node": "*" + } + }, + "acorn": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", + "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", + "dev": true + }, + "acorn-jsx": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.1.tgz", + "integrity": "sha512-K0Ptm/47OKfQRpNQ2J/oIN/3QYiK6FwW+eJbILhsdxh2WTLdl+30o8aGdTbm5JbffpFFAg/g+zi1E+jvJha5ng==", + "dev": true + }, + "aggregate-error": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", + "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", + "dev": true, + "requires": { + "clean-stack": "^2.0.0", + "indent-string": "^4.0.0" + } + }, + "ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, + "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-escapes": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", + "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", + "dev": true, + "requires": { + "type-fest": "^0.21.3" + } + }, + "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" + } + }, + "arch": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/arch/-/arch-2.2.0.tgz", + "integrity": "sha512-Of/R0wqp83cgHozfIYLbBMnej79U/SVGOOyuB3VVFv1NRM/PSFMK12x9KVtiYzJqmnU5WR2qp0Z5rHb7sWGnFQ==", + "dev": true + }, + "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" + } + }, + "asn1": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", + "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==", + "dev": true, + "requires": { + "safer-buffer": "~2.1.0" + } + }, + "assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", + "dev": true + }, + "astral-regex": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", + "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", + "dev": true + }, + "async": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.0.tgz", + "integrity": "sha512-TR2mEZFVOj2pLStYxLht7TyfuRzaydfpxr3k9RpHIzMgw7A64dzsdqCxH1WJyQdoe8T10nDXd9wnEigmiuHIZw==", + "dev": true + }, + "asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", + "dev": true + }, + "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==", + "dev": true + }, + "aws-sign2": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", + "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=", + "dev": true + }, + "aws4": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.11.0.tgz", + "integrity": "sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA==", + "dev": true + }, + "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 + }, + "bcrypt-pbkdf": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", + "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", + "dev": true, + "requires": { + "tweetnacl": "^0.14.3" + } + }, + "blob-util": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/blob-util/-/blob-util-2.0.2.tgz", + "integrity": "sha512-T7JQa+zsXXEa6/8ZhHcQEW1UFfVM49Ts65uBkFL6fz2QmrElqmbajIDJvuA0tEhRe5eIjpV9ZF+0RfZR9voJFQ==", + "dev": true + }, + "bluebird": { + "version": "3.7.2", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", + "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==", + "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" + } + }, + "buffer-crc32": { + "version": "0.2.13", + "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", + "integrity": "sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI=", + "dev": true + }, + "cachedir": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/cachedir/-/cachedir-2.3.0.tgz", + "integrity": "sha512-A+Fezp4zxnit6FanDmv9EqXNAi3vt9DWp51/71UEhXukb7QUuvtv9344h91dyAxuTLoSYJFU299qzR3tzwPAhw==", + "dev": true + }, + "callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true + }, + "caseless": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", + "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=", + "dev": true + }, + "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" + }, + "dependencies": { + "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" + } + } + } + }, + "check-more-types": { + "version": "2.24.0", + "resolved": "https://registry.npmjs.org/check-more-types/-/check-more-types-2.24.0.tgz", + "integrity": "sha1-FCD/sQ/URNz8ebQ4kbv//TKoRgA=", + "dev": true + }, + "ci-info": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.2.0.tgz", + "integrity": "sha512-dVqRX7fLUm8J6FgHJ418XuIgDLZDkYcDFTeL6TA2gt5WlIZUQrrH6EZrNClwT/H0FateUsZkGIOPRrLbP+PR9A==", + "dev": true + }, + "clean-stack": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", + "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", + "dev": true + }, + "cli-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", + "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", + "dev": true, + "requires": { + "restore-cursor": "^3.1.0" + } + }, + "cli-table3": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.6.0.tgz", + "integrity": "sha512-gnB85c3MGC7Nm9I/FkiasNBOKjOiO1RNuXXarQms37q4QMpWdlbBgD/VnOStA2faG1dpXMv31RFApjX1/QdgWQ==", + "dev": true, + "requires": { + "colors": "^1.1.2", + "object-assign": "^4.1.0", + "string-width": "^4.2.0" + } + }, + "cli-truncate": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-2.1.0.tgz", + "integrity": "sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg==", + "dev": true, + "requires": { + "slice-ansi": "^3.0.0", + "string-width": "^4.2.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==", + "dev": true, + "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==", + "dev": true + }, + "colorette": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.2.2.tgz", + "integrity": "sha512-MKGMzyfeuutC/ZJ1cba9NqcNpfeqMUcYmyF1ZFY6/Cn7CNSAKx6a+s48sqLqyAiZuaP2TcqMhoo+dlwFnVxT9w==", + "dev": true + }, + "colors": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz", + "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==", + "dev": true, + "optional": true + }, + "combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "dev": true, + "requires": { + "delayed-stream": "~1.0.0" + } + }, + "commander": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-5.1.0.tgz", + "integrity": "sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==", + "dev": true + }, + "common-tags": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/common-tags/-/common-tags-1.8.0.tgz", + "integrity": "sha512-6P6g0uetGpW/sdyUy/iQQCbFF0kWVMSIVSyYz7Zgjcgh8mgw8PQzDNZeyZ5DQ2gM7LBoZPHmnjz8rUthkBG5tw==", + "dev": true + }, + "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 + }, + "core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", + "dev": true + }, + "cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "requires": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + } + }, + "cypress": { + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/cypress/-/cypress-7.6.0.tgz", + "integrity": "sha512-tTwQExY28CKt6cY85/2V1uLExcMfpBEBWXt/EcE2ht/Onl9k4lxUS7ul1UnUO5MrYwMIHMdGVh13DxdzXj4Z5w==", + "dev": true, + "requires": { + "@cypress/request": "^2.88.5", + "@cypress/xvfb": "^1.2.4", + "@types/node": "^14.14.31", + "@types/sinonjs__fake-timers": "^6.0.2", + "@types/sizzle": "^2.3.2", + "arch": "^2.2.0", + "blob-util": "^2.0.2", + "bluebird": "^3.7.2", + "cachedir": "^2.3.0", + "chalk": "^4.1.0", + "check-more-types": "^2.24.0", + "cli-cursor": "^3.1.0", + "cli-table3": "~0.6.0", + "commander": "^5.1.0", + "common-tags": "^1.8.0", + "dayjs": "^1.10.4", + "debug": "^4.3.2", + "enquirer": "^2.3.6", + "eventemitter2": "^6.4.3", + "execa": "4.1.0", + "executable": "^4.1.1", + "extract-zip": "2.0.1", + "figures": "^3.2.0", + "fs-extra": "^9.1.0", + "getos": "^3.2.1", + "is-ci": "^3.0.0", + "is-installed-globally": "~0.4.0", + "lazy-ass": "^1.6.0", + "listr2": "^3.8.3", + "lodash": "^4.17.21", + "log-symbols": "^4.0.0", + "minimist": "^1.2.5", + "ospath": "^1.2.2", + "pretty-bytes": "^5.6.0", + "ramda": "~0.27.1", + "request-progress": "^3.0.0", + "supports-color": "^8.1.1", + "tmp": "~0.2.1", + "untildify": "^4.0.0", + "url": "^0.11.0", + "yauzl": "^2.10.0" + }, + "dependencies": { + "@types/node": { + "version": "14.17.4", + "resolved": "https://registry.npmjs.org/@types/node/-/node-14.17.4.tgz", + "integrity": "sha512-8kQ3+wKGRNN0ghtEn7EGps/B8CzuBz1nXZEIGGLP2GnwbqYn4dbTs7k+VKLTq1HvZLRCIDtN3Snx1Ege8B7L5A==", + "dev": true + } + } + }, + "dashdash": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", + "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", + "dev": true, + "requires": { + "assert-plus": "^1.0.0" + } + }, + "dayjs": { + "version": "1.10.5", + "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.10.5.tgz", + "integrity": "sha512-BUFis41ikLz+65iH6LHQCDm4YPMj5r1YFLdupPIyM4SGcXMmtiLQ7U37i+hGS8urIuqe7I/ou3IS1jVc4nbN4g==", + "dev": true + }, + "debug": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", + "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", + "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 + }, + "delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", + "dev": true + }, + "doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "dev": true, + "requires": { + "esutils": "^2.0.2" + } + }, + "ecc-jsbn": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", + "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", + "dev": true, + "requires": { + "jsbn": "~0.1.0", + "safer-buffer": "^2.1.0" + } + }, + "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 + }, + "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==", + "dev": true, + "requires": { + "once": "^1.4.0" + } + }, + "enquirer": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", + "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==", + "dev": true, + "requires": { + "ansi-colors": "^4.1.1" + } + }, + "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=", + "dev": true + }, + "eslint": { + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.29.0.tgz", + "integrity": "sha512-82G/JToB9qIy/ArBzIWG9xvvwL3R86AlCjtGw+A29OMZDqhTybz/MByORSukGxeI+YPCR4coYyITKk8BFH9nDA==", + "dev": true, + "requires": { + "@babel/code-frame": "7.12.11", + "@eslint/eslintrc": "^0.4.2", + "ajv": "^6.10.0", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.0.1", + "doctrine": "^3.0.0", + "enquirer": "^2.3.5", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^5.1.1", + "eslint-utils": "^2.1.0", + "eslint-visitor-keys": "^2.0.0", + "espree": "^7.3.1", + "esquery": "^1.4.0", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", + "functional-red-black-tree": "^1.0.1", + "glob-parent": "^5.1.2", + "globals": "^13.6.0", + "ignore": "^4.0.6", + "import-fresh": "^3.0.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "js-yaml": "^3.13.1", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.0.4", + "natural-compare": "^1.4.0", + "optionator": "^0.9.1", + "progress": "^2.0.0", + "regexpp": "^3.1.0", + "semver": "^7.2.1", + "strip-ansi": "^6.0.0", + "strip-json-comments": "^3.1.0", + "table": "^6.0.9", + "text-table": "^0.2.0", + "v8-compile-cache": "^2.0.3" + }, + "dependencies": { + "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 + } + } + }, + "eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "dev": true, + "requires": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + } + }, + "eslint-utils": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", + "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", + "dev": true, + "requires": { + "eslint-visitor-keys": "^1.1.0" + }, + "dependencies": { + "eslint-visitor-keys": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", + "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", + "dev": true + } + } + }, + "eslint-visitor-keys": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", + "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", + "dev": true + }, + "espree": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-7.3.1.tgz", + "integrity": "sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g==", + "dev": true, + "requires": { + "acorn": "^7.4.0", + "acorn-jsx": "^5.3.1", + "eslint-visitor-keys": "^1.3.0" + }, + "dependencies": { + "eslint-visitor-keys": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", + "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", + "dev": true + } + } + }, + "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 + }, + "esquery": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", + "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", + "dev": true, + "requires": { + "estraverse": "^5.1.0" + }, + "dependencies": { + "estraverse": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", + "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", + "dev": true + } + } + }, + "esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "requires": { + "estraverse": "^5.2.0" + }, + "dependencies": { + "estraverse": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", + "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", + "dev": true + } + } + }, + "estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "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 + }, + "eventemitter2": { + "version": "6.4.4", + "resolved": "https://registry.npmjs.org/eventemitter2/-/eventemitter2-6.4.4.tgz", + "integrity": "sha512-HLU3NDY6wARrLCEwyGKRBvuWYyvW6mHYv72SJJAH3iJN3a6eVUvkjFkcxah1bcTgGVBBrFdIopBJPhCQFMLyXw==", + "dev": true + }, + "execa": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-4.1.0.tgz", + "integrity": "sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA==", + "dev": true, + "requires": { + "cross-spawn": "^7.0.0", + "get-stream": "^5.0.0", + "human-signals": "^1.1.1", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.0", + "onetime": "^5.1.0", + "signal-exit": "^3.0.2", + "strip-final-newline": "^2.0.0" + } + }, + "executable": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/executable/-/executable-4.1.1.tgz", + "integrity": "sha512-8iA79xD3uAch729dUG8xaaBBFGaEa0wdD2VkYLFHwlqosEj/jT66AzcreRDSgV7ehnNLBW2WR5jIXwGKjVdTLg==", + "dev": true, + "requires": { + "pify": "^2.2.0" + } + }, + "extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", + "dev": true + }, + "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==", + "dev": true, + "requires": { + "@types/yauzl": "^2.9.1", + "debug": "^4.1.1", + "get-stream": "^5.1.0", + "yauzl": "^2.10.0" + } + }, + "extsprintf": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", + "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=", + "dev": true + }, + "fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true + }, + "fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "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 + }, + "fd-slicer": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", + "integrity": "sha1-JcfInLH5B3+IkbvmHY85Dq4lbx4=", + "dev": true, + "requires": { + "pend": "~1.2.0" + } + }, + "figures": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", + "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", + "dev": true, + "requires": { + "escape-string-regexp": "^1.0.5" + } + }, + "file-entry-cache": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "dev": true, + "requires": { + "flat-cache": "^3.0.4" + } + }, + "flat-cache": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", + "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", + "dev": true, + "requires": { + "flatted": "^3.1.0", + "rimraf": "^3.0.2" + } + }, + "flatted": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.1.1.tgz", + "integrity": "sha512-zAoAQiudy+r5SvnSw3KJy5os/oRJYHzrzja/tBDqrZtNhUw8bt6y8OBzMWcjWr+8liV8Eb6yOhw8WZ7VFZ5ZzA==", + "dev": true + }, + "forever-agent": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", + "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=", + "dev": true + }, + "form-data": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", + "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", + "dev": true, + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.6", + "mime-types": "^2.1.12" + } + }, + "fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "dev": true, + "requires": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + } + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "dev": true + }, + "functional-red-black-tree": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", + "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", + "dev": true + }, + "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==", + "dev": true, + "requires": { + "pump": "^3.0.0" + } + }, + "getos": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/getos/-/getos-3.2.1.tgz", + "integrity": "sha512-U56CfOK17OKgTVqozZjUKNdkfEv6jk5WISBJ8SHoagjE6L69zOwl3Z+O8myjY9MEW3i2HPWQBt/LTbCgcC973Q==", + "dev": true, + "requires": { + "async": "^3.2.0" + } + }, + "getpass": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", + "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", + "dev": true, + "requires": { + "assert-plus": "^1.0.0" + } + }, + "glob": { + "version": "7.1.7", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", + "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", + "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" + } + }, + "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" + } + }, + "global-dirs": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-3.0.0.tgz", + "integrity": "sha512-v8ho2DS5RiCjftj1nD9NmnfaOzTdud7RRnVd9kFNOjqZbISlx5DQ+OrTkywgd0dIt7oFCvKetZSHoHcP3sDdiA==", + "dev": true, + "requires": { + "ini": "2.0.0" + } + }, + "globals": { + "version": "13.9.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.9.0.tgz", + "integrity": "sha512-74/FduwI/JaIrr1H8e71UbDE+5x7pIPs1C2rrwC52SszOo043CsWOZEMW7o2Y58xwm9b+0RBKDxY5n2sUpEFxA==", + "dev": true, + "requires": { + "type-fest": "^0.20.2" + }, + "dependencies": { + "type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true + } + } + }, + "graceful-fs": { + "version": "4.2.6", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.6.tgz", + "integrity": "sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ==", + "dev": true + }, + "har-schema": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", + "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=", + "dev": true + }, + "har-validator": { + "version": "5.1.5", + "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz", + "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==", + "dev": true, + "requires": { + "ajv": "^6.12.3", + "har-schema": "^2.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 + }, + "http-signature": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", + "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", + "dev": true, + "requires": { + "assert-plus": "^1.0.0", + "jsprim": "^1.2.2", + "sshpk": "^1.7.0" + } + }, + "human-signals": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz", + "integrity": "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==", + "dev": true + }, + "ignore": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", + "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", + "dev": true + }, + "import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "dev": true, + "requires": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + } + }, + "imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", + "dev": true + }, + "indent-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", + "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 + }, + "ini": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ini/-/ini-2.0.0.tgz", + "integrity": "sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA==", + "dev": true + }, + "is-ci": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-3.0.0.tgz", + "integrity": "sha512-kDXyttuLeslKAHYL/K28F2YkM3x5jvFPEw3yXbRptXydjD9rpLEz+C5K5iutY9ZiUu6AP41JdvRQwF4Iqs4ZCQ==", + "dev": true, + "requires": { + "ci-info": "^3.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": "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 + }, + "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-installed-globally": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.4.0.tgz", + "integrity": "sha512-iwGqO3J21aaSkC7jWnHP/difazwS7SFeIqxv6wEtLU8Y5KlzFTjyqcSIT0d8s4+dDhKytsk9PJZ2BkS5eZwQRQ==", + "dev": true, + "requires": { + "global-dirs": "^3.0.0", + "is-path-inside": "^3.0.2" + } + }, + "is-path-inside": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", + "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", + "dev": true + }, + "is-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz", + "integrity": "sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==", + "dev": true + }, + "is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", + "dev": true + }, + "is-unicode-supported": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", + "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", + "dev": true + }, + "isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", + "dev": true + }, + "isstream": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", + "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=", + "dev": true + }, + "js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true + }, + "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" + } + }, + "jsbn": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", + "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", + "dev": true + }, + "json-schema": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", + "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=", + "dev": true + }, + "json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, + "json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", + "dev": true + }, + "json-stringify-safe": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=", + "dev": true + }, + "jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.6", + "universalify": "^2.0.0" + } + }, + "jsprim": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", + "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", + "dev": true, + "requires": { + "assert-plus": "1.0.0", + "extsprintf": "1.3.0", + "json-schema": "0.2.3", + "verror": "1.10.0" + } + }, + "lazy-ass": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/lazy-ass/-/lazy-ass-1.6.0.tgz", + "integrity": "sha1-eZllXoZGwX8In90YfRUNMyTVRRM=", + "dev": true + }, + "levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, + "requires": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + } + }, + "listr2": { + "version": "3.10.0", + "resolved": "https://registry.npmjs.org/listr2/-/listr2-3.10.0.tgz", + "integrity": "sha512-eP40ZHihu70sSmqFNbNy2NL1YwImmlMmPh9WO5sLmPDleurMHt3n+SwEWNu2kzKScexZnkyFtc1VI0z/TGlmpw==", + "dev": true, + "requires": { + "cli-truncate": "^2.1.0", + "colorette": "^1.2.2", + "log-update": "^4.0.0", + "p-map": "^4.0.0", + "rxjs": "^6.6.7", + "through": "^2.3.8", + "wrap-ansi": "^7.0.0" + } + }, + "lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "dev": true + }, + "lodash.clonedeep": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", + "integrity": "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=", + "dev": true + }, + "lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true + }, + "lodash.once": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz", + "integrity": "sha1-DdOXEhPHxW34gJd9UEyI+0cal6w=", + "dev": true + }, + "lodash.truncate": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz", + "integrity": "sha1-WjUNoLERO4N+z//VgSy+WNbq4ZM=", + "dev": true + }, + "log-symbols": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", + "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", + "dev": true, + "requires": { + "chalk": "^4.1.0", + "is-unicode-supported": "^0.1.0" + } + }, + "log-update": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/log-update/-/log-update-4.0.0.tgz", + "integrity": "sha512-9fkkDevMefjg0mmzWFBW8YkFP91OrizzkW3diF7CpG+S2EYdy4+TVfGwz1zeF8x7hCx1ovSPTOE9Ngib74qqUg==", + "dev": true, + "requires": { + "ansi-escapes": "^4.3.0", + "cli-cursor": "^3.1.0", + "slice-ansi": "^4.0.0", + "wrap-ansi": "^6.2.0" + }, + "dependencies": { + "slice-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", + "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", + "dev": true, + "requires": { + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" + } + }, + "wrap-ansi": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "dev": true, + "requires": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + } + } + } + }, + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + }, + "merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "dev": true + }, + "mime-db": { + "version": "1.48.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.48.0.tgz", + "integrity": "sha512-FM3QwxV+TnZYQ2aRqhlKBMHxk10lTbMt3bBkMAp54ddrNeVSfcQYOOKuGuy3Ddrm38I04If834fOUSq1yzslJQ==", + "dev": true + }, + "mime-types": { + "version": "2.1.31", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.31.tgz", + "integrity": "sha512-XGZnNzm3QvgKxa8dpzyhFTHmpP3l5YNusmne07VUOXxou9CqUqYa/HBy124RqtVh/O2pECas/MOcsDgpilPOPg==", + "dev": true, + "requires": { + "mime-db": "1.48.0" + } + }, + "mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "dev": true + }, + "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 + }, + "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 + }, + "natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", + "dev": true + }, + "npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "dev": true, + "requires": { + "path-key": "^3.0.0" + } + }, + "oauth-sign": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", + "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", + "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=", + "dev": true + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dev": true, + "requires": { + "wrappy": "1" + } + }, + "onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "dev": true, + "requires": { + "mimic-fn": "^2.1.0" + } + }, + "optionator": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", + "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", + "dev": true, + "requires": { + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.3" + } + }, + "ospath": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/ospath/-/ospath-1.2.2.tgz", + "integrity": "sha1-EnZjl3Sj+O8lcvf+QoDg6kVQwHs=", + "dev": true + }, + "p-map": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", + "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", + "dev": true, + "requires": { + "aggregate-error": "^3.0.0" + } + }, + "parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "requires": { + "callsites": "^3.0.0" + } + }, + "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-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true + }, + "pend": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", + "integrity": "sha1-elfrVQpng/kRUzH89GY9XI4AelA=", + "dev": true + }, + "performance-now": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", + "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=", + "dev": true + }, + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true + }, + "prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true + }, + "pretty-bytes": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-5.6.0.tgz", + "integrity": "sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg==", + "dev": true + }, + "progress": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", + "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", + "dev": true + }, + "psl": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz", + "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==", + "dev": true + }, + "pump": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "dev": true, + "requires": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", + "dev": true + }, + "qs": { + "version": "6.5.2", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", + "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==", + "dev": true + }, + "querystring": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", + "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=", + "dev": true + }, + "ramda": { + "version": "0.27.1", + "resolved": "https://registry.npmjs.org/ramda/-/ramda-0.27.1.tgz", + "integrity": "sha512-PgIdVpn5y5Yns8vqb8FzBUEYn98V3xcPgawAkkgj0YJ0qDsnHCiNmZYfOGMgOvoB0eWFLpYbhxUR3mxfDIMvpw==", + "dev": true + }, + "regexpp": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", + "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", + "dev": true + }, + "request-progress": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/request-progress/-/request-progress-3.0.0.tgz", + "integrity": "sha1-TKdUCBx/7GP1BeT6qCWqBs1mnb4=", + "dev": true, + "requires": { + "throttleit": "^1.0.0" + } + }, + "require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "dev": true + }, + "resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true + }, + "restore-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", + "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", + "dev": true, + "requires": { + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" + } + }, + "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" + } + }, + "rxjs": { + "version": "6.6.7", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", + "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", + "dev": true, + "requires": { + "tslib": "^1.9.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 + }, + "safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "dev": true + }, + "semver": { + "version": "7.3.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", + "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + }, + "shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "requires": { + "shebang-regex": "^3.0.0" + } + }, + "shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true + }, + "signal-exit": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz", + "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==", + "dev": true + }, + "slice-ansi": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-3.0.0.tgz", + "integrity": "sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==", + "dev": true, + "requires": { + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" + } + }, + "sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", + "dev": true + }, + "sshpk": { + "version": "1.16.1", + "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz", + "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==", + "dev": true, + "requires": { + "asn1": "~0.2.3", + "assert-plus": "^1.0.0", + "bcrypt-pbkdf": "^1.0.0", + "dashdash": "^1.12.0", + "ecc-jsbn": "~0.1.1", + "getpass": "^0.1.1", + "jsbn": "~0.1.0", + "safer-buffer": "^2.0.2", + "tweetnacl": "~0.14.0" + } + }, + "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" + } + }, + "strip-final-newline": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", + "dev": true + }, + "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": "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" + } + }, + "table": { + "version": "6.7.1", + "resolved": "https://registry.npmjs.org/table/-/table-6.7.1.tgz", + "integrity": "sha512-ZGum47Yi6KOOFDE8m223td53ath2enHcYLgOCjGr5ngu8bdIARQk6mN/wRMv4yMRcHnCSnHbCEha4sobQx5yWg==", + "dev": true, + "requires": { + "ajv": "^8.0.1", + "lodash.clonedeep": "^4.5.0", + "lodash.truncate": "^4.4.2", + "slice-ansi": "^4.0.0", + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0" + }, + "dependencies": { + "ajv": { + "version": "8.6.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.6.0.tgz", + "integrity": "sha512-cnUG4NSBiM4YFBxgZIj/In3/6KX+rQ2l2YPRVcvAMQGWEPKuXoPIhxzwqh31jA3IPbI4qEOp/5ILI4ynioXsGQ==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + } + }, + "json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true + }, + "slice-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", + "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", + "dev": true, + "requires": { + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" + } + } + } + }, + "text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", + "dev": true + }, + "throttleit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/throttleit/-/throttleit-1.0.0.tgz", + "integrity": "sha1-nnhYNtr0Z0MUWlmEtiaNgoUorGw=", + "dev": true + }, + "through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", + "dev": true + }, + "tmp": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz", + "integrity": "sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==", + "dev": true, + "requires": { + "rimraf": "^3.0.0" + } + }, + "tough-cookie": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", + "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", + "dev": true, + "requires": { + "psl": "^1.1.28", + "punycode": "^2.1.1" + } + }, + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + }, + "tunnel-agent": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", + "dev": true, + "requires": { + "safe-buffer": "^5.0.1" + } + }, + "tweetnacl": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", + "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", + "dev": true + }, + "type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, + "requires": { + "prelude-ls": "^1.2.1" + } + }, + "type-fest": { + "version": "0.21.3", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", + "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", + "dev": true + }, + "typescript": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.3.4.tgz", + "integrity": "sha512-uauPG7XZn9F/mo+7MrsRjyvbxFpzemRjKEZXS4AK83oP2KKOJPvb+9cO/gmnv8arWZvhnjVOXz7B49m1l0e9Ew==", + "dev": true + }, + "universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "dev": true + }, + "untildify": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/untildify/-/untildify-4.0.0.tgz", + "integrity": "sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw==", + "dev": true + }, + "uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "requires": { + "punycode": "^2.1.0" + } + }, + "url": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz", + "integrity": "sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=", + "dev": true, + "requires": { + "punycode": "1.3.2", + "querystring": "0.2.0" + }, + "dependencies": { + "punycode": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", + "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=", + "dev": true + } + } + }, + "uuid": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", + "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", + "dev": true + }, + "v8-compile-cache": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", + "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", + "dev": true + }, + "verror": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", + "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", + "dev": true, + "requires": { + "assert-plus": "^1.0.0", + "core-util-is": "1.0.2", + "extsprintf": "^1.2.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" + } + }, + "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 + }, + "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" + } + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", + "dev": true + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "yauzl": { + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", + "integrity": "sha1-x+sXyT4RLLEIb6bY5R+wZnt5pfk=", + "dev": true, + "requires": { + "buffer-crc32": "~0.2.3", + "fd-slicer": "~1.1.0" + } + } + } +} diff --git a/package.json b/package.json new file mode 100644 index 0000000..f90019d --- /dev/null +++ b/package.json @@ -0,0 +1,18 @@ +{ + "name": "learning", + "version": "1.0.0", + "description": "", + "main": "index.js", + "scripts": { + "cypress:open": "cypress open", + "cypress:run": "cypress run" + }, + "author": "", + "license": "ISC", + "devDependencies": { + "@types/node": "^15.12.4", + "cypress": "^7.6.0", + "eslint": "^7.29.0", + "typescript": "^4.3.4" + } +} diff --git a/src/index.ts b/src/index.ts new file mode 100644 index 0000000..e44ca2a --- /dev/null +++ b/src/index.ts @@ -0,0 +1,3 @@ +import Calculator from "./tsfile/component/calculator.js"; + +new Calculator(document.querySelector('.calculator')!); \ No newline at end of file diff --git a/src/tsfile/component/board.ts b/src/tsfile/component/board.ts new file mode 100644 index 0000000..a02b43b --- /dev/null +++ b/src/tsfile/component/board.ts @@ -0,0 +1,29 @@ +import {BoardProps} from "../../types/types.js"; +import {isClear, isOperator} from "../../utils/utils.js"; + +class BoardImpl { + private readonly $element: HTMLDivElement; + private readonly onClick: ({type, value}: { type: string, value: string }) => void; + + constructor({$element, onClick}: BoardProps) { + this.$element = $element; + this.onClick = onClick; + this.addEvent(); + } + + addEvent = () => { + this.$element.addEventListener('click', ({target}) => { + if (!(target instanceof HTMLButtonElement)) return; + const value = target.textContent!; + if (isOperator(value)) { + return this.onClick({type: 'Operator', value}); + } + if (isClear(value)) { + return this.onClick({type: 'Clear', value}); + } + return this.onClick({type: 'Number', value}); + }) + } +} + +export default BoardImpl; \ No newline at end of file diff --git a/src/tsfile/component/calculator.ts b/src/tsfile/component/calculator.ts new file mode 100644 index 0000000..d9b2437 --- /dev/null +++ b/src/tsfile/component/calculator.ts @@ -0,0 +1,62 @@ +import ScreenImpl from "./screen.js"; +import {Screen, Operator} from "../../types/types.js"; +import BoardImpl from "./board.js"; +import {calc} from "../../utils/utils.js"; + +class Calculator { + private value: string; + private prev: string; + private operatorPressed: boolean; + private oper: Operator; + private screen: Screen; + + constructor(private $element: HTMLDivElement) { + this.value = '0'; + this.prev = ''; + this.oper = ''; + this.operatorPressed = false; + this.screen = new ScreenImpl({ + $element: this.$element.querySelector('#total')! + , value: this.value + }); + new BoardImpl({ + $element: this.$element, + onClick: this.onClick + }); + } + + setState = (value: string) => { + this.value = value; + this.screen.setState(value); + } + + onClick = ({type, value}: { type: string, value: string }) => { + switch (type) { + case 'Operator': + if (this.operatorPressed) return; + this.operatorPressed = true; + console.log(this.prev, this.oper, this.value); + this.prev = calc(this.prev, this.oper, this.value); + this.oper = value! as Operator; + this.screen.setState(this.prev); + if (value === '=') this.oper = ''; + break + case 'Clear': + this.setState('0'); + break + case 'Number': + let newValue = this.value === '0' ? value : this.value+value; + if (!this.operatorPressed) { + this.setState(newValue); + break; + } + this.operatorPressed = false; + this.setState(value); + break + default: + throw new Error('Operation fail'); + } + } +} + +export default Calculator; \ No newline at end of file diff --git a/src/tsfile/component/screen.ts b/src/tsfile/component/screen.ts new file mode 100644 index 0000000..5adb494 --- /dev/null +++ b/src/tsfile/component/screen.ts @@ -0,0 +1,21 @@ +import {Screen, ScreenProps} from "../../types/types.js"; + +class ScreenImpl implements Screen { + private readonly $element: HTMLHeadElement; + private value: string; + + constructor({$element, value}: ScreenProps) { + this.$element = $element; + this.value = value; + } + + setState = (value: string) => { + this.value = value; + this.render(); + } + render = () => { + this.$element.textContent = `${this.value}`; + } +} + +export default ScreenImpl; \ No newline at end of file diff --git a/src/types/types.ts b/src/types/types.ts new file mode 100644 index 0000000..b1af396 --- /dev/null +++ b/src/types/types.ts @@ -0,0 +1,24 @@ +type ScreenProps = { + $element: HTMLHeadElement, + value: string +}; + +type Digit = '0' | '1' | '2' | '3' | '4' | '5' | '6' | '7' | '8' | '9'; +type Operator = '+' | '-' | '/' | 'X' | '=' | ''; +type Clear = 'AC'; + +interface BoardProps { + $element: HTMLDivElement, + onClick: ({type, value}: { type: string, value: string }) => void; +} + +interface Screen { + setState: (value: string) => void; + render: () => void; +} + +interface Board { + addEvent: () => void; +} + +export {ScreenProps, Digit, Operator, Clear, BoardProps, Screen, Board}; \ No newline at end of file diff --git a/src/utils/utils.ts b/src/utils/utils.ts new file mode 100644 index 0000000..dd90c28 --- /dev/null +++ b/src/utils/utils.ts @@ -0,0 +1,36 @@ +const isOperator = (value: string): boolean => { + const allowedKey: string[] = ['+', '-', '/', 'X', '=']; + return allowedKey.indexOf(value) !== -1; +} + +const isClear = (value: string): boolean => { + const allowedKey: string = 'AC'; + return allowedKey === value; +} + +const operate = (prev: string, oper: string, value: string): string => { + const num_prev = +prev; + const num_value = +value; + + switch (oper) { + case '+': + return String(num_prev+num_value); + case '-': + return String(num_prev-num_value); + case 'X': + return String(num_prev*num_value); + case '/': + return String(Math.floor(num_prev/num_value)); + case '=': + return ''; + default: + return prev; + } +} + +const calc = (prev: string, oper: string, value: string): string => { + if (prev === '' || oper === '') return value; + return operate(prev, oper, value); +} + +export { isOperator, isClear, calc }; \ No newline at end of file diff --git a/tsconfig.json b/tsconfig.json new file mode 100644 index 0000000..736bab3 --- /dev/null +++ b/tsconfig.json @@ -0,0 +1,73 @@ +{ + "compilerOptions": { + /* Visit https://aka.ms/tsconfig.json to read more about this file */ + + /* Basic Options */ + // "incremental": true, /* Enable incremental compilation */ + "target": "es6", /* Specify ECMAScript target version: 'ES3' (default), 'ES5', 'ES2015', 'ES2016', 'ES2017', 'ES2018', 'ES2019', 'ES2020', or 'ESNEXT'. */ + "module": "ES2015", /* Specify module code generation: 'none', 'commonjs', 'amd', 'system', 'umd', 'es2015', 'es2020', or 'ESNext'. */ + // "lib": [], /* Specify library files to be included in the compilation. */ + // "allowJs": true, /* Allow javascript files to be compiled. */ + // "checkJs": true, /* Report errors in .tsfile files. */ + // "jsx": "preserve", /* Specify JSX code generation: 'preserve', 'react-native', 'react', 'react-jsx' or 'react-jsxdev'. */ + // "declaration": true, /* Generates corresponding '.d.ts' file. */ + // "declarationMap": true, /* Generates a sourcemap for each corresponding '.d.ts' file. */ + // "sourceMap": true, /* Generates corresponding '.map' file. */ + // "outFile": "./", /* Concatenate and emit output to single file. */ + "outDir": "./dist", /* Redirect output structure to the directory. */ + "rootDir": "./src", /* Specify the root directory of input files. Use to control the output directory structure with --outDir. */ + // "composite": true, /* Enable project compilation */ + // "tsBuildInfoFile": "./", /* Specify file to store incremental compilation information */ + "removeComments": true, /* Do not emit comments to output. */ + "noEmitOnError": true, + // "noEmit": true, /* Do not emit outputs. */ + // "importHelpers": true, /* Import emit helpers from 'tslib'. */ + // "downlevelIteration": true, /* Provide full support for iterables in 'for-of', spread, and destructuring when targeting 'ES5' or 'ES3'. */ + // "isolatedModules": true, /* Transpile each file as a separate module (similar to 'ts.transpileModule'). */ + + /* Strict Type-Checking Options */ + "strict": true, /* Enable all strict type-checking options. */ + // "noImplicitAny": true, /* Raise error on expressions and declarations with an implied 'any' type. */ + // "strictNullChecks": true, /* Enable strict null checks. */ + // "strictFunctionTypes": true, /* Enable strict checking of function types. */ + // "strictBindCallApply": true, /* Enable strict 'bind', 'call', and 'apply' methods on functions. */ + // "strictPropertyInitialization": true, /* Enable strict checking of property initialization in classes. */ + // "noImplicitThis": true, /* Raise error on 'this' expressions with an implied 'any' type. */ + // "alwaysStrict": true, /* Parse in strict mode and emit "use strict" for each source file. */ + + /* Additional Checks */ + "noUnusedLocals": true, /* Report errors on unused locals. */ + "noUnusedParameters": true, /* Report errors on unused parameters. */ + "noImplicitReturns": true, /* Report error when not all code paths in function return a value. */ + "noFallthroughCasesInSwitch": true, /* Report errors for fallthrough cases in switch statement. */ + "noUncheckedIndexedAccess": true, /* Include 'undefined' in index signature results */ + "noPropertyAccessFromIndexSignature": true, /* Require undeclared properties from index signatures to use element accesses. */ + + /* Module Resolution Options */ + // "moduleResolution": "node", /* Specify module resolution strategy: 'node' (Node.tsfile) or 'classic' (TypeScript pre-1.6). */ + // "baseUrl": "./", /* Base directory to resolve non-absolute module names. */ + // "paths": {}, /* A series of entries which re-map imports to lookup locations relative to the 'baseUrl'. */ + // "rootDirs": [], /* List of root folders whose combined content represents the structure of the project at runtime. */ + // "typeRoots": [], /* List of folders to include type definitions from. */ + "types": ["cypress"], /* Type declaration files to be included in compilation. */ + // "allowSyntheticDefaultImports": true, /* Allow default imports from modules with no default export. This does not affect code emit, just typechecking. */ + "esModuleInterop": true, /* Enables emit interoperability between CommonJS and ES Modules via creation of namespace objects for all imports. Implies 'allowSyntheticDefaultImports'. */ + // "preserveSymlinks": true, /* Do not resolve the real path of symlinks. */ + // "allowUmdGlobalAccess": true, /* Allow accessing UMD globals from modules. */ + + /* Source Map Options */ + // "sourceRoot": "", /* Specify the location where debugger should locate TypeScript files instead of source locations. */ + // "mapRoot": "", /* Specify the location where debugger should locate map files instead of generated locations. */ + // "inlineSourceMap": true, /* Emit a single file with source maps instead of having a separate file. */ + // "inlineSources": true, /* Emit the source alongside the sourcemaps within a single file; requires '--inlineSourceMap' or '--sourceMap' to be set. */ + + /* Experimental Options */ + // "experimentalDecorators": true, /* Enables experimental support for ES7 decorators. */ + // "emitDecoratorMetadata": true, /* Enables experimental support for emitting type metadata for decorators. */ + + /* Advanced Options */ + "skipLibCheck": true, /* Skip type checking of declaration files. */ + "forceConsistentCasingInFileNames": true /* Disallow inconsistently-cased references to the same file. */ + }, + "include": ["*/*.ts"] +} From 0adcac31cf870d516b27d1111fcd032c4ce0dfb6 Mon Sep 17 00:00:00 2001 From: kmin Date: Sun, 27 Jun 2021 17:37:02 +0900 Subject: [PATCH 2/6] =?UTF-8?q?fix:=20'=3D'=20=EC=9D=B4=ED=9B=84=20?= =?UTF-8?q?=EC=97=B0=EC=82=B0=20=EC=98=A4=EB=A5=98=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .idea/.gitignore | 5 +++++ .idea/inspectionProfiles/Project_Default.xml | 6 ++++++ .idea/javascript-calculator.iml | 12 ++++++++++++ .idea/modules.xml | 8 ++++++++ .idea/vcs.xml | 6 ++++++ src/js/index.js | 0 src/tsfile/component/calculator.ts | 8 ++++++-- src/utils/utils.ts | 2 -- 8 files changed, 43 insertions(+), 4 deletions(-) create mode 100644 .idea/.gitignore create mode 100644 .idea/inspectionProfiles/Project_Default.xml create mode 100644 .idea/javascript-calculator.iml create mode 100644 .idea/modules.xml create mode 100644 .idea/vcs.xml delete mode 100644 src/js/index.js diff --git a/.idea/.gitignore b/.idea/.gitignore new file mode 100644 index 0000000..b58b603 --- /dev/null +++ b/.idea/.gitignore @@ -0,0 +1,5 @@ +# Default ignored files +/shelf/ +/workspace.xml +# Editor-based HTTP Client requests +/httpRequests/ diff --git a/.idea/inspectionProfiles/Project_Default.xml b/.idea/inspectionProfiles/Project_Default.xml new file mode 100644 index 0000000..03d9549 --- /dev/null +++ b/.idea/inspectionProfiles/Project_Default.xml @@ -0,0 +1,6 @@ + + + + \ No newline at end of file diff --git a/.idea/javascript-calculator.iml b/.idea/javascript-calculator.iml new file mode 100644 index 0000000..0c8867d --- /dev/null +++ b/.idea/javascript-calculator.iml @@ -0,0 +1,12 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/modules.xml b/.idea/modules.xml new file mode 100644 index 0000000..ba07bc0 --- /dev/null +++ b/.idea/modules.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 0000000..94a25f7 --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/src/js/index.js b/src/js/index.js deleted file mode 100644 index e69de29..0000000 diff --git a/src/tsfile/component/calculator.ts b/src/tsfile/component/calculator.ts index d9b2437..654ddd9 100644 --- a/src/tsfile/component/calculator.ts +++ b/src/tsfile/component/calculator.ts @@ -35,13 +35,17 @@ class Calculator { case 'Operator': if (this.operatorPressed) return; this.operatorPressed = true; - console.log(this.prev, this.oper, this.value); this.prev = calc(this.prev, this.oper, this.value); this.oper = value! as Operator; this.screen.setState(this.prev); - if (value === '=') this.oper = ''; + if (value === '=') { + this.operatorPressed = false; + } break case 'Clear': + this.value = ''; + this.oper = ''; + this.prev = ''; this.setState('0'); break case 'Number': diff --git a/src/utils/utils.ts b/src/utils/utils.ts index dd90c28..aa02a1a 100644 --- a/src/utils/utils.ts +++ b/src/utils/utils.ts @@ -21,8 +21,6 @@ const operate = (prev: string, oper: string, value: string): string => { return String(num_prev*num_value); case '/': return String(Math.floor(num_prev/num_value)); - case '=': - return ''; default: return prev; } From dd749465da1551cc3cfc3682e4c26f14113a7e8a Mon Sep 17 00:00:00 2001 From: kmin Date: Sun, 27 Jun 2021 17:59:09 +0900 Subject: [PATCH 3/6] =?UTF-8?q?fix:=20'=3D'=20=EC=9D=B4=ED=9B=84=20?= =?UTF-8?q?=EC=88=AB=EC=9E=90=20=EC=9E=85=EB=A0=A5=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/tsfile/component/calculator.ts | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/src/tsfile/component/calculator.ts b/src/tsfile/component/calculator.ts index 654ddd9..991f26b 100644 --- a/src/tsfile/component/calculator.ts +++ b/src/tsfile/component/calculator.ts @@ -25,6 +25,12 @@ class Calculator { }); } + clear = () => { + this.value = ''; + this.oper = ''; + this.prev = ''; + } + setState = (value: string) => { this.value = value; this.screen.setState(value); @@ -39,16 +45,16 @@ class Calculator { this.oper = value! as Operator; this.screen.setState(this.prev); if (value === '=') { + this.value = '0'; this.operatorPressed = false; } break case 'Clear': - this.value = ''; - this.oper = ''; - this.prev = ''; + this.clear(); this.setState('0'); break case 'Number': + if (this.oper === '=') this.clear(); let newValue = this.value === '0' ? value : this.value+value; if (!this.operatorPressed) { this.setState(newValue); From abe41abf33389af032a1a183bdcf57cd64b4072c Mon Sep 17 00:00:00 2001 From: kmin Date: Sun, 27 Jun 2021 18:14:01 +0900 Subject: [PATCH 4/6] =?UTF-8?q?fix:=203=EC=9E=90=EB=A6=AC=EC=88=98=20?= =?UTF-8?q?=EC=A0=9C=ED=95=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- cypress.json | 4 +++- cypress/integration/sample_spec.ts | 4 ++-- src/tsfile/component/calculator.ts | 3 ++- 3 files changed, 7 insertions(+), 4 deletions(-) diff --git a/cypress.json b/cypress.json index 0967ef4..9fc067d 100644 --- a/cypress.json +++ b/cypress.json @@ -1 +1,3 @@ -{} +{ + "baseUrl": "http://127.0.0.1:5000/" +} diff --git a/cypress/integration/sample_spec.ts b/cypress/integration/sample_spec.ts index b3c95f5..d73a62c 100644 --- a/cypress/integration/sample_spec.ts +++ b/cypress/integration/sample_spec.ts @@ -1,5 +1,5 @@ describe("Reg form", () => { - it("enter some value", () => { - cy.visit() + it("", () => { + cy.visit('/') }) }) \ No newline at end of file diff --git a/src/tsfile/component/calculator.ts b/src/tsfile/component/calculator.ts index 991f26b..c266d61 100644 --- a/src/tsfile/component/calculator.ts +++ b/src/tsfile/component/calculator.ts @@ -45,9 +45,9 @@ class Calculator { this.oper = value! as Operator; this.screen.setState(this.prev); if (value === '=') { - this.value = '0'; this.operatorPressed = false; } + this.value = '0'; break case 'Clear': this.clear(); @@ -55,6 +55,7 @@ class Calculator { break case 'Number': if (this.oper === '=') this.clear(); + if (this.value.length === 3) break; let newValue = this.value === '0' ? value : this.value+value; if (!this.operatorPressed) { this.setState(newValue); From 54c8c86ec2dc0126423b190baf64781a40d91d6e Mon Sep 17 00:00:00 2001 From: kmin Date: Sun, 27 Jun 2021 19:16:31 +0900 Subject: [PATCH 5/6] =?UTF-8?q?feat:=20test=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- cypress.json | 6 ++++- cypress/integration/sample_spec.ts | 42 ++++++++++++++++++++++++++++-- 2 files changed, 45 insertions(+), 3 deletions(-) diff --git a/cypress.json b/cypress.json index 9fc067d..3d8d2be 100644 --- a/cypress.json +++ b/cypress.json @@ -1,3 +1,7 @@ { - "baseUrl": "http://127.0.0.1:5000/" + "baseUrl": "http://localhost:5050", + "env": { + "TOTAL": "#total", + "MODIFIER": ".modifier" + } } diff --git a/cypress/integration/sample_spec.ts b/cypress/integration/sample_spec.ts index d73a62c..8c12617 100644 --- a/cypress/integration/sample_spec.ts +++ b/cypress/integration/sample_spec.ts @@ -1,5 +1,43 @@ describe("Reg form", () => { - it("", () => { - cy.visit('/') + const clickButtons = (values: string): void => { + const charFromValues = values.split(""); + charFromValues.forEach((char) => { + cy.get("button").contains(char).click(); + }) + }; + + const calculate = (expression: string, expectedResult: string): void => { + clickButtons(expression); + cy.get(Cypress.env("TOTAL")).should('have.text', expectedResult); + cy.get(Cypress.env("MODIFIER")).click(); + } + it("input numbers must be in range 0 ~ 999", () => { + cy.visit("/"); + clickButtons("123111"); + cy.get(Cypress.env("TOTAL")).should("have.text", "123"); + }) + it("clear board", () => { + cy.get(Cypress.env("MODIFIER")).click(); + cy.get(Cypress.env("TOTAL")).should("have.text", "0"); + }) + it("add numbers", () => { + calculate("123+123=","246"); + calculate("123+123+","246"); + calculate("123+123+123=","369"); + }) + it("multiply numbers", () => { + calculate("123X123=","15129"); + calculate("123X123X","15129"); + calculate("123X123X123=","1860867"); + }) + it("divide numbers", () => { + calculate("123/123=","1"); + calculate("123/123/","1"); + calculate("123/123/123=","0"); + }) + it("subtract numbers", () => { + calculate("123-123=","0"); + calculate("123-123-","0"); + calculate("123-123-123=","-123"); }) }) \ No newline at end of file From fd542c47726ba92c2ce1bf65d0933c56dfa26e47 Mon Sep 17 00:00:00 2001 From: kmin Date: Sun, 27 Jun 2021 19:43:05 +0900 Subject: [PATCH 6/6] =?UTF-8?q?fix:=20dist=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 1 - dist/index.js | 2 + dist/tsfile/component/board.js | 23 ++++++++++ dist/tsfile/component/calculator.js | 65 +++++++++++++++++++++++++++++ dist/tsfile/component/screen.js | 14 +++++++ dist/types/types.js | 1 + dist/utils/utils.js | 30 +++++++++++++ 7 files changed, 135 insertions(+), 1 deletion(-) create mode 100644 dist/index.js create mode 100644 dist/tsfile/component/board.js create mode 100644 dist/tsfile/component/calculator.js create mode 100644 dist/tsfile/component/screen.js create mode 100644 dist/types/types.js create mode 100644 dist/utils/utils.js diff --git a/.gitignore b/.gitignore index a1066ba..19b4ef7 100644 --- a/.gitignore +++ b/.gitignore @@ -249,7 +249,6 @@ typings/ # Nuxt.js build / generate output .nuxt -dist # Gatsby files .cache/ diff --git a/dist/index.js b/dist/index.js new file mode 100644 index 0000000..aa62084 --- /dev/null +++ b/dist/index.js @@ -0,0 +1,2 @@ +import Calculator from "./tsfile/component/calculator.js"; +new Calculator(document.querySelector('.calculator')); diff --git a/dist/tsfile/component/board.js b/dist/tsfile/component/board.js new file mode 100644 index 0000000..290cecf --- /dev/null +++ b/dist/tsfile/component/board.js @@ -0,0 +1,23 @@ +import { isClear, isOperator } from "../../utils/utils.js"; +class BoardImpl { + constructor({ $element, onClick }) { + this.addEvent = () => { + this.$element.addEventListener('click', ({ target }) => { + if (!(target instanceof HTMLButtonElement)) + return; + const value = target.textContent; + if (isOperator(value)) { + return this.onClick({ type: 'Operator', value }); + } + if (isClear(value)) { + return this.onClick({ type: 'Clear', value }); + } + return this.onClick({ type: 'Number', value }); + }); + }; + this.$element = $element; + this.onClick = onClick; + this.addEvent(); + } +} +export default BoardImpl; diff --git a/dist/tsfile/component/calculator.js b/dist/tsfile/component/calculator.js new file mode 100644 index 0000000..5a04f8c --- /dev/null +++ b/dist/tsfile/component/calculator.js @@ -0,0 +1,65 @@ +import ScreenImpl from "./screen.js"; +import BoardImpl from "./board.js"; +import { calc } from "../../utils/utils.js"; +class Calculator { + constructor($element) { + this.$element = $element; + this.clear = () => { + this.value = ''; + this.oper = ''; + this.prev = ''; + }; + this.setState = (value) => { + this.value = value; + this.screen.setState(value); + }; + this.onClick = ({ type, value }) => { + switch (type) { + case 'Operator': + if (this.operatorPressed) + return; + this.operatorPressed = true; + this.prev = calc(this.prev, this.oper, this.value); + this.oper = value; + this.screen.setState(this.prev); + if (value === '=') { + this.operatorPressed = false; + } + this.value = '0'; + break; + case 'Clear': + this.clear(); + this.setState('0'); + break; + case 'Number': + if (this.oper === '=') + this.clear(); + if (this.value.length === 3) + break; + let newValue = this.value === '0' ? value : this.value + value; + if (!this.operatorPressed) { + this.setState(newValue); + break; + } + this.operatorPressed = false; + this.setState(value); + break; + default: + throw new Error('Operation fail'); + } + }; + this.value = '0'; + this.prev = ''; + this.oper = ''; + this.operatorPressed = false; + this.screen = new ScreenImpl({ + $element: this.$element.querySelector('#total'), + value: this.value + }); + new BoardImpl({ + $element: this.$element, + onClick: this.onClick + }); + } +} +export default Calculator; diff --git a/dist/tsfile/component/screen.js b/dist/tsfile/component/screen.js new file mode 100644 index 0000000..5719282 --- /dev/null +++ b/dist/tsfile/component/screen.js @@ -0,0 +1,14 @@ +class ScreenImpl { + constructor({ $element, value }) { + this.setState = (value) => { + this.value = value; + this.render(); + }; + this.render = () => { + this.$element.textContent = `${this.value}`; + }; + this.$element = $element; + this.value = value; + } +} +export default ScreenImpl; diff --git a/dist/types/types.js b/dist/types/types.js new file mode 100644 index 0000000..cb0ff5c --- /dev/null +++ b/dist/types/types.js @@ -0,0 +1 @@ +export {}; diff --git a/dist/utils/utils.js b/dist/utils/utils.js new file mode 100644 index 0000000..29de25b --- /dev/null +++ b/dist/utils/utils.js @@ -0,0 +1,30 @@ +const isOperator = (value) => { + const allowedKey = ['+', '-', '/', 'X', '=']; + return allowedKey.indexOf(value) !== -1; +}; +const isClear = (value) => { + const allowedKey = 'AC'; + return allowedKey === value; +}; +const operate = (prev, oper, value) => { + const num_prev = +prev; + const num_value = +value; + switch (oper) { + case '+': + return String(num_prev + num_value); + case '-': + return String(num_prev - num_value); + case 'X': + return String(num_prev * num_value); + case '/': + return String(Math.floor(num_prev / num_value)); + default: + return prev; + } +}; +const calc = (prev, oper, value) => { + if (prev === '' || oper === '') + return value; + return operate(prev, oper, value); +}; +export { isOperator, isClear, calc };