# @memberjunction/templates-base-types
Base types and metadata caching engine for MemberJunction's templating system. Provides cached access to template metadata and can be used on both client and server.
## Architecture
```mermaid
graph TD
subgraph "@memberjunction/templates-base-types"
A[TemplateEngineBase] --> B[Templates Cache]
A --> C[Template Contents]
A --> D[Template Params]
A --> E[Content Types]
A --> F[Categories]
end
subgraph "Loaded via Dataset"
G["Template_Metadata
Dataset"]
end
G --> A
H["@memberjunction/templates
(Server Engine)"] --> A
style A fill:#2d6a9f,stroke:#1a4971,color:#fff
style B fill:#2d8659,stroke:#1a5c3a,color:#fff
style C fill:#2d8659,stroke:#1a5c3a,color:#fff
style D fill:#2d8659,stroke:#1a5c3a,color:#fff
style E fill:#7c5295,stroke:#563a6b,color:#fff
style F fill:#7c5295,stroke:#563a6b,color:#fff
style H fill:#b8762f,stroke:#8a5722,color:#fff
```
## Overview
This package provides the foundational layer for MemberJunction's templating system:
- **TemplateEngineBase**: Singleton engine that loads and caches all template metadata via the `Template_Metadata` dataset
- **TemplateRenderResult**: Standard result type for template rendering operations
- **Metadata Access**: Cached getters for templates, content types, categories, contents, and params
- **Template Lookup**: Convenience method for finding templates by name (case-insensitive)
- **Content Association**: Automatically associates template contents and params with their parent templates after loading
## Installation
```bash
npm install @memberjunction/templates-base-types
```
## Usage
### Initializing the Engine
```typescript
import { TemplateEngineBase } from '@memberjunction/templates-base-types';
// Load template metadata
await TemplateEngineBase.Instance.Config(false, contextUser);
// Force refresh
await TemplateEngineBase.Instance.Config(true, contextUser);
```
### Accessing Template Metadata
```typescript
const engine = TemplateEngineBase.Instance;
// All templates (with Content and Params pre-associated)
const templates = engine.Templates;
// Find a template by name
const emailTemplate = engine.FindTemplate('Welcome Email');
// Access template contents and params
const contents = emailTemplate.Content;
const params = emailTemplate.Params;
// Other metadata
const contentTypes = engine.TemplateContentTypes;
const categories = engine.TemplateCategories;
```
### TemplateRenderResult
```typescript
import { TemplateRenderResult } from '@memberjunction/templates-base-types';
// Returned by rendering operations
const result: TemplateRenderResult = {
Success: true,
Output: '...',
Message: undefined // Only set on failure
};
```
## API Reference
### TemplateEngineBase
| Member | Type | Description |
|--------|------|-------------|
| `Instance` | static getter | Singleton instance |
| `Config()` | method | Load/refresh template metadata |
| `Templates` | getter | All templates with associated contents and params |
| `TemplateContentTypes` | getter | Available content types |
| `TemplateCategories` | getter | Template categories |
| `TemplateContents` | getter | All template content records |
| `TemplateParams` | getter | All template parameter definitions |
| `FindTemplate()` | method | Find template by name (case-insensitive) |
### TemplateRenderResult
| Property | Type | Description |
|----------|------|-------------|
| `Success` | boolean | Whether rendering succeeded |
| `Output` | string | The rendered output |
| `Message` | string (optional) | Error message on failure |
## Relationship to @memberjunction/templates
This package provides the **metadata caching layer** usable anywhere. The `@memberjunction/templates` package extends it with server-side Nunjucks rendering, custom extensions, and AI prompt integration.
```mermaid
graph LR
A["@memberjunction/templates-base-types
(Metadata + Types)"] --> B["@memberjunction/templates
(Server Rendering)"]
C[Client Code] --> A
D[Server Code] --> B
style A fill:#2d6a9f,stroke:#1a4971,color:#fff
style B fill:#2d8659,stroke:#1a5c3a,color:#fff
style C fill:#b8762f,stroke:#8a5722,color:#fff
style D fill:#b8762f,stroke:#8a5722,color:#fff
```
## Dependencies
| Package | Purpose |
|---------|---------|
| `@memberjunction/core` | BaseEngine, UserInfo, IMetadataProvider |
| `@memberjunction/core-entities` | Template entity types |
| `@memberjunction/global` | MJGlobal class factory |
## License
ISC