@diplodoc/liquid 1.0.0 → 1.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (71) hide show
  1. package/lib/conditions.d.ts +3 -0
  2. package/lib/{liquid/conditions.js → conditions.js} +30 -51
  3. package/lib/conditions.js.map +1 -0
  4. package/lib/cycles.d.ts +3 -0
  5. package/lib/cycles.js +128 -0
  6. package/lib/cycles.js.map +1 -0
  7. package/lib/{liquid/errors.js → errors.js} +5 -2
  8. package/lib/errors.js.map +1 -0
  9. package/lib/frontmatter.d.ts +3 -4
  10. package/lib/frontmatter.js +14 -35
  11. package/lib/frontmatter.js.map +1 -1
  12. package/lib/index.d.ts +9 -0
  13. package/lib/index.js +73 -0
  14. package/lib/index.js.map +1 -0
  15. package/lib/sourcemap.d.ts +19 -0
  16. package/lib/sourcemap.js +99 -0
  17. package/lib/sourcemap.js.map +1 -0
  18. package/lib/substitutions.d.ts +2 -0
  19. package/lib/substitutions.js +51 -0
  20. package/lib/substitutions.js.map +1 -0
  21. package/lib/syntax/evaluate.d.ts +3 -0
  22. package/lib/{liquid/evaluation.js → syntax/evaluate.js} +34 -28
  23. package/lib/syntax/evaluate.js.map +1 -0
  24. package/lib/{liquid → syntax}/filters.d.ts +0 -6
  25. package/lib/{liquid → syntax}/filters.js +3 -10
  26. package/lib/syntax/filters.js.map +1 -0
  27. package/lib/{liquid → syntax}/lexical.js +5 -5
  28. package/lib/syntax/lexical.js.map +1 -0
  29. package/lib/types.d.ts +17 -0
  30. package/lib/types.js +3 -0
  31. package/lib/types.js.map +1 -0
  32. package/lib/utils.d.ts +19 -0
  33. package/lib/utils.js +89 -0
  34. package/lib/utils.js.map +1 -0
  35. package/package.json +16 -15
  36. package/lib/getObject.d.ts +0 -2
  37. package/lib/getObject.js +0 -14
  38. package/lib/getObject.js.map +0 -1
  39. package/lib/liquid/conditions.d.ts +0 -6
  40. package/lib/liquid/conditions.js.map +0 -1
  41. package/lib/liquid/cycles.d.ts +0 -4
  42. package/lib/liquid/cycles.js +0 -154
  43. package/lib/liquid/cycles.js.map +0 -1
  44. package/lib/liquid/errors.js.map +0 -1
  45. package/lib/liquid/evaluation.d.ts +0 -4
  46. package/lib/liquid/evaluation.js.map +0 -1
  47. package/lib/liquid/filters.js.map +0 -1
  48. package/lib/liquid/index.d.ts +0 -15
  49. package/lib/liquid/index.js +0 -132
  50. package/lib/liquid/index.js.map +0 -1
  51. package/lib/liquid/legacyConditions.d.ts +0 -4
  52. package/lib/liquid/legacyConditions.js +0 -174
  53. package/lib/liquid/legacyConditions.js.map +0 -1
  54. package/lib/liquid/lexical.js.map +0 -1
  55. package/lib/liquid/services/argv.d.ts +0 -16
  56. package/lib/liquid/services/argv.js +0 -17
  57. package/lib/liquid/services/argv.js.map +0 -1
  58. package/lib/liquid/sourceMap.d.ts +0 -19
  59. package/lib/liquid/sourceMap.js +0 -51
  60. package/lib/liquid/sourceMap.js.map +0 -1
  61. package/lib/liquid/substitutions.d.ts +0 -2
  62. package/lib/liquid/substitutions.js +0 -56
  63. package/lib/liquid/substitutions.js.map +0 -1
  64. package/lib/liquid/utils.d.ts +0 -8
  65. package/lib/liquid/utils.js +0 -24
  66. package/lib/liquid/utils.js.map +0 -1
  67. package/lib/log.d.ts +0 -18
  68. package/lib/log.js +0 -54
  69. package/lib/log.js.map +0 -1
  70. /package/lib/{liquid/errors.d.ts → errors.d.ts} +0 -0
  71. /package/lib/{liquid → syntax}/lexical.d.ts +0 -0
@@ -0,0 +1,3 @@
1
+ import type { LiquidContext } from './types';
2
+ import type { SourceMap } from './sourcemap';
3
+ export declare function applyConditions(this: LiquidContext, input: string, vars: Record<string, unknown>, sourcemap?: SourceMap): string;
@@ -2,50 +2,30 @@
2
2
  var __importDefault = (this && this.__importDefault) || function (mod) {
3
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
4
  };
