@memberjunction/core-entities-server 5.15.0 → 5.17.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.
Files changed (37) hide show
  1. package/dist/custom/MJQueryEntityServer.server.d.ts +10 -89
  2. package/dist/custom/MJQueryEntityServer.server.d.ts.map +1 -1
  3. package/dist/custom/MJQueryEntityServer.server.js +68 -1089
  4. package/dist/custom/MJQueryEntityServer.server.js.map +1 -1
  5. package/dist/custom/query-extraction/dialect.d.ts +23 -0
  6. package/dist/custom/query-extraction/dialect.d.ts.map +1 -0
  7. package/dist/custom/query-extraction/dialect.js +45 -0
  8. package/dist/custom/query-extraction/dialect.js.map +1 -0
  9. package/dist/custom/query-extraction/enrich.d.ts +51 -0
  10. package/dist/custom/query-extraction/enrich.d.ts.map +1 -0
  11. package/dist/custom/query-extraction/enrich.js +180 -0
  12. package/dist/custom/query-extraction/enrich.js.map +1 -0
  13. package/dist/custom/query-extraction/index.d.ts +9 -0
  14. package/dist/custom/query-extraction/index.d.ts.map +1 -0
  15. package/dist/custom/query-extraction/index.js +15 -0
  16. package/dist/custom/query-extraction/index.js.map +1 -0
  17. package/dist/custom/query-extraction/parse.d.ts +7 -0
  18. package/dist/custom/query-extraction/parse.d.ts.map +1 -0
  19. package/dist/custom/query-extraction/parse.js +13 -0
  20. package/dist/custom/query-extraction/parse.js.map +1 -0
  21. package/dist/custom/query-extraction/pipeline.d.ts +24 -0
  22. package/dist/custom/query-extraction/pipeline.d.ts.map +1 -0
  23. package/dist/custom/query-extraction/pipeline.js +101 -0
  24. package/dist/custom/query-extraction/pipeline.js.map +1 -0
  25. package/dist/custom/query-extraction/resolve.d.ts +110 -0
  26. package/dist/custom/query-extraction/resolve.d.ts.map +1 -0
  27. package/dist/custom/query-extraction/resolve.js +677 -0
  28. package/dist/custom/query-extraction/resolve.js.map +1 -0
  29. package/dist/custom/query-extraction/sync.d.ts +30 -0
  30. package/dist/custom/query-extraction/sync.d.ts.map +1 -0
  31. package/dist/custom/query-extraction/sync.js +456 -0
  32. package/dist/custom/query-extraction/sync.js.map +1 -0
  33. package/dist/custom/query-extraction/types.d.ts +114 -0
  34. package/dist/custom/query-extraction/types.d.ts.map +1 -0
  35. package/dist/custom/query-extraction/types.js +2 -0
  36. package/dist/custom/query-extraction/types.js.map +1 -0
  37. package/package.json +19 -19
