@tstdl/base 0.84.23 → 0.84.25

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.
@@ -1,2 +1,5 @@
1
- declare const template: import("../../../mail/index.js").MailTemplate<object>;
1
+ type HelloMailContext = {
2
+ name: string;
3
+ };
4
+ declare const template: import("../../../mail/index.js").MailTemplate<HelloMailContext>;
2
5
  export default template;
@@ -31,6 +31,6 @@ function HelloMail({ name }) {
31
31
  const template = (0, import_mail.mailTemplate)("hello-name", {
32
32
  subject: (0, import_string_template_resolver.stringTemplateField)({ renderer: "handlebars", template: "Hello {{ name }} in subject!" }),
33
33
  html: (0, import_jsx_template_resolver.jsxTemplateField)({ renderer: "mjml-jsx", template: HelloMail }),
34
- text: (0, import_string_template_resolver.stringTemplateField)({ renderer: "handlebars", template: "Hello {{ name }} in text!" })
34
+ text: (0, import_string_template_resolver.stringTemplateField)({ renderer: "string", template: ({ name }) => `Hello ${name} in text!` })
35
35
  });
36
36
  var hello_name_default = template;
@@ -1,11 +1,14 @@
1
1
  import type { Template, TemplateField } from '../../templates/template.model.js';
2
- export type MailTemplate<Context extends object = any> = Template<{
2
+ import type { Record } from '../../types.js';
3
+ export type MailTemplate<Context extends Record = any> = Template<{
3
4
  subject: false;
4
5
  html: false;
5
6
  text: false;
6
7
  }, undefined, Context>;
7
- export declare function mailTemplate<Context extends object>(name: string, fields: {
8
- subject?: TemplateField;
9
- html?: TemplateField;
10
- text?: TemplateField;
11
- }): MailTemplate<Context>;
8
+ type MailTemplateFields<Context extends Record> = {
9
+ subject?: TemplateField<string, string, any, Context>;
10
+ html?: TemplateField<string, string, any, Context>;
11
+ text?: TemplateField<string, string, any, Context>;
12
+ };
13
+ export declare function mailTemplate<Context extends Record>(name: string, fields: MailTemplateFields<Context>): MailTemplate<Context>;
14
+ export {};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tstdl/base",
3
- "version": "0.84.23",
3
+ "version": "0.84.25",
4
4
  "author": "Patrick Hein",
5
5
  "publishConfig": {
6
6
  "access": "public"
@@ -35,7 +35,7 @@
35
35
  "@types/nodemailer": "6.4",
36
36
  "@typescript-eslint/eslint-plugin": "5.59",
37
37
  "@typescript-eslint/parser": "5.59",
38
- "concurrently": "8.0",
38
+ "concurrently": "8.1",
39
39
  "esbuild": "0.17",
40
40
  "eslint": "8.41",
41
41
  "eslint-import-resolver-typescript": "3.5",
@@ -37,7 +37,7 @@ export declare class HandlebarsTemplateRenderer extends TemplateRenderer<'handle
37
37
  private readonly compileHandlebarsTemplate;
38
38
  constructor(templateResolverProvider: TemplateResolverProvider);
39
39
  canHandleType(type: string): boolean;
40
- _render(renderObject: HandlebarsTemplateRenderObject, context?: object): Promise<string>;
40
+ _render(renderObject: HandlebarsTemplateRenderObject, context: Record): Promise<string>;
41
41
  private _compileHandlebarsTemplate;
42
42
  private normalizePartial;
43
43
  }
@@ -1,3 +1,4 @@
1
+ import type { Record } from '../../types.js';
1
2
  import type { JsxTemplate } from '../resolvers/jsx.template-resolver.js';
2
3
  import type { TemplateRenderObject, TemplateRenderResult } from '../template.renderer.js';
3
4
  import { TemplateRenderer } from '../template.renderer.js';
@@ -5,5 +6,5 @@ export type JsxTemplateRenderObject = TemplateRenderObject<'jsx', undefined, Jsx
5
6
  export declare class JsxTemplateRenderer extends TemplateRenderer<'jsx', undefined> {
6
7
  constructor();
7
8
  canHandleType(type: string): boolean;
8
- _render({ template: TemplateComponent }: JsxTemplateRenderObject, context?: object): TemplateRenderResult;
9
+ _render({ template: TemplateComponent }: JsxTemplateRenderObject, context: Record): TemplateRenderResult;
9
10
  }
@@ -1,3 +1,4 @@
1
+ import type { Record } from '../../types.js';
1
2
  import type { MJMLParsingOptions } from 'mjml-core';
2
3
  import { TemplateRendererProvider } from '../template-renderer.provider.js';
3
4
  import type { TemplateRenderObject, TemplateRenderResult } from '../template.renderer.js';
@@ -11,5 +12,5 @@ export declare class MjmlTemplateRenderer extends TemplateRenderer<MjmlRendererS
11
12
  private readonly rendererProvider;
12
13
  constructor(rendererProvider: TemplateRendererProvider);
13
14
  canHandleType(type: string): boolean;
14
- _render({ renderer, template, options }: MjmlTemplateRenderObject, context?: object): Promise<TemplateRenderResult>;
15
+ _render({ renderer, template, options }: MjmlTemplateRenderObject, context: Record): Promise<TemplateRenderResult>;
15
16
  }
@@ -79,7 +79,7 @@ let MjmlTemplateRenderer = class MjmlTemplateRenderer2 extends import_template_r
79
79
  renderer: "mjml",
80
80
  template: result
81
81
  };
