@simplysm/sd-cli 6.4.6 → 7.0.12

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.
Files changed (185) hide show
  1. package/.eslintrc.cjs +11 -0
  2. package/dist/bin/sd-cli.d.ts +1 -0
  3. package/dist/bin/sd-cli.mjs +86 -0
  4. package/dist/build-tool/SdCliCacheCompilerHost.d.ts +10 -0
  5. package/dist/build-tool/SdCliCacheCompilerHost.mjs +44 -0
  6. package/dist/build-tool/SdCliNgCacheCompilerHost.d.ts +11 -0
  7. package/dist/build-tool/SdCliNgCacheCompilerHost.mjs +36 -0
  8. package/dist/build-tool/SdCliPackageLinter.d.ts +8 -0
  9. package/dist/build-tool/SdCliPackageLinter.mjs +41 -0
  10. package/dist/builder/SdCliJsLibBuilder.d.ts +14 -0
  11. package/dist/builder/SdCliJsLibBuilder.mjs +50 -0
  12. package/dist/builder/SdCliTsLibBuilder.d.ts +27 -0
  13. package/dist/builder/SdCliTsLibBuilder.mjs +226 -0
  14. package/dist/commons.d.ts +46 -0
  15. package/dist/commons.mjs +2 -0
  16. package/dist/entry-points/SdCliWorkspace.d.ts +18 -0
  17. package/dist/entry-points/SdCliWorkspace.mjs +193 -0
  18. package/dist/packages/SdCliPackage.d.ts +19 -0
  19. package/dist/packages/SdCliPackage.mjs +89 -0
  20. package/dist/utils/SdCliBuildResultUtil.d.ts +6 -0
  21. package/dist/utils/SdCliBuildResultUtil.mjs +38 -0
  22. package/dist/utils/SdCliConfigUtil.d.ts +7 -0
  23. package/dist/utils/SdCliConfigUtil.mjs +69 -0
  24. package/lib/ts-node-esm-paths.mjs +15 -0
  25. package/package.json +27 -59
  26. package/src/bin/sd-cli.ts +86 -214
  27. package/src/build-tool/SdCliCacheCompilerHost.ts +71 -0
  28. package/src/build-tool/SdCliNgCacheCompilerHost.ts +50 -0
  29. package/src/build-tool/SdCliPackageLinter.ts +54 -0
  30. package/src/builder/SdCliJsLibBuilder.ts +66 -0
  31. package/src/builder/SdCliTsLibBuilder.ts +335 -0
  32. package/src/commons.ts +17 -122
  33. package/src/entry-points/SdCliWorkspace.ts +229 -0
  34. package/src/packages/SdCliPackage.ts +111 -0
  35. package/src/utils/SdCliBuildResultUtil.ts +43 -0
  36. package/src/utils/SdCliConfigUtil.ts +94 -0
  37. package/tsconfig-build.json +9 -0
  38. package/tsconfig.json +7 -18
  39. package/.eslintrc.js +0 -19
  40. package/dist-node/bin/sd-cli.js +0 -197
  41. package/dist-node/bin/sd-cli.js.map +0 -1
  42. package/dist-node/build-tools/SdCliCordova.js +0 -145
  43. package/dist-node/build-tools/SdCliCordova.js.map +0 -1
  44. package/dist-node/build-tools/SdCliIndexFileGenerator.js +0 -51
  45. package/dist-node/build-tools/SdCliIndexFileGenerator.js.map +0 -1
  46. package/dist-node/build-tools/SdCliNgModuleFilesGenerator.js +0 -675
  47. package/dist-node/build-tools/SdCliNgModuleFilesGenerator.js.map +0 -1
  48. package/dist-node/build-tools/metadata/SdAotMetadataReader.js +0 -274
  49. package/dist-node/build-tools/metadata/SdAotMetadataReader.js.map +0 -1
  50. package/dist-node/build-tools/metadata/SdIvyMetadataReader.js +0 -124
  51. package/dist-node/build-tools/metadata/SdIvyMetadataReader.js.map +0 -1
  52. package/dist-node/build-tools/metadata/SdMetadataError.js +0 -13
  53. package/dist-node/build-tools/metadata/SdMetadataError.js.map +0 -1
  54. package/dist-node/build-tools/metadata/SdMyMetadataReader.js +0 -321
  55. package/dist-node/build-tools/metadata/SdMyMetadataReader.js.map +0 -1
  56. package/dist-node/builders/SdCliJavascriptLinter.js +0 -65
  57. package/dist-node/builders/SdCliJavascriptLinter.js.map +0 -1
  58. package/dist-node/builders/SdCliNgClientBuilder.js +0 -636
  59. package/dist-node/builders/SdCliNgClientBuilder.js.map +0 -1
  60. package/dist-node/builders/SdCliNgLibraryBuilder.js +0 -217
  61. package/dist-node/builders/SdCliNgLibraryBuilder.js.map +0 -1
  62. package/dist-node/builders/SdCliPublisher.js +0 -129
  63. package/dist-node/builders/SdCliPublisher.js.map +0 -1
  64. package/dist-node/builders/SdCliServerBuilder.js +0 -452
  65. package/dist-node/builders/SdCliServerBuilder.js.map +0 -1
  66. package/dist-node/builders/SdCliTypescriptBuilder.js +0 -347
  67. package/dist-node/builders/SdCliTypescriptBuilder.js.map +0 -1
  68. package/dist-node/commons.js +0 -3
  69. package/dist-node/commons.js.map +0 -1
  70. package/dist-node/entry-points/SdCliLocalUpdater.js +0 -88
  71. package/dist-node/entry-points/SdCliLocalUpdater.js.map +0 -1
  72. package/dist-node/entry-points/SdCliPrepare.js +0 -56
  73. package/dist-node/entry-points/SdCliPrepare.js.map +0 -1
  74. package/dist-node/entry-points/SdCliProject.js +0 -302
  75. package/dist-node/entry-points/SdCliProject.js.map +0 -1
  76. package/dist-node/packages/SdCliClientPackage.js +0 -91
  77. package/dist-node/packages/SdCliClientPackage.js.map +0 -1
  78. package/dist-node/packages/SdCliLibraryPackage.js +0 -99
  79. package/dist-node/packages/SdCliLibraryPackage.js.map +0 -1
  80. package/dist-node/packages/SdCliPackageBase.js +0 -33
  81. package/dist-node/packages/SdCliPackageBase.js.map +0 -1
  82. package/dist-node/packages/SdCliServerPackage.js +0 -69
  83. package/dist-node/packages/SdCliServerPackage.js.map +0 -1
  84. package/dist-node/packages/SdCliUnknownPackage.js +0 -15
  85. package/dist-node/packages/SdCliUnknownPackage.js.map +0 -1
  86. package/dist-node/utils/SdCliFileCrypto.js +0 -76
  87. package/dist-node/utils/SdCliFileCrypto.js.map +0 -1
  88. package/dist-node/utils/SdProjectConfigUtil.js +0 -62
  89. package/dist-node/utils/SdProjectConfigUtil.js.map +0 -1
  90. package/dist-node/utils/SdTsDiagnosticUtil.js +0 -45
  91. package/dist-node/utils/SdTsDiagnosticUtil.js.map +0 -1
  92. package/dist-node/utils/SdWebpackUtil.js +0 -63
  93. package/dist-node/utils/SdWebpackUtil.js.map +0 -1
  94. package/dist-node/workers/client-ng-gen-worker.js +0 -57
  95. package/dist-node/workers/client-ng-gen-worker.js.map +0 -1
  96. package/dist-node/workers/lib-build-worker.js +0 -88
  97. package/dist-node/workers/lib-build-worker.js.map +0 -1
  98. package/dist-types/bin/sd-cli.d.ts +0 -3
  99. package/dist-types/bin/sd-cli.d.ts.map +0 -1
  100. package/dist-types/build-tools/SdCliCordova.d.ts +0 -15
  101. package/dist-types/build-tools/SdCliCordova.d.ts.map +0 -1
  102. package/dist-types/build-tools/SdCliIndexFileGenerator.d.ts +0 -13
  103. package/dist-types/build-tools/SdCliIndexFileGenerator.d.ts.map +0 -1
  104. package/dist-types/build-tools/SdCliNgModuleFilesGenerator.d.ts +0 -43
  105. package/dist-types/build-tools/SdCliNgModuleFilesGenerator.d.ts.map +0 -1
  106. package/dist-types/build-tools/metadata/SdAotMetadataReader.d.ts +0 -58
  107. package/dist-types/build-tools/metadata/SdAotMetadataReader.d.ts.map +0 -1
  108. package/dist-types/build-tools/metadata/SdIvyMetadataReader.d.ts +0 -43
  109. package/dist-types/build-tools/metadata/SdIvyMetadataReader.d.ts.map +0 -1
  110. package/dist-types/build-tools/metadata/SdMetadataError.d.ts +0 -7
  111. package/dist-types/build-tools/metadata/SdMetadataError.d.ts.map +0 -1
  112. package/dist-types/build-tools/metadata/SdMyMetadataReader.d.ts +0 -59
  113. package/dist-types/build-tools/metadata/SdMyMetadataReader.d.ts.map +0 -1
  114. package/dist-types/builders/SdCliJavascriptLinter.d.ts +0 -14
  115. package/dist-types/builders/SdCliJavascriptLinter.d.ts.map +0 -1
  116. package/dist-types/builders/SdCliNgClientBuilder.d.ts +0 -29
  117. package/dist-types/builders/SdCliNgClientBuilder.d.ts.map +0 -1
  118. package/dist-types/builders/SdCliNgLibraryBuilder.d.ts +0 -30
  119. package/dist-types/builders/SdCliNgLibraryBuilder.d.ts.map +0 -1
  120. package/dist-types/builders/SdCliPublisher.d.ts +0 -9
  121. package/dist-types/builders/SdCliPublisher.d.ts.map +0 -1
  122. package/dist-types/builders/SdCliServerBuilder.d.ts +0 -31
  123. package/dist-types/builders/SdCliServerBuilder.d.ts.map +0 -1
  124. package/dist-types/builders/SdCliTypescriptBuilder.d.ts +0 -56
  125. package/dist-types/builders/SdCliTypescriptBuilder.d.ts.map +0 -1
  126. package/dist-types/commons.d.ts +0 -134
  127. package/dist-types/commons.d.ts.map +0 -1
  128. package/dist-types/entry-points/SdCliLocalUpdater.d.ts +0 -12
  129. package/dist-types/entry-points/SdCliLocalUpdater.d.ts.map +0 -1
  130. package/dist-types/entry-points/SdCliPrepare.d.ts +0 -6
  131. package/dist-types/entry-points/SdCliPrepare.d.ts.map +0 -1
  132. package/dist-types/entry-points/SdCliProject.d.ts +0 -32
  133. package/dist-types/entry-points/SdCliProject.d.ts.map +0 -1
  134. package/dist-types/packages/SdCliClientPackage.d.ts +0 -17
  135. package/dist-types/packages/SdCliClientPackage.d.ts.map +0 -1
  136. package/dist-types/packages/SdCliLibraryPackage.d.ts +0 -20
  137. package/dist-types/packages/SdCliLibraryPackage.d.ts.map +0 -1
  138. package/dist-types/packages/SdCliPackageBase.d.ts +0 -11
  139. package/dist-types/packages/SdCliPackageBase.d.ts.map +0 -1
  140. package/dist-types/packages/SdCliServerPackage.d.ts +0 -16
  141. package/dist-types/packages/SdCliServerPackage.d.ts.map +0 -1
  142. package/dist-types/packages/SdCliUnknownPackage.d.ts +0 -9
  143. package/dist-types/packages/SdCliUnknownPackage.d.ts.map +0 -1
  144. package/dist-types/utils/SdCliFileCrypto.d.ts +0 -8
  145. package/dist-types/utils/SdCliFileCrypto.d.ts.map +0 -1
  146. package/dist-types/utils/SdProjectConfigUtil.d.ts +0 -7
  147. package/dist-types/utils/SdProjectConfigUtil.d.ts.map +0 -1
  148. package/dist-types/utils/SdTsDiagnosticUtil.d.ts +0 -6
  149. package/dist-types/utils/SdTsDiagnosticUtil.d.ts.map +0 -1
  150. package/dist-types/utils/SdWebpackUtil.d.ts +0 -7
  151. package/dist-types/utils/SdWebpackUtil.d.ts.map +0 -1
  152. package/dist-types/workers/client-ng-gen-worker.d.ts +0 -2
  153. package/dist-types/workers/client-ng-gen-worker.d.ts.map +0 -1
  154. package/dist-types/workers/lib-build-worker.d.ts +0 -2
  155. package/dist-types/workers/lib-build-worker.d.ts.map +0 -1
  156. package/schema/schema.json +0 -447
  157. package/sd-tsconfig.node.json +0 -18
  158. package/src/build-tools/SdCliCordova.ts +0 -242
  159. package/src/build-tools/SdCliIndexFileGenerator.ts +0 -61
  160. package/src/build-tools/SdCliNgModuleFilesGenerator.ts +0 -894
  161. package/src/build-tools/metadata/SdAotMetadataReader.ts +0 -374
  162. package/src/build-tools/metadata/SdIvyMetadataReader.ts +0 -183
  163. package/src/build-tools/metadata/SdMetadataError.ts +0 -7
  164. package/src/build-tools/metadata/SdMyMetadataReader.ts +0 -407
  165. package/src/builders/SdCliJavascriptLinter.ts +0 -81
  166. package/src/builders/SdCliNgClientBuilder.ts +0 -793
  167. package/src/builders/SdCliNgLibraryBuilder.ts +0 -301
  168. package/src/builders/SdCliPublisher.ts +0 -144
  169. package/src/builders/SdCliServerBuilder.ts +0 -555
  170. package/src/builders/SdCliTypescriptBuilder.ts +0 -552
  171. package/src/entry-points/SdCliLocalUpdater.ts +0 -114
  172. package/src/entry-points/SdCliPrepare.ts +0 -104
  173. package/src/entry-points/SdCliProject.ts +0 -405
  174. package/src/packages/SdCliClientPackage.ts +0 -111
  175. package/src/packages/SdCliLibraryPackage.ts +0 -118
  176. package/src/packages/SdCliPackageBase.ts +0 -34
  177. package/src/packages/SdCliServerPackage.ts +0 -85
  178. package/src/packages/SdCliUnknownPackage.ts +0 -14
  179. package/src/utils/SdCliFileCrypto.ts +0 -87
  180. package/src/utils/SdCliUtils.ts +0 -56
  181. package/src/utils/SdProjectConfigUtil.ts +0 -145
  182. package/src/utils/SdTsDiagnosticUtil.ts +0 -46
  183. package/src/utils/SdWebpackUtil.ts +0 -71
  184. package/src/workers/client-ng-gen-worker.ts +0 -63
  185. 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 ISdPackageBuildResult {
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 type TSdPublishConfig =
98
- ISdSFtpPublishConfig |
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 interface ISdFtpPublishConfig {
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 ISdAzureAppServicePublishConfig {
123
- type: "azure-app-service";
124
- username: string;
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 type TSdClientPlatformConfig =
138
- ISdClientBrowserPlatformConfig |
139
- ISdClientCordovaPlatformConfig;
140
-
141
- export interface ISdClientBrowserPlatformConfig {
142
- type: "browser";
48
+ export interface ISdCliNgLibPackageConfig {
49
+ type: "angular";
143
50
  }
144
51
 
145
- export interface ISdClientCordovaPlatformConfig {
146
- type: "cordova";
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
  }