Replies: 1 comment 1 reply
-
|
Actually that's because liquid filter names are not always valid identifier (I mean Here's the 1:1 conversion from filter function name to template name: liquidjs/src/util/underscore.ts Lines 128 to 133 in 1af8553 |
Beta Was this translation helpful? Give feedback.
1 reply
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Uh oh!
There was an error while loading. Please reload this page.
-
I was trying to see if I could use LiquidJS filters outside of .liquid templates (well, shimming them into Nunjucks templates using Eleventy, as a proof of concept), but this caught me a bit by surprise:
OUTPUT
{ "filters": [ "Default", "abs", "append", "atLeast", "atMost", "capitalize", "ceil", "compact", "concat", "date", "dividedBy", "downcase", "escape", "escapeOnce", "first", "floor", "join", "json", "last", "lstrip", "map", "minus", "modulo", "newlineToBr", "plus", "prepend", "remove", "removeFirst", "replace", "replaceFirst", "reverse", "round", "rstrip", "size", "slice", "sort", "sortNatural", "split", "strip", "stripHtml", "stripNewlines", "times", "truncate", "truncatewords", "uniq", "upcase", "urlDecode", "urlEncode", "where" ], "liquidVersion": "9.36.0" }What was a bit surprising is that I got an object back with
urlDecodeinstead of the actual filter name,url_decode. Attempting to use some of of these mixed case filters unsurprisingly throws errors:So if I'm trying to manually add these filters into Nunjucks templates, I either have to name each one with the underscore variant, or else slugify the provided filter names myself using something like @sindresorhus/slugify with a custom separator:
OUTPUT
require("liquidjs").filtersNAMEDefaultdefaultabsabsappendappendatLeastat_leastatMostat_mostcapitalizecapitalizeceilceilcompactcompactconcatconcatdatedatedividedBydivided_bydowncasedowncaseescapeescapeescapeOnceescape_oncefirstfirstfloorfloorjoinjoinjsonjsonlastlastlstriplstripmapmapminusminusmodulomodulonewlineToBrnewline_to_brplusplusprependprependremoveremoveremoveFirstremove_firstreplacereplacereplaceFirstreplace_firstreversereverseroundroundrstriprstripsizesizesliceslicesortsortsortNaturalsort_naturalsplitsplitstripstripstripHtmlstrip_htmlstripNewlinesstrip_newlinestimestimestruncatetruncatetruncatewordstruncatewordsuniquniqupcaseupcaseurlDecodeurl_decodeurlEncodeurl_encodewherewhereEXPECTED RESULTS
console.log(require("liquidjs").filters); [Object: null prototype] { escape: [Function: escape], - escapeOnce: [Function: escapeOnce], + escape_once: [Function: escapeOnce], - newlineToBr: [Function: newlineToBr], + newline_to_br: [Function: newlineToBr], - stripHtml: [Function: stripHtml], + strip_html: [Function: stripHtml], abs: [Function (anonymous)], - atLeast: [Function (anonymous)], + at_least: [Function (anonymous)], - atMost: [Function (anonymous)], + at_most: [Function (anonymous)], ceil: [Function (anonymous)], - dividedBy: [Function (anonymous)], + divided_by: [Function (anonymous)], floor: [Function (anonymous)], minus: [Function (anonymous)], modulo: [Function (anonymous)], times: [Function (anonymous)], round: [Function: round], plus: [Function: plus], - urlDecode: [Function: urlDecode], + url_decode: [Function urlDecode], - urlEncode: [Function: urlEncode], + url_encode: [Function: urlEncode], join: [Function (anonymous)], last: [Function (anonymous)], first: [Function (anonymous)], reverse: [Function (anonymous)], sort: [Function: sort], - sortNatural: [Function: sortNatural], + sort_natural: [Function: sortNatural], size: [Function: size], map: [Function: map], compact: [Function: compact], concat: [Function: concat], slice: [Function: slice], where: [Function: where], uniq: [Function: uniq], date: [Function: date], - Default: [Function: Default], + default: [Function: Default], json: [Function: json], append: [Function: append], prepend: [Function: prepend], lstrip: [Function: lstrip], downcase: [Function: downcase], upcase: [Function: upcase], remove: [Function: remove], - removeFirst: [Function: removeFirst], + remove_first: [Function: removeFirst], rstrip: [Function: rstrip], split: [Function: split], strip: [Function: strip], - stripNewlines: [Function: stripNewlines], + strip_newlines: [Function: stripNewlines], capitalize: [Function: capitalize], replace: [Function: replace], - replaceFirst: [Function: replaceFirst], + replace_first: [Function: replaceFirst], truncate: [Function: truncate], truncatewords: [Function: truncatewords] }Feel free to close this. I know it's a pretty bizarre edge case, but thought it might be worth documenting here, and fixing it is possibly a breaking change in case somebody is already relying on the current
.stripNewlinesvs proposedstrip_newlinesobject key naming.Beta Was this translation helpful? Give feedback.
All reactions