@simplysm/sd-cli 6.4.5 → 7.0.9
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/.eslintrc.cjs +11 -0
- package/dist/bin/sd-cli.d.ts +1 -0
- package/dist/bin/sd-cli.mjs +86 -0
- package/dist/build-tool/SdCliCacheCompilerHost.d.ts +10 -0
- package/dist/build-tool/SdCliCacheCompilerHost.mjs +44 -0
- package/dist/build-tool/SdCliNgCacheCompilerHost.d.ts +11 -0
- package/dist/build-tool/SdCliNgCacheCompilerHost.mjs +36 -0
- package/dist/build-tool/SdCliPackageLinter.d.ts +8 -0
- package/dist/build-tool/SdCliPackageLinter.mjs +41 -0
- package/dist/builder/SdCliJsLibBuilder.d.ts +14 -0
- package/dist/builder/SdCliJsLibBuilder.mjs +50 -0
- package/dist/builder/SdCliTsLibBuilder.d.ts +27 -0
- package/dist/builder/SdCliTsLibBuilder.mjs +226 -0
- package/dist/commons.d.ts +46 -0
- package/dist/commons.mjs +2 -0
- package/dist/entry-points/SdCliWorkspace.d.ts +18 -0
- package/dist/entry-points/SdCliWorkspace.mjs +193 -0
- package/dist/packages/SdCliPackage.d.ts +19 -0
- package/dist/packages/SdCliPackage.mjs +89 -0
- package/dist/utils/SdCliBuildResultUtil.d.ts +6 -0
- package/dist/utils/SdCliBuildResultUtil.mjs +38 -0
- package/dist/utils/SdCliConfigUtil.d.ts +7 -0
- package/dist/utils/SdCliConfigUtil.mjs +69 -0
- package/lib/ts-node-esm-paths.mjs +15 -0
- package/package.json +27 -59
- package/src/bin/sd-cli.ts +86 -214
- package/src/build-tool/SdCliCacheCompilerHost.ts +71 -0
- package/src/build-tool/SdCliNgCacheCompilerHost.ts +50 -0
- package/src/build-tool/SdCliPackageLinter.ts +54 -0
- package/src/builder/SdCliJsLibBuilder.ts +66 -0
- package/src/builder/SdCliTsLibBuilder.ts +335 -0
- package/src/commons.ts +17 -122
- package/src/entry-points/SdCliWorkspace.ts +229 -0
- package/src/packages/SdCliPackage.ts +111 -0
- package/src/utils/SdCliBuildResultUtil.ts +43 -0
- package/src/utils/SdCliConfigUtil.ts +94 -0
- package/tsconfig-build.json +9 -0
- package/tsconfig.json +7 -18
- package/.eslintrc.js +0 -19
- package/dist-node/bin/sd-cli.js +0 -197
- package/dist-node/bin/sd-cli.js.map +0 -1
- package/dist-node/build-tools/SdCliCordova.js +0 -144
- package/dist-node/build-tools/SdCliCordova.js.map +0 -1
- package/dist-node/build-tools/SdCliIndexFileGenerator.js +0 -51
- package/dist-node/build-tools/SdCliIndexFileGenerator.js.map +0 -1
- package/dist-node/build-tools/SdCliNgModuleFilesGenerator.js +0 -675
- package/dist-node/build-tools/SdCliNgModuleFilesGenerator.js.map +0 -1
- package/dist-node/build-tools/metadata/SdAotMetadataReader.js +0 -274
- package/dist-node/build-tools/metadata/SdAotMetadataReader.js.map +0 -1
- package/dist-node/build-tools/metadata/SdIvyMetadataReader.js +0 -124
- package/dist-node/build-tools/metadata/SdIvyMetadataReader.js.map +0 -1
- package/dist-node/build-tools/metadata/SdMetadataError.js +0 -13
- package/dist-node/build-tools/metadata/SdMetadataError.js.map +0 -1
- package/dist-node/build-tools/metadata/SdMyMetadataReader.js +0 -321
- package/dist-node/build-tools/metadata/SdMyMetadataReader.js.map +0 -1
- package/dist-node/builders/SdCliJavascriptLinter.js +0 -65
- package/dist-node/builders/SdCliJavascriptLinter.js.map +0 -1
- package/dist-node/builders/SdCliNgClientBuilder.js +0 -636
- package/dist-node/builders/SdCliNgClientBuilder.js.map +0 -1
- package/dist-node/builders/SdCliNgLibraryBuilder.js +0 -217
- package/dist-node/builders/SdCliNgLibraryBuilder.js.map +0 -1
- package/dist-node/builders/SdCliPublisher.js +0 -129
- package/dist-node/builders/SdCliPublisher.js.map +0 -1
- package/dist-node/builders/SdCliServerBuilder.js +0 -452
- package/dist-node/builders/SdCliServerBuilder.js.map +0 -1
- package/dist-node/builders/SdCliTypescriptBuilder.js +0 -347
- package/dist-node/builders/SdCliTypescriptBuilder.js.map +0 -1
- package/dist-node/commons.js +0 -3
- package/dist-node/commons.js.map +0 -1
- package/dist-node/entry-points/SdCliLocalUpdater.js +0 -88
- package/dist-node/entry-points/SdCliLocalUpdater.js.map +0 -1
- package/dist-node/entry-points/SdCliPrepare.js +0 -56
- package/dist-node/entry-points/SdCliPrepare.js.map +0 -1
- package/dist-node/entry-points/SdCliProject.js +0 -302
- package/dist-node/entry-points/SdCliProject.js.map +0 -1
- package/dist-node/packages/SdCliClientPackage.js +0 -91
- package/dist-node/packages/SdCliClientPackage.js.map +0 -1
- package/dist-node/packages/SdCliLibraryPackage.js +0 -99
- package/dist-node/packages/SdCliLibraryPackage.js.map +0 -1
- package/dist-node/packages/SdCliPackageBase.js +0 -33
- package/dist-node/packages/SdCliPackageBase.js.map +0 -1
- package/dist-node/packages/SdCliServerPackage.js +0 -69
- package/dist-node/packages/SdCliServerPackage.js.map +0 -1
- package/dist-node/packages/SdCliUnknownPackage.js +0 -15
- package/dist-node/packages/SdCliUnknownPackage.js.map +0 -1
- package/dist-node/utils/SdCliFileCrypto.js +0 -76
- package/dist-node/utils/SdCliFileCrypto.js.map +0 -1
- package/dist-node/utils/SdProjectConfigUtil.js +0 -62
- package/dist-node/utils/SdProjectConfigUtil.js.map +0 -1
- package/dist-node/utils/SdTsDiagnosticUtil.js +0 -45
- package/dist-node/utils/SdTsDiagnosticUtil.js.map +0 -1
- package/dist-node/utils/SdWebpackUtil.js +0 -63
- package/dist-node/utils/SdWebpackUtil.js.map +0 -1
- package/dist-node/workers/client-ng-gen-worker.js +0 -57
- package/dist-node/workers/client-ng-gen-worker.js.map +0 -1
- package/dist-node/workers/lib-build-worker.js +0 -88
- package/dist-node/workers/lib-build-worker.js.map +0 -1
- package/dist-types/bin/sd-cli.d.ts +0 -3
- package/dist-types/bin/sd-cli.d.ts.map +0 -1
- package/dist-types/build-tools/SdCliCordova.d.ts +0 -15
- package/dist-types/build-tools/SdCliCordova.d.ts.map +0 -1
- package/dist-types/build-tools/SdCliIndexFileGenerator.d.ts +0 -13
- package/dist-types/build-tools/SdCliIndexFileGenerator.d.ts.map +0 -1
- package/dist-types/build-tools/SdCliNgModuleFilesGenerator.d.ts +0 -43
- package/dist-types/build-tools/SdCliNgModuleFilesGenerator.d.ts.map +0 -1
- package/dist-types/build-tools/metadata/SdAotMetadataReader.d.ts +0 -58
- package/dist-types/build-tools/metadata/SdAotMetadataReader.d.ts.map +0 -1
- package/dist-types/build-tools/metadata/SdIvyMetadataReader.d.ts +0 -43
- package/dist-types/build-tools/metadata/SdIvyMetadataReader.d.ts.map +0 -1
- package/dist-types/build-tools/metadata/SdMetadataError.d.ts +0 -7
- package/dist-types/build-tools/metadata/SdMetadataError.d.ts.map +0 -1
- package/dist-types/build-tools/metadata/SdMyMetadataReader.d.ts +0 -59
- package/dist-types/build-tools/metadata/SdMyMetadataReader.d.ts.map +0 -1
- package/dist-types/builders/SdCliJavascriptLinter.d.ts +0 -14
- package/dist-types/builders/SdCliJavascriptLinter.d.ts.map +0 -1
- package/dist-types/builders/SdCliNgClientBuilder.d.ts +0 -29
- package/dist-types/builders/SdCliNgClientBuilder.d.ts.map +0 -1
- package/dist-types/builders/SdCliNgLibraryBuilder.d.ts +0 -30
- package/dist-types/builders/SdCliNgLibraryBuilder.d.ts.map +0 -1
- package/dist-types/builders/SdCliPublisher.d.ts +0 -9
- package/dist-types/builders/SdCliPublisher.d.ts.map +0 -1
- package/dist-types/builders/SdCliServerBuilder.d.ts +0 -31
- package/dist-types/builders/SdCliServerBuilder.d.ts.map +0 -1
- package/dist-types/builders/SdCliTypescriptBuilder.d.ts +0 -56
- package/dist-types/builders/SdCliTypescriptBuilder.d.ts.map +0 -1
- package/dist-types/commons.d.ts +0 -134
- package/dist-types/commons.d.ts.map +0 -1
- package/dist-types/entry-points/SdCliLocalUpdater.d.ts +0 -12
- package/dist-types/entry-points/SdCliLocalUpdater.d.ts.map +0 -1
- package/dist-types/entry-points/SdCliPrepare.d.ts +0 -6
- package/dist-types/entry-points/SdCliPrepare.d.ts.map +0 -1
- package/dist-types/entry-points/SdCliProject.d.ts +0 -32
- package/dist-types/entry-points/SdCliProject.d.ts.map +0 -1
- package/dist-types/packages/SdCliClientPackage.d.ts +0 -17
- package/dist-types/packages/SdCliClientPackage.d.ts.map +0 -1
- package/dist-types/packages/SdCliLibraryPackage.d.ts +0 -20
- package/dist-types/packages/SdCliLibraryPackage.d.ts.map +0 -1
- package/dist-types/packages/SdCliPackageBase.d.ts +0 -11
- package/dist-types/packages/SdCliPackageBase.d.ts.map +0 -1
- package/dist-types/packages/SdCliServerPackage.d.ts +0 -16
- package/dist-types/packages/SdCliServerPackage.d.ts.map +0 -1
- package/dist-types/packages/SdCliUnknownPackage.d.ts +0 -9
- package/dist-types/packages/SdCliUnknownPackage.d.ts.map +0 -1
- package/dist-types/utils/SdCliFileCrypto.d.ts +0 -8
- package/dist-types/utils/SdCliFileCrypto.d.ts.map +0 -1
- package/dist-types/utils/SdProjectConfigUtil.d.ts +0 -7
- package/dist-types/utils/SdProjectConfigUtil.d.ts.map +0 -1
- package/dist-types/utils/SdTsDiagnosticUtil.d.ts +0 -6
- package/dist-types/utils/SdTsDiagnosticUtil.d.ts.map +0 -1
- package/dist-types/utils/SdWebpackUtil.d.ts +0 -7
- package/dist-types/utils/SdWebpackUtil.d.ts.map +0 -1
- package/dist-types/workers/client-ng-gen-worker.d.ts +0 -2
- package/dist-types/workers/client-ng-gen-worker.d.ts.map +0 -1
- package/dist-types/workers/lib-build-worker.d.ts +0 -2
- package/dist-types/workers/lib-build-worker.d.ts.map +0 -1
- package/schema/schema.json +0 -447
- package/sd-tsconfig.node.json +0 -18
- package/src/build-tools/SdCliCordova.ts +0 -240
- package/src/build-tools/SdCliIndexFileGenerator.ts +0 -61
- package/src/build-tools/SdCliNgModuleFilesGenerator.ts +0 -894
- package/src/build-tools/metadata/SdAotMetadataReader.ts +0 -374
- package/src/build-tools/metadata/SdIvyMetadataReader.ts +0 -183
- package/src/build-tools/metadata/SdMetadataError.ts +0 -7
- package/src/build-tools/metadata/SdMyMetadataReader.ts +0 -407
- package/src/builders/SdCliJavascriptLinter.ts +0 -81
- package/src/builders/SdCliNgClientBuilder.ts +0 -793
- package/src/builders/SdCliNgLibraryBuilder.ts +0 -301
- package/src/builders/SdCliPublisher.ts +0 -144
- package/src/builders/SdCliServerBuilder.ts +0 -555
- package/src/builders/SdCliTypescriptBuilder.ts +0 -552
- package/src/entry-points/SdCliLocalUpdater.ts +0 -114
- package/src/entry-points/SdCliPrepare.ts +0 -104
- package/src/entry-points/SdCliProject.ts +0 -405
- package/src/packages/SdCliClientPackage.ts +0 -111
- package/src/packages/SdCliLibraryPackage.ts +0 -118
- package/src/packages/SdCliPackageBase.ts +0 -34
- package/src/packages/SdCliServerPackage.ts +0 -85
- package/src/packages/SdCliUnknownPackage.ts +0 -14
- package/src/utils/SdCliFileCrypto.ts +0 -87
- package/src/utils/SdCliUtils.ts +0 -56
- package/src/utils/SdProjectConfigUtil.ts +0 -145
- package/src/utils/SdTsDiagnosticUtil.ts +0 -46
- package/src/utils/SdWebpackUtil.ts +0 -71
- package/src/workers/client-ng-gen-worker.ts +0 -63
- package/src/workers/lib-build-worker.ts +0 -97
|
@@ -0,0 +1,335 @@
|
|
|
1
|
+
import { ISdCliPackageBuildResult } from "../commons";
|
|
2
|
+
import { EventEmitter } from "events";
|
|
3
|
+
import ts from "typescript";
|
|
4
|
+
import { FsUtil, Logger, PathUtil, SdFsWatcher } from "@simplysm/sd-core-node";
|
|
5
|
+
import * as path from "path";
|
|
6
|
+
import { createHash } from "crypto";
|
|
7
|
+
import { SdCliBuildResultUtil } from "../utils/SdCliBuildResultUtil";
|
|
8
|
+
import { NgtscProgram } from "@angular/compiler-cli";
|
|
9
|
+
import sass from "sass";
|
|
10
|
+
import { SdCliPackageLinter } from "../build-tool/SdCliPackageLinter";
|
|
11
|
+
import { SdCliCacheCompilerHost } from "../build-tool/SdCliCacheCompilerHost";
|
|
12
|
+
import { SdCliNgCacheCompilerHost } from "../build-tool/SdCliNgCacheCompilerHost";
|
|
13
|
+
import { NgCompiler } from "@angular/compiler-cli/src/ngtsc/core";
|
|
14
|
+
|
|
15
|
+
export class SdCliTsLibBuilder extends EventEmitter {
|
|
16
|
+
private readonly _logger = Logger.get(["simplysm", "sd-cli", this.constructor.name]);
|
|
17
|
+
|
|
18
|
+
private _moduleResolutionCache?: ts.ModuleResolutionCache;
|
|
19
|
+
|
|
20
|
+
private readonly _linter: SdCliPackageLinter;
|
|
21
|
+
|
|
22
|
+
private readonly _fileCache = new Map<string, IFileCache>();
|
|
23
|
+
private readonly _writeFileCache = new Map<string, string>();
|
|
24
|
+
|
|
25
|
+
private _program?: ts.Program;
|
|
26
|
+
private _ngProgram?: NgtscProgram;
|
|
27
|
+
private _builder?: ts.EmitAndSemanticDiagnosticsBuilderProgram;
|
|
28
|
+
|
|
29
|
+
public constructor(private readonly _rootPath,
|
|
30
|
+
private readonly _isAngular: boolean) {
|
|
31
|
+
super();
|
|
32
|
+
this._linter = new SdCliPackageLinter(this._rootPath);
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
public override on(event: "change", listener: () => void): this;
|
|
36
|
+
public override on(event: "complete", listener: (results: ISdCliPackageBuildResult[]) => void): this;
|
|
37
|
+
public override on(event: string | symbol, listener: (...args: any[]) => void): this {
|
|
38
|
+
return super.on(event, listener);
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
public async watchAsync(): Promise<void> {
|
|
42
|
+
this.emit("change");
|
|
43
|
+
|
|
44
|
+
// TSCONFIG 읽기
|
|
45
|
+
const parsedTsconfig = await this._getParsedTsconfigAsync();
|
|
46
|
+
|
|
47
|
+
// DIST 비우기
|
|
48
|
+
await FsUtil.removeAsync(parsedTsconfig.options.outDir!);
|
|
49
|
+
|
|
50
|
+
// 프로그램 리로드
|
|
51
|
+
const buildPack = this._createSdBuildPack(parsedTsconfig);
|
|
52
|
+
|
|
53
|
+
const relatedPaths = await this.getAllRelatedPathsAsync();
|
|
54
|
+
const watcher = SdFsWatcher.watch(relatedPaths);
|
|
55
|
+
watcher.onChange(async (changeInfos) => {
|
|
56
|
+
const changeFilePaths = changeInfos.filter((item) => ["add", "change", "unlink"].includes(item.event)).map((item) => item.path);
|
|
57
|
+
if (changeFilePaths.length === 0) return;
|
|
58
|
+
|
|
59
|
+
this._logger.debug("파일 변경 감지", changeInfos);
|
|
60
|
+
this.emit("change");
|
|
61
|
+
|
|
62
|
+
// 캐쉬 삭제
|
|
63
|
+
for (const changeFilePath of changeFilePaths) {
|
|
64
|
+
this._fileCache.delete(PathUtil.posix(changeFilePath));
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
// 빌드
|
|
68
|
+
const watchBuildPack = this._createSdBuildPack(parsedTsconfig);
|
|
69
|
+
|
|
70
|
+
// 린트
|
|
71
|
+
const watchBuildResults = await this._runBuilderAsync(watchBuildPack.builder, watchBuildPack.ngCompiler);
|
|
72
|
+
watchBuildResults.push(...await this._linter.lintAsync([
|
|
73
|
+
...watchBuildPack.affectedSourceFiles.map((item) => item.fileName),
|
|
74
|
+
...changeFilePaths
|
|
75
|
+
], watchBuildPack.program));
|
|
76
|
+
|
|
77
|
+
const watchRelatedPaths = await this.getAllRelatedPathsAsync();
|
|
78
|
+
watcher.add(watchRelatedPaths);
|
|
79
|
+
|
|
80
|
+
this.emit("complete", watchBuildResults);
|
|
81
|
+
});
|
|
82
|
+
|
|
83
|
+
// 빌드
|
|
84
|
+
const buildResults = await this._runBuilderAsync(buildPack.builder, buildPack.ngCompiler);
|
|
85
|
+
|
|
86
|
+
// 린트
|
|
87
|
+
buildResults.push(...await this._linter.lintAsync(relatedPaths, buildPack.program));
|
|
88
|
+
|
|
89
|
+
this.emit("complete", buildResults);
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
public async buildAsync(): Promise<ISdCliPackageBuildResult[]> {
|
|
93
|
+
// TSCONFIG 읽기
|
|
94
|
+
const parsedTsconfig = await this._getParsedTsconfigAsync();
|
|
95
|
+
|
|
96
|
+
// DIST 비우기
|
|
97
|
+
await FsUtil.removeAsync(parsedTsconfig.options.outDir!);
|
|
98
|
+
|
|
99
|
+
// 프로그램 리로드
|
|
100
|
+
const buildPack = this._createSdBuildPack(parsedTsconfig);
|
|
101
|
+
|
|
102
|
+
// 빌드
|
|
103
|
+
const buildResults = await this._runBuilderAsync(buildPack.builder, buildPack.ngCompiler);
|
|
104
|
+
|
|
105
|
+
// 린트
|
|
106
|
+
const relatedPaths = await this.getAllRelatedPathsAsync();
|
|
107
|
+
buildResults.push(...await this._linter.lintAsync(relatedPaths, buildPack.program));
|
|
108
|
+
|
|
109
|
+
return buildResults;
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
private async getAllRelatedPathsAsync(): Promise<string[]> {
|
|
113
|
+
const fileCachePaths = Array.from(this._fileCache.keys());
|
|
114
|
+
const mySourceGlobPath = path.resolve(this._rootPath, "**", "+(*.js|*.cjs|*.mjs|*.ts)");
|
|
115
|
+
const mySourceFilePaths = await FsUtil.globAsync(mySourceGlobPath, {
|
|
116
|
+
ignore: [
|
|
117
|
+
"**/node_modules/**",
|
|
118
|
+
"**/dist/**",
|
|
119
|
+
"**/.*/**"
|
|
120
|
+
]
|
|
121
|
+
});
|
|
122
|
+
|
|
123
|
+
return [...fileCachePaths, ...mySourceFilePaths, path.resolve(this._rootPath, ".eslintrc.cjs")].distinct();
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
private async _runBuilderAsync(builder: ts.EmitAndSemanticDiagnosticsBuilderProgram, ngCompiler?: NgCompiler): Promise<ISdCliPackageBuildResult[]> {
|
|
127
|
+
try {
|
|
128
|
+
const results: ISdCliPackageBuildResult[] = [];
|
|
129
|
+
|
|
130
|
+
const diagnostics: ts.Diagnostic[] = [];
|
|
131
|
+
|
|
132
|
+
if (ngCompiler) {
|
|
133
|
+
diagnostics.push(...ngCompiler.getOptionDiagnostics());
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
diagnostics.push(
|
|
137
|
+
...builder.getOptionsDiagnostics(),
|
|
138
|
+
...builder.getGlobalDiagnostics()
|
|
139
|
+
);
|
|
140
|
+
|
|
141
|
+
if (ngCompiler) {
|
|
142
|
+
await ngCompiler.analyzeAsync();
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
for (const sourceFile of builder.getSourceFiles()) {
|
|
146
|
+
if (ngCompiler?.ignoreForDiagnostics.has(sourceFile)) continue;
|
|
147
|
+
|
|
148
|
+
diagnostics.push(
|
|
149
|
+
...builder.getSyntacticDiagnostics(sourceFile),
|
|
150
|
+
...builder.getSemanticDiagnostics(sourceFile)
|
|
151
|
+
);
|
|
152
|
+
|
|
153
|
+
if (
|
|
154
|
+
ngCompiler &&
|
|
155
|
+
!sourceFile.isDeclarationFile &&
|
|
156
|
+
!ngCompiler.ignoreForEmit.has(sourceFile) &&
|
|
157
|
+
!ngCompiler.incrementalDriver.safeToSkipEmit(sourceFile)
|
|
158
|
+
) {
|
|
159
|
+
diagnostics.push(
|
|
160
|
+
...ngCompiler.getDiagnosticsForFile(sourceFile, 1)
|
|
161
|
+
);
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
results.push(
|
|
166
|
+
...diagnostics
|
|
167
|
+
.filter((item) => [ts.DiagnosticCategory.Error, ts.DiagnosticCategory.Warning].includes(item.category))
|
|
168
|
+
.map((item) => SdCliBuildResultUtil.convertDiagsToResult(item))
|
|
169
|
+
.filterExists()
|
|
170
|
+
);
|
|
171
|
+
|
|
172
|
+
if (results.some((item) => item.severity === "error")) {
|
|
173
|
+
return results;
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
const transformers = ngCompiler?.prepareEmit().transformers;
|
|
177
|
+
for (const sourceFile of builder.getSourceFiles()) {
|
|
178
|
+
if (ngCompiler?.ignoreForEmit.has(sourceFile)) continue;
|
|
179
|
+
builder.emit(sourceFile, undefined, undefined, undefined, transformers);
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
return results;
|
|
183
|
+
}
|
|
184
|
+
catch (err) {
|
|
185
|
+
if (err instanceof sass.Exception) {
|
|
186
|
+
const matches = err.sassStack.match(/^(.*\.sd\.scss) ([0-9]*):([0-9]*)/)!;
|
|
187
|
+
const filePath = path.resolve(matches[1].replace(/\.sd\.scss/, "").replace(/^\.:/, item => item.toUpperCase()));
|
|
188
|
+
const scssLine = matches[2];
|
|
189
|
+
const scssChar = matches[3];
|
|
190
|
+
const message = err.sassMessage;
|
|
191
|
+
|
|
192
|
+
return [{
|
|
193
|
+
filePath,
|
|
194
|
+
line: undefined,
|
|
195
|
+
char: undefined,
|
|
196
|
+
code: undefined,
|
|
197
|
+
severity: "error",
|
|
198
|
+
message: `스타일(${scssLine}:${scssChar}): ${message}`
|
|
199
|
+
}];
|
|
200
|
+
}
|
|
201
|
+
|
|
202
|
+
return [{
|
|
203
|
+
filePath: undefined,
|
|
204
|
+
line: undefined,
|
|
205
|
+
char: undefined,
|
|
206
|
+
code: undefined,
|
|
207
|
+
severity: "error",
|
|
208
|
+
message: err.message
|
|
209
|
+
}];
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
|
|
213
|
+
private _createSdBuildPack(parsedTsconfig: ts.ParsedCommandLine): ISdBuildPack {
|
|
214
|
+
const compilerHost = this._createCacheCompilerHost(parsedTsconfig);
|
|
215
|
+
const { program, ngCompiler } = this._createProgram(parsedTsconfig, compilerHost);
|
|
216
|
+
|
|
217
|
+
this._builder = ts.createEmitAndSemanticDiagnosticsBuilderProgram(
|
|
218
|
+
program,
|
|
219
|
+
compilerHost,
|
|
220
|
+
this._builder
|
|
221
|
+
);
|
|
222
|
+
|
|
223
|
+
const affectedSourceFileSet: Set<ts.SourceFile> = new Set<ts.SourceFile>();
|
|
224
|
+
while (true) {
|
|
225
|
+
const result = this._builder.getSemanticDiagnosticsOfNextAffectedFile(undefined, (sourceFile) => {
|
|
226
|
+
if (ngCompiler && ngCompiler.ignoreForDiagnostics.has(sourceFile) && sourceFile.fileName.endsWith(".ngtypecheck.ts")) {
|
|
227
|
+
const orgFileName = sourceFile.fileName.slice(0, -15) + ".ts";
|
|
228
|
+
const orgSourceFile = this._builder!.getSourceFile(orgFileName);
|
|
229
|
+
if (orgSourceFile) {
|
|
230
|
+
affectedSourceFileSet.add(orgSourceFile);
|
|
231
|
+
}
|
|
232
|
+
|
|
233
|
+
return true;
|
|
234
|
+
}
|
|
235
|
+
|
|
236
|
+
return false;
|
|
237
|
+
});
|
|
238
|
+
if (!result) break;
|
|
239
|
+
|
|
240
|
+
affectedSourceFileSet.add(result.affected as ts.SourceFile);
|
|
241
|
+
}
|
|
242
|
+
|
|
243
|
+
return {
|
|
244
|
+
program,
|
|
245
|
+
ngCompiler,
|
|
246
|
+
builder: this._builder,
|
|
247
|
+
affectedSourceFiles: Array.from(affectedSourceFileSet.values())
|
|
248
|
+
};
|
|
249
|
+
}
|
|
250
|
+
|
|
251
|
+
private _createProgram(parsedTsconfig: ts.ParsedCommandLine, compilerHost: ts.CompilerHost): { program: ts.Program; ngCompiler?: NgCompiler } {
|
|
252
|
+
if (this._isAngular) {
|
|
253
|
+
this._ngProgram = new NgtscProgram(
|
|
254
|
+
parsedTsconfig.fileNames,
|
|
255
|
+
parsedTsconfig.options,
|
|
256
|
+
compilerHost,
|
|
257
|
+
this._ngProgram
|
|
258
|
+
);
|
|
259
|
+
this._program = this._ngProgram.getTsProgram();
|
|
260
|
+
|
|
261
|
+
this._configProgramSourceFileVersions(this._program);
|
|
262
|
+
return {
|
|
263
|
+
program: this._program,
|
|
264
|
+
ngCompiler: this._ngProgram.compiler
|
|
265
|
+
};
|
|
266
|
+
}
|
|
267
|
+
else {
|
|
268
|
+
this._program = ts.createProgram(
|
|
269
|
+
parsedTsconfig.fileNames,
|
|
270
|
+
parsedTsconfig.options,
|
|
271
|
+
compilerHost,
|
|
272
|
+
this._program
|
|
273
|
+
);
|
|
274
|
+
|
|
275
|
+
this._configProgramSourceFileVersions(this._program);
|
|
276
|
+
|
|
277
|
+
return { program: this._program };
|
|
278
|
+
}
|
|
279
|
+
}
|
|
280
|
+
|
|
281
|
+
private _configProgramSourceFileVersions(program: ts.Program): void {
|
|
282
|
+
const baseGetSourceFiles = program.getSourceFiles;
|
|
283
|
+
program.getSourceFiles = function (...parameters) {
|
|
284
|
+
const files: readonly (ts.SourceFile & { version?: string })[] = baseGetSourceFiles(...parameters);
|
|
285
|
+
|
|
286
|
+
for (const file of files) {
|
|
287
|
+
if (file.version === undefined) {
|
|
288
|
+
file.version = createHash("sha256").update(file.text).digest("hex");
|
|
289
|
+
}
|
|
290
|
+
}
|
|
291
|
+
|
|
292
|
+
return files;
|
|
293
|
+
};
|
|
294
|
+
}
|
|
295
|
+
|
|
296
|
+
private _createCacheCompilerHost(parsedTsconfig: ts.ParsedCommandLine): ts.CompilerHost {
|
|
297
|
+
if (!this._moduleResolutionCache) {
|
|
298
|
+
this._moduleResolutionCache = ts.createModuleResolutionCache(this._rootPath, (s) => s, parsedTsconfig.options);
|
|
299
|
+
}
|
|
300
|
+
|
|
301
|
+
const compilerHost = SdCliCacheCompilerHost.create(
|
|
302
|
+
parsedTsconfig,
|
|
303
|
+
this._moduleResolutionCache,
|
|
304
|
+
this._fileCache,
|
|
305
|
+
this._writeFileCache
|
|
306
|
+
);
|
|
307
|
+
|
|
308
|
+
if (this._isAngular) {
|
|
309
|
+
return SdCliNgCacheCompilerHost.wrap(compilerHost, this._fileCache);
|
|
310
|
+
}
|
|
311
|
+
else {
|
|
312
|
+
return compilerHost;
|
|
313
|
+
}
|
|
314
|
+
}
|
|
315
|
+
|
|
316
|
+
private async _getParsedTsconfigAsync(): Promise<ts.ParsedCommandLine> {
|
|
317
|
+
const tsconfigFilePath = path.resolve(this._rootPath, "tsconfig-build.json");
|
|
318
|
+
const tsconfig = await FsUtil.readJsonAsync(tsconfigFilePath);
|
|
319
|
+
return ts.parseJsonConfigFileContent(tsconfig, ts.sys, this._rootPath);
|
|
320
|
+
}
|
|
321
|
+
}
|
|
322
|
+
|
|
323
|
+
interface IFileCache {
|
|
324
|
+
exists?: boolean;
|
|
325
|
+
sourceFile?: ts.SourceFile;
|
|
326
|
+
content?: string;
|
|
327
|
+
styleContent?: string;
|
|
328
|
+
}
|
|
329
|
+
|
|
330
|
+
interface ISdBuildPack {
|
|
331
|
+
program: ts.Program;
|
|
332
|
+
ngCompiler?: NgCompiler;
|
|
333
|
+
builder: ts.EmitAndSemanticDiagnosticsBuilderProgram;
|
|
334
|
+
affectedSourceFiles: ts.SourceFile[];
|
|
335
|
+
}
|
package/src/commons.ts
CHANGED
|
@@ -1,49 +1,3 @@
|
|
|
1
|
-
export interface ISdProjectConfig {
|
|
2
|
-
packages: Record<string, TSdPackageConfig | undefined>;
|
|
3
|
-
localUpdates?: Record<string, string>;
|
|
4
|
-
}
|
|
5
|
-
|
|
6
|
-
export type TSdPackageConfig =
|
|
7
|
-
ISdLibraryPackageConfig |
|
|
8
|
-
ISdClientPackageConfig |
|
|
9
|
-
ISdServerPackageConfig |
|
|
10
|
-
ISdNonePackageConfig;
|
|
11
|
-
|
|
12
|
-
export interface ISdLibraryPackageConfig {
|
|
13
|
-
type: "library";
|
|
14
|
-
targets?: ("node" | "browser" | "angular")[];
|
|
15
|
-
autoIndex?: ISdAutoIndexConfig | boolean;
|
|
16
|
-
publish?: "npm";
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
export interface ISdClientPackageConfig {
|
|
20
|
-
type: "client";
|
|
21
|
-
platforms?: TSdClientPlatformConfig[];
|
|
22
|
-
env?: Record<string, string>;
|
|
23
|
-
server?: string;
|
|
24
|
-
resolveFallback?: Record<string, string>;
|
|
25
|
-
configs?: Record<string, any>;
|
|
26
|
-
publish?: TSdPublishConfig;
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
export interface ISdServerPackageConfig {
|
|
30
|
-
type: "server";
|
|
31
|
-
env?: Record<string, string>;
|
|
32
|
-
externalDependencies?: string[];
|
|
33
|
-
configs?: Record<string, any>;
|
|
34
|
-
pm2?: Record<string, any> | boolean;
|
|
35
|
-
iis?: boolean | { serverExeFilePath?: string };
|
|
36
|
-
publish?: TSdPublishConfig;
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
export interface ISdNonePackageConfig {
|
|
40
|
-
type: "none";
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
export interface ISdAutoIndexConfig {
|
|
44
|
-
polyfills?: string[];
|
|
45
|
-
}
|
|
46
|
-
|
|
47
1
|
export interface INpmConfig {
|
|
48
2
|
name: string;
|
|
49
3
|
version: string;
|
|
@@ -52,6 +6,9 @@ export interface INpmConfig {
|
|
|
52
6
|
browser?: string;
|
|
53
7
|
module?: string;
|
|
54
8
|
main?: string;
|
|
9
|
+
exports?: Record<string, {
|
|
10
|
+
types?: string;
|
|
11
|
+
}>;
|
|
55
12
|
scripts?: Record<string, string>;
|
|
56
13
|
|
|
57
14
|
dependencies?: Record<string, string>;
|
|
@@ -62,98 +19,36 @@ export interface INpmConfig {
|
|
|
62
19
|
|
|
63
20
|
export interface ITsconfig {
|
|
64
21
|
compilerOptions?: {
|
|
65
|
-
module?: "commonjs" | "es2020";
|
|
66
|
-
target?: "es2015" | "es2020";
|
|
67
|
-
lib?: ("dom" | "es2015" | "es2020")[];
|
|
68
22
|
outDir?: string;
|
|
69
|
-
declarationDir?: string;
|
|
70
|
-
declaration?: boolean;
|
|
71
|
-
declarationMap?: boolean;
|
|
72
23
|
baseUrl?: string;
|
|
73
24
|
paths?: Record<string, string[]>;
|
|
74
|
-
generateTrace?: string;
|
|
75
|
-
};
|
|
76
|
-
angularCompilerOptions?: {
|
|
77
|
-
enableI18nLegacyMessageIdFormat?: boolean;
|
|
78
|
-
strictInjectionParameters?: boolean;
|
|
79
|
-
strictInputAccessModifiers?: boolean;
|
|
80
|
-
strictTemplates?: boolean;
|
|
81
|
-
strictInputTypes?: boolean;
|
|
82
|
-
strictOutputEventTypes?: boolean;
|
|
83
|
-
enableIvy?: boolean;
|
|
84
|
-
compilationMode?: "partial" | "full";
|
|
85
|
-
disableTypeScriptVersionCheck?: boolean;
|
|
86
25
|
};
|
|
87
|
-
files?: string[];
|
|
88
|
-
include?: string[];
|
|
89
26
|
}
|
|
90
27
|
|
|
91
|
-
export interface
|
|
28
|
+
export interface ISdCliPackageBuildResult {
|
|
92
29
|
filePath: string | undefined;
|
|
30
|
+
line: number | undefined;
|
|
31
|
+
char: number | undefined;
|
|
32
|
+
code: string | undefined;
|
|
93
33
|
severity: "error" | "warning";
|
|
94
34
|
message: string;
|
|
95
35
|
}
|
|
96
36
|
|
|
97
|
-
export
|
|
98
|
-
|
|
99
|
-
ISdLocalDirectoryPublishConfig |
|
|
100
|
-
ISdFtpPublishConfig |
|
|
101
|
-
ISdAzureAppServicePublishConfig;
|
|
102
|
-
|
|
103
|
-
export interface ISdSFtpPublishConfig {
|
|
104
|
-
type: "sftp";
|
|
105
|
-
host: string;
|
|
106
|
-
port?: number;
|
|
107
|
-
path: string;
|
|
108
|
-
username: string;
|
|
109
|
-
password: string;
|
|
37
|
+
export interface ISdCliConfig {
|
|
38
|
+
packages: Record<string, TSdCliPackageConfig | undefined>;
|
|
110
39
|
}
|
|
111
40
|
|
|
112
|
-
export
|
|
113
|
-
type: "ftp";
|
|
114
|
-
host: string;
|
|
115
|
-
port?: number;
|
|
116
|
-
path: string;
|
|
117
|
-
username: string;
|
|
118
|
-
password: string;
|
|
119
|
-
secure?: boolean;
|
|
120
|
-
}
|
|
41
|
+
export type TSdCliPackageConfig = ISdCliLibPackageConfig | ISdCliNgLibPackageConfig;
|
|
121
42
|
|
|
122
|
-
export interface
|
|
123
|
-
type: "
|
|
124
|
-
|
|
125
|
-
password: string;
|
|
126
|
-
subscriptionId: string;
|
|
127
|
-
resourceGroupName: string;
|
|
128
|
-
serviceName: string;
|
|
129
|
-
path: string;
|
|
130
|
-
}
|
|
131
|
-
|
|
132
|
-
export interface ISdLocalDirectoryPublishConfig {
|
|
133
|
-
type: "local-directory";
|
|
134
|
-
path: string;
|
|
43
|
+
export interface ISdCliLibPackageConfig {
|
|
44
|
+
type: "library";
|
|
45
|
+
publish?: "npm";
|
|
135
46
|
}
|
|
136
47
|
|
|
137
|
-
export
|
|
138
|
-
|
|
139
|
-
ISdClientCordovaPlatformConfig;
|
|
140
|
-
|
|
141
|
-
export interface ISdClientBrowserPlatformConfig {
|
|
142
|
-
type: "browser";
|
|
48
|
+
export interface ISdCliNgLibPackageConfig {
|
|
49
|
+
type: "angular";
|
|
143
50
|
}
|
|
144
51
|
|
|
145
|
-
export interface
|
|
146
|
-
type: "
|
|
147
|
-
targets: ("android")[];
|
|
148
|
-
appId: string;
|
|
149
|
-
appName: string;
|
|
150
|
-
plugins?: string[];
|
|
151
|
-
icon?: string;
|
|
152
|
-
sign?: {
|
|
153
|
-
keystore: string;
|
|
154
|
-
storePassword: string;
|
|
155
|
-
alias: string;
|
|
156
|
-
password: string;
|
|
157
|
-
keystoreType: string;
|
|
158
|
-
};
|
|
52
|
+
export interface ISdCliServerPackageConfig {
|
|
53
|
+
type: "server";
|
|
159
54
|
}
|