├── .github
└── FUNDING.yml
├── .gitignore
├── .prettierignore
├── .prettierrc
├── CHANGELOG.md
├── DEPENDENCIES.md
├── README.md
├── package.json
├── src
├── bin.ts
└── index.ts
├── tsconfig.json
└── yarn.lock
/.github/FUNDING.yml:
--------------------------------------------------------------------------------
1 | github: JamieMason
2 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | *.log
2 | *.log.*
3 | coverage
4 | dist
5 | node_modules
6 |
--------------------------------------------------------------------------------
/.prettierignore:
--------------------------------------------------------------------------------
1 | **/*.md
2 |
--------------------------------------------------------------------------------
/.prettierrc:
--------------------------------------------------------------------------------
1 | {
2 | "arrowParens": "always",
3 | "printWidth": 120,
4 | "proseWrap": "always",
5 | "singleQuote": true,
6 | "trailingComma": "all"
7 | }
8 |
--------------------------------------------------------------------------------
/CHANGELOG.md:
--------------------------------------------------------------------------------
1 | ## [0.6.2](https://github.com/JamieMason/ts-import-types-cli/compare/0.3.1...0.6.2) (2020-12-13)
2 |
3 |
4 | ### Bug Fixes
5 |
6 | * **default:** output default imports correctly ([3a2a87b](https://github.com/JamieMason/ts-import-types-cli/commit/3a2a87b4f4977435917bd22b64e21efbc63b20d2))
7 |
8 |
9 | ### Features
10 |
11 | * **directives:** highlight files with triple-slash directives ([5b664b3](https://github.com/JamieMason/ts-import-types-cli/commit/5b664b3e14be7f5c08c7504d65d962a5154b07f1))
12 | * **output:** skip unchanged files ([731a6e5](https://github.com/JamieMason/ts-import-types-cli/commit/731a6e5c757e03a176b866c7e70eef8be7ffa110))
13 | * **stdout:** improve logging output ([ace21f4](https://github.com/JamieMason/ts-import-types-cli/commit/ace21f448b9b9652e481823bb7caa30e16b2019c))
14 |
15 |
16 |
17 | ## [0.3.1](https://github.com/JamieMason/ts-import-types-cli/compare/0.3.0...0.3.1) (2020-12-12)
18 |
19 |
20 | ### Bug Fixes
21 |
22 | * **aliases:** handle import { name as alias } ([548d276](https://github.com/JamieMason/ts-import-types-cli/commit/548d2761d0e8109c61b21f7c3d0fe25c0710b57a))
23 |
24 |
25 |
26 | # [0.3.0](https://github.com/JamieMason/ts-import-types-cli/compare/0.2.0...0.3.0) (2020-12-12)
27 |
28 |
29 | ### Features
30 |
31 | * **cli:** accept multiple glob patterns to .ts files ([aa05415](https://github.com/JamieMason/ts-import-types-cli/commit/aa0541503ec30bd0610d7b3b42e6f63ad835e50c))
32 |
33 |
34 |
35 | # [0.2.0](https://github.com/JamieMason/ts-import-types-cli/compare/0.1.0...0.2.0) (2020-12-12)
36 |
37 |
38 | ### Features
39 |
40 | * **cli:** write progress to stdout ([3566275](https://github.com/JamieMason/ts-import-types-cli/commit/3566275e64632bf9ee33ef474e343a0bf9b9a312))
41 |
42 |
43 |
44 | # [0.1.0](https://github.com/JamieMason/ts-import-types-cli/compare/558e0d92000ae4791b405dd893d6ba7471a1f6fc...0.1.0) (2020-12-12)
45 |
46 |
47 | ### Features
48 |
49 | * **cli:** autofix typeScript types to be imported using `import type` ([558e0d9](https://github.com/JamieMason/ts-import-types-cli/commit/558e0d92000ae4791b405dd893d6ba7471a1f6fc))
50 |
51 |
52 |
53 |
--------------------------------------------------------------------------------
/DEPENDENCIES.md:
--------------------------------------------------------------------------------
1 | # ts-import-types-cli
2 |
3 | Autofix TypeScript types to be imported using `import type`
4 |
5 | ## Installation
6 |
7 | This is a [Node.js](https://nodejs.org/) module available through the
8 | [npm registry](https://www.npmjs.com/). It can be installed using the
9 | [`npm`](https://docs.npmjs.com/getting-started/installing-npm-packages-locally)
10 | or
11 | [`yarn`](https://yarnpkg.com/en/)
12 | command line tools.
13 |
14 | ```sh
15 | npm install ts-import-types-cli --save
16 | ```
17 |
18 | ## Dependencies
19 |
20 | - [chalk](https://ghub.io/chalk): Terminal string styling done right
21 | - [commander](https://ghub.io/commander): the complete solution for node.js command-line programs
22 | - [ts-morph](https://ghub.io/ts-morph): TypeScript compiler wrapper for static analysis and code manipulation.
23 |
24 | ## Dev Dependencies
25 |
26 | - [@types/node](https://ghub.io/@types/node): TypeScript definitions for Node.js
27 | - [ts-node](https://ghub.io/ts-node): TypeScript execution environment and REPL for node.js, with source map support
28 | - [typescript](https://ghub.io/typescript): TypeScript is a language for application scale JavaScript development
29 |
30 | ## License
31 |
32 | MIT
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # ts-import-types-cli
2 |
3 | > Autofix TypeScript types to be imported using `import type`
4 |
5 | ## Installation
6 |
7 | ```
8 | npm install -g ts-import-types-cli
9 | ```
10 |
11 | ## Usage
12 |
13 | ```
14 | Usage: ts-import-types-cli [options] [patterns...]
15 |
16 | Options:
17 | -V, --version output the version number
18 | -d, --dry-run write output to stdout instead of overwriting files
19 | -p, --project [path] path to tsconfig.json
20 | -O, --no-organise-imports disable use of VS Code's organise imports refactoring
21 | -h, --help display help for command
22 | ```
23 |
24 | ## Example
25 |
26 | ```
27 | $ ts-import-types-cli --project ./tsconfig.json 'src/**/*.ts' 'src/**/*.tsx'
28 | ```
29 |
30 | ```ts
31 | import { interpret, StateValue } from 'xstate';
32 | import { sendSearch } from '../../services/search-client/send-search';
33 | import { createAlgoliaMachine } from '../machine';
34 | import { AlgoliaInterpreter, AlgoliaMachine } from '../machine/types';
35 |
36 | // ...the rest of the file
37 | ```
38 |
39 |
↓↓↓↓↓
40 |
41 | ```ts
42 | import type { StateValue } from 'xstate'
43 | import { interpret } from 'xstate'
44 | import { sendSearch } from '../../services/search-client/send-search'
45 | import { createAlgoliaMachine } from '../machine'
46 | import type { AlgoliaInterpreter, AlgoliaMachine } from '../machine/types'
47 |
48 | // ...the rest of the file
49 | ```
50 |
51 | ## Triple-Slash Directives
52 |
53 | Moving triple-slash directives such as `/// ` back
54 | to the top of the file is not yet supported. If you know how to do this using
55 | https://ts-morph.com please [open a
56 | PR](https://github.com/JamieMason/ts-import-types-cli/pulls) or otherwise let me
57 | know.
58 |
59 | Unfortunately until then, files will need their triple-slash directives manually
60 | moving back to the top of the file.
61 |
62 | `ts-import-types-cli` will output a list of which files are affected.
63 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "ts-import-types-cli",
3 | "description": "Autofix TypeScript types to be imported using `import type`",
4 | "version": "0.6.2",
5 | "author": "Jamie Mason (https://github.com/JamieMason)",
6 | "bin": {
7 | "ts-import-types-cli": "dist/bin.js"
8 | },
9 | "bugs": "https://github.com/JamieMason/ts-import-types-cli/issues",
10 | "dependencies": {
11 | "chalk": "4.1.0",
12 | "commander": "6.2.0",
13 | "ts-morph": "9.1.0"
14 | },
15 | "devDependencies": {
16 | "@types/node": "14.14.12",
17 | "ts-node": "9.1.1",
18 | "typescript": "4.1.3"
19 | },
20 | "engines": {
21 | "node": ">=10"
22 | },
23 | "files": [
24 | "dist"
25 | ],
26 | "homepage": "https://github.com/JamieMason/ts-import-types-cli#readme",
27 | "keywords": [
28 | "cli",
29 | "codemod",
30 | "codemods",
31 | "import declarations",
32 | "imports",
33 | "jscodeshift",
34 | "refactor",
35 | "ts-morph",
36 | "type-only imports",
37 | "typescript"
38 | ],
39 | "license": "MIT",
40 | "main": "ts-import-types-cli",
41 | "repository": "JamieMason/ts-import-types-cli",
42 | "scripts": {
43 | "build": "tsc --project ."
44 | }
45 | }
46 |
--------------------------------------------------------------------------------
/src/bin.ts:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env node
2 |
3 | import chalk = require('chalk');
4 | import program = require('commander');
5 | import { resolve } from 'path';
6 | import { tsImportTypes } from '.';
7 |
8 | const sourcePatterns: string[] = [];
9 |
10 | program
11 | .version(require('../package.json').version)
12 | .arguments('[patterns...]')
13 | .action((args: string[]) => {
14 | sourcePatterns.push(...args.filter((arg) => arg && typeof arg === 'string'));
15 | })
16 | .option('-d, --dry-run', 'write output to stdout instead of overwriting files')
17 | .option('-p, --project [path]', 'path to tsconfig.json')
18 | .option('-O, --no-organise-imports', "disable use of VS Code's organise imports refactoring")
19 | .parse(process.argv);
20 |
21 | const dryRun = program.dryRun === true;
22 | const organiseImports = program.organiseImports !== false;
23 | const project = program.project || './tsconfig.json';
24 | const tsConfigFilePath = resolve(process.cwd(), project);
25 |
26 | try {
27 | require(tsConfigFilePath);
28 | } catch (err) {
29 | const message = `ts-import-types-cli --project ${tsConfigFilePath} is not a tsconfig.json file`;
30 | console.error(chalk.red(message));
31 | process.exit(1);
32 | }
33 |
34 | try {
35 | tsImportTypes({
36 | dryRun,
37 | organiseImports,
38 | sourcePatterns,
39 | tsConfigFilePath,
40 | });
41 | } catch (err) {
42 | console.error(
43 | chalk.red('! %s\n\n! Please raise an issue at %s\n\n%s'),
44 | err.message,
45 | chalk.underline('https://github.com/JamieMason/ts-import-types-cli/issues'),
46 | String(err.stack).replace(/^/gm, ' '),
47 | );
48 | process.exit(1);
49 | }
50 |
--------------------------------------------------------------------------------
/src/index.ts:
--------------------------------------------------------------------------------
1 | import chalk from 'chalk';
2 | import { EOL } from 'os';
3 | import { relative } from 'path';
4 | import { DefinitionInfo, ImportDeclaration, ImportSpecifier, Project, SourceFile, ts } from 'ts-morph';
5 |
6 | interface ModuleImports {
7 | /** import { someImplementation } from './file' */
8 | codeImports: string[];
9 | /** import someImplementation from './file' */
10 | defaultImport: string;
11 | /** import type { SomeType } from './file' */
12 | typeImports: string[];
13 | }
14 |
15 | export interface Options {
16 | /** Write output to stdout instead of overwriting files. */
17 | dryRun: boolean;
18 | /** Disable use of VS Code's organise imports refactoring. */
19 | organiseImports: boolean;
20 | /** Glob patterns to .ts or .tsx files. */
21 | sourcePatterns: string[];
22 | /** Path to tsconfig.json file. */
23 | tsConfigFilePath: string;
24 | }
25 |
26 | const info = (...messages: Array) => {
27 | console.log(chalk.blue('i', ...messages));
28 | };
29 |
30 | const getRelativePath = (sourceFile: SourceFile): string => {
31 | return relative(process.cwd(), sourceFile.getFilePath());
32 | };
33 |
34 | const getSourceFiles = (sourcePatterns: string[], project: Project): SourceFile[] => {
35 | return sourcePatterns.length ? project.getSourceFiles(sourcePatterns) : project.getSourceFiles();
36 | };
37 |
38 | export function tsImportTypes({ dryRun, organiseImports, sourcePatterns, tsConfigFilePath }: Options) {
39 | info('Analysing', relative(process.cwd(), tsConfigFilePath));
40 |
41 | const project = new Project({ tsConfigFilePath });
42 | const sourceFiles = getSourceFiles(sourcePatterns, project);
43 | const filesWithRewrittenDirectives: string[] = [];
44 |
45 | info('Found', sourceFiles.length, 'files');
46 |
47 | sourceFiles.forEach((sourceFile: SourceFile, i) => {
48 | try {
49 | let hasChanged = false;
50 |
51 | const importDeclarations = sourceFile.getImportDeclarations();
52 | const imports: Record = {};
53 | const rewrittenImports: string[] = [];
54 | const rewrittenDirectives: string[] = [];
55 |
56 | sourceFile.getPathReferenceDirectives().forEach((directive) => {
57 | rewrittenDirectives.push(`/// `);
58 | });
59 | sourceFile.getTypeReferenceDirectives().forEach((directive) => {
60 | rewrittenDirectives.push(`/// `);
61 | });
62 | sourceFile.getLibReferenceDirectives().forEach((directive) => {
63 | rewrittenDirectives.push(`/// `);
64 | });
65 |
66 | /** import Default, { named1, named2 as alias } from './file' */
67 | importDeclarations.forEach((importDeclaration: ImportDeclaration) => {
68 | /** Default */
69 | const defaultImport = importDeclaration.getDefaultImport();
70 | /** { named1, named2 as alias } */
71 | const namedImports = importDeclaration.getNamedImports();
72 | /** eg './file' or 'some-dependency' */
73 | const modulePath = importDeclaration.getModuleSpecifierValue();
74 |
75 | imports[modulePath] = imports[modulePath] || {
76 | codeImports: [],
77 | defaultImport: '',
78 | typeImports: [],
79 | };
80 |
81 | if (defaultImport) {
82 | imports[modulePath].defaultImport = defaultImport.getText();
83 | hasChanged = true;
84 | }
85 |
86 | namedImports.forEach((namedImport: ImportSpecifier) => {
87 | /** import { named2 as alias } */
88 | const alias = namedImport.getAliasNode()?.getText();
89 | const definitions = namedImport.getNameNode().getDefinitions();
90 | /** determine whether this import is a type or an implementation */
91 | definitions.forEach((definition: DefinitionInfo) => {
92 | const definitionName = definition.getName();
93 | const finalName = alias ? `${definitionName} as ${alias}` : definitionName;
94 | const definitionKind = definition.getKind();
95 | if (['type', 'interface'].includes(definitionKind)) {
96 | hasChanged = true;
97 | imports[modulePath].typeImports.push(finalName);
98 | } else {
99 | hasChanged = true;
100 | imports[modulePath].codeImports.push(finalName);
101 | }
102 | });
103 | });
104 |
105 | if (hasChanged) {
106 | importDeclaration.remove();
107 | }
108 | });
109 |
110 | // write new imports for those we've collected and removed
111 | Object.entries(imports).forEach(
112 | ([identifier, { codeImports, defaultImport, typeImports }]: [string, ModuleImports]) => {
113 | if (defaultImport && codeImports.length) {
114 | rewrittenImports.push(`import ${defaultImport}, { ${codeImports.join(', ')} } from '${identifier}'`);
115 | }
116 | if (defaultImport && !codeImports.length) {
117 | rewrittenImports.push(`import ${defaultImport} from '${identifier}'`);
118 | }
119 | if (!defaultImport && codeImports.length) {
120 | rewrittenImports.push(`import { ${codeImports.join(', ')} } from '${identifier}'`);
121 | }
122 | if (typeImports.length) {
123 | rewrittenImports.push(`import type { ${typeImports.join(', ')} } from '${identifier}'`);
124 | }
125 | },
126 | );
127 |
128 | // nothing to do
129 | if (rewrittenImports.length === 0) {
130 | console.log(chalk.gray('-', getRelativePath(sourceFile)));
131 | return;
132 | }
133 |
134 | console.log(chalk.green('✓', getRelativePath(sourceFile)));
135 |
136 | if (rewrittenDirectives.length > 0) {
137 | filesWithRewrittenDirectives.push(getRelativePath(sourceFile));
138 | console.log(chalk.yellow('! contains triple-slash directives'));
139 | }
140 |
141 | sourceFile.insertText(0, rewrittenImports.join(EOL) + EOL + EOL);
142 |
143 | if (organiseImports !== false) {
144 | sourceFile.organizeImports();
145 | }
146 |
147 | if (dryRun === true) {
148 | console.log(sourceFile.getText());
149 | } else {
150 | sourceFile.saveSync();
151 | }
152 | } catch (err) {
153 | console.log(chalk.red('×', getRelativePath(sourceFile)));
154 | }
155 | });
156 |
157 | console.log('');
158 | console.log(chalk.bgGreen.black(' Complete '));
159 | console.log('');
160 |
161 | if (filesWithRewrittenDirectives.length > 0) {
162 | console.log(
163 | chalk.yellow(
164 | `
165 | * Moving triple-slash directives such as /// back
166 | to the top of the file is not yet supported. If you know how to do this using
167 | https://ts-morph.com please open a PR or otherwise let me know.
168 |
169 | https://github.com/JamieMason/ts-import-types-cli/pulls
170 |
171 | Unfortunately until then, the following files will need their triple-slash
172 | directives manually moving back to the top of the file:
173 | ${filesWithRewrittenDirectives.map((filePath) => `\n - ${filePath}`).join('')}
174 | `.trim(),
175 | ),
176 | );
177 | }
178 | }
179 |
--------------------------------------------------------------------------------
/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "compilerOptions": {
3 | "declaration": true,
4 | "downlevelIteration": true,
5 | "esModuleInterop": true,
6 | "forceConsistentCasingInFileNames": true,
7 | "lib": ["es2017", "es6"],
8 | "outDir": "./dist",
9 | "skipLibCheck": true,
10 | "strict": true,
11 | "target": "es3"
12 | },
13 | "include": ["./package.json", "./src/**/*.ts"],
14 | "exclude": ["./src/**/*.spec.ts"]
15 | }
16 |
--------------------------------------------------------------------------------
/yarn.lock:
--------------------------------------------------------------------------------
1 | # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
2 | # yarn lockfile v1
3 |
4 |
5 | "@dsherret/to-absolute-glob@^2.0.2":
6 | version "2.0.2"
7 | resolved "https://registry.yarnpkg.com/@dsherret/to-absolute-glob/-/to-absolute-glob-2.0.2.tgz#1f6475dc8bd974cea07a2daf3864b317b1dd332c"
8 | integrity sha1-H2R13IvZdM6gei2vOGSzF7HdMyw=
9 | dependencies:
10 | is-absolute "^1.0.0"
11 | is-negated-glob "^1.0.0"
12 |
13 | "@nodelib/fs.scandir@2.1.3":
14 | version "2.1.3"
15 | resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.3.tgz#3a582bdb53804c6ba6d146579c46e52130cf4a3b"
16 | integrity sha512-eGmwYQn3gxo4r7jdQnkrrN6bY478C3P+a/y72IJukF8LjB6ZHeB3c+Ehacj3sYeSmUXGlnA67/PmbM9CVwL7Dw==
17 | dependencies:
18 | "@nodelib/fs.stat" "2.0.3"
19 | run-parallel "^1.1.9"
20 |
21 | "@nodelib/fs.stat@2.0.3", "@nodelib/fs.stat@^2.0.2":
22 | version "2.0.3"
23 | resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.3.tgz#34dc5f4cabbc720f4e60f75a747e7ecd6c175bd3"
24 | integrity sha512-bQBFruR2TAwoevBEd/NWMoAAtNGzTRgdrqnYCc7dhzfoNvqPzLyqlEQnzZ3kVnNrSp25iyxE00/3h2fqGAGArA==
25 |
26 | "@nodelib/fs.walk@^1.2.3":
27 | version "1.2.4"
28 | resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.4.tgz#011b9202a70a6366e436ca5c065844528ab04976"
29 | integrity sha512-1V9XOY4rDW0rehzbrcqAmHnz8e7SKvX27gh8Gt2WgB0+pdzdiLV83p72kZPU+jvMbS1qU5mauP2iOvO8rhmurQ==
30 | dependencies:
31 | "@nodelib/fs.scandir" "2.1.3"
32 | fastq "^1.6.0"
33 |
34 | "@ts-morph/common@~0.7.0":
35 | version "0.7.2"
36 | resolved "https://registry.yarnpkg.com/@ts-morph/common/-/common-0.7.2.tgz#b937d13376695146735aecec6af4573cee513a56"
37 | integrity sha512-XyUPLf1UHtteP5C5FEgVJqgIEOcmaSEoJyU/jQ1gTBKlz/lb1Uss4ix+D2e5qRwPFiBMqM/jwJpna0yVDE5V/g==
38 | dependencies:
39 | "@dsherret/to-absolute-glob" "^2.0.2"
40 | fast-glob "^3.2.4"
41 | is-negated-glob "^1.0.0"
42 | mkdirp "^1.0.4"
43 | multimatch "^5.0.0"
44 | typescript "~4.1.2"
45 |
46 | "@types/minimatch@^3.0.3":
47 | version "3.0.3"
48 | resolved "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-3.0.3.tgz#3dca0e3f33b200fc7d1139c0cd96c1268cadfd9d"
49 | integrity sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA==
50 |
51 | "@types/node@14.14.12":
52 | version "14.14.12"
53 | resolved "https://registry.yarnpkg.com/@types/node/-/node-14.14.12.tgz#0b1d86f8c40141091285dea02e4940df73bba43f"
54 | integrity sha512-ASH8OPHMNlkdjrEdmoILmzFfsJICvhBsFfAum4aKZ/9U4B6M6tTmTPh+f3ttWdD74CEGV5XvXWkbyfSdXaTd7g==
55 |
56 | ansi-styles@^4.1.0:
57 | version "4.3.0"
58 | resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937"
59 | integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==
60 | dependencies:
61 | color-convert "^2.0.1"
62 |
63 | arg@^4.1.0:
64 | version "4.1.3"
65 | resolved "https://registry.yarnpkg.com/arg/-/arg-4.1.3.tgz#269fc7ad5b8e42cb63c896d5666017261c144089"
66 | integrity sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==
67 |
68 | array-differ@^3.0.0:
69 | version "3.0.0"
70 | resolved "https://registry.yarnpkg.com/array-differ/-/array-differ-3.0.0.tgz#3cbb3d0f316810eafcc47624734237d6aee4ae6b"
71 | integrity sha512-THtfYS6KtME/yIAhKjZ2ul7XI96lQGHRputJQHO80LAWQnuGP4iCIN8vdMRboGbIEYBwU33q8Tch1os2+X0kMg==
72 |
73 | array-union@^2.1.0:
74 | version "2.1.0"
75 | resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d"
76 | integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==
77 |
78 | arrify@^2.0.1:
79 | version "2.0.1"
80 | resolved "https://registry.yarnpkg.com/arrify/-/arrify-2.0.1.tgz#c9655e9331e0abcd588d2a7cad7e9956f66701fa"
81 | integrity sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug==
82 |
83 | balanced-match@^1.0.0:
84 | version "1.0.0"
85 | resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767"
86 | integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c=
87 |
88 | brace-expansion@^1.1.7:
89 | version "1.1.11"
90 | resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd"
91 | integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==
92 | dependencies:
93 | balanced-match "^1.0.0"
94 | concat-map "0.0.1"
95 |
96 | braces@^3.0.1:
97 | version "3.0.2"
98 | resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107"
99 | integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==
100 | dependencies:
101 | fill-range "^7.0.1"
102 |
103 | buffer-from@^1.0.0:
104 | version "1.1.1"
105 | resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef"
106 | integrity sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==
107 |
108 | chalk@4.1.0:
109 | version "4.1.0"
110 | resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.0.tgz#4e14870a618d9e2edd97dd8345fd9d9dc315646a"
111 | integrity sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==
112 | dependencies:
113 | ansi-styles "^4.1.0"
114 | supports-color "^7.1.0"
115 |
116 | code-block-writer@^10.1.1:
117 | version "10.1.1"
118 | resolved "https://registry.yarnpkg.com/code-block-writer/-/code-block-writer-10.1.1.tgz#ad5684ed4bfb2b0783c8b131281ae84ee640a42f"
119 | integrity sha512-67ueh2IRGst/51p0n6FvPrnRjAGHY5F8xdjkgrYE7DDzpJe6qA07RYQ9VcoUeo5ATOjSOiWpSL3SWBRRbempMw==
120 |
121 | color-convert@^2.0.1:
122 | version "2.0.1"
123 | resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3"
124 | integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==
125 | dependencies:
126 | color-name "~1.1.4"
127 |
128 | color-name@~1.1.4:
129 | version "1.1.4"
130 | resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2"
131 | integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==
132 |
133 | commander@6.2.0:
134 | version "6.2.0"
135 | resolved "https://registry.yarnpkg.com/commander/-/commander-6.2.0.tgz#b990bfb8ac030aedc6d11bc04d1488ffef56db75"
136 | integrity sha512-zP4jEKbe8SHzKJYQmq8Y9gYjtO/POJLgIdKgV7B9qNmABVFVc+ctqSX6iXh4mCpJfRBOabiZ2YKPg8ciDw6C+Q==
137 |
138 | concat-map@0.0.1:
139 | version "0.0.1"
140 | resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b"
141 | integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=
142 |
143 | create-require@^1.1.0:
144 | version "1.1.1"
145 | resolved "https://registry.yarnpkg.com/create-require/-/create-require-1.1.1.tgz#c1d7e8f1e5f6cfc9ff65f9cd352d37348756c333"
146 | integrity sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==
147 |
148 | diff@^4.0.1:
149 | version "4.0.2"
150 | resolved "https://registry.yarnpkg.com/diff/-/diff-4.0.2.tgz#60f3aecb89d5fae520c11aa19efc2bb982aade7d"
151 | integrity sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==
152 |
153 | fast-glob@^3.2.4:
154 | version "3.2.4"
155 | resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.4.tgz#d20aefbf99579383e7f3cc66529158c9b98554d3"
156 | integrity sha512-kr/Oo6PX51265qeuCYsyGypiO5uJFgBS0jksyG7FUeCyQzNwYnzrNIMR1NXfkZXsMYXYLRAHgISHBz8gQcxKHQ==
157 | dependencies:
158 | "@nodelib/fs.stat" "^2.0.2"
159 | "@nodelib/fs.walk" "^1.2.3"
160 | glob-parent "^5.1.0"
161 | merge2 "^1.3.0"
162 | micromatch "^4.0.2"
163 | picomatch "^2.2.1"
164 |
165 | fastq@^1.6.0:
166 | version "1.9.0"
167 | resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.9.0.tgz#e16a72f338eaca48e91b5c23593bcc2ef66b7947"
168 | integrity sha512-i7FVWL8HhVY+CTkwFxkN2mk3h+787ixS5S63eb78diVRc1MCssarHq3W5cj0av7YDSwmaV928RNag+U1etRQ7w==
169 | dependencies:
170 | reusify "^1.0.4"
171 |
172 | fill-range@^7.0.1:
173 | version "7.0.1"
174 | resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40"
175 | integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==
176 | dependencies:
177 | to-regex-range "^5.0.1"
178 |
179 | glob-parent@^5.1.0:
180 | version "5.1.1"
181 | resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.1.tgz#b6c1ef417c4e5663ea498f1c45afac6916bbc229"
182 | integrity sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ==
183 | dependencies:
184 | is-glob "^4.0.1"
185 |
186 | has-flag@^4.0.0:
187 | version "4.0.0"
188 | resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b"
189 | integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==
190 |
191 | is-absolute@^1.0.0:
192 | version "1.0.0"
193 | resolved "https://registry.yarnpkg.com/is-absolute/-/is-absolute-1.0.0.tgz#395e1ae84b11f26ad1795e73c17378e48a301576"
194 | integrity sha512-dOWoqflvcydARa360Gvv18DZ/gRuHKi2NU/wU5X1ZFzdYfH29nkiNZsF3mp4OJ3H4yo9Mx8A/uAGNzpzPN3yBA==
195 | dependencies:
196 | is-relative "^1.0.0"
197 | is-windows "^1.0.1"
198 |
199 | is-extglob@^2.1.1:
200 | version "2.1.1"
201 | resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2"
202 | integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=
203 |
204 | is-glob@^4.0.1:
205 | version "4.0.1"
206 | resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.1.tgz#7567dbe9f2f5e2467bc77ab83c4a29482407a5dc"
207 | integrity sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==
208 | dependencies:
209 | is-extglob "^2.1.1"
210 |
211 | is-negated-glob@^1.0.0:
212 | version "1.0.0"
213 | resolved "https://registry.yarnpkg.com/is-negated-glob/-/is-negated-glob-1.0.0.tgz#6910bca5da8c95e784b5751b976cf5a10fee36d2"
214 | integrity sha1-aRC8pdqMleeEtXUbl2z1oQ/uNtI=
215 |
216 | is-number@^7.0.0:
217 | version "7.0.0"
218 | resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b"
219 | integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==
220 |
221 | is-relative@^1.0.0:
222 | version "1.0.0"
223 | resolved "https://registry.yarnpkg.com/is-relative/-/is-relative-1.0.0.tgz#a1bb6935ce8c5dba1e8b9754b9b2dcc020e2260d"
224 | integrity sha512-Kw/ReK0iqwKeu0MITLFuj0jbPAmEiOsIwyIXvvbfa6QfmN9pkD1M+8pdk7Rl/dTKbH34/XBFMbgD4iMJhLQbGA==
225 | dependencies:
226 | is-unc-path "^1.0.0"
227 |
228 | is-unc-path@^1.0.0:
229 | version "1.0.0"
230 | resolved "https://registry.yarnpkg.com/is-unc-path/-/is-unc-path-1.0.0.tgz#d731e8898ed090a12c352ad2eaed5095ad322c9d"
231 | integrity sha512-mrGpVd0fs7WWLfVsStvgF6iEJnbjDFZh9/emhRDcGWTduTfNHd9CHeUwH3gYIjdbwo4On6hunkztwOaAw0yllQ==
232 | dependencies:
233 | unc-path-regex "^0.1.2"
234 |
235 | is-windows@^1.0.1:
236 | version "1.0.2"
237 | resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d"
238 | integrity sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==
239 |
240 | make-error@^1.1.1:
241 | version "1.3.6"
242 | resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.6.tgz#2eb2e37ea9b67c4891f684a1394799af484cf7a2"
243 | integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==
244 |
245 | merge2@^1.3.0:
246 | version "1.4.1"
247 | resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae"
248 | integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==
249 |
250 | micromatch@^4.0.2:
251 | version "4.0.2"
252 | resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.2.tgz#4fcb0999bf9fbc2fcbdd212f6d629b9a56c39259"
253 | integrity sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q==
254 | dependencies:
255 | braces "^3.0.1"
256 | picomatch "^2.0.5"
257 |
258 | minimatch@^3.0.4:
259 | version "3.0.4"
260 | resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083"
261 | integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==
262 | dependencies:
263 | brace-expansion "^1.1.7"
264 |
265 | mkdirp@^1.0.4:
266 | version "1.0.4"
267 | resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e"
268 | integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==
269 |
270 | multimatch@^5.0.0:
271 | version "5.0.0"
272 | resolved "https://registry.yarnpkg.com/multimatch/-/multimatch-5.0.0.tgz#932b800963cea7a31a033328fa1e0c3a1874dbe6"
273 | integrity sha512-ypMKuglUrZUD99Tk2bUQ+xNQj43lPEfAeX2o9cTteAmShXy2VHDJpuwu1o0xqoKCt9jLVAvwyFKdLTPXKAfJyA==
274 | dependencies:
275 | "@types/minimatch" "^3.0.3"
276 | array-differ "^3.0.0"
277 | array-union "^2.1.0"
278 | arrify "^2.0.1"
279 | minimatch "^3.0.4"
280 |
281 | picomatch@^2.0.5, picomatch@^2.2.1:
282 | version "2.2.2"
283 | resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.2.2.tgz#21f333e9b6b8eaff02468f5146ea406d345f4dad"
284 | integrity sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg==
285 |
286 | reusify@^1.0.4:
287 | version "1.0.4"
288 | resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76"
289 | integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==
290 |
291 | run-parallel@^1.1.9:
292 | version "1.1.10"
293 | resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.1.10.tgz#60a51b2ae836636c81377df16cb107351bcd13ef"
294 | integrity sha512-zb/1OuZ6flOlH6tQyMPUrE3x3Ulxjlo9WIVXR4yVYi4H9UXQaeIsPbLn2R3O3vQCnDKkAl2qHiuocKKX4Tz/Sw==
295 |
296 | source-map-support@^0.5.17:
297 | version "0.5.19"
298 | resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.19.tgz#a98b62f86dcaf4f67399648c085291ab9e8fed61"
299 | integrity sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==
300 | dependencies:
301 | buffer-from "^1.0.0"
302 | source-map "^0.6.0"
303 |
304 | source-map@^0.6.0:
305 | version "0.6.1"
306 | resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263"
307 | integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==
308 |
309 | supports-color@^7.1.0:
310 | version "7.2.0"
311 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da"
312 | integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==
313 | dependencies:
314 | has-flag "^4.0.0"
315 |
316 | to-regex-range@^5.0.1:
317 | version "5.0.1"
318 | resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4"
319 | integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==
320 | dependencies:
321 | is-number "^7.0.0"
322 |
323 | ts-morph@9.1.0:
324 | version "9.1.0"
325 | resolved "https://registry.yarnpkg.com/ts-morph/-/ts-morph-9.1.0.tgz#10d2088387c71f3c674f82492a3cec1e3538f0dd"
326 | integrity sha512-sei4u651MBenr27sD6qLDXN3gZ4thiX71E3qV7SuVtDas0uvK2LtgZkIYUf9DKm/fLJ6AB/+yhRJ1vpEBJgy7Q==
327 | dependencies:
328 | "@dsherret/to-absolute-glob" "^2.0.2"
329 | "@ts-morph/common" "~0.7.0"
330 | code-block-writer "^10.1.1"
331 |
332 | ts-node@9.1.1:
333 | version "9.1.1"
334 | resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-9.1.1.tgz#51a9a450a3e959401bda5f004a72d54b936d376d"
335 | integrity sha512-hPlt7ZACERQGf03M253ytLY3dHbGNGrAq9qIHWUY9XHYl1z7wYngSr3OQ5xmui8o2AaxsONxIzjafLUiWBo1Fg==
336 | dependencies:
337 | arg "^4.1.0"
338 | create-require "^1.1.0"
339 | diff "^4.0.1"
340 | make-error "^1.1.1"
341 | source-map-support "^0.5.17"
342 | yn "3.1.1"
343 |
344 | typescript@4.1.3, typescript@~4.1.2:
345 | version "4.1.3"
346 | resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.1.3.tgz#519d582bd94cba0cf8934c7d8e8467e473f53bb7"
347 | integrity sha512-B3ZIOf1IKeH2ixgHhj6la6xdwR9QrLC5d1VKeCSY4tvkqhF2eqd9O7txNlS0PO3GrBAFIdr3L1ndNwteUbZLYg==
348 |
349 | unc-path-regex@^0.1.2:
350 | version "0.1.2"
351 | resolved "https://registry.yarnpkg.com/unc-path-regex/-/unc-path-regex-0.1.2.tgz#e73dd3d7b0d7c5ed86fbac6b0ae7d8c6a69d50fa"
352 | integrity sha1-5z3T17DXxe2G+6xrCufYxqadUPo=
353 |
354 | yn@3.1.1:
355 | version "3.1.1"
356 | resolved "https://registry.yarnpkg.com/yn/-/yn-3.1.1.tgz#1e87401a09d767c1d5eab26a6e4c185182d2eb50"
357 | integrity sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==
358 |
--------------------------------------------------------------------------------