arkanalyzer 1.0.87 → 1.0.89
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/config/arkanalyzer.json +11 -0
- package/lib/Config.d.ts +27 -2
- package/lib/Config.d.ts.map +1 -1
- package/lib/Config.js +65 -2
- package/lib/Scene.d.ts +5 -2
- package/lib/Scene.d.ts.map +1 -1
- package/lib/Scene.js +34 -67
- package/lib/callgraph/pointerAnalysis/context/Context.d.ts.map +1 -1
- package/lib/callgraph/pointerAnalysis/context/Context.js +10 -12
- package/lib/callgraph/pointerAnalysis/plugins/WorkerPlugin.js +1 -1
- package/lib/cli/commands/cg.d.ts +27 -6
- package/lib/cli/commands/cg.d.ts.map +1 -1
- package/lib/cli/commands/cg.js +9 -6
- package/lib/core/base/Expr.js +3 -3
- package/lib/core/base/Position.d.ts +1 -1
- package/lib/core/base/Position.d.ts.map +1 -1
- package/lib/core/base/Position.js +2 -2
- package/lib/core/base/Type.d.ts.map +1 -1
- package/lib/core/base/Type.js +1 -2
- package/lib/core/common/Const.d.ts +1 -0
- package/lib/core/common/Const.d.ts.map +1 -1
- package/lib/core/common/Const.js +2 -1
- package/lib/core/common/IRInference.d.ts.map +1 -1
- package/lib/core/common/IRInference.js +1 -1
- package/lib/core/common/IRUtils.d.ts.map +1 -1
- package/lib/core/common/IRUtils.js +3 -33
- package/lib/core/common/ModelUtils.d.ts +6 -0
- package/lib/core/common/ModelUtils.d.ts.map +1 -1
- package/lib/core/common/ModelUtils.js +30 -0
- package/lib/core/common/SdkUtils.js +1 -1
- package/lib/core/common/TypeInference.d.ts +13 -0
- package/lib/core/common/TypeInference.d.ts.map +1 -1
- package/lib/core/common/TypeInference.js +44 -0
- package/lib/core/common/ValueUtil.d.ts +1 -1
- package/lib/core/common/ValueUtil.d.ts.map +1 -1
- package/lib/core/common/ValueUtil.js +28 -12
- package/lib/core/graph/Cfg.d.ts.map +1 -1
- package/lib/core/graph/Cfg.js +0 -2
- package/lib/core/graph/DominanceFinder.d.ts +3 -0
- package/lib/core/graph/DominanceFinder.d.ts.map +1 -1
- package/lib/core/graph/DominanceFinder.js +42 -36
- package/lib/core/graph/DominanceTree.d.ts.map +1 -1
- package/lib/core/graph/DominanceTree.js +0 -4
- package/lib/core/inference/ValueInference.d.ts.map +1 -1
- package/lib/core/inference/ValueInference.js +3 -2
- package/lib/core/inference/abc/AbcInference.d.ts.map +1 -1
- package/lib/core/inference/abc/AbcInference.js +2 -1
- package/lib/core/inference/arkts/ArkTsInference.d.ts.map +1 -1
- package/lib/core/inference/arkts/ArkTsInference.js +3 -2
- package/lib/core/model/ArkClass.d.ts +3 -0
- package/lib/core/model/ArkClass.d.ts.map +1 -1
- package/lib/core/model/ArkClass.js +32 -6
- package/lib/core/model/ArkFile.d.ts.map +1 -1
- package/lib/core/model/ArkFile.js +0 -1
- package/lib/core/model/ArkMetadata.d.ts +32 -1
- package/lib/core/model/ArkMetadata.d.ts.map +1 -1
- package/lib/core/model/ArkMetadata.js +28 -3
- package/lib/core/model/builder/ArkMetadataBuilder.d.ts +21 -0
- package/lib/core/model/builder/ArkMetadataBuilder.d.ts.map +1 -0
- package/lib/core/model/builder/ArkMetadataBuilder.js +160 -0
- package/lib/core/model/builder/ArkMethodBuilder.d.ts.map +1 -1
- package/lib/core/model/builder/ArkMethodBuilder.js +32 -26
- package/lib/frontend/FrontendBuilder.d.ts +26 -0
- package/lib/frontend/FrontendBuilder.d.ts.map +1 -0
- package/lib/frontend/FrontendBuilder.js +108 -0
- package/lib/frontend/arktsFrontend/ArktsFrontend.d.ts +16 -0
- package/lib/frontend/arktsFrontend/ArktsFrontend.d.ts.map +1 -0
- package/lib/frontend/arktsFrontend/ArktsFrontend.js +52 -0
- package/lib/frontend/cppFrontend/CppFrontend.d.ts +13 -0
- package/lib/frontend/cppFrontend/CppFrontend.d.ts.map +1 -0
- package/lib/frontend/cppFrontend/CppFrontend.js +85 -0
- package/lib/frontend/cppFrontend/ast/index.d.ts +5 -0
- package/lib/frontend/cppFrontend/ast/index.d.ts.map +1 -0
- package/lib/frontend/cppFrontend/ast/index.js +31 -0
- package/lib/frontend/cppFrontend/ast/ts/ArkCxxAstNode.d.ts.map +1 -0
- package/lib/frontend/cppFrontend/ast/ts/astParser.d.ts +25 -0
- package/lib/frontend/cppFrontend/ast/ts/astParser.d.ts.map +1 -0
- package/lib/frontend/cppFrontend/ast/ts/astParser.js +280 -0
- package/lib/frontend/cppFrontend/ast/ts/astUtils.d.ts +18 -0
- package/lib/frontend/cppFrontend/ast/ts/astUtils.d.ts.map +1 -0
- package/lib/frontend/cppFrontend/ast/ts/astUtils.js +158 -0
- package/lib/frontend/cppFrontend/ast/{const.d.ts → ts/const.d.ts} +0 -13
- package/lib/frontend/cppFrontend/ast/ts/const.d.ts.map +1 -0
- package/lib/frontend/cppFrontend/ast/ts/const.js +58 -0
- package/lib/frontend/cppFrontend/ast/ts/napi/napiApi.d.ts +8 -0
- package/lib/frontend/cppFrontend/ast/ts/napi/napiApi.d.ts.map +1 -0
- package/lib/frontend/cppFrontend/ast/ts/napi/napiApi.js +90 -0
- package/lib/frontend/cppFrontend/ast/ts/napi/napiRunner.d.ts +8 -0
- package/lib/frontend/cppFrontend/ast/ts/napi/napiRunner.d.ts.map +1 -0
- package/lib/frontend/cppFrontend/ast/ts/napi/napiRunner.js +180 -0
- package/lib/frontend/cppFrontend/common/ArkIRTransformer.d.ts +1 -1
- package/lib/frontend/cppFrontend/common/ArkIRTransformer.d.ts.map +1 -1
- package/lib/frontend/cppFrontend/common/ArkIRTransformer.js +55 -55
- package/lib/frontend/cppFrontend/common/ArkValueTransformer.d.ts +1 -1
- package/lib/frontend/cppFrontend/common/ArkValueTransformer.d.ts.map +1 -1
- package/lib/frontend/cppFrontend/common/ArkValueTransformer.js +151 -151
- package/lib/frontend/cppFrontend/common/IRInference.js +2 -2
- package/lib/frontend/cppFrontend/common/IRUtils.d.ts +1 -1
- package/lib/frontend/cppFrontend/common/IRUtils.d.ts.map +1 -1
- package/lib/frontend/cppFrontend/common/IRUtils.js +2 -2
- package/lib/frontend/cppFrontend/graph/builder/CfgBuilder.d.ts +1 -1
- package/lib/frontend/cppFrontend/graph/builder/CfgBuilder.d.ts.map +1 -1
- package/lib/frontend/cppFrontend/graph/builder/CfgBuilder.js +74 -74
- package/lib/frontend/cppFrontend/model/builder/ArkClassBuilder.d.ts +1 -1
- package/lib/frontend/cppFrontend/model/builder/ArkClassBuilder.d.ts.map +1 -1
- package/lib/frontend/cppFrontend/model/builder/ArkClassBuilder.js +3 -3
- package/lib/frontend/cppFrontend/model/builder/ArkFieldBuilder.d.ts +1 -1
- package/lib/frontend/cppFrontend/model/builder/ArkFieldBuilder.d.ts.map +1 -1
- package/lib/frontend/cppFrontend/model/builder/ArkFileBuilder.d.ts +1 -1
- package/lib/frontend/cppFrontend/model/builder/ArkFileBuilder.d.ts.map +1 -1
- package/lib/frontend/cppFrontend/model/builder/ArkFileBuilder.js +16 -17
- package/lib/frontend/cppFrontend/model/builder/ArkImportBuilder.d.ts +1 -1
- package/lib/frontend/cppFrontend/model/builder/ArkImportBuilder.d.ts.map +1 -1
- package/lib/frontend/cppFrontend/model/builder/ArkMethodBuilder.d.ts +1 -1
- package/lib/frontend/cppFrontend/model/builder/ArkMethodBuilder.d.ts.map +1 -1
- package/lib/frontend/cppFrontend/model/builder/ArkMethodBuilder.js +2 -2
- package/lib/frontend/cppFrontend/model/builder/ArkNamespaceBuilder.d.ts +1 -1
- package/lib/frontend/cppFrontend/model/builder/ArkNamespaceBuilder.d.ts.map +1 -1
- package/lib/frontend/cppFrontend/model/builder/ArkNamespaceBuilder.js +2 -2
- package/lib/frontend/cppFrontend/model/builder/BodyBuilder.d.ts +1 -1
- package/lib/frontend/cppFrontend/model/builder/BodyBuilder.d.ts.map +1 -1
- package/lib/frontend/cppFrontend/model/builder/builderUtils.d.ts +1 -1
- package/lib/frontend/cppFrontend/model/builder/builderUtils.d.ts.map +1 -1
- package/lib/frontend/cppFrontend/model/builder/builderUtils.js +3 -3
- package/lib/index.d.ts +5 -2
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +14 -6
- package/lib/pass/Dispatcher.d.ts.map +1 -1
- package/lib/pass/Dispatcher.js +0 -4
- package/lib/save/source/SourceStmt.d.ts.map +1 -1
- package/lib/save/source/SourceStmt.js +3 -1
- package/lib/utils/FileUtils.d.ts +1 -0
- package/lib/utils/FileUtils.d.ts.map +1 -1
- package/lib/utils/FileUtils.js +11 -3
- package/package.json +9 -4
- package/lib/frontend/cppFrontend/ast/ArkCxxAstNode.d.ts.map +0 -1
- package/lib/frontend/cppFrontend/ast/astUtils.d.ts +0 -51
- package/lib/frontend/cppFrontend/ast/astUtils.d.ts.map +0 -1
- package/lib/frontend/cppFrontend/ast/astUtils.js +0 -470
- package/lib/frontend/cppFrontend/ast/const.d.ts.map +0 -1
- package/lib/frontend/cppFrontend/ast/const.js +0 -134
- /package/lib/frontend/cppFrontend/ast/{ArkCxxAstNode.d.ts → ts/ArkCxxAstNode.d.ts} +0 -0
- /package/lib/frontend/cppFrontend/ast/{ArkCxxAstNode.js → ts/ArkCxxAstNode.js} +0 -0
package/config/arkanalyzer.json
CHANGED
|
@@ -6,6 +6,17 @@
|
|
|
6
6
|
".d.ets",
|
|
7
7
|
".d.ts"
|
|
8
8
|
],
|
|
9
|
+
"languages": {
|
|
10
|
+
"arkts": {
|
|
11
|
+
"enabled": true,
|
|
12
|
+
"extensions": [".ets", ".ts", ".js", ".d.ets", ".d.ts"]
|
|
13
|
+
},
|
|
14
|
+
"cpp": {
|
|
15
|
+
"enabled": false,
|
|
16
|
+
"sourceExtensions": [".cc", ".cpp", ".cxx", ".c", ".c++"],
|
|
17
|
+
"headerExtensions": [".hpp", ".h", ".hxx", ".hh"]
|
|
18
|
+
}
|
|
19
|
+
},
|
|
9
20
|
"enableLeadingComments": false,
|
|
10
21
|
"enableBuiltIn": true,
|
|
11
22
|
"enableOhModulesBody": false,
|
package/lib/Config.d.ts
CHANGED
|
@@ -23,19 +23,40 @@ export interface TsConfig {
|
|
|
23
23
|
*
|
|
24
24
|
* @param project Project root directory path.
|
|
25
25
|
* @param ohosSdkHome Optional OHOS SDK home path.
|
|
26
|
+
* @param options Optional SceneOptions.
|
|
26
27
|
* @returns SceneConfig initialized with project files and discovered SDKs.
|
|
27
28
|
*/
|
|
28
|
-
export declare function buildSceneConfigFromProject(project: string, ohosSdkHome?: string): SceneConfig;
|
|
29
|
-
|
|
29
|
+
export declare function buildSceneConfigFromProject(project: string, ohosSdkHome?: string, options?: SceneOptions): SceneConfig;
|
|
30
|
+
/**
|
|
31
|
+
* Per-language switch and optional file extension list (for tooling and front-end selection; extension lists are
|
|
32
|
+
* normalized for discovery and future use).
|
|
33
|
+
*/
|
|
34
|
+
export interface LanguageOptions {
|
|
35
|
+
enabled?: boolean;
|
|
36
|
+
extensions?: string[];
|
|
37
|
+
}
|
|
38
|
+
export interface CppLanguageOptions extends LanguageOptions {
|
|
39
|
+
sourceExtensions?: string[];
|
|
40
|
+
headerExtensions?: string[];
|
|
41
|
+
}
|
|
42
|
+
export interface SceneLanguagesOptions {
|
|
43
|
+
arkts?: LanguageOptions;
|
|
44
|
+
cpp?: CppLanguageOptions;
|
|
45
|
+
[option: string]: LanguageOptions | undefined;
|
|
46
|
+
}
|
|
47
|
+
export type SceneOptionsValue = string | number | boolean | (string | number)[] | string[] | SceneLanguagesOptions | null | undefined;
|
|
30
48
|
export interface SceneOptions {
|
|
31
49
|
supportFileExts?: string[];
|
|
32
50
|
ignoreFileNames?: string[];
|
|
33
51
|
enableLeadingComments?: boolean;
|
|
34
52
|
enableTrailingComments?: boolean;
|
|
53
|
+
enableJSDoc?: boolean;
|
|
35
54
|
enableBuiltIn?: boolean;
|
|
36
55
|
tsconfig?: string;
|
|
37
56
|
isScanAbc?: boolean;
|
|
38
57
|
sdkGlobalFolders?: string[];
|
|
58
|
+
/** Optional multi-language front-end section; defaults are merged in {@link SceneConfig} construction. */
|
|
59
|
+
languages?: SceneLanguagesOptions;
|
|
39
60
|
[option: string]: SceneOptionsValue;
|
|
40
61
|
}
|
|
41
62
|
export declare class SceneConfig {
|
|
@@ -105,5 +126,9 @@ export declare class SceneConfig {
|
|
|
105
126
|
getSdksObj(): Sdk[];
|
|
106
127
|
private getDefaultConfigPath;
|
|
107
128
|
private loadDefaultConfig;
|
|
129
|
+
private appendCppExtsToDefaultOptionsIfAstJsonDumperAvailable;
|
|
130
|
+
private normalizeLanguageOptions;
|
|
131
|
+
private mergeEnabledLanguageExtensionsIntoSupportFileExts;
|
|
132
|
+
private uniqueFileExtensions;
|
|
108
133
|
}
|
|
109
134
|
//# sourceMappingURL=Config.d.ts.map
|
package/lib/Config.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Config.d.ts","sourceRoot":"","sources":["../src/Config.ts"],"names":[],"mappings":"AAmBA,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"Config.d.ts","sourceRoot":"","sources":["../src/Config.ts"],"names":[],"mappings":"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"}
|
package/lib/Config.js
CHANGED
|
@@ -46,6 +46,7 @@ const path_1 = __importDefault(require("path"));
|
|
|
46
46
|
const logger_1 = __importStar(require("./utils/logger"));
|
|
47
47
|
const getAllFiles_1 = require("./utils/getAllFiles");
|
|
48
48
|
const FileUtils_1 = require("./utils/FileUtils");
|
|
49
|
+
const ast_1 = require("./frontend/cppFrontend/ast");
|
|
49
50
|
const logger = logger_1.default.getLogger(logger_1.LOG_MODULE_TYPE.ARKANALYZER, 'Config');
|
|
50
51
|
function collectSdksFromOhosSdkHome(explicitHome) {
|
|
51
52
|
const sdkHome = explicitHome || process.env.OHOS_SDK_HOME;
|
|
@@ -74,10 +75,11 @@ function collectSdksFromOhosSdkHome(explicitHome) {
|
|
|
74
75
|
*
|
|
75
76
|
* @param project Project root directory path.
|
|
76
77
|
* @param ohosSdkHome Optional OHOS SDK home path.
|
|
78
|
+
* @param options Optional SceneOptions.
|
|
77
79
|
* @returns SceneConfig initialized with project files and discovered SDKs.
|
|
78
80
|
*/
|
|
79
|
-
function buildSceneConfigFromProject(project, ohosSdkHome) {
|
|
80
|
-
const config = new SceneConfig();
|
|
81
|
+
function buildSceneConfigFromProject(project, ohosSdkHome, options) {
|
|
82
|
+
const config = new SceneConfig(options);
|
|
81
83
|
const sdks = collectSdksFromOhosSdkHome(ohosSdkHome);
|
|
82
84
|
config.buildConfig(path_1.default.basename(project), project, sdks);
|
|
83
85
|
return config;
|
|
@@ -85,6 +87,7 @@ function buildSceneConfigFromProject(project, ohosSdkHome) {
|
|
|
85
87
|
exports.buildSceneConfigFromProject = buildSceneConfigFromProject;
|
|
86
88
|
const CONFIG_FILENAME = 'arkanalyzer.json';
|
|
87
89
|
const DEFAULT_CONFIG_FILE = path_1.default.join(__dirname, '../config', CONFIG_FILENAME);
|
|
90
|
+
const CPP_SOURCE_FILE_EXTS = (0, ast_1.getCxxSourceFileExtensions)();
|
|
88
91
|
class SceneConfig {
|
|
89
92
|
constructor(options) {
|
|
90
93
|
this.targetProjectName = '';
|
|
@@ -101,6 +104,9 @@ class SceneConfig {
|
|
|
101
104
|
// Seed defaults before merging `config/arkanalyzer.json`. Same values remain if that file is missing or invalid.
|
|
102
105
|
this.options = { supportFileExts: ['.ets', '.ts'] };
|
|
103
106
|
this.loadDefaultConfig(options);
|
|
107
|
+
this.appendCppExtsToDefaultOptionsIfAstJsonDumperAvailable();
|
|
108
|
+
this.normalizeLanguageOptions();
|
|
109
|
+
this.mergeEnabledLanguageExtensionsIntoSupportFileExts();
|
|
104
110
|
}
|
|
105
111
|
getOptions() {
|
|
106
112
|
return this.options;
|
|
@@ -226,6 +232,8 @@ class SceneConfig {
|
|
|
226
232
|
if (configurations.options) {
|
|
227
233
|
this.options = Object.assign(Object.assign({}, this.options), configurations.options);
|
|
228
234
|
}
|
|
235
|
+
this.normalizeLanguageOptions();
|
|
236
|
+
this.mergeEnabledLanguageExtensionsIntoSupportFileExts();
|
|
229
237
|
this.buildConfig(targetProjectName, targetProjectDirectory, sdks);
|
|
230
238
|
}
|
|
231
239
|
else {
|
|
@@ -312,5 +320,60 @@ class SceneConfig {
|
|
|
312
320
|
this.options = Object.assign(Object.assign({}, this.options), options);
|
|
313
321
|
}
|
|
314
322
|
}
|
|
323
|
+
appendCppExtsToDefaultOptionsIfAstJsonDumperAvailable() {
|
|
324
|
+
if (!(0, ast_1.isAstJsonDumperAvailable)()) {
|
|
325
|
+
return;
|
|
326
|
+
}
|
|
327
|
+
const configuredExts = Array.isArray(this.options.supportFileExts) ? this.options.supportFileExts : [];
|
|
328
|
+
const missingCppExts = CPP_SOURCE_FILE_EXTS.filter(ext => !configuredExts.includes(ext));
|
|
329
|
+
if (missingCppExts.length === 0) {
|
|
330
|
+
return;
|
|
331
|
+
}
|
|
332
|
+
this.options.supportFileExts = [...configuredExts, ...missingCppExts];
|
|
333
|
+
}
|
|
334
|
+
normalizeLanguageOptions() {
|
|
335
|
+
var _a, _b, _c, _d;
|
|
336
|
+
const from = this.options.languages;
|
|
337
|
+
if (!from) {
|
|
338
|
+
return;
|
|
339
|
+
}
|
|
340
|
+
const normalized = {};
|
|
341
|
+
if (from.arkts) {
|
|
342
|
+
normalized.arkts = Object.assign(Object.assign({}, from.arkts), { extensions: this.uniqueFileExtensions((_a = from.arkts.extensions) !== null && _a !== void 0 ? _a : []) });
|
|
343
|
+
}
|
|
344
|
+
if (from.cpp) {
|
|
345
|
+
normalized.cpp = Object.assign(Object.assign({}, from.cpp), { extensions: this.uniqueFileExtensions((_b = from.cpp.extensions) !== null && _b !== void 0 ? _b : []), sourceExtensions: this.uniqueFileExtensions((_c = from.cpp.sourceExtensions) !== null && _c !== void 0 ? _c : []), headerExtensions: this.uniqueFileExtensions((_d = from.cpp.headerExtensions) !== null && _d !== void 0 ? _d : []) });
|
|
346
|
+
}
|
|
347
|
+
this.options.languages = normalized;
|
|
348
|
+
}
|
|
349
|
+
mergeEnabledLanguageExtensionsIntoSupportFileExts() {
|
|
350
|
+
var _a, _b, _c, _d, _e, _f, _g;
|
|
351
|
+
const languages = this.options.languages;
|
|
352
|
+
if (!languages) {
|
|
353
|
+
return;
|
|
354
|
+
}
|
|
355
|
+
const merged = [...((_a = this.options.supportFileExts) !== null && _a !== void 0 ? _a : [])];
|
|
356
|
+
if (((_b = languages.arkts) === null || _b === void 0 ? void 0 : _b.enabled) === true) {
|
|
357
|
+
merged.push(...((_c = languages.arkts.extensions) !== null && _c !== void 0 ? _c : []));
|
|
358
|
+
}
|
|
359
|
+
if (((_d = languages.cpp) === null || _d === void 0 ? void 0 : _d.enabled) === true) {
|
|
360
|
+
merged.push(...((_e = languages.cpp.extensions) !== null && _e !== void 0 ? _e : []));
|
|
361
|
+
merged.push(...((_f = languages.cpp.sourceExtensions) !== null && _f !== void 0 ? _f : []));
|
|
362
|
+
merged.push(...((_g = languages.cpp.headerExtensions) !== null && _g !== void 0 ? _g : []));
|
|
363
|
+
}
|
|
364
|
+
this.options.supportFileExts = this.uniqueFileExtensions(merged);
|
|
365
|
+
}
|
|
366
|
+
uniqueFileExtensions(extensions) {
|
|
367
|
+
const seen = new Set();
|
|
368
|
+
const out = [];
|
|
369
|
+
for (const ext of extensions) {
|
|
370
|
+
const normalized = ext.toLowerCase();
|
|
371
|
+
if (!seen.has(normalized)) {
|
|
372
|
+
seen.add(normalized);
|
|
373
|
+
out.push(normalized);
|
|
374
|
+
}
|
|
375
|
+
}
|
|
376
|
+
return out;
|
|
377
|
+
}
|
|
315
378
|
}
|
|
316
379
|
exports.SceneConfig = SceneConfig;
|
package/lib/Scene.d.ts
CHANGED
|
@@ -101,10 +101,9 @@ export declare class Scene {
|
|
|
101
101
|
*/
|
|
102
102
|
private updateOrAddDefaultConstructors;
|
|
103
103
|
private buildAllMethodBody;
|
|
104
|
-
private findCCJsonPath;
|
|
105
104
|
private genArkFiles;
|
|
106
105
|
private getFilesOrderByDependency;
|
|
107
|
-
|
|
106
|
+
getDependencyFilesDeeply(projectFile: string): void;
|
|
108
107
|
private isRepeatBuildFile;
|
|
109
108
|
private addArkFile2ModuleScene;
|
|
110
109
|
private findDependencyFiles;
|
|
@@ -153,6 +152,7 @@ export declare class Scene {
|
|
|
153
152
|
getProjectName(): string;
|
|
154
153
|
getProjectFiles(): string[];
|
|
155
154
|
getSdkGlobal(globalName: string): ArkExport | null;
|
|
155
|
+
getSdkGlobalMap(): Map<string, ArkExport>;
|
|
156
156
|
/**
|
|
157
157
|
* Returns the file based on its signature.
|
|
158
158
|
* If no file can be found according to the input signature, **null** will be returned.
|
|
@@ -174,6 +174,7 @@ export declare class Scene {
|
|
|
174
174
|
*/
|
|
175
175
|
getFile(fileSignature: FileSignature): ArkFile | null;
|
|
176
176
|
getUnhandledFilePaths(): string[];
|
|
177
|
+
addUnhandledFilePath(filePath: string): void;
|
|
177
178
|
getUnhandledSdkFilePaths(): string[];
|
|
178
179
|
setFile(file: ArkFile): void;
|
|
179
180
|
hasSdkFile(fileSignature: FileSignature): boolean;
|
|
@@ -271,6 +272,7 @@ export declare class Scene {
|
|
|
271
272
|
/** Obtain the header file directories of the input C++ project dependencies. */
|
|
272
273
|
getIncludeDirs(): string[];
|
|
273
274
|
getCcjsonPath(): string;
|
|
275
|
+
setCcjsonPath(ccjsonPath: string): void;
|
|
274
276
|
getCppAstPath(): string;
|
|
275
277
|
/**
|
|
276
278
|
* Infer type for each non-default method. It infers the type of each field/local/reference.
|
|
@@ -333,6 +335,7 @@ export declare class ModuleScene {
|
|
|
333
335
|
private moduleOhPkgFilePath;
|
|
334
336
|
private ohPkgContent;
|
|
335
337
|
constructor(projectScene: Scene);
|
|
338
|
+
getProjectScene(): Scene;
|
|
336
339
|
ModuleSceneBuilder(moduleName: string, modulePath: string, supportFileExts: string[], recursively?: boolean): void;
|
|
337
340
|
ModuleScenePartiallyBuilder(moduleName: string, modulePath: string): void;
|
|
338
341
|
/**
|
package/lib/Scene.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Scene.d.ts","sourceRoot":"","sources":["../src/Scene.ts"],"names":[],"mappings":"AAkBA,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,GAAG,EAAY,MAAM,UAAU,CAAC;AAGpE,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAC1D,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AACjD,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AACnD,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AACzD,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,eAAe,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAE/G,OAAO,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"Scene.d.ts","sourceRoot":"","sources":["../src/Scene.ts"],"names":[],"mappings":"AAkBA,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,GAAG,EAAY,MAAM,UAAU,CAAC;AAGpE,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAC1D,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AACjD,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AACnD,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AACzD,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,eAAe,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAE/G,OAAO,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAI1C,OAAO,EAAE,SAAS,EAA0B,MAAM,wBAAwB,CAAC;AAQ3E,OAAO,EAAE,SAAS,EAAE,MAAM,6BAA6B,CAAC;AAiBxD,oBAAY,eAAe;IACvB,UAAU,IAAA;IACV,YAAY,IAAA;IACZ,UAAU,IAAA;IACV,WAAW,IAAA;IACX,eAAe,IAAA;IACf,gBAAgB,IAAA;IAChB,aAAa,IAAA;CAChB;AAED;;;GAGG;AACH,qBAAa,KAAK;IACd,OAAO,CAAC,WAAW,CAAc;IACjC,OAAO,CAAC,YAAY,CAAgB;IACpC,OAAO,CAAC,cAAc,CAAc;IACpC,OAAO,CAAC,WAAW,CAAgB;IACnC,OAAO,CAAC,UAAU,CAAc;IAChC,OAAO,CAAC,UAAU,CAAc;IAEhC,OAAO,CAAC,eAAe,CAAuC;IAC9D,OAAO,CAAC,kBAAkB,CAAkD;IAE5E,OAAO,CAAC,YAAY,CAAiC;IACrD,OAAO,CAAC,aAAa,CAA+B;IAGpD,OAAO,CAAC,YAAY,CAAoC;IAGxD,OAAO,CAAC,QAAQ,CAAmC;IACnD,OAAO,CAAC,aAAa,CAAwC;IAC7D,OAAO,CAAC,UAAU,CAAoC;IACtD,OAAO,CAAC,UAAU,CAAqC;IAEvD,OAAO,CAAC,cAAc,CAAmC;IACzD,OAAO,CAAC,YAAY,CAAwD;IAC5E,OAAO,CAAC,eAAe,CAAsF;IAC7G,OAAO,CAAC,aAAa,CAAc;IACnC,OAAO,CAAC,YAAY,CAAgC;IACpD,OAAO,CAAC,SAAS,CAAkC;IACnD,OAAO,CAAC,qBAAqB,CAAmC;IAChE,OAAO,CAAC,wBAAwB,CAAC,CAAwC;IACzE,OAAO,CAAC,OAAO,CAAC,CAAqB;IAErC,OAAO,CAAC,UAAU,CAA+C;IACjE,OAAO,CAAC,aAAa,CAAoC;IAEzD,OAAO,CAAC,OAAO,CAAgB;IAE/B,OAAO,CAAC,kBAAkB,CAAkC;IAC5D,OAAO,CAAC,qBAAqB,CAAgB;;IAStC,OAAO,IAAI,IAAI;IAOf,UAAU,IAAI,YAAY;IAI1B,aAAa,IAAI,eAAe;IAIhC,YAAY,IAAI,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC;IAInC,wBAAwB,IAAI,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC;IAIhD,KAAK,IAAI,IAAI;IAoBb,QAAQ,IAAI,eAAe;IAIlC;;;;;;;;;;;;;;;;;;OAkBG;IACI,wBAAwB,CAAC,WAAW,EAAE,WAAW,GAAG,IAAI;IAKxD,mBAAmB,CAAC,WAAW,EAAE,WAAW,GAAG,IAAI;IAK1D;;;;OAIG;IACI,cAAc,CAAC,WAAW,EAAE,WAAW,GAAG,IAAI;IA8DrD,OAAO,CAAC,iBAAiB;IAuBzB,OAAO,CAAC,cAAc;IAwBtB,OAAO,CAAC,sBAAsB;IAa9B,OAAO,CAAC,eAAe;IAYvB;;;;;;;;OAQG;IACH,OAAO,CAAC,8BAA8B;IAmBtC,OAAO,CAAC,kBAAkB;IAoD1B,OAAO,CAAC,WAAW;IAMnB,OAAO,CAAC,yBAAyB;IAQ1B,wBAAwB,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI;IAoC1D,OAAO,CAAC,iBAAiB;IASzB,OAAO,CAAC,sBAAsB;IAgB9B,OAAO,CAAC,mBAAmB;IAU3B,OAAO,CAAC,SAAS;IAejB,OAAO,CAAC,0BAA0B;IAOlC,OAAO,CAAC,kBAAkB;IAgB1B,OAAO,CAAC,mBAAmB;IAe3B,OAAO,CAAC,sBAAsB;IAS9B,OAAO,CAAC,oBAAoB;IAiB5B,OAAO,CAAC,uBAAuB;IAW/B,OAAO,CAAC,+BAA+B;IAoBvC,OAAO,CAAC,uBAAuB;IA6B/B,OAAO,CAAC,sBAAsB;IAc9B,OAAO,CAAC,aAAa;IAKrB,OAAO,CAAC,0BAA0B;IAIlC;;;OAGG;IACH,OAAO,CAAC,QAAQ;IAUhB,OAAO,CAAC,eAAe;IAWvB,OAAO,CAAC,uBAAuB;IA4B/B;;;;OAIG;IACI,yBAAyB,IAAI,IAAI;IAYxC,OAAO,CAAC,oBAAoB;IAUrB,gBAAgB,CAAC,UAAU,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,EAAE,GAAG,IAAI;IA6BhG,OAAO,CAAC,yBAAyB;IAoBjC;;;;;;;;OAQG;IACI,iBAAiB,IAAI,MAAM;IAIlC;;;OAGG;IACI,cAAc,IAAI,MAAM;IAIxB,eAAe,IAAI,MAAM,EAAE;IAI3B,YAAY,CAAC,UAAU,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI;IAIlD,eAAe,IAAI,GAAG,CAAC,MAAM,EAAE,SAAS,CAAC;IAIhD;;;;;;;;;;;;;;;;;;OAkBG;IACI,OAAO,CAAC,aAAa,EAAE,aAAa,GAAG,OAAO,GAAG,IAAI;IAWrD,qBAAqB,IAAI,MAAM,EAAE;IAIjC,oBAAoB,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;IAO5C,wBAAwB,IAAI,MAAM,EAAE;IAIpC,OAAO,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI;IAI5B,UAAU,CAAC,aAAa,EAAE,aAAa,GAAG,OAAO;IAIxD;;;;;;;;;;;;;;;;;;;;;;;;;;;OA2BG;IACI,QAAQ,IAAI,OAAO,EAAE;IAIrB,gBAAgB,IAAI,GAAG,CAAC,MAAM,EAAE,QAAQ,CAAC;IAIzC,cAAc,IAAI,OAAO,EAAE;IAI3B,eAAe,IAAI,GAAG,CAAC,MAAM,EAAE,GAAG,EAAE,CAAC;IAIrC,gBAAgB,IAAI,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC;IAIpC,YAAY,CAAC,kBAAkB,EAAE,kBAAkB,GAAG,YAAY,GAAG,IAAI;IAgBhF,OAAO,CAAC,uBAAuB;IAW/B,OAAO,CAAC,gBAAgB;IAWjB,aAAa,IAAI,YAAY,EAAE;IAItC;;;;OAIG;IACI,QAAQ,CAAC,cAAc,EAAE,cAAc,GAAG,QAAQ,GAAG,IAAI;IAsBhE,OAAO,CAAC,aAAa;IAoBd,UAAU,IAAI,QAAQ,EAAE;IAIxB,SAAS,CAAC,eAAe,EAAE,eAAe,EAAE,OAAO,CAAC,EAAE,OAAO,GAAG,SAAS,GAAG,IAAI;IAgBvF,OAAO,CAAC,aAAa;IAerB;;;;;;;;;;;;;;;;;;;;;;;;OAwBG;IACI,UAAU,IAAI,SAAS,EAAE;IAIzB,eAAe,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI;IAIxC,YAAY,CAAC,MAAM,EAAE,SAAS,GAAG,OAAO;IAIxC,WAAW,CAAC,QAAQ,EAAE,QAAQ,GAAG,OAAO;IAIxC,eAAe,CAAC,SAAS,EAAE,YAAY,GAAG,OAAO;IAIjD,UAAU,CAAC,IAAI,EAAE,OAAO,GAAG,OAAO;IAIlC,aAAa,IAAI,OAAO;IAKxB,cAAc,IAAI,eAAe,EAAE;IAI1C,+CAA+C;IACxC,eAAe,IAAI,YAAY;IAI/B,eAAe,IAAI;QAAE,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CAAA;KAAE;IAI3C,kBAAkB,IAAI,GAAG,CAAC,MAAM,EAAE;QAAE,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CAAA;KAAE,CAAC;IAI3D,gBAAgB,IAAI,MAAM;IAI1B,gBAAgB,CAAC,WAAW,EAAE,eAAe,EAAE,GAAG,SAAS;IAO3D,gBAAgB,CAAC,WAAW,EAAE,eAAe,EAAE,GAAG,SAAS;IAOlE,gFAAgF;IACzE,cAAc,IAAI,MAAM,EAAE;IAI1B,aAAa,IAAI,MAAM;IAIvB,aAAa,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI;IAIvC,aAAa,IAAI,MAAM;IAI9B;;;;;;;;;;;OAWG;IACI,UAAU,IAAI,IAAI;IAczB;;;;;OAKG;IACI,aAAa,IAAI,IAAI;IAkB5B;;;;;;;;;;;;;OAaG;IACI,gBAAgB,IAAI,IAAI;IAU/B,OAAO,CAAC,YAAY;IAwBpB,OAAO,CAAC,oBAAoB;IAoC5B,OAAO,CAAC,sBAAsB;IAsCvB,WAAW,IAAI,GAAG,CAAC,aAAa,GAAG,kBAAkB,EAAE,QAAQ,EAAE,CAAC;IA8BzE,OAAO,CAAC,WAAW;IA+BnB,OAAO,CAAC,mBAAmB;IAoC3B,OAAO,CAAC,mBAAmB;IAyC3B,OAAO,CAAC,oBAAoB;IAUrB,oBAAoB,IAAI,GAAG,CAAC,aAAa,GAAG,kBAAkB,EAAE,KAAK,EAAE,CAAC;IAoCxE,oBAAoB,IAAI,SAAS,EAAE;IAUnC,cAAc,IAAI,OAAO;IAIzB,cAAc,CAAC,UAAU,EAAE,MAAM,GAAG,WAAW,GAAG,SAAS;IAI3D,iBAAiB,IAAI,GAAG,CAAC,MAAM,EAAE,WAAW,CAAC;IAI7C,2BAA2B,IAAI;QAAE,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAA;KAAE,GAAG,SAAS;IAIpE,UAAU,IAAI,MAAM,GAAG,SAAS;CAG1C;AAED,qBAAa,WAAW;IACpB,OAAO,CAAC,YAAY,CAAQ;IAC5B,OAAO,CAAC,UAAU,CAAc;IAChC,OAAO,CAAC,UAAU,CAAc;IAChC,OAAO,CAAC,aAAa,CAAmC;IAExD,OAAO,CAAC,mBAAmB,CAAc;IACzC,OAAO,CAAC,YAAY,CAAgC;gBAExC,YAAY,EAAE,KAAK;IAIxB,eAAe,IAAI,KAAK;IAIxB,kBAAkB,CAAC,UAAU,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,EAAE,EAAE,WAAW,GAAE,OAAe,GAAG,IAAI;IAczH,2BAA2B,CAAC,UAAU,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,IAAI;IAUhF;;OAEG;IACH,OAAO,CAAC,sBAAsB;IAO9B;;;OAGG;IACI,aAAa,IAAI,MAAM;IAIvB,aAAa,IAAI,MAAM;IAIvB,gBAAgB,IAAI,MAAM;IAI1B,eAAe,IAAI;QAAE,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CAAA;KAAE;IAI3C,iBAAiB,IAAI,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC;IAIzC,UAAU,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI;IAIzC,OAAO,CAAC,WAAW;CAItB"}
|
package/lib/Scene.js
CHANGED
|
@@ -50,19 +50,18 @@ const ArkFile_1 = require("./core/model/ArkFile");
|
|
|
50
50
|
const ArkNamespace_1 = require("./core/model/ArkNamespace");
|
|
51
51
|
const ArkSignature_1 = require("./core/model/ArkSignature");
|
|
52
52
|
const logger_1 = __importStar(require("./utils/logger"));
|
|
53
|
-
const ArkFileBuilder_1 = require("./core/model/builder/ArkFileBuilder");
|
|
54
53
|
const json5parser_1 = require("./utils/json5parser");
|
|
55
54
|
const getAllFiles_1 = require("./utils/getAllFiles");
|
|
56
55
|
const FileUtils_1 = require("./utils/FileUtils");
|
|
57
56
|
const ArkExport_1 = require("./core/model/ArkExport");
|
|
58
57
|
const ArkMethodBuilder_1 = require("./core/model/builder/ArkMethodBuilder");
|
|
59
58
|
const ArkMethodBuilder_2 = require("./frontend/cppFrontend/model/builder/ArkMethodBuilder");
|
|
60
|
-
const const_1 = require("./frontend/cppFrontend/ast/const");
|
|
61
59
|
const Const_1 = require("./core/common/Const");
|
|
62
60
|
const CallGraph_1 = require("./callgraph/model/CallGraph");
|
|
63
61
|
const CallGraphBuilder_1 = require("./callgraph/model/builder/CallGraphBuilder");
|
|
64
|
-
const ArkFileBuilder_2 = require("./frontend/cppFrontend/model/builder/ArkFileBuilder");
|
|
65
62
|
const IRInference_1 = require("./frontend/cppFrontend/common/IRInference");
|
|
63
|
+
const ArktsFrontend_1 = require("./frontend/arktsFrontend/ArktsFrontend");
|
|
64
|
+
const FrontendBuilder_1 = require("./frontend/FrontendBuilder");
|
|
66
65
|
const TSConst_1 = require("./core/common/TSConst");
|
|
67
66
|
const EtsConst_1 = require("./core/common/EtsConst");
|
|
68
67
|
const SdkUtils_1 = require("./core/common/SdkUtils");
|
|
@@ -70,10 +69,8 @@ const PointerAnalysisConfig_1 = require("./callgraph/pointerAnalysis/PointerAnal
|
|
|
70
69
|
const ValueUtil_1 = require("./core/common/ValueUtil");
|
|
71
70
|
const Inference_1 = require("./core/inference/Inference");
|
|
72
71
|
const IRInference_2 = require("./core/common/IRInference");
|
|
73
|
-
const astUtils_1 = require("./frontend/cppFrontend/ast/astUtils");
|
|
74
72
|
const ModuleUtils_1 = require("./utils/ModuleUtils");
|
|
75
73
|
const logger = logger_1.default.getLogger(logger_1.LOG_MODULE_TYPE.ARKANALYZER, 'Scene');
|
|
76
|
-
const CXX_HEADER_EXTENSION_SET = (0, const_1.getCxxHeaderFileExtensionSet)();
|
|
77
74
|
var SceneBuildStage;
|
|
78
75
|
(function (SceneBuildStage) {
|
|
79
76
|
SceneBuildStage[SceneBuildStage["BUILD_INIT"] = 0] = "BUILD_INIT";
|
|
@@ -406,37 +403,8 @@ class Scene {
|
|
|
406
403
|
ModelUtils_1.ModelUtils.dispose();
|
|
407
404
|
this.buildStage = SceneBuildStage.METHOD_DONE;
|
|
408
405
|
}
|
|
409
|
-
findCCJsonPath(file, ccjsonPath) {
|
|
410
|
-
const ext = path_1.default.extname(file).toLowerCase();
|
|
411
|
-
const isHeader = CXX_HEADER_EXTENSION_SET.has(ext);
|
|
412
|
-
let currentCcjsonPath = '';
|
|
413
|
-
if (!isHeader) {
|
|
414
|
-
currentCcjsonPath = (0, astUtils_1.findCompileCommands)(file);
|
|
415
|
-
}
|
|
416
|
-
return currentCcjsonPath === '' ? ccjsonPath : currentCcjsonPath;
|
|
417
|
-
}
|
|
418
406
|
genArkFiles() {
|
|
419
|
-
|
|
420
|
-
logger.trace('=== parse file:', file);
|
|
421
|
-
try {
|
|
422
|
-
const arkFile = new ArkFile_1.ArkFile(FileUtils_1.FileUtils.getFileLanguage(file, this.fileLanguages));
|
|
423
|
-
arkFile.setScene(this);
|
|
424
|
-
// CXXTodo: Distinguish between C++ and TS/ArkTS. Call different builder functions based on file language.
|
|
425
|
-
if (arkFile.getLanguage() === ArkFile_1.Language.CXX) {
|
|
426
|
-
this.ccjsonPath = this.findCCJsonPath(file, this.ccjsonPath);
|
|
427
|
-
(0, ArkFileBuilder_2.buildArkFileFromFile)(file, this.realProjectDir, arkFile, this.projectName, this.includeDirs);
|
|
428
|
-
}
|
|
429
|
-
else {
|
|
430
|
-
(0, ArkFileBuilder_1.buildArkFileFromFile)(file, this.realProjectDir, arkFile, this.projectName);
|
|
431
|
-
}
|
|
432
|
-
this.setFile(arkFile);
|
|
433
|
-
}
|
|
434
|
-
catch (error) {
|
|
435
|
-
logger.error('Error parsing file:', file, error);
|
|
436
|
-
this.unhandledFilePaths.add(file);
|
|
437
|
-
return;
|
|
438
|
-
}
|
|
439
|
-
});
|
|
407
|
+
FrontendBuilder_1.FrontendBuilder.buildFilesIntoArkFiles(this, this.projectFiles);
|
|
440
408
|
this.buildAllMethodBody();
|
|
441
409
|
this.updateOrAddDefaultConstructors();
|
|
442
410
|
}
|
|
@@ -460,13 +428,7 @@ class Scene {
|
|
|
460
428
|
try {
|
|
461
429
|
const arkFile = new ArkFile_1.ArkFile(FileUtils_1.FileUtils.getFileLanguage(projectFile, this.fileLanguages));
|
|
462
430
|
arkFile.setScene(this);
|
|
463
|
-
|
|
464
|
-
if (arkFile.getLanguage() === ArkFile_1.Language.CXX) {
|
|
465
|
-
(0, ArkFileBuilder_2.buildArkFileFromFile)(projectFile, this.getRealProjectDir(), arkFile, this.getProjectName(), this.includeDirs);
|
|
466
|
-
}
|
|
467
|
-
else {
|
|
468
|
-
(0, ArkFileBuilder_1.buildArkFileFromFile)(projectFile, this.getRealProjectDir(), arkFile, this.getProjectName());
|
|
469
|
-
}
|
|
431
|
+
FrontendBuilder_1.FrontendBuilder.buildProjectFileIntoArkFile(this, projectFile, arkFile);
|
|
470
432
|
for (const [modulePath, moduleName] of this.modulePath2NameMap) {
|
|
471
433
|
if (arkFile.getFilePath().startsWith(modulePath)) {
|
|
472
434
|
this.addArkFile2ModuleScene(modulePath, moduleName, arkFile);
|
|
@@ -488,10 +450,10 @@ class Scene {
|
|
|
488
450
|
}
|
|
489
451
|
}
|
|
490
452
|
isRepeatBuildFile(projectFile) {
|
|
491
|
-
|
|
492
|
-
|
|
493
|
-
|
|
494
|
-
|
|
453
|
+
const relativePath = path_1.default.relative(this.getRealProjectDir(), projectFile);
|
|
454
|
+
if (!relativePath.startsWith('..') && !path_1.default.isAbsolute(relativePath)) {
|
|
455
|
+
const mapKey = (0, FileUtils_1.getFileSignatureMapKey)(this.getProjectName(), relativePath);
|
|
456
|
+
return this.filesMap.has(mapKey);
|
|
495
457
|
}
|
|
496
458
|
return false;
|
|
497
459
|
}
|
|
@@ -696,12 +658,22 @@ class Scene {
|
|
|
696
658
|
try {
|
|
697
659
|
const arkFile = new ArkFile_1.ArkFile(FileUtils_1.FileUtils.getFileLanguage(file, this.fileLanguages));
|
|
698
660
|
arkFile.setScene(this);
|
|
699
|
-
|
|
661
|
+
ArktsFrontend_1.ArktsFrontend.buildArkFileFromSdkPath(file, sdkPath, arkFile, sdkName);
|
|
700
662
|
ModelUtils_1.ModelUtils.getAllClassesInFile(arkFile).forEach(cls => {
|
|
701
663
|
var _a, _b;
|
|
702
664
|
(_a = cls.getDefaultArkMethod()) === null || _a === void 0 ? void 0 : _a.buildBody();
|
|
703
665
|
(_b = cls.getDefaultArkMethod()) === null || _b === void 0 ? void 0 : _b.freeBodyBuilder();
|
|
704
666
|
});
|
|
667
|
+
// Release all method builders in SDK file to avoid retaining AST/build context in memory.
|
|
668
|
+
ModelUtils_1.ModelUtils.getAllMethodsInFile(arkFile).forEach(method => {
|
|
669
|
+
var _a;
|
|
670
|
+
if (((_a = method.getDeclaringArkFile()) === null || _a === void 0 ? void 0 : _a.getLanguage()) === ArkFile_1.Language.CXX) {
|
|
671
|
+
method.freeCxxBodyBuilder();
|
|
672
|
+
}
|
|
673
|
+
else {
|
|
674
|
+
method.freeBodyBuilder();
|
|
675
|
+
}
|
|
676
|
+
});
|
|
705
677
|
const fileSig = arkFile.getFileSignature().toMapKey();
|
|
706
678
|
this.sdkArkFilesMap.set(fileSig, arkFile);
|
|
707
679
|
SdkUtils_1.SdkUtils.buildSdkImportMap(arkFile);
|
|
@@ -805,6 +777,9 @@ class Scene {
|
|
|
805
777
|
getSdkGlobal(globalName) {
|
|
806
778
|
return this.sdkGlobalMap.get(globalName) || null;
|
|
807
779
|
}
|
|
780
|
+
getSdkGlobalMap() {
|
|
781
|
+
return this.sdkGlobalMap;
|
|
782
|
+
}
|
|
808
783
|
/**
|
|
809
784
|
* Returns the file based on its signature.
|
|
810
785
|
* If no file can be found according to the input signature, **null** will be returned.
|
|
@@ -838,6 +813,9 @@ class Scene {
|
|
|
838
813
|
getUnhandledFilePaths() {
|
|
839
814
|
return Array.from(this.unhandledFilePaths);
|
|
840
815
|
}
|
|
816
|
+
addUnhandledFilePath(filePath) {
|
|
817
|
+
this.unhandledFilePaths.add(filePath);
|
|
818
|
+
}
|
|
841
819
|
/*
|
|
842
820
|
* Returns the absolute sdk file paths that cannot be handled currently.
|
|
843
821
|
*/
|
|
@@ -1094,6 +1072,9 @@ class Scene {
|
|
|
1094
1072
|
getCcjsonPath() {
|
|
1095
1073
|
return this.ccjsonPath;
|
|
1096
1074
|
}
|
|
1075
|
+
setCcjsonPath(ccjsonPath) {
|
|
1076
|
+
this.ccjsonPath = ccjsonPath;
|
|
1077
|
+
}
|
|
1097
1078
|
getCppAstPath() {
|
|
1098
1079
|
return this.cppAstPath;
|
|
1099
1080
|
}
|
|
@@ -1119,6 +1100,7 @@ class Scene {
|
|
|
1119
1100
|
}
|
|
1120
1101
|
SdkUtils_1.SdkUtils.dispose();
|
|
1121
1102
|
ModuleUtils_1.ModuleUtils.dispose();
|
|
1103
|
+
ValueUtil_1.ValueUtil.dispose();
|
|
1122
1104
|
}
|
|
1123
1105
|
/**
|
|
1124
1106
|
* @deprecated This method is deprecated and will be removed in the next major release.
|
|
@@ -1458,6 +1440,9 @@ class ModuleScene {
|
|
|
1458
1440
|
this.ohPkgContent = {};
|
|
1459
1441
|
this.projectScene = projectScene;
|
|
1460
1442
|
}
|
|
1443
|
+
getProjectScene() {
|
|
1444
|
+
return this.projectScene;
|
|
1445
|
+
}
|
|
1461
1446
|
ModuleSceneBuilder(moduleName, modulePath, supportFileExts, recursively = false) {
|
|
1462
1447
|
this.moduleName = moduleName;
|
|
1463
1448
|
this.modulePath = modulePath;
|
|
@@ -1512,26 +1497,8 @@ class ModuleScene {
|
|
|
1512
1497
|
this.moduleFileMap.set(arkFile.getFileSignature().toMapKey(), arkFile);
|
|
1513
1498
|
}
|
|
1514
1499
|
genArkFiles(supportFileExts) {
|
|
1515
|
-
(0, getAllFiles_1.getAllFiles)(this.modulePath, supportFileExts, this.projectScene.getOptions().ignoreFileNames)
|
|
1516
|
-
|
|
1517
|
-
try {
|
|
1518
|
-
const arkFile = new ArkFile_1.ArkFile(FileUtils_1.FileUtils.getFileLanguage(file, this.projectScene.getFileLanguages()));
|
|
1519
|
-
arkFile.setScene(this.projectScene);
|
|
1520
|
-
arkFile.setModuleScene(this);
|
|
1521
|
-
if (arkFile.getLanguage() === ArkFile_1.Language.CXX) {
|
|
1522
|
-
(0, ArkFileBuilder_2.buildArkFileFromFile)(file, this.projectScene.getRealProjectDir(), arkFile, this.projectScene.getProjectName(), this.projectScene.getIncludeDirs());
|
|
1523
|
-
}
|
|
1524
|
-
else {
|
|
1525
|
-
(0, ArkFileBuilder_1.buildArkFileFromFile)(file, this.projectScene.getRealProjectDir(), arkFile, this.projectScene.getProjectName());
|
|
1526
|
-
}
|
|
1527
|
-
this.projectScene.setFile(arkFile);
|
|
1528
|
-
}
|
|
1529
|
-
catch (error) {
|
|
1530
|
-
logger.error('Error parsing file:', file, error);
|
|
1531
|
-
this.projectScene.getUnhandledFilePaths().push(file);
|
|
1532
|
-
return;
|
|
1533
|
-
}
|
|
1534
|
-
});
|
|
1500
|
+
const filePaths = (0, getAllFiles_1.getAllFiles)(this.modulePath, supportFileExts, this.projectScene.getOptions().ignoreFileNames);
|
|
1501
|
+
FrontendBuilder_1.FrontendBuilder.buildModuleFilesIntoArkFiles(this, filePaths);
|
|
1535
1502
|
}
|
|
1536
1503
|
}
|
|
1537
1504
|
exports.ModuleScene = ModuleScene;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Context.d.ts","sourceRoot":"","sources":["../../../../src/callgraph/pointerAnalysis/context/Context.ts"],"names":[],"mappings":"AAeA,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAClD,OAAO,EAAuB,kBAAkB,EAAmB,MAAM,eAAe,CAAC;AAEzF,MAAM,MAAM,SAAS,GAAG,MAAM,CAAC;AAC/B,eAAO,MAAM,SAAS,IAAI,CAAC;AAI3B,eAAO,MAAM,qBAAqB,KAAK,CAAC;AAExC;;;GAGG;AACH,8BAAsB,OAAO;IACzB,SAAS,CAAC,YAAY,EAAE,MAAM,EAAE,CAAC;gBAErB,YAAY,GAAE,MAAM,EAAO;IAQvC;;;;OAIG;IACH,MAAM,CAAC,QAAQ,CAAC,CAAC,SAAS,OAAO,EAAE,IAAI,EAAE,UAAU,CAAC,GAAG,CAAC;IAIxD;;;;;OAKG;IACH,MAAM,CAAC,GAAG,CAAC,CAAC,SAAS,OAAO,EAAE,IAAI,EAAE,KAAK,KAAK,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,YAAY,EAAE,MAAM,EAAE,GAAG,CAAC;IAI1F;;;;;;OAMG;IACH,MAAM,CAAC,kBAAkB,CAAC,CAAC,SAAS,OAAO,EAAE,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,CAAC;IAgBnF;;;;;OAKG;IACH,MAAM,CAAC,eAAe,CAAC,CAAC,SAAS,OAAO,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,MAAM,GAAG,CAAC;IAcxD,MAAM,IAAI,MAAM;IAIhB,GAAG,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM;IAO1B,QAAQ,IAAI,MAAM;aAKT,MAAM,CAAC,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,kBAAkB,GAAG,OAAO;aACxF,IAAI,CAAC,CAAC,EAAE,kBAAkB,EAAE,EAAE,EAAE,SAAS,GAAG,MAAM;CACrE;AAED,qBAAa,eAAgB,SAAQ,OAAO;IACjC,MAAM,CAAC,UAAU,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,kBAAkB,GAAG,eAAe;IAKjG,IAAI,CAAC,CAAC,EAAE,kBAAkB,EAAE,EAAE,EAAE,SAAS,GAAG,MAAM;CAS5D;AAED,qBAAa,UAAW,SAAQ,OAAO;IAC5B,MAAM,CAAC,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,kBAAkB,GAAG,UAAU;IAKvF,IAAI,CAAC,CAAC,EAAE,kBAAkB,EAAE,EAAE,EAAE,SAAS,GAAG,MAAM;CAI5D;AAED,qBAAa,WAAY,SAAQ,OAAO;IAC7B,MAAM,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,kBAAkB,GAAG,WAAW;IAKzF,IAAI,CAAC,CAAC,EAAE,kBAAkB,EAAE,EAAE,EAAE,SAAS,GAAG,MAAM;CAS5D;AAED,qBAAa,YAAY;IACrB,OAAO,CAAC,WAAW,
|
|
1
|
+
{"version":3,"file":"Context.d.ts","sourceRoot":"","sources":["../../../../src/callgraph/pointerAnalysis/context/Context.ts"],"names":[],"mappings":"AAeA,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAClD,OAAO,EAAuB,kBAAkB,EAAmB,MAAM,eAAe,CAAC;AAEzF,MAAM,MAAM,SAAS,GAAG,MAAM,CAAC;AAC/B,eAAO,MAAM,SAAS,IAAI,CAAC;AAI3B,eAAO,MAAM,qBAAqB,KAAK,CAAC;AAExC;;;GAGG;AACH,8BAAsB,OAAO;IACzB,SAAS,CAAC,YAAY,EAAE,MAAM,EAAE,CAAC;gBAErB,YAAY,GAAE,MAAM,EAAO;IAQvC;;;;OAIG;IACH,MAAM,CAAC,QAAQ,CAAC,CAAC,SAAS,OAAO,EAAE,IAAI,EAAE,UAAU,CAAC,GAAG,CAAC;IAIxD;;;;;OAKG;IACH,MAAM,CAAC,GAAG,CAAC,CAAC,SAAS,OAAO,EAAE,IAAI,EAAE,KAAK,KAAK,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,YAAY,EAAE,MAAM,EAAE,GAAG,CAAC;IAI1F;;;;;;OAMG;IACH,MAAM,CAAC,kBAAkB,CAAC,CAAC,SAAS,OAAO,EAAE,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,CAAC;IAgBnF;;;;;OAKG;IACH,MAAM,CAAC,eAAe,CAAC,CAAC,SAAS,OAAO,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,MAAM,GAAG,CAAC;IAcxD,MAAM,IAAI,MAAM;IAIhB,GAAG,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM;IAO1B,QAAQ,IAAI,MAAM;aAKT,MAAM,CAAC,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,kBAAkB,GAAG,OAAO;aACxF,IAAI,CAAC,CAAC,EAAE,kBAAkB,EAAE,EAAE,EAAE,SAAS,GAAG,MAAM;CACrE;AAED,qBAAa,eAAgB,SAAQ,OAAO;IACjC,MAAM,CAAC,UAAU,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,kBAAkB,GAAG,eAAe;IAKjG,IAAI,CAAC,CAAC,EAAE,kBAAkB,EAAE,EAAE,EAAE,SAAS,GAAG,MAAM;CAS5D;AAED,qBAAa,UAAW,SAAQ,OAAO;IAC5B,MAAM,CAAC,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,kBAAkB,GAAG,UAAU;IAKvF,IAAI,CAAC,CAAC,EAAE,kBAAkB,EAAE,EAAE,EAAE,SAAS,GAAG,MAAM;CAI5D;AAED,qBAAa,WAAY,SAAQ,OAAO;IAC7B,MAAM,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,kBAAkB,GAAG,WAAW;IAKzF,IAAI,CAAC,CAAC,EAAE,kBAAkB,EAAE,EAAE,EAAE,SAAS,GAAG,MAAM;CAS5D;AAED,qBAAa,YAAY;IACrB,OAAO,CAAC,WAAW,CAAY;IAC/B,OAAO,CAAC,cAAc,CAAsB;;IAOrC,iBAAiB,CAAC,OAAO,EAAE,OAAO,GAAG,SAAS;IAa9C,aAAa,CAAC,EAAE,EAAE,SAAS,EAAE,UAAU,EAAE,OAAO,EAAE,UAAU,EAAE,OAAO,GAAG,OAAO;IAY/E,YAAY,CAAC,OAAO,EAAE,OAAO,GAAG,SAAS,GAAG,SAAS;IASrD,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,GAAG,SAAS;IAO3C,cAAc,IAAI,OAAO,EAAE;IAI3B,IAAI,CAAC,CAAC,EAAE,kBAAkB,EAAE,EAAE,EAAE,SAAS,GAAG,MAAM;CAQ5D"}
|
|
@@ -110,13 +110,13 @@ class CallSiteContext extends Context {
|
|
|
110
110
|
return Context.newKLimitedContext(this, contextItem.id, k);
|
|
111
111
|
}
|
|
112
112
|
dump(m, cg) {
|
|
113
|
-
|
|
113
|
+
const contentParts = [];
|
|
114
114
|
for (let i = 0; i < this.length(); i++) {
|
|
115
115
|
const item = m.getItem(this.get(i));
|
|
116
116
|
const callSiteInfo = cg.getCallSiteInfo(item.callSiteId);
|
|
117
|
-
|
|
117
|
+
contentParts.push(`\t[${callSiteInfo}]\n`);
|
|
118
118
|
}
|
|
119
|
-
return
|
|
119
|
+
return contentParts.join('');
|
|
120
120
|
}
|
|
121
121
|
}
|
|
122
122
|
exports.CallSiteContext = CallSiteContext;
|
|
@@ -137,13 +137,13 @@ class FuncContext extends Context {
|
|
|
137
137
|
return Context.newKLimitedContext(this, contextItem.id, k);
|
|
138
138
|
}
|
|
139
139
|
dump(m, cg) {
|
|
140
|
-
|
|
140
|
+
const contentParts = [];
|
|
141
141
|
for (let i = 0; i < this.length(); i++) {
|
|
142
142
|
const item = m.getItem(this.get(i));
|
|
143
143
|
const methodSig = cg.getMethodByFuncID(item.funcID).toString();
|
|
144
|
-
|
|
144
|
+
contentParts.push(`\t[${methodSig}]\n`);
|
|
145
145
|
}
|
|
146
|
-
return
|
|
146
|
+
return contentParts.join('');
|
|
147
147
|
}
|
|
148
148
|
}
|
|
149
149
|
exports.FuncContext = FuncContext;
|
|
@@ -151,8 +151,6 @@ class ContextCache {
|
|
|
151
151
|
constructor() {
|
|
152
152
|
this.contextList = [];
|
|
153
153
|
this.contextToIDMap = new Map();
|
|
154
|
-
this.contextList = [];
|
|
155
|
-
this.contextToIDMap = new Map();
|
|
156
154
|
}
|
|
157
155
|
getOrNewContextID(context) {
|
|
158
156
|
let cStr = context.toString();
|
|
@@ -195,12 +193,12 @@ class ContextCache {
|
|
|
195
193
|
return this.contextList;
|
|
196
194
|
}
|
|
197
195
|
dump(m, cg) {
|
|
198
|
-
|
|
196
|
+
const contentParts = [];
|
|
199
197
|
this.contextList.forEach((c, i) => {
|
|
200
|
-
|
|
201
|
-
|
|
198
|
+
contentParts.push(`Context ${i}:\n`);
|
|
199
|
+
contentParts.push(`${c.dump(m, cg)}\n`);
|
|
202
200
|
});
|
|
203
|
-
return
|
|
201
|
+
return contentParts.join('');
|
|
204
202
|
}
|
|
205
203
|
}
|
|
206
204
|
exports.ContextCache = ContextCache;
|
|
@@ -159,7 +159,7 @@ class WorkerPlugin {
|
|
|
159
159
|
getFileByPath(callstmt, filePath) {
|
|
160
160
|
let declaringarkfile = callstmt.getCfg().getDeclaringMethod().getDeclaringArkClass().getDeclaringArkFile();
|
|
161
161
|
const scene = declaringarkfile.getScene();
|
|
162
|
-
let filepath = filePath.toString().replace(
|
|
162
|
+
let filepath = filePath.toString().replace(/^(?:\.\.\/|\.\/)|'/g, '');
|
|
163
163
|
filepath = filepath.substring(filepath.indexOf('ets'));
|
|
164
164
|
if (/\.e?ts$/.test(filepath)) {
|
|
165
165
|
const fileSignature = new __1.FileSignature(declaringarkfile.getFileSignature().getProjectName(), filepath);
|
package/lib/cli/commands/cg.d.ts
CHANGED
|
@@ -5,18 +5,38 @@ export type CgAlgorithm = 'cha' | 'rta';
|
|
|
5
5
|
export type CgFormat = 'json' | 'text' | 'dot' | 'csv';
|
|
6
6
|
export type CgDirection = 'forward' | 'backward';
|
|
7
7
|
export type CgEdgeFilter = 'call' | 'virtual' | 'interface' | 'all';
|
|
8
|
-
export interface
|
|
9
|
-
algorithm:
|
|
8
|
+
export interface CgCommandOptions {
|
|
9
|
+
algorithm: CgAlgorithm;
|
|
10
10
|
output: string;
|
|
11
|
-
format:
|
|
11
|
+
format: CgFormat;
|
|
12
12
|
entry: string[];
|
|
13
13
|
reachableFrom: string[];
|
|
14
|
-
direction:
|
|
15
|
-
edges:
|
|
14
|
+
direction: CgDirection;
|
|
15
|
+
edges: CgEdgeFilter;
|
|
16
16
|
ohosSdkHome?: string;
|
|
17
17
|
}
|
|
18
|
+
interface CgEdgeRow {
|
|
19
|
+
src: string;
|
|
20
|
+
dst: string;
|
|
21
|
+
type: Exclude<CgEdgeFilter, 'all'>;
|
|
22
|
+
}
|
|
23
|
+
export interface CgAnalyzeResult {
|
|
24
|
+
input: string;
|
|
25
|
+
algorithm: CgAlgorithm;
|
|
26
|
+
algorithmUsed: 'cha' | 'rta';
|
|
27
|
+
format: CgFormat;
|
|
28
|
+
direction: CgDirection;
|
|
29
|
+
edges: CgEdgeFilter;
|
|
30
|
+
entry: string[];
|
|
31
|
+
reachableFrom: string[];
|
|
32
|
+
reachable: string[];
|
|
33
|
+
nodes: string[];
|
|
34
|
+
edgeCount: number;
|
|
35
|
+
edgesData: CgEdgeRow[];
|
|
36
|
+
}
|
|
18
37
|
export declare function resolveMethodRef(scene: Scene, spec: string): ArkMethod | null;
|
|
19
|
-
export declare function
|
|
38
|
+
export declare function analyzeCg(input: string, options: CgCommandOptions): CgAnalyzeResult;
|
|
39
|
+
export declare function runCgCommand(input: string, raw: CgCommandOptions): void;
|
|
20
40
|
/**
|
|
21
41
|
* Register call-graph command.
|
|
22
42
|
*
|
|
@@ -29,4 +49,5 @@ export declare function runCgCommand(input: string, raw: RawCgCommandOptions): v
|
|
|
29
49
|
* arkanalyzer cg ./my_project -f dot -o ./out/cg.dot --edges all
|
|
30
50
|
*/
|
|
31
51
|
export declare function register(program: Command): void;
|
|
52
|
+
export {};
|
|
32
53
|
//# sourceMappingURL=cg.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cg.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/cg.ts"],"names":[],"mappings":"AAiBA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAIpC,OAAO,EAAE,SAAS,EAAE,MAAM,4BAA4B,CAAC;AAMvD,MAAM,MAAM,WAAW,GAAG,KAAK,GAAG,KAAK,CAAC;AACxC,MAAM,MAAM,QAAQ,GAAG,MAAM,GAAG,MAAM,GAAG,KAAK,GAAG,KAAK,CAAC;AACvD,MAAM,MAAM,WAAW,GAAG,SAAS,GAAG,UAAU,CAAC;AACjD,MAAM,MAAM,YAAY,GAAG,MAAM,GAAG,SAAS,GAAG,WAAW,GAAG,KAAK,CAAC;
|
|
1
|
+
{"version":3,"file":"cg.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/cg.ts"],"names":[],"mappings":"AAiBA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAIpC,OAAO,EAAE,SAAS,EAAE,MAAM,4BAA4B,CAAC;AAMvD,MAAM,MAAM,WAAW,GAAG,KAAK,GAAG,KAAK,CAAC;AACxC,MAAM,MAAM,QAAQ,GAAG,MAAM,GAAG,MAAM,GAAG,KAAK,GAAG,KAAK,CAAC;AACvD,MAAM,MAAM,WAAW,GAAG,SAAS,GAAG,UAAU,CAAC;AACjD,MAAM,MAAM,YAAY,GAAG,MAAM,GAAG,SAAS,GAAG,WAAW,GAAG,KAAK,CAAC;AAEpE,MAAM,WAAW,gBAAgB;IAC7B,SAAS,EAAE,WAAW,CAAC;IACvB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,QAAQ,CAAC;IACjB,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,SAAS,EAAE,WAAW,CAAC;IACvB,KAAK,EAAE,YAAY,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,UAAU,SAAS;IACf,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,OAAO,CAAC,YAAY,EAAE,KAAK,CAAC,CAAC;CACtC;AAED,MAAM,WAAW,eAAe;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,WAAW,CAAC;IACvB,aAAa,EAAE,KAAK,GAAG,KAAK,CAAC;IAC7B,MAAM,EAAE,QAAQ,CAAC;IACjB,SAAS,EAAE,WAAW,CAAC;IACvB,KAAK,EAAE,YAAY,CAAC;IACpB,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,SAAS,EAAE,CAAC;CAC1B;AAED,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,CA+C7E;AA4SD,wBAAgB,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,gBAAgB,GAAG,eAAe,CAyBnF;AAGD,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,gBAAgB,GAAG,IAAI,CAIvE;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,QAAQ,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAqB/C"}
|