From 29f53304bc7ff76fbf8cd75c0d9da671286e8cd0 Mon Sep 17 00:00:00 2001 From: harttle Date: Tue, 19 Feb 2019 23:55:38 +0800 Subject: [PATCH] 7.0.1 --- dist/builtin/filters/array.d.ts | 12 + dist/builtin/filters/date.d.ts | 4 + dist/builtin/filters/html.d.ts | 8 + dist/builtin/filters/index.d.ts | 46 + dist/builtin/filters/math.d.ts | 12 + dist/builtin/filters/object.d.ts | 4 + dist/builtin/filters/string.d.ts | 20 + dist/builtin/filters/url.d.ts | 5 + dist/builtin/tags/assign.d.ts | 5 + dist/builtin/tags/block.d.ts | 5 + dist/builtin/tags/break.d.ts | 4 + dist/builtin/tags/capture.d.ts | 8 + dist/builtin/tags/case.d.ts | 5 + dist/builtin/tags/comment.d.ts | 4 + dist/builtin/tags/continue.d.ts | 4 + dist/builtin/tags/cycle.d.ts | 5 + dist/builtin/tags/decrement.d.ts | 7 + dist/builtin/tags/for.d.ts | 7 + dist/builtin/tags/if.d.ts | 5 + dist/builtin/tags/include.d.ts | 5 + dist/builtin/tags/increment.d.ts | 5 + dist/builtin/tags/index.d.ts | 5 + dist/builtin/tags/layout.d.ts | 5 + dist/builtin/tags/raw.d.ts | 5 + dist/builtin/tags/tablerow.d.ts | 5 + dist/builtin/tags/unless.d.ts | 5 + dist/fs/browser.d.ts | 3 + dist/fs/ifs.d.ts | 5 + dist/fs/node.d.ts | 3 + dist/liquid-options.d.ts | 29 + dist/liquid.common.js | 2568 +++++++++++----------- dist/liquid.common.js.map | 2 +- dist/liquid.d.ts | 30 + dist/liquid.js | 2485 +++++++++++---------- dist/liquid.js.map | 2 +- dist/liquid.min.js | 2 +- dist/liquid.min.js.map | 2 +- dist/parser/delimited-token.d.ts | 6 + dist/parser/html-token.d.ts | 4 + dist/parser/lexical.d.ts | 35 + dist/parser/output-token.d.ts | 4 + dist/parser/parse-stream.d.ts | 16 + dist/parser/parser.d.ts | 13 + dist/parser/tag-token.d.ts | 6 + dist/parser/token.d.ts | 9 + dist/parser/tokenizer.d.ts | 6 + dist/parser/whitespace-ctrl.d.ts | 3 + dist/render/render.d.ts | 3 + dist/render/syntax.d.ts | 4 + dist/scope/block-mode.d.ts | 5 + dist/scope/scope.d.ts | 18 + dist/scope/scopes.d.ts | 8 + dist/template/filter.d.ts | 14 + dist/template/html.d.ts | 8 + dist/template/itemplate.d.ts | 6 + dist/template/output.d.ts | 10 + dist/template/tag/hash.d.ts | 10 + dist/template/tag/itag-impl-options.d.ts | 9 + dist/template/tag/itag-impl.d.ts | 5 + dist/template/tag/tag.d.ts | 19 + dist/template/template.d.ts | 5 + dist/template/value.d.ts | 7 + dist/types.d.ts | 2 + dist/util/assert.d.ts | 1 + dist/util/error.d.ts | 31 + dist/util/promise.d.ts | 2 + dist/util/strftime.d.ts | 1 + dist/util/underscore.d.ts | 15 + package-lock.json | 2 +- package.json | 6 +- 70 files changed, 3113 insertions(+), 2516 deletions(-) create mode 100644 dist/builtin/filters/array.d.ts create mode 100644 dist/builtin/filters/date.d.ts create mode 100644 dist/builtin/filters/html.d.ts create mode 100644 dist/builtin/filters/index.d.ts create mode 100644 dist/builtin/filters/math.d.ts create mode 100644 dist/builtin/filters/object.d.ts create mode 100644 dist/builtin/filters/string.d.ts create mode 100644 dist/builtin/filters/url.d.ts create mode 100644 dist/builtin/tags/assign.d.ts create mode 100644 dist/builtin/tags/block.d.ts create mode 100644 dist/builtin/tags/break.d.ts create mode 100644 dist/builtin/tags/capture.d.ts create mode 100644 dist/builtin/tags/case.d.ts create mode 100644 dist/builtin/tags/comment.d.ts create mode 100644 dist/builtin/tags/continue.d.ts create mode 100644 dist/builtin/tags/cycle.d.ts create mode 100644 dist/builtin/tags/decrement.d.ts create mode 100644 dist/builtin/tags/for.d.ts create mode 100644 dist/builtin/tags/if.d.ts create mode 100644 dist/builtin/tags/include.d.ts create mode 100644 dist/builtin/tags/increment.d.ts create mode 100644 dist/builtin/tags/index.d.ts create mode 100644 dist/builtin/tags/layout.d.ts create mode 100644 dist/builtin/tags/raw.d.ts create mode 100644 dist/builtin/tags/tablerow.d.ts create mode 100644 dist/builtin/tags/unless.d.ts create mode 100644 dist/fs/browser.d.ts create mode 100644 dist/fs/ifs.d.ts create mode 100644 dist/fs/node.d.ts create mode 100644 dist/liquid-options.d.ts create mode 100644 dist/liquid.d.ts create mode 100644 dist/parser/delimited-token.d.ts create mode 100644 dist/parser/html-token.d.ts create mode 100644 dist/parser/lexical.d.ts create mode 100644 dist/parser/output-token.d.ts create mode 100644 dist/parser/parse-stream.d.ts create mode 100644 dist/parser/parser.d.ts create mode 100644 dist/parser/tag-token.d.ts create mode 100644 dist/parser/token.d.ts create mode 100644 dist/parser/tokenizer.d.ts create mode 100644 dist/parser/whitespace-ctrl.d.ts create mode 100644 dist/render/render.d.ts create mode 100644 dist/render/syntax.d.ts create mode 100644 dist/scope/block-mode.d.ts create mode 100644 dist/scope/scope.d.ts create mode 100644 dist/scope/scopes.d.ts create mode 100644 dist/template/filter.d.ts create mode 100644 dist/template/html.d.ts create mode 100644 dist/template/itemplate.d.ts create mode 100644 dist/template/output.d.ts create mode 100644 dist/template/tag/hash.d.ts create mode 100644 dist/template/tag/itag-impl-options.d.ts create mode 100644 dist/template/tag/itag-impl.d.ts create mode 100644 dist/template/tag/tag.d.ts create mode 100644 dist/template/template.d.ts create mode 100644 dist/template/value.d.ts create mode 100644 dist/types.d.ts create mode 100644 dist/util/assert.d.ts create mode 100644 dist/util/error.d.ts create mode 100644 dist/util/promise.d.ts create mode 100644 dist/util/strftime.d.ts create mode 100644 dist/util/underscore.d.ts diff --git a/dist/builtin/filters/array.d.ts b/dist/builtin/filters/array.d.ts new file mode 100644 index 0000000000..4e4d3f525e --- /dev/null +++ b/dist/builtin/filters/array.d.ts @@ -0,0 +1,12 @@ +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; +}; +export default _default; diff --git a/dist/builtin/filters/date.d.ts b/dist/builtin/filters/date.d.ts new file mode 100644 index 0000000000..e550781fe8 --- /dev/null +++ b/dist/builtin/filters/date.d.ts @@ -0,0 +1,4 @@ +declare const _default: { + 'date': (v: any, arg: any) => any; +}; +export default _default; diff --git a/dist/builtin/filters/html.d.ts b/dist/builtin/filters/html.d.ts new file mode 100644 index 0000000000..657ddd7bda --- /dev/null +++ b/dist/builtin/filters/html.d.ts @@ -0,0 +1,8 @@ +declare function escape(str: any): string; +declare const _default: { + 'escape': typeof escape; + 'escape_once': (str: any) => string; + 'newline_to_br': (v: any) => any; + 'strip_html': (v: any) => string; +}; +export default _default; diff --git a/dist/builtin/filters/index.d.ts b/dist/builtin/filters/index.d.ts new file mode 100644 index 0000000000..0ce3f74c4f --- /dev/null +++ b/dist/builtin/filters/index.d.ts @@ -0,0 +1,46 @@ +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; +}; +export default _default; diff --git a/dist/builtin/filters/math.d.ts b/dist/builtin/filters/math.d.ts new file mode 100644 index 0000000000..e6638054dc --- /dev/null +++ b/dist/builtin/filters/math.d.ts @@ -0,0 +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; +}; +export default _default; diff --git a/dist/builtin/filters/object.d.ts b/dist/builtin/filters/object.d.ts new file mode 100644 index 0000000000..cabe8be66d --- /dev/null +++ b/dist/builtin/filters/object.d.ts @@ -0,0 +1,4 @@ +declare const _default: { + 'default': (v: any, arg: any) => any; +}; +export default _default; diff --git a/dist/builtin/filters/string.d.ts b/dist/builtin/filters/string.d.ts new file mode 100644 index 0000000000..a447170357 --- /dev/null +++ b/dist/builtin/filters/string.d.ts @@ -0,0 +1,20 @@ +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; +}; +export default _default; diff --git a/dist/builtin/filters/url.d.ts b/dist/builtin/filters/url.d.ts new file mode 100644 index 0000000000..51e628b9ae --- /dev/null +++ b/dist/builtin/filters/url.d.ts @@ -0,0 +1,5 @@ +declare const _default: { + 'url_decode': (x: any) => any; + 'url_encode': (x: any) => any; +}; +export default _default; diff --git a/dist/builtin/tags/assign.d.ts b/dist/builtin/tags/assign.d.ts new file mode 100644 index 0000000000..243097de67 --- /dev/null +++ b/dist/builtin/tags/assign.d.ts @@ -0,0 +1,5 @@ +declare const _default: { + parse: (token: any) => void; + render: (scope: any) => Promise; +}; +export default _default; diff --git a/dist/builtin/tags/block.d.ts b/dist/builtin/tags/block.d.ts new file mode 100644 index 0000000000..977b203498 --- /dev/null +++ b/dist/builtin/tags/block.d.ts @@ -0,0 +1,5 @@ +declare const _default: { + parse: (token: any, remainTokens: any) => void; + render: (scope: any) => Promise; +}; +export default _default; diff --git a/dist/builtin/tags/break.d.ts b/dist/builtin/tags/break.d.ts new file mode 100644 index 0000000000..6fd7eb732f --- /dev/null +++ b/dist/builtin/tags/break.d.ts @@ -0,0 +1,4 @@ +declare const _default: { + render: () => Promise; +}; +export default _default; diff --git a/dist/builtin/tags/capture.d.ts b/dist/builtin/tags/capture.d.ts new file mode 100644 index 0000000000..92c1f20af3 --- /dev/null +++ b/dist/builtin/tags/capture.d.ts @@ -0,0 +1,8 @@ +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; +}; +export default _default; diff --git a/dist/builtin/tags/case.d.ts b/dist/builtin/tags/case.d.ts new file mode 100644 index 0000000000..86195dc922 --- /dev/null +++ b/dist/builtin/tags/case.d.ts @@ -0,0 +1,5 @@ +declare const _default: { + parse: (tagToken: any, remainTokens: any) => void; + render: (scope: any) => any; +}; +export default _default; diff --git a/dist/builtin/tags/comment.d.ts b/dist/builtin/tags/comment.d.ts new file mode 100644 index 0000000000..4f61dea127 --- /dev/null +++ b/dist/builtin/tags/comment.d.ts @@ -0,0 +1,4 @@ +declare const _default: { + parse: (tagToken: any, remainTokens: any) => void; +}; +export default _default; diff --git a/dist/builtin/tags/continue.d.ts b/dist/builtin/tags/continue.d.ts new file mode 100644 index 0000000000..6fd7eb732f --- /dev/null +++ b/dist/builtin/tags/continue.d.ts @@ -0,0 +1,4 @@ +declare const _default: { + render: () => Promise; +}; +export default _default; diff --git a/dist/builtin/tags/cycle.d.ts b/dist/builtin/tags/cycle.d.ts new file mode 100644 index 0000000000..a2de6069a0 --- /dev/null +++ b/dist/builtin/tags/cycle.d.ts @@ -0,0 +1,5 @@ +declare const _default: { + parse: (tagToken: any) => void; + render: (scope: any) => any; +}; +export default _default; diff --git a/dist/builtin/tags/decrement.d.ts b/dist/builtin/tags/decrement.d.ts new file mode 100644 index 0000000000..ae44aa5a66 --- /dev/null +++ b/dist/builtin/tags/decrement.d.ts @@ -0,0 +1,7 @@ +import TagToken from 'src/parser/tag-token'; +import Scope from 'src/scope/scope'; +declare const _default: { + parse: (token: TagToken) => void; + render: (scope: Scope) => number; +}; +export default _default; diff --git a/dist/builtin/tags/for.d.ts b/dist/builtin/tags/for.d.ts new file mode 100644 index 0000000000..f2edf3de65 --- /dev/null +++ b/dist/builtin/tags/for.d.ts @@ -0,0 +1,7 @@ +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; +}; +export default _default; diff --git a/dist/builtin/tags/if.d.ts b/dist/builtin/tags/if.d.ts new file mode 100644 index 0000000000..86195dc922 --- /dev/null +++ b/dist/builtin/tags/if.d.ts @@ -0,0 +1,5 @@ +declare const _default: { + parse: (tagToken: any, remainTokens: any) => void; + render: (scope: any) => any; +}; +export default _default; diff --git a/dist/builtin/tags/include.d.ts b/dist/builtin/tags/include.d.ts new file mode 100644 index 0000000000..e950ee8a0d --- /dev/null +++ b/dist/builtin/tags/include.d.ts @@ -0,0 +1,5 @@ +declare const _default: { + parse: (token: any) => void; + render: (scope: any, hash: any) => Promise; +}; +export default _default; diff --git a/dist/builtin/tags/increment.d.ts b/dist/builtin/tags/increment.d.ts new file mode 100644 index 0000000000..81908639bb --- /dev/null +++ b/dist/builtin/tags/increment.d.ts @@ -0,0 +1,5 @@ +declare const _default: { + parse: (token: any) => void; + render: (scope: any) => any; +}; +export default _default; diff --git a/dist/builtin/tags/index.d.ts b/dist/builtin/tags/index.d.ts new file mode 100644 index 0000000000..c763955b62 --- /dev/null +++ b/dist/builtin/tags/index.d.ts @@ -0,0 +1,5 @@ +import ITagImplOptions from 'src/template/tag/itag-impl-options'; +declare const tags: { + [key: string]: ITagImplOptions; +}; +export default tags; diff --git a/dist/builtin/tags/layout.d.ts b/dist/builtin/tags/layout.d.ts new file mode 100644 index 0000000000..bfcc6c2921 --- /dev/null +++ b/dist/builtin/tags/layout.d.ts @@ -0,0 +1,5 @@ +declare const _default: { + parse: (token: any, remainTokens: any) => void; + render: (scope: any, hash: any) => Promise; +}; +export default _default; diff --git a/dist/builtin/tags/raw.d.ts b/dist/builtin/tags/raw.d.ts new file mode 100644 index 0000000000..5d1a9c8498 --- /dev/null +++ b/dist/builtin/tags/raw.d.ts @@ -0,0 +1,5 @@ +declare const _default: { + parse: (tagToken: any, remainTokens: any) => void; + render: () => any; +}; +export default _default; diff --git a/dist/builtin/tags/tablerow.d.ts b/dist/builtin/tags/tablerow.d.ts new file mode 100644 index 0000000000..a21734a51f --- /dev/null +++ b/dist/builtin/tags/tablerow.d.ts @@ -0,0 +1,5 @@ +declare const _default: { + parse: (tagToken: any, remainTokens: any) => void; + render: (scope: any, hash: any) => Promise; +}; +export default _default; diff --git a/dist/builtin/tags/unless.d.ts b/dist/builtin/tags/unless.d.ts new file mode 100644 index 0000000000..86195dc922 --- /dev/null +++ b/dist/builtin/tags/unless.d.ts @@ -0,0 +1,5 @@ +declare const _default: { + parse: (tagToken: any, remainTokens: any) => void; + render: (scope: any) => any; +}; +export default _default; diff --git a/dist/fs/browser.d.ts b/dist/fs/browser.d.ts new file mode 100644 index 0000000000..f242e11865 --- /dev/null +++ b/dist/fs/browser.d.ts @@ -0,0 +1,3 @@ +import IFS from './ifs'; +declare const _default: IFS; +export default _default; diff --git a/dist/fs/ifs.d.ts b/dist/fs/ifs.d.ts new file mode 100644 index 0000000000..d13902175e --- /dev/null +++ b/dist/fs/ifs.d.ts @@ -0,0 +1,5 @@ +export default interface IFS { + exists: (filepath?: string) => Promise; + readFile: (filepath: string) => Promise; + resolve: (root: string, file: string, ext: string) => string; +} diff --git a/dist/fs/node.d.ts b/dist/fs/node.d.ts new file mode 100644 index 0000000000..aeeb97c10f --- /dev/null +++ b/dist/fs/node.d.ts @@ -0,0 +1,3 @@ +import IFS from './ifs'; +declare const fs: IFS; +export default fs; diff --git a/dist/liquid-options.d.ts b/dist/liquid-options.d.ts new file mode 100644 index 0000000000..f15fd76b98 --- /dev/null +++ b/dist/liquid-options.d.ts @@ -0,0 +1,29 @@ +export interface LiquidOptions { + /** `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 `["."]` */ + root?: string | string[]; + /** `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 `""`. */ + extname?: string; + /** `cache` indicates whether or not to cache resolved templates. Defaults to `false`. */ + cache?: boolean; + /** `dynamicPartials`: if set, treat `` parameter in `{%include filepath %}`, `{%layout filepath%}` as a variable, otherwise as a literal value. Defaults to `true`. */ + dynamicPartials?: boolean; + /** `strict_filters` is used to enable strict filter existence. If set to `false`, undefined filters will be rendered as empty string. Otherwise, undefined filters will cause an exception. Defaults to `false`. */ + strict_filters?: boolean; + /** `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`. */ + strict_variables?: boolean; + /** `trim_tag_right` is used to strip blank characters (including ` `, `\t`, and `\r`) from the right of tags (`{% %}`) until `\n` (inclusive). Defaults to `false`. */ + trim_tag_right?: boolean; + /** `trim_tag_left` is similar to `trim_tag_right`, whereas the `\n` is exclusive. Defaults to `false`. See Whitespace Control for details. */ + trim_tag_left?: boolean; + /** ``trim_value_right` is used to strip blank characters (including ` `, `\t`, and `\r`) from the right of values (`{{ }}`) until `\n` (inclusive). Defaults to `false`. */ + trim_value_right?: boolean; + /** `trim_value_left` is similar to `trim_value_right`, whereas the `\n` is exclusive. Defaults to `false`. See Whitespace Control for details. */ + trim_value_left?: boolean; + /** `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`. */ + greedy?: boolean; +} +export interface NormalizedOptions extends LiquidOptions { + root?: string[]; +} +export declare const defaultOptions: NormalizedOptions; +export declare function normalize(options: LiquidOptions): NormalizedOptions; diff --git a/dist/liquid.common.js b/dist/liquid.common.js index 99394ea198..b0717d2ddc 100644 --- a/dist/liquid.common.js +++ b/dist/liquid.common.js @@ -1,5 +1,5 @@ /* - * liquidjs@7.0.0, https://github.com/harttle/liquidjs + * liquidjs@7.0.1, https://github.com/harttle/liquidjs * (c) 2016-2019 harttle * Released under the MIT License. */ @@ -37,6 +37,17 @@ function __extends(d, b) { d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); } +var __assign = function() { + __assign = Object.assign || function __assign(t) { + for (var s, i = 1, n = arguments.length; i < n; i++) { + s = arguments[i]; + for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p]; + } + return t; + }; + return __assign.apply(this, arguments); +}; + function __awaiter(thisArg, _arguments, P, generator) { return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } @@ -102,7 +113,7 @@ function promisify(fn) { } function stringify(value) { if (isNil(value)) - return String(value); + return ''; if (isFunction(value.to_liquid)) return stringify(value.to_liquid()); if (isFunction(value.toLiquid)) @@ -179,22 +190,11 @@ 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]; } -function uniq(arr) { - var u = {}; - var a = []; - for (var i = 0, l = arr.length; i < l; ++i) { - if (u.hasOwnProperty(arr[i])) { - continue; - } - a.push(arr[i]); - u[arr[i]] = 1; - } - return a; -} /* * Checks if value is the language type of Object. * (e.g. arrays, functions, objects, regexes, new Number(0), and new String('')) @@ -224,6 +224,14 @@ function range(start, stop, step) { arr.push(i); } return arr; +} +function padStart(str, length, ch) { + if (ch === void 0) { ch = ' '; } + str = String(str); + var n = length - str.length; + while (n-- > 0) + str = ch + str; + return str; } // quote related @@ -249,7 +257,7 @@ var value = new RegExp("(?:" + variable.source + "|" + literal.source + "|" + ra var hash = new RegExp("(?:" + identifier.source + ")\\s*:\\s*(?:" + value.source + ")"); var hashCapture = new RegExp("(" + identifier.source + ")\\s*:\\s*(" + value.source + ")", 'g'); // full match -var tagLine = new RegExp("^\\s*(" + identifier.source + ")\\s*([\\s\\S]*)\\s*$"); +var tagLine = new RegExp("^\\s*(" + identifier.source + ")\\s*([\\s\\S]*?)\\s*$"); var literalLine = new RegExp("^" + literal.source + "$", 'i'); var variableLine = new RegExp("^" + variable.source + "$"); var numberLine = new RegExp("^" + number.source + "$"); @@ -315,7 +323,7 @@ var LiquidError = /** @class */ (function () { var err = this.originalError; var context = mkContext(this.input, this.line); this.message = mkMessage(err.message, this.token); - this.stack = context + + this.stack = this.message + '\n' + context + '\n' + (this.stack || this.message) + (err.stack ? '\nFrom ' + err.stack : ''); }; @@ -336,7 +344,7 @@ var ParseError = /** @class */ (function (_super) { __extends(ParseError, _super); function ParseError(err, token) { var _this = _super.call(this, err, token) || this; - assign(_this, err); + _this.message = err.message; _super.prototype.captureStackTrace.call(_this, _this); return _this; } @@ -348,7 +356,7 @@ var RenderError = /** @class */ (function (_super) { __extends(RenderError, _super); function RenderError(err, tpl) { var _this = _super.call(this, err, tpl.token) || this; - assign(_this, err); + _this.message = err.message; _super.prototype.captureStackTrace.call(_this, _this); return _this; } @@ -381,7 +389,7 @@ function mkContext(input, targetLine) { var context = range(begin, end + 1) .map(function (lineNumber) { var indicator = (lineNumber === targetLine) ? '>> ' : ' '; - var num = padStart(String(end).length, lineNumber); + var num = padStart(String(lineNumber), String(end).length); var text = lines[lineNumber - 1]; return "" + indicator + num + "| " + text; }) @@ -397,11 +405,6 @@ function mkMessage(msg, token) { msg += ', line:' + token.line; } return msg; -} -function padStart(length, str) { - str = String(str); - var blank = Array(length - str.length).join(' '); - return blank + str; } function assert (predicate, message) { @@ -411,17 +414,50 @@ function assert (predicate, message) { } } +var defaultOptions = { + root: ['.'], + cache: false, + extname: '', + dynamicPartials: true, + trim_tag_right: false, + trim_tag_left: false, + trim_value_right: false, + trim_value_left: false, + greedy: true, + strict_filters: false, + strict_variables: false +}; +function normalize(options) { + options = options || {}; + if (options.hasOwnProperty('root')) { + options.root = normalizeStringArray(options.root); + } + return options; +} +function normalizeStringArray(value) { + if (isArray(value)) + return value; + if (isString(value)) + return [value]; + return []; +} + +var BlockMode; +(function (BlockMode) { + /* store rendered html into blocks */ + BlockMode[BlockMode["OUTPUT"] = 0] = "OUTPUT"; + /* output rendered html directly */ + BlockMode[BlockMode["STORE"] = 1] = "STORE"; +})(BlockMode || (BlockMode = {})); +var BlockMode$1 = BlockMode; + var Scope = /** @class */ (function () { function Scope(ctx, opts) { if (ctx === void 0) { ctx = {}; } - var defaultOptions = { - dynamicPartials: true, - strict_variables: false, - strict_filters: false, - blocks: {}, - root: [] - }; - this.opts = assign(defaultOptions, opts); + if (opts === void 0) { opts = defaultOptions; } + this.blocks = {}; + this.blockMode = BlockMode$1.OUTPUT; + this.opts = __assign({}, defaultOptions, opts); this.contexts = [ctx || {}]; } Scope.prototype.getAll = function () { @@ -467,7 +503,7 @@ var Scope = /** @class */ (function () { return this.contexts.splice(i, 1)[0]; }; Scope.prototype.findContextFor = function (key, filter$$1) { - if (filter$$1 === void 0) { filter$$1 = (function (arg) { return true; }); } + if (filter$$1 === void 0) { filter$$1 = function () { return true; }; } for (var i = this.contexts.length - 1; i >= 0; i--) { var candidate = this.contexts[i]; if (!filter$$1(candidate)) @@ -586,80 +622,58 @@ function matchRightBracket(str, begin) { return -1; } -/* - * Call functions in serial until someone resolved. - * @param {Array} iterable the array to iterate with. - * @param {Array} iteratee returns a new promise. - * The iteratee is invoked with three arguments: (value, index, iterable). - */ -function anySeries(iterable, iteratee) { - var ret = Promise.reject(new Error('init')); - iterable.forEach(function (item, idx) { - ret = ret.catch(function (e) { return iteratee(item, idx, iterable); }); - }); - return ret; -} -/* - * Call functions in serial until someone rejected. - * @param {Array} iterable the array to iterate with. - * @param {Array} iteratee returns a new promise. - * The iteratee is invoked with three arguments: (value, index, iterable). - */ -function mapSeries(iterable, iteratee) { - var ret = Promise.resolve('init'); - var result = []; - iterable.forEach(function (item, idx) { - ret = ret - .then(function () { return iteratee(item, idx, iterable); }) - .then(function (x) { return result.push(x); }); - }); - return ret.then(function () { return result; }); -} +var CaptureScope = /** @class */ (function () { + function CaptureScope() { + } + return CaptureScope; +}()); +var AssignScope = /** @class */ (function () { + function AssignScope() { + } + return AssignScope; +}()); +var IncrementScope = /** @class */ (function () { + function IncrementScope() { + } + return IncrementScope; +}()); +var DecrementScope = /** @class */ (function () { + function DecrementScope() { + } + return DecrementScope; +}()); -var statFileAsync = promisify(fs.stat); + + +var Types = /*#__PURE__*/Object.freeze({ + AssignScope: AssignScope, + CaptureScope: CaptureScope, + IncrementScope: IncrementScope, + DecrementScope: DecrementScope, + ParseError: ParseError, + TokenizationError: TokenizationError, + RenderBreakError: RenderBreakError, + AssertionError: AssertionError +}); + +var statAsync = promisify(fs.stat); var readFileAsync = promisify(fs.readFile); -function resolve(filepath, root, options) { - return __awaiter(this, void 0, void 0, function () { - var paths; - var _this = this; - return __generator(this, function (_a) { - if (!path.extname(filepath)) { - filepath += options.extname; - } - root = options.root.concat(root || []); - root = uniq(root); - paths = root.map(function (root) { return path.resolve(root, filepath); }); - return [2 /*return*/, anySeries(paths, function (path$$1) { return __awaiter(_this, void 0, void 0, function () { - var e_1; - return __generator(this, function (_a) { - switch (_a.label) { - case 0: - _a.trys.push([0, 2, , 3]); - return [4 /*yield*/, statFileAsync(path$$1)]; - case 1: - _a.sent(); - return [2 /*return*/, path$$1]; - case 2: - e_1 = _a.sent(); - e_1.message = e_1.code + ": Failed to lookup " + filepath + " in: " + root; - throw e_1; - case 3: return [2 /*return*/]; - } - }); - }); })]; - }); - }); -} -function read(filepath) { - return __awaiter(this, void 0, void 0, function () { - return __generator(this, function (_a) { - return [2 /*return*/, readFileAsync(filepath, 'utf8')]; - }); - }); -} +var fs$1 = { + exists: function (filepath) { + return statAsync(filepath).then(function () { return true; }).catch(function () { return false; }); + }, + readFile: function (filepath) { + return readFileAsync(filepath, 'utf8'); + }, + resolve: function (root, file, ext) { + if (!path.extname(file)) + file += ext; + return path.resolve(root, file); + } +}; function whiteSpaceCtrl(tokens, options) { - options = assign({ greedy: true }, options); + options = __assign({ greedy: true }, options); var inRaw = false; tokens.forEach(function (token, i) { if (shouldTrimLeft(token, inRaw, options)) { @@ -678,17 +692,17 @@ function shouldTrimLeft(token, inRaw, options) { if (inRaw) return false; if (token.type === 'tag') - return token.trim_left || options.trim_tag_left; - if (token.type === 'value') - return token.trim_left || options.trim_value_left; + return token.trimLeft || options.trim_tag_left; + if (token.type === 'output') + return token.trimLeft || options.trim_value_left; } function shouldTrimRight(token, inRaw, options) { if (inRaw) return false; if (token.type === 'tag') - return token.trim_right || options.trim_tag_right; - if (token.type === 'value') - return token.trim_right || options.trim_value_right; + return token.trimRight || options.trim_tag_right; + if (token.type === 'output') + return token.trimRight || options.trim_value_right; } function trimLeft(token, greedy) { if (!token || token.type !== 'html') @@ -703,102 +717,185 @@ function trimRight(token, greedy) { token.value = token.value.replace(rRight, ''); } -function parse(input, file, options) { - assert(isString(input), 'illegal input'); - var rLiquid = /({%-?([\s\S]*?)-?%})|({{-?([\s\S]*?)-?}})/g; - var currIndent = 0; - var lineNumber = LineNumber(input); - var lastMatchEnd = 0; - var tokens = []; - for (var match = void 0; (match = rLiquid.exec(input)); lastMatchEnd = rLiquid.lastIndex) { - if (match.index > lastMatchEnd) { - tokens.push(parseHTMLToken(lastMatchEnd, match.index)); - } - tokens.push(match[1] - ? parseTagToken(match[1], match[2].trim(), match.index) - : parseValueToken(match[3], match[4].trim(), match.index)); - } - if (input.length > lastMatchEnd) { - tokens.push(parseHTMLToken(lastMatchEnd, input.length)); - } - whiteSpaceCtrl(tokens, options); - return tokens; - function parseTagToken(raw, value$$1, pos) { - var match = value$$1.match(tagLine); - var token = { - type: 'tag', - indent: currIndent, - line: lineNumber.get(pos), - trim_left: raw.slice(0, 3) === '{%-', - trim_right: raw.slice(-3) === '-%}', - raw: raw, - value: value$$1, - input: input, - file: file - }; +var Token = /** @class */ (function () { + function Token(raw, pos, input, file, line) { + this.line = line; + this.raw = raw; + this.input = input; + this.file = file; + } + return Token; +}()); + +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; + _this.type = 'html'; + _this.value = str; + return _this; + } + return HTMLToken; +}(Token)); + +var DelimitedToken = /** @class */ (function (_super) { + __extends(DelimitedToken, _super); + function DelimitedToken(raw, pos, input, file, line) { + var _this = _super.call(this, raw, pos, input, file, line) || this; + _this.trimLeft = raw[2] === '-'; + _this.trimRight = raw[raw.length - 3] === '-'; + _this.value = raw.slice(_this.trimLeft ? 3 : 2, _this.trimRight ? -3 : -2).trim(); + return _this; + } + return DelimitedToken; +}(Token)); + +var TagToken = /** @class */ (function (_super) { + __extends(TagToken, _super); + function TagToken(raw, pos, input, file, line) { + var _this = _super.call(this, raw, pos, input, file, line) || this; + _this.type = 'tag'; + var match = _this.value.match(tagLine); if (!match) { - throw new TokenizationError("illegal tag syntax", token); + throw new TokenizationError("illegal tag syntax", _this); } - token.name = match[1]; - token.args = match[2]; - return token; - } - function parseValueToken(raw, value$$1, pos) { - return { - type: 'value', - line: lineNumber.get(pos), - trim_left: raw.slice(0, 3) === '{{-', - trim_right: raw.slice(-3) === '-}}', - raw: raw, - value: value$$1, - input: input, - file: file - }; + _this.name = match[1]; + _this.args = match[2]; + return _this; } - function parseHTMLToken(begin, end) { - var htmlFragment = input.slice(begin, end); - currIndent = last((htmlFragment).split('\n')).length; - return { - type: 'html', - raw: htmlFragment, - value: htmlFragment - }; + return TagToken; +}(DelimitedToken)); + +var OutputToken = /** @class */ (function (_super) { + __extends(OutputToken, _super); + function OutputToken(raw, pos, input, file, line) { + var _this = _super.call(this, raw, pos, input, file, line) || this; + _this.type = 'output'; + return _this; } -} -function LineNumber(html) { - var parsedLinesCount = 0; - var lastMatchBegin = -1; - return { - get: function (pos) { - var lines = html.slice(lastMatchBegin + 1, pos).split('\n'); - parsedLinesCount += lines.length - 1; - lastMatchBegin = pos; - return parsedLinesCount + 1; + return OutputToken; +}(DelimitedToken)); + +var ParseState; +(function (ParseState) { + ParseState[ParseState["HTML"] = 0] = "HTML"; + ParseState[ParseState["OUTPUT"] = 1] = "OUTPUT"; + ParseState[ParseState["TAG"] = 2] = "TAG"; +})(ParseState || (ParseState = {})); +var Tokenizer = /** @class */ (function () { + function Tokenizer(options) { + if (options === void 0) { options = defaultOptions; } + this.options = options; + } + Tokenizer.prototype.tokenize = function (input, file) { + var tokens = []; + var p = 0; + var line = 1; + var state = ParseState.HTML; + var buffer = ''; + var bufferBegin = 0; + while (p < input.length) { + if (input[p] === '\n') + line++; + var bin = input.substr(p, 2); + if (state === ParseState.HTML) { + if (bin === '{{' || bin === '{%') { + if (buffer) + tokens.push(new HTMLToken(buffer, bufferBegin, input, file, line)); + buffer = bin; + bufferBegin = p; + p += 2; + state = bin === '{{' ? ParseState.OUTPUT : ParseState.TAG; + continue; + } + } + else if (state === ParseState.OUTPUT && bin === '}}') { + buffer += '}}'; + tokens.push(new OutputToken(buffer, bufferBegin, input, file, line)); + p += 2; + buffer = ''; + bufferBegin = p; + state = ParseState.HTML; + continue; + } + else if (bin === '%}') { + buffer += '%}'; + tokens.push(new TagToken(buffer, bufferBegin, input, file, line)); + p += 2; + buffer = ''; + bufferBegin = p; + state = ParseState.HTML; + continue; + } + buffer += input[p++]; } + if (buffer) + tokens.push(new HTMLToken(buffer, bufferBegin, input, file, line)); + whiteSpaceCtrl(tokens, this.options); + return tokens; }; -} + return Tokenizer; +}()); -function Operators (isTruthy) { - return { - '==': function (l, r) { return l === r; }, - '!=': function (l, r) { return l !== r; }, - '>': function (l, r) { return l !== null && r !== null && l > r; }, - '<': function (l, r) { return l !== null && r !== null && l < r; }, - '>=': function (l, r) { return l !== null && r !== null && l >= r; }, - '<=': function (l, r) { return l !== null && r !== null && l <= r; }, - 'contains': function (l, r) { - if (!l) - return false; - if (typeof l.indexOf !== 'function') - return false; - return l.indexOf(r) > -1; - }, - 'and': function (l, r) { return isTruthy(l) && isTruthy(r); }, - 'or': function (l, r) { return isTruthy(l) || isTruthy(r); } +var Render = /** @class */ (function () { + function Render() { + } + Render.prototype.renderTemplates = function (templates, scope) { + return __awaiter(this, void 0, void 0, function () { + var html, _i, templates_1, tpl, _a, e_1; + return __generator(this, function (_b) { + switch (_b.label) { + case 0: + assert(scope, 'unable to evalTemplates: scope undefined'); + html = ''; + _i = 0, templates_1 = templates; + _b.label = 1; + case 1: + if (!(_i < templates_1.length)) return [3 /*break*/, 6]; + tpl = templates_1[_i]; + _b.label = 2; + case 2: + _b.trys.push([2, 4, , 5]); + _a = html; + return [4 /*yield*/, tpl.render(scope)]; + case 3: + html = _a + _b.sent(); + return [3 /*break*/, 5]; + case 4: + e_1 = _b.sent(); + if (e_1 instanceof RenderBreakError) { + e_1.resolvedHTML = html; + throw e_1; + } + throw e_1 instanceof RenderError ? e_1 : new RenderError(e_1, tpl); + case 5: + _i++; + return [3 /*break*/, 1]; + case 6: return [2 /*return*/, html]; + } + }); + }); }; -} + return Render; +}()); -var operators$1 = Operators(isTruthy); +var operators$1 = { + '==': function (l, r) { return l === r; }, + '!=': function (l, r) { return l !== r; }, + '>': function (l, r) { return l !== null && r !== null && l > r; }, + '<': function (l, r) { return l !== null && r !== null && l < r; }, + '>=': function (l, r) { return l !== null && r !== null && l >= r; }, + '<=': function (l, r) { return l !== null && r !== null && l <= r; }, + 'contains': function (l, r) { + if (!l) + return false; + if (typeof l.indexOf !== 'function') + return false; + return l.indexOf(r) > -1; + }, + 'and': function (l, r) { return isTruthy(l) && isTruthy(r); }, + 'or': function (l, r) { return isTruthy(l) || isTruthy(r); } +}; function evalExp(exp, scope) { assert(scope, 'unable to evalExp: scope undefined'); var operatorREs = operators; @@ -843,953 +940,1009 @@ function isFalsy(val) { return val === false || undefined === val || val === null; } -var render = { - renderTemplates: function (templates, scope) { +/** + * Key-Value Pairs Representing Tag Arguments + * Example: + * For the markup `{% include 'head.html' foo='bar' %}`, + * hash['foo'] === 'bar' + */ +var Hash = /** @class */ (function () { + function Hash(markup, scope) { + var match; + hashCapture.lastIndex = 0; + while ((match = hashCapture.exec(markup))) { + var k = match[1]; + var v = match[2]; + this[k] = evalValue(v, scope); + } + } + return Hash; +}()); + +var Template = /** @class */ (function () { + function Template(token) { + this.token = token; + } + return Template; +}()); + +var Tag = /** @class */ (function (_super) { + __extends(Tag, _super); + function Tag(token, tokens, liquid) { + var _this = _super.call(this, token) || this; + _this.name = token.name; + var impl = Tag.impls[token.name]; + assert(impl, "tag " + token.name + " not found"); + _this.impl = create(impl); + _this.impl.liquid = liquid; + if (_this.impl.parse) { + _this.impl.parse(token, tokens); + } + return _this; + } + Tag.prototype.render = function (scope) { return __awaiter(this, void 0, void 0, function () { - function renderTemplate(template) { - return __awaiter(this, void 0, void 0, function () { - var partial; - return __generator(this, function (_a) { - switch (_a.label) { - case 0: - if (!(template.type === 'tag')) return [3 /*break*/, 2]; - return [4 /*yield*/, this.renderTag(template, scope)]; - case 1: - partial = _a.sent(); - return [2 /*return*/, partial === undefined ? '' : partial]; - case 2: - if (template.type === 'value') { - return [2 /*return*/, this.renderValue(template, scope)]; - } - return [2 /*return*/, template.value]; - } - }); - }); - } - var html, _i, templates_1, tpl, _a, e_1; - return __generator(this, function (_b) { - switch (_b.label) { + var hash, impl, html; + return __generator(this, function (_a) { + switch (_a.label) { case 0: - assert(scope, 'unable to evalTemplates: scope undefined'); - html = ''; - _i = 0, templates_1 = templates; - _b.label = 1; - case 1: - if (!(_i < templates_1.length)) return [3 /*break*/, 6]; - tpl = templates_1[_i]; - _b.label = 2; - case 2: - _b.trys.push([2, 4, , 5]); - _a = html; - return [4 /*yield*/, renderTemplate.call(this, tpl)]; - case 3: - html = _a + _b.sent(); - return [3 /*break*/, 5]; - case 4: - e_1 = _b.sent(); - if (e_1 instanceof RenderBreakError) { - e_1.resolvedHTML = html; - throw e_1; + hash = new Hash(this.token.args, scope); + impl = this.impl; + if (typeof impl.render !== 'function') { + return [2 /*return*/, '']; } - throw e_1 instanceof RenderError ? e_1 : new RenderError(e_1, tpl); - case 5: - _i++; - return [3 /*break*/, 1]; - case 6: return [2 /*return*/, html]; + return [4 /*yield*/, impl.render(scope, hash)]; + case 1: + html = _a.sent(); + return [2 /*return*/, stringify(html)]; } }); }); - }, - renderTag: function (template, scope) { + }; + Tag.register = function (name, tag) { + Tag.impls[name] = tag; + }; + Tag.clear = function () { + Tag.impls = {}; + }; + Tag.impls = {}; + return Tag; +}(Template)); + +var valueRE = new RegExp("" + value.source, 'g'); +var Filter = /** @class */ (function () { + function Filter(str, strictFilters) { + if (strictFilters === void 0) { strictFilters = false; } + var match = filterLine.exec(str); + assert(match, 'illegal filter: ' + str); + var name = match[1]; + var argList = match[2] || ''; + var impl = Filter.impls[name]; + if (!impl && strictFilters) + throw new TypeError("undefined filter: " + name); + this.name = name; + this.impl = impl || (function (x) { return x; }); + this.args = this.parseArgs(argList); + } + Filter.prototype.parseArgs = function (argList) { + var match; + var args = []; + while ((match = valueRE.exec(argList.trim()))) { + var v = match[0]; + var re = new RegExp(v + "\\s*:", 'g'); + var keyMatch = re.exec(match.input); + var currentMatchIsKey = keyMatch && keyMatch.index === match.index; + currentMatchIsKey ? args.push("'" + v + "'") : args.push(v); + } + return args; + }; + 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); + }; + Filter.register = function (name, filter$$1) { + Filter.impls[name] = filter$$1; + }; + Filter.clear = function () { + Filter.impls = {}; + }; + Filter.impls = {}; + return Filter; +}()); + +var ParseStream = /** @class */ (function () { + function ParseStream(tokens, parseToken) { + this.handlers = {}; + this.tokens = tokens; + this.parseToken = parseToken; + } + ParseStream.prototype.on = function (name, cb) { + this.handlers[name] = cb; + return this; + }; + ParseStream.prototype.trigger = function (event, arg) { + var h = this.handlers[event]; + if (typeof h === 'function') { + h(arg); + return true; + } + }; + ParseStream.prototype.start = function () { + this.trigger('start'); + var token; + while (!this.stopRequested && (token = this.tokens.shift())) { + if (this.trigger('token', token)) + continue; + if (token.type === 'tag' && + this.trigger("tag:" + token.name, token)) { + continue; + } + var template = this.parseToken(token, this.tokens); + this.trigger('template', template); + } + if (!this.stopRequested) + this.trigger('end'); + return this; + }; + ParseStream.prototype.stop = function () { + this.stopRequested = true; + return this; + }; + return ParseStream; +}()); + +var default_1 = /** @class */ (function () { + function default_1(str, strictFilters) { + var match = matchValue(str); + assert(match, "illegal value string: " + str); + var initial = match[0]; + str = str.substr(match.index + match[0].length); + var filters = []; + while ((match = filter.exec(str))) { + filters.push([match[0].trim()]); + } + 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)); + }; + return default_1; +}()); + +var Output = /** @class */ (function (_super) { + __extends(Output, _super); + function Output(token, strictFilters) { + var _this = _super.call(this, token) || this; + _this.value = new default_1(token.value, strictFilters); + return _this; + } + Output.prototype.render = function (scope) { return __awaiter(this, void 0, void 0, function () { + var html; return __generator(this, function (_a) { - if (template.name === 'continue') { - throw new RenderBreakError('continue'); - } - if (template.name === 'break') { - throw new RenderBreakError('break'); + switch (_a.label) { + case 0: return [4 /*yield*/, this.value.value(scope)]; + case 1: + html = _a.sent(); + return [2 /*return*/, stringify(html)]; } - return [2 /*return*/, template.render(scope)]; }); }); - }, - renderValue: function (template, scope) { + }; + return Output; +}(Template)); + +var default_1$1 = /** @class */ (function (_super) { + __extends(default_1, _super); + function default_1(token) { + var _this = _super.call(this, token) || this; + _this.str = token.value; + return _this; + } + default_1.prototype.render = function () { return __awaiter(this, void 0, void 0, function () { - var partial; return __generator(this, function (_a) { - partial = this.evalValue(template, scope); - return [2 /*return*/, partial === undefined ? '' : stringify(partial)]; + return [2 /*return*/, this.str]; }); }); - }, - evalValue: function (template, scope) { - assert(scope, 'unable to evalValue: scope undefined'); - return template.filters.reduce(function (prev, filter) { return filter.render(prev, scope); }, evalExp(template.initial, scope)); - } -}; -function Render () { - var instance = create(render); - return instance; -} + }; + return default_1; +}(Template)); -function hash$1(markup, scope) { - var obj = {}; - var match; - hashCapture.lastIndex = 0; - while ((match = hashCapture.exec(markup))) { - var k = match[1]; - var v = match[2]; - obj[k] = evalValue(v, scope); +var Parser = /** @class */ (function () { + function Parser(liquid) { + this.liquid = liquid; } - return obj; -} -function Tag () { - var tagImpls = {}; - var _tagInstance = { - render: function (scope) { - return __awaiter(this, void 0, void 0, function () { - var obj, impl; - return __generator(this, function (_a) { - obj = hash$1(this.token.args, scope); - impl = this.tagImpl; - if (typeof impl.render !== 'function') { - return [2 /*return*/, '']; - } - return [2 /*return*/, impl.render(scope, obj)]; - }); - }); - }, - parse: function (token, tokens) { - this.type = 'tag'; - this.token = token; - this.name = token.name; - var tagImpl = tagImpls[this.name]; - assert(tagImpl, "tag " + this.name + " not found"); - this.tagImpl = create(tagImpl); - if (this.tagImpl.parse) { - this.tagImpl.parse(token, tokens); + Parser.prototype.parse = function (tokens) { + var token; + var templates = []; + while ((token = tokens.shift())) { + templates.push(this.parseToken(token, tokens)); + } + return templates; + }; + Parser.prototype.parseToken = function (token, remainTokens) { + try { + if (token.type === 'tag') { + return new Tag(token, remainTokens, this.liquid); } + if (token.type === 'output') { + return new Output(token, this.liquid.options.strict_filters); + } + return new default_1$1(token); + } + catch (e) { + throw new ParseError(e, token); } }; - function register(name, tag) { - tagImpls[name] = tag; - } - function construct(token, tokens) { - var instance = create(_tagInstance); - instance.parse(token, tokens); - return instance; - } - function clear() { - tagImpls = {}; - } - return { - construct: construct, - register: register, - clear: clear + Parser.prototype.parseStream = function (tokens) { + var _this = this; + return new ParseStream(tokens, function (token, tokens) { return _this.parseToken(token, tokens); }); }; + return Parser; +}()); + +var re = new RegExp("(" + identifier.source + ")\\s*=([^]*)"); +var assign$1 = { + parse: function (token) { + var match = token.args.match(re); + assert(match, "illegal token " + token.raw); + this.key = match[1]; + this.value = match[2]; + }, + render: function (scope) { + var ctx = new AssignScope(); + ctx[this.key] = this.liquid.evalValue(this.value, scope); + scope.push(ctx); + return Promise.resolve(''); + } +}; + +/* + * 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. + * @param {Array} iteratee returns a new promise. + * The iteratee is invoked with three arguments: (value, index, iterable). + */ +function mapSeries(iterable, iteratee) { + var ret = Promise.resolve('init'); + var result = []; + iterable.forEach(function (item, idx) { + ret = ret + .then(function () { return iteratee(item, idx, iterable); }) + .then(function (x) { return result.push(x); }); + }); + return ret.then(function () { return result; }); } -var valueRE = new RegExp("" + value.source, 'g'); -function Filter (options) { - options = assign({}, options); - var filters = {}; - var _filterInstance = { - render: function (output, scope) { - var args = this.args.map(function (arg) { return evalValue(arg, scope); }); - args.unshift(output); - return this.filter.apply(null, args); - }, - parse: function (str) { - var match = filterLine.exec(str); - assert(match, 'illegal filter: ' + str); - var name = match[1]; - var argList = match[2] || ''; - var filter$$1 = filters[name]; - if (typeof filter$$1 !== 'function') { - if (options.strict_filters) { - throw new TypeError("undefined filter: " + name); - } - this.name = name; - this.filter = function (x) { return x; }; - this.args = []; - return this; +var re$1 = new RegExp("^(" + identifier.source + ")\\s+in\\s+" + + ("(" + value.source + ")") + + ("(?:\\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 _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 args = []; - while ((match = valueRE.exec(argList.trim()))) { - var v = match[0]; - var re = new RegExp(v + "\\s*:", 'g'); - var keyMatch = re.exec(match.input); - var currentMatchIsKey = keyMatch && keyMatch.index === match.index; - currentMatchIsKey ? args.push("'" + v + "'") : args.push(v); + }); + }); +} +var For = { parse: parse, render: render }; + +var re$2 = new RegExp("(" + identifier.source + ")"); +var capture = { + parse: function (tagToken, remainTokens) { + var _this = this; + var match = tagToken.args.match(re$2); + assert(match, tagToken.args + " not valid identifier"); + this.variable = match[1]; + this.templates = []; + var stream = this.liquid.parser.parseStream(remainTokens); + stream.on('tag:endcapture', function () { return stream.stop(); }) + .on('template', function (tpl) { return _this.templates.push(tpl); }) + .on('end', function () { + throw new Error("tag " + tagToken.raw + " not closed"); + }); + stream.start(); + }, + render: function (scope) { + return __awaiter(this, void 0, void 0, function () { + var html, ctx; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: return [4 /*yield*/, this.liquid.renderer.renderTemplates(this.templates, scope)]; + case 1: + html = _a.sent(); + ctx = new CaptureScope(); + ctx[this.variable] = html; + scope.push(ctx); + return [2 /*return*/]; + } + }); + }); + } +}; + +var Case = { + parse: function (tagToken, remainTokens) { + var _this = this; + this.cond = tagToken.args; + this.cases = []; + this.elseTemplates = []; + var p = []; + var stream = this.liquid.parser.parseStream(remainTokens) + .on('tag:when', function (token) { + _this.cases.push({ + val: token.args, + templates: p = [] + }); + }) + .on('tag:else', function () { return (p = _this.elseTemplates); }) + .on('tag:endcase', 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(); + }, + render: function (scope) { + for (var i = 0; i < this.cases.length; i++) { + var branch = this.cases[i]; + var val = evalExp(branch.val, scope); + var cond = evalExp(this.cond, scope); + if (val === cond) { + return this.liquid.renderer.renderTemplates(branch.templates, scope); } - this.name = name; - this.filter = filter$$1; - this.args = args; - return this; } - }; - function construct(str) { - var instance = create(_filterInstance); - return instance.parse(str); - } - function register(name, filter$$1) { - filters[name] = filter$$1; + return this.liquid.renderer.renderTemplates(this.elseTemplates, scope); } - function clear() { - filters = {}; +}; + +var comment = { + parse: function (tagToken, remainTokens) { + var stream = this.liquid.parser.parseStream(remainTokens); + stream + .on('token', function (token) { + if (token.name === 'endcomment') + stream.stop(); + }) + .on('end', function () { + throw new Error("tag " + tagToken.raw + " not closed"); + }); + stream.start(); } - return { - construct: construct, register: register, clear: clear - }; -} +}; -function Parser (Tag, Filter) { - var ParseStream = /** @class */ (function () { - function ParseStream(tokens) { - this.tokens = tokens; - this.handlers = {}; +var staticFileRE = /[^\s,]+/; +var withRE = new RegExp("with\\s+(" + value.source + ")"); +var include = { + parse: function (token) { + var match = staticFileRE.exec(token.args); + if (match) { + this.staticValue = match[0]; } - ParseStream.prototype.on = function (name, cb) { - this.handlers[name] = cb; - return this; - }; - ParseStream.prototype.trigger = function (event, arg) { - var h = this.handlers[event]; - if (typeof h === 'function') { - h(arg); - return true; - } - }; - ParseStream.prototype.start = function () { - this.trigger('start'); - var token; - while (!this.stopRequested && (token = this.tokens.shift())) { - if (this.trigger('token', token)) - continue; - if (token.type === 'tag' && - this.trigger("tag:" + token.name, token)) { - continue; + match = value.exec(token.args); + if (match) { + this.value = match[0]; + } + match = withRE.exec(token.args); + if (match) { + this.with = match[1]; + } + }, + render: function (scope, hash$$1) { + return __awaiter(this, void 0, void 0, function () { + var filepath, template, originBlocks, originBlockMode, templates, html; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: + if (!scope.opts.dynamicPartials) return [3 /*break*/, 4]; + if (!quotedLine.exec(this.value)) return [3 /*break*/, 2]; + template = this.value.slice(1, -1); + return [4 /*yield*/, this.liquid.parseAndRender(template, scope.getAll(), scope.opts)]; + case 1: + filepath = _a.sent(); + return [3 /*break*/, 3]; + case 2: + filepath = evalValue(this.value, scope); + _a.label = 3; + case 3: return [3 /*break*/, 5]; + case 4: + filepath = this.staticValue; + _a.label = 5; + case 5: + assert(filepath, "cannot include with empty filename"); + originBlocks = scope.blocks; + originBlockMode = scope.blockMode; + scope.blocks = {}; + scope.blockMode = BlockMode$1.OUTPUT; + if (this.with) { + hash$$1[filepath] = evalValue(this.with, scope); + } + return [4 /*yield*/, this.liquid.getTemplate(filepath, scope.opts)]; + case 6: + templates = _a.sent(); + scope.push(hash$$1); + return [4 /*yield*/, this.liquid.renderer.renderTemplates(templates, scope)]; + case 7: + html = _a.sent(); + scope.pop(hash$$1); + scope.blocks = originBlocks; + scope.blockMode = originBlockMode; + return [2 /*return*/, html]; } - var template = parseToken(token, this.tokens); - this.trigger('template', template); - } - if (!this.stopRequested) - this.trigger('end'); - return this; - }; - ParseStream.prototype.stop = function () { - this.stopRequested = true; - return this; - }; - return ParseStream; - }()); - function parse(tokens) { - var token; - var templates = []; - while ((token = tokens.shift())) { - templates.push(parseToken(token, tokens)); + }); + }); + } +}; + +var decrement = { + parse: function (token) { + var match = token.args.match(identifier); + assert(match, "illegal identifier " + token.args); + this.variable = match[0]; + }, + render: function (scope) { + var context = scope.findContextFor(this.variable, function (ctx) { + return !(ctx instanceof CaptureScope) && !(ctx instanceof AssignScope); + }); + if (!context) { + context = new DecrementScope(); + scope.unshift(context); } - return templates; + if (typeof context[this.variable] !== 'number') { + context[this.variable] = 0; + } + return --context[this.variable]; } - function parseToken(token, tokens) { - try { - var tpl = null; - if (token.type === 'tag') { - tpl = parseTag(token, tokens); - } - else if (token.type === 'value') { - tpl = parseValue(token.value); - } - else { // token.type === 'html' - tpl = token; - } - tpl.token = token; - return tpl; +}; + +var groupRE = new RegExp("^(?:(" + value.source + ")\\s*:\\s*)?(.*)$"); +var candidatesRE = new RegExp(value.source, 'g'); +var cycle = { + parse: function (tagToken) { + var match = groupRE.exec(tagToken.args); + assert(match, "illegal tag: " + tagToken.raw); + this.group = match[1] || ''; + var candidates = match[2]; + this.candidates = []; + while ((match = candidatesRE.exec(candidates))) { + this.candidates.push(match[0]); } - catch (e) { - throw new ParseError(e, token); + assert(this.candidates.length, "empty candidates: " + tagToken.raw); + }, + 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 idx = groups[fingerprint]; + if (idx === undefined) { + idx = groups[fingerprint] = 0; } + var candidate = this.candidates[idx]; + idx = (idx + 1) % this.candidates.length; + groups[fingerprint] = idx; + return evalValue(candidate, scope); } - function parseTag(token, tokens) { - if (token.name === 'continue' || token.name === 'break') - return token; - return Tag.construct(token, tokens); +}; + +var If = { + parse: function (tagToken, remainTokens) { + var _this = this; + this.branches = []; + this.elseTemplates = []; + var p; + var stream = this.liquid.parser.parseStream(remainTokens) + .on('start', function () { return _this.branches.push({ + cond: tagToken.args, + templates: (p = []) + }); }) + .on('tag:elsif', function (token) { + _this.branches.push({ + cond: token.args, + templates: p = [] + }); + }) + .on('tag:else', function () { return (p = _this.elseTemplates); }) + .on('tag:endif', 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(); + }, + render: function (scope) { + for (var _i = 0, _a = this.branches; _i < _a.length; _i++) { + var branch = _a[_i]; + var cond = evalExp(branch.cond, scope); + if (isTruthy(cond)) { + return this.liquid.renderer.renderTemplates(branch.templates, scope); + } + } + return this.liquid.renderer.renderTemplates(this.elseTemplates, scope); } - function parseValue(str) { - var match = matchValue(str); - assert(match, "illegal value string: " + str); - var initial = match[0]; - str = str.substr(match.index + match[0].length); - var filters = []; - while ((match = filter.exec(str))) { - filters.push([match[0].trim()]); +}; + +var increment = { + parse: function (token) { + var match = token.args.match(identifier); + assert(match, "illegal identifier " + token.args); + this.variable = match[0]; + }, + render: function (scope) { + var context = scope.findContextFor(this.variable, function (ctx) { + return !(ctx instanceof CaptureScope) && !(ctx instanceof AssignScope); + }); + if (!context) { + context = new IncrementScope(); + scope.unshift(context); } - return { - type: 'value', - initial: initial, - filters: filters.map(function (str) { return Filter.construct(str); }) - }; + if (typeof context[this.variable] !== 'number') { + context[this.variable] = 0; + } + var val = context[this.variable]; + context[this.variable]++; + return val; } - function parseStream(tokens) { - return new ParseStream(tokens); +}; + +var staticFileRE$1 = /\S+/; +var layout = { + parse: function (token, remainTokens) { + var match = staticFileRE$1.exec(token.args); + if (match) { + this.staticLayout = match[0]; + } + match = value.exec(token.args); + if (match) { + this.layout = match[0]; + } + this.tpls = this.liquid.parser.parse(remainTokens); + }, + render: function (scope, hash$$1) { + return __awaiter(this, void 0, void 0, function () { + var layout, html, templates, partial; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: + layout = scope.opts.dynamicPartials + ? evalValue(this.layout, scope) + : this.staticLayout; + assert(layout, "cannot apply layout with empty filename"); + // render the remaining tokens immediately + scope.blockMode = BlockMode$1.STORE; + return [4 /*yield*/, this.liquid.renderer.renderTemplates(this.tpls, scope)]; + case 1: + html = _a.sent(); + if (scope.blocks[''] === undefined) { + scope.blocks[''] = html; + } + return [4 /*yield*/, this.liquid.getTemplate(layout, scope.opts)]; + case 2: + templates = _a.sent(); + scope.push(hash$$1); + scope.blockMode = BlockMode$1.OUTPUT; + return [4 /*yield*/, this.liquid.renderer.renderTemplates(templates, scope)]; + case 3: + partial = _a.sent(); + scope.pop(hash$$1); + return [2 /*return*/, partial]; + } + }); + }); } - return { - parse: parse, - parseTag: parseTag, - parseStream: parseStream, - parseValue: parseValue - }; -} +}; -function For (liquid, Liquid) { - var RenderBreakError = Liquid.Types.RenderBreakError; - var re = new RegExp("^(" + identifier.source + ")\\s+in\\s+" + - ("(" + value.source + ")") + - ("(?:\\s+" + hash.source + ")*") + - "(?:\\s+(reversed))?" + - ("(?:\\s+" + hash.source + ")*$")); - liquid.registerTag('for', { parse: parse, render: render }); - function parse(tagToken, remainTokens) { +var block = { + parse: function (token, remainTokens) { var _this = this; - var match = re.exec(tagToken.args); + var match = /\w+/.exec(token.args); + this.block = match ? match[0] : ''; + this.tpls = []; + var stream = this.liquid.parser.parseStream(remainTokens) + .on('tag:endblock', function () { return stream.stop(); }) + .on('template', function (tpl) { return _this.tpls.push(tpl); }) + .on('end', function () { + throw new Error("tag " + token.raw + " not closed"); + }); + stream.start(); + }, + render: function (scope) { + return __awaiter(this, void 0, void 0, function () { + var childDefined, html, _a; + return __generator(this, function (_b) { + switch (_b.label) { + case 0: + childDefined = scope.blocks[this.block]; + if (!(childDefined !== undefined)) return [3 /*break*/, 1]; + _a = childDefined; + return [3 /*break*/, 3]; + case 1: return [4 /*yield*/, this.liquid.renderer.renderTemplates(this.tpls, scope)]; + case 2: + _a = _b.sent(); + _b.label = 3; + case 3: + html = _a; + if (scope.blockMode === BlockMode$1.STORE) { + scope.blocks[this.block] = html; + return [2 /*return*/, '']; + } + return [2 /*return*/, html]; + } + }); + }); + } +}; + +var raw = { + parse: function (tagToken, remainTokens) { + var _this = this; + this.tokens = []; + var stream = this.liquid.parser.parseStream(remainTokens); + stream + .on('token', function (token) { + if (token.name === 'endraw') + stream.stop(); + else + _this.tokens.push(token); + }) + .on('end', function () { + throw new Error("tag " + tagToken.raw + " not closed"); + }); + stream.start(); + }, + render: function () { + return this.tokens.map(function (token) { return token.raw; }).join(''); + } +}; + +var re$3 = new RegExp("^(" + identifier.source + ")\\s+in\\s+" + + ("(" + value.source + ")") + + ("(?:\\s+" + hash.source + ")*$")); +var tablerow = { + parse: function (tagToken, remainTokens) { + var _this = this; + var match = re$3.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 = liquid.parser.parseStream(remainTokens) + 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('tag:endtablerow', 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) { + }, + render: function (scope, hash$$1) { return __awaiter(this, void 0, void 0, function () { - var collection, offset, limit, contexts, html, finished; + var collection, offset, limit, cols, contexts, row, html; var _this = this; return __generator(this, function (_a) { switch (_a.label) { case 0: - collection = Liquid.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*/, liquid.renderer.renderTemplates(this.elseTemplates, scope)]; - } + collection = evalExp(this.collection, 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) { + cols = hash$$1.cols || collection.length; + contexts = collection.map(function (item) { 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 [4 /*yield*/, mapSeries(contexts, function (context, idx) { return __awaiter(_this, void 0, void 0, function () { + var col, _a; return __generator(this, function (_b) { switch (_b.label) { case 0: - if (finished) - return [2 /*return*/]; + row = Math.floor(idx / cols) + 1; + col = (idx % cols) + 1; + if (col === 1) { + if (row !== 1) { + html += ''; + } + html += ""; + } + html += ""; scope.push(context); - _b.label = 1; - case 1: - _b.trys.push([1, 3, , 4]); _a = html; - return [4 /*yield*/, liquid.renderer.renderTemplates(this.templates, scope)]; - case 2: + return [4 /*yield*/, this.liquid.renderer.renderTemplates(this.templates, scope)]; + case 1: 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: + html += ''; scope.pop(context); - return [2 /*return*/]; + return [2 /*return*/, html]; } }); }); })]; case 1: _a.sent(); + if (row > 0) { + html += ''; + } return [2 /*return*/, html]; } }); }); } -} +}; -function Assign (liquid, Liquid) { - var re = new RegExp("(" + identifier.source + ")\\s*=([^]*)"); - var AssignScope = Liquid.Types.AssignScope; - liquid.registerTag('assign', { - parse: function (token) { - var match = token.args.match(re); - assert(match, "illegal token " + token.raw); - this.key = match[1]; - this.value = match[2]; - }, - render: function (scope) { - var ctx = create(AssignScope); - ctx[this.key] = liquid.evalValue(this.value, scope); - scope.push(ctx); - return Promise.resolve(''); - } - }); -} - -function Capture (liquid, Liquid) { - var re = new RegExp("(" + identifier.source + ")"); - var CaptureScope = Liquid.Types.CaptureScope; - liquid.registerTag('capture', { - parse: function (tagToken, remainTokens) { - var _this = this; - var match = tagToken.args.match(re); - assert(match, tagToken.args + " not valid identifier"); - this.variable = match[1]; - this.templates = []; - var stream = liquid.parser.parseStream(remainTokens); - stream.on('tag:endcapture', function (token) { return stream.stop(); }) - .on('template', function (tpl) { return _this.templates.push(tpl); }) - .on('end', function (x) { - throw new Error("tag " + tagToken.raw + " not closed"); - }); - stream.start(); - }, - render: function (scope, hash$$1) { - return __awaiter(this, void 0, void 0, function () { - var html, ctx; - return __generator(this, function (_a) { - switch (_a.label) { - case 0: return [4 /*yield*/, liquid.renderer.renderTemplates(this.templates, scope)]; - case 1: - html = _a.sent(); - ctx = create(CaptureScope); - ctx[this.variable] = html; - scope.push(ctx); - return [2 /*return*/]; - } - }); - }); - } - }); -} - -function Case (liquid, Liquid) { - liquid.registerTag('case', { - parse: function (tagToken, remainTokens) { - var _this = this; - this.cond = tagToken.args; - this.cases = []; - this.elseTemplates = []; - var p = []; - var stream = liquid.parser.parseStream(remainTokens) - .on('tag:when', function (token) { - _this.cases.push({ - val: token.args, - templates: p = [] - }); - }) - .on('tag:else', function () { return (p = _this.elseTemplates); }) - .on('tag:endcase', function (token) { return stream.stop(); }) - .on('template', function (tpl) { return p.push(tpl); }) - .on('end', function (x) { - throw new Error("tag " + tagToken.raw + " not closed"); - }); - stream.start(); - }, - render: function (scope, hash) { - for (var i = 0; i < this.cases.length; i++) { - var branch = this.cases[i]; - var val = Liquid.evalExp(branch.val, scope); - var cond = Liquid.evalExp(this.cond, scope); - if (val === cond) { - return liquid.renderer.renderTemplates(branch.templates, scope); - } - } - return liquid.renderer.renderTemplates(this.elseTemplates, scope); - } - }); -} - -function Comment (liquid) { - liquid.registerTag('comment', { - parse: function (tagToken, remainTokens) { - var stream = liquid.parser.parseStream(remainTokens); - stream - .on('token', function (token) { - if (token.name === 'endcomment') - stream.stop(); - }) - .on('end', function (x) { - throw new Error("tag " + tagToken.raw + " not closed"); - }); - stream.start(); - } - }); -} - -var staticFileRE = /[^\s,]+/; -function Include (liquid, Liquid) { - var withRE = new RegExp("with\\s+(" + value.source + ")"); - liquid.registerTag('include', { - parse: function (token) { - var match = staticFileRE.exec(token.args); - if (match) { - this.staticValue = match[0]; - } - match = value.exec(token.args); - if (match) { - this.value = match[0]; - } - match = withRE.exec(token.args); - if (match) { - this.with = match[1]; - } - }, - render: function (scope, hash$$1) { - return __awaiter(this, void 0, void 0, function () { - var filepath, template, originBlocks, originBlockMode, templates, html; - return __generator(this, function (_a) { - switch (_a.label) { - case 0: - if (!scope.opts.dynamicPartials) return [3 /*break*/, 4]; - if (!quotedLine.exec(this.value)) return [3 /*break*/, 2]; - template = this.value.slice(1, -1); - return [4 /*yield*/, liquid.parseAndRender(template, scope.getAll(), scope.opts)]; - case 1: - filepath = _a.sent(); - return [3 /*break*/, 3]; - case 2: - filepath = Liquid.evalValue(this.value, scope); - _a.label = 3; - case 3: return [3 /*break*/, 5]; - case 4: - filepath = this.staticValue; - _a.label = 5; - case 5: - assert(filepath, "cannot include with empty filename"); - originBlocks = scope.opts.blocks; - originBlockMode = scope.opts.blockMode; - scope.opts.blocks = {}; - scope.opts.blockMode = 'output'; - if (this.with) { - hash$$1[filepath] = Liquid.evalValue(this.with, scope); - } - return [4 /*yield*/, liquid.getTemplate(filepath, scope.opts.root)]; - case 6: - templates = _a.sent(); - scope.push(hash$$1); - return [4 /*yield*/, liquid.renderer.renderTemplates(templates, scope)]; - case 7: - html = _a.sent(); - scope.pop(hash$$1); - scope.opts.blocks = originBlocks; - scope.opts.blockMode = originBlockMode; - return [2 /*return*/, html]; - } - }); - }); - } - }); -} - -function Decrement (liquid, Liquid) { - var _a = Liquid.Types, CaptureScope = _a.CaptureScope, AssignScope = _a.AssignScope, DecrementScope = _a.DecrementScope; - liquid.registerTag('decrement', { - parse: function (token) { - var match = token.args.match(identifier); - assert(match, "illegal identifier " + token.args); - this.variable = match[0]; - }, - render: function (scope, hash$$1) { - var context = scope.findContextFor(this.variable, function (ctx) { - var proto = Object.getPrototypeOf(ctx); - return proto !== CaptureScope && proto !== AssignScope; - }); - if (!context) { - context = create(DecrementScope); - scope.unshift(context); - } - if (typeof context[this.variable] !== 'number') { - context[this.variable] = 0; - } - return --context[this.variable]; - } - }); -} - -function Cycle (liquid, Liquid) { - var groupRE = new RegExp("^(?:(" + value.source + ")\\s*:\\s*)?(.*)$"); - var candidatesRE = new RegExp(value.source, 'g'); - liquid.registerTag('cycle', { - parse: function (tagToken, remainTokens) { - var match = groupRE.exec(tagToken.args); - assert(match, "illegal tag: " + tagToken.raw); - this.group = match[1] || ''; - var candidates = match[2]; - this.candidates = []; - while ((match = candidatesRE.exec(candidates))) { - this.candidates.push(match[0]); - } - assert(this.candidates.length, "empty candidates: " + tagToken.raw); - }, - render: function (scope, hash$$1) { - var group = Liquid.evalValue(this.group, scope); - var fingerprint = "cycle:" + group + ":" + this.candidates.join(','); - var groups = scope.opts.groups = scope.opts.groups || {}; - var idx = groups[fingerprint]; - if (idx === undefined) { - idx = groups[fingerprint] = 0; - } - var candidate = this.candidates[idx]; - idx = (idx + 1) % this.candidates.length; - groups[fingerprint] = idx; - return Liquid.evalValue(candidate, scope); - } - }); -} - -function If (liquid, Liquid) { - liquid.registerTag('if', { - parse: function (tagToken, remainTokens) { - var _this = this; - this.branches = []; - this.elseTemplates = []; - var p; - var stream = liquid.parser.parseStream(remainTokens) - .on('start', function () { return _this.branches.push({ - cond: tagToken.args, - templates: (p = []) - }); }) - .on('tag:elsif', function (token) { - _this.branches.push({ - cond: token.args, - templates: p = [] - }); - }) - .on('tag:else', function () { return (p = _this.elseTemplates); }) - .on('tag:endif', function (token) { return stream.stop(); }) - .on('template', function (tpl) { return p.push(tpl); }) - .on('end', function (x) { - throw new Error("tag " + tagToken.raw + " not closed"); - }); - stream.start(); - }, - render: function (scope, hash) { - for (var _i = 0, _a = this.branches; _i < _a.length; _i++) { - var branch = _a[_i]; - var cond = Liquid.evalExp(branch.cond, scope); - if (Liquid.isTruthy(cond)) { - return liquid.renderer.renderTemplates(branch.templates, scope); - } - } - return liquid.renderer.renderTemplates(this.elseTemplates, scope); - } - }); -} - -function Increment (liquid, Liquid) { - var _a = Liquid.Types, CaptureScope = _a.CaptureScope, AssignScope = _a.AssignScope, IncrementScope = _a.IncrementScope; - liquid.registerTag('increment', { - parse: function (token) { - var match = token.args.match(identifier); - assert(match, "illegal identifier " + token.args); - this.variable = match[0]; - }, - render: function (scope, hash$$1) { - var context = scope.findContextFor(this.variable, function (ctx) { - var proto = Object.getPrototypeOf(ctx); - return proto !== CaptureScope && proto !== AssignScope; - }); - if (!context) { - context = create(IncrementScope); - scope.unshift(context); - } - if (typeof context[this.variable] !== 'number') { - context[this.variable] = 0; - } - var val = context[this.variable]; - context[this.variable]++; - return val; - } - }); -} - -/* - * blockMode: - * * "store": store rendered html into blocks - * * "output": output rendered html - */ -function Layout (liquid, Liquid) { - var staticFileRE = /\S+/; - liquid.registerTag('layout', { - parse: function (token, remainTokens) { - var match = staticFileRE.exec(token.args); - if (match) { - this.staticLayout = match[0]; - } - match = value.exec(token.args); - if (match) { - this.layout = match[0]; - } - this.tpls = liquid.parser.parse(remainTokens); - }, - render: function (scope, hash$$1) { - return __awaiter(this, void 0, void 0, function () { - var layout, html, templates, partial; - return __generator(this, function (_a) { - switch (_a.label) { - case 0: - layout = scope.opts.dynamicPartials - ? Liquid.evalValue(this.layout, scope) - : this.staticLayout; - assert(layout, "cannot apply layout with empty filename"); - // render the remaining tokens immediately - scope.opts.blockMode = 'store'; - return [4 /*yield*/, liquid.renderer.renderTemplates(this.tpls, scope)]; - case 1: - html = _a.sent(); - if (scope.opts.blocks[''] === undefined) { - scope.opts.blocks[''] = html; - } - return [4 /*yield*/, liquid.getTemplate(layout, scope.opts.root)]; - case 2: - templates = _a.sent(); - scope.push(hash$$1); - scope.opts.blockMode = 'output'; - return [4 /*yield*/, liquid.renderer.renderTemplates(templates, scope)]; - case 3: - partial = _a.sent(); - scope.pop(hash$$1); - return [2 /*return*/, partial]; - } - }); - }); - } - }); - liquid.registerTag('block', { - parse: function (token, remainTokens) { - var _this = this; - var match = /\w+/.exec(token.args); - this.block = match ? match[0] : ''; - this.tpls = []; - var stream = liquid.parser.parseStream(remainTokens) - .on('tag:endblock', function () { return stream.stop(); }) - .on('template', function (tpl) { return _this.tpls.push(tpl); }) - .on('end', function () { - throw new Error("tag " + token.raw + " not closed"); - }); - stream.start(); - }, - render: function (scope) { - return __awaiter(this, void 0, void 0, function () { - var childDefined, html, _a; - return __generator(this, function (_b) { - switch (_b.label) { - case 0: - childDefined = scope.opts.blocks[this.block]; - if (!(childDefined !== undefined)) return [3 /*break*/, 1]; - _a = childDefined; - return [3 /*break*/, 3]; - case 1: return [4 /*yield*/, liquid.renderer.renderTemplates(this.tpls, scope)]; - case 2: - _a = _b.sent(); - _b.label = 3; - case 3: - html = _a; - if (scope.opts.blockMode === 'store') { - scope.opts.blocks[this.block] = html; - return [2 /*return*/, '']; - } - return [2 /*return*/, html]; - } - }); - }); - } - }); -} +var unless = { + parse: function (tagToken, remainTokens) { + var _this = this; + this.templates = []; + this.elseTemplates = []; + var p; + var stream = this.liquid.parser.parseStream(remainTokens) + .on('start', function () { + p = _this.templates; + _this.cond = tagToken.args; + }) + .on('tag:else', function () { return (p = _this.elseTemplates); }) + .on('tag:endunless', 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(); + }, + render: function (scope) { + var cond = evalExp(this.cond, scope); + return isFalsy(cond) + ? this.liquid.renderer.renderTemplates(this.templates, scope) + : this.liquid.renderer.renderTemplates(this.elseTemplates, scope); + } +}; -function Raw (liquid) { - liquid.registerTag('raw', { - parse: function (tagToken, remainTokens) { - var _this = this; - this.tokens = []; - var stream = liquid.parser.parseStream(remainTokens); - stream - .on('token', function (token) { - if (token.name === 'endraw') - stream.stop(); - else - _this.tokens.push(token); - }) - .on('end', function () { - throw new Error("tag " + tagToken.raw + " not closed"); +var Break = { + render: function () { + return __awaiter(this, void 0, void 0, function () { + return __generator(this, function (_a) { + throw new RenderBreakError('break'); }); - stream.start(); - }, - render: function (scope, hash) { - return this.tokens.map(function (token) { return token.raw; }).join(''); - } - }); -} + }); + } +}; -function Tablerow (liquid, Liquid) { - var re = new RegExp("^(" + identifier.source + ")\\s+in\\s+" + - ("(" + value.source + ")") + - ("(?:\\s+" + hash.source + ")*$")); - liquid.registerTag('tablerow', { - parse: function (tagToken, remainTokens) { - var _this = this; - var match = re.exec(tagToken.args); - assert(match, "illegal tag: " + tagToken.raw); - this.variable = match[1]; - this.collection = match[2]; - this.templates = []; - var p; - var stream = liquid.parser.parseStream(remainTokens) - .on('start', function () { return (p = _this.templates); }) - .on('tag:endtablerow', function (token) { return stream.stop(); }) - .on('template', function (tpl) { return p.push(tpl); }) - .on('end', function () { - throw new Error("tag " + tagToken.raw + " not closed"); - }); - stream.start(); - }, - render: function (scope, hash$$1) { - return __awaiter(this, void 0, void 0, function () { - var collection, offset, limit, cols, contexts, row, html; - var _this = this; - return __generator(this, function (_a) { - switch (_a.label) { - case 0: - collection = Liquid.evalExp(this.collection, scope) || []; - offset = hash$$1.offset || 0; - limit = (hash$$1.limit === undefined) ? collection.length : hash$$1.limit; - collection = collection.slice(offset, offset + limit); - cols = hash$$1.cols || collection.length; - contexts = collection.map(function (item, i) { - var ctx = {}; - ctx[_this.variable] = item; - return ctx; - }); - html = ''; - return [4 /*yield*/, mapSeries(contexts, function (context, idx) { return __awaiter(_this, void 0, void 0, function () { - var col, _a; - return __generator(this, function (_b) { - switch (_b.label) { - case 0: - row = Math.floor(idx / cols) + 1; - col = (idx % cols) + 1; - if (col === 1) { - if (row !== 1) { - html += ''; - } - html += ""; - } - html += ""; - scope.push(context); - _a = html; - return [4 /*yield*/, liquid.renderer.renderTemplates(this.templates, scope)]; - case 1: - html = _a + _b.sent(); - html += ''; - scope.pop(context); - return [2 /*return*/, html]; - } - }); - }); })]; - case 1: - _a.sent(); - if (row > 0) { - html += ''; - } - return [2 /*return*/, html]; - } - }); +var Continue = { + render: function () { + return __awaiter(this, void 0, void 0, function () { + return __generator(this, function (_a) { + throw new RenderBreakError('continue'); }); - } - }); -} + }); + } +}; -function Unless (liquid, Liquid) { - liquid.registerTag('unless', { - parse: function (tagToken, remainTokens) { - var _this = this; - this.templates = []; - this.elseTemplates = []; - var p; - var stream = liquid.parser.parseStream(remainTokens) - .on('start', function (x) { - p = _this.templates; - _this.cond = tagToken.args; - }) - .on('tag:else', function () { return (p = _this.elseTemplates); }) - .on('tag:endunless', function (token) { return stream.stop(); }) - .on('template', function (tpl) { return p.push(tpl); }) - .on('end', function (x) { - throw new Error("tag " + tagToken.raw + " not closed"); - }); - stream.start(); - }, - render: function (scope, hash) { - var cond = Liquid.evalExp(this.cond, scope); - return Liquid.isFalsy(cond) - ? liquid.renderer.renderTemplates(this.templates, scope) - : liquid.renderer.renderTemplates(this.elseTemplates, scope); - } - }); -} +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 +}; + +var escapeMap = { + '&': '&', + '<': '<', + '>': '>', + '"': '"', + "'": ''' +}; +var unescapeMap = { + '&': '&', + '<': '<', + '>': '>', + '"': '"', + ''': "'" +}; +function escape(str) { + return String(str).replace(/&|<|>|"|'/g, function (m) { return escapeMap[m]; }); +} +function unescape(str) { + return String(str).replace(/&(amp|lt|gt|#34|#39);/g, function (m) { return unescapeMap[m]; }); +} +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, ''); } +}; + +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(); }, + 'remove': function (v, arg) { return v.split(arg).join(''); }, + 'remove_first': function (v, l) { return v.replace(l, ''); }, + 'replace': function (v, pattern, replacement) { + return String(v).split(pattern).join(replacement); + }, + 'replace_first': function (v, arg1, arg2) { return String(v).replace(arg1, arg2); }, + 'rstrip': function (str) { return String(str).replace(/\s+$/, ''); }, + 'split': function (v, arg) { return String(v).split(arg); }, + 'strip': function (v) { return String(v).trim(); }, + 'strip_newlines': function (v) { return String(v).replace(/\n/g, ''); }, + 'truncate': function (v, l, 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(' '); + var ret = arr.slice(0, l).join(' '); + if (arr.length > l) + ret += o; + return ret; + } +}; -function tags (engine, Liquid) { - Assign(engine, Liquid); - Capture(engine, Liquid); - Case(engine, Liquid); - Comment(engine, Liquid); - Cycle(engine, Liquid); - Decrement(engine, Liquid); - For(engine, Liquid); - If(engine, Liquid); - Include(engine, Liquid); - Increment(engine, Liquid); - Layout(engine, Liquid); - Raw(engine, Liquid); - Tablerow(engine, Liquid); - Unless(engine, Liquid); +var math = { + 'abs': function (v) { return Math.abs(v); }, + 'ceil': function (v) { return Math.ceil(v); }, + 'divided_by': function (v, arg) { return v / arg; }, + 'floor': function (v) { return Math.floor(v); }, + '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); + return Math.round(v * amp) / amp; + }, + 'plus': bindFixed(function (v, arg) { return Number(v) + Number(arg); }), + 'times': function (v, arg) { return v * arg; } +}; +function getFixed(v) { + var p = String(v).split('.'); + return (p.length > 1) ? p[1].length : 0; +} +function bindFixed(cb) { + return function (l, r) { + var f = Math.max(getFixed(l), getFixed(r)); + return cb(l, r).toFixed(f); + }; } +var url = { + 'url_decode': function (x) { return x.split('+').map(decodeURIComponent).join(' '); }, + 'url_encode': function (x) { return x.split(' ').map(encodeURIComponent).join('+'); } +}; + +var array = { + 'join': function (v, arg) { return v.join(arg === undefined ? ' ' : arg); }, + 'last': function (v) { return last(v); }, + 'first': function (v) { return v[0]; }, + 'map': function (arr, arg) { return arr.map(function (v) { return v[arg]; }); }, + 'reverse': function (v) { return v.reverse(); }, + 'sort': function (v, arg) { return v.sort(arg); }, + 'size': function (v) { return v.length; }, + 'slice': function (v, begin, length) { + if (length === undefined) + length = 1; + return v.slice(begin, begin + length); + }, + 'uniq': function (arr) { + var u = {}; + return (arr || []).filter(function (val) { + if (u.hasOwnProperty(val)) { + return false; + } + u[val] = true; + return true; + }); + } +}; + var monthNames = [ 'January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December' @@ -1821,15 +1974,13 @@ var _date = { } return num + d.getDate(); }, - // Startday is an integer of which day to start the week measuring from - // TODO: that comment was retarted. fix it. getWeekOfYear: function (d, startDay) { // Skip to startDay of this week var now = this.getDayOfYear(d) + (startDay - d.getDay()); // Find the first startDay of the year var jan1 = new Date(d.getFullYear(), 0, 1); var then = (7 - jan1.getDay() + startDay); - return _number.pad(Math.floor((now - then) / 7) + 1, 2); + return padStart(String(Math.floor((now - then) / 7) + 1), 2, '0'); }, isLeapYear: function (d) { var year = d.getFullYear(); @@ -1844,18 +1995,6 @@ var _date = { return parseInt(d.getFullYear().toString().substring(0, 2), 10); } }; -var _number = { - pad: function (value, size, ch) { - if (!ch) - ch = '0'; - var result = value.toString(); - var pad = size - result.length; - while (pad-- > 0) { - result = ch + result; - } - return result; - } -}; var formatCodes = { a: function (d) { return dayNamesShort[d.getDay()]; @@ -1876,34 +2015,34 @@ var formatCodes = { return _date.century(d); }, d: function (d) { - return _number.pad(d.getDate(), 2); + return padStart(d.getDate(), 2, '0'); }, e: function (d) { - return _number.pad(d.getDate(), 2, ' '); + return padStart(d.getDate(), 2); }, H: function (d) { - return _number.pad(d.getHours(), 2); + return padStart(d.getHours(), 2, '0'); }, I: function (d) { - return _number.pad(d.getHours() % 12 || 12, 2); + return padStart(String(d.getHours() % 12 || 12), 2, '0'); }, j: function (d) { - return _number.pad(_date.getDayOfYear(d), 3); + return padStart(_date.getDayOfYear(d), 3, '0'); }, k: function (d) { - return _number.pad(d.getHours(), 2, ' '); + return padStart(d.getHours(), 2); }, l: function (d) { - return _number.pad(d.getHours() % 12 || 12, 2, ' '); + return padStart(String(d.getHours() % 12 || 12), 2); }, L: function (d) { - return _number.pad(d.getMilliseconds(), 3); + return padStart(d.getMilliseconds(), 3, '0'); }, m: function (d) { - return _number.pad(d.getMonth() + 1, 2); + return padStart(d.getMonth() + 1, 2, '0'); }, M: function (d) { - return _number.pad(d.getMinutes(), 2); + return padStart(d.getMinutes(), 2, '0'); }, p: function (d) { return (d.getHours() < 12 ? 'AM' : 'PM'); @@ -1918,7 +2057,7 @@ var formatCodes = { return Math.round(d.valueOf() / 1000); }, S: function (d) { - return _number.pad(d.getSeconds(), 2); + return padStart(d.getSeconds(), 2, '0'); }, u: function (d) { return d.getDay() || 7; @@ -1946,7 +2085,7 @@ var formatCodes = { }, z: function (d) { var tz = d.getTimezoneOffset() / 60 * 100; - return (tz > 0 ? '-' : '+') + _number.pad(Math.abs(tz), 4); + return (tz > 0 ? '-' : '+') + padStart(String(Math.abs(tz)), 4, '0'); }, '%': function () { return '%'; @@ -1974,26 +2113,7 @@ function strftime (d, format) { } } -var escapeMap = { - '&': '&', - '<': '<', - '>': '>', - '"': '"', - "'": ''' -}; -var unescapeMap = { - '&': '&', - '<': '<', - '>': '>', - '"': '"', - ''': "'" -}; -var filters = { - 'abs': function (v) { return Math.abs(v); }, - 'append': function (v, arg) { return v + arg; }, - 'capitalize': function (str) { return stringify$1(str).charAt(0).toUpperCase() + str.slice(1); }, - 'ceil': function (v) { return Math.ceil(v); }, - 'concat': function (v, arg) { return Array.prototype.concat.call(v, arg); }, +var date = { 'date': function (v, arg) { var date = v; if (v === 'now') { @@ -2003,142 +2123,40 @@ var filters = { date = new Date(v); } return isValidDate(date) ? strftime(date, arg) : v; - }, - 'default': function (v, arg) { return isTruthy(v) ? v : arg; }, - 'divided_by': function (v, arg) { return v / arg; }, - 'downcase': function (v) { return v.toLowerCase(); }, - 'escape': escape, - 'escape_once': function (str) { return escape(unescape(str)); }, - 'first': function (v) { return v[0]; }, - 'floor': function (v) { return Math.floor(v); }, - 'join': function (v, arg) { return v.join(arg === undefined ? ' ' : arg); }, - 'last': function (v) { return last(v); }, - 'lstrip': function (v) { return stringify$1(v).replace(/^\s+/, ''); }, - 'map': function (arr, arg) { return arr.map(function (v) { return v[arg]; }); }, - 'minus': bindFixed(function (v, arg) { return v - arg; }), - 'modulo': bindFixed(function (v, arg) { return v % arg; }), - 'newline_to_br': function (v) { return v.replace(/\n/g, '
'); }, - 'plus': bindFixed(function (v, arg) { return Number(v) + Number(arg); }), - 'prepend': function (v, arg) { return arg + v; }, - 'remove': function (v, arg) { return v.split(arg).join(''); }, - 'remove_first': function (v, l) { return v.replace(l, ''); }, - 'replace': function (v, pattern, replacement) { - return stringify$1(v).split(pattern).join(replacement); - }, - 'replace_first': function (v, arg1, arg2) { return stringify$1(v).replace(arg1, arg2); }, - 'reverse': function (v) { return v.reverse(); }, - 'round': function (v, arg) { - var amp = Math.pow(10, arg || 0); - return Math.round(v * amp, arg) / amp; - }, - 'rstrip': function (str) { return stringify$1(str).replace(/\s+$/, ''); }, - 'size': function (v) { return v.length; }, - 'slice': function (v, begin, length) { - if (length === undefined) - length = 1; - return v.slice(begin, begin + length); - }, - 'sort': function (v, arg) { return v.sort(arg); }, - 'split': function (v, arg) { return stringify$1(v).split(arg); }, - 'strip': function (v) { return stringify$1(v).trim(); }, - 'strip_html': function (v) { return stringify$1(v).replace(/|||<.*?>/g, ''); }, - 'strip_newlines': function (v) { return stringify$1(v).replace(/\n/g, ''); }, - 'times': function (v, arg) { return v * arg; }, - 'truncate': function (v, l, o) { - v = stringify$1(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(' '); - var ret = arr.slice(0, l).join(' '); - if (arr.length > l) - ret += o; - return ret; - }, - 'uniq': function (arr) { - var u = {}; - return (arr || []).filter(function (val) { - if (u.hasOwnProperty(val)) { - return false; - } - u[val] = true; - return true; - }); - }, - 'upcase': function (str) { return stringify$1(str).toUpperCase(); }, - 'url_decode': function (x) { return x.split('+').map(decodeURIComponent).join(' '); }, - 'url_encode': function (x) { return x.split(' ').map(encodeURIComponent).join('+'); } + } }; -function escape(str) { - return stringify$1(str).replace(/&|<|>|"|'/g, function (m) { return escapeMap[m]; }); -} -function unescape(str) { - return stringify$1(str).replace(/&(amp|lt|gt|#34|#39);/g, function (m) { return unescapeMap[m]; }); -} -function getFixed(v) { - var p = (v + '').split('.'); - return (p.length > 1) ? p[1].length : 0; -} -function getMaxFixed(l, r) { - return Math.max(getFixed(l), getFixed(r)); -} -function stringify$1(obj) { - return obj + ''; -} -function bindFixed(cb) { - return function (l, r) { - var f = getMaxFixed(l, r); - return cb(l, r).toFixed(f); - }; -} function isValidDate(date) { return date instanceof Date && !isNaN(date.getTime()); -} -function registerAll(liquid, Liquid) { - return forOwn(filters, function (func, name) { return liquid.registerFilter(name, func); }); -} -registerAll.filters = filters; +} + +var obj = { + 'default': function (v, arg) { return isTruthy(v) ? v : arg; } +}; + +var builtinFilters = __assign({}, html, str, math, url, date, obj, array); var Liquid = /** @class */ (function () { - function Liquid(options) { - options = assign({ - root: ['.'], - cache: false, - extname: '', - dynamicPartials: true, - trim_tag_right: false, - trim_tag_left: false, - trim_value_right: false, - trim_value_left: false, - greedy: true, - strict_filters: false, - strict_variables: false - }, options); - options.root = normalizeStringArray(options.root); + function Liquid(opts) { + if (opts === void 0) { opts = {}; } + var _this = this; + var options = __assign({}, defaultOptions, normalize(opts)); if (options.cache) { this.cache = {}; } this.options = options; - this.tags = Tag(); - this.filters = Filter(options); - this.parser = Parser(this.tags, this.filters); - this.renderer = Render(); - tags(this, Liquid); - registerAll(this, Liquid); + this.parser = new Parser(this); + this.renderer = new Render(); + this.tokenizer = new Tokenizer(this.options); + forOwn(tags, function (conf, name) { return _this.registerTag(name, conf); }); + forOwn(builtinFilters, function (handler, name) { return _this.registerFilter(name, handler); }); } Liquid.prototype.parse = function (html, filepath) { - var tokens = parse(html, filepath, this.options); + var tokens = this.tokenizer.tokenize(html, filepath); return this.parser.parse(tokens); }; Liquid.prototype.render = function (tpl, ctx, opts) { - opts = assign({}, this.options, opts); - var scope = new Scope(ctx, opts); + var options = __assign({}, this.options, normalize(opts)); + var scope = new Scope(ctx, options); return this.renderer.renderTemplates(tpl, scope); }; Liquid.prototype.parseAndRender = function (html, ctx, opts) { @@ -2154,38 +2172,54 @@ var Liquid = /** @class */ (function () { }); }); }; - Liquid.prototype.getTemplate = function (file, root) { + Liquid.prototype.getTemplate = function (file, opts) { return __awaiter(this, void 0, void 0, function () { - var filepath; + var options, roots, paths, _i, paths_1, filepath, value, _a, err; var _this = this; - return __generator(this, function (_a) { - switch (_a.label) { - case 0: return [4 /*yield*/, resolve(file, root, this.options)]; + return __generator(this, function (_b) { + switch (_b.label) { + case 0: + options = normalize(opts); + roots = options.root ? options.root.concat(this.options.root) : this.options.root; + paths = roots.map(function (root) { return fs$1.resolve(root, file, _this.options.extname); }); + _i = 0, paths_1 = paths; + _b.label = 1; case 1: - filepath = _a.sent(); - return [2 /*return*/, this.respectCache(filepath, function () { return __awaiter(_this, void 0, void 0, function () { - var str; - return __generator(this, function (_a) { - switch (_a.label) { - case 0: return [4 /*yield*/, read(filepath)]; - case 1: - str = _a.sent(); - return [2 /*return*/, this.parse(str, filepath)]; - } - }); - }); })]; + if (!(_i < paths_1.length)) return [3 /*break*/, 5]; + filepath = paths_1[_i]; + return [4 /*yield*/, fs$1.exists(filepath)]; + case 2: + if (!(_b.sent())) + return [3 /*break*/, 4]; + if (this.options.cache && this.cache[filepath]) + return [2 /*return*/, this.cache[filepath]]; + _a = this.parse; + return [4 /*yield*/, fs$1.readFile(filepath)]; + case 3: + value = _a.apply(this, [_b.sent(), filepath]); + if (this.options.cache) + this.cache[filepath] = value; + return [2 /*return*/, value]; + case 4: + _i++; + return [3 /*break*/, 1]; + case 5: + err = new Error('ENOENT'); + err.message = "ENOENT: Failed to lookup \"" + file + "\" in \"" + roots + "\""; + err.code = 'ENOENT'; + throw err; } }); }); }; Liquid.prototype.renderFile = function (file, ctx, opts) { return __awaiter(this, void 0, void 0, function () { - var templates; + var options, templates; return __generator(this, function (_a) { switch (_a.label) { case 0: - opts = assign({}, opts); - return [4 /*yield*/, this.getTemplate(file, opts.root)]; + options = normalize(opts); + return [4 /*yield*/, this.getTemplate(file, options)]; case 1: templates = _a.sent(); return [2 /*return*/, this.render(templates, ctx, opts)]; @@ -2193,46 +2227,22 @@ var Liquid = /** @class */ (function () { }); }); }; - Liquid.prototype.respectCache = function (key, getter) { - return __awaiter(this, void 0, void 0, function () { - var cacheEnabled, value; - return __generator(this, function (_a) { - switch (_a.label) { - case 0: - cacheEnabled = this.options.cache; - if (cacheEnabled && this.cache[key]) { - return [2 /*return*/, this.cache[key]]; - } - return [4 /*yield*/, getter()]; - case 1: - value = _a.sent(); - if (cacheEnabled) { - this.cache[key] = value; - } - return [2 /*return*/, value]; - } - }); - }); - }; Liquid.prototype.evalValue = function (str, scope) { - var tpl = this.parser.parseValue(str.trim()); - return this.renderer.evalValue(tpl, scope); + return new default_1(str, this.options.strict_filters).value(scope); }; Liquid.prototype.registerFilter = function (name, filter) { - return this.filters.register(name, filter); + return Filter.register(name, filter); }; Liquid.prototype.registerTag = function (name, tag) { - return this.tags.register(name, tag); + return Tag.register(name, tag); }; Liquid.prototype.plugin = function (plugin) { return plugin.call(this, Liquid); }; - Liquid.prototype.express = function (opts) { - opts = opts || {}; + Liquid.prototype.express = function () { var self = this; return function (filePath, ctx, cb) { - assert(isArray(this.root) || isString(this.root), 'illegal views root, are you using express.js?'); - opts.root = this.root; + var opts = { root: this.root }; self.renderFile(filePath, ctx, opts).then(function (html) { return cb(null, html); }, cb); }; }; @@ -2241,25 +2251,9 @@ var Liquid = /** @class */ (function () { Liquid.isFalsy = isFalsy; Liquid.evalExp = evalExp; Liquid.evalValue = evalValue; - Liquid.Types = { - ParseError: ParseError, - TokenizationError: TokenizationError, - RenderBreakError: RenderBreakError, - AssertionError: AssertionError, - AssignScope: {}, - CaptureScope: {}, - IncrementScope: {}, - DecrementScope: {} - }; + Liquid.Types = Types; return Liquid; -}()); -function normalizeStringArray(value) { - if (isArray(value)) - return value; - if (isString(value)) - return [value]; - throw new TypeError('illegal root: ' + value); -} +}()); module.exports = Liquid; //# sourceMappingURL=liquid.common.js.map diff --git a/dist/liquid.common.js.map b/dist/liquid.common.js.map index eebf3c9aa6..eeda79e37e 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/lexical.js","../src/util/error.ts","../src/util/assert.ts","../src/scope.ts","../src/util/promise.js","../src/template.ts","../src/whitespace-ctrl.js","../src/tokenizer.js","../src/operators.js","../src/syntax.js","../src/render.js","../src/tag.js","../src/filter.js","../src/parser.ts","../src/tags/for.js","../src/tags/assign.js","../src/tags/capture.js","../src/tags/case.js","../src/tags/comment.js","../src/tags/include.js","../src/tags/decrement.js","../src/tags/cycle.js","../src/tags/if.js","../src/tags/increment.js","../src/tags/layout.js","../src/tags/raw.js","../src/tags/tablerow.js","../src/tags/unless.js","../src/tags/index.js","../src/util/strftime.js","../src/filters.js","../src/index.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) {\n return toStr.call(value) === '[object String]'\n}\n\nexport function isFunction (value) {\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) {\n if (isNil(value)) return String(value)\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) {\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) {\n return Object.create(proto)\n}\n\nexport function isNil (value) {\n return value === null || value === undefined\n}\n\nexport function isArray (value) {\n // be compatible with IE 8\n return toStr.call(value) === '[object Array]'\n}\n\nexport function isError (value) {\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) {\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, ...srcs) {\n obj = isObject(obj) ? obj : {}\n srcs.forEach(src => binaryAssign(obj, src))\n return obj\n}\n\nfunction binaryAssign(target, src) {\n for(let key in src) if (src.hasOwnProperty(key)) target[key] = src[key]\n}\n\nexport function last (arr) {\n return arr[arr.length - 1]\n}\n\nexport function uniq (arr) {\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) {\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","// 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'\n\nfunction captureStack () {\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, this.constructor)\n }\n}\n\nabstract class LiquidError {\n input: string\n line: string\n file: string\n message: string\n name: string\n stack: string\n token: any\n originalError: any\n constructor(err, token) {\n this.input = token.input\n this.line = token.line\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.line)\n this.message = mkMessage(err.message, this.token)\n this.stack = 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)\nTokenizationError.prototype.constructor = TokenizationError\n\nexport class ParseError extends LiquidError {\n constructor(err, token) {\n super(err, token)\n _.assign(this, err)\n super.captureStackTrace(this)\n }\n}\nParseError.prototype = _.create(Error.prototype)\nParseError.prototype.constructor = ParseError\n\nexport class RenderError extends LiquidError {\n constructor(err, tpl) {\n super(err, tpl.token)\n _.assign(this, err)\n super.captureStackTrace(this)\n }\n}\nRenderError.prototype = _.create(Error.prototype)\nRenderError.prototype.constructor = RenderError\n\nexport class RenderBreakError {\n message: string\n constructor (message) {\n captureStack.call(this)\n this.message = message + ''\n }\n}\nRenderBreakError.prototype = _.create(Error.prototype)\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)\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(end).length, lineNumber)\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\n }\n return msg\n}\n\nfunction padStart (length, str) {\n str = String(str)\n const blank = Array(length - str.length).join(' ')\n return blank + str\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","import * as _ from './util/underscore'\nimport * as lexical from './lexical'\nimport assert from './util/assert'\n\ninterface ScopeOptions {\n dynamicPartials: boolean\n strict_variables: boolean\n strict_filters: boolean\n blocks: object\n root: Array\n}\n\nexport default class Scope {\n opts: ScopeOptions\n contexts: Array\n constructor (ctx = {}, opts?: any) {\n const defaultOptions: ScopeOptions = {\n dynamicPartials: true,\n strict_variables: false,\n strict_filters: false,\n blocks: {},\n root: []\n }\n this.opts = _.assign(defaultOptions, opts)\n this.contexts = [ctx || {}]\n }\n getAll () {\n return this.contexts.reduce((ctx, val) => _.assign(ctx, val), _.create(null))\n }\n get (path) {\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, v) {\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) {\n return this.contexts.unshift(ctx)\n }\n push (ctx) {\n return this.contexts.push(ctx)\n }\n pop (ctx) {\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, filter = (arg => 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","/*\n * Call functions in serial until someone resolved.\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 anySeries (iterable, iteratee) {\n let ret = Promise.reject(new Error('init'))\n iterable.forEach(function (item, idx) {\n ret = ret.catch(e => 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.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 * as _ from './util/underscore'\nimport * as path from 'path'\nimport { anySeries } from './util/promise'\nimport * as fs from 'fs'\n\nconst statFileAsync = <(filepath: string) => Promise>_.promisify(fs.stat)\nconst readFileAsync = <(filepath: string, encoding: string) => Promise>_.promisify(fs.readFile)\n\nexport async function resolve (filepath, root, options) {\n if (!path.extname(filepath)) {\n filepath += options.extname\n }\n root = options.root.concat(root || [])\n root = _.uniq(root)\n const paths = root.map(root => path.resolve(root, filepath))\n return anySeries(paths, async path => {\n try {\n await statFileAsync(path)\n return path\n } catch (e) {\n e.message = `${e.code}: Failed to lookup ${filepath} in: ${root}`\n throw e\n }\n })\n}\n\nexport async function read (filepath): Promise {\n return readFileAsync(filepath, 'utf8')\n}\n","import { assign } from './util/underscore'\n\nexport default function whiteSpaceCtrl (tokens, options) {\n options = assign({ greedy: true }, options)\n let inRaw = false\n\n tokens.forEach((token, i) => {\n if (shouldTrimLeft(token, inRaw, options)) {\n trimLeft(tokens[i - 1], options.greedy)\n }\n\n if (token.type === 'tag' && token.name === 'raw') inRaw = true\n if (token.type === 'tag' && token.name === 'endraw') inRaw = false\n\n if (shouldTrimRight(token, inRaw, options)) {\n trimRight(tokens[i + 1], options.greedy)\n }\n })\n}\n\nfunction shouldTrimLeft (token, inRaw, options) {\n if (inRaw) return false\n if (token.type === 'tag') return token.trim_left || options.trim_tag_left\n if (token.type === 'value') return token.trim_left || options.trim_value_left\n}\n\nfunction shouldTrimRight (token, inRaw, options) {\n if (inRaw) return false\n if (token.type === 'tag') return token.trim_right || options.trim_tag_right\n if (token.type === 'value') return token.trim_right || options.trim_value_right\n}\n\nfunction trimLeft (token, greedy) {\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, greedy) {\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 * as lexical from './lexical'\nimport { TokenizationError } from './util/error'\nimport * as _ from './util/underscore'\nimport assert from './util/assert'\nimport whiteSpaceCtrl from './whitespace-ctrl'\n\nexport { default as whiteSpaceCtrl } from './whitespace-ctrl'\n\nexport function parse (input, file, options) {\n assert(_.isString(input), 'illegal input')\n\n const rLiquid = /({%-?([\\s\\S]*?)-?%})|({{-?([\\s\\S]*?)-?}})/g\n let currIndent = 0\n const lineNumber = LineNumber(input)\n let lastMatchEnd = 0\n const tokens = []\n\n for (let match; (match = rLiquid.exec(input)); lastMatchEnd = rLiquid.lastIndex) {\n if (match.index > lastMatchEnd) {\n tokens.push(parseHTMLToken(lastMatchEnd, match.index))\n }\n tokens.push(match[1]\n ? parseTagToken(match[1], match[2].trim(), match.index)\n : parseValueToken(match[3], match[4].trim(), match.index))\n }\n if (input.length > lastMatchEnd) {\n tokens.push(parseHTMLToken(lastMatchEnd, input.length))\n }\n whiteSpaceCtrl(tokens, options)\n return tokens\n\n function parseTagToken (raw, value, pos) {\n const match = value.match(lexical.tagLine)\n const token = {\n type: 'tag',\n indent: currIndent,\n line: lineNumber.get(pos),\n trim_left: raw.slice(0, 3) === '{%-',\n trim_right: raw.slice(-3) === '-%}',\n raw,\n value,\n input,\n file\n }\n if (!match) {\n throw new TokenizationError(`illegal tag syntax`, token)\n }\n token.name = match[1]\n token.args = match[2]\n return token\n }\n\n function parseValueToken (raw, value, pos) {\n return {\n type: 'value',\n line: lineNumber.get(pos),\n trim_left: raw.slice(0, 3) === '{{-',\n trim_right: raw.slice(-3) === '-}}',\n raw,\n value,\n input,\n file\n }\n }\n\n function parseHTMLToken (begin, end) {\n const htmlFragment = input.slice(begin, end)\n currIndent = _.last((htmlFragment).split('\\n')).length\n\n return {\n type: 'html',\n raw: htmlFragment,\n value: htmlFragment\n }\n }\n}\n\nfunction LineNumber (html) {\n let parsedLinesCount = 0\n let lastMatchBegin = -1\n\n return {\n get: function (pos) {\n const lines = html.slice(lastMatchBegin + 1, pos).split('\\n')\n parsedLinesCount += lines.length - 1\n lastMatchBegin = pos\n return parsedLinesCount + 1\n }\n }\n}\n","export default function (isTruthy) {\n return {\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}\n","import Operators from './operators'\nimport * as lexical from './lexical'\nimport assert from './util/assert'\n\nconst operators = Operators(isTruthy)\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 { evalExp } from './syntax'\nimport { RenderBreakError, RenderError } from './util/error'\nimport { stringify, create } from './util/underscore'\nimport assert from './util/assert'\n\nconst render = {\n renderTemplates: async function (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 renderTemplate.call(this, tpl)\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 async function renderTemplate (template) {\n if (template.type === 'tag') {\n const partial = await this.renderTag(template, scope)\n return partial === undefined ? '' : partial\n }\n if (template.type === 'value') {\n return this.renderValue(template, scope)\n }\n return template.value\n }\n },\n\n renderTag: async function (template, scope) {\n if (template.name === 'continue') {\n throw new RenderBreakError('continue')\n }\n if (template.name === 'break') {\n throw new RenderBreakError('break')\n }\n return template.render(scope)\n },\n\n renderValue: async function (template, scope) {\n const partial = this.evalValue(template, scope)\n return partial === undefined ? '' : stringify(partial)\n },\n\n evalValue: function (template, scope) {\n assert(scope, 'unable to evalValue: scope undefined')\n return template.filters.reduce(\n (prev, filter) => filter.render(prev, scope),\n evalExp(template.initial, scope))\n }\n}\n\nexport default function () {\n const instance = create(render)\n return instance\n}\n","import { hashCapture } from './lexical'\nimport { create } from './util/underscore'\nimport { evalValue } from './syntax'\nimport assert from './util/assert'\n\nfunction hash (markup, scope) {\n const obj = {}\n let match\n hashCapture.lastIndex = 0\n while ((match = hashCapture.exec(markup))) {\n const k = match[1]\n const v = match[2]\n obj[k] = evalValue(v, scope)\n }\n return obj\n}\n\nexport default function () {\n let tagImpls = {}\n\n const _tagInstance = {\n render: async function (scope) {\n const obj = hash(this.token.args, scope)\n const impl = this.tagImpl\n if (typeof impl.render !== 'function') {\n return ''\n }\n return impl.render(scope, obj)\n },\n parse: function (token, tokens) {\n this.type = 'tag'\n this.token = token\n this.name = token.name\n\n const tagImpl = tagImpls[this.name]\n assert(tagImpl, `tag ${this.name} not found`)\n this.tagImpl = create(tagImpl)\n if (this.tagImpl.parse) {\n this.tagImpl.parse(token, tokens)\n }\n }\n }\n\n function register (name, tag) {\n tagImpls[name] = tag\n }\n\n function construct (token, tokens) {\n const instance = create(_tagInstance)\n instance.parse(token, tokens)\n return instance\n }\n\n function clear () {\n tagImpls = {}\n }\n\n return {\n construct,\n register,\n clear\n }\n}\n","import * as lexical from './lexical'\nimport { evalValue } from './syntax'\nimport assert from './util/assert'\nimport { assign, create } from './util/underscore'\n\nconst valueRE = new RegExp(`${lexical.value.source}`, 'g')\n\nexport default function (options) {\n options = assign({}, options)\n let filters = {}\n\n const _filterInstance = {\n render: function (output, scope) {\n const args = this.args.map(arg => evalValue(arg, scope))\n args.unshift(output)\n return this.filter.apply(null, args)\n },\n parse: function (str) {\n let match = lexical.filterLine.exec(str)\n assert(match, 'illegal filter: ' + str)\n\n const name = match[1]\n const argList = match[2] || ''\n const filter = filters[name]\n if (typeof filter !== 'function') {\n if (options.strict_filters) {\n throw new TypeError(`undefined filter: ${name}`)\n }\n this.name = name\n this.filter = x => x\n this.args = []\n return this\n }\n\n 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\n this.name = name\n this.filter = filter\n this.args = args\n\n return this\n }\n }\n\n function construct (str) {\n const instance = create(_filterInstance)\n return instance.parse(str)\n }\n\n function register (name, filter) {\n filters[name] = filter\n }\n\n function clear () {\n filters = {}\n }\n\n return {\n construct, register, clear\n }\n}\n","import * as lexical from './lexical'\nimport { ParseError } from './util/error'\nimport assert from './util/assert'\n\nexport default function (Tag, Filter) {\n class ParseStream {\n tokens: Array\n handlers: object\n stopRequested: boolean\n constructor (tokens) {\n this.tokens = tokens\n this.handlers = {}\n }\n on (name, cb) {\n this.handlers[name] = cb\n return this\n }\n trigger (event: string, arg?: any) {\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 = 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\n function parse (tokens) {\n let token\n const templates = []\n while ((token = tokens.shift())) {\n templates.push(parseToken(token, tokens))\n }\n return templates\n }\n\n function parseToken (token, tokens) {\n try {\n let tpl = null\n if (token.type === 'tag') {\n tpl = parseTag(token, tokens)\n } else if (token.type === 'value') {\n tpl = parseValue(token.value)\n } else { // token.type === 'html'\n tpl = token\n }\n tpl.token = token\n return tpl\n } catch (e) {\n throw new ParseError(e, token)\n }\n }\n\n function parseTag (token, tokens) {\n if (token.name === 'continue' || token.name === 'break') return token\n return Tag.construct(token, tokens)\n }\n\n function parseValue (str) {\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 return {\n type: 'value',\n initial: initial,\n filters: filters.map(str => Filter.construct(str))\n }\n }\n\n function parseStream (tokens) {\n return new ParseStream(tokens)\n }\n\n return {\n parse,\n parseTag,\n parseStream,\n parseValue\n }\n}\n","import { mapSeries } from '../util/promise'\nimport { isString, isObject, isArray } from '../util/underscore'\nimport assert from '../util/assert'\nimport { identifier, value, hash } from '../lexical'\n\nexport default function (liquid, Liquid) {\n const RenderBreakError = Liquid.Types.RenderBreakError\n const re = new RegExp(`^(${identifier.source})\\\\s+in\\\\s+` +\n `(${value.source})` +\n `(?:\\\\s+${hash.source})*` +\n `(?:\\\\s+(reversed))?` +\n `(?:\\\\s+${hash.source})*$`)\n\n liquid.registerTag('for', { parse, render })\n\n function 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 = 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 async function render (scope, hash) {\n let collection = Liquid.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 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 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}\n","import assert from '../util/assert'\nimport { identifier } from '../lexical'\nimport { create } from '../util/underscore'\n\nexport default function (liquid, Liquid) {\n const re = new RegExp(`(${identifier.source})\\\\s*=([^]*)`)\n const { AssignScope } = Liquid.Types\n\n liquid.registerTag('assign', {\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 = create(AssignScope)\n ctx[this.key] = liquid.evalValue(this.value, scope)\n scope.push(ctx)\n return Promise.resolve('')\n }\n })\n}\n","import assert from '../util/assert'\nimport { create } from '../util/underscore'\nimport { identifier } from '../lexical'\n\nexport default function (liquid, Liquid) {\n const re = new RegExp(`(${identifier.source})`)\n const { CaptureScope } = Liquid.Types\n\n liquid.registerTag('capture', {\n parse: function (tagToken, remainTokens) {\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 = liquid.parser.parseStream(remainTokens)\n stream.on('tag:endcapture', token => stream.stop())\n .on('template', tpl => this.templates.push(tpl))\n .on('end', x => {\n throw new Error(`tag ${tagToken.raw} not closed`)\n })\n stream.start()\n },\n render: async function (scope, hash) {\n const html = await liquid.renderer.renderTemplates(this.templates, scope)\n const ctx = create(CaptureScope)\n ctx[this.variable] = html\n scope.push(ctx)\n }\n })\n}\n","export default function (liquid, Liquid) {\n liquid.registerTag('case', {\n\n parse: function (tagToken, remainTokens) {\n this.cond = tagToken.args\n this.cases = []\n this.elseTemplates = []\n\n let p = []\n const stream = 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', token => stream.stop())\n .on('template', tpl => p.push(tpl))\n .on('end', x => {\n throw new Error(`tag ${tagToken.raw} not closed`)\n })\n\n stream.start()\n },\n\n render: function (scope, hash) {\n for (let i = 0; i < this.cases.length; i++) {\n const branch = this.cases[i]\n const val = Liquid.evalExp(branch.val, scope)\n const cond = Liquid.evalExp(this.cond, scope)\n if (val === cond) {\n return liquid.renderer.renderTemplates(branch.templates, scope)\n }\n }\n return liquid.renderer.renderTemplates(this.elseTemplates, scope)\n }\n })\n}\n","export default function (liquid) {\n liquid.registerTag('comment', {\n parse: function (tagToken, remainTokens) {\n const stream = liquid.parser.parseStream(remainTokens)\n stream\n .on('token', token => {\n if (token.name === 'endcomment') stream.stop()\n })\n .on('end', x => {\n throw new Error(`tag ${tagToken.raw} not closed`)\n })\n stream.start()\n }\n })\n}\n","import assert from '../util/assert'\nimport { value, quotedLine } from '../lexical'\n\nconst staticFileRE = /[^\\s,]+/\n\nexport default function (liquid, Liquid) {\n const withRE = new RegExp(`with\\\\s+(${value.source})`)\n\n liquid.registerTag('include', {\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 liquid.parseAndRender(template, scope.getAll(), scope.opts)\n } else {\n filepath = Liquid.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.opts.blocks\n const originBlockMode = scope.opts.blockMode\n\n scope.opts.blocks = {}\n scope.opts.blockMode = 'output'\n if (this.with) {\n hash[filepath] = Liquid.evalValue(this.with, scope)\n }\n const templates = await liquid.getTemplate(filepath, scope.opts.root)\n scope.push(hash)\n const html = await liquid.renderer.renderTemplates(templates, scope)\n scope.pop(hash)\n scope.opts.blocks = originBlocks\n scope.opts.blockMode = originBlockMode\n return html\n }\n })\n}\n","import { create } from '../util/underscore'\nimport assert from '../util/assert'\nimport { identifier } from '../lexical'\n\nexport default function (liquid, Liquid) {\n const { CaptureScope, AssignScope, DecrementScope } = Liquid.Types\n\n liquid.registerTag('decrement', {\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, hash) {\n let context = scope.findContextFor(\n this.variable,\n ctx => {\n const proto = Object.getPrototypeOf(ctx)\n return proto !== CaptureScope && proto !== AssignScope\n }\n )\n if (!context) {\n context = create(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}\n","import assert from '../util/assert'\nimport { value as rValue } from '../lexical'\n\nexport default function (liquid, Liquid) {\n const groupRE = new RegExp(`^(?:(${rValue.source})\\\\s*:\\\\s*)?(.*)$`)\n const candidatesRE = new RegExp(rValue.source, 'g')\n\n liquid.registerTag('cycle', {\n\n parse: function (tagToken, remainTokens) {\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, hash) {\n const group = Liquid.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 Liquid.evalValue(candidate, scope)\n }\n })\n}\n","export default function (liquid, Liquid) {\n liquid.registerTag('if', {\n\n parse: function (tagToken, remainTokens) {\n this.branches = []\n this.elseTemplates = []\n\n let p\n const stream = 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', token => stream.stop())\n .on('template', tpl => p.push(tpl))\n .on('end', x => {\n throw new Error(`tag ${tagToken.raw} not closed`)\n })\n\n stream.start()\n },\n\n render: function (scope, hash) {\n for (const branch of this.branches) {\n const cond = Liquid.evalExp(branch.cond, scope)\n if (Liquid.isTruthy(cond)) {\n return liquid.renderer.renderTemplates(branch.templates, scope)\n }\n }\n return liquid.renderer.renderTemplates(this.elseTemplates, scope)\n }\n })\n}\n","import assert from '../util/assert'\nimport { create } from '../util/underscore'\nimport { identifier } from '../lexical'\n\nexport default function (liquid, Liquid) {\n const { CaptureScope, AssignScope, IncrementScope } = Liquid.Types\n\n liquid.registerTag('increment', {\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, hash) {\n let context = scope.findContextFor(\n this.variable,\n ctx => {\n const proto = Object.getPrototypeOf(ctx)\n return proto !== CaptureScope && proto !== AssignScope\n }\n )\n if (!context) {\n context = create(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}\n","import assert from '../util/assert'\nimport { value as rValue } from '../lexical'\n\n/*\n * blockMode:\n * * \"store\": store rendered html into blocks\n * * \"output\": output rendered html\n */\n\nexport default function (liquid, Liquid) {\n const staticFileRE = /\\S+/\n\n liquid.registerTag('layout', {\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 = liquid.parser.parse(remainTokens)\n },\n render: async function (scope, hash) {\n const layout = scope.opts.dynamicPartials\n ? Liquid.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.opts.blockMode = 'store'\n const html = await liquid.renderer.renderTemplates(this.tpls, scope)\n if (scope.opts.blocks[''] === undefined) {\n scope.opts.blocks[''] = html\n }\n const templates = await liquid.getTemplate(layout, scope.opts.root)\n scope.push(hash)\n scope.opts.blockMode = 'output'\n const partial = await liquid.renderer.renderTemplates(templates, scope)\n scope.pop(hash)\n return partial\n }\n })\n\n liquid.registerTag('block', {\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 = 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.opts.blocks[this.block]\n const html = childDefined !== undefined\n ? childDefined\n : await liquid.renderer.renderTemplates(this.tpls, scope)\n\n if (scope.opts.blockMode === 'store') {\n scope.opts.blocks[this.block] = html\n return ''\n }\n return html\n }\n })\n}\n","export default function (liquid) {\n liquid.registerTag('raw', {\n parse: function (tagToken, remainTokens) {\n this.tokens = []\n\n const stream = 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 (scope, hash) {\n return this.tokens.map(token => token.raw).join('')\n }\n })\n}\n","import { mapSeries } from '../util/promise'\nimport assert from '../util/assert'\nimport { identifier, value, hash } from '../lexical'\n\nexport default function (liquid, Liquid) {\n const re = new RegExp(`^(${identifier.source})\\\\s+in\\\\s+` +\n `(${value.source})` +\n `(?:\\\\s+${hash.source})*$`)\n\n liquid.registerTag('tablerow', {\n\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 = liquid.parser.parseStream(remainTokens)\n .on('start', () => (p = this.templates))\n .on('tag:endtablerow', token => 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 = Liquid.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, i) => {\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 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}\n","export default function (liquid, Liquid) {\n liquid.registerTag('unless', {\n parse: function (tagToken, remainTokens) {\n this.templates = []\n this.elseTemplates = []\n let p\n const stream = liquid.parser.parseStream(remainTokens)\n .on('start', x => {\n p = this.templates\n this.cond = tagToken.args\n })\n .on('tag:else', () => (p = this.elseTemplates))\n .on('tag:endunless', token => stream.stop())\n .on('template', tpl => p.push(tpl))\n .on('end', x => {\n throw new Error(`tag ${tagToken.raw} not closed`)\n })\n\n stream.start()\n },\n\n render: function (scope, hash) {\n const cond = Liquid.evalExp(this.cond, scope)\n return Liquid.isFalsy(cond)\n ? liquid.renderer.renderTemplates(this.templates, scope)\n : liquid.renderer.renderTemplates(this.elseTemplates, scope)\n }\n })\n}\n","import For from './for'\nimport Assign from './assign'\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 Raw from './raw'\nimport Tablerow from './tablerow'\nimport Unless from './unless'\n\nexport default function (engine, Liquid) {\n Assign(engine, Liquid)\n Capture(engine, Liquid)\n Case(engine, Liquid)\n Comment(engine, Liquid)\n Cycle(engine, Liquid)\n Decrement(engine, Liquid)\n For(engine, Liquid)\n If(engine, Liquid)\n Include(engine, Liquid)\n Increment(engine, Liquid)\n Layout(engine, Liquid)\n Raw(engine, Liquid)\n Tablerow(engine, Liquid)\n Unless(engine, Liquid)\n}\n","const 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 // Startday is an integer of which day to start the week measuring from\n // TODO: that comment was retarted. fix it.\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 _number.pad(Math.floor((now - then) / 7) + 1, 2)\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 _number = {\n pad: function (value, size, ch) {\n if (!ch) ch = '0'\n let result = value.toString()\n let pad = size - result.length\n\n while (pad-- > 0) {\n result = ch + result\n }\n\n return result\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 _number.pad(d.getDate(), 2)\n },\n e: function (d) {\n return _number.pad(d.getDate(), 2, ' ')\n },\n H: function (d) {\n return _number.pad(d.getHours(), 2)\n },\n I: function (d) {\n return _number.pad(d.getHours() % 12 || 12, 2)\n },\n j: function (d) {\n return _number.pad(_date.getDayOfYear(d), 3)\n },\n k: function (d) {\n return _number.pad(d.getHours(), 2, ' ')\n },\n l: function (d) {\n return _number.pad(d.getHours() % 12 || 12, 2, ' ')\n },\n L: function (d) {\n return _number.pad(d.getMilliseconds(), 3)\n },\n m: function (d) {\n return _number.pad(d.getMonth() + 1, 2)\n },\n M: function (d) {\n return _number.pad(d.getMinutes(), 2)\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 _number.pad(d.getSeconds(), 2)\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 ? '-' : '+') + _number.pad(Math.abs(tz), 4)\n },\n '%': function () {\n return '%'\n }\n}\nformatCodes.h = formatCodes.b\nformatCodes.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 './util/strftime'\nimport * as _ from './util/underscore'\nimport { isTruthy } from './syntax'\n\nconst escapeMap = {\n '&': '&',\n '<': '<',\n '>': '>',\n '\"': '"',\n \"'\": '''\n}\nconst unescapeMap = {\n '&': '&',\n '<': '<',\n '>': '>',\n '"': '\"',\n ''': \"'\"\n}\n\nconst filters = {\n 'abs': v => Math.abs(v),\n 'append': (v, arg) => v + arg,\n 'capitalize': str => stringify(str).charAt(0).toUpperCase() + str.slice(1),\n 'ceil': v => Math.ceil(v),\n 'concat': (v, arg) => Array.prototype.concat.call(v, arg),\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 'default': (v, arg) => isTruthy(v) ? v : arg,\n 'divided_by': (v, arg) => v / arg,\n 'downcase': v => v.toLowerCase(),\n 'escape': escape,\n\n 'escape_once': str => escape(unescape(str)),\n 'first': v => v[0],\n 'floor': v => Math.floor(v),\n 'join': (v, arg) => v.join(arg === undefined ? ' ' : arg),\n 'last': v => _.last(v),\n 'lstrip': v => stringify(v).replace(/^\\s+/, ''),\n 'map': (arr, arg) => arr.map(v => v[arg]),\n 'minus': bindFixed((v, arg) => v - arg),\n 'modulo': bindFixed((v, arg) => v % arg),\n 'newline_to_br': v => v.replace(/\\n/g, '
'),\n 'plus': bindFixed((v, arg) => Number(v) + Number(arg)),\n 'prepend': (v, arg) => arg + v,\n 'remove': (v, arg) => v.split(arg).join(''),\n 'remove_first': (v, l) => v.replace(l, ''),\n 'replace': (v, pattern, replacement) =>\n stringify(v).split(pattern).join(replacement),\n 'replace_first': (v, arg1, arg2) => stringify(v).replace(arg1, arg2),\n 'reverse': v => v.reverse(),\n 'round': (v, arg) => {\n const amp = Math.pow(10, arg || 0)\n return Math.round(v * amp, arg) / amp\n },\n 'rstrip': str => stringify(str).replace(/\\s+$/, ''),\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 'sort': (v, arg) => v.sort(arg),\n 'split': (v, arg) => stringify(v).split(arg),\n 'strip': (v) => stringify(v).trim(),\n 'strip_html': v => stringify(v).replace(/|||<.*?>/g, ''),\n 'strip_newlines': v => stringify(v).replace(/\\n/g, ''),\n 'times': (v, arg) => v * arg,\n 'truncate': (v, l, o) => {\n v = stringify(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 '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 'upcase': str => stringify(str).toUpperCase(),\n 'url_decode': x => x.split('+').map(decodeURIComponent).join(' '),\n 'url_encode': x => x.split(' ').map(encodeURIComponent).join('+')\n}\n\nfunction escape (str) {\n return stringify(str).replace(/&|<|>|\"|'/g, m => escapeMap[m])\n}\n\nfunction unescape (str) {\n return stringify(str).replace(/&(amp|lt|gt|#34|#39);/g, m => unescapeMap[m])\n}\n\nfunction getFixed (v) {\n const p = (v + '').split('.')\n return (p.length > 1) ? p[1].length : 0\n}\n\nfunction getMaxFixed (l, r) {\n return Math.max(getFixed(l), getFixed(r))\n}\n\nfunction stringify (obj) {\n return obj + ''\n}\n\nfunction bindFixed (cb) {\n return (l, r) => {\n const f = getMaxFixed(l, r)\n return cb(l, r).toFixed(f)\n }\n}\n\nfunction isValidDate (date) {\n return date instanceof Date && !isNaN(date.getTime())\n}\n\nexport default function registerAll (liquid, Liquid) {\n return _.forOwn(filters, (func, name) => liquid.registerFilter(name, func))\n}\n\nregisterAll.filters = filters\n","import Scope from './scope'\nimport * as template from './template'\nimport * as _ from './util/underscore'\nimport assert from './util/assert'\nimport * as tokenizer from './tokenizer'\nimport Render from './render'\nimport Tag from './tag'\nimport Filter from './filter'\nimport Parser from './parser'\nimport { isTruthy, isFalsy, evalExp, evalValue } from './syntax'\nimport { ParseError, TokenizationError, RenderBreakError, AssertionError } from './util/error'\nimport tags from './tags/index'\nimport filters from './filters'\n\nexport default class Liquid {\n private cache: object\n private options: any\n private tags: any\n private filters: any\n private parser: any\n private renderer: any\n\n constructor (options) {\n options = _.assign({\n root: ['.'],\n cache: false,\n extname: '',\n dynamicPartials: true,\n trim_tag_right: false,\n trim_tag_left: false,\n trim_value_right: false,\n trim_value_left: false,\n greedy: true,\n strict_filters: false,\n strict_variables: false\n }, options)\n options.root = normalizeStringArray(options.root)\n\n if (options.cache) {\n this.cache = {}\n }\n this.options = options\n this.tags = Tag()\n this.filters = Filter(options)\n this.parser = Parser(this.tags, this.filters)\n this.renderer = Render()\n\n tags(this, Liquid)\n filters(this, Liquid)\n }\n parse(html: string, filepath?: string) {\n const tokens = tokenizer.parse(html, filepath, this.options)\n return this.parser.parse(tokens)\n }\n render(tpl: string, ctx: any, opts: any) {\n opts = _.assign({}, this.options, opts)\n const scope = new Scope(ctx, opts)\n return this.renderer.renderTemplates(tpl, scope)\n }\n async parseAndRender(html, ctx, opts) {\n const tpl = await this.parse(html)\n return this.render(tpl, ctx, opts)\n }\n async getTemplate(file, root) {\n const filepath = await template.resolve(file, root, this.options)\n return this.respectCache(filepath, async () => {\n const str = await template.read(filepath)\n return this.parse(str, filepath)\n })\n }\n async renderFile(file, ctx, opts) {\n opts = _.assign({}, opts)\n const templates = await this.getTemplate(file, opts.root)\n return this.render(templates, ctx, opts)\n }\n async respectCache (key, getter) {\n const cacheEnabled = this.options.cache\n if (cacheEnabled && this.cache[key]) {\n return this.cache[key]\n }\n const value = await getter()\n if (cacheEnabled) {\n this.cache[key] = value\n }\n return value\n }\n evalValue (str, scope) {\n const tpl = this.parser.parseValue(str.trim())\n return this.renderer.evalValue(tpl, scope)\n }\n registerFilter (name, filter) {\n return this.filters.register(name, filter)\n }\n registerTag (name, tag) {\n return this.tags.register(name, tag)\n }\n plugin (plugin) {\n return plugin.call(this, Liquid)\n }\n express (opts) {\n opts = opts || {}\n const self = this\n return function (filePath, ctx, cb) {\n assert(_.isArray(this.root) || _.isString(this.root),\n 'illegal views root, are you using express.js?')\n 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 = {\n ParseError,\n TokenizationError,\n RenderBreakError,\n AssertionError,\n AssignScope: {},\n CaptureScope: {},\n IncrementScope: {},\n DecrementScope: {}\n }\n}\n\nfunction normalizeStringArray (value) {\n if (_.isArray(value)) return value\n if (_.isString(value)) return [value]\n throw new TypeError('illegal root: ' + value)\n}\n"],"names":["range","tslib_1.__extends","_.create","_.assign","_\r\n .range","path","_.last","value","_.isObject","filter","_.isNil","_.isFunction","lexical.isInteger","_.isArray","_.isString","_.promisify","fs.stat","fs.readFile","path.extname","_.uniq","path.resolve","lexical.tagLine","operators","lexical.operators","lexical.quoteBalanced","lexical.rangeLine","lexical.isLiteral","lexical.parseLiteral","lexical.isVariable","hash","lexical.value","lexical.filterLine","lexical.matchValue","lexical.filter","rValue","stringify","_.forOwn","filters","tokenizer.parse","template.resolve","template.read"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,IAAM,KAAK,GAAG,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAA;AACvC,IAAM,QAAQ,GAAG,KAAK,CAAC,SAAS,CAAC,QAAQ,CAAA;;;;;;AAOzC,SAAgB,QAAQ,CAAE,KAAK;IAC7B,OAAO,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,iBAAiB,CAAA;CAC/C;AAED,SAAgB,UAAU,CAAE,KAAK;IAC/B,OAAO,OAAO,KAAK,KAAK,UAAU,CAAA;CACnC;AAED,SAAgB,SAAS,CAAE,EAAE;IAC3B,OAAO;QAAU,cAAO;aAAP,UAAO,EAAP,qBAAO,EAAP,IAAO;YAAP,yBAAO;;QACtB,OAAO,IAAI,OAAO,CAAC,UAAC,OAAO,EAAE,MAAM;YACjC,EAAE,eAAI,IAAI,SAAE,UAAC,GAAG,EAAE,MAAM;oBACtB,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,CAAA;iBACpC,IAAC;SACH,CAAC,CAAA;KACH,CAAA;CACF;AAED,SAAgB,SAAS,CAAE,KAAK;IAC9B,IAAI,KAAK,CAAC,KAAK,CAAC;QAAE,OAAO,MAAM,CAAC,KAAK,CAAC,CAAA;IACtC,IAAI,UAAU,CAAC,KAAK,CAAC,SAAS,CAAC;QAAE,OAAO,SAAS,CAAC,KAAK,CAAC,SAAS,EAAE,CAAC,CAAA;IACpE,IAAI,UAAU,CAAC,KAAK,CAAC,QAAQ,CAAC;QAAE,OAAO,SAAS,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAA;IAClE,IAAI,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC;QAAE,OAAO,KAAK,CAAC,IAAI,EAAE,CAAA;IAC/C,IAAI,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;QAAE,OAAO,eAAe,CAAC,KAAK,CAAC,CAAA;IACjF,IAAI,UAAU,CAAC,KAAK,CAAC,QAAQ,CAAC;QAAE,OAAO,KAAK,CAAC,QAAQ,EAAE,CAAA;IACvD,OAAO,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;CACzB;AAED,SAAS,eAAe,CAAE,KAAK;IAC7B,IAAM,KAAK,GAAG,EAAE,CAAA;IAChB,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,UAAC,GAAG,EAAE,KAAK;QACtC,IAAI,QAAQ,CAAC,KAAK,CAAC,EAAE;YACnB,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE;gBAC/B,OAAM;aACP;YACD,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;SAClB;QACD,OAAO,KAAK,CAAA;KACb,CAAC,CAAA;CACH;AAED,SAAgB,MAAM,CAAE,KAAK;IAC3B,OAAO,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;CAC5B;AAED,SAAgB,KAAK,CAAE,KAAK;IAC1B,OAAO,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS,CAAA;CAC7C;AAED,SAAgB,OAAO,CAAE,KAAK;;IAE5B,OAAO,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,gBAAgB,CAAA;CAC9C;AAED,AAOA;;;;;;;;AAQA,SAAgB,MAAM,CAAE,MAAM,EAAE,QAAQ;IACtC,MAAM,GAAG,MAAM,IAAI,EAAE,CAAA;IACrB,KAAK,IAAM,CAAC,IAAI,MAAM,EAAE;QACtB,IAAI,MAAM,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE;YAC5B,IAAI,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC,KAAK,KAAK;gBAAE,MAAK;SACpD;KACF;IACD,OAAO,MAAM,CAAA;CACd;;;;;;;;;;;;AAaD,SAAgB,MAAM,CAAE,GAAG;IAAE,cAAO;SAAP,UAAO,EAAP,qBAAO,EAAP,IAAO;QAAP,6BAAO;;IAClC,GAAG,GAAG,QAAQ,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,EAAE,CAAA;IAC9B,IAAI,CAAC,OAAO,CAAC,UAAA,GAAG,IAAI,OAAA,YAAY,CAAC,GAAG,EAAE,GAAG,CAAC,GAAA,CAAC,CAAA;IAC3C,OAAO,GAAG,CAAA;CACX;AAED,SAAS,YAAY,CAAC,MAAM,EAAE,GAAG;IAC/B,KAAI,IAAI,GAAG,IAAI,GAAG;QAAE,IAAI,GAAG,CAAC,cAAc,CAAC,GAAG,CAAC;YAAE,MAAM,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,CAAA;CACxE;AAED,SAAgB,IAAI,CAAE,GAAG;IACvB,OAAO,GAAG,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,CAAA;CAC3B;AAED,SAAgB,IAAI,CAAE,GAAG;IACvB,IAAM,CAAC,GAAG,EAAE,CAAA;IACZ,IAAM,CAAC,GAAG,EAAE,CAAA;IACZ,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,EAAE;QAC1C,IAAI,CAAC,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE;YAC5B,SAAQ;SACT;QACD,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAA;QACd,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAA;KACd;IACD,OAAO,CAAC,CAAA;CACT;;;;;;;AAQD,SAAgB,QAAQ,CAAE,KAAK;IAC7B,IAAM,IAAI,GAAG,OAAO,KAAK,CAAA;IACzB,OAAO,KAAK,KAAK,IAAI,KAAK,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,UAAU,CAAC,CAAA;CACpE;;;;;;;;;AAUD,SAAgB,KAAK,CAAE,KAAa,EAAE,IAAY,EAAE,IAAa;IAC/D,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE;QAC1B,IAAI,GAAG,KAAK,CAAA;QACZ,KAAK,GAAG,CAAC,CAAA;KACV;IACD,IAAI,GAAG,IAAI,IAAI,CAAC,CAAA;IAEhB,IAAM,GAAG,GAAG,EAAE,CAAA;IACd,KAAK,IAAI,CAAC,GAAG,KAAK,EAAE,CAAC,GAAG,IAAI,EAAE,CAAC,IAAI,IAAI,EAAE;QACvC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;KACZ;IACD,OAAO,GAAG,CAAA;CACX;;AC5JD;AACA,IAAM,YAAY,GAAG,SAAS,CAAA;AAC9B,IAAM,YAAY,GAAG,SAAS,CAAA;AAC9B,AAAO,IAAM,MAAM,GAAG,IAAI,MAAM,CAAI,YAAY,CAAC,MAAM,SAAI,YAAY,CAAC,MAAQ,CAAC,CAAA;AACjF,AAAO,IAAM,aAAa,GAAG,IAAI,MAAM,CAAC,QAAM,MAAM,CAAC,MAAM,cAAU,CAAC,CAAA;;AAGtE,AAAO,IAAM,OAAO,GAAG,OAAO,CAAA;AAC9B,AAAO,IAAM,MAAM,GAAG,oBAAoB,CAAA;AAC1C,AAAO,IAAM,IAAI,GAAG,YAAY,CAAA;;AAGhC,AAAO,IAAM,UAAU,GAAG,YAAY,CAAA;AACtC,AAAO,IAAM,SAAS,GAAG,IAAI,MAAM,CAAC,WAAS,MAAM,CAAC,MAAM,oBAAiB,CAAC,CAAA;AAC5E,AAAO,IAAM,OAAO,GAAG,IAAI,MAAM,CAAC,QAAM,MAAM,CAAC,MAAM,SAAI,IAAI,CAAC,MAAM,SAAI,MAAM,CAAC,MAAM,MAAG,CAAC,CAAA;AACzF,AAAO,IAAM,QAAQ,GAAG,IAAI,MAAM,CAAI,UAAU,CAAC,MAAM,cAAS,UAAU,CAAC,MAAM,SAAI,SAAS,CAAC,MAAM,OAAI,CAAC,CAAA;;AAG1G,AAAO,IAAM,UAAU,GAAG,IAAI,MAAM,CAAC,QAAM,QAAQ,CAAC,MAAM,SAAI,MAAM,CAAC,MAAM,MAAG,CAAC,CAAA;AAC/E,AAAO,IAAMA,OAAK,GAAG,IAAI,MAAM,CAAC,QAAM,UAAU,CAAC,MAAM,cAAS,UAAU,CAAC,MAAM,QAAK,CAAC,CAAA;AACvF,AAAO,IAAM,YAAY,GAAG,IAAI,MAAM,CAAC,SAAO,UAAU,CAAC,MAAM,gBAAW,UAAU,CAAC,MAAM,SAAM,CAAC,CAAA;AAElG,AAAO,IAAM,KAAK,GAAG,IAAI,MAAM,CAAC,QAAM,QAAQ,CAAC,MAAM,SAAI,OAAO,CAAC,MAAM,SAAIA,OAAK,CAAC,MAAM,MAAG,CAAC,CAAA;;AAG3F,AAAO,IAAM,IAAI,GAAG,IAAI,MAAM,CAAC,QAAM,UAAU,CAAC,MAAM,qBAAgB,KAAK,CAAC,MAAM,MAAG,CAAC,CAAA;AACtF,AAAO,IAAM,WAAW,GAAG,IAAI,MAAM,CAAC,MAAI,UAAU,CAAC,MAAM,mBAAc,KAAK,CAAC,MAAM,MAAG,EAAE,GAAG,CAAC,CAAA;;AAG9F,AAAO,IAAM,OAAO,GAAG,IAAI,MAAM,CAAC,WAAS,UAAU,CAAC,MAAM,0BAAuB,CAAC,CAAA;AACpF,AAAO,IAAM,WAAW,GAAG,IAAI,MAAM,CAAC,MAAI,OAAO,CAAC,MAAM,MAAG,EAAE,GAAG,CAAC,CAAA;AACjE,AAAO,IAAM,YAAY,GAAG,IAAI,MAAM,CAAC,MAAI,QAAQ,CAAC,MAAM,MAAG,CAAC,CAAA;AAC9D,AAAO,IAAM,UAAU,GAAG,IAAI,MAAM,CAAC,MAAI,MAAM,CAAC,MAAM,MAAG,CAAC,CAAA;AAC1D,AAAO,IAAM,QAAQ,GAAG,IAAI,MAAM,CAAC,MAAI,IAAI,CAAC,MAAM,MAAG,EAAE,GAAG,CAAC,CAAA;AAC3D,AAAO,IAAM,UAAU,GAAG,IAAI,MAAM,CAAC,MAAI,MAAM,CAAC,MAAM,MAAG,CAAC,CAAA;AAC1D,AAAO,IAAM,SAAS,GAAG,IAAI,MAAM,CAAC,MAAI,YAAY,CAAC,MAAM,MAAG,CAAC,CAAA;AAC/D,AAAO,IAAM,WAAW,GAAG,IAAI,MAAM,CAAC,MAAI,OAAO,CAAC,MAAM,MAAG,CAAC,CAAA;;AAG5D,AAAO,IAAM,gBAAgB,GAAG,IAAI,MAAM,CAAC,QAAM,UAAU,CAAC,MAAM,mBAAc,KAAK,CAAC,MAAQ,CAAC,CAAA;AAC/F,AAAO,IAAM,SAAS,GAAG,IAAI,MAAM,CAAI,gBAAgB,CAAC,MAAM,kBAAa,gBAAgB,CAAC,MAAM,OAAI,CAAC,CAAA;AACvG,AAAO,IAAM,MAAM,GAAG,IAAI,MAAM,CAAI,UAAU,CAAC,MAAM,oBAAe,SAAS,CAAC,MAAM,OAAI,EAAE,GAAG,CAAC,CAAA;AAC9F,AAAO,IAAM,aAAa,GAAG,IAAI,MAAM,CAAC,MAAI,UAAU,CAAC,MAAM,sBAAiB,SAAS,CAAC,MAAM,QAAK,CAAC,CAAA;AACpG,AAAO,IAAM,UAAU,GAAG,IAAI,MAAM,CAAC,MAAI,aAAa,CAAC,MAAM,MAAG,CAAC,CAAA;AAEjE,AAAO,IAAM,SAAS,GAAG;IACvB,UAAU;IACV,WAAW;IACX,gCAAgC;CACjC,CAAA;AAED,SAAgB,SAAS,CAAE,GAAG;IAC5B,OAAO,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;CAC7B;AAED,SAAgB,SAAS,CAAE,GAAG;IAC5B,OAAO,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;CAC7B;AAED,SAIgB,UAAU,CAAE,GAAG;IAC7B,OAAO,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;CAC9B;AAED,SAAgB,UAAU,CAAE,GAAG;IAC7B,OAAO,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;CACvB;AAED,SAAgB,YAAY,CAAE,GAAG;IAC/B,IAAI,GAAG,GAAG,GAAG,CAAC,KAAK,CAAC,UAAU,CAAC,CAAA;IAC/B,IAAI,GAAG,EAAE;QACP,OAAO,MAAM,CAAC,GAAG,CAAC,CAAA;KACnB;IACD,GAAG,GAAG,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAA;IACzB,IAAI,GAAG,EAAE;QACP,OAAO,GAAG,CAAC,WAAW,EAAE,KAAK,MAAM,CAAA;KACpC;IACD,GAAG,GAAG,GAAG,CAAC,KAAK,CAAC,UAAU,CAAC,CAAA;IAC3B,IAAI,GAAG,EAAE;QACP,OAAO,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;KACxB;IACD,MAAM,IAAI,SAAS,CAAC,mBAAiB,GAAG,iBAAc,CAAC,CAAA;CACxD;;ACnFD,SAAS,YAAY;IACnB,IAAI,KAAK,CAAC,iBAAiB,EAAE;QAC3B,KAAK,CAAC,iBAAiB,CAAC,IAAI,EAAE,IAAI,CAAC,WAAW,CAAC,CAAA;KAChD;CACF;AAED;IASE,qBAAY,GAAG,EAAE,KAAK;QACpB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC,KAAK,CAAA;QACxB,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC,IAAI,CAAA;QACtB,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC,IAAI,CAAA;QACtB,IAAI,CAAC,aAAa,GAAG,GAAG,CAAA;QACxB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAA;KACnB;IACD,uCAAiB,GAAjB,UAAkB,GAAG;QACnB,IAAI,CAAC,IAAI,GAAG,GAAG,CAAC,WAAW,CAAC,IAAI,CAAA;QAEhC,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;QACtB,IAAM,GAAG,GAAG,IAAI,CAAC,aAAa,CAAA;QAC9B,IAAM,OAAO,GAAG,SAAS,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,CAAA;QAChD,IAAI,CAAC,OAAO,GAAG,SAAS,CAAC,GAAG,CAAC,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,CAAA;QACjD,IAAI,CAAC,KAAK,GAAG,OAAO;YAClB,IAAI,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,OAAO,CAAC;aAChC,GAAG,CAAC,KAAK,GAAG,SAAS,GAAG,GAAG,CAAC,KAAK,GAAG,EAAE,CAAC,CAAA;KAC7C;IACH,kBAAC;CAAA,IAAA;AAED;IAAuCC,qCAAW;IAChD,2BAAY,OAAO,EAAE,KAAK;QAA1B,YACE,kBAAM,EAAC,OAAO,SAAA,EAAC,EAAE,KAAK,CAAC,SAExB;QADC,iBAAM,iBAAiB,aAAC,KAAI,CAAC,CAAA;;KAC9B;IACH,wBAAC;CALD,CAAuC,WAAW,GAKjD;AACD,iBAAiB,CAAC,SAAS,GAAGC,MAAQ,CAAC,KAAK,CAAC,SAAS,CAAC,CAAA;AACvD,iBAAiB,CAAC,SAAS,CAAC,WAAW,GAAG,iBAAiB,CAAA;AAE3D;IAAgCD,8BAAW;IACzC,oBAAY,GAAG,EAAE,KAAK;QAAtB,YACE,kBAAM,GAAG,EAAE,KAAK,CAAC,SAGlB;QAFCE,MAAQ,CAAC,KAAI,EAAE,GAAG,CAAC,CAAA;QACnB,iBAAM,iBAAiB,aAAC,KAAI,CAAC,CAAA;;KAC9B;IACH,iBAAC;CAND,CAAgC,WAAW,GAM1C;AACD,UAAU,CAAC,SAAS,GAAGD,MAAQ,CAAC,KAAK,CAAC,SAAS,CAAC,CAAA;AAChD,UAAU,CAAC,SAAS,CAAC,WAAW,GAAG,UAAU,CAAA;AAE7C;IAAiCD,+BAAW;IAC1C,qBAAY,GAAG,EAAE,GAAG;QAApB,YACE,kBAAM,GAAG,EAAE,GAAG,CAAC,KAAK,CAAC,SAGtB;QAFCE,MAAQ,CAAC,KAAI,EAAE,GAAG,CAAC,CAAA;QACnB,iBAAM,iBAAiB,aAAC,KAAI,CAAC,CAAA;;KAC9B;IACH,kBAAC;CAND,CAAiC,WAAW,GAM3C;AACD,WAAW,CAAC,SAAS,GAAGD,MAAQ,CAAC,KAAK,CAAC,SAAS,CAAC,CAAA;AACjD,WAAW,CAAC,SAAS,CAAC,WAAW,GAAG,WAAW,CAAA;AAE/C;IAEE,0BAAa,OAAO;QAClB,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QACvB,IAAI,CAAC,OAAO,GAAG,OAAO,GAAG,EAAE,CAAA;KAC5B;IACH,uBAAC;CAAA,IAAA;AACD,gBAAgB,CAAC,SAAS,GAAGA,MAAQ,CAAC,KAAK,CAAC,SAAS,CAAC,CAAA;AACtD,gBAAgB,CAAC,SAAS,CAAC,WAAW,GAAG,gBAAgB,CAAA;AAEzD;IAEE,wBAAa,OAAO;QAClB,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QACvB,IAAI,CAAC,OAAO,GAAG,OAAO,GAAG,EAAE,CAAA;KAC5B;IACH,qBAAC;CAAA,IAAA;AACD,cAAc,CAAC,SAAS,GAAGA,MAAQ,CAAC,KAAK,CAAC,SAAS,CAAC,CAAA;AACpD,cAAc,CAAC,SAAS,CAAC,WAAW,GAAG,cAAc,CAAA;AAErD,SAAS,SAAS,CAAE,KAAK,EAAE,UAAU;IACnC,IAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;IAC/B,IAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,UAAU,GAAG,CAAC,EAAE,CAAC,CAAC,CAAA;IACzC,IAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,UAAU,GAAG,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,CAAA;IAElD,IAAM,OAAO,GAAGE,KACR,CAAC,KAAK,EAAE,GAAG,GAAG,CAAC,CAAC;SACrB,GAAG,CAAC,UAAA,UAAU;QACb,IAAM,SAAS,GAAG,CAAC,UAAU,KAAK,UAAU,IAAI,KAAK,GAAG,KAAK,CAAA;QAC7D,IAAM,GAAG,GAAG,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,UAAU,CAAC,CAAA;QACpD,IAAM,IAAI,GAAG,KAAK,CAAC,UAAU,GAAG,CAAC,CAAC,CAAA;QAClC,OAAO,KAAG,SAAS,GAAG,GAAG,UAAK,IAAM,CAAA;KACrC,CAAC;SACD,IAAI,CAAC,IAAI,CAAC,CAAA;IAEb,OAAO,OAAO,CAAA;CACf;AAED,SAAS,SAAS,CAAE,GAAG,EAAE,KAAK;IAC5B,GAAG,GAAG,GAAG,IAAI,EAAE,CAAA;IACf,IAAI,KAAK,CAAC,IAAI,EAAE;QACd,GAAG,IAAI,SAAS,GAAG,KAAK,CAAC,IAAI,CAAA;KAC9B;IACD,IAAI,KAAK,CAAC,IAAI,EAAE;QACd,GAAG,IAAI,SAAS,GAAG,KAAK,CAAC,IAAI,CAAA;KAC9B;IACD,OAAO,GAAG,CAAA;CACX;AAED,SAAS,QAAQ,CAAE,MAAM,EAAE,GAAG;IAC5B,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC,CAAA;IACjB,IAAM,KAAK,GAAG,KAAK,CAAC,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;IAClD,OAAO,KAAK,GAAG,GAAG,CAAA;CACnB;;iBCrHwB,SAAc,EAAE,OAAe;IACtD,IAAI,CAAC,SAAS,EAAE;QACd,OAAO,GAAG,OAAO,IAAI,YAAU,SAAS,gBAAa,CAAA;QACrD,MAAM,IAAI,cAAc,CAAC,OAAO,CAAC,CAAA;KAClC;CACF;;ACKD;IAGE,eAAa,GAAQ,EAAE,IAAU;QAApB,oBAAA,EAAA,QAAQ;QACnB,IAAM,cAAc,GAAiB;YACnC,eAAe,EAAE,IAAI;YACrB,gBAAgB,EAAE,KAAK;YACvB,cAAc,EAAE,KAAK;YACrB,MAAM,EAAE,EAAE;YACV,IAAI,EAAE,EAAE;SACT,CAAA;QACD,IAAI,CAAC,IAAI,GAAGD,MAAQ,CAAC,cAAc,EAAE,IAAI,CAAC,CAAA;QAC1C,IAAI,CAAC,QAAQ,GAAG,CAAC,GAAG,IAAI,EAAE,CAAC,CAAA;KAC5B;IACD,sBAAM,GAAN;QACE,OAAO,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,UAAC,GAAG,EAAE,GAAG,IAAK,OAAAA,MAAQ,CAAC,GAAG,EAAE,GAAG,CAAC,GAAA,EAAED,MAAQ,CAAC,IAAI,CAAC,CAAC,CAAA;KAC9E;IACD,mBAAG,GAAH,UAAKG,OAAI;QAAT,iBAIC;QAHC,IAAM,KAAK,GAAG,IAAI,CAAC,iBAAiB,CAACA,OAAI,CAAC,CAAA;QAC1C,IAAM,KAAK,GAAG,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAIC,IAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;QACpE,OAAO,KAAK,CAAC,MAAM,CAAC,UAACC,QAAK,EAAE,GAAG,IAAK,OAAA,KAAI,CAAC,YAAY,CAACA,QAAK,EAAE,GAAG,CAAC,GAAA,EAAE,KAAK,CAAC,CAAA;KAC1E;IACD,mBAAG,GAAH,UAAKF,OAAI,EAAE,CAAC;QACV,IAAM,KAAK,GAAG,IAAI,CAAC,iBAAiB,CAACA,OAAI,CAAC,CAAA;QAC1C,IAAI,KAAK,GAAG,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAIC,IAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;QAClE,KAAK,CAAC,IAAI,CAAC,UAAC,GAAG,EAAE,CAAC;YAChB,IAAI,CAACE,QAAU,CAAC,KAAK,CAAC,EAAE;gBACtB,OAAO,IAAI,CAAA;aACZ;YACD,IAAI,CAAC,KAAK,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;gBAC1B,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;gBACd,OAAO,IAAI,CAAA;aACZ;YACD,IAAI,SAAS,KAAK,KAAK,CAAC,GAAG,CAAC,EAAE;gBAC5B,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,CAAA;aAChB;YACD,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,CAAA;SACnB,CAAC,CAAA;KACH;IACD,uBAAO,GAAP,UAAS,GAAG;QACV,OAAO,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,CAAA;KAClC;IACD,oBAAI,GAAJ,UAAM,GAAG;QACP,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;KAC/B;IACD,mBAAG,GAAH,UAAK,GAAG;QACN,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE;YACrB,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAA;SAC3B;QACD,IAAM,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,UAAA,KAAK,IAAI,OAAA,KAAK,KAAK,GAAG,GAAA,CAAC,CAAA;QACzD,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE;YACZ,MAAM,IAAI,SAAS,CAAC,6BAA6B,CAAC,CAAA;SACnD;QACD,OAAO,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;KACrC;IACD,8BAAc,GAAd,UAAgB,GAAG,EAAEC,SAAsB;QAAtB,0BAAA,EAAAA,aAAU,UAAA,GAAG,IAAI,OAAA,IAAI,GAAA,CAAC;QACzC,KAAK,IAAI,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE;YAClD,IAAM,SAAS,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAA;YAClC,IAAI,CAACA,SAAM,CAAC,SAAS,CAAC;gBAAE,SAAQ;YAChC,IAAI,GAAG,IAAI,SAAS,EAAE;gBACpB,OAAO,SAAS,CAAA;aACjB;SACF;QACD,OAAO,IAAI,CAAA;KACZ;IACD,4BAAY,GAAZ,UAAc,GAAG,EAAE,GAAG;QACpB,IAAI,GAAG,CAAA;QACP,IAAIC,KAAO,CAAC,GAAG,CAAC,EAAE;YAChB,GAAG,GAAG,SAAS,CAAA;SAChB;aAAM;YACL,GAAG,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAA;YACnB,GAAG,GAAG,GAAG,KAAK,MAAM,GAAG,QAAQ,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,CAAA;YAC/C,IAAIC,UAAY,CAAC,GAAG,CAAC,qBAAqB,CAAC,EAAE;gBAC3C,GAAG,GAAG,GAAG,CAAC,qBAAqB,CAAC,GAAG,CAAC,CAAA;aACrC;SACF;QACD,IAAID,KAAO,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE;YAC9C,MAAM,IAAI,SAAS,CAAC,yBAAuB,GAAK,CAAC,CAAA;SAClD;QACD,OAAO,GAAG,CAAA;KACX;;;;;;;;;IAUD,iCAAiB,GAAjB,UAAmB,GAAG;QACpB,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC,CAAA;QACjB,IAAM,GAAG,GAAG,EAAE,CAAA;QACd,IAAI,IAAI,GAAG,EAAE,CAAA;QACb,IAAI,CAAC,CAAA;QACL,IAAI,CAAC,GAAG,CAAC,CAAA;QACT,OAAO,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE;YACrB,QAAQ,GAAG,CAAC,CAAC,CAAC;gBACZ,KAAK,GAAG;oBACN,IAAI,EAAE,CAAA;oBAEN,IAAM,SAAS,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAA;oBAC5B,IAAI,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE;wBAC1B,CAAC,GAAG,GAAG,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC,GAAG,CAAC,CAAC,CAAA;wBACjC,MAAM,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,gBAAc,SAAS,UAAK,GAAK,CAAC,CAAA;wBACnD,IAAI,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAA;wBAC1B,IAAI,EAAE,CAAA;wBACN,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;qBACV;yBAAM;wBACL,CAAC,GAAG,iBAAiB,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAA;wBACjC,MAAM,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,oBAAkB,GAAK,CAAC,CAAA;wBACzC,IAAI,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAA;wBAC1B,IAAI,CAACE,SAAiB,CAAC,IAAI,CAAC,EAAE;4BAC5B,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAA;yBAC9B;wBACD,IAAI,EAAE,CAAA;wBACN,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;qBACV;oBACD,MAAK;gBACP,KAAK,GAAG;oBACN,IAAI,EAAE,CAAA;oBACN,CAAC,EAAE,CAAA;oBACH,MAAK;gBACP;oBACE,IAAI,IAAI,GAAG,CAAC,CAAC,CAAC,CAAA;oBACd,CAAC,EAAE,CAAA;aACN;SACF;QACD,IAAI,EAAE,CAAA;QAEN,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE;YACf,MAAM,IAAI,SAAS,CAAC,oBAAiB,GAAG,OAAG,CAAC,CAAA;SAC7C;QACD,OAAO,GAAG,CAAA;QAEV,SAAS,IAAI;YACX,IAAI,IAAI,CAAC,MAAM;gBAAE,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;YAC/B,IAAI,GAAG,EAAE,CAAA;SACV;KACF;IACH,YAAC;CAAA,IAAA;AAED,SAAS,QAAQ,CAAE,GAAG;IACpB,IAAID,UAAY,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE;QAC/B,OAAO,GAAG,CAAC,SAAS,EAAE,CAAA;KACvB;IACD,IAAIA,UAAY,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE;QAC9B,OAAO,GAAG,CAAC,QAAQ,EAAE,CAAA;KACtB;IACD,OAAO,GAAG,CAAA;CACX;AAED,SAAS,QAAQ,CAAE,GAAG;IACpB,IAAI,CAACD,KAAO,CAAC,GAAG,CAAC,IAAI,CAAC;QAAE,OAAO,GAAG,CAAC,IAAI,CAAA;IACvC,IAAIG,OAAS,CAAC,GAAG,CAAC,IAAIC,QAAU,CAAC,GAAG,CAAC;QAAE,OAAO,GAAG,CAAC,MAAM,CAAA;IACxD,OAAO,GAAG,CAAC,IAAI,CAAA;CAChB;AAED,SAAS,iBAAiB,CAAE,GAAG,EAAE,KAAK;IACpC,IAAI,KAAK,GAAG,CAAC,CAAA;IACb,KAAK,IAAI,CAAC,GAAG,KAAK,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;QACvC,IAAI,GAAG,CAAC,CAAC,CAAC,KAAK,GAAG,EAAE;YAClB,KAAK,EAAE,CAAA;SACR;QACD,IAAI,GAAG,CAAC,CAAC,CAAC,KAAK,GAAG,EAAE;YAClB,KAAK,EAAE,CAAA;YACP,IAAI,KAAK,KAAK,CAAC,EAAE;gBACf,OAAO,CAAC,CAAA;aACT;SACF;KACF;IACD,OAAO,CAAC,CAAC,CAAA;CACV;;ACxLD;;;;;;AAMA,SAAgB,SAAS,CAAE,QAAQ,EAAE,QAAQ;IAC3C,IAAI,GAAG,GAAG,OAAO,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,CAAC,CAAA;IAC3C,QAAQ,CAAC,OAAO,CAAC,UAAU,IAAI,EAAE,GAAG;QAClC,GAAG,GAAG,GAAG,CAAC,KAAK,CAAC,UAAA,CAAC,IAAI,OAAA,QAAQ,CAAC,IAAI,EAAE,GAAG,EAAE,QAAQ,CAAC,GAAA,CAAC,CAAA;KACpD,CAAC,CAAA;IACF,OAAO,GAAG,CAAA;CACX;;;;;;;AAQD,SAAgB,SAAS,CAAE,QAAQ,EAAE,QAAQ;IAC3C,IAAI,GAAG,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAA;IACjC,IAAM,MAAM,GAAG,EAAE,CAAA;IACjB,QAAQ,CAAC,OAAO,CAAC,UAAU,IAAI,EAAE,GAAG;QAClC,GAAG,GAAG,GAAG;aACN,IAAI,CAAC,cAAM,OAAA,QAAQ,CAAC,IAAI,EAAE,GAAG,EAAE,QAAQ,CAAC,GAAA,CAAC;aACzC,IAAI,CAAC,UAAA,CAAC,IAAI,OAAA,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,GAAA,CAAC,CAAA;KAC7B,CAAC,CAAA;IACF,OAAO,GAAG,CAAC,IAAI,CAAC,cAAM,OAAA,MAAM,GAAA,CAAC,CAAA;CAC9B;;ACxBD,IAAM,aAAa,GAA0CC,SAAW,CAACC,OAAO,CAAC,CAAA;AACjF,IAAM,aAAa,GAA4DD,SAAW,CAACE,WAAW,CAAC,CAAA;AAEvG,SAAsB,OAAO,CAAE,QAAQ,EAAE,IAAI,EAAE,OAAO;;;;;YACpD,IAAI,CAACC,YAAY,CAAC,QAAQ,CAAC,EAAE;gBAC3B,QAAQ,IAAI,OAAO,CAAC,OAAO,CAAA;aAC5B;YACD,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC,CAAA;YACtC,IAAI,GAAGC,IAAM,CAAC,IAAI,CAAC,CAAA;YACb,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,UAAA,IAAI,IAAI,OAAAC,YAAY,CAAC,IAAI,EAAE,QAAQ,CAAC,GAAA,CAAC,CAAA;YAC5D,sBAAO,SAAS,CAAC,KAAK,EAAE,UAAMf,OAAI;;;;;;gCAE9B,qBAAM,aAAa,CAACA,OAAI,CAAC,EAAA;;gCAAzB,SAAyB,CAAA;gCACzB,sBAAOA,OAAI,EAAA;;;gCAEX,GAAC,CAAC,OAAO,GAAM,GAAC,CAAC,IAAI,2BAAsB,QAAQ,aAAQ,IAAM,CAAA;gCACjE,MAAM,GAAC,CAAA;;;;qBAEV,CAAC,EAAA;;;CACH;AAED,SAAsB,IAAI,CAAE,QAAQ;;;YAClC,sBAAO,aAAa,CAAC,QAAQ,EAAE,MAAM,CAAC,EAAA;;;CACvC;;SC1BuB,cAAc,CAAE,MAAM,EAAE,OAAO;IACrD,OAAO,GAAG,MAAM,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,OAAO,CAAC,CAAA;IAC3C,IAAI,KAAK,GAAG,KAAK,CAAA;IAEjB,MAAM,CAAC,OAAO,CAAC,UAAC,KAAK,EAAE,CAAC;QACtB,IAAI,cAAc,CAAC,KAAK,EAAE,KAAK,EAAE,OAAO,CAAC,EAAE;YACzC,QAAQ,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,CAAA;SACxC;QAED,IAAI,KAAK,CAAC,IAAI,KAAK,KAAK,IAAI,KAAK,CAAC,IAAI,KAAK,KAAK;YAAE,KAAK,GAAG,IAAI,CAAA;QAC9D,IAAI,KAAK,CAAC,IAAI,KAAK,KAAK,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ;YAAE,KAAK,GAAG,KAAK,CAAA;QAElE,IAAI,eAAe,CAAC,KAAK,EAAE,KAAK,EAAE,OAAO,CAAC,EAAE;YAC1C,SAAS,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,CAAA;SACzC;KACF,CAAC,CAAA;CACH;AAED,SAAS,cAAc,CAAE,KAAK,EAAE,KAAK,EAAE,OAAO;IAC5C,IAAI,KAAK;QAAE,OAAO,KAAK,CAAA;IACvB,IAAI,KAAK,CAAC,IAAI,KAAK,KAAK;QAAE,OAAO,KAAK,CAAC,SAAS,IAAI,OAAO,CAAC,aAAa,CAAA;IACzE,IAAI,KAAK,CAAC,IAAI,KAAK,OAAO;QAAE,OAAO,KAAK,CAAC,SAAS,IAAI,OAAO,CAAC,eAAe,CAAA;CAC9E;AAED,SAAS,eAAe,CAAE,KAAK,EAAE,KAAK,EAAE,OAAO;IAC7C,IAAI,KAAK;QAAE,OAAO,KAAK,CAAA;IACvB,IAAI,KAAK,CAAC,IAAI,KAAK,KAAK;QAAE,OAAO,KAAK,CAAC,UAAU,IAAI,OAAO,CAAC,cAAc,CAAA;IAC3E,IAAI,KAAK,CAAC,IAAI,KAAK,OAAO;QAAE,OAAO,KAAK,CAAC,UAAU,IAAI,OAAO,CAAC,gBAAgB,CAAA;CAChF;AAED,SAAS,QAAQ,CAAE,KAAK,EAAE,MAAM;IAC9B,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM;QAAE,OAAM;IAE3C,IAAM,KAAK,GAAG,MAAM,GAAG,OAAO,GAAG,YAAY,CAAA;IAC7C,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAA;CAC7C;AAED,SAAS,SAAS,CAAE,KAAK,EAAE,MAAM;IAC/B,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM;QAAE,OAAM;IAE3C,IAAM,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,eAAe,CAAA;IACjD,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAA;CAC9C;;SCpCe,KAAK,CAAE,KAAK,EAAE,IAAI,EAAE,OAAO;IACzC,MAAM,CAACS,QAAU,CAAC,KAAK,CAAC,EAAE,eAAe,CAAC,CAAA;IAE1C,IAAM,OAAO,GAAG,4CAA4C,CAAA;IAC5D,IAAI,UAAU,GAAG,CAAC,CAAA;IAClB,IAAM,UAAU,GAAG,UAAU,CAAC,KAAK,CAAC,CAAA;IACpC,IAAI,YAAY,GAAG,CAAC,CAAA;IACpB,IAAM,MAAM,GAAG,EAAE,CAAA;IAEjB,KAAK,IAAI,KAAK,SAAA,GAAG,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,YAAY,GAAG,OAAO,CAAC,SAAS,EAAE;QAC/E,IAAI,KAAK,CAAC,KAAK,GAAG,YAAY,EAAE;YAC9B,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC,YAAY,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,CAAA;SACvD;QACD,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;cAChB,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,KAAK,CAAC,KAAK,CAAC;cACrD,eAAe,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,CAAA;KAC7D;IACD,IAAI,KAAK,CAAC,MAAM,GAAG,YAAY,EAAE;QAC/B,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC,YAAY,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC,CAAA;KACxD;IACD,cAAc,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IAC/B,OAAO,MAAM,CAAA;IAEb,SAAS,aAAa,CAAE,GAAG,EAAEP,QAAK,EAAE,GAAG;QACrC,IAAM,KAAK,GAAGA,QAAK,CAAC,KAAK,CAACc,OAAe,CAAC,CAAA;QAC1C,IAAM,KAAK,GAAG;YACZ,IAAI,EAAE,KAAK;YACX,MAAM,EAAE,UAAU;YAClB,IAAI,EAAE,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC;YACzB,SAAS,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,KAAK;YACpC,UAAU,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,KAAK;YACnC,GAAG,KAAA;YACH,KAAK,UAAA;YACL,KAAK,OAAA;YACL,IAAI,MAAA;SACL,CAAA;QACD,IAAI,CAAC,KAAK,EAAE;YACV,MAAM,IAAI,iBAAiB,CAAC,oBAAoB,EAAE,KAAK,CAAC,CAAA;SACzD;QACD,KAAK,CAAC,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAA;QACrB,KAAK,CAAC,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAA;QACrB,OAAO,KAAK,CAAA;KACb;IAED,SAAS,eAAe,CAAE,GAAG,EAAEd,QAAK,EAAE,GAAG;QACvC,OAAO;YACL,IAAI,EAAE,OAAO;YACb,IAAI,EAAE,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC;YACzB,SAAS,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,KAAK;YACpC,UAAU,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,KAAK;YACnC,GAAG,KAAA;YACH,KAAK,UAAA;YACL,KAAK,OAAA;YACL,IAAI,MAAA;SACL,CAAA;KACF;IAED,SAAS,cAAc,CAAE,KAAK,EAAE,GAAG;QACjC,IAAM,YAAY,GAAG,KAAK,CAAC,KAAK,CAAC,KAAK,EAAE,GAAG,CAAC,CAAA;QAC5C,UAAU,GAAGD,IAAM,CAAC,CAAC,YAAY,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAA;QAEtD,OAAO;YACL,IAAI,EAAE,MAAM;YACZ,GAAG,EAAE,YAAY;YACjB,KAAK,EAAE,YAAY;SACpB,CAAA;KACF;CACF;AAED,SAAS,UAAU,CAAE,IAAI;IACvB,IAAI,gBAAgB,GAAG,CAAC,CAAA;IACxB,IAAI,cAAc,GAAG,CAAC,CAAC,CAAA;IAEvB,OAAO;QACL,GAAG,EAAE,UAAU,GAAG;YAChB,IAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,cAAc,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;YAC7D,gBAAgB,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,CAAA;YACpC,cAAc,GAAG,GAAG,CAAA;YACpB,OAAO,gBAAgB,GAAG,CAAC,CAAA;SAC5B;KACF,CAAA;CACF;;oBCzFwB,QAAQ;IAC/B,OAAO;QACL,IAAI,EAAE,UAAC,CAAC,EAAE,CAAC,IAAK,OAAA,CAAC,KAAK,CAAC,GAAA;QACvB,IAAI,EAAE,UAAC,CAAC,EAAE,CAAC,IAAK,OAAA,CAAC,KAAK,CAAC,GAAA;QACvB,GAAG,EAAE,UAAC,CAAC,EAAE,CAAC,IAAK,OAAA,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,GAAG,CAAC,GAAA;QAChD,GAAG,EAAE,UAAC,CAAC,EAAE,CAAC,IAAK,OAAA,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,GAAG,CAAC,GAAA;QAChD,IAAI,EAAE,UAAC,CAAC,EAAE,CAAC,IAAK,OAAA,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,IAAI,CAAC,GAAA;QAClD,IAAI,EAAE,UAAC,CAAC,EAAE,CAAC,IAAK,OAAA,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,IAAI,CAAC,GAAA;QAClD,UAAU,EAAE,UAAC,CAAC,EAAE,CAAC;YACf,IAAI,CAAC,CAAC;gBAAE,OAAO,KAAK,CAAA;YACpB,IAAI,OAAO,CAAC,CAAC,OAAO,KAAK,UAAU;gBAAE,OAAO,KAAK,CAAA;YACjD,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAA;SACzB;QACD,KAAK,EAAE,UAAC,CAAC,EAAE,CAAC,IAAK,OAAA,QAAQ,CAAC,CAAC,CAAC,IAAI,QAAQ,CAAC,CAAC,CAAC,GAAA;QAC3C,IAAI,EAAE,UAAC,CAAC,EAAE,CAAC,IAAK,OAAA,QAAQ,CAAC,CAAC,CAAC,IAAI,QAAQ,CAAC,CAAC,CAAC,GAAA;KAC3C,CAAA;CACF;;ACZD,IAAMgB,WAAS,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAA;AAErC,SAAgB,OAAO,CAAE,GAAG,EAAE,KAAK;IACjC,MAAM,CAAC,KAAK,EAAE,oCAAoC,CAAC,CAAA;IACnD,IAAM,WAAW,GAAGC,SAAiB,CAAA;IACrC,IAAI,KAAK,CAAA;IACT,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,WAAW,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;QAC3C,IAAM,UAAU,GAAG,WAAW,CAAC,CAAC,CAAC,CAAA;QACjC,IAAM,KAAK,GAAG,IAAI,MAAM,CAAC,OAAKC,aAAqB,CAAC,MAAM,UAAK,UAAU,CAAC,MAAM,UAAKA,aAAqB,CAAC,MAAM,OAAI,CAAC,CAAA;QACtH,KAAK,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG;YAC9B,IAAM,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAA;YAClC,IAAM,EAAE,GAAGF,WAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAA;YACrC,IAAM,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAA;YAClC,OAAO,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;SAChB;KACF;IAED,KAAK,KAAK,GAAG,GAAG,CAAC,KAAK,CAACG,SAAiB,CAAC,GAAG;QAC1C,IAAM,GAAG,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAA;QACtC,IAAM,IAAI,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAA;QACvC,IAAM,KAAK,GAAG,EAAE,CAAA;QAChB,KAAK,IAAI,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,IAAI,EAAE,CAAC,EAAE,EAAE;YAChC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;SACd;QACD,OAAO,KAAK,CAAA;KACb;IAED,OAAO,SAAS,CAAC,GAAG,EAAE,KAAK,CAAC,CAAA;CAC7B;AAED,SAAgB,SAAS,CAAE,GAAG,EAAE,KAAK;IACnC,GAAG,GAAG,GAAG,IAAI,GAAG,CAAC,IAAI,EAAE,CAAA;IACvB,IAAI,CAAC,GAAG;QAAE,OAAO,SAAS,CAAA;IAE1B,IAAIC,SAAiB,CAAC,GAAG,CAAC,EAAE;QAC1B,OAAOC,YAAoB,CAAC,GAAG,CAAC,CAAA;KACjC;IACD,IAAIC,UAAkB,CAAC,GAAG,CAAC,EAAE;QAC3B,OAAO,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;KACtB;IACD,MAAM,IAAI,SAAS,CAAC,kBAAgB,GAAG,eAAY,CAAC,CAAA;CACrD;AAED,SAAgB,QAAQ,CAAE,GAAG;IAC3B,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAA;CACrB;AAED,SAAgB,OAAO,CAAE,GAAG;IAC1B,OAAO,GAAG,KAAK,KAAK,IAAI,SAAS,KAAK,GAAG,IAAI,GAAG,KAAK,IAAI,CAAA;CAC1D;;AChDD,IAAM,MAAM,GAAG;IACb,eAAe,EAAE,UAAgB,SAAS,EAAE,KAAK;;YAiB/C,SAAe,cAAc,CAAE,QAAQ;;;;;;sCACjC,QAAQ,CAAC,IAAI,KAAK,KAAK,CAAA,EAAvB,wBAAuB;gCACT,qBAAM,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,KAAK,CAAC,EAAA;;gCAA/C,OAAO,GAAG,SAAqC;gCACrD,sBAAO,OAAO,KAAK,SAAS,GAAG,EAAE,GAAG,OAAO,EAAA;;gCAE7C,IAAI,QAAQ,CAAC,IAAI,KAAK,OAAO,EAAE;oCAC7B,sBAAO,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE,KAAK,CAAC,EAAA;iCACzC;gCACD,sBAAO,QAAQ,CAAC,KAAK,EAAA;;;;aACtB;;;;;wBAzBD,MAAM,CAAC,KAAK,EAAE,0CAA0C,CAAC,CAAA;wBAErD,IAAI,GAAG,EAAE,CAAA;8BACc,EAAT,uBAAS;;;8BAAT,uBAAS,CAAA;wBAAhB,GAAG;;;;wBAEV,KAAA,IAAI,CAAA;wBAAI,qBAAM,cAAc,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC,EAAA;;wBAA5C,IAAI,GAAJ,KAAQ,SAAoC,CAAA;;;;wBAE5C,IAAI,GAAC,YAAY,gBAAgB,EAAE;4BACjC,GAAC,CAAC,YAAY,GAAG,IAAI,CAAA;4BACrB,MAAM,GAAC,CAAA;yBACR;wBACD,MAAM,GAAC,YAAY,WAAW,GAAG,GAAC,GAAG,IAAI,WAAW,CAAC,GAAC,EAAE,GAAG,CAAC,CAAA;;wBAR9C,IAAS,CAAA;;4BAW3B,sBAAO,IAAI,EAAA;;;;KAYZ;IAED,SAAS,EAAE,UAAgB,QAAQ,EAAE,KAAK;;;gBACxC,IAAI,QAAQ,CAAC,IAAI,KAAK,UAAU,EAAE;oBAChC,MAAM,IAAI,gBAAgB,CAAC,UAAU,CAAC,CAAA;iBACvC;gBACD,IAAI,QAAQ,CAAC,IAAI,KAAK,OAAO,EAAE;oBAC7B,MAAM,IAAI,gBAAgB,CAAC,OAAO,CAAC,CAAA;iBACpC;gBACD,sBAAO,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,EAAA;;;KAC9B;IAED,WAAW,EAAE,UAAgB,QAAQ,EAAE,KAAK;;;;gBACpC,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAA;gBAC/C,sBAAO,OAAO,KAAK,SAAS,GAAG,EAAE,GAAG,SAAS,CAAC,OAAO,CAAC,EAAA;;;KACvD;IAED,SAAS,EAAE,UAAU,QAAQ,EAAE,KAAK;QAClC,MAAM,CAAC,KAAK,EAAE,sCAAsC,CAAC,CAAA;QACrD,OAAO,QAAQ,CAAC,OAAO,CAAC,MAAM,CAC5B,UAAC,IAAI,EAAE,MAAM,IAAK,OAAA,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,GAAA,EAC5C,OAAO,CAAC,QAAQ,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,CAAA;KACpC;CACF,CAAA;AAED;IACE,IAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,CAAC,CAAA;IAC/B,OAAO,QAAQ,CAAA;CAChB;;ACxDD,SAASC,MAAI,CAAE,MAAM,EAAE,KAAK;IAC1B,IAAM,GAAG,GAAG,EAAE,CAAA;IACd,IAAI,KAAK,CAAA;IACT,WAAW,CAAC,SAAS,GAAG,CAAC,CAAA;IACzB,QAAQ,KAAK,GAAG,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG;QACzC,IAAM,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAA;QAClB,IAAM,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAA;QAClB,GAAG,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,EAAE,KAAK,CAAC,CAAA;KAC7B;IACD,OAAO,GAAG,CAAA;CACX;AAED;IACE,IAAI,QAAQ,GAAG,EAAE,CAAA;IAEjB,IAAM,YAAY,GAAG;QACnB,MAAM,EAAE,UAAgB,KAAK;;;;oBACrB,GAAG,GAAGA,MAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,CAAA;oBAClC,IAAI,GAAG,IAAI,CAAC,OAAO,CAAA;oBACzB,IAAI,OAAO,IAAI,CAAC,MAAM,KAAK,UAAU,EAAE;wBACrC,sBAAO,EAAE,EAAA;qBACV;oBACD,sBAAO,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,GAAG,CAAC,EAAA;;;SAC/B;QACD,KAAK,EAAE,UAAU,KAAK,EAAE,MAAM;YAC5B,IAAI,CAAC,IAAI,GAAG,KAAK,CAAA;YACjB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAA;YAClB,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC,IAAI,CAAA;YAEtB,IAAM,OAAO,GAAG,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;YACnC,MAAM,CAAC,OAAO,EAAE,SAAO,IAAI,CAAC,IAAI,eAAY,CAAC,CAAA;YAC7C,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,CAAA;YAC9B,IAAI,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE;gBACtB,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,EAAE,MAAM,CAAC,CAAA;aAClC;SACF;KACF,CAAA;IAED,SAAS,QAAQ,CAAE,IAAI,EAAE,GAAG;QAC1B,QAAQ,CAAC,IAAI,CAAC,GAAG,GAAG,CAAA;KACrB;IAED,SAAS,SAAS,CAAE,KAAK,EAAE,MAAM;QAC/B,IAAM,QAAQ,GAAG,MAAM,CAAC,YAAY,CAAC,CAAA;QACrC,QAAQ,CAAC,KAAK,CAAC,KAAK,EAAE,MAAM,CAAC,CAAA;QAC7B,OAAO,QAAQ,CAAA;KAChB;IAED,SAAS,KAAK;QACZ,QAAQ,GAAG,EAAE,CAAA;KACd;IAED,OAAO;QACL,SAAS,WAAA;QACT,QAAQ,UAAA;QACR,KAAK,OAAA;KACN,CAAA;CACF;;ACzDD,IAAM,OAAO,GAAG,IAAI,MAAM,CAAC,KAAGC,KAAa,CAAC,MAAQ,EAAE,GAAG,CAAC,CAAA;AAE1D,iBAAyB,OAAO;IAC9B,OAAO,GAAG,MAAM,CAAC,EAAE,EAAE,OAAO,CAAC,CAAA;IAC7B,IAAI,OAAO,GAAG,EAAE,CAAA;IAEhB,IAAM,eAAe,GAAG;QACtB,MAAM,EAAE,UAAU,MAAM,EAAE,KAAK;YAC7B,IAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,UAAA,GAAG,IAAI,OAAA,SAAS,CAAC,GAAG,EAAE,KAAK,CAAC,GAAA,CAAC,CAAA;YACxD,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAA;YACpB,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,CAAA;SACrC;QACD,KAAK,EAAE,UAAU,GAAG;YAClB,IAAI,KAAK,GAAGC,UAAkB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;YACxC,MAAM,CAAC,KAAK,EAAE,kBAAkB,GAAG,GAAG,CAAC,CAAA;YAEvC,IAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAA;YACrB,IAAM,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,CAAA;YAC9B,IAAMtB,SAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;YAC5B,IAAI,OAAOA,SAAM,KAAK,UAAU,EAAE;gBAChC,IAAI,OAAO,CAAC,cAAc,EAAE;oBAC1B,MAAM,IAAI,SAAS,CAAC,uBAAqB,IAAM,CAAC,CAAA;iBACjD;gBACD,IAAI,CAAC,IAAI,GAAG,IAAI,CAAA;gBAChB,IAAI,CAAC,MAAM,GAAG,UAAA,CAAC,IAAI,OAAA,CAAC,GAAA,CAAA;gBACpB,IAAI,CAAC,IAAI,GAAG,EAAE,CAAA;gBACd,OAAO,IAAI,CAAA;aACZ;YAED,IAAM,IAAI,GAAG,EAAE,CAAA;YACf,QAAQ,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,GAAG;gBAC7C,IAAM,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAA;gBAClB,IAAM,EAAE,GAAG,IAAI,MAAM,CAAI,CAAC,UAAO,EAAE,GAAG,CAAC,CAAA;gBACvC,IAAM,QAAQ,GAAG,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAA;gBACrC,IAAM,iBAAiB,GAAG,QAAQ,IAAI,QAAQ,CAAC,KAAK,KAAK,KAAK,CAAC,KAAK,CAAA;gBACpE,iBAAiB,GAAG,IAAI,CAAC,IAAI,CAAC,MAAI,CAAC,MAAG,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;aACvD;YAED,IAAI,CAAC,IAAI,GAAG,IAAI,CAAA;YAChB,IAAI,CAAC,MAAM,GAAGA,SAAM,CAAA;YACpB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAA;YAEhB,OAAO,IAAI,CAAA;SACZ;KACF,CAAA;IAED,SAAS,SAAS,CAAE,GAAG;QACrB,IAAM,QAAQ,GAAG,MAAM,CAAC,eAAe,CAAC,CAAA;QACxC,OAAO,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;KAC3B;IAED,SAAS,QAAQ,CAAE,IAAI,EAAEA,SAAM;QAC7B,OAAO,CAAC,IAAI,CAAC,GAAGA,SAAM,CAAA;KACvB;IAED,SAAS,KAAK;QACZ,OAAO,GAAG,EAAE,CAAA;KACb;IAED,OAAO;QACL,SAAS,WAAA,EAAE,QAAQ,UAAA,EAAE,KAAK,OAAA;KAC3B,CAAA;CACF;;iBC/DwB,GAAG,EAAE,MAAM;IAClC;QAIE,qBAAa,MAAM;YACjB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAA;YACpB,IAAI,CAAC,QAAQ,GAAG,EAAE,CAAA;SACnB;QACD,wBAAE,GAAF,UAAI,IAAI,EAAE,EAAE;YACV,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,EAAE,CAAA;YACxB,OAAO,IAAI,CAAA;SACZ;QACD,6BAAO,GAAP,UAAS,KAAa,EAAE,GAAS;YAC/B,IAAM,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAA;YAC9B,IAAI,OAAO,CAAC,KAAK,UAAU,EAAE;gBAC3B,CAAC,CAAC,GAAG,CAAC,CAAA;gBACN,OAAO,IAAI,CAAA;aACZ;SACF;QACD,2BAAK,GAAL;YACE,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAA;YACrB,IAAI,KAAK,CAAA;YACT,OAAO,CAAC,IAAI,CAAC,aAAa,KAAK,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,EAAE;gBAC3D,IAAI,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,KAAK,CAAC;oBAAE,SAAQ;gBAC1C,IAAI,KAAK,CAAC,IAAI,KAAK,KAAK;oBACpB,IAAI,CAAC,OAAO,CAAC,SAAO,KAAK,CAAC,IAAM,EAAE,KAAK,CAAC,EAAE;oBAC5C,SAAQ;iBACT;gBACD,IAAM,QAAQ,GAAG,UAAU,CAAC,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,CAAA;gBAC/C,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAA;aACnC;YACD,IAAI,CAAC,IAAI,CAAC,aAAa;gBAAE,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAA;YAC5C,OAAO,IAAI,CAAA;SACZ;QACD,0BAAI,GAAJ;YACE,IAAI,CAAC,aAAa,GAAG,IAAI,CAAA;YACzB,OAAO,IAAI,CAAA;SACZ;QACH,kBAAC;KAAA,IAAA;IAED,SAAS,KAAK,CAAE,MAAM;QACpB,IAAI,KAAK,CAAA;QACT,IAAM,SAAS,GAAG,EAAE,CAAA;QACpB,QAAQ,KAAK,GAAG,MAAM,CAAC,KAAK,EAAE,GAAG;YAC/B,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,CAAA;SAC1C;QACD,OAAO,SAAS,CAAA;KACjB;IAED,SAAS,UAAU,CAAE,KAAK,EAAE,MAAM;QAChC,IAAI;YACF,IAAI,GAAG,GAAG,IAAI,CAAA;YACd,IAAI,KAAK,CAAC,IAAI,KAAK,KAAK,EAAE;gBACxB,GAAG,GAAG,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC,CAAA;aAC9B;iBAAM,IAAI,KAAK,CAAC,IAAI,KAAK,OAAO,EAAE;gBACjC,GAAG,GAAG,UAAU,CAAC,KAAK,CAAC,KAAK,CAAC,CAAA;aAC9B;iBAAM;gBACL,GAAG,GAAG,KAAK,CAAA;aACZ;YACD,GAAG,CAAC,KAAK,GAAG,KAAK,CAAA;YACjB,OAAO,GAAG,CAAA;SACX;QAAC,OAAO,CAAC,EAAE;YACV,MAAM,IAAI,UAAU,CAAC,CAAC,EAAE,KAAK,CAAC,CAAA;SAC/B;KACF;IAED,SAAS,QAAQ,CAAE,KAAK,EAAE,MAAM;QAC9B,IAAI,KAAK,CAAC,IAAI,KAAK,UAAU,IAAI,KAAK,CAAC,IAAI,KAAK,OAAO;YAAE,OAAO,KAAK,CAAA;QACrE,OAAO,GAAG,CAAC,SAAS,CAAC,KAAK,EAAE,MAAM,CAAC,CAAA;KACpC;IAED,SAAS,UAAU,CAAE,GAAG;QACtB,IAAI,KAAK,GAAGuB,UAAkB,CAAC,GAAG,CAAC,CAAA;QACnC,MAAM,CAAC,KAAK,EAAE,2BAAyB,GAAK,CAAC,CAAA;QAE7C,IAAM,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC,CAAA;QACxB,GAAG,GAAG,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAA;QAE/C,IAAM,OAAO,GAAG,EAAE,CAAA;QAClB,QAAQ,KAAK,GAAGC,MAAc,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG;YACzC,OAAO,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAA;SAChC;QAED,OAAO;YACL,IAAI,EAAE,OAAO;YACb,OAAO,EAAE,OAAO;YAChB,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,UAAA,GAAG,IAAI,OAAA,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,GAAA,CAAC;SACnD,CAAA;KACF;IAED,SAAS,WAAW,CAAE,MAAM;QAC1B,OAAO,IAAI,WAAW,CAAC,MAAM,CAAC,CAAA;KAC/B;IAED,OAAO;QACL,KAAK,OAAA;QACL,QAAQ,UAAA;QACR,WAAW,aAAA;QACX,UAAU,YAAA;KACX,CAAA;CACF;;cCpGwB,MAAM,EAAE,MAAM;IACrC,IAAM,gBAAgB,GAAG,MAAM,CAAC,KAAK,CAAC,gBAAgB,CAAA;IACtD,IAAM,EAAE,GAAG,IAAI,MAAM,CAAC,OAAK,UAAU,CAAC,MAAM,gBAAa;SACrD,MAAI,KAAK,CAAC,MAAM,MAAG,CAAA;SACnB,YAAU,IAAI,CAAC,MAAM,OAAI,CAAA;QACzB,qBAAqB;SACrB,YAAU,IAAI,CAAC,MAAM,QAAK,CAAA,CAAC,CAAA;IAE/B,MAAM,CAAC,WAAW,CAAC,KAAK,EAAE,EAAE,KAAK,OAAA,EAAE,MAAM,QAAA,EAAE,CAAC,CAAA;IAE5C,SAAS,KAAK,CAAE,QAAQ,EAAE,YAAY;QAAtC,iBAqBC;QApBC,IAAM,KAAK,GAAG,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAA;QACpC,MAAM,CAAC,KAAK,EAAE,kBAAgB,QAAQ,CAAC,GAAK,CAAC,CAAA;QAC7C,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC,CAAC,CAAC,CAAA;QACxB,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC,CAAC,CAAC,CAAA;QAC1B,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;QAE1B,IAAI,CAAC,SAAS,GAAG,EAAE,CAAA;QACnB,IAAI,CAAC,aAAa,GAAG,EAAE,CAAA;QAEvB,IAAI,CAAC,CAAA;QACL,IAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,YAAY,CAAC;aACnD,EAAE,CAAC,OAAO,EAAE,cAAM,QAAC,CAAC,GAAG,KAAI,CAAC,SAAS,IAAC,CAAC;aACvC,EAAE,CAAC,UAAU,EAAE,cAAM,QAAC,CAAC,GAAG,KAAI,CAAC,aAAa,IAAC,CAAC;aAC9C,EAAE,CAAC,YAAY,EAAE,cAAM,OAAA,MAAM,CAAC,IAAI,EAAE,GAAA,CAAC;aACrC,EAAE,CAAC,UAAU,EAAE,UAAA,GAAG,IAAI,OAAA,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAA,CAAC;aAClC,EAAE,CAAC,KAAK,EAAE;YACT,MAAM,IAAI,KAAK,CAAC,SAAO,QAAQ,CAAC,GAAG,gBAAa,CAAC,CAAA;SAClD,CAAC,CAAA;QAEJ,MAAM,CAAC,KAAK,EAAE,CAAA;KACf;IACD,SAAe,MAAM,CAAE,KAAK,EAAEJ,OAAI;;;;;;;wBAC5B,UAAU,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,EAAE,KAAK,CAAC,CAAA;wBAEvD,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE;4BACxB,IAAI,QAAQ,CAAC,UAAU,CAAC,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE;gCACjD,UAAU,GAAG,CAAC,UAAU,CAAC,CAAA;6BAC1B;iCAAM,IAAI,QAAQ,CAAC,UAAU,CAAC,EAAE;gCAC/B,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,UAAC,GAAG,IAAK,OAAA,CAAC,GAAG,EAAE,UAAU,CAAC,GAAG,CAAC,CAAC,GAAA,CAAC,CAAA;6BAC1E;yBACF;wBACD,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE;4BAC9C,sBAAO,MAAM,CAAC,QAAQ,CAAC,eAAe,CAAC,IAAI,CAAC,aAAa,EAAE,KAAK,CAAC,EAAA;yBAClE;wBAEK,MAAM,GAAGA,OAAI,CAAC,MAAM,IAAI,CAAC,CAAA;wBACzB,KAAK,GAAG,CAACA,OAAI,CAAC,KAAK,KAAK,SAAS,IAAI,UAAU,CAAC,MAAM,GAAGA,OAAI,CAAC,KAAK,CAAA;wBAEzE,UAAU,GAAG,UAAU,CAAC,KAAK,CAAC,MAAM,EAAE,MAAM,GAAG,KAAK,CAAC,CAAA;wBACrD,IAAI,IAAI,CAAC,QAAQ;4BAAE,UAAU,CAAC,OAAO,EAAE,CAAA;wBAEjC,QAAQ,GAAG,UAAU,CAAC,GAAG,CAAC,UAAC,IAAI,EAAE,CAAC;4BACtC,IAAM,GAAG,GAAG,EAAE,CAAA;4BACd,GAAG,CAAC,KAAI,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAA;4BACzB,GAAG,CAAC,OAAO,GAAG;gCACZ,KAAK,EAAE,CAAC,KAAK,CAAC;gCACd,KAAK,EAAE,CAAC,GAAG,CAAC;gCACZ,MAAM,EAAE,CAAC;gCACT,IAAI,EAAE,CAAC,KAAK,UAAU,CAAC,MAAM,GAAG,CAAC;gCACjC,MAAM,EAAE,UAAU,CAAC,MAAM;gCACzB,MAAM,EAAE,UAAU,CAAC,MAAM,GAAG,CAAC;gCAC7B,OAAO,EAAE,UAAU,CAAC,MAAM,GAAG,CAAC,GAAG,CAAC;6BACnC,CAAA;4BACD,OAAO,GAAG,CAAA;yBACX,CAAC,CAAA;wBAEE,IAAI,GAAG,EAAE,CAAA;wBACT,QAAQ,GAAG,KAAK,CAAA;wBACpB,qBAAM,SAAS,CAAC,QAAQ,EAAE,UAAM,OAAO;;;;;4CACrC,IAAI,QAAQ;gDAAE,sBAAM;4CAEpB,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;;;;4CAEjB,KAAA,IAAI,CAAA;4CAAI,qBAAM,MAAM,CAAC,QAAQ,CAAC,eAAe,CAAC,IAAI,CAAC,SAAS,EAAE,KAAK,CAAC,EAAA;;4CAApE,IAAI,GAAJ,KAAQ,SAA4D,CAAA;;;;4CAEpE,IAAI,GAAC,YAAY,gBAAgB,EAAE;gDACjC,IAAI,IAAI,GAAC,CAAC,YAAY,CAAA;gDACtB,IAAI,GAAC,CAAC,OAAO,KAAK,OAAO,EAAE;oDACzB,QAAQ,GAAG,IAAI,CAAA;iDAChB;6CACF;;gDAAM,MAAM,GAAC,CAAA;;;4CAEhB,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,CAAA;;;;iCACnB,CAAC,EAAA;;wBAfF,SAeE,CAAA;wBACF,sBAAO,IAAI,EAAA;;;;KACZ;CACF;;iBCxFwB,MAAM,EAAE,MAAM;IACrC,IAAM,EAAE,GAAG,IAAI,MAAM,CAAC,MAAI,UAAU,CAAC,MAAM,iBAAc,CAAC,CAAA;IAClD,IAAA,sCAAW,CAAiB;IAEpC,MAAM,CAAC,WAAW,CAAC,QAAQ,EAAE;QAC3B,KAAK,EAAE,UAAU,KAAK;YACpB,IAAM,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAA;YAClC,MAAM,CAAC,KAAK,EAAE,mBAAiB,KAAK,CAAC,GAAK,CAAC,CAAA;YAC3C,IAAI,CAAC,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC,CAAA;YACnB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,CAAA;SACtB;QACD,MAAM,EAAE,UAAU,KAAK;YACrB,IAAM,GAAG,GAAG,MAAM,CAAC,WAAW,CAAC,CAAA;YAC/B,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,EAAE,KAAK,CAAC,CAAA;YACnD,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;YACf,OAAO,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,CAAA;SAC3B;KACF,CAAC,CAAA;CACH;;kBClBwB,MAAM,EAAE,MAAM;IACrC,IAAM,EAAE,GAAG,IAAI,MAAM,CAAC,MAAI,UAAU,CAAC,MAAM,MAAG,CAAC,CAAA;IACvC,IAAA,wCAAY,CAAiB;IAErC,MAAM,CAAC,WAAW,CAAC,SAAS,EAAE;QAC5B,KAAK,EAAE,UAAU,QAAQ,EAAE,YAAY;YAAhC,iBAcN;YAbC,IAAM,KAAK,GAAG,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAA;YACrC,MAAM,CAAC,KAAK,EAAK,QAAQ,CAAC,IAAI,0BAAuB,CAAC,CAAA;YAEtD,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC,CAAC,CAAC,CAAA;YACxB,IAAI,CAAC,SAAS,GAAG,EAAE,CAAA;YAEnB,IAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,YAAY,CAAC,CAAA;YACtD,MAAM,CAAC,EAAE,CAAC,gBAAgB,EAAE,UAAA,KAAK,IAAI,OAAA,MAAM,CAAC,IAAI,EAAE,GAAA,CAAC;iBAChD,EAAE,CAAC,UAAU,EAAE,UAAA,GAAG,IAAI,OAAA,KAAI,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,GAAA,CAAC;iBAC/C,EAAE,CAAC,KAAK,EAAE,UAAA,CAAC;gBACV,MAAM,IAAI,KAAK,CAAC,SAAO,QAAQ,CAAC,GAAG,gBAAa,CAAC,CAAA;aAClD,CAAC,CAAA;YACJ,MAAM,CAAC,KAAK,EAAE,CAAA;SACf;QACD,MAAM,EAAE,UAAgB,KAAK,EAAEA,OAAI;;;;;gCACpB,qBAAM,MAAM,CAAC,QAAQ,CAAC,eAAe,CAAC,IAAI,CAAC,SAAS,EAAE,KAAK,CAAC,EAAA;;4BAAnE,IAAI,GAAG,SAA4D;4BACnE,GAAG,GAAG,MAAM,CAAC,YAAY,CAAC,CAAA;4BAChC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAA;4BACzB,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;;;;;SAChB;KACF,CAAC,CAAA;CACH;;eC/BwB,MAAM,EAAE,MAAM;IACrC,MAAM,CAAC,WAAW,CAAC,MAAM,EAAE;QAEzB,KAAK,EAAE,UAAU,QAAQ,EAAE,YAAY;YAAhC,iBAqBN;YApBC,IAAI,CAAC,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAA;YACzB,IAAI,CAAC,KAAK,GAAG,EAAE,CAAA;YACf,IAAI,CAAC,aAAa,GAAG,EAAE,CAAA;YAEvB,IAAI,CAAC,GAAG,EAAE,CAAA;YACV,IAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,YAAY,CAAC;iBACnD,EAAE,CAAC,UAAU,EAAE,UAAA,KAAK;gBACnB,KAAI,CAAC,KAAK,CAAC,IAAI,CAAC;oBACd,GAAG,EAAE,KAAK,CAAC,IAAI;oBACf,SAAS,EAAE,CAAC,GAAG,EAAE;iBAClB,CAAC,CAAA;aACH,CAAC;iBACD,EAAE,CAAC,UAAU,EAAE,cAAM,QAAC,CAAC,GAAG,KAAI,CAAC,aAAa,IAAC,CAAC;iBAC9C,EAAE,CAAC,aAAa,EAAE,UAAA,KAAK,IAAI,OAAA,MAAM,CAAC,IAAI,EAAE,GAAA,CAAC;iBACzC,EAAE,CAAC,UAAU,EAAE,UAAA,GAAG,IAAI,OAAA,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAA,CAAC;iBAClC,EAAE,CAAC,KAAK,EAAE,UAAA,CAAC;gBACV,MAAM,IAAI,KAAK,CAAC,SAAO,QAAQ,CAAC,GAAG,gBAAa,CAAC,CAAA;aAClD,CAAC,CAAA;YAEJ,MAAM,CAAC,KAAK,EAAE,CAAA;SACf;QAED,MAAM,EAAE,UAAU,KAAK,EAAE,IAAI;YAC3B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;gBAC1C,IAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;gBAC5B,IAAM,GAAG,GAAG,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,CAAA;gBAC7C,IAAM,IAAI,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,CAAA;gBAC7C,IAAI,GAAG,KAAK,IAAI,EAAE;oBAChB,OAAO,MAAM,CAAC,QAAQ,CAAC,eAAe,CAAC,MAAM,CAAC,SAAS,EAAE,KAAK,CAAC,CAAA;iBAChE;aACF;YACD,OAAO,MAAM,CAAC,QAAQ,CAAC,eAAe,CAAC,IAAI,CAAC,aAAa,EAAE,KAAK,CAAC,CAAA;SAClE;KACF,CAAC,CAAA;CACH;;kBCtCwB,MAAM;IAC7B,MAAM,CAAC,WAAW,CAAC,SAAS,EAAE;QAC5B,KAAK,EAAE,UAAU,QAAQ,EAAE,YAAY;YACrC,IAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,YAAY,CAAC,CAAA;YACtD,MAAM;iBACH,EAAE,CAAC,OAAO,EAAE,UAAA,KAAK;gBAChB,IAAI,KAAK,CAAC,IAAI,KAAK,YAAY;oBAAE,MAAM,CAAC,IAAI,EAAE,CAAA;aAC/C,CAAC;iBACD,EAAE,CAAC,KAAK,EAAE,UAAA,CAAC;gBACV,MAAM,IAAI,KAAK,CAAC,SAAO,QAAQ,CAAC,GAAG,gBAAa,CAAC,CAAA;aAClD,CAAC,CAAA;YACJ,MAAM,CAAC,KAAK,EAAE,CAAA;SACf;KACF,CAAC,CAAA;CACH;;ACXD,IAAM,YAAY,GAAG,SAAS,CAAA;AAE9B,kBAAyB,MAAM,EAAE,MAAM;IACrC,IAAM,MAAM,GAAG,IAAI,MAAM,CAAC,cAAY,KAAK,CAAC,MAAM,MAAG,CAAC,CAAA;IAEtD,MAAM,CAAC,WAAW,CAAC,SAAS,EAAE;QAC5B,KAAK,EAAE,UAAU,KAAK;YACpB,IAAI,KAAK,GAAG,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;YACzC,IAAI,KAAK,EAAE;gBACT,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC,CAAC,CAAC,CAAA;aAC5B;YAED,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;YAC9B,IAAI,KAAK,EAAE;gBACT,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,CAAA;aACtB;YAED,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;YAC/B,IAAI,KAAK,EAAE;gBACT,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAA;aACrB;SACF;QACD,MAAM,EAAE,UAAgB,KAAK,EAAEA,OAAI;;;;;;iCAE7B,KAAK,CAAC,IAAI,CAAC,eAAe,EAA1B,wBAA0B;iCACxB,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,EAA3B,wBAA2B;4BACvB,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;4BAC7B,qBAAM,MAAM,CAAC,cAAc,CAAC,QAAQ,EAAE,KAAK,CAAC,MAAM,EAAE,EAAE,KAAK,CAAC,IAAI,CAAC,EAAA;;4BAA5E,QAAQ,GAAG,SAAiE,CAAA;;;4BAE5E,QAAQ,GAAG,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,EAAE,KAAK,CAAC,CAAA;;;;4BAGhD,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAA;;;4BAE7B,MAAM,CAAC,QAAQ,EAAE,oCAAoC,CAAC,CAAA;4BAEhD,YAAY,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM,CAAA;4BAChC,eAAe,GAAG,KAAK,CAAC,IAAI,CAAC,SAAS,CAAA;4BAE5C,KAAK,CAAC,IAAI,CAAC,MAAM,GAAG,EAAE,CAAA;4BACtB,KAAK,CAAC,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAA;4BAC/B,IAAI,IAAI,CAAC,IAAI,EAAE;gCACbA,OAAI,CAAC,QAAQ,CAAC,GAAG,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,CAAA;6BACpD;4BACiB,qBAAM,MAAM,CAAC,WAAW,CAAC,QAAQ,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAA;;4BAA/D,SAAS,GAAG,SAAmD;4BACrE,KAAK,CAAC,IAAI,CAACA,OAAI,CAAC,CAAA;4BACH,qBAAM,MAAM,CAAC,QAAQ,CAAC,eAAe,CAAC,SAAS,EAAE,KAAK,CAAC,EAAA;;4BAA9D,IAAI,GAAG,SAAuD;4BACpE,KAAK,CAAC,GAAG,CAACA,OAAI,CAAC,CAAA;4BACf,KAAK,CAAC,IAAI,CAAC,MAAM,GAAG,YAAY,CAAA;4BAChC,KAAK,CAAC,IAAI,CAAC,SAAS,GAAG,eAAe,CAAA;4BACtC,sBAAO,IAAI,EAAA;;;;SACZ;KACF,CAAC,CAAA;CACH;;oBCpDwB,MAAM,EAAE,MAAM;IAC/B,IAAA,iBAA4D,EAA1D,8BAAY,EAAE,4BAAW,EAAE,kCAA+B,CAAA;IAElE,MAAM,CAAC,WAAW,CAAC,WAAW,EAAE;QAC9B,KAAK,EAAE,UAAU,KAAK;YACpB,IAAM,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAA;YAC1C,MAAM,CAAC,KAAK,EAAE,wBAAsB,KAAK,CAAC,IAAM,CAAC,CAAA;YACjD,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC,CAAC,CAAC,CAAA;SACzB;QACD,MAAM,EAAE,UAAU,KAAK,EAAEA,OAAI;YAC3B,IAAI,OAAO,GAAG,KAAK,CAAC,cAAc,CAChC,IAAI,CAAC,QAAQ,EACb,UAAA,GAAG;gBACD,IAAM,KAAK,GAAG,MAAM,CAAC,cAAc,CAAC,GAAG,CAAC,CAAA;gBACxC,OAAO,KAAK,KAAK,YAAY,IAAI,KAAK,KAAK,WAAW,CAAA;aACvD,CACF,CAAA;YACD,IAAI,CAAC,OAAO,EAAE;gBACZ,OAAO,GAAG,MAAM,CAAC,cAAc,CAAC,CAAA;gBAChC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,CAAA;aACvB;YACD,IAAI,OAAO,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,QAAQ,EAAE;gBAC9C,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAA;aAC3B;YACD,OAAO,EAAE,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;SAChC;KACF,CAAC,CAAA;CACH;;gBC5BwB,MAAM,EAAE,MAAM;IACrC,IAAM,OAAO,GAAG,IAAI,MAAM,CAAC,UAAQK,KAAM,CAAC,MAAM,sBAAmB,CAAC,CAAA;IACpE,IAAM,YAAY,GAAG,IAAI,MAAM,CAACA,KAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;IAEnD,MAAM,CAAC,WAAW,CAAC,OAAO,EAAE;QAE1B,KAAK,EAAE,UAAU,QAAQ,EAAE,YAAY;YACrC,IAAI,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAA;YACvC,MAAM,CAAC,KAAK,EAAE,kBAAgB,QAAQ,CAAC,GAAK,CAAC,CAAA;YAE7C,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,CAAA;YAC3B,IAAM,UAAU,GAAG,KAAK,CAAC,CAAC,CAAC,CAAA;YAE3B,IAAI,CAAC,UAAU,GAAG,EAAE,CAAA;YAEpB,QAAQ,KAAK,GAAG,YAAY,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG;gBAC9C,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAA;aAC/B;YACD,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,uBAAqB,QAAQ,CAAC,GAAK,CAAC,CAAA;SACpE;QAED,MAAM,EAAE,UAAU,KAAK,EAAEL,OAAI;YAC3B,IAAM,KAAK,GAAG,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,EAAE,KAAK,CAAC,CAAA;YACjD,IAAM,WAAW,GAAG,WAAS,KAAK,MAAG,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;YAEjE,IAAM,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM,IAAI,EAAE,CAAA;YAC1D,IAAI,GAAG,GAAG,MAAM,CAAC,WAAW,CAAC,CAAA;YAE7B,IAAI,GAAG,KAAK,SAAS,EAAE;gBACrB,GAAG,GAAG,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,CAAA;aAC9B;YAED,IAAM,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAA;YACtC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,CAAA;YACxC,MAAM,CAAC,WAAW,CAAC,GAAG,GAAG,CAAA;YAEzB,OAAO,MAAM,CAAC,SAAS,CAAC,SAAS,EAAE,KAAK,CAAC,CAAA;SAC1C;KACF,CAAC,CAAA;CACH;;aC1CwB,MAAM,EAAE,MAAM;IACrC,MAAM,CAAC,WAAW,CAAC,IAAI,EAAE;QAEvB,KAAK,EAAE,UAAU,QAAQ,EAAE,YAAY;YAAhC,iBAwBN;YAvBC,IAAI,CAAC,QAAQ,GAAG,EAAE,CAAA;YAClB,IAAI,CAAC,aAAa,GAAG,EAAE,CAAA;YAEvB,IAAI,CAAC,CAAA;YACL,IAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,YAAY,CAAC;iBACnD,EAAE,CAAC,OAAO,EAAE,cAAM,OAAA,KAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;gBACpC,IAAI,EAAE,QAAQ,CAAC,IAAI;gBACnB,SAAS,GAAG,CAAC,GAAG,EAAE,CAAC;aACpB,CAAC,GAAA,CAAC;iBACF,EAAE,CAAC,WAAW,EAAE,UAAA,KAAK;gBACpB,KAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;oBACjB,IAAI,EAAE,KAAK,CAAC,IAAI;oBAChB,SAAS,EAAE,CAAC,GAAG,EAAE;iBAClB,CAAC,CAAA;aACH,CAAC;iBACD,EAAE,CAAC,UAAU,EAAE,cAAM,QAAC,CAAC,GAAG,KAAI,CAAC,aAAa,IAAC,CAAC;iBAC9C,EAAE,CAAC,WAAW,EAAE,UAAA,KAAK,IAAI,OAAA,MAAM,CAAC,IAAI,EAAE,GAAA,CAAC;iBACvC,EAAE,CAAC,UAAU,EAAE,UAAA,GAAG,IAAI,OAAA,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAA,CAAC;iBAClC,EAAE,CAAC,KAAK,EAAE,UAAA,CAAC;gBACV,MAAM,IAAI,KAAK,CAAC,SAAO,QAAQ,CAAC,GAAG,gBAAa,CAAC,CAAA;aAClD,CAAC,CAAA;YAEJ,MAAM,CAAC,KAAK,EAAE,CAAA;SACf;QAED,MAAM,EAAE,UAAU,KAAK,EAAE,IAAI;YAC3B,KAAqB,UAAa,EAAb,KAAA,IAAI,CAAC,QAAQ,EAAb,cAAa,EAAb,IAAa,EAAE;gBAA/B,IAAM,MAAM,SAAA;gBACf,IAAM,IAAI,GAAG,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,CAAA;gBAC/C,IAAI,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE;oBACzB,OAAO,MAAM,CAAC,QAAQ,CAAC,eAAe,CAAC,MAAM,CAAC,SAAS,EAAE,KAAK,CAAC,CAAA;iBAChE;aACF;YACD,OAAO,MAAM,CAAC,QAAQ,CAAC,eAAe,CAAC,IAAI,CAAC,aAAa,EAAE,KAAK,CAAC,CAAA;SAClE;KACF,CAAC,CAAA;CACH;;oBCnCwB,MAAM,EAAE,MAAM;IAC/B,IAAA,iBAA4D,EAA1D,8BAAY,EAAE,4BAAW,EAAE,kCAA+B,CAAA;IAElE,MAAM,CAAC,WAAW,CAAC,WAAW,EAAE;QAC9B,KAAK,EAAE,UAAU,KAAK;YACpB,IAAM,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAA;YAC1C,MAAM,CAAC,KAAK,EAAE,wBAAsB,KAAK,CAAC,IAAM,CAAC,CAAA;YACjD,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC,CAAC,CAAC,CAAA;SACzB;QACD,MAAM,EAAE,UAAU,KAAK,EAAEA,OAAI;YAC3B,IAAI,OAAO,GAAG,KAAK,CAAC,cAAc,CAChC,IAAI,CAAC,QAAQ,EACb,UAAA,GAAG;gBACD,IAAM,KAAK,GAAG,MAAM,CAAC,cAAc,CAAC,GAAG,CAAC,CAAA;gBACxC,OAAO,KAAK,KAAK,YAAY,IAAI,KAAK,KAAK,WAAW,CAAA;aACvD,CACF,CAAA;YACD,IAAI,CAAC,OAAO,EAAE;gBACZ,OAAO,GAAG,MAAM,CAAC,cAAc,CAAC,CAAA;gBAChC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,CAAA;aACvB;YACD,IAAI,OAAO,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,QAAQ,EAAE;gBAC9C,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAA;aAC3B;YACD,IAAM,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;YAClC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAA;YACxB,OAAO,GAAG,CAAA;SACX;KACF,CAAC,CAAA;CACH;;AC9BD;;;;;AAMA,iBAAyB,MAAM,EAAE,MAAM;IACrC,IAAM,YAAY,GAAG,KAAK,CAAA;IAE1B,MAAM,CAAC,WAAW,CAAC,QAAQ,EAAE;QAC3B,KAAK,EAAE,UAAU,KAAK,EAAE,YAAY;YAClC,IAAI,KAAK,GAAG,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;YACzC,IAAI,KAAK,EAAE;gBACT,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC,CAAC,CAAC,CAAA;aAC7B;YAED,KAAK,GAAGK,KAAM,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;YAC/B,IAAI,KAAK,EAAE;gBACT,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC,CAAA;aACvB;YAED,IAAI,CAAC,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,YAAY,CAAC,CAAA;SAC9C;QACD,MAAM,EAAE,UAAgB,KAAK,EAAEL,OAAI;;;;;;4BAC3B,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC,eAAe;kCACrC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC;kCACpC,IAAI,CAAC,YAAY,CAAA;4BACrB,MAAM,CAAC,MAAM,EAAE,yCAAyC,CAAC,CAAA;;4BAGzD,KAAK,CAAC,IAAI,CAAC,SAAS,GAAG,OAAO,CAAA;4BACjB,qBAAM,MAAM,CAAC,QAAQ,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,EAAA;;4BAA9D,IAAI,GAAG,SAAuD;4BACpE,IAAI,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,KAAK,SAAS,EAAE;gCACvC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,GAAG,IAAI,CAAA;6BAC7B;4BACiB,qBAAM,MAAM,CAAC,WAAW,CAAC,MAAM,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAA;;4BAA7D,SAAS,GAAG,SAAiD;4BACnE,KAAK,CAAC,IAAI,CAACA,OAAI,CAAC,CAAA;4BAChB,KAAK,CAAC,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAA;4BACf,qBAAM,MAAM,CAAC,QAAQ,CAAC,eAAe,CAAC,SAAS,EAAE,KAAK,CAAC,EAAA;;4BAAjE,OAAO,GAAG,SAAuD;4BACvE,KAAK,CAAC,GAAG,CAACA,OAAI,CAAC,CAAA;4BACf,sBAAO,OAAO,EAAA;;;;SACf;KACF,CAAC,CAAA;IAEF,MAAM,CAAC,WAAW,CAAC,OAAO,EAAE;QAC1B,KAAK,EAAE,UAAU,KAAK,EAAE,YAAY;YAA7B,iBAYN;YAXC,IAAM,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;YACpC,IAAI,CAAC,KAAK,GAAG,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,GAAG,EAAE,CAAA;YAElC,IAAI,CAAC,IAAI,GAAG,EAAE,CAAA;YACd,IAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,YAAY,CAAC;iBACnD,EAAE,CAAC,cAAc,EAAE,cAAM,OAAA,MAAM,CAAC,IAAI,EAAE,GAAA,CAAC;iBACvC,EAAE,CAAC,UAAU,EAAE,UAAA,GAAG,IAAI,OAAA,KAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAA,CAAC;iBAC1C,EAAE,CAAC,KAAK,EAAE;gBACT,MAAM,IAAI,KAAK,CAAC,SAAO,KAAK,CAAC,GAAG,gBAAa,CAAC,CAAA;aAC/C,CAAC,CAAA;YACJ,MAAM,CAAC,KAAK,EAAE,CAAA;SACf;QACD,MAAM,EAAE,UAAgB,KAAK;;;;;;4BACrB,YAAY,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;kCACrC,YAAY,KAAK,SAAS,CAAA,EAA1B,wBAA0B;4BACnC,KAAA,YAAY,CAAA;;gCACZ,qBAAM,MAAM,CAAC,QAAQ,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,EAAA;;4BAAvD,KAAA,SAAuD,CAAA;;;4BAFrD,IAAI,KAEiD;4BAE3D,IAAI,KAAK,CAAC,IAAI,CAAC,SAAS,KAAK,OAAO,EAAE;gCACpC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,IAAI,CAAA;gCACpC,sBAAO,EAAE,EAAA;6BACV;4BACD,sBAAO,IAAI,EAAA;;;;SACZ;KACF,CAAC,CAAA;CACH;;cC1EwB,MAAM;IAC7B,MAAM,CAAC,WAAW,CAAC,KAAK,EAAE;QACxB,KAAK,EAAE,UAAU,QAAQ,EAAE,YAAY;YAAhC,iBAaN;YAZC,IAAI,CAAC,MAAM,GAAG,EAAE,CAAA;YAEhB,IAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,YAAY,CAAC,CAAA;YACtD,MAAM;iBACH,EAAE,CAAC,OAAO,EAAE,UAAA,KAAK;gBAChB,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ;oBAAE,MAAM,CAAC,IAAI,EAAE,CAAA;;oBACrC,KAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;aAC7B,CAAC;iBACD,EAAE,CAAC,KAAK,EAAE;gBACT,MAAM,IAAI,KAAK,CAAC,SAAO,QAAQ,CAAC,GAAG,gBAAa,CAAC,CAAA;aAClD,CAAC,CAAA;YACJ,MAAM,CAAC,KAAK,EAAE,CAAA;SACf;QACD,MAAM,EAAE,UAAU,KAAK,EAAE,IAAI;YAC3B,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,UAAA,KAAK,IAAI,OAAA,KAAK,CAAC,GAAG,GAAA,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;SACpD;KACF,CAAC,CAAA;CACH;;mBChBwB,MAAM,EAAE,MAAM;IACrC,IAAM,EAAE,GAAG,IAAI,MAAM,CAAC,OAAK,UAAU,CAAC,MAAM,gBAAa;SACvD,MAAI,KAAK,CAAC,MAAM,MAAG,CAAA;SACnB,YAAU,IAAI,CAAC,MAAM,QAAK,CAAA,CAAC,CAAA;IAE7B,MAAM,CAAC,WAAW,CAAC,UAAU,EAAE;QAE7B,KAAK,EAAE,UAAU,QAAQ,EAAE,YAAY;YAAhC,iBAkBN;YAjBC,IAAM,KAAK,GAAG,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAA;YACpC,MAAM,CAAC,KAAK,EAAE,kBAAgB,QAAQ,CAAC,GAAK,CAAC,CAAA;YAE7C,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC,CAAC,CAAC,CAAA;YACxB,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC,CAAC,CAAC,CAAA;YAC1B,IAAI,CAAC,SAAS,GAAG,EAAE,CAAA;YAEnB,IAAI,CAAC,CAAA;YACL,IAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,YAAY,CAAC;iBACnD,EAAE,CAAC,OAAO,EAAE,cAAM,QAAC,CAAC,GAAG,KAAI,CAAC,SAAS,IAAC,CAAC;iBACvC,EAAE,CAAC,iBAAiB,EAAE,UAAA,KAAK,IAAI,OAAA,MAAM,CAAC,IAAI,EAAE,GAAA,CAAC;iBAC7C,EAAE,CAAC,UAAU,EAAE,UAAA,GAAG,IAAI,OAAA,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAA,CAAC;iBAClC,EAAE,CAAC,KAAK,EAAE;gBACT,MAAM,IAAI,KAAK,CAAC,SAAO,QAAQ,CAAC,GAAG,gBAAa,CAAC,CAAA;aAClD,CAAC,CAAA;YAEJ,MAAM,CAAC,KAAK,EAAE,CAAA;SACf;QAED,MAAM,EAAE,UAAgB,KAAK,EAAEA,OAAI;;;;;;;4BAC7B,UAAU,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,EAAE,KAAK,CAAC,IAAI,EAAE,CAAA;4BACvD,MAAM,GAAGA,OAAI,CAAC,MAAM,IAAI,CAAC,CAAA;4BACzB,KAAK,GAAG,CAACA,OAAI,CAAC,KAAK,KAAK,SAAS,IAAI,UAAU,CAAC,MAAM,GAAGA,OAAI,CAAC,KAAK,CAAA;4BAEzE,UAAU,GAAG,UAAU,CAAC,KAAK,CAAC,MAAM,EAAE,MAAM,GAAG,KAAK,CAAC,CAAA;4BAC/C,IAAI,GAAGA,OAAI,CAAC,IAAI,IAAI,UAAU,CAAC,MAAM,CAAA;4BACrC,QAAQ,GAAG,UAAU,CAAC,GAAG,CAAC,UAAC,IAAI,EAAE,CAAC;gCACtC,IAAM,GAAG,GAAG,EAAE,CAAA;gCACd,GAAG,CAAC,KAAI,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAA;gCACzB,OAAO,GAAG,CAAA;6BACX,CAAC,CAAA;4BAGE,IAAI,GAAG,EAAE,CAAA;4BACb,qBAAM,SAAS,CAAC,QAAQ,EAAE,UAAO,OAAO,EAAE,GAAG;;;;;gDAC3C,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAA;gDAC1B,GAAG,GAAG,CAAC,GAAG,GAAG,IAAI,IAAI,CAAC,CAAA;gDAC5B,IAAI,GAAG,KAAK,CAAC,EAAE;oDACb,IAAI,GAAG,KAAK,CAAC,EAAE;wDACb,IAAI,IAAI,OAAO,CAAA;qDAChB;oDACD,IAAI,IAAI,oBAAiB,GAAG,QAAI,CAAA;iDACjC;gDAED,IAAI,IAAI,oBAAiB,GAAG,QAAI,CAAA;gDAChC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;gDACnB,KAAA,IAAI,CAAA;gDAAI,qBAAM,MAAM,CAAC,QAAQ,CAAC,eAAe,CAAC,IAAI,CAAC,SAAS,EAAE,KAAK,CAAC,EAAA;;gDAApE,IAAI,GAAJ,KAAQ,SAA4D,CAAA;gDACpE,IAAI,IAAI,OAAO,CAAA;gDACf,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,CAAA;gDAClB,sBAAO,IAAI,EAAA;;;qCACZ,CAAC,EAAA;;4BAhBF,SAgBE,CAAA;4BACF,IAAI,GAAG,GAAG,CAAC,EAAE;gCACX,IAAI,IAAI,OAAO,CAAA;6BAChB;4BACD,sBAAO,IAAI,EAAA;;;;SACZ;KACF,CAAC,CAAA;CACH;;iBCrEwB,MAAM,EAAE,MAAM;IACrC,MAAM,CAAC,WAAW,CAAC,QAAQ,EAAE;QAC3B,KAAK,EAAE,UAAU,QAAQ,EAAE,YAAY;YAAhC,iBAiBN;YAhBC,IAAI,CAAC,SAAS,GAAG,EAAE,CAAA;YACnB,IAAI,CAAC,aAAa,GAAG,EAAE,CAAA;YACvB,IAAI,CAAC,CAAA;YACL,IAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,YAAY,CAAC;iBACnD,EAAE,CAAC,OAAO,EAAE,UAAA,CAAC;gBACZ,CAAC,GAAG,KAAI,CAAC,SAAS,CAAA;gBAClB,KAAI,CAAC,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAA;aAC1B,CAAC;iBACD,EAAE,CAAC,UAAU,EAAE,cAAM,QAAC,CAAC,GAAG,KAAI,CAAC,aAAa,IAAC,CAAC;iBAC9C,EAAE,CAAC,eAAe,EAAE,UAAA,KAAK,IAAI,OAAA,MAAM,CAAC,IAAI,EAAE,GAAA,CAAC;iBAC3C,EAAE,CAAC,UAAU,EAAE,UAAA,GAAG,IAAI,OAAA,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAA,CAAC;iBAClC,EAAE,CAAC,KAAK,EAAE,UAAA,CAAC;gBACV,MAAM,IAAI,KAAK,CAAC,SAAO,QAAQ,CAAC,GAAG,gBAAa,CAAC,CAAA;aAClD,CAAC,CAAA;YAEJ,MAAM,CAAC,KAAK,EAAE,CAAA;SACf;QAED,MAAM,EAAE,UAAU,KAAK,EAAE,IAAI;YAC3B,IAAM,IAAI,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,CAAA;YAC7C,OAAO,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC;kBACvB,MAAM,CAAC,QAAQ,CAAC,eAAe,CAAC,IAAI,CAAC,SAAS,EAAE,KAAK,CAAC;kBACtD,MAAM,CAAC,QAAQ,CAAC,eAAe,CAAC,IAAI,CAAC,aAAa,EAAE,KAAK,CAAC,CAAA;SAC/D;KACF,CAAC,CAAA;CACH;;eCbwB,MAAM,EAAE,MAAM;IACrC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IACtB,OAAO,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IACvB,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IACpB,OAAO,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IACvB,KAAK,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IACrB,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IACzB,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IACnB,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAClB,OAAO,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IACvB,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IACzB,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IACtB,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IACnB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IACxB,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CACvB;;AC9BD,IAAM,UAAU,GAAG;IACjB,SAAS,EAAE,UAAU,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ;IACxE,WAAW,EAAE,SAAS,EAAE,UAAU,EAAE,UAAU;CAC/C,CAAA;AACD,IAAM,QAAQ,GAAG;IACf,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAE,WAAW,EAAE,UAAU,EAAE,QAAQ,EAAE,UAAU;CAC7E,CAAA;AACD,IAAM,eAAe,GAAG,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;AAC5C,IAAM,aAAa,GAAG,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;AACxC,IAAM,QAAQ,GAAG;IACf,CAAC,EAAE,IAAI;IACP,CAAC,EAAE,IAAI;IACP,CAAC,EAAE,IAAI;IACP,SAAS,EAAE,IAAI;CAChB,CAAA;AAED,SAAS,IAAI,CAAE,GAAG;IAChB,OAAO,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;CACvB;;AAGD,IAAM,KAAK,GAAG;IACZ,WAAW,EAAE,UAAU,CAAC;QACtB,IAAM,GAAG,GAAG,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,CAAA;QACzC,OAAO,CAAC,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAA;KACzD;IAED,YAAY,EAAE,UAAU,CAAC;QACvB,IAAI,GAAG,GAAG,CAAC,CAAA;QACX,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,EAAE,CAAC,EAAE;YACrC,GAAG,IAAI,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;SAC/B;QACD,OAAO,GAAG,GAAG,CAAC,CAAC,OAAO,EAAE,CAAA;KACzB;;;IAID,aAAa,EAAE,UAAU,CAAC,EAAE,QAAQ;;QAElC,IAAM,GAAG,GAAG,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,QAAQ,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,CAAA;;QAE1D,IAAM,IAAI,GAAG,IAAI,IAAI,CAAC,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,CAAA;QAC5C,IAAM,IAAI,IAAI,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,GAAG,QAAQ,CAAC,CAAA;QAC3C,OAAO,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,GAAG,IAAI,IAAI,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAA;KACxD;IAED,UAAU,EAAE,UAAU,CAAC;QACrB,IAAM,IAAI,GAAG,CAAC,CAAC,WAAW,EAAE,CAAA;QAC5B,OAAO,CAAC,EAAE,CAAC,IAAI,GAAG,CAAC,MAAM,CAAC,KAAK,IAAI,GAAG,GAAG,KAAK,IAAI,GAAG,GAAG,KAAK,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,CAAA;KAC1E;IAED,SAAS,EAAE,UAAU,CAAC;QACpB,IAAM,GAAG,GAAG,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAA;QAClC,IAAM,KAAK,GAAG,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;QACrC,OAAO,QAAQ,CAAC,KAAK,CAAC,IAAI,QAAQ,CAAC,SAAS,CAAC,CAAA;KAC9C;IAED,OAAO,EAAE,UAAU,CAAC;QAClB,OAAO,QAAQ,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,QAAQ,EAAE,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAA;KAChE;CACF,CAAA;AAED,IAAM,OAAO,GAAG;IACd,GAAG,EAAE,UAAU,KAAK,EAAE,IAAI,EAAE,EAAE;QAC5B,IAAI,CAAC,EAAE;YAAE,EAAE,GAAG,GAAG,CAAA;QACjB,IAAI,MAAM,GAAG,KAAK,CAAC,QAAQ,EAAE,CAAA;QAC7B,IAAI,GAAG,GAAG,IAAI,GAAG,MAAM,CAAC,MAAM,CAAA;QAE9B,OAAO,GAAG,EAAE,GAAG,CAAC,EAAE;YAChB,MAAM,GAAG,EAAE,GAAG,MAAM,CAAA;SACrB;QAED,OAAO,MAAM,CAAA;KACd;CACF,CAAA;AAED,IAAM,WAAW,GAAG;IAClB,CAAC,EAAE,UAAU,CAAC;QACZ,OAAO,aAAa,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAA;KACjC;IACD,CAAC,EAAE,UAAU,CAAC;QACZ,OAAO,QAAQ,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAA;KAC5B;IACD,CAAC,EAAE,UAAU,CAAC;QACZ,OAAO,eAAe,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAA;KACrC;IACD,CAAC,EAAE,UAAU,CAAC;QACZ,OAAO,UAAU,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAA;KAChC;IACD,CAAC,EAAE,UAAU,CAAC;QACZ,OAAO,CAAC,CAAC,cAAc,EAAE,CAAA;KAC1B;IACD,CAAC,EAAE,UAAU,CAAC;QACZ,OAAO,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAA;KACxB;IACD,CAAC,EAAE,UAAU,CAAC;QACZ,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAA;KACnC;IACD,CAAC,EAAE,UAAU,CAAC;QACZ,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC,CAAA;KACxC;IACD,CAAC,EAAE,UAAU,CAAC;QACZ,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,CAAA;KACpC;IACD,CAAC,EAAE,UAAU,CAAC;QACZ,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC,CAAA;KAC/C;IACD,CAAC,EAAE,UAAU,CAAC;QACZ,OAAO,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;KAC7C;IACD,CAAC,EAAE,UAAU,CAAC;QACZ,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC,CAAA;KACzC;IACD,CAAC,EAAE,UAAU,CAAC;QACZ,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC,CAAA;KACpD;IACD,CAAC,EAAE,UAAU,CAAC;QACZ,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,eAAe,EAAE,EAAE,CAAC,CAAC,CAAA;KAC3C;IACD,CAAC,EAAE,UAAU,CAAC;QACZ,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,CAAA;KACxC;IACD,CAAC,EAAE,UAAU,CAAC;QACZ,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC,CAAA;KACtC;IACD,CAAC,EAAE,UAAU,CAAC;QACZ,QAAQ,CAAC,CAAC,QAAQ,EAAE,GAAG,EAAE,GAAG,IAAI,GAAG,IAAI,EAAC;KACzC;IACD,CAAC,EAAE,UAAU,CAAC;QACZ,QAAQ,CAAC,CAAC,QAAQ,EAAE,GAAG,EAAE,GAAG,IAAI,GAAG,IAAI,EAAC;KACzC;IACD,CAAC,EAAE,UAAU,CAAC;QACZ,OAAO,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,CAAA;KAC1B;IACD,CAAC,EAAE,UAAU,CAAC;QACZ,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,CAAA;KACtC;IACD,CAAC,EAAE,UAAU,CAAC;QACZ,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC,CAAA;KACtC;IACD,CAAC,EAAE,UAAU,CAAC;QACZ,OAAO,CAAC,CAAC,MAAM,EAAE,IAAI,CAAC,CAAA;KACvB;IACD,CAAC,EAAE,UAAU,CAAC;QACZ,OAAO,KAAK,CAAC,aAAa,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;KACjC;IACD,CAAC,EAAE,UAAU,CAAC;QACZ,OAAO,CAAC,CAAC,MAAM,EAAE,CAAA;KAClB;IACD,CAAC,EAAE,UAAU,CAAC;QACZ,OAAO,KAAK,CAAC,aAAa,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;KACjC;IACD,CAAC,EAAE,UAAU,CAAC;QACZ,OAAO,CAAC,CAAC,kBAAkB,EAAE,CAAA;KAC9B;IACD,CAAC,EAAE,UAAU,CAAC;QACZ,OAAO,CAAC,CAAC,kBAAkB,EAAE,CAAA;KAC9B;IACD,CAAC,EAAE,UAAU,CAAC;QACZ,OAAO,CAAC,CAAC,WAAW,EAAE,CAAC,QAAQ,EAAE,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;KAClD;IACD,CAAC,EAAE,UAAU,CAAC;QACZ,OAAO,CAAC,CAAC,WAAW,EAAE,CAAA;KACvB;IACD,CAAC,EAAE,UAAU,CAAC;QACZ,IAAM,EAAE,GAAG,CAAC,CAAC,iBAAiB,EAAE,GAAG,EAAE,GAAG,GAAG,CAAA;QAC3C,OAAO,CAAC,EAAE,GAAG,CAAC,GAAG,GAAG,GAAG,GAAG,IAAI,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAA;KAC3D;IACD,GAAG,EAAE;QACH,OAAO,GAAG,CAAA;KACX;CACF,CAAA;AACD,WAAW,CAAC,CAAC,GAAG,WAAW,CAAC,CAAC,CAAA;AAC7B,WAAW,CAAC,CAAC,GAAG,WAAW,CAAC,CAAC,CAAA;AAE7B,mBAAyB,CAAC,EAAE,MAAM;IAChC,IAAI,MAAM,GAAG,EAAE,CAAA;IACf,IAAI,SAAS,GAAG,MAAM,CAAA;IAEtB,OAAO,IAAI,EAAE;QACX,IAAM,CAAC,GAAG,KAAK,CAAA;QACf,IAAM,OAAO,GAAG,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;;QAGjC,IAAI,CAAC,OAAO,EAAE;YACZ,OAAO,MAAM,GAAG,SAAS,CAAA;SAC1B;;QAGD,MAAM,IAAI,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,SAAS,GAAG,CAAC,CAAC,CAAA;QAC7C,SAAS,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,CAAA;;QAGxC,IAAM,EAAE,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAA;QAC/B,IAAM,IAAI,GAAG,WAAW,CAAC,EAAE,CAAC,CAAA;QAC5B,MAAM,IAAI,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,GAAG,GAAG,GAAG,EAAE,CAAA;KAC/C;CACF;;ACjMD,IAAM,SAAS,GAAG;IAChB,GAAG,EAAE,OAAO;IACZ,GAAG,EAAE,MAAM;IACX,GAAG,EAAE,MAAM;IACX,GAAG,EAAE,OAAO;IACZ,GAAG,EAAE,OAAO;CACb,CAAA;AACD,IAAM,WAAW,GAAG;IAClB,OAAO,EAAE,GAAG;IACZ,MAAM,EAAE,GAAG;IACX,MAAM,EAAE,GAAG;IACX,OAAO,EAAE,GAAG;IACZ,OAAO,EAAE,GAAG;CACb,CAAA;AAED,IAAM,OAAO,GAAG;IACd,KAAK,EAAE,UAAA,CAAC,IAAI,OAAA,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,GAAA;IACvB,QAAQ,EAAE,UAAC,CAAC,EAAE,GAAG,IAAK,OAAA,CAAC,GAAG,GAAG,GAAA;IAC7B,YAAY,EAAE,UAAA,GAAG,IAAI,OAAAM,WAAS,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,GAAA;IAC1E,MAAM,EAAE,UAAA,CAAC,IAAI,OAAA,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,GAAA;IACzB,QAAQ,EAAE,UAAC,CAAC,EAAE,GAAG,IAAK,OAAA,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE,GAAG,CAAC,GAAA;IACzD,MAAM,EAAE,UAAC,CAAC,EAAE,GAAG;QACb,IAAI,IAAI,GAAG,CAAC,CAAA;QACZ,IAAI,CAAC,KAAK,KAAK,EAAE;YACf,IAAI,GAAG,IAAI,IAAI,EAAE,CAAA;SAClB;aAAM,IAAIrB,QAAU,CAAC,CAAC,CAAC,EAAE;YACxB,IAAI,GAAG,IAAI,IAAI,CAAC,CAAC,CAAC,CAAA;SACnB;QACD,OAAO,WAAW,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC,IAAI,EAAE,GAAG,CAAC,GAAG,CAAC,CAAA;KACnD;IACD,SAAS,EAAE,UAAC,CAAC,EAAE,GAAG,IAAK,OAAA,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG,GAAA;IAC5C,YAAY,EAAE,UAAC,CAAC,EAAE,GAAG,IAAK,OAAA,CAAC,GAAG,GAAG,GAAA;IACjC,UAAU,EAAE,UAAA,CAAC,IAAI,OAAA,CAAC,CAAC,WAAW,EAAE,GAAA;IAChC,QAAQ,EAAE,MAAM;IAEhB,aAAa,EAAE,UAAA,GAAG,IAAI,OAAA,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,GAAA;IAC3C,OAAO,EAAE,UAAA,CAAC,IAAI,OAAA,CAAC,CAAC,CAAC,CAAC,GAAA;IAClB,OAAO,EAAE,UAAA,CAAC,IAAI,OAAA,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,GAAA;IAC3B,MAAM,EAAE,UAAC,CAAC,EAAE,GAAG,IAAK,OAAA,CAAC,CAAC,IAAI,CAAC,GAAG,KAAK,SAAS,GAAG,GAAG,GAAG,GAAG,CAAC,GAAA;IACzD,MAAM,EAAE,UAAA,CAAC,IAAI,OAAAR,IAAM,CAAC,CAAC,CAAC,GAAA;IACtB,QAAQ,EAAE,UAAA,CAAC,IAAI,OAAA6B,WAAS,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,GAAA;IAC/C,KAAK,EAAE,UAAC,GAAG,EAAE,GAAG,IAAK,OAAA,GAAG,CAAC,GAAG,CAAC,UAAA,CAAC,IAAI,OAAA,CAAC,CAAC,GAAG,CAAC,GAAA,CAAC,GAAA;IACzC,OAAO,EAAE,SAAS,CAAC,UAAC,CAAC,EAAE,GAAG,IAAK,OAAA,CAAC,GAAG,GAAG,GAAA,CAAC;IACvC,QAAQ,EAAE,SAAS,CAAC,UAAC,CAAC,EAAE,GAAG,IAAK,OAAA,CAAC,GAAG,GAAG,GAAA,CAAC;IACxC,eAAe,EAAE,UAAA,CAAC,IAAI,OAAA,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAA;IAChD,MAAM,EAAE,SAAS,CAAC,UAAC,CAAC,EAAE,GAAG,IAAK,OAAA,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,GAAA,CAAC;IACtD,SAAS,EAAE,UAAC,CAAC,EAAE,GAAG,IAAK,OAAA,GAAG,GAAG,CAAC,GAAA;IAC9B,QAAQ,EAAE,UAAC,CAAC,EAAE,GAAG,IAAK,OAAA,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,GAAA;IAC3C,cAAc,EAAE,UAAC,CAAC,EAAE,CAAC,IAAK,OAAA,CAAC,CAAC,OAAO,CAAC,CAAC,EAAE,EAAE,CAAC,GAAA;IAC1C,SAAS,EAAE,UAAC,CAAC,EAAE,OAAO,EAAE,WAAW;QACjC,OAAAA,WAAS,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC;KAAA;IAC/C,eAAe,EAAE,UAAC,CAAC,EAAE,IAAI,EAAE,IAAI,IAAK,OAAAA,WAAS,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,GAAA;IACpE,SAAS,EAAE,UAAA,CAAC,IAAI,OAAA,CAAC,CAAC,OAAO,EAAE,GAAA;IAC3B,OAAO,EAAE,UAAC,CAAC,EAAE,GAAG;QACd,IAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,GAAG,IAAI,CAAC,CAAC,CAAA;QAClC,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,GAAG,EAAE,GAAG,CAAC,GAAG,GAAG,CAAA;KACtC;IACD,QAAQ,EAAE,UAAA,GAAG,IAAI,OAAAA,WAAS,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,GAAA;IACnD,MAAM,EAAE,UAAA,CAAC,IAAI,OAAA,CAAC,CAAC,MAAM,GAAA;IACrB,OAAO,EAAE,UAAC,CAAC,EAAE,KAAK,EAAE,MAAM;QACxB,IAAI,MAAM,KAAK,SAAS;YAAE,MAAM,GAAG,CAAC,CAAA;QACpC,OAAO,CAAC,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,GAAG,MAAM,CAAC,CAAA;KACtC;IACD,MAAM,EAAE,UAAC,CAAC,EAAE,GAAG,IAAK,OAAA,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAA;IAC/B,OAAO,EAAE,UAAC,CAAC,EAAE,GAAG,IAAK,OAAAA,WAAS,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,GAAA;IAC5C,OAAO,EAAE,UAAC,CAAC,IAAK,OAAAA,WAAS,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,GAAA;IACnC,YAAY,EAAE,UAAA,CAAC,IAAI,OAAAA,WAAS,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,2DAA2D,EAAE,EAAE,CAAC,GAAA;IACxG,gBAAgB,EAAE,UAAA,CAAC,IAAI,OAAAA,WAAS,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,GAAA;IACtD,OAAO,EAAE,UAAC,CAAC,EAAE,GAAG,IAAK,OAAA,CAAC,GAAG,GAAG,GAAA;IAC5B,UAAU,EAAE,UAAC,CAAC,EAAE,CAAC,EAAE,CAAC;QAClB,CAAC,GAAGA,WAAS,CAAC,CAAC,CAAC,CAAA;QAChB,CAAC,GAAG,CAAC,CAAC,KAAK,SAAS,IAAI,KAAK,GAAG,CAAC,CAAA;QACjC,CAAC,GAAG,CAAC,IAAI,EAAE,CAAA;QACX,IAAI,CAAC,CAAC,MAAM,IAAI,CAAC;YAAE,OAAO,CAAC,CAAA;QAC3B,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;KACrC;IACD,eAAe,EAAE,UAAC,CAAC,EAAE,CAAC,EAAE,CAAC;QACvB,IAAI,CAAC,KAAK,SAAS;YAAE,CAAC,GAAG,KAAK,CAAA;QAC9B,IAAM,GAAG,GAAG,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;QACxB,IAAI,GAAG,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;QACnC,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC;YAAE,GAAG,IAAI,CAAC,CAAA;QAC5B,OAAO,GAAG,CAAA;KACX;IACD,MAAM,EAAE,UAAU,GAAG;QACnB,IAAM,CAAC,GAAG,EAAE,CAAA;QACZ,OAAO,CAAC,GAAG,IAAI,EAAE,EAAE,MAAM,CAAC,UAAA,GAAG;YAC3B,IAAI,CAAC,CAAC,cAAc,CAAC,GAAG,CAAC,EAAE;gBACzB,OAAO,KAAK,CAAA;aACb;YACD,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI,CAAA;YACb,OAAO,IAAI,CAAA;SACZ,CAAC,CAAA;KACH;IACD,QAAQ,EAAE,UAAA,GAAG,IAAI,OAAAA,WAAS,CAAC,GAAG,CAAC,CAAC,WAAW,EAAE,GAAA;IAC7C,YAAY,EAAE,UAAA,CAAC,IAAI,OAAA,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAA;IACjE,YAAY,EAAE,UAAA,CAAC,IAAI,OAAA,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAA;CAClE,CAAA;AAED,SAAS,MAAM,CAAE,GAAG;IAClB,OAAOA,WAAS,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,YAAY,EAAE,UAAA,CAAC,IAAI,OAAA,SAAS,CAAC,CAAC,CAAC,GAAA,CAAC,CAAA;CAC/D;AAED,SAAS,QAAQ,CAAE,GAAG;IACpB,OAAOA,WAAS,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,wBAAwB,EAAE,UAAA,CAAC,IAAI,OAAA,WAAW,CAAC,CAAC,CAAC,GAAA,CAAC,CAAA;CAC7E;AAED,SAAS,QAAQ,CAAE,CAAC;IAClB,IAAM,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,KAAK,CAAC,GAAG,CAAC,CAAA;IAC7B,OAAO,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAA;CACxC;AAED,SAAS,WAAW,CAAE,CAAC,EAAE,CAAC;IACxB,OAAO,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAA;CAC1C;AAED,SAASA,WAAS,CAAE,GAAG;IACrB,OAAO,GAAG,GAAG,EAAE,CAAA;CAChB;AAED,SAAS,SAAS,CAAE,EAAE;IACpB,OAAO,UAAC,CAAC,EAAE,CAAC;QACV,IAAM,CAAC,GAAG,WAAW,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;QAC3B,OAAO,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAA;KAC3B,CAAA;CACF;AAED,SAAS,WAAW,CAAE,IAAI;IACxB,OAAO,IAAI,YAAY,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAA;CACtD;AAED,SAAwB,WAAW,CAAE,MAAM,EAAE,MAAM;IACjD,OAAOC,MAAQ,CAAC,OAAO,EAAE,UAAC,IAAI,EAAE,IAAI,IAAK,OAAA,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,IAAI,CAAC,GAAA,CAAC,CAAA;CAC5E;AAED,WAAW,CAAC,OAAO,GAAG,OAAO,CAAA;;AC5H7B;IAQE,gBAAa,OAAO;QAClB,OAAO,GAAGjC,MAAQ,CAAC;YACjB,IAAI,EAAE,CAAC,GAAG,CAAC;YACX,KAAK,EAAE,KAAK;YACZ,OAAO,EAAE,EAAE;YACX,eAAe,EAAE,IAAI;YACrB,cAAc,EAAE,KAAK;YACrB,aAAa,EAAE,KAAK;YACpB,gBAAgB,EAAE,KAAK;YACvB,eAAe,EAAE,KAAK;YACtB,MAAM,EAAE,IAAI;YACZ,cAAc,EAAE,KAAK;YACrB,gBAAgB,EAAE,KAAK;SACxB,EAAE,OAAO,CAAC,CAAA;QACX,OAAO,CAAC,IAAI,GAAG,oBAAoB,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA;QAEjD,IAAI,OAAO,CAAC,KAAK,EAAE;YACjB,IAAI,CAAC,KAAK,GAAG,EAAE,CAAA;SAChB;QACD,IAAI,CAAC,OAAO,GAAG,OAAO,CAAA;QACtB,IAAI,CAAC,IAAI,GAAG,GAAG,EAAE,CAAA;QACjB,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,CAAA;QAC9B,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,CAAA;QAC7C,IAAI,CAAC,QAAQ,GAAG,MAAM,EAAE,CAAA;QAExB,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,CAAA;QAClBkC,WAAO,CAAC,IAAI,EAAE,MAAM,CAAC,CAAA;KACtB;IACD,sBAAK,GAAL,UAAM,IAAY,EAAE,QAAiB;QACnC,IAAM,MAAM,GAAGC,KAAe,CAAC,IAAI,EAAE,QAAQ,EAAE,IAAI,CAAC,OAAO,CAAC,CAAA;QAC5D,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAA;KACjC;IACD,uBAAM,GAAN,UAAO,GAAW,EAAE,GAAQ,EAAE,IAAS;QACrC,IAAI,GAAGnC,MAAQ,CAAC,EAAE,EAAE,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,CAAA;QACvC,IAAM,KAAK,GAAG,IAAI,KAAK,CAAC,GAAG,EAAE,IAAI,CAAC,CAAA;QAClC,OAAO,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,GAAG,EAAE,KAAK,CAAC,CAAA;KACjD;IACK,+BAAc,GAApB,UAAqB,IAAI,EAAE,GAAG,EAAE,IAAI;;;;;4BACtB,qBAAM,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAA;;wBAA5B,GAAG,GAAG,SAAsB;wBAClC,sBAAO,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,CAAC,EAAA;;;;KACnC;IACK,4BAAW,GAAjB,UAAkB,IAAI,EAAE,IAAI;;;;;;4BACT,qBAAMoC,OAAgB,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,EAAA;;wBAA3D,QAAQ,GAAG,SAAgD;wBACjE,sBAAO,IAAI,CAAC,YAAY,CAAC,QAAQ,EAAE;;;;gDACrB,qBAAMC,IAAa,CAAC,QAAQ,CAAC,EAAA;;4CAAnC,GAAG,GAAG,SAA6B;4CACzC,sBAAO,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,QAAQ,CAAC,EAAA;;;iCACjC,CAAC,EAAA;;;;KACH;IACK,2BAAU,GAAhB,UAAiB,IAAI,EAAE,GAAG,EAAE,IAAI;;;;;;wBAC9B,IAAI,GAAGrC,MAAQ,CAAC,EAAE,EAAE,IAAI,CAAC,CAAA;wBACP,qBAAM,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,EAAA;;wBAAnD,SAAS,GAAG,SAAuC;wBACzD,sBAAO,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,GAAG,EAAE,IAAI,CAAC,EAAA;;;;KACzC;IACK,6BAAY,GAAlB,UAAoB,GAAG,EAAE,MAAM;;;;;;wBACvB,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAA;wBACvC,IAAI,YAAY,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE;4BACnC,sBAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAA;yBACvB;wBACa,qBAAM,MAAM,EAAE,EAAA;;wBAAtB,KAAK,GAAG,SAAc;wBAC5B,IAAI,YAAY,EAAE;4BAChB,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,KAAK,CAAA;yBACxB;wBACD,sBAAO,KAAK,EAAA;;;;KACb;IACD,0BAAS,GAAT,UAAW,GAAG,EAAE,KAAK;QACnB,IAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAA;QAC9C,OAAO,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,GAAG,EAAE,KAAK,CAAC,CAAA;KAC3C;IACD,+BAAc,GAAd,UAAgB,IAAI,EAAE,MAAM;QAC1B,OAAO,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,CAAA;KAC3C;IACD,4BAAW,GAAX,UAAa,IAAI,EAAE,GAAG;QACpB,OAAO,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,GAAG,CAAC,CAAA;KACrC;IACD,uBAAM,GAAN,UAAQ,MAAM;QACZ,OAAO,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,CAAA;KACjC;IACD,wBAAO,GAAP,UAAS,IAAI;QACX,IAAI,GAAG,IAAI,IAAI,EAAE,CAAA;QACjB,IAAM,IAAI,GAAG,IAAI,CAAA;QACjB,OAAO,UAAU,QAAQ,EAAE,GAAG,EAAE,EAAE;YAChC,MAAM,CAACU,OAAS,CAAC,IAAI,CAAC,IAAI,CAAC,IAAIC,QAAU,CAAC,IAAI,CAAC,IAAI,CAAC,EAClD,+CAA+C,CAAC,CAAA;YAClD,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAA;YACrB,IAAI,CAAC,UAAU,CAAC,QAAQ,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC,UAAA,IAAI,IAAI,OAAA,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,GAAA,EAAE,EAAE,CAAC,CAAA;SACtE,CAAA;KACF;IACM,cAAO,GAAG,MAAM,CAAA;IAChB,eAAQ,GAAG,QAAQ,CAAA;IACnB,cAAO,GAAG,OAAO,CAAA;IACjB,cAAO,GAAG,OAAO,CAAA;IACjB,gBAAS,GAAG,SAAS,CAAA;IACrB,YAAK,GAAG;QACb,UAAU,YAAA;QACV,iBAAiB,mBAAA;QACjB,gBAAgB,kBAAA;QAChB,cAAc,gBAAA;QACd,WAAW,EAAE,EAAE;QACf,YAAY,EAAE,EAAE;QAChB,cAAc,EAAE,EAAE;QAClB,cAAc,EAAE,EAAE;KACnB,CAAA;IACH,aAAC;CA9GD,IA8GC;AAED,SAAS,oBAAoB,CAAE,KAAK;IAClC,IAAID,OAAS,CAAC,KAAK,CAAC;QAAE,OAAO,KAAK,CAAA;IAClC,IAAIC,QAAU,CAAC,KAAK,CAAC;QAAE,OAAO,CAAC,KAAK,CAAC,CAAA;IACrC,MAAM,IAAI,SAAS,CAAC,gBAAgB,GAAG,KAAK,CAAC,CAAA;CAC9C;;;;"} \ 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.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 line: 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.line = token.line\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.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\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","import * 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 // eslint-disable-line\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 // eslint-disable-line\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 // eslint-disable-line\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 // eslint-disable-line\n /** ``trim_value_right` is used to strip blank characters (including ` `, `\\t`, and `\\r`) from the right of values (`{{ }}`) until `\\n` (inclusive). Defaults to `false`. */\n trim_value_right?: boolean // eslint-disable-line\n /** `trim_value_left` is similar to `trim_value_right`, whereas the `\\n` is exclusive. Defaults to `false`. See Whitespace Control for details. */\n trim_value_left?: boolean // eslint-disable-line\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 const defaultOptions: NormalizedOptions = {\n root: ['.'],\n cache: false,\n extname: '',\n dynamicPartials: true,\n trim_tag_right: false,\n trim_tag_left: false,\n trim_value_right: false,\n trim_value_left: false,\n greedy: true,\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\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 { NormalizedOptions, defaultOptions } from '../liquid-options'\nimport BlockMode from './block-mode'\n\nexport default class Scope {\n opts: NormalizedOptions\n contexts: Array\n blocks: object = {}\n blockMode: BlockMode = BlockMode.OUTPUT\n constructor (ctx: object = {}, opts: NormalizedOptions = defaultOptions) {\n this.opts = { ...defaultOptions, ...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 { LiquidOptions } from 'src/liquid-options'\n\nexport default function whiteSpaceCtrl (tokens: Token[], options: LiquidOptions) {\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_value_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_value_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 raw: string\n input: string\n file: string\n value: string\n constructor (raw, pos, input, file, line) {\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, pos, input, file, line) {\n super(raw, pos, input, file, line)\n this.trimLeft = raw[2] === '-'\n this.trimRight = raw[raw.length - 3] === '-'\n this.value = raw.slice(this.trimLeft ? 3 : 2, this.trimRight ? -3 : -2).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, pos, input, file, line) {\n super(raw, 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, pos, input, file, line) {\n super(raw, 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 OutputToken from './output-token'\nimport { LiquidOptions, defaultOptions } from 'src/liquid-options'\n\nenum ParseState { HTML, OUTPUT, TAG }\n\nexport default class Tokenizer {\n options: LiquidOptions\n constructor (options: LiquidOptions = defaultOptions) {\n this.options = options\n }\n tokenize (input: string, file?: string) {\n const tokens = []\n let p = 0\n let line = 1\n let state = ParseState.HTML\n let buffer = ''\n let bufferBegin = 0\n\n while (p < input.length) {\n if (input[p] === '\\n') line++\n const bin = input.substr(p, 2)\n if (state === ParseState.HTML) {\n if (bin === '{{' || bin === '{%') {\n if (buffer) tokens.push(new HTMLToken(buffer, bufferBegin, input, file, line))\n buffer = bin\n bufferBegin = p\n p += 2\n state = bin === '{{' ? ParseState.OUTPUT : ParseState.TAG\n continue\n }\n } else if (state === ParseState.OUTPUT && bin === '}}') {\n buffer += '}}'\n tokens.push(new OutputToken(buffer, bufferBegin, input, file, line))\n p += 2\n buffer = ''\n bufferBegin = p\n state = ParseState.HTML\n continue\n } else if (bin === '%}') {\n buffer += '%}'\n tokens.push(new TagToken(buffer, bufferBegin, input, file, line))\n p += 2\n buffer = ''\n bufferBegin = p\n state = ParseState.HTML\n continue\n }\n buffer += input[p++]\n }\n if (buffer) tokens.push(new HTMLToken(buffer, bufferBegin, 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, NormalizedOptions, defaultOptions, normalize } from './liquid-options'\n\nexport default class Liquid {\n public options: NormalizedOptions\n private cache: object\n private parser: Parser\n private renderer: Render\n private tokenizer: Tokenizer\n\n constructor (opts: LiquidOptions = {}) {\n const options = { ...defaultOptions, ...normalize(opts) }\n if (options.cache) {\n this.cache = {}\n }\n this.options = options\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 diff --git a/dist/liquid.d.ts b/dist/liquid.d.ts new file mode 100644 index 0000000000..22ec038cd8 --- /dev/null +++ b/dist/liquid.d.ts @@ -0,0 +1,30 @@ +import Scope from './scope/scope'; +import * as Types from './types'; +import ITemplate from './template/itemplate'; +import ITagImplOptions from './template/tag/itag-impl-options'; +import { isTruthy, isFalsy, evalExp, evalValue } from './render/syntax'; +import { LiquidOptions, NormalizedOptions } from './liquid-options'; +export default class Liquid { + options: NormalizedOptions; + private cache; + private parser; + private renderer; + private tokenizer; + constructor(opts?: LiquidOptions); + parse(html: string, filepath?: string): any[]; + 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; + evalValue(str: string, scope: Scope): any; + registerFilter(name: any, filter: any): void; + registerTag(name: string, tag: ITagImplOptions): void; + plugin(plugin: any): any; + express(): (filePath: string, ctx: object, cb: (err: Error, html?: string) => void) => void; + static default: typeof Liquid; + static isTruthy: typeof isTruthy; + static isFalsy: typeof isFalsy; + static evalExp: typeof evalExp; + static evalValue: typeof evalValue; + static Types: typeof Types; +} diff --git a/dist/liquid.js b/dist/liquid.js index 2b15751774..29c999199b 100644 --- a/dist/liquid.js +++ b/dist/liquid.js @@ -1,5 +1,5 @@ /* - * liquidjs@7.0.0, https://github.com/harttle/liquidjs + * liquidjs@7.0.1, https://github.com/harttle/liquidjs * (c) 2016-2019 harttle * Released under the MIT License. */ @@ -38,6 +38,17 @@ d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); } + var __assign = function() { + __assign = Object.assign || function __assign(t) { + for (var s, i = 1, n = arguments.length; i < n; i++) { + s = arguments[i]; + for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p]; + } + return t; + }; + return __assign.apply(this, arguments); + }; + function __awaiter(thisArg, _arguments, P, generator) { return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } @@ -90,7 +101,7 @@ } function stringify(value) { if (isNil(value)) - return String(value); + return ''; if (isFunction(value.to_liquid)) return stringify(value.to_liquid()); if (isFunction(value.toLiquid)) @@ -167,6 +178,7 @@ for (var key in src) if (src.hasOwnProperty(key)) target[key] = src[key]; + return target; } function last(arr) { return arr[arr.length - 1]; @@ -200,6 +212,14 @@ arr.push(i); } return arr; + } + function padStart(str, length, ch) { + if (ch === void 0) { ch = ' '; } + str = String(str); + var n = length - str.length; + while (n-- > 0) + str = ch + str; + return str; } // quote related @@ -225,7 +245,7 @@ var hash = new RegExp("(?:" + identifier.source + ")\\s*:\\s*(?:" + value.source + ")"); var hashCapture = new RegExp("(" + identifier.source + ")\\s*:\\s*(" + value.source + ")", 'g'); // full match - var tagLine = new RegExp("^\\s*(" + identifier.source + ")\\s*([\\s\\S]*)\\s*$"); + var tagLine = new RegExp("^\\s*(" + identifier.source + ")\\s*([\\s\\S]*?)\\s*$"); var literalLine = new RegExp("^" + literal.source + "$", 'i'); var variableLine = new RegExp("^" + variable.source + "$"); var numberLine = new RegExp("^" + number.source + "$"); @@ -291,7 +311,7 @@ var err = this.originalError; var context = mkContext(this.input, this.line); this.message = mkMessage(err.message, this.token); - this.stack = context + + this.stack = this.message + '\n' + context + '\n' + (this.stack || this.message) + (err.stack ? '\nFrom ' + err.stack : ''); }; @@ -312,7 +332,7 @@ __extends(ParseError, _super); function ParseError(err, token) { var _this = _super.call(this, err, token) || this; - assign(_this, err); + _this.message = err.message; _super.prototype.captureStackTrace.call(_this, _this); return _this; } @@ -324,7 +344,7 @@ __extends(RenderError, _super); function RenderError(err, tpl) { var _this = _super.call(this, err, tpl.token) || this; - assign(_this, err); + _this.message = err.message; _super.prototype.captureStackTrace.call(_this, _this); return _this; } @@ -357,7 +377,7 @@ var context = range(begin, end + 1) .map(function (lineNumber) { var indicator = (lineNumber === targetLine) ? '>> ' : ' '; - var num = padStart(String(end).length, lineNumber); + var num = padStart(String(lineNumber), String(end).length); var text = lines[lineNumber - 1]; return "" + indicator + num + "| " + text; }) @@ -373,11 +393,6 @@ msg += ', line:' + token.line; } return msg; - } - function padStart(length, str) { - str = String(str); - var blank = Array(length - str.length).join(' '); - return blank + str; } function assert (predicate, message) { @@ -387,17 +402,50 @@ } } + var defaultOptions = { + root: ['.'], + cache: false, + extname: '', + dynamicPartials: true, + trim_tag_right: false, + trim_tag_left: false, + trim_value_right: false, + trim_value_left: false, + greedy: true, + strict_filters: false, + strict_variables: false + }; + function normalize(options) { + options = options || {}; + if (options.hasOwnProperty('root')) { + options.root = normalizeStringArray(options.root); + } + return options; + } + function normalizeStringArray(value) { + if (isArray(value)) + return value; + if (isString(value)) + return [value]; + return []; + } + + var BlockMode; + (function (BlockMode) { + /* store rendered html into blocks */ + BlockMode[BlockMode["OUTPUT"] = 0] = "OUTPUT"; + /* output rendered html directly */ + BlockMode[BlockMode["STORE"] = 1] = "STORE"; + })(BlockMode || (BlockMode = {})); + var BlockMode$1 = BlockMode; + var Scope = /** @class */ (function () { function Scope(ctx, opts) { if (ctx === void 0) { ctx = {}; } - var defaultOptions = { - dynamicPartials: true, - strict_variables: false, - strict_filters: false, - blocks: {}, - root: [] - }; - this.opts = assign(defaultOptions, opts); + if (opts === void 0) { opts = defaultOptions; } + this.blocks = {}; + this.blockMode = BlockMode$1.OUTPUT; + this.opts = __assign({}, defaultOptions, opts); this.contexts = [ctx || {}]; } Scope.prototype.getAll = function () { @@ -443,7 +491,7 @@ return this.contexts.splice(i, 1)[0]; }; Scope.prototype.findContextFor = function (key, filter$$1) { - if (filter$$1 === void 0) { filter$$1 = (function (arg) { return true; }); } + if (filter$$1 === void 0) { filter$$1 = function () { return true; }; } for (var i = this.contexts.length - 1; i >= 0; i--) { var candidate = this.contexts[i]; if (!filter$$1(candidate)) @@ -562,6 +610,40 @@ return -1; } + var CaptureScope = /** @class */ (function () { + function CaptureScope() { + } + return CaptureScope; + }()); + var AssignScope = /** @class */ (function () { + function AssignScope() { + } + return AssignScope; + }()); + var IncrementScope = /** @class */ (function () { + function IncrementScope() { + } + return IncrementScope; + }()); + var DecrementScope = /** @class */ (function () { + function DecrementScope() { + } + return DecrementScope; + }()); + + + + var Types = /*#__PURE__*/Object.freeze({ + AssignScope: AssignScope, + CaptureScope: CaptureScope, + IncrementScope: IncrementScope, + DecrementScope: DecrementScope, + ParseError: ParseError, + TokenizationError: TokenizationError, + RenderBreakError: RenderBreakError, + AssertionError: AssertionError + }); + function domResolve(root, path) { var base = document.createElement('base'); base.href = root; @@ -573,24 +655,18 @@ head.removeChild(base); return resolved; } - function resolve(filepath, root, options) { - root = root || options.root; - if (isArray(root)) { - root = root[0]; - } - if (root.length && last(root) !== '/') { + function resolve(root, filepath, ext) { + if (root.length && last(root) !== '/') root += '/'; - } var url = domResolve(root, filepath); return url.replace(/^(\w+:\/\/[^/]+)(\/[^?]+)/, function (str, origin, path) { var last$$1 = path.split('/').pop(); - if (/\.\w+$/.test(last$$1)) { + if (/\.\w+$/.test(last$$1)) return str; - } - return origin + path + options.extname; + return origin + path + ext; }); } - function read(url) { + function readFile(url) { return __awaiter(this, void 0, void 0, function () { return __generator(this, function (_a) { return [2 /*return*/, new Promise(function (resolve, reject) { @@ -611,10 +687,18 @@ })]; }); }); - } + } + function exists() { + return __awaiter(this, void 0, void 0, function () { + return __generator(this, function (_a) { + return [2 /*return*/, true]; + }); + }); + } + var fs = { readFile: readFile, resolve: resolve, exists: exists }; function whiteSpaceCtrl(tokens, options) { - options = assign({ greedy: true }, options); + options = __assign({ greedy: true }, options); var inRaw = false; tokens.forEach(function (token, i) { if (shouldTrimLeft(token, inRaw, options)) { @@ -633,17 +717,17 @@ if (inRaw) return false; if (token.type === 'tag') - return token.trim_left || options.trim_tag_left; - if (token.type === 'value') - return token.trim_left || options.trim_value_left; + return token.trimLeft || options.trim_tag_left; + if (token.type === 'output') + return token.trimLeft || options.trim_value_left; } function shouldTrimRight(token, inRaw, options) { if (inRaw) return false; if (token.type === 'tag') - return token.trim_right || options.trim_tag_right; - if (token.type === 'value') - return token.trim_right || options.trim_value_right; + return token.trimRight || options.trim_tag_right; + if (token.type === 'output') + return token.trimRight || options.trim_value_right; } function trimLeft(token, greedy) { if (!token || token.type !== 'html') @@ -658,102 +742,185 @@ token.value = token.value.replace(rRight, ''); } - function parse(input, file, options) { - assert(isString(input), 'illegal input'); - var rLiquid = /({%-?([\s\S]*?)-?%})|({{-?([\s\S]*?)-?}})/g; - var currIndent = 0; - var lineNumber = LineNumber(input); - var lastMatchEnd = 0; - var tokens = []; - for (var match = void 0; (match = rLiquid.exec(input)); lastMatchEnd = rLiquid.lastIndex) { - if (match.index > lastMatchEnd) { - tokens.push(parseHTMLToken(lastMatchEnd, match.index)); - } - tokens.push(match[1] - ? parseTagToken(match[1], match[2].trim(), match.index) - : parseValueToken(match[3], match[4].trim(), match.index)); - } - if (input.length > lastMatchEnd) { - tokens.push(parseHTMLToken(lastMatchEnd, input.length)); - } - whiteSpaceCtrl(tokens, options); - return tokens; - function parseTagToken(raw, value$$1, pos) { - var match = value$$1.match(tagLine); - var token = { - type: 'tag', - indent: currIndent, - line: lineNumber.get(pos), - trim_left: raw.slice(0, 3) === '{%-', - trim_right: raw.slice(-3) === '-%}', - raw: raw, - value: value$$1, - input: input, - file: file - }; + var Token = /** @class */ (function () { + function Token(raw, pos, input, file, line) { + this.line = line; + this.raw = raw; + this.input = input; + this.file = file; + } + return Token; + }()); + + 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; + _this.type = 'html'; + _this.value = str; + return _this; + } + return HTMLToken; + }(Token)); + + var DelimitedToken = /** @class */ (function (_super) { + __extends(DelimitedToken, _super); + function DelimitedToken(raw, pos, input, file, line) { + var _this = _super.call(this, raw, pos, input, file, line) || this; + _this.trimLeft = raw[2] === '-'; + _this.trimRight = raw[raw.length - 3] === '-'; + _this.value = raw.slice(_this.trimLeft ? 3 : 2, _this.trimRight ? -3 : -2).trim(); + return _this; + } + return DelimitedToken; + }(Token)); + + var TagToken = /** @class */ (function (_super) { + __extends(TagToken, _super); + function TagToken(raw, pos, input, file, line) { + var _this = _super.call(this, raw, pos, input, file, line) || this; + _this.type = 'tag'; + var match = _this.value.match(tagLine); if (!match) { - throw new TokenizationError("illegal tag syntax", token); + throw new TokenizationError("illegal tag syntax", _this); } - token.name = match[1]; - token.args = match[2]; - return token; - } - function parseValueToken(raw, value$$1, pos) { - return { - type: 'value', - line: lineNumber.get(pos), - trim_left: raw.slice(0, 3) === '{{-', - trim_right: raw.slice(-3) === '-}}', - raw: raw, - value: value$$1, - input: input, - file: file - }; + _this.name = match[1]; + _this.args = match[2]; + return _this; } - function parseHTMLToken(begin, end) { - var htmlFragment = input.slice(begin, end); - currIndent = last((htmlFragment).split('\n')).length; - return { - type: 'html', - raw: htmlFragment, - value: htmlFragment - }; + return TagToken; + }(DelimitedToken)); + + var OutputToken = /** @class */ (function (_super) { + __extends(OutputToken, _super); + function OutputToken(raw, pos, input, file, line) { + var _this = _super.call(this, raw, pos, input, file, line) || this; + _this.type = 'output'; + return _this; } - } - function LineNumber(html) { - var parsedLinesCount = 0; - var lastMatchBegin = -1; - return { - get: function (pos) { - var lines = html.slice(lastMatchBegin + 1, pos).split('\n'); - parsedLinesCount += lines.length - 1; - lastMatchBegin = pos; - return parsedLinesCount + 1; + return OutputToken; + }(DelimitedToken)); + + var ParseState; + (function (ParseState) { + ParseState[ParseState["HTML"] = 0] = "HTML"; + ParseState[ParseState["OUTPUT"] = 1] = "OUTPUT"; + ParseState[ParseState["TAG"] = 2] = "TAG"; + })(ParseState || (ParseState = {})); + var Tokenizer = /** @class */ (function () { + function Tokenizer(options) { + if (options === void 0) { options = defaultOptions; } + this.options = options; + } + Tokenizer.prototype.tokenize = function (input, file) { + var tokens = []; + var p = 0; + var line = 1; + var state = ParseState.HTML; + var buffer = ''; + var bufferBegin = 0; + while (p < input.length) { + if (input[p] === '\n') + line++; + var bin = input.substr(p, 2); + if (state === ParseState.HTML) { + if (bin === '{{' || bin === '{%') { + if (buffer) + tokens.push(new HTMLToken(buffer, bufferBegin, input, file, line)); + buffer = bin; + bufferBegin = p; + p += 2; + state = bin === '{{' ? ParseState.OUTPUT : ParseState.TAG; + continue; + } + } + else if (state === ParseState.OUTPUT && bin === '}}') { + buffer += '}}'; + tokens.push(new OutputToken(buffer, bufferBegin, input, file, line)); + p += 2; + buffer = ''; + bufferBegin = p; + state = ParseState.HTML; + continue; + } + else if (bin === '%}') { + buffer += '%}'; + tokens.push(new TagToken(buffer, bufferBegin, input, file, line)); + p += 2; + buffer = ''; + bufferBegin = p; + state = ParseState.HTML; + continue; + } + buffer += input[p++]; } + if (buffer) + tokens.push(new HTMLToken(buffer, bufferBegin, input, file, line)); + whiteSpaceCtrl(tokens, this.options); + return tokens; }; - } + return Tokenizer; + }()); - function Operators (isTruthy) { - return { - '==': function (l, r) { return l === r; }, - '!=': function (l, r) { return l !== r; }, - '>': function (l, r) { return l !== null && r !== null && l > r; }, - '<': function (l, r) { return l !== null && r !== null && l < r; }, - '>=': function (l, r) { return l !== null && r !== null && l >= r; }, - '<=': function (l, r) { return l !== null && r !== null && l <= r; }, - 'contains': function (l, r) { - if (!l) - return false; - if (typeof l.indexOf !== 'function') - return false; - return l.indexOf(r) > -1; - }, - 'and': function (l, r) { return isTruthy(l) && isTruthy(r); }, - 'or': function (l, r) { return isTruthy(l) || isTruthy(r); } + var Render = /** @class */ (function () { + function Render() { + } + Render.prototype.renderTemplates = function (templates, scope) { + return __awaiter(this, void 0, void 0, function () { + var html, _i, templates_1, tpl, _a, e_1; + return __generator(this, function (_b) { + switch (_b.label) { + case 0: + assert(scope, 'unable to evalTemplates: scope undefined'); + html = ''; + _i = 0, templates_1 = templates; + _b.label = 1; + case 1: + if (!(_i < templates_1.length)) return [3 /*break*/, 6]; + tpl = templates_1[_i]; + _b.label = 2; + case 2: + _b.trys.push([2, 4, , 5]); + _a = html; + return [4 /*yield*/, tpl.render(scope)]; + case 3: + html = _a + _b.sent(); + return [3 /*break*/, 5]; + case 4: + e_1 = _b.sent(); + if (e_1 instanceof RenderBreakError) { + e_1.resolvedHTML = html; + throw e_1; + } + throw e_1 instanceof RenderError ? e_1 : new RenderError(e_1, tpl); + case 5: + _i++; + return [3 /*break*/, 1]; + case 6: return [2 /*return*/, html]; + } + }); + }); }; - } + return Render; + }()); - var operators$1 = Operators(isTruthy); + var operators$1 = { + '==': function (l, r) { return l === r; }, + '!=': function (l, r) { return l !== r; }, + '>': function (l, r) { return l !== null && r !== null && l > r; }, + '<': function (l, r) { return l !== null && r !== null && l < r; }, + '>=': function (l, r) { return l !== null && r !== null && l >= r; }, + '<=': function (l, r) { return l !== null && r !== null && l <= r; }, + 'contains': function (l, r) { + if (!l) + return false; + if (typeof l.indexOf !== 'function') + return false; + return l.indexOf(r) > -1; + }, + 'and': function (l, r) { return isTruthy(l) && isTruthy(r); }, + 'or': function (l, r) { return isTruthy(l) || isTruthy(r); } + }; function evalExp(exp, scope) { assert(scope, 'unable to evalExp: scope undefined'); var operatorREs = operators; @@ -798,308 +965,270 @@ return val === false || undefined === val || val === null; } - var render = { - renderTemplates: function (templates, scope) { + /** + * Key-Value Pairs Representing Tag Arguments + * Example: + * For the markup `{% include 'head.html' foo='bar' %}`, + * hash['foo'] === 'bar' + */ + var Hash = /** @class */ (function () { + function Hash(markup, scope) { + var match; + hashCapture.lastIndex = 0; + while ((match = hashCapture.exec(markup))) { + var k = match[1]; + var v = match[2]; + this[k] = evalValue(v, scope); + } + } + return Hash; + }()); + + var Template = /** @class */ (function () { + function Template(token) { + this.token = token; + } + return Template; + }()); + + var Tag = /** @class */ (function (_super) { + __extends(Tag, _super); + function Tag(token, tokens, liquid) { + var _this = _super.call(this, token) || this; + _this.name = token.name; + var impl = Tag.impls[token.name]; + assert(impl, "tag " + token.name + " not found"); + _this.impl = create(impl); + _this.impl.liquid = liquid; + if (_this.impl.parse) { + _this.impl.parse(token, tokens); + } + return _this; + } + Tag.prototype.render = function (scope) { return __awaiter(this, void 0, void 0, function () { - function renderTemplate(template) { - return __awaiter(this, void 0, void 0, function () { - var partial; - return __generator(this, function (_a) { - switch (_a.label) { - case 0: - if (!(template.type === 'tag')) return [3 /*break*/, 2]; - return [4 /*yield*/, this.renderTag(template, scope)]; - case 1: - partial = _a.sent(); - return [2 /*return*/, partial === undefined ? '' : partial]; - case 2: - if (template.type === 'value') { - return [2 /*return*/, this.renderValue(template, scope)]; - } - return [2 /*return*/, template.value]; - } - }); - }); - } - var html, _i, templates_1, tpl, _a, e_1; - return __generator(this, function (_b) { - switch (_b.label) { + var hash, impl, html; + return __generator(this, function (_a) { + switch (_a.label) { case 0: - assert(scope, 'unable to evalTemplates: scope undefined'); - html = ''; - _i = 0, templates_1 = templates; - _b.label = 1; - case 1: - if (!(_i < templates_1.length)) return [3 /*break*/, 6]; - tpl = templates_1[_i]; - _b.label = 2; - case 2: - _b.trys.push([2, 4, , 5]); - _a = html; - return [4 /*yield*/, renderTemplate.call(this, tpl)]; - case 3: - html = _a + _b.sent(); - return [3 /*break*/, 5]; - case 4: - e_1 = _b.sent(); - if (e_1 instanceof RenderBreakError) { - e_1.resolvedHTML = html; - throw e_1; + hash = new Hash(this.token.args, scope); + impl = this.impl; + if (typeof impl.render !== 'function') { + return [2 /*return*/, '']; } - throw e_1 instanceof RenderError ? e_1 : new RenderError(e_1, tpl); - case 5: - _i++; - return [3 /*break*/, 1]; - case 6: return [2 /*return*/, html]; - } - }); - }); - }, - renderTag: function (template, scope) { - return __awaiter(this, void 0, void 0, function () { - return __generator(this, function (_a) { - if (template.name === 'continue') { - throw new RenderBreakError('continue'); - } - if (template.name === 'break') { - throw new RenderBreakError('break'); + return [4 /*yield*/, impl.render(scope, hash)]; + case 1: + html = _a.sent(); + return [2 /*return*/, stringify(html)]; } - return [2 /*return*/, template.render(scope)]; - }); - }); - }, - renderValue: function (template, scope) { - return __awaiter(this, void 0, void 0, function () { - var partial; - return __generator(this, function (_a) { - partial = this.evalValue(template, scope); - return [2 /*return*/, partial === undefined ? '' : stringify(partial)]; }); }); - }, - evalValue: function (template, scope) { - assert(scope, 'unable to evalValue: scope undefined'); - return template.filters.reduce(function (prev, filter) { return filter.render(prev, scope); }, evalExp(template.initial, scope)); - } - }; - function Render () { - var instance = create(render); - return instance; - } + }; + Tag.register = function (name, tag) { + Tag.impls[name] = tag; + }; + Tag.clear = function () { + Tag.impls = {}; + }; + Tag.impls = {}; + return Tag; + }(Template)); - function hash$1(markup, scope) { - var obj = {}; - var match; - hashCapture.lastIndex = 0; - while ((match = hashCapture.exec(markup))) { - var k = match[1]; - var v = match[2]; - obj[k] = evalValue(v, scope); + var valueRE = new RegExp("" + value.source, 'g'); + var Filter = /** @class */ (function () { + function Filter(str, strictFilters) { + if (strictFilters === void 0) { strictFilters = false; } + var match = filterLine.exec(str); + assert(match, 'illegal filter: ' + str); + var name = match[1]; + var argList = match[2] || ''; + var impl = Filter.impls[name]; + if (!impl && strictFilters) + throw new TypeError("undefined filter: " + name); + this.name = name; + this.impl = impl || (function (x) { return x; }); + this.args = this.parseArgs(argList); } - return obj; - } - function Tag () { - var tagImpls = {}; - var _tagInstance = { - render: function (scope) { - return __awaiter(this, void 0, void 0, function () { - var obj, impl; - return __generator(this, function (_a) { - obj = hash$1(this.token.args, scope); - impl = this.tagImpl; - if (typeof impl.render !== 'function') { - return [2 /*return*/, '']; - } - return [2 /*return*/, impl.render(scope, obj)]; - }); - }); - }, - parse: function (token, tokens) { - this.type = 'tag'; - this.token = token; - this.name = token.name; - var tagImpl = tagImpls[this.name]; - assert(tagImpl, "tag " + this.name + " not found"); - this.tagImpl = create(tagImpl); - if (this.tagImpl.parse) { - this.tagImpl.parse(token, tokens); - } + Filter.prototype.parseArgs = function (argList) { + var match; + var args = []; + while ((match = valueRE.exec(argList.trim()))) { + var v = match[0]; + var re = new RegExp(v + "\\s*:", 'g'); + var keyMatch = re.exec(match.input); + var currentMatchIsKey = keyMatch && keyMatch.index === match.index; + currentMatchIsKey ? args.push("'" + v + "'") : args.push(v); } + return args; }; - function register(name, tag) { - tagImpls[name] = tag; - } - function construct(token, tokens) { - var instance = create(_tagInstance); - instance.parse(token, tokens); - return instance; - } - function clear() { - tagImpls = {}; - } - return { - construct: construct, - register: register, - clear: clear + 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); }; - } + Filter.register = function (name, filter$$1) { + Filter.impls[name] = filter$$1; + }; + Filter.clear = function () { + Filter.impls = {}; + }; + Filter.impls = {}; + return Filter; + }()); - var valueRE = new RegExp("" + value.source, 'g'); - function Filter (options) { - options = assign({}, options); - var filters = {}; - var _filterInstance = { - render: function (output, scope) { - var args = this.args.map(function (arg) { return evalValue(arg, scope); }); - args.unshift(output); - return this.filter.apply(null, args); - }, - parse: function (str) { - var match = filterLine.exec(str); - assert(match, 'illegal filter: ' + str); - var name = match[1]; - var argList = match[2] || ''; - var filter$$1 = filters[name]; - if (typeof filter$$1 !== 'function') { - if (options.strict_filters) { - throw new TypeError("undefined filter: " + name); - } - this.name = name; - this.filter = function (x) { return x; }; - this.args = []; - return this; - } - var args = []; - while ((match = valueRE.exec(argList.trim()))) { - var v = match[0]; - var re = new RegExp(v + "\\s*:", 'g'); - var keyMatch = re.exec(match.input); - var currentMatchIsKey = keyMatch && keyMatch.index === match.index; - currentMatchIsKey ? args.push("'" + v + "'") : args.push(v); + var ParseStream = /** @class */ (function () { + function ParseStream(tokens, parseToken) { + this.handlers = {}; + this.tokens = tokens; + this.parseToken = parseToken; + } + ParseStream.prototype.on = function (name, cb) { + this.handlers[name] = cb; + return this; + }; + ParseStream.prototype.trigger = function (event, arg) { + var h = this.handlers[event]; + if (typeof h === 'function') { + h(arg); + return true; + } + }; + ParseStream.prototype.start = function () { + this.trigger('start'); + var token; + while (!this.stopRequested && (token = this.tokens.shift())) { + if (this.trigger('token', token)) + continue; + if (token.type === 'tag' && + this.trigger("tag:" + token.name, token)) { + continue; } - this.name = name; - this.filter = filter$$1; - this.args = args; - return this; + var template = this.parseToken(token, this.tokens); + this.trigger('template', template); } + if (!this.stopRequested) + this.trigger('end'); + return this; + }; + ParseStream.prototype.stop = function () { + this.stopRequested = true; + return this; }; - function construct(str) { - var instance = create(_filterInstance); - return instance.parse(str); + return ParseStream; + }()); + + var default_1 = /** @class */ (function () { + function default_1(str, strictFilters) { + var match = matchValue(str); + assert(match, "illegal value string: " + str); + var initial = match[0]; + str = str.substr(match.index + match[0].length); + var filters = []; + while ((match = filter.exec(str))) { + filters.push([match[0].trim()]); + } + this.initial = initial; + this.filters = filters.map(function (str) { return new Filter(str, strictFilters); }); } - function register(name, filter$$1) { - filters[name] = filter$$1; + default_1.prototype.value = function (scope) { + return this.filters.reduce(function (prev, filter$$1) { return filter$$1.render(prev, scope); }, evalExp(this.initial, scope)); + }; + return default_1; + }()); + + var Output = /** @class */ (function (_super) { + __extends(Output, _super); + function Output(token, strictFilters) { + var _this = _super.call(this, token) || this; + _this.value = new default_1(token.value, strictFilters); + return _this; } - function clear() { - filters = {}; + Output.prototype.render = function (scope) { + return __awaiter(this, void 0, void 0, function () { + var html; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: return [4 /*yield*/, this.value.value(scope)]; + case 1: + html = _a.sent(); + return [2 /*return*/, stringify(html)]; + } + }); + }); + }; + return Output; + }(Template)); + + var default_1$1 = /** @class */ (function (_super) { + __extends(default_1, _super); + function default_1(token) { + var _this = _super.call(this, token) || this; + _this.str = token.value; + return _this; } - return { - construct: construct, register: register, clear: clear + default_1.prototype.render = function () { + return __awaiter(this, void 0, void 0, function () { + return __generator(this, function (_a) { + return [2 /*return*/, this.str]; + }); + }); }; - } + return default_1; + }(Template)); - function Parser (Tag, Filter) { - var ParseStream = /** @class */ (function () { - function ParseStream(tokens) { - this.tokens = tokens; - this.handlers = {}; - } - ParseStream.prototype.on = function (name, cb) { - this.handlers[name] = cb; - return this; - }; - ParseStream.prototype.trigger = function (event, arg) { - var h = this.handlers[event]; - if (typeof h === 'function') { - h(arg); - return true; - } - }; - ParseStream.prototype.start = function () { - this.trigger('start'); - var token; - while (!this.stopRequested && (token = this.tokens.shift())) { - if (this.trigger('token', token)) - continue; - if (token.type === 'tag' && - this.trigger("tag:" + token.name, token)) { - continue; - } - var template = parseToken(token, this.tokens); - this.trigger('template', template); - } - if (!this.stopRequested) - this.trigger('end'); - return this; - }; - ParseStream.prototype.stop = function () { - this.stopRequested = true; - return this; - }; - return ParseStream; - }()); - function parse(tokens) { + var Parser = /** @class */ (function () { + function Parser(liquid) { + this.liquid = liquid; + } + Parser.prototype.parse = function (tokens) { var token; var templates = []; while ((token = tokens.shift())) { - templates.push(parseToken(token, tokens)); + templates.push(this.parseToken(token, tokens)); } return templates; - } - function parseToken(token, tokens) { + }; + Parser.prototype.parseToken = function (token, remainTokens) { try { - var tpl = null; if (token.type === 'tag') { - tpl = parseTag(token, tokens); - } - else if (token.type === 'value') { - tpl = parseValue(token.value); + return new Tag(token, remainTokens, this.liquid); } - else { // token.type === 'html' - tpl = token; + if (token.type === 'output') { + return new Output(token, this.liquid.options.strict_filters); } - tpl.token = token; - return tpl; + return new default_1$1(token); } catch (e) { throw new ParseError(e, token); } - } - function parseTag(token, tokens) { - if (token.name === 'continue' || token.name === 'break') - return token; - return Tag.construct(token, tokens); - } - function parseValue(str) { - var match = matchValue(str); - assert(match, "illegal value string: " + str); - var initial = match[0]; - str = str.substr(match.index + match[0].length); - var filters = []; - while ((match = filter.exec(str))) { - filters.push([match[0].trim()]); - } - return { - type: 'value', - initial: initial, - filters: filters.map(function (str) { return Filter.construct(str); }) - }; - } - function parseStream(tokens) { - return new ParseStream(tokens); - } - return { - parse: parse, - parseTag: parseTag, - parseStream: parseStream, - parseValue: parseValue }; - } + Parser.prototype.parseStream = function (tokens) { + var _this = this; + return new ParseStream(tokens, function (token, tokens) { return _this.parseToken(token, tokens); }); + }; + return Parser; + }()); - /* - * Call functions in serial until someone resolved. - * @param {Array} iterable the array to iterate with. - * @param {Array} iteratee returns a new promise. + var re = new RegExp("(" + identifier.source + ")\\s*=([^]*)"); + var assign$1 = { + parse: function (token) { + var match = token.args.match(re); + assert(match, "illegal token " + token.raw); + this.key = match[1]; + this.value = match[2]; + }, + render: function (scope) { + var ctx = new AssignScope(); + ctx[this.key] = this.liquid.evalValue(this.value, scope); + scope.push(ctx); + return Promise.resolve(''); + } + }; + + /* + * 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). */ /* @@ -1119,654 +1248,725 @@ return ret.then(function () { return result; }); } - function For (liquid, Liquid) { - var RenderBreakError = Liquid.Types.RenderBreakError; - var re = new RegExp("^(" + identifier.source + ")\\s+in\\s+" + - ("(" + value.source + ")") + - ("(?:\\s+" + hash.source + ")*") + - "(?:\\s+(reversed))?" + - ("(?:\\s+" + hash.source + ")*$")); - liquid.registerTag('for', { parse: parse, render: render }); - function parse(tagToken, remainTokens) { + var re$1 = new RegExp("^(" + identifier.source + ")\\s+in\\s+" + + ("(" + value.source + ")") + + ("(?:\\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 _this = this; - var match = re.exec(tagToken.args); - assert(match, "illegal tag: " + tagToken.raw); + 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 For = { parse: parse, render: render }; + + var re$2 = new RegExp("(" + identifier.source + ")"); + var capture = { + parse: function (tagToken, remainTokens) { + var _this = this; + var match = tagToken.args.match(re$2); + assert(match, tagToken.args + " not valid identifier"); this.variable = match[1]; - this.collection = match[2]; - this.reversed = !!match[3]; this.templates = []; + var stream = this.liquid.parser.parseStream(remainTokens); + stream.on('tag:endcapture', function () { return stream.stop(); }) + .on('template', function (tpl) { return _this.templates.push(tpl); }) + .on('end', function () { + throw new Error("tag " + tagToken.raw + " not closed"); + }); + stream.start(); + }, + render: function (scope) { + return __awaiter(this, void 0, void 0, function () { + var html, ctx; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: return [4 /*yield*/, this.liquid.renderer.renderTemplates(this.templates, scope)]; + case 1: + html = _a.sent(); + ctx = new CaptureScope(); + ctx[this.variable] = html; + scope.push(ctx); + return [2 /*return*/]; + } + }); + }); + } + }; + + var Case = { + parse: function (tagToken, remainTokens) { + var _this = this; + this.cond = tagToken.args; + this.cases = []; + this.elseTemplates = []; + var p = []; + var stream = this.liquid.parser.parseStream(remainTokens) + .on('tag:when', function (token) { + _this.cases.push({ + val: token.args, + templates: p = [] + }); + }) + .on('tag:else', function () { return (p = _this.elseTemplates); }) + .on('tag:endcase', 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(); + }, + render: function (scope) { + for (var i = 0; i < this.cases.length; i++) { + var branch = this.cases[i]; + var val = evalExp(branch.val, scope); + var cond = evalExp(this.cond, scope); + if (val === cond) { + return this.liquid.renderer.renderTemplates(branch.templates, scope); + } + } + return this.liquid.renderer.renderTemplates(this.elseTemplates, scope); + } + }; + + var comment = { + parse: function (tagToken, remainTokens) { + var stream = this.liquid.parser.parseStream(remainTokens); + stream + .on('token', function (token) { + if (token.name === 'endcomment') + stream.stop(); + }) + .on('end', function () { + throw new Error("tag " + tagToken.raw + " not closed"); + }); + stream.start(); + } + }; + + var staticFileRE = /[^\s,]+/; + var withRE = new RegExp("with\\s+(" + value.source + ")"); + var include = { + parse: function (token) { + var match = staticFileRE.exec(token.args); + if (match) { + this.staticValue = match[0]; + } + match = value.exec(token.args); + if (match) { + this.value = match[0]; + } + match = withRE.exec(token.args); + if (match) { + this.with = match[1]; + } + }, + render: function (scope, hash$$1) { + return __awaiter(this, void 0, void 0, function () { + var filepath, template, originBlocks, originBlockMode, templates, html; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: + if (!scope.opts.dynamicPartials) return [3 /*break*/, 4]; + if (!quotedLine.exec(this.value)) return [3 /*break*/, 2]; + template = this.value.slice(1, -1); + return [4 /*yield*/, this.liquid.parseAndRender(template, scope.getAll(), scope.opts)]; + case 1: + filepath = _a.sent(); + return [3 /*break*/, 3]; + case 2: + filepath = evalValue(this.value, scope); + _a.label = 3; + case 3: return [3 /*break*/, 5]; + case 4: + filepath = this.staticValue; + _a.label = 5; + case 5: + assert(filepath, "cannot include with empty filename"); + originBlocks = scope.blocks; + originBlockMode = scope.blockMode; + scope.blocks = {}; + scope.blockMode = BlockMode$1.OUTPUT; + if (this.with) { + hash$$1[filepath] = evalValue(this.with, scope); + } + return [4 /*yield*/, this.liquid.getTemplate(filepath, scope.opts)]; + case 6: + templates = _a.sent(); + scope.push(hash$$1); + return [4 /*yield*/, this.liquid.renderer.renderTemplates(templates, scope)]; + case 7: + html = _a.sent(); + scope.pop(hash$$1); + scope.blocks = originBlocks; + scope.blockMode = originBlockMode; + return [2 /*return*/, html]; + } + }); + }); + } + }; + + var decrement = { + parse: function (token) { + var match = token.args.match(identifier); + assert(match, "illegal identifier " + token.args); + this.variable = match[0]; + }, + render: function (scope) { + var context = scope.findContextFor(this.variable, function (ctx) { + return !(ctx instanceof CaptureScope) && !(ctx instanceof AssignScope); + }); + if (!context) { + context = new DecrementScope(); + scope.unshift(context); + } + if (typeof context[this.variable] !== 'number') { + context[this.variable] = 0; + } + return --context[this.variable]; + } + }; + + var groupRE = new RegExp("^(?:(" + value.source + ")\\s*:\\s*)?(.*)$"); + var candidatesRE = new RegExp(value.source, 'g'); + var cycle = { + parse: function (tagToken) { + var match = groupRE.exec(tagToken.args); + assert(match, "illegal tag: " + tagToken.raw); + this.group = match[1] || ''; + var candidates = match[2]; + this.candidates = []; + while ((match = candidatesRE.exec(candidates))) { + this.candidates.push(match[0]); + } + assert(this.candidates.length, "empty candidates: " + tagToken.raw); + }, + 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 idx = groups[fingerprint]; + if (idx === undefined) { + idx = groups[fingerprint] = 0; + } + var candidate = this.candidates[idx]; + idx = (idx + 1) % this.candidates.length; + groups[fingerprint] = idx; + return evalValue(candidate, scope); + } + }; + + var If = { + parse: function (tagToken, remainTokens) { + var _this = this; + this.branches = []; this.elseTemplates = []; var p; - var stream = liquid.parser.parseStream(remainTokens) - .on('start', function () { return (p = _this.templates); }) + var stream = this.liquid.parser.parseStream(remainTokens) + .on('start', function () { return _this.branches.push({ + cond: tagToken.args, + templates: (p = []) + }); }) + .on('tag:elsif', function (token) { + _this.branches.push({ + cond: token.args, + templates: p = [] + }); + }) .on('tag:else', function () { return (p = _this.elseTemplates); }) - .on('tag:endfor', function () { return stream.stop(); }) + .on('tag:endif', 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(); + }, + render: function (scope) { + for (var _i = 0, _a = this.branches; _i < _a.length; _i++) { + var branch = _a[_i]; + var cond = evalExp(branch.cond, scope); + if (isTruthy(cond)) { + return this.liquid.renderer.renderTemplates(branch.templates, scope); + } + } + return this.liquid.renderer.renderTemplates(this.elseTemplates, scope); + } + }; + + var increment = { + parse: function (token) { + var match = token.args.match(identifier); + assert(match, "illegal identifier " + token.args); + this.variable = match[0]; + }, + render: function (scope) { + var context = scope.findContextFor(this.variable, function (ctx) { + return !(ctx instanceof CaptureScope) && !(ctx instanceof AssignScope); + }); + if (!context) { + context = new IncrementScope(); + scope.unshift(context); + } + if (typeof context[this.variable] !== 'number') { + context[this.variable] = 0; + } + var val = context[this.variable]; + context[this.variable]++; + return val; } - function render(scope, hash$$1) { + }; + + var staticFileRE$1 = /\S+/; + var layout = { + parse: function (token, remainTokens) { + var match = staticFileRE$1.exec(token.args); + if (match) { + this.staticLayout = match[0]; + } + match = value.exec(token.args); + if (match) { + this.layout = match[0]; + } + this.tpls = this.liquid.parser.parse(remainTokens); + }, + render: function (scope, hash$$1) { return __awaiter(this, void 0, void 0, function () { - var collection, offset, limit, contexts, html, finished; - var _this = this; + var layout, html, templates, partial; return __generator(this, function (_a) { switch (_a.label) { case 0: - collection = Liquid.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]]; }); - } + layout = scope.opts.dynamicPartials + ? evalValue(this.layout, scope) + : this.staticLayout; + assert(layout, "cannot apply layout with empty filename"); + // render the remaining tokens immediately + scope.blockMode = BlockMode$1.STORE; + return [4 /*yield*/, this.liquid.renderer.renderTemplates(this.tpls, scope)]; + case 1: + html = _a.sent(); + if (scope.blocks[''] === undefined) { + scope.blocks[''] = html; } - if (!isArray(collection) || !collection.length) { - return [2 /*return*/, liquid.renderer.renderTemplates(this.elseTemplates, scope)]; + return [4 /*yield*/, this.liquid.getTemplate(layout, scope.opts)]; + case 2: + templates = _a.sent(); + scope.push(hash$$1); + scope.blockMode = BlockMode$1.OUTPUT; + return [4 /*yield*/, this.liquid.renderer.renderTemplates(templates, scope)]; + case 3: + partial = _a.sent(); + scope.pop(hash$$1); + return [2 /*return*/, partial]; + } + }); + }); + } + }; + + var block = { + parse: function (token, remainTokens) { + var _this = this; + var match = /\w+/.exec(token.args); + this.block = match ? match[0] : ''; + this.tpls = []; + var stream = this.liquid.parser.parseStream(remainTokens) + .on('tag:endblock', function () { return stream.stop(); }) + .on('template', function (tpl) { return _this.tpls.push(tpl); }) + .on('end', function () { + throw new Error("tag " + token.raw + " not closed"); + }); + stream.start(); + }, + render: function (scope) { + return __awaiter(this, void 0, void 0, function () { + var childDefined, html, _a; + return __generator(this, function (_b) { + switch (_b.label) { + case 0: + childDefined = scope.blocks[this.block]; + if (!(childDefined !== undefined)) return [3 /*break*/, 1]; + _a = childDefined; + return [3 /*break*/, 3]; + case 1: return [4 /*yield*/, this.liquid.renderer.renderTemplates(this.tpls, scope)]; + case 2: + _a = _b.sent(); + _b.label = 3; + case 3: + html = _a; + if (scope.blockMode === BlockMode$1.STORE) { + scope.blocks[this.block] = html; + return [2 /*return*/, '']; } + return [2 /*return*/, html]; + } + }); + }); + } + }; + + var raw = { + parse: function (tagToken, remainTokens) { + var _this = this; + this.tokens = []; + var stream = this.liquid.parser.parseStream(remainTokens); + stream + .on('token', function (token) { + if (token.name === 'endraw') + stream.stop(); + else + _this.tokens.push(token); + }) + .on('end', function () { + throw new Error("tag " + tagToken.raw + " not closed"); + }); + stream.start(); + }, + render: function () { + return this.tokens.map(function (token) { return token.raw; }).join(''); + } + }; + + var re$3 = new RegExp("^(" + identifier.source + ")\\s+in\\s+" + + ("(" + value.source + ")") + + ("(?:\\s+" + hash.source + ")*$")); + var tablerow = { + parse: function (tagToken, remainTokens) { + var _this = this; + var match = re$3.exec(tagToken.args); + assert(match, "illegal tag: " + tagToken.raw); + this.variable = match[1]; + this.collection = match[2]; + this.templates = []; + var p; + var stream = this.liquid.parser.parseStream(remainTokens) + .on('start', function () { return (p = _this.templates); }) + .on('tag:endtablerow', 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(); + }, + render: function (scope, hash$$1) { + return __awaiter(this, void 0, void 0, function () { + var collection, offset, limit, cols, contexts, row, html; + var _this = this; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: + collection = evalExp(this.collection, 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) { + cols = hash$$1.cols || collection.length; + contexts = collection.map(function (item) { 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 [4 /*yield*/, mapSeries(contexts, function (context, idx) { return __awaiter(_this, void 0, void 0, function () { + var col, _a; return __generator(this, function (_b) { switch (_b.label) { case 0: - if (finished) - return [2 /*return*/]; + row = Math.floor(idx / cols) + 1; + col = (idx % cols) + 1; + if (col === 1) { + if (row !== 1) { + html += ''; + } + html += ""; + } + html += ""; scope.push(context); - _b.label = 1; - case 1: - _b.trys.push([1, 3, , 4]); _a = html; - return [4 /*yield*/, liquid.renderer.renderTemplates(this.templates, scope)]; - case 2: + return [4 /*yield*/, this.liquid.renderer.renderTemplates(this.templates, scope)]; + case 1: 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: + html += ''; scope.pop(context); - return [2 /*return*/]; + return [2 /*return*/, html]; } }); }); })]; case 1: _a.sent(); + if (row > 0) { + html += ''; + } return [2 /*return*/, html]; } }); }); } - } + }; - function Assign (liquid, Liquid) { - var re = new RegExp("(" + identifier.source + ")\\s*=([^]*)"); - var AssignScope = Liquid.Types.AssignScope; - liquid.registerTag('assign', { - parse: function (token) { - var match = token.args.match(re); - assert(match, "illegal token " + token.raw); - this.key = match[1]; - this.value = match[2]; - }, - render: function (scope) { - var ctx = create(AssignScope); - ctx[this.key] = liquid.evalValue(this.value, scope); - scope.push(ctx); - return Promise.resolve(''); - } - }); - } - - function Capture (liquid, Liquid) { - var re = new RegExp("(" + identifier.source + ")"); - var CaptureScope = Liquid.Types.CaptureScope; - liquid.registerTag('capture', { - parse: function (tagToken, remainTokens) { - var _this = this; - var match = tagToken.args.match(re); - assert(match, tagToken.args + " not valid identifier"); - this.variable = match[1]; - this.templates = []; - var stream = liquid.parser.parseStream(remainTokens); - stream.on('tag:endcapture', function (token) { return stream.stop(); }) - .on('template', function (tpl) { return _this.templates.push(tpl); }) - .on('end', function (x) { - throw new Error("tag " + tagToken.raw + " not closed"); - }); - stream.start(); - }, - render: function (scope, hash$$1) { - return __awaiter(this, void 0, void 0, function () { - var html, ctx; - return __generator(this, function (_a) { - switch (_a.label) { - case 0: return [4 /*yield*/, liquid.renderer.renderTemplates(this.templates, scope)]; - case 1: - html = _a.sent(); - ctx = create(CaptureScope); - ctx[this.variable] = html; - scope.push(ctx); - return [2 /*return*/]; - } - }); - }); - } - }); - } + var unless = { + parse: function (tagToken, remainTokens) { + var _this = this; + this.templates = []; + this.elseTemplates = []; + var p; + var stream = this.liquid.parser.parseStream(remainTokens) + .on('start', function () { + p = _this.templates; + _this.cond = tagToken.args; + }) + .on('tag:else', function () { return (p = _this.elseTemplates); }) + .on('tag:endunless', 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(); + }, + render: function (scope) { + var cond = evalExp(this.cond, scope); + return isFalsy(cond) + ? this.liquid.renderer.renderTemplates(this.templates, scope) + : this.liquid.renderer.renderTemplates(this.elseTemplates, scope); + } + }; - function Case (liquid, Liquid) { - liquid.registerTag('case', { - parse: function (tagToken, remainTokens) { - var _this = this; - this.cond = tagToken.args; - this.cases = []; - this.elseTemplates = []; - var p = []; - var stream = liquid.parser.parseStream(remainTokens) - .on('tag:when', function (token) { - _this.cases.push({ - val: token.args, - templates: p = [] - }); - }) - .on('tag:else', function () { return (p = _this.elseTemplates); }) - .on('tag:endcase', function (token) { return stream.stop(); }) - .on('template', function (tpl) { return p.push(tpl); }) - .on('end', function (x) { - throw new Error("tag " + tagToken.raw + " not closed"); + var Break = { + render: function () { + return __awaiter(this, void 0, void 0, function () { + return __generator(this, function (_a) { + throw new RenderBreakError('break'); }); - stream.start(); - }, - render: function (scope, hash) { - for (var i = 0; i < this.cases.length; i++) { - var branch = this.cases[i]; - var val = Liquid.evalExp(branch.val, scope); - var cond = Liquid.evalExp(this.cond, scope); - if (val === cond) { - return liquid.renderer.renderTemplates(branch.templates, scope); - } - } - return liquid.renderer.renderTemplates(this.elseTemplates, scope); - } - }); - } + }); + } + }; - function Comment (liquid) { - liquid.registerTag('comment', { - parse: function (tagToken, remainTokens) { - var stream = liquid.parser.parseStream(remainTokens); - stream - .on('token', function (token) { - if (token.name === 'endcomment') - stream.stop(); - }) - .on('end', function (x) { - throw new Error("tag " + tagToken.raw + " not closed"); + var Continue = { + render: function () { + return __awaiter(this, void 0, void 0, function () { + return __generator(this, function (_a) { + throw new RenderBreakError('continue'); }); - stream.start(); - } - }); - } + }); + } + }; - var staticFileRE = /[^\s,]+/; - function Include (liquid, Liquid) { - var withRE = new RegExp("with\\s+(" + value.source + ")"); - liquid.registerTag('include', { - parse: function (token) { - var match = staticFileRE.exec(token.args); - if (match) { - this.staticValue = match[0]; - } - match = value.exec(token.args); - if (match) { - this.value = match[0]; - } - match = withRE.exec(token.args); - if (match) { - this.with = match[1]; - } - }, - render: function (scope, hash$$1) { - return __awaiter(this, void 0, void 0, function () { - var filepath, template, originBlocks, originBlockMode, templates, html; - return __generator(this, function (_a) { - switch (_a.label) { - case 0: - if (!scope.opts.dynamicPartials) return [3 /*break*/, 4]; - if (!quotedLine.exec(this.value)) return [3 /*break*/, 2]; - template = this.value.slice(1, -1); - return [4 /*yield*/, liquid.parseAndRender(template, scope.getAll(), scope.opts)]; - case 1: - filepath = _a.sent(); - return [3 /*break*/, 3]; - case 2: - filepath = Liquid.evalValue(this.value, scope); - _a.label = 3; - case 3: return [3 /*break*/, 5]; - case 4: - filepath = this.staticValue; - _a.label = 5; - case 5: - assert(filepath, "cannot include with empty filename"); - originBlocks = scope.opts.blocks; - originBlockMode = scope.opts.blockMode; - scope.opts.blocks = {}; - scope.opts.blockMode = 'output'; - if (this.with) { - hash$$1[filepath] = Liquid.evalValue(this.with, scope); - } - return [4 /*yield*/, liquid.getTemplate(filepath, scope.opts.root)]; - case 6: - templates = _a.sent(); - scope.push(hash$$1); - return [4 /*yield*/, liquid.renderer.renderTemplates(templates, scope)]; - case 7: - html = _a.sent(); - scope.pop(hash$$1); - scope.opts.blocks = originBlocks; - scope.opts.blockMode = originBlockMode; - return [2 /*return*/, html]; - } - }); - }); - } - }); - } + 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 + }; - function Decrement (liquid, Liquid) { - var _a = Liquid.Types, CaptureScope = _a.CaptureScope, AssignScope = _a.AssignScope, DecrementScope = _a.DecrementScope; - liquid.registerTag('decrement', { - parse: function (token) { - var match = token.args.match(identifier); - assert(match, "illegal identifier " + token.args); - this.variable = match[0]; - }, - render: function (scope, hash$$1) { - var context = scope.findContextFor(this.variable, function (ctx) { - var proto = Object.getPrototypeOf(ctx); - return proto !== CaptureScope && proto !== AssignScope; - }); - if (!context) { - context = create(DecrementScope); - scope.unshift(context); - } - if (typeof context[this.variable] !== 'number') { - context[this.variable] = 0; - } - return --context[this.variable]; - } - }); - } + var escapeMap = { + '&': '&', + '<': '<', + '>': '>', + '"': '"', + "'": ''' + }; + var unescapeMap = { + '&': '&', + '<': '<', + '>': '>', + '"': '"', + ''': "'" + }; + function escape(str) { + return String(str).replace(/&|<|>|"|'/g, function (m) { return escapeMap[m]; }); + } + function unescape(str) { + return String(str).replace(/&(amp|lt|gt|#34|#39);/g, function (m) { return unescapeMap[m]; }); + } + 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, ''); } + }; - function Cycle (liquid, Liquid) { - var groupRE = new RegExp("^(?:(" + value.source + ")\\s*:\\s*)?(.*)$"); - var candidatesRE = new RegExp(value.source, 'g'); - liquid.registerTag('cycle', { - parse: function (tagToken, remainTokens) { - var match = groupRE.exec(tagToken.args); - assert(match, "illegal tag: " + tagToken.raw); - this.group = match[1] || ''; - var candidates = match[2]; - this.candidates = []; - while ((match = candidatesRE.exec(candidates))) { - this.candidates.push(match[0]); - } - assert(this.candidates.length, "empty candidates: " + tagToken.raw); - }, - render: function (scope, hash$$1) { - var group = Liquid.evalValue(this.group, scope); - var fingerprint = "cycle:" + group + ":" + this.candidates.join(','); - var groups = scope.opts.groups = scope.opts.groups || {}; - var idx = groups[fingerprint]; - if (idx === undefined) { - idx = groups[fingerprint] = 0; - } - var candidate = this.candidates[idx]; - idx = (idx + 1) % this.candidates.length; - groups[fingerprint] = idx; - return Liquid.evalValue(candidate, scope); - } - }); - } + 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(); }, + 'remove': function (v, arg) { return v.split(arg).join(''); }, + 'remove_first': function (v, l) { return v.replace(l, ''); }, + 'replace': function (v, pattern, replacement) { + return String(v).split(pattern).join(replacement); + }, + 'replace_first': function (v, arg1, arg2) { return String(v).replace(arg1, arg2); }, + 'rstrip': function (str) { return String(str).replace(/\s+$/, ''); }, + 'split': function (v, arg) { return String(v).split(arg); }, + 'strip': function (v) { return String(v).trim(); }, + 'strip_newlines': function (v) { return String(v).replace(/\n/g, ''); }, + 'truncate': function (v, l, 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(' '); + var ret = arr.slice(0, l).join(' '); + if (arr.length > l) + ret += o; + return ret; + } + }; - function If (liquid, Liquid) { - liquid.registerTag('if', { - parse: function (tagToken, remainTokens) { - var _this = this; - this.branches = []; - this.elseTemplates = []; - var p; - var stream = liquid.parser.parseStream(remainTokens) - .on('start', function () { return _this.branches.push({ - cond: tagToken.args, - templates: (p = []) - }); }) - .on('tag:elsif', function (token) { - _this.branches.push({ - cond: token.args, - templates: p = [] - }); - }) - .on('tag:else', function () { return (p = _this.elseTemplates); }) - .on('tag:endif', function (token) { return stream.stop(); }) - .on('template', function (tpl) { return p.push(tpl); }) - .on('end', function (x) { - throw new Error("tag " + tagToken.raw + " not closed"); - }); - stream.start(); - }, - render: function (scope, hash) { - for (var _i = 0, _a = this.branches; _i < _a.length; _i++) { - var branch = _a[_i]; - var cond = Liquid.evalExp(branch.cond, scope); - if (Liquid.isTruthy(cond)) { - return liquid.renderer.renderTemplates(branch.templates, scope); - } - } - return liquid.renderer.renderTemplates(this.elseTemplates, scope); - } - }); + var math = { + 'abs': function (v) { return Math.abs(v); }, + 'ceil': function (v) { return Math.ceil(v); }, + 'divided_by': function (v, arg) { return v / arg; }, + 'floor': function (v) { return Math.floor(v); }, + '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); + return Math.round(v * amp) / amp; + }, + 'plus': bindFixed(function (v, arg) { return Number(v) + Number(arg); }), + 'times': function (v, arg) { return v * arg; } + }; + function getFixed(v) { + var p = String(v).split('.'); + return (p.length > 1) ? p[1].length : 0; + } + function bindFixed(cb) { + return function (l, r) { + var f = Math.max(getFixed(l), getFixed(r)); + return cb(l, r).toFixed(f); + }; } - function Increment (liquid, Liquid) { - var _a = Liquid.Types, CaptureScope = _a.CaptureScope, AssignScope = _a.AssignScope, IncrementScope = _a.IncrementScope; - liquid.registerTag('increment', { - parse: function (token) { - var match = token.args.match(identifier); - assert(match, "illegal identifier " + token.args); - this.variable = match[0]; - }, - render: function (scope, hash$$1) { - var context = scope.findContextFor(this.variable, function (ctx) { - var proto = Object.getPrototypeOf(ctx); - return proto !== CaptureScope && proto !== AssignScope; - }); - if (!context) { - context = create(IncrementScope); - scope.unshift(context); - } - if (typeof context[this.variable] !== 'number') { - context[this.variable] = 0; - } - var val = context[this.variable]; - context[this.variable]++; - return val; - } - }); - } + var url = { + 'url_decode': function (x) { return x.split('+').map(decodeURIComponent).join(' '); }, + 'url_encode': function (x) { return x.split(' ').map(encodeURIComponent).join('+'); } + }; - /* - * blockMode: - * * "store": store rendered html into blocks - * * "output": output rendered html - */ - function Layout (liquid, Liquid) { - var staticFileRE = /\S+/; - liquid.registerTag('layout', { - parse: function (token, remainTokens) { - var match = staticFileRE.exec(token.args); - if (match) { - this.staticLayout = match[0]; - } - match = value.exec(token.args); - if (match) { - this.layout = match[0]; + var array = { + 'join': function (v, arg) { return v.join(arg === undefined ? ' ' : arg); }, + 'last': function (v) { return last(v); }, + 'first': function (v) { return v[0]; }, + 'map': function (arr, arg) { return arr.map(function (v) { return v[arg]; }); }, + 'reverse': function (v) { return v.reverse(); }, + 'sort': function (v, arg) { return v.sort(arg); }, + 'size': function (v) { return v.length; }, + 'slice': function (v, begin, length) { + if (length === undefined) + length = 1; + return v.slice(begin, begin + length); + }, + 'uniq': function (arr) { + var u = {}; + return (arr || []).filter(function (val) { + if (u.hasOwnProperty(val)) { + return false; } - this.tpls = liquid.parser.parse(remainTokens); - }, - render: function (scope, hash$$1) { - return __awaiter(this, void 0, void 0, function () { - var layout, html, templates, partial; - return __generator(this, function (_a) { - switch (_a.label) { - case 0: - layout = scope.opts.dynamicPartials - ? Liquid.evalValue(this.layout, scope) - : this.staticLayout; - assert(layout, "cannot apply layout with empty filename"); - // render the remaining tokens immediately - scope.opts.blockMode = 'store'; - return [4 /*yield*/, liquid.renderer.renderTemplates(this.tpls, scope)]; - case 1: - html = _a.sent(); - if (scope.opts.blocks[''] === undefined) { - scope.opts.blocks[''] = html; - } - return [4 /*yield*/, liquid.getTemplate(layout, scope.opts.root)]; - case 2: - templates = _a.sent(); - scope.push(hash$$1); - scope.opts.blockMode = 'output'; - return [4 /*yield*/, liquid.renderer.renderTemplates(templates, scope)]; - case 3: - partial = _a.sent(); - scope.pop(hash$$1); - return [2 /*return*/, partial]; - } - }); - }); - } - }); - liquid.registerTag('block', { - parse: function (token, remainTokens) { - var _this = this; - var match = /\w+/.exec(token.args); - this.block = match ? match[0] : ''; - this.tpls = []; - var stream = liquid.parser.parseStream(remainTokens) - .on('tag:endblock', function () { return stream.stop(); }) - .on('template', function (tpl) { return _this.tpls.push(tpl); }) - .on('end', function () { - throw new Error("tag " + token.raw + " not closed"); - }); - stream.start(); - }, - render: function (scope) { - return __awaiter(this, void 0, void 0, function () { - var childDefined, html, _a; - return __generator(this, function (_b) { - switch (_b.label) { - case 0: - childDefined = scope.opts.blocks[this.block]; - if (!(childDefined !== undefined)) return [3 /*break*/, 1]; - _a = childDefined; - return [3 /*break*/, 3]; - case 1: return [4 /*yield*/, liquid.renderer.renderTemplates(this.tpls, scope)]; - case 2: - _a = _b.sent(); - _b.label = 3; - case 3: - html = _a; - if (scope.opts.blockMode === 'store') { - scope.opts.blocks[this.block] = html; - return [2 /*return*/, '']; - } - return [2 /*return*/, html]; - } - }); - }); - } - }); - } - - function Raw (liquid) { - liquid.registerTag('raw', { - parse: function (tagToken, remainTokens) { - var _this = this; - this.tokens = []; - var stream = liquid.parser.parseStream(remainTokens); - stream - .on('token', function (token) { - if (token.name === 'endraw') - stream.stop(); - else - _this.tokens.push(token); - }) - .on('end', function () { - throw new Error("tag " + tagToken.raw + " not closed"); - }); - stream.start(); - }, - render: function (scope, hash) { - return this.tokens.map(function (token) { return token.raw; }).join(''); - } - }); - } - - function Tablerow (liquid, Liquid) { - var re = new RegExp("^(" + identifier.source + ")\\s+in\\s+" + - ("(" + value.source + ")") + - ("(?:\\s+" + hash.source + ")*$")); - liquid.registerTag('tablerow', { - parse: function (tagToken, remainTokens) { - var _this = this; - var match = re.exec(tagToken.args); - assert(match, "illegal tag: " + tagToken.raw); - this.variable = match[1]; - this.collection = match[2]; - this.templates = []; - var p; - var stream = liquid.parser.parseStream(remainTokens) - .on('start', function () { return (p = _this.templates); }) - .on('tag:endtablerow', function (token) { return stream.stop(); }) - .on('template', function (tpl) { return p.push(tpl); }) - .on('end', function () { - throw new Error("tag " + tagToken.raw + " not closed"); - }); - stream.start(); - }, - render: function (scope, hash$$1) { - return __awaiter(this, void 0, void 0, function () { - var collection, offset, limit, cols, contexts, row, html; - var _this = this; - return __generator(this, function (_a) { - switch (_a.label) { - case 0: - collection = Liquid.evalExp(this.collection, scope) || []; - offset = hash$$1.offset || 0; - limit = (hash$$1.limit === undefined) ? collection.length : hash$$1.limit; - collection = collection.slice(offset, offset + limit); - cols = hash$$1.cols || collection.length; - contexts = collection.map(function (item, i) { - var ctx = {}; - ctx[_this.variable] = item; - return ctx; - }); - html = ''; - return [4 /*yield*/, mapSeries(contexts, function (context, idx) { return __awaiter(_this, void 0, void 0, function () { - var col, _a; - return __generator(this, function (_b) { - switch (_b.label) { - case 0: - row = Math.floor(idx / cols) + 1; - col = (idx % cols) + 1; - if (col === 1) { - if (row !== 1) { - html += ''; - } - html += ""; - } - html += ""; - scope.push(context); - _a = html; - return [4 /*yield*/, liquid.renderer.renderTemplates(this.templates, scope)]; - case 1: - html = _a + _b.sent(); - html += ''; - scope.pop(context); - return [2 /*return*/, html]; - } - }); - }); })]; - case 1: - _a.sent(); - if (row > 0) { - html += ''; - } - return [2 /*return*/, html]; - } - }); - }); - } - }); - } - - function Unless (liquid, Liquid) { - liquid.registerTag('unless', { - parse: function (tagToken, remainTokens) { - var _this = this; - this.templates = []; - this.elseTemplates = []; - var p; - var stream = liquid.parser.parseStream(remainTokens) - .on('start', function (x) { - p = _this.templates; - _this.cond = tagToken.args; - }) - .on('tag:else', function () { return (p = _this.elseTemplates); }) - .on('tag:endunless', function (token) { return stream.stop(); }) - .on('template', function (tpl) { return p.push(tpl); }) - .on('end', function (x) { - throw new Error("tag " + tagToken.raw + " not closed"); - }); - stream.start(); - }, - render: function (scope, hash) { - var cond = Liquid.evalExp(this.cond, scope); - return Liquid.isFalsy(cond) - ? liquid.renderer.renderTemplates(this.templates, scope) - : liquid.renderer.renderTemplates(this.elseTemplates, scope); - } - }); - } - - function tags (engine, Liquid) { - Assign(engine, Liquid); - Capture(engine, Liquid); - Case(engine, Liquid); - Comment(engine, Liquid); - Cycle(engine, Liquid); - Decrement(engine, Liquid); - For(engine, Liquid); - If(engine, Liquid); - Include(engine, Liquid); - Increment(engine, Liquid); - Layout(engine, Liquid); - Raw(engine, Liquid); - Tablerow(engine, Liquid); - Unless(engine, Liquid); - } + u[val] = true; + return true; + }); + } + }; var monthNames = [ 'January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', @@ -1799,15 +1999,13 @@ } return num + d.getDate(); }, - // Startday is an integer of which day to start the week measuring from - // TODO: that comment was retarted. fix it. getWeekOfYear: function (d, startDay) { // Skip to startDay of this week var now = this.getDayOfYear(d) + (startDay - d.getDay()); // Find the first startDay of the year var jan1 = new Date(d.getFullYear(), 0, 1); var then = (7 - jan1.getDay() + startDay); - return _number.pad(Math.floor((now - then) / 7) + 1, 2); + return padStart(String(Math.floor((now - then) / 7) + 1), 2, '0'); }, isLeapYear: function (d) { var year = d.getFullYear(); @@ -1822,18 +2020,6 @@ return parseInt(d.getFullYear().toString().substring(0, 2), 10); } }; - var _number = { - pad: function (value, size, ch) { - if (!ch) - ch = '0'; - var result = value.toString(); - var pad = size - result.length; - while (pad-- > 0) { - result = ch + result; - } - return result; - } - }; var formatCodes = { a: function (d) { return dayNamesShort[d.getDay()]; @@ -1854,34 +2040,34 @@ return _date.century(d); }, d: function (d) { - return _number.pad(d.getDate(), 2); + return padStart(d.getDate(), 2, '0'); }, e: function (d) { - return _number.pad(d.getDate(), 2, ' '); + return padStart(d.getDate(), 2); }, H: function (d) { - return _number.pad(d.getHours(), 2); + return padStart(d.getHours(), 2, '0'); }, I: function (d) { - return _number.pad(d.getHours() % 12 || 12, 2); + return padStart(String(d.getHours() % 12 || 12), 2, '0'); }, j: function (d) { - return _number.pad(_date.getDayOfYear(d), 3); + return padStart(_date.getDayOfYear(d), 3, '0'); }, k: function (d) { - return _number.pad(d.getHours(), 2, ' '); + return padStart(d.getHours(), 2); }, l: function (d) { - return _number.pad(d.getHours() % 12 || 12, 2, ' '); + return padStart(String(d.getHours() % 12 || 12), 2); }, L: function (d) { - return _number.pad(d.getMilliseconds(), 3); + return padStart(d.getMilliseconds(), 3, '0'); }, m: function (d) { - return _number.pad(d.getMonth() + 1, 2); + return padStart(d.getMonth() + 1, 2, '0'); }, M: function (d) { - return _number.pad(d.getMinutes(), 2); + return padStart(d.getMinutes(), 2, '0'); }, p: function (d) { return (d.getHours() < 12 ? 'AM' : 'PM'); @@ -1896,7 +2082,7 @@ return Math.round(d.valueOf() / 1000); }, S: function (d) { - return _number.pad(d.getSeconds(), 2); + return padStart(d.getSeconds(), 2, '0'); }, u: function (d) { return d.getDay() || 7; @@ -1924,7 +2110,7 @@ }, z: function (d) { var tz = d.getTimezoneOffset() / 60 * 100; - return (tz > 0 ? '-' : '+') + _number.pad(Math.abs(tz), 4); + return (tz > 0 ? '-' : '+') + padStart(String(Math.abs(tz)), 4, '0'); }, '%': function () { return '%'; @@ -1952,26 +2138,7 @@ } } - var escapeMap = { - '&': '&', - '<': '<', - '>': '>', - '"': '"', - "'": ''' - }; - var unescapeMap = { - '&': '&', - '<': '<', - '>': '>', - '"': '"', - ''': "'" - }; - var filters = { - 'abs': function (v) { return Math.abs(v); }, - 'append': function (v, arg) { return v + arg; }, - 'capitalize': function (str) { return stringify$1(str).charAt(0).toUpperCase() + str.slice(1); }, - 'ceil': function (v) { return Math.ceil(v); }, - 'concat': function (v, arg) { return Array.prototype.concat.call(v, arg); }, + var date = { 'date': function (v, arg) { var date = v; if (v === 'now') { @@ -1981,142 +2148,40 @@ date = new Date(v); } return isValidDate(date) ? strftime(date, arg) : v; - }, - 'default': function (v, arg) { return isTruthy(v) ? v : arg; }, - 'divided_by': function (v, arg) { return v / arg; }, - 'downcase': function (v) { return v.toLowerCase(); }, - 'escape': escape, - 'escape_once': function (str) { return escape(unescape(str)); }, - 'first': function (v) { return v[0]; }, - 'floor': function (v) { return Math.floor(v); }, - 'join': function (v, arg) { return v.join(arg === undefined ? ' ' : arg); }, - 'last': function (v) { return last(v); }, - 'lstrip': function (v) { return stringify$1(v).replace(/^\s+/, ''); }, - 'map': function (arr, arg) { return arr.map(function (v) { return v[arg]; }); }, - 'minus': bindFixed(function (v, arg) { return v - arg; }), - 'modulo': bindFixed(function (v, arg) { return v % arg; }), - 'newline_to_br': function (v) { return v.replace(/\n/g, '
'); }, - 'plus': bindFixed(function (v, arg) { return Number(v) + Number(arg); }), - 'prepend': function (v, arg) { return arg + v; }, - 'remove': function (v, arg) { return v.split(arg).join(''); }, - 'remove_first': function (v, l) { return v.replace(l, ''); }, - 'replace': function (v, pattern, replacement) { - return stringify$1(v).split(pattern).join(replacement); - }, - 'replace_first': function (v, arg1, arg2) { return stringify$1(v).replace(arg1, arg2); }, - 'reverse': function (v) { return v.reverse(); }, - 'round': function (v, arg) { - var amp = Math.pow(10, arg || 0); - return Math.round(v * amp, arg) / amp; - }, - 'rstrip': function (str) { return stringify$1(str).replace(/\s+$/, ''); }, - 'size': function (v) { return v.length; }, - 'slice': function (v, begin, length) { - if (length === undefined) - length = 1; - return v.slice(begin, begin + length); - }, - 'sort': function (v, arg) { return v.sort(arg); }, - 'split': function (v, arg) { return stringify$1(v).split(arg); }, - 'strip': function (v) { return stringify$1(v).trim(); }, - 'strip_html': function (v) { return stringify$1(v).replace(/|||<.*?>/g, ''); }, - 'strip_newlines': function (v) { return stringify$1(v).replace(/\n/g, ''); }, - 'times': function (v, arg) { return v * arg; }, - 'truncate': function (v, l, o) { - v = stringify$1(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(' '); - var ret = arr.slice(0, l).join(' '); - if (arr.length > l) - ret += o; - return ret; - }, - 'uniq': function (arr) { - var u = {}; - return (arr || []).filter(function (val) { - if (u.hasOwnProperty(val)) { - return false; - } - u[val] = true; - return true; - }); - }, - 'upcase': function (str) { return stringify$1(str).toUpperCase(); }, - 'url_decode': function (x) { return x.split('+').map(decodeURIComponent).join(' '); }, - 'url_encode': function (x) { return x.split(' ').map(encodeURIComponent).join('+'); } + } }; - function escape(str) { - return stringify$1(str).replace(/&|<|>|"|'/g, function (m) { return escapeMap[m]; }); - } - function unescape(str) { - return stringify$1(str).replace(/&(amp|lt|gt|#34|#39);/g, function (m) { return unescapeMap[m]; }); - } - function getFixed(v) { - var p = (v + '').split('.'); - return (p.length > 1) ? p[1].length : 0; - } - function getMaxFixed(l, r) { - return Math.max(getFixed(l), getFixed(r)); - } - function stringify$1(obj) { - return obj + ''; - } - function bindFixed(cb) { - return function (l, r) { - var f = getMaxFixed(l, r); - return cb(l, r).toFixed(f); - }; - } function isValidDate(date) { return date instanceof Date && !isNaN(date.getTime()); - } - function registerAll(liquid, Liquid) { - return forOwn(filters, function (func, name) { return liquid.registerFilter(name, func); }); - } - registerAll.filters = filters; + } + + var obj = { + 'default': function (v, arg) { return isTruthy(v) ? v : arg; } + }; + + var builtinFilters = __assign({}, html, str, math, url, date, obj, array); var Liquid = /** @class */ (function () { - function Liquid(options) { - options = assign({ - root: ['.'], - cache: false, - extname: '', - dynamicPartials: true, - trim_tag_right: false, - trim_tag_left: false, - trim_value_right: false, - trim_value_left: false, - greedy: true, - strict_filters: false, - strict_variables: false - }, options); - options.root = normalizeStringArray(options.root); + function Liquid(opts) { + if (opts === void 0) { opts = {}; } + var _this = this; + var options = __assign({}, defaultOptions, normalize(opts)); if (options.cache) { this.cache = {}; } this.options = options; - this.tags = Tag(); - this.filters = Filter(options); - this.parser = Parser(this.tags, this.filters); - this.renderer = Render(); - tags(this, Liquid); - registerAll(this, Liquid); + this.parser = new Parser(this); + this.renderer = new Render(); + this.tokenizer = new Tokenizer(this.options); + forOwn(tags, function (conf, name) { return _this.registerTag(name, conf); }); + forOwn(builtinFilters, function (handler, name) { return _this.registerFilter(name, handler); }); } Liquid.prototype.parse = function (html, filepath) { - var tokens = parse(html, filepath, this.options); + var tokens = this.tokenizer.tokenize(html, filepath); return this.parser.parse(tokens); }; Liquid.prototype.render = function (tpl, ctx, opts) { - opts = assign({}, this.options, opts); - var scope = new Scope(ctx, opts); + var options = __assign({}, this.options, normalize(opts)); + var scope = new Scope(ctx, options); return this.renderer.renderTemplates(tpl, scope); }; Liquid.prototype.parseAndRender = function (html, ctx, opts) { @@ -2132,38 +2197,54 @@ }); }); }; - Liquid.prototype.getTemplate = function (file, root) { + Liquid.prototype.getTemplate = function (file, opts) { return __awaiter(this, void 0, void 0, function () { - var filepath; + var options, roots, paths, _i, paths_1, filepath, value, _a, err; var _this = this; - return __generator(this, function (_a) { - switch (_a.label) { - case 0: return [4 /*yield*/, resolve(file, root, this.options)]; + return __generator(this, function (_b) { + switch (_b.label) { + case 0: + options = normalize(opts); + roots = options.root ? options.root.concat(this.options.root) : this.options.root; + paths = roots.map(function (root) { return fs.resolve(root, file, _this.options.extname); }); + _i = 0, paths_1 = paths; + _b.label = 1; case 1: - filepath = _a.sent(); - return [2 /*return*/, this.respectCache(filepath, function () { return __awaiter(_this, void 0, void 0, function () { - var str; - return __generator(this, function (_a) { - switch (_a.label) { - case 0: return [4 /*yield*/, read(filepath)]; - case 1: - str = _a.sent(); - return [2 /*return*/, this.parse(str, filepath)]; - } - }); - }); })]; + if (!(_i < paths_1.length)) return [3 /*break*/, 5]; + filepath = paths_1[_i]; + return [4 /*yield*/, fs.exists(filepath)]; + case 2: + if (!(_b.sent())) + return [3 /*break*/, 4]; + if (this.options.cache && this.cache[filepath]) + return [2 /*return*/, this.cache[filepath]]; + _a = this.parse; + return [4 /*yield*/, fs.readFile(filepath)]; + case 3: + value = _a.apply(this, [_b.sent(), filepath]); + if (this.options.cache) + this.cache[filepath] = value; + return [2 /*return*/, value]; + case 4: + _i++; + return [3 /*break*/, 1]; + case 5: + err = new Error('ENOENT'); + err.message = "ENOENT: Failed to lookup \"" + file + "\" in \"" + roots + "\""; + err.code = 'ENOENT'; + throw err; } }); }); }; Liquid.prototype.renderFile = function (file, ctx, opts) { return __awaiter(this, void 0, void 0, function () { - var templates; + var options, templates; return __generator(this, function (_a) { switch (_a.label) { case 0: - opts = assign({}, opts); - return [4 /*yield*/, this.getTemplate(file, opts.root)]; + options = normalize(opts); + return [4 /*yield*/, this.getTemplate(file, options)]; case 1: templates = _a.sent(); return [2 /*return*/, this.render(templates, ctx, opts)]; @@ -2171,46 +2252,22 @@ }); }); }; - Liquid.prototype.respectCache = function (key, getter) { - return __awaiter(this, void 0, void 0, function () { - var cacheEnabled, value; - return __generator(this, function (_a) { - switch (_a.label) { - case 0: - cacheEnabled = this.options.cache; - if (cacheEnabled && this.cache[key]) { - return [2 /*return*/, this.cache[key]]; - } - return [4 /*yield*/, getter()]; - case 1: - value = _a.sent(); - if (cacheEnabled) { - this.cache[key] = value; - } - return [2 /*return*/, value]; - } - }); - }); - }; Liquid.prototype.evalValue = function (str, scope) { - var tpl = this.parser.parseValue(str.trim()); - return this.renderer.evalValue(tpl, scope); + return new default_1(str, this.options.strict_filters).value(scope); }; Liquid.prototype.registerFilter = function (name, filter) { - return this.filters.register(name, filter); + return Filter.register(name, filter); }; Liquid.prototype.registerTag = function (name, tag) { - return this.tags.register(name, tag); + return Tag.register(name, tag); }; Liquid.prototype.plugin = function (plugin) { return plugin.call(this, Liquid); }; - Liquid.prototype.express = function (opts) { - opts = opts || {}; + Liquid.prototype.express = function () { var self = this; return function (filePath, ctx, cb) { - assert(isArray(this.root) || isString(this.root), 'illegal views root, are you using express.js?'); - opts.root = this.root; + var opts = { root: this.root }; self.renderFile(filePath, ctx, opts).then(function (html) { return cb(null, html); }, cb); }; }; @@ -2219,25 +2276,9 @@ Liquid.isFalsy = isFalsy; Liquid.evalExp = evalExp; Liquid.evalValue = evalValue; - Liquid.Types = { - ParseError: ParseError, - TokenizationError: TokenizationError, - RenderBreakError: RenderBreakError, - AssertionError: AssertionError, - AssignScope: {}, - CaptureScope: {}, - IncrementScope: {}, - DecrementScope: {} - }; + Liquid.Types = Types; return Liquid; - }()); - function normalizeStringArray(value) { - if (isArray(value)) - return value; - if (isString(value)) - return [value]; - throw new TypeError('illegal root: ' + value); - } + }()); return Liquid; diff --git a/dist/liquid.js.map b/dist/liquid.js.map index d22da936fb..94146de62f 100644 --- a/dist/liquid.js.map +++ b/dist/liquid.js.map @@ -1 +1 @@ -{"version":3,"file":"liquid.js","sources":["../src/util/underscore.ts","../src/lexical.js","../src/util/error.ts","../src/util/assert.ts","../src/scope.ts","../src/template-browser.js","../src/whitespace-ctrl.js","../src/tokenizer.js","../src/operators.js","../src/syntax.js","../src/render.js","../src/tag.js","../src/filter.js","../src/parser.ts","../src/util/promise.js","../src/tags/for.js","../src/tags/assign.js","../src/tags/capture.js","../src/tags/case.js","../src/tags/comment.js","../src/tags/include.js","../src/tags/decrement.js","../src/tags/cycle.js","../src/tags/if.js","../src/tags/increment.js","../src/tags/layout.js","../src/tags/raw.js","../src/tags/tablerow.js","../src/tags/unless.js","../src/tags/index.js","../src/util/strftime.js","../src/filters.js","../src/index.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) {\n return toStr.call(value) === '[object String]'\n}\n\nexport function isFunction (value) {\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) {\n if (isNil(value)) return String(value)\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) {\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) {\n return Object.create(proto)\n}\n\nexport function isNil (value) {\n return value === null || value === undefined\n}\n\nexport function isArray (value) {\n // be compatible with IE 8\n return toStr.call(value) === '[object Array]'\n}\n\nexport function isError (value) {\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) {\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, ...srcs) {\n obj = isObject(obj) ? obj : {}\n srcs.forEach(src => binaryAssign(obj, src))\n return obj\n}\n\nfunction binaryAssign(target, src) {\n for(let key in src) if (src.hasOwnProperty(key)) target[key] = src[key]\n}\n\nexport function last (arr) {\n return arr[arr.length - 1]\n}\n\nexport function uniq (arr) {\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) {\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","// 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'\n\nfunction captureStack () {\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, this.constructor)\n }\n}\n\nabstract class LiquidError {\n input: string\n line: string\n file: string\n message: string\n name: string\n stack: string\n token: any\n originalError: any\n constructor(err, token) {\n this.input = token.input\n this.line = token.line\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.line)\n this.message = mkMessage(err.message, this.token)\n this.stack = 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)\nTokenizationError.prototype.constructor = TokenizationError\n\nexport class ParseError extends LiquidError {\n constructor(err, token) {\n super(err, token)\n _.assign(this, err)\n super.captureStackTrace(this)\n }\n}\nParseError.prototype = _.create(Error.prototype)\nParseError.prototype.constructor = ParseError\n\nexport class RenderError extends LiquidError {\n constructor(err, tpl) {\n super(err, tpl.token)\n _.assign(this, err)\n super.captureStackTrace(this)\n }\n}\nRenderError.prototype = _.create(Error.prototype)\nRenderError.prototype.constructor = RenderError\n\nexport class RenderBreakError {\n message: string\n constructor (message) {\n captureStack.call(this)\n this.message = message + ''\n }\n}\nRenderBreakError.prototype = _.create(Error.prototype)\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)\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(end).length, lineNumber)\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\n }\n return msg\n}\n\nfunction padStart (length, str) {\n str = String(str)\n const blank = Array(length - str.length).join(' ')\n return blank + str\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","import * as _ from './util/underscore'\nimport * as lexical from './lexical'\nimport assert from './util/assert'\n\ninterface ScopeOptions {\n dynamicPartials: boolean\n strict_variables: boolean\n strict_filters: boolean\n blocks: object\n root: Array\n}\n\nexport default class Scope {\n opts: ScopeOptions\n contexts: Array\n constructor (ctx = {}, opts?: any) {\n const defaultOptions: ScopeOptions = {\n dynamicPartials: true,\n strict_variables: false,\n strict_filters: false,\n blocks: {},\n root: []\n }\n this.opts = _.assign(defaultOptions, opts)\n this.contexts = [ctx || {}]\n }\n getAll () {\n return this.contexts.reduce((ctx, val) => _.assign(ctx, val), _.create(null))\n }\n get (path) {\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, v) {\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) {\n return this.contexts.unshift(ctx)\n }\n push (ctx) {\n return this.contexts.push(ctx)\n }\n pop (ctx) {\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, filter = (arg => 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","import { last, isArray } from './util/underscore'\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\nexport function resolve (filepath, root, options) {\n root = root || options.root\n if (isArray(root)) {\n root = root[0]\n }\n if (root.length && last(root) !== '/') {\n root += '/'\n }\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)) {\n return str\n }\n return origin + path + options.extname\n })\n}\n\nexport async function read (url) {\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)\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","import { assign } from './util/underscore'\n\nexport default function whiteSpaceCtrl (tokens, options) {\n options = assign({ greedy: true }, options)\n let inRaw = false\n\n tokens.forEach((token, i) => {\n if (shouldTrimLeft(token, inRaw, options)) {\n trimLeft(tokens[i - 1], options.greedy)\n }\n\n if (token.type === 'tag' && token.name === 'raw') inRaw = true\n if (token.type === 'tag' && token.name === 'endraw') inRaw = false\n\n if (shouldTrimRight(token, inRaw, options)) {\n trimRight(tokens[i + 1], options.greedy)\n }\n })\n}\n\nfunction shouldTrimLeft (token, inRaw, options) {\n if (inRaw) return false\n if (token.type === 'tag') return token.trim_left || options.trim_tag_left\n if (token.type === 'value') return token.trim_left || options.trim_value_left\n}\n\nfunction shouldTrimRight (token, inRaw, options) {\n if (inRaw) return false\n if (token.type === 'tag') return token.trim_right || options.trim_tag_right\n if (token.type === 'value') return token.trim_right || options.trim_value_right\n}\n\nfunction trimLeft (token, greedy) {\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, greedy) {\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 * as lexical from './lexical'\nimport { TokenizationError } from './util/error'\nimport * as _ from './util/underscore'\nimport assert from './util/assert'\nimport whiteSpaceCtrl from './whitespace-ctrl'\n\nexport { default as whiteSpaceCtrl } from './whitespace-ctrl'\n\nexport function parse (input, file, options) {\n assert(_.isString(input), 'illegal input')\n\n const rLiquid = /({%-?([\\s\\S]*?)-?%})|({{-?([\\s\\S]*?)-?}})/g\n let currIndent = 0\n const lineNumber = LineNumber(input)\n let lastMatchEnd = 0\n const tokens = []\n\n for (let match; (match = rLiquid.exec(input)); lastMatchEnd = rLiquid.lastIndex) {\n if (match.index > lastMatchEnd) {\n tokens.push(parseHTMLToken(lastMatchEnd, match.index))\n }\n tokens.push(match[1]\n ? parseTagToken(match[1], match[2].trim(), match.index)\n : parseValueToken(match[3], match[4].trim(), match.index))\n }\n if (input.length > lastMatchEnd) {\n tokens.push(parseHTMLToken(lastMatchEnd, input.length))\n }\n whiteSpaceCtrl(tokens, options)\n return tokens\n\n function parseTagToken (raw, value, pos) {\n const match = value.match(lexical.tagLine)\n const token = {\n type: 'tag',\n indent: currIndent,\n line: lineNumber.get(pos),\n trim_left: raw.slice(0, 3) === '{%-',\n trim_right: raw.slice(-3) === '-%}',\n raw,\n value,\n input,\n file\n }\n if (!match) {\n throw new TokenizationError(`illegal tag syntax`, token)\n }\n token.name = match[1]\n token.args = match[2]\n return token\n }\n\n function parseValueToken (raw, value, pos) {\n return {\n type: 'value',\n line: lineNumber.get(pos),\n trim_left: raw.slice(0, 3) === '{{-',\n trim_right: raw.slice(-3) === '-}}',\n raw,\n value,\n input,\n file\n }\n }\n\n function parseHTMLToken (begin, end) {\n const htmlFragment = input.slice(begin, end)\n currIndent = _.last((htmlFragment).split('\\n')).length\n\n return {\n type: 'html',\n raw: htmlFragment,\n value: htmlFragment\n }\n }\n}\n\nfunction LineNumber (html) {\n let parsedLinesCount = 0\n let lastMatchBegin = -1\n\n return {\n get: function (pos) {\n const lines = html.slice(lastMatchBegin + 1, pos).split('\\n')\n parsedLinesCount += lines.length - 1\n lastMatchBegin = pos\n return parsedLinesCount + 1\n }\n }\n}\n","export default function (isTruthy) {\n return {\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}\n","import Operators from './operators'\nimport * as lexical from './lexical'\nimport assert from './util/assert'\n\nconst operators = Operators(isTruthy)\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 { evalExp } from './syntax'\nimport { RenderBreakError, RenderError } from './util/error'\nimport { stringify, create } from './util/underscore'\nimport assert from './util/assert'\n\nconst render = {\n renderTemplates: async function (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 renderTemplate.call(this, tpl)\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 async function renderTemplate (template) {\n if (template.type === 'tag') {\n const partial = await this.renderTag(template, scope)\n return partial === undefined ? '' : partial\n }\n if (template.type === 'value') {\n return this.renderValue(template, scope)\n }\n return template.value\n }\n },\n\n renderTag: async function (template, scope) {\n if (template.name === 'continue') {\n throw new RenderBreakError('continue')\n }\n if (template.name === 'break') {\n throw new RenderBreakError('break')\n }\n return template.render(scope)\n },\n\n renderValue: async function (template, scope) {\n const partial = this.evalValue(template, scope)\n return partial === undefined ? '' : stringify(partial)\n },\n\n evalValue: function (template, scope) {\n assert(scope, 'unable to evalValue: scope undefined')\n return template.filters.reduce(\n (prev, filter) => filter.render(prev, scope),\n evalExp(template.initial, scope))\n }\n}\n\nexport default function () {\n const instance = create(render)\n return instance\n}\n","import { hashCapture } from './lexical'\nimport { create } from './util/underscore'\nimport { evalValue } from './syntax'\nimport assert from './util/assert'\n\nfunction hash (markup, scope) {\n const obj = {}\n let match\n hashCapture.lastIndex = 0\n while ((match = hashCapture.exec(markup))) {\n const k = match[1]\n const v = match[2]\n obj[k] = evalValue(v, scope)\n }\n return obj\n}\n\nexport default function () {\n let tagImpls = {}\n\n const _tagInstance = {\n render: async function (scope) {\n const obj = hash(this.token.args, scope)\n const impl = this.tagImpl\n if (typeof impl.render !== 'function') {\n return ''\n }\n return impl.render(scope, obj)\n },\n parse: function (token, tokens) {\n this.type = 'tag'\n this.token = token\n this.name = token.name\n\n const tagImpl = tagImpls[this.name]\n assert(tagImpl, `tag ${this.name} not found`)\n this.tagImpl = create(tagImpl)\n if (this.tagImpl.parse) {\n this.tagImpl.parse(token, tokens)\n }\n }\n }\n\n function register (name, tag) {\n tagImpls[name] = tag\n }\n\n function construct (token, tokens) {\n const instance = create(_tagInstance)\n instance.parse(token, tokens)\n return instance\n }\n\n function clear () {\n tagImpls = {}\n }\n\n return {\n construct,\n register,\n clear\n }\n}\n","import * as lexical from './lexical'\nimport { evalValue } from './syntax'\nimport assert from './util/assert'\nimport { assign, create } from './util/underscore'\n\nconst valueRE = new RegExp(`${lexical.value.source}`, 'g')\n\nexport default function (options) {\n options = assign({}, options)\n let filters = {}\n\n const _filterInstance = {\n render: function (output, scope) {\n const args = this.args.map(arg => evalValue(arg, scope))\n args.unshift(output)\n return this.filter.apply(null, args)\n },\n parse: function (str) {\n let match = lexical.filterLine.exec(str)\n assert(match, 'illegal filter: ' + str)\n\n const name = match[1]\n const argList = match[2] || ''\n const filter = filters[name]\n if (typeof filter !== 'function') {\n if (options.strict_filters) {\n throw new TypeError(`undefined filter: ${name}`)\n }\n this.name = name\n this.filter = x => x\n this.args = []\n return this\n }\n\n 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\n this.name = name\n this.filter = filter\n this.args = args\n\n return this\n }\n }\n\n function construct (str) {\n const instance = create(_filterInstance)\n return instance.parse(str)\n }\n\n function register (name, filter) {\n filters[name] = filter\n }\n\n function clear () {\n filters = {}\n }\n\n return {\n construct, register, clear\n }\n}\n","import * as lexical from './lexical'\nimport { ParseError } from './util/error'\nimport assert from './util/assert'\n\nexport default function (Tag, Filter) {\n class ParseStream {\n tokens: Array\n handlers: object\n stopRequested: boolean\n constructor (tokens) {\n this.tokens = tokens\n this.handlers = {}\n }\n on (name, cb) {\n this.handlers[name] = cb\n return this\n }\n trigger (event: string, arg?: any) {\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 = 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\n function parse (tokens) {\n let token\n const templates = []\n while ((token = tokens.shift())) {\n templates.push(parseToken(token, tokens))\n }\n return templates\n }\n\n function parseToken (token, tokens) {\n try {\n let tpl = null\n if (token.type === 'tag') {\n tpl = parseTag(token, tokens)\n } else if (token.type === 'value') {\n tpl = parseValue(token.value)\n } else { // token.type === 'html'\n tpl = token\n }\n tpl.token = token\n return tpl\n } catch (e) {\n throw new ParseError(e, token)\n }\n }\n\n function parseTag (token, tokens) {\n if (token.name === 'continue' || token.name === 'break') return token\n return Tag.construct(token, tokens)\n }\n\n function parseValue (str) {\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 return {\n type: 'value',\n initial: initial,\n filters: filters.map(str => Filter.construct(str))\n }\n }\n\n function parseStream (tokens) {\n return new ParseStream(tokens)\n }\n\n return {\n parse,\n parseTag,\n parseStream,\n parseValue\n }\n}\n","/*\n * Call functions in serial until someone resolved.\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 anySeries (iterable, iteratee) {\n let ret = Promise.reject(new Error('init'))\n iterable.forEach(function (item, idx) {\n ret = ret.catch(e => 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.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 '../util/promise'\nimport { isString, isObject, isArray } from '../util/underscore'\nimport assert from '../util/assert'\nimport { identifier, value, hash } from '../lexical'\n\nexport default function (liquid, Liquid) {\n const RenderBreakError = Liquid.Types.RenderBreakError\n const re = new RegExp(`^(${identifier.source})\\\\s+in\\\\s+` +\n `(${value.source})` +\n `(?:\\\\s+${hash.source})*` +\n `(?:\\\\s+(reversed))?` +\n `(?:\\\\s+${hash.source})*$`)\n\n liquid.registerTag('for', { parse, render })\n\n function 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 = 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 async function render (scope, hash) {\n let collection = Liquid.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 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 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}\n","import assert from '../util/assert'\nimport { identifier } from '../lexical'\nimport { create } from '../util/underscore'\n\nexport default function (liquid, Liquid) {\n const re = new RegExp(`(${identifier.source})\\\\s*=([^]*)`)\n const { AssignScope } = Liquid.Types\n\n liquid.registerTag('assign', {\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 = create(AssignScope)\n ctx[this.key] = liquid.evalValue(this.value, scope)\n scope.push(ctx)\n return Promise.resolve('')\n }\n })\n}\n","import assert from '../util/assert'\nimport { create } from '../util/underscore'\nimport { identifier } from '../lexical'\n\nexport default function (liquid, Liquid) {\n const re = new RegExp(`(${identifier.source})`)\n const { CaptureScope } = Liquid.Types\n\n liquid.registerTag('capture', {\n parse: function (tagToken, remainTokens) {\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 = liquid.parser.parseStream(remainTokens)\n stream.on('tag:endcapture', token => stream.stop())\n .on('template', tpl => this.templates.push(tpl))\n .on('end', x => {\n throw new Error(`tag ${tagToken.raw} not closed`)\n })\n stream.start()\n },\n render: async function (scope, hash) {\n const html = await liquid.renderer.renderTemplates(this.templates, scope)\n const ctx = create(CaptureScope)\n ctx[this.variable] = html\n scope.push(ctx)\n }\n })\n}\n","export default function (liquid, Liquid) {\n liquid.registerTag('case', {\n\n parse: function (tagToken, remainTokens) {\n this.cond = tagToken.args\n this.cases = []\n this.elseTemplates = []\n\n let p = []\n const stream = 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', token => stream.stop())\n .on('template', tpl => p.push(tpl))\n .on('end', x => {\n throw new Error(`tag ${tagToken.raw} not closed`)\n })\n\n stream.start()\n },\n\n render: function (scope, hash) {\n for (let i = 0; i < this.cases.length; i++) {\n const branch = this.cases[i]\n const val = Liquid.evalExp(branch.val, scope)\n const cond = Liquid.evalExp(this.cond, scope)\n if (val === cond) {\n return liquid.renderer.renderTemplates(branch.templates, scope)\n }\n }\n return liquid.renderer.renderTemplates(this.elseTemplates, scope)\n }\n })\n}\n","export default function (liquid) {\n liquid.registerTag('comment', {\n parse: function (tagToken, remainTokens) {\n const stream = liquid.parser.parseStream(remainTokens)\n stream\n .on('token', token => {\n if (token.name === 'endcomment') stream.stop()\n })\n .on('end', x => {\n throw new Error(`tag ${tagToken.raw} not closed`)\n })\n stream.start()\n }\n })\n}\n","import assert from '../util/assert'\nimport { value, quotedLine } from '../lexical'\n\nconst staticFileRE = /[^\\s,]+/\n\nexport default function (liquid, Liquid) {\n const withRE = new RegExp(`with\\\\s+(${value.source})`)\n\n liquid.registerTag('include', {\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 liquid.parseAndRender(template, scope.getAll(), scope.opts)\n } else {\n filepath = Liquid.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.opts.blocks\n const originBlockMode = scope.opts.blockMode\n\n scope.opts.blocks = {}\n scope.opts.blockMode = 'output'\n if (this.with) {\n hash[filepath] = Liquid.evalValue(this.with, scope)\n }\n const templates = await liquid.getTemplate(filepath, scope.opts.root)\n scope.push(hash)\n const html = await liquid.renderer.renderTemplates(templates, scope)\n scope.pop(hash)\n scope.opts.blocks = originBlocks\n scope.opts.blockMode = originBlockMode\n return html\n }\n })\n}\n","import { create } from '../util/underscore'\nimport assert from '../util/assert'\nimport { identifier } from '../lexical'\n\nexport default function (liquid, Liquid) {\n const { CaptureScope, AssignScope, DecrementScope } = Liquid.Types\n\n liquid.registerTag('decrement', {\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, hash) {\n let context = scope.findContextFor(\n this.variable,\n ctx => {\n const proto = Object.getPrototypeOf(ctx)\n return proto !== CaptureScope && proto !== AssignScope\n }\n )\n if (!context) {\n context = create(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}\n","import assert from '../util/assert'\nimport { value as rValue } from '../lexical'\n\nexport default function (liquid, Liquid) {\n const groupRE = new RegExp(`^(?:(${rValue.source})\\\\s*:\\\\s*)?(.*)$`)\n const candidatesRE = new RegExp(rValue.source, 'g')\n\n liquid.registerTag('cycle', {\n\n parse: function (tagToken, remainTokens) {\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, hash) {\n const group = Liquid.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 Liquid.evalValue(candidate, scope)\n }\n })\n}\n","export default function (liquid, Liquid) {\n liquid.registerTag('if', {\n\n parse: function (tagToken, remainTokens) {\n this.branches = []\n this.elseTemplates = []\n\n let p\n const stream = 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', token => stream.stop())\n .on('template', tpl => p.push(tpl))\n .on('end', x => {\n throw new Error(`tag ${tagToken.raw} not closed`)\n })\n\n stream.start()\n },\n\n render: function (scope, hash) {\n for (const branch of this.branches) {\n const cond = Liquid.evalExp(branch.cond, scope)\n if (Liquid.isTruthy(cond)) {\n return liquid.renderer.renderTemplates(branch.templates, scope)\n }\n }\n return liquid.renderer.renderTemplates(this.elseTemplates, scope)\n }\n })\n}\n","import assert from '../util/assert'\nimport { create } from '../util/underscore'\nimport { identifier } from '../lexical'\n\nexport default function (liquid, Liquid) {\n const { CaptureScope, AssignScope, IncrementScope } = Liquid.Types\n\n liquid.registerTag('increment', {\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, hash) {\n let context = scope.findContextFor(\n this.variable,\n ctx => {\n const proto = Object.getPrototypeOf(ctx)\n return proto !== CaptureScope && proto !== AssignScope\n }\n )\n if (!context) {\n context = create(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}\n","import assert from '../util/assert'\nimport { value as rValue } from '../lexical'\n\n/*\n * blockMode:\n * * \"store\": store rendered html into blocks\n * * \"output\": output rendered html\n */\n\nexport default function (liquid, Liquid) {\n const staticFileRE = /\\S+/\n\n liquid.registerTag('layout', {\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 = liquid.parser.parse(remainTokens)\n },\n render: async function (scope, hash) {\n const layout = scope.opts.dynamicPartials\n ? Liquid.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.opts.blockMode = 'store'\n const html = await liquid.renderer.renderTemplates(this.tpls, scope)\n if (scope.opts.blocks[''] === undefined) {\n scope.opts.blocks[''] = html\n }\n const templates = await liquid.getTemplate(layout, scope.opts.root)\n scope.push(hash)\n scope.opts.blockMode = 'output'\n const partial = await liquid.renderer.renderTemplates(templates, scope)\n scope.pop(hash)\n return partial\n }\n })\n\n liquid.registerTag('block', {\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 = 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.opts.blocks[this.block]\n const html = childDefined !== undefined\n ? childDefined\n : await liquid.renderer.renderTemplates(this.tpls, scope)\n\n if (scope.opts.blockMode === 'store') {\n scope.opts.blocks[this.block] = html\n return ''\n }\n return html\n }\n })\n}\n","export default function (liquid) {\n liquid.registerTag('raw', {\n parse: function (tagToken, remainTokens) {\n this.tokens = []\n\n const stream = 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 (scope, hash) {\n return this.tokens.map(token => token.raw).join('')\n }\n })\n}\n","import { mapSeries } from '../util/promise'\nimport assert from '../util/assert'\nimport { identifier, value, hash } from '../lexical'\n\nexport default function (liquid, Liquid) {\n const re = new RegExp(`^(${identifier.source})\\\\s+in\\\\s+` +\n `(${value.source})` +\n `(?:\\\\s+${hash.source})*$`)\n\n liquid.registerTag('tablerow', {\n\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 = liquid.parser.parseStream(remainTokens)\n .on('start', () => (p = this.templates))\n .on('tag:endtablerow', token => 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 = Liquid.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, i) => {\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 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}\n","export default function (liquid, Liquid) {\n liquid.registerTag('unless', {\n parse: function (tagToken, remainTokens) {\n this.templates = []\n this.elseTemplates = []\n let p\n const stream = liquid.parser.parseStream(remainTokens)\n .on('start', x => {\n p = this.templates\n this.cond = tagToken.args\n })\n .on('tag:else', () => (p = this.elseTemplates))\n .on('tag:endunless', token => stream.stop())\n .on('template', tpl => p.push(tpl))\n .on('end', x => {\n throw new Error(`tag ${tagToken.raw} not closed`)\n })\n\n stream.start()\n },\n\n render: function (scope, hash) {\n const cond = Liquid.evalExp(this.cond, scope)\n return Liquid.isFalsy(cond)\n ? liquid.renderer.renderTemplates(this.templates, scope)\n : liquid.renderer.renderTemplates(this.elseTemplates, scope)\n }\n })\n}\n","import For from './for'\nimport Assign from './assign'\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 Raw from './raw'\nimport Tablerow from './tablerow'\nimport Unless from './unless'\n\nexport default function (engine, Liquid) {\n Assign(engine, Liquid)\n Capture(engine, Liquid)\n Case(engine, Liquid)\n Comment(engine, Liquid)\n Cycle(engine, Liquid)\n Decrement(engine, Liquid)\n For(engine, Liquid)\n If(engine, Liquid)\n Include(engine, Liquid)\n Increment(engine, Liquid)\n Layout(engine, Liquid)\n Raw(engine, Liquid)\n Tablerow(engine, Liquid)\n Unless(engine, Liquid)\n}\n","const 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 // Startday is an integer of which day to start the week measuring from\n // TODO: that comment was retarted. fix it.\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 _number.pad(Math.floor((now - then) / 7) + 1, 2)\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 _number = {\n pad: function (value, size, ch) {\n if (!ch) ch = '0'\n let result = value.toString()\n let pad = size - result.length\n\n while (pad-- > 0) {\n result = ch + result\n }\n\n return result\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 _number.pad(d.getDate(), 2)\n },\n e: function (d) {\n return _number.pad(d.getDate(), 2, ' ')\n },\n H: function (d) {\n return _number.pad(d.getHours(), 2)\n },\n I: function (d) {\n return _number.pad(d.getHours() % 12 || 12, 2)\n },\n j: function (d) {\n return _number.pad(_date.getDayOfYear(d), 3)\n },\n k: function (d) {\n return _number.pad(d.getHours(), 2, ' ')\n },\n l: function (d) {\n return _number.pad(d.getHours() % 12 || 12, 2, ' ')\n },\n L: function (d) {\n return _number.pad(d.getMilliseconds(), 3)\n },\n m: function (d) {\n return _number.pad(d.getMonth() + 1, 2)\n },\n M: function (d) {\n return _number.pad(d.getMinutes(), 2)\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 _number.pad(d.getSeconds(), 2)\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 ? '-' : '+') + _number.pad(Math.abs(tz), 4)\n },\n '%': function () {\n return '%'\n }\n}\nformatCodes.h = formatCodes.b\nformatCodes.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 './util/strftime'\nimport * as _ from './util/underscore'\nimport { isTruthy } from './syntax'\n\nconst escapeMap = {\n '&': '&',\n '<': '<',\n '>': '>',\n '\"': '"',\n \"'\": '''\n}\nconst unescapeMap = {\n '&': '&',\n '<': '<',\n '>': '>',\n '"': '\"',\n ''': \"'\"\n}\n\nconst filters = {\n 'abs': v => Math.abs(v),\n 'append': (v, arg) => v + arg,\n 'capitalize': str => stringify(str).charAt(0).toUpperCase() + str.slice(1),\n 'ceil': v => Math.ceil(v),\n 'concat': (v, arg) => Array.prototype.concat.call(v, arg),\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 'default': (v, arg) => isTruthy(v) ? v : arg,\n 'divided_by': (v, arg) => v / arg,\n 'downcase': v => v.toLowerCase(),\n 'escape': escape,\n\n 'escape_once': str => escape(unescape(str)),\n 'first': v => v[0],\n 'floor': v => Math.floor(v),\n 'join': (v, arg) => v.join(arg === undefined ? ' ' : arg),\n 'last': v => _.last(v),\n 'lstrip': v => stringify(v).replace(/^\\s+/, ''),\n 'map': (arr, arg) => arr.map(v => v[arg]),\n 'minus': bindFixed((v, arg) => v - arg),\n 'modulo': bindFixed((v, arg) => v % arg),\n 'newline_to_br': v => v.replace(/\\n/g, '
'),\n 'plus': bindFixed((v, arg) => Number(v) + Number(arg)),\n 'prepend': (v, arg) => arg + v,\n 'remove': (v, arg) => v.split(arg).join(''),\n 'remove_first': (v, l) => v.replace(l, ''),\n 'replace': (v, pattern, replacement) =>\n stringify(v).split(pattern).join(replacement),\n 'replace_first': (v, arg1, arg2) => stringify(v).replace(arg1, arg2),\n 'reverse': v => v.reverse(),\n 'round': (v, arg) => {\n const amp = Math.pow(10, arg || 0)\n return Math.round(v * amp, arg) / amp\n },\n 'rstrip': str => stringify(str).replace(/\\s+$/, ''),\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 'sort': (v, arg) => v.sort(arg),\n 'split': (v, arg) => stringify(v).split(arg),\n 'strip': (v) => stringify(v).trim(),\n 'strip_html': v => stringify(v).replace(/|||<.*?>/g, ''),\n 'strip_newlines': v => stringify(v).replace(/\\n/g, ''),\n 'times': (v, arg) => v * arg,\n 'truncate': (v, l, o) => {\n v = stringify(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 '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 'upcase': str => stringify(str).toUpperCase(),\n 'url_decode': x => x.split('+').map(decodeURIComponent).join(' '),\n 'url_encode': x => x.split(' ').map(encodeURIComponent).join('+')\n}\n\nfunction escape (str) {\n return stringify(str).replace(/&|<|>|\"|'/g, m => escapeMap[m])\n}\n\nfunction unescape (str) {\n return stringify(str).replace(/&(amp|lt|gt|#34|#39);/g, m => unescapeMap[m])\n}\n\nfunction getFixed (v) {\n const p = (v + '').split('.')\n return (p.length > 1) ? p[1].length : 0\n}\n\nfunction getMaxFixed (l, r) {\n return Math.max(getFixed(l), getFixed(r))\n}\n\nfunction stringify (obj) {\n return obj + ''\n}\n\nfunction bindFixed (cb) {\n return (l, r) => {\n const f = getMaxFixed(l, r)\n return cb(l, r).toFixed(f)\n }\n}\n\nfunction isValidDate (date) {\n return date instanceof Date && !isNaN(date.getTime())\n}\n\nexport default function registerAll (liquid, Liquid) {\n return _.forOwn(filters, (func, name) => liquid.registerFilter(name, func))\n}\n\nregisterAll.filters = filters\n","import Scope from './scope'\nimport * as template from './template'\nimport * as _ from './util/underscore'\nimport assert from './util/assert'\nimport * as tokenizer from './tokenizer'\nimport Render from './render'\nimport Tag from './tag'\nimport Filter from './filter'\nimport Parser from './parser'\nimport { isTruthy, isFalsy, evalExp, evalValue } from './syntax'\nimport { ParseError, TokenizationError, RenderBreakError, AssertionError } from './util/error'\nimport tags from './tags/index'\nimport filters from './filters'\n\nexport default class Liquid {\n private cache: object\n private options: any\n private tags: any\n private filters: any\n private parser: any\n private renderer: any\n\n constructor (options) {\n options = _.assign({\n root: ['.'],\n cache: false,\n extname: '',\n dynamicPartials: true,\n trim_tag_right: false,\n trim_tag_left: false,\n trim_value_right: false,\n trim_value_left: false,\n greedy: true,\n strict_filters: false,\n strict_variables: false\n }, options)\n options.root = normalizeStringArray(options.root)\n\n if (options.cache) {\n this.cache = {}\n }\n this.options = options\n this.tags = Tag()\n this.filters = Filter(options)\n this.parser = Parser(this.tags, this.filters)\n this.renderer = Render()\n\n tags(this, Liquid)\n filters(this, Liquid)\n }\n parse(html: string, filepath?: string) {\n const tokens = tokenizer.parse(html, filepath, this.options)\n return this.parser.parse(tokens)\n }\n render(tpl: string, ctx: any, opts: any) {\n opts = _.assign({}, this.options, opts)\n const scope = new Scope(ctx, opts)\n return this.renderer.renderTemplates(tpl, scope)\n }\n async parseAndRender(html, ctx, opts) {\n const tpl = await this.parse(html)\n return this.render(tpl, ctx, opts)\n }\n async getTemplate(file, root) {\n const filepath = await template.resolve(file, root, this.options)\n return this.respectCache(filepath, async () => {\n const str = await template.read(filepath)\n return this.parse(str, filepath)\n })\n }\n async renderFile(file, ctx, opts) {\n opts = _.assign({}, opts)\n const templates = await this.getTemplate(file, opts.root)\n return this.render(templates, ctx, opts)\n }\n async respectCache (key, getter) {\n const cacheEnabled = this.options.cache\n if (cacheEnabled && this.cache[key]) {\n return this.cache[key]\n }\n const value = await getter()\n if (cacheEnabled) {\n this.cache[key] = value\n }\n return value\n }\n evalValue (str, scope) {\n const tpl = this.parser.parseValue(str.trim())\n return this.renderer.evalValue(tpl, scope)\n }\n registerFilter (name, filter) {\n return this.filters.register(name, filter)\n }\n registerTag (name, tag) {\n return this.tags.register(name, tag)\n }\n plugin (plugin) {\n return plugin.call(this, Liquid)\n }\n express (opts) {\n opts = opts || {}\n const self = this\n return function (filePath, ctx, cb) {\n assert(_.isArray(this.root) || _.isString(this.root),\n 'illegal views root, are you using express.js?')\n 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 = {\n ParseError,\n TokenizationError,\n RenderBreakError,\n AssertionError,\n AssignScope: {},\n CaptureScope: {},\n IncrementScope: {},\n DecrementScope: {}\n }\n}\n\nfunction normalizeStringArray (value) {\n if (_.isArray(value)) return value\n if (_.isString(value)) return [value]\n throw new TypeError('illegal root: ' + value)\n}\n"],"names":["range","tslib_1.__extends","_.create","_.assign","_\r\n .range","_.last","value","_.isObject","filter","_.isNil","_.isFunction","lexical.isInteger","_.isArray","_.isString","last","lexical.tagLine","operators","lexical.operators","lexical.quoteBalanced","lexical.rangeLine","lexical.isLiteral","lexical.parseLiteral","lexical.isVariable","hash","lexical.value","lexical.filterLine","lexical.matchValue","lexical.filter","rValue","stringify","_.forOwn","filters","tokenizer.parse","template.resolve","template.read"],"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.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 line: 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.line = token.line\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.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\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","import * 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 // eslint-disable-line\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 // eslint-disable-line\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 // eslint-disable-line\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 // eslint-disable-line\n /** ``trim_value_right` is used to strip blank characters (including ` `, `\\t`, and `\\r`) from the right of values (`{{ }}`) until `\\n` (inclusive). Defaults to `false`. */\n trim_value_right?: boolean // eslint-disable-line\n /** `trim_value_left` is similar to `trim_value_right`, whereas the `\\n` is exclusive. Defaults to `false`. See Whitespace Control for details. */\n trim_value_left?: boolean // eslint-disable-line\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 const defaultOptions: NormalizedOptions = {\n root: ['.'],\n cache: false,\n extname: '',\n dynamicPartials: true,\n trim_tag_right: false,\n trim_tag_left: false,\n trim_value_right: false,\n trim_value_left: false,\n greedy: true,\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\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 { NormalizedOptions, defaultOptions } from '../liquid-options'\nimport BlockMode from './block-mode'\n\nexport default class Scope {\n opts: NormalizedOptions\n contexts: Array\n blocks: object = {}\n blockMode: BlockMode = BlockMode.OUTPUT\n constructor (ctx: object = {}, opts: NormalizedOptions = defaultOptions) {\n this.opts = { ...defaultOptions, ...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 { LiquidOptions } from 'src/liquid-options'\n\nexport default function whiteSpaceCtrl (tokens: Token[], options: LiquidOptions) {\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_value_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_value_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 raw: string\n input: string\n file: string\n value: string\n constructor (raw, pos, input, file, line) {\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, pos, input, file, line) {\n super(raw, pos, input, file, line)\n this.trimLeft = raw[2] === '-'\n this.trimRight = raw[raw.length - 3] === '-'\n this.value = raw.slice(this.trimLeft ? 3 : 2, this.trimRight ? -3 : -2).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, pos, input, file, line) {\n super(raw, 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, pos, input, file, line) {\n super(raw, 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 OutputToken from './output-token'\nimport { LiquidOptions, defaultOptions } from 'src/liquid-options'\n\nenum ParseState { HTML, OUTPUT, TAG }\n\nexport default class Tokenizer {\n options: LiquidOptions\n constructor (options: LiquidOptions = defaultOptions) {\n this.options = options\n }\n tokenize (input: string, file?: string) {\n const tokens = []\n let p = 0\n let line = 1\n let state = ParseState.HTML\n let buffer = ''\n let bufferBegin = 0\n\n while (p < input.length) {\n if (input[p] === '\\n') line++\n const bin = input.substr(p, 2)\n if (state === ParseState.HTML) {\n if (bin === '{{' || bin === '{%') {\n if (buffer) tokens.push(new HTMLToken(buffer, bufferBegin, input, file, line))\n buffer = bin\n bufferBegin = p\n p += 2\n state = bin === '{{' ? ParseState.OUTPUT : ParseState.TAG\n continue\n }\n } else if (state === ParseState.OUTPUT && bin === '}}') {\n buffer += '}}'\n tokens.push(new OutputToken(buffer, bufferBegin, input, file, line))\n p += 2\n buffer = ''\n bufferBegin = p\n state = ParseState.HTML\n continue\n } else if (bin === '%}') {\n buffer += '%}'\n tokens.push(new TagToken(buffer, bufferBegin, input, file, line))\n p += 2\n buffer = ''\n bufferBegin = p\n state = ParseState.HTML\n continue\n }\n buffer += input[p++]\n }\n if (buffer) tokens.push(new HTMLToken(buffer, bufferBegin, 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, NormalizedOptions, defaultOptions, normalize } from './liquid-options'\n\nexport default class Liquid {\n public options: NormalizedOptions\n private cache: object\n private parser: Parser\n private renderer: Render\n private tokenizer: Tokenizer\n\n constructor (opts: LiquidOptions = {}) {\n const options = { ...defaultOptions, ...normalize(opts) }\n if (options.cache) {\n this.cache = {}\n }\n this.options = options\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 diff --git a/dist/liquid.min.js b/dist/liquid.min.js index 5a19dd582b..d9d7bd7e0a 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)}function B(o,s,u,a){return new(u||(u=Promise))(function(t,e){function r(t){try{i(a.next(t))}catch(t){e(t)}}function n(t){try{i(a.throw(t))}catch(t){e(t)}}function i(e){e.done?t(e.value):new u(function(t){t(e.value)}).then(r,n)}i((a=a.apply(o,s||[])).next())})}function U(r,n){var i,o,s,t,u={label:0,sent:function(){if(1&s[0])throw s[1];return s[1]},trys:[],ops:[]};return t={next:e(0),throw:e(1),return:e(2)},"function"==typeof Symbol&&(t[Symbol.iterator]=function(){return this}),t;function e(e){return function(t){return function(e){if(i)throw new TypeError("Generator is already executing.");for(;u;)try{if(i=1,o&&(s=2&e[0]?o.return:e[0]?o.throw||((s=o.return)&&s.call(o),0):o.next)&&!(s=s.call(o,e[1])).done)return s;switch(o=0,s&&(e=[2&e[0],s.value]),e[0]){case 0:case 1:s=e;break;case 4:return u.label++,{value:e[1],done:!1};case 5:u.label++,o=e[1],e=[0];continue;case 7:e=u.ops.pop(),u.trys.pop();continue;default:if(!(s=0<(s=u.trys).length&&s[s.length-1])&&(6===e[0]||2===e[0])){u=0;continue}if(3===e[0]&&(!s||e[1]>s[0]&&e[1]=|<|>|\s+contains\s+/];function q(){Error.captureStackTrace&&Error.captureStackTrace(this,this.constructor)}var C=function(){function t(t,e){this.input=e.input,this.line=e.line,this.file=e.file,this.originalError=t,this.token=e}return t.prototype.captureStackTrace=function(t){this.name=t.constructor.name,q.call(t);var e,s,u,r,a,n=this.originalError,i=(e=this.input,s=this.line,u=e.split("\n"),r=Math.max(s-2,1),a=Math.min(s+3,u.length),function(t,e,r){1===arguments.length&&(e=t,t=0),r=r||1;for(var n=[],i=t;i> ":" ",i=(e=String(a).length,r=t,r=String(r),Array(e-r.length).join(" ")+r),o=u[t-1];return""+n+i+"| "+o}).join("\n"));this.message=function(t,e){t=t||"",e.file&&(t+=", file:"+e.file);e.line&&(t+=", line:"+e.line);return t}(n.message,this.token),this.stack=i+"\n"+(this.stack||this.message)+(n.stack?"\nFrom "+n.stack:"")},t}(),F=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}(C);F.prototype=J(Error.prototype),F.prototype.constructor=F;var P=function(n){function t(t,e){var r=n.call(this,t,e)||this;return m(r,t),n.prototype.captureStackTrace.call(r,r),r}return e(t,n),t}(C);P.prototype=J(Error.prototype),P.prototype.constructor=P;var L=function(n){function t(t,e){var r=n.call(this,t,e.token)||this;return m(r,t),n.prototype.captureStackTrace.call(r,r),r}return e(t,n),t}(C);L.prototype=J(Error.prototype),L.prototype.constructor=L;var I=function(t){q.call(this),this.message=t+""};I.prototype=J(Error.prototype),I.prototype.constructor=I;var V=function(t){q.call(this),this.message=t+""};function et(t,e){if(!t)throw new V(e=e||"expect "+t+" to be true")}V.prototype=J(Error.prototype),V.prototype.constructor=V;var $=function(){function t(t,e){void 0===t&&(t={});this.opts=m({dynamicPartials:!0,strict_variables:!1,strict_filters:!1,blocks:{},root:[]},e),this.contexts=[t||{}]}return t.prototype.getAll=function(){return this.contexts.reduce(function(t,e){return m(t,e)},J(null))},t.prototype.get=function(t){var r=this,e=this.propertyAccessSeq(t),n=this.findContextFor(e[0])||y(this.contexts);return e.reduce(function(t,e){return r.readProperty(t,e)},n)},t.prototype.set=function(t,r){var n=this.propertyAccessSeq(t),i=this.findContextFor(n[0])||y(this.contexts);n.some(function(t,e){return!X(i)||(e===n.length-1?(i[t]=r,!0):(void 0===i[t]&&(i[t]={}),void(i=i[t])))})},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(t){return!0});for(var r=this.contexts.length-1;0<=r;r--){var n=this.contexts[r];if(e(n)&&t in n)return n}return null},t.prototype.readProperty=function(t,e){var r,n;if(a(t)?r=void 0:(t=function(t){if(s(t.to_liquid))return t.to_liquid();if(s(t.toLiquid))return t.toLiquid();return t}(t),r="size"===e?a((n=t).size)&&(G(n)||W(n))?n.length:n.size:t[e],s(t.liquid_method_missing)&&(r=t.liquid_method_missing(e))),a(r)&&this.opts.strict_variables)throw new TypeError("undefined variable: "+e);return r},t.prototype.propertyAccessSeq=function(t){t=String(t);for(var e,r,n=[],i="",o=0;of&&h.push(v(f,d.index)),h.push(d[1]?g(d[1],d[2].trim(),d.index):(e=d[3],u=d[4].trim(),a=d.index,{type:"value",line:p.get(a),trim_left:"{{-"===e.slice(0,3),trim_right:"-}}"===e.slice(-3),raw:e,value:u,input:o,file:s}));return o.length>f&&h.push(v(f,o.length)),function(s,u){u=m({greedy:!0},u);var a=!1;s.forEach(function(t,e){var r,n,i,o;i=t,o=u,!a&&("tag"===i.type?i.trim_left||o.trim_tag_left:"value"===i.type?i.trim_left||o.trim_value_left:void 0)&&function(t,e){if(t&&"html"===t.type){var r=e?/\s+$/g:/[\t\r ]*$/g;t.value=t.value.replace(r,"")}}(s[e-1],u.greedy),"tag"===t.type&&"raw"===t.name&&(a=!0),"tag"===t.type&&"endraw"===t.name&&(a=!1),r=t,n=u,!a&&("tag"===r.type?r.trim_right||n.trim_tag_right:"value"===r.type?r.trim_right||n.trim_value_right:void 0)&&function(t,e){if(t&&"html"===t.type){var r=e?/^\s+/g:/^[\t\r ]*\n?/g;t.value=t.value.replace(r,"")}}(s[e+1],u.greedy)})}(h,t),h;function g(t,e,r){var n=e.match(b),i={type:"tag",indent:l,line:p.get(r),trim_left:"{%-"===t.slice(0,3),trim_right:"-%}"===t.slice(-3),raw:t,value:e,input:o,file:s};if(!n)throw new F("illegal tag syntax",i);return i.name=n[1],i.args=n[2],i}function v(t,e){var r=o.slice(t,e);return l=y(r.split("\n")).length,{type:"html",raw:r,value:r}}}var z,rt=(z=ot,{"==":function(t,e){return t===e},"!=":function(t,e){return t!==e},">":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,$.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]}})})}}),z=e,(N=t).registerTag("unless",{parse:function(e,t){var r,n=this;this.templates=[],this.elseTemplates=[];var i=N.parser.parseStream(t).on("start",function(t){r=n.templates,n.cond=e.args}).on("tag:else",function(){return r=n.elseTemplates}).on("tag:endunless",function(t){return i.stop()}).on("template",function(t){return r.push(t)}).on("end",function(t){throw new Error("tag "+e.raw+" not closed")});i.start()},render:function(t,e){var r=z.evalExp(this.cond,t);return z.isFalsy(r)?N.renderer.renderTemplates(this.templates,t):N.renderer.renderTemplates(this.elseTemplates,t)}})}var dt=["January","February","March","April","May","June","July","August","September","October","November","December"],gt=["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],vt=dt.map(wt),mt=gt.map(wt),yt={1:"st",2:"nd",3:"rd",default:"th"};function wt(t){return t.slice(0,3)}var bt={daysInMonth:function(t){return[31,bt.isLeapYear(t)?29:28,31,30,31,30,31,31,30,31,30,31]},getDayOfYear:function(t){for(var e=0,r=0;r":">",'"':""","'":"'"},kt={"&":"&","<":"<",">":">",""":'"',"'":"'"},St={abs:function(t){return Math.abs(t)},append:function(t,e){return t+e},capitalize:function(t){return Mt(t).charAt(0).toUpperCase()+t.slice(1)},ceil:function(t){return Math.ceil(t)},concat:function(t,e){return Array.prototype.concat.call(t,e)},date:function(t,e){var r,n=t;return"now"===t?n=new Date:W(t)&&(n=new Date(t)),(r=n)instanceof Date&&!isNaN(r.getTime())?function(t,e){for(var r="",n=e;;){var i=/%./g,o=i.exec(n);if(!o)return r+n;r+=n.slice(0,i.lastIndex-2),n=n.slice(i.lastIndex);var s=o[0].charAt(1),u=Tt[s];r+=u?u.call(this,t):"%"+s}}(n,e):t},default:function(t,e){return ot(t)?t:e},divided_by:function(t,e){return t/e},downcase:function(t){return t.toLowerCase()},escape:_t,escape_once:function(t){return _t(Mt(t).replace(/&(amp|lt|gt|#34|#39);/g,function(t){return kt[t]}))},first:function(t){return t[0]},floor:function(t){return Math.floor(t)},join:function(t,e){return t.join(void 0===e?" ":e)},last:function(t){return y(t)},lstrip:function(t){return Mt(t).replace(/^\s+/,"")},map:function(t,e){return t.map(function(t){return t[e]})},minus:Ot(function(t,e){return t-e}),modulo:Ot(function(t,e){return t%e}),newline_to_br:function(t){return t.replace(/\n/g,"
")},plus:Ot(function(t,e){return Number(t)+Number(e)}),prepend:function(t,e){return e+t},remove:function(t,e){return t.split(e).join("")},remove_first:function(t,e){return t.replace(e,"")},replace:function(t,e,r){return Mt(t).split(e).join(r)},replace_first:function(t,e,r){return Mt(t).replace(e,r)},reverse:function(t){return t.reverse()},round:function(t,e){var r=Math.pow(10,e||0);return Math.round(t*r,e)/r},rstrip:function(t){return Mt(t).replace(/\s+$/,"")},size:function(t){return t.length},slice:function(t,e,r){return void 0===r&&(r=1),t.slice(e,e+r)},sort:function(t,e){return t.sort(e)},split:function(t,e){return Mt(t).split(e)},strip:function(t){return Mt(t).trim()},strip_html:function(t){return Mt(t).replace(/|||<.*?>/g,"")},strip_newlines:function(t){return Mt(t).replace(/\n/g,"")},times:function(t,e){return t*e},truncate:function(t,e,r){return r=void 0===r?"...":r,e=e||16,(t=Mt(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},uniq:function(t){var e={};return(t||[]).filter(function(t){return!e.hasOwnProperty(t)&&(e[t]=!0)})},upcase:function(t){return Mt(t).toUpperCase()},url_decode:function(t){return t.split("+").map(decodeURIComponent).join(" ")},url_encode:function(t){return t.split(" ").map(encodeURIComponent).join("+")}};function _t(t){return Mt(t).replace(/&|<|>|"|'/g,function(t){return Et[t]})}function Rt(t){var e=(t+"").split(".");return 1s[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.line=e.line,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.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);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_value_right:!1,trim_value_left:!1,greedy:!0,strict_filters:!1,strict_variables:!1};function rt(t){var e;return(t=t||{}).hasOwnProperty("root")&&(t.root=p(e=t.root)?e:l(e)?[e]:[]),t}(tt=Z||(Z={}))[tt.OUTPUT=0]="OUTPUT",tt[tt.STORE=1]="STORE";var nt=Z,it=function(){function t(t,e){void 0===t&&(t={}),void 0===e&&(e=et),this.blocks={},this.blockMode=nt.OUTPUT,this.opts=c({},et,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 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 X("break")})})}},continue:{render:function(){return h(this,void 0,void 0,function(){return d(this,function(t){throw new X("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 String(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)},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}},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){var r=Math.pow(10,e||0);return Math.round(t*r)/r},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) {\n if (isNil(value)) return String(value)\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) {\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) {\n return Object.create(proto)\n}\n\nexport function isNil (value) {\n return value === null || value === undefined\n}\n\nexport function isArray (value) {\n // be compatible with IE 8\n return toStr.call(value) === '[object Array]'\n}\n\nexport function isError (value) {\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) {\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, ...srcs) {\n obj = isObject(obj) ? obj : {}\n srcs.forEach(src => binaryAssign(obj, src))\n return obj\n}\n\nfunction binaryAssign(target, src) {\n for(let key in src) if (src.hasOwnProperty(key)) target[key] = src[key]\n}\n\nexport function last (arr) {\n return arr[arr.length - 1]\n}\n\nexport function uniq (arr) {\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) {\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","// 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'\n\nfunction captureStack () {\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, this.constructor)\n }\n}\n\nabstract class LiquidError {\n input: string\n line: string\n file: string\n message: string\n name: string\n stack: string\n token: any\n originalError: any\n constructor(err, token) {\n this.input = token.input\n this.line = token.line\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.line)\n this.message = mkMessage(err.message, this.token)\n this.stack = 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)\nTokenizationError.prototype.constructor = TokenizationError\n\nexport class ParseError extends LiquidError {\n constructor(err, token) {\n super(err, token)\n _.assign(this, err)\n super.captureStackTrace(this)\n }\n}\nParseError.prototype = _.create(Error.prototype)\nParseError.prototype.constructor = ParseError\n\nexport class RenderError extends LiquidError {\n constructor(err, tpl) {\n super(err, tpl.token)\n _.assign(this, err)\n super.captureStackTrace(this)\n }\n}\nRenderError.prototype = _.create(Error.prototype)\nRenderError.prototype.constructor = RenderError\n\nexport class RenderBreakError {\n message: string\n constructor (message) {\n captureStack.call(this)\n this.message = message + ''\n }\n}\nRenderBreakError.prototype = _.create(Error.prototype)\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)\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(end).length, lineNumber)\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\n }\n return msg\n}\n\nfunction padStart (length, str) {\n str = String(str)\n const blank = Array(length - str.length).join(' ')\n return blank + str\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","import * as _ from './util/underscore'\nimport * as lexical from './lexical'\nimport assert from './util/assert'\n\ninterface ScopeOptions {\n dynamicPartials: boolean\n strict_variables: boolean\n strict_filters: boolean\n blocks: object\n root: Array\n}\n\nexport default class Scope {\n opts: ScopeOptions\n contexts: Array\n constructor (ctx = {}, opts?: any) {\n const defaultOptions: ScopeOptions = {\n dynamicPartials: true,\n strict_variables: false,\n strict_filters: false,\n blocks: {},\n root: []\n }\n this.opts = _.assign(defaultOptions, opts)\n this.contexts = [ctx || {}]\n }\n getAll () {\n return this.contexts.reduce((ctx, val) => _.assign(ctx, val), _.create(null))\n }\n get (path) {\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, v) {\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) {\n return this.contexts.unshift(ctx)\n }\n push (ctx) {\n return this.contexts.push(ctx)\n }\n pop (ctx) {\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, filter = (arg => 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","import { last, isArray } from './util/underscore'\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\nexport function resolve (filepath, root, options) {\n root = root || options.root\n if (isArray(root)) {\n root = root[0]\n }\n if (root.length && last(root) !== '/') {\n root += '/'\n }\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)) {\n return str\n }\n return origin + path + options.extname\n })\n}\n\nexport async function read (url) {\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)\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","import * as lexical from './lexical'\nimport { TokenizationError } from './util/error'\nimport * as _ from './util/underscore'\nimport assert from './util/assert'\nimport whiteSpaceCtrl from './whitespace-ctrl'\n\nexport { default as whiteSpaceCtrl } from './whitespace-ctrl'\n\nexport function parse (input, file, options) {\n assert(_.isString(input), 'illegal input')\n\n const rLiquid = /({%-?([\\s\\S]*?)-?%})|({{-?([\\s\\S]*?)-?}})/g\n let currIndent = 0\n const lineNumber = LineNumber(input)\n let lastMatchEnd = 0\n const tokens = []\n\n for (let match; (match = rLiquid.exec(input)); lastMatchEnd = rLiquid.lastIndex) {\n if (match.index > lastMatchEnd) {\n tokens.push(parseHTMLToken(lastMatchEnd, match.index))\n }\n tokens.push(match[1]\n ? parseTagToken(match[1], match[2].trim(), match.index)\n : parseValueToken(match[3], match[4].trim(), match.index))\n }\n if (input.length > lastMatchEnd) {\n tokens.push(parseHTMLToken(lastMatchEnd, input.length))\n }\n whiteSpaceCtrl(tokens, options)\n return tokens\n\n function parseTagToken (raw, value, pos) {\n const match = value.match(lexical.tagLine)\n const token = {\n type: 'tag',\n indent: currIndent,\n line: lineNumber.get(pos),\n trim_left: raw.slice(0, 3) === '{%-',\n trim_right: raw.slice(-3) === '-%}',\n raw,\n value,\n input,\n file\n }\n if (!match) {\n throw new TokenizationError(`illegal tag syntax`, token)\n }\n token.name = match[1]\n token.args = match[2]\n return token\n }\n\n function parseValueToken (raw, value, pos) {\n return {\n type: 'value',\n line: lineNumber.get(pos),\n trim_left: raw.slice(0, 3) === '{{-',\n trim_right: raw.slice(-3) === '-}}',\n raw,\n value,\n input,\n file\n }\n }\n\n function parseHTMLToken (begin, end) {\n const htmlFragment = input.slice(begin, end)\n currIndent = _.last((htmlFragment).split('\\n')).length\n\n return {\n type: 'html',\n raw: htmlFragment,\n value: htmlFragment\n }\n }\n}\n\nfunction LineNumber (html) {\n let parsedLinesCount = 0\n let lastMatchBegin = -1\n\n return {\n get: function (pos) {\n const lines = html.slice(lastMatchBegin + 1, pos).split('\\n')\n parsedLinesCount += lines.length - 1\n lastMatchBegin = pos\n return parsedLinesCount + 1\n }\n }\n}\n","import { assign } from './util/underscore'\n\nexport default function whiteSpaceCtrl (tokens, options) {\n options = assign({ greedy: true }, options)\n let inRaw = false\n\n tokens.forEach((token, i) => {\n if (shouldTrimLeft(token, inRaw, options)) {\n trimLeft(tokens[i - 1], options.greedy)\n }\n\n if (token.type === 'tag' && token.name === 'raw') inRaw = true\n if (token.type === 'tag' && token.name === 'endraw') inRaw = false\n\n if (shouldTrimRight(token, inRaw, options)) {\n trimRight(tokens[i + 1], options.greedy)\n }\n })\n}\n\nfunction shouldTrimLeft (token, inRaw, options) {\n if (inRaw) return false\n if (token.type === 'tag') return token.trim_left || options.trim_tag_left\n if (token.type === 'value') return token.trim_left || options.trim_value_left\n}\n\nfunction shouldTrimRight (token, inRaw, options) {\n if (inRaw) return false\n if (token.type === 'tag') return token.trim_right || options.trim_tag_right\n if (token.type === 'value') return token.trim_right || options.trim_value_right\n}\n\nfunction trimLeft (token, greedy) {\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, greedy) {\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 Operators from './operators'\nimport * as lexical from './lexical'\nimport assert from './util/assert'\n\nconst operators = Operators(isTruthy)\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","export default function (isTruthy) {\n return {\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}\n","import { evalExp } from './syntax'\nimport { RenderBreakError, RenderError } from './util/error'\nimport { stringify, create } from './util/underscore'\nimport assert from './util/assert'\n\nconst render = {\n renderTemplates: async function (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 renderTemplate.call(this, tpl)\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 async function renderTemplate (template) {\n if (template.type === 'tag') {\n const partial = await this.renderTag(template, scope)\n return partial === undefined ? '' : partial\n }\n if (template.type === 'value') {\n return this.renderValue(template, scope)\n }\n return template.value\n }\n },\n\n renderTag: async function (template, scope) {\n if (template.name === 'continue') {\n throw new RenderBreakError('continue')\n }\n if (template.name === 'break') {\n throw new RenderBreakError('break')\n }\n return template.render(scope)\n },\n\n renderValue: async function (template, scope) {\n const partial = this.evalValue(template, scope)\n return partial === undefined ? '' : stringify(partial)\n },\n\n evalValue: function (template, scope) {\n assert(scope, 'unable to evalValue: scope undefined')\n return template.filters.reduce(\n (prev, filter) => filter.render(prev, scope),\n evalExp(template.initial, scope))\n }\n}\n\nexport default function () {\n const instance = create(render)\n return instance\n}\n","import { hashCapture } from './lexical'\nimport { create } from './util/underscore'\nimport { evalValue } from './syntax'\nimport assert from './util/assert'\n\nfunction hash (markup, scope) {\n const obj = {}\n let match\n hashCapture.lastIndex = 0\n while ((match = hashCapture.exec(markup))) {\n const k = match[1]\n const v = match[2]\n obj[k] = evalValue(v, scope)\n }\n return obj\n}\n\nexport default function () {\n let tagImpls = {}\n\n const _tagInstance = {\n render: async function (scope) {\n const obj = hash(this.token.args, scope)\n const impl = this.tagImpl\n if (typeof impl.render !== 'function') {\n return ''\n }\n return impl.render(scope, obj)\n },\n parse: function (token, tokens) {\n this.type = 'tag'\n this.token = token\n this.name = token.name\n\n const tagImpl = tagImpls[this.name]\n assert(tagImpl, `tag ${this.name} not found`)\n this.tagImpl = create(tagImpl)\n if (this.tagImpl.parse) {\n this.tagImpl.parse(token, tokens)\n }\n }\n }\n\n function register (name, tag) {\n tagImpls[name] = tag\n }\n\n function construct (token, tokens) {\n const instance = create(_tagInstance)\n instance.parse(token, tokens)\n return instance\n }\n\n function clear () {\n tagImpls = {}\n }\n\n return {\n construct,\n register,\n clear\n }\n}\n","import * as lexical from './lexical'\nimport { evalValue } from './syntax'\nimport assert from './util/assert'\nimport { assign, create } from './util/underscore'\n\nconst valueRE = new RegExp(`${lexical.value.source}`, 'g')\n\nexport default function (options) {\n options = assign({}, options)\n let filters = {}\n\n const _filterInstance = {\n render: function (output, scope) {\n const args = this.args.map(arg => evalValue(arg, scope))\n args.unshift(output)\n return this.filter.apply(null, args)\n },\n parse: function (str) {\n let match = lexical.filterLine.exec(str)\n assert(match, 'illegal filter: ' + str)\n\n const name = match[1]\n const argList = match[2] || ''\n const filter = filters[name]\n if (typeof filter !== 'function') {\n if (options.strict_filters) {\n throw new TypeError(`undefined filter: ${name}`)\n }\n this.name = name\n this.filter = x => x\n this.args = []\n return this\n }\n\n 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\n this.name = name\n this.filter = filter\n this.args = args\n\n return this\n }\n }\n\n function construct (str) {\n const instance = create(_filterInstance)\n return instance.parse(str)\n }\n\n function register (name, filter) {\n filters[name] = filter\n }\n\n function clear () {\n filters = {}\n }\n\n return {\n construct, register, clear\n }\n}\n","import * as lexical from './lexical'\nimport { ParseError } from './util/error'\nimport assert from './util/assert'\n\nexport default function (Tag, Filter) {\n class ParseStream {\n tokens: Array\n handlers: object\n stopRequested: boolean\n constructor (tokens) {\n this.tokens = tokens\n this.handlers = {}\n }\n on (name, cb) {\n this.handlers[name] = cb\n return this\n }\n trigger (event: string, arg?: any) {\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 = 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\n function parse (tokens) {\n let token\n const templates = []\n while ((token = tokens.shift())) {\n templates.push(parseToken(token, tokens))\n }\n return templates\n }\n\n function parseToken (token, tokens) {\n try {\n let tpl = null\n if (token.type === 'tag') {\n tpl = parseTag(token, tokens)\n } else if (token.type === 'value') {\n tpl = parseValue(token.value)\n } else { // token.type === 'html'\n tpl = token\n }\n tpl.token = token\n return tpl\n } catch (e) {\n throw new ParseError(e, token)\n }\n }\n\n function parseTag (token, tokens) {\n if (token.name === 'continue' || token.name === 'break') return token\n return Tag.construct(token, tokens)\n }\n\n function parseValue (str) {\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 return {\n type: 'value',\n initial: initial,\n filters: filters.map(str => Filter.construct(str))\n }\n }\n\n function parseStream (tokens) {\n return new ParseStream(tokens)\n }\n\n return {\n parse,\n parseTag,\n parseStream,\n parseValue\n }\n}\n","/*\n * Call functions in serial until someone resolved.\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 anySeries (iterable, iteratee) {\n let ret = Promise.reject(new Error('init'))\n iterable.forEach(function (item, idx) {\n ret = ret.catch(e => 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.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 assert from '../util/assert'\nimport { value, quotedLine } from '../lexical'\n\nconst staticFileRE = /[^\\s,]+/\n\nexport default function (liquid, Liquid) {\n const withRE = new RegExp(`with\\\\s+(${value.source})`)\n\n liquid.registerTag('include', {\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 liquid.parseAndRender(template, scope.getAll(), scope.opts)\n } else {\n filepath = Liquid.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.opts.blocks\n const originBlockMode = scope.opts.blockMode\n\n scope.opts.blocks = {}\n scope.opts.blockMode = 'output'\n if (this.with) {\n hash[filepath] = Liquid.evalValue(this.with, scope)\n }\n const templates = await liquid.getTemplate(filepath, scope.opts.root)\n scope.push(hash)\n const html = await liquid.renderer.renderTemplates(templates, scope)\n scope.pop(hash)\n scope.opts.blocks = originBlocks\n scope.opts.blockMode = originBlockMode\n return html\n }\n })\n}\n","import For from './for'\nimport Assign from './assign'\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 Raw from './raw'\nimport Tablerow from './tablerow'\nimport Unless from './unless'\n\nexport default function (engine, Liquid) {\n Assign(engine, Liquid)\n Capture(engine, Liquid)\n Case(engine, Liquid)\n Comment(engine, Liquid)\n Cycle(engine, Liquid)\n Decrement(engine, Liquid)\n For(engine, Liquid)\n If(engine, Liquid)\n Include(engine, Liquid)\n Increment(engine, Liquid)\n Layout(engine, Liquid)\n Raw(engine, Liquid)\n Tablerow(engine, Liquid)\n Unless(engine, Liquid)\n}\n","import assert from '../util/assert'\nimport { identifier } from '../lexical'\nimport { create } from '../util/underscore'\n\nexport default function (liquid, Liquid) {\n const re = new RegExp(`(${identifier.source})\\\\s*=([^]*)`)\n const { AssignScope } = Liquid.Types\n\n liquid.registerTag('assign', {\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 = create(AssignScope)\n ctx[this.key] = liquid.evalValue(this.value, scope)\n scope.push(ctx)\n return Promise.resolve('')\n }\n })\n}\n","import assert from '../util/assert'\nimport { create } from '../util/underscore'\nimport { identifier } from '../lexical'\n\nexport default function (liquid, Liquid) {\n const re = new RegExp(`(${identifier.source})`)\n const { CaptureScope } = Liquid.Types\n\n liquid.registerTag('capture', {\n parse: function (tagToken, remainTokens) {\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 = liquid.parser.parseStream(remainTokens)\n stream.on('tag:endcapture', token => stream.stop())\n .on('template', tpl => this.templates.push(tpl))\n .on('end', x => {\n throw new Error(`tag ${tagToken.raw} not closed`)\n })\n stream.start()\n },\n render: async function (scope, hash) {\n const html = await liquid.renderer.renderTemplates(this.templates, scope)\n const ctx = create(CaptureScope)\n ctx[this.variable] = html\n scope.push(ctx)\n }\n })\n}\n","export default function (liquid, Liquid) {\n liquid.registerTag('case', {\n\n parse: function (tagToken, remainTokens) {\n this.cond = tagToken.args\n this.cases = []\n this.elseTemplates = []\n\n let p = []\n const stream = 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', token => stream.stop())\n .on('template', tpl => p.push(tpl))\n .on('end', x => {\n throw new Error(`tag ${tagToken.raw} not closed`)\n })\n\n stream.start()\n },\n\n render: function (scope, hash) {\n for (let i = 0; i < this.cases.length; i++) {\n const branch = this.cases[i]\n const val = Liquid.evalExp(branch.val, scope)\n const cond = Liquid.evalExp(this.cond, scope)\n if (val === cond) {\n return liquid.renderer.renderTemplates(branch.templates, scope)\n }\n }\n return liquid.renderer.renderTemplates(this.elseTemplates, scope)\n }\n })\n}\n","export default function (liquid) {\n liquid.registerTag('comment', {\n parse: function (tagToken, remainTokens) {\n const stream = liquid.parser.parseStream(remainTokens)\n stream\n .on('token', token => {\n if (token.name === 'endcomment') stream.stop()\n })\n .on('end', x => {\n throw new Error(`tag ${tagToken.raw} not closed`)\n })\n stream.start()\n }\n })\n}\n","import assert from '../util/assert'\nimport { value as rValue } from '../lexical'\n\nexport default function (liquid, Liquid) {\n const groupRE = new RegExp(`^(?:(${rValue.source})\\\\s*:\\\\s*)?(.*)$`)\n const candidatesRE = new RegExp(rValue.source, 'g')\n\n liquid.registerTag('cycle', {\n\n parse: function (tagToken, remainTokens) {\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, hash) {\n const group = Liquid.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 Liquid.evalValue(candidate, scope)\n }\n })\n}\n","import { create } from '../util/underscore'\nimport assert from '../util/assert'\nimport { identifier } from '../lexical'\n\nexport default function (liquid, Liquid) {\n const { CaptureScope, AssignScope, DecrementScope } = Liquid.Types\n\n liquid.registerTag('decrement', {\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, hash) {\n let context = scope.findContextFor(\n this.variable,\n ctx => {\n const proto = Object.getPrototypeOf(ctx)\n return proto !== CaptureScope && proto !== AssignScope\n }\n )\n if (!context) {\n context = create(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}\n","import { mapSeries } from '../util/promise'\nimport { isString, isObject, isArray } from '../util/underscore'\nimport assert from '../util/assert'\nimport { identifier, value, hash } from '../lexical'\n\nexport default function (liquid, Liquid) {\n const RenderBreakError = Liquid.Types.RenderBreakError\n const re = new RegExp(`^(${identifier.source})\\\\s+in\\\\s+` +\n `(${value.source})` +\n `(?:\\\\s+${hash.source})*` +\n `(?:\\\\s+(reversed))?` +\n `(?:\\\\s+${hash.source})*$`)\n\n liquid.registerTag('for', { parse, render })\n\n function 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 = 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 async function render (scope, hash) {\n let collection = Liquid.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 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 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}\n","export default function (liquid, Liquid) {\n liquid.registerTag('if', {\n\n parse: function (tagToken, remainTokens) {\n this.branches = []\n this.elseTemplates = []\n\n let p\n const stream = 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', token => stream.stop())\n .on('template', tpl => p.push(tpl))\n .on('end', x => {\n throw new Error(`tag ${tagToken.raw} not closed`)\n })\n\n stream.start()\n },\n\n render: function (scope, hash) {\n for (const branch of this.branches) {\n const cond = Liquid.evalExp(branch.cond, scope)\n if (Liquid.isTruthy(cond)) {\n return liquid.renderer.renderTemplates(branch.templates, scope)\n }\n }\n return liquid.renderer.renderTemplates(this.elseTemplates, scope)\n }\n })\n}\n","import assert from '../util/assert'\nimport { create } from '../util/underscore'\nimport { identifier } from '../lexical'\n\nexport default function (liquid, Liquid) {\n const { CaptureScope, AssignScope, IncrementScope } = Liquid.Types\n\n liquid.registerTag('increment', {\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, hash) {\n let context = scope.findContextFor(\n this.variable,\n ctx => {\n const proto = Object.getPrototypeOf(ctx)\n return proto !== CaptureScope && proto !== AssignScope\n }\n )\n if (!context) {\n context = create(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}\n","import assert from '../util/assert'\nimport { value as rValue } from '../lexical'\n\n/*\n * blockMode:\n * * \"store\": store rendered html into blocks\n * * \"output\": output rendered html\n */\n\nexport default function (liquid, Liquid) {\n const staticFileRE = /\\S+/\n\n liquid.registerTag('layout', {\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 = liquid.parser.parse(remainTokens)\n },\n render: async function (scope, hash) {\n const layout = scope.opts.dynamicPartials\n ? Liquid.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.opts.blockMode = 'store'\n const html = await liquid.renderer.renderTemplates(this.tpls, scope)\n if (scope.opts.blocks[''] === undefined) {\n scope.opts.blocks[''] = html\n }\n const templates = await liquid.getTemplate(layout, scope.opts.root)\n scope.push(hash)\n scope.opts.blockMode = 'output'\n const partial = await liquid.renderer.renderTemplates(templates, scope)\n scope.pop(hash)\n return partial\n }\n })\n\n liquid.registerTag('block', {\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 = 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.opts.blocks[this.block]\n const html = childDefined !== undefined\n ? childDefined\n : await liquid.renderer.renderTemplates(this.tpls, scope)\n\n if (scope.opts.blockMode === 'store') {\n scope.opts.blocks[this.block] = html\n return ''\n }\n return html\n }\n })\n}\n","export default function (liquid) {\n liquid.registerTag('raw', {\n parse: function (tagToken, remainTokens) {\n this.tokens = []\n\n const stream = 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 (scope, hash) {\n return this.tokens.map(token => token.raw).join('')\n }\n })\n}\n","import { mapSeries } from '../util/promise'\nimport assert from '../util/assert'\nimport { identifier, value, hash } from '../lexical'\n\nexport default function (liquid, Liquid) {\n const re = new RegExp(`^(${identifier.source})\\\\s+in\\\\s+` +\n `(${value.source})` +\n `(?:\\\\s+${hash.source})*$`)\n\n liquid.registerTag('tablerow', {\n\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 = liquid.parser.parseStream(remainTokens)\n .on('start', () => (p = this.templates))\n .on('tag:endtablerow', token => 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 = Liquid.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, i) => {\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 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}\n","export default function (liquid, Liquid) {\n liquid.registerTag('unless', {\n parse: function (tagToken, remainTokens) {\n this.templates = []\n this.elseTemplates = []\n let p\n const stream = liquid.parser.parseStream(remainTokens)\n .on('start', x => {\n p = this.templates\n this.cond = tagToken.args\n })\n .on('tag:else', () => (p = this.elseTemplates))\n .on('tag:endunless', token => stream.stop())\n .on('template', tpl => p.push(tpl))\n .on('end', x => {\n throw new Error(`tag ${tagToken.raw} not closed`)\n })\n\n stream.start()\n },\n\n render: function (scope, hash) {\n const cond = Liquid.evalExp(this.cond, scope)\n return Liquid.isFalsy(cond)\n ? liquid.renderer.renderTemplates(this.templates, scope)\n : liquid.renderer.renderTemplates(this.elseTemplates, scope)\n }\n })\n}\n","const 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 // Startday is an integer of which day to start the week measuring from\n // TODO: that comment was retarted. fix it.\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 _number.pad(Math.floor((now - then) / 7) + 1, 2)\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 _number = {\n pad: function (value, size, ch) {\n if (!ch) ch = '0'\n let result = value.toString()\n let pad = size - result.length\n\n while (pad-- > 0) {\n result = ch + result\n }\n\n return result\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 _number.pad(d.getDate(), 2)\n },\n e: function (d) {\n return _number.pad(d.getDate(), 2, ' ')\n },\n H: function (d) {\n return _number.pad(d.getHours(), 2)\n },\n I: function (d) {\n return _number.pad(d.getHours() % 12 || 12, 2)\n },\n j: function (d) {\n return _number.pad(_date.getDayOfYear(d), 3)\n },\n k: function (d) {\n return _number.pad(d.getHours(), 2, ' ')\n },\n l: function (d) {\n return _number.pad(d.getHours() % 12 || 12, 2, ' ')\n },\n L: function (d) {\n return _number.pad(d.getMilliseconds(), 3)\n },\n m: function (d) {\n return _number.pad(d.getMonth() + 1, 2)\n },\n M: function (d) {\n return _number.pad(d.getMinutes(), 2)\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 _number.pad(d.getSeconds(), 2)\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 ? '-' : '+') + _number.pad(Math.abs(tz), 4)\n },\n '%': function () {\n return '%'\n }\n}\nformatCodes.h = formatCodes.b\nformatCodes.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 './util/strftime'\nimport * as _ from './util/underscore'\nimport { isTruthy } from './syntax'\n\nconst escapeMap = {\n '&': '&',\n '<': '<',\n '>': '>',\n '\"': '"',\n \"'\": '''\n}\nconst unescapeMap = {\n '&': '&',\n '<': '<',\n '>': '>',\n '"': '\"',\n ''': \"'\"\n}\n\nconst filters = {\n 'abs': v => Math.abs(v),\n 'append': (v, arg) => v + arg,\n 'capitalize': str => stringify(str).charAt(0).toUpperCase() + str.slice(1),\n 'ceil': v => Math.ceil(v),\n 'concat': (v, arg) => Array.prototype.concat.call(v, arg),\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 'default': (v, arg) => isTruthy(v) ? v : arg,\n 'divided_by': (v, arg) => v / arg,\n 'downcase': v => v.toLowerCase(),\n 'escape': escape,\n\n 'escape_once': str => escape(unescape(str)),\n 'first': v => v[0],\n 'floor': v => Math.floor(v),\n 'join': (v, arg) => v.join(arg === undefined ? ' ' : arg),\n 'last': v => _.last(v),\n 'lstrip': v => stringify(v).replace(/^\\s+/, ''),\n 'map': (arr, arg) => arr.map(v => v[arg]),\n 'minus': bindFixed((v, arg) => v - arg),\n 'modulo': bindFixed((v, arg) => v % arg),\n 'newline_to_br': v => v.replace(/\\n/g, '
'),\n 'plus': bindFixed((v, arg) => Number(v) + Number(arg)),\n 'prepend': (v, arg) => arg + v,\n 'remove': (v, arg) => v.split(arg).join(''),\n 'remove_first': (v, l) => v.replace(l, ''),\n 'replace': (v, pattern, replacement) =>\n stringify(v).split(pattern).join(replacement),\n 'replace_first': (v, arg1, arg2) => stringify(v).replace(arg1, arg2),\n 'reverse': v => v.reverse(),\n 'round': (v, arg) => {\n const amp = Math.pow(10, arg || 0)\n return Math.round(v * amp, arg) / amp\n },\n 'rstrip': str => stringify(str).replace(/\\s+$/, ''),\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 'sort': (v, arg) => v.sort(arg),\n 'split': (v, arg) => stringify(v).split(arg),\n 'strip': (v) => stringify(v).trim(),\n 'strip_html': v => stringify(v).replace(/|||<.*?>/g, ''),\n 'strip_newlines': v => stringify(v).replace(/\\n/g, ''),\n 'times': (v, arg) => v * arg,\n 'truncate': (v, l, o) => {\n v = stringify(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 '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 'upcase': str => stringify(str).toUpperCase(),\n 'url_decode': x => x.split('+').map(decodeURIComponent).join(' '),\n 'url_encode': x => x.split(' ').map(encodeURIComponent).join('+')\n}\n\nfunction escape (str) {\n return stringify(str).replace(/&|<|>|\"|'/g, m => escapeMap[m])\n}\n\nfunction unescape (str) {\n return stringify(str).replace(/&(amp|lt|gt|#34|#39);/g, m => unescapeMap[m])\n}\n\nfunction getFixed (v) {\n const p = (v + '').split('.')\n return (p.length > 1) ? p[1].length : 0\n}\n\nfunction getMaxFixed (l, r) {\n return Math.max(getFixed(l), getFixed(r))\n}\n\nfunction stringify (obj) {\n return obj + ''\n}\n\nfunction bindFixed (cb) {\n return (l, r) => {\n const f = getMaxFixed(l, r)\n return cb(l, r).toFixed(f)\n }\n}\n\nfunction isValidDate (date) {\n return date instanceof Date && !isNaN(date.getTime())\n}\n\nexport default function registerAll (liquid, Liquid) {\n return _.forOwn(filters, (func, name) => liquid.registerFilter(name, func))\n}\n\nregisterAll.filters = filters\n","import Scope from './scope'\nimport * as template from './template'\nimport * as _ from './util/underscore'\nimport assert from './util/assert'\nimport * as tokenizer from './tokenizer'\nimport Render from './render'\nimport Tag from './tag'\nimport Filter from './filter'\nimport Parser from './parser'\nimport { isTruthy, isFalsy, evalExp, evalValue } from './syntax'\nimport { ParseError, TokenizationError, RenderBreakError, AssertionError } from './util/error'\nimport tags from './tags/index'\nimport filters from './filters'\n\nexport default class Liquid {\n private cache: object\n private options: any\n private tags: any\n private filters: any\n private parser: any\n private renderer: any\n\n constructor (options) {\n options = _.assign({\n root: ['.'],\n cache: false,\n extname: '',\n dynamicPartials: true,\n trim_tag_right: false,\n trim_tag_left: false,\n trim_value_right: false,\n trim_value_left: false,\n greedy: true,\n strict_filters: false,\n strict_variables: false\n }, options)\n options.root = normalizeStringArray(options.root)\n\n if (options.cache) {\n this.cache = {}\n }\n this.options = options\n this.tags = Tag()\n this.filters = Filter(options)\n this.parser = Parser(this.tags, this.filters)\n this.renderer = Render()\n\n tags(this, Liquid)\n filters(this, Liquid)\n }\n parse(html: string, filepath?: string) {\n const tokens = tokenizer.parse(html, filepath, this.options)\n return this.parser.parse(tokens)\n }\n render(tpl: string, ctx: any, opts: any) {\n opts = _.assign({}, this.options, opts)\n const scope = new Scope(ctx, opts)\n return this.renderer.renderTemplates(tpl, scope)\n }\n async parseAndRender(html, ctx, opts) {\n const tpl = await this.parse(html)\n return this.render(tpl, ctx, opts)\n }\n async getTemplate(file, root) {\n const filepath = await template.resolve(file, root, this.options)\n return this.respectCache(filepath, async () => {\n const str = await template.read(filepath)\n return this.parse(str, filepath)\n })\n }\n async renderFile(file, ctx, opts) {\n opts = _.assign({}, opts)\n const templates = await this.getTemplate(file, opts.root)\n return this.render(templates, ctx, opts)\n }\n async respectCache (key, getter) {\n const cacheEnabled = this.options.cache\n if (cacheEnabled && this.cache[key]) {\n return this.cache[key]\n }\n const value = await getter()\n if (cacheEnabled) {\n this.cache[key] = value\n }\n return value\n }\n evalValue (str, scope) {\n const tpl = this.parser.parseValue(str.trim())\n return this.renderer.evalValue(tpl, scope)\n }\n registerFilter (name, filter) {\n return this.filters.register(name, filter)\n }\n registerTag (name, tag) {\n return this.tags.register(name, tag)\n }\n plugin (plugin) {\n return plugin.call(this, Liquid)\n }\n express (opts) {\n opts = opts || {}\n const self = this\n return function (filePath, ctx, cb) {\n assert(_.isArray(this.root) || _.isString(this.root),\n 'illegal views root, are you using express.js?')\n 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 = {\n ParseError,\n TokenizationError,\n RenderBreakError,\n AssertionError,\n AssignScope: {},\n CaptureScope: {},\n IncrementScope: {},\n DecrementScope: {}\n }\n}\n\nfunction normalizeStringArray (value) {\n if (_.isArray(value)) return value\n if (_.isString(value)) return [value]\n throw new TypeError('illegal root: ' + value)\n}\n"],"names":["toStr","Object","prototype","toString","arrToStr","Array","isString","value","call","isFunction","stringify","isNil","String","to_liquid","toLiquid","to_s","indexOf","cache","JSON","key","isObject","push","create","proto","isArray","assign","obj","_i","srcs","forEach","src","target","hasOwnProperty","binaryAssign","last","arr","length","type","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","line","file","originalError","LiquidError","name","targetLine","lines","begin","end","context","split","Math","max","min","start","stop","step","arguments","i","_\r\n .range","map","lineNumber","str","indicator","num","join","text","message","msg","mkMessage","stack","_super","_this","tslib_1.__extends","TokenizationError","_.create","_.assign","ParseError","tpl","RenderError","RenderBreakError","predicate","AssertionError","ctx","opts","dynamicPartials","strict_variables","strict_filters","blocks","root","contexts","Scope","reduce","val","path","paths","propertyAccessSeq","scope","findContextFor","_.last","readProperty","v","some","_.isObject","undefined","unshift","pop","findIndex","TypeError","splice","arg","candidate","_.isNil","_.isFunction","size","_.isArray","_.isString","liquid_method_missing","j","seq","delemiter","test","assert","slice","matchRightBracket","get","resolve","filepath","options","base","document","createElement","href","head","getElementsByTagName","insertBefore","firstChild","a","resolved","removeChild","domResolve","replace","origin","extname","parse","html","parsedLinesCount","lastMatchBegin","raw","pos","rLiquid","currIndent","lastMatchEnd","tokens","match","exec","lastIndex","index","parseHTMLToken","parseTagToken","trim","trim_left","trim_right","greedy","inRaw","trim_tag_left","trim_value_left","rLeft","trimLeft","trim_tag_right","trim_value_right","rRight","trimRight","whiteSpaceCtrl","lexical.tagLine","indent","args","htmlFragment","isTruthy","==","l","r","!=",">","<",">=","<=","contains","and","or","evalExp","exp","operatorREs","lexical.operators","operatorRE","expRE","lexical.quoteBalanced","op","lexical.rangeLine","low","evalValue","high","res","Number","toLowerCase","lexical.parseLiteral","isFalsy","render","renderTemplates","templates","templates_1","_a","template","renderTag","partial","renderValue","_b","e_1","resolvedHTML","filters","prev","initial","tagImpls","_tagInstance","markup","k","impl","tagImpl","construct","instance","register","tag","clear","valueRE","lexical.value","Tag","Filter","handlers","ParseStream","cb","event","h","trigger","stopRequested","shift","parseToken","parseTag","parseValue","e","substr","lexical.filter","parseStream","mapSeries","iterable","iteratee","ret","Promise","result","item","idx","then","x","staticFileRE","engine","Liquid","liquid","re","AssignScope","CaptureScope","groupRE","candidatesRE","DecrementScope","withRE","IncrementScope","registerTag","tagToken","remainTokens","stream","parser","on","renderer","cond","cases","elseTemplates","p","branch","rValue","group","candidates","fingerprint","groups","getPrototypeOf","Types","collection","reversed","keys","offset","limit","reverse","forloop","first","index0","rindex","rindex0","finished","branches","staticValue","with","parseAndRender","getAll","originBlocks","originBlockMode","blockMode","getTemplate","staticLayout","layout","tpls","block","childDefined","cols","row","floor","col","monthNames","dayNames","monthNamesShort","abbr","dayNamesShort","suffixes","1","2","3","default","_date","daysInMonth","d","isLeapYear","getDayOfYear","getMonth","getDate","getWeekOfYear","startDay","now","getDay","Date","getFullYear","_number","pad","year","getSuffix","parseInt","century","substring","ch","formatCodes","A","b","B","c","toLocaleString","C","H","getHours","I","L","getMilliseconds","m","M","getMinutes","P","q","s","round","valueOf","S","getSeconds","u","U","w","W","toLocaleDateString","X","toLocaleTimeString","y","Y","z","tz","getTimezoneOffset","abs","%","N","escapeMap","&","\"","'","unescapeMap","&","<",">",""","'","append","capitalize","charAt","toUpperCase","ceil","concat","date","isNaN","getTime","format","output","remaining","results","func","strftime","divided_by","downcase","escape","escape_once","lstrip","minus","bindFixed","modulo","newline_to_br","plus","prepend","remove","remove_first","pattern","replacement","replace_first","arg1","arg2","amp","pow","rstrip","sort","strip","strip_html","strip_newlines","times","truncate","o","truncatewords","uniq","upcase","url_decode","decodeURIComponent","url_encode","encodeURIComponent","getFixed","f","toFixed","registerAll","object","_.forOwn","registerFilter","normalizeStringArray","tags","_filterInstance","apply","lexical.filterLine","argList","keyMatch","Parser","tokenizer.parse","template.resolve","respectCache","url","reject","xhr","XMLHttpRequest","onload","status","responseText","statusText","onerror","open","send","template.read","getter","cacheEnabled","plugin","self","filePath","renderFile"],"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.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) {\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 line: 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.line = token.line\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.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\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","import * 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 // eslint-disable-line\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 // eslint-disable-line\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 // eslint-disable-line\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 // eslint-disable-line\n /** ``trim_value_right` is used to strip blank characters (including ` `, `\\t`, and `\\r`) from the right of values (`{{ }}`) until `\\n` (inclusive). Defaults to `false`. */\n trim_value_right?: boolean // eslint-disable-line\n /** `trim_value_left` is similar to `trim_value_right`, whereas the `\\n` is exclusive. Defaults to `false`. See Whitespace Control for details. */\n trim_value_left?: boolean // eslint-disable-line\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 const defaultOptions: NormalizedOptions = {\n root: ['.'],\n cache: false,\n extname: '',\n dynamicPartials: true,\n trim_tag_right: false,\n trim_tag_left: false,\n trim_value_right: false,\n trim_value_left: false,\n greedy: true,\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\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 { NormalizedOptions, defaultOptions } from '../liquid-options'\nimport BlockMode from './block-mode'\n\nexport default class Scope {\n opts: NormalizedOptions\n contexts: Array\n blocks: object = {}\n blockMode: BlockMode = BlockMode.OUTPUT\n constructor (ctx: object = {}, opts: NormalizedOptions = defaultOptions) {\n this.opts = { ...defaultOptions, ...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 raw: string\n input: string\n file: string\n value: string\n constructor (raw, pos, input, file, line) {\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 OutputToken from './output-token'\nimport { LiquidOptions, defaultOptions } from 'src/liquid-options'\n\nenum ParseState { HTML, OUTPUT, TAG }\n\nexport default class Tokenizer {\n options: LiquidOptions\n constructor (options: LiquidOptions = defaultOptions) {\n this.options = options\n }\n tokenize (input: string, file?: string) {\n const tokens = []\n let p = 0\n let line = 1\n let state = ParseState.HTML\n let buffer = ''\n let bufferBegin = 0\n\n while (p < input.length) {\n if (input[p] === '\\n') line++\n const bin = input.substr(p, 2)\n if (state === ParseState.HTML) {\n if (bin === '{{' || bin === '{%') {\n if (buffer) tokens.push(new HTMLToken(buffer, bufferBegin, input, file, line))\n buffer = bin\n bufferBegin = p\n p += 2\n state = bin === '{{' ? ParseState.OUTPUT : ParseState.TAG\n continue\n }\n } else if (state === ParseState.OUTPUT && bin === '}}') {\n buffer += '}}'\n tokens.push(new OutputToken(buffer, bufferBegin, input, file, line))\n p += 2\n buffer = ''\n bufferBegin = p\n state = ParseState.HTML\n continue\n } else if (bin === '%}') {\n buffer += '%}'\n tokens.push(new TagToken(buffer, bufferBegin, input, file, line))\n p += 2\n buffer = ''\n bufferBegin = p\n state = ParseState.HTML\n continue\n }\n buffer += input[p++]\n }\n if (buffer) tokens.push(new HTMLToken(buffer, bufferBegin, 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, pos, input, file, line) {\n super(raw, pos, input, file, line)\n this.trimLeft = raw[2] === '-'\n this.trimRight = raw[raw.length - 3] === '-'\n this.value = raw.slice(this.trimLeft ? 3 : 2, this.trimRight ? -3 : -2).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, pos, input, file, line) {\n super(raw, 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, pos, input, file, line) {\n super(raw, 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 { LiquidOptions } from 'src/liquid-options'\n\nexport default function whiteSpaceCtrl (tokens: Token[], options: LiquidOptions) {\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_value_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_value_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, NormalizedOptions, defaultOptions, normalize } from './liquid-options'\n\nexport default class Liquid {\n public options: NormalizedOptions\n private cache: object\n private parser: Parser\n private renderer: Render\n private tokenizer: Tokenizer\n\n constructor (opts: LiquidOptions = {}) {\n const options = { ...defaultOptions, ...normalize(opts) }\n if (options.cache) {\n this.cache = {}\n }\n this.options = options\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","line","file","originalError","LiquidError","obj","name","targetLine","lines","begin","end","context","split","Math","max","min","start","stop","step","arguments","i","_\r\n .range","map","lineNumber","indicator","num","_.padStart","text","join","message","msg","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_value_right","trim_value_left","greedy","strict_filters","strict_variables","normalize","options","_.isArray","_.isString","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","pos","Token","trimLeft","trimRight","trim","match","lexical.tagLine","args","DelimitedToken","Tokenizer","tokens","p","state","HTML","buffer","bufferBegin","bin","substr","HTMLToken","TAG","OutputToken","TagToken","inRaw","rLeft","rRight","whiteSpaceCtrl","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","col","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":"8+DAAA,IAAMA,EAAQC,OAAOC,UAAUC,SACzBC,EAAWC,MAAMH,UAAUC,kBAOjBG,EAAUC,GACxB,MAA6B,oBAAtBP,EAAMQ,KAAKD,YAGJE,EAAYF,GAC1B,MAAwB,mBAAVA,WAaAG,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,EAAQ,GACPC,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,WAYQK,EAA+CC,GAC7D,OAAOrB,OAAOoB,OAAOC,YAGPX,EAAOJ,GACrB,OAAOA,MAAAA,WAGOgB,EAAShB,GAEvB,MAA6B,mBAAtBP,EAAMQ,KAAKD,YAkBJiB,EAAQC,EAAQC,GAE9B,IAAK,IAAMC,KADXF,EAASA,GAAU,GAEjB,GAAIA,EAAOG,eAAeD,KACe,IAAnCD,EAASD,EAAOE,GAAIA,EAAGF,GAAmB,MAGlD,OAAOA,WAyBOI,EAAMC,GACpB,OAAOA,EAAIA,EAAIC,OAAS,YAsBVZ,EAAUZ,GACxB,IAAMyB,SAAczB,EACpB,OAAiB,OAAVA,IAA4B,WAATyB,GAA8B,aAATA,YAyBjCC,EAAUC,EAAUH,EAAgBI,gBAAAA,OAGlD,IADA,IAAIC,EAAIL,GADRG,EAAMG,OAAOH,IACQH,OACR,EAANK,KAASF,EAAMC,EAAKD,EAC3B,OAAOA,EClKT,IAEaI,EAAS,IAAIC,OAFL,UAE4BC,WAD5B,UACmDA,QAC3DC,EAAgB,IAAIF,OAAO,MAAMD,EAAOE,oBAIxCE,EAAS,qBACTC,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,YACxDS,EAAQ,IAAIV,OAAO,MAAMS,EAAWR,gBAAeQ,EAAWR,cAC9DU,EAAe,IAAIX,OAAO,OAAOS,EAAWR,kBAAiBQ,EAAWR,eAExEjC,EAAQ,IAAIgC,OAAO,MAAMQ,EAASP,WAAUM,EAAQN,WAAUS,EAAMT,YAGpEW,EAAO,IAAIZ,OAAO,MAAMK,EAAWJ,uBAAsBjC,EAAMiC,YAC/DY,EAAc,IAAIb,OAAO,IAAIK,EAAWJ,qBAAoBjC,EAAMiC,WAAW,KAG7Ea,EAAU,IAAId,OAAO,SAASK,EAAWJ,iCACzCc,EAAc,IAAIf,OAAO,IAAIO,EAAQN,WAAW,KAChDe,EAAe,IAAIhB,OAAO,IAAIQ,EAASP,YACvCgB,EAAa,IAAIjB,OAAO,IAAIG,EAAOF,YACnCiB,EAAW,IAAIlB,OAAO,IAAII,EAAKH,WAAW,KAC1CkB,EAAa,IAAInB,OAAO,IAAID,EAAOE,YACnCmB,EAAY,IAAIpB,OAAO,IAAIW,EAAaV,YACxCoB,EAAc,IAAIrB,OAAO,IA7Bf,QA6B2BC,YAGrCqB,EAAmB,IAAItB,OAAO,MAAMK,EAAWJ,qBAAoBjC,EAAMiC,QACzEsB,EAAY,IAAIvB,OAAUsB,EAAiBrB,oBAAmBqB,EAAiBrB,aAC/EuB,EAAS,IAAIxB,OAAUK,EAAWJ,sBAAqBsB,EAAUtB,YAAY,KAC7EwB,EAAgB,IAAIzB,OAAO,IAAIK,EAAWJ,wBAAuBsB,EAAUtB,cAC3EyB,EAAa,IAAI1B,OAAO,IAAIyB,EAAcxB,YAE1C0B,EAAY,CACvB,WACA,YACA,kCC7CF,SAASC,IACHC,MAAMC,mBACRD,MAAMC,kBAAkBC,KAAMA,KAAKC,aAIvC,iBASE,WAAaC,EAAKC,GAChBH,KAAKI,MAAQD,EAAMC,MACnBJ,KAAKK,KAAOF,EAAME,KAClBL,KAAKM,KAAOH,EAAMG,KAClBN,KAAKO,cAAgBL,EACrBF,KAAKG,MAAQA,EAajB,OAXEK,8BAAA,SAAmBC,GACjBT,KAAKU,KAAOD,EAAIR,YAAYS,KAE5Bb,EAAa3D,KAAKuE,GAClB,IA2DgBL,EAAOO,EACnBC,EACAC,EACAC,EA9DEZ,EAAMF,KAAKO,cACXQ,GA0DUX,EA1DUJ,KAAKI,MA0DRO,EA1DeX,KAAKK,KA2DvCO,EAAQR,EAAMY,MAAM,MACpBH,EAAQI,KAAKC,IAAIP,EAAa,EAAG,GACjCG,EAAMG,KAAKE,IAAIR,EAAa,EAAGC,EAAMnD,iBFsDtB2D,EAAeC,EAAeC,GAC1B,IAArBC,UAAU9D,SACZ4D,EAAOD,EACPA,EAAQ,GAEVE,EAAOA,GAAQ,EAGf,IADA,IAAM9D,EAAM,GACHgE,EAAIJ,EAAOI,EAAIH,EAAMG,GAAKF,EACjC9D,EAAIV,KAAK0E,GAEX,OAAOhE,EE/DSiE,CACPZ,EAAOC,EAAM,GACnBY,IAAI,SAAAC,GACH,IAAMC,EAAaD,IAAehB,EAAc,MAAQ,MAClDkB,EAAMC,EAAW/D,OAAO4D,GAAa5D,OAAO+C,GAAKrD,QACjDsE,EAAOnB,EAAMe,EAAa,GAChC,MAAO,GAAGC,EAAYC,OAAQE,IAE/BC,KAAK,OAtENhC,KAAKiC,QA2ET,SAAoBC,EAAK/B,GACvB+B,EAAMA,GAAO,GACT/B,EAAMG,OACR4B,GAAO,UAAY/B,EAAMG,MAEvBH,EAAME,OACR6B,GAAO,UAAY/B,EAAME,MAE3B,OAAO6B,EAnFUC,CAAUjC,EAAI+B,QAASjC,KAAKG,OAC3CH,KAAKoC,MAAQpC,KAAKiC,QAAU,KAAOlB,EACjC,MAAQf,KAAKoC,OAASpC,KAAKiC,UACxB/B,EAAIkC,MAAQ,UAAYlC,EAAIkC,MAAQ,wBAK3C,WAAaH,EAAS9B,GAAtB,MACEkC,YAAM,CAAEJ,WAAW9B,gBACnBkC,YAAMtC,yBAAkBuC,KAE5B,OALuCC,UAAA/B,GAMvCgC,EAAkB5G,UAAY6G,EAAS3C,MAAMlE,WAC7C4G,EAAkB5G,UAAUqE,YAAcuC,EAE1C,kBACE,WAAatC,EAAKC,GAAlB,MACEkC,YAAMnC,EAAKC,gBACXmC,EAAKL,QAAU/B,EAAI+B,QACnBI,YAAMtC,yBAAkBuC,KAE5B,OANgCC,UAAA/B,GAOhCkC,EAAW9G,UAAY6G,EAAS3C,MAAMlE,WACtC8G,EAAW9G,UAAUqE,YAAcyC,EAEnC,kBACE,WAAaxC,EAAKyC,GAAlB,MACEN,YAAMnC,EAAKyC,EAAIxC,oBACfmC,EAAKL,QAAU/B,EAAI+B,QACnBI,YAAMtC,yBAAkBuC,KAE5B,OANiCC,UAAA/B,GAOjCoC,EAAYhH,UAAY6G,EAAS3C,MAAMlE,WACvCgH,EAAYhH,UAAUqE,YAAc2C,EAEpC,MAGE,SAAaX,GACXpC,EAAa3D,KAAK8D,MAClBA,KAAKiC,QAAUA,EAAU,IAG7BY,EAAiBjH,UAAY6G,EAAS3C,MAAMlE,WAC5CiH,EAAiBjH,UAAUqE,YAAc4C,EAEzC,MAEE,SAAaZ,GACXpC,EAAa3D,KAAK8D,MAClBA,KAAKiC,QAAUA,EAAU,eChFJa,EAAgBb,GACvC,IAAKa,EAEH,MAAM,IAAIC,EADVd,EAAUA,GAAW,UAAUa,iBDiFnCC,EAAenH,UAAY6G,EAAS3C,MAAMlE,WAC1CmH,EAAenH,UAAUqE,YAAc8C,EEvDhC,IC/BFC,EAAAA,GD+BQC,GAAoC,CAC/CC,KAAM,CAAC,KACPxG,OAAO,EACPyG,QAAS,GACTC,iBAAiB,EACjBC,gBAAgB,EAChBC,eAAe,EACfC,kBAAkB,EAClBC,iBAAiB,EACjBC,QAAQ,EACRC,gBAAgB,EAChBC,kBAAkB,YAGJC,GAAWC,GAQ3B,IAA+B5H,EAH7B,OAJA4H,EAAUA,GAAW,IACTvG,eAAe,UACzBuG,EAAQX,KAMNY,EADyB7H,EALS4H,EAAQX,MAMjBjH,EACzB8H,EAAW9H,GAAe,CAACA,GACxB,IANA4H,GClDJb,GAAAA,IAAAA,6BAIHA,8BAGaA,gBCIb,WAAagB,EAAkBC,gBAAlBD,mBAAkBC,MAF/BjE,YAAiB,GACjBA,eAAuBgD,GAAUkB,OAE/BlE,KAAKiE,UAAYhB,GAAmBgB,GACpCjE,KAAKmE,SAAW,CAACH,GAAO,IAgI5B,OA9HEI,mBAAA,WACE,OAAOpE,KAAKmE,SAASE,OAAO,SAACL,EAAKM,GAAQ,gBNkFtB7D,OAAa,aAAA8D,mBAAAA,IAAAC,oBAGnC,OAFA/D,EAAM5D,EAAS4D,GAAOA,EAAM,GAC5B+D,EAAKC,QAAQ,SAAAC,GAAO,OAItB,SAAuBC,EAAgBD,GACrC,IAAK,IAAM9H,KAAO8H,EAASA,EAAIpH,eAAeV,KAAM+H,EAAO/H,GAAO8H,EAAI9H,IACtE,OAAO+H,EANaC,CAAanE,EAAKiE,KAC/BjE,EMrFqCoE,CAASb,EAAKM,IAAM7B,EAAS,QAEzE2B,gBAAA,SAAKU,GAAL,WACQC,EAAQ/E,KAAKgF,kBAAkBF,GAC/BG,EAAQjF,KAAKkF,eAAeH,EAAM,KAAOI,EAAOnF,KAAKmE,UAC3D,OAAOY,EAAMV,OAAO,SAACpI,EAAOW,GAAQ,OAAA0F,EAAK8C,aAAanJ,EAAOW,IAAMqI,IAErEb,gBAAA,SAAKU,EAAcO,GACjB,IAAMN,EAAQ/E,KAAKgF,kBAAkBF,GACjCG,EAAQjF,KAAKkF,eAAeH,EAAM,KAAOI,EAAOnF,KAAKmE,UACzDY,EAAMO,KAAK,SAAC1I,EAAK4E,GACf,OAAK+D,EAAWN,KAGZzD,IAAMuD,EAAMtH,OAAS,GACvBwH,EAAMrI,GAAOyI,GACN,SAELG,IAAcP,EAAMrI,KACtBqI,EAAMrI,GAAO,SAEfqI,EAAQA,EAAMrI,SAGlBwH,oBAAA,SAASJ,GACP,OAAOhE,KAAKmE,SAASsB,QAAQzB,IAE/BI,iBAAA,SAAMJ,GACJ,OAAOhE,KAAKmE,SAASrH,KAAKkH,IAE5BI,gBAAA,SAAKJ,GACH,IAAKzC,UAAU9D,OACb,OAAOuC,KAAKmE,SAASuB,MAEvB,IAAMlE,EAAIxB,KAAKmE,SAASwB,UAAU,SAAAV,GAAS,OAAAA,IAAUjB,IACrD,IAAW,IAAPxC,EACF,MAAM,IAAIoE,UAAU,+BAEtB,OAAO5F,KAAKmE,SAAS0B,OAAOrE,EAAG,GAAG,IAEpC4C,2BAAA,SAAgBxH,EAAa6C,gBAAAA,aAAgD,OAAA,IAC3E,IAAK,IAAI+B,EAAIxB,KAAKmE,SAAS1G,OAAS,EAAQ,GAAL+D,EAAQA,IAAK,CAClD,IAAMsE,EAAY9F,KAAKmE,SAAS3C,GAChC,GAAK/B,EAAOqG,IACRlJ,KAAOkJ,EACT,OAAOA,EAGX,OAAO,MAET1B,yBAAA,SAAc3D,EAAK7D,GACjB,IAAI0H,EAsFW7D,EA5Ef,GATIsF,EAAQtF,GACV6D,OAAMkB,GAEN/E,EAwEN,SAAmBA,GACjB,GAAIuF,EAAavF,EAAInE,WACnB,OAAOmE,EAAInE,YAEb,GAAI0J,EAAavF,EAAIlE,UACnB,OAAOkE,EAAIlE,WAEb,OAAOkE,EA/EGlE,CAASkE,GACf6D,EAAc,SAAR1H,EAkFLmJ,GADYtF,EAjFmBA,GAkFnBwF,QACbnC,EAAUrD,IAAQsD,EAAWtD,IAAaA,EAAIhD,OADnBgD,EAAIwF,KAlFQxF,EAAI7D,GACvCoJ,EAAavF,EAAIyF,yBACnB5B,EAAM7D,EAAIyF,sBAAsBtJ,KAGhCmJ,EAAQzB,IAAQtE,KAAKiE,KAAKN,iBAC5B,MAAM,IAAIiC,UAAU,uBAAuBhJ,GAE7C,OAAO0H,GAWTF,8BAAA,SAAmBxG,GACjBA,EAAMG,OAAOH,GAKb,IAJA,IAEIuI,EL5CmBvI,EK0CjBwI,EAAM,GACR1F,EAAO,GAEPc,EAAI,EACDA,EAAI5D,EAAIH,QACb,OAAQG,EAAI4D,IACV,IAAK,IACH1E,IAEA,IAAMuJ,EAAYzI,EAAI4D,EAAI,GAMxBA,EALE,OAAO8E,KAAKD,IAEdE,GAAc,KADdJ,EAAIvI,EAAInB,QAAQ4J,EAAW7E,EAAI,IACd,cAAc6E,OAAczI,GAC7C8C,EAAO9C,EAAI4I,MAAMhF,EAAI,EAAG2E,GACxBrJ,IACIqJ,EAAI,IAGRI,GAAc,KADdJ,EAAIM,GAAkB7I,EAAK4D,EAAI,IACd,kBAAkB5D,GACnC8C,EAAO9C,EAAI4I,MAAMhF,EAAI,EAAG2E,GL7DTvI,EK8DQ8C,EL7D1BpB,EAAYgH,KAAK1I,KK8DZ8C,EAAO3C,OAAOiC,KAAK0G,IAAIhG,KAEzB5D,IACIqJ,EAAI,GAEV,MACF,IAAK,IACHrJ,IACA0E,IACA,MACF,QACEd,GAAQ9C,EAAI4D,GACZA,IAKN,GAFA1E,KAEKsJ,EAAI3I,OACP,MAAM,IAAImI,UAAU,iBAAiBhI,OAEvC,OAAOwI,EAEP,SAAStJ,IACH4D,EAAKjD,QAAQ2I,EAAItJ,KAAK4D,GAC1BA,EAAO,UAqBb,SAAS+F,GAAmB7I,EAAKiD,GAE/B,IADA,IAAIuB,EAAQ,EACHZ,EAAIX,EAAOW,EAAI5D,EAAIH,OAAQ+D,IAIlC,GAHe,MAAX5D,EAAI4D,IACNY,IAEa,MAAXxE,EAAI4D,IAEQ,MADdY,EAEE,OAAOZ,EAIb,OAAQ,EC5KV,OAAA,gBACA,gBACA,gBACA,gLC+Ce,CAAEmF,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,IAAIjH,MAAMkH,EAAIK,cAGzBL,EAAIM,QAAU,WACZP,EAAO,IAAIjH,MAAM,sDAEnBkH,EAAIO,KAAK,MAAOX,GAChBI,EAAIQ,eAQmBV,QAhC3B,SAAkB5D,EAAMuE,EAAUC,GAGhC,OAFIxE,EAAKzF,QAAyB,MAAfF,EAAK2F,KAAeA,GAAQ,KAhBjD,SAAqBA,EAAM4B,GACzB,IAAM6C,EAAOC,SAASC,cAAc,QACpCF,EAAKG,KAAO5E,EAEZ,IAAM6E,EAAOH,SAASI,qBAAqB,QAAQ,GACnDD,EAAKE,aAAaN,EAAMI,EAAKG,YAE7B,IAAMC,EAAIP,SAASC,cAAc,KACjCM,EAAEL,KAAOhD,EACT,IAAMsD,EAAWD,EAAEL,KAGnB,OAFAC,EAAKM,YAAYV,GAEVS,EAKKE,CAAWpF,EAAMuE,GAClBc,QAAQ,4BAA6B,SAAC3K,EAAK4K,EAAQ1D,GAC5D,IAAMvH,EAAOuH,EAAK9D,MAAM,KAAK0E,MAC7B,MAAI,SAASY,KAAK/I,GAAcK,EACzB4K,EAAS1D,EAAO4C,KA0BSe,OAJpC,4EACE,UAAO,SC/CT,ICMKC,GAAAA,MDCH,SAAaC,EAAKC,EAAKxI,EAAOE,EAAMD,GAClCL,KAAKK,KAAOA,EACZL,KAAK2I,IAAMA,EACX3I,KAAKI,MAAQA,EACbJ,KAAKM,KAAOA,kBERd,WAAa1C,EAAKiD,EAAOT,EAAOE,EAAMD,GAAtC,MACEgC,YAAMzE,EAAKiD,EAAOT,EAAOE,EAAMD,gBAC/BiC,EAAK5E,KAAO,OACZ4E,EAAKrG,MAAQ2B,IAEjB,OANuC2E,UAAAsG,mBCGrC,WAAaF,EAAKC,EAAKxI,EAAOE,EAAMD,GAApC,MACEgC,YAAMsG,EAAKC,EAAKxI,EAAOE,EAAMD,gBAC7BiC,EAAKwG,SAAsB,MAAXH,EAAI,GACpBrG,EAAKyG,UAAoC,MAAxBJ,EAAIA,EAAIlL,OAAS,GAClC6E,EAAKrG,MAAQ0M,EAAInC,MAAMlE,EAAKwG,SAAW,EAAI,EAAGxG,EAAKyG,WAAa,GAAK,GAAGC,SAE5E,OAT4CzG,UAAAsG,mBCK1C,WAAaF,EAAKC,EAAKxI,EAAOE,EAAMD,GAApC,MACEgC,YAAMsG,EAAKC,EAAKxI,EAAOE,EAAMD,SAC7BiC,EAAK5E,KAAO,MACZ,IAAMuL,EAAQ3G,EAAKrG,MAAMgN,MAAMC,GAC/B,IAAKD,EACH,MAAM,IAAIzG,EAAkB,qBAAsBF,UAEpDA,EAAK5B,KAAOuI,EAAM,GAClB3G,EAAK6G,KAAOF,EAAM,KAEtB,OAbsC1G,UAAA6G,mBCDpC,WAAaT,EAAKC,EAAKxI,EAAOE,EAAMD,GAApC,MACEgC,YAAMsG,EAAKC,EAAKxI,EAAOE,EAAMD,gBAC7BiC,EAAK5E,KAAO,WAEhB,OALyC6E,UAAA6G,KJIpCV,GAAAA,KAAAA,0BAAmBA,yBAAQA,mBAEhC,kBAEE,WAAa7E,gBAAAA,MACX7D,KAAK6D,QAAUA,EA8CnB,OA5CEwF,qBAAA,SAAUjJ,EAAeE,GAQvB,IAPA,IAAMgJ,EAAS,GACXC,EAAI,EACJlJ,EAAO,EACPmJ,EAAQd,GAAWe,KACnBC,EAAS,GACTC,EAAc,EAEXJ,EAAInJ,EAAM3C,QAAQ,CACN,OAAb2C,EAAMmJ,IAAalJ,IACvB,IAAMuJ,EAAMxJ,EAAMyJ,OAAON,EAAG,GAC5B,GAAIC,IAAUd,GAAWe,MACvB,GAAY,OAARG,GAAwB,OAARA,EAAc,CAC5BF,GAAQJ,EAAOxM,KAAK,IAAIgN,GAAUJ,EAAQC,EAAavJ,EAAOE,EAAMD,IAExEsJ,EAAcJ,EACdA,GAAK,EACLC,EAAgB,QAHhBE,EAASE,GAGclB,GAAWxE,OAASwE,GAAWqB,IACtD,cAEG,CAAA,GAAIP,IAAUd,GAAWxE,QAAkB,OAAR0F,EAAc,CACtDF,GAAU,KACVJ,EAAOxM,KAAK,IAAIkN,GAAYN,EAAQC,EAAavJ,EAAOE,EAAMD,IAE9DqJ,EAAS,GACTC,EAFAJ,GAAK,EAGLC,EAAQd,GAAWe,KACnB,SACK,GAAY,OAARG,EAAc,CACvBF,GAAU,KACVJ,EAAOxM,KAAK,IAAImN,GAASP,EAAQC,EAAavJ,EAAOE,EAAMD,IAE3DqJ,EAAS,GACTC,EAFAJ,GAAK,EAGLC,EAAQd,GAAWe,KACnB,UAEFC,GAAUtJ,EAAMmJ,KAKlB,OAHIG,GAAQJ,EAAOxM,KAAK,IAAIgN,GAAUJ,EAAQC,EAAavJ,EAAOE,EAAMD,aK/CpCiJ,EAAiBzF,GACvDA,KAAYJ,QAAQ,GAASI,GAC7B,IAAIqG,GAAQ,EAEZZ,EAAO7E,QAAQ,SAACtE,EAAcqB,GAoBhC,IAA0BrB,EAAuC0D,EANxC1D,EAAuC0D,EAAvC1D,EAbFA,EAayC0D,EAbTA,GAAPqG,IAe3B,QAAf/J,EAAMzC,KAAuByC,EAAM2I,UAAYjF,EAAQP,cACxC,WAAfnD,EAAMzC,KAA0ByC,EAAM2I,UAAYjF,EAAQL,qBAA9D,IASF,SAAmBrD,EAAcsD,GAC/B,GAAKtD,GAAwB,SAAfA,EAAMzC,KAApB,CAEA,IAAMyM,EAAQ1G,EAAS,QAAU,aACjCtD,EAAMlE,MAAQkE,EAAMlE,MAAMsM,QAAQ4B,EAAO,KA5BrCrB,CAASQ,EAAO9H,EAAI,GAAIqC,EAAQJ,QAGf,QAAftD,EAAMzC,MAA+C,QAA5ByC,EAAmBO,OAAgBwJ,GAAQ,GACrD,QAAf/J,EAAMzC,MAA+C,WAA5ByC,EAAmBO,OAAmBwJ,GAAQ,GAcrD/J,EAZFA,EAYyC0D,EAZTA,GAAPqG,IAc5B,QAAf/J,EAAMzC,KAAuByC,EAAM4I,WAAalF,EAAQR,eACzC,WAAflD,EAAMzC,KAA0ByC,EAAM4I,WAAalF,EAAQN,sBAA/D,IAUF,SAAoBpD,EAAcsD,GAChC,GAAKtD,GAAwB,SAAfA,EAAMzC,KAApB,CAEA,IAAM0M,EAAS3G,EAAS,QAAU,gBAClCtD,EAAMlE,MAAQkE,EAAMlE,MAAMsM,QAAQ6B,EAAQ,KA5BtCrB,CAAUO,EAAO9H,EAAI,GAAIqC,EAAQJ,ULoCnC4G,CAAef,EAAQtJ,KAAK6D,SACrByF,sBMpDX,cAkBA,OAjBQgB,4BAAN,SAAuBC,EAAWtF,2GAChCsB,EAAOtB,EAAO,4CAEVuF,EAAO,OACOC,0BAAAlG,wBAAP5B,wBAEC,6BAAR+H,EAAAF,KAAc7H,EAAIgI,OAAO1F,kBAAzBuF,EAAAE,EAAQE,sBAER,0BAAiB/H,EAEf,MADAgI,EAAEC,aAAeN,EACXK,EAER,MAAMA,aAAajI,EAAciI,EAAI,IAAIjI,EAAYiI,EAAGlI,iBAR1C4B,iBAWlB,SAAOiG,cChBL5K,GAAY,CAChBmL,KAAM,SAACC,EAAGC,GAAM,OAAAD,IAAMC,GACtBC,KAAM,SAACF,EAAGC,GAAM,OAAAD,IAAMC,GACtBE,IAAK,SAACH,EAAGC,GAAM,OAAM,OAAND,GAAoB,OAANC,GAAkBA,EAAJD,GAC3CI,IAAK,SAACJ,EAAGC,GAAM,OAAM,OAAND,GAAoB,OAANC,GAAcD,EAAIC,GAC/CI,KAAM,SAACL,EAAGC,GAAM,OAAM,OAAND,GAAoB,OAANC,GAAmBA,GAALD,GAC5CM,KAAM,SAACN,EAAGC,GAAM,OAAM,OAAND,GAAoB,OAANC,GAAcD,GAAKC,GACjDM,SAAY,SAACP,EAAGC,GACd,QAAKD,IACoB,mBAAdA,EAAEvO,UACU,EAAhBuO,EAAEvO,QAAQwO,KAEnBO,IAAO,SAACR,EAAGC,GAAM,OAAAQ,GAAST,IAAMS,GAASR,IACzCS,GAAM,SAACV,EAAGC,GAAM,OAAAQ,GAAST,IAAMS,GAASR,cAG1BU,GAASC,EAAK3G,GAC5BsB,EAAOtB,EAAO,sCAGd,IAFA,IACIgE,EADE4C,EAAcC,EAEXtK,EAAI,EAAGA,EAAIqK,EAAYpO,OAAQ+D,IAAK,CAC3C,IAAMuK,EAAaF,EAAYrK,GACzBwK,EAAQ,IAAI/N,OAAO,KAAKgO,EAAsB/N,YAAW6N,EAAW7N,YAAW+N,EAAsB/N,aAC3G,GAAK+K,EAAQ2C,EAAI3C,MAAM+C,GAAS,CAC9B,IAAMhB,EAAIW,GAAQ1C,EAAM,GAAIhE,GAG5B,OAAOiH,EAFItM,GAAUqJ,EAAM,GAAGD,SAEpBgC,EADAW,GAAQ1C,EAAM,GAAIhE,KAKhC,GAAKgE,EAAQ2C,EAAI3C,MAAMkD,GAAqB,CAI1C,IAHA,IAAMC,EAAMC,GAAUpD,EAAM,GAAIhE,GAC1BqH,EAAOD,GAAUpD,EAAM,GAAIhE,GAC3BtG,EAAQ,GACLwH,EAAIiG,EAAKjG,GAAKmG,EAAMnG,IAC3BxH,EAAM7B,KAAKqJ,GAEb,OAAOxH,EAGT,OAAO0N,GAAUT,EAAK3G,YAGRoH,GAAWzO,EAAKqH,GAE9B,GADArH,EAAMA,GAAOA,EAAIoL,OACjB,CAEA,GhBIyBpL,EgBJHA,EhBKfoB,EAAYsH,KAAK1I,GgBJtB,gBhBmB0BA,GAC5B,IAAI2O,EAAM3O,EAAIqL,MAAM/J,GACpB,GAAIqN,EACF,OAAOC,OAAO5O,GAGhB,GADA2O,EAAM3O,EAAIqL,MAAM9J,GAEd,MAA6B,SAAtBvB,EAAI6O,cAGb,GADAF,EAAM3O,EAAIqL,MAAM7J,GAEd,OAAOxB,EAAI4I,MAAM,GAAI,GAEvB,MAAM,IAAIZ,UAAU,iBAAiBhI,kBgBhC5B8O,CAAqB9O,OhBGLA,EAQCA,EgBT1B,GhBS0BA,EgBTHA,EhBUhBqB,EAAaqH,KAAK1I,GgBTvB,OAAOqH,EAAMyB,IAAI9I,GAEnB,MAAM,IAAIgI,UAAU,gBAAgBhI,0BAGtB6N,GAAUnH,GACxB,OAAQqI,GAAQrI,YAGFqI,GAASrI,GACvB,OAAe,IAARA,GAAAA,MAA+BA,ECxDxC,OAEE,SAAasI,EAAQ3H,GACnB,IAAIgE,EAEJ,IADAnK,EAAY+N,UAAY,EAChB5D,EAAQnK,EAAYgO,KAAKF,IAAU,CACzC,IAAMvP,EAAI4L,EAAM,GACV5D,EAAI4D,EAAM,GAChBjJ,KAAK3C,GAAKgP,GAAUhH,EAAGJ,QCb3B,SAAa9E,GACXH,KAAKG,MAAQA,kBCaf,WAAaA,EAAiBmJ,EAAiByD,GAA/C,MACE1K,YAAMlC,SACNmC,EAAK5B,KAAOP,EAAMO,KAElB,IAAMsM,EAAOC,EAAIC,MAAM/M,EAAMO,aAC7B6F,EAAOyG,EAAM,OAAO7M,EAAMO,mBAC1B4B,EAAK0K,KAAOjQ,EAAkCiQ,GAC9C1K,EAAK0K,KAAKD,OAASA,EACfzK,EAAK0K,KAAKG,OACZ7K,EAAK0K,KAAKG,MAAMhN,EAAOmJ,KAkB7B,OAjCiC/G,OAkBzB0K,mBAAN,SAAchI,mGAGZ,OAFMpG,EAAO,IAAIuO,GAAKpN,KAAKG,MAAMgJ,KAAMlE,GAEZ,mBADrB+H,EAAOhN,KAAKgN,MACFrC,UACP,OAEUqC,EAAKrC,OAAO1F,EAAOpG,WACtC,SAAOzC,EADMsO,iBAGRuC,WAAP,SAAiBvM,EAAc2M,GAC7BJ,EAAIC,MAAMxM,GAAQ2M,GAEbJ,QAAP,WACEA,EAAIC,MAAQ,IA3BPD,QAA4C,MAJpBK,ICL3BC,GAAU,IAAItP,OAAO,GAAGuP,EAActP,OAAU,mBAQpD,WAAaN,EAAa6P,gBAAAA,MACxB,IAAMxE,EAAQyE,EAAmBZ,KAAKlP,GACtC2I,EAAO0C,EAAO,mBAAqBrL,GAEnC,IAAM8C,EAAOuI,EAAM,GACb0E,EAAU1E,EAAM,IAAM,GACtB+D,EAAOY,EAAOV,MAAMxM,GAC1B,IAAKsM,GAAQS,EAAe,MAAM,IAAI7H,UAAU,qBAAqBlF,GAErEV,KAAKU,KAAOA,EACZV,KAAKgN,KAAOA,YAASa,GAAK,OAAAA,GAC1B7N,KAAKmJ,KAAOnJ,KAAK8N,UAAUH,GAwB/B,OAtBEC,sBAAA,SAAWD,GAET,IADA,IAAI1E,EAAaE,EAAO,GAChBF,EAAQsE,GAAQT,KAAKa,EAAQ3E,SAAU,CAC7C,IAAM3D,EAAI4D,EAAM,GAEV8E,EADK,IAAI9P,OAAUoH,UAAU,KACfyH,KAAK7D,EAAM7I,OACL2N,GAAYA,EAASC,QAAU/E,EAAM+E,MAC3C7E,EAAKrM,KAAK,IAAIuI,OAAQ8D,EAAKrM,KAAKuI,GAEtD,OAAO8D,GAETyE,mBAAA,SAAQ3R,EAAYgJ,GAClB,IAAMkE,EAAOnJ,KAAKmJ,KAAKzH,IAAI,SAAAuM,GAAO,OAAA5B,GAAU4B,EAAKhJ,KAEjD,OADAkE,EAAK1D,QAAQxJ,GACN+D,KAAKgN,KAAKkB,MAAM,KAAM/E,IAExByE,WAAP,SAAiBlN,EAAMjB,GACrBmO,EAAOV,MAAMxM,GAAQjB,GAEhBmO,QAAP,WACEA,EAAOV,MAAQ,IAnCFU,QAA+B,sBCD9C,WAAatE,EAAsB6E,GAJ3BnO,cAA0C,GAKhDA,KAAKsJ,OAASA,EACdtJ,KAAKmO,WAAaA,EAgCtB,OA9BEC,eAAA,SAAI1N,EAAc2N,GAEhB,OADArO,KAAKsO,SAAS5N,GAAQ2N,EACfrO,MAEToO,oBAAA,SAASG,EAAeN,GACtB,IAAMO,EAAIxO,KAAKsO,SAASC,GACxB,GAAiB,mBAANC,EAET,OADAA,EAAEP,IACK,GAGXG,kBAAA,WAEE,IAAIjO,EACJ,IAFAH,KAAKyO,QAAQ,UAELzO,KAAK0O,gBAAkBvO,EAAQH,KAAKsJ,OAAOqF,UACjD,KAAI3O,KAAKyO,QAAQ,QAAStO,IACP,QAAfA,EAAMzC,MACNsC,KAAKyO,QAAQ,OAAOtO,EAAMO,KAAQP,IADtC,CAIA,IAAMyO,EAAW5O,KAAKmO,WAAWhO,EAAOH,KAAKsJ,QAC7CtJ,KAAKyO,QAAQ,WAAYG,GAG3B,OADK5O,KAAK0O,eAAe1O,KAAKyO,QAAQ,OAC/BzO,MAEToO,iBAAA,WAEE,OADApO,KAAK0O,eAAgB,EACd1O,yBCnCT,WAAapC,EAAa6P,GACxB,ItByDwB7P,EsBzDpBqL,GtByDoBrL,EsBzDOA,EtB0D1B3B,EAAM6Q,KAAKlP,IsBzDhB2I,EAAO0C,EAAO,yBAAyBrL,GAEvC,IAAMiR,EAAU5F,EAAM,GACtBrL,EAAMA,EAAIiM,OAAOZ,EAAM+E,MAAQ/E,EAAM,GAAGxL,QAGxC,IADA,IAAMqR,EAAU,GACR7F,EAAQ8F,EAAejC,KAAKlP,IAClCkR,EAAQhS,KAAK,CAACmM,EAAM,GAAGD,SAGzBhJ,KAAK6O,QAAUA,EACf7O,KAAK8O,QAAUA,EAAQpN,IAAI,SAAA9D,GAAO,OAAA,IAAIgQ,GAAOhQ,EAAK6P,KAOtD,OALEuB,kBAAA,SAAO/J,GACL,OAAOjF,KAAK8O,QAAQzK,OAClB,SAAC4K,EAAMxP,GAAW,OAAAA,EAAOkL,OAAOsE,EAAMhK,IACtC0G,GAAQ3L,KAAK6O,QAAS5J,yBClB1B,WAAa9E,EAAoBsN,GAAjC,MACEpL,YAAMlC,gBACNmC,EAAKrG,MAAQ,IAAIiT,GAAM/O,EAAMlE,MAAOwR,KAMxC,OAVoClL,OAM5B4M,mBAAN,SAAclK,2FACC,SAAMjF,KAAK/D,MAAMA,MAAMgJ,WACpC,SAAO7I,EADMsO,oBAPmB4C,mBCDlC,WAAanN,GAAb,MACEkC,YAAMlC,gBACNmC,EAAK1E,IAAMuC,EAAMlE,QAKrB,OAT6BsG,OAMrByM,mBAAN,4EACE,SAAOhP,KAAKpC,aAPa0P,kBCS3B,WAAaP,GACX/M,KAAK+M,OAASA,EA0BlB,OAxBEqC,kBAAA,SAAO9F,GAGL,IAFA,IAAInJ,EACEoK,EAAY,GACVpK,EAAQmJ,EAAOqF,SACrBpE,EAAUzN,KAAKkD,KAAKmO,WAAWhO,EAAOmJ,IAExC,OAAOiB,GAET6E,uBAAA,SAAYjP,EAAckP,GACxB,IACE,MAAmB,QAAflP,EAAMzC,KACD,IAAIuP,GAAI9M,EAAmBkP,EAAcrP,KAAK+M,QAEpC,WAAf5M,EAAMzC,KACD,IAAIyR,GAAOhP,EAAsBH,KAAK+M,OAAOlJ,QAAQH,gBAEvD,IAAI+F,GAAKtJ,GAChB,MAAOmP,GACP,MAAM,IAAI5M,EAAW4M,EAAGnP,KAG5BiP,wBAAA,SAAa9F,GAAb,WACE,OAAO,IAAI8E,GAAY9E,EAAQ,SAACnJ,EAAOmJ,GAAW,OAAAhH,EAAK6L,WAAWhO,EAAOmJ,WClCvEiG,GAAK,IAAItR,OAAO,IAAIK,EAAWJ,0BAEtB,CACbiP,MAAO,SAAUhN,GACf,IAAM8I,EAAQ9I,EAAMgJ,KAAKF,MAAMsG,IAC/BhJ,EAAO0C,EAAO,iBAAiB9I,EAAMwI,KACrC3I,KAAKpD,IAAMqM,EAAM,GACjBjJ,KAAK/D,MAAQgN,EAAM,IAErB0B,OAAQ,SAAU1F,GAChB,IAAMjB,EAAM,IAAIwL,GAGhB,OAFAxL,EAAIhE,KAAKpD,KAAOoD,KAAK+M,OAAOV,UAAUrM,KAAK/D,MAAOgJ,GAClDA,EAAMnI,KAAKkH,GACJ6C,QAAQC,QAAQ,eCGX2I,GAAWC,EAAUtS,GACnC,IAAIuS,EAAoB9I,QAAQC,QAAQ,QAClC8I,EAAS,GAMf,OALAF,EAASjL,QAAQ,SAAUoL,EAAMC,GAC/BH,EAAMA,EACHI,KAAK,WAAM,OAAA3S,EAASyS,EAAMC,EAAKJ,KAC/BK,KAAK,SAAAlC,GAAK,OAAA+B,EAAO9S,KAAK+Q,OAEpB8B,EAAII,KAAK,WAAM,OAAAH,ICrBxB,IAAML,GAAK,IAAItR,OAAO,KAAKK,EAAWJ,sBAChCjC,EAAMiC,kBACAW,EAAKX,sCAELW,EAAKX,qBAiFF,CAAEiP,MA/EjB,SAAgB6C,EAAUX,GAA1B,IAUM9F,SATEN,EAAQsG,GAAGzC,KAAKkD,EAAS7G,MAC/B5C,EAAO0C,EAAO,gBAAgB+G,EAASrH,KACvC3I,KAAKvB,SAAWwK,EAAM,GACtBjJ,KAAKiQ,WAAahH,EAAM,GACxBjJ,KAAKkQ,WAAajH,EAAM,GAExBjJ,KAAKuK,UAAY,GACjBvK,KAAKmQ,cAAgB,GAGrB,IAAMC,EAASpQ,KAAK+M,OAAOsD,OAAOC,YAAYjB,GAC3CkB,GAAG,QAAS,WAAM,OAAChH,EAAIjH,EAAKiI,YAC5BgG,GAAG,WAAY,WAAM,OAAChH,EAAIjH,EAAK6N,gBAC/BI,GAAG,aAAc,WAAM,OAAAH,EAAO/O,SAC9BkP,GAAG,WAAY,SAAA5N,GAAO,OAAA4G,EAAEzM,KAAK6F,KAC7B4N,GAAG,MAAO,WACT,MAAM,IAAIzQ,MAAM,OAAOkQ,EAASrH,qBAGpCyH,EAAOhP,SA2DeuJ,OAxDxB,SAAuB1F,EAAOpG,kHAU5B,OAPK5B,EAFDgT,EAAatE,GAAQ3L,KAAKiQ,WAAYhL,MAGpCjJ,EAASiU,IAAmC,EAApBA,EAAWxS,OACrCwS,EAAa,CAACA,GACLpT,EAASoT,KAClBA,EAAatU,OAAO6U,KAAKP,GAAYvO,IAAI,SAAC9E,GAAQ,MAAA,CAACA,EAAKqT,EAAWrT,QAGlEK,EAAQgT,IAAgBA,EAAWxS,QAIlCgT,EAAS5R,EAAK4R,QAAU,EACxBC,OAAwBlL,IAAf3G,EAAK6R,MAAuBT,EAAWxS,OAASoB,EAAK6R,MAEpET,EAAaA,EAAWzJ,MAAMiK,EAAQA,EAASC,GAC3C1Q,KAAKkQ,UAAUD,EAAWU,UAExBxM,EAAW8L,EAAWvO,IAAI,SAACmO,EAAMrO,GACrC,IAAMwC,EAAM,GAWZ,OAVAA,EAAI1B,EAAK7D,UAAYoR,EACrB7L,EAAa,QAAI,CACf4M,MAAa,IAANpP,EACPwM,MAAOxM,EAAI,EACXqP,OAAQrP,EACRjE,KAAMiE,IAAMyO,EAAWxS,OAAS,EAChCA,OAAQwS,EAAWxS,OACnBqT,OAAQb,EAAWxS,OAAS+D,EAC5BuP,QAASd,EAAWxS,OAAS+D,EAAI,GAE5BwC,IAGLwG,EAAO,GACPwG,GAAW,KACTvB,GAAUtL,EAAU,SAAMpD,gGAC9B,GAAIiQ,EAAU,UAEd/L,EAAMnI,KAAKiE,oBAED,6BAAR2J,EAAAF,KAAcxK,KAAK+M,OAAOkE,SAASC,gBAAgBlR,KAAKuK,UAAWtF,kBAAnEuF,EAAAE,EAAQE,sBAER,4BAAiB/H,GAKV,MAAMgI,SAJXL,GAAQK,EAAEC,aACQ,UAAdD,EAAE5I,UACJ+O,GAAW,uBAIjB/L,EAAMS,IAAI3E,mBAxCHf,KAAK+M,OAAOkE,SAASC,gBAAgBlR,KAAKmQ,cAAelL,WA0ClE,OAhBAyF,YAgBOF,UClFH+E,GAAK,IAAItR,OAAO,IAAIK,EAAWJ,eAEtB,CACbiP,MAAO,SAAU6C,EAAoBX,GAA9B,WACCpG,EAAQ+G,EAAS7G,KAAKF,MAAMsG,IAClChJ,EAAO0C,EAAU+G,EAAS7G,8BAE1BnJ,KAAKvB,SAAWwK,EAAM,GACtBjJ,KAAKuK,UAAY,GAEjB,IAAM6F,EAASpQ,KAAK+M,OAAOsD,OAAOC,YAAYjB,GAC9Ce,EAAOG,GAAG,iBAAkB,WAAM,OAAAH,EAAO/O,SACtCkP,GAAG,WAAY,SAAA5N,GAAO,OAAAL,EAAKiI,UAAUzN,KAAK6F,KAC1C4N,GAAG,MAAO,WACT,MAAM,IAAIzQ,MAAM,OAAOkQ,EAASrH,qBAEpCyH,EAAOhP,SAETuJ,OAAQ,SAAgB1F,mGACT,SAAMjF,KAAK+M,OAAOkE,SAASC,gBAAgBlR,KAAKuK,UAAWtF,kBAAlEuF,EAAOE,UACP1G,EAAM,IAAImN,IACZnR,KAAKvB,UAAY+L,EACrBvF,EAAMnI,KAAKkH,iBC3BA,CACbmJ,MAAO,SAAU6C,EAAUX,GAApB,WACLrP,KAAKoR,KAAOpB,EAAS7G,KACrBnJ,KAAKqR,MAAQ,GACbrR,KAAKmQ,cAAgB,GAErB,IAAI5G,EAAI,GACF6G,EAASpQ,KAAK+M,OAAOsD,OAAOC,YAAYjB,GAC3CkB,GAAG,WAAY,SAAApQ,GACdmC,EAAK+O,MAAMvU,KAAK,CACdwH,IAAKnE,EAAMgJ,KACXoB,UAAWhB,EAAI,OAGlBgH,GAAG,WAAY,WAAM,OAAChH,EAAIjH,EAAK6N,gBAC/BI,GAAG,cAAe,WAAM,OAAAH,EAAO/O,SAC/BkP,GAAG,WAAY,SAAA5N,GAAO,OAAA4G,EAAEzM,KAAK6F,KAC7B4N,GAAG,MAAO,WACT,MAAM,IAAIzQ,MAAM,OAAOkQ,EAASrH,qBAGpCyH,EAAOhP,SAGTuJ,OAAQ,SAAU1F,GAChB,IAAK,IAAIzD,EAAI,EAAGA,EAAIxB,KAAKqR,MAAM5T,OAAQ+D,IAAK,CAC1C,IAAM8P,EAAStR,KAAKqR,MAAM7P,GAG1B,GAFYmK,GAAQ2F,EAAOhN,IAAKW,KACnB0G,GAAQ3L,KAAKoR,KAAMnM,GAE9B,OAAOjF,KAAK+M,OAAOkE,SAASC,gBAAgBI,EAAO/G,UAAWtF,GAGlE,OAAOjF,KAAK+M,OAAOkE,SAASC,gBAAgBlR,KAAKmQ,cAAelL,QCnCrD,CACbkI,MAAO,SAAU6C,EAAUX,GACzB,IAAMe,EAASpQ,KAAK+M,OAAOsD,OAAOC,YAAYjB,GAC9Ce,EACGG,GAAG,QAAS,SAAApQ,GACQ,eAAfA,EAAMO,MAAuB0P,EAAO/O,SAEzCkP,GAAG,MAAO,WACT,MAAM,IAAIzQ,MAAM,OAAOkQ,EAASrH,qBAEpCyH,EAAOhP,UCLLmQ,GAAe,UACfC,GAAS,IAAIvT,OAAO,YAAYhC,EAAMiC,eAE7B,CACbiP,MAAO,SAAUhN,GACf,IAAI8I,EAAQsI,GAAazE,KAAK3M,EAAMgJ,MAChCF,IACFjJ,KAAKyR,YAAcxI,EAAM,KAG3BA,EAAQhN,EAAM6Q,KAAK3M,EAAMgJ,SAEvBnJ,KAAK/D,MAAQgN,EAAM,KAGrBA,EAAQuI,GAAO1E,KAAK3M,EAAMgJ,SAExBnJ,KAAK0R,KAAOzI,EAAM,KAGtB0B,OAAQ,SAAgB1F,EAAOpG,kHAEzBoG,EAAMhB,KAAKb,gBACThE,EAAW0N,KAAK9M,KAAK/D,QACjB2S,EAAW5O,KAAK/D,MAAMuK,MAAM,GAAI,MACrBxG,KAAK+M,OAAO4E,eAAe/C,EAAU3J,EAAM2M,SAAU3M,EAAMhB,kCAA5EwD,EAAWiD,sBAEXjD,EAAW4E,GAAUrM,KAAK/D,MAAOgJ,uCAGnCwC,EAAWzH,KAAKyR,6BAYA,OAVlBlL,EAAOkB,EAAU,sCAEXoK,EAAe5M,EAAM6M,OACrBC,EAAkB9M,EAAM+M,UAE9B/M,EAAM6M,OAAS,GACf7M,EAAM+M,UAAYhP,GAAUkB,OACxBlE,KAAK0R,OACP7S,EAAK4I,GAAY4E,GAAUrM,KAAK0R,KAAMzM,OAEhBjF,KAAK+M,OAAOkF,YAAYxK,EAAUxC,EAAMhB,cAEnD,OAFPsG,EAAYG,SAClBzF,EAAMnI,KAAK+B,MACQmB,KAAK+M,OAAOkE,SAASC,gBAAgB3G,EAAWtF,WAInE,OAJMuF,EAAOE,SACbzF,EAAMS,IAAI7G,GACVoG,EAAM6M,OAASD,EACf5M,EAAM+M,UAAYD,KACXvH,aC/CI,CACb2C,MAAO,SAAUhN,GACf,IAAM8I,EAAQ9I,EAAMgJ,KAAKF,MAAM3K,GAC/BiI,EAAO0C,EAAO,sBAAsB9I,EAAMgJ,MAC1CnJ,KAAKvB,SAAWwK,EAAM,IAExB0B,OAAQ,SAAU1F,GAChB,IAAIlE,EAAUkE,EAAMC,eAClBlF,KAAKvB,SACL,SAAAuF,GACE,QAASA,aAAemN,IAAmBnN,aAAewL,MAU9D,OAPKzO,IACHA,EAAU,IAAImR,GACdjN,EAAMQ,QAAQ1E,IAEsB,iBAA3BA,EAAQf,KAAKvB,YACtBsC,EAAQf,KAAKvB,UAAY,KAElBsC,EAAQf,KAAKvB,YCtBpB0T,GAAU,IAAIlU,OAAO,QAAQmU,EAAOlU,4BACpCmU,GAAe,IAAIpU,OAAOmU,EAAOlU,OAAQ,QAEhC,CACbiP,MAAO,SAAU6C,GACf,IAAI/G,EAAQkJ,GAAQrF,KAAKkD,EAAS7G,MAClC5C,EAAO0C,EAAO,gBAAgB+G,EAASrH,KAEvC3I,KAAKsS,MAAQrJ,EAAM,IAAM,GACzB,IAAMsJ,EAAatJ,EAAM,GAIzB,IAFAjJ,KAAKuS,WAAa,GAEVtJ,EAAQoJ,GAAavF,KAAKyF,IAChCvS,KAAKuS,WAAWzV,KAAKmM,EAAM,IAE7B1C,EAAOvG,KAAKuS,WAAW9U,OAAQ,qBAAqBuS,EAASrH,MAG/DgC,OAAQ,SAAU1F,GAChB,IACMuN,EAAc,SADNnG,GAAUrM,KAAKsS,MAAOrN,OACIjF,KAAKuS,WAAWvQ,KAAK,KAEvDyQ,EAASxN,EAAMhB,KAAKwO,OAASxN,EAAMhB,KAAKwO,QAAU,GACpD3C,EAAM2C,EAAOD,QAELhN,IAARsK,IACFA,EAAM2C,EAAOD,GAAe,GAG9B,IAAM1M,EAAY9F,KAAKuS,WAAWzC,GAIlC,OAHAA,GAAOA,EAAM,GAAK9P,KAAKuS,WAAW9U,OAClCgV,EAAOD,GAAe1C,EAEfzD,GAAUvG,EAAWb,QCpCjB,CACbkI,MAAO,SAAU6C,EAAUX,GAApB,IAID9F,SAHJvJ,KAAK0S,SAAW,GAChB1S,KAAKmQ,cAAgB,GAGrB,IAAMC,EAASpQ,KAAK+M,OAAOsD,OAAOC,YAAYjB,GAC3CkB,GAAG,QAAS,WAAM,OAAAjO,EAAKoQ,SAAS5V,KAAK,CACpCsU,KAAMpB,EAAS7G,KACfoB,UAAYhB,EAAI,OAEjBgH,GAAG,YAAa,SAAApQ,GACfmC,EAAKoQ,SAAS5V,KAAK,CACjBsU,KAAMjR,EAAMgJ,KACZoB,UAAWhB,EAAI,OAGlBgH,GAAG,WAAY,WAAM,OAAChH,EAAIjH,EAAK6N,gBAC/BI,GAAG,YAAa,WAAM,OAAAH,EAAO/O,SAC7BkP,GAAG,WAAY,SAAA5N,GAAO,OAAA4G,EAAEzM,KAAK6F,KAC7B4N,GAAG,MAAO,WACT,MAAM,IAAIzQ,MAAM,OAAOkQ,EAASrH,qBAGpCyH,EAAOhP,SAGTuJ,OAAQ,SAAU1F,GAChB,IAAqB,QAAAyF,EAAA1K,KAAK0S,SAALnO,WAAAA,IAAe,CAA/B,IAAM+M,OAET,GAAI7F,GADSE,GAAQ2F,EAAOF,KAAMnM,IAEhC,OAAOjF,KAAK+M,OAAOkE,SAASC,gBAAgBI,EAAO/G,UAAWtF,GAGlE,OAAOjF,KAAK+M,OAAOkE,SAASC,gBAAgBlR,KAAKmQ,cAAelL,QChCrD,CACbkI,MAAO,SAAUhN,GACf,IAAM8I,EAAQ9I,EAAMgJ,KAAKF,MAAM3K,GAC/BiI,EAAO0C,EAAO,sBAAsB9I,EAAMgJ,MAC1CnJ,KAAKvB,SAAWwK,EAAM,IAExB0B,OAAQ,SAAU1F,GAChB,IAAIlE,EAAUkE,EAAMC,eAClBlF,KAAKvB,SACL,SAAAuF,GACE,QAASA,aAAemN,IAAmBnN,aAAewL,MAGzDzO,IACHA,EAAU,IAAI4R,GACd1N,EAAMQ,QAAQ1E,IAEsB,iBAA3BA,EAAQf,KAAKvB,YACtBsC,EAAQf,KAAKvB,UAAY,GAE3B,IAAM6F,EAAMvD,EAAQf,KAAKvB,UAEzB,OADAsC,EAAQf,KAAKvB,YACN6F,ICrBLiN,GAAe,SAEN,CACbpE,MAAO,SAAUhN,EAAOkP,GACtB,IAAIpG,EAAQsI,GAAazE,KAAK3M,EAAMgJ,MAChCF,IACFjJ,KAAK4S,aAAe3J,EAAM,KAG5BA,EAAQmJ,EAAOtF,KAAK3M,EAAMgJ,SAExBnJ,KAAK6S,OAAS5J,EAAM,IAGtBjJ,KAAK8S,KAAO9S,KAAK+M,OAAOsD,OAAOlD,MAAMkC,IAEvC1E,OAAQ,SAAgB1F,EAAOpG,uGAQhB,OAJb0H,EAHMsM,EAAS5N,EAAMhB,KAAKb,gBACtBiJ,GAAUrM,KAAK6S,OAAQ5N,GACvBjF,KAAK4S,aACM,2CAGf3N,EAAM+M,UAAYhP,GAAU+P,SACT/S,KAAK+M,OAAOkE,SAASC,gBAAgBlR,KAAK8S,KAAM7N,WAIjD,OAJZuF,EAAOE,cACYlF,IAArBP,EAAM6M,OAAO,MACf7M,EAAM6M,OAAO,IAAMtH,MAEGxK,KAAK+M,OAAOkF,YAAYY,EAAQ5N,EAAMhB,cAG9C,OAHVsG,EAAYG,SAClBzF,EAAMnI,KAAK+B,GACXoG,EAAM+M,UAAYhP,GAAUkB,UACNlE,KAAK+M,OAAOkE,SAASC,gBAAgB3G,EAAWtF,WAEtE,OAFM+N,EAAUtI,SAChBzF,EAAMS,IAAI7G,MACHmU,aCpCI,CACb7F,MAAO,SAAUhN,EAAOkP,GAAjB,WACCpG,EAAQ,MAAM6D,KAAK3M,EAAMgJ,MAC/BnJ,KAAKiT,MAAQhK,EAAQA,EAAM,GAAK,GAEhCjJ,KAAK8S,KAAO,GACZ,IAAM1C,EAASpQ,KAAK+M,OAAOsD,OAAOC,YAAYjB,GAC3CkB,GAAG,eAAgB,WAAM,OAAAH,EAAO/O,SAChCkP,GAAG,WAAY,SAAA5N,GAAO,OAAAL,EAAKwQ,KAAKhW,KAAK6F,KACrC4N,GAAG,MAAO,WACT,MAAM,IAAIzQ,MAAM,OAAOK,EAAMwI,qBAEjCyH,EAAOhP,SAETuJ,OAAQ,SAAgB1F,iHAEQO,KADxB0N,EAAejO,EAAM6M,OAAO9R,KAAKiT,eAEnCvI,EAAAwI,gBACA,SAAMlT,KAAK+M,OAAOkE,SAASC,gBAAgBlR,KAAK8S,KAAM7N,WAAtDyF,EAAAE,0BAEJ,OAJMJ,IAIFvF,EAAM+M,YAAchP,GAAU+P,OAChC9N,EAAM6M,OAAO9R,KAAKiT,OAASzI,KACpB,QAEFA,aC1BI,CACb2C,MAAO,SAAU6C,EAAUX,GAApB,WACLrP,KAAKsJ,OAAS,GAEd,IAAM8G,EAASpQ,KAAK+M,OAAOsD,OAAOC,YAAYjB,GAC9Ce,EACGG,GAAG,QAAS,SAAApQ,GACQ,WAAfA,EAAMO,KAAmB0P,EAAO/O,OAC/BiB,EAAKgH,OAAOxM,KAAKqD,KAEvBoQ,GAAG,MAAO,WACT,MAAM,IAAIzQ,MAAM,OAAOkQ,EAASrH,qBAEpCyH,EAAOhP,SAETuJ,OAAQ,WACN,OAAO3K,KAAKsJ,OAAO5H,IAAI,SAAAvB,GAAS,OAAAA,EAAMwI,MAAK3G,KAAK,MCX9CuN,GAAK,IAAItR,OAAO,KAAKK,EAAWJ,sBAChCjC,EAAMiC,kBACAW,EAAKX,cCYXiV,GAA2C,CAC/CC,UAAQC,IAAOC,GAAKC,WAASC,KAAQC,GAAMC,WAASC,WAASC,aAAWC,aAAWC,SAAOC,GAAMC,GAAInB,UAAQI,SAAOtK,OAAKsL,SDX3G,CACb9G,MAAO,SAAU6C,EAAUX,GAApB,IAQD9F,SAPEN,EAAQsG,GAAGzC,KAAKkD,EAAS7G,MAC/B5C,EAAO0C,EAAO,gBAAgB+G,EAASrH,KAEvC3I,KAAKvB,SAAWwK,EAAM,GACtBjJ,KAAKiQ,WAAahH,EAAM,GACxBjJ,KAAKuK,UAAY,GAGjB,IAAM6F,EAASpQ,KAAK+M,OAAOsD,OAAOC,YAAYjB,GAC3CkB,GAAG,QAAS,WAAM,OAAChH,EAAIjH,EAAKiI,YAC5BgG,GAAG,kBAAmB,WAAM,OAAAH,EAAO/O,SACnCkP,GAAG,WAAY,SAAA5N,GAAO,OAAA4G,EAAEzM,KAAK6F,KAC7B4N,GAAG,MAAO,WACT,MAAM,IAAIzQ,MAAM,OAAOkQ,EAASrH,qBAGpCyH,EAAOhP,SAGTuJ,OAAQ,SAAgB1F,EAAOpG,oHAe7B,OAdIoR,EAAatE,GAAQ3L,KAAKiQ,WAAYhL,IAAU,GAC9CwL,EAAS5R,EAAK4R,QAAU,EACxBC,OAAwBlL,IAAf3G,EAAK6R,MAAuBT,EAAWxS,OAASoB,EAAK6R,MAEpET,EAAaA,EAAWzJ,MAAMiK,EAAQA,EAASC,GACzCwD,EAAOrV,EAAKqV,MAAQjE,EAAWxS,OAC/B0G,EAAW8L,EAAWvO,IAAI,SAAAmO,GAC9B,IAAM7L,EAAM,GAEZ,OADAA,EAAI1B,EAAK7D,UAAYoR,EACd7L,IAILwG,EAAO,MACLiF,GAAUtL,EAAU,SAAOpD,EAAS+O,gGAYhC,OAXRqE,EAAMlT,KAAKmT,MAAMtE,EAAMoE,GAAQ,EAEnB,KADNG,EAAOvE,EAAMoE,EAAQ,KAEb,IAARC,IACF3J,GAAQ,SAEVA,GAAQ,iBAAiB2J,QAG3B3J,GAAQ,iBAAiB6J,OACzBpP,EAAMnI,KAAKiE,GACX2J,EAAAF,KAAcxK,KAAK+M,OAAOkE,SAASC,gBAAgBlR,KAAKuK,UAAWtF,WAGnE,OAHAuF,EAAAE,EAAQE,SACRJ,GAAQ,QACRvF,EAAMS,IAAI3E,MACHyJ,kBAKT,OApBAE,SAiBU,EAANyJ,IACF3J,GAAQ,YAEHA,UC7CyH8J,OClBrH,CACbnH,MAAO,SAAU6C,EAAUX,GAApB,IAGD9F,SAFJvJ,KAAKuK,UAAY,GACjBvK,KAAKmQ,cAAgB,GAErB,IAAMC,EAASpQ,KAAK+M,OAAOsD,OAAOC,YAAYjB,GAC3CkB,GAAG,QAAS,WACXhH,EAAIjH,EAAKiI,UACTjI,EAAK8O,KAAOpB,EAAS7G,OAEtBoH,GAAG,WAAY,WAAM,OAAChH,EAAIjH,EAAK6N,gBAC/BI,GAAG,gBAAiB,WAAM,OAAAH,EAAO/O,SACjCkP,GAAG,WAAY,SAAA5N,GAAO,OAAA4G,EAAEzM,KAAK6F,KAC7B4N,GAAG,MAAO,WACT,MAAM,IAAIzQ,MAAM,OAAOkQ,EAASrH,qBAGpCyH,EAAOhP,SAGTuJ,OAAQ,SAAU1F,GAEhB,OAAO0H,GADMhB,GAAQ3L,KAAKoR,KAAMnM,IAE5BjF,KAAK+M,OAAOkE,SAASC,gBAAgBlR,KAAKuK,UAAWtF,GACrDjF,KAAK+M,OAAOkE,SAASC,gBAAgBlR,KAAKmQ,cAAelL,KDN2EsP,MElB7H,CACb5J,OAAQ,4EACN,MAAM,IAAI9H,EAAiB,eFgB6H2R,SGlB7I,CACb7J,OAAQ,4EACN,MAAM,IAAI9H,EAAiB,mBCJzB4R,GAAY,CAChBC,IAAK,QACLtJ,IAAK,OACLD,IAAK,OACLwJ,IAAK,QACLC,IAAK,SAEDC,GAAc,CAClBC,QAAS,IACTC,OAAQ,IACRC,OAAQ,IACRC,QAAS,IACTC,QAAS,KAGX,SAASC,GAAQvX,GACf,OAAOG,OAAOH,GAAK2K,QAAQ,aAAc,SAAA6M,GAAK,OAAAX,GAAUW,YAO3C,CACbD,OAAUA,GACVE,YAAe,SAAAzX,GAAO,OAAAuX,GALfpX,OAK+BH,GALnB2K,QAAQ,yBAA0B,SAAA6M,GAAK,OAAAP,GAAYO,OAMtEE,cAAiB,SAAAjQ,GAAK,OAAAA,EAAEkD,QAAQ,MAAO,WACvCgN,WAAc,SAAAlQ,GAAK,OAAAtH,OAAOsH,GAAGkD,QAAQ,4DAA6D,SC3BrF,CACbiN,OAAU,SAACnQ,EAAG4I,GAAQ,OAAA5I,EAAI4I,GAC1BwH,QAAW,SAACpQ,EAAG4I,GAAQ,OAAAA,EAAM5I,GAC7BqQ,WAAc,SAAA9X,GAAO,OAAAG,OAAOH,GAAK+X,OAAO,GAAGC,cAAgBhY,EAAI4I,MAAM,IACrEqP,OAAU,SAACxQ,EAAG4I,GAAQ,OAAAlS,MAAMH,UAAUia,OAAO3Z,KAAKmJ,EAAG4I,IACrD6H,OAAU,SAAAzQ,GAAK,OAAAtH,OAAOsH,GAAGkD,QAAQ,OAAQ,KACzCwN,SAAY,SAAA1Q,GAAK,OAAAA,EAAEoH,eACnBuJ,OAAU,SAAApY,GAAO,OAAAG,OAAOH,GAAKgY,eAC7BK,OAAU,SAAC5Q,EAAG4I,GAAQ,OAAA5I,EAAErE,MAAMiN,GAAKjM,KAAK,KACxCkU,aAAgB,SAAC7Q,EAAG2F,GAAM,OAAA3F,EAAEkD,QAAQyC,EAAG,KACvCzC,QAAW,SAAClD,EAAG8Q,EAASC,GACtB,OAAArY,OAAOsH,GAAGrE,MAAMmV,GAASnU,KAAKoU,IAChCC,cAAiB,SAAChR,EAAGiR,EAAMC,GAAS,OAAAxY,OAAOsH,GAAGkD,QAAQ+N,EAAMC,IAC5DC,OAAU,SAAA5Y,GAAO,OAAAG,OAAOH,GAAK2K,QAAQ,OAAQ,KAC7CvH,MAAS,SAACqE,EAAG4I,GAAQ,OAAAlQ,OAAOsH,GAAGrE,MAAMiN,IACrCwI,MAAS,SAACpR,GAAM,OAAAtH,OAAOsH,GAAG2D,QAC1B0N,eAAkB,SAAArR,GAAK,OAAAtH,OAAOsH,GAAGkD,QAAQ,MAAO,KAChDoO,SAAY,SAACtR,EAAG2F,EAAG4L,GAIjB,OAFAA,OAAWpR,IAANoR,EAAmB,MAAQA,EAChC5L,EAAIA,GAAK,IAFT3F,EAAItH,OAAOsH,IAGL5H,QAAUuN,EAAU3F,EACnBA,EAAEwE,OAAO,EAAGmB,EAAI4L,EAAEnZ,QAAUmZ,GAErCC,cAAiB,SAACxR,EAAG2F,EAAG4L,QACZpR,IAANoR,IAAiBA,EAAI,OACzB,IAAMpZ,EAAM6H,EAAErE,MAAM,KAChB2O,EAAMnS,EAAIgJ,MAAM,EAAGwE,GAAGhJ,KAAK,KAE/B,OADIxE,EAAIC,OAASuN,IAAG2E,GAAOiH,GACpBjH,OC7BI,CACbmH,IAAO,SAAAzR,GAAK,OAAApE,KAAK6V,IAAIzR,IACrB0R,KAAQ,SAAA1R,GAAK,OAAApE,KAAK8V,KAAK1R,IACvB2R,WAAc,SAAC3R,EAAG4I,GAAQ,OAAA5I,EAAI4I,GAC9BmG,MAAS,SAAA/O,GAAK,OAAApE,KAAKmT,MAAM/O,IACzB4R,MAASC,GAAU,SAAC7R,EAAG4I,GAAQ,OAAA5I,EAAI4I,IACnCkJ,OAAUD,GAAU,SAAC7R,EAAG4I,GAAQ,OAAA5I,EAAI4I,IACpCmJ,MAAS,SAAC/R,EAAG4I,GACX,IAAMoJ,EAAMpW,KAAKqW,IAAI,GAAIrJ,GAAO,GAChC,OAAOhN,KAAKmW,MAAM/R,EAAIgS,GAAOA,GAE/BE,KAAQL,GAAU,SAAC7R,EAAG4I,GAAQ,OAAAzB,OAAOnH,GAAKmH,OAAOyB,KACjDuJ,MAAS,SAACnS,EAAG4I,GAAQ,OAAA5I,EAAI4I,IAG3B,SAASwJ,GAAUpS,GACjB,IAAMkE,EAAIxL,OAAOsH,GAAGrE,MAAM,KAC1B,OAAmB,EAAXuI,EAAE9L,OAAc8L,EAAE,GAAG9L,OAAS,EAGxC,SAASyZ,GAAW7I,GAClB,OAAO,SAACrD,EAAGC,GACT,IAAMyM,EAAIzW,KAAKC,IAAIuW,GAASzM,GAAIyM,GAASxM,IACzC,OAAOoD,EAAGrD,EAAGC,GAAG0M,QAAQD,WCvBb,CACbE,WAAc,SAAA/J,GAAK,OAAAA,EAAE7M,MAAM,KAAKU,IAAImW,oBAAoB7V,KAAK,MAC7D8V,WAAc,SAAAjK,GAAK,OAAAA,EAAE7M,MAAM,KAAKU,IAAIqW,oBAAoB/V,KAAK,UCAhD,CACbA,KAAQ,SAACqD,EAAG4I,GAAQ,OAAA5I,EAAErD,UAAawD,IAARyI,EAAoB,IAAMA,IACrD1Q,KAAQ,SAAA8H,GAAK,OAAA9H,EAAK8H,IAClBuL,MAAS,SAAAvL,GAAK,OAAAA,EAAE,IAChB3D,IAAO,SAAClE,EAAKyQ,GAAQ,OAAAzQ,EAAIkE,IAAI,SAAA2D,GAAK,OAAAA,EAAE4I,MACpC0C,QAAW,SAAAtL,GAAK,OAAAA,EAAEsL,WAClBqH,KAAQ,SAAC3S,EAAG4I,GAAQ,OAAA5I,EAAE2S,KAAK/J,IAC3BhI,KAAQ,SAAAZ,GAAK,OAAAA,EAAE5H,QACf+I,MAAS,SAACnB,EAAGxE,EAAOpD,GAElB,YADe+H,IAAX/H,IAAsBA,EAAS,GAC5B4H,EAAEmB,MAAM3F,EAAOA,EAAQpD,IAEhCwa,KAAQ,SAAUza,GAChB,IAAM0a,EAAI,GACV,OAAQ1a,GAAO,IAAIiC,OAAO,SAAA6E,GACxB,OAAI4T,EAAE5a,eAAegH,KAGrB4T,EAAE5T,IAAO,OClBT6T,GAAa,CACjB,UAAW,WAAY,QAAS,QAAS,MAAO,OAAQ,OAAQ,SAChE,YAAa,UAAW,WAAY,YAEhCC,GAAW,CACf,SAAU,SAAU,UAAW,YAAa,WAAY,SAAU,YAE9DC,GAAkBF,GAAWzW,IAAI4W,IACjCC,GAAgBH,GAAS1W,IAAI4W,IAC7BE,GAAW,CACfC,EAAG,KACHC,EAAG,KACHC,EAAG,KACHC,QAAW,MAGb,SAASN,GAAM1a,GACb,OAAOA,EAAI4I,MAAM,EAAG,GAItB,IAAMqS,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,IAAIlX,EAAM,EACDL,EAAI,EAAGA,EAAIuX,EAAEG,aAAc1X,EAClCK,GAAOgX,GAAMC,YAAYC,GAAGvX,GAE9B,OAAOK,EAAMkX,EAAEI,WAGjBC,cAAe,SAAUL,EAAGM,GAE1B,IAAMC,EAAMtZ,KAAKiZ,aAAaF,IAAMM,EAAWN,EAAEQ,UAG3CxJ,EAAQ,EADD,IAAIyJ,KAAKT,EAAEU,cAAe,EAAG,GACnBF,SAAWF,EAClC,OAAO1b,EAASI,OAAOkD,KAAKmT,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,IAAMnb,EAAMmb,EAAEI,UAAUtd,WAClBmS,EAAQ4L,SAAShc,EAAI4I,OAAO,IAClC,OAAOgS,GAASxK,IAAUwK,GAAkB,SAG9CqB,QAAS,SAAUd,GACjB,OAAOa,SAASb,EAAEU,cAAc5d,WAAWie,UAAU,EAAG,GAAI,MAI1DC,GAAc,CAClB5R,EAAG,SAAU4Q,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,OAAOpb,EAASob,EAAEI,UAAW,EAAG,MAElC7J,EAAG,SAAUyJ,GACX,OAAOpb,EAASob,EAAEI,UAAW,IAE/BmB,EAAG,SAAUvB,GACX,OAAOpb,EAASob,EAAEwB,WAAY,EAAG,MAEnCC,EAAG,SAAUzB,GACX,OAAOpb,EAASI,OAAOgb,EAAEwB,WAAa,IAAM,IAAK,EAAG,MAEtDpU,EAAG,SAAU4S,GACX,OAAOpb,EAASkb,GAAMI,aAAaF,GAAI,EAAG,MAE5C1b,EAAG,SAAU0b,GACX,OAAOpb,EAASob,EAAEwB,WAAY,IAEhCvP,EAAG,SAAU+N,GACX,OAAOpb,EAASI,OAAOgb,EAAEwB,WAAa,IAAM,IAAK,IAEnDE,EAAG,SAAU1B,GACX,OAAOpb,EAASob,EAAE2B,kBAAmB,EAAG,MAE1CtF,EAAG,SAAU2D,GACX,OAAOpb,EAASob,EAAEG,WAAa,EAAG,EAAG,MAEvCyB,EAAG,SAAU5B,GACX,OAAOpb,EAASob,EAAE6B,aAAc,EAAG,MAErCrR,EAAG,SAAUwP,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,OAAO9X,KAAKmW,MAAM2B,EAAEiC,UAAY,MAElCC,EAAG,SAAUlC,GACX,OAAOpb,EAASob,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,IAEhClL,EAAG,SAAUkL,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,KAAOje,EAASI,OAAOkD,KAAK6V,IAAI8E,IAAM,EAAG,MAElEE,IAAK,WACH,MAAO,MAGV/B,GAAoBvL,EAAIuL,GAAYE,EACpCF,GAAoBgC,EAAIhC,GAAYU,cCvJjBjQ,GAAS5M,GAAQoe,GAASpV,GCL/B,CACbqV,KAAQ,SAAC5W,EAAG4I,GACV,IAUkBgO,EAVdA,EAAO5W,EAMX,MALU,QAANA,EACF4W,EAAO,IAAIzC,KACFxd,EAASqJ,KAClB4W,EAAO,IAAIzC,KAAKnU,KAMA4W,EAJCA,aAKEzC,OAAS0C,MAAMD,EAAKE,oBFiJpBpD,EAAGqD,GAI1B,IAHA,IAAIC,EAAS,GACTC,EAAYF,IAEH,CACX,IAAMnR,EAAI,MACJsR,EAAUtR,EAAE6B,KAAKwP,GAGvB,IAAKC,EACH,OAAOF,EAASC,EAIlBD,GAAUC,EAAU9V,MAAM,EAAGyE,EAAE4B,UAAY,GAC3CyP,EAAYA,EAAU9V,MAAMyE,EAAE4B,WAG9B,IAAMhP,EAAK0e,EAAQ,GAAG5G,OAAO,GACvB6G,EAAOzC,GAAYlc,GACzBwe,GAAUG,EAAOA,EAAKtgB,KAAK8D,KAAM+Y,GAAK,IAAMlb,GE1KjB4e,CAASR,EAAMhO,GAAO5I,ICTtC,CACbuT,QAAW,SAACvT,EAAG4I,GAAQ,OAAAxC,GAASpG,GAAKA,EAAI4I,IFK4ByO,sBGgBrE,WAAazY,gBAAAA,MAAb,WACQJ,OAAeZ,GAAmBW,GAAUK,IAC9CJ,EAAQnH,QACVsD,KAAKtD,MAAQ,IAEfsD,KAAK6D,QAAUA,EACf7D,KAAKqQ,OAAS,IAAIjB,GAAOpP,MACzBA,KAAKiR,SAAW,IAAI3G,GACpBtK,KAAK2c,UAAY,IAAItT,GAAUrJ,KAAK6D,SAEpC+Y,EAASC,GAAa,SAACC,EAAMpc,GAAS,OAAA4B,EAAKya,YAAYrc,EAAMoc,KAC7DF,EAASI,GAAgB,SAACC,EAASvc,GAAS,OAAA4B,EAAK4a,eAAexc,EAAMuc,KAgE1E,OA9DEE,kBAAA,SAAO3S,EAAc/C,GACnB,IAAM6B,EAAStJ,KAAK2c,UAAUS,SAAS5S,EAAM/C,GAC7C,OAAOzH,KAAKqQ,OAAOlD,MAAM7D,IAE3B6T,mBAAA,SAAQxa,EAAuBqB,EAAcC,GAC3C,IAAMJ,OAAe7D,KAAK6D,QAAYD,GAAUK,IAC1CgB,EAAQ,IAAIb,GAAMJ,EAAKH,GAC7B,OAAO7D,KAAKiR,SAASC,gBAAgBvO,EAAKsC,IAEtCkY,2BAAN,SAAsB3S,EAAcxG,EAAcC,iGACpC,SAAMjE,KAAKmN,MAAM3C,WAC7B,OADM7H,EAAM+H,YACL1K,KAAK2K,OAAOhI,EAAKqB,EAAKC,UAEzBkZ,wBAAN,SAAmB7c,EAAM2D,wHACjBJ,EAAUD,GAAUK,GACpBoZ,EAAQxZ,EAAQX,KAAWW,EAAQX,YAASlD,KAAK6D,QAAQX,MAAQlD,KAAK6D,QAAQX,KAC9E6B,EAAQsY,EAAM3b,IAAI,SAAAwB,GAAQ,OAAAoa,GAAGxW,QAAQ5D,EAAM5C,EAAMgC,EAAKuB,QAAQV,eAE7Coa,4BAAAhZ,YAAZkD,UACG6V,GAAG7U,OAAOhB,kBAAtB,OAAMmD,SAEF5K,KAAK6D,QAAQnH,OAASsD,KAAKtD,MAAM+K,MAAkBzH,KAAKtD,MAAM+K,KACpDiD,EAAA1K,KAAKmN,SAAYmQ,GAAG3W,SAASc,kBAE3C,OAFMxL,EAAQyO,QAAA1K,MAAW4K,SAA6BnD,IAClDzH,KAAK6D,QAAQnH,QAAOsD,KAAKtD,MAAM+K,GAAYxL,MACxCA,iBANcsI,iBAYvB,MAHMrE,EAAM,IAAIJ,MAAM,WAClBmC,QAAU,6BAA6B3B,WAAa+c,MACxDnd,EAAIsd,KAAO,SACLtd,QAEFid,uBAAN,SAAkB7c,EAAM0D,EAAcC,mGAElB,OADZJ,EAAUD,GAAUK,MACFjE,KAAKiS,YAAY3R,EAAMuD,WAC/C,OADM0G,EAAYG,YACX1K,KAAK2K,OAAOJ,EAAWvG,EAAKC,UAErCkZ,sBAAA,SAAWvf,EAAaqH,GACtB,OAAO,IAAIiK,GAAMtR,EAAKoC,KAAK6D,QAAQH,gBAAgBzH,MAAMgJ,IAE3DkY,2BAAA,SAAgBzc,EAAMjB,GACpB,OAAOmO,GAAO6P,SAAS/c,EAAMjB,IAE/B0d,wBAAA,SAAazc,EAAc2M,GACzB,OAAOJ,GAAIwQ,SAAS/c,EAAM2M,IAE5B8P,mBAAA,SAAQO,GACN,OAAOA,EAAOxhB,KAAK8D,KAAMmd,IAE3BA,oBAAA,WACE,IAAMQ,EAAO3d,KACb,OAAO,SAAU4d,EAAkB5Z,EAAaqK,GAC9C,IAAMpK,EAAO,CAAEf,KAAMlD,KAAKkD,MAC1Bya,EAAKE,WAAWD,EAAU5Z,EAAKC,GAAM8L,KAAK,SAAAvF,GAAQ,OAAA6D,EAAG,KAAM7D,IAAO6D,MAG/D8O,UAAUA,YACC1R,GACX0R,UAAUxQ,GACVwQ,UAAUxR,GACVwR,YAAY9Q,GACZ8Q,QAAQW"} \ No newline at end of file diff --git a/dist/parser/delimited-token.d.ts b/dist/parser/delimited-token.d.ts new file mode 100644 index 0000000000..6d28a2f4da --- /dev/null +++ b/dist/parser/delimited-token.d.ts @@ -0,0 +1,6 @@ +import Token from './token'; +export default class DelimitedToken extends Token { + trimLeft: boolean; + trimRight: boolean; + constructor(raw: any, pos: any, input: any, file: any, line: any); +} diff --git a/dist/parser/html-token.d.ts b/dist/parser/html-token.d.ts new file mode 100644 index 0000000000..93d80762a9 --- /dev/null +++ b/dist/parser/html-token.d.ts @@ -0,0 +1,4 @@ +import Token from './token'; +export default class HTMLToken extends Token { + constructor(str: any, begin: any, input: any, file: any, line: any); +} diff --git a/dist/parser/lexical.d.ts b/dist/parser/lexical.d.ts new file mode 100644 index 0000000000..b8f331466c --- /dev/null +++ b/dist/parser/lexical.d.ts @@ -0,0 +1,35 @@ +export declare const quoted: RegExp; +export declare const quoteBalanced: RegExp; +export declare const integer: RegExp; +export declare const number: RegExp; +export declare const bool: RegExp; +export declare const identifier: RegExp; +export declare const subscript: RegExp; +export declare const literal: RegExp; +export declare const variable: RegExp; +export declare const rangeLimit: RegExp; +export declare const range: RegExp; +export declare const rangeCapture: RegExp; +export declare const value: RegExp; +export declare const hash: RegExp; +export declare const hashCapture: RegExp; +export declare const tagLine: RegExp; +export declare const literalLine: RegExp; +export declare const variableLine: RegExp; +export declare const numberLine: RegExp; +export declare const boolLine: RegExp; +export declare const quotedLine: RegExp; +export declare const rangeLine: RegExp; +export declare const integerLine: RegExp; +export declare const valueDeclaration: RegExp; +export declare const valueList: RegExp; +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; diff --git a/dist/parser/output-token.d.ts b/dist/parser/output-token.d.ts new file mode 100644 index 0000000000..fb0442f6ae --- /dev/null +++ b/dist/parser/output-token.d.ts @@ -0,0 +1,4 @@ +import DelimitedToken from './delimited-token'; +export default class OutputToken extends DelimitedToken { + constructor(raw: any, pos: any, input: any, file: any, line: any); +} diff --git a/dist/parser/parse-stream.d.ts b/dist/parser/parse-stream.d.ts new file mode 100644 index 0000000000..7a18b779e8 --- /dev/null +++ b/dist/parser/parse-stream.d.ts @@ -0,0 +1,16 @@ +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); +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; + start(): this; + stop(): this; +} +export {}; diff --git a/dist/parser/parser.d.ts b/dist/parser/parser.d.ts new file mode 100644 index 0000000000..19991a27ce --- /dev/null +++ b/dist/parser/parser.d.ts @@ -0,0 +1,13 @@ +import Liquid from 'src/liquid'; +import ParseStream from './parse-stream'; +import Token from './token'; +import Tag from 'src/template/tag/tag'; +import Output from 'src/template/output'; +import HTML from 'src/template/html'; +export default class Parser { + liquid: Liquid; + constructor(liquid: Liquid); + parse(tokens: Array): any[]; + 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 new file mode 100644 index 0000000000..92d46622bc --- /dev/null +++ b/dist/parser/tag-token.d.ts @@ -0,0 +1,6 @@ +import DelimitedToken from './delimited-token'; +export default class TagToken extends DelimitedToken { + name: string; + args: string; + constructor(raw: any, pos: any, input: any, file: any, line: any); +} diff --git a/dist/parser/token.d.ts b/dist/parser/token.d.ts new file mode 100644 index 0000000000..1574a49536 --- /dev/null +++ b/dist/parser/token.d.ts @@ -0,0 +1,9 @@ +export default class Token { + type: string; + line: number; + raw: string; + input: string; + file: string; + value: string; + constructor(raw: any, pos: any, input: any, file: any, line: any); +} diff --git a/dist/parser/tokenizer.d.ts b/dist/parser/tokenizer.d.ts new file mode 100644 index 0000000000..68c9f332ce --- /dev/null +++ b/dist/parser/tokenizer.d.ts @@ -0,0 +1,6 @@ +import { LiquidOptions } from 'src/liquid-options'; +export default class Tokenizer { + options: LiquidOptions; + constructor(options?: LiquidOptions); + tokenize(input: string, file?: string): any[]; +} diff --git a/dist/parser/whitespace-ctrl.d.ts b/dist/parser/whitespace-ctrl.d.ts new file mode 100644 index 0000000000..d4c5cd3d52 --- /dev/null +++ b/dist/parser/whitespace-ctrl.d.ts @@ -0,0 +1,3 @@ +import Token from 'src/parser/token'; +import { LiquidOptions } from 'src/liquid-options'; +export default function whiteSpaceCtrl(tokens: Token[], options: LiquidOptions): void; diff --git a/dist/render/render.d.ts b/dist/render/render.d.ts new file mode 100644 index 0000000000..f4d99a9146 --- /dev/null +++ b/dist/render/render.d.ts @@ -0,0 +1,3 @@ +export default class Render { + renderTemplates(templates: any, scope: any): Promise; +} diff --git a/dist/render/syntax.d.ts b/dist/render/syntax.d.ts new file mode 100644 index 0000000000..b69a9bb300 --- /dev/null +++ b/dist/render/syntax.d.ts @@ -0,0 +1,4 @@ +export declare function evalExp(exp: any, scope: any): any; +export declare function evalValue(str: any, scope: any): any; +export declare function isTruthy(val: any): boolean; +export declare function isFalsy(val: any): boolean; diff --git a/dist/scope/block-mode.d.ts b/dist/scope/block-mode.d.ts new file mode 100644 index 0000000000..3f0bc6c838 --- /dev/null +++ b/dist/scope/block-mode.d.ts @@ -0,0 +1,5 @@ +declare enum BlockMode { + OUTPUT = 0, + STORE = 1 +} +export default BlockMode; diff --git a/dist/scope/scope.d.ts b/dist/scope/scope.d.ts new file mode 100644 index 0000000000..e9e497f7d8 --- /dev/null +++ b/dist/scope/scope.d.ts @@ -0,0 +1,18 @@ +import { NormalizedOptions } from '../liquid-options'; +import BlockMode from './block-mode'; +export default class Scope { + opts: NormalizedOptions; + contexts: Array; + blocks: object; + blockMode: BlockMode; + constructor(ctx?: object, opts?: NormalizedOptions); + getAll(): object; + 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[]; +} diff --git a/dist/scope/scopes.d.ts b/dist/scope/scopes.d.ts new file mode 100644 index 0000000000..e4ebea46d9 --- /dev/null +++ b/dist/scope/scopes.d.ts @@ -0,0 +1,8 @@ +export declare class CaptureScope { +} +export declare class AssignScope { +} +export declare class IncrementScope { +} +export declare class DecrementScope { +} diff --git a/dist/template/filter.d.ts b/dist/template/filter.d.ts new file mode 100644 index 0000000000..2087cb7ffa --- /dev/null +++ b/dist/template/filter.d.ts @@ -0,0 +1,14 @@ +import Scope from 'src/scope/scope'; +declare type impl = (value: any, ...args: any[]) => any; +export default class Filter { + name: string; + impl: impl; + args: string[]; + private static impls; + constructor(str: string, strictFilters?: boolean); + parseArgs(argList: string): string[]; + render(value: any, scope: Scope): any; + static register(name: any, filter: any): void; + static clear(): void; +} +export {}; diff --git a/dist/template/html.d.ts b/dist/template/html.d.ts new file mode 100644 index 0000000000..ab64ecbbb2 --- /dev/null +++ b/dist/template/html.d.ts @@ -0,0 +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 { + str: string; + constructor(token: Token); + render(): Promise; +} diff --git a/dist/template/itemplate.d.ts b/dist/template/itemplate.d.ts new file mode 100644 index 0000000000..cdfdfa80c4 --- /dev/null +++ b/dist/template/itemplate.d.ts @@ -0,0 +1,6 @@ +import Scope from 'src/scope/scope'; +import Token from 'src/parser/token'; +export default interface ITemplate { + token: Token; + render(scope: Scope): Promise; +} diff --git a/dist/template/output.d.ts b/dist/template/output.d.ts new file mode 100644 index 0000000000..5b9a92970e --- /dev/null +++ b/dist/template/output.d.ts @@ -0,0 +1,10 @@ +import Value from './value'; +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 { + value: Value; + constructor(token: OutputToken, strictFilters?: boolean); + render(scope: Scope): Promise; +} diff --git a/dist/template/tag/hash.d.ts b/dist/template/tag/hash.d.ts new file mode 100644 index 0000000000..d2f1c57431 --- /dev/null +++ b/dist/template/tag/hash.d.ts @@ -0,0 +1,10 @@ +/** + * Key-Value Pairs Representing Tag Arguments + * Example: + * For the markup `{% include 'head.html' foo='bar' %}`, + * hash['foo'] === 'bar' + */ +export default class Hash { + [key: string]: any; + constructor(markup: any, scope: any); +} diff --git a/dist/template/tag/itag-impl-options.d.ts b/dist/template/tag/itag-impl-options.d.ts new file mode 100644 index 0000000000..fc1b08a633 --- /dev/null +++ b/dist/template/tag/itag-impl-options.d.ts @@ -0,0 +1,9 @@ +import Scope from 'src/scope/scope'; +import TagToken from 'src/parser/tag-token'; +import Token from 'src/parser/token'; +import Hash from 'src/template/tag/hash'; +import ITagImpl from './itag-impl'; +export default interface ITagImplOptions { + parse?: (this: ITagImpl, token: TagToken, remainingTokens: Array) => void; + render?: (this: ITagImpl, scope: Scope, hash: Hash) => any | Promise; +} diff --git a/dist/template/tag/itag-impl.d.ts b/dist/template/tag/itag-impl.d.ts new file mode 100644 index 0000000000..ac483d7f66 --- /dev/null +++ b/dist/template/tag/itag-impl.d.ts @@ -0,0 +1,5 @@ +import Liquid from 'src/liquid'; +import ITagImplOptions from './itag-impl-options'; +export default interface ITagImpl extends ITagImplOptions { + liquid: Liquid; +} diff --git a/dist/template/tag/tag.d.ts b/dist/template/tag/tag.d.ts new file mode 100644 index 0000000000..ee8c6df934 --- /dev/null +++ b/dist/template/tag/tag.d.ts @@ -0,0 +1,19 @@ +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; + token: TagToken; + 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/template.d.ts b/dist/template/template.d.ts new file mode 100644 index 0000000000..5c07d73e78 --- /dev/null +++ b/dist/template/template.d.ts @@ -0,0 +1,5 @@ +import Token from 'src/parser/token'; +export default class Template { + token: Token; + constructor(token: any); +} diff --git a/dist/template/value.d.ts b/dist/template/value.d.ts new file mode 100644 index 0000000000..dc671745aa --- /dev/null +++ b/dist/template/value.d.ts @@ -0,0 +1,7 @@ +import Scope from 'src/scope/scope'; +export default class { + initial: any; + filters: Array; + constructor(str: string, strictFilters?: boolean); + value(scope: Scope): any; +} diff --git a/dist/types.d.ts b/dist/types.d.ts new file mode 100644 index 0000000000..ac78bd4e97 --- /dev/null +++ b/dist/types.d.ts @@ -0,0 +1,2 @@ +export { AssignScope, CaptureScope, IncrementScope, DecrementScope } from './scope/scopes'; +export { ParseError, TokenizationError, RenderBreakError, AssertionError } from './util/error'; diff --git a/dist/util/assert.d.ts b/dist/util/assert.d.ts new file mode 100644 index 0000000000..a6177e3b03 --- /dev/null +++ b/dist/util/assert.d.ts @@ -0,0 +1 @@ +export default function (predicate: any, message?: string): void; diff --git a/dist/util/error.d.ts b/dist/util/error.d.ts new file mode 100644 index 0000000000..7af225251d --- /dev/null +++ b/dist/util/error.d.ts @@ -0,0 +1,31 @@ +declare abstract class LiquidError { + name: string; + message: string; + stack: string; + private line; + private file; + private input; + private token; + private originalError; + constructor(err: any, token: any); + captureStackTrace(obj: any): void; +} +export declare class TokenizationError extends LiquidError { + constructor(message: any, token: any); +} +export declare class ParseError extends LiquidError { + constructor(err: any, token: any); +} +export declare class RenderError extends LiquidError { + constructor(err: any, tpl: any); +} +export declare class RenderBreakError { + message: string; + resolvedHTML: string; + constructor(message: any); +} +export declare class AssertionError { + message: string; + constructor(message: any); +} +export {}; diff --git a/dist/util/promise.d.ts b/dist/util/promise.d.ts new file mode 100644 index 0000000000..205de557db --- /dev/null +++ b/dist/util/promise.d.ts @@ -0,0 +1,2 @@ +export declare function anySeries(iterable: any, iteratee: any): Promise; +export declare function mapSeries(iterable: any, iteratee: any): Promise; diff --git a/dist/util/strftime.d.ts b/dist/util/strftime.d.ts new file mode 100644 index 0000000000..58bdffae53 --- /dev/null +++ b/dist/util/strftime.d.ts @@ -0,0 +1 @@ +export default function (d: any, format: any): string; diff --git a/dist/util/underscore.d.ts b/dist/util/underscore.d.ts new file mode 100644 index 0000000000..0d1a36ebeb --- /dev/null +++ b/dist/util/underscore.d.ts @@ -0,0 +1,15 @@ +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 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 isObject(value: any): boolean; +export declare function range(start: number, stop?: number, step?: number): any[]; +export declare function padStart(str: any, length: number, ch?: string): any; diff --git a/package-lock.json b/package-lock.json index bf963aeabc..2cd63c5009 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "liquidjs", - "version": "7.0.0", + "version": "7.0.1", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/package.json b/package.json index 88f44179c9..a2e69753c2 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "liquidjs", - "version": "7.0.0", + "version": "7.0.1", "description": "Liquid template engine by pure JavaScript: compatible to shopify, easy to extend.", "main": "dist/liquid.common.js", "types": "dist/liquid.d.ts", @@ -83,6 +83,8 @@ ] }, "nyc": { - "extension": [ ".ts" ] + "extension": [ + ".ts" + ] } }