arkanalyzer 1.0.41 → 1.0.42

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (64) hide show
  1. package/config/arkanalyzer.json +1 -2
  2. package/lib/Scene.d.ts.map +1 -1
  3. package/lib/Scene.js +9 -2
  4. package/lib/callgraph/pointerAnalysis/PagBuilder.d.ts.map +1 -1
  5. package/lib/callgraph/pointerAnalysis/PagBuilder.js +10 -4
  6. package/lib/core/base/Expr.d.ts +1 -0
  7. package/lib/core/base/Expr.d.ts.map +1 -1
  8. package/lib/core/base/Expr.js +9 -0
  9. package/lib/core/common/IRInference.d.ts +1 -1
  10. package/lib/core/common/IRInference.d.ts.map +1 -1
  11. package/lib/core/common/IRInference.js +7 -3
  12. package/lib/core/common/ModelUtils.js +1 -1
  13. package/lib/core/common/SdkUtils.d.ts +2 -1
  14. package/lib/core/common/SdkUtils.d.ts.map +1 -1
  15. package/lib/core/common/SdkUtils.js +31 -31
  16. package/lib/core/common/TypeInference.d.ts.map +1 -1
  17. package/lib/core/common/TypeInference.js +5 -3
  18. package/lib/core/dataflow/DataflowSolver.js +3 -3
  19. package/lib/core/dataflow/UndefinedVariable.js +2 -2
  20. package/lib/core/graph/BasicBlock.d.ts.map +1 -1
  21. package/lib/core/graph/BasicBlock.js +9 -4
  22. package/lib/core/graph/Cfg.d.ts.map +1 -1
  23. package/lib/core/graph/Cfg.js +4 -1
  24. package/lib/core/graph/builder/CfgBuilder.d.ts.map +1 -1
  25. package/lib/core/graph/builder/CfgBuilder.js +3 -3
  26. package/lib/core/graph/builder/ConditionBuilder.d.ts +2 -1
  27. package/lib/core/graph/builder/ConditionBuilder.d.ts.map +1 -1
  28. package/lib/core/graph/builder/ConditionBuilder.js +7 -3
  29. package/lib/core/graph/builder/TrapBuilder.d.ts +19 -1
  30. package/lib/core/graph/builder/TrapBuilder.d.ts.map +1 -1
  31. package/lib/core/graph/builder/TrapBuilder.js +195 -68
  32. package/lib/core/model/ArkMethod.d.ts.map +1 -1
  33. package/lib/core/model/ArkMethod.js +3 -4
  34. package/lib/core/model/builder/ArkClassBuilder.d.ts.map +1 -1
  35. package/lib/core/model/builder/ArkClassBuilder.js +24 -20
  36. package/lib/core/model/builder/ArkImportBuilder.js +28 -25
  37. package/lib/core/model/builder/ArkMethodBuilder.d.ts.map +1 -1
  38. package/lib/core/model/builder/ArkMethodBuilder.js +1 -2
  39. package/lib/pass/Context.d.ts +47 -0
  40. package/lib/pass/Context.d.ts.map +1 -0
  41. package/lib/pass/Context.js +72 -0
  42. package/lib/pass/Dispatcher.d.ts +102 -0
  43. package/lib/pass/Dispatcher.d.ts.map +1 -0
  44. package/lib/pass/Dispatcher.js +202 -0
  45. package/lib/pass/Pass.d.ts +83 -0
  46. package/lib/pass/Pass.d.ts.map +1 -0
  47. package/lib/pass/Pass.js +95 -0
  48. package/lib/pass/ScenePassMgr.d.ts +73 -0
  49. package/lib/pass/ScenePassMgr.d.ts.map +1 -0
  50. package/lib/pass/ScenePassMgr.js +156 -0
  51. package/lib/pass/SceneValidator.d.ts +215 -0
  52. package/lib/pass/SceneValidator.d.ts.map +1 -0
  53. package/lib/pass/SceneValidator.js +339 -0
  54. package/lib/save/JsonPrinter.d.ts.map +1 -1
  55. package/lib/save/JsonPrinter.js +26 -102
  56. package/lib/save/source/SourceStmt.d.ts +1 -0
  57. package/lib/save/source/SourceStmt.d.ts.map +1 -1
  58. package/lib/save/source/SourceStmt.js +4 -7
  59. package/lib/utils/FileUtils.d.ts.map +1 -1
  60. package/lib/utils/FileUtils.js +13 -6
  61. package/lib/utils/ValueAsserts.d.ts +9 -0
  62. package/lib/utils/ValueAsserts.d.ts.map +1 -0
  63. package/lib/utils/ValueAsserts.js +89 -0
  64. package/package.json +2 -2
