ng-packagr 12.0.8 → 12.1.2
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/cli/main.js +5 -5
- package/cli/main.js.map +1 -1
- package/lib/file-system/file-cache.d.ts +3 -0
- package/lib/file-system/file-cache.js +9 -0
- package/lib/file-system/file-cache.js.map +1 -1
- package/lib/ivy/cache-compiler-host.d.ts +8 -0
- package/lib/ivy/cache-compiler-host.js +111 -0
- package/lib/ivy/cache-compiler-host.js.map +1 -0
- package/lib/ivy/compile-source-files.d.ts +6 -0
- package/lib/ivy/compile-source-files.js +123 -0
- package/lib/ivy/compile-source-files.js.map +1 -0
- package/lib/ivy/index.d.ts +2 -0
- package/lib/ivy/index.js +8 -0
- package/lib/ivy/index.js.map +1 -0
- package/lib/ivy/styles/stylesheet-processor.d.ts +20 -0
- package/lib/ivy/styles/stylesheet-processor.js +170 -0
- package/lib/ivy/styles/stylesheet-processor.js.map +1 -0
- package/lib/ng-package/entry-point/compile-ngc.di.js +5 -1
- package/lib/ng-package/entry-point/compile-ngc.di.js.map +1 -1
- package/lib/ng-package/entry-point/compile-ngc.transform.d.ts +2 -1
- package/lib/ng-package/entry-point/compile-ngc.transform.js +38 -16
- package/lib/ng-package/entry-point/compile-ngc.transform.js.map +1 -1
- package/lib/ng-package/entry-point/entry-point.transform.js.map +1 -1
- package/lib/ng-package/nodes.d.ts +5 -2
- package/lib/ng-package/nodes.js.map +1 -1
- package/lib/styles/stylesheet-processor-worker.js +7 -6
- package/lib/styles/stylesheet-processor-worker.js.map +1 -1
- package/lib/ts/cache-compiler-host.d.ts +1 -0
- package/lib/ts/cache-compiler-host.js +21 -8
- package/lib/ts/cache-compiler-host.js.map +1 -1
- package/package.json +3 -3
package/cli/main.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
"use strict";
|
|
3
3
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
-
const
|
|
4
|
+
const commander_1 = require("commander");
|
|
5
5
|
const path = require("path");
|
|
6
6
|
const log_1 = require("../lib/utils/log");
|
|
7
7
|
const public_api_1 = require("../public_api");
|
|
@@ -9,19 +9,19 @@ const DEFAULT_PROJECT_PATH = path.resolve(process.cwd(), 'ng-package.json');
|
|
|
9
9
|
function parseProjectPath(parsed) {
|
|
10
10
|
return parsed || DEFAULT_PROJECT_PATH;
|
|
11
11
|
}
|
|
12
|
-
program
|
|
12
|
+
commander_1.program
|
|
13
13
|
.name('ng-packagr')
|
|
14
14
|
.storeOptionsAsProperties(false)
|
|
15
15
|
.option('-v, --version', 'Prints version info')
|
|
16
16
|
.option('-w, --watch', 'Watch for file changes')
|
|
17
17
|
.option('-p, --project [path]', "Path to the 'ng-package.json' or 'package.json' file.", parseProjectPath, DEFAULT_PROJECT_PATH)
|
|
18
18
|
.option('-c, --config [config]', 'Path to a tsconfig file.', (value) => value ? path.resolve(value) : undefined);
|
|
19
|
-
program.on('option:version', () => {
|
|
19
|
+
commander_1.program.on('option:version', () => {
|
|
20
20
|
public_api_1.version();
|
|
21
21
|
process.exit(0);
|
|
22
22
|
});
|
|
23
|
-
program.parse(process.argv);
|
|
24
|
-
const { config, project, watch } = program.opts();
|
|
23
|
+
commander_1.program.parse(process.argv);
|
|
24
|
+
const { config, project, watch } = commander_1.program.opts();
|
|
25
25
|
public_api_1.execute(public_api_1.build, { config, project, watch: !!watch }).catch(err => {
|
|
26
26
|
log_1.error(err.message);
|
|
27
27
|
process.exit(1);
|
package/cli/main.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"main.js","sourceRoot":"","sources":["../../src/cli/main.ts"],"names":[],"mappings":";;;AAEA,
|
|
1
|
+
{"version":3,"file":"main.js","sourceRoot":"","sources":["../../src/cli/main.ts"],"names":[],"mappings":";;;AAEA,yCAAoC;AACpC,6BAA6B;AAC7B,0CAAyC;AACzC,8CAAwD;AAExD,MAAM,oBAAoB,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,iBAAiB,CAAC,CAAC;AAE5E,SAAS,gBAAgB,CAAC,MAAc;IACtC,OAAO,MAAM,IAAI,oBAAoB,CAAC;AACxC,CAAC;AAED,mBAAO;KACJ,IAAI,CAAC,YAAY,CAAC;KAClB,wBAAwB,CAAC,KAAK,CAAC;KAC/B,MAAM,CAAC,eAAe,EAAE,qBAAqB,CAAC;KAC9C,MAAM,CAAC,aAAa,EAAE,wBAAwB,CAAC;KAC/C,MAAM,CACL,sBAAsB,EACtB,uDAAuD,EACvD,gBAAgB,EAChB,oBAAoB,CACrB;KACA,MAAM,CAAC,uBAAuB,EAAE,0BAA0B,EAAE,CAAC,KAAyB,EAAE,EAAE,CACzF,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CACxC,CAAC;AAEJ,mBAAO,CAAC,EAAE,CAAC,gBAAgB,EAAE,GAAG,EAAE;IAChC,oBAAO,EAAE,CAAC;IACV,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC;AAEH,mBAAO,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;AAE5B,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,GAAG,mBAAO,CAAC,IAAI,EAAE,CAAC;AAClD,oBAAO,CAAC,kBAAK,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE;IAC9D,WAAK,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IACnB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC","sourcesContent":["#!/usr/bin/env node\n\nimport { program } from 'commander';\nimport * as path from 'path';\nimport { error } from '../lib/utils/log';\nimport { build, execute, version } from '../public_api';\n\nconst DEFAULT_PROJECT_PATH = path.resolve(process.cwd(), 'ng-package.json');\n\nfunction parseProjectPath(parsed: string): string {\n return parsed || DEFAULT_PROJECT_PATH;\n}\n\nprogram\n .name('ng-packagr')\n .storeOptionsAsProperties(false)\n .option('-v, --version', 'Prints version info')\n .option('-w, --watch', 'Watch for file changes')\n .option(\n '-p, --project [path]',\n \"Path to the 'ng-package.json' or 'package.json' file.\",\n parseProjectPath,\n DEFAULT_PROJECT_PATH,\n )\n .option('-c, --config [config]', 'Path to a tsconfig file.', (value: string | undefined) =>\n value ? path.resolve(value) : undefined,\n );\n\nprogram.on('option:version', () => {\n version();\n process.exit(0);\n});\n\nprogram.parse(process.argv);\n\nconst { config, project, watch } = program.opts();\nexecute(build, { config, project, watch: !!watch }).catch(err => {\n error(err.message);\n process.exit(1);\n});\n"]}
|
|
@@ -4,6 +4,7 @@ export interface CacheEntry {
|
|
|
4
4
|
sourceFile?: ts.SourceFile;
|
|
5
5
|
content?: string;
|
|
6
6
|
declarationFileName?: string;
|
|
7
|
+
angularDiagnostics?: ts.Diagnostic[];
|
|
7
8
|
}
|
|
8
9
|
export declare class FileCache {
|
|
9
10
|
private cache;
|
|
@@ -15,4 +16,6 @@ export declare class FileCache {
|
|
|
15
16
|
has(fileName: string): boolean;
|
|
16
17
|
get(fileName: string): CacheEntry | undefined;
|
|
17
18
|
getOrCreate(fileName: string): CacheEntry;
|
|
19
|
+
updateAngularDiagnostics(sourceFile: ts.SourceFile, diagnostics: ts.Diagnostic[]): void;
|
|
20
|
+
getAngularDiagnostics(sourceFile: ts.SourceFile): ts.Diagnostic[] | undefined;
|
|
18
21
|
}
|
|
@@ -32,6 +32,15 @@ class FileCache {
|
|
|
32
32
|
}
|
|
33
33
|
return entry;
|
|
34
34
|
}
|
|
35
|
+
updateAngularDiagnostics(sourceFile, diagnostics) {
|
|
36
|
+
if (this.has(sourceFile.fileName)) {
|
|
37
|
+
this.get(sourceFile.fileName).angularDiagnostics = diagnostics;
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
getAngularDiagnostics(sourceFile) {
|
|
41
|
+
var _a;
|
|
42
|
+
return (_a = this.get(sourceFile.fileName)) === null || _a === void 0 ? void 0 : _a.angularDiagnostics;
|
|
43
|
+
}
|
|
35
44
|
}
|
|
36
45
|
exports.FileCache = FileCache;
|
|
37
46
|
//# sourceMappingURL=file-cache.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"file-cache.js","sourceRoot":"","sources":["../../../src/lib/file-system/file-cache.ts"],"names":[],"mappings":";;;AACA,wCAA+C;
|
|
1
|
+
{"version":3,"file":"file-cache.js","sourceRoot":"","sources":["../../../src/lib/file-system/file-cache.ts"],"names":[],"mappings":";;;AACA,wCAA+C;AAU/C,MAAa,SAAS;IAAtB;QACU,UAAK,GAA4B,IAAI,GAAG,EAAE,CAAC;QAEnD,YAAO,GACL,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACtC,UAAK,GAAe,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IA2CxD,CAAC;IAzCC,IAAI;QACF,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;IACzB,CAAC;IAED,YAAY,CAAC,QAAgB;QAC3B,OAAO,qBAAc,CAAC,QAAQ,CAAC,CAAC;IAClC,CAAC;IAED,MAAM,CAAC,QAAgB;QACrB,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC,CAAC;IACxD,CAAC;IAED,GAAG,CAAC,QAAgB;QAClB,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC,CAAC;IACrD,CAAC;IAED,GAAG,CAAC,QAAgB;QAClB,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC,CAAC;IACrD,CAAC;IAED,WAAW,CAAC,QAAgB;QAC1B,MAAM,aAAa,GAAG,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;QAClD,IAAI,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;QAE1C,IAAI,CAAC,KAAK,EAAE;YACV,KAAK,GAAG,EAAE,CAAC;YACX,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,aAAa,EAAE,KAAK,CAAC,CAAC;SACtC;QAED,OAAO,KAAK,CAAC;IACf,CAAC;IAED,wBAAwB,CAAC,UAAyB,EAAE,WAA4B;QAC9E,IAAI,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE;YACjC,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,kBAAkB,GAAG,WAAW,CAAC;SAChE;IACH,CAAC;IAED,qBAAqB,CAAC,UAAyB;;QAC7C,OAAO,MAAA,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,QAAQ,CAAC,0CAAE,kBAAkB,CAAC;IAC3D,CAAC;CACF;AAhDD,8BAgDC","sourcesContent":["import * as ts from 'typescript';\nimport { ensureUnixPath } from '../utils/path';\n\nexport interface CacheEntry {\n exists?: boolean;\n sourceFile?: ts.SourceFile;\n content?: string;\n declarationFileName?: string;\n angularDiagnostics?: ts.Diagnostic[];\n}\n\nexport class FileCache {\n private cache: Map<string, CacheEntry> = new Map();\n\n forEach: (callbackfn: (value: CacheEntry, key: string, map: Map<string, CacheEntry>) => void, thisArg?: any) => void =\n this.cache.forEach.bind(this.cache);\n clear: () => void = this.cache.clear.bind(this.cache);\n\n size(): number {\n return this.cache.size;\n }\n\n normalizeKey(fileName: string): string {\n return ensureUnixPath(fileName);\n }\n\n delete(fileName: string): boolean {\n return this.cache.delete(this.normalizeKey(fileName));\n }\n\n has(fileName: string): boolean {\n return this.cache.has(this.normalizeKey(fileName));\n }\n\n get(fileName: string): CacheEntry | undefined {\n return this.cache.get(this.normalizeKey(fileName));\n }\n\n getOrCreate(fileName: string): CacheEntry {\n const normalizedKey = this.normalizeKey(fileName);\n let entry = this.cache.get(normalizedKey);\n\n if (!entry) {\n entry = {};\n this.cache.set(normalizedKey, entry);\n }\n\n return entry;\n }\n\n updateAngularDiagnostics(sourceFile: ts.SourceFile, diagnostics: ts.Diagnostic[]): void {\n if (this.has(sourceFile.fileName)) {\n this.get(sourceFile.fileName).angularDiagnostics = diagnostics;\n }\n }\n\n getAngularDiagnostics(sourceFile: ts.SourceFile): ts.Diagnostic[] | undefined {\n return this.get(sourceFile.fileName)?.angularDiagnostics;\n }\n}\n"]}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import * as ts from 'typescript';
|
|
2
|
+
import * as ng from '@angular/compiler-cli';
|
|
3
|
+
import { EntryPointNode } from '../ng-package/nodes';
|
|
4
|
+
import { BuildGraph } from '../graph/build-graph';
|
|
5
|
+
import { FileCache } from '../file-system/file-cache';
|
|
6
|
+
import { StylesheetProcessor } from './styles/stylesheet-processor';
|
|
7
|
+
export declare function cacheCompilerHost(graph: BuildGraph, entryPoint: EntryPointNode, compilerOptions: ng.CompilerOptions, moduleResolutionCache: ts.ModuleResolutionCache, stylesheetProcessor?: StylesheetProcessor, sourcesFileCache?: FileCache): ng.CompilerHost;
|
|
8
|
+
export declare function augmentProgramWithVersioning(program: ts.Program): void;
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.augmentProgramWithVersioning = exports.cacheCompilerHost = void 0;
|
|
4
|
+
const ts = require("typescript");
|
|
5
|
+
const path = require("path");
|
|
6
|
+
const path_1 = require("../utils/path");
|
|
7
|
+
const nodes_1 = require("../ng-package/nodes");
|
|
8
|
+
const node_1 = require("../graph/node");
|
|
9
|
+
const crypto_1 = require("crypto");
|
|
10
|
+
function cacheCompilerHost(graph, entryPoint, compilerOptions, moduleResolutionCache, stylesheetProcessor, sourcesFileCache = entryPoint.cache.sourcesFileCache) {
|
|
11
|
+
const compilerHost = ts.createIncrementalCompilerHost(compilerOptions);
|
|
12
|
+
const getNode = (fileName) => {
|
|
13
|
+
const nodeUri = nodes_1.fileUrl(path_1.ensureUnixPath(fileName));
|
|
14
|
+
let node = graph.get(nodeUri);
|
|
15
|
+
if (!node) {
|
|
16
|
+
node = new node_1.Node(nodeUri);
|
|
17
|
+
graph.put(node);
|
|
18
|
+
}
|
|
19
|
+
return node;
|
|
20
|
+
};
|
|
21
|
+
const addDependee = (fileName) => {
|
|
22
|
+
const node = getNode(fileName);
|
|
23
|
+
entryPoint.dependsOn(node);
|
|
24
|
+
};
|
|
25
|
+
return {
|
|
26
|
+
...compilerHost,
|
|
27
|
+
// ts specific
|
|
28
|
+
fileExists: (fileName) => {
|
|
29
|
+
const cache = sourcesFileCache.getOrCreate(fileName);
|
|
30
|
+
if (cache.exists === undefined) {
|
|
31
|
+
cache.exists = compilerHost.fileExists.call(this, fileName);
|
|
32
|
+
}
|
|
33
|
+
return cache.exists;
|
|
34
|
+
},
|
|
35
|
+
getSourceFile: (fileName, languageVersion) => {
|
|
36
|
+
addDependee(fileName);
|
|
37
|
+
const cache = sourcesFileCache.getOrCreate(fileName);
|
|
38
|
+
if (!cache.sourceFile) {
|
|
39
|
+
cache.sourceFile = compilerHost.getSourceFile.call(this, fileName, languageVersion);
|
|
40
|
+
}
|
|
41
|
+
return cache.sourceFile;
|
|
42
|
+
},
|
|
43
|
+
writeFile: (fileName, data, writeByteOrderMark, onError, sourceFiles) => {
|
|
44
|
+
if (fileName.endsWith('.d.ts')) {
|
|
45
|
+
sourceFiles.forEach(source => {
|
|
46
|
+
const cache = sourcesFileCache.getOrCreate(source.fileName);
|
|
47
|
+
if (!cache.declarationFileName) {
|
|
48
|
+
cache.declarationFileName = path_1.ensureUnixPath(fileName);
|
|
49
|
+
}
|
|
50
|
+
});
|
|
51
|
+
}
|
|
52
|
+
compilerHost.writeFile.call(this, fileName, data, writeByteOrderMark, onError, sourceFiles);
|
|
53
|
+
},
|
|
54
|
+
readFile: (fileName) => {
|
|
55
|
+
addDependee(fileName);
|
|
56
|
+
const cache = sourcesFileCache.getOrCreate(fileName);
|
|
57
|
+
if (cache.content === undefined) {
|
|
58
|
+
cache.content = compilerHost.readFile.call(this, fileName);
|
|
59
|
+
}
|
|
60
|
+
return cache.content;
|
|
61
|
+
},
|
|
62
|
+
resolveModuleNames: (moduleNames, containingFile) => {
|
|
63
|
+
return moduleNames.map(moduleName => {
|
|
64
|
+
const { resolvedModule } = ts.resolveModuleName(moduleName, path_1.ensureUnixPath(containingFile), compilerOptions, compilerHost, moduleResolutionCache);
|
|
65
|
+
return resolvedModule;
|
|
66
|
+
});
|
|
67
|
+
},
|
|
68
|
+
resourceNameToFileName: (resourceName, containingFilePath) => {
|
|
69
|
+
const resourcePath = path.resolve(path.dirname(containingFilePath), resourceName);
|
|
70
|
+
const containingNode = getNode(containingFilePath);
|
|
71
|
+
const resourceNode = getNode(resourcePath);
|
|
72
|
+
containingNode.dependsOn(resourceNode);
|
|
73
|
+
return resourcePath;
|
|
74
|
+
},
|
|
75
|
+
readResource: async (fileName) => {
|
|
76
|
+
addDependee(fileName);
|
|
77
|
+
const cache = sourcesFileCache.getOrCreate(fileName);
|
|
78
|
+
if (cache.content === undefined) {
|
|
79
|
+
if (/(?:html?|svg)$/.test(path.extname(fileName))) {
|
|
80
|
+
// template
|
|
81
|
+
cache.content = compilerHost.readFile.call(this, fileName);
|
|
82
|
+
}
|
|
83
|
+
else {
|
|
84
|
+
// stylesheet
|
|
85
|
+
cache.content = await stylesheetProcessor.process(fileName);
|
|
86
|
+
}
|
|
87
|
+
if (cache.content === undefined) {
|
|
88
|
+
throw new Error(`Cannot read file ${fileName}.`);
|
|
89
|
+
}
|
|
90
|
+
;
|
|
91
|
+
cache.exists = true;
|
|
92
|
+
}
|
|
93
|
+
return cache.content;
|
|
94
|
+
},
|
|
95
|
+
};
|
|
96
|
+
}
|
|
97
|
+
exports.cacheCompilerHost = cacheCompilerHost;
|
|
98
|
+
function augmentProgramWithVersioning(program) {
|
|
99
|
+
const baseGetSourceFiles = program.getSourceFiles;
|
|
100
|
+
program.getSourceFiles = function (...parameters) {
|
|
101
|
+
const files = baseGetSourceFiles(...parameters);
|
|
102
|
+
for (const file of files) {
|
|
103
|
+
if (file.version === undefined) {
|
|
104
|
+
file.version = crypto_1.createHash('sha256').update(file.text).digest('hex');
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
return files;
|
|
108
|
+
};
|
|
109
|
+
}
|
|
110
|
+
exports.augmentProgramWithVersioning = augmentProgramWithVersioning;
|
|
111
|
+
//# sourceMappingURL=cache-compiler-host.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cache-compiler-host.js","sourceRoot":"","sources":["../../../src/lib/ivy/cache-compiler-host.ts"],"names":[],"mappings":"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","sourcesContent":["import * as ts from 'typescript';\nimport * as ng from '@angular/compiler-cli';\nimport * as path from 'path';\nimport { ensureUnixPath } from '../utils/path';\n\nimport { EntryPointNode, fileUrl } from '../ng-package/nodes';\nimport { BuildGraph } from '../graph/build-graph';\nimport { FileCache } from '../file-system/file-cache';\nimport { Node } from '../graph/node';\nimport { createHash } from 'crypto';\nimport { StylesheetProcessor } from './styles/stylesheet-processor';\n\nexport function cacheCompilerHost(\n graph: BuildGraph,\n entryPoint: EntryPointNode,\n compilerOptions: ng.CompilerOptions,\n moduleResolutionCache: ts.ModuleResolutionCache,\n stylesheetProcessor?: StylesheetProcessor,\n sourcesFileCache: FileCache = entryPoint.cache.sourcesFileCache,\n): ng.CompilerHost {\n const compilerHost = ts.createIncrementalCompilerHost(compilerOptions);\n\n const getNode = (fileName: string) => {\n const nodeUri = fileUrl(ensureUnixPath(fileName));\n let node = graph.get(nodeUri);\n\n if (!node) {\n node = new Node(nodeUri);\n graph.put(node);\n }\n\n return node;\n };\n\n const addDependee = (fileName: string) => {\n const node = getNode(fileName);\n entryPoint.dependsOn(node);\n };\n\n return {\n ...compilerHost,\n\n // ts specific\n fileExists: (fileName: string) => {\n const cache = sourcesFileCache.getOrCreate(fileName);\n if (cache.exists === undefined) {\n cache.exists = compilerHost.fileExists.call(this, fileName);\n }\n return cache.exists;\n },\n\n getSourceFile: (fileName: string, languageVersion: ts.ScriptTarget) => {\n addDependee(fileName);\n const cache = sourcesFileCache.getOrCreate(fileName);\n if (!cache.sourceFile) {\n cache.sourceFile = compilerHost.getSourceFile.call(this, fileName, languageVersion);\n }\n return cache.sourceFile;\n },\n\n writeFile: (\n fileName: string,\n data: string,\n writeByteOrderMark: boolean,\n onError?: (message: string) => void,\n sourceFiles?: ReadonlyArray<ts.SourceFile>,\n ) => {\n if (fileName.endsWith('.d.ts')) {\n sourceFiles.forEach(source => {\n const cache = sourcesFileCache.getOrCreate(source.fileName);\n if (!cache.declarationFileName) {\n cache.declarationFileName = ensureUnixPath(fileName);\n }\n });\n }\n\n compilerHost.writeFile.call(this, fileName, data, writeByteOrderMark, onError, sourceFiles);\n },\n\n readFile: (fileName: string) => {\n addDependee(fileName);\n\n const cache = sourcesFileCache.getOrCreate(fileName);\n if (cache.content === undefined) {\n cache.content = compilerHost.readFile.call(this, fileName);\n }\n return cache.content;\n },\n\n resolveModuleNames: (moduleNames: string[], containingFile: string) => {\n return moduleNames.map(moduleName => {\n const { resolvedModule } = ts.resolveModuleName(\n moduleName,\n ensureUnixPath(containingFile),\n compilerOptions,\n compilerHost,\n moduleResolutionCache,\n );\n\n return resolvedModule;\n });\n },\n\n resourceNameToFileName: (resourceName: string, containingFilePath: string) => {\n const resourcePath = path.resolve(path.dirname(containingFilePath), resourceName);\n const containingNode = getNode(containingFilePath);\n const resourceNode = getNode(resourcePath);\n containingNode.dependsOn(resourceNode);\n\n return resourcePath;\n },\n\n readResource: async (fileName: string) => {\n addDependee(fileName);\n\n const cache = sourcesFileCache.getOrCreate(fileName);\n if (cache.content === undefined) {\n if (/(?:html?|svg)$/.test(path.extname(fileName))) {\n // template\n cache.content = compilerHost.readFile.call(this, fileName);\n } else {\n // stylesheet\n cache.content = await stylesheetProcessor.process(fileName);\n }\n\n if (cache.content === undefined) {\n throw new Error(`Cannot read file ${fileName}.`);\n };\n\n cache.exists = true;\n }\n\n return cache.content;\n },\n };\n}\n\nexport function augmentProgramWithVersioning(program: ts.Program): void {\n const baseGetSourceFiles = program.getSourceFiles;\n program.getSourceFiles = function (...parameters) {\n const files: readonly (ts.SourceFile & { version?: string })[] = baseGetSourceFiles(\n ...parameters,\n );\n\n for (const file of files) {\n if (file.version === undefined) {\n file.version = createHash('sha256').update(file.text).digest('hex');\n }\n }\n\n return files;\n };\n}\n"]}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import * as ng from '@angular/compiler-cli';
|
|
2
|
+
import * as ts from 'typescript';
|
|
3
|
+
import * as ivy from '../ivy';
|
|
4
|
+
import { BuildGraph } from '../graph/build-graph';
|
|
5
|
+
import { NgccProcessor } from '../ngc/ngcc-processor';
|
|
6
|
+
export declare function compileSourceFiles(graph: BuildGraph, tsConfig: ng.ParsedConfiguration, moduleResolutionCache: ts.ModuleResolutionCache, extraOptions?: Partial<ng.CompilerOptions>, stylesheetProcessor?: ivy.StylesheetProcessor, ngccProcessor?: NgccProcessor, watch?: boolean): Promise<void>;
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.compileSourceFiles = void 0;
|
|
4
|
+
const ng = require("@angular/compiler-cli");
|
|
5
|
+
const api_1 = require("@angular/compiler-cli/src/ngtsc/typecheck/api");
|
|
6
|
+
const program_1 = require("@angular/compiler-cli/src/ngtsc/program");
|
|
7
|
+
const ts = require("typescript");
|
|
8
|
+
const log = require("../utils/log");
|
|
9
|
+
const cache_compiler_host_1 = require("./cache-compiler-host");
|
|
10
|
+
const nodes_1 = require("../ng-package/nodes");
|
|
11
|
+
const ngcc_transform_compiler_host_1 = require("../ts/ngcc-transform-compiler-host");
|
|
12
|
+
async function compileSourceFiles(graph, tsConfig, moduleResolutionCache, extraOptions, stylesheetProcessor, ngccProcessor, watch) {
|
|
13
|
+
log.debug(`ngc (v${ng.VERSION.full})`);
|
|
14
|
+
const tsConfigOptions = { ...tsConfig.options, ...extraOptions };
|
|
15
|
+
const entryPoint = graph.find(nodes_1.isEntryPointInProgress());
|
|
16
|
+
const tsCompilerHost = ngcc_transform_compiler_host_1.ngccTransformCompilerHost(cache_compiler_host_1.cacheCompilerHost(graph, entryPoint, tsConfigOptions, moduleResolutionCache, stylesheetProcessor), tsConfigOptions, ngccProcessor, moduleResolutionCache);
|
|
17
|
+
const cache = entryPoint.cache;
|
|
18
|
+
const sourceFileCache = cache.sourcesFileCache;
|
|
19
|
+
// Create the Angular specific program that contains the Angular compiler
|
|
20
|
+
const angularProgram = new program_1.NgtscProgram(tsConfig.rootNames, tsConfigOptions, tsCompilerHost, cache.oldNgtscProgram);
|
|
21
|
+
const angularCompiler = angularProgram.compiler;
|
|
22
|
+
const { ignoreForDiagnostics, ignoreForEmit } = angularCompiler;
|
|
23
|
+
// SourceFile versions are required for builder programs.
|
|
24
|
+
// The wrapped host inside NgtscProgram adds additional files that will not have versions.
|
|
25
|
+
const typeScriptProgram = angularProgram.getTsProgram();
|
|
26
|
+
cache_compiler_host_1.augmentProgramWithVersioning(typeScriptProgram);
|
|
27
|
+
let builder;
|
|
28
|
+
if (watch) {
|
|
29
|
+
builder = cache.oldBuilder = ts.createEmitAndSemanticDiagnosticsBuilderProgram(typeScriptProgram, tsCompilerHost, cache.oldBuilder);
|
|
30
|
+
cache.oldNgtscProgram = angularProgram;
|
|
31
|
+
}
|
|
32
|
+
else {
|
|
33
|
+
// When not in watch mode, the startup cost of the incremental analysis can be avoided by
|
|
34
|
+
// using an abstract builder that only wraps a TypeScript program.
|
|
35
|
+
builder = ts.createAbstractBuilder(typeScriptProgram, tsCompilerHost);
|
|
36
|
+
}
|
|
37
|
+
// Update semantic diagnostics cache
|
|
38
|
+
const affectedFiles = new Set();
|
|
39
|
+
// Analyze affected files when in watch mode for incremental type checking
|
|
40
|
+
if ('getSemanticDiagnosticsOfNextAffectedFile' in builder) {
|
|
41
|
+
while (true) {
|
|
42
|
+
const result = builder.getSemanticDiagnosticsOfNextAffectedFile(undefined, sourceFile => {
|
|
43
|
+
// If the affected file is a TTC shim, add the shim's original source file.
|
|
44
|
+
// This ensures that changes that affect TTC are typechecked even when the changes
|
|
45
|
+
// are otherwise unrelated from a TS perspective and do not result in Ivy codegen changes.
|
|
46
|
+
// For example, changing @Input property types of a directive used in another component's
|
|
47
|
+
// template.
|
|
48
|
+
if (ignoreForDiagnostics.has(sourceFile) && sourceFile.fileName.endsWith('.ngtypecheck.ts')) {
|
|
49
|
+
// This file name conversion relies on internal compiler logic and should be converted
|
|
50
|
+
// to an official method when available. 15 is length of `.ngtypecheck.ts`
|
|
51
|
+
const originalFilename = sourceFile.fileName.slice(0, -15) + '.ts';
|
|
52
|
+
const originalSourceFile = builder.getSourceFile(originalFilename);
|
|
53
|
+
if (originalSourceFile) {
|
|
54
|
+
affectedFiles.add(originalSourceFile);
|
|
55
|
+
}
|
|
56
|
+
return true;
|
|
57
|
+
}
|
|
58
|
+
return false;
|
|
59
|
+
});
|
|
60
|
+
if (!result) {
|
|
61
|
+
break;
|
|
62
|
+
}
|
|
63
|
+
affectedFiles.add(result.affected);
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
// Collect program level diagnostics
|
|
67
|
+
const allDiagnostics = [
|
|
68
|
+
...angularCompiler.getOptionDiagnostics(),
|
|
69
|
+
...builder.getOptionsDiagnostics(),
|
|
70
|
+
...builder.getGlobalDiagnostics(),
|
|
71
|
+
];
|
|
72
|
+
// Required to support asynchronous resource loading
|
|
73
|
+
// Must be done before creating transformers or getting template diagnostics
|
|
74
|
+
await angularCompiler.analyzeAsync();
|
|
75
|
+
// Collect source file specific diagnostics
|
|
76
|
+
for (const sourceFile of builder.getSourceFiles()) {
|
|
77
|
+
if (!ignoreForDiagnostics.has(sourceFile)) {
|
|
78
|
+
allDiagnostics.push(...builder.getSyntacticDiagnostics(sourceFile), ...builder.getSemanticDiagnostics(sourceFile));
|
|
79
|
+
}
|
|
80
|
+
if (sourceFile.isDeclarationFile) {
|
|
81
|
+
continue;
|
|
82
|
+
}
|
|
83
|
+
// Collect sources that are required to be emitted
|
|
84
|
+
if (!ignoreForEmit.has(sourceFile) && !angularCompiler.incrementalDriver.safeToSkipEmit(sourceFile)) {
|
|
85
|
+
// If required to emit, diagnostics may have also changed
|
|
86
|
+
if (!ignoreForDiagnostics.has(sourceFile)) {
|
|
87
|
+
affectedFiles.add(sourceFile);
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
else if (sourceFileCache && !affectedFiles.has(sourceFile) && !ignoreForDiagnostics.has(sourceFile)) {
|
|
91
|
+
// Use cached Angular diagnostics for unchanged and unaffected files
|
|
92
|
+
const angularDiagnostics = sourceFileCache.getAngularDiagnostics(sourceFile);
|
|
93
|
+
if (angularDiagnostics === null || angularDiagnostics === void 0 ? void 0 : angularDiagnostics.length) {
|
|
94
|
+
allDiagnostics.push(...angularDiagnostics);
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
// Collect new Angular diagnostics for files affected by changes
|
|
99
|
+
for (const affectedFile of affectedFiles) {
|
|
100
|
+
const angularDiagnostics = angularCompiler.getDiagnosticsForFile(affectedFile, api_1.OptimizeFor.WholeProgram);
|
|
101
|
+
allDiagnostics.push(...angularDiagnostics);
|
|
102
|
+
sourceFileCache.updateAngularDiagnostics(affectedFile, angularDiagnostics);
|
|
103
|
+
}
|
|
104
|
+
// if we have an error we don't want to transpile.
|
|
105
|
+
const exitCode = ng.exitCodeFromResult(allDiagnostics);
|
|
106
|
+
const formattedDiagnostics = ng.formatDiagnostics(allDiagnostics);
|
|
107
|
+
if (exitCode === 0) {
|
|
108
|
+
if (formattedDiagnostics.length) {
|
|
109
|
+
log.msg(formattedDiagnostics);
|
|
110
|
+
}
|
|
111
|
+
const transformers = angularCompiler.prepareEmit().transformers;
|
|
112
|
+
for (const sourceFile of builder.getSourceFiles()) {
|
|
113
|
+
if (!ignoreForEmit.has(sourceFile)) {
|
|
114
|
+
builder.emit(sourceFile, undefined, undefined, undefined, transformers);
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
else {
|
|
119
|
+
throw new Error(formattedDiagnostics);
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
exports.compileSourceFiles = compileSourceFiles;
|
|
123
|
+
//# sourceMappingURL=compile-source-files.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"compile-source-files.js","sourceRoot":"","sources":["../../../src/lib/ivy/compile-source-files.ts"],"names":[],"mappings":"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","sourcesContent":["import * as ng from '@angular/compiler-cli';\nimport { OptimizeFor } from '@angular/compiler-cli/src/ngtsc/typecheck/api';\nimport { NgtscProgram } from '@angular/compiler-cli/src/ngtsc/program';\nimport * as ts from 'typescript';\nimport * as log from '../utils/log';\nimport * as ivy from '../ivy';\nimport { augmentProgramWithVersioning, cacheCompilerHost } from './cache-compiler-host';\nimport { BuildGraph } from '../graph/build-graph';\nimport { EntryPointNode, isEntryPointInProgress } from '../ng-package/nodes';\nimport { NgccProcessor } from '../ngc/ngcc-processor';\nimport { ngccTransformCompilerHost } from '../ts/ngcc-transform-compiler-host';\n\nexport async function compileSourceFiles(\n graph: BuildGraph,\n tsConfig: ng.ParsedConfiguration,\n moduleResolutionCache: ts.ModuleResolutionCache,\n extraOptions?: Partial<ng.CompilerOptions>,\n stylesheetProcessor?: ivy.StylesheetProcessor,\n ngccProcessor?: NgccProcessor,\n watch?: boolean,\n) {\n log.debug(`ngc (v${ng.VERSION.full})`);\n\n const tsConfigOptions: ng.CompilerOptions = { ...tsConfig.options, ...extraOptions };\n const entryPoint: EntryPointNode = graph.find(isEntryPointInProgress());\n\n const tsCompilerHost = ngccTransformCompilerHost(\n cacheCompilerHost(graph, entryPoint, tsConfigOptions, moduleResolutionCache, stylesheetProcessor),\n tsConfigOptions,\n ngccProcessor,\n moduleResolutionCache,\n );\n\n const cache = entryPoint.cache;\n const sourceFileCache = cache.sourcesFileCache;\n\n // Create the Angular specific program that contains the Angular compiler\n const angularProgram = new NgtscProgram(tsConfig.rootNames, tsConfigOptions, tsCompilerHost, cache.oldNgtscProgram);\n\n const angularCompiler = angularProgram.compiler;\n const { ignoreForDiagnostics, ignoreForEmit } = angularCompiler;\n\n // SourceFile versions are required for builder programs.\n // The wrapped host inside NgtscProgram adds additional files that will not have versions.\n const typeScriptProgram = angularProgram.getTsProgram();\n augmentProgramWithVersioning(typeScriptProgram);\n\n let builder: ts.BuilderProgram | ts.EmitAndSemanticDiagnosticsBuilderProgram;\n if (watch) {\n builder = cache.oldBuilder = ts.createEmitAndSemanticDiagnosticsBuilderProgram(\n typeScriptProgram,\n tsCompilerHost,\n cache.oldBuilder,\n );\n cache.oldNgtscProgram = angularProgram;\n } else {\n // When not in watch mode, the startup cost of the incremental analysis can be avoided by\n // using an abstract builder that only wraps a TypeScript program.\n builder = ts.createAbstractBuilder(typeScriptProgram, tsCompilerHost);\n }\n\n // Update semantic diagnostics cache\n const affectedFiles = new Set<ts.SourceFile>();\n\n // Analyze affected files when in watch mode for incremental type checking\n if ('getSemanticDiagnosticsOfNextAffectedFile' in builder) {\n while (true) {\n const result = builder.getSemanticDiagnosticsOfNextAffectedFile(undefined, sourceFile => {\n // If the affected file is a TTC shim, add the shim's original source file.\n // This ensures that changes that affect TTC are typechecked even when the changes\n // are otherwise unrelated from a TS perspective and do not result in Ivy codegen changes.\n // For example, changing @Input property types of a directive used in another component's\n // template.\n if (ignoreForDiagnostics.has(sourceFile) && sourceFile.fileName.endsWith('.ngtypecheck.ts')) {\n // This file name conversion relies on internal compiler logic and should be converted\n // to an official method when available. 15 is length of `.ngtypecheck.ts`\n const originalFilename = sourceFile.fileName.slice(0, -15) + '.ts';\n const originalSourceFile = builder.getSourceFile(originalFilename);\n if (originalSourceFile) {\n affectedFiles.add(originalSourceFile);\n }\n\n return true;\n }\n\n return false;\n });\n\n if (!result) {\n break;\n }\n\n affectedFiles.add(result.affected as ts.SourceFile);\n }\n }\n\n // Collect program level diagnostics\n const allDiagnostics: ts.Diagnostic[] = [\n ...angularCompiler.getOptionDiagnostics(),\n ...builder.getOptionsDiagnostics(),\n ...builder.getGlobalDiagnostics(),\n ];\n\n // Required to support asynchronous resource loading\n // Must be done before creating transformers or getting template diagnostics\n await angularCompiler.analyzeAsync();\n\n // Collect source file specific diagnostics\n for (const sourceFile of builder.getSourceFiles()) {\n if (!ignoreForDiagnostics.has(sourceFile)) {\n allDiagnostics.push(\n ...builder.getSyntacticDiagnostics(sourceFile),\n ...builder.getSemanticDiagnostics(sourceFile),\n );\n }\n\n if (sourceFile.isDeclarationFile) {\n continue;\n }\n\n // Collect sources that are required to be emitted\n if (!ignoreForEmit.has(sourceFile) && !angularCompiler.incrementalDriver.safeToSkipEmit(sourceFile)) {\n // If required to emit, diagnostics may have also changed\n if (!ignoreForDiagnostics.has(sourceFile)) {\n affectedFiles.add(sourceFile);\n }\n } else if (sourceFileCache && !affectedFiles.has(sourceFile) && !ignoreForDiagnostics.has(sourceFile)) {\n // Use cached Angular diagnostics for unchanged and unaffected files\n const angularDiagnostics = sourceFileCache.getAngularDiagnostics(sourceFile);\n if (angularDiagnostics?.length) {\n allDiagnostics.push(...angularDiagnostics);\n }\n }\n }\n\n // Collect new Angular diagnostics for files affected by changes\n for (const affectedFile of affectedFiles) {\n const angularDiagnostics = angularCompiler.getDiagnosticsForFile(affectedFile, OptimizeFor.WholeProgram);\n\n allDiagnostics.push(...angularDiagnostics);\n sourceFileCache.updateAngularDiagnostics(affectedFile, angularDiagnostics);\n }\n\n // if we have an error we don't want to transpile.\n const exitCode = ng.exitCodeFromResult(allDiagnostics);\n const formattedDiagnostics = ng.formatDiagnostics(allDiagnostics);\n if (exitCode === 0) {\n if (formattedDiagnostics.length) {\n log.msg(formattedDiagnostics);\n }\n\n const transformers = angularCompiler.prepareEmit().transformers;\n for (const sourceFile of builder.getSourceFiles()) {\n if (!ignoreForEmit.has(sourceFile)) {\n builder.emit(sourceFile, undefined, undefined, undefined, transformers);\n }\n }\n } else {\n throw new Error(formattedDiagnostics);\n }\n}\n"]}
|
package/lib/ivy/index.js
ADDED
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.StylesheetProcessor = exports.compileSourceFiles = void 0;
|
|
4
|
+
var compile_source_files_1 = require("./compile-source-files");
|
|
5
|
+
Object.defineProperty(exports, "compileSourceFiles", { enumerable: true, get: function () { return compile_source_files_1.compileSourceFiles; } });
|
|
6
|
+
var stylesheet_processor_1 = require("./styles/stylesheet-processor");
|
|
7
|
+
Object.defineProperty(exports, "StylesheetProcessor", { enumerable: true, get: function () { return stylesheet_processor_1.StylesheetProcessor; } });
|
|
8
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/lib/ivy/index.ts"],"names":[],"mappings":";;;AAAA,+DAA4D;AAAnD,0HAAA,kBAAkB,OAAA;AAC3B,sEAAoE;AAA3D,2HAAA,mBAAmB,OAAA","sourcesContent":["export { compileSourceFiles } from './compile-source-files';\nexport { StylesheetProcessor } from './styles/stylesheet-processor';\n"]}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
export declare enum CssUrl {
|
|
2
|
+
inline = "inline",
|
|
3
|
+
none = "none"
|
|
4
|
+
}
|
|
5
|
+
export interface Result {
|
|
6
|
+
css: string;
|
|
7
|
+
warnings: string[];
|
|
8
|
+
error?: string;
|
|
9
|
+
}
|
|
10
|
+
export declare class StylesheetProcessor {
|
|
11
|
+
private readonly basePath;
|
|
12
|
+
private readonly cssUrl?;
|
|
13
|
+
private readonly styleIncludePaths?;
|
|
14
|
+
private browserslistData;
|
|
15
|
+
private postCssProcessor;
|
|
16
|
+
constructor(basePath: string, cssUrl?: CssUrl, styleIncludePaths?: string[]);
|
|
17
|
+
process(filePath: string): Promise<string>;
|
|
18
|
+
private createPostCssPlugins;
|
|
19
|
+
private renderCss;
|
|
20
|
+
}
|
|
@@ -0,0 +1,170 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.StylesheetProcessor = exports.CssUrl = void 0;
|
|
4
|
+
const browserslist = require("browserslist");
|
|
5
|
+
const findCacheDirectory = require("find-cache-dir");
|
|
6
|
+
const os_1 = require("os");
|
|
7
|
+
const cacache = require("cacache");
|
|
8
|
+
const postcss_1 = require("postcss");
|
|
9
|
+
const postcssUrl = require("postcss-url");
|
|
10
|
+
const cssnano = require("cssnano");
|
|
11
|
+
const postcssPresetEnv = require("postcss-preset-env");
|
|
12
|
+
const log = require("../../utils/log");
|
|
13
|
+
const fs_1 = require("../../utils/fs");
|
|
14
|
+
const crypto_1 = require("crypto");
|
|
15
|
+
const path_1 = require("path");
|
|
16
|
+
var CssUrl;
|
|
17
|
+
(function (CssUrl) {
|
|
18
|
+
CssUrl["inline"] = "inline";
|
|
19
|
+
CssUrl["none"] = "none";
|
|
20
|
+
})(CssUrl = exports.CssUrl || (exports.CssUrl = {}));
|
|
21
|
+
const cachePath = findCacheDirectory({ name: 'ng-packagr-styles' }) || os_1.tmpdir();
|
|
22
|
+
let ngPackagrVersion;
|
|
23
|
+
try {
|
|
24
|
+
ngPackagrVersion = require('../../../package.json').version;
|
|
25
|
+
}
|
|
26
|
+
catch {
|
|
27
|
+
// dev path
|
|
28
|
+
ngPackagrVersion = require('../../../../package.json').version;
|
|
29
|
+
}
|
|
30
|
+
class StylesheetProcessor {
|
|
31
|
+
constructor(basePath, cssUrl, styleIncludePaths) {
|
|
32
|
+
this.basePath = basePath;
|
|
33
|
+
this.cssUrl = cssUrl;
|
|
34
|
+
this.styleIncludePaths = styleIncludePaths;
|
|
35
|
+
log.debug(`determine browserslist for ${this.basePath}`);
|
|
36
|
+
this.browserslistData = browserslist(undefined, { path: this.basePath });
|
|
37
|
+
this.postCssProcessor = this.createPostCssPlugins();
|
|
38
|
+
}
|
|
39
|
+
async process(filePath) {
|
|
40
|
+
const content = await fs_1.readFile(filePath, 'utf8');
|
|
41
|
+
let key;
|
|
42
|
+
if (!content.includes('@import') && !content.includes('@use')) {
|
|
43
|
+
// No transitive deps, we can cache more aggressively.
|
|
44
|
+
key = generateKey(content, this.browserslistData);
|
|
45
|
+
const result = await readCacheEntry(cachePath, key);
|
|
46
|
+
if (result) {
|
|
47
|
+
result.warnings.forEach(msg => log.warn(msg));
|
|
48
|
+
return result.css;
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
// Render pre-processor language (sass, styl, less)
|
|
52
|
+
const renderedCss = await this.renderCss(filePath, content);
|
|
53
|
+
// We cannot cache CSS re-rendering phase, because a transitive dependency via (@import) can case different CSS output.
|
|
54
|
+
// Example a change in a mixin or SCSS variable.
|
|
55
|
+
if (!key) {
|
|
56
|
+
key = generateKey(renderedCss, this.browserslistData);
|
|
57
|
+
}
|
|
58
|
+
const cachedResult = await readCacheEntry(cachePath, key);
|
|
59
|
+
if (cachedResult) {
|
|
60
|
+
cachedResult.warnings.forEach(msg => log.warn(msg));
|
|
61
|
+
return cachedResult.css;
|
|
62
|
+
}
|
|
63
|
+
// Render postcss (autoprefixing and friends)
|
|
64
|
+
const result = await this.postCssProcessor.process(renderedCss, {
|
|
65
|
+
from: filePath,
|
|
66
|
+
to: filePath.replace(path_1.extname(filePath), '.css'),
|
|
67
|
+
});
|
|
68
|
+
const warnings = result.warnings().map(w => w.toString());
|
|
69
|
+
// Add to cache
|
|
70
|
+
await cacache.put(cachePath, key, JSON.stringify({
|
|
71
|
+
css: result.css,
|
|
72
|
+
warnings,
|
|
73
|
+
}));
|
|
74
|
+
warnings.forEach(msg => log.warn(msg));
|
|
75
|
+
return result.css;
|
|
76
|
+
}
|
|
77
|
+
createPostCssPlugins() {
|
|
78
|
+
const postCssPlugins = [];
|
|
79
|
+
if (this.cssUrl !== CssUrl.none) {
|
|
80
|
+
postCssPlugins.push(postcssUrl({ url: this.cssUrl }));
|
|
81
|
+
}
|
|
82
|
+
postCssPlugins.push(postcssPresetEnv({
|
|
83
|
+
browsers: this.browserslistData,
|
|
84
|
+
autoprefixer: true,
|
|
85
|
+
stage: 3,
|
|
86
|
+
}), cssnano({
|
|
87
|
+
preset: [
|
|
88
|
+
'default',
|
|
89
|
+
{
|
|
90
|
+
// Disable SVG optimizations, as this can cause optimizations which are not compatible in all browsers.
|
|
91
|
+
svgo: false,
|
|
92
|
+
// Disable `calc` optimizations, due to several issues. #16910, #16875, #17890
|
|
93
|
+
calc: false,
|
|
94
|
+
// Disable CSS rules sorted due to several issues #20693, https://github.com/ionic-team/ionic-framework/issues/23266 and https://github.com/cssnano/cssnano/issues/1054
|
|
95
|
+
cssDeclarationSorter: false,
|
|
96
|
+
},
|
|
97
|
+
],
|
|
98
|
+
}));
|
|
99
|
+
return postcss_1.default(postCssPlugins);
|
|
100
|
+
}
|
|
101
|
+
async renderCss(filePath, css) {
|
|
102
|
+
const ext = path_1.extname(filePath);
|
|
103
|
+
switch (ext) {
|
|
104
|
+
case '.sass':
|
|
105
|
+
case '.scss': {
|
|
106
|
+
/*
|
|
107
|
+
* Please be aware of the few differences in behaviour https://github.com/sass/dart-sass/blob/master/README.md#behavioral-differences-from-ruby-sass
|
|
108
|
+
* By default `npm install` will install sass.
|
|
109
|
+
* To use node-sass you need to use:
|
|
110
|
+
* Npm:
|
|
111
|
+
* `npm install node-sass --save-dev`
|
|
112
|
+
* Yarn:
|
|
113
|
+
* `yarn add node-sass --dev`
|
|
114
|
+
*/
|
|
115
|
+
let sassCompiler;
|
|
116
|
+
try {
|
|
117
|
+
sassCompiler = require('node-sass'); // Check if node-sass is explicitly included.
|
|
118
|
+
}
|
|
119
|
+
catch {
|
|
120
|
+
sassCompiler = await Promise.resolve().then(() => require('sass'));
|
|
121
|
+
}
|
|
122
|
+
return sassCompiler
|
|
123
|
+
.renderSync({
|
|
124
|
+
file: filePath,
|
|
125
|
+
data: css,
|
|
126
|
+
indentedSyntax: '.sass' === ext,
|
|
127
|
+
importer: await Promise.resolve().then(() => require('node-sass-tilde-importer')),
|
|
128
|
+
includePaths: this.styleIncludePaths,
|
|
129
|
+
})
|
|
130
|
+
.css.toString();
|
|
131
|
+
}
|
|
132
|
+
case '.less': {
|
|
133
|
+
const { css: content } = await (await Promise.resolve().then(() => require('less'))).render(css, {
|
|
134
|
+
filename: filePath,
|
|
135
|
+
javascriptEnabled: true,
|
|
136
|
+
paths: this.styleIncludePaths,
|
|
137
|
+
});
|
|
138
|
+
return content;
|
|
139
|
+
}
|
|
140
|
+
case '.styl':
|
|
141
|
+
case '.stylus': {
|
|
142
|
+
const stylus = await Promise.resolve().then(() => require('stylus'));
|
|
143
|
+
return (stylus(css)
|
|
144
|
+
// add paths for resolve
|
|
145
|
+
.set('paths', [this.basePath, '.', ...this.styleIncludePaths, 'node_modules'])
|
|
146
|
+
// add support for resolving plugins from node_modules
|
|
147
|
+
.set('filename', filePath)
|
|
148
|
+
// turn on url resolver in stylus, same as flag --resolve-url
|
|
149
|
+
.set('resolve url', true)
|
|
150
|
+
.define('url', stylus.resolver(undefined))
|
|
151
|
+
.render());
|
|
152
|
+
}
|
|
153
|
+
case '.css':
|
|
154
|
+
default:
|
|
155
|
+
return css;
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
exports.StylesheetProcessor = StylesheetProcessor;
|
|
160
|
+
function generateKey(content, browserslistData) {
|
|
161
|
+
return crypto_1.createHash('sha1').update(ngPackagrVersion).update(content).update(browserslistData.join('')).digest('base64');
|
|
162
|
+
}
|
|
163
|
+
async function readCacheEntry(cachePath, key) {
|
|
164
|
+
const entry = await cacache.get.info(cachePath, key);
|
|
165
|
+
if (entry) {
|
|
166
|
+
return JSON.parse(await fs_1.readFile(entry.path, 'utf8'));
|
|
167
|
+
}
|
|
168
|
+
return undefined;
|
|
169
|
+
}
|
|
170
|
+
//# sourceMappingURL=stylesheet-processor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stylesheet-processor.js","sourceRoot":"","sources":["../../../../src/lib/ivy/styles/stylesheet-processor.ts"],"names":[],"mappings":"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","sourcesContent":["import * as browserslist from 'browserslist';\nimport * as findCacheDirectory from 'find-cache-dir';\nimport { tmpdir } from 'os';\nimport * as cacache from 'cacache';\nimport postcss from 'postcss';\nimport * as postcssUrl from 'postcss-url';\nimport * as cssnano from 'cssnano';\nimport * as postcssPresetEnv from 'postcss-preset-env';\nimport * as log from '../../utils/log';\nimport { readFile } from '../../utils/fs';\nimport { createHash } from 'crypto';\nimport { extname } from 'path';\n\nexport enum CssUrl {\n inline = 'inline',\n none = 'none',\n}\n\nexport interface Result {\n css: string;\n warnings: string[];\n error?: string;\n}\n\nconst cachePath = findCacheDirectory({ name: 'ng-packagr-styles' }) || tmpdir();\nlet ngPackagrVersion: string | undefined;\ntry {\n ngPackagrVersion = require('../../../package.json').version;\n} catch {\n // dev path\n ngPackagrVersion = require('../../../../package.json').version;\n}\n\nexport class StylesheetProcessor {\n private browserslistData: string[];\n private postCssProcessor: ReturnType<typeof postcss>;\n\n constructor(\n private readonly basePath: string,\n private readonly cssUrl?: CssUrl,\n private readonly styleIncludePaths?: string[],\n ) {\n log.debug(`determine browserslist for ${this.basePath}`);\n this.browserslistData = browserslist(undefined, { path: this.basePath });\n this.postCssProcessor = this.createPostCssPlugins();\n }\n\n async process(filePath: string): Promise<string> {\n const content = await readFile(filePath, 'utf8');\n let key: string | undefined;\n\n if (!content.includes('@import') && !content.includes('@use')) {\n // No transitive deps, we can cache more aggressively.\n key = generateKey(content, this.browserslistData);\n const result = await readCacheEntry(cachePath, key);\n if (result) {\n result.warnings.forEach(msg => log.warn(msg));\n return result.css;\n }\n }\n\n // Render pre-processor language (sass, styl, less)\n const renderedCss = await this.renderCss(filePath, content);\n\n // We cannot cache CSS re-rendering phase, because a transitive dependency via (@import) can case different CSS output.\n // Example a change in a mixin or SCSS variable.\n if (!key) {\n key = generateKey(renderedCss, this.browserslistData);\n }\n\n const cachedResult = await readCacheEntry(cachePath, key);\n if (cachedResult) {\n cachedResult.warnings.forEach(msg => log.warn(msg));\n return cachedResult.css;\n }\n\n // Render postcss (autoprefixing and friends)\n const result = await this.postCssProcessor.process(renderedCss, {\n from: filePath,\n to: filePath.replace(extname(filePath), '.css'),\n });\n\n const warnings = result.warnings().map(w => w.toString());\n // Add to cache\n await cacache.put(\n cachePath,\n key,\n JSON.stringify({\n css: result.css,\n warnings,\n }),\n );\n\n warnings.forEach(msg => log.warn(msg));\n return result.css;\n }\n\n private createPostCssPlugins(): ReturnType<typeof postcss> {\n const postCssPlugins = [];\n if (this.cssUrl !== CssUrl.none) {\n postCssPlugins.push(postcssUrl({ url: this.cssUrl }));\n }\n\n postCssPlugins.push(\n postcssPresetEnv({\n browsers: this.browserslistData,\n autoprefixer: true,\n stage: 3,\n }),\n cssnano({\n preset: [\n 'default',\n {\n // Disable SVG optimizations, as this can cause optimizations which are not compatible in all browsers.\n svgo: false,\n // Disable `calc` optimizations, due to several issues. #16910, #16875, #17890\n calc: false,\n // Disable CSS rules sorted due to several issues #20693, https://github.com/ionic-team/ionic-framework/issues/23266 and https://github.com/cssnano/cssnano/issues/1054\n cssDeclarationSorter: false,\n },\n ],\n }),\n );\n\n return postcss(postCssPlugins);\n }\n\n private async renderCss(filePath: string, css: string): Promise<string> {\n const ext = extname(filePath);\n\n switch (ext) {\n case '.sass':\n case '.scss': {\n /*\n * Please be aware of the few differences in behaviour https://github.com/sass/dart-sass/blob/master/README.md#behavioral-differences-from-ruby-sass\n * By default `npm install` will install sass.\n * To use node-sass you need to use:\n * Npm:\n * `npm install node-sass --save-dev`\n * Yarn:\n * `yarn add node-sass --dev`\n */\n let sassCompiler: any | undefined;\n try {\n sassCompiler = require('node-sass'); // Check if node-sass is explicitly included.\n } catch {\n sassCompiler = await import('sass');\n }\n\n return sassCompiler\n .renderSync({\n file: filePath,\n data: css,\n indentedSyntax: '.sass' === ext,\n importer: await import('node-sass-tilde-importer'),\n includePaths: this.styleIncludePaths,\n })\n .css.toString();\n }\n case '.less': {\n const { css: content } = await (\n await import('less')\n ).render(css, {\n filename: filePath,\n javascriptEnabled: true,\n paths: this.styleIncludePaths,\n });\n\n return content;\n }\n case '.styl':\n case '.stylus': {\n const stylus = await import('stylus');\n\n return (\n stylus(css)\n // add paths for resolve\n .set('paths', [this.basePath, '.', ...this.styleIncludePaths, 'node_modules'])\n // add support for resolving plugins from node_modules\n .set('filename', filePath)\n // turn on url resolver in stylus, same as flag --resolve-url\n .set('resolve url', true)\n .define('url', stylus.resolver(undefined))\n .render()\n );\n }\n case '.css':\n default:\n return css;\n }\n }\n}\n\nfunction generateKey(content: string, browserslistData: string[]): string {\n return createHash('sha1').update(ngPackagrVersion).update(content).update(browserslistData.join('')).digest('base64');\n}\n\nasync function readCacheEntry(cachePath: string, key: string): Promise<Result | undefined> {\n const entry = await cacache.get.info(cachePath, key);\n if (entry) {\n return JSON.parse(await readFile(entry.path, 'utf8'));\n }\n\n return undefined;\n}\n"]}
|
|
@@ -5,11 +5,15 @@ const injection_js_1 = require("injection-js");
|
|
|
5
5
|
const transform_di_1 = require("../../graph/transform.di");
|
|
6
6
|
const compile_ngc_transform_1 = require("./compile-ngc.transform");
|
|
7
7
|
const stylesheet_processor_di_1 = require("../../styles/stylesheet-processor.di");
|
|
8
|
+
const options_di_1 = require("../options.di");
|
|
8
9
|
exports.COMPILE_NGC_TOKEN = new injection_js_1.InjectionToken(`ng.v5.compileNgcTransform`);
|
|
9
10
|
exports.COMPILE_NGC_TRANSFORM = transform_di_1.provideTransform({
|
|
10
11
|
provide: exports.COMPILE_NGC_TOKEN,
|
|
11
12
|
useFactory: compile_ngc_transform_1.compileNgcTransformFactory,
|
|
12
|
-
deps: [
|
|
13
|
+
deps: [
|
|
14
|
+
stylesheet_processor_di_1.STYLESHEET_PROCESSOR_TOKEN,
|
|
15
|
+
options_di_1.OPTIONS_TOKEN,
|
|
16
|
+
],
|
|
13
17
|
});
|
|
14
18
|
exports.COMPILE_NGC_PROVIDERS = [stylesheet_processor_di_1.STYLESHEET_PROCESSOR, exports.COMPILE_NGC_TRANSFORM];
|
|
15
19
|
//# sourceMappingURL=compile-ngc.di.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"compile-ngc.di.js","sourceRoot":"","sources":["../../../../src/lib/ng-package/entry-point/compile-ngc.di.ts"],"names":[],"mappings":";;;AAAA,+CAAwD;AAExD,2DAA+E;AAC/E,mEAAqE;AACrE,kFAAwG;
|
|
1
|
+
{"version":3,"file":"compile-ngc.di.js","sourceRoot":"","sources":["../../../../src/lib/ng-package/entry-point/compile-ngc.di.ts"],"names":[],"mappings":";;;AAAA,+CAAwD;AAExD,2DAA+E;AAC/E,mEAAqE;AACrE,kFAAwG;AACxG,8CAA8C;AAEjC,QAAA,iBAAiB,GAAG,IAAI,6BAAc,CAAY,2BAA2B,CAAC,CAAC;AAE/E,QAAA,qBAAqB,GAAsB,+BAAgB,CAAC;IACvE,OAAO,EAAE,yBAAiB;IAC1B,UAAU,EAAE,kDAA0B;IACtC,IAAI,EAAE;QACJ,oDAA0B;QAC1B,0BAAa;KACd;CACF,CAAC,CAAC;AAEU,QAAA,qBAAqB,GAAe,CAAC,8CAAoB,EAAE,6BAAqB,CAAC,CAAC","sourcesContent":["import { InjectionToken, Provider } from 'injection-js';\nimport { Transform } from '../../graph/transform';\nimport { TransformProvider, provideTransform } from '../../graph/transform.di';\nimport { compileNgcTransformFactory } from './compile-ngc.transform';\nimport { STYLESHEET_PROCESSOR_TOKEN, STYLESHEET_PROCESSOR } from '../../styles/stylesheet-processor.di';\nimport { OPTIONS_TOKEN } from '../options.di';\n\nexport const COMPILE_NGC_TOKEN = new InjectionToken<Transform>(`ng.v5.compileNgcTransform`);\n\nexport const COMPILE_NGC_TRANSFORM: TransformProvider = provideTransform({\n provide: COMPILE_NGC_TOKEN,\n useFactory: compileNgcTransformFactory,\n deps: [\n STYLESHEET_PROCESSOR_TOKEN,\n OPTIONS_TOKEN,\n ],\n});\n\nexport const COMPILE_NGC_PROVIDERS: Provider[] = [STYLESHEET_PROCESSOR, COMPILE_NGC_TRANSFORM];\n"]}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
1
|
import { Transform } from '../../graph/transform';
|
|
2
2
|
import { StylesheetProcessor as StylesheetProcessorClass } from '../../styles/stylesheet-processor';
|
|
3
|
-
|
|
3
|
+
import { NgPackagrOptions } from '../options.di';
|
|
4
|
+
export declare const compileNgcTransformFactory: (StylesheetProcessor: typeof StylesheetProcessorClass, options: NgPackagrOptions) => Transform;
|
|
@@ -7,14 +7,20 @@ const ora = require("ora");
|
|
|
7
7
|
const transform_1 = require("../../graph/transform");
|
|
8
8
|
const compile_source_files_1 = require("../../ngc/compile-source-files");
|
|
9
9
|
const ngcc_processor_1 = require("../../ngc/ngcc-processor");
|
|
10
|
+
const ivy = require("../../ivy");
|
|
10
11
|
const tsconfig_1 = require("../../ts/tsconfig");
|
|
11
12
|
const nodes_1 = require("../nodes");
|
|
12
|
-
|
|
13
|
+
function isEnabled(variable) {
|
|
14
|
+
return typeof variable === 'string' && (variable === '1' || variable.toLowerCase() === 'true');
|
|
15
|
+
}
|
|
16
|
+
const compileNgcTransformFactory = (StylesheetProcessor, options) => {
|
|
13
17
|
return transform_1.transformFromPromise(async (graph) => {
|
|
18
|
+
var _a, _b;
|
|
19
|
+
var _c, _d;
|
|
14
20
|
const spinner = ora({
|
|
15
21
|
hideCursor: false,
|
|
16
22
|
discardStdin: false,
|
|
17
|
-
})
|
|
23
|
+
});
|
|
18
24
|
try {
|
|
19
25
|
const entryPoint = graph.find(nodes_1.isEntryPointInProgress());
|
|
20
26
|
const entryPoints = graph.filter(nodes_1.isEntryPoint);
|
|
@@ -23,21 +29,37 @@ const compileNgcTransformFactory = (StylesheetProcessor) => {
|
|
|
23
29
|
// Compile TypeScript sources
|
|
24
30
|
const { esm2015, declarations } = entryPoint.data.destinationFiles;
|
|
25
31
|
const { basePath, cssUrl, styleIncludePaths } = entryPoint.data.entryPoint;
|
|
26
|
-
const { moduleResolutionCache, ngccProcessingCache
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
32
|
+
const { moduleResolutionCache, ngccProcessingCache } = entryPoint.cache;
|
|
33
|
+
let ngccProcessor;
|
|
34
|
+
if (tsConfig.options.enableIvy !== false) {
|
|
35
|
+
spinner.start(`Compiling with Angular sources in Ivy ${tsConfig.options.compilationMode || 'full'} compilation mode.`);
|
|
36
|
+
ngccProcessor = new ngcc_processor_1.NgccProcessor(ngccProcessingCache, tsConfig.project, tsConfig.options, entryPoints);
|
|
37
|
+
if (!entryPoint.data.entryPoint.isSecondaryEntryPoint) {
|
|
38
|
+
// Only run the async version of NGCC during the primary entrypoint processing.
|
|
39
|
+
await ngccProcessor.process();
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
else {
|
|
43
|
+
spinner.start(`Compiling with Angular in legacy View Engine compilation mode.`);
|
|
44
|
+
}
|
|
45
|
+
if (tsConfig.options.enableIvy !== false && !isEnabled(process.env['NG_BUILD_LIB_LEGACY'])) {
|
|
46
|
+
(_a = (_c = entryPoint.cache).stylesheetProcessor) !== null && _a !== void 0 ? _a : (_c.stylesheetProcessor = new ivy.StylesheetProcessor(basePath, cssUrl, styleIncludePaths));
|
|
47
|
+
await ivy.compileSourceFiles(graph, tsConfig, moduleResolutionCache, {
|
|
48
|
+
outDir: path.dirname(esm2015),
|
|
49
|
+
declarationDir: path.dirname(declarations),
|
|
50
|
+
declaration: true,
|
|
51
|
+
target: ts.ScriptTarget.ES2015,
|
|
52
|
+
}, entryPoint.cache.stylesheetProcessor, ngccProcessor, options.watch);
|
|
53
|
+
}
|
|
54
|
+
else {
|
|
55
|
+
(_b = (_d = entryPoint.cache).stylesheetProcessor) !== null && _b !== void 0 ? _b : (_d.stylesheetProcessor = new StylesheetProcessor(basePath, cssUrl, styleIncludePaths));
|
|
56
|
+
await compile_source_files_1.compileSourceFiles(graph, tsConfig, moduleResolutionCache, entryPoint.cache.stylesheetProcessor, {
|
|
57
|
+
outDir: path.dirname(esm2015),
|
|
58
|
+
declarationDir: path.dirname(declarations),
|
|
59
|
+
declaration: true,
|
|
60
|
+
target: ts.ScriptTarget.ES2015,
|
|
61
|
+
}, ngccProcessor);
|
|
34
62
|
}
|
|
35
|
-
await compile_source_files_1.compileSourceFiles(graph, tsConfig, moduleResolutionCache, stylesheetProcessor, {
|
|
36
|
-
outDir: path.dirname(esm2015),
|
|
37
|
-
declarationDir: path.dirname(declarations),
|
|
38
|
-
declaration: true,
|
|
39
|
-
target: ts.ScriptTarget.ES2015,
|
|
40
|
-
}, ngccProcessor);
|
|
41
63
|
}
|
|
42
64
|
catch (error) {
|
|
43
65
|
spinner.fail();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"compile-ngc.transform.js","sourceRoot":"","sources":["../../../../src/lib/ng-package/entry-point/compile-ngc.transform.ts"],"names":[],"mappings":";;;AAAA,6BAA6B;AAC7B,iCAAiC;AACjC,2BAA2B;AAC3B,qDAAwE;AACxE,yEAAoE;AACpE,6DAAyD;AACzD,gDAAiE;AACjE,oCAAgF;
|
|
1
|
+
{"version":3,"file":"compile-ngc.transform.js","sourceRoot":"","sources":["../../../../src/lib/ng-package/entry-point/compile-ngc.transform.ts"],"names":[],"mappings":"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","sourcesContent":["import * as path from 'path';\nimport * as ts from 'typescript';\nimport * as ora from 'ora';\nimport { Transform, transformFromPromise } from '../../graph/transform';\nimport { compileSourceFiles } from '../../ngc/compile-source-files';\nimport { NgccProcessor } from '../../ngc/ngcc-processor';\nimport * as ivy from '../../ivy';\nimport { setDependenciesTsConfigPaths } from '../../ts/tsconfig';\nimport { isEntryPointInProgress, EntryPointNode, isEntryPoint } from '../nodes';\nimport { StylesheetProcessor as StylesheetProcessorClass } from '../../styles/stylesheet-processor';\nimport { NgPackagrOptions } from '../options.di';\n\nfunction isEnabled(variable: string | undefined): variable is string {\n return typeof variable === 'string' && (variable === '1' || variable.toLowerCase() === 'true');\n}\n\nexport const compileNgcTransformFactory = (\n StylesheetProcessor: typeof StylesheetProcessorClass,\n options: NgPackagrOptions,\n): Transform => {\n return transformFromPromise(async graph => {\n const spinner = ora({\n hideCursor: false,\n discardStdin: false,\n });\n\n try {\n const entryPoint: EntryPointNode = graph.find(isEntryPointInProgress());\n const entryPoints: EntryPointNode[] = graph.filter(isEntryPoint);\n // Add paths mappings for dependencies\n const tsConfig = setDependenciesTsConfigPaths(entryPoint.data.tsConfig, entryPoints);\n\n // Compile TypeScript sources\n const { esm2015, declarations } = entryPoint.data.destinationFiles;\n const { basePath, cssUrl, styleIncludePaths } = entryPoint.data.entryPoint;\n const { moduleResolutionCache, ngccProcessingCache } = entryPoint.cache;\n\n let ngccProcessor: NgccProcessor | undefined;\n if (tsConfig.options.enableIvy !== false) {\n spinner.start(`Compiling with Angular sources in Ivy ${tsConfig.options.compilationMode || 'full'} compilation mode.`);\n ngccProcessor = new NgccProcessor(ngccProcessingCache, tsConfig.project, tsConfig.options, entryPoints);\n if (!entryPoint.data.entryPoint.isSecondaryEntryPoint) {\n // Only run the async version of NGCC during the primary entrypoint processing.\n await ngccProcessor.process();\n }\n } else {\n spinner.start(`Compiling with Angular in legacy View Engine compilation mode.`);\n }\n\n if (tsConfig.options.enableIvy !== false && !isEnabled(process.env['NG_BUILD_LIB_LEGACY'])) {\n entryPoint.cache.stylesheetProcessor ??= new ivy.StylesheetProcessor(basePath, cssUrl, styleIncludePaths);\n\n await ivy.compileSourceFiles(\n graph,\n tsConfig,\n moduleResolutionCache,\n {\n outDir: path.dirname(esm2015),\n declarationDir: path.dirname(declarations),\n declaration: true,\n target: ts.ScriptTarget.ES2015,\n },\n entryPoint.cache.stylesheetProcessor as any,\n ngccProcessor,\n options.watch,\n );\n } else {\n entryPoint.cache.stylesheetProcessor ??= new StylesheetProcessor(basePath, cssUrl, styleIncludePaths);\n await compileSourceFiles(\n graph,\n tsConfig,\n moduleResolutionCache,\n entryPoint.cache.stylesheetProcessor as any,\n {\n outDir: path.dirname(esm2015),\n declarationDir: path.dirname(declarations),\n declaration: true,\n target: ts.ScriptTarget.ES2015,\n },\n ngccProcessor,\n );\n }\n } catch (error) {\n spinner.fail();\n throw error;\n }\n\n spinner.succeed();\n return graph;\n });\n};\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"entry-point.transform.js","sourceRoot":"","sources":["../../../../src/lib/ng-package/entry-point/entry-point.transform.ts"],"names":[],"mappings":";;;AAAA,+BAA4B;AAC5B,2CAA8C;AAC9C,+CAAkD;AAClD,qDAAwE;AACxE,uCAAuC;AACvC,oCAAwC;AAExC;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACI,MAAM,0BAA0B,GAAG,CACxC,SAAoB,EACpB,YAAuB,EACvB,YAAuB,EACZ,EAAE,CACb,WAAI;AACF,+DAA+D;AAE/D,gCAAoB,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;IACnC,4CAA4C;IAC5C,MAAM,UAAU,GAAG,KAAK,CAAC,IAAI,CAAC,oBAAY,EAAE,CAAC,GAAG,CAAC,qBAAY,CAAC,CAAC,CAAC;IAChE,GAAG,CAAC,GAAG,CAAC,kFAAkF,CAAC,CAAC;IAC5F,GAAG,CAAC,GAAG,CAAC,yBAAyB,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC,QAAQ,GAAG,CAAC,CAAC;IACzE,GAAG,CAAC,GAAG,CAAC,gFAAgF,CAAC,CAAC;AAC5F,CAAC,CAAC;AACF,iCAAiC;AACjC,SAAS;AACT,+CAA+C;AAC/C,YAAY,EACZ,YAAY,EACZ,gCAAoB,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;IACnC,MAAM,UAAU,GAAG,KAAK,CAAC,IAAI,CAAC,oBAAY,EAAE,CAAC,GAAG,CAAC,qBAAY,CAAC,CAAC,CAAC;IAChE,UAAU,CAAC,KAAK,GAAG,iBAAU,CAAC;AAChC,CAAC,CAAC,
|
|
1
|
+
{"version":3,"file":"entry-point.transform.js","sourceRoot":"","sources":["../../../../src/lib/ng-package/entry-point/entry-point.transform.ts"],"names":[],"mappings":";;;AAAA,+BAA4B;AAC5B,2CAA8C;AAC9C,+CAAkD;AAClD,qDAAwE;AACxE,uCAAuC;AACvC,oCAAwC;AAExC;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACI,MAAM,0BAA0B,GAAG,CACxC,SAAoB,EACpB,YAAuB,EACvB,YAAuB,EACZ,EAAE,CACb,WAAI;AACF,+DAA+D;AAE/D,gCAAoB,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;IACnC,4CAA4C;IAC5C,MAAM,UAAU,GAAG,KAAK,CAAC,IAAI,CAAC,oBAAY,EAAE,CAAC,GAAG,CAAC,qBAAY,CAAC,CAAC,CAAC;IAChE,GAAG,CAAC,GAAG,CAAC,kFAAkF,CAAC,CAAC;IAC5F,GAAG,CAAC,GAAG,CAAC,yBAAyB,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC,QAAQ,GAAG,CAAC,CAAC;IACzE,GAAG,CAAC,GAAG,CAAC,gFAAgF,CAAC,CAAC;AAC5F,CAAC,CAAC;AACF,iCAAiC;AACjC,SAAS;AACT,+CAA+C;AAC/C,YAAY,EACZ,YAAY,EACZ,gCAAoB,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;IACnC,MAAM,UAAU,GAAG,KAAK,CAAC,IAAI,CAAC,oBAAY,EAAE,CAAC,GAAG,CAAC,qBAAY,CAAC,CAAC,CAAC;IAChE,UAAU,CAAC,KAAK,GAAG,iBAAU,CAAC;AAChC,CAAC,CAAC,CAEH,CAAC;AAzBS,QAAA,0BAA0B,8BAyBnC","sourcesContent":["import { pipe } from 'rxjs';\nimport { STATE_DONE } from '../../graph/node';\nimport { isInProgress } from '../../graph/select';\nimport { Transform, transformFromPromise } from '../../graph/transform';\nimport * as log from '../../utils/log';\nimport { byEntryPoint } from '../nodes';\n\n/**\n * A re-write of the `transformSources()` script that transforms an entry point from sources to distributable format.\n *\n * Sources are TypeScript source files accompanied by HTML templates and xCSS stylesheets.\n * See the Angular Package Format for a detailed description of what the distributables include.\n *\n * The current transformation pipeline can be thought of as:\n *\n * - clean\n * - compileTs\n * - downlevelTs\n * - writeBundles\n * - bundleToFesm15\n * - bundleToUmd\n * - bundleToUmdMin\n * - relocateSourceMaps\n * - writePackage\n * - copyStagedFiles (bundles, esm, dts, metadata, sourcemaps)\n * - writePackageJson\n *\n * The transformation pipeline is pluggable through the dependency injection system.\n * Sub-transformations are passed to this factory function as arguments.\n *\n * @param compileTs Transformation compiling typescript sources to ES2015 modules.\n * @param writeBundles Transformation flattening ES2015 modules to ESM2015, UMD, and minified UMD.\n * @param writePackage Transformation writing a distribution-ready `package.json` (for publishing to npm registry).\n */\nexport const entryPointTransformFactory = (\n compileTs: Transform,\n writeBundles: Transform,\n writePackage: Transform,\n): Transform =>\n pipe(\n //tap(() => log.info(`Building from sources for entry point`)),\n\n transformFromPromise(async (graph) => {\n // Peek the first entry point from the graph\n const entryPoint = graph.find(byEntryPoint().and(isInProgress));\n log.msg('\\n------------------------------------------------------------------------------');\n log.msg(`Building entry point '${entryPoint.data.entryPoint.moduleId}'`);\n log.msg('------------------------------------------------------------------------------');\n }),\n // TypeScript sources compilation\n compileTs,\n // After TypeScript: bundling and write package\n writeBundles,\n writePackage,\n transformFromPromise(async (graph) => {\n const entryPoint = graph.find(byEntryPoint().and(isInProgress));\n entryPoint.state = STATE_DONE;\n }),\n //tap(() => log.info(`Built.`))\n );\n"]}
|
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
import * as ts from 'typescript';
|
|
2
2
|
import { RollupCache } from 'rollup';
|
|
3
|
-
import { ParsedConfiguration, Program } from '@angular/compiler-cli';
|
|
3
|
+
import { NgtscProgram, ParsedConfiguration, Program } from '@angular/compiler-cli';
|
|
4
4
|
import { Node } from '../graph/node';
|
|
5
5
|
import { NgEntryPoint, DestinationFiles } from './entry-point/entry-point';
|
|
6
6
|
import { NgccProcessingCache } from './ngcc-cache';
|
|
7
7
|
import { NgPackage } from './package';
|
|
8
8
|
import { FileCache } from '../file-system/file-cache';
|
|
9
9
|
import { ComplexPredicate } from '../graph/build-graph';
|
|
10
|
+
import * as ivy from '../ivy';
|
|
10
11
|
import { StylesheetProcessor } from '../styles/stylesheet-processor';
|
|
11
12
|
export declare const TYPE_NG_PACKAGE = "application/ng-package";
|
|
12
13
|
export declare const TYPE_NG_ENTRY_POINT = "application/ng-entry-point";
|
|
@@ -35,7 +36,9 @@ export declare class EntryPointNode extends Node {
|
|
|
35
36
|
analysesSourcesFileCache: FileCache;
|
|
36
37
|
moduleResolutionCache: ts.ModuleResolutionCache;
|
|
37
38
|
rollupFESMCache?: RollupCache;
|
|
38
|
-
stylesheetProcessor?: StylesheetProcessor;
|
|
39
|
+
stylesheetProcessor?: StylesheetProcessor | ivy.StylesheetProcessor;
|
|
40
|
+
oldNgtscProgram?: NgtscProgram;
|
|
41
|
+
oldBuilder?: ts.EmitAndSemanticDiagnosticsBuilderProgram;
|
|
39
42
|
};
|
|
40
43
|
data: {
|
|
41
44
|
destinationFiles: DestinationFiles;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"nodes.js","sourceRoot":"","sources":["../../../src/lib/ng-package/nodes.ts"],"names":[],"mappings":";;;AAAA,iCAAiC;AAGjC,wCAAqC;AACrC,4CAA4D;AAE5D,6CAAmD;AAEnD,0DAAsD;
|
|
1
|
+
{"version":3,"file":"nodes.js","sourceRoot":"","sources":["../../../src/lib/ng-package/nodes.ts"],"names":[],"mappings":";;;AAAA,iCAAiC;AAGjC,wCAAqC;AACrC,4CAA4D;AAE5D,6CAAmD;AAEnD,0DAAsD;AAKzC,QAAA,eAAe,GAAG,wBAAwB,CAAC;AAC3C,QAAA,mBAAmB,GAAG,4BAA4B,CAAC;AAIhE,oDAAoD;AACvC,QAAA,iBAAiB,GAAG,SAAS,CAAC;AAE3C,kCAAkC;AACrB,QAAA,eAAe,GAAG,OAAO,CAAC;AAEvC,SAAgB,YAAY,CAAC,IAAU;IACrC,OAAO,IAAI,CAAC,IAAI,KAAK,2BAAmB,CAAC;AAC3C,CAAC;AAFD,oCAEC;AAED,SAAgB,SAAS,CAAC,IAAU;IAClC,OAAO,IAAI,CAAC,IAAI,KAAK,uBAAe,CAAC;AACvC,CAAC;AAFD,8BAEC;AAED,SAAgB,YAAY;IAC1B,OAAO,WAAE,CAAC,YAAY,CAAC,CAAC;AAC1B,CAAC;AAFD,oCAEC;AAED,SAAgB,sBAAsB;IACpC,OAAO,WAAE,CAAC,YAAY,CAAC,CAAC,GAAG,CAAC,qBAAY,CAAC,CAAC;AAC5C,CAAC;AAFD,wDAEC;AAED,SAAgB,iBAAiB;IAC/B,OAAO,WAAE,CAAC,YAAY,CAAC,CAAC,GAAG,CAAC,gBAAO,CAAC,CAAC;AACvC,CAAC;AAFD,8CAEC;AAED,SAAgB,SAAS,CAAC,KAAa;IACrC,OAAO,KAAK,CAAC,UAAU,CAAC,yBAAiB,CAAC,CAAC;AAC7C,CAAC;AAFD,8BAEC;AAED,SAAgB,OAAO,CAAC,IAAY;IAClC,OAAO,GAAG,yBAAiB,GAAG,IAAI,EAAE,CAAC;AACvC,CAAC;AAFD,0BAEC;AAED,SAAgB,WAAW,CAAC,GAAW;IACrC,IAAI,GAAG,CAAC,UAAU,CAAC,yBAAiB,CAAC,EAAE;QACrC,OAAO,GAAG,CAAC,SAAS,CAAC,yBAAiB,CAAC,MAAM,CAAC,CAAC;KAChD;AACH,CAAC;AAJD,kCAIC;AAED,SAAgB,KAAK,CAAC,IAAY;IAChC,OAAO,GAAG,uBAAe,GAAG,IAAI,EAAE,CAAC;AACrC,CAAC;AAFD,sBAEC;AAED,MAAa,cAAe,SAAQ,WAAI;IAGtC,YACkB,GAAW,EAC3B,gBAA2B,EAC3B,mBAAwC,EACxC,qBAA+C;QAE/C,KAAK,CAAC,GAAG,CAAC,CAAC;QALK,QAAG,GAAH,GAAG,CAAQ;QAHpB,SAAI,GAAG,2BAAmB,CAAC;QAUlC,IAAI,CAAC,KAAK,GAAG;YACX,gBAAgB;YAChB,mBAAmB;YACnB,wBAAwB,EAAE,IAAI,sBAAS,EAAE;YACzC,qBAAqB;SACtB,CAAC;IACJ,CAAC;CAmBF;AApCD,wCAoCC;AAED,MAAa,WAAY,SAAQ,WAAI;IAArC;;QACW,SAAI,GAAG,uBAAe,CAAC;QAGhC,UAAK,GAAG;YACN,SAAS,EAAE,EAAe;YAC1B,gBAAgB,EAAE,IAAI,sBAAS,EAAE;YACjC,mBAAmB,EAAE,IAAI,gCAAmB,EAAE;YAC9C,qBAAqB,EAAE,EAAE,CAAC,2BAA2B,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;SAC7E,CAAC;IACJ,CAAC;CAAA;AAVD,kCAUC","sourcesContent":["import * as ts from 'typescript';\nimport { RollupCache } from 'rollup';\nimport { NgtscProgram, ParsedConfiguration, Program } from '@angular/compiler-cli';\nimport { Node } from '../graph/node';\nimport { by, isInProgress, isDirty } from '../graph/select';\nimport { NgEntryPoint, DestinationFiles } from './entry-point/entry-point';\nimport { NgccProcessingCache } from './ngcc-cache';\nimport { NgPackage } from './package';\nimport { FileCache } from '../file-system/file-cache';\nimport { ComplexPredicate } from '../graph/build-graph';\nimport * as ivy from '../ivy';\nimport { StylesheetProcessor } from '../styles/stylesheet-processor';\n\nexport const TYPE_NG_PACKAGE = 'application/ng-package';\nexport const TYPE_NG_ENTRY_POINT = 'application/ng-entry-point';\n\nexport type GlobCache = Record<string, boolean | 'DIR' | 'FILE' | string[]>;\n\n/** A node that can be read through the `fs` api. */\nexport const URL_PROTOCOL_FILE = 'file://';\n\n/** A node specific to angular. */\nexport const URL_PROTOCOL_NG = 'ng://';\n\nexport function isEntryPoint(node: Node): node is EntryPointNode {\n return node.type === TYPE_NG_ENTRY_POINT;\n}\n\nexport function isPackage(node: Node): node is PackageNode {\n return node.type === TYPE_NG_PACKAGE;\n}\n\nexport function byEntryPoint(): ComplexPredicate<EntryPointNode> {\n return by(isEntryPoint);\n}\n\nexport function isEntryPointInProgress(): ComplexPredicate<EntryPointNode> {\n return by(isEntryPoint).and(isInProgress);\n}\n\nexport function isEntryPointDirty(): ComplexPredicate<EntryPointNode> {\n return by(isEntryPoint).and(isDirty);\n}\n\nexport function isFileUrl(value: string): boolean {\n return value.startsWith(URL_PROTOCOL_FILE);\n}\n\nexport function fileUrl(path: string): string {\n return `${URL_PROTOCOL_FILE}${path}`;\n}\n\nexport function fileUrlPath(url: string): string {\n if (url.startsWith(URL_PROTOCOL_FILE)) {\n return url.substring(URL_PROTOCOL_FILE.length);\n }\n}\n\nexport function ngUrl(path: string): string {\n return `${URL_PROTOCOL_NG}${path}`;\n}\n\nexport class EntryPointNode extends Node {\n readonly type = TYPE_NG_ENTRY_POINT;\n\n constructor(\n public readonly url: string,\n sourcesFileCache: FileCache,\n ngccProcessingCache: NgccProcessingCache,\n moduleResolutionCache: ts.ModuleResolutionCache,\n ) {\n super(url);\n\n this.cache = {\n sourcesFileCache,\n ngccProcessingCache,\n analysesSourcesFileCache: new FileCache(),\n moduleResolutionCache,\n };\n }\n\n cache: {\n oldPrograms?: Record<ts.ScriptTarget | 'analysis', Program | ts.Program>;\n sourcesFileCache: FileCache;\n ngccProcessingCache: NgccProcessingCache;\n analysesSourcesFileCache: FileCache;\n moduleResolutionCache: ts.ModuleResolutionCache;\n rollupFESMCache?: RollupCache;\n stylesheetProcessor?: StylesheetProcessor | ivy.StylesheetProcessor;\n oldNgtscProgram?: NgtscProgram;\n oldBuilder?: ts.EmitAndSemanticDiagnosticsBuilderProgram;\n };\n\n data: {\n destinationFiles: DestinationFiles;\n entryPoint: NgEntryPoint;\n tsConfig?: ParsedConfiguration;\n };\n}\n\nexport class PackageNode extends Node {\n readonly type = TYPE_NG_PACKAGE;\n data: NgPackage;\n\n cache = {\n globCache: {} as GlobCache,\n sourcesFileCache: new FileCache(),\n ngccProcessingCache: new NgccProcessingCache(),\n moduleResolutionCache: ts.createModuleResolutionCache(process.cwd(), s => s),\n };\n}\n"]}
|
|
@@ -35,11 +35,15 @@ async function processCss({ filePath, browserslistData, cssUrl, styleIncludePath
|
|
|
35
35
|
}
|
|
36
36
|
// Render postcss (autoprefixing and friends)
|
|
37
37
|
const result = await optimizeCss(filePath, renderedCss, browserslistData, cssUrl);
|
|
38
|
+
const warnings = result.warnings().map(w => w.toString());
|
|
38
39
|
// Add to cache
|
|
39
|
-
await cacache.put(cachePath, key,
|
|
40
|
+
await cacache.put(cachePath, key, JSON.stringify({
|
|
41
|
+
css: result.css,
|
|
42
|
+
warnings,
|
|
43
|
+
}));
|
|
40
44
|
return {
|
|
41
45
|
css: result.css,
|
|
42
|
-
warnings
|
|
46
|
+
warnings,
|
|
43
47
|
};
|
|
44
48
|
}
|
|
45
49
|
async function renderCss(filePath, css, basePath, styleIncludePaths) {
|
|
@@ -132,10 +136,7 @@ function generateKey(content, browserslistData) {
|
|
|
132
136
|
async function readCacheEntry(cachePath, key) {
|
|
133
137
|
const entry = await cacache.get.info(cachePath, key);
|
|
134
138
|
if (entry) {
|
|
135
|
-
return
|
|
136
|
-
css: await fs_1.readFile(entry.path, 'utf8'),
|
|
137
|
-
warnings: [],
|
|
138
|
-
};
|
|
139
|
+
return JSON.parse(await fs_1.readFile(entry.path, 'utf8'));
|
|
139
140
|
}
|
|
140
141
|
return undefined;
|
|
141
142
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stylesheet-processor-worker.js","sourceRoot":"","sources":["../../../src/lib/styles/stylesheet-processor-worker.ts"],"names":[],"mappings":"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","sourcesContent":["import * as cacache from 'cacache';\nimport { createHash } from 'crypto';\nimport * as path from 'path';\nimport postcss, { LazyResult } from 'postcss';\nimport * as postcssUrl from 'postcss-url';\nimport * as cssnano from 'cssnano';\nimport { parentPort } from 'worker_threads';\nimport * as postcssPresetEnv from 'postcss-preset-env';\n\nimport { CssUrl, WorkerOptions, WorkerResult } from './stylesheet-processor';\nimport { readFile } from '../utils/fs';\n\nconst ngPackagrVersion = require('../../package.json').version;\n\nasync function processCss({\n filePath,\n browserslistData,\n cssUrl,\n styleIncludePaths,\n basePath,\n cachePath,\n}: WorkerOptions): Promise<WorkerResult> {\n const content = await readFile(filePath, 'utf8');\n let key: string | undefined;\n\n if (!content.includes('@import') && !content.includes('@use')) {\n // No transitive deps, we can cache more aggressively.\n key = generateKey(content, browserslistData);\n const result = await readCacheEntry(cachePath, key);\n if (result) {\n return result;\n }\n }\n\n // Render pre-processor language (sass, styl, less)\n const renderedCss = await renderCss(filePath, content, basePath, styleIncludePaths);\n\n // We cannot cache CSS re-rendering phase, because a transitive dependency via (@import) can case different CSS output.\n // Example a change in a mixin or SCSS variable.\n if (!key) {\n key = generateKey(renderedCss, browserslistData);\n\n const cachedResult = await readCacheEntry(cachePath, key);\n if (cachedResult) {\n return cachedResult;\n }\n }\n\n // Render postcss (autoprefixing and friends)\n const result = await optimizeCss(filePath, renderedCss, browserslistData, cssUrl);\n\n // Add to cache\n await cacache.put(cachePath, key, result.css);\n\n return {\n css: result.css,\n warnings: result.warnings().map(w => w.toString()),\n };\n}\n\nasync function renderCss(\n filePath: string,\n css: string,\n basePath: string,\n styleIncludePaths?: string[],\n): Promise<string> {\n const ext = path.extname(filePath);\n\n switch (ext) {\n case '.sass':\n case '.scss': {\n /*\n * Please be aware of the few differences in behaviour https://github.com/sass/dart-sass/blob/master/README.md#behavioral-differences-from-ruby-sass\n * By default `npm install` will install sass.\n * To use node-sass you need to use:\n * Npm:\n * `npm install node-sass --save-dev`\n * Yarn:\n * `yarn add node-sass --dev`\n */\n let sassCompiler: any | undefined;\n try {\n sassCompiler = require('node-sass'); // Check if node-sass is explicitly included.\n } catch {\n sassCompiler = await import('sass');\n }\n\n return sassCompiler\n .renderSync({\n file: filePath,\n data: css,\n indentedSyntax: '.sass' === ext,\n importer: await import('node-sass-tilde-importer'),\n includePaths: styleIncludePaths,\n })\n .css.toString();\n }\n case '.less': {\n const { css: content } = await (await import('less')).render(css, {\n filename: filePath,\n javascriptEnabled: true,\n paths: styleIncludePaths,\n });\n\n return content;\n }\n case '.styl':\n case '.stylus': {\n const stylus = await import('stylus');\n\n return (\n stylus(css)\n // add paths for resolve\n .set('paths', [basePath, '.', ...styleIncludePaths, 'node_modules'])\n // add support for resolving plugins from node_modules\n .set('filename', filePath)\n // turn on url resolver in stylus, same as flag --resolve-url\n .set('resolve url', true)\n .define('url', stylus.resolver(undefined))\n .render()\n );\n }\n case '.css':\n default:\n return css;\n }\n}\n\nfunction optimizeCss(filePath: string, css: string, browsers: string[], cssUrl?: CssUrl): LazyResult {\n const postCssPlugins = [];\n\n if (cssUrl !== CssUrl.none) {\n postCssPlugins.push(postcssUrl({ url: cssUrl }));\n }\n\n postCssPlugins.push(\n postcssPresetEnv({\n browsers,\n autoprefixer: true,\n stage: 3,\n }),\n cssnano({\n preset: [\n 'default',\n {\n // Disable SVG optimizations, as this can cause optimizations which are not compatible in all browsers.\n svgo: false,\n // Disable `calc` optimizations, due to several issues. #16910, #16875, #17890\n calc: false,\n // Disable CSS rules sorted due to several issues #20693, https://github.com/ionic-team/ionic-framework/issues/23266 and https://github.com/cssnano/cssnano/issues/1054\n cssDeclarationSorter: false,\n },\n ],\n }),\n );\n\n return postcss(postCssPlugins).process(css, {\n from: filePath,\n to: filePath.replace(path.extname(filePath), '.css'),\n });\n}\n\nfunction generateKey(content: string, browserslistData: string[]): string {\n return createHash('sha1').update(ngPackagrVersion).update(content).update(browserslistData.join('')).digest('base64');\n}\n\nasync function readCacheEntry(cachePath: string, key: string): Promise<WorkerResult | undefined> {\n const entry = await cacache.get.info(cachePath, key);\n if (entry) {\n return {\n css: await readFile(entry.path, 'utf8'),\n warnings: [],\n };\n }\n\n return undefined;\n}\n\nparentPort.on('message', async ({ signal, port, workerOptions }) => {\n try {\n const result = await processCss(workerOptions);\n port.postMessage({ ...result });\n } catch (error) {\n port.postMessage({ error: error.message });\n } finally {\n // Change the value of signal[0] to 1\n Atomics.add(signal, 0, 1);\n // Unlock the main thread\n Atomics.notify(signal, 0);\n port.close();\n }\n});\n"]}
|
|
1
|
+
{"version":3,"file":"stylesheet-processor-worker.js","sourceRoot":"","sources":["../../../src/lib/styles/stylesheet-processor-worker.ts"],"names":[],"mappings":"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","sourcesContent":["import * as cacache from 'cacache';\nimport { createHash } from 'crypto';\nimport * as path from 'path';\nimport postcss, { LazyResult } from 'postcss';\nimport * as postcssUrl from 'postcss-url';\nimport * as cssnano from 'cssnano';\nimport { parentPort } from 'worker_threads';\nimport * as postcssPresetEnv from 'postcss-preset-env';\n\nimport { CssUrl, WorkerOptions, WorkerResult } from './stylesheet-processor';\nimport { readFile } from '../utils/fs';\n\nconst ngPackagrVersion = require('../../package.json').version;\n\nasync function processCss({\n filePath,\n browserslistData,\n cssUrl,\n styleIncludePaths,\n basePath,\n cachePath,\n}: WorkerOptions): Promise<WorkerResult> {\n const content = await readFile(filePath, 'utf8');\n let key: string | undefined;\n\n if (!content.includes('@import') && !content.includes('@use')) {\n // No transitive deps, we can cache more aggressively.\n key = generateKey(content, browserslistData);\n const result = await readCacheEntry(cachePath, key);\n if (result) {\n return result;\n }\n }\n\n // Render pre-processor language (sass, styl, less)\n const renderedCss = await renderCss(filePath, content, basePath, styleIncludePaths);\n\n // We cannot cache CSS re-rendering phase, because a transitive dependency via (@import) can case different CSS output.\n // Example a change in a mixin or SCSS variable.\n if (!key) {\n key = generateKey(renderedCss, browserslistData);\n\n const cachedResult = await readCacheEntry(cachePath, key);\n if (cachedResult) {\n return cachedResult;\n }\n }\n\n // Render postcss (autoprefixing and friends)\n const result = await optimizeCss(filePath, renderedCss, browserslistData, cssUrl);\n const warnings = result.warnings().map(w => w.toString());\n\n // Add to cache\n await cacache.put(\n cachePath,\n key,\n JSON.stringify({\n css: result.css,\n warnings,\n }),\n );\n\n return {\n css: result.css,\n warnings,\n };\n}\n\nasync function renderCss(\n filePath: string,\n css: string,\n basePath: string,\n styleIncludePaths?: string[],\n): Promise<string> {\n const ext = path.extname(filePath);\n\n switch (ext) {\n case '.sass':\n case '.scss': {\n /*\n * Please be aware of the few differences in behaviour https://github.com/sass/dart-sass/blob/master/README.md#behavioral-differences-from-ruby-sass\n * By default `npm install` will install sass.\n * To use node-sass you need to use:\n * Npm:\n * `npm install node-sass --save-dev`\n * Yarn:\n * `yarn add node-sass --dev`\n */\n let sassCompiler: any | undefined;\n try {\n sassCompiler = require('node-sass'); // Check if node-sass is explicitly included.\n } catch {\n sassCompiler = await import('sass');\n }\n\n return sassCompiler\n .renderSync({\n file: filePath,\n data: css,\n indentedSyntax: '.sass' === ext,\n importer: await import('node-sass-tilde-importer'),\n includePaths: styleIncludePaths,\n })\n .css.toString();\n }\n case '.less': {\n const { css: content } = await (\n await import('less')\n ).render(css, {\n filename: filePath,\n javascriptEnabled: true,\n paths: styleIncludePaths,\n });\n\n return content;\n }\n case '.styl':\n case '.stylus': {\n const stylus = await import('stylus');\n\n return (\n stylus(css)\n // add paths for resolve\n .set('paths', [basePath, '.', ...styleIncludePaths, 'node_modules'])\n // add support for resolving plugins from node_modules\n .set('filename', filePath)\n // turn on url resolver in stylus, same as flag --resolve-url\n .set('resolve url', true)\n .define('url', stylus.resolver(undefined))\n .render()\n );\n }\n case '.css':\n default:\n return css;\n }\n}\n\nfunction optimizeCss(filePath: string, css: string, browsers: string[], cssUrl?: CssUrl): LazyResult {\n const postCssPlugins = [];\n\n if (cssUrl !== CssUrl.none) {\n postCssPlugins.push(postcssUrl({ url: cssUrl }));\n }\n\n postCssPlugins.push(\n postcssPresetEnv({\n browsers,\n autoprefixer: true,\n stage: 3,\n }),\n cssnano({\n preset: [\n 'default',\n {\n // Disable SVG optimizations, as this can cause optimizations which are not compatible in all browsers.\n svgo: false,\n // Disable `calc` optimizations, due to several issues. #16910, #16875, #17890\n calc: false,\n // Disable CSS rules sorted due to several issues #20693, https://github.com/ionic-team/ionic-framework/issues/23266 and https://github.com/cssnano/cssnano/issues/1054\n cssDeclarationSorter: false,\n },\n ],\n }),\n );\n\n return postcss(postCssPlugins).process(css, {\n from: filePath,\n to: filePath.replace(path.extname(filePath), '.css'),\n });\n}\n\nfunction generateKey(content: string, browserslistData: string[]): string {\n return createHash('sha1').update(ngPackagrVersion).update(content).update(browserslistData.join('')).digest('base64');\n}\n\nasync function readCacheEntry(cachePath: string, key: string): Promise<WorkerResult | undefined> {\n const entry = await cacache.get.info(cachePath, key);\n if (entry) {\n return JSON.parse(await readFile(entry.path, 'utf8'));\n }\n\n return undefined;\n}\n\nparentPort.on('message', async ({ signal, port, workerOptions }) => {\n try {\n const result = await processCss(workerOptions);\n port.postMessage({ ...result });\n } catch (error) {\n port.postMessage({ error: error.message });\n } finally {\n // Change the value of signal[0] to 1\n Atomics.add(signal, 0, 1);\n // Unlock the main thread\n Atomics.notify(signal, 0);\n port.close();\n }\n});\n"]}
|
|
@@ -5,3 +5,4 @@ import { EntryPointNode } from '../ng-package/nodes';
|
|
|
5
5
|
import { BuildGraph } from '../graph/build-graph';
|
|
6
6
|
import { FileCache } from '../file-system/file-cache';
|
|
7
7
|
export declare function cacheCompilerHost(graph: BuildGraph, entryPoint: EntryPointNode, compilerOptions: ng.CompilerOptions, moduleResolutionCache: ts.ModuleResolutionCache, stylesheetProcessor?: StylesheetProcessor, sourcesFileCache?: FileCache, setParentNodes?: boolean): ng.CompilerHost;
|
|
8
|
+
export declare function augmentProgramWithVersioning(program: ts.Program): void;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.cacheCompilerHost = void 0;
|
|
3
|
+
exports.augmentProgramWithVersioning = exports.cacheCompilerHost = void 0;
|
|
4
4
|
const ts = require("typescript");
|
|
5
5
|
const ng = require("@angular/compiler-cli");
|
|
6
6
|
const path = require("path");
|
|
@@ -8,6 +8,7 @@ const path_1 = require("../utils/path");
|
|
|
8
8
|
const log_1 = require("../utils/log");
|
|
9
9
|
const nodes_1 = require("../ng-package/nodes");
|
|
10
10
|
const node_1 = require("../graph/node");
|
|
11
|
+
const crypto_1 = require("crypto");
|
|
11
12
|
function cacheCompilerHost(graph, entryPoint, compilerOptions, moduleResolutionCache, stylesheetProcessor, sourcesFileCache = entryPoint.cache.sourcesFileCache, setParentNodes = true) {
|
|
12
13
|
const tsHost = ts.createCompilerHost(compilerOptions, setParentNodes);
|
|
13
14
|
const compilerHost = ng.createCompilerHost({ options: compilerOptions, tsHost });
|
|
@@ -61,17 +62,17 @@ function cacheCompilerHost(graph, entryPoint, compilerOptions, moduleResolutionC
|
|
|
61
62
|
}
|
|
62
63
|
return cache.content;
|
|
63
64
|
},
|
|
64
|
-
// ng specific
|
|
65
|
-
moduleNameToFileName: (moduleName, containingFile) => {
|
|
66
|
-
const { resolvedModule } = ts.resolveModuleName(moduleName, path_1.ensureUnixPath(containingFile), compilerOptions, compilerHost, moduleResolutionCache);
|
|
67
|
-
return resolvedModule && resolvedModule.resolvedFileName;
|
|
68
|
-
},
|
|
69
65
|
resolveModuleNames: (moduleNames, containingFile) => {
|
|
70
66
|
return moduleNames.map(moduleName => {
|
|
71
67
|
const { resolvedModule } = ts.resolveModuleName(moduleName, path_1.ensureUnixPath(containingFile), compilerOptions, compilerHost, moduleResolutionCache);
|
|
72
68
|
return resolvedModule;
|
|
73
69
|
});
|
|
74
70
|
},
|
|
71
|
+
// ng specific
|
|
72
|
+
moduleNameToFileName: (moduleName, containingFile) => {
|
|
73
|
+
const { resolvedModule } = ts.resolveModuleName(moduleName, path_1.ensureUnixPath(containingFile), compilerOptions, compilerHost, moduleResolutionCache);
|
|
74
|
+
return resolvedModule && resolvedModule.resolvedFileName;
|
|
75
|
+
},
|
|
75
76
|
resourceNameToFileName: (resourceName, containingFilePath) => {
|
|
76
77
|
const resourcePath = path.resolve(path.dirname(containingFilePath), resourceName);
|
|
77
78
|
const containingNode = getNode(containingFilePath);
|
|
@@ -83,7 +84,7 @@ function cacheCompilerHost(graph, entryPoint, compilerOptions, moduleResolutionC
|
|
|
83
84
|
addDependee(fileName);
|
|
84
85
|
const cache = sourcesFileCache.getOrCreate(fileName);
|
|
85
86
|
if (cache.content === undefined) {
|
|
86
|
-
if (/(html
|
|
87
|
+
if (/(?:html?|svg)$/.test(path.extname(fileName))) {
|
|
87
88
|
// template
|
|
88
89
|
cache.content = compilerHost.readFile.call(this, fileName);
|
|
89
90
|
}
|
|
@@ -100,7 +101,6 @@ function cacheCompilerHost(graph, entryPoint, compilerOptions, moduleResolutionC
|
|
|
100
101
|
if (cache.content === undefined) {
|
|
101
102
|
throw new Error(`Cannot read file ${fileName}.`);
|
|
102
103
|
}
|
|
103
|
-
;
|
|
104
104
|
cache.exists = true;
|
|
105
105
|
}
|
|
106
106
|
return cache.content;
|
|
@@ -108,4 +108,17 @@ function cacheCompilerHost(graph, entryPoint, compilerOptions, moduleResolutionC
|
|
|
108
108
|
};
|
|
109
109
|
}
|
|
110
110
|
exports.cacheCompilerHost = cacheCompilerHost;
|
|
111
|
+
function augmentProgramWithVersioning(program) {
|
|
112
|
+
const baseGetSourceFiles = program.getSourceFiles;
|
|
113
|
+
program.getSourceFiles = function (...parameters) {
|
|
114
|
+
const files = baseGetSourceFiles(...parameters);
|
|
115
|
+
for (const file of files) {
|
|
116
|
+
if (file.version === undefined) {
|
|
117
|
+
file.version = crypto_1.createHash('sha256').update(file.text).digest('hex');
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
return files;
|
|
121
|
+
};
|
|
122
|
+
}
|
|
123
|
+
exports.augmentProgramWithVersioning = augmentProgramWithVersioning;
|
|
111
124
|
//# sourceMappingURL=cache-compiler-host.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cache-compiler-host.js","sourceRoot":"","sources":["../../../src/lib/ts/cache-compiler-host.ts"],"names":[],"mappings":";;;AAAA,iCAAiC;AACjC,4CAA4C;AAC5C,6BAA6B;AAC7B,wCAA+C;AAC/C,sCAAqC;AAErC,+CAA8D;AAG9D,wCAAqC;
|
|
1
|
+
{"version":3,"file":"cache-compiler-host.js","sourceRoot":"","sources":["../../../src/lib/ts/cache-compiler-host.ts"],"names":[],"mappings":"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","sourcesContent":["import * as ts from 'typescript';\nimport * as ng from '@angular/compiler-cli';\nimport * as path from 'path';\nimport { ensureUnixPath } from '../utils/path';\nimport { error } from '../utils/log';\nimport { StylesheetProcessor } from '../styles/stylesheet-processor';\nimport { EntryPointNode, fileUrl } from '../ng-package/nodes';\nimport { BuildGraph } from '../graph/build-graph';\nimport { FileCache } from '../file-system/file-cache';\nimport { Node } from '../graph/node';\nimport { createHash } from 'crypto';\n\nexport function cacheCompilerHost(\n graph: BuildGraph,\n entryPoint: EntryPointNode,\n compilerOptions: ng.CompilerOptions,\n moduleResolutionCache: ts.ModuleResolutionCache,\n stylesheetProcessor?: StylesheetProcessor,\n sourcesFileCache: FileCache = entryPoint.cache.sourcesFileCache,\n setParentNodes = true,\n): ng.CompilerHost {\n const tsHost = ts.createCompilerHost(compilerOptions, setParentNodes);\n const compilerHost = ng.createCompilerHost({ options: compilerOptions, tsHost });\n\n const getNode = (fileName: string) => {\n const nodeUri = fileUrl(ensureUnixPath(fileName));\n let node = graph.get(nodeUri);\n\n if (!node) {\n node = new Node(nodeUri);\n graph.put(node);\n }\n\n return node;\n };\n\n const addDependee = (fileName: string) => {\n const node = getNode(fileName);\n entryPoint.dependsOn(node);\n };\n\n return {\n ...compilerHost,\n\n // ts specific\n fileExists: (fileName: string) => {\n const cache = sourcesFileCache.getOrCreate(fileName);\n if (cache.exists === undefined) {\n cache.exists = compilerHost.fileExists.call(this, fileName);\n }\n return cache.exists;\n },\n\n getSourceFile: (fileName: string, languageVersion: ts.ScriptTarget) => {\n addDependee(fileName);\n const cache = sourcesFileCache.getOrCreate(fileName);\n if (!cache.sourceFile) {\n cache.sourceFile = compilerHost.getSourceFile.call(this, fileName, languageVersion);\n }\n return cache.sourceFile;\n },\n\n writeFile: (\n fileName: string,\n data: string,\n writeByteOrderMark: boolean,\n onError?: (message: string) => void,\n sourceFiles?: ReadonlyArray<ts.SourceFile>,\n ) => {\n if (fileName.endsWith('.d.ts')) {\n sourceFiles.forEach(source => {\n const cache = sourcesFileCache.getOrCreate(source.fileName);\n if (!cache.declarationFileName) {\n cache.declarationFileName = ensureUnixPath(fileName);\n }\n });\n }\n\n compilerHost.writeFile.call(this, fileName, data, writeByteOrderMark, onError, sourceFiles);\n },\n\n readFile: (fileName: string) => {\n addDependee(fileName);\n\n const cache = sourcesFileCache.getOrCreate(fileName);\n if (cache.content === undefined) {\n cache.content = compilerHost.readFile.call(this, fileName);\n }\n return cache.content;\n },\n\n resolveModuleNames: (moduleNames: string[], containingFile: string) => {\n return moduleNames.map(moduleName => {\n const { resolvedModule } = ts.resolveModuleName(\n moduleName,\n ensureUnixPath(containingFile),\n compilerOptions,\n compilerHost,\n moduleResolutionCache,\n );\n\n return resolvedModule;\n });\n },\n\n // ng specific\n moduleNameToFileName: (moduleName: string, containingFile: string) => {\n const { resolvedModule } = ts.resolveModuleName(\n moduleName,\n ensureUnixPath(containingFile),\n compilerOptions,\n compilerHost,\n moduleResolutionCache,\n );\n\n return resolvedModule && resolvedModule.resolvedFileName;\n },\n\n resourceNameToFileName: (resourceName: string, containingFilePath: string) => {\n const resourcePath = path.resolve(path.dirname(containingFilePath), resourceName);\n const containingNode = getNode(containingFilePath);\n const resourceNode = getNode(resourcePath);\n containingNode.dependsOn(resourceNode);\n\n return resourcePath;\n },\n\n readResource: (fileName: string) => {\n addDependee(fileName);\n\n const cache = sourcesFileCache.getOrCreate(fileName);\n if (cache.content === undefined) {\n if (/(?:html?|svg)$/.test(path.extname(fileName))) {\n // template\n cache.content = compilerHost.readFile.call(this, fileName);\n } else {\n // stylesheet\n try {\n cache.content = stylesheetProcessor.process(fileName);\n } catch (err) {\n error('\\n' + err.message + ` in stylesheet file ${fileName}.`);\n throw err;\n }\n }\n\n if (cache.content === undefined) {\n throw new Error(`Cannot read file ${fileName}.`);\n }\n\n cache.exists = true;\n }\n\n return cache.content;\n },\n };\n}\n\nexport function augmentProgramWithVersioning(program: ts.Program): void {\n const baseGetSourceFiles = program.getSourceFiles;\n program.getSourceFiles = function (...parameters) {\n const files: readonly (ts.SourceFile & { version?: string })[] = baseGetSourceFiles(...parameters);\n\n for (const file of files) {\n if (file.version === undefined) {\n file.version = createHash('sha256').update(file.text).digest('hex');\n }\n }\n\n return files;\n };\n}\n"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "ng-packagr",
|
|
3
|
-
"version": "12.
|
|
3
|
+
"version": "12.1.2",
|
|
4
4
|
"description": "Compile and package Angular libraries in Angular Package Format (APF)",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"apf",
|
|
@@ -37,7 +37,7 @@
|
|
|
37
37
|
"browserslist": "^4.16.1",
|
|
38
38
|
"cacache": "^15.0.6",
|
|
39
39
|
"chokidar": "^3.5.1",
|
|
40
|
-
"commander": "^
|
|
40
|
+
"commander": "^8.0.0",
|
|
41
41
|
"cssnano": "^5.0.0",
|
|
42
42
|
"dependency-graph": "^0.11.0",
|
|
43
43
|
"find-cache-dir": "^3.3.1",
|
|
@@ -59,6 +59,6 @@
|
|
|
59
59
|
"peerDependencies": {
|
|
60
60
|
"@angular/compiler-cli": "^12.0.0 || ^12.1.0-next.0",
|
|
61
61
|
"tslib": "^2.1.0",
|
|
62
|
-
"typescript": "~4.2.3"
|
|
62
|
+
"typescript": "~4.2.3 || ~4.3.2"
|
|
63
63
|
}
|
|
64
64
|
}
|