@memberjunction/db-auto-doc 6.1.4 → 6.2.0-edge.1
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/api/DBAutoDocAPI.d.ts +23 -0
- package/dist/api/DBAutoDocAPI.d.ts.map +1 -1
- package/dist/api/DBAutoDocAPI.js +20 -4
- package/dist/api/DBAutoDocAPI.js.map +1 -1
- package/dist/commands/export.js +4 -4
- package/dist/commands/generate-queries.js +11 -11
- package/dist/core/AnalysisEngine.d.ts +37 -0
- package/dist/core/AnalysisEngine.d.ts.map +1 -1
- package/dist/core/AnalysisEngine.js +60 -16
- package/dist/core/AnalysisEngine.js.map +1 -1
- package/dist/core/AnalysisOrchestrator.d.ts +2 -0
- package/dist/core/AnalysisOrchestrator.d.ts.map +1 -1
- package/dist/core/AnalysisOrchestrator.js +33 -29
- package/dist/core/AnalysisOrchestrator.js.map +1 -1
- package/dist/core/BackpropagationEngine.d.ts +7 -0
- package/dist/core/BackpropagationEngine.d.ts.map +1 -1
- package/dist/core/BackpropagationEngine.js +10 -2
- package/dist/core/BackpropagationEngine.js.map +1 -1
- package/dist/core/ConvergenceDetector.d.ts +4 -0
- package/dist/core/ConvergenceDetector.d.ts.map +1 -1
- package/dist/core/ConvergenceDetector.js +10 -2
- package/dist/core/ConvergenceDetector.js.map +1 -1
- package/dist/core/GuardrailsManager.d.ts +16 -0
- package/dist/core/GuardrailsManager.d.ts.map +1 -1
- package/dist/core/GuardrailsManager.js +40 -8
- package/dist/core/GuardrailsManager.js.map +1 -1
- package/dist/database/Database.d.ts +25 -0
- package/dist/database/Database.d.ts.map +1 -1
- package/dist/database/Database.js +46 -10
- package/dist/database/Database.js.map +1 -1
- package/dist/database/TopologicalSorter.d.ts +4 -0
- package/dist/database/TopologicalSorter.d.ts.map +1 -1
- package/dist/database/TopologicalSorter.js +10 -2
- package/dist/database/TopologicalSorter.js.map +1 -1
- package/dist/database/index.d.ts +1 -1
- package/dist/database/index.d.ts.map +1 -1
- package/dist/database/index.js +1 -1
- package/dist/database/index.js.map +1 -1
- package/dist/discovery/BridgeViewSQLGenerator.d.ts +28 -14
- package/dist/discovery/BridgeViewSQLGenerator.d.ts.map +1 -1
- package/dist/discovery/BridgeViewSQLGenerator.js +62 -31
- package/dist/discovery/BridgeViewSQLGenerator.js.map +1 -1
- package/dist/discovery/ColumnClusterer.d.ts +11 -5
- package/dist/discovery/ColumnClusterer.d.ts.map +1 -1
- package/dist/discovery/ColumnClusterer.js +21 -9
- package/dist/discovery/ColumnClusterer.js.map +1 -1
- package/dist/discovery/ColumnNormalizer.d.ts +28 -16
- package/dist/discovery/ColumnNormalizer.d.ts.map +1 -1
- package/dist/discovery/ColumnNormalizer.js +35 -27
- package/dist/discovery/ColumnNormalizer.js.map +1 -1
- package/dist/discovery/ColumnStatsCache.d.ts +37 -0
- package/dist/discovery/ColumnStatsCache.d.ts.map +1 -1
- package/dist/discovery/ColumnStatsCache.js +87 -23
- package/dist/discovery/ColumnStatsCache.js.map +1 -1
- package/dist/discovery/Composer.d.ts +14 -4
- package/dist/discovery/Composer.d.ts.map +1 -1
- package/dist/discovery/Composer.js +28 -20
- package/dist/discovery/Composer.js.map +1 -1
- package/dist/discovery/DiscoveryEngine.d.ts +16 -8
- package/dist/discovery/DiscoveryEngine.d.ts.map +1 -1
- package/dist/discovery/DiscoveryEngine.js +43 -27
- package/dist/discovery/DiscoveryEngine.js.map +1 -1
- package/dist/discovery/DiscoveryTriggerAnalyzer.d.ts +20 -0
- package/dist/discovery/DiscoveryTriggerAnalyzer.d.ts.map +1 -1
- package/dist/discovery/DiscoveryTriggerAnalyzer.js +27 -7
- package/dist/discovery/DiscoveryTriggerAnalyzer.js.map +1 -1
- package/dist/discovery/EmbeddingProvider.d.ts +6 -4
- package/dist/discovery/EmbeddingProvider.d.ts.map +1 -1
- package/dist/discovery/EmbeddingProvider.js +7 -3
- package/dist/discovery/EmbeddingProvider.js.map +1 -1
- package/dist/discovery/EnumCandidateGate.d.ts +15 -11
- package/dist/discovery/EnumCandidateGate.d.ts.map +1 -1
- package/dist/discovery/EnumCandidateGate.js +21 -13
- package/dist/discovery/EnumCandidateGate.js.map +1 -1
- package/dist/discovery/FKDetector.d.ts +4 -0
- package/dist/discovery/FKDetector.d.ts.map +1 -1
- package/dist/discovery/FKDetector.js +10 -2
- package/dist/discovery/FKDetector.js.map +1 -1
- package/dist/discovery/FKGraphWalker.d.ts +27 -18
- package/dist/discovery/FKGraphWalker.d.ts.map +1 -1
- package/dist/discovery/FKGraphWalker.js +30 -26
- package/dist/discovery/FKGraphWalker.js.map +1 -1
- package/dist/discovery/LLMDiscoveryValidator.d.ts +2 -0
- package/dist/discovery/LLMDiscoveryValidator.d.ts.map +1 -1
- package/dist/discovery/LLMDiscoveryValidator.js +28 -24
- package/dist/discovery/LLMDiscoveryValidator.js.map +1 -1
- package/dist/discovery/LLMSanityChecker.d.ts +5 -3
- package/dist/discovery/LLMSanityChecker.d.ts.map +1 -1
- package/dist/discovery/LLMSanityChecker.js +16 -12
- package/dist/discovery/LLMSanityChecker.js.map +1 -1
- package/dist/discovery/OrganicKeyDetector.d.ts +12 -4
- package/dist/discovery/OrganicKeyDetector.d.ts.map +1 -1
- package/dist/discovery/OrganicKeyDetector.js +36 -27
- package/dist/discovery/OrganicKeyDetector.js.map +1 -1
- package/dist/discovery/OrganicKeyTranslator.d.ts +9 -0
- package/dist/discovery/OrganicKeyTranslator.d.ts.map +1 -1
- package/dist/discovery/OrganicKeyTranslator.js +15 -7
- package/dist/discovery/OrganicKeyTranslator.js.map +1 -1
- package/dist/discovery/PKDetector.d.ts +4 -0
- package/dist/discovery/PKDetector.d.ts.map +1 -1
- package/dist/discovery/PKDetector.js +10 -2
- package/dist/discovery/PKDetector.js.map +1 -1
- package/dist/discovery/SemanticPhase.d.ts +3 -1
- package/dist/discovery/SemanticPhase.d.ts.map +1 -1
- package/dist/discovery/SemanticPhase.js +55 -51
- package/dist/discovery/SemanticPhase.js.map +1 -1
- package/dist/discovery/StructuralPhase.d.ts +9 -3
- package/dist/discovery/StructuralPhase.d.ts.map +1 -1
- package/dist/discovery/StructuralPhase.js +13 -6
- package/dist/discovery/StructuralPhase.js.map +1 -1
- package/dist/discovery/TransitiveBridgeDetector.d.ts +21 -15
- package/dist/discovery/TransitiveBridgeDetector.d.ts.map +1 -1
- package/dist/discovery/TransitiveBridgeDetector.js +62 -51
- package/dist/discovery/TransitiveBridgeDetector.js.map +1 -1
- package/dist/drivers/BaseAutoDocDriver.d.ts +20 -8
- package/dist/drivers/BaseAutoDocDriver.d.ts.map +1 -1
- package/dist/drivers/BaseAutoDocDriver.js +10 -2
- package/dist/drivers/BaseAutoDocDriver.js.map +1 -1
- package/dist/generators/AdditionalSchemaInfoGenerator.d.ts +9 -7
- package/dist/generators/AdditionalSchemaInfoGenerator.d.ts.map +1 -1
- package/dist/generators/AdditionalSchemaInfoGenerator.js +13 -9
- package/dist/generators/AdditionalSchemaInfoGenerator.js.map +1 -1
- package/dist/generators/CSVGenerator.d.ts +2 -0
- package/dist/generators/CSVGenerator.d.ts.map +1 -1
- package/dist/generators/CSVGenerator.js +5 -1
- package/dist/generators/CSVGenerator.js.map +1 -1
- package/dist/generators/HTMLGenerator.d.ts +2 -0
- package/dist/generators/HTMLGenerator.d.ts.map +1 -1
- package/dist/generators/HTMLGenerator.js +5 -1
- package/dist/generators/HTMLGenerator.js.map +1 -1
- package/dist/generators/MarkdownGenerator.d.ts +2 -0
- package/dist/generators/MarkdownGenerator.d.ts.map +1 -1
- package/dist/generators/MarkdownGenerator.js +5 -1
- package/dist/generators/MarkdownGenerator.js.map +1 -1
- package/dist/generators/MermaidGenerator.d.ts +4 -0
- package/dist/generators/MermaidGenerator.d.ts.map +1 -1
- package/dist/generators/MermaidGenerator.js +11 -3
- package/dist/generators/MermaidGenerator.js.map +1 -1
- package/dist/generators/ReportGenerator.d.ts +2 -0
- package/dist/generators/ReportGenerator.d.ts.map +1 -1
- package/dist/generators/ReportGenerator.js +5 -1
- package/dist/generators/ReportGenerator.js.map +1 -1
- package/dist/generators/SQLGenerator.d.ts +2 -0
- package/dist/generators/SQLGenerator.d.ts.map +1 -1
- package/dist/generators/SQLGenerator.js +5 -1
- package/dist/generators/SQLGenerator.js.map +1 -1
- package/dist/generators/SampleQueryGenerator.d.ts +2 -0
- package/dist/generators/SampleQueryGenerator.d.ts.map +1 -1
- package/dist/generators/SampleQueryGenerator.js +22 -18
- package/dist/generators/SampleQueryGenerator.js.map +1 -1
- package/dist/prompts/PromptEngine.d.ts +26 -0
- package/dist/prompts/PromptEngine.d.ts.map +1 -1
- package/dist/prompts/PromptEngine.js +22 -6
- package/dist/prompts/PromptEngine.js.map +1 -1
- package/dist/prompts/PromptFileLoader.d.ts +9 -1
- package/dist/prompts/PromptFileLoader.d.ts.map +1 -1
- package/dist/prompts/PromptFileLoader.js +19 -3
- package/dist/prompts/PromptFileLoader.js.map +1 -1
- package/dist/state/IterationTracker.d.ts +31 -0
- package/dist/state/IterationTracker.d.ts.map +1 -1
- package/dist/state/IterationTracker.js +66 -14
- package/dist/state/IterationTracker.js.map +1 -1
- package/dist/state/StateManager.d.ts +35 -0
- package/dist/state/StateManager.d.ts.map +1 -1
- package/dist/state/StateManager.js +66 -14
- package/dist/state/StateManager.js.map +1 -1
- package/dist/state/StateValidator.d.ts +4 -0
- package/dist/state/StateValidator.d.ts.map +1 -1
- package/dist/state/StateValidator.js +12 -4
- package/dist/state/StateValidator.js.map +1 -1
- package/dist/types/discovery.d.ts +14 -14
- package/dist/types/organic-keys.d.ts +16 -12
- package/dist/types/organic-keys.d.ts.map +1 -1
- package/dist/types/organic-keys.js +15 -7
- package/dist/types/organic-keys.js.map +1 -1
- package/dist/types/sample-queries.d.ts +13 -13
- package/dist/utils/config-loader.d.ts +6 -0
- package/dist/utils/config-loader.d.ts.map +1 -1
- package/dist/utils/config-loader.js +15 -3
- package/dist/utils/config-loader.js.map +1 -1
- package/dist/utils/ensureArray.d.ts +2 -0
- package/dist/utils/ensureArray.d.ts.map +1 -1
- package/dist/utils/ensureArray.js +5 -1
- package/dist/utils/ensureArray.js.map +1 -1
- package/dist/utils/json.d.ts +6 -0
- package/dist/utils/json.d.ts.map +1 -1
- package/dist/utils/json.js +20 -8
- package/dist/utils/json.js.map +1 -1
- package/dist/utils/llm-factory.d.ts +6 -0
- package/dist/utils/llm-factory.d.ts.map +1 -1
- package/dist/utils/llm-factory.js +15 -3
- package/dist/utils/llm-factory.js.map +1 -1
- package/package.json +5 -5
|
@@ -21,30 +21,32 @@
|
|
|
21
21
|
* are skipped (composite-PK bridge join is future work).
|
|
22
22
|
*/
|
|
23
23
|
import { FKEdge } from './FKGraphWalker.js';
|
|
24
|
-
import { GeneratedBridgeView } from './BridgeViewSQLGenerator.js';
|
|
24
|
+
import { GeneratedBridgeView, BridgeViewProvider } from './BridgeViewSQLGenerator.js';
|
|
25
25
|
import { OrganicKeyCluster } from '../types/organic-keys.js';
|
|
26
26
|
import { DatabaseDocumentation } from '../types/state.js';
|
|
27
27
|
/** One transitive bridge finding ready for spoke emission. */
|
|
28
28
|
export interface TransitiveBridgeFinding {
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
29
|
+
HubSchema: string;
|
|
30
|
+
HubTable: string;
|
|
31
|
+
HubKeyFields: string[];
|
|
32
|
+
SpokeSchema: string;
|
|
33
|
+
SpokeTable: string;
|
|
34
|
+
SpokeJoinField: string;
|
|
35
|
+
View: GeneratedBridgeView;
|
|
36
|
+
PathLength: number;
|
|
37
|
+
PathConfidence: number;
|
|
38
38
|
/** Concept name from the underlying organic key (e.g. "email_address"). Used for the spoke's DisplayName. */
|
|
39
|
-
|
|
39
|
+
HubConcept: string;
|
|
40
40
|
}
|
|
41
41
|
export interface TransitiveBridgeDetectorOptions {
|
|
42
|
-
|
|
43
|
-
|
|
42
|
+
MaxHops?: number;
|
|
43
|
+
MinSoftFKConfidence?: number;
|
|
44
44
|
/** Drop bridges whose path confidence falls below this. Default 0.7. */
|
|
45
|
-
|
|
45
|
+
MinPathConfidence?: number;
|
|
46
46
|
/** Limit bridges per (hub, spoke) pair — keeps only the best path. Default true. */
|
|
47
|
-
|
|
47
|
+
KeepShortestOnly?: boolean;
|
|
48
|
+
/** Platform the generated bridge-view SQL is written for. Default `'sqlserver'`. */
|
|
49
|
+
provider?: BridgeViewProvider;
|
|
48
50
|
}
|
|
49
51
|
/**
|
|
50
52
|
* Detect transitive bridges for every hub × spoke pair whose graph distance
|
|
@@ -55,11 +57,15 @@ export interface TransitiveBridgeDetectorOptions {
|
|
|
55
57
|
* @param edges - FK edges (hard + soft) to walk.
|
|
56
58
|
* @param state - DatabaseDocumentation, used to look up spoke PKs.
|
|
57
59
|
*/
|
|
60
|
+
export declare function DetectTransitiveBridges(organicKeyClusters: OrganicKeyCluster[], edges: FKEdge[], state: DatabaseDocumentation, opts?: TransitiveBridgeDetectorOptions): TransitiveBridgeFinding[];
|
|
61
|
+
/** @deprecated Use {@link DetectTransitiveBridges}. */
|
|
58
62
|
export declare function detectTransitiveBridges(organicKeyClusters: OrganicKeyCluster[], edges: FKEdge[], state: DatabaseDocumentation, opts?: TransitiveBridgeDetectorOptions): TransitiveBridgeFinding[];
|
|
59
63
|
/**
|
|
60
64
|
* Pull FK edges out of state.json's keyDetection.discovered.foreignKeys block
|
|
61
65
|
* AND from any schema-declared hard FKs in the dependencies array. Returns the
|
|
62
66
|
* combined set ready for the walker.
|
|
63
67
|
*/
|
|
68
|
+
export declare function CollectFKEdgesFromState(state: DatabaseDocumentation): FKEdge[];
|
|
69
|
+
/** @deprecated Use {@link CollectFKEdgesFromState}. */
|
|
64
70
|
export declare function collectFKEdgesFromState(state: DatabaseDocumentation): FKEdge[];
|
|
65
71
|
//# sourceMappingURL=TransitiveBridgeDetector.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TransitiveBridgeDetector.d.ts","sourceRoot":"","sources":["../../src/discovery/TransitiveBridgeDetector.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,OAAO,EAAmB,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAC7D,OAAO,EAAsB,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;
|
|
1
|
+
{"version":3,"file":"TransitiveBridgeDetector.d.ts","sourceRoot":"","sources":["../../src/discovery/TransitiveBridgeDetector.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,OAAO,EAAmB,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAC7D,OAAO,EAAsB,mBAAmB,EAAE,kBAAkB,EAAE,MAAM,6BAA6B,CAAC;AAC1G,OAAO,EAAE,iBAAiB,EAAiB,MAAM,0BAA0B,CAAC;AAC5E,OAAO,EAAE,qBAAqB,EAAuB,MAAM,mBAAmB,CAAC;AAE/E,8DAA8D;AAC9D,MAAM,WAAW,uBAAuB;IACpC,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,cAAc,EAAE,MAAM,CAAC;IACvB,IAAI,EAAE,mBAAmB,CAAC;IAC1B,UAAU,EAAE,MAAM,CAAC;IACnB,cAAc,EAAE,MAAM,CAAC;IACvB,6GAA6G;IAC7G,UAAU,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,+BAA+B;IAC5C,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,wEAAwE;IACxE,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,oFAAoF;IACpF,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,oFAAoF;IACpF,QAAQ,CAAC,EAAE,kBAAkB,CAAC;CACjC;AAUD;;;;;;;;GAQG;AACH,wBAAgB,uBAAuB,CACnC,kBAAkB,EAAE,iBAAiB,EAAE,EACvC,KAAK,EAAE,MAAM,EAAE,EACf,KAAK,EAAE,qBAAqB,EAC5B,IAAI,GAAE,+BAAoC,GAC3C,uBAAuB,EAAE,CAqG3B;AAED,uDAAuD;AACvD,wBAAgB,uBAAuB,CACnC,kBAAkB,EAAE,iBAAiB,EAAE,EACvC,KAAK,EAAE,MAAM,EAAE,EACf,KAAK,EAAE,qBAAqB,EAC5B,IAAI,GAAE,+BAAoC,GAC3C,uBAAuB,EAAE,CAE3B;AAeD;;;;GAIG;AACH,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,qBAAqB,GAAG,MAAM,EAAE,CAqF9E;AAED,uDAAuD;AACvD,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,qBAAqB,GAAG,MAAM,EAAE,CAE9E"}
|
|
@@ -20,14 +20,15 @@
|
|
|
20
20
|
* - Spoke PK is resolved from state.json. Tables without a single-column PK
|
|
21
21
|
* are skipped (composite-PK bridge join is future work).
|
|
22
22
|
*/
|
|
23
|
-
import {
|
|
24
|
-
import {
|
|
25
|
-
import {
|
|
23
|
+
import { FindBridgePaths } from './FKGraphWalker.js';
|
|
24
|
+
import { GenerateBridgeView } from './BridgeViewSQLGenerator.js';
|
|
25
|
+
import { MemberColumns } from '../types/organic-keys.js';
|
|
26
26
|
const DEFAULTS = {
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
27
|
+
MaxHops: 3,
|
|
28
|
+
MinSoftFKConfidence: 0.6,
|
|
29
|
+
MinPathConfidence: 0.7,
|
|
30
|
+
KeepShortestOnly: true,
|
|
31
|
+
provider: 'sqlserver',
|
|
31
32
|
};
|
|
32
33
|
/**
|
|
33
34
|
* Detect transitive bridges for every hub × spoke pair whose graph distance
|
|
@@ -38,12 +39,14 @@ const DEFAULTS = {
|
|
|
38
39
|
* @param edges - FK edges (hard + soft) to walk.
|
|
39
40
|
* @param state - DatabaseDocumentation, used to look up spoke PKs.
|
|
40
41
|
*/
|
|
41
|
-
export function
|
|
42
|
-
|
|
42
|
+
export function DetectTransitiveBridges(organicKeyClusters, edges, state, opts = {}) {
|
|
43
|
+
// `?? DEFAULTS.provider`: runStructuralPhase passes `{ provider }` with an optional provider,
|
|
44
|
+
// and a spread of an explicit `undefined` would overwrite the default.
|
|
45
|
+
const o = { ...DEFAULTS, ...opts, provider: opts.provider ?? DEFAULTS.provider };
|
|
43
46
|
const hubsByKey = new Map();
|
|
44
47
|
for (const cluster of organicKeyClusters) {
|
|
45
48
|
for (const member of cluster.members) {
|
|
46
|
-
const cols =
|
|
49
|
+
const cols = MemberColumns(member);
|
|
47
50
|
const k = `${member.schema}.${member.table}.${cols.join(',')}`;
|
|
48
51
|
if (hubsByKey.has(k))
|
|
49
52
|
continue;
|
|
@@ -71,51 +74,51 @@ export function detectTransitiveBridges(organicKeyClusters, edges, state, opts =
|
|
|
71
74
|
for (const h of hubsByKey.values()) {
|
|
72
75
|
hubsForWalker.push({ schema: h.schema, table: h.table, keyField: h.keyFields[0] });
|
|
73
76
|
}
|
|
74
|
-
const allPaths =
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
77
|
+
const allPaths = FindBridgePaths(edges, hubsForWalker, allTables, {
|
|
78
|
+
MaxHops: o.MaxHops,
|
|
79
|
+
MinSoftFKConfidence: o.MinSoftFKConfidence,
|
|
80
|
+
PruneCycles: true,
|
|
78
81
|
});
|
|
79
82
|
// ─── 4. For each path, materialize the bridge view ─────────────────────
|
|
80
83
|
const findings = [];
|
|
81
84
|
for (const path of allPaths) {
|
|
82
|
-
if (path.
|
|
85
|
+
if (path.PathConfidence < o.MinPathConfidence)
|
|
83
86
|
continue;
|
|
84
|
-
const spokeKey = `${path.
|
|
87
|
+
const spokeKey = `${path.SpokeSchema}.${path.SpokeTable}`;
|
|
85
88
|
const spokePK = spokePKByKey.get(spokeKey);
|
|
86
89
|
if (!spokePK)
|
|
87
90
|
continue; // skip composite-PK spokes for now
|
|
88
91
|
// Resolve the originating hub entry to recover the full keyFields tuple + concept.
|
|
89
|
-
const hubMatch = Array.from(hubsByKey.values()).find((h) => h.schema === path.
|
|
92
|
+
const hubMatch = Array.from(hubsByKey.values()).find((h) => h.schema === path.HubSchema && h.table === path.HubTable && h.keyFields[0] === path.HubKeyField);
|
|
90
93
|
if (!hubMatch)
|
|
91
94
|
continue;
|
|
92
|
-
const view =
|
|
95
|
+
const view = GenerateBridgeView(path, spokePK, { provider: o.provider });
|
|
93
96
|
findings.push({
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
view,
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
97
|
+
HubSchema: hubMatch.schema,
|
|
98
|
+
HubTable: hubMatch.table,
|
|
99
|
+
HubKeyFields: hubMatch.keyFields,
|
|
100
|
+
SpokeSchema: path.SpokeSchema,
|
|
101
|
+
SpokeTable: path.SpokeTable,
|
|
102
|
+
SpokeJoinField: spokePK,
|
|
103
|
+
View: view,
|
|
104
|
+
PathLength: path.PathLength,
|
|
105
|
+
PathConfidence: path.PathConfidence,
|
|
106
|
+
HubConcept: hubMatch.concept,
|
|
104
107
|
});
|
|
105
108
|
}
|
|
106
109
|
// ─── 5. Dedupe per (hub, spoke) — keep shortest, then highest-confidence ─
|
|
107
|
-
if (o.
|
|
110
|
+
if (o.KeepShortestOnly) {
|
|
108
111
|
const byPair = new Map();
|
|
109
112
|
for (const f of findings) {
|
|
110
|
-
const k = `${f.
|
|
113
|
+
const k = `${f.HubSchema}.${f.HubTable}::${f.SpokeSchema}.${f.SpokeTable}::${f.HubKeyFields[0]}`;
|
|
111
114
|
const existing = byPair.get(k);
|
|
112
115
|
if (!existing) {
|
|
113
116
|
byPair.set(k, f);
|
|
114
117
|
continue;
|
|
115
118
|
}
|
|
116
|
-
if (f.
|
|
119
|
+
if (f.PathLength < existing.PathLength)
|
|
117
120
|
byPair.set(k, f);
|
|
118
|
-
else if (f.
|
|
121
|
+
else if (f.PathLength === existing.PathLength && f.PathConfidence > existing.PathConfidence) {
|
|
119
122
|
byPair.set(k, f);
|
|
120
123
|
}
|
|
121
124
|
}
|
|
@@ -123,6 +126,10 @@ export function detectTransitiveBridges(organicKeyClusters, edges, state, opts =
|
|
|
123
126
|
}
|
|
124
127
|
return findings;
|
|
125
128
|
}
|
|
129
|
+
/** @deprecated Use {@link DetectTransitiveBridges}. */
|
|
130
|
+
export function detectTransitiveBridges(organicKeyClusters, edges, state, opts = {}) {
|
|
131
|
+
return DetectTransitiveBridges(organicKeyClusters, edges, state, opts);
|
|
132
|
+
}
|
|
126
133
|
// ─── Helpers ────────────────────────────────────────────────────────────────
|
|
127
134
|
/**
|
|
128
135
|
* Pick the single-column PK from a table's column list. Returns null when no PK
|
|
@@ -140,7 +147,7 @@ function pickSinglePK(columns) {
|
|
|
140
147
|
* AND from any schema-declared hard FKs in the dependencies array. Returns the
|
|
141
148
|
* combined set ready for the walker.
|
|
142
149
|
*/
|
|
143
|
-
export function
|
|
150
|
+
export function CollectFKEdgesFromState(state) {
|
|
144
151
|
const out = [];
|
|
145
152
|
// Hard FKs from the FK-SOURCE side via `dependsOn`. Each entry on table
|
|
146
153
|
// T's `dependsOn` array describes an FK that T holds pointing at another
|
|
@@ -158,13 +165,13 @@ export function collectFKEdgesFromState(state) {
|
|
|
158
165
|
const deps = table.dependsOn ?? [];
|
|
159
166
|
for (const d of deps) {
|
|
160
167
|
out.push({
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
+
SourceSchema: schema.name,
|
|
169
|
+
SourceTable: table.name,
|
|
170
|
+
SourceColumn: d.column,
|
|
171
|
+
TargetSchema: d.schema,
|
|
172
|
+
TargetTable: d.table,
|
|
173
|
+
TargetColumn: d.referencedColumn,
|
|
174
|
+
Kind: 'hard',
|
|
168
175
|
confidence: 1,
|
|
169
176
|
});
|
|
170
177
|
}
|
|
@@ -185,13 +192,13 @@ export function collectFKEdgesFromState(state) {
|
|
|
185
192
|
typeof f.targetColumn === 'string' &&
|
|
186
193
|
typeof f.confidence === 'number') {
|
|
187
194
|
out.push({
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
+
SourceSchema: f.schemaName,
|
|
196
|
+
SourceTable: f.sourceTable,
|
|
197
|
+
SourceColumn: f.sourceColumn,
|
|
198
|
+
TargetSchema: f.targetSchema,
|
|
199
|
+
TargetTable: f.targetTable,
|
|
200
|
+
TargetColumn: f.targetColumn,
|
|
201
|
+
Kind: 'soft',
|
|
195
202
|
confidence: f.confidence / 100, // state stores 0-100
|
|
196
203
|
});
|
|
197
204
|
}
|
|
@@ -214,7 +221,11 @@ export function collectFKEdgesFromState(state) {
|
|
|
214
221
|
}
|
|
215
222
|
}
|
|
216
223
|
const exists = (s, t, c) => validColumns.has(`${s}.${t}.${c}`.toLowerCase());
|
|
217
|
-
return deduped.filter((e) => exists(e.
|
|
224
|
+
return deduped.filter((e) => exists(e.SourceSchema, e.SourceTable, e.SourceColumn) && exists(e.TargetSchema, e.TargetTable, e.TargetColumn));
|
|
225
|
+
}
|
|
226
|
+
/** @deprecated Use {@link CollectFKEdgesFromState}. */
|
|
227
|
+
export function collectFKEdgesFromState(state) {
|
|
228
|
+
return CollectFKEdgesFromState(state);
|
|
218
229
|
}
|
|
219
230
|
/**
|
|
220
231
|
* Dedupe FK edges by (source, target) column pair. When duplicates exist,
|
|
@@ -224,15 +235,15 @@ export function collectFKEdgesFromState(state) {
|
|
|
224
235
|
function dedupEdges(edges) {
|
|
225
236
|
const byKey = new Map();
|
|
226
237
|
for (const e of edges) {
|
|
227
|
-
const k = `${e.
|
|
238
|
+
const k = `${e.SourceSchema}.${e.SourceTable}.${e.SourceColumn}->${e.TargetSchema}.${e.TargetTable}.${e.TargetColumn}`;
|
|
228
239
|
const existing = byKey.get(k);
|
|
229
240
|
if (!existing) {
|
|
230
241
|
byKey.set(k, e);
|
|
231
242
|
continue;
|
|
232
243
|
}
|
|
233
|
-
if (existing.
|
|
244
|
+
if (existing.Kind === 'hard')
|
|
234
245
|
continue;
|
|
235
|
-
if (e.
|
|
246
|
+
if (e.Kind === 'hard') {
|
|
236
247
|
byKey.set(k, e);
|
|
237
248
|
continue;
|
|
238
249
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TransitiveBridgeDetector.js","sourceRoot":"","sources":["../../src/discovery/TransitiveBridgeDetector.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,OAAO,EAAE,eAAe,EAAU,MAAM,oBAAoB,CAAC;AAC7D,OAAO,EAAE,kBAAkB,
|
|
1
|
+
{"version":3,"file":"TransitiveBridgeDetector.js","sourceRoot":"","sources":["../../src/discovery/TransitiveBridgeDetector.ts"],"names":[],"mappings":"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"}
|
|
@@ -25,7 +25,8 @@ export declare abstract class BaseAutoDocDriver {
|
|
|
25
25
|
/**
|
|
26
26
|
* Get all schemas with filtered tables
|
|
27
27
|
*/
|
|
28
|
-
abstract getSchemas(
|
|
28
|
+
abstract getSchemas(// case-violation-ok-legacy-back-compat: abstract member — there is nothing for a stub to delegate to
|
|
29
|
+
schemaFilter: AutoDocSchemaFilter, tableFilter: AutoDocTableFilter): Promise<AutoDocSchema[]>;
|
|
29
30
|
/**
|
|
30
31
|
* Get all tables in a schema
|
|
31
32
|
*/
|
|
@@ -38,11 +39,13 @@ export declare abstract class BaseAutoDocDriver {
|
|
|
38
39
|
* Get existing descriptions from database metadata
|
|
39
40
|
* (e.g., MS_Description for SQL Server, COMMENT for MySQL/PostgreSQL)
|
|
40
41
|
*/
|
|
41
|
-
abstract getExistingDescriptions(
|
|
42
|
+
abstract getExistingDescriptions(// case-violation-ok-legacy-back-compat: abstract member — there is nothing for a stub to delegate to
|
|
43
|
+
schemaName: string, tableName: string): Promise<AutoDocExistingDescription[]>;
|
|
42
44
|
/**
|
|
43
45
|
* Get column statistics (cardinality, null count, etc.)
|
|
44
46
|
*/
|
|
45
|
-
abstract getColumnStatistics(
|
|
47
|
+
abstract getColumnStatistics(// case-violation-ok-legacy-back-compat: abstract member — there is nothing for a stub to delegate to
|
|
48
|
+
schemaName: string, tableName: string, columnName: string, dataType: string, cardinalityThreshold: number, sampleSize: number): Promise<AutoDocColumnStatistics>;
|
|
46
49
|
/**
|
|
47
50
|
* Get distinct value count for a column
|
|
48
51
|
*/
|
|
@@ -57,16 +60,20 @@ export declare abstract class BaseAutoDocDriver {
|
|
|
57
60
|
/**
|
|
58
61
|
* Get sample values from a column
|
|
59
62
|
*/
|
|
60
|
-
abstract getSampleValues(
|
|
63
|
+
abstract getSampleValues(// case-violation-ok-legacy-back-compat: abstract member — there is nothing for a stub to delegate to
|
|
64
|
+
schemaName: string, tableName: string, columnName: string, sampleSize: number): Promise<any[]>;
|
|
61
65
|
/**
|
|
62
66
|
* Get simplified column statistics for discovery
|
|
63
67
|
* Uses existing getColumnStatistics but with simpler parameters
|
|
64
68
|
*/
|
|
69
|
+
GetColumnStatisticsForDiscovery(schemaName: string, tableName: string, columnName: string, columnType: string, maxSampleSize?: number): Promise<import('../types/discovery.js').ColumnStatistics>;
|
|
70
|
+
/** @deprecated Use {@link GetColumnStatisticsForDiscovery}. */
|
|
65
71
|
getColumnStatisticsForDiscovery(schemaName: string, tableName: string, columnName: string, columnType: string, maxSampleSize?: number): Promise<import('../types/discovery.js').ColumnStatistics>;
|
|
66
72
|
/**
|
|
67
73
|
* Get column information (for FK detection)
|
|
68
74
|
*/
|
|
69
|
-
abstract getColumnInfo(
|
|
75
|
+
abstract getColumnInfo(// case-violation-ok-legacy-back-compat: abstract member — there is nothing for a stub to delegate to
|
|
76
|
+
schemaName: string, tableName: string, columnName: string): Promise<{
|
|
70
77
|
name: string;
|
|
71
78
|
type: string;
|
|
72
79
|
nullable: boolean;
|
|
@@ -75,19 +82,22 @@ export declare abstract class BaseAutoDocDriver {
|
|
|
75
82
|
* Test value overlap between two columns (for FK detection)
|
|
76
83
|
* Returns percentage of source values that exist in target (0-1)
|
|
77
84
|
*/
|
|
78
|
-
abstract testValueOverlap(
|
|
85
|
+
abstract testValueOverlap(// case-violation-ok-legacy-back-compat: abstract member — there is nothing for a stub to delegate to
|
|
86
|
+
sourceTable: string, // format: "schema.table"
|
|
79
87
|
sourceColumn: string, targetTable: string, // format: "schema.table"
|
|
80
88
|
targetColumn: string, sampleSize: number): Promise<number>;
|
|
81
89
|
/**
|
|
82
90
|
* Check if a combination of columns is unique (for composite PK detection)
|
|
83
91
|
*/
|
|
84
|
-
abstract checkColumnCombinationUniqueness(
|
|
92
|
+
abstract checkColumnCombinationUniqueness(// case-violation-ok-legacy-back-compat: abstract member — there is nothing for a stub to delegate to
|
|
93
|
+
schemaName: string, tableName: string, columnNames: string[], sampleSize: number): Promise<boolean>;
|
|
85
94
|
/**
|
|
86
95
|
* Execute a raw SQL query
|
|
87
96
|
* @param query SQL query to execute
|
|
88
97
|
* @param maxRetries Number of retry attempts for transient errors
|
|
89
98
|
*/
|
|
90
|
-
abstract executeQuery<T = any>(
|
|
99
|
+
abstract executeQuery<T = any>(// case-violation-ok-legacy-back-compat: abstract member — there is nothing for a stub to delegate to
|
|
100
|
+
query: string, maxRetries?: number): Promise<AutoDocQueryResult<T>>;
|
|
91
101
|
/**
|
|
92
102
|
* Escape identifier (schema, table, column names)
|
|
93
103
|
* Each provider has different quoting rules
|
|
@@ -127,6 +137,8 @@ export declare abstract class BaseAutoDocDriver {
|
|
|
127
137
|
/**
|
|
128
138
|
* Get database provider name
|
|
129
139
|
*/
|
|
140
|
+
GetProviderName(): string;
|
|
141
|
+
/** @deprecated Use {@link GetProviderName}. */
|
|
130
142
|
getProviderName(): string;
|
|
131
143
|
}
|
|
132
144
|
//# sourceMappingURL=BaseAutoDocDriver.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BaseAutoDocDriver.d.ts","sourceRoot":"","sources":["../../src/drivers/BaseAutoDocDriver.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EACL,aAAa,EACb,YAAY,EACZ,aAAa,EACb,uBAAuB,EACvB,kBAAkB,EAClB,2BAA2B,EAC3B,mBAAmB,EACnB,kBAAkB,EAClB,uBAAuB,EACvB,0BAA0B,EAC3B,MAAM,oBAAoB,CAAC;AAE5B;;;GAGG;AACH,8BAAsB,iBAAiB;IACzB,SAAS,CAAC,MAAM,EAAE,uBAAuB;gBAA/B,MAAM,EAAE,uBAAuB;IAMrD;;OAEG;aACa,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAExC;;OAEG;aACa,IAAI,IAAI,OAAO,CAAC,2BAA2B,CAAC;IAE5D;;OAEG;aACa,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAMtC;;OAEG;aACa,UAAU,
|
|
1
|
+
{"version":3,"file":"BaseAutoDocDriver.d.ts","sourceRoot":"","sources":["../../src/drivers/BaseAutoDocDriver.ts"],"names":[],"mappings":"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"}
|
|
@@ -17,7 +17,7 @@ export class BaseAutoDocDriver {
|
|
|
17
17
|
* Get simplified column statistics for discovery
|
|
18
18
|
* Uses existing getColumnStatistics but with simpler parameters
|
|
19
19
|
*/
|
|
20
|
-
async
|
|
20
|
+
async GetColumnStatisticsForDiscovery(schemaName, tableName, columnName, columnType, maxSampleSize = 1000) {
|
|
21
21
|
const stats = await this.getColumnStatistics(schemaName, tableName, columnName, columnType, 100, // cardinalityThreshold
|
|
22
22
|
maxSampleSize);
|
|
23
23
|
// Calculate total rows from null percentage if available
|
|
@@ -36,6 +36,10 @@ export class BaseAutoDocDriver {
|
|
|
36
36
|
sampleValues: stats.sampleValues || []
|
|
37
37
|
};
|
|
38
38
|
}
|
|
39
|
+
/** @deprecated Use {@link GetColumnStatisticsForDiscovery}. */
|
|
40
|
+
async getColumnStatisticsForDiscovery(schemaName, tableName, columnName, columnType, maxSampleSize = 1000) {
|
|
41
|
+
return this.GetColumnStatisticsForDiscovery(schemaName, tableName, columnName, columnType, maxSampleSize);
|
|
42
|
+
}
|
|
39
43
|
/**
|
|
40
44
|
* Check if data type is numeric
|
|
41
45
|
*/
|
|
@@ -112,8 +116,12 @@ export class BaseAutoDocDriver {
|
|
|
112
116
|
/**
|
|
113
117
|
* Get database provider name
|
|
114
118
|
*/
|
|
115
|
-
|
|
119
|
+
GetProviderName() {
|
|
116
120
|
return this.config.provider;
|
|
117
121
|
}
|
|
122
|
+
/** @deprecated Use {@link GetProviderName}. */
|
|
123
|
+
getProviderName() {
|
|
124
|
+
return this.GetProviderName();
|
|
125
|
+
}
|
|
118
126
|
}
|
|
119
127
|
//# sourceMappingURL=BaseAutoDocDriver.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BaseAutoDocDriver.js","sourceRoot":"","sources":["../../src/drivers/BaseAutoDocDriver.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"BaseAutoDocDriver.js","sourceRoot":"","sources":["../../src/drivers/BaseAutoDocDriver.ts"],"names":[],"mappings":"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"}
|
|
@@ -20,23 +20,23 @@ import { DatabaseDocumentation } from '../types/state.js';
|
|
|
20
20
|
import { DetectedOrganicKeysOutput } from '../discovery/OrganicKeyTranslator.js';
|
|
21
21
|
export interface AdditionalSchemaInfoOptions {
|
|
22
22
|
/** Only include AI-discovered keys, not keys already present in the database schema */
|
|
23
|
-
|
|
23
|
+
DiscoveredOnly?: boolean;
|
|
24
24
|
/** Minimum confidence (0-100) for discovered keys to be included */
|
|
25
|
-
|
|
25
|
+
ConfidenceThreshold?: number;
|
|
26
26
|
/** Only include tables/columns with user-approved descriptions */
|
|
27
|
-
|
|
27
|
+
ApprovedOnly?: boolean;
|
|
28
28
|
/** Only include confirmed candidates (status === 'confirmed') from discovery */
|
|
29
|
-
|
|
29
|
+
ConfirmedOnly?: boolean;
|
|
30
30
|
/** Minimum confidence (0-100) for value-list / enum entries. Default 85. */
|
|
31
|
-
|
|
31
|
+
ValueListConfidenceThreshold?: number;
|
|
32
32
|
/** If true, skip emitting Fields[] entirely. Default false. */
|
|
33
|
-
|
|
33
|
+
ExcludeValueLists?: boolean;
|
|
34
34
|
/**
|
|
35
35
|
* Organic-key detection output (per-schema/per-table OrganicKeys). When present,
|
|
36
36
|
* merged into each table's OrganicKeys[] so CodeGen's processOrganicKeyConfig
|
|
37
37
|
* writes EntityOrganicKey / EntityOrganicKeyRelatedEntity metadata.
|
|
38
38
|
*/
|
|
39
|
-
|
|
39
|
+
OrganicKeys?: DetectedOrganicKeysOutput;
|
|
40
40
|
}
|
|
41
41
|
/** Per-column value-list entry emitted in Fields[] when enum detection is active */
|
|
42
42
|
export interface FieldValueListEntry {
|
|
@@ -63,6 +63,8 @@ export declare class AdditionalSchemaInfoGenerator {
|
|
|
63
63
|
* When discoveredOnly is true, only source (2) is included — useful when
|
|
64
64
|
* CodeGen already handles the hard constraints from the database.
|
|
65
65
|
*/
|
|
66
|
+
Generate(state: DatabaseDocumentation, options?: AdditionalSchemaInfoOptions): string;
|
|
67
|
+
/** @deprecated Use {@link Generate}. */
|
|
66
68
|
generate(state: DatabaseDocumentation, options?: AdditionalSchemaInfoOptions): string;
|
|
67
69
|
/**
|
|
68
70
|
* Look up the organic keys detected for a specific schema.table from the
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AdditionalSchemaInfoGenerator.d.ts","sourceRoot":"","sources":["../../src/generators/AdditionalSchemaInfoGenerator.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,OAAO,EAAE,qBAAqB,EAAuD,MAAM,mBAAmB,CAAC;AAE/G,OAAO,EAAE,yBAAyB,EAAoB,MAAM,sCAAsC,CAAC;AAEnG,MAAM,WAAW,2BAA2B;IAC1C,uFAAuF;IACvF,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,oEAAoE;IACpE,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,kEAAkE;IAClE,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,gFAAgF;IAChF,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,4EAA4E;IAC5E,4BAA4B,CAAC,EAAE,MAAM,CAAC;IACtC,+DAA+D;IAC/D,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B;;;;OAIG;IACH,WAAW,CAAC,EAAE,yBAAyB,CAAC;CACzC;AAeD,oFAAoF;AACpF,MAAM,WAAW,mBAAmB;IAClC,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,MAAM,GAAG,iBAAiB,CAAC;IAC1C,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,iEAAiE;IACjE,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,mFAAmF;IACnF,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAyBD,qBAAa,6BAA6B;IACxC;;;;;;;;;;;;;OAaG;IACI,QAAQ,CACb,KAAK,EAAE,qBAAqB,EAC5B,OAAO,GAAE,2BAAgC,GACxC,MAAM;IA4DT;;;OAGG;IACH,OAAO,CAAC,sBAAsB;IAY9B;;;;;;;;;;OAUG;IACH,OAAO,CAAC,sBAAsB;IAmB9B;;;;;;;OAOG;IACH,OAAO,CAAC,oBAAoB;IA8B5B;;;OAGG;IACH,OAAO,CAAC,cAAc;IA8CtB;;;;OAIG;IACH,OAAO,CAAC,sBAAsB;IA4B9B;;OAEG;IACH,OAAO,CAAC,sBAAsB;IAa9B;;OAEG;IACH,OAAO,CAAC,sBAAsB;IAwC9B;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAyB5B;;OAEG;IACH,OAAO,CAAC,oBAAoB;IA2B5B;;;OAGG;IACH,OAAO,CAAC,gBAAgB;IAqBxB;;;OAGG;IACH,OAAO,CAAC,gBAAgB;CAoBzB"}
|
|
1
|
+
{"version":3,"file":"AdditionalSchemaInfoGenerator.d.ts","sourceRoot":"","sources":["../../src/generators/AdditionalSchemaInfoGenerator.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,OAAO,EAAE,qBAAqB,EAAuD,MAAM,mBAAmB,CAAC;AAE/G,OAAO,EAAE,yBAAyB,EAAoB,MAAM,sCAAsC,CAAC;AAEnG,MAAM,WAAW,2BAA2B;IAC1C,uFAAuF;IACvF,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,oEAAoE;IACpE,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,kEAAkE;IAClE,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,gFAAgF;IAChF,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,4EAA4E;IAC5E,4BAA4B,CAAC,EAAE,MAAM,CAAC;IACtC,+DAA+D;IAC/D,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B;;;;OAIG;IACH,WAAW,CAAC,EAAE,yBAAyB,CAAC;CACzC;AAeD,oFAAoF;AACpF,MAAM,WAAW,mBAAmB;IAClC,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,MAAM,GAAG,iBAAiB,CAAC;IAC1C,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,iEAAiE;IACjE,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,mFAAmF;IACnF,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAyBD,qBAAa,6BAA6B;IACxC;;;;;;;;;;;;;OAaG;IACI,QAAQ,CACb,KAAK,EAAE,qBAAqB,EAC5B,OAAO,GAAE,2BAAgC,GACxC,MAAM;IA4DT,wCAAwC;IACjC,QAAQ,CACb,KAAK,EAAE,qBAAqB,EAC5B,OAAO,GAAE,2BAAgC,GACxC,MAAM;IAIT;;;OAGG;IACH,OAAO,CAAC,sBAAsB;IAY9B;;;;;;;;;;OAUG;IACH,OAAO,CAAC,sBAAsB;IAmB9B;;;;;;;OAOG;IACH,OAAO,CAAC,oBAAoB;IA8B5B;;;OAGG;IACH,OAAO,CAAC,cAAc;IA8CtB;;;;OAIG;IACH,OAAO,CAAC,sBAAsB;IA4B9B;;OAEG;IACH,OAAO,CAAC,sBAAsB;IAa9B;;OAEG;IACH,OAAO,CAAC,sBAAsB;IAwC9B;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAyB5B;;OAEG;IACH,OAAO,CAAC,oBAAoB;IA2B5B;;;OAGG;IACH,OAAO,CAAC,gBAAgB;IAqBxB;;;OAGG;IACH,OAAO,CAAC,gBAAgB;CAoBzB"}
|
|
@@ -31,24 +31,24 @@ export class AdditionalSchemaInfoGenerator {
|
|
|
31
31
|
* When discoveredOnly is true, only source (2) is included — useful when
|
|
32
32
|
* CodeGen already handles the hard constraints from the database.
|
|
33
33
|
*/
|
|
34
|
-
|
|
34
|
+
Generate(state, options = {}) {
|
|
35
35
|
const result = {
|
|
36
36
|
Schemas: this.generateSchemaNameInfo(state),
|
|
37
37
|
};
|
|
38
|
-
const threshold = options.
|
|
38
|
+
const threshold = options.ConfidenceThreshold ?? 0;
|
|
39
39
|
// Collect discovered candidates from key detection phase
|
|
40
|
-
const discoveredPKs = this.getDiscoveredPKs(state, threshold, options.
|
|
41
|
-
const discoveredFKs = this.getDiscoveredFKs(state, threshold, options.
|
|
40
|
+
const discoveredPKs = this.getDiscoveredPKs(state, threshold, options.ConfirmedOnly ?? false);
|
|
41
|
+
const discoveredFKs = this.getDiscoveredFKs(state, threshold, options.ConfirmedOnly ?? false);
|
|
42
42
|
for (const schema of state.schemas) {
|
|
43
43
|
const tables = [];
|
|
44
44
|
for (const table of schema.tables) {
|
|
45
|
-
if (options.
|
|
45
|
+
if (options.ApprovedOnly && !table.userApproved) {
|
|
46
46
|
continue;
|
|
47
47
|
}
|
|
48
|
-
const tableInfo = this.buildTableInfo(schema, table, discoveredPKs, discoveredFKs, options.
|
|
48
|
+
const tableInfo = this.buildTableInfo(schema, table, discoveredPKs, discoveredFKs, options.DiscoveredOnly ?? false, options.ValueListConfidenceThreshold ?? 85, options.ExcludeValueLists ?? false, options.ConfirmedOnly ?? false);
|
|
49
49
|
if (tableInfo) {
|
|
50
50
|
// Attach organic keys for this table when detection output is present.
|
|
51
|
-
const orgKeys = this.getOrganicKeysForTable(options.
|
|
51
|
+
const orgKeys = this.getOrganicKeysForTable(options.OrganicKeys, schema.name, table.name);
|
|
52
52
|
if (orgKeys.length > 0) {
|
|
53
53
|
tableInfo.OrganicKeys = orgKeys;
|
|
54
54
|
}
|
|
@@ -57,12 +57,12 @@ export class AdditionalSchemaInfoGenerator {
|
|
|
57
57
|
}
|
|
58
58
|
// A table may have organic keys even if buildTableInfo returned null (no
|
|
59
59
|
// soft PK/FK and no value lists). Emit a minimal entry so they aren't lost.
|
|
60
|
-
if (options.
|
|
60
|
+
if (options.OrganicKeys) {
|
|
61
61
|
const emittedTables = new Set(tables.map((t) => t.TableName));
|
|
62
62
|
for (const table of schema.tables) {
|
|
63
63
|
if (emittedTables.has(table.name))
|
|
64
64
|
continue;
|
|
65
|
-
const orgKeys = this.getOrganicKeysForTable(options.
|
|
65
|
+
const orgKeys = this.getOrganicKeysForTable(options.OrganicKeys, schema.name, table.name);
|
|
66
66
|
if (orgKeys.length > 0) {
|
|
67
67
|
tables.push({ TableName: table.name, OrganicKeys: orgKeys });
|
|
68
68
|
}
|
|
@@ -74,6 +74,10 @@ export class AdditionalSchemaInfoGenerator {
|
|
|
74
74
|
}
|
|
75
75
|
return JSON.stringify(result, null, 4);
|
|
76
76
|
}
|
|
77
|
+
/** @deprecated Use {@link Generate}. */
|
|
78
|
+
generate(state, options = {}) {
|
|
79
|
+
return this.Generate(state, options);
|
|
80
|
+
}
|
|
77
81
|
/**
|
|
78
82
|
* Look up the organic keys detected for a specific schema.table from the
|
|
79
83
|
* detector's per-schema/per-table output. Returns [] when none.
|