@memberjunction/core-entities-server 5.22.0 → 5.23.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/custom/MJDuplicateRunEntityServer.server.d.ts +14 -0
- package/dist/custom/MJDuplicateRunEntityServer.server.d.ts.map +1 -1
- package/dist/custom/MJDuplicateRunEntityServer.server.js +95 -4
- package/dist/custom/MJDuplicateRunEntityServer.server.js.map +1 -1
- package/dist/custom/MJTemplateContentEntityServer.server.d.ts +0 -1
- package/dist/custom/MJTemplateContentEntityServer.server.d.ts.map +1 -1
- package/dist/custom/MJTemplateContentEntityServer.server.js +13 -68
- package/dist/custom/MJTemplateContentEntityServer.server.js.map +1 -1
- package/dist/custom/template-extraction/index.d.ts +5 -0
- package/dist/custom/template-extraction/index.d.ts.map +1 -0
- package/dist/custom/template-extraction/index.js +6 -0
- package/dist/custom/template-extraction/index.js.map +1 -0
- package/dist/custom/template-extraction/parser.d.ts +9 -0
- package/dist/custom/template-extraction/parser.d.ts.map +1 -0
- package/dist/custom/template-extraction/parser.js +685 -0
- package/dist/custom/template-extraction/parser.js.map +1 -0
- package/dist/custom/template-extraction/pipeline.d.ts +22 -0
- package/dist/custom/template-extraction/pipeline.d.ts.map +1 -0
- package/dist/custom/template-extraction/pipeline.js +181 -0
- package/dist/custom/template-extraction/pipeline.js.map +1 -0
- package/dist/custom/template-extraction/types.d.ts +101 -0
- package/dist/custom/template-extraction/types.d.ts.map +1 -0
- package/dist/custom/template-extraction/types.js +5 -0
- package/dist/custom/template-extraction/types.js.map +1 -0
- package/package.json +21 -20
|
@@ -6,5 +6,19 @@ export declare class MJDuplicateRunEntityServer extends MJDuplicateRunEntity {
|
|
|
6
6
|
* ProcessingStatus to 'Error' so the UI can surface the problem.
|
|
7
7
|
*/
|
|
8
8
|
private runDetectionAsync;
|
|
9
|
+
/**
|
|
10
|
+
* Convert a DuplicateDetectionProgress callback into a PipelineProgress notification.
|
|
11
|
+
*/
|
|
12
|
+
private publishProgress;
|
|
13
|
+
/**
|
|
14
|
+
* Publish a pipeline progress notification via the global PubSubManager.
|
|
15
|
+
* Uses GetGlobalObjectStore to access PubSubManager without a direct dependency
|
|
16
|
+
* on @memberjunction/server.
|
|
17
|
+
*/
|
|
18
|
+
/**
|
|
19
|
+
* Normalize a threshold value — treat <= 0 or >= 1.0 as "unconfigured" and use the fallback.
|
|
20
|
+
*/
|
|
21
|
+
private normalizeThreshold;
|
|
22
|
+
private publishPipelineNotification;
|
|
9
23
|
}
|
|
10
24
|
//# sourceMappingURL=MJDuplicateRunEntityServer.server.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MJDuplicateRunEntityServer.server.d.ts","sourceRoot":"","sources":["../../src/custom/MJDuplicateRunEntityServer.server.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,oBAAoB,
|
|
1
|
+
{"version":3,"file":"MJDuplicateRunEntityServer.server.d.ts","sourceRoot":"","sources":["../../src/custom/MJDuplicateRunEntityServer.server.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,oBAAoB,EAA0B,MAAM,+BAA+B,CAAC;AAe7F,qBACa,0BAA2B,SAAQ,oBAAoB;IACnD,IAAI,IAAI,OAAO,CAAC,OAAO,CAAC;IAarC;;;OAGG;YACW,iBAAiB;IAmE/B;;OAEG;IACH,OAAO,CAAC,eAAe;IAgBvB;;;;OAIG;IACH;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAO1B,OAAO,CAAC,2BAA2B;CA8BtC"}
|
|
@@ -4,10 +4,20 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
|
|
|
4
4
|
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
5
5
|
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
6
6
|
};
|
|
7
|
-
import { BaseEntity, LogError, LogStatus, PotentialDuplicateRequest } from "@memberjunction/core";
|
|
8
|
-
import { RegisterClass } from "@memberjunction/global";
|
|
7
|
+
import { BaseEntity, LogError, LogStatus, PotentialDuplicateRequest, RunView } from "@memberjunction/core";
|
|
8
|
+
import { RegisterClass, GetGlobalObjectStore } from "@memberjunction/global";
|
|
9
9
|
import { MJDuplicateRunEntity } from "@memberjunction/core-entities";
|
|
10
10
|
import { DuplicateRecordDetector } from "@memberjunction/ai-vector-dupe";
|
|
11
|
+
const PIPELINE_PROGRESS_TOPIC = 'PIPELINE_PROGRESS';
|
|
12
|
+
/** Map DuplicateDetectionProgress phases to pipeline stage names */
|
|
13
|
+
const PHASE_TO_STAGE = {
|
|
14
|
+
'Loading': 'extract',
|
|
15
|
+
'Vectorizing': 'vectorize',
|
|
16
|
+
'Embedding': 'autotag',
|
|
17
|
+
'Querying': 'extract',
|
|
18
|
+
'Matching': 'autotag',
|
|
19
|
+
'Merging': 'complete'
|
|
20
|
+
};
|
|
11
21
|
let MJDuplicateRunEntityServer = class MJDuplicateRunEntityServer extends MJDuplicateRunEntity {
|
|
12
22
|
async Save() {
|
|
13
23
|
const saveResult = await super.Save();
|
|
@@ -24,17 +34,50 @@ let MJDuplicateRunEntityServer = class MJDuplicateRunEntityServer extends MJDupl
|
|
|
24
34
|
* ProcessingStatus to 'Error' so the UI can surface the problem.
|
|
25
35
|
*/
|
|
26
36
|
async runDetectionAsync() {
|
|
37
|
+
const startTime = Date.now();
|
|
27
38
|
try {
|
|
28
39
|
const detector = new DuplicateRecordDetector();
|
|
29
40
|
const request = new PotentialDuplicateRequest();
|
|
30
41
|
request.EntityID = this.EntityID;
|
|
31
|
-
request.ListID = this.SourceListID;
|
|
32
|
-
|
|
42
|
+
request.ListID = this.SourceListID || undefined; // Optional — if not set, scans all entity records
|
|
43
|
+
// Find the first active entity document for this entity to get template/thresholds
|
|
44
|
+
const rv = new RunView();
|
|
45
|
+
const edResult = await rv.RunView({
|
|
46
|
+
EntityName: 'MJ: Entity Documents',
|
|
47
|
+
ExtraFilter: `EntityID='${this.EntityID}' AND Status='Active'`,
|
|
48
|
+
MaxRows: 1,
|
|
49
|
+
ResultType: 'entity_object'
|
|
50
|
+
}, this.ContextCurrentUser);
|
|
51
|
+
if (edResult.Success && edResult.Results.length > 0) {
|
|
52
|
+
request.EntityDocumentID = edResult.Results[0].ID;
|
|
53
|
+
}
|
|
54
|
+
// Build detection options with threshold normalization.
|
|
55
|
+
// Entity document defaults are 1.0 (100%) which means nothing ever matches.
|
|
56
|
+
// Normalize to sensible fallbacks when the stored value is effectively unconfigured.
|
|
57
|
+
const potentialThreshold = this.normalizeThreshold(edResult.Success && edResult.Results.length > 0 ? edResult.Results[0].PotentialMatchThreshold : 1.0, 0.70 // fallback: 70% for potential matches
|
|
58
|
+
);
|
|
59
|
+
const absoluteThreshold = this.normalizeThreshold(edResult.Success && edResult.Results.length > 0 ? edResult.Results[0].AbsoluteMatchThreshold : 1.0, 0.95 // fallback: 95% for absolute matches
|
|
60
|
+
);
|
|
61
|
+
const detectionOptions = {
|
|
62
|
+
DuplicateRunID: this.ID,
|
|
63
|
+
PotentialMatchThreshold: potentialThreshold,
|
|
64
|
+
AbsoluteMatchThreshold: absoluteThreshold,
|
|
65
|
+
OnProgress: (progress) => {
|
|
66
|
+
this.publishProgress(progress, startTime);
|
|
67
|
+
}
|
|
68
|
+
};
|
|
69
|
+
request.Options = detectionOptions;
|
|
70
|
+
// Publish initial progress
|
|
71
|
+
this.publishPipelineNotification('autotag', 0, 0, 0, startTime, 'Starting duplicate detection...');
|
|
33
72
|
await detector.GetDuplicateRecords(request, this.ContextCurrentUser);
|
|
34
73
|
LogStatus(`Duplicate detection completed for run ${this.ID}`);
|
|
74
|
+
// Publish completion
|
|
75
|
+
this.publishPipelineNotification('complete', 100, 100, 100, startTime);
|
|
35
76
|
}
|
|
36
77
|
catch (error) {
|
|
37
78
|
LogError(`Duplicate detection error for run ${this.ID}`, undefined, error);
|
|
79
|
+
// Publish error
|
|
80
|
+
this.publishPipelineNotification('error', 0, 0, 0, startTime, String(error));
|
|
38
81
|
// Update the run record to reflect the error
|
|
39
82
|
try {
|
|
40
83
|
this.ProcessingStatus = 'Failed';
|
|
@@ -46,6 +89,54 @@ let MJDuplicateRunEntityServer = class MJDuplicateRunEntityServer extends MJDupl
|
|
|
46
89
|
}
|
|
47
90
|
}
|
|
48
91
|
}
|
|
92
|
+
/**
|
|
93
|
+
* Convert a DuplicateDetectionProgress callback into a PipelineProgress notification.
|
|
94
|
+
*/
|
|
95
|
+
publishProgress(progress, startTime) {
|
|
96
|
+
const stage = PHASE_TO_STAGE[progress.Phase] ?? 'autotag';
|
|
97
|
+
const pct = progress.TotalRecords > 0
|
|
98
|
+
? Math.round((progress.ProcessedRecords / progress.TotalRecords) * 100)
|
|
99
|
+
: 0;
|
|
100
|
+
this.publishPipelineNotification(stage, progress.TotalRecords, progress.ProcessedRecords, pct, startTime, progress.CurrentRecordID);
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* Publish a pipeline progress notification via the global PubSubManager.
|
|
104
|
+
* Uses GetGlobalObjectStore to access PubSubManager without a direct dependency
|
|
105
|
+
* on @memberjunction/server.
|
|
106
|
+
*/
|
|
107
|
+
/**
|
|
108
|
+
* Normalize a threshold value — treat <= 0 or >= 1.0 as "unconfigured" and use the fallback.
|
|
109
|
+
*/
|
|
110
|
+
normalizeThreshold(value, fallback) {
|
|
111
|
+
if (value == null || value <= 0 || value >= 1.0) {
|
|
112
|
+
return fallback;
|
|
113
|
+
}
|
|
114
|
+
return value;
|
|
115
|
+
}
|
|
116
|
+
publishPipelineNotification(stage, totalItems, processedItems, percentComplete, startTime, currentItem) {
|
|
117
|
+
try {
|
|
118
|
+
// Access PubSubManager through the global object store
|
|
119
|
+
// PubSubManager is a BaseSingleton stored in the global registry
|
|
120
|
+
const globalStore = GetGlobalObjectStore();
|
|
121
|
+
const pubSubManager = globalStore['___SINGLETON__PubSubManager'];
|
|
122
|
+
if (pubSubManager && typeof pubSubManager.Publish === 'function') {
|
|
123
|
+
const elapsedMs = Date.now() - startTime;
|
|
124
|
+
pubSubManager.Publish(PIPELINE_PROGRESS_TOPIC, {
|
|
125
|
+
PipelineRunID: this.ID,
|
|
126
|
+
Stage: stage,
|
|
127
|
+
TotalItems: totalItems,
|
|
128
|
+
ProcessedItems: processedItems,
|
|
129
|
+
CurrentItem: currentItem,
|
|
130
|
+
ElapsedMs: elapsedMs,
|
|
131
|
+
PercentComplete: percentComplete
|
|
132
|
+
});
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
catch (error) {
|
|
136
|
+
// Don't let progress publishing errors break detection
|
|
137
|
+
LogError(`Failed to publish pipeline progress for run ${this.ID}`, undefined, error);
|
|
138
|
+
}
|
|
139
|
+
}
|
|
49
140
|
};
|
|
50
141
|
MJDuplicateRunEntityServer = __decorate([
|
|
51
142
|
RegisterClass(BaseEntity, 'MJ: Duplicate Runs')
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MJDuplicateRunEntityServer.server.js","sourceRoot":"","sources":["../../src/custom/MJDuplicateRunEntityServer.server.ts"],"names":[],"mappings":";;;;;;AAAA,OAAO,EAAE,UAAU,
|
|
1
|
+
{"version":3,"file":"MJDuplicateRunEntityServer.server.js","sourceRoot":"","sources":["../../src/custom/MJDuplicateRunEntityServer.server.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,7 +3,6 @@ import { MJTemplateContentEntity } from "@memberjunction/core-entities";
|
|
|
3
3
|
export declare class MJTemplateContentEntityServer extends MJTemplateContentEntity {
|
|
4
4
|
Save(options?: EntitySaveOptions): Promise<boolean>;
|
|
5
5
|
private extractAndSyncParameters;
|
|
6
|
-
private normalizeParameterType;
|
|
7
6
|
private syncTemplateParameters;
|
|
8
7
|
}
|
|
9
8
|
//# sourceMappingURL=MJTemplateContentEntityServer.server.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MJTemplateContentEntityServer.server.d.ts","sourceRoot":"","sources":["../../src/custom/MJTemplateContentEntityServer.server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAc,iBAAiB,EAAkD,MAAM,sBAAsB,CAAC;AACrH,OAAO,EAAE,uBAAuB,EAA2C,MAAM,+BAA+B,CAAC;
|
|
1
|
+
{"version":3,"file":"MJTemplateContentEntityServer.server.d.ts","sourceRoot":"","sources":["../../src/custom/MJTemplateContentEntityServer.server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAc,iBAAiB,EAAkD,MAAM,sBAAsB,CAAC;AACrH,OAAO,EAAE,uBAAuB,EAA2C,MAAM,+BAA+B,CAAC;AAMjH,qBACa,6BAA8B,SAAQ,uBAAuB;IACvD,IAAI,CAAC,OAAO,CAAC,EAAE,iBAAiB,GAAG,OAAO,CAAC,OAAO,CAAC;YAmCpD,wBAAwB;YAuBxB,sBAAsB;CAkHvC"}
|
|
@@ -7,9 +7,7 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
|
|
|
7
7
|
import { BaseEntity, LogError, Metadata } from "@memberjunction/core";
|
|
8
8
|
import { MJTemplateContentEntity } from "@memberjunction/core-entities";
|
|
9
9
|
import { RegisterClass, UUIDsEqual } from "@memberjunction/global";
|
|
10
|
-
import {
|
|
11
|
-
import { AIPromptRunner } from "@memberjunction/ai-prompts";
|
|
12
|
-
import { AIPromptParams } from "@memberjunction/ai-core-plus";
|
|
10
|
+
import { RunTemplateExtractionPipeline } from "./template-extraction/index.js";
|
|
13
11
|
let MJTemplateContentEntityServer = class MJTemplateContentEntityServer extends MJTemplateContentEntity {
|
|
14
12
|
async Save(options) {
|
|
15
13
|
const provider = Metadata.Provider;
|
|
@@ -42,36 +40,14 @@ let MJTemplateContentEntityServer = class MJTemplateContentEntityServer extends
|
|
|
42
40
|
}
|
|
43
41
|
async extractAndSyncParameters() {
|
|
44
42
|
try {
|
|
45
|
-
|
|
46
|
-
|
|
43
|
+
// Run the hybrid extraction pipeline: deterministic parse + AI enrichment
|
|
44
|
+
const result = await RunTemplateExtractionPipeline(this.TemplateText, this.Template, this.ContextCurrentUser);
|
|
45
|
+
if (result.warnings.length > 0) {
|
|
46
|
+
console.warn('Template parameter extraction warnings:', result.warnings);
|
|
47
47
|
}
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
// Find the Template Parameter Extraction prompt
|
|
51
|
-
const aiPrompt = AIEngine.Instance.Prompts.find(p => p.Name === 'Template Parameter Extraction' &&
|
|
52
|
-
p.Category === 'MJ: System');
|
|
53
|
-
if (!aiPrompt) {
|
|
54
|
-
// prompt not configured, non-fatl, just warn and return
|
|
55
|
-
console.warn('AI prompt for Template Parameter Extraction not found. Skipping parameter extraction.');
|
|
56
|
-
return;
|
|
48
|
+
if (result.parameters.length > 0) {
|
|
49
|
+
await this.syncTemplateParameters(result.parameters);
|
|
57
50
|
}
|
|
58
|
-
// Prepare prompt data
|
|
59
|
-
const promptData = {
|
|
60
|
-
templateText: this.TemplateText
|
|
61
|
-
};
|
|
62
|
-
// Execute the prompt using AIPromptRunner
|
|
63
|
-
const promptRunner = new AIPromptRunner();
|
|
64
|
-
const params = new AIPromptParams();
|
|
65
|
-
params.prompt = aiPrompt;
|
|
66
|
-
params.data = promptData;
|
|
67
|
-
params.contextUser = this.ContextCurrentUser;
|
|
68
|
-
const result = await promptRunner.ExecutePrompt(params);
|
|
69
|
-
if (!result.success || !result.result) {
|
|
70
|
-
LogError('Failed to extract template parameters:', result.errorMessage);
|
|
71
|
-
return;
|
|
72
|
-
}
|
|
73
|
-
// Process the extracted parameters
|
|
74
|
-
await this.syncTemplateParameters(result.result.parameters);
|
|
75
51
|
}
|
|
76
52
|
catch (e) {
|
|
77
53
|
LogError('Error extracting template parameters:', e);
|
|
@@ -79,32 +55,6 @@ let MJTemplateContentEntityServer = class MJTemplateContentEntityServer extends
|
|
|
79
55
|
// The user can still manually manage parameters if needed
|
|
80
56
|
}
|
|
81
57
|
}
|
|
82
|
-
normalizeParameterType(type) {
|
|
83
|
-
// Normalize LLM output to match database constraint values
|
|
84
|
-
const normalized = type.toLowerCase();
|
|
85
|
-
switch (normalized) {
|
|
86
|
-
case 'scalar':
|
|
87
|
-
case 'string':
|
|
88
|
-
case 'number':
|
|
89
|
-
case 'boolean':
|
|
90
|
-
case 'date':
|
|
91
|
-
return 'Scalar';
|
|
92
|
-
case 'array':
|
|
93
|
-
case 'list':
|
|
94
|
-
return 'Array';
|
|
95
|
-
case 'object':
|
|
96
|
-
case 'dict':
|
|
97
|
-
case 'dictionary':
|
|
98
|
-
return 'Object';
|
|
99
|
-
case 'record':
|
|
100
|
-
return 'Record';
|
|
101
|
-
case 'entity':
|
|
102
|
-
return 'Entity';
|
|
103
|
-
default:
|
|
104
|
-
console.warn(`Unknown parameter type '${type}', defaulting to 'Scalar'`);
|
|
105
|
-
return 'Scalar';
|
|
106
|
-
}
|
|
107
|
-
}
|
|
108
58
|
async syncTemplateParameters(extractedParams) {
|
|
109
59
|
// Use the entity's provider instead of creating new Metadata instance
|
|
110
60
|
const md = this.ProviderToUse;
|
|
@@ -119,7 +69,7 @@ let MJTemplateContentEntityServer = class MJTemplateContentEntityServer extends
|
|
|
119
69
|
if (!existingParamsResult.Success) {
|
|
120
70
|
throw new Error(`Failed to load existing template parameters: ${existingParamsResult.ErrorMessage}`);
|
|
121
71
|
}
|
|
122
|
-
const existingParams = existingParamsResult.Results
|
|
72
|
+
const existingParams = existingParamsResult.Results ?? [];
|
|
123
73
|
// Determine if we're in single or multiple template content scenario
|
|
124
74
|
const templateContentsResult = await rv.RunView({
|
|
125
75
|
EntityName: 'MJ: Template Contents',
|
|
@@ -148,8 +98,8 @@ let MJTemplateContentEntityServer = class MJTemplateContentEntityServer extends
|
|
|
148
98
|
newParam.TemplateID = this.TemplateID;
|
|
149
99
|
newParam.TemplateContentID = templateContentID;
|
|
150
100
|
newParam.Name = param.name;
|
|
151
|
-
newParam.Type =
|
|
152
|
-
newParam.IsRequired =
|
|
101
|
+
newParam.Type = param.type;
|
|
102
|
+
newParam.IsRequired = param.isRequired;
|
|
153
103
|
newParam.DefaultValue = param.defaultValue;
|
|
154
104
|
newParam.Description = param.description;
|
|
155
105
|
promises.push(newParam.Save());
|
|
@@ -159,14 +109,12 @@ let MJTemplateContentEntityServer = class MJTemplateContentEntityServer extends
|
|
|
159
109
|
const extractedParam = extractedParams.find(p => p.name.toLowerCase() === existingParam.Name.toLowerCase());
|
|
160
110
|
if (extractedParam) {
|
|
161
111
|
let hasChanges = false;
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
if (existingParam.Type !== normalizedType) {
|
|
165
|
-
existingParam.Type = normalizedType;
|
|
112
|
+
if (existingParam.Type !== extractedParam.type) {
|
|
113
|
+
existingParam.Type = extractedParam.type;
|
|
166
114
|
hasChanges = true;
|
|
167
115
|
}
|
|
168
116
|
if (existingParam.IsRequired !== extractedParam.isRequired) {
|
|
169
|
-
existingParam.IsRequired =
|
|
117
|
+
existingParam.IsRequired = extractedParam.isRequired;
|
|
170
118
|
hasChanges = true;
|
|
171
119
|
}
|
|
172
120
|
if (existingParam.DefaultValue !== extractedParam.defaultValue) {
|
|
@@ -190,9 +138,6 @@ let MJTemplateContentEntityServer = class MJTemplateContentEntityServer extends
|
|
|
190
138
|
if (promises.length > 0) {
|
|
191
139
|
await Promise.all(promises); // saving these is non-critical
|
|
192
140
|
}
|
|
193
|
-
// If this is multiple contents scenario, we might need to handle global params
|
|
194
|
-
// This is a more complex scenario that would require analyzing all template contents
|
|
195
|
-
// For now, we're handling content-specific params only
|
|
196
141
|
}
|
|
197
142
|
catch (e) {
|
|
198
143
|
LogError('Failed to sync template parameters:', e);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MJTemplateContentEntityServer.server.js","sourceRoot":"","sources":["../../src/custom/MJTemplateContentEntityServer.server.ts"],"names":[],"mappings":";;;;;;AAAA,OAAO,EAAE,UAAU,EAAqB,QAAQ,EAAE,QAAQ,EAA8B,MAAM,sBAAsB,CAAC;AACrH,OAAO,EAAE,uBAAuB,EAA2C,MAAM,+BAA+B,CAAC;AACjH,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AACnE,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"MJTemplateContentEntityServer.server.js","sourceRoot":"","sources":["../../src/custom/MJTemplateContentEntityServer.server.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export { RunTemplateExtractionPipeline } from "./pipeline.js";
|
|
2
|
+
export type { TemplateExtractionResult } from "./pipeline.js";
|
|
3
|
+
export { ParseTemplateParameters } from "./parser.js";
|
|
4
|
+
export type { TemplateParamType, PropertyAccess, DeterministicParameter, ParameterUsage, ParseResult, EnrichmentResult, EnrichedParameterInfo, MergedTemplateParameter, } from "./types.js";
|
|
5
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/custom/template-extraction/index.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,6BAA6B,EAAE,MAAM,YAAY,CAAC;AAC3D,YAAY,EAAE,wBAAwB,EAAE,MAAM,YAAY,CAAC;AAG3D,OAAO,EAAE,uBAAuB,EAAE,MAAM,UAAU,CAAC;AAGnD,YAAY,EACR,iBAAiB,EACjB,cAAc,EACd,sBAAsB,EACtB,cAAc,EACd,WAAW,EACX,gBAAgB,EAChB,qBAAqB,EACrB,uBAAuB,GAC1B,MAAM,SAAS,CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
// Template Extraction Pipeline — barrel exports
|
|
2
|
+
// Pipeline orchestrator
|
|
3
|
+
export { RunTemplateExtractionPipeline } from "./pipeline.js";
|
|
4
|
+
// Parser (deterministic AST extraction)
|
|
5
|
+
export { ParseTemplateParameters } from "./parser.js";
|
|
6
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/custom/template-extraction/index.ts"],"names":[],"mappings":"AAAA,gDAAgD;AAEhD,wBAAwB;AACxB,OAAO,EAAE,6BAA6B,EAAE,MAAM,YAAY,CAAC;AAG3D,wCAAwC;AACxC,OAAO,EAAE,uBAAuB,EAAE,MAAM,UAAU,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { ParseResult } from './types.js';
|
|
2
|
+
/**
|
|
3
|
+
* Parse a Nunjucks template and deterministically extract all template parameters.
|
|
4
|
+
*
|
|
5
|
+
* @param templateText The raw Nunjucks template string
|
|
6
|
+
* @returns ParseResult with extracted parameters and any warnings
|
|
7
|
+
*/
|
|
8
|
+
export declare function ParseTemplateParameters(templateText: string): ParseResult;
|
|
9
|
+
//# sourceMappingURL=parser.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parser.d.ts","sourceRoot":"","sources":["../../../src/custom/template-extraction/parser.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAA0C,WAAW,EAAqC,MAAM,SAAS,CAAC;AA2DtH;;;;;GAKG;AACH,wBAAgB,uBAAuB,CAAC,YAAY,EAAE,MAAM,GAAG,WAAW,CAyBzE"}
|