mirror of
https://github.com/harttle/liquidjs.git
synced 2026-09-20 06:50:47 -07:00
chore(TypeScript): demo for typescript
This commit is contained in:
@@ -3,12 +3,12 @@
|
|||||||
|
|
||||||
<head>
|
<head>
|
||||||
<title>liquidjs for the browser</title>
|
<title>liquidjs for the browser</title>
|
||||||
<script src="../../dist/liquid.js"></script>
|
<script src="node_modules/liquidjs/dist/liquid.min.js"></script>
|
||||||
</head>
|
</head>
|
||||||
|
|
||||||
<body>
|
<body>
|
||||||
<script>
|
<script>
|
||||||
var engine = window.Liquid({
|
var engine = new window.Liquid({
|
||||||
extname: '.html',
|
extname: '.html',
|
||||||
cache: true
|
cache: true
|
||||||
});
|
});
|
||||||
|
|||||||
Generated
+220
@@ -0,0 +1,220 @@
|
|||||||
|
{
|
||||||
|
"name": "liquidjs-demo-browser",
|
||||||
|
"version": "1.0.0",
|
||||||
|
"lockfileVersion": 1,
|
||||||
|
"requires": true,
|
||||||
|
"dependencies": {
|
||||||
|
"async": {
|
||||||
|
"version": "1.5.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz",
|
||||||
|
"integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
|
"colors": {
|
||||||
|
"version": "1.0.3",
|
||||||
|
"resolved": "https://registry.npmjs.org/colors/-/colors-1.0.3.tgz",
|
||||||
|
"integrity": "sha1-BDP0TYCWgP3rYO0mDxsMJi6CpAs=",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
|
"corser": {
|
||||||
|
"version": "2.0.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/corser/-/corser-2.0.1.tgz",
|
||||||
|
"integrity": "sha1-jtolLsqrWEDc2XXOuQ2TcMgZ/4c=",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
|
"debug": {
|
||||||
|
"version": "3.2.6",
|
||||||
|
"resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz",
|
||||||
|
"integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==",
|
||||||
|
"dev": true,
|
||||||
|
"requires": {
|
||||||
|
"ms": "2.1.1"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"ecstatic": {
|
||||||
|
"version": "3.3.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/ecstatic/-/ecstatic-3.3.1.tgz",
|
||||||
|
"integrity": "sha512-/rrctvxZ78HMI/tPIsqdvFKHHscxR3IJuKrZI2ZoUgkt2SiufyLFBmcco+aqQBIu6P1qBsUNG3drAAGLx80vTQ==",
|
||||||
|
"dev": true,
|
||||||
|
"requires": {
|
||||||
|
"he": "1.2.0",
|
||||||
|
"mime": "1.6.0",
|
||||||
|
"minimist": "1.2.0",
|
||||||
|
"url-join": "2.0.5"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"eventemitter3": {
|
||||||
|
"version": "3.1.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-3.1.0.tgz",
|
||||||
|
"integrity": "sha512-ivIvhpq/Y0uSjcHDcOIccjmYjGLcP09MFGE7ysAwkAvkXfpZlC985pH2/ui64DKazbTW/4kN3yqozUxlXzI6cA==",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
|
"follow-redirects": {
|
||||||
|
"version": "1.7.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.7.0.tgz",
|
||||||
|
"integrity": "sha512-m/pZQy4Gj287eNy94nivy5wchN3Kp+Q5WgUPNy5lJSZ3sgkVKSYV/ZChMAQVIgx1SqfZ2zBZtPA2YlXIWxxJOQ==",
|
||||||
|
"dev": true,
|
||||||
|
"requires": {
|
||||||
|
"debug": "3.2.6"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"he": {
|
||||||
|
"version": "1.2.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz",
|
||||||
|
"integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
|
"http-proxy": {
|
||||||
|
"version": "1.17.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.17.0.tgz",
|
||||||
|
"integrity": "sha512-Taqn+3nNvYRfJ3bGvKfBSRwy1v6eePlm3oc/aWVxZp57DQr5Eq3xhKJi7Z4hZpS8PC3H4qI+Yly5EmFacGuA/g==",
|
||||||
|
"dev": true,
|
||||||
|
"requires": {
|
||||||
|
"eventemitter3": "3.1.0",
|
||||||
|
"follow-redirects": "1.7.0",
|
||||||
|
"requires-port": "1.0.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"http-server": {
|
||||||
|
"version": "0.11.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/http-server/-/http-server-0.11.1.tgz",
|
||||||
|
"integrity": "sha512-6JeGDGoujJLmhjiRGlt8yK8Z9Kl0vnl/dQoQZlc4oeqaUoAKQg94NILLfrY3oWzSyFaQCVNTcKE5PZ3cH8VP9w==",
|
||||||
|
"dev": true,
|
||||||
|
"requires": {
|
||||||
|
"colors": "1.0.3",
|
||||||
|
"corser": "2.0.1",
|
||||||
|
"ecstatic": "3.3.1",
|
||||||
|
"http-proxy": "1.17.0",
|
||||||
|
"opener": "1.4.3",
|
||||||
|
"optimist": "0.6.1",
|
||||||
|
"portfinder": "1.0.20",
|
||||||
|
"union": "0.4.6"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"liquidjs": {
|
||||||
|
"version": "7.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/liquidjs/-/liquidjs-7.0.0.tgz",
|
||||||
|
"integrity": "sha512-/JL+VQUI++6iCS7JQ4fPPeji6vyvHCU/iuz2bLSiE0tn0eO3kf8GEyfaXnQUHSroy8SmJu7HQIvjvOErtYEvUg=="
|
||||||
|
},
|
||||||
|
"mime": {
|
||||||
|
"version": "1.6.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz",
|
||||||
|
"integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
|
"minimist": {
|
||||||
|
"version": "1.2.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
|
||||||
|
"integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
|
"mkdirp": {
|
||||||
|
"version": "0.5.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz",
|
||||||
|
"integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=",
|
||||||
|
"dev": true,
|
||||||
|
"requires": {
|
||||||
|
"minimist": "0.0.8"
|
||||||
|
},
|
||||||
|
"dependencies": {
|
||||||
|
"minimist": {
|
||||||
|
"version": "0.0.8",
|
||||||
|
"resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz",
|
||||||
|
"integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=",
|
||||||
|
"dev": true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"ms": {
|
||||||
|
"version": "2.1.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz",
|
||||||
|
"integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
|
"opener": {
|
||||||
|
"version": "1.4.3",
|
||||||
|
"resolved": "https://registry.npmjs.org/opener/-/opener-1.4.3.tgz",
|
||||||
|
"integrity": "sha1-XG2ixdflgx6P+jlklQ+NZnSskLg=",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
|
"optimist": {
|
||||||
|
"version": "0.6.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz",
|
||||||
|
"integrity": "sha1-2j6nRob6IaGaERwybpDrFaAZZoY=",
|
||||||
|
"dev": true,
|
||||||
|
"requires": {
|
||||||
|
"minimist": "0.0.10",
|
||||||
|
"wordwrap": "0.0.3"
|
||||||
|
},
|
||||||
|
"dependencies": {
|
||||||
|
"minimist": {
|
||||||
|
"version": "0.0.10",
|
||||||
|
"resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.10.tgz",
|
||||||
|
"integrity": "sha1-3j+YVD2/lggr5IrRoMfNqDYwHc8=",
|
||||||
|
"dev": true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"portfinder": {
|
||||||
|
"version": "1.0.20",
|
||||||
|
"resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.20.tgz",
|
||||||
|
"integrity": "sha512-Yxe4mTyDzTd59PZJY4ojZR8F+E5e97iq2ZOHPz3HDgSvYC5siNad2tLooQ5y5QHyQhc3xVqvyk/eNA3wuoa7Sw==",
|
||||||
|
"dev": true,
|
||||||
|
"requires": {
|
||||||
|
"async": "1.5.2",
|
||||||
|
"debug": "2.6.9",
|
||||||
|
"mkdirp": "0.5.1"
|
||||||
|
},
|
||||||
|
"dependencies": {
|
||||||
|
"debug": {
|
||||||
|
"version": "2.6.9",
|
||||||
|
"resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
|
||||||
|
"integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
|
||||||
|
"dev": true,
|
||||||
|
"requires": {
|
||||||
|
"ms": "2.0.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"ms": {
|
||||||
|
"version": "2.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
|
||||||
|
"integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
|
||||||
|
"dev": true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"qs": {
|
||||||
|
"version": "2.3.3",
|
||||||
|
"resolved": "https://registry.npmjs.org/qs/-/qs-2.3.3.tgz",
|
||||||
|
"integrity": "sha1-6eha2+ddoLvkyOBHaghikPhjtAQ=",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
|
"requires-port": {
|
||||||
|
"version": "1.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz",
|
||||||
|
"integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
|
"union": {
|
||||||
|
"version": "0.4.6",
|
||||||
|
"resolved": "https://registry.npmjs.org/union/-/union-0.4.6.tgz",
|
||||||
|
"integrity": "sha1-GY+9rrolTniLDvy2MLwR8kopWeA=",
|
||||||
|
"dev": true,
|
||||||
|
"requires": {
|
||||||
|
"qs": "2.3.3"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"url-join": {
|
||||||
|
"version": "2.0.5",
|
||||||
|
"resolved": "https://registry.npmjs.org/url-join/-/url-join-2.0.5.tgz",
|
||||||
|
"integrity": "sha1-WvIvGMBSoACkjXuCxenC4v7tpyg=",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
|
"wordwrap": {
|
||||||
|
"version": "0.0.3",
|
||||||
|
"resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.3.tgz",
|
||||||
|
"integrity": "sha1-o9XabNXAvAAI03I0u68b7WMFkQc=",
|
||||||
|
"dev": true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,17 @@
|
|||||||
|
{
|
||||||
|
"name": "liquidjs-demo-browser",
|
||||||
|
"version": "1.0.0",
|
||||||
|
"description": "Liquidjs Demo for Browser Usage",
|
||||||
|
"main": "index.html",
|
||||||
|
"scripts": {
|
||||||
|
"start": "http-server -c-1 "
|
||||||
|
},
|
||||||
|
"author": "harttle <[email protected]>",
|
||||||
|
"license": "ISC",
|
||||||
|
"devDependencies": {
|
||||||
|
"http-server": "^0.11.1"
|
||||||
|
},
|
||||||
|
"dependencies": {
|
||||||
|
"liquidjs": "^7.0.0"
|
||||||
|
}
|
||||||
|
}
|
||||||
+15
-1
@@ -4,9 +4,23 @@ const engine = new Liquid({
|
|||||||
root: __dirname,
|
root: __dirname,
|
||||||
extname: '.liquid'
|
extname: '.liquid'
|
||||||
})
|
})
|
||||||
|
|
||||||
|
engine.registerTag('header', {
|
||||||
|
parse: function (token) {
|
||||||
|
const [key, val] = token.args.split(':')
|
||||||
|
this[key] = val
|
||||||
|
},
|
||||||
|
render: function (scope, hash) {
|
||||||
|
const title = this.liquid.evalValue(this.content, scope)
|
||||||
|
return `<h1>${title}</h1>`
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
const ctx = {
|
const ctx = {
|
||||||
todos: ['fork and clone', 'make it better', 'make a pull request'],
|
todos: ['fork and clone', 'make it better', 'make a pull request'],
|
||||||
title: 'Welcome to liquidjs!'
|
title: 'Welcome to liquidjs!'
|
||||||
}
|
}
|
||||||
|
|
||||||
engine.renderFile('todolist', ctx).then(console.log)
|
engine.renderFile('todolist', ctx)
|
||||||
|
.then(console.log)
|
||||||
|
.catch(err => console.error(err.stack))
|
||||||
|
|||||||
Generated
+12
@@ -0,0 +1,12 @@
|
|||||||
|
{
|
||||||
|
"name": "Node.js demo for liquidjs",
|
||||||
|
"requires": true,
|
||||||
|
"lockfileVersion": 1,
|
||||||
|
"dependencies": {
|
||||||
|
"liquidjs": {
|
||||||
|
"version": "7.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/liquidjs/-/liquidjs-7.0.0.tgz",
|
||||||
|
"integrity": "sha512-/JL+VQUI++6iCS7JQ4fPPeji6vyvHCU/iuz2bLSiE0tn0eO3kf8GEyfaXnQUHSroy8SmJu7HQIvjvOErtYEvUg=="
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,11 @@
|
|||||||
|
{
|
||||||
|
"name": "liquidjs-demo-nodejs",
|
||||||
|
"description": "Node.js demo for liquidjs",
|
||||||
|
"main": "index.js",
|
||||||
|
"scripts": {
|
||||||
|
"start": "node index.js"
|
||||||
|
},
|
||||||
|
"dependencies": {
|
||||||
|
"liquidjs": "^7.0.0"
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,3 +1,5 @@
|
|||||||
|
{%header content: "welcome to liquid" | capitalize%}
|
||||||
|
|
||||||
<ul>
|
<ul>
|
||||||
{% for todo in todos %}
|
{% for todo in todos %}
|
||||||
<li>{{forloop.index}} - {{todo}}</li>
|
<li>{{forloop.index}} - {{todo}}</li>
|
||||||
|
|||||||
@@ -1,13 +1,25 @@
|
|||||||
import Liquid, {isTruthy} from 'liquidjs'
|
import Liquid from 'liquidjs'
|
||||||
|
|
||||||
const engine = new Liquid({
|
const engine = new Liquid({
|
||||||
root: __dirname,
|
root: __dirname,
|
||||||
extname: '.liquid'
|
extname: '.liquid'
|
||||||
})
|
})
|
||||||
|
|
||||||
|
engine.registerTag('header', {
|
||||||
|
parse: function (token) {
|
||||||
|
const [key, val] = token.args.split(':')
|
||||||
|
this[key] = val
|
||||||
|
},
|
||||||
|
render: function (scope, hash) {
|
||||||
|
const title = this.liquid.evalValue(this['content'], scope)
|
||||||
|
return `<h1>${title}</h1>`
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
const ctx = {
|
const ctx = {
|
||||||
todos: ['fork and clone', 'make it better', 'make a pull request'],
|
todos: ['fork and clone', 'make it better', 'make a pull request'],
|
||||||
title: 'Welcome to liquidjs!'
|
title: 'Welcome to liquidjs!'
|
||||||
}
|
}
|
||||||
|
|
||||||
// console.log('isTruthy:', isTruthy('a string here'));
|
// console.log('isTruthy:', isTruthy('a string here'));
|
||||||
engine.renderFile('todolist', ctx).then(console.log)
|
engine.renderFile('todolist', ctx).then(console.log)
|
||||||
|
|||||||
Generated
+8701
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,14 @@
|
|||||||
|
{
|
||||||
|
"name": "liquidjs-demo-typescript",
|
||||||
|
"description": "TypeScript demo for liquidjs",
|
||||||
|
"main": "index.ts",
|
||||||
|
"scripts": {
|
||||||
|
"start": "ts-node index.ts"
|
||||||
|
},
|
||||||
|
"dependencies": {
|
||||||
|
"liquidjs": "^7.0.0"
|
||||||
|
},
|
||||||
|
"devDependencies": {
|
||||||
|
"ts-node": "^8.0.2"
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,3 +1,5 @@
|
|||||||
|
{%header content: "welcome to liquid" | capitalize%}
|
||||||
|
|
||||||
<ul>
|
<ul>
|
||||||
{% for todo in todos %}
|
{% for todo in todos %}
|
||||||
<li>{{forloop.index}} - {{todo}}</li>
|
<li>{{forloop.index}} - {{todo}}</li>
|
||||||
|
|||||||
@@ -3,6 +3,7 @@
|
|||||||
"version": "7.0.0",
|
"version": "7.0.0",
|
||||||
"description": "Liquid template engine by pure JavaScript: compatible to shopify, easy to extend.",
|
"description": "Liquid template engine by pure JavaScript: compatible to shopify, easy to extend.",
|
||||||
"main": "dist/liquid.common.js",
|
"main": "dist/liquid.common.js",
|
||||||
|
"types": "dist/liquid.d.ts",
|
||||||
"browser": "dist/liquid.js",
|
"browser": "dist/liquid.js",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"lint": "eslint src/ test/ *.js",
|
"lint": "eslint src/ test/ *.js",
|
||||||
|
|||||||
+17
-24
@@ -26,15 +26,12 @@ export default [{
|
|||||||
}],
|
}],
|
||||||
external: ['path', 'fs'],
|
external: ['path', 'fs'],
|
||||||
plugins: [typescript({
|
plugins: [typescript({
|
||||||
include: [ '*.ts', '**/*.ts', '*.js', '**/*.js' ],
|
tsconfigOverride: {
|
||||||
tsconfigOverride: { compilerOptions: {
|
exclude: [ 'test' ],
|
||||||
module: 'ES2015',
|
compilerOptions: {
|
||||||
baseUrl: '.',
|
module: 'ES2015'
|
||||||
paths: {
|
|
||||||
'template': ['src/parser/template'],
|
|
||||||
'src/*': ['src/*']
|
|
||||||
}
|
}
|
||||||
} }
|
}
|
||||||
})],
|
})],
|
||||||
treeshake,
|
treeshake,
|
||||||
input
|
input
|
||||||
@@ -49,15 +46,13 @@ export default [{
|
|||||||
plugins: [
|
plugins: [
|
||||||
shim(fake),
|
shim(fake),
|
||||||
typescript({
|
typescript({
|
||||||
include: [ '*.ts', '**/*.ts', '*.js', '**/*.js' ],
|
tsconfigOverride: {
|
||||||
tsconfigOverride: { compilerOptions: {
|
exclude: [ 'test' ],
|
||||||
module: 'ES2015',
|
compilerOptions: {
|
||||||
baseUrl: '.',
|
module: 'ES2015',
|
||||||
paths: {
|
paths: { 'template': ['src/parser/template-browser'] }
|
||||||
'template': ['src/parser/template-browser'],
|
|
||||||
'src/*': ['src/*']
|
|
||||||
}
|
}
|
||||||
} }
|
}
|
||||||
})
|
})
|
||||||
],
|
],
|
||||||
treeshake,
|
treeshake,
|
||||||
@@ -72,15 +67,13 @@ export default [{
|
|||||||
plugins: [
|
plugins: [
|
||||||
shim(fake),
|
shim(fake),
|
||||||
typescript({
|
typescript({
|
||||||
include: [ '*.ts', '**/*.ts', '*.js', '**/*.js' ],
|
tsconfigOverride: {
|
||||||
tsconfigOverride: { compilerOptions: {
|
exclude: [ 'test' ],
|
||||||
module: 'ES2015',
|
compilerOptions: {
|
||||||
baseUrl: '.',
|
module: 'ES2015',
|
||||||
paths: {
|
paths: { 'template': ['src/parser/template-browser'] }
|
||||||
'template': ['src/parser/template-browser'],
|
|
||||||
'src/*': ['src/*']
|
|
||||||
}
|
}
|
||||||
} }
|
}
|
||||||
}),
|
}),
|
||||||
uglify()
|
uglify()
|
||||||
],
|
],
|
||||||
|
|||||||
+2
-1
@@ -8,6 +8,7 @@ import Render from './render/render'
|
|||||||
import Tag from './template/tag/tag'
|
import Tag from './template/tag/tag'
|
||||||
import Filter from './template/filter'
|
import Filter from './template/filter'
|
||||||
import Parser from './parser/parser'
|
import Parser from './parser/parser'
|
||||||
|
import ITagImplOptions from './template/tag/itag-impl-options'
|
||||||
import Value from './template/value'
|
import Value from './template/value'
|
||||||
import { isTruthy, isFalsy, evalExp, evalValue } from './render/syntax'
|
import { isTruthy, isFalsy, evalExp, evalValue } from './render/syntax'
|
||||||
import builtinTags from './builtin/tags'
|
import builtinTags from './builtin/tags'
|
||||||
@@ -76,7 +77,7 @@ export default class Liquid {
|
|||||||
registerFilter (name, filter) {
|
registerFilter (name, filter) {
|
||||||
return Filter.register(name, filter)
|
return Filter.register(name, filter)
|
||||||
}
|
}
|
||||||
registerTag (name, tag) {
|
registerTag (name: string, tag: ITagImplOptions) {
|
||||||
return Tag.register(name, tag)
|
return Tag.register(name, tag)
|
||||||
}
|
}
|
||||||
plugin (plugin) {
|
plugin (plugin) {
|
||||||
|
|||||||
@@ -8,6 +8,7 @@ import { evalValue } from 'src/render/syntax'
|
|||||||
* hash['foo'] === 'bar'
|
* hash['foo'] === 'bar'
|
||||||
*/
|
*/
|
||||||
export default class Hash {
|
export default class Hash {
|
||||||
|
[key: string]: any
|
||||||
constructor(markup, scope) {
|
constructor(markup, scope) {
|
||||||
let match
|
let match
|
||||||
hashCapture.lastIndex = 0
|
hashCapture.lastIndex = 0
|
||||||
|
|||||||
@@ -0,0 +1,10 @@
|
|||||||
|
import Scope from 'src/scope/scope'
|
||||||
|
import TagToken from 'src/parser/tag-token'
|
||||||
|
import Token from 'src/parser/token'
|
||||||
|
import Hash from 'src/template/tag/hash'
|
||||||
|
import ITagImpl from './itag-impl'
|
||||||
|
|
||||||
|
export default interface ITagImplOptions {
|
||||||
|
parse?: (this: ITagImpl, token: TagToken, remainingTokens: Array<Token>) => void
|
||||||
|
render?: (this: ITagImpl, scope: Scope, hash: Hash) => string | Promise<string>
|
||||||
|
}
|
||||||
@@ -0,0 +1,6 @@
|
|||||||
|
import Liquid from 'src/liquid'
|
||||||
|
import ITagImplOptions from './itag-impl-options'
|
||||||
|
|
||||||
|
export default interface ITagImpl extends ITagImplOptions {
|
||||||
|
liquid: Liquid
|
||||||
|
}
|
||||||
@@ -1,7 +1,9 @@
|
|||||||
import { create } from 'src/util/underscore'
|
import { create } from 'src/util/underscore'
|
||||||
import { stringify } from 'src/util/underscore'
|
import { stringify } from 'src/util/underscore'
|
||||||
import assert from 'src/util/assert'
|
import assert from 'src/util/assert'
|
||||||
import TagImpl from './tagimpl'
|
import ITagImpl from './itag-impl'
|
||||||
|
import ITagImplOptions from './itag-impl-options'
|
||||||
|
import Liquid from 'src/liquid'
|
||||||
import Hash from './hash'
|
import Hash from './hash'
|
||||||
import Template from 'src/template/template'
|
import Template from 'src/template/template'
|
||||||
import ITemplate from 'src/template/itemplate'
|
import ITemplate from 'src/template/itemplate'
|
||||||
@@ -10,10 +12,10 @@ import TagToken from 'src/parser/tag-token'
|
|||||||
export default class Tag extends Template implements ITemplate {
|
export default class Tag extends Template implements ITemplate {
|
||||||
name: string
|
name: string
|
||||||
token: TagToken
|
token: TagToken
|
||||||
private impl: TagImpl
|
private impl: ITagImpl
|
||||||
static impls: object = {}
|
static impls: object = {}
|
||||||
|
|
||||||
constructor (token, tokens, liquid) {
|
constructor (token, tokens, liquid: Liquid) {
|
||||||
super(token)
|
super(token)
|
||||||
this.name = token.name
|
this.name = token.name
|
||||||
|
|
||||||
@@ -34,7 +36,7 @@ export default class Tag extends Template implements ITemplate {
|
|||||||
const html = await impl.render(scope, hash)
|
const html = await impl.render(scope, hash)
|
||||||
return stringify(html)
|
return stringify(html)
|
||||||
}
|
}
|
||||||
static register (name, tag) {
|
static register (name: string, tag: ITagImplOptions) {
|
||||||
Tag.impls[name] = tag
|
Tag.impls[name] = tag
|
||||||
}
|
}
|
||||||
static clear () {
|
static clear () {
|
||||||
|
|||||||
@@ -1,8 +0,0 @@
|
|||||||
import Liquid from 'src/liquid'
|
|
||||||
import Scope from 'src/scope/scope'
|
|
||||||
|
|
||||||
export default interface TagImpl {
|
|
||||||
liquid: Liquid
|
|
||||||
parse: (token: any, remainingTokens: Array<any>) => void
|
|
||||||
render: (scope: Scope, hash: any) => Promise<string>
|
|
||||||
}
|
|
||||||
+7
-7
@@ -8,14 +8,14 @@ function captureStack () {
|
|||||||
}
|
}
|
||||||
|
|
||||||
abstract class LiquidError {
|
abstract class LiquidError {
|
||||||
input: string
|
|
||||||
line: string
|
|
||||||
file: string
|
|
||||||
message: string
|
|
||||||
name: string
|
name: string
|
||||||
|
message: string
|
||||||
stack: string
|
stack: string
|
||||||
token: Token
|
private line: string
|
||||||
originalError: Error
|
private file: string
|
||||||
|
private input: string
|
||||||
|
private token: Token
|
||||||
|
private originalError: Error
|
||||||
constructor(err, token) {
|
constructor(err, token) {
|
||||||
this.input = token.input
|
this.input = token.input
|
||||||
this.line = token.line
|
this.line = token.line
|
||||||
@@ -30,7 +30,7 @@ abstract class LiquidError {
|
|||||||
const err = this.originalError
|
const err = this.originalError
|
||||||
const context = mkContext(this.input, this.line)
|
const context = mkContext(this.input, this.line)
|
||||||
this.message = mkMessage(err.message, this.token)
|
this.message = mkMessage(err.message, this.token)
|
||||||
this.stack = context +
|
this.stack = this.message + '\n' + context +
|
||||||
'\n' + (this.stack || this.message) +
|
'\n' + (this.stack || this.message) +
|
||||||
(err.stack ? '\nFrom ' + err.stack : '')
|
(err.stack ? '\nFrom ' + err.stack : '')
|
||||||
}
|
}
|
||||||
|
|||||||
+2
-4
@@ -3,8 +3,8 @@
|
|||||||
"target": "es5",
|
"target": "es5",
|
||||||
"module":"CommonJS",
|
"module":"CommonJS",
|
||||||
"lib": ["es2015", "es2016", "es2017", "dom"],
|
"lib": ["es2015", "es2016", "es2017", "dom"],
|
||||||
"allowJs": true,
|
|
||||||
"sourceMap": true,
|
"sourceMap": true,
|
||||||
|
"declaration": true,
|
||||||
"allowSyntheticDefaultImports": true,
|
"allowSyntheticDefaultImports": true,
|
||||||
"experimentalDecorators": true,
|
"experimentalDecorators": true,
|
||||||
"emitDecoratorMetadata": true,
|
"emitDecoratorMetadata": true,
|
||||||
@@ -14,8 +14,6 @@
|
|||||||
"src/*": ["src/*"]
|
"src/*": ["src/*"]
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"include": [
|
"include": [ "src", "test" ],
|
||||||
"src", "test"
|
|
||||||
],
|
|
||||||
"exclude": [ "node_modules", "dist" ]
|
"exclude": [ "node_modules", "dist" ]
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user