2.0.0-alpha.4 • Published 4 months ago

@static-pages/twig v2.0.0-alpha.4

Weekly downloads
-
License
MPL-2.0
Repository
github
Last release
4 months ago

Static Pages / Twig

Renders documents via twig templates. This package is part of the Static Pages project.

Uses Twing and Marked packages under the hood.

Usage

import twig from '@static-pages/twig';

const renderer = twig({
	viewsDir: 'myViews',
});

const pageData = {
	title: 'Page header',
	url: 'some/page',
	content: 'My Content',
	view: 'content'
};

renderer(pageData); // returns the rendered page in a promise

Options

OptionTypeDefault valueDescription
viewstring \| (d: Data) => string(data.view ?? 'main') + '.twig'Template to render. If it's a function it gets evaluated on each render call.
viewsRecord<string, string>undefinedTemplates stored in memory, accessed without a filesystem implementation.
viewsDirstring \| string[]undefinedOne or more directory path where the templates are found.
fsNodeJS FS APInode:fs moduleUsing the viewDir impiles you are using a filesystem. Here you can provide a custom implementation for that.
filtersTwigFilters{}Filters in an object that gets loaded to the twig environment.
functionsTwigFunctions{}Functions in an object that gets loaded to the twig environment.
configure(env: TwingEnvironment) => void() => undefinedAllows advanced configuration with access to the env twig environment.
markedEnabledbooleantrueRegister a markdown filter; uses marked.
markedOptionsMarkedOptionssee markedOptions sectionCustom options for the marked markdown renderer.

Custom types used in the table above:

type TwigFunctions = Record<string, TwingCallable<unknown>>;
type TwigFilters = Record<string, TwingCallable<unknown>>;

Example for TwigFunctions and TwigFilters:

import { twig, raw } from '@static-pages/twig';

const renderer = twig({
	functions: {
		asset(_context, asset: string) {
			return new URL(asset, '/site/assets/').toString();
		},
	},
	filters: {
		json(_context, data) {
			return raw(JSON.stringify(data, null, '\t'));
		},
	}
});

Functions and filters can be async or sync. No restrictions like the underlying Twing package makes where you allowed to use async functions only.

Everything provided by Twing and Marked is also exported from this package for advanced use cases, see twing and marked exports.

markedOptions defaults

This package uses the default options of the official marked defaults:

In twig template files, the custom markdown filter allows you to pass markdown options to the underlying markdown renderer. Example:

{{ '~~strike~~'|markdown({ gfm: false }) }}
<p>~~strike~~</p>

~~strike~~ converted to <del>strike</del> when gfm is true (default)

Additionally there is an inline option added to the available options. This removes the paragraph tags. Example:

{{ '[foo](bar)'|markdown({ inline: true }) }}
<a href="bar">foo</a>