@@ -0,0 +1,101 @@
1
+ import { Metadata } from "@memberjunction/core";
2
+ import { parseQuerySQL } from "./parse.js";
3
+ import { ResolveCompositionReferences, BuildPassthroughParams, MergePassthroughParams, ExtractEntityMetadataFromSQL, BuildFieldsForSelectStar, EnrichFieldTypesFromCompositions, EnrichFieldTypesFromEntityMetadata, } from "./resolve.js";
4
+ import { RunLLMEnrichment, MergeParametersWithLLM } from "./enrich.js";
5
+ import { SyncParameters, SyncFields, SyncEntities, SyncDependencies, RemoveAllRecords } from "./sync.js";
6
+ /**
7
+ * Runs the full query extraction pipeline:
8
+ * 1. PARSE — single-pass SQL analysis
9
+ * 2. RESOLVE — deterministic composition, parameter, field, and entity resolution
10
+ * 3. ENRICH — LLM fills in descriptions and sample values (best-effort)
11
+ * 4. MERGE — deterministic wins, LLM fills gaps
12
+ * 5. SYNC — parallel database writes
13
+ *
14
+ * Throws on invalid composition references (non-existent, non-Reusable, circular).
15
+ */
16
+ export async function RunExtractionPipeline(ctx) {
17
+ // ── STAGE 1: PARSE ──
18
+ const parseResult = parseQuerySQL(ctx.sql);
19
+ // ── STAGE 2: RESOLVE ──
20
+ const resolveResult = resolve(ctx, parseResult);
21
+ // ── STAGE 3: ENRICH (best-effort, non-fatal) ──
22
+ const llmResult = await RunLLMEnrichment(ctx.sql, resolveResult.entityMetadata, ctx.contextUser, ctx.metadataProvider);
23
+ // ── STAGE 4: MERGE ──
24
+ const { finalParams, finalFields } = merge(resolveResult, llmResult, parseResult, ctx);
25
+ // ── STAGE 5: SYNC (parallel DB writes) ──
26
+ await sync(ctx, finalParams, finalFields, resolveResult);
27
+ return {
28
+ usesTemplate: resolveResult.allDeterministicParams.length > 0,
29
+ };
30
+ }
31
+ /**
32
+ * Removes all extraction data for a query (parameters, fields, entities, dependencies, SQL records).
33
+ */
34
+ export async function CleanupQueryData(ctx) {
35
+ await Promise.all([
36
+ RemoveAllRecords(ctx.queryID, 'MJ: Query Parameters', ctx.contextUser, ctx.runViewProvider, ctx.isSaved),
37
+ RemoveAllRecords(ctx.queryID, 'MJ: Query Fields', ctx.contextUser, ctx.runViewProvider, ctx.isSaved),
38
+ RemoveAllRecords(ctx.queryID, 'MJ: Query Entities', ctx.contextUser, ctx.runViewProvider, ctx.isSaved),
39
+ RemoveAllRecords(ctx.queryID, 'MJ: Query Dependencies', ctx.contextUser, ctx.runViewProvider, ctx.isSaved),
40
+ RemoveAllRecords(ctx.queryID, 'MJ: Query SQLs', ctx.contextUser, ctx.runViewProvider, ctx.isSaved),
41
+ ]);
42
+ }
43
+ // ─── Internal stage helpers ──────────────────────────────────────────────────
44
+ function resolve(ctx, parseResult) {
45
+ const allQueries = Metadata.Provider.Queries;
46
+ const md = ctx.metadataProvider;
47
+ // Composition references
48
+ const resolvedCompositionRefs = ResolveCompositionReferences(ctx.sql, ctx.queryName, allQueries);
49
+ // Passthrough parameters
50
+ const { params: passthroughParams, contextMap: passthroughContext } = BuildPassthroughParams(resolvedCompositionRefs);
51
+ const allDeterministicParams = MergePassthroughParams(parseResult.deterministicParams, passthroughParams);
52
+ // Entity metadata (for LLM context and entity sync)
53
+ const entityMetadata = ExtractEntityMetadataFromSQL(ctx.sql, parseResult.tableRefs, md);
54
+ // Field resolution: SELECT * expansion or null
55
+ const selectStarFields = BuildFieldsForSelectStar(ctx.sql, parseResult.tableRefs, parseResult.selectColumns, md);
56
+ return {
57
+ resolvedCompositionRefs,
58
+ allDeterministicParams,
59
+ passthroughContext,
60
+ entityMetadata,
61
+ selectStarFields,
62
+ };
63
+ }
64
+ function merge(resolveResult, llmResult, parseResult, ctx) {
65
+ const md = ctx.metadataProvider;
66
+ // Parameters: merge deterministic + LLM
67
+ const finalParams = resolveResult.allDeterministicParams.length > 0
68
+ ? MergeParametersWithLLM(resolveResult.allDeterministicParams, llmResult, resolveResult.passthroughContext)
69
+ : null;
70
+ // Fields: use SELECT * expansion or LLM select clause, then enrich
71
+ const rawFields = resolveResult.selectStarFields
72
+ ?? (llmResult?.selectClause && Array.isArray(llmResult.selectClause) && llmResult.selectClause.length > 0
73
+ ? llmResult.selectClause
74
+ : null);
75
+ const finalFields = rawFields
76
+ ? EnrichFieldTypesFromEntityMetadata(EnrichFieldTypesFromCompositions(rawFields, resolveResult.resolvedCompositionRefs, parseResult.selectColumns), parseResult.selectColumns, parseResult.tableRefs, md)
77
+ : null;
78
+ return { finalParams, finalFields };
79
+ }
80
+ async function sync(ctx, finalParams, finalFields, resolveResult) {
81
+ const syncPromises = [];
82
+ // Parameters
83
+ if (finalParams) {
84
+ syncPromises.push(SyncParameters(ctx.queryID, finalParams, ctx.contextUser, ctx.metadataProvider, ctx.runViewProvider, ctx.isSaved));
85
+ }
86
+ else {
87
+ syncPromises.push(RemoveAllRecords(ctx.queryID, 'MJ: Query Parameters', ctx.contextUser, ctx.runViewProvider, ctx.isSaved));
88
+ }
89
+ // Fields
90
+ if (finalFields) {
91
+ syncPromises.push(SyncFields(ctx.queryID, finalFields, ctx.contextUser, ctx.metadataProvider, ctx.runViewProvider, ctx.isSaved));
92
+ }
93
+ // Entities
94
+ if (resolveResult.entityMetadata.length > 0) {
95
+ syncPromises.push(SyncEntities(ctx.queryID, resolveResult.entityMetadata, ctx.contextUser, ctx.metadataProvider, ctx.runViewProvider, ctx.isSaved));
96
+ }
97
+ // Dependencies
98
+ syncPromises.push(SyncDependencies(ctx.queryID, resolveResult.resolvedCompositionRefs, ctx.contextUser, ctx.metadataProvider, ctx.runViewProvider, ctx.isSaved));
99
+ await Promise.all(syncPromises);
100
+ }
101
+ //# sourceMappingURL=pipeline.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pipeline.js","sourceRoot":"","sources":["../../../src/custom/query-extraction/pipeline.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,110 @@
1
+ /**
2
+ * Resolve stage of the query extraction pipeline.
3
+ *
4
+ * Contains all deterministic resolution logic — no LLM calls, no database writes.
5
+ * Every function is stateless: context is passed in as parameters rather than via `this`.
6
+ */
7
+ import { EntityInfo, IMetadataProvider, QueryDependencyInfo, QueryInfo } from "@memberjunction/core";
8
+ import type { MJParameterInfo, SQLSelectColumn, SQLTableReference } from "@memberjunction/sql-parser";
9
+ import type { EntityMetadataEntry, ExtractedField, PassthroughParamContext, ResolvedCompositionReference } from "./types.js";
10
+ /**
11
+ * Resolves all {{query:"..."}} composition references in SQL to their QueryInfo targets.
12
+ *
13
+ * This is the single entry point for composition resolution. Both dependency syncing
14
+ * and passthrough parameter extraction consume the results.
15
+ *
16
+ * @throws If a referenced query does not exist in the metadata cache
17
+ * @throws If a referenced query is not marked Reusable
18
+ */
19
+ export declare function ResolveCompositionReferences(sql: string, queryName: string, allQueries: QueryInfo[]): ResolvedCompositionReference[];
20
+ /**
21
+ * Resolves a query by name and optional category path segments from the metadata cache.
22
+ * Tries category-qualified lookup first, then falls back to name-only (if unambiguous).
23
+ */
24
+ export declare function ResolveQueryByNameAndCategory(queryName: string, categorySegments: string[], allQueries: QueryInfo[]): QueryInfo | undefined;
25
+ /**
26
+ * Builds the parameter mapping and extracts passthrough mappings from parsed composition parameters.
27
+ */
28
+ export declare function BuildParameterMappings(params: Array<{
29
+ Name: string;
30
+ StaticValue: string | null;
31
+ PassThroughName: string | null;
32
+ }>): {
33
+ parameterMapping: Record<string, string> | null;
34
+ passthroughMappings: Array<{
35
+ parentParamName: string;
36
+ depParamName: string;
37
+ }>;
38
+ };
39
+ /**
40
+ * Extracts the SQL alias following a {{query:"..."}} token.
41
+ * Returns null if no alias is found or the text following the token is a SQL keyword.
42
+ */
43
+ export declare function ExtractAliasFromSQL(sql: string, fullToken: string): string | null;
44
+ /**
45
+ * Extracts passthrough MJParameterInfo entries and PassthroughParamContext from resolved refs.
46
+ * Inherits type, isRequired, defaultValue, description, and sampleValue from the dependency
47
+ * query's parameter metadata when available.
48
+ */
49
+ export declare function BuildPassthroughParams(resolvedRefs: ResolvedCompositionReference[]): {
50
+ params: MJParameterInfo[];
51
+ contextMap: Map<string, PassthroughParamContext>;
52
+ };
53
+ /**
54
+ * Merges passthrough parameters into the deterministic parameter list,
55
+ * skipping any that are already detected as direct template expressions.
56
+ */
57
+ export declare function MergePassthroughParams(deterministicParams: MJParameterInfo[], passthroughParams: MJParameterInfo[]): MJParameterInfo[];
58
+ /**
59
+ * Maps a QueryParameterInfo.Type value to the MJParameterInfo type union.
60
+ */
61
+ export declare function MapQueryParamTypeToParserType(type: 'string' | 'number' | 'date' | 'boolean' | 'array'): MJParameterInfo['type'];
62
+ /**
63
+ * Detects SELECT * and builds the complete field list deterministically
64
+ * from entity metadata and/or composition ref fields.
65
+ * Returns null if the SQL doesn't use SELECT * or if entities can't be resolved.
66
+ */
67
+ export declare function BuildFieldsForSelectStar(sql: string, tableRefs: SQLTableReference[], selectColumns: SQLSelectColumn[], md: IMetadataProvider): ExtractedField[] | null;
68
+ /**
69
+ * Enriches extracted fields with deterministic SQL types from composed query field metadata.
70
+ *
71
+ * For queries that reference other queries via {{query:"..."}}, resolves field types
72
+ * by matching field names against the dependency query's QueryFieldInfo.
73
+ *
74
+ * Uses the pre-parsed selectColumns for deterministic SELECT clause resolution,
75
+ * which handles direct columns and AS aliases via AST parsing.
76
+ */
77
+ export declare function EnrichFieldTypesFromCompositions(fields: ExtractedField[], resolvedRefs: ResolvedCompositionReference[], selectColumns: SQLSelectColumn[]): ExtractedField[];
78
+ /**
79
+ * Enriches extracted fields with deterministic SQL types from entity view/table metadata.
80
+ *
81
+ * For queries that directly reference entity views (e.g., `FROM __mj.vwUsers u`),
82
+ * resolves field types by matching field names against the entity's field metadata.
83
+ *
84
+ * Uses the pre-parsed selectColumns for deterministic SELECT clause resolution
85
+ * and tableRefs for entity view resolution.
86
+ */
87
+ export declare function EnrichFieldTypesFromEntityMetadata(fields: ExtractedField[], selectColumns: SQLSelectColumn[], tableRefs: SQLTableReference[], md: IMetadataProvider): ExtractedField[];
88
+ /**
89
+ * Expands wildcard (*) entries in the extracted fields list.
90
+ * When a field has name="*" or sourceFieldName="*", expands it into
91
+ * individual field entries by looking up the source from metadata.
92
+ */
93
+ export declare function ExpandWildcardFields(fields: ExtractedField[], md: IMetadataProvider): ExtractedField[];
94
+ /**
95
+ * Extracts entity metadata from the SQL to provide context for parameter type inference.
96
+ * Uses SQLParser for robust SQL parsing with MJ template support.
97
+ */
98
+ export declare function ExtractEntityMetadataFromSQL(sql: string, tableRefs: SQLTableReference[], md: IMetadataProvider): EntityMetadataEntry[];
99
+ /**
100
+ * Detects circular dependencies by walking the dependency graph.
101
+ * Returns a descriptive error string if a cycle is found, or null if clean.
102
+ */
103
+ export declare function DetectDependencyCycles(queryID: string, queryName: string, proposedDeps: Array<{
104
+ dependsOnQueryID: string;
105
+ }>, allDependencies: QueryDependencyInfo[], allQueries: QueryInfo[]): string | null;
106
+ /**
107
+ * Finds an entity by name, checking both Name (which may have "MJ: " prefix) and DisplayName.
108
+ */
109
+ export declare function FindEntityByName(md: IMetadataProvider, name: string): EntityInfo | undefined;
110
+ //# sourceMappingURL=resolve.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resolve.d.ts","sourceRoot":"","sources":["../../../src/custom/query-extraction/resolve.ts"],"names":[],"mappings":"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"}