├── .github └── workflows │ └── nodejs.yml ├── LICENSE ├── README.md ├── index.js ├── package-lock.json ├── package.json └── transpile.js /.github/workflows/nodejs.yml: -------------------------------------------------------------------------------- 1 | name: Node 2 | on: [push, pull_request] 3 | env: 4 | CI: true 5 | 6 | jobs: 7 | build: 8 | name: v${{ matrix.node-version }} @ ${{ matrix.os }} 9 | runs-on: ${{ matrix.os }} 10 | strategy: 11 | fail-fast: false 12 | matrix: 13 | node-version: [10, 12] 14 | os: [ubuntu-latest, macOS-latest, windows-latest] 15 | 16 | steps: 17 | - uses: actions/checkout@v1 18 | - name: Use Node.js ${{ matrix.node-version }} 19 | uses: actions/setup-node@v1 20 | with: 21 | node-version: ${{ matrix.node-version }} 22 | - run: npm install 23 | - name: Run tests 24 | run: npm run test 25 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2019 Paul Miller, Baptiste Donaux 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | 23 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # typescript-brunch [![Build Status](https://travis-ci.org/brunch/typescript-brunch.svg?branch=master)](https://travis-ci.org/brunch/typescript-brunch) 2 | 3 | Adds TypeScript support to [Brunch](https://brunch.io). 4 | 5 | ## Usage 6 | 7 | Install the plugin and TypeScript via NPM with `npm install --save-dev typescript-brunch typescript`. 8 | 9 | Or, do manual install: 10 | 11 | * Add `"typescript-brunch": "x.y"` to `package.json` of your brunch app. Pick a plugin version that corresponds to your major.minor (x.y) Brunch version. You still need to install TypeScript manually `npm install --save-dev typescript`. 12 | * If you want to use git version of plugin, add 13 | `"typescript-brunch": "github:brunch/typescript-brunch"`. 14 | 15 | ## brunch-config 16 | 17 | If there is a `tsconfig.json` file present in the root of your project, the `compilerOptions` from that will be used as defaults. 18 | 19 | Any options in your `brunch-config.js` or `brunch-config.coffee` will override those. 20 | 21 | ```js 22 | module.exports = { 23 | // ... 24 | plugins: { 25 | brunchTypescript: { 26 | removeComments: true 27 | } 28 | } 29 | }; 30 | ``` 31 | 32 | If no options are provided, this plugin will default to the following: 33 | 34 | ```js 35 | { 36 | target: "es5", 37 | module: "commonjs", 38 | emitDecoratorMetadata: true, 39 | experimentalDecorators: true 40 | } 41 | ``` 42 | 43 | ## Errors 44 | 45 | From version 1.8.2 up to current version, this plugin may report TypeScript errors that you are not expecting. This is due to the fact that this plugin compiles each file separately in isolation, and doesn't take advantage of the full TypeScript project. As such there are some errors which may appear which are false positives. 46 | 47 | Starting in 1.8.3 you could add an `ignoreErrors` property the plugin config object in the `brunch-config` file. This was an array of error numbers to ignore. Starting in 2.0.1, you can ignore all TypeScript errors by setting `ignoreErrors` to `true` (this was broken in 2.0.0). Setting it to an array still works as before. 48 | 49 | We are hoping to support the full language service, at least for `brunch build` at some point, but until then, we recommend that you add `tsc --noEmit` to your test script or build script to catch proper errors within your project. 50 | 51 | Just to note that this shouldn't affect any TypeScript support your editor/IDE provides, which should also allow you to identify real errors. 52 | 53 | ## Contributors 54 | 55 | * [baptistedonaux](https://github.com/baptistedonaux "Baptiste Donaux") 56 | * [colinbate](https://github.com/colinbate "Colin Bate") 57 | * [xtity](https://github.com/xtity "xtity") 58 | * [kripod](https://github.com/kripod "Kristóf Poduszló") 59 | * [jpoehls](https://github.com/jpoehls "Joshua Poehls") 60 | 61 | 62 | ## License 63 | 64 | The MIT License (MIT) 65 | 66 | Copyright (c) 2017 Baptiste Donaux (http://www.baptiste-donaux.fr) 67 | 68 | Permission is hereby granted, free of charge, to any person obtaining a copy 69 | of this software and associated documentation files (the "Software"), to deal 70 | in the Software without restriction, including without limitation the rights 71 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 72 | copies of the Software, and to permit persons to whom the Software is 73 | furnished to do so, subject to the following conditions: 74 | 75 | The above copyright notice and this permission notice shall be included in 76 | all copies or substantial portions of the Software. 77 | 78 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 79 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 80 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 81 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 82 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 83 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 84 | THE SOFTWARE. 85 | -------------------------------------------------------------------------------- /index.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | const transpileModule = require('./transpile'); 4 | const ts = require('typescript'); 5 | const anymatch = require('anymatch'); 6 | const path = require('path'); 7 | 8 | const resolveEnum = (choice, opts) => { 9 | const defaultValue = 1; // CommonJS/ES5/Preserve JSX defaults 10 | 11 | if (!choice) return defaultValue; 12 | if (!isNaN(choice)) return choice - 0; 13 | 14 | for (const opt of Object.keys(opts)) { 15 | if (choice && choice.toUpperCase() === opt.toUpperCase()) { 16 | return opts[opt]; 17 | } 18 | } 19 | 20 | return defaultValue; 21 | }; 22 | 23 | const getTsconfig = configRoot => { 24 | if (!configRoot) return {}; 25 | 26 | const file = path.resolve(configRoot, 'tsconfig.json'); 27 | 28 | try { 29 | return require(file).compilerOptions; 30 | } catch (e) { 31 | return {}; 32 | } 33 | }; 34 | 35 | const findLessOrEqual = (haystack, needle) => { 36 | let i = 0; 37 | while (i + 1 < haystack.length && needle >= haystack[i + 1]) { 38 | i += 1; 39 | } 40 | return i === haystack.length ? -1 : i; 41 | }; 42 | 43 | const errPos = err => { 44 | if (err.file) { 45 | const lineMap = err.file.lineMap; 46 | if (lineMap) { 47 | const lineIndex = findLessOrEqual(lineMap, err.start); 48 | 49 | return `Line: ${lineIndex + 1}, Col: ${err.start - err.file.lineMap[lineIndex] + 1}`; 50 | } 51 | } 52 | return 'No line map'; 53 | }; 54 | 55 | const toMeaningfulMessage = err => `Error ${err.code}: ${err.messageText} (${errPos(err)})`; 56 | 57 | class TypeScriptCompiler { 58 | constructor(config) { 59 | if (!config) { 60 | config = {}; 61 | } 62 | 63 | const options = config.plugins && config.plugins.brunchTypescript || {}; 64 | this.options = getTsconfig(config.paths && config.paths.root); 65 | 66 | Object.keys(options).forEach(key => { 67 | if (key === 'sourceMap' || key === 'ignore') return; 68 | this.options[key] = options[key]; 69 | }); 70 | 71 | if (this.options.jsx === 'preserve') { 72 | this.targetExtension = '.jsx'; 73 | } else { 74 | this.targetExtension = '.js'; 75 | } 76 | 77 | this.options.module = resolveEnum(this.options.module, ts.ModuleKind); 78 | this.options.target = resolveEnum(this.options.target, ts.ScriptTarget); 79 | this.options.jsx = resolveEnum(this.options.jsx, ts.JsxEmit); 80 | this.options.emitDecoratorMetadata = this.options.emitDecoratorMetadata !== false; 81 | this.options.experimentalDecorators = this.options.experimentalDecorators !== false; 82 | this.options.noEmitOnError = false; // This can"t be true when compiling this way. 83 | 84 | delete this.options.moduleResolution; 85 | 86 | this.options.sourceMap = !!config.sourceMaps; 87 | this.isIgnored = anymatch(options.ignore || config.conventions.vendor); 88 | if (this.options.pattern) { 89 | this.pattern = this.options.pattern; 90 | delete this.options.pattern; 91 | } 92 | 93 | if (this.options.ignoreErrors) { 94 | if (this.options.ignoreErrors === true) { 95 | this.ignoreAllErrors = true; 96 | } else { 97 | this.ignoreErrors = new Set(this.options.ignoreErrors); 98 | } 99 | delete this.options.ignoreErrors; 100 | } 101 | } 102 | 103 | compile(params) { 104 | if (this.isIgnored(params.path)) return Promise.resolve(params); 105 | 106 | const tsOptions = { 107 | fileName: params.path, 108 | reportDiagnostics: true, 109 | compilerOptions: this.options, 110 | }; 111 | 112 | return new Promise((resolve, reject) => { 113 | let compiled; 114 | 115 | try { 116 | compiled = transpileModule(params.data, tsOptions); 117 | let reportable = compiled.diagnostics; 118 | 119 | if (this.ignoreAllErrors === true) { 120 | reportable = []; 121 | } else if (this.ignoreErrors) { 122 | reportable = reportable.filter(err => !this.ignoreErrors.has(err.code)); 123 | } 124 | 125 | if (reportable.length) { 126 | reject(reportable.map(toMeaningfulMessage).join('\n')); 127 | } 128 | } catch (err) { 129 | return reject(err); 130 | } 131 | 132 | const result = {data: `${compiled.outputText || compiled}\n`}; 133 | 134 | if (compiled.sourceMapText) { 135 | // Fix the sources path so Brunch can merge them. 136 | const rawMap = JSON.parse(compiled.sourceMapText); 137 | rawMap.sources[0] = params.path; 138 | result.map = JSON.stringify(rawMap); 139 | } 140 | 141 | resolve(result); 142 | }); 143 | } 144 | } 145 | 146 | TypeScriptCompiler.prototype.brunchPlugin = true; 147 | TypeScriptCompiler.prototype.type = 'javascript'; 148 | TypeScriptCompiler.prototype.pattern = /\.tsx?$/; 149 | 150 | module.exports = TypeScriptCompiler; 151 | -------------------------------------------------------------------------------- /package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "typescript-brunch", 3 | "version": "3.0.0-pre", 4 | "lockfileVersion": 1, 5 | "requires": true, 6 | "dependencies": { 7 | "@babel/code-frame": { 8 | "version": "7.5.5", 9 | "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.5.5.tgz", 10 | "integrity": "sha512-27d4lZoomVyo51VegxI20xZPuSHusqbQag/ztrBC7wegWoQ1nLREPVSKSW8byhTlzTKyNE4ifaTA6lCp7JjpFw==", 11 | "dev": true, 12 | "requires": { 13 | "@babel/highlight": "^7.0.0" 14 | } 15 | }, 16 | "@babel/highlight": { 17 | "version": "7.5.0", 18 | "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.5.0.tgz", 19 | "integrity": "sha512-7dV4eu9gBxoM0dAnj/BCFDW9LFU0zvTrkq0ugM7pnHEgguOEeOz1so2ZghEdzviYzQEED0r4EAgpsBChKy1TRQ==", 20 | "dev": true, 21 | "requires": { 22 | "chalk": "^2.0.0", 23 | "esutils": "^2.0.2", 24 | "js-tokens": "^4.0.0" 25 | } 26 | }, 27 | "acorn": { 28 | "version": "7.1.0", 29 | "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.1.0.tgz", 30 | "integrity": "sha512-kL5CuoXA/dgxlBbVrflsflzQ3PAas7RYZB52NOm/6839iVYJgKMJ3cQJD+t2i5+qFa8h3MDpEOJiS64E8JLnSQ==", 31 | "dev": true 32 | }, 33 | "acorn-jsx": { 34 | "version": "5.1.0", 35 | "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.1.0.tgz", 36 | "integrity": "sha512-tMUqwBWfLFbJbizRmEcWSLw6HnFzfdJs2sOJEOwwtVPMoH/0Ay+E703oZz78VSXZiiDcZrQ5XKjPIUQixhmgVw==", 37 | "dev": true 38 | }, 39 | "ajv": { 40 | "version": "6.10.2", 41 | "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.10.2.tgz", 42 | "integrity": "sha512-TXtUUEYHuaTEbLZWIKUr5pmBuhDLy+8KYtPYdcV8qC+pOZL+NKqYwvWSRrVXHn+ZmRRAu8vJTAznH7Oag6RVRw==", 43 | "dev": true, 44 | "requires": { 45 | "fast-deep-equal": "^2.0.1", 46 | "fast-json-stable-stringify": "^2.0.0", 47 | "json-schema-traverse": "^0.4.1", 48 | "uri-js": "^4.2.2" 49 | } 50 | }, 51 | "ansi-escapes": { 52 | "version": "4.3.0", 53 | "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.0.tgz", 54 | "integrity": "sha512-EiYhwo0v255HUL6eDyuLrXEkTi7WwVCLAw+SeOQ7M7qdun1z1pum4DEm/nuqIVbPvi9RPPc9k9LbyBv6H0DwVg==", 55 | "dev": true, 56 | "requires": { 57 | "type-fest": "^0.8.1" 58 | } 59 | }, 60 | "ansi-regex": { 61 | "version": "5.0.0", 62 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", 63 | "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", 64 | "dev": true 65 | }, 66 | "ansi-styles": { 67 | "version": "3.2.1", 68 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", 69 | "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", 70 | "dev": true, 71 | "requires": { 72 | "color-convert": "^1.9.0" 73 | } 74 | }, 75 | "anymatch": { 76 | "version": "3.1.1", 77 | "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.1.tgz", 78 | "integrity": "sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg==", 79 | "requires": { 80 | "normalize-path": "^3.0.0", 81 | "picomatch": "^2.0.4" 82 | } 83 | }, 84 | "argparse": { 85 | "version": "1.0.10", 86 | "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", 87 | "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", 88 | "dev": true, 89 | "requires": { 90 | "sprintf-js": "~1.0.2" 91 | } 92 | }, 93 | "astral-regex": { 94 | "version": "1.0.0", 95 | "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-1.0.0.tgz", 96 | "integrity": "sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==", 97 | "dev": true 98 | }, 99 | "balanced-match": { 100 | "version": "1.0.0", 101 | "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", 102 | "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", 103 | "dev": true 104 | }, 105 | "brace-expansion": { 106 | "version": "1.1.11", 107 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", 108 | "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", 109 | "dev": true, 110 | "requires": { 111 | "balanced-match": "^1.0.0", 112 | "concat-map": "0.0.1" 113 | } 114 | }, 115 | "callsites": { 116 | "version": "3.1.0", 117 | "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", 118 | "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", 119 | "dev": true 120 | }, 121 | "chalk": { 122 | "version": "2.4.2", 123 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", 124 | "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", 125 | "dev": true, 126 | "requires": { 127 | "ansi-styles": "^3.2.1", 128 | "escape-string-regexp": "^1.0.5", 129 | "supports-color": "^5.3.0" 130 | } 131 | }, 132 | "chardet": { 133 | "version": "0.7.0", 134 | "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", 135 | "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", 136 | "dev": true 137 | }, 138 | "cli-cursor": { 139 | "version": "3.1.0", 140 | "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", 141 | "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", 142 | "dev": true, 143 | "requires": { 144 | "restore-cursor": "^3.1.0" 145 | } 146 | }, 147 | "cli-width": { 148 | "version": "2.2.0", 149 | "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.0.tgz", 150 | "integrity": "sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk=", 151 | "dev": true 152 | }, 153 | "color-convert": { 154 | "version": "1.9.3", 155 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", 156 | "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", 157 | "dev": true, 158 | "requires": { 159 | "color-name": "1.1.3" 160 | } 161 | }, 162 | "color-name": { 163 | "version": "1.1.3", 164 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", 165 | "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", 166 | "dev": true 167 | }, 168 | "concat-map": { 169 | "version": "0.0.1", 170 | "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", 171 | "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", 172 | "dev": true 173 | }, 174 | "cross-spawn": { 175 | "version": "6.0.5", 176 | "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", 177 | "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", 178 | "dev": true, 179 | "requires": { 180 | "nice-try": "^1.0.4", 181 | "path-key": "^2.0.1", 182 | "semver": "^5.5.0", 183 | "shebang-command": "^1.2.0", 184 | "which": "^1.2.9" 185 | }, 186 | "dependencies": { 187 | "semver": { 188 | "version": "5.7.1", 189 | "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", 190 | "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", 191 | "dev": true 192 | } 193 | } 194 | }, 195 | "debug": { 196 | "version": "4.1.1", 197 | "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", 198 | "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", 199 | "dev": true, 200 | "requires": { 201 | "ms": "^2.1.1" 202 | } 203 | }, 204 | "deep-is": { 205 | "version": "0.1.3", 206 | "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", 207 | "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", 208 | "dev": true 209 | }, 210 | "doctrine": { 211 | "version": "3.0.0", 212 | "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", 213 | "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", 214 | "dev": true, 215 | "requires": { 216 | "esutils": "^2.0.2" 217 | } 218 | }, 219 | "emoji-regex": { 220 | "version": "8.0.0", 221 | "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", 222 | "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", 223 | "dev": true 224 | }, 225 | "escape-string-regexp": { 226 | "version": "1.0.5", 227 | "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", 228 | "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", 229 | "dev": true 230 | }, 231 | "eslint": { 232 | "version": "6.7.2", 233 | "resolved": "https://registry.npmjs.org/eslint/-/eslint-6.7.2.tgz", 234 | "integrity": "sha512-qMlSWJaCSxDFr8fBPvJM9kJwbazrhNcBU3+DszDW1OlEwKBBRWsJc7NJFelvwQpanHCR14cOLD41x8Eqvo3Nng==", 235 | "dev": true, 236 | "requires": { 237 | "@babel/code-frame": "^7.0.0", 238 | "ajv": "^6.10.0", 239 | "chalk": "^2.1.0", 240 | "cross-spawn": "^6.0.5", 241 | "debug": "^4.0.1", 242 | "doctrine": "^3.0.0", 243 | "eslint-scope": "^5.0.0", 244 | "eslint-utils": "^1.4.3", 245 | "eslint-visitor-keys": "^1.1.0", 246 | "espree": "^6.1.2", 247 | "esquery": "^1.0.1", 248 | "esutils": "^2.0.2", 249 | "file-entry-cache": "^5.0.1", 250 | "functional-red-black-tree": "^1.0.1", 251 | "glob-parent": "^5.0.0", 252 | "globals": "^12.1.0", 253 | "ignore": "^4.0.6", 254 | "import-fresh": "^3.0.0", 255 | "imurmurhash": "^0.1.4", 256 | "inquirer": "^7.0.0", 257 | "is-glob": "^4.0.0", 258 | "js-yaml": "^3.13.1", 259 | "json-stable-stringify-without-jsonify": "^1.0.1", 260 | "levn": "^0.3.0", 261 | "lodash": "^4.17.14", 262 | "minimatch": "^3.0.4", 263 | "mkdirp": "^0.5.1", 264 | "natural-compare": "^1.4.0", 265 | "optionator": "^0.8.3", 266 | "progress": "^2.0.0", 267 | "regexpp": "^2.0.1", 268 | "semver": "^6.1.2", 269 | "strip-ansi": "^5.2.0", 270 | "strip-json-comments": "^3.0.1", 271 | "table": "^5.2.3", 272 | "text-table": "^0.2.0", 273 | "v8-compile-cache": "^2.0.3" 274 | } 275 | }, 276 | "eslint-config-brunch": { 277 | "version": "1.2.1", 278 | "resolved": "https://registry.npmjs.org/eslint-config-brunch/-/eslint-config-brunch-1.2.1.tgz", 279 | "integrity": "sha512-jrwdM9cADpmCHw9tMQX9yhuafwS11ZSNHcfL1TKRhp6FaQlFoQuQSKFL5fl40/7bev7ImK5irJQC6Fufv5HVqw==", 280 | "dev": true 281 | }, 282 | "eslint-scope": { 283 | "version": "5.0.0", 284 | "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.0.0.tgz", 285 | "integrity": "sha512-oYrhJW7S0bxAFDvWqzvMPRm6pcgcnWc4QnofCAqRTRfQC0JcwenzGglTtsLyIuuWFfkqDG9vz67cnttSd53djw==", 286 | "dev": true, 287 | "requires": { 288 | "esrecurse": "^4.1.0", 289 | "estraverse": "^4.1.1" 290 | } 291 | }, 292 | "eslint-utils": { 293 | "version": "1.4.3", 294 | "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-1.4.3.tgz", 295 | "integrity": "sha512-fbBN5W2xdY45KulGXmLHZ3c3FHfVYmKg0IrAKGOkT/464PQsx2UeIzfz1RmEci+KLm1bBaAzZAh8+/E+XAeZ8Q==", 296 | "dev": true, 297 | "requires": { 298 | "eslint-visitor-keys": "^1.1.0" 299 | } 300 | }, 301 | "eslint-visitor-keys": { 302 | "version": "1.1.0", 303 | "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.1.0.tgz", 304 | "integrity": "sha512-8y9YjtM1JBJU/A9Kc+SbaOV4y29sSWckBwMHa+FGtVj5gN/sbnKDf6xJUl+8g7FAij9LVaP8C24DUiH/f/2Z9A==", 305 | "dev": true 306 | }, 307 | "espree": { 308 | "version": "6.1.2", 309 | "resolved": "https://registry.npmjs.org/espree/-/espree-6.1.2.tgz", 310 | "integrity": "sha512-2iUPuuPP+yW1PZaMSDM9eyVf8D5P0Hi8h83YtZ5bPc/zHYjII5khoixIUTMO794NOY8F/ThF1Bo8ncZILarUTA==", 311 | "dev": true, 312 | "requires": { 313 | "acorn": "^7.1.0", 314 | "acorn-jsx": "^5.1.0", 315 | "eslint-visitor-keys": "^1.1.0" 316 | } 317 | }, 318 | "esprima": { 319 | "version": "4.0.1", 320 | "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", 321 | "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", 322 | "dev": true 323 | }, 324 | "esquery": { 325 | "version": "1.0.1", 326 | "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.0.1.tgz", 327 | "integrity": "sha512-SmiyZ5zIWH9VM+SRUReLS5Q8a7GxtRdxEBVZpm98rJM7Sb+A9DVCndXfkeFUd3byderg+EbDkfnevfCwynWaNA==", 328 | "dev": true, 329 | "requires": { 330 | "estraverse": "^4.0.0" 331 | } 332 | }, 333 | "esrecurse": { 334 | "version": "4.2.1", 335 | "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.2.1.tgz", 336 | "integrity": "sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ==", 337 | "dev": true, 338 | "requires": { 339 | "estraverse": "^4.1.0" 340 | } 341 | }, 342 | "estraverse": { 343 | "version": "4.3.0", 344 | "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", 345 | "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", 346 | "dev": true 347 | }, 348 | "esutils": { 349 | "version": "2.0.3", 350 | "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", 351 | "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", 352 | "dev": true 353 | }, 354 | "external-editor": { 355 | "version": "3.1.0", 356 | "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", 357 | "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", 358 | "dev": true, 359 | "requires": { 360 | "chardet": "^0.7.0", 361 | "iconv-lite": "^0.4.24", 362 | "tmp": "^0.0.33" 363 | } 364 | }, 365 | "fast-deep-equal": { 366 | "version": "2.0.1", 367 | "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz", 368 | "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=", 369 | "dev": true 370 | }, 371 | "fast-json-stable-stringify": { 372 | "version": "2.1.0", 373 | "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", 374 | "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", 375 | "dev": true 376 | }, 377 | "fast-levenshtein": { 378 | "version": "2.0.6", 379 | "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", 380 | "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", 381 | "dev": true 382 | }, 383 | "figures": { 384 | "version": "3.1.0", 385 | "resolved": "https://registry.npmjs.org/figures/-/figures-3.1.0.tgz", 386 | "integrity": "sha512-ravh8VRXqHuMvZt/d8GblBeqDMkdJMBdv/2KntFH+ra5MXkO7nxNKpzQ3n6QD/2da1kH0aWmNISdvhM7gl2gVg==", 387 | "dev": true, 388 | "requires": { 389 | "escape-string-regexp": "^1.0.5" 390 | } 391 | }, 392 | "file-entry-cache": { 393 | "version": "5.0.1", 394 | "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-5.0.1.tgz", 395 | "integrity": "sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g==", 396 | "dev": true, 397 | "requires": { 398 | "flat-cache": "^2.0.1" 399 | } 400 | }, 401 | "flat-cache": { 402 | "version": "2.0.1", 403 | "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-2.0.1.tgz", 404 | "integrity": "sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA==", 405 | "dev": true, 406 | "requires": { 407 | "flatted": "^2.0.0", 408 | "rimraf": "2.6.3", 409 | "write": "1.0.3" 410 | } 411 | }, 412 | "flatted": { 413 | "version": "2.0.1", 414 | "resolved": "https://registry.npmjs.org/flatted/-/flatted-2.0.1.tgz", 415 | "integrity": "sha512-a1hQMktqW9Nmqr5aktAux3JMNqaucxGcjtjWnZLHX7yyPCmlSV3M54nGYbqT8K+0GhF3NBgmJCc3ma+WOgX8Jg==", 416 | "dev": true 417 | }, 418 | "fs.realpath": { 419 | "version": "1.0.0", 420 | "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", 421 | "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", 422 | "dev": true 423 | }, 424 | "functional-red-black-tree": { 425 | "version": "1.0.1", 426 | "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", 427 | "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", 428 | "dev": true 429 | }, 430 | "glob": { 431 | "version": "7.1.6", 432 | "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", 433 | "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", 434 | "dev": true, 435 | "requires": { 436 | "fs.realpath": "^1.0.0", 437 | "inflight": "^1.0.4", 438 | "inherits": "2", 439 | "minimatch": "^3.0.4", 440 | "once": "^1.3.0", 441 | "path-is-absolute": "^1.0.0" 442 | } 443 | }, 444 | "glob-parent": { 445 | "version": "5.1.0", 446 | "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.0.tgz", 447 | "integrity": "sha512-qjtRgnIVmOfnKUE3NJAQEdk+lKrxfw8t5ke7SXtfMTHcjsBfOfWXCQfdb30zfDoZQ2IRSIiidmjtbHZPZ++Ihw==", 448 | "dev": true, 449 | "requires": { 450 | "is-glob": "^4.0.1" 451 | } 452 | }, 453 | "globals": { 454 | "version": "12.3.0", 455 | "resolved": "https://registry.npmjs.org/globals/-/globals-12.3.0.tgz", 456 | "integrity": "sha512-wAfjdLgFsPZsklLJvOBUBmzYE8/CwhEqSBEMRXA3qxIiNtyqvjYurAtIfDh6chlEPUfmTY3MnZh5Hfh4q0UlIw==", 457 | "dev": true, 458 | "requires": { 459 | "type-fest": "^0.8.1" 460 | } 461 | }, 462 | "has-flag": { 463 | "version": "3.0.0", 464 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", 465 | "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", 466 | "dev": true 467 | }, 468 | "iconv-lite": { 469 | "version": "0.4.24", 470 | "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", 471 | "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", 472 | "dev": true, 473 | "requires": { 474 | "safer-buffer": ">= 2.1.2 < 3" 475 | } 476 | }, 477 | "ignore": { 478 | "version": "4.0.6", 479 | "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", 480 | "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", 481 | "dev": true 482 | }, 483 | "import-fresh": { 484 | "version": "3.2.1", 485 | "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.2.1.tgz", 486 | "integrity": "sha512-6e1q1cnWP2RXD9/keSkxHScg508CdXqXWgWBaETNhyuBFz+kUZlKboh+ISK+bU++DmbHimVBrOz/zzPe0sZ3sQ==", 487 | "dev": true, 488 | "requires": { 489 | "parent-module": "^1.0.0", 490 | "resolve-from": "^4.0.0" 491 | } 492 | }, 493 | "imurmurhash": { 494 | "version": "0.1.4", 495 | "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", 496 | "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", 497 | "dev": true 498 | }, 499 | "inflight": { 500 | "version": "1.0.6", 501 | "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", 502 | "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", 503 | "dev": true, 504 | "requires": { 505 | "once": "^1.3.0", 506 | "wrappy": "1" 507 | } 508 | }, 509 | "inherits": { 510 | "version": "2.0.4", 511 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", 512 | "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", 513 | "dev": true 514 | }, 515 | "inquirer": { 516 | "version": "7.0.1", 517 | "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-7.0.1.tgz", 518 | "integrity": "sha512-V1FFQ3TIO15det8PijPLFR9M9baSlnRs9nL7zWu1MNVA2T9YVl9ZbrHJhYs7e9X8jeMZ3lr2JH/rdHFgNCBdYw==", 519 | "dev": true, 520 | "requires": { 521 | "ansi-escapes": "^4.2.1", 522 | "chalk": "^2.4.2", 523 | "cli-cursor": "^3.1.0", 524 | "cli-width": "^2.0.0", 525 | "external-editor": "^3.0.3", 526 | "figures": "^3.0.0", 527 | "lodash": "^4.17.15", 528 | "mute-stream": "0.0.8", 529 | "run-async": "^2.2.0", 530 | "rxjs": "^6.5.3", 531 | "string-width": "^4.1.0", 532 | "strip-ansi": "^5.1.0", 533 | "through": "^2.3.6" 534 | } 535 | }, 536 | "is-extglob": { 537 | "version": "2.1.1", 538 | "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", 539 | "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", 540 | "dev": true 541 | }, 542 | "is-fullwidth-code-point": { 543 | "version": "3.0.0", 544 | "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", 545 | "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", 546 | "dev": true 547 | }, 548 | "is-glob": { 549 | "version": "4.0.1", 550 | "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", 551 | "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", 552 | "dev": true, 553 | "requires": { 554 | "is-extglob": "^2.1.1" 555 | } 556 | }, 557 | "is-promise": { 558 | "version": "2.1.0", 559 | "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.1.0.tgz", 560 | "integrity": "sha1-eaKp7OfwlugPNtKy87wWwf9L8/o=", 561 | "dev": true 562 | }, 563 | "isexe": { 564 | "version": "2.0.0", 565 | "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", 566 | "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", 567 | "dev": true 568 | }, 569 | "js-tokens": { 570 | "version": "4.0.0", 571 | "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", 572 | "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", 573 | "dev": true 574 | }, 575 | "js-yaml": { 576 | "version": "3.13.1", 577 | "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz", 578 | "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==", 579 | "dev": true, 580 | "requires": { 581 | "argparse": "^1.0.7", 582 | "esprima": "^4.0.0" 583 | } 584 | }, 585 | "json-schema-traverse": { 586 | "version": "0.4.1", 587 | "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", 588 | "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", 589 | "dev": true 590 | }, 591 | "json-stable-stringify-without-jsonify": { 592 | "version": "1.0.1", 593 | "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", 594 | "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", 595 | "dev": true 596 | }, 597 | "levn": { 598 | "version": "0.3.0", 599 | "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", 600 | "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", 601 | "dev": true, 602 | "requires": { 603 | "prelude-ls": "~1.1.2", 604 | "type-check": "~0.3.2" 605 | } 606 | }, 607 | "lodash": { 608 | "version": "4.17.15", 609 | "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", 610 | "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==", 611 | "dev": true 612 | }, 613 | "mimic-fn": { 614 | "version": "2.1.0", 615 | "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", 616 | "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", 617 | "dev": true 618 | }, 619 | "minimatch": { 620 | "version": "3.0.4", 621 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", 622 | "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", 623 | "dev": true, 624 | "requires": { 625 | "brace-expansion": "^1.1.7" 626 | } 627 | }, 628 | "minimist": { 629 | "version": "0.0.8", 630 | "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", 631 | "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", 632 | "dev": true 633 | }, 634 | "mkdirp": { 635 | "version": "0.5.1", 636 | "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", 637 | "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", 638 | "dev": true, 639 | "requires": { 640 | "minimist": "0.0.8" 641 | } 642 | }, 643 | "ms": { 644 | "version": "2.1.2", 645 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", 646 | "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", 647 | "dev": true 648 | }, 649 | "mute-stream": { 650 | "version": "0.0.8", 651 | "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", 652 | "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", 653 | "dev": true 654 | }, 655 | "natural-compare": { 656 | "version": "1.4.0", 657 | "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", 658 | "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", 659 | "dev": true 660 | }, 661 | "nice-try": { 662 | "version": "1.0.5", 663 | "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", 664 | "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", 665 | "dev": true 666 | }, 667 | "normalize-path": { 668 | "version": "3.0.0", 669 | "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", 670 | "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==" 671 | }, 672 | "once": { 673 | "version": "1.4.0", 674 | "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", 675 | "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", 676 | "dev": true, 677 | "requires": { 678 | "wrappy": "1" 679 | } 680 | }, 681 | "onetime": { 682 | "version": "5.1.0", 683 | "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.0.tgz", 684 | "integrity": "sha512-5NcSkPHhwTVFIQN+TUqXoS5+dlElHXdpAWu9I0HP20YOtIi+aZ0Ct82jdlILDxjLEAWwvm+qj1m6aEtsDVmm6Q==", 685 | "dev": true, 686 | "requires": { 687 | "mimic-fn": "^2.1.0" 688 | } 689 | }, 690 | "optionator": { 691 | "version": "0.8.3", 692 | "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", 693 | "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", 694 | "dev": true, 695 | "requires": { 696 | "deep-is": "~0.1.3", 697 | "fast-levenshtein": "~2.0.6", 698 | "levn": "~0.3.0", 699 | "prelude-ls": "~1.1.2", 700 | "type-check": "~0.3.2", 701 | "word-wrap": "~1.2.3" 702 | } 703 | }, 704 | "os-tmpdir": { 705 | "version": "1.0.2", 706 | "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", 707 | "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", 708 | "dev": true 709 | }, 710 | "parent-module": { 711 | "version": "1.0.1", 712 | "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", 713 | "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", 714 | "dev": true, 715 | "requires": { 716 | "callsites": "^3.0.0" 717 | } 718 | }, 719 | "path-is-absolute": { 720 | "version": "1.0.1", 721 | "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", 722 | "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", 723 | "dev": true 724 | }, 725 | "path-key": { 726 | "version": "2.0.1", 727 | "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", 728 | "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", 729 | "dev": true 730 | }, 731 | "picomatch": { 732 | "version": "2.1.1", 733 | "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.1.1.tgz", 734 | "integrity": "sha512-OYMyqkKzK7blWO/+XZYP6w8hH0LDvkBvdvKukti+7kqYFCiEAk+gI3DWnryapc0Dau05ugGTy0foQ6mqn4AHYA==" 735 | }, 736 | "prelude-ls": { 737 | "version": "1.1.2", 738 | "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", 739 | "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=", 740 | "dev": true 741 | }, 742 | "progress": { 743 | "version": "2.0.3", 744 | "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", 745 | "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", 746 | "dev": true 747 | }, 748 | "punycode": { 749 | "version": "2.1.1", 750 | "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", 751 | "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", 752 | "dev": true 753 | }, 754 | "regexpp": { 755 | "version": "2.0.1", 756 | "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-2.0.1.tgz", 757 | "integrity": "sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw==", 758 | "dev": true 759 | }, 760 | "resolve-from": { 761 | "version": "4.0.0", 762 | "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", 763 | "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", 764 | "dev": true 765 | }, 766 | "restore-cursor": { 767 | "version": "3.1.0", 768 | "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", 769 | "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", 770 | "dev": true, 771 | "requires": { 772 | "onetime": "^5.1.0", 773 | "signal-exit": "^3.0.2" 774 | } 775 | }, 776 | "rimraf": { 777 | "version": "2.6.3", 778 | "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", 779 | "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", 780 | "dev": true, 781 | "requires": { 782 | "glob": "^7.1.3" 783 | } 784 | }, 785 | "run-async": { 786 | "version": "2.3.0", 787 | "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.3.0.tgz", 788 | "integrity": "sha1-A3GrSuC91yDUFm19/aZP96RFpsA=", 789 | "dev": true, 790 | "requires": { 791 | "is-promise": "^2.1.0" 792 | } 793 | }, 794 | "rxjs": { 795 | "version": "6.5.3", 796 | "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.5.3.tgz", 797 | "integrity": "sha512-wuYsAYYFdWTAnAaPoKGNhfpWwKZbJW+HgAJ+mImp+Epl7BG8oNWBCTyRM8gba9k4lk8BgWdoYm21Mo/RYhhbgA==", 798 | "dev": true, 799 | "requires": { 800 | "tslib": "^1.9.0" 801 | } 802 | }, 803 | "safer-buffer": { 804 | "version": "2.1.2", 805 | "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", 806 | "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", 807 | "dev": true 808 | }, 809 | "semver": { 810 | "version": "6.3.0", 811 | "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", 812 | "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", 813 | "dev": true 814 | }, 815 | "shebang-command": { 816 | "version": "1.2.0", 817 | "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", 818 | "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", 819 | "dev": true, 820 | "requires": { 821 | "shebang-regex": "^1.0.0" 822 | } 823 | }, 824 | "shebang-regex": { 825 | "version": "1.0.0", 826 | "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", 827 | "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", 828 | "dev": true 829 | }, 830 | "signal-exit": { 831 | "version": "3.0.2", 832 | "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", 833 | "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=", 834 | "dev": true 835 | }, 836 | "slice-ansi": { 837 | "version": "2.1.0", 838 | "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-2.1.0.tgz", 839 | "integrity": "sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ==", 840 | "dev": true, 841 | "requires": { 842 | "ansi-styles": "^3.2.0", 843 | "astral-regex": "^1.0.0", 844 | "is-fullwidth-code-point": "^2.0.0" 845 | }, 846 | "dependencies": { 847 | "is-fullwidth-code-point": { 848 | "version": "2.0.0", 849 | "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", 850 | "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", 851 | "dev": true 852 | } 853 | } 854 | }, 855 | "sprintf-js": { 856 | "version": "1.0.3", 857 | "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", 858 | "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", 859 | "dev": true 860 | }, 861 | "string-width": { 862 | "version": "4.2.0", 863 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz", 864 | "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==", 865 | "dev": true, 866 | "requires": { 867 | "emoji-regex": "^8.0.0", 868 | "is-fullwidth-code-point": "^3.0.0", 869 | "strip-ansi": "^6.0.0" 870 | }, 871 | "dependencies": { 872 | "strip-ansi": { 873 | "version": "6.0.0", 874 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", 875 | "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", 876 | "dev": true, 877 | "requires": { 878 | "ansi-regex": "^5.0.0" 879 | } 880 | } 881 | } 882 | }, 883 | "strip-ansi": { 884 | "version": "5.2.0", 885 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", 886 | "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", 887 | "dev": true, 888 | "requires": { 889 | "ansi-regex": "^4.1.0" 890 | }, 891 | "dependencies": { 892 | "ansi-regex": { 893 | "version": "4.1.0", 894 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", 895 | "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", 896 | "dev": true 897 | } 898 | } 899 | }, 900 | "strip-json-comments": { 901 | "version": "3.0.1", 902 | "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.0.1.tgz", 903 | "integrity": "sha512-VTyMAUfdm047mwKl+u79WIdrZxtFtn+nBxHeb844XBQ9uMNTuTHdx2hc5RiAJYqwTj3wc/xe5HLSdJSkJ+WfZw==", 904 | "dev": true 905 | }, 906 | "supports-color": { 907 | "version": "5.5.0", 908 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", 909 | "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", 910 | "dev": true, 911 | "requires": { 912 | "has-flag": "^3.0.0" 913 | } 914 | }, 915 | "table": { 916 | "version": "5.4.6", 917 | "resolved": "https://registry.npmjs.org/table/-/table-5.4.6.tgz", 918 | "integrity": "sha512-wmEc8m4fjnob4gt5riFRtTu/6+4rSe12TpAELNSqHMfF3IqnA+CH37USM6/YR3qRZv7e56kAEAtd6nKZaxe0Ug==", 919 | "dev": true, 920 | "requires": { 921 | "ajv": "^6.10.2", 922 | "lodash": "^4.17.14", 923 | "slice-ansi": "^2.1.0", 924 | "string-width": "^3.0.0" 925 | }, 926 | "dependencies": { 927 | "emoji-regex": { 928 | "version": "7.0.3", 929 | "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", 930 | "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", 931 | "dev": true 932 | }, 933 | "is-fullwidth-code-point": { 934 | "version": "2.0.0", 935 | "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", 936 | "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", 937 | "dev": true 938 | }, 939 | "string-width": { 940 | "version": "3.1.0", 941 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", 942 | "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", 943 | "dev": true, 944 | "requires": { 945 | "emoji-regex": "^7.0.1", 946 | "is-fullwidth-code-point": "^2.0.0", 947 | "strip-ansi": "^5.1.0" 948 | } 949 | } 950 | } 951 | }, 952 | "text-table": { 953 | "version": "0.2.0", 954 | "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", 955 | "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", 956 | "dev": true 957 | }, 958 | "through": { 959 | "version": "2.3.8", 960 | "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", 961 | "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", 962 | "dev": true 963 | }, 964 | "tmp": { 965 | "version": "0.0.33", 966 | "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", 967 | "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", 968 | "dev": true, 969 | "requires": { 970 | "os-tmpdir": "~1.0.2" 971 | } 972 | }, 973 | "tslib": { 974 | "version": "1.10.0", 975 | "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.10.0.tgz", 976 | "integrity": "sha512-qOebF53frne81cf0S9B41ByenJ3/IuH8yJKngAX35CmiZySA0khhkovshKK+jGCaMnVomla7gVlIcc3EvKPbTQ==", 977 | "dev": true 978 | }, 979 | "type-check": { 980 | "version": "0.3.2", 981 | "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", 982 | "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", 983 | "dev": true, 984 | "requires": { 985 | "prelude-ls": "~1.1.2" 986 | } 987 | }, 988 | "type-fest": { 989 | "version": "0.8.1", 990 | "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", 991 | "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", 992 | "dev": true 993 | }, 994 | "uri-js": { 995 | "version": "4.2.2", 996 | "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz", 997 | "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==", 998 | "dev": true, 999 | "requires": { 1000 | "punycode": "^2.1.0" 1001 | } 1002 | }, 1003 | "v8-compile-cache": { 1004 | "version": "2.1.0", 1005 | "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.1.0.tgz", 1006 | "integrity": "sha512-usZBT3PW+LOjM25wbqIlZwPeJV+3OSz3M1k1Ws8snlW39dZyYL9lOGC5FgPVHfk0jKmjiDV8Z0mIbVQPiwFs7g==", 1007 | "dev": true 1008 | }, 1009 | "which": { 1010 | "version": "1.3.1", 1011 | "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", 1012 | "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", 1013 | "dev": true, 1014 | "requires": { 1015 | "isexe": "^2.0.0" 1016 | } 1017 | }, 1018 | "word-wrap": { 1019 | "version": "1.2.3", 1020 | "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", 1021 | "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", 1022 | "dev": true 1023 | }, 1024 | "wrappy": { 1025 | "version": "1.0.2", 1026 | "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", 1027 | "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", 1028 | "dev": true 1029 | }, 1030 | "write": { 1031 | "version": "1.0.3", 1032 | "resolved": "https://registry.npmjs.org/write/-/write-1.0.3.tgz", 1033 | "integrity": "sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig==", 1034 | "dev": true, 1035 | "requires": { 1036 | "mkdirp": "^0.5.1" 1037 | } 1038 | } 1039 | } 1040 | } 1041 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "typescript-brunch", 3 | "version": "3.0.0-pre", 4 | "description": "Adds TypeScript support to Brunch.", 5 | "author": "Baptiste Donaux ", 6 | "contributors": [ 7 | "Colin Bate " 8 | ], 9 | "homepage": "https://github.com/brunch/typescript-brunch", 10 | "repository": { 11 | "type": "git", 12 | "url": "git+ssh://git@github.com/brunch/typescript-brunch.git" 13 | }, 14 | "main": "./index.js", 15 | "files": [ 16 | "index.js", 17 | "transpile.js" 18 | ], 19 | "bugs": { 20 | "url": "https://github.com/brunch/typescript-brunch/issues" 21 | }, 22 | "scripts": { 23 | "test": "eslint ." 24 | }, 25 | "keywords": [ 26 | "typescript", 27 | "brunch", 28 | "tsc" 29 | ], 30 | "license": "MIT", 31 | "dependencies": { 32 | "anymatch": "^3.1" 33 | }, 34 | "devDependencies": { 35 | "eslint": "^6.7", 36 | "eslint-config-brunch": "^1.2" 37 | }, 38 | "peerDependencies": { 39 | "typescript": "^3.0.0" 40 | }, 41 | "eslintConfig": { 42 | "extends": "brunch" 43 | }, 44 | "engines": { 45 | "node": ">= 10.16" 46 | } 47 | } 48 | -------------------------------------------------------------------------------- /transpile.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | const ts = require('typescript'); 4 | 5 | const ignoredErrors = new Set([ 6 | 1208, // Cannot compile namespaces when the '--isolatedModules' flag is provided. 7 | 2307, // Cannot find module '{0}'. 8 | 2304, // Cannot find name '{0}'. 9 | 2322, // Type '{0}' is not assignable to type '{1}'. 10 | 2339, // Property '{0}' does not exist on type '{1}'. 11 | ]); 12 | 13 | const filterErrors = err => !ignoredErrors.has(err.code); 14 | 15 | const transpileModule = (input, transpileOptions) => { 16 | const options = ts.clone(transpileOptions.compilerOptions); 17 | 18 | options.isolatedModules = true; 19 | // transpileModule does not write anything to disk so there is no need to verify that there are no conflicts between input and output paths. 20 | options.suppressOutputPathCheck = true; 21 | // Filename can be non-ts file. 22 | options.allowNonTsExtensions = true; 23 | // We are not returning a sourceFile for lib file when asked by the program, 24 | // so pass --noLib to avoid reporting a file not found error. 25 | options.noLib = true; 26 | // In case it was defined, this is needed to work with noLib above. 27 | options.lib = undefined; 28 | // We are not doing a full typecheck, we are not resolving the whole context, 29 | // so pass --noResolve to avoid reporting missing file errors. 30 | options.noResolve = true; 31 | // We do want to emit here, so specifically enable it. 32 | options.noEmit = false; 33 | // if jsx is specified then treat file as .tsx 34 | const inputFileName = transpileOptions.fileName || 35 | (options.jsx ? 'module.tsx' : 'module.ts'); 36 | 37 | const sourceFile = ts.createSourceFile(inputFileName, input, options.target); 38 | 39 | if (transpileOptions.moduleName) { 40 | sourceFile.moduleName = transpileOptions.moduleName; 41 | } 42 | 43 | sourceFile.renamedDependencies = transpileOptions.renamedDependencies; 44 | 45 | const newLine = ts.getNewLineCharacter(options); 46 | 47 | // Output 48 | let outputText; 49 | let sourceMapText; 50 | 51 | // Create a compilerHost object to allow the compiler to read and write files 52 | const compilerHost = { 53 | getSourceFile(fileName /* target*/) { 54 | return fileName === ts.normalizeSlashes(inputFileName) ? 55 | sourceFile : 56 | undefined; 57 | }, 58 | writeFile(name, text /* writeByteOrderMark */) { 59 | if (ts.fileExtensionIs(name, '.map')) { 60 | ts.Debug.assert(sourceMapText === undefined, `Unexpected multiple source map outputs for the file '${name}'`); 61 | sourceMapText = text; 62 | } else { 63 | ts.Debug.assert(outputText === undefined, `Unexpected multiple outputs for the file: '${name}'`); 64 | outputText = text; 65 | } 66 | }, 67 | getDefaultLibFileName() { 68 | return 'lib.d.ts'; 69 | }, 70 | useCaseSensitiveFileNames() { 71 | return false; 72 | }, 73 | getCanonicalFileName(fileName) { 74 | return fileName; 75 | }, 76 | getCurrentDirectory() { 77 | return ''; 78 | }, 79 | getNewLine() { 80 | return newLine; 81 | }, 82 | fileExists(fileName) { 83 | return fileName === inputFileName; 84 | }, 85 | readFile(/* fileName */) { 86 | return ''; 87 | }, 88 | directoryExists(/* directoryExists */) { 89 | return true; 90 | }, 91 | }; 92 | 93 | const program = ts.createProgram([inputFileName], options, compilerHost); 94 | 95 | let diagnostics; 96 | if (transpileOptions.reportDiagnostics) { 97 | diagnostics = []; 98 | ts.addRange(/* to */ diagnostics, /* from */ program.getSyntacticDiagnostics(sourceFile)); 99 | ts.addRange(/* to */ diagnostics, /* from */ program.getSemanticDiagnostics(sourceFile).filter(filterErrors)); 100 | ts.addRange(/* to */ diagnostics, /* from */ program.getOptionsDiagnostics()); 101 | } 102 | 103 | // Emit 104 | program.emit(); 105 | ts.Debug.assert(outputText !== undefined, 'Output generation failed'); 106 | 107 | return {outputText, diagnostics, sourceMapText}; 108 | }; 109 | 110 | module.exports = transpileModule; 111 | --------------------------------------------------------------------------------