driftdetect-core 0.4.6 → 0.5.0
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/dist/call-graph/extractors/csharp-data-access-extractor.d.ts +8 -0
- package/dist/call-graph/extractors/csharp-data-access-extractor.d.ts.map +1 -1
- package/dist/call-graph/extractors/csharp-data-access-extractor.js +8 -0
- package/dist/call-graph/extractors/csharp-data-access-extractor.js.map +1 -1
- package/dist/call-graph/extractors/csharp-extractor.d.ts +35 -0
- package/dist/call-graph/extractors/csharp-extractor.d.ts.map +1 -1
- package/dist/call-graph/extractors/csharp-extractor.js +362 -4
- package/dist/call-graph/extractors/csharp-extractor.js.map +1 -1
- package/dist/call-graph/extractors/csharp-hybrid-extractor.d.ts +37 -0
- package/dist/call-graph/extractors/csharp-hybrid-extractor.d.ts.map +1 -0
- package/dist/call-graph/extractors/csharp-hybrid-extractor.js +408 -0
- package/dist/call-graph/extractors/csharp-hybrid-extractor.js.map +1 -0
- package/dist/call-graph/extractors/hybrid-extractor-base.d.ts +102 -0
- package/dist/call-graph/extractors/hybrid-extractor-base.d.ts.map +1 -0
- package/dist/call-graph/extractors/hybrid-extractor-base.js +289 -0
- package/dist/call-graph/extractors/hybrid-extractor-base.js.map +1 -0
- package/dist/call-graph/extractors/index.d.ts +17 -13
- package/dist/call-graph/extractors/index.d.ts.map +1 -1
- package/dist/call-graph/extractors/index.js +24 -23
- package/dist/call-graph/extractors/index.js.map +1 -1
- package/dist/call-graph/extractors/java-data-access-extractor.d.ts +8 -0
- package/dist/call-graph/extractors/java-data-access-extractor.d.ts.map +1 -1
- package/dist/call-graph/extractors/java-data-access-extractor.js +8 -0
- package/dist/call-graph/extractors/java-data-access-extractor.js.map +1 -1
- package/dist/call-graph/extractors/java-extractor.d.ts +15 -0
- package/dist/call-graph/extractors/java-extractor.d.ts.map +1 -1
- package/dist/call-graph/extractors/java-extractor.js +120 -4
- package/dist/call-graph/extractors/java-extractor.js.map +1 -1
- package/dist/call-graph/extractors/java-hybrid-extractor.d.ts +36 -0
- package/dist/call-graph/extractors/java-hybrid-extractor.d.ts.map +1 -0
- package/dist/call-graph/extractors/java-hybrid-extractor.js +426 -0
- package/dist/call-graph/extractors/java-hybrid-extractor.js.map +1 -0
- package/dist/call-graph/extractors/php-data-access-extractor.d.ts +8 -0
- package/dist/call-graph/extractors/php-data-access-extractor.d.ts.map +1 -1
- package/dist/call-graph/extractors/php-data-access-extractor.js +8 -0
- package/dist/call-graph/extractors/php-data-access-extractor.js.map +1 -1
- package/dist/call-graph/extractors/php-extractor.d.ts +48 -1
- package/dist/call-graph/extractors/php-extractor.d.ts.map +1 -1
- package/dist/call-graph/extractors/php-extractor.js +460 -6
- package/dist/call-graph/extractors/php-extractor.js.map +1 -1
- package/dist/call-graph/extractors/php-hybrid-extractor.d.ts +35 -0
- package/dist/call-graph/extractors/php-hybrid-extractor.d.ts.map +1 -0
- package/dist/call-graph/extractors/php-hybrid-extractor.js +393 -0
- package/dist/call-graph/extractors/php-hybrid-extractor.js.map +1 -0
- package/dist/call-graph/extractors/python-data-access-extractor.d.ts +8 -0
- package/dist/call-graph/extractors/python-data-access-extractor.d.ts.map +1 -1
- package/dist/call-graph/extractors/python-data-access-extractor.js +8 -0
- package/dist/call-graph/extractors/python-data-access-extractor.js.map +1 -1
- package/dist/call-graph/extractors/python-hybrid-extractor.d.ts +85 -0
- package/dist/call-graph/extractors/python-hybrid-extractor.d.ts.map +1 -0
- package/dist/call-graph/extractors/python-hybrid-extractor.js +462 -0
- package/dist/call-graph/extractors/python-hybrid-extractor.js.map +1 -0
- package/dist/call-graph/extractors/regex/base-regex-extractor.d.ts +154 -0
- package/dist/call-graph/extractors/regex/base-regex-extractor.d.ts.map +1 -0
- package/dist/call-graph/extractors/regex/base-regex-extractor.js +346 -0
- package/dist/call-graph/extractors/regex/base-regex-extractor.js.map +1 -0
- package/dist/call-graph/extractors/regex/csharp-regex.d.ts +34 -0
- package/dist/call-graph/extractors/regex/csharp-regex.d.ts.map +1 -0
- package/dist/call-graph/extractors/regex/csharp-regex.js +393 -0
- package/dist/call-graph/extractors/regex/csharp-regex.js.map +1 -0
- package/dist/call-graph/extractors/regex/index.d.ts +25 -0
- package/dist/call-graph/extractors/regex/index.d.ts.map +1 -0
- package/dist/call-graph/extractors/regex/index.js +66 -0
- package/dist/call-graph/extractors/regex/index.js.map +1 -0
- package/dist/call-graph/extractors/regex/java-regex.d.ts +34 -0
- package/dist/call-graph/extractors/regex/java-regex.d.ts.map +1 -0
- package/dist/call-graph/extractors/regex/java-regex.js +327 -0
- package/dist/call-graph/extractors/regex/java-regex.js.map +1 -0
- package/dist/call-graph/extractors/regex/php-regex.d.ts +30 -0
- package/dist/call-graph/extractors/regex/php-regex.d.ts.map +1 -0
- package/dist/call-graph/extractors/regex/php-regex.js +333 -0
- package/dist/call-graph/extractors/regex/php-regex.js.map +1 -0
- package/dist/call-graph/extractors/regex/python-regex.d.ts +46 -0
- package/dist/call-graph/extractors/regex/python-regex.d.ts.map +1 -0
- package/dist/call-graph/extractors/regex/python-regex.js +380 -0
- package/dist/call-graph/extractors/regex/python-regex.js.map +1 -0
- package/dist/call-graph/extractors/regex/typescript-regex.d.ts +27 -0
- package/dist/call-graph/extractors/regex/typescript-regex.d.ts.map +1 -0
- package/dist/call-graph/extractors/regex/typescript-regex.js +349 -0
- package/dist/call-graph/extractors/regex/typescript-regex.js.map +1 -0
- package/dist/call-graph/extractors/semantic-data-access-scanner.d.ts +7 -0
- package/dist/call-graph/extractors/semantic-data-access-scanner.d.ts.map +1 -1
- package/dist/call-graph/extractors/semantic-data-access-scanner.js +7 -0
- package/dist/call-graph/extractors/semantic-data-access-scanner.js.map +1 -1
- package/dist/call-graph/extractors/types.d.ts +111 -0
- package/dist/call-graph/extractors/types.d.ts.map +1 -0
- package/dist/call-graph/extractors/types.js +68 -0
- package/dist/call-graph/extractors/types.js.map +1 -0
- package/dist/call-graph/extractors/typescript-data-access-extractor.d.ts +8 -0
- package/dist/call-graph/extractors/typescript-data-access-extractor.d.ts.map +1 -1
- package/dist/call-graph/extractors/typescript-data-access-extractor.js +8 -0
- package/dist/call-graph/extractors/typescript-data-access-extractor.js.map +1 -1
- package/dist/call-graph/extractors/typescript-hybrid-extractor.d.ts +116 -0
- package/dist/call-graph/extractors/typescript-hybrid-extractor.d.ts.map +1 -0
- package/dist/call-graph/extractors/typescript-hybrid-extractor.js +635 -0
- package/dist/call-graph/extractors/typescript-hybrid-extractor.js.map +1 -0
- package/dist/error-handling/error-handling-analyzer.d.ts +73 -0
- package/dist/error-handling/error-handling-analyzer.d.ts.map +1 -0
- package/dist/error-handling/error-handling-analyzer.js +706 -0
- package/dist/error-handling/error-handling-analyzer.js.map +1 -0
- package/dist/error-handling/index.d.ts +8 -0
- package/dist/error-handling/index.d.ts.map +1 -0
- package/dist/error-handling/index.js +8 -0
- package/dist/error-handling/index.js.map +1 -0
- package/dist/error-handling/types.d.ts +307 -0
- package/dist/error-handling/types.d.ts.map +1 -0
- package/dist/error-handling/types.js +7 -0
- package/dist/error-handling/types.js.map +1 -0
- package/dist/index.d.ts +14 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +29 -0
- package/dist/index.js.map +1 -1
- package/dist/lake/pattern-shard-store.d.ts +6 -0
- package/dist/lake/pattern-shard-store.d.ts.map +1 -1
- package/dist/lake/pattern-shard-store.js +6 -0
- package/dist/lake/pattern-shard-store.js.map +1 -1
- package/dist/module-coupling/coupling-analyzer.d.ts +73 -0
- package/dist/module-coupling/coupling-analyzer.d.ts.map +1 -0
- package/dist/module-coupling/coupling-analyzer.js +668 -0
- package/dist/module-coupling/coupling-analyzer.js.map +1 -0
- package/dist/module-coupling/index.d.ts +9 -0
- package/dist/module-coupling/index.d.ts.map +1 -0
- package/dist/module-coupling/index.js +9 -0
- package/dist/module-coupling/index.js.map +1 -0
- package/dist/module-coupling/types.d.ts +273 -0
- package/dist/module-coupling/types.d.ts.map +1 -0
- package/dist/module-coupling/types.js +8 -0
- package/dist/module-coupling/types.js.map +1 -0
- package/dist/patterns/adapters/index.d.ts +11 -0
- package/dist/patterns/adapters/index.d.ts.map +1 -0
- package/dist/patterns/adapters/index.js +11 -0
- package/dist/patterns/adapters/index.js.map +1 -0
- package/dist/patterns/adapters/pattern-store-adapter.d.ts +59 -0
- package/dist/patterns/adapters/pattern-store-adapter.d.ts.map +1 -0
- package/dist/patterns/adapters/pattern-store-adapter.js +468 -0
- package/dist/patterns/adapters/pattern-store-adapter.js.map +1 -0
- package/dist/patterns/adapters/service-factory.d.ts +40 -0
- package/dist/patterns/adapters/service-factory.d.ts.map +1 -0
- package/dist/patterns/adapters/service-factory.js +144 -0
- package/dist/patterns/adapters/service-factory.js.map +1 -0
- package/dist/patterns/errors.d.ts +32 -0
- package/dist/patterns/errors.d.ts.map +1 -0
- package/dist/patterns/errors.js +45 -0
- package/dist/patterns/errors.js.map +1 -0
- package/dist/patterns/impl/cached-repository.d.ts +79 -0
- package/dist/patterns/impl/cached-repository.d.ts.map +1 -0
- package/dist/patterns/impl/cached-repository.js +296 -0
- package/dist/patterns/impl/cached-repository.js.map +1 -0
- package/dist/patterns/impl/file-repository.d.ts +75 -0
- package/dist/patterns/impl/file-repository.d.ts.map +1 -0
- package/dist/patterns/impl/file-repository.js +507 -0
- package/dist/patterns/impl/file-repository.js.map +1 -0
- package/dist/patterns/impl/index.d.ts +16 -0
- package/dist/patterns/impl/index.d.ts.map +1 -0
- package/dist/patterns/impl/index.js +21 -0
- package/dist/patterns/impl/index.js.map +1 -0
- package/dist/patterns/impl/memory-repository.d.ts +56 -0
- package/dist/patterns/impl/memory-repository.d.ts.map +1 -0
- package/dist/patterns/impl/memory-repository.js +323 -0
- package/dist/patterns/impl/memory-repository.js.map +1 -0
- package/dist/patterns/impl/pattern-service.d.ts +52 -0
- package/dist/patterns/impl/pattern-service.d.ts.map +1 -0
- package/dist/patterns/impl/pattern-service.js +382 -0
- package/dist/patterns/impl/pattern-service.js.map +1 -0
- package/dist/patterns/impl/repository-factory.d.ts +44 -0
- package/dist/patterns/impl/repository-factory.d.ts.map +1 -0
- package/dist/patterns/impl/repository-factory.js +140 -0
- package/dist/patterns/impl/repository-factory.js.map +1 -0
- package/dist/patterns/impl/unified-file-repository.d.ts +111 -0
- package/dist/patterns/impl/unified-file-repository.d.ts.map +1 -0
- package/dist/patterns/impl/unified-file-repository.js +677 -0
- package/dist/patterns/impl/unified-file-repository.js.map +1 -0
- package/dist/patterns/index.d.ts +23 -0
- package/dist/patterns/index.d.ts.map +1 -0
- package/dist/patterns/index.js +41 -0
- package/dist/patterns/index.js.map +1 -0
- package/dist/patterns/repository.d.ts +241 -0
- package/dist/patterns/repository.d.ts.map +1 -0
- package/dist/patterns/repository.js +23 -0
- package/dist/patterns/repository.js.map +1 -0
- package/dist/patterns/service.d.ts +245 -0
- package/dist/patterns/service.d.ts.map +1 -0
- package/dist/patterns/service.js +25 -0
- package/dist/patterns/service.js.map +1 -0
- package/dist/patterns/types.d.ts +227 -0
- package/dist/patterns/types.d.ts.map +1 -0
- package/dist/patterns/types.js +117 -0
- package/dist/patterns/types.js.map +1 -0
- package/dist/store/pattern-store.d.ts +6 -0
- package/dist/store/pattern-store.d.ts.map +1 -1
- package/dist/store/pattern-store.js +6 -0
- package/dist/store/pattern-store.js.map +1 -1
- package/dist/test-topology/extractors/base-test-extractor.d.ts +89 -0
- package/dist/test-topology/extractors/base-test-extractor.d.ts.map +1 -0
- package/dist/test-topology/extractors/base-test-extractor.js +187 -0
- package/dist/test-topology/extractors/base-test-extractor.js.map +1 -0
- package/dist/test-topology/extractors/csharp-test-extractor.d.ts +23 -0
- package/dist/test-topology/extractors/csharp-test-extractor.d.ts.map +1 -0
- package/dist/test-topology/extractors/csharp-test-extractor.js +367 -0
- package/dist/test-topology/extractors/csharp-test-extractor.js.map +1 -0
- package/dist/test-topology/extractors/index.d.ts +12 -0
- package/dist/test-topology/extractors/index.d.ts.map +1 -0
- package/dist/test-topology/extractors/index.js +12 -0
- package/dist/test-topology/extractors/index.js.map +1 -0
- package/dist/test-topology/extractors/java-test-extractor.d.ts +20 -0
- package/dist/test-topology/extractors/java-test-extractor.d.ts.map +1 -0
- package/dist/test-topology/extractors/java-test-extractor.js +275 -0
- package/dist/test-topology/extractors/java-test-extractor.js.map +1 -0
- package/dist/test-topology/extractors/php-test-extractor.d.ts +24 -0
- package/dist/test-topology/extractors/php-test-extractor.d.ts.map +1 -0
- package/dist/test-topology/extractors/php-test-extractor.js +409 -0
- package/dist/test-topology/extractors/php-test-extractor.js.map +1 -0
- package/dist/test-topology/extractors/python-test-extractor.d.ts +23 -0
- package/dist/test-topology/extractors/python-test-extractor.d.ts.map +1 -0
- package/dist/test-topology/extractors/python-test-extractor.js +342 -0
- package/dist/test-topology/extractors/python-test-extractor.js.map +1 -0
- package/dist/test-topology/extractors/regex/csharp-test-regex.d.ts +51 -0
- package/dist/test-topology/extractors/regex/csharp-test-regex.d.ts.map +1 -0
- package/dist/test-topology/extractors/regex/csharp-test-regex.js +383 -0
- package/dist/test-topology/extractors/regex/csharp-test-regex.js.map +1 -0
- package/dist/test-topology/extractors/regex/index.d.ts +18 -0
- package/dist/test-topology/extractors/regex/index.d.ts.map +1 -0
- package/dist/test-topology/extractors/regex/index.js +43 -0
- package/dist/test-topology/extractors/regex/index.js.map +1 -0
- package/dist/test-topology/extractors/regex/java-test-regex.d.ts +50 -0
- package/dist/test-topology/extractors/regex/java-test-regex.d.ts.map +1 -0
- package/dist/test-topology/extractors/regex/java-test-regex.js +370 -0
- package/dist/test-topology/extractors/regex/java-test-regex.js.map +1 -0
- package/dist/test-topology/extractors/regex/php-test-regex.d.ts +56 -0
- package/dist/test-topology/extractors/regex/php-test-regex.d.ts.map +1 -0
- package/dist/test-topology/extractors/regex/php-test-regex.js +503 -0
- package/dist/test-topology/extractors/regex/php-test-regex.js.map +1 -0
- package/dist/test-topology/extractors/regex/python-test-regex.d.ts +57 -0
- package/dist/test-topology/extractors/regex/python-test-regex.d.ts.map +1 -0
- package/dist/test-topology/extractors/regex/python-test-regex.js +381 -0
- package/dist/test-topology/extractors/regex/python-test-regex.js.map +1 -0
- package/dist/test-topology/extractors/regex/typescript-test-regex.d.ts +60 -0
- package/dist/test-topology/extractors/regex/typescript-test-regex.d.ts.map +1 -0
- package/dist/test-topology/extractors/regex/typescript-test-regex.js +368 -0
- package/dist/test-topology/extractors/regex/typescript-test-regex.js.map +1 -0
- package/dist/test-topology/extractors/typescript-test-extractor.d.ts +24 -0
- package/dist/test-topology/extractors/typescript-test-extractor.d.ts.map +1 -0
- package/dist/test-topology/extractors/typescript-test-extractor.js +266 -0
- package/dist/test-topology/extractors/typescript-test-extractor.js.map +1 -0
- package/dist/test-topology/hybrid-test-topology-analyzer.d.ts +98 -0
- package/dist/test-topology/hybrid-test-topology-analyzer.d.ts.map +1 -0
- package/dist/test-topology/hybrid-test-topology-analyzer.js +555 -0
- package/dist/test-topology/hybrid-test-topology-analyzer.js.map +1 -0
- package/dist/test-topology/index.d.ts +16 -0
- package/dist/test-topology/index.d.ts.map +1 -0
- package/dist/test-topology/index.js +19 -0
- package/dist/test-topology/index.js.map +1 -0
- package/dist/test-topology/test-topology-analyzer.d.ts +85 -0
- package/dist/test-topology/test-topology-analyzer.d.ts.map +1 -0
- package/dist/test-topology/test-topology-analyzer.js +538 -0
- package/dist/test-topology/test-topology-analyzer.js.map +1 -0
- package/dist/test-topology/types.d.ts +300 -0
- package/dist/test-topology/types.d.ts.map +1 -0
- package/dist/test-topology/types.js +7 -0
- package/dist/test-topology/types.js.map +1 -0
- package/dist/wrappers/clustering/clusterer.d.ts +43 -0
- package/dist/wrappers/clustering/clusterer.d.ts.map +1 -0
- package/dist/wrappers/clustering/clusterer.js +374 -0
- package/dist/wrappers/clustering/clusterer.js.map +1 -0
- package/dist/wrappers/clustering/exclusions.d.ts +47 -0
- package/dist/wrappers/clustering/exclusions.d.ts.map +1 -0
- package/dist/wrappers/clustering/exclusions.js +318 -0
- package/dist/wrappers/clustering/exclusions.js.map +1 -0
- package/dist/wrappers/clustering/index.d.ts +6 -0
- package/dist/wrappers/clustering/index.d.ts.map +1 -0
- package/dist/wrappers/clustering/index.js +6 -0
- package/dist/wrappers/clustering/index.js.map +1 -0
- package/dist/wrappers/detection/detector.d.ts +69 -0
- package/dist/wrappers/detection/detector.d.ts.map +1 -0
- package/dist/wrappers/detection/detector.js +279 -0
- package/dist/wrappers/detection/detector.js.map +1 -0
- package/dist/wrappers/detection/index.d.ts +5 -0
- package/dist/wrappers/detection/index.d.ts.map +1 -0
- package/dist/wrappers/detection/index.js +5 -0
- package/dist/wrappers/detection/index.js.map +1 -0
- package/dist/wrappers/export/index.d.ts +5 -0
- package/dist/wrappers/export/index.d.ts.map +1 -0
- package/dist/wrappers/export/index.js +5 -0
- package/dist/wrappers/export/index.js.map +1 -0
- package/dist/wrappers/export/json.d.ts +127 -0
- package/dist/wrappers/export/json.d.ts.map +1 -0
- package/dist/wrappers/export/json.js +160 -0
- package/dist/wrappers/export/json.js.map +1 -0
- package/dist/wrappers/index.d.ts +56 -0
- package/dist/wrappers/index.d.ts.map +1 -0
- package/dist/wrappers/index.js +159 -0
- package/dist/wrappers/index.js.map +1 -0
- package/dist/wrappers/integration/adapter.d.ts +52 -0
- package/dist/wrappers/integration/adapter.d.ts.map +1 -0
- package/dist/wrappers/integration/adapter.js +209 -0
- package/dist/wrappers/integration/adapter.js.map +1 -0
- package/dist/wrappers/integration/index.d.ts +9 -0
- package/dist/wrappers/integration/index.d.ts.map +1 -0
- package/dist/wrappers/integration/index.js +12 -0
- package/dist/wrappers/integration/index.js.map +1 -0
- package/dist/wrappers/integration/pattern-adapter.d.ts +52 -0
- package/dist/wrappers/integration/pattern-adapter.d.ts.map +1 -0
- package/dist/wrappers/integration/pattern-adapter.js +192 -0
- package/dist/wrappers/integration/pattern-adapter.js.map +1 -0
- package/dist/wrappers/integration/scanner.d.ts +85 -0
- package/dist/wrappers/integration/scanner.d.ts.map +1 -0
- package/dist/wrappers/integration/scanner.js +367 -0
- package/dist/wrappers/integration/scanner.js.map +1 -0
- package/dist/wrappers/primitives/discovery.d.ts +57 -0
- package/dist/wrappers/primitives/discovery.d.ts.map +1 -0
- package/dist/wrappers/primitives/discovery.js +389 -0
- package/dist/wrappers/primitives/discovery.js.map +1 -0
- package/dist/wrappers/primitives/index.d.ts +6 -0
- package/dist/wrappers/primitives/index.d.ts.map +1 -0
- package/dist/wrappers/primitives/index.js +6 -0
- package/dist/wrappers/primitives/index.js.map +1 -0
- package/dist/wrappers/primitives/registry.d.ts +63 -0
- package/dist/wrappers/primitives/registry.d.ts.map +1 -0
- package/dist/wrappers/primitives/registry.js +447 -0
- package/dist/wrappers/primitives/registry.js.map +1 -0
- package/dist/wrappers/types.d.ts +137 -0
- package/dist/wrappers/types.d.ts.map +1 -0
- package/dist/wrappers/types.js +7 -0
- package/dist/wrappers/types.js.map +1 -0
- package/package.json +5 -1
|
@@ -0,0 +1,468 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Pattern Store Adapter
|
|
3
|
+
*
|
|
4
|
+
* Adapts the existing PatternStore to the new IPatternRepository interface.
|
|
5
|
+
* This enables gradual migration of consumers to the new pattern system
|
|
6
|
+
* while maintaining backward compatibility.
|
|
7
|
+
*
|
|
8
|
+
* @module patterns/adapters/pattern-store-adapter
|
|
9
|
+
*/
|
|
10
|
+
import { EventEmitter } from 'node:events';
|
|
11
|
+
import { computeConfidenceLevel, toPatternSummary } from '../types.js';
|
|
12
|
+
import { PatternNotFoundError, InvalidStatusTransitionError, PatternAlreadyExistsError, } from '../errors.js';
|
|
13
|
+
// ============================================================================
|
|
14
|
+
// Type Conversion Helpers
|
|
15
|
+
// ============================================================================
|
|
16
|
+
/**
|
|
17
|
+
* Convert a legacy Pattern to the unified Pattern type
|
|
18
|
+
*/
|
|
19
|
+
function legacyToUnified(legacy) {
|
|
20
|
+
return {
|
|
21
|
+
id: legacy.id,
|
|
22
|
+
category: legacy.category,
|
|
23
|
+
subcategory: legacy.subcategory,
|
|
24
|
+
name: legacy.name,
|
|
25
|
+
description: legacy.description,
|
|
26
|
+
detectorId: legacy.detector?.config?.['detectorId'] ?? 'unknown',
|
|
27
|
+
detectorName: legacy.name,
|
|
28
|
+
detectionMethod: (legacy.detector?.type ?? 'ast'),
|
|
29
|
+
detector: {
|
|
30
|
+
type: (legacy.detector?.type ?? 'ast'),
|
|
31
|
+
config: legacy.detector?.config ?? {},
|
|
32
|
+
},
|
|
33
|
+
confidence: legacy.confidence.score,
|
|
34
|
+
confidenceLevel: legacy.confidence.level,
|
|
35
|
+
locations: legacy.locations.map((loc) => ({
|
|
36
|
+
file: loc.file,
|
|
37
|
+
line: loc.line,
|
|
38
|
+
column: loc.column,
|
|
39
|
+
endLine: loc.endLine,
|
|
40
|
+
endColumn: loc.endColumn,
|
|
41
|
+
})),
|
|
42
|
+
outliers: legacy.outliers.map((out) => ({
|
|
43
|
+
file: out.file,
|
|
44
|
+
line: out.line,
|
|
45
|
+
column: out.column,
|
|
46
|
+
endLine: out.endLine,
|
|
47
|
+
endColumn: out.endColumn,
|
|
48
|
+
reason: out.reason,
|
|
49
|
+
deviationScore: out.deviationScore,
|
|
50
|
+
})),
|
|
51
|
+
status: legacy.status,
|
|
52
|
+
severity: legacy.severity,
|
|
53
|
+
firstSeen: legacy.metadata.firstSeen,
|
|
54
|
+
lastSeen: legacy.metadata.lastSeen,
|
|
55
|
+
approvedAt: legacy.metadata.approvedAt,
|
|
56
|
+
approvedBy: legacy.metadata.approvedBy,
|
|
57
|
+
tags: legacy.metadata.tags ?? [],
|
|
58
|
+
autoFixable: legacy.autoFixable,
|
|
59
|
+
metadata: {
|
|
60
|
+
firstSeen: legacy.metadata.firstSeen,
|
|
61
|
+
lastSeen: legacy.metadata.lastSeen,
|
|
62
|
+
approvedAt: legacy.metadata.approvedAt,
|
|
63
|
+
approvedBy: legacy.metadata.approvedBy,
|
|
64
|
+
version: legacy.metadata.version,
|
|
65
|
+
tags: legacy.metadata.tags,
|
|
66
|
+
relatedPatterns: legacy.metadata.relatedPatterns,
|
|
67
|
+
source: legacy.metadata.source,
|
|
68
|
+
custom: legacy.metadata.custom,
|
|
69
|
+
},
|
|
70
|
+
};
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Convert a unified Pattern to the legacy Pattern type
|
|
74
|
+
*/
|
|
75
|
+
function unifiedToLegacy(unified) {
|
|
76
|
+
return {
|
|
77
|
+
id: unified.id,
|
|
78
|
+
category: unified.category,
|
|
79
|
+
subcategory: unified.subcategory,
|
|
80
|
+
name: unified.name,
|
|
81
|
+
description: unified.description,
|
|
82
|
+
detector: {
|
|
83
|
+
type: unified.detectionMethod,
|
|
84
|
+
config: {
|
|
85
|
+
...unified.detector.config,
|
|
86
|
+
detectorId: unified.detectorId,
|
|
87
|
+
},
|
|
88
|
+
},
|
|
89
|
+
confidence: {
|
|
90
|
+
score: unified.confidence,
|
|
91
|
+
level: unified.confidenceLevel,
|
|
92
|
+
frequency: unified.confidence,
|
|
93
|
+
consistency: 1,
|
|
94
|
+
age: 0,
|
|
95
|
+
spread: unified.locations.length,
|
|
96
|
+
},
|
|
97
|
+
locations: unified.locations.map((loc) => ({
|
|
98
|
+
file: loc.file,
|
|
99
|
+
line: loc.line,
|
|
100
|
+
column: loc.column,
|
|
101
|
+
endLine: loc.endLine,
|
|
102
|
+
endColumn: loc.endColumn,
|
|
103
|
+
})),
|
|
104
|
+
outliers: unified.outliers.map((out) => ({
|
|
105
|
+
file: out.file,
|
|
106
|
+
line: out.line,
|
|
107
|
+
column: out.column,
|
|
108
|
+
endLine: out.endLine,
|
|
109
|
+
endColumn: out.endColumn,
|
|
110
|
+
reason: out.reason,
|
|
111
|
+
deviationScore: out.deviationScore,
|
|
112
|
+
})),
|
|
113
|
+
status: unified.status,
|
|
114
|
+
severity: unified.severity,
|
|
115
|
+
autoFixable: unified.autoFixable,
|
|
116
|
+
metadata: {
|
|
117
|
+
firstSeen: unified.firstSeen,
|
|
118
|
+
lastSeen: unified.lastSeen,
|
|
119
|
+
approvedAt: unified.approvedAt,
|
|
120
|
+
approvedBy: unified.approvedBy,
|
|
121
|
+
version: unified.metadata.version,
|
|
122
|
+
tags: unified.tags,
|
|
123
|
+
relatedPatterns: unified.metadata.relatedPatterns,
|
|
124
|
+
source: unified.metadata.source,
|
|
125
|
+
custom: unified.metadata.custom,
|
|
126
|
+
},
|
|
127
|
+
};
|
|
128
|
+
}
|
|
129
|
+
// ============================================================================
|
|
130
|
+
// Pattern Store Adapter
|
|
131
|
+
// ============================================================================
|
|
132
|
+
/**
|
|
133
|
+
* Adapter that wraps the existing PatternStore and exposes it
|
|
134
|
+
* through the IPatternRepository interface.
|
|
135
|
+
*
|
|
136
|
+
* This enables gradual migration of consumers to the new pattern system.
|
|
137
|
+
*/
|
|
138
|
+
export class PatternStoreAdapter extends EventEmitter {
|
|
139
|
+
store;
|
|
140
|
+
initialized = false;
|
|
141
|
+
constructor(store) {
|
|
142
|
+
super();
|
|
143
|
+
this.store = store;
|
|
144
|
+
// Forward events from the underlying store
|
|
145
|
+
this.setupEventForwarding();
|
|
146
|
+
}
|
|
147
|
+
setupEventForwarding() {
|
|
148
|
+
// Map legacy events to new event types
|
|
149
|
+
this.store.on('pattern:created', (pattern) => {
|
|
150
|
+
this.emit('pattern:added', legacyToUnified(pattern));
|
|
151
|
+
});
|
|
152
|
+
this.store.on('pattern:updated', (pattern) => {
|
|
153
|
+
this.emit('pattern:updated', legacyToUnified(pattern));
|
|
154
|
+
});
|
|
155
|
+
this.store.on('pattern:deleted', (pattern) => {
|
|
156
|
+
this.emit('pattern:deleted', legacyToUnified(pattern));
|
|
157
|
+
});
|
|
158
|
+
this.store.on('pattern:approved', (pattern) => {
|
|
159
|
+
this.emit('pattern:approved', legacyToUnified(pattern));
|
|
160
|
+
});
|
|
161
|
+
this.store.on('pattern:ignored', (pattern) => {
|
|
162
|
+
this.emit('pattern:ignored', legacyToUnified(pattern));
|
|
163
|
+
});
|
|
164
|
+
}
|
|
165
|
+
// ==========================================================================
|
|
166
|
+
// Lifecycle
|
|
167
|
+
// ==========================================================================
|
|
168
|
+
async initialize() {
|
|
169
|
+
if (this.initialized)
|
|
170
|
+
return;
|
|
171
|
+
await this.store.initialize();
|
|
172
|
+
this.initialized = true;
|
|
173
|
+
this.emit('patterns:loaded', undefined, { count: this.store.getAll().length });
|
|
174
|
+
}
|
|
175
|
+
async close() {
|
|
176
|
+
// PatternStore doesn't have a close method, but we can save
|
|
177
|
+
await this.store.saveAll();
|
|
178
|
+
this.initialized = false;
|
|
179
|
+
}
|
|
180
|
+
// ==========================================================================
|
|
181
|
+
// CRUD Operations
|
|
182
|
+
// ==========================================================================
|
|
183
|
+
async add(pattern) {
|
|
184
|
+
this.ensureInitialized();
|
|
185
|
+
if (this.store.get(pattern.id)) {
|
|
186
|
+
throw new PatternAlreadyExistsError(pattern.id);
|
|
187
|
+
}
|
|
188
|
+
const legacy = unifiedToLegacy(pattern);
|
|
189
|
+
this.store.add(legacy);
|
|
190
|
+
}
|
|
191
|
+
async addMany(patterns) {
|
|
192
|
+
for (const pattern of patterns) {
|
|
193
|
+
await this.add(pattern);
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
async get(id) {
|
|
197
|
+
this.ensureInitialized();
|
|
198
|
+
const legacy = this.store.get(id);
|
|
199
|
+
if (!legacy)
|
|
200
|
+
return null;
|
|
201
|
+
return legacyToUnified(legacy);
|
|
202
|
+
}
|
|
203
|
+
async update(id, updates) {
|
|
204
|
+
this.ensureInitialized();
|
|
205
|
+
const existing = this.store.get(id);
|
|
206
|
+
if (!existing) {
|
|
207
|
+
throw new PatternNotFoundError(id);
|
|
208
|
+
}
|
|
209
|
+
// Convert updates to legacy format and apply
|
|
210
|
+
const unified = legacyToUnified(existing);
|
|
211
|
+
const updated = {
|
|
212
|
+
...unified,
|
|
213
|
+
...updates,
|
|
214
|
+
id: unified.id, // Prevent ID change
|
|
215
|
+
lastSeen: new Date().toISOString(),
|
|
216
|
+
};
|
|
217
|
+
// Recompute confidence level if confidence changed
|
|
218
|
+
if (updates.confidence !== undefined) {
|
|
219
|
+
updated.confidenceLevel = computeConfidenceLevel(updates.confidence);
|
|
220
|
+
}
|
|
221
|
+
const legacy = unifiedToLegacy(updated);
|
|
222
|
+
this.store.update(id, legacy);
|
|
223
|
+
return updated;
|
|
224
|
+
}
|
|
225
|
+
async delete(id) {
|
|
226
|
+
this.ensureInitialized();
|
|
227
|
+
const existing = this.store.get(id);
|
|
228
|
+
if (!existing)
|
|
229
|
+
return false;
|
|
230
|
+
this.store.delete(id);
|
|
231
|
+
return true;
|
|
232
|
+
}
|
|
233
|
+
// ==========================================================================
|
|
234
|
+
// Querying
|
|
235
|
+
// ==========================================================================
|
|
236
|
+
async query(options) {
|
|
237
|
+
this.ensureInitialized();
|
|
238
|
+
let patterns = this.store.getAll().map(legacyToUnified);
|
|
239
|
+
// Apply filters
|
|
240
|
+
if (options.filter) {
|
|
241
|
+
patterns = this.applyFilter(patterns, options.filter);
|
|
242
|
+
}
|
|
243
|
+
const total = patterns.length;
|
|
244
|
+
// Apply sorting
|
|
245
|
+
if (options.sort) {
|
|
246
|
+
patterns = this.applySort(patterns, options.sort);
|
|
247
|
+
}
|
|
248
|
+
// Apply pagination
|
|
249
|
+
if (options.pagination) {
|
|
250
|
+
const { offset, limit } = options.pagination;
|
|
251
|
+
patterns = patterns.slice(offset, offset + limit);
|
|
252
|
+
}
|
|
253
|
+
return {
|
|
254
|
+
patterns,
|
|
255
|
+
total,
|
|
256
|
+
hasMore: options.pagination
|
|
257
|
+
? options.pagination.offset + patterns.length < total
|
|
258
|
+
: false,
|
|
259
|
+
};
|
|
260
|
+
}
|
|
261
|
+
applyFilter(patterns, filter) {
|
|
262
|
+
return patterns.filter((p) => {
|
|
263
|
+
if (filter.ids && !filter.ids.includes(p.id))
|
|
264
|
+
return false;
|
|
265
|
+
if (filter.categories && !filter.categories.includes(p.category))
|
|
266
|
+
return false;
|
|
267
|
+
if (filter.statuses && !filter.statuses.includes(p.status))
|
|
268
|
+
return false;
|
|
269
|
+
if (filter.minConfidence !== undefined && p.confidence < filter.minConfidence)
|
|
270
|
+
return false;
|
|
271
|
+
if (filter.maxConfidence !== undefined && p.confidence > filter.maxConfidence)
|
|
272
|
+
return false;
|
|
273
|
+
if (filter.confidenceLevels && !filter.confidenceLevels.includes(p.confidenceLevel))
|
|
274
|
+
return false;
|
|
275
|
+
if (filter.severities && !filter.severities.includes(p.severity))
|
|
276
|
+
return false;
|
|
277
|
+
if (filter.files) {
|
|
278
|
+
const hasFile = p.locations.some((loc) => filter.files.includes(loc.file));
|
|
279
|
+
if (!hasFile)
|
|
280
|
+
return false;
|
|
281
|
+
}
|
|
282
|
+
if (filter.hasOutliers !== undefined) {
|
|
283
|
+
const hasOutliers = p.outliers.length > 0;
|
|
284
|
+
if (filter.hasOutliers !== hasOutliers)
|
|
285
|
+
return false;
|
|
286
|
+
}
|
|
287
|
+
if (filter.tags) {
|
|
288
|
+
const hasTags = filter.tags.some((tag) => p.tags.includes(tag));
|
|
289
|
+
if (!hasTags)
|
|
290
|
+
return false;
|
|
291
|
+
}
|
|
292
|
+
if (filter.search) {
|
|
293
|
+
const searchLower = filter.search.toLowerCase();
|
|
294
|
+
const matches = p.name.toLowerCase().includes(searchLower) ||
|
|
295
|
+
p.description.toLowerCase().includes(searchLower);
|
|
296
|
+
if (!matches)
|
|
297
|
+
return false;
|
|
298
|
+
}
|
|
299
|
+
if (filter.createdAfter) {
|
|
300
|
+
const firstSeen = new Date(p.firstSeen);
|
|
301
|
+
if (firstSeen < filter.createdAfter)
|
|
302
|
+
return false;
|
|
303
|
+
}
|
|
304
|
+
if (filter.createdBefore) {
|
|
305
|
+
const firstSeen = new Date(p.firstSeen);
|
|
306
|
+
if (firstSeen > filter.createdBefore)
|
|
307
|
+
return false;
|
|
308
|
+
}
|
|
309
|
+
return true;
|
|
310
|
+
});
|
|
311
|
+
}
|
|
312
|
+
applySort(patterns, sort) {
|
|
313
|
+
const sorted = [...patterns];
|
|
314
|
+
const direction = sort.direction === 'asc' ? 1 : -1;
|
|
315
|
+
sorted.sort((a, b) => {
|
|
316
|
+
let comparison = 0;
|
|
317
|
+
switch (sort.field) {
|
|
318
|
+
case 'name':
|
|
319
|
+
comparison = a.name.localeCompare(b.name);
|
|
320
|
+
break;
|
|
321
|
+
case 'confidence':
|
|
322
|
+
comparison = a.confidence - b.confidence;
|
|
323
|
+
break;
|
|
324
|
+
case 'severity':
|
|
325
|
+
const severityOrder = { error: 4, warning: 3, info: 2, hint: 1 };
|
|
326
|
+
comparison = severityOrder[a.severity] - severityOrder[b.severity];
|
|
327
|
+
break;
|
|
328
|
+
case 'firstSeen':
|
|
329
|
+
comparison = new Date(a.firstSeen).getTime() - new Date(b.firstSeen).getTime();
|
|
330
|
+
break;
|
|
331
|
+
case 'lastSeen':
|
|
332
|
+
comparison = new Date(a.lastSeen).getTime() - new Date(b.lastSeen).getTime();
|
|
333
|
+
break;
|
|
334
|
+
case 'locationCount':
|
|
335
|
+
comparison = a.locations.length - b.locations.length;
|
|
336
|
+
break;
|
|
337
|
+
}
|
|
338
|
+
return comparison * direction;
|
|
339
|
+
});
|
|
340
|
+
return sorted;
|
|
341
|
+
}
|
|
342
|
+
async getByCategory(category) {
|
|
343
|
+
const result = await this.query({
|
|
344
|
+
filter: { categories: [category] },
|
|
345
|
+
});
|
|
346
|
+
return result.patterns;
|
|
347
|
+
}
|
|
348
|
+
async getByStatus(status) {
|
|
349
|
+
const result = await this.query({
|
|
350
|
+
filter: { statuses: [status] },
|
|
351
|
+
});
|
|
352
|
+
return result.patterns;
|
|
353
|
+
}
|
|
354
|
+
async getByFile(file) {
|
|
355
|
+
const result = await this.query({
|
|
356
|
+
filter: { files: [file] },
|
|
357
|
+
});
|
|
358
|
+
return result.patterns;
|
|
359
|
+
}
|
|
360
|
+
async getAll() {
|
|
361
|
+
this.ensureInitialized();
|
|
362
|
+
return this.store.getAll().map(legacyToUnified);
|
|
363
|
+
}
|
|
364
|
+
async count(filter) {
|
|
365
|
+
if (!filter) {
|
|
366
|
+
return this.store.getAll().length;
|
|
367
|
+
}
|
|
368
|
+
const result = await this.query({ filter });
|
|
369
|
+
return result.total;
|
|
370
|
+
}
|
|
371
|
+
// ==========================================================================
|
|
372
|
+
// Status Transitions
|
|
373
|
+
// ==========================================================================
|
|
374
|
+
async approve(id, approvedBy) {
|
|
375
|
+
this.ensureInitialized();
|
|
376
|
+
const existing = this.store.get(id);
|
|
377
|
+
if (!existing) {
|
|
378
|
+
throw new PatternNotFoundError(id);
|
|
379
|
+
}
|
|
380
|
+
try {
|
|
381
|
+
this.store.approve(id, approvedBy);
|
|
382
|
+
}
|
|
383
|
+
catch (error) {
|
|
384
|
+
if (error.name === 'InvalidStateTransitionError') {
|
|
385
|
+
throw new InvalidStatusTransitionError(id, existing.status, 'approved');
|
|
386
|
+
}
|
|
387
|
+
throw error;
|
|
388
|
+
}
|
|
389
|
+
const updated = this.store.get(id);
|
|
390
|
+
return legacyToUnified(updated);
|
|
391
|
+
}
|
|
392
|
+
async ignore(id) {
|
|
393
|
+
this.ensureInitialized();
|
|
394
|
+
const existing = this.store.get(id);
|
|
395
|
+
if (!existing) {
|
|
396
|
+
throw new PatternNotFoundError(id);
|
|
397
|
+
}
|
|
398
|
+
try {
|
|
399
|
+
this.store.ignore(id);
|
|
400
|
+
}
|
|
401
|
+
catch (error) {
|
|
402
|
+
if (error.name === 'InvalidStateTransitionError') {
|
|
403
|
+
throw new InvalidStatusTransitionError(id, existing.status, 'ignored');
|
|
404
|
+
}
|
|
405
|
+
throw error;
|
|
406
|
+
}
|
|
407
|
+
const updated = this.store.get(id);
|
|
408
|
+
return legacyToUnified(updated);
|
|
409
|
+
}
|
|
410
|
+
// ==========================================================================
|
|
411
|
+
// Batch Operations
|
|
412
|
+
// ==========================================================================
|
|
413
|
+
async saveAll() {
|
|
414
|
+
await this.store.saveAll();
|
|
415
|
+
this.emit('patterns:saved', undefined, { count: this.store.getAll().length });
|
|
416
|
+
}
|
|
417
|
+
async clear() {
|
|
418
|
+
this.ensureInitialized();
|
|
419
|
+
// PatternStore doesn't have a clear method, so we delete all patterns
|
|
420
|
+
const patterns = this.store.getAll();
|
|
421
|
+
for (const pattern of patterns) {
|
|
422
|
+
this.store.delete(pattern.id);
|
|
423
|
+
}
|
|
424
|
+
await this.store.saveAll();
|
|
425
|
+
}
|
|
426
|
+
// ==========================================================================
|
|
427
|
+
// Events
|
|
428
|
+
// ==========================================================================
|
|
429
|
+
on(event, handler) {
|
|
430
|
+
return super.on(event, handler);
|
|
431
|
+
}
|
|
432
|
+
off(event, handler) {
|
|
433
|
+
return super.off(event, handler);
|
|
434
|
+
}
|
|
435
|
+
// ==========================================================================
|
|
436
|
+
// Utilities
|
|
437
|
+
// ==========================================================================
|
|
438
|
+
async exists(id) {
|
|
439
|
+
this.ensureInitialized();
|
|
440
|
+
return this.store.get(id) !== undefined;
|
|
441
|
+
}
|
|
442
|
+
async getSummaries(options) {
|
|
443
|
+
const result = await this.query(options ?? {});
|
|
444
|
+
return result.patterns.map(toPatternSummary);
|
|
445
|
+
}
|
|
446
|
+
ensureInitialized() {
|
|
447
|
+
if (!this.initialized) {
|
|
448
|
+
throw new Error('Adapter not initialized. Call initialize() first.');
|
|
449
|
+
}
|
|
450
|
+
}
|
|
451
|
+
// ==========================================================================
|
|
452
|
+
// Legacy Access
|
|
453
|
+
// ==========================================================================
|
|
454
|
+
/**
|
|
455
|
+
* Get the underlying PatternStore for legacy code that needs direct access.
|
|
456
|
+
* @deprecated Use the IPatternRepository interface instead.
|
|
457
|
+
*/
|
|
458
|
+
getLegacyStore() {
|
|
459
|
+
return this.store;
|
|
460
|
+
}
|
|
461
|
+
}
|
|
462
|
+
/**
|
|
463
|
+
* Create a PatternStoreAdapter from an existing PatternStore
|
|
464
|
+
*/
|
|
465
|
+
export function createPatternStoreAdapter(store) {
|
|
466
|
+
return new PatternStoreAdapter(store);
|
|
467
|
+
}
|
|
468
|
+
//# sourceMappingURL=pattern-store-adapter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pattern-store-adapter.js","sourceRoot":"","sources":["../../../src/patterns/adapters/pattern-store-adapter.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Service Factory
|
|
3
|
+
*
|
|
4
|
+
* Factory functions for creating PatternService instances from legacy stores.
|
|
5
|
+
* This is the recommended way to migrate consumers to the new pattern system.
|
|
6
|
+
*
|
|
7
|
+
* @module patterns/adapters/service-factory
|
|
8
|
+
*/
|
|
9
|
+
import type { PatternStore } from '../../store/pattern-store.js';
|
|
10
|
+
import type { IPatternService, PatternServiceConfig } from '../service.js';
|
|
11
|
+
/**
|
|
12
|
+
* Create a PatternService from an existing PatternStore.
|
|
13
|
+
*
|
|
14
|
+
* This is the recommended migration path for consumers currently using
|
|
15
|
+
* PatternStore directly. The service provides a higher-level API with
|
|
16
|
+
* caching, metrics, and business logic.
|
|
17
|
+
*
|
|
18
|
+
* The returned service auto-initializes on first use, so you don't need
|
|
19
|
+
* to call initialize() manually.
|
|
20
|
+
*
|
|
21
|
+
* @example
|
|
22
|
+
* ```typescript
|
|
23
|
+
* // Before (direct PatternStore usage)
|
|
24
|
+
* const store = new PatternStore({ rootDir });
|
|
25
|
+
* await store.initialize();
|
|
26
|
+
* const patterns = store.getAll();
|
|
27
|
+
*
|
|
28
|
+
* // After (using PatternService)
|
|
29
|
+
* const store = new PatternStore({ rootDir });
|
|
30
|
+
* const service = createPatternServiceFromStore(store, rootDir);
|
|
31
|
+
* const result = await service.listPatterns(); // Auto-initializes
|
|
32
|
+
* ```
|
|
33
|
+
*
|
|
34
|
+
* @param store The existing PatternStore instance
|
|
35
|
+
* @param rootDir The project root directory (for reading code examples)
|
|
36
|
+
* @param config Optional service configuration
|
|
37
|
+
* @returns A PatternService instance wrapping the store
|
|
38
|
+
*/
|
|
39
|
+
export declare function createPatternServiceFromStore(store: PatternStore, rootDir: string, config?: Partial<PatternServiceConfig>): IPatternService;
|
|
40
|
+
//# sourceMappingURL=service-factory.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"service-factory.d.ts","sourceRoot":"","sources":["../../../src/patterns/adapters/service-factory.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAC;AACjE,OAAO,KAAK,EAAE,eAAe,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AAkI3E;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,wBAAgB,6BAA6B,CAC3C,KAAK,EAAE,YAAY,EACnB,OAAO,EAAE,MAAM,EACf,MAAM,CAAC,EAAE,OAAO,CAAC,oBAAoB,CAAC,GACrC,eAAe,CAGjB"}
|
|
@@ -0,0 +1,144 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Service Factory
|
|
3
|
+
*
|
|
4
|
+
* Factory functions for creating PatternService instances from legacy stores.
|
|
5
|
+
* This is the recommended way to migrate consumers to the new pattern system.
|
|
6
|
+
*
|
|
7
|
+
* @module patterns/adapters/service-factory
|
|
8
|
+
*/
|
|
9
|
+
import { PatternStoreAdapter } from './pattern-store-adapter.js';
|
|
10
|
+
import { PatternService } from '../impl/pattern-service.js';
|
|
11
|
+
/**
|
|
12
|
+
* A wrapper that auto-initializes the repository on first use.
|
|
13
|
+
* This provides a seamless experience for consumers who don't want
|
|
14
|
+
* to manually call initialize().
|
|
15
|
+
*/
|
|
16
|
+
class AutoInitPatternService {
|
|
17
|
+
inner;
|
|
18
|
+
repository;
|
|
19
|
+
initPromise = null;
|
|
20
|
+
constructor(repository, rootDir, config) {
|
|
21
|
+
this.repository = repository;
|
|
22
|
+
this.inner = new PatternService(repository, rootDir, config);
|
|
23
|
+
}
|
|
24
|
+
async ensureInitialized() {
|
|
25
|
+
if (!this.initPromise) {
|
|
26
|
+
this.initPromise = this.repository.initialize();
|
|
27
|
+
}
|
|
28
|
+
await this.initPromise;
|
|
29
|
+
}
|
|
30
|
+
async getStatus() {
|
|
31
|
+
await this.ensureInitialized();
|
|
32
|
+
return this.inner.getStatus();
|
|
33
|
+
}
|
|
34
|
+
async getCategories() {
|
|
35
|
+
await this.ensureInitialized();
|
|
36
|
+
return this.inner.getCategories();
|
|
37
|
+
}
|
|
38
|
+
async listPatterns(options) {
|
|
39
|
+
await this.ensureInitialized();
|
|
40
|
+
return this.inner.listPatterns(options);
|
|
41
|
+
}
|
|
42
|
+
async listByCategory(...args) {
|
|
43
|
+
await this.ensureInitialized();
|
|
44
|
+
return this.inner.listByCategory(...args);
|
|
45
|
+
}
|
|
46
|
+
async listByStatus(...args) {
|
|
47
|
+
await this.ensureInitialized();
|
|
48
|
+
return this.inner.listByStatus(...args);
|
|
49
|
+
}
|
|
50
|
+
async getPattern(id) {
|
|
51
|
+
await this.ensureInitialized();
|
|
52
|
+
return this.inner.getPattern(id);
|
|
53
|
+
}
|
|
54
|
+
async getPatternWithExamples(id, maxExamples) {
|
|
55
|
+
await this.ensureInitialized();
|
|
56
|
+
return this.inner.getPatternWithExamples(id, maxExamples);
|
|
57
|
+
}
|
|
58
|
+
async getPatternsByFile(file) {
|
|
59
|
+
await this.ensureInitialized();
|
|
60
|
+
return this.inner.getPatternsByFile(file);
|
|
61
|
+
}
|
|
62
|
+
async approvePattern(id, approvedBy) {
|
|
63
|
+
await this.ensureInitialized();
|
|
64
|
+
return this.inner.approvePattern(id, approvedBy);
|
|
65
|
+
}
|
|
66
|
+
async ignorePattern(id) {
|
|
67
|
+
await this.ensureInitialized();
|
|
68
|
+
return this.inner.ignorePattern(id);
|
|
69
|
+
}
|
|
70
|
+
async approveMany(ids, approvedBy) {
|
|
71
|
+
await this.ensureInitialized();
|
|
72
|
+
return this.inner.approveMany(ids, approvedBy);
|
|
73
|
+
}
|
|
74
|
+
async ignoreMany(ids) {
|
|
75
|
+
await this.ensureInitialized();
|
|
76
|
+
return this.inner.ignoreMany(ids);
|
|
77
|
+
}
|
|
78
|
+
async search(...args) {
|
|
79
|
+
await this.ensureInitialized();
|
|
80
|
+
return this.inner.search(...args);
|
|
81
|
+
}
|
|
82
|
+
async query(...args) {
|
|
83
|
+
await this.ensureInitialized();
|
|
84
|
+
return this.inner.query(...args);
|
|
85
|
+
}
|
|
86
|
+
// === Write Operations ===
|
|
87
|
+
async addPattern(...args) {
|
|
88
|
+
await this.ensureInitialized();
|
|
89
|
+
return this.inner.addPattern(...args);
|
|
90
|
+
}
|
|
91
|
+
async addPatterns(...args) {
|
|
92
|
+
await this.ensureInitialized();
|
|
93
|
+
return this.inner.addPatterns(...args);
|
|
94
|
+
}
|
|
95
|
+
async updatePattern(...args) {
|
|
96
|
+
await this.ensureInitialized();
|
|
97
|
+
return this.inner.updatePattern(...args);
|
|
98
|
+
}
|
|
99
|
+
async deletePattern(...args) {
|
|
100
|
+
await this.ensureInitialized();
|
|
101
|
+
return this.inner.deletePattern(...args);
|
|
102
|
+
}
|
|
103
|
+
async save() {
|
|
104
|
+
await this.ensureInitialized();
|
|
105
|
+
return this.inner.save();
|
|
106
|
+
}
|
|
107
|
+
async clear() {
|
|
108
|
+
await this.ensureInitialized();
|
|
109
|
+
return this.inner.clear();
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
/**
|
|
113
|
+
* Create a PatternService from an existing PatternStore.
|
|
114
|
+
*
|
|
115
|
+
* This is the recommended migration path for consumers currently using
|
|
116
|
+
* PatternStore directly. The service provides a higher-level API with
|
|
117
|
+
* caching, metrics, and business logic.
|
|
118
|
+
*
|
|
119
|
+
* The returned service auto-initializes on first use, so you don't need
|
|
120
|
+
* to call initialize() manually.
|
|
121
|
+
*
|
|
122
|
+
* @example
|
|
123
|
+
* ```typescript
|
|
124
|
+
* // Before (direct PatternStore usage)
|
|
125
|
+
* const store = new PatternStore({ rootDir });
|
|
126
|
+
* await store.initialize();
|
|
127
|
+
* const patterns = store.getAll();
|
|
128
|
+
*
|
|
129
|
+
* // After (using PatternService)
|
|
130
|
+
* const store = new PatternStore({ rootDir });
|
|
131
|
+
* const service = createPatternServiceFromStore(store, rootDir);
|
|
132
|
+
* const result = await service.listPatterns(); // Auto-initializes
|
|
133
|
+
* ```
|
|
134
|
+
*
|
|
135
|
+
* @param store The existing PatternStore instance
|
|
136
|
+
* @param rootDir The project root directory (for reading code examples)
|
|
137
|
+
* @param config Optional service configuration
|
|
138
|
+
* @returns A PatternService instance wrapping the store
|
|
139
|
+
*/
|
|
140
|
+
export function createPatternServiceFromStore(store, rootDir, config) {
|
|
141
|
+
const adapter = new PatternStoreAdapter(store);
|
|
142
|
+
return new AutoInitPatternService(adapter, rootDir, config);
|
|
143
|
+
}
|
|
144
|
+
//# sourceMappingURL=service-factory.js.map
|