@platformos/platformos-check-common 0.0.17 → 0.0.18

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 (50) hide show
  1. package/CHANGELOG.md +8 -0
  2. package/dist/checks/index.d.ts +1 -1
  3. package/dist/checks/index.js +6 -2
  4. package/dist/checks/index.js.map +1 -1
  5. package/dist/checks/json-literal-quote-style/index.d.ts +2 -0
  6. package/dist/checks/json-literal-quote-style/index.js +42 -0
  7. package/dist/checks/json-literal-quote-style/index.js.map +1 -0
  8. package/dist/checks/liquid-html-syntax-error/checks/InvalidAssignSyntax.d.ts +21 -0
  9. package/dist/checks/liquid-html-syntax-error/checks/InvalidAssignSyntax.js +60 -0
  10. package/dist/checks/liquid-html-syntax-error/checks/InvalidAssignSyntax.js.map +1 -0
  11. package/dist/checks/liquid-html-syntax-error/checks/InvalidOutputPush.d.ts +17 -0
  12. package/dist/checks/liquid-html-syntax-error/checks/InvalidOutputPush.js +37 -0
  13. package/dist/checks/liquid-html-syntax-error/checks/InvalidOutputPush.js.map +1 -0
  14. package/dist/checks/liquid-html-syntax-error/checks/InvalidTagSyntax.js +1 -1
  15. package/dist/checks/liquid-html-syntax-error/index.js +17 -0
  16. package/dist/checks/liquid-html-syntax-error/index.js.map +1 -1
  17. package/dist/checks/partial-call-arguments/extract-undefined-variables.d.ts +14 -0
  18. package/dist/checks/partial-call-arguments/extract-undefined-variables.js +234 -0
  19. package/dist/checks/partial-call-arguments/extract-undefined-variables.js.map +1 -0
  20. package/dist/checks/partial-call-arguments/index.d.ts +2 -0
  21. package/dist/checks/partial-call-arguments/index.js +117 -0
  22. package/dist/checks/partial-call-arguments/index.js.map +1 -0
  23. package/dist/checks/valid-frontmatter/index.d.ts +2 -0
  24. package/dist/checks/valid-frontmatter/index.js +279 -0
  25. package/dist/checks/valid-frontmatter/index.js.map +1 -0
  26. package/dist/frontmatter/index.d.ts +1 -59
  27. package/dist/frontmatter/index.js +6 -298
  28. package/dist/frontmatter/index.js.map +1 -1
  29. package/dist/tsconfig.tsbuildinfo +1 -1
  30. package/package.json +2 -2
  31. package/src/checks/index.ts +6 -2
  32. package/src/checks/json-literal-quote-style/index.spec.ts +129 -0
  33. package/src/checks/json-literal-quote-style/index.ts +45 -0
  34. package/src/checks/liquid-html-syntax-error/checks/InvalidAssignSyntax.spec.ts +422 -0
  35. package/src/checks/liquid-html-syntax-error/checks/InvalidAssignSyntax.ts +63 -0
  36. package/src/checks/liquid-html-syntax-error/checks/InvalidOutputPush.spec.ts +104 -0
  37. package/src/checks/liquid-html-syntax-error/checks/InvalidOutputPush.ts +39 -0
  38. package/src/checks/liquid-html-syntax-error/checks/InvalidTagSyntax.spec.ts +86 -2
  39. package/src/checks/liquid-html-syntax-error/checks/InvalidTagSyntax.ts +1 -1
  40. package/src/checks/liquid-html-syntax-error/index.ts +19 -0
  41. package/src/checks/partial-call-arguments/extract-undefined-variables.spec.ts +218 -0
  42. package/src/checks/{metadata-params → partial-call-arguments}/extract-undefined-variables.ts +31 -6
  43. package/src/checks/partial-call-arguments/index.spec.ts +436 -0
  44. package/src/checks/{metadata-params → partial-call-arguments}/index.ts +18 -11
  45. package/src/checks/undefined-object/index.spec.ts +101 -0
  46. package/src/checks/valid-frontmatter/index.spec.ts +666 -0
  47. package/src/checks/valid-frontmatter/index.ts +344 -0
  48. package/src/frontmatter/index.ts +9 -344
  49. package/src/checks/metadata-params/extract-undefined-variables.spec.ts +0 -115
  50. package/src/checks/metadata-params/index.spec.ts +0 -257
package/CHANGELOG.md CHANGED
@@ -1,5 +1,13 @@
1
1
  # @platformos/theme-check-common
2
2
 
3
+ ## 0.0.18
4
+
5
+ ### Patch Changes
6
+
7
+ - Additional checks and improvements
8
+ - Updated dependencies
9
+ - @platformos/liquid-html-parser@0.0.16
10
+
3
11
  ## 0.0.17
4
12
 
5
13
  ### Patch Changes