@@ -0,0 +1,339 @@
1
+ "use strict";
2
+ /*
3
+ * Copyright (c) 2024-2025 Huawei Device Co., Ltd.
4
+ * Licensed under the Apache License, Version 2.0 (the "License");
5
+ * you may not use this file except in compliance with the License.
6
+ * You may obtain a copy of the License at
7
+ *
8
+ * http://www.apache.org/licenses/LICENSE-2.0
9
+ *
10
+ * Unless required by applicable law or agreed to in writing, software
11
+ * distributed under the License is distributed on an "AS IS" BASIS,
12
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ * See the License for the specific language governing permissions and
14
+ * limitations under the License.
15
+ */
16
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
17
+ if (k2 === undefined) k2 = k;
18
+ var desc = Object.getOwnPropertyDescriptor(m, k);
19
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
20
+ desc = { enumerable: true, get: function() { return m[k]; } };
21
+ }
22
+ Object.defineProperty(o, k2, desc);
23
+ }) : (function(o, m, k, k2) {
24
+ if (k2 === undefined) k2 = k;
25
+ o[k2] = m[k];
26
+ }));
27
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
28
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
29
+ }) : function(o, v) {
30
+ o["default"] = v;
31
+ });
32
+ var __importStar = (this && this.__importStar) || function (mod) {
33
+ if (mod && mod.__esModule) return mod;
34
+ var result = {};
35
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
36
+ __setModuleDefault(result, mod);
37
+ return result;
38
+ };
39
+ Object.defineProperty(exports, "__esModule", { value: true });
40
+ exports.SceneValidator = exports.MethodSummary = exports.SummaryMsg = exports.ClassSummary = exports.FileSummary = exports.SceneSummary = exports.MethodValidator = exports.ClassValidator = exports.FileValidator = exports.ArkValidatorRegistry = exports.ValueValidator = exports.StmtValidator = void 0;
41
+ const ScenePassMgr_1 = require("./ScenePassMgr");
42
+ const Dispatcher_1 = require("./Dispatcher");
43
+ const Pass_1 = require("./Pass");
44
+ const logger_1 = __importStar(require("../utils/logger"));
45
+ const logger = logger_1.default.getLogger(logger_1.LOG_MODULE_TYPE.ARKANALYZER, 'Validator');
46
+ /**
47
+ * Abstract class representing a statement validator.
48
+ * Provides a mechanism to validate statements of a specific type within a given context.
49
+ * Implementations must define the `validate` method to perform custom validation logic.
50
+ */
51
+ class StmtValidator {
52
+ run(s, ctx, mtd) {
53
+ let submit = (msg) => {
54
+ let summary = MethodSummary.getOrNew(ctx, mtd);
55
+ summary.submitStmt(s, msg);
56
+ };
57
+ this.validate(s, {
58
+ info: (msg) => submit(new SummaryMsg(0 /* SummaryLevel.info */, msg)),
59
+ warn: (msg) => submit(new SummaryMsg(1 /* SummaryLevel.warn */, msg)),
60
+ error: (msg) => submit(new SummaryMsg(2 /* SummaryLevel.error */, msg)),
61
+ });
62
+ }
63
+ static register(init) {
64
+ ArkValidatorRegistry.stmt(init);
65
+ }
66
+ }
67
+ exports.StmtValidator = StmtValidator;
68
+ /**
69
+ * Abstract class representing a validator for values of a specific type.
70
+ * Provides a mechanism to validate values and report the results through a summary reporter.
71
+ * The validation logic is defined by implementing the `validate` method in derived classes.
72
+ */
73
+ class ValueValidator {
74
+ run(s, ctx, mtd) {
75
+ let submit = (msg) => {
76
+ let summary = MethodSummary.getOrNew(ctx, mtd);
77
+ summary.submitValue(s, msg);
78
+ };
79
+ this.validate(s, {
80
+ info: (msg) => submit(new SummaryMsg(0 /* SummaryLevel.info */, msg)),
81
+ warn: (msg) => submit(new SummaryMsg(1 /* SummaryLevel.warn */, msg)),
82
+ error: (msg) => submit(new SummaryMsg(2 /* SummaryLevel.error */, msg)),
83
+ });
84
+ }
85
+ static register(init) {
86
+ ArkValidatorRegistry.value(init);
87
+ }
88
+ }
89
+ exports.ValueValidator = ValueValidator;
90
+ /**
91
+ * The ArkValidatorRegistry class is responsible for managing and registering statement and value initializers
92
+ * used in validation processes. It extends the Dispatcher class and provides mechanisms to dynamically
93
+ * register and invalidate dispatch configurations.
94
+ */
95
+ class ArkValidatorRegistry extends Dispatcher_1.Dispatcher {
96
+ constructor(ctx) {
97
+ super(ctx, ArkValidatorRegistry.getDispatch());
98
+ this.fallAction = 0 /* FallAction.Continue */;
99
+ }
100
+ static getDispatch() {
101
+ if (ArkValidatorRegistry.dispatchHolder) {
102
+ return ArkValidatorRegistry.dispatchHolder;
103
+ }
104
+ ArkValidatorRegistry.dispatchHolder = new Dispatcher_1.Dispatch(this.stmtsHolder, this.valuesHolder);
105
+ return ArkValidatorRegistry.dispatchHolder;
106
+ }
107
+ static stmt(init) {
108
+ this.stmtsHolder.push(init);
109
+ // invalidate holder
110
+ ArkValidatorRegistry.dispatchHolder = undefined;
111
+ }
112
+ static value(init) {
113
+ this.valuesHolder.push(init);
114
+ // invalidate holder
115
+ ArkValidatorRegistry.dispatchHolder = undefined;
116
+ }
117
+ }
118
+ exports.ArkValidatorRegistry = ArkValidatorRegistry;
119
+ ArkValidatorRegistry.stmtsHolder = [];
120
+ ArkValidatorRegistry.valuesHolder = [];
121
+ /**
122
+ * An abstract class that extends FilePass and provides a framework for validating files.
123
+ * The FileValidator class is designed to be subclassed with specific validation logic
124
+ * implemented in the `validate` method. It provides a default implementation of the `run`
125
+ * method, which processes a file and submits validation results (info, warning, or error)
126
+ * to a summary object associated with the file context.
127
+ */
128
+ class FileValidator extends Pass_1.FilePass {
129
+ run(file, ctx) {
130
+ let submit = (msg) => {
131
+ let summary = FileSummary.getOrNew(ctx, file);
132
+ summary.submit(msg);
133
+ };
134
+ this.validate(file, {
135
+ info: (msg) => submit(new SummaryMsg(0 /* SummaryLevel.info */, msg)),
136
+ warn: (msg) => submit(new SummaryMsg(1 /* SummaryLevel.warn */, msg)),
137
+ error: (msg) => submit(new SummaryMsg(2 /* SummaryLevel.error */, msg)),
138
+ });
139
+ }
140
+ }
141
+ exports.FileValidator = FileValidator;
142
+ class ClassValidator extends Pass_1.ClassPass {
143
+ run(cls, ctx) {
144
+ let submit = (msg) => {
145
+ let summary = ClassSummary.getOrNew(ctx, cls);
146
+ summary.submit(msg);
147
+ };
148
+ this.validate(cls, {
149
+ info: (msg) => submit(new SummaryMsg(0 /* SummaryLevel.info */, msg)),
150
+ warn: (msg) => submit(new SummaryMsg(1 /* SummaryLevel.warn */, msg)),
151
+ error: (msg) => submit(new SummaryMsg(2 /* SummaryLevel.error */, msg)),
152
+ });
153
+ }
154
+ }
155
+ exports.ClassValidator = ClassValidator;
156
+ class MethodValidator extends Pass_1.MethodPass {
157
+ run(mtd, ctx) {
158
+ let submit = (msg) => {
159
+ let summary = MethodSummary.getOrNew(ctx, mtd);
160
+ summary.submit(msg);
161
+ };
162
+ this.validate(mtd, {
163
+ info: (msg) => submit(new SummaryMsg(0 /* SummaryLevel.info */, msg)),
164
+ warn: (msg) => submit(new SummaryMsg(1 /* SummaryLevel.warn */, msg)),
165
+ error: (msg) => submit(new SummaryMsg(2 /* SummaryLevel.error */, msg)),
166
+ });
167
+ }
168
+ }
169
+ exports.MethodValidator = MethodValidator;
170
+ /**
171
+ * Represents a summary of a scene, containing metadata and associated file summaries.
172
+ * The name property provides a default identifier for the scene summary.
173
+ * The files property maintains a mapping of ArkFile instances to their corresponding FileSummary objects.
174
+ * This class is used to encapsulate and manage information about a scene and its related files.
175
+ */
176
+ class SceneSummary {
177
+ constructor() {
178
+ this.name = 'validate summary';
179
+ this.files = new Map();
180
+ }
181
+ }
182
+ exports.SceneSummary = SceneSummary;
183
+ /**
184
+ * Represents a summary of a file containing information about classes and messages.
185
+ * Provides methods to manage and retrieve file summaries within a given context.
186
+ * The class maintains a collection of messages and a mapping of classes to their summaries.
187
+ * It supports operations to submit new messages and retrieve or create summaries for files.
188
+ */
189
+ class FileSummary {
190
+ constructor() {
191
+ this.name = 'file summary';
192
+ this.classes = new Map();
193
+ this.msgList = [];
194
+ }
195
+ submit(msg) {
196
+ this.msgList.push(msg);
197
+ }
198
+ /**
199
+ * Retrieves an existing FileSummary instance from the given context or creates a new one if it does not exist.
200
+ *
201
+ * @param ctx The context object that holds the FileSummary instance. It is used to check if a FileSummary already exists.
202
+ * @param file The ArkFile object for which the FileSummary is being retrieved or created.
203
+ * @return The existing or newly created FileSummary instance associated with the provided file.
204
+ */
205
+ static getOrNew(ctx, file) {
206
+ if (ctx.get(FileSummary)) {
207
+ return ctx.get(FileSummary);
208
+ }
209
+ let validate = ctx.upper.get(SceneSummary);
210
+ if (!validate.files.get(file)) {
211
+ validate.files.set(file, new FileSummary());
212
+ }
213
+ let summary = validate.files.get(file);
214
+ ctx.set(FileSummary, summary);
215
+ return summary;
216
+ }
217
+ }
218
+ exports.FileSummary = FileSummary;
219
+ /**
220
+ * Represents a summary of a class, containing its name, associated methods, and messages.
221
+ * Provides functionality to submit messages and retrieve or create a ClassSummary instance.
222
+ * The class maintains a collection of method summaries and tracks messages related to the class.
223
+ * It is designed to be used in the context of a larger system that processes class information.
224
+ */
225
+ class ClassSummary {
226
+ constructor() {
227
+ this.name = 'class summary';
228
+ this.methods = new Map();
229
+ this.msgList = [];
230
+ }
231
+ submit(msg) {
232
+ this.msgList.push(msg);
233
+ }
234
+ /**
235
+ * Retrieves an existing ClassSummary instance from the given context or creates a new one if it does not exist.
236
+ * If the ClassSummary is not found in the context, it attempts to retrieve or create a FileSummary for the declaring file of the class.
237
+ * Ensures that the ClassSummary is associated with the provided class and context before returning it.
238
+ *
239
+ * @param ctx The context in which to search for or store the ClassSummary instance.
240
+ * @param cls The class for which the ClassSummary is being retrieved or created.
241
+ * @return The existing or newly created ClassSummary instance associated with the provided class and context.
242
+ */
243
+ static getOrNew(ctx, cls) {
244
+ if (ctx.get(ClassSummary)) {
245
+ return ctx.get(ClassSummary);
246
+ }
247
+ let file = FileSummary.getOrNew(ctx.upper, cls.getDeclaringArkFile());
248
+ if (!file.classes.get(cls)) {
249
+ file.classes.set(cls, new ClassSummary());
250
+ }
251
+ let summary = file.classes.get(cls);
252
+ ctx.set(ClassSummary, summary);
253
+ return summary;
254
+ }
255
+ }
256
+ exports.ClassSummary = ClassSummary;
257
+ /**
258
+ * Represents a summary message with an associated level and content.
259
+ * The SummaryMsg class is used to encapsulate messages that have a specific severity or importance level.
260
+ * It provides a way to associate a textual message with a defined level, making it suitable for logging, notifications, or summaries.
261
+ * The constructor initializes the message and its level, ensuring both are explicitly defined at creation.
262
+ */
263
+ class SummaryMsg {
264
+ constructor(level, msg) {
265
+ this.level = level;
266
+ this.msg = msg;
267
+ }
268
+ }
269
+ exports.SummaryMsg = SummaryMsg;
270
+ /**
271
+ * Represents a summary of a method, capturing various messages and associations with values and statements.
272
+ * This class provides methods to submit messages and associate them with specific values or statements.
273
+ * It also supports retrieving or creating a method summary within a given context.
274
+ */
275
+ class MethodSummary {
276
+ constructor() {
277
+ this.name = 'method summary';
278
+ this.values = new Map();
279
+ this.stmts = new Map();
280
+ this.msgList = [];
281
+ }
282
+ submit(msg) {
283
+ this.msgList.push(msg);
284
+ }
285
+ submitValue(value, msg) {
286
+ if (!this.values.get(value)) {
287
+ this.values.set(value, []);
288
+ }
289
+ this.values.get(value).push(msg);
290
+ }
291
+ submitStmt(stmt, msg) {
292
+ if (this.stmts.get(stmt) === undefined) {
293
+ this.stmts.set(stmt, []);
294
+ }
295
+ logger.info(`submit ${JSON.stringify(msg)}`);
296
+ this.stmts.get(stmt).push(msg);
297
+ }
298
+ /**
299
+ * Retrieves an existing MethodSummary from the context or creates a new one if it does not exist.
300
+ *
301
+ * @param ctx The method context in which the MethodSummary is stored or will be created.
302
+ * @param mtd The ArkMethod for which the MethodSummary is being retrieved or created.
303
+ * @return The existing or newly created MethodSummary associated with the provided context and method.
304
+ */
305
+ static getOrNew(ctx, mtd) {
306
+ if (ctx.get(MethodSummary)) {
307
+ return ctx.get(MethodSummary);
308
+ }
309
+ let cls = ClassSummary.getOrNew(ctx.upper, mtd.getDeclaringArkClass());
310
+ if (!cls.methods.get(mtd)) {
311
+ cls.methods.set(mtd, new MethodSummary());
312
+ }
313
+ let summary = cls.methods.get(mtd);
314
+ ctx.set(MethodSummary, summary);
315
+ return summary;
316
+ }
317
+ }
318
+ exports.MethodSummary = MethodSummary;
319
+ /**
320
+ * The SceneValidator class is responsible for validating a given scene by leveraging the ScenePassMgr.
321
+ * It sets up a context for validation, executes the validation process, and retrieves the summary of the validation.
322
+ *
323
+ * The validate method initializes a new SceneSummary instance, associates it with the current scene context,
324
+ * runs the validation process using the configured manager, and finally returns the generated summary.
325
+ *
326
+ * This class ensures that the validation logic is encapsulated and provides a clean interface for processing scenes.
327
+ */
328
+ class SceneValidator {
329
+ constructor() {
330
+ this.mgr = new ScenePassMgr_1.ScenePassMgr({ dispatcher: ArkValidatorRegistry });
331
+ }
332
+ validate(scene) {
333
+ let summary = new SceneSummary();
334
+ this.mgr.sceneContext().set(SceneSummary, summary);
335
+ this.mgr.run(scene);
336
+ return this.mgr.sceneContext().remove(SceneSummary);
337
+ }
338
+ }
339
+ exports.SceneValidator = SceneValidator;
@@ -1 +1 @@
1
- {"version":3,"file":"JsonPrinter.d.ts","sourceRoot":"","sources":["../../src/save/JsonPrinter.ts"],"names":[],"mappings":"AAeA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAC;AAuEhD,qBAAa,WAAY,SAAQ,OAAO;IACxB,OAAO,CAAC,OAAO;gBAAP,OAAO,EAAE,OAAO;IAI7B,IAAI,IAAI,MAAM;IAKrB,OAAO,CAAC,gBAAgB;IAUxB,OAAO,CAAC,kBAAkB;IAQ1B,OAAO,CAAC,cAAc;IActB,OAAO,CAAC,cAAc;IAUtB,OAAO,CAAC,eAAe;IAWvB,OAAO,CAAC,mBAAmB;IAO3B,OAAO,CAAC,wBAAwB;IAShC,OAAO,CAAC,mBAAmB;IAW3B,OAAO,CAAC,mBAAmB;IAY3B,OAAO,CAAC,kBAAkB;IAM1B,OAAO,CAAC,wBAAwB;IAOhC,OAAO,CAAC,aAAa;IAoIrB,OAAO,CAAC,sBAAsB;IAO9B,OAAO,CAAC,2BAA2B;IASnC,OAAO,CAAC,uBAAuB;IAS/B,OAAO,CAAC,uBAAuB;IAe/B,OAAO,CAAC,wBAAwB;IAYhC,OAAO,CAAC,2BAA2B;IAOnC,OAAO,CAAC,YAAY;IAsBpB,OAAO,CAAC,mBAAmB;IAa3B,OAAO,CAAC,cAAc;IAOtB,OAAO,CAAC,iBAAiB;IAOzB,OAAO,CAAC,cAAc;IAsKtB,OAAO,CAAC,aAAa;CAuCxB"}
1
+ {"version":3,"file":"JsonPrinter.d.ts","sourceRoot":"","sources":["../../src/save/JsonPrinter.ts"],"names":[],"mappings":"AAeA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAC;AAuEhD,qBAAa,WAAY,SAAQ,OAAO;IACxB,OAAO,CAAC,OAAO;gBAAP,OAAO,EAAE,OAAO;IAI7B,IAAI,IAAI,MAAM;IAKrB,OAAO,CAAC,gBAAgB;IAUxB,OAAO,CAAC,kBAAkB;IAQ1B,OAAO,CAAC,cAAc;IActB,OAAO,CAAC,cAAc;IAUtB,OAAO,CAAC,eAAe;IAWvB,OAAO,CAAC,mBAAmB;IAO3B,OAAO,CAAC,wBAAwB;IAShC,OAAO,CAAC,mBAAmB;IAW3B,OAAO,CAAC,mBAAmB;IAY3B,OAAO,CAAC,kBAAkB;IAM1B,OAAO,CAAC,wBAAwB;IAOhC,OAAO,CAAC,aAAa;IAgHrB,OAAO,CAAC,sBAAsB;IAO9B,OAAO,CAAC,2BAA2B;IASnC,OAAO,CAAC,uBAAuB;IAS/B,OAAO,CAAC,uBAAuB;IAe/B,OAAO,CAAC,wBAAwB;IAYhC,OAAO,CAAC,2BAA2B;IAOnC,OAAO,CAAC,YAAY;IAsBpB,OAAO,CAAC,mBAAmB;IAa3B,OAAO,CAAC,cAAc;IAOtB,OAAO,CAAC,iBAAiB;IAOzB,OAAO,CAAC,cAAc;IAwGtB,OAAO,CAAC,aAAa;CAuCxB"}
@@ -134,24 +134,16 @@ class JsonPrinter extends Printer_1.Printer {
134
134
  throw new Error('Type is undefined');
135
135
  }
