UNPKG

12.4 kBJavaScriptView Raw
1"use strict";
2/**
3 * @license
4 * Copyright Google LLC All Rights Reserved.
5 *
6 * Use of this source code is governed by an MIT-style license that can be
7 * found in the LICENSE file at https://angular.io/license
8 */
9var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
10 if (k2 === undefined) k2 = k;
11 var desc = Object.getOwnPropertyDescriptor(m, k);
12 if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
13 desc = { enumerable: true, get: function() { return m[k]; } };
14 }
15 Object.defineProperty(o, k2, desc);
16}) : (function(o, m, k, k2) {
17 if (k2 === undefined) k2 = k;
18 o[k2] = m[k];
19}));
20var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
21 Object.defineProperty(o, "default", { enumerable: true, value: v });
22}) : function(o, v) {
23 o["default"] = v;
24});
25var __importStar = (this && this.__importStar) || function (mod) {
26 if (mod && mod.__esModule) return mod;
27 var result = {};
28 if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
29 __setModuleDefault(result, mod);
30 return result;
31};
32Object.defineProperty(exports, "__esModule", { value: true });
33exports.transformTypescript = exports.createTypescriptContext = void 0;
34const path_1 = require("path");
35const ts = __importStar(require("typescript"));
36// Test transform helpers.
37const basefileName = 'test-file.ts';
38function createTypescriptContext(content, additionalFiles, useLibs = false, extraCompilerOptions = {}, jsxFile = false) {
39 const fileName = basefileName + (jsxFile ? 'x' : '');
40 // Set compiler options.
41 const compilerOptions = {
42 noEmitOnError: useLibs,
43 allowJs: true,
44 newLine: ts.NewLineKind.LineFeed,
45 moduleResolution: ts.ModuleResolutionKind.NodeJs,
46 module: ts.ModuleKind.ES2020,
47 target: ts.ScriptTarget.ES2020,
48 skipLibCheck: true,
49 sourceMap: false,
50 importHelpers: true,
51 experimentalDecorators: true,
52 types: [],
53 ...extraCompilerOptions,
54 };
55 // Create compiler host.
56 const compilerHost = ts.createCompilerHost(compilerOptions, true);
57 const baseFileExists = compilerHost.fileExists;
58 compilerHost.fileExists = function (compilerFileName) {
59 return (compilerFileName === fileName ||
60 !!(additionalFiles === null || additionalFiles === void 0 ? void 0 : additionalFiles[(0, path_1.basename)(compilerFileName)]) ||
61 baseFileExists(compilerFileName));
62 };
63 const baseReadFile = compilerHost.readFile;
64 compilerHost.readFile = function (compilerFileName) {
65 if (compilerFileName === fileName) {
66 return content;
67 }
68 else if (additionalFiles === null || additionalFiles === void 0 ? void 0 : additionalFiles[(0, path_1.basename)(compilerFileName)]) {
69 return additionalFiles[(0, path_1.basename)(compilerFileName)];
70 }
71 else {
72 return baseReadFile(compilerFileName);
73 }
74 };
75 // Create the TypeScript program.
76 const program = ts.createProgram([fileName], compilerOptions, compilerHost);
77 return { compilerHost, program };
78}
79exports.createTypescriptContext = createTypescriptContext;
80function transformTypescript(content, transformers, program, compilerHost) {
81 // Use given context or create a new one.
82 if (content !== undefined) {
83 const typescriptContext = createTypescriptContext(content);
84 if (!program) {
85 program = typescriptContext.program;
86 }
87 if (!compilerHost) {
88 compilerHost = typescriptContext.compilerHost;
89 }
90 }
91 else if (!program || !compilerHost) {
92 throw new Error('transformTypescript needs either `content` or a `program` and `compilerHost');
93 }
94 const outputFileName = basefileName.replace(/\.tsx?$/, '.js');
95 let outputContent;
96 // Emit.
97 const { emitSkipped, diagnostics } = program.emit(undefined, (filename, data) => {
98 if (filename === outputFileName) {
99 outputContent = data;
100 }
101 }, undefined, undefined, { before: transformers });
102 // Throw error with diagnostics if emit wasn't successfull.
103 if (emitSkipped) {
104 throw new Error(ts.formatDiagnostics(diagnostics, compilerHost));
105 }
106 // Return the transpiled js.
107 return outputContent;
108}
109exports.transformTypescript = transformTypescript;
110//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3BlY19oZWxwZXJzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvbmd0b29scy93ZWJwYWNrL3NyYy90cmFuc2Zvcm1lcnMvc3BlY19oZWxwZXJzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7Ozs7O0dBTUc7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBRUgsK0JBQWdDO0FBQ2hDLCtDQUFpQztBQUVqQywwQkFBMEI7QUFDMUIsTUFBTSxZQUFZLEdBQUcsY0FBYyxDQUFDO0FBRXBDLFNBQWdCLHVCQUF1QixDQUNyQyxPQUFlLEVBQ2YsZUFBd0MsRUFDeEMsT0FBTyxHQUFHLEtBQUssRUFDZix1QkFBMkMsRUFBRSxFQUM3QyxPQUFPLEdBQUcsS0FBSztJQUVmLE1BQU0sUUFBUSxHQUFHLFlBQVksR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUNyRCx3QkFBd0I7SUFDeEIsTUFBTSxlQUFlLEdBQXVCO1FBQzFDLGFBQWEsRUFBRSxPQUFPO1FBQ3RCLE9BQU8sRUFBRSxJQUFJO1FBQ2IsT0FBTyxFQUFFLEVBQUUsQ0FBQyxXQUFXLENBQUMsUUFBUTtRQUNoQyxnQkFBZ0IsRUFBRSxFQUFFLENBQUMsb0JBQW9CLENBQUMsTUFBTTtRQUNoRCxNQUFNLEVBQUUsRUFBRSxDQUFDLFVBQVUsQ0FBQyxNQUFNO1FBQzVCLE1BQU0sRUFBRSxFQUFFLENBQUMsWUFBWSxDQUFDLE1BQU07UUFDOUIsWUFBWSxFQUFFLElBQUk7UUFDbEIsU0FBUyxFQUFFLEtBQUs7UUFDaEIsYUFBYSxFQUFFLElBQUk7UUFDbkIsc0JBQXNCLEVBQUUsSUFBSTtRQUM1QixLQUFLLEVBQUUsRUFBRTtRQUNULEdBQUcsb0JBQW9CO0tBQ3hCLENBQUM7SUFFRix3QkFBd0I7SUFDeEIsTUFBTSxZQUFZLEdBQUcsRUFBRSxDQUFDLGtCQUFrQixDQUFDLGVBQWUsRUFBRSxJQUFJLENBQUMsQ0FBQztJQUVsRSxNQUFNLGNBQWMsR0FBRyxZQUFZLENBQUMsVUFBVSxDQUFDO0lBQy9DLFlBQVksQ0FBQyxVQUFVLEdBQUcsVUFBVSxnQkFBd0I7UUFDMUQsT0FBTyxDQUNMLGdCQUFnQixLQUFLLFFBQVE7WUFDN0IsQ0FBQyxDQUFDLENBQUEsZUFBZSxhQUFmLGVBQWUsdUJBQWYsZUFBZSxDQUFHLElBQUEsZUFBUSxFQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQTtZQUMvQyxjQUFjLENBQUMsZ0JBQWdCLENBQUMsQ0FDakMsQ0FBQztJQUNKLENBQUMsQ0FBQztJQUVGLE1BQU0sWUFBWSxHQUFHLFlBQVksQ0FBQyxRQUFRLENBQUM7SUFDM0MsWUFBWSxDQUFDLFFBQVEsR0FBRyxVQUFVLGdCQUF3QjtRQUN4RCxJQUFJLGdCQUFnQixLQUFLLFFBQVEsRUFBRTtZQUNqQyxPQUFPLE9BQU8sQ0FBQztTQUNoQjthQUFNLElBQUksZUFBZSxhQUFmLGVBQWUsdUJBQWYsZUFBZSxDQUFHLElBQUEsZUFBUSxFQUFDLGdCQUFnQixDQUFDLENBQUMsRUFBRTtZQUN4RCxPQUFPLGVBQWUsQ0FBQyxJQUFBLGVBQVEsRUFBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUM7U0FDcEQ7YUFBTTtZQUNMLE9BQU8sWUFBWSxDQUFDLGdCQUFnQixDQUFDLENBQUM7U0FDdkM7SUFDSCxDQUFDLENBQUM7SUFFRixpQ0FBaUM7SUFDakMsTUFBTSxPQUFPLEdBQUcsRUFBRSxDQUFDLGFBQWEsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxFQUFFLGVBQWUsRUFBRSxZQUFZLENBQUMsQ0FBQztJQUU1RSxPQUFPLEVBQUUsWUFBWSxFQUFFLE9BQU8sRUFBRSxDQUFDO0FBQ25DLENBQUM7QUFuREQsMERBbURDO0FBRUQsU0FBZ0IsbUJBQW1CLENBQ2pDLE9BQTJCLEVBQzNCLFlBQW9ELEVBQ3BELE9BQW9CLEVBQ3BCLFlBQThCO0lBRTlCLHlDQUF5QztJQUN6QyxJQUFJLE9BQU8sS0FBSyxTQUFTLEVBQUU7UUFDekIsTUFBTSxpQkFBaUIsR0FBRyx1QkFBdUIsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUMzRCxJQUFJLENBQUMsT0FBTyxFQUFFO1lBQ1osT0FBTyxHQUFHLGlCQUFpQixDQUFDLE9BQU8sQ0FBQztTQUNyQztRQUNELElBQUksQ0FBQyxZQUFZLEVBQUU7WUFDakIsWUFBWSxHQUFHLGlCQUFpQixDQUFDLFlBQVksQ0FBQztTQUMvQztLQUNGO1NBQU0sSUFBSSxDQUFDLE9BQU8sSUFBSSxDQUFDLFlBQVksRUFBRTtRQUNwQyxNQUFNLElBQUksS0FBSyxDQUFDLDZFQUE2RSxDQUFDLENBQUM7S0FDaEc7SUFFRCxNQUFNLGNBQWMsR0FBRyxZQUFZLENBQUMsT0FBTyxDQUFDLFNBQVMsRUFBRSxLQUFLLENBQUMsQ0FBQztJQUM5RCxJQUFJLGFBQWEsQ0FBQztJQUNsQixRQUFRO0lBQ1IsTUFBTSxFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQUUsR0FBRyxPQUFPLENBQUMsSUFBSSxDQUMvQyxTQUFTLEVBQ1QsQ0FBQyxRQUFRLEVBQUUsSUFBSSxFQUFFLEVBQUU7UUFDakIsSUFBSSxRQUFRLEtBQUssY0FBYyxFQUFFO1lBQy9CLGFBQWEsR0FBRyxJQUFJLENBQUM7U0FDdEI7SUFDSCxDQUFDLEVBQ0QsU0FBUyxFQUNULFNBQVMsRUFDVCxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQUUsQ0FDekIsQ0FBQztJQUVGLDJEQUEyRDtJQUMzRCxJQUFJLFdBQVcsRUFBRTtRQUNmLE1BQU0sSUFBSSxLQUFLLENBQUMsRUFBRSxDQUFDLGlCQUFpQixDQUFDLFdBQVcsRUFBRSxZQUFZLENBQUMsQ0FBQyxDQUFDO0tBQ2xFO0lBRUQsNEJBQTRCO0lBQzVCLE9BQU8sYUFBYSxDQUFDO0FBQ3ZCLENBQUM7QUF6Q0Qsa0RBeUNDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqXG4gKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZVxuICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZVxuICovXG5cbmltcG9ydCB7IGJhc2VuYW1lIH0gZnJvbSAncGF0aCc7XG5pbXBvcnQgKiBhcyB0cyBmcm9tICd0eXBlc2NyaXB0JztcblxuLy8gVGVzdCB0cmFuc2Zvcm0gaGVscGVycy5cbmNvbnN0IGJhc2VmaWxlTmFtZSA9ICd0ZXN0LWZpbGUudHMnO1xuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlVHlwZXNjcmlwdENvbnRleHQoXG4gIGNvbnRlbnQ6IHN0cmluZyxcbiAgYWRkaXRpb25hbEZpbGVzPzogUmVjb3JkPHN0cmluZywgc3RyaW5nPixcbiAgdXNlTGlicyA9IGZhbHNlLFxuICBleHRyYUNvbXBpbGVyT3B0aW9uczogdHMuQ29tcGlsZXJPcHRpb25zID0ge30sXG4gIGpzeEZpbGUgPSBmYWxzZSxcbikge1xuICBjb25zdCBmaWxlTmFtZSA9IGJhc2VmaWxlTmFtZSArIChqc3hGaWxlID8gJ3gnIDogJycpO1xuICAvLyBTZXQgY29tcGlsZXIgb3B0aW9ucy5cbiAgY29uc3QgY29tcGlsZXJPcHRpb25zOiB0cy5Db21waWxlck9wdGlvbnMgPSB7XG4gICAgbm9FbWl0T25FcnJvcjogdXNlTGlicyxcbiAgICBhbGxvd0pzOiB0cnVlLFxuICAgIG5ld0xpbmU6IHRzLk5ld0xpbmVLaW5kLkxpbmVGZWVkLFxuICAgIG1vZHVsZVJlc29sdXRpb246IHRzLk1vZHVsZVJlc29sdXRpb25LaW5kLk5vZGVKcyxcbiAgICBtb2R1bGU6IHRzLk1vZHVsZUtpbmQuRVMyMDIwLFxuICAgIHRhcmdldDogdHMuU2NyaXB0VGFyZ2V0LkVTMjAyMCxcbiAgICBza2lwTGliQ2hlY2s6IHRydWUsXG4gICAgc291cmNlTWFwOiBmYWxzZSxcbiAgICBpbXBvcnRIZWxwZXJzOiB0cnVlLFxuICAgIGV4cGVyaW1lbnRhbERlY29yYXRvcnM6IHRydWUsXG4gICAgdHlwZXM6IFtdLFxuICAgIC4uLmV4dHJhQ29tcGlsZXJPcHRpb25zLFxuICB9O1xuXG4gIC8vIENyZWF0ZSBjb21waWxlciBob3N0LlxuICBjb25zdCBjb21waWxlckhvc3QgPSB0cy5jcmVhdGVDb21waWxlckhvc3QoY29tcGlsZXJPcHRpb25zLCB0cnVlKTtcblxuICBjb25zdCBiYXNlRmlsZUV4aXN0cyA9IGNvbXBpbGVySG9zdC5maWxlRXhpc3RzO1xuICBjb21waWxlckhvc3QuZmlsZUV4aXN0cyA9IGZ1bmN0aW9uIChjb21waWxlckZpbGVOYW1lOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gKFxuICAgICAgY29tcGlsZXJGaWxlTmFtZSA9PT0gZmlsZU5hbWUgfHxcbiAgICAgICEhYWRkaXRpb25hbEZpbGVzPy5bYmFzZW5hbWUoY29tcGlsZXJGaWxlTmFtZSldIHx8XG4gICAgICBiYXNlRmlsZUV4aXN0cyhjb21waWxlckZpbGVOYW1lKVxuICAgICk7XG4gIH07XG5cbiAgY29uc3QgYmFzZVJlYWRGaWxlID0gY29tcGlsZXJIb3N0LnJlYWRGaWxlO1xuICBjb21waWxlckhvc3QucmVhZEZpbGUgPSBmdW5jdGlvbiAoY29tcGlsZXJGaWxlTmFtZTogc3RyaW5nKSB7XG4gICAgaWYgKGNvbXBpbGVyRmlsZU5hbWUgPT09IGZpbGVOYW1lKSB7XG4gICAgICByZXR1cm4gY29udGVudDtcbiAgICB9IGVsc2UgaWYgKGFkZGl0aW9uYWxGaWxlcz8uW2Jhc2VuYW1lKGNvbXBpbGVyRmlsZU5hbWUpXSkge1xuICAgICAgcmV0dXJuIGFkZGl0aW9uYWxGaWxlc1tiYXNlbmFtZShjb21waWxlckZpbGVOYW1lKV07XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBiYXNlUmVhZEZpbGUoY29tcGlsZXJGaWxlTmFtZSk7XG4gICAgfVxuICB9O1xuXG4gIC8vIENyZWF0ZSB0aGUgVHlwZVNjcmlwdCBwcm9ncmFtLlxuICBjb25zdCBwcm9ncmFtID0gdHMuY3JlYXRlUHJvZ3JhbShbZmlsZU5hbWVdLCBjb21waWxlck9wdGlvbnMsIGNvbXBpbGVySG9zdCk7XG5cbiAgcmV0dXJuIHsgY29tcGlsZXJIb3N0LCBwcm9ncmFtIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0cmFuc2Zvcm1UeXBlc2NyaXB0KFxuICBjb250ZW50OiBzdHJpbmcgfCB1bmRlZmluZWQsXG4gIHRyYW5zZm9ybWVyczogdHMuVHJhbnNmb3JtZXJGYWN0b3J5PHRzLlNvdXJjZUZpbGU+W10sXG4gIHByb2dyYW0/OiB0cy5Qcm9ncmFtLFxuICBjb21waWxlckhvc3Q/OiB0cy5Db21waWxlckhvc3QsXG4pOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAvLyBVc2UgZ2l2ZW4gY29udGV4dCBvciBjcmVhdGUgYSBuZXcgb25lLlxuICBpZiAoY29udGVudCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgY29uc3QgdHlwZXNjcmlwdENvbnRleHQgPSBjcmVhdGVUeXBlc2NyaXB0Q29udGV4dChjb250ZW50KTtcbiAgICBpZiAoIXByb2dyYW0pIHtcbiAgICAgIHByb2dyYW0gPSB0eXBlc2NyaXB0Q29udGV4dC5wcm9ncmFtO1xuICAgIH1cbiAgICBpZiAoIWNvbXBpbGVySG9zdCkge1xuICAgICAgY29tcGlsZXJIb3N0ID0gdHlwZXNjcmlwdENvbnRleHQuY29tcGlsZXJIb3N0O1xuICAgIH1cbiAgfSBlbHNlIGlmICghcHJvZ3JhbSB8fCAhY29tcGlsZXJIb3N0KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCd0cmFuc2Zvcm1UeXBlc2NyaXB0IG5lZWRzIGVpdGhlciBgY29udGVudGAgb3IgYSBgcHJvZ3JhbWAgYW5kIGBjb21waWxlckhvc3QnKTtcbiAgfVxuXG4gIGNvbnN0IG91dHB1dEZpbGVOYW1lID0gYmFzZWZpbGVOYW1lLnJlcGxhY2UoL1xcLnRzeD8kLywgJy5qcycpO1xuICBsZXQgb3V0cHV0Q29udGVudDtcbiAgLy8gRW1pdC5cbiAgY29uc3QgeyBlbWl0U2tpcHBlZCwgZGlhZ25vc3RpY3MgfSA9IHByb2dyYW0uZW1pdChcbiAgICB1bmRlZmluZWQsXG4gICAgKGZpbGVuYW1lLCBkYXRhKSA9PiB7XG4gICAgICBpZiAoZmlsZW5hbWUgPT09IG91dHB1dEZpbGVOYW1lKSB7XG4gICAgICAgIG91dHB1dENvbnRlbnQgPSBkYXRhO1xuICAgICAgfVxuICAgIH0sXG4gICAgdW5kZWZpbmVkLFxuICAgIHVuZGVmaW5lZCxcbiAgICB7IGJlZm9yZTogdHJhbnNmb3JtZXJzIH0sXG4gICk7XG5cbiAgLy8gVGhyb3cgZXJyb3Igd2l0aCBkaWFnbm9zdGljcyBpZiBlbWl0IHdhc24ndCBzdWNjZXNzZnVsbC5cbiAgaWYgKGVtaXRTa2lwcGVkKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKHRzLmZvcm1hdERpYWdub3N0aWNzKGRpYWdub3N0aWNzLCBjb21waWxlckhvc3QpKTtcbiAgfVxuXG4gIC8vIFJldHVybiB0aGUgdHJhbnNwaWxlZCBqcy5cbiAgcmV0dXJuIG91dHB1dENvbnRlbnQ7XG59XG4iXX0=
\No newline at end of file