From 4d4ed174e917189382eb5cd1aa7ef78a21224e16 Mon Sep 17 00:00:00 2001 From: Mike Phares Date: Sun, 19 Jan 2020 16:18:01 -0700 Subject: [PATCH] Helper --- type-script-helper-0.0.1.vsix | Bin 0 -> 4904 bytes type-script-helper-1.0.0.vsix | Bin 0 -> 4627 bytes type-script-helper-1.0.1.vsix | Bin 0 -> 5410 bytes type-script-helper-1.1.0.vsix | Bin 0 -> 5527 bytes type-script-helper-1.1.1.vsix | Bin 0 -> 5547 bytes type-script-helper-1.1.2.vsix | Bin 0 -> 5600 bytes type-script-helper-1.1.3.vsix | Bin 0 -> 5611 bytes type-script-helper-1.1.4.vsix | Bin 0 -> 5631 bytes type-script-helper-1.1.5.vsix | Bin 0 -> 5712 bytes type-script-helper/.gitignore | 4 + type-script-helper/.vscode/extensions.json | 7 + type-script-helper/.vscode/launch.json | 36 + type-script-helper/.vscode/settings.json | 11 + type-script-helper/.vscode/tasks.json | 20 + type-script-helper/.vscodeignore | 10 + type-script-helper/CHANGELOG.md | 9 + type-script-helper/README.md | 50 + type-script-helper/package-lock.json | 1030 +++++++++++++++++ type-script-helper/package.json | 74 ++ type-script-helper/src/extension.ts | 44 + type-script-helper/src/helper.ts | 246 ++++ type-script-helper/src/test/runTest.ts | 23 + .../src/test/suite/extension.test.ts | 15 + type-script-helper/src/test/suite/index.ts | 37 + type-script-helper/tsconfig.json | 21 + type-script-helper/tslint.json | 15 + .../vsc-extension-quickstart.md | 42 + 27 files changed, 1694 insertions(+) create mode 100644 type-script-helper-0.0.1.vsix create mode 100644 type-script-helper-1.0.0.vsix create mode 100644 type-script-helper-1.0.1.vsix create mode 100644 type-script-helper-1.1.0.vsix create mode 100644 type-script-helper-1.1.1.vsix create mode 100644 type-script-helper-1.1.2.vsix create mode 100644 type-script-helper-1.1.3.vsix create mode 100644 type-script-helper-1.1.4.vsix create mode 100644 type-script-helper-1.1.5.vsix create mode 100644 type-script-helper/.gitignore create mode 100644 type-script-helper/.vscode/extensions.json create mode 100644 type-script-helper/.vscode/launch.json create mode 100644 type-script-helper/.vscode/settings.json create mode 100644 type-script-helper/.vscode/tasks.json create mode 100644 type-script-helper/.vscodeignore create mode 100644 type-script-helper/CHANGELOG.md create mode 100644 type-script-helper/README.md create mode 100644 type-script-helper/package-lock.json create mode 100644 type-script-helper/package.json create mode 100644 type-script-helper/src/extension.ts create mode 100644 type-script-helper/src/helper.ts create mode 100644 type-script-helper/src/test/runTest.ts create mode 100644 type-script-helper/src/test/suite/extension.test.ts create mode 100644 type-script-helper/src/test/suite/index.ts create mode 100644 type-script-helper/tsconfig.json create mode 100644 type-script-helper/tslint.json create mode 100644 type-script-helper/vsc-extension-quickstart.md diff --git a/type-script-helper-0.0.1.vsix b/type-script-helper-0.0.1.vsix new file mode 100644 index 0000000000000000000000000000000000000000..0d71039c411712a2b1fb8864428b8ebd7cb26622 GIT binary patch literal 4904 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 K2!6aDZ~p_c9j!Y6 literal 0 HcmV?d00001 diff --git a/type-script-helper-1.0.0.vsix b/type-script-helper-1.0.0.vsix new file mode 100644 index 0000000000000000000000000000000000000000..1e57053895bced2d7712dfbb17c6db4f577cf5de GIT binary patch literal 4627 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 literal 0 HcmV?d00001 diff --git a/type-script-helper-1.0.1.vsix b/type-script-helper-1.0.1.vsix new file mode 100644 index 0000000000000000000000000000000000000000..5deb1032debc2cee94c102abc01dacd1dab53802 GIT binary patch literal 5410 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 Ao&W#< literal 0 HcmV?d00001 diff --git a/type-script-helper-1.1.0.vsix b/type-script-helper-1.1.0.vsix new file mode 100644 index 0000000000000000000000000000000000000000..9a0ebc62b6a3814b7ade672d44980b77d8fc48bf GIT binary patch literal 5527 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 HwgUbKujtku literal 0 HcmV?d00001 diff --git a/type-script-helper-1.1.1.vsix b/type-script-helper-1.1.1.vsix new file mode 100644 index 0000000000000000000000000000000000000000..0bc265eaea818f707bebfc48ec6bbdf7004e84d0 GIT binary patch literal 5547 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 literal 0 HcmV?d00001 diff --git a/type-script-helper/.gitignore b/type-script-helper/.gitignore new file mode 100644 index 0000000..5fe00fe --- /dev/null +++ b/type-script-helper/.gitignore @@ -0,0 +1,4 @@ +out +node_modules +.vscode-test/ +*.vsix diff --git a/type-script-helper/.vscode/extensions.json b/type-script-helper/.vscode/extensions.json new file mode 100644 index 0000000..0a18b9c --- /dev/null +++ b/type-script-helper/.vscode/extensions.json @@ -0,0 +1,7 @@ +{ + // See http://go.microsoft.com/fwlink/?LinkId=827846 + // for the documentation about the extensions.json format + "recommendations": [ + "ms-vscode.vscode-typescript-tslint-plugin" + ] +} \ No newline at end of file diff --git a/type-script-helper/.vscode/launch.json b/type-script-helper/.vscode/launch.json new file mode 100644 index 0000000..b1fbaf5 --- /dev/null +++ b/type-script-helper/.vscode/launch.json @@ -0,0 +1,36 @@ +// A launch configuration that compiles the extension and then opens it inside a new window +// Use IntelliSense to learn about possible attributes. +// Hover to view descriptions of existing attributes. +// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 +{ + "version": "0.2.0", + "configurations": [ + { + "name": "Run Extension", + "type": "extensionHost", + "request": "launch", + "runtimeExecutable": "${execPath}", + "args": [ + "--extensionDevelopmentPath=${workspaceFolder}" + ], + "outFiles": [ + "${workspaceFolder}/out/**/*.js" + ], + "preLaunchTask": "${defaultBuildTask}" + }, + { + "name": "Extension Tests", + "type": "extensionHost", + "request": "launch", + "runtimeExecutable": "${execPath}", + "args": [ + "--extensionDevelopmentPath=${workspaceFolder}", + "--extensionTestsPath=${workspaceFolder}/out/test/suite/index" + ], + "outFiles": [ + "${workspaceFolder}/out/test/**/*.js" + ], + "preLaunchTask": "${defaultBuildTask}" + } + ] +} diff --git a/type-script-helper/.vscode/settings.json b/type-script-helper/.vscode/settings.json new file mode 100644 index 0000000..30bf8c2 --- /dev/null +++ b/type-script-helper/.vscode/settings.json @@ -0,0 +1,11 @@ +// Place your settings in this file to overwrite default and user settings. +{ + "files.exclude": { + "out": false // set this to true to hide the "out" folder with the compiled JS files + }, + "search.exclude": { + "out": true // set this to false to include "out" folder in search results + }, + // Turn off tsc task auto detection since we have the necessary tasks as npm scripts + "typescript.tsc.autoDetect": "off" +} \ No newline at end of file diff --git a/type-script-helper/.vscode/tasks.json b/type-script-helper/.vscode/tasks.json new file mode 100644 index 0000000..3b17e53 --- /dev/null +++ b/type-script-helper/.vscode/tasks.json @@ -0,0 +1,20 @@ +// See https://go.microsoft.com/fwlink/?LinkId=733558 +// for the documentation about the tasks.json format +{ + "version": "2.0.0", + "tasks": [ + { + "type": "npm", + "script": "watch", + "problemMatcher": "$tsc-watch", + "isBackground": true, + "presentation": { + "reveal": "never" + }, + "group": { + "kind": "build", + "isDefault": true + } + } + ] +} diff --git a/type-script-helper/.vscodeignore b/type-script-helper/.vscodeignore new file mode 100644 index 0000000..ed3f9d3 --- /dev/null +++ b/type-script-helper/.vscodeignore @@ -0,0 +1,10 @@ +.vscode/** +.vscode-test/** +out/test/** +src/** +.gitignore +vsc-extension-quickstart.md +**/tsconfig.json +**/tslint.json +**/*.map +**/*.ts \ No newline at end of file diff --git a/type-script-helper/CHANGELOG.md b/type-script-helper/CHANGELOG.md new file mode 100644 index 0000000..4a94886 --- /dev/null +++ b/type-script-helper/CHANGELOG.md @@ -0,0 +1,9 @@ +# Change Log + +All notable changes to the "type-script-helper" extension will be documented in this file. + +Check [Keep a Changelog](http://keepachangelog.com/) for recommendations on how to structure this file. + +## [Unreleased] + +- Initial release \ No newline at end of file diff --git a/type-script-helper/README.md b/type-script-helper/README.md new file mode 100644 index 0000000..3f6ad48 --- /dev/null +++ b/type-script-helper/README.md @@ -0,0 +1,50 @@ +# type-script-helper README + +Helpers + +## Features + +See Contributions tab + +## Requirements + +None + +## Extension Settings + +None + +## Known Issues + +None + +## Release Notes + +cd "C:\Users\phares\source\yo_vscode" +yo code +Type Script Helper +(type-script-helper) +Modify .package +Add publisher +cd type-script-helper +vsce package + +F1 +Extensions: Install from VSIX + +### 1.0.0 + +Initial release of ... + +### 1.0.1 + +Fixed issue in replace function +https://stackoverflow.com/questions/37197311/in-typescript-string-replace-only-replaces-first-occurrence-of-matched-string +Added split(' group by ').join('\r\n GROUP BY '). + +### 1.1.0 +----------------------------------------------------------------------------------------------------------- + +## Working with Markdown + +### For more information diff --git a/type-script-helper/package-lock.json b/type-script-helper/package-lock.json new file mode 100644 index 0000000..677c572 --- /dev/null +++ b/type-script-helper/package-lock.json @@ -0,0 +1,1030 @@ +{ + "name": "type-script-helper", + "version": "0.0.1", + "lockfileVersion": 1, + "requires": true, + "dependencies": { + "@babel/code-frame": { + "version": "7.5.5", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.5.5.tgz", + "integrity": "sha512-27d4lZoomVyo51VegxI20xZPuSHusqbQag/ztrBC7wegWoQ1nLREPVSKSW8byhTlzTKyNE4ifaTA6lCp7JjpFw==", + "dev": true, + "requires": { + "@babel/highlight": "^7.0.0" + } + }, + "@babel/highlight": { + "version": "7.5.0", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.5.0.tgz", + "integrity": "sha512-7dV4eu9gBxoM0dAnj/BCFDW9LFU0zvTrkq0ugM7pnHEgguOEeOz1so2ZghEdzviYzQEED0r4EAgpsBChKy1TRQ==", + "dev": true, + "requires": { + "chalk": "^2.0.0", + "esutils": "^2.0.2", + "js-tokens": "^4.0.0" + } + }, + "@types/events": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@types/events/-/events-3.0.0.tgz", + "integrity": "sha512-EaObqwIvayI5a8dCzhFrjKzVwKLxjoG9T6Ppd5CEo07LRKfQ8Yokw54r5+Wq7FaBQ+yXRvQAYPrHwya1/UFt9g==", + "dev": true + }, + "@types/glob": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.1.1.tgz", + "integrity": "sha512-1Bh06cbWJUHMC97acuD6UMG29nMt0Aqz1vF3guLfG+kHHJhy3AyohZFFxYk2f7Q1SQIrNwvncxAE0N/9s70F2w==", + "dev": true, + "requires": { + "@types/events": "*", + "@types/minimatch": "*", + "@types/node": "*" + } + }, + "@types/minimatch": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.3.tgz", + "integrity": "sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA==", + "dev": true + }, + "@types/mocha": { + "version": "5.2.7", + "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-5.2.7.tgz", + "integrity": "sha512-NYrtPht0wGzhwe9+/idPaBB+TqkY9AhTvOLMkThm0IoEfLaiVQZwBwyJ5puCkO3AUCWrmcoePjp2mbFocKy4SQ==", + "dev": true + }, + "@types/node": { + "version": "12.12.14", + "resolved": "https://registry.npmjs.org/@types/node/-/node-12.12.14.tgz", + "integrity": "sha512-u/SJDyXwuihpwjXy7hOOghagLEV1KdAST6syfnOk6QZAMzZuWZqXy5aYYZbh8Jdpd4escVFP0MvftHNDb9pruA==", + "dev": true + }, + "@types/vscode": { + "version": "1.40.0", + "resolved": "https://registry.npmjs.org/@types/vscode/-/vscode-1.40.0.tgz", + "integrity": "sha512-5kEIxL3qVRkwhlMerxO7XuMffa+0LBl+iG2TcRa0NsdoeSFLkt/9hJ02jsi/Kvc6y8OVF2N2P2IHP5S4lWf/5w==", + "dev": true + }, + "agent-base": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-4.3.0.tgz", + "integrity": "sha512-salcGninV0nPrwpGNn4VTXBb1SOuXQBiqbrNXoeizJsHrsL6ERFM2Ne3JUSBWRE6aeNJI2ROP/WEEIDUiDe3cg==", + "dev": true, + "requires": { + "es6-promisify": "^5.0.0" + } + }, + "ansi-colors": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-3.2.3.tgz", + "integrity": "sha512-LEHHyuhlPY3TmuUYMh2oz89lTShfvgbmzaBcxve9t/9Wuy7Dwf4yoAKcND7KFT1HAQfqZ12qtc+DUrBMeKF9nw==", + "dev": true + }, + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true + }, + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "requires": { + "sprintf-js": "~1.0.2" + } + }, + "balanced-match": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", + "dev": true + }, + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "browser-stdout": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", + "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", + "dev": true + }, + "builtin-modules": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz", + "integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=", + "dev": true + }, + "camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "dependencies": { + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "cliui": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", + "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", + "dev": true, + "requires": { + "string-width": "^3.1.0", + "strip-ansi": "^5.2.0", + "wrap-ansi": "^5.1.0" + }, + "dependencies": { + "ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "dev": true + }, + "string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "dev": true, + "requires": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + } + }, + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "requires": { + "ansi-regex": "^4.1.0" + } + } + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + }, + "commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "dev": true + }, + "debug": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", + "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + }, + "decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", + "dev": true + }, + "define-properties": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", + "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", + "dev": true, + "requires": { + "object-keys": "^1.0.12" + } + }, + "diff": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz", + "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==", + "dev": true + }, + "emoji-regex": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", + "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", + "dev": true + }, + "es-abstract": { + "version": "1.16.2", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.16.2.tgz", + "integrity": "sha512-jYo/J8XU2emLXl3OLwfwtuFfuF2w6DYPs+xy9ZfVyPkDcrauu6LYrw/q2TyCtrbc/KUdCiC5e9UajRhgNkVopA==", + "dev": true, + "requires": { + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1", + "is-callable": "^1.1.4", + "is-regex": "^1.0.4", + "object-inspect": "^1.7.0", + "object-keys": "^1.1.1", + "string.prototype.trimleft": "^2.1.0", + "string.prototype.trimright": "^2.1.0" + } + }, + "es-to-primitive": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", + "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "dev": true, + "requires": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + } + }, + "es6-promise": { + "version": "4.2.8", + "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.8.tgz", + "integrity": "sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==", + "dev": true + }, + "es6-promisify": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/es6-promisify/-/es6-promisify-5.0.0.tgz", + "integrity": "sha1-UQnWLz5W6pZ8S2NQWu8IKRyKUgM=", + "dev": true, + "requires": { + "es6-promise": "^4.0.3" + } + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "dev": true + }, + "esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "dev": true + }, + "esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true + }, + "find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "dev": true, + "requires": { + "locate-path": "^3.0.0" + } + }, + "flat": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/flat/-/flat-4.1.0.tgz", + "integrity": "sha512-Px/TiLIznH7gEDlPXcUD4KnBusa6kR6ayRUVcnEAbreRIuhkqow/mun59BuRXwoYk7ZQOLW1ZM05ilIvK38hFw==", + "dev": true, + "requires": { + "is-buffer": "~2.0.3" + } + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "dev": true + }, + "function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "dev": true + }, + "get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true + }, + "glob": { + "version": "7.1.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", + "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "growl": { + "version": "1.10.5", + "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz", + "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==", + "dev": true + }, + "has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dev": true, + "requires": { + "function-bind": "^1.1.1" + } + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true + }, + "has-symbols": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz", + "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==", + "dev": true + }, + "he": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", + "dev": true + }, + "http-proxy-agent": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-2.1.0.tgz", + "integrity": "sha512-qwHbBLV7WviBl0rQsOzH6o5lwyOIvwp/BdFnvVxXORldu5TmjFfjzBcWUWS5kWAZhmv+JtiDhSuQCp4sBfbIgg==", + "dev": true, + "requires": { + "agent-base": "4", + "debug": "3.1.0" + }, + "dependencies": { + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + } + } + }, + "https-proxy-agent": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-2.2.4.tgz", + "integrity": "sha512-OmvfoQ53WLjtA9HeYP9RNrWMJzzAz1JGaSFr1nijg0PVR1JaD/xbJq1mdEIIlxGpXp9eSe/O2LgU9DJmTPd0Eg==", + "dev": true, + "requires": { + "agent-base": "^4.3.0", + "debug": "^3.1.0" + } + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "dev": true, + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "is-buffer": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.4.tgz", + "integrity": "sha512-Kq1rokWXOPXWuaMAqZiJW4XxsmD9zGx9q4aePabbn3qCRGedtH7Cm+zV8WETitMfu1wdh+Rvd6w5egwSngUX2A==", + "dev": true + }, + "is-callable": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.4.tgz", + "integrity": "sha512-r5p9sxJjYnArLjObpjA4xu5EKI3CuKHkJXMhT7kwbpUyIFD1n5PMAsoPvWnvtZiNz7LjkYDRZhd7FlI0eMijEA==", + "dev": true + }, + "is-date-object": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.1.tgz", + "integrity": "sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY=", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true + }, + "is-regex": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.4.tgz", + "integrity": "sha1-VRdIm1RwkbCTDglWVM7SXul+lJE=", + "dev": true, + "requires": { + "has": "^1.0.1" + } + }, + "is-symbol": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.3.tgz", + "integrity": "sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ==", + "dev": true, + "requires": { + "has-symbols": "^1.0.1" + } + }, + "isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", + "dev": true + }, + "js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true + }, + "js-yaml": { + "version": "3.13.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz", + "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==", + "dev": true, + "requires": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + } + }, + "locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "dev": true, + "requires": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + } + }, + "lodash": { + "version": "4.17.15", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", + "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==", + "dev": true + }, + "log-symbols": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-2.2.0.tgz", + "integrity": "sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg==", + "dev": true, + "requires": { + "chalk": "^2.0.1" + } + }, + "minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "dev": true, + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "minimist": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", + "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", + "dev": true + }, + "mkdirp": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", + "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", + "dev": true, + "requires": { + "minimist": "0.0.8" + } + }, + "mocha": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-6.2.2.tgz", + "integrity": "sha512-FgDS9Re79yU1xz5d+C4rv1G7QagNGHZ+iXF81hO8zY35YZZcLEsJVfFolfsqKFWunATEvNzMK0r/CwWd/szO9A==", + "dev": true, + "requires": { + "ansi-colors": "3.2.3", + "browser-stdout": "1.3.1", + "debug": "3.2.6", + "diff": "3.5.0", + "escape-string-regexp": "1.0.5", + "find-up": "3.0.0", + "glob": "7.1.3", + "growl": "1.10.5", + "he": "1.2.0", + "js-yaml": "3.13.1", + "log-symbols": "2.2.0", + "minimatch": "3.0.4", + "mkdirp": "0.5.1", + "ms": "2.1.1", + "node-environment-flags": "1.0.5", + "object.assign": "4.1.0", + "strip-json-comments": "2.0.1", + "supports-color": "6.0.0", + "which": "1.3.1", + "wide-align": "1.1.3", + "yargs": "13.3.0", + "yargs-parser": "13.1.1", + "yargs-unparser": "1.6.0" + }, + "dependencies": { + "glob": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz", + "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + } + } + }, + "ms": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", + "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", + "dev": true + }, + "node-environment-flags": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/node-environment-flags/-/node-environment-flags-1.0.5.tgz", + "integrity": "sha512-VNYPRfGfmZLx0Ye20jWzHUjyTW/c+6Wq+iLhDzUI4XmhrDd9l/FozXV3F2xOaXjvp0co0+v1YSR3CMP6g+VvLQ==", + "dev": true, + "requires": { + "object.getownpropertydescriptors": "^2.0.3", + "semver": "^5.7.0" + } + }, + "object-inspect": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.7.0.tgz", + "integrity": "sha512-a7pEHdh1xKIAgTySUGgLMx/xwDZskN1Ud6egYYN3EdRW4ZMPNEDUTF+hwy2LUC+Bl+SyLXANnwz/jyh/qutKUw==", + "dev": true + }, + "object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true + }, + "object.assign": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.0.tgz", + "integrity": "sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w==", + "dev": true, + "requires": { + "define-properties": "^1.1.2", + "function-bind": "^1.1.1", + "has-symbols": "^1.0.0", + "object-keys": "^1.0.11" + } + }, + "object.getownpropertydescriptors": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.0.3.tgz", + "integrity": "sha1-h1jIRvW0B62rDyNuCYbxSwUcqhY=", + "dev": true, + "requires": { + "define-properties": "^1.1.2", + "es-abstract": "^1.5.1" + } + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dev": true, + "requires": { + "wrappy": "1" + } + }, + "p-limit": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.1.tgz", + "integrity": "sha512-85Tk+90UCVWvbDavCLKPOLC9vvY8OwEX/RtKF+/1OADJMVlFfEHOiMTPVyxg7mk/dKa+ipdHm0OUkTvCpMTuwg==", + "dev": true, + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "dev": true, + "requires": { + "p-limit": "^2.0.0" + } + }, + "p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true + }, + "path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", + "dev": true + }, + "path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "dev": true + }, + "path-parse": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", + "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==", + "dev": true + }, + "require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", + "dev": true + }, + "require-main-filename": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", + "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", + "dev": true + }, + "resolve": { + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.13.1.tgz", + "integrity": "sha512-CxqObCX8K8YtAhOBRg+lrcdn+LK+WYOS8tSjqSFbjtrI5PnS63QPhZl4+yKfrU9tdsbMu9Anr/amegT87M9Z6w==", + "dev": true, + "requires": { + "path-parse": "^1.0.6" + } + }, + "rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + }, + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true + }, + "set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", + "dev": true + }, + "sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", + "dev": true + }, + "string-width": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "dev": true, + "requires": { + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" + } + }, + "string.prototype.trimleft": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/string.prototype.trimleft/-/string.prototype.trimleft-2.1.0.tgz", + "integrity": "sha512-FJ6b7EgdKxxbDxc79cOlok6Afd++TTs5szo+zJTUyow3ycrRfJVE2pq3vcN53XexvKZu/DJMDfeI/qMiZTrjTw==", + "dev": true, + "requires": { + "define-properties": "^1.1.3", + "function-bind": "^1.1.1" + } + }, + "string.prototype.trimright": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/string.prototype.trimright/-/string.prototype.trimright-2.1.0.tgz", + "integrity": "sha512-fXZTSV55dNBwv16uw+hh5jkghxSnc5oHq+5K/gXgizHwAvMetdAJlHqqoFC1FSDVPYWLkAKl2cxpUT41sV7nSg==", + "dev": true, + "requires": { + "define-properties": "^1.1.3", + "function-bind": "^1.1.1" + } + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "requires": { + "ansi-regex": "^3.0.0" + } + }, + "strip-json-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", + "dev": true + }, + "supports-color": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.0.0.tgz", + "integrity": "sha512-on9Kwidc1IUQo+bQdhi8+Tijpo0e1SS6RoGo2guUwn5vdaxw8RXOF9Vb2ws+ihWOmh4JnCJOvaziZWP1VABaLg==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + }, + "tslib": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.10.0.tgz", + "integrity": "sha512-qOebF53frne81cf0S9B41ByenJ3/IuH8yJKngAX35CmiZySA0khhkovshKK+jGCaMnVomla7gVlIcc3EvKPbTQ==", + "dev": true + }, + "tslint": { + "version": "5.20.1", + "resolved": "https://registry.npmjs.org/tslint/-/tslint-5.20.1.tgz", + "integrity": "sha512-EcMxhzCFt8k+/UP5r8waCf/lzmeSyVlqxqMEDQE7rWYiQky8KpIBz1JAoYXfROHrPZ1XXd43q8yQnULOLiBRQg==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.0.0", + "builtin-modules": "^1.1.1", + "chalk": "^2.3.0", + "commander": "^2.12.1", + "diff": "^4.0.1", + "glob": "^7.1.1", + "js-yaml": "^3.13.1", + "minimatch": "^3.0.4", + "mkdirp": "^0.5.1", + "resolve": "^1.3.2", + "semver": "^5.3.0", + "tslib": "^1.8.0", + "tsutils": "^2.29.0" + }, + "dependencies": { + "diff": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.1.tgz", + "integrity": "sha512-s2+XdvhPCOF01LRQBC8hf4vhbVmI2CGS5aZnxLJlT5FtdhPCDFq80q++zK2KlrVorVDdL5BOGZ/VfLrVtYNF+Q==", + "dev": true + } + } + }, + "tsutils": { + "version": "2.29.0", + "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-2.29.0.tgz", + "integrity": "sha512-g5JVHCIJwzfISaXpXE1qvNalca5Jwob6FjI4AoPlqMusJ6ftFE7IkkFoMhVLRgK+4Kx3gkzb8UZK5t5yTTvEmA==", + "dev": true, + "requires": { + "tslib": "^1.8.1" + } + }, + "typescript": { + "version": "3.7.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.7.2.tgz", + "integrity": "sha512-ml7V7JfiN2Xwvcer+XAf2csGO1bPBdRbFCkYBczNZggrBZ9c7G3riSUeJmqEU5uOtXNPMhE3n+R4FA/3YOAWOQ==", + "dev": true + }, + "vscode-test": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/vscode-test/-/vscode-test-1.2.3.tgz", + "integrity": "sha512-mKRTNso33NaUULiPBFg6zRjyntjcCpIgkrogyPQuKlvoQREQR8jLKN5UD4L5rkTSD+oBhcKtaLR2/g34FexURw==", + "dev": true, + "requires": { + "http-proxy-agent": "^2.1.0", + "https-proxy-agent": "^2.2.4", + "rimraf": "^2.6.3" + } + }, + "which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + }, + "which-module": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", + "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", + "dev": true + }, + "wide-align": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz", + "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==", + "dev": true, + "requires": { + "string-width": "^1.0.2 || 2" + } + }, + "wrap-ansi": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", + "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.0", + "string-width": "^3.0.0", + "strip-ansi": "^5.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "dev": true + }, + "string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "dev": true, + "requires": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + } + }, + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "requires": { + "ansi-regex": "^4.1.0" + } + } + } + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", + "dev": true + }, + "y18n": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz", + "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==", + "dev": true + }, + "yargs": { + "version": "13.3.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.0.tgz", + "integrity": "sha512-2eehun/8ALW8TLoIl7MVaRUrg+yCnenu8B4kBlRxj3GJGDKU1Og7sMXPNm1BYyM1DOJmTZ4YeN/Nwxv+8XJsUA==", + "dev": true, + "requires": { + "cliui": "^5.0.0", + "find-up": "^3.0.0", + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^3.0.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^13.1.1" + }, + "dependencies": { + "ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "dev": true + }, + "string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "dev": true, + "requires": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + } + }, + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "requires": { + "ansi-regex": "^4.1.0" + } + } + } + }, + "yargs-parser": { + "version": "13.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.1.tgz", + "integrity": "sha512-oVAVsHz6uFrg3XQheFII8ESO2ssAf9luWuAd6Wexsu4F3OtIW0o8IribPXYrD4WC24LWtPrJlGy87y5udK+dxQ==", + "dev": true, + "requires": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + } + }, + "yargs-unparser": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-1.6.0.tgz", + "integrity": "sha512-W9tKgmSn0DpSatfri0nx52Joq5hVXgeLiqR/5G0sZNDoLZFOr/xjBUDcShCOGNsBnEMNo1KAMBkTej1Hm62HTw==", + "dev": true, + "requires": { + "flat": "^4.1.0", + "lodash": "^4.17.15", + "yargs": "^13.3.0" + } + } + } +} diff --git a/type-script-helper/package.json b/type-script-helper/package.json new file mode 100644 index 0000000..06a1252 --- /dev/null +++ b/type-script-helper/package.json @@ -0,0 +1,74 @@ +{ + "name": "type-script-helper", + "displayName": "Type Script Helper", + "description": "Helper for VS Code in TypeScript", + "publisher": "IFX", + "version": "1.1.5", + "engines": { + "vscode": "^1.40.0" + }, + "categories": [ + "Other" + ], + "main": "./out/extension.js", + "activationEvents": [ + "onCommand:helper.addCSharpComment", + "onCommand:helper.addVBComment", + "onCommand:helper.convertToRegularExpression", + "onCommand:helper.expandSql", + "onCommand:helper.prettySql", + "onCommand:helper.removeComment", + "onCommand:helper.sortNormal", + "onCommand:helper.unwrapSql", + "onCommand:helper.wrapSqlCSharp", + "onCommand:helper.wrapSqlVB" + ], + "contributes": { + "commands": [ + { "command": "helper.addCSharpComment", "title": "Add C# Comment" }, + { "command": "helper.addVBComment", "title": "Add VB Comment" }, + { "command": "helper.expandSql", "title": "Expand Sql" }, + { "command": "helper.convertToRegularExpression", "title": "Convert to Regular Expression" }, + { "command": "helper.prettySql", "title": "Pretty Sql" }, + { "command": "helper.removeComment", "title": "Remove comment" }, + { "command": "helper.sortNormal", "title": "My Sort lines (ascending, case sensitive)" }, + { "command": "helper.unwrapSql", "title": "Un-wrap Sql" }, + { "command": "helper.wrapSqlCSharp", "title": "Wrap Sql for C#" }, + { "command": "helper.wrapSqlVB", "title": "Wrap Sql for VB" } + ], + "keybindings": [ + { + "command": "helper.unwrapSql", + "key": "shift + f9", + "when": "editorTextFocus" + } + ], + "menus": { + "editor/context": [ + { + "command": "helper.unwrapSql", + "when": "editorTextFocus", + "group": "helper@1" + } + ] + } + }, + "scripts": { + "vscode:prepublish": "npm run compile", + "compile": "tsc -p ./", + "watch": "tsc -watch -p ./", + "pretest": "npm run compile", + "test": "node ./out/test/runTest.js" + }, + "devDependencies": { + "@types/glob": "^7.1.1", + "@types/mocha": "^5.2.7", + "@types/node": "^12.11.7", + "@types/vscode": "^1.40.0", + "glob": "^7.1.5", + "mocha": "^6.2.2", + "typescript": "^3.6.4", + "tslint": "^5.20.0", + "vscode-test": "^1.2.2" + } +} diff --git a/type-script-helper/src/extension.ts b/type-script-helper/src/extension.ts new file mode 100644 index 0000000..08e7bfa --- /dev/null +++ b/type-script-helper/src/extension.ts @@ -0,0 +1,44 @@ +// The module 'vscode' contains the VS Code extensibility API +// Import the module and reference it with the alias vscode in your code below +import * as vscode from 'vscode'; +import * as helper from './helper'; + +// this method is called when your extension is activated +// your extension is activated the very first time the command is executed +export function activate(context: vscode.ExtensionContext) { + + // Use the console to output diagnostic information (console.log) and errors (console.error) + // This line of code will only be executed once when your extension is activated + console.log('Congratulations, your extension "type-script-helper" is now active!'); + + // The command has been defined in the package.json file + // Now provide the implementation of the command with registerCommand + // The commandId parameter must match the command field in package.json + // let disposable = vscode.commands.registerCommand('extension.helloWorld', () => { + // // The code you place here will be executed every time your command is executed + + // // Display a message box to the user + // vscode.window.showInformationMessage('Hello World!'); + // }); + + + // context.subscriptions.push(disposable); + + const commands = [ + vscode.commands.registerCommand('helper.addCSharpComment', helper.addCSharpComment), + vscode.commands.registerCommand('helper.addVBComment', helper.addVBComment), + vscode.commands.registerCommand('helper.convertToRegularExpression', helper.convertToRegularExpression), + vscode.commands.registerCommand('helper.expandSql', helper.expandSql), + vscode.commands.registerCommand('helper.prettySql', helper.prettySql), + vscode.commands.registerCommand('helper.removeComment', helper.removeComment), + vscode.commands.registerCommand('helper.sortNormal', helper.sortNormal), + vscode.commands.registerCommand('helper.unwrapSql', helper.unwrapSql), + vscode.commands.registerCommand('helper.wrapSqlCSharp', helper.wrapSqlCSharp), + vscode.commands.registerCommand('helper.wrapSqlVB', helper.wrapSqlVB) + ]; + + commands.forEach(command => context.subscriptions.push(command)); +} + +// this method is called when your extension is deactivated +export function deactivate() {} diff --git a/type-script-helper/src/helper.ts b/type-script-helper/src/helper.ts new file mode 100644 index 0000000..e5b73bc --- /dev/null +++ b/type-script-helper/src/helper.ts @@ -0,0 +1,246 @@ +import * as vscode from 'vscode'; +import { stringify } from 'querystring'; + +type ArrayTransformer = (lines: string[]) => string[]; +type SortingAlgorithm = (a: string, b: string) => number; + +enum LinesAction { + addCSharpComment, + addVBComment, + convertToRegularExpression, + expandSql, + prettySql, + removeComment, + sortNormal, + unwrapSql, + wrapSqlCSharp, + wrapSqlVB +} + +function removeBlanks(lines: string[]): void { + for (let i = 0; i < lines.length; ++i) { + if (lines[i].trim() === '') { + lines.splice(i, 1); + i--; + } + } +} + +function getLines(textEditor: vscode.TextEditor, startLine: number, endLine: number) { + let results: string[] = []; + for (let i = startLine; i <= endLine; i++) { + results.push(textEditor.document.lineAt(i).text); + } + return results; +} + +function addCSharpCommentLogic(lines: string[]): void { + for (let i = 0; i < lines.length; ++i) { + lines[i] = '//' + lines[i].trim(); + } +} + +function addVBCommentLogic(lines: string[]): void { + for (let i = 0; i < lines.length; ++i) { + lines[i] = "'" + lines[i].trim(); + } +} + +function convertToRegularExpressionLogic(lines: string[]): string[] { + let results: string[]; + let result: string = ""; + let explicitLines = 50; + for (let i = 0; i < lines.length - 1 && i < explicitLines; ++i) { + result = result + lines[i].trim(). + split('\\').join('\\\\'). + split('(').join('\\('). + split(')').join('\\)'). + split('[').join('\\['). + split(']').join('\\]'). + split('.').join('\\.'). + split('*').join('\\*'). + split('+').join('\\+'). + split('?').join('\\?'). + split('|').join('\\|'). + split('$').join('\\$'). + split('^').join('\\^') + + '~'; + } + for (let i = explicitLines; i < lines.length - 1; ++i) { + result = result + '.*~'; + } + result = result. + substring(0, result.length - 1). + split('~').join('\\r\\n\?\\s\*'); + results = [result]; + return results; +} + +function expandSqlLogic(lines: string[]): void { + for (let i = 0; i < lines.length; ++i) { + lines[i] = ' ' + lines[i]; + lines[i] = lines[i]. + split(' select ').join(' SELECT\r\n'). + split(' from ').join('\r\n FROM '). + split(' where ').join('\r\n WHERE '). + split(' and ').join('\r\n and '). + split(' join ').join('\r\n join '). + split(' left join ').join('\r\n left join '). + split(' on ').join('\r\n ON '). + split(' group by ').join('\r\n GROUP BY '). + split(' order by ').join('\r\n ORDER BY '). + split(' SELECT ').join(' SELECT\r\n'). + split(' FROM ').join('\r\n FROM '). + split(' WHERE ').join('\r\n WHERE '). + split(' AND ').join('\r\n AND '). + split(' JOIN ').join('\r\n JOIN '). + split(' LEFT JOIN ').join('\r\n LEFT JOIN '). + split(' ON ').join('\r\n ON '). + split(' GROUP BY ').join('\r\n GROUP BY '). + split(' ORDER BY ').join('\r\n ORDER BY '). + split('\r\n\r\n').join('\r\n'). + trim(); + } + removeBlanks(lines); + prettySqlLogic(lines); +} + +function prettySqlLogic(lines: string[]): void { + for (let i = 0; i < lines.length; ++i) { + lines[i] = ' ' + lines[i]; + lines[i] = lines[i]. + split(' select ').join(' SELECT '). + split(' distinct ').join(' DISTINCT '). + split(' as ').join(' AS '). + split(' from ').join(' FROM '). + split(' where ').join(' WHERE '). + split(' and ').join(' AND '). + split(' join ').join(' JOIN '). + split(' left join ').join(' LEFT JOIN '). + split(' on ').join(' ON '). + split(' group by ').join(' GROUP BY '). + split(' order by ').join(' ORDER BY '). + split('\r\n\r\n').join('\r\n'). + trim(); + } + removeBlanks(lines); +} + +function makeSorter(algorithm?: SortingAlgorithm): ArrayTransformer { + return function (lines: string[]): string[] { + return lines.sort(algorithm); + }; +} + +function removeCommentLogic(lines: string[]): void { + for (let i = 0; i < lines.length; ++i) { + lines[i] = lines[i].trim(); + if(lines[i].length > 1 && lines[i][0] === '/' && lines[i][1] === '/') { + lines[i] = lines[i].substr(2); + } + if(lines[i].length > 0 && lines[i][0] === "'") { + lines[i] = lines[i].substr(1); + } + } +} + +function sortNormalLogic(lines: string[]): void { + var transformers: ArrayTransformer[] = []; + transformers.push(makeSorter()); + + removeBlanks(lines); + + lines = transformers.reduce((currentLines, transform) => transform(currentLines), lines); +} + +function unwrapSqlLogic(lines: string[]): void { + for (let i = 0; i < lines.length; ++i) { + lines[i] = "//" + lines[i]. + split('sql = "').join(''). + split('sql = sql & "').join(''). + split('sql.Append("').join(''). + split('.Append("').join(''). + split('Append("').join(''). + split('");').join(''). + split('").').join(''). + split('")').join(''). + split('" & ').join('$'). + split(' & "').join('$'). + split('"').join(''). + trim(); + } +} + +function wrapSqlCSharpLogic(lines: string[]): void { + for (let i = 0; i < lines.length; ++i) { + lines[i] = lines[i].trim(); + if(lines[i].length > 1 && lines[i][0] === '/' && lines[i][1] === '/') { + lines[i] = lines[i].substr(2); + } + lines[i] = 'Append(" ' + lines[i] + ' ").'; + } + if(lines.length > 0) { + lines[0] = 'sql.' + lines[0]; + lines[lines.length - 1] = lines[lines.length - 1].split(' ").').join(' ");'); + } +} + +function wrapSqlVBLogic(lines: string[]): void { + for (let i = 0; i < lines.length; ++i) { + lines[i] = lines[i].trim(); + if(lines[i].length > 0 && lines[i][0] === "'") { + lines[i] = lines[i].substr(1); + } + lines[i] = 'Append(" ' + lines[i] + ' ").'; + } + if(lines.length > 0) { + lines[0] = 'sql.' + lines[0]; + } +} + +function returnLines(textEditor: vscode.TextEditor, startLine: number, endLine: number, lines: string[]) { + return textEditor.edit(editBuilder => { + const range = new vscode.Range(startLine, 0, endLine, textEditor.document.lineAt(endLine).text.length); + editBuilder.replace(range, lines.join('\n')); + }); +} + +function linesFunction(linesAction: LinesAction): Thenable | undefined { + const textEditor = vscode.window.activeTextEditor; + if (!textEditor) { + return undefined; + } + var startLine = 0; + var endLine = textEditor.document.lineCount - 1; + const selection = textEditor.selection; + if (!selection.isEmpty) { + startLine = selection.start.line; + endLine = selection.end.line; + } + let lines: string[] = getLines(textEditor, startLine, endLine); + switch (linesAction) { + case LinesAction.addCSharpComment: { addCSharpCommentLogic(lines); break; } + case LinesAction.addVBComment: { addVBCommentLogic(lines); break; } + case LinesAction.convertToRegularExpression: { lines = convertToRegularExpressionLogic(lines); break; } + case LinesAction.expandSql: { expandSqlLogic(lines); break; } + case LinesAction.prettySql: { prettySqlLogic(lines); break; } + case LinesAction.removeComment: { removeCommentLogic(lines); break; } + case LinesAction.sortNormal: { sortNormalLogic(lines); break; } + case LinesAction.unwrapSql: { unwrapSqlLogic(lines); break; } + case LinesAction.wrapSqlCSharp: { wrapSqlCSharpLogic(lines); break; } + case LinesAction.wrapSqlVB: { wrapSqlVBLogic(lines); break; } + default: { throw new Error(); } + } + return returnLines(textEditor, startLine, endLine, lines); +} + +export const addCSharpComment = () => linesFunction(LinesAction.addCSharpComment); +export const addVBComment = () => linesFunction(LinesAction.addVBComment); +export const convertToRegularExpression = () => linesFunction(LinesAction.convertToRegularExpression); +export const expandSql = () => linesFunction(LinesAction.expandSql); +export const prettySql = () => linesFunction(LinesAction.prettySql); +export const removeComment = () => linesFunction(LinesAction.removeComment); +export const sortNormal = () => linesFunction(LinesAction.sortNormal); +export const unwrapSql = () => linesFunction(LinesAction.unwrapSql); +export const wrapSqlCSharp = () => linesFunction(LinesAction.wrapSqlCSharp); +export const wrapSqlVB = () => linesFunction(LinesAction.wrapSqlVB); \ No newline at end of file diff --git a/type-script-helper/src/test/runTest.ts b/type-script-helper/src/test/runTest.ts new file mode 100644 index 0000000..1eabfa3 --- /dev/null +++ b/type-script-helper/src/test/runTest.ts @@ -0,0 +1,23 @@ +import * as path from 'path'; + +import { runTests } from 'vscode-test'; + +async function main() { + try { + // The folder containing the Extension Manifest package.json + // Passed to `--extensionDevelopmentPath` + const extensionDevelopmentPath = path.resolve(__dirname, '../../'); + + // The path to test runner + // Passed to --extensionTestsPath + const extensionTestsPath = path.resolve(__dirname, './suite/index'); + + // Download VS Code, unzip it and run the integration test + await runTests({ extensionDevelopmentPath, extensionTestsPath }); + } catch (err) { + console.error('Failed to run tests'); + process.exit(1); + } +} + +main(); diff --git a/type-script-helper/src/test/suite/extension.test.ts b/type-script-helper/src/test/suite/extension.test.ts new file mode 100644 index 0000000..d59ba91 --- /dev/null +++ b/type-script-helper/src/test/suite/extension.test.ts @@ -0,0 +1,15 @@ +import * as assert from 'assert'; + +// You can import and use all API from the 'vscode' module +// as well as import your extension to test it +import * as vscode from 'vscode'; +// import * as myExtension from '../extension'; + +suite('Extension Test Suite', () => { + vscode.window.showInformationMessage('Start all tests.'); + + test('Sample test', () => { + assert.equal(-1, [1, 2, 3].indexOf(5)); + assert.equal(-1, [1, 2, 3].indexOf(0)); + }); +}); diff --git a/type-script-helper/src/test/suite/index.ts b/type-script-helper/src/test/suite/index.ts new file mode 100644 index 0000000..2cd152c --- /dev/null +++ b/type-script-helper/src/test/suite/index.ts @@ -0,0 +1,37 @@ +import * as path from 'path'; +import * as Mocha from 'mocha'; +import * as glob from 'glob'; + +export function run(): Promise { + // Create the mocha test + const mocha = new Mocha({ + ui: 'tdd', + }); + mocha.useColors(true); + + const testsRoot = path.resolve(__dirname, '..'); + + return new Promise((c, e) => { + glob('**/**.test.js', { cwd: testsRoot }, (err, files) => { + if (err) { + return e(err); + } + + // Add files to the test suite + files.forEach(f => mocha.addFile(path.resolve(testsRoot, f))); + + try { + // Run the mocha test + mocha.run(failures => { + if (failures > 0) { + e(new Error(`${failures} tests failed.`)); + } else { + c(); + } + }); + } catch (err) { + e(err); + } + }); + }); +} diff --git a/type-script-helper/tsconfig.json b/type-script-helper/tsconfig.json new file mode 100644 index 0000000..b65c745 --- /dev/null +++ b/type-script-helper/tsconfig.json @@ -0,0 +1,21 @@ +{ + "compilerOptions": { + "module": "commonjs", + "target": "es6", + "outDir": "out", + "lib": [ + "es6" + ], + "sourceMap": true, + "rootDir": "src", + "strict": true /* enable all strict type-checking options */ + /* Additional Checks */ + // "noImplicitReturns": true, /* Report error when not all code paths in function return a value. */ + // "noFallthroughCasesInSwitch": true, /* Report errors for fallthrough cases in switch statement. */ + // "noUnusedParameters": true, /* Report errors on unused parameters. */ + }, + "exclude": [ + "node_modules", + ".vscode-test" + ] +} diff --git a/type-script-helper/tslint.json b/type-script-helper/tslint.json new file mode 100644 index 0000000..c81ff28 --- /dev/null +++ b/type-script-helper/tslint.json @@ -0,0 +1,15 @@ +{ + "rules": { + "no-string-throw": true, + "no-unused-expression": true, + "no-duplicate-variable": true, + "curly": true, + "class-name": true, + "semicolon": [ + true, + "always" + ], + "triple-equals": true + }, + "defaultSeverity": "warning" +} diff --git a/type-script-helper/vsc-extension-quickstart.md b/type-script-helper/vsc-extension-quickstart.md new file mode 100644 index 0000000..b510bff --- /dev/null +++ b/type-script-helper/vsc-extension-quickstart.md @@ -0,0 +1,42 @@ +# Welcome to your VS Code Extension + +## What's in the folder + +* This folder contains all of the files necessary for your extension. +* `package.json` - this is the manifest file in which you declare your extension and command. + * The sample plugin registers a command and defines its title and command name. With this information VS Code can show the command in the command palette. It doesn’t yet need to load the plugin. +* `src/extension.ts` - this is the main file where you will provide the implementation of your command. + * The file exports one function, `activate`, which is called the very first time your extension is activated (in this case by executing the command). Inside the `activate` function we call `registerCommand`. + * We pass the function containing the implementation of the command as the second parameter to `registerCommand`. + +## Get up and running straight away + +* Press `F5` to open a new window with your extension loaded. +* Run your command from the command palette by pressing (`Ctrl+Shift+P` or `Cmd+Shift+P` on Mac) and typing `Hello World`. +* Set breakpoints in your code inside `src/extension.ts` to debug your extension. +* Find output from your extension in the debug console. + +## Make changes + +* You can relaunch the extension from the debug toolbar after changing code in `src/extension.ts`. +* You can also reload (`Ctrl+R` or `Cmd+R` on Mac) the VS Code window with your extension to load your changes. + + +## Explore the API + +* You can open the full set of our API when you open the file `node_modules/@types/vscode/index.d.ts`. + +## Run tests + +* Open the debug viewlet (`Ctrl+Shift+D` or `Cmd+Shift+D` on Mac) and from the launch configuration dropdown pick `Extension Tests`. +* Press `F5` to run the tests in a new window with your extension loaded. +* See the output of the test result in the debug console. +* Make changes to `src/test/suite/extension.test.ts` or create new test files inside the `test/suite` folder. + * The provided test runner will only consider files matching the name pattern `**.test.ts`. + * You can create folders inside the `test` folder to structure your tests any way you want. + +## Go further + + * Reduce the extension size and improve the startup time by [bundling your extension](https://code.visualstudio.com/api/working-with-extensions/bundling-extension). + * [Publish your extension](https://code.visualstudio.com/api/working-with-extensions/publishing-extension) on the VSCode extension marketplace. + * Automate builds by setting up [Continuous Integration](https://code.visualstudio.com/api/working-with-extensions/continuous-integration).