From c8ec772ab33fd33a8876ca177cf213f3db380c2e Mon Sep 17 00:00:00 2001 From: Kacarott Date: Thu, 3 Sep 2020 07:57:10 +0200 Subject: [PATCH 1/7] Can cooperate with Terminus (allows inputs) --- lib/runtime.js | 22 ++++++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) diff --git a/lib/runtime.js b/lib/runtime.js index 01e2ea3b..a0236035 100644 --- a/lib/runtime.js +++ b/lib/runtime.js @@ -49,8 +49,6 @@ export default class Runtime { // * "File Based" // input (Optional) - {String} that'll be provided to the `stdin` of the new process execute(argType = 'Selection Based', input = null, options = null) { - if (atom.config.get('script.stopOnRerun')) this.stop(); - this.emitter.emit('start'); const codeContext = this.codeContextBuilder.buildCodeContext( atom.workspace.getActiveTextEditor(), argType); @@ -62,6 +60,26 @@ export default class Runtime { const executionOptions = !options ? this.scriptOptions : options; const commandContext = CommandContext.build(this, executionOptions, codeContext); + + // Will cooperate with Terminus to allow for inputs, if user has installed. + try { + var terminus = require('../../terminus/lib/terminus.js').provideTerminus(); + } catch (e) { + var terminus = null; + console.log("Could not find Terminus"); + } + if (terminus != null) { + var command = commandContext.command; + for (let i = 0; i < commandContext.args.length; i++) { + command += ' "' + commandContext.args[i] + '"'; + } + terminus.run(['printf "\\33c\\e[3J" && ' + command]); + return; + } + + if (atom.config.get('script.stopOnRerun')) this.stop(); + this.emitter.emit('start'); + if (!commandContext) return; if (commandContext.workingDirectory) { From a079a498a45f0a70799efcf2d8d793510bd47c06 Mon Sep 17 00:00:00 2001 From: Amin Yahyaabadi Date: Tue, 29 Dec 2020 17:29:06 -0600 Subject: [PATCH 2/7] chore: eslint fix --- lib/runtime.js | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) diff --git a/lib/runtime.js b/lib/runtime.js index a0236035..c50566a9 100644 --- a/lib/runtime.js +++ b/lib/runtime.js @@ -49,7 +49,6 @@ export default class Runtime { // * "File Based" // input (Optional) - {String} that'll be provided to the `stdin` of the new process execute(argType = 'Selection Based', input = null, options = null) { - const codeContext = this.codeContextBuilder.buildCodeContext( atom.workspace.getActiveTextEditor(), argType); @@ -66,16 +65,16 @@ export default class Runtime { var terminus = require('../../terminus/lib/terminus.js').provideTerminus(); } catch (e) { var terminus = null; - console.log("Could not find Terminus"); + console.log('Could not find Terminus'); } if (terminus != null) { - var command = commandContext.command; - for (let i = 0; i < commandContext.args.length; i++) { - command += ' "' + commandContext.args[i] + '"'; - } - terminus.run(['printf "\\33c\\e[3J" && ' + command]); - return; - } + let command = commandContext.command; + for (let i = 0; i < commandContext.args.length; i++) { + command += ` "${commandContext.args[i]}"`; + } + terminus.run([`printf "\\33c\\e[3J" && ${command}`]); + return; + } if (atom.config.get('script.stopOnRerun')) this.stop(); this.emitter.emit('start'); From 1ad29d3549c0938c4e64faf0dc5fdc671d1670cb Mon Sep 17 00:00:00 2001 From: Tony Brix Date: Sun, 21 Mar 2021 00:23:23 -0500 Subject: [PATCH 3/7] consume terminal services --- lib/runtime.js | 18 +++++++----------- lib/script.js | 15 ++++++++++++--- package.json | 32 ++++++++++++++++++++++++++++++++ 3 files changed, 51 insertions(+), 14 deletions(-) diff --git a/lib/runtime.js b/lib/runtime.js index c50566a9..caabf25c 100644 --- a/lib/runtime.js +++ b/lib/runtime.js @@ -10,10 +10,11 @@ export default class Runtime { // Public: Initializes a new {Runtime} instance // // This class is responsible for properly configuring {Runner} - constructor(runner, codeContextBuilder, observers = []) { + constructor(runner, codeContextBuilder, observers = [], terminals = []) { this.runner = runner; this.codeContextBuilder = codeContextBuilder; this.observers = observers; + this.terminals = terminals; this.emitter = new Emitter(); this.scriptOptions = this.runner.scriptOptions; _.each(this.observers, observer => observer.observe(this)); @@ -59,21 +60,16 @@ export default class Runtime { const executionOptions = !options ? this.scriptOptions : options; const commandContext = CommandContext.build(this, executionOptions, codeContext); - - // Will cooperate with Terminus to allow for inputs, if user has installed. - try { - var terminus = require('../../terminus/lib/terminus.js').provideTerminus(); - } catch (e) { - var terminus = null; - console.log('Could not find Terminus'); - } - if (terminus != null) { + const terminal = this.terminals[0]; + if (terminal) { let command = commandContext.command; for (let i = 0; i < commandContext.args.length; i++) { command += ` "${commandContext.args[i]}"`; } - terminus.run([`printf "\\33c\\e[3J" && ${command}`]); + terminal.run([`printf "\\33c\\e[3J" && ${command}`]); return; + } else { + console.log("No terminal found"); } if (atom.config.get('script.stopOnRerun')) this.stop(); diff --git a/lib/script.js b/lib/script.js index 710dfa7e..b9a4b5f3 100644 --- a/lib/script.js +++ b/lib/script.js @@ -1,6 +1,6 @@ 'use babel'; -import { CompositeDisposable } from 'atom'; +import { CompositeDisposable, Disposable } from 'atom'; import CodeContextBuilder from './code-context-builder'; import GrammarUtils from './grammar-utils'; @@ -63,6 +63,7 @@ export default { scriptProfileRunView: null, scriptOptions: null, scriptProfiles: [], + terminals: [], activate(state) { this.scriptView = new ScriptView(state.scriptViewState); @@ -85,7 +86,7 @@ export default { const observer = new ViewRuntimeObserver(this.scriptView); - this.runtime = new Runtime(runner, codeContextBuilder, [observer]); + this.runtime = new Runtime(runner, codeContextBuilder, [observer], this.terminals); this.subscriptions = new CompositeDisposable(); this.subscriptions.add(atom.commands.add('atom-workspace', { @@ -153,6 +154,7 @@ export default { this.scriptOptionsView.close(); this.scriptProfileRunView.close(); this.subscriptions.dispose(); + this.terminals.length = 0; GrammarUtils.deleteTempFiles(); }, @@ -161,6 +163,13 @@ export default { this.scriptView.removePanel(); }, + consumeTerminal(terminal) { + this.terminals.push(terminal); + return new Disposable(() => { + this.terminals = this.terminals.filter((t) => t !== terminal); + }); + }, + // Public // // Service method that provides the default runtime that's configurable through Atom editor @@ -199,7 +208,7 @@ export default { const runner = new Runner(new ScriptOptions()); const codeContextBuilder = new CodeContextBuilder(); - return new Runtime(runner, codeContextBuilder, []); + return new Runtime(runner, codeContextBuilder, [], this.terminals); }, serialize() { diff --git a/package.json b/package.json index 9522c892..a96b025f 100644 --- a/package.json +++ b/package.json @@ -52,6 +52,38 @@ } } }, + "consumedServices": { + "runInTerminal": { + "description": "Allow to run commands in platformio-ide-terminal.", + "versions": { + "0.14.5": "consumeTerminal" + } + }, + "platformioIDETerminal": { + "description": "Allow to run commands in platformio-ide-terminal.", + "versions": { + "^1.1.0": "consumeTerminal" + } + }, + "terminusTerminal": { + "description": "Allow to run commands in terminus.", + "versions": { + "^1.1.1": "consumeTerminal" + } + }, + "terminationTerminal": { + "description": "Allow to run commands in termination.", + "versions": { + "^1.1.0": "consumeTerminal" + } + }, + "terminal": { + "description": "Allow to run commands in terminal.", + "versions": { + "^1.0.0": "consumeTerminal" + } + } + }, "scripts": { "lint": "eslint .", "lint:fix": "eslint . --fix", From f30474a99376e94fe8ea241c3ff64562ca0bfce8 Mon Sep 17 00:00:00 2001 From: Amin Yahyaabadi Date: Sun, 21 Mar 2021 11:22:22 -0500 Subject: [PATCH 4/7] Merge branch 'master' into Terminus --- .eslintignore | 2 - .eslintrc.json | 4 + .eslintrc.yml | 21 - .github/workflows/CI.yml | 70 +- .github/workflows/bump_deps.yml | 32 +- .mailmap | 104 +- .npmrc | 4 + .prettierignore | 6 + CHANGELOG.md | 95 + CONTRIBUTING.md | 23 +- LICENSE.md | 2 +- README.md | 387 +- coffeelint.json | 5 - examples/color.py | 10 +- examples/greeter.ts | 10 +- examples/hello.html | 10 +- examples/jxa.js | 6 +- examples/longrun.js | 12 +- examples/longrun.ts | 14 +- examples/modern.js | 6 +- examples/mongodb.js | 2 +- examples/stylish-css.scss | 2 +- lib/code-context-builder.js | 124 +- lib/code-context.js | 54 +- lib/command-context.js | 72 +- lib/grammar-utils.js | 70 +- lib/grammar-utils/R.js | 9 +- lib/grammar-utils/d.js | 33 +- lib/grammar-utils/java.js | 27 +- lib/grammar-utils/lisp.js | 43 +- lib/grammar-utils/matlab.js | 33 +- lib/grammar-utils/nim.js | 47 +- lib/grammar-utils/operating-system.js | 21 +- lib/grammar-utils/perl.js | 9 +- lib/grammar-utils/php.js | 13 +- lib/grammars.js | 45 +- lib/grammars/babel.config.js | 13 + lib/grammars/coffeescript.coffee | 3 +- lib/grammars/doc.coffee | 5 + lib/grammars/javascript.js | 90 +- lib/grammars/perl.coffee | 8 +- lib/header-view.js | 29 +- lib/link-paths.js | 29 +- lib/runner.js | 178 +- lib/runtime.js | 117 +- lib/script-input-view.js | 76 +- lib/script-options-view.js | 221 +- lib/script-options.js | 62 +- lib/script-profile-run-view.js | 192 +- lib/script-view.js | 207 +- lib/script.js | 459 +-- lib/view-runtime-observer.js | 54 +- package.json | 71 +- pnpm-lock.yaml | 4835 +++++++++++++++++++++++++ spec/code-context-builder-spec.js | 102 +- spec/code-context-spec.js | 268 +- spec/fixtures/ioTest.js | 10 +- spec/fixtures/issue_2358.py | 9 + spec/fixtures/outputTest.js | 2 +- spec/fixtures/stdinEndTest.js | 10 +- spec/fixtures/throw.js | 2 +- spec/grammar-utils/lisp-spec.js | 97 +- spec/grammars-spec.js | 230 +- spec/link-paths-spec.js | 55 +- spec/runner-spec.js | 116 +- spec/script-options-spec.js | 95 +- spec/script-options-view-spec.js | 141 +- styles/script.less | 3 +- 68 files changed, 7182 insertions(+), 2034 deletions(-) delete mode 100644 .eslintignore create mode 100644 .eslintrc.json delete mode 100644 .eslintrc.yml create mode 100644 .npmrc create mode 100644 .prettierignore delete mode 100644 coffeelint.json create mode 100644 lib/grammars/babel.config.js create mode 100644 pnpm-lock.yaml create mode 100644 spec/fixtures/issue_2358.py diff --git a/.eslintignore b/.eslintignore deleted file mode 100644 index e3ffa30b..00000000 --- a/.eslintignore +++ /dev/null @@ -1,2 +0,0 @@ -spec/fixtures -examples diff --git a/.eslintrc.json b/.eslintrc.json new file mode 100644 index 00000000..a7fdb978 --- /dev/null +++ b/.eslintrc.json @@ -0,0 +1,4 @@ +{ + "extends": "eslint-config-atomic", + "ignorePatterns": ["dist/", "node_modules/", "spec/fixtures", "examples", "lib/grammars/*.coffee"] +} diff --git a/.eslintrc.yml b/.eslintrc.yml deleted file mode 100644 index 2ae0b283..00000000 --- a/.eslintrc.yml +++ /dev/null @@ -1,21 +0,0 @@ -extends: airbnb-base -parser: babel-eslint -env: - browser: true - node: true - jasmine: true - -globals: - atom: true - -settings: - import/core-modules: [ atom ] - -rules: - no-restricted-syntax: [0, "FunctionExpression", "no-restricted-syntax"] - no-param-reassign: [0] - class-methods-use-this: [0] - default-case: [0] - guard-for-in: [0] - no-this-before-super: [0] - prefer-rest-params: [0] diff --git a/.github/workflows/CI.yml b/.github/workflows/CI.yml index 0fab52b0..9bd21c5f 100644 --- a/.github/workflows/CI.yml +++ b/.github/workflows/CI.yml @@ -41,40 +41,48 @@ jobs: with: fetch-depth: 0 - name: Commit lint ✨ - uses: wagoid/commitlint-github-action@v1 - - uses: actions/setup-node@v2 + uses: wagoid/commitlint-github-action@v2 + + - uses: UziTech/action-setup-atom@v1 + - name: Setup PNPM + uses: pnpm/action-setup@v1.2.1 with: - node-version: "12.x" - - name: Install NPM dependencies - run: | - npm install + version: latest + + - name: Install dependencies + run: pnpm install + + - name: Format ✨ + run: pnpm test.format + - name: Lint ✨ - run: npm run lint + run: pnpm test.lint + + Release: + needs: [Test, Lint] + if: github.ref == 'refs/heads/master' && + github.event.repository.fork == false + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + - uses: UziTech/action-setup-atom@v1 + - uses: actions/setup-node@v1 + with: + node-version: "12.x" + - name: NPM install + run: npm install - # Release: - # needs: [Test, Lint] - # if: github.ref == 'refs/heads/master' && - # github.event.repository.fork == false - # runs-on: ubuntu-latest - # steps: - # - uses: actions/checkout@v2 - # - uses: UziTech/action-setup-atom@v1 - # - uses: actions/setup-node@v1 - # with: - # node-version: "12.x" - # - name: NPM install - # run: npm install - # - name: Build and Commit - # run: npm run build-commit - # # NOTE: uncomment when ready - # # - name: Release 🎉 - # # uses: cycjimmy/semantic-release-action@v2 - # # with: - # # extends: | - # # @semantic-release/apm-config - # # env: - # # GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - # # ATOM_ACCESS_TOKEN: ${{ secrets.ATOM_ACCESS_TOKEN }} + # - name: Build and Commit + # run: npm run build-commit + + - name: Release 🎉 + uses: cycjimmy/semantic-release-action@v2 + with: + extends: | + @semantic-release/apm-config + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + ATOM_ACCESS_TOKEN: ${{ secrets.ATOM_ACCESS_TOKEN }} Skip: if: contains(github.event.head_commit.message, '[skip ci]') diff --git a/.github/workflows/bump_deps.yml b/.github/workflows/bump_deps.yml index c77f21ed..8b62dda0 100644 --- a/.github/workflows/bump_deps.yml +++ b/.github/workflows/bump_deps.yml @@ -2,24 +2,27 @@ name: Bump_Dependencies on: schedule: - - cron: "0 0 * * *" + - cron: "5 8 * * Sun" # 8:05 every Sunday jobs: Bump_Dependencies: runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 - - uses: actions/setup-node@v2-beta + - uses: actions/setup-node@v2 with: node-version: "12" + - name: Setup PNPM + uses: pnpm/action-setup@master + with: + version: latest - name: setup npm-check-updates - run: npm install -g npm-check-updates + run: pnpm install -g npm-check-updates - run: | ncu -u --dep prod - npm install - + pnpm install - uses: tibdex/github-app-token@v1 id: generate-token @@ -29,26 +32,29 @@ jobs: - uses: peter-evans/create-pull-request@v3 with: token: ${{ steps.generate-token.outputs.token }} - commit-message: Update Dependencies - title: "fix: Update Dependencies" + commit-message: "fix: update Dependencies" + title: "fix: update Dependencies" labels: Dependencies branch: "Bump_Dependencies" - Bump_devDependencies: runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 - - uses: actions/setup-node@v2-beta + - uses: actions/setup-node@v2 with: node-version: "12" + - name: Setup PNPM + uses: pnpm/action-setup@master + with: + version: latest - name: setup npm-check-updates - run: npm install -g npm-check-updates + run: pnpm install -g npm-check-updates - run: | ncu -u --dep dev - npm install + pnpm install - uses: tibdex/github-app-token@v1 id: generate-token @@ -58,7 +64,7 @@ jobs: - uses: peter-evans/create-pull-request@v3 with: token: ${{ steps.generate-token.outputs.token }} - commit-message: Update devDependencies - title: "chore: Update devDependencies" + commit-message: "chore: update devDependencies" + title: "chore: update devDependencies" labels: Dependencies branch: "Bump_devDependencies" diff --git a/.mailmap b/.mailmap index 9722533f..ffcf05d1 100644 --- a/.mailmap +++ b/.mailmap @@ -1,54 +1,54 @@ -Alexey Slaykovsky Alexey Slaykovsky -Andy Hayden Andy Hayden -Ash Wilson Ash Wilson -Calvin Bottoms Calvin Bottoms -Calyhre Calyhre -Christian Kjaer Laustsen Christian Kjaer Laustsen -Ciaran Downey Ciaran Downey -Dan Dan -Daniel Bayley Daniel Bayley -Daniel Chatfield Daniel Chatfield -Dustin Blackman Dustin Blackman -Erran Carey Erran Carey -Florian Lefèvre Florian Lefèvre -Hans Rødtang Hans Rødtang -Hikaru Ojima Hikaru Ojima -Ilya Palkin Ilya Palkin -Ivan Storck Ivan Storck -Jake Sankey Jake Sankey -Johan Bruning Johan Bruning +Alexey Slaykovsky Alexey Slaykovsky +Andy Hayden Andy Hayden +Ash Wilson Ash Wilson +Calvin Bottoms Calvin Bottoms +Calyhre Calyhre +Christian Kjaer Laustsen Christian Kjaer Laustsen +Ciaran Downey Ciaran Downey +Dan Dan +Daniel Bayley Daniel Bayley +Daniel Chatfield Daniel Chatfield +Dustin Blackman Dustin Blackman +Erran Carey Erran Carey +Florian Lefèvre Florian Lefèvre +Hans Rødtang Hans Rødtang +Hikaru Ojima Hikaru Ojima +Ilya Palkin Ilya Palkin +Ivan Storck Ivan Storck +Jake Sankey Jake Sankey +Johan Bruning Johan Bruning Kyle Kelley Kyle Kelley -Kyle Kelley Kyle Kelley -Kyle Kelley rgbkrk -Lance Batson Lance Batson -Lance Batson Lance Batson -Lance Batson Lance Batson -Liam Dawson Liam Dawson -Lucas Magno Lucas Magno -Marek Piechut Marek Piechut -Mirek Rusin Mirek Rusin -Otto Robba Otto Robba -Pedro Rodriguez Pedro Rodriguez -Rafael Belvederese Rafael Belvederese -Rnhmjoj Rnhmjoj -Rodolfo Carvalho Rodolfo Carvalho -Sagi Sagi -Sergey Koshelev Sergey Koshelev -ThiconZ ThiconZ -ThiconZ ThiconZ -Tomasz Grodzki Tomasz Grodzki -Will Sahatdjian Will Sahatdjian -Yeonghoon Park Yeonghoon Park -benjamin benjamin -bryanweatherly bryanweatherly -cdingpeng cdingpeng -cormullion cormullion -dev dev -elclanrs elclanrs -fazo96 fazo96 -gerane gerane -jbtule jbtule -kami kami -liamdawson liamdawson -morinmorin morinmorin +Kyle Kelley Kyle Kelley +Kyle Kelley rgbkrk +Lance Batson Lance Batson +Lance Batson Lance Batson +Lance Batson Lance Batson +Liam Dawson Liam Dawson +Lucas Magno Lucas Magno +Marek Piechut Marek Piechut +Mirek Rusin Mirek Rusin +Otto Robba Otto Robba +Pedro Rodriguez Pedro Rodriguez +Rafael Belvederese Rafael Belvederese +Rnhmjoj Rnhmjoj +Rodolfo Carvalho Rodolfo Carvalho +Sagi Sagi +Sergey Koshelev Sergey Koshelev +ThiconZ ThiconZ +ThiconZ ThiconZ +Tomasz Grodzki Tomasz Grodzki +Will Sahatdjian Will Sahatdjian +Yeonghoon Park Yeonghoon Park +benjamin benjamin +bryanweatherly bryanweatherly +cdingpeng cdingpeng +cormullion cormullion +dev dev +elclanrs elclanrs +fazo96 fazo96 +gerane gerane +jbtule jbtule +kami kami +liamdawson liamdawson +morinmorin morinmorin icedvariables macodeblacko@gmail.com <=> diff --git a/.npmrc b/.npmrc new file mode 100644 index 00000000..ac5613f6 --- /dev/null +++ b/.npmrc @@ -0,0 +1,4 @@ +public-hoist-pattern[]=* +package-lock=false +lockfile=true +prefer-frozen-lockfile=false diff --git a/.prettierignore b/.prettierignore new file mode 100644 index 00000000..80457e4a --- /dev/null +++ b/.prettierignore @@ -0,0 +1,6 @@ +node_modules +pnpm-lock.yaml +package-lock.json +CHANGELOG.md +dist +.mypy_cache diff --git a/CHANGELOG.md b/CHANGELOG.md index 79875669..48583590 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,98 @@ +# [3.30.0](https://github.com/atom-ide-community/atom-script/compare/v3.29.6...v3.30.0) (2021-03-21) + + +### Bug Fixes + +* remove unused variable ([822bfcb](https://github.com/atom-ide-community/atom-script/commit/822bfcbb696d44db9749dcc1ae60e8115bd9155c)) +* use multi-line literal instead of concatenation ([e23e2ab](https://github.com/atom-ide-community/atom-script/commit/e23e2abab02e62c1e66e233abccacd62ba1c49d2)) +* use parameters directly as config options ([e21cd59](https://github.com/atom-ide-community/atom-script/commit/e21cd5983d2a458c07b50106f95b5080ee7cae37)) + + +### Features + +* make position of output panel configurable ([004525a](https://github.com/atom-ide-community/atom-script/commit/004525a03a510046410ece45ec936abcf5f2ac2c)) + +## [3.29.6](https://github.com/atom-ide-community/atom-script/compare/v3.29.5...v3.29.6) (2021-03-21) + + +### Bug Fixes + +* es6 export in garammars/javascript ([531a015](https://github.com/atom-ide-community/atom-script/commit/531a015f88714c167b3b1f524d696a7a3298d387)) +* eslint fix ([e5b807d](https://github.com/atom-ide-community/atom-script/commit/e5b807d91e47528f8d213d9db581123c3db7746a)) +* export entry functions directly ([9783277](https://github.com/atom-ide-community/atom-script/commit/97832771c6e3cf9a1f2943ba2e128d4c720bb067)) +* update dependencies ([7dc0e3d](https://github.com/atom-ide-community/atom-script/commit/7dc0e3d2cd6476fede46c436cb0f71ef180fa718)) + +## [3.29.5](https://github.com/atom-ide-community/atom-script/compare/v3.29.4...v3.29.5) (2021-03-21) + + +### Bug Fixes + +* try catch toHtml ([b9cd891](https://github.com/atom-ide-community/atom-script/commit/b9cd89128dd207045b84461b01aaf663b03e4a5c)) + +## [3.29.4](https://github.com/atom-ide-community/atom-script/compare/v3.29.3...v3.29.4) (2021-03-21) + + +### Bug Fixes + +* if arg is not string assign it ([f7f591e](https://github.com/atom-ide-community/atom-script/commit/f7f591e2fc7c89bf63cd1bb9cdd01fb113bfbd59)) + +## [3.29.3](https://github.com/atom-ide-community/atom-script/compare/v3.29.2...v3.29.3) (2020-12-30) + + +### Bug Fixes + +* add activation hook to defer the package's loading ([985bd4e](https://github.com/atom-ide-community/atom-script/commit/985bd4e5c7e83819dc81f7a10873691b756571ca)) + +## [3.29.2](https://github.com/atom-ide-community/atom-script/compare/v3.29.1...v3.29.2) (2020-12-30) + + +### Bug Fixes + +* eslint --fix ([095d03c](https://github.com/atom-ide-community/atom-script/commit/095d03c3cbe01370de7e04f83553e75aebc393ca)) +* update eslint ([5754954](https://github.com/atom-ide-community/atom-script/commit/5754954bab62c7b2ef2b57536bcbd2fdfa2549ff)) + +## [3.29.1](https://github.com/atom-ide-community/atom-script/compare/v3.29.0...v3.29.1) (2020-12-30) + + +### Bug Fixes + +* update dependencies ([c898a92](https://github.com/atom-ide-community/atom-script/commit/c898a929f64da2b20809f2f12ad37afe69a1ab63)) + +# [3.29.0](https://github.com/atom-ide-community/atom-script/compare/v3.28.0...v3.29.0) (2020-12-30) + + +### Bug Fixes + +* add @babel/preset-react to support JSX ([4390c94](https://github.com/atom-ide-community/atom-script/commit/4390c94d143ad2ca4cb323e18f901beff4f216ca)) +* add babelConfig using @babel/preset-env ([c9f3aae](https://github.com/atom-ide-community/atom-script/commit/c9f3aae5cb4dc859db0554d0d67c8213574f4f48)) +* move [@babel](https://github.com/babel) packages to the deps ([e362aae](https://github.com/atom-ide-community/atom-script/commit/e362aaebfec6b8a93d4cd88cc45dc4e7183fdc89)) +* resolve to babel exe based on the OS ([2b8bcd0](https://github.com/atom-ide-community/atom-script/commit/2b8bcd0818b38592c3af3b9397136355f2aee08e)) +* use babel in coffeescript ([a7d48ff](https://github.com/atom-ide-community/atom-script/commit/a7d48ff34caaf5b7fdef9980404113b3fa0251c2)) + + +### Features + +* switch to `[@babel](https://github.com/babel)` packages ([88e8aef](https://github.com/atom-ide-community/atom-script/commit/88e8aefc7ddbb03bcbde834547cda94e0fbb9d12)) + +# [3.28.0](https://github.com/atom-ide-community/atom-script/compare/v3.27.1...v3.28.0) (2020-12-30) + + +### Features + +* use atom-space-pen-views-plus ([f5042b8](https://github.com/atom-ide-community/atom-script/commit/f5042b8f00cbe088749a95a5add4054d0ad4ced5)) + +## [3.27.1](https://github.com/atom-ide-community/atom-script/compare/v3.27.0...v3.27.1) (2020-12-29) + + +### Bug Fixes + +* update uuid to v8 ([446e4bc](https://github.com/atom-ide-community/atom-script/commit/446e4bcf0ae4775077f9810952263277b4350770)) + +## 3.27.0 +* Renamed Perl6 to Raku +* Support for ConTeXt MkIV and LMTX +* Run the tests on all platforms + ## 3.15.0 * Improved documentation diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index ac9fa102..ae3a923c 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -1,24 +1,29 @@ # Contributing + See [Atom's Contributing guidelines](https://atom.io/docs/latest/contributing). ## Reporting an issue + Please use [GitHub's Issue Search](https://help.github.com/articles/using-search-to-filter-issues-and-pull-requests/) to help reduce the number of duplicate issues reported. If you find an issue you're facing, feel free to comment on the open issues you're facing to raise with any details that could help debugging the problem. When reporting an issue include information such as: -* **Reproduction steps** if possible. -* The Platform (Operating System) you're on. -* The Atom version you're running. -* The Script package version. -* The Grammar you're attempting to run. -* Consider adding a failing spec, with an Atom package this isn't as simple but could really help speed up debugging the issue. + +- **Reproduction steps** if possible. +- The Platform (Operating System) you're on. +- The Atom version you're running. +- The Script package version. +- The Grammar you're attempting to run. +- Consider adding a failing spec, with an Atom package this isn't as simple but could really help speed up debugging the issue. The more information available when we take a look at your issue the more likely we can deal with it in a quick manner. ## Developing + We love pull requests! If you're reading this section thanks in advance. To help accelerate the review process: -* Consider adding specs. - * Passing tests give reviewers confidence. -* Consider adding verification steps for reviewers. + +- Consider adding specs. + - Passing tests give reviewers confidence. +- Consider adding verification steps for reviewers. diff --git a/LICENSE.md b/LICENSE.md index 6f8830e3..94f330bb 100644 --- a/LICENSE.md +++ b/LICENSE.md @@ -1,4 +1,4 @@ -Copyright (c) 2014 Kyle Kelley +Copyright (c) 2021 Kyle Kelley, Atom Community Contributors Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the diff --git a/README.md b/README.md index 5ca1e7d7..24885a48 100644 --- a/README.md +++ b/README.md @@ -11,7 +11,7 @@ Run scripts based on file name, a selection of code, or by line number. Currently supported grammars are: | Grammar | File Based | Selection Based | Required Package | Required in [`PATH`] | Notes | -|:------------------------------------|:-----------|:----------------|:------------------------------|:--------------------------|:----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| :---------------------------------- | :--------- | :-------------- | :---------------------------- | :------------------------ | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | Assembly (NASM) | Yes | Yes | [language-x86-64-assembly] | [`nasm`], [`binutils`] | | | 1C (BSL) | Yes | | [language-1c-bsl] | [`oscript`] | | | [Ansible] | Yes | | [language-ansible] | `ansible-playbook` | | @@ -78,8 +78,7 @@ Currently supported grammars are: | [Oz] | Yes | Yes | [language-oz] | `ozc` | | | [Pandoc] Markdown | Yes | | [language-pfm] | [`panzer`] | | | [Pascal] | Yes | Yes | [language-pascal] | `fpc` | | -| Perl | Yes | Yes | | | | -| [Perl 6] | Yes | Yes | | `perl6` | | +| [Perl] | Yes | Yes | | | | | PHP | Yes | Yes | | | | | [PostgreSQL] | Yes | Yes | [language-pgsql] | [`psql`] | Connects as user `PGUSER` to database `PGDATABASE`. Both default to your operating system's `USERNAME`, but can be set in the process environment or in Atom's [`init` file]: `process.env.PGUSER = {user name}` and `process.env.PGDATABASE = {database name}` | | [POV-Ray] | Yes | | [atom-language-povray] | `povengine`/`povray` | | @@ -90,6 +89,7 @@ Currently supported grammars are: | Python | Yes | Yes | | | | | [R] | Yes | Yes | [language-r] | `Rscript` | | | [Racket] | Yes | Yes | [language-racket] | `racket` | | +| [Raku] | Yes | Yes | | `raku` | | | [Reason] | Yes | Yes | [language-reason] | `rebuild` | | | [Ren'Py] | Yes | No | [language-renpy] | `renpy` | Runs your project at the root of the current file. | | [Robot Framework] | Yes | No | [language-robot-framework] | `robot` | The output location depends on the `CWD` behaviour which can be altered in settings. | @@ -110,188 +110,189 @@ Currently supported grammars are: | [VBScript] | Yes | Yes | [language-vbscript] | `cscript` | | | [Zsh] | Yes | Yes | | | Runs if your `SHELL` or `#!` line is `zsh`. | -[-wow]: https://atom.io/packages/language-lua-wow -[#70]: https://github.com/atom-ide-community/atom-script/pull/70 -[`binutils`]: https://www.gnu.org/software/binutils/ -[`gfortran`]: https://gcc.gnu.org/wiki/GFortran -[`ghc`]: https://haskell.org/ghc -[`guile`]: https://gnu.org/software/guile -[`init` file]: http://flight-manual.atom.io/hacking-atom/sections/the-init-file -[`latexmk`]: https://ctan.org/pkg/latexmk -[`nasm`]: https://nasm.us/ -[`oscript`]: http://oscript.io -[`panzer`]: https://github.com/msprev/panzer#readme -[`PATH`]: https://en.wikipedia.org/wiki/PATH_(variable) -[`psql`]: https://postgresql.org/docs/current/static/app-psql.html -[`pulp`]: https://github.com/purescript-contrib/pulp#readme -[`sbcl`]: http://sbcl.org -[`scriptcs`]: http://scriptcs.net -[`spim`]: http://spimsimulator.sourceforge.net -[`ts-node`]: https://github.com/TypeStrong/ts-node#readme -[Ansible]: https://ansible.com -[AppleScript]: https://developer.apple.com/library/content/documentation/AppleScript/Conceptual/AppleScriptX/Concepts/ScriptingOnOSX.html#//apple_ref/doc/uid/20000032-BABEBGCF -[atlilypond]: https://atom.io/packages/atlilypond -[atom-fstar]: https://github.com/FStarLang/atom-fstar#readme -[atom-language-io]: https://atom.io/packages/atom-language-io -[atom-language-povray]: https://atom.io/packages/atom-language-povray -[AutoHotKey]: https://autohotkey.com -[babel]: https://babeljs.io -[batch]: https://ss64.com/nt -[bats]: https://github.com/sstephenson/bats#bats-bash-automated-testing-system#readme -[behat-atom]: https://atom.io/packages/behat-atom -[behat]: http://docs.behat.org/en/v2.5/guides/6.cli.html -[bs-platform]: https://npm.im/package/bs-platform -[bucklescript]: https://bucklescript.github.io/bucklescript -[C# Script]: http://csscript.net -[clojure]: https://clojure.org -[coffeescript]: http://coffeescript.org -[crystal]: https://crystal-lang.org -[cucumber]: https://cucumber.io -[D]: https://dlang.org -[dart]: https://dartlang.org -[dartlang]: https://atom.io/packages/dartlang -[dot]: http://graphviz.org/content/dot-language -[elixir]: https://elixir-lang.org -[erlang]: https://erlang.org -[ES6]: https://babeljs.io/learn-es2015 -[F*]: https://fstar-lang.org -[F#]: http://fsharp.org -[file]: https://atom.io/packages/language-batchfile -[fish]: https://fishshell.com -[forth]: https://gnu.org/software/gforth -[fortran]: http://fortranwiki.org/fortran/show/Fortran -[gherkin]: https://cucumber.io/docs/reference#gherkin -[gnuplot]: http://gnuplot.info -[go]: https://golang.org -[graphviz]: http://graphviz.org -[groovy]: http://groovy-lang.org -[haskell]: https://haskell.org -[hy]: http://hylang.org -[icedcoffeescript]: http://maxtaco.github.io/coffee-script -[idris]: https://idris-lang.org -[inno setup]: http://jrsoftware.org/isinfo.php -[io]: http://iolanguage.org -[jolie]: http://jolie-lang.org -[julia]: https://julialang.org -[jxa]: https://developer.apple.com/library/mac/releasenotes/InterapplicationCommunication/RN-JavaScriptForAutomation/Articles/Introduction.html -[kotlin]: https://kotlinlang.org -[LAMMPS]: http://lammps.sandia.gov -[langauge-scheme]: https://atom.io/packages/language-scheme -[language-1c-bsl]: https://atom.io/packages/language-1c-bsl -[language-ansible]: https://atom.io/packages/language-ansible -[language-applescript]: https://atom.io/packages/language-applescript -[language-autohotkey]: https://atom.io/packages/language-autohotkey -[language-babel]: https://atom.io/packages/language-babel -[language-batch]: https://atom.io/packages/language-batch -[language-bats]: https://atom.io/packages/language-bats -[language-crystal-actual]: https://atom.io/packages/language-crystal-actual -[language-d]: https://atom.io/packages/language-d -[language-dot]: https://atom.io/packages/language-dot -[language-elixir]: https://atom.io/packages/language-elixir -[language-erlang]: https://atom.io/packages/language-erlang -[language-fish-shell]: https://atom.io/packages/language-fish-shell -[language-forth]: https://atom.io/packages/language-forth -[language-fortran]: https://atom.io/packages/language-fortran -[language-fsharp]: https://atom.io/packages/language-fsharp -[language-gherkin]: https://atom.io/packages/language-gherkin -[language-gnuplot-atom]: https://atom.io/packages/language-gnuplot-atom -[language-groovy]: https://atom.io/packages/language-groovy -[language-haskell]: https://atom.io/packages/language-haskell -[language-hy]: https://atom.io/packages/language-hy -[language-iced-coffee-script]: https://atom.io/packages/language-iced-coffee-script -[language-idris]: https://atom.io/packages/language-idris -[language-innosetup]: https://atom.io/packages/language-innosetup -[language-javascript-jxa]: https://atom.io/packages/language-javascript-jxa -[language-jolie]: https://atom.io/packages/language-jolie -[language-julia]: https://atom.io/packages/language-julia -[language-kotlin]: https://atom.io/packages/language-kotlin -[language-lammps]: https://atom.io/packages/language-lammps -[language-latex]: https://atom.io/packages/language-latex -[language-lisp]: https://atom.io/packages/language-lisp -[language-livescript]: https://atom.io/packages/language-livescript -[language-lua]: https://atom.io/packages/language-lua -[language-matlab]: https://atom.io/packages/language-matlab -[language-mips]: https://atom.io/packages/language-mips -[language-mongodb]: https://atom.io/packages/language-mongodb -[language-moonscript]: https://atom.io/packages/language-moonscript -[language-ncl]: https://atom.io/packages/language-ncl -[language-newlisp]: https://atom.io/packages/language-newlisp -[language-nim]: https://atom.io/packages/language-nim -[language-nsis]: https://atom.io/packages/language-nsis -[language-ocaml]: https://atom.io/packages/language-ocaml -[language-oz]: https://atom.io/packages/language-oz -[language-pascal]: https://atom.io/packages/language-pascal -[language-pfm]: https://atom.io/packages/language-pfm -[language-pgsql]: https://atom.io/packages/language-pgsql -[language-powershell]: https://atom.io/packages/language-powershell -[language-prolog]: https://atom.io/packages/language-prolog -[language-purescript]: https://atom.io/packages/language-purescript -[language-r]: https://atom.io/packages/language-r -[language-racket]: https://atom.io/packages/language-racket -[language-reason]: https://atom.io/packages/language-reason -[language-renpy]: https://atom.io/packages/language-renpy -[language-robot-framework]: https://atom.io/packages/language-robot-framework -[language-rspec]: https://atom.io/packages/language-rspec -[language-rust]: https://atom.io/packages/language-rust -[language-sage]: https://atom.io/packages/language-sage -[language-scala]: https://atom.io/packages/language-scala -[language-sml]: https://atom.io/packages/language-sml -[language-stata]: https://atom.io/packages/language-stata -[language-swift]: https://atom.io/packages/language-swift -[language-tcltk]: https://atom.io/packages/language-tcltk -[language-vbscript]: https://atom.io/packages/language-vbscript -[language-x86-64-assembly]: https://atom.io/packages/language-x86-64-assembly -[latex]: https://latex-project.org -[lein-exec]: https://github.com/kumarshantanu/lein-exec#readme -[leiningen]: https://leiningen.org -[lilypond]: http://lilypond.org -[lisp]: http://lisp-lang.org -[lit-hskl]: https://wiki.haskell.org/Literate_programming#Haskell_and_literate_programming -[literate]: http://coffeescript.org/#literate -[livescript]: http://livescript.net -[lua]: https://lua.org -[make]: https://gnu.org/software/make/manual/make -[MATLAB]: https://mathworks.com/products/matlab -[mips]: https://imgtec.com/mips -[mongodb]: https://mongodb.com -[moonscript]: https://moonscript.org -[NCL]: https://ncl.ucar.edu -[newlisp]: http://newlisp.org -[nim]: https://nim-lang.org -[nimscript]: https://nim-lang.org/0.11.3/nims.html -[NSIS]: http://nsis.sourceforge.net -[ocaml]: https://ocaml.org -[octave]: https://gnu.org/software/octave -[oz]: https://mozart.github.io -[pandoc]: https://pandoc.org -[perl 6]: https://perl6.org -[pascal]: https://freepascal.org -[PostgreSQL]: https://postgresql.org -[POV-Ray]: http://www.povray.org/ -[powershell]: https://docs.microsoft.com/powershell -[processing-language]: https://atom.io/packages/processing-language -[processing]: https://processing.org -[prolog]: http://swi-prolog.org -[purescript]: http://purescript.org -[R]: https://r-project.org -[racket]: https://racket-lang.org -[rails]: http://rubyonrails.org -[reason]: https://reasonml.github.io -[Ren'Py]: https://renpy.org -[robot framework]: http://robotframework.org -[rspec]: http://rspec.info -[rust]: https://rust-lang.org -[sage]: https://sagemath.org -[sass]: http://sass-lang.com -[scala]: https://scala-lang.org -[scheme]: http://scheme-reports.org -[Standard ML]: http://sml-family.org -[stata]: https://stata.com -[swift]: https://swift.org -[tcl]: https://tcl.tk -[typescript]: https://typescriptlang.org -[VBScript]: https://msdn.microsoft.com/library/t0aew7h6.aspx -[zsh]: http://zsh.org +[-wow]: https://atom.io/packages/language-lua-wow +[#70]: https://github.com/atom-ide-community/atom-script/pull/70 +[`binutils`]: https://www.gnu.org/software/binutils/ +[`gfortran`]: https://gcc.gnu.org/wiki/GFortran +[`ghc`]: https://haskell.org/ghc +[`guile`]: https://gnu.org/software/guile +[`init` file]: http://flight-manual.atom.io/hacking-atom/sections/the-init-file +[`latexmk`]: https://ctan.org/pkg/latexmk +[`nasm`]: https://nasm.us/ +[`oscript`]: http://oscript.io +[`panzer`]: https://github.com/msprev/panzer#readme +[`path`]: https://en.wikipedia.org/wiki/PATH_(variable) +[`psql`]: https://postgresql.org/docs/current/static/app-psql.html +[`pulp`]: https://github.com/purescript-contrib/pulp#readme +[`sbcl`]: http://sbcl.org +[`scriptcs`]: http://scriptcs.net +[`spim`]: http://spimsimulator.sourceforge.net +[`ts-node`]: https://github.com/TypeStrong/ts-node#readme +[ansible]: https://ansible.com +[applescript]: https://developer.apple.com/library/content/documentation/AppleScript/Conceptual/AppleScriptX/Concepts/ScriptingOnOSX.html#//apple_ref/doc/uid/20000032-BABEBGCF +[atlilypond]: https://atom.io/packages/atlilypond +[atom-fstar]: https://github.com/FStarLang/atom-fstar#readme +[atom-language-io]: https://atom.io/packages/atom-language-io +[atom-language-povray]: https://atom.io/packages/atom-language-povray +[autohotkey]: https://autohotkey.com +[babel]: https://babeljs.io +[batch]: https://ss64.com/nt +[bats]: https://github.com/sstephenson/bats#bats-bash-automated-testing-system#readme +[behat-atom]: https://atom.io/packages/behat-atom +[behat]: http://docs.behat.org/en/v2.5/guides/6.cli.html +[bs-platform]: https://npm.im/package/bs-platform +[bucklescript]: https://bucklescript.github.io/bucklescript +[c# script]: http://csscript.net +[clojure]: https://clojure.org +[coffeescript]: http://coffeescript.org +[crystal]: https://crystal-lang.org +[cucumber]: https://cucumber.io +[d]: https://dlang.org +[dart]: https://dartlang.org +[dartlang]: https://atom.io/packages/dartlang +[dot]: http://graphviz.org/content/dot-language +[elixir]: https://elixir-lang.org +[erlang]: https://erlang.org +[es6]: https://babeljs.io/learn-es2015 +[f*]: https://fstar-lang.org +[f#]: http://fsharp.org +[file]: https://atom.io/packages/language-batchfile +[fish]: https://fishshell.com +[forth]: https://gnu.org/software/gforth +[fortran]: http://fortranwiki.org/fortran/show/Fortran +[gherkin]: https://cucumber.io/docs/reference#gherkin +[gnuplot]: http://gnuplot.info +[go]: https://golang.org +[graphviz]: http://graphviz.org +[groovy]: http://groovy-lang.org +[haskell]: https://haskell.org +[hy]: http://hylang.org +[icedcoffeescript]: http://maxtaco.github.io/coffee-script +[idris]: https://idris-lang.org +[inno setup]: http://jrsoftware.org/isinfo.php +[io]: http://iolanguage.org +[jolie]: http://jolie-lang.org +[julia]: https://julialang.org +[jxa]: https://developer.apple.com/library/mac/releasenotes/InterapplicationCommunication/RN-JavaScriptForAutomation/Articles/Introduction.html +[kotlin]: https://kotlinlang.org +[lammps]: http://lammps.sandia.gov +[langauge-scheme]: https://atom.io/packages/language-scheme +[language-1c-bsl]: https://atom.io/packages/language-1c-bsl +[language-ansible]: https://atom.io/packages/language-ansible +[language-applescript]: https://atom.io/packages/language-applescript +[language-autohotkey]: https://atom.io/packages/language-autohotkey +[language-babel]: https://atom.io/packages/language-babel +[language-batch]: https://atom.io/packages/language-batch +[language-bats]: https://atom.io/packages/language-bats +[language-crystal-actual]: https://atom.io/packages/language-crystal-actual +[language-d]: https://atom.io/packages/language-d +[language-dot]: https://atom.io/packages/language-dot +[language-elixir]: https://atom.io/packages/language-elixir +[language-erlang]: https://atom.io/packages/language-erlang +[language-fish-shell]: https://atom.io/packages/language-fish-shell +[language-forth]: https://atom.io/packages/language-forth +[language-fortran]: https://atom.io/packages/language-fortran +[language-fsharp]: https://atom.io/packages/language-fsharp +[language-gherkin]: https://atom.io/packages/language-gherkin +[language-gnuplot-atom]: https://atom.io/packages/language-gnuplot-atom +[language-groovy]: https://atom.io/packages/language-groovy +[language-haskell]: https://atom.io/packages/language-haskell +[language-hy]: https://atom.io/packages/language-hy +[language-iced-coffee-script]: https://atom.io/packages/language-iced-coffee-script +[language-idris]: https://atom.io/packages/language-idris +[language-innosetup]: https://atom.io/packages/language-innosetup +[language-javascript-jxa]: https://atom.io/packages/language-javascript-jxa +[language-jolie]: https://atom.io/packages/language-jolie +[language-julia]: https://atom.io/packages/language-julia +[language-kotlin]: https://atom.io/packages/language-kotlin +[language-lammps]: https://atom.io/packages/language-lammps +[language-latex]: https://atom.io/packages/language-latex +[language-lisp]: https://atom.io/packages/language-lisp +[language-livescript]: https://atom.io/packages/language-livescript +[language-lua]: https://atom.io/packages/language-lua +[language-matlab]: https://atom.io/packages/language-matlab +[language-mips]: https://atom.io/packages/language-mips +[language-mongodb]: https://atom.io/packages/language-mongodb +[language-moonscript]: https://atom.io/packages/language-moonscript +[language-ncl]: https://atom.io/packages/language-ncl +[language-newlisp]: https://atom.io/packages/language-newlisp +[language-nim]: https://atom.io/packages/language-nim +[language-nsis]: https://atom.io/packages/language-nsis +[language-ocaml]: https://atom.io/packages/language-ocaml +[language-oz]: https://atom.io/packages/language-oz +[language-pascal]: https://atom.io/packages/language-pascal +[language-pfm]: https://atom.io/packages/language-pfm +[language-pgsql]: https://atom.io/packages/language-pgsql +[language-powershell]: https://atom.io/packages/language-powershell +[language-prolog]: https://atom.io/packages/language-prolog +[language-purescript]: https://atom.io/packages/language-purescript +[language-r]: https://atom.io/packages/language-r +[language-racket]: https://atom.io/packages/language-racket +[language-reason]: https://atom.io/packages/language-reason +[language-renpy]: https://atom.io/packages/language-renpy +[language-robot-framework]: https://atom.io/packages/language-robot-framework +[language-rspec]: https://atom.io/packages/language-rspec +[language-rust]: https://atom.io/packages/language-rust +[language-sage]: https://atom.io/packages/language-sage +[language-scala]: https://atom.io/packages/language-scala +[language-sml]: https://atom.io/packages/language-sml +[language-stata]: https://atom.io/packages/language-stata +[language-swift]: https://atom.io/packages/language-swift +[language-tcltk]: https://atom.io/packages/language-tcltk +[language-vbscript]: https://atom.io/packages/language-vbscript +[language-x86-64-assembly]: https://atom.io/packages/language-x86-64-assembly +[latex]: https://latex-project.org +[lein-exec]: https://github.com/kumarshantanu/lein-exec#readme +[leiningen]: https://leiningen.org +[lilypond]: http://lilypond.org +[lisp]: http://lisp-lang.org +[lit-hskl]: https://wiki.haskell.org/Literate_programming#Haskell_and_literate_programming +[literate]: http://coffeescript.org/#literate +[livescript]: http://livescript.net +[lua]: https://lua.org +[make]: https://gnu.org/software/make/manual/make +[matlab]: https://mathworks.com/products/matlab +[mips]: https://imgtec.com/mips +[mongodb]: https://mongodb.com +[moonscript]: https://moonscript.org +[ncl]: https://ncl.ucar.edu +[newlisp]: http://newlisp.org +[nim]: https://nim-lang.org +[nimscript]: https://nim-lang.org/0.11.3/nims.html +[nsis]: http://nsis.sourceforge.net +[ocaml]: https://ocaml.org +[octave]: https://gnu.org/software/octave +[oz]: https://mozart.github.io +[pandoc]: https://pandoc.org +[raku]: https://raku.org +[pascal]: https://freepascal.org +[perl]: https://www.perl.org/ +[postgresql]: https://postgresql.org +[pov-ray]: http://www.povray.org/ +[powershell]: https://docs.microsoft.com/powershell +[processing-language]: https://atom.io/packages/processing-language +[processing]: https://processing.org +[prolog]: http://swi-prolog.org +[purescript]: http://purescript.org +[r]: https://r-project.org +[racket]: https://racket-lang.org +[rails]: http://rubyonrails.org +[reason]: https://reasonml.github.io +[ren'py]: https://renpy.org +[robot framework]: http://robotframework.org +[rspec]: http://rspec.info +[rust]: https://rust-lang.org +[sage]: https://sagemath.org +[sass]: http://sass-lang.com +[scala]: https://scala-lang.org +[scheme]: http://scheme-reports.org +[standard ml]: http://sml-family.org +[stata]: https://stata.com +[swift]: https://swift.org +[tcl]: https://tcl.tk +[typescript]: https://typescriptlang.org +[vbscript]: https://msdn.microsoft.com/library/t0aew7h6.aspx +[zsh]: http://zsh.org **NOTE**: Some grammars may require you to install [a custom language package](https://atom.io/search?utf8=✓&q=language). @@ -313,9 +314,9 @@ Make sure to launch Atom from the console/terminal. This gives atom all your use atom . ``` -to get it to run with the *current* directory as the default place to run scripts from. +to get it to run with the _current_ directory as the default place to run scripts from. -If you *really* wish to open atom from a launcher/icon, see [this issue for a variety of workarounds that have been suggested](https://github.com/atom-ide-community/atom-script/issues/61#issuecomment-37337827). +If you _really_ wish to open atom from a launcher/icon, see [this issue for a variety of workarounds that have been suggested](https://github.com/atom-ide-community/atom-script/issues/61#issuecomment-37337827). ## Usage @@ -348,7 +349,7 @@ clipboard, allowing you to paste it into the editor. ### Command and shortcut reference | Command | macOS | Linux/Windows | Notes | -|:---------------------------|:------------------------------------|:----------------------------|:------------------------------------------------------------------------------| +| :------------------------- | :---------------------------------- | :-------------------------- | :---------------------------------------------------------------------------- | | Script: Run | cmd-i | shift-ctrl-b | If text is selected a "Selection Based" is used instead of a "File Based" run | | Script: Run by Line Number | shift-cmd-j | shift-ctrl-j | If text is selected the line number will be the last | | Script: Run Options | shift-cmd-i | shift-ctrl-alt-o | Runs the selection or whole file with the given options | @@ -360,11 +361,11 @@ clipboard, allowing you to paste it into the editor. The following parameters will be replaced in any entry in `args` (command and program arguments). They should all be enclosed in curly brackets `{}` - * `{FILE_ACTIVE}` - Full path to the currently active file in Atom. E.g. `/home/rgbkrk/atom-script/lib/script.coffee` - * `{FILE_ACTIVE_PATH}` - Full path to the folder where the currently active file is. E.g. `/home/rgbkrk/atom-script/lib` - * `{FILE_ACTIVE_NAME}` - Full name and extension of active file. E.g., `script.coffee` - * `{FILE_ACTIVE_NAME_BASE}` - Name of active file WITHOUT extension. E.g., `script` - * `{PROJECT_PATH}` - Full path to the root of the project. This is normally the path Atom has as root. E.g `/home/rgbkrk/atom-script` +- `{FILE_ACTIVE}` - Full path to the currently active file in Atom. E.g. `/home/rgbkrk/atom-script/lib/script.coffee` +- `{FILE_ACTIVE_PATH}` - Full path to the folder where the currently active file is. E.g. `/home/rgbkrk/atom-script/lib` +- `{FILE_ACTIVE_NAME}` - Full name and extension of active file. E.g., `script.coffee` +- `{FILE_ACTIVE_NAME_BASE}` - Name of active file WITHOUT extension. E.g., `script` +- `{PROJECT_PATH}` - Full path to the root of the project. This is normally the path Atom has as root. E.g `/home/rgbkrk/atom-script` Parameters are compatible with `atom-build` package. diff --git a/coffeelint.json b/coffeelint.json deleted file mode 100644 index 49595dd6..00000000 --- a/coffeelint.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "max_line_length": { - "level": "ignore" - } -} diff --git a/examples/color.py b/examples/color.py index 9faa2229..51446faf 100644 --- a/examples/color.py +++ b/examples/color.py @@ -2,14 +2,14 @@ def print_format_table(): """ prints table of formatted text format options """ - for style in xrange(8): - for fg in xrange(30, 38): + for style in range(8): + for fg in range(30, 38): s1 = '' - for bg in xrange(40, 48): + for bg in range(40, 48): format = ';'.join([str(style), str(fg), str(bg)]) s1 += '\x1b[%sm %s \x1b[0m' % (format, format) - print s1 - print '\n' + print(s1) + print('\n') print("BEFORE") diff --git a/examples/greeter.ts b/examples/greeter.ts index fc9c7e73..7e44df43 100644 --- a/examples/greeter.ts +++ b/examples/greeter.ts @@ -1,10 +1,10 @@ class Greeter { - constructor(public greeting: string) { } + constructor(public greeting: string) {} greet() { - return this.greeting; + return this.greeting } -}; +} -var greeter = new Greeter("Hello, world!"); +var greeter = new Greeter("Hello, world!") -console.log(greeter.greet()); +console.log(greeter.greet()) diff --git a/examples/hello.html b/examples/hello.html index ca05d70d..d201c78b 100644 --- a/examples/hello.html +++ b/examples/hello.html @@ -1,10 +1,8 @@ - + +

Atom Script

-

Atom Script

- -

Hello World

- - +

Hello World

+ diff --git a/examples/jxa.js b/examples/jxa.js index 020d9608..41232cdc 100755 --- a/examples/jxa.js +++ b/examples/jxa.js @@ -1,7 +1,7 @@ #!/usr/bin/env osascript -l JavaScript -test = Application.currentApplication(); +test = Application.currentApplication() -test.includeStandardAdditions = true; +test.includeStandardAdditions = true -test.displayDialog('Hello world'); +test.displayDialog("Hello world") diff --git a/examples/longrun.js b/examples/longrun.js index 83f6109a..7be94bc7 100644 --- a/examples/longrun.js +++ b/examples/longrun.js @@ -1,11 +1,11 @@ -let i = 1; +let i = 1 const run = setInterval(() => { - console.log(`line ${i}`); - i++; + console.log(`line ${i}`) + i++ if (i === 20) { - stop(); + stop() } -}, 1000); +}, 1000) function stop() { - clearInterval(run); + clearInterval(run) } diff --git a/examples/longrun.ts b/examples/longrun.ts index a1bd7015..23e5dfc6 100644 --- a/examples/longrun.ts +++ b/examples/longrun.ts @@ -1,11 +1,11 @@ -var i: number = 1; -var run = setInterval(function() { - console.log("line " + i); - i++; +var i: number = 1 +var run = setInterval(function () { + console.log("line " + i) + i++ if (i === 20) { - stop(); + stop() } -}, 1000); +}, 1000) function stop(): void { - clearInterval(run); + clearInterval(run) } diff --git a/examples/modern.js b/examples/modern.js index a94ed12a..f7bcff58 100644 --- a/examples/modern.js +++ b/examples/modern.js @@ -1,8 +1,8 @@ -import {exec} from 'child_process' +import { exec } from "child_process" -const timeout = s => new Promise(resolve => setTimeout(resolve, s * 1000)) // ms +const timeout = (s) => new Promise((resolve) => setTimeout(resolve, s * 1000)) // ms -const sleep = async(s, message) => { +const sleep = async (s, message) => { console.log("Awaiting Promise…") // This selected line should run. await timeout(s) return console.log(message) diff --git a/examples/mongodb.js b/examples/mongodb.js index 009072f6..f1a18139 100644 --- a/examples/mongodb.js +++ b/examples/mongodb.js @@ -1 +1 @@ -print('Hello world!'); +print("Hello world!") diff --git a/examples/stylish-css.scss b/examples/stylish-css.scss index f935a2e4..7d34a1e3 100644 --- a/examples/stylish-css.scss +++ b/examples/stylish-css.scss @@ -1,4 +1,4 @@ -$font-stack: Helvetica, sans-serif; +$font-stack: Helvetica, sans-serif; $primary-color: #33dd3d; body { diff --git a/lib/code-context-builder.js b/lib/code-context-builder.js index c0bb8260..ba4d14a9 100644 --- a/lib/code-context-builder.js +++ b/lib/code-context-builder.js @@ -1,17 +1,17 @@ -'use babel'; +"use babel" -import { Emitter } from 'atom'; +import { Emitter } from "atom" -import CodeContext from './code-context'; -import grammarMap from './grammars'; +import CodeContext from "./code-context" +import grammarMap from "./grammars" export default class CodeContextBuilder { constructor(emitter = new Emitter()) { - this.emitter = emitter; + this.emitter = emitter } destroy() { - this.emitter.dispose(); + this.emitter.dispose() } // Public: Builds code context for specified argType @@ -24,96 +24,112 @@ export default class CodeContextBuilder { // * "File Based" // // returns a {CodeContext} object - buildCodeContext(editor, argType = 'Selection Based') { - if (!editor) return null; + buildCodeContext(editor, argType = "Selection Based") { + if (!editor) { + return null + } - const codeContext = this.initCodeContext(editor); + const codeContext = this.initCodeContext(editor) - codeContext.argType = argType; + codeContext.argType = argType - if (argType === 'Line Number Based') { - editor.save(); + if (argType === "Line Number Based") { + editor.save() } else if (codeContext.selection.isEmpty() && codeContext.filepath) { - codeContext.argType = 'File Based'; - if (editor && editor.isModified()) editor.save(); + codeContext.argType = "File Based" + if (editor && editor.isModified()) { + editor.save() + } } // Selection and Line Number Based runs both benefit from knowing the current line // number - if (argType !== 'File Based') { - const cursor = editor.getLastCursor(); - codeContext.lineNumber = cursor.getScreenRow() + 1; + if (argType !== "File Based") { + const cursor = editor.getLastCursor() + codeContext.lineNumber = cursor.getScreenRow() + 1 } - return codeContext; + return codeContext } initCodeContext(editor) { - const filename = editor.getTitle(); - const filepath = editor.getPath(); - const selection = editor.getLastSelection(); - const ignoreSelection = atom.config.get('script.ignoreSelection'); + const filename = editor.getTitle() + const filepath = editor.getPath() + const selection = editor.getLastSelection() + const ignoreSelection = atom.config.get("script.ignoreSelection") // If the selection was empty or if ignore selection is on, then "select" ALL // of the text // This allows us to run on new files - let textSource; + let textSource if (selection.isEmpty() || ignoreSelection) { - textSource = editor; + textSource = editor } else { - textSource = selection; + textSource = selection } - const codeContext = new CodeContext(filename, filepath, textSource); - codeContext.selection = selection; - codeContext.shebang = this.getShebang(editor); + const codeContext = new CodeContext(filename, filepath, textSource) + codeContext.selection = selection + codeContext.shebang = getShebang(editor) - const lang = this.getLang(editor); + const lang = getLang(editor) if (this.validateLang(lang)) { - codeContext.lang = lang; + codeContext.lang = lang } - return codeContext; - } - - getShebang(editor) { - if (process.platform === 'win32') return null; - const text = editor.getText(); - const lines = text.split('\n'); - const firstLine = lines[0]; - if (!firstLine.match(/^#!/)) return null; + return codeContext + } // eslint-disable-next-line class-methods-use-this - return firstLine.replace(/^#!\s*/, ''); - } + /** @deprecated use {getShebang} function */ getShebang(arg) { + return getShebang(arg) + } // eslint-disable-next-line class-methods-use-this - getLang(editor) { - return editor.getGrammar().name; + /** @deprecated use {getLang} function */ getLang(arg) { + return getLang(arg) } validateLang(lang) { - let valid = true; + let valid = true // Determine if no language is selected. - if (lang === 'Null Grammar' || lang === 'Plain Text') { - this.emitter.emit('did-not-specify-language'); - valid = false; + if (lang === "Null Grammar" || lang === "Plain Text") { + this.emitter.emit("did-not-specify-language") + valid = false - // Provide them a dialog to submit an issue on GH, prepopulated with their - // language of choice. + // Provide them a dialog to submit an issue on GH, prepopulated with their + // language of choice. } else if (!(lang in grammarMap)) { - this.emitter.emit('did-not-support-language', { lang }); - valid = false; + this.emitter.emit("did-not-support-language", { lang }) + valid = false } - return valid; + return valid } onDidNotSpecifyLanguage(callback) { - return this.emitter.on('did-not-specify-language', callback); + return this.emitter.on("did-not-specify-language", callback) } onDidNotSupportLanguage(callback) { - return this.emitter.on('did-not-support-language', callback); + return this.emitter.on("did-not-support-language", callback) } } + +export function getShebang(editor) { + if (process.platform === "win32") { + return null + } + const text = editor.getText() + const lines = text.split("\n") + const firstLine = lines[0] + if (!firstLine.match(/^#!/)) { + return null + } + + return firstLine.replace(/^#!\s*/, "") +} + +export function getLang(editor) { + return editor.getGrammar().name +} diff --git a/lib/code-context.js b/lib/code-context.js index a9ce134d..7d3523c9 100644 --- a/lib/code-context.js +++ b/lib/code-context.js @@ -1,4 +1,4 @@ -'use babel'; +"use babel" export default class CodeContext { // Public: Initializes a new {CodeContext} object for the given file/line @@ -9,11 +9,11 @@ export default class CodeContext { // // Returns a newly created {CodeContext} object. constructor(filename, filepath, textSource = null) { - this.lineNumber = null; - this.shebang = null; - this.filename = filename; - this.filepath = filepath; - this.textSource = textSource; + this.lineNumber = null + this.shebang = null + this.filename = filename + this.filepath = filepath + this.textSource = textSource } // Public: Creates a {String} representation of the file and line number @@ -22,15 +22,17 @@ export default class CodeContext { // // Returns the "file colon line" {String}. fileColonLine(fullPath = true) { - let fileColonLine; + let fileColonLine if (fullPath) { - fileColonLine = this.filepath; + fileColonLine = this.filepath } else { - fileColonLine = this.filename; + fileColonLine = this.filename } - if (!this.lineNumber) { return fileColonLine; } - return `${fileColonLine}:${this.lineNumber}`; + if (!this.lineNumber) { + return fileColonLine + } + return `${fileColonLine}:${this.lineNumber}` } // Public: Retrieves the text from whatever source was given on initialization @@ -39,22 +41,26 @@ export default class CodeContext { // // Returns the code selection {String} getCode(prependNewlines = true) { - const code = this.textSource ? this.textSource.getText() : null; - if (!prependNewlines || !this.lineNumber) return code; + const code = this.textSource ? this.textSource.getText() : null + if (!prependNewlines || !this.lineNumber) { + return code + } - const newlineCount = Number(this.lineNumber); - const newlines = Array(newlineCount).join('\n'); - return `${newlines}${code}`; + const newlineCount = Number(this.lineNumber) + const newlines = Array(newlineCount).join("\n") + return `${newlines}${code}` } // Public: Retrieves the command name from @shebang // // Returns the {String} name of the command or {undefined} if not applicable. shebangCommand() { - const sections = this.shebangSections(); - if (!sections) return null; + const sections = this.shebangSections() + if (!sections) { + return null + } - return sections[0]; + return sections[0] } // Public: Retrieves the command arguments (such as flags or arguments to @@ -62,10 +68,12 @@ export default class CodeContext { // // Returns the {String} name of the command or {undefined} if not applicable. shebangCommandArgs() { - const sections = this.shebangSections(); - if (!sections) { return []; } + const sections = this.shebangSections() + if (!sections) { + return [] + } - return sections.slice(1, sections.length); + return sections.slice(1, sections.length) } // Public: Splits the shebang string by spaces to extra the command and @@ -73,6 +81,6 @@ export default class CodeContext { // // Returns the {String} name of the command or {undefined} if not applicable. shebangSections() { - return this.shebang ? this.shebang.split(' ') : null; + return this.shebang ? this.shebang.split(" ") : null } } diff --git a/lib/command-context.js b/lib/command-context.js index 49820760..1163b34b 100644 --- a/lib/command-context.js +++ b/lib/command-context.js @@ -1,70 +1,78 @@ -'use babel'; +"use babel" -import grammarMap from './grammars'; +import grammarMap from "./grammars" export default class CommandContext { constructor() { - this.command = null; - this.workingDirectory = null; - this.args = []; - this.options = {}; + this.command = null + this.workingDirectory = null + this.args = [] + this.options = {} } static build(runtime, runOptions, codeContext) { - const commandContext = new CommandContext(); - commandContext.options = runOptions; - let buildArgsArray; + const commandContext = new CommandContext() + commandContext.options = runOptions + let buildArgsArray try { if (!runOptions.cmd) { // Precondition: lang? and lang of grammarMap - commandContext.command = codeContext.shebangCommand() || - grammarMap[codeContext.lang][codeContext.argType].command; + commandContext.command = + codeContext.shebangCommand() || grammarMap[codeContext.lang][codeContext.argType].command } else { - commandContext.command = runOptions.cmd; + commandContext.command = runOptions.cmd } - buildArgsArray = grammarMap[codeContext.lang][codeContext.argType].args; + buildArgsArray = grammarMap[codeContext.lang][codeContext.argType].args } catch (error) { - runtime.modeNotSupported(codeContext.argType, codeContext.lang); - return false; + runtime.modeNotSupported(codeContext.argType, codeContext.lang) + return false } try { - commandContext.args = buildArgsArray(codeContext); + commandContext.args = buildArgsArray(codeContext) } catch (errorSendByArgs) { - runtime.didNotBuildArgs(errorSendByArgs); - return false; + runtime.didNotBuildArgs(errorSendByArgs) + return false } if (!runOptions.workingDirectory) { // Precondition: lang? and lang of grammarMap - commandContext.workingDirectory = grammarMap[codeContext.lang][codeContext.argType].workingDirectory || ''; + commandContext.workingDirectory = grammarMap[codeContext.lang][codeContext.argType].workingDirectory || "" } else { - commandContext.workingDirectory = runOptions.workingDirectory; + commandContext.workingDirectory = runOptions.workingDirectory } // Return setup information - return commandContext; - } + return commandContext + } // eslint-disable-next-line class-methods-use-this - quoteArguments(args) { - return args.map(arg => (arg.trim().indexOf(' ') === -1 ? arg.trim() : `'${arg}'`)); + /** @deprecated use {quoteArguments} function */ quoteArguments(args) { + return quoteArguments(args) } getRepresentation() { - if (!this.command || !this.args.length) return ''; + if (!this.command || !this.args.length) { + return "" + } // command arguments - const commandArgs = this.options.cmdArgs ? this.quoteArguments(this.options.cmdArgs).join(' ') : ''; + const commandArgs = this.options.cmdArgs ? quoteArguments(this.options.cmdArgs).join(" ") : "" // script arguments - const args = this.args.length ? this.quoteArguments(this.args).join(' ') : ''; - const scriptArgs = this.options.scriptArgs ? this.quoteArguments(this.options.scriptArgs).join(' ') : ''; + const args = this.args.length ? quoteArguments(this.args).join(" ") : "" + const scriptArgs = this.options.scriptArgs ? quoteArguments(this.options.scriptArgs).join(" ") : "" - return this.command.trim() + - (commandArgs ? ` ${commandArgs}` : '') + - (args ? ` ${args}` : '') + - (scriptArgs ? ` ${scriptArgs}` : ''); + return ( + this.command.trim() + + (commandArgs ? ` ${commandArgs}` : "") + + (args ? ` ${args}` : "") + + (scriptArgs ? ` ${scriptArgs}` : "") + ) } } + +export function quoteArguments(args) { + return args.map((arg) => (arg.trim().indexOf(" ") === -1 ? arg.trim() : `'${arg}'`)) +} diff --git a/lib/grammar-utils.js b/lib/grammar-utils.js index 07f05425..866f0194 100644 --- a/lib/grammar-utils.js +++ b/lib/grammar-utils.js @@ -1,35 +1,35 @@ -'use babel'; +"use babel" // Require some libs used for creating temporary files -import os from 'os'; -import fs from 'fs'; -import path from 'path'; -import uuid from 'uuid'; +import os from "os" +import fs from "fs" +import path from "path" +import { v1 as uuidv1 } from "uuid" // Public: GrammarUtils - utilities for determining how to run code -export default { - tempFilesDir: path.join(os.tmpdir(), 'atom_script_tempfiles'), +const GrammarUtils = { + tempFilesDir: path.join(os.tmpdir(), "atom_script_tempfiles"), // Public: Create a temporary file with the provided code // // * `code` A {String} containing some code // // Returns the {String} filepath of the new file - createTempFileWithCode(code, extension = '') { + createTempFileWithCode(code, extension = "") { try { if (!fs.existsSync(this.tempFilesDir)) { - fs.mkdirSync(this.tempFilesDir); + fs.mkdirSync(this.tempFilesDir) } - const tempFilePath = this.tempFilesDir + path.sep + uuid.v1() + extension; + const tempFilePath = this.tempFilesDir + path.sep + uuidv1() + extension - const file = fs.openSync(tempFilePath, 'w'); - fs.writeSync(file, code); - fs.closeSync(file); + const file = fs.openSync(tempFilePath, "w") + fs.writeSync(file, code) + fs.closeSync(file) - return tempFilePath; + return tempFilePath } catch (error) { - throw new Error(`Error while creating temporary file (${error})`); + throw new Error(`Error while creating temporary file (${error})`) } }, @@ -38,72 +38,72 @@ export default { deleteTempFiles() { try { if (fs.existsSync(this.tempFilesDir)) { - const files = fs.readdirSync(this.tempFilesDir); + const files = fs.readdirSync(this.tempFilesDir) if (files.length) { - files.forEach(file => fs.unlinkSync(this.tempFilesDir + path.sep + file)); + files.forEach((file) => fs.unlinkSync(this.tempFilesDir + path.sep + file)) } - return fs.rmdirSync(this.tempFilesDir); + return fs.rmdirSync(this.tempFilesDir) } - return null; + return null } catch (error) { - throw new Error(`Error while deleting temporary files (${error})`); + throw new Error(`Error while deleting temporary files (${error})`) } }, // Public: Returns cmd or bash, depending on the current OS - command: os.platform() === 'win32' ? 'cmd' : 'bash', + command: os.platform() === "win32" ? "cmd" : "bash", // Public: Format args for cmd or bash, depending on the current OS formatArgs(command) { - if (os.platform() === 'win32') { - return [`/c ${command.replace(/['"]/g, '')}`]; + if (os.platform() === "win32") { + return [`/c ${command.replace(/["']/g, "")}`] } - return ['-c', command]; + return ["-c", command] }, - /* eslint-disable global-require */ // Public: Get the Java helper object // // Returns an {Object} which assists in preparing java + javac statements - Java: require('./grammar-utils/java'), + Java: require("./grammar-utils/java"), // Public: Get the Lisp helper object // // Returns an {Object} which assists in splitting Lisp statements. - Lisp: require('./grammar-utils/lisp'), + Lisp: require("./grammar-utils/lisp"), // Public: Get the MATLAB helper object // // Returns an {Object} which assists in splitting MATLAB statements. - MATLAB: require('./grammar-utils/matlab'), + MATLAB: require("./grammar-utils/matlab"), // Public: Get the OperatingSystem helper object // // Returns an {Object} which assists in writing OS dependent code. - OperatingSystem: require('./grammar-utils/operating-system'), + OperatingSystem: require("./grammar-utils/operating-system"), // Public: Get the R helper object // // Returns an {Object} which assists in creating temp files containing R code - R: require('./grammar-utils/R'), + R: require("./grammar-utils/R"), // Public: Get the Perl helper object // // Returns an {Object} which assists in creating temp files containing Perl code - Perl: require('./grammar-utils/perl'), + Perl: require("./grammar-utils/perl"), // Public: Get the PHP helper object // // Returns an {Object} which assists in creating temp files containing PHP code - PHP: require('./grammar-utils/php'), + PHP: require("./grammar-utils/php"), // Public: Get the Nim helper object // // Returns an {Object} which assists in selecting the right project file for Nim code - Nim: require('./grammar-utils/nim'), + Nim: require("./grammar-utils/nim"), // Public: Get the D helper object // // Returns an {Object} which assists in creating temp files containing D code - D: require('./grammar-utils/d'), -}; + D: require("./grammar-utils/d"), +} +export default GrammarUtils diff --git a/lib/grammar-utils/R.js b/lib/grammar-utils/R.js index f7491ca0..99cfe0e4 100644 --- a/lib/grammar-utils/R.js +++ b/lib/grammar-utils/R.js @@ -1,13 +1,14 @@ -'use babel'; +"use babel" // Public: GrammarUtils.R - a module which assist the creation of R temporary files -export default { +const GrammarUtilsR = { // Public: Create a temporary file with the provided R code // // * `code` A {String} containing some R code // // Returns the {String} filepath of the new file createTempFileWithCode(code) { - return module.parent.exports.createTempFileWithCode(code); + return module.parent.exports.createTempFileWithCode(code) }, -}; +} +export default GrammarUtilsR diff --git a/lib/grammar-utils/d.js b/lib/grammar-utils/d.js index 6d4adea3..a59eafed 100644 --- a/lib/grammar-utils/d.js +++ b/lib/grammar-utils/d.js @@ -1,14 +1,14 @@ -'use babel'; +"use babel" // Require some libs used for creating temporary files -import os from 'os'; -import fs from 'fs'; -import path from 'path'; -import uuid from 'uuid'; +import os from "os" +import fs from "fs" +import path from "path" +import { v1 as uuidv1 } from "uuid" // Public: GrammarUtils.D - a module which assist the creation of D temporary files -export default { - tempFilesDir: path.join(os.tmpdir(), 'atom_script_tempfiles'), +const GrammarUtilsD = { + tempFilesDir: path.join(os.tmpdir(), "atom_script_tempfiles"), // Public: Create a temporary file with the provided D code // @@ -17,17 +17,20 @@ export default { // Returns the {String} filepath of the new file createTempFileWithCode(code) { try { - if (!fs.existsSync(this.tempFilesDir)) { fs.mkdirSync(this.tempFilesDir); } + if (!fs.existsSync(this.tempFilesDir)) { + fs.mkdirSync(this.tempFilesDir) + } - const tempFilePath = `${this.tempFilesDir + path.sep}m${uuid.v1().split('-').join('_')}.d`; + const tempFilePath = `${this.tempFilesDir + path.sep}m${uuidv1().split("-").join("_")}.d` - const file = fs.openSync(tempFilePath, 'w'); - fs.writeSync(file, code); - fs.closeSync(file); + const file = fs.openSync(tempFilePath, "w") + fs.writeSync(file, code) + fs.closeSync(file) - return tempFilePath; + return tempFilePath } catch (error) { - throw new Error(`Error while creating temporary file (${error})`); + throw new Error(`Error while creating temporary file (${error})`) } }, -}; +} +export default GrammarUtilsD diff --git a/lib/grammar-utils/java.js b/lib/grammar-utils/java.js index c7b44b88..7708360d 100644 --- a/lib/grammar-utils/java.js +++ b/lib/grammar-utils/java.js @@ -1,10 +1,10 @@ -'use babel'; +"use babel" // Java script preparation functions -import os from 'os'; -import path from 'path'; +import os from "os" +import path from "path" -export default { +const GrammarUtilsJava = { // Public: Get atom temp file directory // // Returns {String} containing atom temp file directory @@ -16,7 +16,7 @@ export default { // // Returns {String} containing class name of file getClassName(context) { - return context.filename.replace(/\.java$/, ''); + return context.filename.replace(/\.java$/, "") }, // Public: Get project path of context @@ -25,8 +25,8 @@ export default { // // Returns {String} containing the matching project path getProjectPath(context) { - const projectPaths = atom.project.getPaths(); - return projectPaths.find(projectPath => context.filepath.includes(projectPath)); + const projectPaths = atom.project.getPaths() + return projectPaths.find((projectPath) => context.filepath.includes(projectPath)) }, // Public: Get package of file in context @@ -35,15 +35,16 @@ export default { // // Returns {String} containing class of contextual file getClassPackage(context) { - const projectPath = module.exports.getProjectPath(context); - const projectRemoved = (context.filepath.replace(`${projectPath}/`, '')); - const filenameRemoved = projectRemoved.replace(`/${context.filename}`, ''); + const projectPath = module.exports.getProjectPath(context) + const projectRemoved = context.filepath.replace(`${projectPath}/`, "") + const filenameRemoved = projectRemoved.replace(`/${context.filename}`, "") // File is in root of src directory - no package if (filenameRemoved === projectRemoved) { - return ''; + return "" } - return `${filenameRemoved}.`; + return `${filenameRemoved}.` }, -}; +} +export default GrammarUtilsJava diff --git a/lib/grammar-utils/lisp.js b/lib/grammar-utils/lisp.js index 2abddebf..f70d1737 100644 --- a/lib/grammar-utils/lisp.js +++ b/lib/grammar-utils/lisp.js @@ -1,37 +1,42 @@ -'use babel'; +"use babel" -import _ from 'underscore'; +import _ from "underscore" // Public: GrammarUtils.Lisp - a module which exposes the ability to evaluate // code -export default { +const GrammarUtilsLisp = { // Public: Split a string of code into an array of executable statements // // Returns an {Array} of executable statements. splitStatements(code) { const iterator = (statements, currentCharacter) => { - if (!this.parenDepth) this.parenDepth = 0; - if (currentCharacter === '(') { - this.parenDepth += 1; - this.inStatement = true; - } else if (currentCharacter === ')') { - this.parenDepth -= 1; + if (!this.parenDepth) { + this.parenDepth = 0 + } + if (currentCharacter === "(") { + this.parenDepth += 1 + this.inStatement = true + } else if (currentCharacter === ")") { + this.parenDepth -= 1 } - if (!this.statement) this.statement = ''; - this.statement += currentCharacter; + if (!this.statement) { + this.statement = "" + } + this.statement += currentCharacter if (this.parenDepth === 0 && this.inStatement) { - this.inStatement = false; - statements.push(this.statement.trim()); - this.statement = ''; + this.inStatement = false + statements.push(this.statement.trim()) + this.statement = "" } - return statements; - }; + return statements + } - const statements = _.reduce(code.trim(), iterator, [], {}); + const statements = _.reduce(code.trim(), iterator, [], {}) - return statements; + return statements }, -}; +} +export default GrammarUtilsLisp diff --git a/lib/grammar-utils/matlab.js b/lib/grammar-utils/matlab.js index dcc87596..d57b4462 100644 --- a/lib/grammar-utils/matlab.js +++ b/lib/grammar-utils/matlab.js @@ -1,14 +1,14 @@ -'use babel'; +"use babel" // Require some libs used for creating temporary files -import os from 'os'; -import fs from 'fs'; -import path from 'path'; -import uuid from 'uuid'; +import os from "os" +import fs from "fs" +import path from "path" +import { v1 as uuidv1 } from "uuid" // Public: GrammarUtils.MATLAB - a module which assist the creation of MATLAB temporary files -export default { - tempFilesDir: path.join(os.tmpdir(), 'atom_script_tempfiles'), +const GrammarUtilsMatlab = { + tempFilesDir: path.join(os.tmpdir(), "atom_script_tempfiles"), // Public: Create a temporary file with the provided MATLAB code // @@ -17,17 +17,20 @@ export default { // Returns the {String} filepath of the new file createTempFileWithCode(code) { try { - if (!fs.existsSync(this.tempFilesDir)) { fs.mkdirSync(this.tempFilesDir); } + if (!fs.existsSync(this.tempFilesDir)) { + fs.mkdirSync(this.tempFilesDir) + } - const tempFilePath = `${this.tempFilesDir + path.sep}m${uuid.v1().split('-').join('_')}.m`; + const tempFilePath = `${this.tempFilesDir + path.sep}m${uuidv1().split("-").join("_")}.m` - const file = fs.openSync(tempFilePath, 'w'); - fs.writeSync(file, code); - fs.closeSync(file); + const file = fs.openSync(tempFilePath, "w") + fs.writeSync(file, code) + fs.closeSync(file) - return tempFilePath; + return tempFilePath } catch (error) { - throw new Error(`Error while creating temporary file (${error})`); + throw new Error(`Error while creating temporary file (${error})`) } }, -}; +} +export default GrammarUtilsMatlab diff --git a/lib/grammar-utils/nim.js b/lib/grammar-utils/nim.js index dc03bbef..6858fd29 100644 --- a/lib/grammar-utils/nim.js +++ b/lib/grammar-utils/nim.js @@ -1,10 +1,10 @@ -'use babel'; +"use babel" -import fs from 'fs'; -import path from 'path'; +import fs from "fs" +import path from "path" // Public: GrammarUtils.Nim - a module which selects the right file to run for Nim projects -export default { +const GrammarUtilsNim = { // Public: Find the right file to run // // * `file` A {String} containing the current editor file @@ -12,28 +12,26 @@ export default { // Returns the {String} filepath of file to run projectDir(editorfile) { - return path.dirname(editorfile); + return path.dirname(editorfile) }, findNimProjectFile(editorfile) { - if (path.extname(editorfile) === '.nims') { + if (path.extname(editorfile) === ".nims") { // if we have an .nims file - const tfile = editorfile.slice(0, -1); + const tfile = editorfile.slice(0, -1) if (fs.existsSync(tfile)) { // it has a corresponding .nim file. so thats a config file. // we run the .nim file instead. - return path.basename(tfile); + return path.basename(tfile) } // it has no corresponding .nim file, it is a standalone script - return path.basename(editorfile); + return path.basename(editorfile) } // check if we are running on a file with config - if (fs.existsSync(`${editorfile}s`) || - fs.existsSync(`${editorfile}.cfg`) || - fs.existsSync(`${editorfile}cfg`)) { - return path.basename(editorfile); + if (fs.existsSync(`${editorfile}s`) || fs.existsSync(`${editorfile}.cfg`) || fs.existsSync(`${editorfile}cfg`)) { + return path.basename(editorfile) } // assume we want to run a project @@ -41,22 +39,23 @@ export default { // a config file with the same name and // run this instead of the one in the editor // tab - const filepath = path.dirname(editorfile); - const files = fs.readdirSync(filepath); - files.sort(); + const filepath = path.dirname(editorfile) + const files = fs.readdirSync(filepath) + files.sort() for (const file of files) { - const name = `${filepath}/${file}`; + const name = `${filepath}/${file}` if (fs.statSync(name).isFile()) { - if (path.extname(name) === '.nims' || - path.extname(name) === '.nimcgf' || - path.extname(name) === '.cfg') { - const tfile = name.slice(0, -1); - if (fs.existsSync(tfile)) return path.basename(tfile); + if (path.extname(name) === ".nims" || path.extname(name) === ".nimcgf" || path.extname(name) === ".cfg") { + const tfile = name.slice(0, -1) + if (fs.existsSync(tfile)) { + return path.basename(tfile) + } } } } // just run what we got - return path.basename(editorfile); + return path.basename(editorfile) }, -}; +} +export default GrammarUtilsNim diff --git a/lib/grammar-utils/operating-system.js b/lib/grammar-utils/operating-system.js index 5d2f0c2b..8f742a33 100644 --- a/lib/grammar-utils/operating-system.js +++ b/lib/grammar-utils/operating-system.js @@ -1,31 +1,32 @@ -'use babel'; +"use babel" -import os from 'os'; +import os from "os" // Public: GrammarUtils.OperatingSystem - a module which exposes different // platform related helper functions. -export default { +const GrammarUtilsOperatingSystem = { isDarwin() { - return this.platform() === 'darwin'; + return this.platform() === "darwin" }, isWindows() { - return this.platform() === 'win32'; + return this.platform() === "win32" }, isLinux() { - return this.platform() === 'linux'; + return this.platform() === "linux" }, platform() { - return os.platform(); + return os.platform() }, architecture() { - return os.arch(); + return os.arch() }, release() { - return os.release(); + return os.release() }, -}; +} +export default GrammarUtilsOperatingSystem diff --git a/lib/grammar-utils/perl.js b/lib/grammar-utils/perl.js index dc9bca5b..a000c3bb 100644 --- a/lib/grammar-utils/perl.js +++ b/lib/grammar-utils/perl.js @@ -1,13 +1,14 @@ -'use babel'; +"use babel" // Public: GrammarUtils.Perl - a module which assist the creation of Perl temporary files -export default { +const GrammarUtilsPerl = { // Public: Create a temporary file with the provided Perl code // // * `code` A {String} containing some Perl code // // Returns the {String} filepath of the new file createTempFileWithCode(code) { - return module.parent.exports.createTempFileWithCode(code); + return module.parent.exports.createTempFileWithCode(code) }, -}; +} +export default GrammarUtilsPerl diff --git a/lib/grammar-utils/php.js b/lib/grammar-utils/php.js index 7fdd54a2..3b57b321 100644 --- a/lib/grammar-utils/php.js +++ b/lib/grammar-utils/php.js @@ -1,14 +1,17 @@ -'use babel'; +"use babel" // Public: GrammarUtils.PHP - a module which assist the creation of PHP temporary files -export default { +const GrammarUtilsPhp = { // Public: Create a temporary file with the provided PHP code // // * `code` A {String} containing some PHP code without - cmd = "'#{coffee}' -p '#{filepath}'|'#{babel}' --filename '#{bin}'| node" + cmd = "'#{coffee}' -p '#{filepath}'|'#{babel}' --filename '#{bin} --config-file #{babelConfig}'| node" return GrammarUtils.formatArgs(cmd) exports.CoffeeScript = diff --git a/lib/grammars/doc.coffee b/lib/grammars/doc.coffee index 2b988f63..ce84135e 100644 --- a/lib/grammars/doc.coffee +++ b/lib/grammars/doc.coffee @@ -44,6 +44,11 @@ exports.LaTeX = 'File Based': command: 'latexmk' args: ({filepath}) -> ['-cd', '-quiet', '-pdf', '-pv', '-shell-escape', filepath] + +exports.ConTeXt = + 'File Based': + command: 'context' + args: ({filepath}) -> ['--autopdf','--nonstopmode', '--synctex','--noconsole',filepath] exports['LaTeX Beamer'] = exports.LaTeX diff --git a/lib/grammars/javascript.js b/lib/grammars/javascript.js index 25b06c3e..137272e0 100644 --- a/lib/grammars/javascript.js +++ b/lib/grammars/javascript.js @@ -1,59 +1,67 @@ -'use babel'; +"use babel" -import path from 'path'; -import GrammarUtils, { command } from '../grammar-utils'; +import path from "path" +import GrammarUtils from "../grammar-utils" -const babel = path.join(__dirname, '../..', 'node_modules', '.bin', 'babel'); +const babel = path.join( + __dirname, + "../..", + "node_modules", + ".bin", + GrammarUtils.OperatingSystem.isWindows() ? "babel.cmd" : "babel" +) +const babelConfig = path.join(__dirname, "babel.config.js") const args = ({ filepath }) => { - const cmd = `'${babel}' --filename '${babel}' < '${filepath}'| node`; - return GrammarUtils.formatArgs(cmd); -}; -exports.Dart = { - 'Selection Based': { - command: 'dart', + const cmd = `'${babel}' --filename '${filepath}' --config-file ${babelConfig} < '${filepath}'| node` + return GrammarUtils.formatArgs(cmd) +} +export const Dart = { + "Selection Based": { + command: "dart", args: (context) => { - const code = context.getCode(); - const tmpFile = GrammarUtils.createTempFileWithCode(code, '.dart'); - return [tmpFile]; + const code = context.getCode() + const tmpFile = GrammarUtils.createTempFileWithCode(code, ".dart") + return [tmpFile] }, }, - 'File Based': { - command: 'dart', + "File Based": { + command: "dart", args: ({ filepath }) => [filepath], }, -}; -exports.JavaScript = { - 'Selection Based': { - command, +} +export const JavaScript = { + "Selection Based": { + command: GrammarUtils.command, args: (context) => { - const code = context.getCode(); - const filepath = GrammarUtils.createTempFileWithCode(code, '.js'); - return args({ filepath }); + const code = context.getCode() + const filepath = GrammarUtils.createTempFileWithCode(code, ".js") + return args({ filepath }) }, }, - 'File Based': { command, args }, -}; -exports['Babel ES6 JavaScript'] = exports.JavaScript; -exports['JavaScript with JSX'] = exports.JavaScript; + "File Based": { command: GrammarUtils.command, args }, +} +// TODO respect ES6 exporting +exports["Babel ES6 JavaScript"] = JavaScript +exports["JavaScript with JSX"] = JavaScript -exports['JavaScript for Automation (JXA)'] = { - 'Selection Based': { - command: 'osascript', - args: context => ['-l', 'JavaScript', '-e', context.getCode()], +exports["JavaScript for Automation (JXA)"] = { + "Selection Based": { + command: "osascript", + args: (context) => ["-l", "JavaScript", "-e", context.getCode()], }, - 'File Based': { - command: 'osascript', - args: ({ filepath }) => ['-l', 'JavaScript', filepath], + "File Based": { + command: "osascript", + args: ({ filepath }) => ["-l", "JavaScript", filepath], }, -}; -exports.TypeScript = { - 'Selection Based': { - command: 'ts-node', - args: context => ['-e', context.getCode()], +} +export const TypeScript = { + "Selection Based": { + command: "ts-node", + args: (context) => ["-e", context.getCode()], }, - 'File Based': { - command: 'ts-node', + "File Based": { + command: "ts-node", args: ({ filepath }) => [filepath], }, -}; +} diff --git a/lib/grammars/perl.coffee b/lib/grammars/perl.coffee index 585c127b..a0aeefc8 100644 --- a/lib/grammars/perl.coffee +++ b/lib/grammars/perl.coffee @@ -12,13 +12,13 @@ exports.Perl = command: 'perl' args: ({filepath}) -> [filepath] -exports['Perl 6'] = +exports['Raku'] = 'Selection Based': - command: 'perl6' + command: 'raku' args: (context) -> ['-e', context.getCode()] 'File Based': - command: 'perl6' + command: 'raku' args: ({filepath}) -> [filepath] -exports['Perl 6 FE'] = exports['Perl 6'] +exports['Perl 6'] = exports['Raku'] diff --git a/lib/header-view.js b/lib/header-view.js index 579a5c30..434b61b1 100644 --- a/lib/header-view.js +++ b/lib/header-view.js @@ -1,23 +1,28 @@ -'use babel'; +"use babel" -import { View } from 'atom-space-pen-views'; +import { View } from "atom-space-pen-views-plus" export default class HeaderView extends View { static content() { - return this.div({ class: 'header-view' }, () => { - this.span({ class: 'heading-title', outlet: 'title' }); - return this.span({ class: 'heading-status', outlet: 'status' }); - }); + return this.div({ class: "header-view" }, () => { + this.span({ class: "heading-title", outlet: "title" }) + return this.span({ class: "heading-status", outlet: "status" }) + }) } setStatus(status) { - this.status.removeClass('icon-alert icon-check icon-hourglass icon-stop'); + this.status.removeClass("icon-alert icon-check icon-hourglass icon-stop") switch (status) { - case 'start': return this.status.addClass('icon-hourglass'); - case 'stop': return this.status.addClass('icon-check'); - case 'kill': return this.status.addClass('icon-stop'); - case 'err': return this.status.addClass('icon-alert'); - default: return null; + case "start": + return this.status.addClass("icon-hourglass") + case "stop": + return this.status.addClass("icon-check") + case "kill": + return this.status.addClass("icon-stop") + case "err": + return this.status.addClass("icon-alert") + default: + return null } } } diff --git a/lib/link-paths.js b/lib/link-paths.js index da9b0e16..8cf023dc 100644 --- a/lib/link-paths.js +++ b/lib/link-paths.js @@ -1,27 +1,26 @@ -'use babel'; +"use babel" -/* eslint-disable no-multi-str, prefer-const, func-names */ -let linkPaths; -const regex = new RegExp('((?:\\w:)?/?(?:[-\\w.]+/)*[-\\w.]+):(\\d+)(?::(\\d+))?', 'g'); +let linkPaths +const regex = /((?:\w:)?\/?(?:[\w.-]+\/)*[\w.-]+):(\d+)(?::(\d+))?/g // ((?:\w:)?/? # Prefix of the path either '/' or 'C:/' (optional) -// (?:[-\w.]+/)*[-\w.]+) # The path of the file some/file/path.ext +// (?:[\w.-]+/)*[\w.-]+) # The path of the file some/file/path.ext // :(\d+) # Line number prefixed with a colon // (?::(\d+))? # Column number prefixed with a colon (optional) -const template = '$&'; +const template = '$&' -export default linkPaths = lines => lines.replace(regex, template); +export default linkPaths = (lines) => lines.replace(regex, template) -linkPaths.listen = parentView => - parentView.on('click', '.-linked-path', function () { - const el = this; - let { path, line, column } = el.dataset; - line = Number(line) - 1; +linkPaths.listen = (parentView) => + parentView.on("click", ".-linked-path", function () { + const el = this + let { path, line, column } = el.dataset + line = Number(line) - 1 // column number is optional - column = column ? Number(column) - 1 : 0; + column = column ? Number(column) - 1 : 0 atom.workspace.open(path, { initialLine: line, initialColumn: column, - }); - }); + }) + }) diff --git a/lib/runner.js b/lib/runner.js index c45365f5..204da4fc 100644 --- a/lib/runner.js +++ b/lib/runner.js @@ -1,8 +1,8 @@ -'use babel'; +"use babel" -import { Emitter, BufferedProcess } from 'atom'; -import fs from 'fs'; -import path from 'path'; +import { Emitter, BufferedProcess } from "atom" +import fs from "fs" +import path from "path" export default class Runner { // Public: Creates a Runner instance @@ -10,141 +10,157 @@ export default class Runner { // * `scriptOptions` a {ScriptOptions} object instance // * `emitter` Atom's {Emitter} instance. You probably don't need to overwrite it constructor(scriptOptions) { - this.bufferedProcess = null; - this.stdoutFunc = this.stdoutFunc.bind(this); - this.stderrFunc = this.stderrFunc.bind(this); - this.onExit = this.onExit.bind(this); - this.createOnErrorFunc = this.createOnErrorFunc.bind(this); - this.scriptOptions = scriptOptions; - this.emitter = new Emitter(); + this.bufferedProcess = null + this.stdoutFunc = this.stdoutFunc.bind(this) + this.stderrFunc = this.stderrFunc.bind(this) + this.onExit = this.onExit.bind(this) + this.createOnErrorFunc = this.createOnErrorFunc.bind(this) + this.scriptOptions = scriptOptions + this.emitter = new Emitter() } run(command, extraArgs, codeContext, inputString = null) { - this.startTime = new Date(); + this.startTime = new Date() - const args = this.args(codeContext, extraArgs); - const options = this.options(); - const stdout = this.stdoutFunc; - const stderr = this.stderrFunc; - const exit = this.onExit; + const args = this.args(codeContext, extraArgs) + const options = this.options() + const stdout = this.stdoutFunc + const stderr = this.stderrFunc + const exit = this.onExit this.bufferedProcess = new BufferedProcess({ - command, args, options, stdout, stderr, exit, - }); + command, + args, + options, + stdout, + stderr, + exit, + }) if (inputString) { - this.bufferedProcess.process.stdin.write(inputString); - this.bufferedProcess.process.stdin.end(); + this.bufferedProcess.process.stdin.write(inputString) + this.bufferedProcess.process.stdin.end() } - this.bufferedProcess.onWillThrowError(this.createOnErrorFunc(command)); + this.bufferedProcess.onWillThrowError(this.createOnErrorFunc(command)) } stdoutFunc(output) { - this.emitter.emit('did-write-to-stdout', { message: output }); + this.emitter.emit("did-write-to-stdout", { message: output }) } onDidWriteToStdout(callback) { - return this.emitter.on('did-write-to-stdout', callback); + return this.emitter.on("did-write-to-stdout", callback) } stderrFunc(output) { - this.emitter.emit('did-write-to-stderr', { message: output }); + this.emitter.emit("did-write-to-stderr", { message: output }) } onDidWriteToStderr(callback) { - return this.emitter.on('did-write-to-stderr', callback); + return this.emitter.on("did-write-to-stderr", callback) } destroy() { - this.emitter.dispose(); + this.emitter.dispose() } getCwd() { - let cwd = this.scriptOptions.workingDirectory; + let cwd = this.scriptOptions.workingDirectory if (!cwd) { - switch (atom.config.get('script.cwdBehavior')) { - case 'First project directory': { - const paths = atom.project.getPaths(); + switch (atom.config.get("script.cwdBehavior")) { + case "First project directory": { + const paths = atom.project.getPaths() if (paths && paths.length > 0) { try { - cwd = fs.statSync(paths[0]).isDirectory() ? paths[0] : path.join(paths[0], '..'); - } catch (error) { /* Don't throw */ } + cwd = fs.statSync(paths[0]).isDirectory() ? paths[0] : path.join(paths[0], "..") + } catch (error) { + /* Don't throw */ + } } - break; + break } - case 'Project directory of the script': { - cwd = this.getProjectPath(); - break; + case "Project directory of the script": { + cwd = this.getProjectPath() + break } - case 'Directory of the script': { - const pane = atom.workspace.getActivePaneItem(); - cwd = (pane && pane.buffer && pane.buffer.file && pane.buffer.file.getParent && - pane.buffer.file.getParent() && pane.buffer.file.getParent().getPath && - pane.buffer.file.getParent().getPath()) || ''; - break; + case "Directory of the script": { + const pane = atom.workspace.getActivePaneItem() + cwd = + (pane && + pane.buffer && + pane.buffer.file && + pane.buffer.file.getParent && + pane.buffer.file.getParent() && + pane.buffer.file.getParent().getPath && + pane.buffer.file.getParent().getPath()) || + "" + break } } } - return cwd; + return cwd } stop() { if (this.bufferedProcess) { - this.bufferedProcess.kill(); - this.bufferedProcess = null; + this.bufferedProcess.kill() + this.bufferedProcess = null } } onExit(returnCode) { - this.bufferedProcess = null; - let executionTime; + this.bufferedProcess = null + let executionTime - if ((atom.config.get('script.enableExecTime') === true) && this.startTime) { - executionTime = (new Date().getTime() - this.startTime.getTime()) / 1000; + if (atom.config.get("script.enableExecTime") === true && this.startTime) { + executionTime = (new Date().getTime() - this.startTime.getTime()) / 1000 } - this.emitter.emit('did-exit', { executionTime, returnCode }); + this.emitter.emit("did-exit", { executionTime, returnCode }) } onDidExit(callback) { - return this.emitter.on('did-exit', callback); + return this.emitter.on("did-exit", callback) } createOnErrorFunc(command) { return (nodeError) => { - this.bufferedProcess = null; - this.emitter.emit('did-not-run', { command }); - nodeError.handle(); - }; + this.bufferedProcess = null + this.emitter.emit("did-not-run", { command }) + nodeError.handle() + } } onDidNotRun(callback) { - return this.emitter.on('did-not-run', callback); + return this.emitter.on("did-not-run", callback) } options() { return { cwd: this.getCwd(), env: this.scriptOptions.mergedEnv(process.env), - }; + } } fillVarsInArg(arg, codeContext, projectPath) { if (codeContext.filepath) { - arg = arg.replace(/{FILE_ACTIVE}/g, codeContext.filepath); - arg = arg.replace(/{FILE_ACTIVE_PATH}/g, path.join(codeContext.filepath, '..')); + arg = arg.replace(/{FILE_ACTIVE}/g, codeContext.filepath) + arg = arg.replace(/{FILE_ACTIVE_PATH}/g, path.join(codeContext.filepath, "..")) } if (codeContext.filename) { - arg = arg.replace(/{FILE_ACTIVE_NAME}/g, codeContext.filename); - arg = arg.replace(/{FILE_ACTIVE_NAME_BASE}/g, path.basename(codeContext.filename, path.extname(codeContext.filename))); + arg = arg.replace(/{FILE_ACTIVE_NAME}/g, codeContext.filename) + arg = arg.replace( + /{FILE_ACTIVE_NAME_BASE}/g, + path.basename(codeContext.filename, path.extname(codeContext.filename)) + ) } if (projectPath) { - arg = arg.replace(/{PROJECT_PATH}/g, projectPath); + arg = arg.replace(/{PROJECT_PATH}/g, projectPath) } - return arg; + return arg } args(codeContext, extraArgs) { @@ -154,35 +170,41 @@ export default class Runner { // cmdArgs = customed command args from: // - a user's profil // - the 'Configure Run Options' panel - const cmdArgs = this.scriptOptions.cmdArgs; + const { cmdArgs } = this.scriptOptions // Let's overdrive the default args with the customed ones - let args = (cmdArgs.length) ? cmdArgs : extraArgs; + let args = cmdArgs.length ? cmdArgs : extraArgs // Do not forget to concat the script args after the command args - const scriptArgs = this.scriptOptions.scriptArgs; - args = args.concat(scriptArgs); - - const projectPath = this.getProjectPath || ''; - args = (args.map(arg => this.fillVarsInArg(arg, codeContext, projectPath))); + const { scriptArgs } = this.scriptOptions + args = args.concat(scriptArgs) + + const projectPath = this.getProjectPath || "" + args = args.map((arg) => { + if (typeof arg !== "string") { + // TODO why this happens? // https://github.com/atom-community/atom-script/issues/2082 + arg = "" + } + return this.fillVarsInArg(arg, codeContext, projectPath) + }) if (!this.scriptOptions.cmd) { - args = codeContext.shebangCommandArgs().concat(args); + args = codeContext.shebangCommandArgs().concat(args) } - return args; + return args } getProjectPath() { - const filePath = atom.workspace.getActiveTextEditor().getPath(); - const projectPaths = atom.project.getPaths(); + const filePath = atom.workspace.getActiveTextEditor().getPath() + const projectPaths = atom.project.getPaths() for (const projectPath of projectPaths) { if (filePath.indexOf(projectPath) > -1) { if (fs.statSync(projectPath).isDirectory()) { - return projectPath; + return projectPath } - return path.join(projectPath, '..'); + return path.join(projectPath, "..") } } - return null; + return null } } diff --git a/lib/runtime.js b/lib/runtime.js index caabf25c..806e3678 100644 --- a/lib/runtime.js +++ b/lib/runtime.js @@ -1,23 +1,23 @@ -'use babel'; +"use babel" -import { Emitter } from 'atom'; +import { Emitter } from "atom" -import _ from 'underscore'; +import _ from "underscore" -import CommandContext from './command-context'; +import CommandContext from "./command-context" export default class Runtime { // Public: Initializes a new {Runtime} instance // // This class is responsible for properly configuring {Runner} constructor(runner, codeContextBuilder, observers = [], terminals = []) { - this.runner = runner; - this.codeContextBuilder = codeContextBuilder; - this.observers = observers; - this.terminals = terminals; - this.emitter = new Emitter(); - this.scriptOptions = this.runner.scriptOptions; - _.each(this.observers, observer => observer.observe(this)); + this.runner = runner + this.codeContextBuilder = codeContextBuilder + this.observers = observers + this.terminals = terminals + this.emitter = new Emitter() + this.scriptOptions = this.runner.scriptOptions + _.each(this.observers, (observer) => observer.observe(this)) } // Public: Adds a new observer and asks it to listen for {Runner} events @@ -27,19 +27,19 @@ export default class Runtime { // (see {ViewRuntimeObserver} for what you are expected to handle) // * `destroy` - where you can do your cleanup addObserver(observer) { - this.observers.push(observer); - observer.observe(this); + this.observers.push(observer) + observer.observe(this) } // Public: disposes dependencies // // This should be called when you no longer need to use this class destroy() { - this.stop(); - this.runner.destroy(); - _.each(this.observers, observer => observer.destroy()); - this.emitter.dispose(); - this.codeContextBuilder.destroy(); + this.stop() + this.runner.destroy() + _.each(this.observers, (observer) => observer.destroy()) + this.emitter.dispose() + this.codeContextBuilder.destroy() } // Public: Executes code @@ -49,98 +49,101 @@ export default class Runtime { // * "Line Number Based" // * "File Based" // input (Optional) - {String} that'll be provided to the `stdin` of the new process - execute(argType = 'Selection Based', input = null, options = null) { - const codeContext = this.codeContextBuilder.buildCodeContext( - atom.workspace.getActiveTextEditor(), argType); + execute(argType = "Selection Based", input = null, options = null) { + const codeContext = this.codeContextBuilder.buildCodeContext(atom.workspace.getActiveTextEditor(), argType) // In the future we could handle a runner without the language being part // of the grammar map, using the options runner - if (!codeContext || !codeContext.lang) return; + if (!codeContext || !codeContext.lang) { + return + } - const executionOptions = !options ? this.scriptOptions : options; - const commandContext = CommandContext.build(this, executionOptions, codeContext); + const executionOptions = !options ? this.scriptOptions : options + const commandContext = CommandContext.build(this, executionOptions, codeContext) - const terminal = this.terminals[0]; + const terminal = this.terminals[0] if (terminal) { - let command = commandContext.command; + let command = commandContext.command for (let i = 0; i < commandContext.args.length; i++) { - command += ` "${commandContext.args[i]}"`; + command += ` "${commandContext.args[i]}"` } - terminal.run([`printf "\\33c\\e[3J" && ${command}`]); - return; + terminal.run([`printf "\\33c\\e[3J" && ${command}`]) + return } else { - console.log("No terminal found"); + console.log("No terminal found") } - if (atom.config.get('script.stopOnRerun')) this.stop(); - this.emitter.emit('start'); + if (atom.config.get("script.stopOnRerun")) this.stop() + this.emitter.emit("start") - if (!commandContext) return; + if (!commandContext) { + return + } if (commandContext.workingDirectory) { - executionOptions.workingDirectory = commandContext.workingDirectory; + executionOptions.workingDirectory = commandContext.workingDirectory } - this.emitter.emit('did-context-create', { + this.emitter.emit("did-context-create", { lang: codeContext.lang, filename: codeContext.filename, lineNumber: codeContext.lineNumber, - }); + }) - this.runner.scriptOptions = executionOptions; - this.runner.run(commandContext.command, commandContext.args, codeContext, input); - this.emitter.emit('started', commandContext); + this.runner.scriptOptions = executionOptions + this.runner.run(commandContext.command, commandContext.args, codeContext, input) + this.emitter.emit("started", commandContext) } // Public: stops execution of the current fork stop() { - this.emitter.emit('stop'); - this.runner.stop(); - this.emitter.emit('stopped'); + this.emitter.emit("stop") + this.runner.stop() + this.emitter.emit("stopped") } // Public: Dispatched when the execution is starting onStart(callback) { - return this.emitter.on('start', callback); + return this.emitter.on("start", callback) } // Public: Dispatched when the execution is started onStarted(callback) { - return this.emitter.on('started', callback); + return this.emitter.on("started", callback) } // Public: Dispatched when the execution is stopping onStop(callback) { - return this.emitter.on('stop', callback); + return this.emitter.on("stop", callback) } // Public: Dispatched when the execution is stopped onStopped(callback) { - return this.emitter.on('stopped', callback); + return this.emitter.on("stopped", callback) } // Public: Dispatched when the language is not specified onDidNotSpecifyLanguage(callback) { - return this.codeContextBuilder.onDidNotSpecifyLanguage(callback); + return this.codeContextBuilder.onDidNotSpecifyLanguage(callback) } // Public: Dispatched when the language is not supported // lang - {String} with the language name onDidNotSupportLanguage(callback) { - return this.codeContextBuilder.onDidNotSupportLanguage(callback); + return this.codeContextBuilder.onDidNotSupportLanguage(callback) } // Public: Dispatched when the mode is not supported // lang - {String} with the language name // argType - {String} with the run mode specified onDidNotSupportMode(callback) { - return this.emitter.on('did-not-support-mode', callback); + return this.emitter.on("did-not-support-mode", callback) } // Public: Dispatched when building run arguments resulted in an error // error - {Error} onDidNotBuildArgs(callback) { - return this.emitter.on('did-not-build-args', callback); + return this.emitter.on("did-not-build-args", callback) } // Public: Dispatched when the {CodeContext} is successfully created @@ -148,39 +151,39 @@ export default class Runtime { // filename - {String} with the filename // lineNumber - {Number} with the line number (may be null) onDidContextCreate(callback) { - return this.emitter.on('did-context-create', callback); + return this.emitter.on("did-context-create", callback) } // Public: Dispatched when the process you run writes something to stdout // message - {String} with the output onDidWriteToStdout(callback) { - return this.runner.onDidWriteToStdout(callback); + return this.runner.onDidWriteToStdout(callback) } // Public: Dispatched when the process you run writes something to stderr // message - {String} with the output onDidWriteToStderr(callback) { - return this.runner.onDidWriteToStderr(callback); + return this.runner.onDidWriteToStderr(callback) } // Public: Dispatched when the process you run exits // returnCode - {Number} with the process' exit code // executionTime - {Number} with the process' exit code onDidExit(callback) { - return this.runner.onDidExit(callback); + return this.runner.onDidExit(callback) } // Public: Dispatched when the code you run did not manage to run // command - {String} with the run command onDidNotRun(callback) { - return this.runner.onDidNotRun(callback); + return this.runner.onDidNotRun(callback) } modeNotSupported(argType, lang) { - this.emitter.emit('did-not-support-mode', { argType, lang }); + this.emitter.emit("did-not-support-mode", { argType, lang }) } didNotBuildArgs(error) { - this.emitter.emit('did-not-build-args', { error }); + this.emitter.emit("did-not-build-args", { error }) } } diff --git a/lib/script-input-view.js b/lib/script-input-view.js index b461f23b..a979c0f1 100644 --- a/lib/script-input-view.js +++ b/lib/script-input-view.js @@ -1,77 +1,81 @@ -'use babel'; +"use babel" -import { Emitter, CompositeDisposable } from 'atom'; -import { View } from 'atom-space-pen-views'; +import { Emitter, CompositeDisposable } from "atom" +import { View } from "atom-space-pen-views-plus" export default class ScriptInputView extends View { static content() { - this.div({ class: 'script-input-view' }, () => { - this.div({ class: 'caption' }, ''); - this.tag('atom-text-editor', { mini: '', class: 'editor mini' }); - }); + this.div({ class: "script-input-view" }, () => { + this.div({ class: "caption" }, "") + this.tag("atom-text-editor", { mini: "", class: "editor mini" }) + }) } initialize(options) { - this.options = options; - this.emitter = new Emitter(); + this.options = options + this.emitter = new Emitter() - this.panel = atom.workspace.addModalPanel({ item: this }); - this.panel.hide(); + this.panel = atom.workspace.addModalPanel({ item: this }) + this.panel.hide() - this.editor = this.find('atom-text-editor').get(0).getModel(); + this.editor = this.find("atom-text-editor").get(0).getModel() // set default text if (this.options.default) { - this.editor.setText(this.options.default); - this.editor.selectAll(); + this.editor.setText(this.options.default) + this.editor.selectAll() } // caption text if (this.options.caption) { - this.find('.caption').text(this.options.caption); + this.find(".caption").text(this.options.caption) } - this.find('atom-text-editor').on('keydown', (e) => { + this.find("atom-text-editor").on("keydown", (e) => { if (e.keyCode === 27) { - e.stopPropagation(); - this.emitter.emit('on-cancel'); - this.hide(); + e.stopPropagation() + this.emitter.emit("on-cancel") + this.hide() } - }); + }) - this.subscriptions = new CompositeDisposable(); - this.subscriptions.add(atom.commands.add('atom-workspace', { - 'core:confirm': () => { - this.emitter.emit('on-confirm', this.editor.getText().trim()); - this.hide(); - }, - })); + this.subscriptions = new CompositeDisposable() + this.subscriptions.add( + atom.commands.add("atom-workspace", { + "core:confirm": () => { + this.emitter.emit("on-confirm", this.editor.getText().trim()) + this.hide() + }, + }) + ) } onConfirm(callback) { - return this.emitter.on('on-confirm', callback); + return this.emitter.on("on-confirm", callback) } onCancel(callback) { - return this.emitter.on('on-cancel', callback); + return this.emitter.on("on-cancel", callback) } focus() { - this.find('atom-text-editor').focus(); + this.find("atom-text-editor").focus() } show() { - this.panel.show(); - this.focus(); + this.panel.show() + this.focus() } hide() { - this.panel.hide(); - this.destroy(); + this.panel.hide() + this.destroy() } destroy() { - if (this.subscriptions) this.subscriptions.dispose(); - this.panel.destroy(); + if (this.subscriptions) { + this.subscriptions.dispose() + } + this.panel.destroy() } } diff --git a/lib/script-options-view.js b/lib/script-options-view.js index 7af8594a..e740d641 100644 --- a/lib/script-options-view.js +++ b/lib/script-options-view.js @@ -1,188 +1,195 @@ -'use babel'; +"use babel" -import { CompositeDisposable, Emitter } from 'atom'; -import { View } from 'atom-space-pen-views'; -import _ from 'underscore'; -import ScriptInputView from './script-input-view'; +import { CompositeDisposable, Emitter } from "atom" +import { View } from "atom-space-pen-views-plus" +import _ from "underscore" +import ScriptInputView from "./script-input-view" export default class ScriptOptionsView extends View { static content() { - this.div({ class: 'options-view' }, () => { - this.h4({ class: 'modal-header' }, 'Configure Run Options'); - this.div({ class: 'modal-body' }, () => { + this.div({ class: "options-view" }, () => { + this.h4({ class: "modal-header" }, "Configure Run Options") + this.div({ class: "modal-body" }, () => { this.table(() => { this.tr(() => { - this.td({ class: 'first' }, () => this.label('Current Working Directory:')); - this.td({ class: 'second' }, () => this.tag('atom-text-editor', { mini: '', class: 'editor mini', outlet: 'inputCwd' })); - }); + this.td({ class: "first" }, () => this.label("Current Working Directory:")) + this.td({ class: "second" }, () => + this.tag("atom-text-editor", { mini: "", class: "editor mini", outlet: "inputCwd" }) + ) + }) this.tr(() => { - this.td(() => this.label('Command')); - this.td(() => this.tag('atom-text-editor', { mini: '', class: 'editor mini', outlet: 'inputCommand' })); - }); + this.td(() => this.label("Command")) + this.td(() => this.tag("atom-text-editor", { mini: "", class: "editor mini", outlet: "inputCommand" })) + }) this.tr(() => { - this.td(() => this.label('Command Arguments:')); - this.td(() => this.tag('atom-text-editor', { mini: '', class: 'editor mini', outlet: 'inputCommandArgs' })); - }); + this.td(() => this.label("Command Arguments:")) + this.td(() => this.tag("atom-text-editor", { mini: "", class: "editor mini", outlet: "inputCommandArgs" })) + }) this.tr(() => { - this.td(() => this.label('Program Arguments:')); - this.td(() => this.tag('atom-text-editor', { mini: '', class: 'editor mini', outlet: 'inputScriptArgs' })); - }); + this.td(() => this.label("Program Arguments:")) + this.td(() => this.tag("atom-text-editor", { mini: "", class: "editor mini", outlet: "inputScriptArgs" })) + }) this.tr(() => { - this.td(() => this.label('Environment Variables:')); - this.td(() => this.tag('atom-text-editor', { mini: '', class: 'editor mini', outlet: 'inputEnv' })); - }); - }); - }); - this.div({ class: 'modal-footer' }, () => { - const css = 'btn inline-block-tight'; - this.button({ class: `btn ${css} cancel`, outlet: 'buttonCancel', click: 'close' }, () => - this.span({ class: 'icon icon-x' }, 'Cancel'), - ); - this.span({ class: 'pull-right' }, () => { - this.button({ class: `btn ${css} save-profile`, outlet: 'buttonSaveProfile', click: 'saveProfile' }, () => - this.span({ class: 'icon icon-file-text' }, 'Save as profile'), - ); - this.button({ class: `btn ${css} run`, outlet: 'buttonRun', click: 'run' }, () => - this.span({ class: 'icon icon-playback-play' }, 'Run'), - ); - }); - }); - }); + this.td(() => this.label("Environment Variables:")) + this.td(() => this.tag("atom-text-editor", { mini: "", class: "editor mini", outlet: "inputEnv" })) + }) + }) + }) + this.div({ class: "modal-footer" }, () => { + const css = "btn inline-block-tight" + this.button({ class: `btn ${css} cancel`, outlet: "buttonCancel", click: "close" }, () => + this.span({ class: "icon icon-x" }, "Cancel") + ) + this.span({ class: "pull-right" }, () => { + this.button({ class: `btn ${css} save-profile`, outlet: "buttonSaveProfile", click: "saveProfile" }, () => + this.span({ class: "icon icon-file-text" }, "Save as profile") + ) + this.button({ class: `btn ${css} run`, outlet: "buttonRun", click: "run" }, () => + this.span({ class: "icon icon-playback-play" }, "Run") + ) + }) + }) + }) } initialize(runOptions) { - this.runOptions = runOptions; - this.emitter = new Emitter(); - - this.subscriptions = new CompositeDisposable(); - this.subscriptions.add(atom.commands.add('atom-workspace', { - 'core:cancel': () => this.hide(), - 'core:close': () => this.hide(), - 'script:close-options': () => this.hide(), - 'script:run-options': () => (this.panel.isVisible() ? this.hide() : this.show()), - 'script:save-options': () => this.saveOptions(), - })); + this.runOptions = runOptions + this.emitter = new Emitter() + + this.subscriptions = new CompositeDisposable() + this.subscriptions.add( + atom.commands.add("atom-workspace", { + "core:cancel": () => this.hide(), + "core:close": () => this.hide(), + "script:close-options": () => this.hide(), + "script:run-options": () => (this.panel.isVisible() ? this.hide() : this.show()), + "script:save-options": () => this.saveOptions(), + }) + ) // handling focus traversal and run on enter - this.find('atom-text-editor').on('keydown', (e) => { - if (e.keyCode !== 9 && e.keyCode !== 13) return true; + this.find("atom-text-editor").on("keydown", (e) => { + if (e.keyCode !== 9 && e.keyCode !== 13) { + return true + } switch (e.keyCode) { case 9: { - e.preventDefault(); - e.stopPropagation(); - const row = this.find(e.target).parents('tr:first').nextAll('tr:first'); + e.preventDefault() + e.stopPropagation() + const row = this.find(e.target).parents("tr:first").nextAll("tr:first") if (row.length) { - return row.find('atom-text-editor').focus(); + return row.find("atom-text-editor").focus() } - return this.buttonCancel.focus(); + return this.buttonCancel.focus() } - case 13: return this.run(); + case 13: + return this.run() } - return null; - }); + return null + }) - this.panel = atom.workspace.addModalPanel({ item: this }); - this.panel.hide(); + this.panel = atom.workspace.addModalPanel({ item: this }) + this.panel.hide() } static splitArgs(argText) { - const text = argText.trim(); - const argSubstringRegex = /([^'"\s]+)|((["'])(.*?)\3)/g; - const args = []; - let lastMatchEndPosition = -1; - let match = argSubstringRegex.exec(text); + const text = argText.trim() + const argSubstringRegex = /([^\s"']+)|((["'])(.*?)\3)/g + const args = [] + let lastMatchEndPosition = -1 + let match = argSubstringRegex.exec(text) while (match !== null) { - const matchWithoutQuotes = match[1] || match[4]; + const matchWithoutQuotes = match[1] || match[4] // Combine current result with last match, if last match ended where this // one begins. if (lastMatchEndPosition === match.index) { - args[args.length - 1] += matchWithoutQuotes; + args[args.length - 1] += matchWithoutQuotes } else { - args.push(matchWithoutQuotes); + args.push(matchWithoutQuotes) } - lastMatchEndPosition = argSubstringRegex.lastIndex; - match = argSubstringRegex.exec(text); + lastMatchEndPosition = argSubstringRegex.lastIndex + match = argSubstringRegex.exec(text) } - return args; + return args } getOptions() { return { workingDirectory: this.inputCwd.get(0).getModel().getText(), cmd: this.inputCommand.get(0).getModel().getText(), - cmdArgs: this.constructor.splitArgs( - this.inputCommandArgs.get(0).getModel().getText(), - ), + cmdArgs: this.constructor.splitArgs(this.inputCommandArgs.get(0).getModel().getText()), env: this.inputEnv.get(0).getModel().getText(), - scriptArgs: this.constructor.splitArgs( - this.inputScriptArgs.get(0).getModel().getText(), - ), - }; + scriptArgs: this.constructor.splitArgs(this.inputScriptArgs.get(0).getModel().getText()), + } } saveOptions() { - const options = this.getOptions(); + const options = this.getOptions() for (const option in options) { - const value = options[option]; - this.runOptions[option] = value; + const value = options[option] + this.runOptions[option] = value } } onProfileSave(callback) { - return this.emitter.on('on-profile-save', callback); + return this.emitter.on("on-profile-save", callback) } // Saves specified options as new profile saveProfile() { - this.hide(); + this.hide() - const options = this.getOptions(); + const options = this.getOptions() - const inputView = new ScriptInputView({ caption: 'Enter profile name:' }); - inputView.onCancel(() => this.show()); + const inputView = new ScriptInputView({ caption: "Enter profile name:" }) + inputView.onCancel(() => this.show()) inputView.onConfirm((profileName) => { - if (!profileName) return; - _.forEach(this.find('atom-text-editor'), (editor) => { - editor.getModel().setText(''); - }); + if (!profileName) { + return + } + _.forEach(this.find("atom-text-editor"), (editor) => { + editor.getModel().setText("") + }) // clean up the options - this.saveOptions(); + this.saveOptions() // add to global profiles list - this.emitter.emit('on-profile-save', { name: profileName, options }); - }); + this.emitter.emit("on-profile-save", { name: profileName, options }) + }) - inputView.show(); + inputView.show() } close() { - this.hide(); + this.hide() } destroy() { - if (this.subscriptions) this.subscriptions.dispose(); + if (this.subscriptions) { + this.subscriptions.dispose() + } } show() { - this.panel.show(); - this.inputCwd.focus(); + this.panel.show() + this.inputCwd.focus() } hide() { - this.panel.hide(); - atom.workspace.getActivePane().activate(); + this.panel.hide() + atom.workspace.getActivePane().activate() } run() { - this.saveOptions(); - this.hide(); - atom.commands.dispatch(this.getWorkspaceView(), 'script:run'); + this.saveOptions() + this.hide() + atom.commands.dispatch(this.getWorkspaceView(), "script:run") } getWorkspaceView() { - return atom.views.getView(atom.workspace); + return atom.views.getView(atom.workspace) } } diff --git a/lib/script-options.js b/lib/script-options.js index 82380c0b..3b576b18 100644 --- a/lib/script-options.js +++ b/lib/script-options.js @@ -1,24 +1,27 @@ -'use babel'; +"use babel" -import _ from 'underscore'; +import _ from "underscore" export default class ScriptOptions { constructor() { - this.name = ''; - this.description = ''; - this.lang = ''; - this.workingDirectory = null; - this.cmd = null; - this.cmdArgs = []; - this.env = null; - this.scriptArgs = []; + this.name = "" + this.description = "" + this.lang = "" + this.workingDirectory = null + this.cmd = null + this.cmdArgs = [] + this.env = null + this.scriptArgs = [] } static createFromOptions(name, options) { - const so = new ScriptOptions(); - so.name = name; - for (const key in options) { const value = options[key]; so[key] = value; } - return so; + const so = new ScriptOptions() + so.name = name + for (const key in options) { + const value = options[key] + so[key] = value + } + return so } toObject() { @@ -31,7 +34,7 @@ export default class ScriptOptions { cmdArgs: this.cmdArgs, env: this.env, scriptArgs: this.scriptArgs, - }; + } } // Public: Serializes the user specified environment vars as an {object} @@ -39,18 +42,19 @@ export default class ScriptOptions { // // Returns an {Object} representation of the user specified environment. getEnv() { - if (!this.env) return {}; + if (!this.env) { + return {} + } - const mapping = {}; + const mapping = {} - for (const pair of this.env.trim().split(';')) { - const [key, value] = pair.split('=', 2); - mapping[key] = `${value}`.replace(/"((?:[^"\\]|\\"|\\[^"])+)"/, '$1'); - mapping[key] = mapping[key].replace(/'((?:[^'\\]|\\'|\\[^'])+)'/, '$1'); + for (const pair of this.env.trim().split(";")) { + const [key, value] = pair.split("=", 2) + mapping[key] = `${value}`.replace(/"((?:[^"\\]|\\"|\\[^"])+)"/, "$1") + mapping[key] = mapping[key].replace(/'((?:[^'\\]|\\'|\\[^'])+)'/, "$1") } - - return mapping; + return mapping } // Public: Merges two environment objects @@ -59,15 +63,15 @@ export default class ScriptOptions { // // Returns the merged environment {Object}. mergedEnv(otherEnv) { - const otherCopy = _.extend({}, otherEnv); - const mergedEnv = _.extend(otherCopy, this.getEnv()); + const otherCopy = _.extend({}, otherEnv) + const mergedEnv = _.extend(otherCopy, this.getEnv()) for (const key in mergedEnv) { - const value = mergedEnv[key]; - mergedEnv[key] = `${value}`.replace(/"((?:[^"\\]|\\"|\\[^"])+)"/, '$1'); - mergedEnv[key] = mergedEnv[key].replace(/'((?:[^'\\]|\\'|\\[^'])+)'/, '$1'); + const value = mergedEnv[key] + mergedEnv[key] = `${value}`.replace(/"((?:[^"\\]|\\"|\\[^"])+)"/, "$1") + mergedEnv[key] = mergedEnv[key].replace(/'((?:[^'\\]|\\'|\\[^'])+)'/, "$1") } - return mergedEnv; + return mergedEnv } } diff --git a/lib/script-profile-run-view.js b/lib/script-profile-run-view.js index b1f7ea0e..a03618c2 100644 --- a/lib/script-profile-run-view.js +++ b/lib/script-profile-run-view.js @@ -1,179 +1,191 @@ -'use babel'; +"use babel" -/* eslint-disable func-names */ -import { CompositeDisposable, Emitter } from 'atom'; -import { $$, SelectListView } from 'atom-space-pen-views'; -import ScriptInputView from './script-input-view'; +import { CompositeDisposable, Emitter } from "atom" +import { $$, SelectListView } from "atom-space-pen-views-plus" +import ScriptInputView from "./script-input-view" export default class ScriptProfileRunView extends SelectListView { initialize(profiles) { - this.profiles = profiles; - super.initialize(...arguments); - - this.emitter = new Emitter(); - - this.subscriptions = new CompositeDisposable(); - this.subscriptions.add(atom.commands.add('atom-workspace', { - 'core:cancel': () => this.hide(), - 'core:close': () => this.hide(), - 'script:run-with-profile': () => (this.panel.isVisible() ? this.hide() : this.show()), - })); - - this.setItems(this.profiles); - this.initializeView(); + this.profiles = profiles + super.initialize(...arguments) + + this.emitter = new Emitter() + + this.subscriptions = new CompositeDisposable() + this.subscriptions.add( + atom.commands.add("atom-workspace", { + "core:cancel": () => this.hide(), + "core:close": () => this.hide(), + "script:run-with-profile": () => (this.panel.isVisible() ? this.hide() : this.show()), + }) + ) + + this.setItems(this.profiles) + this.initializeView() } initializeView() { - this.addClass('overlay from-top script-profile-run-view'); + this.addClass("overlay from-top script-profile-run-view") // @panel.hide() this.buttons = $$(function () { - this.div({ class: 'block buttons' }, () => { - /* eslint-disable no-unused-vars */ - const css = 'btn inline-block-tight'; - /* eslint-enable no-unused-vars */ - this.button({ class: 'btn cancel' }, () => this.span({ class: 'icon icon-x' }, 'Cancel')); - this.button({ class: 'btn rename' }, () => this.span({ class: 'icon icon-pencil' }, 'Rename')); - this.button({ class: 'btn delete' }, () => this.span({ class: 'icon icon-trashcan' }, 'Delete')); - this.button({ class: 'btn run' }, () => this.span({ class: 'icon icon-playback-play' }, 'Run')); - }); - }); + this.div({ class: "block buttons" }, () => { + const css = "btn inline-block-tight" + this.button({ class: "btn cancel" }, () => this.span({ class: "icon icon-x" }, "Cancel")) + this.button({ class: "btn rename" }, () => this.span({ class: "icon icon-pencil" }, "Rename")) + this.button({ class: "btn delete" }, () => this.span({ class: "icon icon-trashcan" }, "Delete")) + this.button({ class: "btn run" }, () => this.span({ class: "icon icon-playback-play" }, "Run")) + }) + }) // event handlers - this.buttons.find('.btn.cancel').on('click', () => this.hide()); - this.buttons.find('.btn.rename').on('click', () => this.rename()); - this.buttons.find('.btn.delete').on('click', () => this.delete()); - this.buttons.find('.btn.run').on('click', () => this.run()); + this.buttons.find(".btn.cancel").on("click", () => this.hide()) + this.buttons.find(".btn.rename").on("click", () => this.rename()) + this.buttons.find(".btn.delete").on("click", () => this.delete()) + this.buttons.find(".btn.run").on("click", () => this.run()) // fix focus traversal (from run button to filter editor) - this.buttons.find('.btn.run').on('keydown', (e) => { + this.buttons.find(".btn.run").on("keydown", (e) => { if (e.keyCode === 9) { - e.stopPropagation(); - e.preventDefault(); - this.focusFilterEditor(); + e.stopPropagation() + e.preventDefault() + this.focusFilterEditor() } - }); + }) // hide panel on ecsape - this.on('keydown', (e) => { - if (e.keyCode === 27) { this.hide(); } - if (e.keyCode === 13) { this.run(); } - }); + this.on("keydown", (e) => { + if (e.keyCode === 27) { + this.hide() + } + if (e.keyCode === 13) { + this.run() + } + }) // append buttons container - this.append(this.buttons); + this.append(this.buttons) - const selector = '.rename, .delete, .run'; + const selector = ".rename, .delete, .run" if (this.profiles.length) { - this.buttons.find(selector).show(); + this.buttons.find(selector).show() } else { - this.buttons.find(selector).hide(); + this.buttons.find(selector).hide() } - this.panel = atom.workspace.addModalPanel({ item: this }); - this.panel.hide(); + this.panel = atom.workspace.addModalPanel({ item: this }) + this.panel.hide() } onProfileDelete(callback) { - return this.emitter.on('on-profile-delete', callback); + return this.emitter.on("on-profile-delete", callback) } onProfileChange(callback) { - return this.emitter.on('on-profile-change', callback); + return this.emitter.on("on-profile-change", callback) } onProfileRun(callback) { - return this.emitter.on('on-profile-run', callback); + return this.emitter.on("on-profile-run", callback) } - rename() { - const profile = this.getSelectedItem(); - if (!profile) { return; } + const profile = this.getSelectedItem() + if (!profile) { + return + } - const inputView = new ScriptInputView({ caption: 'Enter new profile name:', default: profile.name }); - inputView.onCancel(() => this.show()); + const inputView = new ScriptInputView({ caption: "Enter new profile name:", default: profile.name }) + inputView.onCancel(() => this.show()) inputView.onConfirm((newProfileName) => { - if (!newProfileName) { return; } - this.emitter.emit('on-profile-change', { profile, key: 'name', value: newProfileName }); - }, - ); + if (!newProfileName) { + return + } + this.emitter.emit("on-profile-change", { profile, key: "name", value: newProfileName }) + }) - inputView.show(); + inputView.show() } delete() { - const profile = this.getSelectedItem(); - if (!profile) { return; } + const profile = this.getSelectedItem() + if (!profile) { + return + } atom.confirm({ - message: 'Delete profile', + message: "Delete profile", detailedMessage: `Are you sure you want to delete "${profile.name}" profile?`, buttons: { No: () => this.focusFilterEditor(), - Yes: () => this.emitter.emit('on-profile-delete', profile), + Yes: () => this.emitter.emit("on-profile-delete", profile), }, - }); + }) } getFilterKey() { - return 'name'; + return "name" } getEmptyMessage() { - return 'No profiles found'; + return "No profiles found" } viewForItem(item) { return $$(function () { - this.li({ class: 'two-lines profile' }, () => { - this.div({ class: 'primary-line name' }, () => this.text(item.name)); - this.div({ class: 'secondary-line description' }, () => this.text(item.description)); - }); - }); + this.li({ class: "two-lines profile" }, () => { + this.div({ class: "primary-line name" }, () => this.text(item.name)) + this.div({ class: "secondary-line description" }, () => this.text(item.description)) + }) + }) } cancel() {} + confirmed() {} show() { - this.panel.show(); - this.focusFilterEditor(); + this.panel.show() + this.focusFilterEditor() } hide() { - this.panel.hide(); - atom.workspace.getActivePane().activate(); + this.panel.hide() + atom.workspace.getActivePane().activate() } // Updates profiles setProfiles(profiles) { - this.profiles = profiles; - this.setItems(this.profiles); + this.profiles = profiles + this.setItems(this.profiles) // toggle profile controls - const selector = '.rename, .delete, .run'; + const selector = ".rename, .delete, .run" if (this.profiles.length) { - this.buttons.find(selector).show(); + this.buttons.find(selector).show() } else { - this.buttons.find(selector).hide(); + this.buttons.find(selector).hide() } - this.populateList(); - this.focusFilterEditor(); + this.populateList() + this.focusFilterEditor() } close() {} destroy() { - if (this.subscriptions) this.subscriptions.dispose(); + if (this.subscriptions) { + this.subscriptions.dispose() + } } run() { - const profile = this.getSelectedItem(); - if (!profile) { return; } + const profile = this.getSelectedItem() + if (!profile) { + return + } - this.emitter.emit('on-profile-run', profile); - this.hide(); + this.emitter.emit("on-profile-run", profile) + this.hide() } } diff --git a/lib/script-view.js b/lib/script-view.js index 421f1a71..c41b630d 100644 --- a/lib/script-view.js +++ b/lib/script-view.js @@ -1,106 +1,113 @@ -'use babel'; +"use babel" -/* eslint-disable func-names */ -import { $$ } from 'atom-space-pen-views'; -import { MessagePanelView } from 'atom-message-panel'; -import _ from 'underscore'; -import AnsiFilter from 'ansi-to-html'; -import stripAnsi from 'strip-ansi'; +import { $$ } from "atom-space-pen-views-plus" +import { MessagePanelView } from "atom-message-panel" +import _ from "underscore" +import AnsiFilter from "ansi-to-html" +import stripAnsi from "strip-ansi" -import HeaderView from './header-view'; -import linkPaths from './link-paths'; +import HeaderView from "./header-view" +import linkPaths from "./link-paths" // Runs a portion of a script through an interpreter and displays it line by line export default class ScriptView extends MessagePanelView { constructor() { - const headerView = new HeaderView(); - super({ title: headerView, rawTitle: true, closeMethod: 'destroy' }); + const headerView = new HeaderView() + super({ title: headerView, rawTitle: true, closeMethod: "destroy" }) - this.scrollTimeout = null; - this.ansiFilter = new AnsiFilter(); - this.headerView = headerView; + this.scrollTimeout = null + this.ansiFilter = new AnsiFilter() + this.headerView = headerView + // Use 'bottom' as the default position, because that was + // the behaviour before the position became configurable: + this.position = "bottom" + atom.config.observe("script.position", (newVal) => { + this.position = newVal + }) - this.showInTab = this.showInTab.bind(this); - this.setHeaderAndShowExecutionTime = this.setHeaderAndShowExecutionTime.bind(this); - this.addClass('script-view'); - this.addShowInTabIcon(); + this.showInTab = this.showInTab.bind(this) + this.setHeaderAndShowExecutionTime = this.setHeaderAndShowExecutionTime.bind(this) + this.addClass("script-view") + this.addShowInTabIcon() - linkPaths.listen(this.body); + linkPaths.listen(this.body) } addShowInTabIcon() { const icon = $$(function () { this.div({ - class: 'heading-show-in-tab inline-block icon-file-text', - style: 'cursor: pointer;', - outlet: 'btnShowInTab', - title: 'Show output in new tab', - }); - }); + class: "heading-show-in-tab inline-block icon-file-text", + style: "cursor: pointer;", + outlet: "btnShowInTab", + title: "Show output in new tab", + }) + }) - icon.click(this.showInTab); - icon.insertBefore(this.btnAutoScroll); + icon.click(this.showInTab) + icon.insertBefore(this.btnAutoScroll) } showInTab() { // concat output - let output = ''; - for (const message of this.messages) { output += message.text(); } + let output = "" + for (const message of this.messages) { + output += message.text() + } // represent command context - let context = ''; + let context = "" if (this.commandContext) { - context = `[Command: ${this.commandContext.getRepresentation()}]\n`; + context = `[Command: ${this.commandContext.getRepresentation()}]\n` } // open new tab and set content to output - atom.workspace.open().then(editor => editor.setText(stripAnsi(context + output))); + atom.workspace.open().then((editor) => editor.setText(stripAnsi(context + output))) } setHeaderAndShowExecutionTime(returnCode, executionTime) { if (executionTime) { - this.display('stdout', `[Finished in ${executionTime.toString()}s]`); + this.display("stdout", `[Finished in ${executionTime.toString()}s]`) } else { - this.display('stdout'); + this.display("stdout") } if (returnCode === 0) { - this.setHeaderStatus('stop'); + this.setHeaderStatus("stop") } else { - this.setHeaderStatus('err'); + this.setHeaderStatus("err") } } - resetView(title = 'Loading...') { + resetView(title = "Loading...") { // Display window and load message - this.attach(); + this.attach() - this.setHeaderTitle(title); - this.setHeaderStatus('start'); + this.setHeaderTitle(title) + this.setHeaderStatus("start") // Get script view ready - this.clear(); + this.clear() } removePanel() { - this.stop(); - this.detach(); + this.stop() + this.detach() // the 'close' method from MessagePanelView actually destroys the panel - Object.getPrototypeOf(ScriptView.prototype).close.apply(this); + Object.getPrototypeOf(ScriptView.prototype).close.apply(this) } // This is triggered when hitting the 'close' button on the panel // We are not actually closing the panel here since we want to trigger // 'script:close-view' which will eventually remove the panel via 'removePanel' close() { - const workspaceView = atom.views.getView(atom.workspace); - atom.commands.dispatch(workspaceView, 'script:close-view'); + const workspaceView = atom.views.getView(atom.workspace) + atom.commands.dispatch(workspaceView, "script:close-view") } stop() { - this.display('stdout', '^C'); - this.setHeaderStatus('kill'); + this.display("stdout", "^C") + this.setHeaderStatus("kill") } createGitHubIssueLink(argType, lang) { @@ -111,103 +118,115 @@ export default class ScriptView extends MessagePanelView { // encodedURI = encodedURI.replace(/#/g, '%23'); const err = $$(function () { - this.p({ class: 'block' }, `${argType} runner not available for ${lang}.`); + this.p({ class: "block" }, `${argType} runner not available for ${lang}.`) // this.p({ class: 'block' }, () => { // this.text('If it should exist, add an '); // this.a({ href: encodedURI }, 'issue on GitHub'); // this.text(', or send your own pull request.'); // }, // ); - }); - this.handleError(err); + }) + this.handleError(err) } showUnableToRunError(command) { - this.add($$(function () { - this.h1('Unable to run'); - this.pre(_.escape(command)); - this.h2('Did you start Atom from the command line?'); - this.pre(' atom .'); - this.h2('Is it in your PATH?'); - this.pre(`PATH: ${_.escape(process.env.PATH)}`); - }), - ); + this.add( + $$(function () { + this.h1("Unable to run") + this.pre(_.escape(command)) + this.h2("Did you start Atom from the command line?") + this.pre(" atom .") + this.h2("Is it in your PATH?") + this.pre(`PATH: ${_.escape(process.env.PATH)}`) + }) + ) } showNoLanguageSpecified() { const err = $$(function () { - this.p('You must select a language in the lower right, or save the file with an appropriate extension.', - ); - }); - this.handleError(err); + this.p("You must select a language in the lower right, or save the file with an appropriate extension.") + }) + this.handleError(err) } showLanguageNotSupported(lang) { const err = $$(function () { - this.p({ class: 'block' }, `Command not configured for ${lang}!`); - this.p({ class: 'block' }, () => { - this.text('Add an '); - this.a({ href: `https://github.com/atom-ide-community/atom-script/issues/new?title=Add%20support%20for%20${lang}` }, 'issue on GitHub'); - this.text(' or send your own Pull Request.'); - }); - }); - this.handleError(err); + this.p({ class: "block" }, `Command not configured for ${lang}!`) + this.p({ class: "block" }, () => { + this.text("Add an ") + this.a( + { href: `https://github.com/atom-ide-community/atom-script/issues/new?title=Add%20support%20for%20${lang}` }, + "issue on GitHub" + ) + this.text(" or send your own Pull Request.") + }) + }) + this.handleError(err) } handleError(err) { // Display error and kill process - this.setHeaderTitle('Error'); - this.setHeaderStatus('err'); - this.add(err); - this.stop(); + this.setHeaderTitle("Error") + this.setHeaderStatus("err") + this.add(err) + this.stop() } setHeaderStatus(status) { - this.headerView.setStatus(status); + this.headerView.setStatus(status) } setHeaderTitle(title) { - this.headerView.title.text(title); + this.headerView.title.text(title) } display(css, line) { - if (atom.config.get('script.escapeConsoleOutput')) { - line = _.escape(line); + if (atom.config.get("script.escapeConsoleOutput")) { + line = _.escape(line) + } + + try { + line = this.ansiFilter.toHtml(line) + } catch (e) { + // TODO why this happens https://github.com/atom-community/atom-script/issues/2358 + console.error(e) } - line = this.ansiFilter.toHtml(line); - line = linkPaths(line); + line = linkPaths(line) - const { clientHeight, scrollTop, scrollHeight } = this.body[0]; + const { clientHeight, scrollTop, scrollHeight } = this.body[0] // indicates that the panel is scrolled to the bottom, thus we know that // we are not interfering with the user's manual scrolling - const atEnd = scrollTop >= (scrollHeight - clientHeight); + const atEnd = scrollTop >= scrollHeight - clientHeight - this.add($$(function () { - this.pre({ class: `line ${css}` }, () => this.raw(line)); - })); + this.add( + $$(function () { + this.pre({ class: `line ${css}` }, () => this.raw(line)) + }) + ) - if (atom.config.get('script.scrollWithOutput') && atEnd) { + if (atom.config.get("script.scrollWithOutput") && atEnd) { // Scroll down in a polling loop 'cause // we don't know when the reflow will finish. // See: http://stackoverflow.com/q/5017923/407845 - this.checkScrollAgain(5)(); + this.checkScrollAgain(5)() } } + checkScrollAgain(times) { return () => { - this.body.scrollToBottom(); + this.body.scrollToBottom() - clearTimeout(this.scrollTimeout); + clearTimeout(this.scrollTimeout) if (times > 1) { - this.scrollTimeout = setTimeout(this.checkScrollAgain(times - 1), 50); + this.scrollTimeout = setTimeout(this.checkScrollAgain(times - 1), 50) } - }; + } } copyResults() { if (this.results) { - atom.clipboard.write(stripAnsi(this.results)); + atom.clipboard.write(stripAnsi(this.results)) } } } diff --git a/lib/script.js b/lib/script.js index b9a4b5f3..1c330170 100644 --- a/lib/script.js +++ b/lib/script.js @@ -1,226 +1,249 @@ -'use babel'; - -import { CompositeDisposable, Disposable } from 'atom'; - -import CodeContextBuilder from './code-context-builder'; -import GrammarUtils from './grammar-utils'; -import Runner from './runner'; -import Runtime from './runtime'; -import ScriptOptions from './script-options'; -import ScriptOptionsView from './script-options-view'; -import ScriptProfileRunView from './script-profile-run-view'; -import ScriptView from './script-view'; -import ViewRuntimeObserver from './view-runtime-observer'; - -export default { - config: { - enableExecTime: { - title: 'Output the time it took to execute the script', - type: 'boolean', - default: true, - }, - escapeConsoleOutput: { - title: 'HTML escape console output', - type: 'boolean', - default: true, - }, - ignoreSelection: { - title: 'Ignore selection (file-based runs only)', - type: 'boolean', - default: false, - }, - scrollWithOutput: { - title: 'Scroll with output', - type: 'boolean', - default: true, - }, - stopOnRerun: { - title: 'Stop running process on rerun', - type: 'boolean', - default: false, - }, - cwdBehavior: { - title: 'Default Current Working Directory (CWD) Behavior', - description: 'If no Run Options are set, this setting decides how to determine the CWD', - type: 'string', - default: 'First project directory', - enum: [ - 'First project directory', - 'Project directory of the script', - 'Directory of the script', - ], - }, +"use babel" + +import { CompositeDisposable, Disposable } from "atom" + +import CodeContextBuilder from "./code-context-builder" +import GrammarUtils from "./grammar-utils" +import Runner from "./runner" +import Runtime from "./runtime" +import ScriptOptions from "./script-options" +import ScriptOptionsView from "./script-options-view" +import ScriptProfileRunView from "./script-profile-run-view" +import ScriptView from "./script-view" +import ViewRuntimeObserver from "./view-runtime-observer" + +export const config = { + enableExecTime: { + title: "Output the time it took to execute the script", + type: "boolean", + default: true, }, - // For some reason, the text of these options does not show in package settings view - // default: 'firstProj' - // enum: [ - // {value: 'firstProj', description: 'First project directory (if there is one)'} - // {value: 'scriptProj', description: 'Project directory of the script (if there is one)'} - // {value: 'scriptDir', description: 'Directory of the script'} - // ] - scriptView: null, - scriptOptionsView: null, - scriptProfileRunView: null, - scriptOptions: null, - scriptProfiles: [], - terminals: [], - - activate(state) { - this.scriptView = new ScriptView(state.scriptViewState); - this.scriptOptions = new ScriptOptions(); - this.scriptOptionsView = new ScriptOptionsView(this.scriptOptions); - - // profiles loading - this.scriptProfiles = []; - if (state.profiles) { - for (const profile of state.profiles) { - const so = ScriptOptions.createFromOptions(profile.name, profile); - this.scriptProfiles.push(so); - } - } - - this.scriptProfileRunView = new ScriptProfileRunView(this.scriptProfiles); - - const codeContextBuilder = new CodeContextBuilder(); - const runner = new Runner(this.scriptOptions); - - const observer = new ViewRuntimeObserver(this.scriptView); - - this.runtime = new Runtime(runner, codeContextBuilder, [observer], this.terminals); - - this.subscriptions = new CompositeDisposable(); - this.subscriptions.add(atom.commands.add('atom-workspace', { - 'core:cancel': () => this.closeScriptViewAndStopRunner(), - 'core:close': () => this.closeScriptViewAndStopRunner(), - 'script:close-view': () => this.closeScriptViewAndStopRunner(), - 'script:copy-run-results': () => this.scriptView.copyResults(), - 'script:kill-process': () => this.runtime.stop(), - 'script:run-by-line-number': () => this.runtime.execute('Line Number Based'), - 'script:run': () => this.runtime.execute('Selection Based'), - })); - - // profile created - this.scriptOptionsView.onProfileSave((profileData) => { - // create and fill out profile - const profile = ScriptOptions.createFromOptions(profileData.name, profileData.options); - - const codeContext = this.runtime.codeContextBuilder.buildCodeContext( - atom.workspace.getActiveTextEditor(), 'Selection Based'); - profile.lang = codeContext.lang; - - // formatting description - const opts = profile.toObject(); - let desc = `Language: ${codeContext.lang}`; - if (opts.cmd) { desc += `, Command: ${opts.cmd}`; } - if (opts.cmdArgs && opts.cmd) { desc += ` ${opts.cmdArgs.join(' ')}`; } - - profile.description = desc; - this.scriptProfiles.push(profile); - - this.scriptOptionsView.hide(); - this.scriptProfileRunView.show(); - this.scriptProfileRunView.setProfiles(this.scriptProfiles); - }); - - // profile deleted - this.scriptProfileRunView.onProfileDelete((profile) => { - const index = this.scriptProfiles.indexOf(profile); - if (index === -1) { return; } - - if (index !== -1) { this.scriptProfiles.splice(index, 1); } - this.scriptProfileRunView.setProfiles(this.scriptProfiles); - }); - - // profile renamed - this.scriptProfileRunView.onProfileChange((data) => { - const index = this.scriptProfiles.indexOf(data.profile); - if (index === -1 || !this.scriptProfiles[index][data.key]) { return; } - - this.scriptProfiles[index][data.key] = data.value; - this.scriptProfileRunView.show(); - this.scriptProfileRunView.setProfiles(this.scriptProfiles); - }); - - // profile renamed - return this.scriptProfileRunView.onProfileRun((profile) => { - if (!profile) { return; } - this.runtime.execute('Selection Based', null, profile); - }); + escapeConsoleOutput: { + title: "HTML escape console output", + type: "boolean", + default: true, }, - - deactivate() { - this.runtime.destroy(); - this.scriptView.removePanel(); - this.scriptOptionsView.close(); - this.scriptProfileRunView.close(); - this.subscriptions.dispose(); - this.terminals.length = 0; - GrammarUtils.deleteTempFiles(); + ignoreSelection: { + title: "Ignore selection (file-based runs only)", + type: "boolean", + default: false, }, - - closeScriptViewAndStopRunner() { - this.runtime.stop(); - this.scriptView.removePanel(); + scrollWithOutput: { + title: "Scroll with output", + type: "boolean", + default: true, }, - - consumeTerminal(terminal) { - this.terminals.push(terminal); - return new Disposable(() => { - this.terminals = this.terminals.filter((t) => t !== terminal); - }); + stopOnRerun: { + title: "Stop running process on rerun", + type: "boolean", + default: false, }, - - // Public - // - // Service method that provides the default runtime that's configurable through Atom editor - // Use this service if you want to directly show the script's output in the Atom editor - // - // **Do not destroy this {Runtime} instance!** By doing so you'll break this plugin! - // - // Also note that the Script package isn't activated until you actually try to use it. - // That's why this service won't be automatically consumed. To be sure you consume it - // you may need to manually activate the package: - // - // atom.packages.loadPackage('script').activateNow() # this code doesn't include error handling! - // - // see https://github.com/s1mplex/Atom-Script-Runtime-Consumer-Sample for a full example - provideDefaultRuntime() { - return this.runtime; + cwdBehavior: { + title: "Default Current Working Directory (CWD) Behavior", + description: "If no Run Options are set, this setting decides how to determine the CWD", + type: "string", + default: "First project directory", + enum: ["First project directory", "Project directory of the script", "Directory of the script"], }, - - // Public - // - // Service method that provides a blank runtime. You are free to configure any aspect of it: - // * Add observer (`runtime.addObserver(observer)`) - see {ViewRuntimeObserver} for an example - // * configure script options (`runtime.scriptOptions`) - // - // In contrast to `provideDefaultRuntime` you should dispose this {Runtime} when - // you no longer need it. - // - // Also note that the Script package isn't activated until you actually try to use it. - // That's why this service won't be automatically consumed. To be sure you consume it - // you may need to manually activate the package: - // - // atom.packages.loadPackage('script').activateNow() # this code doesn't include error handling! - // - // see https://github.com/s1mplex/Atom-Script-Runtime-Consumer-Sample for a full example - provideBlankRuntime() { - const runner = new Runner(new ScriptOptions()); - const codeContextBuilder = new CodeContextBuilder(); - - return new Runtime(runner, codeContextBuilder, [], this.terminals); + position: { + title: "Panel position", + description: + "Position of the panel with script output. \ + (Changes to this value will be applied upon reopening the panel.)", + type: "string", + default: "bottom", + enum: ["top", "bottom", "left", "right"], }, +} + +// For some reason, the text of these options does not show in package settings view +// default: 'firstProj' +// enum: [ +// {value: 'firstProj', description: 'First project directory (if there is one)'} +// {value: 'scriptProj', description: 'Project directory of the script (if there is one)'} +// {value: 'scriptDir', description: 'Directory of the script'} +// ] +let scriptView = null +let scriptOptionsView = null +let scriptProfileRunView = null +let scriptOptions = null +let scriptProfiles = [] +let runtime = null +const subscriptions = new CompositeDisposable() +let terminals = [] + +export function activate(state) { + scriptView = new ScriptView(state.scriptViewState) + scriptOptions = new ScriptOptions() + scriptOptionsView = new ScriptOptionsView(scriptOptions) + + // profiles loading + scriptProfiles = [] + if (state.profiles) { + for (const profile of state.profiles) { + const so = ScriptOptions.createFromOptions(profile.name, profile) + scriptProfiles.push(so) + } + } + + scriptProfileRunView = new ScriptProfileRunView(scriptProfiles) + + const codeContextBuilder = new CodeContextBuilder() + const runner = new Runner(scriptOptions) + + const observer = new ViewRuntimeObserver(scriptView) + + runtime = new Runtime(runner, codeContextBuilder, [observer], terminals) + + subscriptions.add( + atom.commands.add("atom-workspace", { + "core:cancel": () => closeScriptViewAndStopRunner(), + "core:close": () => closeScriptViewAndStopRunner(), + "script:close-view": () => closeScriptViewAndStopRunner(), + "script:copy-run-results": () => scriptView.copyResults(), + "script:kill-process": () => runtime.stop(), + "script:run-by-line-number": () => runtime.execute("Line Number Based"), + "script:run": () => runtime.execute("Selection Based"), + }) + ) + + // profile created + scriptOptionsView.onProfileSave((profileData) => { + // create and fill out profile + const profile = ScriptOptions.createFromOptions(profileData.name, profileData.options) + + const codeContext = runtime.codeContextBuilder.buildCodeContext( + atom.workspace.getActiveTextEditor(), + "Selection Based" + ) + profile.lang = codeContext.lang + + // formatting description + const opts = profile.toObject() + let desc = `Language: ${codeContext.lang}` + if (opts.cmd) { + desc += `, Command: ${opts.cmd}` + } + if (opts.cmdArgs && opts.cmd) { + desc += ` ${opts.cmdArgs.join(" ")}` + } - serialize() { - // TODO: True serialization needs to take the options view into account - // and handle deserialization - const serializedProfiles = []; - for (const profile of this.scriptProfiles) { serializedProfiles.push(profile.toObject()); } - - return { - scriptViewState: this.scriptView.serialize(), - scriptOptionsViewState: this.scriptOptionsView.serialize(), - profiles: serializedProfiles, - }; - }, -}; + profile.description = desc + scriptProfiles.push(profile) + + scriptOptionsView.hide() + scriptProfileRunView.show() + scriptProfileRunView.setProfiles(scriptProfiles) + }) + + // profile deleted + scriptProfileRunView.onProfileDelete((profile) => { + const index = scriptProfiles.indexOf(profile) + if (index === -1) { + return + } + + if (index !== -1) { + scriptProfiles.splice(index, 1) + } + scriptProfileRunView.setProfiles(scriptProfiles) + }) + + // profile renamed + scriptProfileRunView.onProfileChange((data) => { + const index = scriptProfiles.indexOf(data.profile) + if (index === -1 || !scriptProfiles[index][data.key]) { + return + } + + scriptProfiles[index][data.key] = data.value + scriptProfileRunView.show() + scriptProfileRunView.setProfiles(scriptProfiles) + }) + + // profile renamed + return scriptProfileRunView.onProfileRun((profile) => { + if (!profile) { + return + } + runtime.execute("Selection Based", null, profile) + }) +} + +export function deactivate() { + runtime.destroy() + scriptView.removePanel() + scriptOptionsView.close() + scriptProfileRunView.close() + subscriptions.dispose() + terminals.length = 0 + GrammarUtils.deleteTempFiles() +} + +export function closeScriptViewAndStopRunner() { + runtime.stop() + scriptView.removePanel() +} + +// Public +// +// Service method that provides the default runtime that's configurable through Atom editor +// Use this service if you want to directly show the script's output in the Atom editor +// +// **Do not destroy this {Runtime} instance!** By doing so you'll break this plugin! +// +// Also note that the Script package isn't activated until you actually try to use it. +// That's why this service won't be automatically consumed. To be sure you consume it +// you may need to manually activate the package: +// +// atom.packages.loadPackage('script').activateNow() # this code doesn't include error handling! +// +// see https://github.com/s1mplex/Atom-Script-Runtime-Consumer-Sample for a full example +export function provideDefaultRuntime() { + return runtime +} + +// Public +// +// Service method that provides a blank runtime. You are free to configure any aspect of it: +// * Add observer (`runtime.addObserver(observer)`) - see {ViewRuntimeObserver} for an example +// * configure script options (`runtime.scriptOptions`) +// +// In contrast to `provideDefaultRuntime` you should dispose this {Runtime} when +// you no longer need it. +// +// Also note that the Script package isn't activated until you actually try to use it. +// That's why this service won't be automatically consumed. To be sure you consume it +// you may need to manually activate the package: +// +// atom.packages.loadPackage('script').activateNow() # this code doesn't include error handling! +// +// see https://github.com/s1mplex/Atom-Script-Runtime-Consumer-Sample for a full example +export function provideBlankRuntime() { + const runner = new Runner(new ScriptOptions()) + const codeContextBuilder = new CodeContextBuilder() + + return new Runtime(runner, codeContextBuilder, [], terminals) +} + +export function consumeTerminal(terminal) { + terminals.push(terminal) + return new Disposable(() => { + terminals = terminals.filter((t) => t !== terminal) + }) +} + +export function serialize() { + // TODO: True serialization needs to take the options view into account + // and handle deserialization + const serializedProfiles = [] + for (const profile of scriptProfiles) { + serializedProfiles.push(profile.toObject()) + } + + return { + scriptViewState: scriptView.serialize(), + scriptOptionsViewState: scriptOptionsView.serialize(), + profiles: serializedProfiles, + } +} diff --git a/lib/view-runtime-observer.js b/lib/view-runtime-observer.js index dc6e35db..c08a6e75 100644 --- a/lib/view-runtime-observer.js +++ b/lib/view-runtime-observer.js @@ -1,36 +1,42 @@ -'use babel'; +"use babel" -import { CompositeDisposable } from 'atom'; +import { CompositeDisposable } from "atom" export default class ViewRuntimeObserver { constructor(view, subscriptions = new CompositeDisposable()) { - this.view = view; - this.subscriptions = subscriptions; + this.view = view + this.subscriptions = subscriptions } observe(runtime) { - this.subscriptions.add(runtime.onStart(() => this.view.resetView())); - this.subscriptions.add(runtime.onStarted((ev) => { this.view.commandContext = ev; })); - this.subscriptions.add(runtime.onStopped(() => this.view.stop())); - this.subscriptions.add(runtime.onDidWriteToStderr(ev => this.view.display('stderr', ev.message))); - this.subscriptions.add(runtime.onDidWriteToStdout(ev => this.view.display('stdout', ev.message))); - this.subscriptions.add(runtime.onDidExit(ev => - this.view.setHeaderAndShowExecutionTime(ev.returnCode, ev.executionTime))); - this.subscriptions.add(runtime.onDidNotRun(ev => this.view.showUnableToRunError(ev.command))); - this.subscriptions.add(runtime.onDidContextCreate((ev) => { - const title = `${ev.lang} - ${ev.filename}${ev.lineNumber ? `:${ev.lineNumber}` : ''}`; - this.view.setHeaderTitle(title); - })); - this.subscriptions.add(runtime.onDidNotSpecifyLanguage(() => - this.view.showNoLanguageSpecified())); - this.subscriptions.add(runtime.onDidNotSupportLanguage(ev => - this.view.showLanguageNotSupported(ev.lang))); - this.subscriptions.add(runtime.onDidNotSupportMode(ev => - this.view.createGitHubIssueLink(ev.argType, ev.lang))); - this.subscriptions.add(runtime.onDidNotBuildArgs(ev => this.view.handleError(ev.error))); + this.subscriptions.add(runtime.onStart(() => this.view.resetView())) + this.subscriptions.add( + runtime.onStarted((ev) => { + this.view.commandContext = ev + }) + ) + this.subscriptions.add(runtime.onStopped(() => this.view.stop())) + this.subscriptions.add(runtime.onDidWriteToStderr((ev) => this.view.display("stderr", ev.message))) + this.subscriptions.add(runtime.onDidWriteToStdout((ev) => this.view.display("stdout", ev.message))) + this.subscriptions.add( + runtime.onDidExit((ev) => this.view.setHeaderAndShowExecutionTime(ev.returnCode, ev.executionTime)) + ) + this.subscriptions.add(runtime.onDidNotRun((ev) => this.view.showUnableToRunError(ev.command))) + this.subscriptions.add( + runtime.onDidContextCreate((ev) => { + const title = `${ev.lang} - ${ev.filename}${ev.lineNumber ? `:${ev.lineNumber}` : ""}` + this.view.setHeaderTitle(title) + }) + ) + this.subscriptions.add(runtime.onDidNotSpecifyLanguage(() => this.view.showNoLanguageSpecified())) + this.subscriptions.add(runtime.onDidNotSupportLanguage((ev) => this.view.showLanguageNotSupported(ev.lang))) + this.subscriptions.add(runtime.onDidNotSupportMode((ev) => this.view.createGitHubIssueLink(ev.argType, ev.lang))) + this.subscriptions.add(runtime.onDidNotBuildArgs((ev) => this.view.handleError(ev.error))) } destroy() { - if (this.subscriptions) this.subscriptions.dispose(); + if (this.subscriptions) { + this.subscriptions.dispose() + } } } diff --git a/package.json b/package.json index a96b025f..91cfbcf2 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "script", "main": "./lib/script", - "version": "3.26.1", + "version": "3.30.0", "private": false, "description": "Run code in Atom!", "author": "Kyle Kelley ", @@ -10,34 +10,47 @@ "engines": { "atom": ">=0.174.0" }, - "activationCommands": { - "atom-text-editor": [ - "script:run", - "script:run-by-line-number", - "script:run-options", - "script:run-with-profile" - ] + "prettier": "prettier-config-atomic", + "scripts": { + "format": "prettier --write .", + "test.format": "prettier . --check", + "lint": "eslint . --fix", + "test.lint": "eslint .", + "test": "atom --test spec" }, "dependencies": { - "ansi-to-html": "^0.4.2", + "@babel/cli": "^7.13.10", + "@babel/core": "^7.13.10", + "@babel/preset-env": "^7.13.10", + "@babel/preset-react": "^7.12.13", + "ansi-to-html": "^0.6.14", "atom-message-panel": "1.3.1", - "atom-space-pen-views": "^2.0.3", - "babel-preset-env": "^1.6.0", - "strip-ansi": "^3.0.0", - "underscore": "^1.8.3", - "uuid": "^3.0.1" + "atom-space-pen-views-plus": "^3.0.4", + "strip-ansi": "^6.0.0", + "underscore": "^1.12.1", + "uuid": "^8.3.2" }, "optionalDependencies": { - "babel-cli": "^6.26.0", "coffeescript": "^2" }, "devDependencies": { - "babel-eslint": "^7.1.1", - "eslint": "^4.18.2", - "eslint-config-airbnb-base": "^10.0.1", - "eslint-plugin-import": "^2.2.0", - "tempy": "^1.0.0" + "eslint": "^7.22.0", + "eslint-config-atomic": "^1.12.4", + "prettier": "^2.2.1", + "prettier-config-atomic": "^1.0.1", + "tempy": "^1.0.1" }, + "activationCommands": { + "atom-text-editor": [ + "script:run", + "script:run-by-line-number", + "script:run-options", + "script:run-with-profile" + ] + }, + "activationHooks": [ + "core:loaded-shell-environment" + ], "providedServices": { "default-script-runtime": { "description": "Provides default runtime that's configurable through Atom editor", @@ -84,23 +97,6 @@ } } }, - "scripts": { - "lint": "eslint .", - "lint:fix": "eslint . --fix", - "test": "atom --test spec" - }, - "babel": { - "presets": [ - [ - "env", - { - "targets": { - "node": "current" - } - } - ] - ] - }, "keywords": [ "script", "runner", @@ -129,6 +125,7 @@ "PHP", "PowerShell", "Python", + "Raku", "RSpec", "Ruby", "Ruby on Rails", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml new file mode 100644 index 00000000..d9be6e1f --- /dev/null +++ b/pnpm-lock.yaml @@ -0,0 +1,4835 @@ +dependencies: + '@babel/cli': 7.13.10_@babel+core@7.13.10 + '@babel/core': 7.13.10 + '@babel/preset-env': 7.13.10_@babel+core@7.13.10 + '@babel/preset-react': 7.12.13_@babel+core@7.13.10 + ansi-to-html: 0.6.14 + atom-message-panel: 1.3.1 + atom-space-pen-views-plus: 3.0.4 + strip-ansi: 6.0.0 + underscore: 1.12.1 + uuid: 8.3.2 +devDependencies: + eslint: 7.22.0 + eslint-config-atomic: 1.12.4_eslint@7.22.0 + prettier: 2.2.1 + prettier-config-atomic: 1.0.1 + tempy: 1.0.1 +lockfileVersion: 5.2 +optionalDependencies: + coffeescript: 2.5.1 +packages: + /@babel/cli/7.13.10_@babel+core@7.13.10: + dependencies: + '@babel/core': 7.13.10 + commander: 4.1.1 + convert-source-map: 1.7.0 + fs-readdir-recursive: 1.1.0 + glob: 7.1.6 + lodash: 4.17.20 + make-dir: 2.1.0 + slash: 2.0.0 + source-map: 0.5.7 + dev: false + hasBin: true + optionalDependencies: + '@nicolo-ribaudo/chokidar-2': 2.1.8-no-fsevents + chokidar: 3.5.1 + peerDependencies: + '@babel/core': ^7.0.0-0 + resolution: + integrity: sha512-lYSBC7B4B9hJ7sv0Ojx1BrGhuzCoOIYfLjd+Xpd4rOzdS+a47yi8voV8vFkfjlZR1N5qZO7ixOCbobUdT304PQ== + /@babel/code-frame/7.12.11: + dependencies: + '@babel/highlight': 7.12.13 + dev: true + resolution: + integrity: sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw== + /@babel/code-frame/7.12.13: + dependencies: + '@babel/highlight': 7.12.13 + resolution: + integrity: sha512-HV1Cm0Q3ZrpCR93tkWOYiuYIgLxZXZFVG2VgK+MBWjUqZTundupbfx2aXarXuw5Ko5aMcjtJgbSs4vUGBS5v6g== + /@babel/compat-data/7.13.11: + resolution: + integrity: sha512-BwKEkO+2a67DcFeS3RLl0Z3Gs2OvdXewuWjc1Hfokhb5eQWP9YRYH1/+VrVZvql2CfjOiNGqSAFOYt4lsqTHzg== + /@babel/core/7.13.10: + dependencies: + '@babel/code-frame': 7.12.13 + '@babel/generator': 7.13.9 + '@babel/helper-compilation-targets': 7.13.10_@babel+core@7.13.10 + '@babel/helper-module-transforms': 7.13.0 + '@babel/helpers': 7.13.10 + '@babel/parser': 7.13.11 + '@babel/template': 7.12.13 + '@babel/traverse': 7.13.0 + '@babel/types': 7.13.0 + convert-source-map: 1.7.0 + debug: 4.3.1 + gensync: 1.0.0-beta.2 + json5: 2.2.0 + lodash: 4.17.20 + semver: 6.3.0 + source-map: 0.5.7 + engines: + node: '>=6.9.0' + resolution: + integrity: sha512-bfIYcT0BdKeAZrovpMqX2Mx5NrgAckGbwT982AkdS5GNfn3KMGiprlBAtmBcFZRUmpaufS6WZFP8trvx8ptFDw== + /@babel/generator/7.13.9: + dependencies: + '@babel/types': 7.13.0 + jsesc: 2.5.2 + source-map: 0.5.7 + resolution: + integrity: sha512-mHOOmY0Axl/JCTkxTU6Lf5sWOg/v8nUa+Xkt4zMTftX0wqmb6Sh7J8gvcehBw7q0AhrhAR+FDacKjCZ2X8K+Sw== + /@babel/helper-annotate-as-pure/7.12.13: + dependencies: + '@babel/types': 7.13.0 + dev: false + resolution: + integrity: sha512-7YXfX5wQ5aYM/BOlbSccHDbuXXFPxeoUmfWtz8le2yTkTZc+BxsiEnENFoi2SlmA8ewDkG2LgIMIVzzn2h8kfw== + /@babel/helper-builder-binary-assignment-operator-visitor/7.12.13: + dependencies: + '@babel/helper-explode-assignable-expression': 7.12.13 + '@babel/types': 7.13.0 + dev: false + resolution: + integrity: sha512-CZOv9tGphhDRlVjVkAgm8Nhklm9RzSmWpX2my+t7Ua/KT616pEzXsQCjinzvkRvHWJ9itO4f296efroX23XCMA== + /@babel/helper-compilation-targets/7.13.10_@babel+core@7.13.10: + dependencies: + '@babel/compat-data': 7.13.11 + '@babel/core': 7.13.10 + '@babel/helper-validator-option': 7.12.17 + browserslist: 4.16.3 + semver: 6.3.0 + peerDependencies: + '@babel/core': ^7.0.0 + resolution: + integrity: sha512-/Xju7Qg1GQO4mHZ/Kcs6Au7gfafgZnwm+a7sy/ow/tV1sHeraRUHbjdat8/UvDor4Tez+siGKDk6zIKtCPKVJA== + /@babel/helper-create-class-features-plugin/7.13.11_@babel+core@7.13.10: + dependencies: + '@babel/core': 7.13.10 + '@babel/helper-function-name': 7.12.13 + '@babel/helper-member-expression-to-functions': 7.13.0 + '@babel/helper-optimise-call-expression': 7.12.13 + '@babel/helper-replace-supers': 7.13.0 + '@babel/helper-split-export-declaration': 7.12.13 + dev: false + peerDependencies: + '@babel/core': ^7.0.0 + resolution: + integrity: sha512-ays0I7XYq9xbjCSvT+EvysLgfc3tOkwCULHjrnscGT3A9qD4sk3wXnJ3of0MAWsWGjdinFvajHU2smYuqXKMrw== + /@babel/helper-create-regexp-features-plugin/7.12.13_@babel+core@7.13.10: + dependencies: + '@babel/core': 7.13.10 + '@babel/helper-annotate-as-pure': 7.12.13 + regexpu-core: 4.7.1 + dev: false + peerDependencies: + '@babel/core': ^7.0.0 + resolution: + integrity: sha512-XC+kiA0J3at6E85dL5UnCYfVOcIZ834QcAY0TIpgUVnz0zDzg+0TtvZTnJ4g9L1dPRGe30Qi03XCIS4tYCLtqw== + /@babel/helper-define-polyfill-provider/0.1.5_@babel+core@7.13.10: + dependencies: + '@babel/core': 7.13.10 + '@babel/helper-compilation-targets': 7.13.10_@babel+core@7.13.10 + '@babel/helper-module-imports': 7.12.13 + '@babel/helper-plugin-utils': 7.13.0 + '@babel/traverse': 7.13.0 + debug: 4.3.1 + lodash.debounce: 4.0.8 + resolve: 1.19.0 + semver: 6.3.0 + dev: false + peerDependencies: + '@babel/core': ^7.4.0-0 + resolution: + integrity: sha512-nXuzCSwlJ/WKr8qxzW816gwyT6VZgiJG17zR40fou70yfAcqjoNyTLl/DQ+FExw5Hx5KNqshmN8Ldl/r2N7cTg== + /@babel/helper-explode-assignable-expression/7.12.13: + dependencies: + '@babel/types': 7.13.0 + dev: false + resolution: + integrity: sha512-5loeRNvMo9mx1dA/d6yNi+YiKziJZFylZnCo1nmFF4qPU4yJ14abhWESuSMQSlQxWdxdOFzxXjk/PpfudTtYyw== + /@babel/helper-function-name/7.12.13: + dependencies: + '@babel/helper-get-function-arity': 7.12.13 + '@babel/template': 7.12.13 + '@babel/types': 7.12.13 + resolution: + integrity: sha512-TZvmPn0UOqmvi5G4vvw0qZTpVptGkB1GL61R6lKvrSdIxGm5Pky7Q3fpKiIkQCAtRCBUwB0PaThlx9vebCDSwA== + /@babel/helper-get-function-arity/7.12.13: + dependencies: + '@babel/types': 7.12.13 + resolution: + integrity: sha512-DjEVzQNz5LICkzN0REdpD5prGoidvbdYk1BVgRUOINaWJP2t6avB27X1guXK1kXNrX0WMfsrm1A/ZBthYuIMQg== + /@babel/helper-hoist-variables/7.13.0: + dependencies: + '@babel/traverse': 7.13.0 + '@babel/types': 7.13.0 + dev: false + resolution: + integrity: sha512-0kBzvXiIKfsCA0y6cFEIJf4OdzfpRuNk4+YTeHZpGGc666SATFKTz6sRncwFnQk7/ugJ4dSrCj6iJuvW4Qwr2g== + /@babel/helper-member-expression-to-functions/7.12.13: + dependencies: + '@babel/types': 7.13.0 + dev: false + resolution: + integrity: sha512-B+7nN0gIL8FZ8SvMcF+EPyB21KnCcZHQZFczCxbiNGV/O0rsrSBlWGLzmtBJ3GMjSVMIm4lpFhR+VdVBuIsUcQ== + /@babel/helper-member-expression-to-functions/7.13.0: + dependencies: + '@babel/types': 7.13.0 + resolution: + integrity: sha512-yvRf8Ivk62JwisqV1rFRMxiSMDGnN6KH1/mDMmIrij4jztpQNRoHqqMG3U6apYbGRPJpgPalhva9Yd06HlUxJQ== + /@babel/helper-module-imports/7.12.13: + dependencies: + '@babel/types': 7.13.0 + resolution: + integrity: sha512-NGmfvRp9Rqxy0uHSSVP+SRIW1q31a7Ji10cLBcqSDUngGentY4FRiHOFZFE1CLU5eiL0oE8reH7Tg1y99TDM/g== + /@babel/helper-module-transforms/7.13.0: + dependencies: + '@babel/helper-module-imports': 7.12.13 + '@babel/helper-replace-supers': 7.13.0 + '@babel/helper-simple-access': 7.12.13 + '@babel/helper-split-export-declaration': 7.12.13 + '@babel/helper-validator-identifier': 7.12.11 + '@babel/template': 7.12.13 + '@babel/traverse': 7.13.0 + '@babel/types': 7.13.0 + lodash: 4.17.20 + resolution: + integrity: sha512-Ls8/VBwH577+pw7Ku1QkUWIyRRNHpYlts7+qSqBBFCW3I8QteB9DxfcZ5YJpOwH6Ihe/wn8ch7fMGOP1OhEIvw== + /@babel/helper-optimise-call-expression/7.12.13: + dependencies: + '@babel/types': 7.13.0 + resolution: + integrity: sha512-BdWQhoVJkp6nVjB7nkFWcn43dkprYauqtk++Py2eaf/GRDFm5BxRqEIZCiHlZUGAVmtwKcsVL1dC68WmzeFmiA== + /@babel/helper-plugin-utils/7.12.13: + dev: false + resolution: + integrity: sha512-C+10MXCXJLiR6IeG9+Wiejt9jmtFpxUc3MQqCmPY8hfCjyUGl9kT+B2okzEZrtykiwrc4dbCPdDoz0A/HQbDaA== + /@babel/helper-plugin-utils/7.13.0: + dev: false + resolution: + integrity: sha512-ZPafIPSwzUlAoWT8DKs1W2VyF2gOWthGd5NGFMsBcMMol+ZhK+EQY/e6V96poa6PA/Bh+C9plWN0hXO1uB8AfQ== + /@babel/helper-remap-async-to-generator/7.13.0: + dependencies: + '@babel/helper-annotate-as-pure': 7.12.13 + '@babel/helper-wrap-function': 7.13.0 + '@babel/types': 7.13.0 + dev: false + resolution: + integrity: sha512-pUQpFBE9JvC9lrQbpX0TmeNIy5s7GnZjna2lhhcHC7DzgBs6fWn722Y5cfwgrtrqc7NAJwMvOa0mKhq6XaE4jg== + /@babel/helper-replace-supers/7.12.13: + dependencies: + '@babel/helper-member-expression-to-functions': 7.12.13 + '@babel/helper-optimise-call-expression': 7.12.13 + '@babel/traverse': 7.13.0 + '@babel/types': 7.13.0 + dev: false + resolution: + integrity: sha512-pctAOIAMVStI2TMLhozPKbf5yTEXc0OJa0eENheb4w09SrgOWEs+P4nTOZYJQCqs8JlErGLDPDJTiGIp3ygbLg== + /@babel/helper-replace-supers/7.13.0: + dependencies: + '@babel/helper-member-expression-to-functions': 7.13.0 + '@babel/helper-optimise-call-expression': 7.12.13 + '@babel/traverse': 7.13.0 + '@babel/types': 7.13.0 + resolution: + integrity: sha512-Segd5me1+Pz+rmN/NFBOplMbZG3SqRJOBlY+mA0SxAv6rjj7zJqr1AVr3SfzUVTLCv7ZLU5FycOM/SBGuLPbZw== + /@babel/helper-simple-access/7.12.13: + dependencies: + '@babel/types': 7.13.0 + resolution: + integrity: sha512-0ski5dyYIHEfwpWGx5GPWhH35j342JaflmCeQmsPWcrOQDtCN6C1zKAVRFVbK53lPW2c9TsuLLSUDf0tIGJ5hA== + /@babel/helper-skip-transparent-expression-wrappers/7.12.1: + dependencies: + '@babel/types': 7.13.0 + dev: false + resolution: + integrity: sha512-Mf5AUuhG1/OCChOJ/HcADmvcHM42WJockombn8ATJG3OnyiSxBK/Mm5x78BQWvmtXZKHgbjdGL2kin/HOLlZGA== + /@babel/helper-split-export-declaration/7.12.13: + dependencies: + '@babel/types': 7.12.13 + resolution: + integrity: sha512-tCJDltF83htUtXx5NLcaDqRmknv652ZWCHyoTETf1CXYJdPC7nohZohjUgieXhv0hTJdRf2FjDueFehdNucpzg== + /@babel/helper-validator-identifier/7.12.11: + resolution: + integrity: sha512-np/lG3uARFybkoHokJUmf1QfEvRVCPbmQeUQpKow5cQ3xWrV9i3rUHodKDJPQfTVX61qKi+UdYk8kik84n7XOw== + /@babel/helper-validator-option/7.12.17: + resolution: + integrity: sha512-TopkMDmLzq8ngChwRlyjR6raKD6gMSae4JdYDB8bByKreQgG0RBTuKe9LRxW3wFtUnjxOPRKBDwEH6Mg5KeDfw== + /@babel/helper-wrap-function/7.13.0: + dependencies: + '@babel/helper-function-name': 7.12.13 + '@babel/template': 7.12.13 + '@babel/traverse': 7.13.0 + '@babel/types': 7.13.0 + dev: false + resolution: + integrity: sha512-1UX9F7K3BS42fI6qd2A4BjKzgGjToscyZTdp1DjknHLCIvpgne6918io+aL5LXFcER/8QWiwpoY902pVEqgTXA== + /@babel/helpers/7.13.10: + dependencies: + '@babel/template': 7.12.13 + '@babel/traverse': 7.13.0 + '@babel/types': 7.13.0 + resolution: + integrity: sha512-4VO883+MWPDUVRF3PhiLBUFHoX/bsLTGFpFK/HqvvfBZz2D57u9XzPVNFVBTc0PW/CWR9BXTOKt8NF4DInUHcQ== + /@babel/highlight/7.12.13: + dependencies: + '@babel/helper-validator-identifier': 7.12.11 + chalk: 2.4.2 + js-tokens: 4.0.0 + resolution: + integrity: sha512-kocDQvIbgMKlWxXe9fof3TQ+gkIPOUSEYhJjqUjvKMez3krV7vbzYCDq39Oj11UAVK7JqPVGQPlgE85dPNlQww== + /@babel/parser/7.13.11: + engines: + node: '>=6.0.0' + hasBin: true + resolution: + integrity: sha512-PhuoqeHoO9fc4ffMEVk4qb/w/s2iOSWohvbHxLtxui0eBg3Lg5gN1U8wp1V1u61hOWkPQJJyJzGH6Y+grwkq8Q== + /@babel/plugin-proposal-async-generator-functions/7.13.8_@babel+core@7.13.10: + dependencies: + '@babel/core': 7.13.10 + '@babel/helper-plugin-utils': 7.13.0 + '@babel/helper-remap-async-to-generator': 7.13.0 + '@babel/plugin-syntax-async-generators': 7.8.4_@babel+core@7.13.10 + dev: false + peerDependencies: + '@babel/core': ^7.0.0-0 + resolution: + integrity: sha512-rPBnhj+WgoSmgq+4gQUtXx/vOcU+UYtjy1AA/aeD61Hwj410fwYyqfUcRP3lR8ucgliVJL/G7sXcNUecC75IXA== + /@babel/plugin-proposal-class-properties/7.13.0_@babel+core@7.13.10: + dependencies: + '@babel/core': 7.13.10 + '@babel/helper-create-class-features-plugin': 7.13.11_@babel+core@7.13.10 + '@babel/helper-plugin-utils': 7.13.0 + dev: false + peerDependencies: + '@babel/core': ^7.0.0-0 + resolution: + integrity: sha512-KnTDjFNC1g+45ka0myZNvSBFLhNCLN+GeGYLDEA8Oq7MZ6yMgfLoIRh86GRT0FjtJhZw8JyUskP9uvj5pHM9Zg== + /@babel/plugin-proposal-dynamic-import/7.13.8_@babel+core@7.13.10: + dependencies: + '@babel/core': 7.13.10 + '@babel/helper-plugin-utils': 7.13.0 + '@babel/plugin-syntax-dynamic-import': 7.8.3_@babel+core@7.13.10 + dev: false + peerDependencies: + '@babel/core': ^7.0.0-0 + resolution: + integrity: sha512-ONWKj0H6+wIRCkZi9zSbZtE/r73uOhMVHh256ys0UzfM7I3d4n+spZNWjOnJv2gzopumP2Wxi186vI8N0Y2JyQ== + /@babel/plugin-proposal-export-namespace-from/7.12.13_@babel+core@7.13.10: + dependencies: + '@babel/core': 7.13.10 + '@babel/helper-plugin-utils': 7.13.0 + '@babel/plugin-syntax-export-namespace-from': 7.8.3_@babel+core@7.13.10 + dev: false + peerDependencies: + '@babel/core': ^7.0.0-0 + resolution: + integrity: sha512-INAgtFo4OnLN3Y/j0VwAgw3HDXcDtX+C/erMvWzuV9v71r7urb6iyMXu7eM9IgLr1ElLlOkaHjJ0SbCmdOQ3Iw== + /@babel/plugin-proposal-json-strings/7.13.8_@babel+core@7.13.10: + dependencies: + '@babel/core': 7.13.10 + '@babel/helper-plugin-utils': 7.13.0 + '@babel/plugin-syntax-json-strings': 7.8.3_@babel+core@7.13.10 + dev: false + peerDependencies: + '@babel/core': ^7.0.0-0 + resolution: + integrity: sha512-w4zOPKUFPX1mgvTmL/fcEqy34hrQ1CRcGxdphBc6snDnnqJ47EZDIyop6IwXzAC8G916hsIuXB2ZMBCExC5k7Q== + /@babel/plugin-proposal-logical-assignment-operators/7.13.8_@babel+core@7.13.10: + dependencies: + '@babel/core': 7.13.10 + '@babel/helper-plugin-utils': 7.13.0 + '@babel/plugin-syntax-logical-assignment-operators': 7.10.4_@babel+core@7.13.10 + dev: false + peerDependencies: + '@babel/core': ^7.0.0-0 + resolution: + integrity: sha512-aul6znYB4N4HGweImqKn59Su9RS8lbUIqxtXTOcAGtNIDczoEFv+l1EhmX8rUBp3G1jMjKJm8m0jXVp63ZpS4A== + /@babel/plugin-proposal-nullish-coalescing-operator/7.13.8_@babel+core@7.13.10: + dependencies: + '@babel/core': 7.13.10 + '@babel/helper-plugin-utils': 7.13.0 + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3_@babel+core@7.13.10 + dev: false + peerDependencies: + '@babel/core': ^7.0.0-0 + resolution: + integrity: sha512-iePlDPBn//UhxExyS9KyeYU7RM9WScAG+D3Hhno0PLJebAEpDZMocbDe64eqynhNAnwz/vZoL/q/QB2T1OH39A== + /@babel/plugin-proposal-numeric-separator/7.12.13_@babel+core@7.13.10: + dependencies: + '@babel/core': 7.13.10 + '@babel/helper-plugin-utils': 7.13.0 + '@babel/plugin-syntax-numeric-separator': 7.10.4_@babel+core@7.13.10 + dev: false + peerDependencies: + '@babel/core': ^7.0.0-0 + resolution: + integrity: sha512-O1jFia9R8BUCl3ZGB7eitaAPu62TXJRHn7rh+ojNERCFyqRwJMTmhz+tJ+k0CwI6CLjX/ee4qW74FSqlq9I35w== + /@babel/plugin-proposal-object-rest-spread/7.13.8_@babel+core@7.13.10: + dependencies: + '@babel/compat-data': 7.13.11 + '@babel/core': 7.13.10 + '@babel/helper-compilation-targets': 7.13.10_@babel+core@7.13.10 + '@babel/helper-plugin-utils': 7.13.0 + '@babel/plugin-syntax-object-rest-spread': 7.8.3_@babel+core@7.13.10 + '@babel/plugin-transform-parameters': 7.13.0_@babel+core@7.13.10 + dev: false + peerDependencies: + '@babel/core': ^7.0.0-0 + resolution: + integrity: sha512-DhB2EuB1Ih7S3/IRX5AFVgZ16k3EzfRbq97CxAVI1KSYcW+lexV8VZb7G7L8zuPVSdQMRn0kiBpf/Yzu9ZKH0g== + /@babel/plugin-proposal-optional-catch-binding/7.13.8_@babel+core@7.13.10: + dependencies: + '@babel/core': 7.13.10 + '@babel/helper-plugin-utils': 7.13.0 + '@babel/plugin-syntax-optional-catch-binding': 7.8.3_@babel+core@7.13.10 + dev: false + peerDependencies: + '@babel/core': ^7.0.0-0 + resolution: + integrity: sha512-0wS/4DUF1CuTmGo+NiaHfHcVSeSLj5S3e6RivPTg/2k3wOv3jO35tZ6/ZWsQhQMvdgI7CwphjQa/ccarLymHVA== + /@babel/plugin-proposal-optional-chaining/7.13.8_@babel+core@7.13.10: + dependencies: + '@babel/core': 7.13.10 + '@babel/helper-plugin-utils': 7.13.0 + '@babel/helper-skip-transparent-expression-wrappers': 7.12.1 + '@babel/plugin-syntax-optional-chaining': 7.8.3_@babel+core@7.13.10 + dev: false + peerDependencies: + '@babel/core': ^7.0.0-0 + resolution: + integrity: sha512-hpbBwbTgd7Cz1QryvwJZRo1U0k1q8uyBmeXOSQUjdg/A2TASkhR/rz7AyqZ/kS8kbpsNA80rOYbxySBJAqmhhQ== + /@babel/plugin-proposal-private-methods/7.13.0_@babel+core@7.13.10: + dependencies: + '@babel/core': 7.13.10 + '@babel/helper-create-class-features-plugin': 7.13.11_@babel+core@7.13.10 + '@babel/helper-plugin-utils': 7.13.0 + dev: false + peerDependencies: + '@babel/core': ^7.0.0-0 + resolution: + integrity: sha512-MXyyKQd9inhx1kDYPkFRVOBXQ20ES8Pto3T7UZ92xj2mY0EVD8oAVzeyYuVfy/mxAdTSIayOvg+aVzcHV2bn6Q== + /@babel/plugin-proposal-unicode-property-regex/7.12.13_@babel+core@7.13.10: + dependencies: + '@babel/core': 7.13.10 + '@babel/helper-create-regexp-features-plugin': 7.12.13_@babel+core@7.13.10 + '@babel/helper-plugin-utils': 7.13.0 + dev: false + engines: + node: '>=4' + peerDependencies: + '@babel/core': ^7.0.0-0 + resolution: + integrity: sha512-XyJmZidNfofEkqFV5VC/bLabGmO5QzenPO/YOfGuEbgU+2sSwMmio3YLb4WtBgcmmdwZHyVyv8on77IUjQ5Gvg== + /@babel/plugin-syntax-async-generators/7.8.4_@babel+core@7.13.10: + dependencies: + '@babel/core': 7.13.10 + '@babel/helper-plugin-utils': 7.13.0 + dev: false + peerDependencies: + '@babel/core': ^7.0.0-0 + resolution: + integrity: sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw== + /@babel/plugin-syntax-class-properties/7.12.13_@babel+core@7.13.10: + dependencies: + '@babel/core': 7.13.10 + '@babel/helper-plugin-utils': 7.13.0 + dev: false + peerDependencies: + '@babel/core': ^7.0.0-0 + resolution: + integrity: sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA== + /@babel/plugin-syntax-dynamic-import/7.8.3_@babel+core@7.13.10: + dependencies: + '@babel/core': 7.13.10 + '@babel/helper-plugin-utils': 7.13.0 + dev: false + peerDependencies: + '@babel/core': ^7.0.0-0 + resolution: + integrity: sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ== + /@babel/plugin-syntax-export-namespace-from/7.8.3_@babel+core@7.13.10: + dependencies: + '@babel/core': 7.13.10 + '@babel/helper-plugin-utils': 7.13.0 + dev: false + peerDependencies: + '@babel/core': ^7.0.0-0 + resolution: + integrity: sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q== + /@babel/plugin-syntax-json-strings/7.8.3_@babel+core@7.13.10: + dependencies: + '@babel/core': 7.13.10 + '@babel/helper-plugin-utils': 7.13.0 + dev: false + peerDependencies: + '@babel/core': ^7.0.0-0 + resolution: + integrity: sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA== + /@babel/plugin-syntax-jsx/7.12.13_@babel+core@7.13.10: + dependencies: + '@babel/core': 7.13.10 + '@babel/helper-plugin-utils': 7.13.0 + dev: false + peerDependencies: + '@babel/core': ^7.0.0-0 + resolution: + integrity: sha512-d4HM23Q1K7oq/SLNmG6mRt85l2csmQ0cHRaxRXjKW0YFdEXqlZ5kzFQKH5Uc3rDJECgu+yCRgPkG04Mm98R/1g== + /@babel/plugin-syntax-logical-assignment-operators/7.10.4_@babel+core@7.13.10: + dependencies: + '@babel/core': 7.13.10 + '@babel/helper-plugin-utils': 7.13.0 + dev: false + peerDependencies: + '@babel/core': ^7.0.0-0 + resolution: + integrity: sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig== + /@babel/plugin-syntax-nullish-coalescing-operator/7.8.3_@babel+core@7.13.10: + dependencies: + '@babel/core': 7.13.10 + '@babel/helper-plugin-utils': 7.13.0 + dev: false + peerDependencies: + '@babel/core': ^7.0.0-0 + resolution: + integrity: sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ== + /@babel/plugin-syntax-numeric-separator/7.10.4_@babel+core@7.13.10: + dependencies: + '@babel/core': 7.13.10 + '@babel/helper-plugin-utils': 7.13.0 + dev: false + peerDependencies: + '@babel/core': ^7.0.0-0 + resolution: + integrity: sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug== + /@babel/plugin-syntax-object-rest-spread/7.8.3_@babel+core@7.13.10: + dependencies: + '@babel/core': 7.13.10 + '@babel/helper-plugin-utils': 7.13.0 + dev: false + peerDependencies: + '@babel/core': ^7.0.0-0 + resolution: + integrity: sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA== + /@babel/plugin-syntax-optional-catch-binding/7.8.3_@babel+core@7.13.10: + dependencies: + '@babel/core': 7.13.10 + '@babel/helper-plugin-utils': 7.13.0 + dev: false + peerDependencies: + '@babel/core': ^7.0.0-0 + resolution: + integrity: sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q== + /@babel/plugin-syntax-optional-chaining/7.8.3_@babel+core@7.13.10: + dependencies: + '@babel/core': 7.13.10 + '@babel/helper-plugin-utils': 7.13.0 + dev: false + peerDependencies: + '@babel/core': ^7.0.0-0 + resolution: + integrity: sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg== + /@babel/plugin-syntax-top-level-await/7.12.13_@babel+core@7.13.10: + dependencies: + '@babel/core': 7.13.10 + '@babel/helper-plugin-utils': 7.13.0 + dev: false + peerDependencies: + '@babel/core': ^7.0.0-0 + resolution: + integrity: sha512-A81F9pDwyS7yM//KwbCSDqy3Uj4NMIurtplxphWxoYtNPov7cJsDkAFNNyVlIZ3jwGycVsurZ+LtOA8gZ376iQ== + /@babel/plugin-transform-arrow-functions/7.13.0_@babel+core@7.13.10: + dependencies: + '@babel/core': 7.13.10 + '@babel/helper-plugin-utils': 7.13.0 + dev: false + peerDependencies: + '@babel/core': ^7.0.0-0 + resolution: + integrity: sha512-96lgJagobeVmazXFaDrbmCLQxBysKu7U6Do3mLsx27gf5Dk85ezysrs2BZUpXD703U/Su1xTBDxxar2oa4jAGg== + /@babel/plugin-transform-async-to-generator/7.13.0_@babel+core@7.13.10: + dependencies: + '@babel/core': 7.13.10 + '@babel/helper-module-imports': 7.12.13 + '@babel/helper-plugin-utils': 7.13.0 + '@babel/helper-remap-async-to-generator': 7.13.0 + dev: false + peerDependencies: + '@babel/core': ^7.0.0-0 + resolution: + integrity: sha512-3j6E004Dx0K3eGmhxVJxwwI89CTJrce7lg3UrtFuDAVQ/2+SJ/h/aSFOeE6/n0WB1GsOffsJp6MnPQNQ8nmwhg== + /@babel/plugin-transform-block-scoped-functions/7.12.13_@babel+core@7.13.10: + dependencies: + '@babel/core': 7.13.10 + '@babel/helper-plugin-utils': 7.13.0 + dev: false + peerDependencies: + '@babel/core': ^7.0.0-0 + resolution: + integrity: sha512-zNyFqbc3kI/fVpqwfqkg6RvBgFpC4J18aKKMmv7KdQ/1GgREapSJAykLMVNwfRGO3BtHj3YQZl8kxCXPcVMVeg== + /@babel/plugin-transform-block-scoping/7.12.13_@babel+core@7.13.10: + dependencies: + '@babel/core': 7.13.10 + '@babel/helper-plugin-utils': 7.13.0 + dev: false + peerDependencies: + '@babel/core': ^7.0.0-0 + resolution: + integrity: sha512-Pxwe0iqWJX4fOOM2kEZeUuAxHMWb9nK+9oh5d11bsLoB0xMg+mkDpt0eYuDZB7ETrY9bbcVlKUGTOGWy7BHsMQ== + /@babel/plugin-transform-classes/7.13.0_@babel+core@7.13.10: + dependencies: + '@babel/core': 7.13.10 + '@babel/helper-annotate-as-pure': 7.12.13 + '@babel/helper-function-name': 7.12.13 + '@babel/helper-optimise-call-expression': 7.12.13 + '@babel/helper-plugin-utils': 7.13.0 + '@babel/helper-replace-supers': 7.13.0 + '@babel/helper-split-export-declaration': 7.12.13 + globals: 11.12.0 + dev: false + peerDependencies: + '@babel/core': ^7.0.0-0 + resolution: + integrity: sha512-9BtHCPUARyVH1oXGcSJD3YpsqRLROJx5ZNP6tN5vnk17N0SVf9WCtf8Nuh1CFmgByKKAIMstitKduoCmsaDK5g== + /@babel/plugin-transform-computed-properties/7.13.0_@babel+core@7.13.10: + dependencies: + '@babel/core': 7.13.10 + '@babel/helper-plugin-utils': 7.13.0 + dev: false + peerDependencies: + '@babel/core': ^7.0.0-0 + resolution: + integrity: sha512-RRqTYTeZkZAz8WbieLTvKUEUxZlUTdmL5KGMyZj7FnMfLNKV4+r5549aORG/mgojRmFlQMJDUupwAMiF2Q7OUg== + /@babel/plugin-transform-destructuring/7.13.0_@babel+core@7.13.10: + dependencies: + '@babel/core': 7.13.10 + '@babel/helper-plugin-utils': 7.13.0 + dev: false + peerDependencies: + '@babel/core': ^7.0.0-0 + resolution: + integrity: sha512-zym5em7tePoNT9s964c0/KU3JPPnuq7VhIxPRefJ4/s82cD+q1mgKfuGRDMCPL0HTyKz4dISuQlCusfgCJ86HA== + /@babel/plugin-transform-dotall-regex/7.12.13_@babel+core@7.13.10: + dependencies: + '@babel/core': 7.13.10 + '@babel/helper-create-regexp-features-plugin': 7.12.13_@babel+core@7.13.10 + '@babel/helper-plugin-utils': 7.13.0 + dev: false + peerDependencies: + '@babel/core': ^7.0.0-0 + resolution: + integrity: sha512-foDrozE65ZFdUC2OfgeOCrEPTxdB3yjqxpXh8CH+ipd9CHd4s/iq81kcUpyH8ACGNEPdFqbtzfgzbT/ZGlbDeQ== + /@babel/plugin-transform-duplicate-keys/7.12.13_@babel+core@7.13.10: + dependencies: + '@babel/core': 7.13.10 + '@babel/helper-plugin-utils': 7.13.0 + dev: false + peerDependencies: + '@babel/core': ^7.0.0-0 + resolution: + integrity: sha512-NfADJiiHdhLBW3pulJlJI2NB0t4cci4WTZ8FtdIuNc2+8pslXdPtRRAEWqUY+m9kNOk2eRYbTAOipAxlrOcwwQ== + /@babel/plugin-transform-exponentiation-operator/7.12.13_@babel+core@7.13.10: + dependencies: + '@babel/core': 7.13.10 + '@babel/helper-builder-binary-assignment-operator-visitor': 7.12.13 + '@babel/helper-plugin-utils': 7.13.0 + dev: false + peerDependencies: + '@babel/core': ^7.0.0-0 + resolution: + integrity: sha512-fbUelkM1apvqez/yYx1/oICVnGo2KM5s63mhGylrmXUxK/IAXSIf87QIxVfZldWf4QsOafY6vV3bX8aMHSvNrA== + /@babel/plugin-transform-for-of/7.13.0_@babel+core@7.13.10: + dependencies: + '@babel/core': 7.13.10 + '@babel/helper-plugin-utils': 7.13.0 + dev: false + peerDependencies: + '@babel/core': ^7.0.0-0 + resolution: + integrity: sha512-IHKT00mwUVYE0zzbkDgNRP6SRzvfGCYsOxIRz8KsiaaHCcT9BWIkO+H9QRJseHBLOGBZkHUdHiqj6r0POsdytg== + /@babel/plugin-transform-function-name/7.12.13_@babel+core@7.13.10: + dependencies: + '@babel/core': 7.13.10 + '@babel/helper-function-name': 7.12.13 + '@babel/helper-plugin-utils': 7.13.0 + dev: false + peerDependencies: + '@babel/core': ^7.0.0-0 + resolution: + integrity: sha512-6K7gZycG0cmIwwF7uMK/ZqeCikCGVBdyP2J5SKNCXO5EOHcqi+z7Jwf8AmyDNcBgxET8DrEtCt/mPKPyAzXyqQ== + /@babel/plugin-transform-literals/7.12.13_@babel+core@7.13.10: + dependencies: + '@babel/core': 7.13.10 + '@babel/helper-plugin-utils': 7.13.0 + dev: false + peerDependencies: + '@babel/core': ^7.0.0-0 + resolution: + integrity: sha512-FW+WPjSR7hiUxMcKqyNjP05tQ2kmBCdpEpZHY1ARm96tGQCCBvXKnpjILtDplUnJ/eHZ0lALLM+d2lMFSpYJrQ== + /@babel/plugin-transform-member-expression-literals/7.12.13_@babel+core@7.13.10: + dependencies: + '@babel/core': 7.13.10 + '@babel/helper-plugin-utils': 7.13.0 + dev: false + peerDependencies: + '@babel/core': ^7.0.0-0 + resolution: + integrity: sha512-kxLkOsg8yir4YeEPHLuO2tXP9R/gTjpuTOjshqSpELUN3ZAg2jfDnKUvzzJxObun38sw3wm4Uu69sX/zA7iRvg== + /@babel/plugin-transform-modules-amd/7.13.0_@babel+core@7.13.10: + dependencies: + '@babel/core': 7.13.10 + '@babel/helper-module-transforms': 7.13.0 + '@babel/helper-plugin-utils': 7.13.0 + babel-plugin-dynamic-import-node: 2.3.3 + dev: false + peerDependencies: + '@babel/core': ^7.0.0-0 + resolution: + integrity: sha512-EKy/E2NHhY/6Vw5d1k3rgoobftcNUmp9fGjb9XZwQLtTctsRBOTRO7RHHxfIky1ogMN5BxN7p9uMA3SzPfotMQ== + /@babel/plugin-transform-modules-commonjs/7.13.8_@babel+core@7.13.10: + dependencies: + '@babel/core': 7.13.10 + '@babel/helper-module-transforms': 7.13.0 + '@babel/helper-plugin-utils': 7.13.0 + '@babel/helper-simple-access': 7.12.13 + babel-plugin-dynamic-import-node: 2.3.3 + dev: false + peerDependencies: + '@babel/core': ^7.0.0-0 + resolution: + integrity: sha512-9QiOx4MEGglfYZ4XOnU79OHr6vIWUakIj9b4mioN8eQIoEh+pf5p/zEB36JpDFWA12nNMiRf7bfoRvl9Rn79Bw== + /@babel/plugin-transform-modules-systemjs/7.13.8_@babel+core@7.13.10: + dependencies: + '@babel/core': 7.13.10 + '@babel/helper-hoist-variables': 7.13.0 + '@babel/helper-module-transforms': 7.13.0 + '@babel/helper-plugin-utils': 7.13.0 + '@babel/helper-validator-identifier': 7.12.11 + babel-plugin-dynamic-import-node: 2.3.3 + dev: false + peerDependencies: + '@babel/core': ^7.0.0-0 + resolution: + integrity: sha512-hwqctPYjhM6cWvVIlOIe27jCIBgHCsdH2xCJVAYQm7V5yTMoilbVMi9f6wKg0rpQAOn6ZG4AOyvCqFF/hUh6+A== + /@babel/plugin-transform-modules-umd/7.13.0_@babel+core@7.13.10: + dependencies: + '@babel/core': 7.13.10 + '@babel/helper-module-transforms': 7.13.0 + '@babel/helper-plugin-utils': 7.13.0 + dev: false + peerDependencies: + '@babel/core': ^7.0.0-0 + resolution: + integrity: sha512-D/ILzAh6uyvkWjKKyFE/W0FzWwasv6vPTSqPcjxFqn6QpX3u8DjRVliq4F2BamO2Wee/om06Vyy+vPkNrd4wxw== + /@babel/plugin-transform-named-capturing-groups-regex/7.12.13_@babel+core@7.13.10: + dependencies: + '@babel/core': 7.13.10 + '@babel/helper-create-regexp-features-plugin': 7.12.13_@babel+core@7.13.10 + dev: false + peerDependencies: + '@babel/core': ^7.0.0 + resolution: + integrity: sha512-Xsm8P2hr5hAxyYblrfACXpQKdQbx4m2df9/ZZSQ8MAhsadw06+jW7s9zsSw6he+mJZXRlVMyEnVktJo4zjk1WA== + /@babel/plugin-transform-new-target/7.12.13_@babel+core@7.13.10: + dependencies: + '@babel/core': 7.13.10 + '@babel/helper-plugin-utils': 7.13.0 + dev: false + peerDependencies: + '@babel/core': ^7.0.0-0 + resolution: + integrity: sha512-/KY2hbLxrG5GTQ9zzZSc3xWiOy379pIETEhbtzwZcw9rvuaVV4Fqy7BYGYOWZnaoXIQYbbJ0ziXLa/sKcGCYEQ== + /@babel/plugin-transform-object-super/7.12.13_@babel+core@7.13.10: + dependencies: + '@babel/core': 7.13.10 + '@babel/helper-plugin-utils': 7.13.0 + '@babel/helper-replace-supers': 7.12.13 + dev: false + peerDependencies: + '@babel/core': ^7.0.0-0 + resolution: + integrity: sha512-JzYIcj3XtYspZDV8j9ulnoMPZZnF/Cj0LUxPOjR89BdBVx+zYJI9MdMIlUZjbXDX+6YVeS6I3e8op+qQ3BYBoQ== + /@babel/plugin-transform-parameters/7.13.0_@babel+core@7.13.10: + dependencies: + '@babel/core': 7.13.10 + '@babel/helper-plugin-utils': 7.13.0 + dev: false + peerDependencies: + '@babel/core': ^7.0.0-0 + resolution: + integrity: sha512-Jt8k/h/mIwE2JFEOb3lURoY5C85ETcYPnbuAJ96zRBzh1XHtQZfs62ChZ6EP22QlC8c7Xqr9q+e1SU5qttwwjw== + /@babel/plugin-transform-property-literals/7.12.13_@babel+core@7.13.10: + dependencies: + '@babel/core': 7.13.10 + '@babel/helper-plugin-utils': 7.13.0 + dev: false + peerDependencies: + '@babel/core': ^7.0.0-0 + resolution: + integrity: sha512-nqVigwVan+lR+g8Fj8Exl0UQX2kymtjcWfMOYM1vTYEKujeyv2SkMgazf2qNcK7l4SDiKyTA/nHCPqL4e2zo1A== + /@babel/plugin-transform-react-display-name/7.12.13_@babel+core@7.13.10: + dependencies: + '@babel/core': 7.13.10 + '@babel/helper-plugin-utils': 7.12.13 + dev: false + peerDependencies: + '@babel/core': ^7.0.0-0 + resolution: + integrity: sha512-MprESJzI9O5VnJZrL7gg1MpdqmiFcUv41Jc7SahxYsNP2kDkFqClxxTZq+1Qv4AFCamm+GXMRDQINNn+qrxmiA== + /@babel/plugin-transform-react-jsx-development/7.12.12_@babel+core@7.13.10: + dependencies: + '@babel/core': 7.13.10 + '@babel/plugin-transform-react-jsx': 7.12.13_@babel+core@7.13.10 + dev: false + peerDependencies: + '@babel/core': ^7.0.0-0 + resolution: + integrity: sha512-i1AxnKxHeMxUaWVXQOSIco4tvVvvCxMSfeBMnMM06mpaJt3g+MpxYQQrDfojUQldP1xxraPSJYSMEljoWM/dCg== + /@babel/plugin-transform-react-jsx/7.12.13_@babel+core@7.13.10: + dependencies: + '@babel/core': 7.13.10 + '@babel/helper-annotate-as-pure': 7.12.13 + '@babel/helper-module-imports': 7.12.13 + '@babel/helper-plugin-utils': 7.12.13 + '@babel/plugin-syntax-jsx': 7.12.13_@babel+core@7.13.10 + '@babel/types': 7.13.0 + dev: false + peerDependencies: + '@babel/core': ^7.0.0-0 + resolution: + integrity: sha512-hhXZMYR8t9RvduN2uW4sjl6MRtUhzNE726JvoJhpjhxKgRUVkZqTsA0xc49ALZxQM7H26pZ/lLvB2Yrea9dllA== + /@babel/plugin-transform-react-pure-annotations/7.12.1_@babel+core@7.13.10: + dependencies: + '@babel/core': 7.13.10 + '@babel/helper-annotate-as-pure': 7.12.13 + '@babel/helper-plugin-utils': 7.12.13 + dev: false + peerDependencies: + '@babel/core': ^7.0.0-0 + resolution: + integrity: sha512-RqeaHiwZtphSIUZ5I85PEH19LOSzxfuEazoY7/pWASCAIBuATQzpSVD+eT6MebeeZT2F4eSL0u4vw6n4Nm0Mjg== + /@babel/plugin-transform-regenerator/7.12.13_@babel+core@7.13.10: + dependencies: + '@babel/core': 7.13.10 + regenerator-transform: 0.14.5 + dev: false + peerDependencies: + '@babel/core': ^7.0.0-0 + resolution: + integrity: sha512-lxb2ZAvSLyJ2PEe47hoGWPmW22v7CtSl9jW8mingV4H2sEX/JOcrAj2nPuGWi56ERUm2bUpjKzONAuT6HCn2EA== + /@babel/plugin-transform-reserved-words/7.12.13_@babel+core@7.13.10: + dependencies: + '@babel/core': 7.13.10 + '@babel/helper-plugin-utils': 7.13.0 + dev: false + peerDependencies: + '@babel/core': ^7.0.0-0 + resolution: + integrity: sha512-xhUPzDXxZN1QfiOy/I5tyye+TRz6lA7z6xaT4CLOjPRMVg1ldRf0LHw0TDBpYL4vG78556WuHdyO9oi5UmzZBg== + /@babel/plugin-transform-shorthand-properties/7.12.13_@babel+core@7.13.10: + dependencies: + '@babel/core': 7.13.10 + '@babel/helper-plugin-utils': 7.13.0 + dev: false + peerDependencies: + '@babel/core': ^7.0.0-0 + resolution: + integrity: sha512-xpL49pqPnLtf0tVluuqvzWIgLEhuPpZzvs2yabUHSKRNlN7ScYU7aMlmavOeyXJZKgZKQRBlh8rHbKiJDraTSw== + /@babel/plugin-transform-spread/7.13.0_@babel+core@7.13.10: + dependencies: + '@babel/core': 7.13.10 + '@babel/helper-plugin-utils': 7.13.0 + '@babel/helper-skip-transparent-expression-wrappers': 7.12.1 + dev: false + peerDependencies: + '@babel/core': ^7.0.0-0 + resolution: + integrity: sha512-V6vkiXijjzYeFmQTr3dBxPtZYLPcUfY34DebOU27jIl2M/Y8Egm52Hw82CSjjPqd54GTlJs5x+CR7HeNr24ckg== + /@babel/plugin-transform-sticky-regex/7.12.13_@babel+core@7.13.10: + dependencies: + '@babel/core': 7.13.10 + '@babel/helper-plugin-utils': 7.13.0 + dev: false + peerDependencies: + '@babel/core': ^7.0.0-0 + resolution: + integrity: sha512-Jc3JSaaWT8+fr7GRvQP02fKDsYk4K/lYwWq38r/UGfaxo89ajud321NH28KRQ7xy1Ybc0VUE5Pz8psjNNDUglg== + /@babel/plugin-transform-template-literals/7.13.0_@babel+core@7.13.10: + dependencies: + '@babel/core': 7.13.10 + '@babel/helper-plugin-utils': 7.13.0 + dev: false + peerDependencies: + '@babel/core': ^7.0.0-0 + resolution: + integrity: sha512-d67umW6nlfmr1iehCcBv69eSUSySk1EsIS8aTDX4Xo9qajAh6mYtcl4kJrBkGXuxZPEgVr7RVfAvNW6YQkd4Mw== + /@babel/plugin-transform-typeof-symbol/7.12.13_@babel+core@7.13.10: + dependencies: + '@babel/core': 7.13.10 + '@babel/helper-plugin-utils': 7.13.0 + dev: false + peerDependencies: + '@babel/core': ^7.0.0-0 + resolution: + integrity: sha512-eKv/LmUJpMnu4npgfvs3LiHhJua5fo/CysENxa45YCQXZwKnGCQKAg87bvoqSW1fFT+HA32l03Qxsm8ouTY3ZQ== + /@babel/plugin-transform-unicode-escapes/7.12.13_@babel+core@7.13.10: + dependencies: + '@babel/core': 7.13.10 + '@babel/helper-plugin-utils': 7.13.0 + dev: false + peerDependencies: + '@babel/core': ^7.0.0-0 + resolution: + integrity: sha512-0bHEkdwJ/sN/ikBHfSmOXPypN/beiGqjo+o4/5K+vxEFNPRPdImhviPakMKG4x96l85emoa0Z6cDflsdBusZbw== + /@babel/plugin-transform-unicode-regex/7.12.13_@babel+core@7.13.10: + dependencies: + '@babel/core': 7.13.10 + '@babel/helper-create-regexp-features-plugin': 7.12.13_@babel+core@7.13.10 + '@babel/helper-plugin-utils': 7.13.0 + dev: false + peerDependencies: + '@babel/core': ^7.0.0-0 + resolution: + integrity: sha512-mDRzSNY7/zopwisPZ5kM9XKCfhchqIYwAKRERtEnhYscZB79VRekuRSoYbN0+KVe3y8+q1h6A4svXtP7N+UoCA== + /@babel/preset-env/7.13.10_@babel+core@7.13.10: + dependencies: + '@babel/compat-data': 7.13.11 + '@babel/core': 7.13.10 + '@babel/helper-compilation-targets': 7.13.10_@babel+core@7.13.10 + '@babel/helper-plugin-utils': 7.13.0 + '@babel/helper-validator-option': 7.12.17 + '@babel/plugin-proposal-async-generator-functions': 7.13.8_@babel+core@7.13.10 + '@babel/plugin-proposal-class-properties': 7.13.0_@babel+core@7.13.10 + '@babel/plugin-proposal-dynamic-import': 7.13.8_@babel+core@7.13.10 + '@babel/plugin-proposal-export-namespace-from': 7.12.13_@babel+core@7.13.10 + '@babel/plugin-proposal-json-strings': 7.13.8_@babel+core@7.13.10 + '@babel/plugin-proposal-logical-assignment-operators': 7.13.8_@babel+core@7.13.10 + '@babel/plugin-proposal-nullish-coalescing-operator': 7.13.8_@babel+core@7.13.10 + '@babel/plugin-proposal-numeric-separator': 7.12.13_@babel+core@7.13.10 + '@babel/plugin-proposal-object-rest-spread': 7.13.8_@babel+core@7.13.10 + '@babel/plugin-proposal-optional-catch-binding': 7.13.8_@babel+core@7.13.10 + '@babel/plugin-proposal-optional-chaining': 7.13.8_@babel+core@7.13.10 + '@babel/plugin-proposal-private-methods': 7.13.0_@babel+core@7.13.10 + '@babel/plugin-proposal-unicode-property-regex': 7.12.13_@babel+core@7.13.10 + '@babel/plugin-syntax-async-generators': 7.8.4_@babel+core@7.13.10 + '@babel/plugin-syntax-class-properties': 7.12.13_@babel+core@7.13.10 + '@babel/plugin-syntax-dynamic-import': 7.8.3_@babel+core@7.13.10 + '@babel/plugin-syntax-export-namespace-from': 7.8.3_@babel+core@7.13.10 + '@babel/plugin-syntax-json-strings': 7.8.3_@babel+core@7.13.10 + '@babel/plugin-syntax-logical-assignment-operators': 7.10.4_@babel+core@7.13.10 + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3_@babel+core@7.13.10 + '@babel/plugin-syntax-numeric-separator': 7.10.4_@babel+core@7.13.10 + '@babel/plugin-syntax-object-rest-spread': 7.8.3_@babel+core@7.13.10 + '@babel/plugin-syntax-optional-catch-binding': 7.8.3_@babel+core@7.13.10 + '@babel/plugin-syntax-optional-chaining': 7.8.3_@babel+core@7.13.10 + '@babel/plugin-syntax-top-level-await': 7.12.13_@babel+core@7.13.10 + '@babel/plugin-transform-arrow-functions': 7.13.0_@babel+core@7.13.10 + '@babel/plugin-transform-async-to-generator': 7.13.0_@babel+core@7.13.10 + '@babel/plugin-transform-block-scoped-functions': 7.12.13_@babel+core@7.13.10 + '@babel/plugin-transform-block-scoping': 7.12.13_@babel+core@7.13.10 + '@babel/plugin-transform-classes': 7.13.0_@babel+core@7.13.10 + '@babel/plugin-transform-computed-properties': 7.13.0_@babel+core@7.13.10 + '@babel/plugin-transform-destructuring': 7.13.0_@babel+core@7.13.10 + '@babel/plugin-transform-dotall-regex': 7.12.13_@babel+core@7.13.10 + '@babel/plugin-transform-duplicate-keys': 7.12.13_@babel+core@7.13.10 + '@babel/plugin-transform-exponentiation-operator': 7.12.13_@babel+core@7.13.10 + '@babel/plugin-transform-for-of': 7.13.0_@babel+core@7.13.10 + '@babel/plugin-transform-function-name': 7.12.13_@babel+core@7.13.10 + '@babel/plugin-transform-literals': 7.12.13_@babel+core@7.13.10 + '@babel/plugin-transform-member-expression-literals': 7.12.13_@babel+core@7.13.10 + '@babel/plugin-transform-modules-amd': 7.13.0_@babel+core@7.13.10 + '@babel/plugin-transform-modules-commonjs': 7.13.8_@babel+core@7.13.10 + '@babel/plugin-transform-modules-systemjs': 7.13.8_@babel+core@7.13.10 + '@babel/plugin-transform-modules-umd': 7.13.0_@babel+core@7.13.10 + '@babel/plugin-transform-named-capturing-groups-regex': 7.12.13_@babel+core@7.13.10 + '@babel/plugin-transform-new-target': 7.12.13_@babel+core@7.13.10 + '@babel/plugin-transform-object-super': 7.12.13_@babel+core@7.13.10 + '@babel/plugin-transform-parameters': 7.13.0_@babel+core@7.13.10 + '@babel/plugin-transform-property-literals': 7.12.13_@babel+core@7.13.10 + '@babel/plugin-transform-regenerator': 7.12.13_@babel+core@7.13.10 + '@babel/plugin-transform-reserved-words': 7.12.13_@babel+core@7.13.10 + '@babel/plugin-transform-shorthand-properties': 7.12.13_@babel+core@7.13.10 + '@babel/plugin-transform-spread': 7.13.0_@babel+core@7.13.10 + '@babel/plugin-transform-sticky-regex': 7.12.13_@babel+core@7.13.10 + '@babel/plugin-transform-template-literals': 7.13.0_@babel+core@7.13.10 + '@babel/plugin-transform-typeof-symbol': 7.12.13_@babel+core@7.13.10 + '@babel/plugin-transform-unicode-escapes': 7.12.13_@babel+core@7.13.10 + '@babel/plugin-transform-unicode-regex': 7.12.13_@babel+core@7.13.10 + '@babel/preset-modules': 0.1.4_@babel+core@7.13.10 + '@babel/types': 7.13.0 + babel-plugin-polyfill-corejs2: 0.1.10_@babel+core@7.13.10 + babel-plugin-polyfill-corejs3: 0.1.7_@babel+core@7.13.10 + babel-plugin-polyfill-regenerator: 0.1.6_@babel+core@7.13.10 + core-js-compat: 3.9.1 + semver: 6.3.0 + dev: false + peerDependencies: + '@babel/core': ^7.0.0-0 + resolution: + integrity: sha512-nOsTScuoRghRtUsRr/c69d042ysfPHcu+KOB4A9aAO9eJYqrkat+LF8G1yp1HD18QiwixT2CisZTr/0b3YZPXQ== + /@babel/preset-modules/0.1.4_@babel+core@7.13.10: + dependencies: + '@babel/core': 7.13.10 + '@babel/helper-plugin-utils': 7.13.0 + '@babel/plugin-proposal-unicode-property-regex': 7.12.13_@babel+core@7.13.10 + '@babel/plugin-transform-dotall-regex': 7.12.13_@babel+core@7.13.10 + '@babel/types': 7.13.0 + esutils: 2.0.3 + dev: false + peerDependencies: + '@babel/core': ^7.0.0-0 + resolution: + integrity: sha512-J36NhwnfdzpmH41M1DrnkkgAqhZaqr/NBdPfQ677mLzlaXo+oDiv1deyCDtgAhz8p328otdob0Du7+xgHGZbKg== + /@babel/preset-react/7.12.13_@babel+core@7.13.10: + dependencies: + '@babel/core': 7.13.10 + '@babel/helper-plugin-utils': 7.12.13 + '@babel/plugin-transform-react-display-name': 7.12.13_@babel+core@7.13.10 + '@babel/plugin-transform-react-jsx': 7.12.13_@babel+core@7.13.10 + '@babel/plugin-transform-react-jsx-development': 7.12.12_@babel+core@7.13.10 + '@babel/plugin-transform-react-pure-annotations': 7.12.1_@babel+core@7.13.10 + dev: false + peerDependencies: + '@babel/core': ^7.0.0-0 + resolution: + integrity: sha512-TYM0V9z6Abb6dj1K7i5NrEhA13oS5ujUYQYDfqIBXYHOc2c2VkFgc+q9kyssIyUfy4/hEwqrgSlJ/Qgv8zJLsA== + /@babel/runtime-corejs3/7.13.10: + dependencies: + core-js-pure: 3.9.1 + regenerator-runtime: 0.13.7 + dev: true + resolution: + integrity: sha512-x/XYVQ1h684pp1mJwOV4CyvqZXqbc8CMsMGUnAbuc82ZCdv1U63w5RSUzgDSXQHG5Rps/kiksH6g2D5BuaKyXg== + /@babel/runtime/7.12.13: + dependencies: + regenerator-runtime: 0.13.7 + dev: false + resolution: + integrity: sha512-8+3UMPBrjFa/6TtKi/7sehPKqfAm4g6K+YQjyyFOLUTxzOngcRZTlAVY8sc2CORJYqdHQY8gRPHmn+qo15rCBw== + /@babel/runtime/7.13.10: + dependencies: + regenerator-runtime: 0.13.7 + dev: true + resolution: + integrity: sha512-4QPkjJq6Ns3V/RgpEahRk+AGfL0eO6RHHtTWoNNr5mO49G6B5+X6d6THgWEAvTrznU5xYpbAlVKRYcsCgh/Akw== + /@babel/template/7.12.13: + dependencies: + '@babel/code-frame': 7.12.13 + '@babel/parser': 7.13.11 + '@babel/types': 7.13.0 + resolution: + integrity: sha512-/7xxiGA57xMo/P2GVvdEumr8ONhFOhfgq2ihK3h1e6THqzTAkHbkXgB0xI9yeTfIUoH3+oAeHhqm/I43OTbbjA== + /@babel/traverse/7.13.0: + dependencies: + '@babel/code-frame': 7.12.13 + '@babel/generator': 7.13.9 + '@babel/helper-function-name': 7.12.13 + '@babel/helper-split-export-declaration': 7.12.13 + '@babel/parser': 7.13.11 + '@babel/types': 7.13.0 + debug: 4.3.1 + globals: 11.12.0 + lodash: 4.17.20 + resolution: + integrity: sha512-xys5xi5JEhzC3RzEmSGrs/b3pJW/o87SypZ+G/PhaE7uqVQNv/jlmVIBXuoh5atqQ434LfXV+sf23Oxj0bchJQ== + /@babel/types/7.12.13: + dependencies: + '@babel/helper-validator-identifier': 7.12.11 + lodash: 4.17.20 + to-fast-properties: 2.0.0 + resolution: + integrity: sha512-oKrdZTld2im1z8bDwTOQvUbxKwE+854zc16qWZQlcTqMN00pWxHQ4ZeOq0yDMnisOpRykH2/5Qqcrk/OlbAjiQ== + /@babel/types/7.13.0: + dependencies: + '@babel/helper-validator-identifier': 7.12.11 + lodash: 4.17.20 + to-fast-properties: 2.0.0 + resolution: + integrity: sha512-hE+HE8rnG1Z6Wzo+MhaKE5lM5eMx71T4EHJgku2E3xIfaULhDcxiiRxUYgwX8qwP1BBSlag+TdGOt6JAidIZTA== + /@eslint/eslintrc/0.4.0: + dependencies: + ajv: 6.12.6 + debug: 4.3.1 + espree: 7.3.1 + globals: 12.4.0 + ignore: 4.0.6 + import-fresh: 3.3.0 + js-yaml: 3.14.1 + minimatch: 3.0.4 + strip-json-comments: 3.1.1 + dev: true + engines: + node: ^10.12.0 || >=12.0.0 + resolution: + integrity: sha512-2ZPCc+uNbjV5ERJr+aKSPRwZgKd2z11x0EgLvb1PURmUrn9QNRXFqje0Ldq454PfAVyaJYyrDvvIKSFP4NnBog== + /@nicolo-ribaudo/chokidar-2/2.1.8-no-fsevents: + dependencies: + anymatch: 2.0.0 + async-each: 1.0.3 + braces: 2.3.2 + glob-parent: 3.1.0 + inherits: 2.0.4 + is-binary-path: 1.0.1 + is-glob: 4.0.1 + normalize-path: 3.0.0 + path-is-absolute: 1.0.1 + readdirp: 2.2.1 + upath: 1.2.0 + dev: false + optional: true + resolution: + integrity: sha512-+nb9vWloHNNMFHjGofEam3wopE3m1yuambrrd/fnPc+lFOMB9ROTqQlche9ByFWNkdNqfSgR/kkQtQ8DzEWt2w== + /@nodelib/fs.scandir/2.1.4: + dependencies: + '@nodelib/fs.stat': 2.0.4 + run-parallel: 1.2.0 + dev: true + engines: + node: '>= 8' + resolution: + integrity: sha512-33g3pMJk3bg5nXbL/+CY6I2eJDzZAni49PfJnL5fghPTggPvBd/pFNSgJsdAgWptuFu7qq/ERvOYFlhvsLTCKA== + /@nodelib/fs.stat/2.0.4: + dev: true + engines: + node: '>= 8' + resolution: + integrity: sha512-IYlHJA0clt2+Vg7bccq+TzRdJvv19c2INqBSsoOLp1je7xjtr7J26+WXR72MCdvU9q1qTzIWDfhMf+DRvQJK4Q== + /@nodelib/fs.walk/1.2.6: + dependencies: + '@nodelib/fs.scandir': 2.1.4 + fastq: 1.11.0 + dev: true + engines: + node: '>= 8' + resolution: + integrity: sha512-8Broas6vTtW4GIXTAHDoE32hnN2M5ykgCpWGbuXHQ15vEMqr23pB76e/GZcYsZCHALv50ktd24qhEyKr6wBtow== + /@types/json-schema/7.0.7: + dev: true + resolution: + integrity: sha512-cxWFQVseBm6O9Gbw1IWb8r6OS4OhSt3hPZLkFApLjM8TEXROBuQGLAH2i2gZpcXdLBIrpXuTDhH7Vbm1iXmNGA== + /@types/json5/0.0.29: + dev: true + resolution: + integrity: sha1-7ihweulOEdK4J7y+UnC86n8+ce4= + /@typescript-eslint/eslint-plugin/4.18.0_ef0f217f6395606fd8bbe7b0291eff7e: + dependencies: + '@typescript-eslint/experimental-utils': 4.18.0_eslint@7.22.0+typescript@4.2.3 + '@typescript-eslint/parser': 4.18.0_eslint@7.22.0+typescript@4.2.3 + '@typescript-eslint/scope-manager': 4.18.0 + debug: 4.3.1 + eslint: 7.22.0 + functional-red-black-tree: 1.0.1 + lodash: 4.17.21 + regexpp: 3.1.0 + semver: 7.3.4 + tsutils: 3.21.0_typescript@4.2.3 + typescript: 4.2.3 + dev: true + engines: + node: ^10.12.0 || >=12.0.0 + peerDependencies: + '@typescript-eslint/parser': ^4.0.0 + eslint: ^5.0.0 || ^6.0.0 || ^7.0.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + resolution: + integrity: sha512-Lzkc/2+7EoH7+NjIWLS2lVuKKqbEmJhtXe3rmfA8cyiKnZm3IfLf51irnBcmow8Q/AptVV0XBZmBJKuUJTe6cQ== + /@typescript-eslint/experimental-utils/4.18.0_eslint@7.22.0+typescript@4.2.3: + dependencies: + '@types/json-schema': 7.0.7 + '@typescript-eslint/scope-manager': 4.18.0 + '@typescript-eslint/types': 4.18.0 + '@typescript-eslint/typescript-estree': 4.18.0_typescript@4.2.3 + eslint: 7.22.0 + eslint-scope: 5.1.1 + eslint-utils: 2.1.0 + dev: true + engines: + node: ^10.12.0 || >=12.0.0 + peerDependencies: + eslint: '*' + typescript: '*' + resolution: + integrity: sha512-92h723Kblt9JcT2RRY3QS2xefFKar4ZQFVs3GityOKWQYgtajxt/tuXIzL7sVCUlM1hgreiV5gkGYyBpdOwO6A== + /@typescript-eslint/parser/4.18.0_eslint@7.22.0+typescript@4.2.3: + dependencies: + '@typescript-eslint/scope-manager': 4.18.0 + '@typescript-eslint/types': 4.18.0 + '@typescript-eslint/typescript-estree': 4.18.0_typescript@4.2.3 + debug: 4.3.1 + eslint: 7.22.0 + typescript: 4.2.3 + dev: true + engines: + node: ^10.12.0 || >=12.0.0 + peerDependencies: + eslint: ^5.0.0 || ^6.0.0 || ^7.0.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + resolution: + integrity: sha512-W3z5S0ZbecwX3PhJEAnq4mnjK5JJXvXUDBYIYGoweCyWyuvAKfGHvzmpUzgB5L4cRBb+cTu9U/ro66dx7dIimA== + /@typescript-eslint/scope-manager/4.18.0: + dependencies: + '@typescript-eslint/types': 4.18.0 + '@typescript-eslint/visitor-keys': 4.18.0 + dev: true + engines: + node: ^8.10.0 || ^10.13.0 || >=11.10.1 + resolution: + integrity: sha512-olX4yN6rvHR2eyFOcb6E4vmhDPsfdMyfQ3qR+oQNkAv8emKKlfxTWUXU5Mqxs2Fwe3Pf1BoPvrwZtwngxDzYzQ== + /@typescript-eslint/types/4.18.0: + dev: true + engines: + node: ^8.10.0 || ^10.13.0 || >=11.10.1 + resolution: + integrity: sha512-/BRociARpj5E+9yQ7cwCF/SNOWwXJ3qhjurMuK2hIFUbr9vTuDeu476Zpu+ptxY2kSxUHDGLLKy+qGq2sOg37A== + /@typescript-eslint/typescript-estree/4.18.0_typescript@4.2.3: + dependencies: + '@typescript-eslint/types': 4.18.0 + '@typescript-eslint/visitor-keys': 4.18.0 + debug: 4.3.1 + globby: 11.0.2 + is-glob: 4.0.1 + semver: 7.3.4 + tsutils: 3.21.0_typescript@4.2.3 + typescript: 4.2.3 + dev: true + engines: + node: ^10.12.0 || >=12.0.0 + peerDependencies: + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + resolution: + integrity: sha512-wt4xvF6vvJI7epz+rEqxmoNQ4ZADArGQO9gDU+cM0U5fdVv7N+IAuVoVAoZSOZxzGHBfvE3XQMLdy+scsqFfeg== + /@typescript-eslint/visitor-keys/4.18.0: + dependencies: + '@typescript-eslint/types': 4.18.0 + eslint-visitor-keys: 2.0.0 + dev: true + engines: + node: ^8.10.0 || ^10.13.0 || >=11.10.1 + resolution: + integrity: sha512-Q9t90JCvfYaN0OfFUgaLqByOfz8yPeTAdotn/XYNm5q9eHax90gzdb+RJ6E9T5s97Kv/UHWKERTmqA0jTKAEHw== + /acorn-jsx/5.3.1_acorn@7.4.1: + dependencies: + acorn: 7.4.1 + dev: true + peerDependencies: + acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 + resolution: + integrity: sha512-K0Ptm/47OKfQRpNQ2J/oIN/3QYiK6FwW+eJbILhsdxh2WTLdl+30o8aGdTbm5JbffpFFAg/g+zi1E+jvJha5ng== + /acorn/7.4.1: + dev: true + engines: + node: '>=0.4.0' + hasBin: true + resolution: + integrity: sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A== + /aggregate-error/3.1.0: + dependencies: + clean-stack: 2.2.0 + indent-string: 4.0.0 + dev: true + engines: + node: '>=8' + resolution: + integrity: sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA== + /ajv/6.12.6: + dependencies: + fast-deep-equal: 3.1.3 + fast-json-stable-stringify: 2.1.0 + json-schema-traverse: 0.4.1 + uri-js: 4.4.1 + dev: true + resolution: + integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== + /ajv/7.0.4: + dependencies: + fast-deep-equal: 3.1.3 + json-schema-traverse: 1.0.0 + require-from-string: 2.0.2 + uri-js: 4.4.1 + dev: true + resolution: + integrity: sha512-xzzzaqgEQfmuhbhAoqjJ8T/1okb6gAzXn/eQRNpAN1AEUoHJTNF9xCDRTtf/s3SKldtZfa+RJeTs+BQq+eZ/sw== + /ansi-colors/4.1.1: + dev: true + engines: + node: '>=6' + resolution: + integrity: sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA== + /ansi-regex/2.1.1: + dev: true + engines: + node: '>=0.10.0' + resolution: + integrity: sha1-w7M6te42DYbg5ijwRorn7yfWVN8= + /ansi-regex/5.0.0: + engines: + node: '>=8' + resolution: + integrity: sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg== + /ansi-styles/2.2.1: + dev: true + engines: + node: '>=0.10.0' + resolution: + integrity: sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4= + /ansi-styles/3.2.1: + dependencies: + color-convert: 1.9.3 + engines: + node: '>=4' + resolution: + integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== + /ansi-styles/4.3.0: + dependencies: + color-convert: 2.0.1 + dev: true + engines: + node: '>=8' + resolution: + integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== + /ansi-to-html/0.6.14: + dependencies: + entities: 1.1.2 + dev: false + hasBin: true + resolution: + integrity: sha512-7ZslfB1+EnFSDO5Ju+ue5Y6It19DRnZXWv8jrGHgIlPna5Mh4jz7BV5jCbQneXNFurQcKoolaaAjHtgSBfOIuA== + /anymatch/2.0.0: + dependencies: + micromatch: 3.1.10 + normalize-path: 2.1.1 + dev: false + optional: true + resolution: + integrity: sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw== + /anymatch/3.1.1: + dependencies: + normalize-path: 3.0.0 + picomatch: 2.2.2 + dev: false + engines: + node: '>= 8' + optional: true + resolution: + integrity: sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg== + /argparse/1.0.10: + dependencies: + sprintf-js: 1.0.3 + dev: true + resolution: + integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== + /argparse/2.0.1: + dev: true + resolution: + integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== + /aria-query/4.2.2: + dependencies: + '@babel/runtime': 7.13.10 + '@babel/runtime-corejs3': 7.13.10 + dev: true + engines: + node: '>=6.0' + resolution: + integrity: sha512-o/HelwhuKpTj/frsOsbNLNgnNGVIFsVP/SW2BSF14gVl7kAfMOJ6/8wUAUvG1R1NHKrfG+2sHZTu0yauT1qBrA== + /arr-diff/4.0.0: + dev: false + engines: + node: '>=0.10.0' + optional: true + resolution: + integrity: sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA= + /arr-flatten/1.1.0: + dev: false + engines: + node: '>=0.10.0' + optional: true + resolution: + integrity: sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg== + /arr-union/3.1.0: + dev: false + engines: + node: '>=0.10.0' + optional: true + resolution: + integrity: sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ= + /array-includes/3.1.3: + dependencies: + call-bind: 1.0.2 + define-properties: 1.1.3 + es-abstract: 1.18.0 + get-intrinsic: 1.1.1 + is-string: 1.0.5 + dev: true + engines: + node: '>= 0.4' + resolution: + integrity: sha512-gcem1KlBU7c9rB+Rq8/3PPKsK2kjqeEBa3bD5kkQo4nYlOHQCJqIJFqBXDEfwaRuYTT4E+FxA9xez7Gf/e3Q7A== + /array-union/2.1.0: + dev: true + engines: + node: '>=8' + resolution: + integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== + /array-unique/0.3.2: + dev: false + engines: + node: '>=0.10.0' + optional: true + resolution: + integrity: sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg= + /array.prototype.flat/1.2.4: + dependencies: + call-bind: 1.0.2 + define-properties: 1.1.3 + es-abstract: 1.18.0 + dev: true + engines: + node: '>= 0.4' + resolution: + integrity: sha512-4470Xi3GAPAjZqFcljX2xzckv1qeKPizoNkiS0+O4IoPR2ZNpcjE0pkhdihlDouK+x6QOast26B4Q/O9DJnwSg== + /array.prototype.flatmap/1.2.4: + dependencies: + call-bind: 1.0.2 + define-properties: 1.1.3 + es-abstract: 1.18.0 + function-bind: 1.1.1 + dev: true + engines: + node: '>= 0.4' + resolution: + integrity: sha512-r9Z0zYoxqHz60vvQbWEdXIEtCwHF0yxaWfno9qzXeNHvfyl3BZqygmGzb84dsubyaXLH4husF+NFgMSdpZhk2Q== + /assign-symbols/1.0.0: + dev: false + engines: + node: '>=0.10.0' + optional: true + resolution: + integrity: sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c= + /ast-types-flow/0.0.7: + dev: true + resolution: + integrity: sha1-9wtzXGvKGlycItmCw+Oef+ujva0= + /astral-regex/2.0.0: + dev: true + engines: + node: '>=8' + resolution: + integrity: sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ== + /async-each/1.0.3: + dev: false + optional: true + resolution: + integrity: sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ== + /at-least-node/1.0.0: + dev: false + engines: + node: '>= 4.0.0' + resolution: + integrity: sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg== + /atob/2.1.2: + dev: false + engines: + node: '>= 4.5.0' + hasBin: true + optional: true + resolution: + integrity: sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg== + /atom-message-panel/1.3.1: + dependencies: + atom-space-pen-views: 2.2.0 + dev: false + resolution: + integrity: sha512-nLi19faNBl/kabrf6itBkHcLrnpUeiGbpda+dHufAODKH+I+odoPRCxx7EZ+mCHEsBMhHNXxLWOLA+Mm9pumbA== + /atom-space-pen-views-plus/3.0.4: + dependencies: + fs-extra: 9.1.0 + fuzzaldrin: 2.1.0 + space-pen-plus: 6.0.3 + dev: false + resolution: + integrity: sha512-PfCBrD6RUN359P8Do3D3m2d1Ws2DyR7Jl1Ym97R2Gr9liM+5CYU5AvopJNL9m8pZqOBpu5ePcHjSrC/V1cL8oA== + /atom-space-pen-views/2.2.0: + dependencies: + fuzzaldrin: 2.1.0 + space-pen: 5.1.2 + dev: false + resolution: + integrity: sha1-plsskg7QL3JAFPp9Plw9ePv1mZc= + /axe-core/3.5.5: + dev: true + engines: + node: '>=4' + resolution: + integrity: sha512-5P0QZ6J5xGikH780pghEdbEKijCTrruK9KxtPZCFWUpef0f6GipO+xEZ5GKCb020mmqgbiNO6TcA55CriL784Q== + /axe-core/4.1.3: + dev: true + engines: + node: '>=4' + resolution: + integrity: sha512-vwPpH4Aj4122EW38mxO/fxhGKtwWTMLDIJfZ1He0Edbtjcfna/R3YB67yVhezUMzqc3Jr3+Ii50KRntlENL4xQ== + /axobject-query/2.2.0: + dev: true + resolution: + integrity: sha512-Td525n+iPOOyUQIeBfcASuG6uJsDOITl7Mds5gFyerkWiX7qhUTdYUBlSgNMyVqtSJqwpt1kXGLdUt6SykLMRA== + /babel-code-frame/6.26.0: + dependencies: + chalk: 1.1.3 + esutils: 2.0.3 + js-tokens: 3.0.2 + dev: true + resolution: + integrity: sha1-Y/1D99weO7fONZR9uP42mj9Yx0s= + /babel-eslint/10.1.0_eslint@7.22.0: + dependencies: + '@babel/code-frame': 7.12.13 + '@babel/parser': 7.13.11 + '@babel/traverse': 7.13.0 + '@babel/types': 7.13.0 + eslint: 7.22.0 + eslint-visitor-keys: 1.3.0 + resolve: 1.20.0 + deprecated: babel-eslint is now @babel/eslint-parser. This package will no longer receive updates. + dev: true + engines: + node: '>=6' + peerDependencies: + eslint: '>= 4.12.1' + resolution: + integrity: sha512-ifWaTHQ0ce+448CYop8AdrQiBsGrnC+bMgfyKFdi6EsPLTAWG+QfyDeM6OH+FmWnKvEq5NnBMLvlBUPKQZoDSg== + /babel-eslint/7.2.3: + dependencies: + babel-code-frame: 6.26.0 + babel-traverse: 6.26.0 + babel-types: 6.26.0 + babylon: 6.18.0 + deprecated: babel-eslint is now @babel/eslint-parser. This package will no longer receive updates. + dev: true + engines: + node: '>=4' + resolution: + integrity: sha1-sv4tgBJkcPXBlELcdXJTqJdxCCc= + /babel-messages/6.23.0: + dependencies: + babel-runtime: 6.26.0 + dev: true + resolution: + integrity: sha1-8830cDhYA1sqKVHG7F7fbGLyYw4= + /babel-plugin-dynamic-import-node/2.3.3: + dependencies: + object.assign: 4.1.2 + dev: false + resolution: + integrity: sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ== + /babel-plugin-polyfill-corejs2/0.1.10_@babel+core@7.13.10: + dependencies: + '@babel/compat-data': 7.13.11 + '@babel/core': 7.13.10 + '@babel/helper-define-polyfill-provider': 0.1.5_@babel+core@7.13.10 + semver: 6.3.0 + dev: false + peerDependencies: + '@babel/core': ^7.0.0-0 + resolution: + integrity: sha512-DO95wD4g0A8KRaHKi0D51NdGXzvpqVLnLu5BTvDlpqUEpTmeEtypgC1xqesORaWmiUOQI14UHKlzNd9iZ2G3ZA== + /babel-plugin-polyfill-corejs3/0.1.7_@babel+core@7.13.10: + dependencies: + '@babel/core': 7.13.10 + '@babel/helper-define-polyfill-provider': 0.1.5_@babel+core@7.13.10 + core-js-compat: 3.9.1 + dev: false + peerDependencies: + '@babel/core': ^7.0.0-0 + resolution: + integrity: sha512-u+gbS9bbPhZWEeyy1oR/YaaSpod/KDT07arZHb80aTpl8H5ZBq+uN1nN9/xtX7jQyfLdPfoqI4Rue/MQSWJquw== + /babel-plugin-polyfill-regenerator/0.1.6_@babel+core@7.13.10: + dependencies: + '@babel/core': 7.13.10 + '@babel/helper-define-polyfill-provider': 0.1.5_@babel+core@7.13.10 + dev: false + peerDependencies: + '@babel/core': ^7.0.0-0 + resolution: + integrity: sha512-OUrYG9iKPKz8NxswXbRAdSwF0GhRdIEMTloQATJi4bDuFqrXaXcCUT/VGNrr8pBcjMh1RxZ7Xt9cytVJTJfvMg== + /babel-runtime/6.26.0: + dependencies: + core-js: 2.6.12 + regenerator-runtime: 0.11.1 + dev: true + resolution: + integrity: sha1-llxwWGaOgrVde/4E/yM3vItWR/4= + /babel-traverse/6.26.0: + dependencies: + babel-code-frame: 6.26.0 + babel-messages: 6.23.0 + babel-runtime: 6.26.0 + babel-types: 6.26.0 + babylon: 6.18.0 + debug: 2.6.9 + globals: 9.18.0 + invariant: 2.2.4 + lodash: 4.17.21 + dev: true + resolution: + integrity: sha1-RqnL1+3MYsjlwGTi0tjQ9ANXZu4= + /babel-types/6.26.0: + dependencies: + babel-runtime: 6.26.0 + esutils: 2.0.3 + lodash: 4.17.21 + to-fast-properties: 1.0.3 + dev: true + resolution: + integrity: sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc= + /babylon/6.18.0: + dev: true + hasBin: true + resolution: + integrity: sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ== + /babylon/7.0.0-beta.47: + dev: true + engines: + node: '>=6.0.0' + hasBin: true + resolution: + integrity: sha512-+rq2cr4GDhtToEzKFD6KZZMDBXhjFAr9JjPw9pAppZACeEWqNM294j+NdBzkSHYXwzzBmVjZ3nEVJlOhbR2gOQ== + /balanced-match/1.0.0: + resolution: + integrity: sha1-ibTRmasr7kneFk6gK4nORi1xt2c= + /base/0.11.2: + dependencies: + cache-base: 1.0.1 + class-utils: 0.3.6 + component-emitter: 1.3.0 + define-property: 1.0.0 + isobject: 3.0.1 + mixin-deep: 1.3.2 + pascalcase: 0.1.1 + dev: false + engines: + node: '>=0.10.0' + optional: true + resolution: + integrity: sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg== + /binary-extensions/1.13.1: + dev: false + engines: + node: '>=0.10.0' + optional: true + resolution: + integrity: sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw== + /binary-extensions/2.2.0: + dev: false + engines: + node: '>=8' + optional: true + resolution: + integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== + /brace-expansion/1.1.11: + dependencies: + balanced-match: 1.0.0 + concat-map: 0.0.1 + resolution: + integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== + /braces/2.3.2: + dependencies: + arr-flatten: 1.1.0 + array-unique: 0.3.2 + extend-shallow: 2.0.1 + fill-range: 4.0.0 + isobject: 3.0.1 + repeat-element: 1.1.3 + snapdragon: 0.8.2 + snapdragon-node: 2.1.1 + split-string: 3.1.0 + to-regex: 3.0.2 + dev: false + engines: + node: '>=0.10.0' + optional: true + resolution: + integrity: sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w== + /braces/3.0.2: + dependencies: + fill-range: 7.0.1 + engines: + node: '>=8' + resolution: + integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== + /browserslist/4.16.3: + dependencies: + caniuse-lite: 1.0.30001185 + colorette: 1.2.1 + electron-to-chromium: 1.3.657 + escalade: 3.1.1 + node-releases: 1.1.70 + engines: + node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7 + hasBin: true + resolution: + integrity: sha512-vIyhWmIkULaq04Gt93txdh+j02yX/JzlyhLYbV3YQCn/zvES3JnY7TifHHvvr1w5hTDluNKMkV05cs4vy8Q7sw== + /cache-base/1.0.1: + dependencies: + collection-visit: 1.0.0 + component-emitter: 1.3.0 + get-value: 2.0.6 + has-value: 1.0.0 + isobject: 3.0.1 + set-value: 2.0.1 + to-object-path: 0.3.0 + union-value: 1.0.1 + unset-value: 1.0.0 + dev: false + engines: + node: '>=0.10.0' + optional: true + resolution: + integrity: sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ== + /call-bind/1.0.2: + dependencies: + function-bind: 1.1.1 + get-intrinsic: 1.1.1 + resolution: + integrity: sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA== + /callsites/3.1.0: + dev: true + engines: + node: '>=6' + resolution: + integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== + /caniuse-lite/1.0.30001185: + resolution: + integrity: sha512-Fpi4kVNtNvJ15H0F6vwmXtb3tukv3Zg3qhKkOGUq7KJ1J6b9kf4dnNgtEAFXhRsJo0gNj9W60+wBvn0JcTvdTg== + /chalk/1.1.3: + dependencies: + ansi-styles: 2.2.1 + escape-string-regexp: 1.0.5 + has-ansi: 2.0.0 + strip-ansi: 3.0.1 + supports-color: 2.0.0 + dev: true + engines: + node: '>=0.10.0' + resolution: + integrity: sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg= + /chalk/2.4.2: + dependencies: + ansi-styles: 3.2.1 + escape-string-regexp: 1.0.5 + supports-color: 5.5.0 + engines: + node: '>=4' + resolution: + integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== + /chalk/4.1.0: + dependencies: + ansi-styles: 4.3.0 + supports-color: 7.2.0 + dev: true + engines: + node: '>=10' + resolution: + integrity: sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A== + /chokidar/3.5.1: + dependencies: + anymatch: 3.1.1 + braces: 3.0.2 + glob-parent: 5.1.1 + is-binary-path: 2.1.0 + is-glob: 4.0.1 + normalize-path: 3.0.0 + readdirp: 3.5.0 + dev: false + engines: + node: '>= 8.10.0' + optional: true + optionalDependencies: + fsevents: 2.3.2 + resolution: + integrity: sha512-9+s+Od+W0VJJzawDma/gvBNQqkTiqYTWLuZoyAsivsI4AaWTCzHG06/TMjsf1cYe9Cb97UCEhjz7HvnPk2p/tw== + /class-utils/0.3.6: + dependencies: + arr-union: 3.1.0 + define-property: 0.2.5 + isobject: 3.0.1 + static-extend: 0.1.2 + dev: false + engines: + node: '>=0.10.0' + optional: true + resolution: + integrity: sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg== + /clean-stack/2.2.0: + dev: true + engines: + node: '>=6' + resolution: + integrity: sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A== + /cli/1.0.1: + dependencies: + exit: 0.1.2 + glob: 7.1.6 + dev: true + engines: + node: '>=0.2.5' + resolution: + integrity: sha1-IoF1NPJL+klQw01TLUjsvGIbjBQ= + /coffeescript/1.12.7: + dev: true + engines: + node: '>=0.8.0' + hasBin: true + resolution: + integrity: sha512-pLXHFxQMPklVoEekowk8b3erNynC+DVJzChxS/LCBBgR6/8AJkHivkm//zbowcfc7BTCAjryuhx6gPqPRfsFoA== + /coffeescript/2.5.1: + engines: + node: '>=6' + hasBin: true + resolution: + integrity: sha512-J2jRPX0eeFh5VKyVnoLrfVFgLZtnnmp96WQSLAS8OrLm2wtQLcnikYKe1gViJKDH7vucjuhHvBKKBP3rKcD1tQ== + /collection-visit/1.0.0: + dependencies: + map-visit: 1.0.0 + object-visit: 1.0.1 + dev: false + engines: + node: '>=0.10.0' + optional: true + resolution: + integrity: sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA= + /color-convert/1.9.3: + dependencies: + color-name: 1.1.3 + resolution: + integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== + /color-convert/2.0.1: + dependencies: + color-name: 1.1.4 + dev: true + engines: + node: '>=7.0.0' + resolution: + integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== + /color-name/1.1.3: + resolution: + integrity: sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= + /color-name/1.1.4: + dev: true + resolution: + integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== + /colorette/1.2.1: + resolution: + integrity: sha512-puCDz0CzydiSYOrnXpz/PKd69zRrribezjtE9yd4zvytoRc8+RY/KJPvtPFKZS3E3wP6neGyMe0vOTlHO5L3Pw== + /commander/4.1.1: + dev: false + engines: + node: '>= 6' + resolution: + integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA== + /component-emitter/1.3.0: + dev: false + optional: true + resolution: + integrity: sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg== + /concat-map/0.0.1: + resolution: + integrity: sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= + /confusing-browser-globals/1.0.10: + dev: true + resolution: + integrity: sha512-gNld/3lySHwuhaVluJUKLePYirM3QNCKzVxqAdhJII9/WXKVX5PURzMVJspS1jTslSqjeuG4KMVTSouit5YPHA== + /console-browserify/1.1.0: + dependencies: + date-now: 0.1.4 + dev: true + resolution: + integrity: sha1-8CQcRXMKn8YyOyBtvzjtx0HQuxA= + /contains-path/0.1.0: + dev: true + engines: + node: '>=0.10.0' + resolution: + integrity: sha1-/ozxhP9mcLa67wGp1IYaXL7EEgo= + /convert-source-map/1.7.0: + dependencies: + safe-buffer: 5.1.2 + resolution: + integrity: sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA== + /copy-descriptor/0.1.1: + dev: false + engines: + node: '>=0.10.0' + optional: true + resolution: + integrity: sha1-Z29us8OZl8LuGsOpJP1hJHSPV40= + /core-js-compat/3.9.1: + dependencies: + browserslist: 4.16.3 + semver: 7.0.0 + dev: false + resolution: + integrity: sha512-jXAirMQxrkbiiLsCx9bQPJFA6llDadKMpYrBJQJ3/c4/vsPP/fAf29h24tviRlvwUL6AmY5CHLu2GvjuYviQqA== + /core-js-pure/3.9.1: + dev: true + requiresBuild: true + resolution: + integrity: sha512-laz3Zx0avrw9a4QEIdmIblnVuJz8W51leY9iLThatCsFawWxC3sE4guASC78JbCin+DkwMpCdp1AVAuzL/GN7A== + /core-js/2.6.12: + deprecated: core-js@<3 is no longer maintained and not recommended for usage due to the number of issues. Please, upgrade your dependencies to the actual version of core-js@3. + dev: true + requiresBuild: true + resolution: + integrity: sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ== + /core-util-is/1.0.2: + resolution: + integrity: sha1-tf1UIgqivFq1eqtxQMlAdUUDwac= + /cross-spawn/7.0.3: + dependencies: + path-key: 3.1.1 + shebang-command: 2.0.0 + which: 2.0.2 + dev: true + engines: + node: '>= 8' + resolution: + integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== + /crypto-random-string/2.0.0: + dev: true + engines: + node: '>=8' + resolution: + integrity: sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA== + /d/0.1.1: + dependencies: + es5-ext: 0.10.53 + dev: false + resolution: + integrity: sha1-2hhMU10Y2O57oqoim5FACfrhEwk= + /d/1.0.1: + dependencies: + es5-ext: 0.10.53 + type: 1.2.0 + dev: false + resolution: + integrity: sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA== + /damerau-levenshtein/1.0.6: + dev: true + resolution: + integrity: sha512-JVrozIeElnj3QzfUIt8tB8YMluBJom4Vw9qTPpjGYQ9fYlB3D/rb6OordUxf3xeFB35LKWs0xqcO5U6ySvBtug== + /date-now/0.1.4: + dev: true + resolution: + integrity: sha1-6vQ5/U1ISK105cx9vvIAZyueNFs= + /debug/2.6.9: + dependencies: + ms: 2.0.0 + resolution: + integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== + /debug/4.3.1: + dependencies: + ms: 2.1.2 + engines: + node: '>=6.0' + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + resolution: + integrity: sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ== + /decode-uri-component/0.2.0: + dev: false + engines: + node: '>=0.10' + optional: true + resolution: + integrity: sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU= + /deep-is/0.1.3: + dev: true + resolution: + integrity: sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ= + /define-properties/1.1.3: + dependencies: + object-keys: 1.1.1 + engines: + node: '>= 0.4' + resolution: + integrity: sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ== + /define-property/0.2.5: + dependencies: + is-descriptor: 0.1.6 + dev: false + engines: + node: '>=0.10.0' + optional: true + resolution: + integrity: sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY= + /define-property/1.0.0: + dependencies: + is-descriptor: 1.0.2 + dev: false + engines: + node: '>=0.10.0' + optional: true + resolution: + integrity: sha1-dp66rz9KY6rTr56NMEybvnm/sOY= + /define-property/2.0.2: + dependencies: + is-descriptor: 1.0.2 + isobject: 3.0.1 + dev: false + engines: + node: '>=0.10.0' + optional: true + resolution: + integrity: sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ== + /del/6.0.0: + dependencies: + globby: 11.0.2 + graceful-fs: 4.2.5 + is-glob: 4.0.1 + is-path-cwd: 2.2.0 + is-path-inside: 3.0.2 + p-map: 4.0.0 + rimraf: 3.0.2 + slash: 3.0.0 + dev: true + engines: + node: '>=10' + resolution: + integrity: sha512-1shh9DQ23L16oXSZKB2JxpL7iMy2E0S9d517ptA1P8iw0alkPtQcrKH7ru31rYtKwF499HkTu+DRzq3TCKDFRQ== + /dir-glob/3.0.1: + dependencies: + path-type: 4.0.0 + dev: true + engines: + node: '>=8' + resolution: + integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA== + /doctrine/1.5.0: + dependencies: + esutils: 2.0.3 + isarray: 1.0.0 + dev: true + engines: + node: '>=0.10.0' + resolution: + integrity: sha1-N53Ocw9hZvds76TmcHoVmwLFpvo= + /doctrine/2.1.0: + dependencies: + esutils: 2.0.3 + dev: true + engines: + node: '>=0.10.0' + resolution: + integrity: sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw== + /doctrine/3.0.0: + dependencies: + esutils: 2.0.3 + dev: true + engines: + node: '>=6.0.0' + resolution: + integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w== + /dom-serializer/0.2.2: + dependencies: + domelementtype: 2.1.0 + entities: 2.2.0 + dev: true + resolution: + integrity: sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g== + /domelementtype/1.3.1: + dev: true + resolution: + integrity: sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w== + /domelementtype/2.1.0: + dev: true + resolution: + integrity: sha512-LsTgx/L5VpD+Q8lmsXSHW2WpA+eBlZ9HPf3erD1IoPF00/3JKHZ3BknUVA2QGDNu69ZNmyFmCWBSO45XjYKC5w== + /domhandler/2.3.0: + dependencies: + domelementtype: 1.3.1 + dev: true + resolution: + integrity: sha1-LeWaCCLVAn+r/28DLCsloqir5zg= + /domutils/1.5.1: + dependencies: + dom-serializer: 0.2.2 + domelementtype: 1.3.1 + dev: true + resolution: + integrity: sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8= + /electron-to-chromium/1.3.657: + resolution: + integrity: sha512-/9ROOyvEflEbaZFUeGofD+Tqs/WynbSTbNgNF+/TJJxH1ePD/e6VjZlDJpW3FFFd3nj5l3Hd8ki2vRwy+gyRFw== + /emissary/1.3.3: + dependencies: + es6-weak-map: 0.1.4 + mixto: 1.0.0 + property-accessors: 1.1.3 + underscore-plus: 1.7.0 + dev: false + resolution: + integrity: sha1-phjZLWgrIy0xER3DYlpd9mF5lgY= + /emoji-regex/8.0.0: + dev: true + resolution: + integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== + /emoji-regex/9.2.2: + dev: true + resolution: + integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg== + /enquirer/2.3.6: + dependencies: + ansi-colors: 4.1.1 + dev: true + engines: + node: '>=8.6' + resolution: + integrity: sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg== + /entities/1.0.0: + dev: true + resolution: + integrity: sha1-sph6o4ITR/zeZCsk/fyeT7cSvyY= + /entities/1.1.2: + dev: false + resolution: + integrity: sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w== + /entities/2.2.0: + dev: true + resolution: + integrity: sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A== + /error-ex/1.3.2: + dependencies: + is-arrayish: 0.2.1 + dev: true + resolution: + integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g== + /es-abstract/1.18.0: + dependencies: + call-bind: 1.0.2 + es-to-primitive: 1.2.1 + function-bind: 1.1.1 + get-intrinsic: 1.1.1 + has: 1.0.3 + has-symbols: 1.0.2 + is-callable: 1.2.3 + is-negative-zero: 2.0.1 + is-regex: 1.1.2 + is-string: 1.0.5 + object-inspect: 1.9.0 + object-keys: 1.1.1 + object.assign: 4.1.2 + string.prototype.trimend: 1.0.4 + string.prototype.trimstart: 1.0.4 + unbox-primitive: 1.0.0 + dev: true + engines: + node: '>= 0.4' + resolution: + integrity: sha512-LJzK7MrQa8TS0ja2w3YNLzUgJCGPdPOV1yVvezjNnS89D+VR08+Szt2mz3YB2Dck/+w5tfIq/RoUAFqJJGM2yw== + /es-to-primitive/1.2.1: + dependencies: + is-callable: 1.2.3 + is-date-object: 1.0.2 + is-symbol: 1.0.3 + dev: true + engines: + node: '>= 0.4' + resolution: + integrity: sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA== + /es5-ext/0.10.53: + dependencies: + es6-iterator: 2.0.3 + es6-symbol: 3.1.3 + next-tick: 1.0.0 + dev: false + resolution: + integrity: sha512-Xs2Stw6NiNHWypzRTY1MtaG/uJlwCk8kH81920ma8mvN8Xq1gsfhZvpkImLQArw8AHnv8MT2I45J3c0R8slE+Q== + /es6-iterator/0.1.3: + dependencies: + d: 0.1.1 + es5-ext: 0.10.53 + es6-symbol: 2.0.1 + dev: false + resolution: + integrity: sha1-1vWLjE/EE8JJtLqhl2j45NfIlE4= + /es6-iterator/2.0.3: + dependencies: + d: 1.0.1 + es5-ext: 0.10.53 + es6-symbol: 3.1.3 + dev: false + resolution: + integrity: sha1-p96IkUGgWpSwhUQDstCg+/qY87c= + /es6-symbol/2.0.1: + dependencies: + d: 0.1.1 + es5-ext: 0.10.53 + dev: false + resolution: + integrity: sha1-dhtcZ8/U8dGK+yNPaR1nhoLLO/M= + /es6-symbol/3.1.3: + dependencies: + d: 1.0.1 + ext: 1.4.0 + dev: false + resolution: + integrity: sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA== + /es6-weak-map/0.1.4: + dependencies: + d: 0.1.1 + es5-ext: 0.10.53 + es6-iterator: 0.1.3 + es6-symbol: 2.0.1 + dev: false + resolution: + integrity: sha1-cGzvnpmqI2undmwjnIueKG6n0ig= + /escalade/3.1.1: + engines: + node: '>=6' + resolution: + integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== + /escape-string-regexp/1.0.5: + engines: + node: '>=0.8.0' + resolution: + integrity: sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= + /eslint-config-airbnb-base/14.2.1_23c541aea0503b6154366e35dc4fb8b3: + dependencies: + confusing-browser-globals: 1.0.10 + eslint: 7.22.0 + eslint-plugin-import: 2.22.1_eslint@7.22.0 + object.assign: 4.1.2 + object.entries: 1.1.3 + dev: true + engines: + node: '>= 6' + peerDependencies: + eslint: ^5.16.0 || ^6.8.0 || ^7.2.0 + eslint-plugin-import: ^2.22.1 + resolution: + integrity: sha512-GOrQyDtVEc1Xy20U7vsB2yAoB4nBlfH5HZJeatRXHleO+OS5Ot+MWij4Dpltw4/DyIkqUfqz1epfhVR5XWWQPA== + /eslint-config-airbnb/18.2.1_1d033471a3365693861bf07d097fd1b9: + dependencies: + eslint: 7.22.0 + eslint-config-airbnb-base: 14.2.1_23c541aea0503b6154366e35dc4fb8b3 + eslint-plugin-import: 2.22.1_eslint@7.22.0 + eslint-plugin-jsx-a11y: 6.4.1_eslint@7.22.0 + eslint-plugin-react: 7.22.0_eslint@7.22.0 + object.assign: 4.1.2 + object.entries: 1.1.3 + dev: true + engines: + node: '>= 6' + peerDependencies: + eslint: ^5.16.0 || ^6.8.0 || ^7.2.0 + eslint-plugin-import: ^2.22.1 + eslint-plugin-jsx-a11y: ^6.4.1 + eslint-plugin-react: ^7.21.5 + eslint-plugin-react-hooks: ^4 || ^3 || ^2.3.0 || ^1.7.0 + resolution: + integrity: sha512-glZNDEZ36VdlZWoxn/bUR1r/sdFKPd1mHPbqUtkctgNG4yT2DLLtJ3D+yCV+jzZCc2V1nBVkmdknOJBZ5Hc0fg== + /eslint-config-atomic/1.12.4_eslint@7.22.0: + dependencies: + '@babel/core': 7.13.10 + '@typescript-eslint/eslint-plugin': 4.18.0_ef0f217f6395606fd8bbe7b0291eff7e + '@typescript-eslint/parser': 4.18.0_eslint@7.22.0+typescript@4.2.3 + babel-eslint: 10.1.0_eslint@7.22.0 + coffeescript: 1.12.7 + eslint: 7.22.0 + eslint-config-prettier: 8.1.0_eslint@7.22.0 + eslint-plugin-coffee: 0.1.14_eslint@7.22.0 + eslint-plugin-import: 2.22.1_eslint@7.22.0 + eslint-plugin-json: 2.1.2 + eslint-plugin-node: 11.1.0_eslint@7.22.0 + eslint-plugin-only-warn: 1.0.2 + eslint-plugin-optimize-regex: 1.2.0 + eslint-plugin-react: 7.22.0_eslint@7.22.0 + eslint-plugin-yaml: 0.4.1 + prettier: 2.2.1 + typescript: 4.2.3 + dev: true + peerDependencies: + eslint: '>=7' + resolution: + integrity: sha512-hsdvWQAhXvYY5B94RTDCtT1YMmOdZ4JSVuE45hANcTKYiIsv9LAyW0I05Cujrg60W0TXrfn0gmaTefBWXTTx2w== + /eslint-config-prettier/8.1.0_eslint@7.22.0: + dependencies: + eslint: 7.22.0 + dev: true + hasBin: true + peerDependencies: + eslint: '>=7.0.0' + resolution: + integrity: sha512-oKMhGv3ihGbCIimCAjqkdzx2Q+jthoqnXSP+d86M9tptwugycmTFdVR4IpLgq2c4SHifbwO90z2fQ8/Aio73yw== + /eslint-import-resolver-node/0.3.4: + dependencies: + debug: 2.6.9 + resolve: 1.20.0 + dev: true + resolution: + integrity: sha512-ogtf+5AB/O+nM6DIeBUNr2fuT7ot9Qg/1harBfBtaP13ekEWFQEEMP94BCB7zaNW3gyY+8SHYF00rnqYwXKWOA== + /eslint-module-utils/2.6.0: + dependencies: + debug: 2.6.9 + pkg-dir: 2.0.0 + dev: true + engines: + node: '>=4' + resolution: + integrity: sha512-6j9xxegbqe8/kZY8cYpcp0xhbK0EgJlg3g9mib3/miLaExuuwc3n5UEfSnU6hWMbT0FAYVvDbL9RrRgpUeQIvA== + /eslint-plugin-coffee/0.1.14_eslint@7.22.0: + dependencies: + axe-core: 3.5.5 + babel-eslint: 7.2.3 + babylon: 7.0.0-beta.47 + coffeescript: 2.5.1 + doctrine: 2.1.0 + eslint: 7.22.0 + eslint-config-airbnb: 18.2.1_1d033471a3365693861bf07d097fd1b9 + eslint-config-airbnb-base: 14.2.1_23c541aea0503b6154366e35dc4fb8b3 + eslint-plugin-import: 2.22.1_eslint@7.22.0 + eslint-plugin-jsx-a11y: 6.4.1_eslint@7.22.0 + eslint-plugin-react: 7.22.0_eslint@7.22.0 + eslint-plugin-react-native: 3.10.0_eslint@7.22.0 + eslint-scope: 3.7.3 + eslint-utils: 1.4.3 + eslint-visitor-keys: 1.3.0 + jsx-ast-utils: 2.4.1 + lodash: 4.17.21 + dev: true + peerDependencies: + eslint: '>=6.0.0' + resolution: + integrity: sha512-JwBminIlHz7XqZ8kbpNHDMG9y/tsHX8mwMZBxZaAlguyXIfYTrnY/nc+6+/X/DXfA//zDCs/lNARDciW3iJCOQ== + /eslint-plugin-es/3.0.1_eslint@7.22.0: + dependencies: + eslint: 7.22.0 + eslint-utils: 2.1.0 + regexpp: 3.1.0 + dev: true + engines: + node: '>=8.10.0' + peerDependencies: + eslint: '>=4.19.1' + resolution: + integrity: sha512-GUmAsJaN4Fc7Gbtl8uOBlayo2DqhwWvEzykMHSCZHU3XdJ+NSzzZcVhXh3VxX5icqQ+oQdIEawXX8xkR3mIFmQ== + /eslint-plugin-import/2.22.1_eslint@7.22.0: + dependencies: + array-includes: 3.1.3 + array.prototype.flat: 1.2.4 + contains-path: 0.1.0 + debug: 2.6.9 + doctrine: 1.5.0 + eslint: 7.22.0 + eslint-import-resolver-node: 0.3.4 + eslint-module-utils: 2.6.0 + has: 1.0.3 + minimatch: 3.0.4 + object.values: 1.1.3 + read-pkg-up: 2.0.0 + resolve: 1.20.0 + tsconfig-paths: 3.9.0 + dev: true + engines: + node: '>=4' + peerDependencies: + eslint: ^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 + resolution: + integrity: sha512-8K7JjINHOpH64ozkAhpT3sd+FswIZTfMZTjdx052pnWrgRCVfp8op9tbjpAk3DdUeI/Ba4C8OjdC0r90erHEOw== + /eslint-plugin-json/2.1.2: + dependencies: + lodash: 4.17.21 + vscode-json-languageservice: 3.11.0 + dev: true + engines: + node: '>=8.10.0' + resolution: + integrity: sha512-isM/fsUxS4wN1+nLsWoV5T4gLgBQnsql3nMTr8u+cEls1bL8rRQO5CP5GtxJxaOfbcKqnz401styw+H/P+e78Q== + /eslint-plugin-jsx-a11y/6.4.1_eslint@7.22.0: + dependencies: + '@babel/runtime': 7.13.10 + aria-query: 4.2.2 + array-includes: 3.1.3 + ast-types-flow: 0.0.7 + axe-core: 4.1.3 + axobject-query: 2.2.0 + damerau-levenshtein: 1.0.6 + emoji-regex: 9.2.2 + eslint: 7.22.0 + has: 1.0.3 + jsx-ast-utils: 3.2.0 + language-tags: 1.0.5 + dev: true + engines: + node: '>=4.0' + peerDependencies: + eslint: ^3 || ^4 || ^5 || ^6 || ^7 + resolution: + integrity: sha512-0rGPJBbwHoGNPU73/QCLP/vveMlM1b1Z9PponxO87jfr6tuH5ligXbDT6nHSSzBC8ovX2Z+BQu7Bk5D/Xgq9zg== + /eslint-plugin-node/11.1.0_eslint@7.22.0: + dependencies: + eslint: 7.22.0 + eslint-plugin-es: 3.0.1_eslint@7.22.0 + eslint-utils: 2.1.0 + ignore: 5.1.8 + minimatch: 3.0.4 + resolve: 1.20.0 + semver: 6.3.0 + dev: true + engines: + node: '>=8.10.0' + peerDependencies: + eslint: '>=5.16.0' + resolution: + integrity: sha512-oUwtPJ1W0SKD0Tr+wqu92c5xuCeQqB3hSCHasn/ZgjFdA9iDGNkNf2Zi9ztY7X+hNuMib23LNGRm6+uN+KLE3g== + /eslint-plugin-only-warn/1.0.2: + dev: true + engines: + node: '>=6' + resolution: + integrity: sha512-DCG8vuUynDnyfkm0POT50JoE9VJfbtKf+COHn3q79+ExW4dg9ZWM/hsMWX1mjZqxMjQledL/9TmGipon/vwWmw== + /eslint-plugin-optimize-regex/1.2.0: + dependencies: + regexp-tree: 0.1.23 + dev: true + engines: + node: '>=8' + resolution: + integrity: sha512-pzpF7bGsdXVPue/ubLqS0UbBGuBajxh2fO8OmBDoN0SHrxEBKf8WOAxkOI80lBb81yiZs7hj6ZxlflbrV3YrsA== + /eslint-plugin-react-native-globals/0.1.2: + dev: true + resolution: + integrity: sha512-9aEPf1JEpiTjcFAmmyw8eiIXmcNZOqaZyHO77wgm0/dWfT/oxC1SrIq8ET38pMxHYrcB6Uew+TzUVsBeczF88g== + /eslint-plugin-react-native/3.10.0_eslint@7.22.0: + dependencies: + '@babel/traverse': 7.13.0 + eslint: 7.22.0 + eslint-plugin-react-native-globals: 0.1.2 + dev: true + peerDependencies: + eslint: ^3.17.0 || ^4 || ^5 || ^6 || ^7 + resolution: + integrity: sha512-4f5+hHYYq5wFhB5eptkPEAR7FfvqbS7AzScUOANfAMZtYw5qgnCxRq45bpfBaQF+iyPMim5Q8pubcpvLv75NAg== + /eslint-plugin-react/7.22.0_eslint@7.22.0: + dependencies: + array-includes: 3.1.3 + array.prototype.flatmap: 1.2.4 + doctrine: 2.1.0 + eslint: 7.22.0 + has: 1.0.3 + jsx-ast-utils: 3.2.0 + object.entries: 1.1.3 + object.fromentries: 2.0.4 + object.values: 1.1.3 + prop-types: 15.7.2 + resolve: 1.20.0 + string.prototype.matchall: 4.0.4 + dev: true + engines: + node: '>=4' + peerDependencies: + eslint: ^3 || ^4 || ^5 || ^6 || ^7 + resolution: + integrity: sha512-p30tuX3VS+NWv9nQot9xIGAHBXR0+xJVaZriEsHoJrASGCJZDJ8JLNM0YqKqI0AKm6Uxaa1VUHoNEibxRCMQHA== + /eslint-plugin-yaml/0.4.1: + dependencies: + js-yaml: 4.0.0 + jshint: 2.12.0 + dev: true + resolution: + integrity: sha512-KS0evlxfJVxuFqXkZINTLa1koZvzSIC9WSrzcNvoW04QjJpBp6P6YuCi0J3YAaEy31poEHcm4o30iiNTnuxCEw== + /eslint-scope/3.7.3: + dependencies: + esrecurse: 4.3.0 + estraverse: 4.3.0 + dev: true + engines: + node: '>=4.0.0' + resolution: + integrity: sha512-W+B0SvF4gamyCTmUc+uITPY0989iXVfKvhwtmJocTaYoc/3khEHmEmvfY/Gn9HA9VV75jrQECsHizkNw1b68FA== + /eslint-scope/5.1.1: + dependencies: + esrecurse: 4.3.0 + estraverse: 4.3.0 + dev: true + engines: + node: '>=8.0.0' + resolution: + integrity: sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw== + /eslint-utils/1.4.3: + dependencies: + eslint-visitor-keys: 1.3.0 + dev: true + engines: + node: '>=6' + resolution: + integrity: sha512-fbBN5W2xdY45KulGXmLHZ3c3FHfVYmKg0IrAKGOkT/464PQsx2UeIzfz1RmEci+KLm1bBaAzZAh8+/E+XAeZ8Q== + /eslint-utils/2.1.0: + dependencies: + eslint-visitor-keys: 1.3.0 + dev: true + engines: + node: '>=6' + resolution: + integrity: sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg== + /eslint-visitor-keys/1.3.0: + dev: true + engines: + node: '>=4' + resolution: + integrity: sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ== + /eslint-visitor-keys/2.0.0: + dev: true + engines: + node: '>=10' + resolution: + integrity: sha512-QudtT6av5WXels9WjIM7qz1XD1cWGvX4gGXvp/zBn9nXG02D0utdU3Em2m/QjTnrsk6bBjmCygl3rmj118msQQ== + /eslint/7.22.0: + dependencies: + '@babel/code-frame': 7.12.11 + '@eslint/eslintrc': 0.4.0 + ajv: 6.12.6 + chalk: 4.1.0 + cross-spawn: 7.0.3 + debug: 4.3.1 + doctrine: 3.0.0 + enquirer: 2.3.6 + 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.3 + file-entry-cache: 6.0.1 + functional-red-black-tree: 1.0.1 + glob-parent: 5.1.1 + globals: 13.7.0 + ignore: 4.0.6 + import-fresh: 3.3.0 + imurmurhash: 0.1.4 + is-glob: 4.0.1 + js-yaml: 3.14.1 + json-stable-stringify-without-jsonify: 1.0.1 + levn: 0.4.1 + lodash: 4.17.21 + minimatch: 3.0.4 + natural-compare: 1.4.0 + optionator: 0.9.1 + progress: 2.0.3 + regexpp: 3.1.0 + semver: 7.3.4 + strip-ansi: 6.0.0 + strip-json-comments: 3.1.1 + table: 6.0.7 + text-table: 0.2.0 + v8-compile-cache: 2.2.0 + dev: true + engines: + node: ^10.12.0 || >=12.0.0 + hasBin: true + resolution: + integrity: sha512-3VawOtjSJUQiiqac8MQc+w457iGLfuNGLFn8JmF051tTKbh5/x/0vlcEj8OgDCaw7Ysa2Jn8paGshV7x2abKXg== + /espree/7.3.1: + dependencies: + acorn: 7.4.1 + acorn-jsx: 5.3.1_acorn@7.4.1 + eslint-visitor-keys: 1.3.0 + dev: true + engines: + node: ^10.12.0 || >=12.0.0 + resolution: + integrity: sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g== + /esprima/4.0.1: + dev: true + engines: + node: '>=4' + hasBin: true + resolution: + integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== + /esquery/1.4.0: + dependencies: + estraverse: 5.2.0 + dev: true + engines: + node: '>=0.10' + resolution: + integrity: sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w== + /esrecurse/4.3.0: + dependencies: + estraverse: 5.2.0 + dev: true + engines: + node: '>=4.0' + resolution: + integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== + /estraverse/4.3.0: + dev: true + engines: + node: '>=4.0' + resolution: + integrity: sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== + /estraverse/5.2.0: + dev: true + engines: + node: '>=4.0' + resolution: + integrity: sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ== + /esutils/2.0.3: + engines: + node: '>=0.10.0' + resolution: + integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== + /exit/0.1.2: + dev: true + engines: + node: '>= 0.8.0' + resolution: + integrity: sha1-BjJjj42HfMghB9MKD/8aF8uhzQw= + /expand-brackets/2.1.4: + dependencies: + debug: 2.6.9 + define-property: 0.2.5 + extend-shallow: 2.0.1 + posix-character-classes: 0.1.1 + regex-not: 1.0.2 + snapdragon: 0.8.2 + to-regex: 3.0.2 + dev: false + engines: + node: '>=0.10.0' + optional: true + resolution: + integrity: sha1-t3c14xXOMPa27/D4OwQVGiJEliI= + /ext/1.4.0: + dependencies: + type: 2.1.0 + dev: false + resolution: + integrity: sha512-Key5NIsUxdqKg3vIsdw9dSuXpPCQ297y6wBjL30edxwPgt2E44WcWBZey/ZvUc6sERLTxKdyCu4gZFmUbk1Q7A== + /extend-shallow/2.0.1: + dependencies: + is-extendable: 0.1.1 + dev: false + engines: + node: '>=0.10.0' + optional: true + resolution: + integrity: sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8= + /extend-shallow/3.0.2: + dependencies: + assign-symbols: 1.0.0 + is-extendable: 1.0.1 + dev: false + engines: + node: '>=0.10.0' + optional: true + resolution: + integrity: sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg= + /extglob/2.0.4: + dependencies: + array-unique: 0.3.2 + define-property: 1.0.0 + expand-brackets: 2.1.4 + extend-shallow: 2.0.1 + fragment-cache: 0.2.1 + regex-not: 1.0.2 + snapdragon: 0.8.2 + to-regex: 3.0.2 + dev: false + engines: + node: '>=0.10.0' + optional: true + resolution: + integrity: sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw== + /fast-deep-equal/3.1.3: + dev: true + resolution: + integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== + /fast-glob/3.2.5: + dependencies: + '@nodelib/fs.stat': 2.0.4 + '@nodelib/fs.walk': 1.2.6 + glob-parent: 5.1.2 + merge2: 1.4.1 + micromatch: 4.0.2 + picomatch: 2.2.2 + dev: true + engines: + node: '>=8' + resolution: + integrity: sha512-2DtFcgT68wiTTiwZ2hNdJfcHNke9XOfnwmBRWXhmeKM8rF0TGwmC/Qto3S7RoZKp5cilZbxzO5iTNTQsJ+EeDg== + /fast-json-stable-stringify/2.1.0: + dev: true + resolution: + integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== + /fast-levenshtein/2.0.6: + dev: true + resolution: + integrity: sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc= + /fastq/1.11.0: + dependencies: + reusify: 1.0.4 + dev: true + resolution: + integrity: sha512-7Eczs8gIPDrVzT+EksYBcupqMyxSHXXrHOLRRxU2/DicV8789MRBRR8+Hc2uWzUupOs4YS4JzBmBxjjCVBxD/g== + /file-entry-cache/6.0.1: + dependencies: + flat-cache: 3.0.4 + dev: true + engines: + node: ^10.12.0 || >=12.0.0 + resolution: + integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg== + /fill-range/4.0.0: + dependencies: + extend-shallow: 2.0.1 + is-number: 3.0.0 + repeat-string: 1.6.1 + to-regex-range: 2.1.1 + dev: false + engines: + node: '>=0.10.0' + optional: true + resolution: + integrity: sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc= + /fill-range/7.0.1: + dependencies: + to-regex-range: 5.0.1 + engines: + node: '>=8' + resolution: + integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== + /find-up/2.1.0: + dependencies: + locate-path: 2.0.0 + dev: true + engines: + node: '>=4' + resolution: + integrity: sha1-RdG35QbHF93UgndaK3eSCjwMV6c= + /flat-cache/3.0.4: + dependencies: + flatted: 3.1.1 + rimraf: 3.0.2 + dev: true + engines: + node: ^10.12.0 || >=12.0.0 + resolution: + integrity: sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg== + /flatted/3.1.1: + dev: true + resolution: + integrity: sha512-zAoAQiudy+r5SvnSw3KJy5os/oRJYHzrzja/tBDqrZtNhUw8bt6y8OBzMWcjWr+8liV8Eb6yOhw8WZ7VFZ5ZzA== + /for-in/1.0.2: + dev: false + engines: + node: '>=0.10.0' + optional: true + resolution: + integrity: sha1-gQaNKVqBQuwKxybG4iAMMPttXoA= + /fragment-cache/0.2.1: + dependencies: + map-cache: 0.2.2 + dev: false + engines: + node: '>=0.10.0' + optional: true + resolution: + integrity: sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk= + /fs-extra/9.1.0: + dependencies: + at-least-node: 1.0.0 + graceful-fs: 4.2.5 + jsonfile: 6.1.0 + universalify: 2.0.0 + dev: false + engines: + node: '>=10' + resolution: + integrity: sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ== + /fs-readdir-recursive/1.1.0: + dev: false + resolution: + integrity: sha512-GNanXlVr2pf02+sPN40XN8HG+ePaNcvM0q5mZBd668Obwb0yD5GiUbZOFgwn8kGMY6I3mdyDJzieUy3PTYyTRA== + /fs.realpath/1.0.0: + resolution: + integrity: sha1-FQStJSMVjKpA20onh8sBQRmU6k8= + /fsevents/2.3.2: + dev: false + engines: + node: ^8.16.0 || ^10.6.0 || >=11.0.0 + optional: true + os: + - darwin + resolution: + integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== + /function-bind/1.1.1: + resolution: + integrity: sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== + /functional-red-black-tree/1.0.1: + dev: true + resolution: + integrity: sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc= + /fuzzaldrin/2.1.0: + dev: false + resolution: + integrity: sha1-kCBMPi/appQbso0WZF1BgGOpDps= + /gensync/1.0.0-beta.2: + engines: + node: '>=6.9.0' + resolution: + integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg== + /get-intrinsic/1.1.1: + dependencies: + function-bind: 1.1.1 + has: 1.0.3 + has-symbols: 1.0.2 + resolution: + integrity: sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q== + /get-value/2.0.6: + dev: false + engines: + node: '>=0.10.0' + optional: true + resolution: + integrity: sha1-3BXKHGcjh8p2vTesCjlbogQqLCg= + /glob-parent/3.1.0: + dependencies: + is-glob: 3.1.0 + path-dirname: 1.0.2 + dev: false + optional: true + resolution: + integrity: sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4= + /glob-parent/5.1.1: + dependencies: + is-glob: 4.0.1 + engines: + node: '>= 6' + resolution: + integrity: sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ== + /glob-parent/5.1.2: + dependencies: + is-glob: 4.0.1 + dev: true + engines: + node: '>= 6' + resolution: + integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== + /glob/7.1.6: + dependencies: + fs.realpath: 1.0.0 + inflight: 1.0.6 + inherits: 2.0.4 + minimatch: 3.0.4 + once: 1.4.0 + path-is-absolute: 1.0.1 + resolution: + integrity: sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA== + /globals/11.12.0: + engines: + node: '>=4' + resolution: + integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== + /globals/12.4.0: + dependencies: + type-fest: 0.8.1 + dev: true + engines: + node: '>=8' + resolution: + integrity: sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg== + /globals/13.7.0: + dependencies: + type-fest: 0.20.2 + dev: true + engines: + node: '>=8' + resolution: + integrity: sha512-Aipsz6ZKRxa/xQkZhNg0qIWXT6x6rD46f6x/PCnBomlttdIyAPak4YD9jTmKpZ72uROSMU87qJtcgpgHaVchiA== + /globals/9.18.0: + dev: true + engines: + node: '>=0.10.0' + resolution: + integrity: sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ== + /globby/11.0.2: + dependencies: + array-union: 2.1.0 + dir-glob: 3.0.1 + fast-glob: 3.2.5 + ignore: 5.1.8 + merge2: 1.4.1 + slash: 3.0.0 + dev: true + engines: + node: '>=10' + resolution: + integrity: sha512-2ZThXDvvV8fYFRVIxnrMQBipZQDr7MxKAmQK1vujaj9/7eF0efG7BPUKJ7jP7G5SLF37xKDXvO4S/KKLj/Z0og== + /graceful-fs/4.2.5: + resolution: + integrity: sha512-kBBSQbz2K0Nyn+31j/w36fUfxkBW9/gfwRWdUY1ULReH3iokVJgddZAFcD1D0xlgTmFxJCbUkUclAlc6/IDJkw== + /graceful-fs/4.2.6: + dev: true + resolution: + integrity: sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ== + /grim/1.5.0: + dependencies: + emissary: 1.3.3 + dev: false + resolution: + integrity: sha1-sysI71Z88YUvgXWe2caLDXE5ajI= + /has-ansi/2.0.0: + dependencies: + ansi-regex: 2.1.1 + dev: true + engines: + node: '>=0.10.0' + resolution: + integrity: sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE= + /has-bigints/1.0.1: + dev: true + resolution: + integrity: sha512-LSBS2LjbNBTf6287JEbEzvJgftkF5qFkmCo9hDRpAzKhUOlJ+hx8dd4USs00SgsUNwc4617J9ki5YtEClM2ffA== + /has-flag/3.0.0: + engines: + node: '>=4' + resolution: + integrity: sha1-tdRU3CGZriJWmfNGfloH87lVuv0= + /has-flag/4.0.0: + dev: true + engines: + node: '>=8' + resolution: + integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== + /has-symbols/1.0.2: + engines: + node: '>= 0.4' + resolution: + integrity: sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw== + /has-value/0.3.1: + dependencies: + get-value: 2.0.6 + has-values: 0.1.4 + isobject: 2.1.0 + dev: false + engines: + node: '>=0.10.0' + optional: true + resolution: + integrity: sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8= + /has-value/1.0.0: + dependencies: + get-value: 2.0.6 + has-values: 1.0.0 + isobject: 3.0.1 + dev: false + engines: + node: '>=0.10.0' + optional: true + resolution: + integrity: sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc= + /has-values/0.1.4: + dev: false + engines: + node: '>=0.10.0' + optional: true + resolution: + integrity: sha1-bWHeldkd/Km5oCCJrThL/49it3E= + /has-values/1.0.0: + dependencies: + is-number: 3.0.0 + kind-of: 4.0.0 + dev: false + engines: + node: '>=0.10.0' + optional: true + resolution: + integrity: sha1-lbC2P+whRmGab+V/51Yo1aOe/k8= + /has/1.0.3: + dependencies: + function-bind: 1.1.1 + engines: + node: '>= 0.4.0' + resolution: + integrity: sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== + /hosted-git-info/2.8.8: + dev: true + resolution: + integrity: sha512-f/wzC2QaWBs7t9IYqB4T3sR1xviIViXJRJTWBlx2Gf3g0Xi5vI7Yy4koXQ1c9OYDGHN9sBy1DQ2AB8fqZBWhUg== + /htmlparser2/3.8.3: + dependencies: + domelementtype: 1.3.1 + domhandler: 2.3.0 + domutils: 1.5.1 + entities: 1.0.0 + readable-stream: 1.1.14 + dev: true + resolution: + integrity: sha1-mWwosZFRaovoZQGn15dX5ccMEGg= + /ignore/4.0.6: + dev: true + engines: + node: '>= 4' + resolution: + integrity: sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg== + /ignore/5.1.8: + dev: true + engines: + node: '>= 4' + resolution: + integrity: sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw== + /import-fresh/3.3.0: + dependencies: + parent-module: 1.0.1 + resolve-from: 4.0.0 + dev: true + engines: + node: '>=6' + resolution: + integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw== + /imurmurhash/0.1.4: + dev: true + engines: + node: '>=0.8.19' + resolution: + integrity: sha1-khi5srkoojixPcT7a21XbyMUU+o= + /indent-string/4.0.0: + dev: true + engines: + node: '>=8' + resolution: + integrity: sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg== + /inflight/1.0.6: + dependencies: + once: 1.4.0 + wrappy: 1.0.2 + resolution: + integrity: sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= + /inherits/2.0.4: + resolution: + integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== + /internal-slot/1.0.3: + dependencies: + get-intrinsic: 1.1.1 + has: 1.0.3 + side-channel: 1.0.4 + dev: true + engines: + node: '>= 0.4' + resolution: + integrity: sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA== + /invariant/2.2.4: + dependencies: + loose-envify: 1.4.0 + dev: true + resolution: + integrity: sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA== + /is-accessor-descriptor/0.1.6: + dependencies: + kind-of: 3.2.2 + dev: false + engines: + node: '>=0.10.0' + optional: true + resolution: + integrity: sha1-qeEss66Nh2cn7u84Q/igiXtcmNY= + /is-accessor-descriptor/1.0.0: + dependencies: + kind-of: 6.0.3 + dev: false + engines: + node: '>=0.10.0' + optional: true + resolution: + integrity: sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ== + /is-arrayish/0.2.1: + dev: true + resolution: + integrity: sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0= + /is-bigint/1.0.1: + dev: true + resolution: + integrity: sha512-J0ELF4yHFxHy0cmSxZuheDOz2luOdVvqjwmEcj8H/L1JHeuEDSDbeRP+Dk9kFVk5RTFzbucJ2Kb9F7ixY2QaCg== + /is-binary-path/1.0.1: + dependencies: + binary-extensions: 1.13.1 + dev: false + engines: + node: '>=0.10.0' + optional: true + resolution: + integrity: sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg= + /is-binary-path/2.1.0: + dependencies: + binary-extensions: 2.2.0 + dev: false + engines: + node: '>=8' + optional: true + resolution: + integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== + /is-boolean-object/1.1.0: + dependencies: + call-bind: 1.0.2 + dev: true + engines: + node: '>= 0.4' + resolution: + integrity: sha512-a7Uprx8UtD+HWdyYwnD1+ExtTgqQtD2k/1yJgtXP6wnMm8byhkoTZRl+95LLThpzNZJ5aEvi46cdH+ayMFRwmA== + /is-buffer/1.1.6: + dev: false + optional: true + resolution: + integrity: sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w== + /is-callable/1.2.3: + dev: true + engines: + node: '>= 0.4' + resolution: + integrity: sha512-J1DcMe8UYTBSrKezuIUTUwjXsho29693unXM2YhJUTR2txK/eG47bvNa/wipPFmZFgr/N6f1GA66dv0mEyTIyQ== + /is-core-module/2.2.0: + dependencies: + has: 1.0.3 + resolution: + integrity: sha512-XRAfAdyyY5F5cOXn7hYQDqh2Xmii+DEfIcQGxK/uNwMHhIkPWO0g8msXcbzLe+MpGoR951MlqM/2iIlU4vKDdQ== + /is-data-descriptor/0.1.4: + dependencies: + kind-of: 3.2.2 + dev: false + engines: + node: '>=0.10.0' + optional: true + resolution: + integrity: sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y= + /is-data-descriptor/1.0.0: + dependencies: + kind-of: 6.0.3 + dev: false + engines: + node: '>=0.10.0' + optional: true + resolution: + integrity: sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ== + /is-date-object/1.0.2: + dev: true + engines: + node: '>= 0.4' + resolution: + integrity: sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g== + /is-descriptor/0.1.6: + dependencies: + is-accessor-descriptor: 0.1.6 + is-data-descriptor: 0.1.4 + kind-of: 5.1.0 + dev: false + engines: + node: '>=0.10.0' + optional: true + resolution: + integrity: sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg== + /is-descriptor/1.0.2: + dependencies: + is-accessor-descriptor: 1.0.0 + is-data-descriptor: 1.0.0 + kind-of: 6.0.3 + dev: false + engines: + node: '>=0.10.0' + optional: true + resolution: + integrity: sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg== + /is-extendable/0.1.1: + dev: false + engines: + node: '>=0.10.0' + optional: true + resolution: + integrity: sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik= + /is-extendable/1.0.1: + dependencies: + is-plain-object: 2.0.4 + dev: false + engines: + node: '>=0.10.0' + optional: true + resolution: + integrity: sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA== + /is-extglob/2.1.1: + engines: + node: '>=0.10.0' + resolution: + integrity: sha1-qIwCU1eR8C7TfHahueqXc8gz+MI= + /is-fullwidth-code-point/3.0.0: + dev: true + engines: + node: '>=8' + resolution: + integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== + /is-glob/3.1.0: + dependencies: + is-extglob: 2.1.1 + dev: false + engines: + node: '>=0.10.0' + optional: true + resolution: + integrity: sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo= + /is-glob/4.0.1: + dependencies: + is-extglob: 2.1.1 + engines: + node: '>=0.10.0' + resolution: + integrity: sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg== + /is-negative-zero/2.0.1: + dev: true + engines: + node: '>= 0.4' + resolution: + integrity: sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w== + /is-number-object/1.0.4: + dev: true + engines: + node: '>= 0.4' + resolution: + integrity: sha512-zohwelOAur+5uXtk8O3GPQ1eAcu4ZX3UwxQhUlfFFMNpUd83gXgjbhJh6HmB6LUNV/ieOLQuDwJO3dWJosUeMw== + /is-number/3.0.0: + dependencies: + kind-of: 3.2.2 + dev: false + engines: + node: '>=0.10.0' + optional: true + resolution: + integrity: sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU= + /is-number/7.0.0: + engines: + node: '>=0.12.0' + resolution: + integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== + /is-path-cwd/2.2.0: + dev: true + engines: + node: '>=6' + resolution: + integrity: sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ== + /is-path-inside/3.0.2: + dev: true + engines: + node: '>=8' + resolution: + integrity: sha512-/2UGPSgmtqwo1ktx8NDHjuPwZWmHhO+gj0f93EkhLB5RgW9RZevWYYlIkS6zePc6U2WpOdQYIwHe9YC4DWEBVg== + /is-plain-object/2.0.4: + dependencies: + isobject: 3.0.1 + dev: false + engines: + node: '>=0.10.0' + optional: true + resolution: + integrity: sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og== + /is-regex/1.1.2: + dependencies: + call-bind: 1.0.2 + has-symbols: 1.0.2 + dev: true + engines: + node: '>= 0.4' + resolution: + integrity: sha512-axvdhb5pdhEVThqJzYXwMlVuZwC+FF2DpcOhTS+y/8jVq4trxyPgfcwIxIKiyeuLlSQYKkmUaPQJ8ZE4yNKXDg== + /is-stream/2.0.0: + dev: true + engines: + node: '>=8' + resolution: + integrity: sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw== + /is-string/1.0.5: + dev: true + engines: + node: '>= 0.4' + resolution: + integrity: sha512-buY6VNRjhQMiF1qWDouloZlQbRhDPCebwxSjxMjxgemYT46YMd2NR0/H+fBhEfWX4A/w9TBJ+ol+okqJKFE6vQ== + /is-symbol/1.0.3: + dependencies: + has-symbols: 1.0.2 + dev: true + engines: + node: '>= 0.4' + resolution: + integrity: sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ== + /is-windows/1.0.2: + dev: false + engines: + node: '>=0.10.0' + optional: true + resolution: + integrity: sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA== + /isarray/0.0.1: + dev: true + resolution: + integrity: sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8= + /isarray/1.0.0: + resolution: + integrity: sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE= + /isexe/2.0.0: + dev: true + resolution: + integrity: sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= + /isobject/2.1.0: + dependencies: + isarray: 1.0.0 + dev: false + engines: + node: '>=0.10.0' + optional: true + resolution: + integrity: sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk= + /isobject/3.0.1: + dev: false + engines: + node: '>=0.10.0' + optional: true + resolution: + integrity: sha1-TkMekrEalzFjaqH5yNHMvP2reN8= + /jquery/2.1.4: + dev: false + resolution: + integrity: sha1-IoveaYoMYUMdwmMKahVPFYkNIxc= + /jquery/3.5.1: + dev: false + resolution: + integrity: sha512-XwIBPqcMn57FxfT+Go5pzySnm4KWkT1Tv7gjrpT1srtf8Weynl6R273VJ5GjkRb51IzMp5nbaPjJXMWeju2MKg== + /js-tokens/3.0.2: + dev: true + resolution: + integrity: sha1-mGbfOVECEw449/mWvOtlRDIJwls= + /js-tokens/4.0.0: + resolution: + integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== + /js-yaml/3.14.1: + dependencies: + argparse: 1.0.10 + esprima: 4.0.1 + dev: true + hasBin: true + resolution: + integrity: sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g== + /js-yaml/4.0.0: + dependencies: + argparse: 2.0.1 + dev: true + hasBin: true + resolution: + integrity: sha512-pqon0s+4ScYUvX30wxQi3PogGFAlUyH0awepWvwkj4jD4v+ova3RiYw8bmA6x2rDrEaj8i/oWKoRxpVNW+Re8Q== + /jsesc/0.5.0: + dev: false + hasBin: true + resolution: + integrity: sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0= + /jsesc/2.5.2: + engines: + node: '>=4' + hasBin: true + resolution: + integrity: sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA== + /jshint/2.12.0: + dependencies: + cli: 1.0.1 + console-browserify: 1.1.0 + exit: 0.1.2 + htmlparser2: 3.8.3 + lodash: 4.17.21 + minimatch: 3.0.4 + shelljs: 0.3.0 + strip-json-comments: 1.0.4 + dev: true + hasBin: true + resolution: + integrity: sha512-TwuuaUDmra0JMkuqvqy+WGo2xGHSNjv1BA1nTIgtH2K5z1jHuAEeAgp7laaR+hLRmajRjcrM71+vByBDanCyYA== + /json-schema-traverse/0.4.1: + dev: true + resolution: + integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== + /json-schema-traverse/1.0.0: + dev: true + resolution: + integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug== + /json-stable-stringify-without-jsonify/1.0.1: + dev: true + resolution: + integrity: sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE= + /json5/1.0.1: + dependencies: + minimist: 1.2.5 + dev: true + hasBin: true + resolution: + integrity: sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow== + /json5/2.2.0: + dependencies: + minimist: 1.2.5 + engines: + node: '>=6' + hasBin: true + resolution: + integrity: sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA== + /jsonc-parser/3.0.0: + dev: true + resolution: + integrity: sha512-fQzRfAbIBnR0IQvftw9FJveWiHp72Fg20giDrHz6TdfB12UH/uue0D3hm57UB5KgAVuniLMCaS8P1IMj9NR7cA== + /jsonfile/6.1.0: + dependencies: + universalify: 2.0.0 + dev: false + optionalDependencies: + graceful-fs: 4.2.5 + resolution: + integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ== + /jsx-ast-utils/2.4.1: + dependencies: + array-includes: 3.1.3 + object.assign: 4.1.2 + dev: true + engines: + node: '>=4.0' + resolution: + integrity: sha512-z1xSldJ6imESSzOjd3NNkieVJKRlKYSOtMG8SFyCj2FIrvSaSuli/WjpBkEzCBoR9bYYYFgqJw61Xhu7Lcgk+w== + /jsx-ast-utils/3.2.0: + dependencies: + array-includes: 3.1.3 + object.assign: 4.1.2 + dev: true + engines: + node: '>=4.0' + resolution: + integrity: sha512-EIsmt3O3ljsU6sot/J4E1zDRxfBNrhjyf/OKjlydwgEimQuznlM4Wv7U+ueONJMyEn1WRE0K8dhi3dVAXYT24Q== + /kind-of/3.2.2: + dependencies: + is-buffer: 1.1.6 + dev: false + engines: + node: '>=0.10.0' + optional: true + resolution: + integrity: sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ= + /kind-of/4.0.0: + dependencies: + is-buffer: 1.1.6 + dev: false + engines: + node: '>=0.10.0' + optional: true + resolution: + integrity: sha1-IIE989cSkosgc3hpGkUGb65y3Vc= + /kind-of/5.1.0: + dev: false + engines: + node: '>=0.10.0' + optional: true + resolution: + integrity: sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw== + /kind-of/6.0.3: + dev: false + engines: + node: '>=0.10.0' + optional: true + resolution: + integrity: sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw== + /language-subtag-registry/0.3.21: + dev: true + resolution: + integrity: sha512-L0IqwlIXjilBVVYKFT37X9Ih11Um5NEl9cbJIuU/SwP/zEEAbBPOnEeeuxVMf45ydWQRDQN3Nqc96OgbH1K+Pg== + /language-tags/1.0.5: + dependencies: + language-subtag-registry: 0.3.21 + dev: true + resolution: + integrity: sha1-0yHbxNowuovzAk4ED6XBRmH5GTo= + /levn/0.4.1: + dependencies: + prelude-ls: 1.2.1 + type-check: 0.4.0 + dev: true + engines: + node: '>= 0.8.0' + resolution: + integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ== + /load-json-file/2.0.0: + dependencies: + graceful-fs: 4.2.6 + parse-json: 2.2.0 + pify: 2.3.0 + strip-bom: 3.0.0 + dev: true + engines: + node: '>=4' + resolution: + integrity: sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg= + /locate-path/2.0.0: + dependencies: + p-locate: 2.0.0 + path-exists: 3.0.0 + dev: true + engines: + node: '>=4' + resolution: + integrity: sha1-K1aLJl7slExtnA3pw9u7ygNUzY4= + /lodash.debounce/4.0.8: + dev: false + resolution: + integrity: sha1-gteb/zCmfEAF/9XiUVMArZyk168= + /lodash/4.17.20: + resolution: + integrity: sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA== + /lodash/4.17.21: + dev: true + resolution: + integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== + /loose-envify/1.4.0: + dependencies: + js-tokens: 4.0.0 + dev: true + hasBin: true + resolution: + integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q== + /lru-cache/6.0.0: + dependencies: + yallist: 4.0.0 + dev: true + engines: + node: '>=10' + resolution: + integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== + /make-dir/2.1.0: + dependencies: + pify: 4.0.1 + semver: 5.7.1 + dev: false + engines: + node: '>=6' + resolution: + integrity: sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA== + /map-cache/0.2.2: + dev: false + engines: + node: '>=0.10.0' + optional: true + resolution: + integrity: sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8= + /map-visit/1.0.0: + dependencies: + object-visit: 1.0.1 + dev: false + engines: + node: '>=0.10.0' + optional: true + resolution: + integrity: sha1-7Nyo8TFE5mDxtb1B8S80edmN+48= + /merge2/1.4.1: + dev: true + engines: + node: '>= 8' + resolution: + integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== + /micromatch/3.1.10: + dependencies: + arr-diff: 4.0.0 + array-unique: 0.3.2 + braces: 2.3.2 + define-property: 2.0.2 + extend-shallow: 3.0.2 + extglob: 2.0.4 + fragment-cache: 0.2.1 + kind-of: 6.0.3 + nanomatch: 1.2.13 + object.pick: 1.3.0 + regex-not: 1.0.2 + snapdragon: 0.8.2 + to-regex: 3.0.2 + dev: false + engines: + node: '>=0.10.0' + optional: true + resolution: + integrity: sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg== + /micromatch/4.0.2: + dependencies: + braces: 3.0.2 + picomatch: 2.2.2 + dev: true + engines: + node: '>=8' + resolution: + integrity: sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q== + /minimatch/3.0.4: + dependencies: + brace-expansion: 1.1.11 + resolution: + integrity: sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== + /minimist/1.2.5: + resolution: + integrity: sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw== + /mixin-deep/1.3.2: + dependencies: + for-in: 1.0.2 + is-extendable: 1.0.1 + dev: false + engines: + node: '>=0.10.0' + optional: true + resolution: + integrity: sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA== + /mixto/1.0.0: + dev: false + resolution: + integrity: sha1-wyDvYbUvKJj1IuF9i7xtUG2EJbY= + /ms/2.0.0: + resolution: + integrity: sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g= + /ms/2.1.2: + resolution: + integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== + /nanomatch/1.2.13: + dependencies: + arr-diff: 4.0.0 + array-unique: 0.3.2 + define-property: 2.0.2 + extend-shallow: 3.0.2 + fragment-cache: 0.2.1 + is-windows: 1.0.2 + kind-of: 6.0.3 + object.pick: 1.3.0 + regex-not: 1.0.2 + snapdragon: 0.8.2 + to-regex: 3.0.2 + dev: false + engines: + node: '>=0.10.0' + optional: true + resolution: + integrity: sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA== + /natural-compare/1.4.0: + dev: true + resolution: + integrity: sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc= + /next-tick/1.0.0: + dev: false + resolution: + integrity: sha1-yobR/ogoFpsBICCOPchCS524NCw= + /node-releases/1.1.70: + resolution: + integrity: sha512-Slf2s69+2/uAD79pVVQo8uSiC34+g8GWY8UH2Qtqv34ZfhYrxpYpfzs9Js9d6O0mbDmALuxaTlplnBTnSELcrw== + /normalize-package-data/2.5.0: + dependencies: + hosted-git-info: 2.8.8 + resolve: 1.20.0 + semver: 5.7.1 + validate-npm-package-license: 3.0.4 + dev: true + resolution: + integrity: sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA== + /normalize-path/2.1.1: + dependencies: + remove-trailing-separator: 1.1.0 + dev: false + engines: + node: '>=0.10.0' + optional: true + resolution: + integrity: sha1-GrKLVW4Zg2Oowab35vogE3/mrtk= + /normalize-path/3.0.0: + dev: false + engines: + node: '>=0.10.0' + optional: true + resolution: + integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== + /object-assign/4.1.1: + dev: true + engines: + node: '>=0.10.0' + resolution: + integrity: sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM= + /object-copy/0.1.0: + dependencies: + copy-descriptor: 0.1.1 + define-property: 0.2.5 + kind-of: 3.2.2 + dev: false + engines: + node: '>=0.10.0' + optional: true + resolution: + integrity: sha1-fn2Fi3gb18mRpBupde04EnVOmYw= + /object-inspect/1.9.0: + dev: true + resolution: + integrity: sha512-i3Bp9iTqwhaLZBxGkRfo5ZbE07BQRT7MGu8+nNgwW9ItGp1TzCTw2DLEoWwjClxBjOFI/hWljTAmYGCEwmtnOw== + /object-keys/1.1.1: + engines: + node: '>= 0.4' + resolution: + integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== + /object-visit/1.0.1: + dependencies: + isobject: 3.0.1 + dev: false + engines: + node: '>=0.10.0' + optional: true + resolution: + integrity: sha1-95xEk68MU3e1n+OdOV5BBC3QRbs= + /object.assign/4.1.2: + dependencies: + call-bind: 1.0.2 + define-properties: 1.1.3 + has-symbols: 1.0.2 + object-keys: 1.1.1 + engines: + node: '>= 0.4' + resolution: + integrity: sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ== + /object.entries/1.1.3: + dependencies: + call-bind: 1.0.2 + define-properties: 1.1.3 + es-abstract: 1.18.0 + has: 1.0.3 + dev: true + engines: + node: '>= 0.4' + resolution: + integrity: sha512-ym7h7OZebNS96hn5IJeyUmaWhaSM4SVtAPPfNLQEI2MYWCO2egsITb9nab2+i/Pwibx+R0mtn+ltKJXRSeTMGg== + /object.fromentries/2.0.4: + dependencies: + call-bind: 1.0.2 + define-properties: 1.1.3 + es-abstract: 1.18.0 + has: 1.0.3 + dev: true + engines: + node: '>= 0.4' + resolution: + integrity: sha512-EsFBshs5RUUpQEY1D4q/m59kMfz4YJvxuNCJcv/jWwOJr34EaVnG11ZrZa0UHB3wnzV1wx8m58T4hQL8IuNXlQ== + /object.pick/1.3.0: + dependencies: + isobject: 3.0.1 + dev: false + engines: + node: '>=0.10.0' + optional: true + resolution: + integrity: sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c= + /object.values/1.1.3: + dependencies: + call-bind: 1.0.2 + define-properties: 1.1.3 + es-abstract: 1.18.0 + has: 1.0.3 + dev: true + engines: + node: '>= 0.4' + resolution: + integrity: sha512-nkF6PfDB9alkOUxpf1HNm/QlkeW3SReqL5WXeBLpEJJnlPSvRaDQpW3gQTksTN3fgJX4hL42RzKyOin6ff3tyw== + /once/1.4.0: + dependencies: + wrappy: 1.0.2 + resolution: + integrity: sha1-WDsap3WWHUsROsF9nFC6753Xa9E= + /optionator/0.9.1: + dependencies: + 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 + dev: true + engines: + node: '>= 0.8.0' + resolution: + integrity: sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw== + /p-limit/1.3.0: + dependencies: + p-try: 1.0.0 + dev: true + engines: + node: '>=4' + resolution: + integrity: sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q== + /p-locate/2.0.0: + dependencies: + p-limit: 1.3.0 + dev: true + engines: + node: '>=4' + resolution: + integrity: sha1-IKAQOyIqcMj9OcwuWAaA893l7EM= + /p-map/4.0.0: + dependencies: + aggregate-error: 3.1.0 + dev: true + engines: + node: '>=10' + resolution: + integrity: sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ== + /p-try/1.0.0: + dev: true + engines: + node: '>=4' + resolution: + integrity: sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M= + /parent-module/1.0.1: + dependencies: + callsites: 3.1.0 + dev: true + engines: + node: '>=6' + resolution: + integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g== + /parse-json/2.2.0: + dependencies: + error-ex: 1.3.2 + dev: true + engines: + node: '>=0.10.0' + resolution: + integrity: sha1-9ID0BDTvgHQfhGkJn43qGPVaTck= + /pascalcase/0.1.1: + dev: false + engines: + node: '>=0.10.0' + optional: true + resolution: + integrity: sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ= + /path-dirname/1.0.2: + dev: false + optional: true + resolution: + integrity: sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA= + /path-exists/3.0.0: + dev: true + engines: + node: '>=4' + resolution: + integrity: sha1-zg6+ql94yxiSXqfYENe1mwEP1RU= + /path-is-absolute/1.0.1: + engines: + node: '>=0.10.0' + resolution: + integrity: sha1-F0uSaHNVNP+8es5r9TpanhtcX18= + /path-key/3.1.1: + dev: true + engines: + node: '>=8' + resolution: + integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== + /path-parse/1.0.6: + resolution: + integrity: sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw== + /path-type/2.0.0: + dependencies: + pify: 2.3.0 + dev: true + engines: + node: '>=4' + resolution: + integrity: sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM= + /path-type/4.0.0: + dev: true + engines: + node: '>=8' + resolution: + integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== + /picomatch/2.2.2: + engines: + node: '>=8.6' + resolution: + integrity: sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg== + /pify/2.3.0: + dev: true + engines: + node: '>=0.10.0' + resolution: + integrity: sha1-7RQaasBDqEnqWISY59yosVMw6Qw= + /pify/4.0.1: + dev: false + engines: + node: '>=6' + resolution: + integrity: sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g== + /pkg-dir/2.0.0: + dependencies: + find-up: 2.1.0 + dev: true + engines: + node: '>=4' + resolution: + integrity: sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s= + /posix-character-classes/0.1.1: + dev: false + engines: + node: '>=0.10.0' + optional: true + resolution: + integrity: sha1-AerA/jta9xoqbAL+q7jB/vfgDqs= + /prelude-ls/1.2.1: + dev: true + engines: + node: '>= 0.8.0' + resolution: + integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== + /prettier-config-atomic/1.0.1: + dependencies: + prettier: 2.2.1 + dev: true + resolution: + integrity: sha512-bNW8oMkuuVZI0OXEwwfbGGpdh1Jv4QfOzSMnmueBkSCYcCAnA9iHy+wRVsAeVRZPfB1hjqB9UtxGTnrflITtyg== + /prettier/2.2.1: + dev: true + engines: + node: '>=10.13.0' + hasBin: true + resolution: + integrity: sha512-PqyhM2yCjg/oKkFPtTGUojv7gnZAoG80ttl45O6x2Ug/rMJw4wcc9k6aaf2hibP7BGVCCM33gZoGjyvt9mm16Q== + /process-nextick-args/2.0.1: + dev: false + optional: true + resolution: + integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== + /progress/2.0.3: + dev: true + engines: + node: '>=0.4.0' + resolution: + integrity: sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA== + /prop-types/15.7.2: + dependencies: + loose-envify: 1.4.0 + object-assign: 4.1.1 + react-is: 16.13.1 + dev: true + resolution: + integrity: sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ== + /property-accessors/1.1.3: + dependencies: + es6-weak-map: 0.1.4 + mixto: 1.0.0 + dev: false + resolution: + integrity: sha1-Hd6EAkYxhlkJ7zBwM2VoDF+SixU= + /punycode/2.1.1: + dev: true + engines: + node: '>=6' + resolution: + integrity: sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== + /queue-microtask/1.2.2: + dev: true + resolution: + integrity: sha512-dB15eXv3p2jDlbOiNLyMabYg1/sXvppd8DP2J3EOCQ0AkuSXCW2tP7mnVouVLJKgUMY6yP0kcQDVpLCN13h4Xg== + /react-is/16.13.1: + dev: true + resolution: + integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ== + /read-pkg-up/2.0.0: + dependencies: + find-up: 2.1.0 + read-pkg: 2.0.0 + dev: true + engines: + node: '>=4' + resolution: + integrity: sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4= + /read-pkg/2.0.0: + dependencies: + load-json-file: 2.0.0 + normalize-package-data: 2.5.0 + path-type: 2.0.0 + dev: true + engines: + node: '>=4' + resolution: + integrity: sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg= + /readable-stream/1.1.14: + dependencies: + core-util-is: 1.0.2 + inherits: 2.0.4 + isarray: 0.0.1 + string_decoder: 0.10.31 + dev: true + resolution: + integrity: sha1-fPTFTvZI44EwhMY23SB54WbAgdk= + /readable-stream/2.3.7: + dependencies: + core-util-is: 1.0.2 + inherits: 2.0.4 + isarray: 1.0.0 + process-nextick-args: 2.0.1 + safe-buffer: 5.1.2 + string_decoder: 1.1.1 + util-deprecate: 1.0.2 + dev: false + optional: true + resolution: + integrity: sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw== + /readdirp/2.2.1: + dependencies: + graceful-fs: 4.2.5 + micromatch: 3.1.10 + readable-stream: 2.3.7 + dev: false + engines: + node: '>=0.10' + optional: true + resolution: + integrity: sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ== + /readdirp/3.5.0: + dependencies: + picomatch: 2.2.2 + dev: false + engines: + node: '>=8.10.0' + optional: true + resolution: + integrity: sha512-cMhu7c/8rdhkHXWsY+osBhfSy0JikwpHK/5+imo+LpeasTF8ouErHrlYkwT0++njiyuDvc7OFY5T3ukvZ8qmFQ== + /regenerate-unicode-properties/8.2.0: + dependencies: + regenerate: 1.4.2 + dev: false + engines: + node: '>=4' + resolution: + integrity: sha512-F9DjY1vKLo/tPePDycuH3dn9H1OTPIkVD9Kz4LODu+F2C75mgjAJ7x/gwy6ZcSNRAAkhNlJSOHRe8k3p+K9WhA== + /regenerate/1.4.2: + dev: false + resolution: + integrity: sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A== + /regenerator-runtime/0.11.1: + dev: true + resolution: + integrity: sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg== + /regenerator-runtime/0.13.7: + resolution: + integrity: sha512-a54FxoJDIr27pgf7IgeQGxmqUNYrcV338lf/6gH456HZ/PhX+5BcwHXG9ajESmwe6WRO0tAzRUrRmNONWgkrew== + /regenerator-transform/0.14.5: + dependencies: + '@babel/runtime': 7.12.13 + dev: false + resolution: + integrity: sha512-eOf6vka5IO151Jfsw2NO9WpGX58W6wWmefK3I1zEGr0lOD0u8rwPaNqQL1aRxUaxLeKO3ArNh3VYg1KbaD+FFw== + /regex-not/1.0.2: + dependencies: + extend-shallow: 3.0.2 + safe-regex: 1.1.0 + dev: false + engines: + node: '>=0.10.0' + optional: true + resolution: + integrity: sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A== + /regexp-tree/0.1.23: + dev: true + hasBin: true + resolution: + integrity: sha512-+7HWfb4Bvu8Rs2eQTUIpX9I/PlQkYOuTNbRpKLJlQpSgwSkzFYh+pUj0gtvglnOZLKB6YgnIgRuJ2/IlpL48qw== + /regexp.prototype.flags/1.3.1: + dependencies: + call-bind: 1.0.2 + define-properties: 1.1.3 + dev: true + engines: + node: '>= 0.4' + resolution: + integrity: sha512-JiBdRBq91WlY7uRJ0ds7R+dU02i6LKi8r3BuQhNXn+kmeLN+EfHhfjqMRis1zJxnlu88hq/4dx0P2OP3APRTOA== + /regexpp/3.1.0: + dev: true + engines: + node: '>=8' + resolution: + integrity: sha512-ZOIzd8yVsQQA7j8GCSlPGXwg5PfmA1mrq0JP4nGhh54LaKN3xdai/vHUDu74pKwV8OxseMS65u2NImosQcSD0Q== + /regexpu-core/4.7.1: + dependencies: + regenerate: 1.4.2 + regenerate-unicode-properties: 8.2.0 + regjsgen: 0.5.2 + regjsparser: 0.6.7 + unicode-match-property-ecmascript: 1.0.4 + unicode-match-property-value-ecmascript: 1.2.0 + dev: false + engines: + node: '>=4' + resolution: + integrity: sha512-ywH2VUraA44DZQuRKzARmw6S66mr48pQVva4LBeRhcOltJ6hExvWly5ZjFLYo67xbIxb6W1q4bAGtgfEl20zfQ== + /regjsgen/0.5.2: + dev: false + resolution: + integrity: sha512-OFFT3MfrH90xIW8OOSyUrk6QHD5E9JOTeGodiJeBS3J6IwlgzJMNE/1bZklWz5oTg+9dCMyEetclvCVXOPoN3A== + /regjsparser/0.6.7: + dependencies: + jsesc: 0.5.0 + dev: false + hasBin: true + resolution: + integrity: sha512-ib77G0uxsA2ovgiYbCVGx4Pv3PSttAx2vIwidqQzbL2U5S4Q+j00HdSAneSBuyVcMvEnTXMjiGgB+DlXozVhpQ== + /remove-trailing-separator/1.1.0: + dev: false + optional: true + resolution: + integrity: sha1-wkvOKig62tW8P1jg1IJJuSN52O8= + /repeat-element/1.1.3: + dev: false + engines: + node: '>=0.10.0' + optional: true + resolution: + integrity: sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g== + /repeat-string/1.6.1: + dev: false + engines: + node: '>=0.10' + optional: true + resolution: + integrity: sha1-jcrkcOHIirwtYA//Sndihtp15jc= + /require-from-string/2.0.2: + dev: true + engines: + node: '>=0.10.0' + resolution: + integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw== + /resolve-from/4.0.0: + dev: true + engines: + node: '>=4' + resolution: + integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== + /resolve-url/0.2.1: + deprecated: https://github.com/lydell/resolve-url#deprecated + dev: false + optional: true + resolution: + integrity: sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo= + /resolve/1.19.0: + dependencies: + is-core-module: 2.2.0 + path-parse: 1.0.6 + dev: false + resolution: + integrity: sha512-rArEXAgsBG4UgRGcynxWIWKFvh/XZCcS8UJdHhwy91zwAvCZIbcs+vAbflgBnNjYMs/i/i+/Ux6IZhML1yPvxg== + /resolve/1.20.0: + dependencies: + is-core-module: 2.2.0 + path-parse: 1.0.6 + dev: true + resolution: + integrity: sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A== + /ret/0.1.15: + dev: false + engines: + node: '>=0.12' + optional: true + resolution: + integrity: sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg== + /reusify/1.0.4: + dev: true + engines: + iojs: '>=1.0.0' + node: '>=0.10.0' + resolution: + integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== + /rimraf/3.0.2: + dependencies: + glob: 7.1.6 + dev: true + hasBin: true + resolution: + integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== + /run-parallel/1.2.0: + dependencies: + queue-microtask: 1.2.2 + dev: true + resolution: + integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA== + /safe-buffer/5.1.2: + resolution: + integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== + /safe-regex/1.1.0: + dependencies: + ret: 0.1.15 + dev: false + optional: true + resolution: + integrity: sha1-QKNmnzsHfR6UPURinhV91IAjvy4= + /semver/5.7.1: + hasBin: true + resolution: + integrity: sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== + /semver/6.3.0: + hasBin: true + resolution: + integrity: sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== + /semver/7.0.0: + dev: false + hasBin: true + resolution: + integrity: sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A== + /semver/7.3.4: + dependencies: + lru-cache: 6.0.0 + dev: true + engines: + node: '>=10' + hasBin: true + resolution: + integrity: sha512-tCfb2WLjqFAtXn4KEdxIhalnRtoKFN7nAwj0B3ZXCbQloV2tq5eDbcTmT68JJD3nRJq24/XgxtQKFIpQdtvmVw== + /set-value/2.0.1: + dependencies: + extend-shallow: 2.0.1 + is-extendable: 0.1.1 + is-plain-object: 2.0.4 + split-string: 3.1.0 + dev: false + engines: + node: '>=0.10.0' + optional: true + resolution: + integrity: sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw== + /shebang-command/2.0.0: + dependencies: + shebang-regex: 3.0.0 + dev: true + engines: + node: '>=8' + resolution: + integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== + /shebang-regex/3.0.0: + dev: true + engines: + node: '>=8' + resolution: + integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== + /shelljs/0.3.0: + dev: true + engines: + node: '>=0.8.0' + hasBin: true + resolution: + integrity: sha1-NZbmMHp4FUT1kfN9phg2DzHbV7E= + /side-channel/1.0.4: + dependencies: + call-bind: 1.0.2 + get-intrinsic: 1.1.1 + object-inspect: 1.9.0 + dev: true + resolution: + integrity: sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw== + /slash/2.0.0: + dev: false + engines: + node: '>=6' + resolution: + integrity: sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A== + /slash/3.0.0: + dev: true + engines: + node: '>=8' + resolution: + integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== + /slice-ansi/4.0.0: + dependencies: + ansi-styles: 4.3.0 + astral-regex: 2.0.0 + is-fullwidth-code-point: 3.0.0 + dev: true + engines: + node: '>=10' + resolution: + integrity: sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ== + /snapdragon-node/2.1.1: + dependencies: + define-property: 1.0.0 + isobject: 3.0.1 + snapdragon-util: 3.0.1 + dev: false + engines: + node: '>=0.10.0' + optional: true + resolution: + integrity: sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw== + /snapdragon-util/3.0.1: + dependencies: + kind-of: 3.2.2 + dev: false + engines: + node: '>=0.10.0' + optional: true + resolution: + integrity: sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ== + /snapdragon/0.8.2: + dependencies: + base: 0.11.2 + debug: 2.6.9 + define-property: 0.2.5 + extend-shallow: 2.0.1 + map-cache: 0.2.2 + source-map: 0.5.7 + source-map-resolve: 0.5.3 + use: 3.1.1 + dev: false + engines: + node: '>=0.10.0' + optional: true + resolution: + integrity: sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg== + /source-map-resolve/0.5.3: + dependencies: + atob: 2.1.2 + decode-uri-component: 0.2.0 + resolve-url: 0.2.1 + source-map-url: 0.4.1 + urix: 0.1.0 + dev: false + optional: true + resolution: + integrity: sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw== + /source-map-url/0.4.1: + dev: false + optional: true + resolution: + integrity: sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw== + /source-map/0.5.7: + engines: + node: '>=0.10.0' + resolution: + integrity: sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w= + /space-pen-plus/6.0.3: + dependencies: + jquery: 3.5.1 + dev: false + resolution: + integrity: sha512-iqPZAQYP3xPDGxT6MxIwm4GQks91p2H4QeUUcjjzPyr2FEmpaqVLX6cDwjzf8HWMQ0r9fa3hSB9CzMODXVBe6g== + /space-pen/5.1.2: + dependencies: + grim: 1.5.0 + jquery: 2.1.4 + underscore-plus: 1.7.0 + dev: false + resolution: + integrity: sha1-Ivu+EOCwROe3pHsCPamdlLWE748= + /spdx-correct/3.1.1: + dependencies: + spdx-expression-parse: 3.0.1 + spdx-license-ids: 3.0.7 + dev: true + resolution: + integrity: sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w== + /spdx-exceptions/2.3.0: + dev: true + resolution: + integrity: sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A== + /spdx-expression-parse/3.0.1: + dependencies: + spdx-exceptions: 2.3.0 + spdx-license-ids: 3.0.7 + dev: true + resolution: + integrity: sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q== + /spdx-license-ids/3.0.7: + dev: true + resolution: + integrity: sha512-U+MTEOO0AiDzxwFvoa4JVnMV6mZlJKk2sBLt90s7G0Gd0Mlknc7kxEn3nuDPNZRta7O2uy8oLcZLVT+4sqNZHQ== + /split-string/3.1.0: + dependencies: + extend-shallow: 3.0.2 + dev: false + engines: + node: '>=0.10.0' + optional: true + resolution: + integrity: sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw== + /sprintf-js/1.0.3: + dev: true + resolution: + integrity: sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw= + /static-extend/0.1.2: + dependencies: + define-property: 0.2.5 + object-copy: 0.1.0 + dev: false + engines: + node: '>=0.10.0' + optional: true + resolution: + integrity: sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY= + /string-width/4.2.0: + dependencies: + emoji-regex: 8.0.0 + is-fullwidth-code-point: 3.0.0 + strip-ansi: 6.0.0 + dev: true + engines: + node: '>=8' + resolution: + integrity: sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg== + /string.prototype.matchall/4.0.4: + dependencies: + call-bind: 1.0.2 + define-properties: 1.1.3 + es-abstract: 1.18.0 + has-symbols: 1.0.2 + internal-slot: 1.0.3 + regexp.prototype.flags: 1.3.1 + side-channel: 1.0.4 + dev: true + resolution: + integrity: sha512-pknFIWVachNcyqRfaQSeu/FUfpvJTe4uskUSZ9Wc1RijsPuzbZ8TyYT8WCNnntCjUEqQ3vUHMAfVj2+wLAisPQ== + /string.prototype.trimend/1.0.4: + dependencies: + call-bind: 1.0.2 + define-properties: 1.1.3 + dev: true + resolution: + integrity: sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A== + /string.prototype.trimstart/1.0.4: + dependencies: + call-bind: 1.0.2 + define-properties: 1.1.3 + dev: true + resolution: + integrity: sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw== + /string_decoder/0.10.31: + dev: true + resolution: + integrity: sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ= + /string_decoder/1.1.1: + dependencies: + safe-buffer: 5.1.2 + dev: false + optional: true + resolution: + integrity: sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== + /strip-ansi/3.0.1: + dependencies: + ansi-regex: 2.1.1 + dev: true + engines: + node: '>=0.10.0' + resolution: + integrity: sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8= + /strip-ansi/6.0.0: + dependencies: + ansi-regex: 5.0.0 + engines: + node: '>=8' + resolution: + integrity: sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w== + /strip-bom/3.0.0: + dev: true + engines: + node: '>=4' + resolution: + integrity: sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM= + /strip-json-comments/1.0.4: + dev: true + engines: + node: '>=0.8.0' + hasBin: true + resolution: + integrity: sha1-HhX7ysl9Pumb8tc7TGVrCCu6+5E= + /strip-json-comments/3.1.1: + dev: true + engines: + node: '>=8' + resolution: + integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== + /supports-color/2.0.0: + dev: true + engines: + node: '>=0.8.0' + resolution: + integrity: sha1-U10EXOa2Nj+kARcIRimZXp3zJMc= + /supports-color/5.5.0: + dependencies: + has-flag: 3.0.0 + engines: + node: '>=4' + resolution: + integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== + /supports-color/7.2.0: + dependencies: + has-flag: 4.0.0 + dev: true + engines: + node: '>=8' + resolution: + integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== + /table/6.0.7: + dependencies: + ajv: 7.0.4 + lodash: 4.17.21 + slice-ansi: 4.0.0 + string-width: 4.2.0 + dev: true + engines: + node: '>=10.0.0' + resolution: + integrity: sha512-rxZevLGTUzWna/qBLObOe16kB2RTnnbhciwgPbMMlazz1yZGVEgnZK762xyVdVznhqxrfCeBMmMkgOOaPwjH7g== + /temp-dir/2.0.0: + dev: true + engines: + node: '>=8' + resolution: + integrity: sha512-aoBAniQmmwtcKp/7BzsH8Cxzv8OL736p7v1ihGb5e9DJ9kTwGWHrQrVB5+lfVDzfGrdRzXch+ig7LHaY1JTOrg== + /tempy/1.0.1: + dependencies: + del: 6.0.0 + is-stream: 2.0.0 + temp-dir: 2.0.0 + type-fest: 0.16.0 + unique-string: 2.0.0 + dev: true + engines: + node: '>=10' + resolution: + integrity: sha512-biM9brNqxSc04Ee71hzFbryD11nX7VPhQQY32AdDmjFvodsRFz/3ufeoTZ6uYkRFfGo188tENcASNs3vTdsM0w== + /text-table/0.2.0: + dev: true + resolution: + integrity: sha1-f17oI66AUgfACvLfSoTsP8+lcLQ= + /to-fast-properties/1.0.3: + dev: true + engines: + node: '>=0.10.0' + resolution: + integrity: sha1-uDVx+k2MJbguIxsG46MFXeTKGkc= + /to-fast-properties/2.0.0: + engines: + node: '>=4' + resolution: + integrity: sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4= + /to-object-path/0.3.0: + dependencies: + kind-of: 3.2.2 + dev: false + engines: + node: '>=0.10.0' + optional: true + resolution: + integrity: sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68= + /to-regex-range/2.1.1: + dependencies: + is-number: 3.0.0 + repeat-string: 1.6.1 + dev: false + engines: + node: '>=0.10.0' + optional: true + resolution: + integrity: sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg= + /to-regex-range/5.0.1: + dependencies: + is-number: 7.0.0 + engines: + node: '>=8.0' + resolution: + integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== + /to-regex/3.0.2: + dependencies: + define-property: 2.0.2 + extend-shallow: 3.0.2 + regex-not: 1.0.2 + safe-regex: 1.1.0 + dev: false + engines: + node: '>=0.10.0' + optional: true + resolution: + integrity: sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw== + /tsconfig-paths/3.9.0: + dependencies: + '@types/json5': 0.0.29 + json5: 1.0.1 + minimist: 1.2.5 + strip-bom: 3.0.0 + dev: true + resolution: + integrity: sha512-dRcuzokWhajtZWkQsDVKbWyY+jgcLC5sqJhg2PSgf4ZkH2aHPvaOY8YWGhmjb68b5qqTfasSsDO9k7RUiEmZAw== + /tslib/1.14.1: + dev: true + resolution: + integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== + /tsutils/3.21.0_typescript@4.2.3: + dependencies: + tslib: 1.14.1 + typescript: 4.2.3 + dev: true + engines: + node: '>= 6' + peerDependencies: + typescript: '>=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta' + resolution: + integrity: sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA== + /type-check/0.4.0: + dependencies: + prelude-ls: 1.2.1 + dev: true + engines: + node: '>= 0.8.0' + resolution: + integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew== + /type-fest/0.16.0: + dev: true + engines: + node: '>=10' + resolution: + integrity: sha512-eaBzG6MxNzEn9kiwvtre90cXaNLkmadMWa1zQMs3XORCXNbsH/OewwbxC5ia9dCxIxnTAsSxXJaa/p5y8DlvJg== + /type-fest/0.20.2: + dev: true + engines: + node: '>=10' + resolution: + integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ== + /type-fest/0.8.1: + dev: true + engines: + node: '>=8' + resolution: + integrity: sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA== + /type/1.2.0: + dev: false + resolution: + integrity: sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg== + /type/2.1.0: + dev: false + resolution: + integrity: sha512-G9absDWvhAWCV2gmF1zKud3OyC61nZDwWvBL2DApaVFogI07CprggiQAOOjvp2NRjYWFzPyu7vwtDrQFq8jeSA== + /typescript/4.2.3: + dev: true + engines: + node: '>=4.2.0' + hasBin: true + resolution: + integrity: sha512-qOcYwxaByStAWrBf4x0fibwZvMRG+r4cQoTjbPtUlrWjBHbmCAww1i448U0GJ+3cNNEtebDteo/cHOR3xJ4wEw== + /unbox-primitive/1.0.0: + dependencies: + function-bind: 1.1.1 + has-bigints: 1.0.1 + has-symbols: 1.0.2 + which-boxed-primitive: 1.0.2 + dev: true + resolution: + integrity: sha512-P/51NX+JXyxK/aigg1/ZgyccdAxm5K1+n8+tvqSntjOivPt19gvm1VC49RWYetsiub8WViUchdxl/KWHHB0kzA== + /underscore-plus/1.7.0: + dependencies: + underscore: 1.12.0 + dev: false + resolution: + integrity: sha512-A3BEzkeicFLnr+U/Q3EyWwJAQPbA19mtZZ4h+lLq3ttm9kn8WC4R3YpuJZEXmWdLjYP47Zc8aLZm9kwdv+zzvA== + /underscore/1.12.0: + dev: false + resolution: + integrity: sha512-21rQzss/XPMjolTiIezSu3JAjgagXKROtNrYFEOWK109qY1Uv2tVjPTZ1ci2HgvQDA16gHYSthQIJfB+XId/rQ== + /underscore/1.12.1: + dev: false + resolution: + integrity: sha512-hEQt0+ZLDVUMhebKxL4x1BTtDY7bavVofhZ9KZ4aI26X9SRaE+Y3m83XUL1UP2jn8ynjndwCCpEHdUG+9pP1Tw== + /unicode-canonical-property-names-ecmascript/1.0.4: + dev: false + engines: + node: '>=4' + resolution: + integrity: sha512-jDrNnXWHd4oHiTZnx/ZG7gtUTVp+gCcTTKr8L0HjlwphROEW3+Him+IpvC+xcJEFegapiMZyZe02CyuOnRmbnQ== + /unicode-match-property-ecmascript/1.0.4: + dependencies: + unicode-canonical-property-names-ecmascript: 1.0.4 + unicode-property-aliases-ecmascript: 1.1.0 + dev: false + engines: + node: '>=4' + resolution: + integrity: sha512-L4Qoh15vTfntsn4P1zqnHulG0LdXgjSO035fEpdtp6YxXhMT51Q6vgM5lYdG/5X3MjS+k/Y9Xw4SFCY9IkR0rg== + /unicode-match-property-value-ecmascript/1.2.0: + dev: false + engines: + node: '>=4' + resolution: + integrity: sha512-wjuQHGQVofmSJv1uVISKLE5zO2rNGzM/KCYZch/QQvez7C1hUhBIuZ701fYXExuufJFMPhv2SyL8CyoIfMLbIQ== + /unicode-property-aliases-ecmascript/1.1.0: + dev: false + engines: + node: '>=4' + resolution: + integrity: sha512-PqSoPh/pWetQ2phoj5RLiaqIk4kCNwoV3CI+LfGmWLKI3rE3kl1h59XpX2BjgDrmbxD9ARtQobPGU1SguCYuQg== + /union-value/1.0.1: + dependencies: + arr-union: 3.1.0 + get-value: 2.0.6 + is-extendable: 0.1.1 + set-value: 2.0.1 + dev: false + engines: + node: '>=0.10.0' + optional: true + resolution: + integrity: sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg== + /unique-string/2.0.0: + dependencies: + crypto-random-string: 2.0.0 + dev: true + engines: + node: '>=8' + resolution: + integrity: sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg== + /universalify/2.0.0: + dev: false + engines: + node: '>= 10.0.0' + resolution: + integrity: sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ== + /unset-value/1.0.0: + dependencies: + has-value: 0.3.1 + isobject: 3.0.1 + dev: false + engines: + node: '>=0.10.0' + optional: true + resolution: + integrity: sha1-g3aHP30jNRef+x5vw6jtDfyKtVk= + /upath/1.2.0: + dev: false + engines: + node: '>=4' + optional: true + resolution: + integrity: sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg== + /uri-js/4.4.1: + dependencies: + punycode: 2.1.1 + dev: true + resolution: + integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg== + /urix/0.1.0: + deprecated: Please see https://github.com/lydell/urix#deprecated + dev: false + optional: true + resolution: + integrity: sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI= + /use/3.1.1: + dev: false + engines: + node: '>=0.10.0' + optional: true + resolution: + integrity: sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ== + /util-deprecate/1.0.2: + dev: false + optional: true + resolution: + integrity: sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= + /uuid/8.3.2: + dev: false + hasBin: true + resolution: + integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== + /v8-compile-cache/2.2.0: + dev: true + resolution: + integrity: sha512-gTpR5XQNKFwOd4clxfnhaqvfqMpqEwr4tOtCyz4MtYZX2JYhfr1JvBFKdS+7K/9rfpZR3VLX+YWBbKoxCgS43Q== + /validate-npm-package-license/3.0.4: + dependencies: + spdx-correct: 3.1.1 + spdx-expression-parse: 3.0.1 + dev: true + resolution: + integrity: sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew== + /vscode-json-languageservice/3.11.0: + dependencies: + jsonc-parser: 3.0.0 + vscode-languageserver-textdocument: 1.0.1 + vscode-languageserver-types: 3.16.0-next.2 + vscode-nls: 5.0.0 + vscode-uri: 2.1.2 + dev: true + resolution: + integrity: sha512-QxI+qV97uD7HHOCjh3MrM1TfbdwmTXrMckri5Tus1/FQiG3baDZb2C9Y0y8QThs7PwHYBIQXcAc59ZveCRZKPA== + /vscode-languageserver-textdocument/1.0.1: + dev: true + resolution: + integrity: sha512-UIcJDjX7IFkck7cSkNNyzIz5FyvpQfY7sdzVy+wkKN/BLaD4DQ0ppXQrKePomCxTS7RrolK1I0pey0bG9eh8dA== + /vscode-languageserver-types/3.16.0-next.2: + dev: true + resolution: + integrity: sha512-QjXB7CKIfFzKbiCJC4OWC8xUncLsxo19FzGVp/ADFvvi87PlmBSCAtZI5xwGjF5qE0xkLf0jjKUn3DzmpDP52Q== + /vscode-nls/5.0.0: + dev: true + resolution: + integrity: sha512-u0Lw+IYlgbEJFF6/qAqG2d1jQmJl0eyAGJHoAJqr2HT4M2BNuQYSEiSE75f52pXHSJm8AlTjnLLbBFPrdz2hpA== + /vscode-uri/2.1.2: + dev: true + resolution: + integrity: sha512-8TEXQxlldWAuIODdukIb+TR5s+9Ds40eSJrw+1iDDA9IFORPjMELarNQE3myz5XIkWWpdprmJjm1/SxMlWOC8A== + /which-boxed-primitive/1.0.2: + dependencies: + is-bigint: 1.0.1 + is-boolean-object: 1.1.0 + is-number-object: 1.0.4 + is-string: 1.0.5 + is-symbol: 1.0.3 + dev: true + resolution: + integrity: sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg== + /which/2.0.2: + dependencies: + isexe: 2.0.0 + dev: true + engines: + node: '>= 8' + hasBin: true + resolution: + integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== + /word-wrap/1.2.3: + dev: true + engines: + node: '>=0.10.0' + resolution: + integrity: sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ== + /wrappy/1.0.2: + resolution: + integrity: sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= + /yallist/4.0.0: + dev: true + resolution: + integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== +specifiers: + '@babel/cli': ^7.13.10 + '@babel/core': ^7.13.10 + '@babel/preset-env': ^7.13.10 + '@babel/preset-react': ^7.12.13 + ansi-to-html: ^0.6.14 + atom-message-panel: 1.3.1 + atom-space-pen-views-plus: ^3.0.4 + coffeescript: ^2 + eslint: ^7.22.0 + eslint-config-atomic: ^1.12.4 + prettier: ^2.2.1 + prettier-config-atomic: ^1.0.1 + strip-ansi: ^6.0.0 + tempy: ^1.0.1 + underscore: ^1.12.1 + uuid: ^8.3.2 diff --git a/spec/code-context-builder-spec.js b/spec/code-context-builder-spec.js index 7cbfebd6..d7f859c7 100644 --- a/spec/code-context-builder-spec.js +++ b/spec/code-context-builder-spec.js @@ -1,8 +1,8 @@ -'use babel'; +"use babel" // TODO -import CodeContextBuilder from '../lib/code-context-builder'; +/* eslint-disable no-invalid-this */ import CodeContextBuilder from "../lib/code-context-builder" -describe('CodeContextBuilder', () => { +describe("CodeContextBuilder", () => { beforeEach(() => { this.editorMock = { getTitle() {}, @@ -11,59 +11,67 @@ describe('CodeContextBuilder', () => { getLastSelection() { return { isEmpty() { - return false; + return false }, - }; + } }, getGrammar() { - return { name: 'JavaScript' }; + return { name: "JavaScript" } }, getLastCursor() {}, save() {}, - }; + } - spyOn(this.editorMock, 'getTitle').andReturn('file.js'); - spyOn(this.editorMock, 'getPath').andReturn('path/to/file.js'); - spyOn(this.editorMock, 'getText').andReturn('console.log("hello")\n'); - this.codeContextBuilder = new CodeContextBuilder(); - }); + spyOn(this.editorMock, "getTitle").andReturn("file.js") + spyOn(this.editorMock, "getPath").andReturn("path/to/file.js") + spyOn(this.editorMock, "getText").andReturn('console.log("hello")\n') + this.codeContextBuilder = new CodeContextBuilder() + }) - describe('initCodeContext', () => { - it('sets correct text source for empty selection', () => { - const selection = - { isEmpty() { return true; } }; - spyOn(this.editorMock, 'getLastSelection').andReturn(selection); - const codeContext = this.codeContextBuilder.initCodeContext(this.editorMock); - expect(codeContext.textSource).toEqual(this.editorMock); - expect(codeContext.filename).toEqual('file.js'); - expect(codeContext.filepath).toEqual('path/to/file.js'); - }); + describe("initCodeContext", () => { + it("sets correct text source for empty selection", () => { + const selection = { + isEmpty() { + return true + }, + } + spyOn(this.editorMock, "getLastSelection").andReturn(selection) + const codeContext = this.codeContextBuilder.initCodeContext(this.editorMock) + expect(codeContext.textSource).toEqual(this.editorMock) + expect(codeContext.filename).toEqual("file.js") + expect(codeContext.filepath).toEqual("path/to/file.js") + }) - it('sets correct text source for non-empty selection', () => { - const selection = - { isEmpty() { return false; } }; - spyOn(this.editorMock, 'getLastSelection').andReturn(selection); - const codeContext = this.codeContextBuilder.initCodeContext(this.editorMock); - expect(codeContext.textSource).toEqual(selection); - expect(codeContext.selection).toEqual(selection); - }); + it("sets correct text source for non-empty selection", () => { + const selection = { + isEmpty() { + return false + }, + } + spyOn(this.editorMock, "getLastSelection").andReturn(selection) + const codeContext = this.codeContextBuilder.initCodeContext(this.editorMock) + expect(codeContext.textSource).toEqual(selection) + expect(codeContext.selection).toEqual(selection) + }) - it('sets correct lang', () => { - const codeContext = this.codeContextBuilder.initCodeContext(this.editorMock); - expect(codeContext.lang).toEqual('JavaScript'); - }); - }); + it("sets correct lang", () => { + const codeContext = this.codeContextBuilder.initCodeContext(this.editorMock) + expect(codeContext.lang).toEqual("JavaScript") + }) + }) - describe('buildCodeContext', () => - ['Selection Based', 'Line Number Based'].map(argType => + describe("buildCodeContext", () => + ["Selection Based", "Line Number Based"].map((argType) => it(`sets lineNumber with screenRow + 1 when ${argType}`, () => { - const cursor = - { getScreenRow() { return 1; } }; - spyOn(this.editorMock, 'getLastCursor').andReturn(cursor); - const codeContext = this.codeContextBuilder.buildCodeContext(this.editorMock, argType); - expect(codeContext.argType).toEqual(argType); - expect(codeContext.lineNumber).toEqual(2); - }), - ), - ); -}); + const cursor = { + getScreenRow() { + return 1 + }, + } + spyOn(this.editorMock, "getLastCursor").andReturn(cursor) + const codeContext = this.codeContextBuilder.buildCodeContext(this.editorMock, argType) + expect(codeContext.argType).toEqual(argType) + expect(codeContext.lineNumber).toEqual(2) + }) + )) +}) diff --git a/spec/code-context-spec.js b/spec/code-context-spec.js index c98b622c..f97fce24 100644 --- a/spec/code-context-spec.js +++ b/spec/code-context-spec.js @@ -1,136 +1,148 @@ -'use babel'; +"use babel" // TODO -import tempy from 'tempy'; -import path from 'path'; +/* eslint-disable no-invalid-this */ import tempy from "tempy" +import path from "path" -import CodeContext from '../lib/code-context'; +import CodeContext from "../lib/code-context" -describe('CodeContext', () => { - const testFile = 'test.txt'; - let testFilePath; +describe("CodeContext", () => { + const testFile = "test.txt" + let testFilePath beforeEach(() => { - testFilePath = path.join(tempy.directory(), testFile); - this.codeContext = new CodeContext(testFile, testFilePath, null); + testFilePath = path.join(tempy.directory(), testFile) + this.codeContext = new CodeContext(testFile, testFilePath, null) // TODO: Test using an actual editor or a selection? - this.dummyTextSource = {}; - this.dummyTextSource.getText = () => "print 'hello world!'"; - }); - - describe('fileColonLine when lineNumber is not set', () => { - it('returns the full filepath when fullPath is truthy', () => { - expect(this.codeContext.fileColonLine()).toEqual(testFilePath); - expect(this.codeContext.fileColonLine(true)).toEqual(testFilePath); - }); - - it('returns only the filename and line number when fullPath is falsy', () => { - expect(this.codeContext.fileColonLine(false)).toEqual(testFile); - }); - }); - - describe('fileColonLine when lineNumber is set', () => { - it('returns the full filepath when fullPath is truthy', () => { - this.codeContext.lineNumber = 42; - expect(this.codeContext.fileColonLine()).toEqual(`${testFilePath}:42`); - expect(this.codeContext.fileColonLine(true)).toEqual(`${testFilePath}:42`); - }); - - it('returns only the filename and line number when fullPath is falsy', () => { - this.codeContext.lineNumber = 42; - expect(this.codeContext.fileColonLine(false)).toEqual(`${testFile}:42`); - }); - }); - - describe('getCode', () => { - it('returns undefined if no textSource is available', () => { - expect(this.codeContext.getCode()).toBe(null); - }); - - it('returns a string prepended with newlines when prependNewlines is truthy', () => { - this.codeContext.textSource = this.dummyTextSource; - this.codeContext.lineNumber = 3; - - const code = this.codeContext.getCode(true); - expect(typeof code).toEqual('string'); + this.dummyTextSource = {} + this.dummyTextSource.getText = () => "print 'hello world!'" + }) + + describe("fileColonLine when lineNumber is not set", () => { + it("returns the full filepath when fullPath is truthy", () => { + expect(this.codeContext.fileColonLine()).toEqual(testFilePath) + expect(this.codeContext.fileColonLine(true)).toEqual(testFilePath) + }) + + it("returns only the filename and line number when fullPath is falsy", () => { + expect(this.codeContext.fileColonLine(false)).toEqual(testFile) + }) + }) + + describe("fileColonLine when lineNumber is set", () => { + it("returns the full filepath when fullPath is truthy", () => { + this.codeContext.lineNumber = 42 + expect(this.codeContext.fileColonLine()).toEqual(`${testFilePath}:42`) + expect(this.codeContext.fileColonLine(true)).toEqual(`${testFilePath}:42`) + }) + + it("returns only the filename and line number when fullPath is falsy", () => { + this.codeContext.lineNumber = 42 + expect(this.codeContext.fileColonLine(false)).toEqual(`${testFile}:42`) + }) + }) + + describe("getCode", () => { + it("returns undefined if no textSource is available", () => { + expect(this.codeContext.getCode()).toBe(null) + }) + + it("returns a string prepended with newlines when prependNewlines is truthy", () => { + this.codeContext.textSource = this.dummyTextSource + this.codeContext.lineNumber = 3 + + const code = this.codeContext.getCode(true) + expect(typeof code).toEqual("string") // Since Array#join will create newlines for one less than the the number // of elements line number 3 means there should be two newlines - expect(code).toMatch("\n\nprint 'hello world!'"); - }); - - it('returns the text from the textSource when available', () => { - this.codeContext.textSource = this.dummyTextSource; - - const code = this.codeContext.getCode(); - expect(typeof code).toEqual('string'); - expect(code).toMatch("print 'hello world!'"); - }); - }); - - describe('shebangCommand when no shebang was found', () => - it('returns undefined when no shebang is found', () => { - const lines = this.dummyTextSource.getText(); - const firstLine = lines.split('\n')[0]; - if (firstLine.match(/^#!/)) { this.codeContext.shebang = firstLine; } - expect(this.codeContext.shebangCommand()).toBe(null); - }), - ); - - describe('shebangCommand when a shebang was found', () => { - it('returns the command from the shebang', () => { - const lines = "#!/bin/bash\necho 'hello from bash!'"; - const firstLine = lines.split('\n')[0]; - if (firstLine.match(/^#!/)) { this.codeContext.shebang = firstLine; } - expect(this.codeContext.shebangCommand()).toMatch('bash'); - }); - - it('returns /usr/bin/env as the command if applicable', () => { - const lines = "#!/usr/bin/env ruby -w\nputs 'hello from ruby!'"; - let firstLine = lines.split('\n')[0]; - firstLine = lines.split('\n')[0]; - if (firstLine.match(/^#!/)) { this.codeContext.shebang = firstLine; } - expect(this.codeContext.shebangCommand()).toMatch('env'); - }); - - it('returns a command with non-alphabet characters', () => { - const lines = "#!/usr/bin/python2.7\nprint 'hello from python!'"; - const firstLine = lines.split('\n')[0]; - if (firstLine.match(/^#!/)) { this.codeContext.shebang = firstLine; } - expect(this.codeContext.shebangCommand()).toMatch('python2.7'); - }); - }); - - describe('shebangCommandArgs when no shebang was found', () => - it('returns [] when no shebang is found', () => { - const lines = this.dummyTextSource.getText(); - const firstLine = lines.split('\n')[0]; - if (firstLine.match(/^#!/)) { this.codeContext.shebang = firstLine; } - expect(this.codeContext.shebangCommandArgs()).toMatch([]); - }), - ); - - describe('shebangCommandArgs when a shebang was found', () => { - it('returns the command from the shebang', () => { - const lines = "#!/bin/bash\necho 'hello from bash!'"; - const firstLine = lines.split('\n')[0]; - if (firstLine.match(/^#!/)) { this.codeContext.shebang = firstLine; } - expect(this.codeContext.shebangCommandArgs()).toMatch([]); - }); - - it('returns the true command as the first argument when /usr/bin/env is used', () => { - const lines = "#!/usr/bin/env ruby -w\nputs 'hello from ruby!'"; - let firstLine = lines.split('\n')[0]; - firstLine = lines.split('\n')[0]; - if (firstLine.match(/^#!/)) { this.codeContext.shebang = firstLine; } - const args = this.codeContext.shebangCommandArgs(); - expect(args[0]).toMatch('ruby'); - expect(args).toMatch(['ruby', '-w']); - }); - - it('returns the command args when the command had non-alphabet characters', () => { - const lines = "#!/usr/bin/python2.7\nprint 'hello from python!'"; - const firstLine = lines.split('\n')[0]; - if (firstLine.match(/^#!/)) { this.codeContext.shebang = firstLine; } - expect(this.codeContext.shebangCommandArgs()).toMatch([]); - }); - }); -}); + expect(code).toMatch("\n\nprint 'hello world!'") + }) + + it("returns the text from the textSource when available", () => { + this.codeContext.textSource = this.dummyTextSource + + const code = this.codeContext.getCode() + expect(typeof code).toEqual("string") + expect(code).toMatch("print 'hello world!'") + }) + }) + + describe("shebangCommand when no shebang was found", () => + it("returns undefined when no shebang is found", () => { + const lines = this.dummyTextSource.getText() + const firstLine = lines.split("\n")[0] + if (firstLine.match(/^#!/)) { + this.codeContext.shebang = firstLine + } + expect(this.codeContext.shebangCommand()).toBe(null) + })) + + describe("shebangCommand when a shebang was found", () => { + it("returns the command from the shebang", () => { + const lines = "#!/bin/bash\necho 'hello from bash!'" + const firstLine = lines.split("\n")[0] + if (firstLine.match(/^#!/)) { + this.codeContext.shebang = firstLine + } + expect(this.codeContext.shebangCommand()).toMatch("bash") + }) + + it("returns /usr/bin/env as the command if applicable", () => { + const lines = "#!/usr/bin/env ruby -w\nputs 'hello from ruby!'" + const firstLine = lines.split("\n")[0] + if (firstLine.match(/^#!/)) { + this.codeContext.shebang = firstLine + } + expect(this.codeContext.shebangCommand()).toMatch("env") + }) + + it("returns a command with non-alphabet characters", () => { + const lines = "#!/usr/bin/python2.7\nprint 'hello from python!'" + const firstLine = lines.split("\n")[0] + if (firstLine.match(/^#!/)) { + this.codeContext.shebang = firstLine + } + expect(this.codeContext.shebangCommand()).toMatch("python2.7") + }) + }) + + describe("shebangCommandArgs when no shebang was found", () => + it("returns [] when no shebang is found", () => { + const lines = this.dummyTextSource.getText() + const firstLine = lines.split("\n")[0] + if (firstLine.match(/^#!/)) { + this.codeContext.shebang = firstLine + } + expect(this.codeContext.shebangCommandArgs()).toMatch([]) + })) + + describe("shebangCommandArgs when a shebang was found", () => { + it("returns the command from the shebang", () => { + const lines = "#!/bin/bash\necho 'hello from bash!'" + const firstLine = lines.split("\n")[0] + if (firstLine.match(/^#!/)) { + this.codeContext.shebang = firstLine + } + expect(this.codeContext.shebangCommandArgs()).toMatch([]) + }) + + it("returns the true command as the first argument when /usr/bin/env is used", () => { + const lines = "#!/usr/bin/env ruby -w\nputs 'hello from ruby!'" + const firstLine = lines.split("\n")[0] + if (firstLine.match(/^#!/)) { + this.codeContext.shebang = firstLine + } + const args = this.codeContext.shebangCommandArgs() + expect(args[0]).toMatch("ruby") + expect(args).toMatch(["ruby", "-w"]) + }) + + it("returns the command args when the command had non-alphabet characters", () => { + const lines = "#!/usr/bin/python2.7\nprint 'hello from python!'" + const firstLine = lines.split("\n")[0] + if (firstLine.match(/^#!/)) { + this.codeContext.shebang = firstLine + } + expect(this.codeContext.shebangCommandArgs()).toMatch([]) + }) + }) +}) diff --git a/spec/fixtures/ioTest.js b/spec/fixtures/ioTest.js index 7fa743e1..76589d20 100644 --- a/spec/fixtures/ioTest.js +++ b/spec/fixtures/ioTest.js @@ -1,8 +1,8 @@ -process.stdin.setEncoding('utf8'); +process.stdin.setEncoding("utf8") -process.stdin.on('readable', () => { - const chunk = process.stdin.read(); +process.stdin.on("readable", () => { + const chunk = process.stdin.read() if (chunk) { - console.log(`TEST: ${chunk}`); + console.log(`TEST: ${chunk}`) } -}); +}) diff --git a/spec/fixtures/issue_2358.py b/spec/fixtures/issue_2358.py new file mode 100644 index 00000000..940b8ca8 --- /dev/null +++ b/spec/fixtures/issue_2358.py @@ -0,0 +1,9 @@ +# See the console after running this + +import requests + +head = {'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Ubuntu Chromium/65.0.3325.181 Chrome/65.0.3325.181 Safari/537.36'} + +r = requests.get('https://www.oxfordlearnersdictionaries.com/us/wordlists/oxford3000-5000', headers=head) + +print(r.text) diff --git a/spec/fixtures/outputTest.js b/spec/fixtures/outputTest.js index e921523b..77281176 100644 --- a/spec/fixtures/outputTest.js +++ b/spec/fixtures/outputTest.js @@ -1 +1 @@ -console.log('hello'); +console.log("hello") diff --git a/spec/fixtures/stdinEndTest.js b/spec/fixtures/stdinEndTest.js index cea8b882..4f421933 100644 --- a/spec/fixtures/stdinEndTest.js +++ b/spec/fixtures/stdinEndTest.js @@ -1,6 +1,6 @@ -process.stdin.resume(); -process.stdin.setEncoding('utf8'); +process.stdin.resume() +process.stdin.setEncoding("utf8") -process.stdin.on('end', () => { - console.log('stdin terminated'); -}); +process.stdin.on("end", () => { + console.log("stdin terminated") +}) diff --git a/spec/fixtures/throw.js b/spec/fixtures/throw.js index 83025124..2e31bba8 100644 --- a/spec/fixtures/throw.js +++ b/spec/fixtures/throw.js @@ -1 +1 @@ -throw new Error('kaboom'); +throw new Error("kaboom") diff --git a/spec/grammar-utils/lisp-spec.js b/spec/grammar-utils/lisp-spec.js index 0301c02e..e87b0795 100644 --- a/spec/grammar-utils/lisp-spec.js +++ b/spec/grammar-utils/lisp-spec.js @@ -1,49 +1,48 @@ -'use babel'; - -import GrammarUtils from '../../lib/grammar-utils'; - -describe('GrammarUtils', () => - describe('Lisp', () => { - const toStatements = GrammarUtils.Lisp.splitStatements; - - it('returns empty array for empty code', () => { - const code = ''; - expect(toStatements(code)).toEqual([]); - }); - - it('does not split single statement', () => { - const code = '(print "dummy")'; - expect(toStatements(code)).toEqual([code]); - }); - - it('splits two simple statements', () => { - const code = '(print "dummy")(print "statement")'; - expect(toStatements(code)).toEqual(['(print "dummy")', '(print "statement")']); - }); - - it('splits two simple statements in many lines', () => { - const code = '(print "dummy") \n\n (print "statement")'; - expect(toStatements(code)).toEqual(['(print "dummy")', '(print "statement")']); - }); - - it('does not split single line complex statement', () => { - const code = '(when t(setq a 2)(+ i 1))'; - expect(toStatements(code)).toEqual(['(when t(setq a 2)(+ i 1))']); - }); - - it('does not split multi line complex statement', () => { - const code = '(when t(setq a 2) \n \t (+ i 1))'; - expect(toStatements(code)).toEqual(['(when t(setq a 2) \n \t (+ i 1))']); - }); - - it('splits single line complex statements', () => { - const code = '(when t(setq a 2)(+ i 1))(when t(setq a 5)(+ i 3))'; - expect(toStatements(code)).toEqual(['(when t(setq a 2)(+ i 1))', '(when t(setq a 5)(+ i 3))']); - }); - - it('splits multi line complex statements', () => { - const code = '(when t(\nsetq a 2)(+ i 1)) \n\t (when t(\n\t setq a 5)(+ i 3))'; - expect(toStatements(code)).toEqual(['(when t(\nsetq a 2)(+ i 1))', '(when t(\n\t setq a 5)(+ i 3))']); - }); - }), -); +"use babel" + +import GrammarUtils from "../../lib/grammar-utils" + +describe("GrammarUtils", () => + describe("Lisp", () => { + const toStatements = GrammarUtils.Lisp.splitStatements + + it("returns empty array for empty code", () => { + const code = "" + expect(toStatements(code)).toEqual([]) + }) + + it("does not split single statement", () => { + const code = '(print "dummy")' + expect(toStatements(code)).toEqual([code]) + }) + + it("splits two simple statements", () => { + const code = '(print "dummy")(print "statement")' + expect(toStatements(code)).toEqual(['(print "dummy")', '(print "statement")']) + }) + + it("splits two simple statements in many lines", () => { + const code = '(print "dummy") \n\n (print "statement")' + expect(toStatements(code)).toEqual(['(print "dummy")', '(print "statement")']) + }) + + it("does not split single line complex statement", () => { + const code = "(when t(setq a 2)(+ i 1))" + expect(toStatements(code)).toEqual(["(when t(setq a 2)(+ i 1))"]) + }) + + it("does not split multi line complex statement", () => { + const code = "(when t(setq a 2) \n \t (+ i 1))" + expect(toStatements(code)).toEqual(["(when t(setq a 2) \n \t (+ i 1))"]) + }) + + it("splits single line complex statements", () => { + const code = "(when t(setq a 2)(+ i 1))(when t(setq a 5)(+ i 3))" + expect(toStatements(code)).toEqual(["(when t(setq a 2)(+ i 1))", "(when t(setq a 5)(+ i 3))"]) + }) + + it("splits multi line complex statements", () => { + const code = "(when t(\nsetq a 2)(+ i 1)) \n\t (when t(\n\t setq a 5)(+ i 3))" + expect(toStatements(code)).toEqual(["(when t(\nsetq a 2)(+ i 1))", "(when t(\n\t setq a 5)(+ i 3))"]) + }) + })) diff --git a/spec/grammars-spec.js b/spec/grammars-spec.js index 4954b984..91c9463c 100644 --- a/spec/grammars-spec.js +++ b/spec/grammars-spec.js @@ -1,141 +1,137 @@ -'use babel'; +"use babel" // TODO -import tempy from 'tempy'; -import path from 'path'; +/* eslint-disable no-invalid-this */ import tempy from "tempy" +import path from "path" -/* eslint-disable no-unused-vars, global-require, no-undef */ -import CodeContext from '../lib/code-context'; -import OperatingSystem from '../lib/grammar-utils/operating-system'; -import grammarMap from '../lib/grammars'; +import CodeContext from "../lib/code-context" +import OperatingSystem from "../lib/grammar-utils/operating-system" +import grammarMap from "../lib/grammars" -describe('grammarMap', () => { - const testFile = 'test.txt'; - let testFilePath; +describe("grammarMap", () => { + const testFile = "test.txt" + let testFilePath beforeEach(() => { - testFilePath = path.join(tempy.directory(), testFile); - this.codeContext = new CodeContext(testFile, testFilePath, null); + testFilePath = path.join(tempy.directory(), testFile) + this.codeContext = new CodeContext(testFile, testFilePath, null) // TODO: Test using an actual editor or a selection? - this.dummyTextSource = {}; - this.dummyTextSource.getText = () => ''; - }); + this.dummyTextSource = {} + this.dummyTextSource.getText = () => "" + }) it("has a command and an args function set for each grammar's mode", () => { - this.codeContext.textSource = this.dummyTextSource; + this.codeContext.textSource = this.dummyTextSource for (const lang in grammarMap) { - const modes = grammarMap[lang]; + const modes = grammarMap[lang] for (const mode in modes) { - const commandContext = modes[mode]; + const commandContext = modes[mode] // TODO: fix the test for linux and windows - if (process.platform === 'darwin') { - expect(commandContext.command).toBeDefined(); + if (process.platform === "darwin") { + expect(commandContext.command).toBeDefined() } else { - /* eslint-disable no-console */ - console.warn(`This test does not work on ${process.platform}`, commandContext.command); + console.warn(`This test does not work on ${process.platform}`, commandContext.command) } - const argList = commandContext.args(this.codeContext); - expect(argList).toBeDefined(); + const argList = commandContext.args(this.codeContext) + expect(argList).toBeDefined() } } - }); + }) - describe('Operating system specific runners', () => { + describe("Operating system specific runners", () => { beforeEach(() => { - this.originalPlatform = OperatingSystem.platform; + this.originalPlatform = OperatingSystem.platform this.reloadGrammar = () => { - delete require.cache[require.resolve('../lib/grammars')]; - delete require.cache[require.resolve('../lib/grammars/index')]; - delete require.cache[require.resolve('../lib/grammars/c')]; - this.grammarMap = require('../lib/grammars'); - }; - }); + delete require.cache[require.resolve("../lib/grammars")] + delete require.cache[require.resolve("../lib/grammars/index")] + delete require.cache[require.resolve("../lib/grammars/c")] + this.grammarMap = require("../lib/grammars") + } + }) afterEach(() => { - OperatingSystem.platform = this.originalPlatform; - this.reloadGrammar(); - }); - - describe('C', () => - it('returns the appropriate File Based runner on Mac OS X', () => { - OperatingSystem.platform = () => 'darwin'; - this.reloadGrammar(); - - const grammar = this.grammarMap.C; - const fileBasedRunner = grammar['File Based']; - const args = fileBasedRunner.args(this.codeContext); - expect(fileBasedRunner.command).toEqual('bash'); - expect(args[0]).toEqual('-c'); - expect(args[1]).toMatch(/^xcrun clang/); - }), - ); - - describe('C++', () => - it('returns the appropriate File Based runner on Mac OS X', () => { - if (process.platform === 'win32') return; - OperatingSystem.platform = () => 'darwin'; - this.reloadGrammar(); - - const grammar = this.grammarMap['C++']; - const fileBasedRunner = grammar['File Based']; - const args = fileBasedRunner.args(this.codeContext); - expect(fileBasedRunner.command).toEqual('bash'); - expect(args[0]).toEqual('-c'); - expect(args[1]).toMatch(/^xcrun clang\+\+/); - }), - ); - - describe('F#', () => { + OperatingSystem.platform = this.originalPlatform + this.reloadGrammar() + }) + + describe("C", () => + it("returns the appropriate File Based runner on Mac OS X", () => { + OperatingSystem.platform = () => "darwin" + this.reloadGrammar() + + const grammar = this.grammarMap.C + const fileBasedRunner = grammar["File Based"] + const args = fileBasedRunner.args(this.codeContext) + expect(fileBasedRunner.command).toEqual("bash") + expect(args[0]).toEqual("-c") + expect(args[1]).toMatch(/^xcrun clang/) + })) + + describe("C++", () => + it("returns the appropriate File Based runner on Mac OS X", () => { + if (process.platform === "win32") { + return + } + OperatingSystem.platform = () => "darwin" + this.reloadGrammar() + + const grammar = this.grammarMap["C++"] + const fileBasedRunner = grammar["File Based"] + const args = fileBasedRunner.args(this.codeContext) + expect(fileBasedRunner.command).toEqual("bash") + expect(args[0]).toEqual("-c") + expect(args[1]).toMatch(/^xcrun clang\+\+/) + })) + + describe("F#", () => { it('returns "fsi" as command for File Based runner on Windows', () => { - OperatingSystem.platform = () => 'win32'; - this.reloadGrammar(); + OperatingSystem.platform = () => "win32" + this.reloadGrammar() - const grammar = this.grammarMap['F#']; - const fileBasedRunner = grammar['File Based']; - const args = fileBasedRunner.args(this.codeContext); - expect(fileBasedRunner.command).toEqual('fsi'); - expect(args[0]).toEqual('--exec'); - expect(args[1]).toEqual(this.codeContext.filepath); - }); + const grammar = this.grammarMap["F#"] + const fileBasedRunner = grammar["File Based"] + const args = fileBasedRunner.args(this.codeContext) + expect(fileBasedRunner.command).toEqual("fsi") + expect(args[0]).toEqual("--exec") + expect(args[1]).toEqual(this.codeContext.filepath) + }) it('returns "fsharpi" as command for File Based runner when platform is not Windows', () => { - OperatingSystem.platform = () => 'darwin'; - this.reloadGrammar(); - - const grammar = this.grammarMap['F#']; - const fileBasedRunner = grammar['File Based']; - const args = fileBasedRunner.args(this.codeContext); - expect(fileBasedRunner.command).toEqual('fsharpi'); - expect(args[0]).toEqual('--exec'); - expect(args[1]).toEqual(this.codeContext.filepath); - }); - }); - - describe('Objective-C', () => - it('returns the appropriate File Based runner on Mac OS X', () => { - OperatingSystem.platform = () => 'darwin'; - this.reloadGrammar(); - - const grammar = this.grammarMap['Objective-C']; - const fileBasedRunner = grammar['File Based']; - const args = fileBasedRunner.args(this.codeContext); - expect(fileBasedRunner.command).toEqual('bash'); - expect(args[0]).toEqual('-c'); - expect(args[1]).toMatch(/^xcrun clang/); - }), - ); - - describe('Objective-C++', () => - it('returns the appropriate File Based runner on Mac OS X', () => { - OperatingSystem.platform = () => 'darwin'; - this.reloadGrammar(); - - const grammar = this.grammarMap['Objective-C++']; - const fileBasedRunner = grammar['File Based']; - const args = fileBasedRunner.args(this.codeContext); - expect(fileBasedRunner.command).toEqual('bash'); - expect(args[0]).toEqual('-c'); - expect(args[1]).toMatch(/^xcrun clang\+\+/); - }), - ); - }); -}); + OperatingSystem.platform = () => "darwin" + this.reloadGrammar() + + const grammar = this.grammarMap["F#"] + const fileBasedRunner = grammar["File Based"] + const args = fileBasedRunner.args(this.codeContext) + expect(fileBasedRunner.command).toEqual("fsharpi") + expect(args[0]).toEqual("--exec") + expect(args[1]).toEqual(this.codeContext.filepath) + }) + }) + + describe("Objective-C", () => + it("returns the appropriate File Based runner on Mac OS X", () => { + OperatingSystem.platform = () => "darwin" + this.reloadGrammar() + + const grammar = this.grammarMap["Objective-C"] + const fileBasedRunner = grammar["File Based"] + const args = fileBasedRunner.args(this.codeContext) + expect(fileBasedRunner.command).toEqual("bash") + expect(args[0]).toEqual("-c") + expect(args[1]).toMatch(/^xcrun clang/) + })) + + describe("Objective-C++", () => + it("returns the appropriate File Based runner on Mac OS X", () => { + OperatingSystem.platform = () => "darwin" + this.reloadGrammar() + + const grammar = this.grammarMap["Objective-C++"] + const fileBasedRunner = grammar["File Based"] + const args = fileBasedRunner.args(this.codeContext) + expect(fileBasedRunner.command).toEqual("bash") + expect(args[0]).toEqual("-c") + expect(args[1]).toMatch(/^xcrun clang\+\+/) + })) + }) +}) diff --git a/spec/link-paths-spec.js b/spec/link-paths-spec.js index a1700262..aff5c1ff 100644 --- a/spec/link-paths-spec.js +++ b/spec/link-paths-spec.js @@ -1,33 +1,32 @@ -'use babel'; +"use babel" -import linkPaths from '../lib/link-paths'; +import linkPaths from "../lib/link-paths" -describe('linkPaths', () => { - it('detects file paths with line numbers', () => { - const result = linkPaths('foo() b/c.js:44:55'); - expect(result).toContain('foo() { + it("detects file paths with line numbers", () => { + const result = linkPaths("foo() b/c.js:44:55") + expect(result).toContain("foo() { - const result = linkPaths('foo() C:/b/c.js:44:55'); - expect(result).toContain('data-path="C:/b/c.js"'); - }); + it("detects file paths with Windows style drive prefix", () => { + const result = linkPaths("foo() C:/b/c.js:44:55") + expect(result).toContain('data-path="C:/b/c.js"') + }) - it('allow ommitting the column number', () => { - const result = linkPaths('foo() b/c.js:44'); - expect(result).toContain('data-line="44"'); - expect(result).toContain('data-column=""'); - }); + it("allow ommitting the column number", () => { + const result = linkPaths("foo() b/c.js:44") + expect(result).toContain('data-line="44"') + expect(result).toContain('data-column=""') + }) - it('links multiple paths', () => { - const multilineResult = linkPaths('foo() b/c.js:44:5\nbar() b/c.js:45:56', - ); - expect(multilineResult).toContain('foo() { + const multilineResult = linkPaths("foo() b/c.js:44:5\nbar() b/c.js:45:56") + expect(multilineResult).toContain("foo() { +describe("Runner", () => { beforeEach(() => { - this.command = 'node'; - this.runOptions = new ScriptOptions(); - this.runOptions.cmd = this.command; - this.runner = new Runner(this.runOptions); - }); + this.command = "node" + this.runOptions = new ScriptOptions() + this.runOptions.cmd = this.command + this.runner = new Runner(this.runOptions) + }) afterEach(() => { - this.runner.destroy(); - }); + this.runner.destroy() + }) - describe('run', () => { - it('with no input', () => { + describe("run", () => { + it("with no input", () => { runs(() => { - this.output = null; + this.output = null this.runner.onDidWriteToStdout((output) => { - this.output = output; - }); - this.runner.run(this.command, ['./spec/fixtures/outputTest.js'], {}); - }); + this.output = output + }) + this.runner.run(this.command, ["./spec/fixtures/outputTest.js"], {}) + }) - waitsFor(() => this.output !== null, 'File should execute', 2000); + waitsFor(() => this.output !== null, "File should execute", 2000) - runs(() => expect(this.output).toEqual({ message: 'hello\n' })); - }); + runs(() => expect(this.output).toEqual({ message: "hello\n" })) + }) - it('with an input string', () => { + it("with an input string", () => { runs(() => { - this.output = null; + this.output = null this.runner.onDidWriteToStdout((output) => { - this.output = output; - }); - this.runner.run(this.command, ['./spec/fixtures/ioTest.js'], {}, 'hello'); - }); + this.output = output + }) + this.runner.run(this.command, ["./spec/fixtures/ioTest.js"], {}, "hello") + }) - waitsFor(() => this.output !== null, 'File should execute', 2000); + waitsFor(() => this.output !== null, "File should execute", 2000) - runs(() => expect(this.output).toEqual({ message: 'TEST: hello\n' })); - }); + runs(() => expect(this.output).toEqual({ message: "TEST: hello\n" })) + }) - it('exits', () => { + it("exits", () => { runs(() => { - this.exited = false; + this.exited = false this.runner.onDidExit(() => { - this.exited = true; - }); - this.runner.run(this.command, ['./spec/fixtures/outputTest.js'], {}); - }); + this.exited = true + }) + this.runner.run(this.command, ["./spec/fixtures/outputTest.js"], {}) + }) - waitsFor(() => this.exited, 'Should receive exit callback', 2000); - }); + waitsFor(() => this.exited, "Should receive exit callback", 2000) + }) - it('notifies about writing to stderr', () => { + it("notifies about writing to stderr", () => { runs(() => { - this.failedEvent = null; + this.failedEvent = null this.runner.onDidWriteToStderr((event) => { - this.failedEvent = event; - }); - this.runner.run(this.command, ['./spec/fixtures/throw.js'], {}); - }); + this.failedEvent = event + }) + this.runner.run(this.command, ["./spec/fixtures/throw.js"], {}) + }) - waitsFor(() => this.failedEvent, 'Should receive failure callback', 2000); + waitsFor(() => this.failedEvent, "Should receive failure callback", 2000) - runs(() => expect(this.failedEvent.message).toMatch(/kaboom/)); - }); + runs(() => expect(this.failedEvent.message).toMatch(/kaboom/)) + }) - it('terminates stdin', () => { + it("terminates stdin", () => { runs(() => { - this.output = null; + this.output = null this.runner.onDidWriteToStdout((output) => { - this.output = output; - }); - this.runner.run(this.command, ['./spec/fixtures/stdinEndTest.js'], {}, 'unused input'); - }); + this.output = output + }) + this.runner.run(this.command, ["./spec/fixtures/stdinEndTest.js"], {}, "unused input") + }) - waitsFor(() => this.output !== null, 'File should execute', 2000); + waitsFor(() => this.output !== null, "File should execute", 2000) - runs(() => expect(this.output).toEqual({ message: 'stdin terminated\n' })); - }); - }); -}); + runs(() => expect(this.output).toEqual({ message: "stdin terminated\n" })) + }) + }) +}) diff --git a/spec/script-options-spec.js b/spec/script-options-spec.js index a4dfdbca..4b5414c9 100644 --- a/spec/script-options-spec.js +++ b/spec/script-options-spec.js @@ -1,56 +1,55 @@ -'use babel'; +"use babel" // TODO +/* eslint-disable no-invalid-this */ import ScriptOptions from "../lib/script-options" -/* eslint-disable no-underscore-dangle */ -import ScriptOptions from '../lib/script-options'; - -describe('ScriptOptions', () => { +describe("ScriptOptions", () => { beforeEach(() => { - this.scriptOptions = new ScriptOptions(); + this.scriptOptions = new ScriptOptions() this.dummyEnv = { - SCRIPT_CI: 'true', - SCRIPT_ENV: 'test', - _NUMBERS: '123', - }; - this.dummyEnvString = "SCRIPT_CI=true;SCRIPT_ENV='test';_NUMBERS=\"123\""; - }); + SCRIPT_CI: "true", + SCRIPT_ENV: "test", + _NUMBERS: "123", + } + this.dummyEnvString = "SCRIPT_CI=true;SCRIPT_ENV='test';_NUMBERS=\"123\"" + }) - describe('getEnv', () => { - it('should default to an empty env object', () => { - const env = this.scriptOptions.getEnv(); - expect(env).toEqual({}); - }); + describe("getEnv", () => { + it("should default to an empty env object", () => { + const env = this.scriptOptions.getEnv() + expect(env).toEqual({}) + }) - it('should parse a custom user environment', () => { - this.scriptOptions.env = this.dummyEnvString; - const env = this.scriptOptions.getEnv(); - expect(env).toEqual(this.dummyEnv); - }); - }); + it("should parse a custom user environment", () => { + this.scriptOptions.env = this.dummyEnvString + const env = this.scriptOptions.getEnv() + expect(env).toEqual(this.dummyEnv) + }) + }) - describe('mergedEnv', () => { - it('should default to the orignal env object', () => { - const mergedEnv = this.scriptOptions.mergedEnv(this.dummyEnv); - expect(mergedEnv).toEqual(this.dummyEnv); - }); + describe("mergedEnv", () => { + it("should default to the orignal env object", () => { + const mergedEnv = this.scriptOptions.mergedEnv(this.dummyEnv) + expect(mergedEnv).toEqual(this.dummyEnv) + }) - it('should retain the original environment', () => { - this.scriptOptions.env = "TEST_VAR_1=one;TEST_VAR_2=\"two\";TEST_VAR_3='three'"; - const mergedEnv = this.scriptOptions.mergedEnv(this.dummyEnv); - expect(mergedEnv.SCRIPT_CI).toEqual('true'); - expect(mergedEnv.SCRIPT_ENV).toEqual('test'); - expect(mergedEnv._NUMBERS).toEqual('123'); - expect(mergedEnv.TEST_VAR_1).toEqual('one'); - expect(mergedEnv.TEST_VAR_2).toEqual('two'); - expect(mergedEnv.TEST_VAR_3).toEqual('three'); - }); + it("should retain the original environment", () => { + this.scriptOptions.env = "TEST_VAR_1=one;TEST_VAR_2=\"two\";TEST_VAR_3='three'" + const mergedEnv = this.scriptOptions.mergedEnv(this.dummyEnv) + expect(mergedEnv.SCRIPT_CI).toEqual("true") + expect(mergedEnv.SCRIPT_ENV).toEqual("test") + expect(mergedEnv._NUMBERS).toEqual("123") + expect(mergedEnv.TEST_VAR_1).toEqual("one") + expect(mergedEnv.TEST_VAR_2).toEqual("two") + expect(mergedEnv.TEST_VAR_3).toEqual("three") + }) - it('should support special character values', () => { - this.scriptOptions.env = "TEST_VAR_1=o-n-e;TEST_VAR_2=\"nested\\\"doublequotes\\\"\";TEST_VAR_3='nested\\'singlequotes\\'';TEST_VAR_4='s p a c e s'"; - const mergedEnv = this.scriptOptions.mergedEnv(this.dummyEnv); - expect(mergedEnv.TEST_VAR_1).toEqual('o-n-e'); - expect(mergedEnv.TEST_VAR_2).toEqual('nested\\"doublequotes\\"'); - expect(mergedEnv.TEST_VAR_3).toEqual("nested\\'singlequotes\\'"); - expect(mergedEnv.TEST_VAR_4).toEqual('s p a c e s'); - }); - }); -}); + it("should support special character values", () => { + this.scriptOptions.env = + "TEST_VAR_1=o-n-e;TEST_VAR_2=\"nested\\\"doublequotes\\\"\";TEST_VAR_3='nested\\'singlequotes\\'';TEST_VAR_4='s p a c e s'" + const mergedEnv = this.scriptOptions.mergedEnv(this.dummyEnv) + expect(mergedEnv.TEST_VAR_1).toEqual("o-n-e") + expect(mergedEnv.TEST_VAR_2).toEqual('nested\\"doublequotes\\"') + expect(mergedEnv.TEST_VAR_3).toEqual("nested\\'singlequotes\\'") + expect(mergedEnv.TEST_VAR_4).toEqual("s p a c e s") + }) + }) +}) diff --git a/spec/script-options-view-spec.js b/spec/script-options-view-spec.js index 552b77c1..dbd929b3 100644 --- a/spec/script-options-view-spec.js +++ b/spec/script-options-view-spec.js @@ -1,67 +1,80 @@ -'use babel'; +"use babel" -/* eslint-disable no-underscore-dangle */ -import ScriptOptionsView from '../lib/script-options-view'; +import ScriptOptionsView from "../lib/script-options-view" -describe('ScriptOptionsView', () => { - describe('splitArgs', () => { - [{ - text: '', - expectedArgs: [], - description: 'returns an empty array for empty string', - }, { - text: ' \t\n', - expectedArgs: [], - description: 'returns an empty array for just whitespace', - }, { - text: 'arg1 arg2', - expectedArgs: ['arg1', 'arg2'], - description: 'splits arguments on whitespace', - }, { - text: 'arg1=val1 arg2', - expectedArgs: ['arg1=val1', 'arg2'], - description: 'keeps argument values', - }, { - text: '"foo bar" arg2', - expectedArgs: ['foo bar', 'arg2'], - description: 'does not split quoted arguments on whitespace', - }, { - text: '\'foo bar\' arg2', - expectedArgs: ['foo bar', 'arg2'], - description: 'recognizes single quotes', - }, { - text: '"foo bar" "another string"', - expectedArgs: ['foo bar', 'another string'], - description: 'handles multiple quoted arguments', - }, { - text: '\'foo bar\' \'another string\'', - expectedArgs: ['foo bar', 'another string'], - description: 'handles multiple single quoted arguments', - }, { - text: '"foo bar" \'another string\'', - expectedArgs: ['foo bar', 'another string'], - description: 'handles multiple quoted arguments, with mixed single and double quotes', - }, { - text: 'arg1="foo bar"', - expectedArgs: ['arg1=foo bar'], - description: 'strips quotes from argument values', - }, { - text: 'arg1=\'foo bar\'', - expectedArgs: ['arg1=foo bar'], - description: 'strips single quotes from argument values', - }, { - text: '-e \'(load "{FILE_ACTIVE}")\'', - expectedArgs: ['-e', '(load "{FILE_ACTIVE}")'], - description: 'keeps nested quotes intact', - }, { - text: 'we"ird way to inc"l"ude spaces in arg"s', - expectedArgs: ['weird way to include spaces in args'], - description: 'supports multiple top level quotes', - }].forEach(({ text, expectedArgs, description }) => { +describe("ScriptOptionsView", () => { + describe("splitArgs", () => { + ;[ + { + text: "", + expectedArgs: [], + description: "returns an empty array for empty string", + }, + { + text: " \t\n", + expectedArgs: [], + description: "returns an empty array for just whitespace", + }, + { + text: "arg1 arg2", + expectedArgs: ["arg1", "arg2"], + description: "splits arguments on whitespace", + }, + { + text: "arg1=val1 arg2", + expectedArgs: ["arg1=val1", "arg2"], + description: "keeps argument values", + }, + { + text: '"foo bar" arg2', + expectedArgs: ["foo bar", "arg2"], + description: "does not split quoted arguments on whitespace", + }, + { + text: "'foo bar' arg2", + expectedArgs: ["foo bar", "arg2"], + description: "recognizes single quotes", + }, + { + text: '"foo bar" "another string"', + expectedArgs: ["foo bar", "another string"], + description: "handles multiple quoted arguments", + }, + { + text: "'foo bar' 'another string'", + expectedArgs: ["foo bar", "another string"], + description: "handles multiple single quoted arguments", + }, + { + text: "\"foo bar\" 'another string'", + expectedArgs: ["foo bar", "another string"], + description: "handles multiple quoted arguments, with mixed single and double quotes", + }, + { + text: 'arg1="foo bar"', + expectedArgs: ["arg1=foo bar"], + description: "strips quotes from argument values", + }, + { + text: "arg1='foo bar'", + expectedArgs: ["arg1=foo bar"], + description: "strips single quotes from argument values", + }, + { + text: "-e '(load \"{FILE_ACTIVE}\")'", + expectedArgs: ["-e", '(load "{FILE_ACTIVE}")'], + description: "keeps nested quotes intact", + }, + { + text: 'we"ird way to inc"l"ude spaces in arg"s', + expectedArgs: ["weird way to include spaces in args"], + description: "supports multiple top level quotes", + }, + ].forEach(({ text, expectedArgs, description }) => { it(description, () => { - const args = ScriptOptionsView.splitArgs(text); - expect(args).toEqual(expectedArgs); - }); - }); - }); -}); + const args = ScriptOptionsView.splitArgs(text) + expect(args).toEqual(expectedArgs) + }) + }) + }) +}) diff --git a/styles/script.less b/styles/script.less index fd3dd1c3..b0f873dc 100644 --- a/styles/script.less +++ b/styles/script.less @@ -51,7 +51,8 @@ .buttons { margin-top: 1rem; - .rename, .cancel { + .rename, + .cancel { float: left; margin-right: 5px; } From 228962767e0a217766ccf8d58050332e41db04b0 Mon Sep 17 00:00:00 2001 From: Amin Yahyaabadi Date: Sun, 21 Mar 2021 11:28:02 -0500 Subject: [PATCH 5/7] chore: format --- lib/runtime.js | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/lib/runtime.js b/lib/runtime.js index 806e3678..d4b2f71b 100644 --- a/lib/runtime.js +++ b/lib/runtime.js @@ -73,7 +73,9 @@ export default class Runtime { console.log("No terminal found") } - if (atom.config.get("script.stopOnRerun")) this.stop() + if (atom.config.get("script.stopOnRerun")) { + this.stop() + } this.emitter.emit("start") if (!commandContext) { From aa52f2854e9ae130816f8eab953ddc4aea0b7870 Mon Sep 17 00:00:00 2001 From: Tony Brix Date: Sun, 21 Mar 2021 12:15:09 -0500 Subject: [PATCH 6/7] chore(ci): only run ci on push to master --- .github/workflows/CI.yml | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/.github/workflows/CI.yml b/.github/workflows/CI.yml index 9bd21c5f..41b3773a 100644 --- a/.github/workflows/CI.yml +++ b/.github/workflows/CI.yml @@ -1,7 +1,9 @@ name: CI on: - - pull_request - - push + pull_request: + push: + branches: + - master jobs: Test: From 0a4d3b2768114c394f9bdd71ee30024ceaf4c1c6 Mon Sep 17 00:00:00 2001 From: Amin Yahyaabadi Date: Sun, 21 Mar 2021 12:31:19 -0500 Subject: [PATCH 7/7] fix: do not clean the terminal on running Co-authored-by: Tony Brix --- lib/runtime.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/runtime.js b/lib/runtime.js index d4b2f71b..c1350646 100644 --- a/lib/runtime.js +++ b/lib/runtime.js @@ -67,7 +67,7 @@ export default class Runtime { for (let i = 0; i < commandContext.args.length; i++) { command += ` "${commandContext.args[i]}"` } - terminal.run([`printf "\\33c\\e[3J" && ${command}`]) + terminal.run([command]) return } else { console.log("No terminal found")