From fbd1c14cb87c07aee955a995c04645f479e66c40 Mon Sep 17 00:00:00 2001 From: harttle Date: Fri, 16 Aug 2024 16:56:29 +0000 Subject: [PATCH] =?UTF-8?q?Deploying=20to=20gh-pages=20from=20@=20harttle/?= =?UTF-8?q?liquidjs@e94137853508a34f41a58161821811a7a823ae4d=20?= =?UTF-8?q?=F0=9F=9A=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- api/assets/highlight.css | 78 +- api/assets/icons.js | 18 + api/assets/icons.svg | 1 + api/assets/main.js | 8 +- api/assets/navigation.js | 1 + api/assets/search.js | 2 +- api/assets/style.css | 955 +++++---- api/classes/AssertionError.html | 180 +- api/classes/AssignTag.html | 163 +- api/classes/BlockTag.html | 197 +- api/classes/BreakTag.html | 151 +- api/classes/CaptureTag.html | 177 +- api/classes/CaseTag.html | 177 +- api/classes/CommentTag.html | 144 +- api/classes/Context.html | 435 +--- api/classes/ContinueTag.html | 151 +- api/classes/CycleTag.html | 165 +- api/classes/DecrementTag.html | 158 +- api/classes/Drop.html | 93 +- api/classes/EchoTag.html | 158 +- api/classes/Expression.html | 125 +- api/classes/Filter.html | 151 +- api/classes/ForTag.html | 193 +- api/classes/Hash.html | 127 +- api/classes/IfTag.html | 169 +- api/classes/IncludeTag.html | 167 +- api/classes/IncrementTag.html | 158 +- api/classes/InlineCommentTag.html | 144 +- api/classes/LayoutTag.html | 177 +- api/classes/Liquid.html | 629 +----- api/classes/LiquidError.html | 237 +-- api/classes/LiquidTag.html | 161 +- api/classes/Output.html | 135 +- api/classes/ParseError.html | 229 +-- api/classes/ParseStream.html | 209 +- api/classes/RawTag.html | 151 +- api/classes/RenderError.html | 229 +-- api/classes/RenderTag.html | 174 +- api/classes/TablerowTag.html | 185 +- api/classes/Tag.html | 175 +- api/classes/TagToken.html | 252 +-- api/classes/Token.html | 170 +- api/classes/TokenizationError.html | 229 +-- api/classes/Tokenizer.html | 763 +------ api/classes/UndefinedVariableError.html | 229 +-- api/classes/UnlessTag.html | 169 +- api/classes/Value.html | 142 +- api/classes/_internal_.BlankDrop.html | 10 + api/classes/_internal_.BlockDrop.html | 6 + api/classes/_internal_.DelimitedToken.html | 14 + api/classes/_internal_.EmptyDrop.html | 10 + api/classes/_internal_.FilterToken.html | 12 + .../_internal_.FilteredValueToken.html | 15 + api/classes/_internal_.HTML.html | 4 + api/classes/_internal_.HTMLToken.html | 13 + api/classes/_internal_.HashToken.html | 12 + api/classes/_internal_.IdentifierToken.html | 11 + api/classes/_internal_.Limiter.html | 4 + api/classes/_internal_.LiquidTagToken.html | 18 + api/classes/_internal_.LiteralToken.html | 12 + api/classes/_internal_.Loader.html | 5 + api/classes/_internal_.NullDrop.html | 10 + api/classes/_internal_.NumberToken.html | 11 + api/classes/_internal_.OperatorToken.html | 12 + api/classes/_internal_.OutputToken.html | 14 + api/classes/_internal_.Parser.html | 7 + .../_internal_.PropertyAccessToken.html | 12 + api/classes/_internal_.QuotedToken.html | 11 + api/classes/_internal_.RangeToken.html | 12 + api/classes/_internal_.Render.html | 4 + api/classes/_internal_.TemplateImpl.html | 3 + api/enums/TokenKind.html | 171 +- api/enums/_internal_.LookupType.html | 4 + .../TypeGuards.isDelimitedToken.html | 69 +- api/functions/TypeGuards.isHTMLToken.html | 69 +- api/functions/TypeGuards.isLiteralToken.html | 69 +- api/functions/TypeGuards.isNumberToken.html | 69 +- api/functions/TypeGuards.isOperatorToken.html | 69 +- api/functions/TypeGuards.isOutputToken.html | 69 +- .../TypeGuards.isPropertyAccessToken.html | 69 +- api/functions/TypeGuards.isQuotedToken.html | 69 +- api/functions/TypeGuards.isRangeToken.html | 69 +- api/functions/TypeGuards.isTagToken.html | 69 +- api/functions/TypeGuards.isWordToken.html | 69 +- api/functions/assert.html | 129 +- api/functions/createTrie.html | 127 +- api/functions/evalQuotedToken.html | 122 +- api/functions/evalToken.html | 126 +- api/functions/isFalsy.html | 124 +- api/functions/isTruthy.html | 124 +- api/functions/toPromise.html | 127 +- api/functions/toValue.html | 122 +- api/functions/toValueSync.html | 127 +- api/hierarchy.html | 1 + api/index.html | 175 +- api/interfaces/Emitter.html | 101 +- api/interfaces/FS.html | 272 +-- api/interfaces/LiquidOptions.html | 475 +---- api/interfaces/Template.html | 99 +- api/interfaces/Trie.html | 124 +- api/interfaces/_internal_.ArrayLike.html | 2 + .../_internal_.AsyncIterableIterator.html | 5 + api/interfaces/_internal_.AsyncIterator.html | 4 + api/interfaces/_internal_.Buffer.html | 816 ++++++++ .../_internal_.BufferConstructor.html | 177 ++ api/interfaces/_internal_.Cache.html | 4 + api/interfaces/_internal_.CallSite.html | 48 + api/interfaces/_internal_.Comparable.html | 6 + api/interfaces/_internal_.Error.html | 4 + api/interfaces/_internal_.EventEmitter.html | 143 ++ api/interfaces/_internal_.FilterImpl.html | 3 + api/interfaces/_internal_.FilterOptions.html | 3 + api/interfaces/_internal_.Generator.html | 5 + api/interfaces/_internal_.Iterable.html | 2 + .../_internal_.IterableIterator.html | 5 + api/interfaces/_internal_.Iterator.html | 4 + .../_internal_.IteratorReturnResult.html | 3 + .../_internal_.IteratorYieldResult.html | 3 + api/interfaces/_internal_.LoaderOptions.html | 7 + .../_internal_.NormalizedFullOptions.html | 75 + .../_internal_.NormalizedOptions.html | 75 + api/interfaces/_internal_.PromiseLike.html | 6 + api/interfaces/_internal_.ReadableStream.html | 154 ++ .../_internal_.RenderFileOptions.html | 16 + api/interfaces/_internal_.RenderOptions.html | 15 + api/interfaces/_internal_.ScopeObject.html | 3 + .../_internal_.SharedArrayBuffer.html | 7 + ...nternal_.SharedArrayBufferConstructor.html | 3 + api/interfaces/_internal_.TagClass.html | 2 + api/interfaces/_internal_.TagImplOptions.html | 3 + api/interfaces/_internal_.TrieInput.html | 1 + api/interfaces/_internal_.TrieLeafNode.html | 4 + api/interfaces/_internal_.WritableStream.html | 146 ++ api/modules.html | 264 +-- api/modules/TypeGuards.html | 86 +- api/modules/_internal_.html | 92 + api/types/FilterImplOptions.html | 113 +- api/types/Operators.html | 113 +- api/types/Scope.html | 113 +- api/types/TopLevelToken.html | 113 +- api/types/ValueToken.html | 113 +- api/types/_internal_.AnyRest.html | 1 + api/types/_internal_.Args.html | 1 + api/types/_internal_.ArrayBufferLike.html | 1 + api/types/_internal_.ArrayBufferView.html | 1 + .../_internal_.BinaryOperatorHandler.html | 1 + api/types/_internal_.BufferEncoding.html | 1 + api/types/_internal_.DefaultEventMap.html | 1 + api/types/_internal_.EventMap.html | 1 + api/types/_internal_.FilterArg.html | 1 + api/types/_internal_.FilterHandler.html | 1 + api/types/_internal_.HashValueTokens.html | 1 + api/types/_internal_.IteratorResult.html | 1 + api/types/_internal_.Key.html | 1 + api/types/_internal_.Key2.html | 1 + api/types/_internal_.KeyValuePair.html | 1 + api/types/_internal_.LiquidCache.html | 1 + api/types/_internal_.Listener.html | 1 + api/types/_internal_.LiteralKey.html | 1 + api/types/_internal_.LiteralValue.html | 1 + api/types/_internal_.OperatorHandler.html | 1 + api/types/_internal_.OutputEscape.html | 1 + api/types/_internal_.OutputEscapeOption.html | 1 + api/types/_internal_.ParseToken.html | 1 + api/types/_internal_.ParsedFileName.html | 1 + api/types/_internal_.PropertyKey.html | 1 + api/types/_internal_.Record.html | 2 + api/types/_internal_.TypedArray.html | 1 + .../_internal_.UnaryOperatorHandler.html | 1 + .../_internal_.WithImplicitCoercion.html | 1 + api/variables/_internal_.Buffer-1.html | 1 + api/variables/_internal_.Error-1.html | 1 + .../_internal_.SharedArrayBuffer-1.html | 1 + api/variables/_internal_.literalValues.html | 1 + api/variables/defaultOperators.html | 113 +- api/variables/defaultOptions.html | 113 +- api/variables/filters.html | 113 +- api/variables/tags.html | 113 +- api/variables/version.html | 113 +- filters/abs.html | 16 +- filters/append.html | 14 +- filters/array_to_sentence_string.html | 12 +- filters/at_least.html | 12 +- filters/at_most.html | 12 +- filters/capitalize.html | 12 +- filters/ceil.html | 20 +- filters/cgi_escape.html | 8 +- filters/compact.html | 30 +- filters/concat.html | 38 +- filters/date.html | 20 +- filters/date_to_long_string.html | 12 +- filters/date_to_rfc822.html | 8 +- filters/date_to_string.html | 12 +- filters/date_to_xmlschema.html | 8 +- filters/default.html | 23 +- filters/divided_by.html | 19 +- filters/downcase.html | 12 +- filters/escape.html | 10 +- filters/escape_once.html | 6 +- filters/find.html | 14 +- filters/find_exp.html | 14 +- filters/first.html | 18 +- filters/floor.html | 20 +- filters/group_by.html | 37 +- filters/group_by_exp.html | 37 +- filters/inspect.html | 21 +- filters/join.html | 10 +- filters/json.html | 18 +- filters/jsonify.html | 4 +- filters/last.html | 18 +- filters/lstrip.html | 8 +- filters/map.html | 16 +- filters/minus.html | 16 +- filters/modulo.html | 16 +- filters/newline_to_br.html | 14 +- filters/normalize_whitespace.html | 8 +- filters/number_of_words.html | 20 +- filters/overview.html | 4 +- filters/plus.html | 16 +- filters/pop.html | 15 +- filters/prepend.html | 14 +- filters/push.html | 16 +- filters/raw.html | 20 +- filters/remove.html | 8 +- filters/remove_first.html | 8 +- filters/remove_last.html | 8 +- filters/replace.html | 8 +- filters/replace_first.html | 8 +- filters/replace_last.html | 8 +- filters/reverse.html | 16 +- filters/round.html | 16 +- filters/rstrip.html | 8 +- filters/shift.html | 15 +- filters/size.html | 20 +- filters/slice.html | 20 +- filters/slugify.html | 24 +- filters/sort.html | 17 +- filters/sort_natural.html | 17 +- filters/split.html | 22 +- filters/strip.html | 8 +- filters/strip_html.html | 8 +- filters/strip_newlines.html | 14 +- filters/sum.html | 8 +- filters/times.html | 16 +- filters/to_integer.html | 8 +- filters/truncate.html | 16 +- filters/truncatewords.html | 16 +- filters/uniq.html | 9 +- filters/unshift.html | 16 +- filters/upcase.html | 12 +- filters/uri_escape.html | 8 +- filters/url_decode.html | 8 +- filters/url_encode.html | 12 +- filters/where.html | 67 +- filters/where_exp.html | 26 +- filters/xml_escape.html | 8 +- index.html | 2 +- playground.html | 2 +- sitemap.xml | 1786 ++++++++--------- sw.js | 2 +- tags/assign.html | 16 +- tags/capture.html | 20 +- tags/case.html | 16 +- tags/comment.html | 10 +- tags/cycle.html | 24 +- tags/decrement.html | 12 +- tags/echo.html | 9 +- tags/for.html | 137 +- tags/if.html | 21 +- tags/include.html | 32 +- tags/increment.html | 23 +- tags/inline_comment.html | 29 +- tags/layout.html | 49 +- tags/liquid.html | 17 +- tags/overview.html | 4 +- tags/raw.html | 11 +- tags/render.html | 32 +- tags/tablerow.html | 89 +- tags/unless.html | 14 +- tutorials/access-scope-in-filters.html | 17 +- tutorials/caching.html | 25 +- tutorials/changelog.html | 194 +- tutorials/contribution-guidelines.html | 4 +- tutorials/differences.html | 4 +- tutorials/dos.html | 19 +- tutorials/drops.html | 118 +- tutorials/escaping.html | 26 +- tutorials/intro-to-liquid.html | 20 +- tutorials/migrate-to-9.html | 4 +- tutorials/operators.html | 4 +- tutorials/options.html | 27 +- tutorials/parse-parameters.html | 58 +- tutorials/partials-and-layouts.html | 30 +- tutorials/plugins.html | 20 +- tutorials/register-filters-tags.html | 54 +- tutorials/render-file.html | 61 +- tutorials/render-tag-content.html | 96 +- tutorials/setup.html | 39 +- tutorials/sync-and-async.html | 58 +- tutorials/truthy-and-falsy.html | 4 +- tutorials/use-in-expressjs.html | 35 +- tutorials/whitespace-control.html | 17 +- zh-cn/filters/abs.html | 20 +- zh-cn/filters/append.html | 18 +- zh-cn/filters/array_to_sentence_string.html | 16 +- zh-cn/filters/at_least.html | 16 +- zh-cn/filters/at_most.html | 16 +- zh-cn/filters/capitalize.html | 16 +- zh-cn/filters/ceil.html | 24 +- zh-cn/filters/cgi_escape.html | 12 +- zh-cn/filters/compact.html | 34 +- zh-cn/filters/concat.html | 42 +- zh-cn/filters/date.html | 30 +- zh-cn/filters/date_to_long_string.html | 16 +- zh-cn/filters/date_to_rfc822.html | 12 +- zh-cn/filters/date_to_string.html | 16 +- zh-cn/filters/date_to_xmlschema.html | 12 +- zh-cn/filters/default.html | 27 +- zh-cn/filters/divided_by.html | 23 +- zh-cn/filters/downcase.html | 16 +- zh-cn/filters/escape.html | 14 +- zh-cn/filters/escape_once.html | 10 +- zh-cn/filters/find.html | 18 +- zh-cn/filters/find_exp.html | 18 +- zh-cn/filters/first.html | 22 +- zh-cn/filters/floor.html | 24 +- zh-cn/filters/group_by.html | 41 +- zh-cn/filters/group_by_exp.html | 41 +- zh-cn/filters/inspect.html | 25 +- zh-cn/filters/join.html | 14 +- zh-cn/filters/json.html | 22 +- zh-cn/filters/jsonify.html | 8 +- zh-cn/filters/last.html | 22 +- zh-cn/filters/lstrip.html | 12 +- zh-cn/filters/map.html | 20 +- zh-cn/filters/minus.html | 20 +- zh-cn/filters/modulo.html | 20 +- zh-cn/filters/newline_to_br.html | 18 +- zh-cn/filters/normalize_whitespace.html | 12 +- zh-cn/filters/number_of_words.html | 24 +- zh-cn/filters/overview.html | 8 +- zh-cn/filters/plus.html | 20 +- zh-cn/filters/pop.html | 19 +- zh-cn/filters/prepend.html | 18 +- zh-cn/filters/push.html | 20 +- zh-cn/filters/raw.html | 24 +- zh-cn/filters/remove.html | 12 +- zh-cn/filters/remove_first.html | 12 +- zh-cn/filters/remove_last.html | 12 +- zh-cn/filters/replace.html | 12 +- zh-cn/filters/replace_first.html | 12 +- zh-cn/filters/replace_last.html | 12 +- zh-cn/filters/reverse.html | 20 +- zh-cn/filters/round.html | 20 +- zh-cn/filters/rstrip.html | 12 +- zh-cn/filters/shift.html | 19 +- zh-cn/filters/size.html | 24 +- zh-cn/filters/slice.html | 24 +- zh-cn/filters/slugify.html | 28 +- zh-cn/filters/sort.html | 21 +- zh-cn/filters/sort_natural.html | 21 +- zh-cn/filters/split.html | 26 +- zh-cn/filters/strip.html | 12 +- zh-cn/filters/strip_html.html | 12 +- zh-cn/filters/strip_newlines.html | 18 +- zh-cn/filters/times.html | 20 +- zh-cn/filters/to_integer.html | 12 +- zh-cn/filters/truncate.html | 20 +- zh-cn/filters/truncatewords.html | 20 +- zh-cn/filters/uniq.html | 11 +- zh-cn/filters/unshift.html | 20 +- zh-cn/filters/upcase.html | 16 +- zh-cn/filters/uri_escape.html | 12 +- zh-cn/filters/url_decode.html | 12 +- zh-cn/filters/url_encode.html | 16 +- zh-cn/filters/where.html | 71 +- zh-cn/filters/where_exp.html | 30 +- zh-cn/filters/xml_escape.html | 12 +- zh-cn/index.html | 6 +- zh-cn/playground.html | 6 +- zh-cn/tags/assign.html | 20 +- zh-cn/tags/capture.html | 24 +- zh-cn/tags/case.html | 20 +- zh-cn/tags/comment.html | 14 +- zh-cn/tags/cycle.html | 28 +- zh-cn/tags/decrement.html | 16 +- zh-cn/tags/echo.html | 13 +- zh-cn/tags/for.html | 122 +- zh-cn/tags/if.html | 25 +- zh-cn/tags/include.html | 36 +- zh-cn/tags/increment.html | 27 +- zh-cn/tags/inline_comment.html | 33 +- zh-cn/tags/layout.html | 26 +- zh-cn/tags/liquid.html | 21 +- zh-cn/tags/overview.html | 8 +- zh-cn/tags/raw.html | 15 +- zh-cn/tags/render.html | 21 +- zh-cn/tags/tablerow.html | 93 +- zh-cn/tags/unless.html | 18 +- zh-cn/tutorials/access-scope-in-filters.html | 21 +- zh-cn/tutorials/caching.html | 29 +- zh-cn/tutorials/changelog.html | 198 +- zh-cn/tutorials/contribution-guidelines.html | 8 +- zh-cn/tutorials/differences.html | 8 +- zh-cn/tutorials/dos.html | 23 +- zh-cn/tutorials/drops.html | 122 +- zh-cn/tutorials/escaping.html | 30 +- zh-cn/tutorials/intro-to-liquid.html | 24 +- zh-cn/tutorials/migrate-to-9.html | 8 +- zh-cn/tutorials/operators.html | 8 +- zh-cn/tutorials/options.html | 31 +- zh-cn/tutorials/parse-parameters.html | 63 +- zh-cn/tutorials/partials-and-layouts.html | 34 +- zh-cn/tutorials/plugins.html | 22 +- zh-cn/tutorials/register-filters-tags.html | 71 +- zh-cn/tutorials/render-file.html | 53 +- zh-cn/tutorials/render-tag-content.html | 100 +- zh-cn/tutorials/setup.html | 31 +- zh-cn/tutorials/sync-and-async.html | 62 +- zh-cn/tutorials/truthy-and-falsy.html | 8 +- zh-cn/tutorials/use-in-expressjs.html | 39 +- zh-cn/tutorials/whitespace-control.html | 21 +- 422 files changed, 6202 insertions(+), 17559 deletions(-) create mode 100644 api/assets/icons.js create mode 100644 api/assets/icons.svg create mode 100644 api/assets/navigation.js create mode 100644 api/classes/_internal_.BlankDrop.html create mode 100644 api/classes/_internal_.BlockDrop.html create mode 100644 api/classes/_internal_.DelimitedToken.html create mode 100644 api/classes/_internal_.EmptyDrop.html create mode 100644 api/classes/_internal_.FilterToken.html create mode 100644 api/classes/_internal_.FilteredValueToken.html create mode 100644 api/classes/_internal_.HTML.html create mode 100644 api/classes/_internal_.HTMLToken.html create mode 100644 api/classes/_internal_.HashToken.html create mode 100644 api/classes/_internal_.IdentifierToken.html create mode 100644 api/classes/_internal_.Limiter.html create mode 100644 api/classes/_internal_.LiquidTagToken.html create mode 100644 api/classes/_internal_.LiteralToken.html create mode 100644 api/classes/_internal_.Loader.html create mode 100644 api/classes/_internal_.NullDrop.html create mode 100644 api/classes/_internal_.NumberToken.html create mode 100644 api/classes/_internal_.OperatorToken.html create mode 100644 api/classes/_internal_.OutputToken.html create mode 100644 api/classes/_internal_.Parser.html create mode 100644 api/classes/_internal_.PropertyAccessToken.html create mode 100644 api/classes/_internal_.QuotedToken.html create mode 100644 api/classes/_internal_.RangeToken.html create mode 100644 api/classes/_internal_.Render.html create mode 100644 api/classes/_internal_.TemplateImpl.html create mode 100644 api/enums/_internal_.LookupType.html create mode 100644 api/hierarchy.html create mode 100644 api/interfaces/_internal_.ArrayLike.html create mode 100644 api/interfaces/_internal_.AsyncIterableIterator.html create mode 100644 api/interfaces/_internal_.AsyncIterator.html create mode 100644 api/interfaces/_internal_.Buffer.html create mode 100644 api/interfaces/_internal_.BufferConstructor.html create mode 100644 api/interfaces/_internal_.Cache.html create mode 100644 api/interfaces/_internal_.CallSite.html create mode 100644 api/interfaces/_internal_.Comparable.html create mode 100644 api/interfaces/_internal_.Error.html create mode 100644 api/interfaces/_internal_.EventEmitter.html create mode 100644 api/interfaces/_internal_.FilterImpl.html create mode 100644 api/interfaces/_internal_.FilterOptions.html create mode 100644 api/interfaces/_internal_.Generator.html create mode 100644 api/interfaces/_internal_.Iterable.html create mode 100644 api/interfaces/_internal_.IterableIterator.html create mode 100644 api/interfaces/_internal_.Iterator.html create mode 100644 api/interfaces/_internal_.IteratorReturnResult.html create mode 100644 api/interfaces/_internal_.IteratorYieldResult.html create mode 100644 api/interfaces/_internal_.LoaderOptions.html create mode 100644 api/interfaces/_internal_.NormalizedFullOptions.html create mode 100644 api/interfaces/_internal_.NormalizedOptions.html create mode 100644 api/interfaces/_internal_.PromiseLike.html create mode 100644 api/interfaces/_internal_.ReadableStream.html create mode 100644 api/interfaces/_internal_.RenderFileOptions.html create mode 100644 api/interfaces/_internal_.RenderOptions.html create mode 100644 api/interfaces/_internal_.ScopeObject.html create mode 100644 api/interfaces/_internal_.SharedArrayBuffer.html create mode 100644 api/interfaces/_internal_.SharedArrayBufferConstructor.html create mode 100644 api/interfaces/_internal_.TagClass.html create mode 100644 api/interfaces/_internal_.TagImplOptions.html create mode 100644 api/interfaces/_internal_.TrieInput.html create mode 100644 api/interfaces/_internal_.TrieLeafNode.html create mode 100644 api/interfaces/_internal_.WritableStream.html create mode 100644 api/modules/_internal_.html create mode 100644 api/types/_internal_.AnyRest.html create mode 100644 api/types/_internal_.Args.html create mode 100644 api/types/_internal_.ArrayBufferLike.html create mode 100644 api/types/_internal_.ArrayBufferView.html create mode 100644 api/types/_internal_.BinaryOperatorHandler.html create mode 100644 api/types/_internal_.BufferEncoding.html create mode 100644 api/types/_internal_.DefaultEventMap.html create mode 100644 api/types/_internal_.EventMap.html create mode 100644 api/types/_internal_.FilterArg.html create mode 100644 api/types/_internal_.FilterHandler.html create mode 100644 api/types/_internal_.HashValueTokens.html create mode 100644 api/types/_internal_.IteratorResult.html create mode 100644 api/types/_internal_.Key.html create mode 100644 api/types/_internal_.Key2.html create mode 100644 api/types/_internal_.KeyValuePair.html create mode 100644 api/types/_internal_.LiquidCache.html create mode 100644 api/types/_internal_.Listener.html create mode 100644 api/types/_internal_.LiteralKey.html create mode 100644 api/types/_internal_.LiteralValue.html create mode 100644 api/types/_internal_.OperatorHandler.html create mode 100644 api/types/_internal_.OutputEscape.html create mode 100644 api/types/_internal_.OutputEscapeOption.html create mode 100644 api/types/_internal_.ParseToken.html create mode 100644 api/types/_internal_.ParsedFileName.html create mode 100644 api/types/_internal_.PropertyKey.html create mode 100644 api/types/_internal_.Record.html create mode 100644 api/types/_internal_.TypedArray.html create mode 100644 api/types/_internal_.UnaryOperatorHandler.html create mode 100644 api/types/_internal_.WithImplicitCoercion.html create mode 100644 api/variables/_internal_.Buffer-1.html create mode 100644 api/variables/_internal_.Error-1.html create mode 100644 api/variables/_internal_.SharedArrayBuffer-1.html create mode 100644 api/variables/_internal_.literalValues.html diff --git a/api/assets/highlight.css b/api/assets/highlight.css index af764c57c..03264a3a7 100644 --- a/api/assets/highlight.css +++ b/api/assets/highlight.css @@ -1,24 +1,36 @@ :root { - --light-hl-0: #800000; - --dark-hl-0: #808080; + --light-hl-0: #795E26; + --dark-hl-0: #DCDCAA; --light-hl-1: #000000; --dark-hl-1: #D4D4D4; - --light-hl-2: #AF00DB; - --dark-hl-2: #C586C0; - --light-hl-3: #001080; - --dark-hl-3: #9CDCFE; - --light-hl-4: #795E26; - --dark-hl-4: #DCDCAA; - --light-hl-5: #A31515; - --dark-hl-5: #CE9178; - --light-hl-6: #800000; - --dark-hl-6: #569CD6; - --light-hl-7: #000000FF; - --dark-hl-7: #D4D4D4; - --light-hl-8: #E50000; - --dark-hl-8: #9CDCFE; - --light-hl-9: #0000FF; - --dark-hl-9: #CE9178; + --light-hl-2: #A31515; + --dark-hl-2: #CE9178; + --light-hl-3: #800000; + --dark-hl-3: #808080; + --light-hl-4: #800000; + --dark-hl-4: #569CD6; + --light-hl-5: #000000FF; + --dark-hl-5: #D4D4D4; + --light-hl-6: #E50000; + --dark-hl-6: #9CDCFE; + --light-hl-7: #0000FF; + --dark-hl-7: #CE9178; + --light-hl-8: #0000FF; + --dark-hl-8: #569CD6; + --light-hl-9: #AF00DB; + --dark-hl-9: #C586C0; + --light-hl-10: #001080; + --dark-hl-10: #9CDCFE; + --light-hl-11: #0070C1; + --dark-hl-11: #4FC1FF; + --light-hl-12: #008000; + --dark-hl-12: #6A9955; + --light-hl-13: #098658; + --dark-hl-13: #B5CEA8; + --light-hl-14: #EE0000; + --dark-hl-14: #D7BA7D; + --light-hl-15: #267F99; + --dark-hl-15: #4EC9B0; --light-code-background: #FFFFFF; --dark-code-background: #1E1E1E; } @@ -34,6 +46,12 @@ --hl-7: var(--light-hl-7); --hl-8: var(--light-hl-8); --hl-9: var(--light-hl-9); + --hl-10: var(--light-hl-10); + --hl-11: var(--light-hl-11); + --hl-12: var(--light-hl-12); + --hl-13: var(--light-hl-13); + --hl-14: var(--light-hl-14); + --hl-15: var(--light-hl-15); --code-background: var(--light-code-background); } } @@ -48,6 +66,12 @@ --hl-7: var(--dark-hl-7); --hl-8: var(--dark-hl-8); --hl-9: var(--dark-hl-9); + --hl-10: var(--dark-hl-10); + --hl-11: var(--dark-hl-11); + --hl-12: var(--dark-hl-12); + --hl-13: var(--dark-hl-13); + --hl-14: var(--dark-hl-14); + --hl-15: var(--dark-hl-15); --code-background: var(--dark-code-background); } } @@ -62,6 +86,12 @@ --hl-7: var(--light-hl-7); --hl-8: var(--light-hl-8); --hl-9: var(--light-hl-9); + --hl-10: var(--light-hl-10); + --hl-11: var(--light-hl-11); + --hl-12: var(--light-hl-12); + --hl-13: var(--light-hl-13); + --hl-14: var(--light-hl-14); + --hl-15: var(--light-hl-15); --code-background: var(--light-code-background); } @@ -76,6 +106,12 @@ --hl-7: var(--dark-hl-7); --hl-8: var(--dark-hl-8); --hl-9: var(--dark-hl-9); + --hl-10: var(--dark-hl-10); + --hl-11: var(--dark-hl-11); + --hl-12: var(--dark-hl-12); + --hl-13: var(--dark-hl-13); + --hl-14: var(--dark-hl-14); + --hl-15: var(--dark-hl-15); --code-background: var(--dark-code-background); } @@ -89,4 +125,10 @@ .hl-7 { color: var(--hl-7); } .hl-8 { color: var(--hl-8); } .hl-9 { color: var(--hl-9); } +.hl-10 { color: var(--hl-10); } +.hl-11 { color: var(--hl-11); } +.hl-12 { color: var(--hl-12); } +.hl-13 { color: var(--hl-13); } +.hl-14 { color: var(--hl-14); } +.hl-15 { color: var(--hl-15); } pre, code { background: var(--code-background); } diff --git a/api/assets/icons.js b/api/assets/icons.js new file mode 100644 index 000000000..e88e8ca77 --- /dev/null +++ b/api/assets/icons.js @@ -0,0 +1,18 @@ +(function() { + addIcons(); + function addIcons() { + if (document.readyState === "loading") return document.addEventListener("DOMContentLoaded", addIcons); + const svg = document.body.appendChild(document.createElementNS("http://www.w3.org/2000/svg", "svg")); + svg.innerHTML = `""`; + svg.style.display = "none"; + if (location.protocol === "file:") updateUseElements(); + } + + function updateUseElements() { + document.querySelectorAll("use").forEach(el => { + if (el.getAttribute("href").includes("#icon-")) { + el.setAttribute("href", el.getAttribute("href").replace(/.*#/, "#")); + } + }); + } +})() \ No newline at end of file diff --git a/api/assets/icons.svg b/api/assets/icons.svg new file mode 100644 index 000000000..e371b8b5d --- /dev/null +++ b/api/assets/icons.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/api/assets/main.js b/api/assets/main.js index f7c83669c..35728810f 100644 --- a/api/assets/main.js +++ b/api/assets/main.js @@ -1,7 +1,9 @@ "use strict"; -"use strict";(()=>{var Qe=Object.create;var ae=Object.defineProperty;var Pe=Object.getOwnPropertyDescriptor;var Ce=Object.getOwnPropertyNames;var Oe=Object.getPrototypeOf,Re=Object.prototype.hasOwnProperty;var _e=(t,e)=>()=>(e||t((e={exports:{}}).exports,e),e.exports);var Me=(t,e,n,r)=>{if(e&&typeof e=="object"||typeof e=="function")for(let i of Ce(e))!Re.call(t,i)&&i!==n&&ae(t,i,{get:()=>e[i],enumerable:!(r=Pe(e,i))||r.enumerable});return t};var De=(t,e,n)=>(n=t!=null?Qe(Oe(t)):{},Me(e||!t||!t.__esModule?ae(n,"default",{value:t,enumerable:!0}):n,t));var de=_e((ce,he)=>{(function(){var t=function(e){var n=new t.Builder;return n.pipeline.add(t.trimmer,t.stopWordFilter,t.stemmer),n.searchPipeline.add(t.stemmer),e.call(n,n),n.build()};t.version="2.3.9";t.utils={},t.utils.warn=function(e){return function(n){e.console&&console.warn&&console.warn(n)}}(this),t.utils.asString=function(e){return e==null?"":e.toString()},t.utils.clone=function(e){if(e==null)return e;for(var n=Object.create(null),r=Object.keys(e),i=0;i0){var h=t.utils.clone(n)||{};h.position=[a,l],h.index=s.length,s.push(new t.Token(r.slice(a,o),h))}a=o+1}}return s},t.tokenizer.separator=/[\s\-]+/;t.Pipeline=function(){this._stack=[]},t.Pipeline.registeredFunctions=Object.create(null),t.Pipeline.registerFunction=function(e,n){n in this.registeredFunctions&&t.utils.warn("Overwriting existing registered function: "+n),e.label=n,t.Pipeline.registeredFunctions[e.label]=e},t.Pipeline.warnIfFunctionNotRegistered=function(e){var n=e.label&&e.label in this.registeredFunctions;n||t.utils.warn(`Function is not registered with pipeline. This may cause problems when serialising the index. -`,e)},t.Pipeline.load=function(e){var n=new t.Pipeline;return e.forEach(function(r){var i=t.Pipeline.registeredFunctions[r];if(i)n.add(i);else throw new Error("Cannot load unregistered function: "+r)}),n},t.Pipeline.prototype.add=function(){var e=Array.prototype.slice.call(arguments);e.forEach(function(n){t.Pipeline.warnIfFunctionNotRegistered(n),this._stack.push(n)},this)},t.Pipeline.prototype.after=function(e,n){t.Pipeline.warnIfFunctionNotRegistered(n);var r=this._stack.indexOf(e);if(r==-1)throw new Error("Cannot find existingFn");r=r+1,this._stack.splice(r,0,n)},t.Pipeline.prototype.before=function(e,n){t.Pipeline.warnIfFunctionNotRegistered(n);var r=this._stack.indexOf(e);if(r==-1)throw new Error("Cannot find existingFn");this._stack.splice(r,0,n)},t.Pipeline.prototype.remove=function(e){var n=this._stack.indexOf(e);n!=-1&&this._stack.splice(n,1)},t.Pipeline.prototype.run=function(e){for(var n=this._stack.length,r=0;r1&&(oe&&(r=s),o!=e);)i=r-n,s=n+Math.floor(i/2),o=this.elements[s*2];if(o==e||o>e)return s*2;if(ou?h+=2:a==u&&(n+=r[l+1]*i[h+1],l+=2,h+=2);return n},t.Vector.prototype.similarity=function(e){return this.dot(e)/this.magnitude()||0},t.Vector.prototype.toArray=function(){for(var e=new Array(this.elements.length/2),n=1,r=0;n0){var o=s.str.charAt(0),a;o in s.node.edges?a=s.node.edges[o]:(a=new t.TokenSet,s.node.edges[o]=a),s.str.length==1&&(a.final=!0),i.push({node:a,editsRemaining:s.editsRemaining,str:s.str.slice(1)})}if(s.editsRemaining!=0){if("*"in s.node.edges)var u=s.node.edges["*"];else{var u=new t.TokenSet;s.node.edges["*"]=u}if(s.str.length==0&&(u.final=!0),i.push({node:u,editsRemaining:s.editsRemaining-1,str:s.str}),s.str.length>1&&i.push({node:s.node,editsRemaining:s.editsRemaining-1,str:s.str.slice(1)}),s.str.length==1&&(s.node.final=!0),s.str.length>=1){if("*"in s.node.edges)var l=s.node.edges["*"];else{var l=new t.TokenSet;s.node.edges["*"]=l}s.str.length==1&&(l.final=!0),i.push({node:l,editsRemaining:s.editsRemaining-1,str:s.str.slice(1)})}if(s.str.length>1){var h=s.str.charAt(0),m=s.str.charAt(1),v;m in s.node.edges?v=s.node.edges[m]:(v=new t.TokenSet,s.node.edges[m]=v),s.str.length==1&&(v.final=!0),i.push({node:v,editsRemaining:s.editsRemaining-1,str:h+s.str.slice(2)})}}}return r},t.TokenSet.fromString=function(e){for(var n=new t.TokenSet,r=n,i=0,s=e.length;i=e;n--){var r=this.uncheckedNodes[n],i=r.child.toString();i in this.minimizedNodes?r.parent.edges[r.char]=this.minimizedNodes[i]:(r.child._str=i,this.minimizedNodes[i]=r.child),this.uncheckedNodes.pop()}};t.Index=function(e){this.invertedIndex=e.invertedIndex,this.fieldVectors=e.fieldVectors,this.tokenSet=e.tokenSet,this.fields=e.fields,this.pipeline=e.pipeline},t.Index.prototype.search=function(e){return this.query(function(n){var r=new t.QueryParser(e,n);r.parse()})},t.Index.prototype.query=function(e){for(var n=new t.Query(this.fields),r=Object.create(null),i=Object.create(null),s=Object.create(null),o=Object.create(null),a=Object.create(null),u=0;u1?this._b=1:this._b=e},t.Builder.prototype.k1=function(e){this._k1=e},t.Builder.prototype.add=function(e,n){var r=e[this._ref],i=Object.keys(this._fields);this._documents[r]=n||{},this.documentCount+=1;for(var s=0;s=this.length)return t.QueryLexer.EOS;var e=this.str.charAt(this.pos);return this.pos+=1,e},t.QueryLexer.prototype.width=function(){return this.pos-this.start},t.QueryLexer.prototype.ignore=function(){this.start==this.pos&&(this.pos+=1),this.start=this.pos},t.QueryLexer.prototype.backup=function(){this.pos-=1},t.QueryLexer.prototype.acceptDigitRun=function(){var e,n;do e=this.next(),n=e.charCodeAt(0);while(n>47&&n<58);e!=t.QueryLexer.EOS&&this.backup()},t.QueryLexer.prototype.more=function(){return this.pos1&&(e.backup(),e.emit(t.QueryLexer.TERM)),e.ignore(),e.more())return t.QueryLexer.lexText},t.QueryLexer.lexEditDistance=function(e){return e.ignore(),e.acceptDigitRun(),e.emit(t.QueryLexer.EDIT_DISTANCE),t.QueryLexer.lexText},t.QueryLexer.lexBoost=function(e){return e.ignore(),e.acceptDigitRun(),e.emit(t.QueryLexer.BOOST),t.QueryLexer.lexText},t.QueryLexer.lexEOS=function(e){e.width()>0&&e.emit(t.QueryLexer.TERM)},t.QueryLexer.termSeparator=t.tokenizer.separator,t.QueryLexer.lexText=function(e){for(;;){var n=e.next();if(n==t.QueryLexer.EOS)return t.QueryLexer.lexEOS;if(n.charCodeAt(0)==92){e.escapeCharacter();continue}if(n==":")return t.QueryLexer.lexField;if(n=="~")return e.backup(),e.width()>0&&e.emit(t.QueryLexer.TERM),t.QueryLexer.lexEditDistance;if(n=="^")return e.backup(),e.width()>0&&e.emit(t.QueryLexer.TERM),t.QueryLexer.lexBoost;if(n=="+"&&e.width()===1||n=="-"&&e.width()===1)return e.emit(t.QueryLexer.PRESENCE),t.QueryLexer.lexText;if(n.match(t.QueryLexer.termSeparator))return t.QueryLexer.lexTerm}},t.QueryParser=function(e,n){this.lexer=new t.QueryLexer(e),this.query=n,this.currentClause={},this.lexemeIdx=0},t.QueryParser.prototype.parse=function(){this.lexer.run(),this.lexemes=this.lexer.lexemes;for(var e=t.QueryParser.parseClause;e;)e=e(this);return this.query},t.QueryParser.prototype.peekLexeme=function(){return this.lexemes[this.lexemeIdx]},t.QueryParser.prototype.consumeLexeme=function(){var e=this.peekLexeme();return this.lexemeIdx+=1,e},t.QueryParser.prototype.nextClause=function(){var e=this.currentClause;this.query.clause(e),this.currentClause={}},t.QueryParser.parseClause=function(e){var n=e.peekLexeme();if(n!=null)switch(n.type){case t.QueryLexer.PRESENCE:return t.QueryParser.parsePresence;case t.QueryLexer.FIELD:return t.QueryParser.parseField;case t.QueryLexer.TERM:return t.QueryParser.parseTerm;default:var r="expected either a field or a term, found "+n.type;throw n.str.length>=1&&(r+=" with value '"+n.str+"'"),new t.QueryParseError(r,n.start,n.end)}},t.QueryParser.parsePresence=function(e){var n=e.consumeLexeme();if(n!=null){switch(n.str){case"-":e.currentClause.presence=t.Query.presence.PROHIBITED;break;case"+":e.currentClause.presence=t.Query.presence.REQUIRED;break;default:var r="unrecognised presence operator'"+n.str+"'";throw new t.QueryParseError(r,n.start,n.end)}var i=e.peekLexeme();if(i==null){var r="expecting term or field, found nothing";throw new t.QueryParseError(r,n.start,n.end)}switch(i.type){case t.QueryLexer.FIELD:return t.QueryParser.parseField;case t.QueryLexer.TERM:return t.QueryParser.parseTerm;default:var r="expecting term or field, found '"+i.type+"'";throw new t.QueryParseError(r,i.start,i.end)}}},t.QueryParser.parseField=function(e){var n=e.consumeLexeme();if(n!=null){if(e.query.allFields.indexOf(n.str)==-1){var r=e.query.allFields.map(function(o){return"'"+o+"'"}).join(", "),i="unrecognised field '"+n.str+"', possible fields: "+r;throw new t.QueryParseError(i,n.start,n.end)}e.currentClause.fields=[n.str];var s=e.peekLexeme();if(s==null){var i="expecting term, found nothing";throw new t.QueryParseError(i,n.start,n.end)}switch(s.type){case t.QueryLexer.TERM:return t.QueryParser.parseTerm;default:var i="expecting term, found '"+s.type+"'";throw new t.QueryParseError(i,s.start,s.end)}}},t.QueryParser.parseTerm=function(e){var n=e.consumeLexeme();if(n!=null){e.currentClause.term=n.str.toLowerCase(),n.str.indexOf("*")!=-1&&(e.currentClause.usePipeline=!1);var r=e.peekLexeme();if(r==null){e.nextClause();return}switch(r.type){case t.QueryLexer.TERM:return e.nextClause(),t.QueryParser.parseTerm;case t.QueryLexer.FIELD:return e.nextClause(),t.QueryParser.parseField;case t.QueryLexer.EDIT_DISTANCE:return t.QueryParser.parseEditDistance;case t.QueryLexer.BOOST:return t.QueryParser.parseBoost;case t.QueryLexer.PRESENCE:return e.nextClause(),t.QueryParser.parsePresence;default:var i="Unexpected lexeme type '"+r.type+"'";throw new t.QueryParseError(i,r.start,r.end)}}},t.QueryParser.parseEditDistance=function(e){var n=e.consumeLexeme();if(n!=null){var r=parseInt(n.str,10);if(isNaN(r)){var i="edit distance must be numeric";throw new t.QueryParseError(i,n.start,n.end)}e.currentClause.editDistance=r;var s=e.peekLexeme();if(s==null){e.nextClause();return}switch(s.type){case t.QueryLexer.TERM:return e.nextClause(),t.QueryParser.parseTerm;case t.QueryLexer.FIELD:return e.nextClause(),t.QueryParser.parseField;case t.QueryLexer.EDIT_DISTANCE:return t.QueryParser.parseEditDistance;case t.QueryLexer.BOOST:return t.QueryParser.parseBoost;case t.QueryLexer.PRESENCE:return e.nextClause(),t.QueryParser.parsePresence;default:var i="Unexpected lexeme type '"+s.type+"'";throw new t.QueryParseError(i,s.start,s.end)}}},t.QueryParser.parseBoost=function(e){var n=e.consumeLexeme();if(n!=null){var r=parseInt(n.str,10);if(isNaN(r)){var i="boost must be numeric";throw new t.QueryParseError(i,n.start,n.end)}e.currentClause.boost=r;var s=e.peekLexeme();if(s==null){e.nextClause();return}switch(s.type){case t.QueryLexer.TERM:return e.nextClause(),t.QueryParser.parseTerm;case t.QueryLexer.FIELD:return e.nextClause(),t.QueryParser.parseField;case t.QueryLexer.EDIT_DISTANCE:return t.QueryParser.parseEditDistance;case t.QueryLexer.BOOST:return t.QueryParser.parseBoost;case t.QueryLexer.PRESENCE:return e.nextClause(),t.QueryParser.parsePresence;default:var i="Unexpected lexeme type '"+s.type+"'";throw new t.QueryParseError(i,s.start,s.end)}}},function(e,n){typeof define=="function"&&define.amd?define(n):typeof ce=="object"?he.exports=n():e.lunr=n()}(this,function(){return t})})()});var le=[];function B(t,e){le.push({selector:e,constructor:t})}var Y=class{constructor(){this.alwaysVisibleMember=null;this.createComponents(document.body),this.ensureFocusedElementVisible(),window.addEventListener("hashchange",()=>this.ensureFocusedElementVisible())}createComponents(e){le.forEach(n=>{e.querySelectorAll(n.selector).forEach(r=>{r.dataset.hasInstance||(new n.constructor({el:r,app:this}),r.dataset.hasInstance=String(!0))})})}filterChanged(){this.ensureFocusedElementVisible()}ensureFocusedElementVisible(){this.alwaysVisibleMember&&(this.alwaysVisibleMember.classList.remove("always-visible"),this.alwaysVisibleMember.firstElementChild.remove(),this.alwaysVisibleMember=null);let e=document.getElementById(location.hash.substring(1));if(!e)return;let n=e.parentElement;for(;n&&n.tagName!=="SECTION";)n=n.parentElement;if(n&&n.offsetParent==null){this.alwaysVisibleMember=n,n.classList.add("always-visible");let r=document.createElement("p");r.classList.add("warning"),r.textContent="This member is normally hidden due to your filter settings.",n.prepend(r)}}};var I=class{constructor(e){this.el=e.el,this.app=e.app}};var J=class{constructor(){this.listeners={}}addEventListener(e,n){e in this.listeners||(this.listeners[e]=[]),this.listeners[e].push(n)}removeEventListener(e,n){if(!(e in this.listeners))return;let r=this.listeners[e];for(let i=0,s=r.length;i{let n=Date.now();return(...r)=>{n+e-Date.now()<0&&(t(...r),n=Date.now())}};var re=class extends J{constructor(){super();this.scrollTop=0;this.lastY=0;this.width=0;this.height=0;this.showToolbar=!0;this.toolbar=document.querySelector(".tsd-page-toolbar"),this.navigation=document.querySelector(".col-menu"),window.addEventListener("scroll",ne(()=>this.onScroll(),10)),window.addEventListener("resize",ne(()=>this.onResize(),10)),this.searchInput=document.querySelector("#tsd-search input"),this.searchInput&&this.searchInput.addEventListener("focus",()=>{this.hideShowToolbar()}),this.onResize(),this.onScroll()}triggerResize(){let n=new CustomEvent("resize",{detail:{width:this.width,height:this.height}});this.dispatchEvent(n)}onResize(){this.width=window.innerWidth||0,this.height=window.innerHeight||0;let n=new CustomEvent("resize",{detail:{width:this.width,height:this.height}});this.dispatchEvent(n)}onScroll(){this.scrollTop=window.scrollY||0;let n=new CustomEvent("scroll",{detail:{scrollTop:this.scrollTop}});this.dispatchEvent(n),this.hideShowToolbar()}hideShowToolbar(){let n=this.showToolbar;this.showToolbar=this.lastY>=this.scrollTop||this.scrollTop<=0||!!this.searchInput&&this.searchInput===document.activeElement,n!==this.showToolbar&&(this.toolbar.classList.toggle("tsd-page-toolbar--hide"),this.navigation?.classList.toggle("col-menu--hide")),this.lastY=this.scrollTop}},R=re;R.instance=new re;var X=class extends I{constructor(n){super(n);this.anchors=[];this.index=-1;R.instance.addEventListener("resize",()=>this.onResize()),R.instance.addEventListener("scroll",r=>this.onScroll(r)),this.createAnchors()}createAnchors(){let n=window.location.href;n.indexOf("#")!=-1&&(n=n.substring(0,n.indexOf("#"))),this.el.querySelectorAll("a").forEach(r=>{let i=r.href;if(i.indexOf("#")==-1||i.substring(0,n.length)!=n)return;let s=i.substring(i.indexOf("#")+1),o=document.querySelector("a.tsd-anchor[name="+s+"]"),a=r.parentNode;!o||!a||this.anchors.push({link:a,anchor:o,position:0})}),this.onResize()}onResize(){let n;for(let i=0,s=this.anchors.length;ii.position-s.position);let r=new CustomEvent("scroll",{detail:{scrollTop:R.instance.scrollTop}});this.onScroll(r)}onScroll(n){let r=n.detail.scrollTop+5,i=this.anchors,s=i.length-1,o=this.index;for(;o>-1&&i[o].position>r;)o-=1;for(;o-1&&this.anchors[this.index].link.classList.remove("focus"),this.index=o,this.index>-1&&this.anchors[this.index].link.classList.add("focus"))}};var ue=(t,e=100)=>{let n;return()=>{clearTimeout(n),n=setTimeout(()=>t(),e)}};var me=De(de());function ve(){let t=document.getElementById("tsd-search");if(!t)return;let e=document.getElementById("search-script");t.classList.add("loading"),e&&(e.addEventListener("error",()=>{t.classList.remove("loading"),t.classList.add("failure")}),e.addEventListener("load",()=>{t.classList.remove("loading"),t.classList.add("ready")}),window.searchData&&t.classList.remove("loading"));let n=document.querySelector("#tsd-search input"),r=document.querySelector("#tsd-search .results");if(!n||!r)throw new Error("The input field or the result list wrapper was not found");let i=!1;r.addEventListener("mousedown",()=>i=!0),r.addEventListener("mouseup",()=>{i=!1,t.classList.remove("has-focus")}),n.addEventListener("focus",()=>t.classList.add("has-focus")),n.addEventListener("blur",()=>{i||(i=!1,t.classList.remove("has-focus"))});let s={base:t.dataset.base+"/"};Fe(t,r,n,s)}function Fe(t,e,n,r){n.addEventListener("input",ue(()=>{He(t,e,n,r)},200));let i=!1;n.addEventListener("keydown",s=>{i=!0,s.key=="Enter"?Ve(e,n):s.key=="Escape"?n.blur():s.key=="ArrowUp"?pe(e,-1):s.key==="ArrowDown"?pe(e,1):i=!1}),n.addEventListener("keypress",s=>{i&&s.preventDefault()}),document.body.addEventListener("keydown",s=>{s.altKey||s.ctrlKey||s.metaKey||!n.matches(":focus")&&s.key==="/"&&(n.focus(),s.preventDefault())})}function Ae(t,e){t.index||window.searchData&&(e.classList.remove("loading"),e.classList.add("ready"),t.data=window.searchData,t.index=me.Index.load(window.searchData.index))}function He(t,e,n,r){if(Ae(r,t),!r.index||!r.data)return;e.textContent="";let i=n.value.trim(),s=i?r.index.search(`*${i}*`):[];for(let o=0;oa.score-o.score);for(let o=0,a=Math.min(10,s.length);o${fe(u.parent,i)}.${l}`);let h=document.createElement("li");h.classList.value=u.classes??"";let m=document.createElement("a");m.href=r.base+u.url,m.innerHTML=l,h.append(m),e.appendChild(h)}}function pe(t,e){let n=t.querySelector(".current");if(!n)n=t.querySelector(e==1?"li:first-child":"li:last-child"),n&&n.classList.add("current");else{let r=n;if(e===1)do r=r.nextElementSibling??void 0;while(r instanceof HTMLElement&&r.offsetParent==null);else do r=r.previousElementSibling??void 0;while(r instanceof HTMLElement&&r.offsetParent==null);r&&(n.classList.remove("current"),r.classList.add("current"))}}function Ve(t,e){let n=t.querySelector(".current");if(n||(n=t.querySelector("li:first-child")),n){let r=n.querySelector("a");r&&(window.location.href=r.href),e.blur()}}function fe(t,e){if(e==="")return t;let n=t.toLocaleLowerCase(),r=e.toLocaleLowerCase(),i=[],s=0,o=n.indexOf(r);for(;o!=-1;)i.push(ie(t.substring(s,o)),`${ie(t.substring(o,o+r.length))}`),s=o+r.length,o=n.indexOf(r,s);return i.push(ie(t.substring(s))),i.join("")}var Ne={"&":"&","<":"<",">":">","'":"'",'"':"""};function ie(t){return t.replace(/[&<>"'"]/g,e=>Ne[e])}var F="mousedown",ye="mousemove",j="mouseup",Z={x:0,y:0},ge=!1,se=!1,Be=!1,A=!1,xe=/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent);document.documentElement.classList.add(xe?"is-mobile":"not-mobile");xe&&"ontouchstart"in document.documentElement&&(Be=!0,F="touchstart",ye="touchmove",j="touchend");document.addEventListener(F,t=>{se=!0,A=!1;let e=F=="touchstart"?t.targetTouches[0]:t;Z.y=e.pageY||0,Z.x=e.pageX||0});document.addEventListener(ye,t=>{if(se&&!A){let e=F=="touchstart"?t.targetTouches[0]:t,n=Z.x-(e.pageX||0),r=Z.y-(e.pageY||0);A=Math.sqrt(n*n+r*r)>10}});document.addEventListener(j,()=>{se=!1});document.addEventListener("click",t=>{ge&&(t.preventDefault(),t.stopImmediatePropagation(),ge=!1)});var K=class extends I{constructor(n){super(n);this.className=this.el.dataset.toggle||"",this.el.addEventListener(j,r=>this.onPointerUp(r)),this.el.addEventListener("click",r=>r.preventDefault()),document.addEventListener(F,r=>this.onDocumentPointerDown(r)),document.addEventListener(j,r=>this.onDocumentPointerUp(r))}setActive(n){if(this.active==n)return;this.active=n,document.documentElement.classList.toggle("has-"+this.className,n),this.el.classList.toggle("active",n);let r=(this.active?"to-has-":"from-has-")+this.className;document.documentElement.classList.add(r),setTimeout(()=>document.documentElement.classList.remove(r),500)}onPointerUp(n){A||(this.setActive(!0),n.preventDefault())}onDocumentPointerDown(n){if(this.active){if(n.target.closest(".col-menu, .tsd-filter-group"))return;this.setActive(!1)}}onDocumentPointerUp(n){if(!A&&this.active&&n.target.closest(".col-menu")){let r=n.target.closest("a");if(r){let i=window.location.href;i.indexOf("#")!=-1&&(i=i.substring(0,i.indexOf("#"))),r.href.substring(0,i.length)==i&&setTimeout(()=>this.setActive(!1),250)}}}};var oe;try{oe=localStorage}catch{oe={getItem(){return null},setItem(){}}}var Q=oe;var Le=document.head.appendChild(document.createElement("style"));Le.dataset.for="filters";var ee=class extends I{constructor(n){super(n);this.key=`filter-${this.el.name}`,this.value=this.el.checked,this.el.addEventListener("change",()=>{this.setLocalStorage(this.el.checked)}),this.setLocalStorage(this.fromLocalStorage()),Le.innerHTML+=`html:not(.${this.key}) .tsd-is-${this.el.name} { display: none; } -`}fromLocalStorage(){let n=Q.getItem(this.key);return n?n==="true":this.el.checked}setLocalStorage(n){Q.setItem(this.key,n.toString()),this.value=n,this.handleValueChange()}handleValueChange(){this.el.checked=this.value,document.documentElement.classList.toggle(this.key,this.value),this.app.filterChanged(),document.querySelectorAll(".tsd-index-section").forEach(n=>{n.style.display="block";let r=Array.from(n.querySelectorAll(".tsd-index-link")).every(i=>i.offsetParent==null);n.style.display=r?"none":"block"})}};var te=class extends I{constructor(n){super(n);this.calculateHeights(),this.summary=this.el.querySelector(".tsd-accordion-summary"),this.icon=this.summary.querySelector("svg"),this.key=`tsd-accordion-${this.summary.textContent.replace(/\s+/g,"-").toLowerCase()}`,this.setLocalStorage(this.fromLocalStorage(),!0),this.summary.addEventListener("click",r=>this.toggleVisibility(r)),this.icon.style.transform=this.getIconRotation()}getIconRotation(n=this.el.open){return`rotate(${n?0:-90}deg)`}calculateHeights(){let n=this.el.open,{position:r,left:i}=this.el.style;this.el.style.position="fixed",this.el.style.left="-9999px",this.el.open=!0,this.expandedHeight=this.el.offsetHeight+"px",this.el.open=!1,this.collapsedHeight=this.el.offsetHeight+"px",this.el.open=n,this.el.style.height=n?this.expandedHeight:this.collapsedHeight,this.el.style.position=r,this.el.style.left=i}toggleVisibility(n){n.preventDefault(),this.el.style.overflow="hidden",this.el.open?this.collapse():this.expand()}expand(n=!0){this.el.open=!0,this.animate(this.collapsedHeight,this.expandedHeight,{opening:!0,duration:n?300:0})}collapse(n=!0){this.animate(this.expandedHeight,this.collapsedHeight,{opening:!1,duration:n?300:0})}animate(n,r,{opening:i,duration:s=300}){if(this.animation)return;let o={duration:s,easing:"ease"};this.animation=this.el.animate({height:[n,r]},o),this.icon.animate({transform:[this.icon.style.transform||this.getIconRotation(!i),this.getIconRotation(i)]},o).addEventListener("finish",()=>{this.icon.style.transform=this.getIconRotation(i)}),this.animation.addEventListener("finish",()=>this.animationEnd(i))}animationEnd(n){this.el.open=n,this.animation=void 0,this.el.style.height="auto",this.el.style.overflow="visible",this.setLocalStorage(n)}fromLocalStorage(){let n=Q.getItem(this.key);return n?n==="true":this.el.open}setLocalStorage(n,r=!1){this.fromLocalStorage()===n&&!r||(Q.setItem(this.key,n.toString()),this.el.open=n,this.handleValueChange(r))}handleValueChange(n=!1){this.fromLocalStorage()===this.el.open&&!n||(this.fromLocalStorage()?this.expand(!1):this.collapse(!1))}};function be(t){let e=Q.getItem("tsd-theme")||"os";t.value=e,Ee(e),t.addEventListener("change",()=>{Q.setItem("tsd-theme",t.value),Ee(t.value)})}function Ee(t){document.documentElement.dataset.theme=t}ve();B(X,".menu-highlight");B(K,"a[data-toggle]");B(te,".tsd-index-accordion");B(ee,".tsd-filter-item input[type=checkbox]");var we=document.getElementById("theme");we&&be(we);var je=new Y;Object.defineProperty(window,"app",{value:je});})(); +window.translations={"copy":"Copy","copied":"Copied!","normally_hidden":"This member is normally hidden due to your filter settings."}; +"use strict";(()=>{var Pe=Object.create;var ie=Object.defineProperty;var Oe=Object.getOwnPropertyDescriptor;var _e=Object.getOwnPropertyNames;var Re=Object.getPrototypeOf,Me=Object.prototype.hasOwnProperty;var Fe=(t,e)=>()=>(e||t((e={exports:{}}).exports,e),e.exports);var De=(t,e,n,r)=>{if(e&&typeof e=="object"||typeof e=="function")for(let i of _e(e))!Me.call(t,i)&&i!==n&&ie(t,i,{get:()=>e[i],enumerable:!(r=Oe(e,i))||r.enumerable});return t};var Ae=(t,e,n)=>(n=t!=null?Pe(Re(t)):{},De(e||!t||!t.__esModule?ie(n,"default",{value:t,enumerable:!0}):n,t));var ue=Fe((ae,le)=>{(function(){var t=function(e){var n=new t.Builder;return n.pipeline.add(t.trimmer,t.stopWordFilter,t.stemmer),n.searchPipeline.add(t.stemmer),e.call(n,n),n.build()};t.version="2.3.9";t.utils={},t.utils.warn=function(e){return function(n){e.console&&console.warn&&console.warn(n)}}(this),t.utils.asString=function(e){return e==null?"":e.toString()},t.utils.clone=function(e){if(e==null)return e;for(var n=Object.create(null),r=Object.keys(e),i=0;i0){var d=t.utils.clone(n)||{};d.position=[a,u],d.index=s.length,s.push(new t.Token(r.slice(a,o),d))}a=o+1}}return s},t.tokenizer.separator=/[\s\-]+/;t.Pipeline=function(){this._stack=[]},t.Pipeline.registeredFunctions=Object.create(null),t.Pipeline.registerFunction=function(e,n){n in this.registeredFunctions&&t.utils.warn("Overwriting existing registered function: "+n),e.label=n,t.Pipeline.registeredFunctions[e.label]=e},t.Pipeline.warnIfFunctionNotRegistered=function(e){var n=e.label&&e.label in this.registeredFunctions;n||t.utils.warn(`Function is not registered with pipeline. This may cause problems when serialising the index. +`,e)},t.Pipeline.load=function(e){var n=new t.Pipeline;return e.forEach(function(r){var i=t.Pipeline.registeredFunctions[r];if(i)n.add(i);else throw new Error("Cannot load unregistered function: "+r)}),n},t.Pipeline.prototype.add=function(){var e=Array.prototype.slice.call(arguments);e.forEach(function(n){t.Pipeline.warnIfFunctionNotRegistered(n),this._stack.push(n)},this)},t.Pipeline.prototype.after=function(e,n){t.Pipeline.warnIfFunctionNotRegistered(n);var r=this._stack.indexOf(e);if(r==-1)throw new Error("Cannot find existingFn");r=r+1,this._stack.splice(r,0,n)},t.Pipeline.prototype.before=function(e,n){t.Pipeline.warnIfFunctionNotRegistered(n);var r=this._stack.indexOf(e);if(r==-1)throw new Error("Cannot find existingFn");this._stack.splice(r,0,n)},t.Pipeline.prototype.remove=function(e){var n=this._stack.indexOf(e);n!=-1&&this._stack.splice(n,1)},t.Pipeline.prototype.run=function(e){for(var n=this._stack.length,r=0;r1&&(oe&&(r=s),o!=e);)i=r-n,s=n+Math.floor(i/2),o=this.elements[s*2];if(o==e||o>e)return s*2;if(ol?d+=2:a==l&&(n+=r[u+1]*i[d+1],u+=2,d+=2);return n},t.Vector.prototype.similarity=function(e){return this.dot(e)/this.magnitude()||0},t.Vector.prototype.toArray=function(){for(var e=new Array(this.elements.length/2),n=1,r=0;n0){var o=s.str.charAt(0),a;o in s.node.edges?a=s.node.edges[o]:(a=new t.TokenSet,s.node.edges[o]=a),s.str.length==1&&(a.final=!0),i.push({node:a,editsRemaining:s.editsRemaining,str:s.str.slice(1)})}if(s.editsRemaining!=0){if("*"in s.node.edges)var l=s.node.edges["*"];else{var l=new t.TokenSet;s.node.edges["*"]=l}if(s.str.length==0&&(l.final=!0),i.push({node:l,editsRemaining:s.editsRemaining-1,str:s.str}),s.str.length>1&&i.push({node:s.node,editsRemaining:s.editsRemaining-1,str:s.str.slice(1)}),s.str.length==1&&(s.node.final=!0),s.str.length>=1){if("*"in s.node.edges)var u=s.node.edges["*"];else{var u=new t.TokenSet;s.node.edges["*"]=u}s.str.length==1&&(u.final=!0),i.push({node:u,editsRemaining:s.editsRemaining-1,str:s.str.slice(1)})}if(s.str.length>1){var d=s.str.charAt(0),m=s.str.charAt(1),p;m in s.node.edges?p=s.node.edges[m]:(p=new t.TokenSet,s.node.edges[m]=p),s.str.length==1&&(p.final=!0),i.push({node:p,editsRemaining:s.editsRemaining-1,str:d+s.str.slice(2)})}}}return r},t.TokenSet.fromString=function(e){for(var n=new t.TokenSet,r=n,i=0,s=e.length;i=e;n--){var r=this.uncheckedNodes[n],i=r.child.toString();i in this.minimizedNodes?r.parent.edges[r.char]=this.minimizedNodes[i]:(r.child._str=i,this.minimizedNodes[i]=r.child),this.uncheckedNodes.pop()}};t.Index=function(e){this.invertedIndex=e.invertedIndex,this.fieldVectors=e.fieldVectors,this.tokenSet=e.tokenSet,this.fields=e.fields,this.pipeline=e.pipeline},t.Index.prototype.search=function(e){return this.query(function(n){var r=new t.QueryParser(e,n);r.parse()})},t.Index.prototype.query=function(e){for(var n=new t.Query(this.fields),r=Object.create(null),i=Object.create(null),s=Object.create(null),o=Object.create(null),a=Object.create(null),l=0;l1?this._b=1:this._b=e},t.Builder.prototype.k1=function(e){this._k1=e},t.Builder.prototype.add=function(e,n){var r=e[this._ref],i=Object.keys(this._fields);this._documents[r]=n||{},this.documentCount+=1;for(var s=0;s=this.length)return t.QueryLexer.EOS;var e=this.str.charAt(this.pos);return this.pos+=1,e},t.QueryLexer.prototype.width=function(){return this.pos-this.start},t.QueryLexer.prototype.ignore=function(){this.start==this.pos&&(this.pos+=1),this.start=this.pos},t.QueryLexer.prototype.backup=function(){this.pos-=1},t.QueryLexer.prototype.acceptDigitRun=function(){var e,n;do e=this.next(),n=e.charCodeAt(0);while(n>47&&n<58);e!=t.QueryLexer.EOS&&this.backup()},t.QueryLexer.prototype.more=function(){return this.pos1&&(e.backup(),e.emit(t.QueryLexer.TERM)),e.ignore(),e.more())return t.QueryLexer.lexText},t.QueryLexer.lexEditDistance=function(e){return e.ignore(),e.acceptDigitRun(),e.emit(t.QueryLexer.EDIT_DISTANCE),t.QueryLexer.lexText},t.QueryLexer.lexBoost=function(e){return e.ignore(),e.acceptDigitRun(),e.emit(t.QueryLexer.BOOST),t.QueryLexer.lexText},t.QueryLexer.lexEOS=function(e){e.width()>0&&e.emit(t.QueryLexer.TERM)},t.QueryLexer.termSeparator=t.tokenizer.separator,t.QueryLexer.lexText=function(e){for(;;){var n=e.next();if(n==t.QueryLexer.EOS)return t.QueryLexer.lexEOS;if(n.charCodeAt(0)==92){e.escapeCharacter();continue}if(n==":")return t.QueryLexer.lexField;if(n=="~")return e.backup(),e.width()>0&&e.emit(t.QueryLexer.TERM),t.QueryLexer.lexEditDistance;if(n=="^")return e.backup(),e.width()>0&&e.emit(t.QueryLexer.TERM),t.QueryLexer.lexBoost;if(n=="+"&&e.width()===1||n=="-"&&e.width()===1)return e.emit(t.QueryLexer.PRESENCE),t.QueryLexer.lexText;if(n.match(t.QueryLexer.termSeparator))return t.QueryLexer.lexTerm}},t.QueryParser=function(e,n){this.lexer=new t.QueryLexer(e),this.query=n,this.currentClause={},this.lexemeIdx=0},t.QueryParser.prototype.parse=function(){this.lexer.run(),this.lexemes=this.lexer.lexemes;for(var e=t.QueryParser.parseClause;e;)e=e(this);return this.query},t.QueryParser.prototype.peekLexeme=function(){return this.lexemes[this.lexemeIdx]},t.QueryParser.prototype.consumeLexeme=function(){var e=this.peekLexeme();return this.lexemeIdx+=1,e},t.QueryParser.prototype.nextClause=function(){var e=this.currentClause;this.query.clause(e),this.currentClause={}},t.QueryParser.parseClause=function(e){var n=e.peekLexeme();if(n!=null)switch(n.type){case t.QueryLexer.PRESENCE:return t.QueryParser.parsePresence;case t.QueryLexer.FIELD:return t.QueryParser.parseField;case t.QueryLexer.TERM:return t.QueryParser.parseTerm;default:var r="expected either a field or a term, found "+n.type;throw n.str.length>=1&&(r+=" with value '"+n.str+"'"),new t.QueryParseError(r,n.start,n.end)}},t.QueryParser.parsePresence=function(e){var n=e.consumeLexeme();if(n!=null){switch(n.str){case"-":e.currentClause.presence=t.Query.presence.PROHIBITED;break;case"+":e.currentClause.presence=t.Query.presence.REQUIRED;break;default:var r="unrecognised presence operator'"+n.str+"'";throw new t.QueryParseError(r,n.start,n.end)}var i=e.peekLexeme();if(i==null){var r="expecting term or field, found nothing";throw new t.QueryParseError(r,n.start,n.end)}switch(i.type){case t.QueryLexer.FIELD:return t.QueryParser.parseField;case t.QueryLexer.TERM:return t.QueryParser.parseTerm;default:var r="expecting term or field, found '"+i.type+"'";throw new t.QueryParseError(r,i.start,i.end)}}},t.QueryParser.parseField=function(e){var n=e.consumeLexeme();if(n!=null){if(e.query.allFields.indexOf(n.str)==-1){var r=e.query.allFields.map(function(o){return"'"+o+"'"}).join(", "),i="unrecognised field '"+n.str+"', possible fields: "+r;throw new t.QueryParseError(i,n.start,n.end)}e.currentClause.fields=[n.str];var s=e.peekLexeme();if(s==null){var i="expecting term, found nothing";throw new t.QueryParseError(i,n.start,n.end)}switch(s.type){case t.QueryLexer.TERM:return t.QueryParser.parseTerm;default:var i="expecting term, found '"+s.type+"'";throw new t.QueryParseError(i,s.start,s.end)}}},t.QueryParser.parseTerm=function(e){var n=e.consumeLexeme();if(n!=null){e.currentClause.term=n.str.toLowerCase(),n.str.indexOf("*")!=-1&&(e.currentClause.usePipeline=!1);var r=e.peekLexeme();if(r==null){e.nextClause();return}switch(r.type){case t.QueryLexer.TERM:return e.nextClause(),t.QueryParser.parseTerm;case t.QueryLexer.FIELD:return e.nextClause(),t.QueryParser.parseField;case t.QueryLexer.EDIT_DISTANCE:return t.QueryParser.parseEditDistance;case t.QueryLexer.BOOST:return t.QueryParser.parseBoost;case t.QueryLexer.PRESENCE:return e.nextClause(),t.QueryParser.parsePresence;default:var i="Unexpected lexeme type '"+r.type+"'";throw new t.QueryParseError(i,r.start,r.end)}}},t.QueryParser.parseEditDistance=function(e){var n=e.consumeLexeme();if(n!=null){var r=parseInt(n.str,10);if(isNaN(r)){var i="edit distance must be numeric";throw new t.QueryParseError(i,n.start,n.end)}e.currentClause.editDistance=r;var s=e.peekLexeme();if(s==null){e.nextClause();return}switch(s.type){case t.QueryLexer.TERM:return e.nextClause(),t.QueryParser.parseTerm;case t.QueryLexer.FIELD:return e.nextClause(),t.QueryParser.parseField;case t.QueryLexer.EDIT_DISTANCE:return t.QueryParser.parseEditDistance;case t.QueryLexer.BOOST:return t.QueryParser.parseBoost;case t.QueryLexer.PRESENCE:return e.nextClause(),t.QueryParser.parsePresence;default:var i="Unexpected lexeme type '"+s.type+"'";throw new t.QueryParseError(i,s.start,s.end)}}},t.QueryParser.parseBoost=function(e){var n=e.consumeLexeme();if(n!=null){var r=parseInt(n.str,10);if(isNaN(r)){var i="boost must be numeric";throw new t.QueryParseError(i,n.start,n.end)}e.currentClause.boost=r;var s=e.peekLexeme();if(s==null){e.nextClause();return}switch(s.type){case t.QueryLexer.TERM:return e.nextClause(),t.QueryParser.parseTerm;case t.QueryLexer.FIELD:return e.nextClause(),t.QueryParser.parseField;case t.QueryLexer.EDIT_DISTANCE:return t.QueryParser.parseEditDistance;case t.QueryLexer.BOOST:return t.QueryParser.parseBoost;case t.QueryLexer.PRESENCE:return e.nextClause(),t.QueryParser.parsePresence;default:var i="Unexpected lexeme type '"+s.type+"'";throw new t.QueryParseError(i,s.start,s.end)}}},function(e,n){typeof define=="function"&&define.amd?define(n):typeof ae=="object"?le.exports=n():e.lunr=n()}(this,function(){return t})})()});var se=[];function G(t,e){se.push({selector:e,constructor:t})}var U=class{constructor(){this.alwaysVisibleMember=null;this.createComponents(document.body),this.ensureFocusedElementVisible(),this.listenForCodeCopies(),window.addEventListener("hashchange",()=>this.ensureFocusedElementVisible()),document.body.style.display||(this.ensureFocusedElementVisible(),this.updateIndexVisibility(),this.scrollToHash())}createComponents(e){se.forEach(n=>{e.querySelectorAll(n.selector).forEach(r=>{r.dataset.hasInstance||(new n.constructor({el:r,app:this}),r.dataset.hasInstance=String(!0))})})}filterChanged(){this.ensureFocusedElementVisible()}showPage(){document.body.style.display&&(document.body.style.removeProperty("display"),this.ensureFocusedElementVisible(),this.updateIndexVisibility(),this.scrollToHash())}scrollToHash(){if(location.hash){let e=document.getElementById(location.hash.substring(1));if(!e)return;e.scrollIntoView({behavior:"instant",block:"start"})}}ensureActivePageVisible(){let e=document.querySelector(".tsd-navigation .current"),n=e?.parentElement;for(;n&&!n.classList.contains(".tsd-navigation");)n instanceof HTMLDetailsElement&&(n.open=!0),n=n.parentElement;if(e&&!Ve(e)){let r=e.getBoundingClientRect().top-document.documentElement.clientHeight/4;document.querySelector(".site-menu").scrollTop=r,document.querySelector(".col-sidebar").scrollTop=r}}updateIndexVisibility(){let e=document.querySelector(".tsd-index-content"),n=e?.open;e&&(e.open=!0),document.querySelectorAll(".tsd-index-section").forEach(r=>{r.style.display="block";let i=Array.from(r.querySelectorAll(".tsd-index-link")).every(s=>s.offsetParent==null);r.style.display=i?"none":"block"}),e&&(e.open=n)}ensureFocusedElementVisible(){if(this.alwaysVisibleMember&&(this.alwaysVisibleMember.classList.remove("always-visible"),this.alwaysVisibleMember.firstElementChild.remove(),this.alwaysVisibleMember=null),!location.hash)return;let e=document.getElementById(location.hash.substring(1));if(!e)return;let n=e.parentElement;for(;n&&n.tagName!=="SECTION";)n=n.parentElement;if(!n)return;let r=n.offsetParent==null,i=n;for(;i!==document.body;)i instanceof HTMLDetailsElement&&(i.open=!0),i=i.parentElement;if(n.offsetParent==null){this.alwaysVisibleMember=n,n.classList.add("always-visible");let s=document.createElement("p");s.classList.add("warning"),s.textContent=window.translations.normally_hidden,n.prepend(s)}r&&e.scrollIntoView()}listenForCodeCopies(){document.querySelectorAll("pre > button").forEach(e=>{let n;e.addEventListener("click",()=>{e.previousElementSibling instanceof HTMLElement&&navigator.clipboard.writeText(e.previousElementSibling.innerText.trim()),e.textContent=window.translations.copied,e.classList.add("visible"),clearTimeout(n),n=setTimeout(()=>{e.classList.remove("visible"),n=setTimeout(()=>{e.textContent=window.translations.copy},100)},1e3)})})}};function Ve(t){let e=t.getBoundingClientRect(),n=Math.max(document.documentElement.clientHeight,window.innerHeight);return!(e.bottom<0||e.top-n>=0)}var oe=(t,e=100)=>{let n;return()=>{clearTimeout(n),n=setTimeout(()=>t(),e)}};var pe=Ae(ue());async function ce(t,e){if(!window.searchData)return;let n=await fetch(window.searchData),r=new Blob([await n.arrayBuffer()]).stream().pipeThrough(new DecompressionStream("gzip")),i=await new Response(r).json();t.data=i,t.index=pe.Index.load(i.index),e.classList.remove("loading"),e.classList.add("ready")}function fe(){let t=document.getElementById("tsd-search");if(!t)return;let e={base:t.dataset.base+"/"},n=document.getElementById("tsd-search-script");t.classList.add("loading"),n&&(n.addEventListener("error",()=>{t.classList.remove("loading"),t.classList.add("failure")}),n.addEventListener("load",()=>{ce(e,t)}),ce(e,t));let r=document.querySelector("#tsd-search input"),i=document.querySelector("#tsd-search .results");if(!r||!i)throw new Error("The input field or the result list wrapper was not found");i.addEventListener("mouseup",()=>{te(t)}),r.addEventListener("focus",()=>t.classList.add("has-focus")),He(t,i,r,e)}function He(t,e,n,r){n.addEventListener("input",oe(()=>{Ne(t,e,n,r)},200)),n.addEventListener("keydown",i=>{i.key=="Enter"?Be(e,t):i.key=="ArrowUp"?(de(e,n,-1),i.preventDefault()):i.key==="ArrowDown"&&(de(e,n,1),i.preventDefault())}),document.body.addEventListener("keypress",i=>{i.altKey||i.ctrlKey||i.metaKey||!n.matches(":focus")&&i.key==="/"&&(i.preventDefault(),n.focus())}),document.body.addEventListener("keyup",i=>{t.classList.contains("has-focus")&&(i.key==="Escape"||!e.matches(":focus-within")&&!n.matches(":focus"))&&(n.blur(),te(t))})}function te(t){t.classList.remove("has-focus")}function Ne(t,e,n,r){if(!r.index||!r.data)return;e.textContent="";let i=n.value.trim(),s;if(i){let o=i.split(" ").map(a=>a.length?`*${a}*`:"").join(" ");s=r.index.search(o)}else s=[];for(let o=0;oa.score-o.score);for(let o=0,a=Math.min(10,s.length);o`,d=he(l.name,i);globalThis.DEBUG_SEARCH_WEIGHTS&&(d+=` (score: ${s[o].score.toFixed(2)})`),l.parent&&(d=` + ${he(l.parent,i)}.${d}`);let m=document.createElement("li");m.classList.value=l.classes??"";let p=document.createElement("a");p.href=r.base+l.url,p.innerHTML=u+d,m.append(p),p.addEventListener("focus",()=>{e.querySelector(".current")?.classList.remove("current"),m.classList.add("current")}),e.appendChild(m)}}function de(t,e,n){let r=t.querySelector(".current");if(!r)r=t.querySelector(n==1?"li:first-child":"li:last-child"),r&&r.classList.add("current");else{let i=r;if(n===1)do i=i.nextElementSibling??void 0;while(i instanceof HTMLElement&&i.offsetParent==null);else do i=i.previousElementSibling??void 0;while(i instanceof HTMLElement&&i.offsetParent==null);i?(r.classList.remove("current"),i.classList.add("current")):n===-1&&(r.classList.remove("current"),e.focus())}}function Be(t,e){let n=t.querySelector(".current");if(n||(n=t.querySelector("li:first-child")),n){let r=n.querySelector("a");r&&(window.location.href=r.href),te(e)}}function he(t,e){if(e==="")return t;let n=t.toLocaleLowerCase(),r=e.toLocaleLowerCase(),i=[],s=0,o=n.indexOf(r);for(;o!=-1;)i.push(ee(t.substring(s,o)),`${ee(t.substring(o,o+r.length))}`),s=o+r.length,o=n.indexOf(r,s);return i.push(ee(t.substring(s))),i.join("")}var je={"&":"&","<":"<",">":">","'":"'",'"':"""};function ee(t){return t.replace(/[&<>"'"]/g,e=>je[e])}var I=class{constructor(e){this.el=e.el,this.app=e.app}};var F="mousedown",ye="mousemove",N="mouseup",J={x:0,y:0},me=!1,ne=!1,qe=!1,D=!1,ve=/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent);document.documentElement.classList.add(ve?"is-mobile":"not-mobile");ve&&"ontouchstart"in document.documentElement&&(qe=!0,F="touchstart",ye="touchmove",N="touchend");document.addEventListener(F,t=>{ne=!0,D=!1;let e=F=="touchstart"?t.targetTouches[0]:t;J.y=e.pageY||0,J.x=e.pageX||0});document.addEventListener(ye,t=>{if(ne&&!D){let e=F=="touchstart"?t.targetTouches[0]:t,n=J.x-(e.pageX||0),r=J.y-(e.pageY||0);D=Math.sqrt(n*n+r*r)>10}});document.addEventListener(N,()=>{ne=!1});document.addEventListener("click",t=>{me&&(t.preventDefault(),t.stopImmediatePropagation(),me=!1)});var X=class extends I{constructor(e){super(e),this.className=this.el.dataset.toggle||"",this.el.addEventListener(N,n=>this.onPointerUp(n)),this.el.addEventListener("click",n=>n.preventDefault()),document.addEventListener(F,n=>this.onDocumentPointerDown(n)),document.addEventListener(N,n=>this.onDocumentPointerUp(n))}setActive(e){if(this.active==e)return;this.active=e,document.documentElement.classList.toggle("has-"+this.className,e),this.el.classList.toggle("active",e);let n=(this.active?"to-has-":"from-has-")+this.className;document.documentElement.classList.add(n),setTimeout(()=>document.documentElement.classList.remove(n),500)}onPointerUp(e){D||(this.setActive(!0),e.preventDefault())}onDocumentPointerDown(e){if(this.active){if(e.target.closest(".col-sidebar, .tsd-filter-group"))return;this.setActive(!1)}}onDocumentPointerUp(e){if(!D&&this.active&&e.target.closest(".col-sidebar")){let n=e.target.closest("a");if(n){let r=window.location.href;r.indexOf("#")!=-1&&(r=r.substring(0,r.indexOf("#"))),n.href.substring(0,r.length)==r&&setTimeout(()=>this.setActive(!1),250)}}}};var re;try{re=localStorage}catch{re={getItem(){return null},setItem(){}}}var Q=re;var ge=document.head.appendChild(document.createElement("style"));ge.dataset.for="filters";var Y=class extends I{constructor(e){super(e),this.key=`filter-${this.el.name}`,this.value=this.el.checked,this.el.addEventListener("change",()=>{this.setLocalStorage(this.el.checked)}),this.setLocalStorage(this.fromLocalStorage()),ge.innerHTML+=`html:not(.${this.key}) .tsd-is-${this.el.name} { display: none; } +`,this.app.updateIndexVisibility()}fromLocalStorage(){let e=Q.getItem(this.key);return e?e==="true":this.el.checked}setLocalStorage(e){Q.setItem(this.key,e.toString()),this.value=e,this.handleValueChange()}handleValueChange(){this.el.checked=this.value,document.documentElement.classList.toggle(this.key,this.value),this.app.filterChanged(),this.app.updateIndexVisibility()}};var Z=class extends I{constructor(e){super(e),this.summary=this.el.querySelector(".tsd-accordion-summary"),this.icon=this.summary.querySelector("svg"),this.key=`tsd-accordion-${this.summary.dataset.key??this.summary.textContent.trim().replace(/\s+/g,"-").toLowerCase()}`;let n=Q.getItem(this.key);this.el.open=n?n==="true":this.el.open,this.el.addEventListener("toggle",()=>this.update());let r=this.summary.querySelector("a");r&&r.addEventListener("click",()=>{location.assign(r.href)}),this.update()}update(){this.icon.style.transform=`rotate(${this.el.open?0:-90}deg)`,Q.setItem(this.key,this.el.open.toString())}};function Ee(t){let e=Q.getItem("tsd-theme")||"os";t.value=e,xe(e),t.addEventListener("change",()=>{Q.setItem("tsd-theme",t.value),xe(t.value)})}function xe(t){document.documentElement.dataset.theme=t}var K;function we(){let t=document.getElementById("tsd-nav-script");t&&(t.addEventListener("load",Le),Le())}async function Le(){let t=document.getElementById("tsd-nav-container");if(!t||!window.navigationData)return;let n=await(await fetch(window.navigationData)).arrayBuffer(),r=new Blob([n]).stream().pipeThrough(new DecompressionStream("gzip")),i=await new Response(r).json();K=t.dataset.base,K.endsWith("/")||(K+="/"),t.innerHTML="";for(let s of i)Se(s,t,[]);window.app.createComponents(t),window.app.showPage(),window.app.ensureActivePageVisible()}function Se(t,e,n){let r=e.appendChild(document.createElement("li"));if(t.children){let i=[...n,t.text],s=r.appendChild(document.createElement("details"));s.className=t.class?`${t.class} tsd-accordion`:"tsd-accordion";let o=s.appendChild(document.createElement("summary"));o.className="tsd-accordion-summary",o.dataset.key=i.join("$"),o.innerHTML='',be(t,o);let a=s.appendChild(document.createElement("div"));a.className="tsd-accordion-details";let l=a.appendChild(document.createElement("ul"));l.className="tsd-nested-navigation";for(let u of t.children)Se(u,l,i)}else be(t,r,t.class)}function be(t,e,n){if(t.path){let r=e.appendChild(document.createElement("a"));r.href=K+t.path,n&&(r.className=n),location.pathname===r.pathname&&r.classList.add("current"),t.kind&&(r.innerHTML=``),r.appendChild(document.createElement("span")).textContent=t.text}else e.appendChild(document.createElement("span")).textContent=t.text}G(X,"a[data-toggle]");G(Z,".tsd-accordion");G(Y,".tsd-filter-item input[type=checkbox]");var Te=document.getElementById("tsd-theme");Te&&Ee(Te);var $e=new U;Object.defineProperty(window,"app",{value:$e});fe();we();})(); /*! Bundled license information: lunr/lunr.js: diff --git a/api/assets/navigation.js b/api/assets/navigation.js new file mode 100644 index 000000000..59c12ff8b --- /dev/null +++ b/api/assets/navigation.js @@ -0,0 +1 @@ +window.navigationData = "data:application/octet-stream;base64,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" \ No newline at end of file diff --git a/api/assets/search.js b/api/assets/search.js index 5ab8ff71f..d7379be2c 100644 --- a/api/assets/search.js +++ b/api/assets/search.js @@ -1 +1 @@ -window.searchData = JSON.parse("{\"kinds\":{\"4\":\"Namespace\",\"8\":\"Enumeration\",\"16\":\"Enumeration Member\",\"32\":\"Variable\",\"64\":\"Function\",\"128\":\"Class\",\"256\":\"Interface\",\"512\":\"Constructor\",\"1024\":\"Property\",\"2048\":\"Method\",\"65536\":\"Type literal\",\"262144\":\"Accessor\",\"4194304\":\"Type alias\"},\"rows\":[{\"kind\":32,\"name\":\"version\",\"url\":\"variables/version.html\",\"classes\":\"tsd-kind-variable\"},{\"kind\":4,\"name\":\"TypeGuards\",\"url\":\"modules/TypeGuards.html\",\"classes\":\"tsd-kind-namespace\"},{\"kind\":64,\"name\":\"isDelimitedToken\",\"url\":\"functions/TypeGuards.isDelimitedToken.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-namespace\",\"parent\":\"TypeGuards\"},{\"kind\":64,\"name\":\"isOperatorToken\",\"url\":\"functions/TypeGuards.isOperatorToken.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-namespace\",\"parent\":\"TypeGuards\"},{\"kind\":64,\"name\":\"isHTMLToken\",\"url\":\"functions/TypeGuards.isHTMLToken.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-namespace\",\"parent\":\"TypeGuards\"},{\"kind\":64,\"name\":\"isOutputToken\",\"url\":\"functions/TypeGuards.isOutputToken.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-namespace\",\"parent\":\"TypeGuards\"},{\"kind\":64,\"name\":\"isTagToken\",\"url\":\"functions/TypeGuards.isTagToken.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-namespace\",\"parent\":\"TypeGuards\"},{\"kind\":64,\"name\":\"isQuotedToken\",\"url\":\"functions/TypeGuards.isQuotedToken.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-namespace\",\"parent\":\"TypeGuards\"},{\"kind\":64,\"name\":\"isLiteralToken\",\"url\":\"functions/TypeGuards.isLiteralToken.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-namespace\",\"parent\":\"TypeGuards\"},{\"kind\":64,\"name\":\"isNumberToken\",\"url\":\"functions/TypeGuards.isNumberToken.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-namespace\",\"parent\":\"TypeGuards\"},{\"kind\":64,\"name\":\"isPropertyAccessToken\",\"url\":\"functions/TypeGuards.isPropertyAccessToken.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-namespace\",\"parent\":\"TypeGuards\"},{\"kind\":64,\"name\":\"isWordToken\",\"url\":\"functions/TypeGuards.isWordToken.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-namespace\",\"parent\":\"TypeGuards\"},{\"kind\":64,\"name\":\"isRangeToken\",\"url\":\"functions/TypeGuards.isRangeToken.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-namespace\",\"parent\":\"TypeGuards\"},{\"kind\":64,\"name\":\"toValue\",\"url\":\"functions/toValue.html\",\"classes\":\"tsd-kind-function\"},{\"kind\":64,\"name\":\"createTrie\",\"url\":\"functions/createTrie.html\",\"classes\":\"tsd-kind-function\"},{\"kind\":256,\"name\":\"Trie\",\"url\":\"interfaces/Trie.html\",\"classes\":\"tsd-kind-interface\"},{\"kind\":64,\"name\":\"toPromise\",\"url\":\"functions/toPromise.html\",\"classes\":\"tsd-kind-function\"},{\"kind\":64,\"name\":\"toValueSync\",\"url\":\"functions/toValueSync.html\",\"classes\":\"tsd-kind-function\"},{\"kind\":64,\"name\":\"assert\",\"url\":\"functions/assert.html\",\"classes\":\"tsd-kind-function\"},{\"kind\":128,\"name\":\"LiquidError\",\"url\":\"classes/LiquidError.html\",\"classes\":\"tsd-kind-class\"},{\"kind\":2048,\"name\":\"is\",\"url\":\"classes/LiquidError.html#is\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"LiquidError\"},{\"kind\":512,\"name\":\"constructor\",\"url\":\"classes/LiquidError.html#constructor\",\"classes\":\"tsd-kind-constructor tsd-parent-kind-class\",\"parent\":\"LiquidError\"},{\"kind\":1024,\"name\":\"token\",\"url\":\"classes/LiquidError.html#token\",\"classes\":\"tsd-kind-property tsd-parent-kind-class\",\"parent\":\"LiquidError\"},{\"kind\":1024,\"name\":\"context\",\"url\":\"classes/LiquidError.html#context\",\"classes\":\"tsd-kind-property tsd-parent-kind-class\",\"parent\":\"LiquidError\"},{\"kind\":1024,\"name\":\"originalError\",\"url\":\"classes/LiquidError.html#originalError\",\"classes\":\"tsd-kind-property tsd-parent-kind-class tsd-is-private\",\"parent\":\"LiquidError\"},{\"kind\":2048,\"name\":\"update\",\"url\":\"classes/LiquidError.html#update\",\"classes\":\"tsd-kind-method tsd-parent-kind-class tsd-is-protected\",\"parent\":\"LiquidError\"},{\"kind\":128,\"name\":\"ParseError\",\"url\":\"classes/ParseError.html\",\"classes\":\"tsd-kind-class\"},{\"kind\":2048,\"name\":\"is\",\"url\":\"classes/ParseError.html#is\",\"classes\":\"tsd-kind-method tsd-parent-kind-class tsd-is-inherited\",\"parent\":\"ParseError\"},{\"kind\":512,\"name\":\"constructor\",\"url\":\"classes/ParseError.html#constructor\",\"classes\":\"tsd-kind-constructor tsd-parent-kind-class\",\"parent\":\"ParseError\"},{\"kind\":1024,\"name\":\"token\",\"url\":\"classes/ParseError.html#token\",\"classes\":\"tsd-kind-property tsd-parent-kind-class tsd-is-inherited\",\"parent\":\"ParseError\"},{\"kind\":1024,\"name\":\"context\",\"url\":\"classes/ParseError.html#context\",\"classes\":\"tsd-kind-property tsd-parent-kind-class tsd-is-inherited\",\"parent\":\"ParseError\"},{\"kind\":2048,\"name\":\"update\",\"url\":\"classes/ParseError.html#update\",\"classes\":\"tsd-kind-method tsd-parent-kind-class tsd-is-protected tsd-is-inherited\",\"parent\":\"ParseError\"},{\"kind\":128,\"name\":\"RenderError\",\"url\":\"classes/RenderError.html\",\"classes\":\"tsd-kind-class\"},{\"kind\":2048,\"name\":\"is\",\"url\":\"classes/RenderError.html#is\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"RenderError\"},{\"kind\":512,\"name\":\"constructor\",\"url\":\"classes/RenderError.html#constructor\",\"classes\":\"tsd-kind-constructor tsd-parent-kind-class\",\"parent\":\"RenderError\"},{\"kind\":1024,\"name\":\"token\",\"url\":\"classes/RenderError.html#token\",\"classes\":\"tsd-kind-property tsd-parent-kind-class tsd-is-inherited\",\"parent\":\"RenderError\"},{\"kind\":1024,\"name\":\"context\",\"url\":\"classes/RenderError.html#context\",\"classes\":\"tsd-kind-property tsd-parent-kind-class tsd-is-inherited\",\"parent\":\"RenderError\"},{\"kind\":2048,\"name\":\"update\",\"url\":\"classes/RenderError.html#update\",\"classes\":\"tsd-kind-method tsd-parent-kind-class tsd-is-protected tsd-is-inherited\",\"parent\":\"RenderError\"},{\"kind\":128,\"name\":\"UndefinedVariableError\",\"url\":\"classes/UndefinedVariableError.html\",\"classes\":\"tsd-kind-class\"},{\"kind\":2048,\"name\":\"is\",\"url\":\"classes/UndefinedVariableError.html#is\",\"classes\":\"tsd-kind-method tsd-parent-kind-class tsd-is-inherited\",\"parent\":\"UndefinedVariableError\"},{\"kind\":512,\"name\":\"constructor\",\"url\":\"classes/UndefinedVariableError.html#constructor\",\"classes\":\"tsd-kind-constructor tsd-parent-kind-class\",\"parent\":\"UndefinedVariableError\"},{\"kind\":1024,\"name\":\"token\",\"url\":\"classes/UndefinedVariableError.html#token\",\"classes\":\"tsd-kind-property tsd-parent-kind-class tsd-is-inherited\",\"parent\":\"UndefinedVariableError\"},{\"kind\":1024,\"name\":\"context\",\"url\":\"classes/UndefinedVariableError.html#context\",\"classes\":\"tsd-kind-property tsd-parent-kind-class tsd-is-inherited\",\"parent\":\"UndefinedVariableError\"},{\"kind\":2048,\"name\":\"update\",\"url\":\"classes/UndefinedVariableError.html#update\",\"classes\":\"tsd-kind-method tsd-parent-kind-class tsd-is-protected tsd-is-inherited\",\"parent\":\"UndefinedVariableError\"},{\"kind\":128,\"name\":\"TokenizationError\",\"url\":\"classes/TokenizationError.html\",\"classes\":\"tsd-kind-class\"},{\"kind\":2048,\"name\":\"is\",\"url\":\"classes/TokenizationError.html#is\",\"classes\":\"tsd-kind-method tsd-parent-kind-class tsd-is-inherited\",\"parent\":\"TokenizationError\"},{\"kind\":512,\"name\":\"constructor\",\"url\":\"classes/TokenizationError.html#constructor\",\"classes\":\"tsd-kind-constructor tsd-parent-kind-class\",\"parent\":\"TokenizationError\"},{\"kind\":1024,\"name\":\"token\",\"url\":\"classes/TokenizationError.html#token\",\"classes\":\"tsd-kind-property tsd-parent-kind-class tsd-is-inherited\",\"parent\":\"TokenizationError\"},{\"kind\":1024,\"name\":\"context\",\"url\":\"classes/TokenizationError.html#context\",\"classes\":\"tsd-kind-property tsd-parent-kind-class tsd-is-inherited\",\"parent\":\"TokenizationError\"},{\"kind\":2048,\"name\":\"update\",\"url\":\"classes/TokenizationError.html#update\",\"classes\":\"tsd-kind-method tsd-parent-kind-class tsd-is-protected tsd-is-inherited\",\"parent\":\"TokenizationError\"},{\"kind\":128,\"name\":\"AssertionError\",\"url\":\"classes/AssertionError.html\",\"classes\":\"tsd-kind-class\"},{\"kind\":512,\"name\":\"constructor\",\"url\":\"classes/AssertionError.html#constructor\",\"classes\":\"tsd-kind-constructor tsd-parent-kind-class\",\"parent\":\"AssertionError\"},{\"kind\":128,\"name\":\"Drop\",\"url\":\"classes/Drop.html\",\"classes\":\"tsd-kind-class\"},{\"kind\":512,\"name\":\"constructor\",\"url\":\"classes/Drop.html#constructor\",\"classes\":\"tsd-kind-constructor tsd-parent-kind-class\",\"parent\":\"Drop\"},{\"kind\":2048,\"name\":\"liquidMethodMissing\",\"url\":\"classes/Drop.html#liquidMethodMissing\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Drop\"},{\"kind\":256,\"name\":\"Emitter\",\"url\":\"interfaces/Emitter.html\",\"classes\":\"tsd-kind-interface\"},{\"kind\":2048,\"name\":\"write\",\"url\":\"interfaces/Emitter.html#write\",\"classes\":\"tsd-kind-method tsd-parent-kind-interface\",\"parent\":\"Emitter\"},{\"kind\":1024,\"name\":\"buffer\",\"url\":\"interfaces/Emitter.html#buffer\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"Emitter\"},{\"kind\":32,\"name\":\"defaultOperators\",\"url\":\"variables/defaultOperators.html\",\"classes\":\"tsd-kind-variable\"},{\"kind\":4194304,\"name\":\"Operators\",\"url\":\"types/Operators.html\",\"classes\":\"tsd-kind-type-alias\"},{\"kind\":64,\"name\":\"evalToken\",\"url\":\"functions/evalToken.html\",\"classes\":\"tsd-kind-function\"},{\"kind\":64,\"name\":\"evalQuotedToken\",\"url\":\"functions/evalQuotedToken.html\",\"classes\":\"tsd-kind-function\"},{\"kind\":128,\"name\":\"Expression\",\"url\":\"classes/Expression.html\",\"classes\":\"tsd-kind-class\"},{\"kind\":512,\"name\":\"constructor\",\"url\":\"classes/Expression.html#constructor\",\"classes\":\"tsd-kind-constructor tsd-parent-kind-class\",\"parent\":\"Expression\"},{\"kind\":1024,\"name\":\"postfix\",\"url\":\"classes/Expression.html#postfix\",\"classes\":\"tsd-kind-property tsd-parent-kind-class tsd-is-private\",\"parent\":\"Expression\"},{\"kind\":2048,\"name\":\"evaluate\",\"url\":\"classes/Expression.html#evaluate\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Expression\"},{\"kind\":2048,\"name\":\"valid\",\"url\":\"classes/Expression.html#valid\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Expression\"},{\"kind\":64,\"name\":\"isFalsy\",\"url\":\"functions/isFalsy.html\",\"classes\":\"tsd-kind-function\"},{\"kind\":64,\"name\":\"isTruthy\",\"url\":\"functions/isTruthy.html\",\"classes\":\"tsd-kind-function\"},{\"kind\":128,\"name\":\"Context\",\"url\":\"classes/Context.html\",\"classes\":\"tsd-kind-class\"},{\"kind\":512,\"name\":\"constructor\",\"url\":\"classes/Context.html#constructor\",\"classes\":\"tsd-kind-constructor tsd-parent-kind-class\",\"parent\":\"Context\"},{\"kind\":1024,\"name\":\"scopes\",\"url\":\"classes/Context.html#scopes\",\"classes\":\"tsd-kind-property tsd-parent-kind-class tsd-is-private\",\"parent\":\"Context\"},{\"kind\":1024,\"name\":\"registers\",\"url\":\"classes/Context.html#registers\",\"classes\":\"tsd-kind-property tsd-parent-kind-class tsd-is-private\",\"parent\":\"Context\"},{\"kind\":65536,\"name\":\"__type\",\"url\":\"classes/Context.html#registers.__type\",\"classes\":\"tsd-kind-type-literal tsd-parent-kind-property\",\"parent\":\"Context.registers\"},{\"kind\":1024,\"name\":\"environments\",\"url\":\"classes/Context.html#environments\",\"classes\":\"tsd-kind-property tsd-parent-kind-class\",\"parent\":\"Context\"},{\"kind\":1024,\"name\":\"globals\",\"url\":\"classes/Context.html#globals\",\"classes\":\"tsd-kind-property tsd-parent-kind-class\",\"parent\":\"Context\"},{\"kind\":1024,\"name\":\"sync\",\"url\":\"classes/Context.html#sync\",\"classes\":\"tsd-kind-property tsd-parent-kind-class\",\"parent\":\"Context\"},{\"kind\":1024,\"name\":\"opts\",\"url\":\"classes/Context.html#opts\",\"classes\":\"tsd-kind-property tsd-parent-kind-class\",\"parent\":\"Context\"},{\"kind\":1024,\"name\":\"strictVariables\",\"url\":\"classes/Context.html#strictVariables\",\"classes\":\"tsd-kind-property tsd-parent-kind-class\",\"parent\":\"Context\"},{\"kind\":1024,\"name\":\"ownPropertyOnly\",\"url\":\"classes/Context.html#ownPropertyOnly\",\"classes\":\"tsd-kind-property tsd-parent-kind-class\",\"parent\":\"Context\"},{\"kind\":1024,\"name\":\"memoryLimit\",\"url\":\"classes/Context.html#memoryLimit\",\"classes\":\"tsd-kind-property tsd-parent-kind-class\",\"parent\":\"Context\"},{\"kind\":1024,\"name\":\"renderLimit\",\"url\":\"classes/Context.html#renderLimit\",\"classes\":\"tsd-kind-property tsd-parent-kind-class\",\"parent\":\"Context\"},{\"kind\":2048,\"name\":\"getRegister\",\"url\":\"classes/Context.html#getRegister\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Context\"},{\"kind\":2048,\"name\":\"setRegister\",\"url\":\"classes/Context.html#setRegister\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Context\"},{\"kind\":2048,\"name\":\"saveRegister\",\"url\":\"classes/Context.html#saveRegister\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Context\"},{\"kind\":2048,\"name\":\"restoreRegister\",\"url\":\"classes/Context.html#restoreRegister\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Context\"},{\"kind\":2048,\"name\":\"getAll\",\"url\":\"classes/Context.html#getAll\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Context\"},{\"kind\":2048,\"name\":\"get\",\"url\":\"classes/Context.html#get\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Context\"},{\"kind\":2048,\"name\":\"getSync\",\"url\":\"classes/Context.html#getSync\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Context\"},{\"kind\":2048,\"name\":\"_get\",\"url\":\"classes/Context.html#_get\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Context\"},{\"kind\":2048,\"name\":\"getFromScope\",\"url\":\"classes/Context.html#getFromScope\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Context\"},{\"kind\":2048,\"name\":\"_getFromScope\",\"url\":\"classes/Context.html#_getFromScope\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Context\"},{\"kind\":2048,\"name\":\"push\",\"url\":\"classes/Context.html#push\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Context\"},{\"kind\":2048,\"name\":\"pop\",\"url\":\"classes/Context.html#pop\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Context\"},{\"kind\":2048,\"name\":\"bottom\",\"url\":\"classes/Context.html#bottom\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Context\"},{\"kind\":2048,\"name\":\"spawn\",\"url\":\"classes/Context.html#spawn\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Context\"},{\"kind\":2048,\"name\":\"findScope\",\"url\":\"classes/Context.html#findScope\",\"classes\":\"tsd-kind-method tsd-parent-kind-class tsd-is-private\",\"parent\":\"Context\"},{\"kind\":4194304,\"name\":\"Scope\",\"url\":\"types/Scope.html\",\"classes\":\"tsd-kind-type-alias\"},{\"kind\":128,\"name\":\"Value\",\"url\":\"classes/Value.html\",\"classes\":\"tsd-kind-class\"},{\"kind\":512,\"name\":\"constructor\",\"url\":\"classes/Value.html#constructor\",\"classes\":\"tsd-kind-constructor tsd-parent-kind-class\",\"parent\":\"Value\"},{\"kind\":1024,\"name\":\"filters\",\"url\":\"classes/Value.html#filters\",\"classes\":\"tsd-kind-property tsd-parent-kind-class\",\"parent\":\"Value\"},{\"kind\":1024,\"name\":\"initial\",\"url\":\"classes/Value.html#initial\",\"classes\":\"tsd-kind-property tsd-parent-kind-class\",\"parent\":\"Value\"},{\"kind\":2048,\"name\":\"value\",\"url\":\"classes/Value.html#value\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Value\"},{\"kind\":2048,\"name\":\"getFilter\",\"url\":\"classes/Value.html#getFilter\",\"classes\":\"tsd-kind-method tsd-parent-kind-class tsd-is-private\",\"parent\":\"Value\"},{\"kind\":128,\"name\":\"Hash\",\"url\":\"classes/Hash.html\",\"classes\":\"tsd-kind-class\"},{\"kind\":512,\"name\":\"constructor\",\"url\":\"classes/Hash.html#constructor\",\"classes\":\"tsd-kind-constructor tsd-parent-kind-class\",\"parent\":\"Hash\"},{\"kind\":1024,\"name\":\"hash\",\"url\":\"classes/Hash.html#hash\",\"classes\":\"tsd-kind-property tsd-parent-kind-class\",\"parent\":\"Hash\"},{\"kind\":2048,\"name\":\"render\",\"url\":\"classes/Hash.html#render\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Hash\"},{\"kind\":256,\"name\":\"Template\",\"url\":\"interfaces/Template.html\",\"classes\":\"tsd-kind-interface\"},{\"kind\":1024,\"name\":\"token\",\"url\":\"interfaces/Template.html#token\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"Template\"},{\"kind\":2048,\"name\":\"render\",\"url\":\"interfaces/Template.html#render\",\"classes\":\"tsd-kind-method tsd-parent-kind-interface\",\"parent\":\"Template\"},{\"kind\":4194304,\"name\":\"FilterImplOptions\",\"url\":\"types/FilterImplOptions.html\",\"classes\":\"tsd-kind-type-alias\"},{\"kind\":128,\"name\":\"Tag\",\"url\":\"classes/Tag.html\",\"classes\":\"tsd-kind-class\"},{\"kind\":512,\"name\":\"constructor\",\"url\":\"classes/Tag.html#constructor\",\"classes\":\"tsd-kind-constructor tsd-parent-kind-class\",\"parent\":\"Tag\"},{\"kind\":1024,\"name\":\"name\",\"url\":\"classes/Tag.html#name\",\"classes\":\"tsd-kind-property tsd-parent-kind-class\",\"parent\":\"Tag\"},{\"kind\":1024,\"name\":\"liquid\",\"url\":\"classes/Tag.html#liquid\",\"classes\":\"tsd-kind-property tsd-parent-kind-class\",\"parent\":\"Tag\"},{\"kind\":1024,\"name\":\"tokenizer\",\"url\":\"classes/Tag.html#tokenizer\",\"classes\":\"tsd-kind-property tsd-parent-kind-class tsd-is-protected\",\"parent\":\"Tag\"},{\"kind\":2048,\"name\":\"render\",\"url\":\"classes/Tag.html#render\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tag\"},{\"kind\":1024,\"name\":\"token\",\"url\":\"classes/Tag.html#token\",\"classes\":\"tsd-kind-property tsd-parent-kind-class tsd-is-inherited\",\"parent\":\"Tag\"},{\"kind\":128,\"name\":\"Filter\",\"url\":\"classes/Filter.html\",\"classes\":\"tsd-kind-class\"},{\"kind\":512,\"name\":\"constructor\",\"url\":\"classes/Filter.html#constructor\",\"classes\":\"tsd-kind-constructor tsd-parent-kind-class\",\"parent\":\"Filter\"},{\"kind\":1024,\"name\":\"name\",\"url\":\"classes/Filter.html#name\",\"classes\":\"tsd-kind-property tsd-parent-kind-class\",\"parent\":\"Filter\"},{\"kind\":1024,\"name\":\"args\",\"url\":\"classes/Filter.html#args\",\"classes\":\"tsd-kind-property tsd-parent-kind-class\",\"parent\":\"Filter\"},{\"kind\":1024,\"name\":\"raw\",\"url\":\"classes/Filter.html#raw\",\"classes\":\"tsd-kind-property tsd-parent-kind-class\",\"parent\":\"Filter\"},{\"kind\":1024,\"name\":\"handler\",\"url\":\"classes/Filter.html#handler\",\"classes\":\"tsd-kind-property tsd-parent-kind-class tsd-is-private\",\"parent\":\"Filter\"},{\"kind\":1024,\"name\":\"liquid\",\"url\":\"classes/Filter.html#liquid\",\"classes\":\"tsd-kind-property tsd-parent-kind-class tsd-is-private\",\"parent\":\"Filter\"},{\"kind\":2048,\"name\":\"render\",\"url\":\"classes/Filter.html#render\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Filter\"},{\"kind\":128,\"name\":\"Output\",\"url\":\"classes/Output.html\",\"classes\":\"tsd-kind-class\"},{\"kind\":512,\"name\":\"constructor\",\"url\":\"classes/Output.html#constructor\",\"classes\":\"tsd-kind-constructor tsd-parent-kind-class\",\"parent\":\"Output\"},{\"kind\":1024,\"name\":\"value\",\"url\":\"classes/Output.html#value\",\"classes\":\"tsd-kind-property tsd-parent-kind-class\",\"parent\":\"Output\"},{\"kind\":2048,\"name\":\"render\",\"url\":\"classes/Output.html#render\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Output\"},{\"kind\":1024,\"name\":\"token\",\"url\":\"classes/Output.html#token\",\"classes\":\"tsd-kind-property tsd-parent-kind-class tsd-is-inherited\",\"parent\":\"Output\"},{\"kind\":128,\"name\":\"Token\",\"url\":\"classes/Token.html\",\"classes\":\"tsd-kind-class\"},{\"kind\":512,\"name\":\"constructor\",\"url\":\"classes/Token.html#constructor\",\"classes\":\"tsd-kind-constructor tsd-parent-kind-class\",\"parent\":\"Token\"},{\"kind\":1024,\"name\":\"kind\",\"url\":\"classes/Token.html#kind\",\"classes\":\"tsd-kind-property tsd-parent-kind-class\",\"parent\":\"Token\"},{\"kind\":1024,\"name\":\"input\",\"url\":\"classes/Token.html#input\",\"classes\":\"tsd-kind-property tsd-parent-kind-class\",\"parent\":\"Token\"},{\"kind\":1024,\"name\":\"begin\",\"url\":\"classes/Token.html#begin\",\"classes\":\"tsd-kind-property tsd-parent-kind-class\",\"parent\":\"Token\"},{\"kind\":1024,\"name\":\"end\",\"url\":\"classes/Token.html#end\",\"classes\":\"tsd-kind-property tsd-parent-kind-class\",\"parent\":\"Token\"},{\"kind\":1024,\"name\":\"file\",\"url\":\"classes/Token.html#file\",\"classes\":\"tsd-kind-property tsd-parent-kind-class\",\"parent\":\"Token\"},{\"kind\":2048,\"name\":\"getText\",\"url\":\"classes/Token.html#getText\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Token\"},{\"kind\":2048,\"name\":\"getPosition\",\"url\":\"classes/Token.html#getPosition\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Token\"},{\"kind\":2048,\"name\":\"size\",\"url\":\"classes/Token.html#size\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Token\"},{\"kind\":4194304,\"name\":\"TopLevelToken\",\"url\":\"types/TopLevelToken.html\",\"classes\":\"tsd-kind-type-alias\"},{\"kind\":128,\"name\":\"TagToken\",\"url\":\"classes/TagToken.html\",\"classes\":\"tsd-kind-class\"},{\"kind\":512,\"name\":\"constructor\",\"url\":\"classes/TagToken.html#constructor\",\"classes\":\"tsd-kind-constructor tsd-parent-kind-class\",\"parent\":\"TagToken\"},{\"kind\":1024,\"name\":\"name\",\"url\":\"classes/TagToken.html#name\",\"classes\":\"tsd-kind-property tsd-parent-kind-class\",\"parent\":\"TagToken\"},{\"kind\":1024,\"name\":\"tokenizer\",\"url\":\"classes/TagToken.html#tokenizer\",\"classes\":\"tsd-kind-property tsd-parent-kind-class\",\"parent\":\"TagToken\"},{\"kind\":262144,\"name\":\"args\",\"url\":\"classes/TagToken.html#args\",\"classes\":\"tsd-kind-accessor tsd-parent-kind-class\",\"parent\":\"TagToken\"},{\"kind\":1024,\"name\":\"trimLeft\",\"url\":\"classes/TagToken.html#trimLeft\",\"classes\":\"tsd-kind-property tsd-parent-kind-class tsd-is-inherited\",\"parent\":\"TagToken\"},{\"kind\":1024,\"name\":\"trimRight\",\"url\":\"classes/TagToken.html#trimRight\",\"classes\":\"tsd-kind-property tsd-parent-kind-class tsd-is-inherited\",\"parent\":\"TagToken\"},{\"kind\":1024,\"name\":\"contentRange\",\"url\":\"classes/TagToken.html#contentRange\",\"classes\":\"tsd-kind-property tsd-parent-kind-class tsd-is-inherited\",\"parent\":\"TagToken\"},{\"kind\":262144,\"name\":\"content\",\"url\":\"classes/TagToken.html#content\",\"classes\":\"tsd-kind-accessor tsd-parent-kind-class tsd-is-inherited\",\"parent\":\"TagToken\"},{\"kind\":1024,\"name\":\"kind\",\"url\":\"classes/TagToken.html#kind\",\"classes\":\"tsd-kind-property tsd-parent-kind-class tsd-is-inherited\",\"parent\":\"TagToken\"},{\"kind\":1024,\"name\":\"input\",\"url\":\"classes/TagToken.html#input\",\"classes\":\"tsd-kind-property tsd-parent-kind-class tsd-is-inherited\",\"parent\":\"TagToken\"},{\"kind\":1024,\"name\":\"begin\",\"url\":\"classes/TagToken.html#begin\",\"classes\":\"tsd-kind-property tsd-parent-kind-class tsd-is-inherited\",\"parent\":\"TagToken\"},{\"kind\":1024,\"name\":\"end\",\"url\":\"classes/TagToken.html#end\",\"classes\":\"tsd-kind-property tsd-parent-kind-class tsd-is-inherited\",\"parent\":\"TagToken\"},{\"kind\":1024,\"name\":\"file\",\"url\":\"classes/TagToken.html#file\",\"classes\":\"tsd-kind-property tsd-parent-kind-class tsd-is-inherited\",\"parent\":\"TagToken\"},{\"kind\":2048,\"name\":\"getText\",\"url\":\"classes/TagToken.html#getText\",\"classes\":\"tsd-kind-method tsd-parent-kind-class tsd-is-inherited\",\"parent\":\"TagToken\"},{\"kind\":2048,\"name\":\"getPosition\",\"url\":\"classes/TagToken.html#getPosition\",\"classes\":\"tsd-kind-method tsd-parent-kind-class tsd-is-inherited\",\"parent\":\"TagToken\"},{\"kind\":2048,\"name\":\"size\",\"url\":\"classes/TagToken.html#size\",\"classes\":\"tsd-kind-method tsd-parent-kind-class tsd-is-inherited\",\"parent\":\"TagToken\"},{\"kind\":4194304,\"name\":\"ValueToken\",\"url\":\"types/ValueToken.html\",\"classes\":\"tsd-kind-type-alias\"},{\"kind\":8,\"name\":\"TokenKind\",\"url\":\"enums/TokenKind.html\",\"classes\":\"tsd-kind-enum\"},{\"kind\":16,\"name\":\"Number\",\"url\":\"enums/TokenKind.html#Number\",\"classes\":\"tsd-kind-enum-member tsd-parent-kind-enum\",\"parent\":\"TokenKind\"},{\"kind\":16,\"name\":\"Literal\",\"url\":\"enums/TokenKind.html#Literal\",\"classes\":\"tsd-kind-enum-member tsd-parent-kind-enum\",\"parent\":\"TokenKind\"},{\"kind\":16,\"name\":\"Tag\",\"url\":\"enums/TokenKind.html#Tag\",\"classes\":\"tsd-kind-enum-member tsd-parent-kind-enum\",\"parent\":\"TokenKind\"},{\"kind\":16,\"name\":\"Output\",\"url\":\"enums/TokenKind.html#Output\",\"classes\":\"tsd-kind-enum-member tsd-parent-kind-enum\",\"parent\":\"TokenKind\"},{\"kind\":16,\"name\":\"HTML\",\"url\":\"enums/TokenKind.html#HTML\",\"classes\":\"tsd-kind-enum-member tsd-parent-kind-enum\",\"parent\":\"TokenKind\"},{\"kind\":16,\"name\":\"Filter\",\"url\":\"enums/TokenKind.html#Filter\",\"classes\":\"tsd-kind-enum-member tsd-parent-kind-enum\",\"parent\":\"TokenKind\"},{\"kind\":16,\"name\":\"Hash\",\"url\":\"enums/TokenKind.html#Hash\",\"classes\":\"tsd-kind-enum-member tsd-parent-kind-enum\",\"parent\":\"TokenKind\"},{\"kind\":16,\"name\":\"PropertyAccess\",\"url\":\"enums/TokenKind.html#PropertyAccess\",\"classes\":\"tsd-kind-enum-member tsd-parent-kind-enum\",\"parent\":\"TokenKind\"},{\"kind\":16,\"name\":\"Word\",\"url\":\"enums/TokenKind.html#Word\",\"classes\":\"tsd-kind-enum-member tsd-parent-kind-enum\",\"parent\":\"TokenKind\"},{\"kind\":16,\"name\":\"Range\",\"url\":\"enums/TokenKind.html#Range\",\"classes\":\"tsd-kind-enum-member tsd-parent-kind-enum\",\"parent\":\"TokenKind\"},{\"kind\":16,\"name\":\"Quoted\",\"url\":\"enums/TokenKind.html#Quoted\",\"classes\":\"tsd-kind-enum-member tsd-parent-kind-enum\",\"parent\":\"TokenKind\"},{\"kind\":16,\"name\":\"Operator\",\"url\":\"enums/TokenKind.html#Operator\",\"classes\":\"tsd-kind-enum-member tsd-parent-kind-enum\",\"parent\":\"TokenKind\"},{\"kind\":16,\"name\":\"FilteredValue\",\"url\":\"enums/TokenKind.html#FilteredValue\",\"classes\":\"tsd-kind-enum-member tsd-parent-kind-enum\",\"parent\":\"TokenKind\"},{\"kind\":16,\"name\":\"Delimited\",\"url\":\"enums/TokenKind.html#Delimited\",\"classes\":\"tsd-kind-enum-member tsd-parent-kind-enum\",\"parent\":\"TokenKind\"},{\"kind\":128,\"name\":\"Tokenizer\",\"url\":\"classes/Tokenizer.html\",\"classes\":\"tsd-kind-class\"},{\"kind\":512,\"name\":\"constructor\",\"url\":\"classes/Tokenizer.html#constructor\",\"classes\":\"tsd-kind-constructor tsd-parent-kind-class\",\"parent\":\"Tokenizer\"},{\"kind\":1024,\"name\":\"p\",\"url\":\"classes/Tokenizer.html#p\",\"classes\":\"tsd-kind-property tsd-parent-kind-class\",\"parent\":\"Tokenizer\"},{\"kind\":1024,\"name\":\"N\",\"url\":\"classes/Tokenizer.html#N\",\"classes\":\"tsd-kind-property tsd-parent-kind-class\",\"parent\":\"Tokenizer\"},{\"kind\":1024,\"name\":\"rawBeginAt\",\"url\":\"classes/Tokenizer.html#rawBeginAt\",\"classes\":\"tsd-kind-property tsd-parent-kind-class tsd-is-private\",\"parent\":\"Tokenizer\"},{\"kind\":1024,\"name\":\"opTrie\",\"url\":\"classes/Tokenizer.html#opTrie\",\"classes\":\"tsd-kind-property tsd-parent-kind-class tsd-is-private\",\"parent\":\"Tokenizer\"},{\"kind\":1024,\"name\":\"literalTrie\",\"url\":\"classes/Tokenizer.html#literalTrie\",\"classes\":\"tsd-kind-property tsd-parent-kind-class tsd-is-private\",\"parent\":\"Tokenizer\"},{\"kind\":1024,\"name\":\"input\",\"url\":\"classes/Tokenizer.html#input\",\"classes\":\"tsd-kind-property tsd-parent-kind-class\",\"parent\":\"Tokenizer\"},{\"kind\":1024,\"name\":\"file\",\"url\":\"classes/Tokenizer.html#file\",\"classes\":\"tsd-kind-property tsd-parent-kind-class\",\"parent\":\"Tokenizer\"},{\"kind\":2048,\"name\":\"readExpression\",\"url\":\"classes/Tokenizer.html#readExpression\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tokenizer\"},{\"kind\":2048,\"name\":\"readExpressionTokens\",\"url\":\"classes/Tokenizer.html#readExpressionTokens\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tokenizer\"},{\"kind\":2048,\"name\":\"readOperator\",\"url\":\"classes/Tokenizer.html#readOperator\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tokenizer\"},{\"kind\":2048,\"name\":\"matchTrie\",\"url\":\"classes/Tokenizer.html#matchTrie\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tokenizer\"},{\"kind\":2048,\"name\":\"readFilteredValue\",\"url\":\"classes/Tokenizer.html#readFilteredValue\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tokenizer\"},{\"kind\":2048,\"name\":\"readFilters\",\"url\":\"classes/Tokenizer.html#readFilters\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tokenizer\"},{\"kind\":2048,\"name\":\"readFilter\",\"url\":\"classes/Tokenizer.html#readFilter\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tokenizer\"},{\"kind\":2048,\"name\":\"readFilterArg\",\"url\":\"classes/Tokenizer.html#readFilterArg\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tokenizer\"},{\"kind\":2048,\"name\":\"readTopLevelTokens\",\"url\":\"classes/Tokenizer.html#readTopLevelTokens\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tokenizer\"},{\"kind\":2048,\"name\":\"readTopLevelToken\",\"url\":\"classes/Tokenizer.html#readTopLevelToken\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tokenizer\"},{\"kind\":2048,\"name\":\"readHTMLToken\",\"url\":\"classes/Tokenizer.html#readHTMLToken\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tokenizer\"},{\"kind\":2048,\"name\":\"readTagToken\",\"url\":\"classes/Tokenizer.html#readTagToken\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tokenizer\"},{\"kind\":2048,\"name\":\"readToDelimiter\",\"url\":\"classes/Tokenizer.html#readToDelimiter\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tokenizer\"},{\"kind\":2048,\"name\":\"readOutputToken\",\"url\":\"classes/Tokenizer.html#readOutputToken\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tokenizer\"},{\"kind\":2048,\"name\":\"readEndrawOrRawContent\",\"url\":\"classes/Tokenizer.html#readEndrawOrRawContent\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tokenizer\"},{\"kind\":2048,\"name\":\"readLiquidTagTokens\",\"url\":\"classes/Tokenizer.html#readLiquidTagTokens\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tokenizer\"},{\"kind\":2048,\"name\":\"readLiquidTagToken\",\"url\":\"classes/Tokenizer.html#readLiquidTagToken\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tokenizer\"},{\"kind\":2048,\"name\":\"error\",\"url\":\"classes/Tokenizer.html#error\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tokenizer\"},{\"kind\":2048,\"name\":\"assert\",\"url\":\"classes/Tokenizer.html#assert\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tokenizer\"},{\"kind\":2048,\"name\":\"snapshot\",\"url\":\"classes/Tokenizer.html#snapshot\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tokenizer\"},{\"kind\":2048,\"name\":\"readWord\",\"url\":\"classes/Tokenizer.html#readWord\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tokenizer\"},{\"kind\":2048,\"name\":\"readIdentifier\",\"url\":\"classes/Tokenizer.html#readIdentifier\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tokenizer\"},{\"kind\":2048,\"name\":\"readNonEmptyIdentifier\",\"url\":\"classes/Tokenizer.html#readNonEmptyIdentifier\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tokenizer\"},{\"kind\":2048,\"name\":\"readTagName\",\"url\":\"classes/Tokenizer.html#readTagName\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tokenizer\"},{\"kind\":2048,\"name\":\"readHashes\",\"url\":\"classes/Tokenizer.html#readHashes\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tokenizer\"},{\"kind\":2048,\"name\":\"readHash\",\"url\":\"classes/Tokenizer.html#readHash\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tokenizer\"},{\"kind\":2048,\"name\":\"remaining\",\"url\":\"classes/Tokenizer.html#remaining\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tokenizer\"},{\"kind\":2048,\"name\":\"advance\",\"url\":\"classes/Tokenizer.html#advance\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tokenizer\"},{\"kind\":2048,\"name\":\"end\",\"url\":\"classes/Tokenizer.html#end\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tokenizer\"},{\"kind\":2048,\"name\":\"readTo\",\"url\":\"classes/Tokenizer.html#readTo\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tokenizer\"},{\"kind\":2048,\"name\":\"readValue\",\"url\":\"classes/Tokenizer.html#readValue\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tokenizer\"},{\"kind\":2048,\"name\":\"readScopeValue\",\"url\":\"classes/Tokenizer.html#readScopeValue\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tokenizer\"},{\"kind\":2048,\"name\":\"readProperties\",\"url\":\"classes/Tokenizer.html#readProperties\",\"classes\":\"tsd-kind-method tsd-parent-kind-class tsd-is-private\",\"parent\":\"Tokenizer\"},{\"kind\":2048,\"name\":\"readNumber\",\"url\":\"classes/Tokenizer.html#readNumber\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tokenizer\"},{\"kind\":2048,\"name\":\"readLiteral\",\"url\":\"classes/Tokenizer.html#readLiteral\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tokenizer\"},{\"kind\":2048,\"name\":\"readRange\",\"url\":\"classes/Tokenizer.html#readRange\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tokenizer\"},{\"kind\":2048,\"name\":\"readValueOrThrow\",\"url\":\"classes/Tokenizer.html#readValueOrThrow\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tokenizer\"},{\"kind\":2048,\"name\":\"readQuoted\",\"url\":\"classes/Tokenizer.html#readQuoted\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tokenizer\"},{\"kind\":2048,\"name\":\"readFileNameTemplate\",\"url\":\"classes/Tokenizer.html#readFileNameTemplate\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tokenizer\"},{\"kind\":2048,\"name\":\"match\",\"url\":\"classes/Tokenizer.html#match\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tokenizer\"},{\"kind\":2048,\"name\":\"rmatch\",\"url\":\"classes/Tokenizer.html#rmatch\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tokenizer\"},{\"kind\":2048,\"name\":\"peekType\",\"url\":\"classes/Tokenizer.html#peekType\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tokenizer\"},{\"kind\":2048,\"name\":\"peek\",\"url\":\"classes/Tokenizer.html#peek\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tokenizer\"},{\"kind\":2048,\"name\":\"skipBlank\",\"url\":\"classes/Tokenizer.html#skipBlank\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Tokenizer\"},{\"kind\":128,\"name\":\"ParseStream\",\"url\":\"classes/ParseStream.html\",\"classes\":\"tsd-kind-class\"},{\"kind\":512,\"name\":\"constructor\",\"url\":\"classes/ParseStream.html#constructor\",\"classes\":\"tsd-kind-constructor tsd-parent-kind-class\",\"parent\":\"ParseStream\"},{\"kind\":1024,\"name\":\"tokens\",\"url\":\"classes/ParseStream.html#tokens\",\"classes\":\"tsd-kind-property tsd-parent-kind-class tsd-is-private\",\"parent\":\"ParseStream\"},{\"kind\":1024,\"name\":\"handlers\",\"url\":\"classes/ParseStream.html#handlers\",\"classes\":\"tsd-kind-property tsd-parent-kind-class tsd-is-private\",\"parent\":\"ParseStream\"},{\"kind\":1024,\"name\":\"stopRequested\",\"url\":\"classes/ParseStream.html#stopRequested\",\"classes\":\"tsd-kind-property tsd-parent-kind-class tsd-is-private\",\"parent\":\"ParseStream\"},{\"kind\":1024,\"name\":\"parseToken\",\"url\":\"classes/ParseStream.html#parseToken\",\"classes\":\"tsd-kind-property tsd-parent-kind-class tsd-is-private\",\"parent\":\"ParseStream\"},{\"kind\":2048,\"name\":\"on\",\"url\":\"classes/ParseStream.html#on\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"ParseStream\"},{\"kind\":2048,\"name\":\"trigger\",\"url\":\"classes/ParseStream.html#trigger\",\"classes\":\"tsd-kind-method tsd-parent-kind-class tsd-is-private\",\"parent\":\"ParseStream\"},{\"kind\":2048,\"name\":\"start\",\"url\":\"classes/ParseStream.html#start\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"ParseStream\"},{\"kind\":2048,\"name\":\"stop\",\"url\":\"classes/ParseStream.html#stop\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"ParseStream\"},{\"kind\":32,\"name\":\"filters\",\"url\":\"variables/filters.html\",\"classes\":\"tsd-kind-variable\"},{\"kind\":32,\"name\":\"defaultOptions\",\"url\":\"variables/defaultOptions.html\",\"classes\":\"tsd-kind-variable\"},{\"kind\":256,\"name\":\"LiquidOptions\",\"url\":\"interfaces/LiquidOptions.html\",\"classes\":\"tsd-kind-interface\"},{\"kind\":1024,\"name\":\"root\",\"url\":\"interfaces/LiquidOptions.html#root\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"LiquidOptions\"},{\"kind\":1024,\"name\":\"partials\",\"url\":\"interfaces/LiquidOptions.html#partials\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"LiquidOptions\"},{\"kind\":1024,\"name\":\"layouts\",\"url\":\"interfaces/LiquidOptions.html#layouts\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"LiquidOptions\"},{\"kind\":1024,\"name\":\"relativeReference\",\"url\":\"interfaces/LiquidOptions.html#relativeReference\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"LiquidOptions\"},{\"kind\":1024,\"name\":\"jekyllInclude\",\"url\":\"interfaces/LiquidOptions.html#jekyllInclude\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"LiquidOptions\"},{\"kind\":1024,\"name\":\"extname\",\"url\":\"interfaces/LiquidOptions.html#extname\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"LiquidOptions\"},{\"kind\":1024,\"name\":\"cache\",\"url\":\"interfaces/LiquidOptions.html#cache\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"LiquidOptions\"},{\"kind\":1024,\"name\":\"jsTruthy\",\"url\":\"interfaces/LiquidOptions.html#jsTruthy\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"LiquidOptions\"},{\"kind\":1024,\"name\":\"dynamicPartials\",\"url\":\"interfaces/LiquidOptions.html#dynamicPartials\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"LiquidOptions\"},{\"kind\":1024,\"name\":\"strictFilters\",\"url\":\"interfaces/LiquidOptions.html#strictFilters\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"LiquidOptions\"},{\"kind\":1024,\"name\":\"strictVariables\",\"url\":\"interfaces/LiquidOptions.html#strictVariables\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"LiquidOptions\"},{\"kind\":1024,\"name\":\"catchAllErrors\",\"url\":\"interfaces/LiquidOptions.html#catchAllErrors\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"LiquidOptions\"},{\"kind\":1024,\"name\":\"ownPropertyOnly\",\"url\":\"interfaces/LiquidOptions.html#ownPropertyOnly\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"LiquidOptions\"},{\"kind\":1024,\"name\":\"lenientIf\",\"url\":\"interfaces/LiquidOptions.html#lenientIf\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"LiquidOptions\"},{\"kind\":1024,\"name\":\"timezoneOffset\",\"url\":\"interfaces/LiquidOptions.html#timezoneOffset\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"LiquidOptions\"},{\"kind\":1024,\"name\":\"dateFormat\",\"url\":\"interfaces/LiquidOptions.html#dateFormat\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"LiquidOptions\"},{\"kind\":1024,\"name\":\"locale\",\"url\":\"interfaces/LiquidOptions.html#locale\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"LiquidOptions\"},{\"kind\":1024,\"name\":\"trimTagRight\",\"url\":\"interfaces/LiquidOptions.html#trimTagRight\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"LiquidOptions\"},{\"kind\":1024,\"name\":\"trimTagLeft\",\"url\":\"interfaces/LiquidOptions.html#trimTagLeft\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"LiquidOptions\"},{\"kind\":1024,\"name\":\"trimOutputRight\",\"url\":\"interfaces/LiquidOptions.html#trimOutputRight\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"LiquidOptions\"},{\"kind\":1024,\"name\":\"trimOutputLeft\",\"url\":\"interfaces/LiquidOptions.html#trimOutputLeft\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"LiquidOptions\"},{\"kind\":1024,\"name\":\"tagDelimiterLeft\",\"url\":\"interfaces/LiquidOptions.html#tagDelimiterLeft\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"LiquidOptions\"},{\"kind\":1024,\"name\":\"tagDelimiterRight\",\"url\":\"interfaces/LiquidOptions.html#tagDelimiterRight\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"LiquidOptions\"},{\"kind\":1024,\"name\":\"outputDelimiterLeft\",\"url\":\"interfaces/LiquidOptions.html#outputDelimiterLeft\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"LiquidOptions\"},{\"kind\":1024,\"name\":\"outputDelimiterRight\",\"url\":\"interfaces/LiquidOptions.html#outputDelimiterRight\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"LiquidOptions\"},{\"kind\":1024,\"name\":\"preserveTimezones\",\"url\":\"interfaces/LiquidOptions.html#preserveTimezones\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"LiquidOptions\"},{\"kind\":1024,\"name\":\"greedy\",\"url\":\"interfaces/LiquidOptions.html#greedy\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"LiquidOptions\"},{\"kind\":1024,\"name\":\"fs\",\"url\":\"interfaces/LiquidOptions.html#fs\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"LiquidOptions\"},{\"kind\":1024,\"name\":\"templates\",\"url\":\"interfaces/LiquidOptions.html#templates\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"LiquidOptions\"},{\"kind\":65536,\"name\":\"__type\",\"url\":\"interfaces/LiquidOptions.html#templates.__type\",\"classes\":\"tsd-kind-type-literal tsd-parent-kind-property\",\"parent\":\"LiquidOptions.templates\"},{\"kind\":1024,\"name\":\"globals\",\"url\":\"interfaces/LiquidOptions.html#globals\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"LiquidOptions\"},{\"kind\":1024,\"name\":\"keepOutputType\",\"url\":\"interfaces/LiquidOptions.html#keepOutputType\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"LiquidOptions\"},{\"kind\":1024,\"name\":\"outputEscape\",\"url\":\"interfaces/LiquidOptions.html#outputEscape\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"LiquidOptions\"},{\"kind\":1024,\"name\":\"operators\",\"url\":\"interfaces/LiquidOptions.html#operators\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"LiquidOptions\"},{\"kind\":1024,\"name\":\"orderedFilterParameters\",\"url\":\"interfaces/LiquidOptions.html#orderedFilterParameters\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"LiquidOptions\"},{\"kind\":1024,\"name\":\"parseLimit\",\"url\":\"interfaces/LiquidOptions.html#parseLimit\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"LiquidOptions\"},{\"kind\":1024,\"name\":\"renderLimit\",\"url\":\"interfaces/LiquidOptions.html#renderLimit\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"LiquidOptions\"},{\"kind\":1024,\"name\":\"memoryLimit\",\"url\":\"interfaces/LiquidOptions.html#memoryLimit\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"LiquidOptions\"},{\"kind\":256,\"name\":\"FS\",\"url\":\"interfaces/FS.html\",\"classes\":\"tsd-kind-interface\"},{\"kind\":1024,\"name\":\"exists\",\"url\":\"interfaces/FS.html#exists\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"FS\"},{\"kind\":65536,\"name\":\"__type\",\"url\":\"interfaces/FS.html#exists.__type-4\",\"classes\":\"tsd-kind-type-literal tsd-parent-kind-property\",\"parent\":\"FS.exists\"},{\"kind\":1024,\"name\":\"existsSync\",\"url\":\"interfaces/FS.html#existsSync\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"FS\"},{\"kind\":65536,\"name\":\"__type\",\"url\":\"interfaces/FS.html#existsSync.__type-6\",\"classes\":\"tsd-kind-type-literal tsd-parent-kind-property\",\"parent\":\"FS.existsSync\"},{\"kind\":1024,\"name\":\"readFile\",\"url\":\"interfaces/FS.html#readFile\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"FS\"},{\"kind\":65536,\"name\":\"__type\",\"url\":\"interfaces/FS.html#readFile.__type-10\",\"classes\":\"tsd-kind-type-literal tsd-parent-kind-property\",\"parent\":\"FS.readFile\"},{\"kind\":1024,\"name\":\"readFileSync\",\"url\":\"interfaces/FS.html#readFileSync\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"FS\"},{\"kind\":65536,\"name\":\"__type\",\"url\":\"interfaces/FS.html#readFileSync.__type-12\",\"classes\":\"tsd-kind-type-literal tsd-parent-kind-property\",\"parent\":\"FS.readFileSync\"},{\"kind\":1024,\"name\":\"resolve\",\"url\":\"interfaces/FS.html#resolve\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"FS\"},{\"kind\":65536,\"name\":\"__type\",\"url\":\"interfaces/FS.html#resolve.__type-14\",\"classes\":\"tsd-kind-type-literal tsd-parent-kind-property\",\"parent\":\"FS.resolve\"},{\"kind\":1024,\"name\":\"contains\",\"url\":\"interfaces/FS.html#contains\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"FS\"},{\"kind\":65536,\"name\":\"__type\",\"url\":\"interfaces/FS.html#contains.__type\",\"classes\":\"tsd-kind-type-literal tsd-parent-kind-property\",\"parent\":\"FS.contains\"},{\"kind\":1024,\"name\":\"sep\",\"url\":\"interfaces/FS.html#sep\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"FS\"},{\"kind\":1024,\"name\":\"dirname\",\"url\":\"interfaces/FS.html#dirname\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"FS\"},{\"kind\":65536,\"name\":\"__type\",\"url\":\"interfaces/FS.html#dirname.__type-2\",\"classes\":\"tsd-kind-type-literal tsd-parent-kind-property\",\"parent\":\"FS.dirname\"},{\"kind\":1024,\"name\":\"fallback\",\"url\":\"interfaces/FS.html#fallback\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"FS\"},{\"kind\":65536,\"name\":\"__type\",\"url\":\"interfaces/FS.html#fallback.__type-8\",\"classes\":\"tsd-kind-type-literal tsd-parent-kind-property\",\"parent\":\"FS.fallback\"},{\"kind\":128,\"name\":\"Liquid\",\"url\":\"classes/Liquid.html\",\"classes\":\"tsd-kind-class\"},{\"kind\":512,\"name\":\"constructor\",\"url\":\"classes/Liquid.html#constructor\",\"classes\":\"tsd-kind-constructor tsd-parent-kind-class\",\"parent\":\"Liquid\"},{\"kind\":1024,\"name\":\"options\",\"url\":\"classes/Liquid.html#options\",\"classes\":\"tsd-kind-property tsd-parent-kind-class\",\"parent\":\"Liquid\"},{\"kind\":1024,\"name\":\"renderer\",\"url\":\"classes/Liquid.html#renderer\",\"classes\":\"tsd-kind-property tsd-parent-kind-class\",\"parent\":\"Liquid\"},{\"kind\":1024,\"name\":\"parser\",\"url\":\"classes/Liquid.html#parser\",\"classes\":\"tsd-kind-property tsd-parent-kind-class\",\"parent\":\"Liquid\"},{\"kind\":1024,\"name\":\"filters\",\"url\":\"classes/Liquid.html#filters\",\"classes\":\"tsd-kind-property tsd-parent-kind-class\",\"parent\":\"Liquid\"},{\"kind\":1024,\"name\":\"tags\",\"url\":\"classes/Liquid.html#tags\",\"classes\":\"tsd-kind-property tsd-parent-kind-class\",\"parent\":\"Liquid\"},{\"kind\":2048,\"name\":\"parse\",\"url\":\"classes/Liquid.html#parse\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Liquid\"},{\"kind\":2048,\"name\":\"_render\",\"url\":\"classes/Liquid.html#_render\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Liquid\"},{\"kind\":2048,\"name\":\"render\",\"url\":\"classes/Liquid.html#render\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Liquid\"},{\"kind\":2048,\"name\":\"renderSync\",\"url\":\"classes/Liquid.html#renderSync\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Liquid\"},{\"kind\":2048,\"name\":\"renderToNodeStream\",\"url\":\"classes/Liquid.html#renderToNodeStream\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Liquid\"},{\"kind\":2048,\"name\":\"_parseAndRender\",\"url\":\"classes/Liquid.html#_parseAndRender\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Liquid\"},{\"kind\":2048,\"name\":\"parseAndRender\",\"url\":\"classes/Liquid.html#parseAndRender\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Liquid\"},{\"kind\":2048,\"name\":\"parseAndRenderSync\",\"url\":\"classes/Liquid.html#parseAndRenderSync\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Liquid\"},{\"kind\":2048,\"name\":\"_parsePartialFile\",\"url\":\"classes/Liquid.html#_parsePartialFile\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Liquid\"},{\"kind\":2048,\"name\":\"_parseLayoutFile\",\"url\":\"classes/Liquid.html#_parseLayoutFile\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Liquid\"},{\"kind\":2048,\"name\":\"_parseFile\",\"url\":\"classes/Liquid.html#_parseFile\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Liquid\"},{\"kind\":2048,\"name\":\"parseFile\",\"url\":\"classes/Liquid.html#parseFile\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Liquid\"},{\"kind\":2048,\"name\":\"parseFileSync\",\"url\":\"classes/Liquid.html#parseFileSync\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Liquid\"},{\"kind\":2048,\"name\":\"_renderFile\",\"url\":\"classes/Liquid.html#_renderFile\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Liquid\"},{\"kind\":2048,\"name\":\"renderFile\",\"url\":\"classes/Liquid.html#renderFile\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Liquid\"},{\"kind\":2048,\"name\":\"renderFileSync\",\"url\":\"classes/Liquid.html#renderFileSync\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Liquid\"},{\"kind\":2048,\"name\":\"renderFileToNodeStream\",\"url\":\"classes/Liquid.html#renderFileToNodeStream\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Liquid\"},{\"kind\":2048,\"name\":\"_evalValue\",\"url\":\"classes/Liquid.html#_evalValue\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Liquid\"},{\"kind\":2048,\"name\":\"evalValue\",\"url\":\"classes/Liquid.html#evalValue\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Liquid\"},{\"kind\":2048,\"name\":\"evalValueSync\",\"url\":\"classes/Liquid.html#evalValueSync\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Liquid\"},{\"kind\":2048,\"name\":\"registerFilter\",\"url\":\"classes/Liquid.html#registerFilter\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Liquid\"},{\"kind\":2048,\"name\":\"registerTag\",\"url\":\"classes/Liquid.html#registerTag\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Liquid\"},{\"kind\":2048,\"name\":\"plugin\",\"url\":\"classes/Liquid.html#plugin\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Liquid\"},{\"kind\":2048,\"name\":\"express\",\"url\":\"classes/Liquid.html#express\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"Liquid\"},{\"kind\":65536,\"name\":\"__type\",\"url\":\"classes/Liquid.html#express.express-1.__type\",\"classes\":\"tsd-kind-type-literal\",\"parent\":\"Liquid.express.express\"},{\"kind\":32,\"name\":\"tags\",\"url\":\"variables/tags.html\",\"classes\":\"tsd-kind-variable\"},{\"kind\":128,\"name\":\"AssignTag\",\"url\":\"classes/AssignTag.html\",\"classes\":\"tsd-kind-class\"},{\"kind\":512,\"name\":\"constructor\",\"url\":\"classes/AssignTag.html#constructor\",\"classes\":\"tsd-kind-constructor tsd-parent-kind-class\",\"parent\":\"AssignTag\"},{\"kind\":1024,\"name\":\"key\",\"url\":\"classes/AssignTag.html#key\",\"classes\":\"tsd-kind-property tsd-parent-kind-class tsd-is-private\",\"parent\":\"AssignTag\"},{\"kind\":1024,\"name\":\"value\",\"url\":\"classes/AssignTag.html#value\",\"classes\":\"tsd-kind-property tsd-parent-kind-class tsd-is-private\",\"parent\":\"AssignTag\"},{\"kind\":2048,\"name\":\"render\",\"url\":\"classes/AssignTag.html#render\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"AssignTag\"},{\"kind\":1024,\"name\":\"name\",\"url\":\"classes/AssignTag.html#name\",\"classes\":\"tsd-kind-property tsd-parent-kind-class tsd-is-inherited\",\"parent\":\"AssignTag\"},{\"kind\":1024,\"name\":\"liquid\",\"url\":\"classes/AssignTag.html#liquid\",\"classes\":\"tsd-kind-property tsd-parent-kind-class tsd-is-inherited\",\"parent\":\"AssignTag\"},{\"kind\":1024,\"name\":\"tokenizer\",\"url\":\"classes/AssignTag.html#tokenizer\",\"classes\":\"tsd-kind-property tsd-parent-kind-class tsd-is-protected tsd-is-inherited\",\"parent\":\"AssignTag\"},{\"kind\":1024,\"name\":\"token\",\"url\":\"classes/AssignTag.html#token\",\"classes\":\"tsd-kind-property tsd-parent-kind-class tsd-is-inherited\",\"parent\":\"AssignTag\"},{\"kind\":128,\"name\":\"ForTag\",\"url\":\"classes/ForTag.html\",\"classes\":\"tsd-kind-class\"},{\"kind\":512,\"name\":\"constructor\",\"url\":\"classes/ForTag.html#constructor\",\"classes\":\"tsd-kind-constructor tsd-parent-kind-class\",\"parent\":\"ForTag\"},{\"kind\":1024,\"name\":\"variable\",\"url\":\"classes/ForTag.html#variable\",\"classes\":\"tsd-kind-property tsd-parent-kind-class\",\"parent\":\"ForTag\"},{\"kind\":1024,\"name\":\"collection\",\"url\":\"classes/ForTag.html#collection\",\"classes\":\"tsd-kind-property tsd-parent-kind-class\",\"parent\":\"ForTag\"},{\"kind\":1024,\"name\":\"hash\",\"url\":\"classes/ForTag.html#hash\",\"classes\":\"tsd-kind-property tsd-parent-kind-class\",\"parent\":\"ForTag\"},{\"kind\":1024,\"name\":\"templates\",\"url\":\"classes/ForTag.html#templates\",\"classes\":\"tsd-kind-property tsd-parent-kind-class\",\"parent\":\"ForTag\"},{\"kind\":1024,\"name\":\"elseTemplates\",\"url\":\"classes/ForTag.html#elseTemplates\",\"classes\":\"tsd-kind-property tsd-parent-kind-class\",\"parent\":\"ForTag\"},{\"kind\":2048,\"name\":\"render\",\"url\":\"classes/ForTag.html#render\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"ForTag\"},{\"kind\":1024,\"name\":\"name\",\"url\":\"classes/ForTag.html#name\",\"classes\":\"tsd-kind-property tsd-parent-kind-class tsd-is-inherited\",\"parent\":\"ForTag\"},{\"kind\":1024,\"name\":\"liquid\",\"url\":\"classes/ForTag.html#liquid\",\"classes\":\"tsd-kind-property tsd-parent-kind-class tsd-is-inherited\",\"parent\":\"ForTag\"},{\"kind\":1024,\"name\":\"tokenizer\",\"url\":\"classes/ForTag.html#tokenizer\",\"classes\":\"tsd-kind-property tsd-parent-kind-class tsd-is-protected tsd-is-inherited\",\"parent\":\"ForTag\"},{\"kind\":1024,\"name\":\"token\",\"url\":\"classes/ForTag.html#token\",\"classes\":\"tsd-kind-property tsd-parent-kind-class tsd-is-inherited\",\"parent\":\"ForTag\"},{\"kind\":128,\"name\":\"CaptureTag\",\"url\":\"classes/CaptureTag.html\",\"classes\":\"tsd-kind-class\"},{\"kind\":512,\"name\":\"constructor\",\"url\":\"classes/CaptureTag.html#constructor\",\"classes\":\"tsd-kind-constructor tsd-parent-kind-class\",\"parent\":\"CaptureTag\"},{\"kind\":1024,\"name\":\"variable\",\"url\":\"classes/CaptureTag.html#variable\",\"classes\":\"tsd-kind-property tsd-parent-kind-class\",\"parent\":\"CaptureTag\"},{\"kind\":1024,\"name\":\"templates\",\"url\":\"classes/CaptureTag.html#templates\",\"classes\":\"tsd-kind-property tsd-parent-kind-class\",\"parent\":\"CaptureTag\"},{\"kind\":2048,\"name\":\"render\",\"url\":\"classes/CaptureTag.html#render\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"CaptureTag\"},{\"kind\":2048,\"name\":\"readVariableName\",\"url\":\"classes/CaptureTag.html#readVariableName\",\"classes\":\"tsd-kind-method tsd-parent-kind-class tsd-is-private\",\"parent\":\"CaptureTag\"},{\"kind\":1024,\"name\":\"name\",\"url\":\"classes/CaptureTag.html#name\",\"classes\":\"tsd-kind-property tsd-parent-kind-class tsd-is-inherited\",\"parent\":\"CaptureTag\"},{\"kind\":1024,\"name\":\"liquid\",\"url\":\"classes/CaptureTag.html#liquid\",\"classes\":\"tsd-kind-property tsd-parent-kind-class tsd-is-inherited\",\"parent\":\"CaptureTag\"},{\"kind\":1024,\"name\":\"tokenizer\",\"url\":\"classes/CaptureTag.html#tokenizer\",\"classes\":\"tsd-kind-property tsd-parent-kind-class tsd-is-protected tsd-is-inherited\",\"parent\":\"CaptureTag\"},{\"kind\":1024,\"name\":\"token\",\"url\":\"classes/CaptureTag.html#token\",\"classes\":\"tsd-kind-property tsd-parent-kind-class tsd-is-inherited\",\"parent\":\"CaptureTag\"},{\"kind\":128,\"name\":\"CaseTag\",\"url\":\"classes/CaseTag.html\",\"classes\":\"tsd-kind-class\"},{\"kind\":512,\"name\":\"constructor\",\"url\":\"classes/CaseTag.html#constructor\",\"classes\":\"tsd-kind-constructor tsd-parent-kind-class\",\"parent\":\"CaseTag\"},{\"kind\":1024,\"name\":\"value\",\"url\":\"classes/CaseTag.html#value\",\"classes\":\"tsd-kind-property tsd-parent-kind-class\",\"parent\":\"CaseTag\"},{\"kind\":1024,\"name\":\"branches\",\"url\":\"classes/CaseTag.html#branches\",\"classes\":\"tsd-kind-property tsd-parent-kind-class\",\"parent\":\"CaseTag\"},{\"kind\":1024,\"name\":\"elseTemplates\",\"url\":\"classes/CaseTag.html#elseTemplates\",\"classes\":\"tsd-kind-property tsd-parent-kind-class\",\"parent\":\"CaseTag\"},{\"kind\":2048,\"name\":\"render\",\"url\":\"classes/CaseTag.html#render\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"CaseTag\"},{\"kind\":1024,\"name\":\"name\",\"url\":\"classes/CaseTag.html#name\",\"classes\":\"tsd-kind-property tsd-parent-kind-class tsd-is-inherited\",\"parent\":\"CaseTag\"},{\"kind\":1024,\"name\":\"liquid\",\"url\":\"classes/CaseTag.html#liquid\",\"classes\":\"tsd-kind-property tsd-parent-kind-class tsd-is-inherited\",\"parent\":\"CaseTag\"},{\"kind\":1024,\"name\":\"tokenizer\",\"url\":\"classes/CaseTag.html#tokenizer\",\"classes\":\"tsd-kind-property tsd-parent-kind-class tsd-is-protected tsd-is-inherited\",\"parent\":\"CaseTag\"},{\"kind\":1024,\"name\":\"token\",\"url\":\"classes/CaseTag.html#token\",\"classes\":\"tsd-kind-property tsd-parent-kind-class tsd-is-inherited\",\"parent\":\"CaseTag\"},{\"kind\":128,\"name\":\"CommentTag\",\"url\":\"classes/CommentTag.html\",\"classes\":\"tsd-kind-class\"},{\"kind\":512,\"name\":\"constructor\",\"url\":\"classes/CommentTag.html#constructor\",\"classes\":\"tsd-kind-constructor tsd-parent-kind-class\",\"parent\":\"CommentTag\"},{\"kind\":2048,\"name\":\"render\",\"url\":\"classes/CommentTag.html#render\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"CommentTag\"},{\"kind\":1024,\"name\":\"name\",\"url\":\"classes/CommentTag.html#name\",\"classes\":\"tsd-kind-property tsd-parent-kind-class tsd-is-inherited\",\"parent\":\"CommentTag\"},{\"kind\":1024,\"name\":\"liquid\",\"url\":\"classes/CommentTag.html#liquid\",\"classes\":\"tsd-kind-property tsd-parent-kind-class tsd-is-inherited\",\"parent\":\"CommentTag\"},{\"kind\":1024,\"name\":\"tokenizer\",\"url\":\"classes/CommentTag.html#tokenizer\",\"classes\":\"tsd-kind-property tsd-parent-kind-class tsd-is-protected tsd-is-inherited\",\"parent\":\"CommentTag\"},{\"kind\":1024,\"name\":\"token\",\"url\":\"classes/CommentTag.html#token\",\"classes\":\"tsd-kind-property tsd-parent-kind-class tsd-is-inherited\",\"parent\":\"CommentTag\"},{\"kind\":128,\"name\":\"IncludeTag\",\"url\":\"classes/IncludeTag.html\",\"classes\":\"tsd-kind-class\"},{\"kind\":512,\"name\":\"constructor\",\"url\":\"classes/IncludeTag.html#constructor\",\"classes\":\"tsd-kind-constructor tsd-parent-kind-class\",\"parent\":\"IncludeTag\"},{\"kind\":1024,\"name\":\"withVar\",\"url\":\"classes/IncludeTag.html#withVar\",\"classes\":\"tsd-kind-property tsd-parent-kind-class tsd-is-private\",\"parent\":\"IncludeTag\"},{\"kind\":1024,\"name\":\"hash\",\"url\":\"classes/IncludeTag.html#hash\",\"classes\":\"tsd-kind-property tsd-parent-kind-class tsd-is-private\",\"parent\":\"IncludeTag\"},{\"kind\":2048,\"name\":\"render\",\"url\":\"classes/IncludeTag.html#render\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"IncludeTag\"},{\"kind\":1024,\"name\":\"name\",\"url\":\"classes/IncludeTag.html#name\",\"classes\":\"tsd-kind-property tsd-parent-kind-class tsd-is-inherited\",\"parent\":\"IncludeTag\"},{\"kind\":1024,\"name\":\"liquid\",\"url\":\"classes/IncludeTag.html#liquid\",\"classes\":\"tsd-kind-property tsd-parent-kind-class tsd-is-inherited\",\"parent\":\"IncludeTag\"},{\"kind\":1024,\"name\":\"tokenizer\",\"url\":\"classes/IncludeTag.html#tokenizer\",\"classes\":\"tsd-kind-property tsd-parent-kind-class tsd-is-protected tsd-is-inherited\",\"parent\":\"IncludeTag\"},{\"kind\":1024,\"name\":\"token\",\"url\":\"classes/IncludeTag.html#token\",\"classes\":\"tsd-kind-property tsd-parent-kind-class tsd-is-inherited\",\"parent\":\"IncludeTag\"},{\"kind\":128,\"name\":\"RenderTag\",\"url\":\"classes/RenderTag.html\",\"classes\":\"tsd-kind-class\"},{\"kind\":512,\"name\":\"constructor\",\"url\":\"classes/RenderTag.html#constructor\",\"classes\":\"tsd-kind-constructor tsd-parent-kind-class\",\"parent\":\"RenderTag\"},{\"kind\":1024,\"name\":\"file\",\"url\":\"classes/RenderTag.html#file\",\"classes\":\"tsd-kind-property tsd-parent-kind-class tsd-is-private\",\"parent\":\"RenderTag\"},{\"kind\":1024,\"name\":\"currentFile\",\"url\":\"classes/RenderTag.html#currentFile\",\"classes\":\"tsd-kind-property tsd-parent-kind-class tsd-is-private\",\"parent\":\"RenderTag\"},{\"kind\":1024,\"name\":\"hash\",\"url\":\"classes/RenderTag.html#hash\",\"classes\":\"tsd-kind-property tsd-parent-kind-class tsd-is-private\",\"parent\":\"RenderTag\"},{\"kind\":2048,\"name\":\"render\",\"url\":\"classes/RenderTag.html#render\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"RenderTag\"},{\"kind\":1024,\"name\":\"name\",\"url\":\"classes/RenderTag.html#name\",\"classes\":\"tsd-kind-property tsd-parent-kind-class tsd-is-inherited\",\"parent\":\"RenderTag\"},{\"kind\":1024,\"name\":\"liquid\",\"url\":\"classes/RenderTag.html#liquid\",\"classes\":\"tsd-kind-property tsd-parent-kind-class tsd-is-inherited\",\"parent\":\"RenderTag\"},{\"kind\":1024,\"name\":\"tokenizer\",\"url\":\"classes/RenderTag.html#tokenizer\",\"classes\":\"tsd-kind-property tsd-parent-kind-class tsd-is-protected tsd-is-inherited\",\"parent\":\"RenderTag\"},{\"kind\":1024,\"name\":\"token\",\"url\":\"classes/RenderTag.html#token\",\"classes\":\"tsd-kind-property tsd-parent-kind-class tsd-is-inherited\",\"parent\":\"RenderTag\"},{\"kind\":128,\"name\":\"DecrementTag\",\"url\":\"classes/DecrementTag.html\",\"classes\":\"tsd-kind-class\"},{\"kind\":512,\"name\":\"constructor\",\"url\":\"classes/DecrementTag.html#constructor\",\"classes\":\"tsd-kind-constructor tsd-parent-kind-class\",\"parent\":\"DecrementTag\"},{\"kind\":1024,\"name\":\"variable\",\"url\":\"classes/DecrementTag.html#variable\",\"classes\":\"tsd-kind-property tsd-parent-kind-class tsd-is-private\",\"parent\":\"DecrementTag\"},{\"kind\":2048,\"name\":\"render\",\"url\":\"classes/DecrementTag.html#render\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"DecrementTag\"},{\"kind\":1024,\"name\":\"name\",\"url\":\"classes/DecrementTag.html#name\",\"classes\":\"tsd-kind-property tsd-parent-kind-class tsd-is-inherited\",\"parent\":\"DecrementTag\"},{\"kind\":1024,\"name\":\"liquid\",\"url\":\"classes/DecrementTag.html#liquid\",\"classes\":\"tsd-kind-property tsd-parent-kind-class tsd-is-inherited\",\"parent\":\"DecrementTag\"},{\"kind\":1024,\"name\":\"tokenizer\",\"url\":\"classes/DecrementTag.html#tokenizer\",\"classes\":\"tsd-kind-property tsd-parent-kind-class tsd-is-protected tsd-is-inherited\",\"parent\":\"DecrementTag\"},{\"kind\":1024,\"name\":\"token\",\"url\":\"classes/DecrementTag.html#token\",\"classes\":\"tsd-kind-property tsd-parent-kind-class tsd-is-inherited\",\"parent\":\"DecrementTag\"},{\"kind\":128,\"name\":\"IncrementTag\",\"url\":\"classes/IncrementTag.html\",\"classes\":\"tsd-kind-class\"},{\"kind\":512,\"name\":\"constructor\",\"url\":\"classes/IncrementTag.html#constructor\",\"classes\":\"tsd-kind-constructor tsd-parent-kind-class\",\"parent\":\"IncrementTag\"},{\"kind\":1024,\"name\":\"variable\",\"url\":\"classes/IncrementTag.html#variable\",\"classes\":\"tsd-kind-property tsd-parent-kind-class tsd-is-private\",\"parent\":\"IncrementTag\"},{\"kind\":2048,\"name\":\"render\",\"url\":\"classes/IncrementTag.html#render\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"IncrementTag\"},{\"kind\":1024,\"name\":\"name\",\"url\":\"classes/IncrementTag.html#name\",\"classes\":\"tsd-kind-property tsd-parent-kind-class tsd-is-inherited\",\"parent\":\"IncrementTag\"},{\"kind\":1024,\"name\":\"liquid\",\"url\":\"classes/IncrementTag.html#liquid\",\"classes\":\"tsd-kind-property tsd-parent-kind-class tsd-is-inherited\",\"parent\":\"IncrementTag\"},{\"kind\":1024,\"name\":\"tokenizer\",\"url\":\"classes/IncrementTag.html#tokenizer\",\"classes\":\"tsd-kind-property tsd-parent-kind-class tsd-is-protected tsd-is-inherited\",\"parent\":\"IncrementTag\"},{\"kind\":1024,\"name\":\"token\",\"url\":\"classes/IncrementTag.html#token\",\"classes\":\"tsd-kind-property tsd-parent-kind-class tsd-is-inherited\",\"parent\":\"IncrementTag\"},{\"kind\":128,\"name\":\"CycleTag\",\"url\":\"classes/CycleTag.html\",\"classes\":\"tsd-kind-class\"},{\"kind\":512,\"name\":\"constructor\",\"url\":\"classes/CycleTag.html#constructor\",\"classes\":\"tsd-kind-constructor tsd-parent-kind-class\",\"parent\":\"CycleTag\"},{\"kind\":1024,\"name\":\"candidates\",\"url\":\"classes/CycleTag.html#candidates\",\"classes\":\"tsd-kind-property tsd-parent-kind-class tsd-is-private\",\"parent\":\"CycleTag\"},{\"kind\":1024,\"name\":\"group\",\"url\":\"classes/CycleTag.html#group\",\"classes\":\"tsd-kind-property tsd-parent-kind-class tsd-is-private\",\"parent\":\"CycleTag\"},{\"kind\":2048,\"name\":\"render\",\"url\":\"classes/CycleTag.html#render\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"CycleTag\"},{\"kind\":1024,\"name\":\"name\",\"url\":\"classes/CycleTag.html#name\",\"classes\":\"tsd-kind-property tsd-parent-kind-class tsd-is-inherited\",\"parent\":\"CycleTag\"},{\"kind\":1024,\"name\":\"liquid\",\"url\":\"classes/CycleTag.html#liquid\",\"classes\":\"tsd-kind-property tsd-parent-kind-class tsd-is-inherited\",\"parent\":\"CycleTag\"},{\"kind\":1024,\"name\":\"tokenizer\",\"url\":\"classes/CycleTag.html#tokenizer\",\"classes\":\"tsd-kind-property tsd-parent-kind-class tsd-is-protected tsd-is-inherited\",\"parent\":\"CycleTag\"},{\"kind\":1024,\"name\":\"token\",\"url\":\"classes/CycleTag.html#token\",\"classes\":\"tsd-kind-property tsd-parent-kind-class tsd-is-inherited\",\"parent\":\"CycleTag\"},{\"kind\":128,\"name\":\"IfTag\",\"url\":\"classes/IfTag.html\",\"classes\":\"tsd-kind-class\"},{\"kind\":512,\"name\":\"constructor\",\"url\":\"classes/IfTag.html#constructor\",\"classes\":\"tsd-kind-constructor tsd-parent-kind-class\",\"parent\":\"IfTag\"},{\"kind\":1024,\"name\":\"branches\",\"url\":\"classes/IfTag.html#branches\",\"classes\":\"tsd-kind-property tsd-parent-kind-class\",\"parent\":\"IfTag\"},{\"kind\":1024,\"name\":\"elseTemplates\",\"url\":\"classes/IfTag.html#elseTemplates\",\"classes\":\"tsd-kind-property tsd-parent-kind-class\",\"parent\":\"IfTag\"},{\"kind\":2048,\"name\":\"render\",\"url\":\"classes/IfTag.html#render\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"IfTag\"},{\"kind\":1024,\"name\":\"name\",\"url\":\"classes/IfTag.html#name\",\"classes\":\"tsd-kind-property tsd-parent-kind-class tsd-is-inherited\",\"parent\":\"IfTag\"},{\"kind\":1024,\"name\":\"liquid\",\"url\":\"classes/IfTag.html#liquid\",\"classes\":\"tsd-kind-property tsd-parent-kind-class tsd-is-inherited\",\"parent\":\"IfTag\"},{\"kind\":1024,\"name\":\"tokenizer\",\"url\":\"classes/IfTag.html#tokenizer\",\"classes\":\"tsd-kind-property tsd-parent-kind-class tsd-is-protected tsd-is-inherited\",\"parent\":\"IfTag\"},{\"kind\":1024,\"name\":\"token\",\"url\":\"classes/IfTag.html#token\",\"classes\":\"tsd-kind-property tsd-parent-kind-class tsd-is-inherited\",\"parent\":\"IfTag\"},{\"kind\":128,\"name\":\"LayoutTag\",\"url\":\"classes/LayoutTag.html\",\"classes\":\"tsd-kind-class\"},{\"kind\":512,\"name\":\"constructor\",\"url\":\"classes/LayoutTag.html#constructor\",\"classes\":\"tsd-kind-constructor tsd-parent-kind-class\",\"parent\":\"LayoutTag\"},{\"kind\":1024,\"name\":\"args\",\"url\":\"classes/LayoutTag.html#args\",\"classes\":\"tsd-kind-property tsd-parent-kind-class\",\"parent\":\"LayoutTag\"},{\"kind\":1024,\"name\":\"templates\",\"url\":\"classes/LayoutTag.html#templates\",\"classes\":\"tsd-kind-property tsd-parent-kind-class\",\"parent\":\"LayoutTag\"},{\"kind\":1024,\"name\":\"file\",\"url\":\"classes/LayoutTag.html#file\",\"classes\":\"tsd-kind-property tsd-parent-kind-class\",\"parent\":\"LayoutTag\"},{\"kind\":2048,\"name\":\"render\",\"url\":\"classes/LayoutTag.html#render\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"LayoutTag\"},{\"kind\":1024,\"name\":\"name\",\"url\":\"classes/LayoutTag.html#name\",\"classes\":\"tsd-kind-property tsd-parent-kind-class tsd-is-inherited\",\"parent\":\"LayoutTag\"},{\"kind\":1024,\"name\":\"liquid\",\"url\":\"classes/LayoutTag.html#liquid\",\"classes\":\"tsd-kind-property tsd-parent-kind-class tsd-is-inherited\",\"parent\":\"LayoutTag\"},{\"kind\":1024,\"name\":\"tokenizer\",\"url\":\"classes/LayoutTag.html#tokenizer\",\"classes\":\"tsd-kind-property tsd-parent-kind-class tsd-is-protected tsd-is-inherited\",\"parent\":\"LayoutTag\"},{\"kind\":1024,\"name\":\"token\",\"url\":\"classes/LayoutTag.html#token\",\"classes\":\"tsd-kind-property tsd-parent-kind-class tsd-is-inherited\",\"parent\":\"LayoutTag\"},{\"kind\":128,\"name\":\"BlockTag\",\"url\":\"classes/BlockTag.html\",\"classes\":\"tsd-kind-class\"},{\"kind\":512,\"name\":\"constructor\",\"url\":\"classes/BlockTag.html#constructor\",\"classes\":\"tsd-kind-constructor tsd-parent-kind-class\",\"parent\":\"BlockTag\"},{\"kind\":1024,\"name\":\"block\",\"url\":\"classes/BlockTag.html#block\",\"classes\":\"tsd-kind-property tsd-parent-kind-class\",\"parent\":\"BlockTag\"},{\"kind\":1024,\"name\":\"templates\",\"url\":\"classes/BlockTag.html#templates\",\"classes\":\"tsd-kind-property tsd-parent-kind-class\",\"parent\":\"BlockTag\"},{\"kind\":2048,\"name\":\"render\",\"url\":\"classes/BlockTag.html#render\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"BlockTag\"},{\"kind\":2048,\"name\":\"getBlockRender\",\"url\":\"classes/BlockTag.html#getBlockRender\",\"classes\":\"tsd-kind-method tsd-parent-kind-class tsd-is-private\",\"parent\":\"BlockTag\"},{\"kind\":65536,\"name\":\"__type\",\"url\":\"classes/BlockTag.html#getBlockRender.getBlockRender-1.__type\",\"classes\":\"tsd-kind-type-literal\",\"parent\":\"BlockTag.getBlockRender.getBlockRender\"},{\"kind\":1024,\"name\":\"name\",\"url\":\"classes/BlockTag.html#name\",\"classes\":\"tsd-kind-property tsd-parent-kind-class tsd-is-inherited\",\"parent\":\"BlockTag\"},{\"kind\":1024,\"name\":\"liquid\",\"url\":\"classes/BlockTag.html#liquid\",\"classes\":\"tsd-kind-property tsd-parent-kind-class tsd-is-inherited\",\"parent\":\"BlockTag\"},{\"kind\":1024,\"name\":\"tokenizer\",\"url\":\"classes/BlockTag.html#tokenizer\",\"classes\":\"tsd-kind-property tsd-parent-kind-class tsd-is-protected tsd-is-inherited\",\"parent\":\"BlockTag\"},{\"kind\":1024,\"name\":\"token\",\"url\":\"classes/BlockTag.html#token\",\"classes\":\"tsd-kind-property tsd-parent-kind-class tsd-is-inherited\",\"parent\":\"BlockTag\"},{\"kind\":128,\"name\":\"RawTag\",\"url\":\"classes/RawTag.html\",\"classes\":\"tsd-kind-class\"},{\"kind\":512,\"name\":\"constructor\",\"url\":\"classes/RawTag.html#constructor\",\"classes\":\"tsd-kind-constructor tsd-parent-kind-class\",\"parent\":\"RawTag\"},{\"kind\":1024,\"name\":\"tokens\",\"url\":\"classes/RawTag.html#tokens\",\"classes\":\"tsd-kind-property tsd-parent-kind-class tsd-is-private\",\"parent\":\"RawTag\"},{\"kind\":2048,\"name\":\"render\",\"url\":\"classes/RawTag.html#render\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"RawTag\"},{\"kind\":1024,\"name\":\"name\",\"url\":\"classes/RawTag.html#name\",\"classes\":\"tsd-kind-property tsd-parent-kind-class tsd-is-inherited\",\"parent\":\"RawTag\"},{\"kind\":1024,\"name\":\"liquid\",\"url\":\"classes/RawTag.html#liquid\",\"classes\":\"tsd-kind-property tsd-parent-kind-class tsd-is-inherited\",\"parent\":\"RawTag\"},{\"kind\":1024,\"name\":\"tokenizer\",\"url\":\"classes/RawTag.html#tokenizer\",\"classes\":\"tsd-kind-property tsd-parent-kind-class tsd-is-protected tsd-is-inherited\",\"parent\":\"RawTag\"},{\"kind\":1024,\"name\":\"token\",\"url\":\"classes/RawTag.html#token\",\"classes\":\"tsd-kind-property tsd-parent-kind-class tsd-is-inherited\",\"parent\":\"RawTag\"},{\"kind\":128,\"name\":\"TablerowTag\",\"url\":\"classes/TablerowTag.html\",\"classes\":\"tsd-kind-class\"},{\"kind\":512,\"name\":\"constructor\",\"url\":\"classes/TablerowTag.html#constructor\",\"classes\":\"tsd-kind-constructor tsd-parent-kind-class\",\"parent\":\"TablerowTag\"},{\"kind\":1024,\"name\":\"variable\",\"url\":\"classes/TablerowTag.html#variable\",\"classes\":\"tsd-kind-property tsd-parent-kind-class\",\"parent\":\"TablerowTag\"},{\"kind\":1024,\"name\":\"args\",\"url\":\"classes/TablerowTag.html#args\",\"classes\":\"tsd-kind-property tsd-parent-kind-class\",\"parent\":\"TablerowTag\"},{\"kind\":1024,\"name\":\"templates\",\"url\":\"classes/TablerowTag.html#templates\",\"classes\":\"tsd-kind-property tsd-parent-kind-class\",\"parent\":\"TablerowTag\"},{\"kind\":1024,\"name\":\"collection\",\"url\":\"classes/TablerowTag.html#collection\",\"classes\":\"tsd-kind-property tsd-parent-kind-class\",\"parent\":\"TablerowTag\"},{\"kind\":2048,\"name\":\"render\",\"url\":\"classes/TablerowTag.html#render\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"TablerowTag\"},{\"kind\":1024,\"name\":\"name\",\"url\":\"classes/TablerowTag.html#name\",\"classes\":\"tsd-kind-property tsd-parent-kind-class tsd-is-inherited\",\"parent\":\"TablerowTag\"},{\"kind\":1024,\"name\":\"liquid\",\"url\":\"classes/TablerowTag.html#liquid\",\"classes\":\"tsd-kind-property tsd-parent-kind-class tsd-is-inherited\",\"parent\":\"TablerowTag\"},{\"kind\":1024,\"name\":\"tokenizer\",\"url\":\"classes/TablerowTag.html#tokenizer\",\"classes\":\"tsd-kind-property tsd-parent-kind-class tsd-is-protected tsd-is-inherited\",\"parent\":\"TablerowTag\"},{\"kind\":1024,\"name\":\"token\",\"url\":\"classes/TablerowTag.html#token\",\"classes\":\"tsd-kind-property tsd-parent-kind-class tsd-is-inherited\",\"parent\":\"TablerowTag\"},{\"kind\":128,\"name\":\"UnlessTag\",\"url\":\"classes/UnlessTag.html\",\"classes\":\"tsd-kind-class\"},{\"kind\":512,\"name\":\"constructor\",\"url\":\"classes/UnlessTag.html#constructor\",\"classes\":\"tsd-kind-constructor tsd-parent-kind-class\",\"parent\":\"UnlessTag\"},{\"kind\":1024,\"name\":\"branches\",\"url\":\"classes/UnlessTag.html#branches\",\"classes\":\"tsd-kind-property tsd-parent-kind-class\",\"parent\":\"UnlessTag\"},{\"kind\":1024,\"name\":\"elseTemplates\",\"url\":\"classes/UnlessTag.html#elseTemplates\",\"classes\":\"tsd-kind-property tsd-parent-kind-class\",\"parent\":\"UnlessTag\"},{\"kind\":2048,\"name\":\"render\",\"url\":\"classes/UnlessTag.html#render\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"UnlessTag\"},{\"kind\":1024,\"name\":\"name\",\"url\":\"classes/UnlessTag.html#name\",\"classes\":\"tsd-kind-property tsd-parent-kind-class tsd-is-inherited\",\"parent\":\"UnlessTag\"},{\"kind\":1024,\"name\":\"liquid\",\"url\":\"classes/UnlessTag.html#liquid\",\"classes\":\"tsd-kind-property tsd-parent-kind-class tsd-is-inherited\",\"parent\":\"UnlessTag\"},{\"kind\":1024,\"name\":\"tokenizer\",\"url\":\"classes/UnlessTag.html#tokenizer\",\"classes\":\"tsd-kind-property tsd-parent-kind-class tsd-is-protected tsd-is-inherited\",\"parent\":\"UnlessTag\"},{\"kind\":1024,\"name\":\"token\",\"url\":\"classes/UnlessTag.html#token\",\"classes\":\"tsd-kind-property tsd-parent-kind-class tsd-is-inherited\",\"parent\":\"UnlessTag\"},{\"kind\":128,\"name\":\"BreakTag\",\"url\":\"classes/BreakTag.html\",\"classes\":\"tsd-kind-class\"},{\"kind\":512,\"name\":\"constructor\",\"url\":\"classes/BreakTag.html#constructor\",\"classes\":\"tsd-kind-constructor tsd-parent-kind-class tsd-is-inherited\",\"parent\":\"BreakTag\"},{\"kind\":2048,\"name\":\"render\",\"url\":\"classes/BreakTag.html#render\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"BreakTag\"},{\"kind\":1024,\"name\":\"name\",\"url\":\"classes/BreakTag.html#name\",\"classes\":\"tsd-kind-property tsd-parent-kind-class tsd-is-inherited\",\"parent\":\"BreakTag\"},{\"kind\":1024,\"name\":\"liquid\",\"url\":\"classes/BreakTag.html#liquid\",\"classes\":\"tsd-kind-property tsd-parent-kind-class tsd-is-inherited\",\"parent\":\"BreakTag\"},{\"kind\":1024,\"name\":\"tokenizer\",\"url\":\"classes/BreakTag.html#tokenizer\",\"classes\":\"tsd-kind-property tsd-parent-kind-class tsd-is-protected tsd-is-inherited\",\"parent\":\"BreakTag\"},{\"kind\":1024,\"name\":\"token\",\"url\":\"classes/BreakTag.html#token\",\"classes\":\"tsd-kind-property tsd-parent-kind-class tsd-is-inherited\",\"parent\":\"BreakTag\"},{\"kind\":128,\"name\":\"ContinueTag\",\"url\":\"classes/ContinueTag.html\",\"classes\":\"tsd-kind-class\"},{\"kind\":512,\"name\":\"constructor\",\"url\":\"classes/ContinueTag.html#constructor\",\"classes\":\"tsd-kind-constructor tsd-parent-kind-class tsd-is-inherited\",\"parent\":\"ContinueTag\"},{\"kind\":2048,\"name\":\"render\",\"url\":\"classes/ContinueTag.html#render\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"ContinueTag\"},{\"kind\":1024,\"name\":\"name\",\"url\":\"classes/ContinueTag.html#name\",\"classes\":\"tsd-kind-property tsd-parent-kind-class tsd-is-inherited\",\"parent\":\"ContinueTag\"},{\"kind\":1024,\"name\":\"liquid\",\"url\":\"classes/ContinueTag.html#liquid\",\"classes\":\"tsd-kind-property tsd-parent-kind-class tsd-is-inherited\",\"parent\":\"ContinueTag\"},{\"kind\":1024,\"name\":\"tokenizer\",\"url\":\"classes/ContinueTag.html#tokenizer\",\"classes\":\"tsd-kind-property tsd-parent-kind-class tsd-is-protected tsd-is-inherited\",\"parent\":\"ContinueTag\"},{\"kind\":1024,\"name\":\"token\",\"url\":\"classes/ContinueTag.html#token\",\"classes\":\"tsd-kind-property tsd-parent-kind-class tsd-is-inherited\",\"parent\":\"ContinueTag\"},{\"kind\":128,\"name\":\"EchoTag\",\"url\":\"classes/EchoTag.html\",\"classes\":\"tsd-kind-class\"},{\"kind\":512,\"name\":\"constructor\",\"url\":\"classes/EchoTag.html#constructor\",\"classes\":\"tsd-kind-constructor tsd-parent-kind-class\",\"parent\":\"EchoTag\"},{\"kind\":1024,\"name\":\"value\",\"url\":\"classes/EchoTag.html#value\",\"classes\":\"tsd-kind-property tsd-parent-kind-class tsd-is-private\",\"parent\":\"EchoTag\"},{\"kind\":2048,\"name\":\"render\",\"url\":\"classes/EchoTag.html#render\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"EchoTag\"},{\"kind\":1024,\"name\":\"name\",\"url\":\"classes/EchoTag.html#name\",\"classes\":\"tsd-kind-property tsd-parent-kind-class tsd-is-inherited\",\"parent\":\"EchoTag\"},{\"kind\":1024,\"name\":\"liquid\",\"url\":\"classes/EchoTag.html#liquid\",\"classes\":\"tsd-kind-property tsd-parent-kind-class tsd-is-inherited\",\"parent\":\"EchoTag\"},{\"kind\":1024,\"name\":\"tokenizer\",\"url\":\"classes/EchoTag.html#tokenizer\",\"classes\":\"tsd-kind-property tsd-parent-kind-class tsd-is-protected tsd-is-inherited\",\"parent\":\"EchoTag\"},{\"kind\":1024,\"name\":\"token\",\"url\":\"classes/EchoTag.html#token\",\"classes\":\"tsd-kind-property tsd-parent-kind-class tsd-is-inherited\",\"parent\":\"EchoTag\"},{\"kind\":128,\"name\":\"LiquidTag\",\"url\":\"classes/LiquidTag.html\",\"classes\":\"tsd-kind-class\"},{\"kind\":512,\"name\":\"constructor\",\"url\":\"classes/LiquidTag.html#constructor\",\"classes\":\"tsd-kind-constructor tsd-parent-kind-class\",\"parent\":\"LiquidTag\"},{\"kind\":1024,\"name\":\"templates\",\"url\":\"classes/LiquidTag.html#templates\",\"classes\":\"tsd-kind-property tsd-parent-kind-class\",\"parent\":\"LiquidTag\"},{\"kind\":2048,\"name\":\"render\",\"url\":\"classes/LiquidTag.html#render\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"LiquidTag\"},{\"kind\":1024,\"name\":\"name\",\"url\":\"classes/LiquidTag.html#name\",\"classes\":\"tsd-kind-property tsd-parent-kind-class tsd-is-inherited\",\"parent\":\"LiquidTag\"},{\"kind\":1024,\"name\":\"liquid\",\"url\":\"classes/LiquidTag.html#liquid\",\"classes\":\"tsd-kind-property tsd-parent-kind-class tsd-is-inherited\",\"parent\":\"LiquidTag\"},{\"kind\":1024,\"name\":\"tokenizer\",\"url\":\"classes/LiquidTag.html#tokenizer\",\"classes\":\"tsd-kind-property tsd-parent-kind-class tsd-is-protected tsd-is-inherited\",\"parent\":\"LiquidTag\"},{\"kind\":1024,\"name\":\"token\",\"url\":\"classes/LiquidTag.html#token\",\"classes\":\"tsd-kind-property tsd-parent-kind-class tsd-is-inherited\",\"parent\":\"LiquidTag\"},{\"kind\":128,\"name\":\"InlineCommentTag\",\"url\":\"classes/InlineCommentTag.html\",\"classes\":\"tsd-kind-class\"},{\"kind\":512,\"name\":\"constructor\",\"url\":\"classes/InlineCommentTag.html#constructor\",\"classes\":\"tsd-kind-constructor tsd-parent-kind-class\",\"parent\":\"InlineCommentTag\"},{\"kind\":2048,\"name\":\"render\",\"url\":\"classes/InlineCommentTag.html#render\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"InlineCommentTag\"},{\"kind\":1024,\"name\":\"name\",\"url\":\"classes/InlineCommentTag.html#name\",\"classes\":\"tsd-kind-property tsd-parent-kind-class tsd-is-inherited\",\"parent\":\"InlineCommentTag\"},{\"kind\":1024,\"name\":\"liquid\",\"url\":\"classes/InlineCommentTag.html#liquid\",\"classes\":\"tsd-kind-property tsd-parent-kind-class tsd-is-inherited\",\"parent\":\"InlineCommentTag\"},{\"kind\":1024,\"name\":\"tokenizer\",\"url\":\"classes/InlineCommentTag.html#tokenizer\",\"classes\":\"tsd-kind-property tsd-parent-kind-class tsd-is-protected tsd-is-inherited\",\"parent\":\"InlineCommentTag\"},{\"kind\":1024,\"name\":\"token\",\"url\":\"classes/InlineCommentTag.html#token\",\"classes\":\"tsd-kind-property tsd-parent-kind-class tsd-is-inherited\",\"parent\":\"InlineCommentTag\"}],\"index\":{\"version\":\"2.3.9\",\"fields\":[\"name\",\"comment\"],\"fieldVectors\":[[\"name/0\",[0,58.464]],[\"comment/0\",[]],[\"name/1\",[1,58.464]],[\"comment/1\",[]],[\"name/2\",[2,58.464]],[\"comment/2\",[]],[\"name/3\",[3,58.464]],[\"comment/3\",[]],[\"name/4\",[4,58.464]],[\"comment/4\",[]],[\"name/5\",[5,58.464]],[\"comment/5\",[]],[\"name/6\",[6,58.464]],[\"comment/6\",[]],[\"name/7\",[7,58.464]],[\"comment/7\",[]],[\"name/8\",[8,58.464]],[\"comment/8\",[]],[\"name/9\",[9,58.464]],[\"comment/9\",[]],[\"name/10\",[10,58.464]],[\"comment/10\",[]],[\"name/11\",[11,58.464]],[\"comment/11\",[]],[\"name/12\",[12,58.464]],[\"comment/12\",[]],[\"name/13\",[13,58.464]],[\"comment/13\",[]],[\"name/14\",[14,58.464]],[\"comment/14\",[]],[\"name/15\",[15,58.464]],[\"comment/15\",[]],[\"name/16\",[16,58.464]],[\"comment/16\",[]],[\"name/17\",[17,58.464]],[\"comment/17\",[]],[\"name/18\",[18,53.356]],[\"comment/18\",[]],[\"name/19\",[19,58.464]],[\"comment/19\",[]],[\"name/20\",[20,45.472]],[\"comment/20\",[]],[\"name/21\",[21,25.506]],[\"comment/21\",[]],[\"name/22\",[22,28.342]],[\"comment/22\",[]],[\"name/23\",[23,43.801]],[\"comment/23\",[]],[\"name/24\",[24,58.464]],[\"comment/24\",[]],[\"name/25\",[25,45.472]],[\"comment/25\",[]],[\"name/26\",[26,58.464]],[\"comment/26\",[]],[\"name/27\",[20,45.472]],[\"comment/27\",[]],[\"name/28\",[21,25.506]],[\"comment/28\",[]],[\"name/29\",[22,28.342]],[\"comment/29\",[]],[\"name/30\",[23,43.801]],[\"comment/30\",[]],[\"name/31\",[25,45.472]],[\"comment/31\",[]],[\"name/32\",[27,58.464]],[\"comment/32\",[]],[\"name/33\",[20,45.472]],[\"comment/33\",[]],[\"name/34\",[21,25.506]],[\"comment/34\",[]],[\"name/35\",[22,28.342]],[\"comment/35\",[]],[\"name/36\",[23,43.801]],[\"comment/36\",[]],[\"name/37\",[25,45.472]],[\"comment/37\",[]],[\"name/38\",[28,58.464]],[\"comment/38\",[]],[\"name/39\",[20,45.472]],[\"comment/39\",[]],[\"name/40\",[21,25.506]],[\"comment/40\",[]],[\"name/41\",[22,28.342]],[\"comment/41\",[]],[\"name/42\",[23,43.801]],[\"comment/42\",[]],[\"name/43\",[25,45.472]],[\"comment/43\",[]],[\"name/44\",[29,58.464]],[\"comment/44\",[]],[\"name/45\",[20,45.472]],[\"comment/45\",[]],[\"name/46\",[21,25.506]],[\"comment/46\",[]],[\"name/47\",[22,28.342]],[\"comment/47\",[]],[\"name/48\",[23,43.801]],[\"comment/48\",[]],[\"name/49\",[25,45.472]],[\"comment/49\",[]],[\"name/50\",[30,58.464]],[\"comment/50\",[]],[\"name/51\",[21,25.506]],[\"comment/51\",[]],[\"name/52\",[31,58.464]],[\"comment/52\",[]],[\"name/53\",[21,25.506]],[\"comment/53\",[]],[\"name/54\",[32,58.464]],[\"comment/54\",[]],[\"name/55\",[33,58.464]],[\"comment/55\",[]],[\"name/56\",[34,58.464]],[\"comment/56\",[]],[\"name/57\",[35,58.464]],[\"comment/57\",[]],[\"name/58\",[36,58.464]],[\"comment/58\",[]],[\"name/59\",[37,53.356]],[\"comment/59\",[]],[\"name/60\",[38,58.464]],[\"comment/60\",[]],[\"name/61\",[39,58.464]],[\"comment/61\",[]],[\"name/62\",[40,58.464]],[\"comment/62\",[]],[\"name/63\",[21,25.506]],[\"comment/63\",[]],[\"name/64\",[41,58.464]],[\"comment/64\",[]],[\"name/65\",[42,58.464]],[\"comment/65\",[]],[\"name/66\",[43,58.464]],[\"comment/66\",[]],[\"name/67\",[44,58.464]],[\"comment/67\",[]],[\"name/68\",[45,58.464]],[\"comment/68\",[]],[\"name/69\",[23,43.801]],[\"comment/69\",[]],[\"name/70\",[21,25.506]],[\"comment/70\",[]],[\"name/71\",[46,58.464]],[\"comment/71\",[]],[\"name/72\",[47,58.464]],[\"comment/72\",[]],[\"name/73\",[48,37.262]],[\"comment/73\",[]],[\"name/74\",[49,58.464]],[\"comment/74\",[]],[\"name/75\",[50,53.356]],[\"comment/75\",[]],[\"name/76\",[51,58.464]],[\"comment/76\",[]],[\"name/77\",[52,58.464]],[\"comment/77\",[]],[\"name/78\",[53,53.356]],[\"comment/78\",[]],[\"name/79\",[54,53.356]],[\"comment/79\",[]],[\"name/80\",[55,53.356]],[\"comment/80\",[]],[\"name/81\",[56,53.356]],[\"comment/81\",[]],[\"name/82\",[57,58.464]],[\"comment/82\",[]],[\"name/83\",[58,58.464]],[\"comment/83\",[]],[\"name/84\",[59,58.464]],[\"comment/84\",[]],[\"name/85\",[60,58.464]],[\"comment/85\",[]],[\"name/86\",[61,58.464]],[\"comment/86\",[]],[\"name/87\",[62,58.464]],[\"comment/87\",[]],[\"name/88\",[63,58.464]],[\"comment/88\",[]],[\"name/89\",[64,58.464]],[\"comment/89\",[]],[\"name/90\",[65,58.464]],[\"comment/90\",[]],[\"name/91\",[66,58.464]],[\"comment/91\",[]],[\"name/92\",[67,58.464]],[\"comment/92\",[]],[\"name/93\",[68,58.464]],[\"comment/93\",[]],[\"name/94\",[69,58.464]],[\"comment/94\",[]],[\"name/95\",[70,58.464]],[\"comment/95\",[]],[\"name/96\",[71,58.464]],[\"comment/96\",[]],[\"name/97\",[72,58.464]],[\"comment/97\",[]],[\"name/98\",[73,43.801]],[\"comment/98\",[]],[\"name/99\",[21,25.506]],[\"comment/99\",[]],[\"name/100\",[74,49.991]],[\"comment/100\",[]],[\"name/101\",[75,58.464]],[\"comment/101\",[]],[\"name/102\",[73,43.801]],[\"comment/102\",[]],[\"name/103\",[76,58.464]],[\"comment/103\",[]],[\"name/104\",[77,43.801]],[\"comment/104\",[]],[\"name/105\",[21,25.506]],[\"comment/105\",[]],[\"name/106\",[77,43.801]],[\"comment/106\",[]],[\"name/107\",[78,29.377]],[\"comment/107\",[]],[\"name/108\",[79,58.464]],[\"comment/108\",[]],[\"name/109\",[22,28.342]],[\"comment/109\",[]],[\"name/110\",[78,29.377]],[\"comment/110\",[]],[\"name/111\",[80,58.464]],[\"comment/111\",[]],[\"name/112\",[81,53.356]],[\"comment/112\",[]],[\"name/113\",[21,25.506]],[\"comment/113\",[]],[\"name/114\",[82,30.532]],[\"comment/114\",[]],[\"name/115\",[83,30.532]],[\"comment/115\",[]],[\"name/116\",[84,30.532]],[\"comment/116\",[]],[\"name/117\",[78,29.377]],[\"comment/117\",[]],[\"name/118\",[22,28.342]],[\"comment/118\",[]],[\"name/119\",[85,53.356]],[\"comment/119\",[]],[\"name/120\",[21,25.506]],[\"comment/120\",[]],[\"name/121\",[82,30.532]],[\"comment/121\",[]],[\"name/122\",[86,47.478]],[\"comment/122\",[]],[\"name/123\",[87,58.464]],[\"comment/123\",[]],[\"name/124\",[88,58.464]],[\"comment/124\",[]],[\"name/125\",[83,30.532]],[\"comment/125\",[]],[\"name/126\",[78,29.377]],[\"comment/126\",[]],[\"name/127\",[89,53.356]],[\"comment/127\",[]],[\"name/128\",[21,25.506]],[\"comment/128\",[]],[\"name/129\",[73,43.801]],[\"comment/129\",[]],[\"name/130\",[78,29.377]],[\"comment/130\",[]],[\"name/131\",[22,28.342]],[\"comment/131\",[]],[\"name/132\",[22,28.342]],[\"comment/132\",[]],[\"name/133\",[21,25.506]],[\"comment/133\",[]],[\"name/134\",[90,53.356]],[\"comment/134\",[]],[\"name/135\",[91,49.991]],[\"comment/135\",[]],[\"name/136\",[92,53.356]],[\"comment/136\",[]],[\"name/137\",[93,49.991]],[\"comment/137\",[]],[\"name/138\",[94,45.472]],[\"comment/138\",[]],[\"name/139\",[95,53.356]],[\"comment/139\",[]],[\"name/140\",[96,53.356]],[\"comment/140\",[]],[\"name/141\",[97,53.356]],[\"comment/141\",[]],[\"name/142\",[98,58.464]],[\"comment/142\",[]],[\"name/143\",[99,58.464]],[\"comment/143\",[]],[\"name/144\",[21,25.506]],[\"comment/144\",[]],[\"name/145\",[82,30.532]],[\"comment/145\",[]],[\"name/146\",[84,30.532]],[\"comment/146\",[]],[\"name/147\",[86,47.478]],[\"comment/147\",[]],[\"name/148\",[100,58.464]],[\"comment/148\",[]],[\"name/149\",[101,58.464]],[\"comment/149\",[]],[\"name/150\",[102,58.464]],[\"comment/150\",[]],[\"name/151\",[103,58.464]],[\"comment/151\",[]],[\"name/152\",[90,53.356]],[\"comment/152\",[]],[\"name/153\",[91,49.991]],[\"comment/153\",[]],[\"name/154\",[92,53.356]],[\"comment/154\",[]],[\"name/155\",[93,49.991]],[\"comment/155\",[]],[\"name/156\",[94,45.472]],[\"comment/156\",[]],[\"name/157\",[95,53.356]],[\"comment/157\",[]],[\"name/158\",[96,53.356]],[\"comment/158\",[]],[\"name/159\",[97,53.356]],[\"comment/159\",[]],[\"name/160\",[104,58.464]],[\"comment/160\",[]],[\"name/161\",[105,58.464]],[\"comment/161\",[]],[\"name/162\",[106,58.464]],[\"comment/162\",[]],[\"name/163\",[107,58.464]],[\"comment/163\",[]],[\"name/164\",[81,53.356]],[\"comment/164\",[]],[\"name/165\",[89,53.356]],[\"comment/165\",[]],[\"name/166\",[108,58.464]],[\"comment/166\",[]],[\"name/167\",[85,53.356]],[\"comment/167\",[]],[\"name/168\",[77,43.801]],[\"comment/168\",[]],[\"name/169\",[109,58.464]],[\"comment/169\",[]],[\"name/170\",[110,58.464]],[\"comment/170\",[]],[\"name/171\",[111,58.464]],[\"comment/171\",[]],[\"name/172\",[112,58.464]],[\"comment/172\",[]],[\"name/173\",[113,58.464]],[\"comment/173\",[]],[\"name/174\",[114,58.464]],[\"comment/174\",[]],[\"name/175\",[115,58.464]],[\"comment/175\",[]],[\"name/176\",[84,30.532]],[\"comment/176\",[]],[\"name/177\",[21,25.506]],[\"comment/177\",[]],[\"name/178\",[116,58.464]],[\"comment/178\",[]],[\"name/179\",[117,58.464]],[\"comment/179\",[]],[\"name/180\",[118,58.464]],[\"comment/180\",[]],[\"name/181\",[119,58.464]],[\"comment/181\",[]],[\"name/182\",[120,58.464]],[\"comment/182\",[]],[\"name/183\",[91,49.991]],[\"comment/183\",[]],[\"name/184\",[94,45.472]],[\"comment/184\",[]],[\"name/185\",[121,58.464]],[\"comment/185\",[]],[\"name/186\",[122,58.464]],[\"comment/186\",[]],[\"name/187\",[123,58.464]],[\"comment/187\",[]],[\"name/188\",[124,58.464]],[\"comment/188\",[]],[\"name/189\",[125,58.464]],[\"comment/189\",[]],[\"name/190\",[126,58.464]],[\"comment/190\",[]],[\"name/191\",[127,58.464]],[\"comment/191\",[]],[\"name/192\",[128,58.464]],[\"comment/192\",[]],[\"name/193\",[129,58.464]],[\"comment/193\",[]],[\"name/194\",[130,58.464]],[\"comment/194\",[]],[\"name/195\",[131,58.464]],[\"comment/195\",[]],[\"name/196\",[132,58.464]],[\"comment/196\",[]],[\"name/197\",[133,58.464]],[\"comment/197\",[]],[\"name/198\",[134,58.464]],[\"comment/198\",[]],[\"name/199\",[135,58.464]],[\"comment/199\",[]],[\"name/200\",[136,58.464]],[\"comment/200\",[]],[\"name/201\",[137,58.464]],[\"comment/201\",[]],[\"name/202\",[138,58.464]],[\"comment/202\",[]],[\"name/203\",[18,53.356]],[\"comment/203\",[]],[\"name/204\",[139,58.464]],[\"comment/204\",[]],[\"name/205\",[140,58.464]],[\"comment/205\",[]],[\"name/206\",[141,58.464]],[\"comment/206\",[]],[\"name/207\",[142,58.464]],[\"comment/207\",[]],[\"name/208\",[143,58.464]],[\"comment/208\",[]],[\"name/209\",[144,58.464]],[\"comment/209\",[]],[\"name/210\",[145,58.464]],[\"comment/210\",[]],[\"name/211\",[146,58.464]],[\"comment/211\",[]],[\"name/212\",[147,58.464]],[\"comment/212\",[]],[\"name/213\",[93,49.991]],[\"comment/213\",[]],[\"name/214\",[148,58.464]],[\"comment/214\",[]],[\"name/215\",[149,58.464]],[\"comment/215\",[]],[\"name/216\",[150,58.464]],[\"comment/216\",[]],[\"name/217\",[151,58.464]],[\"comment/217\",[]],[\"name/218\",[152,58.464]],[\"comment/218\",[]],[\"name/219\",[153,58.464]],[\"comment/219\",[]],[\"name/220\",[154,58.464]],[\"comment/220\",[]],[\"name/221\",[155,58.464]],[\"comment/221\",[]],[\"name/222\",[156,58.464]],[\"comment/222\",[]],[\"name/223\",[157,58.464]],[\"comment/223\",[]],[\"name/224\",[158,58.464]],[\"comment/224\",[]],[\"name/225\",[159,58.464]],[\"comment/225\",[]],[\"name/226\",[160,58.464]],[\"comment/226\",[]],[\"name/227\",[161,58.464]],[\"comment/227\",[]],[\"name/228\",[162,58.464]],[\"comment/228\",[]],[\"name/229\",[163,58.464]],[\"comment/229\",[]],[\"name/230\",[21,25.506]],[\"comment/230\",[]],[\"name/231\",[164,53.356]],[\"comment/231\",[]],[\"name/232\",[165,58.464]],[\"comment/232\",[]],[\"name/233\",[166,58.464]],[\"comment/233\",[]],[\"name/234\",[167,58.464]],[\"comment/234\",[]],[\"name/235\",[168,58.464]],[\"comment/235\",[]],[\"name/236\",[169,58.464]],[\"comment/236\",[]],[\"name/237\",[170,58.464]],[\"comment/237\",[]],[\"name/238\",[171,58.464]],[\"comment/238\",[]],[\"name/239\",[74,49.991]],[\"comment/239\",[]],[\"name/240\",[172,58.464]],[\"comment/240\",[]],[\"name/241\",[173,58.464]],[\"comment/241\",[]],[\"name/242\",[174,58.464]],[\"comment/242\",[]],[\"name/243\",[175,58.464]],[\"comment/243\",[]],[\"name/244\",[176,58.464]],[\"comment/244\",[]],[\"name/245\",[177,58.464]],[\"comment/245\",[]],[\"name/246\",[178,58.464]],[\"comment/246\",[]],[\"name/247\",[179,58.464]],[\"comment/247\",[]],[\"name/248\",[180,58.464]],[\"comment/248\",[]],[\"name/249\",[181,58.464]],[\"comment/249\",[]],[\"name/250\",[182,58.464]],[\"comment/250\",[]],[\"name/251\",[183,58.464]],[\"comment/251\",[]],[\"name/252\",[53,53.356]],[\"comment/252\",[]],[\"name/253\",[184,58.464]],[\"comment/253\",[]],[\"name/254\",[54,53.356]],[\"comment/254\",[]],[\"name/255\",[185,58.464]],[\"comment/255\",[]],[\"name/256\",[186,58.464]],[\"comment/256\",[]],[\"name/257\",[187,58.464]],[\"comment/257\",[]],[\"name/258\",[188,58.464]],[\"comment/258\",[]],[\"name/259\",[189,58.464]],[\"comment/259\",[]],[\"name/260\",[190,58.464]],[\"comment/260\",[]],[\"name/261\",[191,58.464]],[\"comment/261\",[]],[\"name/262\",[192,58.464]],[\"comment/262\",[]],[\"name/263\",[193,58.464]],[\"comment/263\",[]],[\"name/264\",[194,58.464]],[\"comment/264\",[]],[\"name/265\",[195,58.464]],[\"comment/265\",[]],[\"name/266\",[196,58.464]],[\"comment/266\",[]],[\"name/267\",[197,58.464]],[\"comment/267\",[]],[\"name/268\",[198,58.464]],[\"comment/268\",[]],[\"name/269\",[199,53.356]],[\"comment/269\",[]],[\"name/270\",[200,42.37]],[\"comment/270\",[]],[\"name/271\",[48,37.262]],[\"comment/271\",[]],[\"name/272\",[50,53.356]],[\"comment/272\",[]],[\"name/273\",[201,58.464]],[\"comment/273\",[]],[\"name/274\",[202,58.464]],[\"comment/274\",[]],[\"name/275\",[37,53.356]],[\"comment/275\",[]],[\"name/276\",[203,58.464]],[\"comment/276\",[]],[\"name/277\",[204,58.464]],[\"comment/277\",[]],[\"name/278\",[56,53.356]],[\"comment/278\",[]],[\"name/279\",[55,53.356]],[\"comment/279\",[]],[\"name/280\",[199,53.356]],[\"comment/280\",[]],[\"name/281\",[205,58.464]],[\"comment/281\",[]],[\"name/282\",[48,37.262]],[\"comment/282\",[]],[\"name/283\",[206,58.464]],[\"comment/283\",[]],[\"name/284\",[48,37.262]],[\"comment/284\",[]],[\"name/285\",[207,58.464]],[\"comment/285\",[]],[\"name/286\",[48,37.262]],[\"comment/286\",[]],[\"name/287\",[208,58.464]],[\"comment/287\",[]],[\"name/288\",[48,37.262]],[\"comment/288\",[]],[\"name/289\",[209,58.464]],[\"comment/289\",[]],[\"name/290\",[48,37.262]],[\"comment/290\",[]],[\"name/291\",[210,58.464]],[\"comment/291\",[]],[\"name/292\",[48,37.262]],[\"comment/292\",[]],[\"name/293\",[211,58.464]],[\"comment/293\",[]],[\"name/294\",[212,58.464]],[\"comment/294\",[]],[\"name/295\",[48,37.262]],[\"comment/295\",[]],[\"name/296\",[213,58.464]],[\"comment/296\",[]],[\"name/297\",[48,37.262]],[\"comment/297\",[]],[\"name/298\",[83,30.532]],[\"comment/298\",[]],[\"name/299\",[21,25.506]],[\"comment/299\",[]],[\"name/300\",[214,58.464]],[\"comment/300\",[]],[\"name/301\",[215,58.464]],[\"comment/301\",[]],[\"name/302\",[216,58.464]],[\"comment/302\",[]],[\"name/303\",[74,49.991]],[\"comment/303\",[]],[\"name/304\",[217,53.356]],[\"comment/304\",[]],[\"name/305\",[218,58.464]],[\"comment/305\",[]],[\"name/306\",[219,58.464]],[\"comment/306\",[]],[\"name/307\",[78,29.377]],[\"comment/307\",[]],[\"name/308\",[220,58.464]],[\"comment/308\",[]],[\"name/309\",[221,58.464]],[\"comment/309\",[]],[\"name/310\",[222,58.464]],[\"comment/310\",[]],[\"name/311\",[223,58.464]],[\"comment/311\",[]],[\"name/312\",[224,58.464]],[\"comment/312\",[]],[\"name/313\",[225,58.464]],[\"comment/313\",[]],[\"name/314\",[226,58.464]],[\"comment/314\",[]],[\"name/315\",[227,58.464]],[\"comment/315\",[]],[\"name/316\",[228,58.464]],[\"comment/316\",[]],[\"name/317\",[229,58.464]],[\"comment/317\",[]],[\"name/318\",[230,58.464]],[\"comment/318\",[]],[\"name/319\",[231,58.464]],[\"comment/319\",[]],[\"name/320\",[232,58.464]],[\"comment/320\",[]],[\"name/321\",[233,58.464]],[\"comment/321\",[]],[\"name/322\",[234,58.464]],[\"comment/322\",[]],[\"name/323\",[235,58.464]],[\"comment/323\",[]],[\"name/324\",[236,58.464]],[\"comment/324\",[]],[\"name/325\",[237,58.464]],[\"comment/325\",[]],[\"name/326\",[238,58.464]],[\"comment/326\",[]],[\"name/327\",[239,58.464]],[\"comment/327\",[]],[\"name/328\",[240,58.464]],[\"comment/328\",[]],[\"name/329\",[48,37.262]],[\"comment/329\",[]],[\"name/330\",[217,53.356]],[\"comment/330\",[]],[\"name/331\",[241,58.464]],[\"comment/331\",[]],[\"name/332\",[21,25.506]],[\"comment/332\",[]],[\"name/333\",[242,58.464]],[\"comment/333\",[]],[\"name/334\",[73,43.801]],[\"comment/334\",[]],[\"name/335\",[78,29.377]],[\"comment/335\",[]],[\"name/336\",[82,30.532]],[\"comment/336\",[]],[\"name/337\",[83,30.532]],[\"comment/337\",[]],[\"name/338\",[84,30.532]],[\"comment/338\",[]],[\"name/339\",[22,28.342]],[\"comment/339\",[]],[\"name/340\",[243,58.464]],[\"comment/340\",[]],[\"name/341\",[21,25.506]],[\"comment/341\",[]],[\"name/342\",[244,45.472]],[\"comment/342\",[]],[\"name/343\",[245,53.356]],[\"comment/343\",[]],[\"name/344\",[77,43.801]],[\"comment/344\",[]],[\"name/345\",[200,42.37]],[\"comment/345\",[]],[\"name/346\",[246,47.478]],[\"comment/346\",[]],[\"name/347\",[78,29.377]],[\"comment/347\",[]],[\"name/348\",[82,30.532]],[\"comment/348\",[]],[\"name/349\",[83,30.532]],[\"comment/349\",[]],[\"name/350\",[84,30.532]],[\"comment/350\",[]],[\"name/351\",[22,28.342]],[\"comment/351\",[]],[\"name/352\",[247,58.464]],[\"comment/352\",[]],[\"name/353\",[21,25.506]],[\"comment/353\",[]],[\"name/354\",[244,45.472]],[\"comment/354\",[]],[\"name/355\",[200,42.37]],[\"comment/355\",[]],[\"name/356\",[78,29.377]],[\"comment/356\",[]],[\"name/357\",[248,58.464]],[\"comment/357\",[]],[\"name/358\",[82,30.532]],[\"comment/358\",[]],[\"name/359\",[83,30.532]],[\"comment/359\",[]],[\"name/360\",[84,30.532]],[\"comment/360\",[]],[\"name/361\",[22,28.342]],[\"comment/361\",[]],[\"name/362\",[249,58.464]],[\"comment/362\",[]],[\"name/363\",[21,25.506]],[\"comment/363\",[]],[\"name/364\",[73,43.801]],[\"comment/364\",[]],[\"name/365\",[250,49.991]],[\"comment/365\",[]],[\"name/366\",[246,47.478]],[\"comment/366\",[]],[\"name/367\",[78,29.377]],[\"comment/367\",[]],[\"name/368\",[82,30.532]],[\"comment/368\",[]],[\"name/369\",[83,30.532]],[\"comment/369\",[]],[\"name/370\",[84,30.532]],[\"comment/370\",[]],[\"name/371\",[22,28.342]],[\"comment/371\",[]],[\"name/372\",[251,58.464]],[\"comment/372\",[]],[\"name/373\",[21,25.506]],[\"comment/373\",[]],[\"name/374\",[78,29.377]],[\"comment/374\",[]],[\"name/375\",[82,30.532]],[\"comment/375\",[]],[\"name/376\",[83,30.532]],[\"comment/376\",[]],[\"name/377\",[84,30.532]],[\"comment/377\",[]],[\"name/378\",[22,28.342]],[\"comment/378\",[]],[\"name/379\",[252,58.464]],[\"comment/379\",[]],[\"name/380\",[21,25.506]],[\"comment/380\",[]],[\"name/381\",[253,58.464]],[\"comment/381\",[]],[\"name/382\",[77,43.801]],[\"comment/382\",[]],[\"name/383\",[78,29.377]],[\"comment/383\",[]],[\"name/384\",[82,30.532]],[\"comment/384\",[]],[\"name/385\",[83,30.532]],[\"comment/385\",[]],[\"name/386\",[84,30.532]],[\"comment/386\",[]],[\"name/387\",[22,28.342]],[\"comment/387\",[]],[\"name/388\",[254,58.464]],[\"comment/388\",[]],[\"name/389\",[21,25.506]],[\"comment/389\",[]],[\"name/390\",[94,45.472]],[\"comment/390\",[]],[\"name/391\",[255,58.464]],[\"comment/391\",[]],[\"name/392\",[77,43.801]],[\"comment/392\",[]],[\"name/393\",[78,29.377]],[\"comment/393\",[]],[\"name/394\",[82,30.532]],[\"comment/394\",[]],[\"name/395\",[83,30.532]],[\"comment/395\",[]],[\"name/396\",[84,30.532]],[\"comment/396\",[]],[\"name/397\",[22,28.342]],[\"comment/397\",[]],[\"name/398\",[256,58.464]],[\"comment/398\",[]],[\"name/399\",[21,25.506]],[\"comment/399\",[]],[\"name/400\",[244,45.472]],[\"comment/400\",[]],[\"name/401\",[78,29.377]],[\"comment/401\",[]],[\"name/402\",[82,30.532]],[\"comment/402\",[]],[\"name/403\",[83,30.532]],[\"comment/403\",[]],[\"name/404\",[84,30.532]],[\"comment/404\",[]],[\"name/405\",[22,28.342]],[\"comment/405\",[]],[\"name/406\",[257,58.464]],[\"comment/406\",[]],[\"name/407\",[21,25.506]],[\"comment/407\",[]],[\"name/408\",[244,45.472]],[\"comment/408\",[]],[\"name/409\",[78,29.377]],[\"comment/409\",[]],[\"name/410\",[82,30.532]],[\"comment/410\",[]],[\"name/411\",[83,30.532]],[\"comment/411\",[]],[\"name/412\",[84,30.532]],[\"comment/412\",[]],[\"name/413\",[22,28.342]],[\"comment/413\",[]],[\"name/414\",[258,58.464]],[\"comment/414\",[]],[\"name/415\",[21,25.506]],[\"comment/415\",[]],[\"name/416\",[259,58.464]],[\"comment/416\",[]],[\"name/417\",[260,58.464]],[\"comment/417\",[]],[\"name/418\",[78,29.377]],[\"comment/418\",[]],[\"name/419\",[82,30.532]],[\"comment/419\",[]],[\"name/420\",[83,30.532]],[\"comment/420\",[]],[\"name/421\",[84,30.532]],[\"comment/421\",[]],[\"name/422\",[22,28.342]],[\"comment/422\",[]],[\"name/423\",[261,58.464]],[\"comment/423\",[]],[\"name/424\",[21,25.506]],[\"comment/424\",[]],[\"name/425\",[250,49.991]],[\"comment/425\",[]],[\"name/426\",[246,47.478]],[\"comment/426\",[]],[\"name/427\",[78,29.377]],[\"comment/427\",[]],[\"name/428\",[82,30.532]],[\"comment/428\",[]],[\"name/429\",[83,30.532]],[\"comment/429\",[]],[\"name/430\",[84,30.532]],[\"comment/430\",[]],[\"name/431\",[22,28.342]],[\"comment/431\",[]],[\"name/432\",[262,58.464]],[\"comment/432\",[]],[\"name/433\",[21,25.506]],[\"comment/433\",[]],[\"name/434\",[86,47.478]],[\"comment/434\",[]],[\"name/435\",[200,42.37]],[\"comment/435\",[]],[\"name/436\",[94,45.472]],[\"comment/436\",[]],[\"name/437\",[78,29.377]],[\"comment/437\",[]],[\"name/438\",[82,30.532]],[\"comment/438\",[]],[\"name/439\",[83,30.532]],[\"comment/439\",[]],[\"name/440\",[84,30.532]],[\"comment/440\",[]],[\"name/441\",[22,28.342]],[\"comment/441\",[]],[\"name/442\",[263,58.464]],[\"comment/442\",[]],[\"name/443\",[21,25.506]],[\"comment/443\",[]],[\"name/444\",[264,58.464]],[\"comment/444\",[]],[\"name/445\",[200,42.37]],[\"comment/445\",[]],[\"name/446\",[78,29.377]],[\"comment/446\",[]],[\"name/447\",[265,58.464]],[\"comment/447\",[]],[\"name/448\",[48,37.262]],[\"comment/448\",[]],[\"name/449\",[82,30.532]],[\"comment/449\",[]],[\"name/450\",[83,30.532]],[\"comment/450\",[]],[\"name/451\",[84,30.532]],[\"comment/451\",[]],[\"name/452\",[22,28.342]],[\"comment/452\",[]],[\"name/453\",[266,58.464]],[\"comment/453\",[]],[\"name/454\",[21,25.506]],[\"comment/454\",[]],[\"name/455\",[164,53.356]],[\"comment/455\",[]],[\"name/456\",[78,29.377]],[\"comment/456\",[]],[\"name/457\",[82,30.532]],[\"comment/457\",[]],[\"name/458\",[83,30.532]],[\"comment/458\",[]],[\"name/459\",[84,30.532]],[\"comment/459\",[]],[\"name/460\",[22,28.342]],[\"comment/460\",[]],[\"name/461\",[267,58.464]],[\"comment/461\",[]],[\"name/462\",[21,25.506]],[\"comment/462\",[]],[\"name/463\",[244,45.472]],[\"comment/463\",[]],[\"name/464\",[86,47.478]],[\"comment/464\",[]],[\"name/465\",[200,42.37]],[\"comment/465\",[]],[\"name/466\",[245,53.356]],[\"comment/466\",[]],[\"name/467\",[78,29.377]],[\"comment/467\",[]],[\"name/468\",[82,30.532]],[\"comment/468\",[]],[\"name/469\",[83,30.532]],[\"comment/469\",[]],[\"name/470\",[84,30.532]],[\"comment/470\",[]],[\"name/471\",[22,28.342]],[\"comment/471\",[]],[\"name/472\",[268,58.464]],[\"comment/472\",[]],[\"name/473\",[21,25.506]],[\"comment/473\",[]],[\"name/474\",[250,49.991]],[\"comment/474\",[]],[\"name/475\",[246,47.478]],[\"comment/475\",[]],[\"name/476\",[78,29.377]],[\"comment/476\",[]],[\"name/477\",[82,30.532]],[\"comment/477\",[]],[\"name/478\",[83,30.532]],[\"comment/478\",[]],[\"name/479\",[84,30.532]],[\"comment/479\",[]],[\"name/480\",[22,28.342]],[\"comment/480\",[]],[\"name/481\",[269,58.464]],[\"comment/481\",[]],[\"name/482\",[21,25.506]],[\"comment/482\",[]],[\"name/483\",[78,29.377]],[\"comment/483\",[]],[\"name/484\",[82,30.532]],[\"comment/484\",[]],[\"name/485\",[83,30.532]],[\"comment/485\",[]],[\"name/486\",[84,30.532]],[\"comment/486\",[]],[\"name/487\",[22,28.342]],[\"comment/487\",[]],[\"name/488\",[270,58.464]],[\"comment/488\",[]],[\"name/489\",[21,25.506]],[\"comment/489\",[]],[\"name/490\",[78,29.377]],[\"comment/490\",[]],[\"name/491\",[82,30.532]],[\"comment/491\",[]],[\"name/492\",[83,30.532]],[\"comment/492\",[]],[\"name/493\",[84,30.532]],[\"comment/493\",[]],[\"name/494\",[22,28.342]],[\"comment/494\",[]],[\"name/495\",[271,58.464]],[\"comment/495\",[]],[\"name/496\",[21,25.506]],[\"comment/496\",[]],[\"name/497\",[73,43.801]],[\"comment/497\",[]],[\"name/498\",[78,29.377]],[\"comment/498\",[]],[\"name/499\",[82,30.532]],[\"comment/499\",[]],[\"name/500\",[83,30.532]],[\"comment/500\",[]],[\"name/501\",[84,30.532]],[\"comment/501\",[]],[\"name/502\",[22,28.342]],[\"comment/502\",[]],[\"name/503\",[272,58.464]],[\"comment/503\",[]],[\"name/504\",[21,25.506]],[\"comment/504\",[]],[\"name/505\",[200,42.37]],[\"comment/505\",[]],[\"name/506\",[78,29.377]],[\"comment/506\",[]],[\"name/507\",[82,30.532]],[\"comment/507\",[]],[\"name/508\",[83,30.532]],[\"comment/508\",[]],[\"name/509\",[84,30.532]],[\"comment/509\",[]],[\"name/510\",[22,28.342]],[\"comment/510\",[]],[\"name/511\",[273,58.464]],[\"comment/511\",[]],[\"name/512\",[21,25.506]],[\"comment/512\",[]],[\"name/513\",[78,29.377]],[\"comment/513\",[]],[\"name/514\",[82,30.532]],[\"comment/514\",[]],[\"name/515\",[83,30.532]],[\"comment/515\",[]],[\"name/516\",[84,30.532]],[\"comment/516\",[]],[\"name/517\",[22,28.342]],[\"comment/517\",[]]],\"invertedIndex\":[[\"__type\",{\"_index\":48,\"name\":{\"73\":{},\"271\":{},\"282\":{},\"284\":{},\"286\":{},\"288\":{},\"290\":{},\"292\":{},\"295\":{},\"297\":{},\"329\":{},\"448\":{}},\"comment\":{}}],[\"_evalvalue\",{\"_index\":234,\"name\":{\"322\":{}},\"comment\":{}}],[\"_get\",{\"_index\":64,\"name\":{\"89\":{}},\"comment\":{}}],[\"_getfromscope\",{\"_index\":66,\"name\":{\"91\":{}},\"comment\":{}}],[\"_parseandrender\",{\"_index\":222,\"name\":{\"310\":{}},\"comment\":{}}],[\"_parsefile\",{\"_index\":227,\"name\":{\"315\":{}},\"comment\":{}}],[\"_parselayoutfile\",{\"_index\":226,\"name\":{\"314\":{}},\"comment\":{}}],[\"_parsepartialfile\",{\"_index\":225,\"name\":{\"313\":{}},\"comment\":{}}],[\"_render\",{\"_index\":219,\"name\":{\"306\":{}},\"comment\":{}}],[\"_renderfile\",{\"_index\":230,\"name\":{\"318\":{}},\"comment\":{}}],[\"advance\",{\"_index\":147,\"name\":{\"212\":{}},\"comment\":{}}],[\"args\",{\"_index\":86,\"name\":{\"122\":{},\"147\":{},\"434\":{},\"464\":{}},\"comment\":{}}],[\"assert\",{\"_index\":18,\"name\":{\"18\":{},\"203\":{}},\"comment\":{}}],[\"assertionerror\",{\"_index\":30,\"name\":{\"50\":{}},\"comment\":{}}],[\"assigntag\",{\"_index\":241,\"name\":{\"331\":{}},\"comment\":{}}],[\"begin\",{\"_index\":92,\"name\":{\"136\":{},\"154\":{}},\"comment\":{}}],[\"block\",{\"_index\":264,\"name\":{\"444\":{}},\"comment\":{}}],[\"blocktag\",{\"_index\":263,\"name\":{\"442\":{}},\"comment\":{}}],[\"bottom\",{\"_index\":69,\"name\":{\"94\":{}},\"comment\":{}}],[\"branches\",{\"_index\":250,\"name\":{\"365\":{},\"425\":{},\"474\":{}},\"comment\":{}}],[\"breaktag\",{\"_index\":269,\"name\":{\"481\":{}},\"comment\":{}}],[\"buffer\",{\"_index\":35,\"name\":{\"57\":{}},\"comment\":{}}],[\"cache\",{\"_index\":180,\"name\":{\"248\":{}},\"comment\":{}}],[\"candidates\",{\"_index\":259,\"name\":{\"416\":{}},\"comment\":{}}],[\"capturetag\",{\"_index\":247,\"name\":{\"352\":{}},\"comment\":{}}],[\"casetag\",{\"_index\":249,\"name\":{\"362\":{}},\"comment\":{}}],[\"catchallerrors\",{\"_index\":184,\"name\":{\"253\":{}},\"comment\":{}}],[\"collection\",{\"_index\":245,\"name\":{\"343\":{},\"466\":{}},\"comment\":{}}],[\"commenttag\",{\"_index\":251,\"name\":{\"372\":{}},\"comment\":{}}],[\"constructor\",{\"_index\":21,\"name\":{\"21\":{},\"28\":{},\"34\":{},\"40\":{},\"46\":{},\"51\":{},\"53\":{},\"63\":{},\"70\":{},\"99\":{},\"105\":{},\"113\":{},\"120\":{},\"128\":{},\"133\":{},\"144\":{},\"177\":{},\"230\":{},\"299\":{},\"332\":{},\"341\":{},\"353\":{},\"363\":{},\"373\":{},\"380\":{},\"389\":{},\"399\":{},\"407\":{},\"415\":{},\"424\":{},\"433\":{},\"443\":{},\"454\":{},\"462\":{},\"473\":{},\"482\":{},\"489\":{},\"496\":{},\"504\":{},\"512\":{}},\"comment\":{}}],[\"contains\",{\"_index\":210,\"name\":{\"291\":{}},\"comment\":{}}],[\"content\",{\"_index\":103,\"name\":{\"151\":{}},\"comment\":{}}],[\"contentrange\",{\"_index\":102,\"name\":{\"150\":{}},\"comment\":{}}],[\"context\",{\"_index\":23,\"name\":{\"23\":{},\"30\":{},\"36\":{},\"42\":{},\"48\":{},\"69\":{}},\"comment\":{}}],[\"continuetag\",{\"_index\":270,\"name\":{\"488\":{}},\"comment\":{}}],[\"createtrie\",{\"_index\":14,\"name\":{\"14\":{}},\"comment\":{}}],[\"currentfile\",{\"_index\":255,\"name\":{\"391\":{}},\"comment\":{}}],[\"cycletag\",{\"_index\":258,\"name\":{\"414\":{}},\"comment\":{}}],[\"dateformat\",{\"_index\":187,\"name\":{\"257\":{}},\"comment\":{}}],[\"decrementtag\",{\"_index\":256,\"name\":{\"398\":{}},\"comment\":{}}],[\"defaultoperators\",{\"_index\":36,\"name\":{\"58\":{}},\"comment\":{}}],[\"defaultoptions\",{\"_index\":172,\"name\":{\"240\":{}},\"comment\":{}}],[\"delimited\",{\"_index\":115,\"name\":{\"175\":{}},\"comment\":{}}],[\"dirname\",{\"_index\":212,\"name\":{\"294\":{}},\"comment\":{}}],[\"drop\",{\"_index\":31,\"name\":{\"52\":{}},\"comment\":{}}],[\"dynamicpartials\",{\"_index\":182,\"name\":{\"250\":{}},\"comment\":{}}],[\"echotag\",{\"_index\":271,\"name\":{\"495\":{}},\"comment\":{}}],[\"elsetemplates\",{\"_index\":246,\"name\":{\"346\":{},\"366\":{},\"426\":{},\"475\":{}},\"comment\":{}}],[\"emitter\",{\"_index\":33,\"name\":{\"55\":{}},\"comment\":{}}],[\"end\",{\"_index\":93,\"name\":{\"137\":{},\"155\":{},\"213\":{}},\"comment\":{}}],[\"environments\",{\"_index\":49,\"name\":{\"74\":{}},\"comment\":{}}],[\"error\",{\"_index\":138,\"name\":{\"202\":{}},\"comment\":{}}],[\"evalquotedtoken\",{\"_index\":39,\"name\":{\"61\":{}},\"comment\":{}}],[\"evaltoken\",{\"_index\":38,\"name\":{\"60\":{}},\"comment\":{}}],[\"evaluate\",{\"_index\":42,\"name\":{\"65\":{}},\"comment\":{}}],[\"evalvalue\",{\"_index\":235,\"name\":{\"323\":{}},\"comment\":{}}],[\"evalvaluesync\",{\"_index\":236,\"name\":{\"324\":{}},\"comment\":{}}],[\"exists\",{\"_index\":205,\"name\":{\"281\":{}},\"comment\":{}}],[\"existssync\",{\"_index\":206,\"name\":{\"283\":{}},\"comment\":{}}],[\"express\",{\"_index\":240,\"name\":{\"328\":{}},\"comment\":{}}],[\"expression\",{\"_index\":40,\"name\":{\"62\":{}},\"comment\":{}}],[\"extname\",{\"_index\":179,\"name\":{\"247\":{}},\"comment\":{}}],[\"fallback\",{\"_index\":213,\"name\":{\"296\":{}},\"comment\":{}}],[\"file\",{\"_index\":94,\"name\":{\"138\":{},\"156\":{},\"184\":{},\"390\":{},\"436\":{}},\"comment\":{}}],[\"filter\",{\"_index\":85,\"name\":{\"119\":{},\"167\":{}},\"comment\":{}}],[\"filteredvalue\",{\"_index\":114,\"name\":{\"174\":{}},\"comment\":{}}],[\"filterimploptions\",{\"_index\":80,\"name\":{\"111\":{}},\"comment\":{}}],[\"filters\",{\"_index\":74,\"name\":{\"100\":{},\"239\":{},\"303\":{}},\"comment\":{}}],[\"findscope\",{\"_index\":71,\"name\":{\"96\":{}},\"comment\":{}}],[\"fortag\",{\"_index\":243,\"name\":{\"340\":{}},\"comment\":{}}],[\"fs\",{\"_index\":199,\"name\":{\"269\":{},\"280\":{}},\"comment\":{}}],[\"get\",{\"_index\":62,\"name\":{\"87\":{}},\"comment\":{}}],[\"getall\",{\"_index\":61,\"name\":{\"86\":{}},\"comment\":{}}],[\"getblockrender\",{\"_index\":265,\"name\":{\"447\":{}},\"comment\":{}}],[\"getfilter\",{\"_index\":76,\"name\":{\"103\":{}},\"comment\":{}}],[\"getfromscope\",{\"_index\":65,\"name\":{\"90\":{}},\"comment\":{}}],[\"getposition\",{\"_index\":96,\"name\":{\"140\":{},\"158\":{}},\"comment\":{}}],[\"getregister\",{\"_index\":57,\"name\":{\"82\":{}},\"comment\":{}}],[\"getsync\",{\"_index\":63,\"name\":{\"88\":{}},\"comment\":{}}],[\"gettext\",{\"_index\":95,\"name\":{\"139\":{},\"157\":{}},\"comment\":{}}],[\"globals\",{\"_index\":50,\"name\":{\"75\":{},\"272\":{}},\"comment\":{}}],[\"greedy\",{\"_index\":198,\"name\":{\"268\":{}},\"comment\":{}}],[\"group\",{\"_index\":260,\"name\":{\"417\":{}},\"comment\":{}}],[\"handler\",{\"_index\":88,\"name\":{\"124\":{}},\"comment\":{}}],[\"handlers\",{\"_index\":165,\"name\":{\"232\":{}},\"comment\":{}}],[\"hash\",{\"_index\":77,\"name\":{\"104\":{},\"106\":{},\"168\":{},\"344\":{},\"382\":{},\"392\":{}},\"comment\":{}}],[\"html\",{\"_index\":108,\"name\":{\"166\":{}},\"comment\":{}}],[\"iftag\",{\"_index\":261,\"name\":{\"423\":{}},\"comment\":{}}],[\"includetag\",{\"_index\":252,\"name\":{\"379\":{}},\"comment\":{}}],[\"incrementtag\",{\"_index\":257,\"name\":{\"406\":{}},\"comment\":{}}],[\"initial\",{\"_index\":75,\"name\":{\"101\":{}},\"comment\":{}}],[\"inlinecommenttag\",{\"_index\":273,\"name\":{\"511\":{}},\"comment\":{}}],[\"input\",{\"_index\":91,\"name\":{\"135\":{},\"153\":{},\"183\":{}},\"comment\":{}}],[\"is\",{\"_index\":20,\"name\":{\"20\":{},\"27\":{},\"33\":{},\"39\":{},\"45\":{}},\"comment\":{}}],[\"isdelimitedtoken\",{\"_index\":2,\"name\":{\"2\":{}},\"comment\":{}}],[\"isfalsy\",{\"_index\":44,\"name\":{\"67\":{}},\"comment\":{}}],[\"ishtmltoken\",{\"_index\":4,\"name\":{\"4\":{}},\"comment\":{}}],[\"isliteraltoken\",{\"_index\":8,\"name\":{\"8\":{}},\"comment\":{}}],[\"isnumbertoken\",{\"_index\":9,\"name\":{\"9\":{}},\"comment\":{}}],[\"isoperatortoken\",{\"_index\":3,\"name\":{\"3\":{}},\"comment\":{}}],[\"isoutputtoken\",{\"_index\":5,\"name\":{\"5\":{}},\"comment\":{}}],[\"ispropertyaccesstoken\",{\"_index\":10,\"name\":{\"10\":{}},\"comment\":{}}],[\"isquotedtoken\",{\"_index\":7,\"name\":{\"7\":{}},\"comment\":{}}],[\"israngetoken\",{\"_index\":12,\"name\":{\"12\":{}},\"comment\":{}}],[\"istagtoken\",{\"_index\":6,\"name\":{\"6\":{}},\"comment\":{}}],[\"istruthy\",{\"_index\":45,\"name\":{\"68\":{}},\"comment\":{}}],[\"iswordtoken\",{\"_index\":11,\"name\":{\"11\":{}},\"comment\":{}}],[\"jekyllinclude\",{\"_index\":178,\"name\":{\"246\":{}},\"comment\":{}}],[\"jstruthy\",{\"_index\":181,\"name\":{\"249\":{}},\"comment\":{}}],[\"keepoutputtype\",{\"_index\":201,\"name\":{\"273\":{}},\"comment\":{}}],[\"key\",{\"_index\":242,\"name\":{\"333\":{}},\"comment\":{}}],[\"kind\",{\"_index\":90,\"name\":{\"134\":{},\"152\":{}},\"comment\":{}}],[\"layouts\",{\"_index\":176,\"name\":{\"244\":{}},\"comment\":{}}],[\"layouttag\",{\"_index\":262,\"name\":{\"432\":{}},\"comment\":{}}],[\"lenientif\",{\"_index\":185,\"name\":{\"255\":{}},\"comment\":{}}],[\"liquid\",{\"_index\":83,\"name\":{\"115\":{},\"125\":{},\"298\":{},\"337\":{},\"349\":{},\"359\":{},\"369\":{},\"376\":{},\"385\":{},\"395\":{},\"403\":{},\"411\":{},\"420\":{},\"429\":{},\"439\":{},\"450\":{},\"458\":{},\"469\":{},\"478\":{},\"485\":{},\"492\":{},\"500\":{},\"508\":{},\"515\":{}},\"comment\":{}}],[\"liquiderror\",{\"_index\":19,\"name\":{\"19\":{}},\"comment\":{}}],[\"liquidmethodmissing\",{\"_index\":32,\"name\":{\"54\":{}},\"comment\":{}}],[\"liquidoptions\",{\"_index\":173,\"name\":{\"241\":{}},\"comment\":{}}],[\"liquidtag\",{\"_index\":272,\"name\":{\"503\":{}},\"comment\":{}}],[\"literal\",{\"_index\":107,\"name\":{\"163\":{}},\"comment\":{}}],[\"literaltrie\",{\"_index\":120,\"name\":{\"182\":{}},\"comment\":{}}],[\"locale\",{\"_index\":188,\"name\":{\"258\":{}},\"comment\":{}}],[\"match\",{\"_index\":158,\"name\":{\"224\":{}},\"comment\":{}}],[\"matchtrie\",{\"_index\":124,\"name\":{\"188\":{}},\"comment\":{}}],[\"memorylimit\",{\"_index\":55,\"name\":{\"80\":{},\"279\":{}},\"comment\":{}}],[\"n\",{\"_index\":117,\"name\":{\"179\":{}},\"comment\":{}}],[\"name\",{\"_index\":82,\"name\":{\"114\":{},\"121\":{},\"145\":{},\"336\":{},\"348\":{},\"358\":{},\"368\":{},\"375\":{},\"384\":{},\"394\":{},\"402\":{},\"410\":{},\"419\":{},\"428\":{},\"438\":{},\"449\":{},\"457\":{},\"468\":{},\"477\":{},\"484\":{},\"491\":{},\"499\":{},\"507\":{},\"514\":{}},\"comment\":{}}],[\"number\",{\"_index\":106,\"name\":{\"162\":{}},\"comment\":{}}],[\"on\",{\"_index\":168,\"name\":{\"235\":{}},\"comment\":{}}],[\"operator\",{\"_index\":113,\"name\":{\"173\":{}},\"comment\":{}}],[\"operators\",{\"_index\":37,\"name\":{\"59\":{},\"275\":{}},\"comment\":{}}],[\"options\",{\"_index\":214,\"name\":{\"300\":{}},\"comment\":{}}],[\"optrie\",{\"_index\":119,\"name\":{\"181\":{}},\"comment\":{}}],[\"opts\",{\"_index\":52,\"name\":{\"77\":{}},\"comment\":{}}],[\"orderedfilterparameters\",{\"_index\":203,\"name\":{\"276\":{}},\"comment\":{}}],[\"originalerror\",{\"_index\":24,\"name\":{\"24\":{}},\"comment\":{}}],[\"output\",{\"_index\":89,\"name\":{\"127\":{},\"165\":{}},\"comment\":{}}],[\"outputdelimiterleft\",{\"_index\":195,\"name\":{\"265\":{}},\"comment\":{}}],[\"outputdelimiterright\",{\"_index\":196,\"name\":{\"266\":{}},\"comment\":{}}],[\"outputescape\",{\"_index\":202,\"name\":{\"274\":{}},\"comment\":{}}],[\"ownpropertyonly\",{\"_index\":54,\"name\":{\"79\":{},\"254\":{}},\"comment\":{}}],[\"p\",{\"_index\":116,\"name\":{\"178\":{}},\"comment\":{}}],[\"parse\",{\"_index\":218,\"name\":{\"305\":{}},\"comment\":{}}],[\"parseandrender\",{\"_index\":223,\"name\":{\"311\":{}},\"comment\":{}}],[\"parseandrendersync\",{\"_index\":224,\"name\":{\"312\":{}},\"comment\":{}}],[\"parseerror\",{\"_index\":26,\"name\":{\"26\":{}},\"comment\":{}}],[\"parsefile\",{\"_index\":228,\"name\":{\"316\":{}},\"comment\":{}}],[\"parsefilesync\",{\"_index\":229,\"name\":{\"317\":{}},\"comment\":{}}],[\"parselimit\",{\"_index\":204,\"name\":{\"277\":{}},\"comment\":{}}],[\"parser\",{\"_index\":216,\"name\":{\"302\":{}},\"comment\":{}}],[\"parsestream\",{\"_index\":163,\"name\":{\"229\":{}},\"comment\":{}}],[\"parsetoken\",{\"_index\":167,\"name\":{\"234\":{}},\"comment\":{}}],[\"partials\",{\"_index\":175,\"name\":{\"243\":{}},\"comment\":{}}],[\"peek\",{\"_index\":161,\"name\":{\"227\":{}},\"comment\":{}}],[\"peektype\",{\"_index\":160,\"name\":{\"226\":{}},\"comment\":{}}],[\"plugin\",{\"_index\":239,\"name\":{\"327\":{}},\"comment\":{}}],[\"pop\",{\"_index\":68,\"name\":{\"93\":{}},\"comment\":{}}],[\"postfix\",{\"_index\":41,\"name\":{\"64\":{}},\"comment\":{}}],[\"preservetimezones\",{\"_index\":197,\"name\":{\"267\":{}},\"comment\":{}}],[\"propertyaccess\",{\"_index\":109,\"name\":{\"169\":{}},\"comment\":{}}],[\"push\",{\"_index\":67,\"name\":{\"92\":{}},\"comment\":{}}],[\"quoted\",{\"_index\":112,\"name\":{\"172\":{}},\"comment\":{}}],[\"range\",{\"_index\":111,\"name\":{\"171\":{}},\"comment\":{}}],[\"raw\",{\"_index\":87,\"name\":{\"123\":{}},\"comment\":{}}],[\"rawbeginat\",{\"_index\":118,\"name\":{\"180\":{}},\"comment\":{}}],[\"rawtag\",{\"_index\":266,\"name\":{\"453\":{}},\"comment\":{}}],[\"readendraworrawcontent\",{\"_index\":135,\"name\":{\"199\":{}},\"comment\":{}}],[\"readexpression\",{\"_index\":121,\"name\":{\"185\":{}},\"comment\":{}}],[\"readexpressiontokens\",{\"_index\":122,\"name\":{\"186\":{}},\"comment\":{}}],[\"readfile\",{\"_index\":207,\"name\":{\"285\":{}},\"comment\":{}}],[\"readfilenametemplate\",{\"_index\":157,\"name\":{\"223\":{}},\"comment\":{}}],[\"readfilesync\",{\"_index\":208,\"name\":{\"287\":{}},\"comment\":{}}],[\"readfilter\",{\"_index\":127,\"name\":{\"191\":{}},\"comment\":{}}],[\"readfilterarg\",{\"_index\":128,\"name\":{\"192\":{}},\"comment\":{}}],[\"readfilteredvalue\",{\"_index\":125,\"name\":{\"189\":{}},\"comment\":{}}],[\"readfilters\",{\"_index\":126,\"name\":{\"190\":{}},\"comment\":{}}],[\"readhash\",{\"_index\":145,\"name\":{\"210\":{}},\"comment\":{}}],[\"readhashes\",{\"_index\":144,\"name\":{\"209\":{}},\"comment\":{}}],[\"readhtmltoken\",{\"_index\":131,\"name\":{\"195\":{}},\"comment\":{}}],[\"readidentifier\",{\"_index\":141,\"name\":{\"206\":{}},\"comment\":{}}],[\"readliquidtagtoken\",{\"_index\":137,\"name\":{\"201\":{}},\"comment\":{}}],[\"readliquidtagtokens\",{\"_index\":136,\"name\":{\"200\":{}},\"comment\":{}}],[\"readliteral\",{\"_index\":153,\"name\":{\"219\":{}},\"comment\":{}}],[\"readnonemptyidentifier\",{\"_index\":142,\"name\":{\"207\":{}},\"comment\":{}}],[\"readnumber\",{\"_index\":152,\"name\":{\"218\":{}},\"comment\":{}}],[\"readoperator\",{\"_index\":123,\"name\":{\"187\":{}},\"comment\":{}}],[\"readoutputtoken\",{\"_index\":134,\"name\":{\"198\":{}},\"comment\":{}}],[\"readproperties\",{\"_index\":151,\"name\":{\"217\":{}},\"comment\":{}}],[\"readquoted\",{\"_index\":156,\"name\":{\"222\":{}},\"comment\":{}}],[\"readrange\",{\"_index\":154,\"name\":{\"220\":{}},\"comment\":{}}],[\"readscopevalue\",{\"_index\":150,\"name\":{\"216\":{}},\"comment\":{}}],[\"readtagname\",{\"_index\":143,\"name\":{\"208\":{}},\"comment\":{}}],[\"readtagtoken\",{\"_index\":132,\"name\":{\"196\":{}},\"comment\":{}}],[\"readto\",{\"_index\":148,\"name\":{\"214\":{}},\"comment\":{}}],[\"readtodelimiter\",{\"_index\":133,\"name\":{\"197\":{}},\"comment\":{}}],[\"readtopleveltoken\",{\"_index\":130,\"name\":{\"194\":{}},\"comment\":{}}],[\"readtopleveltokens\",{\"_index\":129,\"name\":{\"193\":{}},\"comment\":{}}],[\"readvalue\",{\"_index\":149,\"name\":{\"215\":{}},\"comment\":{}}],[\"readvalueorthrow\",{\"_index\":155,\"name\":{\"221\":{}},\"comment\":{}}],[\"readvariablename\",{\"_index\":248,\"name\":{\"357\":{}},\"comment\":{}}],[\"readword\",{\"_index\":140,\"name\":{\"205\":{}},\"comment\":{}}],[\"registerfilter\",{\"_index\":237,\"name\":{\"325\":{}},\"comment\":{}}],[\"registers\",{\"_index\":47,\"name\":{\"72\":{}},\"comment\":{}}],[\"registertag\",{\"_index\":238,\"name\":{\"326\":{}},\"comment\":{}}],[\"relativereference\",{\"_index\":177,\"name\":{\"245\":{}},\"comment\":{}}],[\"remaining\",{\"_index\":146,\"name\":{\"211\":{}},\"comment\":{}}],[\"render\",{\"_index\":78,\"name\":{\"107\":{},\"110\":{},\"117\":{},\"126\":{},\"130\":{},\"307\":{},\"335\":{},\"347\":{},\"356\":{},\"367\":{},\"374\":{},\"383\":{},\"393\":{},\"401\":{},\"409\":{},\"418\":{},\"427\":{},\"437\":{},\"446\":{},\"456\":{},\"467\":{},\"476\":{},\"483\":{},\"490\":{},\"498\":{},\"506\":{},\"513\":{}},\"comment\":{}}],[\"renderer\",{\"_index\":215,\"name\":{\"301\":{}},\"comment\":{}}],[\"rendererror\",{\"_index\":27,\"name\":{\"32\":{}},\"comment\":{}}],[\"renderfile\",{\"_index\":231,\"name\":{\"319\":{}},\"comment\":{}}],[\"renderfilesync\",{\"_index\":232,\"name\":{\"320\":{}},\"comment\":{}}],[\"renderfiletonodestream\",{\"_index\":233,\"name\":{\"321\":{}},\"comment\":{}}],[\"renderlimit\",{\"_index\":56,\"name\":{\"81\":{},\"278\":{}},\"comment\":{}}],[\"rendersync\",{\"_index\":220,\"name\":{\"308\":{}},\"comment\":{}}],[\"rendertag\",{\"_index\":254,\"name\":{\"388\":{}},\"comment\":{}}],[\"rendertonodestream\",{\"_index\":221,\"name\":{\"309\":{}},\"comment\":{}}],[\"resolve\",{\"_index\":209,\"name\":{\"289\":{}},\"comment\":{}}],[\"restoreregister\",{\"_index\":60,\"name\":{\"85\":{}},\"comment\":{}}],[\"rmatch\",{\"_index\":159,\"name\":{\"225\":{}},\"comment\":{}}],[\"root\",{\"_index\":174,\"name\":{\"242\":{}},\"comment\":{}}],[\"saveregister\",{\"_index\":59,\"name\":{\"84\":{}},\"comment\":{}}],[\"scope\",{\"_index\":72,\"name\":{\"97\":{}},\"comment\":{}}],[\"scopes\",{\"_index\":46,\"name\":{\"71\":{}},\"comment\":{}}],[\"sep\",{\"_index\":211,\"name\":{\"293\":{}},\"comment\":{}}],[\"setregister\",{\"_index\":58,\"name\":{\"83\":{}},\"comment\":{}}],[\"size\",{\"_index\":97,\"name\":{\"141\":{},\"159\":{}},\"comment\":{}}],[\"skipblank\",{\"_index\":162,\"name\":{\"228\":{}},\"comment\":{}}],[\"snapshot\",{\"_index\":139,\"name\":{\"204\":{}},\"comment\":{}}],[\"spawn\",{\"_index\":70,\"name\":{\"95\":{}},\"comment\":{}}],[\"start\",{\"_index\":170,\"name\":{\"237\":{}},\"comment\":{}}],[\"stop\",{\"_index\":171,\"name\":{\"238\":{}},\"comment\":{}}],[\"stoprequested\",{\"_index\":166,\"name\":{\"233\":{}},\"comment\":{}}],[\"strictfilters\",{\"_index\":183,\"name\":{\"251\":{}},\"comment\":{}}],[\"strictvariables\",{\"_index\":53,\"name\":{\"78\":{},\"252\":{}},\"comment\":{}}],[\"sync\",{\"_index\":51,\"name\":{\"76\":{}},\"comment\":{}}],[\"tablerowtag\",{\"_index\":267,\"name\":{\"461\":{}},\"comment\":{}}],[\"tag\",{\"_index\":81,\"name\":{\"112\":{},\"164\":{}},\"comment\":{}}],[\"tagdelimiterleft\",{\"_index\":193,\"name\":{\"263\":{}},\"comment\":{}}],[\"tagdelimiterright\",{\"_index\":194,\"name\":{\"264\":{}},\"comment\":{}}],[\"tags\",{\"_index\":217,\"name\":{\"304\":{},\"330\":{}},\"comment\":{}}],[\"tagtoken\",{\"_index\":99,\"name\":{\"143\":{}},\"comment\":{}}],[\"template\",{\"_index\":79,\"name\":{\"108\":{}},\"comment\":{}}],[\"templates\",{\"_index\":200,\"name\":{\"270\":{},\"345\":{},\"355\":{},\"435\":{},\"445\":{},\"465\":{},\"505\":{}},\"comment\":{}}],[\"timezoneoffset\",{\"_index\":186,\"name\":{\"256\":{}},\"comment\":{}}],[\"token\",{\"_index\":22,\"name\":{\"22\":{},\"29\":{},\"35\":{},\"41\":{},\"47\":{},\"109\":{},\"118\":{},\"131\":{},\"132\":{},\"339\":{},\"351\":{},\"361\":{},\"371\":{},\"378\":{},\"387\":{},\"397\":{},\"405\":{},\"413\":{},\"422\":{},\"431\":{},\"441\":{},\"452\":{},\"460\":{},\"471\":{},\"480\":{},\"487\":{},\"494\":{},\"502\":{},\"510\":{},\"517\":{}},\"comment\":{}}],[\"tokenizationerror\",{\"_index\":29,\"name\":{\"44\":{}},\"comment\":{}}],[\"tokenizer\",{\"_index\":84,\"name\":{\"116\":{},\"146\":{},\"176\":{},\"338\":{},\"350\":{},\"360\":{},\"370\":{},\"377\":{},\"386\":{},\"396\":{},\"404\":{},\"412\":{},\"421\":{},\"430\":{},\"440\":{},\"451\":{},\"459\":{},\"470\":{},\"479\":{},\"486\":{},\"493\":{},\"501\":{},\"509\":{},\"516\":{}},\"comment\":{}}],[\"tokenkind\",{\"_index\":105,\"name\":{\"161\":{}},\"comment\":{}}],[\"tokens\",{\"_index\":164,\"name\":{\"231\":{},\"455\":{}},\"comment\":{}}],[\"topleveltoken\",{\"_index\":98,\"name\":{\"142\":{}},\"comment\":{}}],[\"topromise\",{\"_index\":16,\"name\":{\"16\":{}},\"comment\":{}}],[\"tovalue\",{\"_index\":13,\"name\":{\"13\":{}},\"comment\":{}}],[\"tovaluesync\",{\"_index\":17,\"name\":{\"17\":{}},\"comment\":{}}],[\"trie\",{\"_index\":15,\"name\":{\"15\":{}},\"comment\":{}}],[\"trigger\",{\"_index\":169,\"name\":{\"236\":{}},\"comment\":{}}],[\"trimleft\",{\"_index\":100,\"name\":{\"148\":{}},\"comment\":{}}],[\"trimoutputleft\",{\"_index\":192,\"name\":{\"262\":{}},\"comment\":{}}],[\"trimoutputright\",{\"_index\":191,\"name\":{\"261\":{}},\"comment\":{}}],[\"trimright\",{\"_index\":101,\"name\":{\"149\":{}},\"comment\":{}}],[\"trimtagleft\",{\"_index\":190,\"name\":{\"260\":{}},\"comment\":{}}],[\"trimtagright\",{\"_index\":189,\"name\":{\"259\":{}},\"comment\":{}}],[\"typeguards\",{\"_index\":1,\"name\":{\"1\":{}},\"comment\":{}}],[\"undefinedvariableerror\",{\"_index\":28,\"name\":{\"38\":{}},\"comment\":{}}],[\"unlesstag\",{\"_index\":268,\"name\":{\"472\":{}},\"comment\":{}}],[\"update\",{\"_index\":25,\"name\":{\"25\":{},\"31\":{},\"37\":{},\"43\":{},\"49\":{}},\"comment\":{}}],[\"valid\",{\"_index\":43,\"name\":{\"66\":{}},\"comment\":{}}],[\"value\",{\"_index\":73,\"name\":{\"98\":{},\"102\":{},\"129\":{},\"334\":{},\"364\":{},\"497\":{}},\"comment\":{}}],[\"valuetoken\",{\"_index\":104,\"name\":{\"160\":{}},\"comment\":{}}],[\"variable\",{\"_index\":244,\"name\":{\"342\":{},\"354\":{},\"400\":{},\"408\":{},\"463\":{}},\"comment\":{}}],[\"version\",{\"_index\":0,\"name\":{\"0\":{}},\"comment\":{}}],[\"withvar\",{\"_index\":253,\"name\":{\"381\":{}},\"comment\":{}}],[\"word\",{\"_index\":110,\"name\":{\"170\":{}},\"comment\":{}}],[\"write\",{\"_index\":34,\"name\":{\"56\":{}},\"comment\":{}}]],\"pipeline\":[]}}"); \ No newline at end of file +window.searchData = "data:application/octet-stream;base64,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"; \ No newline at end of file diff --git a/api/assets/style.css b/api/assets/style.css index 496e66f21..9d619a641 100644 --- a/api/assets/style.css +++ b/api/assets/style.css @@ -6,17 +6,38 @@ --light-color-background-warning: #e6e600; --light-color-icon-background: var(--light-color-background); --light-color-accent: #c5c7c9; + --light-color-active-menu-item: var(--light-color-accent); --light-color-text: #222; - --light-color-text-aside: #707070; - --light-color-link: #4da6ff; - --light-color-ts: #db1373; - --light-color-ts-interface: #139d2c; - --light-color-ts-enum: #9c891a; - --light-color-ts-class: #2484e5; + --light-color-text-aside: #6e6e6e; + --light-color-link: #1f70c2; + --light-color-focus-outline: #3584e4; + + --light-color-ts-keyword: #056bd6; + --light-color-ts-project: #b111c9; + --light-color-ts-module: var(--light-color-ts-project); + --light-color-ts-namespace: var(--light-color-ts-project); + --light-color-ts-enum: #7e6f15; + --light-color-ts-enum-member: var(--light-color-ts-enum); + --light-color-ts-variable: #4760ec; --light-color-ts-function: #572be7; - --light-color-ts-namespace: #b111c9; - --light-color-ts-private: #707070; - --light-color-ts-variable: #4d68ff; + --light-color-ts-class: #1f70c2; + --light-color-ts-interface: #108024; + --light-color-ts-constructor: var(--light-color-ts-class); + --light-color-ts-property: var(--light-color-ts-variable); + --light-color-ts-method: var(--light-color-ts-function); + --light-color-ts-call-signature: var(--light-color-ts-method); + --light-color-ts-index-signature: var(--light-color-ts-property); + --light-color-ts-constructor-signature: var(--light-color-ts-constructor); + --light-color-ts-parameter: var(--light-color-ts-variable); + /* type literal not included as links will never be generated to it */ + --light-color-ts-type-parameter: #a55c0e; + --light-color-ts-accessor: var(--light-color-ts-property); + --light-color-ts-get-signature: var(--light-color-ts-accessor); + --light-color-ts-set-signature: var(--light-color-ts-accessor); + --light-color-ts-type-alias: #d51270; + /* reference not included as links will be colored with the kind that it points to */ + --light-color-document: #000000; + --light-external-icon: url("data:image/svg+xml;utf8,"); --light-color-scheme: light; @@ -27,17 +48,38 @@ --dark-color-warning-text: #222; --dark-color-icon-background: var(--dark-color-background-secondary); --dark-color-accent: #9096a2; + --dark-color-active-menu-item: #5d5d6a; --dark-color-text: #f5f5f5; --dark-color-text-aside: #dddddd; --dark-color-link: #00aff4; - --dark-color-ts: #ff6492; - --dark-color-ts-interface: #6cff87; + --dark-color-focus-outline: #4c97f2; + + --dark-color-ts-keyword: #3399ff; + --dark-color-ts-project: #e358ff; + --dark-color-ts-module: var(--dark-color-ts-project); + --dark-color-ts-namespace: var(--dark-color-ts-project); --dark-color-ts-enum: #f4d93e; - --dark-color-ts-class: #61b0ff; - --dark-color-ts-function: #9772ff; - --dark-color-ts-namespace: #e14dff; - --dark-color-ts-private: #e2e2e2; - --dark-color-ts-variable: #4d68ff; + --dark-color-ts-enum-member: var(--dark-color-ts-enum); + --dark-color-ts-variable: #798dff; + --dark-color-ts-function: #a280ff; + --dark-color-ts-class: #8ac4ff; + --dark-color-ts-interface: #6cff87; + --dark-color-ts-constructor: var(--dark-color-ts-class); + --dark-color-ts-property: var(--dark-color-ts-variable); + --dark-color-ts-method: var(--dark-color-ts-function); + --dark-color-ts-call-signature: var(--dark-color-ts-method); + --dark-color-ts-index-signature: var(--dark-color-ts-property); + --dark-color-ts-constructor-signature: var(--dark-color-ts-constructor); + --dark-color-ts-parameter: var(--dark-color-ts-variable); + /* type literal not included as links will never be generated to it */ + --dark-color-ts-type-parameter: #e07d13; + --dark-color-ts-accessor: var(--dark-color-ts-property); + --dark-color-ts-get-signature: var(--dark-color-ts-accessor); + --dark-color-ts-set-signature: var(--dark-color-ts-accessor); + --dark-color-ts-type-alias: #ff6492; + /* reference not included as links will be colored with the kind that it points to */ + --dark-color-document: #ffffff; + --dark-external-icon: url("data:image/svg+xml;utf8,"); --dark-color-scheme: dark; } @@ -50,17 +92,37 @@ --color-warning-text: var(--light-color-warning-text); --color-icon-background: var(--light-color-icon-background); --color-accent: var(--light-color-accent); + --color-active-menu-item: var(--light-color-active-menu-item); --color-text: var(--light-color-text); --color-text-aside: var(--light-color-text-aside); --color-link: var(--light-color-link); - --color-ts: var(--light-color-ts); - --color-ts-interface: var(--light-color-ts-interface); - --color-ts-enum: var(--light-color-ts-enum); - --color-ts-class: var(--light-color-ts-class); - --color-ts-function: var(--light-color-ts-function); + --color-focus-outline: var(--light-color-focus-outline); + + --color-ts-keyword: var(--light-color-ts-keyword); + --color-ts-module: var(--light-color-ts-module); --color-ts-namespace: var(--light-color-ts-namespace); - --color-ts-private: var(--light-color-ts-private); + --color-ts-enum: var(--light-color-ts-enum); + --color-ts-enum-member: var(--light-color-ts-enum-member); --color-ts-variable: var(--light-color-ts-variable); + --color-ts-function: var(--light-color-ts-function); + --color-ts-class: var(--light-color-ts-class); + --color-ts-interface: var(--light-color-ts-interface); + --color-ts-constructor: var(--light-color-ts-constructor); + --color-ts-property: var(--light-color-ts-property); + --color-ts-method: var(--light-color-ts-method); + --color-ts-call-signature: var(--light-color-ts-call-signature); + --color-ts-index-signature: var(--light-color-ts-index-signature); + --color-ts-constructor-signature: var( + --light-color-ts-constructor-signature + ); + --color-ts-parameter: var(--light-color-ts-parameter); + --color-ts-type-parameter: var(--light-color-ts-type-parameter); + --color-ts-accessor: var(--light-color-ts-accessor); + --color-ts-get-signature: var(--light-color-ts-get-signature); + --color-ts-set-signature: var(--light-color-ts-set-signature); + --color-ts-type-alias: var(--light-color-ts-type-alias); + --color-document: var(--light-color-document); + --external-icon: var(--light-external-icon); --color-scheme: var(--light-color-scheme); } @@ -74,17 +136,37 @@ --color-warning-text: var(--dark-color-warning-text); --color-icon-background: var(--dark-color-icon-background); --color-accent: var(--dark-color-accent); + --color-active-menu-item: var(--dark-color-active-menu-item); --color-text: var(--dark-color-text); --color-text-aside: var(--dark-color-text-aside); --color-link: var(--dark-color-link); - --color-ts: var(--dark-color-ts); - --color-ts-interface: var(--dark-color-ts-interface); - --color-ts-enum: var(--dark-color-ts-enum); - --color-ts-class: var(--dark-color-ts-class); - --color-ts-function: var(--dark-color-ts-function); + --color-focus-outline: var(--dark-color-focus-outline); + + --color-ts-keyword: var(--dark-color-ts-keyword); + --color-ts-module: var(--dark-color-ts-module); --color-ts-namespace: var(--dark-color-ts-namespace); - --color-ts-private: var(--dark-color-ts-private); + --color-ts-enum: var(--dark-color-ts-enum); + --color-ts-enum-member: var(--dark-color-ts-enum-member); --color-ts-variable: var(--dark-color-ts-variable); + --color-ts-function: var(--dark-color-ts-function); + --color-ts-class: var(--dark-color-ts-class); + --color-ts-interface: var(--dark-color-ts-interface); + --color-ts-constructor: var(--dark-color-ts-constructor); + --color-ts-property: var(--dark-color-ts-property); + --color-ts-method: var(--dark-color-ts-method); + --color-ts-call-signature: var(--dark-color-ts-call-signature); + --color-ts-index-signature: var(--dark-color-ts-index-signature); + --color-ts-constructor-signature: var( + --dark-color-ts-constructor-signature + ); + --color-ts-parameter: var(--dark-color-ts-parameter); + --color-ts-type-parameter: var(--dark-color-ts-type-parameter); + --color-ts-accessor: var(--dark-color-ts-accessor); + --color-ts-get-signature: var(--dark-color-ts-get-signature); + --color-ts-set-signature: var(--dark-color-ts-set-signature); + --color-ts-type-alias: var(--dark-color-ts-type-alias); + --color-document: var(--dark-color-document); + --external-icon: var(--dark-external-icon); --color-scheme: var(--dark-color-scheme); } @@ -105,17 +187,37 @@ body { --color-warning-text: var(--light-color-warning-text); --color-icon-background: var(--light-color-icon-background); --color-accent: var(--light-color-accent); + --color-active-menu-item: var(--light-color-active-menu-item); --color-text: var(--light-color-text); --color-text-aside: var(--light-color-text-aside); --color-link: var(--light-color-link); - --color-ts: var(--light-color-ts); - --color-ts-interface: var(--light-color-ts-interface); - --color-ts-enum: var(--light-color-ts-enum); - --color-ts-class: var(--light-color-ts-class); - --color-ts-function: var(--light-color-ts-function); + --color-focus-outline: var(--light-color-focus-outline); + + --color-ts-keyword: var(--light-color-ts-keyword); + --color-ts-module: var(--light-color-ts-module); --color-ts-namespace: var(--light-color-ts-namespace); - --color-ts-private: var(--light-color-ts-private); + --color-ts-enum: var(--light-color-ts-enum); + --color-ts-enum-member: var(--light-color-ts-enum-member); --color-ts-variable: var(--light-color-ts-variable); + --color-ts-function: var(--light-color-ts-function); + --color-ts-class: var(--light-color-ts-class); + --color-ts-interface: var(--light-color-ts-interface); + --color-ts-constructor: var(--light-color-ts-constructor); + --color-ts-property: var(--light-color-ts-property); + --color-ts-method: var(--light-color-ts-method); + --color-ts-call-signature: var(--light-color-ts-call-signature); + --color-ts-index-signature: var(--light-color-ts-index-signature); + --color-ts-constructor-signature: var( + --light-color-ts-constructor-signature + ); + --color-ts-parameter: var(--light-color-ts-parameter); + --color-ts-type-parameter: var(--light-color-ts-type-parameter); + --color-ts-accessor: var(--light-color-ts-accessor); + --color-ts-get-signature: var(--light-color-ts-get-signature); + --color-ts-set-signature: var(--light-color-ts-set-signature); + --color-ts-type-alias: var(--light-color-ts-type-alias); + --color-document: var(--light-color-document); + --external-icon: var(--light-external-icon); --color-scheme: var(--light-color-scheme); } @@ -127,21 +229,46 @@ body { --color-warning-text: var(--dark-color-warning-text); --color-icon-background: var(--dark-color-icon-background); --color-accent: var(--dark-color-accent); + --color-active-menu-item: var(--dark-color-active-menu-item); --color-text: var(--dark-color-text); --color-text-aside: var(--dark-color-text-aside); --color-link: var(--dark-color-link); - --color-ts: var(--dark-color-ts); - --color-ts-interface: var(--dark-color-ts-interface); - --color-ts-enum: var(--dark-color-ts-enum); - --color-ts-class: var(--dark-color-ts-class); - --color-ts-function: var(--dark-color-ts-function); + --color-focus-outline: var(--dark-color-focus-outline); + + --color-ts-keyword: var(--dark-color-ts-keyword); + --color-ts-module: var(--dark-color-ts-module); --color-ts-namespace: var(--dark-color-ts-namespace); - --color-ts-private: var(--dark-color-ts-private); + --color-ts-enum: var(--dark-color-ts-enum); + --color-ts-enum-member: var(--dark-color-ts-enum-member); --color-ts-variable: var(--dark-color-ts-variable); + --color-ts-function: var(--dark-color-ts-function); + --color-ts-class: var(--dark-color-ts-class); + --color-ts-interface: var(--dark-color-ts-interface); + --color-ts-constructor: var(--dark-color-ts-constructor); + --color-ts-property: var(--dark-color-ts-property); + --color-ts-method: var(--dark-color-ts-method); + --color-ts-call-signature: var(--dark-color-ts-call-signature); + --color-ts-index-signature: var(--dark-color-ts-index-signature); + --color-ts-constructor-signature: var( + --dark-color-ts-constructor-signature + ); + --color-ts-parameter: var(--dark-color-ts-parameter); + --color-ts-type-parameter: var(--dark-color-ts-type-parameter); + --color-ts-accessor: var(--dark-color-ts-accessor); + --color-ts-get-signature: var(--dark-color-ts-get-signature); + --color-ts-set-signature: var(--dark-color-ts-set-signature); + --color-ts-type-alias: var(--dark-color-ts-type-alias); + --color-document: var(--dark-color-document); + --external-icon: var(--dark-external-icon); --color-scheme: var(--dark-color-scheme); } +*:focus-visible, +.tsd-accordion-summary:focus-visible svg { + outline: 2px solid var(--color-focus-outline); +} + .always-visible, .always-visible .tsd-signatures { display: inherit !important; @@ -186,16 +313,6 @@ h6 { margin: 2.33rem 0; } -.uppercase { - text-transform: uppercase; -} - -pre { - white-space: pre; - white-space: pre-wrap; - word-wrap: break-word; -} - dl, menu, ol, @@ -208,61 +325,25 @@ dd { } .container { - max-width: 1600px; + max-width: 1700px; padding: 0 2rem; } -@media (min-width: 640px) { - .container { - padding: 0 4rem; - } -} -@media (min-width: 1200px) { - .container { - padding: 0 8rem; - } -} -@media (min-width: 1600px) { - .container { - padding: 0 12rem; - } -} - /* Footer */ -.tsd-generator { +footer { border-top: 1px solid var(--color-accent); padding-top: 1rem; padding-bottom: 1rem; max-height: 3.5rem; } - -.tsd-generator > p { - margin-top: 0; - margin-bottom: 0; - padding: 0 1rem; +footer > p { + margin: 0 1em; } .container-main { - display: flex; - justify-content: space-between; - position: relative; margin: 0 auto; -} - -.col-4, -.col-8 { - box-sizing: border-box; - float: left; - padding: 2rem 1rem; -} - -.col-4 { - flex: 0 0 25%; -} -.col-8 { - flex: 1 0; - flex-wrap: wrap; - padding-left: 0; + /* toolbar, footer, margin */ + min-height: calc(100vh - 41px - 56px - 4rem); } @keyframes fade-in { @@ -305,22 +386,6 @@ dd { opacity: 0; } } -@keyframes shift-to-left { - from { - transform: translate(0, 0); - } - to { - transform: translate(-25%, 0); - } -} -@keyframes unshift-to-left { - from { - transform: translate(-25%, 0); - } - to { - transform: translate(0, 0); - } -} @keyframes pop-in-from-right { from { transform: translate(100%, 0); @@ -340,7 +405,8 @@ dd { } body { background: var(--color-background); - font-family: "Segoe UI", sans-serif; + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", "Noto Sans", + Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji"; font-size: 16px; color: var(--color-text); } @@ -358,6 +424,9 @@ a.external[target="_blank"] { background-repeat: no-repeat; padding-right: 13px; } +a.tsd-anchor-link { + color: var(--color-text); +} code, pre { @@ -369,13 +438,29 @@ pre { } pre { + position: relative; + white-space: pre; + white-space: pre-wrap; + word-wrap: break-word; padding: 10px; - border: 0.1em solid var(--color-accent); + border: 1px solid var(--color-accent); } pre code { padding: 0; font-size: 100%; } +pre > button { + position: absolute; + top: 10px; + right: 10px; + opacity: 0; + transition: opacity 0.1s; + box-sizing: border-box; +} +pre:hover > button, +pre > button.visible { + opacity: 1; +} blockquote { margin: 1em 0; @@ -391,13 +476,12 @@ blockquote { padding: 0 0 0 20px; margin: 0; } -.tsd-typography h4, .tsd-typography .tsd-index-panel h3, .tsd-index-panel .tsd-typography h3, +.tsd-typography h4, .tsd-typography h5, .tsd-typography h6 { font-size: 1em; - margin: 0; } .tsd-typography h5, .tsd-typography h6 { @@ -408,90 +492,18 @@ blockquote { .tsd-typography ol { margin: 1em 0; } - -@media (max-width: 1024px) { - html .col-content { - float: none; - max-width: 100%; - width: 100%; - padding-top: 3rem; - } - html .col-menu { - position: fixed !important; - overflow-y: auto; - -webkit-overflow-scrolling: touch; - z-index: 1024; - top: 0 !important; - bottom: 0 !important; - left: auto !important; - right: 0 !important; - padding: 1.5rem 1.5rem 0 0; - max-width: 25rem; - visibility: hidden; - background-color: var(--color-background); - transform: translate(100%, 0); - } - html .col-menu > *:last-child { - padding-bottom: 20px; - } - html .overlay { - content: ""; - display: block; - position: fixed; - z-index: 1023; - top: 0; - left: 0; - right: 0; - bottom: 0; - background-color: rgba(0, 0, 0, 0.75); - visibility: hidden; - } - - .to-has-menu .overlay { - animation: fade-in 0.4s; - } - - .to-has-menu :is(header, footer, .col-content) { - animation: shift-to-left 0.4s; - } - - .to-has-menu .col-menu { - animation: pop-in-from-right 0.4s; - } - - .from-has-menu .overlay { - animation: fade-out 0.4s; - } - - .from-has-menu :is(header, footer, .col-content) { - animation: unshift-to-left 0.4s; - } - - .from-has-menu .col-menu { - animation: pop-out-to-right 0.4s; - } - - .has-menu body { - overflow: hidden; - } - .has-menu .overlay { - visibility: visible; - } - .has-menu :is(header, footer, .col-content) { - transform: translate(-25%, 0); - } - .has-menu .col-menu { - visibility: visible; - transform: translate(0, 0); - display: flex; - flex-direction: column; - gap: 1.5rem; - max-height: 100vh; - padding: 1rem 2rem; - } - .has-menu .tsd-navigation { - max-height: 100%; - } +.tsd-typography table { + border-collapse: collapse; + border: none; +} +.tsd-typography td, +.tsd-typography th { + padding: 6px 13px; + border: 1px solid var(--color-accent); +} +.tsd-typography thead, +.tsd-typography tr:nth-child(even) { + background-color: var(--color-background-secondary); } .tsd-breadcrumb { @@ -574,13 +586,13 @@ dl.tsd-comment-tag-group p { } .tsd-filter-input { display: flex; - width: fit-content; width: -moz-fit-content; + width: fit-content; align-items: center; - user-select: none; -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; + user-select: none; cursor: pointer; } .tsd-filter-input input[type="checkbox"] { @@ -603,11 +615,8 @@ dl.tsd-comment-tag-group p { Don't remove unless you know what you're doing. */ opacity: 0.99; } -.tsd-filter-input input[type="checkbox"]:focus + svg { - transform: scale(0.95); -} -.tsd-filter-input input[type="checkbox"]:focus:not(:focus-visible) + svg { - transform: scale(1); +.tsd-filter-input input[type="checkbox"]:focus-visible + svg { + outline: 2px solid var(--color-focus-outline); } .tsd-checkbox-background { fill: var(--color-accent); @@ -624,13 +633,18 @@ input[type="checkbox"]:checked ~ svg .tsd-checkbox-checkmark { stroke: var(--color-accent); } -.tsd-theme-toggle { - padding-top: 0.75rem; +.settings-label { + font-weight: bold; + text-transform: uppercase; + display: inline-block; } -.tsd-theme-toggle > h4 { - display: inline; - vertical-align: middle; - margin-right: 0.75rem; + +.tsd-filter-visibility .settings-label { + margin: 0.75rem 0 0.5rem 0; +} + +.tsd-theme-toggle .settings-label { + margin: 0.75rem 0.75rem 0 0; } .tsd-hierarchy { @@ -641,6 +655,28 @@ input[type="checkbox"]:checked ~ svg .tsd-checkbox-checkmark { font-weight: bold; } +.tsd-full-hierarchy:not(:last-child) { + margin-bottom: 1em; + padding-bottom: 1em; + border-bottom: 1px solid var(--color-accent); +} +.tsd-full-hierarchy, +.tsd-full-hierarchy ul { + list-style: none; + margin: 0; + padding: 0; +} +.tsd-full-hierarchy ul { + padding-left: 1.5rem; +} +.tsd-full-hierarchy a { + padding: 0.25rem 0 !important; + font-size: 1rem; + display: inline-flex; + align-items: center; + color: var(--color-text); +} + .tsd-panel-group.tsd-index-group { margin-bottom: 0; } @@ -672,43 +708,6 @@ input[type="checkbox"]:checked ~ svg .tsd-checkbox-checkmark { -o-page-break-inside: avoid; page-break-inside: avoid; } -.tsd-index-panel a, -.tsd-index-panel a.tsd-parent-kind-module { - color: var(--color-ts); -} -.tsd-index-panel a.tsd-parent-kind-interface { - color: var(--color-ts-interface); -} -.tsd-index-panel a.tsd-parent-kind-enum { - color: var(--color-ts-enum); -} -.tsd-index-panel a.tsd-parent-kind-class { - color: var(--color-ts-class); -} -.tsd-index-panel a.tsd-kind-module { - color: var(--color-ts-namespace); -} -.tsd-index-panel a.tsd-kind-interface { - color: var(--color-ts-interface); -} -.tsd-index-panel a.tsd-kind-enum { - color: var(--color-ts-enum); -} -.tsd-index-panel a.tsd-kind-class { - color: var(--color-ts-class); -} -.tsd-index-panel a.tsd-kind-function { - color: var(--color-ts-function); -} -.tsd-index-panel a.tsd-kind-namespace { - color: var(--color-ts-namespace); -} -.tsd-index-panel a.tsd-kind-variable { - color: var(--color-ts-variable); -} -.tsd-index-panel a.tsd-is-private { - color: var(--color-ts-private); -} .tsd-flag { display: inline-block; @@ -723,7 +722,7 @@ input[type="checkbox"]:checked ~ svg .tsd-checkbox-checkmark { } .tsd-anchor { - position: absolute; + position: relative; top: -100px; } @@ -737,108 +736,74 @@ input[type="checkbox"]:checked ~ svg .tsd-checkbox-checkmark { margin-bottom: 0; border-bottom: none; } -.tsd-member [data-tsd-kind] { - color: var(--color-ts); -} -.tsd-member [data-tsd-kind="Interface"] { - color: var(--color-ts-interface); -} -.tsd-member [data-tsd-kind="Enum"] { - color: var(--color-ts-enum); -} -.tsd-member [data-tsd-kind="Class"] { - color: var(--color-ts-class); -} -.tsd-member [data-tsd-kind="Private"] { - color: var(--color-ts-private); -} -.tsd-navigation a { - display: block; - margin: 0.4rem 0; - border-left: 2px solid transparent; +.tsd-navigation.settings { + margin: 1rem 0; +} +.tsd-navigation > a, +.tsd-navigation .tsd-accordion-summary { + width: calc(100% - 0.25rem); + display: flex; + align-items: center; +} +.tsd-navigation a, +.tsd-navigation summary > span, +.tsd-page-navigation a { + display: flex; + width: calc(100% - 0.25rem); + align-items: center; + padding: 0.25rem; color: var(--color-text); text-decoration: none; - transition: border-left-color 0.1s; + box-sizing: border-box; } -.tsd-navigation a:hover { +.tsd-navigation a.current, +.tsd-page-navigation a.current { + background: var(--color-active-menu-item); +} +.tsd-navigation a:hover, +.tsd-page-navigation a:hover { text-decoration: underline; } -.tsd-navigation ul { - margin: 0; +.tsd-navigation ul, +.tsd-page-navigation ul { + margin-top: 0; + margin-bottom: 0; padding: 0; list-style: none; } -.tsd-navigation li { +.tsd-navigation li, +.tsd-page-navigation li { padding: 0; + max-width: 100%; } - -.tsd-navigation.primary .tsd-accordion-details > ul { - margin-top: 0.75rem; +.tsd-navigation .tsd-nav-link { + display: none; } -.tsd-navigation.primary a { - padding: 0.75rem 0.5rem; - margin: 0; +.tsd-nested-navigation { + margin-left: 3rem; } -.tsd-navigation.primary ul li a { - margin-left: 0.5rem; +.tsd-nested-navigation > li > details { + margin-left: -1.5rem; } -.tsd-navigation.primary ul li li a { +.tsd-small-nested-navigation { margin-left: 1.5rem; } -.tsd-navigation.primary ul li li li a { - margin-left: 2.5rem; -} -.tsd-navigation.primary ul li li li li a { - margin-left: 3.5rem; -} -.tsd-navigation.primary ul li li li li li a { - margin-left: 4.5rem; -} -.tsd-navigation.primary ul li li li li li li a { - margin-left: 5.5rem; -} -.tsd-navigation.primary li.current > a { - border-left: 0.15rem var(--color-text) solid; -} -.tsd-navigation.primary li.selected > a { - font-weight: bold; - border-left: 0.2rem var(--color-text) solid; -} -.tsd-navigation.primary ul li a:hover { - border-left: 0.2rem var(--color-text-aside) solid; -} -.tsd-navigation.primary li.globals + li > span, -.tsd-navigation.primary li.globals + li > a { - padding-top: 20px; +.tsd-small-nested-navigation > li > details { + margin-left: -1.5rem; } -.tsd-navigation.secondary.tsd-navigation--toolbar-hide { - max-height: calc(100vh - 1rem); - top: 0.5rem; +.tsd-page-navigation-section { + margin-left: 10px; } -.tsd-navigation.secondary > ul { - display: inline; - padding-right: 0.5rem; - transition: opacity 0.2s; +.tsd-page-navigation-section > summary { + padding: 0.25rem; } -.tsd-navigation.secondary ul li a { - padding-left: 0; +.tsd-page-navigation-section > div { + margin-left: 20px; } -.tsd-navigation.secondary ul li li a { - padding-left: 1.1rem; -} -.tsd-navigation.secondary ul li li li a { - padding-left: 2.2rem; -} -.tsd-navigation.secondary ul li li li li a { - padding-left: 3.3rem; -} -.tsd-navigation.secondary ul li li li li li a { - padding-left: 4.4rem; -} -.tsd-navigation.secondary ul li li li li li li a { - padding-left: 5.5rem; +.tsd-page-navigation ul { + padding-left: 1.75rem; } #tsd-sidebar-links a { @@ -851,41 +816,41 @@ input[type="checkbox"]:checked ~ svg .tsd-checkbox-checkmark { } a.tsd-index-link { - margin: 0.25rem 0; + padding: 0.25rem 0 !important; font-size: 1rem; line-height: 1.25rem; display: inline-flex; align-items: center; + color: var(--color-text); } -.tsd-accordion-summary > h1, -.tsd-accordion-summary > h2, -.tsd-accordion-summary > h3, -.tsd-accordion-summary > h4, -.tsd-accordion-summary > h5 { - display: inline-flex; - align-items: center; - vertical-align: middle; - margin-bottom: 0; - user-select: none; +.tsd-accordion-summary { + list-style-type: none; /* hide marker on non-safari */ + outline: none; /* broken on safari, so just hide it */ +} +.tsd-accordion-summary::-webkit-details-marker { + display: none; /* hide marker on safari */ +} +.tsd-accordion-summary, +.tsd-accordion-summary a { -moz-user-select: none; -webkit-user-select: none; -ms-user-select: none; -} -.tsd-accordion-summary { - display: block; + user-select: none; + cursor: pointer; } +.tsd-accordion-summary a { + width: calc(100% - 1.5rem); +} .tsd-accordion-summary > * { margin-top: 0; margin-bottom: 0; padding-top: 0; padding-bottom: 0; } -.tsd-accordion-summary::-webkit-details-marker { - display: none; -} -.tsd-index-accordion .tsd-accordion-summary svg { - margin-right: 0.25rem; +.tsd-accordion .tsd-accordion-summary > svg { + margin-left: 0.25rem; + vertical-align: text-top; } .tsd-index-content > :not(:first-child) { margin-top: 0.75rem; @@ -910,34 +875,6 @@ a.tsd-index-link { margin-right: 0.8rem; } -@media (min-width: 1025px) { - .col-content { - margin: 2rem auto; - } - - .menu-sticky-wrap { - position: sticky; - height: calc(100vh - 2rem); - top: 4rem; - right: 0; - padding: 0 1.5rem; - padding-top: 1rem; - margin-top: 3rem; - transition: 0.3s ease-in-out; - transition-property: top, padding-top, padding, height; - overflow-y: auto; - } - .col-menu { - border-left: 1px solid var(--color-accent); - } - .col-menu--hide { - top: 1rem; - } - .col-menu .tsd-navigation:not(:last-child) { - padding-bottom: 1.75rem; - } -} - .tsd-panel { margin-bottom: 2.5rem; } @@ -961,7 +898,7 @@ a.tsd-index-link { } .tsd-panel-group { - margin: 4rem 0; + margin: 2rem 0; } .tsd-panel-group.tsd-index-group { margin: 2rem 0; @@ -969,6 +906,9 @@ a.tsd-index-link { .tsd-panel-group.tsd-index-group details { margin: 2rem 0; } +.tsd-panel-group > .tsd-accordion-summary { + margin-bottom: 1rem; +} #tsd-search { transition: background-color 0.2s; @@ -1018,8 +958,9 @@ a.tsd-index-link { box-shadow: 0 0 4px rgba(0, 0, 0, 0.25); } #tsd-search .results li { - padding: 0 10px; background-color: var(--color-background); + line-height: initial; + padding: 4px; } #tsd-search .results li:nth-child(even) { background-color: var(--color-background-secondary); @@ -1027,12 +968,15 @@ a.tsd-index-link { #tsd-search .results li.state { display: none; } -#tsd-search .results li.current, -#tsd-search .results li:hover { +#tsd-search .results li.current:not(.no-results), +#tsd-search .results li:hover:not(.no-results) { background-color: var(--color-accent); } #tsd-search .results a { - display: block; + display: flex; + align-items: center; + padding: 0.25rem; + box-sizing: border-box; } #tsd-search .results a:before { top: 10px; @@ -1088,6 +1032,11 @@ a.tsd-index-link { overflow-x: auto; } +.tsd-signature-keyword { + color: var(--color-ts-keyword); + font-weight: normal; +} + .tsd-signature-symbol { color: var(--color-text-aside); font-weight: normal; @@ -1109,6 +1058,12 @@ a.tsd-index-link { border-width: 1px 0; transition: background-color 0.1s; } +.tsd-signatures .tsd-index-signature:not(:last-child) { + margin-bottom: 1em; +} +.tsd-signatures .tsd-index-signature .tsd-signature { + border-width: 1px; +} .tsd-description .tsd-signatures .tsd-signature { border-width: 1px; } @@ -1143,7 +1098,7 @@ ul.tsd-type-parameter-list h5 { } .tsd-page-toolbar { - position: fixed; + position: sticky; z-index: 1; top: 0; left: 0; @@ -1183,16 +1138,14 @@ ul.tsd-type-parameter-list h5 { padding: 12px 0; } -.tsd-page-toolbar--hide { - transform: translateY(-100%); -} - .tsd-widget { display: inline-block; overflow: hidden; opacity: 0.8; height: 40px; - transition: opacity 0.1s, background-color 0.2s; + transition: + opacity 0.1s, + background-color 0.2s; vertical-align: bottom; cursor: pointer; } @@ -1214,12 +1167,6 @@ ul.tsd-type-parameter-list h5 { .tsd-widget.menu { display: none; } -@media (max-width: 1024px) { - .tsd-widget.options, - .tsd-widget.menu { - display: inline-block; - } -} input[type="checkbox"] + .tsd-widget:before { background-position: -120px 0; } @@ -1250,7 +1197,7 @@ img { } .deprecated { - text-decoration: line-through; + text-decoration: line-through !important; } .warning { @@ -1259,6 +1206,78 @@ img { background: var(--color-background-warning); } +.tsd-kind-project { + color: var(--color-ts-project); +} +.tsd-kind-module { + color: var(--color-ts-module); +} +.tsd-kind-namespace { + color: var(--color-ts-namespace); +} +.tsd-kind-enum { + color: var(--color-ts-enum); +} +.tsd-kind-enum-member { + color: var(--color-ts-enum-member); +} +.tsd-kind-variable { + color: var(--color-ts-variable); +} +.tsd-kind-function { + color: var(--color-ts-function); +} +.tsd-kind-class { + color: var(--color-ts-class); +} +.tsd-kind-interface { + color: var(--color-ts-interface); +} +.tsd-kind-constructor { + color: var(--color-ts-constructor); +} +.tsd-kind-property { + color: var(--color-ts-property); +} +.tsd-kind-method { + color: var(--color-ts-method); +} +.tsd-kind-call-signature { + color: var(--color-ts-call-signature); +} +.tsd-kind-index-signature { + color: var(--color-ts-index-signature); +} +.tsd-kind-constructor-signature { + color: var(--color-ts-constructor-signature); +} +.tsd-kind-parameter { + color: var(--color-ts-parameter); +} +.tsd-kind-type-literal { + color: var(--color-ts-type-literal); +} +.tsd-kind-type-parameter { + color: var(--color-ts-type-parameter); +} +.tsd-kind-accessor { + color: var(--color-ts-accessor); +} +.tsd-kind-get-signature { + color: var(--color-ts-get-signature); +} +.tsd-kind-set-signature { + color: var(--color-ts-set-signature); +} +.tsd-kind-type-alias { + color: var(--color-ts-type-alias); +} + +/* if we have a kind icon, don't color the text by kind */ +.tsd-kind-icon ~ span { + color: var(--color-text); +} + * { scrollbar-width: thin; scrollbar-color: var(--color-accent) var(--color-icon-background); @@ -1277,3 +1296,153 @@ img { border-radius: 999rem; border: 0.25rem solid var(--color-icon-background); } + +/* mobile */ +@media (max-width: 769px) { + .tsd-widget.options, + .tsd-widget.menu { + display: inline-block; + } + + .container-main { + display: flex; + } + html .col-content { + float: none; + max-width: 100%; + width: 100%; + } + html .col-sidebar { + position: fixed !important; + overflow-y: auto; + -webkit-overflow-scrolling: touch; + z-index: 1024; + top: 0 !important; + bottom: 0 !important; + left: auto !important; + right: 0 !important; + padding: 1.5rem 1.5rem 0 0; + width: 75vw; + visibility: hidden; + background-color: var(--color-background); + transform: translate(100%, 0); + } + html .col-sidebar > *:last-child { + padding-bottom: 20px; + } + html .overlay { + content: ""; + display: block; + position: fixed; + z-index: 1023; + top: 0; + left: 0; + right: 0; + bottom: 0; + background-color: rgba(0, 0, 0, 0.75); + visibility: hidden; + } + + .to-has-menu .overlay { + animation: fade-in 0.4s; + } + + .to-has-menu .col-sidebar { + animation: pop-in-from-right 0.4s; + } + + .from-has-menu .overlay { + animation: fade-out 0.4s; + } + + .from-has-menu .col-sidebar { + animation: pop-out-to-right 0.4s; + } + + .has-menu body { + overflow: hidden; + } + .has-menu .overlay { + visibility: visible; + } + .has-menu .col-sidebar { + visibility: visible; + transform: translate(0, 0); + display: flex; + flex-direction: column; + gap: 1.5rem; + max-height: 100vh; + padding: 1rem 2rem; + } + .has-menu .tsd-navigation { + max-height: 100%; + } + #tsd-toolbar-links { + display: none; + } + .tsd-navigation .tsd-nav-link { + display: flex; + } +} + +/* one sidebar */ +@media (min-width: 770px) { + .container-main { + display: grid; + grid-template-columns: minmax(0, 1fr) minmax(0, 2fr); + grid-template-areas: "sidebar content"; + margin: 2rem auto; + } + + .col-sidebar { + grid-area: sidebar; + } + .col-content { + grid-area: content; + padding: 0 1rem; + } +} +@media (min-width: 770px) and (max-width: 1399px) { + .col-sidebar { + max-height: calc(100vh - 2rem - 42px); + overflow: auto; + position: sticky; + top: 42px; + padding-top: 1rem; + } + .site-menu { + margin-top: 1rem; + } +} + +/* two sidebars */ +@media (min-width: 1200px) { + .container-main { + grid-template-columns: minmax(0, 1fr) minmax(0, 2.5fr) minmax(0, 20rem); + grid-template-areas: "sidebar content toc"; + } + + .col-sidebar { + display: contents; + } + + .page-menu { + grid-area: toc; + padding-left: 1rem; + } + .site-menu { + grid-area: sidebar; + } + + .site-menu { + margin-top: 1rem 0; + } + + .page-menu, + .site-menu { + max-height: calc(100vh - 2rem - 42px); + overflow: auto; + position: sticky; + top: 42px; + } +} diff --git a/api/classes/AssertionError.html b/api/classes/AssertionError.html index feadaa19c..5dcb81e17 100644 --- a/api/classes/AssertionError.html +++ b/api/classes/AssertionError.html @@ -1,169 +1,11 @@ -AssertionError | liquidjs
-
- -
-
-
-
- -

Class AssertionError

-
-

Hierarchy

-
    -
  • Error -
      -
    • AssertionError
-
-
-
- -
-
-

Constructors

-
-
-

Properties

-
-
-

Methods

-
-
-

Constructors

-
- -
-
-

Properties

-
- -
message: string
-
- -
name: string
-
- -
stack?: string
-
- -
prepareStackTrace?: ((err: Error, stackTraces: CallSite[]) => any)
-
-

Type declaration

-
-
- -
stackTraceLimit: number
-
-

Methods

-
- -
    - -
  • -

    Create .stack property on a target object

    -
    -
    -

    Parameters

    -
      -
    • -
      targetObject: object
    • -
    • -
      Optional constructorOpt: Function
    -

    Returns void

-
-
-

Generated using TypeDoc

-
\ No newline at end of file +AssertionError | liquidjs

Class AssertionError

Hierarchy (view full)

Constructors

Properties

message: string
name: string
stack?: string
prepareStackTrace?: ((err: Error, stackTraces: CallSite[]) => any)

Optional override for formatting stack traces

+
stackTraceLimit: number

Methods

  • Create .stack property on a target object

    +

    Parameters

    • targetObject: object
    • OptionalconstructorOpt: Function

    Returns void

diff --git a/api/classes/AssignTag.html b/api/classes/AssignTag.html index 0fdb705e4..fabeff994 100644 --- a/api/classes/AssignTag.html +++ b/api/classes/AssignTag.html @@ -1,156 +1,7 @@ -AssignTag | liquidjs
-
- -
-
-
-
- -

Class AssignTag

-
-

Hierarchy

-
    -
  • Tag -
      -
    • AssignTag
-
-
-
- -
-
-

Constructors

-
-
-

Properties

-
-
-

Methods

-
-
-

Constructors

-
- -
-
-

Properties

-
- -
key: string
-
- -
liquid: Liquid
-
- -
name: string
-
- -
token: TagToken
-
- -
tokenizer: Tokenizer
-
- -
value: Value
-
-

Methods

-
- -
-
-
-

Generated using TypeDoc

-
\ No newline at end of file +AssignTag | liquidjs

Class AssignTag

Hierarchy (view full)

Constructors

Properties

Methods

Constructors

Properties

liquid: Liquid
name: string
token: TagToken
tokenizer: Tokenizer

Methods

diff --git a/api/classes/BlockTag.html b/api/classes/BlockTag.html index 5a0082b97..255d91e20 100644 --- a/api/classes/BlockTag.html +++ b/api/classes/BlockTag.html @@ -1,188 +1,9 @@ -BlockTag | liquidjs
-
- -
-
-
-
- -

Class BlockTag

-
-

Hierarchy

-
    -
  • Tag -
      -
    • BlockTag
-
-
-
- -
-
-

Constructors

-
-
-

Properties

-
-
-

Methods

-
-
-

Constructors

-
- -
-
-

Properties

-
- -
block: string
-
- -
liquid: Liquid
-
- -
name: string
-
- -
templates: Template[] = []
-
- -
token: TagToken
-
- -
tokenizer: Tokenizer
-
-

Methods

-
- -
    - -
  • -
    -

    Parameters

    -
    -

    Returns ((superBlock: BlockDrop, emitter: Emitter) => any)

    -
      -
    • -
        -
      • (superBlock: BlockDrop, emitter: Emitter): any
      • -
      • -
        -

        Parameters

        -
          -
        • -
          superBlock: BlockDrop
        • -
        • -
          emitter: Emitter
        -

        Returns any

-
- -
-
-
-

Generated using TypeDoc

-
\ No newline at end of file +BlockTag | liquidjs

Class BlockTag

Hierarchy (view full)

Constructors

Properties

Methods

Constructors

Properties

block: string
liquid: Liquid
name: string
templates: Template[] = []
token: TagToken
tokenizer: Tokenizer

Methods

diff --git a/api/classes/BreakTag.html b/api/classes/BreakTag.html index 969017513..75ad5df76 100644 --- a/api/classes/BreakTag.html +++ b/api/classes/BreakTag.html @@ -1,144 +1,7 @@ -BreakTag | liquidjs
-
- -
-
-
-
- -

Class BreakTag

-
-

Hierarchy

-
    -
  • Tag -
      -
    • BreakTag
-
-
-
- -
-
-

Constructors

-
-
-

Properties

-
-
-

Methods

-
-
-

Constructors

-
- -
-
-

Properties

-
- -
liquid: Liquid
-
- -
name: string
-
- -
token: TagToken
-
- -
tokenizer: Tokenizer
-
-

Methods

-
- -
-
-
-

Generated using TypeDoc

-
\ No newline at end of file +BreakTag | liquidjs

Class BreakTag

Hierarchy (view full)

Constructors

Properties

Methods

Constructors

Properties

liquid: Liquid
name: string
token: TagToken
tokenizer: Tokenizer

Methods

diff --git a/api/classes/CaptureTag.html b/api/classes/CaptureTag.html index 36d960859..10e0cb4b5 100644 --- a/api/classes/CaptureTag.html +++ b/api/classes/CaptureTag.html @@ -1,168 +1,9 @@ -CaptureTag | liquidjs
-
- -
-
-
-
- -

Class CaptureTag

-
-

Hierarchy

-
    -
  • Tag -
      -
    • CaptureTag
-
-
-
- -
-
-

Constructors

-
-
-

Properties

-
-
-

Methods

-
-
-

Constructors

-
- -
-
-

Properties

-
- -
liquid: Liquid
-
- -
name: string
-
- -
templates: Template[] = []
-
- -
token: TagToken
-
- -
tokenizer: Tokenizer
-
- -
variable: string
-
-

Methods

-
- -
-
- -
-
-
-

Generated using TypeDoc

-
\ No newline at end of file +CaptureTag | liquidjs

Class CaptureTag

Hierarchy (view full)

Constructors

Properties

Methods

Constructors

Properties

liquid: Liquid
name: string
templates: Template[] = []
token: TagToken
tokenizer: Tokenizer
variable: string

Methods

diff --git a/api/classes/CaseTag.html b/api/classes/CaseTag.html index d4324390a..214e15af9 100644 --- a/api/classes/CaseTag.html +++ b/api/classes/CaseTag.html @@ -1,167 +1,10 @@ -CaseTag | liquidjs
-
- -
-
-
-
- -

Class CaseTag

-
-

Hierarchy

-
    -
  • Tag -
      -
    • CaseTag
-
-
-
- -
-
-

Constructors

-
-
-

Properties

-
-
-

Methods

-
-
-

Constructors

-
- -
-
-

Properties

-
- -
branches: {
    templates: Template[];
    values: ValueToken[];
}[] = []
-
- -
elseTemplates: Template[] = []
-
- -
liquid: Liquid
-
- -
name: string
-
- -
token: TagToken
-
- -
tokenizer: Tokenizer
-
- -
value: Value
-
-

Methods

-
- -
-
-
-

Generated using TypeDoc

-
\ No newline at end of file +CaseTag | liquidjs

Class CaseTag

Hierarchy (view full)

Constructors

Properties

Methods

Constructors

Properties

branches: {
    templates: Template[];
    values: ValueToken[];
}[] = []
elseTemplates: Template[] = []
liquid: Liquid
name: string
token: TagToken
tokenizer: Tokenizer
value: Value

Methods

diff --git a/api/classes/CommentTag.html b/api/classes/CommentTag.html index a9d043063..2db0827be 100644 --- a/api/classes/CommentTag.html +++ b/api/classes/CommentTag.html @@ -1,137 +1,7 @@ -CommentTag | liquidjs
-
- -
-
-
-
- -

Class CommentTag

-
-

Hierarchy

-
    -
  • Tag -
      -
    • CommentTag
-
-
-
- -
-
-

Constructors

-
-
-

Properties

-
-
-

Methods

-
-
-

Constructors

-
- -
-
-

Properties

-
- -
liquid: Liquid
-
- -
name: string
-
- -
token: TagToken
-
- -
tokenizer: Tokenizer
-
-

Methods

-
- -
-
-
-

Generated using TypeDoc

-
\ No newline at end of file +CommentTag | liquidjs

Class CommentTag

Hierarchy (view full)

Constructors

Properties

Methods

Constructors

Properties

liquid: Liquid
name: string
token: TagToken
tokenizer: Tokenizer

Methods

diff --git a/api/classes/Context.html b/api/classes/Context.html index a44faa3c1..93045e56c 100644 --- a/api/classes/Context.html +++ b/api/classes/Context.html @@ -1,407 +1,32 @@ -Context | liquidjs
-
- -
-
-
-
- -

Class Context

-
-

Hierarchy

-
    -
  • Context
-
-
-
- -
-
-

Constructors

-
- -
    - -
  • -
    -

    Parameters

    -
      -
    • -
      env: object = {}
    • -
    • -
      opts: NormalizedFullOptions = defaultOptions
    • -
    • -
      renderOptions: RenderOptions = {}
    • -
    • -
      __namedParameters: {
          [key: string]: Limiter;
      } = {}
      -
        -
      • -
        [key: string]: Limiter
    -

    Returns Context

-
-

Properties

-
- -
environments: Scope
-

user passed in scope +Context | liquidjs

Class Context

Constructors

Properties

environments: Scope

user passed in scope {% increment %}, {% decrement %} changes this scope, whereas {% capture %}, {% assign %} only hide this scope

-
-
- -
globals: Scope
-

global scope used as fallback for missing variables

-
-
- -
memoryLimit: Limiter
-
- -
opts: NormalizedFullOptions
-

The normalized liquid options object

-
-
- -
ownPropertyOnly: boolean
-
- -
registers: {} = {}
-
-

Type declaration

-
    -
    - -
    renderLimit: Limiter
    -
    - -
    scopes: Scope[] = ...
    -

    insert a Context-level empty scope, -for tags like {% capture %} {% assign %} to operate

    -
    -
    - -
    strictVariables: boolean
    -

    Throw when accessing undefined variable?

    -
    -
    - -
    sync: boolean
    -
    -

    Methods

    -
    - -
      - -
    • -
      -

      Parameters

      -
        -
      • -
        paths: PropertyKey[]
      -

      Returns IterableIterator<unknown>

    -
    - -
      - -
    • -
      -

      Parameters

      -
        -
      • -
        scope: unknown
      • -
      • -
        paths: string | PropertyKey[]
      • -
      • -
        strictVariables: boolean = ...
      -

      Returns IterableIterator<unknown>

    -
    - -
    -
    - -
    -
    - -
      - -
    • -
      -

      Deprecated

      use _get() or getSync() instead

      -
      -
      -

      Parameters

      -
        -
      • -
        paths: PropertyKey[]
      -

      Returns unknown

    -
    - -
    -
    - -
      - -
    • -
      -

      Deprecated

      use _get() instead

      -
      -
      -

      Parameters

      -
        -
      • -
        scope: unknown
      • -
      • -
        paths: string | PropertyKey[]
      -

      Returns IterableIterator<unknown>

    -
    - -
    -
    - -
      - -
    • -
      -

      Parameters

      -
        -
      • -
        paths: PropertyKey[]
      -

      Returns unknown

    -
    - -
    -
    - -
    -
    - -
      - -
    • -
      -

      Parameters

      -
        -
      • -
        keyValues: [string, any][]
      -

      Returns void

    -
    - -
      - -
    • -
      -

      Parameters

      -
        -
      • -
        Rest ...keys: string[]
      -

      Returns [string, any][]

    -
    - -
      - -
    • -
      -

      Parameters

      -
        -
      • -
        key: string
      • -
      • -
        value: any
      -

      Returns any

    -
    - -
    -
    -
    -

    Generated using TypeDoc

    -
    \ No newline at end of file +
    globals: Scope

    global scope used as fallback for missing variables

    +
    memoryLimit: Limiter

    The normalized liquid options object

    +
    ownPropertyOnly: boolean
    renderLimit: Limiter
    strictVariables: boolean

    Throw when accessing undefined variable?

    +
    sync: boolean

    Methods

    • Parameters

      • Rest...keys: string[]

      Returns [string, any][]

    diff --git a/api/classes/ContinueTag.html b/api/classes/ContinueTag.html index 51ba7a6fd..6cf6e9a8c 100644 --- a/api/classes/ContinueTag.html +++ b/api/classes/ContinueTag.html @@ -1,144 +1,7 @@ -ContinueTag | liquidjs
    -
    - -
    -
    -
    -
    - -

    Class ContinueTag

    -
    -

    Hierarchy

    -
      -
    • Tag -
        -
      • ContinueTag
    -
    -
    -
    - -
    -
    -

    Constructors

    -
    -
    -

    Properties

    -
    -
    -

    Methods

    -
    -
    -

    Constructors

    -
    - -
    -
    -

    Properties

    -
    - -
    liquid: Liquid
    -
    - -
    name: string
    -
    - -
    token: TagToken
    -
    - -
    tokenizer: Tokenizer
    -
    -

    Methods

    -
    - -
    -
    -
    -

    Generated using TypeDoc

    -
    \ No newline at end of file +ContinueTag | liquidjs

    Class ContinueTag

    Hierarchy (view full)

    Constructors

    Properties

    Methods

    Constructors

    Properties

    liquid: Liquid
    name: string
    token: TagToken
    tokenizer: Tokenizer

    Methods

    diff --git a/api/classes/CycleTag.html b/api/classes/CycleTag.html index 6ecb806b0..bbfc764c1 100644 --- a/api/classes/CycleTag.html +++ b/api/classes/CycleTag.html @@ -1,158 +1,7 @@ -CycleTag | liquidjs
    -
    - -
    -
    -
    -
    - -

    Class CycleTag

    -
    -

    Hierarchy

    -
      -
    • Tag -
        -
      • CycleTag
    -
    -
    -
    - -
    -
    -

    Constructors

    -
    -
    -

    Properties

    -
    -
    -

    Methods

    -
    -
    -

    Constructors

    -
    - -
    -
    -

    Properties

    -
    - -
    candidates: ValueToken[] = []
    -
    - -
    group?: ValueToken
    -
    - -
    liquid: Liquid
    -
    - -
    name: string
    -
    - -
    token: TagToken
    -
    - -
    tokenizer: Tokenizer
    -
    -

    Methods

    -
    - -
    -
    -
    -

    Generated using TypeDoc

    -
    \ No newline at end of file +CycleTag | liquidjs

    Class CycleTag

    Hierarchy (view full)

    Constructors

    Properties

    Methods

    Constructors

    Properties

    liquid: Liquid
    name: string
    token: TagToken
    tokenizer: Tokenizer

    Methods

    diff --git a/api/classes/DecrementTag.html b/api/classes/DecrementTag.html index 51a6b78b6..28c1064f6 100644 --- a/api/classes/DecrementTag.html +++ b/api/classes/DecrementTag.html @@ -1,151 +1,7 @@ -DecrementTag | liquidjs
    -
    - -
    -
    -
    -
    - -

    Class DecrementTag

    -
    -

    Hierarchy

    -
      -
    • Tag -
        -
      • DecrementTag
    -
    -
    -
    - -
    -
    -

    Constructors

    -
    -
    -

    Properties

    -
    -
    -

    Methods

    -
    -
    -

    Constructors

    -
    - -
    -
    -

    Properties

    -
    - -
    liquid: Liquid
    -
    - -
    name: string
    -
    - -
    token: TagToken
    -
    - -
    tokenizer: Tokenizer
    -
    - -
    variable: string
    -
    -

    Methods

    -
    - -
    -
    -
    -

    Generated using TypeDoc

    -
    \ No newline at end of file +DecrementTag | liquidjs

    Class DecrementTag

    Hierarchy (view full)

    • Tag
      • DecrementTag

    Constructors

    Properties

    Methods

    Constructors

    Properties

    liquid: Liquid
    name: string
    token: TagToken
    tokenizer: Tokenizer

    Methods

    diff --git a/api/classes/Drop.html b/api/classes/Drop.html index c8ea54e7a..b8e5e2768 100644 --- a/api/classes/Drop.html +++ b/api/classes/Drop.html @@ -1,90 +1,3 @@ -Drop | liquidjs
    -
    - -
    -
    -
    -
    - -

    Class DropAbstract

    -
    -

    Hierarchy

    -
      -
    • Drop
    -
    -
    -
    - -
    -
    -

    Constructors

    -
    -
    -

    Methods

    -
    -
    -

    Constructors

    -
    - -
    -
    -

    Methods

    -
    - -
      - -
    • -
      -

      Parameters

      -
        -
      • -
        key: string | number
      -

      Returns any

    -
    -
    -

    Generated using TypeDoc

    -
    \ No newline at end of file +Drop | liquidjs

    Class DropAbstract

    Hierarchy (view full)

    Constructors

    Methods

    Constructors

    Methods

    • Parameters

      • key: string | number

      Returns any

    diff --git a/api/classes/EchoTag.html b/api/classes/EchoTag.html index a679b6ad7..fddfa35c3 100644 --- a/api/classes/EchoTag.html +++ b/api/classes/EchoTag.html @@ -1,151 +1,7 @@ -EchoTag | liquidjs
    -
    - -
    -
    -
    -
    - -

    Class EchoTag

    -
    -

    Hierarchy

    -
      -
    • Tag -
        -
      • EchoTag
    -
    -
    -
    - -
    -
    -

    Constructors

    -
    -
    -

    Properties

    -
    -
    -

    Methods

    -
    -
    -

    Constructors

    -
    - -
    -
    -

    Properties

    -
    - -
    liquid: Liquid
    -
    - -
    name: string
    -
    - -
    token: TagToken
    -
    - -
    tokenizer: Tokenizer
    -
    - -
    value?: Value
    -
    -

    Methods

    -
    - -
    -
    -
    -

    Generated using TypeDoc

    -
    \ No newline at end of file +EchoTag | liquidjs

    Class EchoTag

    Hierarchy (view full)

    Constructors

    Properties

    Methods

    Constructors

    Properties

    liquid: Liquid
    name: string
    token: TagToken
    tokenizer: Tokenizer

    Methods

    diff --git a/api/classes/Expression.html b/api/classes/Expression.html index 7a65c1ead..59f4a5d8d 100644 --- a/api/classes/Expression.html +++ b/api/classes/Expression.html @@ -1,121 +1,4 @@ -Expression | liquidjs
    -
    - -
    -
    -
    -
    - -

    Class Expression

    -
    -

    Hierarchy

    -
      -
    • Expression
    -
    -
    -
    - -
    -
    -

    Constructors

    -
    -
    -

    Properties

    -
    -
    -

    Methods

    -
    -
    -

    Constructors

    -
    - -
    -
    -

    Properties

    -
    - -
    postfix: Token[]
    -
    -

    Methods

    -
    - -
      - -
    • -
      -

      Parameters

      -
        -
      • -
        ctx: Context
      • -
      • -
        Optional lenient: boolean
      -

      Returns Generator<unknown, unknown, unknown>

    -
    - -
    -
    -
    -

    Generated using TypeDoc

    -
    \ No newline at end of file +Expression | liquidjs

    Class Expression

    Constructors

    Methods

    Constructors

    Methods

    diff --git a/api/classes/Filter.html b/api/classes/Filter.html index daac6741d..50c8a59ca 100644 --- a/api/classes/Filter.html +++ b/api/classes/Filter.html @@ -1,145 +1,6 @@ -Filter | liquidjs
    -
    - -
    -
    -
    -
    - -

    Class Filter

    -
    -

    Hierarchy

    -
      -
    • Filter
    -
    -
    -
    - -
    -
    -

    Constructors

    -
    -
    -

    Properties

    -
    -
    -

    Methods

    -
    -
    -

    Constructors

    -
    - -
    -
    -

    Properties

    -
    - -
    args: FilterArg[]
    -
    - -
    handler: FilterHandler
    -
    - -
    liquid: Liquid
    -
    - -
    name: string
    -
    - -
    raw: boolean
    -
    -

    Methods

    -
    - -
    -
    -
    -

    Generated using TypeDoc

    -
    \ No newline at end of file +Filter | liquidjs

    Class Filter

    Constructors

    Properties

    Methods

    Constructors

    Properties

    args: FilterArg[]
    name: string
    raw: boolean

    Methods

    diff --git a/api/classes/ForTag.html b/api/classes/ForTag.html index 9221ed54b..a64c762f8 100644 --- a/api/classes/ForTag.html +++ b/api/classes/ForTag.html @@ -1,181 +1,12 @@ -ForTag | liquidjs
    -
    - -
    -
    -
    -
    - -

    Class ForTag

    -
    -

    Hierarchy

    -
      -
    • Tag -
        -
      • ForTag
    -
    -
    -
    - -
    -
    -

    Constructors

    -
    -
    -

    Properties

    -
    -
    -

    Methods

    -
    -
    -

    Constructors

    -
    - -
    -
    -

    Properties

    -
    - -
    collection: ValueToken
    -
    - -
    elseTemplates: Template[]
    -
    - -
    hash: Hash
    -
    - -
    liquid: Liquid
    -
    - -
    name: string
    -
    - -
    templates: Template[]
    -
    - -
    token: TagToken
    -
    - -
    tokenizer: Tokenizer
    -
    - -
    variable: string
    -
    -

    Methods

    -
    - -
    -
    -
    -

    Generated using TypeDoc

    -
    \ No newline at end of file +ForTag | liquidjs

    Class ForTag

    Hierarchy (view full)

    Constructors

    Properties

    collection: ValueToken
    elseTemplates: Template[]
    hash: Hash
    liquid: Liquid
    name: string
    templates: Template[]
    token: TagToken
    tokenizer: Tokenizer
    variable: string

    Methods

    diff --git a/api/classes/Hash.html b/api/classes/Hash.html index d6e192a77..e28aa6b7d 100644 --- a/api/classes/Hash.html +++ b/api/classes/Hash.html @@ -1,119 +1,10 @@ -Hash | liquidjs
    -
    - -
    -
    -
    -
    - -

    Class Hash

    -
    -

    Key-Value Pairs Representing Tag Arguments +Hash | liquidjs

    Class Hash

    Key-Value Pairs Representing Tag Arguments Example: - For the markup , foo:'bar', coo:2 reversed %}, - hash['foo'] === 'bar' - hash['coo'] === 2 - hash['reversed'] === undefined

    -
    -
    -

    Hierarchy

    -
      -
    • Hash
    -
    -
    -
    - -
    -
    -

    Constructors

    -
    -
    -

    Properties

    -
    -
    -

    Methods

    -
    -
    -

    Constructors

    -
    - -
      - -
    • -
      -

      Parameters

      -
        -
      • -
        markup: string
      • -
      • -
        Optional jekyllStyle: boolean
      -

      Returns Hash

    -
    -

    Properties

    -
    - -
    hash: HashValueTokens = {}
    -
    -

    Methods

    -
    - -
      - -
    • -
      -

      Parameters

      -
      -

      Returns Generator<unknown, Record<string, any>, unknown>

    -
    -
    -

    Generated using TypeDoc

    -
    \ No newline at end of file +For the markup , foo:'bar', coo:2 reversed %}, +hash['foo'] === 'bar' +hash['coo'] === 2 +hash['reversed'] === undefined

    +

    Constructors

    Properties

    Methods

    Constructors

    Properties

    hash: HashValueTokens = {}

    Methods

    diff --git a/api/classes/IfTag.html b/api/classes/IfTag.html index 9bf8f7f08..879c0c09a 100644 --- a/api/classes/IfTag.html +++ b/api/classes/IfTag.html @@ -1,160 +1,9 @@ -IfTag | liquidjs
    -
    - -
    -
    -
    -
    - -

    Class IfTag

    -
    -

    Hierarchy

    -
    -
    -
    -
    - -
    -
    -

    Constructors

    -
    -
    -

    Properties

    -
    -
    -

    Methods

    -
    -
    -

    Constructors

    -
    - -
    -
    -

    Properties

    -
    - -
    branches: {
        templates: Template[];
        value: Value;
    }[] = []
    -
    - -
    elseTemplates: undefined | Template[]
    -
    - -
    liquid: Liquid
    -
    - -
    name: string
    -
    - -
    token: TagToken
    -
    - -
    tokenizer: Tokenizer
    -
    -

    Methods

    -
    - -
    -
    -
    -

    Generated using TypeDoc

    -
    \ No newline at end of file +IfTag | liquidjs

    Class IfTag

    Hierarchy (view full)

    Constructors

    Properties

    Methods

    Constructors

    Properties

    branches: {
        templates: Template[];
        value: Value;
    }[] = []
    elseTemplates: undefined | Template[]
    liquid: Liquid
    name: string
    token: TagToken
    tokenizer: Tokenizer

    Methods

    diff --git a/api/classes/IncludeTag.html b/api/classes/IncludeTag.html index ec44701f2..626e79fc8 100644 --- a/api/classes/IncludeTag.html +++ b/api/classes/IncludeTag.html @@ -1,160 +1,7 @@ -IncludeTag | liquidjs
    -
    - -
    -
    -
    -
    - -

    Class IncludeTag

    -
    -

    Hierarchy

    -
      -
    • Tag -
        -
      • IncludeTag
    -
    -
    -
    - -
    -
    -

    Constructors

    -
    -
    -

    Properties

    -
    -
    -

    Methods

    -
    -
    -

    Constructors

    -
    - -
    -
    -

    Properties

    -
    - -
    hash: Hash
    -
    - -
    liquid: Liquid
    -
    - -
    name: string
    -
    - -
    token: TagToken
    -
    - -
    tokenizer: Tokenizer
    -
    - -
    withVar?: ValueToken
    -
    -

    Methods

    -
    - -
    -
    -
    -

    Generated using TypeDoc

    -
    \ No newline at end of file +IncludeTag | liquidjs

    Class IncludeTag

    Hierarchy (view full)

    Constructors

    Properties

    Methods

    Constructors

    Properties

    liquid: Liquid
    name: string
    token: TagToken
    tokenizer: Tokenizer

    Methods

    diff --git a/api/classes/IncrementTag.html b/api/classes/IncrementTag.html index 53bcee144..df4b39043 100644 --- a/api/classes/IncrementTag.html +++ b/api/classes/IncrementTag.html @@ -1,151 +1,7 @@ -IncrementTag | liquidjs
    -
    - -
    -
    -
    -
    - -

    Class IncrementTag

    -
    -

    Hierarchy

    -
      -
    • Tag -
        -
      • IncrementTag
    -
    -
    -
    - -
    -
    -

    Constructors

    -
    -
    -

    Properties

    -
    -
    -

    Methods

    -
    -
    -

    Constructors

    -
    - -
    -
    -

    Properties

    -
    - -
    liquid: Liquid
    -
    - -
    name: string
    -
    - -
    token: TagToken
    -
    - -
    tokenizer: Tokenizer
    -
    - -
    variable: string
    -
    -

    Methods

    -
    - -
    -
    -
    -

    Generated using TypeDoc

    -
    \ No newline at end of file +IncrementTag | liquidjs

    Class IncrementTag

    Hierarchy (view full)

    • Tag
      • IncrementTag

    Constructors

    Properties

    Methods

    Constructors

    Properties

    liquid: Liquid
    name: string
    token: TagToken
    tokenizer: Tokenizer

    Methods

    diff --git a/api/classes/InlineCommentTag.html b/api/classes/InlineCommentTag.html index ac84855f2..df10a6bfb 100644 --- a/api/classes/InlineCommentTag.html +++ b/api/classes/InlineCommentTag.html @@ -1,137 +1,7 @@ -InlineCommentTag | liquidjs
    -
    - -
    -
    -
    -
    - -

    Class InlineCommentTag

    -
    -

    Hierarchy

    -
      -
    • Tag -
        -
      • InlineCommentTag
    -
    -
    -
    - -
    -
    -

    Constructors

    -
    -
    -

    Properties

    -
    -
    -

    Methods

    -
    -
    -

    Constructors

    -
    - -
    -
    -

    Properties

    -
    - -
    liquid: Liquid
    -
    - -
    name: string
    -
    - -
    token: TagToken
    -
    - -
    tokenizer: Tokenizer
    -
    -

    Methods

    -
    - -
    -
    -
    -

    Generated using TypeDoc

    -
    \ No newline at end of file +InlineCommentTag | liquidjs

    Class InlineCommentTag

    Hierarchy (view full)

    • Tag
      • InlineCommentTag

    Constructors

    Properties

    Methods

    Constructors

    Properties

    liquid: Liquid
    name: string
    token: TagToken
    tokenizer: Tokenizer

    Methods

    diff --git a/api/classes/LayoutTag.html b/api/classes/LayoutTag.html index b62d550f8..bf46b086a 100644 --- a/api/classes/LayoutTag.html +++ b/api/classes/LayoutTag.html @@ -1,167 +1,10 @@ -LayoutTag | liquidjs
    -
    - -
    -
    -
    -
    - -

    Class LayoutTag

    -
    -

    Hierarchy

    -
      -
    • Tag -
        -
      • LayoutTag
    -
    -
    -
    - -
    -
    -

    Constructors

    -
    -
    -

    Properties

    -
    -
    -

    Methods

    -
    -
    -

    Constructors

    -
    - -
    -
    -

    Properties

    -
    - -
    args: Hash
    -
    - -
    file?: ParsedFileName
    -
    - -
    liquid: Liquid
    -
    - -
    name: string
    -
    - -
    templates: Template[]
    -
    - -
    token: TagToken
    -
    - -
    tokenizer: Tokenizer
    -
    -

    Methods

    -
    - -
    -
    -
    -

    Generated using TypeDoc

    -
    \ No newline at end of file +LayoutTag | liquidjs

    Class LayoutTag

    Hierarchy (view full)

    Constructors

    Properties

    Methods

    Constructors

    Properties

    args: Hash
    liquid: Liquid
    name: string
    templates: Template[]
    token: TagToken
    tokenizer: Tokenizer

    Methods

    diff --git a/api/classes/Liquid.html b/api/classes/Liquid.html index c96404272..160728f84 100644 --- a/api/classes/Liquid.html +++ b/api/classes/Liquid.html @@ -1,597 +1,32 @@ -Liquid | liquidjs
    -
    - -
    -
    -
    -
    - -

    Class Liquid

    -
    -

    Hierarchy

    -
      -
    • Liquid
    -
    -
    -
    - -
    -
    -

    Constructors

    -
    - -
    -
    -

    Properties

    -
    - -
    filters: Record<string, FilterImplOptions> = {}
    -
    - -
    options: NormalizedFullOptions
    -
    - -
    parser: Parser
    -
    -

    Deprecated

    will be removed. In tags use this.parser instead

    -
    -
    - -
    renderer: Render = ...
    -
    - -
    tags: Record<string, TagClass> = {}
    -
    -

    Methods

    -
    - -
      - -
    • -
      -

      Parameters

      -
        -
      • -
        str: string
      • -
      • -
        Optional scope: object | Context
      -

      Returns IterableIterator<any>

    -
    - -
      - -
    • -
      -

      Parameters

      -
        -
      • -
        html: string
      • -
      • -
        scope: undefined | object | Context
      • -
      • -
        renderOptions: RenderOptions
      -

      Returns IterableIterator<any>

    -
    - -
      - -
    • -
      -

      Parameters

      -
        -
      • -
        file: string
      • -
      • -
        Optional sync: boolean
      • -
      • -
        Optional lookupType: LookupType
      • -
      • -
        Optional currentFile: string
      -

      Returns Generator<unknown, Template[], unknown>

    -
    - -
      - -
    • -
      -

      Parameters

      -
        -
      • -
        file: string
      • -
      • -
        Optional sync: boolean
      • -
      • -
        Optional currentFile: string
      -

      Returns Generator<unknown, Template[], string | Template[]>

    -
    - -
      - -
    • -
      -

      Parameters

      -
        -
      • -
        file: string
      • -
      • -
        Optional sync: boolean
      • -
      • -
        Optional currentFile: string
      -

      Returns Generator<unknown, Template[], string | Template[]>

    -
    - -
      - -
    • -
      -

      Parameters

      -
        -
      • -
        tpl: Template[]
      • -
      • -
        scope: undefined | object | Context
      • -
      • -
        renderOptions: RenderOptions
      -

      Returns IterableIterator<any>

    -
    - -
      - -
    • -
      -

      Parameters

      -
        -
      • -
        file: string
      • -
      • -
        ctx: undefined | object | Context
      • -
      • -
        renderFileOptions: RenderFileOptions
      -

      Returns Generator<any, any, unknown>

    -
    - -
      - -
    • -
      -

      Parameters

      -
        -
      • -
        str: string
      • -
      • -
        Optional scope: object | Context
      -

      Returns Promise<any>

    -
    - -
      - -
    • -
      -

      Parameters

      -
        -
      • -
        str: string
      • -
      • -
        Optional scope: object | Context
      -

      Returns any

    -
    - -
      - -
    • -

      Returns ((this: any, filePath: string, ctx: object, callback: ((err: null | Error, rendered: string) => void)) => void)

      -
        -
      • -
          -
        • (this: any, filePath: string, ctx: object, callback: ((err: null | Error, rendered: string) => void)): void
        • -
        • -
          -

          Parameters

          -
            -
          • -
            this: any
          • -
          • -
            filePath: string
          • -
          • -
            ctx: object
          • -
          • -
            callback: ((err: null | Error, rendered: string) => void)
            -
              -
            • -
                -
              • (err: null | Error, rendered: string): void
              • -
              • -
                -

                Parameters

                -
                  -
                • -
                  err: null | Error
                • -
                • -
                  rendered: string
                -

                Returns void

          -

          Returns void

    -
    - -
      - -
    • -
      -

      Parameters

      -
        -
      • -
        html: string
      • -
      • -
        Optional filepath: string
      -

      Returns Template[]

    -
    - -
      - -
    • -
      -

      Parameters

      -
        -
      • -
        html: string
      • -
      • -
        Optional scope: object | Context
      • -
      • -
        Optional renderOptions: RenderOptions
      -

      Returns Promise<any>

    -
    - -
      - -
    • -
      -

      Parameters

      -
        -
      • -
        html: string
      • -
      • -
        Optional scope: object | Context
      • -
      • -
        Optional renderOptions: RenderOptions
      -

      Returns any

    -
    - -
      - -
    • -
      -

      Parameters

      -
        -
      • -
        file: string
      • -
      • -
        Optional lookupType: LookupType
      -

      Returns Promise<Template[]>

    -
    - -
      - -
    • -
      -

      Parameters

      -
        -
      • -
        file: string
      • -
      • -
        Optional lookupType: LookupType
      -

      Returns Template[]

    -
    - -
    -
    - -
    -
    - -
      - -
    • -
      -

      Parameters

      -
        -
      • -
        name: string
      • -
      • -
        tag: TagClass | TagImplOptions
      -

      Returns void

    -
    - -
      - -
    • -
      -

      Parameters

      -
        -
      • -
        tpl: Template[]
      • -
      • -
        Optional scope: object
      • -
      • -
        Optional renderOptions: RenderOptions
      -

      Returns Promise<any>

    -
    - -
      - -
    • -
      -

      Parameters

      -
        -
      • -
        file: string
      • -
      • -
        Optional ctx: object | Context
      • -
      • -
        Optional renderFileOptions: RenderFileOptions
      -

      Returns Promise<any>

    -
    - -
      - -
    • -
      -

      Parameters

      -
        -
      • -
        file: string
      • -
      • -
        Optional ctx: object | Context
      • -
      • -
        Optional renderFileOptions: RenderFileOptions
      -

      Returns any

    -
    - -
      - -
    • -
      -

      Parameters

      -
        -
      • -
        file: string
      • -
      • -
        Optional scope: object
      • -
      • -
        Optional renderOptions: RenderOptions
      -

      Returns Promise<ReadableStream>

    -
    - -
      - -
    • -
      -

      Parameters

      -
        -
      • -
        tpl: Template[]
      • -
      • -
        Optional scope: object
      • -
      • -
        Optional renderOptions: RenderOptions
      -

      Returns any

    -
    - -
      - -
    • -
      -

      Parameters

      -
        -
      • -
        tpl: Template[]
      • -
      • -
        Optional scope: object
      • -
      • -
        renderOptions: RenderOptions = {}
      -

      Returns ReadableStream

    -
    -
    -

    Generated using TypeDoc

    -
    \ No newline at end of file +Liquid | liquidjs

    Class Liquid

    Constructors

    Properties

    filters: Record<string, FilterImplOptions> = {}
    parser: Parser

    will be removed. In tags use this.parser instead

    +
    renderer: Render = ...
    tags: Record<string, TagClass> = {}

    Methods

    • Parameters

      • str: string
      • Optionalscope: object | Context

      Returns Promise<any>

    • Parameters

      • str: string
      • Optionalscope: object | Context

      Returns any

    • Returns ((this: any, filePath: string, ctx: object, callback: ((err: null | Error, rendered: string) => void)) => void)

        • (this, filePath, ctx, callback): void
        • Parameters

          • this: any
          • filePath: string
          • ctx: object
          • callback: ((err: null | Error, rendered: string) => void)
              • (err, rendered): void
              • Parameters

                • err: null | Error
                • rendered: string

                Returns void

          Returns void

    • Parameters

      Returns Promise<any>

    • Parameters

      Returns any

    diff --git a/api/classes/LiquidError.html b/api/classes/LiquidError.html index 2abf78a77..47fd7b63c 100644 --- a/api/classes/LiquidError.html +++ b/api/classes/LiquidError.html @@ -1,222 +1,15 @@ -LiquidError | liquidjs
    -
    - -
    -
    -
    -
    - -

    Class LiquidErrorAbstract

    -
    -

    Hierarchy

    -
    -
    -
    -
    - -
    -
    -

    Constructors

    -
    - -
    -
    -

    Properties

    -
    - -
    context: string = ''
    -
    - -
    message: string
    -
    - -
    name: string
    -
    - -
    originalError?: Error
    -
    - -
    stack?: string
    -
    - -
    token: Token
    -
    - -
    prepareStackTrace?: ((err: Error, stackTraces: CallSite[]) => any)
    -
    -

    Type declaration

    -
    -
    - -
    stackTraceLimit: number
    -
    -

    Methods

    -
    - -
    -
    - -
      - -
    • -

      Create .stack property on a target object

      -
      -
      -

      Parameters

      -
        -
      • -
        targetObject: object
      • -
      • -
        Optional constructorOpt: Function
      -

      Returns void

    -
    - -
    -
    -
    -

    Generated using TypeDoc

    -
    \ No newline at end of file +LiquidError | liquidjs

    Class LiquidErrorAbstract

    Hierarchy (view full)

    Constructors

    Properties

    context: string = ''
    message: string
    name: string
    stack?: string
    token: Token
    prepareStackTrace?: ((err: Error, stackTraces: CallSite[]) => any)

    Optional override for formatting stack traces

    +
    stackTraceLimit: number

    Methods

    • Create .stack property on a target object

      +

      Parameters

      • targetObject: object
      • OptionalconstructorOpt: Function

      Returns void

    diff --git a/api/classes/LiquidTag.html b/api/classes/LiquidTag.html index defd10afd..9cd1feeed 100644 --- a/api/classes/LiquidTag.html +++ b/api/classes/LiquidTag.html @@ -1,153 +1,8 @@ -LiquidTag | liquidjs
    -
    - -
    -
    -
    -
    - -

    Class LiquidTag

    -
    -

    Hierarchy

    -
      -
    • Tag -
        -
      • LiquidTag
    -
    -
    -
    - -
    -
    -

    Constructors

    -
    -
    -

    Properties

    -
    -
    -

    Methods

    -
    -
    -

    Constructors

    -
    - -
    -
    -

    Properties

    -
    - -
    liquid: Liquid
    -
    - -
    name: string
    -
    - -
    templates: Template[]
    -
    - -
    token: TagToken
    -
    - -
    tokenizer: Tokenizer
    -
    -

    Methods

    -
    - -
    -
    -
    -

    Generated using TypeDoc

    -
    \ No newline at end of file +LiquidTag | liquidjs

    Class LiquidTag

    Hierarchy (view full)

    Constructors

    Properties

    Methods

    Constructors

    Properties

    liquid: Liquid
    name: string
    templates: Template[]
    token: TagToken
    tokenizer: Tokenizer

    Methods

    diff --git a/api/classes/Output.html b/api/classes/Output.html index 78d687da8..f67cf27e5 100644 --- a/api/classes/Output.html +++ b/api/classes/Output.html @@ -1,130 +1,5 @@ -Output | liquidjs
    -
    - -
    -
    -
    -
    - -

    Class Output

    -
    -

    Hierarchy

    -
      -
    • TemplateImpl<OutputToken> -
        -
      • Output
    -
    -

    Implements

    -
    -
    -
    -
    - -
    -
    -

    Constructors

    -
    -
    -

    Properties

    -
    -
    -

    Methods

    -
    -
    -

    Constructors

    -
    - -
    -
    -

    Properties

    -
    - -
    token: OutputToken
    -
    - -
    value: Value
    -
    -

    Methods

    -
    - -
    -
    -
    -

    Generated using TypeDoc

    -
    \ No newline at end of file +Output | liquidjs

    Class Output

    Hierarchy (view full)

    Implements

    Constructors

    Properties

    Methods

    Constructors

    Properties

    value: Value

    Methods

    diff --git a/api/classes/ParseError.html b/api/classes/ParseError.html index 8dab266c5..18969b938 100644 --- a/api/classes/ParseError.html +++ b/api/classes/ParseError.html @@ -1,214 +1,15 @@ -ParseError | liquidjs
    -
    - -
    -
    -
    -
    - -

    Class ParseError

    -
    -

    Hierarchy

    -
    -
    -
    -
    - -
    -
    -

    Constructors

    -
    -
    -

    Properties

    -
    -
    -

    Methods

    -
    -
    -

    Constructors

    -
    - -
    -
    -

    Properties

    -
    - -
    context: string = ''
    -
    - -
    message: string
    -
    - -
    name: string
    -
    - -
    stack?: string
    -
    - -
    token: Token
    -
    - -
    prepareStackTrace?: ((err: Error, stackTraces: CallSite[]) => any)
    -
    -

    Type declaration

    -
    -
    - -
    stackTraceLimit: number
    -
    -

    Methods

    -
    - -
    -
    - -
      - -
    • -

      Create .stack property on a target object

      -
      -
      -

      Parameters

      -
        -
      • -
        targetObject: object
      • -
      • -
        Optional constructorOpt: Function
      -

      Returns void

    -
    - -
    -
    -
    -

    Generated using TypeDoc

    -
    \ No newline at end of file +ParseError | liquidjs

    Class ParseError

    Hierarchy (view full)

    Constructors

    Properties

    context: string = ''
    message: string
    name: string
    stack?: string
    token: Token
    prepareStackTrace?: ((err: Error, stackTraces: CallSite[]) => any)

    Optional override for formatting stack traces

    +
    stackTraceLimit: number

    Methods

    • Create .stack property on a target object

      +

      Parameters

      • targetObject: object
      • OptionalconstructorOpt: Function

      Returns void

    diff --git a/api/classes/ParseStream.html b/api/classes/ParseStream.html index ee916869c..83ee501fa 100644 --- a/api/classes/ParseStream.html +++ b/api/classes/ParseStream.html @@ -1,204 +1,5 @@ -ParseStream | liquidjs
    -
    - -
    -
    -
    -
    - -

    Class ParseStream<T>

    -
    -

    Type Parameters

    -
    -
    -

    Hierarchy

    -
      -
    • ParseStream
    -
    -
    -
    - -
    -
    -

    Constructors

    -
    -
    -

    Properties

    -
    -
    -

    Methods

    -
    -
    -

    Constructors

    -
    - -
    -
    -

    Properties

    -
    - -
    handlers: Record<string, ((arg: any) => void)> = {}
    -
    - -
    parseToken: ParseToken<T>
    -
    - -
    stopRequested: boolean = false
    -
    - -
    tokens: T[]
    -
    -

    Methods

    -
    - -
    -
    - -
    -
    - -
    -
    - -
      - -
    • -
      -

      Type Parameters

      -
      -
      -

      Parameters

      -
        -
      • -
        event: string
      • -
      • -
        Optional arg: T
      -

      Returns boolean

    -
    -
    -

    Generated using TypeDoc

    -
    \ No newline at end of file +ParseStream | liquidjs

    Class ParseStream<T>

    Type Parameters

    Constructors

    Methods

    Constructors

    Methods

    diff --git a/api/classes/RawTag.html b/api/classes/RawTag.html index 102463bc9..4209b00d9 100644 --- a/api/classes/RawTag.html +++ b/api/classes/RawTag.html @@ -1,144 +1,7 @@ -RawTag | liquidjs
    -
    - -
    -
    -
    -
    - -

    Class RawTag

    -
    -

    Hierarchy

    -
      -
    • Tag -
        -
      • RawTag
    -
    -
    -
    - -
    -
    -

    Constructors

    -
    -
    -

    Properties

    -
    -
    -

    Methods

    -
    -
    -

    Constructors

    -
    - -
    -
    -

    Properties

    -
    - -
    liquid: Liquid
    -
    - -
    name: string
    -
    - -
    token: TagToken
    -
    - -
    tokenizer: Tokenizer
    -
    - -
    tokens: TopLevelToken[] = []
    -
    -

    Methods

    -
    - -
    -
    -
    -

    Generated using TypeDoc

    -
    \ No newline at end of file +RawTag | liquidjs

    Class RawTag

    Hierarchy (view full)

    Constructors

    Properties

    Methods

    Constructors

    Properties

    liquid: Liquid
    name: string
    token: TagToken
    tokenizer: Tokenizer

    Methods

    diff --git a/api/classes/RenderError.html b/api/classes/RenderError.html index d698d01af..85cb5b1f0 100644 --- a/api/classes/RenderError.html +++ b/api/classes/RenderError.html @@ -1,214 +1,15 @@ -RenderError | liquidjs
    -
    - -
    -
    -
    -
    - -

    Class RenderError

    -
    -

    Hierarchy

    -
    -
    -
    -
    - -
    -
    -

    Constructors

    -
    -
    -

    Properties

    -
    -
    -

    Methods

    -
    -
    -

    Constructors

    -
    - -
    -
    -

    Properties

    -
    - -
    context: string = ''
    -
    - -
    message: string
    -
    - -
    name: string
    -
    - -
    stack?: string
    -
    - -
    token: Token
    -
    - -
    prepareStackTrace?: ((err: Error, stackTraces: CallSite[]) => any)
    -
    -

    Type declaration

    -
    -
    - -
    stackTraceLimit: number
    -
    -

    Methods

    -
    - -
    -
    - -
      - -
    • -

      Create .stack property on a target object

      -
      -
      -

      Parameters

      -
        -
      • -
        targetObject: object
      • -
      • -
        Optional constructorOpt: Function
      -

      Returns void

    -
    - -
    -
    -
    -

    Generated using TypeDoc

    -
    \ No newline at end of file +RenderError | liquidjs

    Class RenderError

    Hierarchy (view full)

    Constructors

    Properties

    context: string = ''
    message: string
    name: string
    stack?: string
    token: Token
    prepareStackTrace?: ((err: Error, stackTraces: CallSite[]) => any)

    Optional override for formatting stack traces

    +
    stackTraceLimit: number

    Methods

    • Create .stack property on a target object

      +

      Parameters

      • targetObject: object
      • OptionalconstructorOpt: Function

      Returns void

    diff --git a/api/classes/RenderTag.html b/api/classes/RenderTag.html index a5e5213cb..ec63cde23 100644 --- a/api/classes/RenderTag.html +++ b/api/classes/RenderTag.html @@ -1,167 +1,7 @@ -RenderTag | liquidjs
    -
    - -
    -
    -
    -
    - -

    Class RenderTag

    -
    -

    Hierarchy

    -
      -
    • Tag -
        -
      • RenderTag
    -
    -
    -
    - -
    -
    -

    Constructors

    -
    -
    -

    Properties

    -
    -
    -

    Methods

    -
    -
    -

    Constructors

    -
    - -
    -
    -

    Properties

    -
    - -
    currentFile?: string
    -
    - -
    file: ParsedFileName
    -
    - -
    hash: Hash
    -
    - -
    liquid: Liquid
    -
    - -
    name: string
    -
    - -
    token: TagToken
    -
    - -
    tokenizer: Tokenizer
    -
    -

    Methods

    -
    - -
    -
    -
    -

    Generated using TypeDoc

    -
    \ No newline at end of file +RenderTag | liquidjs

    Class RenderTag

    Hierarchy (view full)

    Constructors

    Properties

    Methods

    Constructors

    Properties

    liquid: Liquid
    name: string
    token: TagToken
    tokenizer: Tokenizer

    Methods

    diff --git a/api/classes/TablerowTag.html b/api/classes/TablerowTag.html index 303b2cd72..7221894df 100644 --- a/api/classes/TablerowTag.html +++ b/api/classes/TablerowTag.html @@ -1,174 +1,11 @@ -TablerowTag | liquidjs
    -
    - -
    -
    -
    -
    - -

    Class TablerowTag

    -
    -

    Hierarchy

    -
      -
    • Tag -
        -
      • TablerowTag
    -
    -
    -
    - -
    -
    -

    Constructors

    -
    -
    -

    Properties

    -
    -
    -

    Methods

    -
    -
    -

    Constructors

    -
    - -
    -
    -

    Properties

    -
    - -
    args: Hash
    -
    - -
    collection: ValueToken
    -
    - -
    liquid: Liquid
    -
    - -
    name: string
    -
    - -
    templates: Template[]
    -
    - -
    token: TagToken
    -
    - -
    tokenizer: Tokenizer
    -
    - -
    variable: string
    -
    -

    Methods

    -
    - -
    -
    -
    -

    Generated using TypeDoc

    -
    \ No newline at end of file +TablerowTag | liquidjs

    Class TablerowTag

    Hierarchy (view full)

    Constructors

    Properties

    Methods

    Constructors

    Properties

    args: Hash
    collection: ValueToken
    liquid: Liquid
    name: string
    templates: Template[]
    token: TagToken
    tokenizer: Tokenizer
    variable: string

    Methods

    diff --git a/api/classes/Tag.html b/api/classes/Tag.html index d8f190421..974c00595 100644 --- a/api/classes/Tag.html +++ b/api/classes/Tag.html @@ -1,168 +1,7 @@ -Tag | liquidjs
    -
    - -
    -
    -
    -
    - -

    Class TagAbstract

    -
    -

    Hierarchy

    -
    -
    -

    Implements

    -
    -
    -
    -
    - -
    -
    -

    Constructors

    -
    -
    -

    Properties

    -
    -
    -

    Methods

    -
    -
    -

    Constructors

    -
    - -
    -
    -

    Properties

    -
    - -
    liquid: Liquid
    -
    - -
    name: string
    -
    - -
    token: TagToken
    -
    - -
    tokenizer: Tokenizer
    -
    -

    Methods

    -
    - -
    -
    -
    -

    Generated using TypeDoc

    -
    \ No newline at end of file +Tag | liquidjs

    Class TagAbstract

    Hierarchy (view full)

    Implements

    Constructors

    Properties

    Methods

    Constructors

    Properties

    liquid: Liquid
    name: string
    token: TagToken
    tokenizer: Tokenizer

    Methods

    diff --git a/api/classes/TagToken.html b/api/classes/TagToken.html index a18cd6a2a..c66aa19d1 100644 --- a/api/classes/TagToken.html +++ b/api/classes/TagToken.html @@ -1,235 +1,17 @@ -TagToken | liquidjs
    -
    - -
    -
    -
    -
    - -

    Class TagToken

    -
    -

    Hierarchy

    -
      -
    • DelimitedToken -
        -
      • TagToken
    -
    -
    -
    - -
    -
    -

    Constructors

    -
    -
    -

    Properties

    -
    -
    -

    Accessors

    -
    -
    -

    Methods

    -
    -
    -

    Constructors

    -
    - -
      - -
    • -
      -

      Parameters

      -
        -
      • -
        input: string
      • -
      • -
        begin: number
      • -
      • -
        end: number
      • -
      • -
        options: NormalizedFullOptions
      • -
      • -
        Optional file: string
      -

      Returns TagToken

    -
    -

    Properties

    -
    - -
    begin: number
    -
    - -
    contentRange: [number, number]
    -
    - -
    end: number
    -
    - -
    file?: string
    -
    - -
    input: string
    -
    - -
    kind: TokenKind
    -
    - -
    name: string
    -
    - -
    tokenizer: Tokenizer
    -
    - -
    trimLeft: boolean = false
    -
    - -
    trimRight: boolean = false
    -
    -

    Accessors

    -
    - -
    -
    - -
    -
    -

    Methods

    -
    - -
      - -
    • -

      Returns number[]

    -
    - -
      - -
    • -

      Returns string

    -
    - -
    -
    -
    -

    Generated using TypeDoc

    -
    \ No newline at end of file +TagToken | liquidjs

    Class TagToken

    Hierarchy (view full)

    Constructors

    Properties

    begin: number
    contentRange: [number, number]
    end: number
    file?: string
    input: string
    kind: TokenKind
    name: string
    tokenizer: Tokenizer
    trimLeft: boolean = false
    trimRight: boolean = false

    Accessors

    Methods

    diff --git a/api/classes/Token.html b/api/classes/Token.html index 1c89dc1c4..af1081473 100644 --- a/api/classes/Token.html +++ b/api/classes/Token.html @@ -1,160 +1,10 @@ -Token | liquidjs
    -
    - -
    -
    -
    -
    - -

    Class TokenAbstract

    -
    -

    Hierarchy

    -
      -
    • Token
    -
    -
    -
    - -
    -
    -

    Constructors

    -
    -
    -

    Properties

    -
    -
    -

    Methods

    -
    -
    -

    Constructors

    -
    - -
      - -
    • -
      -

      Parameters

      -
        -
      • -
        kind: TokenKind
      • -
      • -
        input: string
      • -
      • -
        begin: number
      • -
      • -
        end: number
      • -
      • -
        Optional file: string
      -

      Returns Token

    -
    -

    Properties

    -
    - -
    begin: number
    -
    - -
    end: number
    -
    - -
    file?: string
    -
    - -
    input: string
    -
    - -
    kind: TokenKind
    -
    -

    Methods

    -
    - -
    -
    - -
    -
    - -
    -
    -
    -

    Generated using TypeDoc

    -
    \ No newline at end of file +Token | liquidjs

    Class TokenAbstract

    Hierarchy (view full)

    Constructors

    Properties

    Methods

    Constructors

    Properties

    begin: number
    end: number
    file?: string
    input: string
    kind: TokenKind

    Methods

    diff --git a/api/classes/TokenizationError.html b/api/classes/TokenizationError.html index 2044bebe2..4e083e270 100644 --- a/api/classes/TokenizationError.html +++ b/api/classes/TokenizationError.html @@ -1,214 +1,15 @@ -TokenizationError | liquidjs
    -
    - -
    -
    -
    -
    - -

    Class TokenizationError

    -
    -

    Hierarchy

    -
    -
    -
    -
    - -
    -
    -

    Constructors

    -
    -
    -

    Properties

    -
    -
    -

    Methods

    -
    -
    -

    Constructors

    -
    - -
    -
    -

    Properties

    -
    - -
    context: string = ''
    -
    - -
    message: string
    -
    - -
    name: string
    -
    - -
    stack?: string
    -
    - -
    token: Token
    -
    - -
    prepareStackTrace?: ((err: Error, stackTraces: CallSite[]) => any)
    -
    -

    Type declaration

    -
    -
    - -
    stackTraceLimit: number
    -
    -

    Methods

    -
    - -
    -
    - -
      - -
    • -

      Create .stack property on a target object

      -
      -
      -

      Parameters

      -
        -
      • -
        targetObject: object
      • -
      • -
        Optional constructorOpt: Function
      -

      Returns void

    -
    - -
    -
    -
    -

    Generated using TypeDoc

    -
    \ No newline at end of file +TokenizationError | liquidjs

    Class TokenizationError

    Hierarchy (view full)

    Constructors

    Properties

    context: string = ''
    message: string
    name: string
    stack?: string
    token: Token
    prepareStackTrace?: ((err: Error, stackTraces: CallSite[]) => any)

    Optional override for formatting stack traces

    +
    stackTraceLimit: number

    Methods

    • Create .stack property on a target object

      +

      Parameters

      • targetObject: object
      • OptionalconstructorOpt: Function

      Returns void

    diff --git a/api/classes/Tokenizer.html b/api/classes/Tokenizer.html index 36719275d..6e1fc6504 100644 --- a/api/classes/Tokenizer.html +++ b/api/classes/Tokenizer.html @@ -1,713 +1,50 @@ -Tokenizer | liquidjs
    -
    - -
    -
    -
    -
    - -

    Class Tokenizer

    -
    -

    Hierarchy

    -
      -
    • Tokenizer
    -
    -
    -
    - -
    -
    -

    Constructors

    -
    - -
      - -
    • -
      -

      Parameters

      -
        -
      • -
        input: string
      • -
      • -
        operators: Operators = defaultOptions.operators
      • -
      • -
        Optional file: string
      • -
      • -
        Optional range: [number, number]
      -

      Returns Tokenizer

    -
    -

    Properties

    -
    - -
    N: number
    -
    - -
    file?: string
    -
    - -
    input: string
    -
    - -
    literalTrie: Trie<LiteralValue>
    -
    - -
    opTrie: Trie<OperatorHandler>
    -
    - -
    p: number
    -
    - -
    rawBeginAt: number = -1
    -
    -

    Methods

    -
    - -
    -
    - -
      - -
    • -
      -

      Parameters

      -
        -
      • -
        pred: unknown
      • -
      • -
        msg: string | (() => string)
      • -
      • -
        Optional pos: number
      -

      Returns void

    -
    - -
    -
    - -
    -
    - -
    -
    - -
    -
    - -
    -
    - -
    -
    - -
    -
    - -
    -
    - -
    -
    - -
    -
    - -
    -
    - -
    -
    - -
    -
    - -
    -
    - -
      - -
    • -
      -

      Parameters

      -
        -
      • -
        stopStrings: string[]
      -

      Returns HTMLToken

    -
    - -
      - -
    • -
      -

      Parameters

      -
        -
      • -
        Optional jekyllStyle: boolean
      -

      Returns undefined | HashToken

    -
    - -
      - -
    • -
      -

      Parameters

      -
        -
      • -
        Optional jekyllStyle: boolean
      -

      Returns HashToken[]

    -
    - -
    -
    - -
      - -
    • -
      -

      Parameters

      -
        -
      • -
        options: NormalizedFullOptions
      -

      Returns undefined | LiquidTagToken

    -
    - -
      - -
    • -
      -

      Parameters

      -
        -
      • -
        options: NormalizedFullOptions = defaultOptions
      -

      Returns LiquidTagToken[]

    -
    - -
    -
    - -
      - -
    • -

      Returns undefined | IdentifierToken

    -
    - -
    -
    - -
    -
    - -
      - -
    • -
      -

      Parameters

      -
        -
      • -
        options: NormalizedFullOptions = defaultOptions
      -

      Returns OutputToken

    -
    - -
    -
    - -
    -
    - -
    -
    - -
    -
    - -
    -
    - -
    -
    - -
    -
    - -
      - -
    • -
      -

      Parameters

      -
        -
      • -
        delimiter: string
      • -
      • -
        respectQuoted: boolean = false
      -

      Returns number

    -
    - -
    -
    - -
    -
    - -
    -
    - -
    -
    - -
      - -
    • -
      -

      Deprecated

      use #readIdentifier instead

      -
      -

      Returns IdentifierToken

    -
    - -
    -
    - -
    -
    - -
    -
    - -
    -
    -
    -

    Generated using TypeDoc

    -
    \ No newline at end of file +Tokenizer | liquidjs

    Class Tokenizer

    Constructors

    Properties

    N: number
    file?: string
    input: string
    p: number

    Methods

    • Parameters

      • pred: unknown
      • msg: string | (() => string)
      • Optionalpos: number

      Returns void

    • Parameters

      • delimiter: string
      • respectQuoted: boolean = false

      Returns number

    diff --git a/api/classes/UndefinedVariableError.html b/api/classes/UndefinedVariableError.html index 691caa194..3801e0398 100644 --- a/api/classes/UndefinedVariableError.html +++ b/api/classes/UndefinedVariableError.html @@ -1,214 +1,15 @@ -UndefinedVariableError | liquidjs
    -
    - -
    -
    -
    -
    - -

    Class UndefinedVariableError

    -
    -

    Hierarchy

    -
    -
    -
    -
    - -
    -
    -

    Constructors

    -
    -
    -

    Properties

    -
    -
    -

    Methods

    -
    -
    -

    Constructors

    -
    - -
    -
    -

    Properties

    -
    - -
    context: string = ''
    -
    - -
    message: string
    -
    - -
    name: string
    -
    - -
    stack?: string
    -
    - -
    token: Token
    -
    - -
    prepareStackTrace?: ((err: Error, stackTraces: CallSite[]) => any)
    -
    -

    Type declaration

    -
    -
    - -
    stackTraceLimit: number
    -
    -

    Methods

    -
    - -
    -
    - -
      - -
    • -

      Create .stack property on a target object

      -
      -
      -

      Parameters

      -
        -
      • -
        targetObject: object
      • -
      • -
        Optional constructorOpt: Function
      -

      Returns void

    -
    - -
    -
    -
    -

    Generated using TypeDoc

    -
    \ No newline at end of file +UndefinedVariableError | liquidjs

    Class UndefinedVariableError

    Hierarchy (view full)

    Constructors

    Properties

    context: string = ''
    message: string
    name: string
    stack?: string
    token: Token
    prepareStackTrace?: ((err: Error, stackTraces: CallSite[]) => any)

    Optional override for formatting stack traces

    +
    stackTraceLimit: number

    Methods

    • Create .stack property on a target object

      +

      Parameters

      • targetObject: object
      • OptionalconstructorOpt: Function

      Returns void

    diff --git a/api/classes/UnlessTag.html b/api/classes/UnlessTag.html index fe121ce94..92969b7ed 100644 --- a/api/classes/UnlessTag.html +++ b/api/classes/UnlessTag.html @@ -1,160 +1,9 @@ -UnlessTag | liquidjs
    -
    - -
    -
    -
    -
    - -

    Class UnlessTag

    -
    -

    Hierarchy

    -
      -
    • Tag -
        -
      • UnlessTag
    -
    -
    -
    - -
    -
    -

    Constructors

    -
    -
    -

    Properties

    -
    -
    -

    Methods

    -
    -
    -

    Constructors

    -
    - -
    -
    -

    Properties

    -
    - -
    branches: {
        templates: Template[];
        test: ((val: any, ctx: Context) => boolean);
        value: Value;
    }[] = []
    -
    - -
    elseTemplates: Template[] = []
    -
    - -
    liquid: Liquid
    -
    - -
    name: string
    -
    - -
    token: TagToken
    -
    - -
    tokenizer: Tokenizer
    -
    -

    Methods

    -
    - -
    -
    -
    -

    Generated using TypeDoc

    -
    \ No newline at end of file +UnlessTag | liquidjs

    Class UnlessTag

    Hierarchy (view full)

    Constructors

    Properties

    Methods

    Constructors

    Properties

    branches: {
        templates: Template[];
        test: ((val: any, ctx: Context) => boolean);
        value: Value;
    }[] = []
    elseTemplates: Template[] = []
    liquid: Liquid
    name: string
    token: TagToken
    tokenizer: Tokenizer

    Methods

    diff --git a/api/classes/Value.html b/api/classes/Value.html index d722a52c7..f646bc076 100644 --- a/api/classes/Value.html +++ b/api/classes/Value.html @@ -1,137 +1,5 @@ -Value | liquidjs
    -
    - -
    -
    -
    -
    - -

    Class Value

    -
    -

    Hierarchy

    -
      -
    • Value
    -
    -
    -
    - -
    -
    -

    Constructors

    -
    -
    -

    Properties

    -
    -
    -

    Methods

    -
    -
    -

    Constructors

    -
    - -
    -
    -

    Properties

    -
    - -
    filters: Filter[] = []
    -
    - -
    initial: Expression
    -
    -

    Methods

    -
    - -
    -
    - -
      - -
    • -
      -

      Parameters

      -
        -
      • -
        ctx: Context
      • -
      • -
        Optional lenient: boolean
      -

      Returns Generator<unknown, unknown, unknown>

    -
    -
    -

    Generated using TypeDoc

    -
    \ No newline at end of file +Value | liquidjs

    Class Value

    Constructors

    Properties

    Methods

    Constructors

    Properties

    filters: Filter[] = []
    initial: Expression

    Methods

    diff --git a/api/classes/_internal_.BlankDrop.html b/api/classes/_internal_.BlankDrop.html new file mode 100644 index 000000000..782f3146b --- /dev/null +++ b/api/classes/_internal_.BlankDrop.html @@ -0,0 +1,10 @@ +BlankDrop | liquidjs

    Hierarchy (view full)

    Constructors

    Methods

    diff --git a/api/classes/_internal_.BlockDrop.html b/api/classes/_internal_.BlockDrop.html new file mode 100644 index 000000000..e0ad06b0a --- /dev/null +++ b/api/classes/_internal_.BlockDrop.html @@ -0,0 +1,6 @@ +BlockDrop | liquidjs

    Hierarchy (view full)

    Constructors

    Methods

    Constructors

    Methods

    diff --git a/api/classes/_internal_.DelimitedToken.html b/api/classes/_internal_.DelimitedToken.html new file mode 100644 index 000000000..58ff76359 --- /dev/null +++ b/api/classes/_internal_.DelimitedToken.html @@ -0,0 +1,14 @@ +DelimitedToken | liquidjs

    Class DelimitedTokenAbstract

    Hierarchy (view full)

    Constructors

    Properties

    Accessors

    Methods

    Constructors

    Properties

    begin: number
    contentRange: [number, number]
    end: number
    file?: string
    input: string
    kind: TokenKind
    trimLeft: boolean = false
    trimRight: boolean = false

    Accessors

    Methods

    diff --git a/api/classes/_internal_.EmptyDrop.html b/api/classes/_internal_.EmptyDrop.html new file mode 100644 index 000000000..acfe5b85f --- /dev/null +++ b/api/classes/_internal_.EmptyDrop.html @@ -0,0 +1,10 @@ +EmptyDrop | liquidjs

    Hierarchy (view full)

    Implements

    Constructors

    Methods

    diff --git a/api/classes/_internal_.FilterToken.html b/api/classes/_internal_.FilterToken.html new file mode 100644 index 000000000..b7db25f05 --- /dev/null +++ b/api/classes/_internal_.FilterToken.html @@ -0,0 +1,12 @@ +FilterToken | liquidjs

    Hierarchy (view full)

    Constructors

    Properties

    Methods

    Constructors

    Properties

    args: FilterArg[]
    begin: number
    end: number
    file?: string
    input: string
    kind: TokenKind
    name: string

    Methods

    diff --git a/api/classes/_internal_.FilteredValueToken.html b/api/classes/_internal_.FilteredValueToken.html new file mode 100644 index 000000000..7d066f3ce --- /dev/null +++ b/api/classes/_internal_.FilteredValueToken.html @@ -0,0 +1,15 @@ +FilteredValueToken | liquidjs

    Class FilteredValueToken

    value expression with optional filters +e.g. +{% assign foo="bar" | append: "coo" %}

    +

    Hierarchy (view full)

    Constructors

    Properties

    Methods

    Constructors

    Properties

    begin: number
    end: number
    file?: string
    filters: FilterToken[]
    initial: Expression
    input: string
    kind: TokenKind

    Methods

    diff --git a/api/classes/_internal_.HTML.html b/api/classes/_internal_.HTML.html new file mode 100644 index 000000000..00bc69773 --- /dev/null +++ b/api/classes/_internal_.HTML.html @@ -0,0 +1,4 @@ +HTML | liquidjs

    Hierarchy (view full)

    Implements

    Constructors

    Properties

    Methods

    Constructors

    Properties

    token: HTMLToken

    Methods

    diff --git a/api/classes/_internal_.HTMLToken.html b/api/classes/_internal_.HTMLToken.html new file mode 100644 index 000000000..f348cb70b --- /dev/null +++ b/api/classes/_internal_.HTMLToken.html @@ -0,0 +1,13 @@ +HTMLToken | liquidjs

    Hierarchy (view full)

    Constructors

    Properties

    begin: number
    end: number
    file?: string
    input: string
    kind: TokenKind
    trimLeft: number = 0
    trimRight: number = 0

    Methods

    diff --git a/api/classes/_internal_.HashToken.html b/api/classes/_internal_.HashToken.html new file mode 100644 index 000000000..de967f066 --- /dev/null +++ b/api/classes/_internal_.HashToken.html @@ -0,0 +1,12 @@ +HashToken | liquidjs

    Hierarchy (view full)

    Constructors

    Properties

    Methods

    Constructors

    Properties

    begin: number
    end: number
    file?: string
    input: string
    kind: TokenKind
    value?: ValueToken

    Methods

    diff --git a/api/classes/_internal_.IdentifierToken.html b/api/classes/_internal_.IdentifierToken.html new file mode 100644 index 000000000..95ee92156 --- /dev/null +++ b/api/classes/_internal_.IdentifierToken.html @@ -0,0 +1,11 @@ +IdentifierToken | liquidjs

    Hierarchy (view full)

    Constructors

    Properties

    Methods

    Constructors

    Properties

    begin: number
    content: string
    end: number
    file?: string
    input: string
    kind: TokenKind

    Methods

    diff --git a/api/classes/_internal_.Limiter.html b/api/classes/_internal_.Limiter.html new file mode 100644 index 000000000..985823c00 --- /dev/null +++ b/api/classes/_internal_.Limiter.html @@ -0,0 +1,4 @@ +Limiter | liquidjs

    Constructors

    Methods

    Constructors

    Methods

    diff --git a/api/classes/_internal_.LiquidTagToken.html b/api/classes/_internal_.LiquidTagToken.html new file mode 100644 index 000000000..73d2231c9 --- /dev/null +++ b/api/classes/_internal_.LiquidTagToken.html @@ -0,0 +1,18 @@ +LiquidTagToken | liquidjs

    LiquidTagToken is different from TagToken by not having delimiters {% or %}

    +

    Hierarchy (view full)

    Constructors

    Properties

    args: string
    begin: number
    contentRange: [number, number]
    end: number
    file?: string
    input: string
    kind: TokenKind
    name: string
    tokenizer: Tokenizer
    trimLeft: boolean = false
    trimRight: boolean = false

    Accessors

    Methods

    diff --git a/api/classes/_internal_.LiteralToken.html b/api/classes/_internal_.LiteralToken.html new file mode 100644 index 000000000..7ddc4844e --- /dev/null +++ b/api/classes/_internal_.LiteralToken.html @@ -0,0 +1,12 @@ +LiteralToken | liquidjs

    Hierarchy (view full)

    Constructors

    Properties

    Methods

    Constructors

    Properties

    begin: number
    content: LiteralValue
    end: number
    file?: string
    input: string
    kind: TokenKind
    literal: string

    Methods

    diff --git a/api/classes/_internal_.Loader.html b/api/classes/_internal_.Loader.html new file mode 100644 index 000000000..144269d55 --- /dev/null +++ b/api/classes/_internal_.Loader.html @@ -0,0 +1,5 @@ +Loader | liquidjs

    Constructors

    Properties

    Methods

    Constructors

    Properties

    shouldLoadRelative: ((referencedFile: string) => boolean)

    Methods

    • Parameters

      • file: string
      • dirs: string[]
      • OptionalcurrentFile: string
      • OptionalenforceRoot: boolean

      Returns Generator<string, void, unknown>

    diff --git a/api/classes/_internal_.NullDrop.html b/api/classes/_internal_.NullDrop.html new file mode 100644 index 000000000..b16d2918b --- /dev/null +++ b/api/classes/_internal_.NullDrop.html @@ -0,0 +1,10 @@ +NullDrop | liquidjs

    Hierarchy (view full)

    Implements

    Constructors

    Methods

    diff --git a/api/classes/_internal_.NumberToken.html b/api/classes/_internal_.NumberToken.html new file mode 100644 index 000000000..10ab9f217 --- /dev/null +++ b/api/classes/_internal_.NumberToken.html @@ -0,0 +1,11 @@ +NumberToken | liquidjs

    Hierarchy (view full)

    Constructors

    Properties

    Methods

    Constructors

    Properties

    begin: number
    content: number
    end: number
    file?: string
    input: string
    kind: TokenKind

    Methods

    diff --git a/api/classes/_internal_.OperatorToken.html b/api/classes/_internal_.OperatorToken.html new file mode 100644 index 000000000..5cf0cf011 --- /dev/null +++ b/api/classes/_internal_.OperatorToken.html @@ -0,0 +1,12 @@ +OperatorToken | liquidjs

    Hierarchy (view full)

    Constructors

    Properties

    Methods

    Constructors

    Properties

    begin: number
    end: number
    file?: string
    input: string
    kind: TokenKind
    operator: string

    Methods

    diff --git a/api/classes/_internal_.OutputToken.html b/api/classes/_internal_.OutputToken.html new file mode 100644 index 000000000..f9147a20d --- /dev/null +++ b/api/classes/_internal_.OutputToken.html @@ -0,0 +1,14 @@ +OutputToken | liquidjs

    Hierarchy (view full)

    Constructors

    Properties

    Accessors

    Methods

    Constructors

    Properties

    begin: number
    contentRange: [number, number]
    end: number
    file?: string
    input: string
    kind: TokenKind
    trimLeft: boolean = false
    trimRight: boolean = false

    Accessors

    Methods

    diff --git a/api/classes/_internal_.Parser.html b/api/classes/_internal_.Parser.html new file mode 100644 index 000000000..455b434f4 --- /dev/null +++ b/api/classes/_internal_.Parser.html @@ -0,0 +1,7 @@ +Parser | liquidjs

    Constructors

    Properties

    Methods

    Constructors

    Properties

    parseFile: ((file: string, sync?: boolean, type?: LookupType, currentFile?: string) => Generator<unknown, Template[], string | Template[]>)

    Methods

    diff --git a/api/classes/_internal_.PropertyAccessToken.html b/api/classes/_internal_.PropertyAccessToken.html new file mode 100644 index 000000000..eb147e633 --- /dev/null +++ b/api/classes/_internal_.PropertyAccessToken.html @@ -0,0 +1,12 @@ +PropertyAccessToken | liquidjs

    Class PropertyAccessToken

    Hierarchy (view full)

    Constructors

    Properties

    Methods

    Constructors

    Properties

    begin: number
    end: number
    file?: string
    input: string
    kind: TokenKind
    variable:
        | undefined
        | RangeToken
        | LiteralToken
        | QuotedToken
        | NumberToken

    Methods

    diff --git a/api/classes/_internal_.QuotedToken.html b/api/classes/_internal_.QuotedToken.html new file mode 100644 index 000000000..5fe079098 --- /dev/null +++ b/api/classes/_internal_.QuotedToken.html @@ -0,0 +1,11 @@ +QuotedToken | liquidjs

    Hierarchy (view full)

    Constructors

    Properties

    Methods

    Constructors

    Properties

    begin: number
    content: string
    end: number
    file?: string
    input: string
    kind: TokenKind

    Methods

    diff --git a/api/classes/_internal_.RangeToken.html b/api/classes/_internal_.RangeToken.html new file mode 100644 index 000000000..b890b8001 --- /dev/null +++ b/api/classes/_internal_.RangeToken.html @@ -0,0 +1,12 @@ +RangeToken | liquidjs

    Hierarchy (view full)

    Constructors

    Properties

    Methods

    Constructors

    Properties

    begin: number
    end: number
    file?: string
    input: string
    kind: TokenKind

    Methods

    diff --git a/api/classes/_internal_.Render.html b/api/classes/_internal_.Render.html new file mode 100644 index 000000000..716093c49 --- /dev/null +++ b/api/classes/_internal_.Render.html @@ -0,0 +1,4 @@ +Render | liquidjs

    Constructors

    Methods

    diff --git a/api/classes/_internal_.TemplateImpl.html b/api/classes/_internal_.TemplateImpl.html new file mode 100644 index 000000000..d27da69cc --- /dev/null +++ b/api/classes/_internal_.TemplateImpl.html @@ -0,0 +1,3 @@ +TemplateImpl | liquidjs

    Class TemplateImpl<T>Abstract

    Type Parameters

    • T

    Hierarchy (view full)

    Constructors

    Properties

    Constructors

    Properties

    token: T
    diff --git a/api/enums/TokenKind.html b/api/enums/TokenKind.html index aec2735ef..b13e7f494 100644 --- a/api/enums/TokenKind.html +++ b/api/enums/TokenKind.html @@ -1,156 +1,15 @@ -TokenKind | liquidjs
    -
    - -
    -
    -
    -
    - -

    Enumeration TokenKind

    -
    -
    -
    - -
    -
    -

    Enumeration Members

    -
    - -
    Delimited: 12
    -
    - -
    Filter: 32
    -
    - -
    FilteredValue: 4096
    -
    - -
    HTML: 16
    -
    - -
    Hash: 64
    -
    - -
    Literal: 2
    -
    - -
    Number: 1
    -
    - -
    Operator: 2048
    -
    - -
    Output: 8
    -
    - -
    PropertyAccess: 128
    -
    - -
    Quoted: 1024
    -
    - -
    Range: 512
    -
    - -
    Tag: 4
    -
    - -
    Word: 256
    -
    -
    -

    Generated using TypeDoc

    -
    \ No newline at end of file +TokenKind | liquidjs

    Enumeration TokenKind

    Enumeration Members

    Delimited: 12
    Filter: 32
    FilteredValue: 4096
    HTML: 16
    Hash: 64
    Literal: 2
    Number: 1
    Operator: 2048
    Output: 8
    PropertyAccess: 128
    Quoted: 1024
    Range: 512
    Tag: 4
    Word: 256
    diff --git a/api/enums/_internal_.LookupType.html b/api/enums/_internal_.LookupType.html new file mode 100644 index 000000000..1f4b078fd --- /dev/null +++ b/api/enums/_internal_.LookupType.html @@ -0,0 +1,4 @@ +LookupType | liquidjs

    Enumeration LookupType

    Enumeration Members

    Enumeration Members

    Layouts: "layouts"
    Partials: "partials"
    Root: "root"
    diff --git a/api/functions/TypeGuards.isDelimitedToken.html b/api/functions/TypeGuards.isDelimitedToken.html index ac1e2376d..8603c62e9 100644 --- a/api/functions/TypeGuards.isDelimitedToken.html +++ b/api/functions/TypeGuards.isDelimitedToken.html @@ -1,68 +1 @@ -isDelimitedToken | liquidjs
    -
    - -
    -
    -
    -
    - -

    Function isDelimitedToken

    -
    -
      - -
    • -
      -

      Parameters

      -
        -
      • -
        val: any
      -

      Returns val is DelimitedToken

    -
    -
    -

    Generated using TypeDoc

    -
    \ No newline at end of file +isDelimitedToken | liquidjs

    Function isDelimitedToken

    diff --git a/api/functions/TypeGuards.isHTMLToken.html b/api/functions/TypeGuards.isHTMLToken.html index 9eae75ddc..87ab5cf2e 100644 --- a/api/functions/TypeGuards.isHTMLToken.html +++ b/api/functions/TypeGuards.isHTMLToken.html @@ -1,68 +1 @@ -isHTMLToken | liquidjs
    -
    - -
    -
    -
    -
    - -

    Function isHTMLToken

    -
    -
      - -
    • -
      -

      Parameters

      -
        -
      • -
        val: any
      -

      Returns val is HTMLToken

    -
    -
    -

    Generated using TypeDoc

    -
    \ No newline at end of file +isHTMLToken | liquidjs

    Function isHTMLToken

    diff --git a/api/functions/TypeGuards.isLiteralToken.html b/api/functions/TypeGuards.isLiteralToken.html index f4931e837..fe38e0c16 100644 --- a/api/functions/TypeGuards.isLiteralToken.html +++ b/api/functions/TypeGuards.isLiteralToken.html @@ -1,68 +1 @@ -isLiteralToken | liquidjs
    -
    - -
    -
    -
    -
    - -

    Function isLiteralToken

    -
    -
      - -
    • -
      -

      Parameters

      -
        -
      • -
        val: any
      -

      Returns val is LiteralToken

    -
    -
    -

    Generated using TypeDoc

    -
    \ No newline at end of file +isLiteralToken | liquidjs

    Function isLiteralToken

    diff --git a/api/functions/TypeGuards.isNumberToken.html b/api/functions/TypeGuards.isNumberToken.html index be90415ee..36f77c72a 100644 --- a/api/functions/TypeGuards.isNumberToken.html +++ b/api/functions/TypeGuards.isNumberToken.html @@ -1,68 +1 @@ -isNumberToken | liquidjs
    -
    - -
    -
    -
    -
    - -

    Function isNumberToken

    -
    -
      - -
    • -
      -

      Parameters

      -
        -
      • -
        val: any
      -

      Returns val is NumberToken

    -
    -
    -

    Generated using TypeDoc

    -
    \ No newline at end of file +isNumberToken | liquidjs

    Function isNumberToken

    diff --git a/api/functions/TypeGuards.isOperatorToken.html b/api/functions/TypeGuards.isOperatorToken.html index 829572d4b..c44351134 100644 --- a/api/functions/TypeGuards.isOperatorToken.html +++ b/api/functions/TypeGuards.isOperatorToken.html @@ -1,68 +1 @@ -isOperatorToken | liquidjs
    -
    - -
    -
    -
    -
    - -

    Function isOperatorToken

    -
    -
      - -
    • -
      -

      Parameters

      -
        -
      • -
        val: any
      -

      Returns val is OperatorToken

    -
    -
    -

    Generated using TypeDoc

    -
    \ No newline at end of file +isOperatorToken | liquidjs

    Function isOperatorToken

    diff --git a/api/functions/TypeGuards.isOutputToken.html b/api/functions/TypeGuards.isOutputToken.html index 29a38fdfa..bf530b32c 100644 --- a/api/functions/TypeGuards.isOutputToken.html +++ b/api/functions/TypeGuards.isOutputToken.html @@ -1,68 +1 @@ -isOutputToken | liquidjs
    -
    - -
    -
    -
    -
    - -

    Function isOutputToken

    -
    -
      - -
    • -
      -

      Parameters

      -
        -
      • -
        val: any
      -

      Returns val is OutputToken

    -
    -
    -

    Generated using TypeDoc

    -
    \ No newline at end of file +isOutputToken | liquidjs

    Function isOutputToken

    diff --git a/api/functions/TypeGuards.isPropertyAccessToken.html b/api/functions/TypeGuards.isPropertyAccessToken.html index 7a1d1fd29..7523fbc1d 100644 --- a/api/functions/TypeGuards.isPropertyAccessToken.html +++ b/api/functions/TypeGuards.isPropertyAccessToken.html @@ -1,68 +1 @@ -isPropertyAccessToken | liquidjs
    -
    - -
    -
    -
    -
    - -

    Function isPropertyAccessToken

    -
    -
      - -
    • -
      -

      Parameters

      -
        -
      • -
        val: any
      -

      Returns val is PropertyAccessToken

    -
    -
    -

    Generated using TypeDoc

    -
    \ No newline at end of file +isPropertyAccessToken | liquidjs

    Function isPropertyAccessToken

    diff --git a/api/functions/TypeGuards.isQuotedToken.html b/api/functions/TypeGuards.isQuotedToken.html index b6e3455dd..f55bf8ac5 100644 --- a/api/functions/TypeGuards.isQuotedToken.html +++ b/api/functions/TypeGuards.isQuotedToken.html @@ -1,68 +1 @@ -isQuotedToken | liquidjs
    -
    - -
    -
    -
    -
    - -

    Function isQuotedToken

    -
    -
      - -
    • -
      -

      Parameters

      -
        -
      • -
        val: any
      -

      Returns val is QuotedToken

    -
    -
    -

    Generated using TypeDoc

    -
    \ No newline at end of file +isQuotedToken | liquidjs

    Function isQuotedToken

    diff --git a/api/functions/TypeGuards.isRangeToken.html b/api/functions/TypeGuards.isRangeToken.html index b44115f94..1f371fae3 100644 --- a/api/functions/TypeGuards.isRangeToken.html +++ b/api/functions/TypeGuards.isRangeToken.html @@ -1,68 +1 @@ -isRangeToken | liquidjs
    -
    - -
    -
    -
    -
    - -

    Function isRangeToken

    -
    -
      - -
    • -
      -

      Parameters

      -
        -
      • -
        val: any
      -

      Returns val is RangeToken

    -
    -
    -

    Generated using TypeDoc

    -
    \ No newline at end of file +isRangeToken | liquidjs

    Function isRangeToken

    diff --git a/api/functions/TypeGuards.isTagToken.html b/api/functions/TypeGuards.isTagToken.html index 2d005aabb..cd6a93841 100644 --- a/api/functions/TypeGuards.isTagToken.html +++ b/api/functions/TypeGuards.isTagToken.html @@ -1,68 +1 @@ -isTagToken | liquidjs
    -
    - -
    -
    -
    -
    - -

    Function isTagToken

    -
    -
    -
    -
    -

    Generated using TypeDoc

    -
    \ No newline at end of file +isTagToken | liquidjs

    Function isTagToken

    diff --git a/api/functions/TypeGuards.isWordToken.html b/api/functions/TypeGuards.isWordToken.html index fc5a06e09..63664378b 100644 --- a/api/functions/TypeGuards.isWordToken.html +++ b/api/functions/TypeGuards.isWordToken.html @@ -1,68 +1 @@ -isWordToken | liquidjs
    -
    - -
    -
    -
    -
    - -

    Function isWordToken

    -
    -
      - -
    • -
      -

      Parameters

      -
        -
      • -
        val: any
      -

      Returns val is IdentifierToken

    -
    -
    -

    Generated using TypeDoc

    -
    \ No newline at end of file +isWordToken | liquidjs

    Function isWordToken

    diff --git a/api/functions/assert.html b/api/functions/assert.html index 8343e5b98..edab2e094 100644 --- a/api/functions/assert.html +++ b/api/functions/assert.html @@ -1,128 +1 @@ -assert | liquidjs
    -
    - -
    -
    -
    -
    - -

    Function assert

    -
    -
      - -
    • -
      -

      Type Parameters

      -
        -
      • -

        T

      -
      -

      Parameters

      -
        -
      • -
        predicate: undefined | null | T
      • -
      • -
        Optional message: string | (() => string)
      -

      Returns void

    -
    -
    -

    Generated using TypeDoc

    -
    \ No newline at end of file +assert | liquidjs

    Function assert

    • Type Parameters

      • T

      Parameters

      • predicate: undefined | null | T
      • Optionalmessage: string | (() => string)

      Returns void

    diff --git a/api/functions/createTrie.html b/api/functions/createTrie.html index 8ab69e9d4..0a6557a43 100644 --- a/api/functions/createTrie.html +++ b/api/functions/createTrie.html @@ -1,126 +1 @@ -createTrie | liquidjs
    -
    - -
    - -
    -

    Generated using TypeDoc

    -
    \ No newline at end of file +createTrie | liquidjs

    Function createTrie

    diff --git a/api/functions/evalQuotedToken.html b/api/functions/evalQuotedToken.html index 5e09f208c..9c004f8bc 100644 --- a/api/functions/evalQuotedToken.html +++ b/api/functions/evalQuotedToken.html @@ -1,121 +1 @@ -evalQuotedToken | liquidjs
    -
    - -
    - -
    -

    Generated using TypeDoc

    -
    \ No newline at end of file +evalQuotedToken | liquidjs

    Function evalQuotedToken

    diff --git a/api/functions/evalToken.html b/api/functions/evalToken.html index 34480500f..7dc08a934 100644 --- a/api/functions/evalToken.html +++ b/api/functions/evalToken.html @@ -1,125 +1 @@ -evalToken | liquidjs
    -
    - -
    -
    -
    -
    - -

    Function evalToken

    -
    -
      - -
    • -
      -

      Parameters

      -
        -
      • -
        token: undefined | Token
      • -
      • -
        ctx: Context
      • -
      • -
        lenient: boolean = false
      -

      Returns IterableIterator<unknown>

    -
    -
    -

    Generated using TypeDoc

    -
    \ No newline at end of file +evalToken | liquidjs

    Function evalToken

    diff --git a/api/functions/isFalsy.html b/api/functions/isFalsy.html index 93766f3f6..a09dc2b53 100644 --- a/api/functions/isFalsy.html +++ b/api/functions/isFalsy.html @@ -1,123 +1 @@ -isFalsy | liquidjs
    -
    - -
    - -
    -

    Generated using TypeDoc

    -
    \ No newline at end of file +isFalsy | liquidjs

    Function isFalsy

    diff --git a/api/functions/isTruthy.html b/api/functions/isTruthy.html index be8604b89..9d2ec4cc7 100644 --- a/api/functions/isTruthy.html +++ b/api/functions/isTruthy.html @@ -1,123 +1 @@ -isTruthy | liquidjs
    -
    - -
    - -
    -

    Generated using TypeDoc

    -
    \ No newline at end of file +isTruthy | liquidjs

    Function isTruthy

    diff --git a/api/functions/toPromise.html b/api/functions/toPromise.html index 2716e8bf4..7473d8711 100644 --- a/api/functions/toPromise.html +++ b/api/functions/toPromise.html @@ -1,126 +1 @@ -toPromise | liquidjs
    -
    - -
    -
    -
    -
    - -

    Function toPromise

    -
    -
      - -
    • -
      -

      Type Parameters

      -
        -
      • -

        T

      -
      -

      Parameters

      -
        -
      • -
        val: T | Generator<unknown, T, unknown> | Promise<T>
      -

      Returns Promise<T>

    -
    -
    -

    Generated using TypeDoc

    -
    \ No newline at end of file +toPromise | liquidjs

    Function toPromise

    diff --git a/api/functions/toValue.html b/api/functions/toValue.html index 3a3ac42ca..ddd960736 100644 --- a/api/functions/toValue.html +++ b/api/functions/toValue.html @@ -1,121 +1 @@ -toValue | liquidjs
    -
    - -
    - -
    -

    Generated using TypeDoc

    -
    \ No newline at end of file +toValue | liquidjs

    Function toValue

    diff --git a/api/functions/toValueSync.html b/api/functions/toValueSync.html index 23af6dc00..ae6bed23b 100644 --- a/api/functions/toValueSync.html +++ b/api/functions/toValueSync.html @@ -1,126 +1 @@ -toValueSync | liquidjs
    -
    - -
    -
    -
    -
    - -

    Function toValueSync

    -
    -
      - -
    • -
      -

      Type Parameters

      -
        -
      • -

        T

      -
      -

      Parameters

      -
        -
      • -
        val: T | Generator<unknown, T, unknown>
      -

      Returns T

    -
    -
    -

    Generated using TypeDoc

    -
    \ No newline at end of file +toValueSync | liquidjs

    Function toValueSync

    diff --git a/api/hierarchy.html b/api/hierarchy.html new file mode 100644 index 000000000..1e6efbac7 --- /dev/null +++ b/api/hierarchy.html @@ -0,0 +1 @@ +liquidjs
    diff --git a/api/index.html b/api/index.html index 2d83709bf..e4f218396 100644 --- a/api/index.html +++ b/api/index.html @@ -1,25 +1,7 @@ -liquidjs
    -
    - -
    -
    -
    -
    -

    liquidjs

    -
    - -

    liquidjs

    -
    -

    npm version +liquidjs

    liquidjs

    liquidjs

    npm version npm downloads Coverage -Build Status +Build Status DUB license semantic-release

    A simple, expressive and safe Shopify / GitHub Pages compatible template engine in pure JavaScript. @@ -30,51 +12,40 @@

  • Financial support via GitHub Sponsors, or LiquidJS on Open Collective
  • logo

    +

    Basically there're two types of Liquid syntax: tags enclosed by {% %} and outputs enclosed by {{ }}. A Liquid template looks like:

    +
    {% if username %}
    +  {{ username | append: ", welcome to LiquidJS!" | capitalize }}
    +{% endif %}
    +
    +

    A live demo is also available and here's a quick tutorial for Liquid syntax.

    +

    Install from npm in Node.js:

    +
    npm install liquidjs
    +
    - -

    What's it like?

    -
    -

    Basically there're two types of Liquid syntax: tags enclosed by {% %} and outputs enclosed by {{ }}. A Liquid template looks like:

    -
    {% if username %}
    {{ username | append: ", welcome to LiquidJS!" | capitalize }}
    {% endif %} -
    -

    A live demo is also available and here's a quick tutorial for Liquid syntax.

    - - -

    Installation

    -
    -

    Install from npm in Node.js:

    -
    npm install liquidjs
    -

    Or use the UMD bundle from jsDelivr:

    -
    <script src="https://cdn.jsdelivr.net/npm/liquidjs/dist/liquid.browser.min.js"></script>
    -
    -

    Or render directly from CLI using npx:

    -
    npx liquidjs --template 'Hello, {{ name }}!' --context '{"name": "Snake"}'
    -
    -

    For more details, refer to the Setup Guide.

    +
    <script src="https://cdn.jsdelivr.net/npm/liquidjs/dist/liquid.browser.min.js"></script>
    +
    - -

    Who's Using LiquidJS?

    -
    -
      +

      Or render directly from CLI using npx:

      +
      npx liquidjs --template 'Hello, {{ name }}!' --context '{"name": "Snake"}'
      +
      + +

      For more details, refer to the Setup Guide.

      +
      • Eleventy: Eleventy, a simpler static site generator.
      • Opensense: The smarter way to send email.
      • Directus: an instant REST+GraphQL API and intuitive no-code data collaboration app for any SQL database.
      • Semgrep: Lightweight static analysis for many languages.
      • Rock: An open source CMS, Relationship Management System (RMS) and Church Management System (ChMS) all rolled into one.
      • Mitosis: Write components once, run everywhere. Compiles to React, Vue, Qwik, Solid, Angular, Svelte, and more.
      • -
      • Pattern Lab: a frontend workshop environment that helps you build, view, test, and showcase your design system's UI components.
      • +
      • Pattern Lab: a frontend workshop environment that helps you build, view, test, and showcase your design system's UI components.
      • Builder.io: the first and only headless CMS with a visual editor that lets you drag and drop with your components, directly within your current site or app. Completely API-driven, for cleaner code and simpler workflows.
      • Microsoft Power Pages: a secure, enterprise-grade, low-code software as a service (SaaS) platform for creating, hosting, and administering modern external-facing business websites.
      • Azure API Management developer portal: an automatically generated, fully customizable website with the documentation of your APIs.

      Feel free to create a PR or contact me to add your use case into this list!

      - - -

      Financial Support

      -
      -

      If you personally love LiquidJS or it's benefiting your business, please consider financially support us:

      +

      If you personally love LiquidJS or it's benefiting your business, please consider financially support us:

    -
    -
    -

    Generated using TypeDoc

    -
    \ No newline at end of file +
    diff --git a/api/interfaces/Emitter.html b/api/interfaces/Emitter.html index c80cc44a3..4df18f596 100644 --- a/api/interfaces/Emitter.html +++ b/api/interfaces/Emitter.html @@ -1,95 +1,6 @@ -Emitter | liquidjs
    -
    - -
    -
    -
    -
    - -

    Interface Emitter

    -
    -

    Hierarchy

    -
      -
    • Emitter
    -
    -
    -
    - -
    -
    -

    Properties

    -
    -
    -

    Methods

    -
    -
    -

    Properties

    -
    - -
    buffer: string
    -

    Buffered string

    -
    -
    -

    Methods

    -
    - -
      - -
    • -

      Write a html value into emitter

      -
      -
      -

      Parameters

      -
        -
      • -
        html: any
        -

        string, Drop or other primitive value

        -
      -

      Returns void

    -
    -
    -

    Generated using TypeDoc

    -
    \ No newline at end of file +Emitter | liquidjs

    Interface Emitter

    interface Emitter {
        buffer: string;
        write(html: any): void;
    }

    Properties

    Methods

    Properties

    buffer: string

    Buffered string

    +

    Methods

    • Write a html value into emitter

      +

      Parameters

      • html: any

        string, Drop or other primitive value

        +

      Returns void

    diff --git a/api/interfaces/FS.html b/api/interfaces/FS.html index 15dcb56bb..37125862c 100644 --- a/api/interfaces/FS.html +++ b/api/interfaces/FS.html @@ -1,253 +1,19 @@ -FS | liquidjs
    -
    - -
    -
    -
    -
    - -

    Interface FS

    -
    -

    Hierarchy

    -
      -
    • FS
    -
    -
    -
    - -
    -
    -

    Properties

    -
    - -
    contains?: ((root: string, file: string) => boolean)
    -
    -

    Type declaration

    -
      -
    • -
        -
      • (root: string, file: string): boolean
      • -
      • -

        check if file is contained in root, always return true by default. Warning: not setting this could expose path traversal vulnerabilities.

        -
        -
        -

        Parameters

        -
          -
        • -
          root: string
        • -
        • -
          file: string
        -

        Returns boolean

    -
    - -
    dirname?: ((file: string) => string)
    -
    -

    Type declaration

    -
      -
    • -
        -
      • (file: string): string
      • -
      • -

        required for relative path resolving

        -
        -
        -

        Parameters

        -
          -
        • -
          file: string
        -

        Returns string

    -
    - -
    exists: ((filepath: string) => Promise<boolean>)
    -
    -

    Type declaration

    -
      -
    • -
        -
      • (filepath: string): Promise<boolean>
      • -
      • -

        check if a file exists asynchronously

        -
        -
        -

        Parameters

        -
          -
        • -
          filepath: string
        -

        Returns Promise<boolean>

    -
    - -
    existsSync: ((filepath: string) => boolean)
    -
    -

    Type declaration

    -
      -
    • -
        -
      • (filepath: string): boolean
      • -
      • -

        check if a file exists synchronously

        -
        -
        -

        Parameters

        -
          -
        • -
          filepath: string
        -

        Returns boolean

    -
    - -
    fallback?: ((file: string) => undefined | string)
    -
    -

    Type declaration

    -
      -
    • -
        -
      • (file: string): undefined | string
      • -
      • -

        fallback file for lookup failure

        -
        -
        -

        Parameters

        -
          -
        • -
          file: string
        -

        Returns undefined | string

    -
    - -
    readFile: ((filepath: string) => Promise<string>)
    -
    -

    Type declaration

    -
      -
    • -
        -
      • (filepath: string): Promise<string>
      • -
      • -

        read a file asynchronously

        -
        -
        -

        Parameters

        -
          -
        • -
          filepath: string
        -

        Returns Promise<string>

    -
    - -
    readFileSync: ((filepath: string) => string)
    -
    -

    Type declaration

    -
      -
    • -
        -
      • (filepath: string): string
      • -
      • -

        read a file synchronously

        -
        -
        -

        Parameters

        -
          -
        • -
          filepath: string
        -

        Returns string

    -
    - -
    resolve: ((dir: string, file: string, ext: string) => string)
    -
    -

    Type declaration

    -
      -
    • -
        -
      • (dir: string, file: string, ext: string): string
      • -
      • -

        resolve a file against directory, for given ext option

        -
        -
        -

        Parameters

        -
          -
        • -
          dir: string
        • -
        • -
          file: string
        • -
        • -
          ext: string
        -

        Returns string

    -
    - -
    sep?: string
    -

    defaults to "/"

    -
    -
    -
    -

    Generated using TypeDoc

    -
    \ No newline at end of file +FS | liquidjs

    Interface FS

    interface FS {
        contains?: ((root: string, file: string) => boolean);
        dirname?: ((file: string) => string);
        exists: ((filepath: string) => Promise<boolean>);
        existsSync: ((filepath: string) => boolean);
        fallback?: ((file: string) => undefined | string);
        readFile: ((filepath: string) => Promise<string>);
        readFileSync: ((filepath: string) => string);
        resolve: ((dir: string, file: string, ext: string) => string);
        sep?: string;
    }

    Properties

    contains?: ((root: string, file: string) => boolean)

    check if file is contained in root, always return true by default. Warning: not setting this could expose path traversal vulnerabilities.

    +
    dirname?: ((file: string) => string)

    required for relative path resolving

    +
    exists: ((filepath: string) => Promise<boolean>)

    check if a file exists asynchronously

    +
    existsSync: ((filepath: string) => boolean)

    check if a file exists synchronously

    +
    fallback?: ((file: string) => undefined | string)

    fallback file for lookup failure

    +
    readFile: ((filepath: string) => Promise<string>)

    read a file asynchronously

    +
    readFileSync: ((filepath: string) => string)

    read a file synchronously

    +
    resolve: ((dir: string, file: string, ext: string) => string)

    resolve a file against directory, for given ext option

    +
    sep?: string

    defaults to "/"

    +
    diff --git a/api/interfaces/LiquidOptions.html b/api/interfaces/LiquidOptions.html index 3e3d7386f..9071c8e4c 100644 --- a/api/interfaces/LiquidOptions.html +++ b/api/interfaces/LiquidOptions.html @@ -1,400 +1,75 @@ -LiquidOptions | liquidjs
    -
    - -
    -
    -
    -
    - -

    Interface LiquidOptions

    -
    -

    Hierarchy

    -
      -
    • LiquidOptions
    -
    -
    -
    - -
    -
    -

    Properties

    -
    - -
    cache?: number | boolean | LiquidCache
    -

    Whether or not to cache resolved templates. Defaults to false.

    -
    -
    - -
    catchAllErrors?: boolean
    -

    Catch all errors instead of exit upon one. Please note that render errors won't be reached when parse fails.

    -
    -
    - -
    dateFormat?: string
    -

    Default date format to use if the date filter doesn't include a format. Defaults to %A, %B %-e, %Y at %-l:%M %P %z.

    -
    -
    - -
    dynamicPartials?: boolean
    -

    If set, treat the filepath parameter in {%include filepath %} and {%layout filepath%} as a variable, otherwise as a literal value. Defaults to true.

    -
    -
    - -
    extname?: string
    -

    Add a extname (if filepath doesn't include one) before template file lookup. Eg: setting to ".html" will allow including file by basename. Defaults to "".

    -
    -
    - -
    fs?: FS
    -

    fs is used to override the default file-system module with a custom implementation.

    -
    -
    - -
    globals?: object
    -

    the global scope passed down to all partial and layout templates, i.e. templates included by include, layout and render tags.

    -
    -
    - -
    greedy?: boolean
    -

    Whether trim*Left/trim*Right is greedy. When set to true, all consecutive blank characters including \n will be trimmed regardless of line breaks. Defaults to true.

    -
    -
    - -
    jekyllInclude?: boolean
    -

    Use jekyll style include, pass parameters to include variable of current scope. Defaults to false.

    -
    -
    - -
    jsTruthy?: boolean
    -

    Use JavaScript Truthiness. Defaults to false.

    -
    -
    - -
    keepOutputType?: boolean
    -

    Whether or not to keep value type when writing the Output, not working for streamed rendering. Defaults to false.

    -
    -
    - -
    layouts?: string | string[]
    -

    A directory or an array of directories from where to resolve layout templates. If it's an array, the files are looked up in the order they occur in the array. Defaults to root

    -
    -
    - -
    lenientIf?: boolean
    -

    Modifies the behavior of strictVariables. If set, a single undefined variable will not cause an exception in the context of the if/elsif/unless tag and the default filter. Instead, it will evaluate to false and null, respectively. Irrelevant if strictVariables is not set. Defaults to false. *

    -
    -
    - -
    locale?: string
    -

    Default locale, will be used by date filter. Defaults to system locale.

    -
    -
    - -
    memoryLimit?: number
    -

    For DoS handling, limit new objects creation, including array concat/join/strftime, etc. A typical PC can handle 1e9 (1G) memory without issue.

    -
    -
    - -
    operators?: Operators
    -

    An object of operators for conditional statements. Defaults to the regular Liquid operators.

    -
    -
    - -
    orderedFilterParameters?: boolean
    -

    Respect parameter order when using filters like "for ... reversed limit", Defaults to false.

    -
    -
    - -
    outputDelimiterLeft?: string
    -

    The left delimiter for liquid outputs. *

    -
    -
    - -
    outputDelimiterRight?: string
    -

    The right delimiter for liquid outputs. *

    -
    -
    - -
    outputEscape?: OutputEscapeOption
    -

    Default escape filter applied to output values, when set, you'll have to add | raw for values don't need to be escaped. Defaults to undefined.

    -
    -
    - -
    ownPropertyOnly?: boolean
    -

    Hide scope variables from prototypes, useful when you're passing a not sanitized object into LiquidJS or need to hide prototypes from templates.

    -
    -
    - -
    parseLimit?: number
    -

    For DoS handling, limit total length of templates parsed in one parse() call. A typical PC can handle 1e8 (100M) characters without issues.

    -
    -
    - -
    partials?: string | string[]
    -

    A directory or an array of directories from where to resolve included templates. If it's an array, the files are looked up in the order they occur in the array. Defaults to root

    -
    -
    - -
    preserveTimezones?: boolean
    -

    Whether input strings to date filter preserve the given timezone *

    -
    -
    - -
    relativeReference?: boolean
    -

    Allow refer to layouts/partials by relative pathname. To avoid arbitrary filesystem read, paths been referenced also need to be within corresponding root, partials, layouts. Defaults to true.

    -
    -
    - -
    renderLimit?: number
    -

    For DoS handling, limit total time (in ms) for each render() call.

    -
    -
    - -
    root?: string | string[]
    -

    A directory or an array of directories from where to resolve layout and include templates, and the filename passed to .renderFile(). If it's an array, the files are looked up in the order they occur in the array. Defaults to ["."]

    -
    -
    - -
    strictFilters?: boolean
    -

    Whether or not to assert filter existence. If set to false, undefined filters will be skipped. Otherwise, undefined filters will cause an exception. Defaults to false.

    -
    -
    - -
    strictVariables?: boolean
    -

    Whether or not to assert variable existence. If set to false, undefined variables will be rendered as empty string. Otherwise, undefined variables will cause an exception. Defaults to false.

    -
    -
    - -
    tagDelimiterLeft?: string
    -

    The left delimiter for liquid tags. *

    -
    -
    - -
    tagDelimiterRight?: string
    -

    The right delimiter for liquid tags. *

    -
    -
    - -
    templates?: {
        [key: string]: string;
    }
    -

    Render from in-memory templates mapping instead of file system. File system related options like fs, 'root', and relativeReference will be ignored when templates is specified.

    -
    -
    -

    Type declaration

    -
      -
    • -
      [key: string]: string
    -
    - -
    timezoneOffset?: string | number
    -

    JavaScript timezone name or timezoneOffset for date filter, default to local time. That means if you're in Australia (UTC+10), it'll default to -600 or Australia/Lindeman

    -
    -
    - -
    trimOutputLeft?: boolean
    -

    Similar to trimOutputRight, whereas the \n is exclusive. Defaults to false. See Whitespace Control for details.

    -
    -
    - -
    trimOutputRight?: boolean
    -

    Strip blank characters (including , \t, and \r) from the right of values ({{ }}) until \n (inclusive). Defaults to false.

    -
    -
    - -
    trimTagLeft?: boolean
    -

    Similar to trimTagRight, whereas the \n is exclusive. Defaults to false. See Whitespace Control for details.

    -
    -
    - -
    trimTagRight?: boolean
    -

    Strip blank characters (including , \t, and \r) from the right of tags ({% %}) until \n (inclusive). Defaults to false.

    -
    -
    -
    -

    Generated using TypeDoc

    -
    \ No newline at end of file +LiquidOptions | liquidjs

    Interface LiquidOptions

    interface LiquidOptions {
        cache?: number | boolean | LiquidCache;
        catchAllErrors?: boolean;
        dateFormat?: string;
        dynamicPartials?: boolean;
        extname?: string;
        fs?: FS;
        globals?: object;
        greedy?: boolean;
        jekyllInclude?: boolean;
        jsTruthy?: boolean;
        keepOutputType?: boolean;
        layouts?: string | string[];
        lenientIf?: boolean;
        locale?: string;
        memoryLimit?: number;
        operators?: Operators;
        orderedFilterParameters?: boolean;
        outputDelimiterLeft?: string;
        outputDelimiterRight?: string;
        outputEscape?: OutputEscapeOption;
        ownPropertyOnly?: boolean;
        parseLimit?: number;
        partials?: string | string[];
        preserveTimezones?: boolean;
        relativeReference?: boolean;
        renderLimit?: number;
        root?: string | string[];
        strictFilters?: boolean;
        strictVariables?: boolean;
        tagDelimiterLeft?: string;
        tagDelimiterRight?: string;
        templates?: {
            [key: string]: string;
        };
        timezoneOffset?: string | number;
        trimOutputLeft?: boolean;
        trimOutputRight?: boolean;
        trimTagLeft?: boolean;
        trimTagRight?: boolean;
    }

    Hierarchy (view full)

    Properties

    cache?: number | boolean | LiquidCache

    Whether or not to cache resolved templates. Defaults to false.

    +
    catchAllErrors?: boolean

    Catch all errors instead of exit upon one. Please note that render errors won't be reached when parse fails.

    +
    dateFormat?: string

    Default date format to use if the date filter doesn't include a format. Defaults to %A, %B %-e, %Y at %-l:%M %P %z.

    +
    dynamicPartials?: boolean

    If set, treat the filepath parameter in {%include filepath %} and {%layout filepath%} as a variable, otherwise as a literal value. Defaults to true.

    +
    extname?: string

    Add a extname (if filepath doesn't include one) before template file lookup. Eg: setting to ".html" will allow including file by basename. Defaults to "".

    +
    fs?: FS

    fs is used to override the default file-system module with a custom implementation.

    +
    globals?: object

    the global scope passed down to all partial and layout templates, i.e. templates included by include, layout and render tags.

    +
    greedy?: boolean

    Whether trim*Left/trim*Right is greedy. When set to true, all consecutive blank characters including \n will be trimmed regardless of line breaks. Defaults to true.

    +
    jekyllInclude?: boolean

    Use jekyll style include, pass parameters to include variable of current scope. Defaults to false.

    +
    jsTruthy?: boolean

    Use JavaScript Truthiness. Defaults to false.

    +
    keepOutputType?: boolean

    Whether or not to keep value type when writing the Output, not working for streamed rendering. Defaults to false.

    +
    layouts?: string | string[]

    A directory or an array of directories from where to resolve layout templates. If it's an array, the files are looked up in the order they occur in the array. Defaults to root

    +
    lenientIf?: boolean

    Modifies the behavior of strictVariables. If set, a single undefined variable will not cause an exception in the context of the if/elsif/unless tag and the default filter. Instead, it will evaluate to false and null, respectively. Irrelevant if strictVariables is not set. Defaults to false. *

    +
    locale?: string

    Default locale, will be used by date filter. Defaults to system locale.

    +
    memoryLimit?: number

    For DoS handling, limit new objects creation, including array concat/join/strftime, etc. A typical PC can handle 1e9 (1G) memory without issue.

    +
    operators?: Operators

    An object of operators for conditional statements. Defaults to the regular Liquid operators.

    +
    orderedFilterParameters?: boolean

    Respect parameter order when using filters like "for ... reversed limit", Defaults to false.

    +
    outputDelimiterLeft?: string

    The left delimiter for liquid outputs. *

    +
    outputDelimiterRight?: string

    The right delimiter for liquid outputs. *

    +
    outputEscape?: OutputEscapeOption

    Default escape filter applied to output values, when set, you'll have to add | raw for values don't need to be escaped. Defaults to undefined.

    +
    ownPropertyOnly?: boolean

    Hide scope variables from prototypes, useful when you're passing a not sanitized object into LiquidJS or need to hide prototypes from templates.

    +
    parseLimit?: number

    For DoS handling, limit total length of templates parsed in one parse() call. A typical PC can handle 1e8 (100M) characters without issues.

    +
    partials?: string | string[]

    A directory or an array of directories from where to resolve included templates. If it's an array, the files are looked up in the order they occur in the array. Defaults to root

    +
    preserveTimezones?: boolean

    Whether input strings to date filter preserve the given timezone *

    +
    relativeReference?: boolean

    Allow refer to layouts/partials by relative pathname. To avoid arbitrary filesystem read, paths been referenced also need to be within corresponding root, partials, layouts. Defaults to true.

    +
    renderLimit?: number

    For DoS handling, limit total time (in ms) for each render() call.

    +
    root?: string | string[]

    A directory or an array of directories from where to resolve layout and include templates, and the filename passed to .renderFile(). If it's an array, the files are looked up in the order they occur in the array. Defaults to ["."]

    +
    strictFilters?: boolean

    Whether or not to assert filter existence. If set to false, undefined filters will be skipped. Otherwise, undefined filters will cause an exception. Defaults to false.

    +
    strictVariables?: boolean

    Whether or not to assert variable existence. If set to false, undefined variables will be rendered as empty string. Otherwise, undefined variables will cause an exception. Defaults to false.

    +
    tagDelimiterLeft?: string

    The left delimiter for liquid tags. *

    +
    tagDelimiterRight?: string

    The right delimiter for liquid tags. *

    +
    templates?: {
        [key: string]: string;
    }

    Render from in-memory templates mapping instead of file system. File system related options like fs, 'root', and relativeReference will be ignored when templates is specified.

    +
    timezoneOffset?: string | number

    JavaScript timezone name or timezoneOffset for date filter, default to local time. That means if you're in Australia (UTC+10), it'll default to -600 or Australia/Lindeman

    +
    trimOutputLeft?: boolean

    Similar to trimOutputRight, whereas the \n is exclusive. Defaults to false. See Whitespace Control for details.

    +
    trimOutputRight?: boolean

    Strip blank characters (including , \t, and \r) from the right of values ({{ }}) until \n (inclusive). Defaults to false.

    +
    trimTagLeft?: boolean

    Similar to trimTagRight, whereas the \n is exclusive. Defaults to false. See Whitespace Control for details.

    +
    trimTagRight?: boolean

    Strip blank characters (including , \t, and \r) from the right of tags ({% %}) until \n (inclusive). Defaults to false.

    +
    diff --git a/api/interfaces/Template.html b/api/interfaces/Template.html index 205e97f63..8ee4e05f4 100644 --- a/api/interfaces/Template.html +++ b/api/interfaces/Template.html @@ -1,96 +1,3 @@ -Template | liquidjs
    -
    - -
    -
    -
    -
    - -

    Interface Template

    -
    -

    Hierarchy

    -
      -
    • Template
    -
    -

    Implemented by

    -
    -
    -
    -
    - -
    -
    -

    Properties

    -
    -
    -

    Methods

    -
    -
    -

    Properties

    -
    - -
    token: Token
    -
    -

    Methods

    -
    - -
    -
    -
    -

    Generated using TypeDoc

    -
    \ No newline at end of file +Template | liquidjs

    Interface Template

    interface Template {
        token: Token;
        render(ctx: Context, emitter: Emitter): any;
    }

    Implemented by

    Properties

    Methods

    Properties

    token: Token

    Methods

    diff --git a/api/interfaces/Trie.html b/api/interfaces/Trie.html index 66286f2bd..ec200a38a 100644 --- a/api/interfaces/Trie.html +++ b/api/interfaces/Trie.html @@ -1,123 +1 @@ -Trie | liquidjs
    -
    - -
    - -
    -

    Generated using TypeDoc

    -
    \ No newline at end of file +Trie | liquidjs

    Interface Trie<T>

    Type Parameters

    • T

    Indexable

    diff --git a/api/interfaces/_internal_.ArrayLike.html b/api/interfaces/_internal_.ArrayLike.html new file mode 100644 index 000000000..c69e9c4f5 --- /dev/null +++ b/api/interfaces/_internal_.ArrayLike.html @@ -0,0 +1,2 @@ +ArrayLike | liquidjs

    Interface ArrayLike<T>

    interface ArrayLike<T> {
        length: number;
        [n: number]: T;
    }

    Type Parameters

    • T

    Indexable

    • [n: number]: T

    Properties

    Properties

    length: number
    diff --git a/api/interfaces/_internal_.AsyncIterableIterator.html b/api/interfaces/_internal_.AsyncIterableIterator.html new file mode 100644 index 000000000..29b04308c --- /dev/null +++ b/api/interfaces/_internal_.AsyncIterableIterator.html @@ -0,0 +1,5 @@ +AsyncIterableIterator | liquidjs

    Interface AsyncIterableIterator<T>

    interface AsyncIterableIterator<T> {
        [asyncIterator](): AsyncIterableIterator<T>;
        next(...args: [] | [undefined]): Promise<IteratorResult<T, any>>;
        return?(value?: any): Promise<IteratorResult<T, any>>;
        throw?(e?: any): Promise<IteratorResult<T, any>>;
    }

    Type Parameters

    • T

    Hierarchy (view full)

    Methods

    diff --git a/api/interfaces/_internal_.AsyncIterator.html b/api/interfaces/_internal_.AsyncIterator.html new file mode 100644 index 000000000..34fbc25c2 --- /dev/null +++ b/api/interfaces/_internal_.AsyncIterator.html @@ -0,0 +1,4 @@ +AsyncIterator | liquidjs

    Interface AsyncIterator<T, TReturn, TNext>

    interface AsyncIterator<T, TReturn, TNext> {
        next(...args: [] | [TNext]): Promise<IteratorResult<T, TReturn>>;
        return?(value?: TReturn | PromiseLike<TReturn>): Promise<IteratorResult<T, TReturn>>;
        throw?(e?: any): Promise<IteratorResult<T, TReturn>>;
    }

    Type Parameters

    • T
    • TReturn = any
    • TNext = undefined

    Hierarchy (view full)

    Methods

    Methods

    diff --git a/api/interfaces/_internal_.Buffer.html b/api/interfaces/_internal_.Buffer.html new file mode 100644 index 000000000..68f215cec --- /dev/null +++ b/api/interfaces/_internal_.Buffer.html @@ -0,0 +1,816 @@ +Buffer | liquidjs

    Interface Buffer

    interface Buffer {
        BYTES_PER_ELEMENT: number;
        [toStringTag]: "Uint8Array";
        buffer: ArrayBufferLike;
        byteLength: number;
        byteOffset: number;
        length: number;
        [iterator](): IterableIterator<number>;
        at(index: number): undefined | number;
        compare(target: Uint8Array, targetStart?: number, targetEnd?: number, sourceStart?: number, sourceEnd?: number): -1 | 0 | 1;
        copy(target: Uint8Array, targetStart?: number, sourceStart?: number, sourceEnd?: number): number;
        copyWithin(target: number, start: number, end?: number): this;
        entries(): IterableIterator<[number, number]>;
        equals(otherBuffer: Uint8Array): boolean;
        every(predicate: ((value: number, index: number, array: Uint8Array) => unknown), thisArg?: any): boolean;
        fill(value: string | number | Uint8Array, offset?: number, end?: number, encoding?: BufferEncoding): this;
        filter(predicate: ((value: number, index: number, array: Uint8Array) => any), thisArg?: any): Uint8Array;
        find(predicate: ((value: number, index: number, obj: Uint8Array) => boolean), thisArg?: any): undefined | number;
        findIndex(predicate: ((value: number, index: number, obj: Uint8Array) => boolean), thisArg?: any): number;
        forEach(callbackfn: ((value: number, index: number, array: Uint8Array) => void), thisArg?: any): void;
        includes(value: string | number | Buffer, byteOffset?: number, encoding?: BufferEncoding): boolean;
        indexOf(value: string | number | Uint8Array, byteOffset?: number, encoding?: BufferEncoding): number;
        join(separator?: string): string;
        keys(): IterableIterator<number>;
        lastIndexOf(value: string | number | Uint8Array, byteOffset?: number, encoding?: BufferEncoding): number;
        map(callbackfn: ((value: number, index: number, array: Uint8Array) => number), thisArg?: any): Uint8Array;
        readBigInt64BE(offset?: number): bigint;
        readBigInt64LE(offset?: number): bigint;
        readBigUInt64BE(offset?: number): bigint;
        readBigUInt64LE(offset?: number): bigint;
        readBigUint64BE(offset?: number): bigint;
        readBigUint64LE(offset?: number): bigint;
        readDoubleBE(offset?: number): number;
        readDoubleLE(offset?: number): number;
        readFloatBE(offset?: number): number;
        readFloatLE(offset?: number): number;
        readInt16BE(offset?: number): number;
        readInt16LE(offset?: number): number;
        readInt32BE(offset?: number): number;
        readInt32LE(offset?: number): number;
        readInt8(offset?: number): number;
        readIntBE(offset: number, byteLength: number): number;
        readIntLE(offset: number, byteLength: number): number;
        readUInt16BE(offset?: number): number;
        readUInt16LE(offset?: number): number;
        readUInt32BE(offset?: number): number;
        readUInt32LE(offset?: number): number;
        readUInt8(offset?: number): number;
        readUIntBE(offset: number, byteLength: number): number;
        readUIntLE(offset: number, byteLength: number): number;
        readUint16BE(offset?: number): number;
        readUint16LE(offset?: number): number;
        readUint32BE(offset?: number): number;
        readUint32LE(offset?: number): number;
        readUint8(offset?: number): number;
        readUintBE(offset: number, byteLength: number): number;
        readUintLE(offset: number, byteLength: number): number;
        reduce(callbackfn: ((previousValue: number, currentValue: number, currentIndex: number, array: Uint8Array) => number)): number;
        reduce(callbackfn: ((previousValue: number, currentValue: number, currentIndex: number, array: Uint8Array) => number), initialValue: number): number;
        reduce<U>(callbackfn: ((previousValue: U, currentValue: number, currentIndex: number, array: Uint8Array) => U), initialValue: U): U;
        reduceRight(callbackfn: ((previousValue: number, currentValue: number, currentIndex: number, array: Uint8Array) => number)): number;
        reduceRight(callbackfn: ((previousValue: number, currentValue: number, currentIndex: number, array: Uint8Array) => number), initialValue: number): number;
        reduceRight<U>(callbackfn: ((previousValue: U, currentValue: number, currentIndex: number, array: Uint8Array) => U), initialValue: U): U;
        reverse(): this;
        set(array: ArrayLike<number>, offset?: number): void;
        slice(start?: number, end?: number): Buffer;
        some(predicate: ((value: number, index: number, array: Uint8Array) => unknown), thisArg?: any): boolean;
        sort(compareFn?: ((a: number, b: number) => number)): this;
        subarray(start?: number, end?: number): Buffer;
        swap16(): Buffer;
        swap32(): Buffer;
        swap64(): Buffer;
        toJSON(): {
            data: number[];
            type: "Buffer";
        };
        toLocaleString(): string;
        toString(encoding?: BufferEncoding, start?: number, end?: number): string;
        valueOf(): Uint8Array;
        values(): IterableIterator<number>;
        write(string: string, encoding?: BufferEncoding): number;
        write(string: string, offset: number, encoding?: BufferEncoding): number;
        write(string: string, offset: number, length: number, encoding?: BufferEncoding): number;
        writeBigInt64BE(value: bigint, offset?: number): number;
        writeBigInt64LE(value: bigint, offset?: number): number;
        writeBigUInt64BE(value: bigint, offset?: number): number;
        writeBigUInt64LE(value: bigint, offset?: number): number;
        writeBigUint64BE(value: bigint, offset?: number): number;
        writeBigUint64LE(value: bigint, offset?: number): number;
        writeDoubleBE(value: number, offset?: number): number;
        writeDoubleLE(value: number, offset?: number): number;
        writeFloatBE(value: number, offset?: number): number;
        writeFloatLE(value: number, offset?: number): number;
        writeInt16BE(value: number, offset?: number): number;
        writeInt16LE(value: number, offset?: number): number;
        writeInt32BE(value: number, offset?: number): number;
        writeInt32LE(value: number, offset?: number): number;
        writeInt8(value: number, offset?: number): number;
        writeIntBE(value: number, offset: number, byteLength: number): number;
        writeIntLE(value: number, offset: number, byteLength: number): number;
        writeUInt16BE(value: number, offset?: number): number;
        writeUInt16LE(value: number, offset?: number): number;
        writeUInt32BE(value: number, offset?: number): number;
        writeUInt32LE(value: number, offset?: number): number;
        writeUInt8(value: number, offset?: number): number;
        writeUIntBE(value: number, offset: number, byteLength: number): number;
        writeUIntLE(value: number, offset: number, byteLength: number): number;
        writeUint16BE(value: number, offset?: number): number;
        writeUint16LE(value: number, offset?: number): number;
        writeUint32BE(value: number, offset?: number): number;
        writeUint32LE(value: number, offset?: number): number;
        writeUint8(value: number, offset?: number): number;
        writeUintBE(value: number, offset: number, byteLength: number): number;
        writeUintLE(value: number, offset: number, byteLength: number): number;
    }

    Hierarchy

    • Uint8Array
      • Buffer

    Properties

    BYTES_PER_ELEMENT: number

    The size in bytes of each element in the array.

    +
    [toStringTag]: "Uint8Array"

    The ArrayBuffer instance referenced by the array.

    +
    byteLength: number

    The length in bytes of the array.

    +
    byteOffset: number

    The offset in bytes of the array.

    +
    length: number

    The length of the array.

    +

    Methods

    • Returns IterableIterator<number>

    • Takes an integer value and returns the item at that index, +allowing for positive and negative integers. +Negative integers count back from the last item in the array.

      +

      Parameters

      • index: number

      Returns undefined | number

    • Compares buf with target and returns a number indicating whether bufcomes before, after, or is the same as target in sort order. +Comparison is based on the actual sequence of bytes in each Buffer.

      +
        +
      • 0 is returned if target is the same as buf
      • +
      • 1 is returned if target should come beforebuf when sorted.
      • +
      • -1 is returned if target should come afterbuf when sorted.
      • +
      +
      import { Buffer } from 'node:buffer';

      const buf1 = Buffer.from('ABC');
      const buf2 = Buffer.from('BCD');
      const buf3 = Buffer.from('ABCD');

      console.log(buf1.compare(buf1));
      // Prints: 0
      console.log(buf1.compare(buf2));
      // Prints: -1
      console.log(buf1.compare(buf3));
      // Prints: -1
      console.log(buf2.compare(buf1));
      // Prints: 1
      console.log(buf2.compare(buf3));
      // Prints: 1
      console.log([buf1, buf2, buf3].sort(Buffer.compare));
      // Prints: [ <Buffer 41 42 43>, <Buffer 41 42 43 44>, <Buffer 42 43 44> ]
      // (This result is equal to: [buf1, buf3, buf2].) +
      + +

      The optional targetStart, targetEnd, sourceStart, and sourceEnd arguments can be used to limit the comparison to specific ranges within target and buf respectively.

      +
      import { Buffer } from 'node:buffer';

      const buf1 = Buffer.from([1, 2, 3, 4, 5, 6, 7, 8, 9]);
      const buf2 = Buffer.from([5, 6, 7, 8, 9, 1, 2, 3, 4]);

      console.log(buf1.compare(buf2, 5, 9, 0, 4));
      // Prints: 0
      console.log(buf1.compare(buf2, 0, 6, 4));
      // Prints: -1
      console.log(buf1.compare(buf2, 5, 6, 5));
      // Prints: 1 +
      + +

      ERR_OUT_OF_RANGE is thrown if targetStart < 0, sourceStart < 0, targetEnd > target.byteLength, or sourceEnd > source.byteLength.

      +

      Parameters

      • target: Uint8Array

        A Buffer or Uint8Array with which to compare buf.

        +
      • OptionaltargetStart: number

        The offset within target at which to begin comparison.

        +
      • OptionaltargetEnd: number

        The offset within target at which to end comparison (not inclusive).

        +
      • OptionalsourceStart: number

        The offset within buf at which to begin comparison.

        +
      • OptionalsourceEnd: number

        The offset within buf at which to end comparison (not inclusive).

        +

      Returns -1 | 0 | 1

      v0.11.13

      +
    • Copies data from a region of buf to a region in target, even if the targetmemory region overlaps with buf.

      +

      TypedArray.prototype.set() performs the same operation, and is available +for all TypedArrays, including Node.js Buffers, although it takes +different function arguments.

      +
      import { Buffer } from 'node:buffer';

      // Create two `Buffer` instances.
      const buf1 = Buffer.allocUnsafe(26);
      const buf2 = Buffer.allocUnsafe(26).fill('!');

      for (let i = 0; i < 26; i++) {
      // 97 is the decimal ASCII value for 'a'.
      buf1[i] = i + 97;
      }

      // Copy `buf1` bytes 16 through 19 into `buf2` starting at byte 8 of `buf2`.
      buf1.copy(buf2, 8, 16, 20);
      // This is equivalent to:
      // buf2.set(buf1.subarray(16, 20), 8);

      console.log(buf2.toString('ascii', 0, 25));
      // Prints: !!!!!!!!qrst!!!!!!!!!!!!! +
      + +
      import { Buffer } from 'node:buffer';

      // Create a `Buffer` and copy data from one region to an overlapping region
      // within the same `Buffer`.

      const buf = Buffer.allocUnsafe(26);

      for (let i = 0; i < 26; i++) {
      // 97 is the decimal ASCII value for 'a'.
      buf[i] = i + 97;
      }

      buf.copy(buf, 0, 4, 10);

      console.log(buf.toString());
      // Prints: efghijghijklmnopqrstuvwxyz +
      + +

      Parameters

      • target: Uint8Array

        A Buffer or Uint8Array to copy into.

        +
      • OptionaltargetStart: number

        The offset within target at which to begin writing.

        +
      • OptionalsourceStart: number

        The offset within buf from which to begin copying.

        +
      • OptionalsourceEnd: number

        The offset within buf at which to stop copying (not inclusive).

        +

      Returns number

      The number of bytes copied.

      +

      v0.1.90

      +
    • Returns the this object after copying a section of the array identified by start and end +to the same array starting at position target

      +

      Parameters

      • target: number

        If target is negative, it is treated as length+target where length is the +length of the array.

        +
      • start: number

        If start is negative, it is treated as length+start. If end is negative, it +is treated as length+end.

        +
      • Optionalend: number

        If not specified, length of the this object is used as its default value.

        +

      Returns this

    • Returns an array of key, value pairs for every entry in the array

      +

      Returns IterableIterator<[number, number]>

    • Returns true if both buf and otherBuffer have exactly the same bytes,false otherwise. Equivalent to buf.compare(otherBuffer) === 0.

      +
      import { Buffer } from 'node:buffer';

      const buf1 = Buffer.from('ABC');
      const buf2 = Buffer.from('414243', 'hex');
      const buf3 = Buffer.from('ABCD');

      console.log(buf1.equals(buf2));
      // Prints: true
      console.log(buf1.equals(buf3));
      // Prints: false +
      + +

      Parameters

      • otherBuffer: Uint8Array

        A Buffer or Uint8Array with which to compare buf.

        +

      Returns boolean

      v0.11.13

      +
    • Determines whether all the members of an array satisfy the specified test.

      +

      Parameters

      • predicate: ((value: number, index: number, array: Uint8Array) => unknown)

        A function that accepts up to three arguments. The every method calls +the predicate function for each element in the array until the predicate returns a value +which is coercible to the Boolean value false, or until the end of the array.

        +
          • (value, index, array): unknown
          • Parameters

            • value: number
            • index: number
            • array: Uint8Array

            Returns unknown

      • OptionalthisArg: any

        An object to which the this keyword can refer in the predicate function. +If thisArg is omitted, undefined is used as the this value.

        +

      Returns boolean

    • Fills buf with the specified value. If the offset and end are not given, +the entire buf will be filled:

      +
      import { Buffer } from 'node:buffer';

      // Fill a `Buffer` with the ASCII character 'h'.

      const b = Buffer.allocUnsafe(50).fill('h');

      console.log(b.toString());
      // Prints: hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh

      // Fill a buffer with empty string
      const c = Buffer.allocUnsafe(5).fill('');

      console.log(c.fill(''));
      // Prints: <Buffer 00 00 00 00 00> +
      + +

      value is coerced to a uint32 value if it is not a string, Buffer, or +integer. If the resulting integer is greater than 255 (decimal), buf will be +filled with value &#x26; 255.

      +

      If the final write of a fill() operation falls on a multi-byte character, +then only the bytes of that character that fit into buf are written:

      +
      import { Buffer } from 'node:buffer';

      // Fill a `Buffer` with character that takes up two bytes in UTF-8.

      console.log(Buffer.allocUnsafe(5).fill('\u0222'));
      // Prints: <Buffer c8 a2 c8 a2 c8> +
      + +

      If value contains invalid characters, it is truncated; if no valid +fill data remains, an exception is thrown:

      +
      import { Buffer } from 'node:buffer';

      const buf = Buffer.allocUnsafe(5);

      console.log(buf.fill('a'));
      // Prints: <Buffer 61 61 61 61 61>
      console.log(buf.fill('aazz', 'hex'));
      // Prints: <Buffer aa aa aa aa aa>
      console.log(buf.fill('zz', 'hex'));
      // Throws an exception. +
      + +

      Parameters

      • value: string | number | Uint8Array

        The value with which to fill buf. Empty value (string, Uint8Array, Buffer) is coerced to 0.

        +
      • Optionaloffset: number

        Number of bytes to skip before starting to fill buf.

        +
      • Optionalend: number

        Where to stop filling buf (not inclusive).

        +
      • Optionalencoding: BufferEncoding

        The encoding for value if value is a string.

        +

      Returns this

      A reference to buf.

      +

      v0.5.0

      +
    • Returns the elements of an array that meet the condition specified in a callback function.

      +

      Parameters

      • predicate: ((value: number, index: number, array: Uint8Array) => any)

        A function that accepts up to three arguments. The filter method calls +the predicate function one time for each element in the array.

        +
          • (value, index, array): any
          • Parameters

            • value: number
            • index: number
            • array: Uint8Array

            Returns any

      • OptionalthisArg: any

        An object to which the this keyword can refer in the predicate function. +If thisArg is omitted, undefined is used as the this value.

        +

      Returns Uint8Array

    • Returns the value of the first element in the array where predicate is true, and undefined +otherwise.

      +

      Parameters

      • predicate: ((value: number, index: number, obj: Uint8Array) => boolean)

        find calls predicate once for each element of the array, in ascending +order, until it finds one where predicate returns true. If such an element is found, find +immediately returns that element value. Otherwise, find returns undefined.

        +
          • (value, index, obj): boolean
          • Parameters

            • value: number
            • index: number
            • obj: Uint8Array

            Returns boolean

      • OptionalthisArg: any

        If provided, it will be used as the this value for each invocation of +predicate. If it is not provided, undefined is used instead.

        +

      Returns undefined | number

    • Returns the index of the first element in the array where predicate is true, and -1 +otherwise.

      +

      Parameters

      • predicate: ((value: number, index: number, obj: Uint8Array) => boolean)

        find calls predicate once for each element of the array, in ascending +order, until it finds one where predicate returns true. If such an element is found, +findIndex immediately returns that element index. Otherwise, findIndex returns -1.

        +
          • (value, index, obj): boolean
          • Parameters

            • value: number
            • index: number
            • obj: Uint8Array

            Returns boolean

      • OptionalthisArg: any

        If provided, it will be used as the this value for each invocation of +predicate. If it is not provided, undefined is used instead.

        +

      Returns number

    • Performs the specified action for each element in an array.

      +

      Parameters

      • callbackfn: ((value: number, index: number, array: Uint8Array) => void)

        A function that accepts up to three arguments. forEach calls the +callbackfn function one time for each element in the array.

        +
          • (value, index, array): void
          • Parameters

            • value: number
            • index: number
            • array: Uint8Array

            Returns void

      • OptionalthisArg: any

        An object to which the this keyword can refer in the callbackfn function. +If thisArg is omitted, undefined is used as the this value.

        +

      Returns void

    • Equivalent to buf.indexOf() !== -1.

      +
      import { Buffer } from 'node:buffer';

      const buf = Buffer.from('this is a buffer');

      console.log(buf.includes('this'));
      // Prints: true
      console.log(buf.includes('is'));
      // Prints: true
      console.log(buf.includes(Buffer.from('a buffer')));
      // Prints: true
      console.log(buf.includes(97));
      // Prints: true (97 is the decimal ASCII value for 'a')
      console.log(buf.includes(Buffer.from('a buffer example')));
      // Prints: false
      console.log(buf.includes(Buffer.from('a buffer example').slice(0, 8)));
      // Prints: true
      console.log(buf.includes('this', 4));
      // Prints: false +
      + +

      Parameters

      • value: string | number | Buffer

        What to search for.

        +
      • OptionalbyteOffset: number

        Where to begin searching in buf. If negative, then offset is calculated from the end of buf.

        +
      • Optionalencoding: BufferEncoding

        If value is a string, this is its encoding.

        +

      Returns boolean

      true if value was found in buf, false otherwise.

      +

      v5.3.0

      +
    • If value is:

      +
        +
      • a string, value is interpreted according to the character encoding in encoding.
      • +
      • a Buffer or Uint8Array, value will be used in its entirety. +To compare a partial Buffer, use buf.subarray.
      • +
      • a number, value will be interpreted as an unsigned 8-bit integer +value between 0 and 255.
      • +
      +
      import { Buffer } from 'node:buffer';

      const buf = Buffer.from('this is a buffer');

      console.log(buf.indexOf('this'));
      // Prints: 0
      console.log(buf.indexOf('is'));
      // Prints: 2
      console.log(buf.indexOf(Buffer.from('a buffer')));
      // Prints: 8
      console.log(buf.indexOf(97));
      // Prints: 8 (97 is the decimal ASCII value for 'a')
      console.log(buf.indexOf(Buffer.from('a buffer example')));
      // Prints: -1
      console.log(buf.indexOf(Buffer.from('a buffer example').slice(0, 8)));
      // Prints: 8

      const utf16Buffer = Buffer.from('\u039a\u0391\u03a3\u03a3\u0395', 'utf16le');

      console.log(utf16Buffer.indexOf('\u03a3', 0, 'utf16le'));
      // Prints: 4
      console.log(utf16Buffer.indexOf('\u03a3', -4, 'utf16le'));
      // Prints: 6 +
      + +

      If value is not a string, number, or Buffer, this method will throw a TypeError. If value is a number, it will be coerced to a valid byte value, +an integer between 0 and 255.

      +

      If byteOffset is not a number, it will be coerced to a number. If the result +of coercion is NaN or 0, then the entire buffer will be searched. This +behavior matches String.prototype.indexOf().

      +
      import { Buffer } from 'node:buffer';

      const b = Buffer.from('abcdef');

      // Passing a value that's a number, but not a valid byte.
      // Prints: 2, equivalent to searching for 99 or 'c'.
      console.log(b.indexOf(99.9));
      console.log(b.indexOf(256 + 99));

      // Passing a byteOffset that coerces to NaN or 0.
      // Prints: 1, searching the whole buffer.
      console.log(b.indexOf('b', undefined));
      console.log(b.indexOf('b', {}));
      console.log(b.indexOf('b', null));
      console.log(b.indexOf('b', [])); +
      + +

      If value is an empty string or empty Buffer and byteOffset is less +than buf.length, byteOffset will be returned. If value is empty andbyteOffset is at least buf.length, buf.length will be returned.

      +

      Parameters

      • value: string | number | Uint8Array

        What to search for.

        +
      • OptionalbyteOffset: number

        Where to begin searching in buf. If negative, then offset is calculated from the end of buf.

        +
      • Optionalencoding: BufferEncoding

        If value is a string, this is the encoding used to determine the binary representation of the string that will be searched for in buf.

        +

      Returns number

      The index of the first occurrence of value in buf, or -1 if buf does not contain value.

      +

      v1.5.0

      +
    • Adds all the elements of an array separated by the specified separator string.

      +

      Parameters

      • Optionalseparator: string

        A string used to separate one element of an array from the next in the +resulting String. If omitted, the array elements are separated with a comma.

        +

      Returns string

    • Returns an list of keys in the array

      +

      Returns IterableIterator<number>

    • Identical to buf.indexOf(), except the last occurrence of value is found +rather than the first occurrence.

      +
      import { Buffer } from 'node:buffer';

      const buf = Buffer.from('this buffer is a buffer');

      console.log(buf.lastIndexOf('this'));
      // Prints: 0
      console.log(buf.lastIndexOf('buffer'));
      // Prints: 17
      console.log(buf.lastIndexOf(Buffer.from('buffer')));
      // Prints: 17
      console.log(buf.lastIndexOf(97));
      // Prints: 15 (97 is the decimal ASCII value for 'a')
      console.log(buf.lastIndexOf(Buffer.from('yolo')));
      // Prints: -1
      console.log(buf.lastIndexOf('buffer', 5));
      // Prints: 5
      console.log(buf.lastIndexOf('buffer', 4));
      // Prints: -1

      const utf16Buffer = Buffer.from('\u039a\u0391\u03a3\u03a3\u0395', 'utf16le');

      console.log(utf16Buffer.lastIndexOf('\u03a3', undefined, 'utf16le'));
      // Prints: 6
      console.log(utf16Buffer.lastIndexOf('\u03a3', -5, 'utf16le'));
      // Prints: 4 +
      + +

      If value is not a string, number, or Buffer, this method will throw a TypeError. If value is a number, it will be coerced to a valid byte value, +an integer between 0 and 255.

      +

      If byteOffset is not a number, it will be coerced to a number. Any arguments +that coerce to NaN, like {} or undefined, will search the whole buffer. +This behavior matches String.prototype.lastIndexOf().

      +
      import { Buffer } from 'node:buffer';

      const b = Buffer.from('abcdef');

      // Passing a value that's a number, but not a valid byte.
      // Prints: 2, equivalent to searching for 99 or 'c'.
      console.log(b.lastIndexOf(99.9));
      console.log(b.lastIndexOf(256 + 99));

      // Passing a byteOffset that coerces to NaN.
      // Prints: 1, searching the whole buffer.
      console.log(b.lastIndexOf('b', undefined));
      console.log(b.lastIndexOf('b', {}));

      // Passing a byteOffset that coerces to 0.
      // Prints: -1, equivalent to passing 0.
      console.log(b.lastIndexOf('b', null));
      console.log(b.lastIndexOf('b', [])); +
      + +

      If value is an empty string or empty Buffer, byteOffset will be returned.

      +

      Parameters

      • value: string | number | Uint8Array

        What to search for.

        +
      • OptionalbyteOffset: number

        Where to begin searching in buf. If negative, then offset is calculated from the end of buf.

        +
      • Optionalencoding: BufferEncoding

        If value is a string, this is the encoding used to determine the binary representation of the string that will be searched for in buf.

        +

      Returns number

      The index of the last occurrence of value in buf, or -1 if buf does not contain value.

      +

      v6.0.0

      +
    • Calls a defined callback function on each element of an array, and returns an array that +contains the results.

      +

      Parameters

      • callbackfn: ((value: number, index: number, array: Uint8Array) => number)

        A function that accepts up to three arguments. The map method calls the +callbackfn function one time for each element in the array.

        +
          • (value, index, array): number
          • Parameters

            • value: number
            • index: number
            • array: Uint8Array

            Returns number

      • OptionalthisArg: any

        An object to which the this keyword can refer in the callbackfn function. +If thisArg is omitted, undefined is used as the this value.

        +

      Returns Uint8Array

    • Reads a signed, big-endian 64-bit integer from buf at the specified offset.

      +

      Integers read from a Buffer are interpreted as two's complement signed +values.

      +

      Parameters

      • Optionaloffset: number

        Number of bytes to skip before starting to read. Must satisfy: 0 <= offset <= buf.length - 8.

        +

      Returns bigint

      v12.0.0, v10.20.0

      +
    • Reads a signed, little-endian 64-bit integer from buf at the specifiedoffset.

      +

      Integers read from a Buffer are interpreted as two's complement signed +values.

      +

      Parameters

      • Optionaloffset: number

        Number of bytes to skip before starting to read. Must satisfy: 0 <= offset <= buf.length - 8.

        +

      Returns bigint

      v12.0.0, v10.20.0

      +
    • Reads an unsigned, big-endian 64-bit integer from buf at the specifiedoffset.

      +

      This function is also available under the readBigUint64BE alias.

      +
      import { Buffer } from 'node:buffer';

      const buf = Buffer.from([0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff]);

      console.log(buf.readBigUInt64BE(0));
      // Prints: 4294967295n +
      + +

      Parameters

      • Optionaloffset: number

        Number of bytes to skip before starting to read. Must satisfy: 0 <= offset <= buf.length - 8.

        +

      Returns bigint

      v12.0.0, v10.20.0

      +
    • Reads an unsigned, little-endian 64-bit integer from buf at the specifiedoffset.

      +

      This function is also available under the readBigUint64LE alias.

      +
      import { Buffer } from 'node:buffer';

      const buf = Buffer.from([0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff]);

      console.log(buf.readBigUInt64LE(0));
      // Prints: 18446744069414584320n +
      + +

      Parameters

      • Optionaloffset: number

        Number of bytes to skip before starting to read. Must satisfy: 0 <= offset <= buf.length - 8.

        +

      Returns bigint

      v12.0.0, v10.20.0

      +
    • Parameters

      • Optionaloffset: number

      Returns bigint

      Buffer.readBigUInt64BE

      +

      v14.10.0, v12.19.0

      +
    • Parameters

      • Optionaloffset: number

      Returns bigint

      Buffer.readBigUInt64LE

      +

      v14.10.0, v12.19.0

      +
    • Reads a 64-bit, big-endian double from buf at the specified offset.

      +
      import { Buffer } from 'node:buffer';

      const buf = Buffer.from([1, 2, 3, 4, 5, 6, 7, 8]);

      console.log(buf.readDoubleBE(0));
      // Prints: 8.20788039913184e-304 +
      + +

      Parameters

      • Optionaloffset: number

        Number of bytes to skip before starting to read. Must satisfy 0 <= offset <= buf.length - 8.

        +

      Returns number

      v0.11.15

      +
    • Reads a 64-bit, little-endian double from buf at the specified offset.

      +
      import { Buffer } from 'node:buffer';

      const buf = Buffer.from([1, 2, 3, 4, 5, 6, 7, 8]);

      console.log(buf.readDoubleLE(0));
      // Prints: 5.447603722011605e-270
      console.log(buf.readDoubleLE(1));
      // Throws ERR_OUT_OF_RANGE. +
      + +

      Parameters

      • Optionaloffset: number

        Number of bytes to skip before starting to read. Must satisfy 0 <= offset <= buf.length - 8.

        +

      Returns number

      v0.11.15

      +
    • Reads a 32-bit, big-endian float from buf at the specified offset.

      +
      import { Buffer } from 'node:buffer';

      const buf = Buffer.from([1, 2, 3, 4]);

      console.log(buf.readFloatBE(0));
      // Prints: 2.387939260590663e-38 +
      + +

      Parameters

      • Optionaloffset: number

        Number of bytes to skip before starting to read. Must satisfy 0 <= offset <= buf.length - 4.

        +

      Returns number

      v0.11.15

      +
    • Reads a 32-bit, little-endian float from buf at the specified offset.

      +
      import { Buffer } from 'node:buffer';

      const buf = Buffer.from([1, 2, 3, 4]);

      console.log(buf.readFloatLE(0));
      // Prints: 1.539989614439558e-36
      console.log(buf.readFloatLE(1));
      // Throws ERR_OUT_OF_RANGE. +
      + +

      Parameters

      • Optionaloffset: number

        Number of bytes to skip before starting to read. Must satisfy 0 <= offset <= buf.length - 4.

        +

      Returns number

      v0.11.15

      +
    • Reads a signed, big-endian 16-bit integer from buf at the specified offset.

      +

      Integers read from a Buffer are interpreted as two's complement signed values.

      +
      import { Buffer } from 'node:buffer';

      const buf = Buffer.from([0, 5]);

      console.log(buf.readInt16BE(0));
      // Prints: 5 +
      + +

      Parameters

      • Optionaloffset: number

        Number of bytes to skip before starting to read. Must satisfy 0 <= offset <= buf.length - 2.

        +

      Returns number

      v0.5.5

      +
    • Reads a signed, little-endian 16-bit integer from buf at the specifiedoffset.

      +

      Integers read from a Buffer are interpreted as two's complement signed values.

      +
      import { Buffer } from 'node:buffer';

      const buf = Buffer.from([0, 5]);

      console.log(buf.readInt16LE(0));
      // Prints: 1280
      console.log(buf.readInt16LE(1));
      // Throws ERR_OUT_OF_RANGE. +
      + +

      Parameters

      • Optionaloffset: number

        Number of bytes to skip before starting to read. Must satisfy 0 <= offset <= buf.length - 2.

        +

      Returns number

      v0.5.5

      +
    • Reads a signed, big-endian 32-bit integer from buf at the specified offset.

      +

      Integers read from a Buffer are interpreted as two's complement signed values.

      +
      import { Buffer } from 'node:buffer';

      const buf = Buffer.from([0, 0, 0, 5]);

      console.log(buf.readInt32BE(0));
      // Prints: 5 +
      + +

      Parameters

      • Optionaloffset: number

        Number of bytes to skip before starting to read. Must satisfy 0 <= offset <= buf.length - 4.

        +

      Returns number

      v0.5.5

      +
    • Reads a signed, little-endian 32-bit integer from buf at the specifiedoffset.

      +

      Integers read from a Buffer are interpreted as two's complement signed values.

      +
      import { Buffer } from 'node:buffer';

      const buf = Buffer.from([0, 0, 0, 5]);

      console.log(buf.readInt32LE(0));
      // Prints: 83886080
      console.log(buf.readInt32LE(1));
      // Throws ERR_OUT_OF_RANGE. +
      + +

      Parameters

      • Optionaloffset: number

        Number of bytes to skip before starting to read. Must satisfy 0 <= offset <= buf.length - 4.

        +

      Returns number

      v0.5.5

      +
    • Reads a signed 8-bit integer from buf at the specified offset.

      +

      Integers read from a Buffer are interpreted as two's complement signed values.

      +
      import { Buffer } from 'node:buffer';

      const buf = Buffer.from([-1, 5]);

      console.log(buf.readInt8(0));
      // Prints: -1
      console.log(buf.readInt8(1));
      // Prints: 5
      console.log(buf.readInt8(2));
      // Throws ERR_OUT_OF_RANGE. +
      + +

      Parameters

      • Optionaloffset: number

        Number of bytes to skip before starting to read. Must satisfy 0 <= offset <= buf.length - 1.

        +

      Returns number

      v0.5.0

      +
    • Reads byteLength number of bytes from buf at the specified offset and interprets the result as a big-endian, two's complement signed value +supporting up to 48 bits of accuracy.

      +
      import { Buffer } from 'node:buffer';

      const buf = Buffer.from([0x12, 0x34, 0x56, 0x78, 0x90, 0xab]);

      console.log(buf.readIntBE(0, 6).toString(16));
      // Prints: 1234567890ab
      console.log(buf.readIntBE(1, 6).toString(16));
      // Throws ERR_OUT_OF_RANGE.
      console.log(buf.readIntBE(1, 0).toString(16));
      // Throws ERR_OUT_OF_RANGE. +
      + +

      Parameters

      • offset: number

        Number of bytes to skip before starting to read. Must satisfy 0 <= offset <= buf.length - byteLength.

        +
      • byteLength: number

        Number of bytes to read. Must satisfy 0 < byteLength <= 6.

        +

      Returns number

      v0.11.15

      +
    • Reads byteLength number of bytes from buf at the specified offset and interprets the result as a little-endian, two's complement signed value +supporting up to 48 bits of accuracy.

      +
      import { Buffer } from 'node:buffer';

      const buf = Buffer.from([0x12, 0x34, 0x56, 0x78, 0x90, 0xab]);

      console.log(buf.readIntLE(0, 6).toString(16));
      // Prints: -546f87a9cbee +
      + +

      Parameters

      • offset: number

        Number of bytes to skip before starting to read. Must satisfy 0 <= offset <= buf.length - byteLength.

        +
      • byteLength: number

        Number of bytes to read. Must satisfy 0 < byteLength <= 6.

        +

      Returns number

      v0.11.15

      +
    • Reads an unsigned, big-endian 16-bit integer from buf at the specifiedoffset.

      +

      This function is also available under the readUint16BE alias.

      +
      import { Buffer } from 'node:buffer';

      const buf = Buffer.from([0x12, 0x34, 0x56]);

      console.log(buf.readUInt16BE(0).toString(16));
      // Prints: 1234
      console.log(buf.readUInt16BE(1).toString(16));
      // Prints: 3456 +
      + +

      Parameters

      • Optionaloffset: number

        Number of bytes to skip before starting to read. Must satisfy 0 <= offset <= buf.length - 2.

        +

      Returns number

      v0.5.5

      +
    • Reads an unsigned, little-endian 16-bit integer from buf at the specified offset.

      +

      This function is also available under the readUint16LE alias.

      +
      import { Buffer } from 'node:buffer';

      const buf = Buffer.from([0x12, 0x34, 0x56]);

      console.log(buf.readUInt16LE(0).toString(16));
      // Prints: 3412
      console.log(buf.readUInt16LE(1).toString(16));
      // Prints: 5634
      console.log(buf.readUInt16LE(2).toString(16));
      // Throws ERR_OUT_OF_RANGE. +
      + +

      Parameters

      • Optionaloffset: number

        Number of bytes to skip before starting to read. Must satisfy 0 <= offset <= buf.length - 2.

        +

      Returns number

      v0.5.5

      +
    • Reads an unsigned, big-endian 32-bit integer from buf at the specifiedoffset.

      +

      This function is also available under the readUint32BE alias.

      +
      import { Buffer } from 'node:buffer';

      const buf = Buffer.from([0x12, 0x34, 0x56, 0x78]);

      console.log(buf.readUInt32BE(0).toString(16));
      // Prints: 12345678 +
      + +

      Parameters

      • Optionaloffset: number

        Number of bytes to skip before starting to read. Must satisfy 0 <= offset <= buf.length - 4.

        +

      Returns number

      v0.5.5

      +
    • Reads an unsigned, little-endian 32-bit integer from buf at the specifiedoffset.

      +

      This function is also available under the readUint32LE alias.

      +
      import { Buffer } from 'node:buffer';

      const buf = Buffer.from([0x12, 0x34, 0x56, 0x78]);

      console.log(buf.readUInt32LE(0).toString(16));
      // Prints: 78563412
      console.log(buf.readUInt32LE(1).toString(16));
      // Throws ERR_OUT_OF_RANGE. +
      + +

      Parameters

      • Optionaloffset: number

        Number of bytes to skip before starting to read. Must satisfy 0 <= offset <= buf.length - 4.

        +

      Returns number

      v0.5.5

      +
    • Reads an unsigned 8-bit integer from buf at the specified offset.

      +

      This function is also available under the readUint8 alias.

      +
      import { Buffer } from 'node:buffer';

      const buf = Buffer.from([1, -2]);

      console.log(buf.readUInt8(0));
      // Prints: 1
      console.log(buf.readUInt8(1));
      // Prints: 254
      console.log(buf.readUInt8(2));
      // Throws ERR_OUT_OF_RANGE. +
      + +

      Parameters

      • Optionaloffset: number

        Number of bytes to skip before starting to read. Must satisfy 0 <= offset <= buf.length - 1.

        +

      Returns number

      v0.5.0

      +
    • Reads byteLength number of bytes from buf at the specified offset and interprets the result as an unsigned big-endian integer supporting +up to 48 bits of accuracy.

      +

      This function is also available under the readUintBE alias.

      +
      import { Buffer } from 'node:buffer';

      const buf = Buffer.from([0x12, 0x34, 0x56, 0x78, 0x90, 0xab]);

      console.log(buf.readUIntBE(0, 6).toString(16));
      // Prints: 1234567890ab
      console.log(buf.readUIntBE(1, 6).toString(16));
      // Throws ERR_OUT_OF_RANGE. +
      + +

      Parameters

      • offset: number

        Number of bytes to skip before starting to read. Must satisfy 0 <= offset <= buf.length - byteLength.

        +
      • byteLength: number

        Number of bytes to read. Must satisfy 0 < byteLength <= 6.

        +

      Returns number

      v0.11.15

      +
    • Reads byteLength number of bytes from buf at the specified offset and interprets the result as an unsigned, little-endian integer supporting +up to 48 bits of accuracy.

      +

      This function is also available under the readUintLE alias.

      +
      import { Buffer } from 'node:buffer';

      const buf = Buffer.from([0x12, 0x34, 0x56, 0x78, 0x90, 0xab]);

      console.log(buf.readUIntLE(0, 6).toString(16));
      // Prints: ab9078563412 +
      + +

      Parameters

      • offset: number

        Number of bytes to skip before starting to read. Must satisfy 0 <= offset <= buf.length - byteLength.

        +
      • byteLength: number

        Number of bytes to read. Must satisfy 0 < byteLength <= 6.

        +

      Returns number

      v0.11.15

      +
    • Parameters

      • Optionaloffset: number

      Returns number

      Buffer.readUInt16BE

      +

      v14.9.0, v12.19.0

      +
    • Parameters

      • Optionaloffset: number

      Returns number

      Buffer.readUInt16LE

      +

      v14.9.0, v12.19.0

      +
    • Parameters

      • Optionaloffset: number

      Returns number

      Buffer.readUInt32BE

      +

      v14.9.0, v12.19.0

      +
    • Parameters

      • Optionaloffset: number

      Returns number

      Buffer.readUInt32LE

      +

      v14.9.0, v12.19.0

      +
    • Parameters

      • Optionaloffset: number

      Returns number

      Buffer.readUInt8

      +

      v14.9.0, v12.19.0

      +
    • Parameters

      • offset: number
      • byteLength: number

      Returns number

      Buffer.readUIntBE

      +

      v14.9.0, v12.19.0

      +
    • Parameters

      • offset: number
      • byteLength: number

      Returns number

      Buffer.readUIntLE

      +

      v14.9.0, v12.19.0

      +
    • Calls the specified callback function for all the elements in an array. The return value of +the callback function is the accumulated result, and is provided as an argument in the next +call to the callback function.

      +

      Parameters

      • callbackfn: ((previousValue: number, currentValue: number, currentIndex: number, array: Uint8Array) => number)

        A function that accepts up to four arguments. The reduce method calls the +callbackfn function one time for each element in the array.

        +
          • (previousValue, currentValue, currentIndex, array): number
          • Parameters

            • previousValue: number
            • currentValue: number
            • currentIndex: number
            • array: Uint8Array

            Returns number

      Returns number

    • Parameters

      • callbackfn: ((previousValue: number, currentValue: number, currentIndex: number, array: Uint8Array) => number)
          • (previousValue, currentValue, currentIndex, array): number
          • Parameters

            • previousValue: number
            • currentValue: number
            • currentIndex: number
            • array: Uint8Array

            Returns number

      • initialValue: number

      Returns number

    • Calls the specified callback function for all the elements in an array. The return value of +the callback function is the accumulated result, and is provided as an argument in the next +call to the callback function.

      +

      Type Parameters

      • U

      Parameters

      • callbackfn: ((previousValue: U, currentValue: number, currentIndex: number, array: Uint8Array) => U)

        A function that accepts up to four arguments. The reduce method calls the +callbackfn function one time for each element in the array.

        +
          • (previousValue, currentValue, currentIndex, array): U
          • Parameters

            • previousValue: U
            • currentValue: number
            • currentIndex: number
            • array: Uint8Array

            Returns U

      • initialValue: U

        If initialValue is specified, it is used as the initial value to start +the accumulation. The first call to the callbackfn function provides this value as an argument +instead of an array value.

        +

      Returns U

    • Calls the specified callback function for all the elements in an array, in descending order. +The return value of the callback function is the accumulated result, and is provided as an +argument in the next call to the callback function.

      +

      Parameters

      • callbackfn: ((previousValue: number, currentValue: number, currentIndex: number, array: Uint8Array) => number)

        A function that accepts up to four arguments. The reduceRight method calls +the callbackfn function one time for each element in the array.

        +
          • (previousValue, currentValue, currentIndex, array): number
          • Parameters

            • previousValue: number
            • currentValue: number
            • currentIndex: number
            • array: Uint8Array

            Returns number

      Returns number

    • Parameters

      • callbackfn: ((previousValue: number, currentValue: number, currentIndex: number, array: Uint8Array) => number)
          • (previousValue, currentValue, currentIndex, array): number
          • Parameters

            • previousValue: number
            • currentValue: number
            • currentIndex: number
            • array: Uint8Array

            Returns number

      • initialValue: number

      Returns number

    • Calls the specified callback function for all the elements in an array, in descending order. +The return value of the callback function is the accumulated result, and is provided as an +argument in the next call to the callback function.

      +

      Type Parameters

      • U

      Parameters

      • callbackfn: ((previousValue: U, currentValue: number, currentIndex: number, array: Uint8Array) => U)

        A function that accepts up to four arguments. The reduceRight method calls +the callbackfn function one time for each element in the array.

        +
          • (previousValue, currentValue, currentIndex, array): U
          • Parameters

            • previousValue: U
            • currentValue: number
            • currentIndex: number
            • array: Uint8Array

            Returns U

      • initialValue: U

        If initialValue is specified, it is used as the initial value to start +the accumulation. The first call to the callbackfn function provides this value as an argument +instead of an array value.

        +

      Returns U

    • Reverses the elements in an Array.

      +

      Returns this

    • Sets a value or an array of values.

      +

      Parameters

      • array: ArrayLike<number>

        A typed or untyped array of values to set.

        +
      • Optionaloffset: number

        The index in the current array at which the values are to be written.

        +

      Returns void

    • Returns a new Buffer that references the same memory as the original, but +offset and cropped by the start and end indices.

      +

      This method is not compatible with the Uint8Array.prototype.slice(), +which is a superclass of Buffer. To copy the slice, useUint8Array.prototype.slice().

      +
      import { Buffer } from 'node:buffer';

      const buf = Buffer.from('buffer');

      const copiedBuf = Uint8Array.prototype.slice.call(buf);
      copiedBuf[0]++;
      console.log(copiedBuf.toString());
      // Prints: cuffer

      console.log(buf.toString());
      // Prints: buffer

      // With buf.slice(), the original buffer is modified.
      const notReallyCopiedBuf = buf.slice();
      notReallyCopiedBuf[0]++;
      console.log(notReallyCopiedBuf.toString());
      // Prints: cuffer
      console.log(buf.toString());
      // Also prints: cuffer (!) +
      + +

      Parameters

      • Optionalstart: number

        Where the new Buffer will start.

        +
      • Optionalend: number

        Where the new Buffer will end (not inclusive).

        +

      Returns Buffer

      v0.3.0

      +

      Use subarray instead.

      +
    • Determines whether the specified callback function returns true for any element of an array.

      +

      Parameters

      • predicate: ((value: number, index: number, array: Uint8Array) => unknown)

        A function that accepts up to three arguments. The some method calls +the predicate function for each element in the array until the predicate returns a value +which is coercible to the Boolean value true, or until the end of the array.

        +
          • (value, index, array): unknown
          • Parameters

            • value: number
            • index: number
            • array: Uint8Array

            Returns unknown

      • OptionalthisArg: any

        An object to which the this keyword can refer in the predicate function. +If thisArg is omitted, undefined is used as the this value.

        +

      Returns boolean

    • Sorts an array.

      +

      Parameters

      • OptionalcompareFn: ((a: number, b: number) => number)

        Function used to determine the order of the elements. It is expected to return +a negative value if first argument is less than second argument, zero if they're equal and a positive +value otherwise. If omitted, the elements are sorted in ascending order.

        +
        [11,2,22,1].sort((a, b) => a - b)
        +
        + +
          • (a, b): number
          • Parameters

            • a: number
            • b: number

            Returns number

      Returns this

    • Returns a new Buffer that references the same memory as the original, but +offset and cropped by the start and end indices.

      +

      Specifying end greater than buf.length will return the same result as +that of end equal to buf.length.

      +

      This method is inherited from TypedArray.prototype.subarray().

      +

      Modifying the new Buffer slice will modify the memory in the original Bufferbecause the allocated memory of the two objects overlap.

      +
      import { Buffer } from 'node:buffer';

      // Create a `Buffer` with the ASCII alphabet, take a slice, and modify one byte
      // from the original `Buffer`.

      const buf1 = Buffer.allocUnsafe(26);

      for (let i = 0; i < 26; i++) {
      // 97 is the decimal ASCII value for 'a'.
      buf1[i] = i + 97;
      }

      const buf2 = buf1.subarray(0, 3);

      console.log(buf2.toString('ascii', 0, buf2.length));
      // Prints: abc

      buf1[0] = 33;

      console.log(buf2.toString('ascii', 0, buf2.length));
      // Prints: !bc +
      + +

      Specifying negative indexes causes the slice to be generated relative to the +end of buf rather than the beginning.

      +
      import { Buffer } from 'node:buffer';

      const buf = Buffer.from('buffer');

      console.log(buf.subarray(-6, -1).toString());
      // Prints: buffe
      // (Equivalent to buf.subarray(0, 5).)

      console.log(buf.subarray(-6, -2).toString());
      // Prints: buff
      // (Equivalent to buf.subarray(0, 4).)

      console.log(buf.subarray(-5, -2).toString());
      // Prints: uff
      // (Equivalent to buf.subarray(1, 4).) +
      + +

      Parameters

      • Optionalstart: number

        Where the new Buffer will start.

        +
      • Optionalend: number

        Where the new Buffer will end (not inclusive).

        +

      Returns Buffer

      v3.0.0

      +
    • Interprets buf as an array of unsigned 16-bit integers and swaps the +byte order in-place. Throws ERR_INVALID_BUFFER_SIZE if buf.length is not a multiple of 2.

      +
      import { Buffer } from 'node:buffer';

      const buf1 = Buffer.from([0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7, 0x8]);

      console.log(buf1);
      // Prints: <Buffer 01 02 03 04 05 06 07 08>

      buf1.swap16();

      console.log(buf1);
      // Prints: <Buffer 02 01 04 03 06 05 08 07>

      const buf2 = Buffer.from([0x1, 0x2, 0x3]);

      buf2.swap16();
      // Throws ERR_INVALID_BUFFER_SIZE. +
      + +

      One convenient use of buf.swap16() is to perform a fast in-place conversion +between UTF-16 little-endian and UTF-16 big-endian:

      +
      import { Buffer } from 'node:buffer';

      const buf = Buffer.from('This is little-endian UTF-16', 'utf16le');
      buf.swap16(); // Convert to big-endian UTF-16 text. +
      + +

      Returns Buffer

      A reference to buf.

      +

      v5.10.0

      +
    • Interprets buf as an array of unsigned 32-bit integers and swaps the +byte order in-place. Throws ERR_INVALID_BUFFER_SIZE if buf.length is not a multiple of 4.

      +
      import { Buffer } from 'node:buffer';

      const buf1 = Buffer.from([0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7, 0x8]);

      console.log(buf1);
      // Prints: <Buffer 01 02 03 04 05 06 07 08>

      buf1.swap32();

      console.log(buf1);
      // Prints: <Buffer 04 03 02 01 08 07 06 05>

      const buf2 = Buffer.from([0x1, 0x2, 0x3]);

      buf2.swap32();
      // Throws ERR_INVALID_BUFFER_SIZE. +
      + +

      Returns Buffer

      A reference to buf.

      +

      v5.10.0

      +
    • Interprets buf as an array of 64-bit numbers and swaps byte order in-place. +Throws ERR_INVALID_BUFFER_SIZE if buf.length is not a multiple of 8.

      +
      import { Buffer } from 'node:buffer';

      const buf1 = Buffer.from([0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7, 0x8]);

      console.log(buf1);
      // Prints: <Buffer 01 02 03 04 05 06 07 08>

      buf1.swap64();

      console.log(buf1);
      // Prints: <Buffer 08 07 06 05 04 03 02 01>

      const buf2 = Buffer.from([0x1, 0x2, 0x3]);

      buf2.swap64();
      // Throws ERR_INVALID_BUFFER_SIZE. +
      + +

      Returns Buffer

      A reference to buf.

      +

      v6.3.0

      +
    • Returns a JSON representation of buf. JSON.stringify() implicitly calls +this function when stringifying a Buffer instance.

      +

      Buffer.from() accepts objects in the format returned from this method. +In particular, Buffer.from(buf.toJSON()) works like Buffer.from(buf).

      +
      import { Buffer } from 'node:buffer';

      const buf = Buffer.from([0x1, 0x2, 0x3, 0x4, 0x5]);
      const json = JSON.stringify(buf);

      console.log(json);
      // Prints: {"type":"Buffer","data":[1,2,3,4,5]}

      const copy = JSON.parse(json, (key, value) => {
      return value &#x26;&#x26; value.type === 'Buffer' ?
      Buffer.from(value) :
      value;
      });

      console.log(copy);
      // Prints: <Buffer 01 02 03 04 05> +
      + +

      Returns {
          data: number[];
          type: "Buffer";
      }

      • data: number[]
      • type: "Buffer"

      v0.9.2

      +
    • Converts a number to a string by using the current locale.

      +

      Returns string

    • Decodes buf to a string according to the specified character encoding inencoding. start and end may be passed to decode only a subset of buf.

      +

      If encoding is 'utf8' and a byte sequence in the input is not valid UTF-8, +then each invalid byte is replaced with the replacement character U+FFFD.

      +

      The maximum length of a string instance (in UTF-16 code units) is available +as constants.MAX_STRING_LENGTH.

      +
      import { Buffer } from 'node:buffer';

      const buf1 = Buffer.allocUnsafe(26);

      for (let i = 0; i < 26; i++) {
      // 97 is the decimal ASCII value for 'a'.
      buf1[i] = i + 97;
      }

      console.log(buf1.toString('utf8'));
      // Prints: abcdefghijklmnopqrstuvwxyz
      console.log(buf1.toString('utf8', 0, 5));
      // Prints: abcde

      const buf2 = Buffer.from('tést');

      console.log(buf2.toString('hex'));
      // Prints: 74c3a97374
      console.log(buf2.toString('utf8', 0, 3));
      // Prints: té
      console.log(buf2.toString(undefined, 0, 3));
      // Prints: té +
      + +

      Parameters

      • Optionalencoding: BufferEncoding

        The character encoding to use.

        +
      • Optionalstart: number

        The byte offset to start decoding at.

        +
      • Optionalend: number

        The byte offset to stop decoding at (not inclusive).

        +

      Returns string

      v0.1.90

      +
    • Returns the primitive value of the specified object.

      +

      Returns Uint8Array

    • Returns an list of values in the array

      +

      Returns IterableIterator<number>

    • Writes string to buf at offset according to the character encoding inencoding. The length parameter is the number of bytes to write. If buf did +not contain enough space to fit the entire string, only part of string will be +written. However, partially encoded characters will not be written.

      +
      import { Buffer } from 'node:buffer';

      const buf = Buffer.alloc(256);

      const len = buf.write('\u00bd + \u00bc = \u00be', 0);

      console.log(`${len} bytes: ${buf.toString('utf8', 0, len)}`);
      // Prints: 12 bytes: ½ + ¼ = ¾

      const buffer = Buffer.alloc(10);

      const length = buffer.write('abcd', 8);

      console.log(`${length} bytes: ${buffer.toString('utf8', 8, 10)}`);
      // Prints: 2 bytes : ab +
      + +

      Parameters

      • string: string

        String to write to buf.

        +
      • Optionalencoding: BufferEncoding

        The character encoding of string.

        +

      Returns number

      Number of bytes written.

      +

      v0.1.90

      +
    • Parameters

      Returns number

    • Parameters

      • string: string
      • offset: number
      • length: number
      • Optionalencoding: BufferEncoding

      Returns number

    • Writes value to buf at the specified offset as big-endian.

      +

      value is interpreted and written as a two's complement signed integer.

      +
      import { Buffer } from 'node:buffer';

      const buf = Buffer.allocUnsafe(8);

      buf.writeBigInt64BE(0x0102030405060708n, 0);

      console.log(buf);
      // Prints: <Buffer 01 02 03 04 05 06 07 08> +
      + +

      Parameters

      • value: bigint

        Number to be written to buf.

        +
      • Optionaloffset: number

        Number of bytes to skip before starting to write. Must satisfy: 0 <= offset <= buf.length - 8.

        +

      Returns number

      offset plus the number of bytes written.

      +

      v12.0.0, v10.20.0

      +
    • Writes value to buf at the specified offset as little-endian.

      +

      value is interpreted and written as a two's complement signed integer.

      +
      import { Buffer } from 'node:buffer';

      const buf = Buffer.allocUnsafe(8);

      buf.writeBigInt64LE(0x0102030405060708n, 0);

      console.log(buf);
      // Prints: <Buffer 08 07 06 05 04 03 02 01> +
      + +

      Parameters

      • value: bigint

        Number to be written to buf.

        +
      • Optionaloffset: number

        Number of bytes to skip before starting to write. Must satisfy: 0 <= offset <= buf.length - 8.

        +

      Returns number

      offset plus the number of bytes written.

      +

      v12.0.0, v10.20.0

      +
    • Writes value to buf at the specified offset as big-endian.

      +

      This function is also available under the writeBigUint64BE alias.

      +
      import { Buffer } from 'node:buffer';

      const buf = Buffer.allocUnsafe(8);

      buf.writeBigUInt64BE(0xdecafafecacefaden, 0);

      console.log(buf);
      // Prints: <Buffer de ca fa fe ca ce fa de> +
      + +

      Parameters

      • value: bigint

        Number to be written to buf.

        +
      • Optionaloffset: number

        Number of bytes to skip before starting to write. Must satisfy: 0 <= offset <= buf.length - 8.

        +

      Returns number

      offset plus the number of bytes written.

      +

      v12.0.0, v10.20.0

      +
    • Writes value to buf at the specified offset as little-endian

      +
      import { Buffer } from 'node:buffer';

      const buf = Buffer.allocUnsafe(8);

      buf.writeBigUInt64LE(0xdecafafecacefaden, 0);

      console.log(buf);
      // Prints: <Buffer de fa ce ca fe fa ca de> +
      + +

      This function is also available under the writeBigUint64LE alias.

      +

      Parameters

      • value: bigint

        Number to be written to buf.

        +
      • Optionaloffset: number

        Number of bytes to skip before starting to write. Must satisfy: 0 <= offset <= buf.length - 8.

        +

      Returns number

      offset plus the number of bytes written.

      +

      v12.0.0, v10.20.0

      +
    • Parameters

      • value: bigint
      • Optionaloffset: number

      Returns number

      Buffer.writeBigUInt64BE

      +

      v14.10.0, v12.19.0

      +
    • Parameters

      • value: bigint
      • Optionaloffset: number

      Returns number

      Buffer.writeBigUInt64LE

      +

      v14.10.0, v12.19.0

      +
    • Writes value to buf at the specified offset as big-endian. The value must be a JavaScript number. Behavior is undefined when value is anything +other than a JavaScript number.

      +
      import { Buffer } from 'node:buffer';

      const buf = Buffer.allocUnsafe(8);

      buf.writeDoubleBE(123.456, 0);

      console.log(buf);
      // Prints: <Buffer 40 5e dd 2f 1a 9f be 77> +
      + +

      Parameters

      • value: number

        Number to be written to buf.

        +
      • Optionaloffset: number

        Number of bytes to skip before starting to write. Must satisfy 0 <= offset <= buf.length - 8.

        +

      Returns number

      offset plus the number of bytes written.

      +

      v0.11.15

      +
    • Writes value to buf at the specified offset as little-endian. The value must be a JavaScript number. Behavior is undefined when value is anything +other than a JavaScript number.

      +
      import { Buffer } from 'node:buffer';

      const buf = Buffer.allocUnsafe(8);

      buf.writeDoubleLE(123.456, 0);

      console.log(buf);
      // Prints: <Buffer 77 be 9f 1a 2f dd 5e 40> +
      + +

      Parameters

      • value: number

        Number to be written to buf.

        +
      • Optionaloffset: number

        Number of bytes to skip before starting to write. Must satisfy 0 <= offset <= buf.length - 8.

        +

      Returns number

      offset plus the number of bytes written.

      +

      v0.11.15

      +
    • Writes value to buf at the specified offset as big-endian. Behavior is +undefined when value is anything other than a JavaScript number.

      +
      import { Buffer } from 'node:buffer';

      const buf = Buffer.allocUnsafe(4);

      buf.writeFloatBE(0xcafebabe, 0);

      console.log(buf);
      // Prints: <Buffer 4f 4a fe bb> +
      + +

      Parameters

      • value: number

        Number to be written to buf.

        +
      • Optionaloffset: number

        Number of bytes to skip before starting to write. Must satisfy 0 <= offset <= buf.length - 4.

        +

      Returns number

      offset plus the number of bytes written.

      +

      v0.11.15

      +
    • Writes value to buf at the specified offset as little-endian. Behavior is +undefined when value is anything other than a JavaScript number.

      +
      import { Buffer } from 'node:buffer';

      const buf = Buffer.allocUnsafe(4);

      buf.writeFloatLE(0xcafebabe, 0);

      console.log(buf);
      // Prints: <Buffer bb fe 4a 4f> +
      + +

      Parameters

      • value: number

        Number to be written to buf.

        +
      • Optionaloffset: number

        Number of bytes to skip before starting to write. Must satisfy 0 <= offset <= buf.length - 4.

        +

      Returns number

      offset plus the number of bytes written.

      +

      v0.11.15

      +
    • Writes value to buf at the specified offset as big-endian. The value must be a valid signed 16-bit integer. Behavior is undefined when value is +anything other than a signed 16-bit integer.

      +

      The value is interpreted and written as a two's complement signed integer.

      +
      import { Buffer } from 'node:buffer';

      const buf = Buffer.allocUnsafe(2);

      buf.writeInt16BE(0x0102, 0);

      console.log(buf);
      // Prints: <Buffer 01 02> +
      + +

      Parameters

      • value: number

        Number to be written to buf.

        +
      • Optionaloffset: number

        Number of bytes to skip before starting to write. Must satisfy 0 <= offset <= buf.length - 2.

        +

      Returns number

      offset plus the number of bytes written.

      +

      v0.5.5

      +
    • Writes value to buf at the specified offset as little-endian. The value must be a valid signed 16-bit integer. Behavior is undefined when value is +anything other than a signed 16-bit integer.

      +

      The value is interpreted and written as a two's complement signed integer.

      +
      import { Buffer } from 'node:buffer';

      const buf = Buffer.allocUnsafe(2);

      buf.writeInt16LE(0x0304, 0);

      console.log(buf);
      // Prints: <Buffer 04 03> +
      + +

      Parameters

      • value: number

        Number to be written to buf.

        +
      • Optionaloffset: number

        Number of bytes to skip before starting to write. Must satisfy 0 <= offset <= buf.length - 2.

        +

      Returns number

      offset plus the number of bytes written.

      +

      v0.5.5

      +
    • Writes value to buf at the specified offset as big-endian. The value must be a valid signed 32-bit integer. Behavior is undefined when value is +anything other than a signed 32-bit integer.

      +

      The value is interpreted and written as a two's complement signed integer.

      +
      import { Buffer } from 'node:buffer';

      const buf = Buffer.allocUnsafe(4);

      buf.writeInt32BE(0x01020304, 0);

      console.log(buf);
      // Prints: <Buffer 01 02 03 04> +
      + +

      Parameters

      • value: number

        Number to be written to buf.

        +
      • Optionaloffset: number

        Number of bytes to skip before starting to write. Must satisfy 0 <= offset <= buf.length - 4.

        +

      Returns number

      offset plus the number of bytes written.

      +

      v0.5.5

      +
    • Writes value to buf at the specified offset as little-endian. The value must be a valid signed 32-bit integer. Behavior is undefined when value is +anything other than a signed 32-bit integer.

      +

      The value is interpreted and written as a two's complement signed integer.

      +
      import { Buffer } from 'node:buffer';

      const buf = Buffer.allocUnsafe(4);

      buf.writeInt32LE(0x05060708, 0);

      console.log(buf);
      // Prints: <Buffer 08 07 06 05> +
      + +

      Parameters

      • value: number

        Number to be written to buf.

        +
      • Optionaloffset: number

        Number of bytes to skip before starting to write. Must satisfy 0 <= offset <= buf.length - 4.

        +

      Returns number

      offset plus the number of bytes written.

      +

      v0.5.5

      +
    • Writes value to buf at the specified offset. value must be a valid +signed 8-bit integer. Behavior is undefined when value is anything other than +a signed 8-bit integer.

      +

      value is interpreted and written as a two's complement signed integer.

      +
      import { Buffer } from 'node:buffer';

      const buf = Buffer.allocUnsafe(2);

      buf.writeInt8(2, 0);
      buf.writeInt8(-2, 1);

      console.log(buf);
      // Prints: <Buffer 02 fe> +
      + +

      Parameters

      • value: number

        Number to be written to buf.

        +
      • Optionaloffset: number

        Number of bytes to skip before starting to write. Must satisfy 0 <= offset <= buf.length - 1.

        +

      Returns number

      offset plus the number of bytes written.

      +

      v0.5.0

      +
    • Writes byteLength bytes of value to buf at the specified offsetas big-endian. Supports up to 48 bits of accuracy. Behavior is undefined whenvalue is anything other than a +signed integer.

      +
      import { Buffer } from 'node:buffer';

      const buf = Buffer.allocUnsafe(6);

      buf.writeIntBE(0x1234567890ab, 0, 6);

      console.log(buf);
      // Prints: <Buffer 12 34 56 78 90 ab> +
      + +

      Parameters

      • value: number

        Number to be written to buf.

        +
      • offset: number

        Number of bytes to skip before starting to write. Must satisfy 0 <= offset <= buf.length - byteLength.

        +
      • byteLength: number

        Number of bytes to write. Must satisfy 0 < byteLength <= 6.

        +

      Returns number

      offset plus the number of bytes written.

      +

      v0.11.15

      +
    • Writes byteLength bytes of value to buf at the specified offsetas little-endian. Supports up to 48 bits of accuracy. Behavior is undefined +when value is anything other than a signed integer.

      +
      import { Buffer } from 'node:buffer';

      const buf = Buffer.allocUnsafe(6);

      buf.writeIntLE(0x1234567890ab, 0, 6);

      console.log(buf);
      // Prints: <Buffer ab 90 78 56 34 12> +
      + +

      Parameters

      • value: number

        Number to be written to buf.

        +
      • offset: number

        Number of bytes to skip before starting to write. Must satisfy 0 <= offset <= buf.length - byteLength.

        +
      • byteLength: number

        Number of bytes to write. Must satisfy 0 < byteLength <= 6.

        +

      Returns number

      offset plus the number of bytes written.

      +

      v0.11.15

      +
    • Writes value to buf at the specified offset as big-endian. The value must be a valid unsigned 16-bit integer. Behavior is undefined when valueis anything other than an +unsigned 16-bit integer.

      +

      This function is also available under the writeUint16BE alias.

      +
      import { Buffer } from 'node:buffer';

      const buf = Buffer.allocUnsafe(4);

      buf.writeUInt16BE(0xdead, 0);
      buf.writeUInt16BE(0xbeef, 2);

      console.log(buf);
      // Prints: <Buffer de ad be ef> +
      + +

      Parameters

      • value: number

        Number to be written to buf.

        +
      • Optionaloffset: number

        Number of bytes to skip before starting to write. Must satisfy 0 <= offset <= buf.length - 2.

        +

      Returns number

      offset plus the number of bytes written.

      +

      v0.5.5

      +
    • Writes value to buf at the specified offset as little-endian. The value must be a valid unsigned 16-bit integer. Behavior is undefined when value is +anything other than an unsigned 16-bit integer.

      +

      This function is also available under the writeUint16LE alias.

      +
      import { Buffer } from 'node:buffer';

      const buf = Buffer.allocUnsafe(4);

      buf.writeUInt16LE(0xdead, 0);
      buf.writeUInt16LE(0xbeef, 2);

      console.log(buf);
      // Prints: <Buffer ad de ef be> +
      + +

      Parameters

      • value: number

        Number to be written to buf.

        +
      • Optionaloffset: number

        Number of bytes to skip before starting to write. Must satisfy 0 <= offset <= buf.length - 2.

        +

      Returns number

      offset plus the number of bytes written.

      +

      v0.5.5

      +
    • Writes value to buf at the specified offset as big-endian. The value must be a valid unsigned 32-bit integer. Behavior is undefined when valueis anything other than an +unsigned 32-bit integer.

      +

      This function is also available under the writeUint32BE alias.

      +
      import { Buffer } from 'node:buffer';

      const buf = Buffer.allocUnsafe(4);

      buf.writeUInt32BE(0xfeedface, 0);

      console.log(buf);
      // Prints: <Buffer fe ed fa ce> +
      + +

      Parameters

      • value: number

        Number to be written to buf.

        +
      • Optionaloffset: number

        Number of bytes to skip before starting to write. Must satisfy 0 <= offset <= buf.length - 4.

        +

      Returns number

      offset plus the number of bytes written.

      +

      v0.5.5

      +
    • Writes value to buf at the specified offset as little-endian. The value must be a valid unsigned 32-bit integer. Behavior is undefined when value is +anything other than an unsigned 32-bit integer.

      +

      This function is also available under the writeUint32LE alias.

      +
      import { Buffer } from 'node:buffer';

      const buf = Buffer.allocUnsafe(4);

      buf.writeUInt32LE(0xfeedface, 0);

      console.log(buf);
      // Prints: <Buffer ce fa ed fe> +
      + +

      Parameters

      • value: number

        Number to be written to buf.

        +
      • Optionaloffset: number

        Number of bytes to skip before starting to write. Must satisfy 0 <= offset <= buf.length - 4.

        +

      Returns number

      offset plus the number of bytes written.

      +

      v0.5.5

      +
    • Writes value to buf at the specified offset. value must be a +valid unsigned 8-bit integer. Behavior is undefined when value is anything +other than an unsigned 8-bit integer.

      +

      This function is also available under the writeUint8 alias.

      +
      import { Buffer } from 'node:buffer';

      const buf = Buffer.allocUnsafe(4);

      buf.writeUInt8(0x3, 0);
      buf.writeUInt8(0x4, 1);
      buf.writeUInt8(0x23, 2);
      buf.writeUInt8(0x42, 3);

      console.log(buf);
      // Prints: <Buffer 03 04 23 42> +
      + +

      Parameters

      • value: number

        Number to be written to buf.

        +
      • Optionaloffset: number

        Number of bytes to skip before starting to write. Must satisfy 0 <= offset <= buf.length - 1.

        +

      Returns number

      offset plus the number of bytes written.

      +

      v0.5.0

      +
    • Writes byteLength bytes of value to buf at the specified offsetas big-endian. Supports up to 48 bits of accuracy. Behavior is undefined +when value is anything other than an unsigned integer.

      +

      This function is also available under the writeUintBE alias.

      +
      import { Buffer } from 'node:buffer';

      const buf = Buffer.allocUnsafe(6);

      buf.writeUIntBE(0x1234567890ab, 0, 6);

      console.log(buf);
      // Prints: <Buffer 12 34 56 78 90 ab> +
      + +

      Parameters

      • value: number

        Number to be written to buf.

        +
      • offset: number

        Number of bytes to skip before starting to write. Must satisfy 0 <= offset <= buf.length - byteLength.

        +
      • byteLength: number

        Number of bytes to write. Must satisfy 0 < byteLength <= 6.

        +

      Returns number

      offset plus the number of bytes written.

      +

      v0.5.5

      +
    • Writes byteLength bytes of value to buf at the specified offsetas little-endian. Supports up to 48 bits of accuracy. Behavior is undefined +when value is anything other than an unsigned integer.

      +

      This function is also available under the writeUintLE alias.

      +
      import { Buffer } from 'node:buffer';

      const buf = Buffer.allocUnsafe(6);

      buf.writeUIntLE(0x1234567890ab, 0, 6);

      console.log(buf);
      // Prints: <Buffer ab 90 78 56 34 12> +
      + +

      Parameters

      • value: number

        Number to be written to buf.

        +
      • offset: number

        Number of bytes to skip before starting to write. Must satisfy 0 <= offset <= buf.length - byteLength.

        +
      • byteLength: number

        Number of bytes to write. Must satisfy 0 < byteLength <= 6.

        +

      Returns number

      offset plus the number of bytes written.

      +

      v0.5.5

      +
    • Parameters

      • value: number
      • Optionaloffset: number

      Returns number

      Buffer.writeUInt16BE

      +

      v14.9.0, v12.19.0

      +
    • Parameters

      • value: number
      • Optionaloffset: number

      Returns number

      Buffer.writeUInt16LE

      +

      v14.9.0, v12.19.0

      +
    • Parameters

      • value: number
      • Optionaloffset: number

      Returns number

      Buffer.writeUInt32BE

      +

      v14.9.0, v12.19.0

      +
    • Parameters

      • value: number
      • Optionaloffset: number

      Returns number

      Buffer.writeUInt32LE

      +

      v14.9.0, v12.19.0

      +
    • Parameters

      • value: number
      • Optionaloffset: number

      Returns number

      Buffer.writeUInt8

      +

      v14.9.0, v12.19.0

      +
    • Parameters

      • value: number
      • offset: number
      • byteLength: number

      Returns number

      Buffer.writeUIntBE

      +

      v14.9.0, v12.19.0

      +
    • Parameters

      • value: number
      • offset: number
      • byteLength: number

      Returns number

      Buffer.writeUIntLE

      +

      v14.9.0, v12.19.0

      +
    diff --git a/api/interfaces/_internal_.BufferConstructor.html b/api/interfaces/_internal_.BufferConstructor.html new file mode 100644 index 000000000..0b7839ebc --- /dev/null +++ b/api/interfaces/_internal_.BufferConstructor.html @@ -0,0 +1,177 @@ +BufferConstructor | liquidjs

    Interface BufferConstructor

    Raw data is stored in instances of the Buffer class. +A Buffer is similar to an array of integers but corresponds to a raw memory allocation outside the V8 heap. A Buffer cannot be resized. +Valid string encodings: 'ascii'|'utf8'|'utf16le'|'ucs2'(alias of 'utf16le')|'base64'|'base64url'|'binary'(deprecated)|'hex'

    +
    interface BufferConstructor {
        new BufferConstructornew (str: string, encoding?: BufferEncoding): Buffer;
        new BufferConstructornew (size: number): Buffer;
        new BufferConstructornew (array: Uint8Array): Buffer;
        new BufferConstructornew (arrayBuffer: ArrayBuffer | SharedArrayBuffer): Buffer;
        new BufferConstructornew (array: readonly any[]): Buffer;
        new BufferConstructornew (buffer: Buffer): Buffer;
        poolSize: number;
        alloc(size: number, fill?: string | number | Uint8Array, encoding?: BufferEncoding): Buffer;
        allocUnsafe(size: number): Buffer;
        allocUnsafeSlow(size: number): Buffer;
        byteLength(string:
            | string
            | Buffer
            | ArrayBuffer
            | SharedArrayBuffer
            | ArrayBufferView, encoding?: BufferEncoding): number;
        compare(buf1: Uint8Array, buf2: Uint8Array): -1 | 0 | 1;
        concat(list: readonly Uint8Array[], totalLength?: number): Buffer;
        copyBytesFrom(view: TypedArray, offset?: number, length?: number): Buffer;
        from(arrayBuffer: WithImplicitCoercion<ArrayBuffer | SharedArrayBuffer>, byteOffset?: number, length?: number): Buffer;
        from(data: Uint8Array | readonly number[]): Buffer;
        from(data: WithImplicitCoercion<string | Uint8Array | readonly number[]>): Buffer;
        from(str: WithImplicitCoercion<string> | {
            [toPrimitive](hint: "string"): string;
        }, encoding?: BufferEncoding): Buffer;
        isBuffer(obj: any): obj is Buffer;
        isEncoding(encoding: string): encoding is BufferEncoding;
        of(...items: number[]): Buffer;
    }

    Constructors

    • Allocates a new buffer containing the given {str}.

      +

      Parameters

      • str: string

        String to store in buffer.

        +
      • Optionalencoding: BufferEncoding

        encoding to use, optional. Default is 'utf8'

        +

      Returns Buffer

      since v10.0.0 - Use Buffer.from(string[, encoding]) instead.

      +
    • Allocates a new buffer of {size} octets.

      +

      Parameters

      • size: number

        count of octets to allocate.

        +

      Returns Buffer

      since v10.0.0 - Use Buffer.alloc() instead (also see Buffer.allocUnsafe()).

      +
    • Allocates a new buffer containing the given {array} of octets.

      +

      Parameters

      • array: Uint8Array

        The octets to store.

        +

      Returns Buffer

      since v10.0.0 - Use Buffer.from(array) instead.

      +
    • Produces a Buffer backed by the same allocated memory as +the given {ArrayBuffer}/{SharedArrayBuffer}.

      +

      Parameters

      • arrayBuffer: ArrayBuffer | SharedArrayBuffer

        The ArrayBuffer with which to share memory.

        +

      Returns Buffer

      since v10.0.0 - Use Buffer.from(arrayBuffer[, byteOffset[, length]]) instead.

      +
    • Allocates a new buffer containing the given {array} of octets.

      +

      Parameters

      • array: readonly any[]

        The octets to store.

        +

      Returns Buffer

      since v10.0.0 - Use Buffer.from(array) instead.

      +
    • Copies the passed {buffer} data onto a new {Buffer} instance.

      +

      Parameters

      • buffer: Buffer

        The buffer to copy.

        +

      Returns Buffer

      since v10.0.0 - Use Buffer.from(buffer) instead.

      +

    Properties

    poolSize: number

    This is the size (in bytes) of pre-allocated internal Buffer instances used +for pooling. This value may be modified.

    +

    v0.11.3

    +

    Methods

    • Allocates a new Buffer of size bytes. If fill is undefined, theBuffer will be zero-filled.

      +
      import { Buffer } from 'node:buffer';

      const buf = Buffer.alloc(5);

      console.log(buf);
      // Prints: <Buffer 00 00 00 00 00> +
      + +

      If size is larger than constants.MAX_LENGTH or smaller than 0, ERR_OUT_OF_RANGE is thrown.

      +

      If fill is specified, the allocated Buffer will be initialized by calling buf.fill(fill).

      +
      import { Buffer } from 'node:buffer';

      const buf = Buffer.alloc(5, 'a');

      console.log(buf);
      // Prints: <Buffer 61 61 61 61 61> +
      + +

      If both fill and encoding are specified, the allocated Buffer will be +initialized by calling buf.fill(fill, encoding).

      +
      import { Buffer } from 'node:buffer';

      const buf = Buffer.alloc(11, 'aGVsbG8gd29ybGQ=', 'base64');

      console.log(buf);
      // Prints: <Buffer 68 65 6c 6c 6f 20 77 6f 72 6c 64> +
      + +

      Calling Buffer.alloc() can be measurably slower than the alternative Buffer.allocUnsafe() but ensures that the newly created Buffer instance +contents will never contain sensitive data from previous allocations, including +data that might not have been allocated for Buffers.

      +

      A TypeError will be thrown if size is not a number.

      +

      Parameters

      • size: number

        The desired length of the new Buffer.

        +
      • Optionalfill: string | number | Uint8Array

        A value to pre-fill the new Buffer with.

        +
      • Optionalencoding: BufferEncoding

        If fill is a string, this is its encoding.

        +

      Returns Buffer

      v5.10.0

      +
    • Allocates a new Buffer of size bytes. If size is larger than constants.MAX_LENGTH or smaller than 0, ERR_OUT_OF_RANGE is thrown.

      +

      The underlying memory for Buffer instances created in this way is not +initialized. The contents of the newly created Buffer are unknown and may contain sensitive data. Use Buffer.alloc() instead to initializeBuffer instances with zeroes.

      +
      import { Buffer } from 'node:buffer';

      const buf = Buffer.allocUnsafe(10);

      console.log(buf);
      // Prints (contents may vary): <Buffer a0 8b 28 3f 01 00 00 00 50 32>

      buf.fill(0);

      console.log(buf);
      // Prints: <Buffer 00 00 00 00 00 00 00 00 00 00> +
      + +

      A TypeError will be thrown if size is not a number.

      +

      The Buffer module pre-allocates an internal Buffer instance of +size Buffer.poolSize that is used as a pool for the fast allocation of new Buffer instances created using Buffer.allocUnsafe(), Buffer.from(array), +and Buffer.concat() only when size is less than Buffer.poolSize >>> 1 (floor of Buffer.poolSize divided by two).

      +

      Use of this pre-allocated internal memory pool is a key difference between +calling Buffer.alloc(size, fill) vs. Buffer.allocUnsafe(size).fill(fill). +Specifically, Buffer.alloc(size, fill) will never use the internal Bufferpool, while Buffer.allocUnsafe(size).fill(fill)will use the internalBuffer pool if size is less +than or equal to half Buffer.poolSize. The +difference is subtle but can be important when an application requires the +additional performance that Buffer.allocUnsafe() provides.

      +

      Parameters

      • size: number

        The desired length of the new Buffer.

        +

      Returns Buffer

      v5.10.0

      +
    • Allocates a new Buffer of size bytes. If size is larger than constants.MAX_LENGTH or smaller than 0, ERR_OUT_OF_RANGE is thrown. A zero-length Buffer is created if +size is 0.

      +

      The underlying memory for Buffer instances created in this way is not +initialized. The contents of the newly created Buffer are unknown and may contain sensitive data. Use buf.fill(0) to initialize +such Buffer instances with zeroes.

      +

      When using Buffer.allocUnsafe() to allocate new Buffer instances, +allocations under 4 KiB are sliced from a single pre-allocated Buffer. This +allows applications to avoid the garbage collection overhead of creating many +individually allocated Buffer instances. This approach improves both +performance and memory usage by eliminating the need to track and clean up as +many individual ArrayBuffer objects.

      +

      However, in the case where a developer may need to retain a small chunk of +memory from a pool for an indeterminate amount of time, it may be appropriate +to create an un-pooled Buffer instance using Buffer.allocUnsafeSlow() and +then copying out the relevant bits.

      +
      import { Buffer } from 'node:buffer';

      // Need to keep around a few small chunks of memory.
      const store = [];

      socket.on('readable', () => {
      let data;
      while (null !== (data = readable.read())) {
      // Allocate for retained data.
      const sb = Buffer.allocUnsafeSlow(10);

      // Copy the data into the new allocation.
      data.copy(sb, 0, 0, 10);

      store.push(sb);
      }
      }); +
      + +

      A TypeError will be thrown if size is not a number.

      +

      Parameters

      • size: number

        The desired length of the new Buffer.

        +

      Returns Buffer

      v5.12.0

      +
    • Returns the byte length of a string when encoded using encoding. +This is not the same as String.prototype.length, which does not account +for the encoding that is used to convert the string into bytes.

      +

      For 'base64', 'base64url', and 'hex', this function assumes valid input. +For strings that contain non-base64/hex-encoded data (e.g. whitespace), the +return value might be greater than the length of a Buffer created from the +string.

      +
      import { Buffer } from 'node:buffer';

      const str = '\u00bd + \u00bc = \u00be';

      console.log(`${str}: ${str.length} characters, ` +
      `${Buffer.byteLength(str, 'utf8')} bytes`);
      // Prints: ½ + ¼ = ¾: 9 characters, 12 bytes +
      + +

      When string is a +Buffer/DataView/[TypedArray](https://developer.mozilla.org/en-US/docs/Web/JavaScript/- +Reference/Global_Objects/TypedArray)/ArrayBuffer/[SharedArrayBuffer](https://develop- +er.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/SharedArrayBuffer), the byte length as reported by .byteLengthis returned.

      +

      Parameters

      Returns number

      The number of bytes contained within string.

      +

      v0.1.90

      +
    • Compares buf1 to buf2, typically for the purpose of sorting arrays of Buffer instances. This is equivalent to calling buf1.compare(buf2).

      +
      import { Buffer } from 'node:buffer';

      const buf1 = Buffer.from('1234');
      const buf2 = Buffer.from('0123');
      const arr = [buf1, buf2];

      console.log(arr.sort(Buffer.compare));
      // Prints: [ <Buffer 30 31 32 33>, <Buffer 31 32 33 34> ]
      // (This result is equal to: [buf2, buf1].) +
      + +

      Parameters

      • buf1: Uint8Array
      • buf2: Uint8Array

      Returns -1 | 0 | 1

      Either -1, 0, or 1, depending on the result of the comparison. See compare for details.

      +

      v0.11.13

      +
    • Returns a new Buffer which is the result of concatenating all the Buffer instances in the list together.

      +

      If the list has no items, or if the totalLength is 0, then a new zero-length Buffer is returned.

      +

      If totalLength is not provided, it is calculated from the Buffer instances +in list by adding their lengths.

      +

      If totalLength is provided, it is coerced to an unsigned integer. If the +combined length of the Buffers in list exceeds totalLength, the result is +truncated to totalLength.

      +
      import { Buffer } from 'node:buffer';

      // Create a single `Buffer` from a list of three `Buffer` instances.

      const buf1 = Buffer.alloc(10);
      const buf2 = Buffer.alloc(14);
      const buf3 = Buffer.alloc(18);
      const totalLength = buf1.length + buf2.length + buf3.length;

      console.log(totalLength);
      // Prints: 42

      const bufA = Buffer.concat([buf1, buf2, buf3], totalLength);

      console.log(bufA);
      // Prints: <Buffer 00 00 00 00 ...>
      console.log(bufA.length);
      // Prints: 42 +
      + +

      Buffer.concat() may also use the internal Buffer pool like Buffer.allocUnsafe() does.

      +

      Parameters

      • list: readonly Uint8Array[]

        List of Buffer or Uint8Array instances to concatenate.

        +
      • OptionaltotalLength: number

        Total length of the Buffer instances in list when concatenated.

        +

      Returns Buffer

      v0.7.11

      +
    • Copies the underlying memory of view into a new Buffer.

      +
      const u16 = new Uint16Array([0, 0xffff]);
      const buf = Buffer.copyBytesFrom(u16, 1, 1);
      u16[1] = 0;
      console.log(buf.length); // 2
      console.log(buf[0]); // 255
      console.log(buf[1]); // 255 +
      + +

      Parameters

      • view: TypedArray

        The {TypedArray} to copy.

        +
      • Optionaloffset: number

        The starting offset within view.

        +
      • Optionallength: number

        The number of elements from view to copy.

        +

      Returns Buffer

      v19.8.0

      +
    • Allocates a new Buffer using an array of bytes in the range 0255. +Array entries outside that range will be truncated to fit into it.

      +
      import { Buffer } from 'node:buffer';

      // Creates a new Buffer containing the UTF-8 bytes of the string 'buffer'.
      const buf = Buffer.from([0x62, 0x75, 0x66, 0x66, 0x65, 0x72]); +
      + +

      If array is an Array-like object (that is, one with a length property of +type number), it is treated as if it is an array, unless it is a Buffer or +a Uint8Array. This means all other TypedArray variants get treated as an Array. To create a Buffer from the bytes backing a TypedArray, use Buffer.copyBytesFrom().

      +

      A TypeError will be thrown if array is not an Array or another type +appropriate for Buffer.from() variants.

      +

      Buffer.from(array) and Buffer.from(string) may also use the internal Buffer pool like Buffer.allocUnsafe() does.

      +

      Parameters

      Returns Buffer

      v5.10.0

      +
    • Creates a new Buffer using the passed {data}

      +

      Parameters

      • data: Uint8Array | readonly number[]

        data to create a new Buffer

        +

      Returns Buffer

    • Parameters

      Returns Buffer

    • Creates a new Buffer containing the given JavaScript string {str}. +If provided, the {encoding} parameter identifies the character encoding. +If not provided, {encoding} defaults to 'utf8'.

      +

      Parameters

      Returns Buffer

    • Returns true if obj is a Buffer, false otherwise.

      +
      import { Buffer } from 'node:buffer';

      Buffer.isBuffer(Buffer.alloc(10)); // true
      Buffer.isBuffer(Buffer.from('foo')); // true
      Buffer.isBuffer('a string'); // false
      Buffer.isBuffer([]); // false
      Buffer.isBuffer(new Uint8Array(1024)); // false +
      + +

      Parameters

      • obj: any

      Returns obj is Buffer

      v0.1.101

      +
    • Returns true if encoding is the name of a supported character encoding, +or false otherwise.

      +
      import { Buffer } from 'node:buffer';

      console.log(Buffer.isEncoding('utf8'));
      // Prints: true

      console.log(Buffer.isEncoding('hex'));
      // Prints: true

      console.log(Buffer.isEncoding('utf/8'));
      // Prints: false

      console.log(Buffer.isEncoding(''));
      // Prints: false +
      + +

      Parameters

      • encoding: string

        A character encoding name to check.

        +

      Returns encoding is BufferEncoding

      v0.9.1

      +
    • Creates a new Buffer using the passed {data}

      +

      Parameters

      • Rest...items: number[]

      Returns Buffer

    diff --git a/api/interfaces/_internal_.Cache.html b/api/interfaces/_internal_.Cache.html new file mode 100644 index 000000000..dca9cfe5f --- /dev/null +++ b/api/interfaces/_internal_.Cache.html @@ -0,0 +1,4 @@ +Cache | liquidjs

    Interface Cache<T>

    interface Cache<T> {
        read(key: string): undefined | T | Promise<undefined | T>;
        remove(key: string): void | Promise<void>;
        write(key: string, value: T): void | Promise<void>;
    }

    Type Parameters

    • T

    Methods

    Methods

    • Parameters

      • key: string

      Returns undefined | T | Promise<undefined | T>

    • Parameters

      • key: string

      Returns void | Promise<void>

    • Parameters

      • key: string
      • value: T

      Returns void | Promise<void>

    diff --git a/api/interfaces/_internal_.CallSite.html b/api/interfaces/_internal_.CallSite.html new file mode 100644 index 000000000..18cc61baf --- /dev/null +++ b/api/interfaces/_internal_.CallSite.html @@ -0,0 +1,48 @@ +CallSite | liquidjs

    Interface CallSite

    interface CallSite {
        getColumnNumber(): null | number;
        getEnclosingColumnNumber(): number;
        getEnclosingLineNumber(): number;
        getEvalOrigin(): undefined | string;
        getFileName(): undefined | string;
        getFunction(): undefined | Function;
        getFunctionName(): null | string;
        getLineNumber(): null | number;
        getMethodName(): null | string;
        getPosition(): number;
        getPromiseIndex(): null | number;
        getScriptHash(): string;
        getScriptNameOrSourceURL(): string;
        getThis(): unknown;
        getTypeName(): null | string;
        isAsync(): boolean;
        isConstructor(): boolean;
        isEval(): boolean;
        isNative(): boolean;
        isPromiseAll(): boolean;
        isToplevel(): boolean;
        toString(): string;
    }

    Methods

    • Current column number [if this function was defined in a script]

      +

      Returns null | number

    • Returns number

    • Returns number

    • A call site object representing the location where eval was called +[if this function was created using a call to eval]

      +

      Returns undefined | string

    • Name of the script [if this function was defined in a script]

      +

      Returns undefined | string

    • Current function

      +

      Returns undefined | Function

    • Name of the current function, typically its name property. +If a name property is not available an attempt will be made to try +to infer a name from the function's context.

      +

      Returns null | string

    • Current line number [if this function was defined in a script]

      +

      Returns null | number

    • Name of the property [of "this" or one of its prototypes] that holds +the current function

      +

      Returns null | string

    • Returns number

    • returns the index of the promise element that was followed in +Promise.all() or Promise.any() for async stack traces, or null +if the CallSite is not an async

      +

      Returns null | number

    • Returns string

    • Returns string

    • Value of "this"

      +

      Returns unknown

    • Type of "this" as a string. +This is the name of the function stored in the constructor field of +"this", if available. Otherwise the object's [[Class]] internal +property.

      +

      Returns null | string

    • is this an async call (i.e. await, Promise.all(), or Promise.any())?

      +

      Returns boolean

    • Is this a constructor call?

      +

      Returns boolean

    • Does this call take place in code defined by a call to eval?

      +

      Returns boolean

    • Is this call in native V8 code?

      +

      Returns boolean

    • is this an async call to Promise.all()?

      +

      Returns boolean

    • Is this a toplevel invocation, that is, is "this" the global object?

      +

      Returns boolean

    • Returns string

    diff --git a/api/interfaces/_internal_.Comparable.html b/api/interfaces/_internal_.Comparable.html new file mode 100644 index 000000000..e36666768 --- /dev/null +++ b/api/interfaces/_internal_.Comparable.html @@ -0,0 +1,6 @@ +Comparable | liquidjs

    Interface Comparable

    interface Comparable {
        equals: ((rhs: any) => boolean);
        geq: ((rhs: any) => boolean);
        gt: ((rhs: any) => boolean);
        leq: ((rhs: any) => boolean);
        lt: ((rhs: any) => boolean);
    }

    Implemented by

    Properties

    Properties

    equals: ((rhs: any) => boolean)
    geq: ((rhs: any) => boolean)
    gt: ((rhs: any) => boolean)
    leq: ((rhs: any) => boolean)
    lt: ((rhs: any) => boolean)
    diff --git a/api/interfaces/_internal_.Error.html b/api/interfaces/_internal_.Error.html new file mode 100644 index 000000000..3a3ca254b --- /dev/null +++ b/api/interfaces/_internal_.Error.html @@ -0,0 +1,4 @@ +Error | liquidjs
    interface Error {
        message: string;
        name: string;
        stack?: string;
    }

    Hierarchy (view full)

    Properties

    Properties

    message: string
    name: string
    stack?: string
    diff --git a/api/interfaces/_internal_.EventEmitter.html b/api/interfaces/_internal_.EventEmitter.html new file mode 100644 index 000000000..53571b0aa --- /dev/null +++ b/api/interfaces/_internal_.EventEmitter.html @@ -0,0 +1,143 @@ +EventEmitter | liquidjs

    Interface EventEmitter<T>

    interface EventEmitter<T> {
        [captureRejectionSymbol]?<K>(error: Error, event: Key<K, T>, ...args: Args<K, T>): void;
        addListener<K>(eventName: Key<K, T>, listener: Listener<K, T, ((...args: any[]) => void)>): this;
        emit<K>(eventName: Key<K, T>, ...args: Args<K, T>): boolean;
        eventNames(): ((string | symbol) & Key2<unknown, T>)[];
        getMaxListeners(): number;
        listenerCount<K>(eventName: Key<K, T>, listener?: Listener<K, T, Function>): number;
        listeners<K>(eventName: Key<K, T>): Listener<K, T, Function>[];
        off<K>(eventName: Key<K, T>, listener: Listener<K, T, ((...args: any[]) => void)>): this;
        on<K>(eventName: Key<K, T>, listener: Listener<K, T, ((...args: any[]) => void)>): this;
        once<K>(eventName: Key<K, T>, listener: Listener<K, T, ((...args: any[]) => void)>): this;
        prependListener<K>(eventName: Key<K, T>, listener: Listener<K, T, ((...args: any[]) => void)>): this;
        prependOnceListener<K>(eventName: Key<K, T>, listener: Listener<K, T, ((...args: any[]) => void)>): this;
        rawListeners<K>(eventName: Key<K, T>): Listener<K, T, Function>[];
        removeAllListeners(eventName?: Key<unknown, T>): this;
        removeListener<K>(eventName: Key<K, T>, listener: Listener<K, T, ((...args: any[]) => void)>): this;
        setMaxListeners(n: number): this;
    }

    Type Parameters

    Hierarchy (view full)

    Methods

    • Type Parameters

      • K

      Parameters

      Returns void

    • Alias for emitter.on(eventName, listener).

      +

      Type Parameters

      • K

      Parameters

      Returns this

      v0.1.26

      +
    • Synchronously calls each of the listeners registered for the event named eventName, in the order they were registered, passing the supplied arguments +to each.

      +

      Returns true if the event had listeners, false otherwise.

      +
      import { EventEmitter } from 'node:events';
      const myEmitter = new EventEmitter();

      // First listener
      myEmitter.on('event', function firstListener() {
      console.log('Helloooo! first listener');
      });
      // Second listener
      myEmitter.on('event', function secondListener(arg1, arg2) {
      console.log(`event with parameters ${arg1}, ${arg2} in second listener`);
      });
      // Third listener
      myEmitter.on('event', function thirdListener(...args) {
      const parameters = args.join(', ');
      console.log(`event with parameters ${parameters} in third listener`);
      });

      console.log(myEmitter.listeners('event'));

      myEmitter.emit('event', 1, 2, 3, 4, 5);

      // Prints:
      // [
      // [Function: firstListener],
      // [Function: secondListener],
      // [Function: thirdListener]
      // ]
      // Helloooo! first listener
      // event with parameters 1, 2 in second listener
      // event with parameters 1, 2, 3, 4, 5 in third listener +
      + +

      Type Parameters

      • K

      Parameters

      Returns boolean

      v0.1.26

      +
    • Returns an array listing the events for which the emitter has registered +listeners. The values in the array are strings or Symbols.

      +
      import { EventEmitter } from 'node:events';

      const myEE = new EventEmitter();
      myEE.on('foo', () => {});
      myEE.on('bar', () => {});

      const sym = Symbol('symbol');
      myEE.on(sym, () => {});

      console.log(myEE.eventNames());
      // Prints: [ 'foo', 'bar', Symbol(symbol) ] +
      + +

      Returns ((string | symbol) & Key2<unknown, T>)[]

      v6.0.0

      +
    • Returns the current max listener value for the EventEmitter which is either +set by emitter.setMaxListeners(n) or defaults to defaultMaxListeners.

      +

      Returns number

      v1.0.0

      +
    • Returns the number of listeners listening for the event named eventName. +If listener is provided, it will return how many times the listener is found +in the list of the listeners of the event.

      +

      Type Parameters

      • K

      Parameters

      • eventName: Key<K, T>

        The name of the event being listened for

        +
      • Optionallistener: Listener<K, T, Function>

        The event handler function

        +

      Returns number

      v3.2.0

      +
    • Returns a copy of the array of listeners for the event named eventName.

      +
      server.on('connection', (stream) => {
      console.log('someone connected!');
      });
      console.log(util.inspect(server.listeners('connection')));
      // Prints: [ [Function] ] +
      + +

      Type Parameters

      • K

      Parameters

      Returns Listener<K, T, Function>[]

      v0.1.26

      +
    • Alias for emitter.removeListener().

      +

      Type Parameters

      • K

      Parameters

      Returns this

      v10.0.0

      +
    • Adds the listener function to the end of the listeners array for the event +named eventName. No checks are made to see if the listener has already +been added. Multiple calls passing the same combination of eventName and +listener will result in the listener being added, and called, multiple times.

      +
      server.on('connection', (stream) => {
      console.log('someone connected!');
      }); +
      + +

      Returns a reference to the EventEmitter, so that calls can be chained.

      +

      By default, event listeners are invoked in the order they are added. The emitter.prependListener() method can be used as an alternative to add the +event listener to the beginning of the listeners array.

      +
      import { EventEmitter } from 'node:events';
      const myEE = new EventEmitter();
      myEE.on('foo', () => console.log('a'));
      myEE.prependListener('foo', () => console.log('b'));
      myEE.emit('foo');
      // Prints:
      // b
      // a +
      + +

      Type Parameters

      • K

      Parameters

      • eventName: Key<K, T>

        The name of the event.

        +
      • listener: Listener<K, T, ((...args: any[]) => void)>

        The callback function

        +

      Returns this

      v0.1.101

      +
    • Adds a one-time listener function for the event named eventName. The +next time eventName is triggered, this listener is removed and then invoked.

      +
      server.once('connection', (stream) => {
      console.log('Ah, we have our first user!');
      }); +
      + +

      Returns a reference to the EventEmitter, so that calls can be chained.

      +

      By default, event listeners are invoked in the order they are added. The emitter.prependOnceListener() method can be used as an alternative to add the +event listener to the beginning of the listeners array.

      +
      import { EventEmitter } from 'node:events';
      const myEE = new EventEmitter();
      myEE.once('foo', () => console.log('a'));
      myEE.prependOnceListener('foo', () => console.log('b'));
      myEE.emit('foo');
      // Prints:
      // b
      // a +
      + +

      Type Parameters

      • K

      Parameters

      • eventName: Key<K, T>

        The name of the event.

        +
      • listener: Listener<K, T, ((...args: any[]) => void)>

        The callback function

        +

      Returns this

      v0.3.0

      +
    • Adds the listener function to the beginning of the listeners array for the +event named eventName. No checks are made to see if the listener has +already been added. Multiple calls passing the same combination of eventName +and listener will result in the listener being added, and called, multiple times.

      +
      server.prependListener('connection', (stream) => {
      console.log('someone connected!');
      }); +
      + +

      Returns a reference to the EventEmitter, so that calls can be chained.

      +

      Type Parameters

      • K

      Parameters

      • eventName: Key<K, T>

        The name of the event.

        +
      • listener: Listener<K, T, ((...args: any[]) => void)>

        The callback function

        +

      Returns this

      v6.0.0

      +
    • Adds a one-timelistener function for the event named eventName to the beginning of the listeners array. The next time eventName is triggered, this +listener is removed, and then invoked.

      +
      server.prependOnceListener('connection', (stream) => {
      console.log('Ah, we have our first user!');
      }); +
      + +

      Returns a reference to the EventEmitter, so that calls can be chained.

      +

      Type Parameters

      • K

      Parameters

      • eventName: Key<K, T>

        The name of the event.

        +
      • listener: Listener<K, T, ((...args: any[]) => void)>

        The callback function

        +

      Returns this

      v6.0.0

      +
    • Returns a copy of the array of listeners for the event named eventName, +including any wrappers (such as those created by .once()).

      +
      import { EventEmitter } from 'node:events';
      const emitter = new EventEmitter();
      emitter.once('log', () => console.log('log once'));

      // Returns a new Array with a function `onceWrapper` which has a property
      // `listener` which contains the original listener bound above
      const listeners = emitter.rawListeners('log');
      const logFnWrapper = listeners[0];

      // Logs "log once" to the console and does not unbind the `once` event
      logFnWrapper.listener();

      // Logs "log once" to the console and removes the listener
      logFnWrapper();

      emitter.on('log', () => console.log('log persistently'));
      // Will return a new Array with a single function bound by `.on()` above
      const newListeners = emitter.rawListeners('log');

      // Logs "log persistently" twice
      newListeners[0]();
      emitter.emit('log'); +
      + +

      Type Parameters

      • K

      Parameters

      Returns Listener<K, T, Function>[]

      v9.4.0

      +
    • Removes all listeners, or those of the specified eventName.

      +

      It is bad practice to remove listeners added elsewhere in the code, +particularly when the EventEmitter instance was created by some other +component or module (e.g. sockets or file streams).

      +

      Returns a reference to the EventEmitter, so that calls can be chained.

      +

      Parameters

      • OptionaleventName: Key<unknown, T>

      Returns this

      v0.1.26

      +
    • Removes the specified listener from the listener array for the event named eventName.

      +
      const callback = (stream) => {
      console.log('someone connected!');
      };
      server.on('connection', callback);
      // ...
      server.removeListener('connection', callback); +
      + +

      removeListener() will remove, at most, one instance of a listener from the +listener array. If any single listener has been added multiple times to the +listener array for the specified eventName, then removeListener() must be +called multiple times to remove each instance.

      +

      Once an event is emitted, all listeners attached to it at the +time of emitting are called in order. This implies that any removeListener() or removeAllListeners() calls after emitting and before the last listener finishes execution +will not remove them fromemit() in progress. Subsequent events behave as expected.

      +
      import { EventEmitter } from 'node:events';
      class MyEmitter extends EventEmitter {}
      const myEmitter = new MyEmitter();

      const callbackA = () => {
      console.log('A');
      myEmitter.removeListener('event', callbackB);
      };

      const callbackB = () => {
      console.log('B');
      };

      myEmitter.on('event', callbackA);

      myEmitter.on('event', callbackB);

      // callbackA removes listener callbackB but it will still be called.
      // Internal listener array at time of emit [callbackA, callbackB]
      myEmitter.emit('event');
      // Prints:
      // A
      // B

      // callbackB is now removed.
      // Internal listener array [callbackA]
      myEmitter.emit('event');
      // Prints:
      // A +
      + +

      Because listeners are managed using an internal array, calling this will +change the position indices of any listener registered after the listener +being removed. This will not impact the order in which listeners are called, +but it means that any copies of the listener array as returned by +the emitter.listeners() method will need to be recreated.

      +

      When a single function has been added as a handler multiple times for a single +event (as in the example below), removeListener() will remove the most +recently added instance. In the example the once('ping') listener is removed:

      +
      import { EventEmitter } from 'node:events';
      const ee = new EventEmitter();

      function pong() {
      console.log('pong');
      }

      ee.on('ping', pong);
      ee.once('ping', pong);
      ee.removeListener('ping', pong);

      ee.emit('ping');
      ee.emit('ping'); +
      + +

      Returns a reference to the EventEmitter, so that calls can be chained.

      +

      Type Parameters

      • K

      Parameters

      Returns this

      v0.1.26

      +
    • By default EventEmitters will print a warning if more than 10 listeners are +added for a particular event. This is a useful default that helps finding +memory leaks. The emitter.setMaxListeners() method allows the limit to be +modified for this specific EventEmitter instance. The value can be set to Infinity (or 0) to indicate an unlimited number of listeners.

      +

      Returns a reference to the EventEmitter, so that calls can be chained.

      +

      Parameters

      • n: number

      Returns this

      v0.3.5

      +
    diff --git a/api/interfaces/_internal_.FilterImpl.html b/api/interfaces/_internal_.FilterImpl.html new file mode 100644 index 000000000..340885918 --- /dev/null +++ b/api/interfaces/_internal_.FilterImpl.html @@ -0,0 +1,3 @@ +FilterImpl | liquidjs

    Interface FilterImpl

    interface FilterImpl {
        context: Context;
        liquid: Liquid;
    }

    Properties

    Properties

    context: Context
    liquid: Liquid
    diff --git a/api/interfaces/_internal_.FilterOptions.html b/api/interfaces/_internal_.FilterOptions.html new file mode 100644 index 000000000..7ee7ba1ef --- /dev/null +++ b/api/interfaces/_internal_.FilterOptions.html @@ -0,0 +1,3 @@ +FilterOptions | liquidjs

    Interface FilterOptions

    interface FilterOptions {
        handler: FilterHandler;
        raw: boolean;
    }

    Properties

    Properties

    handler: FilterHandler
    raw: boolean
    diff --git a/api/interfaces/_internal_.Generator.html b/api/interfaces/_internal_.Generator.html new file mode 100644 index 000000000..023ca182b --- /dev/null +++ b/api/interfaces/_internal_.Generator.html @@ -0,0 +1,5 @@ +Generator | liquidjs

    Interface Generator<T, TReturn, TNext>

    interface Generator<T, TReturn, TNext> {
        [iterator](): Generator<T, TReturn, TNext>;
        next(...args: [] | [TNext]): IteratorResult<T, TReturn>;
        return(value: TReturn): IteratorResult<T, TReturn>;
        throw(e: any): IteratorResult<T, TReturn>;
    }

    Type Parameters

    • T = unknown
    • TReturn = any
    • TNext = unknown

    Hierarchy (view full)

    Methods

    diff --git a/api/interfaces/_internal_.Iterable.html b/api/interfaces/_internal_.Iterable.html new file mode 100644 index 000000000..2120f0938 --- /dev/null +++ b/api/interfaces/_internal_.Iterable.html @@ -0,0 +1,2 @@ +Iterable | liquidjs

    Interface Iterable<T>

    interface Iterable<T> {
        [iterator](): Iterator<T, any, undefined>;
    }

    Type Parameters

    • T

    Methods

    Methods

    • Returns Iterator<T, any, undefined>

    diff --git a/api/interfaces/_internal_.IterableIterator.html b/api/interfaces/_internal_.IterableIterator.html new file mode 100644 index 000000000..7bb400950 --- /dev/null +++ b/api/interfaces/_internal_.IterableIterator.html @@ -0,0 +1,5 @@ +IterableIterator | liquidjs

    Interface IterableIterator<T>

    interface IterableIterator<T> {
        [iterator](): IterableIterator<T>;
        next(...args: [] | [undefined]): IteratorResult<T, any>;
        return?(value?: any): IteratorResult<T, any>;
        throw?(e?: any): IteratorResult<T, any>;
    }

    Type Parameters

    • T

    Hierarchy (view full)

    Methods

    diff --git a/api/interfaces/_internal_.Iterator.html b/api/interfaces/_internal_.Iterator.html new file mode 100644 index 000000000..7405cd550 --- /dev/null +++ b/api/interfaces/_internal_.Iterator.html @@ -0,0 +1,4 @@ +Iterator | liquidjs

    Interface Iterator<T, TReturn, TNext>

    interface Iterator<T, TReturn, TNext> {
        next(...args: [] | [TNext]): IteratorResult<T, TReturn>;
        return?(value?: TReturn): IteratorResult<T, TReturn>;
        throw?(e?: any): IteratorResult<T, TReturn>;
    }

    Type Parameters

    • T
    • TReturn = any
    • TNext = undefined

    Hierarchy (view full)

    Methods

    Methods

    diff --git a/api/interfaces/_internal_.IteratorReturnResult.html b/api/interfaces/_internal_.IteratorReturnResult.html new file mode 100644 index 000000000..5cfb226b5 --- /dev/null +++ b/api/interfaces/_internal_.IteratorReturnResult.html @@ -0,0 +1,3 @@ +IteratorReturnResult | liquidjs

    Interface IteratorReturnResult<TReturn>

    interface IteratorReturnResult<TReturn> {
        done: true;
        value: TReturn;
    }

    Type Parameters

    • TReturn

    Properties

    Properties

    done: true
    value: TReturn
    diff --git a/api/interfaces/_internal_.IteratorYieldResult.html b/api/interfaces/_internal_.IteratorYieldResult.html new file mode 100644 index 000000000..4a2b8bd54 --- /dev/null +++ b/api/interfaces/_internal_.IteratorYieldResult.html @@ -0,0 +1,3 @@ +IteratorYieldResult | liquidjs

    Interface IteratorYieldResult<TYield>

    interface IteratorYieldResult<TYield> {
        done?: false;
        value: TYield;
    }

    Type Parameters

    • TYield

    Properties

    Properties

    done?: false
    value: TYield
    diff --git a/api/interfaces/_internal_.LoaderOptions.html b/api/interfaces/_internal_.LoaderOptions.html new file mode 100644 index 000000000..10868a308 --- /dev/null +++ b/api/interfaces/_internal_.LoaderOptions.html @@ -0,0 +1,7 @@ +LoaderOptions | liquidjs

    Interface LoaderOptions

    interface LoaderOptions {
        extname: string;
        fs: FS;
        layouts: string[];
        partials: string[];
        relativeReference: boolean;
        root: string[];
    }

    Properties

    extname: string
    fs: FS
    layouts: string[]
    partials: string[]
    relativeReference: boolean
    root: string[]
    diff --git a/api/interfaces/_internal_.NormalizedFullOptions.html b/api/interfaces/_internal_.NormalizedFullOptions.html new file mode 100644 index 000000000..f8398009c --- /dev/null +++ b/api/interfaces/_internal_.NormalizedFullOptions.html @@ -0,0 +1,75 @@ +NormalizedFullOptions | liquidjs

    Interface NormalizedFullOptions

    interface NormalizedFullOptions {
        cache?: LiquidCache;
        catchAllErrors?: boolean;
        dateFormat: string;
        dynamicPartials: boolean;
        extname: string;
        fs: FS;
        globals: object;
        greedy: boolean;
        jekyllInclude: boolean;
        jsTruthy: boolean;
        keepOutputType: boolean;
        layouts: string[];
        lenientIf: boolean;
        locale: string;
        memoryLimit: number;
        operators: Operators;
        orderedFilterParameters?: boolean;
        outputDelimiterLeft: string;
        outputDelimiterRight: string;
        outputEscape?: OutputEscape;
        ownPropertyOnly: boolean;
        parseLimit: number;
        partials: string[];
        preserveTimezones: boolean;
        relativeReference: boolean;
        renderLimit: number;
        root: string[];
        strictFilters: boolean;
        strictVariables: boolean;
        tagDelimiterLeft: string;
        tagDelimiterRight: string;
        templates?: {
            [key: string]: string;
        };
        timezoneOffset?: string | number;
        trimOutputLeft: boolean;
        trimOutputRight: boolean;
        trimTagLeft: boolean;
        trimTagRight: boolean;
    }

    Hierarchy (view full)

    Properties

    cache?: LiquidCache

    Whether or not to cache resolved templates. Defaults to false.

    +
    catchAllErrors?: boolean

    Catch all errors instead of exit upon one. Please note that render errors won't be reached when parse fails.

    +
    dateFormat: string

    Default date format to use if the date filter doesn't include a format. Defaults to %A, %B %-e, %Y at %-l:%M %P %z.

    +
    dynamicPartials: boolean

    If set, treat the filepath parameter in {%include filepath %} and {%layout filepath%} as a variable, otherwise as a literal value. Defaults to true.

    +
    extname: string

    Add a extname (if filepath doesn't include one) before template file lookup. Eg: setting to ".html" will allow including file by basename. Defaults to "".

    +
    fs: FS

    fs is used to override the default file-system module with a custom implementation.

    +
    globals: object

    the global scope passed down to all partial and layout templates, i.e. templates included by include, layout and render tags.

    +
    greedy: boolean

    Whether trim*Left/trim*Right is greedy. When set to true, all consecutive blank characters including \n will be trimmed regardless of line breaks. Defaults to true.

    +
    jekyllInclude: boolean

    Use jekyll style include, pass parameters to include variable of current scope. Defaults to false.

    +
    jsTruthy: boolean

    Use JavaScript Truthiness. Defaults to false.

    +
    keepOutputType: boolean

    Whether or not to keep value type when writing the Output, not working for streamed rendering. Defaults to false.

    +
    layouts: string[]

    A directory or an array of directories from where to resolve layout templates. If it's an array, the files are looked up in the order they occur in the array. Defaults to root

    +
    lenientIf: boolean

    Modifies the behavior of strictVariables. If set, a single undefined variable will not cause an exception in the context of the if/elsif/unless tag and the default filter. Instead, it will evaluate to false and null, respectively. Irrelevant if strictVariables is not set. Defaults to false. *

    +
    locale: string

    Default locale, will be used by date filter. Defaults to system locale.

    +
    memoryLimit: number

    For DoS handling, limit new objects creation, including array concat/join/strftime, etc. A typical PC can handle 1e9 (1G) memory without issue.

    +
    operators: Operators

    An object of operators for conditional statements. Defaults to the regular Liquid operators.

    +
    orderedFilterParameters?: boolean

    Respect parameter order when using filters like "for ... reversed limit", Defaults to false.

    +
    outputDelimiterLeft: string

    The left delimiter for liquid outputs. *

    +
    outputDelimiterRight: string

    The right delimiter for liquid outputs. *

    +
    outputEscape?: OutputEscape

    Default escape filter applied to output values, when set, you'll have to add | raw for values don't need to be escaped. Defaults to undefined.

    +
    ownPropertyOnly: boolean

    Hide scope variables from prototypes, useful when you're passing a not sanitized object into LiquidJS or need to hide prototypes from templates.

    +
    parseLimit: number

    For DoS handling, limit total length of templates parsed in one parse() call. A typical PC can handle 1e8 (100M) characters without issues.

    +
    partials: string[]

    A directory or an array of directories from where to resolve included templates. If it's an array, the files are looked up in the order they occur in the array. Defaults to root

    +
    preserveTimezones: boolean

    Whether input strings to date filter preserve the given timezone *

    +
    relativeReference: boolean

    Allow refer to layouts/partials by relative pathname. To avoid arbitrary filesystem read, paths been referenced also need to be within corresponding root, partials, layouts. Defaults to true.

    +
    renderLimit: number

    For DoS handling, limit total time (in ms) for each render() call.

    +
    root: string[]

    A directory or an array of directories from where to resolve layout and include templates, and the filename passed to .renderFile(). If it's an array, the files are looked up in the order they occur in the array. Defaults to ["."]

    +
    strictFilters: boolean

    Whether or not to assert filter existence. If set to false, undefined filters will be skipped. Otherwise, undefined filters will cause an exception. Defaults to false.

    +
    strictVariables: boolean

    Whether or not to assert variable existence. If set to false, undefined variables will be rendered as empty string. Otherwise, undefined variables will cause an exception. Defaults to false.

    +
    tagDelimiterLeft: string

    The left delimiter for liquid tags. *

    +
    tagDelimiterRight: string

    The right delimiter for liquid tags. *

    +
    templates?: {
        [key: string]: string;
    }

    Render from in-memory templates mapping instead of file system. File system related options like fs, 'root', and relativeReference will be ignored when templates is specified.

    +
    timezoneOffset?: string | number

    JavaScript timezone name or timezoneOffset for date filter, default to local time. That means if you're in Australia (UTC+10), it'll default to -600 or Australia/Lindeman

    +
    trimOutputLeft: boolean

    Similar to trimOutputRight, whereas the \n is exclusive. Defaults to false. See Whitespace Control for details.

    +
    trimOutputRight: boolean

    Strip blank characters (including , \t, and \r) from the right of values ({{ }}) until \n (inclusive). Defaults to false.

    +
    trimTagLeft: boolean

    Similar to trimTagRight, whereas the \n is exclusive. Defaults to false. See Whitespace Control for details.

    +
    trimTagRight: boolean

    Strip blank characters (including , \t, and \r) from the right of tags ({% %}) until \n (inclusive). Defaults to false.

    +
    diff --git a/api/interfaces/_internal_.NormalizedOptions.html b/api/interfaces/_internal_.NormalizedOptions.html new file mode 100644 index 000000000..57866fbce --- /dev/null +++ b/api/interfaces/_internal_.NormalizedOptions.html @@ -0,0 +1,75 @@ +NormalizedOptions | liquidjs

    Interface NormalizedOptions

    interface NormalizedOptions {
        cache?: LiquidCache;
        catchAllErrors?: boolean;
        dateFormat?: string;
        dynamicPartials?: boolean;
        extname?: string;
        fs?: FS;
        globals?: object;
        greedy?: boolean;
        jekyllInclude?: boolean;
        jsTruthy?: boolean;
        keepOutputType?: boolean;
        layouts?: string[];
        lenientIf?: boolean;
        locale?: string;
        memoryLimit?: number;
        operators?: Operators;
        orderedFilterParameters?: boolean;
        outputDelimiterLeft?: string;
        outputDelimiterRight?: string;
        outputEscape?: OutputEscape;
        ownPropertyOnly?: boolean;
        parseLimit?: number;
        partials?: string[];
        preserveTimezones?: boolean;
        relativeReference?: boolean;
        renderLimit?: number;
        root?: string[];
        strictFilters?: boolean;
        strictVariables?: boolean;
        tagDelimiterLeft?: string;
        tagDelimiterRight?: string;
        templates?: {
            [key: string]: string;
        };
        timezoneOffset?: string | number;
        trimOutputLeft?: boolean;
        trimOutputRight?: boolean;
        trimTagLeft?: boolean;
        trimTagRight?: boolean;
    }

    Hierarchy (view full)

    Properties

    cache?: LiquidCache

    Whether or not to cache resolved templates. Defaults to false.

    +
    catchAllErrors?: boolean

    Catch all errors instead of exit upon one. Please note that render errors won't be reached when parse fails.

    +
    dateFormat?: string

    Default date format to use if the date filter doesn't include a format. Defaults to %A, %B %-e, %Y at %-l:%M %P %z.

    +
    dynamicPartials?: boolean

    If set, treat the filepath parameter in {%include filepath %} and {%layout filepath%} as a variable, otherwise as a literal value. Defaults to true.

    +
    extname?: string

    Add a extname (if filepath doesn't include one) before template file lookup. Eg: setting to ".html" will allow including file by basename. Defaults to "".

    +
    fs?: FS

    fs is used to override the default file-system module with a custom implementation.

    +
    globals?: object

    the global scope passed down to all partial and layout templates, i.e. templates included by include, layout and render tags.

    +
    greedy?: boolean

    Whether trim*Left/trim*Right is greedy. When set to true, all consecutive blank characters including \n will be trimmed regardless of line breaks. Defaults to true.

    +
    jekyllInclude?: boolean

    Use jekyll style include, pass parameters to include variable of current scope. Defaults to false.

    +
    jsTruthy?: boolean

    Use JavaScript Truthiness. Defaults to false.

    +
    keepOutputType?: boolean

    Whether or not to keep value type when writing the Output, not working for streamed rendering. Defaults to false.

    +
    layouts?: string[]

    A directory or an array of directories from where to resolve layout templates. If it's an array, the files are looked up in the order they occur in the array. Defaults to root

    +
    lenientIf?: boolean

    Modifies the behavior of strictVariables. If set, a single undefined variable will not cause an exception in the context of the if/elsif/unless tag and the default filter. Instead, it will evaluate to false and null, respectively. Irrelevant if strictVariables is not set. Defaults to false. *

    +
    locale?: string

    Default locale, will be used by date filter. Defaults to system locale.

    +
    memoryLimit?: number

    For DoS handling, limit new objects creation, including array concat/join/strftime, etc. A typical PC can handle 1e9 (1G) memory without issue.

    +
    operators?: Operators

    An object of operators for conditional statements. Defaults to the regular Liquid operators.

    +
    orderedFilterParameters?: boolean

    Respect parameter order when using filters like "for ... reversed limit", Defaults to false.

    +
    outputDelimiterLeft?: string

    The left delimiter for liquid outputs. *

    +
    outputDelimiterRight?: string

    The right delimiter for liquid outputs. *

    +
    outputEscape?: OutputEscape

    Default escape filter applied to output values, when set, you'll have to add | raw for values don't need to be escaped. Defaults to undefined.

    +
    ownPropertyOnly?: boolean

    Hide scope variables from prototypes, useful when you're passing a not sanitized object into LiquidJS or need to hide prototypes from templates.

    +
    parseLimit?: number

    For DoS handling, limit total length of templates parsed in one parse() call. A typical PC can handle 1e8 (100M) characters without issues.

    +
    partials?: string[]

    A directory or an array of directories from where to resolve included templates. If it's an array, the files are looked up in the order they occur in the array. Defaults to root

    +
    preserveTimezones?: boolean

    Whether input strings to date filter preserve the given timezone *

    +
    relativeReference?: boolean

    Allow refer to layouts/partials by relative pathname. To avoid arbitrary filesystem read, paths been referenced also need to be within corresponding root, partials, layouts. Defaults to true.

    +
    renderLimit?: number

    For DoS handling, limit total time (in ms) for each render() call.

    +
    root?: string[]

    A directory or an array of directories from where to resolve layout and include templates, and the filename passed to .renderFile(). If it's an array, the files are looked up in the order they occur in the array. Defaults to ["."]

    +
    strictFilters?: boolean

    Whether or not to assert filter existence. If set to false, undefined filters will be skipped. Otherwise, undefined filters will cause an exception. Defaults to false.

    +
    strictVariables?: boolean

    Whether or not to assert variable existence. If set to false, undefined variables will be rendered as empty string. Otherwise, undefined variables will cause an exception. Defaults to false.

    +
    tagDelimiterLeft?: string

    The left delimiter for liquid tags. *

    +
    tagDelimiterRight?: string

    The right delimiter for liquid tags. *

    +
    templates?: {
        [key: string]: string;
    }

    Render from in-memory templates mapping instead of file system. File system related options like fs, 'root', and relativeReference will be ignored when templates is specified.

    +
    timezoneOffset?: string | number

    JavaScript timezone name or timezoneOffset for date filter, default to local time. That means if you're in Australia (UTC+10), it'll default to -600 or Australia/Lindeman

    +
    trimOutputLeft?: boolean

    Similar to trimOutputRight, whereas the \n is exclusive. Defaults to false. See Whitespace Control for details.

    +
    trimOutputRight?: boolean

    Strip blank characters (including , \t, and \r) from the right of values ({{ }}) until \n (inclusive). Defaults to false.

    +
    trimTagLeft?: boolean

    Similar to trimTagRight, whereas the \n is exclusive. Defaults to false. See Whitespace Control for details.

    +
    trimTagRight?: boolean

    Strip blank characters (including , \t, and \r) from the right of tags ({% %}) until \n (inclusive). Defaults to false.

    +
    diff --git a/api/interfaces/_internal_.PromiseLike.html b/api/interfaces/_internal_.PromiseLike.html new file mode 100644 index 000000000..c79e73db8 --- /dev/null +++ b/api/interfaces/_internal_.PromiseLike.html @@ -0,0 +1,6 @@ +PromiseLike | liquidjs

    Interface PromiseLike<T>

    interface PromiseLike<T> {
        then<TResult1, TResult2>(onfulfilled?: null | ((value: T) => TResult1 | PromiseLike<TResult1>), onrejected?: null | ((reason: any) => TResult2 | PromiseLike<TResult2>)): PromiseLike<TResult1 | TResult2>;
    }

    Type Parameters

    • T

    Methods

    Methods

    • Attaches callbacks for the resolution and/or rejection of the Promise.

      +

      Type Parameters

      • TResult1 = T
      • TResult2 = never

      Parameters

      Returns PromiseLike<TResult1 | TResult2>

      A Promise for the completion of which ever callback is executed.

      +
    diff --git a/api/interfaces/_internal_.ReadableStream.html b/api/interfaces/_internal_.ReadableStream.html new file mode 100644 index 000000000..2826745e5 --- /dev/null +++ b/api/interfaces/_internal_.ReadableStream.html @@ -0,0 +1,154 @@ +ReadableStream | liquidjs

    Interface ReadableStream

    interface ReadableStream {
        readable: boolean;
        [asyncIterator](): AsyncIterableIterator<string | Buffer>;
        [captureRejectionSymbol]?<K>(error: Error, event: string | symbol, ...args: AnyRest): void;
        addListener<K>(eventName: string | symbol, listener: ((...args: any[]) => void)): this;
        emit<K>(eventName: string | symbol, ...args: AnyRest): boolean;
        eventNames(): (string | symbol)[];
        getMaxListeners(): number;
        isPaused(): boolean;
        listenerCount<K>(eventName: string | symbol, listener?: Function): number;
        listeners<K>(eventName: string | symbol): Function[];
        off<K>(eventName: string | symbol, listener: ((...args: any[]) => void)): this;
        on<K>(eventName: string | symbol, listener: ((...args: any[]) => void)): this;
        once<K>(eventName: string | symbol, listener: ((...args: any[]) => void)): this;
        pause(): this;
        pipe<T>(destination: T, options?: {
            end?: boolean;
        }): T;
        prependListener<K>(eventName: string | symbol, listener: ((...args: any[]) => void)): this;
        prependOnceListener<K>(eventName: string | symbol, listener: ((...args: any[]) => void)): this;
        rawListeners<K>(eventName: string | symbol): Function[];
        read(size?: number): string | Buffer;
        removeAllListeners(eventName?: string | symbol): this;
        removeListener<K>(eventName: string | symbol, listener: ((...args: any[]) => void)): this;
        resume(): this;
        setEncoding(encoding: BufferEncoding): this;
        setMaxListeners(n: number): this;
        unpipe(destination?: WritableStream): this;
        unshift(chunk: string | Uint8Array, encoding?: BufferEncoding): void;
        wrap(oldStream: ReadableStream): this;
    }

    Hierarchy (view full)

    Properties

    readable: boolean

    Methods

    • Type Parameters

      • K

      Parameters

      Returns void

    • Alias for emitter.on(eventName, listener).

      +

      Type Parameters

      • K

      Parameters

      • eventName: string | symbol
      • listener: ((...args: any[]) => void)
          • (...args): void
          • Parameters

            • Rest...args: any[]

            Returns void

      Returns this

      v0.1.26

      +
    • Synchronously calls each of the listeners registered for the event named eventName, in the order they were registered, passing the supplied arguments +to each.

      +

      Returns true if the event had listeners, false otherwise.

      +
      import { EventEmitter } from 'node:events';
      const myEmitter = new EventEmitter();

      // First listener
      myEmitter.on('event', function firstListener() {
      console.log('Helloooo! first listener');
      });
      // Second listener
      myEmitter.on('event', function secondListener(arg1, arg2) {
      console.log(`event with parameters ${arg1}, ${arg2} in second listener`);
      });
      // Third listener
      myEmitter.on('event', function thirdListener(...args) {
      const parameters = args.join(', ');
      console.log(`event with parameters ${parameters} in third listener`);
      });

      console.log(myEmitter.listeners('event'));

      myEmitter.emit('event', 1, 2, 3, 4, 5);

      // Prints:
      // [
      // [Function: firstListener],
      // [Function: secondListener],
      // [Function: thirdListener]
      // ]
      // Helloooo! first listener
      // event with parameters 1, 2 in second listener
      // event with parameters 1, 2, 3, 4, 5 in third listener +
      + +

      Type Parameters

      • K

      Parameters

      • eventName: string | symbol
      • Rest...args: AnyRest

      Returns boolean

      v0.1.26

      +
    • Returns an array listing the events for which the emitter has registered +listeners. The values in the array are strings or Symbols.

      +
      import { EventEmitter } from 'node:events';

      const myEE = new EventEmitter();
      myEE.on('foo', () => {});
      myEE.on('bar', () => {});

      const sym = Symbol('symbol');
      myEE.on(sym, () => {});

      console.log(myEE.eventNames());
      // Prints: [ 'foo', 'bar', Symbol(symbol) ] +
      + +

      Returns (string | symbol)[]

      v6.0.0

      +
    • Returns the current max listener value for the EventEmitter which is either +set by emitter.setMaxListeners(n) or defaults to defaultMaxListeners.

      +

      Returns number

      v1.0.0

      +
    • Returns boolean

    • Returns the number of listeners listening for the event named eventName. +If listener is provided, it will return how many times the listener is found +in the list of the listeners of the event.

      +

      Type Parameters

      • K

      Parameters

      • eventName: string | symbol

        The name of the event being listened for

        +
      • Optionallistener: Function

        The event handler function

        +

      Returns number

      v3.2.0

      +
    • Returns a copy of the array of listeners for the event named eventName.

      +
      server.on('connection', (stream) => {
      console.log('someone connected!');
      });
      console.log(util.inspect(server.listeners('connection')));
      // Prints: [ [Function] ] +
      + +

      Type Parameters

      • K

      Parameters

      • eventName: string | symbol

      Returns Function[]

      v0.1.26

      +
    • Alias for emitter.removeListener().

      +

      Type Parameters

      • K

      Parameters

      • eventName: string | symbol
      • listener: ((...args: any[]) => void)
          • (...args): void
          • Parameters

            • Rest...args: any[]

            Returns void

      Returns this

      v10.0.0

      +
    • Adds the listener function to the end of the listeners array for the event +named eventName. No checks are made to see if the listener has already +been added. Multiple calls passing the same combination of eventName and +listener will result in the listener being added, and called, multiple times.

      +
      server.on('connection', (stream) => {
      console.log('someone connected!');
      }); +
      + +

      Returns a reference to the EventEmitter, so that calls can be chained.

      +

      By default, event listeners are invoked in the order they are added. The emitter.prependListener() method can be used as an alternative to add the +event listener to the beginning of the listeners array.

      +
      import { EventEmitter } from 'node:events';
      const myEE = new EventEmitter();
      myEE.on('foo', () => console.log('a'));
      myEE.prependListener('foo', () => console.log('b'));
      myEE.emit('foo');
      // Prints:
      // b
      // a +
      + +

      Type Parameters

      • K

      Parameters

      • eventName: string | symbol

        The name of the event.

        +
      • listener: ((...args: any[]) => void)

        The callback function

        +
          • (...args): void
          • Parameters

            • Rest...args: any[]

            Returns void

      Returns this

      v0.1.101

      +
    • Adds a one-time listener function for the event named eventName. The +next time eventName is triggered, this listener is removed and then invoked.

      +
      server.once('connection', (stream) => {
      console.log('Ah, we have our first user!');
      }); +
      + +

      Returns a reference to the EventEmitter, so that calls can be chained.

      +

      By default, event listeners are invoked in the order they are added. The emitter.prependOnceListener() method can be used as an alternative to add the +event listener to the beginning of the listeners array.

      +
      import { EventEmitter } from 'node:events';
      const myEE = new EventEmitter();
      myEE.once('foo', () => console.log('a'));
      myEE.prependOnceListener('foo', () => console.log('b'));
      myEE.emit('foo');
      // Prints:
      // b
      // a +
      + +

      Type Parameters

      • K

      Parameters

      • eventName: string | symbol

        The name of the event.

        +
      • listener: ((...args: any[]) => void)

        The callback function

        +
          • (...args): void
          • Parameters

            • Rest...args: any[]

            Returns void

      Returns this

      v0.3.0

      +
    • Returns this

    • Type Parameters

      Parameters

      • destination: T
      • Optionaloptions: {
            end?: boolean;
        }
        • Optionalend?: boolean

      Returns T

    • Adds the listener function to the beginning of the listeners array for the +event named eventName. No checks are made to see if the listener has +already been added. Multiple calls passing the same combination of eventName +and listener will result in the listener being added, and called, multiple times.

      +
      server.prependListener('connection', (stream) => {
      console.log('someone connected!');
      }); +
      + +

      Returns a reference to the EventEmitter, so that calls can be chained.

      +

      Type Parameters

      • K

      Parameters

      • eventName: string | symbol

        The name of the event.

        +
      • listener: ((...args: any[]) => void)

        The callback function

        +
          • (...args): void
          • Parameters

            • Rest...args: any[]

            Returns void

      Returns this

      v6.0.0

      +
    • Adds a one-timelistener function for the event named eventName to the beginning of the listeners array. The next time eventName is triggered, this +listener is removed, and then invoked.

      +
      server.prependOnceListener('connection', (stream) => {
      console.log('Ah, we have our first user!');
      }); +
      + +

      Returns a reference to the EventEmitter, so that calls can be chained.

      +

      Type Parameters

      • K

      Parameters

      • eventName: string | symbol

        The name of the event.

        +
      • listener: ((...args: any[]) => void)

        The callback function

        +
          • (...args): void
          • Parameters

            • Rest...args: any[]

            Returns void

      Returns this

      v6.0.0

      +
    • Returns a copy of the array of listeners for the event named eventName, +including any wrappers (such as those created by .once()).

      +
      import { EventEmitter } from 'node:events';
      const emitter = new EventEmitter();
      emitter.once('log', () => console.log('log once'));

      // Returns a new Array with a function `onceWrapper` which has a property
      // `listener` which contains the original listener bound above
      const listeners = emitter.rawListeners('log');
      const logFnWrapper = listeners[0];

      // Logs "log once" to the console and does not unbind the `once` event
      logFnWrapper.listener();

      // Logs "log once" to the console and removes the listener
      logFnWrapper();

      emitter.on('log', () => console.log('log persistently'));
      // Will return a new Array with a single function bound by `.on()` above
      const newListeners = emitter.rawListeners('log');

      // Logs "log persistently" twice
      newListeners[0]();
      emitter.emit('log'); +
      + +

      Type Parameters

      • K

      Parameters

      • eventName: string | symbol

      Returns Function[]

      v9.4.0

      +
    • Parameters

      • Optionalsize: number

      Returns string | Buffer

    • Removes all listeners, or those of the specified eventName.

      +

      It is bad practice to remove listeners added elsewhere in the code, +particularly when the EventEmitter instance was created by some other +component or module (e.g. sockets or file streams).

      +

      Returns a reference to the EventEmitter, so that calls can be chained.

      +

      Parameters

      • OptionaleventName: string | symbol

      Returns this

      v0.1.26

      +
    • Removes the specified listener from the listener array for the event named eventName.

      +
      const callback = (stream) => {
      console.log('someone connected!');
      };
      server.on('connection', callback);
      // ...
      server.removeListener('connection', callback); +
      + +

      removeListener() will remove, at most, one instance of a listener from the +listener array. If any single listener has been added multiple times to the +listener array for the specified eventName, then removeListener() must be +called multiple times to remove each instance.

      +

      Once an event is emitted, all listeners attached to it at the +time of emitting are called in order. This implies that any removeListener() or removeAllListeners() calls after emitting and before the last listener finishes execution +will not remove them fromemit() in progress. Subsequent events behave as expected.

      +
      import { EventEmitter } from 'node:events';
      class MyEmitter extends EventEmitter {}
      const myEmitter = new MyEmitter();

      const callbackA = () => {
      console.log('A');
      myEmitter.removeListener('event', callbackB);
      };

      const callbackB = () => {
      console.log('B');
      };

      myEmitter.on('event', callbackA);

      myEmitter.on('event', callbackB);

      // callbackA removes listener callbackB but it will still be called.
      // Internal listener array at time of emit [callbackA, callbackB]
      myEmitter.emit('event');
      // Prints:
      // A
      // B

      // callbackB is now removed.
      // Internal listener array [callbackA]
      myEmitter.emit('event');
      // Prints:
      // A +
      + +

      Because listeners are managed using an internal array, calling this will +change the position indices of any listener registered after the listener +being removed. This will not impact the order in which listeners are called, +but it means that any copies of the listener array as returned by +the emitter.listeners() method will need to be recreated.

      +

      When a single function has been added as a handler multiple times for a single +event (as in the example below), removeListener() will remove the most +recently added instance. In the example the once('ping') listener is removed:

      +
      import { EventEmitter } from 'node:events';
      const ee = new EventEmitter();

      function pong() {
      console.log('pong');
      }

      ee.on('ping', pong);
      ee.once('ping', pong);
      ee.removeListener('ping', pong);

      ee.emit('ping');
      ee.emit('ping'); +
      + +

      Returns a reference to the EventEmitter, so that calls can be chained.

      +

      Type Parameters

      • K

      Parameters

      • eventName: string | symbol
      • listener: ((...args: any[]) => void)
          • (...args): void
          • Parameters

            • Rest...args: any[]

            Returns void

      Returns this

      v0.1.26

      +
    • Returns this

    • Parameters

      Returns this

    • By default EventEmitters will print a warning if more than 10 listeners are +added for a particular event. This is a useful default that helps finding +memory leaks. The emitter.setMaxListeners() method allows the limit to be +modified for this specific EventEmitter instance. The value can be set to Infinity (or 0) to indicate an unlimited number of listeners.

      +

      Returns a reference to the EventEmitter, so that calls can be chained.

      +

      Parameters

      • n: number

      Returns this

      v0.3.5

      +
    • Parameters

      Returns this

    • Parameters

      Returns void

    • Parameters

      Returns this

    diff --git a/api/interfaces/_internal_.RenderFileOptions.html b/api/interfaces/_internal_.RenderFileOptions.html new file mode 100644 index 000000000..cda75c987 --- /dev/null +++ b/api/interfaces/_internal_.RenderFileOptions.html @@ -0,0 +1,16 @@ +RenderFileOptions | liquidjs

    Interface RenderFileOptions

    interface RenderFileOptions {
        globals?: object;
        lookupType?: LookupType;
        memoryLimit?: number;
        ownPropertyOnly?: boolean;
        renderLimit?: number;
        strictVariables?: boolean;
        sync?: boolean;
        templateLimit?: number;
    }

    Hierarchy (view full)

    Properties

    globals?: object

    Same as globals on LiquidOptions, but only for current render() call

    +
    lookupType?: LookupType
    memoryLimit?: number

    For DoS handling, limit new objects creation, including array concat/join/strftime, etc. A typical PC can handle 1e9 (1G) memory without issue..

    +
    ownPropertyOnly?: boolean

    Same as ownPropertyOnly on LiquidOptions, but only for current render() call

    +
    renderLimit?: number

    For DoS handling, limit total time (in ms) for each render() call.

    +
    strictVariables?: boolean

    Same as strictVariables on LiquidOptions, but only for current render() call

    +
    sync?: boolean

    This call is sync or async? It's used by Liquid internal methods, you'll not need this.

    +
    templateLimit?: number

    For DoS handling, limit total renders of tag/HTML/output in one render() call. A typical PC can handle 1e5 renders of typical templates per second.

    +
    diff --git a/api/interfaces/_internal_.RenderOptions.html b/api/interfaces/_internal_.RenderOptions.html new file mode 100644 index 000000000..6bbb40a14 --- /dev/null +++ b/api/interfaces/_internal_.RenderOptions.html @@ -0,0 +1,15 @@ +RenderOptions | liquidjs

    Interface RenderOptions

    interface RenderOptions {
        globals?: object;
        memoryLimit?: number;
        ownPropertyOnly?: boolean;
        renderLimit?: number;
        strictVariables?: boolean;
        sync?: boolean;
        templateLimit?: number;
    }

    Hierarchy (view full)

    Properties

    globals?: object

    Same as globals on LiquidOptions, but only for current render() call

    +
    memoryLimit?: number

    For DoS handling, limit new objects creation, including array concat/join/strftime, etc. A typical PC can handle 1e9 (1G) memory without issue..

    +
    ownPropertyOnly?: boolean

    Same as ownPropertyOnly on LiquidOptions, but only for current render() call

    +
    renderLimit?: number

    For DoS handling, limit total time (in ms) for each render() call.

    +
    strictVariables?: boolean

    Same as strictVariables on LiquidOptions, but only for current render() call

    +
    sync?: boolean

    This call is sync or async? It's used by Liquid internal methods, you'll not need this.

    +
    templateLimit?: number

    For DoS handling, limit total renders of tag/HTML/output in one render() call. A typical PC can handle 1e5 renders of typical templates per second.

    +
    diff --git a/api/interfaces/_internal_.ScopeObject.html b/api/interfaces/_internal_.ScopeObject.html new file mode 100644 index 000000000..664dfebf5 --- /dev/null +++ b/api/interfaces/_internal_.ScopeObject.html @@ -0,0 +1,3 @@ +ScopeObject | liquidjs

    Interface ScopeObject

    Construct a type with a set of properties K of type T

    +
    interface ScopeObject {
        toLiquid?: (() => any);
    }

    Hierarchy (view full)

    • Record<string, any>
      • ScopeObject

    Properties

    Properties

    toLiquid?: (() => any)
    diff --git a/api/interfaces/_internal_.SharedArrayBuffer.html b/api/interfaces/_internal_.SharedArrayBuffer.html new file mode 100644 index 000000000..b055d6a19 --- /dev/null +++ b/api/interfaces/_internal_.SharedArrayBuffer.html @@ -0,0 +1,7 @@ +SharedArrayBuffer | liquidjs

    Interface SharedArrayBuffer

    interface SharedArrayBuffer {
        [species]: SharedArrayBuffer;
        [toStringTag]: "SharedArrayBuffer";
        byteLength: number;
        slice(begin: number, end?: number): SharedArrayBuffer;
    }

    Properties

    Methods

    Properties

    [toStringTag]: "SharedArrayBuffer"
    byteLength: number

    Read-only. The length of the ArrayBuffer (in bytes).

    +

    Methods

    • Returns a section of an SharedArrayBuffer.

      +

      Parameters

      • begin: number
      • Optionalend: number

      Returns SharedArrayBuffer

    diff --git a/api/interfaces/_internal_.SharedArrayBufferConstructor.html b/api/interfaces/_internal_.SharedArrayBufferConstructor.html new file mode 100644 index 000000000..fc8b0b516 --- /dev/null +++ b/api/interfaces/_internal_.SharedArrayBufferConstructor.html @@ -0,0 +1,3 @@ +SharedArrayBufferConstructor | liquidjs

    Interface SharedArrayBufferConstructor

    interface SharedArrayBufferConstructor {
        new SharedArrayBufferConstructornew (byteLength: number): SharedArrayBuffer;
        prototype: SharedArrayBuffer;
    }

    Constructors

    Properties

    Constructors

    • Parameters

      • byteLength: number

      Returns SharedArrayBuffer

    Properties

    diff --git a/api/interfaces/_internal_.TagClass.html b/api/interfaces/_internal_.TagClass.html new file mode 100644 index 000000000..8e7b2b272 --- /dev/null +++ b/api/interfaces/_internal_.TagClass.html @@ -0,0 +1,2 @@ +TagClass | liquidjs

    Interface TagClass

    interface TagClass {
        new TagClassnew (token: TagToken, tokens: TopLevelToken[], liquid: Liquid, parser: Parser): Tag;
    }

    Constructors

    Constructors

    diff --git a/api/interfaces/_internal_.TagImplOptions.html b/api/interfaces/_internal_.TagImplOptions.html new file mode 100644 index 000000000..260565e16 --- /dev/null +++ b/api/interfaces/_internal_.TagImplOptions.html @@ -0,0 +1,3 @@ +TagImplOptions | liquidjs

    Interface TagImplOptions

    interface TagImplOptions {
        parse?: ((this: Tag & TagImplOptions, token: TagToken, remainingTokens: TopLevelToken[]) => void);
        render: ((this: Tag & TagImplOptions, ctx: Context, emitter: Emitter, hash: Record<string, any>) => unknown);
        [key: string]: any;
    }

    Indexable

    • [key: string]: any

    Properties

    Properties

    parse?: ((this: Tag & TagImplOptions, token: TagToken, remainingTokens: TopLevelToken[]) => void)
    render: ((this: Tag & TagImplOptions, ctx: Context, emitter: Emitter, hash: Record<string, any>) => unknown)
    diff --git a/api/interfaces/_internal_.TrieInput.html b/api/interfaces/_internal_.TrieInput.html new file mode 100644 index 000000000..c351ad60c --- /dev/null +++ b/api/interfaces/_internal_.TrieInput.html @@ -0,0 +1 @@ +TrieInput | liquidjs

    Interface TrieInput<T>

    Type Parameters

    • T

    Indexable

    • [key: string]: T
    diff --git a/api/interfaces/_internal_.TrieLeafNode.html b/api/interfaces/_internal_.TrieLeafNode.html new file mode 100644 index 000000000..29d41d0bd --- /dev/null +++ b/api/interfaces/_internal_.TrieLeafNode.html @@ -0,0 +1,4 @@ +TrieLeafNode | liquidjs

    Interface TrieLeafNode<T>

    interface TrieLeafNode<T> {
        data: T;
        end: true;
        needBoundary?: true;
    }

    Type Parameters

    • T

    Properties

    Properties

    data: T
    end: true
    needBoundary?: true
    diff --git a/api/interfaces/_internal_.WritableStream.html b/api/interfaces/_internal_.WritableStream.html new file mode 100644 index 000000000..c1bf621ac --- /dev/null +++ b/api/interfaces/_internal_.WritableStream.html @@ -0,0 +1,146 @@ +WritableStream | liquidjs

    Interface WritableStream

    interface WritableStream {
        writable: boolean;
        [captureRejectionSymbol]?<K>(error: Error, event: string | symbol, ...args: AnyRest): void;
        addListener<K>(eventName: string | symbol, listener: ((...args: any[]) => void)): this;
        emit<K>(eventName: string | symbol, ...args: AnyRest): boolean;
        end(cb?: (() => void)): this;
        end(data: string | Uint8Array, cb?: (() => void)): this;
        end(str: string, encoding?: BufferEncoding, cb?: (() => void)): this;
        eventNames(): (string | symbol)[];
        getMaxListeners(): number;
        listenerCount<K>(eventName: string | symbol, listener?: Function): number;
        listeners<K>(eventName: string | symbol): Function[];
        off<K>(eventName: string | symbol, listener: ((...args: any[]) => void)): this;
        on<K>(eventName: string | symbol, listener: ((...args: any[]) => void)): this;
        once<K>(eventName: string | symbol, listener: ((...args: any[]) => void)): this;
        prependListener<K>(eventName: string | symbol, listener: ((...args: any[]) => void)): this;
        prependOnceListener<K>(eventName: string | symbol, listener: ((...args: any[]) => void)): this;
        rawListeners<K>(eventName: string | symbol): Function[];
        removeAllListeners(eventName?: string | symbol): this;
        removeListener<K>(eventName: string | symbol, listener: ((...args: any[]) => void)): this;
        setMaxListeners(n: number): this;
        write(buffer: string | Uint8Array, cb?: ((err?: null | Error) => void)): boolean;
        write(str: string, encoding?: BufferEncoding, cb?: ((err?: null | Error) => void)): boolean;
    }

    Hierarchy (view full)

    Properties

    writable: boolean

    Methods

    • Type Parameters

      • K

      Parameters

      Returns void

    • Alias for emitter.on(eventName, listener).

      +

      Type Parameters

      • K

      Parameters

      • eventName: string | symbol
      • listener: ((...args: any[]) => void)
          • (...args): void
          • Parameters

            • Rest...args: any[]

            Returns void

      Returns this

      v0.1.26

      +
    • Synchronously calls each of the listeners registered for the event named eventName, in the order they were registered, passing the supplied arguments +to each.

      +

      Returns true if the event had listeners, false otherwise.

      +
      import { EventEmitter } from 'node:events';
      const myEmitter = new EventEmitter();

      // First listener
      myEmitter.on('event', function firstListener() {
      console.log('Helloooo! first listener');
      });
      // Second listener
      myEmitter.on('event', function secondListener(arg1, arg2) {
      console.log(`event with parameters ${arg1}, ${arg2} in second listener`);
      });
      // Third listener
      myEmitter.on('event', function thirdListener(...args) {
      const parameters = args.join(', ');
      console.log(`event with parameters ${parameters} in third listener`);
      });

      console.log(myEmitter.listeners('event'));

      myEmitter.emit('event', 1, 2, 3, 4, 5);

      // Prints:
      // [
      // [Function: firstListener],
      // [Function: secondListener],
      // [Function: thirdListener]
      // ]
      // Helloooo! first listener
      // event with parameters 1, 2 in second listener
      // event with parameters 1, 2, 3, 4, 5 in third listener +
      + +

      Type Parameters

      • K

      Parameters

      • eventName: string | symbol
      • Rest...args: AnyRest

      Returns boolean

      v0.1.26

      +
    • Parameters

      • Optionalcb: (() => void)
          • (): void
          • Returns void

      Returns this

    • Parameters

      • data: string | Uint8Array
      • Optionalcb: (() => void)
          • (): void
          • Returns void

      Returns this

    • Parameters

      • str: string
      • Optionalencoding: BufferEncoding
      • Optionalcb: (() => void)
          • (): void
          • Returns void

      Returns this

    • Returns an array listing the events for which the emitter has registered +listeners. The values in the array are strings or Symbols.

      +
      import { EventEmitter } from 'node:events';

      const myEE = new EventEmitter();
      myEE.on('foo', () => {});
      myEE.on('bar', () => {});

      const sym = Symbol('symbol');
      myEE.on(sym, () => {});

      console.log(myEE.eventNames());
      // Prints: [ 'foo', 'bar', Symbol(symbol) ] +
      + +

      Returns (string | symbol)[]

      v6.0.0

      +
    • Returns the current max listener value for the EventEmitter which is either +set by emitter.setMaxListeners(n) or defaults to defaultMaxListeners.

      +

      Returns number

      v1.0.0

      +
    • Returns the number of listeners listening for the event named eventName. +If listener is provided, it will return how many times the listener is found +in the list of the listeners of the event.

      +

      Type Parameters

      • K

      Parameters

      • eventName: string | symbol

        The name of the event being listened for

        +
      • Optionallistener: Function

        The event handler function

        +

      Returns number

      v3.2.0

      +
    • Returns a copy of the array of listeners for the event named eventName.

      +
      server.on('connection', (stream) => {
      console.log('someone connected!');
      });
      console.log(util.inspect(server.listeners('connection')));
      // Prints: [ [Function] ] +
      + +

      Type Parameters

      • K

      Parameters

      • eventName: string | symbol

      Returns Function[]

      v0.1.26

      +
    • Alias for emitter.removeListener().

      +

      Type Parameters

      • K

      Parameters

      • eventName: string | symbol
      • listener: ((...args: any[]) => void)
          • (...args): void
          • Parameters

            • Rest...args: any[]

            Returns void

      Returns this

      v10.0.0

      +
    • Adds the listener function to the end of the listeners array for the event +named eventName. No checks are made to see if the listener has already +been added. Multiple calls passing the same combination of eventName and +listener will result in the listener being added, and called, multiple times.

      +
      server.on('connection', (stream) => {
      console.log('someone connected!');
      }); +
      + +

      Returns a reference to the EventEmitter, so that calls can be chained.

      +

      By default, event listeners are invoked in the order they are added. The emitter.prependListener() method can be used as an alternative to add the +event listener to the beginning of the listeners array.

      +
      import { EventEmitter } from 'node:events';
      const myEE = new EventEmitter();
      myEE.on('foo', () => console.log('a'));
      myEE.prependListener('foo', () => console.log('b'));
      myEE.emit('foo');
      // Prints:
      // b
      // a +
      + +

      Type Parameters

      • K

      Parameters

      • eventName: string | symbol

        The name of the event.

        +
      • listener: ((...args: any[]) => void)

        The callback function

        +
          • (...args): void
          • Parameters

            • Rest...args: any[]

            Returns void

      Returns this

      v0.1.101

      +
    • Adds a one-time listener function for the event named eventName. The +next time eventName is triggered, this listener is removed and then invoked.

      +
      server.once('connection', (stream) => {
      console.log('Ah, we have our first user!');
      }); +
      + +

      Returns a reference to the EventEmitter, so that calls can be chained.

      +

      By default, event listeners are invoked in the order they are added. The emitter.prependOnceListener() method can be used as an alternative to add the +event listener to the beginning of the listeners array.

      +
      import { EventEmitter } from 'node:events';
      const myEE = new EventEmitter();
      myEE.once('foo', () => console.log('a'));
      myEE.prependOnceListener('foo', () => console.log('b'));
      myEE.emit('foo');
      // Prints:
      // b
      // a +
      + +

      Type Parameters

      • K

      Parameters

      • eventName: string | symbol

        The name of the event.

        +
      • listener: ((...args: any[]) => void)

        The callback function

        +
          • (...args): void
          • Parameters

            • Rest...args: any[]

            Returns void

      Returns this

      v0.3.0

      +
    • Adds the listener function to the beginning of the listeners array for the +event named eventName. No checks are made to see if the listener has +already been added. Multiple calls passing the same combination of eventName +and listener will result in the listener being added, and called, multiple times.

      +
      server.prependListener('connection', (stream) => {
      console.log('someone connected!');
      }); +
      + +

      Returns a reference to the EventEmitter, so that calls can be chained.

      +

      Type Parameters

      • K

      Parameters

      • eventName: string | symbol

        The name of the event.

        +
      • listener: ((...args: any[]) => void)

        The callback function

        +
          • (...args): void
          • Parameters

            • Rest...args: any[]

            Returns void

      Returns this

      v6.0.0

      +
    • Adds a one-timelistener function for the event named eventName to the beginning of the listeners array. The next time eventName is triggered, this +listener is removed, and then invoked.

      +
      server.prependOnceListener('connection', (stream) => {
      console.log('Ah, we have our first user!');
      }); +
      + +

      Returns a reference to the EventEmitter, so that calls can be chained.

      +

      Type Parameters

      • K

      Parameters

      • eventName: string | symbol

        The name of the event.

        +
      • listener: ((...args: any[]) => void)

        The callback function

        +
          • (...args): void
          • Parameters

            • Rest...args: any[]

            Returns void

      Returns this

      v6.0.0

      +
    • Returns a copy of the array of listeners for the event named eventName, +including any wrappers (such as those created by .once()).

      +
      import { EventEmitter } from 'node:events';
      const emitter = new EventEmitter();
      emitter.once('log', () => console.log('log once'));

      // Returns a new Array with a function `onceWrapper` which has a property
      // `listener` which contains the original listener bound above
      const listeners = emitter.rawListeners('log');
      const logFnWrapper = listeners[0];

      // Logs "log once" to the console and does not unbind the `once` event
      logFnWrapper.listener();

      // Logs "log once" to the console and removes the listener
      logFnWrapper();

      emitter.on('log', () => console.log('log persistently'));
      // Will return a new Array with a single function bound by `.on()` above
      const newListeners = emitter.rawListeners('log');

      // Logs "log persistently" twice
      newListeners[0]();
      emitter.emit('log'); +
      + +

      Type Parameters

      • K

      Parameters

      • eventName: string | symbol

      Returns Function[]

      v9.4.0

      +
    • Removes all listeners, or those of the specified eventName.

      +

      It is bad practice to remove listeners added elsewhere in the code, +particularly when the EventEmitter instance was created by some other +component or module (e.g. sockets or file streams).

      +

      Returns a reference to the EventEmitter, so that calls can be chained.

      +

      Parameters

      • OptionaleventName: string | symbol

      Returns this

      v0.1.26

      +
    • Removes the specified listener from the listener array for the event named eventName.

      +
      const callback = (stream) => {
      console.log('someone connected!');
      };
      server.on('connection', callback);
      // ...
      server.removeListener('connection', callback); +
      + +

      removeListener() will remove, at most, one instance of a listener from the +listener array. If any single listener has been added multiple times to the +listener array for the specified eventName, then removeListener() must be +called multiple times to remove each instance.

      +

      Once an event is emitted, all listeners attached to it at the +time of emitting are called in order. This implies that any removeListener() or removeAllListeners() calls after emitting and before the last listener finishes execution +will not remove them fromemit() in progress. Subsequent events behave as expected.

      +
      import { EventEmitter } from 'node:events';
      class MyEmitter extends EventEmitter {}
      const myEmitter = new MyEmitter();

      const callbackA = () => {
      console.log('A');
      myEmitter.removeListener('event', callbackB);
      };

      const callbackB = () => {
      console.log('B');
      };

      myEmitter.on('event', callbackA);

      myEmitter.on('event', callbackB);

      // callbackA removes listener callbackB but it will still be called.
      // Internal listener array at time of emit [callbackA, callbackB]
      myEmitter.emit('event');
      // Prints:
      // A
      // B

      // callbackB is now removed.
      // Internal listener array [callbackA]
      myEmitter.emit('event');
      // Prints:
      // A +
      + +

      Because listeners are managed using an internal array, calling this will +change the position indices of any listener registered after the listener +being removed. This will not impact the order in which listeners are called, +but it means that any copies of the listener array as returned by +the emitter.listeners() method will need to be recreated.

      +

      When a single function has been added as a handler multiple times for a single +event (as in the example below), removeListener() will remove the most +recently added instance. In the example the once('ping') listener is removed:

      +
      import { EventEmitter } from 'node:events';
      const ee = new EventEmitter();

      function pong() {
      console.log('pong');
      }

      ee.on('ping', pong);
      ee.once('ping', pong);
      ee.removeListener('ping', pong);

      ee.emit('ping');
      ee.emit('ping'); +
      + +

      Returns a reference to the EventEmitter, so that calls can be chained.

      +

      Type Parameters

      • K

      Parameters

      • eventName: string | symbol
      • listener: ((...args: any[]) => void)
          • (...args): void
          • Parameters

            • Rest...args: any[]

            Returns void

      Returns this

      v0.1.26

      +
    • By default EventEmitters will print a warning if more than 10 listeners are +added for a particular event. This is a useful default that helps finding +memory leaks. The emitter.setMaxListeners() method allows the limit to be +modified for this specific EventEmitter instance. The value can be set to Infinity (or 0) to indicate an unlimited number of listeners.

      +

      Returns a reference to the EventEmitter, so that calls can be chained.

      +

      Parameters

      • n: number

      Returns this

      v0.3.5

      +
    • Parameters

      • buffer: string | Uint8Array
      • Optionalcb: ((err?: null | Error) => void)
          • (err?): void
          • Parameters

            • Optionalerr: null | Error

            Returns void

      Returns boolean

    • Parameters

      • str: string
      • Optionalencoding: BufferEncoding
      • Optionalcb: ((err?: null | Error) => void)
          • (err?): void
          • Parameters

            • Optionalerr: null | Error

            Returns void

      Returns boolean

    diff --git a/api/modules.html b/api/modules.html index df2413d17..7921e3009 100644 --- a/api/modules.html +++ b/api/modules.html @@ -1,196 +1,68 @@ -liquidjs
    -
    - -
    -
    - -
    -
    -

    Generated using TypeDoc

    -
    \ No newline at end of file +liquidjs
    diff --git a/api/modules/TypeGuards.html b/api/modules/TypeGuards.html index e7a41527e..d1d97f479 100644 --- a/api/modules/TypeGuards.html +++ b/api/modules/TypeGuards.html @@ -1,74 +1,12 @@ -TypeGuards | liquidjs
    -
    - -
    -
    - -
    -
    -

    Generated using TypeDoc

    -
    \ No newline at end of file +TypeGuards | liquidjs
    diff --git a/api/modules/_internal_.html b/api/modules/_internal_.html new file mode 100644 index 000000000..3d4bcf614 --- /dev/null +++ b/api/modules/_internal_.html @@ -0,0 +1,92 @@ +<internal> | liquidjs
    diff --git a/api/types/FilterImplOptions.html b/api/types/FilterImplOptions.html index f6c4e9fd0..52e812901 100644 --- a/api/types/FilterImplOptions.html +++ b/api/types/FilterImplOptions.html @@ -1,112 +1 @@ -FilterImplOptions | liquidjs
    -
    - -
    - -
    -

    Generated using TypeDoc

    -
    \ No newline at end of file +FilterImplOptions | liquidjs

    Type Alias FilterImplOptions

    FilterImplOptions: FilterHandler | FilterOptions
    diff --git a/api/types/Operators.html b/api/types/Operators.html index 07d2cc350..291dcedb1 100644 --- a/api/types/Operators.html +++ b/api/types/Operators.html @@ -1,112 +1 @@ -Operators | liquidjs
    -
    - -
    - -
    -

    Generated using TypeDoc

    -
    \ No newline at end of file +Operators | liquidjs

    Type Alias Operators

    Operators: Record<string, OperatorHandler>
    diff --git a/api/types/Scope.html b/api/types/Scope.html index 73beaa261..7ad38fd61 100644 --- a/api/types/Scope.html +++ b/api/types/Scope.html @@ -1,112 +1 @@ -Scope | liquidjs
    -
    - -
    - -
    -

    Generated using TypeDoc

    -
    \ No newline at end of file +Scope | liquidjs

    Type Alias Scope

    Scope: ScopeObject | Drop
    diff --git a/api/types/TopLevelToken.html b/api/types/TopLevelToken.html index 3a66b9cec..7c11a5453 100644 --- a/api/types/TopLevelToken.html +++ b/api/types/TopLevelToken.html @@ -1,112 +1 @@ -TopLevelToken | liquidjs
    -
    - -
    - -
    -

    Generated using TypeDoc

    -
    \ No newline at end of file +TopLevelToken | liquidjs

    Type Alias TopLevelToken

    TopLevelToken: TagToken | OutputToken | HTMLToken
    diff --git a/api/types/ValueToken.html b/api/types/ValueToken.html index 575ae74fc..7fdb8b623 100644 --- a/api/types/ValueToken.html +++ b/api/types/ValueToken.html @@ -1,112 +1 @@ -ValueToken | liquidjs
    -
    - -
    - -
    -

    Generated using TypeDoc

    -
    \ No newline at end of file +ValueToken | liquidjs

    Type Alias ValueToken

    ValueToken:
        | RangeToken
        | LiteralToken
        | QuotedToken
        | PropertyAccessToken
        | NumberToken
    diff --git a/api/types/_internal_.AnyRest.html b/api/types/_internal_.AnyRest.html new file mode 100644 index 000000000..424db019a --- /dev/null +++ b/api/types/_internal_.AnyRest.html @@ -0,0 +1 @@ +AnyRest | liquidjs

    Type Alias AnyRest

    AnyRest: [args: any[]]
    diff --git a/api/types/_internal_.Args.html b/api/types/_internal_.Args.html new file mode 100644 index 000000000..5f8f51496 --- /dev/null +++ b/api/types/_internal_.Args.html @@ -0,0 +1 @@ +Args | liquidjs

    Type Alias Args<K, T>

    Args<K, T>: T extends DefaultEventMap
        ? AnyRest
        : K extends keyof T
            ? T[K]
            : never

    Type Parameters

    • K
    • T
    diff --git a/api/types/_internal_.ArrayBufferLike.html b/api/types/_internal_.ArrayBufferLike.html new file mode 100644 index 000000000..97a926641 --- /dev/null +++ b/api/types/_internal_.ArrayBufferLike.html @@ -0,0 +1 @@ +ArrayBufferLike | liquidjs

    Type Alias ArrayBufferLike

    ArrayBufferLike: ArrayBufferTypes[keyof ArrayBufferTypes]
    diff --git a/api/types/_internal_.ArrayBufferView.html b/api/types/_internal_.ArrayBufferView.html new file mode 100644 index 000000000..eeafb37c3 --- /dev/null +++ b/api/types/_internal_.ArrayBufferView.html @@ -0,0 +1 @@ +ArrayBufferView | liquidjs

    Type Alias ArrayBufferView

    ArrayBufferView: TypedArray | DataView
    diff --git a/api/types/_internal_.BinaryOperatorHandler.html b/api/types/_internal_.BinaryOperatorHandler.html new file mode 100644 index 000000000..f97cdb80c --- /dev/null +++ b/api/types/_internal_.BinaryOperatorHandler.html @@ -0,0 +1 @@ +BinaryOperatorHandler | liquidjs

    Type Alias BinaryOperatorHandler

    BinaryOperatorHandler: ((lhs: any, rhs: any, ctx: Context) => boolean)
    diff --git a/api/types/_internal_.BufferEncoding.html b/api/types/_internal_.BufferEncoding.html new file mode 100644 index 000000000..b5068c5ee --- /dev/null +++ b/api/types/_internal_.BufferEncoding.html @@ -0,0 +1 @@ +BufferEncoding | liquidjs

    Type Alias BufferEncoding

    BufferEncoding:
        | "ascii"
        | "utf8"
        | "utf-8"
        | "utf16le"
        | "utf-16le"
        | "ucs2"
        | "ucs-2"
        | "base64"
        | "base64url"
        | "latin1"
        | "binary"
        | "hex"
    diff --git a/api/types/_internal_.DefaultEventMap.html b/api/types/_internal_.DefaultEventMap.html new file mode 100644 index 000000000..b595e004b --- /dev/null +++ b/api/types/_internal_.DefaultEventMap.html @@ -0,0 +1 @@ +DefaultEventMap | liquidjs

    Type Alias DefaultEventMap

    DefaultEventMap: [never]
    diff --git a/api/types/_internal_.EventMap.html b/api/types/_internal_.EventMap.html new file mode 100644 index 000000000..021090b36 --- /dev/null +++ b/api/types/_internal_.EventMap.html @@ -0,0 +1 @@ +EventMap | liquidjs

    Type Alias EventMap<T>

    EventMap<T>: Record<keyof T, any[]> | DefaultEventMap

    Type Parameters

    • T
    diff --git a/api/types/_internal_.FilterArg.html b/api/types/_internal_.FilterArg.html new file mode 100644 index 000000000..28f47343f --- /dev/null +++ b/api/types/_internal_.FilterArg.html @@ -0,0 +1 @@ +FilterArg | liquidjs
    diff --git a/api/types/_internal_.FilterHandler.html b/api/types/_internal_.FilterHandler.html new file mode 100644 index 000000000..74187955b --- /dev/null +++ b/api/types/_internal_.FilterHandler.html @@ -0,0 +1 @@ +FilterHandler | liquidjs

    Type Alias FilterHandler

    FilterHandler: ((this: FilterImpl, value: any, ...args: any[]) => any)
    diff --git a/api/types/_internal_.HashValueTokens.html b/api/types/_internal_.HashValueTokens.html new file mode 100644 index 000000000..e7706ea39 --- /dev/null +++ b/api/types/_internal_.HashValueTokens.html @@ -0,0 +1 @@ +HashValueTokens | liquidjs

    Type Alias HashValueTokens

    HashValueTokens: Record<string, Token | undefined>
    diff --git a/api/types/_internal_.IteratorResult.html b/api/types/_internal_.IteratorResult.html new file mode 100644 index 000000000..3c06b9d67 --- /dev/null +++ b/api/types/_internal_.IteratorResult.html @@ -0,0 +1 @@ +IteratorResult | liquidjs

    Type Alias IteratorResult<T, TReturn>

    Type Parameters

    • T
    • TReturn = any
    diff --git a/api/types/_internal_.Key.html b/api/types/_internal_.Key.html new file mode 100644 index 000000000..7ba31ec7e --- /dev/null +++ b/api/types/_internal_.Key.html @@ -0,0 +1 @@ +Key | liquidjs

    Type Alias Key<K, T>

    Key<K, T>: T extends DefaultEventMap
        ? string | symbol
        : K | keyof T

    Type Parameters

    • K
    • T
    diff --git a/api/types/_internal_.Key2.html b/api/types/_internal_.Key2.html new file mode 100644 index 000000000..824c6d9db --- /dev/null +++ b/api/types/_internal_.Key2.html @@ -0,0 +1 @@ +Key2 | liquidjs

    Type Alias Key2<K, T>

    Key2<K, T>: T extends DefaultEventMap
        ? string | symbol
        : K & keyof T

    Type Parameters

    • K
    • T
    diff --git a/api/types/_internal_.KeyValuePair.html b/api/types/_internal_.KeyValuePair.html new file mode 100644 index 000000000..7589da4fa --- /dev/null +++ b/api/types/_internal_.KeyValuePair.html @@ -0,0 +1 @@ +KeyValuePair | liquidjs

    Type Alias KeyValuePair

    KeyValuePair: [string?, ValueToken?]
    diff --git a/api/types/_internal_.LiquidCache.html b/api/types/_internal_.LiquidCache.html new file mode 100644 index 000000000..f658d8ea6 --- /dev/null +++ b/api/types/_internal_.LiquidCache.html @@ -0,0 +1 @@ +LiquidCache | liquidjs

    Type Alias LiquidCache

    LiquidCache: Cache<Template[] | Promise<Template[]>>
    diff --git a/api/types/_internal_.Listener.html b/api/types/_internal_.Listener.html new file mode 100644 index 000000000..2613ac39c --- /dev/null +++ b/api/types/_internal_.Listener.html @@ -0,0 +1 @@ +Listener | liquidjs

    Type Alias Listener<K, T, F>

    Listener<K, T, F>: T extends DefaultEventMap
        ? F
        : K extends keyof T
            ? T[K] extends unknown[]
                ? ((...args: T[K]) => void)
                : never
            : never

    Type Parameters

    • K
    • T
    • F
    diff --git a/api/types/_internal_.LiteralKey.html b/api/types/_internal_.LiteralKey.html new file mode 100644 index 000000000..d5e7fd99b --- /dev/null +++ b/api/types/_internal_.LiteralKey.html @@ -0,0 +1 @@ +LiteralKey | liquidjs

    Type Alias LiteralKey

    LiteralKey: keyof typeof literalValues
    diff --git a/api/types/_internal_.LiteralValue.html b/api/types/_internal_.LiteralValue.html new file mode 100644 index 000000000..08398d59d --- /dev/null +++ b/api/types/_internal_.LiteralValue.html @@ -0,0 +1 @@ +LiteralValue | liquidjs

    Type Alias LiteralValue

    LiteralValue: typeof literalValues[LiteralKey]
    diff --git a/api/types/_internal_.OperatorHandler.html b/api/types/_internal_.OperatorHandler.html new file mode 100644 index 000000000..7f41f070a --- /dev/null +++ b/api/types/_internal_.OperatorHandler.html @@ -0,0 +1 @@ +OperatorHandler | liquidjs
    diff --git a/api/types/_internal_.OutputEscape.html b/api/types/_internal_.OutputEscape.html new file mode 100644 index 000000000..eed841cbd --- /dev/null +++ b/api/types/_internal_.OutputEscape.html @@ -0,0 +1 @@ +OutputEscape | liquidjs

    Type Alias OutputEscape

    OutputEscape: ((value: any) => string)
    diff --git a/api/types/_internal_.OutputEscapeOption.html b/api/types/_internal_.OutputEscapeOption.html new file mode 100644 index 000000000..3ba4162fe --- /dev/null +++ b/api/types/_internal_.OutputEscapeOption.html @@ -0,0 +1 @@ +OutputEscapeOption | liquidjs

    Type Alias OutputEscapeOption

    OutputEscapeOption: "escape" | "json" | OutputEscape
    diff --git a/api/types/_internal_.ParseToken.html b/api/types/_internal_.ParseToken.html new file mode 100644 index 000000000..3671cd5d2 --- /dev/null +++ b/api/types/_internal_.ParseToken.html @@ -0,0 +1 @@ +ParseToken | liquidjs

    Type Alias ParseToken<T>

    ParseToken<T>: ((token: T, remainTokens: T[]) => Template)

    Type Parameters

    diff --git a/api/types/_internal_.ParsedFileName.html b/api/types/_internal_.ParsedFileName.html new file mode 100644 index 000000000..d03b54006 --- /dev/null +++ b/api/types/_internal_.ParsedFileName.html @@ -0,0 +1 @@ +ParsedFileName | liquidjs

    Type Alias ParsedFileName

    ParsedFileName:
        | Template[]
        | Token
        | string
        | undefined
    diff --git a/api/types/_internal_.PropertyKey.html b/api/types/_internal_.PropertyKey.html new file mode 100644 index 000000000..01f9feeab --- /dev/null +++ b/api/types/_internal_.PropertyKey.html @@ -0,0 +1 @@ +PropertyKey | liquidjs

    Type Alias PropertyKey

    PropertyKey: string | number
    diff --git a/api/types/_internal_.Record.html b/api/types/_internal_.Record.html new file mode 100644 index 000000000..fa6226100 --- /dev/null +++ b/api/types/_internal_.Record.html @@ -0,0 +1,2 @@ +Record | liquidjs

    Type Alias Record<K, T>

    Record<K, T>: {
        [P in K]: T
    }

    Construct a type with a set of properties K of type T

    +

    Type Parameters

    • K extends keyof any
    • T
    diff --git a/api/types/_internal_.TypedArray.html b/api/types/_internal_.TypedArray.html new file mode 100644 index 000000000..9382f7c11 --- /dev/null +++ b/api/types/_internal_.TypedArray.html @@ -0,0 +1 @@ +TypedArray | liquidjs

    Type Alias TypedArray

    TypedArray:
        | Uint8Array
        | Uint8ClampedArray
        | Uint16Array
        | Uint32Array
        | Int8Array
        | Int16Array
        | Int32Array
        | BigUint64Array
        | BigInt64Array
        | Float32Array
        | Float64Array
    diff --git a/api/types/_internal_.UnaryOperatorHandler.html b/api/types/_internal_.UnaryOperatorHandler.html new file mode 100644 index 000000000..ac28ccd4c --- /dev/null +++ b/api/types/_internal_.UnaryOperatorHandler.html @@ -0,0 +1 @@ +UnaryOperatorHandler | liquidjs

    Type Alias UnaryOperatorHandler

    UnaryOperatorHandler: ((operand: any, ctx: Context) => boolean)
    diff --git a/api/types/_internal_.WithImplicitCoercion.html b/api/types/_internal_.WithImplicitCoercion.html new file mode 100644 index 000000000..6c6c609db --- /dev/null +++ b/api/types/_internal_.WithImplicitCoercion.html @@ -0,0 +1 @@ +WithImplicitCoercion | liquidjs

    Type Alias WithImplicitCoercion<T>

    WithImplicitCoercion<T>: T | {
        valueOf(): T;
    }

    Type Parameters

    • T
    diff --git a/api/variables/_internal_.Buffer-1.html b/api/variables/_internal_.Buffer-1.html new file mode 100644 index 000000000..65b79e3ee --- /dev/null +++ b/api/variables/_internal_.Buffer-1.html @@ -0,0 +1 @@ +Buffer | liquidjs
    diff --git a/api/variables/_internal_.Error-1.html b/api/variables/_internal_.Error-1.html new file mode 100644 index 000000000..ec2ef2ed2 --- /dev/null +++ b/api/variables/_internal_.Error-1.html @@ -0,0 +1 @@ +Error | liquidjs
    Error: ErrorConstructor
    diff --git a/api/variables/_internal_.SharedArrayBuffer-1.html b/api/variables/_internal_.SharedArrayBuffer-1.html new file mode 100644 index 000000000..f495f298b --- /dev/null +++ b/api/variables/_internal_.SharedArrayBuffer-1.html @@ -0,0 +1 @@ +SharedArrayBuffer | liquidjs

    Variable SharedArrayBuffer

    SharedArrayBuffer: SharedArrayBufferConstructor
    diff --git a/api/variables/_internal_.literalValues.html b/api/variables/_internal_.literalValues.html new file mode 100644 index 000000000..e1d92764b --- /dev/null +++ b/api/variables/_internal_.literalValues.html @@ -0,0 +1 @@ +literalValues | liquidjs

    Variable literalValuesConst

    literalValues: {
        blank: BlankDrop;
        empty: EmptyDrop;
        false: boolean;
        nil: NullDrop;
        null: NullDrop;
        true: boolean;
    } = ...
    diff --git a/api/variables/defaultOperators.html b/api/variables/defaultOperators.html index 512b7c488..f3a196451 100644 --- a/api/variables/defaultOperators.html +++ b/api/variables/defaultOperators.html @@ -1,112 +1 @@ -defaultOperators | liquidjs
    -
    - -
    - -
    -

    Generated using TypeDoc

    -
    \ No newline at end of file +defaultOperators | liquidjs

    Variable defaultOperatorsConst

    defaultOperators: Operators = ...
    diff --git a/api/variables/defaultOptions.html b/api/variables/defaultOptions.html index c25c299ad..e5c7c3fe9 100644 --- a/api/variables/defaultOptions.html +++ b/api/variables/defaultOptions.html @@ -1,112 +1 @@ -defaultOptions | liquidjs
    -
    - -
    - -
    -

    Generated using TypeDoc

    -
    \ No newline at end of file +defaultOptions | liquidjs

    Variable defaultOptionsConst

    defaultOptions: NormalizedFullOptions = ...
    diff --git a/api/variables/filters.html b/api/variables/filters.html index e30f9cf7b..03ece33c0 100644 --- a/api/variables/filters.html +++ b/api/variables/filters.html @@ -1,112 +1 @@ -filters | liquidjs
    -
    - -
    - -
    -

    Generated using TypeDoc

    -
    \ No newline at end of file +filters | liquidjs

    Variable filtersConst

    filters: Record<string, FilterImplOptions> = ...
    diff --git a/api/variables/tags.html b/api/variables/tags.html index f27b88ce9..095414cca 100644 --- a/api/variables/tags.html +++ b/api/variables/tags.html @@ -1,112 +1 @@ -tags | liquidjs
    -
    - -
    - -
    -

    Generated using TypeDoc

    -
    \ No newline at end of file +tags | liquidjs

    Variable tagsConst

    tags: Record<string, TagClass> = ...
    diff --git a/api/variables/version.html b/api/variables/version.html index 6dde5cc24..1cd88df6a 100644 --- a/api/variables/version.html +++ b/api/variables/version.html @@ -1,112 +1 @@ -version | liquidjs
    -
    - -
    - -
    -

    Generated using TypeDoc

    -
    \ No newline at end of file +version | liquidjs

    Variable versionConst

    version: "[VI]{version}[/VI]" = '[VI]{version}[/VI]'
    diff --git a/filters/abs.html b/filters/abs.html index 07007b8cd..579be8f3a 100644 --- a/filters/abs.html +++ b/filters/abs.html @@ -38,7 +38,7 @@ - +
    @@ -96,27 +96,27 @@

    Liquid filter that returns the absolute value of a number.

    Input

    -
    {{ -17 | abs }}
    +
    1
    {{ -17 | abs }}

    Output

    -
    17
    +
    1
    17

    Input

    -
    {{ 4 | abs }}
    +
    1
    {{ 4 | abs }}

    Output

    -
    4
    +
    1
    4

    abs will also work on a string that only contains a number:

    Input

    -
    {{ "-19.86" | abs }}
    +
    1
    {{ "-19.86" | abs }}

    Output

    -
    19.86
    +
    1
    19.86
    - +
    diff --git a/filters/append.html b/filters/append.html index c44f6ba16..d38185858 100644 --- a/filters/append.html +++ b/filters/append.html @@ -38,7 +38,7 @@ - +
    @@ -96,23 +96,21 @@

    Concatenates two strings and returns the concatenated value.

    Input

    -
    {{ "/my/fancy/url" | append: ".html" }}
    +
    1
    {{ "/my/fancy/url" | append: ".html" }}

    Output

    -
    /my/fancy/url.html
    +
    1
    /my/fancy/url.html

    append can also be used with variables:

    Input

    -
    {% assign filename = "/index.html" %}
    -{{ "website.com" | append: filename }}
    +
    1
    2
    {% assign filename = "/index.html" %}
    {{ "website.com" | append: filename }}

    Output

    -
    
    -website.com/index.html
    +
    1
    2

    website.com/index.html
    - +
    diff --git a/filters/array_to_sentence_string.html b/filters/array_to_sentence_string.html index 15ac17a4f..05bb8ed17 100644 --- a/filters/array_to_sentence_string.html +++ b/filters/array_to_sentence_string.html @@ -38,7 +38,7 @@ - +
    @@ -96,20 +96,20 @@

    Convert an array into a sentence. Useful for listing tags. Optional argument for connector.

    Input

    -
    {{ "foo,bar,baz" | split: "," | array_to_sentence_string }}
    +
    1
    {{ "foo,bar,baz" | split: "," | array_to_sentence_string }}

    Output

    -
    foo, bar, and baz
    +
    1
    foo, bar, and baz

    Input

    -
    {{ "foo,bar,baz" | split: "," | array_to_sentence_string: "or" }}
    +
    1
    {{ "foo,bar,baz" | split: "," | array_to_sentence_string: "or" }}

    Output

    -
    foo, bar, or baz
    +
    1
    foo, bar, or baz
    - +
    diff --git a/filters/at_least.html b/filters/at_least.html index 52c40f917..c1ff708e1 100644 --- a/filters/at_least.html +++ b/filters/at_least.html @@ -38,7 +38,7 @@ - +
    @@ -96,20 +96,20 @@

    Limits a number to a minimum value.

    Input

    -
    {{ 4 | at_least: 5 }}
    +
    1
    {{ 4 | at_least: 5 }}

    Output

    -
    5
    +
    1
    5

    Input

    -
    {{ 4 | at_least: 3 }}
    +
    1
    {{ 4 | at_least: 3 }}

    Output

    -
    4
    +
    1
    4
    - +
    diff --git a/filters/at_most.html b/filters/at_most.html index bcef4dc5e..27de80cac 100644 --- a/filters/at_most.html +++ b/filters/at_most.html @@ -38,7 +38,7 @@ - +
    @@ -96,20 +96,20 @@

    Limits a number to a maximum value.

    Input

    -
    {{ 4 | at_most: 5 }}
    +
    1
    {{ 4 | at_most: 5 }}

    Output

    -
    4
    +
    1
    4

    Input

    -
    {{ 4 | at_most: 3 }}
    +
    1
    {{ 4 | at_most: 3 }}

    Output

    -
    3
    +
    1
    3
    - +
    diff --git a/filters/capitalize.html b/filters/capitalize.html index 88dddf0cd..23e08d383 100644 --- a/filters/capitalize.html +++ b/filters/capitalize.html @@ -38,7 +38,7 @@ - +
    @@ -96,21 +96,21 @@

    Makes the first character of a string capitalized.

    Input

    -
    {{ "title" | capitalize }}
    +
    1
    {{ "title" | capitalize }}

    Output

    -
    Title
    +
    1
    Title

    capitalize only capitalizes the first character of a string, so later words are not affected:

    Input

    -
    {{ "my great title" | capitalize }}
    +
    1
    {{ "my great title" | capitalize }}

    Output

    -
    My great title
    +
    1
    My great title
    - +
    diff --git a/filters/ceil.html b/filters/ceil.html index eff08a1d1..695270297 100644 --- a/filters/ceil.html +++ b/filters/ceil.html @@ -38,7 +38,7 @@ - +
    @@ -96,33 +96,33 @@

    Rounds the input up to the nearest whole number. LiquidJS tries to convert the input to a number before the filter is applied.

    Input

    -
    {{ 1.2 | ceil }}
    +
    1
    {{ 1.2 | ceil }}

    Output

    -
    2
    +
    1
    2

    Input

    -
    {{ 2.0 | ceil }}
    +
    1
    {{ 2.0 | ceil }}

    Output

    -
    2
    +
    1
    2

    Input

    -
    {{ 183.357 | ceil }}
    +
    1
    {{ 183.357 | ceil }}

    Output

    -
    184
    +
    1
    184

    Here the input value is a string:

    Input

    -
    {{ "3.5" | ceil }}
    +
    1
    {{ "3.5" | ceil }}

    Output

    -
    4
    +
    1
    4
    - +
    diff --git a/filters/cgi_escape.html b/filters/cgi_escape.html index 0c8bc87ad..6e3bc73fa 100644 --- a/filters/cgi_escape.html +++ b/filters/cgi_escape.html @@ -38,7 +38,7 @@ - +
    @@ -96,14 +96,14 @@

    CGI escape a string for use in a URL. Replaces any special characters with appropriate %XX replacements. CGI escape normally replaces a space with a plus + sign.

    Input

    -
    {{ "foo, bar; baz?" | cgi_escape }}
    +
    1
    {{ "foo, bar; baz?" | cgi_escape }}

    Output

    -
    foo%2C+bar%3B+baz%3F
    +
    1
    foo%2C+bar%3B+baz%3F
    - +
    diff --git a/filters/compact.html b/filters/compact.html index 2d0910461..d0e89f5c2 100644 --- a/filters/compact.html +++ b/filters/compact.html @@ -38,7 +38,7 @@ - +
    @@ -97,39 +97,21 @@

    Removes any nil values from an array.

    For this example, assume site.pages is an array of content pages for a website, and some of these pages have an attribute called category that specifies their content category. If we map those categories to an array, some of the array items might be nil if any pages do not have a category attribute.

    Input

    -
    {% assign site_categories = site.pages | map: "category" %}
    -
    -{% for category in site_categories %}
    -- {{ category }}
    -{% endfor %}
    +
    1
    2
    3
    4
    5
    {% assign site_categories = site.pages | map: "category" %}

    {% for category in site_categories %}
    - {{ category }}
    {% endfor %}

    Output

    -
    - business
    -- celebrities
    --
    -- lifestyle
    -- sports
    --
    -- technology
    +
    1
    2
    3
    4
    5
    6
    7
    - business
    - celebrities
    -
    - lifestyle
    - sports
    -
    - technology

    By using compact when we create our site_categories array, we can remove all the nil values in the array.

    Input

    -
    {% assign site_categories = site.pages | map: "category" | compact %}
    -
    -{% for category in site_categories %}
    -- {{ category }}
    -{% endfor %}
    +
    1
    2
    3
    4
    5
    {% assign site_categories = site.pages | map: "category" | compact %}

    {% for category in site_categories %}
    - {{ category }}
    {% endfor %}

    Output

    -
    - business
    -- celebrities
    -- lifestyle
    -- sports
    -- technology
    +
    1
    2
    3
    4
    5
    - business
    - celebrities
    - lifestyle
    - sports
    - technology
    - +
    diff --git a/filters/concat.html b/filters/concat.html index 1357368f2..43daf96ce 100644 --- a/filters/concat.html +++ b/filters/concat.html @@ -38,7 +38,7 @@ - +
    @@ -96,47 +96,21 @@

    Concatenates (joins together) multiple arrays. The resulting array contains all the items from the input arrays.

    Input

    -
    {% assign fruits = "apples, oranges, peaches" | split: ", " %}
    -{% assign vegetables = "carrots, turnips, potatoes" | split: ", " %}
    -
    -{% assign everything = fruits | concat: vegetables %}
    -
    -{% for item in everything %}
    -- {{ item }}
    -{% endfor %}
    +
    1
    2
    3
    4
    5
    6
    7
    8
    {% assign fruits = "apples, oranges, peaches" | split: ", " %}
    {% assign vegetables = "carrots, turnips, potatoes" | split: ", " %}

    {% assign everything = fruits | concat: vegetables %}

    {% for item in everything %}
    - {{ item }}
    {% endfor %}

    Output

    -
    - apples
    -- oranges
    -- peaches
    -- carrots
    -- turnips
    -- potatoes
    +
    1
    2
    3
    4
    5
    6
    - apples
    - oranges
    - peaches
    - carrots
    - turnips
    - potatoes

    You can string together concat filters to join more than two arrays:

    Input

    -
    {% assign furniture = "chairs, tables, shelves" | split: ", " %}
    -
    -{% assign everything = fruits | concat: vegetables | concat: furniture %}
    -
    -{% for item in everything %}
    -- {{ item }}
    -{% endfor %}
    +
    1
    2
    3
    4
    5
    6
    7
    {% assign furniture = "chairs, tables, shelves" | split: ", " %}

    {% assign everything = fruits | concat: vegetables | concat: furniture %}

    {% for item in everything %}
    - {{ item }}
    {% endfor %}

    Output

    -
    - apples
    -- oranges
    -- peaches
    -- carrots
    -- turnips
    -- potatoes
    -- chairs
    -- tables
    -- shelves
    +
    1
    2
    3
    4
    5
    6
    7
    8
    9
    - apples
    - oranges
    - peaches
    - carrots
    - turnips
    - potatoes
    - chairs
    - tables
    - shelves
    - +
    diff --git a/filters/date.html b/filters/date.html index 3d2a5b3b7..206d70749 100644 --- a/filters/date.html +++ b/filters/date.html @@ -38,7 +38,7 @@ - +
    @@ -113,11 +113,7 @@ -

    Examples

    {{ article.published_at | date: '%a, %b %d, %y' }} => Fri, Jul 17, 15
    -{{ "now" | date: "%Y-%m-%d %H:%M" }} => 2020-03-25 15:57
    -
    -// equivalent to setting options.dateFormat = %d%q of %b %Y at %I:%M %P %Z
    -{{ '1990-12-31T23:30:28Z' | date: '%d%q of %b %Y at %I:%M %P %Z', -330 }} => 01st of Jan 1991 at 05:00 am +0530;
    +

    Examples

    1
    2
    3
    4
    5
    {{ article.published_at | date: '%a, %b %d, %y' }} => Fri, Jul 17, 15
    {{ "now" | date: "%Y-%m-%d %H:%M" }} => 2020-03-25 15:57

    // equivalent to setting options.dateFormat = %d%q of %b %Y at %I:%M %P %Z
    {{ '1990-12-31T23:30:28Z' | date: '%d%q of %b %Y at %I:%M %P %Z', -330 }} => 01st of Jan 1991 at 05:00 am +0530;

    TimeZone

    • During output, LiquidJS uses local timezone which can override by:
        @@ -135,29 +131,25 @@
    -

    Examples

    // equivalent to setting `options.timezoneOffset` to `360`
    -{{ "1990-12-31T23:00:00Z" | date: "%Y-%m-%dT%H:%M:%S", 360 }} => 1990-12-31T17:00:00
    -{{ "1990-12-31T23:00:00Z" | date: "%Y-%m-%dT%H:%M:%S", "Asia/Colombo" }} => 1991-01-01T04:30:00
    +

    Examples

    1
    2
    3
    // equivalent to setting `options.timezoneOffset` to `360`
    {{ "1990-12-31T23:00:00Z" | date: "%Y-%m-%dT%H:%M:%S", 360 }} => 1990-12-31T17:00:00
    {{ "1990-12-31T23:00:00Z" | date: "%Y-%m-%dT%H:%M:%S", "Asia/Colombo" }} => 1991-01-01T04:30:00

    Input

    -

    Examples

    {{ "1990-12-31T23:00:00Z" | date: "%Y-%m-%dT%H:%M:%S", 360 }} => 1990-12-31T17:00:00
    -{{ "March 14, 2016" | date: "%b %d, %y" }} => Mar 14, 16
    +

    Examples

    1
    2
    {{ "1990-12-31T23:00:00Z" | date: "%Y-%m-%dT%H:%M:%S", 360 }} => 1990-12-31T17:00:00
    {{ "March 14, 2016" | date: "%b %d, %y" }} => Mar 14, 16

    Current Date

    • To get the current time, pass the special word "now" or "today" as input
    • Note that the value will be the current time of when the page was last generated from the template, not when the page is presented to a user if caching or static site generation is involved
    -

    Example

    Last updated on: {{ "now" | date: "%Y-%m-%d %H:%M" }} => Last updated on: 2020-03-25 15:57
    -Last updated on: {{ "today" | date: "%Y-%m-%d %H:%M" }} => Last updated on: 2020-03-25 15:57
    +

    Example

    1
    2
    Last updated on: {{ "now" | date: "%Y-%m-%d %H:%M" }} => Last updated on: 2020-03-25 15:57
    Last updated on: {{ "today" | date: "%Y-%m-%d %H:%M" }} => Last updated on: 2020-03-25 15:57
    - +
    diff --git a/filters/date_to_long_string.html b/filters/date_to_long_string.html index 060acb0b7..6fa08ee78 100644 --- a/filters/date_to_long_string.html +++ b/filters/date_to_long_string.html @@ -38,7 +38,7 @@ - +
    @@ -96,22 +96,22 @@

    Convert a date to long format. Same with Jekyll date_to_long_string filter.

    Input

    -
    {{ site.time | date_to_long_string }}
    +
    1
    {{ site.time | date_to_long_string }}

    Output

    -
    07 November 2008
    +
    1
    07 November 2008

    Input

    -
    {{ site.time | date_to_long_string: "ordinal" }}
    +
    1
    {{ site.time | date_to_long_string: "ordinal" }}

    Output

    -
    7th November 2008
    +
    1
    7th November 2008

    Note that JavaScript Date has not timezone information, see date filter for details.

    - +
    diff --git a/filters/date_to_rfc822.html b/filters/date_to_rfc822.html index 0eae23262..b1918e3a3 100644 --- a/filters/date_to_rfc822.html +++ b/filters/date_to_rfc822.html @@ -38,7 +38,7 @@ - +
    @@ -96,16 +96,16 @@

    Convert a Date into the RFC-822 format used for RSS feeds, same as Jekyll filter date_to_rfc822.

    Input

    -
    {{ site.time | date_to_rfc822 }}
    +
    1
    {{ site.time | date_to_rfc822 }}

    Output

    -
    Mon, 07 Nov 2008 13:07:54 -0800
    +
    1
    Mon, 07 Nov 2008 13:07:54 -0800

    Note that JavaScript Date has not timezone information, see date filter for details.

    - +
    diff --git a/filters/date_to_string.html b/filters/date_to_string.html index b2a1ee19e..10e5913b5 100644 --- a/filters/date_to_string.html +++ b/filters/date_to_string.html @@ -38,7 +38,7 @@ - +
    @@ -96,22 +96,22 @@

    Convert a date to short format. Same with Jekyll date_to_string filter.

    Input

    -
    {{ site.time | date_to_string }}
    +
    1
    {{ site.time | date_to_string }}

    Output

    -
    07 Nov 2008
    +
    1
    07 Nov 2008

    Input

    -
    {{ site.time | date_to_string: "ordinal", "US" }}
    +
    1
    {{ site.time | date_to_string: "ordinal", "US" }}

    Output

    -
    Nov 7th, 2008
    +
    1
    Nov 7th, 2008

    Note that JavaScript Date has not timezone information, see date filter for details.

    - +
    diff --git a/filters/date_to_xmlschema.html b/filters/date_to_xmlschema.html index 4a0b6254c..19e1cd5cb 100644 --- a/filters/date_to_xmlschema.html +++ b/filters/date_to_xmlschema.html @@ -38,7 +38,7 @@ - +
    @@ -96,16 +96,16 @@

    Convert a Date into XML Schema (ISO 8601) format, same as Jekyll filter date_to_xmlschema.

    Input

    -
    {{ site.time | date_to_xmlschema }}
    +
    1
    {{ site.time | date_to_xmlschema }}

    Output

    -
    2008-11-07T13:07:54-08:00
    +
    1
    2008-11-07T13:07:54-08:00

    Note that JavaScript Date has not timezone information, see date filter for details.

    - +
    diff --git a/filters/default.html b/filters/default.html index a51f7c596..7708e67bc 100644 --- a/filters/default.html +++ b/filters/default.html @@ -38,7 +38,7 @@ - +
    @@ -97,41 +97,38 @@

    Allows you to specify a fallback in case a value doesn’t exist. default will show its value if the left side is falsy or empty (string or Array).

    In this example, product_price is not defined, so the default value is used.

    Input

    -
    {{ product_price | default: 2.99 }}
    +
    1
    {{ product_price | default: 2.99 }}

    Output

    -
    2.99
    +
    1
    2.99

    In this example, product_price is defined, so the default value is not used.

    Input

    -
    {% assign product_price = 4.99 %}
    -{{ product_price | default: 2.99 }}
    +
    1
    2
    {% assign product_price = 4.99 %}
    {{ product_price | default: 2.99 }}

    Output

    -
    4.99
    +
    1
    4.99

    In this example, product_price is empty, so the default value is used.

    Input

    -
    {% assign product_price = "" %}
    -{{ product_price | default: 2.99 }}
    +
    1
    2
    {% assign product_price = "" %}
    {{ product_price | default: 2.99 }}

    Output

    -
    2.99
    +
    1
    2.99

    Allowing false

    v9.32.0

    To allow variables to return false instead of the default value, you can use the allow_false parameter.

    Input

    -
    {% assign display_price = false %}
    -{{ display_price | default: true, allow_false: true }}
    +
    1
    2
    {% assign display_price = false %}
    {{ display_price | default: true, allow_false: true }}

    Output

    -
    false
    +
    1
    false
    - +
    diff --git a/filters/divided_by.html b/filters/divided_by.html index 98aa970d0..c24163d02 100644 --- a/filters/divided_by.html +++ b/filters/divided_by.html @@ -38,7 +38,7 @@ - +
    @@ -96,32 +96,31 @@

    Divides a number by another number. The result is the string obtained by JavaScript .toString() of the result number.

    Input

    -
    {{ 16 | divided_by: 4 }}
    +
    1
    {{ 16 | divided_by: 4 }}

    Output

    -
    4
    +
    1
    4

    Input

    -
    {{ 5 | divided_by: 3 }}
    +
    1
    {{ 5 | divided_by: 3 }}

    Output

    -
    1.6666666666666667
    +
    1
    1.6666666666666667

    In JavaScript, float and integer shares the same type number and we cannot tell the difference. For example:

    -
    // always true
    -5.0 === 5
    +
    1
    2
    // always true
    5.0 === 5

    You’ll need to pass another integerArithmetic argument to enforce integer divide:

    Input

    -
    {{ 5 | divided_by: 3, true }}
    +
    1
    {{ 5 | divided_by: 3, true }}

    Output

    -
    1
    +
    1
    1
    - +
    diff --git a/filters/downcase.html b/filters/downcase.html index 67922fe5b..d66820e53 100644 --- a/filters/downcase.html +++ b/filters/downcase.html @@ -38,7 +38,7 @@ - +
    @@ -96,20 +96,20 @@

    Makes each character in a string lowercase. It has no effect on strings which are already all lowercase.

    Input

    -
    {{ "Parker Moore" | downcase }}
    +
    1
    {{ "Parker Moore" | downcase }}

    Output

    -
    parker moore
    +
    1
    parker moore

    Input

    -
    {{ "apple" | downcase }}
    +
    1
    {{ "apple" | downcase }}

    Output

    -
    apple
    +
    1
    apple
    - +
    diff --git a/filters/escape.html b/filters/escape.html index a5ee0ae64..d246844ac 100644 --- a/filters/escape.html +++ b/filters/escape.html @@ -38,7 +38,7 @@ - +
    @@ -96,7 +96,7 @@

    Escapes a string by replacing HTML special characters with escape sequences. It doesn’t change strings that don’t have anything to escape.

    Input

    -
    {{ "Have you read 'James & the Giant Peach'?" | escape }}
    +
    1
    {{ "Have you read 'James & the Giant Peach'?" | escape }}

    Output

    @@ -104,14 +104,14 @@ Have you read &#39;James &amp; the Giant Peach&#39;?
     

    Input

    -
    {{ "Tetsuro Takara" | escape }}
    +
    1
    {{ "Tetsuro Takara" | escape }}

    Output

    -
    Tetsuro Takara
    +
    1
    Tetsuro Takara
    - +
    diff --git a/filters/escape_once.html b/filters/escape_once.html index 05b2809e7..64ce0b450 100644 --- a/filters/escape_once.html +++ b/filters/escape_once.html @@ -38,7 +38,7 @@ - +
    @@ -96,7 +96,7 @@

    Escapes a string without changing existing escaped entities. It doesn’t change strings that don’t have anything to escape.

    Input

    -
    {{ "1 < 2 & 3" | escape_once }}
    +
    1
    {{ "1 < 2 & 3" | escape_once }}

    Output

    @@ -115,7 +115,7 @@
     
                   
    - +
    diff --git a/filters/find.html b/filters/find.html index 432cca8bf..4db598bbd 100644 --- a/filters/find.html +++ b/filters/find.html @@ -38,7 +38,7 @@ - +
    @@ -95,21 +95,17 @@

    v10.11.0

    Return the first object in an array for which the queried attribute has the given value or return nil if no item in the array satisfies the given criteria. For the following members array:

    -
    const members = [
    -  { graduation_year: 2013, name: 'Jay' },
    -  { graduation_year: 2014, name: 'John' },
    -  { graduation_year: 2014, name: 'Jack' }
    -]
    +
    1
    2
    3
    4
    5
    const members = [
    { graduation_year: 2013, name: 'Jay' },
    { graduation_year: 2014, name: 'John' },
    { graduation_year: 2014, name: 'Jack' }
    ]

    Input

    -
    {{ members | find: "graduation_year", 2014 | json }}
    +
    1
    {{ members | find: "graduation_year", 2014 | json }}

    Output

    -
    {"graduation_year":2014,"name":"John"}
    +
    1
    {"graduation_year":2014,"name":"John"}
    - +
    diff --git a/filters/find_exp.html b/filters/find_exp.html index c05a4c32a..0fa4fc6f3 100644 --- a/filters/find_exp.html +++ b/filters/find_exp.html @@ -38,7 +38,7 @@ - +
    @@ -95,21 +95,17 @@

    v10.11.0

    Return the first object in an array for which the given expression evaluates to true or return nil if no item in the array satisfies the evaluated expression.

    -
    const members = [
    -  { graduation_year: 2013, name: 'Jay' },
    -  { graduation_year: 2014, name: 'John' },
    -  { graduation_year: 2014, name: 'Jack' }
    -]
    +
    1
    2
    3
    4
    5
    const members = [
    { graduation_year: 2013, name: 'Jay' },
    { graduation_year: 2014, name: 'John' },
    { graduation_year: 2014, name: 'Jack' }
    ]

    Input

    -
    {{ members | find_exp: "item", "item.graduation_year == 2014" | json }}
    +
    1
    {{ members | find_exp: "item", "item.graduation_year == 2014" | json }}

    Output

    -
    {"graduation_year":2014,"name":"John"}
    +
    1
    {"graduation_year":2014,"name":"John"}
    - +
    diff --git a/filters/first.html b/filters/first.html index 26ad10b64..51e5aaffb 100644 --- a/filters/first.html +++ b/filters/first.html @@ -38,7 +38,7 @@ - +
    @@ -96,27 +96,23 @@

    Returns the first item of an array.

    Input

    -
    {{ "Ground control to Major Tom." | split: " " | first }}
    +
    1
    {{ "Ground control to Major Tom." | split: " " | first }}

    Output

    -
    Ground
    +
    1
    Ground

    Input

    -
    {% assign my_array = "zebra, octopus, giraffe, tiger" | split: ", " %}
    -{{ my_array.first }}
    +
    1
    2
    {% assign my_array = "zebra, octopus, giraffe, tiger" | split: ", " %}
    {{ my_array.first }}

    Output

    -
    
    -zebra
    +
    1
    2

    zebra

    You can use first with dot notation when you need to use the filter inside a tag:

    -
    {% if my_array.first == "zebra" %}
    -  Here comes a zebra!
    -{% endif %}
    +
    1
    2
    3
    {% if my_array.first == "zebra" %}
    Here comes a zebra!
    {% endif %}
    - +
    diff --git a/filters/floor.html b/filters/floor.html index 9ee93c0c1..3da9240e7 100644 --- a/filters/floor.html +++ b/filters/floor.html @@ -38,7 +38,7 @@ - +
    @@ -96,33 +96,33 @@

    Rounds the input down to the nearest whole number. LiquidJS tries to convert the input to a number before the filter is applied.

    Input

    -
    {{ 1.2 | floor }}
    +
    1
    {{ 1.2 | floor }}

    Output

    -
    1
    +
    1
    1

    Input

    -
    {{ 2.0 | floor }}
    +
    1
    {{ 2.0 | floor }}

    Output

    -
    2
    +
    1
    2

    Input

    -
    {{ 183.357 | floor }}
    +
    1
    {{ 183.357 | floor }}

    Output

    -
    183
    +
    1
    183

    Here the input value is a string:

    Input

    -
    {{ "3.5" | floor }}
    +
    1
    {{ "3.5" | floor }}

    Output

    -
    3
    +
    1
    3
    - +
    diff --git a/filters/group_by.html b/filters/group_by.html index 1588ae878..ad420c286 100644 --- a/filters/group_by.html +++ b/filters/group_by.html @@ -38,7 +38,7 @@ - +
    @@ -95,44 +95,17 @@

    v10.11.0

    Group an array’s items by a given property. For members array:

    -
    const members = [
    -  { graduation_year: 2003, name: 'Jay' },
    -  { graduation_year: 2003, name: 'John' },
    -  { graduation_year: 2004, name: 'Jack' }
    -]
    +
    1
    2
    3
    4
    5
    const members = [
    { graduation_year: 2003, name: 'Jay' },
    { graduation_year: 2003, name: 'John' },
    { graduation_year: 2004, name: 'Jack' }
    ]

    Input

    -
    {{ members | group_by: "graduation_year" | json: 2 }}
    +
    1
    {{ members | group_by: "graduation_year" | json: 2 }}

    Output

    -
    [
    -  {
    -    "name": 2003,
    -    "items": [
    -      {
    -        "graduation_year": 2003,
    -        "name": "Jay"
    -      },
    -      {
    -        "graduation_year": 2003,
    -        "name": "John"
    -      }
    -    ]
    -  },
    -  {
    -    "name": 2004,
    -    "items": [
    -      {
    -        "graduation_year": 2004,
    -        "name": "Jack"
    -      }
    -    ]
    -  }
    -]
    +
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    [
    {
    "name": 2003,
    "items": [
    {
    "graduation_year": 2003,
    "name": "Jay"
    },
    {
    "graduation_year": 2003,
    "name": "John"
    }
    ]
    },
    {
    "name": 2004,
    "items": [
    {
    "graduation_year": 2004,
    "name": "Jack"
    }
    ]
    }
    ]
    - +
    diff --git a/filters/group_by_exp.html b/filters/group_by_exp.html index 32cdf893e..13fe114aa 100644 --- a/filters/group_by_exp.html +++ b/filters/group_by_exp.html @@ -38,7 +38,7 @@ - +
    @@ -95,44 +95,17 @@

    v10.11.0

    Group an array’s items using a Liquid expression. For members array below:

    -
    const members = [
    -  { graduation_year: 2013, name: 'Jay' },
    -  { graduation_year: 2014, name: 'John' },
    -  { graduation_year: 2009, name: 'Jack' }
    -]
    +
    1
    2
    3
    4
    5
    const members = [
    { graduation_year: 2013, name: 'Jay' },
    { graduation_year: 2014, name: 'John' },
    { graduation_year: 2009, name: 'Jack' }
    ]

    Input

    -
    {{ members | group_by_exp: "item", "item.graduation_year | truncate: 3, ''" | json: 2 }}
    +
    1
    {{ members | group_by_exp: "item", "item.graduation_year | truncate: 3, ''" | json: 2 }}

    Output

    -
    [
    -  {
    -    "name": "201",
    -    "items": [
    -      {
    -        "graduation_year": 2013,
    -        "name": "Jay"
    -      },
    -      {
    -        "graduation_year": 2014,
    -        "name": "John"
    -      }
    -    ]
    -  },
    -  {
    -    "name": "200",
    -    "items": [
    -      {
    -        "graduation_year": 2009,
    -        "name": "Jack"
    -      }
    -    ]
    -  }
    -]
    +
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    [
    {
    "name": "201",
    "items": [
    {
    "graduation_year": 2013,
    "name": "Jay"
    },
    {
    "graduation_year": 2014,
    "name": "John"
    }
    ]
    },
    {
    "name": "200",
    "items": [
    {
    "graduation_year": 2009,
    "name": "Jack"
    }
    ]
    }
    ]
    - +
    diff --git a/filters/inspect.html b/filters/inspect.html index ff21e5184..d0b2d633f 100644 --- a/filters/inspect.html +++ b/filters/inspect.html @@ -38,7 +38,7 @@ - +
    @@ -95,31 +95,24 @@

    v10.13.0

    Similar with json, but inspect allows cyclic structure. For the scope below:

    -
    const foo = {
    -    bar: 'BAR'
    -}
    -foo.foo = foo
    -const scope = { foo }
    +
    1
    2
    3
    4
    5
    const foo = {
    bar: 'BAR'
    }
    foo.foo = foo
    const scope = { foo }

    Input

    -
    {% foo | inspect %}
    +
    1
    {% foo | inspect %}

    Output

    -
    {"bar":"BAR","foo":"[Circular]"}
    +
    1
    {"bar":"BAR","foo":"[Circular]"}

    Formatting

    An additional space argument can be specified for the indent width.

    Input

    -
    {{ foo | inspect: 4 }}
    +
    1
    {{ foo | inspect: 4 }}

    Output

    -
    {
    -    "bar": "BAR",
    -    "foo": "[Circular]"
    -}
    +
    1
    2
    3
    4
    {
    "bar": "BAR",
    "foo": "[Circular]"
    }
    - +
    diff --git a/filters/join.html b/filters/join.html index 8d58ed8d4..979bd0638 100644 --- a/filters/join.html +++ b/filters/join.html @@ -38,7 +38,7 @@ - +
    @@ -96,16 +96,14 @@

    Combines the items in an array into a single string using the argument as a separator.

    Input

    -
    {% assign beatles = "John, Paul, George, Ringo" | split: ", " %}
    -{{ beatles | join: " and " }}
    +
    1
    2
    {% assign beatles = "John, Paul, George, Ringo" | split: ", " %}
    {{ beatles | join: " and " }}

    Output

    -
    
    -John and Paul and George and Ringo
    +
    1
    2

    John and Paul and George and Ringo
    - +
    diff --git a/filters/json.html b/filters/json.html index 8682eb548..8f647da8e 100644 --- a/filters/json.html +++ b/filters/json.html @@ -38,7 +38,7 @@ - +
    @@ -96,29 +96,23 @@

    Convert values to string via JSON.stringify(), for debug purpose.

    Input

    -
    {% assign arr = "foo bar coo" | split: " " %}
    -{{ arr | json }}
    +
    1
    2
    {% assign arr = "foo bar coo" | split: " " %}
    {{ arr | json }}

    Output

    -
    ["foo","bar","coo"]
    +
    1
    ["foo","bar","coo"]

    Space

    v10.11.0

    An additional space parameter can be specified to format the JSON.

    Input

    -
    {% assign arr = "foo bar coo" | split: " " %}
    -{{ arr | json: 4 }}
    +
    1
    2
    {% assign arr = "foo bar coo" | split: " " %}
    {{ arr | json: 4 }}

    Output

    -
    [
    -    "foo",
    -    "bar",
    -    "coo"
    -]
    +
    1
    2
    3
    4
    5
    [
    "foo",
    "bar",
    "coo"
    ]
    - +
    diff --git a/filters/jsonify.html b/filters/jsonify.html index 91ee46fa4..9a57bdabc 100644 --- a/filters/jsonify.html +++ b/filters/jsonify.html @@ -38,7 +38,7 @@ - +
    @@ -98,7 +98,7 @@
    - +
    diff --git a/filters/last.html b/filters/last.html index a55c53f78..bbd2fd8a4 100644 --- a/filters/last.html +++ b/filters/last.html @@ -38,7 +38,7 @@ - +
    @@ -96,27 +96,23 @@

    Returns the last item of an array.

    Input

    -
    {{ "Ground control to Major Tom." | split: " " | last }}
    +
    1
    {{ "Ground control to Major Tom." | split: " " | last }}

    Output

    -
    Tom.
    +
    1
    Tom.

    Input

    -
    {% assign my_array = "zebra, octopus, giraffe, tiger" | split: ", " %}
    -{{ my_array.last }}
    +
    1
    2
    {% assign my_array = "zebra, octopus, giraffe, tiger" | split: ", " %}
    {{ my_array.last }}

    Output

    -
    
    -tiger
    +
    1
    2

    tiger

    You can use last with dot notation when you need to use the filter inside a tag:

    -
    {% if my_array.last == "tiger" %}
    -  There goes a tiger!
    -{% endif %}
    +
    1
    2
    3
    {% if my_array.last == "tiger" %}
    There goes a tiger!
    {% endif %}
    - +
    diff --git a/filters/lstrip.html b/filters/lstrip.html index fd119a2e1..c77434541 100644 --- a/filters/lstrip.html +++ b/filters/lstrip.html @@ -38,7 +38,7 @@ - +
    @@ -96,14 +96,14 @@

    Removes all whitespace (tabs, spaces, and newlines) from the left side of a string. It does not affect spaces between words.

    Input

    -
    BEGIN{{ "          So much room for activities!          " | lstrip }}END
    +
    1
    BEGIN{{ "          So much room for activities!          " | lstrip }}END

    Output

    -
    BEGINSo much room for activities!          END
    +
    1
    BEGINSo much room for activities!          END
    - +
    diff --git a/filters/map.html b/filters/map.html index 8ef353160..c57dc075e 100644 --- a/filters/map.html +++ b/filters/map.html @@ -38,7 +38,7 @@ - +
    @@ -97,22 +97,14 @@

    Creates an array of values by extracting the values of a named property from another object.

    In this example, assume the object site.pages contains all the metadata for a website. Using assign with the map filter creates a variable that contains only the values of the category properties of everything in the site.pages object.

    Input

    -
    {% assign all_categories = site.pages | map: "category" %}
    -
    -{% for item in all_categories %}
    -- {{ item }}
    -{% endfor %}
    +
    1
    2
    3
    4
    5
    {% assign all_categories = site.pages | map: "category" %}

    {% for item in all_categories %}
    - {{ item }}
    {% endfor %}

    Output

    -
    - business
    -- celebrities
    -- lifestyle
    -- sports
    -- technology
    +
    1
    2
    3
    4
    5
    - business
    - celebrities
    - lifestyle
    - sports
    - technology
    - +
    diff --git a/filters/minus.html b/filters/minus.html index dbcd8a01c..e256cf539 100644 --- a/filters/minus.html +++ b/filters/minus.html @@ -38,7 +38,7 @@ - +
    @@ -96,26 +96,26 @@

    Subtracts a number from another number.

    Input

    -
    {{ 4 | minus: 2 }}
    +
    1
    {{ 4 | minus: 2 }}

    Output

    -
    2
    +
    1
    2

    Input

    -
    {{ 16 | minus: 4 }}
    +
    1
    {{ 16 | minus: 4 }}

    Output

    -
    12
    +
    1
    12

    Input

    -
    {{ 183.357 | minus: 12 }}
    +
    1
    {{ 183.357 | minus: 12 }}

    Output

    -
    171.357
    +
    1
    171.357
    - +
    diff --git a/filters/modulo.html b/filters/modulo.html index af69a6b51..9b84ac1bd 100644 --- a/filters/modulo.html +++ b/filters/modulo.html @@ -38,7 +38,7 @@ - +
    @@ -96,26 +96,26 @@

    Returns the remainder of a division operation.

    Input

    -
    {{ 3 | modulo: 2 }}
    +
    1
    {{ 3 | modulo: 2 }}

    Output

    -
    1
    +
    1
    1

    Input

    -
    {{ 24 | modulo: 7 }}
    +
    1
    {{ 24 | modulo: 7 }}

    Output

    -
    3
    +
    1
    3

    Input

    -
    {{ 183.357 | modulo: 12 }}
    +
    1
    {{ 183.357 | modulo: 12 }}

    Output

    -
    3.3569999999999993
    +
    1
    3.3569999999999993
    - +
    diff --git a/filters/newline_to_br.html b/filters/newline_to_br.html index fb380ade4..4a6f33281 100644 --- a/filters/newline_to_br.html +++ b/filters/newline_to_br.html @@ -38,7 +38,7 @@ - +
    @@ -96,20 +96,14 @@

    Replaces every newline (\n) in a string with an HTML line break (<br />).

    Input

    -
    {% capture string_with_newlines %}
    -Hello
    -there
    -{% endcapture %}
    -
    -{{ string_with_newlines | newline_to_br }}
    +
    1
    2
    3
    4
    5
    6
    {% capture string_with_newlines %}
    Hello
    there
    {% endcapture %}

    {{ string_with_newlines | newline_to_br }}

    Output

    -
    
    -<br/>Hello<br/>there<br/>
    +
    1
    2

    <br/>Hello<br/>there<br/>
    - +
    diff --git a/filters/normalize_whitespace.html b/filters/normalize_whitespace.html index 65f5d8163..4c8f9e2e6 100644 --- a/filters/normalize_whitespace.html +++ b/filters/normalize_whitespace.html @@ -38,7 +38,7 @@ - +
    @@ -96,14 +96,14 @@

    Replace any occurrence of whitespace with a single space.

    Input

    -
    {{ "a \n b" | normalize_whitespace }}
    +
    1
    {{ "a \n b" | normalize_whitespace }}

    Output

    -
    a b
    +
    1
    a b
    - +
    diff --git a/filters/number_of_words.html b/filters/number_of_words.html index 7eb5b7f7d..1a68d50b1 100644 --- a/filters/number_of_words.html +++ b/filters/number_of_words.html @@ -38,7 +38,7 @@ - +
    @@ -100,32 +100,32 @@
  • Passing 'auto' (auto-detect) works similar to 'cjk' but is more performant if the filter is used on a variable string that may or may not contain CJK chars.
  • Input

    -
    {{ "Hello world!" | number_of_words }}
    +
    1
    {{ "Hello world!" | number_of_words }}

    Output

    -
    2
    +
    1
    2

    Input

    -
    {{ "你好hello世界world" | number_of_words }}
    +
    1
    {{ "你好hello世界world" | number_of_words }}

    Output

    -
    1
    +
    1
    1

    Input

    -
    {{ "你好hello世界world" | number_of_words: "cjk" }}
    +
    1
    {{ "你好hello世界world" | number_of_words: "cjk" }}

    Output

    -
    6
    +
    1
    6

    Input

    -
    {{ "你好hello世界world" | number_of_words: "auto" }}
    +
    1
    {{ "你好hello世界world" | number_of_words: "auto" }}

    Output

    -
    6
    +
    1
    6
    - +
    diff --git a/filters/overview.html b/filters/overview.html index 4449e378a..c69a36608 100644 --- a/filters/overview.html +++ b/filters/overview.html @@ -38,7 +38,7 @@ - +
    @@ -129,7 +129,7 @@
    - +
    diff --git a/filters/plus.html b/filters/plus.html index 9ddf6f62c..eca86146d 100644 --- a/filters/plus.html +++ b/filters/plus.html @@ -38,7 +38,7 @@ - +
    @@ -96,26 +96,26 @@

    Adds a number to another number.

    Input

    -
    {{ 4 | plus: 2 }}
    +
    1
    {{ 4 | plus: 2 }}

    Output

    -
    6
    +
    1
    6

    Input

    -
    {{ 16 | plus: 4 }}
    +
    1
    {{ 16 | plus: 4 }}

    Output

    -
    20
    +
    1
    20

    Input

    -
    {{ 183.357 | plus: 12 }}
    +
    1
    {{ 183.357 | plus: 12 }}

    Output

    -
    195.357
    +
    1
    195.357
    - +
    diff --git a/filters/pop.html b/filters/pop.html index 298ef02e2..466fae4fc 100644 --- a/filters/pop.html +++ b/filters/pop.html @@ -38,7 +38,7 @@ - +
    @@ -96,21 +96,14 @@

    Pop an element from the array. It’s NON-DESTRUCTIVE, i.e. it does not mutate the array, but rather make a copy and mutate that.

    Input

    -
    {% assign fruits = "apples, oranges, peaches" | split: ", " %}
    -
    -{% assign everything = fruits | pop %}
    -
    -{% for item in everything %}
    -- {{ item }}
    -{% endfor %}
    +
    1
    2
    3
    4
    5
    6
    7
    {% assign fruits = "apples, oranges, peaches" | split: ", " %}

    {% assign everything = fruits | pop %}

    {% for item in everything %}
    - {{ item }}
    {% endfor %}

    Output

    -
    - apples
    -- oranges
    +
    1
    2
    - apples
    - oranges
    - +
    diff --git a/filters/prepend.html b/filters/prepend.html index c241d42fd..7090032d7 100644 --- a/filters/prepend.html +++ b/filters/prepend.html @@ -38,7 +38,7 @@ - +
    @@ -96,23 +96,21 @@

    Adds the specified string to the beginning of another string.

    Input

    -
    {{ "apples, oranges, and bananas" | prepend: "Some fruit: " }}
    +
    1
    {{ "apples, oranges, and bananas" | prepend: "Some fruit: " }}

    Output

    -
    Some fruit: apples, oranges, and bananas
    +
    1
    Some fruit: apples, oranges, and bananas

    prepend can also be used with variables:

    Input

    -
    {% assign url = "example.com" %}
    -{{ "/index.html" | prepend: url }}
    +
    1
    2
    {% assign url = "example.com" %}
    {{ "/index.html" | prepend: url }}

    Output

    -
    
    -example.com/index.html
    +
    1
    2

    example.com/index.html
    - +
    diff --git a/filters/push.html b/filters/push.html index a4c419fe6..8a543c23f 100644 --- a/filters/push.html +++ b/filters/push.html @@ -38,7 +38,7 @@ - +
    @@ -96,22 +96,14 @@

    Push an element into array. It’s NON-DESTRUCTIVE, i.e. it does not mutate the array, but rather make a copy and mutate that.

    Input

    -
    {% assign fruits = "apples, oranges" | split: ", " %}
    -
    -{% assign everything = fruits | push: "peaches" %}
    -
    -{% for item in everything %}
    -- {{ item }}
    -{% endfor %}
    +
    1
    2
    3
    4
    5
    6
    7
    {% assign fruits = "apples, oranges" | split: ", " %}

    {% assign everything = fruits | push: "peaches" %}

    {% for item in everything %}
    - {{ item }}
    {% endfor %}

    Output

    -
    - apples
    -- oranges
    -- peaches
    +
    1
    2
    3
    - apples
    - oranges
    - peaches
    - +
    diff --git a/filters/raw.html b/filters/raw.html index 383e969f2..a381065e0 100644 --- a/filters/raw.html +++ b/filters/raw.html @@ -38,7 +38,7 @@ - +
    @@ -99,32 +99,32 @@

    Input (outputEscape not set)

    -
    {{ "<" }}
    +
    1
    {{ "<" }}

    Output

    -
    <
    +
    1
    <

    Input (outputEscape="escape")

    -
    {{ "<" }}
    +
    1
    {{ "<" }}

    Output

    -
    &lt;
    +
    1
    &lt;

    Input (outputEscape="json")

    -
    {{ "<" }}
    +
    1
    {{ "<" }}

    Output

    -
    "<"
    +
    1
    "<"

    Input (outputEscape="escape")

    -
    {{ "<" | raw }}
    +
    1
    {{ "<" | raw }}

    Output

    -
    <
    +
    1
    <
    - +
    diff --git a/filters/remove.html b/filters/remove.html index 5d6c8e1d6..713674815 100644 --- a/filters/remove.html +++ b/filters/remove.html @@ -38,7 +38,7 @@ - +
    @@ -96,14 +96,14 @@

    Removes every occurrence of the specified substring from a string.

    Input

    -
    {{ "I strained to see the train through the rain" | remove: "rain" }}
    +
    1
    {{ "I strained to see the train through the rain" | remove: "rain" }}

    Output

    -
    I sted to see the t through the 
    +
    1
    I sted to see the t through the 
    - +
    diff --git a/filters/remove_first.html b/filters/remove_first.html index bc3893e21..a682e62df 100644 --- a/filters/remove_first.html +++ b/filters/remove_first.html @@ -38,7 +38,7 @@ - +
    @@ -96,14 +96,14 @@

    Removes only the first occurrence of the specified substring from a string.

    Input

    -
    {{ "I strained to see the train through the rain" | remove_first: "rain" }}
    +
    1
    {{ "I strained to see the train through the rain" | remove_first: "rain" }}

    Output

    -
    I sted to see the train through the rain
    +
    1
    I sted to see the train through the rain
    - +
    diff --git a/filters/remove_last.html b/filters/remove_last.html index 9143564b4..c038a77db 100644 --- a/filters/remove_last.html +++ b/filters/remove_last.html @@ -38,7 +38,7 @@ - +
    @@ -96,14 +96,14 @@

    Removes only the last occurrence of the specified substring from a string.

    Input

    -
    {{ "I strained to see the train through the rain" | remove_last: "rain" }}
    +
    1
    {{ "I strained to see the train through the rain" | remove_last: "rain" }}

    Output

    -
    I strained to see the train through the
    +
    1
    I strained to see the train through the
    - +
    diff --git a/filters/replace.html b/filters/replace.html index 01ce3c14b..cdfcab0d3 100644 --- a/filters/replace.html +++ b/filters/replace.html @@ -38,7 +38,7 @@ - +
    @@ -96,14 +96,14 @@

    Replaces every occurrence of the first argument in a string with the second argument.

    Input

    -
    {{ "Take my protein pills and put my helmet on" | replace: "my", "your" }}
    +
    1
    {{ "Take my protein pills and put my helmet on" | replace: "my", "your" }}

    Output

    -
    Take your protein pills and put your helmet on
    +
    1
    Take your protein pills and put your helmet on
    - +
    diff --git a/filters/replace_first.html b/filters/replace_first.html index 24b9467fb..83490eb70 100644 --- a/filters/replace_first.html +++ b/filters/replace_first.html @@ -38,7 +38,7 @@ - +
    @@ -96,14 +96,14 @@

    Replaces only the first occurrence of the first argument in a string with the second argument.

    Input

    -
    {{ "Take my protein pills and put my helmet on" | replace_first: "my", "your" }}
    +
    1
    {{ "Take my protein pills and put my helmet on" | replace_first: "my", "your" }}

    Output

    -
    Take your protein pills and put my helmet on
    +
    1
    Take your protein pills and put my helmet on
    - +
    diff --git a/filters/replace_last.html b/filters/replace_last.html index 6cfb9917a..f858a168c 100644 --- a/filters/replace_last.html +++ b/filters/replace_last.html @@ -38,7 +38,7 @@ - +
    @@ -96,14 +96,14 @@

    Replaces only the last occurrence of the first argument in a string with the second argument.

    Input

    -
    {{ "Take my protein pills and put my helmet on" | replace_last: "my", "your" }}
    +
    1
    {{ "Take my protein pills and put my helmet on" | replace_last: "my", "your" }}

    Output

    -
    Take my protein pills and put your helmet on
    +
    1
    Take my protein pills and put your helmet on
    - +
    diff --git a/filters/reverse.html b/filters/reverse.html index 730d4de39..38d36b938 100644 --- a/filters/reverse.html +++ b/filters/reverse.html @@ -38,7 +38,7 @@ - +
    @@ -96,25 +96,21 @@

    Reverses the order of the items in an array. reverse cannot reverse a string.

    Input

    -
    {% assign my_array = "apples, oranges, peaches, plums" | split: ", " %}
    -
    -{{ my_array | reverse | join: ", " }}
    +
    1
    2
    3
    {% assign my_array = "apples, oranges, peaches, plums" | split: ", " %}

    {{ my_array | reverse | join: ", " }}

    Output

    -
    
    -
    -plums, peaches, oranges, apples
    +
    1
    2
    3


    plums, peaches, oranges, apples

    Although reverse cannot be used directly on a string, you can split a string into an array, reverse the array, and rejoin it by chaining together filters:

    Input

    -
    {{ "Ground control to Major Tom." | split: "" | reverse | join: "" }}
    +
    1
    {{ "Ground control to Major Tom." | split: "" | reverse | join: "" }}

    Output

    -
    .moT rojaM ot lortnoc dnuorG
    +
    1
    .moT rojaM ot lortnoc dnuorG
    - +
    diff --git a/filters/round.html b/filters/round.html index 97ad00d80..20e63c9f6 100644 --- a/filters/round.html +++ b/filters/round.html @@ -38,7 +38,7 @@ - +
    @@ -96,26 +96,26 @@

    Rounds a number to the nearest integer or, if a number is passed as an argument, to that number of decimal places.

    Input

    -
    {{ 1.2 | round }}
    +
    1
    {{ 1.2 | round }}

    Output

    -
    1
    +
    1
    1

    Input

    -
    {{ 2.7 | round }}
    +
    1
    {{ 2.7 | round }}

    Output

    -
    3
    +
    1
    3

    Input

    -
    {{ 183.357 | round: 2 }}
    +
    1
    {{ 183.357 | round: 2 }}

    Output

    -
    183.36
    +
    1
    183.36
    - +
    diff --git a/filters/rstrip.html b/filters/rstrip.html index 837e0bbc7..cb4937d7d 100644 --- a/filters/rstrip.html +++ b/filters/rstrip.html @@ -38,7 +38,7 @@ - +
    @@ -96,14 +96,14 @@

    Removes all whitespace (tabs, spaces, and newlines) from the right side of a string. It does not affect spaces between words.

    Input

    -
    BEGIN{{ "          So much room for activities!          " | rstrip }}END
    +
    1
    BEGIN{{ "          So much room for activities!          " | rstrip }}END

    Output

    -
    BEGIN          So much room for activities!END
    +
    1
    BEGIN          So much room for activities!END
    - +
    diff --git a/filters/shift.html b/filters/shift.html index 06e128d07..34243dd14 100644 --- a/filters/shift.html +++ b/filters/shift.html @@ -38,7 +38,7 @@ - +
    @@ -96,21 +96,14 @@

    Shift an element from the array. It’s NON-DESTRUCTIVE, i.e. it does not mutate the array, but rather make a copy and mutate that.

    Input

    -
    {% assign fruits = "apples, oranges, peaches" | split: ", " %}
    -
    -{% assign everything = fruits | shift %}
    -
    -{% for item in everything %}
    -- {{ item }}
    -{% endfor %}
    +
    1
    2
    3
    4
    5
    6
    7
    {% assign fruits = "apples, oranges, peaches" | split: ", " %}

    {% assign everything = fruits | shift %}

    {% for item in everything %}
    - {{ item }}
    {% endfor %}

    Output

    -
    - oranges
    -- peaches
    +
    1
    2
    - oranges
    - peaches
    - +
    diff --git a/filters/size.html b/filters/size.html index 6243ce244..db743726a 100644 --- a/filters/size.html +++ b/filters/size.html @@ -38,7 +38,7 @@ - +
    @@ -96,29 +96,23 @@

    Returns the number of characters in a string or the number of items in an array.

    Input

    -
    {{ "Ground control to Major Tom." | size }}
    +
    1
    {{ "Ground control to Major Tom." | size }}

    Output

    -
    28
    +
    1
    28

    Input

    -
    {% assign my_array = "apples, oranges, peaches, plums" | split: ", " %}
    -
    -{{ my_array.size }}
    +
    1
    2
    3
    {% assign my_array = "apples, oranges, peaches, plums" | split: ", " %}

    {{ my_array.size }}

    Output

    -
    
    -
    -4
    +
    1
    2
    3


    4

    You can use size with dot notation when you need to use the filter inside a tag:

    -
    {% if site.pages.size > 10 %}
    -  This is a big website!
    -{% endif %}
    +
    1
    2
    3
    {% if site.pages.size > 10 %}
    This is a big website!
    {% endif %}
    - +
    diff --git a/filters/slice.html b/filters/slice.html index b28c04abe..304339f8d 100644 --- a/filters/slice.html +++ b/filters/slice.html @@ -38,7 +38,7 @@ - +
    @@ -97,33 +97,33 @@

    Returns a substring of 1 character beginning at the index specified by the first argument. An optional second argument specifies the length of the substring to be returned.

    String indices are numbered starting from 0.

    Input

    -
    {{ "Liquid" | slice: 0 }}
    +
    1
    {{ "Liquid" | slice: 0 }}

    Output

    -
    L
    +
    1
    L

    Input

    -
    {{ "Liquid" | slice: 2 }}
    +
    1
    {{ "Liquid" | slice: 2 }}

    Output

    -
    q
    +
    1
    q

    Input

    -
    {{ "Liquid" | slice: 2, 5 }}
    +
    1
    {{ "Liquid" | slice: 2, 5 }}

    Output

    -
    quid
    +
    1
    quid

    If the first argument is a negative number, the indices are counted from the end of the string:

    Input

    -
    {{ "Liquid" | slice: -3, 2 }}
    +
    1
    {{ "Liquid" | slice: -3, 2 }}

    Output

    -
    ui
    +
    1
    ui
    - +
    diff --git a/filters/slugify.html b/filters/slugify.html index 9d2bd353e..a193d5783 100644 --- a/filters/slugify.html +++ b/filters/slugify.html @@ -38,7 +38,7 @@ - +
    @@ -108,33 +108,33 @@
  • case: boolean. The default is false. The original case of slug will be retained if set to true.
  • Input

    -
    {{ "The _config.yml file" | slugify }}
    +
    1
    {{ "The _config.yml file" | slugify }}

    Output

    -
    the-config-yml-file
    +
    1
    the-config-yml-file

    Input

    -
    {{ "The _config.yml file" | slugify: "pretty" }}
    +
    1
    {{ "The _config.yml file" | slugify: "pretty" }}

    Output

    -
    the-_config.yml-file
    +
    1
    the-_config.yml-file

    Input

    -
    {{ "The _cönfig.yml file" | slugify: "ascii" }}
    +
    1
    {{ "The _cönfig.yml file" | slugify: "ascii" }}

    Output

    -
    the-c-nfig-yml-file
    +
    1
    the-c-nfig-yml-file

    Input

    -
    {{ "The cönfig.yml file" | slugify: "latin" }}
    +
    1
    {{ "The cönfig.yml file" | slugify: "latin" }}

    Output

    -
    the-config-yml-file
    +
    1
    the-config-yml-file

    Input

    -
    {{ "The cönfig.yml file" | slugify: "latin", true }}
    +
    1
    {{ "The cönfig.yml file" | slugify: "latin", true }}

    Output

    -
    The-config-yml-file
    +
    1
    The-config-yml-file
    - +
    diff --git a/filters/sort.html b/filters/sort.html index 722e14275..cfdb707d3 100644 --- a/filters/sort.html +++ b/filters/sort.html @@ -38,7 +38,7 @@ - +
    @@ -96,24 +96,17 @@

    Sorts items in an array in case-sensitive order.

    Input

    -
    {% assign my_array = "zebra, octopus, giraffe, Sally Snake" | split: ", " %}
    -
    -{{ my_array | sort | join: ", " }}
    +
    1
    2
    3
    {% assign my_array = "zebra, octopus, giraffe, Sally Snake" | split: ", " %}

    {{ my_array | sort | join: ", " }}

    Output

    -
    
    -
    -Sally Snake, giraffe, octopus, zebra
    +
    1
    2
    3


    Sally Snake, giraffe, octopus, zebra

    An optional argument specifies which property of the array’s items to use for sorting.

    -
    {% assign products_by_price = collection.products | sort: "price" %}
    -{% for product in products_by_price %}
    -  <h4>{{ product.title }}</h4>
    -{% endfor %}
    +
    1
    2
    3
    4
    {% assign products_by_price = collection.products | sort: "price" %}
    {% for product in products_by_price %}
    <h4>{{ product.title }}</h4>
    {% endfor %}
    - +
    diff --git a/filters/sort_natural.html b/filters/sort_natural.html index 3bb8597d6..7620afb80 100644 --- a/filters/sort_natural.html +++ b/filters/sort_natural.html @@ -38,7 +38,7 @@ - +
    @@ -96,24 +96,17 @@

    Sorts items in an array in case-insensitive order.

    Input

    -
    {% assign my_array = "zebra, octopus, giraffe, Sally Snake" | split: ", " %}
    -
    -{{ my_array | sort_natural | join: ", " }}
    +
    1
    2
    3
    {% assign my_array = "zebra, octopus, giraffe, Sally Snake" | split: ", " %}

    {{ my_array | sort_natural | join: ", " }}

    Output

    -
    
    -
    -giraffe, octopus, Sally Snake, zebra
    +
    1
    2
    3


    giraffe, octopus, Sally Snake, zebra

    An optional argument specifies which property of the array’s items to use for sorting.

    -
    {% assign products_by_company = collection.products | sort_natural: "company" %}
    -{% for product in products_by_company %}
    -  <h4>{{ product.title }}</h4>
    -{% endfor %}
    +
    1
    2
    3
    4
    {% assign products_by_company = collection.products | sort_natural: "company" %}
    {% for product in products_by_company %}
    <h4>{{ product.title }}</h4>
    {% endfor %}
    - +
    diff --git a/filters/split.html b/filters/split.html index 224f96047..ceeeed1a1 100644 --- a/filters/split.html +++ b/filters/split.html @@ -38,7 +38,7 @@ - +
    @@ -96,28 +96,14 @@

    Divides a string into an array using the argument as a separator. split is commonly used to convert comma-separated items from a string to an array.

    Input

    -
    {% assign beatles = "John, Paul, George, Ringo" | split: ", " %}
    -
    -{% for member in beatles %}
    -  {{ member }}
    -{% endfor %}
    +
    1
    2
    3
    4
    5
    {% assign beatles = "John, Paul, George, Ringo" | split: ", " %}

    {% for member in beatles %}
    {{ member }}
    {% endfor %}

    Output

    -
    
    -
    -
    -
    -John
    -
    -Paul
    -
    -George
    -
    -Ringo
    +
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11




    John

    Paul

    George

    Ringo
    - +
    diff --git a/filters/strip.html b/filters/strip.html index c6593c3ec..8b7e57f99 100644 --- a/filters/strip.html +++ b/filters/strip.html @@ -38,7 +38,7 @@ - +
    @@ -96,14 +96,14 @@

    Removes all whitespace (tabs, spaces, and newlines) from both the left and right sides of a string. It does not affect spaces between words.

    Input

    -
    BEGIN{{ "          So much room for activities!          " | strip }}END
    +
    1
    BEGIN{{ "          So much room for activities!          " | strip }}END

    Output

    -
    BEGINSo much room for activities!END
    +
    1
    BEGINSo much room for activities!END
    - +
    diff --git a/filters/strip_html.html b/filters/strip_html.html index c773bc04d..a807d9911 100644 --- a/filters/strip_html.html +++ b/filters/strip_html.html @@ -38,7 +38,7 @@ - +
    @@ -96,14 +96,14 @@

    Removes any HTML tags from a string.

    Input

    -
    {{ "Have <em>you</em> read <strong>Ulysses</strong>?" | strip_html }}
    +
    1
    {{ "Have <em>you</em> read <strong>Ulysses</strong>?" | strip_html }}

    Output

    -
    Have you read Ulysses?
    +
    1
    Have you read Ulysses?
    - +
    diff --git a/filters/strip_newlines.html b/filters/strip_newlines.html index 9d02e9ed8..4a06be770 100644 --- a/filters/strip_newlines.html +++ b/filters/strip_newlines.html @@ -38,7 +38,7 @@ - +
    @@ -96,20 +96,14 @@

    Removes any newline characters (line breaks) from a string.

    Input

    -
    {% capture string_with_newlines %}
    -Hello
    -there
    -{% endcapture %}
    -
    -{{ string_with_newlines | strip_newlines }}
    +
    1
    2
    3
    4
    5
    6
    {% capture string_with_newlines %}
    Hello
    there
    {% endcapture %}

    {{ string_with_newlines | strip_newlines }}

    Output

    -
    
    -Hellothere
    +
    1
    2

    Hellothere
    - +
    diff --git a/filters/sum.html b/filters/sum.html index e3077babb..775a73fb1 100644 --- a/filters/sum.html +++ b/filters/sum.html @@ -38,7 +38,7 @@ - +
    @@ -97,14 +97,14 @@

    Computes the sum of all the numbers in an array.
    An optional argument specifies which property of the array’s items to sum up.

    In this example, assume the object cart.products contains an array of all products in the cart of a website.
    Assume each cart product has a qty property that gives the count of that product instance in the cart.
    Using the sum filter we can calculate the total number of products in the cart.

    Input

    -
    The cart has {{ order.products | sum: "qty" }} products.
    +
    1
    The cart has {{ order.products | sum: "qty" }} products.

    Output

    -
    The cart has 7 products.
    +
    1
    The cart has 7 products.
    - +
    diff --git a/filters/times.html b/filters/times.html index f11a19168..ddd15f81f 100644 --- a/filters/times.html +++ b/filters/times.html @@ -38,7 +38,7 @@ - +
    @@ -96,26 +96,26 @@

    Multiplies a number by another number.

    Input

    -
    {{ 3 | times: 2 }}
    +
    1
    {{ 3 | times: 2 }}

    Output

    -
    6
    +
    1
    6

    Input

    -
    {{ 24 | times: 7 }}
    +
    1
    {{ 24 | times: 7 }}

    Output

    -
    168
    +
    1
    168

    Input

    -
    {{ 183.357 | times: 12 }}
    +
    1
    {{ 183.357 | times: 12 }}

    Output

    -
    2200.284
    +
    1
    2200.284
    - +
    diff --git a/filters/to_integer.html b/filters/to_integer.html index 28becfab7..a4b050159 100644 --- a/filters/to_integer.html +++ b/filters/to_integer.html @@ -38,7 +38,7 @@ - +
    @@ -96,14 +96,14 @@

    Convert values to number.

    Input

    -
    {{ "123" | to_integer | json }}
    +
    1
    {{ "123" | to_integer | json }}

    Output

    -
    123
    +
    1
    123
    - +
    diff --git a/filters/truncate.html b/filters/truncate.html index b4824310b..8afb03340 100644 --- a/filters/truncate.html +++ b/filters/truncate.html @@ -38,7 +38,7 @@ - +
    @@ -96,29 +96,29 @@

    Shortens a string down to the number of characters passed as an argument. If the specified number of characters is less than the length of the string, an ellipsis (…) is appended to the string and is included in the character count.

    Basic Usage

    Input

    -
    {{ "Ground control to Major Tom." | truncate: 20 }}
    +
    1
    {{ "Ground control to Major Tom." | truncate: 20 }}

    Output

    -
    Ground control to...
    +
    1
    Ground control to...

    Custom ellipsis

    truncate takes an optional second argument that specifies the sequence of characters to be appended to the truncated string. By default this is an ellipsis (…), but you can specify a different sequence.

    The length of the second argument counts against the number of characters specified by the first argument. For example, if you want to truncate a string to exactly 10 characters, and use a 3-character ellipsis, use 13 for the first argument of truncate, since the ellipsis counts as 3 characters.

    Input

    -
    {{ "Ground control to Major Tom." | truncate: 25, ", and so on" }}
    +
    1
    {{ "Ground control to Major Tom." | truncate: 25, ", and so on" }}

    Output

    -
    Ground control, and so on
    +
    1
    Ground control, and so on

    No ellipsis

    You can truncate to the exact number of characters specified by the first argument and avoid showing trailing characters by passing a blank string as the second argument:

    Input

    -
    {{ "Ground control to Major Tom." | truncate: 20, "" }}
    +
    1
    {{ "Ground control to Major Tom." | truncate: 20, "" }}

    Output

    -
    Ground control to Ma
    +
    1
    Ground control to Ma
    - +
    diff --git a/filters/truncatewords.html b/filters/truncatewords.html index c72819e0f..a9876fe62 100644 --- a/filters/truncatewords.html +++ b/filters/truncatewords.html @@ -38,7 +38,7 @@ - +
    @@ -96,28 +96,28 @@

    Shortens a string down to the number of words passed as an argument. If the specified number of words is less than the number of words in the string, an ellipsis (…) is appended to the string.

    Input

    -
    {{ "Ground control to Major Tom." | truncatewords: 3 }}
    +
    1
    {{ "Ground control to Major Tom." | truncatewords: 3 }}

    Output

    -
    Ground control to...
    +
    1
    Ground control to...

    Custom ellipsis

    truncatewords takes an optional second argument that specifies the sequence of characters to be appended to the truncated string. By default this is an ellipsis (…), but you can specify a different sequence.

    Input

    -
    {{ "Ground control to Major Tom." | truncatewords: 3, "--" }}
    +
    1
    {{ "Ground control to Major Tom." | truncatewords: 3, "--" }}

    Output

    -
    Ground control to--
    +
    1
    Ground control to--

    No ellipsis

    You can avoid showing trailing characters by passing a blank string as the second argument:

    Input

    -
    {{ "Ground control to Major Tom." | truncatewords: 3, "" }}
    +
    1
    {{ "Ground control to Major Tom." | truncatewords: 3, "" }}

    Output

    -
    Ground control to
    +
    1
    Ground control to
    - +
    diff --git a/filters/uniq.html b/filters/uniq.html index 5d4e546f5..b79fdfef7 100644 --- a/filters/uniq.html +++ b/filters/uniq.html @@ -38,7 +38,7 @@ - +
    @@ -96,15 +96,14 @@

    Removes any duplicate elements in an array.

    Input

    -
    {% assign my_array = "ants, bugs, bees, bugs, ants" | split: ", " %}
    -{{ my_array | uniq | join: ", " }}
    +
    1
    2
    {% assign my_array = "ants, bugs, bees, bugs, ants" | split: ", " %}
    {{ my_array | uniq | join: ", " }}

    Output

    -
    ants, bugs, bees
    +
    1
    ants, bugs, bees
    - +
    diff --git a/filters/unshift.html b/filters/unshift.html index ff4a7f6e6..500dae7bf 100644 --- a/filters/unshift.html +++ b/filters/unshift.html @@ -38,7 +38,7 @@ - +
    @@ -96,22 +96,14 @@

    Unshift an element to the front of the array. It’s NON-DESTRUCTIVE, i.e. it does not mutate the array, but rather make a copy and mutate that.

    Input

    -
    {% assign fruits = "oranges, peaches" | split: ", " %}
    -
    -{% assign everything = fruits | unshift: "apples" %}
    -
    -{% for item in everything %}
    -- {{ item }}
    -{% endfor %}
    +
    1
    2
    3
    4
    5
    6
    7
    {% assign fruits = "oranges, peaches" | split: ", " %}

    {% assign everything = fruits | unshift: "apples" %}

    {% for item in everything %}
    - {{ item }}
    {% endfor %}

    Output

    -
    - apples
    -- oranges
    -- peaches
    +
    1
    2
    3
    - apples
    - oranges
    - peaches
    - +
    diff --git a/filters/upcase.html b/filters/upcase.html index a8ad7b769..33271b23d 100644 --- a/filters/upcase.html +++ b/filters/upcase.html @@ -38,7 +38,7 @@ - +
    @@ -96,20 +96,20 @@

    Makes each character in a string uppercase. It has no effect on strings which are already all uppercase.

    Input

    -
    {{ "Parker Moore" | upcase }}
    +
    1
    {{ "Parker Moore" | upcase }}

    Output

    -
    PARKER MOORE
    +
    1
    PARKER MOORE

    Input

    -
    {{ "APPLE" | upcase }}
    +
    1
    {{ "APPLE" | upcase }}

    Output

    -
    APPLE
    +
    1
    APPLE
    - +
    diff --git a/filters/uri_escape.html b/filters/uri_escape.html index fa595a0a1..f902ed0e1 100644 --- a/filters/uri_escape.html +++ b/filters/uri_escape.html @@ -38,7 +38,7 @@ - +
    @@ -96,15 +96,15 @@

    Percent encodes any special characters in a URI. URI escape normally replaces a space with %20. Reserved characters will not be escaped.

    Input

    -
    {{ "https://example.com/?q=foo, \bar?" | uri_escape }}
    +
    1
    {{ "https://example.com/?q=foo, \bar?" | uri_escape }}

    Output

    -
    https://example.com/?q=foo,%20%5Cbar?
    +
    1
    https://example.com/?q=foo,%20%5Cbar?
    - +
    diff --git a/filters/url_decode.html b/filters/url_decode.html index 28e4e5387..fd727496c 100644 --- a/filters/url_decode.html +++ b/filters/url_decode.html @@ -38,7 +38,7 @@ - +
    @@ -96,14 +96,14 @@

    Decodes a string that has been encoded as a URL.

    Input

    -
    {{ "%27Stop%21%27+said+Fred" | url_decode }}
    +
    1
    {{ "%27Stop%21%27+said+Fred" | url_decode }}

    Output

    -
    'Stop!' said Fred
    +
    1
    'Stop!' said Fred
    - +
    diff --git a/filters/url_encode.html b/filters/url_encode.html index e549c4fe4..768e66bf9 100644 --- a/filters/url_encode.html +++ b/filters/url_encode.html @@ -38,7 +38,7 @@ - +
    @@ -96,20 +96,20 @@

    Converts any URL-unsafe characters in a string into percent-encoded characters.

    Input

    -
    {{ "john@liquid.com" | url_encode }}
    +
    1
    {{ "john@liquid.com" | url_encode }}

    Output

    -
    john%40liquid.com
    +
    1
    john%40liquid.com

    Input

    -
    {{ "Tetsuro Takara" | url_encode }}
    +
    1
    {{ "Tetsuro Takara" | url_encode }}

    Output

    -
    Tetsuro+Takara
    +
    1
    Tetsuro+Takara
    - +
    diff --git a/filters/where.html b/filters/where.html index 9e28a8af1..f52bcc7f1 100644 --- a/filters/where.html +++ b/filters/where.html @@ -38,7 +38,7 @@ - +
    @@ -97,83 +97,38 @@

    Creates an array including only the objects with a given property value, or any truthy value by default.

    In this example, assume you have a list of products and you want to show your kitchen products separately. Using where, you can create an array containing only the products that have a "type" of "kitchen".

    Input

    -
    All products:
    -{% for product in products %}
    -- {{ product.title }}
    -{% endfor %}
    -
    -{% assign kitchen_products = products | where: "type", "kitchen" %}
    -
    -Kitchen products:
    -{% for product in kitchen_products %}
    -- {{ product.title }}
    -{% endfor %}
    +
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    All products:
    {% for product in products %}
    - {{ product.title }}
    {% endfor %}

    {% assign kitchen_products = products | where: "type", "kitchen" %}

    Kitchen products:
    {% for product in kitchen_products %}
    - {{ product.title }}
    {% endfor %}

    Output

    -
    All products:
    -- Vacuum
    -- Spatula
    -- Television
    -- Garlic press
    -
    -Kitchen products:
    -- Spatula
    -- Garlic press
    +
    1
    2
    3
    4
    5
    6
    7
    8
    9
    All products:
    - Vacuum
    - Spatula
    - Television
    - Garlic press

    Kitchen products:
    - Spatula
    - Garlic press

    Say instead you have a list of products and you only want to show those that are available to buy. You can where with a property name but no target value to include all products with a truthy "available" value.

    Input

    -
    All products:
    -{% for product in products %}
    -- {{ product.title }}
    -{% endfor %}
    -
    -{% assign available_products = products | where: "available" %}
    -
    -Available products:
    -{% for product in available_products %}
    -- {{ product.title }}
    -{% endfor %}
    +
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    All products:
    {% for product in products %}
    - {{ product.title }}
    {% endfor %}

    {% assign available_products = products | where: "available" %}

    Available products:
    {% for product in available_products %}
    - {{ product.title }}
    {% endfor %}

    Output

    -
    All products:
    -- Coffee mug
    -- Limited edition sneakers
    -- Boring sneakers
    -
    -Available products:
    -- Coffee mug
    -- Boring sneakers
    +
    1
    2
    3
    4
    5
    6
    7
    8
    All products:
    - Coffee mug
    - Limited edition sneakers
    - Boring sneakers

    Available products:
    - Coffee mug
    - Boring sneakers

    The where filter can also be used to find a single object in an array when combined with the first filter. For example, say you want to show off the shirt in your new fall collection.

    Input

    -
    {% assign new_shirt = products | where: "type", "shirt" | first %}
    -
    -Featured product: {{ new_shirt.title }}
    +
    1
    2
    3
    {% assign new_shirt = products | where: "type", "shirt" | first %}

    Featured product: {{ new_shirt.title }}

    Output

    -
    Featured product: Hawaiian print sweater vest
    +
    1
    Featured product: Hawaiian print sweater vest

    Additionally, property can be any valid Liquid variable expression as used in output syntax, except that the scope of this expression is within each item. For the following products array:

    -
    const products = [
    -    { meta: { details: { class: 'A' } }, order: 1 },
    -    { meta: { details: { class: 'B' } }, order: 2 },
    -    { meta: { details: { class: 'B' } }, order: 3 }
    -]
    +
    1
    2
    3
    4
    5
    const products = [
    { meta: { details: { class: 'A' } }, order: 1 },
    { meta: { details: { class: 'B' } }, order: 2 },
    { meta: { details: { class: 'B' } }, order: 3 }
    ]

    Input

    -
    {% assign selected = products | where: 'meta.details["class"]', "B" %}
    -{% for item in selected -%}
    -- {{ item.order }}
    -{% endfor %}
    +
    1
    2
    3
    4
    {% assign selected = products | where: 'meta.details["class"]', "B" %}
    {% for item in selected -%}
    - {{ item.order }}
    {% endfor %}

    Output

    -
    - 2
    -- 3
    +
    1
    2
    - 2
    - 3
    - +
    diff --git a/filters/where_exp.html b/filters/where_exp.html index 8276cced8..dd94f2fb3 100644 --- a/filters/where_exp.html +++ b/filters/where_exp.html @@ -38,7 +38,7 @@ - +
    @@ -96,33 +96,15 @@

    Select all the objects in an array where the expression is true. In this example, assume you have a list of products and you want to show your kitchen products separately. Using where_exp, you can create an array containing only the products that have a "type" of "kitchen".

    Input

    -
    All products:
    -{% for product in products %}
    -- {{ product.title }}
    -{% endfor %}
    -
    -{% assign kitchen_products = products | where_exp: "item", "item.type == 'kitchen'" %}
    -
    -Kitchen products:
    -{% for product in kitchen_products %}
    -- {{ product.title }}
    -{% endfor %}
    +
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    All products:
    {% for product in products %}
    - {{ product.title }}
    {% endfor %}

    {% assign kitchen_products = products | where_exp: "item", "item.type == 'kitchen'" %}

    Kitchen products:
    {% for product in kitchen_products %}
    - {{ product.title }}
    {% endfor %}

    Output

    -
    All products:
    -- Vacuum
    -- Spatula
    -- Television
    -- Garlic press
    -
    -Kitchen products:
    -- Spatula
    -- Garlic press
    +
    1
    2
    3
    4
    5
    6
    7
    8
    9
    All products:
    - Vacuum
    - Spatula
    - Television
    - Garlic press

    Kitchen products:
    - Spatula
    - Garlic press
    - +
    diff --git a/filters/xml_escape.html b/filters/xml_escape.html index d28e1be73..a0c5923ae 100644 --- a/filters/xml_escape.html +++ b/filters/xml_escape.html @@ -38,7 +38,7 @@ - +
    @@ -96,14 +96,14 @@

    Escape some text for use in XML.

    Input

    -
    {{ "Have you read \'James & the Giant Peach\'?" | xml_escape }}
    +
    1
    {{ "Have you read \'James & the Giant Peach\'?" | xml_escape }}

    Output

    -
    Have you read &#39;James &amp; the Giant Peach&#39;?
    +
    1
    Have you read &#39;James &amp; the Giant Peach&#39;?
    - +
    diff --git a/index.html b/index.html index 6a52b16d8..e761e831a 100644 --- a/index.html +++ b/index.html @@ -38,7 +38,7 @@ - +
    diff --git a/playground.html b/playground.html index 911605997..9b5d2b777 100644 --- a/playground.html +++ b/playground.html @@ -32,7 +32,7 @@ - +
    diff --git a/sitemap.xml b/sitemap.xml index 7fec73a12..40ede370a 100644 --- a/sitemap.xml +++ b/sitemap.xml @@ -1,1704 +1,1704 @@ - - https://liquidjs.com/tutorials/changelog - - 2024-08-16T15:41:45.302Z - - - https://liquidjs.com/zh-cn/tutorials/changelog - 2024-08-16T15:41:45.302Z + 2024-08-16T16:56:19.238Z - https://liquidjs.com/zh-cn/tags/for + https://liquidjs.com/tutorials/changelog - 2024-08-16T15:41:05.842Z - - - - - https://liquidjs.com/zh-cn/tags/if - - 2024-08-16T15:41:05.842Z - - - - - https://liquidjs.com/zh-cn/tags/include - - 2024-08-16T15:41:05.842Z - - - - - https://liquidjs.com/zh-cn/tags/increment - - 2024-08-16T15:41:05.842Z - - - - - https://liquidjs.com/zh-cn/tags/inline_comment - - 2024-08-16T15:41:05.842Z - - - - - https://liquidjs.com/zh-cn/tags/layout - - 2024-08-16T15:41:05.842Z - - - - - https://liquidjs.com/zh-cn/tags/liquid - - 2024-08-16T15:41:05.842Z - - - - - https://liquidjs.com/zh-cn/tags/overview - - 2024-08-16T15:41:05.842Z - - - - - https://liquidjs.com/zh-cn/tags/raw - - 2024-08-16T15:41:05.842Z - - - - - https://liquidjs.com/zh-cn/tags/render - - 2024-08-16T15:41:05.842Z - - - - - https://liquidjs.com/zh-cn/tags/tablerow - - 2024-08-16T15:41:05.842Z - - - - - https://liquidjs.com/zh-cn/tags/unless - - 2024-08-16T15:41:05.842Z - - - - - https://liquidjs.com/zh-cn/tutorials/access-scope-in-filters - - 2024-08-16T15:41:05.842Z - - - - - https://liquidjs.com/zh-cn/tutorials/caching - - 2024-08-16T15:41:05.842Z - - - - - https://liquidjs.com/zh-cn/tutorials/contribution-guidelines - - 2024-08-16T15:41:05.842Z - - - - - https://liquidjs.com/zh-cn/tutorials/differences - - 2024-08-16T15:41:05.842Z - - - - - https://liquidjs.com/zh-cn/tutorials/dos - - 2024-08-16T15:41:05.842Z - - - - - https://liquidjs.com/zh-cn/tutorials/drops - - 2024-08-16T15:41:05.842Z - - - - - https://liquidjs.com/zh-cn/tutorials/escaping - - 2024-08-16T15:41:05.842Z - - - - - https://liquidjs.com/zh-cn/tutorials/intro-to-liquid - - 2024-08-16T15:41:05.842Z - - - - - https://liquidjs.com/zh-cn/tutorials/migrate-to-9 - - 2024-08-16T15:41:05.842Z - - - - - https://liquidjs.com/zh-cn/tutorials/operators - - 2024-08-16T15:41:05.842Z - - - - - https://liquidjs.com/zh-cn/tutorials/options - - 2024-08-16T15:41:05.842Z - - - - - https://liquidjs.com/zh-cn/tutorials/parse-parameters - - 2024-08-16T15:41:05.842Z - - - - - https://liquidjs.com/zh-cn/tutorials/partials-and-layouts - - 2024-08-16T15:41:05.842Z - - - - - https://liquidjs.com/zh-cn/tutorials/plugins - - 2024-08-16T15:41:05.842Z - - - - - https://liquidjs.com/zh-cn/tutorials/register-filters-tags - - 2024-08-16T15:41:05.842Z - - - - - https://liquidjs.com/zh-cn/tutorials/render-file - - 2024-08-16T15:41:05.842Z - - - - - https://liquidjs.com/zh-cn/tutorials/render-tag-content - - 2024-08-16T15:41:05.842Z - - - - - https://liquidjs.com/zh-cn/tutorials/setup - - 2024-08-16T15:41:05.842Z - - - - - https://liquidjs.com/zh-cn/tutorials/sync-and-async - - 2024-08-16T15:41:05.842Z - - - - - https://liquidjs.com/zh-cn/tutorials/truthy-and-falsy - - 2024-08-16T15:41:05.842Z - - - - - https://liquidjs.com/zh-cn/tutorials/use-in-expressjs - - 2024-08-16T15:41:05.842Z - - - - - https://liquidjs.com/zh-cn/tutorials/whitespace-control - - 2024-08-16T15:41:05.842Z - - - - - https://liquidjs.com/tutorials/migrate-to-9 - - 2024-08-16T15:41:05.838Z - - - - - https://liquidjs.com/tutorials/intro-to-liquid - - 2024-08-16T15:41:05.838Z - - - - - https://liquidjs.com/tutorials/options - - 2024-08-16T15:41:05.838Z - - - - - https://liquidjs.com/tutorials/operators - - 2024-08-16T15:41:05.838Z - - - - - https://liquidjs.com/tutorials/parse-parameters - - 2024-08-16T15:41:05.838Z - - - - - https://liquidjs.com/tutorials/partials-and-layouts - - 2024-08-16T15:41:05.838Z - - - - - https://liquidjs.com/tutorials/plugins - - 2024-08-16T15:41:05.838Z - - - - - https://liquidjs.com/tutorials/register-filters-tags - - 2024-08-16T15:41:05.838Z - - - - - https://liquidjs.com/tutorials/render-file - - 2024-08-16T15:41:05.838Z - - - - - https://liquidjs.com/tutorials/setup - - 2024-08-16T15:41:05.838Z - - - - - https://liquidjs.com/tutorials/render-tag-content - - 2024-08-16T15:41:05.838Z - - - - - https://liquidjs.com/tutorials/sync-and-async - - 2024-08-16T15:41:05.838Z - - - - - https://liquidjs.com/tutorials/truthy-and-falsy - - 2024-08-16T15:41:05.838Z - - - - - https://liquidjs.com/tutorials/use-in-expressjs - - 2024-08-16T15:41:05.838Z - - - - - https://liquidjs.com/tutorials/whitespace-control - - 2024-08-16T15:41:05.838Z + 2024-08-16T16:56:19.234Z https://liquidjs.com/zh-cn/ - 2024-08-16T15:41:05.838Z + 2024-08-16T16:55:41.725Z https://liquidjs.com/zh-cn/manifest.json - 2024-08-16T15:41:05.838Z + 2024-08-16T16:55:41.725Z https://liquidjs.com/zh-cn/playground - 2024-08-16T15:41:05.838Z - - - - - https://liquidjs.com/zh-cn/tags/assign - - 2024-08-16T15:41:05.838Z - - - - - https://liquidjs.com/zh-cn/tags/capture - - 2024-08-16T15:41:05.838Z - - - - - https://liquidjs.com/zh-cn/tags/case - - 2024-08-16T15:41:05.838Z - - - - - https://liquidjs.com/zh-cn/tags/comment - - 2024-08-16T15:41:05.838Z - - - - - https://liquidjs.com/zh-cn/tags/cycle - - 2024-08-16T15:41:05.838Z - - - - - https://liquidjs.com/zh-cn/tags/decrement - - 2024-08-16T15:41:05.838Z - - - - - https://liquidjs.com/zh-cn/tags/echo - - 2024-08-16T15:41:05.838Z - - - - - https://liquidjs.com/zh-cn/filters/abs - - 2024-08-16T15:41:05.838Z - - - - - https://liquidjs.com/zh-cn/filters/append - - 2024-08-16T15:41:05.838Z - - - - - https://liquidjs.com/zh-cn/filters/array_to_sentence_string - - 2024-08-16T15:41:05.838Z - - - - - https://liquidjs.com/zh-cn/filters/at_least - - 2024-08-16T15:41:05.838Z - - - - - https://liquidjs.com/zh-cn/filters/at_most - - 2024-08-16T15:41:05.838Z - - - - - https://liquidjs.com/zh-cn/filters/capitalize - - 2024-08-16T15:41:05.838Z - - - - - https://liquidjs.com/zh-cn/filters/ceil - - 2024-08-16T15:41:05.838Z - - - - - https://liquidjs.com/zh-cn/filters/cgi_escape - - 2024-08-16T15:41:05.838Z - - - - - https://liquidjs.com/zh-cn/filters/compact - - 2024-08-16T15:41:05.838Z - - - - - https://liquidjs.com/zh-cn/filters/concat - - 2024-08-16T15:41:05.838Z - - - - - https://liquidjs.com/zh-cn/filters/date - - 2024-08-16T15:41:05.838Z - - - - - https://liquidjs.com/zh-cn/filters/date_to_long_string - - 2024-08-16T15:41:05.838Z - - - - - https://liquidjs.com/zh-cn/filters/date_to_rfc822 - - 2024-08-16T15:41:05.838Z - - - - - https://liquidjs.com/zh-cn/filters/date_to_string - - 2024-08-16T15:41:05.838Z - - - - - https://liquidjs.com/zh-cn/filters/date_to_xmlschema - - 2024-08-16T15:41:05.838Z - - - - - https://liquidjs.com/zh-cn/filters/default - - 2024-08-16T15:41:05.838Z - - - - - https://liquidjs.com/zh-cn/filters/divided_by - - 2024-08-16T15:41:05.838Z - - - - - https://liquidjs.com/zh-cn/filters/downcase - - 2024-08-16T15:41:05.838Z - - - - - https://liquidjs.com/zh-cn/filters/escape - - 2024-08-16T15:41:05.838Z - - - - - https://liquidjs.com/zh-cn/filters/escape_once - - 2024-08-16T15:41:05.838Z - - - - - https://liquidjs.com/zh-cn/filters/find - - 2024-08-16T15:41:05.838Z - - - - - https://liquidjs.com/zh-cn/filters/find_exp - - 2024-08-16T15:41:05.838Z - - - - - https://liquidjs.com/zh-cn/filters/first - - 2024-08-16T15:41:05.838Z - - - - - https://liquidjs.com/zh-cn/filters/floor - - 2024-08-16T15:41:05.838Z - - - - - https://liquidjs.com/zh-cn/filters/group_by - - 2024-08-16T15:41:05.838Z - - - - - https://liquidjs.com/zh-cn/filters/group_by_exp - - 2024-08-16T15:41:05.838Z - - - - - https://liquidjs.com/zh-cn/filters/inspect - - 2024-08-16T15:41:05.838Z - - - - - https://liquidjs.com/zh-cn/filters/join - - 2024-08-16T15:41:05.838Z - - - - - https://liquidjs.com/zh-cn/filters/json - - 2024-08-16T15:41:05.838Z - - - - - https://liquidjs.com/zh-cn/filters/jsonify - - 2024-08-16T15:41:05.838Z - - - - - https://liquidjs.com/zh-cn/filters/last - - 2024-08-16T15:41:05.838Z - - - - - https://liquidjs.com/zh-cn/filters/lstrip - - 2024-08-16T15:41:05.838Z - - - - - https://liquidjs.com/zh-cn/filters/map - - 2024-08-16T15:41:05.838Z - - - - - https://liquidjs.com/zh-cn/filters/minus - - 2024-08-16T15:41:05.838Z - - - - - https://liquidjs.com/zh-cn/filters/modulo - - 2024-08-16T15:41:05.838Z - - - - - https://liquidjs.com/zh-cn/filters/newline_to_br - - 2024-08-16T15:41:05.838Z - - - - - https://liquidjs.com/zh-cn/filters/normalize_whitespace - - 2024-08-16T15:41:05.838Z - - - - - https://liquidjs.com/zh-cn/filters/number_of_words - - 2024-08-16T15:41:05.838Z + 2024-08-16T16:55:41.725Z https://liquidjs.com/zh-cn/filters/overview - 2024-08-16T15:41:05.838Z - - - - - https://liquidjs.com/zh-cn/filters/plus - - 2024-08-16T15:41:05.838Z + 2024-08-16T16:55:41.725Z https://liquidjs.com/zh-cn/filters/pop - 2024-08-16T15:41:05.838Z + 2024-08-16T16:55:41.725Z https://liquidjs.com/zh-cn/filters/prepend - 2024-08-16T15:41:05.838Z + 2024-08-16T16:55:41.725Z - https://liquidjs.com/zh-cn/filters/raw + https://liquidjs.com/zh-cn/filters/plus - 2024-08-16T15:41:05.838Z + 2024-08-16T16:55:41.725Z https://liquidjs.com/zh-cn/filters/push - 2024-08-16T15:41:05.838Z + 2024-08-16T16:55:41.725Z + + + + + https://liquidjs.com/zh-cn/filters/raw + + 2024-08-16T16:55:41.725Z https://liquidjs.com/zh-cn/filters/remove - 2024-08-16T15:41:05.838Z + 2024-08-16T16:55:41.725Z https://liquidjs.com/zh-cn/filters/remove_first - 2024-08-16T15:41:05.838Z + 2024-08-16T16:55:41.725Z https://liquidjs.com/zh-cn/filters/remove_last - 2024-08-16T15:41:05.838Z + 2024-08-16T16:55:41.725Z https://liquidjs.com/zh-cn/filters/replace - 2024-08-16T15:41:05.838Z - - - - - https://liquidjs.com/zh-cn/filters/replace_first - - 2024-08-16T15:41:05.838Z + 2024-08-16T16:55:41.725Z https://liquidjs.com/zh-cn/filters/replace_last - 2024-08-16T15:41:05.838Z + 2024-08-16T16:55:41.725Z + + + + + https://liquidjs.com/zh-cn/filters/replace_first + + 2024-08-16T16:55:41.725Z https://liquidjs.com/zh-cn/filters/reverse - 2024-08-16T15:41:05.838Z + 2024-08-16T16:55:41.725Z https://liquidjs.com/zh-cn/filters/round - 2024-08-16T15:41:05.838Z + 2024-08-16T16:55:41.725Z https://liquidjs.com/zh-cn/filters/rstrip - 2024-08-16T15:41:05.838Z + 2024-08-16T16:55:41.725Z https://liquidjs.com/zh-cn/filters/shift - 2024-08-16T15:41:05.838Z + 2024-08-16T16:55:41.725Z https://liquidjs.com/zh-cn/filters/size - 2024-08-16T15:41:05.838Z + 2024-08-16T16:55:41.725Z https://liquidjs.com/zh-cn/filters/slice - 2024-08-16T15:41:05.838Z + 2024-08-16T16:55:41.725Z https://liquidjs.com/zh-cn/filters/slugify - 2024-08-16T15:41:05.838Z + 2024-08-16T16:55:41.725Z https://liquidjs.com/zh-cn/filters/sort - 2024-08-16T15:41:05.838Z + 2024-08-16T16:55:41.725Z https://liquidjs.com/zh-cn/filters/sort_natural - 2024-08-16T15:41:05.838Z + 2024-08-16T16:55:41.725Z https://liquidjs.com/zh-cn/filters/split - 2024-08-16T15:41:05.838Z + 2024-08-16T16:55:41.725Z https://liquidjs.com/zh-cn/filters/strip - 2024-08-16T15:41:05.838Z + 2024-08-16T16:55:41.725Z https://liquidjs.com/zh-cn/filters/strip_html - 2024-08-16T15:41:05.838Z + 2024-08-16T16:55:41.725Z https://liquidjs.com/zh-cn/filters/strip_newlines - 2024-08-16T15:41:05.838Z + 2024-08-16T16:55:41.725Z https://liquidjs.com/zh-cn/filters/times - 2024-08-16T15:41:05.838Z + 2024-08-16T16:55:41.725Z https://liquidjs.com/zh-cn/filters/to_integer - 2024-08-16T15:41:05.838Z + 2024-08-16T16:55:41.725Z https://liquidjs.com/zh-cn/filters/truncate - 2024-08-16T15:41:05.838Z + 2024-08-16T16:55:41.725Z https://liquidjs.com/zh-cn/filters/truncatewords - 2024-08-16T15:41:05.838Z - - - - - https://liquidjs.com/zh-cn/filters/uniq - - 2024-08-16T15:41:05.838Z + 2024-08-16T16:55:41.725Z https://liquidjs.com/zh-cn/filters/unshift - 2024-08-16T15:41:05.838Z + 2024-08-16T16:55:41.725Z https://liquidjs.com/zh-cn/filters/upcase - 2024-08-16T15:41:05.838Z + 2024-08-16T16:55:41.725Z + + + + + https://liquidjs.com/zh-cn/filters/uniq + + 2024-08-16T16:55:41.725Z https://liquidjs.com/zh-cn/filters/uri_escape - 2024-08-16T15:41:05.838Z + 2024-08-16T16:55:41.725Z https://liquidjs.com/zh-cn/filters/url_decode - 2024-08-16T15:41:05.838Z + 2024-08-16T16:55:41.725Z https://liquidjs.com/zh-cn/filters/url_encode - 2024-08-16T15:41:05.838Z + 2024-08-16T16:55:41.725Z https://liquidjs.com/zh-cn/filters/where - 2024-08-16T15:41:05.838Z + 2024-08-16T16:55:41.725Z https://liquidjs.com/zh-cn/filters/where_exp - 2024-08-16T15:41:05.838Z + 2024-08-16T16:55:41.725Z https://liquidjs.com/zh-cn/filters/xml_escape - 2024-08-16T15:41:05.838Z + 2024-08-16T16:55:41.725Z - https://liquidjs.com/ + https://liquidjs.com/zh-cn/tags/assign - 2024-08-16T15:41:05.834Z + 2024-08-16T16:55:41.725Z - https://liquidjs.com/manifest.json + https://liquidjs.com/zh-cn/tags/capture - 2024-08-16T15:41:05.834Z + 2024-08-16T16:55:41.725Z - https://liquidjs.com/playground + https://liquidjs.com/zh-cn/tags/case - 2024-08-16T15:41:05.834Z + 2024-08-16T16:55:41.725Z - https://liquidjs.com/filters/strip + https://liquidjs.com/zh-cn/tags/comment - 2024-08-16T15:41:05.834Z + 2024-08-16T16:55:41.725Z - https://liquidjs.com/filters/strip_html + https://liquidjs.com/zh-cn/tags/cycle - 2024-08-16T15:41:05.834Z + 2024-08-16T16:55:41.725Z - https://liquidjs.com/filters/strip_newlines + https://liquidjs.com/zh-cn/tags/decrement - 2024-08-16T15:41:05.834Z + 2024-08-16T16:55:41.725Z - https://liquidjs.com/filters/sum + https://liquidjs.com/zh-cn/tags/echo - 2024-08-16T15:41:05.834Z + 2024-08-16T16:55:41.725Z - https://liquidjs.com/filters/to_integer + https://liquidjs.com/zh-cn/tags/for - 2024-08-16T15:41:05.834Z + 2024-08-16T16:55:41.725Z - https://liquidjs.com/filters/times + https://liquidjs.com/zh-cn/tags/if - 2024-08-16T15:41:05.834Z + 2024-08-16T16:55:41.725Z - https://liquidjs.com/filters/truncate + https://liquidjs.com/zh-cn/tags/include - 2024-08-16T15:41:05.834Z + 2024-08-16T16:55:41.725Z - https://liquidjs.com/filters/truncatewords + https://liquidjs.com/zh-cn/tags/increment - 2024-08-16T15:41:05.834Z + 2024-08-16T16:55:41.725Z - https://liquidjs.com/filters/uniq + https://liquidjs.com/zh-cn/tags/inline_comment - 2024-08-16T15:41:05.834Z + 2024-08-16T16:55:41.725Z - https://liquidjs.com/filters/unshift + https://liquidjs.com/zh-cn/tags/layout - 2024-08-16T15:41:05.834Z + 2024-08-16T16:55:41.725Z - https://liquidjs.com/filters/upcase + https://liquidjs.com/zh-cn/tags/liquid - 2024-08-16T15:41:05.834Z + 2024-08-16T16:55:41.725Z - https://liquidjs.com/filters/uri_escape + https://liquidjs.com/zh-cn/tags/overview - 2024-08-16T15:41:05.834Z + 2024-08-16T16:55:41.725Z - https://liquidjs.com/filters/url_decode + https://liquidjs.com/zh-cn/tags/raw - 2024-08-16T15:41:05.834Z + 2024-08-16T16:55:41.725Z - https://liquidjs.com/filters/url_encode + https://liquidjs.com/zh-cn/tags/render - 2024-08-16T15:41:05.834Z + 2024-08-16T16:55:41.725Z - https://liquidjs.com/filters/where + https://liquidjs.com/zh-cn/tags/tablerow - 2024-08-16T15:41:05.834Z + 2024-08-16T16:55:41.725Z - https://liquidjs.com/filters/where_exp + https://liquidjs.com/zh-cn/tags/unless - 2024-08-16T15:41:05.834Z + 2024-08-16T16:55:41.725Z - https://liquidjs.com/filters/xml_escape + https://liquidjs.com/zh-cn/tutorials/access-scope-in-filters - 2024-08-16T15:41:05.834Z + 2024-08-16T16:55:41.725Z + + + + + https://liquidjs.com/zh-cn/tutorials/caching + + 2024-08-16T16:55:41.725Z + + + + + https://liquidjs.com/zh-cn/tutorials/contribution-guidelines + + 2024-08-16T16:55:41.725Z + + + + + https://liquidjs.com/zh-cn/tutorials/differences + + 2024-08-16T16:55:41.725Z + + + + + https://liquidjs.com/zh-cn/tutorials/dos + + 2024-08-16T16:55:41.725Z + + + + + https://liquidjs.com/zh-cn/tutorials/drops + + 2024-08-16T16:55:41.725Z + + + + + https://liquidjs.com/zh-cn/tutorials/escaping + + 2024-08-16T16:55:41.725Z + + + + + https://liquidjs.com/zh-cn/tutorials/intro-to-liquid + + 2024-08-16T16:55:41.725Z + + + + + https://liquidjs.com/zh-cn/tutorials/migrate-to-9 + + 2024-08-16T16:55:41.725Z + + + + + https://liquidjs.com/zh-cn/tutorials/operators + + 2024-08-16T16:55:41.725Z + + + + + https://liquidjs.com/zh-cn/tutorials/options + + 2024-08-16T16:55:41.725Z + + + + + https://liquidjs.com/zh-cn/tutorials/parse-parameters + + 2024-08-16T16:55:41.725Z + + + + + https://liquidjs.com/zh-cn/tutorials/partials-and-layouts + + 2024-08-16T16:55:41.725Z + + + + + https://liquidjs.com/zh-cn/tutorials/plugins + + 2024-08-16T16:55:41.725Z + + + + + https://liquidjs.com/zh-cn/tutorials/register-filters-tags + + 2024-08-16T16:55:41.725Z + + + + + https://liquidjs.com/zh-cn/tutorials/render-file + + 2024-08-16T16:55:41.725Z + + + + + https://liquidjs.com/zh-cn/tutorials/render-tag-content + + 2024-08-16T16:55:41.725Z + + + + + https://liquidjs.com/zh-cn/tutorials/setup + + 2024-08-16T16:55:41.725Z + + + + + https://liquidjs.com/zh-cn/tutorials/sync-and-async + + 2024-08-16T16:55:41.725Z + + + + + https://liquidjs.com/zh-cn/tutorials/truthy-and-falsy + + 2024-08-16T16:55:41.725Z + + + + + https://liquidjs.com/zh-cn/tutorials/use-in-expressjs + + 2024-08-16T16:55:41.725Z + + + + + https://liquidjs.com/zh-cn/tutorials/whitespace-control + + 2024-08-16T16:55:41.725Z https://liquidjs.com/tags/assign - 2024-08-16T15:41:05.834Z - - - - - https://liquidjs.com/tags/case - - 2024-08-16T15:41:05.834Z - - - - - https://liquidjs.com/tags/comment - - 2024-08-16T15:41:05.834Z + 2024-08-16T16:55:41.721Z https://liquidjs.com/tags/capture - 2024-08-16T15:41:05.834Z + 2024-08-16T16:55:41.721Z + + + + + https://liquidjs.com/tags/case + + 2024-08-16T16:55:41.721Z + + + + + https://liquidjs.com/tags/comment + + 2024-08-16T16:55:41.721Z https://liquidjs.com/tags/cycle - 2024-08-16T15:41:05.834Z + 2024-08-16T16:55:41.721Z https://liquidjs.com/tags/decrement - 2024-08-16T15:41:05.834Z + 2024-08-16T16:55:41.721Z https://liquidjs.com/tags/echo - 2024-08-16T15:41:05.834Z + 2024-08-16T16:55:41.721Z https://liquidjs.com/tags/for - 2024-08-16T15:41:05.834Z + 2024-08-16T16:55:41.721Z https://liquidjs.com/tags/if - 2024-08-16T15:41:05.834Z + 2024-08-16T16:55:41.721Z https://liquidjs.com/tags/include - 2024-08-16T15:41:05.834Z + 2024-08-16T16:55:41.721Z https://liquidjs.com/tags/increment - 2024-08-16T15:41:05.834Z + 2024-08-16T16:55:41.721Z https://liquidjs.com/tags/inline_comment - 2024-08-16T15:41:05.834Z + 2024-08-16T16:55:41.721Z https://liquidjs.com/tags/layout - 2024-08-16T15:41:05.834Z - - - - - https://liquidjs.com/tags/liquid - - 2024-08-16T15:41:05.834Z - - - - - https://liquidjs.com/tags/raw - - 2024-08-16T15:41:05.834Z + 2024-08-16T16:55:41.721Z https://liquidjs.com/tags/overview - 2024-08-16T15:41:05.834Z + 2024-08-16T16:55:41.721Z + + + + + https://liquidjs.com/tags/liquid + + 2024-08-16T16:55:41.721Z + + + + + https://liquidjs.com/tags/raw + + 2024-08-16T16:55:41.721Z https://liquidjs.com/tags/render - 2024-08-16T15:41:05.834Z + 2024-08-16T16:55:41.721Z https://liquidjs.com/tags/tablerow - 2024-08-16T15:41:05.834Z + 2024-08-16T16:55:41.721Z https://liquidjs.com/tags/unless - 2024-08-16T15:41:05.834Z - - - - - https://liquidjs.com/tutorials/access-scope-in-filters - - 2024-08-16T15:41:05.834Z + 2024-08-16T16:55:41.721Z https://liquidjs.com/tutorials/caching - 2024-08-16T15:41:05.834Z + 2024-08-16T16:55:41.721Z + + + + + https://liquidjs.com/tutorials/access-scope-in-filters + + 2024-08-16T16:55:41.721Z https://liquidjs.com/tutorials/contribution-guidelines - 2024-08-16T15:41:05.834Z + 2024-08-16T16:55:41.721Z https://liquidjs.com/tutorials/differences - 2024-08-16T15:41:05.834Z + 2024-08-16T16:55:41.721Z https://liquidjs.com/tutorials/dos - 2024-08-16T15:41:05.834Z + 2024-08-16T16:55:41.721Z https://liquidjs.com/tutorials/drops - 2024-08-16T15:41:05.834Z + 2024-08-16T16:55:41.721Z https://liquidjs.com/tutorials/escaping - 2024-08-16T15:41:05.834Z + 2024-08-16T16:55:41.721Z - https://liquidjs.com/filters/abs + https://liquidjs.com/tutorials/intro-to-liquid - 2024-08-16T15:41:05.830Z + 2024-08-16T16:55:41.721Z - https://liquidjs.com/filters/append + https://liquidjs.com/tutorials/migrate-to-9 - 2024-08-16T15:41:05.830Z + 2024-08-16T16:55:41.721Z - https://liquidjs.com/filters/array_to_sentence_string + https://liquidjs.com/tutorials/operators - 2024-08-16T15:41:05.830Z + 2024-08-16T16:55:41.721Z - https://liquidjs.com/filters/at_least + https://liquidjs.com/tutorials/options - 2024-08-16T15:41:05.830Z + 2024-08-16T16:55:41.721Z - https://liquidjs.com/filters/at_most + https://liquidjs.com/tutorials/parse-parameters - 2024-08-16T15:41:05.830Z + 2024-08-16T16:55:41.721Z - https://liquidjs.com/filters/capitalize + https://liquidjs.com/tutorials/partials-and-layouts - 2024-08-16T15:41:05.830Z + 2024-08-16T16:55:41.721Z - https://liquidjs.com/filters/cgi_escape + https://liquidjs.com/tutorials/plugins - 2024-08-16T15:41:05.830Z + 2024-08-16T16:55:41.721Z - https://liquidjs.com/filters/ceil + https://liquidjs.com/tutorials/register-filters-tags - 2024-08-16T15:41:05.830Z + 2024-08-16T16:55:41.721Z - https://liquidjs.com/filters/compact + https://liquidjs.com/tutorials/render-file - 2024-08-16T15:41:05.830Z + 2024-08-16T16:55:41.721Z - https://liquidjs.com/filters/concat + https://liquidjs.com/tutorials/render-tag-content - 2024-08-16T15:41:05.830Z + 2024-08-16T16:55:41.721Z + + + + + https://liquidjs.com/tutorials/setup + + 2024-08-16T16:55:41.721Z + + + + + https://liquidjs.com/tutorials/sync-and-async + + 2024-08-16T16:55:41.721Z + + + + + https://liquidjs.com/tutorials/use-in-expressjs + + 2024-08-16T16:55:41.721Z + + + + + https://liquidjs.com/tutorials/truthy-and-falsy + + 2024-08-16T16:55:41.721Z + + + + + https://liquidjs.com/tutorials/whitespace-control + + 2024-08-16T16:55:41.721Z + + + + + https://liquidjs.com/zh-cn/filters/abs + + 2024-08-16T16:55:41.721Z + + + + + https://liquidjs.com/zh-cn/filters/append + + 2024-08-16T16:55:41.721Z + + + + + https://liquidjs.com/zh-cn/filters/array_to_sentence_string + + 2024-08-16T16:55:41.721Z + + + + + https://liquidjs.com/zh-cn/filters/at_least + + 2024-08-16T16:55:41.721Z + + + + + https://liquidjs.com/zh-cn/filters/at_most + + 2024-08-16T16:55:41.721Z + + + + + https://liquidjs.com/zh-cn/filters/capitalize + + 2024-08-16T16:55:41.721Z + + + + + https://liquidjs.com/zh-cn/filters/ceil + + 2024-08-16T16:55:41.721Z + + + + + https://liquidjs.com/zh-cn/filters/cgi_escape + + 2024-08-16T16:55:41.721Z + + + + + https://liquidjs.com/zh-cn/filters/concat + + 2024-08-16T16:55:41.721Z + + + + + https://liquidjs.com/zh-cn/filters/compact + + 2024-08-16T16:55:41.721Z + + + + + https://liquidjs.com/zh-cn/filters/date + + 2024-08-16T16:55:41.721Z + + + + + https://liquidjs.com/zh-cn/filters/date_to_long_string + + 2024-08-16T16:55:41.721Z + + + + + https://liquidjs.com/zh-cn/filters/date_to_rfc822 + + 2024-08-16T16:55:41.721Z + + + + + https://liquidjs.com/zh-cn/filters/date_to_string + + 2024-08-16T16:55:41.721Z + + + + + https://liquidjs.com/zh-cn/filters/date_to_xmlschema + + 2024-08-16T16:55:41.721Z + + + + + https://liquidjs.com/zh-cn/filters/default + + 2024-08-16T16:55:41.721Z + + + + + https://liquidjs.com/zh-cn/filters/divided_by + + 2024-08-16T16:55:41.721Z + + + + + https://liquidjs.com/zh-cn/filters/downcase + + 2024-08-16T16:55:41.721Z + + + + + https://liquidjs.com/zh-cn/filters/escape + + 2024-08-16T16:55:41.721Z + + + + + https://liquidjs.com/zh-cn/filters/escape_once + + 2024-08-16T16:55:41.721Z + + + + + https://liquidjs.com/zh-cn/filters/find + + 2024-08-16T16:55:41.721Z + + + + + https://liquidjs.com/zh-cn/filters/find_exp + + 2024-08-16T16:55:41.721Z + + + + + https://liquidjs.com/zh-cn/filters/first + + 2024-08-16T16:55:41.721Z + + + + + https://liquidjs.com/zh-cn/filters/floor + + 2024-08-16T16:55:41.721Z + + + + + https://liquidjs.com/zh-cn/filters/group_by + + 2024-08-16T16:55:41.721Z + + + + + https://liquidjs.com/zh-cn/filters/inspect + + 2024-08-16T16:55:41.721Z + + + + + https://liquidjs.com/zh-cn/filters/join + + 2024-08-16T16:55:41.721Z + + + + + https://liquidjs.com/zh-cn/filters/group_by_exp + + 2024-08-16T16:55:41.721Z + + + + + https://liquidjs.com/zh-cn/filters/json + + 2024-08-16T16:55:41.721Z + + + + + https://liquidjs.com/zh-cn/filters/jsonify + + 2024-08-16T16:55:41.721Z + + + + + https://liquidjs.com/zh-cn/filters/last + + 2024-08-16T16:55:41.721Z + + + + + https://liquidjs.com/zh-cn/filters/lstrip + + 2024-08-16T16:55:41.721Z + + + + + https://liquidjs.com/zh-cn/filters/map + + 2024-08-16T16:55:41.721Z + + + + + https://liquidjs.com/zh-cn/filters/minus + + 2024-08-16T16:55:41.721Z + + + + + https://liquidjs.com/zh-cn/filters/modulo + + 2024-08-16T16:55:41.721Z + + + + + https://liquidjs.com/zh-cn/filters/newline_to_br + + 2024-08-16T16:55:41.721Z + + + + + https://liquidjs.com/zh-cn/filters/normalize_whitespace + + 2024-08-16T16:55:41.721Z + + + + + https://liquidjs.com/zh-cn/filters/number_of_words + + 2024-08-16T16:55:41.721Z + + + + + https://liquidjs.com/ + + 2024-08-16T16:55:41.717Z + + + + + https://liquidjs.com/manifest.json + + 2024-08-16T16:55:41.717Z + + + + + https://liquidjs.com/playground + + 2024-08-16T16:55:41.717Z https://liquidjs.com/filters/date - 2024-08-16T15:41:05.830Z + 2024-08-16T16:55:41.717Z https://liquidjs.com/filters/date_to_long_string - 2024-08-16T15:41:05.830Z + 2024-08-16T16:55:41.717Z https://liquidjs.com/filters/date_to_rfc822 - 2024-08-16T15:41:05.830Z + 2024-08-16T16:55:41.717Z https://liquidjs.com/filters/date_to_string - 2024-08-16T15:41:05.830Z + 2024-08-16T16:55:41.717Z https://liquidjs.com/filters/date_to_xmlschema - 2024-08-16T15:41:05.830Z + 2024-08-16T16:55:41.717Z https://liquidjs.com/filters/default - 2024-08-16T15:41:05.830Z + 2024-08-16T16:55:41.717Z https://liquidjs.com/filters/divided_by - 2024-08-16T15:41:05.830Z + 2024-08-16T16:55:41.717Z https://liquidjs.com/filters/downcase - 2024-08-16T15:41:05.830Z + 2024-08-16T16:55:41.717Z https://liquidjs.com/filters/escape - 2024-08-16T15:41:05.830Z + 2024-08-16T16:55:41.717Z https://liquidjs.com/filters/escape_once - 2024-08-16T15:41:05.830Z + 2024-08-16T16:55:41.717Z https://liquidjs.com/filters/find - 2024-08-16T15:41:05.830Z + 2024-08-16T16:55:41.717Z https://liquidjs.com/filters/find_exp - 2024-08-16T15:41:05.830Z + 2024-08-16T16:55:41.717Z https://liquidjs.com/filters/first - 2024-08-16T15:41:05.830Z + 2024-08-16T16:55:41.717Z https://liquidjs.com/filters/floor - 2024-08-16T15:41:05.830Z + 2024-08-16T16:55:41.717Z https://liquidjs.com/filters/group_by - 2024-08-16T15:41:05.830Z + 2024-08-16T16:55:41.717Z https://liquidjs.com/filters/group_by_exp - 2024-08-16T15:41:05.830Z + 2024-08-16T16:55:41.717Z https://liquidjs.com/filters/inspect - 2024-08-16T15:41:05.830Z + 2024-08-16T16:55:41.717Z https://liquidjs.com/filters/join - 2024-08-16T15:41:05.830Z + 2024-08-16T16:55:41.717Z https://liquidjs.com/filters/json - 2024-08-16T15:41:05.830Z + 2024-08-16T16:55:41.717Z https://liquidjs.com/filters/jsonify - 2024-08-16T15:41:05.830Z + 2024-08-16T16:55:41.717Z https://liquidjs.com/filters/last - 2024-08-16T15:41:05.830Z + 2024-08-16T16:55:41.717Z https://liquidjs.com/filters/lstrip - 2024-08-16T15:41:05.830Z + 2024-08-16T16:55:41.717Z https://liquidjs.com/filters/map - 2024-08-16T15:41:05.830Z + 2024-08-16T16:55:41.717Z https://liquidjs.com/filters/minus - 2024-08-16T15:41:05.830Z + 2024-08-16T16:55:41.717Z https://liquidjs.com/filters/modulo - 2024-08-16T15:41:05.830Z + 2024-08-16T16:55:41.717Z https://liquidjs.com/filters/newline_to_br - 2024-08-16T15:41:05.830Z + 2024-08-16T16:55:41.717Z https://liquidjs.com/filters/normalize_whitespace - 2024-08-16T15:41:05.830Z + 2024-08-16T16:55:41.717Z https://liquidjs.com/filters/number_of_words - 2024-08-16T15:41:05.830Z + 2024-08-16T16:55:41.717Z https://liquidjs.com/filters/overview - 2024-08-16T15:41:05.830Z + 2024-08-16T16:55:41.717Z https://liquidjs.com/filters/plus - 2024-08-16T15:41:05.830Z + 2024-08-16T16:55:41.717Z https://liquidjs.com/filters/pop - 2024-08-16T15:41:05.830Z + 2024-08-16T16:55:41.717Z https://liquidjs.com/filters/prepend - 2024-08-16T15:41:05.830Z - - - - - https://liquidjs.com/filters/push - - 2024-08-16T15:41:05.830Z + 2024-08-16T16:55:41.717Z https://liquidjs.com/filters/raw - 2024-08-16T15:41:05.830Z + 2024-08-16T16:55:41.717Z + + + + + https://liquidjs.com/filters/push + + 2024-08-16T16:55:41.717Z https://liquidjs.com/filters/remove - 2024-08-16T15:41:05.830Z + 2024-08-16T16:55:41.717Z https://liquidjs.com/filters/remove_first - 2024-08-16T15:41:05.830Z + 2024-08-16T16:55:41.717Z https://liquidjs.com/filters/remove_last - 2024-08-16T15:41:05.830Z + 2024-08-16T16:55:41.717Z https://liquidjs.com/filters/replace - 2024-08-16T15:41:05.830Z + 2024-08-16T16:55:41.717Z https://liquidjs.com/filters/replace_first - 2024-08-16T15:41:05.830Z + 2024-08-16T16:55:41.717Z https://liquidjs.com/filters/replace_last - 2024-08-16T15:41:05.830Z + 2024-08-16T16:55:41.717Z https://liquidjs.com/filters/reverse - 2024-08-16T15:41:05.830Z + 2024-08-16T16:55:41.717Z https://liquidjs.com/filters/round - 2024-08-16T15:41:05.830Z + 2024-08-16T16:55:41.717Z https://liquidjs.com/filters/rstrip - 2024-08-16T15:41:05.830Z + 2024-08-16T16:55:41.717Z https://liquidjs.com/filters/shift - 2024-08-16T15:41:05.830Z + 2024-08-16T16:55:41.717Z https://liquidjs.com/filters/size - 2024-08-16T15:41:05.830Z + 2024-08-16T16:55:41.717Z https://liquidjs.com/filters/slice - 2024-08-16T15:41:05.830Z + 2024-08-16T16:55:41.717Z https://liquidjs.com/filters/slugify - 2024-08-16T15:41:05.830Z + 2024-08-16T16:55:41.717Z https://liquidjs.com/filters/sort - 2024-08-16T15:41:05.830Z + 2024-08-16T16:55:41.717Z https://liquidjs.com/filters/sort_natural - 2024-08-16T15:41:05.830Z + 2024-08-16T16:55:41.717Z https://liquidjs.com/filters/split - 2024-08-16T15:41:05.830Z + 2024-08-16T16:55:41.717Z + + + + + https://liquidjs.com/filters/strip + + 2024-08-16T16:55:41.717Z + + + + + https://liquidjs.com/filters/strip_html + + 2024-08-16T16:55:41.717Z + + + + + https://liquidjs.com/filters/strip_newlines + + 2024-08-16T16:55:41.717Z + + + + + https://liquidjs.com/filters/sum + + 2024-08-16T16:55:41.717Z + + + + + https://liquidjs.com/filters/times + + 2024-08-16T16:55:41.717Z + + + + + https://liquidjs.com/filters/to_integer + + 2024-08-16T16:55:41.717Z + + + + + https://liquidjs.com/filters/truncate + + 2024-08-16T16:55:41.717Z + + + + + https://liquidjs.com/filters/truncatewords + + 2024-08-16T16:55:41.717Z + + + + + https://liquidjs.com/filters/uniq + + 2024-08-16T16:55:41.717Z + + + + + https://liquidjs.com/filters/unshift + + 2024-08-16T16:55:41.717Z + + + + + https://liquidjs.com/filters/upcase + + 2024-08-16T16:55:41.717Z + + + + + https://liquidjs.com/filters/uri_escape + + 2024-08-16T16:55:41.717Z + + + + + https://liquidjs.com/filters/url_decode + + 2024-08-16T16:55:41.717Z + + + + + https://liquidjs.com/filters/url_encode + + 2024-08-16T16:55:41.717Z + + + + + https://liquidjs.com/filters/where + + 2024-08-16T16:55:41.717Z + + + + + https://liquidjs.com/filters/where_exp + + 2024-08-16T16:55:41.717Z + + + + + https://liquidjs.com/filters/xml_escape + + 2024-08-16T16:55:41.717Z + + + + + https://liquidjs.com/filters/abs + + 2024-08-16T16:55:41.713Z + + + + + https://liquidjs.com/filters/array_to_sentence_string + + 2024-08-16T16:55:41.713Z + + + + + https://liquidjs.com/filters/append + + 2024-08-16T16:55:41.713Z + + + + + https://liquidjs.com/filters/at_least + + 2024-08-16T16:55:41.713Z + + + + + https://liquidjs.com/filters/at_most + + 2024-08-16T16:55:41.713Z + + + + + https://liquidjs.com/filters/capitalize + + 2024-08-16T16:55:41.713Z + + + + + https://liquidjs.com/filters/ceil + + 2024-08-16T16:55:41.713Z + + + + + https://liquidjs.com/filters/cgi_escape + + 2024-08-16T16:55:41.713Z + + + + + https://liquidjs.com/filters/compact + + 2024-08-16T16:55:41.713Z + + + + + https://liquidjs.com/filters/concat + + 2024-08-16T16:55:41.713Z diff --git a/sw.js b/sw.js index 8b94f9105..f5b37b5b8 100644 --- a/sw.js +++ b/sw.js @@ -1,6 +1,6 @@ 'use strict' -const CACHE_NAME = '' +const CACHE_NAME = '{{site.time}}' const urlsToCache = [ '/', '/css/navy.css', diff --git a/tags/assign.html b/tags/assign.html index b47be5526..dc88b2356 100644 --- a/tags/assign.html +++ b/tags/assign.html @@ -38,7 +38,7 @@ - +
    @@ -96,25 +96,21 @@

    Creates a new variable.

    Input

    -
    {% assign my_variable = false %}
    -{% if my_variable != true %}
    -  This statement is valid.
    -{% endif %}
    +
    1
    2
    3
    4
    {% assign my_variable = false %}
    {% if my_variable != true %}
    This statement is valid.
    {% endif %}

    Output

    -
    This statement is valid.
    +
    1
    This statement is valid.

    Wrap a variable value in quotations " to save it as a string.

    Input

    -
    {% assign foo = "bar" %}
    -{{ foo }}
    +
    1
    2
    {% assign foo = "bar" %}
    {{ foo }}

    Output

    -
    bar
    +
    1
    bar
    - +
    diff --git a/tags/capture.html b/tags/capture.html index 62e45a00d..34c5b0786 100644 --- a/tags/capture.html +++ b/tags/capture.html @@ -38,7 +38,7 @@ - +
    @@ -96,29 +96,21 @@

    Captures the string inside of the opening and closing tags and assigns it to a variable. Variables created through capture are strings.

    Input

    -
    {% capture my_variable %}I am being captured.{% endcapture %}
    -{{ my_variable }}
    +
    1
    2
    {% capture my_variable %}I am being captured.{% endcapture %}
    {{ my_variable }}

    Output

    -
    I am being captured.
    +
    1
    I am being captured.

    Using capture, you can create complex strings using other variables created with assign:

    Input

    -
    {% assign favorite_food = "pizza" %}
    -{% assign age = 35 %}
    -
    -{% capture about_me %}
    -I am {{ age }} and my favorite food is {{ favorite_food }}.
    -{% endcapture %}
    -
    -{{ about_me }}
    +
    1
    2
    3
    4
    5
    6
    7
    8
    {% assign favorite_food = "pizza" %}
    {% assign age = 35 %}

    {% capture about_me %}
    I am {{ age }} and my favorite food is {{ favorite_food }}.
    {% endcapture %}

    {{ about_me }}

    Output

    -
    I am 35 and my favourite food is pizza.
    +
    1
    I am 35 and my favourite food is pizza.
    - +
    diff --git a/tags/case.html b/tags/case.html index 4bec4fc5a..c3ab7c137 100644 --- a/tags/case.html +++ b/tags/case.html @@ -38,7 +38,7 @@ - +
    @@ -96,22 +96,14 @@

    Creates a switch statement to compare a variable with different values. case initializes the switch statement, and when compares its values.

    Input

    -
    {% assign handle = "cake" %}
    -{% case handle %}
    -  {% when "cake" %}
    -     This is a cake
    -  {% when "cookie", "biscuit" %}
    -     This is a cookie
    -  {% else %}
    -     This is neither a cake nor a cookie
    -{% endcase %}
    +
    1
    2
    3
    4
    5
    6
    7
    8
    9
    {% assign handle = "cake" %}
    {% case handle %}
    {% when "cake" %}
    This is a cake
    {% when "cookie", "biscuit" %}
    This is a cookie
    {% else %}
    This is neither a cake nor a cookie
    {% endcase %}

    Output

    -
    This is a cake
    +
    1
    This is a cake
    - +
    diff --git a/tags/comment.html b/tags/comment.html index 55f775df3..903274e60 100644 --- a/tags/comment.html +++ b/tags/comment.html @@ -38,7 +38,7 @@ - +
    @@ -96,16 +96,14 @@

    Allows you to leave un-rendered code inside a Liquid template. Any text within the opening and closing comment blocks will not be printed, and any Liquid code within will not be executed.

    Input

    -
    Anything you put between {% comment %} and {% endcomment %} tags
    -is turned into a comment.
    +
    1
    2
    Anything you put between {% comment %} and {% endcomment %} tags
    is turned into a comment.

    Output

    -
    Anything you put between  tags
    -is turned into a comment.
    +
    1
    2
    Anything you put between  tags
    is turned into a comment.
    - +
    diff --git a/tags/cycle.html b/tags/cycle.html index e03208b74..4abba8016 100644 --- a/tags/cycle.html +++ b/tags/cycle.html @@ -38,7 +38,7 @@ - +
    @@ -96,16 +96,10 @@

    Loops through a group of strings and prints them in the order that they were passed as arguments. Each time cycle is called, the next string argument is printed.

    Basic Usage

    Input

    -
    {% cycle "one", "two", "three" %}
    -{% cycle "one", "two", "three" %}
    -{% cycle "one", "two", "three" %}
    -{% cycle "one", "two", "three" %}
    +
    1
    2
    3
    4
    {% cycle "one", "two", "three" %}
    {% cycle "one", "two", "three" %}
    {% cycle "one", "two", "three" %}
    {% cycle "one", "two", "three" %}

    Output

    -
    one
    -two
    -three
    -one
    +
    1
    2
    3
    4
    one
    two
    three
    one

    Uses for cycle include:

      @@ -114,20 +108,14 @@ one

    Parameters

    cycle accepts a “cycle group” parameter in cases where you need multiple cycle blocks in one template. If no name is supplied for the cycle group, then it is assumed that multiple calls with the same parameters are one group.

    Input

    -
    {% cycle "first": "one", "two", "three" %}
    -{% cycle "second": "one", "two", "three" %}
    -{% cycle "second": "one", "two", "three" %}
    -{% cycle "first": "one", "two", "three" %}
    +
    1
    2
    3
    4
    {% cycle "first": "one", "two", "three" %}
    {% cycle "second": "one", "two", "three" %}
    {% cycle "second": "one", "two", "three" %}
    {% cycle "first": "one", "two", "three" %}

    Output

    -
    one
    -one
    -two
    -two
    +
    1
    2
    3
    4
    one
    one
    two
    two
    - +
    diff --git a/tags/decrement.html b/tags/decrement.html index 2cfde612d..962f43f0a 100644 --- a/tags/decrement.html +++ b/tags/decrement.html @@ -38,7 +38,7 @@ - +
    @@ -96,20 +96,16 @@

    Creates a new number variable, and decreases its value by one every time it is called. The first value is -1.

    Input

    -
    {% decrement variable %}
    -{% decrement variable %}
    -{% decrement variable %}
    +
    1
    2
    3
    {% decrement variable %}
    {% decrement variable %}
    {% decrement variable %}

    Output

    -
    -1
    --2
    --3
    +
    1
    2
    3
    -1
    -2
    -3

    Like increment, variables declared inside decrement are independent from variables created through assign or capture.

    - +
    diff --git a/tags/echo.html b/tags/echo.html index a45096635..fb5276200 100644 --- a/tags/echo.html +++ b/tags/echo.html @@ -38,7 +38,7 @@ - +
    @@ -96,15 +96,14 @@

    Outputs an expression in the rendered HTML. This is identical to wrapping an expression in {{` and `}}, but works inside liquid tags and supports filters.

    echo

    Input

    -
    {% assign username = 'Bob' %}
    -{% echo username | append: ", welcome to LiquidJS!" | capitalize %}
    +
    1
    2
    {% assign username = 'Bob' %}
    {% echo username | append: ", welcome to LiquidJS!" | capitalize %}

    Output

    -
    Bob, welcome to LiquidJS!
    +
    1
    Bob, welcome to LiquidJS!
    - +
    diff --git a/tags/for.html b/tags/for.html index 784669d8a..57e1b75d8 100644 --- a/tags/for.html +++ b/tags/for.html @@ -38,7 +38,7 @@ - +
    @@ -97,188 +97,115 @@

    Iteration tags run blocks of code repeatedly.

    Basic Usage

    for…in

    Repeatedly executes a block of code. For a full list of attributes available within a for loop, see forloop.

    Input

    -
    {% for product in collection.products %}
    -  {{ product.title }}
    -{% endfor %}
    +
    1
    2
    3
    {% for product in collection.products %}
    {{ product.title }}
    {% endfor %}

    Output

    -
    hat shirt pants
    +
    1
    hat shirt pants

    For loops can iterate over arrays, hashes, and ranges of integers.

    When iterating a hash, item[0] contains the key, and item[1] contains the value:

    Input

    -
    {% for item in hash %}
    -  * {{ item[0] }}: {{ item[1] }}
    -{% endfor %}
    +
    1
    2
    3
    {% for item in hash %}
    * {{ item[0] }}: {{ item[1] }}
    {% endfor %}

    Output

    -
    * key1: value1
    -* key2: value2
    +
    1
    2
    * key1: value1
    * key2: value2

    else

    Specifies a fallback case for a for loop which will run if the loop has zero length.

    Input

    -
    {% for product in collection.products %}
    -  {{ product.title }}
    -{% else %}
    -  The collection is empty.
    -{% endfor %}
    +
    1
    2
    3
    4
    5
    {% for product in collection.products %}
    {{ product.title }}
    {% else %}
    The collection is empty.
    {% endfor %}

    Output

    -
    The collection is empty.
    +
    1
    The collection is empty.

    break

    Causes the loop to stop iterating when it encounters the break tag.

    Input

    -
    {% for i in (1..5) %}
    -  {%- if i == 4 -%}
    -    {% break %}
    -  {%- else -%}
    -    {{ i }}
    -  {%- endif -%}
    -{% endfor %}
    +
    1
    2
    3
    4
    5
    6
    7
    {% for i in (1..5) %}
    {%- if i == 4 -%}
    {% break %}
    {%- else -%}
    {{ i }}
    {%- endif -%}
    {% endfor %}

    Output

    -
    123
    +
    1
    123

    continue

    Causes the loop to skip the current iteration when it encounters the continue tag.

    Input

    -
    {% for i in (1..5) %}
    -  {%- if i == 4 -%}
    -    {%- continue -%}
    -  {%- else -%}
    -    {{ i }}
    -  {%- endif -%}
    -{% endfor %}
    +
    1
    2
    3
    4
    5
    6
    7
    {% for i in (1..5) %}
    {%- if i == 4 -%}
    {%- continue -%}
    {%- else -%}
    {{ i }}
    {%- endif -%}
    {% endfor %}

    Output

    -
    1235
    +
    1
    1235

    forloop

    There’s a forloop object available inside for loops. It’s used to indicate the current state of for loop.

    The forloop.first, forloop.last and forloop.length property:

    Input

    -
    {% for i in (1..5) %}
    -  {%- if forloop.first == true -%} First
    -  {%- elsif forloop.last == true -%} Last
    -  {%- else -%} {{ forloop.length }}
    -  {%- endif %}
    -{% endfor -%}
    +
    1
    2
    3
    4
    5
    6
    {% for i in (1..5) %}
    {%- if forloop.first == true -%} First
    {%- elsif forloop.last == true -%} Last
    {%- else -%} {{ forloop.length }}
    {%- endif %}
    {% endfor -%}

    Output

    -
    First
    -5
    -5
    -5
    -Last
    +
    1
    2
    3
    4
    5
    First
    5
    5
    5
    Last

    The forloop.index, forloop.index0, forloop.rindex and forloop.rindex0 property:

    Input

    -
    index index0 rindex rindex0
    -{% for i in (1..5) %}
    -  {{- forloop.index }}     {{ forloop.index0 }}      {{ forloop.rindex }}      {{ forloop.rindex0 }}
    -{% endfor -%}
    +
    1
    2
    3
    4
    index index0 rindex rindex0
    {% for i in (1..5) %}
    {{- forloop.index }} {{ forloop.index0 }} {{ forloop.rindex }} {{ forloop.rindex0 }}
    {% endfor -%}

    Output

    -
    index index0 rindex rindex0
    -1     0      5      4
    -2     1      4      3
    -3     2      3      2
    -4     3      2      1
    -5     4      1      0
    +
    1
    2
    3
    4
    5
    6
    index index0 rindex rindex0
    1 0 5 4
    2 1 4 3
    3 2 3 2
    4 3 2 1
    5 4 1 0

    Parameters

    limit

    Limits the loop to the specified number of iterations.

    Input

    -
    <!-- for array = [1,2,3,4,5,6] -->
    -{% for item in array limit:2 %}
    -  {{- item -}}
    -{% endfor %}
    +
    1
    2
    3
    4
    <!-- for array = [1,2,3,4,5,6] -->
    {% for item in array limit:2 %}
    {{- item -}}
    {% endfor %}

    Output

    -
    12
    +
    1
    12

    offset

    Begins the loop at the specified index.

    Input

    -
    <!-- for array = [1,2,3,4,5,6] -->
    -{% for item in array offset:2 %}
    -  {{- item -}}
    -{% endfor %}
    +
    1
    2
    3
    4
    <!-- for array = [1,2,3,4,5,6] -->
    {% for item in array offset:2 %}
    {{- item -}}
    {% endfor %}

    Output

    -
    3456
    +
    1
    3456

    offset:continue

    v9.33.0

    Offset value can be continue to continue previous loop. For example:

    Input

    -
    <!-- for array = [1,2,3,4,5,6] -->
    -{% for item in array limit:2 %}
    -  {{- item -}}
    -{% endfor%}
    -{% for item in array offset:continue %}
    -  {{- item -}}
    -{% endfor%}
    +
    1
    2
    3
    4
    5
    6
    7
    <!-- for array = [1,2,3,4,5,6] -->
    {% for item in array limit:2 %}
    {{- item -}}
    {% endfor%}
    {% for item in array offset:continue %}
    {{- item -}}
    {% endfor%}

    Output

    -
    12
    -3456
    +
    1
    2
    12
    3456

    For the same variable name ("item" in this case) and same collection ("array" in this case), there’s one position record. That means you can start a new loop with a different variable name:

    Input

    -
    <!-- for array = [1,2,3,4,5,6] -->
    -{% for item in array limit:2 %}
    -  {{- item -}}
    -{% endfor%}
    -{% for item2 in array offset:continue %}
    -  {{- item2 -}}
    -{% endfor%}
    +
    1
    2
    3
    4
    5
    6
    7
    <!-- for array = [1,2,3,4,5,6] -->
    {% for item in array limit:2 %}
    {{- item -}}
    {% endfor%}
    {% for item2 in array offset:continue %}
    {{- item2 -}}
    {% endfor%}

    Output

    -
    12
    -123456
    +
    1
    2
    12
    123456

    range

    Defines a range of numbers to loop through. The range can be defined by both literal and variable numbers.

    Input

    -
    {% for i in (3..5) %}
    -  {{- i -}}
    -{% endfor-%}
    -
    -{% assign num = 4 %}
    -{% for i in (1..num) %}
    -  {{- i -}}
    -{% endfor %}
    +
    1
    2
    3
    4
    5
    6
    7
    8
    {% for i in (3..5) %}
    {{- i -}}
    {% endfor-%}

    {% assign num = 4 %}
    {% for i in (1..num) %}
    {{- i -}}
    {% endfor %}

    Output

    -
    345
    -1234
    +
    1
    2
    345
    1234

    reversed

    Reverses the order of the loop. Note that this flag’s spelling is different from the filter reverse.

    Input

    -
    <!-- if array = [1,2,3,4,5,6] -->
    -{% for item in array reversed %}
    -  {{ item }}
    -{% endfor %}
    +
    1
    2
    3
    4
    <!-- if array = [1,2,3,4,5,6] -->
    {% for item in array reversed %}
    {{ item }}
    {% endfor %}

    Output

    -
    6 5 4 3 2 1
    +
    1
    6 5 4 3 2 1

    When used with additional parameters, order is important. Leading with reversed reverses the order of the loop before executing the other parameters.

    Input

    -
    {% for i in (1..8) reversed limit: 4 %}
    -  {{ i }}
    -{% endfor %}
    +
    1
    2
    3
    {% for i in (1..8) reversed limit: 4 %}
    {{ i }}
    {% endfor %}

    Output

    -
    8 7 6 5
    +
    1
    8 7 6 5

    Input

    -
    {% for i in (1..8) limit: 4 reversed %}
    -  {{ i }}
    -{% endfor %}
    +
    1
    2
    3
    {% for i in (1..8) limit: 4 reversed %}
    {{ i }}
    {% endfor %}

    Output

    -
    4 3 2 1
    +
    1
    4 3 2 1
    - +
    diff --git a/tags/if.html b/tags/if.html index cd9782705..92dc404c0 100644 --- a/tags/if.html +++ b/tags/if.html @@ -38,7 +38,7 @@ - +
    @@ -96,30 +96,21 @@

    Executes a block of code only if a certain condition is true.

    if

    Input

    -
    {% if product.title == "Awesome Shoes" %}
    -  These shoes are awesome!
    -{% endif %}
    +
    1
    2
    3
    {% if product.title == "Awesome Shoes" %}
    These shoes are awesome!
    {% endif %}

    Output

    -
    These shoes are awesome!
    +
    1
    These shoes are awesome!

    elsif / else

    Adds more conditions within an if or unless block.

    Input

    -
    <!-- If customer.name = "anonymous" -->
    -{% if customer.name == "kevin" %}
    -  Hey Kevin!
    -{% elsif customer.name == "anonymous" %}
    -  Hey Anonymous!
    -{% else %}
    -  Hi Stranger!
    -{% endif %}
    +
    1
    2
    3
    4
    5
    6
    7
    8
    <!-- If customer.name = "anonymous" -->
    {% if customer.name == "kevin" %}
    Hey Kevin!
    {% elsif customer.name == "anonymous" %}
    Hey Anonymous!
    {% else %}
    Hi Stranger!
    {% endif %}

    Output

    -
    Hey Anonymous!
    +
    1
    Hey Anonymous!
    - +
    diff --git a/tags/include.html b/tags/include.html index 54bd69162..7a9aeb7fa 100644 --- a/tags/include.html +++ b/tags/include.html @@ -38,7 +38,7 @@ - +
    @@ -98,32 +98,30 @@

    Include a Template

    Renders a partial template from the template roots.

    -
    {% include 'footer.liquid' %}
    +
    1
    {% include 'footer.liquid' %}

    If extname option is set, the above .liquid extension becomes optional:

    -
    {% include 'footer' %}
    +
    1
    {% include 'footer' %}

    When a partial template is rendered by include, the code inside it can access its parent’s variables but its parent cannot access variables defined inside a included template.

    Passing Variables

    Variables defined in parent’s scope can be passed to a the partial template by listing them as parameters on the include tag:

    -
    {% assign my_variable = 'apples' %}
    -{% include 'name', my_variable: my_variable, my_other_variable: 'oranges' %}
    +
    1
    2
    {% assign my_variable = 'apples' %}
    {% include 'name', my_variable: my_variable, my_other_variable: 'oranges' %}

    The with Parameter

    A single object can be passed to a snippet by using the with...as syntax:

    -
    {% assign featured_product = all_products['product_handle'] %}
    -{% include 'product' with featured_product as product %}
    +
    1
    2
    {% assign featured_product = all_products['product_handle'] %}
    {% include 'product' with featured_product as product %}

    In the example above, the product variable in the partial template will hold the value of featured_product in the parent template.

    Outputs & Filters

    When filename is specified as literal string, it supports Liquid output and filter syntax. Useful when concatenating strings for a complex filename.

    -
    {% include "prefix/{{name | append: \".html\"}}" %}
    +
    1
    {% include "prefix/{{name | append: \".html\"}}" %}
    Escaping

    In LiquidJS, " within quoted string literals need to be escaped by adding a slash before the quote, e.g. \". Using Jekyll-like filenames can make this easier, see below.

    Jekyll-like filenames

    Setting dynamicPartials to false will enable Jekyll-like filenames, where file names are specified as literal string without surrounding quotes. Liquid outputs and filters are also supported within that, for example:

    -
    {% include prefix/{{ page.my_variable }}/suffix %}
    +
    1
    {% include prefix/{{ page.my_variable }}/suffix %}

    This way, you don’t need to escape " in the filename expression.

    -
    {% include prefix/{{name | append: ".html"}} %}
    +
    1
    {% include prefix/{{name | append: ".html"}} %}

    Jekyll include

    v9.33.0

    @@ -134,24 +132,18 @@
  • Parameters are under include variable instead of current scope.
  • For example, the following template:

    -
    {% include article.html header="HEADER" content="CONTENT" %}
    +
    1
    {% include article.html header="HEADER" content="CONTENT" %}

    article.html with following content:

    -
    <article>
    -  <header>{{include.header}}</header>
    -  {{include.content}}
    -</article>
    +
    1
    2
    3
    4
    <article>
    <header>{{include.header}}</header>
    {{include.content}}
    </article>

    Note that we’re referencing the first parameter by include.header instead of header. Will output following:

    -
    <article>
    -  <header>HEADER</header>
    -  CONTENT
    -</article>
    +
    1
    2
    3
    4
    <article>
    <header>HEADER</header>
    CONTENT
    </article>
    - +
    diff --git a/tags/increment.html b/tags/increment.html index baa720ad5..d953c4354 100644 --- a/tags/increment.html +++ b/tags/increment.html @@ -38,7 +38,7 @@ - +
    @@ -96,34 +96,23 @@

    Creates a new number variable, and increases its value by one every time it is called. The first value is 0.

    Input

    -
    {% increment my_counter %}
    -{% increment my_counter %}
    -{% increment my_counter %}
    +
    1
    2
    3
    {% increment my_counter %}
    {% increment my_counter %}
    {% increment my_counter %}

    Output

    -
    0
    -1
    -2
    +
    1
    2
    3
    0
    1
    2

    Variables created through the increment tag are independent from variables created through assign or capture.

    In the example below, a variable named “var” is created through assign. The increment tag is then used several times on a variable with the same name. Note that the increment tag does not affect the value of “var” that was created through assign.

    Input

    -
    {% assign var = 10 %}
    -{% increment var %}
    -{% increment var %}
    -{% increment var %}
    -{{ var }}
    +
    1
    2
    3
    4
    5
    {% assign var = 10 %}
    {% increment var %}
    {% increment var %}
    {% increment var %}
    {{ var }}

    Output

    -
    0
    -1
    -2
    -10
    +
    1
    2
    3
    4
    0
    1
    2
    10
    - +
    diff --git a/tags/inline_comment.html b/tags/inline_comment.html index e83b75e35..f4600906e 100644 --- a/tags/inline_comment.html +++ b/tags/inline_comment.html @@ -38,7 +38,7 @@ - +
    @@ -96,39 +96,24 @@

    Add comments to a Liquid template using an inline tag. Text enclosed in an inline comment tag will not be printed.

    Input

    -
    Anything inside an inline comment tag will not be printed.
    -{% # this is an inline comment %}
    -But every line must start with a '#'.
    -{%
    -  # this is a comment
    -  # that spans multiple lines
    -%}
    +
    1
    2
    3
    4
    5
    6
    7
    Anything inside an inline comment tag will not be printed.
    {% # this is an inline comment %}
    But every line must start with a '#'.
    {%
    # this is a comment
    # that spans multiple lines
    %}

    Output

    -
    Anything inside an inline comment tag will not be printed.
    -But every line must start with a '#'.
    +
    1
    2
    Anything inside an inline comment tag will not be printed.
    But every line must start with a '#'.

    Inline comments are useful inside liquid tags too.

    -
    {% liquid
    -  # required args
    -  assign product = collection.products.first
    -
    -  # optional args
    -  assign should_show_border = should_show_border | default: true
    -  assign should_highlight = should_highlight | default: false
    -%}
    +
    1
    2
    3
    4
    5
    6
    7
    8
    {% liquid
    # required args
    assign product = collection.products.first

    # optional args
    assign should_show_border = should_show_border | default: true
    assign should_highlight = should_highlight | default: false
    %}

    But they don’t work well for commenting out blocks of Liquid code. The comment block tag is the better option when you need to temporarily stop other tags from being executed.

    Input

    -
    {%- # {% echo 'Welcome to LiquidJS!' %} -%}
    -{% comment %}{% echo 'Welcome to LiquidJS!' %}{% endcomment %}
    +
    1
    2
    {%- # {% echo 'Welcome to LiquidJS!' %} -%}
    {% comment %}{% echo 'Welcome to LiquidJS!' %}{% endcomment %}

    Output

    -
    -%}
    +
    1
    -%}
    - +
    diff --git a/tags/layout.html b/tags/layout.html index d9e62ae75..4096d5297 100644 --- a/tags/layout.html +++ b/tags/layout.html @@ -38,7 +38,7 @@ - +
    @@ -95,68 +95,39 @@

    v1.9.1

    Using a Layout

    Introduce a layout template for the current template to render in. The directory for layout files are defined by layouts or root.

    -
    // default-layout.liquid
    -Header
    -{% block %}{% endblock %}
    -Footer
    -
    -// page.liquid
    -{% layout "default-layout.liquid" %}
    -{% block %}My page content{% endblock %}
    -
    -// result
    -Header
    -My page content
    -Footer
    +
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    // default-layout.liquid
    Header
    {% block %}{% endblock %}
    Footer

    // page.liquid
    {% layout "default-layout.liquid" %}
    {% block %}My page content{% endblock %}

    // result
    Header
    My page content
    Footer

    If extname option is set, the .liquid extension becomes optional:

    -
    {% layout 'default-layout' %}
    +
    1
    {% layout 'default-layout' %}
    Scoping

    When a partial template is rendered by layout, its template have access for its caller’s variables but not vice versa. Variables defined in layout will be popped out before control returning to its caller.

    Multiple Blocks

    The layout file can contain multiple blocks, each with a specified name. The following snippets yield same result as in the above example.

    -
    // default-layout.liquid
    -{% block header %}{% endblock %}
    -{% block content %}{% endblock %}
    -{% block footer %}{% endblock %}
    -
    -// page.liquid
    -{% layout "default-layout.liquid" %}
    -{% block header %}Header{% endblock %}
    -{% block content %}My page content{% endblock %}
    -{% block footer %}Footer{% endblock %}
    +
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    // default-layout.liquid
    {% block header %}{% endblock %}
    {% block content %}{% endblock %}
    {% block footer %}{% endblock %}

    // page.liquid
    {% layout "default-layout.liquid" %}
    {% block header %}Header{% endblock %}
    {% block content %}My page content{% endblock %}
    {% block footer %}Footer{% endblock %}

    Default Block Contents

    In the above layout files, blocks has empty contents. But it’s not necessarily be empty, in which case, the block contents in layout files will be used as default templates. The following snippets are also equivalent to the above examples:

    -
    // default-layout.liquid
    -{% block header %}Header{% endblock %}
    -{% block content %}{% endblock %}
    -{% block footer %}Footer{% endblock %}
    -
    -// page.liquid
    -{% layout "default-layout.liquid" %}
    -{% block content %}My page content{% endblock %}
    +
    1
    2
    3
    4
    5
    6
    7
    8
    // default-layout.liquid
    {% block header %}Header{% endblock %}
    {% block content %}{% endblock %}
    {% block footer %}Footer{% endblock %}

    // page.liquid
    {% layout "default-layout.liquid" %}
    {% block content %}My page content{% endblock %}

    Passing Variables

    Variables defined in current template can be passed to a the layout template by listing them as parameters on the layout tag:

    -
    {% assign my_variable = 'apples' %}
    -{% layout 'name', my_variable: my_variable, my_other_variable: 'oranges' %}
    +
    1
    2
    {% assign my_variable = 'apples' %}
    {% layout 'name', my_variable: my_variable, my_other_variable: 'oranges' %}

    Outputs & Filters

    When filename is specified as literal string, it supports Liquid output and filter syntax. Useful when concatenating strings for a complex filename.

    -
    {% layout "prefix/{{name | append: \".html\"}}" %}
    +
    1
    {% layout "prefix/{{name | append: \".html\"}}" %}
    Escaping

    In LiquidJS, " within quoted string literals need to be escaped. Adding a slash before the quote, e.g. \". Using Jekyll-like filenames can make this easier, see below.

    Jekyll-like Filenames

    Setting dynamicPartials to false will enable Jekyll-like filenames, file names are specified as literal string. And it also supports Liquid outputs and filters.

    -
    {% layout prefix/{{ page.my_variable }}/suffix %}
    +
    1
    {% layout prefix/{{ page.my_variable }}/suffix %}

    This way, you don’t need to escape " in the filename expression.

    -
    {% layout prefix/{{name | append: ".html"}} %}
    +
    1
    {% layout prefix/{{name | append: ".html"}} %}
    - +
    diff --git a/tags/liquid.html b/tags/liquid.html index 52d17914a..42b254d94 100644 --- a/tags/liquid.html +++ b/tags/liquid.html @@ -38,7 +38,7 @@ - +
    @@ -96,23 +96,14 @@

    Encloses multiple tags within one set of delimiters, to allow writing Liquid logic more concisely.

    liquid

    Input

    -
    {% liquid
    -  assign names = 'Bob, Sally' | split: ', '
    -
    -  for name in names
    -    echo 'Hello, ' | append: name
    -    unless forloop.last
    -      echo ', '
    -    endunless
    -  endfor
    -%}
    +
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    {% liquid
    assign names = 'Bob, Sally' | split: ', '

    for name in names
    echo 'Hello, ' | append: name
    unless forloop.last
    echo ', '
    endunless
    endfor
    %}

    Output

    -
    Hello, Bob, Hello Sally
    +
    1
    Hello, Bob, Hello Sally
    - +
    diff --git a/tags/overview.html b/tags/overview.html index 2bb069b1e..b05177b90 100644 --- a/tags/overview.html +++ b/tags/overview.html @@ -38,7 +38,7 @@ - +
    @@ -131,7 +131,7 @@
    - +
    diff --git a/tags/raw.html b/tags/raw.html index ec7ce1851..729904d2d 100644 --- a/tags/raw.html +++ b/tags/raw.html @@ -38,7 +38,7 @@ - +
    @@ -96,17 +96,14 @@

    Raw temporarily disables tag processing. This is useful for generating content
    (eg, Mustache, Handlebars) which uses conflicting syntax.

    Input

    -
    {% raw %}
    -  In Handlebars, {{ this }} will be HTML-escaped, but
    -  {{{ that }}} will not.
    -{% endraw %}
    +
    1
    2
    3
    4
    {% raw %}
    In Handlebars, {{ this }} will be HTML-escaped, but
    {{{ that }}} will not.
    {% endraw %}

    Output

    -
    In Handlebars, {{ this }} will be HTML-escaped, but {{{ that }}} will not.
    +
    1
    In Handlebars, {{ this }} will be HTML-escaped, but {{{ that }}} will not.
    - +
    diff --git a/tags/render.html b/tags/render.html index b8e04c342..b2ac23af4 100644 --- a/tags/render.html +++ b/tags/render.html @@ -38,7 +38,7 @@ - +
    @@ -95,48 +95,36 @@

    v9.2.0

    Render a Template

    Render a partial template from partials directory specified by partials or root.

    -
    // index.liquid
    -Contents
    -{% render 'footer.liquid' %}
    -
    -// footer.liquid
    -Footer
    -
    -// result
    -Contents
    -Footer
    +
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    // index.liquid
    Contents
    {% render 'footer.liquid' %}

    // footer.liquid
    Footer

    // result
    Contents
    Footer

    If extname option is set, the above .liquid extension becomes optional:

    -
    {% render 'footer' %}
    +
    1
    {% render 'footer' %}
    Variable Scope

    When a partial template is rendered, the code inside it can’t access its parent’s variables and its variables won’t be accessible by its parent. This encapsulation makes partials easier to understand and maintain.

    Passing Variables

    Variables defined in parent’s scope can be passed to a the partial template by listing them as parameters on the render tag:

    -
    {% assign my_variable = 'apples' %}
    -{% render 'name', my_variable: my_variable, my_other_variable: 'oranges' %}
    +
    1
    2
    {% assign my_variable = 'apples' %}
    {% render 'name', my_variable: my_variable, my_other_variable: 'oranges' %}

    globals don’t need to be passed down. They are accessible from all files.

    Outputs & Filters

    When filename is specified as literal string, it supports Liquid output and filter syntax. Useful when concatenating strings for a complex filename.

    -
    {% render "prefix/{{name | append: \".html\"}}" %}
    +
    1
    {% render "prefix/{{name | append: \".html\"}}" %}
    Escaping

    In LiquidJS, " within quoted string literals need to be escaped. Adding a slash before the quote, e.g. \". Using Jekyll-like filenames can make this easier, see below.

    Jekyll-like Filenames

    Setting dynamicPartials to false will enable Jekyll-like filenames, file names are specified as literal string. And it also supports Liquid outputs and filters.

    -
    {% render prefix/{{ page.my_variable }}/suffix %}
    +
    1
    {% render prefix/{{ page.my_variable }}/suffix %}

    This way, you don’t need to escape " in the filename expression.

    -
    {% render prefix/{{name | append: ".html"}} %}
    +
    1
    {% render prefix/{{name | append: ".html"}} %}

    Parameters

    The with Parameter

    A single object can be passed to a snippet by using the with...as syntax:

    -
    {% assign featured_product = all_products['product_handle'] %}
    -{% render 'product' with featured_product as product %}
    +
    1
    2
    {% assign featured_product = all_products['product_handle'] %}
    {% render 'product' with featured_product as product %}

    In the example above, the product variable in the partial template will hold the value of featured_product in the parent template.

    The for Parameter

    A partial template can be rendered once for each value of an enumerable by using the for...as syntax:

    -
    {% assign variants = product.variants %}
    -{% render 'variant' for variants as variant %}
    +
    1
    2
    {% assign variants = product.variants %}
    {% render 'variant' for variants as variant %}

    In the example above, the partial template will be rendered once for each variant of the product, and the variant variable will hold a product’s variant object within the snippet.

    The forloop object

    When using the for parameter, the forloop object is accessible within the snippet.

    @@ -145,7 +133,7 @@ Footer
    diff --git a/tags/tablerow.html b/tags/tablerow.html index 662772b62..39c9e6aeb 100644 --- a/tags/tablerow.html +++ b/tags/tablerow.html @@ -38,7 +38,7 @@ - +
    @@ -96,101 +96,30 @@

    Generates an HTML table. Must be wrapped in opening <table> and closing </table> HTML tags.

    Basic Usage

    Input

    -
    <table>
    -{% tablerow product in collection.products %}
    -  {{ product.title }}
    -{% endtablerow %}
    -</table>
    +
    1
    2
    3
    4
    5
    <table>
    {% tablerow product in collection.products %}
    {{ product.title }}
    {% endtablerow %}
    </table>

    Output

    -
    <table>
    -  <tr class="row1">
    -    <td class="col1">
    -      Cool Shirt
    -    </td>
    -    <td class="col2">
    -      Alien Poster
    -    </td>
    -    <td class="col3">
    -      Batman Poster
    -    </td>
    -    <td class="col4">
    -      Bullseye Shirt
    -    </td>
    -    <td class="col5">
    -      Another Classic Vinyl
    -    </td>
    -    <td class="col6">
    -      Awesome Jeans
    -    </td>
    -  </tr>
    -</table>
    +
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    <table>
    <tr class="row1">
    <td class="col1">
    Cool Shirt
    </td>
    <td class="col2">
    Alien Poster
    </td>
    <td class="col3">
    Batman Poster
    </td>
    <td class="col4">
    Bullseye Shirt
    </td>
    <td class="col5">
    Another Classic Vinyl
    </td>
    <td class="col6">
    Awesome Jeans
    </td>
    </tr>
    </table>

    Parameters

    cols

    Defines how many columns the tables should have.

    Input

    -
    {% tablerow product in collection.products cols:2 %}
    -  {{ product.title }}
    -{% endtablerow %}
    +
    1
    2
    3
    {% tablerow product in collection.products cols:2 %}
    {{ product.title }}
    {% endtablerow %}

    Output

    -
    <table>
    -  <tr class="row1">
    -    <td class="col1">
    -      Cool Shirt
    -    </td>
    -    <td class="col2">
    -      Alien Poster
    -    </td>
    -  </tr>
    -  <tr class="row2">
    -    <td class="col1">
    -      Batman Poster
    -    </td>
    -    <td class="col2">
    -      Bullseye Shirt
    -    </td>
    -  </tr>
    -  <tr class="row3">
    -    <td class="col1">
    -      Another Classic Vinyl
    -    </td>
    -    <td class="col2">
    -      Awesome Jeans
    -    </td>
    -  </tr>
    -</table>
    +
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    <table>
    <tr class="row1">
    <td class="col1">
    Cool Shirt
    </td>
    <td class="col2">
    Alien Poster
    </td>
    </tr>
    <tr class="row2">
    <td class="col1">
    Batman Poster
    </td>
    <td class="col2">
    Bullseye Shirt
    </td>
    </tr>
    <tr class="row3">
    <td class="col1">
    Another Classic Vinyl
    </td>
    <td class="col2">
    Awesome Jeans
    </td>
    </tr>
    </table>

    limit

    Exits the tablerow after a specific index.

    -
    {% tablerow product in collection.products cols:2 limit:3 %}
    -  {{ product.title }}
    -{% endtablerow %}
    +
    1
    2
    3
    {% tablerow product in collection.products cols:2 limit:3 %}
    {{ product.title }}
    {% endtablerow %}

    offset

    Starts the tablerow after a specific index.

    -
    {% tablerow product in collection.products cols:2 offset:3 %}
    -  {{ product.title }}
    -{% endtablerow %}
    +
    1
    2
    3
    {% tablerow product in collection.products cols:2 offset:3 %}
    {{ product.title }}
    {% endtablerow %}

    range

    Defines a range of numbers to loop through. The range can be defined by both literal and variable numbers.

    -
    <!--variable number example-->
    -
    -{% assign num = 4 %}
    -<table>
    -{% tablerow i in (1..num) %}
    -  {{ i }}
    -{% endtablerow %}
    -</table>
    -
    -<!--literal number example-->
    -
    -<table>
    -{% tablerow i in (3..5) %}
    -  {{ i }}
    -{% endtablerow %}
    -</table>
    +
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    <!--variable number example-->

    {% assign num = 4 %}
    <table>
    {% tablerow i in (1..num) %}
    {{ i }}
    {% endtablerow %}
    </table>

    <!--literal number example-->

    <table>
    {% tablerow i in (3..5) %}
    {{ i }}
    {% endtablerow %}
    </table>
    - +
    diff --git a/tags/unless.html b/tags/unless.html index 89ed7e4c6..bac85f4e9 100644 --- a/tags/unless.html +++ b/tags/unless.html @@ -38,7 +38,7 @@ - +
    @@ -96,21 +96,17 @@

    The opposite of if – executes a block of code only if a certain condition is not met.

    Input

    -
    {% unless product.title == "Awesome Shoes" %}
    -  These shoes are not awesome.
    -{% endunless %}
    +
    1
    2
    3
    {% unless product.title == "Awesome Shoes" %}
    These shoes are not awesome.
    {% endunless %}

    Output

    -
    These shoes are not awesome.
    +
    1
    These shoes are not awesome.

    This would be the equivalent of doing the following:

    -
    {% if product.title != "Awesome Shoes" %}
    -  These shoes are not awesome.
    -{% endif %}
    +
    1
    2
    3
    {% if product.title != "Awesome Shoes" %}
    These shoes are not awesome.
    {% endif %}
    - +
    diff --git a/tutorials/access-scope-in-filters.html b/tutorials/access-scope-in-filters.html index 4e51a5bda..f17511531 100644 --- a/tutorials/access-scope-in-filters.html +++ b/tutorials/access-scope-in-filters.html @@ -38,7 +38,7 @@ - +
    @@ -93,19 +93,10 @@

    As covered in Register Filters/Tags, we can access filter arguments directly in filter function like:

    -
    // Usage: {{ 1 | add: 2, 3 }}
    -// Output: 6
    -engine.registerFilter('add', (initial, arg1, arg2) => initial + arg1 + arg2)
    +
    1
    2
    3
    // Usage: {{ 1 | add: 2, 3 }}
    // Output: 6
    engine.registerFilter('add', (initial, arg1, arg2) => initial + arg1 + arg2)

    When it comes to stateful filters, for example transform a URL path to full URL, we’ll need to access a origin in current scope:

    -
    // Usage: {{ '/index.html' | fullURL }}
    -// Scope: { origin: "https://liquidjs.com" }
    -// Output: https://liquidjs.com/index.html
    -
    -engine.registerFilter('fullURL', function (path) {
    -    const origin = this.context.get(['origin'])
    -    return new URL(path, origin).toString() 
    -})
    +
    1
    2
    3
    4
    5
    6
    7
    8
    // Usage: {{ '/index.html' | fullURL }}
    // Scope: { origin: "https://liquidjs.com" }
    // Output: https://liquidjs.com/index.html

    engine.registerFilter('fullURL', function (path) {
    const origin = this.context.get(['origin'])
    return new URL(path, origin).toString()
    })

    See this JSFiddle: https://jsfiddle.net/ctj364up/1/

    Arrow Functions

    this in arrow functions is bound to current JavaScript context, you’ll need to use function(){} instead of ()=>{} syntax to access this.context correctly.

    @@ -114,7 +105,7 @@ engine.regis
    - +
    diff --git a/tutorials/caching.html b/tutorials/caching.html index 055b3789a..a9571b36d 100644 --- a/tutorials/caching.html +++ b/tutorials/caching.html @@ -38,7 +38,7 @@ - +
    @@ -96,34 +96,19 @@

    LiquidJS provides multiple ways to cache the parsed templates to improve performance.

    Programmatically

    The .parse(), .parseFile(), .parseFileSync() APIs are used to parse templates from string or files. The result template can be then rendered multiple times with different context.

    Parse from string:

    -
    var tpl = engine.parse('{{name | capitalize}}');
    -
    -engine.renderSync(tpl, {name: 'alice'}) // 'Alice'
    -engine.renderSync(tpl, {name: 'bob'}) // 'Bob'
    +
    1
    2
    3
    4
    var tpl = engine.parse('{{name | capitalize}}');

    engine.renderSync(tpl, {name: 'alice'}) // 'Alice'
    engine.renderSync(tpl, {name: 'bob'}) // 'Bob'

    Parse from file:

    -
    var tpl = engine.parseFileSync('hello');    // contents of `hello.liquid`: {{name}}
    -
    -engine.renderSync(tpl, {name: 'alice'}) // 'Alice'
    -engine.renderSync(tpl, {name: 'bob'}) // 'Bob'
    +
    1
    2
    3
    4
    var tpl = engine.parseFileSync('hello');    // contents of `hello.liquid`: {{name}}

    engine.renderSync(tpl, {name: 'alice'}) // 'Alice'
    engine.renderSync(tpl, {name: 'bob'}) // 'Bob'

    The template string/file is parsed only once and rendered multiple times using different context. Templates for different files can be stored into a Map and can be retrieved directly for subsequent renders.

    The cache Option

    The cache option can be set to instruct liquidjs to use cached parsed templates each time you call renderFile or renderFileSync.

    -
    var { Liquid } = require('liquidjs');
    -var engine = new Liquid({
    -    cache: true
    -});
    -
    -// liquidjs parses the hello.liquid, then renders it with {name: 'alice'}
    -engine.renderFileSync('hello', {name: 'alice'})
    -
    -// liquidjs finds the cached template, then renders it with {name: 'bob'}
    -engine.renderFileSync('hello', {name: 'bob'})
    +
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    var { Liquid } = require('liquidjs');
    var engine = new Liquid({
    cache: true
    });

    // liquidjs parses the hello.liquid, then renders it with {name: 'alice'}
    engine.renderFileSync('hello', {name: 'alice'})

    // liquidjs finds the cached template, then renders it with {name: 'bob'}
    engine.renderFileSync('hello', {name: 'bob'})
    - +
    diff --git a/tutorials/changelog.html b/tutorials/changelog.html index 10f9b0027..f1fc031ae 100644 --- a/tutorials/changelog.html +++ b/tutorials/changelog.html @@ -38,7 +38,7 @@ - +
    @@ -468,93 +468,77 @@
  • allow string literals contain delimiters, fixes #288 (9c40da7)
  • 9.20.0 (2021-01-23)

    Features

      -
    • support `{{block.super}}`, see [#38](https://github.com/harttle/liquidjs/issues/38) ([a3af44d](https://github.com/harttle/liquidjs/commit/a3af44d)) - -# [9.19.0](https://github.com/harttle/liquidjs/compare/v9.18.0...v9.19.0) (2020-12-18) - - -### Bug Fixes - -* lint ([de32259](https://github.com/harttle/liquidjs/commit/de32259)) -* move offset adding complexity inside TimezoneDate ([26b2175](https://github.com/harttle/liquidjs/commit/26b2175)) -* simpler timezone regex and non-null offset ([e3ecfe3](https://github.com/harttle/liquidjs/commit/e3ecfe3)) - - -### Features - -* add preserveTimezones option ([d70cd2a](https://github.com/harttle/liquidjs/commit/d70cd2a)) -* parse and handle date timezone offsets ([c16c787](https://github.com/harttle/liquidjs/commit/c16c787)) - -# [9.18.0](https://github.com/harttle/liquidjs/compare/v9.17.0...v9.18.0) (2020-12-17) - - -### Bug Fixes - -* address refactor comments ([6a0ad10](https://github.com/harttle/liquidjs/commit/6a0ad10)) - - -### Features - -* add option for keeping variable type in output ([cd92e77](https://github.com/harttle/liquidjs/commit/cd92e77)) - -# [9.17.0](https://github.com/harttle/liquidjs/compare/v9.16.1...v9.17.0) (2020-12-07) - - -### Bug Fixes - -* elsif is not supported for unless, fixes [#268](https://github.com/harttle/liquidjs/issues/268) ([2bbf501](https://github.com/harttle/liquidjs/commit/2bbf501)) -* enforce string-type pattern in `replace`, fixes [#243](https://github.com/harttle/liquidjs/issues/243) ([c8afa39](https://github.com/harttle/liquidjs/commit/c8afa39)) -* raw block not ignoring {% characters, fixes #263 (a492d8e)
    • +
    • support {{block.super}}, see #38 (a3af44d)
    • +
    +

    9.19.0 (2020-12-18)

    Bug Fixes

      +
    • lint (de32259)
    • +
    • move offset adding complexity inside TimezoneDate (26b2175)
    • +
    • simpler timezone regex and non-null offset (e3ecfe3)

    Features

      +
    • add preserveTimezones option (d70cd2a)
    • +
    • parse and handle date timezone offsets (c16c787)
    • +
    +

    9.18.0 (2020-12-17)

    Bug Fixes

      +
    • address refactor comments (6a0ad10)
    • +
    +

    Features

      +
    • add option for keeping variable type in output (cd92e77)
    • +
    +

    9.17.0 (2020-12-07)

    Bug Fixes

      +
    • elsif is not supported for unless, fixes #268 (2bbf501)
    • +
    • enforce string-type pattern in replace, fixes #243 (c8afa39)
    • +
    • raw block not ignoring {% characters, fixes #263 (a492d8e)
    • +
    +

    Features

    -

    9.16.1 (2020-10-09)

    Bug Fixes

      +

      9.16.1 (2020-10-09)

      Bug Fixes

      -

      9.16.0 (2020-10-08)

      Features

        +

        9.16.0 (2020-10-08)

        Features

        -

        9.15.1 (2020-10-03)

        Bug Fixes

          +

          9.15.1 (2020-10-03)

          Bug Fixes

          • allow quoted variable name in capture, fixes #252 (5b3f419)
          -

          9.15.0 (2020-08-04)

          Features

            +

            9.15.0 (2020-08-04)

            Features

            -

            9.14.1 (2020-07-08)

            Bug Fixes

              +

              9.14.1 (2020-07-08)

              Bug Fixes

              • enumerate Promises (e.g. in for & tablerow) (#237) (941dd66)
              -

              9.14.0 (2020-06-25)

              Features

                +

                9.14.0 (2020-06-25)

                Features

                • setup universal browser and node builds (6cf6ffa)
                -

                9.13.0 (2020-06-25)

                Features

                  +

                  9.13.0 (2020-06-25)

                  Features

                  -

                  9.12.0 (2020-05-15)

                  Features

                    +

                    9.12.0 (2020-05-15)

                    Features

                    -

                    9.11.11 (2020-05-01)

                    Bug Fixes

                      +

                      9.11.11 (2020-05-01)

                      Bug Fixes

                      -

                      9.11.10 (2020-04-03)

                      Bug Fixes

                        +

                        9.11.10 (2020-04-03)

                        Bug Fixes

                        • respect cache render options (a93f11d)
                        -

                        9.11.9 (2020-03-31)

                        Bug Fixes

                          +

                          9.11.9 (2020-03-31)

                          Bug Fixes

                          • coerce to Array in map and where filter (c923598)
                          -

                          9.11.8 (2020-03-31)

                          Bug Fixes

                            +

                            9.11.8 (2020-03-31)

                            Bug Fixes

                            -

                            9.11.7 (2020-03-28)

                            Bug Fixes

                              +

                              9.11.7 (2020-03-28)

                              Bug Fixes

                              -

                              9.11.6 (2020-03-25)

                              Bug Fixes

                                +

                                9.11.6 (2020-03-25)

                                Bug Fixes

                                • default filter not applied for empty array (c371762)
                                -

                                9.11.5 (2020-03-24)

                                Bug Fixes

                                  +

                                  9.11.5 (2020-03-24)

                                  Bug Fixes

                                  • throws on invalid arguments for prepend/append, fixes #208 (479c633)
                                  -

                                  9.11.4 (2020-03-23)

                                  Bug Fixes

                                    +

                                    9.11.4 (2020-03-23)

                                    Bug Fixes

                                    • return variable name in include error (93433a8)

                                    9.11.3 (2020-03-14)

                                    Performance Improvements

                                      @@ -564,82 +548,82 @@

                                      9.11.2 (2020-03-14)

                                      Performance Improvements

                                      • remove transient strings to reduce memory (3dfdf98)
                                      -

                                      9.11.1 (2020-03-09)

                                      Bug Fixes

                                        +

                                        9.11.1 (2020-03-09)

                                        Bug Fixes

                                        -

                                        9.11.0 (2020-03-04)

                                        Bug Fixes

                                          +

                                          9.11.0 (2020-03-04)

                                          Bug Fixes

                                          • Buffer not defined for browser bundles, fixes #197 (65b849c)
                                          • stable sort for undefined keys, fixes #191 (f57156b)
                                          -

                                          Features

                                            +

                                            Features

                                            • async cache.read()/write(), remove .has() (61dac49)
                                            -

                                            9.10.0 (2020-03-03)

                                            Features

                                              +

                                              9.10.0 (2020-03-03)

                                              Features

                                              -

                                              9.9.0 (2020-03-02)

                                              Features

                                                +

                                                9.9.0 (2020-03-02)

                                                Features

                                                -

                                                9.8.0 (2020-02-20)

                                                Features

                                                  +

                                                  9.8.0 (2020-02-20)

                                                  Features

                                                  -

                                                  9.7.2 (2020-02-20)

                                                  Bug Fixes

                                                    +

                                                    9.7.2 (2020-02-20)

                                                    Bug Fixes

                                                    • add funding entry to show up in npm fund command (40095a8)
                                                    -

                                                    9.7.1 (2020-02-19)

                                                    Bug Fixes

                                                      +

                                                      9.7.1 (2020-02-19)

                                                      Bug Fixes

                                                      -

                                                      9.7.0 (2020-02-07)

                                                      Bug Fixes

                                                        +

                                                        9.7.0 (2020-02-07)

                                                        Bug Fixes

                                                        -

                                                        Features

                                                          +

                                                          Features

                                                          9.6.2 (2020-01-10)

                                                          Performance Improvements

                                                          • prevent multiple case evaluations (807e840)
                                                          -

                                                          9.6.1 (2020-01-04)

                                                          Bug Fixes

                                                            +

                                                            9.6.1 (2020-01-04)

                                                            Bug Fixes

                                                            • add this to fs references in parseFile (4b079c5)
                                                            -

                                                            9.6.0 (2019-12-15)

                                                            Features

                                                              +

                                                              9.6.0 (2019-12-15)

                                                              Features

                                                              -

                                                              9.5.0 (2019-12-12)

                                                              Features

                                                                +

                                                                9.5.0 (2019-12-12)

                                                                Features

                                                                -

                                                                9.4.2 (2019-11-15)

                                                                Bug Fixes

                                                                  +

                                                                  9.4.2 (2019-11-15)

                                                                  Bug Fixes

                                                                  • reading .first, .last of Array, closes #175 (f82da11)
                                                                  -

                                                                  9.4.1 (2019-11-15)

                                                                  Bug Fixes

                                                                    +

                                                                    9.4.1 (2019-11-15)

                                                                    Bug Fixes

                                                                    • remove node dependencies for esm bundle, see #173 (04df929)
                                                                    -

                                                                    9.4.0 (2019-11-14)

                                                                    Features

                                                                      +

                                                                      9.4.0 (2019-11-14)

                                                                      Features

                                                                      • add ability to pass JSON context to CLI (9504e4e)
                                                                      -

                                                                      9.3.1 (2019-11-09)

                                                                      Bug Fixes

                                                                        +

                                                                        9.3.1 (2019-11-09)

                                                                        Bug Fixes

                                                                        • liquidjs command in /bin/liquid.js, fixes #169 (0073b90)
                                                                        -

                                                                        9.3.0 (2019-11-07)

                                                                        Features

                                                                          +

                                                                          9.3.0 (2019-11-07)

                                                                          Features

                                                                          • support require.resolve for lookup, see #168 (2dd4355)

                                                                          9.1.1 (2019-10-10)

                                                                          Performance Improvements

                                                                          • add string flattening to reduce retained memory (node only) (3ad512c)
                                                                          -

                                                                          9.1.0 (2019-10-07)

                                                                          Features

                                                                            +

                                                                            9.1.0 (2019-10-07)

                                                                            Features

                                                                            • alias getTemplate() to parseFile() (6b83788)
                                                                            -

                                                                            9.0.1 (2019-10-02)

                                                                            Bug Fixes

                                                                              +

                                                                              9.0.1 (2019-10-02)

                                                                              Bug Fixes

                                                                              -

                                                                              9.0.0 (2019-08-26)

                                                                              Bug Fixes

                                                                                +

                                                                                9.0.0 (2019-08-26)

                                                                                Bug Fixes

                                                                                • break/continue omitting output before them, #123 (ae45c46)
                                                                                • reactjs demo during yarn install, fixes #145 (b65df44)

                                                                                Code Refactoring

                                                                                • return value of Tag#render is no longer used (8028f82)
                                                                                -

                                                                                Features

                                                                                  +

                                                                                  Features

                                                                                  • renderSync, parseAndRenderSync and renderFileSync, see #48 (7fb01ad)

                                                                                  Performance Improvements

                                                                                    @@ -650,95 +634,95 @@
                                                                                  • ship to Node.js 8, the dist/liquid.cjs.js (main) no longer
                                                                                    supports Node.js 6, other bundles are also provided via dist/liquid.esm.js, dist/liquid.js (ES5 umd) and liquid.min.js (minified ES5 umd)
                                                                                  • remove default export, now should be used like import
                                                                                    {Liquid} from 'liquidjs'
                                                                                  -

                                                                                  8.5.3 (2019-08-25)

                                                                                  Bug Fixes

                                                                                    +

                                                                                    8.5.3 (2019-08-25)

                                                                                    Bug Fixes

                                                                                    • escape filter when input is undefined (a00945c)
                                                                                    -

                                                                                    8.5.2 (2019-08-09)

                                                                                    Bug Fixes

                                                                                      +

                                                                                      8.5.2 (2019-08-09)

                                                                                      Bug Fixes

                                                                                      -

                                                                                      8.5.1 (2019-08-05)

                                                                                      Bug Fixes

                                                                                        +

                                                                                        8.5.1 (2019-08-05)

                                                                                        Bug Fixes

                                                                                        -

                                                                                        8.5.0 (2019-08-01)

                                                                                        Features

                                                                                          +

                                                                                          8.5.0 (2019-08-01)

                                                                                          Features

                                                                                          -

                                                                                          8.4.1 (2019-07-22)

                                                                                          Bug Fixes

                                                                                            +

                                                                                            8.4.1 (2019-07-22)

                                                                                            Bug Fixes

                                                                                            • some filters on undefined variable throws, #140 (6e6ea0a)
                                                                                            -

                                                                                            8.4.0 (2019-07-06)

                                                                                            Features

                                                                                              +

                                                                                              8.4.0 (2019-07-06)

                                                                                              Features

                                                                                              -

                                                                                              8.3.0 (2019-06-27)

                                                                                              Features

                                                                                                +

                                                                                                8.3.0 (2019-06-27)

                                                                                                Features

                                                                                                8.2.4 (2019-06-17)

                                                                                                Performance Improvements

                                                                                                • improve getTemplate() when cache is enabled (1ffba2b)
                                                                                                -

                                                                                                8.2.3 (2019-05-19)

                                                                                                Bug Fixes

                                                                                                  +

                                                                                                  8.2.3 (2019-05-19)

                                                                                                  Bug Fixes

                                                                                                  -

                                                                                                  8.2.2 (2019-05-12)

                                                                                                  Bug Fixes

                                                                                                    +

                                                                                                    8.2.2 (2019-05-12)

                                                                                                    Bug Fixes

                                                                                                    -

                                                                                                    8.2.1 (2019-04-26)

                                                                                                    Bug Fixes

                                                                                                      +

                                                                                                      8.2.1 (2019-04-26)

                                                                                                      Bug Fixes

                                                                                                      • default filter is not working with an empty string, #122 (6075c0a)
                                                                                                      -

                                                                                                      8.2.0 (2019-04-17)

                                                                                                      Features

                                                                                                        +

                                                                                                        8.2.0 (2019-04-17)

                                                                                                        Features

                                                                                                        • pass context to filters (00bc1ef)
                                                                                                        -

                                                                                                        8.1.0 (2019-04-02)

                                                                                                        Features

                                                                                                          +

                                                                                                          8.1.0 (2019-04-02)

                                                                                                          Features

                                                                                                          -

                                                                                                          8.0.3 (2019-04-01)

                                                                                                          Bug Fixes

                                                                                                            +

                                                                                                            8.0.3 (2019-04-01)

                                                                                                            Bug Fixes

                                                                                                            8.0.2 (2019-03-25)

                                                                                                            Performance Improvements

                                                                                                            • use polymorphism instead duck test (82d7673)
                                                                                                            -

                                                                                                            8.0.1 (2019-03-22)

                                                                                                            Bug Fixes

                                                                                                              +

                                                                                                              8.0.1 (2019-03-22)

                                                                                                              Bug Fixes

                                                                                                              • incorrect scope when using assign with for, fixes #115 (defbb58)

                                                                                                              8.0.0 (2019-03-10)

                                                                                                              Code Refactoring

                                                                                                              • use camelCase for JavaScript APIs (64e0c87)
                                                                                                              -

                                                                                                              Features

                                                                                                                +

                                                                                                                Features

                                                                                                                • promise support for drops, working on #65 (4a8088d)

                                                                                                                BREAKING CHANGES

                                                                                                                • Options and method names in JavaScript API are now renamed to camelCase, for a complete list see #109
                                                                                                                -

                                                                                                                7.5.1 (2019-03-05)

                                                                                                                Bug Fixes

                                                                                                                  +

                                                                                                                  7.5.1 (2019-03-05)

                                                                                                                  Bug Fixes

                                                                                                                  -

                                                                                                                  7.5.0 (2019-03-01)

                                                                                                                  Features

                                                                                                                    +

                                                                                                                    7.5.0 (2019-03-01)

                                                                                                                    Features

                                                                                                                    -

                                                                                                                    7.4.0 (2019-02-28)

                                                                                                                    Bug Fixes

                                                                                                                      +

                                                                                                                      7.4.0 (2019-02-28)

                                                                                                                      Bug Fixes

                                                                                                                      • math filters now return number, resolves #110 (b4acdb4)
                                                                                                                      -

                                                                                                                      Features

                                                                                                                        +

                                                                                                                        Features

                                                                                                                        -

                                                                                                                        7.3.1 (2019-02-25)

                                                                                                                        Bug Fixes

                                                                                                                          +

                                                                                                                          7.3.1 (2019-02-25)

                                                                                                                          Bug Fixes

                                                                                                                          • #108: remove absolute path in emitted d.ts (53a835a), closes #108
                                                                                                                          -

                                                                                                                          7.3.0 (2019-02-24)

                                                                                                                          Features

                                                                                                                            +

                                                                                                                            7.3.0 (2019-02-24)

                                                                                                                            Features

                                                                                                                            • nil/null/empty/blank literals, resolves #102 (88c9e96)
                                                                                                                            -

                                                                                                                            7.2.2 (2019-02-23)

                                                                                                                            Bug Fixes

                                                                                                                              +

                                                                                                                              7.2.2 (2019-02-23)

                                                                                                                              Bug Fixes

                                                                                                                              • filters break when argument contains [()|, fixes #89 (e977669)
                                                                                                                              -

                                                                                                                              7.2.1 (2019-02-22)

                                                                                                                              Bug Fixes

                                                                                                                                +

                                                                                                                                7.2.1 (2019-02-22)

                                                                                                                                Bug Fixes

                                                                                                                                • default length for truncate and truncatewords (56c7992)
                                                                                                                                -

                                                                                                                                7.2.0 (2019-02-20)

                                                                                                                                Features

                                                                                                                                  +

                                                                                                                                  7.2.0 (2019-02-20)

                                                                                                                                  Features

                                                                                                                                  • override output/tag delimiter, fixes #54 (d20a043)

                                                                                                                                  BREAKING CHANGES

                                                                                                                                  • trim_value_left option renamed to trim_output_left, trim_value_right option renamed to trim_output_right
                                                                                                                                  -

                                                                                                                                  7.1.0 (2019-02-20)

                                                                                                                                  Features

                                                                                                                                    +

                                                                                                                                    7.1.0 (2019-02-20)

                                                                                                                                    Features

                                                                                                                                    • throw an Error if delimiter not matched (c33d8f6)

                                                                                                                                    7.0.0 (2019-02-14)

                                                                                                                                    chore

                                                                                                                                      @@ -747,19 +731,19 @@

                                                                                                                                      BREAKING CHANGES

                                                                                                                                      • TypeScript: calling Liquid() without new now becomes invalid
                                                                                                                                      -

                                                                                                                                      6.4.3 (2019-02-13)

                                                                                                                                      Bug Fixes

                                                                                                                                        +

                                                                                                                                        6.4.3 (2019-02-13)

                                                                                                                                        Bug Fixes

                                                                                                                                        • better index.d.ts and a demo (2015f68), closes #98
                                                                                                                                        -

                                                                                                                                        6.4.2 (2019-01-28)

                                                                                                                                        Bug Fixes

                                                                                                                                          +

                                                                                                                                          6.4.2 (2019-01-28)

                                                                                                                                          Bug Fixes

                                                                                                                                          • CI: e2e not building cjs (dde7b3b)
                                                                                                                                          -

                                                                                                                                          6.4.1 (2019-01-28)

                                                                                                                                          Bug Fixes

                                                                                                                                            +

                                                                                                                                            6.4.1 (2019-01-28)

                                                                                                                                            Bug Fixes

    - +
    diff --git a/tutorials/contribution-guidelines.html b/tutorials/contribution-guidelines.html index 8113b5fc9..80dbe7f05 100644 --- a/tutorials/contribution-guidelines.html +++ b/tutorials/contribution-guidelines.html @@ -38,7 +38,7 @@ - +
    @@ -102,7 +102,7 @@
    - +
    diff --git a/tutorials/differences.html b/tutorials/differences.html index c2a1035e1..bb84e5f50 100644 --- a/tutorials/differences.html +++ b/tutorials/differences.html @@ -38,7 +38,7 @@ - +
    @@ -126,7 +126,7 @@
    - +
    diff --git a/tutorials/dos.html b/tutorials/dos.html index 82ff5b8d6..ed22f0350 100644 --- a/tutorials/dos.html +++ b/tutorials/dos.html @@ -38,7 +38,7 @@ - +
    @@ -94,33 +94,24 @@

    When the template or data context cannot be trusted, enabling DoS prevention options is crucial. LiquidJS provides 3 options for this purpose: parseLimit, renderLimit, and memoryLimit.

    TL;DR

    Setting these options can largely ensure that your LiquidJS instance won’t hang for extended periods or consume excessive memory. These limits are based on the available JavaScript APIs, so they are not precise hard limits but thresholds to help prevent your process from failing or hanging.

    -
    const liquid = new Liquid({
    -    parseLimit: 1e8, // typical size of your templates in each render
    -    renderLimit: 1000, // limit each render to be completed in 1s
    -    memoryLimit: 1e9, // memory available for LiquidJS (1e9 for 1GB)
    -})
    +
    1
    2
    3
    4
    5
    const liquid = new Liquid({
    parseLimit: 1e8, // typical size of your templates in each render
    renderLimit: 1000, // limit each render to be completed in 1s
    memoryLimit: 1e9, // memory available for LiquidJS (1e9 for 1GB)
    })

    When a parse() or render() cannot be completed within given resource, it throws.

    parseLimit

    parseLimit restricts the size (character length) of templates parsed in each .parse() call, including referenced partials and layouts. Since LiquidJS parses template strings in near O(n) time, limiting total template length is usually sufficient.

    A typical PC handles 1e8 (100M) characters without issues.

    renderLimit

    Restricting template size alone is insufficient because dynamic loops with large counts can occur in render time. renderLimit mitigates this by limiting the time consumed by each render() call.

    -
    {%- for i in (1..10000000) -%}
    -    order: {{i}}
    -{%- endfor -%}
    +
    1
    2
    3
    {%- for i in (1..10000000) -%}
    order: {{i}}
    {%- endfor -%}

    Render time is checked on a per-template basis (before rendering each template). In the above example, there are 2 templates in the loop: order: and {{i}}, render time will be checked 10000000x2 times.

    For time-consuming tags and filters within a single template, the process can still hang. For fully controlled rendering, consider using a process manager like paralleljs.

    memoryLimit

    Even with small number of templates and iterations, memory usage can grow exponentially. In the following example, memory doubles with each iteration:

    -
    {% assign array = "1,2,3" | split: "," %}
    -{% for i in (1..32) %}
    -    {% assign array = array | concat: array %}
    -{% endfor %}
    +
    1
    2
    3
    4
    {% assign array = "1,2,3" | split: "," %}
    {% for i in (1..32) %}
    {% assign array = array | concat: array %}
    {% endfor %}

    memoryLimit restricts memory-sensitive filters to prevent excessive memory allocation. As JavaScript uses GC to manage memory, memoryLimit limits only the total number of objects allocated by memory sensitive filters in LiquidJS thus may not reflect the actual memory footprint.

    - +
    diff --git a/tutorials/drops.html b/tutorials/drops.html index d16512446..90652c475 100644 --- a/tutorials/drops.html +++ b/tutorials/drops.html @@ -38,7 +38,7 @@ - +
    @@ -96,23 +96,7 @@
    Drop for JavaScript

    Drop interface is implemented differently in LiquidJS compared to built-in filters and other template functionalities. Since LiquidJS runs in JavaScript, custom Drops need to be reimplemented in JavaScript anyway. There’s no compatibility between JavaScript classes and Ruby classes.

    -

    Basic Usage

    import { Liquid, Drop } from 'liquidjs'
    -
    -class SettingsDrop extends Drop {
    -  constructor() {
    -    super()
    -    this.foo = 'FOO'
    -  }
    -  bar() {
    -    return 'BAR'
    -  }
    -}
    -
    -const engine = new Liquid()
    -const template = `foo: {{settings.foo}}, bar: {{settings.bar}}`
    -const context = { settings: new SettingsDrop() }
    -// Outputs: "foo: FOO, bar: BAR"
    -engine.parseAndRender(template, context).then(html => console.log(html))
    +

    Basic Usage

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    import { Liquid, Drop } from 'liquidjs'

    class SettingsDrop extends Drop {
    constructor() {
    super()
    this.foo = 'FOO'
    }
    bar() {
    return 'BAR'
    }
    }

    const engine = new Liquid()
    const template = `foo: {{settings.foo}}, bar: {{settings.bar}}`
    const context = { settings: new SettingsDrop() }
    // Outputs: "foo: FOO, bar: BAR"
    engine.parseAndRender(template, context).then(html => console.log(html))

    Runkit link

    As shown above, besides reading properties from context scopes, you can also call methods. You only need to create a custom class inherited from Drop.

    @@ -120,93 +104,19 @@ engine.parse

    liquidMethodMissing

    For cases when there isn’t a fixed set of properties, you can leverage liquidMethodMissing to dynamically resolve the value of a variable name.

    -
    import { Liquid, Drop } from 'liquidjs'
    -
    -class SettingsDrop extends Drop {
    -  liquidMethodMissing(key) {
    -    return key.toUpperCase()
    -  }
    -}
    -
    -const engine = new Liquid()
    -// Outputs: "COO"
    -engine.parseAndRender("{{settings.coo}}", { settings: new SettingsDrop() })
    -  .then(html => console.log(html))
    +
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    import { Liquid, Drop } from 'liquidjs'

    class SettingsDrop extends Drop {
    liquidMethodMissing(key) {
    return key.toUpperCase()
    }
    }

    const engine = new Liquid()
    // Outputs: "COO"
    engine.parseAndRender("{{settings.coo}}", { settings: new SettingsDrop() })
    .then(html => console.log(html))

    liquidMethodMissing supports Promise, meaning you can make async calls within it. A more useful case can be fetching the value dynamically from the database. By using Drops, you can avoid hardcoding each property into the context. For example:

    -
    import { Liquid, Drop } from 'liquidjs'
    -
    -class DBDrop extends Drop {
    -  async liquidMethodMissing(key) {
    -    const record = await db.getRecordByKey(key)
    -    return record.value
    -  }
    -}
    -
    -const engine = new Liquid()
    -const context = { db: new DBDrop() }
    -engine.parseAndRender("{{db.coo}}", context).then(html => console.log(html))
    +
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    import { Liquid, Drop } from 'liquidjs'

    class DBDrop extends Drop {
    async liquidMethodMissing(key) {
    const record = await db.getRecordByKey(key)
    return record.value
    }
    }

    const engine = new Liquid()
    const context = { db: new DBDrop() }
    engine.parseAndRender("{{db.coo}}", context).then(html => console.log(html))

    valueOf

    Drops can implement a valueOf() method, the return value of which can be used to replace itself in the output. For example:

    -
    import { Liquid, Drop } from 'liquidjs'
    -
    -class ColorDrop extends Drop {
    -  valueOf() {
    -    return 'red'
    -  }
    -}
    -
    -const engine = new Liquid()
    -const context = { color: new ColorDrop() }
    -// Outputs: "red"
    -engine.parseAndRender("{{color}}", context).then(html => console.log(html))
    +
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    import { Liquid, Drop } from 'liquidjs'

    class ColorDrop extends Drop {
    valueOf() {
    return 'red'
    }
    }

    const engine = new Liquid()
    const context = { color: new ColorDrop() }
    // Outputs: "red"
    engine.parseAndRender("{{color}}", context).then(html => console.log(html))

    toLiquid

    toLiquid() is not a method of Drop, but it can be used to return a Drop. In cases where you have a fixed structure in the context that cannot change its values, you can implement toLiquid() to let LiquidJS use the returned value instead of itself to render the templates.

    -
    import { Liquid, Drop } from 'liquidjs'
    -
    -const context = {
    -  person: {
    -    firstName: "Jun",
    -    lastName: "Yang",
    -    name: "Jun Yang",
    -    toLiquid: () => ({
    -      firstName: this.firstName,
    -      lastName: this.lastName,
    -      // use a different `name`
    -      name: "Yang, Jun"
    -    })
    -  }
    -}
    -
    -const engine = new Liquid()
    -// Outputs: "Yang, Jun"
    -engine.parseAndRender("{{person.name}}", context).then(html => console.log(html))
    +
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    import { Liquid, Drop } from 'liquidjs'

    const context = {
    person: {
    firstName: "Jun",
    lastName: "Yang",
    name: "Jun Yang",
    toLiquid: () => ({
    firstName: this.firstName,
    lastName: this.lastName,
    // use a different `name`
    name: "Yang, Jun"
    })
    }
    }

    const engine = new Liquid()
    // Outputs: "Yang, Jun"
    engine.parseAndRender("{{person.name}}", context).then(html => console.log(html))

    Of course, you can also return a PersonDrop instance in the toLiquid() method and implement this functionality within PersonDrop:

    -
    import { Liquid, Drop } from 'liquidjs'
    -
    -class PersonDrop extends Drop {
    -  constructor(person) {
    -    super()
    -    this.person = person
    -  }
    -  name() {
    -    return this.person.lastName + ", " + this.person.firstName
    -  }
    -}
    -
    -const context = {
    -  person: {
    -    firstName: "Jun",
    -    lastName: "Yang",
    -    name: "Jun Yang",
    -    toLiquid: function () { return new PersonDrop(this) }
    -  }
    -}
    -
    -const engine = new Liquid()
    -// Outputs: "Yang, Jun"
    -engine.parseAndRender("{{person.name}}", context).then(html => console.log(html))
    +
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    import { Liquid, Drop } from 'liquidjs'

    class PersonDrop extends Drop {
    constructor(person) {
    super()
    this.person = person
    }
    name() {
    return this.person.lastName + ", " + this.person.firstName
    }
    }

    const context = {
    person: {
    firstName: "Jun",
    lastName: "Yang",
    name: "Jun Yang",
    toLiquid: function () { return new PersonDrop(this) }
    }
    }

    const engine = new Liquid()
    // Outputs: "Yang, Jun"
    engine.parseAndRender("{{person.name}}", context).then(html => console.log(html))
    toLiquid() vs. valueOf() Difference
    • valueOf() is typically used to define how the current variable should be rendered, while toLiquid() is often used to convert an object into a Drop or another scope provided to the template.
    • @@ -216,28 +126,22 @@ engine.parse

      Special Drops

      LiquidJS itself implements several built-in drops to facilitate template writing. This part is compatible with Shopify Liquid, as we need templates to be portable.

      blank

      Useful to check whether a string variable is false, null, undefined, an empty string, or a string containing only blank characters.

      -
      {% unless author == blank %}
      -    {{author}}
      -{% endif %}
      +
      1
      2
      3
      {% unless author == blank %}
      {{author}}
      {% endif %}

      empty

      Useful to check if an array, string, or object is empty.

      -
      {% if authors == empty %}
      -    Author list is empty
      -{% endif %}
      +
      1
      2
      3
      {% if authors == empty %}
      Author list is empty
      {% endif %}
      empty implementation

      For arrays and strings, LiquidJS checks their .length property. For objects, LiquidJS calls Object.keys() to check whether they have keys.

      nil

      nil Drop is used to check whether a variable is not defined or defined as null or undefined, essentially equivalent to JavaScript == null check.

      -
      {% if nonexistent == nil %}
      -    null variable
      -{% endif %}
      +
      1
      2
      3
      {% if nonexistent == nil %}
      null variable
      {% endif %}

      Other Drops

      There are still several Drops for specific tags, like forloop, tablerowloop, block, which are covered by respective tag documents.

    - +
    diff --git a/tutorials/escaping.html b/tutorials/escaping.html index d25cf05cb..2f4c48932 100644 --- a/tutorials/escaping.html +++ b/tutorials/escaping.html @@ -38,7 +38,7 @@ - +
    @@ -99,43 +99,37 @@

    HTML Escape

    By default output is not escaped. While you can use escape filter for this:

    Input

    -
    {{ "1 < 2" | escape }}
    +
    1
    {{ "1 < 2" | escape }}

    Output

    -
    1 &lt; 2
    +
    1
    1 &lt; 2

    There’s also escape_once, newline_to_br, strip_html filters for you to fine tune your output.

    In cases where variables are mostly not trusted, outputEscape can be set to "escape" to apply escape by default. In this case, when you need some output not to be escaped, raw filter can be used:

    Input

    -
    {{ "1 < 2" }}
    -{{ "<button>OK</button>" | raw }}
    +
    1
    2
    {{ "1 < 2" }}
    {{ "<button>OK</button>" | raw }}

    Output

    -
    1 &lt; 2
    -<button>OK</button>
    +
    1
    2
    1 &lt; 2
    <button>OK</button>

    Liquid Escape

    To disable Liquid language and output strings like {{ and {%, the raw tag can be used.

    Input

    -
    {% raw %}
    -  In LiquidJS, {{ this | escape }} will be HTML-escaped, but
    -  {{{ that }}} will not.
    -{% endraw %}
    +
    1
    2
    3
    4
    {% raw %}
    In LiquidJS, {{ this | escape }} will be HTML-escaped, but
    {{{ that }}} will not.
    {% endraw %}

    Output

    -
    In LiquidJS, {{ this | escape }} will be HTML-escaped, but
    -{{{ that }}} will not.
    +
    1
    2
    In LiquidJS, {{ this | escape }} will be HTML-escaped, but
    {{{ that }}} will not.

    Within strings literals in LiquidJS template, \ can be used to escape special characters in string syntax. For example:

    Input

    -
    {{ "\"" }}
    +
    1
    {{ "\"" }}

    Output

    -
    "
    +
    1
    "
    - +
    diff --git a/tutorials/intro-to-liquid.html b/tutorials/intro-to-liquid.html index 403197eb1..e379dd55f 100644 --- a/tutorials/intro-to-liquid.html +++ b/tutorials/intro-to-liquid.html @@ -38,7 +38,7 @@ - +
    @@ -96,36 +96,32 @@

    LiquidJS syntax is relatively simple. There’re 2 types of markups in LiquidJS:

    • Tags. A tag consists of a tag name and optional arguments wrapped between {% and %}.
    • -
    • Outputs. An output consists of a value and a list of filters, which is optional, wrapped between {{` and `}}.
    • +
    • Outputs. An output consists of a value and a list of filters, which is optional, wrapped between {{ and }}.
    Live Demo

    Before going into the details, here’s a live demo to play around: https://liquidjs.com/playground.html.

    Outputs

    Outputs are used to output variables, which can be transformed by filters, into HTML. The following template will insert the value of username into the input’s value:

    -
    <input type="text" name="user" value="{{username}}">
    +
    1
    <input type="text" name="user" value="{{username}}">

    Values in output can be transformed by filters before output. To append a string after the variable:

    -
    {{ username | append: ", welcome to LiquidJS!" }}
    +
    1
    {{ username | append: ", welcome to LiquidJS!" }}

    Filters can be chained:

    -
    {{ username | append: ", welcome to LiquidJS!" | capitalize }}
    +
    1
    {{ username | append: ", welcome to LiquidJS!" | capitalize }}

    A complete list of filters supported by LiquidJS can be found here.

    Tags

    Tags are used to control the template rendering process, manipulating template variables, inter-op with other templates, etc. For example assign can be used to define a variable which can be later used in the template:

    -
    {% assign foo = "FOO" %}
    +
    1
    {% assign foo = "FOO" %}

    Typically tags appear in pairs with a start tag and a corresponding end tag. For example:

    -
    {% if foo == "FOO" %}
    -    Variable `foo` equals "FOO"
    -{% else %}
    -    Variable `foo` not equals "FOO"
    -{% endif %}
    +
    1
    2
    3
    4
    5
    {% if foo == "FOO" %}
    Variable `foo` equals "FOO"
    {% else %}
    Variable `foo` not equals "FOO"
    {% endif %}

    A complete list of tags supported by LiquidJS can be found here.

    - +
    diff --git a/tutorials/migrate-to-9.html b/tutorials/migrate-to-9.html index 41d7fb14d..ea360398a 100644 --- a/tutorials/migrate-to-9.html +++ b/tutorials/migrate-to-9.html @@ -38,7 +38,7 @@ - +
    @@ -116,7 +116,7 @@
    - +
    diff --git a/tutorials/operators.html b/tutorials/operators.html index 5a786be5a..e4e9dfefd 100644 --- a/tutorials/operators.html +++ b/tutorials/operators.html @@ -38,7 +38,7 @@ - +
    @@ -106,7 +106,7 @@
    - +
    diff --git a/tutorials/options.html b/tutorials/options.html index 9fb127e67..e06d70501 100644 --- a/tutorials/options.html +++ b/tutorials/options.html @@ -38,7 +38,7 @@ - +
    @@ -93,10 +93,7 @@

    The Liquid constructor accepts a plain object as options to define the behavior of LiquidJS. All of these options are optional thus we can specify any of them, for example the cache option:

    -
    const { Liquid } = require('liquidjs')
    -const engine = new Liquid({
    -    cache: true
    -})
    +
    1
    2
    3
    4
    const { Liquid } = require('liquidjs')
    const engine = new Liquid({
    cache: true
    })
    API Document

    Following is an overview for all the options, for exact types and signatures please refer to LiquidOptions | API.

    @@ -112,10 +109,10 @@

    Note: for historical reasons, it’s named dynamicPartials but it also works for layouts.

    dynamicPartials indicates whether or not to treat filename arguments in include, render, layout tags as a variable. Defaults to true. For example, render the following snippet with scope { file: 'foo.html' } will include the foo.html:

    -
    {% include file %}
    +
    1
    {% include file %}

    Setting dynamicPartials: false, LiquidJS will try to include the file named file, which is weird but allows simpler syntax if your template relations are static:

    -
    {% liquid foo.html %}
    +
    1
    {% liquid foo.html %}
    Common Pitfall

    LiquidJS defaults this option to true to be compatible with shopify/liquid, but if you’re from eleventy it’s set to false by default (see Quoted Include Paths) which I believe is trying to be compatible with Jekyll.

    @@ -129,18 +126,10 @@
  • Parameters are under include variable instead of current scope.
  • For example in the following template, name.html is not quoted, header and "HEADER" are separated by =, and the header parameter is referenced by include.header. More details please check out include.

    -
    // entry template
    -{% include article.html header="HEADER" content="CONTENT" %}
    -
    -// article.html
    -<article>
    -  <header>{{include.header}}</header>
    -  {{include.content}}
    -</article>
    +
    1
    2
    3
    4
    5
    6
    7
    8
    // entry template
    {% include article.html header="HEADER" content="CONTENT" %}

    // article.html
    <article>
    <header>{{include.header}}</header>
    {{include.content}}
    </article>

    extname

    extname defines the default extension name to be appended into filenames if the filename has no extension name. Defaults to '' which means it’s disabled by default. By setting it to .liquid:

    -
    {% render "foo" %}  there's no extname, adds `.liquid` and loads foo.liquid
    -{% render "foo.html" %}  there is an extname already, loads foo.html directly
    +
    1
    2
    {% render "foo" %}  there's no extname, adds `.liquid` and loads foo.liquid
    {% render "foo.html" %} there is an extname already, loads foo.html directly
    Legacy Versions

    Before 2.0.1, extname is set to .liquid by default. To change that you need to set extname: '' explicitly. See #41 for details.

    @@ -160,7 +149,7 @@

    dateFormat is used to specify a default format to output dates. %A, %B %-e, %Y at %-l:%M %P %z will be used if not specified. For example, set dateFormat: %Y-%m-%dT%H:%M:%S:%LZ to output all dates in [JavaScript Date.toJson()][https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toJSON] format.

    Trimming

    greedy, trimOutputLeft, trimOutputRight, trimTagLeft, trimTagRight options are used to eliminate extra newlines and indents in templates around Liquid Constructs. See Whitespace Control for details.

    Delimiter

    outputDelimiterLeft, outputDelimiterRight, tagDelimiterLeft, tagDelimiterRight are used to customize the delimiters for LiquidJS Tags and Filters. For example with outputDelimiterLeft: <%=, outputDelimiterRight: %> we are able to avoid conflicts with other languages:

    -
    <%= username | append: ", welcome to LiquidJS!" %>
    +
    1
    <%= username | append: ", welcome to LiquidJS!" %>

    Strict

    strictFilters is used to assert filter existence. If set to false, undefined filters will be skipped. Otherwise, undefined filters will cause a parse exception. Defaults to false.

    strictVariables is used to assert variable existence. If set to false, undefined variables will be rendered as empty string. Otherwise, undefined variables will cause a render exception. Defaults to false.

    @@ -173,7 +162,7 @@
    - +
    diff --git a/tutorials/parse-parameters.html b/tutorials/parse-parameters.html index 5310cd6c2..38018a6fc 100644 --- a/tutorials/parse-parameters.html +++ b/tutorials/parse-parameters.html @@ -38,7 +38,7 @@ - +
    @@ -93,75 +93,31 @@

    Access Raw Parameters

    As covered in Register Filters/Tags, tag parameters is available on tagToken.args as a raw string. For example:

    -
    // Usage: {% random foo bar coo %}
    -// Output: "foo", "bar" or "coo"
    -engine.registerTag('random', {
    -  parse(tagToken) {
    -    // tagToken.args === "foo bar coo"
    -    this.items = tagToken.args.split(' ')
    -  },
    -  render(context, emitter) {
    -    // get a random index
    -    const index = Math.floor(this.items.length * Math.random())
    -    // output that item
    -    emitter.write(this.items[index])
    -  }
    -})
    +
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    // Usage: {% random foo bar coo %}
    // Output: "foo", "bar" or "coo"
    engine.registerTag('random', {
    parse(tagToken) {
    // tagToken.args === "foo bar coo"
    this.items = tagToken.args.split(' ')
    },
    render(context, emitter) {
    // get a random index
    const index = Math.floor(this.items.length * Math.random())
    // output that item
    emitter.write(this.items[index])
    }
    })

    Here’s a JSFiddle version: https://jsfiddle.net/ctj364up/2/

    Parse Parameters as Values

    Sometimes we need more dynamic tags and want to pass values to the custom tag instead of static strings. Variables in LiquidJS can be literal (string, number, etc.) or a variable from current context scope.

    The following modified template also contains 3 values to random from, but they’re values instead of static strings. The first one is string literal, second one is an identifier, third one is a property access sequence containing two identifiers.

    -
    {% random "foo" bar obj.coo %}
    +
    1
    {% random "foo" bar obj.coo %}

    It can be tricky to parse all these cases manually, but there’s a Tokenizer class in LiquidJS you can make use of.

    -
    const { Liquid, Tokenizer, evalToken } = require('liquidjs')
    -engine.registerTag('random', {
    -  parse(tagToken) {
    -    const tokenizer = new Tokenizer(tagToken.args)
    -    this.items = []
    -    while (!tokenizer.end()) {
    -      // here readValue() returns a LiteralToken or PropertyAccessToken
    -      this.items.push(tokenizer.readValue())
    -    }
    -  },
    -  * render(context, emitter) {
    -    const index = Math.floor(this.items.length * Math.random())
    -    const token = this.items[index]
    -    // in LiquidJS, we use yield to wait for async call
    -    const value = yield evalToken(token, context)
    -    emitter.write(value)
    -  }
    -})
    +
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    const { Liquid, Tokenizer, evalToken } = require('liquidjs')
    engine.registerTag('random', {
    parse(tagToken) {
    const tokenizer = new Tokenizer(tagToken.args)
    this.items = []
    while (!tokenizer.end()) {
    // here readValue() returns a LiteralToken or PropertyAccessToken
    this.items.push(tokenizer.readValue())
    }
    },
    * render(context, emitter) {
    const index = Math.floor(this.items.length * Math.random())
    const token = this.items[index]
    // in LiquidJS, we use yield to wait for async call
    const value = yield evalToken(token, context)
    emitter.write(value)
    }
    })

    Calling this tag in scope { bar: "bar", obj: { coo: "coo" } } yields exactly the same result as the first example. See this JSFiddle: https://jsfiddle.net/ctj364up/3/

    Async and Promises

    Async calls in LiquidJS are implemented by generators directly, for we can call generators in synchronous manner so this tag implementation is also valid for renderSync(), parseAndRenderSync(), renderFileSync(). If you need to await a promise in tag implementation, simply replace await somePromise with yield somePromise and keep * render() instead of async render() will do the trick. See Sync and Async for more details.

    Parse Key-Value Pairs as Named Parameters

    Named parameters become very handy when there’re optional parameters or lots of parameters, in which case the order of parameters is not important. This is exactly what Hash class is invented for.

    -
    {% random from:2, to:max %}
    +
    1
    {% random from:2, to:max %}

    In the above example, we’re trying to generate a random number in the range [2, max]. We’ll use Hash to parse from and to parameters.

    -
    const { Liquid, Hash } = require('liquidjs')
    -
    -engine.registerTag('random', {
    -  parse(tagToken) {
    -    // parse the parameters structure into `this.args`
    -    this.args = new Hash(tagToken.args)
    -  },
    -  * render(context, emitter) {
    -    // evaluate the parameters in `context`
    -    const {from, to} = yield this.args.render(context)
    -    const length = to - from + 1
    -    const value = from + Math.floor(length * Math.random())
    -    emitter.write(value)
    -  }
    -})
    +
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    const { Liquid, Hash } = require('liquidjs')

    engine.registerTag('random', {
    parse(tagToken) {
    // parse the parameters structure into `this.args`
    this.args = new Hash(tagToken.args)
    },
    * render(context, emitter) {
    // evaluate the parameters in `context`
    const {from, to} = yield this.args.render(context)
    const length = to - from + 1
    const value = from + Math.floor(length * Math.random())
    emitter.write(value)
    }
    })

    Rendering {% random from:2, to:max %} in scope { max: 10 } will generate a random number in the range [2, 10]. See this JSFiddle: https://jsfiddle.net/ctj364up/4/

    - +
    diff --git a/tutorials/partials-and-layouts.html b/tutorials/partials-and-layouts.html index 51fb225f2..6ec29e2a7 100644 --- a/tutorials/partials-and-layouts.html +++ b/tutorials/partials-and-layouts.html @@ -38,7 +38,7 @@ - +
    @@ -93,44 +93,26 @@

    Render Partials

    For the following template files:

    -
    // file: color.liquid
    -color: '{{ color }}' shape: '{{ shape }}'
    -
    -// file: theme.liquid
    -{% assign shape = 'circle' %}
    -{% render 'color.liquid' %}
    -{% render 'color.liquid' with 'red' %}
    -{% render 'color.liquid', color: 'yellow', shape: 'square' %}
    +
    1
    2
    3
    4
    5
    6
    7
    8
    // file: color.liquid
    color: '{{ color }}' shape: '{{ shape }}'

    // file: theme.liquid
    {% assign shape = 'circle' %}
    {% render 'color.liquid' %}
    {% render 'color.liquid' with 'red' %}
    {% render 'color.liquid', color: 'yellow', shape: 'square' %}

    The output will be:

    -
    color: '' shape: 'circle'
    -color: 'red' shape: 'circle'
    -color: 'yellow' shape: 'square'
    +
    1
    2
    3
    color: '' shape: 'circle'
    color: 'red' shape: 'circle'
    color: 'yellow' shape: 'square'

    More details please refer to the render tag.

    The ".liquid" Extension

    The “.liquid” extension in layout, render and include can be omitted if Liquid instance is created using extname: ".liquid" option. See the extname option for details.

    Layout Templates (Extends)

    For the following template files:

    -
    // file: default-layout.liquid
    -Header
    -{% block content %}My default content{% endblock %}
    -Footer
    -
    -// file: page.liquid
    -{% layout "default-layout.liquid" %}
    -{% block content %}My page content{% endblock %}
    +
    1
    2
    3
    4
    5
    6
    7
    8
    // file: default-layout.liquid
    Header
    {% block content %}My default content{% endblock %}
    Footer

    // file: page.liquid
    {% layout "default-layout.liquid" %}
    {% block content %}My page content{% endblock %}

    The output of page.liquid:

    -
    Header
    -My page content
    -Footer
    +
    1
    2
    3
    Header
    My page content
    Footer

    More details please refer to the layout tag.

    - +
    diff --git a/tutorials/plugins.html b/tutorials/plugins.html index b69211c20..1dd3ffbe0 100644 --- a/tutorials/plugins.html +++ b/tutorials/plugins.html @@ -38,7 +38,7 @@ - +
    @@ -95,22 +95,10 @@

    A number of tags and filters can be encapsulated into a plugin, which will be typically installed via npm. This article provides information about how to create and use a plugin.

    Write a Plugin

    A liquidjs plugin is simple function which takes the Liquid class as the first parameter and the Liquid instance for this. We can call liquidjs APIs on this to make certain changes, especially register filters and tags.

    Now we’ll make a plugin to upper case every letter of the input, save the following snippet to upup.js:

    -
    /**
    - * Inside the plugin function, `this` refers to the Liquid instance.
    - *
    - * @param Liquid: provides facilities to implement tags and filters.
    - */
    -module.exports = function (Liquid) {
    -    this.registerFilter('upup', x => x.toUpperCase());
    -}
    +
    1
    2
    3
    4
    5
    6
    7
    8
    /**
    * Inside the plugin function, `this` refers to the Liquid instance.
    *
    * @param Liquid: provides facilities to implement tags and filters.
    */
    module.exports = function (Liquid) {
    this.registerFilter('upup', x => x.toUpperCase());
    }

    Use a Plugin

    Simply pass the plugin function into the .plugin() method:

    -
    const engine = new Liquid()
    -
    -engine.plugin(require('./upup.js'));
    -engine
    -    .parseAndRender('{{ "foo" | upup }}')
    -    .then(console.log)  // outputs "FOO"
    +
    1
    2
    3
    4
    5
    6
    const engine = new Liquid()

    engine.plugin(require('./upup.js'));
    engine
    .parseAndRender('{{ "foo" | upup }}')
    .then(console.log) // outputs "FOO"

    Plugin List

    Since this library excludes certain features that are available on the Shopify platform but not on the Shopify/liquid repo, see Differences with Shopify/liquid.

    Here’s a list of plugins that backfill those features. Feel free to add yours, this file is publicly editable.

    @@ -121,7 +109,7 @@ engine
    - +
    diff --git a/tutorials/register-filters-tags.html b/tutorials/register-filters-tags.html index cb5e8c161..6c750509e 100644 --- a/tutorials/register-filters-tags.html +++ b/tutorials/register-filters-tags.html @@ -38,7 +38,7 @@ - +
    @@ -92,67 +92,27 @@
    -

    Register Tags

    // Usage: {% upper name %}
    -import { Value, TagToken, Context, Emitter, TopLevelToken } from 'liquidjs'
    -
    -engine.registerTag('upper', {
    -    parse: function(tagToken: TagToken, remainTokens: TopLevelToken[]) {
    -        this.value = new Value(token.args, liquid)
    -    },
    -    render: function*(ctx: Context) {
    -        const str = yield this.value.value(ctx); // 'alice'
    -        return str.toUpperCase() // 'ALICE'
    -    }
    -});
    +

    Register Tags

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    // Usage: {% upper name %}
    import { Value, TagToken, Context, Emitter, TopLevelToken } from 'liquidjs'

    engine.registerTag('upper', {
    parse: function(tagToken: TagToken, remainTokens: TopLevelToken[]) {
    this.value = new Value(token.args, liquid)
    },
    render: function*(ctx: Context) {
    const str = yield this.value.value(ctx); // 'alice'
    return str.toUpperCase() // 'ALICE'
    }
    });
    • parse: Read tokens from remainTokens until your end token.
    • render: Combine scope data with your parsed tokens into HTML string.

    For complex tag implementation, you can also provide a tag class:

    -
    // Usage: {% upper name:"alice" %}
    -import { Hash, Tag, TagToken, Context, Emitter, TopLevelToken, Liquid } from 'liquidjs'
    -
    -engine.registerTag('upper', class UpperTag extends Tag {
    -    private hash: Hash
    -    constructor(tagToken: TagToken, remainTokens: TopLevelToken[], liquid: Liquid) {
    -        super(tagToken, remainTokens, liquid)
    -        this.hash = new Hash(tagToken.args)
    -    }
    -    * render(ctx: Context) {
    -        const hash = yield this.hash.render();
    -        return hash.name.toUpperCase() // 'ALICE'
    -    }
    -});
    +
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    // Usage: {% upper name:"alice" %}
    import { Hash, Tag, TagToken, Context, Emitter, TopLevelToken, Liquid } from 'liquidjs'

    engine.registerTag('upper', class UpperTag extends Tag {
    private hash: Hash
    constructor(tagToken: TagToken, remainTokens: TopLevelToken[], liquid: Liquid) {
    super(tagToken, remainTokens, liquid)
    this.hash = new Hash(tagToken.args)
    }
    * render(ctx: Context) {
    const hash = yield this.hash.render();
    return hash.name.toUpperCase() // 'ALICE'
    }
    });

    See existing tag implementations here: https://github.com/harttle/liquidjs/tree/master/src/tags
    See demo example here: https://github.com/harttle/liquidjs/blob/master/demo/typescript/index.ts

    -

    Register Filters

    // Usage: {{ name | upper }}
    -engine.registerFilter('upper', v => v.toUpperCase())
    +

    Register Filters

    1
    2
    // Usage: {{ name | upper }}
    engine.registerFilter('upper', v => v.toUpperCase())

    Filter arguments will be passed to the registered filter function, for example:

    -
    // Usage: {{ 1 | add: 2, 3 }}
    -engine.registerFilter('add', (initial, arg1, arg2) => initial + arg1 + arg2)
    +
    1
    2
    // Usage: {{ 1 | add: 2, 3 }}
    engine.registerFilter('add', (initial, arg1, arg2) => initial + arg1 + arg2)

    See existing filter implementations here: https://github.com/harttle/liquidjs/tree/master/src/filters

    Unregister Tags/Filters

    In some cases it’s desirable to disable some tags/filters (see #324), you’ll need to register a dummy tag/filter in which an corresponding Error throws.

    -
    // disable a tag
    -const disabledTag = {
    -    parse: function(token) {
    -        throw new Error(`tag "${token.name}" disabled`);
    -    }
    -}
    -engine.registerTag('include', disabledTag);
    -
    -// disable a filter
    -function disabledFilter(name) {
    -    return function () {
    -        throw new Error(`filter "${name}" disabled`);
    -    }
    -}
    -engine.registerFilter('plus', disabledFilter('plus'));
    +
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    // disable a tag
    const disabledTag = {
    parse: function(token) {
    throw new Error(`tag "${token.name}" disabled`);
    }
    }
    engine.registerTag('include', disabledTag);

    // disable a filter
    function disabledFilter(name) {
    return function () {
    throw new Error(`filter "${name}" disabled`);
    }
    }
    engine.registerFilter('plus', disabledFilter('plus'));
    - +
    diff --git a/tutorials/render-file.html b/tutorials/render-file.html index f0bef3b0e..ca40d4363 100644 --- a/tutorials/render-file.html +++ b/tutorials/render-file.html @@ -38,7 +38,7 @@ - +
    @@ -94,31 +94,17 @@

    For a typical project there could be a directory of template files, you’ll need to set the template root and call renderFile or renderFileSync to render a specific file.

    Render a File

    For example you have a directory of templates like this:

    -
    .
    -├── index.js
    -└── views/
    -  ├── hello.liquid
    -  └── world.liquid
    +
    1
    2
    3
    4
    5
    .
    ├── index.js
    └── views/
    ├── hello.liquid
    └── world.liquid

    hello.liquid contains a single line `name: {{name}}`.
    Now save the following contents into index.js:

    -
    var engine = new Liquid({
    -    root: path.resolve(__dirname, 'views/'),  // root for layouts/includes lookup
    -    extname: '.liquid'          // used for layouts/includes, defaults ""
    -});
    -engine
    -    .renderFile("hello", {name: 'alice'})   // will read and render `views/hello.liquid`
    -    .then(console.log)  // outputs "Alice"
    +
    1
    2
    3
    4
    5
    6
    7
    var engine = new Liquid({
    root: path.resolve(__dirname, 'views/'), // root for layouts/includes lookup
    extname: '.liquid' // used for layouts/includes, defaults ""
    });
    engine
    .renderFile("hello", {name: 'alice'}) // will read and render `views/hello.liquid`
    .then(console.log) // outputs "Alice"

    Run node index.js and you’ll get output like this:

    -
    > node index.js
    -name: alice
    +
    1
    2
    > node index.js
    name: alice

    Template Lookup

    Template files names passed to renderFile, parseFile, renderFileSync, parseFileSync APIs,
    and include, layout tags are resolved against the root option.

    It can be a string-typed path (see above example), or a list of root directories, in which case templates will be looked up in that order. e.g.

    -
    var engine = new Liquid({
    -    root: ['views/', 'views/partials/'],
    -    extname: '.liquid'
    -});
    +
    1
    2
    3
    4
    var engine = new Liquid({
    root: ['views/', 'views/partials/'],
    extname: '.liquid'
    });
    Relative Paths

    Relative paths in root will be resolved against cwd().

    @@ -134,50 +120,21 @@ name: alice
    - +
    diff --git a/tutorials/render-tag-content.html b/tutorials/render-tag-content.html index 760de951c..50228b0b7 100644 --- a/tutorials/render-tag-content.html +++ b/tutorials/render-tag-content.html @@ -38,7 +38,7 @@ - +
    @@ -94,101 +94,19 @@

    Custom tags can have content template and can be nested. This article describes how to implement custom tags that consists of a begin tag, an end tag, and template content between them.

    Render Tag Content

    We’ll start with a simple tag wrap which wraps its content into a <div class="wrapper"></div> element:

    -
    {% wrap %}
    -  {{ "hello world!" | capitalize }}
    -{% endwrap %}
    +
    1
    2
    3
    {% wrap %}
    {{ "hello world!" | capitalize }}
    {% endwrap %}

    Expected output:

    -
    <div class='wrapper'>
    -  Hello world!
    -</div>
    +
    1
    2
    3
    <div class='wrapper'>
    Hello world!
    </div>
    -

    Firstly, register a tag with name wrap and parse the content into this.tpls. Here in parse(tagToken, remainTokens),

    +

    Firstly, [register][register-tags] a tag with name wrap and parse the content into this.tpls. Here in parse(tagToken, remainTokens),

      -
    • tagToken is current token {% wrap %}, and
    • -
    • remainTokens is an array of all tokens following {% wrap %} until the end of this template file.
    • +
    • tagToken is current token `
    -

    Basically, what we need to do is take/.shift() enough tags from remainTokens until we got a endwrap token (the name can be arbitrary, but in convention, we need it to be endwrap). And if there’s no endwrap until the end of template file, we need to throw an tag-not-closed Error.

    -
    engine.registerTag('wrap', {
    -  parse(tagToken, remainTokens) {
    -    this.tpls = []
    -    let closed = false
    -    while(remainTokens.length) {
    -      let token = remainTokens.shift()
    -      // we got the end tag! stop taking tokens
    -      if (token.name === 'endwrap') {
    -        closed = true
    -        break
    -      }
    -      // parse token into template
    -      // parseToken() may consume more than 1 tokens
    -      // e.g. {% if %}...{% endif %}
    -      let tpl = this.liquid.parser.parseToken(token, remainTokens)
    -      this.tpls.push(tpl)
    -    }
    -    if (!closed) throw new Error(`tag ${tagToken.getText()} not closed`)
    -  },
    -  * render(context, emitter) {
    -    emitter.write("<div class='wrapper'>")
    -    yield this.liquid.renderer.renderTemplates(this.tpls, context, emitter)
    -    emitter.write("</div>")
    -  }
    -})
    - -

    .renderTemplates() can be async, we need yield to wait it complete. More details on async in LiquidJS, please refer to Sync and Async. Other parts of render() method is quite straightforward. Here’s a JSFiddle version: https://jsfiddle.net/por0zcn1/3/

    -

    Using ParseStream

    When it comes to complex tags like for and if, the parse() can be very complicated. There’s a ParseStream utility to organize the parse() in event-based style. Following is a re-written parse() using ParseStream and does exactly the same as above example.

    -
    parse(tagToken, remainTokens) {
    -  this.tpls = []
    -  this.liquid.parser.parseStream(remainTokens)
    -    .on('template', tpl => this.tpls.push(tpl))
    -    // note that we cannot use arrow function because we need `this`
    -    .on('tag:endwrap', function () { this.stop() })
    -    .on('end', () => { throw new Error(`tag ${tagToken.getText()} not closed`) })
    -    .start()
    -}
    - -

    Here’s a JSFiddle version: https://jsfiddle.net/por0zcn1/4/. For simplicity, the following examples are implemented using ParseStream.

    -

    Manipulate the Context

    The wrap tag above doesn’t seem to be very useful, without using that tag we can render the content anyway. Now we’re going to implement a repeat tag to render the content 2 times (we can also add a parameter to render arbitrary times).

    -
    {% repeat %}
    -  {{ repeat.i }}. {{ "hello world!" | capitalize }}
    -{% endrepeat %}`
    - -

    Expected outputs:

    -
    1. Hello world!
    -2. Hello world!
    - -

    As you’ve noticed, there’s an additional repeat.i in the context of repeat. That is implemented by manipulating the Context.

    -
    Context

    Context defines the value of each variable in Liquid template. In LiquidJS, a Context consists of a stack of Scopes. A Scope is a plain object like the one specified in engine.render(tpl, scope).

    -
    - -

    Each time we enter a new Context, we need to push a new Scope. And when we finish rendering and exit the Context, we pop the Scope from the Context. As you can see in the following implementation:

    -
    engine.registerTag('repeat', {
    -  parse(tagToken, remainTokens) {
    -    this.tpls = []
    -    this.liquid.parser.parseStream(remainTokens)
    -      .on('template', tpl => this.tpls.push(tpl))
    -      .on('tag:endrepeat', function () { this.stop() })
    -      .on('end', () => { throw new Error(`tag ${tagToken.getText()} not closed`) })
    -      .start()
    -  },
    -  * render(context, emitter) {
    -    const repeat = { i: 1 }
    -    context.push({ repeat })
    -    yield this.liquid.renderer.renderTemplates(this.tpls, context, emitter)
    -    repeat.i++
    -    yield this.liquid.renderer.renderTemplates(this.tpls, context, emitter)
    -    context.pop()
    -  }
    -})
    - -

    The parse() is exactly the same as wrap tag, we repeat the content simply by calling .renderTemplates(this.tpls) twice during render(). Here’s the JSFiddle: https://jsfiddle.net/por0zcn1/2/

    -
    Use Push & Pop in Pairs

    context.push() and context.pop() have to be used in pairs. Failing to pop() the Scope you pushed will leak the Scope to latter templates and may corrupt the Context stack.

    -
    -
    - +
    @@ -197,7 +115,7 @@
    Contents -
    1. Render Tag Content
    2. Using ParseStream
    3. Manipulate the Context
    +
    1. Render Tag Content
    Back to Top
    diff --git a/tutorials/setup.html b/tutorials/setup.html index 18e5731ce..ba3e3ab92 100644 --- a/tutorials/setup.html +++ b/tutorials/setup.html @@ -38,7 +38,7 @@ - +
    @@ -94,34 +94,21 @@

    In case you’re not familiar with Liquid Template Language, see Introduction to Liquid Template Language.

    LiquidJS in Node.js

    Install via npm:

    -
    npm install --save liquidjs
    +
    1
    npm install --save liquidjs
    -
    var { Liquid } = require('liquidjs');
    -var engine = new Liquid();
    -
    -engine
    -    .parseAndRender('{{name | capitalize}}', {name: 'alice'})
    -    .then(console.log);     // outputs 'Alice'
    +
    1
    2
    3
    4
    5
    6
    var { Liquid } = require('liquidjs');
    var engine = new Liquid();

    engine
    .parseAndRender('{{name | capitalize}}', {name: 'alice'})
    .then(console.log); // outputs 'Alice'
    Working Demo

    Here’s a working demo for LiquidJS usage in Node.js: liquidjs/demo/nodejs/.

    Type definitions for LiquidJS are also exported and published, which makes it more enjoyable for TypeScript projects:

    -
    import { Liquid } from 'liquidjs';
    -const engine = new Liquid();
    -
    -engine
    -    .parseAndRender('{{name | capitalize}}', {name: 'alice'})
    -    .then(console.log);     // outputs 'Alice'
    +
    1
    2
    3
    4
    5
    6
    import { Liquid } from 'liquidjs';
    const engine = new Liquid();

    engine
    .parseAndRender('{{name | capitalize}}', {name: 'alice'})
    .then(console.log); // outputs 'Alice'
    Working Demo

    Here’s a working demo for LiquidJS usage in TypeScript: liquidjs/demo/typescript/.

    LiquidJS in Browsers

    Pre-built UMD bundles are also available:

    -
    <!--for production-->
    -<script src="https://cdn.jsdelivr.net/npm/liquidjs/dist/liquid.browser.min.js"></script>
    -<!--for development-->
    -<script src="https://cdn.jsdelivr.net/npm/liquidjs/dist/liquid.browser.umd.js"></script>
    +
    1
    2
    3
    4
    <!--for production-->
    <script src="https://cdn.jsdelivr.net/npm/liquidjs/dist/liquid.browser.min.js"></script>
    <!--for development-->
    <script src="https://cdn.jsdelivr.net/npm/liquidjs/dist/liquid.browser.umd.js"></script>
    Working Demo

    Here’s a living demo on jsFiddle: jsfiddle.net/pd4jhzLs/1/, and the source code is also available in liquidjs/demo/browser/.

    @@ -130,32 +117,30 @@ engine

    LiquidJS in CLI

    LiquidJS can also be used to render a template directly from CLI using npx:

    -
    npx liquidjs --template '{{"hello" | capitalize}}'
    +
    1
    npx liquidjs --template '{{"hello" | capitalize}}'

    You can either pass the template inline (as shown above) or you can read it from a file by using the @ character followed by a path, like so:

    -
    npx liquidjs --template @./some-template.liquid
    +
    1
    npx liquidjs --template @./some-template.liquid

    You can also use the @- syntax to read the template from stdin:

    -
    echo '{{"hello" | capitalize}}' | npx liquidjs --template @-
    +
    1
    echo '{{"hello" | capitalize}}' | npx liquidjs --template @-

    A context can be passed in the same ways (i.e. inline, from a path or piped through stdin). The following three are equivalent:

    -
    npx liquidjs --template 'Hello, {{ name }}!' --context '{"name": "Snake"}'
    -npx liquidjs --template 'Hello, {{ name }}!' --context @./some-context.json
    -echo '{"name": "Snake"}' | npx liquidjs --template 'Hello, {{ name }}!' --context @-
    +
    1
    2
    3
    npx liquidjs --template 'Hello, {{ name }}!' --context '{"name": "Snake"}'
    npx liquidjs --template 'Hello, {{ name }}!' --context @./some-context.json
    echo '{"name": "Snake"}' | npx liquidjs --template 'Hello, {{ name }}!' --context @-

    Note that you can only use the stdin specifier @- for a single argument. If you try to use it for both --template and --context you will get an error.

    The rendered output is written to stdout by default, but you can also specify an output file (if the file exists, it will be overwritten):

    -
    npx liquidjs --template '{{"hello" | capitalize}}' --output ./hello.txt
    +
    1
    npx liquidjs --template '{{"hello" | capitalize}}' --output ./hello.txt

    You can also pass a number of options to customize template rendering behavior. For example, the --js-truthy option can be used to enable JavaScript truthiness:

    -
    npx liquidjs --template @./some-template.liquid --js-truthy
    +
    1
    npx liquidjs --template @./some-template.liquid --js-truthy

    Most of the options available through the JavaScript API are also available from the CLI. For help on available options, use npx liquidjs --help.

    Miscellaneous

    A ReactJS demo is also added by @stevenanthonyrevo, see liquidjs/demo/reactjs/.

    - +
    diff --git a/tutorials/sync-and-async.html b/tutorials/sync-and-async.html index 9783fa04e..46931a344 100644 --- a/tutorials/sync-and-async.html +++ b/tutorials/sync-and-async.html @@ -38,7 +38,7 @@ - +
    @@ -110,21 +110,7 @@
  • evalValueSync()
  • Implement Sync-Compatible Tags

    LiquidJS uses a generator-based async implementation to support both async and sync in one piece of tag implementation. For example, below UpperTag can be used in both engine.renderSync() and engine.render().

    -
    import { TagToken, Context, Emitter, TopLevelToken, Value, Tag, Liquid } from 'liquidjs'
    -
    -// Usage: {% upper "alice" %}
    -// Output: ALICE
    -engine.registerTag('upper', class UpperTag extends Tag {
    -  private value: Value
    -  constructor (token: TagToken, remainTokens: TopLevelToken[], liquid: Liquid) {
    -    super(token, remainTokens, liquid)
    -    this.value = new Value(token.args, liquid)
    -  }
    -  * render (ctx: Context, emitter: Emitter) {
    -    const title = yield this.value.value(ctx)
    -    emitter.write(title.toUpperCase())
    -  }
    -})
    +
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    import { TagToken, Context, Emitter, TopLevelToken, Value, Tag, Liquid } from 'liquidjs'

    // Usage: {% upper "alice" %}
    // Output: ALICE
    engine.registerTag('upper', class UpperTag extends Tag {
    private value: Value
    constructor (token: TagToken, remainTokens: TopLevelToken[], liquid: Liquid) {
    super(token, remainTokens, liquid)
    this.value = new Value(token.args, liquid)
    }
    * render (ctx: Context, emitter: Emitter) {
    const title = yield this.value.value(ctx)
    emitter.write(title.toUpperCase())
    }
    })

    All builtin tags are implemented this way and safe to use in both sync and async (I’ll call it sync-compatible). To make your custom tag sync-compatible, you’ll need to:

      @@ -133,54 +119,22 @@ engine.regis
    • do not call any APIs that returns a Promise.

    Call APIs that return a Promise

    But LiquidJS is Promise-friendly, right? You can still call Promise-based functions and wait for that Promise within tag implementations. Just replace await with yield. e.g. we’re calling fs.readFile() which returns a Promise:

    -
    * render (ctx: Context, emitter: Emitter) {
    -  const file = yield this.value.value(ctx)
    -  const title = yield fs.readFile(file, 'utf8')
    -  emitter.write(title.toUpperCase())
    -}
    +
    1
    2
    3
    4
    5
    * render (ctx: Context, emitter: Emitter) {
    const file = yield this.value.value(ctx)
    const title = yield fs.readFile(file, 'utf8')
    emitter.write(title.toUpperCase())
    }

    Now that this * render() calls an API that returns a Promise, so it’s no longer sync-compatible.

    Non Sync-Compatible Tags

    Non sync-compatible tags are also valid tags, will work just fine for asynchronous API calls. When called synchronously, tags that return a Promise will be rendered as [object Promise].

    Convert LiquidJS async Generator to Promise

    You can convert a Generator to Promise by toPromise, for example:

    -
    import { TagToken, Context, Emitter, TopLevelToken, Value, Tag, Liquid, toPromise } from 'liquidjs'
    -
    -// Usage: {% upper "alice" %}
    -// Output: ALICE
    -engine.registerTag('upper', class UpperTag extends Tag {
    -  private value: Value
    -  constructor (token: TagToken, remainTokens: TopLevelToken[], liquid: Liquid) {
    -    super(token, remainTokens, liquid)
    -    this.value = new Value(token.args, liquid)
    -  }
    -  async render (ctx: Context, emitter: Emitter) {
    -    const title = await toPromise(this.value.value(ctx))
    -    emitter.write(title.toUpperCase())
    -  }
    -})
    +
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    import { TagToken, Context, Emitter, TopLevelToken, Value, Tag, Liquid, toPromise } from 'liquidjs'

    // Usage: {% upper "alice" %}
    // Output: ALICE
    engine.registerTag('upper', class UpperTag extends Tag {
    private value: Value
    constructor (token: TagToken, remainTokens: TopLevelToken[], liquid: Liquid) {
    super(token, remainTokens, liquid)
    this.value = new Value(token.args, liquid)
    }
    async render (ctx: Context, emitter: Emitter) {
    const title = await toPromise(this.value.value(ctx))
    emitter.write(title.toUpperCase())
    }
    })

    Async only Tags

    If your tag is intend to be used only asynchronously, it can be declared as async render() so you can use await in its implementation directly:

    -
    import { toPromise, TagToken, Context, Emitter, TopLevelToken, Value, Tag, Liquid } from 'liquidjs'
    -
    -// Usage: {% upper "alice" %}
    -// Output: ALICE
    -engine.registerTag('upper', class UpperTag extends Tag {
    -  private value: Value
    -  constructor (token: TagToken, remainTokens: TopLevelToken[], liquid: Liquid) {
    -    super(token, remainTokens, liquid)
    -    this.value = new Value(token.args, liquid)
    -  }
    -  async render (ctx: Context, emitter: Emitter) {
    -    const title = await toPromise(this.value.value(ctx))
    -    emitter.write(`<h1>${title}</h1>`)
    -  }
    -})
    +
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    import { toPromise, TagToken, Context, Emitter, TopLevelToken, Value, Tag, Liquid } from 'liquidjs'

    // Usage: {% upper "alice" %}
    // Output: ALICE
    engine.registerTag('upper', class UpperTag extends Tag {
    private value: Value
    constructor (token: TagToken, remainTokens: TopLevelToken[], liquid: Liquid) {
    super(token, remainTokens, liquid)
    this.value = new Value(token.args, liquid)
    }
    async render (ctx: Context, emitter: Emitter) {
    const title = await toPromise(this.value.value(ctx))
    emitter.write(`<h1>${title}</h1>`)
    }
    })
    - +
    diff --git a/tutorials/truthy-and-falsy.html b/tutorials/truthy-and-falsy.html index f27358cc3..0e428062f 100644 --- a/tutorials/truthy-and-falsy.html +++ b/tutorials/truthy-and-falsy.html @@ -38,7 +38,7 @@ - +
    @@ -226,7 +226,7 @@
    - +
    diff --git a/tutorials/use-in-expressjs.html b/tutorials/use-in-expressjs.html index fd8843168..b491320a3 100644 --- a/tutorials/use-in-expressjs.html +++ b/tutorials/use-in-expressjs.html @@ -38,7 +38,7 @@ - +
    @@ -93,48 +93,27 @@

    LiquidJS is compatible to the express template engines. You can set liquidjs instance to the view engine option:

    -
    var { Liquid } = require('liquidjs');
    -var engine = new Liquid();
    -
    -// register liquid engine
    -app.engine('liquid', engine.express()); 
    -app.set('views', './views');            // specify the views directory
    -app.set('view engine', 'liquid');       // set liquid to default
    +
    1
    2
    3
    4
    5
    6
    7
    var { Liquid } = require('liquidjs');
    var engine = new Liquid();

    // register liquid engine
    app.engine('liquid', engine.express());
    app.set('views', './views'); // specify the views directory
    app.set('view engine', 'liquid'); // set liquid to default
    Working Demo

    Here’s a working demo for LiquidJS usage in Express.js: liquidjs/demo/express/.

    Template Lookup

    The root option will continue to work as templates root, as you can see in Render A Template File. Additionally, the views option in express.js (as shown above) will also be respected. Say you have a template directory like:

    -
    .
    -├── views1/
    -│ └── hello.liquid
    -└── views2/
    -  └── world.liquid
    +
    1
    2
    3
    4
    5
    .
    ├── views1/
    │ └── hello.liquid
    └── views2/
    └── world.liquid

    And you’re setting template root for liquidjs to views1 and expressjs to views2:

    -
    var { Liquid } = require('liquidjs');
    -var engine = new Liquid({
    -    root: './views1/'
    -});
    -
    -app.engine('liquid', engine.express()); 
    -app.set('views', './views2');            // specify the views directory
    -app.set('view engine', 'liquid');       // set liquid to default
    +
    1
    2
    3
    4
    5
    6
    7
    8
    var { Liquid } = require('liquidjs');
    var engine = new Liquid({
    root: './views1/'
    });

    app.engine('liquid', engine.express());
    app.set('views', './views2'); // specify the views directory
    app.set('view engine', 'liquid'); // set liquid to default

    Both of hello.liquid and world.liquid can be resolved and rendered:

    -
    res.render('hello')
    -res.render('world')
    +
    1
    2
    res.render('hello')
    res.render('world')

    Caching

    Simply setting the cache option to true will enable template caching, as explained in Caching. It’s recommended to enable cache in production environment, which can be done by:

    -
    var { Liquid } = require('liquidjs');
    -var engine = new Liquid({
    -    cache: process.env.NODE_ENV === 'production'
    -});
    +
    1
    2
    3
    4
    var { Liquid } = require('liquidjs');
    var engine = new Liquid({
    cache: process.env.NODE_ENV === 'production'
    });
    - +
    diff --git a/tutorials/whitespace-control.html b/tutorials/whitespace-control.html index a581692ca..99a26b24f 100644 --- a/tutorials/whitespace-control.html +++ b/tutorials/whitespace-control.html @@ -38,7 +38,7 @@ - +
    @@ -94,19 +94,16 @@

    To keep source code neat and indented, we’re adding spaces to our templates. LiquidJS offers whitespace control capabilities to eliminate these unwanted whitespaces in output HTML.

    via Markups

    By default, all tags and output markups lines will generate a NL (\n), and whitespaces if there’s any indentation. For example:

    -
    {%  author = "harttle" %}
    -{{ author }}
    +
    1
    2
    {%  author = "harttle" %}
    {{ author }}

    Outputs (note the blank link):

    -
    
    -harttle
    +
    1
    2

    harttle
    -

    We can include hyphens in your tag syntax ({{-`, `-}}`, `{%-, -%}) to strip whitespace from left or right. For example:

    -
    {% assign author = "harttle" -%}
    -{{ author }}
    +

    We can include hyphens in your tag syntax ({{-, -}}, {%-, -%}) to strip whitespace from left or right. For example:

    +
    1
    2
    {% assign author = "harttle" -%}
    {{ author }}

    Outputs:

    -
    harttle
    +
    1
    harttle

    In this case, the -%} strips the whitespace from the right side of the assign tag.

    via Options

    Alternatively, LiquidJS provides these per engine options to enable whitespace control without sweeping changes of your templates:

    @@ -121,7 +118,7 @@ harttle
    diff --git a/zh-cn/filters/abs.html b/zh-cn/filters/abs.html index c3c8b7502..78f957f65 100644 --- a/zh-cn/filters/abs.html +++ b/zh-cn/filters/abs.html @@ -38,7 +38,7 @@ - +
    @@ -48,7 +48,7 @@
    @@ -155,7 +155,7 @@