82
- return this._render(preprocessedTemplate);
82
+ return this._render(preprocessedTemplate, context);
83
83
  }
84
84
  return (0, import_mjml.default)(template).html;
85
85
  }
@@ -1,8 +1,10 @@
1
+ import type { Record } from '../../types.js';
2
+ import type { StringTemplate } from '../resolvers/string.template-resolver.js';
1
3
  import type { TemplateRenderObject, TemplateRenderResult } from '../template.renderer.js';
2
4
  import { TemplateRenderer } from '../template.renderer.js';
3
- export type StringTemplateRenderObject = TemplateRenderObject<'string', undefined, string>;
5
+ export type StringTemplateRenderObject = TemplateRenderObject<'string', undefined, StringTemplate>;
4
6
  export declare class StringTemplateRenderer extends TemplateRenderer<'string', undefined> {
5
7
  constructor();
6
8
  canHandleType(type: string): boolean;
7
- _render({ template }: StringTemplateRenderObject, _context?: object): TemplateRenderResult;
9
+ _render({ template }: StringTemplateRenderObject, context: Record): Promise<TemplateRenderResult>;
8
10
  }
@@ -22,6 +22,7 @@ __export(string_template_renderer_exports, {
22
22
  });
23
23
  module.exports = __toCommonJS(string_template_renderer_exports);
24
24
  var import_container = require("../../container/index.js");
25
+ var import_type_guards = require("../../utils/type-guards.js");
25
26
  var import_template_renderer = require("../template.renderer.js");
