@memberjunction/templates 6.2.0-edge.4 → 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 CHANGED
@@ -85,6 +85,10 @@ if (result.Success) {
85
85
  }
86
86
  ```
87
87
 
88
+ Stored templates are HTML-escaped by default. For plain text a model reads (AI prompt templates), pass
89
+ `{ autoescape: false }` as the sixth argument: `Affineur & Owner` then stays `Affineur & Owner`. The raw render keeps
90
+ the registered extensions, and a `{% template %}` embed inside it renders raw too.
91
+
88
92
  ### Simple Template Rendering
89
93
 
90
94
  For ad-hoc templates not stored in the database:
@@ -109,6 +113,23 @@ const subject = await engine.RenderTemplateSimple(
109
113
  // subject.Output: "Acme & Co — your invite" (no entity encoding)
110
114
  ```
111
115
 
116
+ ### Variables a Template Reads
117
+
118
+ `GetReferencedVariables()` parses a template's text and returns the top-level variable names it reads:
119
+
120
+ ```typescript
121
+ const result = engine.GetReferencedVariables('{% for r in rows %}{{ r.name }}{% endfor %}{{ user.email }}');
122
+ // result.Names: rows, r, user
123
+ // result.Complete: true
124
+ ```
125
+
126
+ - `Names` holds top-level names only: `{{ user.email }}` gives `user`. It also holds loop, `set`, filter and keyword-argument names, so treat it as a superset of the data keys the template reads.
127
+ - The analysis follows stored templates named by a string literal in `{% include %}`, `{% import %}`, `{% from %}`, `{% extends %}` and `{% template %}`, and reads every content of each one. It does not follow a template named by an expression.
128
+ - Of the custom tags, the analysis follows `{% template %}` and reads the arguments and body of `{% AIPrompt %}`. A tag from any other extension makes the result incomplete, because the extension's code can read data that the template text does not show.
129
+ - `Complete: false` means "unknown", not "none". `Reason` tells why: a template is named by an expression, a named template does not exist or cannot be loaded, the text does not parse, or a tag comes from an extension the analysis does not know. A caller that keeps only the referenced data must keep all of it when the result is incomplete.
130
+ - The engine returns the same frozen result for the same template text until `ClearTemplateCache()`. It does not cache a result with `ParseFailed: true` (the text, or a template it pulls in, does not parse).
131
+ - The method sets up the Nunjucks environment and the registered extensions first, so it gives the same answer before and after the first `Config()`.
132
+
112
133
  ### Custom Nunjucks Filters
113
134
 
114
135
  The engine provides built-in filters for JSON operations:
@@ -215,9 +236,10 @@ graph LR
215
236
  | `Config()` | method | Load metadata and initialize Nunjucks environment |
216
237
  | `RenderTemplate()` | method | Render a stored template with validation |
217
238
  | `RenderTemplateSimple()` | method | Render an ad-hoc template string |
239
+ | `GetReferencedVariables()` | method | List the top-level variables a template's text reads |
218
240
  | `AddTemplate()` | method | Add a template to the Nunjucks loader |
219
241
  | `SetupNunjucks()` | method | Re-initialize the Nunjucks environment |
220
- | `ClearTemplateCache()` | method | Clear cached compiled templates |
242
+ | `ClearTemplateCache()` | method | Clear cached compiled templates and variable analysis results |
221
243
 
222
244
  ### Rendering Process
223
245
 
@@ -195,10 +195,11 @@ function guardRegistryLookup(registry) {
195
195
  }
196
196
  /**
197
197
  * `obj.key` and `obj[key]`. The key is converted to a string once, so a computed key cannot change
198
- * between the check and the read. The member is checked before nunjucks reads it again; templates
199
- * cannot define accessors (the accessor helpers are restricted names), so both reads see the same value.
198
+ * between the check and the read. The member is read once (`memberVal`), checked against restricted/nunjucks
199
+ * values, and returned directly (or bound to `obj` when it is a method, matching nunjucks' `memberLookup`
200
+ * without evaluating `obj[key]` a second time).
200
201
  */
