保誠-保戶業務員媒合平台
HelenHuang
2022-06-09 ab4e8129d5c94ff96e6c85d0d2b66a04a052b4e5
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
const path_1 = require("path");
function parseTypeScriptConfiguration(typescript, configFileName, configFileContext, configOverwriteJSON, parseConfigFileHost) {
    const parsedConfigFileJSON = typescript.readConfigFile(configFileName, parseConfigFileHost.readFile);
    const overwrittenConfigFileJSON = Object.assign(Object.assign(Object.assign({}, (parsedConfigFileJSON.config || {})), configOverwriteJSON), { compilerOptions: Object.assign(Object.assign({}, ((parsedConfigFileJSON.config || {}).compilerOptions || {})), (configOverwriteJSON.compilerOptions || {})) });
    const parsedConfigFile = typescript.parseJsonConfigFileContent(overwrittenConfigFileJSON, parseConfigFileHost, configFileContext);
    return Object.assign(Object.assign({}, parsedConfigFile), { options: Object.assign(Object.assign({}, parsedConfigFile.options), { configFilePath: configFileName }), errors: parsedConfigFileJSON.error ? [parsedConfigFileJSON.error] : parsedConfigFile.errors });
}
exports.parseTypeScriptConfiguration = parseTypeScriptConfiguration;
function getDependenciesFromTypeScriptConfiguration(typescript, parsedConfiguration, configFileContext, parseConfigFileHost, processedConfigFiles = []) {
    var _a;
    const files = new Set(parsedConfiguration.fileNames);
    const configFilePath = parsedConfiguration.options.configFilePath;
    if (typeof configFilePath === 'string') {
        files.add(configFilePath);
    }
    const dirs = new Set(Object.keys(parsedConfiguration.wildcardDirectories || {}));
    const excluded = new Set((((_a = parsedConfiguration.raw) === null || _a === void 0 ? void 0 : _a.exclude) || []).map((path) => path_1.resolve(configFileContext, path)));
    for (const projectReference of parsedConfiguration.projectReferences || []) {
        const childConfigFilePath = typescript.resolveProjectReferencePath(projectReference);
        const childConfigContext = path_1.dirname(childConfigFilePath);
        if (processedConfigFiles.includes(childConfigFilePath)) {
            // handle circular dependencies
            continue;
        }
        const childParsedConfiguration = parseTypeScriptConfiguration(typescript, childConfigFilePath, childConfigContext, {}, parseConfigFileHost);
        const childDependencies = getDependenciesFromTypeScriptConfiguration(typescript, childParsedConfiguration, childConfigContext, parseConfigFileHost, [...processedConfigFiles, childConfigFilePath]);
        childDependencies.files.forEach((file) => {
            files.add(file);
        });
        childDependencies.dirs.forEach((dir) => {
            dirs.add(dir);
        });
    }
    const extensions = [
        typescript.Extension.Ts,
        typescript.Extension.Tsx,
        typescript.Extension.Js,
        typescript.Extension.Jsx,
        typescript.Extension.TsBuildInfo,
    ];
    return {
        files: Array.from(files).map((file) => path_1.normalize(file)),
        dirs: Array.from(dirs).map((dir) => path_1.normalize(dir)),
        excluded: Array.from(excluded).map((path) => path_1.normalize(path)),
        extensions: extensions,
    };
}
exports.getDependenciesFromTypeScriptConfiguration = getDependenciesFromTypeScriptConfiguration;
function isIncrementalCompilation(options) {
    return Boolean((options.incremental || options.composite) && !options.outFile);
}
exports.isIncrementalCompilation = isIncrementalCompilation;
function removeJsonExtension(path) {
    if (path.endsWith('.json')) {
        return path.slice(0, -'.json'.length);
    }
    else {
        return path;
    }
}
function getTsBuildInfoEmitOutputFilePath(typescript, options) {
    if (typeof typescript.getTsBuildInfoEmitOutputFilePath === 'function') {
        // old TypeScript version doesn't provides this method
        return typescript.getTsBuildInfoEmitOutputFilePath(options);
    }
    // based on the implementation from typescript
    const configFile = options.configFilePath;
    if (!isIncrementalCompilation(options)) {
        return undefined;
    }
    if (options.tsBuildInfoFile) {
        return options.tsBuildInfoFile;
    }
    const outPath = options.outFile || options.out;
    let buildInfoExtensionLess;
    if (outPath) {
        buildInfoExtensionLess = removeJsonExtension(outPath);
    }
    else {
        if (!configFile) {
            return undefined;
        }
        const configFileExtensionLess = removeJsonExtension(configFile);
        buildInfoExtensionLess = options.outDir
            ? options.rootDir
                ? path_1.resolve(options.outDir, path_1.relative(options.rootDir, configFileExtensionLess))
                : path_1.resolve(options.outDir, path_1.basename(configFileExtensionLess))
            : configFileExtensionLess;
    }
    return buildInfoExtensionLess + '.tsbuildinfo';
}
function getArtifactsFromTypeScriptConfiguration(typescript, parsedConfiguration, configFileContext, parseConfigFileHost, processedConfigFiles = []) {
    const files = new Set();
    const dirs = new Set();
    if (parsedConfiguration.fileNames.length > 0) {
        if (parsedConfiguration.options.outFile) {
            files.add(path_1.resolve(configFileContext, parsedConfiguration.options.outFile));
        }
        const tsBuildInfoPath = getTsBuildInfoEmitOutputFilePath(typescript, parsedConfiguration.options);
        if (tsBuildInfoPath) {
            files.add(path_1.resolve(configFileContext, tsBuildInfoPath));
        }
        if (parsedConfiguration.options.outDir) {
            dirs.add(path_1.resolve(configFileContext, parsedConfiguration.options.outDir));
        }
    }
    for (const projectReference of parsedConfiguration.projectReferences || []) {
        const configFile = typescript.resolveProjectReferencePath(projectReference);
        if (processedConfigFiles.includes(configFile)) {
            // handle circular dependencies
            continue;
        }
        const parsedConfiguration = parseTypeScriptConfiguration(typescript, configFile, path_1.dirname(configFile), {}, parseConfigFileHost);
        const childArtifacts = getArtifactsFromTypeScriptConfiguration(typescript, parsedConfiguration, configFileContext, parseConfigFileHost, [...processedConfigFiles, configFile]);
        childArtifacts.files.forEach((file) => {
            files.add(file);
        });
        childArtifacts.dirs.forEach((dir) => {
            dirs.add(dir);
        });
    }
    const extensions = [
        typescript.Extension.Dts,
        typescript.Extension.Js,
        typescript.Extension.TsBuildInfo,
    ];
    return {
        files: Array.from(files).map((file) => path_1.normalize(file)),
        dirs: Array.from(dirs).map((dir) => path_1.normalize(dir)),
        excluded: [],
        extensions,
    };
}
exports.getArtifactsFromTypeScriptConfiguration = getArtifactsFromTypeScriptConfiguration;