From 37d12a14ebfab6cc71db876385dc2628197b6bff Mon Sep 17 00:00:00 2001 From: semantic-release-bot Date: Fri, 22 Feb 2019 19:56:16 +0000 Subject: [PATCH] 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)) --- CHANGELOG.md | 7 + dist/builtin/filters/array.d.ts | 21 +- dist/builtin/filters/date.d.ts | 2 +- dist/builtin/filters/html.d.ts | 8 +- dist/builtin/filters/index.d.ts | 72 ++--- dist/builtin/filters/math.d.ts | 18 +- dist/builtin/filters/object.d.ts | 2 +- dist/builtin/filters/string.d.ts | 19 +- dist/builtin/filters/url.d.ts | 4 +- dist/builtin/tags/assign.d.ts | 6 +- dist/builtin/tags/block.d.ts | 6 +- dist/builtin/tags/capture.d.ts | 9 +- dist/builtin/tags/case.d.ts | 6 +- dist/builtin/tags/comment.d.ts | 5 +- dist/builtin/tags/cycle.d.ts | 6 +- dist/builtin/tags/decrement.d.ts | 8 +- dist/builtin/tags/for.d.ts | 8 +- dist/builtin/tags/if.d.ts | 6 +- dist/builtin/tags/include.d.ts | 6 +- dist/builtin/tags/increment.d.ts | 6 +- dist/builtin/tags/layout.d.ts | 6 +- dist/builtin/tags/raw.d.ts | 6 +- dist/builtin/tags/tablerow.d.ts | 6 +- dist/builtin/tags/unless.d.ts | 6 +- dist/fs/ifs.d.ts | 2 +- dist/liquid-options.d.ts | 8 +- dist/liquid.common.js | 432 ++++++++++++-------------- dist/liquid.common.js.map | 2 +- dist/liquid.d.ts | 19 +- dist/liquid.js | 432 ++++++++++++-------------- dist/liquid.js.map | 2 +- dist/liquid.min.js | 2 +- dist/liquid.min.js.map | 2 +- dist/parser/delimited-token.d.ts | 2 +- dist/parser/html-token.d.ts | 2 +- dist/parser/lexical.d.ts | 12 +- dist/parser/output-token.d.ts | 2 +- dist/parser/parse-stream.d.ts | 9 +- dist/parser/parser.d.ts | 3 +- dist/parser/tag-token.d.ts | 2 +- dist/parser/token.d.ts | 4 +- dist/parser/tokenizer.d.ts | 3 +- dist/render/render.d.ts | 4 +- dist/render/syntax.d.ts | 5 +- dist/scope/icontext.d.ts | 4 + dist/scope/scope.d.ts | 16 +- dist/template/filter/filter-impl.d.ts | 1 + dist/template/filter/filter.d.ts | 13 + dist/template/html.d.ts | 6 +- dist/template/output.d.ts | 2 +- dist/template/tag/block-tag.d.ts | 18 ++ dist/template/tag/hash.d.ts | 3 +- dist/template/tag/itag-impl.d.ts | 1 + dist/template/tag/tag.d.ts | 3 +- dist/template/template.d.ts | 7 +- dist/template/value.d.ts | 3 +- dist/util/error.d.ts | 29 +- dist/util/promise.d.ts | 3 +- dist/util/strftime.d.ts | 2 +- dist/util/underscore.d.ts | 18 +- package-lock.json | 2 +- package.json | 2 +- 62 files changed, 620 insertions(+), 711 deletions(-) create mode 100644 dist/scope/icontext.d.ts create mode 100644 dist/template/filter/filter-impl.d.ts create mode 100644 dist/template/filter/filter.d.ts create mode 100644 dist/template/tag/block-tag.d.ts diff --git a/CHANGELOG.md b/CHANGELOG.md index 892932d3a..018a2565e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,10 @@ +## [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) diff --git a/dist/builtin/filters/array.d.ts b/dist/builtin/filters/array.d.ts index 4e4d3f525..0d48ffe8f 100644 --- a/dist/builtin/filters/array.d.ts +++ b/dist/builtin/filters/array.d.ts @@ -1,12 +1,15 @@ declare const _default: { - 'join': (v: any, arg: any) => any; - 'last': (v: any) => any; - 'first': (v: any) => any; - 'map': (arr: any, arg: any) => any; - 'reverse': (v: any) => any; - 'sort': (v: any, arg: any) => any; - 'size': (v: any) => any; - 'slice': (v: any, begin: any, length: any) => any; - 'uniq': (arr: any) => any; + 'join': (v: any[], arg: string) => string; + 'last': (v: T[]) => T; + 'first': (v: T[]) => T; + 'map': (arr: { + [key: string]: T1; + }[], arg: string) => T1[]; + 'reverse': (v: any[]) => any[]; + 'sort': (v: T[], arg: (lhs: T, rhs: T) => number) => T[]; + 'size': (v: string | any[]) => number; + 'concat': (v: T1[], arg: T2 | T2[]) => (T1 | T2)[]; + 'slice': (v: T[], begin: number, length: number) => T[]; + 'uniq': (arr: T[]) => T[]; }; export default _default; diff --git a/dist/builtin/filters/date.d.ts b/dist/builtin/filters/date.d.ts index e550781fe..8b2e69ab0 100644 --- a/dist/builtin/filters/date.d.ts +++ b/dist/builtin/filters/date.d.ts @@ -1,4 +1,4 @@ declare const _default: { - 'date': (v: any, arg: any) => any; + 'date': (v: string | Date, arg: string) => string | Date; }; export default _default; diff --git a/dist/builtin/filters/html.d.ts b/dist/builtin/filters/html.d.ts index 657ddd7bd..23600e019 100644 --- a/dist/builtin/filters/html.d.ts +++ b/dist/builtin/filters/html.d.ts @@ -1,8 +1,8 @@ -declare function escape(str: any): string; +declare function escape(str: string): string; declare const _default: { 'escape': typeof escape; - 'escape_once': (str: any) => string; - 'newline_to_br': (v: any) => any; - 'strip_html': (v: any) => string; + 'escape_once': (str: string) => string; + 'newline_to_br': (v: string) => string; + 'strip_html': (v: string) => string; }; export default _default; diff --git a/dist/builtin/filters/index.d.ts b/dist/builtin/filters/index.d.ts index 0ce3f74c4..da2b76608 100644 --- a/dist/builtin/filters/index.d.ts +++ b/dist/builtin/filters/index.d.ts @@ -1,46 +1,32 @@ declare const _default: { - 'join': (v: any, arg: any) => any; - 'last': (v: any) => any; - 'first': (v: any) => any; - 'map': (arr: any, arg: any) => any; - 'reverse': (v: any) => any; - 'sort': (v: any, arg: any) => any; - 'size': (v: any) => any; - 'slice': (v: any, begin: any, length: any) => any; - 'uniq': (arr: any) => any; - 'default': (v: any, arg: any) => any; - 'date': (v: any, arg: any) => any; - 'url_decode': (x: any) => any; - 'url_encode': (x: any) => any; - 'abs': (v: any) => number; - 'ceil': (v: any) => number; - 'divided_by': (v: any, arg: any) => number; - 'floor': (v: any) => number; - 'minus': (l: any, r: any) => any; - 'modulo': (l: any, r: any) => any; - 'round': (v: any, arg: any) => number; - 'plus': (l: any, r: any) => any; - 'times': (v: any, arg: any) => number; - 'append': (v: any, arg: any) => any; - 'prepend': (v: any, arg: any) => any; - 'capitalize': (str: any) => string; - 'concat': (v: any, arg: any) => any; - 'lstrip': (v: any) => string; - 'downcase': (v: any) => any; - 'upcase': (str: any) => string; - 'remove': (v: any, arg: any) => any; - 'remove_first': (v: any, l: any) => any; - 'replace': (v: any, pattern: any, replacement: any) => string; - 'replace_first': (v: any, arg1: any, arg2: any) => string; - 'rstrip': (str: any) => string; - 'split': (v: any, arg: any) => string[]; - 'strip': (v: any) => string; - 'strip_newlines': (v: any) => string; - 'truncate': (v: any, l: any, o: any) => any; - 'truncatewords': (v: any, l: any, o: any) => any; - 'escape': (str: any) => string; - 'escape_once': (str: any) => string; - 'newline_to_br': (v: any) => any; - 'strip_html': (v: any) => string; + 'join': (v: any[], arg: string) => string; + 'last': (v: T[]) => T; + 'first': (v: T[]) => T; + 'map': (arr: { + [key: string]: T1; + }[], arg: string) => T1[]; + 'reverse': (v: any[]) => any[]; + 'sort': (v: T[], arg: (lhs: T, rhs: T) => number) => T[]; + 'size': (v: string | any[]) => number; + 'concat': (v: T1[], arg: T2 | T2[]) => (T1 | T2)[]; + 'slice': (v: T[], begin: number, length: number) => T[]; + 'uniq': (arr: T[]) => T[]; + 'default': (v: T1, arg: T2) => T1 | T2; + 'date': (v: string | Date, arg: string) => string | Date; + 'url_decode': (x: string) => string; + 'url_encode': (x: string) => string; + 'abs': (v: number) => number; + 'ceil': (v: number) => number; + 'divided_by': (v: number, arg: number) => number; + 'floor': (v: number) => number; + 'minus': (l: number, r: number) => string; + 'modulo': (l: number, r: number) => string; + 'round': (v: number, arg?: number) => number; + 'plus': (l: number, r: number) => string; + 'times': (v: number, arg: number) => number; + 'escape': (str: string) => string; + 'escape_once': (str: string) => string; + 'newline_to_br': (v: string) => string; + 'strip_html': (v: string) => string; }; export default _default; diff --git a/dist/builtin/filters/math.d.ts b/dist/builtin/filters/math.d.ts index e6638054d..e5f8330d2 100644 --- a/dist/builtin/filters/math.d.ts +++ b/dist/builtin/filters/math.d.ts @@ -1,12 +1,12 @@ declare const _default: { - 'abs': (v: any) => number; - 'ceil': (v: any) => number; - 'divided_by': (v: any, arg: any) => number; - 'floor': (v: any) => number; - 'minus': (l: any, r: any) => any; - 'modulo': (l: any, r: any) => any; - 'round': (v: any, arg: any) => number; - 'plus': (l: any, r: any) => any; - 'times': (v: any, arg: any) => number; + 'abs': (v: number) => number; + 'ceil': (v: number) => number; + 'divided_by': (v: number, arg: number) => number; + 'floor': (v: number) => number; + 'minus': (l: number, r: number) => string; + 'modulo': (l: number, r: number) => string; + 'round': (v: number, arg?: number) => number; + 'plus': (l: number, r: number) => string; + 'times': (v: number, arg: number) => number; }; export default _default; diff --git a/dist/builtin/filters/object.d.ts b/dist/builtin/filters/object.d.ts index cabe8be66..d5ec20a60 100644 --- a/dist/builtin/filters/object.d.ts +++ b/dist/builtin/filters/object.d.ts @@ -1,4 +1,4 @@ declare const _default: { - 'default': (v: any, arg: any) => any; + 'default': (v: T1, arg: T2) => T1 | T2; }; export default _default; diff --git a/dist/builtin/filters/string.d.ts b/dist/builtin/filters/string.d.ts index a44717035..c46d278d8 100644 --- a/dist/builtin/filters/string.d.ts +++ b/dist/builtin/filters/string.d.ts @@ -1,20 +1,5 @@ +import { FilterImpl } from 'src/template/filter/filter-impl'; declare const _default: { - 'append': (v: any, arg: any) => any; - 'prepend': (v: any, arg: any) => any; - 'capitalize': (str: any) => string; - 'concat': (v: any, arg: any) => any; - 'lstrip': (v: any) => string; - 'downcase': (v: any) => any; - 'upcase': (str: any) => string; - 'remove': (v: any, arg: any) => any; - 'remove_first': (v: any, l: any) => any; - 'replace': (v: any, pattern: any, replacement: any) => string; - 'replace_first': (v: any, arg1: any, arg2: any) => string; - 'rstrip': (str: any) => string; - 'split': (v: any, arg: any) => string[]; - 'strip': (v: any) => string; - 'strip_newlines': (v: any) => string; - 'truncate': (v: any, l: any, o: any) => any; - 'truncatewords': (v: any, l: any, o: any) => any; + [key: string]: FilterImpl; }; export default _default; diff --git a/dist/builtin/filters/url.d.ts b/dist/builtin/filters/url.d.ts index 51e628b9a..1c595dcb6 100644 --- a/dist/builtin/filters/url.d.ts +++ b/dist/builtin/filters/url.d.ts @@ -1,5 +1,5 @@ declare const _default: { - 'url_decode': (x: any) => any; - 'url_encode': (x: any) => any; + 'url_decode': (x: string) => string; + 'url_encode': (x: string) => string; }; export default _default; diff --git a/dist/builtin/tags/assign.d.ts b/dist/builtin/tags/assign.d.ts index 243097de6..b05d7ea10 100644 --- a/dist/builtin/tags/assign.d.ts +++ b/dist/builtin/tags/assign.d.ts @@ -1,5 +1,3 @@ -declare const _default: { - parse: (token: any) => void; - render: (scope: any) => Promise; -}; +import ITagImplOptions from 'src/template/tag/itag-impl-options'; +declare const _default: ITagImplOptions; export default _default; diff --git a/dist/builtin/tags/block.d.ts b/dist/builtin/tags/block.d.ts index 977b20349..b05d7ea10 100644 --- a/dist/builtin/tags/block.d.ts +++ b/dist/builtin/tags/block.d.ts @@ -1,5 +1,3 @@ -declare const _default: { - parse: (token: any, remainTokens: any) => void; - render: (scope: any) => Promise; -}; +import ITagImplOptions from 'src/template/tag/itag-impl-options'; +declare const _default: ITagImplOptions; export default _default; diff --git a/dist/builtin/tags/capture.d.ts b/dist/builtin/tags/capture.d.ts index 92c1f20af..b05d7ea10 100644 --- a/dist/builtin/tags/capture.d.ts +++ b/dist/builtin/tags/capture.d.ts @@ -1,8 +1,3 @@ -import TagToken from 'src/parser/tag-token'; -import Token from 'src/parser/token'; -import Scope from 'src/scope/scope'; -declare const _default: { - parse: (tagToken: TagToken, remainTokens: Token[]) => void; - render: (scope: Scope) => Promise; -}; +import ITagImplOptions from 'src/template/tag/itag-impl-options'; +declare const _default: ITagImplOptions; export default _default; diff --git a/dist/builtin/tags/case.d.ts b/dist/builtin/tags/case.d.ts index 86195dc92..b05d7ea10 100644 --- a/dist/builtin/tags/case.d.ts +++ b/dist/builtin/tags/case.d.ts @@ -1,5 +1,3 @@ -declare const _default: { - parse: (tagToken: any, remainTokens: any) => void; - render: (scope: any) => any; -}; +import ITagImplOptions from 'src/template/tag/itag-impl-options'; +declare const _default: ITagImplOptions; export default _default; diff --git a/dist/builtin/tags/comment.d.ts b/dist/builtin/tags/comment.d.ts index 4f61dea12..b05d7ea10 100644 --- a/dist/builtin/tags/comment.d.ts +++ b/dist/builtin/tags/comment.d.ts @@ -1,4 +1,3 @@ -declare const _default: { - parse: (tagToken: any, remainTokens: any) => void; -}; +import ITagImplOptions from 'src/template/tag/itag-impl-options'; +declare const _default: ITagImplOptions; export default _default; diff --git a/dist/builtin/tags/cycle.d.ts b/dist/builtin/tags/cycle.d.ts index a2de6069a..b05d7ea10 100644 --- a/dist/builtin/tags/cycle.d.ts +++ b/dist/builtin/tags/cycle.d.ts @@ -1,5 +1,3 @@ -declare const _default: { - parse: (tagToken: any) => void; - render: (scope: any) => any; -}; +import ITagImplOptions from 'src/template/tag/itag-impl-options'; +declare const _default: ITagImplOptions; export default _default; diff --git a/dist/builtin/tags/decrement.d.ts b/dist/builtin/tags/decrement.d.ts index ae44aa5a6..b05d7ea10 100644 --- a/dist/builtin/tags/decrement.d.ts +++ b/dist/builtin/tags/decrement.d.ts @@ -1,7 +1,3 @@ -import TagToken from 'src/parser/tag-token'; -import Scope from 'src/scope/scope'; -declare const _default: { - parse: (token: TagToken) => void; - render: (scope: Scope) => number; -}; +import ITagImplOptions from 'src/template/tag/itag-impl-options'; +declare const _default: ITagImplOptions; export default _default; diff --git a/dist/builtin/tags/for.d.ts b/dist/builtin/tags/for.d.ts index f2edf3de6..b05d7ea10 100644 --- a/dist/builtin/tags/for.d.ts +++ b/dist/builtin/tags/for.d.ts @@ -1,7 +1,3 @@ -declare function parse(tagToken: any, remainTokens: any): void; -declare function render(scope: any, hash: any): Promise; -declare const _default: { - parse: typeof parse; - render: typeof render; -}; +import ITagImplOptions from 'src/template/tag/itag-impl-options'; +declare const _default: ITagImplOptions; export default _default; diff --git a/dist/builtin/tags/if.d.ts b/dist/builtin/tags/if.d.ts index 86195dc92..b05d7ea10 100644 --- a/dist/builtin/tags/if.d.ts +++ b/dist/builtin/tags/if.d.ts @@ -1,5 +1,3 @@ -declare const _default: { - parse: (tagToken: any, remainTokens: any) => void; - render: (scope: any) => any; -}; +import ITagImplOptions from 'src/template/tag/itag-impl-options'; +declare const _default: ITagImplOptions; export default _default; diff --git a/dist/builtin/tags/include.d.ts b/dist/builtin/tags/include.d.ts index e950ee8a0..b05d7ea10 100644 --- a/dist/builtin/tags/include.d.ts +++ b/dist/builtin/tags/include.d.ts @@ -1,5 +1,3 @@ -declare const _default: { - parse: (token: any) => void; - render: (scope: any, hash: any) => Promise; -}; +import ITagImplOptions from 'src/template/tag/itag-impl-options'; +declare const _default: ITagImplOptions; export default _default; diff --git a/dist/builtin/tags/increment.d.ts b/dist/builtin/tags/increment.d.ts index 81908639b..b05d7ea10 100644 --- a/dist/builtin/tags/increment.d.ts +++ b/dist/builtin/tags/increment.d.ts @@ -1,5 +1,3 @@ -declare const _default: { - parse: (token: any) => void; - render: (scope: any) => any; -}; +import ITagImplOptions from 'src/template/tag/itag-impl-options'; +declare const _default: ITagImplOptions; export default _default; diff --git a/dist/builtin/tags/layout.d.ts b/dist/builtin/tags/layout.d.ts index bfcc6c292..b05d7ea10 100644 --- a/dist/builtin/tags/layout.d.ts +++ b/dist/builtin/tags/layout.d.ts @@ -1,5 +1,3 @@ -declare const _default: { - parse: (token: any, remainTokens: any) => void; - render: (scope: any, hash: any) => Promise; -}; +import ITagImplOptions from 'src/template/tag/itag-impl-options'; +declare const _default: ITagImplOptions; export default _default; diff --git a/dist/builtin/tags/raw.d.ts b/dist/builtin/tags/raw.d.ts index 5d1a9c849..b05d7ea10 100644 --- a/dist/builtin/tags/raw.d.ts +++ b/dist/builtin/tags/raw.d.ts @@ -1,5 +1,3 @@ -declare const _default: { - parse: (tagToken: any, remainTokens: any) => void; - render: () => any; -}; +import ITagImplOptions from 'src/template/tag/itag-impl-options'; +declare const _default: ITagImplOptions; export default _default; diff --git a/dist/builtin/tags/tablerow.d.ts b/dist/builtin/tags/tablerow.d.ts index a21734a51..b05d7ea10 100644 --- a/dist/builtin/tags/tablerow.d.ts +++ b/dist/builtin/tags/tablerow.d.ts @@ -1,5 +1,3 @@ -declare const _default: { - parse: (tagToken: any, remainTokens: any) => void; - render: (scope: any, hash: any) => Promise; -}; +import ITagImplOptions from 'src/template/tag/itag-impl-options'; +declare const _default: ITagImplOptions; export default _default; diff --git a/dist/builtin/tags/unless.d.ts b/dist/builtin/tags/unless.d.ts index 86195dc92..b05d7ea10 100644 --- a/dist/builtin/tags/unless.d.ts +++ b/dist/builtin/tags/unless.d.ts @@ -1,5 +1,3 @@ -declare const _default: { - parse: (tagToken: any, remainTokens: any) => void; - render: (scope: any) => any; -}; +import ITagImplOptions from 'src/template/tag/itag-impl-options'; +declare const _default: ITagImplOptions; export default _default; diff --git a/dist/fs/ifs.d.ts b/dist/fs/ifs.d.ts index d13902175..213c8533a 100644 --- a/dist/fs/ifs.d.ts +++ b/dist/fs/ifs.d.ts @@ -1,5 +1,5 @@ export default interface IFS { - exists: (filepath?: string) => Promise; + exists: (filepath: string) => Promise; readFile: (filepath: string) => Promise; resolve: (root: string, file: string, ext: string) => string; } diff --git a/dist/liquid-options.d.ts b/dist/liquid-options.d.ts index 33862d45d..29fa1736e 100644 --- a/dist/liquid-options.d.ts +++ b/dist/liquid-options.d.ts @@ -42,7 +42,11 @@ export interface NormalizedFullOptions extends NormalizedOptions { trim_tag_left: boolean; trim_output_right: boolean; trim_output_left: boolean; + tag_delimiter_left: string; + tag_delimiter_right: string; + output_delimiter_left: string; + output_delimiter_right: string; greedy: boolean; } -export declare function normalize(options: LiquidOptions): NormalizedOptions; -export declare function applyDefault(options: NormalizedOptions): NormalizedFullOptions; +export declare function normalize(options?: LiquidOptions): NormalizedOptions; +export declare function applyDefault(options?: NormalizedOptions): NormalizedFullOptions; diff --git a/dist/liquid.common.js b/dist/liquid.common.js index b22078c18..f3e645fa6 100644 --- a/dist/liquid.common.js +++ b/dist/liquid.common.js @@ -1,5 +1,5 @@ /* - * liquidjs@7.2.0, https://github.com/harttle/liquidjs + * liquidjs@7.2.1, https://github.com/harttle/liquidjs * (c) 2016-2019 harttle * Released under the MIT License. */ @@ -166,32 +166,6 @@ function forOwn(object, iteratee) { } return object; } -/* - * Assigns own enumerable string keyed properties of source objects to the destination object. - * Source objects are applied from left to right. - * Subsequent sources overwrite property assignments of previous sources. - * - * Note: This method mutates object and is loosely based on Object.assign. - * - * @param {Object} object The destination object. - * @param {...Object} sources The source objects. - * @return {Object} Returns object. - */ -function assign(obj) { - var srcs = []; - for (var _i = 1; _i < arguments.length; _i++) { - srcs[_i - 1] = arguments[_i]; - } - obj = isObject(obj) ? obj : {}; - srcs.forEach(function (src) { return binaryAssign(obj, src); }); - return obj; -} -function binaryAssign(target, src) { - for (var key in src) - if (src.hasOwnProperty(key)) - target[key] = src[key]; - return target; -} function last(arr) { return arr[arr.length - 1]; } @@ -214,7 +188,7 @@ function isObject(value) { * negative — if you'd like a negative range, use a negative step. */ function range(start, stop, step) { - if (arguments.length === 1) { + if (stop === undefined) { stop = start; start = 0; } @@ -241,7 +215,7 @@ var quoted = new RegExp(singleQuoted.source + "|" + doubleQuoted.source); var quoteBalanced = new RegExp("(?:" + quoted.source + "|[^'\"])*"); // basic types var integer = /-?\d+/; -var number = /-?\d+\.?\d*|\.?\d+/; +var number = /[+-]?(?:\d+\.?\d*|\.?\d+)/; var bool = /true|false/; // property access var identifier = /[\w-]+[?]?/; @@ -304,90 +278,83 @@ function parseLiteral(str) { throw new TypeError("cannot parse '" + str + "' as literal"); } -function captureStack() { - if (Error.captureStackTrace) { - Error.captureStackTrace(this, this.constructor); - } -} -var LiquidError = /** @class */ (function () { +var LiquidError = /** @class */ (function (_super) { + __extends(LiquidError, _super); function LiquidError(err, token) { - this.input = token.input; - this.file = token.file; - this.originalError = err; - this.token = token; + var _this = _super.call(this, err.message) || this; + _this.originalError = err; + _this.token = token; + return _this; } - LiquidError.prototype.captureStackTrace = function (obj) { - this.name = obj.constructor.name; - captureStack.call(obj); + LiquidError.prototype.update = function () { var err = this.originalError; - var context = mkContext(this.input, this.token.line); + var context = mkContext(this.token); this.message = mkMessage(err.message, this.token); this.stack = this.message + '\n' + context + - '\n' + (this.stack || this.message) + - (err.stack ? '\nFrom ' + err.stack : ''); + '\n' + this.stack + '\nFrom ' + err.stack; }; return LiquidError; -}()); +}(Error)); var TokenizationError = /** @class */ (function (_super) { __extends(TokenizationError, _super); function TokenizationError(message, token) { - var _this = _super.call(this, { message: message }, token) || this; - _super.prototype.captureStackTrace.call(_this, _this); + var _this = _super.call(this, new Error(message), token) || this; + _this.name = 'TokenizationError'; + _super.prototype.update.call(_this); return _this; } return TokenizationError; }(LiquidError)); -TokenizationError.prototype = create(Error.prototype); -TokenizationError.prototype.constructor = TokenizationError; var ParseError = /** @class */ (function (_super) { __extends(ParseError, _super); function ParseError(err, token) { var _this = _super.call(this, err, token) || this; + _this.name = 'ParseError'; _this.message = err.message; - _super.prototype.captureStackTrace.call(_this, _this); + _super.prototype.update.call(_this); return _this; } return ParseError; }(LiquidError)); -ParseError.prototype = create(Error.prototype); -ParseError.prototype.constructor = ParseError; var RenderError = /** @class */ (function (_super) { __extends(RenderError, _super); function RenderError(err, tpl) { var _this = _super.call(this, err, tpl.token) || this; + _this.name = 'RenderError'; _this.message = err.message; - _super.prototype.captureStackTrace.call(_this, _this); + _super.prototype.update.call(_this); return _this; } return RenderError; }(LiquidError)); -RenderError.prototype = create(Error.prototype); -RenderError.prototype.constructor = RenderError; -var RenderBreakError = /** @class */ (function () { +var RenderBreakError = /** @class */ (function (_super) { + __extends(RenderBreakError, _super); function RenderBreakError(message) { - captureStack.call(this); - this.message = message + ''; + var _this = _super.call(this, message) || this; + _this.resolvedHTML = ''; + _this.name = 'RenderBreakError'; + _this.message = message + ''; + return _this; } return RenderBreakError; -}()); -RenderBreakError.prototype = create(Error.prototype); -RenderBreakError.prototype.constructor = RenderBreakError; -var AssertionError = /** @class */ (function () { +}(Error)); +var AssertionError = /** @class */ (function (_super) { + __extends(AssertionError, _super); function AssertionError(message) { - captureStack.call(this); - this.message = message + ''; + var _this = _super.call(this, message) || this; + _this.name = 'AssertionError'; + _this.message = message + ''; + return _this; } return AssertionError; -}()); -AssertionError.prototype = create(Error.prototype); -AssertionError.prototype.constructor = AssertionError; -function mkContext(input, targetLine) { - var lines = input.split('\n'); - var begin = Math.max(targetLine - 2, 1); - var end = Math.min(targetLine + 3, lines.length); +}(Error)); +function mkContext(token) { + var lines = token.input.split('\n'); + var begin = Math.max(token.line - 2, 1); + var end = Math.min(token.line + 3, lines.length); var context = range(begin, end + 1) .map(function (lineNumber) { - var indicator = (lineNumber === targetLine) ? '>> ' : ' '; + var indicator = (lineNumber === token.line) ? '>> ' : ' '; var num = padStart(String(lineNumber), String(end).length); var text = lines[lineNumber - 1]; return "" + indicator + num + "| " + text; @@ -396,13 +363,9 @@ function mkContext(input, targetLine) { return context; } function mkMessage(msg, token) { - msg = msg || ''; - if (token.file) { - msg += ', file:' + token.file; - } - if (token.line) { - msg += ", line:" + token.line + ", col:" + token.col; - } + if (token.file) + msg += ", file:" + token.file; + msg += ", line:" + token.line + ", col:" + token.col; return msg; } @@ -462,12 +425,13 @@ var Scope = /** @class */ (function () { function Scope(ctx, opts) { if (ctx === void 0) { ctx = {}; } this.blocks = {}; + this.groups = {}; this.blockMode = BlockMode$1.OUTPUT; this.opts = applyDefault(opts); this.contexts = [ctx || {}]; } Scope.prototype.getAll = function () { - return this.contexts.reduce(function (ctx, val) { return assign(ctx, val); }, create(null)); + return this.contexts.reduce(function (ctx, val) { return __assign(ctx, val); }, {}); }; Scope.prototype.get = function (path$$1) { var _this = this; @@ -490,6 +454,7 @@ var Scope = /** @class */ (function () { scope[key] = {}; } scope = scope[key]; + return false; }); }; Scope.prototype.unshift = function (ctx) { @@ -724,10 +689,12 @@ function trimRight(token, greedy) { } var Token = /** @class */ (function () { - function Token(raw, col, input, file, line) { + function Token(raw, input, line, col, file) { + this.type = 'notset'; this.col = col; this.line = line; this.raw = raw; + this.value = raw; this.input = input; this.file = file; } @@ -736,8 +703,8 @@ var Token = /** @class */ (function () { var HTMLToken = /** @class */ (function (_super) { __extends(HTMLToken, _super); - function HTMLToken(str, begin, input, file, line) { - var _this = _super.call(this, str, begin, input, file, line) || this; + function HTMLToken(str, input, line, col, file) { + var _this = _super.call(this, str, input, line, col, file) || this; _this.type = 'html'; _this.value = str; return _this; @@ -747,10 +714,10 @@ var HTMLToken = /** @class */ (function (_super) { var DelimitedToken = /** @class */ (function (_super) { __extends(DelimitedToken, _super); - function DelimitedToken(raw, value, pos, input, file, line) { - var _this = _super.call(this, raw, pos, input, file, line) || this; + function DelimitedToken(raw, value, input, line, pos, file) { + var _this = _super.call(this, raw, input, line, pos, file) || this; _this.trimLeft = value[0] === '-'; - _this.trimRight = value[value.length - 1] === '-'; + _this.trimRight = last(value) === '-'; _this.value = value .slice(_this.trimLeft ? 1 : 0, _this.trimRight ? -1 : value.length) .trim(); @@ -761,8 +728,8 @@ var DelimitedToken = /** @class */ (function (_super) { var TagToken = /** @class */ (function (_super) { __extends(TagToken, _super); - function TagToken(raw, value$$1, pos, input, file, line) { - var _this = _super.call(this, raw, value$$1, pos, input, file, line) || this; + function TagToken(raw, value$$1, input, line, pos, file) { + var _this = _super.call(this, raw, value$$1, input, line, pos, file) || this; _this.type = 'tag'; var match = _this.value.match(tagLine); if (!match) { @@ -777,8 +744,8 @@ var TagToken = /** @class */ (function (_super) { var OutputToken = /** @class */ (function (_super) { __extends(OutputToken, _super); - function OutputToken(raw, value, pos, input, file, line) { - var _this = _super.call(this, raw, value, pos, input, file, line) || this; + function OutputToken(raw, value, input, line, pos, file) { + var _this = _super.call(this, raw, value, input, line, pos, file) || this; _this.type = 'output'; return _this; } @@ -816,7 +783,7 @@ var Tokenizer = /** @class */ (function () { if (state === ParseState.HTML) { if (input.substr(p, outputL.length) === outputL) { if (buffer) - tokens.push(new HTMLToken(buffer, col, input, file, line)); + tokens.push(new HTMLToken(buffer, input, line, col, file)); buffer = outputL; line = curLine; col = p - lineBegin + 1; @@ -826,7 +793,7 @@ var Tokenizer = /** @class */ (function () { } else if (input.substr(p, tagL.length) === tagL) { if (buffer) - tokens.push(new HTMLToken(buffer, col, input, file, line)); + tokens.push(new HTMLToken(buffer, input, line, col, file)); buffer = tagL; line = curLine; col = p - lineBegin + 1; @@ -837,7 +804,7 @@ var Tokenizer = /** @class */ (function () { } else if (state === ParseState.OUTPUT && input.substr(p, outputR.length) === outputR) { buffer += outputR; - tokens.push(new OutputToken(buffer, buffer.slice(outputL.length, -outputR.length), col, input, file, line)); + tokens.push(new OutputToken(buffer, buffer.slice(outputL.length, -outputR.length), input, line, col, file)); p += outputR.length; buffer = ''; line = curLine; @@ -847,7 +814,7 @@ var Tokenizer = /** @class */ (function () { } else if (input.substr(p, tagR.length) === tagR) { buffer += tagR; - tokens.push(new TagToken(buffer, buffer.slice(tagL.length, -tagR.length), col, input, file, line)); + tokens.push(new TagToken(buffer, buffer.slice(tagL.length, -tagR.length), input, line, col, file)); p += tagR.length; buffer = ''; line = curLine; @@ -860,10 +827,10 @@ var Tokenizer = /** @class */ (function () { if (state !== ParseState.HTML) { var t = state === ParseState.OUTPUT ? 'output' : 'tag'; var str = buffer.length > 16 ? buffer.slice(0, 13) + '...' : buffer; - throw new TokenizationError(new Error(t + " \"" + str + "\" not closed"), new Token(buffer, col, input, file, line)); + throw new TokenizationError(t + " \"" + str + "\" not closed", new Token(buffer, input, line, col, file)); } if (buffer) - tokens.push(new HTMLToken(buffer, col, input, file, line)); + tokens.push(new HTMLToken(buffer, input, line, col, file)); whiteSpaceCtrl(tokens, this.options); return tokens; }; @@ -896,11 +863,11 @@ var Render = /** @class */ (function () { return [3 /*break*/, 5]; case 4: e_1 = _b.sent(); - if (e_1 instanceof RenderBreakError) { + if (e_1.name === 'RenderBreakError') { e_1.resolvedHTML = html; throw e_1; } - throw e_1 instanceof RenderError ? e_1 : new RenderError(e_1, tpl); + throw e_1.name === 'RenderError' ? e_1 : new RenderError(e_1, tpl); case 5: _i++; return [3 /*break*/, 1]; @@ -946,11 +913,7 @@ function evalExp(exp, scope) { if ((match = exp.match(rangeLine))) { var low = evalValue(match[1], scope); var high = evalValue(match[2], scope); - var range = []; - for (var j = low; j <= high; j++) { - range.push(j); - } - return range; + return range(low, high + 1); } return evalValue(exp, scope); } @@ -1071,8 +1034,7 @@ var Filter = /** @class */ (function () { }; Filter.prototype.render = function (value$$1, scope) { var args = this.args.map(function (arg) { return evalValue(arg, scope); }); - args.unshift(value$$1); - return this.impl.apply(null, args); + return this.impl.apply(null, [value$$1].concat(args)); }; Filter.register = function (name, filter$$1) { Filter.impls[name] = filter$$1; @@ -1087,6 +1049,7 @@ var Filter = /** @class */ (function () { var ParseStream = /** @class */ (function () { function ParseStream(tokens, parseToken) { this.handlers = {}; + this.stopRequested = false; this.tokens = tokens; this.parseToken = parseToken; } @@ -1100,6 +1063,7 @@ var ParseStream = /** @class */ (function () { h(arg); return true; } + return false; }; ParseStream.prototype.start = function () { this.trigger('start'); @@ -1107,8 +1071,7 @@ var ParseStream = /** @class */ (function () { while (!this.stopRequested && (token = this.tokens.shift())) { if (this.trigger('token', token)) continue; - if (token.type === 'tag' && - this.trigger("tag:" + token.name, token)) { + if (token.type === 'tag' && this.trigger("tag:" + token.name, token)) { continue; } var template = this.parseToken(token, this.tokens); @@ -1127,16 +1090,14 @@ var ParseStream = /** @class */ (function () { var default_1 = /** @class */ (function () { function default_1(str, strictFilters) { + this.filters = []; var match = matchValue(str); assert(match, "illegal value string: " + str); - var initial = match[0]; + this.initial = match[0]; str = str.substr(match.index + match[0].length); - var filters = []; while ((match = filter.exec(str))) { - filters.push([match[0].trim()]); + this.filters.push(new Filter(match[0].trim(), strictFilters)); } - this.initial = initial; - this.filters = filters.map(function (str) { return new Filter(str, strictFilters); }); } default_1.prototype.value = function (scope) { return this.filters.reduce(function (prev, filter$$1) { return filter$$1.render(prev, scope); }, evalExp(this.initial, scope)); @@ -1218,7 +1179,7 @@ var Parser = /** @class */ (function () { }()); var re = new RegExp("(" + identifier.source + ")\\s*=([^]*)"); -var assign$1 = { +var assign = { parse: function (token) { var match = token.args.match(re); assert(match, "illegal token " + token.raw); @@ -1233,12 +1194,6 @@ var assign$1 = { } }; -/* - * Call functions in serial until someone resolved. - * @param iterable the array to iterate with. - * @param iteratee returns a new promise. - * The iteratee is invoked with three arguments: (value, index, iterable). - */ /* * Call functions in serial until someone rejected. * @param {Array} iterable the array to iterate with. @@ -1246,7 +1201,7 @@ var assign$1 = { * The iteratee is invoked with three arguments: (value, index, iterable). */ function mapSeries(iterable, iteratee) { - var ret = Promise.resolve('init'); + var ret = Promise.resolve(0); var result = []; iterable.forEach(function (item, idx) { ret = ret @@ -1261,107 +1216,109 @@ var re$1 = new RegExp("^(" + identifier.source + ")\\s+in\\s+" + ("(?:\\s+" + hash.source + ")*") + "(?:\\s+(reversed))?" + ("(?:\\s+" + hash.source + ")*$")); -function parse(tagToken, remainTokens) { - var _this = this; - var match = re$1.exec(tagToken.args); - assert(match, "illegal tag: " + tagToken.raw); - this.variable = match[1]; - this.collection = match[2]; - this.reversed = !!match[3]; - this.templates = []; - this.elseTemplates = []; - var p; - var stream = this.liquid.parser.parseStream(remainTokens) - .on('start', function () { return (p = _this.templates); }) - .on('tag:else', function () { return (p = _this.elseTemplates); }) - .on('tag:endfor', function () { return stream.stop(); }) - .on('template', function (tpl) { return p.push(tpl); }) - .on('end', function () { - throw new Error("tag " + tagToken.raw + " not closed"); - }); - stream.start(); -} -function render(scope, hash$$1) { - return __awaiter(this, void 0, void 0, function () { - var collection, offset, limit, contexts, html, finished; +var For = { + type: 'block', + parse: function (tagToken, remainTokens) { var _this = this; - return __generator(this, function (_a) { - switch (_a.label) { - case 0: - collection = evalExp(this.collection, scope); - if (!isArray(collection)) { - if (isString(collection) && collection.length > 0) { - collection = [collection]; - } - else if (isObject(collection)) { - collection = Object.keys(collection).map(function (key) { return [key, collection[key]]; }); - } - } - if (!isArray(collection) || !collection.length) { - return [2 /*return*/, this.liquid.renderer.renderTemplates(this.elseTemplates, scope)]; - } - offset = hash$$1.offset || 0; - limit = (hash$$1.limit === undefined) ? collection.length : hash$$1.limit; - collection = collection.slice(offset, offset + limit); - if (this.reversed) - collection.reverse(); - contexts = collection.map(function (item, i) { - var ctx = {}; - ctx[_this.variable] = item; - ctx['forloop'] = { - first: i === 0, - index: i + 1, - index0: i, - last: i === collection.length - 1, - length: collection.length, - rindex: collection.length - i, - rindex0: collection.length - i - 1 - }; - return ctx; - }); - html = ''; - finished = false; - return [4 /*yield*/, mapSeries(contexts, function (context) { return __awaiter(_this, void 0, void 0, function () { - var _a, e_1; - return __generator(this, function (_b) { - switch (_b.label) { - case 0: - if (finished) - return [2 /*return*/]; - scope.push(context); - _b.label = 1; - case 1: - _b.trys.push([1, 3, , 4]); - _a = html; - return [4 /*yield*/, this.liquid.renderer.renderTemplates(this.templates, scope)]; - case 2: - html = _a + _b.sent(); - return [3 /*break*/, 4]; - case 3: - e_1 = _b.sent(); - if (e_1 instanceof RenderBreakError) { - html += e_1.resolvedHTML; - if (e_1.message === 'break') { - finished = true; - } - } - else - throw e_1; - return [3 /*break*/, 4]; - case 4: - scope.pop(context); - return [2 /*return*/]; - } - }); - }); })]; - case 1: - _a.sent(); - return [2 /*return*/, html]; - } + var match = re$1.exec(tagToken.args); + assert(match, "illegal tag: " + tagToken.raw); + this.variable = match[1]; + this.collection = match[2]; + this.reversed = !!match[3]; + this.templates = []; + this.elseTemplates = []; + var p; + var stream = this.liquid.parser.parseStream(remainTokens) + .on('start', function () { return (p = _this.templates); }) + .on('tag:else', function () { return (p = _this.elseTemplates); }) + .on('tag:endfor', function () { return stream.stop(); }) + .on('template', function (tpl) { return p.push(tpl); }) + .on('end', function () { + throw new Error("tag " + tagToken.raw + " not closed"); }); - }); -} -var For = { parse: parse, render: render }; + stream.start(); + }, + render: function (scope, hash$$1) { + return __awaiter(this, void 0, void 0, function () { + var collection, offset, limit, contexts, html, finished; + var _this = this; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: + collection = evalExp(this.collection, scope); + if (!isArray(collection)) { + if (isString(collection) && collection.length > 0) { + collection = [collection]; + } + else if (isObject(collection)) { + collection = Object.keys(collection).map(function (key) { return [key, collection[key]]; }); + } + } + if (!isArray(collection) || !collection.length) { + return [2 /*return*/, this.liquid.renderer.renderTemplates(this.elseTemplates, scope)]; + } + offset = hash$$1.offset || 0; + limit = (hash$$1.limit === undefined) ? collection.length : hash$$1.limit; + collection = collection.slice(offset, offset + limit); + if (this.reversed) + collection.reverse(); + contexts = collection.map(function (item, i) { + var ctx = {}; + ctx[_this.variable] = item; + ctx['forloop'] = { + first: i === 0, + index: i + 1, + index0: i, + last: i === collection.length - 1, + length: collection.length, + rindex: collection.length - i, + rindex0: collection.length - i - 1 + }; + return ctx; + }); + html = ''; + finished = false; + return [4 /*yield*/, mapSeries(contexts, function (context) { return __awaiter(_this, void 0, void 0, function () { + var _a, e_1; + return __generator(this, function (_b) { + switch (_b.label) { + case 0: + if (finished) + return [2 /*return*/]; + scope.push(context); + _b.label = 1; + case 1: + _b.trys.push([1, 3, , 4]); + _a = html; + return [4 /*yield*/, this.liquid.renderer.renderTemplates(this.templates, scope)]; + case 2: + html = _a + _b.sent(); + return [3 /*break*/, 4]; + case 3: + e_1 = _b.sent(); + if (e_1.name === 'RenderBreakError') { + html += e_1.resolvedHTML; + if (e_1.message === 'break') { + finished = true; + } + } + else + throw e_1; + return [3 /*break*/, 4]; + case 4: + scope.pop(context); + return [2 /*return*/]; + } + }); + }); })]; + case 1: + _a.sent(); + return [2 /*return*/, html]; + } + }); + }); + } +}; var re$2 = new RegExp("(" + identifier.source + ")"); var capture = { @@ -1548,7 +1505,7 @@ var cycle = { render: function (scope) { var group = evalValue(this.group, scope); var fingerprint = "cycle:" + group + ":" + this.candidates.join(','); - var groups = scope.opts.groups = scope.opts.groups || {}; + var groups = scope.groups; var idx = groups[fingerprint]; if (idx === undefined) { idx = groups[fingerprint] = 0; @@ -1768,6 +1725,7 @@ var tablerow = { ctx[_this.variable] = item; return ctx; }); + row = 0; html = ''; return [4 /*yield*/, mapSeries(contexts, function (context, idx) { return __awaiter(_this, void 0, void 0, function () { var col, _a; @@ -1854,7 +1812,7 @@ var Continue = { }; var tags = { - assign: assign$1, 'for': For, capture: capture, 'case': Case, comment: comment, include: include, decrement: decrement, increment: increment, cycle: cycle, 'if': If, layout: layout, block: block, raw: raw, tablerow: tablerow, unless: unless, 'break': Break, 'continue': Continue + assign: assign, 'for': For, capture: capture, 'case': Case, comment: comment, include: include, decrement: decrement, increment: increment, cycle: cycle, 'if': If, layout: layout, block: block, raw: raw, tablerow: tablerow, unless: unless, 'break': Break, 'continue': Continue }; var escapeMap = { @@ -1881,14 +1839,13 @@ var html = { 'escape': escape, 'escape_once': function (str) { return escape(unescape(str)); }, 'newline_to_br': function (v) { return v.replace(/\n/g, '
'); }, - 'strip_html': function (v) { return String(v).replace(/|||<.*?>/g, ''); } + 'strip_html': function (v) { return v.replace(/|||<.*?>/g, ''); } }; var str = { 'append': function (v, arg) { return v + arg; }, 'prepend': function (v, arg) { return arg + v; }, 'capitalize': function (str) { return String(str).charAt(0).toUpperCase() + str.slice(1); }, - 'concat': function (v, arg) { return Array.prototype.concat.call(v, arg); }, 'lstrip': function (v) { return String(v).replace(/^\s+/, ''); }, 'downcase': function (v) { return v.toLowerCase(); }, 'upcase': function (str) { return String(str).toUpperCase(); }, @@ -1903,19 +1860,19 @@ var str = { 'strip': function (v) { return String(v).trim(); }, 'strip_newlines': function (v) { return String(v).replace(/\n/g, ''); }, 'truncate': function (v, l, o) { + if (l === void 0) { l = 50; } + if (o === void 0) { o = '...'; } v = String(v); - o = (o === undefined) ? '...' : o; - l = l || 16; if (v.length <= l) return v; return v.substr(0, l - o.length) + o; }, 'truncatewords': function (v, l, o) { - if (o === undefined) - o = '...'; - var arr = v.split(' '); + if (l === void 0) { l = 15; } + if (o === void 0) { o = '...'; } + var arr = v.split(/\s+/); var ret = arr.slice(0, l).join(' '); - if (arr.length > l) + if (arr.length >= l) ret += o; return ret; } @@ -1929,7 +1886,8 @@ var math = { 'minus': bindFixed(function (v, arg) { return v - arg; }), 'modulo': bindFixed(function (v, arg) { return v % arg; }), 'round': function (v, arg) { - var amp = Math.pow(10, arg || 0); + if (arg === void 0) { arg = 0; } + var amp = Math.pow(10, arg); return Math.round(v * amp) / amp; }, 'plus': bindFixed(function (v, arg) { return Number(v) + Number(arg); }), @@ -1959,6 +1917,7 @@ var array = { 'reverse': function (v) { return v.reverse(); }, 'sort': function (v, arg) { return v.sort(arg); }, 'size': function (v) { return v.length; }, + 'concat': function (v, arg) { return Array.prototype.concat.call(v, arg); }, 'slice': function (v, begin, length) { if (length === undefined) length = 1; @@ -1967,10 +1926,9 @@ var array = { 'uniq': function (arr) { var u = {}; return (arr || []).filter(function (val) { - if (u.hasOwnProperty(val)) { + if (u.hasOwnProperty(String(val))) return false; - } - u[val] = true; + u[String(val)] = true; return true; }); } @@ -2142,7 +2100,7 @@ function strftime (d, format) { // Add the format code var ch = results[0].charAt(1); var func = formatCodes[ch]; - output += func ? func.call(this, d) : '%' + ch; + output += func ? func(d) : '%' + ch; } } @@ -2172,10 +2130,8 @@ var Liquid = /** @class */ (function () { function Liquid(opts) { if (opts === void 0) { opts = {}; } var _this = this; + this.cache = {}; this.options = applyDefault(normalize(opts)); - if (this.options.cache) { - this.cache = {}; - } this.parser = new Parser(this); this.renderer = new Render(); this.tokenizer = new Tokenizer(this.options); diff --git a/dist/liquid.common.js.map b/dist/liquid.common.js.map index e2222f43c..364d1fa02 100644 --- a/dist/liquid.common.js.map +++ b/dist/liquid.common.js.map @@ -1 +1 @@ -{"version":3,"file":"liquid.common.js","sources":["../src/util/underscore.ts","../src/parser/lexical.ts","../src/util/error.ts","../src/util/assert.ts","../src/liquid-options.ts","../src/scope/block-mode.ts","../src/scope/scope.ts","../src/scope/scopes.ts","../src/fs/node.ts","../src/parser/whitespace-ctrl.ts","../src/parser/token.ts","../src/parser/html-token.ts","../src/parser/delimited-token.ts","../src/parser/tag-token.ts","../src/parser/output-token.ts","../src/parser/tokenizer.ts","../src/render/render.ts","../src/render/syntax.ts","../src/template/tag/hash.ts","../src/template/template.ts","../src/template/tag/tag.ts","../src/template/filter.ts","../src/parser/parse-stream.ts","../src/template/value.ts","../src/template/output.ts","../src/template/html.ts","../src/parser/parser.ts","../src/builtin/tags/assign.ts","../src/util/promise.ts","../src/builtin/tags/for.ts","../src/builtin/tags/capture.ts","../src/builtin/tags/case.ts","../src/builtin/tags/comment.ts","../src/builtin/tags/include.ts","../src/builtin/tags/decrement.ts","../src/builtin/tags/cycle.ts","../src/builtin/tags/if.ts","../src/builtin/tags/increment.ts","../src/builtin/tags/layout.ts","../src/builtin/tags/block.ts","../src/builtin/tags/raw.ts","../src/builtin/tags/tablerow.ts","../src/builtin/tags/unless.ts","../src/builtin/tags/break.ts","../src/builtin/tags/continue.ts","../src/builtin/tags/index.ts","../src/builtin/filters/html.ts","../src/builtin/filters/string.ts","../src/builtin/filters/math.ts","../src/builtin/filters/url.ts","../src/builtin/filters/array.ts","../src/util/strftime.ts","../src/builtin/filters/date.ts","../src/builtin/filters/object.ts","../src/builtin/filters/index.ts","../src/liquid.ts"],"sourcesContent":["const toStr = Object.prototype.toString\nconst arrToStr = Array.prototype.toString\n\n/*\n * Checks if value is classified as a String primitive or object.\n * @param {any} value The value to check.\n * @return {Boolean} Returns true if value is a string, else false.\n */\nexport function isString (value: any) {\n return toStr.call(value) === '[object String]'\n}\n\nexport function isFunction (value: any) {\n return typeof value === 'function'\n}\n\nexport function promisify (fn) {\n return function (...args) {\n return new Promise((resolve, reject) => {\n fn(...args, (err, result) => {\n err ? reject(err) : resolve(result)\n })\n })\n }\n}\n\nexport function stringify (value: any): string {\n if (isNil(value)) return ''\n if (isFunction(value.to_liquid)) return stringify(value.to_liquid())\n if (isFunction(value.toLiquid)) return stringify(value.toLiquid())\n if (isFunction(value.to_s)) return value.to_s()\n if ([toStr, arrToStr].indexOf(value.toString) > -1) return defaultToString(value)\n if (isFunction(value.toString)) return value.toString()\n return toStr.call(value)\n}\n\nfunction defaultToString (value: any): string {\n const cache = []\n return JSON.stringify(value, (key, value) => {\n if (isObject(value)) {\n if (cache.indexOf(value) !== -1) {\n return\n }\n cache.push(value)\n }\n return value\n })\n}\n\nexport function create (proto: T1): T2 {\n return Object.create(proto)\n}\n\nexport function isNil (value: any): boolean {\n return value === null || value === undefined\n}\n\nexport function isArray (value: any): boolean {\n // be compatible with IE 8\n return toStr.call(value) === '[object Array]'\n}\n\nexport function isError (value: any): boolean {\n const signature = toStr.call(value)\n // [object XXXError]\n return signature.substr(-6, 5) === 'Error' ||\n (typeof value.message === 'string' && typeof value.name === 'string')\n}\n\n/*\n * Iterates over own enumerable string keyed properties of an object and invokes iteratee for each property.\n * The iteratee is invoked with three arguments: (value, key, object).\n * Iteratee functions may exit iteration early by explicitly returning false.\n * @param {Object} object The object to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @return {Object} Returns object.\n */\nexport function forOwn (object, iteratee: ((val: any, key: string, obj: object) => boolean | void)) {\n object = object || {}\n for (const k in object) {\n if (object.hasOwnProperty(k)) {\n if (iteratee(object[k], k, object) === false) break\n }\n }\n return object\n}\n\n/*\n * Assigns own enumerable string keyed properties of source objects to the destination object.\n * Source objects are applied from left to right.\n * Subsequent sources overwrite property assignments of previous sources.\n *\n * Note: This method mutates object and is loosely based on Object.assign.\n *\n * @param {Object} object The destination object.\n * @param {...Object} sources The source objects.\n * @return {Object} Returns object.\n */\nexport function assign (obj: object, ...srcs: object[]): object {\n obj = isObject(obj) ? obj : {}\n srcs.forEach(src => binaryAssign(obj, src))\n return obj\n}\n\nfunction binaryAssign (target: object, src: object): object {\n for (const key in src) if (src.hasOwnProperty(key)) target[key] = src[key]\n return target\n}\n\nexport function last (arr: any[]): any {\n return arr[arr.length - 1]\n}\n\nexport function uniq (arr: any[]): any[] {\n const u = {}\n const a = []\n for (let i = 0, l = arr.length; i < l; ++i) {\n if (u.hasOwnProperty(arr[i])) {\n continue\n }\n a.push(arr[i])\n u[arr[i]] = 1\n }\n return a\n}\n\n/*\n * Checks if value is the language type of Object.\n * (e.g. arrays, functions, objects, regexes, new Number(0), and new String(''))\n * @param {any} value The value to check.\n * @return {Boolean} Returns true if value is an object, else false.\n */\nexport function isObject (value: any): boolean {\n const type = typeof value\n return value !== null && (type === 'object' || type === 'function')\n}\n\n/*\n * A function to create flexibly-numbered lists of integers,\n * handy for each and map loops. start, if omitted, defaults to 0; step defaults to 1.\n * Returns a list of integers from start (inclusive) to stop (exclusive),\n * incremented (or decremented) by step, exclusive.\n * Note that ranges that stop before they start are considered to be zero-length instead of\n * negative — if you'd like a negative range, use a negative step.\n */\nexport function range (start: number, stop?: number, step?: number) {\n if (arguments.length === 1) {\n stop = start\n start = 0\n }\n step = step || 1\n\n const arr = []\n for (let i = start; i < stop; i += step) {\n arr.push(i)\n }\n return arr\n}\n\nexport function padStart (str: any, length: number, ch: string = ' ') {\n str = String(str)\n let n = length - str.length\n while (n-- > 0) str = ch + str\n return str\n}\n","// quote related\nconst singleQuoted = /'[^']*'/\nconst doubleQuoted = /\"[^\"]*\"/\nexport const quoted = new RegExp(`${singleQuoted.source}|${doubleQuoted.source}`)\nexport const quoteBalanced = new RegExp(`(?:${quoted.source}|[^'\"])*`)\n\n// basic types\nexport const integer = /-?\\d+/\nexport const number = /-?\\d+\\.?\\d*|\\.?\\d+/\nexport const bool = /true|false/\n\n// property access\nexport const identifier = /[\\w-]+[?]?/\nexport const subscript = new RegExp(`\\\\[(?:${quoted.source}|[\\\\w-\\\\.]+)\\\\]`)\nexport const literal = new RegExp(`(?:${quoted.source}|${bool.source}|${number.source})`)\nexport const variable = new RegExp(`${identifier.source}(?:\\\\.${identifier.source}|${subscript.source})*`)\n\n// range related\nexport const rangeLimit = new RegExp(`(?:${variable.source}|${number.source})`)\nexport const range = new RegExp(`\\\\(${rangeLimit.source}\\\\.\\\\.${rangeLimit.source}\\\\)`)\nexport const rangeCapture = new RegExp(`\\\\((${rangeLimit.source})\\\\.\\\\.(${rangeLimit.source})\\\\)`)\n\nexport const value = new RegExp(`(?:${variable.source}|${literal.source}|${range.source})`)\n\n// hash related\nexport const hash = new RegExp(`(?:${identifier.source})\\\\s*:\\\\s*(?:${value.source})`)\nexport const hashCapture = new RegExp(`(${identifier.source})\\\\s*:\\\\s*(${value.source})`, 'g')\n\n// full match\nexport const tagLine = new RegExp(`^\\\\s*(${identifier.source})\\\\s*([\\\\s\\\\S]*?)\\\\s*$`)\nexport const literalLine = new RegExp(`^${literal.source}$`, 'i')\nexport const variableLine = new RegExp(`^${variable.source}$`)\nexport const numberLine = new RegExp(`^${number.source}$`)\nexport const boolLine = new RegExp(`^${bool.source}$`, 'i')\nexport const quotedLine = new RegExp(`^${quoted.source}$`)\nexport const rangeLine = new RegExp(`^${rangeCapture.source}$`)\nexport const integerLine = new RegExp(`^${integer.source}$`)\n\n// filter related\nexport const valueDeclaration = new RegExp(`(?:${identifier.source}\\\\s*:\\\\s*)?${value.source}`)\nexport const valueList = new RegExp(`${valueDeclaration.source}(\\\\s*,\\\\s*${valueDeclaration.source})*`)\nexport const filter = new RegExp(`${identifier.source}(?:\\\\s*:\\\\s*${valueList.source})?`, 'g')\nexport const filterCapture = new RegExp(`(${identifier.source})(?:\\\\s*:\\\\s*(${valueList.source}))?`)\nexport const filterLine = new RegExp(`^${filterCapture.source}$`)\n\nexport const operators = [\n /\\s+or\\s+/,\n /\\s+and\\s+/,\n /==|!=|<=|>=|<|>|\\s+contains\\s+/\n]\n\nexport function isInteger (str) {\n return integerLine.test(str)\n}\n\nexport function isLiteral (str) {\n return literalLine.test(str)\n}\n\nexport function isRange (str) {\n return rangeLine.test(str)\n}\n\nexport function isVariable (str) {\n return variableLine.test(str)\n}\n\nexport function matchValue (str) {\n return value.exec(str)\n}\n\nexport function parseLiteral (str) {\n let res = str.match(numberLine)\n if (res) {\n return Number(str)\n }\n res = str.match(boolLine)\n if (res) {\n return str.toLowerCase() === 'true'\n }\n res = str.match(quotedLine)\n if (res) {\n return str.slice(1, -1)\n }\n throw new TypeError(`cannot parse '${str}' as literal`)\n}\n","import * as _ from './underscore'\nimport Token from 'src/parser/token'\n\nfunction captureStack () {\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, this.constructor)\n }\n}\n\nabstract class LiquidError {\n name: string\n message: string\n stack: string\n private file: string\n private input: string\n private token: Token\n private originalError: Error\n constructor (err, token) {\n this.input = token.input\n this.file = token.file\n this.originalError = err\n this.token = token\n }\n captureStackTrace (obj) {\n this.name = obj.constructor.name\n\n captureStack.call(obj)\n const err = this.originalError\n const context = mkContext(this.input, this.token.line)\n this.message = mkMessage(err.message, this.token)\n this.stack = this.message + '\\n' + context +\n '\\n' + (this.stack || this.message) +\n (err.stack ? '\\nFrom ' + err.stack : '')\n }\n}\n\nexport class TokenizationError extends LiquidError {\n constructor (message, token) {\n super({ message }, token)\n super.captureStackTrace(this)\n }\n}\nTokenizationError.prototype = _.create(Error.prototype) as any\nTokenizationError.prototype.constructor = TokenizationError\n\nexport class ParseError extends LiquidError {\n constructor (err, token) {\n super(err, token)\n this.message = err.message\n super.captureStackTrace(this)\n }\n}\nParseError.prototype = _.create(Error.prototype) as any\nParseError.prototype.constructor = ParseError\n\nexport class RenderError extends LiquidError {\n constructor (err, tpl) {\n super(err, tpl.token)\n this.message = err.message\n super.captureStackTrace(this)\n }\n}\nRenderError.prototype = _.create(Error.prototype) as any\nRenderError.prototype.constructor = RenderError\n\nexport class RenderBreakError {\n message: string\n resolvedHTML: string\n constructor (message) {\n captureStack.call(this)\n this.message = message + ''\n }\n}\nRenderBreakError.prototype = _.create(Error.prototype) as any\nRenderBreakError.prototype.constructor = RenderBreakError\n\nexport class AssertionError {\n message: string\n constructor (message) {\n captureStack.call(this)\n this.message = message + ''\n }\n}\nAssertionError.prototype = _.create(Error.prototype) as any\nAssertionError.prototype.constructor = AssertionError\n\nfunction mkContext (input, targetLine) {\n const lines = input.split('\\n')\n const begin = Math.max(targetLine - 2, 1)\n const end = Math.min(targetLine + 3, lines.length)\n\n const context = _\n .range(begin, end + 1)\n .map(lineNumber => {\n const indicator = (lineNumber === targetLine) ? '>> ' : ' '\n const num = _.padStart(String(lineNumber), String(end).length)\n const text = lines[lineNumber - 1]\n return `${indicator}${num}| ${text}`\n })\n .join('\\n')\n\n return context\n}\n\nfunction mkMessage (msg, token) {\n msg = msg || ''\n if (token.file) {\n msg += ', file:' + token.file\n }\n if (token.line) {\n msg += `, line:${token.line}, col:${token.col}`\n }\n return msg\n}\n","import { AssertionError } from './error'\n\nexport default function (predicate: any, message?: string) {\n if (!predicate) {\n message = message || `expect ${predicate} to be true`\n throw new AssertionError(message)\n }\n}\n","/* eslint-disable camelcase */\n\nimport * as _ from './util/underscore'\n\nexport interface LiquidOptions {\n /** `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 `[\".\"]` */\n root?: string | string[]\n /** `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 `\"\"`. */\n extname?: string\n /** `cache` indicates whether or not to cache resolved templates. Defaults to `false`. */\n cache?: boolean\n /** `dynamicPartials`: if set, treat `` parameter in `{%include filepath %}`, `{%layout filepath%}` as a variable, otherwise as a literal value. Defaults to `true`. */\n dynamicPartials?: boolean\n /** `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`. */\n strict_filters?: boolean\n /** `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`. */\n strict_variables?: boolean\n /** `trim_tag_right` is used to strip blank characters (including ` `, `\\t`, and `\\r`) from the right of tags (`{% %}`) until `\\n` (inclusive). Defaults to `false`. */\n trim_tag_right?: boolean\n /** `trim_tag_left` is similar to `trim_tag_right`, whereas the `\\n` is exclusive. Defaults to `false`. See Whitespace Control for details. */\n trim_tag_left?: boolean\n /** ``trim_output_right` is used to strip blank characters (including ` `, `\\t`, and `\\r`) from the right of values (`{{ }}`) until `\\n` (inclusive). Defaults to `false`. */\n trim_output_right?: boolean\n /** `trim_output_left` is similar to `trim_output_right`, whereas the `\\n` is exclusive. Defaults to `false`. See Whitespace Control for details. */\n trim_output_left?: boolean\n /** `tag_delimiter_left` and `tag_delimiter_right` are used to override the delimiter for liquid tags **/\n tag_delimiter_left?: string,\n tag_delimiter_right?: string,\n /** `output_delimiter_left` and `output_delimiter_right` are used to override the delimiter for liquid outputs **/\n output_delimiter_left?: string,\n output_delimiter_right?: string,\n /** `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`. */\n greedy?: boolean\n}\n\nexport interface NormalizedOptions extends LiquidOptions {\n root?: string[]\n}\n\nexport interface NormalizedFullOptions extends NormalizedOptions {\n root: string[]\n extname: string\n cache: boolean\n dynamicPartials: boolean\n strict_filters: boolean\n strict_variables: boolean\n trim_tag_right: boolean\n trim_tag_left: boolean\n trim_output_right: boolean\n trim_output_left: boolean\n greedy: boolean\n}\n\nconst defaultOptions: NormalizedFullOptions = {\n root: ['.'],\n cache: false,\n extname: '',\n dynamicPartials: true,\n trim_tag_right: false,\n trim_tag_left: false,\n trim_output_right: false,\n trim_output_left: false,\n greedy: true,\n tag_delimiter_left: '{%',\n tag_delimiter_right: '%}',\n output_delimiter_left: '{{',\n output_delimiter_right: '}}',\n strict_filters: false,\n strict_variables: false\n}\n\nexport function normalize (options: LiquidOptions): NormalizedOptions {\n options = options || {}\n if (options.hasOwnProperty('root')) {\n options.root = normalizeStringArray(options.root)\n }\n return options as NormalizedOptions\n}\n\nexport function applyDefault (options: NormalizedOptions): NormalizedFullOptions {\n return { ...defaultOptions, ...options }\n}\n\nfunction normalizeStringArray (value: string | string[]): string[] {\n if (_.isArray(value)) return value as string[]\n if (_.isString(value)) return [value as string]\n return []\n}\n","enum BlockMode {\n /* store rendered html into blocks */\n OUTPUT,\n /* output rendered html directly */\n STORE\n}\n\nexport default BlockMode\n","import * as _ from '../util/underscore'\nimport * as lexical from '../parser/lexical'\nimport assert from '../util/assert'\nimport { NormalizedFullOptions, applyDefault } from '../liquid-options'\nimport BlockMode from './block-mode'\n\nexport default class Scope {\n opts: NormalizedFullOptions\n contexts: Array\n blocks: object = {}\n blockMode: BlockMode = BlockMode.OUTPUT\n constructor (ctx: object = {}, opts?: NormalizedFullOptions) {\n this.opts = applyDefault(opts)\n this.contexts = [ctx || {}]\n }\n getAll () {\n return this.contexts.reduce((ctx, val) => _.assign(ctx, val), _.create(null))\n }\n get (path: string): any {\n const paths = this.propertyAccessSeq(path)\n const scope = this.findContextFor(paths[0]) || _.last(this.contexts)\n return paths.reduce((value, key) => this.readProperty(value, key), scope)\n }\n set (path: string, v: any): void {\n const paths = this.propertyAccessSeq(path)\n let scope = this.findContextFor(paths[0]) || _.last(this.contexts)\n paths.some((key, i) => {\n if (!_.isObject(scope)) {\n return true\n }\n if (i === paths.length - 1) {\n scope[key] = v\n return true\n }\n if (undefined === scope[key]) {\n scope[key] = {}\n }\n scope = scope[key]\n })\n }\n unshift (ctx: object) {\n return this.contexts.unshift(ctx)\n }\n push (ctx: object) {\n return this.contexts.push(ctx)\n }\n pop (ctx?: object): object {\n if (!arguments.length) {\n return this.contexts.pop()\n }\n const i = this.contexts.findIndex(scope => scope === ctx)\n if (i === -1) {\n throw new TypeError('scope not found, cannot pop')\n }\n return this.contexts.splice(i, 1)[0]\n }\n findContextFor (key: string, filter: ((conttext: object) => boolean) = () => true) {\n for (let i = this.contexts.length - 1; i >= 0; i--) {\n const candidate = this.contexts[i]\n if (!filter(candidate)) continue\n if (key in candidate) {\n return candidate\n }\n }\n return null\n }\n readProperty (obj, key) {\n let val\n if (_.isNil(obj)) {\n val = undefined\n } else {\n obj = toLiquid(obj)\n val = key === 'size' ? readSize(obj) : obj[key]\n if (_.isFunction(obj.liquid_method_missing)) {\n val = obj.liquid_method_missing(key)\n }\n }\n if (_.isNil(val) && this.opts.strict_variables) {\n throw new TypeError(`undefined variable: ${key}`)\n }\n return val\n }\n\n /*\n * Parse property access sequence from access string\n * @example\n * accessSeq(\"foo.bar\") // ['foo', 'bar']\n * accessSeq(\"foo['bar']\") // ['foo', 'bar']\n * accessSeq(\"foo['b]r']\") // ['foo', 'b]r']\n * accessSeq(\"foo[bar.coo]\") // ['foo', 'bar'], for bar.coo == 'bar'\n */\n propertyAccessSeq (str) {\n str = String(str)\n const seq = []\n let name = ''\n let j\n let i = 0\n while (i < str.length) {\n switch (str[i]) {\n case '[':\n push()\n\n const delemiter = str[i + 1]\n if (/['\"]/.test(delemiter)) { // foo[\"bar\"]\n j = str.indexOf(delemiter, i + 2)\n assert(j !== -1, `unbalanced ${delemiter}: ${str}`)\n name = str.slice(i + 2, j)\n push()\n i = j + 2\n } else { // foo[bar.coo]\n j = matchRightBracket(str, i + 1)\n assert(j !== -1, `unbalanced []: ${str}`)\n name = str.slice(i + 1, j)\n if (!lexical.isInteger(name)) { // foo[bar] vs. foo[1]\n name = String(this.get(name))\n }\n push()\n i = j + 1\n }\n break\n case '.':// foo.bar, foo[0].bar\n push()\n i++\n break\n default:// foo.bar\n name += str[i]\n i++\n }\n }\n push()\n\n if (!seq.length) {\n throw new TypeError(`invalid path:\"${str}\"`)\n }\n return seq\n\n function push () {\n if (name.length) seq.push(name)\n name = ''\n }\n }\n}\n\nfunction toLiquid (obj) {\n if (_.isFunction(obj.to_liquid)) {\n return obj.to_liquid()\n }\n if (_.isFunction(obj.toLiquid)) {\n return obj.toLiquid()\n }\n return obj\n}\n\nfunction readSize (obj) {\n if (!_.isNil(obj.size)) return obj.size\n if (_.isArray(obj) || _.isString(obj)) return obj.length\n return obj.size\n}\n\nfunction matchRightBracket (str, begin) {\n let stack = 1 // count of '[' - count of ']'\n for (let i = begin; i < str.length; i++) {\n if (str[i] === '[') {\n stack++\n }\n if (str[i] === ']') {\n stack--\n if (stack === 0) {\n return i\n }\n }\n }\n return -1\n}\n","export class CaptureScope {}\nexport class AssignScope {}\nexport class IncrementScope {}\nexport class DecrementScope {}\n","import * as _ from '../util/underscore'\nimport { resolve, extname } from 'path'\nimport { stat, readFile } from 'fs'\nimport IFS from './ifs'\n\nconst statAsync = _.promisify(stat) as (filepath: string) => Promise\nconst readFileAsync = _.promisify(readFile) as (filepath: string, encoding: string) => Promise\n\nconst fs: IFS = {\n exists: filepath => {\n return statAsync(filepath).then(() => true).catch(() => false)\n },\n readFile: filepath => {\n return readFileAsync(filepath, 'utf8')\n },\n resolve: (root: string, file: string, ext: string) => {\n if (!extname(file)) file += ext\n return resolve(root, file)\n }\n}\n\nexport default fs\n","import DelimitedToken from 'src/parser/delimited-token'\nimport Token from 'src/parser/token'\nimport TagToken from 'src/parser/tag-token'\nimport { NormalizedFullOptions } from 'src/liquid-options'\n\nexport default function whiteSpaceCtrl (tokens: Token[], options: NormalizedFullOptions) {\n options = { greedy: true, ...options }\n let inRaw = false\n\n tokens.forEach((token: Token, i: number) => {\n if (shouldTrimLeft(token as DelimitedToken, inRaw, options)) {\n trimLeft(tokens[i - 1], options.greedy)\n }\n\n if (token.type === 'tag' && (token as TagToken).name === 'raw') inRaw = true\n if (token.type === 'tag' && (token as TagToken).name === 'endraw') inRaw = false\n\n if (shouldTrimRight(token as DelimitedToken, inRaw, options)) {\n trimRight(tokens[i + 1], options.greedy)\n }\n })\n}\n\nfunction shouldTrimLeft (token: DelimitedToken, inRaw: boolean, options) {\n if (inRaw) return false\n if (token.type === 'tag') return token.trimLeft || options.trim_tag_left\n if (token.type === 'output') return token.trimLeft || options.trim_output_left\n}\n\nfunction shouldTrimRight (token: DelimitedToken, inRaw: boolean, options) {\n if (inRaw) return false\n if (token.type === 'tag') return token.trimRight || options.trim_tag_right\n if (token.type === 'output') return token.trimRight || options.trim_output_right\n}\n\nfunction trimLeft (token: Token, greedy: boolean) {\n if (!token || token.type !== 'html') return\n\n const rLeft = greedy ? /\\s+$/g : /[\\t\\r ]*$/g\n token.value = token.value.replace(rLeft, '')\n}\n\nfunction trimRight (token: Token, greedy: boolean) {\n if (!token || token.type !== 'html') return\n\n const rRight = greedy ? /^\\s+/g : /^[\\t\\r ]*\\n?/g\n token.value = token.value.replace(rRight, '')\n}\n","export default class Token {\n type: string\n line: number\n col: number\n raw: string\n input: string\n file: string\n value: string\n constructor (raw, col, input, file, line) {\n this.col = col\n this.line = line\n this.raw = raw\n this.input = input\n this.file = file\n }\n}\n","import Token from './token'\n\nexport default class HTMLToken extends Token {\n constructor (str, begin, input, file, line) {\n super(str, begin, input, file, line)\n this.type = 'html'\n this.value = str\n }\n}\n","import Token from './token'\n\nexport default class DelimitedToken extends Token {\n trimLeft: boolean\n trimRight: boolean\n constructor (raw, value, pos, input, file, line) {\n super(raw, pos, input, file, line)\n this.trimLeft = value[0] === '-'\n this.trimRight = value[value.length - 1] === '-'\n this.value = value\n .slice(\n this.trimLeft ? 1 : 0,\n this.trimRight ? -1 : value.length\n )\n .trim()\n }\n}\n","import DelimitedToken from './delimited-token'\nimport { TokenizationError } from 'src/util/error'\nimport * as lexical from './lexical'\n\nexport default class TagToken extends DelimitedToken {\n name: string\n args: string\n constructor (raw, value, pos, input, file, line) {\n super(raw, value, pos, input, file, line)\n this.type = 'tag'\n const match = this.value.match(lexical.tagLine)\n if (!match) {\n throw new TokenizationError(`illegal tag syntax`, this)\n }\n this.name = match[1]\n this.args = match[2]\n }\n}\n","import DelimitedToken from './delimited-token'\n\nexport default class OutputToken extends DelimitedToken {\n constructor (raw, value, pos, input, file, line) {\n super(raw, value, pos, input, file, line)\n this.type = 'output'\n }\n}\n","import whiteSpaceCtrl from './whitespace-ctrl'\nimport HTMLToken from './html-token'\nimport TagToken from './tag-token'\nimport Token from './token'\nimport OutputToken from './output-token'\nimport { TokenizationError } from 'src/util/error'\nimport { NormalizedFullOptions, applyDefault } from '../liquid-options'\n\nenum ParseState { HTML, OUTPUT, TAG }\n\nexport default class Tokenizer {\n options: NormalizedFullOptions\n constructor (options?: NormalizedFullOptions) {\n this.options = applyDefault(options)\n }\n tokenize (input: string, file?: string) {\n const tokens = []\n const tagL = this.options.tag_delimiter_left\n const tagR = this.options.tag_delimiter_right\n const outputL = this.options.output_delimiter_left\n const outputR = this.options.output_delimiter_right\n let p = 0\n let curLine = 1\n let state = ParseState.HTML\n let buffer = ''\n let lineBegin = 0\n let line = 1\n let col = 1\n\n while (p < input.length) {\n if (input[p] === '\\n') {\n curLine++\n lineBegin = p + 1\n }\n if (state === ParseState.HTML) {\n if (input.substr(p, outputL.length) === outputL) {\n if (buffer) tokens.push(new HTMLToken(buffer, col, input, file, line))\n buffer = outputL\n line = curLine\n col = p - lineBegin + 1\n p += outputL.length\n state = ParseState.OUTPUT\n continue\n } else if (input.substr(p, tagL.length) === tagL) {\n if (buffer) tokens.push(new HTMLToken(buffer, col, input, file, line))\n buffer = tagL\n line = curLine\n col = p - lineBegin + 1\n p += tagL.length\n state = ParseState.TAG\n continue\n }\n } else if (state === ParseState.OUTPUT && input.substr(p, outputR.length) === outputR) {\n buffer += outputR\n tokens.push(new OutputToken(buffer, buffer.slice(outputL.length, -outputR.length), col, input, file, line))\n p += outputR.length\n buffer = ''\n line = curLine\n col = p - lineBegin + 1\n state = ParseState.HTML\n continue\n } else if (input.substr(p, tagR.length) === tagR) {\n buffer += tagR\n tokens.push(new TagToken(buffer, buffer.slice(tagL.length, -tagR.length), col, input, file, line))\n p += tagR.length\n buffer = ''\n line = curLine\n col = p - lineBegin + 1\n state = ParseState.HTML\n continue\n }\n buffer += input[p++]\n }\n if (state !== ParseState.HTML) {\n const t = state === ParseState.OUTPUT ? 'output' : 'tag'\n const str = buffer.length > 16 ? buffer.slice(0, 13) + '...' : buffer\n throw new TokenizationError(\n new Error(`${t} \"${str}\" not closed`),\n new Token(buffer, col, input, file, line)\n )\n }\n if (buffer) tokens.push(new HTMLToken(buffer, col, input, file, line))\n\n whiteSpaceCtrl(tokens, this.options)\n return tokens\n }\n}\n","import { RenderBreakError, RenderError } from 'src/util/error'\nimport assert from 'src/util/assert'\n\nexport default class Render {\n async renderTemplates (templates, scope) {\n assert(scope, 'unable to evalTemplates: scope undefined')\n\n let html = ''\n for (const tpl of templates) {\n try {\n html += await tpl.render(scope)\n } catch (e) {\n if (e instanceof RenderBreakError) {\n e.resolvedHTML = html\n throw e\n }\n throw e instanceof RenderError ? e : new RenderError(e, tpl)\n }\n }\n return html\n }\n}\n","import * as lexical from '../parser/lexical'\nimport assert from '../util/assert'\n\nconst operators = {\n '==': (l, r) => l === r,\n '!=': (l, r) => l !== r,\n '>': (l, r) => l !== null && r !== null && l > r,\n '<': (l, r) => l !== null && r !== null && l < r,\n '>=': (l, r) => l !== null && r !== null && l >= r,\n '<=': (l, r) => l !== null && r !== null && l <= r,\n 'contains': (l, r) => {\n if (!l) return false\n if (typeof l.indexOf !== 'function') return false\n return l.indexOf(r) > -1\n },\n 'and': (l, r) => isTruthy(l) && isTruthy(r),\n 'or': (l, r) => isTruthy(l) || isTruthy(r)\n}\n\nexport function evalExp (exp, scope) {\n assert(scope, 'unable to evalExp: scope undefined')\n const operatorREs = lexical.operators\n let match\n for (let i = 0; i < operatorREs.length; i++) {\n const operatorRE = operatorREs[i]\n const expRE = new RegExp(`^(${lexical.quoteBalanced.source})(${operatorRE.source})(${lexical.quoteBalanced.source})$`)\n if ((match = exp.match(expRE))) {\n const l = evalExp(match[1], scope)\n const op = operators[match[2].trim()]\n const r = evalExp(match[3], scope)\n return op(l, r)\n }\n }\n\n if ((match = exp.match(lexical.rangeLine))) {\n const low = evalValue(match[1], scope)\n const high = evalValue(match[2], scope)\n const range = []\n for (let j = low; j <= high; j++) {\n range.push(j)\n }\n return range\n }\n\n return evalValue(exp, scope)\n}\n\nexport function evalValue (str, scope) {\n str = str && str.trim()\n if (!str) return undefined\n\n if (lexical.isLiteral(str)) {\n return lexical.parseLiteral(str)\n }\n if (lexical.isVariable(str)) {\n return scope.get(str)\n }\n throw new TypeError(`cannot eval '${str}' as value`)\n}\n\nexport function isTruthy (val) {\n return !isFalsy(val)\n}\n\nexport function isFalsy (val) {\n return val === false || undefined === val || val === null\n}\n","import { hashCapture } from 'src/parser/lexical'\nimport { evalValue } from 'src/render/syntax'\n\n/**\n * Key-Value Pairs Representing Tag Arguments\n * Example:\n * For the markup `{% include 'head.html' foo='bar' %}`,\n * hash['foo'] === 'bar'\n */\nexport default class Hash {\n [key: string]: any\n constructor (markup, scope) {\n let match\n hashCapture.lastIndex = 0\n while ((match = hashCapture.exec(markup))) {\n const k = match[1]\n const v = match[2]\n this[k] = evalValue(v, scope)\n }\n }\n}\n","import Token from 'src/parser/token'\n\nexport default class Template {\n token: Token;\n constructor (token) {\n this.token = token\n }\n}\n","import { create, stringify } from 'src/util/underscore'\nimport assert from 'src/util/assert'\nimport Scope from 'src/scope/scope'\nimport ITagImpl from './itag-impl'\nimport ITagImplOptions from './itag-impl-options'\nimport Liquid from 'src/liquid'\nimport Hash from './hash'\nimport Template from 'src/template/template'\nimport ITemplate from 'src/template/itemplate'\nimport TagToken from 'src/parser/tag-token'\nimport Token from 'src/parser/token'\n\nexport default class Tag extends Template implements ITemplate {\n name: string\n token: TagToken\n private impl: ITagImpl\n static impls: { [key: string]: ITagImplOptions } = {}\n\n constructor (token: TagToken, tokens: Token[], liquid: Liquid) {\n super(token)\n this.name = token.name\n\n const impl = Tag.impls[token.name]\n assert(impl, `tag ${token.name} not found`)\n this.impl = create(impl)\n this.impl.liquid = liquid\n if (this.impl.parse) {\n this.impl.parse(token, tokens)\n }\n }\n async render (scope: Scope) {\n const hash = new Hash(this.token.args, scope)\n const impl = this.impl\n if (typeof impl.render !== 'function') {\n return ''\n }\n const html = await impl.render(scope, hash)\n return stringify(html)\n }\n static register (name: string, tag: ITagImplOptions) {\n Tag.impls[name] = tag\n }\n static clear () {\n Tag.impls = {}\n }\n}\n","import assert from 'src/util/assert'\nimport * as lexical from 'src/parser/lexical'\nimport { evalValue } from 'src/render/syntax'\nimport Scope from 'src/scope/scope'\n\ntype impl = (value: any, ...args: any[]) => any\n\nconst valueRE = new RegExp(`${lexical.value.source}`, 'g')\n\nexport default class Filter {\n name: string\n impl: impl\n args: string[]\n private static impls: {[key: string]: impl} = {}\n\n constructor (str: string, strictFilters: boolean = false) {\n const match = lexical.filterLine.exec(str)\n assert(match, 'illegal filter: ' + str)\n\n const name = match[1]\n const argList = match[2] || ''\n const impl = Filter.impls[name]\n if (!impl && strictFilters) throw new TypeError(`undefined filter: ${name}`)\n\n this.name = name\n this.impl = impl || (x => x)\n this.args = this.parseArgs(argList)\n }\n parseArgs (argList: string): string[] {\n let match; const args = []\n while ((match = valueRE.exec(argList.trim()))) {\n const v = match[0]\n const re = new RegExp(`${v}\\\\s*:`, 'g')\n const keyMatch = re.exec(match.input)\n const currentMatchIsKey = keyMatch && keyMatch.index === match.index\n currentMatchIsKey ? args.push(`'${v}'`) : args.push(v)\n }\n return args\n }\n render (value: any, scope: Scope): any {\n const args = this.args.map(arg => evalValue(arg, scope))\n args.unshift(value)\n return this.impl.apply(null, args)\n }\n static register (name, filter) {\n Filter.impls[name] = filter\n }\n static clear () {\n Filter.impls = {}\n }\n}\n","import Token from 'src/parser/token'\nimport ITemplate from 'src/template/itemplate'\n\ntype parseToken = (token: Token, remainTokens: Array) => ITemplate\ntype eventHandler = ((arg?: Token | ITemplate) => void)\n\nexport default class ParseStream {\n private tokens: Array\n private handlers: {[key: string]: eventHandler} = {}\n private stopRequested: boolean\n private parseToken: parseToken\n\n constructor (tokens: Array, parseToken: parseToken) {\n this.tokens = tokens\n this.parseToken = parseToken\n }\n on (name: string, cb: eventHandler) {\n this.handlers[name] = cb\n return this\n }\n trigger (event: string, arg?: Token | ITemplate) {\n const h = this.handlers[event]\n if (typeof h === 'function') {\n h(arg)\n return true\n }\n }\n start () {\n this.trigger('start')\n let token\n while (!this.stopRequested && (token = this.tokens.shift())) {\n if (this.trigger('token', token)) continue\n if (token.type === 'tag' &&\n this.trigger(`tag:${token.name}`, token)) {\n continue\n }\n const template = this.parseToken(token, this.tokens)\n this.trigger('template', template)\n }\n if (!this.stopRequested) this.trigger('end')\n return this\n }\n stop () {\n this.stopRequested = true\n return this\n }\n}\n","import { evalExp } from 'src/render/syntax'\nimport * as lexical from 'src/parser/lexical'\nimport assert from 'src/util/assert'\nimport Filter from './filter'\nimport Scope from 'src/scope/scope'\n\nexport default class {\n initial: any\n filters: Array\n constructor (str: string, strictFilters?: boolean) {\n let match = lexical.matchValue(str)\n assert(match, `illegal value string: ${str}`)\n\n const initial = match[0]\n str = str.substr(match.index + match[0].length)\n\n const filters = []\n while ((match = lexical.filter.exec(str))) {\n filters.push([match[0].trim()])\n }\n\n this.initial = initial\n this.filters = filters.map(str => new Filter(str, strictFilters))\n }\n value (scope: Scope) {\n return this.filters.reduce(\n (prev, filter) => filter.render(prev, scope),\n evalExp(this.initial, scope))\n }\n}\n","import Value from './value'\nimport { stringify } from 'src/util/underscore'\nimport Template from 'src/template/template'\nimport ITemplate from 'src/template/itemplate'\nimport Scope from 'src/scope/scope'\nimport OutputToken from 'src/parser/output-token'\n\nexport default class Output extends Template implements ITemplate {\n value: Value\n constructor (token: OutputToken, strictFilters?: boolean) {\n super(token)\n this.value = new Value(token.value, strictFilters)\n }\n async render (scope: Scope): Promise {\n const html = await this.value.value(scope)\n return stringify(html)\n }\n}\n","import Template from 'src/template/template'\nimport ITemplate from 'src/template/itemplate'\nimport Token from 'src/parser/token'\n\nexport default class extends Template implements ITemplate {\n str: string\n constructor (token: Token) {\n super(token)\n this.str = token.value\n }\n async render (): Promise {\n return this.str\n }\n}\n","import { ParseError } from '../util/error'\nimport Liquid from 'src/liquid'\nimport ParseStream from './parse-stream'\nimport Token from './token'\nimport TagToken from './tag-token'\nimport OutputToken from './output-token'\nimport Tag from 'src/template/tag/tag'\nimport Output from 'src/template/output'\nimport HTML from 'src/template/html'\n\nexport default class Parser {\n liquid: Liquid\n\n constructor (liquid: Liquid) {\n this.liquid = liquid\n }\n parse (tokens: Array) {\n let token\n const templates = []\n while ((token = tokens.shift())) {\n templates.push(this.parseToken(token, tokens))\n }\n return templates\n }\n parseToken (token: Token, remainTokens: Array) {\n try {\n if (token.type === 'tag') {\n return new Tag(token as TagToken, remainTokens, this.liquid)\n }\n if (token.type === 'output') {\n return new Output(token as OutputToken, this.liquid.options.strict_filters)\n }\n return new HTML(token)\n } catch (e) {\n throw new ParseError(e, token)\n }\n }\n parseStream (tokens: Array) {\n return new ParseStream(tokens, (token, tokens) => this.parseToken(token, tokens))\n }\n}\n","import assert from 'src/util/assert'\nimport { identifier } from 'src/parser/lexical'\nimport { AssignScope } from 'src/scope/scopes'\n\nconst re = new RegExp(`(${identifier.source})\\\\s*=([^]*)`)\n\nexport default {\n parse: function (token) {\n const match = token.args.match(re)\n assert(match, `illegal token ${token.raw}`)\n this.key = match[1]\n this.value = match[2]\n },\n render: function (scope) {\n const ctx = new AssignScope()\n ctx[this.key] = this.liquid.evalValue(this.value, scope)\n scope.push(ctx)\n return Promise.resolve('')\n }\n}\n","/*\n * Call functions in serial until someone resolved.\n * @param iterable the array to iterate with.\n * @param iteratee returns a new promise.\n * The iteratee is invoked with three arguments: (value, index, iterable).\n */\nexport function anySeries (iterable, iteratee) {\n let ret: Promise = Promise.reject(new Error('init'))\n iterable.forEach(function (item, idx) {\n ret = ret.catch(() => iteratee(item, idx, iterable))\n })\n return ret\n}\n\n/*\n * Call functions in serial until someone rejected.\n * @param {Array} iterable the array to iterate with.\n * @param {Array} iteratee returns a new promise.\n * The iteratee is invoked with three arguments: (value, index, iterable).\n */\nexport function mapSeries (iterable, iteratee) {\n let ret: Promise = Promise.resolve('init')\n const result = []\n iterable.forEach(function (item, idx) {\n ret = ret\n .then(() => iteratee(item, idx, iterable))\n .then(x => result.push(x))\n })\n return ret.then(() => result)\n}\n","import { mapSeries } from 'src/util/promise'\nimport { isString, isObject, isArray } from 'src/util/underscore'\nimport { evalExp } from 'src/render/syntax'\nimport assert from 'src/util/assert'\nimport { identifier, value, hash } from 'src/parser/lexical'\nimport { RenderBreakError } from 'src/util/error'\n\nconst re = new RegExp(`^(${identifier.source})\\\\s+in\\\\s+` +\n `(${value.source})` +\n `(?:\\\\s+${hash.source})*` +\n `(?:\\\\s+(reversed))?` +\n `(?:\\\\s+${hash.source})*$`)\n\nfunction parse (tagToken, remainTokens) {\n const match = re.exec(tagToken.args)\n assert(match, `illegal tag: ${tagToken.raw}`)\n this.variable = match[1]\n this.collection = match[2]\n this.reversed = !!match[3]\n\n this.templates = []\n this.elseTemplates = []\n\n let p\n const stream = this.liquid.parser.parseStream(remainTokens)\n .on('start', () => (p = this.templates))\n .on('tag:else', () => (p = this.elseTemplates))\n .on('tag:endfor', () => stream.stop())\n .on('template', tpl => p.push(tpl))\n .on('end', () => {\n throw new Error(`tag ${tagToken.raw} not closed`)\n })\n\n stream.start()\n}\n\nasync function render (scope, hash) {\n let collection = evalExp(this.collection, scope)\n\n if (!isArray(collection)) {\n if (isString(collection) && collection.length > 0) {\n collection = [collection]\n } else if (isObject(collection)) {\n collection = Object.keys(collection).map((key) => [key, collection[key]])\n }\n }\n if (!isArray(collection) || !collection.length) {\n return this.liquid.renderer.renderTemplates(this.elseTemplates, scope)\n }\n\n const offset = hash.offset || 0\n const limit = (hash.limit === undefined) ? collection.length : hash.limit\n\n collection = collection.slice(offset, offset + limit)\n if (this.reversed) collection.reverse()\n\n const contexts = collection.map((item, i) => {\n const ctx = {}\n ctx[this.variable] = item\n ctx['forloop'] = {\n first: i === 0,\n index: i + 1,\n index0: i,\n last: i === collection.length - 1,\n length: collection.length,\n rindex: collection.length - i,\n rindex0: collection.length - i - 1\n }\n return ctx\n })\n\n let html = ''\n let finished = false\n await mapSeries(contexts, async context => {\n if (finished) return\n\n scope.push(context)\n try {\n html += await this.liquid.renderer.renderTemplates(this.templates, scope)\n } catch (e) {\n if (e instanceof RenderBreakError) {\n html += e.resolvedHTML\n if (e.message === 'break') {\n finished = true\n }\n } else throw e\n }\n scope.pop(context)\n })\n return html\n}\n\nexport default { parse, render }\n","import assert from 'src/util/assert'\nimport { identifier } from 'src/parser/lexical'\nimport { CaptureScope } from 'src/scope/scopes'\nimport TagToken from 'src/parser/tag-token'\nimport Token from 'src/parser/token'\nimport Scope from 'src/scope/scope'\n\nconst re = new RegExp(`(${identifier.source})`)\n\nexport default {\n parse: function (tagToken: TagToken, remainTokens: Token[]) {\n const match = tagToken.args.match(re)\n assert(match, `${tagToken.args} not valid identifier`)\n\n this.variable = match[1]\n this.templates = []\n\n const stream = this.liquid.parser.parseStream(remainTokens)\n stream.on('tag:endcapture', () => stream.stop())\n .on('template', tpl => this.templates.push(tpl))\n .on('end', () => {\n throw new Error(`tag ${tagToken.raw} not closed`)\n })\n stream.start()\n },\n render: async function (scope: Scope) {\n const html = await this.liquid.renderer.renderTemplates(this.templates, scope)\n const ctx = new CaptureScope()\n ctx[this.variable] = html\n scope.push(ctx)\n }\n}\n","import { evalExp } from 'src/render/syntax'\n\nexport default {\n parse: function (tagToken, remainTokens) {\n this.cond = tagToken.args\n this.cases = []\n this.elseTemplates = []\n\n let p = []\n const stream = this.liquid.parser.parseStream(remainTokens)\n .on('tag:when', token => {\n this.cases.push({\n val: token.args,\n templates: p = []\n })\n })\n .on('tag:else', () => (p = this.elseTemplates))\n .on('tag:endcase', () => stream.stop())\n .on('template', tpl => p.push(tpl))\n .on('end', () => {\n throw new Error(`tag ${tagToken.raw} not closed`)\n })\n\n stream.start()\n },\n\n render: function (scope) {\n for (let i = 0; i < this.cases.length; i++) {\n const branch = this.cases[i]\n const val = evalExp(branch.val, scope)\n const cond = evalExp(this.cond, scope)\n if (val === cond) {\n return this.liquid.renderer.renderTemplates(branch.templates, scope)\n }\n }\n return this.liquid.renderer.renderTemplates(this.elseTemplates, scope)\n }\n}\n","export default {\n parse: function (tagToken, remainTokens) {\n const stream = this.liquid.parser.parseStream(remainTokens)\n stream\n .on('token', token => {\n if (token.name === 'endcomment') stream.stop()\n })\n .on('end', () => {\n throw new Error(`tag ${tagToken.raw} not closed`)\n })\n stream.start()\n }\n}\n","import assert from 'src/util/assert'\nimport { value, quotedLine } from 'src/parser/lexical'\nimport { evalValue } from 'src/render/syntax'\nimport BlockMode from 'src/scope/block-mode'\n\nconst staticFileRE = /[^\\s,]+/\nconst withRE = new RegExp(`with\\\\s+(${value.source})`)\n\nexport default {\n parse: function (token) {\n let match = staticFileRE.exec(token.args)\n if (match) {\n this.staticValue = match[0]\n }\n\n match = value.exec(token.args)\n if (match) {\n this.value = match[0]\n }\n\n match = withRE.exec(token.args)\n if (match) {\n this.with = match[1]\n }\n },\n render: async function (scope, hash) {\n let filepath\n if (scope.opts.dynamicPartials) {\n if (quotedLine.exec(this.value)) {\n const template = this.value.slice(1, -1)\n filepath = await this.liquid.parseAndRender(template, scope.getAll(), scope.opts)\n } else {\n filepath = evalValue(this.value, scope)\n }\n } else {\n filepath = this.staticValue\n }\n assert(filepath, `cannot include with empty filename`)\n\n const originBlocks = scope.blocks\n const originBlockMode = scope.blockMode\n\n scope.blocks = {}\n scope.blockMode = BlockMode.OUTPUT\n if (this.with) {\n hash[filepath] = evalValue(this.with, scope)\n }\n const templates = await this.liquid.getTemplate(filepath, scope.opts)\n scope.push(hash)\n const html = await this.liquid.renderer.renderTemplates(templates, scope)\n scope.pop(hash)\n scope.blocks = originBlocks\n scope.blockMode = originBlockMode\n return html\n }\n}\n","import assert from 'src/util/assert'\nimport { identifier } from 'src/parser/lexical'\nimport { CaptureScope, AssignScope, DecrementScope } from 'src/scope/scopes'\nimport TagToken from 'src/parser/tag-token'\nimport Scope from 'src/scope/scope'\n\nexport default {\n parse: function (token: TagToken) {\n const match = token.args.match(identifier)\n assert(match, `illegal identifier ${token.args}`)\n this.variable = match[0]\n },\n render: function (scope: Scope) {\n let context = scope.findContextFor(\n this.variable,\n ctx => {\n return !(ctx instanceof CaptureScope) && !(ctx instanceof AssignScope)\n }\n )\n if (!context) {\n context = new DecrementScope()\n scope.unshift(context)\n }\n if (typeof context[this.variable] !== 'number') {\n context[this.variable] = 0\n }\n return --context[this.variable]\n }\n}\n","import assert from 'src/util/assert'\nimport { value as rValue } from 'src/parser/lexical'\nimport { evalValue } from 'src/render/syntax'\n\nconst groupRE = new RegExp(`^(?:(${rValue.source})\\\\s*:\\\\s*)?(.*)$`)\nconst candidatesRE = new RegExp(rValue.source, 'g')\n\nexport default {\n parse: function (tagToken) {\n let match = groupRE.exec(tagToken.args)\n assert(match, `illegal tag: ${tagToken.raw}`)\n\n this.group = match[1] || ''\n const candidates = match[2]\n\n this.candidates = []\n\n while ((match = candidatesRE.exec(candidates))) {\n this.candidates.push(match[0])\n }\n assert(this.candidates.length, `empty candidates: ${tagToken.raw}`)\n },\n\n render: function (scope) {\n const group = evalValue(this.group, scope)\n const fingerprint = `cycle:${group}:` + this.candidates.join(',')\n\n const groups = scope.opts.groups = scope.opts.groups || {}\n let idx = groups[fingerprint]\n\n if (idx === undefined) {\n idx = groups[fingerprint] = 0\n }\n\n const candidate = this.candidates[idx]\n idx = (idx + 1) % this.candidates.length\n groups[fingerprint] = idx\n\n return evalValue(candidate, scope)\n }\n}\n","import { evalExp, isTruthy } from 'src/render/syntax'\n\nexport default {\n parse: function (tagToken, remainTokens) {\n this.branches = []\n this.elseTemplates = []\n\n let p\n const stream = this.liquid.parser.parseStream(remainTokens)\n .on('start', () => this.branches.push({\n cond: tagToken.args,\n templates: (p = [])\n }))\n .on('tag:elsif', token => {\n this.branches.push({\n cond: token.args,\n templates: p = []\n })\n })\n .on('tag:else', () => (p = this.elseTemplates))\n .on('tag:endif', () => stream.stop())\n .on('template', tpl => p.push(tpl))\n .on('end', () => {\n throw new Error(`tag ${tagToken.raw} not closed`)\n })\n\n stream.start()\n },\n\n render: function (scope) {\n for (const branch of this.branches) {\n const cond = evalExp(branch.cond, scope)\n if (isTruthy(cond)) {\n return this.liquid.renderer.renderTemplates(branch.templates, scope)\n }\n }\n return this.liquid.renderer.renderTemplates(this.elseTemplates, scope)\n }\n}\n","import assert from 'src/util/assert'\nimport { identifier } from 'src/parser/lexical'\nimport { CaptureScope, AssignScope, IncrementScope } from 'src/scope/scopes'\n\nexport default {\n parse: function (token) {\n const match = token.args.match(identifier)\n assert(match, `illegal identifier ${token.args}`)\n this.variable = match[0]\n },\n render: function (scope) {\n let context = scope.findContextFor(\n this.variable,\n ctx => {\n return !(ctx instanceof CaptureScope) && !(ctx instanceof AssignScope)\n }\n )\n if (!context) {\n context = new IncrementScope()\n scope.unshift(context)\n }\n if (typeof context[this.variable] !== 'number') {\n context[this.variable] = 0\n }\n const val = context[this.variable]\n context[this.variable]++\n return val\n }\n}\n","import assert from 'src/util/assert'\nimport { value as rValue } from 'src/parser/lexical'\nimport { evalValue } from 'src/render/syntax'\nimport BlockMode from 'src/scope/block-mode'\n\nconst staticFileRE = /\\S+/\n\nexport default {\n parse: function (token, remainTokens) {\n let match = staticFileRE.exec(token.args)\n if (match) {\n this.staticLayout = match[0]\n }\n\n match = rValue.exec(token.args)\n if (match) {\n this.layout = match[0]\n }\n\n this.tpls = this.liquid.parser.parse(remainTokens)\n },\n render: async function (scope, hash) {\n const layout = scope.opts.dynamicPartials\n ? evalValue(this.layout, scope)\n : this.staticLayout\n assert(layout, `cannot apply layout with empty filename`)\n\n // render the remaining tokens immediately\n scope.blockMode = BlockMode.STORE\n const html = await this.liquid.renderer.renderTemplates(this.tpls, scope)\n if (scope.blocks[''] === undefined) {\n scope.blocks[''] = html\n }\n const templates = await this.liquid.getTemplate(layout, scope.opts)\n scope.push(hash)\n scope.blockMode = BlockMode.OUTPUT\n const partial = await this.liquid.renderer.renderTemplates(templates, scope)\n scope.pop(hash)\n return partial\n }\n}\n","import BlockMode from 'src/scope/block-mode'\n\nexport default {\n parse: function (token, remainTokens) {\n const match = /\\w+/.exec(token.args)\n this.block = match ? match[0] : ''\n\n this.tpls = []\n const stream = this.liquid.parser.parseStream(remainTokens)\n .on('tag:endblock', () => stream.stop())\n .on('template', tpl => this.tpls.push(tpl))\n .on('end', () => {\n throw new Error(`tag ${token.raw} not closed`)\n })\n stream.start()\n },\n render: async function (scope) {\n const childDefined = scope.blocks[this.block]\n const html = childDefined !== undefined\n ? childDefined\n : await this.liquid.renderer.renderTemplates(this.tpls, scope)\n\n if (scope.blockMode === BlockMode.STORE) {\n scope.blocks[this.block] = html\n return ''\n }\n return html\n }\n}\n","export default {\n parse: function (tagToken, remainTokens) {\n this.tokens = []\n\n const stream = this.liquid.parser.parseStream(remainTokens)\n stream\n .on('token', token => {\n if (token.name === 'endraw') stream.stop()\n else this.tokens.push(token)\n })\n .on('end', () => {\n throw new Error(`tag ${tagToken.raw} not closed`)\n })\n stream.start()\n },\n render: function () {\n return this.tokens.map(token => token.raw).join('')\n }\n}\n","import { mapSeries } from 'src/util/promise'\nimport assert from 'src/util/assert'\nimport { evalExp } from 'src/render/syntax'\nimport { identifier, value, hash } from 'src/parser/lexical'\n\nconst re = new RegExp(`^(${identifier.source})\\\\s+in\\\\s+` +\n `(${value.source})` +\n `(?:\\\\s+${hash.source})*$`)\n\nexport default {\n parse: function (tagToken, remainTokens) {\n const match = re.exec(tagToken.args)\n assert(match, `illegal tag: ${tagToken.raw}`)\n\n this.variable = match[1]\n this.collection = match[2]\n this.templates = []\n\n let p\n const stream = this.liquid.parser.parseStream(remainTokens)\n .on('start', () => (p = this.templates))\n .on('tag:endtablerow', () => stream.stop())\n .on('template', tpl => p.push(tpl))\n .on('end', () => {\n throw new Error(`tag ${tagToken.raw} not closed`)\n })\n\n stream.start()\n },\n\n render: async function (scope, hash) {\n let collection = evalExp(this.collection, scope) || []\n const offset = hash.offset || 0\n const limit = (hash.limit === undefined) ? collection.length : hash.limit\n\n collection = collection.slice(offset, offset + limit)\n const cols = hash.cols || collection.length\n const contexts = collection.map(item => {\n const ctx = {}\n ctx[this.variable] = item\n return ctx\n })\n\n let row\n let html = ''\n await mapSeries(contexts, async (context, idx) => {\n row = Math.floor(idx / cols) + 1\n const col = (idx % cols) + 1\n if (col === 1) {\n if (row !== 1) {\n html += ''\n }\n html += ``\n }\n\n html += ``\n scope.push(context)\n html += await this.liquid.renderer.renderTemplates(this.templates, scope)\n html += ''\n scope.pop(context)\n return html\n })\n if (row > 0) {\n html += ''\n }\n return html\n }\n}\n","import { evalExp, isFalsy } from 'src/render/syntax'\n\nexport default {\n parse: function (tagToken, remainTokens) {\n this.templates = []\n this.elseTemplates = []\n let p\n const stream = this.liquid.parser.parseStream(remainTokens)\n .on('start', () => {\n p = this.templates\n this.cond = tagToken.args\n })\n .on('tag:else', () => (p = this.elseTemplates))\n .on('tag:endunless', () => stream.stop())\n .on('template', tpl => p.push(tpl))\n .on('end', () => {\n throw new Error(`tag ${tagToken.raw} not closed`)\n })\n\n stream.start()\n },\n\n render: function (scope) {\n const cond = evalExp(this.cond, scope)\n return isFalsy(cond)\n ? this.liquid.renderer.renderTemplates(this.templates, scope)\n : this.liquid.renderer.renderTemplates(this.elseTemplates, scope)\n }\n}\n","import { RenderBreakError } from 'src/util/error'\n\nexport default {\n render: async function () {\n throw new RenderBreakError('break')\n }\n}\n","import { RenderBreakError } from 'src/util/error'\n\nexport default {\n render: async function () {\n throw new RenderBreakError('continue')\n }\n}\n","import assign from './assign'\nimport For from './for'\nimport capture from './capture'\nimport Case from './case'\nimport comment from './comment'\nimport include from './include'\nimport decrement from './decrement'\nimport cycle from './cycle'\nimport If from './if'\nimport increment from './increment'\nimport layout from './layout'\nimport block from './block'\nimport raw from './raw'\nimport tablerow from './tablerow'\nimport unless from './unless'\nimport Break from './break'\nimport Continue from './continue'\nimport ITagImplOptions from 'src/template/tag/itag-impl-options'\n\nconst tags: { [key: string]: ITagImplOptions } = {\n assign, 'for': For, capture, 'case': Case, comment, include, decrement, increment, cycle, 'if': If, layout, block, raw, tablerow, unless, 'break': Break, 'continue': Continue\n}\n\nexport default tags\n","const escapeMap = {\n '&': '&',\n '<': '<',\n '>': '>',\n '\"': '"',\n \"'\": '''\n}\nconst unescapeMap = {\n '&': '&',\n '<': '<',\n '>': '>',\n '"': '\"',\n ''': \"'\"\n}\n\nfunction escape (str) {\n return String(str).replace(/&|<|>|\"|'/g, m => escapeMap[m])\n}\n\nfunction unescape (str) {\n return String(str).replace(/&(amp|lt|gt|#34|#39);/g, m => unescapeMap[m])\n}\n\nexport default {\n 'escape': escape,\n 'escape_once': str => escape(unescape(str)),\n 'newline_to_br': v => v.replace(/\\n/g, '
'),\n 'strip_html': v => String(v).replace(/|||<.*?>/g, '')\n}\n","export default {\n 'append': (v, arg) => v + arg,\n 'prepend': (v, arg) => arg + v,\n 'capitalize': str => String(str).charAt(0).toUpperCase() + str.slice(1),\n 'concat': (v, arg) => Array.prototype.concat.call(v, arg),\n 'lstrip': v => String(v).replace(/^\\s+/, ''),\n 'downcase': v => v.toLowerCase(),\n 'upcase': str => String(str).toUpperCase(),\n 'remove': (v, arg) => v.split(arg).join(''),\n 'remove_first': (v, l) => v.replace(l, ''),\n 'replace': (v, pattern, replacement) =>\n String(v).split(pattern).join(replacement),\n 'replace_first': (v, arg1, arg2) => String(v).replace(arg1, arg2),\n 'rstrip': str => String(str).replace(/\\s+$/, ''),\n 'split': (v, arg) => String(v).split(arg),\n 'strip': (v) => String(v).trim(),\n 'strip_newlines': v => String(v).replace(/\\n/g, ''),\n 'truncate': (v, l, o) => {\n v = String(v)\n o = (o === undefined) ? '...' : o\n l = l || 16\n if (v.length <= l) return v\n return v.substr(0, l - o.length) + o\n },\n 'truncatewords': (v, l, o) => {\n if (o === undefined) o = '...'\n const arr = v.split(' ')\n let ret = arr.slice(0, l).join(' ')\n if (arr.length > l) ret += o\n return ret\n }\n}\n","export default {\n 'abs': v => Math.abs(v),\n 'ceil': v => Math.ceil(v),\n 'divided_by': (v, arg) => v / arg,\n 'floor': v => Math.floor(v),\n 'minus': bindFixed((v, arg) => v - arg),\n 'modulo': bindFixed((v, arg) => v % arg),\n 'round': (v, arg) => {\n const amp = Math.pow(10, arg || 0)\n return Math.round(v * amp) / amp\n },\n 'plus': bindFixed((v, arg) => Number(v) + Number(arg)),\n 'times': (v, arg) => v * arg\n}\n\nfunction getFixed (v) {\n const p = String(v).split('.')\n return (p.length > 1) ? p[1].length : 0\n}\n\nfunction bindFixed (cb) {\n return (l, r) => {\n const f = Math.max(getFixed(l), getFixed(r))\n return cb(l, r).toFixed(f)\n }\n}\n","export default {\n 'url_decode': x => x.split('+').map(decodeURIComponent).join(' '),\n 'url_encode': x => x.split(' ').map(encodeURIComponent).join('+')\n}\n","import { last } from 'src/util/underscore'\n\nexport default {\n 'join': (v, arg) => v.join(arg === undefined ? ' ' : arg),\n 'last': v => last(v),\n 'first': v => v[0],\n 'map': (arr, arg) => arr.map(v => v[arg]),\n 'reverse': v => v.reverse(),\n 'sort': (v, arg) => v.sort(arg),\n 'size': v => v.length,\n 'slice': (v, begin, length) => {\n if (length === undefined) length = 1\n return v.slice(begin, begin + length)\n },\n 'uniq': function (arr) {\n const u = {}\n return (arr || []).filter(val => {\n if (u.hasOwnProperty(val)) {\n return false\n }\n u[val] = true\n return true\n })\n }\n}\n","import { padStart } from './underscore'\n\nconst monthNames = [\n 'January', 'February', 'March', 'April', 'May', 'June', 'July', 'August',\n 'September', 'October', 'November', 'December'\n]\nconst dayNames = [\n 'Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'\n]\nconst monthNamesShort = monthNames.map(abbr)\nconst dayNamesShort = dayNames.map(abbr)\nconst suffixes = {\n 1: 'st',\n 2: 'nd',\n 3: 'rd',\n 'default': 'th'\n}\n\nfunction abbr (str) {\n return str.slice(0, 3)\n}\n\n// prototype extensions\nconst _date = {\n daysInMonth: function (d) {\n const feb = _date.isLeapYear(d) ? 29 : 28\n return [31, feb, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]\n },\n\n getDayOfYear: function (d) {\n let num = 0\n for (let i = 0; i < d.getMonth(); ++i) {\n num += _date.daysInMonth(d)[i]\n }\n return num + d.getDate()\n },\n\n getWeekOfYear: function (d, startDay) {\n // Skip to startDay of this week\n const now = this.getDayOfYear(d) + (startDay - d.getDay())\n // Find the first startDay of the year\n const jan1 = new Date(d.getFullYear(), 0, 1)\n const then = (7 - jan1.getDay() + startDay)\n return padStart(String(Math.floor((now - then) / 7) + 1), 2, '0')\n },\n\n isLeapYear: function (d) {\n const year = d.getFullYear()\n return !!((year & 3) === 0 && (year % 100 || (year % 400 === 0 && year)))\n },\n\n getSuffix: function (d) {\n const str = d.getDate().toString()\n const index = parseInt(str.slice(-1))\n return suffixes[index] || suffixes['default']\n },\n\n century: function (d) {\n return parseInt(d.getFullYear().toString().substring(0, 2), 10)\n }\n}\n\nconst formatCodes = {\n a: function (d) {\n return dayNamesShort[d.getDay()]\n },\n A: function (d) {\n return dayNames[d.getDay()]\n },\n b: function (d) {\n return monthNamesShort[d.getMonth()]\n },\n B: function (d) {\n return monthNames[d.getMonth()]\n },\n c: function (d) {\n return d.toLocaleString()\n },\n C: function (d) {\n return _date.century(d)\n },\n d: function (d) {\n return padStart(d.getDate(), 2, '0')\n },\n e: function (d) {\n return padStart(d.getDate(), 2)\n },\n H: function (d) {\n return padStart(d.getHours(), 2, '0')\n },\n I: function (d) {\n return padStart(String(d.getHours() % 12 || 12), 2, '0')\n },\n j: function (d) {\n return padStart(_date.getDayOfYear(d), 3, '0')\n },\n k: function (d) {\n return padStart(d.getHours(), 2)\n },\n l: function (d) {\n return padStart(String(d.getHours() % 12 || 12), 2)\n },\n L: function (d) {\n return padStart(d.getMilliseconds(), 3, '0')\n },\n m: function (d) {\n return padStart(d.getMonth() + 1, 2, '0')\n },\n M: function (d) {\n return padStart(d.getMinutes(), 2, '0')\n },\n p: function (d) {\n return (d.getHours() < 12 ? 'AM' : 'PM')\n },\n P: function (d) {\n return (d.getHours() < 12 ? 'am' : 'pm')\n },\n q: function (d) {\n return _date.getSuffix(d)\n },\n s: function (d) {\n return Math.round(d.valueOf() / 1000)\n },\n S: function (d) {\n return padStart(d.getSeconds(), 2, '0')\n },\n u: function (d) {\n return d.getDay() || 7\n },\n U: function (d) {\n return _date.getWeekOfYear(d, 0)\n },\n w: function (d) {\n return d.getDay()\n },\n W: function (d) {\n return _date.getWeekOfYear(d, 1)\n },\n x: function (d) {\n return d.toLocaleDateString()\n },\n X: function (d) {\n return d.toLocaleTimeString()\n },\n y: function (d) {\n return d.getFullYear().toString().substring(2, 4)\n },\n Y: function (d) {\n return d.getFullYear()\n },\n z: function (d) {\n const tz = d.getTimezoneOffset() / 60 * 100\n return (tz > 0 ? '-' : '+') + padStart(String(Math.abs(tz)), 4, '0')\n },\n '%': function () {\n return '%'\n }\n};\n(formatCodes as any).h = formatCodes.b;\n(formatCodes as any).N = formatCodes.L\n\nexport default function (d, format) {\n let output = ''\n let remaining = format\n\n while (true) {\n const r = /%./g\n const results = r.exec(remaining)\n\n // No more format codes. Add the remaining text and return\n if (!results) {\n return output + remaining\n }\n\n // Add the preceding text\n output += remaining.slice(0, r.lastIndex - 2)\n remaining = remaining.slice(r.lastIndex)\n\n // Add the format code\n const ch = results[0].charAt(1)\n const func = formatCodes[ch]\n output += func ? func.call(this, d) : '%' + ch\n }\n}\n","import strftime from 'src/util/strftime'\nimport { isString } from 'src/util/underscore'\n\nexport default {\n 'date': (v, arg) => {\n let date = v\n if (v === 'now') {\n date = new Date()\n } else if (isString(v)) {\n date = new Date(v)\n }\n return isValidDate(date) ? strftime(date, arg) : v\n }\n}\n\nfunction isValidDate (date) {\n return date instanceof Date && !isNaN(date.getTime())\n}\n","import { isTruthy } from 'src/render/syntax'\n\nexport default {\n 'default': (v, arg) => isTruthy(v) ? v : arg\n}\n","import html from './html'\nimport str from './string'\nimport math from './math'\nimport url from './url'\nimport array from './array'\nimport date from './date'\nimport obj from './object'\n\nexport default { ...html, ...str, ...math, ...url, ...date, ...obj, ...array }\n","import Scope from './scope/scope'\nimport * as Types from './types'\nimport fs from 'src/fs'\nimport * as _ from './util/underscore'\nimport ITemplate from './template/itemplate'\nimport Tokenizer from './parser/tokenizer'\nimport Render from './render/render'\nimport Tag from './template/tag/tag'\nimport Filter from './template/filter'\nimport Parser from './parser/parser'\nimport ITagImplOptions from './template/tag/itag-impl-options'\nimport Value from './template/value'\nimport { isTruthy, isFalsy, evalExp, evalValue } from './render/syntax'\nimport builtinTags from './builtin/tags'\nimport builtinFilters from './builtin/filters'\nimport { LiquidOptions, NormalizedFullOptions, applyDefault, normalize } from './liquid-options'\n\nexport default class Liquid {\n public options: NormalizedFullOptions\n private cache: object\n private parser: Parser\n private renderer: Render\n private tokenizer: Tokenizer\n\n constructor (opts: LiquidOptions = {}) {\n this.options = applyDefault(normalize(opts))\n if (this.options.cache) {\n this.cache = {}\n }\n this.parser = new Parser(this)\n this.renderer = new Render()\n this.tokenizer = new Tokenizer(this.options)\n\n _.forOwn(builtinTags, (conf, name) => this.registerTag(name, conf))\n _.forOwn(builtinFilters, (handler, name) => this.registerFilter(name, handler))\n }\n parse (html: string, filepath?: string) {\n const tokens = this.tokenizer.tokenize(html, filepath)\n return this.parser.parse(tokens)\n }\n render (tpl: Array, ctx?: object, opts?: LiquidOptions) {\n const options = { ...this.options, ...normalize(opts) }\n const scope = new Scope(ctx, options)\n return this.renderer.renderTemplates(tpl, scope)\n }\n async parseAndRender (html: string, ctx?: object, opts?: LiquidOptions) {\n const tpl = await this.parse(html)\n return this.render(tpl, ctx, opts)\n }\n async getTemplate (file, opts?: LiquidOptions) {\n const options = normalize(opts)\n const roots = options.root ? [...options.root, ...this.options.root] : this.options.root\n const paths = roots.map(root => fs.resolve(root, file, this.options.extname))\n\n for (const filepath of paths) {\n if (!(await fs.exists(filepath))) continue\n\n if (this.options.cache && this.cache[filepath]) return this.cache[filepath]\n const value = this.parse(await fs.readFile(filepath), filepath)\n if (this.options.cache) this.cache[filepath] = value\n return value\n }\n\n const err = new Error('ENOENT') as any\n err.message = `ENOENT: Failed to lookup \"${file}\" in \"${roots}\"`\n err.code = 'ENOENT'\n throw err\n }\n async renderFile (file, ctx?: object, opts?: LiquidOptions) {\n const options = normalize(opts)\n const templates = await this.getTemplate(file, options)\n return this.render(templates, ctx, opts)\n }\n evalValue (str: string, scope: Scope) {\n return new Value(str, this.options.strict_filters).value(scope)\n }\n registerFilter (name, filter) {\n return Filter.register(name, filter)\n }\n registerTag (name: string, tag: ITagImplOptions) {\n return Tag.register(name, tag)\n }\n plugin (plugin) {\n return plugin.call(this, Liquid)\n }\n express () {\n const self = this\n return function (filePath: string, ctx: object, cb: (err: Error, html?: string) => void) {\n const opts = { root: this.root }\n self.renderFile(filePath, ctx, opts).then(html => cb(null, html), cb)\n }\n }\n static default = Liquid\n static isTruthy = isTruthy\n static isFalsy = isFalsy\n static evalExp = evalExp\n static evalValue = evalValue\n static Types = Types\n}\n"],"names":["range","tslib_1.__extends","_.create","_\r\n .range","_.padStart","_.isArray","_.isString","BlockMode","_.assign","path","_.last","value","_.isObject","filter","_.isNil","_.isFunction","lexical.isInteger","_.promisify","stat","readFile","fs","extname","resolve","lexical.tagLine","operators","lexical.operators","lexical.quoteBalanced","lexical.rangeLine","lexical.isLiteral","lexical.parseLiteral","lexical.isVariable","lexical.value","lexical.filterLine","lexical.matchValue","lexical.filter","Value","HTML","re","hash","rValue","staticFileRE","_.forOwn","builtinTags"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"liquid.common.js","sources":["../src/util/underscore.ts","../src/parser/lexical.ts","../src/util/error.ts","../src/util/assert.ts","../src/liquid-options.ts","../src/scope/block-mode.ts","../src/scope/scope.ts","../src/scope/scopes.ts","../src/fs/node.ts","../src/parser/whitespace-ctrl.ts","../src/parser/token.ts","../src/parser/html-token.ts","../src/parser/delimited-token.ts","../src/parser/tag-token.ts","../src/parser/output-token.ts","../src/parser/tokenizer.ts","../src/render/render.ts","../src/render/syntax.ts","../src/template/tag/hash.ts","../src/template/template.ts","../src/template/tag/tag.ts","../src/template/filter/filter.ts","../src/parser/parse-stream.ts","../src/template/value.ts","../src/template/output.ts","../src/template/html.ts","../src/parser/parser.ts","../src/builtin/tags/assign.ts","../src/util/promise.ts","../src/builtin/tags/for.ts","../src/builtin/tags/capture.ts","../src/builtin/tags/case.ts","../src/builtin/tags/comment.ts","../src/builtin/tags/include.ts","../src/builtin/tags/decrement.ts","../src/builtin/tags/cycle.ts","../src/builtin/tags/if.ts","../src/builtin/tags/increment.ts","../src/builtin/tags/layout.ts","../src/builtin/tags/block.ts","../src/builtin/tags/raw.ts","../src/builtin/tags/tablerow.ts","../src/builtin/tags/unless.ts","../src/builtin/tags/break.ts","../src/builtin/tags/continue.ts","../src/builtin/tags/index.ts","../src/builtin/filters/html.ts","../src/builtin/filters/string.ts","../src/builtin/filters/math.ts","../src/builtin/filters/url.ts","../src/builtin/filters/array.ts","../src/util/strftime.ts","../src/builtin/filters/date.ts","../src/builtin/filters/object.ts","../src/builtin/filters/index.ts","../src/liquid.ts"],"sourcesContent":["const toStr = Object.prototype.toString\nconst arrToStr = Array.prototype.toString\n\n/*\n * Checks if value is classified as a String primitive or object.\n * @param {any} value The value to check.\n * @return {Boolean} Returns true if value is a string, else false.\n */\nexport function isString (value: any) {\n return toStr.call(value) === '[object String]'\n}\n\nexport function isFunction (value: any) {\n return typeof value === 'function'\n}\n\nexport function promisify (fn: (arg1: T1, cb: (err: Error | null, result: T2) => void) => void): (arg1: T1) => Promise;\nexport function promisify (fn: (arg1: T1, arg2: T2, cb: (err: Error | null, result: T3) => void) => void):(arg1: T1, arg2: T2) => Promise;\nexport function promisify (fn: any) {\n return function (...args: any[]) {\n return new Promise((resolve, reject) => {\n fn(...args, (err: Error, result: any) => {\n err ? reject(err) : resolve(result)\n })\n })\n }\n}\n\nexport function stringify (value: any): string {\n if (isNil(value)) return ''\n if (isFunction(value.to_liquid)) return stringify(value.to_liquid())\n if (isFunction(value.toLiquid)) return stringify(value.toLiquid())\n if (isFunction(value.to_s)) return value.to_s()\n if ([toStr, arrToStr].indexOf(value.toString) > -1) return defaultToString(value)\n if (isFunction(value.toString)) return value.toString()\n return toStr.call(value)\n}\n\nfunction defaultToString (value: any): string {\n const cache: string[] = []\n return JSON.stringify(value, (key, value) => {\n if (isObject(value)) {\n if (cache.indexOf(value) !== -1) {\n return\n }\n cache.push(value)\n }\n return value\n })\n}\n\nexport function create (proto: T1): T2 {\n return Object.create(proto)\n}\n\nexport function isNil (value: any): boolean {\n return value === null || value === undefined\n}\n\nexport function isArray (value: any): boolean {\n // be compatible with IE 8\n return toStr.call(value) === '[object Array]'\n}\n\nexport function isError (value: any): boolean {\n const signature = toStr.call(value)\n // [object XXXError]\n return signature.substr(-6, 5) === 'Error' ||\n (typeof value.message === 'string' && typeof value.name === 'string')\n}\n\n/*\n * Iterates over own enumerable string keyed properties of an object and invokes iteratee for each property.\n * The iteratee is invoked with three arguments: (value, key, object).\n * Iteratee functions may exit iteration early by explicitly returning false.\n * @param {Object} object The object to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @return {Object} Returns object.\n */\nexport function forOwn (\n object: {[key: string]: T} | undefined,\n iteratee: ((val: T, key: string, obj: {[key: string]: T}) => boolean | void)\n) {\n object = object || {}\n for (const k in object) {\n if (object.hasOwnProperty(k)) {\n if (iteratee(object[k], k, object) === false) break\n }\n }\n return object\n}\n\nexport function last (arr: T[]): T;\nexport function last (arr: string): string;\nexport function last (arr: any[] | string): any | string {\n return arr[arr.length - 1]\n}\n\n/*\n * Checks if value is the language type of Object.\n * (e.g. arrays, functions, objects, regexes, new Number(0), and new String(''))\n * @param {any} value The value to check.\n * @return {Boolean} Returns true if value is an object, else false.\n */\nexport function isObject (value: any): boolean {\n const type = typeof value\n return value !== null && (type === 'object' || type === 'function')\n}\n\n/*\n * A function to create flexibly-numbered lists of integers,\n * handy for each and map loops. start, if omitted, defaults to 0; step defaults to 1.\n * Returns a list of integers from start (inclusive) to stop (exclusive),\n * incremented (or decremented) by step, exclusive.\n * Note that ranges that stop before they start are considered to be zero-length instead of\n * negative — if you'd like a negative range, use a negative step.\n */\nexport function range (start: number, stop?: number, step?: number) {\n if (stop === undefined) {\n stop = start\n start = 0\n }\n step = step || 1\n\n const arr: number[] = []\n for (let i = start; i < stop; i += step) {\n arr.push(i)\n }\n return arr\n}\n\nexport function padStart (str: any, length: number, ch: string = ' ') {\n str = String(str)\n let n = length - str.length\n while (n-- > 0) str = ch + str\n return str\n}\n","// quote related\nconst singleQuoted = /'[^']*'/\nconst doubleQuoted = /\"[^\"]*\"/\nexport const quoted = new RegExp(`${singleQuoted.source}|${doubleQuoted.source}`)\nexport const quoteBalanced = new RegExp(`(?:${quoted.source}|[^'\"])*`)\n\n// basic types\nexport const integer = /-?\\d+/\nexport const number = /[+-]?(?:\\d+\\.?\\d*|\\.?\\d+)/\nexport const bool = /true|false/\n\n// property access\nexport const identifier = /[\\w-]+[?]?/\nexport const subscript = new RegExp(`\\\\[(?:${quoted.source}|[\\\\w-\\\\.]+)\\\\]`)\nexport const literal = new RegExp(`(?:${quoted.source}|${bool.source}|${number.source})`)\nexport const variable = new RegExp(`${identifier.source}(?:\\\\.${identifier.source}|${subscript.source})*`)\n\n// range related\nexport const rangeLimit = new RegExp(`(?:${variable.source}|${number.source})`)\nexport const range = new RegExp(`\\\\(${rangeLimit.source}\\\\.\\\\.${rangeLimit.source}\\\\)`)\nexport const rangeCapture = new RegExp(`\\\\((${rangeLimit.source})\\\\.\\\\.(${rangeLimit.source})\\\\)`)\n\nexport const value = new RegExp(`(?:${variable.source}|${literal.source}|${range.source})`)\n\n// hash related\nexport const hash = new RegExp(`(?:${identifier.source})\\\\s*:\\\\s*(?:${value.source})`)\nexport const hashCapture = new RegExp(`(${identifier.source})\\\\s*:\\\\s*(${value.source})`, 'g')\n\n// full match\nexport const tagLine = new RegExp(`^\\\\s*(${identifier.source})\\\\s*([\\\\s\\\\S]*?)\\\\s*$`)\nexport const literalLine = new RegExp(`^${literal.source}$`, 'i')\nexport const variableLine = new RegExp(`^${variable.source}$`)\nexport const numberLine = new RegExp(`^${number.source}$`)\nexport const boolLine = new RegExp(`^${bool.source}$`, 'i')\nexport const quotedLine = new RegExp(`^${quoted.source}$`)\nexport const rangeLine = new RegExp(`^${rangeCapture.source}$`)\nexport const integerLine = new RegExp(`^${integer.source}$`)\n\n// filter related\nexport const valueDeclaration = new RegExp(`(?:${identifier.source}\\\\s*:\\\\s*)?${value.source}`)\nexport const valueList = new RegExp(`${valueDeclaration.source}(\\\\s*,\\\\s*${valueDeclaration.source})*`)\nexport const filter = new RegExp(`${identifier.source}(?:\\\\s*:\\\\s*${valueList.source})?`, 'g')\nexport const filterCapture = new RegExp(`(${identifier.source})(?:\\\\s*:\\\\s*(${valueList.source}))?`)\nexport const filterLine = new RegExp(`^${filterCapture.source}$`)\n\nexport const operators = [\n /\\s+or\\s+/,\n /\\s+and\\s+/,\n /==|!=|<=|>=|<|>|\\s+contains\\s+/\n]\n\nexport function isInteger (str: string) {\n return integerLine.test(str)\n}\n\nexport function isLiteral (str: string) {\n return literalLine.test(str)\n}\n\nexport function isRange (str: string) {\n return rangeLine.test(str)\n}\n\nexport function isVariable (str: string) {\n return variableLine.test(str)\n}\n\nexport function matchValue (str: string) {\n return value.exec(str)\n}\n\nexport function parseLiteral (str: string) {\n let res = str.match(numberLine)\n if (res) {\n return Number(str)\n }\n res = str.match(boolLine)\n if (res) {\n return str.toLowerCase() === 'true'\n }\n res = str.match(quotedLine)\n if (res) {\n return str.slice(1, -1)\n }\n throw new TypeError(`cannot parse '${str}' as literal`)\n}\n","import * as _ from './underscore'\nimport Token from 'src/parser/token'\nimport ITemplate from 'src/template/itemplate'\n\nabstract class LiquidError extends Error {\n private token: Token\n private originalError: Error\n constructor (err: Error, token: Token) {\n super(err.message)\n this.originalError = err\n this.token = token\n }\n protected update () {\n const err = this.originalError\n const context = mkContext(this.token)\n this.message = mkMessage(err.message, this.token)\n this.stack = this.message + '\\n' + context +\n '\\n' + this.stack + '\\nFrom ' + err.stack\n }\n}\n\nexport class TokenizationError extends LiquidError {\n constructor (message: string, token: Token) {\n super(new Error(message), token)\n this.name = 'TokenizationError'\n super.update()\n }\n}\n\nexport class ParseError extends LiquidError {\n constructor (err: Error, token: Token) {\n super(err, token)\n this.name = 'ParseError'\n this.message = err.message\n super.update()\n }\n}\n\nexport class RenderError extends LiquidError {\n constructor (err: Error, tpl: ITemplate) {\n super(err, tpl.token)\n this.name = 'RenderError'\n this.message = err.message\n super.update()\n }\n}\n\nexport class RenderBreakError extends Error {\n resolvedHTML: string = ''\n constructor (message: string) {\n super(message)\n this.name = 'RenderBreakError'\n this.message = message + ''\n }\n}\n\nexport class AssertionError extends Error {\n constructor (message: string) {\n super(message)\n this.name = 'AssertionError'\n this.message = message + ''\n }\n}\n\nfunction mkContext (token: Token) {\n const lines = token.input.split('\\n')\n const begin = Math.max(token.line - 2, 1)\n const end = Math.min(token.line + 3, lines.length)\n\n const context = _\n .range(begin, end + 1)\n .map(lineNumber => {\n const indicator = (lineNumber === token.line) ? '>> ' : ' '\n const num = _.padStart(String(lineNumber), String(end).length)\n const text = lines[lineNumber - 1]\n return `${indicator}${num}| ${text}`\n })\n .join('\\n')\n\n return context\n}\n\nfunction mkMessage (msg: string, token: Token) {\n if (token.file) msg += `, file:${token.file}`\n msg += `, line:${token.line}, col:${token.col}`\n return msg\n}\n","import { AssertionError } from './error'\n\nexport default function (predicate: any, message?: string) {\n if (!predicate) {\n message = message || `expect ${predicate} to be true`\n throw new AssertionError(message)\n }\n}\n","/* eslint-disable camelcase */\n\nimport * as _ from './util/underscore'\n\nexport interface LiquidOptions {\n /** `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 `[\".\"]` */\n root?: string | string[]\n /** `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 `\"\"`. */\n extname?: string\n /** `cache` indicates whether or not to cache resolved templates. Defaults to `false`. */\n cache?: boolean\n /** `dynamicPartials`: if set, treat `` parameter in `{%include filepath %}`, `{%layout filepath%}` as a variable, otherwise as a literal value. Defaults to `true`. */\n dynamicPartials?: boolean\n /** `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`. */\n strict_filters?: boolean\n /** `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`. */\n strict_variables?: boolean\n /** `trim_tag_right` is used to strip blank characters (including ` `, `\\t`, and `\\r`) from the right of tags (`{% %}`) until `\\n` (inclusive). Defaults to `false`. */\n trim_tag_right?: boolean\n /** `trim_tag_left` is similar to `trim_tag_right`, whereas the `\\n` is exclusive. Defaults to `false`. See Whitespace Control for details. */\n trim_tag_left?: boolean\n /** ``trim_output_right` is used to strip blank characters (including ` `, `\\t`, and `\\r`) from the right of values (`{{ }}`) until `\\n` (inclusive). Defaults to `false`. */\n trim_output_right?: boolean\n /** `trim_output_left` is similar to `trim_output_right`, whereas the `\\n` is exclusive. Defaults to `false`. See Whitespace Control for details. */\n trim_output_left?: boolean\n /** `tag_delimiter_left` and `tag_delimiter_right` are used to override the delimiter for liquid tags **/\n tag_delimiter_left?: string,\n tag_delimiter_right?: string,\n /** `output_delimiter_left` and `output_delimiter_right` are used to override the delimiter for liquid outputs **/\n output_delimiter_left?: string,\n output_delimiter_right?: string,\n /** `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`. */\n greedy?: boolean\n}\n\nexport interface NormalizedOptions extends LiquidOptions {\n root?: string[]\n}\n\nexport interface NormalizedFullOptions extends NormalizedOptions {\n root: string[]\n extname: string\n cache: boolean\n dynamicPartials: boolean\n strict_filters: boolean\n strict_variables: boolean\n trim_tag_right: boolean\n trim_tag_left: boolean\n trim_output_right: boolean\n trim_output_left: boolean\n tag_delimiter_left: string,\n tag_delimiter_right: string,\n output_delimiter_left: string,\n output_delimiter_right: string,\n greedy: boolean\n}\n\nconst defaultOptions: NormalizedFullOptions = {\n root: ['.'],\n cache: false,\n extname: '',\n dynamicPartials: true,\n trim_tag_right: false,\n trim_tag_left: false,\n trim_output_right: false,\n trim_output_left: false,\n greedy: true,\n tag_delimiter_left: '{%',\n tag_delimiter_right: '%}',\n output_delimiter_left: '{{',\n output_delimiter_right: '}}',\n strict_filters: false,\n strict_variables: false\n}\n\nexport function normalize (options?: LiquidOptions): NormalizedOptions {\n options = options || {}\n if (options.hasOwnProperty('root')) {\n options.root = normalizeStringArray(options.root)\n }\n return options as NormalizedOptions\n}\n\nexport function applyDefault (options?: NormalizedOptions): NormalizedFullOptions {\n return { ...defaultOptions, ...options }\n}\n\nfunction normalizeStringArray (value: any): string[] {\n if (_.isArray(value)) return value as string[]\n if (_.isString(value)) return [value as string]\n return []\n}\n","enum BlockMode {\n /* store rendered html into blocks */\n OUTPUT,\n /* output rendered html directly */\n STORE\n}\n\nexport default BlockMode\n","import * as _ from '../util/underscore'\nimport { __assign } from 'tslib'\nimport * as lexical from '../parser/lexical'\nimport assert from '../util/assert'\nimport { NormalizedFullOptions, applyDefault } from '../liquid-options'\nimport BlockMode from './block-mode'\nimport IContext from './icontext'\n\nexport default class Scope {\n opts: NormalizedFullOptions\n contexts: Array\n blocks: object = {}\n groups: {[key: string]: number} = {}\n blockMode: BlockMode = BlockMode.OUTPUT\n constructor (ctx: object = {}, opts?: NormalizedFullOptions) {\n this.opts = applyDefault(opts)\n this.contexts = [ctx || {}]\n }\n getAll () {\n return this.contexts.reduce((ctx, val) => __assign(ctx, val), {})\n }\n get (path: string): any {\n const paths = this.propertyAccessSeq(path)\n const scope = this.findContextFor(paths[0]) || _.last(this.contexts)\n return paths.reduce((value, key) => this.readProperty(value, key), scope)\n }\n set (path: string, v: any): void {\n const paths = this.propertyAccessSeq(path)\n let scope = this.findContextFor(paths[0]) || _.last(this.contexts)\n paths.some((key, i) => {\n if (!_.isObject(scope)) {\n return true\n }\n if (i === paths.length - 1) {\n scope[key] = v\n return true\n }\n if (undefined === scope[key]) {\n scope[key] = {}\n }\n scope = scope[key]\n return false\n })\n }\n unshift (ctx: object) {\n return this.contexts.unshift(ctx)\n }\n push (ctx: object) {\n return this.contexts.push(ctx)\n }\n pop (ctx?: object): object | undefined {\n if (!arguments.length) {\n return this.contexts.pop()\n }\n const i = this.contexts.findIndex(scope => scope === ctx)\n if (i === -1) {\n throw new TypeError('scope not found, cannot pop')\n }\n return this.contexts.splice(i, 1)[0]\n }\n findContextFor (key: string, filter: ((conttext: object) => boolean) = () => true) {\n for (let i = this.contexts.length - 1; i >= 0; i--) {\n const candidate = this.contexts[i]\n if (!filter(candidate)) continue\n if (key in candidate) {\n return candidate\n }\n }\n return null\n }\n private readProperty (obj: IContext, key: string) {\n let val\n if (_.isNil(obj)) {\n val = undefined\n } else {\n obj = toLiquid(obj)\n val = key === 'size' ? readSize(obj) : obj[key]\n if (_.isFunction(obj.liquid_method_missing)) {\n val = obj.liquid_method_missing!(key)\n }\n }\n if (_.isNil(val) && this.opts.strict_variables) {\n throw new TypeError(`undefined variable: ${key}`)\n }\n return val\n }\n\n /*\n * Parse property access sequence from access string\n * @example\n * accessSeq(\"foo.bar\") // ['foo', 'bar']\n * accessSeq(\"foo['bar']\") // ['foo', 'bar']\n * accessSeq(\"foo['b]r']\") // ['foo', 'b]r']\n * accessSeq(\"foo[bar.coo]\") // ['foo', 'bar'], for bar.coo == 'bar'\n */\n propertyAccessSeq (str: string) {\n str = String(str)\n const seq: string[] = []\n let name = ''\n let j\n let i = 0\n while (i < str.length) {\n switch (str[i]) {\n case '[':\n push()\n\n const delemiter = str[i + 1]\n if (/['\"]/.test(delemiter)) { // foo[\"bar\"]\n j = str.indexOf(delemiter, i + 2)\n assert(j !== -1, `unbalanced ${delemiter}: ${str}`)\n name = str.slice(i + 2, j)\n push()\n i = j + 2\n } else { // foo[bar.coo]\n j = matchRightBracket(str, i + 1)\n assert(j !== -1, `unbalanced []: ${str}`)\n name = str.slice(i + 1, j)\n if (!lexical.isInteger(name)) { // foo[bar] vs. foo[1]\n name = String(this.get(name))\n }\n push()\n i = j + 1\n }\n break\n case '.':// foo.bar, foo[0].bar\n push()\n i++\n break\n default:// foo.bar\n name += str[i]\n i++\n }\n }\n push()\n\n if (!seq.length) {\n throw new TypeError(`invalid path:\"${str}\"`)\n }\n return seq\n\n function push () {\n if (name.length) seq.push(name)\n name = ''\n }\n }\n}\n\nfunction toLiquid (obj: IContext) {\n if (_.isFunction(obj.to_liquid)) {\n return obj.to_liquid()\n }\n if (_.isFunction(obj.toLiquid)) {\n return obj.toLiquid()\n }\n return obj\n}\n\nfunction readSize (obj: IContext) {\n if (!_.isNil(obj.size)) return obj.size\n if (_.isArray(obj) || _.isString(obj)) return obj.length\n return obj.size\n}\n\nfunction matchRightBracket (str: string, begin: number) {\n let stack = 1 // count of '[' - count of ']'\n for (let i = begin; i < str.length; i++) {\n if (str[i] === '[') {\n stack++\n }\n if (str[i] === ']') {\n stack--\n if (stack === 0) {\n return i\n }\n }\n }\n return -1\n}\n","export class CaptureScope {}\nexport class AssignScope {}\nexport class IncrementScope {}\nexport class DecrementScope {}\n","import * as _ from '../util/underscore'\nimport { resolve, extname } from 'path'\nimport { stat, readFile } from 'fs'\nimport IFS from './ifs'\n\nconst statAsync = _.promisify(stat)\nconst readFileAsync = _.promisify(readFile)\n\nconst fs: IFS = {\n exists: (filepath: string) => {\n return statAsync(filepath).then(() => true).catch(() => false)\n },\n readFile: filepath => {\n return readFileAsync(filepath, 'utf8')\n },\n resolve: (root: string, file: string, ext: string) => {\n if (!extname(file)) file += ext\n return resolve(root, file)\n }\n}\n\nexport default fs\n","import DelimitedToken from 'src/parser/delimited-token'\nimport Token from 'src/parser/token'\nimport TagToken from 'src/parser/tag-token'\nimport { NormalizedFullOptions } from 'src/liquid-options'\n\nexport default function whiteSpaceCtrl (tokens: Token[], options: NormalizedFullOptions) {\n options = { greedy: true, ...options }\n let inRaw = false\n\n tokens.forEach((token: Token, i: number) => {\n if (shouldTrimLeft(token as DelimitedToken, inRaw, options)) {\n trimLeft(tokens[i - 1], options.greedy)\n }\n\n if (token.type === 'tag' && (token as TagToken).name === 'raw') inRaw = true\n if (token.type === 'tag' && (token as TagToken).name === 'endraw') inRaw = false\n\n if (shouldTrimRight(token as DelimitedToken, inRaw, options)) {\n trimRight(tokens[i + 1], options.greedy)\n }\n })\n}\n\nfunction shouldTrimLeft (token: DelimitedToken, inRaw: boolean, options: NormalizedFullOptions) {\n if (inRaw) return false\n if (token.type === 'tag') return token.trimLeft || options.trim_tag_left\n if (token.type === 'output') return token.trimLeft || options.trim_output_left\n}\n\nfunction shouldTrimRight (token: DelimitedToken, inRaw: boolean, options: NormalizedFullOptions) {\n if (inRaw) return false\n if (token.type === 'tag') return token.trimRight || options.trim_tag_right\n if (token.type === 'output') return token.trimRight || options.trim_output_right\n}\n\nfunction trimLeft (token: Token, greedy: boolean) {\n if (!token || token.type !== 'html') return\n\n const rLeft = greedy ? /\\s+$/g : /[\\t\\r ]*$/g\n token.value = token.value.replace(rLeft, '')\n}\n\nfunction trimRight (token: Token, greedy: boolean) {\n if (!token || token.type !== 'html') return\n\n const rRight = greedy ? /^\\s+/g : /^[\\t\\r ]*\\n?/g\n token.value = token.value.replace(rRight, '')\n}\n","export default class Token {\n type: string = 'notset'\n line: number\n col: number\n raw: string\n input: string\n file?: string\n value: string\n constructor (raw: string, input: string, line: number, col: number, file?: string) {\n this.col = col\n this.line = line\n this.raw = raw\n this.value = raw\n this.input = input\n this.file = file\n }\n}\n","import Token from './token'\n\nexport default class HTMLToken extends Token {\n constructor (str: string, input: string, line: number, col: number, file?: string) {\n super(str, input, line, col, file)\n this.type = 'html'\n this.value = str\n }\n}\n","import Token from './token'\nimport { last } from 'src/util/underscore'\n\nexport default class DelimitedToken extends Token {\n trimLeft: boolean\n trimRight: boolean\n constructor (raw: string, value: string, input: string, line: number, pos: number, file?: string) {\n super(raw, input, line, pos, file)\n this.trimLeft = value[0] === '-'\n this.trimRight = last(value) === '-'\n this.value = value\n .slice(\n this.trimLeft ? 1 : 0,\n this.trimRight ? -1 : value.length\n )\n .trim()\n }\n}\n","import DelimitedToken from './delimited-token'\nimport { TokenizationError } from 'src/util/error'\nimport * as lexical from './lexical'\n\nexport default class TagToken extends DelimitedToken {\n name: string\n args: string\n constructor (raw: string, value: string, input: string, line: number, pos: number, file?: string) {\n super(raw, value, input, line, pos, file)\n this.type = 'tag'\n const match = this.value.match(lexical.tagLine)\n if (!match) {\n throw new TokenizationError(`illegal tag syntax`, this)\n }\n this.name = match[1]\n this.args = match[2]\n }\n}\n","import DelimitedToken from './delimited-token'\n\nexport default class OutputToken extends DelimitedToken {\n constructor (raw: string, value: string, input: string, line: number, pos: number, file?: string) {\n super(raw, value, input, line, pos, file)\n this.type = 'output'\n }\n}\n","import whiteSpaceCtrl from './whitespace-ctrl'\nimport HTMLToken from './html-token'\nimport TagToken from './tag-token'\nimport Token from './token'\nimport OutputToken from './output-token'\nimport { TokenizationError } from 'src/util/error'\nimport { NormalizedFullOptions, applyDefault } from '../liquid-options'\n\nenum ParseState { HTML, OUTPUT, TAG }\n\nexport default class Tokenizer {\n options: NormalizedFullOptions\n constructor (options?: NormalizedFullOptions) {\n this.options = applyDefault(options)\n }\n tokenize (input: string, file?: string) {\n const tokens: Token[] = []\n const tagL = this.options.tag_delimiter_left\n const tagR = this.options.tag_delimiter_right\n const outputL = this.options.output_delimiter_left\n const outputR = this.options.output_delimiter_right\n let p = 0\n let curLine = 1\n let state = ParseState.HTML\n let buffer = ''\n let lineBegin = 0\n let line = 1\n let col = 1\n\n while (p < input.length) {\n if (input[p] === '\\n') {\n curLine++\n lineBegin = p + 1\n }\n if (state === ParseState.HTML) {\n if (input.substr(p, outputL.length) === outputL) {\n if (buffer) tokens.push(new HTMLToken(buffer, input, line, col, file))\n buffer = outputL\n line = curLine\n col = p - lineBegin + 1\n p += outputL.length\n state = ParseState.OUTPUT\n continue\n } else if (input.substr(p, tagL.length) === tagL) {\n if (buffer) tokens.push(new HTMLToken(buffer, input, line, col, file))\n buffer = tagL\n line = curLine\n col = p - lineBegin + 1\n p += tagL.length\n state = ParseState.TAG\n continue\n }\n } else if (state === ParseState.OUTPUT && input.substr(p, outputR.length) === outputR) {\n buffer += outputR\n tokens.push(new OutputToken(buffer, buffer.slice(outputL.length, -outputR.length), input, line, col, file))\n p += outputR.length\n buffer = ''\n line = curLine\n col = p - lineBegin + 1\n state = ParseState.HTML\n continue\n } else if (input.substr(p, tagR.length) === tagR) {\n buffer += tagR\n tokens.push(new TagToken(buffer, buffer.slice(tagL.length, -tagR.length), input, line, col, file))\n p += tagR.length\n buffer = ''\n line = curLine\n col = p - lineBegin + 1\n state = ParseState.HTML\n continue\n }\n buffer += input[p++]\n }\n if (state !== ParseState.HTML) {\n const t = state === ParseState.OUTPUT ? 'output' : 'tag'\n const str = buffer.length > 16 ? buffer.slice(0, 13) + '...' : buffer\n throw new TokenizationError(\n `${t} \"${str}\" not closed`,\n new Token(buffer, input, line, col, file)\n )\n }\n if (buffer) tokens.push(new HTMLToken(buffer, input, line, col, file))\n\n whiteSpaceCtrl(tokens, this.options)\n return tokens\n }\n}\n","import { RenderError } from 'src/util/error'\nimport assert from 'src/util/assert'\nimport Scope from 'src/scope/scope'\nimport ITemplate from 'src/template/itemplate'\n\nexport default class Render {\n async renderTemplates (templates: ITemplate[], scope: Scope) {\n assert(scope, 'unable to evalTemplates: scope undefined')\n\n let html = ''\n for (const tpl of templates) {\n try {\n html += await tpl.render(scope)\n } catch (e) {\n if (e.name === 'RenderBreakError') {\n e.resolvedHTML = html\n throw e\n }\n throw e.name === 'RenderError' ? e : new RenderError(e, tpl)\n }\n }\n return html\n }\n}\n","import * as lexical from '../parser/lexical'\nimport assert from '../util/assert'\nimport Scope from 'src/scope/scope'\nimport { range } from 'src/util/underscore'\n\nconst operators = {\n '==': (l: any, r: any) => l === r,\n '!=': (l: any, r: any) => l !== r,\n '>': (l: any, r: any) => l !== null && r !== null && l > r,\n '<': (l: any, r: any) => l !== null && r !== null && l < r,\n '>=': (l: any, r: any) => l !== null && r !== null && l >= r,\n '<=': (l: any, r: any) => l !== null && r !== null && l <= r,\n 'contains': (l: any, r: any) => {\n if (!l) return false\n if (typeof l.indexOf !== 'function') return false\n return l.indexOf(r) > -1\n },\n 'and': (l: any, r: any) => isTruthy(l) && isTruthy(r),\n 'or': (l: any, r: any) => isTruthy(l) || isTruthy(r)\n}\n\nexport function evalExp (exp: string, scope: Scope): any {\n assert(scope, 'unable to evalExp: scope undefined')\n const operatorREs = lexical.operators\n let match\n for (let i = 0; i < operatorREs.length; i++) {\n const operatorRE = operatorREs[i]\n const expRE = new RegExp(`^(${lexical.quoteBalanced.source})(${operatorRE.source})(${lexical.quoteBalanced.source})$`)\n if ((match = exp.match(expRE))) {\n const l = evalExp(match[1], scope)\n const op = operators[match[2].trim()]\n const r = evalExp(match[3], scope)\n return op(l, r)\n }\n }\n\n if ((match = exp.match(lexical.rangeLine))) {\n const low = evalValue(match[1], scope)\n const high = evalValue(match[2], scope)\n return range(low, high + 1)\n }\n\n return evalValue(exp, scope)\n}\n\nexport function evalValue (str: string, scope: Scope) {\n str = str && str.trim()\n if (!str) return undefined\n\n if (lexical.isLiteral(str)) {\n return lexical.parseLiteral(str)\n }\n if (lexical.isVariable(str)) {\n return scope.get(str)\n }\n throw new TypeError(`cannot eval '${str}' as value`)\n}\n\nexport function isTruthy (val: any): boolean {\n return !isFalsy(val)\n}\n\nexport function isFalsy (val: any): boolean {\n return val === false || undefined === val || val === null\n}\n","import { hashCapture } from 'src/parser/lexical'\nimport { evalValue } from 'src/render/syntax'\nimport Scope from 'src/scope/scope'\n\n/**\n * Key-Value Pairs Representing Tag Arguments\n * Example:\n * For the markup `{% include 'head.html' foo='bar' %}`,\n * hash['foo'] === 'bar'\n */\nexport default class Hash {\n [key: string]: any\n constructor (markup: string, scope: Scope) {\n let match\n hashCapture.lastIndex = 0\n while ((match = hashCapture.exec(markup))) {\n const k = match[1]\n const v = match[2]\n this[k] = evalValue(v, scope)\n }\n }\n}\n","export default abstract class Template {\n token: T;\n constructor (token: T) {\n this.token = token\n }\n}\n","import { create, stringify } from 'src/util/underscore'\nimport assert from 'src/util/assert'\nimport Scope from 'src/scope/scope'\nimport ITagImpl from './itag-impl'\nimport ITagImplOptions from './itag-impl-options'\nimport Liquid from 'src/liquid'\nimport Hash from './hash'\nimport Template from 'src/template/template'\nimport ITemplate from 'src/template/itemplate'\nimport TagToken from 'src/parser/tag-token'\nimport Token from 'src/parser/token'\n\nexport default class Tag extends Template implements ITemplate {\n name: string\n private impl: ITagImpl\n static impls: { [key: string]: ITagImplOptions } = {}\n\n constructor (token: TagToken, tokens: Token[], liquid: Liquid) {\n super(token)\n this.name = token.name\n\n const impl = Tag.impls[token.name]\n assert(impl, `tag ${token.name} not found`)\n this.impl = create(impl)\n this.impl.liquid = liquid\n if (this.impl.parse) {\n this.impl.parse(token, tokens)\n }\n }\n async render (scope: Scope) {\n const hash = new Hash(this.token.args, scope)\n const impl = this.impl\n if (typeof impl.render !== 'function') {\n return ''\n }\n const html = await impl.render(scope, hash)\n return stringify(html)\n }\n static register (name: string, tag: ITagImplOptions) {\n Tag.impls[name] = tag\n }\n static clear () {\n Tag.impls = {}\n }\n}\n","import assert from 'src/util/assert'\nimport * as lexical from 'src/parser/lexical'\nimport { evalValue } from 'src/render/syntax'\nimport Scope from 'src/scope/scope'\nimport { FilterImpl } from './filter-impl'\n\nconst valueRE = new RegExp(`${lexical.value.source}`, 'g')\n\nexport default class Filter {\n name: string\n impl: FilterImpl\n args: string[]\n private static impls: {[key: string]: FilterImpl} = {}\n\n constructor (str: string, strictFilters: boolean = false) {\n const match = lexical.filterLine.exec(str) as string[]\n assert(match, 'illegal filter: ' + str)\n\n const name = match[1]\n const argList = match[2] || ''\n const impl = Filter.impls[name]\n if (!impl && strictFilters) throw new TypeError(`undefined filter: ${name}`)\n\n this.name = name\n this.impl = impl || (x => x)\n this.args = this.parseArgs(argList)\n }\n parseArgs (argList: string): string[] {\n let match; const args: string[] = []\n while ((match = valueRE.exec(argList.trim()))) {\n const v = match[0]\n const re = new RegExp(`${v}\\\\s*:`, 'g')\n const keyMatch = re.exec(match.input)\n const currentMatchIsKey = keyMatch && keyMatch.index === match.index\n currentMatchIsKey ? args.push(`'${v}'`) : args.push(v)\n }\n return args\n }\n render (value: any, scope: Scope): any {\n const args = this.args.map(arg => evalValue(arg, scope))\n return this.impl.apply(null, [value, ...args])\n }\n static register (name: string, filter: FilterImpl) {\n Filter.impls[name] = filter\n }\n static clear () {\n Filter.impls = {}\n }\n}\n","import Token from 'src/parser/token'\nimport ITemplate from 'src/template/itemplate'\nimport TagToken from './tag-token'\n\ntype ParseToken = ((token: Token, remainTokens: Array) => ITemplate)\n\nexport default class ParseStream {\n private tokens: Array\n private handlers: {[key: string]: (arg: any) => void} = {}\n private stopRequested: boolean = false\n private parseToken: ParseToken\n\n constructor (tokens: Array, parseToken: ParseToken) {\n this.tokens = tokens\n this.parseToken = parseToken\n }\n on (name: string, cb: (arg: T) => void): ParseStream {\n this.handlers[name] = cb\n return this\n }\n trigger (event: string, arg?: T) {\n const h = this.handlers[event]\n if (typeof h === 'function') {\n h(arg)\n return true\n }\n return false\n }\n start () {\n this.trigger('start')\n let token: Token | undefined\n while (!this.stopRequested && (token = this.tokens.shift())) {\n if (this.trigger('token', token)) continue\n if (token.type === 'tag' && this.trigger(`tag:${(token).name}`, token)) {\n continue\n }\n const template = this.parseToken(token, this.tokens)\n this.trigger('template', template)\n }\n if (!this.stopRequested) this.trigger('end')\n return this\n }\n stop () {\n this.stopRequested = true\n return this\n }\n}\n","import { evalExp } from 'src/render/syntax'\nimport * as lexical from 'src/parser/lexical'\nimport assert from 'src/util/assert'\nimport Filter from './filter/filter'\nimport Scope from 'src/scope/scope'\n\nexport default class {\n initial: any\n filters: Array = []\n constructor (str: string, strictFilters?: boolean) {\n let match: RegExpExecArray | null = lexical.matchValue(str) as RegExpExecArray\n assert(match, `illegal value string: ${str}`)\n\n this.initial = match[0]\n str = str.substr(match.index + match[0].length)\n\n while ((match = lexical.filter.exec(str))) {\n this.filters.push(new Filter(match[0].trim(), strictFilters))\n }\n }\n value (scope: Scope) {\n return this.filters.reduce(\n (prev, filter) => filter.render(prev, scope),\n evalExp(this.initial, scope))\n }\n}\n","import Value from './value'\nimport { stringify } from 'src/util/underscore'\nimport Template from 'src/template/template'\nimport ITemplate from 'src/template/itemplate'\nimport Scope from 'src/scope/scope'\nimport OutputToken from 'src/parser/output-token'\n\nexport default class Output extends Template implements ITemplate {\n value: Value\n constructor (token: OutputToken, strictFilters?: boolean) {\n super(token)\n this.value = new Value(token.value, strictFilters)\n }\n async render (scope: Scope): Promise {\n const html = await this.value.value(scope)\n return stringify(html)\n }\n}\n","import Template from 'src/template/template'\nimport ITemplate from 'src/template/itemplate'\nimport HTMLToken from 'src/parser/html-token'\n\nexport default class extends Template implements ITemplate {\n str: string\n constructor (token: HTMLToken) {\n super(token)\n this.str = token.value\n }\n async render (): Promise {\n return this.str\n }\n}\n","import { ParseError } from '../util/error'\nimport Liquid from 'src/liquid'\nimport ParseStream from './parse-stream'\nimport Token from './token'\nimport TagToken from './tag-token'\nimport OutputToken from './output-token'\nimport Tag from 'src/template/tag/tag'\nimport Output from 'src/template/output'\nimport HTML from 'src/template/html'\nimport ITemplate from 'src/template/itemplate'\n\nexport default class Parser {\n liquid: Liquid\n\n constructor (liquid: Liquid) {\n this.liquid = liquid\n }\n parse (tokens: Array) {\n let token\n const templates: ITemplate[] = []\n while ((token = tokens.shift())) {\n templates.push(this.parseToken(token, tokens))\n }\n return templates\n }\n parseToken (token: Token, remainTokens: Array) {\n try {\n if (token.type === 'tag') {\n return new Tag(token as TagToken, remainTokens, this.liquid)\n }\n if (token.type === 'output') {\n return new Output(token as OutputToken, this.liquid.options.strict_filters)\n }\n return new HTML(token)\n } catch (e) {\n throw new ParseError(e, token)\n }\n }\n parseStream (tokens: Array) {\n return new ParseStream(tokens, (token, tokens) => this.parseToken(token, tokens))\n }\n}\n","import assert from 'src/util/assert'\nimport { identifier } from 'src/parser/lexical'\nimport { AssignScope } from 'src/scope/scopes'\nimport TagToken from 'src/parser/tag-token'\nimport Scope from 'src/scope/scope'\nimport ITagImplOptions from 'src/template/tag/itag-impl-options'\n\nconst re = new RegExp(`(${identifier.source})\\\\s*=([^]*)`)\n\nexport default {\n parse: function (token: TagToken) {\n const match = token.args.match(re) as RegExpMatchArray\n assert(match, `illegal token ${token.raw}`)\n this.key = match[1]\n this.value = match[2]\n },\n render: function (scope: Scope) {\n const ctx = new AssignScope()\n ctx[this.key] = this.liquid.evalValue(this.value, scope)\n scope.push(ctx)\n return Promise.resolve('')\n }\n} as ITagImplOptions\n","/*\n * Call functions in serial until someone rejected.\n * @param {Array} iterable the array to iterate with.\n * @param {Array} iteratee returns a new promise.\n * The iteratee is invoked with three arguments: (value, index, iterable).\n */\nexport function mapSeries (\n iterable: T1[],\n iteratee: (item: T1, idx: number, iterable: T1[]) => Promise | T2\n): Promise {\n let ret = Promise.resolve(0)\n const result: T2[] = []\n iterable.forEach(function (item, idx) {\n ret = ret\n .then(() => iteratee(item, idx, iterable))\n .then(x => result.push(x))\n })\n return ret.then(() => result)\n}\n","import { mapSeries } from 'src/util/promise'\nimport { isString, isObject, isArray } from 'src/util/underscore'\nimport { evalExp } from 'src/render/syntax'\nimport assert from 'src/util/assert'\nimport { identifier, value, hash } from 'src/parser/lexical'\nimport TagToken from 'src/parser/tag-token'\nimport Token from 'src/parser/token'\nimport Scope from 'src/scope/scope'\nimport Hash from 'src/template/tag/hash'\nimport ITemplate from 'src/template/itemplate'\nimport ITagImplOptions from 'src/template/tag/itag-impl-options'\nimport ParseStream from 'src/parser/parse-stream'\n\nconst re = new RegExp(`^(${identifier.source})\\\\s+in\\\\s+` +\n `(${value.source})` +\n `(?:\\\\s+${hash.source})*` +\n `(?:\\\\s+(reversed))?` +\n `(?:\\\\s+${hash.source})*$`)\n\nexport default {\n type: 'block',\n parse: function (tagToken: TagToken, remainTokens: Token[]) {\n const match = re.exec(tagToken.args) as RegExpExecArray\n assert(match, `illegal tag: ${tagToken.raw}`)\n this.variable = match[1]\n this.collection = match[2]\n this.reversed = !!match[3]\n\n this.templates = []\n this.elseTemplates = []\n\n let p\n const stream: ParseStream = this.liquid.parser.parseStream(remainTokens)\n .on('start', () => (p = this.templates))\n .on('tag:else', () => (p = this.elseTemplates))\n .on('tag:endfor', () => stream.stop())\n .on('template', (tpl: ITemplate) => p.push(tpl))\n .on('end', () => {\n throw new Error(`tag ${tagToken.raw} not closed`)\n })\n\n stream.start()\n },\n render: async function (scope: Scope, hash: Hash) {\n let collection = evalExp(this.collection, scope)\n\n if (!isArray(collection)) {\n if (isString(collection) && collection.length > 0) {\n collection = [collection] as string[]\n } else if (isObject(collection)) {\n collection = Object.keys(collection).map((key) => [key, collection[key]]) as Array<[string, any]>\n }\n }\n if (!isArray(collection) || !collection.length) {\n return this.liquid.renderer.renderTemplates(this.elseTemplates, scope)\n }\n\n const offset = hash.offset || 0\n const limit = (hash.limit === undefined) ? collection.length : hash.limit\n\n collection = collection.slice(offset, offset + limit)\n if (this.reversed) collection.reverse()\n\n const contexts = collection.map((item: string, i: number) => {\n const ctx = {}\n ctx[this.variable] = item\n ctx['forloop'] = {\n first: i === 0,\n index: i + 1,\n index0: i,\n last: i === collection.length - 1,\n length: collection.length,\n rindex: collection.length - i,\n rindex0: collection.length - i - 1\n }\n return ctx\n })\n\n let html = ''\n let finished = false\n await mapSeries(contexts, async context => {\n if (finished) return\n\n scope.push(context)\n try {\n html += await this.liquid.renderer.renderTemplates(this.templates, scope)\n } catch (e) {\n if (e.name === 'RenderBreakError') {\n html += e.resolvedHTML\n if (e.message === 'break') {\n finished = true\n }\n } else throw e\n }\n scope.pop(context)\n })\n return html\n }\n}\n","import assert from 'src/util/assert'\nimport { identifier } from 'src/parser/lexical'\nimport { CaptureScope } from 'src/scope/scopes'\nimport TagToken from 'src/parser/tag-token'\nimport Token from 'src/parser/token'\nimport Scope from 'src/scope/scope'\nimport ITagImplOptions from 'src/template/tag/itag-impl-options'\n\nconst re = new RegExp(`(${identifier.source})`)\n\nexport default {\n parse: function (tagToken: TagToken, remainTokens: Token[]) {\n const match = tagToken.args.match(re) as RegExpMatchArray\n assert(match, `${tagToken.args} not valid identifier`)\n\n this.variable = match[1]\n this.templates = []\n\n const stream = this.liquid.parser.parseStream(remainTokens)\n stream.on('tag:endcapture', () => stream.stop())\n .on('template', (tpl) => this.templates.push(tpl))\n .on('end', () => {\n throw new Error(`tag ${tagToken.raw} not closed`)\n })\n stream.start()\n },\n render: async function (scope: Scope) {\n const html = await this.liquid.renderer.renderTemplates(this.templates, scope)\n const ctx = new CaptureScope()\n ctx[this.variable] = html\n scope.push(ctx)\n }\n} as ITagImplOptions\n","import { evalExp } from 'src/render/syntax'\nimport TagToken from 'src/parser/tag-token'\nimport Token from 'src/parser/token'\nimport Scope from 'src/scope/scope'\nimport ITemplate from 'src/template/itemplate'\nimport ITagImplOptions from 'src/template/tag/itag-impl-options'\nimport ParseStream from 'src/parser/parse-stream'\n\nexport default {\n parse: function (tagToken: TagToken, remainTokens: Token[]) {\n this.cond = tagToken.args\n this.cases = []\n this.elseTemplates = []\n\n let p: ITemplate[] = []\n const stream: ParseStream = this.liquid.parser.parseStream(remainTokens)\n .on('tag:when', (token: TagToken) => {\n this.cases.push({\n val: token.args,\n templates: p = []\n })\n })\n .on('tag:else', () => (p = this.elseTemplates))\n .on('tag:endcase', () => stream.stop())\n .on('template', (tpl: ITemplate) => p.push(tpl))\n .on('end', () => {\n throw new Error(`tag ${tagToken.raw} not closed`)\n })\n\n stream.start()\n },\n\n render: function (scope: Scope) {\n for (let i = 0; i < this.cases.length; i++) {\n const branch = this.cases[i]\n const val = evalExp(branch.val, scope)\n const cond = evalExp(this.cond, scope)\n if (val === cond) {\n return this.liquid.renderer.renderTemplates(branch.templates, scope)\n }\n }\n return this.liquid.renderer.renderTemplates(this.elseTemplates, scope)\n }\n} as ITagImplOptions\n","import TagToken from 'src/parser/tag-token'\nimport Token from 'src/parser/token'\nimport ITagImplOptions from 'src/template/tag/itag-impl-options'\n\nexport default {\n parse: function (tagToken: TagToken, remainTokens: Token[]) {\n const stream = this.liquid.parser.parseStream(remainTokens)\n stream\n .on('token', (token: TagToken) => {\n if (token.name === 'endcomment') stream.stop()\n })\n .on('end', () => {\n throw new Error(`tag ${tagToken.raw} not closed`)\n })\n stream.start()\n }\n} as ITagImplOptions\n","import assert from 'src/util/assert'\nimport { value, quotedLine } from 'src/parser/lexical'\nimport { evalValue } from 'src/render/syntax'\nimport BlockMode from 'src/scope/block-mode'\nimport TagToken from 'src/parser/tag-token'\nimport Scope from 'src/scope/scope'\nimport Hash from 'src/template/tag/hash'\nimport ITagImplOptions from 'src/template/tag/itag-impl-options'\n\nconst staticFileRE = /[^\\s,]+/\nconst withRE = new RegExp(`with\\\\s+(${value.source})`)\n\nexport default {\n parse: function (token: TagToken) {\n let match = staticFileRE.exec(token.args)\n if (match) {\n this.staticValue = match[0]\n }\n\n match = value.exec(token.args)\n if (match) {\n this.value = match[0]\n }\n\n match = withRE.exec(token.args)\n if (match) {\n this.with = match[1]\n }\n },\n render: async function (scope: Scope, hash: Hash) {\n let filepath\n if (scope.opts.dynamicPartials) {\n if (quotedLine.exec(this.value)) {\n const template = this.value.slice(1, -1)\n filepath = await this.liquid.parseAndRender(template, scope.getAll(), scope.opts)\n } else {\n filepath = evalValue(this.value, scope)\n }\n } else {\n filepath = this.staticValue\n }\n assert(filepath, `cannot include with empty filename`)\n\n const originBlocks = scope.blocks\n const originBlockMode = scope.blockMode\n\n scope.blocks = {}\n scope.blockMode = BlockMode.OUTPUT\n if (this.with) {\n hash[filepath] = evalValue(this.with, scope)\n }\n const templates = await this.liquid.getTemplate(filepath, scope.opts)\n scope.push(hash)\n const html = await this.liquid.renderer.renderTemplates(templates, scope)\n scope.pop(hash)\n scope.blocks = originBlocks\n scope.blockMode = originBlockMode\n return html\n }\n}\n","import assert from 'src/util/assert'\nimport { identifier } from 'src/parser/lexical'\nimport { CaptureScope, AssignScope, DecrementScope } from 'src/scope/scopes'\nimport TagToken from 'src/parser/tag-token'\nimport Scope from 'src/scope/scope'\nimport ITagImplOptions from 'src/template/tag/itag-impl-options'\n\nexport default {\n parse: function (token: TagToken) {\n const match = token.args.match(identifier) as RegExpMatchArray\n assert(match, `illegal identifier ${token.args}`)\n this.variable = match[0]\n },\n render: function (scope: Scope) {\n let context = scope.findContextFor(\n this.variable,\n ctx => {\n return !(ctx instanceof CaptureScope) && !(ctx instanceof AssignScope)\n }\n )\n if (!context) {\n context = new DecrementScope()\n scope.unshift(context)\n }\n if (typeof context[this.variable] !== 'number') {\n context[this.variable] = 0\n }\n return --context[this.variable]\n }\n} as ITagImplOptions\n","import assert from 'src/util/assert'\nimport { value as rValue } from 'src/parser/lexical'\nimport { evalValue } from 'src/render/syntax'\nimport TagToken from 'src/parser/tag-token'\nimport Scope from 'src/scope/scope'\nimport ITagImplOptions from 'src/template/tag/itag-impl-options'\n\nconst groupRE = new RegExp(`^(?:(${rValue.source})\\\\s*:\\\\s*)?(.*)$`)\nconst candidatesRE = new RegExp(rValue.source, 'g')\n\nexport default {\n parse: function (tagToken: TagToken) {\n let match: RegExpExecArray | null = groupRE.exec(tagToken.args) as RegExpExecArray\n assert(match, `illegal tag: ${tagToken.raw}`)\n\n this.group = match[1] || ''\n const candidates = match[2]\n\n this.candidates = []\n\n while ((match = candidatesRE.exec(candidates))) {\n this.candidates.push(match[0])\n }\n assert(this.candidates.length, `empty candidates: ${tagToken.raw}`)\n },\n\n render: function (scope: Scope) {\n const group = evalValue(this.group, scope)\n const fingerprint = `cycle:${group}:` + this.candidates.join(',')\n const groups = scope.groups\n let idx = groups[fingerprint]\n\n if (idx === undefined) {\n idx = groups[fingerprint] = 0\n }\n\n const candidate = this.candidates[idx]\n idx = (idx + 1) % this.candidates.length\n groups[fingerprint] = idx\n\n return evalValue(candidate, scope)\n }\n}\n","import { evalExp, isTruthy } from 'src/render/syntax'\nimport TagToken from 'src/parser/tag-token'\nimport Token from 'src/parser/token'\nimport Scope from 'src/scope/scope'\nimport ITemplate from 'src/template/itemplate'\nimport ITagImplOptions from 'src/template/tag/itag-impl-options'\nimport ParseStream from 'src/parser/parse-stream'\n\nexport default {\n parse: function (tagToken: TagToken, remainTokens: Token[]) {\n this.branches = []\n this.elseTemplates = []\n\n let p\n const stream: ParseStream = this.liquid.parser.parseStream(remainTokens)\n .on('start', () => this.branches.push({\n cond: tagToken.args,\n templates: (p = [])\n }))\n .on('tag:elsif', (token: TagToken) => {\n this.branches.push({\n cond: token.args,\n templates: p = []\n })\n })\n .on('tag:else', () => (p = this.elseTemplates))\n .on('tag:endif', () => stream.stop())\n .on('template', (tpl: ITemplate) => p.push(tpl))\n .on('end', () => {\n throw new Error(`tag ${tagToken.raw} not closed`)\n })\n\n stream.start()\n },\n\n render: function (scope: Scope) {\n for (const branch of this.branches) {\n const cond = evalExp(branch.cond, scope)\n if (isTruthy(cond)) {\n return this.liquid.renderer.renderTemplates(branch.templates, scope)\n }\n }\n return this.liquid.renderer.renderTemplates(this.elseTemplates, scope)\n }\n} as ITagImplOptions\n","import assert from 'src/util/assert'\nimport { identifier } from 'src/parser/lexical'\nimport { CaptureScope, AssignScope, IncrementScope } from 'src/scope/scopes'\nimport ITagImplOptions from 'src/template/tag/itag-impl-options'\n\nexport default {\n parse: function (token) {\n const match = token.args.match(identifier)\n assert(match, `illegal identifier ${token.args}`)\n this.variable = match![0]\n },\n render: function (scope) {\n let context = scope.findContextFor(\n this.variable,\n ctx => {\n return !(ctx instanceof CaptureScope) && !(ctx instanceof AssignScope)\n }\n )\n if (!context) {\n context = new IncrementScope()\n scope.unshift(context)\n }\n if (typeof context[this.variable] !== 'number') {\n context[this.variable] = 0\n }\n const val = context[this.variable]\n context[this.variable]++\n return val\n }\n} as ITagImplOptions\n","import assert from 'src/util/assert'\nimport { value as rValue } from 'src/parser/lexical'\nimport { evalValue } from 'src/render/syntax'\nimport BlockMode from 'src/scope/block-mode'\nimport TagToken from 'src/parser/tag-token'\nimport Token from 'src/parser/token'\nimport Scope from 'src/scope/scope'\nimport Hash from 'src/template/tag/hash'\nimport ITagImplOptions from 'src/template/tag/itag-impl-options'\n\nconst staticFileRE = /\\S+/\n\nexport default {\n parse: function (token: TagToken, remainTokens: Token[]) {\n let match = staticFileRE.exec(token.args)\n if (match) {\n this.staticLayout = match[0]\n }\n\n match = rValue.exec(token.args)\n if (match) {\n this.layout = match[0]\n }\n\n this.tpls = this.liquid.parser.parse(remainTokens)\n },\n render: async function (scope: Scope, hash: Hash) {\n const layout = scope.opts.dynamicPartials\n ? evalValue(this.layout, scope)\n : this.staticLayout\n assert(layout, `cannot apply layout with empty filename`)\n\n // render the remaining tokens immediately\n scope.blockMode = BlockMode.STORE\n const html = await this.liquid.renderer.renderTemplates(this.tpls, scope)\n if (scope.blocks[''] === undefined) {\n scope.blocks[''] = html\n }\n const templates = await this.liquid.getTemplate(layout, scope.opts)\n scope.push(hash)\n scope.blockMode = BlockMode.OUTPUT\n const partial = await this.liquid.renderer.renderTemplates(templates, scope)\n scope.pop(hash)\n return partial\n }\n} as ITagImplOptions\n","import BlockMode from 'src/scope/block-mode'\nimport TagToken from 'src/parser/tag-token'\nimport Token from 'src/parser/token'\nimport ITemplate from 'src/template/itemplate'\nimport Scope from 'src/scope/scope'\nimport ITagImplOptions from 'src/template/tag/itag-impl-options'\nimport ParseStream from 'src/parser/parse-stream'\n\nexport default {\n parse: function (token: TagToken, remainTokens: Token[]) {\n const match = /\\w+/.exec(token.args)\n this.block = match ? match[0] : ''\n this.tpls = [] as ITemplate[]\n const stream: ParseStream = this.liquid.parser.parseStream(remainTokens)\n .on('tag:endblock', () => stream.stop())\n .on('template', (tpl: ITemplate) => this.tpls.push(tpl))\n .on('end', () => {\n throw new Error(`tag ${token.raw} not closed`)\n })\n stream.start()\n },\n render: async function (scope: Scope) {\n const childDefined = scope.blocks[this.block]\n const html = childDefined !== undefined\n ? childDefined\n : await this.liquid.renderer.renderTemplates(this.tpls, scope)\n\n if (scope.blockMode === BlockMode.STORE) {\n scope.blocks[this.block] = html\n return ''\n }\n return html\n }\n} as ITagImplOptions\n","import TagToken from 'src/parser/tag-token'\nimport Token from 'src/parser/token'\nimport ITagImplOptions from 'src/template/tag/itag-impl-options'\n\nexport default {\n parse: function (tagToken: TagToken, remainTokens: Token[]) {\n this.tokens = []\n\n const stream = this.liquid.parser.parseStream(remainTokens)\n stream\n .on('token', (token: TagToken) => {\n if (token.name === 'endraw') stream.stop()\n else this.tokens.push(token)\n })\n .on('end', () => {\n throw new Error(`tag ${tagToken.raw} not closed`)\n })\n stream.start()\n },\n render: function () {\n return this.tokens.map((token: Token) => token.raw).join('')\n }\n}\n","import { mapSeries } from 'src/util/promise'\nimport assert from 'src/util/assert'\nimport { evalExp } from 'src/render/syntax'\nimport { identifier, value, hash } from 'src/parser/lexical'\nimport TagToken from 'src/parser/tag-token'\nimport Token from 'src/parser/token'\nimport ITemplate from 'src/template/itemplate'\nimport Scope from 'src/scope/scope'\nimport Hash from 'src/template/tag/hash'\nimport ITagImplOptions from 'src/template/tag/itag-impl-options'\nimport ParseStream from 'src/parser/parse-stream'\n\nconst re = new RegExp(`^(${identifier.source})\\\\s+in\\\\s+` +\n `(${value.source})` +\n `(?:\\\\s+${hash.source})*$`)\n\nexport default {\n parse: function (tagToken: TagToken, remainTokens: Token[]) {\n const match = re.exec(tagToken.args) as RegExpExecArray\n assert(match, `illegal tag: ${tagToken.raw}`)\n\n this.variable = match[1]\n this.collection = match[2]\n this.templates = []\n\n let p\n const stream: ParseStream = this.liquid.parser.parseStream(remainTokens)\n .on('start', () => (p = this.templates))\n .on('tag:endtablerow', () => stream.stop())\n .on('template', (tpl: ITemplate) => p.push(tpl))\n .on('end', () => {\n throw new Error(`tag ${tagToken.raw} not closed`)\n })\n\n stream.start()\n },\n\n render: async function (scope: Scope, hash: Hash) {\n let collection = evalExp(this.collection, scope) || []\n const offset = hash.offset || 0\n const limit = (hash.limit === undefined) ? collection.length : hash.limit\n\n collection = collection.slice(offset, offset + limit)\n const cols = hash.cols || collection.length\n const contexts = collection.map((item: any) => {\n const ctx = {}\n ctx[this.variable] = item\n return ctx\n })\n\n let row: number = 0\n let html = ''\n await mapSeries(contexts, async (context, idx) => {\n row = Math.floor(idx / cols) + 1\n const col = (idx % cols) + 1\n if (col === 1) {\n if (row !== 1) {\n html += ''\n }\n html += ``\n }\n\n html += ``\n scope.push(context)\n html += await this.liquid.renderer.renderTemplates(this.templates, scope)\n html += ''\n scope.pop(context)\n return html\n })\n if (row > 0) {\n html += ''\n }\n return html\n }\n} as ITagImplOptions\n","import { evalExp, isFalsy } from 'src/render/syntax'\nimport TagToken from 'src/parser/tag-token'\nimport Token from 'src/parser/token'\nimport Scope from 'src/scope/scope'\nimport ITagImplOptions from 'src/template/tag/itag-impl-options'\nimport ParseStream from 'src/parser/parse-stream'\n\nexport default {\n parse: function (tagToken: TagToken, remainTokens: Token[]) {\n this.templates = []\n this.elseTemplates = []\n let p\n const stream: ParseStream = this.liquid.parser.parseStream(remainTokens)\n .on('start', () => {\n p = this.templates\n this.cond = tagToken.args\n })\n .on('tag:else', () => (p = this.elseTemplates))\n .on('tag:endunless', () => stream.stop())\n .on('template', tpl => p.push(tpl))\n .on('end', () => {\n throw new Error(`tag ${tagToken.raw} not closed`)\n })\n\n stream.start()\n },\n\n render: function (scope: Scope) {\n const cond = evalExp(this.cond, scope)\n return isFalsy(cond)\n ? this.liquid.renderer.renderTemplates(this.templates, scope)\n : this.liquid.renderer.renderTemplates(this.elseTemplates, scope)\n }\n} as ITagImplOptions\n","import { RenderBreakError } from 'src/util/error'\n\nexport default {\n render: async function () {\n throw new RenderBreakError('break')\n }\n}\n","import { RenderBreakError } from 'src/util/error'\n\nexport default {\n render: async function () {\n throw new RenderBreakError('continue')\n }\n}\n","import assign from './assign'\nimport For from './for'\nimport capture from './capture'\nimport Case from './case'\nimport comment from './comment'\nimport include from './include'\nimport decrement from './decrement'\nimport cycle from './cycle'\nimport If from './if'\nimport increment from './increment'\nimport layout from './layout'\nimport block from './block'\nimport raw from './raw'\nimport tablerow from './tablerow'\nimport unless from './unless'\nimport Break from './break'\nimport Continue from './continue'\nimport ITagImplOptions from 'src/template/tag/itag-impl-options'\n\nconst tags: { [key: string]: ITagImplOptions } = {\n assign, 'for': For, capture, 'case': Case, comment, include, decrement, increment, cycle, 'if': If, layout, block, raw, tablerow, unless, 'break': Break, 'continue': Continue\n}\n\nexport default tags\n","const escapeMap = {\n '&': '&',\n '<': '<',\n '>': '>',\n '\"': '"',\n \"'\": '''\n}\nconst unescapeMap = {\n '&': '&',\n '<': '<',\n '>': '>',\n '"': '\"',\n ''': \"'\"\n}\n\nfunction escape (str: string) {\n return String(str).replace(/&|<|>|\"|'/g, m => escapeMap[m])\n}\n\nfunction unescape (str: string) {\n return String(str).replace(/&(amp|lt|gt|#34|#39);/g, m => unescapeMap[m])\n}\n\nexport default {\n 'escape': escape,\n 'escape_once': (str: string) => escape(unescape(str)),\n 'newline_to_br': (v: string) => v.replace(/\\n/g, '
'),\n 'strip_html': (v: string) => v.replace(/|||<.*?>/g, '')\n}\n","import { FilterImpl } from 'src/template/filter/filter-impl'\n\nexport default {\n 'append': (v: string, arg: string) => v + arg,\n 'prepend': (v: string, arg: string) => arg + v,\n 'capitalize': (str: string) => String(str).charAt(0).toUpperCase() + str.slice(1),\n 'lstrip': (v: string) => String(v).replace(/^\\s+/, ''),\n 'downcase': (v: string) => v.toLowerCase(),\n 'upcase': (str: string) => String(str).toUpperCase(),\n 'remove': (v: string, arg: string) => v.split(arg).join(''),\n 'remove_first': (v: string, l: string) => v.replace(l, ''),\n 'replace': (v: string, pattern: string, replacement: string) =>\n String(v).split(pattern).join(replacement),\n 'replace_first': (v: string, arg1: string, arg2: string) => String(v).replace(arg1, arg2),\n 'rstrip': (str: string) => String(str).replace(/\\s+$/, ''),\n 'split': (v: string, arg: string) => String(v).split(arg),\n 'strip': (v: string) => String(v).trim(),\n 'strip_newlines': (v: string) => String(v).replace(/\\n/g, ''),\n 'truncate': (v: string, l: number = 50, o: string = '...') => {\n v = String(v)\n if (v.length <= l) return v\n return v.substr(0, l - o.length) + o\n },\n 'truncatewords': (v: string, l: number = 15, o: string = '...') => {\n const arr = v.split(/\\s+/)\n let ret = arr.slice(0, l).join(' ')\n if (arr.length >= l) ret += o\n return ret\n }\n} as {[key: string]: FilterImpl}\n","export default {\n 'abs': (v: number) => Math.abs(v),\n 'ceil': (v: number) => Math.ceil(v),\n 'divided_by': (v: number, arg: number) => v / arg,\n 'floor': (v: number) => Math.floor(v),\n 'minus': bindFixed((v: number, arg: number) => v - arg),\n 'modulo': bindFixed((v: number, arg: number) => v % arg),\n 'round': (v: number, arg: number = 0) => {\n const amp = Math.pow(10, arg)\n return Math.round(v * amp) / amp\n },\n 'plus': bindFixed((v: number, arg: number) => Number(v) + Number(arg)),\n 'times': (v: number, arg: number) => v * arg\n}\n\nfunction getFixed (v: number) {\n const p = String(v).split('.')\n return (p.length > 1) ? p[1].length : 0\n}\n\nfunction bindFixed (cb: (v: number, arg: number) => number) {\n return (l: number, r: number) => {\n const f = Math.max(getFixed(l), getFixed(r))\n return cb(l, r).toFixed(f)\n }\n}\n","export default {\n 'url_decode': (x: string) => x.split('+').map(decodeURIComponent).join(' '),\n 'url_encode': (x: string) => x.split(' ').map(encodeURIComponent).join('+')\n}\n","import { last } from 'src/util/underscore'\n\nexport default {\n 'join': (v: any[], arg: string) => v.join(arg === undefined ? ' ' : arg),\n 'last': (v: T[]): T => last(v),\n 'first': (v: T[]): T => v[0],\n 'map': (arr: {[key: string]: T1}[], arg: string): T1[] => arr.map(v => v[arg]),\n 'reverse': (v: any[]) => v.reverse(),\n 'sort': (v: T[], arg: (lhs: T, rhs: T) => number) => v.sort(arg),\n 'size': (v: string | any[]) => v.length,\n 'concat': (v: T1[], arg: T2[] | T2): Array => Array.prototype.concat.call(v, arg),\n 'slice': (v: T[], begin: number, length: number): T[] => {\n if (length === undefined) length = 1\n return v.slice(begin, begin + length)\n },\n 'uniq': function (arr: T[]): T[] {\n const u = {}\n return (arr || []).filter(val => {\n if (u.hasOwnProperty(String(val))) return false\n u[String(val)] = true\n return true\n })\n }\n}\n","import { padStart } from './underscore'\n\nconst monthNames = [\n 'January', 'February', 'March', 'April', 'May', 'June', 'July', 'August',\n 'September', 'October', 'November', 'December'\n]\nconst dayNames = [\n 'Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'\n]\nconst monthNamesShort = monthNames.map(abbr)\nconst dayNamesShort = dayNames.map(abbr)\nconst suffixes = {\n 1: 'st',\n 2: 'nd',\n 3: 'rd',\n 'default': 'th'\n}\n\nfunction abbr (str: string) {\n return str.slice(0, 3)\n}\n\n// prototype extensions\nconst _date = {\n daysInMonth: function (d: Date) {\n const feb = _date.isLeapYear(d) ? 29 : 28\n return [31, feb, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]\n },\n\n getDayOfYear: function (d: Date) {\n let num = 0\n for (let i = 0; i < d.getMonth(); ++i) {\n num += _date.daysInMonth(d)[i]\n }\n return num + d.getDate()\n },\n\n getWeekOfYear: function (d: Date, startDay: number) {\n // Skip to startDay of this week\n const now = this.getDayOfYear(d) + (startDay - d.getDay())\n // Find the first startDay of the year\n const jan1 = new Date(d.getFullYear(), 0, 1)\n const then = (7 - jan1.getDay() + startDay)\n return padStart(String(Math.floor((now - then) / 7) + 1), 2, '0')\n },\n\n isLeapYear: function (d: Date) {\n const year = d.getFullYear()\n return !!((year & 3) === 0 && (year % 100 || (year % 400 === 0 && year)))\n },\n\n getSuffix: function (d: Date) {\n const str = d.getDate().toString()\n const index = parseInt(str.slice(-1))\n return suffixes[index] || suffixes['default']\n },\n\n century: function (d: Date) {\n return parseInt(d.getFullYear().toString().substring(0, 2), 10)\n }\n}\n\nconst formatCodes = {\n a: function (d: Date) {\n return dayNamesShort[d.getDay()]\n },\n A: function (d: Date) {\n return dayNames[d.getDay()]\n },\n b: function (d: Date) {\n return monthNamesShort[d.getMonth()]\n },\n B: function (d: Date) {\n return monthNames[d.getMonth()]\n },\n c: function (d: Date) {\n return d.toLocaleString()\n },\n C: function (d: Date) {\n return _date.century(d)\n },\n d: function (d: Date) {\n return padStart(d.getDate(), 2, '0')\n },\n e: function (d: Date) {\n return padStart(d.getDate(), 2)\n },\n H: function (d: Date) {\n return padStart(d.getHours(), 2, '0')\n },\n I: function (d: Date) {\n return padStart(String(d.getHours() % 12 || 12), 2, '0')\n },\n j: function (d: Date) {\n return padStart(_date.getDayOfYear(d), 3, '0')\n },\n k: function (d: Date) {\n return padStart(d.getHours(), 2)\n },\n l: function (d: Date) {\n return padStart(String(d.getHours() % 12 || 12), 2)\n },\n L: function (d: Date) {\n return padStart(d.getMilliseconds(), 3, '0')\n },\n m: function (d: Date) {\n return padStart(d.getMonth() + 1, 2, '0')\n },\n M: function (d: Date) {\n return padStart(d.getMinutes(), 2, '0')\n },\n p: function (d: Date) {\n return (d.getHours() < 12 ? 'AM' : 'PM')\n },\n P: function (d: Date) {\n return (d.getHours() < 12 ? 'am' : 'pm')\n },\n q: function (d: Date) {\n return _date.getSuffix(d)\n },\n s: function (d: Date) {\n return Math.round(d.valueOf() / 1000)\n },\n S: function (d: Date) {\n return padStart(d.getSeconds(), 2, '0')\n },\n u: function (d: Date) {\n return d.getDay() || 7\n },\n U: function (d: Date) {\n return _date.getWeekOfYear(d, 0)\n },\n w: function (d: Date) {\n return d.getDay()\n },\n W: function (d: Date) {\n return _date.getWeekOfYear(d, 1)\n },\n x: function (d: Date) {\n return d.toLocaleDateString()\n },\n X: function (d: Date) {\n return d.toLocaleTimeString()\n },\n y: function (d: Date) {\n return d.getFullYear().toString().substring(2, 4)\n },\n Y: function (d: Date) {\n return d.getFullYear()\n },\n z: function (d: Date) {\n const tz = d.getTimezoneOffset() / 60 * 100\n return (tz > 0 ? '-' : '+') + padStart(String(Math.abs(tz)), 4, '0')\n },\n '%': function () {\n return '%'\n }\n};\n(formatCodes as any).h = formatCodes.b;\n(formatCodes as any).N = formatCodes.L\n\nexport default function (d: Date, format: string) {\n let output = ''\n let remaining = format\n\n while (true) {\n const r = /%./g\n const results = r.exec(remaining)\n\n // No more format codes. Add the remaining text and return\n if (!results) {\n return output + remaining\n }\n\n // Add the preceding text\n output += remaining.slice(0, r.lastIndex - 2)\n remaining = remaining.slice(r.lastIndex)\n\n // Add the format code\n const ch = results[0].charAt(1)\n const func = formatCodes[ch]\n output += func ? func(d) : '%' + ch\n }\n}\n","import strftime from 'src/util/strftime'\nimport { isString } from 'src/util/underscore'\n\nexport default {\n 'date': (v: string | Date, arg: string) => {\n let date = v\n if (v === 'now') {\n date = new Date()\n } else if (isString(v)) {\n date = new Date(v)\n }\n return isValidDate(date) ? strftime(date, arg) : v\n }\n}\n\nfunction isValidDate (date: any): date is Date {\n return date instanceof Date && !isNaN(date.getTime())\n}\n","import { isTruthy } from 'src/render/syntax'\n\nexport default {\n 'default': (v: T1, arg: T2): T1 | T2 => isTruthy(v) ? v : arg\n}\n","import html from './html'\nimport str from './string'\nimport math from './math'\nimport url from './url'\nimport array from './array'\nimport date from './date'\nimport obj from './object'\n\nexport default { ...html, ...str, ...math, ...url, ...date, ...obj, ...array }\n","import Scope from './scope/scope'\nimport * as Types from './types'\nimport fs from 'src/fs'\nimport * as _ from './util/underscore'\nimport ITemplate from './template/itemplate'\nimport Tokenizer from './parser/tokenizer'\nimport Render from './render/render'\nimport Tag from './template/tag/tag'\nimport Filter from './template/filter/filter'\nimport Parser from './parser/parser'\nimport ITagImplOptions from './template/tag/itag-impl-options'\nimport Value from './template/value'\nimport { isTruthy, isFalsy, evalExp, evalValue } from './render/syntax'\nimport builtinTags from './builtin/tags'\nimport builtinFilters from './builtin/filters'\nimport { LiquidOptions, NormalizedFullOptions, applyDefault, normalize } from './liquid-options'\nimport { FilterImpl } from './template/filter/filter-impl'\n\nexport default class Liquid {\n public options: NormalizedFullOptions\n public renderer: Render\n public parser: Parser\n private cache: object = {}\n private tokenizer: Tokenizer\n\n constructor (opts: LiquidOptions = {}) {\n this.options = applyDefault(normalize(opts))\n this.parser = new Parser(this)\n this.renderer = new Render()\n this.tokenizer = new Tokenizer(this.options)\n\n _.forOwn(builtinTags, (conf, name) => this.registerTag(name, conf))\n _.forOwn(builtinFilters, (handler, name) => this.registerFilter(name, handler))\n }\n parse (html: string, filepath?: string) {\n const tokens = this.tokenizer.tokenize(html, filepath)\n return this.parser.parse(tokens)\n }\n render (tpl: Array, ctx?: object, opts?: LiquidOptions) {\n const options = { ...this.options, ...normalize(opts) }\n const scope = new Scope(ctx, options)\n return this.renderer.renderTemplates(tpl, scope)\n }\n async parseAndRender (html: string, ctx?: object, opts?: LiquidOptions) {\n const tpl = await this.parse(html)\n return this.render(tpl, ctx, opts)\n }\n async getTemplate (file: string, opts?: LiquidOptions) {\n const options = normalize(opts)\n const roots = options.root ? [...options.root, ...this.options.root] : this.options.root\n const paths = roots.map(root => fs.resolve(root, file, this.options.extname))\n\n for (const filepath of paths) {\n if (!(await fs.exists(filepath))) continue\n\n if (this.options.cache && this.cache[filepath]) return this.cache[filepath]\n const value = this.parse(await fs.readFile(filepath), filepath)\n if (this.options.cache) this.cache[filepath] = value\n return value\n }\n\n const err = new Error('ENOENT') as any\n err.message = `ENOENT: Failed to lookup \"${file}\" in \"${roots}\"`\n err.code = 'ENOENT'\n throw err\n }\n async renderFile (file: string, ctx?: object, opts?: LiquidOptions) {\n const options = normalize(opts)\n const templates = await this.getTemplate(file, options)\n return this.render(templates, ctx, opts)\n }\n evalValue (str: string, scope: Scope) {\n return new Value(str, this.options.strict_filters).value(scope)\n }\n registerFilter (name: string, filter: FilterImpl) {\n return Filter.register(name, filter)\n }\n registerTag (name: string, tag: ITagImplOptions) {\n return Tag.register(name, tag)\n }\n plugin (plugin: (this: Liquid, L: typeof Liquid) => void) {\n return plugin.call(this, Liquid)\n }\n express () {\n const self = this\n return function (this: any, filePath: string, ctx: object, cb: (err: Error | null, html?: string) => void) {\n const opts = { root: this.root }\n self.renderFile(filePath, ctx, opts).then(html => cb(null, html), cb)\n }\n }\n static default = Liquid\n static isTruthy = isTruthy\n static isFalsy = isFalsy\n static evalExp = evalExp\n static evalValue = evalValue\n static Types = Types\n}\n"],"names":["range","tslib_1.__extends","_\r\n .range","_.padStart","_.isArray","_.isString","BlockMode","path","_.last","value","_.isObject","filter","_.isNil","_.isFunction","lexical.isInteger","_.promisify","stat","readFile","fs","extname","resolve","lexical.tagLine","operators","lexical.operators","lexical.quoteBalanced","lexical.rangeLine","lexical.isLiteral","lexical.parseLiteral","lexical.isVariable","lexical.value","lexical.filterLine","lexical.matchValue","lexical.filter","Value","HTML","re","hash","rValue","staticFileRE","_.forOwn","builtinTags"],"mappings":"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"} \ No newline at end of file diff --git a/dist/liquid.d.ts b/dist/liquid.d.ts index 711787699..87e38ea56 100644 --- a/dist/liquid.d.ts +++ b/dist/liquid.d.ts @@ -1,26 +1,29 @@ import Scope from './scope/scope'; import * as Types from './types'; import ITemplate from './template/itemplate'; +import Render from './render/render'; +import Parser from './parser/parser'; import ITagImplOptions from './template/tag/itag-impl-options'; import { isTruthy, isFalsy, evalExp, evalValue } from './render/syntax'; import { LiquidOptions, NormalizedFullOptions } from './liquid-options'; +import { FilterImpl } from './template/filter/filter-impl'; export default class Liquid { options: NormalizedFullOptions; + renderer: Render; + parser: Parser; private cache; - private parser; - private renderer; private tokenizer; constructor(opts?: LiquidOptions); - parse(html: string, filepath?: string): any[]; + parse(html: string, filepath?: string): ITemplate[]; render(tpl: Array, ctx?: object, opts?: LiquidOptions): Promise; parseAndRender(html: string, ctx?: object, opts?: LiquidOptions): Promise; - getTemplate(file: any, opts?: LiquidOptions): Promise; - renderFile(file: any, ctx?: object, opts?: LiquidOptions): Promise; + getTemplate(file: string, opts?: LiquidOptions): Promise; + renderFile(file: string, ctx?: object, opts?: LiquidOptions): Promise; evalValue(str: string, scope: Scope): any; - registerFilter(name: any, filter: any): void; + registerFilter(name: string, filter: FilterImpl): void; registerTag(name: string, tag: ITagImplOptions): void; - plugin(plugin: any): any; - express(): (filePath: string, ctx: object, cb: (err: Error, html?: string) => void) => void; + plugin(plugin: (this: Liquid, L: typeof Liquid) => void): void; + express(): (this: any, filePath: string, ctx: object, cb: (err: Error | null, html?: string | undefined) => void) => void; static default: typeof Liquid; static isTruthy: typeof isTruthy; static isFalsy: typeof isFalsy; diff --git a/dist/liquid.js b/dist/liquid.js index 690351aca..b6601b272 100644 --- a/dist/liquid.js +++ b/dist/liquid.js @@ -1,5 +1,5 @@ /* - * liquidjs@7.2.0, https://github.com/harttle/liquidjs + * liquidjs@7.2.1, https://github.com/harttle/liquidjs * (c) 2016-2019 harttle * Released under the MIT License. */ @@ -154,32 +154,6 @@ } return object; } - /* - * Assigns own enumerable string keyed properties of source objects to the destination object. - * Source objects are applied from left to right. - * Subsequent sources overwrite property assignments of previous sources. - * - * Note: This method mutates object and is loosely based on Object.assign. - * - * @param {Object} object The destination object. - * @param {...Object} sources The source objects. - * @return {Object} Returns object. - */ - function assign(obj) { - var srcs = []; - for (var _i = 1; _i < arguments.length; _i++) { - srcs[_i - 1] = arguments[_i]; - } - obj = isObject(obj) ? obj : {}; - srcs.forEach(function (src) { return binaryAssign(obj, src); }); - return obj; - } - function binaryAssign(target, src) { - for (var key in src) - if (src.hasOwnProperty(key)) - target[key] = src[key]; - return target; - } function last(arr) { return arr[arr.length - 1]; } @@ -202,7 +176,7 @@ * negative — if you'd like a negative range, use a negative step. */ function range(start, stop, step) { - if (arguments.length === 1) { + if (stop === undefined) { stop = start; start = 0; } @@ -229,7 +203,7 @@ var quoteBalanced = new RegExp("(?:" + quoted.source + "|[^'\"])*"); // basic types var integer = /-?\d+/; - var number = /-?\d+\.?\d*|\.?\d+/; + var number = /[+-]?(?:\d+\.?\d*|\.?\d+)/; var bool = /true|false/; // property access var identifier = /[\w-]+[?]?/; @@ -292,90 +266,83 @@ throw new TypeError("cannot parse '" + str + "' as literal"); } - function captureStack() { - if (Error.captureStackTrace) { - Error.captureStackTrace(this, this.constructor); - } - } - var LiquidError = /** @class */ (function () { + var LiquidError = /** @class */ (function (_super) { + __extends(LiquidError, _super); function LiquidError(err, token) { - this.input = token.input; - this.file = token.file; - this.originalError = err; - this.token = token; + var _this = _super.call(this, err.message) || this; + _this.originalError = err; + _this.token = token; + return _this; } - LiquidError.prototype.captureStackTrace = function (obj) { - this.name = obj.constructor.name; - captureStack.call(obj); + LiquidError.prototype.update = function () { var err = this.originalError; - var context = mkContext(this.input, this.token.line); + var context = mkContext(this.token); this.message = mkMessage(err.message, this.token); this.stack = this.message + '\n' + context + - '\n' + (this.stack || this.message) + - (err.stack ? '\nFrom ' + err.stack : ''); + '\n' + this.stack + '\nFrom ' + err.stack; }; return LiquidError; - }()); + }(Error)); var TokenizationError = /** @class */ (function (_super) { __extends(TokenizationError, _super); function TokenizationError(message, token) { - var _this = _super.call(this, { message: message }, token) || this; - _super.prototype.captureStackTrace.call(_this, _this); + var _this = _super.call(this, new Error(message), token) || this; + _this.name = 'TokenizationError'; + _super.prototype.update.call(_this); return _this; } return TokenizationError; }(LiquidError)); - TokenizationError.prototype = create(Error.prototype); - TokenizationError.prototype.constructor = TokenizationError; var ParseError = /** @class */ (function (_super) { __extends(ParseError, _super); function ParseError(err, token) { var _this = _super.call(this, err, token) || this; + _this.name = 'ParseError'; _this.message = err.message; - _super.prototype.captureStackTrace.call(_this, _this); + _super.prototype.update.call(_this); return _this; } return ParseError; }(LiquidError)); - ParseError.prototype = create(Error.prototype); - ParseError.prototype.constructor = ParseError; var RenderError = /** @class */ (function (_super) { __extends(RenderError, _super); function RenderError(err, tpl) { var _this = _super.call(this, err, tpl.token) || this; + _this.name = 'RenderError'; _this.message = err.message; - _super.prototype.captureStackTrace.call(_this, _this); + _super.prototype.update.call(_this); return _this; } return RenderError; }(LiquidError)); - RenderError.prototype = create(Error.prototype); - RenderError.prototype.constructor = RenderError; - var RenderBreakError = /** @class */ (function () { + var RenderBreakError = /** @class */ (function (_super) { + __extends(RenderBreakError, _super); function RenderBreakError(message) { - captureStack.call(this); - this.message = message + ''; + var _this = _super.call(this, message) || this; + _this.resolvedHTML = ''; + _this.name = 'RenderBreakError'; + _this.message = message + ''; + return _this; } return RenderBreakError; - }()); - RenderBreakError.prototype = create(Error.prototype); - RenderBreakError.prototype.constructor = RenderBreakError; - var AssertionError = /** @class */ (function () { + }(Error)); + var AssertionError = /** @class */ (function (_super) { + __extends(AssertionError, _super); function AssertionError(message) { - captureStack.call(this); - this.message = message + ''; + var _this = _super.call(this, message) || this; + _this.name = 'AssertionError'; + _this.message = message + ''; + return _this; } return AssertionError; - }()); - AssertionError.prototype = create(Error.prototype); - AssertionError.prototype.constructor = AssertionError; - function mkContext(input, targetLine) { - var lines = input.split('\n'); - var begin = Math.max(targetLine - 2, 1); - var end = Math.min(targetLine + 3, lines.length); + }(Error)); + function mkContext(token) { + var lines = token.input.split('\n'); + var begin = Math.max(token.line - 2, 1); + var end = Math.min(token.line + 3, lines.length); var context = range(begin, end + 1) .map(function (lineNumber) { - var indicator = (lineNumber === targetLine) ? '>> ' : ' '; + var indicator = (lineNumber === token.line) ? '>> ' : ' '; var num = padStart(String(lineNumber), String(end).length); var text = lines[lineNumber - 1]; return "" + indicator + num + "| " + text; @@ -384,13 +351,9 @@ return context; } function mkMessage(msg, token) { - msg = msg || ''; - if (token.file) { - msg += ', file:' + token.file; - } - if (token.line) { - msg += ", line:" + token.line + ", col:" + token.col; - } + if (token.file) + msg += ", file:" + token.file; + msg += ", line:" + token.line + ", col:" + token.col; return msg; } @@ -450,12 +413,13 @@ function Scope(ctx, opts) { if (ctx === void 0) { ctx = {}; } this.blocks = {}; + this.groups = {}; this.blockMode = BlockMode$1.OUTPUT; this.opts = applyDefault(opts); this.contexts = [ctx || {}]; } Scope.prototype.getAll = function () { - return this.contexts.reduce(function (ctx, val) { return assign(ctx, val); }, create(null)); + return this.contexts.reduce(function (ctx, val) { return __assign(ctx, val); }, {}); }; Scope.prototype.get = function (path) { var _this = this; @@ -478,6 +442,7 @@ scope[key] = {}; } scope = scope[key]; + return false; }); }; Scope.prototype.unshift = function (ctx) { @@ -749,10 +714,12 @@ } var Token = /** @class */ (function () { - function Token(raw, col, input, file, line) { + function Token(raw, input, line, col, file) { + this.type = 'notset'; this.col = col; this.line = line; this.raw = raw; + this.value = raw; this.input = input; this.file = file; } @@ -761,8 +728,8 @@ var HTMLToken = /** @class */ (function (_super) { __extends(HTMLToken, _super); - function HTMLToken(str, begin, input, file, line) { - var _this = _super.call(this, str, begin, input, file, line) || this; + function HTMLToken(str, input, line, col, file) { + var _this = _super.call(this, str, input, line, col, file) || this; _this.type = 'html'; _this.value = str; return _this; @@ -772,10 +739,10 @@ var DelimitedToken = /** @class */ (function (_super) { __extends(DelimitedToken, _super); - function DelimitedToken(raw, value, pos, input, file, line) { - var _this = _super.call(this, raw, pos, input, file, line) || this; + function DelimitedToken(raw, value, input, line, pos, file) { + var _this = _super.call(this, raw, input, line, pos, file) || this; _this.trimLeft = value[0] === '-'; - _this.trimRight = value[value.length - 1] === '-'; + _this.trimRight = last(value) === '-'; _this.value = value .slice(_this.trimLeft ? 1 : 0, _this.trimRight ? -1 : value.length) .trim(); @@ -786,8 +753,8 @@ var TagToken = /** @class */ (function (_super) { __extends(TagToken, _super); - function TagToken(raw, value$$1, pos, input, file, line) { - var _this = _super.call(this, raw, value$$1, pos, input, file, line) || this; + function TagToken(raw, value$$1, input, line, pos, file) { + var _this = _super.call(this, raw, value$$1, input, line, pos, file) || this; _this.type = 'tag'; var match = _this.value.match(tagLine); if (!match) { @@ -802,8 +769,8 @@ var OutputToken = /** @class */ (function (_super) { __extends(OutputToken, _super); - function OutputToken(raw, value, pos, input, file, line) { - var _this = _super.call(this, raw, value, pos, input, file, line) || this; + function OutputToken(raw, value, input, line, pos, file) { + var _this = _super.call(this, raw, value, input, line, pos, file) || this; _this.type = 'output'; return _this; } @@ -841,7 +808,7 @@ if (state === ParseState.HTML) { if (input.substr(p, outputL.length) === outputL) { if (buffer) - tokens.push(new HTMLToken(buffer, col, input, file, line)); + tokens.push(new HTMLToken(buffer, input, line, col, file)); buffer = outputL; line = curLine; col = p - lineBegin + 1; @@ -851,7 +818,7 @@ } else if (input.substr(p, tagL.length) === tagL) { if (buffer) - tokens.push(new HTMLToken(buffer, col, input, file, line)); + tokens.push(new HTMLToken(buffer, input, line, col, file)); buffer = tagL; line = curLine; col = p - lineBegin + 1; @@ -862,7 +829,7 @@ } else if (state === ParseState.OUTPUT && input.substr(p, outputR.length) === outputR) { buffer += outputR; - tokens.push(new OutputToken(buffer, buffer.slice(outputL.length, -outputR.length), col, input, file, line)); + tokens.push(new OutputToken(buffer, buffer.slice(outputL.length, -outputR.length), input, line, col, file)); p += outputR.length; buffer = ''; line = curLine; @@ -872,7 +839,7 @@ } else if (input.substr(p, tagR.length) === tagR) { buffer += tagR; - tokens.push(new TagToken(buffer, buffer.slice(tagL.length, -tagR.length), col, input, file, line)); + tokens.push(new TagToken(buffer, buffer.slice(tagL.length, -tagR.length), input, line, col, file)); p += tagR.length; buffer = ''; line = curLine; @@ -885,10 +852,10 @@ if (state !== ParseState.HTML) { var t = state === ParseState.OUTPUT ? 'output' : 'tag'; var str = buffer.length > 16 ? buffer.slice(0, 13) + '...' : buffer; - throw new TokenizationError(new Error(t + " \"" + str + "\" not closed"), new Token(buffer, col, input, file, line)); + throw new TokenizationError(t + " \"" + str + "\" not closed", new Token(buffer, input, line, col, file)); } if (buffer) - tokens.push(new HTMLToken(buffer, col, input, file, line)); + tokens.push(new HTMLToken(buffer, input, line, col, file)); whiteSpaceCtrl(tokens, this.options); return tokens; }; @@ -921,11 +888,11 @@ return [3 /*break*/, 5]; case 4: e_1 = _b.sent(); - if (e_1 instanceof RenderBreakError) { + if (e_1.name === 'RenderBreakError') { e_1.resolvedHTML = html; throw e_1; } - throw e_1 instanceof RenderError ? e_1 : new RenderError(e_1, tpl); + throw e_1.name === 'RenderError' ? e_1 : new RenderError(e_1, tpl); case 5: _i++; return [3 /*break*/, 1]; @@ -971,11 +938,7 @@ if ((match = exp.match(rangeLine))) { var low = evalValue(match[1], scope); var high = evalValue(match[2], scope); - var range = []; - for (var j = low; j <= high; j++) { - range.push(j); - } - return range; + return range(low, high + 1); } return evalValue(exp, scope); } @@ -1096,8 +1059,7 @@ }; Filter.prototype.render = function (value$$1, scope) { var args = this.args.map(function (arg) { return evalValue(arg, scope); }); - args.unshift(value$$1); - return this.impl.apply(null, args); + return this.impl.apply(null, [value$$1].concat(args)); }; Filter.register = function (name, filter$$1) { Filter.impls[name] = filter$$1; @@ -1112,6 +1074,7 @@ var ParseStream = /** @class */ (function () { function ParseStream(tokens, parseToken) { this.handlers = {}; + this.stopRequested = false; this.tokens = tokens; this.parseToken = parseToken; } @@ -1125,6 +1088,7 @@ h(arg); return true; } + return false; }; ParseStream.prototype.start = function () { this.trigger('start'); @@ -1132,8 +1096,7 @@ while (!this.stopRequested && (token = this.tokens.shift())) { if (this.trigger('token', token)) continue; - if (token.type === 'tag' && - this.trigger("tag:" + token.name, token)) { + if (token.type === 'tag' && this.trigger("tag:" + token.name, token)) { continue; } var template = this.parseToken(token, this.tokens); @@ -1152,16 +1115,14 @@ var default_1 = /** @class */ (function () { function default_1(str, strictFilters) { + this.filters = []; var match = matchValue(str); assert(match, "illegal value string: " + str); - var initial = match[0]; + this.initial = match[0]; str = str.substr(match.index + match[0].length); - var filters = []; while ((match = filter.exec(str))) { - filters.push([match[0].trim()]); + this.filters.push(new Filter(match[0].trim(), strictFilters)); } - this.initial = initial; - this.filters = filters.map(function (str) { return new Filter(str, strictFilters); }); } default_1.prototype.value = function (scope) { return this.filters.reduce(function (prev, filter$$1) { return filter$$1.render(prev, scope); }, evalExp(this.initial, scope)); @@ -1243,7 +1204,7 @@ }()); var re = new RegExp("(" + identifier.source + ")\\s*=([^]*)"); - var assign$1 = { + var assign = { parse: function (token) { var match = token.args.match(re); assert(match, "illegal token " + token.raw); @@ -1258,12 +1219,6 @@ } }; - /* - * Call functions in serial until someone resolved. - * @param iterable the array to iterate with. - * @param iteratee returns a new promise. - * The iteratee is invoked with three arguments: (value, index, iterable). - */ /* * Call functions in serial until someone rejected. * @param {Array} iterable the array to iterate with. @@ -1271,7 +1226,7 @@ * The iteratee is invoked with three arguments: (value, index, iterable). */ function mapSeries(iterable, iteratee) { - var ret = Promise.resolve('init'); + var ret = Promise.resolve(0); var result = []; iterable.forEach(function (item, idx) { ret = ret @@ -1286,107 +1241,109 @@ ("(?:\\s+" + hash.source + ")*") + "(?:\\s+(reversed))?" + ("(?:\\s+" + hash.source + ")*$")); - function parse(tagToken, remainTokens) { - var _this = this; - var match = re$1.exec(tagToken.args); - assert(match, "illegal tag: " + tagToken.raw); - this.variable = match[1]; - this.collection = match[2]; - this.reversed = !!match[3]; - this.templates = []; - this.elseTemplates = []; - var p; - var stream = this.liquid.parser.parseStream(remainTokens) - .on('start', function () { return (p = _this.templates); }) - .on('tag:else', function () { return (p = _this.elseTemplates); }) - .on('tag:endfor', function () { return stream.stop(); }) - .on('template', function (tpl) { return p.push(tpl); }) - .on('end', function () { - throw new Error("tag " + tagToken.raw + " not closed"); - }); - stream.start(); - } - function render(scope, hash$$1) { - return __awaiter(this, void 0, void 0, function () { - var collection, offset, limit, contexts, html, finished; + var For = { + type: 'block', + parse: function (tagToken, remainTokens) { var _this = this; - return __generator(this, function (_a) { - switch (_a.label) { - case 0: - collection = evalExp(this.collection, scope); - if (!isArray(collection)) { - if (isString(collection) && collection.length > 0) { - collection = [collection]; - } - else if (isObject(collection)) { - collection = Object.keys(collection).map(function (key) { return [key, collection[key]]; }); - } - } - if (!isArray(collection) || !collection.length) { - return [2 /*return*/, this.liquid.renderer.renderTemplates(this.elseTemplates, scope)]; - } - offset = hash$$1.offset || 0; - limit = (hash$$1.limit === undefined) ? collection.length : hash$$1.limit; - collection = collection.slice(offset, offset + limit); - if (this.reversed) - collection.reverse(); - contexts = collection.map(function (item, i) { - var ctx = {}; - ctx[_this.variable] = item; - ctx['forloop'] = { - first: i === 0, - index: i + 1, - index0: i, - last: i === collection.length - 1, - length: collection.length, - rindex: collection.length - i, - rindex0: collection.length - i - 1 - }; - return ctx; - }); - html = ''; - finished = false; - return [4 /*yield*/, mapSeries(contexts, function (context) { return __awaiter(_this, void 0, void 0, function () { - var _a, e_1; - return __generator(this, function (_b) { - switch (_b.label) { - case 0: - if (finished) - return [2 /*return*/]; - scope.push(context); - _b.label = 1; - case 1: - _b.trys.push([1, 3, , 4]); - _a = html; - return [4 /*yield*/, this.liquid.renderer.renderTemplates(this.templates, scope)]; - case 2: - html = _a + _b.sent(); - return [3 /*break*/, 4]; - case 3: - e_1 = _b.sent(); - if (e_1 instanceof RenderBreakError) { - html += e_1.resolvedHTML; - if (e_1.message === 'break') { - finished = true; - } - } - else - throw e_1; - return [3 /*break*/, 4]; - case 4: - scope.pop(context); - return [2 /*return*/]; - } - }); - }); })]; - case 1: - _a.sent(); - return [2 /*return*/, html]; - } + var match = re$1.exec(tagToken.args); + assert(match, "illegal tag: " + tagToken.raw); + this.variable = match[1]; + this.collection = match[2]; + this.reversed = !!match[3]; + this.templates = []; + this.elseTemplates = []; + var p; + var stream = this.liquid.parser.parseStream(remainTokens) + .on('start', function () { return (p = _this.templates); }) + .on('tag:else', function () { return (p = _this.elseTemplates); }) + .on('tag:endfor', function () { return stream.stop(); }) + .on('template', function (tpl) { return p.push(tpl); }) + .on('end', function () { + throw new Error("tag " + tagToken.raw + " not closed"); }); - }); - } - var For = { parse: parse, render: render }; + stream.start(); + }, + render: function (scope, hash$$1) { + return __awaiter(this, void 0, void 0, function () { + var collection, offset, limit, contexts, html, finished; + var _this = this; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: + collection = evalExp(this.collection, scope); + if (!isArray(collection)) { + if (isString(collection) && collection.length > 0) { + collection = [collection]; + } + else if (isObject(collection)) { + collection = Object.keys(collection).map(function (key) { return [key, collection[key]]; }); + } + } + if (!isArray(collection) || !collection.length) { + return [2 /*return*/, this.liquid.renderer.renderTemplates(this.elseTemplates, scope)]; + } + offset = hash$$1.offset || 0; + limit = (hash$$1.limit === undefined) ? collection.length : hash$$1.limit; + collection = collection.slice(offset, offset + limit); + if (this.reversed) + collection.reverse(); + contexts = collection.map(function (item, i) { + var ctx = {}; + ctx[_this.variable] = item; + ctx['forloop'] = { + first: i === 0, + index: i + 1, + index0: i, + last: i === collection.length - 1, + length: collection.length, + rindex: collection.length - i, + rindex0: collection.length - i - 1 + }; + return ctx; + }); + html = ''; + finished = false; + return [4 /*yield*/, mapSeries(contexts, function (context) { return __awaiter(_this, void 0, void 0, function () { + var _a, e_1; + return __generator(this, function (_b) { + switch (_b.label) { + case 0: + if (finished) + return [2 /*return*/]; + scope.push(context); + _b.label = 1; + case 1: + _b.trys.push([1, 3, , 4]); + _a = html; + return [4 /*yield*/, this.liquid.renderer.renderTemplates(this.templates, scope)]; + case 2: + html = _a + _b.sent(); + return [3 /*break*/, 4]; + case 3: + e_1 = _b.sent(); + if (e_1.name === 'RenderBreakError') { + html += e_1.resolvedHTML; + if (e_1.message === 'break') { + finished = true; + } + } + else + throw e_1; + return [3 /*break*/, 4]; + case 4: + scope.pop(context); + return [2 /*return*/]; + } + }); + }); })]; + case 1: + _a.sent(); + return [2 /*return*/, html]; + } + }); + }); + } + }; var re$2 = new RegExp("(" + identifier.source + ")"); var capture = { @@ -1573,7 +1530,7 @@ render: function (scope) { var group = evalValue(this.group, scope); var fingerprint = "cycle:" + group + ":" + this.candidates.join(','); - var groups = scope.opts.groups = scope.opts.groups || {}; + var groups = scope.groups; var idx = groups[fingerprint]; if (idx === undefined) { idx = groups[fingerprint] = 0; @@ -1793,6 +1750,7 @@ ctx[_this.variable] = item; return ctx; }); + row = 0; html = ''; return [4 /*yield*/, mapSeries(contexts, function (context, idx) { return __awaiter(_this, void 0, void 0, function () { var col, _a; @@ -1879,7 +1837,7 @@ }; var tags = { - assign: assign$1, 'for': For, capture: capture, 'case': Case, comment: comment, include: include, decrement: decrement, increment: increment, cycle: cycle, 'if': If, layout: layout, block: block, raw: raw, tablerow: tablerow, unless: unless, 'break': Break, 'continue': Continue + assign: assign, 'for': For, capture: capture, 'case': Case, comment: comment, include: include, decrement: decrement, increment: increment, cycle: cycle, 'if': If, layout: layout, block: block, raw: raw, tablerow: tablerow, unless: unless, 'break': Break, 'continue': Continue }; var escapeMap = { @@ -1906,14 +1864,13 @@ 'escape': escape, 'escape_once': function (str) { return escape(unescape(str)); }, 'newline_to_br': function (v) { return v.replace(/\n/g, '
'); }, - 'strip_html': function (v) { return String(v).replace(/|||<.*?>/g, ''); } + 'strip_html': function (v) { return v.replace(/|||<.*?>/g, ''); } }; var str = { 'append': function (v, arg) { return v + arg; }, 'prepend': function (v, arg) { return arg + v; }, 'capitalize': function (str) { return String(str).charAt(0).toUpperCase() + str.slice(1); }, - 'concat': function (v, arg) { return Array.prototype.concat.call(v, arg); }, 'lstrip': function (v) { return String(v).replace(/^\s+/, ''); }, 'downcase': function (v) { return v.toLowerCase(); }, 'upcase': function (str) { return String(str).toUpperCase(); }, @@ -1928,19 +1885,19 @@ 'strip': function (v) { return String(v).trim(); }, 'strip_newlines': function (v) { return String(v).replace(/\n/g, ''); }, 'truncate': function (v, l, o) { + if (l === void 0) { l = 50; } + if (o === void 0) { o = '...'; } v = String(v); - o = (o === undefined) ? '...' : o; - l = l || 16; if (v.length <= l) return v; return v.substr(0, l - o.length) + o; }, 'truncatewords': function (v, l, o) { - if (o === undefined) - o = '...'; - var arr = v.split(' '); + if (l === void 0) { l = 15; } + if (o === void 0) { o = '...'; } + var arr = v.split(/\s+/); var ret = arr.slice(0, l).join(' '); - if (arr.length > l) + if (arr.length >= l) ret += o; return ret; } @@ -1954,7 +1911,8 @@ 'minus': bindFixed(function (v, arg) { return v - arg; }), 'modulo': bindFixed(function (v, arg) { return v % arg; }), 'round': function (v, arg) { - var amp = Math.pow(10, arg || 0); + if (arg === void 0) { arg = 0; } + var amp = Math.pow(10, arg); return Math.round(v * amp) / amp; }, 'plus': bindFixed(function (v, arg) { return Number(v) + Number(arg); }), @@ -1984,6 +1942,7 @@ 'reverse': function (v) { return v.reverse(); }, 'sort': function (v, arg) { return v.sort(arg); }, 'size': function (v) { return v.length; }, + 'concat': function (v, arg) { return Array.prototype.concat.call(v, arg); }, 'slice': function (v, begin, length) { if (length === undefined) length = 1; @@ -1992,10 +1951,9 @@ 'uniq': function (arr) { var u = {}; return (arr || []).filter(function (val) { - if (u.hasOwnProperty(val)) { + if (u.hasOwnProperty(String(val))) return false; - } - u[val] = true; + u[String(val)] = true; return true; }); } @@ -2167,7 +2125,7 @@ // Add the format code var ch = results[0].charAt(1); var func = formatCodes[ch]; - output += func ? func.call(this, d) : '%' + ch; + output += func ? func(d) : '%' + ch; } } @@ -2197,10 +2155,8 @@ function Liquid(opts) { if (opts === void 0) { opts = {}; } var _this = this; + this.cache = {}; this.options = applyDefault(normalize(opts)); - if (this.options.cache) { - this.cache = {}; - } this.parser = new Parser(this); this.renderer = new Render(); this.tokenizer = new Tokenizer(this.options); diff --git a/dist/liquid.js.map b/dist/liquid.js.map index e0863a5ba..54ef29443 100644 --- a/dist/liquid.js.map +++ b/dist/liquid.js.map @@ -1 +1 @@ -{"version":3,"file":"liquid.js","sources":["../src/util/underscore.ts","../src/parser/lexical.ts","../src/util/error.ts","../src/util/assert.ts","../src/liquid-options.ts","../src/scope/block-mode.ts","../src/scope/scope.ts","../src/scope/scopes.ts","../src/fs/browser.ts","../src/parser/whitespace-ctrl.ts","../src/parser/token.ts","../src/parser/html-token.ts","../src/parser/delimited-token.ts","../src/parser/tag-token.ts","../src/parser/output-token.ts","../src/parser/tokenizer.ts","../src/render/render.ts","../src/render/syntax.ts","../src/template/tag/hash.ts","../src/template/template.ts","../src/template/tag/tag.ts","../src/template/filter.ts","../src/parser/parse-stream.ts","../src/template/value.ts","../src/template/output.ts","../src/template/html.ts","../src/parser/parser.ts","../src/builtin/tags/assign.ts","../src/util/promise.ts","../src/builtin/tags/for.ts","../src/builtin/tags/capture.ts","../src/builtin/tags/case.ts","../src/builtin/tags/comment.ts","../src/builtin/tags/include.ts","../src/builtin/tags/decrement.ts","../src/builtin/tags/cycle.ts","../src/builtin/tags/if.ts","../src/builtin/tags/increment.ts","../src/builtin/tags/layout.ts","../src/builtin/tags/block.ts","../src/builtin/tags/raw.ts","../src/builtin/tags/tablerow.ts","../src/builtin/tags/unless.ts","../src/builtin/tags/break.ts","../src/builtin/tags/continue.ts","../src/builtin/tags/index.ts","../src/builtin/filters/html.ts","../src/builtin/filters/string.ts","../src/builtin/filters/math.ts","../src/builtin/filters/url.ts","../src/builtin/filters/array.ts","../src/util/strftime.ts","../src/builtin/filters/date.ts","../src/builtin/filters/object.ts","../src/builtin/filters/index.ts","../src/liquid.ts"],"sourcesContent":["const toStr = Object.prototype.toString\nconst arrToStr = Array.prototype.toString\n\n/*\n * Checks if value is classified as a String primitive or object.\n * @param {any} value The value to check.\n * @return {Boolean} Returns true if value is a string, else false.\n */\nexport function isString (value: any) {\n return toStr.call(value) === '[object String]'\n}\n\nexport function isFunction (value: any) {\n return typeof value === 'function'\n}\n\nexport function promisify (fn) {\n return function (...args) {\n return new Promise((resolve, reject) => {\n fn(...args, (err, result) => {\n err ? reject(err) : resolve(result)\n })\n })\n }\n}\n\nexport function stringify (value: any): string {\n if (isNil(value)) return ''\n if (isFunction(value.to_liquid)) return stringify(value.to_liquid())\n if (isFunction(value.toLiquid)) return stringify(value.toLiquid())\n if (isFunction(value.to_s)) return value.to_s()\n if ([toStr, arrToStr].indexOf(value.toString) > -1) return defaultToString(value)\n if (isFunction(value.toString)) return value.toString()\n return toStr.call(value)\n}\n\nfunction defaultToString (value: any): string {\n const cache = []\n return JSON.stringify(value, (key, value) => {\n if (isObject(value)) {\n if (cache.indexOf(value) !== -1) {\n return\n }\n cache.push(value)\n }\n return value\n })\n}\n\nexport function create (proto: T1): T2 {\n return Object.create(proto)\n}\n\nexport function isNil (value: any): boolean {\n return value === null || value === undefined\n}\n\nexport function isArray (value: any): boolean {\n // be compatible with IE 8\n return toStr.call(value) === '[object Array]'\n}\n\nexport function isError (value: any): boolean {\n const signature = toStr.call(value)\n // [object XXXError]\n return signature.substr(-6, 5) === 'Error' ||\n (typeof value.message === 'string' && typeof value.name === 'string')\n}\n\n/*\n * Iterates over own enumerable string keyed properties of an object and invokes iteratee for each property.\n * The iteratee is invoked with three arguments: (value, key, object).\n * Iteratee functions may exit iteration early by explicitly returning false.\n * @param {Object} object The object to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @return {Object} Returns object.\n */\nexport function forOwn (object, iteratee: ((val: any, key: string, obj: object) => boolean | void)) {\n object = object || {}\n for (const k in object) {\n if (object.hasOwnProperty(k)) {\n if (iteratee(object[k], k, object) === false) break\n }\n }\n return object\n}\n\n/*\n * Assigns own enumerable string keyed properties of source objects to the destination object.\n * Source objects are applied from left to right.\n * Subsequent sources overwrite property assignments of previous sources.\n *\n * Note: This method mutates object and is loosely based on Object.assign.\n *\n * @param {Object} object The destination object.\n * @param {...Object} sources The source objects.\n * @return {Object} Returns object.\n */\nexport function assign (obj: object, ...srcs: object[]): object {\n obj = isObject(obj) ? obj : {}\n srcs.forEach(src => binaryAssign(obj, src))\n return obj\n}\n\nfunction binaryAssign (target: object, src: object): object {\n for (const key in src) if (src.hasOwnProperty(key)) target[key] = src[key]\n return target\n}\n\nexport function last (arr: any[]): any {\n return arr[arr.length - 1]\n}\n\nexport function uniq (arr: any[]): any[] {\n const u = {}\n const a = []\n for (let i = 0, l = arr.length; i < l; ++i) {\n if (u.hasOwnProperty(arr[i])) {\n continue\n }\n a.push(arr[i])\n u[arr[i]] = 1\n }\n return a\n}\n\n/*\n * Checks if value is the language type of Object.\n * (e.g. arrays, functions, objects, regexes, new Number(0), and new String(''))\n * @param {any} value The value to check.\n * @return {Boolean} Returns true if value is an object, else false.\n */\nexport function isObject (value: any): boolean {\n const type = typeof value\n return value !== null && (type === 'object' || type === 'function')\n}\n\n/*\n * A function to create flexibly-numbered lists of integers,\n * handy for each and map loops. start, if omitted, defaults to 0; step defaults to 1.\n * Returns a list of integers from start (inclusive) to stop (exclusive),\n * incremented (or decremented) by step, exclusive.\n * Note that ranges that stop before they start are considered to be zero-length instead of\n * negative — if you'd like a negative range, use a negative step.\n */\nexport function range (start: number, stop?: number, step?: number) {\n if (arguments.length === 1) {\n stop = start\n start = 0\n }\n step = step || 1\n\n const arr = []\n for (let i = start; i < stop; i += step) {\n arr.push(i)\n }\n return arr\n}\n\nexport function padStart (str: any, length: number, ch: string = ' ') {\n str = String(str)\n let n = length - str.length\n while (n-- > 0) str = ch + str\n return str\n}\n","// quote related\nconst singleQuoted = /'[^']*'/\nconst doubleQuoted = /\"[^\"]*\"/\nexport const quoted = new RegExp(`${singleQuoted.source}|${doubleQuoted.source}`)\nexport const quoteBalanced = new RegExp(`(?:${quoted.source}|[^'\"])*`)\n\n// basic types\nexport const integer = /-?\\d+/\nexport const number = /-?\\d+\\.?\\d*|\\.?\\d+/\nexport const bool = /true|false/\n\n// property access\nexport const identifier = /[\\w-]+[?]?/\nexport const subscript = new RegExp(`\\\\[(?:${quoted.source}|[\\\\w-\\\\.]+)\\\\]`)\nexport const literal = new RegExp(`(?:${quoted.source}|${bool.source}|${number.source})`)\nexport const variable = new RegExp(`${identifier.source}(?:\\\\.${identifier.source}|${subscript.source})*`)\n\n// range related\nexport const rangeLimit = new RegExp(`(?:${variable.source}|${number.source})`)\nexport const range = new RegExp(`\\\\(${rangeLimit.source}\\\\.\\\\.${rangeLimit.source}\\\\)`)\nexport const rangeCapture = new RegExp(`\\\\((${rangeLimit.source})\\\\.\\\\.(${rangeLimit.source})\\\\)`)\n\nexport const value = new RegExp(`(?:${variable.source}|${literal.source}|${range.source})`)\n\n// hash related\nexport const hash = new RegExp(`(?:${identifier.source})\\\\s*:\\\\s*(?:${value.source})`)\nexport const hashCapture = new RegExp(`(${identifier.source})\\\\s*:\\\\s*(${value.source})`, 'g')\n\n// full match\nexport const tagLine = new RegExp(`^\\\\s*(${identifier.source})\\\\s*([\\\\s\\\\S]*?)\\\\s*$`)\nexport const literalLine = new RegExp(`^${literal.source}$`, 'i')\nexport const variableLine = new RegExp(`^${variable.source}$`)\nexport const numberLine = new RegExp(`^${number.source}$`)\nexport const boolLine = new RegExp(`^${bool.source}$`, 'i')\nexport const quotedLine = new RegExp(`^${quoted.source}$`)\nexport const rangeLine = new RegExp(`^${rangeCapture.source}$`)\nexport const integerLine = new RegExp(`^${integer.source}$`)\n\n// filter related\nexport const valueDeclaration = new RegExp(`(?:${identifier.source}\\\\s*:\\\\s*)?${value.source}`)\nexport const valueList = new RegExp(`${valueDeclaration.source}(\\\\s*,\\\\s*${valueDeclaration.source})*`)\nexport const filter = new RegExp(`${identifier.source}(?:\\\\s*:\\\\s*${valueList.source})?`, 'g')\nexport const filterCapture = new RegExp(`(${identifier.source})(?:\\\\s*:\\\\s*(${valueList.source}))?`)\nexport const filterLine = new RegExp(`^${filterCapture.source}$`)\n\nexport const operators = [\n /\\s+or\\s+/,\n /\\s+and\\s+/,\n /==|!=|<=|>=|<|>|\\s+contains\\s+/\n]\n\nexport function isInteger (str) {\n return integerLine.test(str)\n}\n\nexport function isLiteral (str) {\n return literalLine.test(str)\n}\n\nexport function isRange (str) {\n return rangeLine.test(str)\n}\n\nexport function isVariable (str) {\n return variableLine.test(str)\n}\n\nexport function matchValue (str) {\n return value.exec(str)\n}\n\nexport function parseLiteral (str) {\n let res = str.match(numberLine)\n if (res) {\n return Number(str)\n }\n res = str.match(boolLine)\n if (res) {\n return str.toLowerCase() === 'true'\n }\n res = str.match(quotedLine)\n if (res) {\n return str.slice(1, -1)\n }\n throw new TypeError(`cannot parse '${str}' as literal`)\n}\n","import * as _ from './underscore'\nimport Token from 'src/parser/token'\n\nfunction captureStack () {\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, this.constructor)\n }\n}\n\nabstract class LiquidError {\n name: string\n message: string\n stack: string\n private file: string\n private input: string\n private token: Token\n private originalError: Error\n constructor (err, token) {\n this.input = token.input\n this.file = token.file\n this.originalError = err\n this.token = token\n }\n captureStackTrace (obj) {\n this.name = obj.constructor.name\n\n captureStack.call(obj)\n const err = this.originalError\n const context = mkContext(this.input, this.token.line)\n this.message = mkMessage(err.message, this.token)\n this.stack = this.message + '\\n' + context +\n '\\n' + (this.stack || this.message) +\n (err.stack ? '\\nFrom ' + err.stack : '')\n }\n}\n\nexport class TokenizationError extends LiquidError {\n constructor (message, token) {\n super({ message }, token)\n super.captureStackTrace(this)\n }\n}\nTokenizationError.prototype = _.create(Error.prototype) as any\nTokenizationError.prototype.constructor = TokenizationError\n\nexport class ParseError extends LiquidError {\n constructor (err, token) {\n super(err, token)\n this.message = err.message\n super.captureStackTrace(this)\n }\n}\nParseError.prototype = _.create(Error.prototype) as any\nParseError.prototype.constructor = ParseError\n\nexport class RenderError extends LiquidError {\n constructor (err, tpl) {\n super(err, tpl.token)\n this.message = err.message\n super.captureStackTrace(this)\n }\n}\nRenderError.prototype = _.create(Error.prototype) as any\nRenderError.prototype.constructor = RenderError\n\nexport class RenderBreakError {\n message: string\n resolvedHTML: string\n constructor (message) {\n captureStack.call(this)\n this.message = message + ''\n }\n}\nRenderBreakError.prototype = _.create(Error.prototype) as any\nRenderBreakError.prototype.constructor = RenderBreakError\n\nexport class AssertionError {\n message: string\n constructor (message) {\n captureStack.call(this)\n this.message = message + ''\n }\n}\nAssertionError.prototype = _.create(Error.prototype) as any\nAssertionError.prototype.constructor = AssertionError\n\nfunction mkContext (input, targetLine) {\n const lines = input.split('\\n')\n const begin = Math.max(targetLine - 2, 1)\n const end = Math.min(targetLine + 3, lines.length)\n\n const context = _\n .range(begin, end + 1)\n .map(lineNumber => {\n const indicator = (lineNumber === targetLine) ? '>> ' : ' '\n const num = _.padStart(String(lineNumber), String(end).length)\n const text = lines[lineNumber - 1]\n return `${indicator}${num}| ${text}`\n })\n .join('\\n')\n\n return context\n}\n\nfunction mkMessage (msg, token) {\n msg = msg || ''\n if (token.file) {\n msg += ', file:' + token.file\n }\n if (token.line) {\n msg += `, line:${token.line}, col:${token.col}`\n }\n return msg\n}\n","import { AssertionError } from './error'\n\nexport default function (predicate: any, message?: string) {\n if (!predicate) {\n message = message || `expect ${predicate} to be true`\n throw new AssertionError(message)\n }\n}\n","/* eslint-disable camelcase */\n\nimport * as _ from './util/underscore'\n\nexport interface LiquidOptions {\n /** `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 `[\".\"]` */\n root?: string | string[]\n /** `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 `\"\"`. */\n extname?: string\n /** `cache` indicates whether or not to cache resolved templates. Defaults to `false`. */\n cache?: boolean\n /** `dynamicPartials`: if set, treat `` parameter in `{%include filepath %}`, `{%layout filepath%}` as a variable, otherwise as a literal value. Defaults to `true`. */\n dynamicPartials?: boolean\n /** `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`. */\n strict_filters?: boolean\n /** `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`. */\n strict_variables?: boolean\n /** `trim_tag_right` is used to strip blank characters (including ` `, `\\t`, and `\\r`) from the right of tags (`{% %}`) until `\\n` (inclusive). Defaults to `false`. */\n trim_tag_right?: boolean\n /** `trim_tag_left` is similar to `trim_tag_right`, whereas the `\\n` is exclusive. Defaults to `false`. See Whitespace Control for details. */\n trim_tag_left?: boolean\n /** ``trim_output_right` is used to strip blank characters (including ` `, `\\t`, and `\\r`) from the right of values (`{{ }}`) until `\\n` (inclusive). Defaults to `false`. */\n trim_output_right?: boolean\n /** `trim_output_left` is similar to `trim_output_right`, whereas the `\\n` is exclusive. Defaults to `false`. See Whitespace Control for details. */\n trim_output_left?: boolean\n /** `tag_delimiter_left` and `tag_delimiter_right` are used to override the delimiter for liquid tags **/\n tag_delimiter_left?: string,\n tag_delimiter_right?: string,\n /** `output_delimiter_left` and `output_delimiter_right` are used to override the delimiter for liquid outputs **/\n output_delimiter_left?: string,\n output_delimiter_right?: string,\n /** `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`. */\n greedy?: boolean\n}\n\nexport interface NormalizedOptions extends LiquidOptions {\n root?: string[]\n}\n\nexport interface NormalizedFullOptions extends NormalizedOptions {\n root: string[]\n extname: string\n cache: boolean\n dynamicPartials: boolean\n strict_filters: boolean\n strict_variables: boolean\n trim_tag_right: boolean\n trim_tag_left: boolean\n trim_output_right: boolean\n trim_output_left: boolean\n greedy: boolean\n}\n\nconst defaultOptions: NormalizedFullOptions = {\n root: ['.'],\n cache: false,\n extname: '',\n dynamicPartials: true,\n trim_tag_right: false,\n trim_tag_left: false,\n trim_output_right: false,\n trim_output_left: false,\n greedy: true,\n tag_delimiter_left: '{%',\n tag_delimiter_right: '%}',\n output_delimiter_left: '{{',\n output_delimiter_right: '}}',\n strict_filters: false,\n strict_variables: false\n}\n\nexport function normalize (options: LiquidOptions): NormalizedOptions {\n options = options || {}\n if (options.hasOwnProperty('root')) {\n options.root = normalizeStringArray(options.root)\n }\n return options as NormalizedOptions\n}\n\nexport function applyDefault (options: NormalizedOptions): NormalizedFullOptions {\n return { ...defaultOptions, ...options }\n}\n\nfunction normalizeStringArray (value: string | string[]): string[] {\n if (_.isArray(value)) return value as string[]\n if (_.isString(value)) return [value as string]\n return []\n}\n","enum BlockMode {\n /* store rendered html into blocks */\n OUTPUT,\n /* output rendered html directly */\n STORE\n}\n\nexport default BlockMode\n","import * as _ from '../util/underscore'\nimport * as lexical from '../parser/lexical'\nimport assert from '../util/assert'\nimport { NormalizedFullOptions, applyDefault } from '../liquid-options'\nimport BlockMode from './block-mode'\n\nexport default class Scope {\n opts: NormalizedFullOptions\n contexts: Array\n blocks: object = {}\n blockMode: BlockMode = BlockMode.OUTPUT\n constructor (ctx: object = {}, opts?: NormalizedFullOptions) {\n this.opts = applyDefault(opts)\n this.contexts = [ctx || {}]\n }\n getAll () {\n return this.contexts.reduce((ctx, val) => _.assign(ctx, val), _.create(null))\n }\n get (path: string): any {\n const paths = this.propertyAccessSeq(path)\n const scope = this.findContextFor(paths[0]) || _.last(this.contexts)\n return paths.reduce((value, key) => this.readProperty(value, key), scope)\n }\n set (path: string, v: any): void {\n const paths = this.propertyAccessSeq(path)\n let scope = this.findContextFor(paths[0]) || _.last(this.contexts)\n paths.some((key, i) => {\n if (!_.isObject(scope)) {\n return true\n }\n if (i === paths.length - 1) {\n scope[key] = v\n return true\n }\n if (undefined === scope[key]) {\n scope[key] = {}\n }\n scope = scope[key]\n })\n }\n unshift (ctx: object) {\n return this.contexts.unshift(ctx)\n }\n push (ctx: object) {\n return this.contexts.push(ctx)\n }\n pop (ctx?: object): object {\n if (!arguments.length) {\n return this.contexts.pop()\n }\n const i = this.contexts.findIndex(scope => scope === ctx)\n if (i === -1) {\n throw new TypeError('scope not found, cannot pop')\n }\n return this.contexts.splice(i, 1)[0]\n }\n findContextFor (key: string, filter: ((conttext: object) => boolean) = () => true) {\n for (let i = this.contexts.length - 1; i >= 0; i--) {\n const candidate = this.contexts[i]\n if (!filter(candidate)) continue\n if (key in candidate) {\n return candidate\n }\n }\n return null\n }\n readProperty (obj, key) {\n let val\n if (_.isNil(obj)) {\n val = undefined\n } else {\n obj = toLiquid(obj)\n val = key === 'size' ? readSize(obj) : obj[key]\n if (_.isFunction(obj.liquid_method_missing)) {\n val = obj.liquid_method_missing(key)\n }\n }\n if (_.isNil(val) && this.opts.strict_variables) {\n throw new TypeError(`undefined variable: ${key}`)\n }\n return val\n }\n\n /*\n * Parse property access sequence from access string\n * @example\n * accessSeq(\"foo.bar\") // ['foo', 'bar']\n * accessSeq(\"foo['bar']\") // ['foo', 'bar']\n * accessSeq(\"foo['b]r']\") // ['foo', 'b]r']\n * accessSeq(\"foo[bar.coo]\") // ['foo', 'bar'], for bar.coo == 'bar'\n */\n propertyAccessSeq (str) {\n str = String(str)\n const seq = []\n let name = ''\n let j\n let i = 0\n while (i < str.length) {\n switch (str[i]) {\n case '[':\n push()\n\n const delemiter = str[i + 1]\n if (/['\"]/.test(delemiter)) { // foo[\"bar\"]\n j = str.indexOf(delemiter, i + 2)\n assert(j !== -1, `unbalanced ${delemiter}: ${str}`)\n name = str.slice(i + 2, j)\n push()\n i = j + 2\n } else { // foo[bar.coo]\n j = matchRightBracket(str, i + 1)\n assert(j !== -1, `unbalanced []: ${str}`)\n name = str.slice(i + 1, j)\n if (!lexical.isInteger(name)) { // foo[bar] vs. foo[1]\n name = String(this.get(name))\n }\n push()\n i = j + 1\n }\n break\n case '.':// foo.bar, foo[0].bar\n push()\n i++\n break\n default:// foo.bar\n name += str[i]\n i++\n }\n }\n push()\n\n if (!seq.length) {\n throw new TypeError(`invalid path:\"${str}\"`)\n }\n return seq\n\n function push () {\n if (name.length) seq.push(name)\n name = ''\n }\n }\n}\n\nfunction toLiquid (obj) {\n if (_.isFunction(obj.to_liquid)) {\n return obj.to_liquid()\n }\n if (_.isFunction(obj.toLiquid)) {\n return obj.toLiquid()\n }\n return obj\n}\n\nfunction readSize (obj) {\n if (!_.isNil(obj.size)) return obj.size\n if (_.isArray(obj) || _.isString(obj)) return obj.length\n return obj.size\n}\n\nfunction matchRightBracket (str, begin) {\n let stack = 1 // count of '[' - count of ']'\n for (let i = begin; i < str.length; i++) {\n if (str[i] === '[') {\n stack++\n }\n if (str[i] === ']') {\n stack--\n if (stack === 0) {\n return i\n }\n }\n }\n return -1\n}\n","export class CaptureScope {}\nexport class AssignScope {}\nexport class IncrementScope {}\nexport class DecrementScope {}\n","import { last } from '../util/underscore'\nimport IFS from './ifs'\n\nfunction domResolve (root, path) {\n const base = document.createElement('base')\n base.href = root\n\n const head = document.getElementsByTagName('head')[0]\n head.insertBefore(base, head.firstChild)\n\n const a = document.createElement('a')\n a.href = path\n const resolved = a.href\n head.removeChild(base)\n\n return resolved\n}\n\nfunction resolve (root, filepath, ext) {\n if (root.length && last(root) !== '/') root += '/'\n const url = domResolve(root, filepath)\n return url.replace(/^(\\w+:\\/\\/[^/]+)(\\/[^?]+)/, (str, origin, path) => {\n const last = path.split('/').pop()\n if (/\\.\\w+$/.test(last)) return str\n return origin + path + ext\n })\n}\n\nasync function readFile (url: string): Promise {\n return new Promise((resolve, reject) => {\n const xhr = new XMLHttpRequest()\n xhr.onload = () => {\n if (xhr.status >= 200 && xhr.status < 300) {\n resolve(xhr.responseText as string)\n } else {\n reject(new Error(xhr.statusText))\n }\n }\n xhr.onerror = () => {\n reject(new Error('An error occurred whilst receiving the response.'))\n }\n xhr.open('GET', url)\n xhr.send()\n })\n}\n\nasync function exists () {\n return true\n}\n\nexport default { readFile, resolve, exists } as IFS\n","import DelimitedToken from 'src/parser/delimited-token'\nimport Token from 'src/parser/token'\nimport TagToken from 'src/parser/tag-token'\nimport { NormalizedFullOptions } from 'src/liquid-options'\n\nexport default function whiteSpaceCtrl (tokens: Token[], options: NormalizedFullOptions) {\n options = { greedy: true, ...options }\n let inRaw = false\n\n tokens.forEach((token: Token, i: number) => {\n if (shouldTrimLeft(token as DelimitedToken, inRaw, options)) {\n trimLeft(tokens[i - 1], options.greedy)\n }\n\n if (token.type === 'tag' && (token as TagToken).name === 'raw') inRaw = true\n if (token.type === 'tag' && (token as TagToken).name === 'endraw') inRaw = false\n\n if (shouldTrimRight(token as DelimitedToken, inRaw, options)) {\n trimRight(tokens[i + 1], options.greedy)\n }\n })\n}\n\nfunction shouldTrimLeft (token: DelimitedToken, inRaw: boolean, options) {\n if (inRaw) return false\n if (token.type === 'tag') return token.trimLeft || options.trim_tag_left\n if (token.type === 'output') return token.trimLeft || options.trim_output_left\n}\n\nfunction shouldTrimRight (token: DelimitedToken, inRaw: boolean, options) {\n if (inRaw) return false\n if (token.type === 'tag') return token.trimRight || options.trim_tag_right\n if (token.type === 'output') return token.trimRight || options.trim_output_right\n}\n\nfunction trimLeft (token: Token, greedy: boolean) {\n if (!token || token.type !== 'html') return\n\n const rLeft = greedy ? /\\s+$/g : /[\\t\\r ]*$/g\n token.value = token.value.replace(rLeft, '')\n}\n\nfunction trimRight (token: Token, greedy: boolean) {\n if (!token || token.type !== 'html') return\n\n const rRight = greedy ? /^\\s+/g : /^[\\t\\r ]*\\n?/g\n token.value = token.value.replace(rRight, '')\n}\n","export default class Token {\n type: string\n line: number\n col: number\n raw: string\n input: string\n file: string\n value: string\n constructor (raw, col, input, file, line) {\n this.col = col\n this.line = line\n this.raw = raw\n this.input = input\n this.file = file\n }\n}\n","import Token from './token'\n\nexport default class HTMLToken extends Token {\n constructor (str, begin, input, file, line) {\n super(str, begin, input, file, line)\n this.type = 'html'\n this.value = str\n }\n}\n","import Token from './token'\n\nexport default class DelimitedToken extends Token {\n trimLeft: boolean\n trimRight: boolean\n constructor (raw, value, pos, input, file, line) {\n super(raw, pos, input, file, line)\n this.trimLeft = value[0] === '-'\n this.trimRight = value[value.length - 1] === '-'\n this.value = value\n .slice(\n this.trimLeft ? 1 : 0,\n this.trimRight ? -1 : value.length\n )\n .trim()\n }\n}\n","import DelimitedToken from './delimited-token'\nimport { TokenizationError } from 'src/util/error'\nimport * as lexical from './lexical'\n\nexport default class TagToken extends DelimitedToken {\n name: string\n args: string\n constructor (raw, value, pos, input, file, line) {\n super(raw, value, pos, input, file, line)\n this.type = 'tag'\n const match = this.value.match(lexical.tagLine)\n if (!match) {\n throw new TokenizationError(`illegal tag syntax`, this)\n }\n this.name = match[1]\n this.args = match[2]\n }\n}\n","import DelimitedToken from './delimited-token'\n\nexport default class OutputToken extends DelimitedToken {\n constructor (raw, value, pos, input, file, line) {\n super(raw, value, pos, input, file, line)\n this.type = 'output'\n }\n}\n","import whiteSpaceCtrl from './whitespace-ctrl'\nimport HTMLToken from './html-token'\nimport TagToken from './tag-token'\nimport Token from './token'\nimport OutputToken from './output-token'\nimport { TokenizationError } from 'src/util/error'\nimport { NormalizedFullOptions, applyDefault } from '../liquid-options'\n\nenum ParseState { HTML, OUTPUT, TAG }\n\nexport default class Tokenizer {\n options: NormalizedFullOptions\n constructor (options?: NormalizedFullOptions) {\n this.options = applyDefault(options)\n }\n tokenize (input: string, file?: string) {\n const tokens = []\n const tagL = this.options.tag_delimiter_left\n const tagR = this.options.tag_delimiter_right\n const outputL = this.options.output_delimiter_left\n const outputR = this.options.output_delimiter_right\n let p = 0\n let curLine = 1\n let state = ParseState.HTML\n let buffer = ''\n let lineBegin = 0\n let line = 1\n let col = 1\n\n while (p < input.length) {\n if (input[p] === '\\n') {\n curLine++\n lineBegin = p + 1\n }\n if (state === ParseState.HTML) {\n if (input.substr(p, outputL.length) === outputL) {\n if (buffer) tokens.push(new HTMLToken(buffer, col, input, file, line))\n buffer = outputL\n line = curLine\n col = p - lineBegin + 1\n p += outputL.length\n state = ParseState.OUTPUT\n continue\n } else if (input.substr(p, tagL.length) === tagL) {\n if (buffer) tokens.push(new HTMLToken(buffer, col, input, file, line))\n buffer = tagL\n line = curLine\n col = p - lineBegin + 1\n p += tagL.length\n state = ParseState.TAG\n continue\n }\n } else if (state === ParseState.OUTPUT && input.substr(p, outputR.length) === outputR) {\n buffer += outputR\n tokens.push(new OutputToken(buffer, buffer.slice(outputL.length, -outputR.length), col, input, file, line))\n p += outputR.length\n buffer = ''\n line = curLine\n col = p - lineBegin + 1\n state = ParseState.HTML\n continue\n } else if (input.substr(p, tagR.length) === tagR) {\n buffer += tagR\n tokens.push(new TagToken(buffer, buffer.slice(tagL.length, -tagR.length), col, input, file, line))\n p += tagR.length\n buffer = ''\n line = curLine\n col = p - lineBegin + 1\n state = ParseState.HTML\n continue\n }\n buffer += input[p++]\n }\n if (state !== ParseState.HTML) {\n const t = state === ParseState.OUTPUT ? 'output' : 'tag'\n const str = buffer.length > 16 ? buffer.slice(0, 13) + '...' : buffer\n throw new TokenizationError(\n new Error(`${t} \"${str}\" not closed`),\n new Token(buffer, col, input, file, line)\n )\n }\n if (buffer) tokens.push(new HTMLToken(buffer, col, input, file, line))\n\n whiteSpaceCtrl(tokens, this.options)\n return tokens\n }\n}\n","import { RenderBreakError, RenderError } from 'src/util/error'\nimport assert from 'src/util/assert'\n\nexport default class Render {\n async renderTemplates (templates, scope) {\n assert(scope, 'unable to evalTemplates: scope undefined')\n\n let html = ''\n for (const tpl of templates) {\n try {\n html += await tpl.render(scope)\n } catch (e) {\n if (e instanceof RenderBreakError) {\n e.resolvedHTML = html\n throw e\n }\n throw e instanceof RenderError ? e : new RenderError(e, tpl)\n }\n }\n return html\n }\n}\n","import * as lexical from '../parser/lexical'\nimport assert from '../util/assert'\n\nconst operators = {\n '==': (l, r) => l === r,\n '!=': (l, r) => l !== r,\n '>': (l, r) => l !== null && r !== null && l > r,\n '<': (l, r) => l !== null && r !== null && l < r,\n '>=': (l, r) => l !== null && r !== null && l >= r,\n '<=': (l, r) => l !== null && r !== null && l <= r,\n 'contains': (l, r) => {\n if (!l) return false\n if (typeof l.indexOf !== 'function') return false\n return l.indexOf(r) > -1\n },\n 'and': (l, r) => isTruthy(l) && isTruthy(r),\n 'or': (l, r) => isTruthy(l) || isTruthy(r)\n}\n\nexport function evalExp (exp, scope) {\n assert(scope, 'unable to evalExp: scope undefined')\n const operatorREs = lexical.operators\n let match\n for (let i = 0; i < operatorREs.length; i++) {\n const operatorRE = operatorREs[i]\n const expRE = new RegExp(`^(${lexical.quoteBalanced.source})(${operatorRE.source})(${lexical.quoteBalanced.source})$`)\n if ((match = exp.match(expRE))) {\n const l = evalExp(match[1], scope)\n const op = operators[match[2].trim()]\n const r = evalExp(match[3], scope)\n return op(l, r)\n }\n }\n\n if ((match = exp.match(lexical.rangeLine))) {\n const low = evalValue(match[1], scope)\n const high = evalValue(match[2], scope)\n const range = []\n for (let j = low; j <= high; j++) {\n range.push(j)\n }\n return range\n }\n\n return evalValue(exp, scope)\n}\n\nexport function evalValue (str, scope) {\n str = str && str.trim()\n if (!str) return undefined\n\n if (lexical.isLiteral(str)) {\n return lexical.parseLiteral(str)\n }\n if (lexical.isVariable(str)) {\n return scope.get(str)\n }\n throw new TypeError(`cannot eval '${str}' as value`)\n}\n\nexport function isTruthy (val) {\n return !isFalsy(val)\n}\n\nexport function isFalsy (val) {\n return val === false || undefined === val || val === null\n}\n","import { hashCapture } from 'src/parser/lexical'\nimport { evalValue } from 'src/render/syntax'\n\n/**\n * Key-Value Pairs Representing Tag Arguments\n * Example:\n * For the markup `{% include 'head.html' foo='bar' %}`,\n * hash['foo'] === 'bar'\n */\nexport default class Hash {\n [key: string]: any\n constructor (markup, scope) {\n let match\n hashCapture.lastIndex = 0\n while ((match = hashCapture.exec(markup))) {\n const k = match[1]\n const v = match[2]\n this[k] = evalValue(v, scope)\n }\n }\n}\n","import Token from 'src/parser/token'\n\nexport default class Template {\n token: Token;\n constructor (token) {\n this.token = token\n }\n}\n","import { create, stringify } from 'src/util/underscore'\nimport assert from 'src/util/assert'\nimport Scope from 'src/scope/scope'\nimport ITagImpl from './itag-impl'\nimport ITagImplOptions from './itag-impl-options'\nimport Liquid from 'src/liquid'\nimport Hash from './hash'\nimport Template from 'src/template/template'\nimport ITemplate from 'src/template/itemplate'\nimport TagToken from 'src/parser/tag-token'\nimport Token from 'src/parser/token'\n\nexport default class Tag extends Template implements ITemplate {\n name: string\n token: TagToken\n private impl: ITagImpl\n static impls: { [key: string]: ITagImplOptions } = {}\n\n constructor (token: TagToken, tokens: Token[], liquid: Liquid) {\n super(token)\n this.name = token.name\n\n const impl = Tag.impls[token.name]\n assert(impl, `tag ${token.name} not found`)\n this.impl = create(impl)\n this.impl.liquid = liquid\n if (this.impl.parse) {\n this.impl.parse(token, tokens)\n }\n }\n async render (scope: Scope) {\n const hash = new Hash(this.token.args, scope)\n const impl = this.impl\n if (typeof impl.render !== 'function') {\n return ''\n }\n const html = await impl.render(scope, hash)\n return stringify(html)\n }\n static register (name: string, tag: ITagImplOptions) {\n Tag.impls[name] = tag\n }\n static clear () {\n Tag.impls = {}\n }\n}\n","import assert from 'src/util/assert'\nimport * as lexical from 'src/parser/lexical'\nimport { evalValue } from 'src/render/syntax'\nimport Scope from 'src/scope/scope'\n\ntype impl = (value: any, ...args: any[]) => any\n\nconst valueRE = new RegExp(`${lexical.value.source}`, 'g')\n\nexport default class Filter {\n name: string\n impl: impl\n args: string[]\n private static impls: {[key: string]: impl} = {}\n\n constructor (str: string, strictFilters: boolean = false) {\n const match = lexical.filterLine.exec(str)\n assert(match, 'illegal filter: ' + str)\n\n const name = match[1]\n const argList = match[2] || ''\n const impl = Filter.impls[name]\n if (!impl && strictFilters) throw new TypeError(`undefined filter: ${name}`)\n\n this.name = name\n this.impl = impl || (x => x)\n this.args = this.parseArgs(argList)\n }\n parseArgs (argList: string): string[] {\n let match; const args = []\n while ((match = valueRE.exec(argList.trim()))) {\n const v = match[0]\n const re = new RegExp(`${v}\\\\s*:`, 'g')\n const keyMatch = re.exec(match.input)\n const currentMatchIsKey = keyMatch && keyMatch.index === match.index\n currentMatchIsKey ? args.push(`'${v}'`) : args.push(v)\n }\n return args\n }\n render (value: any, scope: Scope): any {\n const args = this.args.map(arg => evalValue(arg, scope))\n args.unshift(value)\n return this.impl.apply(null, args)\n }\n static register (name, filter) {\n Filter.impls[name] = filter\n }\n static clear () {\n Filter.impls = {}\n }\n}\n","import Token from 'src/parser/token'\nimport ITemplate from 'src/template/itemplate'\n\ntype parseToken = (token: Token, remainTokens: Array) => ITemplate\ntype eventHandler = ((arg?: Token | ITemplate) => void)\n\nexport default class ParseStream {\n private tokens: Array\n private handlers: {[key: string]: eventHandler} = {}\n private stopRequested: boolean\n private parseToken: parseToken\n\n constructor (tokens: Array, parseToken: parseToken) {\n this.tokens = tokens\n this.parseToken = parseToken\n }\n on (name: string, cb: eventHandler) {\n this.handlers[name] = cb\n return this\n }\n trigger (event: string, arg?: Token | ITemplate) {\n const h = this.handlers[event]\n if (typeof h === 'function') {\n h(arg)\n return true\n }\n }\n start () {\n this.trigger('start')\n let token\n while (!this.stopRequested && (token = this.tokens.shift())) {\n if (this.trigger('token', token)) continue\n if (token.type === 'tag' &&\n this.trigger(`tag:${token.name}`, token)) {\n continue\n }\n const template = this.parseToken(token, this.tokens)\n this.trigger('template', template)\n }\n if (!this.stopRequested) this.trigger('end')\n return this\n }\n stop () {\n this.stopRequested = true\n return this\n }\n}\n","import { evalExp } from 'src/render/syntax'\nimport * as lexical from 'src/parser/lexical'\nimport assert from 'src/util/assert'\nimport Filter from './filter'\nimport Scope from 'src/scope/scope'\n\nexport default class {\n initial: any\n filters: Array\n constructor (str: string, strictFilters?: boolean) {\n let match = lexical.matchValue(str)\n assert(match, `illegal value string: ${str}`)\n\n const initial = match[0]\n str = str.substr(match.index + match[0].length)\n\n const filters = []\n while ((match = lexical.filter.exec(str))) {\n filters.push([match[0].trim()])\n }\n\n this.initial = initial\n this.filters = filters.map(str => new Filter(str, strictFilters))\n }\n value (scope: Scope) {\n return this.filters.reduce(\n (prev, filter) => filter.render(prev, scope),\n evalExp(this.initial, scope))\n }\n}\n","import Value from './value'\nimport { stringify } from 'src/util/underscore'\nimport Template from 'src/template/template'\nimport ITemplate from 'src/template/itemplate'\nimport Scope from 'src/scope/scope'\nimport OutputToken from 'src/parser/output-token'\n\nexport default class Output extends Template implements ITemplate {\n value: Value\n constructor (token: OutputToken, strictFilters?: boolean) {\n super(token)\n this.value = new Value(token.value, strictFilters)\n }\n async render (scope: Scope): Promise {\n const html = await this.value.value(scope)\n return stringify(html)\n }\n}\n","import Template from 'src/template/template'\nimport ITemplate from 'src/template/itemplate'\nimport Token from 'src/parser/token'\n\nexport default class extends Template implements ITemplate {\n str: string\n constructor (token: Token) {\n super(token)\n this.str = token.value\n }\n async render (): Promise {\n return this.str\n }\n}\n","import { ParseError } from '../util/error'\nimport Liquid from 'src/liquid'\nimport ParseStream from './parse-stream'\nimport Token from './token'\nimport TagToken from './tag-token'\nimport OutputToken from './output-token'\nimport Tag from 'src/template/tag/tag'\nimport Output from 'src/template/output'\nimport HTML from 'src/template/html'\n\nexport default class Parser {\n liquid: Liquid\n\n constructor (liquid: Liquid) {\n this.liquid = liquid\n }\n parse (tokens: Array) {\n let token\n const templates = []\n while ((token = tokens.shift())) {\n templates.push(this.parseToken(token, tokens))\n }\n return templates\n }\n parseToken (token: Token, remainTokens: Array) {\n try {\n if (token.type === 'tag') {\n return new Tag(token as TagToken, remainTokens, this.liquid)\n }\n if (token.type === 'output') {\n return new Output(token as OutputToken, this.liquid.options.strict_filters)\n }\n return new HTML(token)\n } catch (e) {\n throw new ParseError(e, token)\n }\n }\n parseStream (tokens: Array) {\n return new ParseStream(tokens, (token, tokens) => this.parseToken(token, tokens))\n }\n}\n","import assert from 'src/util/assert'\nimport { identifier } from 'src/parser/lexical'\nimport { AssignScope } from 'src/scope/scopes'\n\nconst re = new RegExp(`(${identifier.source})\\\\s*=([^]*)`)\n\nexport default {\n parse: function (token) {\n const match = token.args.match(re)\n assert(match, `illegal token ${token.raw}`)\n this.key = match[1]\n this.value = match[2]\n },\n render: function (scope) {\n const ctx = new AssignScope()\n ctx[this.key] = this.liquid.evalValue(this.value, scope)\n scope.push(ctx)\n return Promise.resolve('')\n }\n}\n","/*\n * Call functions in serial until someone resolved.\n * @param iterable the array to iterate with.\n * @param iteratee returns a new promise.\n * The iteratee is invoked with three arguments: (value, index, iterable).\n */\nexport function anySeries (iterable, iteratee) {\n let ret: Promise = Promise.reject(new Error('init'))\n iterable.forEach(function (item, idx) {\n ret = ret.catch(() => iteratee(item, idx, iterable))\n })\n return ret\n}\n\n/*\n * Call functions in serial until someone rejected.\n * @param {Array} iterable the array to iterate with.\n * @param {Array} iteratee returns a new promise.\n * The iteratee is invoked with three arguments: (value, index, iterable).\n */\nexport function mapSeries (iterable, iteratee) {\n let ret: Promise = Promise.resolve('init')\n const result = []\n iterable.forEach(function (item, idx) {\n ret = ret\n .then(() => iteratee(item, idx, iterable))\n .then(x => result.push(x))\n })\n return ret.then(() => result)\n}\n","import { mapSeries } from 'src/util/promise'\nimport { isString, isObject, isArray } from 'src/util/underscore'\nimport { evalExp } from 'src/render/syntax'\nimport assert from 'src/util/assert'\nimport { identifier, value, hash } from 'src/parser/lexical'\nimport { RenderBreakError } from 'src/util/error'\n\nconst re = new RegExp(`^(${identifier.source})\\\\s+in\\\\s+` +\n `(${value.source})` +\n `(?:\\\\s+${hash.source})*` +\n `(?:\\\\s+(reversed))?` +\n `(?:\\\\s+${hash.source})*$`)\n\nfunction parse (tagToken, remainTokens) {\n const match = re.exec(tagToken.args)\n assert(match, `illegal tag: ${tagToken.raw}`)\n this.variable = match[1]\n this.collection = match[2]\n this.reversed = !!match[3]\n\n this.templates = []\n this.elseTemplates = []\n\n let p\n const stream = this.liquid.parser.parseStream(remainTokens)\n .on('start', () => (p = this.templates))\n .on('tag:else', () => (p = this.elseTemplates))\n .on('tag:endfor', () => stream.stop())\n .on('template', tpl => p.push(tpl))\n .on('end', () => {\n throw new Error(`tag ${tagToken.raw} not closed`)\n })\n\n stream.start()\n}\n\nasync function render (scope, hash) {\n let collection = evalExp(this.collection, scope)\n\n if (!isArray(collection)) {\n if (isString(collection) && collection.length > 0) {\n collection = [collection]\n } else if (isObject(collection)) {\n collection = Object.keys(collection).map((key) => [key, collection[key]])\n }\n }\n if (!isArray(collection) || !collection.length) {\n return this.liquid.renderer.renderTemplates(this.elseTemplates, scope)\n }\n\n const offset = hash.offset || 0\n const limit = (hash.limit === undefined) ? collection.length : hash.limit\n\n collection = collection.slice(offset, offset + limit)\n if (this.reversed) collection.reverse()\n\n const contexts = collection.map((item, i) => {\n const ctx = {}\n ctx[this.variable] = item\n ctx['forloop'] = {\n first: i === 0,\n index: i + 1,\n index0: i,\n last: i === collection.length - 1,\n length: collection.length,\n rindex: collection.length - i,\n rindex0: collection.length - i - 1\n }\n return ctx\n })\n\n let html = ''\n let finished = false\n await mapSeries(contexts, async context => {\n if (finished) return\n\n scope.push(context)\n try {\n html += await this.liquid.renderer.renderTemplates(this.templates, scope)\n } catch (e) {\n if (e instanceof RenderBreakError) {\n html += e.resolvedHTML\n if (e.message === 'break') {\n finished = true\n }\n } else throw e\n }\n scope.pop(context)\n })\n return html\n}\n\nexport default { parse, render }\n","import assert from 'src/util/assert'\nimport { identifier } from 'src/parser/lexical'\nimport { CaptureScope } from 'src/scope/scopes'\nimport TagToken from 'src/parser/tag-token'\nimport Token from 'src/parser/token'\nimport Scope from 'src/scope/scope'\n\nconst re = new RegExp(`(${identifier.source})`)\n\nexport default {\n parse: function (tagToken: TagToken, remainTokens: Token[]) {\n const match = tagToken.args.match(re)\n assert(match, `${tagToken.args} not valid identifier`)\n\n this.variable = match[1]\n this.templates = []\n\n const stream = this.liquid.parser.parseStream(remainTokens)\n stream.on('tag:endcapture', () => stream.stop())\n .on('template', tpl => this.templates.push(tpl))\n .on('end', () => {\n throw new Error(`tag ${tagToken.raw} not closed`)\n })\n stream.start()\n },\n render: async function (scope: Scope) {\n const html = await this.liquid.renderer.renderTemplates(this.templates, scope)\n const ctx = new CaptureScope()\n ctx[this.variable] = html\n scope.push(ctx)\n }\n}\n","import { evalExp } from 'src/render/syntax'\n\nexport default {\n parse: function (tagToken, remainTokens) {\n this.cond = tagToken.args\n this.cases = []\n this.elseTemplates = []\n\n let p = []\n const stream = this.liquid.parser.parseStream(remainTokens)\n .on('tag:when', token => {\n this.cases.push({\n val: token.args,\n templates: p = []\n })\n })\n .on('tag:else', () => (p = this.elseTemplates))\n .on('tag:endcase', () => stream.stop())\n .on('template', tpl => p.push(tpl))\n .on('end', () => {\n throw new Error(`tag ${tagToken.raw} not closed`)\n })\n\n stream.start()\n },\n\n render: function (scope) {\n for (let i = 0; i < this.cases.length; i++) {\n const branch = this.cases[i]\n const val = evalExp(branch.val, scope)\n const cond = evalExp(this.cond, scope)\n if (val === cond) {\n return this.liquid.renderer.renderTemplates(branch.templates, scope)\n }\n }\n return this.liquid.renderer.renderTemplates(this.elseTemplates, scope)\n }\n}\n","export default {\n parse: function (tagToken, remainTokens) {\n const stream = this.liquid.parser.parseStream(remainTokens)\n stream\n .on('token', token => {\n if (token.name === 'endcomment') stream.stop()\n })\n .on('end', () => {\n throw new Error(`tag ${tagToken.raw} not closed`)\n })\n stream.start()\n }\n}\n","import assert from 'src/util/assert'\nimport { value, quotedLine } from 'src/parser/lexical'\nimport { evalValue } from 'src/render/syntax'\nimport BlockMode from 'src/scope/block-mode'\n\nconst staticFileRE = /[^\\s,]+/\nconst withRE = new RegExp(`with\\\\s+(${value.source})`)\n\nexport default {\n parse: function (token) {\n let match = staticFileRE.exec(token.args)\n if (match) {\n this.staticValue = match[0]\n }\n\n match = value.exec(token.args)\n if (match) {\n this.value = match[0]\n }\n\n match = withRE.exec(token.args)\n if (match) {\n this.with = match[1]\n }\n },\n render: async function (scope, hash) {\n let filepath\n if (scope.opts.dynamicPartials) {\n if (quotedLine.exec(this.value)) {\n const template = this.value.slice(1, -1)\n filepath = await this.liquid.parseAndRender(template, scope.getAll(), scope.opts)\n } else {\n filepath = evalValue(this.value, scope)\n }\n } else {\n filepath = this.staticValue\n }\n assert(filepath, `cannot include with empty filename`)\n\n const originBlocks = scope.blocks\n const originBlockMode = scope.blockMode\n\n scope.blocks = {}\n scope.blockMode = BlockMode.OUTPUT\n if (this.with) {\n hash[filepath] = evalValue(this.with, scope)\n }\n const templates = await this.liquid.getTemplate(filepath, scope.opts)\n scope.push(hash)\n const html = await this.liquid.renderer.renderTemplates(templates, scope)\n scope.pop(hash)\n scope.blocks = originBlocks\n scope.blockMode = originBlockMode\n return html\n }\n}\n","import assert from 'src/util/assert'\nimport { identifier } from 'src/parser/lexical'\nimport { CaptureScope, AssignScope, DecrementScope } from 'src/scope/scopes'\nimport TagToken from 'src/parser/tag-token'\nimport Scope from 'src/scope/scope'\n\nexport default {\n parse: function (token: TagToken) {\n const match = token.args.match(identifier)\n assert(match, `illegal identifier ${token.args}`)\n this.variable = match[0]\n },\n render: function (scope: Scope) {\n let context = scope.findContextFor(\n this.variable,\n ctx => {\n return !(ctx instanceof CaptureScope) && !(ctx instanceof AssignScope)\n }\n )\n if (!context) {\n context = new DecrementScope()\n scope.unshift(context)\n }\n if (typeof context[this.variable] !== 'number') {\n context[this.variable] = 0\n }\n return --context[this.variable]\n }\n}\n","import assert from 'src/util/assert'\nimport { value as rValue } from 'src/parser/lexical'\nimport { evalValue } from 'src/render/syntax'\n\nconst groupRE = new RegExp(`^(?:(${rValue.source})\\\\s*:\\\\s*)?(.*)$`)\nconst candidatesRE = new RegExp(rValue.source, 'g')\n\nexport default {\n parse: function (tagToken) {\n let match = groupRE.exec(tagToken.args)\n assert(match, `illegal tag: ${tagToken.raw}`)\n\n this.group = match[1] || ''\n const candidates = match[2]\n\n this.candidates = []\n\n while ((match = candidatesRE.exec(candidates))) {\n this.candidates.push(match[0])\n }\n assert(this.candidates.length, `empty candidates: ${tagToken.raw}`)\n },\n\n render: function (scope) {\n const group = evalValue(this.group, scope)\n const fingerprint = `cycle:${group}:` + this.candidates.join(',')\n\n const groups = scope.opts.groups = scope.opts.groups || {}\n let idx = groups[fingerprint]\n\n if (idx === undefined) {\n idx = groups[fingerprint] = 0\n }\n\n const candidate = this.candidates[idx]\n idx = (idx + 1) % this.candidates.length\n groups[fingerprint] = idx\n\n return evalValue(candidate, scope)\n }\n}\n","import { evalExp, isTruthy } from 'src/render/syntax'\n\nexport default {\n parse: function (tagToken, remainTokens) {\n this.branches = []\n this.elseTemplates = []\n\n let p\n const stream = this.liquid.parser.parseStream(remainTokens)\n .on('start', () => this.branches.push({\n cond: tagToken.args,\n templates: (p = [])\n }))\n .on('tag:elsif', token => {\n this.branches.push({\n cond: token.args,\n templates: p = []\n })\n })\n .on('tag:else', () => (p = this.elseTemplates))\n .on('tag:endif', () => stream.stop())\n .on('template', tpl => p.push(tpl))\n .on('end', () => {\n throw new Error(`tag ${tagToken.raw} not closed`)\n })\n\n stream.start()\n },\n\n render: function (scope) {\n for (const branch of this.branches) {\n const cond = evalExp(branch.cond, scope)\n if (isTruthy(cond)) {\n return this.liquid.renderer.renderTemplates(branch.templates, scope)\n }\n }\n return this.liquid.renderer.renderTemplates(this.elseTemplates, scope)\n }\n}\n","import assert from 'src/util/assert'\nimport { identifier } from 'src/parser/lexical'\nimport { CaptureScope, AssignScope, IncrementScope } from 'src/scope/scopes'\n\nexport default {\n parse: function (token) {\n const match = token.args.match(identifier)\n assert(match, `illegal identifier ${token.args}`)\n this.variable = match[0]\n },\n render: function (scope) {\n let context = scope.findContextFor(\n this.variable,\n ctx => {\n return !(ctx instanceof CaptureScope) && !(ctx instanceof AssignScope)\n }\n )\n if (!context) {\n context = new IncrementScope()\n scope.unshift(context)\n }\n if (typeof context[this.variable] !== 'number') {\n context[this.variable] = 0\n }\n const val = context[this.variable]\n context[this.variable]++\n return val\n }\n}\n","import assert from 'src/util/assert'\nimport { value as rValue } from 'src/parser/lexical'\nimport { evalValue } from 'src/render/syntax'\nimport BlockMode from 'src/scope/block-mode'\n\nconst staticFileRE = /\\S+/\n\nexport default {\n parse: function (token, remainTokens) {\n let match = staticFileRE.exec(token.args)\n if (match) {\n this.staticLayout = match[0]\n }\n\n match = rValue.exec(token.args)\n if (match) {\n this.layout = match[0]\n }\n\n this.tpls = this.liquid.parser.parse(remainTokens)\n },\n render: async function (scope, hash) {\n const layout = scope.opts.dynamicPartials\n ? evalValue(this.layout, scope)\n : this.staticLayout\n assert(layout, `cannot apply layout with empty filename`)\n\n // render the remaining tokens immediately\n scope.blockMode = BlockMode.STORE\n const html = await this.liquid.renderer.renderTemplates(this.tpls, scope)\n if (scope.blocks[''] === undefined) {\n scope.blocks[''] = html\n }\n const templates = await this.liquid.getTemplate(layout, scope.opts)\n scope.push(hash)\n scope.blockMode = BlockMode.OUTPUT\n const partial = await this.liquid.renderer.renderTemplates(templates, scope)\n scope.pop(hash)\n return partial\n }\n}\n","import BlockMode from 'src/scope/block-mode'\n\nexport default {\n parse: function (token, remainTokens) {\n const match = /\\w+/.exec(token.args)\n this.block = match ? match[0] : ''\n\n this.tpls = []\n const stream = this.liquid.parser.parseStream(remainTokens)\n .on('tag:endblock', () => stream.stop())\n .on('template', tpl => this.tpls.push(tpl))\n .on('end', () => {\n throw new Error(`tag ${token.raw} not closed`)\n })\n stream.start()\n },\n render: async function (scope) {\n const childDefined = scope.blocks[this.block]\n const html = childDefined !== undefined\n ? childDefined\n : await this.liquid.renderer.renderTemplates(this.tpls, scope)\n\n if (scope.blockMode === BlockMode.STORE) {\n scope.blocks[this.block] = html\n return ''\n }\n return html\n }\n}\n","export default {\n parse: function (tagToken, remainTokens) {\n this.tokens = []\n\n const stream = this.liquid.parser.parseStream(remainTokens)\n stream\n .on('token', token => {\n if (token.name === 'endraw') stream.stop()\n else this.tokens.push(token)\n })\n .on('end', () => {\n throw new Error(`tag ${tagToken.raw} not closed`)\n })\n stream.start()\n },\n render: function () {\n return this.tokens.map(token => token.raw).join('')\n }\n}\n","import { mapSeries } from 'src/util/promise'\nimport assert from 'src/util/assert'\nimport { evalExp } from 'src/render/syntax'\nimport { identifier, value, hash } from 'src/parser/lexical'\n\nconst re = new RegExp(`^(${identifier.source})\\\\s+in\\\\s+` +\n `(${value.source})` +\n `(?:\\\\s+${hash.source})*$`)\n\nexport default {\n parse: function (tagToken, remainTokens) {\n const match = re.exec(tagToken.args)\n assert(match, `illegal tag: ${tagToken.raw}`)\n\n this.variable = match[1]\n this.collection = match[2]\n this.templates = []\n\n let p\n const stream = this.liquid.parser.parseStream(remainTokens)\n .on('start', () => (p = this.templates))\n .on('tag:endtablerow', () => stream.stop())\n .on('template', tpl => p.push(tpl))\n .on('end', () => {\n throw new Error(`tag ${tagToken.raw} not closed`)\n })\n\n stream.start()\n },\n\n render: async function (scope, hash) {\n let collection = evalExp(this.collection, scope) || []\n const offset = hash.offset || 0\n const limit = (hash.limit === undefined) ? collection.length : hash.limit\n\n collection = collection.slice(offset, offset + limit)\n const cols = hash.cols || collection.length\n const contexts = collection.map(item => {\n const ctx = {}\n ctx[this.variable] = item\n return ctx\n })\n\n let row\n let html = ''\n await mapSeries(contexts, async (context, idx) => {\n row = Math.floor(idx / cols) + 1\n const col = (idx % cols) + 1\n if (col === 1) {\n if (row !== 1) {\n html += ''\n }\n html += ``\n }\n\n html += ``\n scope.push(context)\n html += await this.liquid.renderer.renderTemplates(this.templates, scope)\n html += ''\n scope.pop(context)\n return html\n })\n if (row > 0) {\n html += ''\n }\n return html\n }\n}\n","import { evalExp, isFalsy } from 'src/render/syntax'\n\nexport default {\n parse: function (tagToken, remainTokens) {\n this.templates = []\n this.elseTemplates = []\n let p\n const stream = this.liquid.parser.parseStream(remainTokens)\n .on('start', () => {\n p = this.templates\n this.cond = tagToken.args\n })\n .on('tag:else', () => (p = this.elseTemplates))\n .on('tag:endunless', () => stream.stop())\n .on('template', tpl => p.push(tpl))\n .on('end', () => {\n throw new Error(`tag ${tagToken.raw} not closed`)\n })\n\n stream.start()\n },\n\n render: function (scope) {\n const cond = evalExp(this.cond, scope)\n return isFalsy(cond)\n ? this.liquid.renderer.renderTemplates(this.templates, scope)\n : this.liquid.renderer.renderTemplates(this.elseTemplates, scope)\n }\n}\n","import { RenderBreakError } from 'src/util/error'\n\nexport default {\n render: async function () {\n throw new RenderBreakError('break')\n }\n}\n","import { RenderBreakError } from 'src/util/error'\n\nexport default {\n render: async function () {\n throw new RenderBreakError('continue')\n }\n}\n","import assign from './assign'\nimport For from './for'\nimport capture from './capture'\nimport Case from './case'\nimport comment from './comment'\nimport include from './include'\nimport decrement from './decrement'\nimport cycle from './cycle'\nimport If from './if'\nimport increment from './increment'\nimport layout from './layout'\nimport block from './block'\nimport raw from './raw'\nimport tablerow from './tablerow'\nimport unless from './unless'\nimport Break from './break'\nimport Continue from './continue'\nimport ITagImplOptions from 'src/template/tag/itag-impl-options'\n\nconst tags: { [key: string]: ITagImplOptions } = {\n assign, 'for': For, capture, 'case': Case, comment, include, decrement, increment, cycle, 'if': If, layout, block, raw, tablerow, unless, 'break': Break, 'continue': Continue\n}\n\nexport default tags\n","const escapeMap = {\n '&': '&',\n '<': '<',\n '>': '>',\n '\"': '"',\n \"'\": '''\n}\nconst unescapeMap = {\n '&': '&',\n '<': '<',\n '>': '>',\n '"': '\"',\n ''': \"'\"\n}\n\nfunction escape (str) {\n return String(str).replace(/&|<|>|\"|'/g, m => escapeMap[m])\n}\n\nfunction unescape (str) {\n return String(str).replace(/&(amp|lt|gt|#34|#39);/g, m => unescapeMap[m])\n}\n\nexport default {\n 'escape': escape,\n 'escape_once': str => escape(unescape(str)),\n 'newline_to_br': v => v.replace(/\\n/g, '
'),\n 'strip_html': v => String(v).replace(/|||<.*?>/g, '')\n}\n","export default {\n 'append': (v, arg) => v + arg,\n 'prepend': (v, arg) => arg + v,\n 'capitalize': str => String(str).charAt(0).toUpperCase() + str.slice(1),\n 'concat': (v, arg) => Array.prototype.concat.call(v, arg),\n 'lstrip': v => String(v).replace(/^\\s+/, ''),\n 'downcase': v => v.toLowerCase(),\n 'upcase': str => String(str).toUpperCase(),\n 'remove': (v, arg) => v.split(arg).join(''),\n 'remove_first': (v, l) => v.replace(l, ''),\n 'replace': (v, pattern, replacement) =>\n String(v).split(pattern).join(replacement),\n 'replace_first': (v, arg1, arg2) => String(v).replace(arg1, arg2),\n 'rstrip': str => String(str).replace(/\\s+$/, ''),\n 'split': (v, arg) => String(v).split(arg),\n 'strip': (v) => String(v).trim(),\n 'strip_newlines': v => String(v).replace(/\\n/g, ''),\n 'truncate': (v, l, o) => {\n v = String(v)\n o = (o === undefined) ? '...' : o\n l = l || 16\n if (v.length <= l) return v\n return v.substr(0, l - o.length) + o\n },\n 'truncatewords': (v, l, o) => {\n if (o === undefined) o = '...'\n const arr = v.split(' ')\n let ret = arr.slice(0, l).join(' ')\n if (arr.length > l) ret += o\n return ret\n }\n}\n","export default {\n 'abs': v => Math.abs(v),\n 'ceil': v => Math.ceil(v),\n 'divided_by': (v, arg) => v / arg,\n 'floor': v => Math.floor(v),\n 'minus': bindFixed((v, arg) => v - arg),\n 'modulo': bindFixed((v, arg) => v % arg),\n 'round': (v, arg) => {\n const amp = Math.pow(10, arg || 0)\n return Math.round(v * amp) / amp\n },\n 'plus': bindFixed((v, arg) => Number(v) + Number(arg)),\n 'times': (v, arg) => v * arg\n}\n\nfunction getFixed (v) {\n const p = String(v).split('.')\n return (p.length > 1) ? p[1].length : 0\n}\n\nfunction bindFixed (cb) {\n return (l, r) => {\n const f = Math.max(getFixed(l), getFixed(r))\n return cb(l, r).toFixed(f)\n }\n}\n","export default {\n 'url_decode': x => x.split('+').map(decodeURIComponent).join(' '),\n 'url_encode': x => x.split(' ').map(encodeURIComponent).join('+')\n}\n","import { last } from 'src/util/underscore'\n\nexport default {\n 'join': (v, arg) => v.join(arg === undefined ? ' ' : arg),\n 'last': v => last(v),\n 'first': v => v[0],\n 'map': (arr, arg) => arr.map(v => v[arg]),\n 'reverse': v => v.reverse(),\n 'sort': (v, arg) => v.sort(arg),\n 'size': v => v.length,\n 'slice': (v, begin, length) => {\n if (length === undefined) length = 1\n return v.slice(begin, begin + length)\n },\n 'uniq': function (arr) {\n const u = {}\n return (arr || []).filter(val => {\n if (u.hasOwnProperty(val)) {\n return false\n }\n u[val] = true\n return true\n })\n }\n}\n","import { padStart } from './underscore'\n\nconst monthNames = [\n 'January', 'February', 'March', 'April', 'May', 'June', 'July', 'August',\n 'September', 'October', 'November', 'December'\n]\nconst dayNames = [\n 'Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'\n]\nconst monthNamesShort = monthNames.map(abbr)\nconst dayNamesShort = dayNames.map(abbr)\nconst suffixes = {\n 1: 'st',\n 2: 'nd',\n 3: 'rd',\n 'default': 'th'\n}\n\nfunction abbr (str) {\n return str.slice(0, 3)\n}\n\n// prototype extensions\nconst _date = {\n daysInMonth: function (d) {\n const feb = _date.isLeapYear(d) ? 29 : 28\n return [31, feb, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]\n },\n\n getDayOfYear: function (d) {\n let num = 0\n for (let i = 0; i < d.getMonth(); ++i) {\n num += _date.daysInMonth(d)[i]\n }\n return num + d.getDate()\n },\n\n getWeekOfYear: function (d, startDay) {\n // Skip to startDay of this week\n const now = this.getDayOfYear(d) + (startDay - d.getDay())\n // Find the first startDay of the year\n const jan1 = new Date(d.getFullYear(), 0, 1)\n const then = (7 - jan1.getDay() + startDay)\n return padStart(String(Math.floor((now - then) / 7) + 1), 2, '0')\n },\n\n isLeapYear: function (d) {\n const year = d.getFullYear()\n return !!((year & 3) === 0 && (year % 100 || (year % 400 === 0 && year)))\n },\n\n getSuffix: function (d) {\n const str = d.getDate().toString()\n const index = parseInt(str.slice(-1))\n return suffixes[index] || suffixes['default']\n },\n\n century: function (d) {\n return parseInt(d.getFullYear().toString().substring(0, 2), 10)\n }\n}\n\nconst formatCodes = {\n a: function (d) {\n return dayNamesShort[d.getDay()]\n },\n A: function (d) {\n return dayNames[d.getDay()]\n },\n b: function (d) {\n return monthNamesShort[d.getMonth()]\n },\n B: function (d) {\n return monthNames[d.getMonth()]\n },\n c: function (d) {\n return d.toLocaleString()\n },\n C: function (d) {\n return _date.century(d)\n },\n d: function (d) {\n return padStart(d.getDate(), 2, '0')\n },\n e: function (d) {\n return padStart(d.getDate(), 2)\n },\n H: function (d) {\n return padStart(d.getHours(), 2, '0')\n },\n I: function (d) {\n return padStart(String(d.getHours() % 12 || 12), 2, '0')\n },\n j: function (d) {\n return padStart(_date.getDayOfYear(d), 3, '0')\n },\n k: function (d) {\n return padStart(d.getHours(), 2)\n },\n l: function (d) {\n return padStart(String(d.getHours() % 12 || 12), 2)\n },\n L: function (d) {\n return padStart(d.getMilliseconds(), 3, '0')\n },\n m: function (d) {\n return padStart(d.getMonth() + 1, 2, '0')\n },\n M: function (d) {\n return padStart(d.getMinutes(), 2, '0')\n },\n p: function (d) {\n return (d.getHours() < 12 ? 'AM' : 'PM')\n },\n P: function (d) {\n return (d.getHours() < 12 ? 'am' : 'pm')\n },\n q: function (d) {\n return _date.getSuffix(d)\n },\n s: function (d) {\n return Math.round(d.valueOf() / 1000)\n },\n S: function (d) {\n return padStart(d.getSeconds(), 2, '0')\n },\n u: function (d) {\n return d.getDay() || 7\n },\n U: function (d) {\n return _date.getWeekOfYear(d, 0)\n },\n w: function (d) {\n return d.getDay()\n },\n W: function (d) {\n return _date.getWeekOfYear(d, 1)\n },\n x: function (d) {\n return d.toLocaleDateString()\n },\n X: function (d) {\n return d.toLocaleTimeString()\n },\n y: function (d) {\n return d.getFullYear().toString().substring(2, 4)\n },\n Y: function (d) {\n return d.getFullYear()\n },\n z: function (d) {\n const tz = d.getTimezoneOffset() / 60 * 100\n return (tz > 0 ? '-' : '+') + padStart(String(Math.abs(tz)), 4, '0')\n },\n '%': function () {\n return '%'\n }\n};\n(formatCodes as any).h = formatCodes.b;\n(formatCodes as any).N = formatCodes.L\n\nexport default function (d, format) {\n let output = ''\n let remaining = format\n\n while (true) {\n const r = /%./g\n const results = r.exec(remaining)\n\n // No more format codes. Add the remaining text and return\n if (!results) {\n return output + remaining\n }\n\n // Add the preceding text\n output += remaining.slice(0, r.lastIndex - 2)\n remaining = remaining.slice(r.lastIndex)\n\n // Add the format code\n const ch = results[0].charAt(1)\n const func = formatCodes[ch]\n output += func ? func.call(this, d) : '%' + ch\n }\n}\n","import strftime from 'src/util/strftime'\nimport { isString } from 'src/util/underscore'\n\nexport default {\n 'date': (v, arg) => {\n let date = v\n if (v === 'now') {\n date = new Date()\n } else if (isString(v)) {\n date = new Date(v)\n }\n return isValidDate(date) ? strftime(date, arg) : v\n }\n}\n\nfunction isValidDate (date) {\n return date instanceof Date && !isNaN(date.getTime())\n}\n","import { isTruthy } from 'src/render/syntax'\n\nexport default {\n 'default': (v, arg) => isTruthy(v) ? v : arg\n}\n","import html from './html'\nimport str from './string'\nimport math from './math'\nimport url from './url'\nimport array from './array'\nimport date from './date'\nimport obj from './object'\n\nexport default { ...html, ...str, ...math, ...url, ...date, ...obj, ...array }\n","import Scope from './scope/scope'\nimport * as Types from './types'\nimport fs from 'src/fs'\nimport * as _ from './util/underscore'\nimport ITemplate from './template/itemplate'\nimport Tokenizer from './parser/tokenizer'\nimport Render from './render/render'\nimport Tag from './template/tag/tag'\nimport Filter from './template/filter'\nimport Parser from './parser/parser'\nimport ITagImplOptions from './template/tag/itag-impl-options'\nimport Value from './template/value'\nimport { isTruthy, isFalsy, evalExp, evalValue } from './render/syntax'\nimport builtinTags from './builtin/tags'\nimport builtinFilters from './builtin/filters'\nimport { LiquidOptions, NormalizedFullOptions, applyDefault, normalize } from './liquid-options'\n\nexport default class Liquid {\n public options: NormalizedFullOptions\n private cache: object\n private parser: Parser\n private renderer: Render\n private tokenizer: Tokenizer\n\n constructor (opts: LiquidOptions = {}) {\n this.options = applyDefault(normalize(opts))\n if (this.options.cache) {\n this.cache = {}\n }\n this.parser = new Parser(this)\n this.renderer = new Render()\n this.tokenizer = new Tokenizer(this.options)\n\n _.forOwn(builtinTags, (conf, name) => this.registerTag(name, conf))\n _.forOwn(builtinFilters, (handler, name) => this.registerFilter(name, handler))\n }\n parse (html: string, filepath?: string) {\n const tokens = this.tokenizer.tokenize(html, filepath)\n return this.parser.parse(tokens)\n }\n render (tpl: Array, ctx?: object, opts?: LiquidOptions) {\n const options = { ...this.options, ...normalize(opts) }\n const scope = new Scope(ctx, options)\n return this.renderer.renderTemplates(tpl, scope)\n }\n async parseAndRender (html: string, ctx?: object, opts?: LiquidOptions) {\n const tpl = await this.parse(html)\n return this.render(tpl, ctx, opts)\n }\n async getTemplate (file, opts?: LiquidOptions) {\n const options = normalize(opts)\n const roots = options.root ? [...options.root, ...this.options.root] : this.options.root\n const paths = roots.map(root => fs.resolve(root, file, this.options.extname))\n\n for (const filepath of paths) {\n if (!(await fs.exists(filepath))) continue\n\n if (this.options.cache && this.cache[filepath]) return this.cache[filepath]\n const value = this.parse(await fs.readFile(filepath), filepath)\n if (this.options.cache) this.cache[filepath] = value\n return value\n }\n\n const err = new Error('ENOENT') as any\n err.message = `ENOENT: Failed to lookup \"${file}\" in \"${roots}\"`\n err.code = 'ENOENT'\n throw err\n }\n async renderFile (file, ctx?: object, opts?: LiquidOptions) {\n const options = normalize(opts)\n const templates = await this.getTemplate(file, options)\n return this.render(templates, ctx, opts)\n }\n evalValue (str: string, scope: Scope) {\n return new Value(str, this.options.strict_filters).value(scope)\n }\n registerFilter (name, filter) {\n return Filter.register(name, filter)\n }\n registerTag (name: string, tag: ITagImplOptions) {\n return Tag.register(name, tag)\n }\n plugin (plugin) {\n return plugin.call(this, Liquid)\n }\n express () {\n const self = this\n return function (filePath: string, ctx: object, cb: (err: Error, html?: string) => void) {\n const opts = { root: this.root }\n self.renderFile(filePath, ctx, opts).then(html => cb(null, html), cb)\n }\n }\n static default = Liquid\n static isTruthy = isTruthy\n static isFalsy = isFalsy\n static evalExp = evalExp\n static evalValue = evalValue\n static Types = Types\n}\n"],"names":["range","tslib_1.__extends","_.create","_\r\n .range","_.padStart","_.isArray","_.isString","BlockMode","_.assign","_.last","value","_.isObject","filter","_.isNil","_.isFunction","lexical.isInteger","last","lexical.tagLine","operators","lexical.operators","lexical.quoteBalanced","lexical.rangeLine","lexical.isLiteral","lexical.parseLiteral","lexical.isVariable","lexical.value","lexical.filterLine","lexical.matchValue","lexical.filter","Value","HTML","re","hash","rValue","staticFileRE","_.forOwn","builtinTags"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"liquid.js","sources":["../src/util/underscore.ts","../src/parser/lexical.ts","../src/util/error.ts","../src/util/assert.ts","../src/liquid-options.ts","../src/scope/block-mode.ts","../src/scope/scope.ts","../src/scope/scopes.ts","../src/fs/browser.ts","../src/parser/whitespace-ctrl.ts","../src/parser/token.ts","../src/parser/html-token.ts","../src/parser/delimited-token.ts","../src/parser/tag-token.ts","../src/parser/output-token.ts","../src/parser/tokenizer.ts","../src/render/render.ts","../src/render/syntax.ts","../src/template/tag/hash.ts","../src/template/template.ts","../src/template/tag/tag.ts","../src/template/filter/filter.ts","../src/parser/parse-stream.ts","../src/template/value.ts","../src/template/output.ts","../src/template/html.ts","../src/parser/parser.ts","../src/builtin/tags/assign.ts","../src/util/promise.ts","../src/builtin/tags/for.ts","../src/builtin/tags/capture.ts","../src/builtin/tags/case.ts","../src/builtin/tags/comment.ts","../src/builtin/tags/include.ts","../src/builtin/tags/decrement.ts","../src/builtin/tags/cycle.ts","../src/builtin/tags/if.ts","../src/builtin/tags/increment.ts","../src/builtin/tags/layout.ts","../src/builtin/tags/block.ts","../src/builtin/tags/raw.ts","../src/builtin/tags/tablerow.ts","../src/builtin/tags/unless.ts","../src/builtin/tags/break.ts","../src/builtin/tags/continue.ts","../src/builtin/tags/index.ts","../src/builtin/filters/html.ts","../src/builtin/filters/string.ts","../src/builtin/filters/math.ts","../src/builtin/filters/url.ts","../src/builtin/filters/array.ts","../src/util/strftime.ts","../src/builtin/filters/date.ts","../src/builtin/filters/object.ts","../src/builtin/filters/index.ts","../src/liquid.ts"],"sourcesContent":["const toStr = Object.prototype.toString\nconst arrToStr = Array.prototype.toString\n\n/*\n * Checks if value is classified as a String primitive or object.\n * @param {any} value The value to check.\n * @return {Boolean} Returns true if value is a string, else false.\n */\nexport function isString (value: any) {\n return toStr.call(value) === '[object String]'\n}\n\nexport function isFunction (value: any) {\n return typeof value === 'function'\n}\n\nexport function promisify (fn: (arg1: T1, cb: (err: Error | null, result: T2) => void) => void): (arg1: T1) => Promise;\nexport function promisify (fn: (arg1: T1, arg2: T2, cb: (err: Error | null, result: T3) => void) => void):(arg1: T1, arg2: T2) => Promise;\nexport function promisify (fn: any) {\n return function (...args: any[]) {\n return new Promise((resolve, reject) => {\n fn(...args, (err: Error, result: any) => {\n err ? reject(err) : resolve(result)\n })\n })\n }\n}\n\nexport function stringify (value: any): string {\n if (isNil(value)) return ''\n if (isFunction(value.to_liquid)) return stringify(value.to_liquid())\n if (isFunction(value.toLiquid)) return stringify(value.toLiquid())\n if (isFunction(value.to_s)) return value.to_s()\n if ([toStr, arrToStr].indexOf(value.toString) > -1) return defaultToString(value)\n if (isFunction(value.toString)) return value.toString()\n return toStr.call(value)\n}\n\nfunction defaultToString (value: any): string {\n const cache: string[] = []\n return JSON.stringify(value, (key, value) => {\n if (isObject(value)) {\n if (cache.indexOf(value) !== -1) {\n return\n }\n cache.push(value)\n }\n return value\n })\n}\n\nexport function create (proto: T1): T2 {\n return Object.create(proto)\n}\n\nexport function isNil (value: any): boolean {\n return value === null || value === undefined\n}\n\nexport function isArray (value: any): boolean {\n // be compatible with IE 8\n return toStr.call(value) === '[object Array]'\n}\n\nexport function isError (value: any): boolean {\n const signature = toStr.call(value)\n // [object XXXError]\n return signature.substr(-6, 5) === 'Error' ||\n (typeof value.message === 'string' && typeof value.name === 'string')\n}\n\n/*\n * Iterates over own enumerable string keyed properties of an object and invokes iteratee for each property.\n * The iteratee is invoked with three arguments: (value, key, object).\n * Iteratee functions may exit iteration early by explicitly returning false.\n * @param {Object} object The object to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @return {Object} Returns object.\n */\nexport function forOwn (\n object: {[key: string]: T} | undefined,\n iteratee: ((val: T, key: string, obj: {[key: string]: T}) => boolean | void)\n) {\n object = object || {}\n for (const k in object) {\n if (object.hasOwnProperty(k)) {\n if (iteratee(object[k], k, object) === false) break\n }\n }\n return object\n}\n\nexport function last (arr: T[]): T;\nexport function last (arr: string): string;\nexport function last (arr: any[] | string): any | string {\n return arr[arr.length - 1]\n}\n\n/*\n * Checks if value is the language type of Object.\n * (e.g. arrays, functions, objects, regexes, new Number(0), and new String(''))\n * @param {any} value The value to check.\n * @return {Boolean} Returns true if value is an object, else false.\n */\nexport function isObject (value: any): boolean {\n const type = typeof value\n return value !== null && (type === 'object' || type === 'function')\n}\n\n/*\n * A function to create flexibly-numbered lists of integers,\n * handy for each and map loops. start, if omitted, defaults to 0; step defaults to 1.\n * Returns a list of integers from start (inclusive) to stop (exclusive),\n * incremented (or decremented) by step, exclusive.\n * Note that ranges that stop before they start are considered to be zero-length instead of\n * negative — if you'd like a negative range, use a negative step.\n */\nexport function range (start: number, stop?: number, step?: number) {\n if (stop === undefined) {\n stop = start\n start = 0\n }\n step = step || 1\n\n const arr: number[] = []\n for (let i = start; i < stop; i += step) {\n arr.push(i)\n }\n return arr\n}\n\nexport function padStart (str: any, length: number, ch: string = ' ') {\n str = String(str)\n let n = length - str.length\n while (n-- > 0) str = ch + str\n return str\n}\n","// quote related\nconst singleQuoted = /'[^']*'/\nconst doubleQuoted = /\"[^\"]*\"/\nexport const quoted = new RegExp(`${singleQuoted.source}|${doubleQuoted.source}`)\nexport const quoteBalanced = new RegExp(`(?:${quoted.source}|[^'\"])*`)\n\n// basic types\nexport const integer = /-?\\d+/\nexport const number = /[+-]?(?:\\d+\\.?\\d*|\\.?\\d+)/\nexport const bool = /true|false/\n\n// property access\nexport const identifier = /[\\w-]+[?]?/\nexport const subscript = new RegExp(`\\\\[(?:${quoted.source}|[\\\\w-\\\\.]+)\\\\]`)\nexport const literal = new RegExp(`(?:${quoted.source}|${bool.source}|${number.source})`)\nexport const variable = new RegExp(`${identifier.source}(?:\\\\.${identifier.source}|${subscript.source})*`)\n\n// range related\nexport const rangeLimit = new RegExp(`(?:${variable.source}|${number.source})`)\nexport const range = new RegExp(`\\\\(${rangeLimit.source}\\\\.\\\\.${rangeLimit.source}\\\\)`)\nexport const rangeCapture = new RegExp(`\\\\((${rangeLimit.source})\\\\.\\\\.(${rangeLimit.source})\\\\)`)\n\nexport const value = new RegExp(`(?:${variable.source}|${literal.source}|${range.source})`)\n\n// hash related\nexport const hash = new RegExp(`(?:${identifier.source})\\\\s*:\\\\s*(?:${value.source})`)\nexport const hashCapture = new RegExp(`(${identifier.source})\\\\s*:\\\\s*(${value.source})`, 'g')\n\n// full match\nexport const tagLine = new RegExp(`^\\\\s*(${identifier.source})\\\\s*([\\\\s\\\\S]*?)\\\\s*$`)\nexport const literalLine = new RegExp(`^${literal.source}$`, 'i')\nexport const variableLine = new RegExp(`^${variable.source}$`)\nexport const numberLine = new RegExp(`^${number.source}$`)\nexport const boolLine = new RegExp(`^${bool.source}$`, 'i')\nexport const quotedLine = new RegExp(`^${quoted.source}$`)\nexport const rangeLine = new RegExp(`^${rangeCapture.source}$`)\nexport const integerLine = new RegExp(`^${integer.source}$`)\n\n// filter related\nexport const valueDeclaration = new RegExp(`(?:${identifier.source}\\\\s*:\\\\s*)?${value.source}`)\nexport const valueList = new RegExp(`${valueDeclaration.source}(\\\\s*,\\\\s*${valueDeclaration.source})*`)\nexport const filter = new RegExp(`${identifier.source}(?:\\\\s*:\\\\s*${valueList.source})?`, 'g')\nexport const filterCapture = new RegExp(`(${identifier.source})(?:\\\\s*:\\\\s*(${valueList.source}))?`)\nexport const filterLine = new RegExp(`^${filterCapture.source}$`)\n\nexport const operators = [\n /\\s+or\\s+/,\n /\\s+and\\s+/,\n /==|!=|<=|>=|<|>|\\s+contains\\s+/\n]\n\nexport function isInteger (str: string) {\n return integerLine.test(str)\n}\n\nexport function isLiteral (str: string) {\n return literalLine.test(str)\n}\n\nexport function isRange (str: string) {\n return rangeLine.test(str)\n}\n\nexport function isVariable (str: string) {\n return variableLine.test(str)\n}\n\nexport function matchValue (str: string) {\n return value.exec(str)\n}\n\nexport function parseLiteral (str: string) {\n let res = str.match(numberLine)\n if (res) {\n return Number(str)\n }\n res = str.match(boolLine)\n if (res) {\n return str.toLowerCase() === 'true'\n }\n res = str.match(quotedLine)\n if (res) {\n return str.slice(1, -1)\n }\n throw new TypeError(`cannot parse '${str}' as literal`)\n}\n","import * as _ from './underscore'\nimport Token from 'src/parser/token'\nimport ITemplate from 'src/template/itemplate'\n\nabstract class LiquidError extends Error {\n private token: Token\n private originalError: Error\n constructor (err: Error, token: Token) {\n super(err.message)\n this.originalError = err\n this.token = token\n }\n protected update () {\n const err = this.originalError\n const context = mkContext(this.token)\n this.message = mkMessage(err.message, this.token)\n this.stack = this.message + '\\n' + context +\n '\\n' + this.stack + '\\nFrom ' + err.stack\n }\n}\n\nexport class TokenizationError extends LiquidError {\n constructor (message: string, token: Token) {\n super(new Error(message), token)\n this.name = 'TokenizationError'\n super.update()\n }\n}\n\nexport class ParseError extends LiquidError {\n constructor (err: Error, token: Token) {\n super(err, token)\n this.name = 'ParseError'\n this.message = err.message\n super.update()\n }\n}\n\nexport class RenderError extends LiquidError {\n constructor (err: Error, tpl: ITemplate) {\n super(err, tpl.token)\n this.name = 'RenderError'\n this.message = err.message\n super.update()\n }\n}\n\nexport class RenderBreakError extends Error {\n resolvedHTML: string = ''\n constructor (message: string) {\n super(message)\n this.name = 'RenderBreakError'\n this.message = message + ''\n }\n}\n\nexport class AssertionError extends Error {\n constructor (message: string) {\n super(message)\n this.name = 'AssertionError'\n this.message = message + ''\n }\n}\n\nfunction mkContext (token: Token) {\n const lines = token.input.split('\\n')\n const begin = Math.max(token.line - 2, 1)\n const end = Math.min(token.line + 3, lines.length)\n\n const context = _\n .range(begin, end + 1)\n .map(lineNumber => {\n const indicator = (lineNumber === token.line) ? '>> ' : ' '\n const num = _.padStart(String(lineNumber), String(end).length)\n const text = lines[lineNumber - 1]\n return `${indicator}${num}| ${text}`\n })\n .join('\\n')\n\n return context\n}\n\nfunction mkMessage (msg: string, token: Token) {\n if (token.file) msg += `, file:${token.file}`\n msg += `, line:${token.line}, col:${token.col}`\n return msg\n}\n","import { AssertionError } from './error'\n\nexport default function (predicate: any, message?: string) {\n if (!predicate) {\n message = message || `expect ${predicate} to be true`\n throw new AssertionError(message)\n }\n}\n","/* eslint-disable camelcase */\n\nimport * as _ from './util/underscore'\n\nexport interface LiquidOptions {\n /** `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 `[\".\"]` */\n root?: string | string[]\n /** `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 `\"\"`. */\n extname?: string\n /** `cache` indicates whether or not to cache resolved templates. Defaults to `false`. */\n cache?: boolean\n /** `dynamicPartials`: if set, treat `` parameter in `{%include filepath %}`, `{%layout filepath%}` as a variable, otherwise as a literal value. Defaults to `true`. */\n dynamicPartials?: boolean\n /** `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`. */\n strict_filters?: boolean\n /** `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`. */\n strict_variables?: boolean\n /** `trim_tag_right` is used to strip blank characters (including ` `, `\\t`, and `\\r`) from the right of tags (`{% %}`) until `\\n` (inclusive). Defaults to `false`. */\n trim_tag_right?: boolean\n /** `trim_tag_left` is similar to `trim_tag_right`, whereas the `\\n` is exclusive. Defaults to `false`. See Whitespace Control for details. */\n trim_tag_left?: boolean\n /** ``trim_output_right` is used to strip blank characters (including ` `, `\\t`, and `\\r`) from the right of values (`{{ }}`) until `\\n` (inclusive). Defaults to `false`. */\n trim_output_right?: boolean\n /** `trim_output_left` is similar to `trim_output_right`, whereas the `\\n` is exclusive. Defaults to `false`. See Whitespace Control for details. */\n trim_output_left?: boolean\n /** `tag_delimiter_left` and `tag_delimiter_right` are used to override the delimiter for liquid tags **/\n tag_delimiter_left?: string,\n tag_delimiter_right?: string,\n /** `output_delimiter_left` and `output_delimiter_right` are used to override the delimiter for liquid outputs **/\n output_delimiter_left?: string,\n output_delimiter_right?: string,\n /** `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`. */\n greedy?: boolean\n}\n\nexport interface NormalizedOptions extends LiquidOptions {\n root?: string[]\n}\n\nexport interface NormalizedFullOptions extends NormalizedOptions {\n root: string[]\n extname: string\n cache: boolean\n dynamicPartials: boolean\n strict_filters: boolean\n strict_variables: boolean\n trim_tag_right: boolean\n trim_tag_left: boolean\n trim_output_right: boolean\n trim_output_left: boolean\n tag_delimiter_left: string,\n tag_delimiter_right: string,\n output_delimiter_left: string,\n output_delimiter_right: string,\n greedy: boolean\n}\n\nconst defaultOptions: NormalizedFullOptions = {\n root: ['.'],\n cache: false,\n extname: '',\n dynamicPartials: true,\n trim_tag_right: false,\n trim_tag_left: false,\n trim_output_right: false,\n trim_output_left: false,\n greedy: true,\n tag_delimiter_left: '{%',\n tag_delimiter_right: '%}',\n output_delimiter_left: '{{',\n output_delimiter_right: '}}',\n strict_filters: false,\n strict_variables: false\n}\n\nexport function normalize (options?: LiquidOptions): NormalizedOptions {\n options = options || {}\n if (options.hasOwnProperty('root')) {\n options.root = normalizeStringArray(options.root)\n }\n return options as NormalizedOptions\n}\n\nexport function applyDefault (options?: NormalizedOptions): NormalizedFullOptions {\n return { ...defaultOptions, ...options }\n}\n\nfunction normalizeStringArray (value: any): string[] {\n if (_.isArray(value)) return value as string[]\n if (_.isString(value)) return [value as string]\n return []\n}\n","enum BlockMode {\n /* store rendered html into blocks */\n OUTPUT,\n /* output rendered html directly */\n STORE\n}\n\nexport default BlockMode\n","import * as _ from '../util/underscore'\nimport { __assign } from 'tslib'\nimport * as lexical from '../parser/lexical'\nimport assert from '../util/assert'\nimport { NormalizedFullOptions, applyDefault } from '../liquid-options'\nimport BlockMode from './block-mode'\nimport IContext from './icontext'\n\nexport default class Scope {\n opts: NormalizedFullOptions\n contexts: Array\n blocks: object = {}\n groups: {[key: string]: number} = {}\n blockMode: BlockMode = BlockMode.OUTPUT\n constructor (ctx: object = {}, opts?: NormalizedFullOptions) {\n this.opts = applyDefault(opts)\n this.contexts = [ctx || {}]\n }\n getAll () {\n return this.contexts.reduce((ctx, val) => __assign(ctx, val), {})\n }\n get (path: string): any {\n const paths = this.propertyAccessSeq(path)\n const scope = this.findContextFor(paths[0]) || _.last(this.contexts)\n return paths.reduce((value, key) => this.readProperty(value, key), scope)\n }\n set (path: string, v: any): void {\n const paths = this.propertyAccessSeq(path)\n let scope = this.findContextFor(paths[0]) || _.last(this.contexts)\n paths.some((key, i) => {\n if (!_.isObject(scope)) {\n return true\n }\n if (i === paths.length - 1) {\n scope[key] = v\n return true\n }\n if (undefined === scope[key]) {\n scope[key] = {}\n }\n scope = scope[key]\n return false\n })\n }\n unshift (ctx: object) {\n return this.contexts.unshift(ctx)\n }\n push (ctx: object) {\n return this.contexts.push(ctx)\n }\n pop (ctx?: object): object | undefined {\n if (!arguments.length) {\n return this.contexts.pop()\n }\n const i = this.contexts.findIndex(scope => scope === ctx)\n if (i === -1) {\n throw new TypeError('scope not found, cannot pop')\n }\n return this.contexts.splice(i, 1)[0]\n }\n findContextFor (key: string, filter: ((conttext: object) => boolean) = () => true) {\n for (let i = this.contexts.length - 1; i >= 0; i--) {\n const candidate = this.contexts[i]\n if (!filter(candidate)) continue\n if (key in candidate) {\n return candidate\n }\n }\n return null\n }\n private readProperty (obj: IContext, key: string) {\n let val\n if (_.isNil(obj)) {\n val = undefined\n } else {\n obj = toLiquid(obj)\n val = key === 'size' ? readSize(obj) : obj[key]\n if (_.isFunction(obj.liquid_method_missing)) {\n val = obj.liquid_method_missing!(key)\n }\n }\n if (_.isNil(val) && this.opts.strict_variables) {\n throw new TypeError(`undefined variable: ${key}`)\n }\n return val\n }\n\n /*\n * Parse property access sequence from access string\n * @example\n * accessSeq(\"foo.bar\") // ['foo', 'bar']\n * accessSeq(\"foo['bar']\") // ['foo', 'bar']\n * accessSeq(\"foo['b]r']\") // ['foo', 'b]r']\n * accessSeq(\"foo[bar.coo]\") // ['foo', 'bar'], for bar.coo == 'bar'\n */\n propertyAccessSeq (str: string) {\n str = String(str)\n const seq: string[] = []\n let name = ''\n let j\n let i = 0\n while (i < str.length) {\n switch (str[i]) {\n case '[':\n push()\n\n const delemiter = str[i + 1]\n if (/['\"]/.test(delemiter)) { // foo[\"bar\"]\n j = str.indexOf(delemiter, i + 2)\n assert(j !== -1, `unbalanced ${delemiter}: ${str}`)\n name = str.slice(i + 2, j)\n push()\n i = j + 2\n } else { // foo[bar.coo]\n j = matchRightBracket(str, i + 1)\n assert(j !== -1, `unbalanced []: ${str}`)\n name = str.slice(i + 1, j)\n if (!lexical.isInteger(name)) { // foo[bar] vs. foo[1]\n name = String(this.get(name))\n }\n push()\n i = j + 1\n }\n break\n case '.':// foo.bar, foo[0].bar\n push()\n i++\n break\n default:// foo.bar\n name += str[i]\n i++\n }\n }\n push()\n\n if (!seq.length) {\n throw new TypeError(`invalid path:\"${str}\"`)\n }\n return seq\n\n function push () {\n if (name.length) seq.push(name)\n name = ''\n }\n }\n}\n\nfunction toLiquid (obj: IContext) {\n if (_.isFunction(obj.to_liquid)) {\n return obj.to_liquid()\n }\n if (_.isFunction(obj.toLiquid)) {\n return obj.toLiquid()\n }\n return obj\n}\n\nfunction readSize (obj: IContext) {\n if (!_.isNil(obj.size)) return obj.size\n if (_.isArray(obj) || _.isString(obj)) return obj.length\n return obj.size\n}\n\nfunction matchRightBracket (str: string, begin: number) {\n let stack = 1 // count of '[' - count of ']'\n for (let i = begin; i < str.length; i++) {\n if (str[i] === '[') {\n stack++\n }\n if (str[i] === ']') {\n stack--\n if (stack === 0) {\n return i\n }\n }\n }\n return -1\n}\n","export class CaptureScope {}\nexport class AssignScope {}\nexport class IncrementScope {}\nexport class DecrementScope {}\n","import { last } from '../util/underscore'\nimport IFS from './ifs'\n\nfunction domResolve (root: string, path: string) {\n const base = document.createElement('base')\n base.href = root\n\n const head = document.getElementsByTagName('head')[0]\n head.insertBefore(base, head.firstChild)\n\n const a = document.createElement('a')\n a.href = path\n const resolved = a.href\n head.removeChild(base)\n\n return resolved\n}\n\nfunction resolve (root: string, filepath: string, ext: string) {\n if (root.length && last(root) !== '/') root += '/'\n const url = domResolve(root, filepath)\n return url.replace(/^(\\w+:\\/\\/[^/]+)(\\/[^?]+)/, (str, origin, path) => {\n const last = path.split('/').pop()\n if (/\\.\\w+$/.test(last)) return str\n return origin + path + ext\n })\n}\n\nasync function readFile (url: string): Promise {\n return new Promise((resolve, reject) => {\n const xhr = new XMLHttpRequest()\n xhr.onload = () => {\n if (xhr.status >= 200 && xhr.status < 300) {\n resolve(xhr.responseText as string)\n } else {\n reject(new Error(xhr.statusText))\n }\n }\n xhr.onerror = () => {\n reject(new Error('An error occurred whilst receiving the response.'))\n }\n xhr.open('GET', url)\n xhr.send()\n })\n}\n\nasync function exists () {\n return true\n}\n\nexport default { readFile, resolve, exists } as IFS\n","import DelimitedToken from 'src/parser/delimited-token'\nimport Token from 'src/parser/token'\nimport TagToken from 'src/parser/tag-token'\nimport { NormalizedFullOptions } from 'src/liquid-options'\n\nexport default function whiteSpaceCtrl (tokens: Token[], options: NormalizedFullOptions) {\n options = { greedy: true, ...options }\n let inRaw = false\n\n tokens.forEach((token: Token, i: number) => {\n if (shouldTrimLeft(token as DelimitedToken, inRaw, options)) {\n trimLeft(tokens[i - 1], options.greedy)\n }\n\n if (token.type === 'tag' && (token as TagToken).name === 'raw') inRaw = true\n if (token.type === 'tag' && (token as TagToken).name === 'endraw') inRaw = false\n\n if (shouldTrimRight(token as DelimitedToken, inRaw, options)) {\n trimRight(tokens[i + 1], options.greedy)\n }\n })\n}\n\nfunction shouldTrimLeft (token: DelimitedToken, inRaw: boolean, options: NormalizedFullOptions) {\n if (inRaw) return false\n if (token.type === 'tag') return token.trimLeft || options.trim_tag_left\n if (token.type === 'output') return token.trimLeft || options.trim_output_left\n}\n\nfunction shouldTrimRight (token: DelimitedToken, inRaw: boolean, options: NormalizedFullOptions) {\n if (inRaw) return false\n if (token.type === 'tag') return token.trimRight || options.trim_tag_right\n if (token.type === 'output') return token.trimRight || options.trim_output_right\n}\n\nfunction trimLeft (token: Token, greedy: boolean) {\n if (!token || token.type !== 'html') return\n\n const rLeft = greedy ? /\\s+$/g : /[\\t\\r ]*$/g\n token.value = token.value.replace(rLeft, '')\n}\n\nfunction trimRight (token: Token, greedy: boolean) {\n if (!token || token.type !== 'html') return\n\n const rRight = greedy ? /^\\s+/g : /^[\\t\\r ]*\\n?/g\n token.value = token.value.replace(rRight, '')\n}\n","export default class Token {\n type: string = 'notset'\n line: number\n col: number\n raw: string\n input: string\n file?: string\n value: string\n constructor (raw: string, input: string, line: number, col: number, file?: string) {\n this.col = col\n this.line = line\n this.raw = raw\n this.value = raw\n this.input = input\n this.file = file\n }\n}\n","import Token from './token'\n\nexport default class HTMLToken extends Token {\n constructor (str: string, input: string, line: number, col: number, file?: string) {\n super(str, input, line, col, file)\n this.type = 'html'\n this.value = str\n }\n}\n","import Token from './token'\nimport { last } from 'src/util/underscore'\n\nexport default class DelimitedToken extends Token {\n trimLeft: boolean\n trimRight: boolean\n constructor (raw: string, value: string, input: string, line: number, pos: number, file?: string) {\n super(raw, input, line, pos, file)\n this.trimLeft = value[0] === '-'\n this.trimRight = last(value) === '-'\n this.value = value\n .slice(\n this.trimLeft ? 1 : 0,\n this.trimRight ? -1 : value.length\n )\n .trim()\n }\n}\n","import DelimitedToken from './delimited-token'\nimport { TokenizationError } from 'src/util/error'\nimport * as lexical from './lexical'\n\nexport default class TagToken extends DelimitedToken {\n name: string\n args: string\n constructor (raw: string, value: string, input: string, line: number, pos: number, file?: string) {\n super(raw, value, input, line, pos, file)\n this.type = 'tag'\n const match = this.value.match(lexical.tagLine)\n if (!match) {\n throw new TokenizationError(`illegal tag syntax`, this)\n }\n this.name = match[1]\n this.args = match[2]\n }\n}\n","import DelimitedToken from './delimited-token'\n\nexport default class OutputToken extends DelimitedToken {\n constructor (raw: string, value: string, input: string, line: number, pos: number, file?: string) {\n super(raw, value, input, line, pos, file)\n this.type = 'output'\n }\n}\n","import whiteSpaceCtrl from './whitespace-ctrl'\nimport HTMLToken from './html-token'\nimport TagToken from './tag-token'\nimport Token from './token'\nimport OutputToken from './output-token'\nimport { TokenizationError } from 'src/util/error'\nimport { NormalizedFullOptions, applyDefault } from '../liquid-options'\n\nenum ParseState { HTML, OUTPUT, TAG }\n\nexport default class Tokenizer {\n options: NormalizedFullOptions\n constructor (options?: NormalizedFullOptions) {\n this.options = applyDefault(options)\n }\n tokenize (input: string, file?: string) {\n const tokens: Token[] = []\n const tagL = this.options.tag_delimiter_left\n const tagR = this.options.tag_delimiter_right\n const outputL = this.options.output_delimiter_left\n const outputR = this.options.output_delimiter_right\n let p = 0\n let curLine = 1\n let state = ParseState.HTML\n let buffer = ''\n let lineBegin = 0\n let line = 1\n let col = 1\n\n while (p < input.length) {\n if (input[p] === '\\n') {\n curLine++\n lineBegin = p + 1\n }\n if (state === ParseState.HTML) {\n if (input.substr(p, outputL.length) === outputL) {\n if (buffer) tokens.push(new HTMLToken(buffer, input, line, col, file))\n buffer = outputL\n line = curLine\n col = p - lineBegin + 1\n p += outputL.length\n state = ParseState.OUTPUT\n continue\n } else if (input.substr(p, tagL.length) === tagL) {\n if (buffer) tokens.push(new HTMLToken(buffer, input, line, col, file))\n buffer = tagL\n line = curLine\n col = p - lineBegin + 1\n p += tagL.length\n state = ParseState.TAG\n continue\n }\n } else if (state === ParseState.OUTPUT && input.substr(p, outputR.length) === outputR) {\n buffer += outputR\n tokens.push(new OutputToken(buffer, buffer.slice(outputL.length, -outputR.length), input, line, col, file))\n p += outputR.length\n buffer = ''\n line = curLine\n col = p - lineBegin + 1\n state = ParseState.HTML\n continue\n } else if (input.substr(p, tagR.length) === tagR) {\n buffer += tagR\n tokens.push(new TagToken(buffer, buffer.slice(tagL.length, -tagR.length), input, line, col, file))\n p += tagR.length\n buffer = ''\n line = curLine\n col = p - lineBegin + 1\n state = ParseState.HTML\n continue\n }\n buffer += input[p++]\n }\n if (state !== ParseState.HTML) {\n const t = state === ParseState.OUTPUT ? 'output' : 'tag'\n const str = buffer.length > 16 ? buffer.slice(0, 13) + '...' : buffer\n throw new TokenizationError(\n `${t} \"${str}\" not closed`,\n new Token(buffer, input, line, col, file)\n )\n }\n if (buffer) tokens.push(new HTMLToken(buffer, input, line, col, file))\n\n whiteSpaceCtrl(tokens, this.options)\n return tokens\n }\n}\n","import { RenderError } from 'src/util/error'\nimport assert from 'src/util/assert'\nimport Scope from 'src/scope/scope'\nimport ITemplate from 'src/template/itemplate'\n\nexport default class Render {\n async renderTemplates (templates: ITemplate[], scope: Scope) {\n assert(scope, 'unable to evalTemplates: scope undefined')\n\n let html = ''\n for (const tpl of templates) {\n try {\n html += await tpl.render(scope)\n } catch (e) {\n if (e.name === 'RenderBreakError') {\n e.resolvedHTML = html\n throw e\n }\n throw e.name === 'RenderError' ? e : new RenderError(e, tpl)\n }\n }\n return html\n }\n}\n","import * as lexical from '../parser/lexical'\nimport assert from '../util/assert'\nimport Scope from 'src/scope/scope'\nimport { range } from 'src/util/underscore'\n\nconst operators = {\n '==': (l: any, r: any) => l === r,\n '!=': (l: any, r: any) => l !== r,\n '>': (l: any, r: any) => l !== null && r !== null && l > r,\n '<': (l: any, r: any) => l !== null && r !== null && l < r,\n '>=': (l: any, r: any) => l !== null && r !== null && l >= r,\n '<=': (l: any, r: any) => l !== null && r !== null && l <= r,\n 'contains': (l: any, r: any) => {\n if (!l) return false\n if (typeof l.indexOf !== 'function') return false\n return l.indexOf(r) > -1\n },\n 'and': (l: any, r: any) => isTruthy(l) && isTruthy(r),\n 'or': (l: any, r: any) => isTruthy(l) || isTruthy(r)\n}\n\nexport function evalExp (exp: string, scope: Scope): any {\n assert(scope, 'unable to evalExp: scope undefined')\n const operatorREs = lexical.operators\n let match\n for (let i = 0; i < operatorREs.length; i++) {\n const operatorRE = operatorREs[i]\n const expRE = new RegExp(`^(${lexical.quoteBalanced.source})(${operatorRE.source})(${lexical.quoteBalanced.source})$`)\n if ((match = exp.match(expRE))) {\n const l = evalExp(match[1], scope)\n const op = operators[match[2].trim()]\n const r = evalExp(match[3], scope)\n return op(l, r)\n }\n }\n\n if ((match = exp.match(lexical.rangeLine))) {\n const low = evalValue(match[1], scope)\n const high = evalValue(match[2], scope)\n return range(low, high + 1)\n }\n\n return evalValue(exp, scope)\n}\n\nexport function evalValue (str: string, scope: Scope) {\n str = str && str.trim()\n if (!str) return undefined\n\n if (lexical.isLiteral(str)) {\n return lexical.parseLiteral(str)\n }\n if (lexical.isVariable(str)) {\n return scope.get(str)\n }\n throw new TypeError(`cannot eval '${str}' as value`)\n}\n\nexport function isTruthy (val: any): boolean {\n return !isFalsy(val)\n}\n\nexport function isFalsy (val: any): boolean {\n return val === false || undefined === val || val === null\n}\n","import { hashCapture } from 'src/parser/lexical'\nimport { evalValue } from 'src/render/syntax'\nimport Scope from 'src/scope/scope'\n\n/**\n * Key-Value Pairs Representing Tag Arguments\n * Example:\n * For the markup `{% include 'head.html' foo='bar' %}`,\n * hash['foo'] === 'bar'\n */\nexport default class Hash {\n [key: string]: any\n constructor (markup: string, scope: Scope) {\n let match\n hashCapture.lastIndex = 0\n while ((match = hashCapture.exec(markup))) {\n const k = match[1]\n const v = match[2]\n this[k] = evalValue(v, scope)\n }\n }\n}\n","export default abstract class Template {\n token: T;\n constructor (token: T) {\n this.token = token\n }\n}\n","import { create, stringify } from 'src/util/underscore'\nimport assert from 'src/util/assert'\nimport Scope from 'src/scope/scope'\nimport ITagImpl from './itag-impl'\nimport ITagImplOptions from './itag-impl-options'\nimport Liquid from 'src/liquid'\nimport Hash from './hash'\nimport Template from 'src/template/template'\nimport ITemplate from 'src/template/itemplate'\nimport TagToken from 'src/parser/tag-token'\nimport Token from 'src/parser/token'\n\nexport default class Tag extends Template implements ITemplate {\n name: string\n private impl: ITagImpl\n static impls: { [key: string]: ITagImplOptions } = {}\n\n constructor (token: TagToken, tokens: Token[], liquid: Liquid) {\n super(token)\n this.name = token.name\n\n const impl = Tag.impls[token.name]\n assert(impl, `tag ${token.name} not found`)\n this.impl = create(impl)\n this.impl.liquid = liquid\n if (this.impl.parse) {\n this.impl.parse(token, tokens)\n }\n }\n async render (scope: Scope) {\n const hash = new Hash(this.token.args, scope)\n const impl = this.impl\n if (typeof impl.render !== 'function') {\n return ''\n }\n const html = await impl.render(scope, hash)\n return stringify(html)\n }\n static register (name: string, tag: ITagImplOptions) {\n Tag.impls[name] = tag\n }\n static clear () {\n Tag.impls = {}\n }\n}\n","import assert from 'src/util/assert'\nimport * as lexical from 'src/parser/lexical'\nimport { evalValue } from 'src/render/syntax'\nimport Scope from 'src/scope/scope'\nimport { FilterImpl } from './filter-impl'\n\nconst valueRE = new RegExp(`${lexical.value.source}`, 'g')\n\nexport default class Filter {\n name: string\n impl: FilterImpl\n args: string[]\n private static impls: {[key: string]: FilterImpl} = {}\n\n constructor (str: string, strictFilters: boolean = false) {\n const match = lexical.filterLine.exec(str) as string[]\n assert(match, 'illegal filter: ' + str)\n\n const name = match[1]\n const argList = match[2] || ''\n const impl = Filter.impls[name]\n if (!impl && strictFilters) throw new TypeError(`undefined filter: ${name}`)\n\n this.name = name\n this.impl = impl || (x => x)\n this.args = this.parseArgs(argList)\n }\n parseArgs (argList: string): string[] {\n let match; const args: string[] = []\n while ((match = valueRE.exec(argList.trim()))) {\n const v = match[0]\n const re = new RegExp(`${v}\\\\s*:`, 'g')\n const keyMatch = re.exec(match.input)\n const currentMatchIsKey = keyMatch && keyMatch.index === match.index\n currentMatchIsKey ? args.push(`'${v}'`) : args.push(v)\n }\n return args\n }\n render (value: any, scope: Scope): any {\n const args = this.args.map(arg => evalValue(arg, scope))\n return this.impl.apply(null, [value, ...args])\n }\n static register (name: string, filter: FilterImpl) {\n Filter.impls[name] = filter\n }\n static clear () {\n Filter.impls = {}\n }\n}\n","import Token from 'src/parser/token'\nimport ITemplate from 'src/template/itemplate'\nimport TagToken from './tag-token'\n\ntype ParseToken = ((token: Token, remainTokens: Array) => ITemplate)\n\nexport default class ParseStream {\n private tokens: Array\n private handlers: {[key: string]: (arg: any) => void} = {}\n private stopRequested: boolean = false\n private parseToken: ParseToken\n\n constructor (tokens: Array, parseToken: ParseToken) {\n this.tokens = tokens\n this.parseToken = parseToken\n }\n on (name: string, cb: (arg: T) => void): ParseStream {\n this.handlers[name] = cb\n return this\n }\n trigger (event: string, arg?: T) {\n const h = this.handlers[event]\n if (typeof h === 'function') {\n h(arg)\n return true\n }\n return false\n }\n start () {\n this.trigger('start')\n let token: Token | undefined\n while (!this.stopRequested && (token = this.tokens.shift())) {\n if (this.trigger('token', token)) continue\n if (token.type === 'tag' && this.trigger(`tag:${(token).name}`, token)) {\n continue\n }\n const template = this.parseToken(token, this.tokens)\n this.trigger('template', template)\n }\n if (!this.stopRequested) this.trigger('end')\n return this\n }\n stop () {\n this.stopRequested = true\n return this\n }\n}\n","import { evalExp } from 'src/render/syntax'\nimport * as lexical from 'src/parser/lexical'\nimport assert from 'src/util/assert'\nimport Filter from './filter/filter'\nimport Scope from 'src/scope/scope'\n\nexport default class {\n initial: any\n filters: Array = []\n constructor (str: string, strictFilters?: boolean) {\n let match: RegExpExecArray | null = lexical.matchValue(str) as RegExpExecArray\n assert(match, `illegal value string: ${str}`)\n\n this.initial = match[0]\n str = str.substr(match.index + match[0].length)\n\n while ((match = lexical.filter.exec(str))) {\n this.filters.push(new Filter(match[0].trim(), strictFilters))\n }\n }\n value (scope: Scope) {\n return this.filters.reduce(\n (prev, filter) => filter.render(prev, scope),\n evalExp(this.initial, scope))\n }\n}\n","import Value from './value'\nimport { stringify } from 'src/util/underscore'\nimport Template from 'src/template/template'\nimport ITemplate from 'src/template/itemplate'\nimport Scope from 'src/scope/scope'\nimport OutputToken from 'src/parser/output-token'\n\nexport default class Output extends Template implements ITemplate {\n value: Value\n constructor (token: OutputToken, strictFilters?: boolean) {\n super(token)\n this.value = new Value(token.value, strictFilters)\n }\n async render (scope: Scope): Promise {\n const html = await this.value.value(scope)\n return stringify(html)\n }\n}\n","import Template from 'src/template/template'\nimport ITemplate from 'src/template/itemplate'\nimport HTMLToken from 'src/parser/html-token'\n\nexport default class extends Template implements ITemplate {\n str: string\n constructor (token: HTMLToken) {\n super(token)\n this.str = token.value\n }\n async render (): Promise {\n return this.str\n }\n}\n","import { ParseError } from '../util/error'\nimport Liquid from 'src/liquid'\nimport ParseStream from './parse-stream'\nimport Token from './token'\nimport TagToken from './tag-token'\nimport OutputToken from './output-token'\nimport Tag from 'src/template/tag/tag'\nimport Output from 'src/template/output'\nimport HTML from 'src/template/html'\nimport ITemplate from 'src/template/itemplate'\n\nexport default class Parser {\n liquid: Liquid\n\n constructor (liquid: Liquid) {\n this.liquid = liquid\n }\n parse (tokens: Array) {\n let token\n const templates: ITemplate[] = []\n while ((token = tokens.shift())) {\n templates.push(this.parseToken(token, tokens))\n }\n return templates\n }\n parseToken (token: Token, remainTokens: Array) {\n try {\n if (token.type === 'tag') {\n return new Tag(token as TagToken, remainTokens, this.liquid)\n }\n if (token.type === 'output') {\n return new Output(token as OutputToken, this.liquid.options.strict_filters)\n }\n return new HTML(token)\n } catch (e) {\n throw new ParseError(e, token)\n }\n }\n parseStream (tokens: Array) {\n return new ParseStream(tokens, (token, tokens) => this.parseToken(token, tokens))\n }\n}\n","import assert from 'src/util/assert'\nimport { identifier } from 'src/parser/lexical'\nimport { AssignScope } from 'src/scope/scopes'\nimport TagToken from 'src/parser/tag-token'\nimport Scope from 'src/scope/scope'\nimport ITagImplOptions from 'src/template/tag/itag-impl-options'\n\nconst re = new RegExp(`(${identifier.source})\\\\s*=([^]*)`)\n\nexport default {\n parse: function (token: TagToken) {\n const match = token.args.match(re) as RegExpMatchArray\n assert(match, `illegal token ${token.raw}`)\n this.key = match[1]\n this.value = match[2]\n },\n render: function (scope: Scope) {\n const ctx = new AssignScope()\n ctx[this.key] = this.liquid.evalValue(this.value, scope)\n scope.push(ctx)\n return Promise.resolve('')\n }\n} as ITagImplOptions\n","/*\n * Call functions in serial until someone rejected.\n * @param {Array} iterable the array to iterate with.\n * @param {Array} iteratee returns a new promise.\n * The iteratee is invoked with three arguments: (value, index, iterable).\n */\nexport function mapSeries (\n iterable: T1[],\n iteratee: (item: T1, idx: number, iterable: T1[]) => Promise | T2\n): Promise {\n let ret = Promise.resolve(0)\n const result: T2[] = []\n iterable.forEach(function (item, idx) {\n ret = ret\n .then(() => iteratee(item, idx, iterable))\n .then(x => result.push(x))\n })\n return ret.then(() => result)\n}\n","import { mapSeries } from 'src/util/promise'\nimport { isString, isObject, isArray } from 'src/util/underscore'\nimport { evalExp } from 'src/render/syntax'\nimport assert from 'src/util/assert'\nimport { identifier, value, hash } from 'src/parser/lexical'\nimport TagToken from 'src/parser/tag-token'\nimport Token from 'src/parser/token'\nimport Scope from 'src/scope/scope'\nimport Hash from 'src/template/tag/hash'\nimport ITemplate from 'src/template/itemplate'\nimport ITagImplOptions from 'src/template/tag/itag-impl-options'\nimport ParseStream from 'src/parser/parse-stream'\n\nconst re = new RegExp(`^(${identifier.source})\\\\s+in\\\\s+` +\n `(${value.source})` +\n `(?:\\\\s+${hash.source})*` +\n `(?:\\\\s+(reversed))?` +\n `(?:\\\\s+${hash.source})*$`)\n\nexport default {\n type: 'block',\n parse: function (tagToken: TagToken, remainTokens: Token[]) {\n const match = re.exec(tagToken.args) as RegExpExecArray\n assert(match, `illegal tag: ${tagToken.raw}`)\n this.variable = match[1]\n this.collection = match[2]\n this.reversed = !!match[3]\n\n this.templates = []\n this.elseTemplates = []\n\n let p\n const stream: ParseStream = this.liquid.parser.parseStream(remainTokens)\n .on('start', () => (p = this.templates))\n .on('tag:else', () => (p = this.elseTemplates))\n .on('tag:endfor', () => stream.stop())\n .on('template', (tpl: ITemplate) => p.push(tpl))\n .on('end', () => {\n throw new Error(`tag ${tagToken.raw} not closed`)\n })\n\n stream.start()\n },\n render: async function (scope: Scope, hash: Hash) {\n let collection = evalExp(this.collection, scope)\n\n if (!isArray(collection)) {\n if (isString(collection) && collection.length > 0) {\n collection = [collection] as string[]\n } else if (isObject(collection)) {\n collection = Object.keys(collection).map((key) => [key, collection[key]]) as Array<[string, any]>\n }\n }\n if (!isArray(collection) || !collection.length) {\n return this.liquid.renderer.renderTemplates(this.elseTemplates, scope)\n }\n\n const offset = hash.offset || 0\n const limit = (hash.limit === undefined) ? collection.length : hash.limit\n\n collection = collection.slice(offset, offset + limit)\n if (this.reversed) collection.reverse()\n\n const contexts = collection.map((item: string, i: number) => {\n const ctx = {}\n ctx[this.variable] = item\n ctx['forloop'] = {\n first: i === 0,\n index: i + 1,\n index0: i,\n last: i === collection.length - 1,\n length: collection.length,\n rindex: collection.length - i,\n rindex0: collection.length - i - 1\n }\n return ctx\n })\n\n let html = ''\n let finished = false\n await mapSeries(contexts, async context => {\n if (finished) return\n\n scope.push(context)\n try {\n html += await this.liquid.renderer.renderTemplates(this.templates, scope)\n } catch (e) {\n if (e.name === 'RenderBreakError') {\n html += e.resolvedHTML\n if (e.message === 'break') {\n finished = true\n }\n } else throw e\n }\n scope.pop(context)\n })\n return html\n }\n}\n","import assert from 'src/util/assert'\nimport { identifier } from 'src/parser/lexical'\nimport { CaptureScope } from 'src/scope/scopes'\nimport TagToken from 'src/parser/tag-token'\nimport Token from 'src/parser/token'\nimport Scope from 'src/scope/scope'\nimport ITagImplOptions from 'src/template/tag/itag-impl-options'\n\nconst re = new RegExp(`(${identifier.source})`)\n\nexport default {\n parse: function (tagToken: TagToken, remainTokens: Token[]) {\n const match = tagToken.args.match(re) as RegExpMatchArray\n assert(match, `${tagToken.args} not valid identifier`)\n\n this.variable = match[1]\n this.templates = []\n\n const stream = this.liquid.parser.parseStream(remainTokens)\n stream.on('tag:endcapture', () => stream.stop())\n .on('template', (tpl) => this.templates.push(tpl))\n .on('end', () => {\n throw new Error(`tag ${tagToken.raw} not closed`)\n })\n stream.start()\n },\n render: async function (scope: Scope) {\n const html = await this.liquid.renderer.renderTemplates(this.templates, scope)\n const ctx = new CaptureScope()\n ctx[this.variable] = html\n scope.push(ctx)\n }\n} as ITagImplOptions\n","import { evalExp } from 'src/render/syntax'\nimport TagToken from 'src/parser/tag-token'\nimport Token from 'src/parser/token'\nimport Scope from 'src/scope/scope'\nimport ITemplate from 'src/template/itemplate'\nimport ITagImplOptions from 'src/template/tag/itag-impl-options'\nimport ParseStream from 'src/parser/parse-stream'\n\nexport default {\n parse: function (tagToken: TagToken, remainTokens: Token[]) {\n this.cond = tagToken.args\n this.cases = []\n this.elseTemplates = []\n\n let p: ITemplate[] = []\n const stream: ParseStream = this.liquid.parser.parseStream(remainTokens)\n .on('tag:when', (token: TagToken) => {\n this.cases.push({\n val: token.args,\n templates: p = []\n })\n })\n .on('tag:else', () => (p = this.elseTemplates))\n .on('tag:endcase', () => stream.stop())\n .on('template', (tpl: ITemplate) => p.push(tpl))\n .on('end', () => {\n throw new Error(`tag ${tagToken.raw} not closed`)\n })\n\n stream.start()\n },\n\n render: function (scope: Scope) {\n for (let i = 0; i < this.cases.length; i++) {\n const branch = this.cases[i]\n const val = evalExp(branch.val, scope)\n const cond = evalExp(this.cond, scope)\n if (val === cond) {\n return this.liquid.renderer.renderTemplates(branch.templates, scope)\n }\n }\n return this.liquid.renderer.renderTemplates(this.elseTemplates, scope)\n }\n} as ITagImplOptions\n","import TagToken from 'src/parser/tag-token'\nimport Token from 'src/parser/token'\nimport ITagImplOptions from 'src/template/tag/itag-impl-options'\n\nexport default {\n parse: function (tagToken: TagToken, remainTokens: Token[]) {\n const stream = this.liquid.parser.parseStream(remainTokens)\n stream\n .on('token', (token: TagToken) => {\n if (token.name === 'endcomment') stream.stop()\n })\n .on('end', () => {\n throw new Error(`tag ${tagToken.raw} not closed`)\n })\n stream.start()\n }\n} as ITagImplOptions\n","import assert from 'src/util/assert'\nimport { value, quotedLine } from 'src/parser/lexical'\nimport { evalValue } from 'src/render/syntax'\nimport BlockMode from 'src/scope/block-mode'\nimport TagToken from 'src/parser/tag-token'\nimport Scope from 'src/scope/scope'\nimport Hash from 'src/template/tag/hash'\nimport ITagImplOptions from 'src/template/tag/itag-impl-options'\n\nconst staticFileRE = /[^\\s,]+/\nconst withRE = new RegExp(`with\\\\s+(${value.source})`)\n\nexport default {\n parse: function (token: TagToken) {\n let match = staticFileRE.exec(token.args)\n if (match) {\n this.staticValue = match[0]\n }\n\n match = value.exec(token.args)\n if (match) {\n this.value = match[0]\n }\n\n match = withRE.exec(token.args)\n if (match) {\n this.with = match[1]\n }\n },\n render: async function (scope: Scope, hash: Hash) {\n let filepath\n if (scope.opts.dynamicPartials) {\n if (quotedLine.exec(this.value)) {\n const template = this.value.slice(1, -1)\n filepath = await this.liquid.parseAndRender(template, scope.getAll(), scope.opts)\n } else {\n filepath = evalValue(this.value, scope)\n }\n } else {\n filepath = this.staticValue\n }\n assert(filepath, `cannot include with empty filename`)\n\n const originBlocks = scope.blocks\n const originBlockMode = scope.blockMode\n\n scope.blocks = {}\n scope.blockMode = BlockMode.OUTPUT\n if (this.with) {\n hash[filepath] = evalValue(this.with, scope)\n }\n const templates = await this.liquid.getTemplate(filepath, scope.opts)\n scope.push(hash)\n const html = await this.liquid.renderer.renderTemplates(templates, scope)\n scope.pop(hash)\n scope.blocks = originBlocks\n scope.blockMode = originBlockMode\n return html\n }\n}\n","import assert from 'src/util/assert'\nimport { identifier } from 'src/parser/lexical'\nimport { CaptureScope, AssignScope, DecrementScope } from 'src/scope/scopes'\nimport TagToken from 'src/parser/tag-token'\nimport Scope from 'src/scope/scope'\nimport ITagImplOptions from 'src/template/tag/itag-impl-options'\n\nexport default {\n parse: function (token: TagToken) {\n const match = token.args.match(identifier) as RegExpMatchArray\n assert(match, `illegal identifier ${token.args}`)\n this.variable = match[0]\n },\n render: function (scope: Scope) {\n let context = scope.findContextFor(\n this.variable,\n ctx => {\n return !(ctx instanceof CaptureScope) && !(ctx instanceof AssignScope)\n }\n )\n if (!context) {\n context = new DecrementScope()\n scope.unshift(context)\n }\n if (typeof context[this.variable] !== 'number') {\n context[this.variable] = 0\n }\n return --context[this.variable]\n }\n} as ITagImplOptions\n","import assert from 'src/util/assert'\nimport { value as rValue } from 'src/parser/lexical'\nimport { evalValue } from 'src/render/syntax'\nimport TagToken from 'src/parser/tag-token'\nimport Scope from 'src/scope/scope'\nimport ITagImplOptions from 'src/template/tag/itag-impl-options'\n\nconst groupRE = new RegExp(`^(?:(${rValue.source})\\\\s*:\\\\s*)?(.*)$`)\nconst candidatesRE = new RegExp(rValue.source, 'g')\n\nexport default {\n parse: function (tagToken: TagToken) {\n let match: RegExpExecArray | null = groupRE.exec(tagToken.args) as RegExpExecArray\n assert(match, `illegal tag: ${tagToken.raw}`)\n\n this.group = match[1] || ''\n const candidates = match[2]\n\n this.candidates = []\n\n while ((match = candidatesRE.exec(candidates))) {\n this.candidates.push(match[0])\n }\n assert(this.candidates.length, `empty candidates: ${tagToken.raw}`)\n },\n\n render: function (scope: Scope) {\n const group = evalValue(this.group, scope)\n const fingerprint = `cycle:${group}:` + this.candidates.join(',')\n const groups = scope.groups\n let idx = groups[fingerprint]\n\n if (idx === undefined) {\n idx = groups[fingerprint] = 0\n }\n\n const candidate = this.candidates[idx]\n idx = (idx + 1) % this.candidates.length\n groups[fingerprint] = idx\n\n return evalValue(candidate, scope)\n }\n}\n","import { evalExp, isTruthy } from 'src/render/syntax'\nimport TagToken from 'src/parser/tag-token'\nimport Token from 'src/parser/token'\nimport Scope from 'src/scope/scope'\nimport ITemplate from 'src/template/itemplate'\nimport ITagImplOptions from 'src/template/tag/itag-impl-options'\nimport ParseStream from 'src/parser/parse-stream'\n\nexport default {\n parse: function (tagToken: TagToken, remainTokens: Token[]) {\n this.branches = []\n this.elseTemplates = []\n\n let p\n const stream: ParseStream = this.liquid.parser.parseStream(remainTokens)\n .on('start', () => this.branches.push({\n cond: tagToken.args,\n templates: (p = [])\n }))\n .on('tag:elsif', (token: TagToken) => {\n this.branches.push({\n cond: token.args,\n templates: p = []\n })\n })\n .on('tag:else', () => (p = this.elseTemplates))\n .on('tag:endif', () => stream.stop())\n .on('template', (tpl: ITemplate) => p.push(tpl))\n .on('end', () => {\n throw new Error(`tag ${tagToken.raw} not closed`)\n })\n\n stream.start()\n },\n\n render: function (scope: Scope) {\n for (const branch of this.branches) {\n const cond = evalExp(branch.cond, scope)\n if (isTruthy(cond)) {\n return this.liquid.renderer.renderTemplates(branch.templates, scope)\n }\n }\n return this.liquid.renderer.renderTemplates(this.elseTemplates, scope)\n }\n} as ITagImplOptions\n","import assert from 'src/util/assert'\nimport { identifier } from 'src/parser/lexical'\nimport { CaptureScope, AssignScope, IncrementScope } from 'src/scope/scopes'\nimport ITagImplOptions from 'src/template/tag/itag-impl-options'\n\nexport default {\n parse: function (token) {\n const match = token.args.match(identifier)\n assert(match, `illegal identifier ${token.args}`)\n this.variable = match![0]\n },\n render: function (scope) {\n let context = scope.findContextFor(\n this.variable,\n ctx => {\n return !(ctx instanceof CaptureScope) && !(ctx instanceof AssignScope)\n }\n )\n if (!context) {\n context = new IncrementScope()\n scope.unshift(context)\n }\n if (typeof context[this.variable] !== 'number') {\n context[this.variable] = 0\n }\n const val = context[this.variable]\n context[this.variable]++\n return val\n }\n} as ITagImplOptions\n","import assert from 'src/util/assert'\nimport { value as rValue } from 'src/parser/lexical'\nimport { evalValue } from 'src/render/syntax'\nimport BlockMode from 'src/scope/block-mode'\nimport TagToken from 'src/parser/tag-token'\nimport Token from 'src/parser/token'\nimport Scope from 'src/scope/scope'\nimport Hash from 'src/template/tag/hash'\nimport ITagImplOptions from 'src/template/tag/itag-impl-options'\n\nconst staticFileRE = /\\S+/\n\nexport default {\n parse: function (token: TagToken, remainTokens: Token[]) {\n let match = staticFileRE.exec(token.args)\n if (match) {\n this.staticLayout = match[0]\n }\n\n match = rValue.exec(token.args)\n if (match) {\n this.layout = match[0]\n }\n\n this.tpls = this.liquid.parser.parse(remainTokens)\n },\n render: async function (scope: Scope, hash: Hash) {\n const layout = scope.opts.dynamicPartials\n ? evalValue(this.layout, scope)\n : this.staticLayout\n assert(layout, `cannot apply layout with empty filename`)\n\n // render the remaining tokens immediately\n scope.blockMode = BlockMode.STORE\n const html = await this.liquid.renderer.renderTemplates(this.tpls, scope)\n if (scope.blocks[''] === undefined) {\n scope.blocks[''] = html\n }\n const templates = await this.liquid.getTemplate(layout, scope.opts)\n scope.push(hash)\n scope.blockMode = BlockMode.OUTPUT\n const partial = await this.liquid.renderer.renderTemplates(templates, scope)\n scope.pop(hash)\n return partial\n }\n} as ITagImplOptions\n","import BlockMode from 'src/scope/block-mode'\nimport TagToken from 'src/parser/tag-token'\nimport Token from 'src/parser/token'\nimport ITemplate from 'src/template/itemplate'\nimport Scope from 'src/scope/scope'\nimport ITagImplOptions from 'src/template/tag/itag-impl-options'\nimport ParseStream from 'src/parser/parse-stream'\n\nexport default {\n parse: function (token: TagToken, remainTokens: Token[]) {\n const match = /\\w+/.exec(token.args)\n this.block = match ? match[0] : ''\n this.tpls = [] as ITemplate[]\n const stream: ParseStream = this.liquid.parser.parseStream(remainTokens)\n .on('tag:endblock', () => stream.stop())\n .on('template', (tpl: ITemplate) => this.tpls.push(tpl))\n .on('end', () => {\n throw new Error(`tag ${token.raw} not closed`)\n })\n stream.start()\n },\n render: async function (scope: Scope) {\n const childDefined = scope.blocks[this.block]\n const html = childDefined !== undefined\n ? childDefined\n : await this.liquid.renderer.renderTemplates(this.tpls, scope)\n\n if (scope.blockMode === BlockMode.STORE) {\n scope.blocks[this.block] = html\n return ''\n }\n return html\n }\n} as ITagImplOptions\n","import TagToken from 'src/parser/tag-token'\nimport Token from 'src/parser/token'\nimport ITagImplOptions from 'src/template/tag/itag-impl-options'\n\nexport default {\n parse: function (tagToken: TagToken, remainTokens: Token[]) {\n this.tokens = []\n\n const stream = this.liquid.parser.parseStream(remainTokens)\n stream\n .on('token', (token: TagToken) => {\n if (token.name === 'endraw') stream.stop()\n else this.tokens.push(token)\n })\n .on('end', () => {\n throw new Error(`tag ${tagToken.raw} not closed`)\n })\n stream.start()\n },\n render: function () {\n return this.tokens.map((token: Token) => token.raw).join('')\n }\n}\n","import { mapSeries } from 'src/util/promise'\nimport assert from 'src/util/assert'\nimport { evalExp } from 'src/render/syntax'\nimport { identifier, value, hash } from 'src/parser/lexical'\nimport TagToken from 'src/parser/tag-token'\nimport Token from 'src/parser/token'\nimport ITemplate from 'src/template/itemplate'\nimport Scope from 'src/scope/scope'\nimport Hash from 'src/template/tag/hash'\nimport ITagImplOptions from 'src/template/tag/itag-impl-options'\nimport ParseStream from 'src/parser/parse-stream'\n\nconst re = new RegExp(`^(${identifier.source})\\\\s+in\\\\s+` +\n `(${value.source})` +\n `(?:\\\\s+${hash.source})*$`)\n\nexport default {\n parse: function (tagToken: TagToken, remainTokens: Token[]) {\n const match = re.exec(tagToken.args) as RegExpExecArray\n assert(match, `illegal tag: ${tagToken.raw}`)\n\n this.variable = match[1]\n this.collection = match[2]\n this.templates = []\n\n let p\n const stream: ParseStream = this.liquid.parser.parseStream(remainTokens)\n .on('start', () => (p = this.templates))\n .on('tag:endtablerow', () => stream.stop())\n .on('template', (tpl: ITemplate) => p.push(tpl))\n .on('end', () => {\n throw new Error(`tag ${tagToken.raw} not closed`)\n })\n\n stream.start()\n },\n\n render: async function (scope: Scope, hash: Hash) {\n let collection = evalExp(this.collection, scope) || []\n const offset = hash.offset || 0\n const limit = (hash.limit === undefined) ? collection.length : hash.limit\n\n collection = collection.slice(offset, offset + limit)\n const cols = hash.cols || collection.length\n const contexts = collection.map((item: any) => {\n const ctx = {}\n ctx[this.variable] = item\n return ctx\n })\n\n let row: number = 0\n let html = ''\n await mapSeries(contexts, async (context, idx) => {\n row = Math.floor(idx / cols) + 1\n const col = (idx % cols) + 1\n if (col === 1) {\n if (row !== 1) {\n html += ''\n }\n html += ``\n }\n\n html += ``\n scope.push(context)\n html += await this.liquid.renderer.renderTemplates(this.templates, scope)\n html += ''\n scope.pop(context)\n return html\n })\n if (row > 0) {\n html += ''\n }\n return html\n }\n} as ITagImplOptions\n","import { evalExp, isFalsy } from 'src/render/syntax'\nimport TagToken from 'src/parser/tag-token'\nimport Token from 'src/parser/token'\nimport Scope from 'src/scope/scope'\nimport ITagImplOptions from 'src/template/tag/itag-impl-options'\nimport ParseStream from 'src/parser/parse-stream'\n\nexport default {\n parse: function (tagToken: TagToken, remainTokens: Token[]) {\n this.templates = []\n this.elseTemplates = []\n let p\n const stream: ParseStream = this.liquid.parser.parseStream(remainTokens)\n .on('start', () => {\n p = this.templates\n this.cond = tagToken.args\n })\n .on('tag:else', () => (p = this.elseTemplates))\n .on('tag:endunless', () => stream.stop())\n .on('template', tpl => p.push(tpl))\n .on('end', () => {\n throw new Error(`tag ${tagToken.raw} not closed`)\n })\n\n stream.start()\n },\n\n render: function (scope: Scope) {\n const cond = evalExp(this.cond, scope)\n return isFalsy(cond)\n ? this.liquid.renderer.renderTemplates(this.templates, scope)\n : this.liquid.renderer.renderTemplates(this.elseTemplates, scope)\n }\n} as ITagImplOptions\n","import { RenderBreakError } from 'src/util/error'\n\nexport default {\n render: async function () {\n throw new RenderBreakError('break')\n }\n}\n","import { RenderBreakError } from 'src/util/error'\n\nexport default {\n render: async function () {\n throw new RenderBreakError('continue')\n }\n}\n","import assign from './assign'\nimport For from './for'\nimport capture from './capture'\nimport Case from './case'\nimport comment from './comment'\nimport include from './include'\nimport decrement from './decrement'\nimport cycle from './cycle'\nimport If from './if'\nimport increment from './increment'\nimport layout from './layout'\nimport block from './block'\nimport raw from './raw'\nimport tablerow from './tablerow'\nimport unless from './unless'\nimport Break from './break'\nimport Continue from './continue'\nimport ITagImplOptions from 'src/template/tag/itag-impl-options'\n\nconst tags: { [key: string]: ITagImplOptions } = {\n assign, 'for': For, capture, 'case': Case, comment, include, decrement, increment, cycle, 'if': If, layout, block, raw, tablerow, unless, 'break': Break, 'continue': Continue\n}\n\nexport default tags\n","const escapeMap = {\n '&': '&',\n '<': '<',\n '>': '>',\n '\"': '"',\n \"'\": '''\n}\nconst unescapeMap = {\n '&': '&',\n '<': '<',\n '>': '>',\n '"': '\"',\n ''': \"'\"\n}\n\nfunction escape (str: string) {\n return String(str).replace(/&|<|>|\"|'/g, m => escapeMap[m])\n}\n\nfunction unescape (str: string) {\n return String(str).replace(/&(amp|lt|gt|#34|#39);/g, m => unescapeMap[m])\n}\n\nexport default {\n 'escape': escape,\n 'escape_once': (str: string) => escape(unescape(str)),\n 'newline_to_br': (v: string) => v.replace(/\\n/g, '
'),\n 'strip_html': (v: string) => v.replace(/|||<.*?>/g, '')\n}\n","import { FilterImpl } from 'src/template/filter/filter-impl'\n\nexport default {\n 'append': (v: string, arg: string) => v + arg,\n 'prepend': (v: string, arg: string) => arg + v,\n 'capitalize': (str: string) => String(str).charAt(0).toUpperCase() + str.slice(1),\n 'lstrip': (v: string) => String(v).replace(/^\\s+/, ''),\n 'downcase': (v: string) => v.toLowerCase(),\n 'upcase': (str: string) => String(str).toUpperCase(),\n 'remove': (v: string, arg: string) => v.split(arg).join(''),\n 'remove_first': (v: string, l: string) => v.replace(l, ''),\n 'replace': (v: string, pattern: string, replacement: string) =>\n String(v).split(pattern).join(replacement),\n 'replace_first': (v: string, arg1: string, arg2: string) => String(v).replace(arg1, arg2),\n 'rstrip': (str: string) => String(str).replace(/\\s+$/, ''),\n 'split': (v: string, arg: string) => String(v).split(arg),\n 'strip': (v: string) => String(v).trim(),\n 'strip_newlines': (v: string) => String(v).replace(/\\n/g, ''),\n 'truncate': (v: string, l: number = 50, o: string = '...') => {\n v = String(v)\n if (v.length <= l) return v\n return v.substr(0, l - o.length) + o\n },\n 'truncatewords': (v: string, l: number = 15, o: string = '...') => {\n const arr = v.split(/\\s+/)\n let ret = arr.slice(0, l).join(' ')\n if (arr.length >= l) ret += o\n return ret\n }\n} as {[key: string]: FilterImpl}\n","export default {\n 'abs': (v: number) => Math.abs(v),\n 'ceil': (v: number) => Math.ceil(v),\n 'divided_by': (v: number, arg: number) => v / arg,\n 'floor': (v: number) => Math.floor(v),\n 'minus': bindFixed((v: number, arg: number) => v - arg),\n 'modulo': bindFixed((v: number, arg: number) => v % arg),\n 'round': (v: number, arg: number = 0) => {\n const amp = Math.pow(10, arg)\n return Math.round(v * amp) / amp\n },\n 'plus': bindFixed((v: number, arg: number) => Number(v) + Number(arg)),\n 'times': (v: number, arg: number) => v * arg\n}\n\nfunction getFixed (v: number) {\n const p = String(v).split('.')\n return (p.length > 1) ? p[1].length : 0\n}\n\nfunction bindFixed (cb: (v: number, arg: number) => number) {\n return (l: number, r: number) => {\n const f = Math.max(getFixed(l), getFixed(r))\n return cb(l, r).toFixed(f)\n }\n}\n","export default {\n 'url_decode': (x: string) => x.split('+').map(decodeURIComponent).join(' '),\n 'url_encode': (x: string) => x.split(' ').map(encodeURIComponent).join('+')\n}\n","import { last } from 'src/util/underscore'\n\nexport default {\n 'join': (v: any[], arg: string) => v.join(arg === undefined ? ' ' : arg),\n 'last': (v: T[]): T => last(v),\n 'first': (v: T[]): T => v[0],\n 'map': (arr: {[key: string]: T1}[], arg: string): T1[] => arr.map(v => v[arg]),\n 'reverse': (v: any[]) => v.reverse(),\n 'sort': (v: T[], arg: (lhs: T, rhs: T) => number) => v.sort(arg),\n 'size': (v: string | any[]) => v.length,\n 'concat': (v: T1[], arg: T2[] | T2): Array => Array.prototype.concat.call(v, arg),\n 'slice': (v: T[], begin: number, length: number): T[] => {\n if (length === undefined) length = 1\n return v.slice(begin, begin + length)\n },\n 'uniq': function (arr: T[]): T[] {\n const u = {}\n return (arr || []).filter(val => {\n if (u.hasOwnProperty(String(val))) return false\n u[String(val)] = true\n return true\n })\n }\n}\n","import { padStart } from './underscore'\n\nconst monthNames = [\n 'January', 'February', 'March', 'April', 'May', 'June', 'July', 'August',\n 'September', 'October', 'November', 'December'\n]\nconst dayNames = [\n 'Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'\n]\nconst monthNamesShort = monthNames.map(abbr)\nconst dayNamesShort = dayNames.map(abbr)\nconst suffixes = {\n 1: 'st',\n 2: 'nd',\n 3: 'rd',\n 'default': 'th'\n}\n\nfunction abbr (str: string) {\n return str.slice(0, 3)\n}\n\n// prototype extensions\nconst _date = {\n daysInMonth: function (d: Date) {\n const feb = _date.isLeapYear(d) ? 29 : 28\n return [31, feb, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]\n },\n\n getDayOfYear: function (d: Date) {\n let num = 0\n for (let i = 0; i < d.getMonth(); ++i) {\n num += _date.daysInMonth(d)[i]\n }\n return num + d.getDate()\n },\n\n getWeekOfYear: function (d: Date, startDay: number) {\n // Skip to startDay of this week\n const now = this.getDayOfYear(d) + (startDay - d.getDay())\n // Find the first startDay of the year\n const jan1 = new Date(d.getFullYear(), 0, 1)\n const then = (7 - jan1.getDay() + startDay)\n return padStart(String(Math.floor((now - then) / 7) + 1), 2, '0')\n },\n\n isLeapYear: function (d: Date) {\n const year = d.getFullYear()\n return !!((year & 3) === 0 && (year % 100 || (year % 400 === 0 && year)))\n },\n\n getSuffix: function (d: Date) {\n const str = d.getDate().toString()\n const index = parseInt(str.slice(-1))\n return suffixes[index] || suffixes['default']\n },\n\n century: function (d: Date) {\n return parseInt(d.getFullYear().toString().substring(0, 2), 10)\n }\n}\n\nconst formatCodes = {\n a: function (d: Date) {\n return dayNamesShort[d.getDay()]\n },\n A: function (d: Date) {\n return dayNames[d.getDay()]\n },\n b: function (d: Date) {\n return monthNamesShort[d.getMonth()]\n },\n B: function (d: Date) {\n return monthNames[d.getMonth()]\n },\n c: function (d: Date) {\n return d.toLocaleString()\n },\n C: function (d: Date) {\n return _date.century(d)\n },\n d: function (d: Date) {\n return padStart(d.getDate(), 2, '0')\n },\n e: function (d: Date) {\n return padStart(d.getDate(), 2)\n },\n H: function (d: Date) {\n return padStart(d.getHours(), 2, '0')\n },\n I: function (d: Date) {\n return padStart(String(d.getHours() % 12 || 12), 2, '0')\n },\n j: function (d: Date) {\n return padStart(_date.getDayOfYear(d), 3, '0')\n },\n k: function (d: Date) {\n return padStart(d.getHours(), 2)\n },\n l: function (d: Date) {\n return padStart(String(d.getHours() % 12 || 12), 2)\n },\n L: function (d: Date) {\n return padStart(d.getMilliseconds(), 3, '0')\n },\n m: function (d: Date) {\n return padStart(d.getMonth() + 1, 2, '0')\n },\n M: function (d: Date) {\n return padStart(d.getMinutes(), 2, '0')\n },\n p: function (d: Date) {\n return (d.getHours() < 12 ? 'AM' : 'PM')\n },\n P: function (d: Date) {\n return (d.getHours() < 12 ? 'am' : 'pm')\n },\n q: function (d: Date) {\n return _date.getSuffix(d)\n },\n s: function (d: Date) {\n return Math.round(d.valueOf() / 1000)\n },\n S: function (d: Date) {\n return padStart(d.getSeconds(), 2, '0')\n },\n u: function (d: Date) {\n return d.getDay() || 7\n },\n U: function (d: Date) {\n return _date.getWeekOfYear(d, 0)\n },\n w: function (d: Date) {\n return d.getDay()\n },\n W: function (d: Date) {\n return _date.getWeekOfYear(d, 1)\n },\n x: function (d: Date) {\n return d.toLocaleDateString()\n },\n X: function (d: Date) {\n return d.toLocaleTimeString()\n },\n y: function (d: Date) {\n return d.getFullYear().toString().substring(2, 4)\n },\n Y: function (d: Date) {\n return d.getFullYear()\n },\n z: function (d: Date) {\n const tz = d.getTimezoneOffset() / 60 * 100\n return (tz > 0 ? '-' : '+') + padStart(String(Math.abs(tz)), 4, '0')\n },\n '%': function () {\n return '%'\n }\n};\n(formatCodes as any).h = formatCodes.b;\n(formatCodes as any).N = formatCodes.L\n\nexport default function (d: Date, format: string) {\n let output = ''\n let remaining = format\n\n while (true) {\n const r = /%./g\n const results = r.exec(remaining)\n\n // No more format codes. Add the remaining text and return\n if (!results) {\n return output + remaining\n }\n\n // Add the preceding text\n output += remaining.slice(0, r.lastIndex - 2)\n remaining = remaining.slice(r.lastIndex)\n\n // Add the format code\n const ch = results[0].charAt(1)\n const func = formatCodes[ch]\n output += func ? func(d) : '%' + ch\n }\n}\n","import strftime from 'src/util/strftime'\nimport { isString } from 'src/util/underscore'\n\nexport default {\n 'date': (v: string | Date, arg: string) => {\n let date = v\n if (v === 'now') {\n date = new Date()\n } else if (isString(v)) {\n date = new Date(v)\n }\n return isValidDate(date) ? strftime(date, arg) : v\n }\n}\n\nfunction isValidDate (date: any): date is Date {\n return date instanceof Date && !isNaN(date.getTime())\n}\n","import { isTruthy } from 'src/render/syntax'\n\nexport default {\n 'default': (v: T1, arg: T2): T1 | T2 => isTruthy(v) ? v : arg\n}\n","import html from './html'\nimport str from './string'\nimport math from './math'\nimport url from './url'\nimport array from './array'\nimport date from './date'\nimport obj from './object'\n\nexport default { ...html, ...str, ...math, ...url, ...date, ...obj, ...array }\n","import Scope from './scope/scope'\nimport * as Types from './types'\nimport fs from 'src/fs'\nimport * as _ from './util/underscore'\nimport ITemplate from './template/itemplate'\nimport Tokenizer from './parser/tokenizer'\nimport Render from './render/render'\nimport Tag from './template/tag/tag'\nimport Filter from './template/filter/filter'\nimport Parser from './parser/parser'\nimport ITagImplOptions from './template/tag/itag-impl-options'\nimport Value from './template/value'\nimport { isTruthy, isFalsy, evalExp, evalValue } from './render/syntax'\nimport builtinTags from './builtin/tags'\nimport builtinFilters from './builtin/filters'\nimport { LiquidOptions, NormalizedFullOptions, applyDefault, normalize } from './liquid-options'\nimport { FilterImpl } from './template/filter/filter-impl'\n\nexport default class Liquid {\n public options: NormalizedFullOptions\n public renderer: Render\n public parser: Parser\n private cache: object = {}\n private tokenizer: Tokenizer\n\n constructor (opts: LiquidOptions = {}) {\n this.options = applyDefault(normalize(opts))\n this.parser = new Parser(this)\n this.renderer = new Render()\n this.tokenizer = new Tokenizer(this.options)\n\n _.forOwn(builtinTags, (conf, name) => this.registerTag(name, conf))\n _.forOwn(builtinFilters, (handler, name) => this.registerFilter(name, handler))\n }\n parse (html: string, filepath?: string) {\n const tokens = this.tokenizer.tokenize(html, filepath)\n return this.parser.parse(tokens)\n }\n render (tpl: Array, ctx?: object, opts?: LiquidOptions) {\n const options = { ...this.options, ...normalize(opts) }\n const scope = new Scope(ctx, options)\n return this.renderer.renderTemplates(tpl, scope)\n }\n async parseAndRender (html: string, ctx?: object, opts?: LiquidOptions) {\n const tpl = await this.parse(html)\n return this.render(tpl, ctx, opts)\n }\n async getTemplate (file: string, opts?: LiquidOptions) {\n const options = normalize(opts)\n const roots = options.root ? [...options.root, ...this.options.root] : this.options.root\n const paths = roots.map(root => fs.resolve(root, file, this.options.extname))\n\n for (const filepath of paths) {\n if (!(await fs.exists(filepath))) continue\n\n if (this.options.cache && this.cache[filepath]) return this.cache[filepath]\n const value = this.parse(await fs.readFile(filepath), filepath)\n if (this.options.cache) this.cache[filepath] = value\n return value\n }\n\n const err = new Error('ENOENT') as any\n err.message = `ENOENT: Failed to lookup \"${file}\" in \"${roots}\"`\n err.code = 'ENOENT'\n throw err\n }\n async renderFile (file: string, ctx?: object, opts?: LiquidOptions) {\n const options = normalize(opts)\n const templates = await this.getTemplate(file, options)\n return this.render(templates, ctx, opts)\n }\n evalValue (str: string, scope: Scope) {\n return new Value(str, this.options.strict_filters).value(scope)\n }\n registerFilter (name: string, filter: FilterImpl) {\n return Filter.register(name, filter)\n }\n registerTag (name: string, tag: ITagImplOptions) {\n return Tag.register(name, tag)\n }\n plugin (plugin: (this: Liquid, L: typeof Liquid) => void) {\n return plugin.call(this, Liquid)\n }\n express () {\n const self = this\n return function (this: any, filePath: string, ctx: object, cb: (err: Error | null, html?: string) => void) {\n const opts = { root: this.root }\n self.renderFile(filePath, ctx, opts).then(html => cb(null, html), cb)\n }\n }\n static default = Liquid\n static isTruthy = isTruthy\n static isFalsy = isFalsy\n static evalExp = evalExp\n static evalValue = evalValue\n static Types = Types\n}\n"],"names":["range","tslib_1.__extends","_\r\n .range","_.padStart","_.isArray","_.isString","BlockMode","_.last","value","_.isObject","filter","_.isNil","_.isFunction","lexical.isInteger","last","lexical.tagLine","operators","lexical.operators","lexical.quoteBalanced","lexical.rangeLine","lexical.isLiteral","lexical.parseLiteral","lexical.isVariable","lexical.value","lexical.filterLine","lexical.matchValue","lexical.filter","Value","HTML","re","hash","rValue","staticFileRE","_.forOwn","builtinTags"],"mappings":"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"} \ No newline at end of file diff --git a/dist/liquid.min.js b/dist/liquid.min.js index a68da4ddf..f695bcbc2 100644 --- a/dist/liquid.min.js +++ b/dist/liquid.min.js @@ -1,2 +1,2 @@ -!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e():"function"==typeof define&&define.amd?define(e):(t=t||self).Liquid=e()}(this,function(){"use strict";var n=function(t,e){return(n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)e.hasOwnProperty(r)&&(t[r]=e[r])})(t,e)};function e(t,e){function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)}var v=function(){return(v=Object.assign||function(t){for(var e,r=1,n=arguments.length;rs[0]&&e[1]=|<|>|\s+contains\s+/];function G(){Error.captureStackTrace&&Error.captureStackTrace(this,this.constructor)}var V=function(){function t(t,e){this.input=e.input,this.file=e.file,this.originalError=t,this.token=e}return t.prototype.captureStackTrace=function(t){this.name=t.constructor.name,G.call(t);var e,i,o,r,s,n=this.originalError,u=(e=this.input,i=this.token.line,o=e.split("\n"),r=Math.max(i-2,1),s=Math.min(i+3,o.length),function(t,e,r){1===arguments.length&&(e=t,t=0),r=r||1;for(var n=[],i=t;i> ":" ",r=w(String(t),String(s).length),n=o[t-1];return""+e+r+"| "+n}).join("\n"));this.message=function(t,e){t=t||"",e.file&&(t+=", file:"+e.file);e.line&&(t+=", line:"+e.line+", col:"+e.col);return t}(n.message,this.token),this.stack=this.message+"\n"+u+"\n"+(this.stack||this.message)+(n.stack?"\nFrom "+n.stack:"")},t}(),W=function(n){function t(t,e){var r=n.call(this,{message:t},e)||this;return n.prototype.captureStackTrace.call(r,r),r}return e(t,n),t}(V);W.prototype=a(Error.prototype),W.prototype.constructor=W;var B=function(n){function t(t,e){var r=n.call(this,t,e)||this;return r.message=t.message,n.prototype.captureStackTrace.call(r,r),r}return e(t,n),t}(V);B.prototype=a(Error.prototype),B.prototype.constructor=B;var J=function(n){function t(t,e){var r=n.call(this,t,e.token)||this;return r.message=t.message,n.prototype.captureStackTrace.call(r,r),r}return e(t,n),t}(V);J.prototype=a(Error.prototype),J.prototype.constructor=J;var X=function(t){G.call(this),this.message=t+""};X.prototype=a(Error.prototype),X.prototype.constructor=X;var K=function(t){G.call(this),this.message=t+""};function Q(t,e){if(!t)throw new K(e=e||"expect "+t+" to be true")}K.prototype=a(Error.prototype),K.prototype.constructor=K;var Z,tt,et={root:["."],cache:!1,extname:"",dynamicPartials:!0,trim_tag_right:!1,trim_tag_left:!1,trim_output_right:!1,trim_output_left:!1,greedy:!0,tag_delimiter_left:"{%",tag_delimiter_right:"%}",output_delimiter_left:"{{",output_delimiter_right:"}}",strict_filters:!1,strict_variables:!1};function rt(t){var e;return(t=t||{}).hasOwnProperty("root")&&(t.root=f(e=t.root)?e:l(e)?[e]:[]),t}function nt(t){return v({},et,t)}(tt=Z||(Z={}))[tt.OUTPUT=0]="OUTPUT",tt[tt.STORE=1]="STORE";var it=Z,ot=function(){function t(t,e){void 0===t&&(t={}),this.blocks={},this.blockMode=it.OUTPUT,this.opts=nt(e),this.contexts=[t||{}]}return t.prototype.getAll=function(){return this.contexts.reduce(function(t,e){return function(e){for(var t=[],r=1;r":function(t,e){return null!==t&&null!==e&&e=":function(t,e){return null!==t&&null!==e&&e<=t},"<=":function(t,e){return null!==t&&null!==e&&t<=e},contains:function(t,e){return!!t&&("function"==typeof t.indexOf&&-1"),u+=''),u+='',c.push(n),r=u,[4,this.liquid.renderer.renderTemplates(this.templates,c)];case 1:return u=r+t.sent(),u+="",c.pop(n),[2,u]}})})})];case 1:return t.sent(),0"),[2,u]}})})}},unless:{parse:function(t,e){var r,n=this;this.templates=[],this.elseTemplates=[];var i=this.liquid.parser.parseStream(e).on("start",function(){r=n.templates,n.cond=t.args}).on("tag:else",function(){return r=n.elseTemplates}).on("tag:endunless",function(){return i.stop()}).on("template",function(t){return r.push(t)}).on("end",function(){throw new Error("tag "+t.raw+" not closed")});i.start()},render:function(t){return _t(Et(this.cond,t))?this.liquid.renderer.renderTemplates(this.templates,t):this.liquid.renderer.renderTemplates(this.elseTemplates,t)}},break:{render:function(){return h(this,void 0,void 0,function(){return d(this,function(t){throw new X("break")})})}},continue:{render:function(){return h(this,void 0,void 0,function(){return d(this,function(t){throw new X("continue")})})}}},ue={"&":"&","<":"<",">":">",'"':""","'":"'"},ae={"&":"&","<":"<",">":">",""":'"',"'":"'"};function ce(t){return String(t).replace(/&|<|>|"|'/g,function(t){return ue[t]})}var le={escape:ce,escape_once:function(t){return ce(String(t).replace(/&(amp|lt|gt|#34|#39);/g,function(t){return ae[t]}))},newline_to_br:function(t){return t.replace(/\n/g,"
")},strip_html:function(t){return String(t).replace(/|||<.*?>/g,"")}},fe={append:function(t,e){return t+e},prepend:function(t,e){return e+t},capitalize:function(t){return String(t).charAt(0).toUpperCase()+t.slice(1)},concat:function(t,e){return Array.prototype.concat.call(t,e)},lstrip:function(t){return String(t).replace(/^\s+/,"")},downcase:function(t){return t.toLowerCase()},upcase:function(t){return String(t).toUpperCase()},remove:function(t,e){return t.split(e).join("")},remove_first:function(t,e){return t.replace(e,"")},replace:function(t,e,r){return String(t).split(e).join(r)},replace_first:function(t,e,r){return String(t).replace(e,r)},rstrip:function(t){return String(t).replace(/\s+$/,"")},split:function(t,e){return String(t).split(e)},strip:function(t){return String(t).trim()},strip_newlines:function(t){return String(t).replace(/\n/g,"")},truncate:function(t,e,r){return r=void 0===r?"...":r,e=e||16,(t=String(t)).length<=e?t:t.substr(0,e-r.length)+r},truncatewords:function(t,e,r){void 0===r&&(r="...");var n=t.split(" "),i=n.slice(0,e).join(" ");return n.length>e&&(i+=r),i}},pe={abs:function(t){return Math.abs(t)},ceil:function(t){return Math.ceil(t)},divided_by:function(t,e){return t/e},floor:function(t){return Math.floor(t)},minus:de(function(t,e){return t-e}),modulo:de(function(t,e){return t%e}),round:function(t,e){var r=Math.pow(10,e||0);return Math.round(t*r)/r},plus:de(function(t,e){return Number(t)+Number(e)}),times:function(t,e){return t*e}};function he(t){var e=String(t).split(".");return 1s[0]&&e[1]=|<|>|\s+contains\s+/];var B=function(r){function t(t,e){var n=r.call(this,t.message)||this;return n.originalError=t,n.token=e,n}return e(t,r),t.prototype.update=function(){var i,o,t,s,e=this.originalError,n=(i=this.token,o=i.input.split("\n"),t=Math.max(i.line-2,1),s=Math.min(i.line+3,o.length),m(t,s+1).map(function(t){var e=t===i.line?">> ":" ",n=w(String(t),String(s).length),r=o[t-1];return""+e+n+"| "+r}).join("\n"));this.message=function(t,e){e.file&&(t+=", file:"+e.file);return t+=", line:"+e.line+", col:"+e.col}(e.message,this.token),this.stack=this.message+"\n"+n+"\n"+this.stack+"\nFrom "+e.stack},t}(Error),G=function(r){function t(t,e){var n=r.call(this,new Error(t),e)||this;return n.name="TokenizationError",r.prototype.update.call(n),n}return e(t,r),t}(B),V=function(r){function t(t,e){var n=r.call(this,t,e)||this;return n.name="ParseError",n.message=t.message,r.prototype.update.call(n),n}return e(t,r),t}(B),W=function(r){function t(t,e){var n=r.call(this,t,e.token)||this;return n.name="RenderError",n.message=t.message,r.prototype.update.call(n),n}return e(t,r),t}(B),J=function(n){function t(t){var e=n.call(this,t)||this;return e.resolvedHTML="",e.name="RenderBreakError",e.message=t+"",e}return e(t,n),t}(Error),X=function(n){function t(t){var e=n.call(this,t)||this;return e.name="AssertionError",e.message=t+"",e}return e(t,n),t}(Error);function K(t,e){if(!t)throw new X(e=e||"expect "+t+" to be true")}var Q,Z,tt={root:["."],cache:!1,extname:"",dynamicPartials:!0,trim_tag_right:!1,trim_tag_left:!1,trim_output_right:!1,trim_output_left:!1,greedy:!0,tag_delimiter_left:"{%",tag_delimiter_right:"%}",output_delimiter_left:"{{",output_delimiter_right:"}}",strict_filters:!1,strict_variables:!1};function et(t){var e;return(t=t||{}).hasOwnProperty("root")&&(t.root=f(e=t.root)?e:l(e)?[e]:[]),t}function nt(t){return v({},tt,t)}(Z=Q||(Q={}))[Z.OUTPUT=0]="OUTPUT",Z[Z.STORE=1]="STORE";var rt=Q,it=function(){function t(t,e){void 0===t&&(t={}),this.blocks={},this.groups={},this.blockMode=rt.OUTPUT,this.opts=nt(e),this.contexts=[t||{}]}return t.prototype.getAll=function(){return this.contexts.reduce(function(t,e){return v(t,e)},{})},t.prototype.get=function(t){var n=this,e=this.propertyAccessSeq(t),r=this.findContextFor(e[0])||p(this.contexts);return e.reduce(function(t,e){return n.readProperty(t,e)},r)},t.prototype.set=function(t,n){var r=this.propertyAccessSeq(t),i=this.findContextFor(r[0])||p(this.contexts);r.some(function(t,e){return!g(i)||(e===r.length-1?(i[t]=n,!0):(void 0===i[t]&&(i[t]={}),i=i[t],!1))})},t.prototype.unshift=function(t){return this.contexts.unshift(t)},t.prototype.push=function(t){return this.contexts.push(t)},t.prototype.pop=function(e){if(!arguments.length)return this.contexts.pop();var t=this.contexts.findIndex(function(t){return t===e});if(-1===t)throw new TypeError("scope not found, cannot pop");return this.contexts.splice(t,1)[0]},t.prototype.findContextFor=function(t,e){void 0===e&&(e=function(){return!0});for(var n=this.contexts.length-1;0<=n;n--){var r=this.contexts[n];if(e(r)&&t in r)return r}return null},t.prototype.readProperty=function(t,e){var n,r;if(u(t)?n=void 0:(t=function(t){if(s(t.to_liquid))return t.to_liquid();if(s(t.toLiquid))return t.toLiquid();return t}(t),n="size"===e?u((r=t).size)&&(f(r)||l(r))?r.length:r.size:t[e],s(t.liquid_method_missing)&&(n=t.liquid_method_missing(e))),u(n)&&this.opts.strict_variables)throw new TypeError("undefined variable: "+e);return n},t.prototype.propertyAccessSeq=function(t){t=String(t);for(var e,n,r=[],i="",o=0;o":function(t,e){return null!==t&&null!==e&&e=":function(t,e){return null!==t&&null!==e&&e<=t},"<=":function(t,e){return null!==t&&null!==e&&t<=e},contains:function(t,e){return!!t&&("function"==typeof t.indexOf&&-1"),u+=''),u+='',c.push(r),n=u,[4,this.liquid.renderer.renderTemplates(this.templates,c)];case 1:return u=n+t.sent(),u+="",c.pop(r),[2,u]}})})})];case 1:return t.sent(),0"),[2,u]}})})}},unless:{parse:function(t,e){var n,r=this;this.templates=[],this.elseTemplates=[];var i=this.liquid.parser.parseStream(e).on("start",function(){n=r.templates,r.cond=t.args}).on("tag:else",function(){return n=r.elseTemplates}).on("tag:endunless",function(){return i.stop()}).on("template",function(t){return n.push(t)}).on("end",function(){throw new Error("tag "+t.raw+" not closed")});i.start()},render:function(t){return St(Tt(this.cond,t))?this.liquid.renderer.renderTemplates(this.templates,t):this.liquid.renderer.renderTemplates(this.elseTemplates,t)}},break:{render:function(){return h(this,void 0,void 0,function(){return d(this,function(t){throw new J("break")})})}},continue:{render:function(){return h(this,void 0,void 0,function(){return d(this,function(t){throw new J("continue")})})}}},se={"&":"&","<":"<",">":">",'"':""","'":"'"},ue={"&":"&","<":"<",">":">",""":'"',"'":"'"};function ae(t){return String(t).replace(/&|<|>|"|'/g,function(t){return se[t]})}var ce={escape:ae,escape_once:function(t){return ae(String(t).replace(/&(amp|lt|gt|#34|#39);/g,function(t){return ue[t]}))},newline_to_br:function(t){return t.replace(/\n/g,"
")},strip_html:function(t){return t.replace(/|||<.*?>/g,"")}},le={append:function(t,e){return t+e},prepend:function(t,e){return e+t},capitalize:function(t){return String(t).charAt(0).toUpperCase()+t.slice(1)},lstrip:function(t){return String(t).replace(/^\s+/,"")},downcase:function(t){return t.toLowerCase()},upcase:function(t){return String(t).toUpperCase()},remove:function(t,e){return t.split(e).join("")},remove_first:function(t,e){return t.replace(e,"")},replace:function(t,e,n){return String(t).split(e).join(n)},replace_first:function(t,e,n){return String(t).replace(e,n)},rstrip:function(t){return String(t).replace(/\s+$/,"")},split:function(t,e){return String(t).split(e)},strip:function(t){return String(t).trim()},strip_newlines:function(t){return String(t).replace(/\n/g,"")},truncate:function(t,e,n){return void 0===e&&(e=50),void 0===n&&(n="..."),(t=String(t)).length<=e?t:t.substr(0,e-n.length)+n},truncatewords:function(t,e,n){void 0===e&&(e=15),void 0===n&&(n="...");var r=t.split(/\s+/),i=r.slice(0,e).join(" ");return r.length>=e&&(i+=n),i}},fe={abs:function(t){return Math.abs(t)},ceil:function(t){return Math.ceil(t)},divided_by:function(t,e){return t/e},floor:function(t){return Math.floor(t)},minus:he(function(t,e){return t-e}),modulo:he(function(t,e){return t%e}),round:function(t,e){void 0===e&&(e=0);var n=Math.pow(10,e);return Math.round(t*n)/n},plus:he(function(t,e){return Number(t)+Number(e)}),times:function(t,e){return t*e}};function pe(t){var e=String(t).split(".");return 1 {\n fn(...args, (err, result) => {\n err ? reject(err) : resolve(result)\n })\n })\n }\n}\n\nexport function stringify (value: any): string {\n if (isNil(value)) return ''\n if (isFunction(value.to_liquid)) return stringify(value.to_liquid())\n if (isFunction(value.toLiquid)) return stringify(value.toLiquid())\n if (isFunction(value.to_s)) return value.to_s()\n if ([toStr, arrToStr].indexOf(value.toString) > -1) return defaultToString(value)\n if (isFunction(value.toString)) return value.toString()\n return toStr.call(value)\n}\n\nfunction defaultToString (value: any): string {\n const cache = []\n return JSON.stringify(value, (key, value) => {\n if (isObject(value)) {\n if (cache.indexOf(value) !== -1) {\n return\n }\n cache.push(value)\n }\n return value\n })\n}\n\nexport function create (proto: T1): T2 {\n return Object.create(proto)\n}\n\nexport function isNil (value: any): boolean {\n return value === null || value === undefined\n}\n\nexport function isArray (value: any): boolean {\n // be compatible with IE 8\n return toStr.call(value) === '[object Array]'\n}\n\nexport function isError (value: any): boolean {\n const signature = toStr.call(value)\n // [object XXXError]\n return signature.substr(-6, 5) === 'Error' ||\n (typeof value.message === 'string' && typeof value.name === 'string')\n}\n\n/*\n * Iterates over own enumerable string keyed properties of an object and invokes iteratee for each property.\n * The iteratee is invoked with three arguments: (value, key, object).\n * Iteratee functions may exit iteration early by explicitly returning false.\n * @param {Object} object The object to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @return {Object} Returns object.\n */\nexport function forOwn (object, iteratee: ((val: any, key: string, obj: object) => boolean | void)) {\n object = object || {}\n for (const k in object) {\n if (object.hasOwnProperty(k)) {\n if (iteratee(object[k], k, object) === false) break\n }\n }\n return object\n}\n\n/*\n * Assigns own enumerable string keyed properties of source objects to the destination object.\n * Source objects are applied from left to right.\n * Subsequent sources overwrite property assignments of previous sources.\n *\n * Note: This method mutates object and is loosely based on Object.assign.\n *\n * @param {Object} object The destination object.\n * @param {...Object} sources The source objects.\n * @return {Object} Returns object.\n */\nexport function assign (obj: object, ...srcs: object[]): object {\n obj = isObject(obj) ? obj : {}\n srcs.forEach(src => binaryAssign(obj, src))\n return obj\n}\n\nfunction binaryAssign (target: object, src: object): object {\n for (const key in src) if (src.hasOwnProperty(key)) target[key] = src[key]\n return target\n}\n\nexport function last (arr: any[]): any {\n return arr[arr.length - 1]\n}\n\nexport function uniq (arr: any[]): any[] {\n const u = {}\n const a = []\n for (let i = 0, l = arr.length; i < l; ++i) {\n if (u.hasOwnProperty(arr[i])) {\n continue\n }\n a.push(arr[i])\n u[arr[i]] = 1\n }\n return a\n}\n\n/*\n * Checks if value is the language type of Object.\n * (e.g. arrays, functions, objects, regexes, new Number(0), and new String(''))\n * @param {any} value The value to check.\n * @return {Boolean} Returns true if value is an object, else false.\n */\nexport function isObject (value: any): boolean {\n const type = typeof value\n return value !== null && (type === 'object' || type === 'function')\n}\n\n/*\n * A function to create flexibly-numbered lists of integers,\n * handy for each and map loops. start, if omitted, defaults to 0; step defaults to 1.\n * Returns a list of integers from start (inclusive) to stop (exclusive),\n * incremented (or decremented) by step, exclusive.\n * Note that ranges that stop before they start are considered to be zero-length instead of\n * negative — if you'd like a negative range, use a negative step.\n */\nexport function range (start: number, stop?: number, step?: number) {\n if (arguments.length === 1) {\n stop = start\n start = 0\n }\n step = step || 1\n\n const arr = []\n for (let i = start; i < stop; i += step) {\n arr.push(i)\n }\n return arr\n}\n\nexport function padStart (str: any, length: number, ch: string = ' ') {\n str = String(str)\n let n = length - str.length\n while (n-- > 0) str = ch + str\n return str\n}\n","// quote related\nconst singleQuoted = /'[^']*'/\nconst doubleQuoted = /\"[^\"]*\"/\nexport const quoted = new RegExp(`${singleQuoted.source}|${doubleQuoted.source}`)\nexport const quoteBalanced = new RegExp(`(?:${quoted.source}|[^'\"])*`)\n\n// basic types\nexport const integer = /-?\\d+/\nexport const number = /-?\\d+\\.?\\d*|\\.?\\d+/\nexport const bool = /true|false/\n\n// property access\nexport const identifier = /[\\w-]+[?]?/\nexport const subscript = new RegExp(`\\\\[(?:${quoted.source}|[\\\\w-\\\\.]+)\\\\]`)\nexport const literal = new RegExp(`(?:${quoted.source}|${bool.source}|${number.source})`)\nexport const variable = new RegExp(`${identifier.source}(?:\\\\.${identifier.source}|${subscript.source})*`)\n\n// range related\nexport const rangeLimit = new RegExp(`(?:${variable.source}|${number.source})`)\nexport const range = new RegExp(`\\\\(${rangeLimit.source}\\\\.\\\\.${rangeLimit.source}\\\\)`)\nexport const rangeCapture = new RegExp(`\\\\((${rangeLimit.source})\\\\.\\\\.(${rangeLimit.source})\\\\)`)\n\nexport const value = new RegExp(`(?:${variable.source}|${literal.source}|${range.source})`)\n\n// hash related\nexport const hash = new RegExp(`(?:${identifier.source})\\\\s*:\\\\s*(?:${value.source})`)\nexport const hashCapture = new RegExp(`(${identifier.source})\\\\s*:\\\\s*(${value.source})`, 'g')\n\n// full match\nexport const tagLine = new RegExp(`^\\\\s*(${identifier.source})\\\\s*([\\\\s\\\\S]*?)\\\\s*$`)\nexport const literalLine = new RegExp(`^${literal.source}$`, 'i')\nexport const variableLine = new RegExp(`^${variable.source}$`)\nexport const numberLine = new RegExp(`^${number.source}$`)\nexport const boolLine = new RegExp(`^${bool.source}$`, 'i')\nexport const quotedLine = new RegExp(`^${quoted.source}$`)\nexport const rangeLine = new RegExp(`^${rangeCapture.source}$`)\nexport const integerLine = new RegExp(`^${integer.source}$`)\n\n// filter related\nexport const valueDeclaration = new RegExp(`(?:${identifier.source}\\\\s*:\\\\s*)?${value.source}`)\nexport const valueList = new RegExp(`${valueDeclaration.source}(\\\\s*,\\\\s*${valueDeclaration.source})*`)\nexport const filter = new RegExp(`${identifier.source}(?:\\\\s*:\\\\s*${valueList.source})?`, 'g')\nexport const filterCapture = new RegExp(`(${identifier.source})(?:\\\\s*:\\\\s*(${valueList.source}))?`)\nexport const filterLine = new RegExp(`^${filterCapture.source}$`)\n\nexport const operators = [\n /\\s+or\\s+/,\n /\\s+and\\s+/,\n /==|!=|<=|>=|<|>|\\s+contains\\s+/\n]\n\nexport function isInteger (str) {\n return integerLine.test(str)\n}\n\nexport function isLiteral (str) {\n return literalLine.test(str)\n}\n\nexport function isRange (str) {\n return rangeLine.test(str)\n}\n\nexport function isVariable (str) {\n return variableLine.test(str)\n}\n\nexport function matchValue (str) {\n return value.exec(str)\n}\n\nexport function parseLiteral (str) {\n let res = str.match(numberLine)\n if (res) {\n return Number(str)\n }\n res = str.match(boolLine)\n if (res) {\n return str.toLowerCase() === 'true'\n }\n res = str.match(quotedLine)\n if (res) {\n return str.slice(1, -1)\n }\n throw new TypeError(`cannot parse '${str}' as literal`)\n}\n","import * as _ from './underscore'\nimport Token from 'src/parser/token'\n\nfunction captureStack () {\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, this.constructor)\n }\n}\n\nabstract class LiquidError {\n name: string\n message: string\n stack: string\n private file: string\n private input: string\n private token: Token\n private originalError: Error\n constructor (err, token) {\n this.input = token.input\n this.file = token.file\n this.originalError = err\n this.token = token\n }\n captureStackTrace (obj) {\n this.name = obj.constructor.name\n\n captureStack.call(obj)\n const err = this.originalError\n const context = mkContext(this.input, this.token.line)\n this.message = mkMessage(err.message, this.token)\n this.stack = this.message + '\\n' + context +\n '\\n' + (this.stack || this.message) +\n (err.stack ? '\\nFrom ' + err.stack : '')\n }\n}\n\nexport class TokenizationError extends LiquidError {\n constructor (message, token) {\n super({ message }, token)\n super.captureStackTrace(this)\n }\n}\nTokenizationError.prototype = _.create(Error.prototype) as any\nTokenizationError.prototype.constructor = TokenizationError\n\nexport class ParseError extends LiquidError {\n constructor (err, token) {\n super(err, token)\n this.message = err.message\n super.captureStackTrace(this)\n }\n}\nParseError.prototype = _.create(Error.prototype) as any\nParseError.prototype.constructor = ParseError\n\nexport class RenderError extends LiquidError {\n constructor (err, tpl) {\n super(err, tpl.token)\n this.message = err.message\n super.captureStackTrace(this)\n }\n}\nRenderError.prototype = _.create(Error.prototype) as any\nRenderError.prototype.constructor = RenderError\n\nexport class RenderBreakError {\n message: string\n resolvedHTML: string\n constructor (message) {\n captureStack.call(this)\n this.message = message + ''\n }\n}\nRenderBreakError.prototype = _.create(Error.prototype) as any\nRenderBreakError.prototype.constructor = RenderBreakError\n\nexport class AssertionError {\n message: string\n constructor (message) {\n captureStack.call(this)\n this.message = message + ''\n }\n}\nAssertionError.prototype = _.create(Error.prototype) as any\nAssertionError.prototype.constructor = AssertionError\n\nfunction mkContext (input, targetLine) {\n const lines = input.split('\\n')\n const begin = Math.max(targetLine - 2, 1)\n const end = Math.min(targetLine + 3, lines.length)\n\n const context = _\n .range(begin, end + 1)\n .map(lineNumber => {\n const indicator = (lineNumber === targetLine) ? '>> ' : ' '\n const num = _.padStart(String(lineNumber), String(end).length)\n const text = lines[lineNumber - 1]\n return `${indicator}${num}| ${text}`\n })\n .join('\\n')\n\n return context\n}\n\nfunction mkMessage (msg, token) {\n msg = msg || ''\n if (token.file) {\n msg += ', file:' + token.file\n }\n if (token.line) {\n msg += `, line:${token.line}, col:${token.col}`\n }\n return msg\n}\n","import { AssertionError } from './error'\n\nexport default function (predicate: any, message?: string) {\n if (!predicate) {\n message = message || `expect ${predicate} to be true`\n throw new AssertionError(message)\n }\n}\n","/* eslint-disable camelcase */\n\nimport * as _ from './util/underscore'\n\nexport interface LiquidOptions {\n /** `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 `[\".\"]` */\n root?: string | string[]\n /** `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 `\"\"`. */\n extname?: string\n /** `cache` indicates whether or not to cache resolved templates. Defaults to `false`. */\n cache?: boolean\n /** `dynamicPartials`: if set, treat `` parameter in `{%include filepath %}`, `{%layout filepath%}` as a variable, otherwise as a literal value. Defaults to `true`. */\n dynamicPartials?: boolean\n /** `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`. */\n strict_filters?: boolean\n /** `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`. */\n strict_variables?: boolean\n /** `trim_tag_right` is used to strip blank characters (including ` `, `\\t`, and `\\r`) from the right of tags (`{% %}`) until `\\n` (inclusive). Defaults to `false`. */\n trim_tag_right?: boolean\n /** `trim_tag_left` is similar to `trim_tag_right`, whereas the `\\n` is exclusive. Defaults to `false`. See Whitespace Control for details. */\n trim_tag_left?: boolean\n /** ``trim_output_right` is used to strip blank characters (including ` `, `\\t`, and `\\r`) from the right of values (`{{ }}`) until `\\n` (inclusive). Defaults to `false`. */\n trim_output_right?: boolean\n /** `trim_output_left` is similar to `trim_output_right`, whereas the `\\n` is exclusive. Defaults to `false`. See Whitespace Control for details. */\n trim_output_left?: boolean\n /** `tag_delimiter_left` and `tag_delimiter_right` are used to override the delimiter for liquid tags **/\n tag_delimiter_left?: string,\n tag_delimiter_right?: string,\n /** `output_delimiter_left` and `output_delimiter_right` are used to override the delimiter for liquid outputs **/\n output_delimiter_left?: string,\n output_delimiter_right?: string,\n /** `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`. */\n greedy?: boolean\n}\n\nexport interface NormalizedOptions extends LiquidOptions {\n root?: string[]\n}\n\nexport interface NormalizedFullOptions extends NormalizedOptions {\n root: string[]\n extname: string\n cache: boolean\n dynamicPartials: boolean\n strict_filters: boolean\n strict_variables: boolean\n trim_tag_right: boolean\n trim_tag_left: boolean\n trim_output_right: boolean\n trim_output_left: boolean\n greedy: boolean\n}\n\nconst defaultOptions: NormalizedFullOptions = {\n root: ['.'],\n cache: false,\n extname: '',\n dynamicPartials: true,\n trim_tag_right: false,\n trim_tag_left: false,\n trim_output_right: false,\n trim_output_left: false,\n greedy: true,\n tag_delimiter_left: '{%',\n tag_delimiter_right: '%}',\n output_delimiter_left: '{{',\n output_delimiter_right: '}}',\n strict_filters: false,\n strict_variables: false\n}\n\nexport function normalize (options: LiquidOptions): NormalizedOptions {\n options = options || {}\n if (options.hasOwnProperty('root')) {\n options.root = normalizeStringArray(options.root)\n }\n return options as NormalizedOptions\n}\n\nexport function applyDefault (options: NormalizedOptions): NormalizedFullOptions {\n return { ...defaultOptions, ...options }\n}\n\nfunction normalizeStringArray (value: string | string[]): string[] {\n if (_.isArray(value)) return value as string[]\n if (_.isString(value)) return [value as string]\n return []\n}\n","enum BlockMode {\n /* store rendered html into blocks */\n OUTPUT,\n /* output rendered html directly */\n STORE\n}\n\nexport default BlockMode\n","import * as _ from '../util/underscore'\nimport * as lexical from '../parser/lexical'\nimport assert from '../util/assert'\nimport { NormalizedFullOptions, applyDefault } from '../liquid-options'\nimport BlockMode from './block-mode'\n\nexport default class Scope {\n opts: NormalizedFullOptions\n contexts: Array\n blocks: object = {}\n blockMode: BlockMode = BlockMode.OUTPUT\n constructor (ctx: object = {}, opts?: NormalizedFullOptions) {\n this.opts = applyDefault(opts)\n this.contexts = [ctx || {}]\n }\n getAll () {\n return this.contexts.reduce((ctx, val) => _.assign(ctx, val), _.create(null))\n }\n get (path: string): any {\n const paths = this.propertyAccessSeq(path)\n const scope = this.findContextFor(paths[0]) || _.last(this.contexts)\n return paths.reduce((value, key) => this.readProperty(value, key), scope)\n }\n set (path: string, v: any): void {\n const paths = this.propertyAccessSeq(path)\n let scope = this.findContextFor(paths[0]) || _.last(this.contexts)\n paths.some((key, i) => {\n if (!_.isObject(scope)) {\n return true\n }\n if (i === paths.length - 1) {\n scope[key] = v\n return true\n }\n if (undefined === scope[key]) {\n scope[key] = {}\n }\n scope = scope[key]\n })\n }\n unshift (ctx: object) {\n return this.contexts.unshift(ctx)\n }\n push (ctx: object) {\n return this.contexts.push(ctx)\n }\n pop (ctx?: object): object {\n if (!arguments.length) {\n return this.contexts.pop()\n }\n const i = this.contexts.findIndex(scope => scope === ctx)\n if (i === -1) {\n throw new TypeError('scope not found, cannot pop')\n }\n return this.contexts.splice(i, 1)[0]\n }\n findContextFor (key: string, filter: ((conttext: object) => boolean) = () => true) {\n for (let i = this.contexts.length - 1; i >= 0; i--) {\n const candidate = this.contexts[i]\n if (!filter(candidate)) continue\n if (key in candidate) {\n return candidate\n }\n }\n return null\n }\n readProperty (obj, key) {\n let val\n if (_.isNil(obj)) {\n val = undefined\n } else {\n obj = toLiquid(obj)\n val = key === 'size' ? readSize(obj) : obj[key]\n if (_.isFunction(obj.liquid_method_missing)) {\n val = obj.liquid_method_missing(key)\n }\n }\n if (_.isNil(val) && this.opts.strict_variables) {\n throw new TypeError(`undefined variable: ${key}`)\n }\n return val\n }\n\n /*\n * Parse property access sequence from access string\n * @example\n * accessSeq(\"foo.bar\") // ['foo', 'bar']\n * accessSeq(\"foo['bar']\") // ['foo', 'bar']\n * accessSeq(\"foo['b]r']\") // ['foo', 'b]r']\n * accessSeq(\"foo[bar.coo]\") // ['foo', 'bar'], for bar.coo == 'bar'\n */\n propertyAccessSeq (str) {\n str = String(str)\n const seq = []\n let name = ''\n let j\n let i = 0\n while (i < str.length) {\n switch (str[i]) {\n case '[':\n push()\n\n const delemiter = str[i + 1]\n if (/['\"]/.test(delemiter)) { // foo[\"bar\"]\n j = str.indexOf(delemiter, i + 2)\n assert(j !== -1, `unbalanced ${delemiter}: ${str}`)\n name = str.slice(i + 2, j)\n push()\n i = j + 2\n } else { // foo[bar.coo]\n j = matchRightBracket(str, i + 1)\n assert(j !== -1, `unbalanced []: ${str}`)\n name = str.slice(i + 1, j)\n if (!lexical.isInteger(name)) { // foo[bar] vs. foo[1]\n name = String(this.get(name))\n }\n push()\n i = j + 1\n }\n break\n case '.':// foo.bar, foo[0].bar\n push()\n i++\n break\n default:// foo.bar\n name += str[i]\n i++\n }\n }\n push()\n\n if (!seq.length) {\n throw new TypeError(`invalid path:\"${str}\"`)\n }\n return seq\n\n function push () {\n if (name.length) seq.push(name)\n name = ''\n }\n }\n}\n\nfunction toLiquid (obj) {\n if (_.isFunction(obj.to_liquid)) {\n return obj.to_liquid()\n }\n if (_.isFunction(obj.toLiquid)) {\n return obj.toLiquid()\n }\n return obj\n}\n\nfunction readSize (obj) {\n if (!_.isNil(obj.size)) return obj.size\n if (_.isArray(obj) || _.isString(obj)) return obj.length\n return obj.size\n}\n\nfunction matchRightBracket (str, begin) {\n let stack = 1 // count of '[' - count of ']'\n for (let i = begin; i < str.length; i++) {\n if (str[i] === '[') {\n stack++\n }\n if (str[i] === ']') {\n stack--\n if (stack === 0) {\n return i\n }\n }\n }\n return -1\n}\n","export class CaptureScope {}\nexport class AssignScope {}\nexport class IncrementScope {}\nexport class DecrementScope {}\n","import { last } from '../util/underscore'\nimport IFS from './ifs'\n\nfunction domResolve (root, path) {\n const base = document.createElement('base')\n base.href = root\n\n const head = document.getElementsByTagName('head')[0]\n head.insertBefore(base, head.firstChild)\n\n const a = document.createElement('a')\n a.href = path\n const resolved = a.href\n head.removeChild(base)\n\n return resolved\n}\n\nfunction resolve (root, filepath, ext) {\n if (root.length && last(root) !== '/') root += '/'\n const url = domResolve(root, filepath)\n return url.replace(/^(\\w+:\\/\\/[^/]+)(\\/[^?]+)/, (str, origin, path) => {\n const last = path.split('/').pop()\n if (/\\.\\w+$/.test(last)) return str\n return origin + path + ext\n })\n}\n\nasync function readFile (url: string): Promise {\n return new Promise((resolve, reject) => {\n const xhr = new XMLHttpRequest()\n xhr.onload = () => {\n if (xhr.status >= 200 && xhr.status < 300) {\n resolve(xhr.responseText as string)\n } else {\n reject(new Error(xhr.statusText))\n }\n }\n xhr.onerror = () => {\n reject(new Error('An error occurred whilst receiving the response.'))\n }\n xhr.open('GET', url)\n xhr.send()\n })\n}\n\nasync function exists () {\n return true\n}\n\nexport default { readFile, resolve, exists } as IFS\n","export default class Token {\n type: string\n line: number\n col: number\n raw: string\n input: string\n file: string\n value: string\n constructor (raw, col, input, file, line) {\n this.col = col\n this.line = line\n this.raw = raw\n this.input = input\n this.file = file\n }\n}\n","import whiteSpaceCtrl from './whitespace-ctrl'\nimport HTMLToken from './html-token'\nimport TagToken from './tag-token'\nimport Token from './token'\nimport OutputToken from './output-token'\nimport { TokenizationError } from 'src/util/error'\nimport { NormalizedFullOptions, applyDefault } from '../liquid-options'\n\nenum ParseState { HTML, OUTPUT, TAG }\n\nexport default class Tokenizer {\n options: NormalizedFullOptions\n constructor (options?: NormalizedFullOptions) {\n this.options = applyDefault(options)\n }\n tokenize (input: string, file?: string) {\n const tokens = []\n const tagL = this.options.tag_delimiter_left\n const tagR = this.options.tag_delimiter_right\n const outputL = this.options.output_delimiter_left\n const outputR = this.options.output_delimiter_right\n let p = 0\n let curLine = 1\n let state = ParseState.HTML\n let buffer = ''\n let lineBegin = 0\n let line = 1\n let col = 1\n\n while (p < input.length) {\n if (input[p] === '\\n') {\n curLine++\n lineBegin = p + 1\n }\n if (state === ParseState.HTML) {\n if (input.substr(p, outputL.length) === outputL) {\n if (buffer) tokens.push(new HTMLToken(buffer, col, input, file, line))\n buffer = outputL\n line = curLine\n col = p - lineBegin + 1\n p += outputL.length\n state = ParseState.OUTPUT\n continue\n } else if (input.substr(p, tagL.length) === tagL) {\n if (buffer) tokens.push(new HTMLToken(buffer, col, input, file, line))\n buffer = tagL\n line = curLine\n col = p - lineBegin + 1\n p += tagL.length\n state = ParseState.TAG\n continue\n }\n } else if (state === ParseState.OUTPUT && input.substr(p, outputR.length) === outputR) {\n buffer += outputR\n tokens.push(new OutputToken(buffer, buffer.slice(outputL.length, -outputR.length), col, input, file, line))\n p += outputR.length\n buffer = ''\n line = curLine\n col = p - lineBegin + 1\n state = ParseState.HTML\n continue\n } else if (input.substr(p, tagR.length) === tagR) {\n buffer += tagR\n tokens.push(new TagToken(buffer, buffer.slice(tagL.length, -tagR.length), col, input, file, line))\n p += tagR.length\n buffer = ''\n line = curLine\n col = p - lineBegin + 1\n state = ParseState.HTML\n continue\n }\n buffer += input[p++]\n }\n if (state !== ParseState.HTML) {\n const t = state === ParseState.OUTPUT ? 'output' : 'tag'\n const str = buffer.length > 16 ? buffer.slice(0, 13) + '...' : buffer\n throw new TokenizationError(\n new Error(`${t} \"${str}\" not closed`),\n new Token(buffer, col, input, file, line)\n )\n }\n if (buffer) tokens.push(new HTMLToken(buffer, col, input, file, line))\n\n whiteSpaceCtrl(tokens, this.options)\n return tokens\n }\n}\n","import Token from './token'\n\nexport default class HTMLToken extends Token {\n constructor (str, begin, input, file, line) {\n super(str, begin, input, file, line)\n this.type = 'html'\n this.value = str\n }\n}\n","import Token from './token'\n\nexport default class DelimitedToken extends Token {\n trimLeft: boolean\n trimRight: boolean\n constructor (raw, value, pos, input, file, line) {\n super(raw, pos, input, file, line)\n this.trimLeft = value[0] === '-'\n this.trimRight = value[value.length - 1] === '-'\n this.value = value\n .slice(\n this.trimLeft ? 1 : 0,\n this.trimRight ? -1 : value.length\n )\n .trim()\n }\n}\n","import DelimitedToken from './delimited-token'\nimport { TokenizationError } from 'src/util/error'\nimport * as lexical from './lexical'\n\nexport default class TagToken extends DelimitedToken {\n name: string\n args: string\n constructor (raw, value, pos, input, file, line) {\n super(raw, value, pos, input, file, line)\n this.type = 'tag'\n const match = this.value.match(lexical.tagLine)\n if (!match) {\n throw new TokenizationError(`illegal tag syntax`, this)\n }\n this.name = match[1]\n this.args = match[2]\n }\n}\n","import DelimitedToken from './delimited-token'\n\nexport default class OutputToken extends DelimitedToken {\n constructor (raw, value, pos, input, file, line) {\n super(raw, value, pos, input, file, line)\n this.type = 'output'\n }\n}\n","import DelimitedToken from 'src/parser/delimited-token'\nimport Token from 'src/parser/token'\nimport TagToken from 'src/parser/tag-token'\nimport { NormalizedFullOptions } from 'src/liquid-options'\n\nexport default function whiteSpaceCtrl (tokens: Token[], options: NormalizedFullOptions) {\n options = { greedy: true, ...options }\n let inRaw = false\n\n tokens.forEach((token: Token, i: number) => {\n if (shouldTrimLeft(token as DelimitedToken, inRaw, options)) {\n trimLeft(tokens[i - 1], options.greedy)\n }\n\n if (token.type === 'tag' && (token as TagToken).name === 'raw') inRaw = true\n if (token.type === 'tag' && (token as TagToken).name === 'endraw') inRaw = false\n\n if (shouldTrimRight(token as DelimitedToken, inRaw, options)) {\n trimRight(tokens[i + 1], options.greedy)\n }\n })\n}\n\nfunction shouldTrimLeft (token: DelimitedToken, inRaw: boolean, options) {\n if (inRaw) return false\n if (token.type === 'tag') return token.trimLeft || options.trim_tag_left\n if (token.type === 'output') return token.trimLeft || options.trim_output_left\n}\n\nfunction shouldTrimRight (token: DelimitedToken, inRaw: boolean, options) {\n if (inRaw) return false\n if (token.type === 'tag') return token.trimRight || options.trim_tag_right\n if (token.type === 'output') return token.trimRight || options.trim_output_right\n}\n\nfunction trimLeft (token: Token, greedy: boolean) {\n if (!token || token.type !== 'html') return\n\n const rLeft = greedy ? /\\s+$/g : /[\\t\\r ]*$/g\n token.value = token.value.replace(rLeft, '')\n}\n\nfunction trimRight (token: Token, greedy: boolean) {\n if (!token || token.type !== 'html') return\n\n const rRight = greedy ? /^\\s+/g : /^[\\t\\r ]*\\n?/g\n token.value = token.value.replace(rRight, '')\n}\n","import { RenderBreakError, RenderError } from 'src/util/error'\nimport assert from 'src/util/assert'\n\nexport default class Render {\n async renderTemplates (templates, scope) {\n assert(scope, 'unable to evalTemplates: scope undefined')\n\n let html = ''\n for (const tpl of templates) {\n try {\n html += await tpl.render(scope)\n } catch (e) {\n if (e instanceof RenderBreakError) {\n e.resolvedHTML = html\n throw e\n }\n throw e instanceof RenderError ? e : new RenderError(e, tpl)\n }\n }\n return html\n }\n}\n","import * as lexical from '../parser/lexical'\nimport assert from '../util/assert'\n\nconst operators = {\n '==': (l, r) => l === r,\n '!=': (l, r) => l !== r,\n '>': (l, r) => l !== null && r !== null && l > r,\n '<': (l, r) => l !== null && r !== null && l < r,\n '>=': (l, r) => l !== null && r !== null && l >= r,\n '<=': (l, r) => l !== null && r !== null && l <= r,\n 'contains': (l, r) => {\n if (!l) return false\n if (typeof l.indexOf !== 'function') return false\n return l.indexOf(r) > -1\n },\n 'and': (l, r) => isTruthy(l) && isTruthy(r),\n 'or': (l, r) => isTruthy(l) || isTruthy(r)\n}\n\nexport function evalExp (exp, scope) {\n assert(scope, 'unable to evalExp: scope undefined')\n const operatorREs = lexical.operators\n let match\n for (let i = 0; i < operatorREs.length; i++) {\n const operatorRE = operatorREs[i]\n const expRE = new RegExp(`^(${lexical.quoteBalanced.source})(${operatorRE.source})(${lexical.quoteBalanced.source})$`)\n if ((match = exp.match(expRE))) {\n const l = evalExp(match[1], scope)\n const op = operators[match[2].trim()]\n const r = evalExp(match[3], scope)\n return op(l, r)\n }\n }\n\n if ((match = exp.match(lexical.rangeLine))) {\n const low = evalValue(match[1], scope)\n const high = evalValue(match[2], scope)\n const range = []\n for (let j = low; j <= high; j++) {\n range.push(j)\n }\n return range\n }\n\n return evalValue(exp, scope)\n}\n\nexport function evalValue (str, scope) {\n str = str && str.trim()\n if (!str) return undefined\n\n if (lexical.isLiteral(str)) {\n return lexical.parseLiteral(str)\n }\n if (lexical.isVariable(str)) {\n return scope.get(str)\n }\n throw new TypeError(`cannot eval '${str}' as value`)\n}\n\nexport function isTruthy (val) {\n return !isFalsy(val)\n}\n\nexport function isFalsy (val) {\n return val === false || undefined === val || val === null\n}\n","import { hashCapture } from 'src/parser/lexical'\nimport { evalValue } from 'src/render/syntax'\n\n/**\n * Key-Value Pairs Representing Tag Arguments\n * Example:\n * For the markup `{% include 'head.html' foo='bar' %}`,\n * hash['foo'] === 'bar'\n */\nexport default class Hash {\n [key: string]: any\n constructor (markup, scope) {\n let match\n hashCapture.lastIndex = 0\n while ((match = hashCapture.exec(markup))) {\n const k = match[1]\n const v = match[2]\n this[k] = evalValue(v, scope)\n }\n }\n}\n","import Token from 'src/parser/token'\n\nexport default class Template {\n token: Token;\n constructor (token) {\n this.token = token\n }\n}\n","import { create, stringify } from 'src/util/underscore'\nimport assert from 'src/util/assert'\nimport Scope from 'src/scope/scope'\nimport ITagImpl from './itag-impl'\nimport ITagImplOptions from './itag-impl-options'\nimport Liquid from 'src/liquid'\nimport Hash from './hash'\nimport Template from 'src/template/template'\nimport ITemplate from 'src/template/itemplate'\nimport TagToken from 'src/parser/tag-token'\nimport Token from 'src/parser/token'\n\nexport default class Tag extends Template implements ITemplate {\n name: string\n token: TagToken\n private impl: ITagImpl\n static impls: { [key: string]: ITagImplOptions } = {}\n\n constructor (token: TagToken, tokens: Token[], liquid: Liquid) {\n super(token)\n this.name = token.name\n\n const impl = Tag.impls[token.name]\n assert(impl, `tag ${token.name} not found`)\n this.impl = create(impl)\n this.impl.liquid = liquid\n if (this.impl.parse) {\n this.impl.parse(token, tokens)\n }\n }\n async render (scope: Scope) {\n const hash = new Hash(this.token.args, scope)\n const impl = this.impl\n if (typeof impl.render !== 'function') {\n return ''\n }\n const html = await impl.render(scope, hash)\n return stringify(html)\n }\n static register (name: string, tag: ITagImplOptions) {\n Tag.impls[name] = tag\n }\n static clear () {\n Tag.impls = {}\n }\n}\n","import assert from 'src/util/assert'\nimport * as lexical from 'src/parser/lexical'\nimport { evalValue } from 'src/render/syntax'\nimport Scope from 'src/scope/scope'\n\ntype impl = (value: any, ...args: any[]) => any\n\nconst valueRE = new RegExp(`${lexical.value.source}`, 'g')\n\nexport default class Filter {\n name: string\n impl: impl\n args: string[]\n private static impls: {[key: string]: impl} = {}\n\n constructor (str: string, strictFilters: boolean = false) {\n const match = lexical.filterLine.exec(str)\n assert(match, 'illegal filter: ' + str)\n\n const name = match[1]\n const argList = match[2] || ''\n const impl = Filter.impls[name]\n if (!impl && strictFilters) throw new TypeError(`undefined filter: ${name}`)\n\n this.name = name\n this.impl = impl || (x => x)\n this.args = this.parseArgs(argList)\n }\n parseArgs (argList: string): string[] {\n let match; const args = []\n while ((match = valueRE.exec(argList.trim()))) {\n const v = match[0]\n const re = new RegExp(`${v}\\\\s*:`, 'g')\n const keyMatch = re.exec(match.input)\n const currentMatchIsKey = keyMatch && keyMatch.index === match.index\n currentMatchIsKey ? args.push(`'${v}'`) : args.push(v)\n }\n return args\n }\n render (value: any, scope: Scope): any {\n const args = this.args.map(arg => evalValue(arg, scope))\n args.unshift(value)\n return this.impl.apply(null, args)\n }\n static register (name, filter) {\n Filter.impls[name] = filter\n }\n static clear () {\n Filter.impls = {}\n }\n}\n","import Token from 'src/parser/token'\nimport ITemplate from 'src/template/itemplate'\n\ntype parseToken = (token: Token, remainTokens: Array) => ITemplate\ntype eventHandler = ((arg?: Token | ITemplate) => void)\n\nexport default class ParseStream {\n private tokens: Array\n private handlers: {[key: string]: eventHandler} = {}\n private stopRequested: boolean\n private parseToken: parseToken\n\n constructor (tokens: Array, parseToken: parseToken) {\n this.tokens = tokens\n this.parseToken = parseToken\n }\n on (name: string, cb: eventHandler) {\n this.handlers[name] = cb\n return this\n }\n trigger (event: string, arg?: Token | ITemplate) {\n const h = this.handlers[event]\n if (typeof h === 'function') {\n h(arg)\n return true\n }\n }\n start () {\n this.trigger('start')\n let token\n while (!this.stopRequested && (token = this.tokens.shift())) {\n if (this.trigger('token', token)) continue\n if (token.type === 'tag' &&\n this.trigger(`tag:${token.name}`, token)) {\n continue\n }\n const template = this.parseToken(token, this.tokens)\n this.trigger('template', template)\n }\n if (!this.stopRequested) this.trigger('end')\n return this\n }\n stop () {\n this.stopRequested = true\n return this\n }\n}\n","import { evalExp } from 'src/render/syntax'\nimport * as lexical from 'src/parser/lexical'\nimport assert from 'src/util/assert'\nimport Filter from './filter'\nimport Scope from 'src/scope/scope'\n\nexport default class {\n initial: any\n filters: Array\n constructor (str: string, strictFilters?: boolean) {\n let match = lexical.matchValue(str)\n assert(match, `illegal value string: ${str}`)\n\n const initial = match[0]\n str = str.substr(match.index + match[0].length)\n\n const filters = []\n while ((match = lexical.filter.exec(str))) {\n filters.push([match[0].trim()])\n }\n\n this.initial = initial\n this.filters = filters.map(str => new Filter(str, strictFilters))\n }\n value (scope: Scope) {\n return this.filters.reduce(\n (prev, filter) => filter.render(prev, scope),\n evalExp(this.initial, scope))\n }\n}\n","import Value from './value'\nimport { stringify } from 'src/util/underscore'\nimport Template from 'src/template/template'\nimport ITemplate from 'src/template/itemplate'\nimport Scope from 'src/scope/scope'\nimport OutputToken from 'src/parser/output-token'\n\nexport default class Output extends Template implements ITemplate {\n value: Value\n constructor (token: OutputToken, strictFilters?: boolean) {\n super(token)\n this.value = new Value(token.value, strictFilters)\n }\n async render (scope: Scope): Promise {\n const html = await this.value.value(scope)\n return stringify(html)\n }\n}\n","import Template from 'src/template/template'\nimport ITemplate from 'src/template/itemplate'\nimport Token from 'src/parser/token'\n\nexport default class extends Template implements ITemplate {\n str: string\n constructor (token: Token) {\n super(token)\n this.str = token.value\n }\n async render (): Promise {\n return this.str\n }\n}\n","import { ParseError } from '../util/error'\nimport Liquid from 'src/liquid'\nimport ParseStream from './parse-stream'\nimport Token from './token'\nimport TagToken from './tag-token'\nimport OutputToken from './output-token'\nimport Tag from 'src/template/tag/tag'\nimport Output from 'src/template/output'\nimport HTML from 'src/template/html'\n\nexport default class Parser {\n liquid: Liquid\n\n constructor (liquid: Liquid) {\n this.liquid = liquid\n }\n parse (tokens: Array) {\n let token\n const templates = []\n while ((token = tokens.shift())) {\n templates.push(this.parseToken(token, tokens))\n }\n return templates\n }\n parseToken (token: Token, remainTokens: Array) {\n try {\n if (token.type === 'tag') {\n return new Tag(token as TagToken, remainTokens, this.liquid)\n }\n if (token.type === 'output') {\n return new Output(token as OutputToken, this.liquid.options.strict_filters)\n }\n return new HTML(token)\n } catch (e) {\n throw new ParseError(e, token)\n }\n }\n parseStream (tokens: Array) {\n return new ParseStream(tokens, (token, tokens) => this.parseToken(token, tokens))\n }\n}\n","import assert from 'src/util/assert'\nimport { identifier } from 'src/parser/lexical'\nimport { AssignScope } from 'src/scope/scopes'\n\nconst re = new RegExp(`(${identifier.source})\\\\s*=([^]*)`)\n\nexport default {\n parse: function (token) {\n const match = token.args.match(re)\n assert(match, `illegal token ${token.raw}`)\n this.key = match[1]\n this.value = match[2]\n },\n render: function (scope) {\n const ctx = new AssignScope()\n ctx[this.key] = this.liquid.evalValue(this.value, scope)\n scope.push(ctx)\n return Promise.resolve('')\n }\n}\n","/*\n * Call functions in serial until someone resolved.\n * @param iterable the array to iterate with.\n * @param iteratee returns a new promise.\n * The iteratee is invoked with three arguments: (value, index, iterable).\n */\nexport function anySeries (iterable, iteratee) {\n let ret: Promise = Promise.reject(new Error('init'))\n iterable.forEach(function (item, idx) {\n ret = ret.catch(() => iteratee(item, idx, iterable))\n })\n return ret\n}\n\n/*\n * Call functions in serial until someone rejected.\n * @param {Array} iterable the array to iterate with.\n * @param {Array} iteratee returns a new promise.\n * The iteratee is invoked with three arguments: (value, index, iterable).\n */\nexport function mapSeries (iterable, iteratee) {\n let ret: Promise = Promise.resolve('init')\n const result = []\n iterable.forEach(function (item, idx) {\n ret = ret\n .then(() => iteratee(item, idx, iterable))\n .then(x => result.push(x))\n })\n return ret.then(() => result)\n}\n","import { mapSeries } from 'src/util/promise'\nimport { isString, isObject, isArray } from 'src/util/underscore'\nimport { evalExp } from 'src/render/syntax'\nimport assert from 'src/util/assert'\nimport { identifier, value, hash } from 'src/parser/lexical'\nimport { RenderBreakError } from 'src/util/error'\n\nconst re = new RegExp(`^(${identifier.source})\\\\s+in\\\\s+` +\n `(${value.source})` +\n `(?:\\\\s+${hash.source})*` +\n `(?:\\\\s+(reversed))?` +\n `(?:\\\\s+${hash.source})*$`)\n\nfunction parse (tagToken, remainTokens) {\n const match = re.exec(tagToken.args)\n assert(match, `illegal tag: ${tagToken.raw}`)\n this.variable = match[1]\n this.collection = match[2]\n this.reversed = !!match[3]\n\n this.templates = []\n this.elseTemplates = []\n\n let p\n const stream = this.liquid.parser.parseStream(remainTokens)\n .on('start', () => (p = this.templates))\n .on('tag:else', () => (p = this.elseTemplates))\n .on('tag:endfor', () => stream.stop())\n .on('template', tpl => p.push(tpl))\n .on('end', () => {\n throw new Error(`tag ${tagToken.raw} not closed`)\n })\n\n stream.start()\n}\n\nasync function render (scope, hash) {\n let collection = evalExp(this.collection, scope)\n\n if (!isArray(collection)) {\n if (isString(collection) && collection.length > 0) {\n collection = [collection]\n } else if (isObject(collection)) {\n collection = Object.keys(collection).map((key) => [key, collection[key]])\n }\n }\n if (!isArray(collection) || !collection.length) {\n return this.liquid.renderer.renderTemplates(this.elseTemplates, scope)\n }\n\n const offset = hash.offset || 0\n const limit = (hash.limit === undefined) ? collection.length : hash.limit\n\n collection = collection.slice(offset, offset + limit)\n if (this.reversed) collection.reverse()\n\n const contexts = collection.map((item, i) => {\n const ctx = {}\n ctx[this.variable] = item\n ctx['forloop'] = {\n first: i === 0,\n index: i + 1,\n index0: i,\n last: i === collection.length - 1,\n length: collection.length,\n rindex: collection.length - i,\n rindex0: collection.length - i - 1\n }\n return ctx\n })\n\n let html = ''\n let finished = false\n await mapSeries(contexts, async context => {\n if (finished) return\n\n scope.push(context)\n try {\n html += await this.liquid.renderer.renderTemplates(this.templates, scope)\n } catch (e) {\n if (e instanceof RenderBreakError) {\n html += e.resolvedHTML\n if (e.message === 'break') {\n finished = true\n }\n } else throw e\n }\n scope.pop(context)\n })\n return html\n}\n\nexport default { parse, render }\n","import assert from 'src/util/assert'\nimport { identifier } from 'src/parser/lexical'\nimport { CaptureScope } from 'src/scope/scopes'\nimport TagToken from 'src/parser/tag-token'\nimport Token from 'src/parser/token'\nimport Scope from 'src/scope/scope'\n\nconst re = new RegExp(`(${identifier.source})`)\n\nexport default {\n parse: function (tagToken: TagToken, remainTokens: Token[]) {\n const match = tagToken.args.match(re)\n assert(match, `${tagToken.args} not valid identifier`)\n\n this.variable = match[1]\n this.templates = []\n\n const stream = this.liquid.parser.parseStream(remainTokens)\n stream.on('tag:endcapture', () => stream.stop())\n .on('template', tpl => this.templates.push(tpl))\n .on('end', () => {\n throw new Error(`tag ${tagToken.raw} not closed`)\n })\n stream.start()\n },\n render: async function (scope: Scope) {\n const html = await this.liquid.renderer.renderTemplates(this.templates, scope)\n const ctx = new CaptureScope()\n ctx[this.variable] = html\n scope.push(ctx)\n }\n}\n","import { evalExp } from 'src/render/syntax'\n\nexport default {\n parse: function (tagToken, remainTokens) {\n this.cond = tagToken.args\n this.cases = []\n this.elseTemplates = []\n\n let p = []\n const stream = this.liquid.parser.parseStream(remainTokens)\n .on('tag:when', token => {\n this.cases.push({\n val: token.args,\n templates: p = []\n })\n })\n .on('tag:else', () => (p = this.elseTemplates))\n .on('tag:endcase', () => stream.stop())\n .on('template', tpl => p.push(tpl))\n .on('end', () => {\n throw new Error(`tag ${tagToken.raw} not closed`)\n })\n\n stream.start()\n },\n\n render: function (scope) {\n for (let i = 0; i < this.cases.length; i++) {\n const branch = this.cases[i]\n const val = evalExp(branch.val, scope)\n const cond = evalExp(this.cond, scope)\n if (val === cond) {\n return this.liquid.renderer.renderTemplates(branch.templates, scope)\n }\n }\n return this.liquid.renderer.renderTemplates(this.elseTemplates, scope)\n }\n}\n","export default {\n parse: function (tagToken, remainTokens) {\n const stream = this.liquid.parser.parseStream(remainTokens)\n stream\n .on('token', token => {\n if (token.name === 'endcomment') stream.stop()\n })\n .on('end', () => {\n throw new Error(`tag ${tagToken.raw} not closed`)\n })\n stream.start()\n }\n}\n","import assert from 'src/util/assert'\nimport { value, quotedLine } from 'src/parser/lexical'\nimport { evalValue } from 'src/render/syntax'\nimport BlockMode from 'src/scope/block-mode'\n\nconst staticFileRE = /[^\\s,]+/\nconst withRE = new RegExp(`with\\\\s+(${value.source})`)\n\nexport default {\n parse: function (token) {\n let match = staticFileRE.exec(token.args)\n if (match) {\n this.staticValue = match[0]\n }\n\n match = value.exec(token.args)\n if (match) {\n this.value = match[0]\n }\n\n match = withRE.exec(token.args)\n if (match) {\n this.with = match[1]\n }\n },\n render: async function (scope, hash) {\n let filepath\n if (scope.opts.dynamicPartials) {\n if (quotedLine.exec(this.value)) {\n const template = this.value.slice(1, -1)\n filepath = await this.liquid.parseAndRender(template, scope.getAll(), scope.opts)\n } else {\n filepath = evalValue(this.value, scope)\n }\n } else {\n filepath = this.staticValue\n }\n assert(filepath, `cannot include with empty filename`)\n\n const originBlocks = scope.blocks\n const originBlockMode = scope.blockMode\n\n scope.blocks = {}\n scope.blockMode = BlockMode.OUTPUT\n if (this.with) {\n hash[filepath] = evalValue(this.with, scope)\n }\n const templates = await this.liquid.getTemplate(filepath, scope.opts)\n scope.push(hash)\n const html = await this.liquid.renderer.renderTemplates(templates, scope)\n scope.pop(hash)\n scope.blocks = originBlocks\n scope.blockMode = originBlockMode\n return html\n }\n}\n","import assert from 'src/util/assert'\nimport { identifier } from 'src/parser/lexical'\nimport { CaptureScope, AssignScope, DecrementScope } from 'src/scope/scopes'\nimport TagToken from 'src/parser/tag-token'\nimport Scope from 'src/scope/scope'\n\nexport default {\n parse: function (token: TagToken) {\n const match = token.args.match(identifier)\n assert(match, `illegal identifier ${token.args}`)\n this.variable = match[0]\n },\n render: function (scope: Scope) {\n let context = scope.findContextFor(\n this.variable,\n ctx => {\n return !(ctx instanceof CaptureScope) && !(ctx instanceof AssignScope)\n }\n )\n if (!context) {\n context = new DecrementScope()\n scope.unshift(context)\n }\n if (typeof context[this.variable] !== 'number') {\n context[this.variable] = 0\n }\n return --context[this.variable]\n }\n}\n","import assert from 'src/util/assert'\nimport { value as rValue } from 'src/parser/lexical'\nimport { evalValue } from 'src/render/syntax'\n\nconst groupRE = new RegExp(`^(?:(${rValue.source})\\\\s*:\\\\s*)?(.*)$`)\nconst candidatesRE = new RegExp(rValue.source, 'g')\n\nexport default {\n parse: function (tagToken) {\n let match = groupRE.exec(tagToken.args)\n assert(match, `illegal tag: ${tagToken.raw}`)\n\n this.group = match[1] || ''\n const candidates = match[2]\n\n this.candidates = []\n\n while ((match = candidatesRE.exec(candidates))) {\n this.candidates.push(match[0])\n }\n assert(this.candidates.length, `empty candidates: ${tagToken.raw}`)\n },\n\n render: function (scope) {\n const group = evalValue(this.group, scope)\n const fingerprint = `cycle:${group}:` + this.candidates.join(',')\n\n const groups = scope.opts.groups = scope.opts.groups || {}\n let idx = groups[fingerprint]\n\n if (idx === undefined) {\n idx = groups[fingerprint] = 0\n }\n\n const candidate = this.candidates[idx]\n idx = (idx + 1) % this.candidates.length\n groups[fingerprint] = idx\n\n return evalValue(candidate, scope)\n }\n}\n","import { evalExp, isTruthy } from 'src/render/syntax'\n\nexport default {\n parse: function (tagToken, remainTokens) {\n this.branches = []\n this.elseTemplates = []\n\n let p\n const stream = this.liquid.parser.parseStream(remainTokens)\n .on('start', () => this.branches.push({\n cond: tagToken.args,\n templates: (p = [])\n }))\n .on('tag:elsif', token => {\n this.branches.push({\n cond: token.args,\n templates: p = []\n })\n })\n .on('tag:else', () => (p = this.elseTemplates))\n .on('tag:endif', () => stream.stop())\n .on('template', tpl => p.push(tpl))\n .on('end', () => {\n throw new Error(`tag ${tagToken.raw} not closed`)\n })\n\n stream.start()\n },\n\n render: function (scope) {\n for (const branch of this.branches) {\n const cond = evalExp(branch.cond, scope)\n if (isTruthy(cond)) {\n return this.liquid.renderer.renderTemplates(branch.templates, scope)\n }\n }\n return this.liquid.renderer.renderTemplates(this.elseTemplates, scope)\n }\n}\n","import assert from 'src/util/assert'\nimport { identifier } from 'src/parser/lexical'\nimport { CaptureScope, AssignScope, IncrementScope } from 'src/scope/scopes'\n\nexport default {\n parse: function (token) {\n const match = token.args.match(identifier)\n assert(match, `illegal identifier ${token.args}`)\n this.variable = match[0]\n },\n render: function (scope) {\n let context = scope.findContextFor(\n this.variable,\n ctx => {\n return !(ctx instanceof CaptureScope) && !(ctx instanceof AssignScope)\n }\n )\n if (!context) {\n context = new IncrementScope()\n scope.unshift(context)\n }\n if (typeof context[this.variable] !== 'number') {\n context[this.variable] = 0\n }\n const val = context[this.variable]\n context[this.variable]++\n return val\n }\n}\n","import assert from 'src/util/assert'\nimport { value as rValue } from 'src/parser/lexical'\nimport { evalValue } from 'src/render/syntax'\nimport BlockMode from 'src/scope/block-mode'\n\nconst staticFileRE = /\\S+/\n\nexport default {\n parse: function (token, remainTokens) {\n let match = staticFileRE.exec(token.args)\n if (match) {\n this.staticLayout = match[0]\n }\n\n match = rValue.exec(token.args)\n if (match) {\n this.layout = match[0]\n }\n\n this.tpls = this.liquid.parser.parse(remainTokens)\n },\n render: async function (scope, hash) {\n const layout = scope.opts.dynamicPartials\n ? evalValue(this.layout, scope)\n : this.staticLayout\n assert(layout, `cannot apply layout with empty filename`)\n\n // render the remaining tokens immediately\n scope.blockMode = BlockMode.STORE\n const html = await this.liquid.renderer.renderTemplates(this.tpls, scope)\n if (scope.blocks[''] === undefined) {\n scope.blocks[''] = html\n }\n const templates = await this.liquid.getTemplate(layout, scope.opts)\n scope.push(hash)\n scope.blockMode = BlockMode.OUTPUT\n const partial = await this.liquid.renderer.renderTemplates(templates, scope)\n scope.pop(hash)\n return partial\n }\n}\n","import BlockMode from 'src/scope/block-mode'\n\nexport default {\n parse: function (token, remainTokens) {\n const match = /\\w+/.exec(token.args)\n this.block = match ? match[0] : ''\n\n this.tpls = []\n const stream = this.liquid.parser.parseStream(remainTokens)\n .on('tag:endblock', () => stream.stop())\n .on('template', tpl => this.tpls.push(tpl))\n .on('end', () => {\n throw new Error(`tag ${token.raw} not closed`)\n })\n stream.start()\n },\n render: async function (scope) {\n const childDefined = scope.blocks[this.block]\n const html = childDefined !== undefined\n ? childDefined\n : await this.liquid.renderer.renderTemplates(this.tpls, scope)\n\n if (scope.blockMode === BlockMode.STORE) {\n scope.blocks[this.block] = html\n return ''\n }\n return html\n }\n}\n","export default {\n parse: function (tagToken, remainTokens) {\n this.tokens = []\n\n const stream = this.liquid.parser.parseStream(remainTokens)\n stream\n .on('token', token => {\n if (token.name === 'endraw') stream.stop()\n else this.tokens.push(token)\n })\n .on('end', () => {\n throw new Error(`tag ${tagToken.raw} not closed`)\n })\n stream.start()\n },\n render: function () {\n return this.tokens.map(token => token.raw).join('')\n }\n}\n","import { mapSeries } from 'src/util/promise'\nimport assert from 'src/util/assert'\nimport { evalExp } from 'src/render/syntax'\nimport { identifier, value, hash } from 'src/parser/lexical'\n\nconst re = new RegExp(`^(${identifier.source})\\\\s+in\\\\s+` +\n `(${value.source})` +\n `(?:\\\\s+${hash.source})*$`)\n\nexport default {\n parse: function (tagToken, remainTokens) {\n const match = re.exec(tagToken.args)\n assert(match, `illegal tag: ${tagToken.raw}`)\n\n this.variable = match[1]\n this.collection = match[2]\n this.templates = []\n\n let p\n const stream = this.liquid.parser.parseStream(remainTokens)\n .on('start', () => (p = this.templates))\n .on('tag:endtablerow', () => stream.stop())\n .on('template', tpl => p.push(tpl))\n .on('end', () => {\n throw new Error(`tag ${tagToken.raw} not closed`)\n })\n\n stream.start()\n },\n\n render: async function (scope, hash) {\n let collection = evalExp(this.collection, scope) || []\n const offset = hash.offset || 0\n const limit = (hash.limit === undefined) ? collection.length : hash.limit\n\n collection = collection.slice(offset, offset + limit)\n const cols = hash.cols || collection.length\n const contexts = collection.map(item => {\n const ctx = {}\n ctx[this.variable] = item\n return ctx\n })\n\n let row\n let html = ''\n await mapSeries(contexts, async (context, idx) => {\n row = Math.floor(idx / cols) + 1\n const col = (idx % cols) + 1\n if (col === 1) {\n if (row !== 1) {\n html += ''\n }\n html += ``\n }\n\n html += ``\n scope.push(context)\n html += await this.liquid.renderer.renderTemplates(this.templates, scope)\n html += ''\n scope.pop(context)\n return html\n })\n if (row > 0) {\n html += ''\n }\n return html\n }\n}\n","import assign from './assign'\nimport For from './for'\nimport capture from './capture'\nimport Case from './case'\nimport comment from './comment'\nimport include from './include'\nimport decrement from './decrement'\nimport cycle from './cycle'\nimport If from './if'\nimport increment from './increment'\nimport layout from './layout'\nimport block from './block'\nimport raw from './raw'\nimport tablerow from './tablerow'\nimport unless from './unless'\nimport Break from './break'\nimport Continue from './continue'\nimport ITagImplOptions from 'src/template/tag/itag-impl-options'\n\nconst tags: { [key: string]: ITagImplOptions } = {\n assign, 'for': For, capture, 'case': Case, comment, include, decrement, increment, cycle, 'if': If, layout, block, raw, tablerow, unless, 'break': Break, 'continue': Continue\n}\n\nexport default tags\n","import { evalExp, isFalsy } from 'src/render/syntax'\n\nexport default {\n parse: function (tagToken, remainTokens) {\n this.templates = []\n this.elseTemplates = []\n let p\n const stream = this.liquid.parser.parseStream(remainTokens)\n .on('start', () => {\n p = this.templates\n this.cond = tagToken.args\n })\n .on('tag:else', () => (p = this.elseTemplates))\n .on('tag:endunless', () => stream.stop())\n .on('template', tpl => p.push(tpl))\n .on('end', () => {\n throw new Error(`tag ${tagToken.raw} not closed`)\n })\n\n stream.start()\n },\n\n render: function (scope) {\n const cond = evalExp(this.cond, scope)\n return isFalsy(cond)\n ? this.liquid.renderer.renderTemplates(this.templates, scope)\n : this.liquid.renderer.renderTemplates(this.elseTemplates, scope)\n }\n}\n","import { RenderBreakError } from 'src/util/error'\n\nexport default {\n render: async function () {\n throw new RenderBreakError('break')\n }\n}\n","import { RenderBreakError } from 'src/util/error'\n\nexport default {\n render: async function () {\n throw new RenderBreakError('continue')\n }\n}\n","const escapeMap = {\n '&': '&',\n '<': '<',\n '>': '>',\n '\"': '"',\n \"'\": '''\n}\nconst unescapeMap = {\n '&': '&',\n '<': '<',\n '>': '>',\n '"': '\"',\n ''': \"'\"\n}\n\nfunction escape (str) {\n return String(str).replace(/&|<|>|\"|'/g, m => escapeMap[m])\n}\n\nfunction unescape (str) {\n return String(str).replace(/&(amp|lt|gt|#34|#39);/g, m => unescapeMap[m])\n}\n\nexport default {\n 'escape': escape,\n 'escape_once': str => escape(unescape(str)),\n 'newline_to_br': v => v.replace(/\\n/g, '
'),\n 'strip_html': v => String(v).replace(/|||<.*?>/g, '')\n}\n","export default {\n 'append': (v, arg) => v + arg,\n 'prepend': (v, arg) => arg + v,\n 'capitalize': str => String(str).charAt(0).toUpperCase() + str.slice(1),\n 'concat': (v, arg) => Array.prototype.concat.call(v, arg),\n 'lstrip': v => String(v).replace(/^\\s+/, ''),\n 'downcase': v => v.toLowerCase(),\n 'upcase': str => String(str).toUpperCase(),\n 'remove': (v, arg) => v.split(arg).join(''),\n 'remove_first': (v, l) => v.replace(l, ''),\n 'replace': (v, pattern, replacement) =>\n String(v).split(pattern).join(replacement),\n 'replace_first': (v, arg1, arg2) => String(v).replace(arg1, arg2),\n 'rstrip': str => String(str).replace(/\\s+$/, ''),\n 'split': (v, arg) => String(v).split(arg),\n 'strip': (v) => String(v).trim(),\n 'strip_newlines': v => String(v).replace(/\\n/g, ''),\n 'truncate': (v, l, o) => {\n v = String(v)\n o = (o === undefined) ? '...' : o\n l = l || 16\n if (v.length <= l) return v\n return v.substr(0, l - o.length) + o\n },\n 'truncatewords': (v, l, o) => {\n if (o === undefined) o = '...'\n const arr = v.split(' ')\n let ret = arr.slice(0, l).join(' ')\n if (arr.length > l) ret += o\n return ret\n }\n}\n","export default {\n 'abs': v => Math.abs(v),\n 'ceil': v => Math.ceil(v),\n 'divided_by': (v, arg) => v / arg,\n 'floor': v => Math.floor(v),\n 'minus': bindFixed((v, arg) => v - arg),\n 'modulo': bindFixed((v, arg) => v % arg),\n 'round': (v, arg) => {\n const amp = Math.pow(10, arg || 0)\n return Math.round(v * amp) / amp\n },\n 'plus': bindFixed((v, arg) => Number(v) + Number(arg)),\n 'times': (v, arg) => v * arg\n}\n\nfunction getFixed (v) {\n const p = String(v).split('.')\n return (p.length > 1) ? p[1].length : 0\n}\n\nfunction bindFixed (cb) {\n return (l, r) => {\n const f = Math.max(getFixed(l), getFixed(r))\n return cb(l, r).toFixed(f)\n }\n}\n","export default {\n 'url_decode': x => x.split('+').map(decodeURIComponent).join(' '),\n 'url_encode': x => x.split(' ').map(encodeURIComponent).join('+')\n}\n","import { last } from 'src/util/underscore'\n\nexport default {\n 'join': (v, arg) => v.join(arg === undefined ? ' ' : arg),\n 'last': v => last(v),\n 'first': v => v[0],\n 'map': (arr, arg) => arr.map(v => v[arg]),\n 'reverse': v => v.reverse(),\n 'sort': (v, arg) => v.sort(arg),\n 'size': v => v.length,\n 'slice': (v, begin, length) => {\n if (length === undefined) length = 1\n return v.slice(begin, begin + length)\n },\n 'uniq': function (arr) {\n const u = {}\n return (arr || []).filter(val => {\n if (u.hasOwnProperty(val)) {\n return false\n }\n u[val] = true\n return true\n })\n }\n}\n","import { padStart } from './underscore'\n\nconst monthNames = [\n 'January', 'February', 'March', 'April', 'May', 'June', 'July', 'August',\n 'September', 'October', 'November', 'December'\n]\nconst dayNames = [\n 'Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'\n]\nconst monthNamesShort = monthNames.map(abbr)\nconst dayNamesShort = dayNames.map(abbr)\nconst suffixes = {\n 1: 'st',\n 2: 'nd',\n 3: 'rd',\n 'default': 'th'\n}\n\nfunction abbr (str) {\n return str.slice(0, 3)\n}\n\n// prototype extensions\nconst _date = {\n daysInMonth: function (d) {\n const feb = _date.isLeapYear(d) ? 29 : 28\n return [31, feb, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]\n },\n\n getDayOfYear: function (d) {\n let num = 0\n for (let i = 0; i < d.getMonth(); ++i) {\n num += _date.daysInMonth(d)[i]\n }\n return num + d.getDate()\n },\n\n getWeekOfYear: function (d, startDay) {\n // Skip to startDay of this week\n const now = this.getDayOfYear(d) + (startDay - d.getDay())\n // Find the first startDay of the year\n const jan1 = new Date(d.getFullYear(), 0, 1)\n const then = (7 - jan1.getDay() + startDay)\n return padStart(String(Math.floor((now - then) / 7) + 1), 2, '0')\n },\n\n isLeapYear: function (d) {\n const year = d.getFullYear()\n return !!((year & 3) === 0 && (year % 100 || (year % 400 === 0 && year)))\n },\n\n getSuffix: function (d) {\n const str = d.getDate().toString()\n const index = parseInt(str.slice(-1))\n return suffixes[index] || suffixes['default']\n },\n\n century: function (d) {\n return parseInt(d.getFullYear().toString().substring(0, 2), 10)\n }\n}\n\nconst formatCodes = {\n a: function (d) {\n return dayNamesShort[d.getDay()]\n },\n A: function (d) {\n return dayNames[d.getDay()]\n },\n b: function (d) {\n return monthNamesShort[d.getMonth()]\n },\n B: function (d) {\n return monthNames[d.getMonth()]\n },\n c: function (d) {\n return d.toLocaleString()\n },\n C: function (d) {\n return _date.century(d)\n },\n d: function (d) {\n return padStart(d.getDate(), 2, '0')\n },\n e: function (d) {\n return padStart(d.getDate(), 2)\n },\n H: function (d) {\n return padStart(d.getHours(), 2, '0')\n },\n I: function (d) {\n return padStart(String(d.getHours() % 12 || 12), 2, '0')\n },\n j: function (d) {\n return padStart(_date.getDayOfYear(d), 3, '0')\n },\n k: function (d) {\n return padStart(d.getHours(), 2)\n },\n l: function (d) {\n return padStart(String(d.getHours() % 12 || 12), 2)\n },\n L: function (d) {\n return padStart(d.getMilliseconds(), 3, '0')\n },\n m: function (d) {\n return padStart(d.getMonth() + 1, 2, '0')\n },\n M: function (d) {\n return padStart(d.getMinutes(), 2, '0')\n },\n p: function (d) {\n return (d.getHours() < 12 ? 'AM' : 'PM')\n },\n P: function (d) {\n return (d.getHours() < 12 ? 'am' : 'pm')\n },\n q: function (d) {\n return _date.getSuffix(d)\n },\n s: function (d) {\n return Math.round(d.valueOf() / 1000)\n },\n S: function (d) {\n return padStart(d.getSeconds(), 2, '0')\n },\n u: function (d) {\n return d.getDay() || 7\n },\n U: function (d) {\n return _date.getWeekOfYear(d, 0)\n },\n w: function (d) {\n return d.getDay()\n },\n W: function (d) {\n return _date.getWeekOfYear(d, 1)\n },\n x: function (d) {\n return d.toLocaleDateString()\n },\n X: function (d) {\n return d.toLocaleTimeString()\n },\n y: function (d) {\n return d.getFullYear().toString().substring(2, 4)\n },\n Y: function (d) {\n return d.getFullYear()\n },\n z: function (d) {\n const tz = d.getTimezoneOffset() / 60 * 100\n return (tz > 0 ? '-' : '+') + padStart(String(Math.abs(tz)), 4, '0')\n },\n '%': function () {\n return '%'\n }\n};\n(formatCodes as any).h = formatCodes.b;\n(formatCodes as any).N = formatCodes.L\n\nexport default function (d, format) {\n let output = ''\n let remaining = format\n\n while (true) {\n const r = /%./g\n const results = r.exec(remaining)\n\n // No more format codes. Add the remaining text and return\n if (!results) {\n return output + remaining\n }\n\n // Add the preceding text\n output += remaining.slice(0, r.lastIndex - 2)\n remaining = remaining.slice(r.lastIndex)\n\n // Add the format code\n const ch = results[0].charAt(1)\n const func = formatCodes[ch]\n output += func ? func.call(this, d) : '%' + ch\n }\n}\n","import html from './html'\nimport str from './string'\nimport math from './math'\nimport url from './url'\nimport array from './array'\nimport date from './date'\nimport obj from './object'\n\nexport default { ...html, ...str, ...math, ...url, ...date, ...obj, ...array }\n","import strftime from 'src/util/strftime'\nimport { isString } from 'src/util/underscore'\n\nexport default {\n 'date': (v, arg) => {\n let date = v\n if (v === 'now') {\n date = new Date()\n } else if (isString(v)) {\n date = new Date(v)\n }\n return isValidDate(date) ? strftime(date, arg) : v\n }\n}\n\nfunction isValidDate (date) {\n return date instanceof Date && !isNaN(date.getTime())\n}\n","import { isTruthy } from 'src/render/syntax'\n\nexport default {\n 'default': (v, arg) => isTruthy(v) ? v : arg\n}\n","import Scope from './scope/scope'\nimport * as Types from './types'\nimport fs from 'src/fs'\nimport * as _ from './util/underscore'\nimport ITemplate from './template/itemplate'\nimport Tokenizer from './parser/tokenizer'\nimport Render from './render/render'\nimport Tag from './template/tag/tag'\nimport Filter from './template/filter'\nimport Parser from './parser/parser'\nimport ITagImplOptions from './template/tag/itag-impl-options'\nimport Value from './template/value'\nimport { isTruthy, isFalsy, evalExp, evalValue } from './render/syntax'\nimport builtinTags from './builtin/tags'\nimport builtinFilters from './builtin/filters'\nimport { LiquidOptions, NormalizedFullOptions, applyDefault, normalize } from './liquid-options'\n\nexport default class Liquid {\n public options: NormalizedFullOptions\n private cache: object\n private parser: Parser\n private renderer: Render\n private tokenizer: Tokenizer\n\n constructor (opts: LiquidOptions = {}) {\n this.options = applyDefault(normalize(opts))\n if (this.options.cache) {\n this.cache = {}\n }\n this.parser = new Parser(this)\n this.renderer = new Render()\n this.tokenizer = new Tokenizer(this.options)\n\n _.forOwn(builtinTags, (conf, name) => this.registerTag(name, conf))\n _.forOwn(builtinFilters, (handler, name) => this.registerFilter(name, handler))\n }\n parse (html: string, filepath?: string) {\n const tokens = this.tokenizer.tokenize(html, filepath)\n return this.parser.parse(tokens)\n }\n render (tpl: Array, ctx?: object, opts?: LiquidOptions) {\n const options = { ...this.options, ...normalize(opts) }\n const scope = new Scope(ctx, options)\n return this.renderer.renderTemplates(tpl, scope)\n }\n async parseAndRender (html: string, ctx?: object, opts?: LiquidOptions) {\n const tpl = await this.parse(html)\n return this.render(tpl, ctx, opts)\n }\n async getTemplate (file, opts?: LiquidOptions) {\n const options = normalize(opts)\n const roots = options.root ? [...options.root, ...this.options.root] : this.options.root\n const paths = roots.map(root => fs.resolve(root, file, this.options.extname))\n\n for (const filepath of paths) {\n if (!(await fs.exists(filepath))) continue\n\n if (this.options.cache && this.cache[filepath]) return this.cache[filepath]\n const value = this.parse(await fs.readFile(filepath), filepath)\n if (this.options.cache) this.cache[filepath] = value\n return value\n }\n\n const err = new Error('ENOENT') as any\n err.message = `ENOENT: Failed to lookup \"${file}\" in \"${roots}\"`\n err.code = 'ENOENT'\n throw err\n }\n async renderFile (file, ctx?: object, opts?: LiquidOptions) {\n const options = normalize(opts)\n const templates = await this.getTemplate(file, options)\n return this.render(templates, ctx, opts)\n }\n evalValue (str: string, scope: Scope) {\n return new Value(str, this.options.strict_filters).value(scope)\n }\n registerFilter (name, filter) {\n return Filter.register(name, filter)\n }\n registerTag (name: string, tag: ITagImplOptions) {\n return Tag.register(name, tag)\n }\n plugin (plugin) {\n return plugin.call(this, Liquid)\n }\n express () {\n const self = this\n return function (filePath: string, ctx: object, cb: (err: Error, html?: string) => void) {\n const opts = { root: this.root }\n self.renderFile(filePath, ctx, opts).then(html => cb(null, html), cb)\n }\n }\n static default = Liquid\n static isTruthy = isTruthy\n static isFalsy = isFalsy\n static evalExp = evalExp\n static evalValue = evalValue\n static Types = Types\n}\n"],"names":["toStr","Object","prototype","toString","arrToStr","Array","isString","value","call","isFunction","stringify","isNil","to_liquid","toLiquid","to_s","indexOf","cache","JSON","key","isObject","push","create","proto","isArray","forOwn","object","iteratee","k","hasOwnProperty","last","arr","length","type","padStart","str","ch","n","String","quoted","RegExp","source","quoteBalanced","number","bool","identifier","subscript","literal","variable","rangeLimit","range","rangeCapture","hash","hashCapture","tagLine","literalLine","variableLine","numberLine","boolLine","quotedLine","rangeLine","integerLine","valueDeclaration","valueList","filter","filterCapture","filterLine","operators","captureStack","Error","captureStackTrace","this","constructor","err","token","input","file","originalError","LiquidError","obj","name","targetLine","lines","begin","end","context","line","split","Math","max","min","start","stop","step","arguments","i","_\r\n .range","map","lineNumber","indicator","num","_.padStart","text","join","message","msg","col","mkMessage","stack","_super","_this","tslib_1.__extends","TokenizationError","_.create","ParseError","tpl","RenderError","RenderBreakError","predicate","AssertionError","BlockMode","defaultOptions","root","extname","dynamicPartials","trim_tag_right","trim_tag_left","trim_output_right","trim_output_left","greedy","tag_delimiter_left","tag_delimiter_right","output_delimiter_left","output_delimiter_right","strict_filters","strict_variables","normalize","options","_.isArray","_.isString","applyDefault","ctx","opts","OUTPUT","contexts","Scope","reduce","val","_i","srcs","forEach","src","target","binaryAssign","_.assign","path","paths","propertyAccessSeq","scope","findContextFor","_.last","readProperty","v","some","_.isObject","undefined","unshift","pop","findIndex","TypeError","splice","candidate","_.isNil","_.isFunction","size","liquid_method_missing","j","seq","delemiter","test","assert","slice","matchRightBracket","get","readFile","url","Promise","resolve","reject","xhr","XMLHttpRequest","onload","status","responseText","statusText","onerror","open","send","filepath","ext","base","document","createElement","href","head","getElementsByTagName","insertBefore","firstChild","a","resolved","removeChild","domResolve","replace","origin","exists","ParseState","raw","Token","pos","trimLeft","trimRight","trim","match","lexical.tagLine","args","DelimitedToken","Tokenizer","tokens","tagL","tagR","outputL","outputR","p","curLine","state","HTML","buffer","lineBegin","substr","HTMLToken","TAG","OutputToken","TagToken","inRaw","rLeft","rRight","whiteSpaceCtrl","t","Render","templates","html","templates_1","_a","render","_b","e_1","resolvedHTML","==","l","r","!=",">","<",">=","<=","contains","and","isTruthy","or","evalExp","exp","operatorREs","lexical.operators","operatorRE","expRE","lexical.quoteBalanced","op","lexical.rangeLine","low","evalValue","high","res","Number","toLowerCase","lexical.parseLiteral","isFalsy","markup","lastIndex","exec","liquid","impl","Tag","impls","parse","Hash","tag","Template","valueRE","lexical.value","strictFilters","lexical.filterLine","argList","Filter","x","parseArgs","keyMatch","index","arg","apply","parseToken","ParseStream","cb","handlers","event","h","trigger","stopRequested","shift","template","initial","filters","lexical.filter","default_1","prev","Value","Output","Parser","remainTokens","e","re","AssignScope","mapSeries","iterable","ret","result","item","idx","then","tagToken","collection","reversed","elseTemplates","stream","parser","parseStream","on","keys","offset","limit","reverse","first","index0","rindex","rindex0","finished","renderer","renderTemplates","CaptureScope","cond","cases","branch","staticFileRE","withRE","staticValue","with","parseAndRender","getAll","originBlocks","blocks","originBlockMode","blockMode","getTemplate","DecrementScope","groupRE","rValue","candidatesRE","group","candidates","fingerprint","groups","branches","IncrementScope","staticLayout","layout","tpls","STORE","partial","block","childDefined","tags","assign","for","For","capture","case","Case","comment","include","decrement","increment","cycle","if","If","tablerow","cols","row","floor","unless","break","continue","escapeMap","&","\"","'","unescapeMap","&","<",">",""","'","escape","m","escape_once","newline_to_br","strip_html","append","prepend","capitalize","charAt","toUpperCase","concat","lstrip","downcase","upcase","remove","remove_first","pattern","replacement","replace_first","arg1","arg2","rstrip","strip","strip_newlines","truncate","o","truncatewords","abs","ceil","divided_by","minus","bindFixed","modulo","round","amp","pow","plus","times","getFixed","f","toFixed","url_decode","decodeURIComponent","url_encode","encodeURIComponent","sort","uniq","u","monthNames","dayNames","monthNamesShort","abbr","dayNamesShort","suffixes","1","2","3","default","_date","daysInMonth","d","isLeapYear","getDayOfYear","getMonth","getDate","getWeekOfYear","startDay","now","getDay","Date","getFullYear","year","getSuffix","parseInt","century","substring","formatCodes","A","b","B","c","toLocaleString","C","H","getHours","I","L","getMilliseconds","M","getMinutes","P","q","s","valueOf","S","getSeconds","U","w","W","toLocaleDateString","X","toLocaleTimeString","y","Y","z","tz","getTimezoneOffset","%","N","math","date","isNaN","getTime","format","output","remaining","results","func","strftime","array","tokenizer","_.forOwn","builtinTags","conf","registerTag","builtinFilters","handler","registerFilter","Liquid","tokenize","roots","fs","paths_1","code","register","plugin","self","filePath","renderFile","Types"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"liquid.min.js","sources":["../src/util/underscore.ts","../src/parser/lexical.ts","../src/util/error.ts","../src/util/assert.ts","../src/liquid-options.ts","../src/scope/block-mode.ts","../src/scope/scope.ts","../src/scope/scopes.ts","../src/fs/browser.ts","../src/parser/token.ts","../src/parser/tokenizer.ts","../src/parser/html-token.ts","../src/parser/delimited-token.ts","../src/parser/tag-token.ts","../src/parser/output-token.ts","../src/parser/whitespace-ctrl.ts","../src/render/render.ts","../src/render/syntax.ts","../src/template/tag/hash.ts","../src/template/template.ts","../src/template/tag/tag.ts","../src/template/filter/filter.ts","../src/parser/parse-stream.ts","../src/template/value.ts","../src/template/output.ts","../src/template/html.ts","../src/parser/parser.ts","../src/builtin/tags/assign.ts","../src/util/promise.ts","../src/builtin/tags/for.ts","../src/builtin/tags/capture.ts","../src/builtin/tags/case.ts","../src/builtin/tags/comment.ts","../src/builtin/tags/include.ts","../src/builtin/tags/decrement.ts","../src/builtin/tags/cycle.ts","../src/builtin/tags/if.ts","../src/builtin/tags/increment.ts","../src/builtin/tags/layout.ts","../src/builtin/tags/block.ts","../src/builtin/tags/raw.ts","../src/builtin/tags/tablerow.ts","../src/builtin/tags/index.ts","../src/builtin/tags/unless.ts","../src/builtin/tags/break.ts","../src/builtin/tags/continue.ts","../src/builtin/filters/html.ts","../src/builtin/filters/string.ts","../src/builtin/filters/math.ts","../src/builtin/filters/url.ts","../src/builtin/filters/array.ts","../src/util/strftime.ts","../src/builtin/filters/index.ts","../src/builtin/filters/date.ts","../src/builtin/filters/object.ts","../src/liquid.ts"],"sourcesContent":["const toStr = Object.prototype.toString\nconst arrToStr = Array.prototype.toString\n\n/*\n * Checks if value is classified as a String primitive or object.\n * @param {any} value The value to check.\n * @return {Boolean} Returns true if value is a string, else false.\n */\nexport function isString (value: any) {\n return toStr.call(value) === '[object String]'\n}\n\nexport function isFunction (value: any) {\n return typeof value === 'function'\n}\n\nexport function promisify (fn: (arg1: T1, cb: (err: Error | null, result: T2) => void) => void): (arg1: T1) => Promise;\nexport function promisify (fn: (arg1: T1, arg2: T2, cb: (err: Error | null, result: T3) => void) => void):(arg1: T1, arg2: T2) => Promise;\nexport function promisify (fn: any) {\n return function (...args: any[]) {\n return new Promise((resolve, reject) => {\n fn(...args, (err: Error, result: any) => {\n err ? reject(err) : resolve(result)\n })\n })\n }\n}\n\nexport function stringify (value: any): string {\n if (isNil(value)) return ''\n if (isFunction(value.to_liquid)) return stringify(value.to_liquid())\n if (isFunction(value.toLiquid)) return stringify(value.toLiquid())\n if (isFunction(value.to_s)) return value.to_s()\n if ([toStr, arrToStr].indexOf(value.toString) > -1) return defaultToString(value)\n if (isFunction(value.toString)) return value.toString()\n return toStr.call(value)\n}\n\nfunction defaultToString (value: any): string {\n const cache: string[] = []\n return JSON.stringify(value, (key, value) => {\n if (isObject(value)) {\n if (cache.indexOf(value) !== -1) {\n return\n }\n cache.push(value)\n }\n return value\n })\n}\n\nexport function create (proto: T1): T2 {\n return Object.create(proto)\n}\n\nexport function isNil (value: any): boolean {\n return value === null || value === undefined\n}\n\nexport function isArray (value: any): boolean {\n // be compatible with IE 8\n return toStr.call(value) === '[object Array]'\n}\n\nexport function isError (value: any): boolean {\n const signature = toStr.call(value)\n // [object XXXError]\n return signature.substr(-6, 5) === 'Error' ||\n (typeof value.message === 'string' && typeof value.name === 'string')\n}\n\n/*\n * Iterates over own enumerable string keyed properties of an object and invokes iteratee for each property.\n * The iteratee is invoked with three arguments: (value, key, object).\n * Iteratee functions may exit iteration early by explicitly returning false.\n * @param {Object} object The object to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @return {Object} Returns object.\n */\nexport function forOwn (\n object: {[key: string]: T} | undefined,\n iteratee: ((val: T, key: string, obj: {[key: string]: T}) => boolean | void)\n) {\n object = object || {}\n for (const k in object) {\n if (object.hasOwnProperty(k)) {\n if (iteratee(object[k], k, object) === false) break\n }\n }\n return object\n}\n\nexport function last (arr: T[]): T;\nexport function last (arr: string): string;\nexport function last (arr: any[] | string): any | string {\n return arr[arr.length - 1]\n}\n\n/*\n * Checks if value is the language type of Object.\n * (e.g. arrays, functions, objects, regexes, new Number(0), and new String(''))\n * @param {any} value The value to check.\n * @return {Boolean} Returns true if value is an object, else false.\n */\nexport function isObject (value: any): boolean {\n const type = typeof value\n return value !== null && (type === 'object' || type === 'function')\n}\n\n/*\n * A function to create flexibly-numbered lists of integers,\n * handy for each and map loops. start, if omitted, defaults to 0; step defaults to 1.\n * Returns a list of integers from start (inclusive) to stop (exclusive),\n * incremented (or decremented) by step, exclusive.\n * Note that ranges that stop before they start are considered to be zero-length instead of\n * negative — if you'd like a negative range, use a negative step.\n */\nexport function range (start: number, stop?: number, step?: number) {\n if (stop === undefined) {\n stop = start\n start = 0\n }\n step = step || 1\n\n const arr: number[] = []\n for (let i = start; i < stop; i += step) {\n arr.push(i)\n }\n return arr\n}\n\nexport function padStart (str: any, length: number, ch: string = ' ') {\n str = String(str)\n let n = length - str.length\n while (n-- > 0) str = ch + str\n return str\n}\n","// quote related\nconst singleQuoted = /'[^']*'/\nconst doubleQuoted = /\"[^\"]*\"/\nexport const quoted = new RegExp(`${singleQuoted.source}|${doubleQuoted.source}`)\nexport const quoteBalanced = new RegExp(`(?:${quoted.source}|[^'\"])*`)\n\n// basic types\nexport const integer = /-?\\d+/\nexport const number = /[+-]?(?:\\d+\\.?\\d*|\\.?\\d+)/\nexport const bool = /true|false/\n\n// property access\nexport const identifier = /[\\w-]+[?]?/\nexport const subscript = new RegExp(`\\\\[(?:${quoted.source}|[\\\\w-\\\\.]+)\\\\]`)\nexport const literal = new RegExp(`(?:${quoted.source}|${bool.source}|${number.source})`)\nexport const variable = new RegExp(`${identifier.source}(?:\\\\.${identifier.source}|${subscript.source})*`)\n\n// range related\nexport const rangeLimit = new RegExp(`(?:${variable.source}|${number.source})`)\nexport const range = new RegExp(`\\\\(${rangeLimit.source}\\\\.\\\\.${rangeLimit.source}\\\\)`)\nexport const rangeCapture = new RegExp(`\\\\((${rangeLimit.source})\\\\.\\\\.(${rangeLimit.source})\\\\)`)\n\nexport const value = new RegExp(`(?:${variable.source}|${literal.source}|${range.source})`)\n\n// hash related\nexport const hash = new RegExp(`(?:${identifier.source})\\\\s*:\\\\s*(?:${value.source})`)\nexport const hashCapture = new RegExp(`(${identifier.source})\\\\s*:\\\\s*(${value.source})`, 'g')\n\n// full match\nexport const tagLine = new RegExp(`^\\\\s*(${identifier.source})\\\\s*([\\\\s\\\\S]*?)\\\\s*$`)\nexport const literalLine = new RegExp(`^${literal.source}$`, 'i')\nexport const variableLine = new RegExp(`^${variable.source}$`)\nexport const numberLine = new RegExp(`^${number.source}$`)\nexport const boolLine = new RegExp(`^${bool.source}$`, 'i')\nexport const quotedLine = new RegExp(`^${quoted.source}$`)\nexport const rangeLine = new RegExp(`^${rangeCapture.source}$`)\nexport const integerLine = new RegExp(`^${integer.source}$`)\n\n// filter related\nexport const valueDeclaration = new RegExp(`(?:${identifier.source}\\\\s*:\\\\s*)?${value.source}`)\nexport const valueList = new RegExp(`${valueDeclaration.source}(\\\\s*,\\\\s*${valueDeclaration.source})*`)\nexport const filter = new RegExp(`${identifier.source}(?:\\\\s*:\\\\s*${valueList.source})?`, 'g')\nexport const filterCapture = new RegExp(`(${identifier.source})(?:\\\\s*:\\\\s*(${valueList.source}))?`)\nexport const filterLine = new RegExp(`^${filterCapture.source}$`)\n\nexport const operators = [\n /\\s+or\\s+/,\n /\\s+and\\s+/,\n /==|!=|<=|>=|<|>|\\s+contains\\s+/\n]\n\nexport function isInteger (str: string) {\n return integerLine.test(str)\n}\n\nexport function isLiteral (str: string) {\n return literalLine.test(str)\n}\n\nexport function isRange (str: string) {\n return rangeLine.test(str)\n}\n\nexport function isVariable (str: string) {\n return variableLine.test(str)\n}\n\nexport function matchValue (str: string) {\n return value.exec(str)\n}\n\nexport function parseLiteral (str: string) {\n let res = str.match(numberLine)\n if (res) {\n return Number(str)\n }\n res = str.match(boolLine)\n if (res) {\n return str.toLowerCase() === 'true'\n }\n res = str.match(quotedLine)\n if (res) {\n return str.slice(1, -1)\n }\n throw new TypeError(`cannot parse '${str}' as literal`)\n}\n","import * as _ from './underscore'\nimport Token from 'src/parser/token'\nimport ITemplate from 'src/template/itemplate'\n\nabstract class LiquidError extends Error {\n private token: Token\n private originalError: Error\n constructor (err: Error, token: Token) {\n super(err.message)\n this.originalError = err\n this.token = token\n }\n protected update () {\n const err = this.originalError\n const context = mkContext(this.token)\n this.message = mkMessage(err.message, this.token)\n this.stack = this.message + '\\n' + context +\n '\\n' + this.stack + '\\nFrom ' + err.stack\n }\n}\n\nexport class TokenizationError extends LiquidError {\n constructor (message: string, token: Token) {\n super(new Error(message), token)\n this.name = 'TokenizationError'\n super.update()\n }\n}\n\nexport class ParseError extends LiquidError {\n constructor (err: Error, token: Token) {\n super(err, token)\n this.name = 'ParseError'\n this.message = err.message\n super.update()\n }\n}\n\nexport class RenderError extends LiquidError {\n constructor (err: Error, tpl: ITemplate) {\n super(err, tpl.token)\n this.name = 'RenderError'\n this.message = err.message\n super.update()\n }\n}\n\nexport class RenderBreakError extends Error {\n resolvedHTML: string = ''\n constructor (message: string) {\n super(message)\n this.name = 'RenderBreakError'\n this.message = message + ''\n }\n}\n\nexport class AssertionError extends Error {\n constructor (message: string) {\n super(message)\n this.name = 'AssertionError'\n this.message = message + ''\n }\n}\n\nfunction mkContext (token: Token) {\n const lines = token.input.split('\\n')\n const begin = Math.max(token.line - 2, 1)\n const end = Math.min(token.line + 3, lines.length)\n\n const context = _\n .range(begin, end + 1)\n .map(lineNumber => {\n const indicator = (lineNumber === token.line) ? '>> ' : ' '\n const num = _.padStart(String(lineNumber), String(end).length)\n const text = lines[lineNumber - 1]\n return `${indicator}${num}| ${text}`\n })\n .join('\\n')\n\n return context\n}\n\nfunction mkMessage (msg: string, token: Token) {\n if (token.file) msg += `, file:${token.file}`\n msg += `, line:${token.line}, col:${token.col}`\n return msg\n}\n","import { AssertionError } from './error'\n\nexport default function (predicate: any, message?: string) {\n if (!predicate) {\n message = message || `expect ${predicate} to be true`\n throw new AssertionError(message)\n }\n}\n","/* eslint-disable camelcase */\n\nimport * as _ from './util/underscore'\n\nexport interface LiquidOptions {\n /** `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 `[\".\"]` */\n root?: string | string[]\n /** `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 `\"\"`. */\n extname?: string\n /** `cache` indicates whether or not to cache resolved templates. Defaults to `false`. */\n cache?: boolean\n /** `dynamicPartials`: if set, treat `` parameter in `{%include filepath %}`, `{%layout filepath%}` as a variable, otherwise as a literal value. Defaults to `true`. */\n dynamicPartials?: boolean\n /** `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`. */\n strict_filters?: boolean\n /** `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`. */\n strict_variables?: boolean\n /** `trim_tag_right` is used to strip blank characters (including ` `, `\\t`, and `\\r`) from the right of tags (`{% %}`) until `\\n` (inclusive). Defaults to `false`. */\n trim_tag_right?: boolean\n /** `trim_tag_left` is similar to `trim_tag_right`, whereas the `\\n` is exclusive. Defaults to `false`. See Whitespace Control for details. */\n trim_tag_left?: boolean\n /** ``trim_output_right` is used to strip blank characters (including ` `, `\\t`, and `\\r`) from the right of values (`{{ }}`) until `\\n` (inclusive). Defaults to `false`. */\n trim_output_right?: boolean\n /** `trim_output_left` is similar to `trim_output_right`, whereas the `\\n` is exclusive. Defaults to `false`. See Whitespace Control for details. */\n trim_output_left?: boolean\n /** `tag_delimiter_left` and `tag_delimiter_right` are used to override the delimiter for liquid tags **/\n tag_delimiter_left?: string,\n tag_delimiter_right?: string,\n /** `output_delimiter_left` and `output_delimiter_right` are used to override the delimiter for liquid outputs **/\n output_delimiter_left?: string,\n output_delimiter_right?: string,\n /** `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`. */\n greedy?: boolean\n}\n\nexport interface NormalizedOptions extends LiquidOptions {\n root?: string[]\n}\n\nexport interface NormalizedFullOptions extends NormalizedOptions {\n root: string[]\n extname: string\n cache: boolean\n dynamicPartials: boolean\n strict_filters: boolean\n strict_variables: boolean\n trim_tag_right: boolean\n trim_tag_left: boolean\n trim_output_right: boolean\n trim_output_left: boolean\n tag_delimiter_left: string,\n tag_delimiter_right: string,\n output_delimiter_left: string,\n output_delimiter_right: string,\n greedy: boolean\n}\n\nconst defaultOptions: NormalizedFullOptions = {\n root: ['.'],\n cache: false,\n extname: '',\n dynamicPartials: true,\n trim_tag_right: false,\n trim_tag_left: false,\n trim_output_right: false,\n trim_output_left: false,\n greedy: true,\n tag_delimiter_left: '{%',\n tag_delimiter_right: '%}',\n output_delimiter_left: '{{',\n output_delimiter_right: '}}',\n strict_filters: false,\n strict_variables: false\n}\n\nexport function normalize (options?: LiquidOptions): NormalizedOptions {\n options = options || {}\n if (options.hasOwnProperty('root')) {\n options.root = normalizeStringArray(options.root)\n }\n return options as NormalizedOptions\n}\n\nexport function applyDefault (options?: NormalizedOptions): NormalizedFullOptions {\n return { ...defaultOptions, ...options }\n}\n\nfunction normalizeStringArray (value: any): string[] {\n if (_.isArray(value)) return value as string[]\n if (_.isString(value)) return [value as string]\n return []\n}\n","enum BlockMode {\n /* store rendered html into blocks */\n OUTPUT,\n /* output rendered html directly */\n STORE\n}\n\nexport default BlockMode\n","import * as _ from '../util/underscore'\nimport { __assign } from 'tslib'\nimport * as lexical from '../parser/lexical'\nimport assert from '../util/assert'\nimport { NormalizedFullOptions, applyDefault } from '../liquid-options'\nimport BlockMode from './block-mode'\nimport IContext from './icontext'\n\nexport default class Scope {\n opts: NormalizedFullOptions\n contexts: Array\n blocks: object = {}\n groups: {[key: string]: number} = {}\n blockMode: BlockMode = BlockMode.OUTPUT\n constructor (ctx: object = {}, opts?: NormalizedFullOptions) {\n this.opts = applyDefault(opts)\n this.contexts = [ctx || {}]\n }\n getAll () {\n return this.contexts.reduce((ctx, val) => __assign(ctx, val), {})\n }\n get (path: string): any {\n const paths = this.propertyAccessSeq(path)\n const scope = this.findContextFor(paths[0]) || _.last(this.contexts)\n return paths.reduce((value, key) => this.readProperty(value, key), scope)\n }\n set (path: string, v: any): void {\n const paths = this.propertyAccessSeq(path)\n let scope = this.findContextFor(paths[0]) || _.last(this.contexts)\n paths.some((key, i) => {\n if (!_.isObject(scope)) {\n return true\n }\n if (i === paths.length - 1) {\n scope[key] = v\n return true\n }\n if (undefined === scope[key]) {\n scope[key] = {}\n }\n scope = scope[key]\n return false\n })\n }\n unshift (ctx: object) {\n return this.contexts.unshift(ctx)\n }\n push (ctx: object) {\n return this.contexts.push(ctx)\n }\n pop (ctx?: object): object | undefined {\n if (!arguments.length) {\n return this.contexts.pop()\n }\n const i = this.contexts.findIndex(scope => scope === ctx)\n if (i === -1) {\n throw new TypeError('scope not found, cannot pop')\n }\n return this.contexts.splice(i, 1)[0]\n }\n findContextFor (key: string, filter: ((conttext: object) => boolean) = () => true) {\n for (let i = this.contexts.length - 1; i >= 0; i--) {\n const candidate = this.contexts[i]\n if (!filter(candidate)) continue\n if (key in candidate) {\n return candidate\n }\n }\n return null\n }\n private readProperty (obj: IContext, key: string) {\n let val\n if (_.isNil(obj)) {\n val = undefined\n } else {\n obj = toLiquid(obj)\n val = key === 'size' ? readSize(obj) : obj[key]\n if (_.isFunction(obj.liquid_method_missing)) {\n val = obj.liquid_method_missing!(key)\n }\n }\n if (_.isNil(val) && this.opts.strict_variables) {\n throw new TypeError(`undefined variable: ${key}`)\n }\n return val\n }\n\n /*\n * Parse property access sequence from access string\n * @example\n * accessSeq(\"foo.bar\") // ['foo', 'bar']\n * accessSeq(\"foo['bar']\") // ['foo', 'bar']\n * accessSeq(\"foo['b]r']\") // ['foo', 'b]r']\n * accessSeq(\"foo[bar.coo]\") // ['foo', 'bar'], for bar.coo == 'bar'\n */\n propertyAccessSeq (str: string) {\n str = String(str)\n const seq: string[] = []\n let name = ''\n let j\n let i = 0\n while (i < str.length) {\n switch (str[i]) {\n case '[':\n push()\n\n const delemiter = str[i + 1]\n if (/['\"]/.test(delemiter)) { // foo[\"bar\"]\n j = str.indexOf(delemiter, i + 2)\n assert(j !== -1, `unbalanced ${delemiter}: ${str}`)\n name = str.slice(i + 2, j)\n push()\n i = j + 2\n } else { // foo[bar.coo]\n j = matchRightBracket(str, i + 1)\n assert(j !== -1, `unbalanced []: ${str}`)\n name = str.slice(i + 1, j)\n if (!lexical.isInteger(name)) { // foo[bar] vs. foo[1]\n name = String(this.get(name))\n }\n push()\n i = j + 1\n }\n break\n case '.':// foo.bar, foo[0].bar\n push()\n i++\n break\n default:// foo.bar\n name += str[i]\n i++\n }\n }\n push()\n\n if (!seq.length) {\n throw new TypeError(`invalid path:\"${str}\"`)\n }\n return seq\n\n function push () {\n if (name.length) seq.push(name)\n name = ''\n }\n }\n}\n\nfunction toLiquid (obj: IContext) {\n if (_.isFunction(obj.to_liquid)) {\n return obj.to_liquid()\n }\n if (_.isFunction(obj.toLiquid)) {\n return obj.toLiquid()\n }\n return obj\n}\n\nfunction readSize (obj: IContext) {\n if (!_.isNil(obj.size)) return obj.size\n if (_.isArray(obj) || _.isString(obj)) return obj.length\n return obj.size\n}\n\nfunction matchRightBracket (str: string, begin: number) {\n let stack = 1 // count of '[' - count of ']'\n for (let i = begin; i < str.length; i++) {\n if (str[i] === '[') {\n stack++\n }\n if (str[i] === ']') {\n stack--\n if (stack === 0) {\n return i\n }\n }\n }\n return -1\n}\n","export class CaptureScope {}\nexport class AssignScope {}\nexport class IncrementScope {}\nexport class DecrementScope {}\n","import { last } from '../util/underscore'\nimport IFS from './ifs'\n\nfunction domResolve (root: string, path: string) {\n const base = document.createElement('base')\n base.href = root\n\n const head = document.getElementsByTagName('head')[0]\n head.insertBefore(base, head.firstChild)\n\n const a = document.createElement('a')\n a.href = path\n const resolved = a.href\n head.removeChild(base)\n\n return resolved\n}\n\nfunction resolve (root: string, filepath: string, ext: string) {\n if (root.length && last(root) !== '/') root += '/'\n const url = domResolve(root, filepath)\n return url.replace(/^(\\w+:\\/\\/[^/]+)(\\/[^?]+)/, (str, origin, path) => {\n const last = path.split('/').pop()\n if (/\\.\\w+$/.test(last)) return str\n return origin + path + ext\n })\n}\n\nasync function readFile (url: string): Promise {\n return new Promise((resolve, reject) => {\n const xhr = new XMLHttpRequest()\n xhr.onload = () => {\n if (xhr.status >= 200 && xhr.status < 300) {\n resolve(xhr.responseText as string)\n } else {\n reject(new Error(xhr.statusText))\n }\n }\n xhr.onerror = () => {\n reject(new Error('An error occurred whilst receiving the response.'))\n }\n xhr.open('GET', url)\n xhr.send()\n })\n}\n\nasync function exists () {\n return true\n}\n\nexport default { readFile, resolve, exists } as IFS\n","export default class Token {\n type: string = 'notset'\n line: number\n col: number\n raw: string\n input: string\n file?: string\n value: string\n constructor (raw: string, input: string, line: number, col: number, file?: string) {\n this.col = col\n this.line = line\n this.raw = raw\n this.value = raw\n this.input = input\n this.file = file\n }\n}\n","import whiteSpaceCtrl from './whitespace-ctrl'\nimport HTMLToken from './html-token'\nimport TagToken from './tag-token'\nimport Token from './token'\nimport OutputToken from './output-token'\nimport { TokenizationError } from 'src/util/error'\nimport { NormalizedFullOptions, applyDefault } from '../liquid-options'\n\nenum ParseState { HTML, OUTPUT, TAG }\n\nexport default class Tokenizer {\n options: NormalizedFullOptions\n constructor (options?: NormalizedFullOptions) {\n this.options = applyDefault(options)\n }\n tokenize (input: string, file?: string) {\n const tokens: Token[] = []\n const tagL = this.options.tag_delimiter_left\n const tagR = this.options.tag_delimiter_right\n const outputL = this.options.output_delimiter_left\n const outputR = this.options.output_delimiter_right\n let p = 0\n let curLine = 1\n let state = ParseState.HTML\n let buffer = ''\n let lineBegin = 0\n let line = 1\n let col = 1\n\n while (p < input.length) {\n if (input[p] === '\\n') {\n curLine++\n lineBegin = p + 1\n }\n if (state === ParseState.HTML) {\n if (input.substr(p, outputL.length) === outputL) {\n if (buffer) tokens.push(new HTMLToken(buffer, input, line, col, file))\n buffer = outputL\n line = curLine\n col = p - lineBegin + 1\n p += outputL.length\n state = ParseState.OUTPUT\n continue\n } else if (input.substr(p, tagL.length) === tagL) {\n if (buffer) tokens.push(new HTMLToken(buffer, input, line, col, file))\n buffer = tagL\n line = curLine\n col = p - lineBegin + 1\n p += tagL.length\n state = ParseState.TAG\n continue\n }\n } else if (state === ParseState.OUTPUT && input.substr(p, outputR.length) === outputR) {\n buffer += outputR\n tokens.push(new OutputToken(buffer, buffer.slice(outputL.length, -outputR.length), input, line, col, file))\n p += outputR.length\n buffer = ''\n line = curLine\n col = p - lineBegin + 1\n state = ParseState.HTML\n continue\n } else if (input.substr(p, tagR.length) === tagR) {\n buffer += tagR\n tokens.push(new TagToken(buffer, buffer.slice(tagL.length, -tagR.length), input, line, col, file))\n p += tagR.length\n buffer = ''\n line = curLine\n col = p - lineBegin + 1\n state = ParseState.HTML\n continue\n }\n buffer += input[p++]\n }\n if (state !== ParseState.HTML) {\n const t = state === ParseState.OUTPUT ? 'output' : 'tag'\n const str = buffer.length > 16 ? buffer.slice(0, 13) + '...' : buffer\n throw new TokenizationError(\n `${t} \"${str}\" not closed`,\n new Token(buffer, input, line, col, file)\n )\n }\n if (buffer) tokens.push(new HTMLToken(buffer, input, line, col, file))\n\n whiteSpaceCtrl(tokens, this.options)\n return tokens\n }\n}\n","import Token from './token'\n\nexport default class HTMLToken extends Token {\n constructor (str: string, input: string, line: number, col: number, file?: string) {\n super(str, input, line, col, file)\n this.type = 'html'\n this.value = str\n }\n}\n","import Token from './token'\nimport { last } from 'src/util/underscore'\n\nexport default class DelimitedToken extends Token {\n trimLeft: boolean\n trimRight: boolean\n constructor (raw: string, value: string, input: string, line: number, pos: number, file?: string) {\n super(raw, input, line, pos, file)\n this.trimLeft = value[0] === '-'\n this.trimRight = last(value) === '-'\n this.value = value\n .slice(\n this.trimLeft ? 1 : 0,\n this.trimRight ? -1 : value.length\n )\n .trim()\n }\n}\n","import DelimitedToken from './delimited-token'\nimport { TokenizationError } from 'src/util/error'\nimport * as lexical from './lexical'\n\nexport default class TagToken extends DelimitedToken {\n name: string\n args: string\n constructor (raw: string, value: string, input: string, line: number, pos: number, file?: string) {\n super(raw, value, input, line, pos, file)\n this.type = 'tag'\n const match = this.value.match(lexical.tagLine)\n if (!match) {\n throw new TokenizationError(`illegal tag syntax`, this)\n }\n this.name = match[1]\n this.args = match[2]\n }\n}\n","import DelimitedToken from './delimited-token'\n\nexport default class OutputToken extends DelimitedToken {\n constructor (raw: string, value: string, input: string, line: number, pos: number, file?: string) {\n super(raw, value, input, line, pos, file)\n this.type = 'output'\n }\n}\n","import DelimitedToken from 'src/parser/delimited-token'\nimport Token from 'src/parser/token'\nimport TagToken from 'src/parser/tag-token'\nimport { NormalizedFullOptions } from 'src/liquid-options'\n\nexport default function whiteSpaceCtrl (tokens: Token[], options: NormalizedFullOptions) {\n options = { greedy: true, ...options }\n let inRaw = false\n\n tokens.forEach((token: Token, i: number) => {\n if (shouldTrimLeft(token as DelimitedToken, inRaw, options)) {\n trimLeft(tokens[i - 1], options.greedy)\n }\n\n if (token.type === 'tag' && (token as TagToken).name === 'raw') inRaw = true\n if (token.type === 'tag' && (token as TagToken).name === 'endraw') inRaw = false\n\n if (shouldTrimRight(token as DelimitedToken, inRaw, options)) {\n trimRight(tokens[i + 1], options.greedy)\n }\n })\n}\n\nfunction shouldTrimLeft (token: DelimitedToken, inRaw: boolean, options: NormalizedFullOptions) {\n if (inRaw) return false\n if (token.type === 'tag') return token.trimLeft || options.trim_tag_left\n if (token.type === 'output') return token.trimLeft || options.trim_output_left\n}\n\nfunction shouldTrimRight (token: DelimitedToken, inRaw: boolean, options: NormalizedFullOptions) {\n if (inRaw) return false\n if (token.type === 'tag') return token.trimRight || options.trim_tag_right\n if (token.type === 'output') return token.trimRight || options.trim_output_right\n}\n\nfunction trimLeft (token: Token, greedy: boolean) {\n if (!token || token.type !== 'html') return\n\n const rLeft = greedy ? /\\s+$/g : /[\\t\\r ]*$/g\n token.value = token.value.replace(rLeft, '')\n}\n\nfunction trimRight (token: Token, greedy: boolean) {\n if (!token || token.type !== 'html') return\n\n const rRight = greedy ? /^\\s+/g : /^[\\t\\r ]*\\n?/g\n token.value = token.value.replace(rRight, '')\n}\n","import { RenderError } from 'src/util/error'\nimport assert from 'src/util/assert'\nimport Scope from 'src/scope/scope'\nimport ITemplate from 'src/template/itemplate'\n\nexport default class Render {\n async renderTemplates (templates: ITemplate[], scope: Scope) {\n assert(scope, 'unable to evalTemplates: scope undefined')\n\n let html = ''\n for (const tpl of templates) {\n try {\n html += await tpl.render(scope)\n } catch (e) {\n if (e.name === 'RenderBreakError') {\n e.resolvedHTML = html\n throw e\n }\n throw e.name === 'RenderError' ? e : new RenderError(e, tpl)\n }\n }\n return html\n }\n}\n","import * as lexical from '../parser/lexical'\nimport assert from '../util/assert'\nimport Scope from 'src/scope/scope'\nimport { range } from 'src/util/underscore'\n\nconst operators = {\n '==': (l: any, r: any) => l === r,\n '!=': (l: any, r: any) => l !== r,\n '>': (l: any, r: any) => l !== null && r !== null && l > r,\n '<': (l: any, r: any) => l !== null && r !== null && l < r,\n '>=': (l: any, r: any) => l !== null && r !== null && l >= r,\n '<=': (l: any, r: any) => l !== null && r !== null && l <= r,\n 'contains': (l: any, r: any) => {\n if (!l) return false\n if (typeof l.indexOf !== 'function') return false\n return l.indexOf(r) > -1\n },\n 'and': (l: any, r: any) => isTruthy(l) && isTruthy(r),\n 'or': (l: any, r: any) => isTruthy(l) || isTruthy(r)\n}\n\nexport function evalExp (exp: string, scope: Scope): any {\n assert(scope, 'unable to evalExp: scope undefined')\n const operatorREs = lexical.operators\n let match\n for (let i = 0; i < operatorREs.length; i++) {\n const operatorRE = operatorREs[i]\n const expRE = new RegExp(`^(${lexical.quoteBalanced.source})(${operatorRE.source})(${lexical.quoteBalanced.source})$`)\n if ((match = exp.match(expRE))) {\n const l = evalExp(match[1], scope)\n const op = operators[match[2].trim()]\n const r = evalExp(match[3], scope)\n return op(l, r)\n }\n }\n\n if ((match = exp.match(lexical.rangeLine))) {\n const low = evalValue(match[1], scope)\n const high = evalValue(match[2], scope)\n return range(low, high + 1)\n }\n\n return evalValue(exp, scope)\n}\n\nexport function evalValue (str: string, scope: Scope) {\n str = str && str.trim()\n if (!str) return undefined\n\n if (lexical.isLiteral(str)) {\n return lexical.parseLiteral(str)\n }\n if (lexical.isVariable(str)) {\n return scope.get(str)\n }\n throw new TypeError(`cannot eval '${str}' as value`)\n}\n\nexport function isTruthy (val: any): boolean {\n return !isFalsy(val)\n}\n\nexport function isFalsy (val: any): boolean {\n return val === false || undefined === val || val === null\n}\n","import { hashCapture } from 'src/parser/lexical'\nimport { evalValue } from 'src/render/syntax'\nimport Scope from 'src/scope/scope'\n\n/**\n * Key-Value Pairs Representing Tag Arguments\n * Example:\n * For the markup `{% include 'head.html' foo='bar' %}`,\n * hash['foo'] === 'bar'\n */\nexport default class Hash {\n [key: string]: any\n constructor (markup: string, scope: Scope) {\n let match\n hashCapture.lastIndex = 0\n while ((match = hashCapture.exec(markup))) {\n const k = match[1]\n const v = match[2]\n this[k] = evalValue(v, scope)\n }\n }\n}\n","export default abstract class Template {\n token: T;\n constructor (token: T) {\n this.token = token\n }\n}\n","import { create, stringify } from 'src/util/underscore'\nimport assert from 'src/util/assert'\nimport Scope from 'src/scope/scope'\nimport ITagImpl from './itag-impl'\nimport ITagImplOptions from './itag-impl-options'\nimport Liquid from 'src/liquid'\nimport Hash from './hash'\nimport Template from 'src/template/template'\nimport ITemplate from 'src/template/itemplate'\nimport TagToken from 'src/parser/tag-token'\nimport Token from 'src/parser/token'\n\nexport default class Tag extends Template implements ITemplate {\n name: string\n private impl: ITagImpl\n static impls: { [key: string]: ITagImplOptions } = {}\n\n constructor (token: TagToken, tokens: Token[], liquid: Liquid) {\n super(token)\n this.name = token.name\n\n const impl = Tag.impls[token.name]\n assert(impl, `tag ${token.name} not found`)\n this.impl = create(impl)\n this.impl.liquid = liquid\n if (this.impl.parse) {\n this.impl.parse(token, tokens)\n }\n }\n async render (scope: Scope) {\n const hash = new Hash(this.token.args, scope)\n const impl = this.impl\n if (typeof impl.render !== 'function') {\n return ''\n }\n const html = await impl.render(scope, hash)\n return stringify(html)\n }\n static register (name: string, tag: ITagImplOptions) {\n Tag.impls[name] = tag\n }\n static clear () {\n Tag.impls = {}\n }\n}\n","import assert from 'src/util/assert'\nimport * as lexical from 'src/parser/lexical'\nimport { evalValue } from 'src/render/syntax'\nimport Scope from 'src/scope/scope'\nimport { FilterImpl } from './filter-impl'\n\nconst valueRE = new RegExp(`${lexical.value.source}`, 'g')\n\nexport default class Filter {\n name: string\n impl: FilterImpl\n args: string[]\n private static impls: {[key: string]: FilterImpl} = {}\n\n constructor (str: string, strictFilters: boolean = false) {\n const match = lexical.filterLine.exec(str) as string[]\n assert(match, 'illegal filter: ' + str)\n\n const name = match[1]\n const argList = match[2] || ''\n const impl = Filter.impls[name]\n if (!impl && strictFilters) throw new TypeError(`undefined filter: ${name}`)\n\n this.name = name\n this.impl = impl || (x => x)\n this.args = this.parseArgs(argList)\n }\n parseArgs (argList: string): string[] {\n let match; const args: string[] = []\n while ((match = valueRE.exec(argList.trim()))) {\n const v = match[0]\n const re = new RegExp(`${v}\\\\s*:`, 'g')\n const keyMatch = re.exec(match.input)\n const currentMatchIsKey = keyMatch && keyMatch.index === match.index\n currentMatchIsKey ? args.push(`'${v}'`) : args.push(v)\n }\n return args\n }\n render (value: any, scope: Scope): any {\n const args = this.args.map(arg => evalValue(arg, scope))\n return this.impl.apply(null, [value, ...args])\n }\n static register (name: string, filter: FilterImpl) {\n Filter.impls[name] = filter\n }\n static clear () {\n Filter.impls = {}\n }\n}\n","import Token from 'src/parser/token'\nimport ITemplate from 'src/template/itemplate'\nimport TagToken from './tag-token'\n\ntype ParseToken = ((token: Token, remainTokens: Array) => ITemplate)\n\nexport default class ParseStream {\n private tokens: Array\n private handlers: {[key: string]: (arg: any) => void} = {}\n private stopRequested: boolean = false\n private parseToken: ParseToken\n\n constructor (tokens: Array, parseToken: ParseToken) {\n this.tokens = tokens\n this.parseToken = parseToken\n }\n on (name: string, cb: (arg: T) => void): ParseStream {\n this.handlers[name] = cb\n return this\n }\n trigger (event: string, arg?: T) {\n const h = this.handlers[event]\n if (typeof h === 'function') {\n h(arg)\n return true\n }\n return false\n }\n start () {\n this.trigger('start')\n let token: Token | undefined\n while (!this.stopRequested && (token = this.tokens.shift())) {\n if (this.trigger('token', token)) continue\n if (token.type === 'tag' && this.trigger(`tag:${(token).name}`, token)) {\n continue\n }\n const template = this.parseToken(token, this.tokens)\n this.trigger('template', template)\n }\n if (!this.stopRequested) this.trigger('end')\n return this\n }\n stop () {\n this.stopRequested = true\n return this\n }\n}\n","import { evalExp } from 'src/render/syntax'\nimport * as lexical from 'src/parser/lexical'\nimport assert from 'src/util/assert'\nimport Filter from './filter/filter'\nimport Scope from 'src/scope/scope'\n\nexport default class {\n initial: any\n filters: Array = []\n constructor (str: string, strictFilters?: boolean) {\n let match: RegExpExecArray | null = lexical.matchValue(str) as RegExpExecArray\n assert(match, `illegal value string: ${str}`)\n\n this.initial = match[0]\n str = str.substr(match.index + match[0].length)\n\n while ((match = lexical.filter.exec(str))) {\n this.filters.push(new Filter(match[0].trim(), strictFilters))\n }\n }\n value (scope: Scope) {\n return this.filters.reduce(\n (prev, filter) => filter.render(prev, scope),\n evalExp(this.initial, scope))\n }\n}\n","import Value from './value'\nimport { stringify } from 'src/util/underscore'\nimport Template from 'src/template/template'\nimport ITemplate from 'src/template/itemplate'\nimport Scope from 'src/scope/scope'\nimport OutputToken from 'src/parser/output-token'\n\nexport default class Output extends Template implements ITemplate {\n value: Value\n constructor (token: OutputToken, strictFilters?: boolean) {\n super(token)\n this.value = new Value(token.value, strictFilters)\n }\n async render (scope: Scope): Promise {\n const html = await this.value.value(scope)\n return stringify(html)\n }\n}\n","import Template from 'src/template/template'\nimport ITemplate from 'src/template/itemplate'\nimport HTMLToken from 'src/parser/html-token'\n\nexport default class extends Template implements ITemplate {\n str: string\n constructor (token: HTMLToken) {\n super(token)\n this.str = token.value\n }\n async render (): Promise {\n return this.str\n }\n}\n","import { ParseError } from '../util/error'\nimport Liquid from 'src/liquid'\nimport ParseStream from './parse-stream'\nimport Token from './token'\nimport TagToken from './tag-token'\nimport OutputToken from './output-token'\nimport Tag from 'src/template/tag/tag'\nimport Output from 'src/template/output'\nimport HTML from 'src/template/html'\nimport ITemplate from 'src/template/itemplate'\n\nexport default class Parser {\n liquid: Liquid\n\n constructor (liquid: Liquid) {\n this.liquid = liquid\n }\n parse (tokens: Array) {\n let token\n const templates: ITemplate[] = []\n while ((token = tokens.shift())) {\n templates.push(this.parseToken(token, tokens))\n }\n return templates\n }\n parseToken (token: Token, remainTokens: Array) {\n try {\n if (token.type === 'tag') {\n return new Tag(token as TagToken, remainTokens, this.liquid)\n }\n if (token.type === 'output') {\n return new Output(token as OutputToken, this.liquid.options.strict_filters)\n }\n return new HTML(token)\n } catch (e) {\n throw new ParseError(e, token)\n }\n }\n parseStream (tokens: Array) {\n return new ParseStream(tokens, (token, tokens) => this.parseToken(token, tokens))\n }\n}\n","import assert from 'src/util/assert'\nimport { identifier } from 'src/parser/lexical'\nimport { AssignScope } from 'src/scope/scopes'\nimport TagToken from 'src/parser/tag-token'\nimport Scope from 'src/scope/scope'\nimport ITagImplOptions from 'src/template/tag/itag-impl-options'\n\nconst re = new RegExp(`(${identifier.source})\\\\s*=([^]*)`)\n\nexport default {\n parse: function (token: TagToken) {\n const match = token.args.match(re) as RegExpMatchArray\n assert(match, `illegal token ${token.raw}`)\n this.key = match[1]\n this.value = match[2]\n },\n render: function (scope: Scope) {\n const ctx = new AssignScope()\n ctx[this.key] = this.liquid.evalValue(this.value, scope)\n scope.push(ctx)\n return Promise.resolve('')\n }\n} as ITagImplOptions\n","/*\n * Call functions in serial until someone rejected.\n * @param {Array} iterable the array to iterate with.\n * @param {Array} iteratee returns a new promise.\n * The iteratee is invoked with three arguments: (value, index, iterable).\n */\nexport function mapSeries (\n iterable: T1[],\n iteratee: (item: T1, idx: number, iterable: T1[]) => Promise | T2\n): Promise {\n let ret = Promise.resolve(0)\n const result: T2[] = []\n iterable.forEach(function (item, idx) {\n ret = ret\n .then(() => iteratee(item, idx, iterable))\n .then(x => result.push(x))\n })\n return ret.then(() => result)\n}\n","import { mapSeries } from 'src/util/promise'\nimport { isString, isObject, isArray } from 'src/util/underscore'\nimport { evalExp } from 'src/render/syntax'\nimport assert from 'src/util/assert'\nimport { identifier, value, hash } from 'src/parser/lexical'\nimport TagToken from 'src/parser/tag-token'\nimport Token from 'src/parser/token'\nimport Scope from 'src/scope/scope'\nimport Hash from 'src/template/tag/hash'\nimport ITemplate from 'src/template/itemplate'\nimport ITagImplOptions from 'src/template/tag/itag-impl-options'\nimport ParseStream from 'src/parser/parse-stream'\n\nconst re = new RegExp(`^(${identifier.source})\\\\s+in\\\\s+` +\n `(${value.source})` +\n `(?:\\\\s+${hash.source})*` +\n `(?:\\\\s+(reversed))?` +\n `(?:\\\\s+${hash.source})*$`)\n\nexport default {\n type: 'block',\n parse: function (tagToken: TagToken, remainTokens: Token[]) {\n const match = re.exec(tagToken.args) as RegExpExecArray\n assert(match, `illegal tag: ${tagToken.raw}`)\n this.variable = match[1]\n this.collection = match[2]\n this.reversed = !!match[3]\n\n this.templates = []\n this.elseTemplates = []\n\n let p\n const stream: ParseStream = this.liquid.parser.parseStream(remainTokens)\n .on('start', () => (p = this.templates))\n .on('tag:else', () => (p = this.elseTemplates))\n .on('tag:endfor', () => stream.stop())\n .on('template', (tpl: ITemplate) => p.push(tpl))\n .on('end', () => {\n throw new Error(`tag ${tagToken.raw} not closed`)\n })\n\n stream.start()\n },\n render: async function (scope: Scope, hash: Hash) {\n let collection = evalExp(this.collection, scope)\n\n if (!isArray(collection)) {\n if (isString(collection) && collection.length > 0) {\n collection = [collection] as string[]\n } else if (isObject(collection)) {\n collection = Object.keys(collection).map((key) => [key, collection[key]]) as Array<[string, any]>\n }\n }\n if (!isArray(collection) || !collection.length) {\n return this.liquid.renderer.renderTemplates(this.elseTemplates, scope)\n }\n\n const offset = hash.offset || 0\n const limit = (hash.limit === undefined) ? collection.length : hash.limit\n\n collection = collection.slice(offset, offset + limit)\n if (this.reversed) collection.reverse()\n\n const contexts = collection.map((item: string, i: number) => {\n const ctx = {}\n ctx[this.variable] = item\n ctx['forloop'] = {\n first: i === 0,\n index: i + 1,\n index0: i,\n last: i === collection.length - 1,\n length: collection.length,\n rindex: collection.length - i,\n rindex0: collection.length - i - 1\n }\n return ctx\n })\n\n let html = ''\n let finished = false\n await mapSeries(contexts, async context => {\n if (finished) return\n\n scope.push(context)\n try {\n html += await this.liquid.renderer.renderTemplates(this.templates, scope)\n } catch (e) {\n if (e.name === 'RenderBreakError') {\n html += e.resolvedHTML\n if (e.message === 'break') {\n finished = true\n }\n } else throw e\n }\n scope.pop(context)\n })\n return html\n }\n}\n","import assert from 'src/util/assert'\nimport { identifier } from 'src/parser/lexical'\nimport { CaptureScope } from 'src/scope/scopes'\nimport TagToken from 'src/parser/tag-token'\nimport Token from 'src/parser/token'\nimport Scope from 'src/scope/scope'\nimport ITagImplOptions from 'src/template/tag/itag-impl-options'\n\nconst re = new RegExp(`(${identifier.source})`)\n\nexport default {\n parse: function (tagToken: TagToken, remainTokens: Token[]) {\n const match = tagToken.args.match(re) as RegExpMatchArray\n assert(match, `${tagToken.args} not valid identifier`)\n\n this.variable = match[1]\n this.templates = []\n\n const stream = this.liquid.parser.parseStream(remainTokens)\n stream.on('tag:endcapture', () => stream.stop())\n .on('template', (tpl) => this.templates.push(tpl))\n .on('end', () => {\n throw new Error(`tag ${tagToken.raw} not closed`)\n })\n stream.start()\n },\n render: async function (scope: Scope) {\n const html = await this.liquid.renderer.renderTemplates(this.templates, scope)\n const ctx = new CaptureScope()\n ctx[this.variable] = html\n scope.push(ctx)\n }\n} as ITagImplOptions\n","import { evalExp } from 'src/render/syntax'\nimport TagToken from 'src/parser/tag-token'\nimport Token from 'src/parser/token'\nimport Scope from 'src/scope/scope'\nimport ITemplate from 'src/template/itemplate'\nimport ITagImplOptions from 'src/template/tag/itag-impl-options'\nimport ParseStream from 'src/parser/parse-stream'\n\nexport default {\n parse: function (tagToken: TagToken, remainTokens: Token[]) {\n this.cond = tagToken.args\n this.cases = []\n this.elseTemplates = []\n\n let p: ITemplate[] = []\n const stream: ParseStream = this.liquid.parser.parseStream(remainTokens)\n .on('tag:when', (token: TagToken) => {\n this.cases.push({\n val: token.args,\n templates: p = []\n })\n })\n .on('tag:else', () => (p = this.elseTemplates))\n .on('tag:endcase', () => stream.stop())\n .on('template', (tpl: ITemplate) => p.push(tpl))\n .on('end', () => {\n throw new Error(`tag ${tagToken.raw} not closed`)\n })\n\n stream.start()\n },\n\n render: function (scope: Scope) {\n for (let i = 0; i < this.cases.length; i++) {\n const branch = this.cases[i]\n const val = evalExp(branch.val, scope)\n const cond = evalExp(this.cond, scope)\n if (val === cond) {\n return this.liquid.renderer.renderTemplates(branch.templates, scope)\n }\n }\n return this.liquid.renderer.renderTemplates(this.elseTemplates, scope)\n }\n} as ITagImplOptions\n","import TagToken from 'src/parser/tag-token'\nimport Token from 'src/parser/token'\nimport ITagImplOptions from 'src/template/tag/itag-impl-options'\n\nexport default {\n parse: function (tagToken: TagToken, remainTokens: Token[]) {\n const stream = this.liquid.parser.parseStream(remainTokens)\n stream\n .on('token', (token: TagToken) => {\n if (token.name === 'endcomment') stream.stop()\n })\n .on('end', () => {\n throw new Error(`tag ${tagToken.raw} not closed`)\n })\n stream.start()\n }\n} as ITagImplOptions\n","import assert from 'src/util/assert'\nimport { value, quotedLine } from 'src/parser/lexical'\nimport { evalValue } from 'src/render/syntax'\nimport BlockMode from 'src/scope/block-mode'\nimport TagToken from 'src/parser/tag-token'\nimport Scope from 'src/scope/scope'\nimport Hash from 'src/template/tag/hash'\nimport ITagImplOptions from 'src/template/tag/itag-impl-options'\n\nconst staticFileRE = /[^\\s,]+/\nconst withRE = new RegExp(`with\\\\s+(${value.source})`)\n\nexport default {\n parse: function (token: TagToken) {\n let match = staticFileRE.exec(token.args)\n if (match) {\n this.staticValue = match[0]\n }\n\n match = value.exec(token.args)\n if (match) {\n this.value = match[0]\n }\n\n match = withRE.exec(token.args)\n if (match) {\n this.with = match[1]\n }\n },\n render: async function (scope: Scope, hash: Hash) {\n let filepath\n if (scope.opts.dynamicPartials) {\n if (quotedLine.exec(this.value)) {\n const template = this.value.slice(1, -1)\n filepath = await this.liquid.parseAndRender(template, scope.getAll(), scope.opts)\n } else {\n filepath = evalValue(this.value, scope)\n }\n } else {\n filepath = this.staticValue\n }\n assert(filepath, `cannot include with empty filename`)\n\n const originBlocks = scope.blocks\n const originBlockMode = scope.blockMode\n\n scope.blocks = {}\n scope.blockMode = BlockMode.OUTPUT\n if (this.with) {\n hash[filepath] = evalValue(this.with, scope)\n }\n const templates = await this.liquid.getTemplate(filepath, scope.opts)\n scope.push(hash)\n const html = await this.liquid.renderer.renderTemplates(templates, scope)\n scope.pop(hash)\n scope.blocks = originBlocks\n scope.blockMode = originBlockMode\n return html\n }\n}\n","import assert from 'src/util/assert'\nimport { identifier } from 'src/parser/lexical'\nimport { CaptureScope, AssignScope, DecrementScope } from 'src/scope/scopes'\nimport TagToken from 'src/parser/tag-token'\nimport Scope from 'src/scope/scope'\nimport ITagImplOptions from 'src/template/tag/itag-impl-options'\n\nexport default {\n parse: function (token: TagToken) {\n const match = token.args.match(identifier) as RegExpMatchArray\n assert(match, `illegal identifier ${token.args}`)\n this.variable = match[0]\n },\n render: function (scope: Scope) {\n let context = scope.findContextFor(\n this.variable,\n ctx => {\n return !(ctx instanceof CaptureScope) && !(ctx instanceof AssignScope)\n }\n )\n if (!context) {\n context = new DecrementScope()\n scope.unshift(context)\n }\n if (typeof context[this.variable] !== 'number') {\n context[this.variable] = 0\n }\n return --context[this.variable]\n }\n} as ITagImplOptions\n","import assert from 'src/util/assert'\nimport { value as rValue } from 'src/parser/lexical'\nimport { evalValue } from 'src/render/syntax'\nimport TagToken from 'src/parser/tag-token'\nimport Scope from 'src/scope/scope'\nimport ITagImplOptions from 'src/template/tag/itag-impl-options'\n\nconst groupRE = new RegExp(`^(?:(${rValue.source})\\\\s*:\\\\s*)?(.*)$`)\nconst candidatesRE = new RegExp(rValue.source, 'g')\n\nexport default {\n parse: function (tagToken: TagToken) {\n let match: RegExpExecArray | null = groupRE.exec(tagToken.args) as RegExpExecArray\n assert(match, `illegal tag: ${tagToken.raw}`)\n\n this.group = match[1] || ''\n const candidates = match[2]\n\n this.candidates = []\n\n while ((match = candidatesRE.exec(candidates))) {\n this.candidates.push(match[0])\n }\n assert(this.candidates.length, `empty candidates: ${tagToken.raw}`)\n },\n\n render: function (scope: Scope) {\n const group = evalValue(this.group, scope)\n const fingerprint = `cycle:${group}:` + this.candidates.join(',')\n const groups = scope.groups\n let idx = groups[fingerprint]\n\n if (idx === undefined) {\n idx = groups[fingerprint] = 0\n }\n\n const candidate = this.candidates[idx]\n idx = (idx + 1) % this.candidates.length\n groups[fingerprint] = idx\n\n return evalValue(candidate, scope)\n }\n}\n","import { evalExp, isTruthy } from 'src/render/syntax'\nimport TagToken from 'src/parser/tag-token'\nimport Token from 'src/parser/token'\nimport Scope from 'src/scope/scope'\nimport ITemplate from 'src/template/itemplate'\nimport ITagImplOptions from 'src/template/tag/itag-impl-options'\nimport ParseStream from 'src/parser/parse-stream'\n\nexport default {\n parse: function (tagToken: TagToken, remainTokens: Token[]) {\n this.branches = []\n this.elseTemplates = []\n\n let p\n const stream: ParseStream = this.liquid.parser.parseStream(remainTokens)\n .on('start', () => this.branches.push({\n cond: tagToken.args,\n templates: (p = [])\n }))\n .on('tag:elsif', (token: TagToken) => {\n this.branches.push({\n cond: token.args,\n templates: p = []\n })\n })\n .on('tag:else', () => (p = this.elseTemplates))\n .on('tag:endif', () => stream.stop())\n .on('template', (tpl: ITemplate) => p.push(tpl))\n .on('end', () => {\n throw new Error(`tag ${tagToken.raw} not closed`)\n })\n\n stream.start()\n },\n\n render: function (scope: Scope) {\n for (const branch of this.branches) {\n const cond = evalExp(branch.cond, scope)\n if (isTruthy(cond)) {\n return this.liquid.renderer.renderTemplates(branch.templates, scope)\n }\n }\n return this.liquid.renderer.renderTemplates(this.elseTemplates, scope)\n }\n} as ITagImplOptions\n","import assert from 'src/util/assert'\nimport { identifier } from 'src/parser/lexical'\nimport { CaptureScope, AssignScope, IncrementScope } from 'src/scope/scopes'\nimport ITagImplOptions from 'src/template/tag/itag-impl-options'\n\nexport default {\n parse: function (token) {\n const match = token.args.match(identifier)\n assert(match, `illegal identifier ${token.args}`)\n this.variable = match![0]\n },\n render: function (scope) {\n let context = scope.findContextFor(\n this.variable,\n ctx => {\n return !(ctx instanceof CaptureScope) && !(ctx instanceof AssignScope)\n }\n )\n if (!context) {\n context = new IncrementScope()\n scope.unshift(context)\n }\n if (typeof context[this.variable] !== 'number') {\n context[this.variable] = 0\n }\n const val = context[this.variable]\n context[this.variable]++\n return val\n }\n} as ITagImplOptions\n","import assert from 'src/util/assert'\nimport { value as rValue } from 'src/parser/lexical'\nimport { evalValue } from 'src/render/syntax'\nimport BlockMode from 'src/scope/block-mode'\nimport TagToken from 'src/parser/tag-token'\nimport Token from 'src/parser/token'\nimport Scope from 'src/scope/scope'\nimport Hash from 'src/template/tag/hash'\nimport ITagImplOptions from 'src/template/tag/itag-impl-options'\n\nconst staticFileRE = /\\S+/\n\nexport default {\n parse: function (token: TagToken, remainTokens: Token[]) {\n let match = staticFileRE.exec(token.args)\n if (match) {\n this.staticLayout = match[0]\n }\n\n match = rValue.exec(token.args)\n if (match) {\n this.layout = match[0]\n }\n\n this.tpls = this.liquid.parser.parse(remainTokens)\n },\n render: async function (scope: Scope, hash: Hash) {\n const layout = scope.opts.dynamicPartials\n ? evalValue(this.layout, scope)\n : this.staticLayout\n assert(layout, `cannot apply layout with empty filename`)\n\n // render the remaining tokens immediately\n scope.blockMode = BlockMode.STORE\n const html = await this.liquid.renderer.renderTemplates(this.tpls, scope)\n if (scope.blocks[''] === undefined) {\n scope.blocks[''] = html\n }\n const templates = await this.liquid.getTemplate(layout, scope.opts)\n scope.push(hash)\n scope.blockMode = BlockMode.OUTPUT\n const partial = await this.liquid.renderer.renderTemplates(templates, scope)\n scope.pop(hash)\n return partial\n }\n} as ITagImplOptions\n","import BlockMode from 'src/scope/block-mode'\nimport TagToken from 'src/parser/tag-token'\nimport Token from 'src/parser/token'\nimport ITemplate from 'src/template/itemplate'\nimport Scope from 'src/scope/scope'\nimport ITagImplOptions from 'src/template/tag/itag-impl-options'\nimport ParseStream from 'src/parser/parse-stream'\n\nexport default {\n parse: function (token: TagToken, remainTokens: Token[]) {\n const match = /\\w+/.exec(token.args)\n this.block = match ? match[0] : ''\n this.tpls = [] as ITemplate[]\n const stream: ParseStream = this.liquid.parser.parseStream(remainTokens)\n .on('tag:endblock', () => stream.stop())\n .on('template', (tpl: ITemplate) => this.tpls.push(tpl))\n .on('end', () => {\n throw new Error(`tag ${token.raw} not closed`)\n })\n stream.start()\n },\n render: async function (scope: Scope) {\n const childDefined = scope.blocks[this.block]\n const html = childDefined !== undefined\n ? childDefined\n : await this.liquid.renderer.renderTemplates(this.tpls, scope)\n\n if (scope.blockMode === BlockMode.STORE) {\n scope.blocks[this.block] = html\n return ''\n }\n return html\n }\n} as ITagImplOptions\n","import TagToken from 'src/parser/tag-token'\nimport Token from 'src/parser/token'\nimport ITagImplOptions from 'src/template/tag/itag-impl-options'\n\nexport default {\n parse: function (tagToken: TagToken, remainTokens: Token[]) {\n this.tokens = []\n\n const stream = this.liquid.parser.parseStream(remainTokens)\n stream\n .on('token', (token: TagToken) => {\n if (token.name === 'endraw') stream.stop()\n else this.tokens.push(token)\n })\n .on('end', () => {\n throw new Error(`tag ${tagToken.raw} not closed`)\n })\n stream.start()\n },\n render: function () {\n return this.tokens.map((token: Token) => token.raw).join('')\n }\n}\n","import { mapSeries } from 'src/util/promise'\nimport assert from 'src/util/assert'\nimport { evalExp } from 'src/render/syntax'\nimport { identifier, value, hash } from 'src/parser/lexical'\nimport TagToken from 'src/parser/tag-token'\nimport Token from 'src/parser/token'\nimport ITemplate from 'src/template/itemplate'\nimport Scope from 'src/scope/scope'\nimport Hash from 'src/template/tag/hash'\nimport ITagImplOptions from 'src/template/tag/itag-impl-options'\nimport ParseStream from 'src/parser/parse-stream'\n\nconst re = new RegExp(`^(${identifier.source})\\\\s+in\\\\s+` +\n `(${value.source})` +\n `(?:\\\\s+${hash.source})*$`)\n\nexport default {\n parse: function (tagToken: TagToken, remainTokens: Token[]) {\n const match = re.exec(tagToken.args) as RegExpExecArray\n assert(match, `illegal tag: ${tagToken.raw}`)\n\n this.variable = match[1]\n this.collection = match[2]\n this.templates = []\n\n let p\n const stream: ParseStream = this.liquid.parser.parseStream(remainTokens)\n .on('start', () => (p = this.templates))\n .on('tag:endtablerow', () => stream.stop())\n .on('template', (tpl: ITemplate) => p.push(tpl))\n .on('end', () => {\n throw new Error(`tag ${tagToken.raw} not closed`)\n })\n\n stream.start()\n },\n\n render: async function (scope: Scope, hash: Hash) {\n let collection = evalExp(this.collection, scope) || []\n const offset = hash.offset || 0\n const limit = (hash.limit === undefined) ? collection.length : hash.limit\n\n collection = collection.slice(offset, offset + limit)\n const cols = hash.cols || collection.length\n const contexts = collection.map((item: any) => {\n const ctx = {}\n ctx[this.variable] = item\n return ctx\n })\n\n let row: number = 0\n let html = ''\n await mapSeries(contexts, async (context, idx) => {\n row = Math.floor(idx / cols) + 1\n const col = (idx % cols) + 1\n if (col === 1) {\n if (row !== 1) {\n html += ''\n }\n html += ``\n }\n\n html += ``\n scope.push(context)\n html += await this.liquid.renderer.renderTemplates(this.templates, scope)\n html += ''\n scope.pop(context)\n return html\n })\n if (row > 0) {\n html += ''\n }\n return html\n }\n} as ITagImplOptions\n","import assign from './assign'\nimport For from './for'\nimport capture from './capture'\nimport Case from './case'\nimport comment from './comment'\nimport include from './include'\nimport decrement from './decrement'\nimport cycle from './cycle'\nimport If from './if'\nimport increment from './increment'\nimport layout from './layout'\nimport block from './block'\nimport raw from './raw'\nimport tablerow from './tablerow'\nimport unless from './unless'\nimport Break from './break'\nimport Continue from './continue'\nimport ITagImplOptions from 'src/template/tag/itag-impl-options'\n\nconst tags: { [key: string]: ITagImplOptions } = {\n assign, 'for': For, capture, 'case': Case, comment, include, decrement, increment, cycle, 'if': If, layout, block, raw, tablerow, unless, 'break': Break, 'continue': Continue\n}\n\nexport default tags\n","import { evalExp, isFalsy } from 'src/render/syntax'\nimport TagToken from 'src/parser/tag-token'\nimport Token from 'src/parser/token'\nimport Scope from 'src/scope/scope'\nimport ITagImplOptions from 'src/template/tag/itag-impl-options'\nimport ParseStream from 'src/parser/parse-stream'\n\nexport default {\n parse: function (tagToken: TagToken, remainTokens: Token[]) {\n this.templates = []\n this.elseTemplates = []\n let p\n const stream: ParseStream = this.liquid.parser.parseStream(remainTokens)\n .on('start', () => {\n p = this.templates\n this.cond = tagToken.args\n })\n .on('tag:else', () => (p = this.elseTemplates))\n .on('tag:endunless', () => stream.stop())\n .on('template', tpl => p.push(tpl))\n .on('end', () => {\n throw new Error(`tag ${tagToken.raw} not closed`)\n })\n\n stream.start()\n },\n\n render: function (scope: Scope) {\n const cond = evalExp(this.cond, scope)\n return isFalsy(cond)\n ? this.liquid.renderer.renderTemplates(this.templates, scope)\n : this.liquid.renderer.renderTemplates(this.elseTemplates, scope)\n }\n} as ITagImplOptions\n","import { RenderBreakError } from 'src/util/error'\n\nexport default {\n render: async function () {\n throw new RenderBreakError('break')\n }\n}\n","import { RenderBreakError } from 'src/util/error'\n\nexport default {\n render: async function () {\n throw new RenderBreakError('continue')\n }\n}\n","const escapeMap = {\n '&': '&',\n '<': '<',\n '>': '>',\n '\"': '"',\n \"'\": '''\n}\nconst unescapeMap = {\n '&': '&',\n '<': '<',\n '>': '>',\n '"': '\"',\n ''': \"'\"\n}\n\nfunction escape (str: string) {\n return String(str).replace(/&|<|>|\"|'/g, m => escapeMap[m])\n}\n\nfunction unescape (str: string) {\n return String(str).replace(/&(amp|lt|gt|#34|#39);/g, m => unescapeMap[m])\n}\n\nexport default {\n 'escape': escape,\n 'escape_once': (str: string) => escape(unescape(str)),\n 'newline_to_br': (v: string) => v.replace(/\\n/g, '
'),\n 'strip_html': (v: string) => v.replace(/|||<.*?>/g, '')\n}\n","import { FilterImpl } from 'src/template/filter/filter-impl'\n\nexport default {\n 'append': (v: string, arg: string) => v + arg,\n 'prepend': (v: string, arg: string) => arg + v,\n 'capitalize': (str: string) => String(str).charAt(0).toUpperCase() + str.slice(1),\n 'lstrip': (v: string) => String(v).replace(/^\\s+/, ''),\n 'downcase': (v: string) => v.toLowerCase(),\n 'upcase': (str: string) => String(str).toUpperCase(),\n 'remove': (v: string, arg: string) => v.split(arg).join(''),\n 'remove_first': (v: string, l: string) => v.replace(l, ''),\n 'replace': (v: string, pattern: string, replacement: string) =>\n String(v).split(pattern).join(replacement),\n 'replace_first': (v: string, arg1: string, arg2: string) => String(v).replace(arg1, arg2),\n 'rstrip': (str: string) => String(str).replace(/\\s+$/, ''),\n 'split': (v: string, arg: string) => String(v).split(arg),\n 'strip': (v: string) => String(v).trim(),\n 'strip_newlines': (v: string) => String(v).replace(/\\n/g, ''),\n 'truncate': (v: string, l: number = 50, o: string = '...') => {\n v = String(v)\n if (v.length <= l) return v\n return v.substr(0, l - o.length) + o\n },\n 'truncatewords': (v: string, l: number = 15, o: string = '...') => {\n const arr = v.split(/\\s+/)\n let ret = arr.slice(0, l).join(' ')\n if (arr.length >= l) ret += o\n return ret\n }\n} as {[key: string]: FilterImpl}\n","export default {\n 'abs': (v: number) => Math.abs(v),\n 'ceil': (v: number) => Math.ceil(v),\n 'divided_by': (v: number, arg: number) => v / arg,\n 'floor': (v: number) => Math.floor(v),\n 'minus': bindFixed((v: number, arg: number) => v - arg),\n 'modulo': bindFixed((v: number, arg: number) => v % arg),\n 'round': (v: number, arg: number = 0) => {\n const amp = Math.pow(10, arg)\n return Math.round(v * amp) / amp\n },\n 'plus': bindFixed((v: number, arg: number) => Number(v) + Number(arg)),\n 'times': (v: number, arg: number) => v * arg\n}\n\nfunction getFixed (v: number) {\n const p = String(v).split('.')\n return (p.length > 1) ? p[1].length : 0\n}\n\nfunction bindFixed (cb: (v: number, arg: number) => number) {\n return (l: number, r: number) => {\n const f = Math.max(getFixed(l), getFixed(r))\n return cb(l, r).toFixed(f)\n }\n}\n","export default {\n 'url_decode': (x: string) => x.split('+').map(decodeURIComponent).join(' '),\n 'url_encode': (x: string) => x.split(' ').map(encodeURIComponent).join('+')\n}\n","import { last } from 'src/util/underscore'\n\nexport default {\n 'join': (v: any[], arg: string) => v.join(arg === undefined ? ' ' : arg),\n 'last': (v: T[]): T => last(v),\n 'first': (v: T[]): T => v[0],\n 'map': (arr: {[key: string]: T1}[], arg: string): T1[] => arr.map(v => v[arg]),\n 'reverse': (v: any[]) => v.reverse(),\n 'sort': (v: T[], arg: (lhs: T, rhs: T) => number) => v.sort(arg),\n 'size': (v: string | any[]) => v.length,\n 'concat': (v: T1[], arg: T2[] | T2): Array => Array.prototype.concat.call(v, arg),\n 'slice': (v: T[], begin: number, length: number): T[] => {\n if (length === undefined) length = 1\n return v.slice(begin, begin + length)\n },\n 'uniq': function (arr: T[]): T[] {\n const u = {}\n return (arr || []).filter(val => {\n if (u.hasOwnProperty(String(val))) return false\n u[String(val)] = true\n return true\n })\n }\n}\n","import { padStart } from './underscore'\n\nconst monthNames = [\n 'January', 'February', 'March', 'April', 'May', 'June', 'July', 'August',\n 'September', 'October', 'November', 'December'\n]\nconst dayNames = [\n 'Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'\n]\nconst monthNamesShort = monthNames.map(abbr)\nconst dayNamesShort = dayNames.map(abbr)\nconst suffixes = {\n 1: 'st',\n 2: 'nd',\n 3: 'rd',\n 'default': 'th'\n}\n\nfunction abbr (str: string) {\n return str.slice(0, 3)\n}\n\n// prototype extensions\nconst _date = {\n daysInMonth: function (d: Date) {\n const feb = _date.isLeapYear(d) ? 29 : 28\n return [31, feb, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]\n },\n\n getDayOfYear: function (d: Date) {\n let num = 0\n for (let i = 0; i < d.getMonth(); ++i) {\n num += _date.daysInMonth(d)[i]\n }\n return num + d.getDate()\n },\n\n getWeekOfYear: function (d: Date, startDay: number) {\n // Skip to startDay of this week\n const now = this.getDayOfYear(d) + (startDay - d.getDay())\n // Find the first startDay of the year\n const jan1 = new Date(d.getFullYear(), 0, 1)\n const then = (7 - jan1.getDay() + startDay)\n return padStart(String(Math.floor((now - then) / 7) + 1), 2, '0')\n },\n\n isLeapYear: function (d: Date) {\n const year = d.getFullYear()\n return !!((year & 3) === 0 && (year % 100 || (year % 400 === 0 && year)))\n },\n\n getSuffix: function (d: Date) {\n const str = d.getDate().toString()\n const index = parseInt(str.slice(-1))\n return suffixes[index] || suffixes['default']\n },\n\n century: function (d: Date) {\n return parseInt(d.getFullYear().toString().substring(0, 2), 10)\n }\n}\n\nconst formatCodes = {\n a: function (d: Date) {\n return dayNamesShort[d.getDay()]\n },\n A: function (d: Date) {\n return dayNames[d.getDay()]\n },\n b: function (d: Date) {\n return monthNamesShort[d.getMonth()]\n },\n B: function (d: Date) {\n return monthNames[d.getMonth()]\n },\n c: function (d: Date) {\n return d.toLocaleString()\n },\n C: function (d: Date) {\n return _date.century(d)\n },\n d: function (d: Date) {\n return padStart(d.getDate(), 2, '0')\n },\n e: function (d: Date) {\n return padStart(d.getDate(), 2)\n },\n H: function (d: Date) {\n return padStart(d.getHours(), 2, '0')\n },\n I: function (d: Date) {\n return padStart(String(d.getHours() % 12 || 12), 2, '0')\n },\n j: function (d: Date) {\n return padStart(_date.getDayOfYear(d), 3, '0')\n },\n k: function (d: Date) {\n return padStart(d.getHours(), 2)\n },\n l: function (d: Date) {\n return padStart(String(d.getHours() % 12 || 12), 2)\n },\n L: function (d: Date) {\n return padStart(d.getMilliseconds(), 3, '0')\n },\n m: function (d: Date) {\n return padStart(d.getMonth() + 1, 2, '0')\n },\n M: function (d: Date) {\n return padStart(d.getMinutes(), 2, '0')\n },\n p: function (d: Date) {\n return (d.getHours() < 12 ? 'AM' : 'PM')\n },\n P: function (d: Date) {\n return (d.getHours() < 12 ? 'am' : 'pm')\n },\n q: function (d: Date) {\n return _date.getSuffix(d)\n },\n s: function (d: Date) {\n return Math.round(d.valueOf() / 1000)\n },\n S: function (d: Date) {\n return padStart(d.getSeconds(), 2, '0')\n },\n u: function (d: Date) {\n return d.getDay() || 7\n },\n U: function (d: Date) {\n return _date.getWeekOfYear(d, 0)\n },\n w: function (d: Date) {\n return d.getDay()\n },\n W: function (d: Date) {\n return _date.getWeekOfYear(d, 1)\n },\n x: function (d: Date) {\n return d.toLocaleDateString()\n },\n X: function (d: Date) {\n return d.toLocaleTimeString()\n },\n y: function (d: Date) {\n return d.getFullYear().toString().substring(2, 4)\n },\n Y: function (d: Date) {\n return d.getFullYear()\n },\n z: function (d: Date) {\n const tz = d.getTimezoneOffset() / 60 * 100\n return (tz > 0 ? '-' : '+') + padStart(String(Math.abs(tz)), 4, '0')\n },\n '%': function () {\n return '%'\n }\n};\n(formatCodes as any).h = formatCodes.b;\n(formatCodes as any).N = formatCodes.L\n\nexport default function (d: Date, format: string) {\n let output = ''\n let remaining = format\n\n while (true) {\n const r = /%./g\n const results = r.exec(remaining)\n\n // No more format codes. Add the remaining text and return\n if (!results) {\n return output + remaining\n }\n\n // Add the preceding text\n output += remaining.slice(0, r.lastIndex - 2)\n remaining = remaining.slice(r.lastIndex)\n\n // Add the format code\n const ch = results[0].charAt(1)\n const func = formatCodes[ch]\n output += func ? func(d) : '%' + ch\n }\n}\n","import html from './html'\nimport str from './string'\nimport math from './math'\nimport url from './url'\nimport array from './array'\nimport date from './date'\nimport obj from './object'\n\nexport default { ...html, ...str, ...math, ...url, ...date, ...obj, ...array }\n","import strftime from 'src/util/strftime'\nimport { isString } from 'src/util/underscore'\n\nexport default {\n 'date': (v: string | Date, arg: string) => {\n let date = v\n if (v === 'now') {\n date = new Date()\n } else if (isString(v)) {\n date = new Date(v)\n }\n return isValidDate(date) ? strftime(date, arg) : v\n }\n}\n\nfunction isValidDate (date: any): date is Date {\n return date instanceof Date && !isNaN(date.getTime())\n}\n","import { isTruthy } from 'src/render/syntax'\n\nexport default {\n 'default': (v: T1, arg: T2): T1 | T2 => isTruthy(v) ? v : arg\n}\n","import Scope from './scope/scope'\nimport * as Types from './types'\nimport fs from 'src/fs'\nimport * as _ from './util/underscore'\nimport ITemplate from './template/itemplate'\nimport Tokenizer from './parser/tokenizer'\nimport Render from './render/render'\nimport Tag from './template/tag/tag'\nimport Filter from './template/filter/filter'\nimport Parser from './parser/parser'\nimport ITagImplOptions from './template/tag/itag-impl-options'\nimport Value from './template/value'\nimport { isTruthy, isFalsy, evalExp, evalValue } from './render/syntax'\nimport builtinTags from './builtin/tags'\nimport builtinFilters from './builtin/filters'\nimport { LiquidOptions, NormalizedFullOptions, applyDefault, normalize } from './liquid-options'\nimport { FilterImpl } from './template/filter/filter-impl'\n\nexport default class Liquid {\n public options: NormalizedFullOptions\n public renderer: Render\n public parser: Parser\n private cache: object = {}\n private tokenizer: Tokenizer\n\n constructor (opts: LiquidOptions = {}) {\n this.options = applyDefault(normalize(opts))\n this.parser = new Parser(this)\n this.renderer = new Render()\n this.tokenizer = new Tokenizer(this.options)\n\n _.forOwn(builtinTags, (conf, name) => this.registerTag(name, conf))\n _.forOwn(builtinFilters, (handler, name) => this.registerFilter(name, handler))\n }\n parse (html: string, filepath?: string) {\n const tokens = this.tokenizer.tokenize(html, filepath)\n return this.parser.parse(tokens)\n }\n render (tpl: Array, ctx?: object, opts?: LiquidOptions) {\n const options = { ...this.options, ...normalize(opts) }\n const scope = new Scope(ctx, options)\n return this.renderer.renderTemplates(tpl, scope)\n }\n async parseAndRender (html: string, ctx?: object, opts?: LiquidOptions) {\n const tpl = await this.parse(html)\n return this.render(tpl, ctx, opts)\n }\n async getTemplate (file: string, opts?: LiquidOptions) {\n const options = normalize(opts)\n const roots = options.root ? [...options.root, ...this.options.root] : this.options.root\n const paths = roots.map(root => fs.resolve(root, file, this.options.extname))\n\n for (const filepath of paths) {\n if (!(await fs.exists(filepath))) continue\n\n if (this.options.cache && this.cache[filepath]) return this.cache[filepath]\n const value = this.parse(await fs.readFile(filepath), filepath)\n if (this.options.cache) this.cache[filepath] = value\n return value\n }\n\n const err = new Error('ENOENT') as any\n err.message = `ENOENT: Failed to lookup \"${file}\" in \"${roots}\"`\n err.code = 'ENOENT'\n throw err\n }\n async renderFile (file: string, ctx?: object, opts?: LiquidOptions) {\n const options = normalize(opts)\n const templates = await this.getTemplate(file, options)\n return this.render(templates, ctx, opts)\n }\n evalValue (str: string, scope: Scope) {\n return new Value(str, this.options.strict_filters).value(scope)\n }\n registerFilter (name: string, filter: FilterImpl) {\n return Filter.register(name, filter)\n }\n registerTag (name: string, tag: ITagImplOptions) {\n return Tag.register(name, tag)\n }\n plugin (plugin: (this: Liquid, L: typeof Liquid) => void) {\n return plugin.call(this, Liquid)\n }\n express () {\n const self = this\n return function (this: any, filePath: string, ctx: object, cb: (err: Error | null, html?: string) => void) {\n const opts = { root: this.root }\n self.renderFile(filePath, ctx, opts).then(html => cb(null, html), cb)\n }\n }\n static default = Liquid\n static isTruthy = isTruthy\n static isFalsy = isFalsy\n static evalExp = evalExp\n static evalValue = evalValue\n static Types = Types\n}\n"],"names":["toStr","Object","prototype","toString","arrToStr","Array","isString","value","call","isFunction","stringify","isNil","to_liquid","toLiquid","to_s","indexOf","cache","JSON","key","isObject","push","isArray","forOwn","object","iteratee","k","hasOwnProperty","last","arr","length","type","range","start","stop","step","undefined","i","padStart","str","ch","n","String","quoted","RegExp","source","quoteBalanced","number","bool","identifier","subscript","literal","variable","rangeLimit","rangeCapture","hash","hashCapture","tagLine","literalLine","variableLine","numberLine","boolLine","quotedLine","rangeLine","integerLine","valueDeclaration","valueList","filter","filterCapture","filterLine","operators","err","token","_super","message","_this","originalError","tslib_1.__extends","LiquidError","lines","begin","end","this","context","input","split","Math","max","line","min","_\r\n .range","map","lineNumber","indicator","num","_.padStart","text","join","msg","file","col","mkMessage","stack","Error","name","update","tpl","predicate","AssertionError","BlockMode","defaultOptions","root","extname","dynamicPartials","trim_tag_right","trim_tag_left","trim_output_right","trim_output_left","greedy","tag_delimiter_left","tag_delimiter_right","output_delimiter_left","output_delimiter_right","strict_filters","strict_variables","normalize","options","_.isArray","_.isString","applyDefault","ctx","opts","OUTPUT","contexts","Scope","reduce","val","__assign","path","paths","propertyAccessSeq","scope","findContextFor","_.last","readProperty","v","some","_.isObject","unshift","arguments","pop","findIndex","TypeError","splice","candidate","obj","_.isNil","_.isFunction","size","liquid_method_missing","j","seq","delemiter","test","assert","slice","matchRightBracket","get","readFile","url","Promise","resolve","reject","xhr","XMLHttpRequest","onload","status","responseText","statusText","onerror","open","send","filepath","ext","base","document","createElement","href","head","getElementsByTagName","insertBefore","firstChild","a","resolved","removeChild","domResolve","replace","origin","exists","ParseState","raw","Token","pos","trimLeft","trimRight","trim","match","lexical.tagLine","TokenizationError","args","DelimitedToken","Tokenizer","tokens","tagL","tagR","outputL","outputR","p","curLine","state","HTML","buffer","lineBegin","substr","HTMLToken","TAG","OutputToken","TagToken","inRaw","forEach","rLeft","rRight","whiteSpaceCtrl","t","Render","templates","html","templates_1","_i","_a","render","_b","e_1","resolvedHTML","RenderError","==","l","r","!=",">","<",">=","<=","contains","and","isTruthy","or","evalExp","exp","operatorREs","lexical.operators","operatorRE","expRE","lexical.quoteBalanced","op","lexical.rangeLine","evalValue","res","Number","toLowerCase","lexical.parseLiteral","isFalsy","markup","lastIndex","exec","liquid","proto","impl","Tag","impls","create","parse","Hash","tag","Template","valueRE","lexical.value","strictFilters","lexical.filterLine","argList","Filter","x","parseArgs","keyMatch","index","arg","apply","parseToken","ParseStream","cb","handlers","event","h","trigger","stopRequested","shift","template","initial","lexical.filter","filters","default_1","prev","Value","Output","Parser","remainTokens","e","ParseError","re","AssignScope","mapSeries","iterable","ret","result","item","idx","then","tagToken","collection","reversed","elseTemplates","stream","parser","parseStream","on","keys","offset","limit","reverse","first","index0","rindex","rindex0","finished","renderer","renderTemplates","CaptureScope","cond","cases","branch","staticFileRE","withRE","staticValue","with","parseAndRender","getAll","originBlocks","blocks","originBlockMode","blockMode","getTemplate","DecrementScope","groupRE","rValue","candidatesRE","group","candidates","fingerprint","groups","branches","IncrementScope","staticLayout","layout","tpls","STORE","partial","block","childDefined","tags","assign","for","For","capture","case","Case","comment","include","decrement","increment","cycle","if","If","tablerow","cols","row","floor","unless","break","RenderBreakError","continue","escapeMap","&","\"","'","unescapeMap","&","<",">",""","'","escape","m","escape_once","newline_to_br","strip_html","append","prepend","capitalize","charAt","toUpperCase","lstrip","downcase","upcase","remove","remove_first","pattern","replacement","replace_first","arg1","arg2","rstrip","strip","strip_newlines","truncate","o","truncatewords","abs","ceil","divided_by","minus","bindFixed","modulo","round","amp","pow","plus","times","getFixed","f","toFixed","url_decode","decodeURIComponent","url_encode","encodeURIComponent","sort","concat","uniq","u","monthNames","dayNames","monthNamesShort","abbr","dayNamesShort","suffixes","1","2","3","default","_date","daysInMonth","d","isLeapYear","getDayOfYear","getMonth","getDate","getWeekOfYear","startDay","now","getDay","Date","getFullYear","year","getSuffix","parseInt","century","substring","formatCodes","A","b","B","c","toLocaleString","C","H","getHours","I","L","getMilliseconds","M","getMinutes","P","q","s","valueOf","S","getSeconds","U","w","W","toLocaleDateString","X","toLocaleTimeString","y","Y","z","tz","getTimezoneOffset","%","N","math","date","isNaN","getTime","format","output","remaining","results","func","strftime","array","tokenizer","_.forOwn","builtinTags","conf","registerTag","builtinFilters","handler","registerFilter","Liquid","tokenize","roots","fs","paths_1","code","register","plugin","self","filePath","renderFile","Types"],"mappings":"8+DAAA,IAAMA,EAAQC,OAAOC,UAAUC,SACzBC,EAAWC,MAAMH,UAAUC,kBAOjBG,EAAUC,GACxB,MAA6B,oBAAtBP,EAAMQ,KAAKD,YAGJE,EAAYF,GAC1B,MAAwB,mBAAVA,WAeAG,EAAWH,GACzB,OAAII,EAAMJ,GAAe,GACrBE,EAAWF,EAAMK,WAAmBF,EAAUH,EAAMK,aACpDH,EAAWF,EAAMM,UAAkBH,EAAUH,EAAMM,YACnDJ,EAAWF,EAAMO,MAAcP,EAAMO,QACQ,EAA7C,CAACd,EAAOI,GAAUW,QAAQR,EAAMJ,WAKZI,EALmDA,EAMrES,EAAkB,GACjBC,KAAKP,UAAUH,EAAO,SAACW,EAAKX,GACjC,GAAIY,EAASZ,GAAQ,CACnB,IAA8B,IAA1BS,EAAMD,QAAQR,GAChB,OAEFS,EAAMI,KAAKb,GAEb,OAAOA,KAbLE,EAAWF,EAAMJ,UAAkBI,EAAMJ,WACtCH,EAAMQ,KAAKD,GAGpB,IAA0BA,EAClBS,WAgBQL,EAAOJ,GACrB,OAAOA,MAAAA,WAGOc,EAASd,GAEvB,MAA6B,mBAAtBP,EAAMQ,KAAKD,YAkBJe,EACdC,EACAC,GAGA,IAAK,IAAMC,KADXF,EAASA,GAAU,GAEjB,GAAIA,EAAOG,eAAeD,KACe,IAAnCD,EAASD,EAAOE,GAAIA,EAAGF,GAAmB,MAGlD,OAAOA,WAKOI,EAAMC,GACpB,OAAOA,EAAIA,EAAIC,OAAS,YASVV,EAAUZ,GACxB,IAAMuB,SAAcvB,EACpB,OAAiB,OAAVA,IAA4B,WAATuB,GAA8B,aAATA,YAWjCC,EAAOC,EAAeC,EAAeC,QACtCC,IAATF,IACFA,EAAOD,EACPA,EAAQ,GAEVE,EAAOA,GAAQ,EAGf,IADA,IAAMN,EAAgB,GACbQ,EAAIJ,EAAOI,EAAIH,EAAMG,GAAKF,EACjCN,EAAIR,KAAKgB,GAEX,OAAOR,WAGOS,EAAUC,EAAUT,EAAgBU,gBAAAA,OAGlD,IADA,IAAIC,EAAIX,GADRS,EAAMG,OAAOH,IACQT,OACR,EAANW,KAASF,EAAMC,EAAKD,EAC3B,OAAOA,ECtIT,IAEaI,EAAS,IAAIC,OAFL,UAE4BC,WAD5B,UACmDA,QAC3DC,EAAgB,IAAIF,OAAO,MAAMD,EAAOE,oBAIxCE,EAAS,4BACTC,EAAO,aAGPC,EAAa,aACbC,EAAY,IAAIN,OAAO,SAASD,EAAOE,0BACvCM,EAAU,IAAIP,OAAO,MAAMD,EAAOE,WAAUG,EAAKH,WAAUE,EAAOF,YAClEO,EAAW,IAAIR,OAAUK,EAAWJ,gBAAeI,EAAWJ,WAAUK,EAAUL,aAGlFQ,EAAa,IAAIT,OAAO,MAAMQ,EAASP,WAAUE,EAAOF,YACxDb,EAAQ,IAAIY,OAAO,MAAMS,EAAWR,gBAAeQ,EAAWR,cAC9DS,EAAe,IAAIV,OAAO,OAAOS,EAAWR,kBAAiBQ,EAAWR,eAExErC,EAAQ,IAAIoC,OAAO,MAAMQ,EAASP,WAAUM,EAAQN,WAAUb,EAAMa,YAGpEU,EAAO,IAAIX,OAAO,MAAMK,EAAWJ,uBAAsBrC,EAAMqC,YAC/DW,EAAc,IAAIZ,OAAO,IAAIK,EAAWJ,qBAAoBrC,EAAMqC,WAAW,KAG7EY,EAAU,IAAIb,OAAO,SAASK,EAAWJ,iCACzCa,EAAc,IAAId,OAAO,IAAIO,EAAQN,WAAW,KAChDc,EAAe,IAAIf,OAAO,IAAIQ,EAASP,YACvCe,EAAa,IAAIhB,OAAO,IAAIG,EAAOF,YACnCgB,EAAW,IAAIjB,OAAO,IAAII,EAAKH,WAAW,KAC1CiB,EAAa,IAAIlB,OAAO,IAAID,EAAOE,YACnCkB,EAAY,IAAInB,OAAO,IAAIU,EAAaT,YACxCmB,EAAc,IAAIpB,OAAO,IA7Bf,QA6B2BC,YAGrCoB,EAAmB,IAAIrB,OAAO,MAAMK,EAAWJ,qBAAoBrC,EAAMqC,QACzEqB,EAAY,IAAItB,OAAUqB,EAAiBpB,oBAAmBoB,EAAiBpB,aAC/EsB,EAAS,IAAIvB,OAAUK,EAAWJ,sBAAqBqB,EAAUrB,YAAY,KAC7EuB,EAAgB,IAAIxB,OAAO,IAAIK,EAAWJ,wBAAuBqB,EAAUrB,cAC3EwB,EAAa,IAAIzB,OAAO,IAAIwB,EAAcvB,YAE1CyB,EAAY,CACvB,WACA,YACA,kCC5CF,kBAGE,WAAaC,EAAYC,GAAzB,MACEC,YAAMF,EAAIG,sBACVC,EAAKC,cAAgBL,EACrBI,EAAKH,MAAQA,IASjB,OAfmCK,OAQvBC,mBAAV,WACE,IAmDgBN,EACZO,EACAC,EACAC,EAtDEV,EAAMW,KAAKN,cACXO,GAkDUX,EAlDUU,KAAKV,MAmD3BO,EAAQP,EAAMY,MAAMC,MAAM,MAC1BL,EAAQM,KAAKC,IAAIf,EAAMgB,KAAO,EAAG,GACjCP,EAAMK,KAAKG,IAAIjB,EAAMgB,KAAO,EAAGT,EAAMjD,QAE3B4D,EACPV,EAAOC,EAAM,GACnBU,IAAI,SAAAC,GACH,IAAMC,EAAaD,IAAepB,EAAMgB,KAAQ,MAAQ,MAClDM,EAAMC,EAAWrD,OAAOkD,GAAalD,OAAOuC,GAAKnD,QACjDkE,EAAOjB,EAAMa,EAAa,GAChC,MAAO,GAAGC,EAAYC,OAAQE,IAE/BC,KAAK,OA9DNf,KAAKR,QAmET,SAAoBwB,EAAa1B,GAC3BA,EAAM2B,OAAMD,GAAO,UAAU1B,EAAM2B,MAEvC,OADAD,GAAO,UAAU1B,EAAMgB,cAAahB,EAAM4B,IArEzBC,CAAU9B,EAAIG,QAASQ,KAAKV,OAC3CU,KAAKoB,MAAQpB,KAAKR,QAAU,KAAOS,EACjC,KAAOD,KAAKoB,MAAQ,UAAY/B,EAAI+B,UAbPC,qBAkBjC,WAAa7B,EAAiBF,GAA9B,MACEC,YAAM,IAAI8B,MAAM7B,GAAUF,gBAC1BG,EAAK6B,KAAO,oBACZ/B,YAAMgC,iBAEV,OANuC5B,UAAAC,iBASrC,WAAaP,EAAYC,GAAzB,MACEC,YAAMF,EAAKC,gBACXG,EAAK6B,KAAO,aACZ7B,EAAKD,QAAUH,EAAIG,QACnBD,YAAMgC,iBAEV,OAPgC5B,UAAAC,iBAU9B,WAAaP,EAAYmC,GAAzB,MACEjC,YAAMF,EAAKmC,EAAIlC,oBACfG,EAAK6B,KAAO,cACZ7B,EAAKD,QAAUH,EAAIG,QACnBD,YAAMgC,iBAEV,OAPiC5B,UAAAC,iBAW/B,WAAaJ,GAAb,MACED,YAAMC,gBAFRC,eAAuB,GAGrBA,EAAK6B,KAAO,mBACZ7B,EAAKD,QAAUA,EAAU,KAE7B,OAPsCG,UAAA0B,qBAUpC,WAAa7B,GAAb,MACED,YAAMC,gBACNC,EAAK6B,KAAO,iBACZ7B,EAAKD,QAAUA,EAAU,KAE7B,OANoCG,UAAA0B,kBCtDXI,EAAgBjC,GACvC,IAAKiC,EAEH,MAAM,IAAIC,EADVlC,EAAUA,GAAW,UAAUiC,iBCqDnC,ICzDKE,EAAAA,EDyDCC,GAAwC,CAC5CC,KAAM,CAAC,KACP9F,OAAO,EACP+F,QAAS,GACTC,iBAAiB,EACjBC,gBAAgB,EAChBC,eAAe,EACfC,mBAAmB,EACnBC,kBAAkB,EAClBC,QAAQ,EACRC,mBAAoB,KACpBC,oBAAqB,KACrBC,sBAAuB,KACvBC,uBAAwB,KACxBC,gBAAgB,EAChBC,kBAAkB,YAGJC,GAAWC,GAY3B,IAA+BtH,EAP7B,OAJAsH,EAAUA,GAAW,IACTnG,eAAe,UACzBmG,EAAQf,KAUNgB,EADyBvH,EATSsH,EAAQf,MAUjBvG,EACzBwH,EAAWxH,GAAe,CAACA,GACxB,IAVAsH,WAGOG,GAAcH,GAC5B,YAAYhB,GAAmBgB,ICpF5BjB,EAAAA,IAAAA,4BAIHA,4BAGaA,gBCOb,WAAaqB,EAAkBC,gBAAlBD,MAHbhD,YAAiB,GACjBA,YAAkC,GAClCA,eAAuB2B,GAAUuB,OAE/BlD,KAAKiD,KAAOF,GAAaE,GACzBjD,KAAKmD,SAAW,CAACH,GAAO,IAiI5B,OA/HEI,mBAAA,WACE,OAAOpD,KAAKmD,SAASE,OAAO,SAACL,EAAKM,GAAQ,OAAAC,EAASP,EAAKM,IAAM,KAEhEF,gBAAA,SAAKI,GAAL,WACQC,EAAQzD,KAAK0D,kBAAkBF,GAC/BG,EAAQ3D,KAAK4D,eAAeH,EAAM,KAAOI,EAAO7D,KAAKmD,UAC3D,OAAOM,EAAMJ,OAAO,SAAC/H,EAAOW,GAAQ,OAAAwD,EAAKqE,aAAaxI,EAAOW,IAAM0H,IAErEP,gBAAA,SAAKI,EAAcO,GACjB,IAAMN,EAAQzD,KAAK0D,kBAAkBF,GACjCG,EAAQ3D,KAAK4D,eAAeH,EAAM,KAAOI,EAAO7D,KAAKmD,UACzDM,EAAMO,KAAK,SAAC/H,EAAKkB,GACf,OAAK8G,EAAWN,KAGZxG,IAAMsG,EAAM7G,OAAS,GACvB+G,EAAM1H,GAAO8H,GACN,SAEL7G,IAAcyG,EAAM1H,KACtB0H,EAAM1H,GAAO,IAEf0H,EAAQA,EAAM1H,IACP,OAGXmH,oBAAA,SAASJ,GACP,OAAOhD,KAAKmD,SAASe,QAAQlB,IAE/BI,iBAAA,SAAMJ,GACJ,OAAOhD,KAAKmD,SAAShH,KAAK6G,IAE5BI,gBAAA,SAAKJ,GACH,IAAKmB,UAAUvH,OACb,OAAOoD,KAAKmD,SAASiB,MAEvB,IAAMjH,EAAI6C,KAAKmD,SAASkB,UAAU,SAAAV,GAAS,OAAAA,IAAUX,IACrD,IAAW,IAAP7F,EACF,MAAM,IAAImH,UAAU,+BAEtB,OAAOtE,KAAKmD,SAASoB,OAAOpH,EAAG,GAAG,IAEpCiG,2BAAA,SAAgBnH,EAAagD,gBAAAA,aAAgD,OAAA,IAC3E,IAAK,IAAI9B,EAAI6C,KAAKmD,SAASvG,OAAS,EAAQ,GAALO,EAAQA,IAAK,CAClD,IAAMqH,EAAYxE,KAAKmD,SAAShG,GAChC,GAAK8B,EAAOuF,IACRvI,KAAOuI,EACT,OAAOA,EAGX,OAAO,MAEDpB,yBAAR,SAAsBqB,EAAexI,GACnC,IAAIqH,EAsFWmB,EA5Ef,GATIC,EAAQD,GACVnB,OAAMpG,GAENuH,EAwEN,SAAmBA,GACjB,GAAIE,EAAaF,EAAI9I,WACnB,OAAO8I,EAAI9I,YAEb,GAAIgJ,EAAaF,EAAI7I,UACnB,OAAO6I,EAAI7I,WAEb,OAAO6I,EA/EG7I,CAAS6I,GACfnB,EAAc,SAARrH,EAkFLyI,GADYD,EAjFmBA,GAkFnBG,QACb/B,EAAU4B,IAAQ3B,EAAW2B,IAAaA,EAAI7H,OADnB6H,EAAIG,KAlFQH,EAAIxI,GACvC0I,EAAaF,EAAII,yBACnBvB,EAAMmB,EAAII,sBAAuB5I,KAGjCyI,EAAQpB,IAAQtD,KAAKiD,KAAKP,iBAC5B,MAAM,IAAI4B,UAAU,uBAAuBrI,GAE7C,OAAOqH,GAWTF,8BAAA,SAAmB/F,GACjBA,EAAMG,OAAOH,GAKb,IAJA,IAEIyH,ELhDmBzH,EK8CjB0H,EAAgB,GAClBzD,EAAO,GAEPnE,EAAI,EACDA,EAAIE,EAAIT,QACb,OAAQS,EAAIF,IACV,IAAK,IACHhB,IAEA,IAAM6I,EAAY3H,EAAIF,EAAI,GAMxBA,EALE,OAAO8H,KAAKD,IAEdE,GAAc,KADdJ,EAAIzH,EAAIvB,QAAQkJ,EAAW7H,EAAI,IACd,cAAc6H,OAAc3H,GAC7CiE,EAAOjE,EAAI8H,MAAMhI,EAAI,EAAG2H,GACxB3I,IACI2I,EAAI,IAGRI,GAAc,KADdJ,EAAIM,GAAkB/H,EAAKF,EAAI,IACd,kBAAkBE,GACnCiE,EAAOjE,EAAI8H,MAAMhI,EAAI,EAAG2H,GLjETzH,EKkEQiE,ELjE1BxC,EAAYmG,KAAK5H,KKkEZiE,EAAO9D,OAAOwC,KAAKqF,IAAI/D,KAEzBnF,IACI2I,EAAI,GAEV,MACF,IAAK,IACH3I,IACAgB,IACA,MACF,QACEmE,GAAQjE,EAAIF,GACZA,IAKN,GAFAhB,KAEK4I,EAAInI,OACP,MAAM,IAAI0H,UAAU,iBAAiBjH,OAEvC,OAAO0H,EAEP,SAAS5I,IACHmF,EAAK1E,QAAQmI,EAAI5I,KAAKmF,GAC1BA,EAAO,UAqBb,SAAS8D,GAAmB/H,EAAayC,GAEvC,IADA,IAAIsB,EAAQ,EACHjE,EAAI2C,EAAO3C,EAAIE,EAAIT,OAAQO,IAIlC,GAHe,MAAXE,EAAIF,IACNiE,IAEa,MAAX/D,EAAIF,IAEQ,MADdiE,EAEE,OAAOjE,EAIb,OAAQ,EChLV,OAAA,gBACA,gBACA,gBACA,gLC+Ce,CAAEmI,SAtBjB,SAAyBC,oEACvB,SAAO,IAAIC,QAAQ,SAACC,EAASC,GAC3B,IAAMC,EAAM,IAAIC,eAChBD,EAAIE,OAAS,WACO,KAAdF,EAAIG,QAAiBH,EAAIG,OAAS,IACpCL,EAAQE,EAAII,cAEZL,EAAO,IAAIrE,MAAMsE,EAAIK,cAGzBL,EAAIM,QAAU,WACZP,EAAO,IAAIrE,MAAM,sDAEnBsE,EAAIO,KAAK,MAAOX,GAChBI,EAAIQ,eAQmBV,QAhC3B,SAAkB5D,EAAcuE,EAAkBC,GAGhD,OAFIxE,EAAKjF,QAAyB,MAAfF,EAAKmF,KAAeA,GAAQ,KAhBjD,SAAqBA,EAAc2B,GACjC,IAAM8C,EAAOC,SAASC,cAAc,QACpCF,EAAKG,KAAO5E,EAEZ,IAAM6E,EAAOH,SAASI,qBAAqB,QAAQ,GACnDD,EAAKE,aAAaN,EAAMI,EAAKG,YAE7B,IAAMC,EAAIP,SAASC,cAAc,KACjCM,EAAEL,KAAOjD,EACT,IAAMuD,EAAWD,EAAEL,KAGnB,OAFAC,EAAKM,YAAYV,GAEVS,EAKKE,CAAWpF,EAAMuE,GAClBc,QAAQ,4BAA6B,SAAC7J,EAAK8J,EAAQ3D,GAC5D,IAAM9G,EAAO8G,EAAKrD,MAAM,KAAKiE,MAC7B,MAAI,SAASa,KAAKvI,GAAcW,EACzB8J,EAAS3D,EAAO6C,KA0BSe,OAJpC,4EACE,UAAO,SC/CT,ICQKC,GAAAA,MDAH,SAAaC,EAAapH,EAAeI,EAAcY,EAAaD,GAPpEjB,UAAe,SAQbA,KAAKkB,IAAMA,EACXlB,KAAKM,KAAOA,EACZN,KAAKsH,IAAMA,EACXtH,KAAK1E,MAAQgM,EACbtH,KAAKE,MAAQA,EACbF,KAAKiB,KAAOA,kBEXd,WAAa5D,EAAa6C,EAAeI,EAAcY,EAAaD,GAApE,MACE1B,YAAMlC,EAAK6C,EAAOI,EAAMY,EAAKD,gBAC7BxB,EAAK5C,KAAO,OACZ4C,EAAKnE,MAAQ+B,IAEjB,OANuCsC,UAAA4H,mBCIrC,WAAaD,EAAahM,EAAe4E,EAAeI,EAAckH,EAAavG,GAAnF,MACE1B,YAAM+H,EAAKpH,EAAOI,EAAMkH,EAAKvG,gBAC7BxB,EAAKgI,SAAwB,MAAbnM,EAAM,GACtBmE,EAAKiI,UAA4B,MAAhBhL,EAAKpB,GACtBmE,EAAKnE,MAAQA,EACV6J,MACC1F,EAAKgI,SAAW,EAAI,EACpBhI,EAAKiI,WAAa,EAAIpM,EAAMsB,QAE7B+K,SAEP,OAd4ChI,UAAA4H,mBCI1C,WAAaD,EAAahM,EAAe4E,EAAeI,EAAckH,EAAavG,GAAnF,MACE1B,YAAM+H,EAAKhM,EAAO4E,EAAOI,EAAMkH,EAAKvG,SACpCxB,EAAK5C,KAAO,MACZ,IAAM+K,EAAQnI,EAAKnE,MAAMsM,MAAMC,GAC/B,IAAKD,EACH,MAAM,IAAIE,EAAkB,qBAAsBrI,UAEpDA,EAAK6B,KAAOsG,EAAM,GAClBnI,EAAKsI,KAAOH,EAAM,KAEtB,OAbsCjI,UAAAqI,mBCDpC,WAAaV,EAAahM,EAAe4E,EAAeI,EAAckH,EAAavG,GAAnF,MACE1B,YAAM+H,EAAKhM,EAAO4E,EAAOI,EAAMkH,EAAKvG,gBACpCxB,EAAK5C,KAAO,WAEhB,OALyC8C,UAAAqI,KJMpCX,GAAAA,KAAAA,0BAAmBA,yBAAQA,mBAEhC,kBAEE,WAAazE,GACX5C,KAAK4C,QAAUG,GAAaH,GAyEhC,OAvEEqF,qBAAA,SAAU/H,EAAee,GAcvB,IAbA,IAAMiH,EAAkB,GAClBC,EAAOnI,KAAK4C,QAAQP,mBACpB+F,EAAOpI,KAAK4C,QAAQN,oBACpB+F,EAAUrI,KAAK4C,QAAQL,sBACvB+F,EAAUtI,KAAK4C,QAAQJ,uBACzB+F,EAAI,EACJC,EAAU,EACVC,EAAQpB,GAAWqB,KACnBC,EAAS,GACTC,EAAY,EACZtI,EAAO,EACPY,EAAM,EAEHqH,EAAIrI,EAAMtD,QAAQ,CAKvB,GAJiB,OAAbsD,EAAMqI,KACRC,IACAI,EAAYL,EAAI,GAEdE,IAAUpB,GAAWqB,KAAM,CAC7B,GAAIxI,EAAM2I,OAAON,EAAGF,EAAQzL,UAAYyL,EAAS,CAC3CM,GAAQT,EAAO/L,KAAK,IAAI2M,GAAUH,EAAQzI,EAAOI,EAAMY,EAAKD,IAEhEX,EAAOkI,EACPtH,EAAMqH,EAAIK,EAAY,EACtBL,IAHAI,EAASN,GAGIzL,OACb6L,EAAQpB,GAAWnE,OACnB,SACK,GAAIhD,EAAM2I,OAAON,EAAGJ,EAAKvL,UAAYuL,EAAM,CAC5CQ,GAAQT,EAAO/L,KAAK,IAAI2M,GAAUH,EAAQzI,EAAOI,EAAMY,EAAKD,IAEhEX,EAAOkI,EACPtH,EAAMqH,EAAIK,EAAY,EACtBL,IAHAI,EAASR,GAGCvL,OACV6L,EAAQpB,GAAW0B,IACnB,cAEG,CAAA,GAAIN,IAAUpB,GAAWnE,QAAUhD,EAAM2I,OAAON,EAAGD,EAAQ1L,UAAY0L,EAAS,CACrFK,GAAUL,EACVJ,EAAO/L,KAAK,IAAI6M,GAAYL,EAAQA,EAAOxD,MAAMkD,EAAQzL,QAAS0L,EAAQ1L,QAASsD,EAAOI,EAAMY,EAAKD,IAErG0H,EAAS,GACTrI,EAAOkI,EACPtH,GAHAqH,GAAKD,EAAQ1L,QAGHgM,EAAY,EACtBH,EAAQpB,GAAWqB,KACnB,SACK,GAAIxI,EAAM2I,OAAON,EAAGH,EAAKxL,UAAYwL,EAAM,CAChDO,GAAUP,EACVF,EAAO/L,KAAK,IAAI8M,GAASN,EAAQA,EAAOxD,MAAMgD,EAAKvL,QAASwL,EAAKxL,QAASsD,EAAOI,EAAMY,EAAKD,IAE5F0H,EAAS,GACTrI,EAAOkI,EACPtH,GAHAqH,GAAKH,EAAKxL,QAGAgM,EAAY,EACtBH,EAAQpB,GAAWqB,KACnB,UAEFC,GAAUzI,EAAMqI,KAElB,GAAIE,IAAUpB,GAAWqB,KAWzB,OAHIC,GAAQT,EAAO/L,KAAK,IAAI2M,GAAUH,EAAQzI,EAAOI,EAAMY,EAAKD,aK5E5BiH,EAAiBtF,GACvDA,KAAYR,QAAQ,GAASQ,GAC7B,IAAIsG,GAAQ,EAEZhB,EAAOiB,QAAQ,SAAC7J,EAAcnC,GAoBhC,IAA0BmC,EAAuCsD,EANxCtD,EAAuCsD,EAAvCtD,EAbFA,EAayCsD,EAbTA,GAAPsG,IAe3B,QAAf5J,EAAMzC,KAAuByC,EAAMmI,UAAY7E,EAAQX,cACxC,WAAf3C,EAAMzC,KAA0ByC,EAAMmI,UAAY7E,EAAQT,sBAA9D,IASF,SAAmB7C,EAAc8C,GAC/B,GAAK9C,GAAwB,SAAfA,EAAMzC,KAApB,CAEA,IAAMuM,EAAQhH,EAAS,QAAU,aACjC9C,EAAMhE,MAAQgE,EAAMhE,MAAM4L,QAAQkC,EAAO,KA5BrC3B,CAASS,EAAO/K,EAAI,GAAIyF,EAAQR,QAGf,QAAf9C,EAAMzC,MAA+C,QAA5ByC,EAAmBgC,OAAgB4H,GAAQ,GACrD,QAAf5J,EAAMzC,MAA+C,WAA5ByC,EAAmBgC,OAAmB4H,GAAQ,GAcrD5J,EAZFA,EAYyCsD,EAZTA,GAAPsG,IAc5B,QAAf5J,EAAMzC,KAAuByC,EAAMoI,WAAa9E,EAAQZ,eACzC,WAAf1C,EAAMzC,KAA0ByC,EAAMoI,WAAa9E,EAAQV,uBAA/D,IAUF,SAAoB5C,EAAc8C,GAChC,GAAK9C,GAAwB,SAAfA,EAAMzC,KAApB,CAEA,IAAMwM,EAASjH,EAAS,QAAU,gBAClC9C,EAAMhE,MAAQgE,EAAMhE,MAAM4L,QAAQmC,EAAQ,KA5BtC3B,CAAUQ,EAAO/K,EAAI,GAAIyF,EAAQR,ULiEnCkH,CAAepB,EAAQlI,KAAK4C,SACrBsF,EAVL,IAAMqB,EAAId,IAAUpB,GAAWnE,OAAS,SAAW,MAC7C7F,EAAsB,GAAhBsL,EAAO/L,OAAc+L,EAAOxD,MAAM,EAAG,IAAM,MAAQwD,EAC/D,MAAM,IAAIb,EACLyB,OAAMlM,iBACT,IAAIkK,GAAMoB,EAAQzI,EAAOI,EAAMY,EAAKD,wBMzE5C,cAkBA,OAjBQuI,4BAAN,SAAuBC,EAAwB9F,2GAC7CuB,EAAOvB,EAAO,4CAEV+F,EAAO,OACOC,0BAAAC,wBAAPpI,wBAEC,6BAARqI,EAAAH,KAAclI,EAAIsI,OAAOnG,kBAAzB+F,EAAAG,EAAQE,sBAER,GAAe,kCAATzI,KAEJ,MADA0I,EAAEC,aAAeP,EACXM,EAER,KAAiB,gBAAXA,EAAE1I,KAAyB0I,EAAI,IAAIE,EAAYF,EAAGxI,iBAR1CoI,iBAWlB,SAAOF,cChBLtK,GAAY,CAChB+K,KAAM,SAACC,EAAQC,GAAW,OAAAD,IAAMC,GAChCC,KAAM,SAACF,EAAQC,GAAW,OAAAD,IAAMC,GAChCE,IAAK,SAACH,EAAQC,GAAW,OAAM,OAAND,GAAoB,OAANC,GAAkBA,EAAJD,GACrDI,IAAK,SAACJ,EAAQC,GAAW,OAAM,OAAND,GAAoB,OAANC,GAAcD,EAAIC,GACzDI,KAAM,SAACL,EAAQC,GAAW,OAAM,OAAND,GAAoB,OAANC,GAAmBA,GAALD,GACtDM,KAAM,SAACN,EAAQC,GAAW,OAAM,OAAND,GAAoB,OAANC,GAAcD,GAAKC,GAC3DM,SAAY,SAACP,EAAQC,GACnB,QAAKD,IACoB,mBAAdA,EAAEtO,UACU,EAAhBsO,EAAEtO,QAAQuO,KAEnBO,IAAO,SAACR,EAAQC,GAAW,OAAAQ,GAAST,IAAMS,GAASR,IACnDS,GAAM,SAACV,EAAQC,GAAW,OAAAQ,GAAST,IAAMS,GAASR,cAGpCU,GAASC,EAAarH,GACpCuB,EAAOvB,EAAO,sCAGd,IAFA,IACIiE,EADEqD,EAAcC,EAEX/N,EAAI,EAAGA,EAAI8N,EAAYrO,OAAQO,IAAK,CAC3C,IAAMgO,EAAaF,EAAY9N,GACzBiO,EAAQ,IAAI1N,OAAO,KAAK2N,EAAsB1N,YAAWwN,EAAWxN,YAAW0N,EAAsB1N,aAC3G,GAAKiK,EAAQoD,EAAIpD,MAAMwD,GAAS,CAC9B,IAAMhB,EAAIW,GAAQnD,EAAM,GAAIjE,GAG5B,OAAO2H,EAFIlM,GAAUwI,EAAM,GAAGD,SAEpByC,EADAW,GAAQnD,EAAM,GAAIjE,KAKhC,OAAKiE,EAAQoD,EAAIpD,MAAM2D,IAGdzO,EAFK0O,GAAU5D,EAAM,GAAIjE,GACnB6H,GAAU5D,EAAM,GAAIjE,GACR,GAGpB6H,GAAUR,EAAKrH,YAGR6H,GAAWnO,EAAasG,GAEtC,GADAtG,EAAMA,GAAOA,EAAIsK,OACjB,CAEA,GhBMyBtK,EgBNHA,EhBOfmB,EAAYyG,KAAK5H,GgBNtB,gBhBqB0BA,GAC5B,IAAIoO,EAAMpO,EAAIuK,MAAMlJ,GACpB,GAAI+M,EACF,OAAOC,OAAOrO,GAGhB,GADAoO,EAAMpO,EAAIuK,MAAMjJ,GAEd,MAA6B,SAAtBtB,EAAIsO,cAGb,GADAF,EAAMpO,EAAIuK,MAAMhJ,GAEd,OAAOvB,EAAI8H,MAAM,GAAI,GAEvB,MAAM,IAAIb,UAAU,iBAAiBjH,kBgBlC5BuO,CAAqBvO,OhBKLA,EAQCA,EgBX1B,GhBW0BA,EgBXHA,EhBYhBoB,EAAawG,KAAK5H,GgBXvB,OAAOsG,EAAM0B,IAAIhI,GAEnB,MAAM,IAAIiH,UAAU,gBAAgBjH,0BAGtBwN,GAAUvH,GACxB,OAAQuI,GAAQvI,YAGFuI,GAASvI,GACvB,OAAe,IAARA,GAAAA,MAA+BA,ECrDxC,OAEE,SAAawI,EAAgBnI,GAC3B,IAAIiE,EAEJ,IADAtJ,EAAYyN,UAAY,EAChBnE,EAAQtJ,EAAY0N,KAAKF,IAAU,CACzC,IAAMtP,EAAIoL,EAAM,GACV7D,EAAI6D,EAAM,GAChB5H,KAAKxD,GAAKgP,GAAUzH,EAAGJ,QChB3B,SAAarE,GACXU,KAAKV,MAAQA,kBCcf,WAAaA,EAAiB4I,EAAiB+D,GAA/C,MACE1M,YAAMD,SACNG,EAAK6B,KAAOhC,EAAMgC,KAElB,IpB8B2D4K,EoB9BrDC,EAAOC,EAAIC,MAAM/M,EAAMgC,aAC7B4D,EAAOiH,EAAM,OAAO7M,EAAMgC,mBAC1B7B,EAAK0M,MpB4BsDD,EoB5BbC,EpB6BzCnR,OAAOsR,OAAOJ,IoB5BnBzM,EAAK0M,KAAKF,OAASA,EACfxM,EAAK0M,KAAKI,OACZ9M,EAAK0M,KAAKI,MAAMjN,EAAO4I,KAkB7B,OAhCiCvI,OAiBzByM,mBAAN,SAAczI,mGAGZ,OAFMtF,EAAO,IAAImO,GAAKxM,KAAKV,MAAMyI,KAAMpE,GAEZ,mBADrBwI,EAAOnM,KAAKmM,MACFrC,UACP,OAEUqC,EAAKrC,OAAOnG,EAAOtF,WACtC,SAAO5C,EADMoO,iBAGRuC,WAAP,SAAiB9K,EAAcmL,GAC7BL,EAAIC,MAAM/K,GAAQmL,GAEbL,QAAP,WACEA,EAAIC,MAAQ,IA3BPD,QAA4C,MAHpBM,ICN3BC,GAAU,IAAIjP,OAAO,GAAGkP,EAAcjP,OAAU,mBAQpD,WAAaN,EAAawP,gBAAAA,MACxB,IAAMjF,EAAQkF,EAAmBd,KAAK3O,GACtC6H,EAAO0C,EAAO,mBAAqBvK,GAEnC,IAAMiE,EAAOsG,EAAM,GACbmF,EAAUnF,EAAM,IAAM,GACtBuE,EAAOa,EAAOX,MAAM/K,GAC1B,IAAK6K,GAAQU,EAAe,MAAM,IAAIvI,UAAU,qBAAqBhD,GAErEtB,KAAKsB,KAAOA,EACZtB,KAAKmM,KAAOA,YAASc,GAAK,OAAAA,GAC1BjN,KAAK+H,KAAO/H,KAAKkN,UAAUH,GAuB/B,OArBEC,sBAAA,SAAWD,GAET,IADA,IAAInF,EAAaG,EAAiB,GAC1BH,EAAQ+E,GAAQX,KAAKe,EAAQpF,SAAU,CAC7C,IAAM5D,EAAI6D,EAAM,GAEVuF,EADK,IAAIzP,OAAUqG,UAAU,KACfiI,KAAKpE,EAAM1H,OACLiN,GAAYA,EAASC,QAAUxF,EAAMwF,MAC3CrF,EAAK5L,KAAK,IAAI4H,OAAQgE,EAAK5L,KAAK4H,GAEtD,OAAOgE,GAETiF,mBAAA,SAAQ1R,EAAYqI,GAClB,IAAMoE,EAAO/H,KAAK+H,KAAKtH,IAAI,SAAA4M,GAAO,OAAA7B,GAAU6B,EAAK1J,KACjD,OAAO3D,KAAKmM,KAAKmB,MAAM,MAAOhS,UAAUyM,KAEnCiF,WAAP,SAAiB1L,EAAcrC,GAC7B+N,EAAOX,MAAM/K,GAAQrC,GAEhB+N,QAAP,WACEA,EAAOX,MAAQ,IAlCFW,QAAqC,sBCApD,WAAa9E,EAAsBqF,GAJ3BvN,cAAgD,GAChDA,oBAAyB,EAI/BA,KAAKkI,OAASA,EACdlI,KAAKuN,WAAaA,EAgCtB,OA9BEC,eAAA,SAA6ClM,EAAcmM,GAEzD,OADAzN,KAAK0N,SAASpM,GAAQmM,EACfzN,MAETwN,oBAAA,SAAuCG,EAAeN,GACpD,IAAMO,EAAI5N,KAAK0N,SAASC,GACxB,MAAiB,mBAANC,IACTA,EAAEP,IACK,IAIXG,kBAAA,WAEE,IAAIlO,EACJ,IAFAU,KAAK6N,QAAQ,UAEL7N,KAAK8N,gBAAkBxO,EAAQU,KAAKkI,OAAO6F,UACjD,KAAI/N,KAAK6N,QAAQ,QAASvO,IACP,QAAfA,EAAMzC,MAAkBmD,KAAK6N,QAAQ,OAAkBvO,EAAOgC,KAAQhC,IAA1E,CAGA,IAAM0O,EAAWhO,KAAKuN,WAAWjO,EAAOU,KAAKkI,QAC7ClI,KAAK6N,QAAQ,WAAYG,GAG3B,OADKhO,KAAK8N,eAAe9N,KAAK6N,QAAQ,OAC/B7N,MAETwN,iBAAA,WAEE,OADAxN,KAAK8N,eAAgB,EACd9N,yBCnCT,WAAa3C,EAAawP,GAD1B7M,aAAyB,GAEvB,ItByDwB3C,EsBzDpBuK,GtByDoBvK,EsBzD+BA,EtB0DlD/B,EAAM0Q,KAAK3O,IsBpDhB,IALA6H,EAAO0C,EAAO,yBAAyBvK,GAEvC2C,KAAKiO,QAAUrG,EAAM,GACrBvK,EAAMA,EAAIwL,OAAOjB,EAAMwF,MAAQxF,EAAM,GAAGhL,QAEhCgL,EAAQsG,EAAelC,KAAK3O,IAClC2C,KAAKmO,QAAQhS,KAAK,IAAI6Q,GAAOpF,EAAM,GAAGD,OAAQkF,IAQpD,OALEuB,kBAAA,SAAOzK,GACL,OAAO3D,KAAKmO,QAAQ9K,OAClB,SAACgL,EAAMpP,GAAW,OAAAA,EAAO6K,OAAOuE,EAAM1K,IACtCoH,GAAQ/K,KAAKiO,QAAStK,yBCd1B,WAAarE,EAAoBuN,GAAjC,MACEtN,YAAMD,gBACNG,EAAKnE,MAAQ,IAAIgT,GAAMhP,EAAMhE,MAAOuR,KAMxC,OAVoClN,OAM5B4O,mBAAN,SAAc5K,2FACC,SAAM3D,KAAK1E,MAAMA,MAAMqI,WACpC,SAAOlI,EADMoO,oBAPmB6C,mBCDlC,WAAapN,GAAb,MACEC,YAAMD,gBACNG,EAAKpC,IAAMiC,EAAMhE,QAKrB,OAT6BqE,OAMrByO,mBAAN,4EACE,SAAOpO,KAAK3C,aAPaqP,kBCU3B,WAAaT,GACXjM,KAAKiM,OAASA,EA0BlB,OAxBEuC,kBAAA,SAAOtG,GAGL,IAFA,IAAI5I,EACEmK,EAAyB,GACvBnK,EAAQ4I,EAAO6F,SACrBtE,EAAUtN,KAAK6D,KAAKuN,WAAWjO,EAAO4I,IAExC,OAAOuB,GAET+E,uBAAA,SAAYlP,EAAcmP,GACxB,IACE,MAAmB,QAAfnP,EAAMzC,KACD,IAAIuP,GAAI9M,EAAmBmP,EAAczO,KAAKiM,QAEpC,WAAf3M,EAAMzC,KACD,IAAI0R,GAAOjP,EAAsBU,KAAKiM,OAAOrJ,QAAQH,gBAEvD,IAAIiG,GAAKpJ,GAChB,MAAOoP,GACP,MAAM,IAAIC,EAAWD,EAAGpP,KAG5BkP,wBAAA,SAAatG,GAAb,WACE,OAAO,IAAIsF,GAAYtF,EAAQ,SAAC5I,EAAO4I,GAAW,OAAAzI,EAAK8N,WAAWjO,EAAO4I,WChCvE0G,GAAK,IAAIlR,OAAO,IAAIK,EAAWJ,0BAEtB,CACb4O,MAAO,SAAUjN,GACf,IAAMsI,EAAQtI,EAAMyI,KAAKH,MAAMgH,IAC/B1J,EAAO0C,EAAO,iBAAiBtI,EAAMgI,KACrCtH,KAAK/D,IAAM2L,EAAM,GACjB5H,KAAK1E,MAAQsM,EAAM,IAErBkC,OAAQ,SAAUnG,GAChB,IAAMX,EAAM,IAAI6L,GAGhB,OAFA7L,EAAIhD,KAAK/D,KAAO+D,KAAKiM,OAAOT,UAAUxL,KAAK1E,MAAOqI,GAClDA,EAAMxH,KAAK6G,GACJwC,QAAQC,QAAQ,eCdXqJ,GACdC,EACAxS,GAEA,IAAIyS,EAAMxJ,QAAQC,QAAQ,GACpBwJ,EAAe,GAMrB,OALAF,EAAS5F,QAAQ,SAAU+F,EAAMC,GAC/BH,EAAMA,EACHI,KAAK,WAAM,OAAA7S,EAAS2S,EAAMC,EAAKJ,KAC/BK,KAAK,SAAAnC,GAAK,OAAAgC,EAAO9S,KAAK8Q,OAEpB+B,EAAII,KAAK,WAAM,OAAAH,ICJxB,IAAML,GAAK,IAAIlR,OAAO,KAAKK,EAAWJ,sBAChCrC,EAAMqC,kBACAU,EAAKV,sCAELU,EAAKV,iBAEe,CAC9Bd,KAAM,QACN0P,MAAO,SAAU8C,EAAoBZ,GAA9B,IAUDlG,SATEX,EAAQgH,GAAG5C,KAAKqD,EAAStH,MAC/B7C,EAAO0C,EAAO,gBAAgByH,EAAS/H,KACvCtH,KAAK9B,SAAW0J,EAAM,GACtB5H,KAAKsP,WAAa1H,EAAM,GACxB5H,KAAKuP,WAAa3H,EAAM,GAExB5H,KAAKyJ,UAAY,GACjBzJ,KAAKwP,cAAgB,GAGrB,IAAMC,EAAsBzP,KAAKiM,OAAOyD,OAAOC,YAAYlB,GACxDmB,GAAG,QAAS,WAAM,OAACrH,EAAI9I,EAAKgK,YAC5BmG,GAAG,WAAY,WAAM,OAACrH,EAAI9I,EAAK+P,gBAC/BI,GAAG,aAAc,WAAM,OAAAH,EAAOzS,SAC9B4S,GAAG,WAAY,SAACpO,GAAmB,OAAA+G,EAAEpM,KAAKqF,KAC1CoO,GAAG,MAAO,WACT,MAAM,IAAIvO,MAAM,OAAOgO,EAAS/H,qBAGpCmI,EAAO1S,SAET+M,OAAQ,SAAgBnG,EAActF,kHAUpC,OAPKjC,EAFDkT,EAAavE,GAAQ/K,KAAKsP,WAAY3L,MAGpCtI,EAASiU,IAAmC,EAApBA,EAAW1S,OACrC0S,EAAa,CAACA,GACLpT,EAASoT,KAClBA,EAAatU,OAAO6U,KAAKP,GAAY7O,IAAI,SAACxE,GAAQ,MAAA,CAACA,EAAKqT,EAAWrT,QAGlEG,EAAQkT,IAAgBA,EAAW1S,QAIlCkT,EAASzR,EAAKyR,QAAU,EACxBC,OAAwB7S,IAAfmB,EAAK0R,MAAuBT,EAAW1S,OAASyB,EAAK0R,MAEpET,EAAaA,EAAWnK,MAAM2K,EAAQA,EAASC,GAC3C/P,KAAKuP,UAAUD,EAAWU,UAExB7M,EAAWmM,EAAW7O,IAAI,SAACyO,EAAc/R,GAC7C,IAAM6F,EAAM,GAWZ,OAVAA,EAAIvD,EAAKvB,UAAYgR,EACrBlM,EAAa,QAAI,CACfiN,MAAa,IAAN9S,EACPiQ,MAAOjQ,EAAI,EACX+S,OAAQ/S,EACRT,KAAMS,IAAMmS,EAAW1S,OAAS,EAChCA,OAAQ0S,EAAW1S,OACnBuT,OAAQb,EAAW1S,OAASO,EAC5BiT,QAASd,EAAW1S,OAASO,EAAI,GAE5B6F,IAGL0G,EAAO,GACP2G,GAAW,KACTvB,GAAU3L,EAAU,SAAMlD,gGAC9B,GAAIoQ,EAAU,UAEd1M,EAAMxH,KAAK8D,oBAED,6BAAR4J,EAAAH,KAAc1J,KAAKiM,OAAOqE,SAASC,gBAAgBvQ,KAAKyJ,UAAW9F,kBAAnE+F,EAAAG,EAAQE,sBAER,GAAe,kCAATzI,KAKC,MAAM0I,SAJXN,GAAQM,EAAEC,aACQ,UAAdD,EAAExK,UACJ6Q,GAAW,uBAIjB1M,EAAMS,IAAInE,mBAxCHD,KAAKiM,OAAOqE,SAASC,gBAAgBvQ,KAAKwP,cAAe7L,WA0ClE,OAhBAkG,YAgBOH,UCxFLkF,GAAK,IAAIlR,OAAO,IAAIK,EAAWJ,eAEtB,CACb4O,MAAO,SAAU8C,EAAoBZ,GAA9B,WACC7G,EAAQyH,EAAStH,KAAKH,MAAMgH,IAClC1J,EAAO0C,EAAUyH,EAAStH,8BAE1B/H,KAAK9B,SAAW0J,EAAM,GACtB5H,KAAKyJ,UAAY,GAEjB,IAAMgG,EAASzP,KAAKiM,OAAOyD,OAAOC,YAAYlB,GAC9CgB,EAAOG,GAAG,iBAAkB,WAAM,OAAAH,EAAOzS,SACtC4S,GAAG,WAAY,SAACpO,GAAQ,OAAA/B,EAAKgK,UAAUtN,KAAKqF,KAC5CoO,GAAG,MAAO,WACT,MAAM,IAAIvO,MAAM,OAAOgO,EAAS/H,qBAEpCmI,EAAO1S,SAET+M,OAAQ,SAAgBnG,mGACT,SAAM3D,KAAKiM,OAAOqE,SAASC,gBAAgBvQ,KAAKyJ,UAAW9F,kBAAlE+F,EAAOG,UACP7G,EAAM,IAAIwN,IACZxQ,KAAK9B,UAAYwL,EACrB/F,EAAMxH,KAAK6G,iBCtBA,CACbuJ,MAAO,SAAU8C,EAAoBZ,GAA9B,WACLzO,KAAKyQ,KAAOpB,EAAStH,KACrB/H,KAAK0Q,MAAQ,GACb1Q,KAAKwP,cAAgB,GAErB,IAAIjH,EAAiB,GACfkH,EAAsBzP,KAAKiM,OAAOyD,OAAOC,YAAYlB,GACxDmB,GAAG,WAAY,SAACtQ,GACfG,EAAKiR,MAAMvU,KAAK,CACdmH,IAAKhE,EAAMyI,KACX0B,UAAWlB,EAAI,OAGlBqH,GAAG,WAAY,WAAM,OAACrH,EAAI9I,EAAK+P,gBAC/BI,GAAG,cAAe,WAAM,OAAAH,EAAOzS,SAC/B4S,GAAG,WAAY,SAACpO,GAAmB,OAAA+G,EAAEpM,KAAKqF,KAC1CoO,GAAG,MAAO,WACT,MAAM,IAAIvO,MAAM,OAAOgO,EAAS/H,qBAGpCmI,EAAO1S,SAGT+M,OAAQ,SAAUnG,GAChB,IAAK,IAAIxG,EAAI,EAAGA,EAAI6C,KAAK0Q,MAAM9T,OAAQO,IAAK,CAC1C,IAAMwT,EAAS3Q,KAAK0Q,MAAMvT,GAG1B,GAFY4N,GAAQ4F,EAAOrN,IAAKK,KACnBoH,GAAQ/K,KAAKyQ,KAAM9M,GAE9B,OAAO3D,KAAKiM,OAAOqE,SAASC,gBAAgBI,EAAOlH,UAAW9F,GAGlE,OAAO3D,KAAKiM,OAAOqE,SAASC,gBAAgBvQ,KAAKwP,cAAe7L,QCrCrD,CACb4I,MAAO,SAAU8C,EAAoBZ,GACnC,IAAMgB,EAASzP,KAAKiM,OAAOyD,OAAOC,YAAYlB,GAC9CgB,EACGG,GAAG,QAAS,SAACtQ,GACO,eAAfA,EAAMgC,MAAuBmO,EAAOzS,SAEzC4S,GAAG,MAAO,WACT,MAAM,IAAIvO,MAAM,OAAOgO,EAAS/H,qBAEpCmI,EAAO1S,UCLL6T,GAAe,UACfC,GAAS,IAAInT,OAAO,YAAYpC,EAAMqC,eAEZ,CAC9B4O,MAAO,SAAUjN,GACf,IAAIsI,EAAQgJ,GAAa5E,KAAK1M,EAAMyI,MAChCH,IACF5H,KAAK8Q,YAAclJ,EAAM,KAG3BA,EAAQtM,EAAM0Q,KAAK1M,EAAMyI,SAEvB/H,KAAK1E,MAAQsM,EAAM,KAGrBA,EAAQiJ,GAAO7E,KAAK1M,EAAMyI,SAExB/H,KAAK+Q,KAAOnJ,EAAM,KAGtBkC,OAAQ,SAAgBnG,EAActF,kHAEhCsF,EAAMV,KAAKlB,gBACTnD,EAAWoN,KAAKhM,KAAK1E,QACjB0S,EAAWhO,KAAK1E,MAAM6J,MAAM,GAAI,MACrBnF,KAAKiM,OAAO+E,eAAehD,EAAUrK,EAAMsN,SAAUtN,EAAMV,kCAA5EmD,EAAWyD,sBAEXzD,EAAWoF,GAAUxL,KAAK1E,MAAOqI,uCAGnCyC,EAAWpG,KAAK8Q,6BAYA,OAVlB5L,EAAOkB,EAAU,sCAEX8K,EAAevN,EAAMwN,OACrBC,EAAkBzN,EAAM0N,UAE9B1N,EAAMwN,OAAS,GACfxN,EAAM0N,UAAY1P,GAAUuB,OACxBlD,KAAK+Q,OACP1S,EAAK+H,GAAYoF,GAAUxL,KAAK+Q,KAAMpN,OAEhB3D,KAAKiM,OAAOqF,YAAYlL,EAAUzC,EAAMV,cAEnD,OAFPwG,EAAYI,SAClBlG,EAAMxH,KAAKkC,MACQ2B,KAAKiM,OAAOqE,SAASC,gBAAgB9G,EAAW9F,WAInE,OAJM+F,EAAOG,SACblG,EAAMS,IAAI/F,GACVsF,EAAMwN,OAASD,EACfvN,EAAM0N,UAAYD,KACX1H,aClDI,CACb6C,MAAO,SAAUjN,GACf,IAAMsI,EAAQtI,EAAMyI,KAAKH,MAAM7J,GAC/BmH,EAAO0C,EAAO,sBAAsBtI,EAAMyI,MAC1C/H,KAAK9B,SAAW0J,EAAM,IAExBkC,OAAQ,SAAUnG,GAChB,IAAI1D,EAAU0D,EAAMC,eAClB5D,KAAK9B,SACL,SAAA8E,GACE,QAASA,aAAewN,IAAmBxN,aAAe6L,MAU9D,OAPK5O,IACHA,EAAU,IAAIsR,GACd5N,EAAMO,QAAQjE,IAEsB,iBAA3BA,EAAQD,KAAK9B,YACtB+B,EAAQD,KAAK9B,UAAY,KAElB+B,EAAQD,KAAK9B,YCpBpBsT,GAAU,IAAI9T,OAAO,QAAQ+T,EAAO9T,4BACpC+T,GAAe,IAAIhU,OAAO+T,EAAO9T,OAAQ,QAEf,CAC9B4O,MAAO,SAAU8C,GACf,IAAIzH,EAAgC4J,GAAQxF,KAAKqD,EAAStH,MAC1D7C,EAAO0C,EAAO,gBAAgByH,EAAS/H,KAEvCtH,KAAK2R,MAAQ/J,EAAM,IAAM,GACzB,IAAMgK,EAAahK,EAAM,GAIzB,IAFA5H,KAAK4R,WAAa,GAEVhK,EAAQ8J,GAAa1F,KAAK4F,IAChC5R,KAAK4R,WAAWzV,KAAKyL,EAAM,IAE7B1C,EAAOlF,KAAK4R,WAAWhV,OAAQ,qBAAqByS,EAAS/H,MAG/DwC,OAAQ,SAAUnG,GAChB,IACMkO,EAAc,SADNrG,GAAUxL,KAAK2R,MAAOhO,OACI3D,KAAK4R,WAAW7Q,KAAK,KACvD+Q,EAASnO,EAAMmO,OACjB3C,EAAM2C,EAAOD,QAEL3U,IAARiS,IACFA,EAAM2C,EAAOD,GAAe,GAG9B,IAAMrN,EAAYxE,KAAK4R,WAAWzC,GAIlC,OAHAA,GAAOA,EAAM,GAAKnP,KAAK4R,WAAWhV,OAClCkV,EAAOD,GAAe1C,EAEf3D,GAAUhH,EAAWb,QChCjB,CACb4I,MAAO,SAAU8C,EAAoBZ,GAA9B,IAIDlG,SAHJvI,KAAK+R,SAAW,GAChB/R,KAAKwP,cAAgB,GAGrB,IAAMC,EAAsBzP,KAAKiM,OAAOyD,OAAOC,YAAYlB,GACxDmB,GAAG,QAAS,WAAM,OAAAnQ,EAAKsS,SAAS5V,KAAK,CACpCsU,KAAMpB,EAAStH,KACf0B,UAAYlB,EAAI,OAEjBqH,GAAG,YAAa,SAACtQ,GAChBG,EAAKsS,SAAS5V,KAAK,CACjBsU,KAAMnR,EAAMyI,KACZ0B,UAAWlB,EAAI,OAGlBqH,GAAG,WAAY,WAAM,OAACrH,EAAI9I,EAAK+P,gBAC/BI,GAAG,YAAa,WAAM,OAAAH,EAAOzS,SAC7B4S,GAAG,WAAY,SAACpO,GAAmB,OAAA+G,EAAEpM,KAAKqF,KAC1CoO,GAAG,MAAO,WACT,MAAM,IAAIvO,MAAM,OAAOgO,EAAS/H,qBAGpCmI,EAAO1S,SAGT+M,OAAQ,SAAUnG,GAChB,IAAqB,QAAAkG,EAAA7J,KAAK+R,SAALnI,WAAAA,IAAe,CAA/B,IAAM+G,OAET,GAAI9F,GADSE,GAAQ4F,EAAOF,KAAM9M,IAEhC,OAAO3D,KAAKiM,OAAOqE,SAASC,gBAAgBI,EAAOlH,UAAW9F,GAGlE,OAAO3D,KAAKiM,OAAOqE,SAASC,gBAAgBvQ,KAAKwP,cAAe7L,QCrCrD,CACb4I,MAAO,SAAUjN,GACf,IAAMsI,EAAQtI,EAAMyI,KAAKH,MAAM7J,GAC/BmH,EAAO0C,EAAO,sBAAsBtI,EAAMyI,MAC1C/H,KAAK9B,SAAW0J,EAAO,IAEzBkC,OAAQ,SAAUnG,GAChB,IAAI1D,EAAU0D,EAAMC,eAClB5D,KAAK9B,SACL,SAAA8E,GACE,QAASA,aAAewN,IAAmBxN,aAAe6L,MAGzD5O,IACHA,EAAU,IAAI+R,GACdrO,EAAMO,QAAQjE,IAEsB,iBAA3BA,EAAQD,KAAK9B,YACtB+B,EAAQD,KAAK9B,UAAY,GAE3B,IAAMoF,EAAMrD,EAAQD,KAAK9B,UAEzB,OADA+B,EAAQD,KAAK9B,YACNoF,ICjBLsN,GAAe,SAEN,CACbrE,MAAO,SAAUjN,EAAiBmP,GAChC,IAAI7G,EAAQgJ,GAAa5E,KAAK1M,EAAMyI,MAChCH,IACF5H,KAAKiS,aAAerK,EAAM,KAG5BA,EAAQ6J,EAAOzF,KAAK1M,EAAMyI,SAExB/H,KAAKkS,OAAStK,EAAM,IAGtB5H,KAAKmS,KAAOnS,KAAKiM,OAAOyD,OAAOnD,MAAMkC,IAEvC3E,OAAQ,SAAgBnG,EAActF,uGAQvB,OAJb6G,EAHMgN,EAASvO,EAAMV,KAAKlB,gBACtByJ,GAAUxL,KAAKkS,OAAQvO,GACvB3D,KAAKiS,aACM,2CAGftO,EAAM0N,UAAY1P,GAAUyQ,SACTpS,KAAKiM,OAAOqE,SAASC,gBAAgBvQ,KAAKmS,KAAMxO,WAIjD,OAJZ+F,EAAOG,cACY3M,IAArByG,EAAMwN,OAAO,MACfxN,EAAMwN,OAAO,IAAMzH,MAEG1J,KAAKiM,OAAOqF,YAAYY,EAAQvO,EAAMV,cAG9C,OAHVwG,EAAYI,SAClBlG,EAAMxH,KAAKkC,GACXsF,EAAM0N,UAAY1P,GAAUuB,UACNlD,KAAKiM,OAAOqE,SAASC,gBAAgB9G,EAAW9F,WAEtE,OAFM0O,EAAUxI,SAChBlG,EAAMS,IAAI/F,MACHgU,aCnCI,CACb9F,MAAO,SAAUjN,EAAiBmP,GAA3B,WACC7G,EAAQ,MAAMoE,KAAK1M,EAAMyI,MAC/B/H,KAAKsS,MAAQ1K,EAAQA,EAAM,GAAK,GAChC5H,KAAKmS,KAAO,GACZ,IAAM1C,EAAsBzP,KAAKiM,OAAOyD,OAAOC,YAAYlB,GACxDmB,GAAG,eAAgB,WAAM,OAAAH,EAAOzS,SAChC4S,GAAG,WAAY,SAACpO,GAAmB,OAAA/B,EAAK0S,KAAKhW,KAAKqF,KAClDoO,GAAG,MAAO,WACT,MAAM,IAAIvO,MAAM,OAAO/B,EAAMgI,qBAEjCmI,EAAO1S,SAET+M,OAAQ,SAAgBnG,iHAEQzG,KADxBqV,EAAe5O,EAAMwN,OAAOnR,KAAKsS,eAEnCzI,EAAA0I,gBACA,SAAMvS,KAAKiM,OAAOqE,SAASC,gBAAgBvQ,KAAKmS,KAAMxO,WAAtDkG,EAAAE,0BAEJ,OAJML,IAIF/F,EAAM0N,YAAc1P,GAAUyQ,OAChCzO,EAAMwN,OAAOnR,KAAKsS,OAAS5I,KACpB,QAEFA,aC3BqB,CAC9B6C,MAAO,SAAU8C,EAAoBZ,GAA9B,WACLzO,KAAKkI,OAAS,GAEd,IAAMuH,EAASzP,KAAKiM,OAAOyD,OAAOC,YAAYlB,GAC9CgB,EACGG,GAAG,QAAS,SAACtQ,GACO,WAAfA,EAAMgC,KAAmBmO,EAAOzS,OAC/ByC,EAAKyI,OAAO/L,KAAKmD,KAEvBsQ,GAAG,MAAO,WACT,MAAM,IAAIvO,MAAM,OAAOgO,EAAS/H,qBAEpCmI,EAAO1S,SAET+M,OAAQ,WACN,OAAO9J,KAAKkI,OAAOzH,IAAI,SAACnB,GAAiB,OAAAA,EAAMgI,MAAKvG,KAAK,MCRvD6N,GAAK,IAAIlR,OAAO,KAAKK,EAAWJ,sBAChCrC,EAAMqC,kBACAU,EAAKV,cCKX6U,GAA2C,CAC/CC,UAAQC,IAAOC,GAAKC,WAASC,KAAQC,GAAMC,WAASC,WAASC,aAAWC,aAAWC,SAAOC,GAAMC,GAAInB,UAAQI,SAAOhL,OAAKgM,SDJ3G,CACb/G,MAAO,SAAU8C,EAAoBZ,GAA9B,IAQDlG,SAPEX,EAAQgH,GAAG5C,KAAKqD,EAAStH,MAC/B7C,EAAO0C,EAAO,gBAAgByH,EAAS/H,KAEvCtH,KAAK9B,SAAW0J,EAAM,GACtB5H,KAAKsP,WAAa1H,EAAM,GACxB5H,KAAKyJ,UAAY,GAGjB,IAAMgG,EAAsBzP,KAAKiM,OAAOyD,OAAOC,YAAYlB,GACxDmB,GAAG,QAAS,WAAM,OAACrH,EAAI9I,EAAKgK,YAC5BmG,GAAG,kBAAmB,WAAM,OAAAH,EAAOzS,SACnC4S,GAAG,WAAY,SAACpO,GAAmB,OAAA+G,EAAEpM,KAAKqF,KAC1CoO,GAAG,MAAO,WACT,MAAM,IAAIvO,MAAM,OAAOgO,EAAS/H,qBAGpCmI,EAAO1S,SAGT+M,OAAQ,SAAgBnG,EAActF,oHAepC,OAdIiR,EAAavE,GAAQ/K,KAAKsP,WAAY3L,IAAU,GAC9CmM,EAASzR,EAAKyR,QAAU,EACxBC,OAAwB7S,IAAfmB,EAAK0R,MAAuBT,EAAW1S,OAASyB,EAAK0R,MAEpET,EAAaA,EAAWnK,MAAM2K,EAAQA,EAASC,GACzCwD,EAAOlV,EAAKkV,MAAQjE,EAAW1S,OAC/BuG,EAAWmM,EAAW7O,IAAI,SAACyO,GAC/B,IAAMlM,EAAM,GAEZ,OADAA,EAAIvD,EAAKvB,UAAYgR,EACdlM,IAGLwQ,EAAc,EACd9J,EAAO,MACLoF,GAAU3L,EAAU,SAAOlD,EAASkP,gGAYhC,OAXRqE,EAAMpT,KAAKqT,MAAMtE,EAAMoE,GAAQ,EAEnB,KADNrS,EAAOiO,EAAMoE,EAAQ,KAEb,IAARC,IACF9J,GAAQ,SAEVA,GAAQ,iBAAiB8J,QAG3B9J,GAAQ,iBAAiBxI,OACzByC,EAAMxH,KAAK8D,GACX4J,EAAAH,KAAc1J,KAAKiM,OAAOqE,SAASC,gBAAgBvQ,KAAKyJ,UAAW9F,WAGnE,OAHA+F,EAAAG,EAAQE,SACRL,GAAQ,QACR/F,EAAMS,IAAInE,MACHyJ,kBAKT,OApBAG,SAiBU,EAAN2J,IACF9J,GAAQ,YAEHA,UCpDyHgK,OCbrH,CACbnH,MAAO,SAAU8C,EAAoBZ,GAA9B,IAGDlG,SAFJvI,KAAKyJ,UAAY,GACjBzJ,KAAKwP,cAAgB,GAErB,IAAMC,EAAsBzP,KAAKiM,OAAOyD,OAAOC,YAAYlB,GACxDmB,GAAG,QAAS,WACXrH,EAAI9I,EAAKgK,UACThK,EAAKgR,KAAOpB,EAAStH,OAEtB6H,GAAG,WAAY,WAAM,OAACrH,EAAI9I,EAAK+P,gBAC/BI,GAAG,gBAAiB,WAAM,OAAAH,EAAOzS,SACjC4S,GAAG,WAAY,SAAApO,GAAO,OAAA+G,EAAEpM,KAAKqF,KAC7BoO,GAAG,MAAO,WACT,MAAM,IAAIvO,MAAM,OAAOgO,EAAS/H,qBAGpCmI,EAAO1S,SAGT+M,OAAQ,SAAUnG,GAEhB,OAAOkI,GADMd,GAAQ/K,KAAKyQ,KAAM9M,IAE5B3D,KAAKiM,OAAOqE,SAASC,gBAAgBvQ,KAAKyJ,UAAW9F,GACrD3D,KAAKiM,OAAOqE,SAASC,gBAAgBvQ,KAAKwP,cAAe7L,KDX2EgQ,MElB7H,CACb7J,OAAQ,4EACN,MAAM,IAAI8J,EAAiB,eFgB6HC,SGlB7I,CACb/J,OAAQ,4EACN,MAAM,IAAI8J,EAAiB,mBCJzBE,GAAY,CAChBC,IAAK,QACLvJ,IAAK,OACLD,IAAK,OACLyJ,IAAK,QACLC,IAAK,SAEDC,GAAc,CAClBC,QAAS,IACTC,OAAQ,IACRC,OAAQ,IACRC,QAAS,IACTC,QAAS,KAGX,SAASC,GAAQnX,GACf,OAAOG,OAAOH,GAAK6J,QAAQ,aAAc,SAAAuN,GAAK,OAAAX,GAAUW,YAO3C,CACbD,OAAUA,GACVE,YAAe,SAACrX,GAAgB,OAAAmX,GALzBhX,OAKyCH,GAL7B6J,QAAQ,yBAA0B,SAAAuN,GAAK,OAAAP,GAAYO,OAMtEE,cAAiB,SAAC5Q,GAAc,OAAAA,EAAEmD,QAAQ,MAAO,WACjD0N,WAAc,SAAC7Q,GAAc,OAAAA,EAAEmD,QAAQ,4DAA6D,SCzBvF,CACb2N,OAAU,SAAC9Q,EAAWsJ,GAAgB,OAAAtJ,EAAIsJ,GAC1CyH,QAAW,SAAC/Q,EAAWsJ,GAAgB,OAAAA,EAAMtJ,GAC7CgR,WAAc,SAAC1X,GAAgB,OAAAG,OAAOH,GAAK2X,OAAO,GAAGC,cAAgB5X,EAAI8H,MAAM,IAC/E+P,OAAU,SAACnR,GAAc,OAAAvG,OAAOuG,GAAGmD,QAAQ,OAAQ,KACnDiO,SAAY,SAACpR,GAAc,OAAAA,EAAE4H,eAC7ByJ,OAAU,SAAC/X,GAAgB,OAAAG,OAAOH,GAAK4X,eACvCI,OAAU,SAACtR,EAAWsJ,GAAgB,OAAAtJ,EAAE5D,MAAMkN,GAAKtM,KAAK,KACxDuU,aAAgB,SAACvR,EAAWqG,GAAc,OAAArG,EAAEmD,QAAQkD,EAAG,KACvDlD,QAAW,SAACnD,EAAWwR,EAAiBC,GACtC,OAAAhY,OAAOuG,GAAG5D,MAAMoV,GAASxU,KAAKyU,IAChCC,cAAiB,SAAC1R,EAAW2R,EAAcC,GAAiB,OAAAnY,OAAOuG,GAAGmD,QAAQwO,EAAMC,IACpFC,OAAU,SAACvY,GAAgB,OAAAG,OAAOH,GAAK6J,QAAQ,OAAQ,KACvD/G,MAAS,SAAC4D,EAAWsJ,GAAgB,OAAA7P,OAAOuG,GAAG5D,MAAMkN,IACrDwI,MAAS,SAAC9R,GAAc,OAAAvG,OAAOuG,GAAG4D,QAClCmO,eAAkB,SAAC/R,GAAc,OAAAvG,OAAOuG,GAAGmD,QAAQ,MAAO,KAC1D6O,SAAY,SAAChS,EAAWqG,EAAgB4L,GAEtC,oBAFsB5L,mBAAgB4L,UACtCjS,EAAIvG,OAAOuG,IACLnH,QAAUwN,EAAUrG,EACnBA,EAAE8E,OAAO,EAAGuB,EAAI4L,EAAEpZ,QAAUoZ,GAErCC,cAAiB,SAAClS,EAAWqG,EAAgB4L,gBAAhB5L,mBAAgB4L,SAC3C,IAAMrZ,EAAMoH,EAAE5D,MAAM,OAChB6O,EAAMrS,EAAIwI,MAAM,EAAGiF,GAAGrJ,KAAK,KAE/B,OADIpE,EAAIC,QAAUwN,IAAG4E,GAAOgH,GACrBhH,OC3BI,CACbkH,IAAO,SAACnS,GAAc,OAAA3D,KAAK8V,IAAInS,IAC/BoS,KAAQ,SAACpS,GAAc,OAAA3D,KAAK+V,KAAKpS,IACjCqS,WAAc,SAACrS,EAAWsJ,GAAgB,OAAAtJ,EAAIsJ,GAC9CoG,MAAS,SAAC1P,GAAc,OAAA3D,KAAKqT,MAAM1P,IACnCsS,MAASC,GAAU,SAACvS,EAAWsJ,GAAgB,OAAAtJ,EAAIsJ,IACnDkJ,OAAUD,GAAU,SAACvS,EAAWsJ,GAAgB,OAAAtJ,EAAIsJ,IACpDmJ,MAAS,SAACzS,EAAWsJ,gBAAAA,KACnB,IAAMoJ,EAAMrW,KAAKsW,IAAI,GAAIrJ,GACzB,OAAOjN,KAAKoW,MAAMzS,EAAI0S,GAAOA,GAE/BE,KAAQL,GAAU,SAACvS,EAAWsJ,GAAgB,OAAA3B,OAAO3H,GAAK2H,OAAO2B,KACjEuJ,MAAS,SAAC7S,EAAWsJ,GAAgB,OAAAtJ,EAAIsJ,IAG3C,SAASwJ,GAAU9S,GACjB,IAAMwE,EAAI/K,OAAOuG,GAAG5D,MAAM,KAC1B,OAAmB,EAAXoI,EAAE3L,OAAc2L,EAAE,GAAG3L,OAAS,EAGxC,SAAS0Z,GAAW7I,GAClB,OAAO,SAACrD,EAAWC,GACjB,IAAMyM,EAAI1W,KAAKC,IAAIwW,GAASzM,GAAIyM,GAASxM,IACzC,OAAOoD,EAAGrD,EAAGC,GAAG0M,QAAQD,WCvBb,CACbE,WAAc,SAAC/J,GAAc,OAAAA,EAAE9M,MAAM,KAAKM,IAAIwW,oBAAoBlW,KAAK,MACvEmW,WAAc,SAACjK,GAAc,OAAAA,EAAE9M,MAAM,KAAKM,IAAI0W,oBAAoBpW,KAAK,UCA1D,CACbA,KAAQ,SAACgD,EAAUsJ,GAAgB,OAAAtJ,EAAEhD,UAAa7D,IAARmQ,EAAoB,IAAMA,IACpE3Q,KAAQ,SAAIqH,GAAc,OAAArH,EAAKqH,IAC/BkM,MAAS,SAAIlM,GAAc,OAAAA,EAAE,IAC7BtD,IAAO,SAAS9D,EAA4B0Q,GAAsB,OAAA1Q,EAAI8D,IAAI,SAAAsD,GAAK,OAAAA,EAAEsJ,MACjF2C,QAAW,SAACjM,GAAa,OAAAA,EAAEiM,WAC3BoH,KAAQ,SAAIrT,EAAQsJ,GAAoC,OAAAtJ,EAAEqT,KAAK/J,IAC/DzI,KAAQ,SAACb,GAAsB,OAAAA,EAAEnH,QACjCya,OAAU,SAAStT,EAASsJ,GAAmC,OAAAjS,MAAMH,UAAUoc,OAAO9b,KAAKwI,EAAGsJ,IAC9FlI,MAAS,SAAIpB,EAAQjE,EAAelD,GAElC,YADeM,IAAXN,IAAsBA,EAAS,GAC5BmH,EAAEoB,MAAMrF,EAAOA,EAAQlD,IAEhC0a,KAAQ,SAAa3a,GACnB,IAAM4a,EAAI,GACV,OAAQ5a,GAAO,IAAIsC,OAAO,SAAAqE,GACxB,OAAIiU,EAAE9a,eAAee,OAAO8F,MAC5BiU,EAAE/Z,OAAO8F,KAAQ,OCjBjBkU,GAAa,CACjB,UAAW,WAAY,QAAS,QAAS,MAAO,OAAQ,OAAQ,SAChE,YAAa,UAAW,WAAY,YAEhCC,GAAW,CACf,SAAU,SAAU,UAAW,YAAa,WAAY,SAAU,YAE9DC,GAAkBF,GAAW/W,IAAIkX,IACjCC,GAAgBH,GAAShX,IAAIkX,IAC7BE,GAAW,CACfC,EAAG,KACHC,EAAG,KACHC,EAAG,KACHC,QAAW,MAGb,SAASN,GAAMta,GACb,OAAOA,EAAI8H,MAAM,EAAG,GAItB,IAAM+S,GAAQ,CACZC,YAAa,SAAUC,GAErB,MAAO,CAAC,GADIF,GAAMG,WAAWD,GAAK,GAAK,GACtB,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,KAGvDE,aAAc,SAAUF,GAEtB,IADA,IAAIxX,EAAM,EACDzD,EAAI,EAAGA,EAAIib,EAAEG,aAAcpb,EAClCyD,GAAOsX,GAAMC,YAAYC,GAAGjb,GAE9B,OAAOyD,EAAMwX,EAAEI,WAGjBC,cAAe,SAAUL,EAASM,GAEhC,IAAMC,EAAM3Y,KAAKsY,aAAaF,IAAMM,EAAWN,EAAEQ,UAG3CxJ,EAAQ,EADD,IAAIyJ,KAAKT,EAAEU,cAAe,EAAG,GACnBF,SAAWF,EAClC,OAAOtb,EAASI,OAAO4C,KAAKqT,OAAOkF,EAAMvJ,GAAQ,GAAK,GAAI,EAAG,MAG/DiJ,WAAY,SAAUD,GACpB,IAAMW,EAAOX,EAAEU,cACf,QAAyB,IAAP,EAAPC,MAAoBA,EAAO,KAAQA,EAAO,KAAQ,GAAKA,KAGpEC,UAAW,SAAUZ,GACnB,IAAM/a,EAAM+a,EAAEI,UAAUtd,WAClBkS,EAAQ6L,SAAS5b,EAAI8H,OAAO,IAClC,OAAO0S,GAASzK,IAAUyK,GAAkB,SAG9CqB,QAAS,SAAUd,GACjB,OAAOa,SAASb,EAAEU,cAAc5d,WAAWie,UAAU,EAAG,GAAI,MAI1DC,GAAc,CAClBtS,EAAG,SAAUsR,GACX,OAAOR,GAAcQ,EAAEQ,WAEzBS,EAAG,SAAUjB,GACX,OAAOX,GAASW,EAAEQ,WAEpBU,EAAG,SAAUlB,GACX,OAAOV,GAAgBU,EAAEG,aAE3BgB,EAAG,SAAUnB,GACX,OAAOZ,GAAWY,EAAEG,aAEtBiB,EAAG,SAAUpB,GACX,OAAOA,EAAEqB,kBAEXC,EAAG,SAAUtB,GACX,OAAOF,GAAMgB,QAAQd,IAEvBA,EAAG,SAAUA,GACX,OAAOhb,EAASgb,EAAEI,UAAW,EAAG,MAElC9J,EAAG,SAAU0J,GACX,OAAOhb,EAASgb,EAAEI,UAAW,IAE/BmB,EAAG,SAAUvB,GACX,OAAOhb,EAASgb,EAAEwB,WAAY,EAAG,MAEnCC,EAAG,SAAUzB,GACX,OAAOhb,EAASI,OAAO4a,EAAEwB,WAAa,IAAM,IAAK,EAAG,MAEtD9U,EAAG,SAAUsT,GACX,OAAOhb,EAAS8a,GAAMI,aAAaF,GAAI,EAAG,MAE5C5b,EAAG,SAAU4b,GACX,OAAOhb,EAASgb,EAAEwB,WAAY,IAEhCxP,EAAG,SAAUgO,GACX,OAAOhb,EAASI,OAAO4a,EAAEwB,WAAa,IAAM,IAAK,IAEnDE,EAAG,SAAU1B,GACX,OAAOhb,EAASgb,EAAE2B,kBAAmB,EAAG,MAE1CtF,EAAG,SAAU2D,GACX,OAAOhb,EAASgb,EAAEG,WAAa,EAAG,EAAG,MAEvCyB,EAAG,SAAU5B,GACX,OAAOhb,EAASgb,EAAE6B,aAAc,EAAG,MAErC1R,EAAG,SAAU6P,GACX,OAAQA,EAAEwB,WAAa,GAAK,KAAO,MAErCM,EAAG,SAAU9B,GACX,OAAQA,EAAEwB,WAAa,GAAK,KAAO,MAErCO,EAAG,SAAU/B,GACX,OAAOF,GAAMc,UAAUZ,IAEzBgC,EAAG,SAAUhC,GACX,OAAOhY,KAAKoW,MAAM4B,EAAEiC,UAAY,MAElCC,EAAG,SAAUlC,GACX,OAAOhb,EAASgb,EAAEmC,aAAc,EAAG,MAErChD,EAAG,SAAUa,GACX,OAAOA,EAAEQ,UAAY,GAEvB4B,EAAG,SAAUpC,GACX,OAAOF,GAAMO,cAAcL,EAAG,IAEhCqC,EAAG,SAAUrC,GACX,OAAOA,EAAEQ,UAEX8B,EAAG,SAAUtC,GACX,OAAOF,GAAMO,cAAcL,EAAG,IAEhCnL,EAAG,SAAUmL,GACX,OAAOA,EAAEuC,sBAEXC,EAAG,SAAUxC,GACX,OAAOA,EAAEyC,sBAEXC,EAAG,SAAU1C,GACX,OAAOA,EAAEU,cAAc5d,WAAWie,UAAU,EAAG,IAEjD4B,EAAG,SAAU3C,GACX,OAAOA,EAAEU,eAEXkC,EAAG,SAAU5C,GACX,IAAM6C,EAAK7C,EAAE8C,oBAAsB,GAAK,IACxC,OAAa,EAALD,EAAS,IAAM,KAAO7d,EAASI,OAAO4C,KAAK8V,IAAI+E,IAAM,EAAG,MAElEE,IAAK,WACH,MAAO,MAGV/B,GAAoBxL,EAAIwL,GAAYE,EACpCF,GAAoBgC,EAAIhC,GAAYU,cCvJjBpQ,GAASrM,GAAQge,GAAS9V,GCL/B,CACb+V,KAAQ,SAACvX,EAAkBsJ,GACzB,IAUkBiO,EAVdA,EAAOvX,EAMX,MALU,QAANA,EACFuX,EAAO,IAAIzC,KACFxd,EAAS0I,KAClBuX,EAAO,IAAIzC,KAAK9U,KAMAuX,EAJCA,aAKEzC,OAAS0C,MAAMD,EAAKE,oBFiJpBpD,EAASqD,GAIhC,IAHA,IAAIC,EAAS,GACTC,EAAYF,IAEH,CACX,IAAMpR,EAAI,MACJuR,EAAUvR,EAAE2B,KAAK2P,GAGvB,IAAKC,EACH,OAAOF,EAASC,EAIlBD,GAAUC,EAAUxW,MAAM,EAAGkF,EAAE0B,UAAY,GAC3C4P,EAAYA,EAAUxW,MAAMkF,EAAE0B,WAG9B,IAAMzO,EAAKse,EAAQ,GAAG5G,OAAO,GACvB6G,EAAOzC,GAAY9b,GACzBoe,GAAUG,EAAOA,EAAKzD,GAAK,IAAM9a,GE1KNwe,CAASR,EAAMjO,GAAOtJ,ICTtC,CACbkU,QAAW,SAASlU,EAAOsJ,GAAqB,OAAAxC,GAAS9G,GAAKA,EAAIsJ,IFKG0O,sBGiBrE,WAAa9Y,gBAAAA,MAAb,WAHQjD,WAAgB,GAItBA,KAAK4C,QAAUG,GAAaJ,GAAUM,IACtCjD,KAAK0P,OAAS,IAAIlB,GAAOxO,MACzBA,KAAKsQ,SAAW,IAAI9G,GACpBxJ,KAAKgc,UAAY,IAAI/T,GAAUjI,KAAK4C,SAEpCqZ,EAASC,GAAa,SAACC,EAAM7a,GAAS,OAAA7B,EAAK2c,YAAY9a,EAAM6a,KAC7DF,EAASI,GAAgB,SAACC,EAAShb,GAAS,OAAA7B,EAAK8c,eAAejb,EAAMgb,KAgE1E,OA9DEE,kBAAA,SAAO9S,EAActD,GACnB,IAAM8B,EAASlI,KAAKgc,UAAUS,SAAS/S,EAAMtD,GAC7C,OAAOpG,KAAK0P,OAAOnD,MAAMrE,IAE3BsU,mBAAA,SAAQhb,EAAuBwB,EAAcC,GAC3C,IAAML,OAAe5C,KAAK4C,QAAYD,GAAUM,IAC1CU,EAAQ,IAAIP,GAAMJ,EAAKJ,GAC7B,OAAO5C,KAAKsQ,SAASC,gBAAgB/O,EAAKmC,IAEtC6Y,2BAAN,SAAsB9S,EAAc1G,EAAcC,iGACpC,SAAMjD,KAAKuM,MAAM7C,WAC7B,OADMlI,EAAMqI,YACL7J,KAAK8J,OAAOtI,EAAKwB,EAAKC,UAEzBuZ,wBAAN,SAAmBvb,EAAcgC,wHACzBL,EAAUD,GAAUM,GACpByZ,EAAQ9Z,EAAQf,KAAWe,EAAQf,YAAS7B,KAAK4C,QAAQf,MAAQ7B,KAAK4C,QAAQf,KAC9E4B,EAAQiZ,EAAMjc,IAAI,SAAAoB,GAAQ,OAAA8a,GAAGlX,QAAQ5D,EAAMZ,EAAMxB,EAAKmD,QAAQd,eAE7C8a,4BAAAhT,YAAZxD,UACGuW,GAAGvV,OAAOhB,kBAAtB,OAAM2D,SAEF/J,KAAK4C,QAAQ7G,OAASiE,KAAKjE,MAAMqK,MAAkBpG,KAAKjE,MAAMqK,KACpDyD,EAAA7J,KAAKuM,SAAYoQ,GAAGrX,SAASc,kBAE3C,OAFM9K,EAAQuO,QAAA7J,MAAW+J,SAA6B3D,IAClDpG,KAAK4C,QAAQ7G,QAAOiE,KAAKjE,MAAMqK,GAAY9K,MACxCA,iBANcsO,iBAYvB,MAHMvK,EAAM,IAAIgC,MAAM,WAClB7B,QAAU,6BAA6ByB,WAAayb,MACxDrd,EAAIwd,KAAO,SACLxd,QAEFmd,uBAAN,SAAkBvb,EAAc+B,EAAcC,mGAE1B,OADZL,EAAUD,GAAUM,MACFjD,KAAKsR,YAAYrQ,EAAM2B,WAC/C,OADM6G,EAAYI,YACX7J,KAAK8J,OAAOL,EAAWzG,EAAKC,UAErCuZ,sBAAA,SAAWnf,EAAasG,GACtB,OAAO,IAAI2K,GAAMjR,EAAK2C,KAAK4C,QAAQH,gBAAgBnH,MAAMqI,IAE3D6Y,2BAAA,SAAgBlb,EAAcrC,GAC5B,OAAO+N,GAAO8P,SAASxb,EAAMrC,IAE/Bud,wBAAA,SAAalb,EAAcmL,GACzB,OAAOL,GAAI0Q,SAASxb,EAAMmL,IAE5B+P,mBAAA,SAAQO,GACN,OAAOA,EAAOxhB,KAAKyE,KAAMwc,IAE3BA,oBAAA,WACE,IAAMQ,EAAOhd,KACb,OAAO,SAAqBid,EAAkBja,EAAayK,GACzD,IAAMxK,EAAO,CAAEpB,KAAM7B,KAAK6B,MAC1Bmb,EAAKE,WAAWD,EAAUja,EAAKC,GAAMmM,KAAK,SAAA1F,GAAQ,OAAA+D,EAAG,KAAM/D,IAAO+D,MAG/D+O,UAAUA,YACC3R,GACX2R,UAAU3Q,GACV2Q,UAAUzR,GACVyR,YAAYhR,GACZgR,QAAQW"} \ No newline at end of file diff --git a/dist/parser/delimited-token.d.ts b/dist/parser/delimited-token.d.ts index f8c7ceb21..418cf3ea0 100644 --- a/dist/parser/delimited-token.d.ts +++ b/dist/parser/delimited-token.d.ts @@ -2,5 +2,5 @@ import Token from './token'; export default class DelimitedToken extends Token { trimLeft: boolean; trimRight: boolean; - constructor(raw: any, value: any, pos: any, input: any, file: any, line: any); + constructor(raw: string, value: string, input: string, line: number, pos: number, file?: string); } diff --git a/dist/parser/html-token.d.ts b/dist/parser/html-token.d.ts index 93d80762a..041e4a8fb 100644 --- a/dist/parser/html-token.d.ts +++ b/dist/parser/html-token.d.ts @@ -1,4 +1,4 @@ import Token from './token'; export default class HTMLToken extends Token { - constructor(str: any, begin: any, input: any, file: any, line: any); + constructor(str: string, input: string, line: number, col: number, file?: string); } diff --git a/dist/parser/lexical.d.ts b/dist/parser/lexical.d.ts index b8f331466..334560d89 100644 --- a/dist/parser/lexical.d.ts +++ b/dist/parser/lexical.d.ts @@ -27,9 +27,9 @@ export declare const filter: RegExp; export declare const filterCapture: RegExp; export declare const filterLine: RegExp; export declare const operators: RegExp[]; -export declare function isInteger(str: any): boolean; -export declare function isLiteral(str: any): boolean; -export declare function isRange(str: any): boolean; -export declare function isVariable(str: any): boolean; -export declare function matchValue(str: any): RegExpExecArray; -export declare function parseLiteral(str: any): any; +export declare function isInteger(str: string): boolean; +export declare function isLiteral(str: string): boolean; +export declare function isRange(str: string): boolean; +export declare function isVariable(str: string): boolean; +export declare function matchValue(str: string): RegExpExecArray | null; +export declare function parseLiteral(str: string): string | number | boolean; diff --git a/dist/parser/output-token.d.ts b/dist/parser/output-token.d.ts index 853f4ef71..1d9e43de5 100644 --- a/dist/parser/output-token.d.ts +++ b/dist/parser/output-token.d.ts @@ -1,4 +1,4 @@ import DelimitedToken from './delimited-token'; export default class OutputToken extends DelimitedToken { - constructor(raw: any, value: any, pos: any, input: any, file: any, line: any); + constructor(raw: string, value: string, input: string, line: number, pos: number, file?: string); } diff --git a/dist/parser/parse-stream.d.ts b/dist/parser/parse-stream.d.ts index 7a18b779e..a550002db 100644 --- a/dist/parser/parse-stream.d.ts +++ b/dist/parser/parse-stream.d.ts @@ -1,15 +1,14 @@ import Token from 'src/parser/token'; import ITemplate from 'src/template/itemplate'; -declare type parseToken = (token: Token, remainTokens: Array) => ITemplate; -declare type eventHandler = ((arg?: Token | ITemplate) => void); +declare type ParseToken = ((token: Token, remainTokens: Array) => ITemplate); export default class ParseStream { private tokens; private handlers; private stopRequested; private parseToken; - constructor(tokens: Array, parseToken: parseToken); - on(name: string, cb: eventHandler): this; - trigger(event: string, arg?: Token | ITemplate): boolean; + constructor(tokens: Array, parseToken: ParseToken); + on(name: string, cb: (arg: T) => void): ParseStream; + trigger(event: string, arg?: T): boolean; start(): this; stop(): this; } diff --git a/dist/parser/parser.d.ts b/dist/parser/parser.d.ts index 19991a27c..fa2b4e773 100644 --- a/dist/parser/parser.d.ts +++ b/dist/parser/parser.d.ts @@ -4,10 +4,11 @@ import Token from './token'; import Tag from 'src/template/tag/tag'; import Output from 'src/template/output'; import HTML from 'src/template/html'; +import ITemplate from 'src/template/itemplate'; export default class Parser { liquid: Liquid; constructor(liquid: Liquid); - parse(tokens: Array): any[]; + parse(tokens: Array): ITemplate[]; parseToken(token: Token, remainTokens: Array): Tag | Output | HTML; parseStream(tokens: Array): ParseStream; } diff --git a/dist/parser/tag-token.d.ts b/dist/parser/tag-token.d.ts index 3b2f02bbe..ac0d4b6d9 100644 --- a/dist/parser/tag-token.d.ts +++ b/dist/parser/tag-token.d.ts @@ -2,5 +2,5 @@ import DelimitedToken from './delimited-token'; export default class TagToken extends DelimitedToken { name: string; args: string; - constructor(raw: any, value: any, pos: any, input: any, file: any, line: any); + constructor(raw: string, value: string, input: string, line: number, pos: number, file?: string); } diff --git a/dist/parser/token.d.ts b/dist/parser/token.d.ts index 01c2f832a..22857d659 100644 --- a/dist/parser/token.d.ts +++ b/dist/parser/token.d.ts @@ -4,7 +4,7 @@ export default class Token { col: number; raw: string; input: string; - file: string; + file?: string; value: string; - constructor(raw: any, col: any, input: any, file: any, line: any); + constructor(raw: string, input: string, line: number, col: number, file?: string); } diff --git a/dist/parser/tokenizer.d.ts b/dist/parser/tokenizer.d.ts index 4d545f3c2..d55268258 100644 --- a/dist/parser/tokenizer.d.ts +++ b/dist/parser/tokenizer.d.ts @@ -1,6 +1,7 @@ +import Token from './token'; import { NormalizedFullOptions } from '../liquid-options'; export default class Tokenizer { options: NormalizedFullOptions; constructor(options?: NormalizedFullOptions); - tokenize(input: string, file?: string): any[]; + tokenize(input: string, file?: string): Token[]; } diff --git a/dist/render/render.d.ts b/dist/render/render.d.ts index f4d99a914..b097cd8cc 100644 --- a/dist/render/render.d.ts +++ b/dist/render/render.d.ts @@ -1,3 +1,5 @@ +import Scope from 'src/scope/scope'; +import ITemplate from 'src/template/itemplate'; export default class Render { - renderTemplates(templates: any, scope: any): Promise; + renderTemplates(templates: ITemplate[], scope: Scope): Promise; } diff --git a/dist/render/syntax.d.ts b/dist/render/syntax.d.ts index b69a9bb30..d97cbc4e7 100644 --- a/dist/render/syntax.d.ts +++ b/dist/render/syntax.d.ts @@ -1,4 +1,5 @@ -export declare function evalExp(exp: any, scope: any): any; -export declare function evalValue(str: any, scope: any): any; +import Scope from 'src/scope/scope'; +export declare function evalExp(exp: string, scope: Scope): any; +export declare function evalValue(str: string, scope: Scope): any; export declare function isTruthy(val: any): boolean; export declare function isFalsy(val: any): boolean; diff --git a/dist/scope/icontext.d.ts b/dist/scope/icontext.d.ts new file mode 100644 index 000000000..5b3df5e55 --- /dev/null +++ b/dist/scope/icontext.d.ts @@ -0,0 +1,4 @@ +export default interface IContext { + [key: string]: any; + liquid_method_missing?: (key: string) => any; +} diff --git a/dist/scope/scope.d.ts b/dist/scope/scope.d.ts index d1a4a413f..fa97bd8fd 100644 --- a/dist/scope/scope.d.ts +++ b/dist/scope/scope.d.ts @@ -1,18 +1,22 @@ import { NormalizedFullOptions } from '../liquid-options'; import BlockMode from './block-mode'; +import IContext from './icontext'; export default class Scope { opts: NormalizedFullOptions; - contexts: Array; + contexts: Array; blocks: object; + groups: { + [key: string]: number; + }; blockMode: BlockMode; constructor(ctx?: object, opts?: NormalizedFullOptions); - getAll(): object; + getAll(): IContext; get(path: string): any; set(path: string, v: any): void; unshift(ctx: object): number; push(ctx: object): number; - pop(ctx?: object): object; - findContextFor(key: string, filter?: ((conttext: object) => boolean)): object; - readProperty(obj: any, key: any): any; - propertyAccessSeq(str: any): any[]; + pop(ctx?: object): object | undefined; + findContextFor(key: string, filter?: ((conttext: object) => boolean)): IContext | null; + private readProperty; + propertyAccessSeq(str: string): string[]; } diff --git a/dist/template/filter/filter-impl.d.ts b/dist/template/filter/filter-impl.d.ts new file mode 100644 index 000000000..16786256a --- /dev/null +++ b/dist/template/filter/filter-impl.d.ts @@ -0,0 +1 @@ +export declare type FilterImpl = (value: any, ...args: any[]) => any; diff --git a/dist/template/filter/filter.d.ts b/dist/template/filter/filter.d.ts new file mode 100644 index 000000000..818d98713 --- /dev/null +++ b/dist/template/filter/filter.d.ts @@ -0,0 +1,13 @@ +import Scope from 'src/scope/scope'; +import { FilterImpl } from './filter-impl'; +export default class Filter { + name: string; + impl: FilterImpl; + args: string[]; + private static impls; + constructor(str: string, strictFilters?: boolean); + parseArgs(argList: string): string[]; + render(value: any, scope: Scope): any; + static register(name: string, filter: FilterImpl): void; + static clear(): void; +} diff --git a/dist/template/html.d.ts b/dist/template/html.d.ts index ab64ecbbb..50169ca39 100644 --- a/dist/template/html.d.ts +++ b/dist/template/html.d.ts @@ -1,8 +1,8 @@ import Template from 'src/template/template'; import ITemplate from 'src/template/itemplate'; -import Token from 'src/parser/token'; -export default class extends Template implements ITemplate { +import HTMLToken from 'src/parser/html-token'; +export default class extends Template implements ITemplate { str: string; - constructor(token: Token); + constructor(token: HTMLToken); render(): Promise; } diff --git a/dist/template/output.d.ts b/dist/template/output.d.ts index 5b9a92970..f1bff6b0d 100644 --- a/dist/template/output.d.ts +++ b/dist/template/output.d.ts @@ -3,7 +3,7 @@ import Template from 'src/template/template'; import ITemplate from 'src/template/itemplate'; import Scope from 'src/scope/scope'; import OutputToken from 'src/parser/output-token'; -export default class Output extends Template implements ITemplate { +export default class Output extends Template implements ITemplate { value: Value; constructor(token: OutputToken, strictFilters?: boolean); render(scope: Scope): Promise; diff --git a/dist/template/tag/block-tag.d.ts b/dist/template/tag/block-tag.d.ts new file mode 100644 index 000000000..175d73882 --- /dev/null +++ b/dist/template/tag/block-tag.d.ts @@ -0,0 +1,18 @@ +import Scope from 'src/scope/scope'; +import ITagImplOptions from './itag-impl-options'; +import Liquid from 'src/liquid'; +import Template from 'src/template/template'; +import ITemplate from 'src/template/itemplate'; +import TagToken from 'src/parser/tag-token'; +import Token from 'src/parser/token'; +export default class Tag extends Template implements ITemplate { + name: string; + private impl; + static impls: { + [key: string]: ITagImplOptions; + }; + constructor(token: TagToken, tokens: Token[], liquid: Liquid); + render(scope: Scope): Promise; + static register(name: string, tag: ITagImplOptions): void; + static clear(): void; +} diff --git a/dist/template/tag/hash.d.ts b/dist/template/tag/hash.d.ts index d2f1c5743..b2a325db1 100644 --- a/dist/template/tag/hash.d.ts +++ b/dist/template/tag/hash.d.ts @@ -1,3 +1,4 @@ +import Scope from 'src/scope/scope'; /** * Key-Value Pairs Representing Tag Arguments * Example: @@ -6,5 +7,5 @@ */ export default class Hash { [key: string]: any; - constructor(markup: any, scope: any); + constructor(markup: string, scope: Scope); } diff --git a/dist/template/tag/itag-impl.d.ts b/dist/template/tag/itag-impl.d.ts index ac483d7f6..674972aa5 100644 --- a/dist/template/tag/itag-impl.d.ts +++ b/dist/template/tag/itag-impl.d.ts @@ -2,4 +2,5 @@ import Liquid from 'src/liquid'; import ITagImplOptions from './itag-impl-options'; export default interface ITagImpl extends ITagImplOptions { liquid: Liquid; + [key: string]: any; } diff --git a/dist/template/tag/tag.d.ts b/dist/template/tag/tag.d.ts index ee8c6df93..175d73882 100644 --- a/dist/template/tag/tag.d.ts +++ b/dist/template/tag/tag.d.ts @@ -5,9 +5,8 @@ import Template from 'src/template/template'; import ITemplate from 'src/template/itemplate'; import TagToken from 'src/parser/tag-token'; import Token from 'src/parser/token'; -export default class Tag extends Template implements ITemplate { +export default class Tag extends Template implements ITemplate { name: string; - token: TagToken; private impl; static impls: { [key: string]: ITagImplOptions; diff --git a/dist/template/template.d.ts b/dist/template/template.d.ts index 5c07d73e7..a6bda3b2d 100644 --- a/dist/template/template.d.ts +++ b/dist/template/template.d.ts @@ -1,5 +1,4 @@ -import Token from 'src/parser/token'; -export default class Template { - token: Token; - constructor(token: any); +export default abstract class Template { + token: T; + constructor(token: T); } diff --git a/dist/template/value.d.ts b/dist/template/value.d.ts index dc671745a..9af16c0e2 100644 --- a/dist/template/value.d.ts +++ b/dist/template/value.d.ts @@ -1,7 +1,8 @@ +import Filter from './filter/filter'; import Scope from 'src/scope/scope'; export default class { initial: any; - filters: Array; + filters: Array; constructor(str: string, strictFilters?: boolean); value(scope: Scope): any; } diff --git a/dist/util/error.d.ts b/dist/util/error.d.ts index d27672393..5d0fd82fe 100644 --- a/dist/util/error.d.ts +++ b/dist/util/error.d.ts @@ -1,30 +1,25 @@ -declare abstract class LiquidError { - name: string; - message: string; - stack: string; - private file; - private input; +import Token from 'src/parser/token'; +import ITemplate from 'src/template/itemplate'; +declare abstract class LiquidError extends Error { private token; private originalError; - constructor(err: any, token: any); - captureStackTrace(obj: any): void; + constructor(err: Error, token: Token); + protected update(): void; } export declare class TokenizationError extends LiquidError { - constructor(message: any, token: any); + constructor(message: string, token: Token); } export declare class ParseError extends LiquidError { - constructor(err: any, token: any); + constructor(err: Error, token: Token); } export declare class RenderError extends LiquidError { - constructor(err: any, tpl: any); + constructor(err: Error, tpl: ITemplate); } -export declare class RenderBreakError { - message: string; +export declare class RenderBreakError extends Error { resolvedHTML: string; - constructor(message: any); + constructor(message: string); } -export declare class AssertionError { - message: string; - constructor(message: any); +export declare class AssertionError extends Error { + constructor(message: string); } export {}; diff --git a/dist/util/promise.d.ts b/dist/util/promise.d.ts index 205de557d..6140ae2de 100644 --- a/dist/util/promise.d.ts +++ b/dist/util/promise.d.ts @@ -1,2 +1 @@ -export declare function anySeries(iterable: any, iteratee: any): Promise; -export declare function mapSeries(iterable: any, iteratee: any): Promise; +export declare function mapSeries(iterable: T1[], iteratee: (item: T1, idx: number, iterable: T1[]) => Promise | T2): Promise; diff --git a/dist/util/strftime.d.ts b/dist/util/strftime.d.ts index 58bdffae5..8627363d5 100644 --- a/dist/util/strftime.d.ts +++ b/dist/util/strftime.d.ts @@ -1 +1 @@ -export default function (d: any, format: any): string; +export default function (d: Date, format: string): string; diff --git a/dist/util/underscore.d.ts b/dist/util/underscore.d.ts index 0d1a36ebe..a5df471c3 100644 --- a/dist/util/underscore.d.ts +++ b/dist/util/underscore.d.ts @@ -1,15 +1,21 @@ export declare function isString(value: any): boolean; export declare function isFunction(value: any): boolean; -export declare function promisify(fn: any): (...args: any[]) => Promise<{}>; +export declare function promisify(fn: (arg1: T1, cb: (err: Error | null, result: T2) => void) => void): (arg1: T1) => Promise; +export declare function promisify(fn: (arg1: T1, arg2: T2, cb: (err: Error | null, result: T3) => void) => void): (arg1: T1, arg2: T2) => Promise; export declare function stringify(value: any): string; export declare function create(proto: T1): T2; export declare function isNil(value: any): boolean; export declare function isArray(value: any): boolean; export declare function isError(value: any): boolean; -export declare function forOwn(object: any, iteratee: ((val: any, key: string, obj: object) => boolean | void)): any; -export declare function assign(obj: object, ...srcs: object[]): object; -export declare function last(arr: any[]): any; -export declare function uniq(arr: any[]): any[]; +export declare function forOwn(object: { + [key: string]: T; +} | undefined, iteratee: ((val: T, key: string, obj: { + [key: string]: T; +}) => boolean | void)): { + [key: string]: T; +}; +export declare function last(arr: T[]): T; +export declare function last(arr: string): string; export declare function isObject(value: any): boolean; -export declare function range(start: number, stop?: number, step?: number): any[]; +export declare function range(start: number, stop?: number, step?: number): number[]; export declare function padStart(str: any, length: number, ch?: string): any; diff --git a/package-lock.json b/package-lock.json index c61e33467..42482b208 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "liquidjs", - "version": "7.2.0", + "version": "7.2.1", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/package.json b/package.json index c9bfde3d7..4314bd377 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "liquidjs", - "version": "7.2.0", + "version": "7.2.1", "description": "Liquid template engine by pure JavaScript: compatible to shopify, easy to extend.", "main": "dist/liquid.common.js", "types": "dist/liquid.d.ts",