@mepkg/mtwig 1.0.0 → 2.1.0

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/package.json CHANGED
@@ -14,7 +14,7 @@
14
14
  "test:watch": "node --test --watch 'tests/**/*.test.js'"
15
15
  },
16
16
  "dependencies": {
17
- "twing": "^7.3.1"
17
+ "twig": "^3.0.0"
18
18
  },
19
- "version": "1.0.0"
19
+ "version": "2.1.0"
20
20
  }
@@ -1,5 +1,3 @@
1
- import truncate from "./truncate.js";
1
+ import int from "./int.js";
2
2
 
3
- export const filters = [
4
- truncate
5
- ];
3
+ export const filters = [int];
@@ -0,0 +1,6 @@
1
+ export default (twig) => {
2
+ twig.extendFilter("int", (value) => {
3
+ const parsed = parseInt(value, 10);
4
+ return Number.isNaN(parsed) ? 0 : parsed;
5
+ });
6
+ }
package/src/index.js CHANGED
@@ -1,47 +1,26 @@
1
- import fs from "fs";
2
- import path from "path";
3
- import {createEnvironment, createFilesystemLoader} from "twing";
1
+ import Twig from "twig";
4
2
  import {filters} from "./filters/_filters.js";
5
3
 
6
-
7
- const cache = new Map();
8
- const cacheHandler = {
9
- write: (key, content) => {
10
- cache.set(key, {content, timestamp: Date.now()});
11
- return Promise.resolve();
12
- },
13
- load: (key) => {
14
- return Promise.resolve(cache.get(key)?.content ?? null);
15
- },
16
- getTimestamp: (key) => {
17
- return Promise.resolve(cache.get(key)?.timestamp ?? 0);
18
- }
19
- };
4
+ for (const filter of filters) {
5
+ filter(Twig);
6
+ }
20
7
 
21
8
  const express = (app, viewsPath) => {
22
9
  app.set('views', viewsPath);
23
- const loader = createFilesystemLoader(fs);
24
- loader.addPath(viewsPath);
25
- const isProduction = process.env.NODE_ENV === 'production';
26
- const twing = createEnvironment(loader, isProduction ? {cache: cacheHandler} : {});
27
-
28
- for (const filter of filters) {
29
- filter(twing);
30
- }
31
-
10
+ Twig.cache(process.env.NODE_ENV === 'production');
32
11
  app.engine('twig', (filePath, options, callback) => {
33
- const relativePath = path.relative(viewsPath, filePath);
34
- twing.render(relativePath, options)
35
- .then((output) => {
36
- return callback(null, output);
37
- })
38
- .catch((err) => {
39
- return callback(err);
40
- });
12
+ Twig.__express(filePath, options, (err, html) => {
13
+ if (err && !(err instanceof Error)) {
14
+ const error = new Error(err.message ?? String(err));
15
+ error.name = err.name ?? 'Error';
16
+ return callback(error);
17
+ }
18
+ return callback(err, html);
19
+ });
41
20
  });
42
21
  app.set('view engine', 'twig');
43
22
  }
44
23
 
45
24
  export default {
46
25
  express
47
- }
26
+ }
@@ -1,14 +0,0 @@
1
- import {createFilter} from "twing";
2
-
3
- export default (twing) => {
4
- twing.addFilter(createFilter('truncate', (_context, value, length = 35, suffix = '...') => {
5
- const str = String(value ?? '');
6
- if (str.length <= length) {
7
- return Promise.resolve(str);
8
- }
9
- return Promise.resolve(str.substring(0, length) + suffix);
10
- }, [
11
- {name: 'length', defaultValue: 30},
12
- {name: 'suffix', defaultValue: '...'}
13
- ]));
14
- };