@sun-asterisk/sunlint 1.3.34 → 1.3.36
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/core/architecture-integration.js +16 -7
- package/core/auto-performance-manager.js +1 -1
- package/core/cli-action-handler.js +102 -2
- package/core/cli-program.js +102 -138
- package/core/file-targeting-service.js +62 -4
- package/core/git-utils.js +19 -12
- package/core/github-annotate-service.js +326 -11
- package/core/html-report-generator.js +326 -731
- package/core/impact-integration.js +551 -0
- package/core/output-service.js +293 -21
- package/core/scoring-service.js +3 -2
- package/engines/arch-detect/core/analyzer.js +413 -0
- package/engines/arch-detect/core/index.js +22 -0
- package/engines/arch-detect/engine/hybrid-detector.js +176 -0
- package/engines/arch-detect/engine/index.js +24 -0
- package/engines/arch-detect/engine/rule-executor.js +228 -0
- package/engines/arch-detect/engine/score-calculator.js +214 -0
- package/engines/arch-detect/engine/violation-detector.js +616 -0
- package/engines/arch-detect/index.js +50 -0
- package/engines/arch-detect/rules/base-rule.js +187 -0
- package/engines/arch-detect/rules/index.js +35 -0
- package/engines/arch-detect/rules/layered/index.js +28 -0
- package/engines/arch-detect/rules/layered/l001-presentation-layer.js +237 -0
- package/engines/arch-detect/rules/layered/l002-business-layer.js +215 -0
- package/engines/arch-detect/rules/layered/l003-data-layer.js +229 -0
- package/engines/arch-detect/rules/layered/l004-model-layer.js +204 -0
- package/engines/arch-detect/rules/layered/l005-layer-separation.js +215 -0
- package/engines/arch-detect/rules/layered/l006-dependency-direction.js +221 -0
- package/engines/arch-detect/rules/layered/layered-rules-collection.js +445 -0
- package/engines/arch-detect/rules/modular/index.js +27 -0
- package/engines/arch-detect/rules/modular/m001-feature-modules.js +238 -0
- package/engines/arch-detect/rules/modular/m002-core-module.js +169 -0
- package/engines/arch-detect/rules/modular/m003-module-declaration.js +186 -0
- package/engines/arch-detect/rules/modular/m004-public-api.js +171 -0
- package/engines/arch-detect/rules/modular/m005-no-deep-imports.js +220 -0
- package/engines/arch-detect/rules/modular/modular-rules-collection.js +357 -0
- package/engines/arch-detect/rules/presentation/index.js +27 -0
- package/engines/arch-detect/rules/presentation/pr001-view-layer.js +221 -0
- package/engines/arch-detect/rules/presentation/pr002-presentation-logic.js +192 -0
- package/engines/arch-detect/rules/presentation/pr004-data-binding.js +187 -0
- package/engines/arch-detect/rules/presentation/pr006-router-layer.js +185 -0
- package/engines/arch-detect/rules/presentation/pr007-interactor-layer.js +181 -0
- package/engines/arch-detect/rules/presentation/presentation-rules-collection.js +507 -0
- package/engines/arch-detect/rules/project-scanner/index.js +31 -0
- package/engines/arch-detect/rules/project-scanner/ps001-project-root.js +213 -0
- package/engines/arch-detect/rules/project-scanner/ps002-language-detection.js +192 -0
- package/engines/arch-detect/rules/project-scanner/ps003-framework-detection.js +339 -0
- package/engines/arch-detect/rules/project-scanner/ps004-build-system.js +171 -0
- package/engines/arch-detect/rules/project-scanner/ps005-source-directory.js +163 -0
- package/engines/arch-detect/rules/project-scanner/ps006-test-directory.js +184 -0
- package/engines/arch-detect/rules/project-scanner/ps007-documentation.js +149 -0
- package/engines/arch-detect/rules/project-scanner/ps008-cicd-detection.js +163 -0
- package/engines/arch-detect/rules/project-scanner/ps009-code-quality.js +152 -0
- package/engines/arch-detect/rules/project-scanner/ps010-statistics.js +180 -0
- package/engines/arch-detect/rules/rule-registry.js +111 -0
- package/engines/arch-detect/types/context.types.js +60 -0
- package/engines/arch-detect/types/enums.js +161 -0
- package/engines/arch-detect/types/index.js +25 -0
- package/engines/arch-detect/types/result.types.js +7 -0
- package/engines/arch-detect/types/rule.types.js +7 -0
- package/engines/arch-detect/utils/file-scanner.js +411 -0
- package/engines/arch-detect/utils/index.js +23 -0
- package/engines/arch-detect/utils/pattern-matcher.js +328 -0
- package/engines/impact/cli.js +106 -0
- package/engines/impact/config/default-config.js +54 -0
- package/engines/impact/core/change-detector.js +258 -0
- package/engines/impact/core/detectors/database-detector.js +1317 -0
- package/engines/impact/core/detectors/endpoint-detector.js +55 -0
- package/engines/impact/core/impact-analyzer.js +124 -0
- package/engines/impact/core/report-generator.js +462 -0
- package/engines/impact/core/utils/ast-parser.js +241 -0
- package/engines/impact/core/utils/dependency-graph.js +159 -0
- package/engines/impact/core/utils/file-utils.js +116 -0
- package/engines/impact/core/utils/git-utils.js +203 -0
- package/engines/impact/core/utils/logger.js +13 -0
- package/engines/impact/core/utils/method-call-graph.js +1192 -0
- package/engines/impact/index.js +135 -0
- package/engines/impact/package.json +29 -0
- package/package.json +18 -43
- package/scripts/build-release.sh +0 -0
- package/scripts/copy-impact-analyzer.js +135 -0
- package/scripts/install.sh +0 -0
- package/scripts/manual-release.sh +0 -0
- package/scripts/pre-release-test.sh +0 -0
- package/scripts/prepare-release.sh +0 -0
- package/scripts/quick-performance-test.js +0 -0
- package/scripts/setup-github-registry.sh +0 -0
- package/scripts/trigger-release.sh +0 -0
- package/scripts/verify-install.sh +0 -0
- package/templates/combined-report.html +1418 -0
|
@@ -0,0 +1,507 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Presentation Rules Collection
|
|
4
|
+
* Định nghĩa các rules còn lại (PR003, PR005, PR008-PR016)
|
|
5
|
+
*/
|
|
6
|
+
var __esDecorate = (this && this.__esDecorate) || function (ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {
|
|
7
|
+
function accept(f) { if (f !== void 0 && typeof f !== "function") throw new TypeError("Function expected"); return f; }
|
|
8
|
+
var kind = contextIn.kind, key = kind === "getter" ? "get" : kind === "setter" ? "set" : "value";
|
|
9
|
+
var target = !descriptorIn && ctor ? contextIn["static"] ? ctor : ctor.prototype : null;
|
|
10
|
+
var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});
|
|
11
|
+
var _, done = false;
|
|
12
|
+
for (var i = decorators.length - 1; i >= 0; i--) {
|
|
13
|
+
var context = {};
|
|
14
|
+
for (var p in contextIn) context[p] = p === "access" ? {} : contextIn[p];
|
|
15
|
+
for (var p in contextIn.access) context.access[p] = contextIn.access[p];
|
|
16
|
+
context.addInitializer = function (f) { if (done) throw new TypeError("Cannot add initializers after decoration has completed"); extraInitializers.push(accept(f || null)); };
|
|
17
|
+
var result = (0, decorators[i])(kind === "accessor" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);
|
|
18
|
+
if (kind === "accessor") {
|
|
19
|
+
if (result === void 0) continue;
|
|
20
|
+
if (result === null || typeof result !== "object") throw new TypeError("Object expected");
|
|
21
|
+
if (_ = accept(result.get)) descriptor.get = _;
|
|
22
|
+
if (_ = accept(result.set)) descriptor.set = _;
|
|
23
|
+
if (_ = accept(result.init)) initializers.unshift(_);
|
|
24
|
+
}
|
|
25
|
+
else if (_ = accept(result)) {
|
|
26
|
+
if (kind === "field") initializers.unshift(_);
|
|
27
|
+
else descriptor[key] = _;
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
if (target) Object.defineProperty(target, contextIn.name, descriptor);
|
|
31
|
+
done = true;
|
|
32
|
+
};
|
|
33
|
+
var __runInitializers = (this && this.__runInitializers) || function (thisArg, initializers, value) {
|
|
34
|
+
var useValue = arguments.length > 2;
|
|
35
|
+
for (var i = 0; i < initializers.length; i++) {
|
|
36
|
+
value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);
|
|
37
|
+
}
|
|
38
|
+
return useValue ? value : void 0;
|
|
39
|
+
};
|
|
40
|
+
var __setFunctionName = (this && this.__setFunctionName) || function (f, name, prefix) {
|
|
41
|
+
if (typeof name === "symbol") name = name.description ? "[".concat(name.description, "]") : "";
|
|
42
|
+
return Object.defineProperty(f, "name", { configurable: true, value: prefix ? "".concat(prefix, " ", name) : name });
|
|
43
|
+
};
|
|
44
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
45
|
+
exports.PR016SideEffects = exports.PR015UiSeparation = exports.PR014ErrorHandling = exports.PR013Testing = exports.PR012Navigation = exports.PR011DependencyInjection = exports.PR010StateManagement = exports.PR009ViewPassive = exports.PR008ViperStructure = exports.PR005ObservableState = exports.PR003ModelLayer = void 0;
|
|
46
|
+
const enums_1 = require("../../types/enums");
|
|
47
|
+
const base_rule_1 = require("../base-rule");
|
|
48
|
+
const rule_registry_1 = require("../rule-registry");
|
|
49
|
+
// PR003: Model/Entity Layer Exists
|
|
50
|
+
const pr003Rule = (0, base_rule_1.createRule)('PR003', 'Model/Entity Layer Exists', 'Xác nhận có data models thuần túy', enums_1.RuleCategory.CORE, 0.08, [enums_1.PatternType.PRESENTATION, enums_1.PatternType.MVVM, enums_1.PatternType.VIPER], {
|
|
51
|
+
folderPatterns: ['models', 'entities', 'domain', 'data', 'Models', 'Entities'],
|
|
52
|
+
filePatterns: ['*Model.*', '*Entity.*', '*Data.*', '*DTO.*'],
|
|
53
|
+
}, { tags: ['presentation', 'model'] });
|
|
54
|
+
let PR003ModelLayer = (() => {
|
|
55
|
+
let _classDecorators = [(0, rule_registry_1.RegisterRule)(pr003Rule)];
|
|
56
|
+
let _classDescriptor;
|
|
57
|
+
let _classExtraInitializers = [];
|
|
58
|
+
let _classThis;
|
|
59
|
+
let _classSuper = base_rule_1.BaseRule;
|
|
60
|
+
var PR003ModelLayer = _classThis = class extends _classSuper {
|
|
61
|
+
constructor() {
|
|
62
|
+
super(...arguments);
|
|
63
|
+
this.rule = pr003Rule;
|
|
64
|
+
}
|
|
65
|
+
};
|
|
66
|
+
__setFunctionName(_classThis, "PR003ModelLayer");
|
|
67
|
+
(() => {
|
|
68
|
+
const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(_classSuper[Symbol.metadata] ?? null) : void 0;
|
|
69
|
+
__esDecorate(null, _classDescriptor = { value: _classThis }, _classDecorators, { kind: "class", name: _classThis.name, metadata: _metadata }, null, _classExtraInitializers);
|
|
70
|
+
PR003ModelLayer = _classThis = _classDescriptor.value;
|
|
71
|
+
if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
|
|
72
|
+
__runInitializers(_classThis, _classExtraInitializers);
|
|
73
|
+
})();
|
|
74
|
+
return PR003ModelLayer = _classThis;
|
|
75
|
+
})();
|
|
76
|
+
exports.PR003ModelLayer = PR003ModelLayer;
|
|
77
|
+
// PR005: Observable State Pattern (MVVM)
|
|
78
|
+
const pr005Rule = (0, base_rule_1.createRule)('PR005', 'Observable State Pattern', 'Xác nhận ViewModel expose observable state', enums_1.RuleCategory.CORE, 0.08, [enums_1.PatternType.PRESENTATION, enums_1.PatternType.MVVM], {
|
|
79
|
+
codePatterns: [
|
|
80
|
+
// Android/Kotlin - StateFlow
|
|
81
|
+
{ language: enums_1.Language.KOTLIN, type: enums_1.CodePatternType.PATTERN, pattern: /StateFlow</ },
|
|
82
|
+
{ language: enums_1.Language.KOTLIN, type: enums_1.CodePatternType.PATTERN, pattern: /MutableStateFlow</ },
|
|
83
|
+
{ language: enums_1.Language.KOTLIN, type: enums_1.CodePatternType.PATTERN, pattern: /asStateFlow\(\)/ },
|
|
84
|
+
// Android/Kotlin - LiveData
|
|
85
|
+
{ language: enums_1.Language.KOTLIN, type: enums_1.CodePatternType.PATTERN, pattern: /LiveData</ },
|
|
86
|
+
{ language: enums_1.Language.KOTLIN, type: enums_1.CodePatternType.PATTERN, pattern: /MutableLiveData</ },
|
|
87
|
+
// Android/Kotlin - Flow
|
|
88
|
+
{ language: enums_1.Language.KOTLIN, type: enums_1.CodePatternType.PATTERN, pattern: /\.collect\s*\{/ },
|
|
89
|
+
{ language: enums_1.Language.KOTLIN, type: enums_1.CodePatternType.PATTERN, pattern: /collectAsState/ },
|
|
90
|
+
// iOS/Swift
|
|
91
|
+
{ language: enums_1.Language.SWIFT, type: enums_1.CodePatternType.ANNOTATION, pattern: /@Published/ },
|
|
92
|
+
{ language: enums_1.Language.SWIFT, type: enums_1.CodePatternType.ANNOTATION, pattern: /@StateObject/ },
|
|
93
|
+
{ language: enums_1.Language.SWIFT, type: enums_1.CodePatternType.ANNOTATION, pattern: /@ObservedObject/ },
|
|
94
|
+
// Flutter/Dart
|
|
95
|
+
{ language: enums_1.Language.DART, type: enums_1.CodePatternType.PATTERN, pattern: /Stream</ },
|
|
96
|
+
{ language: enums_1.Language.DART, type: enums_1.CodePatternType.PATTERN, pattern: /StreamBuilder/ },
|
|
97
|
+
{ language: enums_1.Language.DART, type: enums_1.CodePatternType.PATTERN, pattern: /ValueNotifier/ },
|
|
98
|
+
],
|
|
99
|
+
}, { tags: ['presentation', 'mvvm', 'observable'] });
|
|
100
|
+
let PR005ObservableState = (() => {
|
|
101
|
+
let _classDecorators = [(0, rule_registry_1.RegisterRule)(pr005Rule)];
|
|
102
|
+
let _classDescriptor;
|
|
103
|
+
let _classExtraInitializers = [];
|
|
104
|
+
let _classThis;
|
|
105
|
+
let _classSuper = base_rule_1.BaseRule;
|
|
106
|
+
var PR005ObservableState = _classThis = class extends _classSuper {
|
|
107
|
+
constructor() {
|
|
108
|
+
super(...arguments);
|
|
109
|
+
this.rule = pr005Rule;
|
|
110
|
+
}
|
|
111
|
+
};
|
|
112
|
+
__setFunctionName(_classThis, "PR005ObservableState");
|
|
113
|
+
(() => {
|
|
114
|
+
const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(_classSuper[Symbol.metadata] ?? null) : void 0;
|
|
115
|
+
__esDecorate(null, _classDescriptor = { value: _classThis }, _classDecorators, { kind: "class", name: _classThis.name, metadata: _metadata }, null, _classExtraInitializers);
|
|
116
|
+
PR005ObservableState = _classThis = _classDescriptor.value;
|
|
117
|
+
if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
|
|
118
|
+
__runInitializers(_classThis, _classExtraInitializers);
|
|
119
|
+
})();
|
|
120
|
+
return PR005ObservableState = _classThis;
|
|
121
|
+
})();
|
|
122
|
+
exports.PR005ObservableState = PR005ObservableState;
|
|
123
|
+
// PR008: VIPER Full Structure per Feature
|
|
124
|
+
const pr008Rule = (0, base_rule_1.createRule)('PR008', 'VIPER Full Structure per Feature', 'Xác nhận có đủ 5 components VIPER trong mỗi feature', enums_1.RuleCategory.STRUCTURE, 0.06, [enums_1.PatternType.PRESENTATION, enums_1.PatternType.VIPER], {
|
|
125
|
+
filePatterns: ['*View.*', '*Interactor.*', '*Presenter.*', '*Entity.*', '*Router.*'],
|
|
126
|
+
}, { requires: ['PR006', 'PR007'], tags: ['presentation', 'viper', 'structure'] });
|
|
127
|
+
let PR008ViperStructure = (() => {
|
|
128
|
+
let _classDecorators = [(0, rule_registry_1.RegisterRule)(pr008Rule)];
|
|
129
|
+
let _classDescriptor;
|
|
130
|
+
let _classExtraInitializers = [];
|
|
131
|
+
let _classThis;
|
|
132
|
+
let _classSuper = base_rule_1.BaseRule;
|
|
133
|
+
var PR008ViperStructure = _classThis = class extends _classSuper {
|
|
134
|
+
constructor() {
|
|
135
|
+
super(...arguments);
|
|
136
|
+
this.rule = pr008Rule;
|
|
137
|
+
}
|
|
138
|
+
async customDetection(context) {
|
|
139
|
+
const matches = [];
|
|
140
|
+
// VIPER components - Router/WireFrame are alternatives
|
|
141
|
+
const viperComponents = [
|
|
142
|
+
{ name: 'View', patterns: [/View\.(swift|kt|java)$/i] },
|
|
143
|
+
{ name: 'Interactor', patterns: [/Interactor\.(swift|kt|java)$/i] },
|
|
144
|
+
{ name: 'Presenter', patterns: [/Presenter\.(swift|kt|java)$/i] },
|
|
145
|
+
{ name: 'Entity', patterns: [/Entity\.(swift|kt|java)$/i, /Model\.(swift|kt|java)$/i] },
|
|
146
|
+
{
|
|
147
|
+
name: 'Router',
|
|
148
|
+
patterns: [
|
|
149
|
+
/Router\.(swift|kt|java)$/i,
|
|
150
|
+
/WireFrame\.(swift|kt|java)$/i,
|
|
151
|
+
/Wireframe\.(swift|kt|java)$/i,
|
|
152
|
+
],
|
|
153
|
+
},
|
|
154
|
+
];
|
|
155
|
+
const foundComponents = new Set();
|
|
156
|
+
for (const file of context.files) {
|
|
157
|
+
for (const comp of viperComponents) {
|
|
158
|
+
for (const pattern of comp.patterns) {
|
|
159
|
+
if (pattern.test(file.fileName)) {
|
|
160
|
+
foundComponents.add(comp.name);
|
|
161
|
+
break;
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
const score = foundComponents.size / viperComponents.length;
|
|
167
|
+
matches.push({
|
|
168
|
+
type: enums_1.MatchType.FILE,
|
|
169
|
+
path: '',
|
|
170
|
+
matchedPattern: `VIPER components: ${Array.from(foundComponents).join(', ')}`,
|
|
171
|
+
});
|
|
172
|
+
return { matches, violations: [], score };
|
|
173
|
+
}
|
|
174
|
+
};
|
|
175
|
+
__setFunctionName(_classThis, "PR008ViperStructure");
|
|
176
|
+
(() => {
|
|
177
|
+
const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(_classSuper[Symbol.metadata] ?? null) : void 0;
|
|
178
|
+
__esDecorate(null, _classDescriptor = { value: _classThis }, _classDecorators, { kind: "class", name: _classThis.name, metadata: _metadata }, null, _classExtraInitializers);
|
|
179
|
+
PR008ViperStructure = _classThis = _classDescriptor.value;
|
|
180
|
+
if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
|
|
181
|
+
__runInitializers(_classThis, _classExtraInitializers);
|
|
182
|
+
})();
|
|
183
|
+
return PR008ViperStructure = _classThis;
|
|
184
|
+
})();
|
|
185
|
+
exports.PR008ViperStructure = PR008ViperStructure;
|
|
186
|
+
// PR009: View is Passive
|
|
187
|
+
const pr009Rule = (0, base_rule_1.createRule)('PR009', 'View is Passive', 'Xác nhận View không chứa business logic', enums_1.RuleCategory.QUALITY, 0.04, [enums_1.PatternType.PRESENTATION, enums_1.PatternType.MVVM, enums_1.PatternType.VIPER], {}, { tags: ['presentation', 'quality'] });
|
|
188
|
+
let PR009ViewPassive = (() => {
|
|
189
|
+
let _classDecorators = [(0, rule_registry_1.RegisterRule)(pr009Rule)];
|
|
190
|
+
let _classDescriptor;
|
|
191
|
+
let _classExtraInitializers = [];
|
|
192
|
+
let _classThis;
|
|
193
|
+
let _classSuper = base_rule_1.BaseRule;
|
|
194
|
+
var PR009ViewPassive = _classThis = class extends _classSuper {
|
|
195
|
+
constructor() {
|
|
196
|
+
super(...arguments);
|
|
197
|
+
this.rule = pr009Rule;
|
|
198
|
+
}
|
|
199
|
+
async customDetection(_context) {
|
|
200
|
+
// Simplified check
|
|
201
|
+
return { matches: [], violations: [], score: 0.5 };
|
|
202
|
+
}
|
|
203
|
+
};
|
|
204
|
+
__setFunctionName(_classThis, "PR009ViewPassive");
|
|
205
|
+
(() => {
|
|
206
|
+
const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(_classSuper[Symbol.metadata] ?? null) : void 0;
|
|
207
|
+
__esDecorate(null, _classDescriptor = { value: _classThis }, _classDecorators, { kind: "class", name: _classThis.name, metadata: _metadata }, null, _classExtraInitializers);
|
|
208
|
+
PR009ViewPassive = _classThis = _classDescriptor.value;
|
|
209
|
+
if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
|
|
210
|
+
__runInitializers(_classThis, _classExtraInitializers);
|
|
211
|
+
})();
|
|
212
|
+
return PR009ViewPassive = _classThis;
|
|
213
|
+
})();
|
|
214
|
+
exports.PR009ViewPassive = PR009ViewPassive;
|
|
215
|
+
// PR010: State Management Pattern
|
|
216
|
+
const pr010Rule = (0, base_rule_1.createRule)('PR010', 'State Management Pattern', 'Xác nhận có state management pattern rõ ràng', enums_1.RuleCategory.STRUCTURE, 0.06, [enums_1.PatternType.PRESENTATION, enums_1.PatternType.MVVM, enums_1.PatternType.VIPER], {
|
|
217
|
+
codePatterns: [
|
|
218
|
+
// Android/Kotlin
|
|
219
|
+
{ language: enums_1.Language.KOTLIN, type: enums_1.CodePatternType.PATTERN, pattern: /StateFlow</ },
|
|
220
|
+
{ language: enums_1.Language.KOTLIN, type: enums_1.CodePatternType.PATTERN, pattern: /MutableStateFlow</ },
|
|
221
|
+
{ language: enums_1.Language.KOTLIN, type: enums_1.CodePatternType.PATTERN, pattern: /LiveData</ },
|
|
222
|
+
{ language: enums_1.Language.KOTLIN, type: enums_1.CodePatternType.PATTERN, pattern: /MutableLiveData</ },
|
|
223
|
+
{ language: enums_1.Language.KOTLIN, type: enums_1.CodePatternType.PATTERN, pattern: /UiState/ },
|
|
224
|
+
// Web/TypeScript
|
|
225
|
+
{ language: enums_1.Language.TYPESCRIPT, type: enums_1.CodePatternType.PATTERN, pattern: /createStore/ },
|
|
226
|
+
{ language: enums_1.Language.TYPESCRIPT, type: enums_1.CodePatternType.PATTERN, pattern: /useSelector/ },
|
|
227
|
+
{ language: enums_1.Language.TYPESCRIPT, type: enums_1.CodePatternType.PATTERN, pattern: /defineStore/ },
|
|
228
|
+
{ language: enums_1.Language.TYPESCRIPT, type: enums_1.CodePatternType.PATTERN, pattern: /useState/ },
|
|
229
|
+
// Flutter/Dart
|
|
230
|
+
{ language: enums_1.Language.DART, type: enums_1.CodePatternType.PATTERN, pattern: /BlocProvider/ },
|
|
231
|
+
{ language: enums_1.Language.DART, type: enums_1.CodePatternType.PATTERN, pattern: /flutter_bloc/ },
|
|
232
|
+
{ language: enums_1.Language.DART, type: enums_1.CodePatternType.PATTERN, pattern: /ChangeNotifier/ },
|
|
233
|
+
// iOS/Swift
|
|
234
|
+
{ language: enums_1.Language.SWIFT, type: enums_1.CodePatternType.ANNOTATION, pattern: /@Published/ },
|
|
235
|
+
{ language: enums_1.Language.SWIFT, type: enums_1.CodePatternType.PATTERN, pattern: /ObservableObject/ },
|
|
236
|
+
],
|
|
237
|
+
}, { tags: ['presentation', 'state-management'] });
|
|
238
|
+
let PR010StateManagement = (() => {
|
|
239
|
+
let _classDecorators = [(0, rule_registry_1.RegisterRule)(pr010Rule)];
|
|
240
|
+
let _classDescriptor;
|
|
241
|
+
let _classExtraInitializers = [];
|
|
242
|
+
let _classThis;
|
|
243
|
+
let _classSuper = base_rule_1.BaseRule;
|
|
244
|
+
var PR010StateManagement = _classThis = class extends _classSuper {
|
|
245
|
+
constructor() {
|
|
246
|
+
super(...arguments);
|
|
247
|
+
this.rule = pr010Rule;
|
|
248
|
+
}
|
|
249
|
+
};
|
|
250
|
+
__setFunctionName(_classThis, "PR010StateManagement");
|
|
251
|
+
(() => {
|
|
252
|
+
const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(_classSuper[Symbol.metadata] ?? null) : void 0;
|
|
253
|
+
__esDecorate(null, _classDescriptor = { value: _classThis }, _classDecorators, { kind: "class", name: _classThis.name, metadata: _metadata }, null, _classExtraInitializers);
|
|
254
|
+
PR010StateManagement = _classThis = _classDescriptor.value;
|
|
255
|
+
if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
|
|
256
|
+
__runInitializers(_classThis, _classExtraInitializers);
|
|
257
|
+
})();
|
|
258
|
+
return PR010StateManagement = _classThis;
|
|
259
|
+
})();
|
|
260
|
+
exports.PR010StateManagement = PR010StateManagement;
|
|
261
|
+
// PR011: DI in Presentation
|
|
262
|
+
const pr011Rule = (0, base_rule_1.createRule)('PR011', 'Dependency Injection in Presentation', 'Xác nhận có DI cho ViewModel/Presenter', enums_1.RuleCategory.QUALITY, 0.04, [enums_1.PatternType.PRESENTATION, enums_1.PatternType.MVVM, enums_1.PatternType.VIPER], {
|
|
263
|
+
codePatterns: [
|
|
264
|
+
{ language: enums_1.Language.KOTLIN, type: enums_1.CodePatternType.ANNOTATION, pattern: /@HiltViewModel/ },
|
|
265
|
+
{ language: enums_1.Language.KOTLIN, type: enums_1.CodePatternType.ANNOTATION, pattern: /@Inject/ },
|
|
266
|
+
{ language: enums_1.Language.SWIFT, type: enums_1.CodePatternType.PATTERN, pattern: /Resolver/ },
|
|
267
|
+
{ language: enums_1.Language.DART, type: enums_1.CodePatternType.PATTERN, pattern: /get_it/ },
|
|
268
|
+
{ language: enums_1.Language.DART, type: enums_1.CodePatternType.ANNOTATION, pattern: /@injectable/ },
|
|
269
|
+
],
|
|
270
|
+
}, { tags: ['presentation', 'di'] });
|
|
271
|
+
let PR011DependencyInjection = (() => {
|
|
272
|
+
let _classDecorators = [(0, rule_registry_1.RegisterRule)(pr011Rule)];
|
|
273
|
+
let _classDescriptor;
|
|
274
|
+
let _classExtraInitializers = [];
|
|
275
|
+
let _classThis;
|
|
276
|
+
let _classSuper = base_rule_1.BaseRule;
|
|
277
|
+
var PR011DependencyInjection = _classThis = class extends _classSuper {
|
|
278
|
+
constructor() {
|
|
279
|
+
super(...arguments);
|
|
280
|
+
this.rule = pr011Rule;
|
|
281
|
+
}
|
|
282
|
+
};
|
|
283
|
+
__setFunctionName(_classThis, "PR011DependencyInjection");
|
|
284
|
+
(() => {
|
|
285
|
+
const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(_classSuper[Symbol.metadata] ?? null) : void 0;
|
|
286
|
+
__esDecorate(null, _classDescriptor = { value: _classThis }, _classDecorators, { kind: "class", name: _classThis.name, metadata: _metadata }, null, _classExtraInitializers);
|
|
287
|
+
PR011DependencyInjection = _classThis = _classDescriptor.value;
|
|
288
|
+
if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
|
|
289
|
+
__runInitializers(_classThis, _classExtraInitializers);
|
|
290
|
+
})();
|
|
291
|
+
return PR011DependencyInjection = _classThis;
|
|
292
|
+
})();
|
|
293
|
+
exports.PR011DependencyInjection = PR011DependencyInjection;
|
|
294
|
+
// PR012: Navigation Pattern
|
|
295
|
+
const pr012Rule = (0, base_rule_1.createRule)('PR012', 'Navigation Pattern', 'Xác nhận có navigation pattern rõ ràng', enums_1.RuleCategory.STRUCTURE, 0.04, [enums_1.PatternType.PRESENTATION, enums_1.PatternType.MVVM, enums_1.PatternType.VIPER], {
|
|
296
|
+
codePatterns: [
|
|
297
|
+
// Android/Kotlin - Navigation Component
|
|
298
|
+
{ language: enums_1.Language.KOTLIN, type: enums_1.CodePatternType.PATTERN, pattern: /NavController/ },
|
|
299
|
+
{ language: enums_1.Language.KOTLIN, type: enums_1.CodePatternType.PATTERN, pattern: /findNavController/ },
|
|
300
|
+
{ language: enums_1.Language.KOTLIN, type: enums_1.CodePatternType.PATTERN, pattern: /NavHost/ },
|
|
301
|
+
// Android/Kotlin - Traditional
|
|
302
|
+
{ language: enums_1.Language.KOTLIN, type: enums_1.CodePatternType.PATTERN, pattern: /startActivity\s*\(/ },
|
|
303
|
+
{ language: enums_1.Language.KOTLIN, type: enums_1.CodePatternType.PATTERN, pattern: /Intent\s*\(/ },
|
|
304
|
+
// Android/Java
|
|
305
|
+
{ language: enums_1.Language.JAVA, type: enums_1.CodePatternType.PATTERN, pattern: /startActivity\s*\(/ },
|
|
306
|
+
{ language: enums_1.Language.JAVA, type: enums_1.CodePatternType.PATTERN, pattern: /Intent\s*\(/ },
|
|
307
|
+
// iOS/Swift
|
|
308
|
+
{ language: enums_1.Language.SWIFT, type: enums_1.CodePatternType.PATTERN, pattern: /NavigationStack/ },
|
|
309
|
+
{ language: enums_1.Language.SWIFT, type: enums_1.CodePatternType.PATTERN, pattern: /NavigationLink/ },
|
|
310
|
+
{ language: enums_1.Language.SWIFT, type: enums_1.CodePatternType.PATTERN, pattern: /pushViewController/ },
|
|
311
|
+
// Flutter/Dart
|
|
312
|
+
{ language: enums_1.Language.DART, type: enums_1.CodePatternType.PATTERN, pattern: /GoRouter/ },
|
|
313
|
+
{ language: enums_1.Language.DART, type: enums_1.CodePatternType.PATTERN, pattern: /Navigator\.push/ },
|
|
314
|
+
{ language: enums_1.Language.DART, type: enums_1.CodePatternType.PATTERN, pattern: /Navigator\.of/ },
|
|
315
|
+
// Web/TypeScript
|
|
316
|
+
{ language: enums_1.Language.TYPESCRIPT, type: enums_1.CodePatternType.PATTERN, pattern: /useNavigate/ },
|
|
317
|
+
{ language: enums_1.Language.TYPESCRIPT, type: enums_1.CodePatternType.PATTERN, pattern: /useRouter/ },
|
|
318
|
+
],
|
|
319
|
+
}, { tags: ['presentation', 'navigation'] });
|
|
320
|
+
let PR012Navigation = (() => {
|
|
321
|
+
let _classDecorators = [(0, rule_registry_1.RegisterRule)(pr012Rule)];
|
|
322
|
+
let _classDescriptor;
|
|
323
|
+
let _classExtraInitializers = [];
|
|
324
|
+
let _classThis;
|
|
325
|
+
let _classSuper = base_rule_1.BaseRule;
|
|
326
|
+
var PR012Navigation = _classThis = class extends _classSuper {
|
|
327
|
+
constructor() {
|
|
328
|
+
super(...arguments);
|
|
329
|
+
this.rule = pr012Rule;
|
|
330
|
+
}
|
|
331
|
+
};
|
|
332
|
+
__setFunctionName(_classThis, "PR012Navigation");
|
|
333
|
+
(() => {
|
|
334
|
+
const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(_classSuper[Symbol.metadata] ?? null) : void 0;
|
|
335
|
+
__esDecorate(null, _classDescriptor = { value: _classThis }, _classDecorators, { kind: "class", name: _classThis.name, metadata: _metadata }, null, _classExtraInitializers);
|
|
336
|
+
PR012Navigation = _classThis = _classDescriptor.value;
|
|
337
|
+
if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
|
|
338
|
+
__runInitializers(_classThis, _classExtraInitializers);
|
|
339
|
+
})();
|
|
340
|
+
return PR012Navigation = _classThis;
|
|
341
|
+
})();
|
|
342
|
+
exports.PR012Navigation = PR012Navigation;
|
|
343
|
+
// PR013: ViewModel/Presenter Testing
|
|
344
|
+
const pr013Rule = (0, base_rule_1.createRule)('PR013', 'ViewModel/Presenter Testing', 'Xác nhận ViewModel/Presenter có unit tests', enums_1.RuleCategory.QUALITY, 0.02, [enums_1.PatternType.PRESENTATION, enums_1.PatternType.MVVM, enums_1.PatternType.VIPER], {
|
|
345
|
+
filePatterns: [
|
|
346
|
+
'*ViewModelTest.*',
|
|
347
|
+
'*PresenterTest.*',
|
|
348
|
+
'*ViewModel.test.*',
|
|
349
|
+
'*Presenter.spec.*',
|
|
350
|
+
],
|
|
351
|
+
}, { tags: ['presentation', 'testing'] });
|
|
352
|
+
let PR013Testing = (() => {
|
|
353
|
+
let _classDecorators = [(0, rule_registry_1.RegisterRule)(pr013Rule)];
|
|
354
|
+
let _classDescriptor;
|
|
355
|
+
let _classExtraInitializers = [];
|
|
356
|
+
let _classThis;
|
|
357
|
+
let _classSuper = base_rule_1.BaseRule;
|
|
358
|
+
var PR013Testing = _classThis = class extends _classSuper {
|
|
359
|
+
constructor() {
|
|
360
|
+
super(...arguments);
|
|
361
|
+
this.rule = pr013Rule;
|
|
362
|
+
}
|
|
363
|
+
};
|
|
364
|
+
__setFunctionName(_classThis, "PR013Testing");
|
|
365
|
+
(() => {
|
|
366
|
+
const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(_classSuper[Symbol.metadata] ?? null) : void 0;
|
|
367
|
+
__esDecorate(null, _classDescriptor = { value: _classThis }, _classDecorators, { kind: "class", name: _classThis.name, metadata: _metadata }, null, _classExtraInitializers);
|
|
368
|
+
PR013Testing = _classThis = _classDescriptor.value;
|
|
369
|
+
if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
|
|
370
|
+
__runInitializers(_classThis, _classExtraInitializers);
|
|
371
|
+
})();
|
|
372
|
+
return PR013Testing = _classThis;
|
|
373
|
+
})();
|
|
374
|
+
exports.PR013Testing = PR013Testing;
|
|
375
|
+
// PR014: Error Handling in Presentation
|
|
376
|
+
const pr014Rule = (0, base_rule_1.createRule)('PR014', 'Error Handling in Presentation', 'Xác nhận có error handling trong presentation layer', enums_1.RuleCategory.QUALITY, 0.03, [enums_1.PatternType.PRESENTATION, enums_1.PatternType.MVVM, enums_1.PatternType.VIPER], {
|
|
377
|
+
codePatterns: [
|
|
378
|
+
{
|
|
379
|
+
language: enums_1.Language.KOTLIN,
|
|
380
|
+
type: enums_1.CodePatternType.PATTERN,
|
|
381
|
+
pattern: /sealed\s+class\s+\w+UiState/,
|
|
382
|
+
},
|
|
383
|
+
{ language: enums_1.Language.KOTLIN, type: enums_1.CodePatternType.PATTERN, pattern: /is\s+\w+\.Error/ },
|
|
384
|
+
{ language: enums_1.Language.SWIFT, type: enums_1.CodePatternType.PATTERN, pattern: /case\s+error/ },
|
|
385
|
+
{ language: enums_1.Language.DART, type: enums_1.CodePatternType.ANNOTATION, pattern: /@freezed/ },
|
|
386
|
+
],
|
|
387
|
+
}, { tags: ['presentation', 'error-handling'] });
|
|
388
|
+
let PR014ErrorHandling = (() => {
|
|
389
|
+
let _classDecorators = [(0, rule_registry_1.RegisterRule)(pr014Rule)];
|
|
390
|
+
let _classDescriptor;
|
|
391
|
+
let _classExtraInitializers = [];
|
|
392
|
+
let _classThis;
|
|
393
|
+
let _classSuper = base_rule_1.BaseRule;
|
|
394
|
+
var PR014ErrorHandling = _classThis = class extends _classSuper {
|
|
395
|
+
constructor() {
|
|
396
|
+
super(...arguments);
|
|
397
|
+
this.rule = pr014Rule;
|
|
398
|
+
}
|
|
399
|
+
};
|
|
400
|
+
__setFunctionName(_classThis, "PR014ErrorHandling");
|
|
401
|
+
(() => {
|
|
402
|
+
const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(_classSuper[Symbol.metadata] ?? null) : void 0;
|
|
403
|
+
__esDecorate(null, _classDescriptor = { value: _classThis }, _classDecorators, { kind: "class", name: _classThis.name, metadata: _metadata }, null, _classExtraInitializers);
|
|
404
|
+
PR014ErrorHandling = _classThis = _classDescriptor.value;
|
|
405
|
+
if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
|
|
406
|
+
__runInitializers(_classThis, _classExtraInitializers);
|
|
407
|
+
})();
|
|
408
|
+
return PR014ErrorHandling = _classThis;
|
|
409
|
+
})();
|
|
410
|
+
exports.PR014ErrorHandling = PR014ErrorHandling;
|
|
411
|
+
// PR015: UI/UX Layer Separation
|
|
412
|
+
const pr015Rule = (0, base_rule_1.createRule)('PR015', 'UI/UX Layer Separation', 'Xác nhận UI components tách biệt khỏi logic', enums_1.RuleCategory.QUALITY, 0.03, [enums_1.PatternType.PRESENTATION, enums_1.PatternType.MVVM, enums_1.PatternType.VIPER], {
|
|
413
|
+
folderPatterns: [
|
|
414
|
+
// Common
|
|
415
|
+
'components/ui',
|
|
416
|
+
'components/common',
|
|
417
|
+
'ui/components',
|
|
418
|
+
'widgets',
|
|
419
|
+
// Android
|
|
420
|
+
'ui',
|
|
421
|
+
'presentation',
|
|
422
|
+
'feature',
|
|
423
|
+
'screen',
|
|
424
|
+
'view',
|
|
425
|
+
'ui/theme',
|
|
426
|
+
'ui/component',
|
|
427
|
+
'ui/screen',
|
|
428
|
+
// iOS
|
|
429
|
+
'Views',
|
|
430
|
+
'Screens',
|
|
431
|
+
'Components',
|
|
432
|
+
// Web
|
|
433
|
+
'components',
|
|
434
|
+
'views',
|
|
435
|
+
'pages',
|
|
436
|
+
],
|
|
437
|
+
}, { tags: ['presentation', 'ui', 'separation'] });
|
|
438
|
+
let PR015UiSeparation = (() => {
|
|
439
|
+
let _classDecorators = [(0, rule_registry_1.RegisterRule)(pr015Rule)];
|
|
440
|
+
let _classDescriptor;
|
|
441
|
+
let _classExtraInitializers = [];
|
|
442
|
+
let _classThis;
|
|
443
|
+
let _classSuper = base_rule_1.BaseRule;
|
|
444
|
+
var PR015UiSeparation = _classThis = class extends _classSuper {
|
|
445
|
+
constructor() {
|
|
446
|
+
super(...arguments);
|
|
447
|
+
this.rule = pr015Rule;
|
|
448
|
+
}
|
|
449
|
+
};
|
|
450
|
+
__setFunctionName(_classThis, "PR015UiSeparation");
|
|
451
|
+
(() => {
|
|
452
|
+
const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(_classSuper[Symbol.metadata] ?? null) : void 0;
|
|
453
|
+
__esDecorate(null, _classDescriptor = { value: _classThis }, _classDecorators, { kind: "class", name: _classThis.name, metadata: _metadata }, null, _classExtraInitializers);
|
|
454
|
+
PR015UiSeparation = _classThis = _classDescriptor.value;
|
|
455
|
+
if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
|
|
456
|
+
__runInitializers(_classThis, _classExtraInitializers);
|
|
457
|
+
})();
|
|
458
|
+
return PR015UiSeparation = _classThis;
|
|
459
|
+
})();
|
|
460
|
+
exports.PR015UiSeparation = PR015UiSeparation;
|
|
461
|
+
// PR016: Side Effect Management
|
|
462
|
+
const pr016Rule = (0, base_rule_1.createRule)('PR016', 'Side Effect Management', 'Xác nhận side effects được quản lý đúng cách', enums_1.RuleCategory.QUALITY, 0.02, [enums_1.PatternType.PRESENTATION, enums_1.PatternType.MVVM, enums_1.PatternType.VIPER], {
|
|
463
|
+
codePatterns: [
|
|
464
|
+
{
|
|
465
|
+
language: enums_1.Language.TYPESCRIPT,
|
|
466
|
+
type: enums_1.CodePatternType.PATTERN,
|
|
467
|
+
pattern: /useEffect\s*\(\s*\(\)\s*=>/,
|
|
468
|
+
},
|
|
469
|
+
{ language: enums_1.Language.TYPESCRIPT, type: enums_1.CodePatternType.PATTERN, pattern: /takeUntil\s*\(/ },
|
|
470
|
+
{ language: enums_1.Language.SWIFT, type: enums_1.CodePatternType.PATTERN, pattern: /cancellables/ },
|
|
471
|
+
{
|
|
472
|
+
language: enums_1.Language.KOTLIN,
|
|
473
|
+
type: enums_1.CodePatternType.PATTERN,
|
|
474
|
+
pattern: /viewModelScope\.launch/,
|
|
475
|
+
},
|
|
476
|
+
{
|
|
477
|
+
language: enums_1.Language.DART,
|
|
478
|
+
type: enums_1.CodePatternType.PATTERN,
|
|
479
|
+
pattern: /@override\s+void\s+dispose/,
|
|
480
|
+
},
|
|
481
|
+
],
|
|
482
|
+
}, { tags: ['presentation', 'side-effects'] });
|
|
483
|
+
let PR016SideEffects = (() => {
|
|
484
|
+
let _classDecorators = [(0, rule_registry_1.RegisterRule)(pr016Rule)];
|
|
485
|
+
let _classDescriptor;
|
|
486
|
+
let _classExtraInitializers = [];
|
|
487
|
+
let _classThis;
|
|
488
|
+
let _classSuper = base_rule_1.BaseRule;
|
|
489
|
+
var PR016SideEffects = _classThis = class extends _classSuper {
|
|
490
|
+
constructor() {
|
|
491
|
+
super(...arguments);
|
|
492
|
+
this.rule = pr016Rule;
|
|
493
|
+
}
|
|
494
|
+
};
|
|
495
|
+
__setFunctionName(_classThis, "PR016SideEffects");
|
|
496
|
+
(() => {
|
|
497
|
+
const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(_classSuper[Symbol.metadata] ?? null) : void 0;
|
|
498
|
+
__esDecorate(null, _classDescriptor = { value: _classThis }, _classDecorators, { kind: "class", name: _classThis.name, metadata: _metadata }, null, _classExtraInitializers);
|
|
499
|
+
PR016SideEffects = _classThis = _classDescriptor.value;
|
|
500
|
+
if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
|
|
501
|
+
__runInitializers(_classThis, _classExtraInitializers);
|
|
502
|
+
})();
|
|
503
|
+
return PR016SideEffects = _classThis;
|
|
504
|
+
})();
|
|
505
|
+
exports.PR016SideEffects = PR016SideEffects;
|
|
506
|
+
// All classes are exported inline with their declarations
|
|
507
|
+
//# sourceMappingURL=presentation-rules-collection.js.map
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Project Scanner Rules Index
|
|
4
|
+
* Export tất cả Project Scanner rules (PS001-PS010)
|
|
5
|
+
*/
|
|
6
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
7
|
+
if (k2 === undefined) k2 = k;
|
|
8
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
9
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
10
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
11
|
+
}
|
|
12
|
+
Object.defineProperty(o, k2, desc);
|
|
13
|
+
}) : (function(o, m, k, k2) {
|
|
14
|
+
if (k2 === undefined) k2 = k;
|
|
15
|
+
o[k2] = m[k];
|
|
16
|
+
}));
|
|
17
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
18
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
19
|
+
};
|
|
20
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
21
|
+
__exportStar(require("./ps001-project-root"), exports);
|
|
22
|
+
__exportStar(require("./ps002-language-detection"), exports);
|
|
23
|
+
__exportStar(require("./ps003-framework-detection"), exports);
|
|
24
|
+
__exportStar(require("./ps004-build-system"), exports);
|
|
25
|
+
__exportStar(require("./ps005-source-directory"), exports);
|
|
26
|
+
__exportStar(require("./ps006-test-directory"), exports);
|
|
27
|
+
__exportStar(require("./ps007-documentation"), exports);
|
|
28
|
+
__exportStar(require("./ps008-cicd-detection"), exports);
|
|
29
|
+
__exportStar(require("./ps009-code-quality"), exports);
|
|
30
|
+
__exportStar(require("./ps010-statistics"), exports);
|
|
31
|
+
//# sourceMappingURL=index.js.map
|