@teambit/typescript 0.0.869 → 0.0.871
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/cmds/write-tsconfig.cmd.ts +62 -0
- package/dist/cmds/write-tsconfig.cmd.d.ts +18 -0
- package/dist/cmds/write-tsconfig.cmd.js +105 -0
- package/dist/cmds/write-tsconfig.cmd.js.map +1 -0
- package/dist/dedupe-path.spec.d.ts +1 -0
- package/dist/dedupe-path.spec.js +59 -0
- package/dist/dedupe-path.spec.js.map +1 -0
- package/dist/tsconfig-writer.d.ts +48 -0
- package/dist/tsconfig-writer.js +294 -0
- package/dist/tsconfig-writer.js.map +1 -0
- package/dist/typescript.main.runtime.d.ts +20 -3
- package/dist/typescript.main.runtime.js +64 -5
- package/dist/typescript.main.runtime.js.map +1 -1
- package/package-tar/teambit-typescript-0.0.871.tgz +0 -0
- package/package.json +18 -16
- package/{preview-1664813308287.js → preview-1664941100086.js} +2 -2
- package/package-tar/teambit-typescript-0.0.869.tgz +0 -0
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import path from 'path';
|
|
2
|
+
import { omit } from 'lodash';
|
|
3
|
+
import { Command, CommandOptions } from '@teambit/cli';
|
|
4
|
+
import chalk from 'chalk';
|
|
5
|
+
import { TypescriptMain } from '../typescript.main.runtime';
|
|
6
|
+
|
|
7
|
+
export default class WriteTsconfigCmd implements Command {
|
|
8
|
+
name = 'write-tsconfig';
|
|
9
|
+
description = 'EXPERIMENTAL. write tsconfig.json files in the component directories';
|
|
10
|
+
alias = '';
|
|
11
|
+
group = 'development';
|
|
12
|
+
options = [
|
|
13
|
+
['c', 'clean', 'delete tsconfig files from the workspace. highly recommended to run it with "--dry-run" first'],
|
|
14
|
+
['s', 'silent', 'do not prompt for confirmation'],
|
|
15
|
+
['', 'no-dedupe', "write tsconfig.json inside each one of the component's dir, avoid deduping"],
|
|
16
|
+
['', 'dry-run', 'show the paths that tsconfig will be written per env'],
|
|
17
|
+
['', 'dry-run-with-tsconfig', 'show the tsconfig.json content and the paths it will be written per env'],
|
|
18
|
+
] as CommandOptions;
|
|
19
|
+
|
|
20
|
+
constructor(private tsMain: TypescriptMain) {}
|
|
21
|
+
|
|
22
|
+
async report(
|
|
23
|
+
_args,
|
|
24
|
+
{
|
|
25
|
+
clean,
|
|
26
|
+
silent,
|
|
27
|
+
dryRun,
|
|
28
|
+
noDedupe,
|
|
29
|
+
dryRunWithTsconfig,
|
|
30
|
+
}: { dryRun?: boolean; noDedupe?: boolean; dryRunWithTsconfig?: boolean; clean?: boolean; silent?: boolean }
|
|
31
|
+
) {
|
|
32
|
+
const { writeResults, cleanResults } = await this.tsMain.writeTsconfigJson({
|
|
33
|
+
clean,
|
|
34
|
+
dedupe: !noDedupe,
|
|
35
|
+
dryRun: dryRun || dryRunWithTsconfig,
|
|
36
|
+
dryRunWithTsconfig,
|
|
37
|
+
silent,
|
|
38
|
+
});
|
|
39
|
+
const cleanResultsOutput = cleanResults
|
|
40
|
+
? `${chalk.green(`the following paths were deleted`)}\n${cleanResults.join('\n')}\n\n`
|
|
41
|
+
: '';
|
|
42
|
+
if (dryRunWithTsconfig) {
|
|
43
|
+
return JSON.stringify(writeResults, undefined, 2);
|
|
44
|
+
}
|
|
45
|
+
if (dryRun) {
|
|
46
|
+
const withoutTsconfig = writeResults.map((s) => omit(s, ['tsconfig']));
|
|
47
|
+
return JSON.stringify(withoutTsconfig, undefined, 2);
|
|
48
|
+
}
|
|
49
|
+
const totalFiles = writeResults.map((r) => r.paths.length).reduce((acc, current) => acc + current);
|
|
50
|
+
const writeTitle = chalk.green(`${totalFiles} files have been written successfully`);
|
|
51
|
+
const writeOutput = writeResults
|
|
52
|
+
.map((result) => {
|
|
53
|
+
const paths = result.paths
|
|
54
|
+
.map((p) => path.join(p, 'tsconfig.json'))
|
|
55
|
+
.map((str) => ` ${str}`)
|
|
56
|
+
.join('\n');
|
|
57
|
+
return `The following paths were written according to env ${chalk.bold(result.envId)}\n${paths}`;
|
|
58
|
+
})
|
|
59
|
+
.join('\n\n');
|
|
60
|
+
return `${cleanResultsOutput}${writeTitle}\n${writeOutput}`;
|
|
61
|
+
}
|
|
62
|
+
}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { Command, CommandOptions } from '@teambit/cli';
|
|
2
|
+
import { TypescriptMain } from '../typescript.main.runtime';
|
|
3
|
+
export default class WriteTsconfigCmd implements Command {
|
|
4
|
+
private tsMain;
|
|
5
|
+
name: string;
|
|
6
|
+
description: string;
|
|
7
|
+
alias: string;
|
|
8
|
+
group: string;
|
|
9
|
+
options: CommandOptions;
|
|
10
|
+
constructor(tsMain: TypescriptMain);
|
|
11
|
+
report(_args: any, { clean, silent, dryRun, noDedupe, dryRunWithTsconfig, }: {
|
|
12
|
+
dryRun?: boolean;
|
|
13
|
+
noDedupe?: boolean;
|
|
14
|
+
dryRunWithTsconfig?: boolean;
|
|
15
|
+
clean?: boolean;
|
|
16
|
+
silent?: boolean;
|
|
17
|
+
}): Promise<string>;
|
|
18
|
+
}
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
|
|
5
|
+
require("core-js/modules/es.promise.js");
|
|
6
|
+
|
|
7
|
+
Object.defineProperty(exports, "__esModule", {
|
|
8
|
+
value: true
|
|
9
|
+
});
|
|
10
|
+
exports.default = void 0;
|
|
11
|
+
|
|
12
|
+
function _defineProperty2() {
|
|
13
|
+
const data = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
14
|
+
|
|
15
|
+
_defineProperty2 = function () {
|
|
16
|
+
return data;
|
|
17
|
+
};
|
|
18
|
+
|
|
19
|
+
return data;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
function _path() {
|
|
23
|
+
const data = _interopRequireDefault(require("path"));
|
|
24
|
+
|
|
25
|
+
_path = function () {
|
|
26
|
+
return data;
|
|
27
|
+
};
|
|
28
|
+
|
|
29
|
+
return data;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
function _lodash() {
|
|
33
|
+
const data = require("lodash");
|
|
34
|
+
|
|
35
|
+
_lodash = function () {
|
|
36
|
+
return data;
|
|
37
|
+
};
|
|
38
|
+
|
|
39
|
+
return data;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
function _chalk() {
|
|
43
|
+
const data = _interopRequireDefault(require("chalk"));
|
|
44
|
+
|
|
45
|
+
_chalk = function () {
|
|
46
|
+
return data;
|
|
47
|
+
};
|
|
48
|
+
|
|
49
|
+
return data;
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
class WriteTsconfigCmd {
|
|
53
|
+
constructor(tsMain) {
|
|
54
|
+
this.tsMain = tsMain;
|
|
55
|
+
(0, _defineProperty2().default)(this, "name", 'write-tsconfig');
|
|
56
|
+
(0, _defineProperty2().default)(this, "description", 'EXPERIMENTAL. write tsconfig.json files in the component directories');
|
|
57
|
+
(0, _defineProperty2().default)(this, "alias", '');
|
|
58
|
+
(0, _defineProperty2().default)(this, "group", 'development');
|
|
59
|
+
(0, _defineProperty2().default)(this, "options", [['c', 'clean', 'delete tsconfig files from the workspace. highly recommended to run it with "--dry-run" first'], ['s', 'silent', 'do not prompt for confirmation'], ['', 'no-dedupe', "write tsconfig.json inside each one of the component's dir, avoid deduping"], ['', 'dry-run', 'show the paths that tsconfig will be written per env'], ['', 'dry-run-with-tsconfig', 'show the tsconfig.json content and the paths it will be written per env']]);
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
async report(_args, {
|
|
63
|
+
clean,
|
|
64
|
+
silent,
|
|
65
|
+
dryRun,
|
|
66
|
+
noDedupe,
|
|
67
|
+
dryRunWithTsconfig
|
|
68
|
+
}) {
|
|
69
|
+
const {
|
|
70
|
+
writeResults,
|
|
71
|
+
cleanResults
|
|
72
|
+
} = await this.tsMain.writeTsconfigJson({
|
|
73
|
+
clean,
|
|
74
|
+
dedupe: !noDedupe,
|
|
75
|
+
dryRun: dryRun || dryRunWithTsconfig,
|
|
76
|
+
dryRunWithTsconfig,
|
|
77
|
+
silent
|
|
78
|
+
});
|
|
79
|
+
const cleanResultsOutput = cleanResults ? `${_chalk().default.green(`the following paths were deleted`)}\n${cleanResults.join('\n')}\n\n` : '';
|
|
80
|
+
|
|
81
|
+
if (dryRunWithTsconfig) {
|
|
82
|
+
return JSON.stringify(writeResults, undefined, 2);
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
if (dryRun) {
|
|
86
|
+
const withoutTsconfig = writeResults.map(s => (0, _lodash().omit)(s, ['tsconfig']));
|
|
87
|
+
return JSON.stringify(withoutTsconfig, undefined, 2);
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
const totalFiles = writeResults.map(r => r.paths.length).reduce((acc, current) => acc + current);
|
|
91
|
+
|
|
92
|
+
const writeTitle = _chalk().default.green(`${totalFiles} files have been written successfully`);
|
|
93
|
+
|
|
94
|
+
const writeOutput = writeResults.map(result => {
|
|
95
|
+
const paths = result.paths.map(p => _path().default.join(p, 'tsconfig.json')).map(str => ` ${str}`).join('\n');
|
|
96
|
+
return `The following paths were written according to env ${_chalk().default.bold(result.envId)}\n${paths}`;
|
|
97
|
+
}).join('\n\n');
|
|
98
|
+
return `${cleanResultsOutput}${writeTitle}\n${writeOutput}`;
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
exports.default = WriteTsconfigCmd;
|
|
104
|
+
|
|
105
|
+
//# sourceMappingURL=write-tsconfig.cmd.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["WriteTsconfigCmd","constructor","tsMain","report","_args","clean","silent","dryRun","noDedupe","dryRunWithTsconfig","writeResults","cleanResults","writeTsconfigJson","dedupe","cleanResultsOutput","chalk","green","join","JSON","stringify","undefined","withoutTsconfig","map","s","omit","totalFiles","r","paths","length","reduce","acc","current","writeTitle","writeOutput","result","p","path","str","bold","envId"],"sources":["write-tsconfig.cmd.ts"],"sourcesContent":["import path from 'path';\nimport { omit } from 'lodash';\nimport { Command, CommandOptions } from '@teambit/cli';\nimport chalk from 'chalk';\nimport { TypescriptMain } from '../typescript.main.runtime';\n\nexport default class WriteTsconfigCmd implements Command {\n name = 'write-tsconfig';\n description = 'EXPERIMENTAL. write tsconfig.json files in the component directories';\n alias = '';\n group = 'development';\n options = [\n ['c', 'clean', 'delete tsconfig files from the workspace. highly recommended to run it with \"--dry-run\" first'],\n ['s', 'silent', 'do not prompt for confirmation'],\n ['', 'no-dedupe', \"write tsconfig.json inside each one of the component's dir, avoid deduping\"],\n ['', 'dry-run', 'show the paths that tsconfig will be written per env'],\n ['', 'dry-run-with-tsconfig', 'show the tsconfig.json content and the paths it will be written per env'],\n ] as CommandOptions;\n\n constructor(private tsMain: TypescriptMain) {}\n\n async report(\n _args,\n {\n clean,\n silent,\n dryRun,\n noDedupe,\n dryRunWithTsconfig,\n }: { dryRun?: boolean; noDedupe?: boolean; dryRunWithTsconfig?: boolean; clean?: boolean; silent?: boolean }\n ) {\n const { writeResults, cleanResults } = await this.tsMain.writeTsconfigJson({\n clean,\n dedupe: !noDedupe,\n dryRun: dryRun || dryRunWithTsconfig,\n dryRunWithTsconfig,\n silent,\n });\n const cleanResultsOutput = cleanResults\n ? `${chalk.green(`the following paths were deleted`)}\\n${cleanResults.join('\\n')}\\n\\n`\n : '';\n if (dryRunWithTsconfig) {\n return JSON.stringify(writeResults, undefined, 2);\n }\n if (dryRun) {\n const withoutTsconfig = writeResults.map((s) => omit(s, ['tsconfig']));\n return JSON.stringify(withoutTsconfig, undefined, 2);\n }\n const totalFiles = writeResults.map((r) => r.paths.length).reduce((acc, current) => acc + current);\n const writeTitle = chalk.green(`${totalFiles} files have been written successfully`);\n const writeOutput = writeResults\n .map((result) => {\n const paths = result.paths\n .map((p) => path.join(p, 'tsconfig.json'))\n .map((str) => ` ${str}`)\n .join('\\n');\n return `The following paths were written according to env ${chalk.bold(result.envId)}\\n${paths}`;\n })\n .join('\\n\\n');\n return `${cleanResultsOutput}${writeTitle}\\n${writeOutput}`;\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;AAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;AAAA;;AACA;EAAA;;EAAA;IAAA;EAAA;;EAAA;AAAA;;AAEA;EAAA;;EAAA;IAAA;EAAA;;EAAA;AAAA;;AAGe,MAAMA,gBAAN,CAA0C;EAavDC,WAAW,CAASC,MAAT,EAAiC;IAAA,KAAxBA,MAAwB,GAAxBA,MAAwB;IAAA,8CAZrC,gBAYqC;IAAA,qDAX9B,sEAW8B;IAAA,+CAVpC,EAUoC;IAAA,+CATpC,aASoC;IAAA,iDARlC,CACR,CAAC,GAAD,EAAM,OAAN,EAAe,+FAAf,CADQ,EAER,CAAC,GAAD,EAAM,QAAN,EAAgB,gCAAhB,CAFQ,EAGR,CAAC,EAAD,EAAK,WAAL,EAAkB,4EAAlB,CAHQ,EAIR,CAAC,EAAD,EAAK,SAAL,EAAgB,sDAAhB,CAJQ,EAKR,CAAC,EAAD,EAAK,uBAAL,EAA8B,yEAA9B,CALQ,CAQkC;EAAE;;EAElC,MAANC,MAAM,CACVC,KADU,EAEV;IACEC,KADF;IAEEC,MAFF;IAGEC,MAHF;IAIEC,QAJF;IAKEC;EALF,CAFU,EASV;IACA,MAAM;MAAEC,YAAF;MAAgBC;IAAhB,IAAiC,MAAM,KAAKT,MAAL,CAAYU,iBAAZ,CAA8B;MACzEP,KADyE;MAEzEQ,MAAM,EAAE,CAACL,QAFgE;MAGzED,MAAM,EAAEA,MAAM,IAAIE,kBAHuD;MAIzEA,kBAJyE;MAKzEH;IALyE,CAA9B,CAA7C;IAOA,MAAMQ,kBAAkB,GAAGH,YAAY,GAClC,GAAEI,gBAAA,CAAMC,KAAN,CAAa,kCAAb,CAAgD,KAAIL,YAAY,CAACM,IAAb,CAAkB,IAAlB,CAAwB,MAD5C,GAEnC,EAFJ;;IAGA,IAAIR,kBAAJ,EAAwB;MACtB,OAAOS,IAAI,CAACC,SAAL,CAAeT,YAAf,EAA6BU,SAA7B,EAAwC,CAAxC,CAAP;IACD;;IACD,IAAIb,MAAJ,EAAY;MACV,MAAMc,eAAe,GAAGX,YAAY,CAACY,GAAb,CAAkBC,CAAD,IAAO,IAAAC,cAAA,EAAKD,CAAL,EAAQ,CAAC,UAAD,CAAR,CAAxB,CAAxB;MACA,OAAOL,IAAI,CAACC,SAAL,CAAeE,eAAf,EAAgCD,SAAhC,EAA2C,CAA3C,CAAP;IACD;;IACD,MAAMK,UAAU,GAAGf,YAAY,CAACY,GAAb,CAAkBI,CAAD,IAAOA,CAAC,CAACC,KAAF,CAAQC,MAAhC,EAAwCC,MAAxC,CAA+C,CAACC,GAAD,EAAMC,OAAN,KAAkBD,GAAG,GAAGC,OAAvE,CAAnB;;IACA,MAAMC,UAAU,GAAGjB,gBAAA,CAAMC,KAAN,CAAa,GAAES,UAAW,uCAA1B,CAAnB;;IACA,MAAMQ,WAAW,GAAGvB,YAAY,CAC7BY,GADiB,CACZY,MAAD,IAAY;MACf,MAAMP,KAAK,GAAGO,MAAM,CAACP,KAAP,CACXL,GADW,CACNa,CAAD,IAAOC,eAAA,CAAKnB,IAAL,CAAUkB,CAAV,EAAa,eAAb,CADA,EAEXb,GAFW,CAENe,GAAD,IAAU,KAAIA,GAAI,EAFX,EAGXpB,IAHW,CAGN,IAHM,CAAd;MAIA,OAAQ,qDAAoDF,gBAAA,CAAMuB,IAAN,CAAWJ,MAAM,CAACK,KAAlB,CAAyB,KAAIZ,KAAM,EAA/F;IACD,CAPiB,EAQjBV,IARiB,CAQZ,MARY,CAApB;IASA,OAAQ,GAAEH,kBAAmB,GAAEkB,UAAW,KAAIC,WAAY,EAA1D;EACD;;AAtDsD"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
function _tsconfigWriter() {
|
|
4
|
+
const data = require("./tsconfig-writer");
|
|
5
|
+
|
|
6
|
+
_tsconfigWriter = function () {
|
|
7
|
+
return data;
|
|
8
|
+
};
|
|
9
|
+
|
|
10
|
+
return data;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
describe('dedupePath', () => {
|
|
14
|
+
it('should return the root-dir if there is only one env involved', () => {
|
|
15
|
+
const input = [{
|
|
16
|
+
id: 'env1',
|
|
17
|
+
paths: ['p1/e1, p2']
|
|
18
|
+
}];
|
|
19
|
+
const output = (0, _tsconfigWriter().dedupePaths)(input);
|
|
20
|
+
expect(output).toEqual([{
|
|
21
|
+
id: 'env1',
|
|
22
|
+
paths: ['.']
|
|
23
|
+
}]);
|
|
24
|
+
});
|
|
25
|
+
it('should set the env with the most components', () => {
|
|
26
|
+
const input = [{
|
|
27
|
+
id: 'env1',
|
|
28
|
+
paths: ['p1/e1', 'p1/e2']
|
|
29
|
+
}, {
|
|
30
|
+
id: 'env2',
|
|
31
|
+
paths: ['p1/e3']
|
|
32
|
+
}];
|
|
33
|
+
const output = (0, _tsconfigWriter().dedupePaths)(input); // @ts-ignore
|
|
34
|
+
|
|
35
|
+
expect(output).toEqual( // @ts-ignore
|
|
36
|
+
expect.arrayContaining([{
|
|
37
|
+
id: 'env1',
|
|
38
|
+
paths: ['.']
|
|
39
|
+
}, {
|
|
40
|
+
id: 'env2',
|
|
41
|
+
paths: ['p1/e3']
|
|
42
|
+
}]));
|
|
43
|
+
});
|
|
44
|
+
it('should not set any env to a shared dir if it no env has max components', () => {
|
|
45
|
+
const input = [{
|
|
46
|
+
id: 'env1',
|
|
47
|
+
paths: ['p1/e1']
|
|
48
|
+
}, {
|
|
49
|
+
id: 'env2',
|
|
50
|
+
paths: ['p1/e2']
|
|
51
|
+
}];
|
|
52
|
+
const output = (0, _tsconfigWriter().dedupePaths)(input);
|
|
53
|
+
expect(output.length).toEqual(2); // @ts-ignore
|
|
54
|
+
|
|
55
|
+
expect(output).toEqual(expect.arrayContaining(input));
|
|
56
|
+
});
|
|
57
|
+
});
|
|
58
|
+
|
|
59
|
+
//# sourceMappingURL=dedupe-path.spec.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["describe","it","input","id","paths","output","dedupePaths","expect","toEqual","arrayContaining","length"],"sources":["dedupe-path.spec.ts"],"sourcesContent":["import { dedupePaths } from './tsconfig-writer';\n\ndescribe('dedupePath', () => {\n it('should return the root-dir if there is only one env involved', () => {\n const input = [{ id: 'env1', paths: ['p1/e1, p2'] }];\n const output = dedupePaths(input);\n expect(output).toEqual([{ id: 'env1', paths: ['.'] }]);\n });\n it('should set the env with the most components', () => {\n const input = [\n { id: 'env1', paths: ['p1/e1', 'p1/e2'] },\n { id: 'env2', paths: ['p1/e3'] },\n ];\n const output = dedupePaths(input);\n // @ts-ignore\n expect(output).toEqual(\n // @ts-ignore\n expect.arrayContaining([\n { id: 'env1', paths: ['.'] },\n { id: 'env2', paths: ['p1/e3'] },\n ])\n );\n });\n it('should not set any env to a shared dir if it no env has max components', () => {\n const input = [\n { id: 'env1', paths: ['p1/e1'] },\n { id: 'env2', paths: ['p1/e2'] },\n ];\n const output = dedupePaths(input);\n expect(output.length).toEqual(2);\n // @ts-ignore\n expect(output).toEqual(expect.arrayContaining(input));\n });\n});\n"],"mappings":";;AAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;AAAA;;AAEAA,QAAQ,CAAC,YAAD,EAAe,MAAM;EAC3BC,EAAE,CAAC,8DAAD,EAAiE,MAAM;IACvE,MAAMC,KAAK,GAAG,CAAC;MAAEC,EAAE,EAAE,MAAN;MAAcC,KAAK,EAAE,CAAC,WAAD;IAArB,CAAD,CAAd;IACA,MAAMC,MAAM,GAAG,IAAAC,6BAAA,EAAYJ,KAAZ,CAAf;IACAK,MAAM,CAACF,MAAD,CAAN,CAAeG,OAAf,CAAuB,CAAC;MAAEL,EAAE,EAAE,MAAN;MAAcC,KAAK,EAAE,CAAC,GAAD;IAArB,CAAD,CAAvB;EACD,CAJC,CAAF;EAKAH,EAAE,CAAC,6CAAD,EAAgD,MAAM;IACtD,MAAMC,KAAK,GAAG,CACZ;MAAEC,EAAE,EAAE,MAAN;MAAcC,KAAK,EAAE,CAAC,OAAD,EAAU,OAAV;IAArB,CADY,EAEZ;MAAED,EAAE,EAAE,MAAN;MAAcC,KAAK,EAAE,CAAC,OAAD;IAArB,CAFY,CAAd;IAIA,MAAMC,MAAM,GAAG,IAAAC,6BAAA,EAAYJ,KAAZ,CAAf,CALsD,CAMtD;;IACAK,MAAM,CAACF,MAAD,CAAN,CAAeG,OAAf,EACE;IACAD,MAAM,CAACE,eAAP,CAAuB,CACrB;MAAEN,EAAE,EAAE,MAAN;MAAcC,KAAK,EAAE,CAAC,GAAD;IAArB,CADqB,EAErB;MAAED,EAAE,EAAE,MAAN;MAAcC,KAAK,EAAE,CAAC,OAAD;IAArB,CAFqB,CAAvB,CAFF;EAOD,CAdC,CAAF;EAeAH,EAAE,CAAC,wEAAD,EAA2E,MAAM;IACjF,MAAMC,KAAK,GAAG,CACZ;MAAEC,EAAE,EAAE,MAAN;MAAcC,KAAK,EAAE,CAAC,OAAD;IAArB,CADY,EAEZ;MAAED,EAAE,EAAE,MAAN;MAAcC,KAAK,EAAE,CAAC,OAAD;IAArB,CAFY,CAAd;IAIA,MAAMC,MAAM,GAAG,IAAAC,6BAAA,EAAYJ,KAAZ,CAAf;IACAK,MAAM,CAACF,MAAM,CAACK,MAAR,CAAN,CAAsBF,OAAtB,CAA8B,CAA9B,EANiF,CAOjF;;IACAD,MAAM,CAACF,MAAD,CAAN,CAAeG,OAAf,CAAuBD,MAAM,CAACE,eAAP,CAAuBP,KAAvB,CAAvB;EACD,CATC,CAAF;AAUD,CA/BO,CAAR"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import { ExecutionContext } from '@teambit/envs';
|
|
2
|
+
import { Workspace } from '@teambit/workspace';
|
|
3
|
+
import { Logger } from '@teambit/logger';
|
|
4
|
+
import { TsconfigWriterOptions } from './typescript.main.runtime';
|
|
5
|
+
export declare type TsconfigPathsPerEnv = {
|
|
6
|
+
envId: string;
|
|
7
|
+
tsconfig: Record<string, any>;
|
|
8
|
+
paths: string[];
|
|
9
|
+
};
|
|
10
|
+
export declare class TsconfigWriter {
|
|
11
|
+
private workspace;
|
|
12
|
+
private logger;
|
|
13
|
+
constructor(workspace: Workspace, logger: Logger);
|
|
14
|
+
write(envsExecutionContext: ExecutionContext[], options: TsconfigWriterOptions): Promise<TsconfigPathsPerEnv[]>;
|
|
15
|
+
clean(envsExecutionContext: ExecutionContext[], { dryRun, silent }: TsconfigWriterOptions): Promise<string[]>;
|
|
16
|
+
private promptForWriting;
|
|
17
|
+
private promptForCleaning;
|
|
18
|
+
private deleteFiles;
|
|
19
|
+
private writeFiles;
|
|
20
|
+
private getPathsPerEnv;
|
|
21
|
+
}
|
|
22
|
+
declare type PathsPerEnvId = {
|
|
23
|
+
id: string;
|
|
24
|
+
paths: string[];
|
|
25
|
+
};
|
|
26
|
+
/**
|
|
27
|
+
* easier to understand by an example:
|
|
28
|
+
* input:
|
|
29
|
+
* [
|
|
30
|
+
* { id: react, paths: [ui/button, ui/form] },
|
|
31
|
+
* { id: aspect, paths: [p/a1, p/a2] },
|
|
32
|
+
* { id: node, paths: [p/n1] },
|
|
33
|
+
* ]
|
|
34
|
+
*
|
|
35
|
+
* output:
|
|
36
|
+
* [
|
|
37
|
+
* { id: react, paths: [ui] },
|
|
38
|
+
* { id: aspect, paths: [p] },
|
|
39
|
+
* { id: node, paths: [p/n1] },
|
|
40
|
+
* ]
|
|
41
|
+
*
|
|
42
|
+
* the goal is to minimize the amount of files to write per env if possible.
|
|
43
|
+
* when multiple components of the same env share a root-dir, then, it's enough to write a file in that shared dir.
|
|
44
|
+
* if in a shared-dir, some components using env1 and some env2, it finds the env that has the max number of
|
|
45
|
+
* components, this env will be optimized. other components, will have the files written inside their dirs.
|
|
46
|
+
*/
|
|
47
|
+
export declare function dedupePaths(pathsPerEnvId: PathsPerEnvId[]): PathsPerEnvId[];
|
|
48
|
+
export {};
|
|
@@ -0,0 +1,294 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
|
|
5
|
+
require("core-js/modules/es.array.flat.js");
|
|
6
|
+
|
|
7
|
+
require("core-js/modules/es.array.iterator.js");
|
|
8
|
+
|
|
9
|
+
require("core-js/modules/es.array.unscopables.flat.js");
|
|
10
|
+
|
|
11
|
+
require("core-js/modules/es.promise.js");
|
|
12
|
+
|
|
13
|
+
Object.defineProperty(exports, "__esModule", {
|
|
14
|
+
value: true
|
|
15
|
+
});
|
|
16
|
+
exports.TsconfigWriter = void 0;
|
|
17
|
+
exports.dedupePaths = dedupePaths;
|
|
18
|
+
|
|
19
|
+
function _fsExtra() {
|
|
20
|
+
const data = _interopRequireDefault(require("fs-extra"));
|
|
21
|
+
|
|
22
|
+
_fsExtra = function () {
|
|
23
|
+
return data;
|
|
24
|
+
};
|
|
25
|
+
|
|
26
|
+
return data;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
function _path() {
|
|
30
|
+
const data = _interopRequireDefault(require("path"));
|
|
31
|
+
|
|
32
|
+
_path = function () {
|
|
33
|
+
return data;
|
|
34
|
+
};
|
|
35
|
+
|
|
36
|
+
return data;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
function _yesno() {
|
|
40
|
+
const data = _interopRequireDefault(require("yesno"));
|
|
41
|
+
|
|
42
|
+
_yesno = function () {
|
|
43
|
+
return data;
|
|
44
|
+
};
|
|
45
|
+
|
|
46
|
+
return data;
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
function _lodash() {
|
|
50
|
+
const data = require("lodash");
|
|
51
|
+
|
|
52
|
+
_lodash = function () {
|
|
53
|
+
return data;
|
|
54
|
+
};
|
|
55
|
+
|
|
56
|
+
return data;
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
function _exceptions() {
|
|
60
|
+
const data = require("@teambit/legacy/dist/prompts/exceptions");
|
|
61
|
+
|
|
62
|
+
_exceptions = function () {
|
|
63
|
+
return data;
|
|
64
|
+
};
|
|
65
|
+
|
|
66
|
+
return data;
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
function _chalk() {
|
|
70
|
+
const data = _interopRequireDefault(require("chalk"));
|
|
71
|
+
|
|
72
|
+
_chalk = function () {
|
|
73
|
+
return data;
|
|
74
|
+
};
|
|
75
|
+
|
|
76
|
+
return data;
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
class TsconfigWriter {
|
|
80
|
+
constructor(workspace, logger) {
|
|
81
|
+
this.workspace = workspace;
|
|
82
|
+
this.logger = logger;
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
async write(envsExecutionContext, options) {
|
|
86
|
+
const pathsPerEnvs = this.getPathsPerEnv(envsExecutionContext, options);
|
|
87
|
+
const tsconfigPathsPerEnv = pathsPerEnvs.map(pathsPerEnv => ({
|
|
88
|
+
envId: pathsPerEnv.id,
|
|
89
|
+
tsconfig: pathsPerEnv.env.getTsConfig(),
|
|
90
|
+
paths: pathsPerEnv.paths
|
|
91
|
+
}));
|
|
92
|
+
if (options.dryRun) return tsconfigPathsPerEnv;
|
|
93
|
+
if (!options.silent) await this.promptForWriting(tsconfigPathsPerEnv.map(p => p.paths).flat());
|
|
94
|
+
await this.writeFiles(tsconfigPathsPerEnv);
|
|
95
|
+
return tsconfigPathsPerEnv;
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
async clean(envsExecutionContext, {
|
|
99
|
+
dryRun,
|
|
100
|
+
silent
|
|
101
|
+
}) {
|
|
102
|
+
const pathsPerEnvs = this.getPathsPerEnv(envsExecutionContext, {
|
|
103
|
+
dedupe: false
|
|
104
|
+
});
|
|
105
|
+
const componentPaths = pathsPerEnvs.map(p => p.paths).flat();
|
|
106
|
+
const allPossibleDirs = getAllPossibleDirsFromPaths(componentPaths);
|
|
107
|
+
const dirsWithTsconfig = await filterDirsWithTsconfigFile(allPossibleDirs);
|
|
108
|
+
const tsconfigFiles = dirsWithTsconfig.map(dir => _path().default.join(dir, 'tsconfig.json'));
|
|
109
|
+
if (dryRun) return tsconfigFiles;
|
|
110
|
+
if (!dirsWithTsconfig.length) return [];
|
|
111
|
+
if (!silent) await this.promptForCleaning(tsconfigFiles);
|
|
112
|
+
await this.deleteFiles(tsconfigFiles);
|
|
113
|
+
return tsconfigFiles;
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
async promptForWriting(dirs) {
|
|
117
|
+
this.logger.clearStatusLine();
|
|
118
|
+
const tsconfigFiles = dirs.map(dir => _path().default.join(dir, 'tsconfig.json'));
|
|
119
|
+
const ok = await (0, _yesno().default)({
|
|
120
|
+
question: `${_chalk().default.underline('The following paths will be written:')}
|
|
121
|
+
${tsconfigFiles.join('\n')}
|
|
122
|
+
${_chalk().default.bold('Do you want to continue? [yes(y)/no(n)]')}`
|
|
123
|
+
});
|
|
124
|
+
|
|
125
|
+
if (!ok) {
|
|
126
|
+
throw new (_exceptions().PromptCanceled)();
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
async promptForCleaning(tsconfigFiles) {
|
|
131
|
+
this.logger.clearStatusLine();
|
|
132
|
+
const ok = await (0, _yesno().default)({
|
|
133
|
+
question: `${_chalk().default.underline('The following paths will be deleted:')}
|
|
134
|
+
${tsconfigFiles.join('\n')}
|
|
135
|
+
${_chalk().default.bold('Do you want to continue? [yes(y)/no(n)]')}`
|
|
136
|
+
});
|
|
137
|
+
|
|
138
|
+
if (!ok) {
|
|
139
|
+
throw new (_exceptions().PromptCanceled)();
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
async deleteFiles(tsconfigFiles) {
|
|
144
|
+
await Promise.all(tsconfigFiles.map(f => _fsExtra().default.remove(f)));
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
async writeFiles(tsconfigPathsPerEnvs) {
|
|
148
|
+
await Promise.all(tsconfigPathsPerEnvs.map(pathsPerEnv => {
|
|
149
|
+
return Promise.all(pathsPerEnv.paths.map(p => _fsExtra().default.writeJSON(_path().default.join(p, 'tsconfig.json'), pathsPerEnv.tsconfig, {
|
|
150
|
+
spaces: 2
|
|
151
|
+
})));
|
|
152
|
+
}));
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
getPathsPerEnv(envsExecutionContext, {
|
|
156
|
+
dedupe
|
|
157
|
+
}) {
|
|
158
|
+
const pathsPerEnvs = envsExecutionContext.map(envExecution => {
|
|
159
|
+
return {
|
|
160
|
+
id: envExecution.id,
|
|
161
|
+
env: envExecution.env,
|
|
162
|
+
paths: envExecution.components.map(c => this.workspace.componentDir(c.id, undefined, {
|
|
163
|
+
relative: true
|
|
164
|
+
}))
|
|
165
|
+
};
|
|
166
|
+
});
|
|
167
|
+
|
|
168
|
+
if (!dedupe) {
|
|
169
|
+
return pathsPerEnvs;
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
const pathsPerEnvId = pathsPerEnvs.map(p => ({
|
|
173
|
+
id: p.id,
|
|
174
|
+
paths: p.paths
|
|
175
|
+
}));
|
|
176
|
+
const envsPerDedupedPaths = dedupePaths(pathsPerEnvId);
|
|
177
|
+
const dedupedPathsPerEnvs = envsPerDedupedPaths.map(envWithDedupePaths => {
|
|
178
|
+
const found = pathsPerEnvs.find(p => p.id === envWithDedupePaths.id);
|
|
179
|
+
if (!found) throw new Error(`dedupedPathsPerEnvs, unable to find ${envWithDedupePaths.id}`);
|
|
180
|
+
return {
|
|
181
|
+
env: found.env,
|
|
182
|
+
id: found.id,
|
|
183
|
+
paths: envWithDedupePaths.paths
|
|
184
|
+
};
|
|
185
|
+
});
|
|
186
|
+
return dedupedPathsPerEnvs;
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
}
|
|
190
|
+
|
|
191
|
+
exports.TsconfigWriter = TsconfigWriter;
|
|
192
|
+
|
|
193
|
+
async function filterDirsWithTsconfigFile(dirs) {
|
|
194
|
+
const dirsWithTsconfig = await Promise.all(dirs.map(async dir => {
|
|
195
|
+
const hasTsconfig = await _fsExtra().default.pathExists(_path().default.join(dir, 'tsconfig.json'));
|
|
196
|
+
return hasTsconfig ? dir : undefined;
|
|
197
|
+
}));
|
|
198
|
+
return (0, _lodash().compact)(dirsWithTsconfig);
|
|
199
|
+
}
|
|
200
|
+
|
|
201
|
+
function getAllPossibleDirsFromPaths(paths) {
|
|
202
|
+
const dirs = paths.map(p => getAllParentsDirOfPath(p)).flat();
|
|
203
|
+
dirs.push('.'); // add the root dir
|
|
204
|
+
|
|
205
|
+
return (0, _lodash().uniq)(dirs);
|
|
206
|
+
}
|
|
207
|
+
|
|
208
|
+
function getAllParentsDirOfPath(p) {
|
|
209
|
+
const all = [];
|
|
210
|
+
let current = p;
|
|
211
|
+
|
|
212
|
+
while (current !== '.') {
|
|
213
|
+
all.push(current);
|
|
214
|
+
current = _path().default.dirname(current);
|
|
215
|
+
}
|
|
216
|
+
|
|
217
|
+
return all;
|
|
218
|
+
}
|
|
219
|
+
/**
|
|
220
|
+
* easier to understand by an example:
|
|
221
|
+
* input:
|
|
222
|
+
* [
|
|
223
|
+
* { id: react, paths: [ui/button, ui/form] },
|
|
224
|
+
* { id: aspect, paths: [p/a1, p/a2] },
|
|
225
|
+
* { id: node, paths: [p/n1] },
|
|
226
|
+
* ]
|
|
227
|
+
*
|
|
228
|
+
* output:
|
|
229
|
+
* [
|
|
230
|
+
* { id: react, paths: [ui] },
|
|
231
|
+
* { id: aspect, paths: [p] },
|
|
232
|
+
* { id: node, paths: [p/n1] },
|
|
233
|
+
* ]
|
|
234
|
+
*
|
|
235
|
+
* the goal is to minimize the amount of files to write per env if possible.
|
|
236
|
+
* when multiple components of the same env share a root-dir, then, it's enough to write a file in that shared dir.
|
|
237
|
+
* if in a shared-dir, some components using env1 and some env2, it finds the env that has the max number of
|
|
238
|
+
* components, this env will be optimized. other components, will have the files written inside their dirs.
|
|
239
|
+
*/
|
|
240
|
+
|
|
241
|
+
|
|
242
|
+
function dedupePaths(pathsPerEnvId) {
|
|
243
|
+
const rootDir = '.';
|
|
244
|
+
const individualPathPerEnvId = pathsPerEnvId.reduce((acc, current) => {
|
|
245
|
+
current.paths.forEach(p => {
|
|
246
|
+
acc[p] = current.id;
|
|
247
|
+
});
|
|
248
|
+
return acc;
|
|
249
|
+
}, {});
|
|
250
|
+
const allPaths = Object.keys(individualPathPerEnvId);
|
|
251
|
+
const allPossibleDirs = getAllPossibleDirsFromPaths(allPaths);
|
|
252
|
+
const allPathsPerEnvId = {}; // null when parent-dir has same amount of comps per env.
|
|
253
|
+
|
|
254
|
+
const calculateBestEnvForDir = dir => {
|
|
255
|
+
if (individualPathPerEnvId[dir]) {
|
|
256
|
+
// it's the component dir, so it's the best env
|
|
257
|
+
allPathsPerEnvId[dir] = individualPathPerEnvId[dir];
|
|
258
|
+
return;
|
|
259
|
+
}
|
|
260
|
+
|
|
261
|
+
const allPathsShareSameDir = dir === rootDir ? allPaths : allPaths.filter(p => p.startsWith(`${dir}/`));
|
|
262
|
+
const countPerEnv = {};
|
|
263
|
+
allPathsShareSameDir.forEach(p => {
|
|
264
|
+
const envIdStr = individualPathPerEnvId[p];
|
|
265
|
+
if (countPerEnv[envIdStr]) countPerEnv[envIdStr] += 1;else countPerEnv[envIdStr] = 1;
|
|
266
|
+
});
|
|
267
|
+
const max = Math.max(...Object.values(countPerEnv));
|
|
268
|
+
const envWithMax = Object.keys(countPerEnv).filter(env => countPerEnv[env] === max);
|
|
269
|
+
if (!envWithMax.length) throw new Error(`must be at least one env related to path "${dir}"`);
|
|
270
|
+
if (envWithMax.length > 1) allPathsPerEnvId[dir] = null;else allPathsPerEnvId[dir] = envWithMax[0];
|
|
271
|
+
};
|
|
272
|
+
|
|
273
|
+
allPossibleDirs.forEach(dirPath => {
|
|
274
|
+
calculateBestEnvForDir(dirPath);
|
|
275
|
+
}); // this is the actual deduping. if found a shorter path with the same env, then no need for this path.
|
|
276
|
+
// in other words, return only the paths that their parent is null or has a different env.
|
|
277
|
+
|
|
278
|
+
const dedupedPathsPerEnvId = Object.keys(allPathsPerEnvId).reduce((acc, current) => {
|
|
279
|
+
if (allPathsPerEnvId[current] && allPathsPerEnvId[_path().default.dirname(current)] !== allPathsPerEnvId[current]) {
|
|
280
|
+
acc[current] = allPathsPerEnvId[current];
|
|
281
|
+
}
|
|
282
|
+
|
|
283
|
+
return acc;
|
|
284
|
+
}, {}); // rootDir parent is always rootDir, so leave it as is.
|
|
285
|
+
|
|
286
|
+
if (allPathsPerEnvId[rootDir]) dedupedPathsPerEnvId[rootDir] = allPathsPerEnvId[rootDir];
|
|
287
|
+
const envIdPerDedupedPaths = (0, _lodash().invertBy)(dedupedPathsPerEnvId);
|
|
288
|
+
return Object.keys(envIdPerDedupedPaths).map(envIdStr => ({
|
|
289
|
+
id: envIdStr,
|
|
290
|
+
paths: envIdPerDedupedPaths[envIdStr]
|
|
291
|
+
}));
|
|
292
|
+
}
|
|
293
|
+
|
|
294
|
+
//# sourceMappingURL=tsconfig-writer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["TsconfigWriter","constructor","workspace","logger","write","envsExecutionContext","options","pathsPerEnvs","getPathsPerEnv","tsconfigPathsPerEnv","map","pathsPerEnv","envId","id","tsconfig","env","getTsConfig","paths","dryRun","silent","promptForWriting","p","flat","writeFiles","clean","dedupe","componentPaths","allPossibleDirs","getAllPossibleDirsFromPaths","dirsWithTsconfig","filterDirsWithTsconfigFile","tsconfigFiles","dir","path","join","length","promptForCleaning","deleteFiles","dirs","clearStatusLine","ok","yesno","question","chalk","underline","bold","PromptCanceled","Promise","all","f","fs","remove","tsconfigPathsPerEnvs","writeJSON","spaces","envExecution","components","c","componentDir","undefined","relative","pathsPerEnvId","envsPerDedupedPaths","dedupePaths","dedupedPathsPerEnvs","envWithDedupePaths","found","find","Error","hasTsconfig","pathExists","compact","getAllParentsDirOfPath","push","uniq","current","dirname","rootDir","individualPathPerEnvId","reduce","acc","forEach","allPaths","Object","keys","allPathsPerEnvId","calculateBestEnvForDir","allPathsShareSameDir","filter","startsWith","countPerEnv","envIdStr","max","Math","values","envWithMax","dirPath","dedupedPathsPerEnvId","envIdPerDedupedPaths","invertBy"],"sources":["tsconfig-writer.ts"],"sourcesContent":["import fs from 'fs-extra';\nimport path from 'path';\nimport yesno from 'yesno';\nimport { PathLinuxRelative } from '@teambit/legacy/dist/utils/path';\nimport { compact, invertBy, uniq } from 'lodash';\nimport { PromptCanceled } from '@teambit/legacy/dist/prompts/exceptions';\nimport { Environment, ExecutionContext } from '@teambit/envs';\nimport { Workspace } from '@teambit/workspace';\nimport { Logger } from '@teambit/logger';\nimport chalk from 'chalk';\nimport { TsconfigWriterOptions } from './typescript.main.runtime';\n\nexport type TsconfigPathsPerEnv = { envId: string; tsconfig: Record<string, any>; paths: string[] };\n\ntype PathsPerEnv = { env: Environment; id: string; paths: string[] };\n\nexport class TsconfigWriter {\n constructor(private workspace: Workspace, private logger: Logger) {}\n\n async write(\n envsExecutionContext: ExecutionContext[],\n options: TsconfigWriterOptions\n ): Promise<TsconfigPathsPerEnv[]> {\n const pathsPerEnvs = this.getPathsPerEnv(envsExecutionContext, options);\n const tsconfigPathsPerEnv = pathsPerEnvs.map((pathsPerEnv) => ({\n envId: pathsPerEnv.id,\n tsconfig: pathsPerEnv.env.getTsConfig(),\n paths: pathsPerEnv.paths,\n }));\n if (options.dryRun) return tsconfigPathsPerEnv;\n if (!options.silent) await this.promptForWriting(tsconfigPathsPerEnv.map((p) => p.paths).flat());\n await this.writeFiles(tsconfigPathsPerEnv);\n return tsconfigPathsPerEnv;\n }\n\n async clean(envsExecutionContext: ExecutionContext[], { dryRun, silent }: TsconfigWriterOptions): Promise<string[]> {\n const pathsPerEnvs = this.getPathsPerEnv(envsExecutionContext, { dedupe: false });\n const componentPaths = pathsPerEnvs.map((p) => p.paths).flat();\n const allPossibleDirs = getAllPossibleDirsFromPaths(componentPaths);\n const dirsWithTsconfig = await filterDirsWithTsconfigFile(allPossibleDirs);\n const tsconfigFiles = dirsWithTsconfig.map((dir) => path.join(dir, 'tsconfig.json'));\n if (dryRun) return tsconfigFiles;\n if (!dirsWithTsconfig.length) return [];\n if (!silent) await this.promptForCleaning(tsconfigFiles);\n await this.deleteFiles(tsconfigFiles);\n return tsconfigFiles;\n }\n\n private async promptForWriting(dirs: string[]) {\n this.logger.clearStatusLine();\n const tsconfigFiles = dirs.map((dir) => path.join(dir, 'tsconfig.json'));\n const ok = await yesno({\n question: `${chalk.underline('The following paths will be written:')}\n${tsconfigFiles.join('\\n')}\n${chalk.bold('Do you want to continue? [yes(y)/no(n)]')}`,\n });\n if (!ok) {\n throw new PromptCanceled();\n }\n }\n\n private async promptForCleaning(tsconfigFiles: string[]) {\n this.logger.clearStatusLine();\n const ok = await yesno({\n question: `${chalk.underline('The following paths will be deleted:')}\n${tsconfigFiles.join('\\n')}\n${chalk.bold('Do you want to continue? [yes(y)/no(n)]')}`,\n });\n if (!ok) {\n throw new PromptCanceled();\n }\n }\n\n private async deleteFiles(tsconfigFiles: string[]) {\n await Promise.all(tsconfigFiles.map((f) => fs.remove(f)));\n }\n\n private async writeFiles(tsconfigPathsPerEnvs: TsconfigPathsPerEnv[]) {\n await Promise.all(\n tsconfigPathsPerEnvs.map((pathsPerEnv) => {\n return Promise.all(\n pathsPerEnv.paths.map((p) => fs.writeJSON(path.join(p, 'tsconfig.json'), pathsPerEnv.tsconfig, { spaces: 2 }))\n );\n })\n );\n }\n\n private getPathsPerEnv(envsExecutionContext: ExecutionContext[], { dedupe }: TsconfigWriterOptions): PathsPerEnv[] {\n const pathsPerEnvs = envsExecutionContext.map((envExecution) => {\n return {\n id: envExecution.id,\n env: envExecution.env,\n paths: envExecution.components.map((c) => this.workspace.componentDir(c.id, undefined, { relative: true })),\n };\n });\n if (!dedupe) {\n return pathsPerEnvs;\n }\n\n const pathsPerEnvId = pathsPerEnvs.map((p) => ({ id: p.id, paths: p.paths }));\n const envsPerDedupedPaths = dedupePaths(pathsPerEnvId);\n const dedupedPathsPerEnvs: PathsPerEnv[] = envsPerDedupedPaths.map((envWithDedupePaths) => {\n const found = pathsPerEnvs.find((p) => p.id === envWithDedupePaths.id);\n if (!found) throw new Error(`dedupedPathsPerEnvs, unable to find ${envWithDedupePaths.id}`);\n return {\n env: found.env,\n id: found.id,\n paths: envWithDedupePaths.paths,\n };\n });\n\n return dedupedPathsPerEnvs;\n }\n}\n\ntype PathsPerEnvId = { id: string; paths: string[] };\n\nasync function filterDirsWithTsconfigFile(dirs: string[]): Promise<string[]> {\n const dirsWithTsconfig = await Promise.all(\n dirs.map(async (dir) => {\n const hasTsconfig = await fs.pathExists(path.join(dir, 'tsconfig.json'));\n return hasTsconfig ? dir : undefined;\n })\n );\n return compact(dirsWithTsconfig);\n}\n\nfunction getAllPossibleDirsFromPaths(paths: PathLinuxRelative[]): PathLinuxRelative[] {\n const dirs = paths.map((p) => getAllParentsDirOfPath(p)).flat();\n dirs.push('.'); // add the root dir\n return uniq(dirs);\n}\n\nfunction getAllParentsDirOfPath(p: PathLinuxRelative): PathLinuxRelative[] {\n const all: string[] = [];\n let current = p;\n while (current !== '.') {\n all.push(current);\n current = path.dirname(current);\n }\n return all;\n}\n\n/**\n * easier to understand by an example:\n * input:\n * [\n * { id: react, paths: [ui/button, ui/form] },\n * { id: aspect, paths: [p/a1, p/a2] },\n * { id: node, paths: [p/n1] },\n * ]\n *\n * output:\n * [\n * { id: react, paths: [ui] },\n * { id: aspect, paths: [p] },\n * { id: node, paths: [p/n1] },\n * ]\n *\n * the goal is to minimize the amount of files to write per env if possible.\n * when multiple components of the same env share a root-dir, then, it's enough to write a file in that shared dir.\n * if in a shared-dir, some components using env1 and some env2, it finds the env that has the max number of\n * components, this env will be optimized. other components, will have the files written inside their dirs.\n */\nexport function dedupePaths(pathsPerEnvId: PathsPerEnvId[]): PathsPerEnvId[] {\n const rootDir = '.';\n const individualPathPerEnvId: { [path: string]: string } = pathsPerEnvId.reduce((acc, current) => {\n current.paths.forEach((p) => {\n acc[p] = current.id;\n });\n return acc;\n }, {});\n const allPaths = Object.keys(individualPathPerEnvId);\n const allPossibleDirs = getAllPossibleDirsFromPaths(allPaths);\n\n const allPathsPerEnvId: { [path: string]: string | null } = {}; // null when parent-dir has same amount of comps per env.\n\n const calculateBestEnvForDir = (dir: string) => {\n if (individualPathPerEnvId[dir]) {\n // it's the component dir, so it's the best env\n allPathsPerEnvId[dir] = individualPathPerEnvId[dir];\n return;\n }\n const allPathsShareSameDir = dir === rootDir ? allPaths : allPaths.filter((p) => p.startsWith(`${dir}/`));\n const countPerEnv: { [env: string]: number } = {};\n allPathsShareSameDir.forEach((p) => {\n const envIdStr = individualPathPerEnvId[p];\n if (countPerEnv[envIdStr]) countPerEnv[envIdStr] += 1;\n else countPerEnv[envIdStr] = 1;\n });\n const max = Math.max(...Object.values(countPerEnv));\n const envWithMax = Object.keys(countPerEnv).filter((env) => countPerEnv[env] === max);\n if (!envWithMax.length) throw new Error(`must be at least one env related to path \"${dir}\"`);\n if (envWithMax.length > 1) allPathsPerEnvId[dir] = null;\n else allPathsPerEnvId[dir] = envWithMax[0];\n };\n\n allPossibleDirs.forEach((dirPath) => {\n calculateBestEnvForDir(dirPath);\n });\n\n // this is the actual deduping. if found a shorter path with the same env, then no need for this path.\n // in other words, return only the paths that their parent is null or has a different env.\n const dedupedPathsPerEnvId = Object.keys(allPathsPerEnvId).reduce((acc, current) => {\n if (allPathsPerEnvId[current] && allPathsPerEnvId[path.dirname(current)] !== allPathsPerEnvId[current]) {\n acc[current] = allPathsPerEnvId[current];\n }\n\n return acc;\n }, {});\n // rootDir parent is always rootDir, so leave it as is.\n if (allPathsPerEnvId[rootDir]) dedupedPathsPerEnvId[rootDir] = allPathsPerEnvId[rootDir];\n\n const envIdPerDedupedPaths = invertBy(dedupedPathsPerEnvId);\n\n return Object.keys(envIdPerDedupedPaths).map((envIdStr) => ({ id: envIdStr, paths: envIdPerDedupedPaths[envIdStr] }));\n}\n"],"mappings":"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"}
|
|
@@ -11,18 +11,29 @@ import { DependencyResolverMain } from '@teambit/dependency-resolver';
|
|
|
11
11
|
import { TsserverClient, TsserverClientOpts } from '@teambit/ts-server';
|
|
12
12
|
import { AspectLoaderMain } from '@teambit/aspect-loader';
|
|
13
13
|
import type { Component } from '@teambit/component';
|
|
14
|
+
import { EnvsMain } from '@teambit/envs';
|
|
14
15
|
import { TypeScriptCompilerOptions } from './compiler-options';
|
|
15
16
|
import { SchemaTransformer } from './schema-transformer';
|
|
17
|
+
import { TsconfigPathsPerEnv, TsconfigWriter } from './tsconfig-writer';
|
|
16
18
|
export declare type TsMode = 'build' | 'dev';
|
|
17
19
|
export declare type SchemaTransformerSlot = SlotRegistry<SchemaTransformer[]>;
|
|
18
20
|
export declare type TsConfigTransformContext = {};
|
|
21
|
+
export declare type TsconfigWriterOptions = {
|
|
22
|
+
clean?: boolean;
|
|
23
|
+
silent?: boolean;
|
|
24
|
+
dedupe?: boolean;
|
|
25
|
+
dryRun?: boolean;
|
|
26
|
+
dryRunWithTsconfig?: boolean;
|
|
27
|
+
};
|
|
19
28
|
export declare type TsConfigTransformer = (config: TypescriptConfigMutator, context: TsConfigTransformContext) => TypescriptConfigMutator;
|
|
20
29
|
export declare class TypescriptMain {
|
|
21
30
|
private logger;
|
|
22
31
|
private schemaTransformerSlot;
|
|
23
32
|
private workspace;
|
|
24
33
|
private depResolver;
|
|
25
|
-
|
|
34
|
+
private envs;
|
|
35
|
+
private tsConfigWriter;
|
|
36
|
+
constructor(logger: Logger, schemaTransformerSlot: SchemaTransformerSlot, workspace: Workspace, depResolver: DependencyResolverMain, envs: EnvsMain, tsConfigWriter: TsconfigWriter);
|
|
26
37
|
private tsServer;
|
|
27
38
|
/**
|
|
28
39
|
* create a new compiler.
|
|
@@ -88,18 +99,24 @@ export declare class TypescriptMain {
|
|
|
88
99
|
*/
|
|
89
100
|
getEsmPackageJsonProps(): PackageJsonProps;
|
|
90
101
|
getSupportedFilesForTsserver(components: Component[]): string[];
|
|
102
|
+
cleanTsconfigJson(options?: TsconfigWriterOptions): Promise<string[]>;
|
|
103
|
+
writeTsconfigJson(options?: TsconfigWriterOptions): Promise<{
|
|
104
|
+
cleanResults?: string[];
|
|
105
|
+
writeResults: TsconfigPathsPerEnv[];
|
|
106
|
+
}>;
|
|
91
107
|
private onPreWatch;
|
|
92
108
|
private onComponentChange;
|
|
93
109
|
static runtime: import("@teambit/harmony").RuntimeDefinition;
|
|
94
110
|
static dependencies: import("@teambit/harmony").Aspect[];
|
|
95
111
|
static slots: ((registerFn: () => string) => SlotRegistry<SchemaTransformer[]>)[];
|
|
96
|
-
static provider([schema, loggerExt, aspectLoader, workspace, cli, depResolver]: [
|
|
112
|
+
static provider([schema, loggerExt, aspectLoader, workspace, cli, depResolver, envs]: [
|
|
97
113
|
SchemaMain,
|
|
98
114
|
LoggerMain,
|
|
99
115
|
AspectLoaderMain,
|
|
100
116
|
Workspace,
|
|
101
117
|
CLIMain,
|
|
102
|
-
DependencyResolverMain
|
|
118
|
+
DependencyResolverMain,
|
|
119
|
+
EnvsMain
|
|
103
120
|
], config: any, [schemaTransformerSlot]: [SchemaTransformerSlot]): Promise<TypescriptMain>;
|
|
104
121
|
}
|
|
105
122
|
export declare function runTransformersWithContext(config: TypescriptConfigMutator, transformers: TsConfigTransformer[] | undefined, context: TsConfigTransformContext): TypescriptConfigMutator;
|
|
@@ -136,6 +136,16 @@ function _aspectLoader() {
|
|
|
136
136
|
return data;
|
|
137
137
|
}
|
|
138
138
|
|
|
139
|
+
function _envs() {
|
|
140
|
+
const data = _interopRequireDefault(require("@teambit/envs"));
|
|
141
|
+
|
|
142
|
+
_envs = function () {
|
|
143
|
+
return data;
|
|
144
|
+
};
|
|
145
|
+
|
|
146
|
+
return data;
|
|
147
|
+
}
|
|
148
|
+
|
|
139
149
|
function _typescript2() {
|
|
140
150
|
const data = require("./typescript.extractor");
|
|
141
151
|
|
|
@@ -206,12 +216,34 @@ function _checkTypes() {
|
|
|
206
216
|
return data;
|
|
207
217
|
}
|
|
208
218
|
|
|
219
|
+
function _tsconfigWriter() {
|
|
220
|
+
const data = require("./tsconfig-writer");
|
|
221
|
+
|
|
222
|
+
_tsconfigWriter = function () {
|
|
223
|
+
return data;
|
|
224
|
+
};
|
|
225
|
+
|
|
226
|
+
return data;
|
|
227
|
+
}
|
|
228
|
+
|
|
229
|
+
function _writeTsconfig() {
|
|
230
|
+
const data = _interopRequireDefault(require("./cmds/write-tsconfig.cmd"));
|
|
231
|
+
|
|
232
|
+
_writeTsconfig = function () {
|
|
233
|
+
return data;
|
|
234
|
+
};
|
|
235
|
+
|
|
236
|
+
return data;
|
|
237
|
+
}
|
|
238
|
+
|
|
209
239
|
class TypescriptMain {
|
|
210
|
-
constructor(logger, schemaTransformerSlot, workspace, depResolver) {
|
|
240
|
+
constructor(logger, schemaTransformerSlot, workspace, depResolver, envs, tsConfigWriter) {
|
|
211
241
|
this.logger = logger;
|
|
212
242
|
this.schemaTransformerSlot = schemaTransformerSlot;
|
|
213
243
|
this.workspace = workspace;
|
|
214
244
|
this.depResolver = depResolver;
|
|
245
|
+
this.envs = envs;
|
|
246
|
+
this.tsConfigWriter = tsConfigWriter;
|
|
215
247
|
(0, _defineProperty2().default)(this, "tsServer", void 0);
|
|
216
248
|
}
|
|
217
249
|
|
|
@@ -353,6 +385,31 @@ class TypescriptMain {
|
|
|
353
385
|
return files.filter(f => f.endsWith('.ts') || f.endsWith('.tsx'));
|
|
354
386
|
}
|
|
355
387
|
|
|
388
|
+
async cleanTsconfigJson(options = {}) {
|
|
389
|
+
const components = await this.workspace.list();
|
|
390
|
+
const runtime = await this.envs.createEnvironment(components);
|
|
391
|
+
const execContext = runtime.getEnvExecutionContext();
|
|
392
|
+
const results = await new (_tsconfigWriter().TsconfigWriter)(this.workspace, this.logger).clean(execContext, options);
|
|
393
|
+
return results;
|
|
394
|
+
}
|
|
395
|
+
|
|
396
|
+
async writeTsconfigJson(options = {}) {
|
|
397
|
+
const components = await this.workspace.list();
|
|
398
|
+
const runtime = await this.envs.createEnvironment(components);
|
|
399
|
+
const execContext = runtime.getEnvExecutionContext();
|
|
400
|
+
let cleanResults;
|
|
401
|
+
|
|
402
|
+
if (options.clean) {
|
|
403
|
+
cleanResults = await this.tsConfigWriter.clean(execContext, options);
|
|
404
|
+
}
|
|
405
|
+
|
|
406
|
+
const writeResults = await this.tsConfigWriter.write(execContext, options);
|
|
407
|
+
return {
|
|
408
|
+
writeResults,
|
|
409
|
+
cleanResults
|
|
410
|
+
};
|
|
411
|
+
}
|
|
412
|
+
|
|
356
413
|
async onPreWatch(components, watchOpts) {
|
|
357
414
|
const workspace = this.workspace;
|
|
358
415
|
|
|
@@ -386,11 +443,12 @@ class TypescriptMain {
|
|
|
386
443
|
};
|
|
387
444
|
}
|
|
388
445
|
|
|
389
|
-
static async provider([schema, loggerExt, aspectLoader, workspace, cli, depResolver], config, [schemaTransformerSlot]) {
|
|
446
|
+
static async provider([schema, loggerExt, aspectLoader, workspace, cli, depResolver, envs], config, [schemaTransformerSlot]) {
|
|
390
447
|
schema.registerParser(new (_typescript5().TypeScriptParser)());
|
|
391
448
|
const logger = loggerExt.createLogger(_typescript3().TypescriptAspect.id);
|
|
392
449
|
aspectLoader.registerPlugins([new (_schemaTransformer().SchemaTransformerPlugin)(schemaTransformerSlot)]);
|
|
393
|
-
const
|
|
450
|
+
const tsconfigWriter = new (_tsconfigWriter().TsconfigWriter)(workspace, logger);
|
|
451
|
+
const tsMain = new TypescriptMain(logger, schemaTransformerSlot, workspace, depResolver, envs, tsconfigWriter);
|
|
394
452
|
schemaTransformerSlot.register([new (_transformers().ExportDeclaration)(), new (_transformers().FunctionDeclaration)(), new (_transformers().VariableStatementTransformer)(), new (_transformers().VariableDeclaration)(), new (_transformers().SourceFileTransformer)(), new (_transformers().TypeAliasTransformer)(), new (_transformers().ClassDecelerationTransformer)(), new (_transformers().InterfaceDeclarationTransformer)(), new (_transformers().EnumDeclarationTransformer)(), new (_transformers().BindingElementTransformer)()]);
|
|
395
453
|
|
|
396
454
|
if (workspace) {
|
|
@@ -400,7 +458,8 @@ class TypescriptMain {
|
|
|
400
458
|
}
|
|
401
459
|
|
|
402
460
|
const checkTypesCmd = new (_checkTypes().CheckTypesCmd)(tsMain, workspace, logger);
|
|
403
|
-
|
|
461
|
+
const writeTsconfigCmd = new (_writeTsconfig().default)(tsMain);
|
|
462
|
+
cli.register(checkTypesCmd, writeTsconfigCmd);
|
|
404
463
|
return tsMain;
|
|
405
464
|
}
|
|
406
465
|
|
|
@@ -408,7 +467,7 @@ class TypescriptMain {
|
|
|
408
467
|
|
|
409
468
|
exports.TypescriptMain = TypescriptMain;
|
|
410
469
|
(0, _defineProperty2().default)(TypescriptMain, "runtime", _cli().MainRuntime);
|
|
411
|
-
(0, _defineProperty2().default)(TypescriptMain, "dependencies", [_schema().SchemaAspect, _logger().LoggerAspect, _aspectLoader().default, _workspace().WorkspaceAspect, _cli().CLIAspect, _dependencyResolver().DependencyResolverAspect]);
|
|
470
|
+
(0, _defineProperty2().default)(TypescriptMain, "dependencies", [_schema().SchemaAspect, _logger().LoggerAspect, _aspectLoader().default, _workspace().WorkspaceAspect, _cli().CLIAspect, _dependencyResolver().DependencyResolverAspect, _envs().default]);
|
|
412
471
|
(0, _defineProperty2().default)(TypescriptMain, "slots", [_harmony().Slot.withType()]);
|
|
413
472
|
|
|
414
473
|
_typescript3().TypescriptAspect.addRuntime(TypescriptMain);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["TypescriptMain","constructor","logger","schemaTransformerSlot","workspace","depResolver","createCompiler","options","transformers","tsModule","ts","configMutator","TypescriptConfigMutator","transformerContext","afterMutation","runTransformersWithContext","clone","TypescriptCompiler","TypescriptAspect","id","raw","getTsserverClient","tsServer","initTsserverClient","projectPath","files","TsserverClient","init","initTsserverClientFromWorkspace","Error","path","createCjsCompiler","getCjsTransformer","createEsmCompiler","getEsmTransformer","cjsTransformer","config","setModule","esmTransformer","createSchemaExtractor","tsconfig","TypeScriptExtractor","getCjsPackageJsonProps","main","types","getEsmPackageJsonProps","type","getSupportedFilesForTsserver","components","map","c","filesystem","flat","f","filter","endsWith","onPreWatch","watchOpts","spawnTSServer","verbose","checkTypes","printTypeErrors","Boolean","onComponentChange","component","results","pMapSeries","file","onFileChange","provider","schema","loggerExt","aspectLoader","cli","registerParser","TypeScriptParser","createLogger","registerPlugins","SchemaTransformerPlugin","tsMain","register","ExportDeclaration","FunctionDeclaration","VariableStatementTransformer","VariableDeclaration","SourceFileTransformer","TypeAliasTransformer","ClassDecelerationTransformer","InterfaceDeclarationTransformer","EnumDeclarationTransformer","BindingElementTransformer","registerOnPreWatch","bind","registerOnComponentChange","registerOnComponentAdd","checkTypesCmd","CheckTypesCmd","MainRuntime","SchemaAspect","LoggerAspect","AspectLoaderAspect","WorkspaceAspect","CLIAspect","DependencyResolverAspect","Slot","withType","addRuntime","context","Array","isArray","newConfig","reduce","acc","transformer"],"sources":["typescript.main.runtime.ts"],"sourcesContent":["import ts from 'typescript';\nimport { Slot, SlotRegistry } from '@teambit/harmony';\nimport { CLIAspect, CLIMain, MainRuntime } from '@teambit/cli';\nimport { Compiler } from '@teambit/compiler';\nimport { Logger, LoggerAspect, LoggerMain } from '@teambit/logger';\nimport { SchemaAspect, SchemaExtractor, SchemaMain } from '@teambit/schema';\nimport { PackageJsonProps } from '@teambit/pkg';\nimport { TypescriptConfigMutator } from '@teambit/typescript.modules.ts-config-mutator';\nimport { WorkspaceAspect } from '@teambit/workspace';\nimport type { WatchOptions, Workspace } from '@teambit/workspace';\nimport { DependencyResolverAspect, DependencyResolverMain } from '@teambit/dependency-resolver';\nimport pMapSeries from 'p-map-series';\nimport { TsserverClient, TsserverClientOpts } from '@teambit/ts-server';\nimport AspectLoaderAspect, { AspectLoaderMain } from '@teambit/aspect-loader';\nimport type { Component } from '@teambit/component';\nimport { TypeScriptExtractor } from './typescript.extractor';\nimport { TypeScriptCompilerOptions } from './compiler-options';\nimport { TypescriptAspect } from './typescript.aspect';\nimport { TypescriptCompiler } from './typescript.compiler';\nimport { TypeScriptParser } from './typescript.parser';\nimport { SchemaTransformer } from './schema-transformer';\nimport { SchemaTransformerPlugin } from './schema-transformer.plugin';\nimport {\n ExportDeclaration,\n TypeAliasTransformer,\n FunctionDeclaration,\n VariableStatementTransformer,\n VariableDeclaration,\n SourceFileTransformer,\n ClassDecelerationTransformer,\n InterfaceDeclarationTransformer,\n EnumDeclarationTransformer,\n BindingElementTransformer,\n} from './transformers';\nimport { CheckTypesCmd } from './cmds/check-types.cmd';\n\nexport type TsMode = 'build' | 'dev';\n\nexport type SchemaTransformerSlot = SlotRegistry<SchemaTransformer[]>;\n\nexport type TsConfigTransformContext = {\n // mode: TsMode;\n};\n\nexport type TsConfigTransformer = (\n config: TypescriptConfigMutator,\n context: TsConfigTransformContext\n) => TypescriptConfigMutator;\n\nexport class TypescriptMain {\n constructor(\n private logger: Logger,\n private schemaTransformerSlot: SchemaTransformerSlot,\n private workspace: Workspace,\n private depResolver: DependencyResolverMain\n ) {}\n\n private tsServer: TsserverClient;\n /**\n * create a new compiler.\n */\n createCompiler(\n options: TypeScriptCompilerOptions,\n transformers: TsConfigTransformer[] = [],\n tsModule = ts\n ): Compiler {\n const configMutator = new TypescriptConfigMutator(options);\n const transformerContext: TsConfigTransformContext = {};\n const afterMutation = runTransformersWithContext(configMutator.clone(), transformers, transformerContext);\n return new TypescriptCompiler(TypescriptAspect.id, this.logger, afterMutation.raw, tsModule);\n }\n\n /**\n * get TsserverClient instance if initiated already, otherwise, return undefined.\n */\n getTsserverClient(): TsserverClient | undefined {\n return this.tsServer;\n }\n\n /**\n * starts a tsserver process to communicate with its API.\n * @param projectPath absolute path of the project root directory\n * @param options TsserverClientOpts\n * @param files optionally, if check-types is enabled, provide files to open and type check.\n * @returns TsserverClient\n */\n async initTsserverClient(\n projectPath: string,\n options: TsserverClientOpts = {},\n files: string[] = []\n ): Promise<TsserverClient> {\n this.tsServer = new TsserverClient(projectPath, this.logger, options, files);\n this.tsServer.init();\n return this.tsServer;\n }\n\n /**\n * starts a tsserver process to communicate with its API. use only when running on the workspace.\n * @param options TsserverClientOpts\n * @param files optionally, if check-types is enabled, provide files to open and type check.\n * @returns TsserverClient\n */\n async initTsserverClientFromWorkspace(\n options: TsserverClientOpts = {},\n files: string[] = []\n ): Promise<TsserverClient> {\n if (!this.workspace) {\n throw new Error(`initTsserverClientFromWorkspace: workspace was not found`);\n }\n return this.initTsserverClient(this.workspace.path, options, files);\n }\n\n /**\n * Create a compiler instance and run the cjs transformer for it\n * @param options\n * @param transformers\n * @param tsModule\n * @returns\n */\n createCjsCompiler(options: TypeScriptCompilerOptions, transformers: TsConfigTransformer[] = [], tsModule = ts) {\n return this.createCompiler(options, [this.getCjsTransformer(), ...transformers], tsModule);\n }\n\n /**\n * Create a compiler instance and run the esm transformer for it\n * @param options\n * @param transformers\n * @param tsModule\n * @returns\n */\n createEsmCompiler(options: TypeScriptCompilerOptions, transformers: TsConfigTransformer[] = [], tsModule = ts) {\n return this.createCompiler(options, [this.getEsmTransformer(), ...transformers], tsModule);\n }\n\n /**\n * Create a transformer that change the ts module to CommonJS\n * @returns\n */\n getCjsTransformer(): TsConfigTransformer {\n const cjsTransformer = (config: TypescriptConfigMutator) => {\n config.setModule('CommonJS');\n return config;\n };\n return cjsTransformer;\n }\n\n /**\n * Create a transformer that change the ts module to ES2020\n * @returns\n */\n getEsmTransformer(): TsConfigTransformer {\n const esmTransformer = (config: TypescriptConfigMutator) => {\n config.setModule('ES2020');\n return config;\n };\n return esmTransformer;\n }\n\n /**\n * create an instance of a typescript semantic schema extractor.\n */\n createSchemaExtractor(tsconfig: any, path?: string): SchemaExtractor {\n return new TypeScriptExtractor(\n tsconfig,\n this.schemaTransformerSlot,\n this,\n path || this.workspace.path,\n this.depResolver,\n this.workspace\n );\n }\n\n /**\n * add the default package json properties to the component\n * :TODO @gilad why do we need this DSL? can't I just get the args here.\n */\n getCjsPackageJsonProps(): PackageJsonProps {\n return {\n main: 'dist/{main}.js',\n types: '{main}.ts',\n };\n }\n\n /**\n * add type: module to the package.json props and the default props\n * :TODO @gilad why do we need this DSL? can't I just get the args here.\n */\n getEsmPackageJsonProps(): PackageJsonProps {\n return {\n // main: 'dist-esm/{main}.js',\n main: 'dist/{main}.js',\n type: 'module',\n types: '{main}.ts',\n };\n }\n\n public getSupportedFilesForTsserver(components: Component[]): string[] {\n const files = components\n .map((c) => c.filesystem.files)\n .flat()\n .map((f) => f.path);\n return files.filter((f) => f.endsWith('.ts') || f.endsWith('.tsx'));\n }\n\n private async onPreWatch(components: Component[], watchOpts: WatchOptions) {\n const workspace = this.workspace;\n if (!workspace || !watchOpts.spawnTSServer) {\n return;\n }\n const { verbose, checkTypes } = watchOpts;\n const files = checkTypes ? this.getSupportedFilesForTsserver(components) : [];\n const printTypeErrors = Boolean(checkTypes);\n await this.initTsserverClientFromWorkspace({ verbose, checkTypes, printTypeErrors }, files);\n }\n\n private async onComponentChange(component: Component, files: string[]) {\n if (!this.tsServer) {\n return {\n results: 'N/A',\n };\n }\n await pMapSeries(files, (file) => this.tsServer.onFileChange(file));\n return {\n results: 'succeed',\n };\n }\n\n static runtime = MainRuntime;\n static dependencies = [\n SchemaAspect,\n LoggerAspect,\n AspectLoaderAspect,\n WorkspaceAspect,\n CLIAspect,\n DependencyResolverAspect,\n ];\n static slots = [Slot.withType<SchemaTransformer[]>()];\n\n static async provider(\n [schema, loggerExt, aspectLoader, workspace, cli, depResolver]: [\n SchemaMain,\n LoggerMain,\n AspectLoaderMain,\n Workspace,\n CLIMain,\n DependencyResolverMain\n ],\n config,\n [schemaTransformerSlot]: [SchemaTransformerSlot]\n ) {\n schema.registerParser(new TypeScriptParser());\n const logger = loggerExt.createLogger(TypescriptAspect.id);\n aspectLoader.registerPlugins([new SchemaTransformerPlugin(schemaTransformerSlot)]);\n const tsMain = new TypescriptMain(logger, schemaTransformerSlot, workspace, depResolver);\n schemaTransformerSlot.register([\n new ExportDeclaration(),\n new FunctionDeclaration(),\n new VariableStatementTransformer(),\n new VariableDeclaration(),\n new SourceFileTransformer(),\n new TypeAliasTransformer(),\n new ClassDecelerationTransformer(),\n new InterfaceDeclarationTransformer(),\n new EnumDeclarationTransformer(),\n new BindingElementTransformer(),\n ]);\n\n if (workspace) {\n workspace.registerOnPreWatch(tsMain.onPreWatch.bind(this));\n workspace.registerOnComponentChange(tsMain.onComponentChange.bind(this));\n workspace.registerOnComponentAdd(tsMain.onComponentChange.bind(this));\n }\n\n const checkTypesCmd = new CheckTypesCmd(tsMain, workspace, logger);\n cli.register(checkTypesCmd);\n\n return tsMain;\n }\n}\n\nTypescriptAspect.addRuntime(TypescriptMain);\n\nexport function runTransformersWithContext(\n config: TypescriptConfigMutator,\n transformers: TsConfigTransformer[] = [],\n context: TsConfigTransformContext\n): TypescriptConfigMutator {\n if (!Array.isArray(transformers)) return config;\n const newConfig = transformers.reduce((acc, transformer) => {\n return transformer(acc, context);\n }, config);\n return newConfig;\n}\n\nexport default TypescriptMain;\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"names":["TypescriptMain","constructor","logger","schemaTransformerSlot","workspace","depResolver","envs","tsConfigWriter","createCompiler","options","transformers","tsModule","ts","configMutator","TypescriptConfigMutator","transformerContext","afterMutation","runTransformersWithContext","clone","TypescriptCompiler","TypescriptAspect","id","raw","getTsserverClient","tsServer","initTsserverClient","projectPath","files","TsserverClient","init","initTsserverClientFromWorkspace","Error","path","createCjsCompiler","getCjsTransformer","createEsmCompiler","getEsmTransformer","cjsTransformer","config","setModule","esmTransformer","createSchemaExtractor","tsconfig","TypeScriptExtractor","getCjsPackageJsonProps","main","types","getEsmPackageJsonProps","type","getSupportedFilesForTsserver","components","map","c","filesystem","flat","f","filter","endsWith","cleanTsconfigJson","list","runtime","createEnvironment","execContext","getEnvExecutionContext","results","TsconfigWriter","clean","writeTsconfigJson","cleanResults","writeResults","write","onPreWatch","watchOpts","spawnTSServer","verbose","checkTypes","printTypeErrors","Boolean","onComponentChange","component","pMapSeries","file","onFileChange","provider","schema","loggerExt","aspectLoader","cli","registerParser","TypeScriptParser","createLogger","registerPlugins","SchemaTransformerPlugin","tsconfigWriter","tsMain","register","ExportDeclaration","FunctionDeclaration","VariableStatementTransformer","VariableDeclaration","SourceFileTransformer","TypeAliasTransformer","ClassDecelerationTransformer","InterfaceDeclarationTransformer","EnumDeclarationTransformer","BindingElementTransformer","registerOnPreWatch","bind","registerOnComponentChange","registerOnComponentAdd","checkTypesCmd","CheckTypesCmd","writeTsconfigCmd","WriteTsconfigCmd","MainRuntime","SchemaAspect","LoggerAspect","AspectLoaderAspect","WorkspaceAspect","CLIAspect","DependencyResolverAspect","EnvsAspect","Slot","withType","addRuntime","context","Array","isArray","newConfig","reduce","acc","transformer"],"sources":["typescript.main.runtime.ts"],"sourcesContent":["import ts from 'typescript';\nimport { Slot, SlotRegistry } from '@teambit/harmony';\nimport { CLIAspect, CLIMain, MainRuntime } from '@teambit/cli';\nimport { Compiler } from '@teambit/compiler';\nimport { Logger, LoggerAspect, LoggerMain } from '@teambit/logger';\nimport { SchemaAspect, SchemaExtractor, SchemaMain } from '@teambit/schema';\nimport { PackageJsonProps } from '@teambit/pkg';\nimport { TypescriptConfigMutator } from '@teambit/typescript.modules.ts-config-mutator';\nimport { WorkspaceAspect } from '@teambit/workspace';\nimport type { WatchOptions, Workspace } from '@teambit/workspace';\nimport { DependencyResolverAspect, DependencyResolverMain } from '@teambit/dependency-resolver';\nimport pMapSeries from 'p-map-series';\nimport { TsserverClient, TsserverClientOpts } from '@teambit/ts-server';\nimport AspectLoaderAspect, { AspectLoaderMain } from '@teambit/aspect-loader';\nimport type { Component } from '@teambit/component';\nimport EnvsAspect, { EnvsMain } from '@teambit/envs';\nimport { TypeScriptExtractor } from './typescript.extractor';\nimport { TypeScriptCompilerOptions } from './compiler-options';\nimport { TypescriptAspect } from './typescript.aspect';\nimport { TypescriptCompiler } from './typescript.compiler';\nimport { TypeScriptParser } from './typescript.parser';\nimport { SchemaTransformer } from './schema-transformer';\nimport { SchemaTransformerPlugin } from './schema-transformer.plugin';\nimport {\n ExportDeclaration,\n TypeAliasTransformer,\n FunctionDeclaration,\n VariableStatementTransformer,\n VariableDeclaration,\n SourceFileTransformer,\n ClassDecelerationTransformer,\n InterfaceDeclarationTransformer,\n EnumDeclarationTransformer,\n BindingElementTransformer,\n} from './transformers';\nimport { CheckTypesCmd } from './cmds/check-types.cmd';\nimport { TsconfigPathsPerEnv, TsconfigWriter } from './tsconfig-writer';\nimport WriteTsconfigCmd from './cmds/write-tsconfig.cmd';\n\nexport type TsMode = 'build' | 'dev';\n\nexport type SchemaTransformerSlot = SlotRegistry<SchemaTransformer[]>;\n\nexport type TsConfigTransformContext = {\n // mode: TsMode;\n};\n\nexport type TsconfigWriterOptions = {\n clean?: boolean;\n silent?: boolean; // no prompt\n dedupe?: boolean;\n dryRun?: boolean;\n dryRunWithTsconfig?: boolean;\n};\n\nexport type TsConfigTransformer = (\n config: TypescriptConfigMutator,\n context: TsConfigTransformContext\n) => TypescriptConfigMutator;\n\nexport class TypescriptMain {\n constructor(\n private logger: Logger,\n private schemaTransformerSlot: SchemaTransformerSlot,\n private workspace: Workspace,\n private depResolver: DependencyResolverMain,\n private envs: EnvsMain,\n private tsConfigWriter: TsconfigWriter\n ) {}\n\n private tsServer: TsserverClient;\n /**\n * create a new compiler.\n */\n createCompiler(\n options: TypeScriptCompilerOptions,\n transformers: TsConfigTransformer[] = [],\n tsModule = ts\n ): Compiler {\n const configMutator = new TypescriptConfigMutator(options);\n const transformerContext: TsConfigTransformContext = {};\n const afterMutation = runTransformersWithContext(configMutator.clone(), transformers, transformerContext);\n return new TypescriptCompiler(TypescriptAspect.id, this.logger, afterMutation.raw, tsModule);\n }\n\n /**\n * get TsserverClient instance if initiated already, otherwise, return undefined.\n */\n getTsserverClient(): TsserverClient | undefined {\n return this.tsServer;\n }\n\n /**\n * starts a tsserver process to communicate with its API.\n * @param projectPath absolute path of the project root directory\n * @param options TsserverClientOpts\n * @param files optionally, if check-types is enabled, provide files to open and type check.\n * @returns TsserverClient\n */\n async initTsserverClient(\n projectPath: string,\n options: TsserverClientOpts = {},\n files: string[] = []\n ): Promise<TsserverClient> {\n this.tsServer = new TsserverClient(projectPath, this.logger, options, files);\n this.tsServer.init();\n return this.tsServer;\n }\n\n /**\n * starts a tsserver process to communicate with its API. use only when running on the workspace.\n * @param options TsserverClientOpts\n * @param files optionally, if check-types is enabled, provide files to open and type check.\n * @returns TsserverClient\n */\n async initTsserverClientFromWorkspace(\n options: TsserverClientOpts = {},\n files: string[] = []\n ): Promise<TsserverClient> {\n if (!this.workspace) {\n throw new Error(`initTsserverClientFromWorkspace: workspace was not found`);\n }\n return this.initTsserverClient(this.workspace.path, options, files);\n }\n\n /**\n * Create a compiler instance and run the cjs transformer for it\n * @param options\n * @param transformers\n * @param tsModule\n * @returns\n */\n createCjsCompiler(options: TypeScriptCompilerOptions, transformers: TsConfigTransformer[] = [], tsModule = ts) {\n return this.createCompiler(options, [this.getCjsTransformer(), ...transformers], tsModule);\n }\n\n /**\n * Create a compiler instance and run the esm transformer for it\n * @param options\n * @param transformers\n * @param tsModule\n * @returns\n */\n createEsmCompiler(options: TypeScriptCompilerOptions, transformers: TsConfigTransformer[] = [], tsModule = ts) {\n return this.createCompiler(options, [this.getEsmTransformer(), ...transformers], tsModule);\n }\n\n /**\n * Create a transformer that change the ts module to CommonJS\n * @returns\n */\n getCjsTransformer(): TsConfigTransformer {\n const cjsTransformer = (config: TypescriptConfigMutator) => {\n config.setModule('CommonJS');\n return config;\n };\n return cjsTransformer;\n }\n\n /**\n * Create a transformer that change the ts module to ES2020\n * @returns\n */\n getEsmTransformer(): TsConfigTransformer {\n const esmTransformer = (config: TypescriptConfigMutator) => {\n config.setModule('ES2020');\n return config;\n };\n return esmTransformer;\n }\n\n /**\n * create an instance of a typescript semantic schema extractor.\n */\n createSchemaExtractor(tsconfig: any, path?: string): SchemaExtractor {\n return new TypeScriptExtractor(\n tsconfig,\n this.schemaTransformerSlot,\n this,\n path || this.workspace.path,\n this.depResolver,\n this.workspace\n );\n }\n\n /**\n * add the default package json properties to the component\n * :TODO @gilad why do we need this DSL? can't I just get the args here.\n */\n getCjsPackageJsonProps(): PackageJsonProps {\n return {\n main: 'dist/{main}.js',\n types: '{main}.ts',\n };\n }\n\n /**\n * add type: module to the package.json props and the default props\n * :TODO @gilad why do we need this DSL? can't I just get the args here.\n */\n getEsmPackageJsonProps(): PackageJsonProps {\n return {\n // main: 'dist-esm/{main}.js',\n main: 'dist/{main}.js',\n type: 'module',\n types: '{main}.ts',\n };\n }\n\n getSupportedFilesForTsserver(components: Component[]): string[] {\n const files = components\n .map((c) => c.filesystem.files)\n .flat()\n .map((f) => f.path);\n return files.filter((f) => f.endsWith('.ts') || f.endsWith('.tsx'));\n }\n\n async cleanTsconfigJson(options: TsconfigWriterOptions = {}) {\n const components = await this.workspace.list();\n const runtime = await this.envs.createEnvironment(components);\n const execContext = runtime.getEnvExecutionContext();\n\n const results = await new TsconfigWriter(this.workspace, this.logger).clean(execContext, options);\n\n return results;\n }\n\n async writeTsconfigJson(options: TsconfigWriterOptions = {}): Promise<{\n cleanResults?: string[];\n writeResults: TsconfigPathsPerEnv[];\n }> {\n const components = await this.workspace.list();\n const runtime = await this.envs.createEnvironment(components);\n const execContext = runtime.getEnvExecutionContext();\n\n let cleanResults: string[] | undefined;\n if (options.clean) {\n cleanResults = await this.tsConfigWriter.clean(execContext, options);\n }\n\n const writeResults = await this.tsConfigWriter.write(execContext, options);\n\n return { writeResults, cleanResults };\n }\n\n private async onPreWatch(components: Component[], watchOpts: WatchOptions) {\n const workspace = this.workspace;\n if (!workspace || !watchOpts.spawnTSServer) {\n return;\n }\n const { verbose, checkTypes } = watchOpts;\n const files = checkTypes ? this.getSupportedFilesForTsserver(components) : [];\n const printTypeErrors = Boolean(checkTypes);\n await this.initTsserverClientFromWorkspace({ verbose, checkTypes, printTypeErrors }, files);\n }\n\n private async onComponentChange(component: Component, files: string[]) {\n if (!this.tsServer) {\n return {\n results: 'N/A',\n };\n }\n await pMapSeries(files, (file) => this.tsServer.onFileChange(file));\n return {\n results: 'succeed',\n };\n }\n\n static runtime = MainRuntime;\n static dependencies = [\n SchemaAspect,\n LoggerAspect,\n AspectLoaderAspect,\n WorkspaceAspect,\n CLIAspect,\n DependencyResolverAspect,\n EnvsAspect,\n ];\n static slots = [Slot.withType<SchemaTransformer[]>()];\n\n static async provider(\n [schema, loggerExt, aspectLoader, workspace, cli, depResolver, envs]: [\n SchemaMain,\n LoggerMain,\n AspectLoaderMain,\n Workspace,\n CLIMain,\n DependencyResolverMain,\n EnvsMain\n ],\n config,\n [schemaTransformerSlot]: [SchemaTransformerSlot]\n ) {\n schema.registerParser(new TypeScriptParser());\n const logger = loggerExt.createLogger(TypescriptAspect.id);\n aspectLoader.registerPlugins([new SchemaTransformerPlugin(schemaTransformerSlot)]);\n const tsconfigWriter = new TsconfigWriter(workspace, logger);\n const tsMain = new TypescriptMain(logger, schemaTransformerSlot, workspace, depResolver, envs, tsconfigWriter);\n schemaTransformerSlot.register([\n new ExportDeclaration(),\n new FunctionDeclaration(),\n new VariableStatementTransformer(),\n new VariableDeclaration(),\n new SourceFileTransformer(),\n new TypeAliasTransformer(),\n new ClassDecelerationTransformer(),\n new InterfaceDeclarationTransformer(),\n new EnumDeclarationTransformer(),\n new BindingElementTransformer(),\n ]);\n\n if (workspace) {\n workspace.registerOnPreWatch(tsMain.onPreWatch.bind(this));\n workspace.registerOnComponentChange(tsMain.onComponentChange.bind(this));\n workspace.registerOnComponentAdd(tsMain.onComponentChange.bind(this));\n }\n\n const checkTypesCmd = new CheckTypesCmd(tsMain, workspace, logger);\n const writeTsconfigCmd = new WriteTsconfigCmd(tsMain);\n cli.register(checkTypesCmd, writeTsconfigCmd);\n\n return tsMain;\n }\n}\n\nTypescriptAspect.addRuntime(TypescriptMain);\n\nexport function runTransformersWithContext(\n config: TypescriptConfigMutator,\n transformers: TsConfigTransformer[] = [],\n context: TsConfigTransformContext\n): TypescriptConfigMutator {\n if (!Array.isArray(transformers)) return config;\n const newConfig = transformers.reduce((acc, transformer) => {\n return transformer(acc, context);\n }, config);\n return newConfig;\n}\n\nexport default TypescriptMain;\n"],"mappings":"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"}
|
|
Binary file
|
package/package.json
CHANGED
|
@@ -1,44 +1,46 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@teambit/typescript",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.871",
|
|
4
4
|
"homepage": "https://bit.dev/teambit/typescript/typescript",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"componentId": {
|
|
7
7
|
"scope": "teambit.typescript",
|
|
8
8
|
"name": "typescript",
|
|
9
|
-
"version": "0.0.
|
|
9
|
+
"version": "0.0.871"
|
|
10
10
|
},
|
|
11
11
|
"dependencies": {
|
|
12
12
|
"lodash": "4.17.21",
|
|
13
13
|
"tsutils": "3.21.0",
|
|
14
14
|
"typescript": "4.4.2",
|
|
15
|
+
"chalk": "2.4.2",
|
|
15
16
|
"fs-extra": "10.0.0",
|
|
17
|
+
"yesno": "0.4.0",
|
|
16
18
|
"p-map-series": "2.1.0",
|
|
17
|
-
"chalk": "2.4.2",
|
|
18
19
|
"@babel/runtime": "7.12.18",
|
|
19
20
|
"core-js": "^3.0.0",
|
|
20
21
|
"@teambit/harmony": "0.3.3",
|
|
21
|
-
"@teambit/compiler": "0.0.
|
|
22
|
+
"@teambit/compiler": "0.0.871",
|
|
22
23
|
"@teambit/typescript.modules.ts-config-mutator": "0.0.74",
|
|
23
|
-
"@teambit/component": "0.0.
|
|
24
|
-
"@teambit/dependency-resolver": "0.0.
|
|
24
|
+
"@teambit/component": "0.0.871",
|
|
25
|
+
"@teambit/dependency-resolver": "0.0.871",
|
|
25
26
|
"@teambit/semantics.entities.semantic-schema": "0.0.38",
|
|
26
27
|
"@teambit/ts-server": "0.0.38",
|
|
27
|
-
"@teambit/aspect-loader": "0.0.
|
|
28
|
+
"@teambit/aspect-loader": "0.0.871",
|
|
29
|
+
"@teambit/envs": "0.0.871",
|
|
30
|
+
"@teambit/logger": "0.0.675",
|
|
31
|
+
"@teambit/workspace": "0.0.871",
|
|
28
32
|
"@teambit/bit-error": "0.0.400",
|
|
29
|
-
"@teambit/builder": "0.0.
|
|
30
|
-
"@teambit/isolator": "0.0.
|
|
31
|
-
"@teambit/
|
|
32
|
-
"@teambit/
|
|
33
|
-
"@teambit/
|
|
34
|
-
"@teambit/cli": "0.0.580",
|
|
35
|
-
"@teambit/pkg": "0.0.869"
|
|
33
|
+
"@teambit/builder": "0.0.871",
|
|
34
|
+
"@teambit/isolator": "0.0.871",
|
|
35
|
+
"@teambit/schema": "0.0.871",
|
|
36
|
+
"@teambit/cli": "0.0.582",
|
|
37
|
+
"@teambit/pkg": "0.0.871"
|
|
36
38
|
},
|
|
37
39
|
"devDependencies": {
|
|
38
40
|
"@types/lodash": "4.14.165",
|
|
41
|
+
"@types/fs-extra": "9.0.7",
|
|
39
42
|
"chai": "4.3.0",
|
|
40
43
|
"@types/chai": "4.2.15",
|
|
41
|
-
"@types/fs-extra": "9.0.7",
|
|
42
44
|
"@types/react": "^17.0.8",
|
|
43
45
|
"@types/mocha": "9.1.0",
|
|
44
46
|
"@types/testing-library__jest-dom": "5.9.5",
|
|
@@ -48,7 +50,7 @@
|
|
|
48
50
|
"@teambit/typescript.aspect-docs.typescript": "0.0.145"
|
|
49
51
|
},
|
|
50
52
|
"peerDependencies": {
|
|
51
|
-
"@teambit/legacy": "1.0.
|
|
53
|
+
"@teambit/legacy": "1.0.363",
|
|
52
54
|
"react-dom": "^16.8.0 || ^17.0.0",
|
|
53
55
|
"react": "^16.8.0 || ^17.0.0"
|
|
54
56
|
},
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import * as compositions_0 from '/home/circleci/Library/Caches/Bit/capsules/8891be5ad3d35bfc38b9cd90c0e05b598a5a55af/teambit.typescript_typescript@0.0.
|
|
2
|
-
import * as overview_0 from '/home/circleci/Library/Caches/Bit/capsules/8891be5ad3d35bfc38b9cd90c0e05b598a5a55af/teambit.typescript_typescript@0.0.
|
|
1
|
+
import * as compositions_0 from '/home/circleci/Library/Caches/Bit/capsules/8891be5ad3d35bfc38b9cd90c0e05b598a5a55af/teambit.typescript_typescript@0.0.871/dist/typescript.composition.js';
|
|
2
|
+
import * as overview_0 from '/home/circleci/Library/Caches/Bit/capsules/8891be5ad3d35bfc38b9cd90c0e05b598a5a55af/teambit.typescript_typescript@0.0.871/dist/typescript.docs.mdx';
|
|
3
3
|
|
|
4
4
|
export const compositions = [compositions_0];
|
|
5
5
|
export const overview = [overview_0];
|
|
Binary file
|