26
27
  var __decorate = function(decorators, target, key, desc) {
27
28
  var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
@@ -44,8 +45,11 @@ let StringTemplateRenderer = class StringTemplateRenderer2 extends import_templa
44
45
  canHandleType(type) {
45
46
  return type == "string";
46
47
  }
47
- _render({ template }, _context) {
48
- return template;
48
+ async _render({ template }, context) {
49
+ if ((0, import_type_guards.isString)(template)) {
50
+ return template;
51
+ }
52
+ return template(context);
49
53
  }
50
54
  };
51
55
  StringTemplateRenderer = __decorate([
@@ -1,15 +1,15 @@
1
- import type { TypedOmit } from '../../types.js';
1
+ import type { Record, TypedOmit } from '../../types.js';
2
2
  import type { ComponentClass, FunctionComponent } from 'preact';
3
3
  import { TemplateField } from '../template.model.js';
4
4
  import type { TemplateRenderer, TemplateRendererOptions, TemplateRendererString } from '../template.renderer.js';
5
5
  import { TemplateResolver } from '../template.resolver.js';
6
- export type JsxTemplate = FunctionComponent<any> | ComponentClass<any, any>;
7
- export declare class JsxTemplateField<Renderer extends string = string, Options = any> extends TemplateField<'string', Renderer, Options> {
8
- template: JsxTemplate;
6
+ export type JsxTemplate<Context extends Record = any> = FunctionComponent<Context> | ComponentClass<Context, any>;
7
+ export declare class JsxTemplateField<Renderer extends string = string, Options = any, Context extends Record = any> extends TemplateField<'string', Renderer, Options, Context> {
8
+ template: JsxTemplate<Context>;
9
9
  }
10
10
  export declare class JsxTemplateResolver extends TemplateResolver<JsxTemplateField, JsxTemplate> {
11
11
  constructor();
12
12
  canHandle(resolver: string): boolean;
13
13
  resolve(field: JsxTemplateField): JsxTemplate;
14
14
  }
15
- export declare function jsxTemplateField<Renderer extends TemplateRenderer>(field: TypedOmit<JsxTemplateField<Renderer[TemplateRendererString], Renderer[TemplateRendererOptions]>, 'resolver'>): JsxTemplateField<Renderer[TemplateRendererString], Renderer[TemplateRendererOptions]>;
15
+ export declare function jsxTemplateField<Renderer extends TemplateRenderer, Context extends Record = any>(field: TypedOmit<JsxTemplateField<Renderer[TemplateRendererString], Renderer[TemplateRendererOptions], Context>, 'resolver'>): JsxTemplateField<Renderer[TemplateRendererString], Renderer[TemplateRendererOptions], Context>;
@@ -1,13 +1,14 @@
1
- import type { TypedOmit } from '../../types.js';
1
+ import type { Record, TypedOmit } from '../../types.js';
2
2
  import { TemplateField } from '../template.model.js';
3
3
  import type { TemplateRenderer, TemplateRendererOptions, TemplateRendererString } from '../template.renderer.js';
4
4
  import { TemplateResolver } from '../template.resolver.js';
5
- export declare class StringTemplateField<Renderer extends string = string, Options = any> extends TemplateField<'string', Renderer, Options> {
6
- template: string;
5
+ export type StringTemplate<Context extends Record = any> = string | ((context: Context) => string | Promise<string>);
6
+ export declare class StringTemplateField<Renderer extends string = string, Options = any, Context extends Record = any> extends TemplateField<'string', Renderer, Options, Context> {
7
+ template: StringTemplate<Context>;
7
8
  }
8
9
  export declare class StringTemplateResolver extends TemplateResolver<StringTemplateField> {
9
10
  constructor();
10
11
  canHandle(resolver: string): boolean;
11
- resolve(field: StringTemplateField): string;
12
+ resolve(field: StringTemplateField): StringTemplate<Record>;
12
13
  }
13
- export declare function stringTemplateField<Renderer extends TemplateRenderer>(field: TypedOmit<StringTemplateField<Renderer[TemplateRendererString], Renderer[TemplateRendererOptions]>, 'resolver'>): StringTemplateField<Renderer[TemplateRendererString], Renderer[TemplateRendererOptions]>;
14
+ export declare function stringTemplateField<Renderer extends TemplateRenderer, Context extends Record = any>(field: TypedOmit<StringTemplateField<Renderer[TemplateRendererString], Renderer[TemplateRendererOptions], Context>, 'resolver'>): StringTemplateField<Renderer[TemplateRendererString], Renderer[TemplateRendererOptions], Context>;
@@ -45,8 +45,8 @@ class StringTemplateField extends import_template_model.TemplateField {
45
45
  template;
46
46
  }
47
47
  __decorate([
48
- (0, import_schema.Property)(),
49
- __metadata("design:type", String)
48
+ (0, import_schema.Union)(String, Function),
49
+ __metadata("design:type", Object)
50
50
  ], StringTemplateField.prototype, "template", void 0);
51
51
  let StringTemplateResolver = class StringTemplateResolver2 extends import_template_resolver.TemplateResolver {
52
52
  constructor() {
@@ -1,21 +1,23 @@
1
1
  import type { PickBy, Record, SimplifyObject } from '../types.js';
2
- export type TemplateContext<T extends Template> = T[typeof templateContext];
3
- export declare const templateContext: unique symbol;
4
- export declare class TemplateField<Resolver extends string = string, Renderer extends string = string, Options = any> {
2
+ export type TemplateContext<T extends Template> = Parameters<NonNullable<T[typeof templateContext]>>[0];
3
+ declare const templateContext: unique symbol;
4
+ export declare class TemplateField<Resolver extends string = string, Renderer extends string = string, Options = any, Context extends Record = any> {
5
+ readonly [templateContext]?: (context: Context) => void;
5
6
  resolver: Resolver;
6
7
  renderer: Renderer;
7
8
  options?: Options;
8
9
  }
9
- export type TemplateFields<Fields extends Record<string, boolean>, Resolver extends string = string, Renderer extends string = string, Options = any> = SimplifyObject<{
10
- [P in keyof PickBy<Fields, true>]: TemplateField<Resolver, Renderer, Options>;
10
+ export type TemplateFields<Fields extends Record<string, boolean>, Resolver extends string = string, Renderer extends string = string, Options = any, Context extends Record = any> = SimplifyObject<{
11
+ [P in keyof PickBy<Fields, true>]: TemplateField<Resolver, Renderer, Options, Context>;
11
12
  } & {
12
- [P in keyof PickBy<Fields, false>]?: TemplateField<Resolver, Renderer, Options>;
13
+ [P in keyof PickBy<Fields, false>]?: TemplateField<Resolver, Renderer, Options, Context>;
13
14
  }>;
14
- export declare abstract class Template<Fields extends Record<string, boolean> = Record<string, boolean>, TemplateOptions = any, Context extends object = any> {
15
- readonly [templateContext]?: Context;
15
+ export declare abstract class Template<Fields extends Record<string, boolean> = Record<string, boolean>, TemplateOptions = any, Context extends Record = any> {
16
+ readonly [templateContext]?: (context: Context) => void;
16
17
  /** name of template */
17
18
  name: string;
18
- fields: TemplateFields<Fields>;
19
+ fields: TemplateFields<Fields, string, string, any, Context>;
19
20
  options?: TemplateOptions;
20
21
  }
21
22
  export declare function simpleTemplate(name: string, template: TemplateField): Template;
23
+ export {};
@@ -20,8 +20,7 @@ var template_model_exports = {};
20
20
  __export(template_model_exports, {
21
21
  Template: () => Template,
22
22
  TemplateField: () => TemplateField,
23
- simpleTemplate: () => simpleTemplate,
24
- templateContext: () => templateContext
23
+ simpleTemplate: () => simpleTemplate
25
24
  });
26
25
  module.exports = __toCommonJS(template_model_exports);
27
26
  var import_schema = require("../schema/index.js");
@@ -39,7 +38,6 @@ var __metadata = function(k, v) {
39
38
  if (typeof Reflect === "object" && typeof Reflect.metadata === "function")
40
39
  return Reflect.metadata(k, v);
41
40
  };
42
- const templateContext = Symbol("templateData");
43
41
  let TemplateField = class TemplateField2 {
44
42
  resolver;
45
43
  renderer;
@@ -14,7 +14,7 @@ export declare const templateRendererOptions: unique symbol;
14
14
  export declare abstract class TemplateRenderer<Renderer extends string = string, Options = any> {
15
15
  readonly [templateRendererString]: Renderer;
16
16
  readonly [templateRendererOptions]: Options;
17
- render(template: TemplateRenderObject<Renderer, Options>, context?: object): Promise<TemplateRenderResult>;
17
+ render(template: TemplateRenderObject<Renderer, Options>, context?: Record): Promise<TemplateRenderResult>;
18
18
  abstract canHandleType(type: string): boolean;
19
- protected abstract _render(renderObject: TemplateRenderObject<Renderer, Options>, context?: object): TemplateRenderResult | Promise<TemplateRenderResult>;
19
+ protected abstract _render(renderObject: TemplateRenderObject<Renderer, Options>, context: Record): TemplateRenderResult | Promise<TemplateRenderResult>;
20
20
  }
@@ -30,6 +30,6 @@ const templateRendererOptions = Symbol("templateRendererOptions");
30
30
  class TemplateRenderer {
31
31
  async render(template, context) {
32
32
  const parsedContext = (0, import_type_guards.isDefined)(template.contextSchema) ? import_schema.Schema.parse(template.contextSchema, context) : context;
33
- return this._render(template, parsedContext);
33
+ return this._render(template, parsedContext ?? {});
34
34
  }
35
35
  }
@@ -1,4 +1,4 @@
1
1
  import type { TemplateRenderer } from './template.renderer.js';
2
2
  import type { TemplateResolver } from './template.resolver.js';
3
3
  export declare const TEMPLATE_RENDERERS: import("../container/index.js").InjectionToken<TemplateRenderer<string, any>[], any>;
4
- export declare const TEMPLATE_RESOLVERS: import("../container/index.js").InjectionToken<TemplateResolver<import("./template.model.js").TemplateField<string, string, any>, unknown>[], any>;
4
+ export declare const TEMPLATE_RESOLVERS: import("../container/index.js").InjectionToken<TemplateResolver<import("./template.model.js").TemplateField<string, string, any, any>, unknown>[], any>;