Compare commits

...
354 Commits
Author SHA1 Message Date
semantic-release-bot 626f911503 chore(release): 9.19.0 [skip ci]
# [9.19.0](https://github.com/harttle/liquidjs/compare/v9.18.0...v9.19.0) (2020-12-18)

### Bug Fixes

* lint ([de32259](https://github.com/harttle/liquidjs/commit/de32259))
* move offset adding complexity inside TimezoneDate ([26b2175](https://github.com/harttle/liquidjs/commit/26b2175))
* simpler timezone regex and non-null offset ([e3ecfe3](https://github.com/harttle/liquidjs/commit/e3ecfe3))

### Features

* add preserveTimezones option ([d70cd2a](https://github.com/harttle/liquidjs/commit/d70cd2a))
* parse and handle date timezone offsets ([c16c787](https://github.com/harttle/liquidjs/commit/c16c787))
2020-12-18 14:07:14 +00:00
JoonasandJun Yang de32259bb9 fix: lint 2020-12-18 22:03:58 +08:00
JoonasandJun Yang d70cd2a1ea feat: add preserveTimezones option 2020-12-18 22:03:58 +08:00
JoonasandJun Yang 26b217542b fix: move offset adding complexity inside TimezoneDate 2020-12-18 22:03:58 +08:00
JoonasandJun Yang e3ecfe3adc fix: simpler timezone regex and non-null offset 2020-12-18 22:03:58 +08:00
wyoziandJun Yang c16c787861 feat: parse and handle date timezone offsets 2020-12-18 22:03:58 +08:00
semantic-release-bot 13f5f95d01 chore(release): 9.18.0 [skip ci]
# [9.18.0](https://github.com/harttle/liquidjs/compare/v9.17.0...v9.18.0) (2020-12-17)

### Bug Fixes

* address refactor comments ([6a0ad10](https://github.com/harttle/liquidjs/commit/6a0ad10))

### Features

* add option for keeping variable type in output ([cd92e77](https://github.com/harttle/liquidjs/commit/cd92e77))
2020-12-17 15:17:09 +00:00
harttle c8db5e6259 docs: try fix special chars in changelog.md 2020-12-17 23:08:54 +08:00
allcontributors[bot]andJun Yang 9e511ecd14 docs: update .all-contributorsrc [skip ci] 2020-12-16 10:23:26 +08:00
allcontributors[bot]andJun Yang 45d95bb8d8 docs: update README.md [skip ci] 2020-12-16 10:23:26 +08:00
PixcellandJun Yang 8d3eca6ee2 stringify value in emitter when concatenating it 2020-12-16 10:20:10 +08:00
Alex de WergifosseandJun Yang 6a0ad102a8 fix: address refactor comments 2020-12-16 10:20:10 +08:00
Alex de WergifosseandJun Yang b8e4b3337b test: add tests for keepOutputType option 2020-12-16 10:20:10 +08:00
Alex de WergifosseandJun Yang cd92e77726 feat: add option for keeping variable type in output 2020-12-16 10:20:10 +08:00
allcontributors[bot]andJun Yang e84fbf32ad docs: update .all-contributorsrc [skip ci] 2020-12-14 22:49:50 +08:00
allcontributors[bot]andJun Yang 0266b27838 docs: update README.md [skip ci] 2020-12-14 22:49:50 +08:00
semantic-release-bot 090c88eb92 chore(release): 9.17.0 [skip ci]
# [9.17.0](https://github.com/harttle/liquidjs/compare/v9.16.1...v9.17.0) (2020-12-07)

### Bug Fixes

* elsif is not supported for unless, fixes [#268](https://github.com/harttle/liquidjs/issues/268) ([2bbf501](https://github.com/harttle/liquidjs/commit/2bbf501))
* enforce string-type pattern in `replace`, fixes [#243](https://github.com/harttle/liquidjs/issues/243) ([c8afa39](https://github.com/harttle/liquidjs/commit/c8afa39))
* raw block not ignoring {% characters, fixes [#263](https://github.com/harttle/liquidjs/issues/263) ([a492d8e](https://github.com/harttle/liquidjs/commit/a492d8e))

### Features

* passing liquid to FilterImpl, closes [#277](https://github.com/harttle/liquidjs/issues/277) ([f9f595f](https://github.com/harttle/liquidjs/commit/f9f595f))
2020-12-07 16:34:49 +00:00
harttle e15803fae4 test: fix e2e test 2020-12-08 00:30:32 +08:00
harttle 117673a725 style: make eslint check .ts files 2020-12-08 00:24:07 +08:00
harttle ef43120d6e test: fix test cases after rebase 2020-12-08 00:20:43 +08:00
harttle f9f595f0f4 feat: passing liquid to FilterImpl, closes #277 2020-12-08 00:17:27 +08:00
harttle 2bbf50171b fix: elsif is not supported for unless, fixes #268 2020-12-08 00:16:36 +08:00
harttle a492d8e23d fix: raw block not ignoring {% characters, fixes #263 2020-12-08 00:12:20 +08:00
harttle c8afa39a01 fix: enforce string-type pattern in replace, fixes #243 2020-12-08 00:08:31 +08:00
sschuldenzuckerandJun Yang d8f9091a12 add and use error classes for undefined variables
cleans up funky message-matching code in expression.ts for lenient.
2020-12-06 22:58:08 +08:00
sschuldenzuckerandJun Yang ca18a579a1 Expression: minor type change & simplification
pre-fetching postfix simplifies code for 'lenient'
2020-12-06 22:58:08 +08:00
sschuldenzuckerandJun Yang 6f2b24f7ca implement lenientIf for the unless tag, too 2020-12-06 22:58:08 +08:00
sschuldenzuckerandJun Yang 87d7dd0d37 docs for the lenientIf option 2020-12-06 22:58:08 +08:00
sschuldenzuckerandJun Yang 768fb79e32 Implement lenientIf option (resolve #265; default off)
See description of the option in liquid-options.ts.
2020-12-06 22:58:08 +08:00
sschuldenzuckerandJun Yang c920ebb282 fix test: don't pass {} for Context 2020-12-06 22:58:08 +08:00
Jun YangandGitHub 9706e8b411 docs: add a security policy, see #254 2020-11-29 20:59:00 +08:00
dependabot[bot]andJun Yang 75698eefec chore(deps): bump highlight.js from 9.18.1 to 9.18.5 in /docs
Bumps [highlight.js](https://github.com/highlightjs/highlight.js) from 9.18.1 to 9.18.5.
- [Release notes](https://github.com/highlightjs/highlight.js/releases)
- [Changelog](https://github.com/highlightjs/highlight.js/blob/9.18.5/CHANGES.md)
- [Commits](https://github.com/highlightjs/highlight.js/compare/9.18.1...9.18.5)

Signed-off-by: dependabot[bot] <[email protected]>
2020-11-25 21:56:22 +08:00
dependabot[bot]andJun Yang dfd358c0a2 chore(deps): bump highlight.js from 9.15.9 to 9.18.5
Bumps [highlight.js](https://github.com/highlightjs/highlight.js) from 9.15.9 to 9.18.5.
- [Release notes](https://github.com/highlightjs/highlight.js/releases)
- [Changelog](https://github.com/highlightjs/highlight.js/blob/9.18.5/CHANGES.md)
- [Commits](https://github.com/highlightjs/highlight.js/compare/9.15.9...9.18.5)

Signed-off-by: dependabot[bot] <[email protected]>
2020-11-25 21:55:58 +08:00
dependabot[bot]andJun Yang 4c70946fa1 chore(deps-dev): bump semantic-release from 15.13.19 to 17.2.3
Bumps [semantic-release](https://github.com/semantic-release/semantic-release) from 15.13.19 to 17.2.3.
- [Release notes](https://github.com/semantic-release/semantic-release/releases)
- [Commits](https://github.com/semantic-release/semantic-release/compare/v15.13.19...v17.2.3)

Signed-off-by: dependabot[bot] <[email protected]>
2020-11-20 22:11:04 +08:00
Jun YangandGitHub 9d9c0c1ca7 docs: update the UMD url and jsFiddle demo, see #264 2020-11-08 12:18:37 +08:00
semantic-release-bot a9d3a5a402 chore(release): 9.16.1 [skip ci]
## [9.16.1](https://github.com/harttle/liquidjs/compare/v9.16.0...v9.16.1) (2020-10-09)

### Bug Fixes

* braced property access ([18a807e](https://github.com/harttle/liquidjs/commit/18a807e))
2020-10-09 13:22:06 +00:00
wyoziandJun Yang 30dffb675e Test for broken quoted property access 2020-10-09 21:18:40 +08:00
wyoziandJun Yang e67c3c6924 Make end brace peek stricter and fix the test 2020-10-09 21:18:40 +08:00
wyoziandJun Yang e2e410f334 Add incomplete quoted property access test 2020-10-09 21:18:40 +08:00
wyoziandJun Yang 27ce44238e Test getVariableAsText 2020-10-09 21:18:40 +08:00
wyoziandJun Yang abfaf8a042 Test quoted property access tokenizing 2020-10-09 21:18:40 +08:00
wyoziandJun Yang 18a807ea2e fix: braced property access 2020-10-09 21:18:40 +08:00
harttle a6126c3bea docs: add amit777 as contributor for code 2020-10-08 16:57:59 +08:00
harttle a96d772963 docs: format 2020-10-08 14:40:58 +08:00
semantic-release-bot 732ef2605e chore(release): 9.16.0 [skip ci]
# [9.16.0](https://github.com/harttle/liquidjs/compare/v9.15.1...v9.16.0) (2020-10-08)

### Features

* support jsTruthy, [#255](https://github.com/harttle/liquidjs/issues/255) [#257](https://github.com/harttle/liquidjs/issues/257) ([72ee7b4](https://github.com/harttle/liquidjs/commit/72ee7b4))
2020-10-08 05:15:00 +00:00
harttle 72ee7b4c1e feat: support jsTruthy, #255 #257 2020-10-08 13:11:02 +08:00
Amit GuptaandJun Yang f807383f2a resolved issues raised by hhartle 2020-10-08 12:43:37 +08:00
Amit GuptaandJun Yang 02bfed1c57 Added jsTruthy flag to constuctor in order to enable JS style truthiness evaluation 2020-10-08 12:43:37 +08:00
harttle b11df79b91 test: make it pass regardless timezone, #257 2020-10-08 09:38:10 +08:00
semantic-release-bot 8ee9bd7ba8 chore(release): 9.15.1 [skip ci]
## [9.15.1](https://github.com/harttle/liquidjs/compare/v9.15.0...v9.15.1) (2020-10-03)

### Bug Fixes

* allow quoted variable name in capture, fixes [#252](https://github.com/harttle/liquidjs/issues/252) ([5b3f419](https://github.com/harttle/liquidjs/commit/5b3f419))
2020-10-03 14:06:41 +00:00
harttle 5b3f4195f0 fix: allow quoted variable name in capture, fixes #252 2020-10-03 22:03:17 +08:00
dependabot[bot]andJun Yang 236d971705 chore(deps): bump node-fetch from 2.6.0 to 2.6.1
Bumps [node-fetch](https://github.com/bitinn/node-fetch) from 2.6.0 to 2.6.1.
- [Release notes](https://github.com/bitinn/node-fetch/releases)
- [Changelog](https://github.com/node-fetch/node-fetch/blob/master/docs/CHANGELOG.md)
- [Commits](https://github.com/bitinn/node-fetch/compare/v2.6.0...v2.6.1)

Signed-off-by: dependabot[bot] <[email protected]>
2020-10-03 20:36:06 +08:00
Jun YangandGitHub 0cd4d87d46 docs: update the demo on index page, fixes #247 2020-09-11 22:30:21 +08:00
harttle 1fdfd4a68a docs: show social share on small screens 2020-08-12 20:37:07 +08:00
dependabot[bot]andJun Yang c1f73a9f03 chore(deps): bump prismjs from 1.19.0 to 1.21.0 in /docs
Bumps [prismjs](https://github.com/PrismJS/prism) from 1.19.0 to 1.21.0.
- [Release notes](https://github.com/PrismJS/prism/releases)
- [Changelog](https://github.com/PrismJS/prism/blob/master/CHANGELOG.md)
- [Commits](https://github.com/PrismJS/prism/compare/v1.19.0...v1.21.0)

Signed-off-by: dependabot[bot] <[email protected]>
2020-08-08 22:14:03 +08:00
semantic-release-bot d8f550e447 chore(release): 9.15.0 [skip ci]
# [9.15.0](https://github.com/harttle/liquidjs/compare/v9.14.1...v9.15.0) (2020-08-04)

### Features

* export toPromise and toValue, see [#158](https://github.com/harttle/liquidjs/issues/158) ([2e5ab98](https://github.com/harttle/liquidjs/commit/2e5ab98))
2020-08-04 16:58:57 +00:00
harttle 2e5ab98bfc feat: export toPromise and toValue, see #158 2020-08-05 00:46:01 +08:00
harttle 0dbb7792d7 docs: fix button style 2020-08-01 22:00:12 +08:00
dependabot[bot]andJun Yang e10ce657dd chore(deps): bump elliptic from 6.5.0 to 6.5.3
Bumps [elliptic](https://github.com/indutny/elliptic) from 6.5.0 to 6.5.3.
- [Release notes](https://github.com/indutny/elliptic/releases)
- [Commits](https://github.com/indutny/elliptic/compare/v6.5.0...v6.5.3)

Signed-off-by: dependabot[bot] <[email protected]>
2020-07-30 22:42:19 +08:00
harttle 3713fa08b2 docs: credit Peter deHaan as contributor 2020-07-25 23:31:48 +08:00
harttle c5002d8cad docs: location.hash for source code 2020-07-25 01:23:47 +08:00
dependabot[bot]andJun Yang 00b0a5708c chore(deps): bump lodash from 4.17.15 to 4.17.19 in /docs
Bumps [lodash](https://github.com/lodash/lodash) from 4.17.15 to 4.17.19.
- [Release notes](https://github.com/lodash/lodash/releases)
- [Commits](https://github.com/lodash/lodash/compare/4.17.15...4.17.19)

Signed-off-by: dependabot[bot] <[email protected]>
2020-07-20 21:14:42 +08:00
semantic-release-bot f82ee8a18c chore(release): 9.14.1 [skip ci]
## [9.14.1](https://github.com/harttle/liquidjs/compare/v9.14.0...v9.14.1) (2020-07-08)

### Bug Fixes

* enumerate Promises (e.g. in for & tablerow) ([#237](https://github.com/harttle/liquidjs/issues/237)) ([941dd66](https://github.com/harttle/liquidjs/commit/941dd66))
2020-07-08 17:40:43 +00:00
dependabot[bot]andJun Yang 632bb6b077 chore(deps): bump npm from 6.13.4 to 6.14.6
Bumps [npm](https://github.com/npm/cli) from 6.13.4 to 6.14.6.
- [Release notes](https://github.com/npm/cli/releases)
- [Changelog](https://github.com/npm/cli/blob/latest/CHANGELOG.md)
- [Commits](https://github.com/npm/cli/compare/v6.13.4...v6.14.6)

Signed-off-by: dependabot[bot] <[email protected]>
2020-07-09 01:36:21 +08:00
allcontributors[bot]GitHuballcontributors[bot] <46447321+allcontributors[bot]@users.noreply.github.com>
0b6ee9bca1 docs: add tejasmanohar as a contributor (#238)
* docs: update README.md [skip ci]

* docs: update .all-contributorsrc [skip ci]

Co-authored-by: allcontributors[bot] <46447321+allcontributors[bot]@users.noreply.github.com>
2020-06-28 09:57:45 +08:00
Tejas ManoharandGitHub 941dd668fe fix: enumerate Promises (e.g. in for & tablerow) (#237)
* fix: enumerate Promise<array> (e.g. in {% for ... %})

Previously, a Promise of an array was not being enumerated in
{% for %}, for example. This is misleading since the library
handles promises elsewhere (e.g. if you {% assign x = promiseArray %}
and then {% for v in x %}, it worked just fine.

This PR makes Promises of arrays handled by changing toEnumerable
to handle then-ables. This affects other iterators, too, e.g. tablerow,
so I put in a test for that as well.
2020-06-28 09:55:56 +08:00
semantic-release-bot 11ffd65503 chore(release): 9.14.0 [skip ci]
# [9.14.0](https://github.com/harttle/liquidjs/compare/v9.13.0...v9.14.0) (2020-06-25)

### Features

* setup universal browser and node builds ([6cf6ffa](https://github.com/harttle/liquidjs/commit/6cf6ffa))
2020-06-25 12:14:45 +00:00
Jun YangandGitHub ce0280ca9f Merge pull request #235 from harttle/all-contributors/add-TrySound
docs: add TrySound as a contributor
2020-06-25 20:10:15 +08:00
allcontributors[bot]andGitHub 1066ef0f76 docs: update .all-contributorsrc [skip ci] 2020-06-25 12:09:50 +00:00
allcontributors[bot]andGitHub 7b38c28d52 docs: update README.md [skip ci] 2020-06-25 12:09:49 +00:00
Jun YangandGitHub 97e7983bd8 Merge pull request #234 from TrySound/proper-modules
feat: setup universal browser and node builds
2020-06-25 20:08:47 +08:00
Bogdan Chadkin 6cf6ffae90 feat: setup universal browser and node builds
In this diff I fixed es modules distribution for bundlers.

Before we had two problems
- bundlers use "module" field to find es module build
- bundlers cannot use provided es module with node target

In this diff I addressed both of them. Now "main" and "module" fields
points to "node" specific versions. "browser" field provides aliases
with browser compatible builds.

All modern browsers support both "module" and "browser" fields.
2020-06-25 13:30:56 +03:00
semantic-release-bot 04873a4e9c chore(release): 9.13.0 [skip ci]
# [9.13.0](https://github.com/harttle/liquidjs/compare/v9.12.0...v9.13.0) (2020-06-25)

### Features

* async filters, closes [#232](https://github.com/harttle/liquidjs/issues/232) ([e36f3ff](https://github.com/harttle/liquidjs/commit/e36f3ff))
2020-06-25 05:56:31 +00:00
harttle 1a08efd402 docs: better style for API doc 2020-06-25 13:15:02 +08:00
harttle e36f3ff291 feat: async filters, closes #232 2020-06-25 12:30:56 +08:00
harttle f3f017bd37 style: spaces and extra NL 2020-05-30 22:13:20 +08:00
harttle 0d20a344b6 docs: manifest for liquidjs.com 2020-05-23 02:14:23 +08:00
Jun YangandGitHub 3acbdfc1b7 Merge pull request #229 from stedman/patch-1
docs: Add hashes to `for` tag documentation
2020-05-23 01:56:13 +08:00
Anthony CiccarelloandJun Yang ed994bdbd5 fix elsif spelling on tags overview in docs 2020-05-23 01:56:03 +08:00
dependabot[bot]andJun Yang 27a4c7666b chore(deps): bump jquery from 3.4.1 to 3.5.0
Bumps [jquery](https://github.com/jquery/jquery) from 3.4.1 to 3.5.0.
- [Release notes](https://github.com/jquery/jquery/releases)
- [Commits](https://github.com/jquery/jquery/compare/3.4.1...3.5.0)

Signed-off-by: dependabot[bot] <[email protected]>
2020-05-23 01:55:30 +08:00
harttle 064ea99f49 docs: add credit for @stedman (#229) and @aciccarello (#223) 2020-05-22 11:44:23 +08:00
harttle 71fb8a8b7c chore: +pre-commit hook, -commitlint on travis 2020-05-22 11:41:32 +08:00
Steve Stedman acdd121a61 docs: Add hashes to for tag documentation
This extremely helpful information was found at https://github.com/Shopify/liquid/wiki/Liquid-for-Designers#allowed-collection-types
2020-05-21 11:11:01 -05:00
semantic-release-bot 2de853e814 chore(release): 9.12.0 [skip ci]
# [9.12.0](https://github.com/harttle/liquidjs/compare/v9.11.11...v9.12.0) (2020-05-15)

### Features

* sort by key, see [#227](https://github.com/harttle/liquidjs/issues/227) ([4f17c94](https://github.com/harttle/liquidjs/commit/4f17c94))
2020-05-15 16:59:44 +00:00
harttle 4f17c94988 feat: sort by key, see #227 2020-05-16 00:54:40 +08:00
semantic-release-bot d39f65c564 chore(release): 9.11.11 [skip ci]
## [9.11.11](https://github.com/harttle/liquidjs/compare/v9.11.10...v9.11.11) (2020-05-01)

### Bug Fixes

* properly treat unicode blanks, fixes [#221](https://github.com/harttle/liquidjs/issues/221) ([673b015](https://github.com/harttle/liquidjs/commit/673b015))
2020-05-01 07:20:59 +00:00
harttle 673b015435 fix: properly treat unicode blanks, fixes #221 2020-04-28 20:55:30 +08:00
harttle 2fa4edaa84 docs: more specific description of strftime 2020-04-19 13:15:11 +08:00
dependabot[bot]andJun Yang 83b46bd25d chore(deps): bump https-proxy-agent from 2.2.2 to 2.2.4
Bumps [https-proxy-agent](https://github.com/TooTallNate/node-https-proxy-agent) from 2.2.2 to 2.2.4.
- [Release notes](https://github.com/TooTallNate/node-https-proxy-agent/releases)
- [Commits](https://github.com/TooTallNate/node-https-proxy-agent/compare/2.2.2...2.2.4)

Signed-off-by: dependabot[bot] <[email protected]>
2020-04-18 14:58:17 +08:00
harttle 4e34e78176 docs: fix docsearch 2020-04-12 20:45:52 +08:00
harttle 3873ba0783 docs: docsearch 2020-04-11 21:52:55 +08:00
dependabot[bot]andJun Yang 4799a98bf9 chore(deps): bump acorn from 3.3.0 to 6.4.1
Bumps [acorn](https://github.com/acornjs/acorn) from 3.3.0 to 6.4.1.
- [Release notes](https://github.com/acornjs/acorn/releases)
- [Commits](https://github.com/acornjs/acorn/compare/3.3.0...6.4.1)

Signed-off-by: dependabot[bot] <[email protected]>
2020-04-04 12:17:47 +08:00
semantic-release-bot 0953680112 chore(release): 9.11.10 [skip ci]
## [9.11.10](https://github.com/harttle/liquidjs/compare/v9.11.9...v9.11.10) (2020-04-03)

### Bug Fixes

* respect cache render options ([a93f11d](https://github.com/harttle/liquidjs/commit/a93f11d))
2020-04-03 15:11:24 +00:00
harttle f6789f517c docs: make it clear for extnames, see #214 2020-04-03 23:08:09 +08:00
allcontributors[bot]andJun Yang 5099b2a762 docs: update README.md [skip ci] 2020-04-03 10:44:38 +08:00
Martin SchusterandJun Yang a93f11d25a fix: respect cache render options 2020-04-03 10:42:32 +08:00
harttle 3cf8072df5 docs: fix news date in liquidjs.com 2020-04-01 14:34:13 +08:00
semantic-release-bot bf609b443b chore(release): 9.11.9 [skip ci]
## [9.11.9](https://github.com/harttle/liquidjs/compare/v9.11.8...v9.11.9) (2020-03-31)

### Bug Fixes

* coerce to Array in `map` and `where` filter ([c923598](https://github.com/harttle/liquidjs/commit/c923598))
2020-03-31 18:26:08 +00:00
harttle c923598b40 fix: coerce to Array in map and where filter 2020-04-01 02:22:44 +08:00
semantic-release-bot d65ed408f0 chore(release): 9.11.8 [skip ci]
## [9.11.8](https://github.com/harttle/liquidjs/compare/v9.11.7...v9.11.8) (2020-03-31)

### Bug Fixes

* throw an error if : omitted unintentionally, [#212](https://github.com/harttle/liquidjs/issues/212), [#208](https://github.com/harttle/liquidjs/issues/208) ([8daf281](https://github.com/harttle/liquidjs/commit/8daf281))
2020-03-31 16:05:54 +00:00
harttle e750c35f8c docs: add @cfjedimaster as a contributor 2020-04-01 00:02:17 +08:00
harttle 8daf281fca fix: throw an error if : omitted unintentionally, #212, #208 2020-03-31 14:05:38 +08:00
harttle c30766ffe1 style: eslint fix docs/ 2020-03-31 01:25:31 +08:00
Raymond CamdenandJun Yang bf23116ce5 Update demo.liquid
Fix typo
2020-03-30 21:17:04 +08:00
harttle 983bcf467a docs: add tutorials/options.md 2020-03-29 22:10:52 +08:00
harttle 9ebf11edcf docs: update README to refer to liquidjs.com 2020-03-28 21:09:08 +08:00
semantic-release-bot 8d0ef21267 chore(release): 9.11.7 [skip ci]
## [9.11.7](https://github.com/harttle/liquidjs/compare/v9.11.6...v9.11.7) (2020-03-28)

### Bug Fixes

* try fix travis ([b3db412](https://github.com/harttle/liquidjs/commit/b3db412))
2020-03-28 10:12:33 +00:00
harttle 687d3ad12a chore: try fix travis again 2020-03-28 18:08:30 +08:00
harttle b3db412428 fix: try fix travis 2020-03-28 17:50:51 +08:00
harttle 3e42d6b1b0 docs: website for LiquidJS 2020-03-28 17:21:07 +08:00
semantic-release-bot 0633dbeabb chore(release): 9.11.6 [skip ci]
## [9.11.6](https://github.com/harttle/liquidjs/compare/v9.11.5...v9.11.6) (2020-03-25)

### Bug Fixes

* default filter not applied for empty array ([c371762](https://github.com/harttle/liquidjs/commit/c371762))
2020-03-25 17:42:48 +00:00
harttle c371762c43 fix: default filter not applied for empty array 2020-03-26 01:39:30 +08:00
semantic-release-bot 94d67d254d chore(release): 9.11.5 [skip ci]
## [9.11.5](https://github.com/harttle/liquidjs/compare/v9.11.4...v9.11.5) (2020-03-24)

### Bug Fixes

* throws on invalid arguments for prepend/append, fixes [#208](https://github.com/harttle/liquidjs/issues/208) ([479c633](https://github.com/harttle/liquidjs/commit/479c633))
2020-03-24 16:29:26 +00:00
harttle 02e6171e25 chore: fix types 2020-03-25 00:25:47 +08:00
harttle 479c63350a fix: throws on invalid arguments for prepend/append, fixes #208 2020-03-24 23:57:26 +08:00
semantic-release-bot 60c14ba057 chore(release): 9.11.4 [skip ci]
## [9.11.4](https://github.com/harttle/liquidjs/compare/v9.11.3...v9.11.4) (2020-03-23)

### Bug Fixes

* return variable name in include error ([93433a8](https://github.com/harttle/liquidjs/commit/93433a8))
2020-03-23 17:31:37 +00:00
harttle c95b5bd718 docs: update README 2020-03-24 01:28:17 +08:00
allcontributors[bot]andJun Yang 4cb713dbf6 docs: update .all-contributorsrc [skip ci] 2020-03-23 23:28:49 +08:00
allcontributors[bot]andJun Yang e97db63249 docs: update README.md [skip ci] 2020-03-23 23:28:49 +08:00
Cristofer GonzalesandJun Yang 93433a8b30 fix: return variable name in include error 2020-03-23 23:26:31 +08:00
harttle 6bf242b9fa docs: reorder badges 2020-03-22 19:05:18 +08:00
Jun Yang c36801640d docs: update README.md to hornor backers 2020-03-17 01:36:07 +08:00
semantic-release-bot 14b04688b5 chore(release): 9.11.3 [skip ci]
## [9.11.3](https://github.com/harttle/liquidjs/compare/v9.11.2...v9.11.3) (2020-03-14)

### Performance Improvements

* introduce AST to avoid reparse ([d2d6a38](https://github.com/harttle/liquidjs/commit/d2d6a38))
* remove instanceof DelimitedToken ([1673e84](https://github.com/harttle/liquidjs/commit/1673e84))
2020-03-14 18:54:31 +00:00
harttle 1673e84e27 perf: remove instanceof DelimitedToken 2020-03-15 02:51:25 +08:00
harttle d2d6a38235 perf: introduce AST to avoid reparse 2020-03-15 02:51:25 +08:00
semantic-release-bot 3b58f1c3f6 chore(release): 9.11.2 [skip ci]
## [9.11.2](https://github.com/harttle/liquidjs/compare/v9.11.1...v9.11.2) (2020-03-14)

### Performance Improvements

* remove transient strings to reduce memory ([3dfdf98](https://github.com/harttle/liquidjs/commit/3dfdf98))
2020-03-14 11:08:23 +00:00
dependabot[bot]andJun Yang dd339dab05 chore(deps): bump acorn from 6.2.1 to 6.4.1
Bumps [acorn](https://github.com/acornjs/acorn) from 6.2.1 to 6.4.1.
- [Release notes](https://github.com/acornjs/acorn/releases)
- [Commits](https://github.com/acornjs/acorn/compare/6.2.1...6.4.1)

Signed-off-by: dependabot[bot] <[email protected]>
2020-03-14 19:05:10 +08:00
harttle f7ef9b61c1 refactor: remove src/render/value.ts 2020-03-14 19:04:18 +08:00
harttle 3dfdf982c9 perf: remove transient strings to reduce memory 2020-03-14 19:04:18 +08:00
harttle 0f25017d5d test: test case for array index, #201 2020-03-11 01:09:58 +08:00
semantic-release-bot 8f05784a0c chore(release): 9.11.1 [skip ci]
## [9.11.1](https://github.com/harttle/liquidjs/compare/v9.11.0...v9.11.1) (2020-03-09)

### Bug Fixes

* concurrent write on LRU cache ([#200](https://github.com/harttle/liquidjs/issues/200)) ([6de9338](https://github.com/harttle/liquidjs/commit/6de9338))
2020-03-09 17:23:57 +00:00
harttle 76f69db752 style: eslint ignore docs/ 2020-03-10 01:19:40 +08:00
harttle 3aa47f6c85 chore: add todolist for benchmark case 2020-03-10 01:10:13 +08:00
harttle 6de933897e fix: concurrent write on LRU cache (#200) 2020-03-10 01:09:41 +08:00
harttle 06ad0481db docs: fix demos 2020-03-10 01:08:25 +08:00
harttle 2c428221cb test: cases for TagMap 2020-03-07 00:58:39 +08:00
allcontributors[bot]andJun Yang 73dd48861d docs: update .all-contributorsrc [skip ci] 2020-03-05 02:14:49 +08:00
allcontributors[bot]andJun Yang 76087b8ec2 docs: update README.md [skip ci] 2020-03-05 02:14:49 +08:00
semantic-release-bot 4826f48f1c chore(release): 9.11.0 [skip ci]
# [9.11.0](https://github.com/harttle/liquidjs/compare/v9.10.0...v9.11.0) (2020-03-04)

### Bug Fixes

* `Buffer not defined` for browser bundles, fixes [#197](https://github.com/harttle/liquidjs/issues/197) ([65b849c](https://github.com/harttle/liquidjs/commit/65b849c))
* stable sort for undefined keys, fixes [#191](https://github.com/harttle/liquidjs/issues/191) ([f57156b](https://github.com/harttle/liquidjs/commit/f57156b))

### Features

* async cache.read()/write(), remove .has() ([61dac49](https://github.com/harttle/liquidjs/commit/61dac49))
2020-03-04 18:08:40 +00:00
harttle f57156bccd fix: stable sort for undefined keys, fixes #191 2020-03-05 02:04:58 +08:00
harttle 61dac49b04 feat: async cache.read()/write(), remove .has() 2020-03-05 01:47:53 +08:00
harttle 65b849c02a fix: Buffer not defined for browser bundles, fixes #197 2020-03-05 01:46:38 +08:00
semantic-release-bot 607a5cda3f chore(release): 9.10.0 [skip ci]
# [9.10.0](https://github.com/harttle/liquidjs/compare/v9.9.0...v9.10.0) (2020-03-03)

### Features

* support json filter, closes [#192](https://github.com/harttle/liquidjs/issues/192) ([aa27a6c](https://github.com/harttle/liquidjs/commit/aa27a6c))
* with & for in `render` tag, closes [#195](https://github.com/harttle/liquidjs/issues/195) ([6ea6881](https://github.com/harttle/liquidjs/commit/6ea6881))
2020-03-03 23:12:54 +00:00
harttle 6ea6881f08 feat: with & for in render tag, closes #195 2020-03-04 07:08:54 +08:00
harttle aa27a6cd7b feat: support json filter, closes #192 2020-03-04 03:42:18 +08:00
harttle 152778b6e3 docs: include demo for LiquidJS used in browsers, #165 2020-03-03 00:37:37 +08:00
semantic-release-bot 3bf926b434 chore(release): 9.9.0 [skip ci]
# [9.9.0](https://github.com/harttle/liquidjs/compare/v9.8.0...v9.9.0) (2020-03-02)

### Features

* move filters/tags to instances, fixes [#188](https://github.com/harttle/liquidjs/issues/188) ([df8a919](https://github.com/harttle/liquidjs/commit/df8a919))
2020-03-02 16:11:08 +00:00
harttle df8a919f71 feat: move filters/tags to instances, fixes #188 2020-03-03 00:02:29 +08:00
semantic-release-bot f6762078e0 chore(release): 9.8.0 [skip ci]
# [9.8.0](https://github.com/harttle/liquidjs/compare/v9.7.2...v9.8.0) (2020-02-20)

### Features

* "today" when using date filter, fixes [#193](https://github.com/harttle/liquidjs/issues/193) ([185312d](https://github.com/harttle/liquidjs/commit/185312d))
2020-02-20 17:53:27 +00:00
harttle 185312dbff feat: "today" when using date filter, fixes #193 2020-02-21 01:48:10 +08:00
semantic-release-bot 5cd42f4500 chore(release): 9.7.2 [skip ci]
## [9.7.2](https://github.com/harttle/liquidjs/compare/v9.7.1...v9.7.2) (2020-02-20)

### Bug Fixes

* add funding entry to show up in npm fund command ([40095a8](https://github.com/harttle/liquidjs/commit/40095a8))
2020-02-20 17:37:45 +00:00
Zach LeathermanandJun Yang 40095a8e71 fix: add funding entry to show up in npm fund command 2020-02-21 01:33:43 +08:00
semantic-release-bot 14527a2545 chore(release): 9.7.1 [skip ci]
## [9.7.1](https://github.com/harttle/liquidjs/compare/v9.7.0...v9.7.1) (2020-02-19)

### Bug Fixes

* update index.html ([22386b0](https://github.com/harttle/liquidjs/commit/22386b0))
2020-02-19 10:31:46 +00:00
Peter deHaanandharttle 22386b0212 fix: update index.html
Fix a couple of errors that were appearing on https://harttle.land/liquidjs/#feature-list
2020-02-19 18:27:09 +08:00
semantic-release-bot 66541a62fd chore(release): 9.7.0 [skip ci]
# [9.7.0](https://github.com/harttle/liquidjs/compare/v9.6.2...v9.7.0) (2020-02-07)

### Bug Fixes

* expression and string literal parser, [#186](https://github.com/harttle/liquidjs/issues/186) ([fc0cf6f](https://github.com/harttle/liquidjs/commit/fc0cf6f))

### Features

* globals shared between tags, see [#185](https://github.com/harttle/liquidjs/issues/185) ([870e7ec](https://github.com/harttle/liquidjs/commit/870e7ec))
2020-02-07 21:05:21 +00:00
harttle 870e7ec6aa feat: globals shared between tags, see #185 2020-02-08 04:59:23 +08:00
harttle fc0cf6fe7b fix: expression and string literal parser, #186 2020-02-08 03:15:55 +08:00
allcontributors[bot]andJun Yang 46b69db87a docs: update .all-contributorsrc [skip ci] 2020-01-10 11:32:04 +08:00
allcontributors[bot]andJun Yang 9733199dc3 docs: update README.md [skip ci] 2020-01-10 11:32:04 +08:00
semantic-release-bot 1e6e9fe1a9 chore(release): 9.6.2 [skip ci]
## [9.6.2](https://github.com/harttle/liquidjs/compare/v9.6.1...v9.6.2) (2020-01-10)

### Performance Improvements

* prevent multiple case evaluations ([807e840](https://github.com/harttle/liquidjs/commit/807e840))
2020-01-10 03:29:50 +00:00
Martin SchusterandJun Yang 807e840712 perf: prevent multiple case evaluations 2020-01-10 11:25:52 +08:00
harttle a9afc9730c docs: add tgrandgent as contributor 2020-01-04 13:55:14 +08:00
harttle 5f9abdc8c6 test: integration cases for opts.fs, see #181 2020-01-04 13:53:08 +08:00
semantic-release-bot e24d9ab1b6 chore(release): 9.6.1 [skip ci]
## [9.6.1](https://github.com/harttle/liquidjs/compare/v9.6.0...v9.6.1) (2020-01-04)

### Bug Fixes

* add `this` to fs references in parseFile ([4b079c5](https://github.com/harttle/liquidjs/commit/4b079c5))
2020-01-04 04:09:40 +00:00
tgrandgentandJun Yang 4b079c54b1 fix: add this to fs references in parseFile 2020-01-04 12:05:39 +08:00
dependabot[bot]andJun Yang b600028607 chore(deps): bump handlebars from 4.1.0 to 4.5.3
Bumps [handlebars](https://github.com/wycats/handlebars.js) from 4.1.0 to 4.5.3.
- [Release notes](https://github.com/wycats/handlebars.js/releases)
- [Changelog](https://github.com/wycats/handlebars.js/blob/master/release-notes.md)
- [Commits](https://github.com/wycats/handlebars.js/compare/v4.1.0...v4.5.3)

Signed-off-by: dependabot[bot] <[email protected]>
2019-12-26 22:50:33 -06:00
semantic-release-bot 5ec3f95317 chore(release): 9.6.0 [skip ci]
# [9.6.0](https://github.com/harttle/liquidjs/compare/v9.5.0...v9.6.0) (2019-12-15)

### Features

* full syntax for strftime, close [#177](https://github.com/harttle/liquidjs/issues/177) ([ba5ff3f](https://github.com/harttle/liquidjs/commit/ba5ff3f))
2019-12-15 02:33:24 +00:00
harttle ba5ff3f41c feat: full syntax for strftime, close #177
- strftime syntax: <flags><width><modifier><conversion>
- new conversions: %n, %t
- fixed conversions: %N
- flags: _ ^ - 0 # :
- modifiers: E, O (ignored)
2019-12-15 02:28:33 +00:00
harttle c69ad538d4 test: remove mock for strftime cases 2019-12-14 18:34:14 +00:00
dependabot[bot]andJun Yang a373e50990 chore(deps): bump npm from 6.10.2 to 6.13.4
Bumps [npm](https://github.com/npm/cli) from 6.10.2 to 6.13.4.
- [Release notes](https://github.com/npm/cli/releases)
- [Changelog](https://github.com/npm/cli/blob/latest/CHANGELOG.md)
- [Commits](https://github.com/npm/cli/compare/v6.10.2...v6.13.4)

Signed-off-by: dependabot[bot] <[email protected]>
2019-12-14 00:28:06 -06:00
semantic-release-bot 90d78ae6d5 chore(release): 9.5.0 [skip ci]
# [9.5.0](https://github.com/harttle/liquidjs/compare/v9.4.2...v9.5.0) (2019-12-12)

### Features

* nested property for the `where` filter, [#178](https://github.com/harttle/liquidjs/issues/178) ([60ec74f](https://github.com/harttle/liquidjs/commit/60ec74f))
2019-12-12 17:21:49 +00:00
harttle 60ec74f55d feat: nested property for the where filter, #178 2019-12-13 01:15:29 +08:00
semantic-release-bot 6502984b50 chore(release): 9.4.2 [skip ci]
## [9.4.2](https://github.com/harttle/liquidjs/compare/v9.4.1...v9.4.2) (2019-11-15)

### Bug Fixes

* reading .first, .last of Array, closes [#175](https://github.com/harttle/liquidjs/issues/175) ([f82da11](https://github.com/harttle/liquidjs/commit/f82da11))
2019-11-15 17:19:40 +00:00
harttle f82da11f5a fix: reading .first, .last of Array, closes #175 2019-11-16 01:14:09 +08:00
semantic-release-bot ef289039fb chore(release): 9.4.1 [skip ci]
## [9.4.1](https://github.com/harttle/liquidjs/compare/v9.4.0...v9.4.1) (2019-11-15)

### Bug Fixes

* remove node dependencies for esm bundle, see [#173](https://github.com/harttle/liquidjs/issues/173) ([04df929](https://github.com/harttle/liquidjs/commit/04df929))
2019-11-15 02:58:48 +00:00
harttle 04df9294b5 fix: remove node dependencies for esm bundle, see #173 2019-11-15 10:53:54 +08:00
semantic-release-bot 79892f6b72 chore(release): 9.4.0 [skip ci]
# [9.4.0](https://github.com/harttle/liquidjs/compare/v9.3.1...v9.4.0) (2019-11-14)

### Features

* add ability to pass JSON context to CLI ([9504e4e](https://github.com/harttle/liquidjs/commit/9504e4e))
2019-11-14 13:18:08 +00:00
allcontributors[bot]andJun Yang 19f3e23b27 docs: update .all-contributorsrc 2019-11-14 07:08:21 -06:00
allcontributors[bot]andJun Yang 993ea20b80 docs: update README.md 2019-11-14 07:08:21 -06:00
harttle 08cbb12228 chore: introduce commit message lint 2019-11-14 21:01:55 +08:00
Brandon Pittmanandharttle 9504e4e45b feat: add ability to pass JSON context to CLI
If you pass a JSON file or JSON string as the first argument to the CLI, you can use variables in your templates that get parsed by the CLI.
2019-11-14 21:01:37 +08:00
semantic-release-bot 0b9b50c5d7 chore(release): 9.3.1 [skip ci]
## [9.3.1](https://github.com/harttle/liquidjs/compare/v9.3.0...v9.3.1) (2019-11-09)

### Bug Fixes

* liquidjs command in /bin/liquid.js, fixes [#169](https://github.com/harttle/liquidjs/issues/169) ([0073b90](https://github.com/harttle/liquidjs/commit/0073b90))
2019-11-09 16:17:47 +00:00
harttle 0073b90b31 fix: liquidjs command in /bin/liquid.js, fixes #169 2019-11-10 00:13:18 +08:00
Jun YangandGitHub 081c432334 docs: update readme 2019-11-09 10:26:58 +08:00
semantic-release-bot 390cd23f5f chore(release): 9.3.0 [skip ci]
# [9.3.0](https://github.com/harttle/liquidjs/compare/v9.2.0...v9.3.0) (2019-11-07)

### Features

* support require.resolve for lookup, see [#168](https://github.com/harttle/liquidjs/issues/168) ([2dd4355](https://github.com/harttle/liquidjs/commit/2dd4355))
2019-11-07 10:51:46 +00:00
harttle 2dd43559b5 feat: support require.resolve for lookup, see #168 2019-11-07 18:46:37 +08:00
dependabot[bot]andJun Yang 5492fb0b17 chore(deps): bump eslint-utils from 1.4.0 to 1.4.3
Bumps [eslint-utils](https://github.com/mysticatea/eslint-utils) from 1.4.0 to 1.4.3.
- [Release notes](https://github.com/mysticatea/eslint-utils/releases)
- [Commits](https://github.com/mysticatea/eslint-utils/compare/v1.4.0...v1.4.3)

Signed-off-by: dependabot[bot] <[email protected]>
2019-11-03 07:51:34 -06:00
semantic-release-bot 1ecff1c341 chore(release): 9.2.0 [skip ci]
# [9.2.0](https://github.com/harttle/liquidjs/compare/v9.1.1...v9.2.0) (2019-10-26)

### Features

* Support for the "render" tag [#163](https://github.com/harttle/liquidjs/issues/163) ([d5e7b04](https://github.com/harttle/liquidjs/commit/d5e7b04))
2019-10-26 16:11:59 +00:00
Jun Yang d5e7b047bb feat: Support for the "render" tag #163 2019-10-27 00:06:16 +08:00
harttle b82fa9ed2b pref: remove await/async from internal async calls 2019-10-26 08:57:33 -05:00
harttle d4ad4b8a8c docs: add .nojekyll 2019-10-24 19:30:46 +08:00
harttle ab8db5394b docs: fix some typos for the website demos 2019-10-20 22:57:28 +08:00
harttle b02a227a81 docs: add home page for API doc 2019-10-20 22:53:29 +08:00
harttle 41a33834e7 docs: add related packages in README 2019-10-19 17:30:49 +08:00
harttle 53e7ea51bd chore: upgrade sinon 2019-10-14 14:56:58 +08:00
harttle ef3e520628 docs: update typedoc 2019-10-14 12:38:18 +08:00
semantic-release-bot be755a900c chore(release): 9.1.1 [skip ci]
## [9.1.1](https://github.com/harttle/liquidjs/compare/v9.1.0...v9.1.1) (2019-10-10)

### Performance Improvements

* add string flattening to reduce retained memory (node only) ([3ad512c](https://github.com/harttle/liquidjs/commit/3ad512c))
2019-10-10 01:39:53 +00:00
Patrick MalouinandJun Yang 3ad512c51c perf: add string flattening to reduce retained memory (node only)
add a memory footprint benchmark
2019-10-10 09:35:15 +08:00
harttle 7bae5bcb79 docs: add demo for React hooks and context (#150) 2019-10-08 21:50:59 +08:00
harttle 3a7ddaa2c3 chore: set demo packages private 2019-10-08 21:50:32 +08:00
semantic-release-bot 362e2d6451 chore(release): 9.1.0 [skip ci]
# [9.1.0](https://github.com/harttle/liquidjs/compare/v9.0.1...v9.1.0) (2019-10-07)

### Features

* alias getTemplate() to parseFile() ([6b83788](https://github.com/harttle/liquidjs/commit/6b83788))
2019-10-07 15:40:44 +00:00
harttle 6b83788077 feat: alias getTemplate() to parseFile()
* deprecate Liquid#getTemplate: use Liquid#parseFile instead
* deprecate Liquid#getTemplateSync: use Liquid#parseFileSync instead
2019-10-07 23:34:12 +08:00
harttle 4f8fc89c6f docs: update reactjs demo for consistant ES6 style 2019-10-07 22:40:36 +08:00
harttle cc8851e56f doc: add Contribute Guidelines 2019-10-05 11:37:59 +08:00
semantic-release-bot 154deeda76 chore(release): 9.0.1 [skip ci]
## [9.0.1](https://github.com/harttle/liquidjs/compare/v9.0.0...v9.0.1) (2019-10-02)

### Bug Fixes

* `unless` content is not waited, fixes [#160](https://github.com/harttle/liquidjs/issues/160) ([d2c8d13](https://github.com/harttle/liquidjs/commit/d2c8d13))
2019-10-02 14:37:23 +00:00
harttle d2c8d133ff fix: unless content is not waited, fixes #160 2019-10-02 22:30:35 +08:00
Jun YangandGitHub 96d98e4ebb doc: update live demo link, see #157 2019-09-14 21:48:22 +08:00
harttle f661cd8b85 doc: fix underscore prefixed doc files by adding .jekyll 2019-08-27 13:07:21 +08:00
harttle 493c4951e1 doc: update typedoc 2019-08-27 12:17:53 +08:00
harttle d3f3d81e2e doc: update typedoc and README.md 2019-08-26 23:31:53 +08:00
semantic-release-bot c2ba1e1f1a chore(release): 9.0.0 [skip ci]
# [9.0.0](https://github.com/harttle/liquidjs/compare/v8.5.3...v9.0.0) (2019-08-26)

### Bug Fixes

* break/continue omitting output before them, [#123](https://github.com/harttle/liquidjs/issues/123) ([ae45c46](https://github.com/harttle/liquidjs/commit/ae45c46))
* reactjs demo during yarn install, fixes [#145](https://github.com/harttle/liquidjs/issues/145) ([b65df44](https://github.com/harttle/liquidjs/commit/b65df44))

### Code Refactoring

* return value of Tag#render is no longer used ([8028f82](https://github.com/harttle/liquidjs/commit/8028f82))

### Features

* renderSync, parseAndRenderSync and renderFileSync, see [#48](https://github.com/harttle/liquidjs/issues/48) ([7fb01ad](https://github.com/harttle/liquidjs/commit/7fb01ad))

### Performance Improvements

* target to es6, fixes [#137](https://github.com/harttle/liquidjs/issues/137) ([3b9fc7e](https://github.com/harttle/liquidjs/commit/3b9fc7e))

### BREAKING CHANGES

* Tag#render now returns void, use emitter argument
to write rendered html.
* ship to Node.js 8, the dist/liquid.cjs.js (main) nolonger
supports Node.js 6, other bundles are also provided via dist/liquid.esm.js, dist/liquid.js (ES5 umd) and liquid.min.js (minified ES5 umd)
* remove default export, now should be used like import
{Liquid} from 'liquidjs'
2019-08-26 15:21:34 +00:00
allcontributors[bot]andJun Yang 31bec7e66e docs: update .all-contributorsrc 2019-08-26 10:16:07 -05:00
allcontributors[bot]andJun Yang 0b6f86d02a docs: update README.md 2019-08-26 10:16:07 -05:00
harttle 28330e1127 chore: fix benchmark 2019-08-26 10:15:43 -05:00
harttle 0426d08fd0 style: fix linting 2019-08-26 10:15:43 -05:00
harttle 7fb01ad69a feat: renderSync, parseAndRenderSync and renderFileSync, see #48 2019-08-26 10:15:43 -05:00
harttle 8028f82499 refactor: return value of Tag#render is no longer used
BREAKING CHANGE: Tag#render now returns void, use emitter argument
to write rendered html.
2019-08-26 10:15:43 -05:00
harttle 76019e9e18 refactor: rewrite expression evaluation, fix #130 2019-08-26 10:15:43 -05:00
semantic-release-botandJun Yang 538610e169 chore(release): 8.5.1 [skip ci]
## [8.5.1](https://github.com/harttle/liquidjs/compare/v8.5.0...v8.5.1) (2019-08-05)

### Bug Fixes

* publish bin directory to npm, fixes [#146](https://github.com/harttle/liquidjs/issues/146) ([a85b650](https://github.com/harttle/liquidjs/commit/a85b650))
2019-08-26 10:15:43 -05:00
harttle b65df447dc fix: reactjs demo during yarn install, fixes #145
simply remove unused dependencies fixes this issue, but I removed
all package-lock.json / yarn.lock since the demo should always be
in sync with the codebase
2019-08-26 10:15:43 -05:00
harttle 3b9fc7e6bf perf: target to es6, fixes #137
BREAKING CHANGE: ship to Node.js 8, the dist/liquid.cjs.js (main) nolonger
supports Node.js 6, other bundles are also provided via dist/liquid.esm.js, dist/liquid.js (ES5 umd) and liquid.min.js (minified ES5 umd)
2019-08-26 10:15:43 -05:00
harttle f35ab6b72e doc: update README and typedoc 2019-08-26 10:15:43 -05:00
harttle ab3b824cf8 style: fix linting 2019-08-26 10:15:43 -05:00
harttle ae45c4622e fix: break/continue omitting output before them, #123
BREAKING CHANGE: remove default export, now should be used like import
{Liquid} from 'liquidjs'
2019-08-26 10:15:43 -05:00
harttle 854e12ba53 refactor: add emitter for code generation 2019-08-26 10:15:43 -05:00
semantic-release-bot ad8e2f7e63 chore(release): 8.5.3 [skip ci]
## [8.5.3](https://github.com/harttle/liquidjs/compare/v8.5.2...v8.5.3) (2019-08-25)

### Bug Fixes

* escape filter when input is undefined ([a00945c](https://github.com/harttle/liquidjs/commit/a00945c))
2019-08-25 09:23:56 +00:00
jamelaitandJun Yang e17bc97d8e fix escape filter with stringify 2019-08-25 04:19:37 -05:00
Jamel AandJun Yang aa15f3dfe1 fixing lint errors 2019-08-25 04:19:37 -05:00
jamelaitandJun Yang a00945cad7 fix: escape filter when input is undefined 2019-08-25 04:19:37 -05:00
allcontributors[bot]andJun Yang 0f4e6d9981 docs: update .all-contributorsrc 2019-08-12 01:54:55 -05:00
allcontributors[bot]andJun Yang db5de49f5e docs: update README.md 2019-08-12 01:54:55 -05:00
semantic-release-bot d50fd1df35 chore(release): 8.5.2 [skip ci]
## [8.5.2](https://github.com/harttle/liquidjs/compare/v8.5.1...v8.5.2) (2019-08-09)

### Bug Fixes

* quotation tokenizing, [#151](https://github.com/harttle/liquidjs/issues/151) ([1e4f237](https://github.com/harttle/liquidjs/commit/1e4f237))
2019-08-09 17:29:27 +00:00
Jun Yang 1e4f237022 fix: quotation tokenizing, #151 2019-08-10 01:24:36 +08:00
Joonas MertanenandJun Yang 9956c53b09 Correctly tokenize quotation marks within single token 2019-08-08 08:08:18 -05:00
Joonas MertanenandJun Yang af841dc872 Add test for property access syntax 2019-08-08 08:08:18 -05:00
Jun YangandGitHub 0408ae7f53 Update README.md 2019-08-06 10:56:03 +08:00
semantic-release-bot 3cf35fd58e chore(release): 8.5.1 [skip ci]
## [8.5.1](https://github.com/harttle/liquidjs/compare/v8.5.0...v8.5.1) (2019-08-05)

### Bug Fixes

* publish bin directory to npm, fixes [#146](https://github.com/harttle/liquidjs/issues/146) ([a85b650](https://github.com/harttle/liquidjs/commit/a85b650))
2019-08-05 17:58:55 +00:00
harttle 58f546ff80 doc: fix doc files with underscores 2019-08-06 01:52:50 +08:00
harttle a85b650ab2 fix: publish bin directory to npm, fixes #146 2019-08-06 01:48:12 +08:00
Jun YangandGitHub d487a2d3ea Create FUNDING.yml 2019-08-06 01:40:34 +08:00
harttle 0b543817ff doc: introduce typedoc and sponsorship, for #126 2019-08-06 01:36:34 +08:00
azuandJun Yang 0d52d570fc docs: fix link in README 2019-08-05 00:23:48 -05:00
semantic-release-bot c354164352 chore(release): 8.5.0 [skip ci]
# [8.5.0](https://github.com/harttle/liquidjs/compare/v8.4.1...v8.5.0) (2019-08-01)

### Features

* CLI support ([fc045b5](https://github.com/harttle/liquidjs/commit/fc045b5))
2019-08-01 05:20:02 +00:00
harttle fc045b5bbc feat: CLI support
echo '{{ "hello" | capitalize }}' | liquidjs
2019-08-01 13:15:55 +08:00
Robin BijlaniandJun Yang c8c6dd8275 Fix: Stringify append and prepend values 2019-07-25 13:12:07 +08:00
semantic-release-bot 49c45a463b chore(release): 8.4.1 [skip ci]
## [8.4.1](https://github.com/harttle/liquidjs/compare/v8.4.0...v8.4.1) (2019-07-22)

### Bug Fixes

* some filters on undefined variable throws, [#140](https://github.com/harttle/liquidjs/issues/140) ([6e6ea0a](https://github.com/harttle/liquidjs/commit/6e6ea0a))
2019-07-22 08:52:48 +00:00
harttle cef5d1aa1a chore: remove support for node_js 6 2019-07-22 16:48:48 +08:00
harttle 6e6ea0ae58 fix: some filters on undefined variable throws, #140 2019-07-22 16:48:48 +08:00
harttle dc9a6e019e doc: make the purpose clear #139 , add plugin list 2019-07-22 02:04:53 +08:00
semantic-release-bot 5adebaa710 chore(release): 8.4.0 [skip ci]
# [8.4.0](https://github.com/harttle/liquidjs/compare/v8.3.0...v8.4.0) (2019-07-06)

### Features

* at_least, at_most, sort_naturual for [#132](https://github.com/harttle/liquidjs/issues/132) ([e6f5f1c](https://github.com/harttle/liquidjs/commit/e6f5f1c))
2019-07-06 06:54:15 +00:00
harttle 34d5af25a4 chore: trying to fix TS4053 2019-07-06 14:49:39 +08:00
harttle 88c89fe3b3 style: introduce @typescript-eslint/recommended 2019-07-06 14:33:34 +08:00
harttle e6f5f1cd85 feat: at_least, at_most, sort_naturual for #132 2019-07-05 12:09:00 +08:00
semantic-release-bot 570400ebcc chore(release): 8.3.0 [skip ci]
# [8.3.0](https://github.com/harttle/liquidjs/compare/v8.2.4...v8.3.0) (2019-06-27)

### Features

* fs option implemented by [#138](https://github.com/harttle/liquidjs/issues/138) ([3f5e23c](https://github.com/harttle/liquidjs/commit/3f5e23c))
2019-06-27 01:47:56 +00:00
Jun Yang 3f5e23c42b feat: fs option implemented by #138 2019-06-27 09:42:29 +08:00
Jun Yang 96c061bee0 style: remove semi 2019-06-27 09:32:51 +08:00
Patrick MalouinandJun Yang edb2cc1f37 Expose fs as an option to override the default implementations 2019-06-27 09:25:17 +08:00
harttle 2ae8c37a4f chore: add @semantic-release/github for notify 2019-06-17 17:24:07 +08:00
semantic-release-bot 0bc5908f17 chore(release): 8.2.4 [skip ci]
## [8.2.4](https://github.com/harttle/liquidjs/compare/v8.2.3...v8.2.4) (2019-06-17)

### Performance Improvements

* improve getTemplate() when cache is enabled ([1ffba2b](https://github.com/harttle/liquidjs/commit/1ffba2b))
2019-06-17 03:10:34 +00:00
Patrick MalouinandJun Yang 1ffba2bc76 perf: improve getTemplate() when cache is enabled
Checking for file existence is unnecessary when cache contains entry.
2019-06-17 11:01:02 +08:00
semantic-release-bot bbebb5515c chore(release): 8.2.3 [skip ci]
## [8.2.3](https://github.com/harttle/liquidjs/compare/v8.2.2...v8.2.3) (2019-05-19)

### Bug Fixes

* reverse filter not pure, see [#126](https://github.com/harttle/liquidjs/issues/126) ([505c408](https://github.com/harttle/liquidjs/commit/505c408))
2019-05-19 06:10:34 +00:00
Jun Yang b14430a161 style: test/integration/builtin/filters/array.ts 2019-05-19 14:05:28 +08:00
Jun Yang 505c408a85 fix: reverse filter not pure, see #126 2019-05-19 13:58:11 +08:00
Jun Yang 224679a7d7 chore: speedup unit test on windows 2019-05-19 13:00:51 +08:00
semantic-release-bot 2cb4bffd3e chore(release): 8.2.2 [skip ci]
## [8.2.2](https://github.com/harttle/liquidjs/compare/v8.2.1...v8.2.2) (2019-05-12)

### Bug Fixes

* date from integer, [#125](https://github.com/harttle/liquidjs/issues/125) ([fdf0043](https://github.com/harttle/liquidjs/commit/fdf0043))
* pass drops directly to filters/tags ([bef2909](https://github.com/harttle/liquidjs/commit/bef2909))
2019-05-12 15:02:33 +00:00
harttle c940e6c997 chore: try to make unit test locale independent 2019-05-12 22:58:29 +08:00
harttle d8ba009773 chore: fix building 2019-05-12 21:29:58 +08:00
harttle fdf0043b9c fix: date from integer, #125 2019-05-12 21:03:35 +08:00
harttle bef290923c fix: pass drops directly to filters/tags 2019-05-12 20:03:32 +08:00
semantic-release-bot 4282accaa2 chore(release): 8.2.1 [skip ci]
## [8.2.1](https://github.com/harttle/liquidjs/compare/v8.2.0...v8.2.1) (2019-04-26)

### Bug Fixes

* `default` filter is not working with an empty string, [#122](https://github.com/harttle/liquidjs/issues/122) ([6075c0a](https://github.com/harttle/liquidjs/commit/6075c0a))
2019-04-26 16:32:20 +00:00
harttle 6075c0a54f fix: default filter is not working with an empty string, #122 2019-04-27 00:26:17 +08:00
semantic-release-bot 87489f6098 chore(release): 8.2.0 [skip ci]
# [8.2.0](https://github.com/harttle/liquidjs/compare/v8.1.0...v8.2.0) (2019-04-17)

### Features

* pass context to filters ([00bc1ef](https://github.com/harttle/liquidjs/commit/00bc1ef))
2019-04-17 02:51:13 +00:00
harttle 6c5dc336e7 chore: fix linting, working on #120 2019-04-17 10:45:02 +08:00
harttle 00bc1efe6a feat: pass context to filters 2019-04-17 10:24:55 +08:00
harttle 6fb4796202 chore: set outDir to dist, see #119 2019-04-16 11:23:29 +08:00
semantic-release-bot 7483613b23 chore(release): 8.1.0 [skip ci]
# [8.1.0](https://github.com/harttle/liquidjs/compare/v8.0.3...v8.1.0) (2019-04-02)

### Features

* where filter, working on [#118](https://github.com/harttle/liquidjs/issues/118) ([daa0b57](https://github.com/harttle/liquidjs/commit/daa0b57))
2019-04-02 04:55:18 +00:00
harttle 7762dd9612 chore: fix linting 2019-04-02 12:10:35 +08:00
Jun Yang daa0b574fc feat: where filter, working on #118
doc: https://shopify.github.io/liquid/filters/where/
ruby impl: https://github.com/Shopify/liquid/blob/14cd011cb5eef042af192ad5294c8f0e1ae89f06/lib/liquid/standardfilters.rb
2019-04-02 00:46:32 +08:00
semantic-release-bot a084183246 chore(release): 8.0.3 [skip ci]
## [8.0.3](https://github.com/harttle/liquidjs/compare/v8.0.2...v8.0.3) (2019-04-01)

### Bug Fixes

* slice filter on negative `begin`, [#117](https://github.com/harttle/liquidjs/issues/117) ([eadb6f3](https://github.com/harttle/liquidjs/commit/eadb6f3))
2019-04-01 03:04:24 +00:00
harttle eadb6f3711 fix: slice filter on negative begin, #117 2019-04-01 10:57:08 +08:00
semantic-release-bot dba26f24e6 chore(release): 8.0.2 [skip ci]
## [8.0.2](https://github.com/harttle/liquidjs/compare/v8.0.1...v8.0.2) (2019-03-25)

### Performance Improvements

* use polymophism instead duck test ([82d7673](https://github.com/harttle/liquidjs/commit/82d7673))
2019-03-25 15:15:04 +00:00
Jun Yang 722da6a7ee doc: update README 2019-03-25 23:01:04 +08:00
harttle 82d7673554 perf: use polymophism instead duck test 2019-03-25 20:11:23 +08:00
harttle 64dd057552 refactor: Context#propertyAccessSeq => parseProp 2019-03-25 10:36:23 +08:00
harttle 45e3c2bb8e refactor: switch Context <-> Scope concepts 2019-03-25 10:36:23 +08:00
Jun Yang 76345a64c3 doc: update README.md 2019-03-23 22:28:33 +08:00
semantic-release-bot 9e69652655 chore(release): 8.0.1 [skip ci]
## [8.0.1](https://github.com/harttle/liquidjs/compare/v8.0.0...v8.0.1) (2019-03-22)

### Bug Fixes

* incorrect scope when using assign with for, fixes [#115](https://github.com/harttle/liquidjs/issues/115) ([defbb58](https://github.com/harttle/liquidjs/commit/defbb58))
2019-03-22 12:48:41 +00:00
harttle defbb58e66 fix: incorrect scope when using assign with for, fixes #115
* remove AssignScope, CaptureScope, IncrementScope, DecrementScope concepts
* introduce Scope.environments for decrement/increment
* assign to scopes[0] for assign/capture
2019-03-22 20:38:54 +08:00
ssendevandJun Yang b7b92c63cf async Register Tags example 2019-03-21 20:46:21 +08:00
ssendevandJun Yang 265534b7b7 Fix Register Tags example 2019-03-21 20:46:21 +08:00
semantic-release-bot 84ea2c7488 chore(release): 8.0.0 [skip ci]
# [8.0.0](https://github.com/harttle/liquidjs/compare/v7.5.1...v8.0.0) (2019-03-10)

### Code Refactoring

* use camelCase for JavaScript APIs ([64e0c87](https://github.com/harttle/liquidjs/commit/64e0c87))

### Features

* promise support for drops, working on [#65](https://github.com/harttle/liquidjs/issues/65) ([4a8088d](https://github.com/harttle/liquidjs/commit/4a8088d))

### BREAKING CHANGES

* Options and method names in JavaScript API are now renamed to cammelCase, for a complete list see #109
2019-03-10 11:28:39 +00:00
Jun Yang 64e0c876e9 refactor: use camelCase for JavaScript APIs
BREAKING CHANGE: Options and method names in JavaScript API are now renamed to cammelCase, for a complete list see #109
2019-03-10 19:21:09 +08:00
Jun Yang 4a8088d4e4 feat: promise support for drops, working on #65 2019-03-10 18:05:52 +08:00
harttle ad0930f152 test: cover parseFilters in template/value.ts 2019-03-06 01:46:35 +08:00
harttle 998832c772 refactor: mv custom filter test 2019-03-06 01:40:31 +08:00
semantic-release-bot 4ba224043b chore(release): 7.5.1 [skip ci]
## [7.5.1](https://github.com/harttle/liquidjs/compare/v7.5.0...v7.5.1) (2019-03-05)

### Bug Fixes

* named params for filters, working on [#113](https://github.com/harttle/liquidjs/issues/113) ([5ffc904](https://github.com/harttle/liquidjs/commit/5ffc904))
2019-03-05 17:39:56 +00:00
harttle 5ffc904f80 fix: named params for filters, working on #113 2019-03-06 01:30:47 +08:00
semantic-release-bot 08646f75b0 chore(release): 7.5.0 [skip ci]
# [7.5.0](https://github.com/harttle/liquidjs/compare/v7.4.0...v7.5.0) (2019-03-01)

### Features

* tablerowloop object ([3647305](https://github.com/harttle/liquidjs/commit/3647305))
2019-03-01 22:06:31 +00:00
Jun Yang 3647305dcf feat: tablerowloop object
See: https://www.rubydoc.info/gems/liquid/Liquid/TablerowloopDrop
2019-03-02 06:00:30 +08:00
Jun Yang cca0306f5b chore: fix mocha pattern for windows
See: https://github.com/mochajs/mocha/issues/2895
2019-03-02 03:57:38 +08:00
Jun Yang eeeacc4492 chore: fix rollup.config.ts 2019-03-02 03:42:57 +08:00
Jun Yang d44e1d727a chore: fix test on windows 10 2019-03-02 03:36:33 +08:00
semantic-release-bot f960904df4 chore(release): 7.4.0 [skip ci]
# [7.4.0](https://github.com/harttle/liquidjs/compare/v7.3.1...v7.4.0) (2019-02-28)

### Bug Fixes

* math filters now return number, resolves [#110](https://github.com/harttle/liquidjs/issues/110) ([b4acdb4](https://github.com/harttle/liquidjs/commit/b4acdb4))

### Features

* exported Drop interface for [#107](https://github.com/harttle/liquidjs/issues/107) ([7bee9fc](https://github.com/harttle/liquidjs/commit/7bee9fc)), closes [#109](https://github.com/harttle/liquidjs/issues/109)
2019-02-28 05:13:55 +00:00
harttle b4acdb463a fix: math filters now return number, resolves #110
* fix linting
* numbers are no longer fixed:
    i.e. {{0.3 | minus 0.1}} now renders as 0.19999
    Stick to JavaScript number behavior, see: 8.0.0
2019-02-28 13:02:51 +08:00
harttle 21d674e22b chore: fix benchmark npm script 2019-02-28 00:05:37 +08:00
harttle 7bee9fc92d feat: exported Drop interface for #107
Deprecate snake_cased options and APIs, sed #109
2019-02-28 00:05:08 +08:00
harttle b69c3a3203 refactor: IDrop interface => abstract method 2019-02-28 00:05:08 +08:00
harttle d5b9916b2f refactor: Drop.prototype.value => valueOf 2019-02-28 00:05:08 +08:00
semantic-release-bot d0118402e4 chore(release): 7.3.1 [skip ci]
## [7.3.1](https://github.com/harttle/liquidjs/compare/v7.3.0...v7.3.1) (2019-02-25)

### Bug Fixes

* **#108:** remove absolute path in emitted d.ts ([53a835a](https://github.com/harttle/liquidjs/commit/53a835a)), closes [#108](https://github.com/harttle/liquidjs/issues/108)
2019-02-25 17:03:07 +00:00
harttle 31bc71d472 chore: fix linting 2019-02-26 00:56:12 +08:00
harttle 53a835ab54 fix(#108): remove absolute path in emitted d.ts 2019-02-26 00:43:30 +08:00
harttle 75b3e15ca9 chore: fix rollup.config.ts types 2019-02-25 00:12:31 +08:00
harttle f34573ee21 chore: stick with es6 for testing 2019-02-24 23:42:44 +08:00
harttle 875f71d5f2 chore: a simple liquid_method_missing case for #97 2019-02-24 23:08:53 +08:00
harttle 407ac6d0a4 refactor: remove /dist from repo 2019-02-24 23:03:12 +08:00
semantic-release-bot f9f35ebd6c chore(release): 7.3.0 [skip ci]
# [7.3.0](https://github.com/harttle/liquidjs/compare/v7.2.2...v7.3.0) (2019-02-24)

### Features

* nil/null/empty/blank literals, resolves [#102](https://github.com/harttle/liquidjs/issues/102) ([88c9e96](https://github.com/harttle/liquidjs/commit/88c9e96))
2019-02-24 13:55:31 +00:00
harttle 88c9e96392 feat: nil/null/empty/blank literals, resolves #102 2019-02-24 21:50:01 +08:00
semantic-release-bot 54b2adce12 chore(release): 7.2.2 [skip ci]
## [7.2.2](https://github.com/harttle/liquidjs/compare/v7.2.1...v7.2.2) (2019-02-23)

### Bug Fixes

* filters break when argument contains [()|, fixes [#89](https://github.com/harttle/liquidjs/issues/89) ([e977669](https://github.com/harttle/liquidjs/commit/e977669))
2019-02-23 22:32:04 +00:00
harttle 542968e133 refactor: remove unused lexical regexps 2019-02-24 06:26:33 +08:00
harttle 3b7351d9a0 chore: fix linting 2019-02-24 05:03:59 +08:00
harttle e977669118 fix: filters break when argument contains [()|, fixes #89 2019-02-24 04:48:42 +08:00
harttle 279458c670 test: add benchmark 2019-02-23 21:57:02 +08:00
semantic-release-bot 37d12a14eb chore(release): 7.2.1 [skip ci]
## [7.2.1](https://github.com/harttle/liquidjs/compare/v7.2.0...v7.2.1) (2019-02-22)

### Bug Fixes

* default length for truncate and truncatewords ([56c7992](https://github.com/harttle/liquidjs/commit/56c7992))
2019-02-22 19:56:16 +00:00
harttle 3cf01603e8 chore: fix linting 2019-02-23 03:50:45 +08:00
harttle 56c7992b76 fix: default length for truncate and truncatewords 2019-02-23 03:11:07 +08:00
harttle 5b6100d12b refactor: strictly typed 2019-02-23 00:49:54 +08:00
Jun YangandGitHub 51f7e66f60 Update CHANGELOG.md 2019-02-21 01:19:25 +08:00
Jun YangandGitHub 952ab6e73b Update CHANGELOG.md 2019-02-21 01:16:32 +08:00
semantic-release-bot 4171b2e023 chore(release): 7.2.0 [skip ci]
# [7.2.0](https://github.com/harttle/liquidjs/compare/v7.1.0...v7.2.0) (2019-02-20)

### Features

* override output/tag delimiter, fixes [#54](https://github.com/harttle/liquidjs/issues/54) ([d20a043](https://github.com/harttle/liquidjs/commit/d20a043))
2019-02-20 17:12:01 +00:00
harttle d20a043fbb feat: override output/tag delimiter, fixes #54 2019-02-21 01:07:32 +08:00
harttle 3dbab238ae BREAKING CHANGE: trim_value_* -> trim_output_* 2019-02-21 01:07:32 +08:00
semantic-release-bot d7d00421e2 chore(release): 7.1.0 [skip ci]
# [7.1.0](https://github.com/harttle/liquidjs/compare/v7.0.2...v7.1.0) (2019-02-20)

### Features

* throw an Error if delimiter not matched ([c33d8f6](https://github.com/harttle/liquidjs/commit/c33d8f6))
2019-02-20 14:45:44 +00:00
harttle c33d8f6828 feat: throw an Error if delimiter not matched 2019-02-20 22:40:09 +08:00
harttle c13a16fdd6 7.0.2 2019-02-20 10:02:10 +08:00
harttle 4bd35de867 chore: use white list to publish npm 2019-02-20 10:01:09 +08:00
harttle 29f53304bc 7.0.1 2019-02-19 23:55:38 +08:00
harttle cbebb00ef1 fix: unit test on Node.js 6 2019-02-19 23:25:08 +08:00
harttle 64a9eb79c5 style: fix unused vars in unit test 2019-02-19 23:01:59 +08:00
harttle 852c6ad453 refactor: remove mock-fs from dev dependency 2019-02-19 22:28:27 +08:00
harttle f432aade6a chore(TypeScript): remove mock-fs 2019-02-17 21:37:13 +08:00
harttle aa49b4f117 chore(TypeScript): fix unit tests and coverage 2019-02-17 20:46:33 +08:00
harttle fc9ebdb90f chore(TypeScript): fix linting and generate .d.ts 2019-02-17 18:20:04 +08:00
harttle 7ee87008c7 chore(TypeScript): demo for typescript 2019-02-17 14:22:13 +08:00
harttle 677e8511e6 chore(TypeScript): refactor objects into classes
fix: `Nil`(null, undefined) now renders as empty string
change: `parser.parseValue()` renamed to `parser.parseOutput`
change: registered tags/filters become static and shared across different liquid instances
2019-02-17 04:55:30 +08:00
semantic-release-bot b51b0dabca chore(release): 7.0.0 [skip ci]
# [7.0.0](https://github.com/harttle/liquidjs/compare/v6.4.3...v7.0.0) (2019-02-14)

### chore

* **TypeScript:** ship Liquid to class ([1cc7249](https://github.com/harttle/liquidjs/commit/1cc7249))

### BREAKING CHANGES

* **TypeScript:** calling `Liquid()` without `new` now becomes invalid
2019-02-14 16:02:23 +00:00
harttle 1cc7249a71 chore(TypeScript): ship Liquid to class
BREAKING CHANGE: calling `Liquid()` without `new` now becomes invalid
2019-02-14 23:53:40 +08:00
harttle a626de632c chore(CI): remove node_js 4 2019-02-14 23:15:29 +08:00
harttle 83a8e2d310 chore(CI): skip unit test on node_js 4 2019-02-14 23:11:13 +08:00
harttle c37b330751 chore(typescript): ship to TypeScript 2019-02-14 22:33:45 +08:00
semantic-release-bot c8de8bcde2 chore(release): 6.4.3 [skip ci]
## [6.4.3](https://github.com/harttle/liquidjs/compare/v6.4.2...v6.4.3) (2019-02-13)

### Bug Fixes

* better index.d.ts and a demo ([2015f68](https://github.com/harttle/liquidjs/commit/2015f68)), closes [#98](https://github.com/harttle/liquidjs/issues/98)
2019-02-13 12:13:27 +00:00
harttle 2015f683b8 fix: better index.d.ts and a demo
The demo is located at demo/typescript/index.ts , working on #98
2019-02-13 20:07:13 +08:00
semantic-release-bot d14f18520b chore(release): 6.4.2 [skip ci]
## [6.4.2](https://github.com/harttle/liquidjs/compare/v6.4.1...v6.4.2) (2019-01-28)

### Bug Fixes

* **CI:** e2e not building cjs ([dde7b3b](https://github.com/harttle/liquidjs/commit/dde7b3b))
2019-01-28 17:34:02 +00:00
Jun Yang c0524a83f3 chore: remove build from e2e, check es5 after published 2019-01-29 01:28:02 +08:00
Jun Yang dde7b3b389 fix(CI): e2e not building cjs 2019-01-29 01:08:52 +08:00
551 changed files with 36366 additions and 43035 deletions
+349
View File
@@ -0,0 +1,349 @@
{
"projectName": "liquidjs",
"projectOwner": "harttle",
"repoType": "github",
"repoHost": "https://github.com",
"files": [
"README.md"
],
"imageSize": 100,
"commit": false,
"commitConvention": "angular",
"contributors": [
{
"login": "harttle",
"name": "Jun Yang",
"avatar_url": "https://avatars3.githubusercontent.com/u/4427974?v=4",
"profile": "https://harttle.land",
"contributions": [
"maintenance",
"code"
]
},
{
"login": "chenos",
"name": "chenos",
"avatar_url": "https://avatars0.githubusercontent.com/u/2993310?v=4",
"profile": "https://github.com/chenos",
"contributions": [
"code"
]
},
{
"login": "zachleat",
"name": "Zach Leatherman",
"avatar_url": "https://avatars2.githubusercontent.com/u/39355?v=4",
"profile": "https://zachleat.com/",
"contributions": [
"bug"
]
},
{
"login": "thardy",
"name": "Tim Hardy",
"avatar_url": "https://avatars3.githubusercontent.com/u/120636?v=4",
"profile": "https://github.com/thardy",
"contributions": [
"code"
]
},
{
"login": "paulrobertlloyd",
"name": "Paul Robert Lloyd",
"avatar_url": "https://avatars3.githubusercontent.com/u/813383?v=4",
"profile": "https://paulrobertlloyd.com/",
"contributions": [
"code",
"bug"
]
},
{
"login": "aleclarson",
"name": "Alec Larson",
"avatar_url": "https://avatars2.githubusercontent.com/u/1925840?v=4",
"profile": "https://twitter.com/alecdotbiz",
"contributions": [
"code"
]
},
{
"login": "pmalouin",
"name": "Patrick Malouin",
"avatar_url": "https://avatars1.githubusercontent.com/u/1411117?v=4",
"profile": "https://github.com/pmalouin",
"contributions": [
"code",
"doc"
]
},
{
"login": "jaswrks",
"name": "jaswrks",
"avatar_url": "https://avatars3.githubusercontent.com/u/1563559?v=4",
"profile": "https://jaswrks.com",
"contributions": [
"code"
]
},
{
"login": "oott123",
"name": "三三",
"avatar_url": "https://avatars2.githubusercontent.com/u/905663?v=4",
"profile": "https://oott123.com",
"contributions": [
"code",
"ideas"
]
},
{
"login": "ssendev",
"name": "ssendev",
"avatar_url": "https://avatars0.githubusercontent.com/u/450793?v=4",
"profile": "https://github.com/ssendev",
"contributions": [
"code",
"doc"
]
},
{
"login": "wojtask9",
"name": "wojtask9",
"avatar_url": "https://avatars3.githubusercontent.com/u/6099236?v=4",
"profile": "https://github.com/wojtask9",
"contributions": [
"code"
]
},
{
"login": "thelornenelson",
"name": "Andrew Barclay",
"avatar_url": "https://avatars3.githubusercontent.com/u/24596583?v=4",
"profile": "https://github.com/thelornenelson",
"contributions": [
"code"
]
},
{
"login": "cmawhorter",
"name": "Cory Mawhorter",
"avatar_url": "https://avatars2.githubusercontent.com/u/142338?v=4",
"profile": "https://www.stam.pr/",
"contributions": [
"code"
]
},
{
"login": "thehappybug",
"name": "Mehdi Jaffery",
"avatar_url": "https://avatars0.githubusercontent.com/u/3393530?v=4",
"profile": "https://github.com/thehappybug",
"contributions": [
"code"
]
},
{
"login": "robinbijlani",
"name": "Robin Bijlani",
"avatar_url": "https://avatars0.githubusercontent.com/u/2503108?v=4",
"profile": "https://github.com/robinbijlani",
"contributions": [
"code",
"bug"
]
},
{
"login": "ryaninvents",
"name": "Ryan Kennedy",
"avatar_url": "https://avatars3.githubusercontent.com/u/8356669?v=4",
"profile": "https://www.rmkennedy.com",
"contributions": [
"code"
]
},
{
"login": "strax",
"name": "Sami Kukkonen",
"avatar_url": "https://avatars2.githubusercontent.com/u/587213?v=4",
"profile": "https://github.com/strax",
"contributions": [
"code"
]
},
{
"login": "ScottFreeCode",
"name": "Scott Santucci",
"avatar_url": "https://avatars3.githubusercontent.com/u/16506071?v=4",
"profile": "https://ScottFreeCode.github.io/",
"contributions": [
"code"
]
},
{
"login": "stevenanthonyrevo",
"name": "Steven ",
"avatar_url": "https://avatars3.githubusercontent.com/u/8505293?v=4",
"profile": "http://stevenrescigno.com",
"contributions": [
"example",
"code"
]
},
{
"login": "azu",
"name": "azu",
"avatar_url": "https://avatars1.githubusercontent.com/u/19714?v=4",
"profile": "https://efcl.info/",
"contributions": [
"doc"
]
},
{
"login": "wyozi",
"name": "Joonas",
"avatar_url": "https://avatars3.githubusercontent.com/u/4894573?v=4",
"profile": "https://github.com/wyozi",
"contributions": [
"code"
]
},
{
"login": "jamelait",
"name": "Jamel A.",
"avatar_url": "https://avatars1.githubusercontent.com/u/14369255?v=4",
"profile": "https://github.com/jamelait",
"contributions": [
"code"
]
},
{
"login": "brandonpittman",
"name": "Brandon Pittman",
"avatar_url": "https://avatars0.githubusercontent.com/u/967145?v=4",
"profile": "https://brandonpittman.net",
"contributions": [
"code"
]
},
{
"login": "tgrandgent",
"name": "tgrandgent",
"avatar_url": "https://avatars3.githubusercontent.com/u/17069042?v=4",
"profile": "https://github.com/tgrandgent",
"contributions": [
"code"
]
},
{
"login": "mastodon0",
"name": "Martin Schuster",
"avatar_url": "https://avatars1.githubusercontent.com/u/7924332?v=4",
"profile": "https://github.com/mastodon0",
"contributions": [
"code"
]
},
{
"login": "richardo2016",
"name": "Ray",
"avatar_url": "https://avatars0.githubusercontent.com/u/6339390?v=4",
"profile": "http://js.chenlei.me",
"contributions": [
"test",
"code"
]
},
{
"login": "CriGoT",
"name": "Cristofer Gonzales",
"avatar_url": "https://avatars0.githubusercontent.com/u/1936786?v=4",
"profile": "https://github.com/CriGoT",
"contributions": [
"code"
]
},
{
"login": "cfjedimaster",
"name": "Raymond Camden",
"avatar_url": "https://avatars3.githubusercontent.com/u/393660?v=4",
"profile": "https://www.raymondcamden.com",
"contributions": [
"doc"
]
},
{
"login": "stedman",
"name": "Steve Stedman",
"avatar_url": "https://avatars1.githubusercontent.com/u/183122?v=4",
"profile": "https://stedman.dev",
"contributions": [
"doc"
]
},
{
"login": "aciccarello",
"name": "Anthony Ciccarello",
"avatar_url": "https://avatars0.githubusercontent.com/u/11273838?v=4",
"profile": "https://ciccarello.me",
"contributions": [
"doc"
]
},
{
"login": "TrySound",
"name": "Bogdan Chadkin",
"avatar_url": "https://avatars0.githubusercontent.com/u/5635476?v=4",
"profile": "https://twitter.com/IAmTrySound",
"contributions": [
"code"
]
},
{
"login": "tejasmanohar",
"name": "Tejas Manohar",
"avatar_url": "https://avatars0.githubusercontent.com/u/5959235?v=4",
"profile": "https://hightouch.io",
"contributions": [
"code"
]
},
{
"login": "pdehaan",
"name": "Peter deHaan",
"avatar_url": "https://avatars2.githubusercontent.com/u/557895?v=4",
"profile": "http://about.me/peterdehaan",
"contributions": [
"doc"
]
},
{
"login": "amit777",
"name": "amit777",
"avatar_url": "https://avatars0.githubusercontent.com/u/2703309?v=4",
"profile": "https://github.com/amit777",
"contributions": [
"code",
"financial"
]
},
{
"login": "sschuldenzucker",
"name": "Steffen Schuldenzucker",
"avatar_url": "https://avatars3.githubusercontent.com/u/1100776?v=4",
"profile": "http://www.ifi.uzh.ch/en/ce/people/schuldenzucker.html",
"contributions": [
"code"
]
},
{
"login": "Pixcell",
"name": "Pixcell",
"avatar_url": "https://avatars0.githubusercontent.com/u/4005291?v=4",
"profile": "https://github.com/Pixcell",
"contributions": [
"code"
]
}
],
"contributorsPerLine": 7,
"skipCi": true
}
+2 -1
View File
@@ -1,4 +1,5 @@
node_modules
dist
build
demo
coverage
docs
+27 -3
View File
@@ -1,16 +1,40 @@
{
"extends": "standard",
"extends": ["standard", "plugin:@typescript-eslint/recommended"],
"env": {
"mocha": true,
"es6": true,
"browser": true,
"node": true
},
"parser": "@typescript-eslint/parser",
"plugins": [
"mocha",
"standard",
"@typescript-eslint",
"promise"
],
"rules": {
"no-var": 2,
"prefer-const": 2
}
"prefer-const": 2,
"no-unused-vars": "off",
"indent": "off",
"no-dupe-class-members": "off",
"no-useless-constructor": "off",
"@typescript-eslint/indent": ["error", 2],
"@typescript-eslint/explicit-function-return-type": "off",
"@typescript-eslint/no-empty-function": "off",
"@typescript-eslint/no-explicit-any": "off",
"@typescript-eslint/no-object-literal-type-assertion": "off",
"@typescript-eslint/no-use-before-define": "off",
"@typescript-eslint/interface-name-prefix": "off",
"@typescript-eslint/no-non-null-assertion": "off",
"import/export": "off",
"@typescript-eslint/no-unused-vars": ["error", { "vars": "all", "args": "none", "ignoreRestSiblings": false }]
},
"overrides": [{
"files": ["**/*.js", "*.js"],
"rules": {
"@typescript-eslint/no-var-requires": "off"
}
}]
}
+12
View File
@@ -0,0 +1,12 @@
# These are supported funding model platforms
# github: harttle
patreon: harttle
open_collective: liquidjs
ko_fi: # Replace with a single Ko-fi username
tidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel
community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry
liberapay: # Replace with a single Liberapay username
issuehunt: # Replace with a single IssueHunt username
otechie: # Replace with a single Otechie username
custom: # Replace with up to 4 custom sponsorship URLs e.g., ['link1', 'link2']
+7 -2
View File
@@ -2,13 +2,18 @@
*.log
npm-debug.log*
# tests
# cache
.rpt2_cache
coverage/
.nyc_output/
# modules
node_modules/
build/
dist/
demo/*/package-lock.json
demo/*/yarn.json
# editors
.*.swp
.vscode
-3
View File
@@ -1,3 +0,0 @@
/coverage
/test
.*
+15 -6
View File
@@ -1,19 +1,28 @@
language: node_js
node_js:
- "8"
- "6"
- "4"
- "10"
- "8"
jobs:
include:
- stage: test
name: 'Linting'
script: npm run lint
script:
- npm run lint
- name: 'Coverage'
script: npm run coverage && npm run coveralls
script: npm run coverage-coveralls
- stage: release
name: 'Publish'
if: branch = master
script: skip
script: npm run build
deploy:
provider: script
skip_cleanup: true
script: npx semantic-release
- name: 'Document'
if: branch = master
script: npm run build-docs
deploy:
skip_cleanup: true
provider: pages
github_token: $GH_TOKEN
local_dir: docs/public
+581
View File
@@ -1,3 +1,584 @@
# [9.19.0](https://github.com/harttle/liquidjs/compare/v9.18.0...v9.19.0) (2020-12-18)
### Bug Fixes
* lint ([de32259](https://github.com/harttle/liquidjs/commit/de32259))
* move offset adding complexity inside TimezoneDate ([26b2175](https://github.com/harttle/liquidjs/commit/26b2175))
* simpler timezone regex and non-null offset ([e3ecfe3](https://github.com/harttle/liquidjs/commit/e3ecfe3))
### Features
* add preserveTimezones option ([d70cd2a](https://github.com/harttle/liquidjs/commit/d70cd2a))
* parse and handle date timezone offsets ([c16c787](https://github.com/harttle/liquidjs/commit/c16c787))
# [9.18.0](https://github.com/harttle/liquidjs/compare/v9.17.0...v9.18.0) (2020-12-17)
### Bug Fixes
* address refactor comments ([6a0ad10](https://github.com/harttle/liquidjs/commit/6a0ad10))
### Features
* add option for keeping variable type in output ([cd92e77](https://github.com/harttle/liquidjs/commit/cd92e77))
# [9.17.0](https://github.com/harttle/liquidjs/compare/v9.16.1...v9.17.0) (2020-12-07)
### Bug Fixes
* elsif is not supported for unless, fixes [#268](https://github.com/harttle/liquidjs/issues/268) ([2bbf501](https://github.com/harttle/liquidjs/commit/2bbf501))
* enforce string-type pattern in `replace`, fixes [#243](https://github.com/harttle/liquidjs/issues/243) ([c8afa39](https://github.com/harttle/liquidjs/commit/c8afa39))
* raw block not ignoring {% characters, fixes [#263](https://github.com/harttle/liquidjs/issues/263) ([a492d8e](https://github.com/harttle/liquidjs/commit/a492d8e))
### Features
* passing liquid to FilterImpl, closes [#277](https://github.com/harttle/liquidjs/issues/277) ([f9f595f](https://github.com/harttle/liquidjs/commit/f9f595f))
## [9.16.1](https://github.com/harttle/liquidjs/compare/v9.16.0...v9.16.1) (2020-10-09)
### Bug Fixes
* braced property access ([18a807e](https://github.com/harttle/liquidjs/commit/18a807e))
# [9.16.0](https://github.com/harttle/liquidjs/compare/v9.15.1...v9.16.0) (2020-10-08)
### Features
* support jsTruthy, [#255](https://github.com/harttle/liquidjs/issues/255) [#257](https://github.com/harttle/liquidjs/issues/257) ([72ee7b4](https://github.com/harttle/liquidjs/commit/72ee7b4))
## [9.15.1](https://github.com/harttle/liquidjs/compare/v9.15.0...v9.15.1) (2020-10-03)
### Bug Fixes
* allow quoted variable name in capture, fixes [#252](https://github.com/harttle/liquidjs/issues/252) ([5b3f419](https://github.com/harttle/liquidjs/commit/5b3f419))
# [9.15.0](https://github.com/harttle/liquidjs/compare/v9.14.1...v9.15.0) (2020-08-04)
### Features
* export toPromise and toValue, see [#158](https://github.com/harttle/liquidjs/issues/158) ([2e5ab98](https://github.com/harttle/liquidjs/commit/2e5ab98))
## [9.14.1](https://github.com/harttle/liquidjs/compare/v9.14.0...v9.14.1) (2020-07-08)
### Bug Fixes
* enumerate Promises (e.g. in for & tablerow) ([#237](https://github.com/harttle/liquidjs/issues/237)) ([941dd66](https://github.com/harttle/liquidjs/commit/941dd66))
# [9.14.0](https://github.com/harttle/liquidjs/compare/v9.13.0...v9.14.0) (2020-06-25)
### Features
* setup universal browser and node builds ([6cf6ffa](https://github.com/harttle/liquidjs/commit/6cf6ffa))
# [9.13.0](https://github.com/harttle/liquidjs/compare/v9.12.0...v9.13.0) (2020-06-25)
### Features
* async filters, closes [#232](https://github.com/harttle/liquidjs/issues/232) ([e36f3ff](https://github.com/harttle/liquidjs/commit/e36f3ff))
# [9.12.0](https://github.com/harttle/liquidjs/compare/v9.11.11...v9.12.0) (2020-05-15)
### Features
* sort by key, see [#227](https://github.com/harttle/liquidjs/issues/227) ([4f17c94](https://github.com/harttle/liquidjs/commit/4f17c94))
## [9.11.11](https://github.com/harttle/liquidjs/compare/v9.11.10...v9.11.11) (2020-05-01)
### Bug Fixes
* properly treat unicode blanks, fixes [#221](https://github.com/harttle/liquidjs/issues/221) ([673b015](https://github.com/harttle/liquidjs/commit/673b015))
## [9.11.10](https://github.com/harttle/liquidjs/compare/v9.11.9...v9.11.10) (2020-04-03)
### Bug Fixes
* respect cache render options ([a93f11d](https://github.com/harttle/liquidjs/commit/a93f11d))
## [9.11.9](https://github.com/harttle/liquidjs/compare/v9.11.8...v9.11.9) (2020-03-31)
### Bug Fixes
* coerce to Array in `map` and `where` filter ([c923598](https://github.com/harttle/liquidjs/commit/c923598))
## [9.11.8](https://github.com/harttle/liquidjs/compare/v9.11.7...v9.11.8) (2020-03-31)
### Bug Fixes
* throw an error if : omitted unintentionally, [#212](https://github.com/harttle/liquidjs/issues/212), [#208](https://github.com/harttle/liquidjs/issues/208) ([8daf281](https://github.com/harttle/liquidjs/commit/8daf281))
## [9.11.7](https://github.com/harttle/liquidjs/compare/v9.11.6...v9.11.7) (2020-03-28)
### Bug Fixes
* try fix travis ([b3db412](https://github.com/harttle/liquidjs/commit/b3db412))
## [9.11.6](https://github.com/harttle/liquidjs/compare/v9.11.5...v9.11.6) (2020-03-25)
### Bug Fixes
* default filter not applied for empty array ([c371762](https://github.com/harttle/liquidjs/commit/c371762))
## [9.11.5](https://github.com/harttle/liquidjs/compare/v9.11.4...v9.11.5) (2020-03-24)
### Bug Fixes
* throws on invalid arguments for prepend/append, fixes [#208](https://github.com/harttle/liquidjs/issues/208) ([479c633](https://github.com/harttle/liquidjs/commit/479c633))
## [9.11.4](https://github.com/harttle/liquidjs/compare/v9.11.3...v9.11.4) (2020-03-23)
### Bug Fixes
* return variable name in include error ([93433a8](https://github.com/harttle/liquidjs/commit/93433a8))
## [9.11.3](https://github.com/harttle/liquidjs/compare/v9.11.2...v9.11.3) (2020-03-14)
### Performance Improvements
* introduce AST to avoid reparse ([d2d6a38](https://github.com/harttle/liquidjs/commit/d2d6a38))
* remove instanceof DelimitedToken ([1673e84](https://github.com/harttle/liquidjs/commit/1673e84))
## [9.11.2](https://github.com/harttle/liquidjs/compare/v9.11.1...v9.11.2) (2020-03-14)
### Performance Improvements
* remove transient strings to reduce memory ([3dfdf98](https://github.com/harttle/liquidjs/commit/3dfdf98))
## [9.11.1](https://github.com/harttle/liquidjs/compare/v9.11.0...v9.11.1) (2020-03-09)
### Bug Fixes
* concurrent write on LRU cache ([#200](https://github.com/harttle/liquidjs/issues/200)) ([6de9338](https://github.com/harttle/liquidjs/commit/6de9338))
# [9.11.0](https://github.com/harttle/liquidjs/compare/v9.10.0...v9.11.0) (2020-03-04)
### Bug Fixes
* `Buffer not defined` for browser bundles, fixes [#197](https://github.com/harttle/liquidjs/issues/197) ([65b849c](https://github.com/harttle/liquidjs/commit/65b849c))
* stable sort for undefined keys, fixes [#191](https://github.com/harttle/liquidjs/issues/191) ([f57156b](https://github.com/harttle/liquidjs/commit/f57156b))
### Features
* async cache.read()/write(), remove .has() ([61dac49](https://github.com/harttle/liquidjs/commit/61dac49))
# [9.10.0](https://github.com/harttle/liquidjs/compare/v9.9.0...v9.10.0) (2020-03-03)
### Features
* support json filter, closes [#192](https://github.com/harttle/liquidjs/issues/192) ([aa27a6c](https://github.com/harttle/liquidjs/commit/aa27a6c))
* with & for in `render` tag, closes [#195](https://github.com/harttle/liquidjs/issues/195) ([6ea6881](https://github.com/harttle/liquidjs/commit/6ea6881))
# [9.9.0](https://github.com/harttle/liquidjs/compare/v9.8.0...v9.9.0) (2020-03-02)
### Features
* move filters/tags to instances, fixes [#188](https://github.com/harttle/liquidjs/issues/188) ([df8a919](https://github.com/harttle/liquidjs/commit/df8a919))
# [9.8.0](https://github.com/harttle/liquidjs/compare/v9.7.2...v9.8.0) (2020-02-20)
### Features
* "today" when using date filter, fixes [#193](https://github.com/harttle/liquidjs/issues/193) ([185312d](https://github.com/harttle/liquidjs/commit/185312d))
## [9.7.2](https://github.com/harttle/liquidjs/compare/v9.7.1...v9.7.2) (2020-02-20)
### Bug Fixes
* add funding entry to show up in npm fund command ([40095a8](https://github.com/harttle/liquidjs/commit/40095a8))
## [9.7.1](https://github.com/harttle/liquidjs/compare/v9.7.0...v9.7.1) (2020-02-19)
### Bug Fixes
* update index.html ([22386b0](https://github.com/harttle/liquidjs/commit/22386b0))
# [9.7.0](https://github.com/harttle/liquidjs/compare/v9.6.2...v9.7.0) (2020-02-07)
### Bug Fixes
* expression and string literal parser, [#186](https://github.com/harttle/liquidjs/issues/186) ([fc0cf6f](https://github.com/harttle/liquidjs/commit/fc0cf6f))
### Features
* globals shared between tags, see [#185](https://github.com/harttle/liquidjs/issues/185) ([870e7ec](https://github.com/harttle/liquidjs/commit/870e7ec))
## [9.6.2](https://github.com/harttle/liquidjs/compare/v9.6.1...v9.6.2) (2020-01-10)
### Performance Improvements
* prevent multiple case evaluations ([807e840](https://github.com/harttle/liquidjs/commit/807e840))
## [9.6.1](https://github.com/harttle/liquidjs/compare/v9.6.0...v9.6.1) (2020-01-04)
### Bug Fixes
* add `this` to fs references in parseFile ([4b079c5](https://github.com/harttle/liquidjs/commit/4b079c5))
# [9.6.0](https://github.com/harttle/liquidjs/compare/v9.5.0...v9.6.0) (2019-12-15)
### Features
* full syntax for strftime, close [#177](https://github.com/harttle/liquidjs/issues/177) ([ba5ff3f](https://github.com/harttle/liquidjs/commit/ba5ff3f))
# [9.5.0](https://github.com/harttle/liquidjs/compare/v9.4.2...v9.5.0) (2019-12-12)
### Features
* nested property for the `where` filter, [#178](https://github.com/harttle/liquidjs/issues/178) ([60ec74f](https://github.com/harttle/liquidjs/commit/60ec74f))
## [9.4.2](https://github.com/harttle/liquidjs/compare/v9.4.1...v9.4.2) (2019-11-15)
### Bug Fixes
* reading .first, .last of Array, closes [#175](https://github.com/harttle/liquidjs/issues/175) ([f82da11](https://github.com/harttle/liquidjs/commit/f82da11))
## [9.4.1](https://github.com/harttle/liquidjs/compare/v9.4.0...v9.4.1) (2019-11-15)
### Bug Fixes
* remove node dependencies for esm bundle, see [#173](https://github.com/harttle/liquidjs/issues/173) ([04df929](https://github.com/harttle/liquidjs/commit/04df929))
# [9.4.0](https://github.com/harttle/liquidjs/compare/v9.3.1...v9.4.0) (2019-11-14)
### Features
* add ability to pass JSON context to CLI ([9504e4e](https://github.com/harttle/liquidjs/commit/9504e4e))
## [9.3.1](https://github.com/harttle/liquidjs/compare/v9.3.0...v9.3.1) (2019-11-09)
### Bug Fixes
* liquidjs command in /bin/liquid.js, fixes [#169](https://github.com/harttle/liquidjs/issues/169) ([0073b90](https://github.com/harttle/liquidjs/commit/0073b90))
# [9.3.0](https://github.com/harttle/liquidjs/compare/v9.2.0...v9.3.0) (2019-11-07)
### Features
* support require.resolve for lookup, see [#168](https://github.com/harttle/liquidjs/issues/168) ([2dd4355](https://github.com/harttle/liquidjs/commit/2dd4355))
## [9.1.1](https://github.com/harttle/liquidjs/compare/v9.1.0...v9.1.1) (2019-10-10)
### Performance Improvements
* add string flattening to reduce retained memory (node only) ([3ad512c](https://github.com/harttle/liquidjs/commit/3ad512c))
# [9.1.0](https://github.com/harttle/liquidjs/compare/v9.0.1...v9.1.0) (2019-10-07)
### Features
* alias getTemplate() to parseFile() ([6b83788](https://github.com/harttle/liquidjs/commit/6b83788))
## [9.0.1](https://github.com/harttle/liquidjs/compare/v9.0.0...v9.0.1) (2019-10-02)
### Bug Fixes
* `unless` content is not waited, fixes [#160](https://github.com/harttle/liquidjs/issues/160) ([d2c8d13](https://github.com/harttle/liquidjs/commit/d2c8d13))
# [9.0.0](https://github.com/harttle/liquidjs/compare/v8.5.3...v9.0.0) (2019-08-26)
### Bug Fixes
* break/continue omitting output before them, [#123](https://github.com/harttle/liquidjs/issues/123) ([ae45c46](https://github.com/harttle/liquidjs/commit/ae45c46))
* reactjs demo during yarn install, fixes [#145](https://github.com/harttle/liquidjs/issues/145) ([b65df44](https://github.com/harttle/liquidjs/commit/b65df44))
### Code Refactoring
* return value of Tag#render is no longer used ([8028f82](https://github.com/harttle/liquidjs/commit/8028f82))
### Features
* renderSync, parseAndRenderSync and renderFileSync, see [#48](https://github.com/harttle/liquidjs/issues/48) ([7fb01ad](https://github.com/harttle/liquidjs/commit/7fb01ad))
### Performance Improvements
* target to es6, fixes [#137](https://github.com/harttle/liquidjs/issues/137) ([3b9fc7e](https://github.com/harttle/liquidjs/commit/3b9fc7e))
### BREAKING CHANGES
* Tag#render now returns void, use emitter argument
to write rendered html.
* ship to Node.js 8, the dist/liquid.cjs.js (main) nolonger
supports Node.js 6, other bundles are also provided via dist/liquid.esm.js, dist/liquid.js (ES5 umd) and liquid.min.js (minified ES5 umd)
* remove default export, now should be used like import
{Liquid} from 'liquidjs'
## [8.5.3](https://github.com/harttle/liquidjs/compare/v8.5.2...v8.5.3) (2019-08-25)
### Bug Fixes
* escape filter when input is undefined ([a00945c](https://github.com/harttle/liquidjs/commit/a00945c))
## [8.5.2](https://github.com/harttle/liquidjs/compare/v8.5.1...v8.5.2) (2019-08-09)
### Bug Fixes
* quotation tokenizing, [#151](https://github.com/harttle/liquidjs/issues/151) ([1e4f237](https://github.com/harttle/liquidjs/commit/1e4f237))
## [8.5.1](https://github.com/harttle/liquidjs/compare/v8.5.0...v8.5.1) (2019-08-05)
### Bug Fixes
* publish bin directory to npm, fixes [#146](https://github.com/harttle/liquidjs/issues/146) ([a85b650](https://github.com/harttle/liquidjs/commit/a85b650))
# [8.5.0](https://github.com/harttle/liquidjs/compare/v8.4.1...v8.5.0) (2019-08-01)
### Features
* CLI support ([fc045b5](https://github.com/harttle/liquidjs/commit/fc045b5))
## [8.4.1](https://github.com/harttle/liquidjs/compare/v8.4.0...v8.4.1) (2019-07-22)
### Bug Fixes
* some filters on undefined variable throws, [#140](https://github.com/harttle/liquidjs/issues/140) ([6e6ea0a](https://github.com/harttle/liquidjs/commit/6e6ea0a))
# [8.4.0](https://github.com/harttle/liquidjs/compare/v8.3.0...v8.4.0) (2019-07-06)
### Features
* at_least, at_most, sort_naturual for [#132](https://github.com/harttle/liquidjs/issues/132) ([e6f5f1c](https://github.com/harttle/liquidjs/commit/e6f5f1c))
# [8.3.0](https://github.com/harttle/liquidjs/compare/v8.2.4...v8.3.0) (2019-06-27)
### Features
* fs option implemented by [#138](https://github.com/harttle/liquidjs/issues/138) ([3f5e23c](https://github.com/harttle/liquidjs/commit/3f5e23c))
## [8.2.4](https://github.com/harttle/liquidjs/compare/v8.2.3...v8.2.4) (2019-06-17)
### Performance Improvements
* improve getTemplate() when cache is enabled ([1ffba2b](https://github.com/harttle/liquidjs/commit/1ffba2b))
## [8.2.3](https://github.com/harttle/liquidjs/compare/v8.2.2...v8.2.3) (2019-05-19)
### Bug Fixes
* reverse filter not pure, see [#126](https://github.com/harttle/liquidjs/issues/126) ([505c408](https://github.com/harttle/liquidjs/commit/505c408))
## [8.2.2](https://github.com/harttle/liquidjs/compare/v8.2.1...v8.2.2) (2019-05-12)
### Bug Fixes
* date from integer, [#125](https://github.com/harttle/liquidjs/issues/125) ([fdf0043](https://github.com/harttle/liquidjs/commit/fdf0043))
* pass drops directly to filters/tags ([bef2909](https://github.com/harttle/liquidjs/commit/bef2909))
## [8.2.1](https://github.com/harttle/liquidjs/compare/v8.2.0...v8.2.1) (2019-04-26)
### Bug Fixes
* `default` filter is not working with an empty string, [#122](https://github.com/harttle/liquidjs/issues/122) ([6075c0a](https://github.com/harttle/liquidjs/commit/6075c0a))
# [8.2.0](https://github.com/harttle/liquidjs/compare/v8.1.0...v8.2.0) (2019-04-17)
### Features
* pass context to filters ([00bc1ef](https://github.com/harttle/liquidjs/commit/00bc1ef))
# [8.1.0](https://github.com/harttle/liquidjs/compare/v8.0.3...v8.1.0) (2019-04-02)
### Features
* where filter, working on [#118](https://github.com/harttle/liquidjs/issues/118) ([daa0b57](https://github.com/harttle/liquidjs/commit/daa0b57))
## [8.0.3](https://github.com/harttle/liquidjs/compare/v8.0.2...v8.0.3) (2019-04-01)
### Bug Fixes
* slice filter on negative `begin`, [#117](https://github.com/harttle/liquidjs/issues/117) ([eadb6f3](https://github.com/harttle/liquidjs/commit/eadb6f3))
## [8.0.2](https://github.com/harttle/liquidjs/compare/v8.0.1...v8.0.2) (2019-03-25)
### Performance Improvements
* use polymophism instead duck test ([82d7673](https://github.com/harttle/liquidjs/commit/82d7673))
## [8.0.1](https://github.com/harttle/liquidjs/compare/v8.0.0...v8.0.1) (2019-03-22)
### Bug Fixes
* incorrect scope when using assign with for, fixes [#115](https://github.com/harttle/liquidjs/issues/115) ([defbb58](https://github.com/harttle/liquidjs/commit/defbb58))
# [8.0.0](https://github.com/harttle/liquidjs/compare/v7.5.1...v8.0.0) (2019-03-10)
### Code Refactoring
* use camelCase for JavaScript APIs ([64e0c87](https://github.com/harttle/liquidjs/commit/64e0c87))
### Features
* promise support for drops, working on [#65](https://github.com/harttle/liquidjs/issues/65) ([4a8088d](https://github.com/harttle/liquidjs/commit/4a8088d))
### BREAKING CHANGES
* Options and method names in JavaScript API are now renamed to cammelCase, for a complete list see #109
## [7.5.1](https://github.com/harttle/liquidjs/compare/v7.5.0...v7.5.1) (2019-03-05)
### Bug Fixes
* named params for filters, working on [#113](https://github.com/harttle/liquidjs/issues/113) ([5ffc904](https://github.com/harttle/liquidjs/commit/5ffc904))
# [7.5.0](https://github.com/harttle/liquidjs/compare/v7.4.0...v7.5.0) (2019-03-01)
### Features
* tablerowloop object ([3647305](https://github.com/harttle/liquidjs/commit/3647305))
# [7.4.0](https://github.com/harttle/liquidjs/compare/v7.3.1...v7.4.0) (2019-02-28)
### Bug Fixes
* math filters now return number, resolves [#110](https://github.com/harttle/liquidjs/issues/110) ([b4acdb4](https://github.com/harttle/liquidjs/commit/b4acdb4))
### Features
* exported Drop interface for [#107](https://github.com/harttle/liquidjs/issues/107) ([7bee9fc](https://github.com/harttle/liquidjs/commit/7bee9fc)), closes [#109](https://github.com/harttle/liquidjs/issues/109)
## [7.3.1](https://github.com/harttle/liquidjs/compare/v7.3.0...v7.3.1) (2019-02-25)
### Bug Fixes
* **#108:** remove absolute path in emitted d.ts ([53a835a](https://github.com/harttle/liquidjs/commit/53a835a)), closes [#108](https://github.com/harttle/liquidjs/issues/108)
# [7.3.0](https://github.com/harttle/liquidjs/compare/v7.2.2...v7.3.0) (2019-02-24)
### Features
* nil/null/empty/blank literals, resolves [#102](https://github.com/harttle/liquidjs/issues/102) ([88c9e96](https://github.com/harttle/liquidjs/commit/88c9e96))
## [7.2.2](https://github.com/harttle/liquidjs/compare/v7.2.1...v7.2.2) (2019-02-23)
### Bug Fixes
* filters break when argument contains [()|, fixes [#89](https://github.com/harttle/liquidjs/issues/89) ([e977669](https://github.com/harttle/liquidjs/commit/e977669))
## [7.2.1](https://github.com/harttle/liquidjs/compare/v7.2.0...v7.2.1) (2019-02-22)
### Bug Fixes
* default length for truncate and truncatewords ([56c7992](https://github.com/harttle/liquidjs/commit/56c7992))
# [7.2.0](https://github.com/harttle/liquidjs/compare/v7.1.0...v7.2.0) (2019-02-20)
### Features
* override output/tag delimiter, fixes [#54](https://github.com/harttle/liquidjs/issues/54) ([d20a043](https://github.com/harttle/liquidjs/commit/d20a043))
### BREAKING CHANGES
* `trim_value_left` option renamed to `trim_output_left`, `trim_value_right` option renamed to `trim_output_right`
# [7.1.0](https://github.com/harttle/liquidjs/compare/v7.0.2...v7.1.0) (2019-02-20)
### Features
* throw an Error if delimiter not matched ([c33d8f6](https://github.com/harttle/liquidjs/commit/c33d8f6))
# [7.0.0](https://github.com/harttle/liquidjs/compare/v6.4.3...v7.0.0) (2019-02-14)
### chore
* **TypeScript:** ship Liquid to class ([1cc7249](https://github.com/harttle/liquidjs/commit/1cc7249))
### BREAKING CHANGES
* **TypeScript:** calling `Liquid()` without `new` now becomes invalid
## [6.4.3](https://github.com/harttle/liquidjs/compare/v6.4.2...v6.4.3) (2019-02-13)
### Bug Fixes
* better index.d.ts and a demo ([2015f68](https://github.com/harttle/liquidjs/commit/2015f68)), closes [#98](https://github.com/harttle/liquidjs/issues/98)
## [6.4.2](https://github.com/harttle/liquidjs/compare/v6.4.1...v6.4.2) (2019-01-28)
### Bug Fixes
* **CI:** e2e not building cjs ([dde7b3b](https://github.com/harttle/liquidjs/commit/dde7b3b))
## [6.4.1](https://github.com/harttle/liquidjs/compare/v6.4.0...v6.4.1) (2019-01-28)
+95 -248
View File
@@ -1,276 +1,123 @@
# liquidjs
[![npm](https://img.shields.io/npm/v/liquidjs.svg)](https://www.npmjs.org/package/liquidjs)
[![npm](https://img.shields.io/npm/dm/liquidjs.svg)](https://www.npmjs.org/package/liquidjs)
[![Build Status](https://travis-ci.org/harttle/liquidjs.svg?branch=master)](https://travis-ci.org/harttle/liquidjs)
[![Coveralls](https://img.shields.io/coveralls/harttle/liquidjs.svg)](https://coveralls.io/github/harttle/liquidjs?branch=master)
[![npm version](https://img.shields.io/npm/v/liquidjs.svg)](https://www.npmjs.org/package/liquidjs)
[![npm downloads](https://img.shields.io/npm/dm/liquidjs.svg)](https://www.npmjs.org/package/liquidjs)
[![coveralls coverage](https://img.shields.io/coveralls/harttle/liquidjs.svg)](https://coveralls.io/github/harttle/liquidjs?branch=master)
[![travis Build Status](https://travis-ci.org/harttle/liquidjs.svg?branch=master)](https://travis-ci.org/harttle/liquidjs)
[![GitHub issues](https://img.shields.io/github/issues-closed/harttle/liquidjs.svg)](https://github.com/harttle/liquidjs/issues)
[![GitHub contributors](https://img.shields.io/github/contributors/harttle/liquidjs.svg)](https://github.com/harttle/liquidjs/graphs/contributors)
[![David](https://img.shields.io/david/harttle/liquidjs.svg)](https://david-dm.org/harttle/liquidjs)
[![David Dev](https://img.shields.io/david/dev/harttle/liquidjs.svg)](https://david-dm.org/harttle/liquidjs?type=dev)
[![DUB](https://img.shields.io/dub/l/vibe-d.svg)](https://github.com/harttle/liquidjs/blob/master/LICENSE)
[![Commitizen friendly](https://img.shields.io/badge/commitizen-friendly-brightgreen.svg)](http://github.com/harttle/liquidjs)
[![Open Collective contributors](https://img.shields.io/opencollective/all/liquidjs)](https://opencollective.com/liquidjs)
[![David dependencies](https://img.shields.io/david/harttle/liquidjs.svg)](https://david-dm.org/harttle/liquidjs)
[![David devDependencies](https://img.shields.io/david/dev/harttle/liquidjs.svg)](https://david-dm.org/harttle/liquidjs?type=dev)
[![DUB license](https://img.shields.io/dub/l/vibe-d.svg)](https://github.com/harttle/liquidjs/blob/master/LICENSE)
[![Commitizen friendly](https://img.shields.io/badge/commitizen-friendly-brightgreen.svg)](https://github.com/angular/angular.js/blob/master/DEVELOPERS.md#commits)
[![semantic-release](https://img.shields.io/badge/%20%20%F0%9F%93%A6%F0%9F%9A%80-semantic--release-e10079.svg)](https://github.com/harttle/liquidjs)
This is a liquid implementation for both Node.js and browsers. Website: <http://harttle.github.io/liquidjs/>, Live Demo: <https://jsfiddle.net/6u40xbzs/>
A simple, expressive, safe and [Shopify][shopify/liquid] compatible template engine in pure JavaScript.
**The purpose of this repo** is to provide a standard Liquid implementation for the JavaScript community so that [Jekyll sites](https://jekyllrb.com), [Github Pages](https://pages.github.com/) and [Shopify templates](https://themes.shopify.com/) can be ported to Node.js without pain.
**Features**
* [Documentation][doc]
* Please star [LiquidJS on GitHub][github]!
* Support [LiquidJS on Open Collective][oc] or [Patreon][patreon]
* Fully compatible to [shopify][shopify/liquid], with all [tags][tags] and [filters][filters] implemented
* Support layout(extend) and include syntax
* In pure JavaScript with Promise-based API
<p align="center"><a href="https://liquidjs.com"><img height="155px" width="155px" src="https://liquidjs.com/icon/mstile-310x310.png" alt="logo"></a></p>
**Differences**
## Installation
Though being compatible with [Ruby Liquid](https://github.com/shopify/liquid) is one of our priorities, there're still certain differences. You may need some configuration to get it compatible in these senarios:
* Dynamic file locating (enabled by default), which means layout/partial name can be an variable in liquidjs. See [#51](https://github.com/harttle/liquidjs/issues/51).
* Truthy and Falsy. All values except `undefined`, `null`, `false` are truthy, whereas in Ruby Liquid all except `nil` and `false` are truthy. See [#26](https://github.com/harttle/liquidjs/pull/26).
* Number Rendering. Since JavaScript do not distinguish `float` and `integer`, we cannot either convert between them nor render regarding to their type. See [#59](https://github.com/harttle/liquidjs/issues/59).
* [.to_liquid()](https://github.com/Shopify/liquid/wiki/Introduction-to-Drops) has a `.toLiquid()` alias and and the JavaScript `.toString()` is aliased to `.to_s()`.
* [.to_s()](https://www.rubydoc.info/gems/liquid/Liquid/Drop) uses `JSON.prototype.stringify` as default, rather than Ruby's inspect.
## TOC
* Usage
* [Render from String](#render-from-string)
* [Render from File](#render-from-file)
* [Use with Express.js](#use-with-expressjs)
* [Use in Browser](#use-in-browser)
* [Include Partials](#include-partials)
* [Layout Templates (Extends)](#layout-templates-extends)
* API Spec
* [Constructor Options](#options)
* [Register Filters](#register-filters), [Builtin Filters](https://github.com/harttle/liquidjs/wiki/Builtin-Filters)
* [Register Tags](#register-tags), [Builtin Tags](https://github.com/harttle/liquidjs/wiki/Builtin-Tags)
* [Operators](https://github.com/harttle/liquidjs/wiki/Operators)
* [Whitespace Control](https://github.com/harttle/liquidjs/wiki/Whitespace-Control)
* [Contribute Guidelines](#contribute-guidelines)
## Render from String
Install as Node.js dependency:
Install from npm in Node.js:
```bash
# You'll need a promise-polyfill for Node.js < 4
npm install --save liquidjs
```
Parse and Render:
Or use the UMD bundle from jsDelivr:
```javascript
var Liquid = require('liquidjs');
var engine = Liquid();
engine
.parseAndRender('{{name | capitalize}}', {name: 'alice'})
.then(console.log);
// outputs 'Alice'
```html
<script src="https://cdn.jsdelivr.net/npm/liquidjs/dist/liquid.min.js"></script>
```
Caching templates:
More details, refer to [The Setup Guide][setup].
```javascript
var tpl = engine.parse('{{name | capitalize}}');
engine
.render(tpl, {name: 'alice'})
.then(console.log);
## Related Packages
// outputs 'Alice'
```
* [gulp-liquidjs](https://www.npmjs.com/package/@tuanpham-dev/gulp-liquidjs): A shopify compatible Liquid template engine for Gulp using liquidjs.
* [grunt-liquify](https://www.npmjs.com/package/grunt-liquify): A Grunt task to process Liquid using liquidjs. Use it to add Liquid magic to your scripts and css assets.
* [react-liquid](https://github.com/aquibm/react-liquid#readme): Liquid templating language component for React
* [@11ty/eleventy](https://www.npmjs.com/package/@11ty/eleventy): A simpler static site generator. An alternative to Jekyll. Written in JavaScript. Transforms a directory of templates (of varying types) into HTML.
## Render from File
## Backers
```javascript
var engine = Liquid({
root: path.resolve(__dirname, 'views/'), // dirs to lookup layouts/includes
extname: '.liquid' // the extname used for layouts/includes, defaults ""
});
engine.renderFile("hello.liquid", {name: 'alice'})
.then(console.log) // outputs "Alice"
If you love LiquidJS or your company is using LiquidJS? Please consider [support us on Open Collective or Patreon][financial-support].
// which is equivalent to:
engine
.renderFile("hello", {name: 'alice'})
.then(console.log) // outputs "Alice"
```
![backers from open-collective](https://opencollective.com/liquidjs/tiers/backer.svg?avatarHeight=97)
## Use with Express.js
## Contributors ✨
```javascript
// register liquid engine
app.engine('liquid', engine.express());
app.set('views', './views'); // specify the views directory
app.set('view engine', 'liquid'); // set to default
```
Want to contribute? see [Contribution Guidelines][contribution]. Thanks goes to these wonderful people:
[Here](demo/express/)'s an Express demo. When used with Express.js,
Express [`views`][express-views] will be included when looking up
partials(includes and layouts).
<!-- ALL-CONTRIBUTORS-LIST:START - Do not remove or modify this section -->
<!-- prettier-ignore-start -->
<!-- markdownlint-disable -->
<table>
<tr>
<td align="center"><a href="https://harttle.land"><img src="https://avatars3.githubusercontent.com/u/4427974?v=4" width="100px;" alt=""/><br /><sub><b>Jun Yang</b></sub></a><br /><a href="#maintenance-harttle" title="Maintenance">🚧</a> <a href="https://github.com/harttle/liquidjs/commits?author=harttle" title="Code">💻</a></td>
<td align="center"><a href="https://github.com/chenos"><img src="https://avatars0.githubusercontent.com/u/2993310?v=4" width="100px;" alt=""/><br /><sub><b>chenos</b></sub></a><br /><a href="https://github.com/harttle/liquidjs/commits?author=chenos" title="Code">💻</a></td>
<td align="center"><a href="https://zachleat.com/"><img src="https://avatars2.githubusercontent.com/u/39355?v=4" width="100px;" alt=""/><br /><sub><b>Zach Leatherman</b></sub></a><br /><a href="https://github.com/harttle/liquidjs/issues?q=author%3Azachleat" title="Bug reports">🐛</a></td>
<td align="center"><a href="https://github.com/thardy"><img src="https://avatars3.githubusercontent.com/u/120636?v=4" width="100px;" alt=""/><br /><sub><b>Tim Hardy</b></sub></a><br /><a href="https://github.com/harttle/liquidjs/commits?author=thardy" title="Code">💻</a></td>
<td align="center"><a href="https://paulrobertlloyd.com/"><img src="https://avatars3.githubusercontent.com/u/813383?v=4" width="100px;" alt=""/><br /><sub><b>Paul Robert Lloyd</b></sub></a><br /><a href="https://github.com/harttle/liquidjs/commits?author=paulrobertlloyd" title="Code">💻</a> <a href="https://github.com/harttle/liquidjs/issues?q=author%3Apaulrobertlloyd" title="Bug reports">🐛</a></td>
<td align="center"><a href="https://twitter.com/alecdotbiz"><img src="https://avatars2.githubusercontent.com/u/1925840?v=4" width="100px;" alt=""/><br /><sub><b>Alec Larson</b></sub></a><br /><a href="https://github.com/harttle/liquidjs/commits?author=aleclarson" title="Code">💻</a></td>
<td align="center"><a href="https://github.com/pmalouin"><img src="https://avatars1.githubusercontent.com/u/1411117?v=4" width="100px;" alt=""/><br /><sub><b>Patrick Malouin</b></sub></a><br /><a href="https://github.com/harttle/liquidjs/commits?author=pmalouin" title="Code">💻</a> <a href="https://github.com/harttle/liquidjs/commits?author=pmalouin" title="Documentation">📖</a></td>
</tr>
<tr>
<td align="center"><a href="https://jaswrks.com"><img src="https://avatars3.githubusercontent.com/u/1563559?v=4" width="100px;" alt=""/><br /><sub><b>jaswrks</b></sub></a><br /><a href="https://github.com/harttle/liquidjs/commits?author=jaswrks" title="Code">💻</a></td>
<td align="center"><a href="https://oott123.com"><img src="https://avatars2.githubusercontent.com/u/905663?v=4" width="100px;" alt=""/><br /><sub><b>三三</b></sub></a><br /><a href="https://github.com/harttle/liquidjs/commits?author=oott123" title="Code">💻</a> <a href="#ideas-oott123" title="Ideas, Planning, & Feedback">🤔</a></td>
<td align="center"><a href="https://github.com/ssendev"><img src="https://avatars0.githubusercontent.com/u/450793?v=4" width="100px;" alt=""/><br /><sub><b>ssendev</b></sub></a><br /><a href="https://github.com/harttle/liquidjs/commits?author=ssendev" title="Code">💻</a> <a href="https://github.com/harttle/liquidjs/commits?author=ssendev" title="Documentation">📖</a></td>
<td align="center"><a href="https://github.com/wojtask9"><img src="https://avatars3.githubusercontent.com/u/6099236?v=4" width="100px;" alt=""/><br /><sub><b>wojtask9</b></sub></a><br /><a href="https://github.com/harttle/liquidjs/commits?author=wojtask9" title="Code">💻</a></td>
<td align="center"><a href="https://github.com/thelornenelson"><img src="https://avatars3.githubusercontent.com/u/24596583?v=4" width="100px;" alt=""/><br /><sub><b>Andrew Barclay</b></sub></a><br /><a href="https://github.com/harttle/liquidjs/commits?author=thelornenelson" title="Code">💻</a></td>
<td align="center"><a href="https://www.stam.pr/"><img src="https://avatars2.githubusercontent.com/u/142338?v=4" width="100px;" alt=""/><br /><sub><b>Cory Mawhorter</b></sub></a><br /><a href="https://github.com/harttle/liquidjs/commits?author=cmawhorter" title="Code">💻</a></td>
<td align="center"><a href="https://github.com/thehappybug"><img src="https://avatars0.githubusercontent.com/u/3393530?v=4" width="100px;" alt=""/><br /><sub><b>Mehdi Jaffery</b></sub></a><br /><a href="https://github.com/harttle/liquidjs/commits?author=thehappybug" title="Code">💻</a></td>
</tr>
<tr>
<td align="center"><a href="https://github.com/robinbijlani"><img src="https://avatars0.githubusercontent.com/u/2503108?v=4" width="100px;" alt=""/><br /><sub><b>Robin Bijlani</b></sub></a><br /><a href="https://github.com/harttle/liquidjs/commits?author=robinbijlani" title="Code">💻</a> <a href="https://github.com/harttle/liquidjs/issues?q=author%3Arobinbijlani" title="Bug reports">🐛</a></td>
<td align="center"><a href="https://www.rmkennedy.com"><img src="https://avatars3.githubusercontent.com/u/8356669?v=4" width="100px;" alt=""/><br /><sub><b>Ryan Kennedy</b></sub></a><br /><a href="https://github.com/harttle/liquidjs/commits?author=ryaninvents" title="Code">💻</a></td>
<td align="center"><a href="https://github.com/strax"><img src="https://avatars2.githubusercontent.com/u/587213?v=4" width="100px;" alt=""/><br /><sub><b>Sami Kukkonen</b></sub></a><br /><a href="https://github.com/harttle/liquidjs/commits?author=strax" title="Code">💻</a></td>
<td align="center"><a href="https://ScottFreeCode.github.io/"><img src="https://avatars3.githubusercontent.com/u/16506071?v=4" width="100px;" alt=""/><br /><sub><b>Scott Santucci</b></sub></a><br /><a href="https://github.com/harttle/liquidjs/commits?author=ScottFreeCode" title="Code">💻</a></td>
<td align="center"><a href="http://stevenrescigno.com"><img src="https://avatars3.githubusercontent.com/u/8505293?v=4" width="100px;" alt=""/><br /><sub><b>Steven </b></sub></a><br /><a href="#example-stevenanthonyrevo" title="Examples">💡</a> <a href="https://github.com/harttle/liquidjs/commits?author=stevenanthonyrevo" title="Code">💻</a></td>
<td align="center"><a href="https://efcl.info/"><img src="https://avatars1.githubusercontent.com/u/19714?v=4" width="100px;" alt=""/><br /><sub><b>azu</b></sub></a><br /><a href="https://github.com/harttle/liquidjs/commits?author=azu" title="Documentation">📖</a></td>
<td align="center"><a href="https://github.com/wyozi"><img src="https://avatars3.githubusercontent.com/u/4894573?v=4" width="100px;" alt=""/><br /><sub><b>Joonas</b></sub></a><br /><a href="https://github.com/harttle/liquidjs/commits?author=wyozi" title="Code">💻</a></td>
</tr>
<tr>
<td align="center"><a href="https://github.com/jamelait"><img src="https://avatars1.githubusercontent.com/u/14369255?v=4" width="100px;" alt=""/><br /><sub><b>Jamel A.</b></sub></a><br /><a href="https://github.com/harttle/liquidjs/commits?author=jamelait" title="Code">💻</a></td>
<td align="center"><a href="https://brandonpittman.net"><img src="https://avatars0.githubusercontent.com/u/967145?v=4" width="100px;" alt=""/><br /><sub><b>Brandon Pittman</b></sub></a><br /><a href="https://github.com/harttle/liquidjs/commits?author=brandonpittman" title="Code">💻</a></td>
<td align="center"><a href="https://github.com/tgrandgent"><img src="https://avatars3.githubusercontent.com/u/17069042?v=4" width="100px;" alt=""/><br /><sub><b>tgrandgent</b></sub></a><br /><a href="https://github.com/harttle/liquidjs/commits?author=tgrandgent" title="Code">💻</a></td>
<td align="center"><a href="https://github.com/mastodon0"><img src="https://avatars1.githubusercontent.com/u/7924332?v=4" width="100px;" alt=""/><br /><sub><b>Martin Schuster</b></sub></a><br /><a href="https://github.com/harttle/liquidjs/commits?author=mastodon0" title="Code">💻</a></td>
<td align="center"><a href="http://js.chenlei.me"><img src="https://avatars0.githubusercontent.com/u/6339390?v=4" width="100px;" alt=""/><br /><sub><b>Ray</b></sub></a><br /><a href="https://github.com/harttle/liquidjs/commits?author=richardo2016" title="Tests">⚠️</a> <a href="https://github.com/harttle/liquidjs/commits?author=richardo2016" title="Code">💻</a></td>
<td align="center"><a href="https://github.com/CriGoT"><img src="https://avatars0.githubusercontent.com/u/1936786?v=4" width="100px;" alt=""/><br /><sub><b>Cristofer Gonzales</b></sub></a><br /><a href="https://github.com/harttle/liquidjs/commits?author=CriGoT" title="Code">💻</a></td>
<td align="center"><a href="https://www.raymondcamden.com"><img src="https://avatars3.githubusercontent.com/u/393660?v=4" width="100px;" alt=""/><br /><sub><b>Raymond Camden</b></sub></a><br /><a href="https://github.com/harttle/liquidjs/commits?author=cfjedimaster" title="Documentation">📖</a></td>
</tr>
<tr>
<td align="center"><a href="https://stedman.dev"><img src="https://avatars1.githubusercontent.com/u/183122?v=4" width="100px;" alt=""/><br /><sub><b>Steve Stedman</b></sub></a><br /><a href="https://github.com/harttle/liquidjs/commits?author=stedman" title="Documentation">📖</a></td>
<td align="center"><a href="https://ciccarello.me"><img src="https://avatars0.githubusercontent.com/u/11273838?v=4" width="100px;" alt=""/><br /><sub><b>Anthony Ciccarello</b></sub></a><br /><a href="https://github.com/harttle/liquidjs/commits?author=aciccarello" title="Documentation">📖</a></td>
<td align="center"><a href="https://twitter.com/IAmTrySound"><img src="https://avatars0.githubusercontent.com/u/5635476?v=4" width="100px;" alt=""/><br /><sub><b>Bogdan Chadkin</b></sub></a><br /><a href="https://github.com/harttle/liquidjs/commits?author=TrySound" title="Code">💻</a></td>
<td align="center"><a href="https://hightouch.io"><img src="https://avatars0.githubusercontent.com/u/5959235?v=4" width="100px;" alt=""/><br /><sub><b>Tejas Manohar</b></sub></a><br /><a href="https://github.com/harttle/liquidjs/commits?author=tejasmanohar" title="Code">💻</a></td>
<td align="center"><a href="http://about.me/peterdehaan"><img src="https://avatars2.githubusercontent.com/u/557895?v=4" width="100px;" alt=""/><br /><sub><b>Peter deHaan</b></sub></a><br /><a href="https://github.com/harttle/liquidjs/commits?author=pdehaan" title="Documentation">📖</a></td>
<td align="center"><a href="https://github.com/amit777"><img src="https://avatars0.githubusercontent.com/u/2703309?v=4" width="100px;" alt=""/><br /><sub><b>amit777</b></sub></a><br /><a href="https://github.com/harttle/liquidjs/commits?author=amit777" title="Code">💻</a> <a href="#financial-amit777" title="Financial">💵</a></td>
<td align="center"><a href="http://www.ifi.uzh.ch/en/ce/people/schuldenzucker.html"><img src="https://avatars3.githubusercontent.com/u/1100776?v=4" width="100px;" alt=""/><br /><sub><b>Steffen Schuldenzucker</b></sub></a><br /><a href="https://github.com/harttle/liquidjs/commits?author=sschuldenzucker" title="Code">💻</a></td>
</tr>
<tr>
<td align="center"><a href="https://github.com/Pixcell"><img src="https://avatars0.githubusercontent.com/u/4005291?v=4" width="100px;" alt=""/><br /><sub><b>Pixcell</b></sub></a><br /><a href="https://github.com/harttle/liquidjs/commits?author=Pixcell" title="Code">💻</a></td>
</tr>
</table>
## Use in Browser
<!-- markdownlint-enable -->
<!-- prettier-ignore-end -->
<!-- ALL-CONTRIBUTORS-LIST:END -->
You can get a dist file for browsers from
* [Releases][releases] page for liquidjs, or
* unpkg.com: <https://unpkg.com/liquidjs/dist/liquid.min.js>
Here's the demo:
* JSFiddle: <https://jsfiddle.net/6u40xbzs/>
* Demo directory: [/demo/browser/](demo/browser/).
Note: For [IE and Android UC][caniuse-promises] browser, you will need a [Promise polyfill][pp].
## Include Partials
```
// file: color.liquid
color: '{{ color }}' shape: '{{ shape }}'
// file: theme.liquid
{% assign shape = 'circle' %}
{% include 'color' %}
{% include 'color' with 'red' %}
{% include 'color', color: 'yellow', shape: 'square' %}
```
The output will be:
```
color: '' shape: 'circle'
color: 'red' shape: 'circle'
color: 'yellow' shape: 'square'
```
## Layout Templates (Extends)
```
// file: default-layout.liquid
Header
{% block content %}My default content{% endblock %}
Footer
// file: page.liquid
{% layout "default-layout" %}
{% block content %}My page content{% endblock %}
```
The output of `page.liquid`:
```
Header
My page content
Footer
```
* It's possible to define multiple blocks.
* block name is optional when there's only one block.
## Options
The full list of options for `Liquid()` is listed as following:
* `root` is a directory or an array of directories to resolve layouts and includes, as well as the filename passed in when calling `.renderFile()`.
If an array, the files are looked up in the order they occur in the array.
Defaults to `["."]`
* `extname` is used to lookup the template file when filepath doesn't include an extension name. Eg: setting to `".html"` will allow including file by basename. Defaults to `""`.
* `cache` indicates whether or not to cache resolved templates. Defaults to `false`.
* `dynamicPartials`: if set, treat `<filepath>` parameter in `{%include filepath %}`, `{%layout filepath%}` as a variable, otherwise as a literal value. Defaults to `true`.
* `strict_filters` is used to enable strict filter existence. If set to `false`, undefined filters will be rendered as empty string. Otherwise, undefined filters will cause an exception. Defaults to `false`.
* `strict_variables` is used to enable strict variable derivation.
If set to `false`, undefined variables will be rendered as empty string.
Otherwise, undefined variables will cause an exception. Defaults to `false`.
* `trim_tag_right` is used to strip blank characters (including ` `, `\t`, and `\r`) from the right of tags (`{% %}`) until `\n` (inclusive). Defaults to `false`.
* `trim_tag_left` is similiar to `trim_tag_right`, whereas the `\n` is exclusive. Defaults to `false`. See [Whitespace Control][whitespace control] for details.
* `trim_value_right` is used to strip blank characters (including ` `, `\t`, and `\r`) from the right of values (`{{ }}`) until `\n` (inclusive). Defaults to `false`.
* `trim_value_left` is similiar to `trim_value_right`, whereas the `\n` is exclusive. Defaults to `false`. See [Whitespace Control][whitespace control] for details.
* `greedy` is used to specify whether `trim_left`/`trim_right` is greedy. When set to `true`, all consecutive blank characters including `\n` will be trimed regardless of line breaks. Defaults to `true`.
## Register Filters
```javascript
// Usage: {{ name | uppper }}
engine.registerFilter('upper', v => v.toUpperCase())
```
Filter arguments will be passed to the registered filter function, for example:
```javascript
// Usage: {{ 1 | add: 2, 3 }}
engine.registerFilter('add', (initial, arg1, arg2) => initial + arg1 + arg2)
```
See existing filter implementations here: <https://github.com/harttle/liquidjs/blob/master/filters.js>
## Register Tags
```javascript
// Usage: {% upper name%}
engine.registerTag('upper', {
parse: function(tagToken, remainTokens) {
this.str = tagToken.args; // name
},
render: function(scope, hash) {
var str = Liquid.evalValue(this.str, scope); // 'alice'
return Promise.resolve(str.toUpperCase()); // 'Alice'
}
});
```
* `parse`: Read tokens from `remainTokens` until your end token.
* `render`: Combine scope data with your parsed tokens into HTML string.
See existing tag implementations here: <https://github.com/harttle/liquidjs/blob/master/tags/>
## Plugin API
A pack of tags or filters can be encapsulated into a **plugin**, which will be typically installed via npm.
```javascript
engine.plugin(require('./some-plugin'));
// some-plugin.js
module.exports = function (Liquid) {
// here `this` refers to the engine instance
// `Liquid` provides facilities to implement tags and filters
this.registerFilter('foo', x => x);
}
```
Plugin List:
* To add your plugin, contact me or simply send a PR.
## Contribute Guidelines
This repo uses [eslint](https://eslint.org/) to check code style, [semantic-release](https://github.com/semantic-release/semantic-release) to generate changelog and publish to npm and Github Releases.
* Code Style: <https://github.com/standard/eslint-config-standard>, `npm run lint` to check locally.
* Commit Message: <https://github.com/angular/angular.js/blob/master/DEVELOPERS.md#commits>
[nunjucks]: http://mozilla.github.io/nunjucks/
[liquid-node]: https://github.com/sirlantis/liquid-node
[shopify/liquid]: https://shopify.github.io/liquid/
[jekyll]: http://jekyllrb.com/
[gh]: https://pages.github.com/
[releases]: https://github.com/harttle/liquidjs/releases
[any-promise]: https://github.com/kevinbeaty/any-promise
[test]: https://github.com/harttle/liquidjs/tree/master/test
[caniuse-promises]: http://caniuse.com/#feat=promises
[whitespace control]: https://github.com/harttle/liquidjs/wiki/Whitespace-Control
[tags]: https://github.com/harttle/liquidjs/wiki/Builtin-Tags
[filters]: https://github.com/harttle/liquidjs/wiki/Builtin-Filters
[express-views]: http://expressjs.com/en/guide/using-template-engines.html
[pp]: https://github.com/taylorhakes/promise-polyfill
[plugins]: https://liquidjs.com/tutorials/plugins.html#Plugin-List
[setup]: https://liquidjs.com/tutorials/setup.html
[doc]: https://liquidjs.com
[github]: https://github.com/harttle/liquidjs
[patreon]: https://www.patreon.com/harttle
[oc]: https://opencollective.com/liquidjs/
[contribution]: https://liquidjs.com/tutorials/contribution-guidelines.html
[financial-support]: https://liquidjs.com/tutorials/contribution-guidelines.html#Financial-Support
+13
View File
@@ -0,0 +1,13 @@
# Security Policy
## Supported Versions
Only the latest major version is supported with security updates. It can be changed if many people are relying on a specific version for some reason. If this is the case, welcome to file an issue.
## Reporting a Vulnerability
Please contact yangjvn@126.com to report a vulnerability.
- It will be fixed very soon (maybe within 1 week or couple of days) if that vulnerability obviously affects common use cases.
- Otherwise, it'll be scheduled with a priority just like requested features (which is lower than bugs).
- If it's declined, you'll receive an email (more oftenly there will be a discuss).
+7
View File
@@ -0,0 +1,7 @@
{
"extends": ["standard"],
"rules": {
"no-unused-expressions": "off",
"@typescript-eslint/no-var-requires": "off"
}
}
+49
View File
@@ -0,0 +1,49 @@
const Benchmark = require('benchmark')
const { Liquid } = require('..')
const engine = new Liquid({
root: __dirname,
extname: '.liquid'
})
engine.registerTag('header', {
parse: function (token) {
const [key, val] = token.args.split(':')
this[key] = val
},
render: function (ctx) {
const title = this.liquid.evalValue(this.content, ctx)
return `<h1>${title}</h1>`
}
})
const ctx = {
todos: ['fork and clone', 'make it better', 'make a pull request'],
title: 'Welcome to liquidjs!'
}
const template = `
{%header content: "welcome to liquid" | capitalize%}
<ul>
{% for todo in todos %}
<li>{{forloop.index}} - {{todo}}</li>
{% endfor %}
</ul>
`
function demo () {
console.log('--- demo ---')
return new Promise(resolve => {
new Benchmark.Suite('demo')
.add('demo', {
defer: true,
fn: d => engine.parseAndRender(template, ctx).then(x => d.resolve(x))
})
.on('cycle', event => console.log(String(event.target)))
.on('complete', resolve)
.run({ 'async': true })
})
}
module.exports = { demo }
+15
View File
@@ -0,0 +1,15 @@
const { output } = require('./output')
const { tag } = require('./tag')
const { demo } = require('./demo')
const { layout } = require('./layout')
const { memory } = require('./memory')
async function main () {
await output()
await tag()
await demo()
await layout()
await memory()
}
main()
+38
View File
@@ -0,0 +1,38 @@
const Benchmark = require('benchmark')
const { Liquid } = require('..')
const engineOptions = {
root: __dirname,
extname: '.liquid'
}
const engine = new Liquid(engineOptions)
const cachingEngine = new Liquid({
...engineOptions,
cache: true
})
const template = `
{% layout "./templates/layout.liquid" %}
{% block body %}a small body{% endblock %}
`
function layout () {
console.log('--- layout ---')
return new Promise(resolve => {
new Benchmark.Suite('layout')
.add('cache=false', {
defer: true,
fn: d => engine.parseAndRender(template, {}).then(x => d.resolve(x))
})
.add('cache=true', {
defer: true,
fn: d => cachingEngine.parseAndRender(template, {}).then(x => d.resolve(x))
})
.on('cycle', event => console.log(String(event.target)))
.on('complete', resolve)
.run({ 'async': true })
})
}
module.exports = { layout }
+61
View File
@@ -0,0 +1,61 @@
const { join } = require('path')
const { readFileSync } = require('fs')
const { getHeapStatistics } = require('v8')
const { Liquid } = require('..')
const engineOptions = {
root: __dirname,
extname: '.liquid'
}
const engine = new Liquid(engineOptions)
const SAMPLE_COUNT = 1024
function memory () {
console.log('--- memory ---')
html()
todolist()
}
function html () {
const str = readFileSync(join(__dirname, 'templates/lorem-html.liquid'), 'utf8')
global.gc()
const base = getHeapStatistics().used_heap_size
const templates = []
for (let i = 0; i < SAMPLE_COUNT; i++) {
templates.push(engine.parse(str))
}
const diff1 = (getHeapStatistics().used_heap_size - base) / SAMPLE_COUNT
console.log(`${h(str.length)} lorem-html before GC x ${h(diff1)}/tpl (${SAMPLE_COUNT} instances sampled)`)
global.gc()
const diff2 = (getHeapStatistics().used_heap_size - base) / SAMPLE_COUNT
console.log(`${h(str.length)} lorem-html after GC x ${h(diff2)}/tpl (${SAMPLE_COUNT} instances sampled)`)
}
function todolist () {
const str = readFileSync(join(__dirname, 'templates/todolist.liquid'), 'utf8')
global.gc()
const base = getHeapStatistics().used_heap_size
const templates = []
for (let i = 0; i < SAMPLE_COUNT; i++) {
templates.push(engine.parse(str))
}
const diff1 = (getHeapStatistics().used_heap_size - base) / SAMPLE_COUNT
console.log(`${h(str.length)} todolist before GC x ${h(diff1)}/tpl (${SAMPLE_COUNT} instances sampled)`)
global.gc()
const diff2 = (getHeapStatistics().used_heap_size - base) / SAMPLE_COUNT
console.log(`${h(str.length)} todolist after GC x ${h(diff2)}/tpl (${SAMPLE_COUNT} instances sampled)`)
}
function h (size) {
return (size / 1024).toFixed(3) + ' kB'
}
module.exports = { memory }
+28
View File
@@ -0,0 +1,28 @@
const Benchmark = require('benchmark')
const { Liquid } = require('..')
const liquid = new Liquid()
function output () {
console.log('--- output ---')
return new Promise(resolve => {
new Benchmark.Suite('output')
.add('literal', test('{{false}}{{"foo"}}{{32.322}}'))
.add('truncate', test('{{"foobar" | truncate: 3}}'))
.add('date', test('{{"now" | date: "%d%Y%m"}}'))
.add('escape', test('{{"1<2" | escape}}'))
.add('default', test('{{"" | default: 3}}'))
.on('cycle', (event) => console.log(String(event.target)))
.on('complete', resolve)
.run({ 'async': true })
})
}
function test (str) {
return {
defer: true,
fn: d => liquid.parseAndRender(str).then(x => d.resolve(x))
}
}
module.exports = { output }
+32
View File
@@ -0,0 +1,32 @@
const Benchmark = require('benchmark')
const { Liquid } = require('..')
const liquid = new Liquid()
function tag () {
console.log('--- tag ---')
return new Promise(resolve => {
new Benchmark.Suite('tag')
.add('if', test('{% if "foobar" %}foo{% endif %}'))
.add('unless', test('{%unless "foo"%}true{%else%}false{%endunless%}'))
.add('for', test('{% for i in (1..3) %}{{fooloop.index}}{% endfor %}'))
.add('switch', test('{%case 3%}{% when 1 %}1{% when 2 %}2{% when 3 %}3{%endcase%}'))
.add('assign', test('{%assign a="foo bar"%}'))
.add('capture', test('{%capture foo%}what is this{%endcapture%}'))
.add('increment', test('{%increment a%}'))
.add('decrement', test('{%decrement a%}'))
.add('tablerow', test('{%tablerow i in (1..10) cols:3%}{%endtablerow%}'))
.on('cycle', (event) => console.log(String(event.target)))
.on('complete', resolve)
.run({ 'async': true })
})
}
function test (str) {
return {
defer: true,
fn: d => liquid.parseAndRender(str).then(x => d.resolve(x))
}
}
module.exports = { tag }
+2
View File
@@ -0,0 +1,2 @@
This is a barely empty layout with a body:
{% block body %}{% endblock %}
+38
View File
@@ -0,0 +1,38 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"><head>
<meta http-equiv="content-type" content="text/html; charset=utf-8">
<!-- You may use a different charset if needed -->
<title>Latin Lipsum - Courtesy generator.lorem-ipsum.info</title>
</head>
<body>
<p>Lorem ipsum dolor sit amet, falli detraxit facilisis sit ex. Nec vidit nihil ut, vis utamur definitionem in. Ancillae phaedrum ut eos. Ne eam errem cotidieque.
</p>
<p>
Sit amet vitae referrentur ad, oportere necessitatibus vituperatoribus vim ne. Audiam quaeque nusquam ei eos, mel ex adhuc prompta complectitur. Decore voluptua cotidieque vel ei, veri novum persecuti te sea. Nisl novum sea cu. Dicta delicatissimi ut est. Et has eripuit impedit mediocrem.
</p>
<p>
Eu vim evertitur argumentum, pro legendos iudicabit voluptatibus ne. Ne alii nullam deserunt duo, vis no animal verterem. Ne quo veniam euripidis. Pri discere mentitum vituperatoribus ne. Meliore corrumpit vim at, has ea admodum convenire.
</p>
<p>
Ne mea alii detraxit electram, his ne epicurei gloriatur consetetur. Ex pro aeque omnes appareat, possit integre accommodare eu quo. Qui in porro molestiae, no sit equidem petentium patrioque, omnes voluptaria vim te. Odio quot rebum ad sed, ei sale reque inani sea.
</p>
<p>
At mea vidit petentium, mei lorem pertinacia signiferumque ne. Per eu dicam postea probatus, sea pericula accusamus omittantur ad. Id mei munere ullamcorper. Oportere ocurreret cu vel. Pri ne dicant soluta graecis, duis ponderum corrumpit sed eu, pro ei rebum vivendum.
</p>
<p>
Eum ea exerci sententiae constituam, ut lorem putant volutpat pro. Vix ex iudicabit salutatus principes, pri nisl erat ut, ne cum persius verterem phaedrum. Vix mundi vitae eu. Vel summo vocent albucius in. Qui omnis partem possim ex, wisi doctus efficiantur cu has. Aperiri denique ea pri, cum dissentias signiferumque eu. Per posse dissentiet necessitatibus id, omnis eleifend te mel.
</p>
<p>
Phaedrum erroribus adolescens ut nec, duo mutat viris id. In tale purto dolores sit, ei consul inermis est, his ea movet expetenda. Cibo scribentur id eam, per an quem iracundia, has erat zril solet eu. Falli fierent ne cum, eam placerat facilisis suscipiantur te. Id quo dicat tractatos definiebas, est copiosae splendide id.
</p>
<p>
Constituto neglegentur qui ne, eum ne putent phaedrum, no quod nominati consulatu per. Mei cu accusam principes interesset, vim fugit abhorreant eu, ludus feugait an sed. Clita expetendis definitionem has in, meis pericula no mea, soluta nemore cotidieque eos cu. Summo populo signiferumque pri eu, eum no labores democritum posidonium, pro ignota adipisci in. Tollit molestie id mei.
</p>
<p>
Ipsum impetus et eam, ei his epicuri instructior. Impedit ullamcorper vim an. Impedit ullamcorper vim an. Et eum senserit sententiae reprimique, quem detracto sententiae at sed, no inermis ocurreret rationibus sea pericula no.
</body></html>
+49
View File
@@ -0,0 +1,49 @@
<section class="todo-list">
<h1>
posuere cubilia Curae; Vestibulum hendrerit malesuada odio. Fusce ut elit
ut augue sollicitudin blandit. Phasellus volutpat lorem. Duis non pede et
neque luctus tincidunt. Duis interdum tempus elit.
<small>Aenean metus. Vestibulum ac lacus. Vivamus porttitor, massa ut.</small>
</h1>
<a href={{"/add" | url}} class="todo-add"><i class="fa fa-plus-square"></i>Add Todo</a>
<ul class="filter-category">
{% for i in (0..categories.length) %}
{% assign item=categories[i] %}
<li style="background: {{ item.color }}">
<a href="/todos/category/{{ item.id }}">{{ item.title }}</a>
</li>
{% endfor %}
</ul>
{% for todo in todos %}
<div>
<h2>
Todo {{ forloop.index }}:
<span class="todo-item content" data-todo-index="{{ forloop.index0 }}">
{{ todo.title | prepend: 'TODO: ' | upcase }}
</span>
</h2>
<img
title="risus. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices"
src="{% include "todo-icon", id=todo.id }} %}"
>
<p class="description">
Purus eu mi. Proin commodo, massa commodo dapibus elementum,
libero lacus pulvinar eros, ut tincidunt nisl elit ut velit. Cras rutrum
porta purus. Vivamus lorem. Sed turpis enim, faucibus quis, pharetra in,
sagittis sed, magna. Curabitur ultricies felis ut libero. Nullam tincidunt
enim eu nibh. Nunc eget ipsum in sem facilisis convallis. Proin fermentum
</p>
<div class="todo-meta">
{% if todo.category %}
<span>{{ todo.category.title | capitalize }}</span>
{% endif %}
</div>
<a class="btn btn-primary" href={{"/edit/" | append todo.id | url }}><i class="fa fa-pencil"></i> Edit</a>
<a class="btn btn-default"><i class="fa fa-check"></i> Check</a>
<a class="btn ben-danger" href={{"/delete/" | append todo.id | url }}><i class="fa fa-trash-o"</i> Trash</a>
</div>
{% endfor %}
</section>
+21
View File
@@ -0,0 +1,21 @@
{
"extends": ["standard"],
"env": {
"mocha": true,
"es6": true,
"browser": true,
"node": true
},
"plugins": [
"mocha",
"standard",
"promise"
],
"rules": {
"no-var": 2,
"prefer-const": 2,
"@typescript-eslint/no-var-requires": "off",
"no-unused-vars": "off",
"indent": "off"
}
}
+26
View File
@@ -0,0 +1,26 @@
#!/usr/bin/env bash
rm -rf docs/source/api docs/source/zh-cn/api
typedoc ./src --gitRevision master --out docs/source/api --plugin typedoc-plugin-markdown --theme vuepress
rm docs/source/api/README.md
for file in $(find docs/source/api -name "*.md"); do
sed -i \
-e 's/\(\]([^_)]*\)\/_/\1\//g' \
-e 's/\(\]([^)]*\.\)md/\1html/g' \
-e 's/\](_/\](/g' \
-e 's/{%/{% raw %}{%{% endraw %}/g' \
-e 's/{{/{% raw %}{{{% endraw %}/g' \
-e '1 s/"/\&quot;/g' \
-e '1 s/</\&lt;/g' \
-e '1 s/>/\&gt;/g' \
-e '1 s/\*//g' \
-e '1 s/^# \(.*\)/---\ntitle: "\1"\nauto: true\n---/' \
$file
target=${file/\/_/\/}
if [ "$file" != "$target" ]; then
mv $file $target
fi
done
cp -r docs/source/api docs/source/zh-cn/api
+10
View File
@@ -0,0 +1,10 @@
#!/usr/bin/env bash
cp .all-contributorsrc docs/.all-contributorsrc
sed -i \
-e 's/README.md/docs\/themes\/navy\/layout\/partial\/all-contributors.swig/g' \
-e 's/"contributorsPerLine": 7/"contributorsPerLine": 65535/g' \
docs/.all-contributorsrc
all-contributors --config docs/.all-contributorsrc generate
sed -i 's/<br \/>.*<\/td>/<\/a><\/td>/g' docs/themes/navy/layout/partial/all-contributors.swig
+26
View File
@@ -0,0 +1,26 @@
#!/usr/bin/env bash
./bin/build-contributors.sh
./bin/build-apidoc.sh
cd docs
npm ci
npm run build
cp CNAME public/
cp ../CHANGELOG.md source/tutorials/changelog.md
sed -i \
-e 's/{%/{% raw %}{%{% endraw %}/g' \
-e 's/{{/{% raw %}{{{% endraw %}/g' \
-e '1 s/"/\&quot;/g' \
-e '1 s/</\&lt;/g' \
-e '1 s/>/\&gt;/g' \
source/tutorials/changelog.md
cp source/tutorials/changelog.md source/zh-cn/tutorials/changelog.md
sed -i '1i ---\ntitle: Changelog\nauto: true\n---\n' source/tutorials/changelog.md
sed -i '1i ---\ntitle: 更新日志\nauto: true\n---\n' source/zh-cn/tutorials/changelog.md
if [ "$HEXO_ALGOLIA_INDEXING_KEY" != "" ]; then
npm run index
fi
+36
View File
@@ -0,0 +1,36 @@
#!/usr/bin/env bash
# Prerequisites:
# 1.imagemagick. try brew install imagemagick
# 2. logo.png in size 512x512
# 3. this script should be run with cwd docs/source/icon/
echo creating apple touch icons...
apple=(57x57 60x60 72x72 76x76 114x114 120x120 144x144 152x152)
for size in "${apple[@]}"; do
echo $size
convert logo.png -resize $size apple-touch-icon-$size.png
done
cp logo.png apple-touch-icon.png
convert logo.png \
\( +clone -alpha extract \
-draw 'fill black polygon 0,0 0,80 80,0 fill white circle 80,80 80,0' \
\( +clone -flip \) -compose Multiply -composite \
\( +clone -flop \) -compose Multiply -composite \
\) -alpha off -compose CopyOpacity -composite apple-touch-icon-precomposed.png
echo creating favicon...
convert logo.png -resize 48x48 ../favicon.ico
favicon=(16x16 32x32 96x96 160x160 196x196)
for size in "${favicon[@]}"; do
echo $size
convert logo.png -resize $size favicon-$size.png
done
echo creating mstile icons...
mstile=(70x70 144x144 150x150 310x310)
for size in "${mstile[@]}"; do
echo $size
convert logo.png -resize $size mstile-$size.png
done
convert mstile-150x150.png -gravity center -background white -extent 310x150 mstile-310x150.png
+43
View File
@@ -0,0 +1,43 @@
#!/usr/bin/env node
const isQuote = c => c === '"' || c === "'"
const isOperator = c => '!=<>'.includes(c)
const isNumber = c => c >= '0' && c <= '9'
const isCharacter = c => (c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z')
const isIdentifier = c => '_-?'.includes(c) || isCharacter(c) || isNumber(c)
const isBlank = c => c === '\n' || c === '\t' || c === ' ' || c === '\r' || c === '\v' || c === '\f'
const isInlineBlank = c => c === '\t' || c === ' ' || c === '\r'
const isSign = c => c === '-' || c === '+'
// See https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/RegExp
const unicodeBlanks = '\u00a0\u1680\u180e\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u2028\u2029\u202f\u205f\u3000'
const types = []
for (let i = 0; i < 128; i++) {
const c = String.fromCharCode(i)
let n = 0
if (isIdentifier(c)) n |= 1
if (isOperator(c)) n |= 2
if (isBlank(c)) n |= 4
if (isQuote(c)) n |= 8
if (isInlineBlank(c)) n |= 16
if (isNumber(c)) n |= 32
if (isSign(c)) n |= 64
types.push(n)
}
console.log(`
// **DO NOT CHANGE THIS FILE**
//
// This file is generated by bin/character-gen.js
// bitmask character types to boost performance
export const TYPES = [${types.join(', ')}]
export const IDENTIFIER = 1
export const OPERATOR = 2
export const BLANK = 4
export const QUOTE = 8
export const INLINE_BLANK = 16
export const NUMBER = 32
export const SIGN = 64
`.trim())
console.log([...unicodeBlanks].map(char => `TYPES[${char.charCodeAt(0)}]`).join(' = ') + ' = BLANK')
Executable
+24
View File
@@ -0,0 +1,24 @@
#!/usr/bin/env node
const Liquid = require('..').Liquid
const contextArg = process.argv.slice(2)[0]
let context = {}
if (contextArg) {
if (contextArg.endsWith('.json')) {
const fs = require('fs')
context = JSON.parse(fs.readFileSync(contextArg, 'utf8'))
} else {
context = JSON.parse(contextArg)
}
}
let tpl = ''
process.stdin.on('data', chunk => (tpl += chunk))
process.stdin.on('end', () => render(tpl))
async function render (tpl) {
const liquid = new Liquid()
const html = await liquid.parseAndRender(tpl, context)
process.stdout.write(html)
}
+1
View File
@@ -0,0 +1 @@
module.exports = { extends: ['@commitlint/config-conventional'] }
+9
View File
@@ -0,0 +1,9 @@
# LiquidJS for Browsers
## Get Started
```bash
cd demo/browser
npm install
npm start
```
-1
View File
@@ -1 +0,0 @@
<h2>Welcome to {{ name | capitalize}}, {% include 'date.html' %}</h2>
+5 -8
View File
@@ -3,27 +3,24 @@
<head>
<title>liquidjs for the browser</title>
<script src="../../dist/liquid.js"></script>
<script src="node_modules/liquidjs/dist/liquid.min.js"></script>
</head>
<body>
<script>
var engine = window.Liquid({
var Liquid = window.liquidjs.Liquid
var engine = new Liquid({
extname: '.html',
cache: true
});
var src = '<h2>Welcome to {{ name | capitalize}}, ' +
'access time: {{date|date: "%Y-%m-%d %H:%M:%S"}}&lt;/h2>';
var src = "<h2>Welcome to {{ name | capitalize}}, {% include 'date.html' %}</h2>";
var ctx = {
name: 'Liquid',
date: new Date()
};
engine.parseAndRender(src, ctx)
.then(function(html) {
return engine.renderFile('hello', ctx);
})
.then(function(html) {
document.body.innerHTML += html
document.body.innerHTML = html
});
</script>
</body>
+16
View File
@@ -0,0 +1,16 @@
{
"name": "liquidjs-demo-browser",
"version": "1.0.0",
"private": true,
"description": "Liquidjs Demo for Browser Usage",
"main": "index.html",
"scripts": {
"start": "http-server -c-1 "
},
"author": "harttle <[email protected]>",
"license": "ISC",
"dependencies": {
"http-server": "^0.11.1",
"liquidjs": "*"
}
}
+9
View File
@@ -0,0 +1,9 @@
# LiquidJS for Express.js
## Get Started
```bash
cd demo/express
npm install
npm start
```
+4 -4
View File
@@ -1,8 +1,8 @@
const express = require('express')
const Liquid = require('../..')
const { Liquid } = require('liquidjs')
let app = express()
let engine = Liquid({
const app = express()
const engine = new Liquid({
root: __dirname, // for layouts and partials
extname: '.liquid'
})
@@ -12,7 +12,7 @@ app.set('views', ['./partials', './views']) // specify the views directory
app.set('view engine', 'liquid') // set to default
app.get('/', function (req, res) {
let todos = ['fork and clone', 'make it better', 'make a pull request']
const todos = ['fork and clone', 'make it better', 'make a pull request']
res.render('todolist', {
todos: todos,
title: 'Welcome to liquidjs!'
+3 -1
View File
@@ -1,6 +1,7 @@
{
"name": "express-demo",
"version": "1.0.0",
"private": true,
"description": "Express Demo Using liquidjs",
"main": "index.js",
"scripts": {
@@ -10,6 +11,7 @@
"author": "harttle",
"license": "MIT",
"dependencies": {
"express": "^4.14.0"
"express": "^4.14.0",
"liquidjs": "*"
}
}
+9
View File
@@ -0,0 +1,9 @@
# LiquidJS for Node.js
## Get Started
```bash
cd demo/nodejs
npm install
npm start
```
+16 -2
View File
@@ -1,12 +1,26 @@
const Liquid = require('../..')
const { Liquid } = require('liquidjs')
const engine = new Liquid({
root: __dirname,
extname: '.liquid'
})
engine.registerTag('header', {
parse: function (token) {
const [key, val] = token.args.split(':')
this[key] = val
},
render: async function (scope, emitter) {
const title = await this.liquid.evalValue(this.content, scope)
emitter.write(`<h1>${title}</h1>`)
}
})
const ctx = {
todos: ['fork and clone', 'make it better', 'make a pull request'],
title: 'Welcome to liquidjs!'
}
engine.renderFile('todolist', ctx).then(console.log)
engine.renderFile('todolist', ctx)
.then(console.log)
.catch(err => console.error(err.stack))
+12
View File
@@ -0,0 +1,12 @@
{
"name": "liquidjs-demo-nodejs",
"description": "Node.js demo for liquidjs",
"private": true,
"main": "index.js",
"scripts": {
"start": "node index.js"
},
"dependencies": {
"liquidjs": "*"
}
}
+2
View File
@@ -1,3 +1,5 @@
{%header content: "welcome to liquid" | capitalize%}
<ul>
{% for todo in todos %}
<li>{{forloop.index}} - {{todo}}</li>
+1
View File
@@ -0,0 +1 @@
SKIP_PREFLIGHT_CHECK=true
+3
View File
@@ -0,0 +1,3 @@
{
"extends": ["react-app"]
}
-16737
View File
File diff suppressed because it is too large Load Diff
+5 -7
View File
@@ -3,10 +3,8 @@
"version": "0.1.0",
"private": true,
"dependencies": {
"dns": "^0.2.2",
"html-react-parser": "^0.4.7",
"liquidjs": "^6.0.1",
"path": "^0.12.7",
"liquidjs": "^9.1.0",
"react": "^16.5.2",
"react-dom": "^16.5.2",
"react-promise": "^2.0.3",
@@ -18,13 +16,13 @@
"test": "react-scripts test",
"eject": "react-scripts eject"
},
"eslintConfig": {
"extends": "react-app"
},
"browserslist": [
">0.2%",
"not dead",
"not ie <= 11",
"not op_mini all"
]
],
"devDependencies": {
"@babel/core": "^7.8.7"
}
}
+9 -32
View File
@@ -1,38 +1,17 @@
import React, { Component } from 'react';
import logo from './logo.svg';
import './App.css';
import tpl from './views/demo.liquid';
import Parser from 'html-react-parser';
import { engine } from './engine';
let path = require('path')
let Liquid = require('liquidjs');
export class App extends Component {
async componentDidMount() {
const html = await engine.renderFile(tpl.toString(), {name: 'alice', logo: logo })
this.setState({ html }) // outputs "Alice"
}
let config = require('./views/demo.liquid');
let pageConfig = config.toString()
let Parser = require('html-react-parser');
class App extends Component {
componentDidMount() {
let engine = Liquid({
root: path.resolve(__dirname, 'views/'), // dirs to lookup layouts/includes
extname: '.liquid' // the extname used for layouts/includes, defaults
});
engine.registerFilter('image', d => {
let img = `<img src="${d}" class="App-logo" alt="logo"></img>`;
return img
})
engine.renderFile(pageConfig, {name: 'alice', logo: logo })
.then((htmlTemp) => {
this.setState({ html: htmlTemp })
}) // outputs "Alice"
}
state = {
html: []
}
state = { html: '' }
render() {
return (
@@ -42,5 +21,3 @@ state = {
);
}
}
export default App;
+41
View File
@@ -0,0 +1,41 @@
/*
* function Component with Hooks: Modify ./index.js to apply this file
*/
import React, { useState, useLayoutEffect } from 'react';
import './App.css';
import logo from './logo.svg';
import tplsrc from './views/showing-click-times.liquid';
import Parser from 'html-react-parser';
import { engine } from './engine';
import { Context } from './Context';
import { ClickButton } from './ClickButton';
const fetchTpl = engine.getTemplate(tplsrc.toString())
export function App() {
const [state, setState] = useState({
logo: logo,
name: 'alice',
clickCount: 0,
html: ''
});
useLayoutEffect(() => {
fetchTpl
.then(tpl => engine.render(tpl, state))
.then(html => setState({...state, html}))
}, [state.clickCount])
return (
<div className="App">
{Parser(`${state.html}`)}
<Context.Provider
value={{
count: () => setState({...state, clickCount: state.clickCount + 1})
}}
>
<ClickButton/>
</Context.Provider>
</div>
);
}
+5
View File
@@ -0,0 +1,5 @@
button {
position: fixed;
right: 20px;
bottom: 20px;
}
+15
View File
@@ -0,0 +1,15 @@
import './ClickButton.css';
import React from 'react';
import { Context } from './Context';
export function ClickButton() {
return (
<Context.Consumer>
{context => (
<button onClick={context.count}>
Click Here!
</button>
)}
</Context.Consumer>
);
};
+3
View File
@@ -0,0 +1,3 @@
import React from "react";
export const Context = React.createContext()
+12
View File
@@ -0,0 +1,12 @@
import path from 'path';
import { Liquid } from 'liquidjs';
export const engine = new Liquid({
root: path.resolve(__dirname, 'views/'), // dirs to lookup layouts/includes
extname: '.liquid' // the extname used for layouts/includes, defaults
});
engine.registerFilter('image', d => {
let img = `<img src="${d}" class="App-logo" alt="logo"></img>`;
return img
})
+2 -1
View File
@@ -1,8 +1,9 @@
import React from 'react';
import ReactDOM from 'react-dom';
import './index.css';
import App from './App';
import * as serviceWorker from './serviceWorker';
import { App } from './App';
// import { App } from './AppWithHooks';
ReactDOM.render(<App />, document.getElementById('root'));
@@ -0,0 +1,14 @@
<header className="App-header">
{{ logo | image }}
<h2>Welcome {{name | capitalize}}</h2>
<p>Edit <code>src/App.js</code> and save to reload.</p>
<p>You have clicked {{clickCount}} times.</p>
<a
className="App-link"
href="https://reactjs.org"
target="_blank"
rel="noopener noreferrer"
>
Learn React
</a>
</header>
File diff suppressed because it is too large Load Diff
+11
View File
@@ -0,0 +1,11 @@
# LiquidJS for TypeScript
LiquidJS is written in TypeScript and type definitions are available in `liquidjs` package.
## Get Started
```bash
cd demo/typescript
npm install
npm start
```
+25
View File
@@ -0,0 +1,25 @@
import { Liquid, TagToken, Context, Emitter } from 'liquidjs'
const engine = new Liquid({
root: __dirname,
extname: '.liquid'
})
engine.registerTag('header', {
parse: function (token: TagToken) {
const [key, val] = token.args.split(':')
this[key] = val
},
render: async function (context: Context, emitter: Emitter) {
const title = await this.liquid.evalValue(this['content'], context)
emitter.write(`<h1>${title}</h1>`)
}
})
const ctx = {
todos: ['fork and clone', 'make it better', 'make a pull request'],
title: 'Welcome to liquidjs!'
}
// console.log('isTruthy:', isTruthy('a string here'));
engine.renderFile('todolist', ctx).then(console.log)
+13
View File
@@ -0,0 +1,13 @@
{
"name": "liquidjs-demo-typescript",
"private": true,
"description": "TypeScript demo for liquidjs",
"main": "index.ts",
"scripts": {
"start": "ts-node index.ts"
},
"dependencies": {
"ts-node": "^8.0.2",
"liquidjs": "*"
}
}
+7
View File
@@ -0,0 +1,7 @@
{%header content: "welcome to liquid" | capitalize%}
<ul>
{% for todo in todos %}
<li>{{forloop.index}} - {{todo}}</li>
{% endfor %}
</ul>
-3633
View File
File diff suppressed because it is too large Load Diff
-1
View File
File diff suppressed because one or more lines are too long
-3581
View File
File diff suppressed because it is too large Load Diff
-1
View File
File diff suppressed because one or more lines are too long
-2
View File
File diff suppressed because one or more lines are too long
-1
View File
File diff suppressed because one or more lines are too long
+7
View File
@@ -0,0 +1,7 @@
.all-contributorsrc
source/api/
source/zh-cn/api/
.vuepress
db.json
public
changelog.md
View File
+1
View File
@@ -0,0 +1 @@
liquidjs.com
+32
View File
@@ -0,0 +1,32 @@
title: LiquidJS
subtitle: "A simple, expressive and safe template engine."
description: "LiquidJS is a simple, expressive and safe template engine."
author: Harttle
language: en
timezone: UTC
url: https://liquidjs.com
root: /
permalink: news/:year/:month/:day/:title/
relative_link: true
new_post_name: :year-:month-:day-:title.md # File name of new posts
post_asset_folder: true
per_page: 0
pretty_urls:
trailing_index: false
trailing_html: false
theme: navy
highlight:
enable: true
line_number: false
algolia:
applicationID: 0X19J927JZ
apiKey: 533161d821384919672e4ce8a39451b3
indexName: liquidjs
twitter: harttleharttle
github: harttle/liquidjs
patreon: harttle
oc: liquidjs
+4148
View File
File diff suppressed because it is too large Load Diff
+37
View File
@@ -0,0 +1,37 @@
{
"name": "liquidjs-website",
"version": "0.0.0",
"private": true,
"hexo": {
"version": "4.2.0"
},
"scripts": {
"build": "hexo generate",
"start": "hexo serve",
"lint": "eslint .",
"index": "hexo algolia"
},
"dependencies": {
"cheerio": "^0.22.0",
"hexo": "^4.2.0",
"hexo-algolia": "^1.3.1",
"hexo-clean-css": "^1.0.0",
"hexo-filter-nofollow": "^2.0.2",
"hexo-generator-archive": "^1.0.0",
"hexo-generator-feed": "^2.0.0",
"hexo-generator-sitemap": "^2.0.0",
"hexo-renderer-marked": "^2.0.0",
"hexo-renderer-pug": "^1.0.0",
"hexo-renderer-stylus": "^1.0.0",
"hexo-server": "^1.0.0",
"hexo-uglify": "^1.0.0"
},
"devDependencies": {
"eslint": "^6.0.1",
"eslint-config-hexo": "^4.0.0",
"all-contributors-cli": "^6.8.1"
},
"engines": {
"node": ">=8.10.0"
}
}
+143
View File
@@ -0,0 +1,143 @@
/* global hexo */
'use strict'
const { resolve, basename } = require('path')
const { readFileSync } = require('fs')
const cheerio = require('cheerio')
const fullUrlFor = hexo.extend.helper.get('full_url_for').bind(hexo)
const localizedPath = ['tutorials', 'filters', 'tags', 'playground', 'api']
hexo.extend.helper.register('page_nav', function () {
const type = this.page.canonical_path.split('/')[0]
const sidebar = this.site.data.sidebar[type]
const path = basename(this.path)
const list = {}
const prefix = 'sidebar.' + type + '.'
for (const i in sidebar) {
if (typeof sidebar[i] === 'string') list[sidebar[i]] = i
else for (const j in sidebar[i]) list[sidebar[i][j]] = j
}
const keys = Object.keys(list)
const index = keys.indexOf(path)
let result = ''
if (index > 0) {
result += `<a href="${keys[index - 1]}" class="article-footer-prev" title="${this.__(prefix + list[keys[index - 1]])}"><i class="icon-chevron-left"></i><span>${this.__('page.prev')}</span></a>`
}
if (index < keys.length - 1) {
result += `<a href="${keys[index + 1]}" class="article-footer-next" title="${this.__(prefix + list[keys[index + 1]])}"><span>${this.__('page.next')}</span><i class="icon-chevron-right"></i></a>`
}
return result
})
hexo.extend.helper.register('raw', function (filepath) {
const content = readFileSync(resolve(this.view_dir, filepath))
return content
})
hexo.extend.helper.register('doc_sidebar', function (className) {
const type = this.page.canonical_path.split('/')[0]
const sidebar = this.site.data.sidebar[type]
const path = basename(this.path)
let result = ''
const { __ } = this
const prefix = 'sidebar.' + type + '.'
if (typeof sidebar === 'undefined') {
return ''
}
for (const [title, menu] of Object.entries(sidebar)) {
if (typeof menu === 'string') renderLink(title, menu)
else renderSection(title, menu)
}
return result
function renderLink (text, link) {
let itemClass = className + '-link'
if (link === path) itemClass += ' current'
const localized = __(prefix + text) === prefix + text ? text : __(prefix + text)
result += '<a href="' + link + '" class="' + itemClass + '">' + localized + '</a>'
}
function renderSection (title, menu) {
result += '<strong class="' + className + '-title">' + __(prefix + title) + '</strong>'
for (const [text, link] of Object.entries(menu)) renderLink(text, link)
}
})
hexo.extend.helper.register('header_menu', function (className) {
const menu = this.site.data.menu
let result = ''
const lang = this.page.lang
const isEnglish = lang === 'en'
for (const [title, path] of Object.entries(menu)) {
let langPath = path
if (!isEnglish && ~localizedPath.indexOf(title)) langPath = lang + path
const url = this.url_for(langPath)
const active = ('/' + this.page.canonical_path).slice(0, path.length) === path ? ' active' : ''
result += `<a href="${url}" class="${className}-link${active}">${this.__('menu.' + title)}</a>`
}
return result
})
hexo.extend.helper.register('canonical_url', function (lang) {
let path = this.page.path
if (lang && lang !== 'en') path = lang + '/' + path
return fullUrlFor(path)
})
hexo.extend.helper.register('url_for_lang', function (path) {
const lang = this.page.lang
let url = this.url_for(path)
if (lang !== 'en' && path[0] === '/') url = '/' + lang + path
return url
})
hexo.extend.helper.register('raw_link', path => `https://github.com/harttle/liquidjs/edit/master/docs/source/${path}`)
hexo.extend.helper.register('page_anchor', str => {
const $ = cheerio.load(str, { decodeEntities: false })
const headings = $('h1, h2, h3, h4, h5, h6')
if (!headings.length) return str
headings.each(function () {
const id = $(this).attr('id')
$(this)
.addClass('article-heading')
.append(`<a class="article-anchor" href="#${id}" aria-hidden="true"></a>`)
})
return $.html()
})
// Will be replace with fullUrlFor after hexo v4 release
hexo.extend.helper.register('canonical_path_for_nav', function () {
const path = this.page.canonical_path
for (const slug of localizedPath) if (path.startsWith(slug)) return path
return ''
})
hexo.extend.helper.register('lang_name', function (lang) {
const data = this.site.data.languages[lang]
return data.name || data
})
hexo.extend.helper.register('hexo_version', function () {
return this.env.version
})
+19
View File
@@ -0,0 +1,19 @@
/* global hexo */
'use strict'
hexo.extend.tag.register('note', (args, content) => {
const className = args.shift()
let header = ''
let result = ''
if (args.length) {
header += `<strong class="note-title">${args.join(' ')}</strong>`
}
result += `<blockquote class="note ${className}">${header}`
result += hexo.render.renderSync({ text: content, engine: 'markdown' })
result += '</blockquote>'
return result
}, true)
+3
View File
@@ -0,0 +1,3 @@
en: English
zh-cn:
name: 简体中文
+5
View File
@@ -0,0 +1,5 @@
tutorials: /tutorials/setup.html
tags: /tags/overview.html
filters: /filters/overview.html
playground: /playground.html
api: /api/classes/liquid_.liquid.html
+24
View File
@@ -0,0 +1,24 @@
-
url: https://github.com/harttle/liquidjs/pull/5
date: '2016-09-12'
title:
zh-cn: '异步化:重写了解析器和渲染器,使 LiquidJS 可以提供 Promise API 并支持异步的自定义 Tag 实现。'
en: 'Async spike: rewrite the parser and render to support Promise, which enables async tags.'
-
url: https://opencollective.com/liquidjs/#section-contribute
date: '2020-02-26'
title:
zh-cn: '赞助人:第一个 backer 通过 Open Collective 贡献于 LiquidJS。'
en: 'Backers: the first backer contributed to LiquidJS via Open Collective.'
-
url: https://github.com/harttle/liquidjs/pull/202
date: '2020-03-11'
title:
zh-cn: '内存优化:用更精细的手法重写了解析器,来避免临时字符串的生成,内存占用降低 57.7% 以上。'
en: 'Memory Optimization: a more elaborate parser reducing the memory footprint by 57.7%.'
-
url: https://github.com/harttle/liquidjs/pull/205
date: '2020-03-15'
title:
zh-cn: '性能提升:引入 AST 并重新设计 Token 类型系统,使渲染性能平均提升 100.3%。'
en: 'Performance Boost: a simple AST to improve render performance by 100.3%.'
+138
View File
@@ -0,0 +1,138 @@
tutorials:
getting_started:
intro: intro-to-liquid.html
setup: setup.html
options: options.html
render_file: render-file.html
partials: partials-and-layouts.html
express: use-in-expressjs.html
advanced:
caching: caching.html
registeration: register-filters-tags.html
whitespace: whitespace-control.html
plugins: plugins.html
operators: operators.html
truth: truthy-and-falsy.html
miscellaneous:
migration9: migrate-to-9.html
changelog: changelog.html
differences: differences.html
contribution_guidelines: contribution-guidelines.html
filters:
overview: overview.html
abs: abs.html
append: append.html
at_least: at_least.html
at_most: at_most.html
capitalize: capitalize.html
ceil: ceil.html
date: date.html
default: default.html
divided_by: divided_by.html
downcase: downcase.html
escape: escape.html
escape_once: escape_once.html
first: first.html
floor: floor.html
join: join.html
json: json.html
last: last.html
lstrip: lstrip.html
map: map.html
minus: minus.html
modulo: modulo.html
newline_to_br: newline_to_br.html
plus: plus.html
prepend: prepend.html
remove: remove.html
remove_first: remove_first.html
replace: replace.html
replace_first: replace_first.html
reverse: reverse.html
round: round.html
rstrip: rstrip.html
size: size.html
slice: slice.html
sort: sort.html
sort_natural: sort_natural.html
split: split.html
strip: strip.html
strip_html: strip_html.html
strip_newlines: strip_newlines.html
times: times.html
truncate: truncate.html
truncatewords: truncatewords.html
uniq: uniq.html
upcase: upcase.html
url_decode: url_decode.html
url_encode: url_encode.html
where: where.html
tags:
overview: overview.html
assign: assign.html
capture: capture.html
case: case.html
comment: comment.html
cycle: cycle.html
decrement: decrement.html
for: for.html
if: if.html
include: include.html
increment: increment.html
layout: layout.html
raw: raw.html
render: render.html
tablerow: tablerow.html
unless: unless.html
api:
quick_entry:
Liquid: "../classes/liquid_.liquid.html"
LiquidOptions: "../interfaces/liquid_options_.liquidoptions.html"
FS: "../interfaces/fs_fs_.fs.html"
Cache: "../interfaces/cache_cache_.cache.html"
classes:
BlankDrop: "../classes/drop_blank_drop_.blankdrop.html"
Context: "../classes/context_context_.context.html"
DelimitedToken: "../classes/tokens_delimited_token_.delimitedtoken.html"
Drop: "../classes/drop_drop_.drop.html"
EmptyDrop: "../classes/drop_empty_drop_.emptydrop.html"
Expression: "../classes/render_expression_.expression.html"
FilterToken: "../classes/tokens_filter_token_.filtertoken.html"
ForloopDrop: "../classes/drop_forloop_drop_.forloopdrop.html"
HTMLToken: "../classes/tokens_html_token_.htmltoken.html"
HashToken: "../classes/tokens_hash_token_.hashtoken.html"
LRU: "../classes/cache_lru_.lru.html"
Liquid: "../classes/liquid_.liquid.html"
LiteralToken: "../classes/tokens_literal_token_.literaltoken.html"
NullDrop: "../classes/drop_null_drop_.nulldrop.html"
NumberToken: "../classes/tokens_number_token_.numbertoken.html"
OperatorToken: "../classes/tokens_operator_token_.operatortoken.html"
OutputToken: "../classes/tokens_output_token_.outputtoken.html"
ParseError: "../classes/util_error_.parseerror.html"
ParseStream: "../classes/parser_parse_stream_.parsestream.html"
Parser: "../classes/parser_parser_.parser.html"
PropertyaccessToken: "../classes/tokens_property_access_token_.propertyaccesstoken.html"
QuotedToken: "../classes/tokens_quoted_token_.quotedtoken.html"
RangeToken: "../classes/tokens_range_token_.rangetoken.html"
Render: "../classes/render_render_.render.html"
RenderError: "../classes/util_error_.rendererror.html"
TablerowloopDrop: "../classes/drop_tablerowloop_drop_.tablerowloopdrop.html"
TagToken: "../classes/tokens_tag_token_.tagtoken.html"
Token: "../classes/tokens_token_.token.html"
TokenizationError: "../classes/util_error_.tokenizationerror.html"
Tokenizer: "../classes/parser_tokenizer_.tokenizer.html"
WordToken: "../classes/tokens_word_token_.wordtoken.html"
enums:
BlockMode: "../enums/context_block_mode_.blockmode.html"
TokenKind: "../enums/parser_token_kind_.tokenkind.html"
interfaces:
Cache: "../interfaces/cache_cache_.cache.html"
FilterImplOptions: "../interfaces/template_filter_filter_impl_options_.filterimploptions.html"
FS: "../interfaces/fs_fs_.fs.html"
LiquidOptions: "../interfaces/liquid_options_.liquidoptions.html"
NormalizedFullOptions: "../interfaces/liquid_options_.normalizedfulloptions.html"
PlainObject: "../interfaces/context_scope_.plainobject.html"
TagImplOptions: "../interfaces/template_tag_tag_impl_options_.tagimploptions.html"
+12
View File
@@ -0,0 +1,12 @@
<?xml version="1.0" encoding="utf-8"?>
<browserconfig>
<msapplication>
<tile>
<square70x70logo src="/icon/mstile-70x70.png"/>
<square150x150logo src="/icon/mstile-150x150.png"/>
<square310x310logo src="/icon/mstile-310x310.png"/>
<wide310x150logo src="/icon/mstile-310x150.png"/>
<TileColor>#2f83cd</TileColor>
</tile>
</msapplication>
</browserconfig>
Binary file not shown.

After

Width:  |  Height:  |  Size: 9.4 KiB

+37
View File
@@ -0,0 +1,37 @@
---
title: abs
---
Liquid filter that returns the absolute value of a number.
Input
```liquid
{{ -17 | abs }}
```
Output
```text
17
```
Input
```liquid
{{ 4 | abs }}
```
Output
```text
4
```
`abs` will also work on a string that only contains a number:
Input
```liquid
{{ "-19.86" | abs }}
```
Output
```text
19.86
```
+29
View File
@@ -0,0 +1,29 @@
---
title: append
---
Concatenates two strings and returns the concatenated value.
Input
```liquid
{{ "/my/fancy/url" | append: ".html" }}
```
Output
```text
/my/fancy/url.html
```
`append` can also be used with variables:
Input
```liquid
{% assign filename = "/index.html" %}
{{ "website.com" | append: filename }}
```
Output
```text
website.com/index.html
```
+25
View File
@@ -0,0 +1,25 @@
---
title: at_least
---
Limits a number to a minimum value.
Input
```liquid
{{ 4 | at_least: 5 }}
```
Output
```text
5
```
Input
```liquid
{{ 4 | at_least: 3 }}
```
Output
```text
4
```
+25
View File
@@ -0,0 +1,25 @@
---
title: at_most
---
Limits a number to a maximum value.
Input
```liquid
{{ 4 | at_most: 5 }}
```
Output
```text
4
```
Input
```liquid
{{ 4 | at_most: 3 }}
```
Output
```text
3
```
+27
View File
@@ -0,0 +1,27 @@
---
title: capitalize
---
Makes the first character of a string capitalized.
Input
```liquid
{{ "title" | capitalize }}
```
Output
```text
Title
```
`capitalize` only capitalizes the first character of a string, so later words are not affected:
Input
```liquid
{{ "my great title" | capitalize }}
```
Output
```text
My great title
```
+47
View File
@@ -0,0 +1,47 @@
---
title: ceil
---
Rounds the input up to the nearest whole number. LiquidJS tries to convert the input to a number before the filter is applied.
Input
```liquid
{{ 1.2 | ceil }}
```
Output
```text
2
```
Input
```liquid
{{ 2.0 | ceil }}
```
Output
```text
2
```
Input
```liquid
{{ 183.357 | ceil }}
```
Output
```text
184
```
Here the input value is a string:
Input
```liquid
{{ "3.5" | ceil }}
```
Output
```text
4
```
+47
View File
@@ -0,0 +1,47 @@
---
title: compact
---
Removes any `nil` values from an array.
For this example, assume `site.pages` is an array of content pages for a website, and some of these pages have an attribute called `category` that specifies their content category. If we `map` those categories to an array, some of the array items might be `nil` if any pages do not have a `category` attribute.
Input
```liquid
{% assign site_categories = site.pages | map: "category" %}
{% for category in site_categories %}
- {{ category }}
{% endfor %}
```
Output
```text
- business
- celebrities
-
- lifestyle
- sports
-
- technology
```
By using `compact` when we create our `site_categories` array, we can remove all the `nil` values in the array.
Input
```liquid
{% assign site_categories = site.pages | map: "category" | compact %}
{% for category in site_categories %}
- {{ category }}
{% endfor %}
```
Output
```text
- business
- celebrities
- lifestyle
- sports
- technology
```
+53
View File
@@ -0,0 +1,53 @@
---
title: concat
---
Concatenates (joins together) multiple arrays. The resulting array contains all the items from the input arrays.
Input
```liquid
{% assign fruits = "apples, oranges, peaches" | split: ", " %}
{% assign vegetables = "carrots, turnips, potatoes" | split: ", " %}
{% assign everything = fruits | concat: vegetables %}
{% for item in everything %}
- {{ item }}
{% endfor %}
```
Output
```text
- apples
- oranges
- peaches
- carrots
- turnips
- potatoes
```
You can string together `concat` filters to join more than two arrays:
Input
```liquid
{% assign furniture = "chairs, tables, shelves" | split: ", " %}
{% assign everything = fruits | concat: vegetables | concat: furniture %}
{% for item in everything %}
- {{ item }}
{% endfor %}
```
Output
```text
- apples
- oranges
- peaches
- carrots
- turnips
- potatoes
- chairs
- tables
- shelves
```
+53
View File
@@ -0,0 +1,53 @@
---
title: date
---
Converts a timestamp into another date format. LiquidJS tries to be conformant with Shopify/Liquid which is using Ruby's core [Time#strftime(string)](http://www.ruby-doc.org/core/Time.html#method-i-strftime). The input is firstly converted to `Date` object via [new Date()][newDate].
Input
```liquid
{{ article.published_at | date: "%a, %b %d, %y" }}
```
Output
```text
Fri, Jul 17, 15
```
Input
```liquid
{{ article.published_at | date: "%Y" }}
```
Output
```text
2015
```
`date` works on strings if they contain well-formatted dates:
Input
```liquid
{{ "March 14, 2016" | date: "%b %d, %y" }}
```
Output
```text
Mar 14, 16
```
To get the current time, pass the special word `"now"` (or `"today"`) to `date`:
Input
```liquid
This page was last updated at {{ "now" | date: "%Y-%m-%d %H:%M" }}.
```
Output
```text
This page was last updated at 2020-03-25 15:57.
```
{% note info now %}Note that the value will be the current time of when the page was last generated from the template, not when the page is presented to a user if caching or static site generation is involved.{% endnote %}
[newDate]: https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Date
+45
View File
@@ -0,0 +1,45 @@
---
title: default
---
Allows you to specify a fallback in case a value doesn't exist. `default` will show its value if the left side is [falsy][falsy] or empty (`string` or `Array`).
In this example, `product_price` is not defined, so the default value is used.
Input
```liquid
{{ product_price | default: 2.99 }}
```
Output
```text
2.99
```
In this example, `product_price` is defined, so the default value is not used.
Input
```liquid
{% assign product_price = 4.99 %}
{{ product_price | default: 2.99 }}
```
Output
```text
4.99
```
In this example, `product_price` is empty, so the default value is used.
Input
```liquid
{% assign product_price = "" %}
{{ product_price | default: 2.99 }}
```
Output
```text
2.99
```
[falsy]: ../tutorials/truthy-and-falsy.html
+29
View File
@@ -0,0 +1,29 @@
---
title: divided_by
---
Divides a number by another number. The result is the string obtained by JavaScript `.toString()` of the result number.
Input
```liquid
{{ 16 | divided_by: 4 }}
```
Output
```text
4
```
Input
```liquid
{{ 5 | divided_by: 3 }}
```
Output
```text
1.6666666666666667
```
{% note info Integer Arithmetic %}Since JavaScript doesn't differentiate integers and floats, LiquidJS is not capable of integer arithmetic and the return type is always `number`, the string representation of which depends on its value.{% endnote %}
[floor]: ./floor.html
+25
View File
@@ -0,0 +1,25 @@
---
title: downcase
---
Makes each character in a string lowercase. It has no effect on strings which are already all lowercase.
Input
```liquid
{{ "Parker Moore" | downcase }}
```
Output
```text
parker moore
```
Input
```liquid
{{ "apple" | downcase }}
```
Output
```text
apple
```
+25
View File
@@ -0,0 +1,25 @@
---
title: escape
---
Escapes a string by replacing HTML special characters with escape sequences. It doesn't change strings that don't have anything to escape.
Input
```liquid
{{ "Have you read 'James & the Giant Peach'?" | escape }}
```
Output
<pre class="highlight">
{{"Have you read &#39;James &amp; the Giant Peach&#39;?" | escape}}
</pre>
Input
```liquid
{{ "Tetsuro Takara" | escape }}
```
Output
```text
Tetsuro Takara
```
+25
View File
@@ -0,0 +1,25 @@
---
title: escape_once
---
Escapes a string without changing existing escaped entities. It doesn't change strings that don't have anything to escape.
Input
```liquid
{{ "1 < 2 & 3" | escape_once }}
```
Output
<pre class="highlight">
{{"1 &lt; 2 &amp; 3" | escape}}
</pre>
Input
<pre class="highlight">
&#x7B;&#x7B; "{{"1 &lt; 2 &amp; 3" | escape}}" | escape_once }}
</pre>
Output
<pre class="highlight">
{{"1 &lt; 2 &amp; 3" | escape}}
</pre>
+35
View File
@@ -0,0 +1,35 @@
---
title: first
---
Returns the first item of an array.
Input
```liquid
{{ "Ground control to Major Tom." | split: " " | first }}
```
Output
```text
Ground
```
Input
```liquid
{% assign my_array = "zebra, octopus, giraffe, tiger" | split: ", " %}
{{ my_array.first }}
```
Output
```text
zebra
```
You can use `first` with dot notation when you need to use the filter inside a tag:
```liquid
{% if my_array.first == "zebra" %}
Here comes a zebra!
{% endif %}
```
+47
View File
@@ -0,0 +1,47 @@
---
title: floor
---
Rounds the input down to the nearest whole number. LiquidJS tries to convert the input to a number before the filter is applied.
Input
```liquid
{{ 1.2 | floor }}
```
Output
```text
1
```
Input
```liquid
{{ 2.0 | floor }}
```
Output
```text
2
```
Input
```liquid
{{ 183.357 | floor }}
```
Output
```text
183
```
Here the input value is a string:
Input
```liquid
{{ "3.5" | floor }}
```
Output
```text
3
```
+17
View File
@@ -0,0 +1,17 @@
---
title: join
---
Combines the items in an array into a single string using the argument as a separator.
Input
```liquid
{% assign beatles = "John, Paul, George, Ringo" | split: ", " %}
{{ beatles | join: " and " }}
```
Output
```text
John and Paul and George and Ringo
```
+16
View File
@@ -0,0 +1,16 @@
---
title: json
---
Convert values to string via `JSON.stringify()`, for debug purpose.
Input
```liquid
{% assign arr = "foo bar coo" | split: " " %}
{{ arr | json }}
```
Output
```text
["foo","bar","coo"]
```
+35
View File
@@ -0,0 +1,35 @@
---
title: last
---
Returns the last item of an array.
Input
```liquid
{{ "Ground control to Major Tom." | split: " " | last }}
```
Output
```text
Tom.
```
Input
```liquid
{% assign my_array = "zebra, octopus, giraffe, tiger" | split: ", " %}
{{ my_array.last }}
```
Output
```text
tiger
```
You can use `last` with dot notation when you need to use the filter inside a tag:
```liquid
{% if my_array.last == "tiger" %}
There goes a tiger!
{% endif %}
```
+15
View File
@@ -0,0 +1,15 @@
---
title: lstrip
---
Removes all whitespace (tabs, spaces, and newlines) from the left side of a string. It does not affect spaces between words.
Input
```liquid
BEGIN{{ " So much room for activities! " | lstrip }}END
```
Output
```text
BEGINSo much room for activities! END
```
+25
View File
@@ -0,0 +1,25 @@
---
title: map
---
Creates an array of values by extracting the values of a named property from another object.
In this example, assume the object `site.pages` contains all the metadata for a website. Using `assign` with the `map` filter creates a variable that contains only the values of the `category` properties of everything in the `site.pages` object.
Input
```liquid
{% assign all_categories = site.pages | map: "category" %}
{% for item in all_categories %}
- {{ item }}
{% endfor %}
```
Output
```text
- business
- celebrities
- lifestyle
- sports
- technology
```
+35
View File
@@ -0,0 +1,35 @@
---
title: minus
---
Subtracts a number from another number.
Input
```liquid
{{ 4 | minus: 2 }}
```
Output
```text
2
```
Input
```liquid
{{ 16 | minus: 4 }}
```
Output
```text
12
```
Input
```liquid
{{ 183.357 | minus: 12 }}
```
Output
```text
171.357
```
+35
View File
@@ -0,0 +1,35 @@
---
title: modulo
---
Returns the remainder of a division operation.
Input
```liquid
{{ 3 | modulo: 2 }}
```
Output
```text
1
```
Input
```liquid
{{ 24 | modulo: 7 }}
```
Output
```text
3
```
Input
```liquid
{{ 183.357 | modulo: 12 }}
```
Output
```text
3.3569999999999993
```
+21
View File
@@ -0,0 +1,21 @@
---
title: newline_to_br
---
Replaces every newline (`\n`) in a string with an HTML line break (`<br />`).
Input
```liquid
{% capture string_with_newlines %}
Hello
there
{% endcapture %}
{{ string_with_newlines | newline_to_br }}
```
Output
```html
<br/>Hello<br/>there<br/>
```

Some files were not shown because too many files have changed in this diff Show More