136
136
  if (type instanceof Type_1.AnyType) {
137
- return {
138
- _: 'AnyType',
139
- };
137
+ return { _: 'AnyType' };
140
138
  }
141
139
  else if (type instanceof Type_1.UnknownType) {
142
- return {
143
- _: 'UnknownType',
144
- };
140
+ return { _: 'UnknownType' };
145
141
  }
146
142
  else if (type instanceof Type_1.VoidType) {
147
- return {
148
- _: 'VoidType',
149
- };
143
+ return { _: 'VoidType' };
150
144
  }
151
145
  else if (type instanceof Type_1.NeverType) {
152
- return {
153
- _: 'NeverType',
154
- };
146
+ return { _: 'NeverType' };
155
147
  }
156
148
  else if (type instanceof Type_1.UnionType) {
157
149
  return {
@@ -172,34 +164,22 @@ class JsonPrinter extends Printer_1.Printer {
172
164
  };
173
165
  }
174
166
  else if (type instanceof Type_1.BooleanType) {
175
- return {
176
- _: 'BooleanType',
177
- };
167
+ return { _: 'BooleanType' };
178
168
  }
179
169
  else if (type instanceof Type_1.NumberType) {
180
- return {
181
- _: 'NumberType',
182
- };
170
+ return { _: 'NumberType' };
183
171
  }
184
172
  else if (type instanceof Type_1.BigIntType) {
185
- return {
186
- _: 'BigIntType',
187
- };
173
+ return { _: 'BigIntType' };
188
174
  }
189
175
  else if (type instanceof Type_1.StringType) {
190
- return {
191
- _: 'StringType',
192
- };
176
+ return { _: 'StringType' };
193
177
  }
194
178
  else if (type instanceof Type_1.NullType) {
195
- return {
196
- _: 'NullType',
197
- };
179
+ return { _: 'NullType' };
198
180
  }
199
181
  else if (type instanceof Type_1.UndefinedType) {
200
- return {
201
- _: 'UndefinedType',
202
- };
182
+ return { _: 'UndefinedType' };
203
183
  }
204
184
  else if (type instanceof Type_1.LiteralType) {
205
185
  return {
@@ -392,55 +372,28 @@ class JsonPrinter extends Printer_1.Printer {
392
372
  return Object.assign({ _: 'Constant' }, this.serializeConstant(value));
393
373
  }
394
374
  else if (value instanceof Expr_1.ArkNewExpr) {
395
- return {
396
- _: 'NewExpr',
397
- classType: this.serializeType(value.getClassType()),
398
- };
375
+ return { _: 'NewExpr', classType: this.serializeType(value.getClassType()) };
399
376
  }
400
377
  else if (value instanceof Expr_1.ArkNewArrayExpr) {
401
- return {
402
- _: 'NewArrayExpr',
403
- elementType: this.serializeType(value.getBaseType()),
404
- size: this.serializeValue(value.getSize()),
405
- };
378
+ return { _: 'NewArrayExpr', elementType: this.serializeType(value.getBaseType()), size: this.serializeValue(value.getSize()) };
406
379
  }
407
380
  else if (value instanceof Expr_1.ArkDeleteExpr) {
408
- return {
409
- _: 'DeleteExpr',
410
- arg: this.serializeValue(value.getField()),
411
- };
381
+ return { _: 'DeleteExpr', arg: this.serializeValue(value.getField()) };
412
382
  }
413
383
  else if (value instanceof Expr_1.ArkAwaitExpr) {
414
- return {
415
- _: 'AwaitExpr',
416
- arg: this.serializeValue(value.getPromise()),
417
- };
384
+ return { _: 'AwaitExpr', arg: this.serializeValue(value.getPromise()) };
418
385
  }
419
386
  else if (value instanceof Expr_1.ArkYieldExpr) {
420
- return {
421
- _: 'YieldExpr',
422
- arg: this.serializeValue(value.getYieldValue()),
423
- };
387
+ return { _: 'YieldExpr', arg: this.serializeValue(value.getYieldValue()) };
424
388
  }
425
389
  else if (value instanceof Expr_1.ArkTypeOfExpr) {
426
- return {
427
- _: 'TypeOfExpr',
428
- arg: this.serializeValue(value.getOp()),
429
- };
390
+ return { _: 'TypeOfExpr', arg: this.serializeValue(value.getOp()) };
430
391
  }
431
392
  else if (value instanceof Expr_1.ArkInstanceOfExpr) {
432
- return {
433
- _: 'InstanceOfExpr',
434
- arg: this.serializeValue(value.getOp()),
435
- checkType: this.serializeType(value.getCheckType()),
436
- };
393
+ return { _: 'InstanceOfExpr', arg: this.serializeValue(value.getOp()), checkType: this.serializeType(value.getCheckType()) };
437
394
  }
438
395
  else if (value instanceof Expr_1.ArkCastExpr) {
439
- return {
440
- _: 'CastExpr',
441
- arg: this.serializeValue(value.getOp()),
442
- type: this.serializeType(value.getType()),
443
- };
396
+ return { _: 'CastExpr', arg: this.serializeValue(value.getOp()), type: this.serializeType(value.getType()) };
444
397
  }
445
398
  else if (value instanceof Expr_1.ArkPhiExpr) {
446
399
  const args = value.getArgs();
@@ -470,11 +423,7 @@ class JsonPrinter extends Printer_1.Printer {
470
423
  };
471
424
  }
472
425
  else if (value instanceof Expr_1.ArkUnopExpr) {
473
- return {
474
- _: 'UnopExpr',
475
- op: value.getOperator(),
476
- arg: this.serializeValue(value.getOp()),
477
- };
426
+ return { _: 'UnopExpr', op: value.getOperator(), arg: this.serializeValue(value.getOp()) };
478
427
  }
479
428
  else if (value instanceof Expr_1.ArkInstanceInvokeExpr) {
480
429
  return {
@@ -500,17 +449,10 @@ class JsonPrinter extends Printer_1.Printer {
500
449
  };
501
450
  }
502
451
  else if (value instanceof Ref_1.ArkThisRef) {
503
- return {
504
- _: 'ThisRef',
505
- type: this.serializeType(value.getType()),
506
- };
452
+ return { _: 'ThisRef', type: this.serializeType(value.getType()) };
507
453
  }
508
454
  else if (value instanceof Ref_1.ArkParameterRef) {
509
- return {
510
- _: 'ParameterRef',
511
- index: value.getIndex(),
512
- type: this.serializeType(value.getType()),
513
- };
455
+ return { _: 'ParameterRef', index: value.getIndex(), type: this.serializeType(value.getType()) };
514
456
  }
515
457
  else if (value instanceof Ref_1.ArkArrayRef) {
516
458
  return {
@@ -521,18 +463,11 @@ class JsonPrinter extends Printer_1.Printer {
521
463
  };
522
464
  }
523
465
  else if (value instanceof Ref_1.ArkCaughtExceptionRef) {
524
- return {
525
- _: 'CaughtExceptionRef',
526
- type: this.serializeType(value.getType()),
527
- };
466
+ return { _: 'CaughtExceptionRef', type: this.serializeType(value.getType()) };
528
467
  }
529
468
  else if (value instanceof Ref_1.GlobalRef) {
530
469
  let ref = value.getRef();
531
- return {
532
- _: 'GlobalRef',
533
- name: value.getName(),
534
- ref: ref ? this.serializeValue(ref) : null,
535
- };
470
+ return { _: 'GlobalRef', name: value.getName(), ref: ref ? this.serializeValue(ref) : null };
536
471
  }
537
472
  else if (value instanceof Ref_1.ClosureFieldRef) {
538
473
  return {
@@ -543,25 +478,14 @@ class JsonPrinter extends Printer_1.Printer {
543
478
  };
544
479
  }
545
480
  else if (value instanceof Ref_1.ArkInstanceFieldRef) {
546
- return {
547
- _: 'InstanceFieldRef',
548
- instance: this.serializeValue(value.getBase()),
549
- field: this.serializeFieldSignature(value.getFieldSignature()),
550
- };
481
+ return { _: 'InstanceFieldRef', instance: this.serializeValue(value.getBase()), field: this.serializeFieldSignature(value.getFieldSignature()) };
551
482
  }
552
483
  else if (value instanceof Ref_1.ArkStaticFieldRef) {
553
- return {
554
- _: 'StaticFieldRef',
555
- field: this.serializeFieldSignature(value.getFieldSignature()),
556
- };
484
+ return { _: 'StaticFieldRef', field: this.serializeFieldSignature(value.getFieldSignature()) };
557
485
  }
558
486
  else {
559
487
  console.warn(`Unhandled Value: ${value.constructor.name} (${value.toString()})`);
560
- return {
561
- _: value.constructor.name,
562
- text: value.toString(),
563
- type: this.serializeType(value.getType()),
564
- };
488
+ return { _: value.constructor.name, text: value.toString(), type: this.serializeType(value.getType()) };
565
489
  }
566
490
  }
567
491
  serializeStmt(stmt) {
@@ -92,6 +92,7 @@ export declare class SourceWhileStmt extends SourceStmt {
92
92
  * @returns
93
93
  */
94
94
  private forOf2ts;
95
+ private getForOf2ts;
95
96
  transfer2ts(): void;
96
97
  protected valueToString(value: Value): string;
97
98
  }
@@ -1 +1 @@
1
- {"version":3,"file":"SourceStmt.d.ts","sourceRoot":"","sources":["../../../src/save/source/SourceStmt.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"SourceStmt.d.ts","sourceRoot":"","sources":["../../../src/save/source/SourceStmt.ts"],"names":[],"mappings":"AAgBA,OAAO,EAEH,eAAe,EAIlB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,KAAK,EAAE,MAAM,uBAAuB,CAAC;AAQ9C,OAAO,EAEH,aAAa,EACb,SAAS,EACT,aAAa,EACb,aAAa,EACb,iBAAiB,EACjB,YAAY,EACZ,IAAI,EACP,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,SAAS,EAAmB,MAAM,sBAAsB,CAAC;AAClE,OAAO,EAAE,KAAK,EAAE,MAAM,uBAAuB,CAAC;AAC9C,OAAO,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAC;AAEzD,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC7C,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAQ5E,OAAO,EAAE,IAAI,EAAE,MAAM,qBAAqB,CAAC;AAK3C,MAAM,WAAW,kBAAmB,SAAQ,kBAAkB;IAC1D,aAAa,IAAI,UAAU,CAAC;IAE5B,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IAE9C,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC;IAEpC,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IAEjC,WAAW,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI,CAAC;IAE9B,SAAS,IAAI,GAAG,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;IAEhC,WAAW,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC;IAEhC,cAAc,CAAC,KAAK,EAAE,KAAK,GAAG,OAAO,CAAC;IAEtC,iBAAiB,IAAI,OAAO,CAAC;CAChC;AAED,8BAAsB,UAAW,YAAW,IAAI;IAC5C,QAAQ,EAAE,IAAI,CAAC;IACf,OAAO,EAAE,kBAAkB,CAAC;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAM;IAClB,WAAW,EAAE,iBAAiB,CAAC;gBAEnB,OAAO,EAAE,kBAAkB,EAAE,QAAQ,EAAE,IAAI;IAOhD,OAAO,IAAI,MAAM;IAIjB,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAI3B,IAAI,IAAI,MAAM;IAOrB,SAAS,CAAC,UAAU,IAAI,IAAI;IAE5B,SAAS,CAAC,SAAS,IAAI,IAAI;IAE3B,SAAS,CAAC,MAAM,IAAI,MAAM;IAe1B,SAAS,KAAK,OAAO,IAAI,aAAa,CAErC;IAEM,QAAQ,IAAI,MAAM;IAIzB,SAAS,CAAC,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAIrC,SAAS,CAAC,SAAS,IAAI,MAAM;aAIb,WAAW,IAAI,IAAI;IAEnC,SAAS,CAAC,gBAAgB,CAAC,KAAK,EAAE,KAAK,GAAG,OAAO;CAOpD;AASD,qBAAa,gBAAiB,SAAQ,UAAU;IAC5C,OAAO,CAAC,MAAM,CAAwC;IACtD,OAAO,CAAC,OAAO,CAAwC;IACvD,OAAO,CAAC,QAAQ,CAAc;IAC9B,OAAO,CAAC,SAAS,CAAc;IAC/B,OAAO,CAAC,QAAQ,CAAC,CAAqB;IACtC,OAAO,CAAC,YAAY,CAAS;gBAEjB,OAAO,EAAE,kBAAkB,EAAE,QAAQ,EAAE,aAAa;IAKzD,WAAW,IAAI,IAAI;IAiE1B,SAAS,CAAC,UAAU,IAAI,IAAI;IAqC5B,SAAS,CAAC,SAAS,IAAI,IAAI;IAM3B,OAAO,CAAC,kBAAkB;IAa1B;;;OAGG;IACH,OAAO,CAAC,oBAAoB;IA6B5B,OAAO,CAAC,uBAAuB;IAe/B,OAAO,CAAC,6BAA6B;IAOrC;;;;;OAKG;IACH,OAAO,CAAC,yBAAyB;IAqBjC,OAAO,CAAC,4BAA4B;IAmBpC,OAAO,CAAC,+BAA+B;CAK1C;AAED,qBAAa,gBAAiB,SAAQ,UAAU;gBAChC,OAAO,EAAE,kBAAkB,EAAE,QAAQ,EAAE,aAAa;IAIzD,WAAW,IAAI,IAAI;IAwB1B,SAAS,CAAC,UAAU,IAAI,IAAI;IAW5B,SAAS,CAAC,SAAS,IAAI,IAAI;CAO9B;AAED,qBAAa,YAAa,SAAQ,UAAU;gBAC5B,OAAO,EAAE,kBAAkB,EAAE,QAAQ,EAAE,SAAS;IAIrD,WAAW,IAAI,IAAI;IAS1B,SAAS,CAAC,SAAS,IAAI,IAAI;CAG9B;AAED,qBAAa,eAAgB,SAAQ,UAAU;IAC3C,KAAK,EAAE,UAAU,CAAC;gBAEN,OAAO,EAAE,kBAAkB,EAAE,QAAQ,EAAE,SAAS,EAAE,KAAK,EAAE,UAAU;IAK/E,SAAS,CAAC,SAAS,IAAI,IAAI;IAI3B;;;;;;;OAOG;IACH,OAAO,CAAC,QAAQ;IA4DhB,OAAO,CAAC,WAAW;IA6DZ,WAAW,IAAI,IAAI;IAY1B,SAAS,CAAC,aAAa,CAAC,KAAK,EAAE,KAAK,GAAG,MAAM;CAsBhD;AAED,qBAAa,aAAc,SAAQ,eAAe;IAC9C,QAAQ,EAAE,UAAU,CAAC;gBAET,OAAO,EAAE,kBAAkB,EAAE,QAAQ,EAAE,SAAS,EAAE,KAAK,EAAE,UAAU,EAAE,QAAQ,EAAE,UAAU;IAK9F,WAAW,IAAI,IAAI;CAmB7B;AAED,qBAAa,YAAa,SAAQ,UAAU;gBAC5B,OAAO,EAAE,kBAAkB,EAAE,IAAI,EAAE,IAAI;IAI5C,WAAW,IAAI,IAAI;IAI1B,SAAS,CAAC,SAAS,IAAI,IAAI;CAG9B;AAED,qBAAa,iBAAkB,SAAQ,eAAe;gBACtC,OAAO,EAAE,kBAAkB,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,UAAU;IAIpE,WAAW,IAAI,IAAI;IAS1B,SAAS,CAAC,UAAU,IAAI,IAAI;IAI5B,SAAS,CAAC,SAAS,IAAI,IAAI;CAC9B;AAED,qBAAa,cAAe,SAAQ,UAAU;gBAC9B,OAAO,EAAE,kBAAkB,EAAE,QAAQ,EAAE,IAAI;IAIhD,WAAW,IAAI,IAAI;IAI1B,SAAS,CAAC,UAAU,IAAI,IAAI;IAI5B,SAAS,CAAC,SAAS,IAAI,IAAI;CAG9B;AAED,qBAAa,kBAAmB,SAAQ,UAAU;gBAClC,OAAO,EAAE,kBAAkB,EAAE,QAAQ,EAAE,IAAI;IAKhD,WAAW,IAAI,IAAI;CAG7B;AAED,qBAAa,eAAgB,SAAQ,UAAU;gBAC/B,OAAO,EAAE,kBAAkB,EAAE,QAAQ,EAAE,IAAI;IAKhD,WAAW,IAAI,IAAI;CAG7B;AAED,qBAAa,gBAAiB,SAAQ,UAAU;gBAChC,OAAO,EAAE,kBAAkB,EAAE,QAAQ,EAAE,aAAa;IAIzD,WAAW,IAAI,IAAI;CAG7B;AAED,qBAAa,oBAAqB,SAAQ,UAAU;gBACpC,OAAO,EAAE,kBAAkB,EAAE,QAAQ,EAAE,iBAAiB;IAI7D,WAAW,IAAI,IAAI;CAO7B;AAED,qBAAa,qBAAsB,SAAQ,UAAU;gBACrC,OAAO,EAAE,kBAAkB,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM;IAK1D,WAAW,IAAI,IAAI;IAE1B,SAAS,CAAC,UAAU,IAAI,IAAI;CAG/B;AAED,qBAAa,gBAAiB,SAAQ,UAAU;gBAChC,OAAO,EAAE,kBAAkB,EAAE,IAAI,EAAE,IAAI;IAI5C,WAAW,IAAI,IAAI;CAG7B;AAED,qBAAa,eAAgB,SAAQ,UAAU;gBAC/B,OAAO,EAAE,kBAAkB,EAAE,QAAQ,EAAE,YAAY;IAIxD,WAAW,IAAI,IAAI;CAG7B;AAED,qBAAa,mBAAoB,SAAQ,UAAU;IAC/C,SAAS,EAAE,SAAS,CAAC;gBACT,OAAO,EAAE,kBAAkB,EAAE,QAAQ,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS;IAKtE,WAAW,IAAI,IAAI;IA8C1B,OAAO,CAAC,eAAe;CAU1B;AAED,qBAAa,aAAc,SAAQ,UAAU;gBAC7B,OAAO,EAAE,kBAAkB,EAAE,IAAI,EAAE,IAAI;IAI5C,WAAW,IAAI,IAAI;IAI1B,SAAS,CAAC,SAAS,IAAI,IAAI;CAG9B;AAED,qBAAa,eAAgB,SAAQ,UAAU;IAC3C,KAAK,EAAE,UAAU,GAAG,SAAS,CAAC;gBAClB,OAAO,EAAE,kBAAkB,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,CAAC,EAAE,UAAU;IAKhE,WAAW,IAAI,IAAI;IAe1B,SAAS,CAAC,UAAU,IAAI,IAAI;IAI5B,SAAS,CAAC,SAAS,IAAI,IAAI;CAG9B;AAED,qBAAa,iBAAkB,SAAQ,UAAU;gBACjC,OAAO,EAAE,kBAAkB,EAAE,IAAI,EAAE,IAAI;IAI5C,WAAW,IAAI,IAAI;IAI1B,SAAS,CAAC,UAAU,IAAI,IAAI;IAI5B,SAAS,CAAC,SAAS,IAAI,IAAI;CAG9B;AAED,qBAAa,kBAAkB;IAC3B,IAAI,EAAE,eAAe,CAAC;IACtB,MAAM,EAAE,MAAM,EAAE,CAAC;gBAEL,IAAI,EAAE,eAAe;IAK1B,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAIjC,QAAQ,IAAI,MAAM;CAG5B;AAED,wBAAgB,eAAe,CAAC,OAAO,EAAE,kBAAkB,EAAE,IAAI,EAAE,IAAI,GAAG,UAAU,CAqBnF"}
@@ -449,9 +449,6 @@ class SourceWhileStmt extends SourceStmt {
449
449
  return false;
450
450
  }
451
451
  let temp2 = done.getBase();
452
- if (!(temp2 instanceof Local_1.Local)) {
453
- return false;
454
- }
455
452
  stmt = temp2.getDeclaringStmt();
456
453
  if (!(stmt instanceof Stmt_1.ArkAssignStmt)) {
457
454
  return false;
@@ -464,9 +461,6 @@ class SourceWhileStmt extends SourceStmt {
464
461
  return false;
465
462
  }
466
463
  let temp1 = next.getBase();
467
- if (!(temp1 instanceof Local_1.Local)) {
468
- return false;
469
- }
470
464
  stmt = temp1.getDeclaringStmt();
471
465
  if (!(stmt instanceof Stmt_1.ArkAssignStmt)) {
472
466
  return false;
@@ -478,6 +472,9 @@ class SourceWhileStmt extends SourceStmt {
478
472
  if (iterator.getMethodSignature().getMethodSubSignature().getMethodName() !== 'Symbol.iterator') {
479
473
  return false;
480
474
  }
475
+ return this.getForOf2ts(temp3, temp1, iterator);
476
+ }
477
+ getForOf2ts(temp3, temp1, iterator) {
481
478
  let successors = this.block.getSuccessors();
482
479
  if (successors.length !== 2) {
483
480
  return false;
@@ -486,7 +483,7 @@ class SourceWhileStmt extends SourceStmt {
486
483
  if (stmts.length < 2) {
487
484
  return false;
488
485
  }
489
- stmt = stmts[1];
486
+ let stmt = stmts[1];
490
487
  if (!(stmt instanceof Stmt_1.ArkAssignStmt)) {
491
488
  return false;
492
489
  }
@@ -1 +1 @@
1
- {"version":3,"file":"FileUtils.d.ts","sourceRoot":"","sources":["../../src/utils/FileUtils.ts"],"names":[],"mappings":"AAoBA,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAIjD,qBAAa,SAAS;IAClB,gBAAuB,WAAW;;;MAGhC;WAEY,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM;WASzC,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;WAOrC,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;WAIrC,iBAAiB,CAAC,eAAe,EAAE,GAAG,CAAC,MAAM,EAAE;QAAE,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CAAA;KAAE,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,UAAU,CAAC;WA4BlG,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,QAAQ,CAAC,GAAG,QAAQ;CAgB1F;AAED,qBAAa,UAAU;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;gBAED,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM;CAIzC;AAED,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,GAAE,GAAG,CAAC,MAAM,CAAqB,GAAG,MAAM,CA2BrH"}
1
+ {"version":3,"file":"FileUtils.d.ts","sourceRoot":"","sources":["../../src/utils/FileUtils.ts"],"names":[],"mappings":"AAoBA,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAIjD,qBAAa,SAAS;IAClB,gBAAuB,WAAW;;;MAGhC;WAEY,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM;WASzC,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;WAOrC,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;WAIrC,iBAAiB,CAAC,eAAe,EAAE,GAAG,CAAC,MAAM,EAAE;QAAE,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CAAA;KAAE,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,UAAU,CAAC;WAkClG,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,QAAQ,CAAC,GAAG,QAAQ;CAgB1F;AAED,qBAAa,UAAU;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;gBAED,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM;CAIzC;AAED,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,GAAE,GAAG,CAAC,MAAM,CAAqB,GAAG,MAAM,CA2BrH"}
@@ -84,12 +84,19 @@ class FileUtils {
84
84
  if (moduleMap.get(name)) {
85
85
  return;
86
86
  }
87
- const modulePath = path_1.default.resolve(path_1.default.dirname(filePath), value.replace('file:', ''));
88
- const key = path_1.default.resolve(modulePath, EtsConst_1.OH_PACKAGE_JSON5);
89
- const target = ohPkgContentMap.get(key);
90
- if (target) {
91
- moduleMap.set(name, new ModulePath(modulePath, target.main ? path_1.default.resolve(modulePath, target.main) : ''));
87
+ const dir = path_1.default.dirname(filePath);
88
+ let modulePath = path_1.default.resolve(dir, value.replace('file:', ''));
89
+ let main = '';
90
+ if (this.isDirectory(modulePath)) {
91
+ const target = ohPkgContentMap.get(path_1.default.resolve(modulePath, EtsConst_1.OH_PACKAGE_JSON5));
92
+ if (target === null || target === void 0 ? void 0 : target.main) {
93
+ main = path_1.default.resolve(modulePath, target.main);
94
+ }
92
95
  }
96
+ else {
97
+ path_1.default.resolve(dir, 'oh_modules', name);
98
+ }
99
+ moduleMap.set(name, new ModulePath(modulePath, main));
93
100
  });
94
101
  });
95
102
  return moduleMap;
@@ -119,7 +126,7 @@ FileUtils.FILE_FILTER = {
119
126
  class ModulePath {
120
127
  constructor(path, main) {
121
128
  this.path = (0, pathTransfer_1.transfer2UnixPath)(path);
122
- this.main = (0, pathTransfer_1.transfer2UnixPath)(main);
129
+ this.main = main ? (0, pathTransfer_1.transfer2UnixPath)(main) : main;
123
130
  }
124
131
  }
125
132
  exports.ModulePath = ModulePath;