201
- function guardMemberLookup(original) {
202
+ function guardMemberLookup(_original) {
202
203
  return (obj, val) => {
203
204
  if (obj === undefined || obj === null || typeof val === 'symbol') {
204
205
  return undefined;
@@ -210,9 +211,19 @@ function guardMemberLookup(original) {
210
211
  if (RESTRICTED_MEMBER_NAMES.has(key) && !isOwnDataValue(obj, key)) {
211
212
  return undefined;
212
213
  }
213
- assertAllowed(obj, `members of a restricted value (reading "${key}")`);
214
- assertAllowed(readMember(obj, key), `the member "${key}"`);
215
- return original(obj, key);
214
+ if (RESTRICTED_VALUES.has(obj)) {
215
+ throw new TemplateSandboxError(`Templates may not access members of a restricted value (reading "${key}")`);
216
+ }
217
+ const memberVal = readMember(obj, key);
218
+ if (isRestrictedOrNunjucksValue(memberVal)) {
219
+ throw new TemplateSandboxError(`Templates may not access the member "${key}"`);
220
+ }
221
+ if (typeof memberVal === 'function') {
222
+ return function (...args) {
223
+ return memberVal.apply(obj, args);
224
+ };
225
+ }
226
+ return memberVal;
216
227
  };
217
228
  }
218
229
  /**
@@ -229,16 +240,22 @@ function guardContextOrFrameLookup() {
229
240
  if (value === undefined || (RESTRICTED_MEMBER_NAMES.has(name) && typeof value === 'function')) {
230
241
  return undefined;
231
242
  }
232
- assertAllowed(value, `the name "${name}"`, context);
243
+ if (isRestrictedOrNunjucksValue(value, context)) {
244
+ throw new TemplateSandboxError(`Templates may not access the name "${name}"`);
245
+ }
233
246
  return value;
234
247
  };
235
248
  }
236
249
  /** A call such as `{{ fn(x) }}`. nunjucks passes the render context as `this`, so a call may not return it. */
237
250
  function guardCallWrap(original) {
238
251
  return (obj, name, context, args) => {
239
- assertAllowed(obj, `the function "${name}"`, context);
252
+ if (isRestrictedOrNunjucksValue(obj, context)) {
253
+ throw new TemplateSandboxError(`Templates may not access the function "${name}"`);
254
+ }
240
255
  const result = original(obj, name, context, args);
241
- assertAllowed(result, `the value returned by "${name}"`, context);
256
+ if (isRestrictedOrNunjucksValue(result, context)) {
257
+ throw new TemplateSandboxError(`Templates may not access the value returned by "${name}"`);
258
+ }
242
259
  return result;
243
260
  };
244
261
  }
@@ -271,7 +288,14 @@ function isNunjucksObject(value) {
271
288
  if (typeof value !== 'object' || value === null) {
272
289
  return false;
273
290
  }
274
- return NUNJUCKS_MODULES.has(value) || NUNJUCKS_OBJECT_PROTOTYPES.some((prototype) => prototype.isPrototypeOf(value));
291
+ if (NUNJUCKS_MODULES.has(value)) {
292
+ return true;
293
+ }
294
+ const proto = Object.getPrototypeOf(value);
295
+ if (proto === Object.prototype || proto === Array.prototype || proto === null) {
296
+ return false;
297
+ }
298
+ return NUNJUCKS_OBJECT_PROTOTYPES.some((prototype) => prototype.isPrototypeOf(value));
275
299
  }
276
300
  /** Reads a member the way a template does, including members of primitive strings and numbers. */
277
301
  function readMember(obj, key) {
@@ -283,10 +307,11 @@ function pairKeyName(pair) {
283
307
  const value = typeof key === 'object' && key !== null ? readMember(key, 'value') : undefined;
284
308
  return typeof value === 'string' ? value : undefined;
285
309
  }
286
- /** Throws when a lookup or call would give a template a restricted value, the render context or another nunjucks object. */
287
- function assertAllowed(value, subject, context) {
288
- if (RESTRICTED_VALUES.has(value) || isNunjucksObject(value) || (context !== undefined && value === context)) {
289
- throw new TemplateSandboxError(`Templates may not access ${subject}`);
310
+ /** Returns true when a lookup or call would give a template a restricted value, the render context or another nunjucks object. */
311
+ function isRestrictedOrNunjucksValue(value, context) {
312
+ if (value === null || (typeof value !== 'object' && typeof value !== 'function')) {
313
+ return false;
290
314
  }
315
+ return RESTRICTED_VALUES.has(value) || isNunjucksObject(value) || (context !== undefined && value === context);
291
316
  }
292
317
  //# sourceMappingURL=NunjucksSandbox.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"NunjucksSandbox.js","sourceRoot":"","sources":["../src/NunjucksSandbox.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"NunjucksSandbox.js","sourceRoot":"","sources":["../src/NunjucksSandbox.ts"],"names":[],"mappings":"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"}
@@ -2,7 +2,8 @@ import { IMetadataProvider, UserInfo } from "@memberjunction/core";
2
2
  import { MJTemplateCategoryEntity, MJTemplateContentEntity, MJTemplateContentTypeEntity, MJTemplateEntityExtended, MJTemplateParamEntity } from "@memberjunction/core-entities";
3
3
  import nunjucks from 'nunjucks';
4
4
  import { BaseSingleton } from "@memberjunction/global";
5
- import { TemplateRenderResult } from '@memberjunction/templates-base-types';
5
+ import { ReferencedVariablesResult } from "./TemplateVariableAnalysis.js";
6
+ import { TemplateRenderOptions, TemplateRenderResult } from '@memberjunction/templates-base-types';
6
7
  /**
7
8
  * This class extends the nunjucks loader to allow adding templates directly to the loader
8
9
  */
@@ -54,8 +55,13 @@ export declare class TemplateEngineServer extends BaseSingleton<TemplateEngineSe
54
55
  * not ours, so we drive the render-layer init explicitly here after the cache is loaded.
55
56
  */
56
57
  Config(forceRefresh?: boolean, contextUser?: UserInfo, provider?: IMetadataProvider): Promise<void>;
57
- /** One-time nunjucks environment + registered-extension setup, performed after the base templates load. */
58
+ /** One-time nunjucks environment + registered-extension setup. {@link Config} and {@link GetReferencedVariables} call it. */
58
59
  private ensureNunjucksInitialized;
60
+ /**
61
+ * Registers every {@link TemplateExtensionBase} subclass with the given environment.
62
+ * @returns the extension instances registered on `env`
63
+ */
64
+ private registerExtensions;
59
65
  /** True once the underlying TemplateEngineBase cache has loaded. */
60
66
  get Loaded(): boolean;
61
67
  get ContextUser(): UserInfo;
@@ -66,6 +72,7 @@ export declare class TemplateEngineServer extends BaseSingleton<TemplateEngineSe
66
72
  get TemplateContents(): MJTemplateContentEntity[];
67
73
  get TemplateParams(): MJTemplateParamEntity[];
68
74
  FindTemplate(templateName: string): MJTemplateEntityExtended;
75
+ FindTemplateByID(templateId: string): MJTemplateEntityExtended | undefined;
69
76
  SetupNunjucks(): void;
70
77
  private _nunjucksEnv;
71
78
  /**
@@ -76,7 +83,11 @@ export declare class TemplateEngineServer extends BaseSingleton<TemplateEngineSe
76
83
  * renders, not the stored-Template extension surface. Reset to `undefined` whenever the loader is rebuilt.
77
84
  */
78
85
  private _nunjucksEnvNoAutoescape?;
86
+ /** Environment with autoescape off and the registered extensions, for {@link RenderTemplate} with `autoescape: false`. Created lazily. */
87
+ private _nunjucksEnvRawTemplates?;
79
88
  private _templateLoader;
89
+ /** The extension instances registered on {@link _nunjucksEnv}. The variable analysis parses their custom tags. */
90
+ private _registeredExtensions;
80
91
  /**
81
92
  * Builds a Nunjucks environment bound to the shared template loader with our custom filters applied.
82
93
  * Single source of truth for env construction so the autoescape and no-autoescape environments never drift.
@@ -89,9 +100,18 @@ export declare class TemplateEngineServer extends BaseSingleton<TemplateEngineSe
89
100
  */
90
101
  private addCustomFilters;
91
102
  /**
92
- * Cache for templates that have been created by nunjucks so we don't have to create them over and over
103
+ * Compiled templates per environment, then per template content ID, so a raw compile is never served to an
104
+ * escaping render.
93
105
  */
94
106
  private _templateCache;
107
+ /**
108
+ * Bounded LRU cache for ad-hoc templates rendered via {@link RenderTemplateSimple}.
109
+ * Keyed by `${autoescape ? '1:' : '0:'}${templateText}`.
110
+ */
111
+ private static readonly MAX_SIMPLE_TEMPLATE_CACHE_SIZE;
112
+ private _simpleTemplateCache;
113
+ /** {@link GetReferencedVariables} results by template text. */
114
+ private _referencedVariablesCache;
95
115
  AddTemplate(templateEntity: MJTemplateEntityExtended): void;
96
116
  /**
97
117
  * Renders a template with the given data.
@@ -100,8 +120,10 @@ export declare class TemplateEngineServer extends BaseSingleton<TemplateEngineSe
100
120
  * @param data
101
121
  * @param SkipValidation if true, validation is skipped entirely (or reduced to warnings depending on SuppressWarnings)
102
122
  * @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.
123
+ * @param options `autoescape` (default `true`) toggles HTML escaping; pass `false` when the output is plain text for
124
+ * a model, where `Affineur & Owner` must not become `Affineur &amp; Owner`
103
125
  */
104
- RenderTemplate(templateEntity: MJTemplateEntityExtended, templateContent: MJTemplateContentEntity, data: any, SkipValidation?: boolean, SuppressWarnings?: boolean): Promise<TemplateRenderResult>;
126
+ RenderTemplate(templateEntity: MJTemplateEntityExtended, templateContent: MJTemplateContentEntity, data: any, SkipValidation?: boolean, SuppressWarnings?: boolean, options?: TemplateRenderOptions): Promise<TemplateRenderResult>;
105
127
  /**
106
128
  * Simple rendering utilty method. Use this to render any valid Nunjucks Template within the Nunjucks environment created by the Template Engine
107
129
  * without having to use the stored metadata (Templates/Template Contents/Template Params/etc) within the MJ database. This is useful when you have
@@ -112,30 +134,40 @@ export declare class TemplateEngineServer extends BaseSingleton<TemplateEngineSe
112
134
  * `false` for plain-text contexts such as email subject lines, where `Acme & Co` must not become `Acme &amp; Co`.
113
135
  * @returns
114
136
  */
115
- RenderTemplateSimple(templateText: string, data: any, options?: {
116
- autoescape?: boolean;
117
- }): Promise<TemplateRenderResult>;
137
+ RenderTemplateSimple(templateText: string, data: any, options?: TemplateRenderOptions): Promise<TemplateRenderResult>;
138
+ /**
139
+ * Returns the top-level variable names a template's text reads, following stored templates it
140
+ * pulls in by literal name (`{% include %}`, `{% import %}`, `{% from %}`, `{% extends %}`,
141
+ * `{% template %}`). It sets up the Nunjucks environment first, so the registered extensions' tags
142
+ * parse before the first {@link Config} too. The result is frozen and cached per template text until
143
+ * {@link ClearTemplateCache}; a result whose text does not parse is not cached.
144
+ */
145
+ GetReferencedVariables(templateText: string): ReferencedVariablesResult;
118
146
  /**
119
147
  * This method is responsible for creating a new Nunjucks template, caching it, and returning it.
120
148
  * If the templateContentId already had a template created, it will return that template from the cache.
121
149
  * @param templateId - must be provided if you want to cache the template, if not provided the template will not be cached
122
150
  * @param templateText
123
151
  * @param cacheTemplate - if true, the template will be cached, otherwise it will not be cached
152
+ * @param env the environment to compile against; defaults to the shared autoescape environment
124
153
  */
125
- protected getNunjucksTemplate(templateContentId: string, templateText: string, cacheTemplate: boolean): any;
154
+ protected getNunjucksTemplate(templateContentId: string, templateText: string, cacheTemplate: boolean, env?: nunjucks.Environment): nunjucks.Template;
126
155
  /**
127
156
  * Simple utility method to create a new Nunjucks template object and bind it to a Nunjucks environment.
128
157
  * @param templateText
129
158
  * @param env the environment to bind to; defaults to the shared autoescape environment
130
159
  * @returns
131
160
  */
132
- protected createNunjucksTemplate(templateText: string, env?: nunjucks.Environment): any;
161
+ protected createNunjucksTemplate(templateText: string, env?: nunjucks.Environment): nunjucks.Template;
133
162
  /**
134
163
  * Resolves the Nunjucks environment for an ad-hoc {@link RenderTemplateSimple} render. The autoescape:false
135
164
  * variant is created lazily on first use and cached, so callers that never opt out pay nothing.
136
165
  * @param autoescape whether the returned environment HTML-escapes output
137
166
  */
138
167
  private getSimpleRenderEnv;
168
+ /** The environment for {@link RenderTemplate} with `autoescape: false`, built on first use with the registered extensions. */
169
+ private getRawTemplateEnv;
170
+ /** Clears the compiled-template cache and the cached {@link GetReferencedVariables} results. */
139
171
  ClearTemplateCache(): void;
140
172
  /**
141
173
  * Promisifies the Nunjucks template rendering process.
@@ -1 +1 @@
1
- {"version":3,"file":"TemplateEngine.d.ts","sourceRoot":"","sources":["../src/TemplateEngine.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"TemplateEngine.d.ts","sourceRoot":"","sources":["../src/TemplateEngine.ts"],"names":[],"mappings":"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"}
@@ -3,6 +3,7 @@ import nunjucks from 'nunjucks';
3
3
  import { BaseSingleton, MJGlobal, UUIDsEqual } from "@memberjunction/global";
4
4
  import { TemplateExtensionBase } from "./extensions/TemplateExtensionBase.js";
5
5
  import { HardenNunjucksRuntime } from "./NunjucksSandbox.js";
6
+ import { CollectReferencedVariables } from "./TemplateVariableAnalysis.js";
6
7
  import { TemplateEngineBase } from '@memberjunction/templates-base-types';
7
8
  // Stored templates are user-editable, so nunjucks is guarded as soon as the engine loads. The guard
8
9
  // is process-wide: it also covers nunjucks environments that other packages create.
@@ -60,10 +61,16 @@ export class TemplateEngineServer extends BaseSingleton {
60
61
  constructor() {
61
62
  super(...arguments);
62
63
  this._oneTimeLoadingComplete = false;
64
+ /** The extension instances registered on {@link _nunjucksEnv}. The variable analysis parses their custom tags. */
65
+ this._registeredExtensions = [];
63
66
  /**
64
- * Cache for templates that have been created by nunjucks so we don't have to create them over and over
67
+ * Compiled templates per environment, then per template content ID, so a raw compile is never served to an
68
+ * escaping render.
65
69
  */
66
- this._templateCache = new Map();
70
+ this._templateCache = new WeakMap();
71
+ this._simpleTemplateCache = new Map();
72
+ /** {@link GetReferencedVariables} results by template text. */
73
+ this._referencedVariablesCache = new Map();
67
74
  }
68
75
  static get Instance() {
69
76
  return super.getInstance();
@@ -95,7 +102,7 @@ export class TemplateEngineServer extends BaseSingleton {
95
102
  this.ClearTemplateCache(); // base templates (re)loaded — drop any stale compiled templates
96
103
  this.ensureNunjucksInitialized(contextUser);
97
104
  }
98
- /** One-time nunjucks environment + registered-extension setup, performed after the base templates load. */
105
+ /** One-time nunjucks environment + registered-extension setup. {@link Config} and {@link GetReferencedVariables} call it. */
99
106
  ensureNunjucksInitialized(contextUser) {
100
107
  if (this._oneTimeLoadingComplete) {
101
108
  return;
@@ -104,17 +111,27 @@ export class TemplateEngineServer extends BaseSingleton {
104
111
  this._templateLoader = new TemplateEntityLoader();
105
112
  this._nunjucksEnv = this.createConfiguredNunjucksEnv(true);
106
113
  this._nunjucksEnvNoAutoescape = undefined; // rebound lazily against the fresh loader on next no-autoescape render
107
- // get all of the extensions that are registered and register them with nunjucks
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 = [];
108
123
  const extensions = MJGlobal.Instance.ClassFactory.GetAllRegistrations(TemplateExtensionBase);
109
124
  if (extensions && extensions.length > 0) {
110
125
  for (const ext of extensions) {
111
126
  const SubClassConstructor = ext.SubClass;
112
127
  const instance = new SubClassConstructor(contextUser);
113
128
  if (ext.Key) {
114
- this._nunjucksEnv.addExtension(ext.Key, instance);
129
+ env.addExtension(ext.Key, instance);
130
+ registered.push(instance);
115
131
  }
116
132
  }
117
133
  }
134
+ return registered;
118
135
  }
119
136
  /** True once the underlying TemplateEngineBase cache has loaded. */
120
137
  get Loaded() { return this.base.Loaded; }
@@ -127,10 +144,13 @@ export class TemplateEngineServer extends BaseSingleton {
127
144
  get TemplateContents() { return this.base.TemplateContents; }
128
145
  get TemplateParams() { return this.base.TemplateParams; }
129
146
  FindTemplate(templateName) { return this.base.FindTemplate(templateName); }
147
+ FindTemplateByID(templateId) { return this.base.FindTemplateByID(templateId); }
130
148
  SetupNunjucks() {
131
149
  this._templateLoader = new TemplateEntityLoader();
132
150
  this._nunjucksEnv = this.createConfiguredNunjucksEnv(true);
133
151
  this._nunjucksEnvNoAutoescape = undefined; // rebound lazily against the fresh loader on next no-autoescape render
152
+ this._nunjucksEnvRawTemplates = undefined;
153
+ this._simpleTemplateCache.clear();
134
154
  }
135
155
  /**
136
156
  * Builds a Nunjucks environment bound to the shared template loader with our custom filters applied.
@@ -178,6 +198,11 @@ export class TemplateEngineServer extends BaseSingleton {
178
198
  }
179
199
  });
180
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; }
181
206
  AddTemplate(templateEntity) {
182
207
  this._templateLoader.AddTemplate(templateEntity.ID, templateEntity);
183
208
  }
@@ -188,8 +213,10 @@ export class TemplateEngineServer extends BaseSingleton {
188
213
  * @param data
189
214
  * @param SkipValidation if true, validation is skipped entirely (or reduced to warnings depending on SuppressWarnings)
190
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 &amp; Owner`
191
218
  */
192
- async RenderTemplate(templateEntity, templateContent, data, SkipValidation, SuppressWarnings) {
219
+ async RenderTemplate(templateEntity, templateContent, data, SkipValidation, SuppressWarnings, options) {
193
220
  try {
194
221
  if (!templateContent) {
195
222
  return {
@@ -233,7 +260,8 @@ export class TemplateEngineServer extends BaseSingleton {
233
260
  }
234
261
  // Merge default values from parameters applicable to this content
235
262
  const mergedData = this.mergeDefaultValues(templateEntity, templateContent.ID, data);
236
- const template = this.getNunjucksTemplate(templateContent.ID, templateContent.TemplateText, true);
263
+ const env = options?.autoescape === false ? this.getRawTemplateEnv() : this._nunjucksEnv;
264
+ const template = this.getNunjucksTemplate(templateContent.ID, templateContent.TemplateText, true, env);
237
265
  const result = await this.renderTemplateAsync(template, mergedData);
238
266
  return {
239
267
  Success: true,
@@ -261,8 +289,25 @@ export class TemplateEngineServer extends BaseSingleton {
261
289
  */
262
290
  async RenderTemplateSimple(templateText, data, options) {
263
291
  try {
264
- const env = this.getSimpleRenderEnv(options?.autoescape ?? true);
265
- const template = this.createNunjucksTemplate(templateText, env);
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
+ }
266
311
  const result = await this.renderTemplateAsync(template, data);
267
312
  return {
268
313
  Success: true,
@@ -279,26 +324,57 @@ export class TemplateEngineServer extends BaseSingleton {
279
324
  };
280
325
  }
281
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
+ }
282
352
  /**
283
353
  * This method is responsible for creating a new Nunjucks template, caching it, and returning it.
284
354
  * If the templateContentId already had a template created, it will return that template from the cache.
285
355
  * @param templateId - must be provided if you want to cache the template, if not provided the template will not be cached
286
356
  * @param templateText
287
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
288
359
  */
289
- getNunjucksTemplate(templateContentId, templateText, cacheTemplate) {
360
+ getNunjucksTemplate(templateContentId, templateText, cacheTemplate, env = this._nunjucksEnv) {
290
361
  if (templateContentId && cacheTemplate) {
291
- let template = this._templateCache.get(templateContentId);
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);
292
368
  if (!template) {
293
- template = this.createNunjucksTemplate(templateText);
294
- this._templateCache.set(templateContentId, template);
369
+ template = this.createNunjucksTemplate(templateText, env);
370
+ envCache.set(templateContentId, template);
295
371
  }
296
372
  return template;
297
373
  }
298
374
  else {
299
375
  // we don't have a template ID which means this is a dyanmic template, and so we don't want to do
300
376
  // anything with the cache, we just create a new nunjucks template and return it
301
- return this.createNunjucksTemplate(templateText);
377
+ return this.createNunjucksTemplate(templateText, env);
302
378
  }
303
379
  }
304
380
  /**
@@ -324,8 +400,19 @@ export class TemplateEngineServer extends BaseSingleton {
324
400
  }
325
401
  return this._nunjucksEnvNoAutoescape;
326
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. */
327
412
  ClearTemplateCache() {
328
- this._templateCache.clear();
413
+ this._templateCache = new WeakMap();
414
+ this._simpleTemplateCache.clear();
415
+ this._referencedVariablesCache.clear();
329
416
  }
330
417
  /**
331
418
  * Promisifies the Nunjucks template rendering process.
@@ -364,16 +451,24 @@ export class TemplateEngineServer extends BaseSingleton {
364
451
  const mergedData = { ...data };
365
452
  // Get all parameters applicable to this content
366
453
  const params = templateEntity.GetParametersForContent(contentId);
454
+ if (!params || params.length === 0) {
455
+ return mergedData;
456
+ }
367
457
  // Group parameters by name to handle precedence
368
458
  const paramsByName = new Map();
369
- // First add global parameters
370
- params.filter(p => !p.TemplateContentID).forEach(p => {
371
- paramsByName.set(p.Name, p);
372
- });
373
- // Then add/override with content-specific parameters
374
- params.filter(p => UUIDsEqual(p.TemplateContentID, contentId)).forEach(p => {
375
- paramsByName.set(p.Name, p);
376
- });
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
+ }
377
472
  // Apply default values for missing parameters
378
473
  paramsByName.forEach((param, name) => {
379
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,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;AAiBF;;;;;;;;;;;;;;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;;OAEG;YACW,sBAAsB;CAUvC"}
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
- // Use the template engine's simple rendering method which handles Nunjucks environment setup
229
- const result = await templateEngine.RenderTemplateSimple(templateContent.TemplateText, data);
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);
@@ -1 +1 @@
1
- {"version":3,"file":"TemplateEmbed.extension.js","sourceRoot":"","sources":["../../src/extensions/TemplateEmbed.extension.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"TemplateEmbed.extension.js","sourceRoot":"","sources":["../../src/extensions/TemplateEmbed.extension.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -2,6 +2,7 @@ export * from './TemplateEngine.js';
2
2
  export * from './NunjucksSandbox.js';
3
3
  export * from './NunjucksCompileGuard.js';
4
4
  export * from './TemplateSandboxError.js';
5
+ export * from './TemplateVariableAnalysis.js';
5
6
  export * from './extensions/AIPrompt.extension.js';
6
7
  export * from './extensions/TemplateEmbed.extension.js';
7
8
  export * from './extensions/TemplateExtensionBase.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,kBAAkB,CAAC;AACjC,cAAc,mBAAmB,CAAC;AAClC,cAAc,wBAAwB,CAAC;AACvC,cAAc,wBAAwB,CAAC;AACvC,cAAc,iCAAiC,CAAC;AAChD,cAAc,sCAAsC,CAAC;AACrD,cAAc,oCAAoC,CAAC;AACnD,cAAc,mCAAmC,CAAC;AAClD,cAAc,uCAAuC,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,kBAAkB,CAAC;AACjC,cAAc,mBAAmB,CAAC;AAClC,cAAc,wBAAwB,CAAC;AACvC,cAAc,wBAAwB,CAAC;AACvC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,iCAAiC,CAAC;AAChD,cAAc,sCAAsC,CAAC;AACrD,cAAc,oCAAoC,CAAC;AACnD,cAAc,mCAAmC,CAAC;AAClD,cAAc,uCAAuC,CAAC"}
package/dist/index.js CHANGED
@@ -2,6 +2,7 @@ export * from './TemplateEngine.js';
2
2
  export * from './NunjucksSandbox.js';
3
3
  export * from './NunjucksCompileGuard.js';
4
4
  export * from './TemplateSandboxError.js';
5
+ export * from './TemplateVariableAnalysis.js';
5
6
  export * from './extensions/AIPrompt.extension.js';
6
7
  export * from './extensions/TemplateEmbed.extension.js';
7
8
  export * from './extensions/TemplateExtensionBase.js';
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,kBAAkB,CAAC;AACjC,cAAc,mBAAmB,CAAC;AAClC,cAAc,wBAAwB,CAAC;AACvC,cAAc,wBAAwB,CAAC;AACvC,cAAc,iCAAiC,CAAC;AAChD,cAAc,sCAAsC,CAAC;AACrD,cAAc,oCAAoC,CAAC;AACnD,cAAc,mCAAmC,CAAC;AAClD,cAAc,uCAAuC,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,kBAAkB,CAAC;AACjC,cAAc,mBAAmB,CAAC;AAClC,cAAc,wBAAwB,CAAC;AACvC,cAAc,wBAAwB,CAAC;AACvC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,iCAAiC,CAAC;AAChD,cAAc,sCAAsC,CAAC;AACrD,cAAc,oCAAoC,CAAC;AACnD,cAAc,mCAAmC,CAAC;AAClD,cAAc,uCAAuC,CAAC"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@memberjunction/templates",
3
3
  "type": "module",
4
- "version": "6.2.0-edge.4",
4
+ "version": "6.2.0-edge.5",
5
5
  "description": "MemberJunction Templating Engine and Utilities - Used for any application that requires templating utility functionality. NOTE: this package does use Angular Universal for compilation but is not marked with the usual ng prefix because it is a server-side library and not used within Angular apps.",
6
6
  "main": "dist/index.js",
7
7
  "types": "dist/index.d.ts",
@@ -14,14 +14,14 @@
14
14
  "typescript": "^5.9.3"
15
15
  },
16
16
  "dependencies": {
17
- "@memberjunction/core": "6.2.0-edge.4",
18
- "@memberjunction/templates-base-types": "6.2.0-edge.4",
19
- "@memberjunction/ai": "6.2.0-edge.4",
20
- "@memberjunction/ai-core-plus": "6.2.0-edge.4",
21
- "@memberjunction/aiengine": "6.2.0-edge.4",
22
- "@memberjunction/ai-provider-bundle": "6.2.0-edge.4",
23
- "@memberjunction/core-entities": "6.2.0-edge.4",
24
- "@memberjunction/global": "6.2.0-edge.4",
17
+ "@memberjunction/core": "6.2.0-edge.5",
18
+ "@memberjunction/templates-base-types": "6.2.0-edge.5",
19
+ "@memberjunction/ai": "6.2.0-edge.5",
20
+ "@memberjunction/ai-core-plus": "6.2.0-edge.5",
21
+ "@memberjunction/aiengine": "6.2.0-edge.5",
22
+ "@memberjunction/ai-provider-bundle": "6.2.0-edge.5",
23
+ "@memberjunction/core-entities": "6.2.0-edge.5",
24
+ "@memberjunction/global": "6.2.0-edge.5",
25
25
  "nunjucks": "3.2.4"
26
26
  },
27
27
  "repository": {