@memberjunction/templates 6.2.0-edge.3 → 6.2.0-edge.5
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/README.md +85 -1
- package/dist/InheritedMemberNames.d.ts +12 -0
- package/dist/InheritedMemberNames.d.ts.map +1 -0
- package/dist/InheritedMemberNames.js +19 -0
- package/dist/InheritedMemberNames.js.map +1 -0
- package/dist/NunjucksCompileGuard.d.ts +17 -0
- package/dist/NunjucksCompileGuard.d.ts.map +1 -0
- package/dist/NunjucksCompileGuard.js +273 -0
- package/dist/NunjucksCompileGuard.js.map +1 -0
- package/dist/NunjucksSandbox.d.ts +26 -0
- package/dist/NunjucksSandbox.d.ts.map +1 -0
- package/dist/NunjucksSandbox.js +317 -0
- package/dist/NunjucksSandbox.js.map +1 -0
- package/dist/TemplateEngine.d.ts +41 -9
- package/dist/TemplateEngine.d.ts.map +1 -1
- package/dist/TemplateEngine.js +123 -23
- package/dist/TemplateEngine.js.map +1 -1
- package/dist/TemplateSandboxError.d.ts +9 -0
- package/dist/TemplateSandboxError.d.ts.map +1 -0
- package/dist/TemplateSandboxError.js +12 -0
- package/dist/TemplateSandboxError.js.map +1 -0
- package/dist/TemplateVariableAnalysis.d.ts +27 -0
- package/dist/TemplateVariableAnalysis.d.ts.map +1 -0
- package/dist/TemplateVariableAnalysis.js +140 -0
- package/dist/TemplateVariableAnalysis.js.map +1 -0
- package/dist/extensions/TemplateEmbed.extension.d.ts +13 -1
- package/dist/extensions/TemplateEmbed.extension.d.ts.map +1 -1
- package/dist/extensions/TemplateEmbed.extension.js +16 -8
- package/dist/extensions/TemplateEmbed.extension.js.map +1 -1
- package/dist/index.d.ts +5 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +5 -0
- package/dist/index.js.map +1 -1
- package/dist/operations/TemplateRunAuthorization.d.ts +20 -0
- package/dist/operations/TemplateRunAuthorization.d.ts.map +1 -0
- package/dist/operations/TemplateRunAuthorization.js +37 -0
- package/dist/operations/TemplateRunAuthorization.js.map +1 -0
- package/dist/operations/TemplateRunOperation.d.ts +6 -0
- package/dist/operations/TemplateRunOperation.d.ts.map +1 -1
- package/dist/operations/TemplateRunOperation.js +10 -1
- package/dist/operations/TemplateRunOperation.js.map +1 -1
- package/package.json +9 -9
package/dist/TemplateEngine.js
CHANGED
|
@@ -2,7 +2,12 @@ import { LogError } from "@memberjunction/core";
|
|
|
2
2
|
import nunjucks from 'nunjucks';
|
|
3
3
|
import { BaseSingleton, MJGlobal, UUIDsEqual } from "@memberjunction/global";
|
|
4
4
|
import { TemplateExtensionBase } from "./extensions/TemplateExtensionBase.js";
|
|
5
|
+
import { HardenNunjucksRuntime } from "./NunjucksSandbox.js";
|
|
6
|
+
import { CollectReferencedVariables } from "./TemplateVariableAnalysis.js";
|
|
5
7
|
import { TemplateEngineBase } from '@memberjunction/templates-base-types';
|
|
8
|
+
// Stored templates are user-editable, so nunjucks is guarded as soon as the engine loads. The guard
|
|
9
|
+
// is process-wide: it also covers nunjucks environments that other packages create.
|
|
10
|
+
HardenNunjucksRuntime();
|
|
6
11
|
/**
|
|
7
12
|
* This class extends the nunjucks loader to allow adding templates directly to the loader
|
|
8
13
|
*/
|
|
@@ -56,10 +61,16 @@ export class TemplateEngineServer extends BaseSingleton {
|
|
|
56
61
|
constructor() {
|
|
57
62
|
super(...arguments);
|
|
58
63
|
this._oneTimeLoadingComplete = false;
|
|
64
|
+
/** The extension instances registered on {@link _nunjucksEnv}. The variable analysis parses their custom tags. */
|
|
65
|
+
this._registeredExtensions = [];
|
|
59
66
|
/**
|
|
60
|
-
*
|
|
67
|
+
* Compiled templates per environment, then per template content ID, so a raw compile is never served to an
|
|
68
|
+
* escaping render.
|
|
61
69
|
*/
|
|
62
|
-
this._templateCache = new
|
|
70
|
+
this._templateCache = new WeakMap();
|
|
71
|
+
this._simpleTemplateCache = new Map();
|
|
72
|
+
/** {@link GetReferencedVariables} results by template text. */
|
|
73
|
+
this._referencedVariablesCache = new Map();
|
|
63
74
|
}
|
|
64
75
|
static get Instance() {
|
|
65
76
|
return super.getInstance();
|
|
@@ -91,7 +102,7 @@ export class TemplateEngineServer extends BaseSingleton {
|
|
|
91
102
|
this.ClearTemplateCache(); // base templates (re)loaded — drop any stale compiled templates
|
|
92
103
|
this.ensureNunjucksInitialized(contextUser);
|
|
93
104
|
}
|
|
94
|
-
/** One-time nunjucks environment + registered-extension setup
|
|
105
|
+
/** One-time nunjucks environment + registered-extension setup. {@link Config} and {@link GetReferencedVariables} call it. */
|
|
95
106
|
ensureNunjucksInitialized(contextUser) {
|
|
96
107
|
if (this._oneTimeLoadingComplete) {
|
|
97
108
|
return;
|
|
@@ -100,17 +111,27 @@ export class TemplateEngineServer extends BaseSingleton {
|
|
|
100
111
|
this._templateLoader = new TemplateEntityLoader();
|
|
101
112
|
this._nunjucksEnv = this.createConfiguredNunjucksEnv(true);
|
|
102
113
|
this._nunjucksEnvNoAutoescape = undefined; // rebound lazily against the fresh loader on next no-autoescape render
|
|
103
|
-
|
|
114
|
+
this._nunjucksEnvRawTemplates = undefined;
|
|
115
|
+
this._registeredExtensions = this.registerExtensions(this._nunjucksEnv, contextUser);
|
|
116
|
+
}
|
|
117
|
+
/**
|
|
118
|
+
* Registers every {@link TemplateExtensionBase} subclass with the given environment.
|
|
119
|
+
* @returns the extension instances registered on `env`
|
|
120
|
+
*/
|
|
121
|
+
registerExtensions(env, contextUser) {
|
|
122
|
+
const registered = [];
|
|
104
123
|
const extensions = MJGlobal.Instance.ClassFactory.GetAllRegistrations(TemplateExtensionBase);
|
|
105
124
|
if (extensions && extensions.length > 0) {
|
|
106
125
|
for (const ext of extensions) {
|
|
107
126
|
const SubClassConstructor = ext.SubClass;
|
|
108
127
|
const instance = new SubClassConstructor(contextUser);
|
|
109
128
|
if (ext.Key) {
|
|
110
|
-
|
|
129
|
+
env.addExtension(ext.Key, instance);
|
|
130
|
+
registered.push(instance);
|
|
111
131
|
}
|
|
112
132
|
}
|
|
113
133
|
}
|
|
134
|
+
return registered;
|
|
114
135
|
}
|
|
115
136
|
/** True once the underlying TemplateEngineBase cache has loaded. */
|
|
116
137
|
get Loaded() { return this.base.Loaded; }
|
|
@@ -123,10 +144,13 @@ export class TemplateEngineServer extends BaseSingleton {
|
|
|
123
144
|
get TemplateContents() { return this.base.TemplateContents; }
|
|
124
145
|
get TemplateParams() { return this.base.TemplateParams; }
|
|
125
146
|
FindTemplate(templateName) { return this.base.FindTemplate(templateName); }
|
|
147
|
+
FindTemplateByID(templateId) { return this.base.FindTemplateByID(templateId); }
|
|
126
148
|
SetupNunjucks() {
|
|
127
149
|
this._templateLoader = new TemplateEntityLoader();
|
|
128
150
|
this._nunjucksEnv = this.createConfiguredNunjucksEnv(true);
|
|
129
151
|
this._nunjucksEnvNoAutoescape = undefined; // rebound lazily against the fresh loader on next no-autoescape render
|
|
152
|
+
this._nunjucksEnvRawTemplates = undefined;
|
|
153
|
+
this._simpleTemplateCache.clear();
|
|
130
154
|
}
|
|
131
155
|
/**
|
|
132
156
|
* Builds a Nunjucks environment bound to the shared template loader with our custom filters applied.
|
|
@@ -174,6 +198,11 @@ export class TemplateEngineServer extends BaseSingleton {
|
|
|
174
198
|
}
|
|
175
199
|
});
|
|
176
200
|
}
|
|
201
|
+
/**
|
|
202
|
+
* Bounded LRU cache for ad-hoc templates rendered via {@link RenderTemplateSimple}.
|
|
203
|
+
* Keyed by `${autoescape ? '1:' : '0:'}${templateText}`.
|
|
204
|
+
*/
|
|
205
|
+
static { this.MAX_SIMPLE_TEMPLATE_CACHE_SIZE = 2000; }
|
|
177
206
|
AddTemplate(templateEntity) {
|
|
178
207
|
this._templateLoader.AddTemplate(templateEntity.ID, templateEntity);
|
|
179
208
|
}
|
|
@@ -184,8 +213,10 @@ export class TemplateEngineServer extends BaseSingleton {
|
|
|
184
213
|
* @param data
|
|
185
214
|
* @param SkipValidation if true, validation is skipped entirely (or reduced to warnings depending on SuppressWarnings)
|
|
186
215
|
* @param SuppressWarnings if true AND SkipValidation is true, no validation warnings are logged. When SkipValidation is true but SuppressWarnings is false, validation issues are logged as non-fatal warnings. Defaults to false.
|
|
216
|
+
* @param options `autoescape` (default `true`) toggles HTML escaping; pass `false` when the output is plain text for
|
|
217
|
+
* a model, where `Affineur & Owner` must not become `Affineur & Owner`
|
|
187
218
|
*/
|
|
188
|
-
async RenderTemplate(templateEntity, templateContent, data, SkipValidation, SuppressWarnings) {
|
|
219
|
+
async RenderTemplate(templateEntity, templateContent, data, SkipValidation, SuppressWarnings, options) {
|
|
189
220
|
try {
|
|
190
221
|
if (!templateContent) {
|
|
191
222
|
return {
|
|
@@ -229,7 +260,8 @@ export class TemplateEngineServer extends BaseSingleton {
|
|
|
229
260
|
}
|
|
230
261
|
// Merge default values from parameters applicable to this content
|
|
231
262
|
const mergedData = this.mergeDefaultValues(templateEntity, templateContent.ID, data);
|
|
232
|
-
const
|
|
263
|
+
const env = options?.autoescape === false ? this.getRawTemplateEnv() : this._nunjucksEnv;
|
|
264
|
+
const template = this.getNunjucksTemplate(templateContent.ID, templateContent.TemplateText, true, env);
|
|
233
265
|
const result = await this.renderTemplateAsync(template, mergedData);
|
|
234
266
|
return {
|
|
235
267
|
Success: true,
|
|
@@ -257,8 +289,25 @@ export class TemplateEngineServer extends BaseSingleton {
|
|
|
257
289
|
*/
|
|
258
290
|
async RenderTemplateSimple(templateText, data, options) {
|
|
259
291
|
try {
|
|
260
|
-
const
|
|
261
|
-
const
|
|
292
|
+
const autoescape = options?.autoescape ?? true;
|
|
293
|
+
const cacheKey = `${autoescape ? '1:' : '0:'}${templateText}`;
|
|
294
|
+
let template = this._simpleTemplateCache.get(cacheKey);
|
|
295
|
+
if (template) {
|
|
296
|
+
// Refresh LRU order
|
|
297
|
+
this._simpleTemplateCache.delete(cacheKey);
|
|
298
|
+
this._simpleTemplateCache.set(cacheKey, template);
|
|
299
|
+
}
|
|
300
|
+
else {
|
|
301
|
+
const env = this.getSimpleRenderEnv(autoescape);
|
|
302
|
+
template = this.createNunjucksTemplate(templateText, env);
|
|
303
|
+
if (this._simpleTemplateCache.size >= TemplateEngineServer.MAX_SIMPLE_TEMPLATE_CACHE_SIZE) {
|
|
304
|
+
const oldestKey = this._simpleTemplateCache.keys().next().value;
|
|
305
|
+
if (oldestKey !== undefined) {
|
|
306
|
+
this._simpleTemplateCache.delete(oldestKey);
|
|
307
|
+
}
|
|
308
|
+
}
|
|
309
|
+
this._simpleTemplateCache.set(cacheKey, template);
|
|
310
|
+
}
|
|
262
311
|
const result = await this.renderTemplateAsync(template, data);
|
|
263
312
|
return {
|
|
264
313
|
Success: true,
|
|
@@ -275,26 +324,57 @@ export class TemplateEngineServer extends BaseSingleton {
|
|
|
275
324
|
};
|
|
276
325
|
}
|
|
277
326
|
}
|
|
327
|
+
/**
|
|
328
|
+
* Returns the top-level variable names a template's text reads, following stored templates it
|
|
329
|
+
* pulls in by literal name (`{% include %}`, `{% import %}`, `{% from %}`, `{% extends %}`,
|
|
330
|
+
* `{% template %}`). It sets up the Nunjucks environment first, so the registered extensions' tags
|
|
331
|
+
* parse before the first {@link Config} too. The result is frozen and cached per template text until
|
|
332
|
+
* {@link ClearTemplateCache}; a result whose text does not parse is not cached.
|
|
333
|
+
*/
|
|
334
|
+
GetReferencedVariables(templateText) {
|
|
335
|
+
const cached = this._referencedVariablesCache.get(templateText);
|
|
336
|
+
if (cached) {
|
|
337
|
+
return cached;
|
|
338
|
+
}
|
|
339
|
+
this.ensureNunjucksInitialized(this.ContextUser);
|
|
340
|
+
const result = Object.freeze(CollectReferencedVariables(templateText, {
|
|
341
|
+
Extensions: this._registeredExtensions,
|
|
342
|
+
ResolveTemplateTexts: (name) => {
|
|
343
|
+
const template = this.FindTemplate(name);
|
|
344
|
+
return template ? template.Content.map((c) => c.TemplateText).filter((t) => !!t) : null;
|
|
345
|
+
},
|
|
346
|
+
}));
|
|
347
|
+
if (!result.ParseFailed) {
|
|
348
|
+
this._referencedVariablesCache.set(templateText, result);
|
|
349
|
+
}
|
|
350
|
+
return result;
|
|
351
|
+
}
|
|
278
352
|
/**
|
|
279
353
|
* This method is responsible for creating a new Nunjucks template, caching it, and returning it.
|
|
280
354
|
* If the templateContentId already had a template created, it will return that template from the cache.
|
|
281
355
|
* @param templateId - must be provided if you want to cache the template, if not provided the template will not be cached
|
|
282
356
|
* @param templateText
|
|
283
357
|
* @param cacheTemplate - if true, the template will be cached, otherwise it will not be cached
|
|
358
|
+
* @param env the environment to compile against; defaults to the shared autoescape environment
|
|
284
359
|
*/
|
|
285
|
-
getNunjucksTemplate(templateContentId, templateText, cacheTemplate) {
|
|
360
|
+
getNunjucksTemplate(templateContentId, templateText, cacheTemplate, env = this._nunjucksEnv) {
|
|
286
361
|
if (templateContentId && cacheTemplate) {
|
|
287
|
-
let
|
|
362
|
+
let envCache = this._templateCache.get(env);
|
|
363
|
+
if (!envCache) {
|
|
364
|
+
envCache = new Map();
|
|
365
|
+
this._templateCache.set(env, envCache);
|
|
366
|
+
}
|
|
367
|
+
let template = envCache.get(templateContentId);
|
|
288
368
|
if (!template) {
|
|
289
|
-
template = this.createNunjucksTemplate(templateText);
|
|
290
|
-
|
|
369
|
+
template = this.createNunjucksTemplate(templateText, env);
|
|
370
|
+
envCache.set(templateContentId, template);
|
|
291
371
|
}
|
|
292
372
|
return template;
|
|
293
373
|
}
|
|
294
374
|
else {
|
|
295
375
|
// we don't have a template ID which means this is a dyanmic template, and so we don't want to do
|
|
296
376
|
// anything with the cache, we just create a new nunjucks template and return it
|
|
297
|
-
return this.createNunjucksTemplate(templateText);
|
|
377
|
+
return this.createNunjucksTemplate(templateText, env);
|
|
298
378
|
}
|
|
299
379
|
}
|
|
300
380
|
/**
|
|
@@ -320,8 +400,19 @@ export class TemplateEngineServer extends BaseSingleton {
|
|
|
320
400
|
}
|
|
321
401
|
return this._nunjucksEnvNoAutoescape;
|
|
322
402
|
}
|
|
403
|
+
/** The environment for {@link RenderTemplate} with `autoescape: false`, built on first use with the registered extensions. */
|
|
404
|
+
getRawTemplateEnv() {
|
|
405
|
+
if (!this._nunjucksEnvRawTemplates) {
|
|
406
|
+
this._nunjucksEnvRawTemplates = this.createConfiguredNunjucksEnv(false);
|
|
407
|
+
this.registerExtensions(this._nunjucksEnvRawTemplates, this._contextUser);
|
|
408
|
+
}
|
|
409
|
+
return this._nunjucksEnvRawTemplates;
|
|
410
|
+
}
|
|
411
|
+
/** Clears the compiled-template cache and the cached {@link GetReferencedVariables} results. */
|
|
323
412
|
ClearTemplateCache() {
|
|
324
|
-
this._templateCache
|
|
413
|
+
this._templateCache = new WeakMap();
|
|
414
|
+
this._simpleTemplateCache.clear();
|
|
415
|
+
this._referencedVariablesCache.clear();
|
|
325
416
|
}
|
|
326
417
|
/**
|
|
327
418
|
* Promisifies the Nunjucks template rendering process.
|
|
@@ -329,6 +420,7 @@ export class TemplateEngineServer extends BaseSingleton {
|
|
|
329
420
|
* @param data the data to render the template with
|
|
330
421
|
*/
|
|
331
422
|
async renderTemplateAsync(template, data) {
|
|
423
|
+
HardenNunjucksRuntime(); // no-op unless something replaced a guarded nunjucks hook
|
|
332
424
|
return new Promise((resolve, reject) => {
|
|
333
425
|
template.render(data, (err, result) => {
|
|
334
426
|
if (err) {
|
|
@@ -359,16 +451,24 @@ export class TemplateEngineServer extends BaseSingleton {
|
|
|
359
451
|
const mergedData = { ...data };
|
|
360
452
|
// Get all parameters applicable to this content
|
|
361
453
|
const params = templateEntity.GetParametersForContent(contentId);
|
|
454
|
+
if (!params || params.length === 0) {
|
|
455
|
+
return mergedData;
|
|
456
|
+
}
|
|
362
457
|
// Group parameters by name to handle precedence
|
|
363
458
|
const paramsByName = new Map();
|
|
364
|
-
// First add global parameters
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
459
|
+
// First add global parameters, then override with content-specific parameters
|
|
460
|
+
for (let i = 0; i < params.length; i++) {
|
|
461
|
+
const p = params[i];
|
|
462
|
+
if (!p.TemplateContentID) {
|
|
463
|
+
paramsByName.set(p.Name, p);
|
|
464
|
+
}
|
|
465
|
+
}
|
|
466
|
+
for (let i = 0; i < params.length; i++) {
|
|
467
|
+
const p = params[i];
|
|
468
|
+
if (p.TemplateContentID && UUIDsEqual(p.TemplateContentID, contentId)) {
|
|
469
|
+
paramsByName.set(p.Name, p);
|
|
470
|
+
}
|
|
471
|
+
}
|
|
372
472
|
// Apply default values for missing parameters
|
|
373
473
|
paramsByName.forEach((param, name) => {
|
|
374
474
|
// Only apply default if the parameter is not already provided
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TemplateEngine.js","sourceRoot":"","sources":["../src/TemplateEngine.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"TemplateEngine.js","sourceRoot":"","sources":["../src/TemplateEngine.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview The error the template sandbox throws.
|
|
3
|
+
* @module @memberjunction/templates
|
|
4
|
+
*/
|
|
5
|
+
/** Thrown when a template uses a name, a value or a call that the template sandbox does not allow. */
|
|
6
|
+
export declare class TemplateSandboxError extends Error {
|
|
7
|
+
constructor(message: string);
|
|
8
|
+
}
|
|
9
|
+
//# sourceMappingURL=TemplateSandboxError.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TemplateSandboxError.d.ts","sourceRoot":"","sources":["../src/TemplateSandboxError.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,sGAAsG;AACtG,qBAAa,oBAAqB,SAAQ,KAAK;gBAC/B,OAAO,EAAE,MAAM;CAI9B"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview The error the template sandbox throws.
|
|
3
|
+
* @module @memberjunction/templates
|
|
4
|
+
*/
|
|
5
|
+
/** Thrown when a template uses a name, a value or a call that the template sandbox does not allow. */
|
|
6
|
+
export class TemplateSandboxError extends Error {
|
|
7
|
+
constructor(message) {
|
|
8
|
+
super(message);
|
|
9
|
+
this.name = 'TemplateSandboxError';
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
//# sourceMappingURL=TemplateSandboxError.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TemplateSandboxError.js","sourceRoot":"","sources":["../src/TemplateSandboxError.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,sGAAsG;AACtG,MAAM,OAAO,oBAAqB,SAAQ,KAAK;IAC3C,YAAY,OAAe;QACvB,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,sBAAsB,CAAC;IACvC,CAAC;CACJ"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import nunjucks from 'nunjucks';
|
|
2
|
+
/** Variables a template reads. */
|
|
3
|
+
export interface ReferencedVariablesResult {
|
|
4
|
+
/** Top-level names the template and the templates it pulls in read. Also holds loop, `set`, filter and keyword names. */
|
|
5
|
+
readonly Names: ReadonlySet<string>;
|
|
6
|
+
/** False when part of the template could not be analyzed, so `Names` may miss entries. */
|
|
7
|
+
readonly Complete: boolean;
|
|
8
|
+
/** Why `Complete` is false. */
|
|
9
|
+
readonly Reason?: string;
|
|
10
|
+
/** True when the text, or a template it pulls in, does not parse. Registering an extension can change such a result. */
|
|
11
|
+
readonly ParseFailed?: boolean;
|
|
12
|
+
}
|
|
13
|
+
/** Inputs for {@link CollectReferencedVariables}. */
|
|
14
|
+
export interface ReferencedVariablesOptions {
|
|
15
|
+
/** Extensions whose custom tags the parser must understand. */
|
|
16
|
+
Extensions: nunjucks.Extension[];
|
|
17
|
+
/** Texts of every content of the stored template with this name, or null when there is no such template. */
|
|
18
|
+
ResolveTemplateTexts: (templateName: string) => string[] | null;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Parses a Nunjucks template and returns the top-level variable names it reads, following stored
|
|
22
|
+
* templates it pulls in by literal name. The result is incomplete when a template is named by an
|
|
23
|
+
* expression, a named template is missing or cannot be loaded, the text does not parse, or a tag
|
|
24
|
+
* comes from an extension the analysis does not know.
|
|
25
|
+
*/
|
|
26
|
+
export declare function CollectReferencedVariables(templateText: string, options: ReferencedVariablesOptions): ReferencedVariablesResult;
|
|
27
|
+
//# sourceMappingURL=TemplateVariableAnalysis.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TemplateVariableAnalysis.d.ts","sourceRoot":"","sources":["../src/TemplateVariableAnalysis.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,UAAU,CAAC;AA0BhC,kCAAkC;AAClC,MAAM,WAAW,yBAAyB;IACtC,yHAAyH;IACzH,QAAQ,CAAC,KAAK,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IACpC,0FAA0F;IAC1F,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;IAC3B,+BAA+B;IAC/B,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,wHAAwH;IACxH,QAAQ,CAAC,WAAW,CAAC,EAAE,OAAO,CAAC;CAClC;AAED,qDAAqD;AACrD,MAAM,WAAW,0BAA0B;IACvC,+DAA+D;IAC/D,UAAU,EAAE,QAAQ,CAAC,SAAS,EAAE,CAAC;IACjC,4GAA4G;IAC5G,oBAAoB,EAAE,CAAC,YAAY,EAAE,MAAM,KAAK,MAAM,EAAE,GAAG,IAAI,CAAC;CACnE;AAyBD;;;;;GAKG;AACH,wBAAgB,0BAA0B,CAAC,YAAY,EAAE,MAAM,EAAE,OAAO,EAAE,0BAA0B,GAAG,yBAAyB,CAQ/H"}
|
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
import nunjucks from 'nunjucks';
|
|
2
|
+
/** The parser nunjucks compiles templates with. */
|
|
3
|
+
const templateParser = nunjucks.parser;
|
|
4
|
+
/** Tags that pull in another template, by AST node type. The node keeps the template name in its `template` field. */
|
|
5
|
+
const TEMPLATE_REFERENCE_TAGS = new Map([
|
|
6
|
+
['Include', 'include'],
|
|
7
|
+
['Import', 'import'],
|
|
8
|
+
['FromImport', 'from'],
|
|
9
|
+
['Extends', 'extends'],
|
|
10
|
+
]);
|
|
11
|
+
/** AST node types of custom extension tags. */
|
|
12
|
+
const EXTENSION_CALL_NODES = new Set(['CallExtension', 'CallExtensionAsync']);
|
|
13
|
+
/** Registration key of the `{% template %}` embed extension. The analysis follows the template it names. */
|
|
14
|
+
const TEMPLATE_EMBED_EXTENSION = 'TemplateEmbed';
|
|
15
|
+
/** Registration keys of extensions that read only the arguments and body the walk visits. */
|
|
16
|
+
const ARGUMENT_ONLY_EXTENSIONS = new Set(['AIPrompt']);
|
|
17
|
+
/**
|
|
18
|
+
* Parses a Nunjucks template and returns the top-level variable names it reads, following stored
|
|
19
|
+
* templates it pulls in by literal name. The result is incomplete when a template is named by an
|
|
20
|
+
* expression, a named template is missing or cannot be loaded, the text does not parse, or a tag
|
|
21
|
+
* comes from an extension the analysis does not know.
|
|
22
|
+
*/
|
|
23
|
+
export function CollectReferencedVariables(templateText, options) {
|
|
24
|
+
const state = { names: new Set(), problems: new Set(), parseFailed: false, visitedTemplates: new Set(), visitedObjects: new Set(), options };
|
|
25
|
+
collectFromText(templateText, state);
|
|
26
|
+
if (state.problems.size === 0) {
|
|
27
|
+
return { Names: state.names, Complete: true };
|
|
28
|
+
}
|
|
29
|
+
const incomplete = { Names: state.names, Complete: false, Reason: [...state.problems].join('; ') };
|
|
30
|
+
return state.parseFailed ? { ...incomplete, ParseFailed: true } : incomplete;
|
|
31
|
+
}
|
|
32
|
+
function collectFromText(text, state) {
|
|
33
|
+
let root;
|
|
34
|
+
try {
|
|
35
|
+
root = templateParser.parse(text, state.options.Extensions);
|
|
36
|
+
}
|
|
37
|
+
catch (error) {
|
|
38
|
+
state.parseFailed = true;
|
|
39
|
+
state.problems.add(`template could not be parsed: ${error instanceof Error ? error.message : String(error)}`);
|
|
40
|
+
return;
|
|
41
|
+
}
|
|
42
|
+
walk(root, state);
|
|
43
|
+
}
|
|
44
|
+
function isAstNode(value) {
|
|
45
|
+
return typeof value === 'object' && value !== null && !Array.isArray(value) && typeof value.typename === 'string';
|
|
46
|
+
}
|
|
47
|
+
/** Visits each node and list reachable from `value` once. */
|
|
48
|
+
function walk(value, state) {
|
|
49
|
+
if (typeof value !== 'object' || value === null || state.visitedObjects.has(value))
|
|
50
|
+
return;
|
|
51
|
+
state.visitedObjects.add(value);
|
|
52
|
+
if (Array.isArray(value)) {
|
|
53
|
+
for (const item of value)
|
|
54
|
+
walk(item, state);
|
|
55
|
+
}
|
|
56
|
+
else if (isAstNode(value)) {
|
|
57
|
+
visitNode(value, state);
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
function visitNode(node, state) {
|
|
61
|
+
if (node.typename === 'Symbol' && typeof node.value === 'string') {
|
|
62
|
+
state.names.add(node.value);
|
|
63
|
+
}
|
|
64
|
+
const referenceTag = TEMPLATE_REFERENCE_TAGS.get(node.typename);
|
|
65
|
+
if (referenceTag) {
|
|
66
|
+
followTemplate(node.template, referenceTag, state);
|
|
67
|
+
}
|
|
68
|
+
if (EXTENSION_CALL_NODES.has(node.typename)) {
|
|
69
|
+
checkExtensionCall(node, state);
|
|
70
|
+
}
|
|
71
|
+
for (const property of childProperties(node)) {
|
|
72
|
+
walk(node[property], state);
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Names of the node's properties that can hold child nodes: its declared `fields` and every own property.
|
|
77
|
+
* The block form of `{% set %}` keeps its body in `body`, which is not a declared field.
|
|
78
|
+
*/
|
|
79
|
+
function childProperties(node) {
|
|
80
|
+
return new Set([...node.fields, ...Object.keys(node)]);
|
|
81
|
+
}
|
|
82
|
+
/** Follows a `{% template %}` embed, accepts argument-only extensions, and records a problem for any other extension. */
|
|
83
|
+
function checkExtensionCall(node, state) {
|
|
84
|
+
const extensionName = node.extName;
|
|
85
|
+
if (extensionName === TEMPLATE_EMBED_EXTENSION) {
|
|
86
|
+
followTemplate(firstArgument(node), 'template', state);
|
|
87
|
+
}
|
|
88
|
+
else if (typeof extensionName !== 'string') {
|
|
89
|
+
state.problems.add(`${describeTag(extensionName, state)} comes from an extension with no registered name`);
|
|
90
|
+
}
|
|
91
|
+
else if (!ARGUMENT_ONLY_EXTENSIONS.has(extensionName)) {
|
|
92
|
+
state.problems.add(`${describeTag(extensionName, state)} comes from extension "${extensionName}", which the analysis does not know`);
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
function firstArgument(node) {
|
|
96
|
+
const args = node.args;
|
|
97
|
+
return isAstNode(args) && Array.isArray(args.children) ? args.children[0] : undefined;
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* Names the tag of an extension call from its extension's tag list, such as `the {% custom %} tag`.
|
|
101
|
+
* A call node holds the extension's registration name, or the extension itself when it has none.
|
|
102
|
+
*/
|
|
103
|
+
function describeTag(extensionName, state) {
|
|
104
|
+
const extensions = state.options.Extensions;
|
|
105
|
+
const extension = typeof extensionName === 'string'
|
|
106
|
+
? extensions.find((candidate) => candidate.__name === extensionName)
|
|
107
|
+
: extensions.find((candidate) => Object.is(candidate, extensionName));
|
|
108
|
+
const tags = extension?.tags ?? [];
|
|
109
|
+
return tags.length > 0 ? `the ${tags.map((tag) => `{% ${tag} %}`).join(' or ')} tag` : 'a custom tag';
|
|
110
|
+
}
|
|
111
|
+
function followTemplate(nameNode, tag, state) {
|
|
112
|
+
if (!isAstNode(nameNode) || nameNode.typename !== 'Literal' || typeof nameNode.value !== 'string') {
|
|
113
|
+
state.problems.add(`a {% ${tag} %} tag names its template with an expression`);
|
|
114
|
+
return;
|
|
115
|
+
}
|
|
116
|
+
const name = nameNode.value;
|
|
117
|
+
const key = name.trim().toLowerCase();
|
|
118
|
+
if (state.visitedTemplates.has(key))
|
|
119
|
+
return;
|
|
120
|
+
state.visitedTemplates.add(key);
|
|
121
|
+
for (const text of resolveTemplateTexts(name, state))
|
|
122
|
+
collectFromText(text, state);
|
|
123
|
+
}
|
|
124
|
+
/** Texts of every content of the named template. A missing template, or one that cannot be loaded, records a problem and gives none. */
|
|
125
|
+
function resolveTemplateTexts(name, state) {
|
|
126
|
+
let texts;
|
|
127
|
+
try {
|
|
128
|
+
texts = state.options.ResolveTemplateTexts(name);
|
|
129
|
+
}
|
|
130
|
+
catch (error) {
|
|
131
|
+
state.problems.add(`template "${name}" could not be loaded: ${error instanceof Error ? error.message : String(error)}`);
|
|
132
|
+
return [];
|
|
133
|
+
}
|
|
134
|
+
if (!texts) {
|
|
135
|
+
state.problems.add(`template "${name}" was not found`);
|
|
136
|
+
return [];
|
|
137
|
+
}
|
|
138
|
+
return texts;
|
|
139
|
+
}
|
|
140
|
+
//# sourceMappingURL=TemplateVariableAnalysis.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TemplateVariableAnalysis.js","sourceRoot":"","sources":["../src/TemplateVariableAnalysis.ts"],"names":[],"mappings":"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"}
|
|
@@ -19,6 +19,14 @@ export type TemplateEmbedConfig = {
|
|
|
19
19
|
*/
|
|
20
20
|
data?: any;
|
|
21
21
|
};
|
|
22
|
+
/** The render context's escape mode; nunjucks keeps it at `env.opts` at runtime (`@types/nunjucks` says `options`). */
|
|
23
|
+
type RenderEnvironmentView = {
|
|
24
|
+
env?: {
|
|
25
|
+
opts?: {
|
|
26
|
+
autoescape?: boolean;
|
|
27
|
+
};
|
|
28
|
+
};
|
|
29
|
+
};
|
|
22
30
|
/**
|
|
23
31
|
* Extension that enables recursive template embedding using {% template "TemplateName" %} syntax.
|
|
24
32
|
*
|
|
@@ -76,8 +84,12 @@ export declare class TemplateEmbedExtension extends TemplateExtensionBase {
|
|
|
76
84
|
* Prepares the data context for the embedded template by merging current context with additional data.
|
|
77
85
|
*/
|
|
78
86
|
private prepareDataContext;
|
|
87
|
+
/** Whether the render that reached this tag escapes its output; an embed inside a raw render renders raw too. */
|
|
88
|
+
protected static RendersEscaped(context: RenderEnvironmentView): boolean;
|
|
79
89
|
/**
|
|
80
|
-
* Renders the embedded template content with the provided data context.
|
|
90
|
+
* Renders the embedded template content with the provided data context. A raw render goes through
|
|
91
|
+
* {@link TemplateEngineServer.RenderTemplate}, whose raw environment carries the extensions.
|
|
92
|
+
* The raw path renders through RenderTemplate so the registered extensions (nested embeds) stay available; unlike the escaped RenderTemplateSimple path it also merges the template's parameter defaults.
|
|
81
93
|
*/
|
|
82
94
|
private renderEmbeddedTemplate;
|
|
83
95
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TemplateEmbed.extension.d.ts","sourceRoot":"","sources":["../../src/extensions/TemplateEmbed.extension.ts"],"names":[],"mappings":"AAAA,OAAO,EAAY,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAE1D,OAAO,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAKlF,KAAK,MAAM,GAAG,GAAG,CAAC;AAClB,KAAK,KAAK,GAAG,GAAG,CAAC;AACjB,KAAK,KAAK,GAAG,GAAG,CAAC;AACjB,KAAK,OAAO,GAAG,GAAG,CAAC;AAEnB;;GAEG;AACH,MAAM,MAAM,mBAAmB,GAAG;IAC9B;;;OAGG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;IACd;;;OAGG;IACH,IAAI,CAAC,EAAE,GAAG,CAAC;CACd,CAAC;
|
|
1
|
+
{"version":3,"file":"TemplateEmbed.extension.d.ts","sourceRoot":"","sources":["../../src/extensions/TemplateEmbed.extension.ts"],"names":[],"mappings":"AAAA,OAAO,EAAY,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAE1D,OAAO,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAKlF,KAAK,MAAM,GAAG,GAAG,CAAC;AAClB,KAAK,KAAK,GAAG,GAAG,CAAC;AACjB,KAAK,KAAK,GAAG,GAAG,CAAC;AACjB,KAAK,OAAO,GAAG,GAAG,CAAC;AAEnB;;GAEG;AACH,MAAM,MAAM,mBAAmB,GAAG;IAC9B;;;OAGG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;IACd;;;OAGG;IACH,IAAI,CAAC,EAAE,GAAG,CAAC;CACd,CAAC;AAEF,uHAAuH;AACvH,KAAK,qBAAqB,GAAG;IAAE,GAAG,CAAC,EAAE;QAAE,IAAI,CAAC,EAAE;YAAE,UAAU,CAAC,EAAE,OAAO,CAAA;SAAE,CAAA;KAAE,CAAA;CAAE,CAAC;AAiB3E;;;;;;;;;;;;;;GAcG;AACH,qBACa,sBAAuB,SAAQ,qBAAqB;gBAEjD,WAAW,EAAE,QAAQ;IAK1B,KAAK,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK;IAavD;;;;;;;;;;;;;;;;;;;;;OAqBG;IACI,GAAG,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,QAAQ,EAAE,gBAAgB;IAyHlE;;;;;;OAMG;IACH,OAAO,CAAC,kBAAkB;IAwB1B;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAY1B;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAU1B,iHAAiH;IACjH,SAAS,CAAC,MAAM,CAAC,cAAc,CAAC,OAAO,EAAE,qBAAqB,GAAG,OAAO;IAIxE;;;;OAIG;YACW,sBAAsB;CAiBvC"}
|
|
@@ -7,6 +7,7 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
|
|
|
7
7
|
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
8
8
|
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
9
9
|
};
|
|
10
|
+
var TemplateEmbedExtension_1;
|
|
10
11
|
import { LogError, UserInfo } from "@memberjunction/core";
|
|
11
12
|
import { RegisterClass } from "@memberjunction/global";
|
|
12
13
|
import { TemplateExtensionBase } from "./TemplateExtensionBase.js";
|
|
@@ -26,7 +27,7 @@ import { TemplateEngineServer } from '../TemplateEngine.js';
|
|
|
26
27
|
* {% template "TemplateName", data={extra: "value"} %}
|
|
27
28
|
* {% template "TemplateName", type="PlainText", data={key: "value"} %}
|
|
28
29
|
*/
|
|
29
|
-
let TemplateEmbedExtension = class TemplateEmbedExtension extends TemplateExtensionBase {
|
|
30
|
+
let TemplateEmbedExtension = TemplateEmbedExtension_1 = class TemplateEmbedExtension extends TemplateExtensionBase {
|
|
30
31
|
constructor(contextUser) {
|
|
31
32
|
super(contextUser);
|
|
32
33
|
this.tags = ['template'];
|
|
@@ -149,8 +150,8 @@ let TemplateEmbedExtension = class TemplateEmbedExtension extends TemplateExtens
|
|
|
149
150
|
renderContext.templateStack.push(templateName);
|
|
150
151
|
const originalContentType = renderContext.currentContentType;
|
|
151
152
|
renderContext.currentContentType = templateContent.Type;
|
|
152
|
-
// Render the embedded template asynchronously
|
|
153
|
-
this.renderEmbeddedTemplate(templateEngine, templateContent, embeddedData)
|
|
153
|
+
// Render the embedded template asynchronously, in the outer render's escape mode
|
|
154
|
+
this.renderEmbeddedTemplate(templateEngine, targetTemplate, templateContent, embeddedData, TemplateEmbedExtension_1.RendersEscaped(context))
|
|
154
155
|
.then((result) => {
|
|
155
156
|
// Remove template from stack after successful rendering
|
|
156
157
|
renderContext.templateStack.pop();
|
|
@@ -221,19 +222,26 @@ let TemplateEmbedExtension = class TemplateEmbedExtension extends TemplateExtens
|
|
|
221
222
|
// Additional data takes precedence over current context
|
|
222
223
|
return { ...currentContext, ...additionalData };
|
|
223
224
|
}
|
|
225
|
+
/** Whether the render that reached this tag escapes its output; an embed inside a raw render renders raw too. */
|
|
226
|
+
static RendersEscaped(context) {
|
|
227
|
+
return context.env?.opts?.autoescape !== false;
|
|
228
|
+
}
|
|
224
229
|
/**
|
|
225
|
-
* Renders the embedded template content with the provided data context.
|
|
230
|
+
* Renders the embedded template content with the provided data context. A raw render goes through
|
|
231
|
+
* {@link TemplateEngineServer.RenderTemplate}, whose raw environment carries the extensions.
|
|
232
|
+
* The raw path renders through RenderTemplate so the registered extensions (nested embeds) stay available; unlike the escaped RenderTemplateSimple path it also merges the template's parameter defaults.
|
|
226
233
|
*/
|
|
227
|
-
async renderEmbeddedTemplate(templateEngine, templateContent, data) {
|
|
228
|
-
|
|
229
|
-
|
|
234
|
+
async renderEmbeddedTemplate(templateEngine, template, templateContent, data, autoescape) {
|
|
235
|
+
const result = autoescape
|
|
236
|
+
? await templateEngine.RenderTemplateSimple(templateContent.TemplateText, data)
|
|
237
|
+
: await templateEngine.RenderTemplate(template, templateContent, data, true, true, { autoescape: false });
|
|
230
238
|
if (!result.Success) {
|
|
231
239
|
throw new Error(`Failed to render embedded template: ${result.Message}`);
|
|
232
240
|
}
|
|
233
241
|
return result.Output;
|
|
234
242
|
}
|
|
235
243
|
};
|
|
236
|
-
TemplateEmbedExtension = __decorate([
|
|
244
|
+
TemplateEmbedExtension = TemplateEmbedExtension_1 = __decorate([
|
|
237
245
|
RegisterClass(TemplateExtensionBase, 'TemplateEmbed'),
|
|
238
246
|
__metadata("design:paramtypes", [UserInfo])
|
|
239
247
|
], TemplateEmbedExtension);
|