arkanalyzer 1.0.94 → 2.0.0-beta1
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/lib/Config.d.ts +7 -0
- package/lib/Config.d.ts.map +1 -1
- package/lib/Scene.d.ts +134 -170
- package/lib/Scene.d.ts.map +1 -1
- package/lib/Scene.js +412 -976
- package/lib/callgraph/algorithm/AbstractAnalysis.js +3 -2
- package/lib/callgraph/algorithm/RapidTypeAnalysis.js +1 -1
- package/lib/callgraph/model/CallGraph.js +1 -1
- package/lib/callgraph/pointerAnalysis/PTAUtils.d.ts +1 -3
- package/lib/callgraph/pointerAnalysis/PTAUtils.d.ts.map +1 -1
- package/lib/callgraph/pointerAnalysis/PTAUtils.js +17 -7
- package/lib/callgraph/pointerAnalysis/Pag.d.ts.map +1 -1
- package/lib/callgraph/pointerAnalysis/Pag.js +4 -14
- package/lib/callgraph/pointerAnalysis/PagBuilder.d.ts.map +1 -1
- package/lib/callgraph/pointerAnalysis/PagBuilder.js +2 -1
- package/lib/callgraph/pointerAnalysis/PointerAnalysis.d.ts.map +1 -1
- package/lib/callgraph/pointerAnalysis/PointerAnalysis.js +1 -2
- package/lib/callgraph/pointerAnalysis/plugins/WorkerPlugin.d.ts.map +1 -1
- package/lib/callgraph/pointerAnalysis/plugins/WorkerPlugin.js +0 -1
- package/lib/cli/commands/cg.d.ts +1 -0
- package/lib/cli/commands/cg.d.ts.map +1 -1
- package/lib/cli/commands/cg.js +22 -18
- package/lib/cli/commands/ir.d.ts +1 -0
- package/lib/cli/commands/ir.d.ts.map +1 -1
- package/lib/cli/commands/ir.js +5 -2
- package/lib/core/base/Constant.d.ts +5 -5
- package/lib/core/base/Constant.d.ts.map +1 -1
- package/lib/core/base/Constant.js +12 -9
- package/lib/core/base/Expr.d.ts +36 -20
- package/lib/core/base/Expr.d.ts.map +1 -1
- package/lib/core/base/Expr.js +206 -94
- package/lib/core/base/Local.d.ts +10 -20
- package/lib/core/base/Local.d.ts.map +1 -1
- package/lib/core/base/Local.js +25 -28
- package/lib/core/base/Position.d.ts +6 -0
- package/lib/core/base/Position.d.ts.map +1 -1
- package/lib/core/base/Position.js +37 -11
- package/lib/core/base/Ref.d.ts +45 -33
- package/lib/core/base/Ref.d.ts.map +1 -1
- package/lib/core/base/Ref.js +225 -51
- package/lib/core/base/Stmt.d.ts +19 -9
- package/lib/core/base/Stmt.d.ts.map +1 -1
- package/lib/core/base/Stmt.js +135 -52
- package/lib/core/base/Type.d.ts +67 -4
- package/lib/core/base/Type.d.ts.map +1 -1
- package/lib/core/base/Type.js +391 -20
- package/lib/core/base/TypeExpr.d.ts +6 -4
- package/lib/core/base/TypeExpr.d.ts.map +1 -1
- package/lib/core/base/TypeExpr.js +34 -10
- package/lib/core/base/Value.d.ts +20 -2
- package/lib/core/base/Value.d.ts.map +1 -1
- package/lib/core/base/Value.js +12 -0
- package/lib/core/common/ArkIRTransformer.d.ts +18 -0
- package/lib/core/common/ArkIRTransformer.d.ts.map +1 -1
- package/lib/core/common/ArkIRTransformer.js +94 -75
- package/lib/core/common/ArkValueTransformer.d.ts +21 -3
- package/lib/core/common/ArkValueTransformer.d.ts.map +1 -1
- package/lib/core/common/ArkValueTransformer.js +455 -265
- package/lib/core/common/Builtin.d.ts +48 -24
- package/lib/core/common/Builtin.d.ts.map +1 -1
- package/lib/core/common/Builtin.js +90 -52
- package/lib/core/common/CanonicalizerValidator.d.ts +308 -0
- package/lib/core/common/CanonicalizerValidator.d.ts.map +1 -0
- package/lib/core/common/CanonicalizerValidator.js +888 -0
- package/lib/core/common/Const.d.ts +3 -3
- package/lib/core/common/Const.d.ts.map +1 -1
- package/lib/core/common/Const.js +3 -3
- package/lib/core/common/DummyMainCreater.d.ts +2 -21
- package/lib/core/common/DummyMainCreater.d.ts.map +1 -1
- package/lib/core/common/DummyMainCreater.js +8 -105
- package/lib/core/common/IRInference.d.ts +55 -3
- package/lib/core/common/IRInference.d.ts.map +1 -1
- package/lib/core/common/IRInference.js +407 -126
- package/lib/core/common/IRUtils.d.ts +1 -0
- package/lib/core/common/IRUtils.d.ts.map +1 -1
- package/lib/core/common/IRUtils.js +44 -13
- package/lib/core/common/ModelUtils.d.ts +44 -20
- package/lib/core/common/ModelUtils.d.ts.map +1 -1
- package/lib/core/common/ModelUtils.js +378 -208
- package/lib/core/common/SdkUtils.d.ts +35 -5
- package/lib/core/common/SdkUtils.d.ts.map +1 -1
- package/lib/core/common/SdkUtils.js +181 -53
- package/lib/core/common/SignatureCanonicalizer.d.ts +95 -0
- package/lib/core/common/SignatureCanonicalizer.d.ts.map +1 -0
- package/lib/core/common/SignatureCanonicalizer.js +116 -0
- package/lib/core/common/SignatureCanonicalizerRegistry.d.ts +176 -0
- package/lib/core/common/SignatureCanonicalizerRegistry.d.ts.map +1 -0
- package/lib/core/common/SignatureCanonicalizerRegistry.js +343 -0
- package/lib/core/common/SignatureModelCanonicalizer.d.ts +69 -0
- package/lib/core/common/SignatureModelCanonicalizer.d.ts.map +1 -0
- package/lib/core/common/SignatureModelCanonicalizer.js +109 -0
- package/lib/core/common/StmtUseReplacer.d.ts +1 -0
- package/lib/core/common/StmtUseReplacer.d.ts.map +1 -1
- package/lib/core/common/StmtUseReplacer.js +9 -0
- package/lib/core/common/StringUtils.d.ts +12 -1
- package/lib/core/common/StringUtils.d.ts.map +1 -1
- package/lib/core/common/StringUtils.js +36 -17
- package/lib/core/common/TempSignatureCanonicalizer.d.ts +82 -0
- package/lib/core/common/TempSignatureCanonicalizer.d.ts.map +1 -0
- package/lib/core/common/TempSignatureCanonicalizer.js +177 -0
- package/lib/core/common/TypeInference.d.ts +24 -6
- package/lib/core/common/TypeInference.d.ts.map +1 -1
- package/lib/core/common/TypeInference.js +243 -117
- package/lib/core/common/ValueUtil.d.ts +2 -1
- package/lib/core/common/ValueUtil.d.ts.map +1 -1
- package/lib/core/common/ValueUtil.js +4 -1
- package/lib/core/graph/Cfg.d.ts.map +1 -1
- package/lib/core/graph/Cfg.js +21 -6
- package/lib/core/graph/builder/CfgBuilder.d.ts.map +1 -1
- package/lib/core/graph/builder/CfgBuilder.js +46 -33
- package/lib/core/graph/builder/IfBuilder.d.ts.map +1 -1
- package/lib/core/graph/builder/IfBuilder.js +6 -2
- package/lib/core/graph/builder/ViewTreeBuilder.d.ts.map +1 -1
- package/lib/core/graph/builder/ViewTreeBuilder.js +6 -2
- package/lib/core/inference/ModelInference.d.ts +24 -4
- package/lib/core/inference/ModelInference.d.ts.map +1 -1
- package/lib/core/inference/ModelInference.js +273 -79
- package/lib/core/inference/ValueInference.d.ts +3 -2
- package/lib/core/inference/ValueInference.d.ts.map +1 -1
- package/lib/core/inference/ValueInference.js +90 -40
- package/lib/core/inference/abc/AbcInference.d.ts.map +1 -1
- package/lib/core/inference/abc/AbcInference.js +28 -15
- package/lib/core/inference/arkts/ArkTsInference.d.ts +9 -3
- package/lib/core/inference/arkts/ArkTsInference.d.ts.map +1 -1
- package/lib/core/inference/arkts/ArkTsInference.js +54 -16
- package/lib/core/model/ArkClass.d.ts +192 -18
- package/lib/core/model/ArkClass.d.ts.map +1 -1
- package/lib/core/model/ArkClass.js +852 -122
- package/lib/core/model/ArkExport.d.ts.map +1 -1
- package/lib/core/model/ArkExport.js +1 -2
- package/lib/core/model/ArkField.d.ts +34 -2
- package/lib/core/model/ArkField.d.ts.map +1 -1
- package/lib/core/model/ArkField.js +89 -14
- package/lib/core/model/ArkFile.d.ts +72 -12
- package/lib/core/model/ArkFile.d.ts.map +1 -1
- package/lib/core/model/ArkFile.js +275 -65
- package/lib/core/model/ArkImport.d.ts.map +1 -1
- package/lib/core/model/ArkImport.js +1 -2
- package/lib/core/model/ArkMethod.d.ts +101 -15
- package/lib/core/model/ArkMethod.d.ts.map +1 -1
- package/lib/core/model/ArkMethod.js +252 -39
- package/lib/core/model/ArkModule.d.ts +1 -1
- package/lib/core/model/ArkModule.js +1 -1
- package/lib/core/model/ArkNamespace.d.ts +80 -10
- package/lib/core/model/ArkNamespace.d.ts.map +1 -1
- package/lib/core/model/ArkNamespace.js +309 -76
- package/lib/core/model/ArkSignature.d.ts +242 -18
- package/lib/core/model/ArkSignature.d.ts.map +1 -1
- package/lib/core/model/ArkSignature.js +725 -95
- package/lib/core/model/builder/ArkClassBuilder.d.ts +6 -3
- package/lib/core/model/builder/ArkClassBuilder.d.ts.map +1 -1
- package/lib/core/model/builder/ArkClassBuilder.js +116 -71
- package/lib/core/model/builder/ArkExportBuilder.d.ts +1 -1
- package/lib/core/model/builder/ArkExportBuilder.d.ts.map +1 -1
- package/lib/core/model/builder/ArkExportBuilder.js +1 -1
- package/lib/core/model/builder/ArkFieldBuilder.d.ts +0 -2
- package/lib/core/model/builder/ArkFieldBuilder.d.ts.map +1 -1
- package/lib/core/model/builder/ArkFieldBuilder.js +9 -43
- package/lib/core/model/builder/ArkFileBuilder.d.ts.map +1 -1
- package/lib/core/model/builder/ArkFileBuilder.js +32 -33
- package/lib/core/model/builder/ArkMethodBuilder.d.ts +10 -3
- package/lib/core/model/builder/ArkMethodBuilder.d.ts.map +1 -1
- package/lib/core/model/builder/ArkMethodBuilder.js +40 -26
- package/lib/core/model/builder/ArkNamespaceBuilder.d.ts +3 -2
- package/lib/core/model/builder/ArkNamespaceBuilder.d.ts.map +1 -1
- package/lib/core/model/builder/ArkNamespaceBuilder.js +45 -77
- package/lib/core/model/builder/ArkSignatureBuilder.d.ts +9 -0
- package/lib/core/model/builder/ArkSignatureBuilder.d.ts.map +1 -1
- package/lib/core/model/builder/ArkSignatureBuilder.js +26 -3
- package/lib/core/model/builder/BodyBuilder.d.ts +1 -0
- package/lib/core/model/builder/BodyBuilder.d.ts.map +1 -1
- package/lib/core/model/builder/BodyBuilder.js +37 -11
- package/lib/core/model/builder/builderUtils.d.ts +11 -1
- package/lib/core/model/builder/builderUtils.d.ts.map +1 -1
- package/lib/core/model/builder/builderUtils.js +124 -90
- package/lib/frontend/FrontendBuilder.d.ts +10 -6
- package/lib/frontend/FrontendBuilder.d.ts.map +1 -1
- package/lib/frontend/FrontendBuilder.js +19 -45
- package/lib/frontend/ModuleScene.d.ts +43 -0
- package/lib/frontend/ModuleScene.d.ts.map +1 -0
- package/lib/frontend/ModuleScene.js +143 -0
- package/lib/frontend/SceneBuildStage.d.ts +15 -0
- package/lib/frontend/SceneBuildStage.d.ts.map +1 -0
- package/lib/frontend/SceneBuildStage.js +32 -0
- package/lib/frontend/SceneBuilder.d.ts +153 -0
- package/lib/frontend/SceneBuilder.d.ts.map +1 -0
- package/lib/frontend/SceneBuilder.js +859 -0
- package/lib/frontend/arktsFrontend/ArktsFrontend.d.ts +0 -2
- package/lib/frontend/arktsFrontend/ArktsFrontend.d.ts.map +1 -1
- package/lib/frontend/arktsFrontend/ArktsFrontend.js +0 -18
- package/lib/frontend/arktsFrontend/FileBodyRemount.d.ts +17 -0
- package/lib/frontend/arktsFrontend/FileBodyRemount.d.ts.map +1 -0
- package/lib/frontend/arktsFrontend/FileBodyRemount.js +187 -0
- package/lib/frontend/common/ModuleBuilder.d.ts +4 -2
- package/lib/frontend/common/ModuleBuilder.d.ts.map +1 -1
- package/lib/frontend/common/ModuleBuilder.js +19 -9
- package/lib/frontend/cppFrontend/CppFrontend.d.ts +0 -6
- package/lib/frontend/cppFrontend/CppFrontend.d.ts.map +1 -1
- package/lib/frontend/cppFrontend/CppFrontend.js +0 -56
- package/lib/frontend/cppFrontend/base/Type.d.ts +7 -0
- package/lib/frontend/cppFrontend/base/Type.d.ts.map +1 -1
- package/lib/frontend/cppFrontend/base/Type.js +29 -0
- package/lib/frontend/cppFrontend/common/ArkIRTransformer.d.ts.map +1 -1
- package/lib/frontend/cppFrontend/common/ArkIRTransformer.js +56 -56
- 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 +124 -113
- package/lib/frontend/cppFrontend/common/Builtin.d.ts +29 -19
- package/lib/frontend/cppFrontend/common/Builtin.d.ts.map +1 -1
- package/lib/frontend/cppFrontend/common/Builtin.js +56 -35
- package/lib/frontend/cppFrontend/common/IRInference.d.ts +7 -2
- package/lib/frontend/cppFrontend/common/IRInference.d.ts.map +1 -1
- package/lib/frontend/cppFrontend/common/IRInference.js +61 -28
- package/lib/frontend/cppFrontend/common/IRUtils.d.ts +1 -0
- package/lib/frontend/cppFrontend/common/IRUtils.d.ts.map +1 -1
- package/lib/frontend/cppFrontend/common/IRUtils.js +22 -10
- package/lib/frontend/cppFrontend/common/ModelUtils.d.ts +19 -0
- package/lib/frontend/cppFrontend/common/ModelUtils.d.ts.map +1 -1
- package/lib/frontend/cppFrontend/common/ModelUtils.js +84 -3
- package/lib/frontend/cppFrontend/common/TypeInference.d.ts.map +1 -1
- package/lib/frontend/cppFrontend/common/TypeInference.js +44 -54
- package/lib/frontend/cppFrontend/graph/builder/CfgBuilder.d.ts.map +1 -1
- package/lib/frontend/cppFrontend/graph/builder/CfgBuilder.js +2 -1
- package/lib/frontend/cppFrontend/inference/CxxModelInference.d.ts +1 -1
- package/lib/frontend/cppFrontend/inference/CxxModelInference.d.ts.map +1 -1
- package/lib/frontend/cppFrontend/inference/CxxValueInference.d.ts.map +1 -1
- package/lib/frontend/cppFrontend/inference/CxxValueInference.js +41 -5
- package/lib/frontend/cppFrontend/model/builder/ArkClassBuilder.d.ts.map +1 -1
- package/lib/frontend/cppFrontend/model/builder/ArkClassBuilder.js +18 -28
- package/lib/frontend/cppFrontend/model/builder/ArkFieldBuilder.d.ts.map +1 -1
- package/lib/frontend/cppFrontend/model/builder/ArkFieldBuilder.js +2 -3
- package/lib/frontend/cppFrontend/model/builder/ArkFileBuilder.d.ts +2 -2
- package/lib/frontend/cppFrontend/model/builder/ArkFileBuilder.d.ts.map +1 -1
- package/lib/frontend/cppFrontend/model/builder/ArkFileBuilder.js +31 -24
- package/lib/frontend/cppFrontend/model/builder/ArkMethodBuilder.d.ts.map +1 -1
- package/lib/frontend/cppFrontend/model/builder/ArkMethodBuilder.js +10 -16
- package/lib/frontend/cppFrontend/model/builder/ArkNamespaceBuilder.d.ts +0 -2
- package/lib/frontend/cppFrontend/model/builder/ArkNamespaceBuilder.d.ts.map +1 -1
- package/lib/frontend/cppFrontend/model/builder/ArkNamespaceBuilder.js +19 -37
- package/lib/frontend/cppFrontend/model/builder/BodyBuilder.d.ts +1 -0
- package/lib/frontend/cppFrontend/model/builder/BodyBuilder.d.ts.map +1 -1
- package/lib/frontend/cppFrontend/model/builder/BodyBuilder.js +30 -3
- package/lib/frontend/cppFrontend/model/builder/builderUtils.d.ts.map +1 -1
- package/lib/frontend/cppFrontend/model/builder/builderUtils.js +8 -4
- package/lib/index.d.ts +3 -0
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +10 -2
- package/lib/save/json/JsonSerialization.js +2 -2
- package/lib/save/source/SourceStmt.js +1 -1
- package/lib/save/source/SourceTransformer.d.ts.map +1 -1
- package/lib/save/source/SourceTransformer.js +0 -9
- package/lib/statistics/StageStatistics.d.ts +195 -0
- package/lib/statistics/StageStatistics.d.ts.map +1 -0
- package/lib/statistics/StageStatistics.js +346 -0
- package/lib/statistics/StageStatisticsReporter.d.ts +58 -0
- package/lib/statistics/StageStatisticsReporter.d.ts.map +1 -0
- package/lib/statistics/StageStatisticsReporter.js +255 -0
- package/lib/utils/Canonicalizer.d.ts +9 -2
- package/lib/utils/Canonicalizer.d.ts.map +1 -1
- package/lib/utils/Canonicalizer.js +19 -2
- package/lib/utils/CxxSceneUtils.d.ts +7 -0
- package/lib/utils/CxxSceneUtils.d.ts.map +1 -1
- package/lib/utils/CxxSceneUtils.js +10 -1
- package/lib/utils/FileUtils.d.ts +0 -1
- package/lib/utils/FileUtils.d.ts.map +1 -1
- package/lib/utils/FileUtils.js +1 -9
- package/lib/utils/HashUtils.d.ts +9 -0
- package/lib/utils/HashUtils.d.ts.map +1 -0
- package/lib/utils/HashUtils.js +65 -0
- package/lib/utils/ModuleUtils.d.ts.map +1 -1
- package/lib/utils/ModuleUtils.js +24 -5
- package/lib/utils/VisitedSegment.d.ts +23 -0
- package/lib/utils/VisitedSegment.d.ts.map +1 -0
- package/lib/utils/VisitedSegment.js +64 -0
- package/lib/utils/callGraphUtils.d.ts.map +1 -1
- package/lib/utils/callGraphUtils.js +7 -7
- package/lib/utils/getAllFiles.d.ts.map +1 -1
- package/lib/utils/getAllFiles.js +11 -8
- package/lib/utils/logger.d.ts +4 -0
- package/lib/utils/logger.d.ts.map +1 -1
- package/lib/utils/logger.js +16 -0
- package/lib/utils/parseArkSourceFile.d.ts +33 -0
- package/lib/utils/parseArkSourceFile.d.ts.map +1 -0
- package/lib/utils/parseArkSourceFile.js +131 -0
- package/package.json +1 -1
- package/lib/utils/DependenciesSort.d.ts +0 -3
- package/lib/utils/DependenciesSort.d.ts.map +0 -1
- package/lib/utils/DependenciesSort.js +0 -72
- package/lib/utils/crypto_utils.d.ts +0 -6
- package/lib/utils/crypto_utils.d.ts.map +0 -1
- package/lib/utils/crypto_utils.js +0 -57
|
@@ -1,45 +1,69 @@
|
|
|
1
|
-
import { ClassSignature,
|
|
1
|
+
import { ClassSignature, MethodSignature } from '../model/ArkSignature';
|
|
2
2
|
import { ClassType } from '../base/Type';
|
|
3
3
|
import { Scene } from '../../Scene';
|
|
4
|
+
/**
|
|
5
|
+
* Built-in class name constants and signature stubs.
|
|
6
|
+
*
|
|
7
|
+
* Signatures created here are **unclear stubs** (declaring file = FileSignature.DEFAULT) that
|
|
8
|
+
* live in the temp canonicalizer. During type inference they are resolved to the real SDK
|
|
9
|
+
* signatures via the built-in library (see TypeInference.inferBaseType →
|
|
10
|
+
* SdkUtils.getSdkGlobal);
|
|
11
|
+
* when the SDK is unavailable (enableBuiltIn=false) they remain unresolved in temp space and
|
|
12
|
+
* are reported by checkTempSignatureCompleteness.
|
|
13
|
+
*/
|
|
4
14
|
export declare class Builtin {
|
|
5
15
|
static OBJECT: string;
|
|
6
16
|
static ARRAY: string;
|
|
7
|
-
static SET: string;
|
|
8
17
|
static MAP: string;
|
|
18
|
+
static SET: string;
|
|
9
19
|
static REGEXP: string;
|
|
10
20
|
static BIGINT: string;
|
|
11
21
|
static FUNCTION: string;
|
|
12
|
-
static BUILT_IN_CLASSES: Set<string>;
|
|
13
|
-
static DUMMY_PROJECT_NAME: string;
|
|
14
|
-
static DUMMY_FILE_NAME: string;
|
|
15
|
-
static BUILT_IN_CLASSES_FILE_SIGNATURE: FileSignature;
|
|
16
|
-
static OBJECT_CLASS_SIGNATURE: ClassSignature;
|
|
17
|
-
static OBJECT_CLASS_TYPE: ClassType;
|
|
18
|
-
static ARRAY_CLASS_SIGNATURE: ClassSignature;
|
|
19
|
-
static SET_CLASS_SIGNATURE: ClassSignature;
|
|
20
|
-
static MAP_CLASS_SIGNATURE: ClassSignature;
|
|
21
|
-
static REGEXP_CLASS_SIGNATURE: ClassSignature;
|
|
22
|
-
static REGEXP_CLASS_TYPE: ClassType;
|
|
23
|
-
static BUILT_IN_CLASS_SIGNATURE_MAP: Map<string, ClassSignature>;
|
|
24
22
|
static ITERATOR_FUNCTION: string;
|
|
25
23
|
static ITERATOR: string;
|
|
26
24
|
static ITERATOR_NEXT: string;
|
|
27
25
|
static ITERATOR_RESULT: string;
|
|
28
26
|
static ITERATOR_RESULT_DONE: string;
|
|
29
27
|
static ITERATOR_RESULT_VALUE: string;
|
|
30
|
-
static ITERATOR_CLASS_SIGNATURE: ClassSignature;
|
|
31
|
-
static ITERATOR_RESULT_CLASS_SIGNATURE: ClassSignature;
|
|
32
|
-
static ITERATOR_CLASS_TYPE: ClassType;
|
|
33
|
-
static ITERATOR_RESULT_CLASS_TYPE: ClassType;
|
|
34
28
|
static TO_STRING: string;
|
|
35
|
-
static TO_STRING_METHOD_SIGNATURE: MethodSignature;
|
|
36
29
|
static SLICE: string;
|
|
37
30
|
static CONCAT: string;
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
31
|
+
/**
|
|
32
|
+
* Lazy per-name cache of unclear stub signatures. Stubs hold no registry-dependent state
|
|
33
|
+
* (the declaring file SigID is the literal 0, rebuilt as DEFAULT in every registry
|
|
34
|
+
* lifecycle), so the instances are dispose-stable: after dispose(), the rebuilt temp
|
|
35
|
+
* canonicalizer assigns them fresh IDs via its new objectIdentity symbol (the old symbol
|
|
36
|
+
* property is cleaned by Canonicalizer.clear()).
|
|
37
|
+
*/
|
|
38
|
+
private static stubCache;
|
|
39
|
+
/** Unclear stub signature for a built-in class name (shared instance per name). */
|
|
40
|
+
static getBuiltinClassSignature(className: string): ClassSignature;
|
|
41
|
+
/** @internal Snapshot of the cached unclear stubs — the validator's reachability baseline
|
|
42
|
+
* for the temp class space (stubs are legitimately held by this cache; they are producers,
|
|
43
|
+
* not holders with a temp registration mark, so they are exempt from anchor checks). */
|
|
44
|
+
static getStubCacheEntries(): ClassSignature[];
|
|
45
|
+
static get OBJECT_CLASS_SIGNATURE(): ClassSignature;
|
|
46
|
+
static get OBJECT_CLASS_TYPE(): ClassType;
|
|
47
|
+
static get ARRAY_CLASS_SIGNATURE(): ClassSignature;
|
|
48
|
+
static get REGEXP_CLASS_SIGNATURE(): ClassSignature;
|
|
49
|
+
static get REGEXP_CLASS_TYPE(): ClassType;
|
|
50
|
+
static get ITERATOR_CLASS_SIGNATURE(): ClassSignature;
|
|
51
|
+
static get ITERATOR_RESULT_CLASS_SIGNATURE(): ClassSignature;
|
|
52
|
+
static get ITERATOR_CLASS_TYPE(): ClassType;
|
|
53
|
+
static get ITERATOR_RESULT_CLASS_TYPE(): ClassType;
|
|
54
|
+
/**
|
|
55
|
+
* The stub method signature for `toString` on Object. Each access returns a fresh
|
|
56
|
+
* MethodSignature over the shared Object stub.
|
|
57
|
+
*
|
|
58
|
+
* 教训存档,勿再尝试单例化
|
|
59
|
+
*/
|
|
60
|
+
static get TO_STRING_METHOD_SIGNATURE(): MethodSignature;
|
|
61
|
+
private static arrayStubMethodSignatures;
|
|
62
|
+
static clearStubMethodSigCaches(): void;
|
|
63
|
+
/**
|
|
64
|
+
* Array stub 方法签名(不查 SDK——`(Array stub, name)` 恒 stub 值)的 per-name 实例缓存
|
|
65
|
+
*/
|
|
66
|
+
static getOrCreateArrayStubMethodSignature(methodName: string): MethodSignature;
|
|
43
67
|
static buildArrayMethodSignature(methodName: string, scene: Scene): MethodSignature;
|
|
44
68
|
static getBuiltInMethodSignature(className: string, methodName: string, scene: Scene): MethodSignature | undefined;
|
|
45
69
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Builtin.d.ts","sourceRoot":"","sources":["../../../src/core/common/Builtin.ts"],"names":[],"mappings":"AAeA,OAAO,EAAE,cAAc,EAAE,
|
|
1
|
+
{"version":3,"file":"Builtin.d.ts","sourceRoot":"","sources":["../../../src/core/common/Builtin.ts"],"names":[],"mappings":"AAeA,OAAO,EAAE,cAAc,EAAE,eAAe,EAAsB,MAAM,uBAAuB,CAAC;AAC5F,OAAO,EAAE,SAAS,EAAwC,MAAM,cAAc,CAAC;AAC/E,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAIpC;;;;;;;;;GASG;AACH,qBAAa,OAAO;IAEhB,OAAc,MAAM,SAAY;IAChC,OAAc,KAAK,SAAW;IAC9B,OAAc,GAAG,SAAS;IAC1B,OAAc,GAAG,SAAS;IAC1B,OAAc,MAAM,SAAY;IAChC,OAAc,MAAM,SAAY;IAChC,OAAc,QAAQ,SAAc;IAGpC,OAAc,iBAAiB,SAAqB;IACpD,OAAc,QAAQ,SAAsB;IAC5C,OAAc,aAAa,SAAU;IACrC,OAAc,eAAe,SAAoB;IACjD,OAAc,oBAAoB,SAAU;IAC5C,OAAc,qBAAqB,SAAW;IAG9C,OAAc,SAAS,SAAc;IAGrC,OAAc,KAAK,SAAW;IAC9B,OAAc,MAAM,SAAY;IAIhC;;;;;;OAMG;IACH,OAAO,CAAC,MAAM,CAAC,SAAS,CAA0C;IAElE,mFAAmF;WACrE,wBAAwB,CAAC,SAAS,EAAE,MAAM,GAAG,cAAc;IASzE;;4FAEwF;WAC1E,mBAAmB,IAAI,cAAc,EAAE;IAIrD,WAAkB,sBAAsB,IAAI,cAAc,CAEzD;IACD,WAAkB,iBAAiB,IAAI,SAAS,CAE/C;IACD,WAAkB,qBAAqB,IAAI,cAAc,CAExD;IACD,WAAkB,sBAAsB,IAAI,cAAc,CAEzD;IACD,WAAkB,iBAAiB,IAAI,SAAS,CAE/C;IAED,WAAkB,wBAAwB,IAAI,cAAc,CAE3D;IACD,WAAkB,+BAA+B,IAAI,cAAc,CAElE;IACD,WAAkB,mBAAmB,IAAI,SAAS,CAEjD;IACD,WAAkB,0BAA0B,IAAI,SAAS,CAExD;IAED;;;;;OAKG;IACH,WAAkB,0BAA0B,IAAI,eAAe,CAE9D;IAED,OAAO,CAAC,MAAM,CAAC,yBAAyB,CAAsC;WAEhE,wBAAwB,IAAI,IAAI;IAI9C;;OAEG;WACW,mCAAmC,CAAC,UAAU,EAAE,MAAM,GAAG,eAAe;WASxE,yBAAyB,CAAC,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,GAAG,eAAe;WAQ5E,yBAAyB,CAAC,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,GAAG,eAAe,GAAG,SAAS;CAO5H"}
|
|
@@ -13,80 +13,113 @@
|
|
|
13
13
|
* See the License for the specific language governing permissions and
|
|
14
14
|
* limitations under the License.
|
|
15
15
|
*/
|
|
16
|
-
var _a;
|
|
17
16
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
18
17
|
exports.Builtin = void 0;
|
|
19
18
|
const ArkSignature_1 = require("../model/ArkSignature");
|
|
20
19
|
const Type_1 = require("../base/Type");
|
|
21
20
|
const ArkClass_1 = require("../model/ArkClass");
|
|
21
|
+
const SdkUtils_1 = require("./SdkUtils");
|
|
22
|
+
/**
|
|
23
|
+
* Built-in class name constants and signature stubs.
|
|
24
|
+
*
|
|
25
|
+
* Signatures created here are **unclear stubs** (declaring file = FileSignature.DEFAULT) that
|
|
26
|
+
* live in the temp canonicalizer. During type inference they are resolved to the real SDK
|
|
27
|
+
* signatures via the built-in library (see TypeInference.inferBaseType →
|
|
28
|
+
* SdkUtils.getSdkGlobal);
|
|
29
|
+
* when the SDK is unavailable (enableBuiltIn=false) they remain unresolved in temp space and
|
|
30
|
+
* are reported by checkTempSignatureCompleteness.
|
|
31
|
+
*/
|
|
22
32
|
class Builtin {
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
return
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
static
|
|
36
|
-
return
|
|
37
|
-
}
|
|
38
|
-
static
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
return
|
|
46
|
-
}
|
|
47
|
-
static
|
|
48
|
-
return this.
|
|
33
|
+
/** Unclear stub signature for a built-in class name (shared instance per name). */
|
|
34
|
+
static getBuiltinClassSignature(className) {
|
|
35
|
+
let stub = this.stubCache.get(className);
|
|
36
|
+
if (stub === undefined) {
|
|
37
|
+
stub = new ArkSignature_1.ClassSignature(className, 0, undefined);
|
|
38
|
+
this.stubCache.set(className, stub);
|
|
39
|
+
}
|
|
40
|
+
return stub;
|
|
41
|
+
}
|
|
42
|
+
/** @internal Snapshot of the cached unclear stubs — the validator's reachability baseline
|
|
43
|
+
* for the temp class space (stubs are legitimately held by this cache; they are producers,
|
|
44
|
+
* not holders with a temp registration mark, so they are exempt from anchor checks). */
|
|
45
|
+
static getStubCacheEntries() {
|
|
46
|
+
return Array.from(this.stubCache.values());
|
|
47
|
+
}
|
|
48
|
+
static get OBJECT_CLASS_SIGNATURE() {
|
|
49
|
+
return this.getBuiltinClassSignature(this.OBJECT);
|
|
50
|
+
}
|
|
51
|
+
static get OBJECT_CLASS_TYPE() {
|
|
52
|
+
return new Type_1.ClassType(this.OBJECT_CLASS_SIGNATURE);
|
|
53
|
+
}
|
|
54
|
+
static get ARRAY_CLASS_SIGNATURE() {
|
|
55
|
+
return this.getBuiltinClassSignature(this.ARRAY);
|
|
56
|
+
}
|
|
57
|
+
static get REGEXP_CLASS_SIGNATURE() {
|
|
58
|
+
return this.getBuiltinClassSignature(this.REGEXP);
|
|
59
|
+
}
|
|
60
|
+
static get REGEXP_CLASS_TYPE() {
|
|
61
|
+
return new Type_1.ClassType(this.REGEXP_CLASS_SIGNATURE);
|
|
62
|
+
}
|
|
63
|
+
static get ITERATOR_CLASS_SIGNATURE() {
|
|
64
|
+
return this.getBuiltinClassSignature(this.ITERATOR);
|
|
65
|
+
}
|
|
66
|
+
static get ITERATOR_RESULT_CLASS_SIGNATURE() {
|
|
67
|
+
return this.getBuiltinClassSignature(this.ITERATOR_RESULT);
|
|
68
|
+
}
|
|
69
|
+
static get ITERATOR_CLASS_TYPE() {
|
|
70
|
+
return new Type_1.ClassType(this.ITERATOR_CLASS_SIGNATURE, [new Type_1.GenericType('T')]);
|
|
71
|
+
}
|
|
72
|
+
static get ITERATOR_RESULT_CLASS_TYPE() {
|
|
73
|
+
return new Type_1.ClassType(this.ITERATOR_RESULT_CLASS_SIGNATURE, [new Type_1.GenericType('T')]);
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* The stub method signature for `toString` on Object. Each access returns a fresh
|
|
77
|
+
* MethodSignature over the shared Object stub.
|
|
78
|
+
*
|
|
79
|
+
* 教训存档,勿再尝试单例化
|
|
80
|
+
*/
|
|
81
|
+
static get TO_STRING_METHOD_SIGNATURE() {
|
|
82
|
+
return new ArkSignature_1.MethodSignature(this.OBJECT_CLASS_SIGNATURE, new ArkSignature_1.MethodSubSignature(this.TO_STRING, [], Type_1.StringType.getInstance(), false));
|
|
83
|
+
}
|
|
84
|
+
static clearStubMethodSigCaches() {
|
|
85
|
+
this.arrayStubMethodSignatures.clear();
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Array stub 方法签名(不查 SDK——`(Array stub, name)` 恒 stub 值)的 per-name 实例缓存
|
|
89
|
+
*/
|
|
90
|
+
static getOrCreateArrayStubMethodSignature(methodName) {
|
|
91
|
+
let sig = this.arrayStubMethodSignatures.get(methodName);
|
|
92
|
+
if (sig === undefined) {
|
|
93
|
+
sig = new ArkSignature_1.MethodSignature(Builtin.ARRAY_CLASS_SIGNATURE, new ArkSignature_1.MethodSubSignature(methodName, [], Type_1.UnknownType.getInstance(), false));
|
|
94
|
+
this.arrayStubMethodSignatures.set(methodName, sig);
|
|
95
|
+
}
|
|
96
|
+
return sig;
|
|
49
97
|
}
|
|
50
98
|
static buildArrayMethodSignature(methodName, scene) {
|
|
51
99
|
let methodSignature = this.getBuiltInMethodSignature(Builtin.ARRAY, methodName, scene);
|
|
52
100
|
if (!methodSignature) {
|
|
53
|
-
methodSignature =
|
|
101
|
+
methodSignature = this.getOrCreateArrayStubMethodSignature(methodName);
|
|
54
102
|
}
|
|
55
103
|
return methodSignature;
|
|
56
104
|
}
|
|
57
105
|
static getBuiltInMethodSignature(className, methodName, scene) {
|
|
58
|
-
var
|
|
59
|
-
const globalClass =
|
|
106
|
+
var _a;
|
|
107
|
+
const globalClass = SdkUtils_1.SdkUtils.getSdkGlobal(className);
|
|
60
108
|
if (globalClass instanceof ArkClass_1.ArkClass) {
|
|
61
|
-
return (
|
|
109
|
+
return (_a = globalClass.getMethodWithName(methodName)) === null || _a === void 0 ? void 0 : _a.getSignature();
|
|
62
110
|
}
|
|
63
111
|
return undefined;
|
|
64
112
|
}
|
|
65
113
|
}
|
|
66
114
|
exports.Builtin = Builtin;
|
|
67
|
-
_a = Builtin;
|
|
68
115
|
// built-in classes
|
|
69
|
-
// TODO: Automatically obtain from the standard library
|
|
70
116
|
Builtin.OBJECT = 'Object';
|
|
71
117
|
Builtin.ARRAY = 'Array';
|
|
72
|
-
Builtin.SET = 'Set';
|
|
73
118
|
Builtin.MAP = 'Map';
|
|
119
|
+
Builtin.SET = 'Set';
|
|
74
120
|
Builtin.REGEXP = 'RegExp';
|
|
75
121
|
Builtin.BIGINT = 'BigInt';
|
|
76
122
|
Builtin.FUNCTION = 'Function';
|
|
77
|
-
Builtin.BUILT_IN_CLASSES = _a.buildBuiltInClasses();
|
|
78
|
-
// signature for built-in class
|
|
79
|
-
Builtin.DUMMY_PROJECT_NAME = 'ES2015';
|
|
80
|
-
Builtin.DUMMY_FILE_NAME = 'BuiltinClass';
|
|
81
|
-
Builtin.BUILT_IN_CLASSES_FILE_SIGNATURE = Builtin.buildBuiltInClassesFileSignature();
|
|
82
|
-
Builtin.OBJECT_CLASS_SIGNATURE = _a.buildBuiltInClassSignature(_a.OBJECT);
|
|
83
|
-
Builtin.OBJECT_CLASS_TYPE = new Type_1.ClassType(_a.OBJECT_CLASS_SIGNATURE);
|
|
84
|
-
Builtin.ARRAY_CLASS_SIGNATURE = _a.buildBuiltInClassSignature(_a.ARRAY);
|
|
85
|
-
Builtin.SET_CLASS_SIGNATURE = _a.buildBuiltInClassSignature(_a.SET);
|
|
86
|
-
Builtin.MAP_CLASS_SIGNATURE = _a.buildBuiltInClassSignature(_a.MAP);
|
|
87
|
-
Builtin.REGEXP_CLASS_SIGNATURE = _a.buildBuiltInClassSignature(_a.REGEXP);
|
|
88
|
-
Builtin.REGEXP_CLASS_TYPE = new Type_1.ClassType(_a.REGEXP_CLASS_SIGNATURE);
|
|
89
|
-
Builtin.BUILT_IN_CLASS_SIGNATURE_MAP = _a.buildBuiltInClassSignatureMap();
|
|
90
123
|
// constants for iterator
|
|
91
124
|
Builtin.ITERATOR_FUNCTION = 'Symbol.iterator';
|
|
92
125
|
Builtin.ITERATOR = 'IterableIterator';
|
|
@@ -94,13 +127,18 @@ Builtin.ITERATOR_NEXT = 'next';
|
|
|
94
127
|
Builtin.ITERATOR_RESULT = 'IteratorResult';
|
|
95
128
|
Builtin.ITERATOR_RESULT_DONE = 'done';
|
|
96
129
|
Builtin.ITERATOR_RESULT_VALUE = 'value';
|
|
97
|
-
Builtin.ITERATOR_CLASS_SIGNATURE = _a.buildBuiltInClassSignature(_a.ITERATOR);
|
|
98
|
-
Builtin.ITERATOR_RESULT_CLASS_SIGNATURE = _a.buildBuiltInClassSignature(_a.ITERATOR_RESULT);
|
|
99
|
-
Builtin.ITERATOR_CLASS_TYPE = new Type_1.ClassType(_a.ITERATOR_CLASS_SIGNATURE, [new Type_1.GenericType('T')]);
|
|
100
|
-
Builtin.ITERATOR_RESULT_CLASS_TYPE = new Type_1.ClassType(_a.ITERATOR_RESULT_CLASS_SIGNATURE, [new Type_1.GenericType('T')]);
|
|
101
130
|
// constants for string
|
|
102
131
|
Builtin.TO_STRING = 'toString';
|
|
103
|
-
Builtin.TO_STRING_METHOD_SIGNATURE = new ArkSignature_1.MethodSignature(ArkSignature_1.ClassSignature.DEFAULT, new ArkSignature_1.MethodSubSignature(_a.TO_STRING, [], Type_1.StringType.getInstance(), false));
|
|
104
132
|
// constants for array
|
|
105
133
|
Builtin.SLICE = 'slice';
|
|
106
134
|
Builtin.CONCAT = 'concat';
|
|
135
|
+
// --- Stable unclear stubs (shared per name) ---
|
|
136
|
+
/**
|
|
137
|
+
* Lazy per-name cache of unclear stub signatures. Stubs hold no registry-dependent state
|
|
138
|
+
* (the declaring file SigID is the literal 0, rebuilt as DEFAULT in every registry
|
|
139
|
+
* lifecycle), so the instances are dispose-stable: after dispose(), the rebuilt temp
|
|
140
|
+
* canonicalizer assigns them fresh IDs via its new objectIdentity symbol (the old symbol
|
|
141
|
+
* property is cleaned by Canonicalizer.clear()).
|
|
142
|
+
*/
|
|
143
|
+
Builtin.stubCache = new Map();
|
|
144
|
+
Builtin.arrayStubMethodSignatures = new Map();
|
|
@@ -0,0 +1,308 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 签名 canonicalizer 的内部结构校验器(仅开发调试用)。
|
|
3
|
+
*
|
|
4
|
+
* 每个 formal 空间的校验规则互不相同(class 空间存在别名折叠语义、method 空间存在
|
|
5
|
+
* declare-only 合法无 model 条目等),因此各空间独立实现各自的 validateXxxSpace,
|
|
6
|
+
* 不做统一泛型模板;待多个空间落地后若出现真实重复,再抽取公共部分。
|
|
7
|
+
*
|
|
8
|
+
* 通过 `SceneOptions.validateCanonicalizers` 开启(默认关闭)。
|
|
9
|
+
*/
|
|
10
|
+
export declare class CanonicalizerValidator {
|
|
11
|
+
/**
|
|
12
|
+
* 校验 formal file 空间的结构不变量,规则如下:
|
|
13
|
+
*
|
|
14
|
+
* R1a DEFAULT 保留位契约(正向断言):ID 0 必须存在 DEFAULT 签名条目。
|
|
15
|
+
* 缺失说明 registry 初始化损坏(internDefaults 未执行或被破坏)。
|
|
16
|
+
*
|
|
17
|
+
* R1b DEFAULT 保留位契约(正向断言):ID 0 的 model 必须为 undefined。
|
|
18
|
+
* models[0] 设计上永久空置(registerFile 有 id > 0 守卫);若被绕过守卫
|
|
19
|
+
* 直接 setModel(0, ...) 挂载,视为保留位被侵占。
|
|
20
|
+
*
|
|
21
|
+
* R2 ID 稠密性:[1, size) 内每个 ID 都必须有签名条目。
|
|
22
|
+
* 出现空洞说明条目结构损坏(理论上不可达,防御性检查)。
|
|
23
|
+
*
|
|
24
|
+
* R3 model 完备性:[1, size) 内每个 ID 必须有对应的 ArkFile model。
|
|
25
|
+
* 两种可能来路:① disposeModule 驱逐态(removeFile 删 model 留 sig,合法、
|
|
26
|
+
* 可 reload 自愈);② 新代码引入的空洞(bug)。本工具不区分二者,
|
|
27
|
+
* 全部报告,由开发者结合场景判断。
|
|
28
|
+
*
|
|
29
|
+
* R4 model 回指一致性:挂载在 ID i 的 ArkFile,其 getFileSigID() 必须等于 i。
|
|
30
|
+
* 回指不一致会导致查询路径走 stale 兜底(error 日志 + 返回 DEFAULT)。
|
|
31
|
+
*
|
|
32
|
+
* R5 签名值唯一性:任意两个不同 ID 不得持有 equals() 相等的签名。
|
|
33
|
+
* canonicalizer 本身按 hash+equals 去重,正常情况下同值必同 ID;本规则
|
|
34
|
+
* 违规当且仅当 hash/equals 契约破裂(如给 FileSignature 加字段进了 equals
|
|
35
|
+
* 忘了进 hash)。契约保证"equals 相等 → hash 相等",故违规对必落在同一
|
|
36
|
+
* hash 分组内,按 hashCode 分组后组内两两比较即可,均摊 O(n)。
|
|
37
|
+
* ID 0 的 DEFAULT 签名参与分组比较——这是值域坍缩不变量的守卫:所有用
|
|
38
|
+
* UNKNOWN 常量(%unk/%unk)构造的签名必须 intern 到 ID 0,不得出现第二个。
|
|
39
|
+
*
|
|
40
|
+
* R6 model 挂载唯一性:同一 ArkFile 实例不得挂载于多个 ID。
|
|
41
|
+
* 双挂载意味着模型索引错乱,Scene.getFile 查询结果将不一致。
|
|
42
|
+
*
|
|
43
|
+
* R7 project/SDK ID 边界一致性(仅边界已设置时检查,见
|
|
44
|
+
* SignatureCanonicalizerRegistry.markProjectFileBoundary):
|
|
45
|
+
* [1, first) 内有 model 的 ID,其 isProjectFile() 必须为 false;
|
|
46
|
+
* [first, size) 内有 model 的 ID,其 isProjectFile() 必须为 true。
|
|
47
|
+
* 违反说明构建时序回归(如边界设置后仍有 SDK 文件注册)或 ArkFile 的
|
|
48
|
+
* projectFile 标志被误标。ID 0(DEFAULT)不参与本规则。
|
|
49
|
+
*
|
|
50
|
+
* 执行语义:所有规则全量执行、任何违规不中断;违规逐条收集(规则号 + ID +
|
|
51
|
+
* 签名描述),一次性汇总报告——无论违规多少都给出完整清单。全部规则均为
|
|
52
|
+
* error 级:任何一条违规即意味着某项不变量被打破。
|
|
53
|
+
*
|
|
54
|
+
* @returns 全部违规描述(空数组 = 空间干净)。
|
|
55
|
+
*/
|
|
56
|
+
static validateFileSpace(): string[];
|
|
57
|
+
/** R2–R7:单 ID 条目级校验(R5 仅累积分组,组内比较在 {@link checkSignatureValueUniqueness})。 */
|
|
58
|
+
private static checkFileEntry;
|
|
59
|
+
/**
|
|
60
|
+
* 校验 formal namespace 空间的结构不变量,规则如下:
|
|
61
|
+
*
|
|
62
|
+
* N1a DEFAULT 保留位契约(正向断言):ID 0 必须存在 DEFAULT 签名条目。
|
|
63
|
+
*
|
|
64
|
+
* N1b DEFAULT 保留位契约(正向断言):ID 0 的 model 必须为 undefined。
|
|
65
|
+
*
|
|
66
|
+
* N2 ID 稠密性:[1, size) 内每个 ID 都必须有签名条目。
|
|
67
|
+
*
|
|
68
|
+
* N3 model 完备性:[1, size) 内每个 ID 必须有对应的 ArkNamespace model。
|
|
69
|
+
* 两种可能来路:① disposeModule 驱逐态(removeNamespace 删 model 留 sig,
|
|
70
|
+
* 合法、可 reload 自愈);② 签名值仅被惰性 intern(NamespaceSignature.
|
|
71
|
+
* getNamespaceSigID)而无真实 ArkNamespace 注册——ArkNamespace.setSignature
|
|
72
|
+
* 已带自愈补挂,出现即为新路径逃逸。全部报告,由开发者结合场景判断。
|
|
73
|
+
*
|
|
74
|
+
* N4 model 回指一致性:挂载在 ID i 的 ArkNamespace,其 getNamespaceSigID()
|
|
75
|
+
* 必须等于 i。
|
|
76
|
+
*
|
|
77
|
+
* N5 签名值唯一性:任意两个不同 ID 不得持有 equals() 相等的签名(守卫
|
|
78
|
+
* hash/equals 契约与 DEFAULT 值域坍缩;原理同 file 空间 R5)。
|
|
79
|
+
*
|
|
80
|
+
* N6 model 挂载唯一性:同一 ArkNamespace 实例不得挂载于多个 ID。
|
|
81
|
+
*
|
|
82
|
+
* N7 链完整性(仅对 model 存活的条目检查;驱逐态条目的链检查跳过——N3 已
|
|
83
|
+
* 报告其驱逐,父/子链完整性以存活侧为准):
|
|
84
|
+
* N7a 嵌套 ns:declaringNamespaceSigID 非 undefined 时,父 namespace 的
|
|
85
|
+
* model 必须存在(disposeModule 同文件整树驱逐,父驱逐子存活 = 驱逐
|
|
86
|
+
* 不完整或手工构造逃逸);
|
|
87
|
+
* N7b 嵌套 ns:父 model 的 top 列表必须含本 ID(父子互联正确);
|
|
88
|
+
* N7c 顶层 ns:declaringNamespaceSigID 为 undefined 时,declaring file
|
|
89
|
+
* 的 model 必须存在且其 top 列表含本 ID(file 侧互联正确)。
|
|
90
|
+
*
|
|
91
|
+
* 执行语义:所有规则全量执行、任何违规不中断;违规逐条收集(规则号 + ID +
|
|
92
|
+
* 签名描述),一次性汇总报告。全部规则均为 error 级。
|
|
93
|
+
*
|
|
94
|
+
* @returns 全部违规描述(空数组 = 空间干净)。
|
|
95
|
+
*/
|
|
96
|
+
static validateNamespaceSpace(): string[];
|
|
97
|
+
/** N2–N7:单 ID 条目级校验(N5 仅累积分组,组内比较在 {@link checkSignatureValueUniqueness})。 */
|
|
98
|
+
private static checkNamespaceEntry;
|
|
99
|
+
/** N7a/N7b/N7c:挂载链完整性(仅存活条目;嵌套 ns 查父链,顶层 ns 查 declaring file 链)。 */
|
|
100
|
+
private static checkNamespaceChain;
|
|
101
|
+
/**
|
|
102
|
+
* 校验 formal class 空间的结构不变量,规则如下:
|
|
103
|
+
*
|
|
104
|
+
* C1a DEFAULT 保留位契约(正向断言):ID 0 必须存在 DEFAULT 签名条目。
|
|
105
|
+
*
|
|
106
|
+
* C1b DEFAULT 保留位契约(正向断言):ID 0 的 model 必须为 undefined。
|
|
107
|
+
*
|
|
108
|
+
* C2 ID 稠密性:[1, size) 内每个 ID 都必须有签名条目(防御性检查)。
|
|
109
|
+
*
|
|
110
|
+
* C3 model 完备性:[1, size) 内每个 ID 必须有对应的 ArkClass model。
|
|
111
|
+
* 两种可能来路:① disposeModule 驱逐态(removeClassModel 删 model 留 sig,合法、可 reload 自愈);② 显式 getId intern 无 model——生产路径不产生
|
|
112
|
+
* 此形态(formal 只读命中 / temp 弱注册兜底,写入点收敛为 internDefaults + ArkClass.setSignature),出现即为 tests 手工构造或未来新代码逃逸
|
|
113
|
+
* (ArkClass.setSignature 的 existing≥0 分支不注册语义由本规则持续守护)。全部报告,开发者判别。
|
|
114
|
+
*
|
|
115
|
+
* C4 model 回指一致性:挂载在 ID i 的 ArkClass,其 getClassSigID() 必须
|
|
116
|
+
* 等于 i。
|
|
117
|
+
*
|
|
118
|
+
* C5 签名值唯一性:任意两个不同 ID 不得持有 equals() 相等的签名(守卫
|
|
119
|
+
* hash/equals 契约与 DEFAULT 值域坍缩;原理同 file R5)。
|
|
120
|
+
* 注:display 归一化后 AliasClassSignature 的 aliasName **参与** equals/hash——alias 是独立 formal 条目(同 aliasName+同 origin 维度折叠、异名/
|
|
121
|
+
* 与 origin 互不相等),本规则即守护该独立 ID 语义(两个 alias ID 值相等 = 契约破坏)。
|
|
122
|
+
*
|
|
123
|
+
* C6 model 挂载唯一性:同一 ArkClass 实例不得挂载于多个 ID。
|
|
124
|
+
*
|
|
125
|
+
* C7 挂载链完整性(仅对 model 存活条目检查;驱逐态条目链检查跳过——C3 已
|
|
126
|
+
* 报告其驱逐,链完整性以存活侧为准;单 Scene 单次构建生命周期声明覆盖):
|
|
127
|
+
* C7a 嵌套类:declaringNamespaceSigID 非 undefined 时,父 namespace
|
|
128
|
+
* 的 model 必须存在(父驱逐子存活 = 驱逐不完整或手工构造逃逸);
|
|
129
|
+
* C7b 嵌套类:父 ns 的 topClass 列表必须含本 ID(hasTopClassWithID);
|
|
130
|
+
* C7c 顶层类:declaring file 的 model 必须存在且其 topClass 列表
|
|
131
|
+
* 含本 ID。
|
|
132
|
+
*
|
|
133
|
+
* 执行语义:所有规则全量执行、任何违规不中断;违规逐条收集(规则号 + ID +
|
|
134
|
+
* 签名描述),一次性汇总报告。全部规则均为 error 级。
|
|
135
|
+
*
|
|
136
|
+
* @returns 全部违规描述(空数组 = 空间干净)。
|
|
137
|
+
*/
|
|
138
|
+
static validateClassSpace(): string[];
|
|
139
|
+
/** C2–C7:单 ID 条目级校验(C5 仅累积分组,组内比较在 {@link checkSignatureValueUniqueness};alias 条目豁免 C4/C6/链检查)。 */
|
|
140
|
+
private static checkClassEntry;
|
|
141
|
+
/** C7a/C7b/C7c:挂载链完整性(仅存活条目;alias 条目豁免——挂载链以 origin 条目为准)。 */
|
|
142
|
+
private static checkClassChain;
|
|
143
|
+
/**
|
|
144
|
+
* 校验 formal field 空间的结构不变量,规则如下:
|
|
145
|
+
*
|
|
146
|
+
* F1a DEFAULT 保留位契约(正向断言):ID 0 必须存在 DEFAULT 签名条目。
|
|
147
|
+
*
|
|
148
|
+
* F1b DEFAULT 保留位契约(正向断言):ID 0 的 model 必须为 undefined。
|
|
149
|
+
*
|
|
150
|
+
* F2 ID 稠密性:[1, size) 内每个 ID 都必须有签名条目(防御性检查)。
|
|
151
|
+
*
|
|
152
|
+
* F3 model 完备性:[1, size) 内每个 ID 必须有对应的 ArkField model。
|
|
153
|
+
* 两种可能来路:① 驱逐态(disposeModule / pruneNonKeptClasses 的
|
|
154
|
+
* removeField 删 model 留 sig,合法、reload 由 addField 兜底自愈——
|
|
155
|
+
* 窗口期报告属预期);② 引用侧 namespace 声明签名(genFieldSignature
|
|
156
|
+
* 等构造的 ns 重载,无 ArkField model,值语义合法形态)及未来新代码
|
|
157
|
+
* 逃逸。全部报告,由开发者结合场景判断。
|
|
158
|
+
*
|
|
159
|
+
* F4 model 回指一致性:挂载在 ID i 的 ArkField,其 getFieldSigID() 必须
|
|
160
|
+
* 等于 i(field 单轨——无 method 空间的 impl/declare 双槽复杂度)。
|
|
161
|
+
*
|
|
162
|
+
* F4b 双侧声明类一致性:model.getDeclaringClassID() 必须等于
|
|
163
|
+
* sig.getDeclaringClassSigID()(ArkField 与 FieldSignature 独立维护
|
|
164
|
+
* 两处 declaring ClassSigID,能抓 builder 不一致 bug)。
|
|
165
|
+
* 注意 breakInternalReferences 将 declaringClassID 置 -1 的窗口形态
|
|
166
|
+
* (unload 后半,model 残留期)——该形态同时被 F3(若 model 已删)
|
|
167
|
+
* 或本规则(model 仍在但 ID=-1)捕获,属驱逐窗口预期报告。
|
|
168
|
+
*
|
|
169
|
+
* F5 签名值唯一性:任意两个不同 ID 不得持有 equals() 相等的签名
|
|
170
|
+
* (hash 分组 + 组内两两比较;ID 0 种入守卫 DEFAULT 值域坍缩)。
|
|
171
|
+
* 注记:type 不参与身份(equals/hashCode 只含 fieldName + staticFlag +
|
|
172
|
+
* 四个 declaring SigID);setType/setStaticFlag 可在 intern 后原地改值
|
|
173
|
+
* 且不重算 hash(hash-equal 是 equals-equal 的合法超集,算法不受影响)。
|
|
174
|
+
*
|
|
175
|
+
* F6 model 挂载唯一性:同一 ArkField 实例不得挂载于多个 ID(按 model 槽
|
|
176
|
+
* 唯一口径——AbcInference 同名重复推断产生的非 model 别名实例是值语义
|
|
177
|
+
* 合法形态,不属违规)。
|
|
178
|
+
*
|
|
179
|
+
* F7 挂载链完整性(仅对 model 存活条目检查):
|
|
180
|
+
* F7a declaring class 的 model 必须存在(class 驱逐后 field 存活 =
|
|
181
|
+
* 驱逐不完整——P0 修复后此形态应仅出现在合法驱逐窗口之外);
|
|
182
|
+
* F7b 该 class 的字段索引必须含本 ID:hasTopFieldWithID(i) ||
|
|
183
|
+
* hasTopStaticFieldWithID(i)——联合判定(不区分数组):index
|
|
184
|
+
* signature 存在签名 staticFlag=true 但按 modifier tag 挂实例
|
|
185
|
+
* 数组的既有不一致形态,联合判定免误报。
|
|
186
|
+
* 注记:model 侧不存在 namespace 声明的 ArkField(ns 声明签名仅在引用侧,无 F7 的 ns 分支);查询走 sig.getDeclaringClassSigID() formal 直查
|
|
187
|
+
* (不经 declaringSignatureDisplay——display 归一化后 declaringClass 为 AliasClassSignature 时 SigID 是独立的 alias ID,formal 直查命中 alias 条目,
|
|
188
|
+
* display 仅影响展示)。
|
|
189
|
+
*
|
|
190
|
+
* 执行语义:所有规则全量执行、任何违规不中断;违规逐条收集(规则号 + ID +
|
|
191
|
+
* 签名描述),一次性汇总报告。全部规则均为 error 级。
|
|
192
|
+
*
|
|
193
|
+
* @returns 全部违规描述(空数组 = 空间干净)。
|
|
194
|
+
*/
|
|
195
|
+
static validateFieldSpace(): string[];
|
|
196
|
+
/** F2–F7:单 ID 条目级校验(F5 仅累积分组,组内比较在 {@link checkSignatureValueUniqueness})。 */
|
|
197
|
+
private static checkFieldEntry;
|
|
198
|
+
/** F7a/F7b:挂载链完整性(仅存活条目——declaring class model 存在 + 类字段索引联合判定)。 */
|
|
199
|
+
private static checkFieldChain;
|
|
200
|
+
/**
|
|
201
|
+
* 校验 formal method 空间的结构不变量,规则如下:
|
|
202
|
+
*
|
|
203
|
+
* 前置设计契约(闭包双签名,BodyBuilder.updateNestedMethodWithClosures 的
|
|
204
|
+
* 终态为设计行为):重签后 model[id1]=M(旧签名,类索引锚定——枚举入口)
|
|
205
|
+
* 与 model[id2]=M(新签名含闭包参数——invoke expr 消费面)双注册合法,
|
|
206
|
+
* topMethodSigIDs 持 id1 不变、id2 不入索引(保证 getMethods 枚举唯一,
|
|
207
|
+
* 实测 ENUM-DUP=0)。
|
|
208
|
+
*
|
|
209
|
+
* M1a DEFAULT 保留位契约(正向断言):ID 0 必须存在 DEFAULT 签名条目。
|
|
210
|
+
*
|
|
211
|
+
* M1b DEFAULT 保留位契约(正向断言):ID 0 的 model 必须为 undefined。
|
|
212
|
+
*
|
|
213
|
+
* M2 ID 稠密性:[1, size) 内每个 ID 都必须有签名条目(防御性检查)。
|
|
214
|
+
*
|
|
215
|
+
* M3 model 完备性:无 model 的条目按 declaring class 存活判定分类——declaring class 的 model 存活 → 视为 declare-only 合法态跳过(实证:SDK 接口
|
|
216
|
+
* overload 声明条目(如 ObjectConstructor.create/freeze 的非首声明)与闭包 declare 重签产物均为此形态,单资源达千条量级,属构建常态而非洞);
|
|
217
|
+
* declaring class 不明(-1/0)或 class model 已删(驱逐窗口外)→ 报告。驱逐窗口内的条目随 reload 由 addMethod 兜底自愈。
|
|
218
|
+
*
|
|
219
|
+
* M4 挂载槽一致性(方法级三方持有,闭包双签名适配):model[i] 存在时,
|
|
220
|
+
* i === M.getMethodSigID() ∨ M.declareSigIDs ∋ i ∨ 某存活类方法索引
|
|
221
|
+
* ∋ i。闭包 id1 经索引持有 ✓、id2 经 self-id ✓;违规 = 孤儿挂载
|
|
222
|
+
* (无任何持有方的 model 残留,如驱逐窗口 legacy 槽)。
|
|
223
|
+
*
|
|
224
|
+
* M4b 双侧声明类一致:model.getDeclaringClassID() === sig 的
|
|
225
|
+
* declaringClassSigID(独立双维护点,抓 builder 不同步)。copyMembers
|
|
226
|
+
* 跨类挂载双侧同指 from 类 → 不误报 ✓。
|
|
227
|
+
*
|
|
228
|
+
* M5 签名值唯一(hash 分组 + 组内两两 equals,ID 0 种入守卫值域坍缩)。
|
|
229
|
+
* 注记:declaringClassTempSigID 参与 equals——temp 版与 formal 版是
|
|
230
|
+
* 合法分裂条目非重复;returnType 进 equals 不进 hash(仅返回类型不同
|
|
231
|
+
* 的重载合法分 ID)。
|
|
232
|
+
*
|
|
233
|
+
* M6 反向链检查(非实例唯一——闭包双挂载已合法化):存活类方法索引
|
|
234
|
+
* (含 default/init 三个旁路 ID 字段)的每个条目 ID 必须有 model
|
|
235
|
+
* (抓索引断链:驱逐 desync、索引损坏)。
|
|
236
|
+
*
|
|
237
|
+
* M7 declaring class model 存在(sig 侧 -1 temp / 0 跳过并注记;
|
|
238
|
+
* class 驱逐后 method 存活 = 驱逐不完整形态)。
|
|
239
|
+
*
|
|
240
|
+
* 执行语义:所有规则全量执行、任何违规不中断;违规逐条收集(规则号 + ID +
|
|
241
|
+
* 签名描述),一次性汇总报告。全部规则均为 error 级。
|
|
242
|
+
*
|
|
243
|
+
* @returns 全部违规描述(空数组 = 空间干净)。
|
|
244
|
+
*/
|
|
245
|
+
static validateMethodSpace(): string[];
|
|
246
|
+
/** M4/M6 辅助结构(单遍构建):索引持有集(存活类方法索引 + default/init 旁路 ID)与索引条目清单。 */
|
|
247
|
+
private static collectMethodIndexHolders;
|
|
248
|
+
/** M2–M7:单 ID 条目级校验(M5 仅累积分组,组内比较在 {@link checkSignatureValueUniqueness})。 */
|
|
249
|
+
private static checkMethodEntry;
|
|
250
|
+
/** M6(反向链):存活类方法索引的每个条目 ID 必须有 model。 */
|
|
251
|
+
private static checkMethodIndexBackLinks;
|
|
252
|
+
/**
|
|
253
|
+
* 校验三个 temp 弱注册空间(class/method/field)的结构不变量,规则如下:
|
|
254
|
+
*
|
|
255
|
+
* T1 非陈旧性:非空 slot 的值不得已存在于 formal 空间。temp 注册的前提是
|
|
256
|
+
* formal miss;若后来同值签名进入 formal(真实模型注册),该 slot 即
|
|
257
|
+
* 过期——消费方已可从 formal 解析,成为"可迁移未迁移"的陈旧残留
|
|
258
|
+
* (持有者下次重路由 formal 命中时经 retireWithReplacement 置空)。
|
|
259
|
+
* (注意:不做"全部 unclear"强断言——ClassType/FunctionType/Ref 等注册源
|
|
260
|
+
* 的条件是 formal miss,clear-but-unregistered 条目为设计内合法形态。)
|
|
261
|
+
*
|
|
262
|
+
* T2 register 幂等守护:槽位 ID ↔ 实例自带 symbol ID 双向一致。register 按
|
|
263
|
+
* 对象恒等幂等分配 ID(同实例复用、新实例新 ID),同一实例出现在两个
|
|
264
|
+
* 槽位(或实例自带 ID 与槽位不符)意味着 symbol 标记被破坏。
|
|
265
|
+
*
|
|
266
|
+
* T3 持有者 ID 有效性:持有结构上声明的 temp SigID
|
|
267
|
+
* 必须指向非空 slot(未迁移)或有替换记录的已置空 slot(已迁移,惰性
|
|
268
|
+
* 物化痕迹态 formalID≥0 && tempSigID≠undefined 亦经此规则覆盖)。
|
|
269
|
+
* 两者皆无 = stale(Registry clear/dispose 后的残留)或从未注册的 ID
|
|
270
|
+
* (构造 bug)。持有结构(判据一律用注册标记字段 getTempSigID /
|
|
271
|
+
* getDeclaringClassTempSigID):
|
|
272
|
+
* - tempClass:ClassType(getTempSigID)、FieldSignature/MethodSignature
|
|
273
|
+
* 的 declaringClassTempSigID
|
|
274
|
+
* - tempMethod:FunctionType/LexicalEnvType/AbstractInvokeExpr(getTempSigID)
|
|
275
|
+
* - tempField:EnumValueType、AbstractFieldRef 即 ArkInstanceFieldRef/
|
|
276
|
+
* ArkStaticFieldRef(getTempSigID)
|
|
277
|
+
*
|
|
278
|
+
* T4 持有可达性——不设此规则:索引表 slot 强持有下,"存活但无持有者"的 GC 驱动判定失去意义(slot 本身就是持有者,全保留是设计决策——推导中间垃圾
|
|
279
|
+
* 钉活到 dispose 属知情权衡)。若引入 prune,再按需新建对应审计规则。
|
|
280
|
+
*
|
|
281
|
+
* 执行语义:所有规则全量执行、任何违规不中断;全部为 error 级。
|
|
282
|
+
*
|
|
283
|
+
* @returns 全部违规描述(空数组 = 三个空间干净)。
|
|
284
|
+
*/
|
|
285
|
+
static validateTempSpaces(): string[];
|
|
286
|
+
private static runTempSpaceValidation;
|
|
287
|
+
/** T1 + T2:单空间的条目级校验。 */
|
|
288
|
+
private static validateTempSpaceEntries;
|
|
289
|
+
private static checkTempHolderIDs;
|
|
290
|
+
/** T3(方法粒度):方法签名 declaring/返回类型/参数类型 + 方法体(locals/usedGlobals/语句 def&uses)。 */
|
|
291
|
+
private static checkMethodHolderEntries;
|
|
292
|
+
/** T3 判定:声明的 temp SigID 必须指向非空 slot(未迁移)或有替换记录的已置空 slot(已迁移)。 */
|
|
293
|
+
private static checkTempHolderID;
|
|
294
|
+
/** T3 类型遍历:按类型形态分发持有检查(容器递归共享 visited 防环)。 */
|
|
295
|
+
private static visitTypeHolders;
|
|
296
|
+
/** T3 值遍历:invoke expr / field ref / GlobalRef 的 temp 声明与嵌套遍历。 */
|
|
297
|
+
private static visitValueHolders;
|
|
298
|
+
/** X1a/X1b:DEFAULT reserved-slot contract (entry exists + model empty), seeding ID 0 into the value-uniqueness groups. */
|
|
299
|
+
private static checkDefaultSlot;
|
|
300
|
+
/** X5(检查):组内两两 equals——hash/equals 契约与 DEFAULT 值域坍缩守卫。分组大小几乎恒为 1,均摊 O(n)。 */
|
|
301
|
+
private static checkSignatureValueUniqueness;
|
|
302
|
+
/**
|
|
303
|
+
* 校验全部已注册空间,输出一份合并汇总(完整全貌,绝不截断)。
|
|
304
|
+
* @returns 全部空间干净时返回 true。
|
|
305
|
+
*/
|
|
306
|
+
static validateAll(): boolean;
|
|
307
|
+
}
|
|
308
|
+
//# sourceMappingURL=CanonicalizerValidator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CanonicalizerValidator.d.ts","sourceRoot":"","sources":["../../../src/core/common/CanonicalizerValidator.ts"],"names":[],"mappings":"AA+BA;;;;;;;;GAQG;AACH,qBAAa,sBAAsB;IAC/B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA4CG;WACW,iBAAiB,IAAI,MAAM,EAAE;IAsB3C,8EAA8E;IAC9E,OAAO,CAAC,MAAM,CAAC,cAAc;IAwD7B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAoCG;WACW,sBAAsB,IAAI,MAAM,EAAE;IAoBhD,8EAA8E;IAC9E,OAAO,CAAC,MAAM,CAAC,mBAAmB;IA8ClC,oEAAoE;IACpE,OAAO,CAAC,MAAM,CAAC,mBAAmB;IAyBlC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAoCG;WACW,kBAAkB,IAAI,MAAM,EAAE;IAoB5C,mGAAmG;IACnG,OAAO,CAAC,MAAM,CAAC,eAAe;IAkD9B,8DAA8D;IAC9D,OAAO,CAAC,MAAM,CAAC,eAAe;IAuB9B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAmDG;WACW,kBAAkB,IAAI,MAAM,EAAE;IAoB5C,8EAA8E;IAC9E,OAAO,CAAC,MAAM,CAAC,eAAe;IAuD9B,mEAAmE;IACnE,OAAO,CAAC,MAAM,CAAC,eAAe;IAkB9B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA4CG;WACW,mBAAmB,IAAI,MAAM,EAAE;IAqB7C,mEAAmE;IACnE,OAAO,CAAC,MAAM,CAAC,yBAAyB;IAwBxC,8EAA8E;IAC9E,OAAO,CAAC,MAAM,CAAC,gBAAgB;IA0D/B,yCAAyC;IACzC,OAAO,CAAC,MAAM,CAAC,yBAAyB;IAgBxC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAgCG;WACW,kBAAkB,IAAI,MAAM,EAAE;IAI5C,OAAO,CAAC,MAAM,CAAC,sBAAsB;IAUrC,yBAAyB;IACzB,OAAO,CAAC,MAAM,CAAC,wBAAwB;IA2BvC,OAAO,CAAC,MAAM,CAAC,kBAAkB;IAwBjC,+EAA+E;IAC/E,OAAO,CAAC,MAAM,CAAC,wBAAwB;IAkCvC,iEAAiE;IACjE,OAAO,CAAC,MAAM,CAAC,iBAAiB;IAoBhC,8CAA8C;IAC9C,OAAO,CAAC,MAAM,CAAC,gBAAgB;IAuC/B,iEAAiE;IACjE,OAAO,CAAC,MAAM,CAAC,iBAAiB;IAyBhC,0HAA0H;IAC1H,OAAO,CAAC,MAAM,CAAC,gBAAgB;IAmB/B,6EAA6E;IAC7E,OAAO,CAAC,MAAM,CAAC,6BAA6B;IAoB5C;;;OAGG;WACW,WAAW,IAAI,OAAO;CAgBvC"}
|