5
- const chalk_1 = require("chalk");
6
- const log_1 = require("../log");
7
- const evaluation_1 = require("./evaluation");
8
- const lexical_1 = require("./lexical");
9
- const sourceMap_1 = require("./sourceMap");
10
- const legacyConditions_1 = __importDefault(require("./legacyConditions"));
11
- function resourcemap(source, ifTag, ifCon, api) {
12
- const [sourseStartLine, sourceEndLine] = [
13
- (0, sourceMap_1.getLineNumber)(source, ifTag.start + 1),
14
- (0, sourceMap_1.getLineNumber)(source, ifTag.end - 1),
15
- ];
16
- if (sourseStartLine === sourceEndLine || ifTag === ifCon) {
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.applyConditions = applyConditions;
7
+ const chalk_1 = __importDefault(require("chalk"));
8
+ const lexical_1 = require("./syntax/lexical");
9
+ const evaluate_1 = require("./syntax/evaluate");
10
+ function resourcemap(source, ifTag, ifCon, sourcemap) {
11
+ const lines = sourcemap.lines(source);
12
+ const sourcel = sourcemap.location(ifTag.start + 1, ifTag.end - 1, lines);
13
+ const isInlineTag = sourcel.start === sourcel.end;
14
+ if (isInlineTag || ifTag === ifCon) {
17
15
  return;
18
16
  }
19
- const linesTotal = source.split('\n').length;
20
- const { getSourceMapValue, moveLines, removeLines } = api;
21
- let offsetRestLines;
22
17
  if (ifCon) {
23
- const [resultStartLine, resultEndLine] = [
24
- (0, sourceMap_1.getLineNumber)(source, ifCon.start),
25
- (0, sourceMap_1.getLineNumber)(source, ifCon.end),
26
- ];
27
- // Move condition's content to the top
28
- const offsetContentLines = sourseStartLine - resultStartLine;
29
- moveLines({
30
- start: resultStartLine,
31
- end: resultEndLine,
32
- offset: offsetContentLines,
33
- withReplace: true,
18
+ const resultl = sourcemap.location(ifCon.start, ifCon.end, lines);
19
+ sourcemap.patch({
20
+ delete: [
21
+ { start: resultl.end + 1, end: sourcel.end },
22
+ { start: sourcel.start, end: resultl.start - 1 },
23
+ ],
34
24
  });
35
- // Remove the rest lines of the condition block
36
- removeLines({ start: sourseStartLine, end: resultStartLine - 1 });
37
- removeLines({ start: resultEndLine + 1, end: sourceEndLine });
38
- // Calculate an offset of the rest lines
39
- offsetRestLines = getSourceMapValue(resultEndLine) - sourceEndLine;
40
25
  }
41
26
  else {
42
- // Remove the whole condition block
43
- removeLines({ start: sourseStartLine, end: sourceEndLine });
44
- // Calculate offset of the rest lines
45
- offsetRestLines = sourseStartLine - sourceEndLine - 1;
27
+ sourcemap.patch({ delete: [sourcel] });
46
28
  }
47
- // Offset the rest lines
48
- moveLines({ start: sourceEndLine + 1, end: linesTotal, offset: offsetRestLines });
49
29
  }
50
30
  function headLinebreak(raw) {
51
31
  const match = raw.match(/^([^{]+){.*/);
@@ -155,11 +135,12 @@ class IfTag {
155
135
  }
156
136
  }
157
137
  }
158
- function inlineConditions(content, ifTag, vars, strict) {
138
+ function inlineConditions(content, vars, ifTag) {
139
+ const { conditions } = this.settings;
159
140
  let ifCon = null;
160
141
  for (const condition of ifTag) {
161
- const value = (0, evaluation_1.evalExp)(condition.expr, vars, strict);
162
- if (condition.expr && value === evaluation_1.NoValue) {
142
+ const value = evaluate_1.evaluate.call(this, condition.expr, vars, conditions === 'strict');
143
+ if (condition.expr && value === evaluate_1.NoValue) {
163
144
  return {
164
145
  result: content,
165
146
  // Fix offset for next matches.
@@ -182,12 +163,8 @@ function inlineConditions(content, ifTag, vars, strict) {
182
163
  ifCon,
183
164
  };
184
165
  }
185
- module.exports = function conditions(input, vars, path, settings) {
186
- if (settings === null || settings === void 0 ? void 0 : settings.useLegacyConditions) {
187
- return (0, legacyConditions_1.default)(input, vars, path, settings);
188
- }
189
- const sourceMap = (settings === null || settings === void 0 ? void 0 : settings.sourceMap) || {};
190
- const strict = (settings === null || settings === void 0 ? void 0 : settings.strict) || false;
166
+ function applyConditions(input, vars, sourcemap) {
167
+ const { path } = this;
191
168
  const tagStack = [];
192
169
  // Consumes all between curly braces
193
170
  // and all closest upon to first linebreak before and after braces.
@@ -219,12 +196,14 @@ module.exports = function conditions(input, vars, path, settings) {
219
196
  const ifTag = tagStack.pop();
220
197
  if (!ifTag) {
221
198
  // TODO(3y3): make lint rule
222
- log_1.log.error(`If block must be opened before close${path ? ` in ${(0, chalk_1.bold)(path)}` : ''}`);
199
+ this.log.error(`If block must be opened before close${path ? ` in ${chalk_1.default.bold(path)}` : ''}`);
223
200
  break;
224
201
  }
225
202
  ifTag.closeCondition(match[1], match.index);
226
- const { result, lastIndex, ifCon } = inlineConditions(input, ifTag, vars, strict);
227
- resourcemap(input, ifTag, ifCon, (0, sourceMap_1.createSourceMapApi)(sourceMap));
203
+ const { result, lastIndex, ifCon } = inlineConditions.call(this, input, vars, ifTag);
204
+ if (sourcemap) {
205
+ resourcemap(input, ifTag, ifCon, sourcemap);
206
+ }
228
207
  R_LIQUID.lastIndex = lastIndex;
229
208
  input = result;
230
209
  break;
@@ -236,8 +215,8 @@ module.exports = function conditions(input, vars, path, settings) {
236
215
  }
237
216
  }
238
217
  if (tagStack.length !== 0) {
239
- log_1.log.error(`Condition block must be closed${path ? ` in ${(0, chalk_1.bold)(path)}` : ''}`);
218
+ this.log.error(`Condition block must be closed${path ? ` in ${chalk_1.default.bold(path)}` : ''}`);
240
219
  }
241
220
  return input;
242
- };
221
+ }
243
222
  //# sourceMappingURL=conditions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"conditions.js","sourceRoot":"","sources":["../src/conditions.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { LiquidContext } from './types';
2
+ import type { SourceMap } from './sourcemap';
3
+ export declare function applyCycles(this: LiquidContext, input: string, vars: Record<string, unknown>, sourcemap?: SourceMap): string;
package/lib/cycles.js ADDED
@@ -0,0 +1,128 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.applyCycles = applyCycles;
7
+ const chalk_1 = __importDefault(require("chalk"));
8
+ const lexical_1 = require("./syntax/lexical");
9
+ const evaluate_1 = require("./syntax/evaluate");
10
+ const utils_1 = require("./utils");
11
+ const index_1 = require("./index");
12
+ function resourcemap(source, template, result, forTag, sourcemap) {
13
+ const lines = sourcemap.lines(source);
14
+ if (!forTag.multiline) {
15
+ return;
16
+ }
17
+ sourcemap.patch({
18
+ delete: [
19
+ sourcemap.location(forTag.startPos, forTag.contentStart - 1, lines),
20
+ sourcemap.location(forTag.contentEnd + 1, forTag.endPos, lines),
21
+ ],
22
+ replace: [
23
+ [
24
+ sourcemap.location(forTag.contentStart, forTag.contentStart, lines).start,
25
+ template,
26
+ result,
27
+ ],
28
+ ],
29
+ });
30
+ }
31
+ function inlineConditions(content, vars, forTag, sourcemap) {
32
+ const forTemplate = content.substring(forTag.contentStart, forTag.contentEnd);
33
+ let collection = evaluate_1.evaluate.call(this, forTag.collectionName, vars);
34
+ if (!collection || !Array.isArray(collection)) {
35
+ collection = [];
36
+ this.log.error(`${chalk_1.default.bold(forTag.collectionName)} is undefined or not iterable`);
37
+ }
38
+ const results = collection.map((item) => {
39
+ const newVars = { ...vars, [forTag.variableName]: item };
40
+ return index_1.liquidSnippet.call(this, forTemplate, newVars).replace(/ +$/, '');
41
+ });
42
+ let res = results.join(forTag.multiline ? '\n' : '');
43
+ if (sourcemap) {
44
+ resourcemap(content, forTemplate, res, forTag, sourcemap);
45
+ }
46
+ const preparedLeftContent = (0, utils_1.getPreparedLeftContent)({
47
+ content,
48
+ tagStartPos: forTag.startPos,
49
+ tagContent: res,
50
+ });
51
+ let shift = 0;
52
+ if (res === '' &&
53
+ preparedLeftContent[preparedLeftContent.length - 1] === '\n' &&
54
+ content[forTag.endPos] === '\n') {
55
+ shift = 1;
56
+ }
57
+ if (res[0] === ' ') {
58
+ res = res.substring(1);
59
+ }
60
+ const leftPart = preparedLeftContent + res;
61
+ return {
62
+ result: leftPart + content.substring(forTag.endPos + shift),
63
+ idx: leftPart.length,
64
+ };
65
+ }
66
+ function applyCycles(input, vars, sourcemap) {
67
+ var _a, _b, _c;
68
+ const { path } = this;
69
+ const R_LIQUID = /{%-?(?<for>\s*for[^}]+?)-?%}\n?|\n?{%-?(?<endfor>\s*endfor[^}]+?)-?%}/g;
70
+ const FOR_SYNTAX = new RegExp(`(\\w+)\\s+in\\s+(${lexical_1.variable.source})`);
71
+ let match;
72
+ const tagStack = [];
73
+ let countSkippedInnerTags = 0;
74
+ while ((match = R_LIQUID.exec(input))) {
75
+ switch (true) {
76
+ case Boolean((_a = match.groups) === null || _a === void 0 ? void 0 : _a.for): {
77
+ const tagMatch = (_b = match.groups) === null || _b === void 0 ? void 0 : _b.for.match(lexical_1.tagLine);
78
+ if (!tagMatch) {
79
+ continue;
80
+ }
81
+ const [args] = tagMatch.slice(2);
82
+ if (tagStack.length) {
83
+ countSkippedInnerTags += 1;
84
+ break;
85
+ }
86
+ const matches = args.match(FOR_SYNTAX);
87
+ if (!matches) {
88
+ this.log.error(`Incorrect syntax in if condition${path ? ` in ${chalk_1.default.bold(path)}` : ''}`);
89
+ break;
90
+ }
91
+ const [variableName, collectionName] = matches.slice(1);
92
+ tagStack.push({
93
+ item: args,
94
+ variableName,
95
+ collectionName,
96
+ startPos: match.index,
97
+ endPos: -1,
98
+ contentStart: R_LIQUID.lastIndex,
99
+ contentEnd: -1,
100
+ multiline: match[0].endsWith('\n'),
101
+ });
102
+ break;
103
+ }
104
+ case Boolean((_c = match.groups) === null || _c === void 0 ? void 0 : _c.endfor): {
105
+ if (countSkippedInnerTags > 0) {
106
+ countSkippedInnerTags -= 1;
107
+ break;
108
+ }
109
+ const forTag = tagStack.pop();
110
+ if (!forTag) {
111
+ this.log.error(`For block must be opened before close${path ? ` in ${chalk_1.default.bold(path)}` : ''}`);
112
+ break;
113
+ }
114
+ forTag.endPos = R_LIQUID.lastIndex;
115
+ forTag.contentEnd = match.index;
116
+ const { idx, result } = inlineConditions.call(this, input, vars, forTag, sourcemap);
117
+ R_LIQUID.lastIndex = idx;
118
+ input = result;
119
+ break;
120
+ }
121
+ }
122
+ }
123
+ if (tagStack.length !== 0) {
124
+ this.log.error(`For block must be closed${path ? ` in ${chalk_1.default.bold(path)}` : ''}`);
125
+ }
126
+ return input;
127
+ }
128
+ //# sourceMappingURL=cycles.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cycles.js","sourceRoot":"","sources":["../src/cycles.ts"],"names":[],"mappings":"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"}
@@ -1,12 +1,15 @@
1
1
  "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
2
5
  Object.defineProperty(exports, "__esModule", { value: true });
3
6
  exports.SkippedEvalError = void 0;
4
- const chalk_1 = require("chalk");
7
+ const chalk_1 = __importDefault(require("chalk"));
5
8
  class SkippedEvalError extends Error {
6
9
  constructor(message, exp) {
7
10
  super();
8
11
  this.name = 'SkippedEvalError';
9
- this.message = `${message}: ${(0, chalk_1.bold)(exp)}`;
12
+ this.message = `${message}: ${chalk_1.default.bold(exp)}`;
10
13
  }
11
14
  }
12
15
  exports.SkippedEvalError = SkippedEvalError;
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.js","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":";;;;;;AAAA,kDAA0B;AAE1B,MAAa,gBAAiB,SAAQ,KAAK;IACvC,YAAY,OAAe,EAAE,GAAW;QACpC,KAAK,EAAE,CAAC;QAER,IAAI,CAAC,IAAI,GAAG,kBAAkB,CAAC;QAC/B,IAAI,CAAC,OAAO,GAAG,GAAG,OAAO,KAAK,eAAK,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;IACpD,CAAC;CACJ;AAPD,4CAOC"}
@@ -1,6 +1,5 @@
1
- export declare type FrontMatter = {
1
+ export type FrontMatter = {
2
2
  [key: string]: unknown;
3
- metadata?: Record<string, unknown>[];
4
3
  };
5
- export declare const extractFrontMatter: (fileContent: string, filePath?: string) => [FrontMatter, string];
6
- export declare const composeFrontMatter: (frontMatter: FrontMatter, strippedContent: string) => string;
4
+ export declare const extractFrontMatter: (content: string) => [FrontMatter, string, string];
5
+ export declare const composeFrontMatter: (frontMatter: FrontMatter, strippedContent?: string) => string;
@@ -5,9 +5,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.composeFrontMatter = exports.extractFrontMatter = void 0;
7
7
  const js_yaml_1 = require("js-yaml");
8
- const ts_dedent_1 = require("ts-dedent");
9
8
  const cloneDeepWith_1 = __importDefault(require("lodash/cloneDeepWith"));
10
- const log_1 = require("./log");
11
9
  const SEP = '---';
12
10
  /**
13
11
  * Temporary workaround to enable parsing YAML metadata from potentially
@@ -24,49 +22,30 @@ const escapeLiquid = (content) => content.replace(/{{/g, '(({{').replace(/}}/g,
24
22
  * @returns Unescaped string
25
23
  */
26
24
  const unescapeLiquid = (escapedContent) => escapedContent.replace(/\(\({{/g, '{{').replace(/}}\)\)/g, '}}');
27
- const matchMetadata = (fileContent) => {
28
- if (!fileContent.startsWith(SEP)) {
25
+ const matchMetadata = (content) => {
26
+ const rx = /^(?<open>[-]{3,}\r?\n)(?<meta>[\s\S]+?)(?<close>\r?\n[-]{3,}(?:\r?\n|$))/;
27
+ const match = rx.exec(content);
28
+ if (!match) {
29
29
  return null;
30
30
  }
31
- const closeStart = fileContent.indexOf('\n' + SEP, SEP.length);
32
- const closeEnd = fileContent.indexOf('\n', closeStart + 1);
33
- if (closeStart === -1) {
34
- return null;
35
- }
36
- return [fileContent.slice(SEP.length, closeStart).trim(), fileContent.slice(closeEnd + 1)];
37
- };
38
- const duplicateKeysCompatibleLoad = (yaml, filePath) => {
39
- try {
40
- return (0, js_yaml_1.load)(yaml);
41
- }
42
- catch (e) {
43
- if (e instanceof js_yaml_1.YAMLException) {
44
- const duplicateKeysDeprecationWarning = (0, ts_dedent_1.dedent) `
45
- In ${filePath !== null && filePath !== void 0 ? filePath : '(unknown)'}: Encountered a YAML parsing exception when processing file metadata: ${e.reason}.
46
- It's highly possible the input file contains duplicate mapping keys.
47
- Will retry processing with necessary compatibility flags.
48
- Please note that this behaviour is DEPRECATED and WILL be removed in a future version
49
- without further notice, so the build WILL fail when supplied with YAML-incompatible meta.
50
- `;
51
- log_1.log.warn(duplicateKeysDeprecationWarning);
52
- return (0, js_yaml_1.load)(yaml, { json: true });
53
- }
54
- throw e;
55
- }
31
+ return match.groups;
56
32
  };
57
- const extractFrontMatter = (fileContent, filePath) => {
58
- const matches = matchMetadata(fileContent);
33
+ const extractFrontMatter = (content) => {
34
+ const matches = matchMetadata(content);
59
35
  if (matches) {
60
- const [metadata, strippedContent] = matches;
36
+ const { open, close, meta } = matches;
37
+ const rawMeta = open + meta + close;
38
+ const strippedContent = content.slice(rawMeta.length);
61
39
  return [
62
- (0, cloneDeepWith_1.default)(duplicateKeysCompatibleLoad(escapeLiquid(metadata), filePath), (v) => (typeof v === 'string' ? unescapeLiquid(v) : undefined)),
40
+ (0, cloneDeepWith_1.default)((0, js_yaml_1.load)(escapeLiquid(meta)), (v) => typeof v === 'string' ? unescapeLiquid(v) : undefined),
63
41
  strippedContent,
42
+ rawMeta,
64
43
  ];
65
44
  }
66
- return [{}, fileContent];
45
+ return [{}, content, ''];
67
46
  };
68
47
  exports.extractFrontMatter = extractFrontMatter;
69
- const composeFrontMatter = (frontMatter, strippedContent) => {
48
+ const composeFrontMatter = (frontMatter, strippedContent = '') => {
70
49
  const dumped = (0, js_yaml_1.dump)(frontMatter, { lineWidth: -1 }).trim();
71
50
  // This empty object check is a bit naive
72
51
  // The other option would be to check if all own fields are `undefined`,
@@ -1 +1 @@
1
- {"version":3,"file":"frontmatter.js","sourceRoot":"","sources":["../src/transform/frontmatter.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"frontmatter.js","sourceRoot":"","sources":["../src/frontmatter.ts"],"names":[],"mappings":";;;;;;AAAA,qCAAmC;AACnC,yEAAiD;AAMjD,MAAM,GAAG,GAAG,KAAK,CAAC;AAElB;;;;;;GAMG;AACH,MAAM,YAAY,GAAG,CAAC,OAAe,EAAU,EAAE,CAC7C,OAAO,CAAC,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;AAE1D;;;;;GAKG;AACH,MAAM,cAAc,GAAG,CAAC,cAAsB,EAAU,EAAE,CACtD,cAAc,CAAC,OAAO,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC,OAAO,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;AAErE,MAAM,aAAa,GAAG,CAAC,OAAe,EAAE,EAAE;IACtC,MAAM,EAAE,GAAG,0EAA0E,CAAC;IACtF,MAAM,KAAK,GAAG,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAE/B,IAAI,CAAC,KAAK,EAAE,CAAC;QACT,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,OAAO,KAAK,CAAC,MAAqD,CAAC;AACvE,CAAC,CAAC;AAEK,MAAM,kBAAkB,GAAG,CAAC,OAAe,EAAiC,EAAE;IACjF,MAAM,OAAO,GAAG,aAAa,CAAC,OAAO,CAAC,CAAC;IAEvC,IAAI,OAAO,EAAE,CAAC;QACV,MAAM,EAAC,IAAI,EAAE,KAAK,EAAE,IAAI,EAAC,GAAG,OAAO,CAAC;QACpC,MAAM,OAAO,GAAG,IAAI,GAAG,IAAI,GAAG,KAAK,CAAC;QACpC,MAAM,eAAe,GAAG,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QAEtD,OAAO;YACH,IAAA,uBAAa,EAAC,IAAA,cAAI,EAAC,YAAY,CAAC,IAAI,CAAC,CAAgB,EAAE,CAAC,CAAC,EAAE,EAAE,CACzD,OAAO,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CACxD;YACD,eAAe;YACf,OAAO;SACV,CAAC;IACN,CAAC;IAED,OAAO,CAAC,EAAE,EAAE,OAAO,EAAE,EAAE,CAAC,CAAC;AAC7B,CAAC,CAAC;AAlBW,QAAA,kBAAkB,sBAkB7B;AAEK,MAAM,kBAAkB,GAAG,CAAC,WAAwB,EAAE,eAAe,GAAG,EAAE,EAAE,EAAE;IACjF,MAAM,MAAM,GAAG,IAAA,cAAI,EAAC,WAAW,EAAE,EAAC,SAAS,EAAE,CAAC,CAAC,EAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IAEzD,yCAAyC;IACzC,wEAAwE;IACxE,wEAAwE;IACxE,IAAI,MAAM,KAAK,IAAI,EAAE,CAAC;QAClB,OAAO,eAAe,CAAC;IAC3B,CAAC;IAED,OAAO,GAAG,GAAG,KAAK,MAAM,KAAK,GAAG,KAAK,eAAe,EAAE,CAAC;AAC3D,CAAC,CAAC;AAXW,QAAA,kBAAkB,sBAW7B"}
package/lib/index.d.ts ADDED
@@ -0,0 +1,9 @@
1
+ import type { LiquidContext, LiquidSettings, Logger } from './types';
2
+ import type { SourceMap } from './sourcemap';
3
+ export { evaluate } from './syntax/evaluate';
4
+ export { SourceMap } from './sourcemap';
5
+ export { composeFrontMatter, extractFrontMatter } from './frontmatter';
6
+ export declare function liquidSnippet(this: LiquidContext, input: string, vars: Record<string, unknown>, sourcemap?: SourceMap): string;
7
+ export declare function liquidJson(this: LiquidContext, json: object, vars: Record<string, unknown>): any;
8
+ export declare function liquidDocument(this: LiquidContext, input: string, vars: Record<string, unknown>, sourcemap?: SourceMap): string;
9
+ export declare function createContext(log: Logger, settings?: Partial<LiquidSettings>): LiquidContext;
package/lib/index.js ADDED
@@ -0,0 +1,73 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.extractFrontMatter = exports.composeFrontMatter = exports.SourceMap = exports.evaluate = void 0;
7
+ exports.liquidSnippet = liquidSnippet;
8
+ exports.liquidJson = liquidJson;
9
+ exports.liquidDocument = liquidDocument;
10
+ exports.createContext = createContext;
11
+ const cloneDeepWith_1 = __importDefault(require("lodash/cloneDeepWith"));
12
+ const frontmatter_1 = require("./frontmatter");
13
+ const substitutions_1 = require("./substitutions");
14
+ const cycles_1 = require("./cycles");
15
+ const conditions_1 = require("./conditions");
16
+ const utils_1 = require("./utils");
17
+ var evaluate_1 = require("./syntax/evaluate");
18
+ Object.defineProperty(exports, "evaluate", { enumerable: true, get: function () { return evaluate_1.evaluate; } });
19
+ var sourcemap_1 = require("./sourcemap");
20
+ Object.defineProperty(exports, "SourceMap", { enumerable: true, get: function () { return sourcemap_1.SourceMap; } });
21
+ var frontmatter_2 = require("./frontmatter");
22
+ Object.defineProperty(exports, "composeFrontMatter", { enumerable: true, get: function () { return frontmatter_2.composeFrontMatter; } });
23
+ Object.defineProperty(exports, "extractFrontMatter", { enumerable: true, get: function () { return frontmatter_2.extractFrontMatter; } });
24
+ function liquidSnippet(input, vars, sourcemap) {
25
+ const { cycles = true, conditions = true, substitutions = true, conditionsInCode = false, } = this.settings;
26
+ const { saveCode, repairCode } = utils_1.codeUtils.call(this);
27
+ let output = input;
28
+ if (!conditionsInCode) {
29
+ output = saveCode(output, vars);
30
+ }
31
+ if (cycles) {
32
+ output = cycles_1.applyCycles.call(this, output, vars, sourcemap);
33
+ }
34
+ if (conditions) {
35
+ output = conditions_1.applyConditions.call(this, output, vars, sourcemap);
36
+ }
37
+ if (substitutions) {
38
+ output = substitutions_1.applySubstitutions.call(this, output, vars);
39
+ }
40
+ if (!conditionsInCode && typeof output === 'string') {
41
+ output = repairCode(output);
42
+ }
43
+ return output;
44
+ }
45
+ function liquidJson(json, vars) {
46
+ return (0, cloneDeepWith_1.default)(json, (value) => typeof value === 'string' ? liquidSnippet.call(this, value, vars) : undefined);
47
+ }
48
+ function liquidDocument(input, vars, sourcemap) {
49
+ const [frontMatter, strippedContent, rawFrontmatter] = (0, frontmatter_1.extractFrontMatter)(input);
50
+ const liquidedFrontMatter = liquidJson.call(this, frontMatter, vars);
51
+ const composedFrontmatter = (0, frontmatter_1.composeFrontMatter)(liquidedFrontMatter);
52
+ if (sourcemap && rawFrontmatter.length) {
53
+ sourcemap.patch({
54
+ replace: [[1, rawFrontmatter, composedFrontmatter]],
55
+ });
56
+ }
57
+ const liquidedResult = liquidSnippet.call(this, strippedContent, vars);
58
+ return composedFrontmatter + liquidedResult;
59
+ }
60
+ function createContext(log, settings) {
61
+ return {
62
+ log,
63
+ settings: {
64
+ cycles: true,
65
+ conditions: true,
66
+ conditionsInCode: false,
67
+ substitutions: true,
68
+ keepNotVar: false,
69
+ ...settings,
70
+ },
71
+ };
72
+ }
73
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ type Point = {
2
+ start: number;
3
+ end: number;
4
+ };
5
+ type SourceMapTx = {
6
+ delete: Point[];
7
+ offset: [number, number][];
8
+ replace: [number, string, string][];
9
+ };
10
+ export declare class SourceMap {
11
+ private map;
12
+ constructor(content: string);
13
+ dump(): Record<string, string>;
14
+ patch(tx: Partial<SourceMapTx>): void;
15
+ lines(content: string): number[];
16
+ origin(line: string | number): number;
17
+ location(from: number, to: number, lines: number[], offset?: number): Point;
18
+ }
19
+ export {};
@@ -0,0 +1,99 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.SourceMap = void 0;
4
+ const actors = {
5
+ delete: ({ start, end }) => (value, flow) => {
6
+ if (value >= start && value <= end) {
7
+ flow.offset -= 1;
8
+ return -1;
9
+ }
10
+ return value;
11
+ },
12
+ offset: ([start, offset]) => (value) => {
13
+ if (value >= start) {
14
+ return value + offset;
15
+ }
16
+ return value;
17
+ },
18
+ };
19
+ class SourceMap {
20
+ constructor(content) {
21
+ this.map = [];
22
+ this.map = this.lines(content)
23
+ .map((_, index) => index)
24
+ .slice(1);
25
+ }
26
+ dump() {
27
+ const dump = {};
28
+ for (const [index, value] of Object.entries(this.map)) {
29
+ if (value > 0) {
30
+ dump[String(value)] = String(Number(index) + 1);
31
+ }
32
+ }
33
+ return dump;
34
+ }
35
+ patch(tx) {
36
+ const flow = {
37
+ offset: 0,
38
+ };
39
+ const del = (tx.delete || []).map(actors.delete);
40
+ const ofs = (tx.offset || []).map(actors.offset);
41
+ (tx.replace || []).forEach(([start, source, result]) => {
42
+ const sl = this.lines(source).length - 1;
43
+ const rl = this.lines(result).length - 1;
44
+ const offset = rl - sl;
45
+ del.push(actors.delete({
46
+ start: start + 1,
47
+ end: start + sl,
48
+ }));
49
+ ofs.push(actors.offset([start + 1, sl - 1 + offset]));
50
+ });
51
+ const patches = [...del, ...ofs];
52
+ for (let index = 0; index < this.map.length; index++) {
53
+ const patched = patches.reduce((value, patch) => {
54
+ if (value === -1) {
55
+ return value;
56
+ }
57
+ return patch(value, flow);
58
+ }, this.map[index]);
59
+ this.map[index] = patched === -1 ? patched : patched + flow.offset;
60
+ }
61
+ }
62
+ lines(content) {
63
+ const line = /^/gm;
64
+ const lines = [];
65
+ while (line.exec(content)) {
66
+ lines.push(line.lastIndex);
67
+ line.lastIndex += 1;
68
+ }
69
+ lines.push(content.length + 1);
70
+ return lines;
71
+ }
72
+ origin(line) {
73
+ if (!this.map.length) {
74
+ return Number(line);
75
+ }
76
+ return this.map[Number(line) - 1];
77
+ }
78
+ location(from, to, lines, offset = 0) {
79
+ const location = { start: -1, end: -1 };
80
+ let index = 0;
81
+ while (lines.length > index) {
82
+ if (from < lines[index]) {
83
+ location.start = index + offset;
84
+ break;
85
+ }
86
+ index++;
87
+ }
88
+ while (lines.length > index) {
89
+ if (to < lines[index]) {
90
+ location.end = index + offset;
91
+ break;
92
+ }
93
+ index++;
94
+ }
95
+ return location;
96
+ }
97
+ }
98
+ exports.SourceMap = SourceMap;
99
+ //# sourceMappingURL=sourcemap.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sourcemap.js","sourceRoot":"","sources":["../src/sourcemap.ts"],"names":[],"mappings":";;;AAAA,MAAM,MAAM,GAAG;IACX,MAAM,EACF,CAAC,EAAC,KAAK,EAAE,GAAG,EAAgC,EAAE,EAAE,CAChD,CAAC,KAAa,EAAE,IAAqB,EAAE,EAAE;QACrC,IAAI,KAAK,IAAI,KAAK,IAAI,KAAK,IAAI,GAAG,EAAE,CAAC;YACjC,IAAI,CAAC,MAAM,IAAI,CAAC,CAAC;YACjB,OAAO,CAAC,CAAC,CAAC;QACd,CAAC;QAED,OAAO,KAAK,CAAC;IACjB,CAAC;IAEL,MAAM,EACF,CAAC,CAAC,KAAK,EAAE,MAAM,CAAgC,EAAE,EAAE,CACnD,CAAC,KAAa,EAAE,EAAE;QACd,IAAI,KAAK,IAAI,KAAK,EAAE,CAAC;YACjB,OAAO,KAAK,GAAG,MAAM,CAAC;QAC1B,CAAC;QAED,OAAO,KAAK,CAAC;IACjB,CAAC;CACR,CAAC;AAcF,MAAa,SAAS;IAGlB,YAAY,OAAe;QAFnB,QAAG,GAAa,EAAE,CAAC;QAGvB,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC;aACzB,GAAG,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC;aACxB,KAAK,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,IAAI;QACA,MAAM,IAAI,GAA2B,EAAE,CAAC;QAExC,KAAK,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;YACpD,IAAI,KAAK,GAAG,CAAC,EAAE,CAAC;gBACZ,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;YACpD,CAAC;QACL,CAAC;QAED,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,KAAK,CAAC,EAAwB;QAC1B,MAAM,IAAI,GAAG;YACT,MAAM,EAAE,CAAC;SACZ,CAAC;QAEF,MAAM,GAAG,GAAG,CAAC,EAAE,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QACjD,MAAM,GAAG,GAAG,CAAC,EAAE,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QACjD,CAAC,EAAE,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,EAAE;YACnD,MAAM,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;YACzC,MAAM,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;YACzC,MAAM,MAAM,GAAG,EAAE,GAAG,EAAE,CAAC;YAEvB,GAAG,CAAC,IAAI,CACJ,MAAM,CAAC,MAAM,CAAC;gBACV,KAAK,EAAE,KAAK,GAAG,CAAC;gBAChB,GAAG,EAAE,KAAK,GAAG,EAAE;aAClB,CAAC,CACL,CAAC;YAEF,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,KAAK,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;QAC1D,CAAC,CAAC,CAAC;QAEH,MAAM,OAAO,GAAG,CAAC,GAAG,GAAG,EAAE,GAAG,GAAG,CAAC,CAAC;QAEjC,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,CAAC;YACnD,MAAM,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;gBAC5C,IAAI,KAAK,KAAK,CAAC,CAAC,EAAE,CAAC;oBACf,OAAO,KAAK,CAAC;gBACjB,CAAC;gBAED,OAAO,KAAK,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;YAC9B,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC;YAEpB,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC;QACvE,CAAC;IACL,CAAC;IAED,KAAK,CAAC,OAAe;QACjB,MAAM,IAAI,GAAG,KAAK,CAAC;QACnB,MAAM,KAAK,GAAG,EAAE,CAAC;QAEjB,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;YACxB,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YAC3B,IAAI,CAAC,SAAS,IAAI,CAAC,CAAC;QACxB,CAAC;QAED,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QAE/B,OAAO,KAAK,CAAC;IACjB,CAAC;IAED,MAAM,CAAC,IAAqB;QACxB,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC;YACnB,OAAO,MAAM,CAAC,IAAI,CAAC,CAAC;QACxB,CAAC;QAED,OAAO,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;IACtC,CAAC;IAED,QAAQ,CAAC,IAAY,EAAE,EAAU,EAAE,KAAe,EAAE,MAAM,GAAG,CAAC;QAC1D,MAAM,QAAQ,GAAG,EAAC,KAAK,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,EAAC,CAAC;QAEtC,IAAI,KAAK,GAAG,CAAC,CAAC;QAEd,OAAO,KAAK,CAAC,MAAM,GAAG,KAAK,EAAE,CAAC;YAC1B,IAAI,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC;gBACtB,QAAQ,CAAC,KAAK,GAAG,KAAK,GAAG,MAAM,CAAC;gBAChC,MAAM;YACV,CAAC;YAED,KAAK,EAAE,CAAC;QACZ,CAAC;QAED,OAAO,KAAK,CAAC,MAAM,GAAG,KAAK,EAAE,CAAC;YAC1B,IAAI,EAAE,GAAG,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC;gBACpB,QAAQ,CAAC,GAAG,GAAG,KAAK,GAAG,MAAM,CAAC;gBAC9B,MAAM;YACV,CAAC;YAED,KAAK,EAAE,CAAC;QACZ,CAAC;QAED,OAAO,QAAQ,CAAC;IACpB,CAAC;CACJ;AAzGD,8BAyGC"}
@@ -0,0 +1,2 @@
1
+ import type { LiquidContext } from './types';
2
+ export declare function applySubstitutions(this: LiquidContext, input: string, vars: Record<string, unknown>): any;