@@ -5,4 +5,4 @@ export declare const allChecks: (LiquidCheckDefinition | JSONCheckDefinition | G
5
5
  * - meta.docs.recommended: true
6
6
  * - Either no meta.targets list exist or if it does exist then Recommended is a target
7
7
  */
8
- export declare const recommended: (LiquidCheckDefinition | JSONCheckDefinition | YAMLCheckDefinition | GraphQLCheckDefinition)[];
8
+ export declare const recommended: (LiquidCheckDefinition | JSONCheckDefinition | GraphQLCheckDefinition | YAMLCheckDefinition)[];
@@ -26,7 +26,7 @@ const valid_json_1 = require("./valid-json");
26
26
  const valid_doc_param_types_1 = require("./valid-doc-param-types");
27
27
  const valid_render_partial_argument_types_1 = require("./valid-render-partial-argument-types");
28
28
  const variable_name_1 = require("./variable-name");
29
- const metadata_params_1 = require("./metadata-params");
29
+ const partial_call_arguments_1 = require("./partial-call-arguments");
30
30
  const graphql_variables_1 = require("./graphql-variables");
31
31
  const graphql_1 = require("./graphql");
32
32
  const unknown_property_1 = require("./unknown-property");
@@ -35,6 +35,8 @@ const duplicate_function_arguments_1 = require("./duplicate-function-arguments")
35
35
  const missing_render_partial_arguments_1 = require("./missing-render-partial-arguments");
36
36
  const nested_graphql_query_1 = require("./nested-graphql-query");
37
37
  const missing_page_1 = require("./missing-page");
38
+ const valid_frontmatter_1 = require("./valid-frontmatter");
39
+ const json_literal_quote_style_1 = require("./json-literal-quote-style");
38
40
  exports.allChecks = [
39
41
  deprecated_filter_1.DeprecatedFilter,
40
42
  deprecated_tag_1.DeprecatedTag,
@@ -61,7 +63,7 @@ exports.allChecks = [
61
63
  valid_doc_param_types_1.ValidDocParamTypes,
62
64
  valid_render_partial_argument_types_1.ValidRenderPartialArgumentTypes,
63
65
  variable_name_1.VariableName,
64
- metadata_params_1.MetadataParamsCheck,
66
+ partial_call_arguments_1.PartialCallArguments,
65
67
  graphql_variables_1.GraphQLVariablesCheck,
66
68
  graphql_1.GraphQLCheck,
67
69
  unknown_property_1.UnknownProperty,
@@ -69,6 +71,8 @@ exports.allChecks = [
69
71
  missing_render_partial_arguments_1.MissingRenderPartialArguments,
70
72
  nested_graphql_query_1.NestedGraphQLQuery,
71
73
  missing_page_1.MissingPage,
74
+ valid_frontmatter_1.ValidFrontmatter,
75
+ json_literal_quote_style_1.JsonLiteralQuoteStyle,
72
76
  ];
73
77
  /**
74
78
  * The recommended checks is populated by all checks with the following conditions:
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/checks/index.ts"],"names":[],"mappings":";;;AAAA,oCAMkB;AAElB,2DAAuD;AACvD,qDAAiD;AACjD,6FAAuF;AACvF,iEAA2D;AAC3D,2DAAsD;AACtD,yEAAmE;AACnE,mEAA+D;AAC/D,mDAA+C;AAC/C,uDAAmD;AACnD,yDAAqD;AACrD,qEAAgE;AAChE,qEAAgE;AAChE,mEAA8D;AAC9D,yDAAqD;AACrD,qEAA+D;AAC/D,qDAAiD;AACjD,mGAA6F;AAC7F,mDAA+C;AAC/C,yDAAoD;AACpD,qEAAgE;AAChE,6CAAyC;AACzC,mEAA6D;AAC7D,+FAAwF;AACxF,mDAA+C;AAC/C,uDAAwD;AACxD,2DAA4D;AAC5D,uCAAyC;AACzC,yDAAqD;AACrD,6EAAuE;AACvE,iFAA4E;AAC5E,yFAAmF;AACnF,iEAA4D;AAC5D,iDAA6C;AAEhC,QAAA,SAAS,GAKhB;IACJ,oCAAgB;IAChB,8BAAa;IACb,yDAA0B;IAC1B,oEAA+B;IAC/B,wCAAiB;IACjB,mCAAe;IACf,gDAAqB;IACrB,4CAAoB;IACpB,4BAAY;IACZ,gCAAc;IACd,kCAAe;IACf,6CAAoB;IACpB,6CAAoB;IACpB,2CAAmB;IACnB,kCAAe;IACf,4CAAmB;IACnB,8BAAa;IACb,0EAAkC;IAClC,4BAAY;IACZ,iCAAc;IACd,6CAAoB;IACpB,sBAAS;IACT,0CAAkB;IAClB,qEAA+B;IAC/B,4BAAY;IACZ,qCAAmB;IACnB,yCAAqB;IACrB,sBAAY;IACZ,kCAAe;IACf,oDAAuB;IACvB,gEAA6B;IAC7B,yCAAkB;IAClB,0BAAW;CACZ,CAAC;AAEF;;;;GAIG;AACU,QAAA,WAAW,GAAG,iBAAS,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE;IACpD,MAAM,aAAa,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC;IAClD,MAAM,aAAa,GACjB,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO;QACnB,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM;QAC1B,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,oBAAY,CAAC,WAAW,CAAC,CAAC;IAExD,OAAO,aAAa,IAAI,aAAa,CAAC;AACxC,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/checks/index.ts"],"names":[],"mappings":";;;AAAA,oCAMkB;AAElB,2DAAuD;AACvD,qDAAiD;AACjD,6FAAuF;AACvF,iEAA2D;AAC3D,2DAAsD;AACtD,yEAAmE;AACnE,mEAA+D;AAC/D,mDAA+C;AAC/C,uDAAmD;AACnD,yDAAqD;AACrD,qEAAgE;AAChE,qEAAgE;AAChE,mEAA8D;AAC9D,yDAAqD;AACrD,qEAA+D;AAC/D,qDAAiD;AACjD,mGAA6F;AAC7F,mDAA+C;AAC/C,yDAAoD;AACpD,qEAAgE;AAChE,6CAAyC;AACzC,mEAA6D;AAC7D,+FAAwF;AACxF,mDAA+C;AAC/C,qEAAgE;AAChE,2DAA4D;AAC5D,uCAAyC;AACzC,yDAAqD;AACrD,6EAAuE;AACvE,iFAA4E;AAC5E,yFAAmF;AACnF,iEAA4D;AAC5D,iDAA6C;AAC7C,2DAAuD;AACvD,yEAAmE;AAEtD,QAAA,SAAS,GAKhB;IACJ,oCAAgB;IAChB,8BAAa;IACb,yDAA0B;IAC1B,oEAA+B;IAC/B,wCAAiB;IACjB,mCAAe;IACf,gDAAqB;IACrB,4CAAoB;IACpB,4BAAY;IACZ,gCAAc;IACd,kCAAe;IACf,6CAAoB;IACpB,6CAAoB;IACpB,2CAAmB;IACnB,kCAAe;IACf,4CAAmB;IACnB,8BAAa;IACb,0EAAkC;IAClC,4BAAY;IACZ,iCAAc;IACd,6CAAoB;IACpB,sBAAS;IACT,0CAAkB;IAClB,qEAA+B;IAC/B,4BAAY;IACZ,6CAAoB;IACpB,yCAAqB;IACrB,sBAAY;IACZ,kCAAe;IACf,oDAAuB;IACvB,gEAA6B;IAC7B,yCAAkB;IAClB,0BAAW;IACX,oCAAgB;IAChB,gDAAqB;CACtB,CAAC;AAEF;;;;GAIG;AACU,QAAA,WAAW,GAAG,iBAAS,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE;IACpD,MAAM,aAAa,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC;IAClD,MAAM,aAAa,GACjB,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO;QACnB,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM;QAC1B,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,oBAAY,CAAC,WAAW,CAAC,CAAC;IAExD,OAAO,aAAa,IAAI,aAAa,CAAC;AACxC,CAAC,CAAC,CAAC"}
@@ -0,0 +1,2 @@
1
+ import { LiquidCheckDefinition } from '../../types';
2
+ export declare const JsonLiteralQuoteStyle: LiquidCheckDefinition;
@@ -0,0 +1,42 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.JsonLiteralQuoteStyle = void 0;
4
+ const liquid_html_parser_1 = require("@platformos/liquid-html-parser");
5
+ const types_1 = require("../../types");
6
+ exports.JsonLiteralQuoteStyle = {
7
+ meta: {
8
+ code: 'JsonLiteralQuoteStyle',
9
+ name: 'Use double quotes in JSON literals',
10
+ docs: {
11
+ description: 'Enforces double-quoted string literals inside inline object/array literals (e.g. {% assign a = {"a": 5} %}). Single-quoted strings inside these literals are not valid JSON.',
12
+ recommended: true,
13
+ url: undefined,
14
+ },
15
+ type: types_1.SourceCodeType.LiquidHtml,
16
+ severity: types_1.Severity.ERROR,
17
+ schema: {},
18
+ targets: [],
19
+ },
20
+ create(context) {
21
+ return {
22
+ async String(node, ancestors) {
23
+ if (!node.single)
24
+ return;
25
+ // Only flag strings that are inside an inline object/array literal.
26
+ const insideJsonLiteral = ancestors.some((ancestor) => ancestor.type === liquid_html_parser_1.NodeTypes.JsonHashLiteral ||
27
+ ancestor.type === liquid_html_parser_1.NodeTypes.JsonArrayLiteral);
28
+ if (!insideJsonLiteral)
29
+ return;
30
+ context.report({
31
+ message: 'Use double quotes for string literals inside object/array literals (e.g. \'{"key": "value"}\', not "{\'key\': \'value\'}").',
32
+ startIndex: node.position.start,
33
+ endIndex: node.position.end,
34
+ fix: (corrector) => {
35
+ corrector.replace(node.position.start, node.position.end, JSON.stringify(node.value));
36
+ },
37
+ });
38
+ },
39
+ };
40
+ },
41
+ };
42
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/checks/json-literal-quote-style/index.ts"],"names":[],"mappings":";;;AAAA,uEAA2D;AAC3D,uCAA8E;AAEjE,QAAA,qBAAqB,GAA0B;IAC1D,IAAI,EAAE;QACJ,IAAI,EAAE,uBAAuB;QAC7B,IAAI,EAAE,oCAAoC;QAC1C,IAAI,EAAE;YACJ,WAAW,EACT,8KAA8K;YAChL,WAAW,EAAE,IAAI;YACjB,GAAG,EAAE,SAAS;SACf;QACD,IAAI,EAAE,sBAAc,CAAC,UAAU;QAC/B,QAAQ,EAAE,gBAAQ,CAAC,KAAK;QACxB,MAAM,EAAE,EAAE;QACV,OAAO,EAAE,EAAE;KACZ;IAED,MAAM,CAAC,OAAO;QACZ,OAAO;YACL,KAAK,CAAC,MAAM,CAAC,IAAI,EAAE,SAAS;gBAC1B,IAAI,CAAC,IAAI,CAAC,MAAM;oBAAE,OAAO;gBAEzB,oEAAoE;gBACpE,MAAM,iBAAiB,GAAG,SAAS,CAAC,IAAI,CACtC,CAAC,QAAQ,EAAE,EAAE,CACX,QAAQ,CAAC,IAAI,KAAK,8BAAS,CAAC,eAAe;oBAC3C,QAAQ,CAAC,IAAI,KAAK,8BAAS,CAAC,gBAAgB,CAC/C,CAAC;gBACF,IAAI,CAAC,iBAAiB;oBAAE,OAAO;gBAE/B,OAAO,CAAC,MAAM,CAAC;oBACb,OAAO,EACL,6HAA6H;oBAC/H,UAAU,EAAE,IAAI,CAAC,QAAQ,CAAC,KAAK;oBAC/B,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,GAAG;oBAC3B,GAAG,EAAE,CAAC,SAAS,EAAE,EAAE;wBACjB,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;oBACxF,CAAC;iBACF,CAAC,CAAC;YACL,CAAC;SACF,CAAC;IACJ,CAAC;CACF,CAAC"}
@@ -0,0 +1,21 @@
1
+ import { LiquidTag } from '@platformos/liquid-html-parser';
2
+ import { Problem, SourceCodeType } from '../../..';
3
+ /**
4
+ * Detects structurally-invalid `assign` tags that neither `MultipleAssignValues` nor
5
+ * `InvalidPipeSyntax`/`InvalidFilterName` catch:
6
+ *
7
+ * {% assign %} — empty markup
8
+ * {% assign x %} — target only, no operator
9
+ * {% assign x "var" %} — missing `=`
10
+ * {% assign = 'v' %} — missing target
11
+ * {% assign x = %} — empty RHS
12
+ * {% assign 'str' = 'v' %} — target is a literal
13
+ * {% assign x := 'v' %} — operator is not `=`
14
+ *
15
+ * When the strict grammar rule `liquidTagAssignMarkup` fails, the parser falls back to
16
+ * the base case and stores markup as a raw string. That string almost always still
17
+ * contains `=`-plus-RHS with a filter or pipe issue (handled elsewhere). This check
18
+ * targets the cases where the `target = value` skeleton itself is broken, so it
19
+ * complements rather than duplicates the other sub-checks.
20
+ */
21
+ export declare function detectInvalidAssignSyntax(node: LiquidTag): Problem<SourceCodeType.LiquidHtml> | undefined;
@@ -0,0 +1,60 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.detectInvalidAssignSyntax = detectInvalidAssignSyntax;
4
+ /**
5
+ * Detects structurally-invalid `assign` tags that neither `MultipleAssignValues` nor
6
+ * `InvalidPipeSyntax`/`InvalidFilterName` catch:
7
+ *
8
+ * {% assign %} — empty markup
9
+ * {% assign x %} — target only, no operator
10
+ * {% assign x "var" %} — missing `=`
11
+ * {% assign = 'v' %} — missing target
12
+ * {% assign x = %} — empty RHS
13
+ * {% assign 'str' = 'v' %} — target is a literal
14
+ * {% assign x := 'v' %} — operator is not `=`
15
+ *
16
+ * When the strict grammar rule `liquidTagAssignMarkup` fails, the parser falls back to
17
+ * the base case and stores markup as a raw string. That string almost always still
18
+ * contains `=`-plus-RHS with a filter or pipe issue (handled elsewhere). This check
19
+ * targets the cases where the `target = value` skeleton itself is broken, so it
20
+ * complements rather than duplicates the other sub-checks.
21
+ */
22
+ function detectInvalidAssignSyntax(node) {
23
+ if (node.name !== 'assign')
24
+ return;
25
+ if (typeof node.markup !== 'string')
26
+ return;
27
+ const markup = node.markup.trim();
28
+ const eqIndex = markup.indexOf('=');
29
+ const hasEquals = eqIndex !== -1;
30
+ const lhs = hasEquals ? markup.slice(0, eqIndex).trim() : markup;
31
+ const rhs = hasEquals ? markup.slice(eqIndex + 1).trim() : '';
32
+ const isStructurallyBroken = markup === '' || !hasEquals || lhs === '' || rhs === '' || !isValidAssignTarget(lhs);
33
+ if (!isStructurallyBroken)
34
+ return;
35
+ return {
36
+ message: `Invalid syntax for tag 'assign'. Expected syntax: {% assign <var> = <value> %}`,
37
+ startIndex: node.position.start,
38
+ endIndex: node.position.end,
39
+ };
40
+ }
41
+ /**
42
+ * Rejects an LHS that is obviously not an assign target.
43
+ *
44
+ * NOTE: the parser's `variableSegment` rule is stricter than the platformOS runtime —
45
+ * Liquify (see assign_tag_test.rb "allow variable names to start with digit") accepts
46
+ * `23_hours_ago` as a valid name, but our grammar requires `(letter | "_")` at the
47
+ * start and falls back to the base case for digit-starting names. To avoid
48
+ * false-positive lint errors on code that runs fine, this shape check only rejects
49
+ * LHS forms that are never valid: literal delimiters at the start (`'`, `"`, `[`, `{`)
50
+ * and stray operator characters (`:` or a second `=`) that indicate the operator
51
+ * itself is malformed (e.g. `:=`).
52
+ */
53
+ function isValidAssignTarget(lhs) {
54
+ if (/^['"[{]/.test(lhs))
55
+ return false;
56
+ if (/[:=]/.test(lhs))
57
+ return false;
58
+ return true;
59
+ }
60
+ //# sourceMappingURL=InvalidAssignSyntax.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"InvalidAssignSyntax.js","sourceRoot":"","sources":["../../../../src/checks/liquid-html-syntax-error/checks/InvalidAssignSyntax.ts"],"names":[],"mappings":";;AAqBA,8DAuBC;AAzCD;;;;;;;;;;;;;;;;;GAiBG;AACH,SAAgB,yBAAyB,CACvC,IAAe;IAEf,IAAI,IAAI,CAAC,IAAI,KAAK,QAAQ;QAAE,OAAO;IACnC,IAAI,OAAO,IAAI,CAAC,MAAM,KAAK,QAAQ;QAAE,OAAO;IAE5C,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;IAElC,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IACpC,MAAM,SAAS,GAAG,OAAO,KAAK,CAAC,CAAC,CAAC;IACjC,MAAM,GAAG,GAAG,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC;IACjE,MAAM,GAAG,GAAG,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IAE9D,MAAM,oBAAoB,GACxB,MAAM,KAAK,EAAE,IAAI,CAAC,SAAS,IAAI,GAAG,KAAK,EAAE,IAAI,GAAG,KAAK,EAAE,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,CAAC;IAEvF,IAAI,CAAC,oBAAoB;QAAE,OAAO;IAElC,OAAO;QACL,OAAO,EAAE,gFAAgF;QACzF,UAAU,EAAE,IAAI,CAAC,QAAQ,CAAC,KAAK;QAC/B,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,GAAG;KAC5B,CAAC;AACJ,CAAC;AAED;;;;;;;;;;;GAWG;AACH,SAAS,mBAAmB,CAAC,GAAW;IACtC,IAAI,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC;QAAE,OAAO,KAAK,CAAC;IACtC,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC;QAAE,OAAO,KAAK,CAAC;IACnC,OAAO,IAAI,CAAC;AACd,CAAC"}
@@ -0,0 +1,17 @@
1
+ import { LiquidTag, LiquidVariableOutput } from '@platformos/liquid-html-parser';
2
+ import { Problem, SourceCodeType } from '../../..';
3
+ /**
4
+ * Detects misuse of the `<<` (array push) operator inside output positions:
5
+ *
6
+ * {{ arr << "el" }} — invalid
7
+ * {% echo arr << "el" %} — invalid
8
+ *
9
+ * `<<` is only accepted as the top-level operator in an assign tag:
10
+ *
11
+ * {% assign arr << "el" %} — valid (pushes "el" onto arr)
12
+ *
13
+ * Runtime rejects output-position push with a hard syntax error; this check
14
+ * mirrors that with a clearer, actionable message than the generic
15
+ * `InvalidEchoValue` fallback ("Syntax is not supported").
16
+ */
17
+ export declare function detectInvalidOutputPush(node: LiquidTag | LiquidVariableOutput): Problem<SourceCodeType.LiquidHtml> | undefined;
@@ -0,0 +1,37 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.detectInvalidOutputPush = detectInvalidOutputPush;
4
+ const liquid_html_parser_1 = require("@platformos/liquid-html-parser");
5
+ const PUSH_OPERATOR_MESSAGE = "The '<<' (push) operator is only valid inside '{% assign target << value %}'. Remove it or move the expression into an assign tag.";
6
+ /**
7
+ * Detects misuse of the `<<` (array push) operator inside output positions:
8
+ *
9
+ * {{ arr << "el" }} — invalid
10
+ * {% echo arr << "el" %} — invalid
11
+ *
12
+ * `<<` is only accepted as the top-level operator in an assign tag:
13
+ *
14
+ * {% assign arr << "el" %} — valid (pushes "el" onto arr)
15
+ *
16
+ * Runtime rejects output-position push with a hard syntax error; this check
17
+ * mirrors that with a clearer, actionable message than the generic
18
+ * `InvalidEchoValue` fallback ("Syntax is not supported").
19
+ */
20
+ function detectInvalidOutputPush(node) {
21
+ if (node.type === liquid_html_parser_1.NodeTypes.LiquidTag && node.name !== 'echo')
22
+ return;
23
+ const markup = node.markup;
24
+ if (typeof markup !== 'string' || !markup)
25
+ return;
26
+ // Strip quoted strings so literal `<<` inside a string doesn't trigger the check
27
+ // (e.g. `{{ "a << b" }}` is a harmless string with no push operator).
28
+ const stripped = markup.replace(/'[^']*'|"[^"]*"/g, '');
29
+ if (!/<</.test(stripped))
30
+ return;
31
+ return {
32
+ message: PUSH_OPERATOR_MESSAGE,
33
+ startIndex: node.position.start,
34
+ endIndex: node.position.end,
35
+ };
36
+ }
37
+ //# sourceMappingURL=InvalidOutputPush.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"InvalidOutputPush.js","sourceRoot":"","sources":["../../../../src/checks/liquid-html-syntax-error/checks/InvalidOutputPush.ts"],"names":[],"mappings":";;AAoBA,0DAkBC;AAtCD,uEAA4F;AAG5F,MAAM,qBAAqB,GACzB,oIAAoI,CAAC;AAEvI;;;;;;;;;;;;;GAaG;AACH,SAAgB,uBAAuB,CACrC,IAAsC;IAEtC,IAAI,IAAI,CAAC,IAAI,KAAK,8BAAS,CAAC,SAAS,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM;QAAE,OAAO;IAEtE,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;IAC3B,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,CAAC,MAAM;QAAE,OAAO;IAElD,iFAAiF;IACjF,sEAAsE;IACtE,MAAM,QAAQ,GAAG,MAAM,CAAC,OAAO,CAAC,kBAAkB,EAAE,EAAE,CAAC,CAAC;IACxD,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC;QAAE,OAAO;IAEjC,OAAO;QACL,OAAO,EAAE,qBAAqB;QAC9B,UAAU,EAAE,IAAI,CAAC,QAAQ,CAAC,KAAK;QAC/B,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,GAAG;KAC5B,CAAC;AACJ,CAAC"}
@@ -12,7 +12,7 @@ const TAGS_WITH_NO_EXPECTED_MARKUP = new Set(liquid_html_parser_1.TAGS_WITHOUT_M
12
12
  * more specific error messages and autofixes. This check should NOT fire on these
13
13
  * to avoid double-reporting or overriding their nuanced decisions.
14
14
  *
15
- * - assign → MultipleAssignValues, InvalidFilterName, InvalidPipeSyntax
15
+ * - assign → MultipleAssignValues, InvalidAssignSyntax, InvalidFilterName, InvalidPipeSyntax
16
16
  * - echo → InvalidEchoValue, InvalidFilterName, InvalidPipeSyntax
17
17
  * - if/elsif/unless → InvalidConditionalNode, InvalidConditionalNodeParenthesis
18
18
  * - for/tablerow → InvalidLoopRange, InvalidLoopArguments
@@ -4,6 +4,7 @@ exports.LiquidHTMLSyntaxError = void 0;
4
4
  const types_1 = require("../../types");
5
5
  const utils_1 = require("../../utils");
6
6
  const MultipleAssignValues_1 = require("./checks/MultipleAssignValues");
7
+ const InvalidAssignSyntax_1 = require("./checks/InvalidAssignSyntax");
7
8
  const InvalidBooleanExpressions_1 = require("./checks/InvalidBooleanExpressions");
8
9
  const InvalidEchoValue_1 = require("./checks/InvalidEchoValue");
9
10
  const InvalidConditionalNode_1 = require("./checks/InvalidConditionalNode");
@@ -14,6 +15,7 @@ const InvalidFilterName_1 = require("./checks/InvalidFilterName");
14
15
  const InvalidPipeSyntax_1 = require("./checks/InvalidPipeSyntax");
15
16
  const UnknownTag_1 = require("./checks/UnknownTag");
16
17
  const InvalidTagSyntax_1 = require("./checks/InvalidTagSyntax");
18
+ const InvalidOutputPush_1 = require("./checks/InvalidOutputPush");
17
19
  const utils_2 = require("../utils");
18
20
  function isParsingErrorWithLocation(error) {
19
21
  return 'name' in error && error.name === 'LiquidHTMLParsingError' && 'loc' in error;
@@ -62,9 +64,17 @@ exports.LiquidHTMLSyntaxError = {
62
64
  context.report(unknownTagProblem);
63
65
  return;
64
66
  }
67
+ // Push-operator misuse in `{% echo … << … %}` — dedicated message.
68
+ // Short-circuit so InvalidEchoValue doesn't duplicate with a generic message.
69
+ const outputPushProblem = (0, InvalidOutputPush_1.detectInvalidOutputPush)(node);
70
+ if (outputPushProblem) {
71
+ context.report(outputPushProblem);
72
+ return;
73
+ }
65
74
  // Run specific sub-checks first — they provide better error messages and autofixes.
66
75
  const problems = [
67
76
  (0, MultipleAssignValues_1.detectMultipleAssignValues)(node),
77
+ (0, InvalidAssignSyntax_1.detectInvalidAssignSyntax)(node),
68
78
  (0, InvalidEchoValue_1.detectInvalidEchoValue)(node),
69
79
  (0, InvalidLoopRange_1.detectInvalidLoopRange)(node),
70
80
  (0, InvalidLoopArguments_1.detectInvalidLoopArguments)(node, tags),
@@ -105,6 +115,13 @@ exports.LiquidHTMLSyntaxError = {
105
115
  async LiquidVariableOutput(node, ancestors) {
106
116
  if ((0, utils_2.isWithinRawTagThatDoesNotParseItsContents)(ancestors))
107
117
  return;
118
+ // Push-operator misuse in `{{ … << … }}` — dedicated message.
119
+ // Short-circuit so InvalidEchoValue doesn't duplicate with a generic message.
120
+ const outputPushProblem = (0, InvalidOutputPush_1.detectInvalidOutputPush)(node);
121
+ if (outputPushProblem) {
122
+ context.report(outputPushProblem);
123
+ return;
124
+ }
108
125
  const filterProblems = await (0, InvalidFilterName_1.detectInvalidFilterName)(node, (await filtersPromise) ?? []);
109
126
  if (filterProblems.length > 0) {
110
127
  filterProblems.forEach((problem) => context.report(problem));
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/checks/liquid-html-syntax-error/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/checks/liquid-html-syntax-error/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ /**
2
+ * Parses a Liquid source string and returns a deduplicated list of variable names
3
+ * that are used but never defined. Returns `{ required: [], optional: [] }` on parse errors.
4
+ *
5
+ * Variables used exclusively with `| default` filter (e.g. `assign x = x | default: val`)
6
+ * are returned in `optional` — the partial handles the missing-argument case itself.
7
+ *
8
+ * This mirrors the variable tracking logic from the UndefinedObject check but
9
+ * packaged as a standalone synchronous function.
10
+ */
11
+ export declare function extractUndefinedVariables(source: string, globalObjectNames?: string[]): {
12
+ required: string[];
13
+ optional: string[];
14
+ };
@@ -0,0 +1,234 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.extractUndefinedVariables = extractUndefinedVariables;
4
+ const liquid_html_parser_1 = require("@platformos/liquid-html-parser");
5
+ /**
6
+ * Parses a Liquid source string and returns a deduplicated list of variable names
7
+ * that are used but never defined. Returns `{ required: [], optional: [] }` on parse errors.
8
+ *
9
+ * Variables used exclusively with `| default` filter (e.g. `assign x = x | default: val`)
10
+ * are returned in `optional` — the partial handles the missing-argument case itself.
11
+ *
12
+ * This mirrors the variable tracking logic from the UndefinedObject check but
13
+ * packaged as a standalone synchronous function.
14
+ */
15
+ function extractUndefinedVariables(source, globalObjectNames = []) {
16
+ let ast;
17
+ try {
18
+ ast = (0, liquid_html_parser_1.toLiquidHtmlAST)(source);
19
+ }
20
+ catch {
21
+ return { required: [], optional: [] };
22
+ }
23
+ const scopedVariables = new Map();
24
+ const fileScopedVariables = new Set(globalObjectNames);
25
+ const variables = [];
26
+ const variablesWithDefault = new Set();
27
+ function indexVariableScope(variableName, scope) {
28
+ if (!variableName)
29
+ return;
30
+ const indexedScope = scopedVariables.get(variableName) ?? [];
31
+ scopedVariables.set(variableName, indexedScope.concat(scope));
32
+ }
33
+ function walk(node, ancestors) {
34
+ // Process definitions from LiquidTag nodes
35
+ if (node.type === liquid_html_parser_1.NodeTypes.LiquidTag) {
36
+ handleLiquidTag(node, ancestors);
37
+ }
38
+ // Process definitions from LiquidBranch nodes (catch)
39
+ if (node.type === liquid_html_parser_1.NodeTypes.LiquidBranch) {
40
+ handleLiquidBranch(node);
41
+ }
42
+ // Process variable usages
43
+ if (node.type === liquid_html_parser_1.NodeTypes.VariableLookup) {
44
+ handleVariableLookup(node, ancestors);
45
+ }
46
+ // Recurse into children
47
+ const newAncestors = ancestors.concat(node);
48
+ for (const value of Object.values(node)) {
49
+ if (Array.isArray(value)) {
50
+ for (const item of value) {
51
+ if (isNode(item)) {
52
+ walk(item, newAncestors);
53
+ }
54
+ }
55
+ }
56
+ else if (isNode(value)) {
57
+ walk(value, newAncestors);
58
+ }
59
+ }
60
+ }
61
+ function handleLiquidTag(node, _ancestors) {
62
+ if (isLiquidTagAssign(node) || isLiquidTagGraphQL(node) || isLiquidTagParseJson(node)) {
63
+ indexVariableScope(node.markup.name, {
64
+ start: node.blockStartPosition.end,
65
+ });
66
+ }
67
+ if (isLiquidTagHashAssign(node) && node.markup.target.name) {
68
+ indexVariableScope(node.markup.target.name, {
69
+ start: node.blockStartPosition.end,
70
+ });
71
+ }
72
+ if (isLiquidTagCapture(node)) {
73
+ indexVariableScope(node.markup.name, {
74
+ start: node.blockEndPosition?.end,
75
+ });
76
+ }
77
+ if (node.name === 'form') {
78
+ indexVariableScope(node.name, {
79
+ start: node.blockStartPosition.end,
80
+ end: node.blockEndPosition?.start,
81
+ });
82
+ }
83
+ if (node.name === 'function') {
84
+ const fnName = node.markup.name;
85
+ if (fnName.lookups.length === 0 && fnName.name !== null) {
86
+ indexVariableScope(fnName.name, {
87
+ start: node.position.end,
88
+ });
89
+ }
90
+ }
91
+ if ((isLiquidTagIncrement(node) || isLiquidTagDecrement(node)) && node.markup.name !== null) {
92
+ indexVariableScope(node.markup.name, {
93
+ start: node.position.start,
94
+ });
95
+ }
96
+ if (isLiquidForTag(node) || isLiquidTableRowTag(node)) {
97
+ indexVariableScope(node.markup.variableName, {
98
+ start: node.blockStartPosition.end,
99
+ end: node.blockEndPosition?.start,
100
+ });
101
+ indexVariableScope(node.name === 'for' ? 'forloop' : 'tablerowloop', {
102
+ start: node.blockStartPosition.end,
103
+ end: node.blockEndPosition?.start,
104
+ });
105
+ }
106
+ if (isLiquidTagBackground(node)) {
107
+ indexVariableScope(node.markup.jobId, {
108
+ start: node.position.end,
109
+ });
110
+ }
111
+ }
112
+ function handleLiquidBranch(node) {
113
+ if (node.name === liquid_html_parser_1.NamedTags.catch &&
114
+ node.markup &&
115
+ typeof node.markup !== 'string' &&
116
+ 'name' in node.markup &&
117
+ node.markup.name) {
118
+ indexVariableScope(node.markup.name, {
119
+ start: node.blockStartPosition.end,
120
+ end: node.blockEndPosition?.start,
121
+ });
122
+ }
123
+ }
124
+ function handleVariableLookup(node, ancestors) {
125
+ const parent = ancestors[ancestors.length - 1];
126
+ if (isLiquidTag(parent) && isLiquidTagCapture(parent))
127
+ return;
128
+ if (isLiquidTag(parent) && isLiquidTagParseJson(parent))
129
+ return;
130
+ if (isFunctionMarkup(parent) && parent.name === node)
131
+ return;
132
+ if (isLiquidBranchCatch(parent) && parent.markup === node)
133
+ return;
134
+ if (isHashAssignMarkup(parent) && parent.target === node)
135
+ return;
136
+ variables.push(node);
137
+ // Detect `x | default: ...` — the variable is the expression of a LiquidVariable
138
+ // that has a `default` filter, meaning the partial handles the missing case itself.
139
+ if (node.name &&
140
+ isLiquidVariable(parent) &&
141
+ parent.expression === node &&
142
+ parent.filters.some((f) => f.name === 'default')) {
143
+ variablesWithDefault.add(node.name);
144
+ }
145
+ }
146
+ walk(ast, []);
147
+ // Determine undefined variables
148
+ const seen = new Set();
149
+ const required = [];
150
+ const optional = [];
151
+ for (const variable of variables) {
152
+ if (!variable.name)
153
+ continue;
154
+ if (seen.has(variable.name))
155
+ continue;
156
+ const isVariableDefined = isDefined(variable.name, variable.position, fileScopedVariables, scopedVariables);
157
+ if (!isVariableDefined) {
158
+ seen.add(variable.name);
159
+ if (variablesWithDefault.has(variable.name)) {
160
+ optional.push(variable.name);
161
+ }
162
+ else {
163
+ required.push(variable.name);
164
+ }
165
+ }
166
+ }
167
+ return { required, optional };
168
+ }
169
+ function isNode(x) {
170
+ return x !== null && typeof x === 'object' && typeof x.type === 'string';
171
+ }
172
+ function isDefined(variableName, variablePosition, fileScopedVariables, scopedVariables) {
173
+ if (fileScopedVariables.has(variableName)) {
174
+ return true;
175
+ }
176
+ const scopes = scopedVariables.get(variableName);
177
+ if (!scopes) {
178
+ return false;
179
+ }
180
+ return scopes.some((scope) => {
181
+ const start = variablePosition.start;
182
+ const isVariableAfterScopeStart = !scope.start || start > scope.start;
183
+ const isVariableBeforeScopeEnd = !scope.end || start < scope.end;
184
+ return isVariableAfterScopeStart && isVariableBeforeScopeEnd;
185
+ });
186
+ }
187
+ function isLiquidTag(node) {
188
+ return node?.type === liquid_html_parser_1.NodeTypes.LiquidTag;
189
+ }
190
+ function isLiquidTagCapture(node) {
191
+ return node.name === liquid_html_parser_1.NamedTags.capture;
192
+ }
193
+ function isLiquidTagAssign(node) {
194
+ return node.name === liquid_html_parser_1.NamedTags.assign && typeof node.markup !== 'string';
195
+ }
196
+ function isLiquidTagHashAssign(node) {
197
+ return node.name === liquid_html_parser_1.NamedTags.hash_assign && typeof node.markup !== 'string';
198
+ }
199
+ function isLiquidTagGraphQL(node) {
200
+ return node.name === liquid_html_parser_1.NamedTags.graphql && typeof node.markup !== 'string';
201
+ }
202
+ function isLiquidTagParseJson(node) {
203
+ return node.name === liquid_html_parser_1.NamedTags.parse_json && typeof node.markup !== 'string';
204
+ }
205
+ function isLiquidForTag(node) {
206
+ return node.name === liquid_html_parser_1.NamedTags.for && typeof node.markup !== 'string';
207
+ }
208
+ function isLiquidTableRowTag(node) {
209
+ return node.name === liquid_html_parser_1.NamedTags.tablerow && typeof node.markup !== 'string';
210
+ }
211
+ function isLiquidTagIncrement(node) {
212
+ return node.name === liquid_html_parser_1.NamedTags.increment && typeof node.markup !== 'string';
213
+ }
214
+ function isLiquidTagDecrement(node) {
215
+ return node.name === liquid_html_parser_1.NamedTags.decrement && typeof node.markup !== 'string';
216
+ }
217
+ function isLiquidTagBackground(node) {
218
+ return (node.name === liquid_html_parser_1.NamedTags.background &&
219
+ typeof node.markup !== 'string' &&
220
+ node.markup.type === liquid_html_parser_1.NodeTypes.BackgroundMarkup);
221
+ }
222
+ function isHashAssignMarkup(node) {
223
+ return node?.type === liquid_html_parser_1.NodeTypes.HashAssignMarkup;
224
+ }
225
+ function isFunctionMarkup(node) {
226
+ return node?.type === liquid_html_parser_1.NodeTypes.FunctionMarkup;
227
+ }
228
+ function isLiquidBranchCatch(node) {
229
+ return node?.type === liquid_html_parser_1.NodeTypes.LiquidBranch && node.name === liquid_html_parser_1.NamedTags.catch;
230
+ }
231
+ function isLiquidVariable(node) {
232
+ return node?.type === liquid_html_parser_1.NodeTypes.LiquidVariable;
233
+ }
234
+ //# sourceMappingURL=extract-undefined-variables.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"extract-undefined-variables.js","sourceRoot":"","sources":["../../../src/checks/partial-call-arguments/extract-undefined-variables.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import { LiquidCheckDefinition } from '../../types';
2
+ export declare const PartialCallArguments: LiquidCheckDefinition;