@teambit/doctor 0.0.178 → 0.0.179
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/artifacts/__bit_junit.xml +4 -0
- package/artifacts/preview/teambit_harmony_doctor-preview.js +1 -0
- package/artifacts/schema.json +2209 -0
- package/dist/core-diagnoses/validate-git-exec.js +1 -2
- package/dist/core-diagnoses/validate-git-exec.js.map +1 -1
- package/dist/core-diagnoses/validate-workspace-bit-json-syntax.js +1 -2
- package/dist/core-diagnoses/validate-workspace-bit-json-syntax.js.map +1 -1
- package/dist/doctor.main.runtime.js +1 -1
- package/dist/doctor.main.runtime.js.map +1 -1
- package/package.json +39 -27
- package/types/asset.d.ts +15 -3
- package/diagnosis-list-template.ts +0 -29
- package/diagnosis.ts +0 -81
- package/doctor-cmd.ts +0 -99
- package/doctor-registrar-builder.ts +0 -22
- package/doctor-registrar.ts +0 -58
- package/doctor-results-template.ts +0 -106
- package/doctor.aspect.ts +0 -5
- package/doctor.main.runtime.ts +0 -296
- package/index.ts +0 -7
- /package/dist/{preview-1734279612846.js → preview-1734405572492.js} +0 -0
|
@@ -1,106 +0,0 @@
|
|
|
1
|
-
import chalk from 'chalk';
|
|
2
|
-
import { table } from 'table';
|
|
3
|
-
import type { Alignment } from 'table';
|
|
4
|
-
import { DoctorMetaData, DoctorRunAllResults } from './doctor.main.runtime';
|
|
5
|
-
import { ExamineResult } from './diagnosis';
|
|
6
|
-
|
|
7
|
-
// const NAME_COLUMN_WIDTH = 100;
|
|
8
|
-
// const DESCRIPTION_COLUMN_WIDTH = 30;
|
|
9
|
-
|
|
10
|
-
const summeryTableColumnConfig = {
|
|
11
|
-
columnDefault: {
|
|
12
|
-
alignment: 'left' as Alignment,
|
|
13
|
-
},
|
|
14
|
-
};
|
|
15
|
-
|
|
16
|
-
type SummeryRow = [string, string, string, string];
|
|
17
|
-
|
|
18
|
-
function _formatStatusCell(status: boolean): string {
|
|
19
|
-
if (status) {
|
|
20
|
-
return chalk.green('passed');
|
|
21
|
-
}
|
|
22
|
-
return chalk.red('failed');
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
function _createSummeryRow(examineResult: ExamineResult): SummeryRow {
|
|
26
|
-
const meta = examineResult.diagnosisMetaData;
|
|
27
|
-
const status = _formatStatusCell(examineResult.bareResult.valid);
|
|
28
|
-
return [meta.category, meta.name, meta.description, status];
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
function _createSummeryTable(examineResult: ExamineResult[]): string {
|
|
32
|
-
const header = [chalk.bold('category'), chalk.bold('name'), chalk.bold('description'), chalk.bold('status')];
|
|
33
|
-
const rows = examineResult.map(_createSummeryRow);
|
|
34
|
-
// @ts-ignore AUTO-ADDED-AFTER-MIGRATION-PLEASE-FIX!
|
|
35
|
-
rows.unshift(header);
|
|
36
|
-
const output = table(rows, summeryTableColumnConfig);
|
|
37
|
-
return output;
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
function _createSummerySection(examineResult: ExamineResult[]): string {
|
|
41
|
-
// A placeholder if we will decide we want a title
|
|
42
|
-
const title = chalk.underline('');
|
|
43
|
-
const summeryTable = _createSummeryTable(examineResult);
|
|
44
|
-
return `${title}\n${summeryTable}`;
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
function _createFullReportForDiagnosis(examineResult: ExamineResult): string {
|
|
48
|
-
if (examineResult.bareResult.valid) {
|
|
49
|
-
return '';
|
|
50
|
-
}
|
|
51
|
-
const title = chalk.underline(examineResult.diagnosisMetaData.name);
|
|
52
|
-
const symptomsTitle = chalk.underline('symptoms');
|
|
53
|
-
const symptomsText = examineResult.formattedSymptoms;
|
|
54
|
-
const cureTitle = chalk.underline('cure');
|
|
55
|
-
const cureText = examineResult.formattedManualTreat;
|
|
56
|
-
return `${title}
|
|
57
|
-
${symptomsTitle}
|
|
58
|
-
${symptomsText}
|
|
59
|
-
${cureTitle}
|
|
60
|
-
${cureText}\n`;
|
|
61
|
-
}
|
|
62
|
-
|
|
63
|
-
function _createFullReportForDiagnoses(examineResult: ExamineResult[]): string {
|
|
64
|
-
const fullDiagnosesReport = examineResult.map(_createFullReportForDiagnosis).join('\n');
|
|
65
|
-
return fullDiagnosesReport;
|
|
66
|
-
}
|
|
67
|
-
|
|
68
|
-
function _createFullReportSection(examineResult: ExamineResult[]): string {
|
|
69
|
-
const title = chalk.underline('Error report');
|
|
70
|
-
const fullDiagnosesReport = _createFullReportForDiagnoses(examineResult);
|
|
71
|
-
if (fullDiagnosesReport.trim() === '') {
|
|
72
|
-
return '';
|
|
73
|
-
}
|
|
74
|
-
return `${title}
|
|
75
|
-
${fullDiagnosesReport}`;
|
|
76
|
-
}
|
|
77
|
-
|
|
78
|
-
function _createWrittenFileSection(savedFilePath) {
|
|
79
|
-
if (!savedFilePath) {
|
|
80
|
-
return '';
|
|
81
|
-
}
|
|
82
|
-
return `File written to ${savedFilePath}`;
|
|
83
|
-
}
|
|
84
|
-
|
|
85
|
-
function _createMetaSection(metaData: DoctorMetaData) {
|
|
86
|
-
return `
|
|
87
|
-
bit version : ${metaData.bitVersion}
|
|
88
|
-
node version : ${metaData.nodeVersion}
|
|
89
|
-
npm version : ${metaData.npmVersion || 'NA'}
|
|
90
|
-
yarn version : ${metaData.yarnVersion || 'NA'}
|
|
91
|
-
platform : ${metaData.platform}
|
|
92
|
-
user details : ${metaData.userDetails}
|
|
93
|
-
`;
|
|
94
|
-
}
|
|
95
|
-
|
|
96
|
-
export default function render({ examineResults, savedFilePath, metaData }: DoctorRunAllResults): string {
|
|
97
|
-
const meatSection = _createMetaSection(metaData);
|
|
98
|
-
const summerySection = _createSummerySection(examineResults);
|
|
99
|
-
const fullReportSection = _createFullReportSection(examineResults);
|
|
100
|
-
const writtenFileSection = _createWrittenFileSection(savedFilePath);
|
|
101
|
-
const output = `${meatSection}
|
|
102
|
-
${summerySection}
|
|
103
|
-
${fullReportSection}
|
|
104
|
-
${writtenFileSection}`;
|
|
105
|
-
return output;
|
|
106
|
-
}
|
package/doctor.aspect.ts
DELETED
package/doctor.main.runtime.ts
DELETED
|
@@ -1,296 +0,0 @@
|
|
|
1
|
-
import { CLIAspect, CLIMain, MainRuntime } from '@teambit/cli';
|
|
2
|
-
import path from 'path';
|
|
3
|
-
import fs from 'fs-extra';
|
|
4
|
-
import os from 'os';
|
|
5
|
-
// @ts-ignore AUTO-ADDED-AFTER-MIGRATION-PLEASE-FIX!
|
|
6
|
-
import Stream from 'stream';
|
|
7
|
-
import tar from 'tar-stream';
|
|
8
|
-
import tarFS from 'tar-fs';
|
|
9
|
-
import { getBitVersion } from '@teambit/bit.get-bit-version';
|
|
10
|
-
import { CFG_USER_EMAIL_KEY, CFG_USER_NAME_KEY, DEBUG_LOG } from '@teambit/legacy.constants';
|
|
11
|
-
import { BitMap } from '@teambit/legacy.bit-map';
|
|
12
|
-
import { LegacyWorkspaceConfig } from '@teambit/legacy.consumer-config';
|
|
13
|
-
import { getWorkspaceInfo, WorkspaceInfo } from '@teambit/workspace.modules.workspace-locator';
|
|
14
|
-
import Diagnosis, { ExamineResult } from './diagnosis';
|
|
15
|
-
import DoctorRegistrar from './doctor-registrar';
|
|
16
|
-
import registerCoreAndExtensionsDiagnoses from './doctor-registrar-builder';
|
|
17
|
-
import { compact } from 'lodash';
|
|
18
|
-
import { removeChalkCharacters } from '@teambit/legacy.utils';
|
|
19
|
-
import { getExt } from '@teambit/toolbox.fs.extension-getter';
|
|
20
|
-
import { findScopePath } from '@teambit/scope.modules.find-scope-path';
|
|
21
|
-
import * as globalConfig from '@teambit/legacy.global-config';
|
|
22
|
-
import { getNpmVersion } from './core-diagnoses/validate-npm-exec';
|
|
23
|
-
import { getYarnVersion } from './core-diagnoses/validate-yarn-exec';
|
|
24
|
-
import { DiagnosisNotFound } from './exceptions/diagnosis-not-found';
|
|
25
|
-
import { MissingDiagnosisName } from './exceptions/missing-diagnosis-name';
|
|
26
|
-
|
|
27
|
-
import { DoctorAspect } from './doctor.aspect';
|
|
28
|
-
import { DoctorCmd } from './doctor-cmd';
|
|
29
|
-
import { Logger, LoggerAspect, LoggerMain } from '@teambit/logger';
|
|
30
|
-
import chalk from 'chalk';
|
|
31
|
-
|
|
32
|
-
// run specific check
|
|
33
|
-
export type DoctorMetaData = {
|
|
34
|
-
nodeVersion: string;
|
|
35
|
-
runningTimestamp: number;
|
|
36
|
-
platform: string;
|
|
37
|
-
bitVersion: string;
|
|
38
|
-
npmVersion: string;
|
|
39
|
-
yarnVersion: string;
|
|
40
|
-
userDetails: string;
|
|
41
|
-
};
|
|
42
|
-
export type DoctorRunAllResults = {
|
|
43
|
-
examineResults: ExamineResult[];
|
|
44
|
-
savedFilePath: string | null | undefined;
|
|
45
|
-
metaData: DoctorMetaData;
|
|
46
|
-
};
|
|
47
|
-
export type DoctorRunOneResult = {
|
|
48
|
-
examineResult: ExamineResult;
|
|
49
|
-
savedFilePath: string | null | undefined;
|
|
50
|
-
metaData: DoctorMetaData;
|
|
51
|
-
};
|
|
52
|
-
|
|
53
|
-
let runningTimeStamp;
|
|
54
|
-
|
|
55
|
-
export type DoctorOptions = {
|
|
56
|
-
diagnosisName?: string;
|
|
57
|
-
filePath?: string;
|
|
58
|
-
archiveWorkspace?: boolean;
|
|
59
|
-
includeNodeModules?: boolean;
|
|
60
|
-
includePublic?: boolean;
|
|
61
|
-
excludeLocalScope?: boolean;
|
|
62
|
-
};
|
|
63
|
-
|
|
64
|
-
export class DoctorMain {
|
|
65
|
-
constructor(private logger: Logger) {}
|
|
66
|
-
|
|
67
|
-
async runAll(options: DoctorOptions): Promise<DoctorRunAllResults> {
|
|
68
|
-
registerCoreAndExtensionsDiagnoses();
|
|
69
|
-
runningTimeStamp = this._getTimeStamp();
|
|
70
|
-
const doctorRegistrar = DoctorRegistrar.getInstance();
|
|
71
|
-
const examineResultsWithNulls = await Promise.all(
|
|
72
|
-
doctorRegistrar.diagnoses.map(async (diagnosis) => {
|
|
73
|
-
try {
|
|
74
|
-
return await diagnosis.examine();
|
|
75
|
-
} catch (err: any) {
|
|
76
|
-
this.logger.error(`doctor failed running diagnosis "${diagnosis.name}"`, err);
|
|
77
|
-
this.logger.consoleFailure(
|
|
78
|
-
chalk.red(`doctor failed running diagnosis "${diagnosis.name}".\nerror-message: ${err.message}`)
|
|
79
|
-
);
|
|
80
|
-
}
|
|
81
|
-
})
|
|
82
|
-
);
|
|
83
|
-
const examineResults = compact(examineResultsWithNulls);
|
|
84
|
-
const envMeta = await this._getEnvMeta();
|
|
85
|
-
const savedFilePath = await this._saveExamineResultsToFile(examineResults, envMeta, options);
|
|
86
|
-
return { examineResults, savedFilePath, metaData: envMeta };
|
|
87
|
-
}
|
|
88
|
-
|
|
89
|
-
async runOne({ diagnosisName, ...options }: DoctorOptions): Promise<DoctorRunOneResult> {
|
|
90
|
-
if (!diagnosisName) {
|
|
91
|
-
throw new MissingDiagnosisName();
|
|
92
|
-
}
|
|
93
|
-
registerCoreAndExtensionsDiagnoses();
|
|
94
|
-
runningTimeStamp = this._getTimeStamp();
|
|
95
|
-
const doctorRegistrar = DoctorRegistrar.getInstance();
|
|
96
|
-
const diagnosis = doctorRegistrar.getDiagnosisByName(diagnosisName);
|
|
97
|
-
if (!diagnosis) {
|
|
98
|
-
throw new DiagnosisNotFound(diagnosisName);
|
|
99
|
-
}
|
|
100
|
-
const examineResult = await diagnosis.examine();
|
|
101
|
-
const envMeta = await this._getEnvMeta();
|
|
102
|
-
const savedFilePath = await this._saveExamineResultsToFile([examineResult], envMeta, options);
|
|
103
|
-
return { examineResult, savedFilePath, metaData: envMeta };
|
|
104
|
-
}
|
|
105
|
-
|
|
106
|
-
async listDiagnoses(): Promise<Diagnosis[]> {
|
|
107
|
-
registerCoreAndExtensionsDiagnoses();
|
|
108
|
-
const doctorRegistrar = DoctorRegistrar.getInstance();
|
|
109
|
-
return Promise.resolve(doctorRegistrar.diagnoses);
|
|
110
|
-
}
|
|
111
|
-
|
|
112
|
-
private async _saveExamineResultsToFile(
|
|
113
|
-
examineResults: ExamineResult[],
|
|
114
|
-
envMeta: DoctorMetaData,
|
|
115
|
-
options: DoctorOptions
|
|
116
|
-
): Promise<string | null | undefined> {
|
|
117
|
-
if (!options.filePath) {
|
|
118
|
-
return Promise.resolve(undefined);
|
|
119
|
-
}
|
|
120
|
-
const finalFilePath = this._calculateFinalFileName(options.filePath);
|
|
121
|
-
const packStream = await this._generateExamineResultsTarFile(examineResults, envMeta, finalFilePath, options);
|
|
122
|
-
|
|
123
|
-
const yourTarball = fs.createWriteStream(finalFilePath);
|
|
124
|
-
|
|
125
|
-
packStream.pipe(yourTarball);
|
|
126
|
-
|
|
127
|
-
return new Promise((resolve) => {
|
|
128
|
-
yourTarball.on('close', () => {
|
|
129
|
-
this.logger.info(`wrote a file by bit doctor, file path: ${finalFilePath}`);
|
|
130
|
-
resolve(finalFilePath);
|
|
131
|
-
// fs.stat(finalFilePath, private (err, stats) {
|
|
132
|
-
// if (err) throw err
|
|
133
|
-
// console.log(stats)
|
|
134
|
-
// console.log('Got file info successfully!')
|
|
135
|
-
// })
|
|
136
|
-
});
|
|
137
|
-
});
|
|
138
|
-
}
|
|
139
|
-
|
|
140
|
-
private getWithoutExt(filename: string): string {
|
|
141
|
-
const ext = getExt(filename);
|
|
142
|
-
// There is no extension just return the file name
|
|
143
|
-
if (ext === filename) {
|
|
144
|
-
return filename;
|
|
145
|
-
}
|
|
146
|
-
return filename.substring(0, filename.length - ext.length - 1); // -1 to remove the '.'
|
|
147
|
-
}
|
|
148
|
-
|
|
149
|
-
private _calculateFinalFileName(fileName: string): string {
|
|
150
|
-
if (fileName === '.') {
|
|
151
|
-
return this._getDefaultFileName();
|
|
152
|
-
}
|
|
153
|
-
let finalFileName = fileName;
|
|
154
|
-
if (getExt(fileName) !== 'tar' && getExt(fileName) !== 'tar.gz') {
|
|
155
|
-
finalFileName = `${this.getWithoutExt(finalFileName)}.tar`;
|
|
156
|
-
}
|
|
157
|
-
return finalFileName;
|
|
158
|
-
}
|
|
159
|
-
|
|
160
|
-
private _getDefaultFileName() {
|
|
161
|
-
const timestamp = runningTimeStamp || this._getTimeStamp();
|
|
162
|
-
return `doctor-results-${timestamp}.tar`;
|
|
163
|
-
}
|
|
164
|
-
|
|
165
|
-
// TODO: move to utils
|
|
166
|
-
private _getTimeStamp() {
|
|
167
|
-
const d = new Date();
|
|
168
|
-
const timestamp = d.getTime();
|
|
169
|
-
return timestamp;
|
|
170
|
-
}
|
|
171
|
-
|
|
172
|
-
private async _generateExamineResultsTarFile(
|
|
173
|
-
examineResults: ExamineResult[],
|
|
174
|
-
envMeta: DoctorMetaData,
|
|
175
|
-
tarFilePath: string,
|
|
176
|
-
options: DoctorOptions
|
|
177
|
-
): Promise<Stream.Readable> {
|
|
178
|
-
const { archiveWorkspace, includeNodeModules, includePublic, excludeLocalScope } = options;
|
|
179
|
-
const debugLog = await this._getDebugLogAsBuffer();
|
|
180
|
-
const consumerInfo = await this._getWorkspaceInfo();
|
|
181
|
-
let bitmap;
|
|
182
|
-
if (consumerInfo && consumerInfo.path) {
|
|
183
|
-
bitmap = this._getBitMap(consumerInfo.path);
|
|
184
|
-
}
|
|
185
|
-
|
|
186
|
-
const packExamineResults = async (pack) => {
|
|
187
|
-
pack.entry({ name: 'env-meta.json' }, JSON.stringify(envMeta, null, 2));
|
|
188
|
-
pack.entry({ name: 'doc-results.json' }, JSON.stringify(examineResults, null, 2));
|
|
189
|
-
if (debugLog) {
|
|
190
|
-
pack.entry({ name: 'debug.log' }, debugLog);
|
|
191
|
-
}
|
|
192
|
-
if (!archiveWorkspace && bitmap) {
|
|
193
|
-
pack.entry({ name: '.bitmap' }, bitmap);
|
|
194
|
-
}
|
|
195
|
-
if (consumerInfo && consumerInfo.hasWorkspaceConfig) {
|
|
196
|
-
// TODO: support new config as well
|
|
197
|
-
const scopePath = findScopePath(consumerInfo.path);
|
|
198
|
-
const config = scopePath ? await LegacyWorkspaceConfig.loadIfExist(consumerInfo.path, scopePath) : undefined;
|
|
199
|
-
const legacyPlainConfig = config?._legacyPlainObject();
|
|
200
|
-
if (legacyPlainConfig) {
|
|
201
|
-
pack.entry({ name: 'config.json' }, JSON.stringify(legacyPlainConfig, null, 4));
|
|
202
|
-
}
|
|
203
|
-
}
|
|
204
|
-
|
|
205
|
-
pack.finalize();
|
|
206
|
-
|
|
207
|
-
return pack;
|
|
208
|
-
};
|
|
209
|
-
|
|
210
|
-
if (!archiveWorkspace) {
|
|
211
|
-
const pack = tar.pack(); // pack is a streams2 stream
|
|
212
|
-
return packExamineResults(pack);
|
|
213
|
-
}
|
|
214
|
-
|
|
215
|
-
const ignore = (fileName: string) => {
|
|
216
|
-
if (fileName === tarFilePath) return true;
|
|
217
|
-
if (fileName === '.DS_Store') return true;
|
|
218
|
-
if (
|
|
219
|
-
!includeNodeModules &&
|
|
220
|
-
(fileName.startsWith(`node_modules${path.sep}`) || fileName.includes(`${path.sep}node_modules${path.sep}`))
|
|
221
|
-
)
|
|
222
|
-
return true;
|
|
223
|
-
if (
|
|
224
|
-
!includePublic &&
|
|
225
|
-
(fileName.startsWith(`public${path.sep}`) || fileName.includes(`${path.sep}public${path.sep}`))
|
|
226
|
-
)
|
|
227
|
-
return true;
|
|
228
|
-
const isGit = fileName.startsWith(`.git${path.sep}`);
|
|
229
|
-
const isLocalScope =
|
|
230
|
-
fileName.startsWith(`.bit${path.sep}`) || fileName.startsWith(`.git${path.sep}bit${path.sep}`);
|
|
231
|
-
if (excludeLocalScope && isLocalScope) return true;
|
|
232
|
-
if (isGit && !isLocalScope) return true;
|
|
233
|
-
return false;
|
|
234
|
-
};
|
|
235
|
-
|
|
236
|
-
const myPack = tarFS.pack('.', {
|
|
237
|
-
ignore,
|
|
238
|
-
finalize: false,
|
|
239
|
-
finish: packExamineResults,
|
|
240
|
-
});
|
|
241
|
-
|
|
242
|
-
return myPack;
|
|
243
|
-
}
|
|
244
|
-
|
|
245
|
-
private async _getEnvMeta(): Promise<DoctorMetaData> {
|
|
246
|
-
const env = {
|
|
247
|
-
nodeVersion: process.version,
|
|
248
|
-
runningTimestamp: runningTimeStamp || this._getTimeStamp(),
|
|
249
|
-
platform: os.platform(),
|
|
250
|
-
bitVersion: getBitVersion(),
|
|
251
|
-
npmVersion: await getNpmVersion(),
|
|
252
|
-
yarnVersion: await getYarnVersion(),
|
|
253
|
-
userDetails: this._getUserDetails(),
|
|
254
|
-
};
|
|
255
|
-
|
|
256
|
-
// @ts-ignore AUTO-ADDED-AFTER-MIGRATION-PLEASE-FIX!
|
|
257
|
-
return env;
|
|
258
|
-
}
|
|
259
|
-
|
|
260
|
-
private _getUserDetails(): string {
|
|
261
|
-
const name = globalConfig.getSync(CFG_USER_NAME_KEY) || '';
|
|
262
|
-
const email = globalConfig.getSync(CFG_USER_EMAIL_KEY) || '';
|
|
263
|
-
return `${name}<${email}>`;
|
|
264
|
-
}
|
|
265
|
-
|
|
266
|
-
private async _getDebugLogAsBuffer(): Promise<Buffer | null | undefined> {
|
|
267
|
-
const exists = await fs.pathExists(DEBUG_LOG);
|
|
268
|
-
if (!exists) return null;
|
|
269
|
-
const log = await fs.readFile(DEBUG_LOG, 'utf-8');
|
|
270
|
-
const logWithoutChalk = removeChalkCharacters(log) as string;
|
|
271
|
-
return Buffer.from(logWithoutChalk);
|
|
272
|
-
}
|
|
273
|
-
|
|
274
|
-
private async _getWorkspaceInfo(): Promise<WorkspaceInfo | null | undefined> {
|
|
275
|
-
const consumerInfo = await getWorkspaceInfo(process.cwd());
|
|
276
|
-
return consumerInfo;
|
|
277
|
-
}
|
|
278
|
-
|
|
279
|
-
private _getBitMap(workspaceDir): Buffer | null | undefined {
|
|
280
|
-
return BitMap.loadRawSync(workspaceDir);
|
|
281
|
-
}
|
|
282
|
-
|
|
283
|
-
static slots = [];
|
|
284
|
-
static dependencies = [CLIAspect, LoggerAspect];
|
|
285
|
-
static runtime = MainRuntime;
|
|
286
|
-
static async provider([cliMain, loggerMain]: [CLIMain, LoggerMain]) {
|
|
287
|
-
const logger = loggerMain.createLogger(DoctorAspect.id);
|
|
288
|
-
const doctor = new DoctorMain(logger);
|
|
289
|
-
cliMain.register(new DoctorCmd(doctor));
|
|
290
|
-
return doctor;
|
|
291
|
-
}
|
|
292
|
-
}
|
|
293
|
-
|
|
294
|
-
DoctorAspect.addRuntime(DoctorMain);
|
|
295
|
-
|
|
296
|
-
export default DoctorMain;
|
package/index.ts
DELETED
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
import { DoctorAspect } from './doctor.aspect';
|
|
2
|
-
|
|
3
|
-
export type { DoctorMain } from './doctor.main.runtime';
|
|
4
|
-
export { DiagnosisNotFound } from './exceptions/diagnosis-not-found';
|
|
5
|
-
export { DIAGNOSIS_NAME_VALIDATE_GIT_EXEC } from './core-diagnoses/validate-git-exec';
|
|
6
|
-
export default DoctorAspect;
|
|
7
|
-
export { DoctorAspect };
|
|
File without changes
|