@platformos/platformos-check-common 0.0.11 → 0.0.13
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.
- package/CHANGELOG.md +39 -0
- package/CLAUDE.md +150 -0
- package/dist/AugmentedPlatformOSDocset.js +1 -0
- package/dist/AugmentedPlatformOSDocset.js.map +1 -1
- package/dist/checks/circular-render/index.d.ts +2 -0
- package/dist/checks/circular-render/index.js +164 -0
- package/dist/checks/circular-render/index.js.map +1 -0
- package/dist/checks/deprecated-filter/index.js +15 -0
- package/dist/checks/deprecated-filter/index.js.map +1 -1
- package/dist/checks/duplicate-content-for-arguments/index.js +1 -1
- package/dist/checks/duplicate-content-for-arguments/index.js.map +1 -1
- package/dist/checks/graphql/index.d.ts +1 -0
- package/dist/checks/graphql/index.js +20 -7
- package/dist/checks/graphql/index.js.map +1 -1
- package/dist/checks/index.d.ts +1 -1
- package/dist/checks/index.js +6 -0
- package/dist/checks/index.js.map +1 -1
- package/dist/checks/invalid-hash-assign-target/index.js +4 -3
- package/dist/checks/invalid-hash-assign-target/index.js.map +1 -1
- package/dist/checks/missing-content-for-arguments/index.js +1 -1
- package/dist/checks/missing-content-for-arguments/index.js.map +1 -1
- package/dist/checks/missing-page/index.d.ts +2 -0
- package/dist/checks/missing-page/index.js +73 -0
- package/dist/checks/missing-page/index.js.map +1 -0
- package/dist/checks/missing-partial/index.js +31 -31
- package/dist/checks/missing-partial/index.js.map +1 -1
- package/dist/checks/missing-render-partial-arguments/index.d.ts +2 -0
- package/dist/checks/missing-render-partial-arguments/index.js +37 -0
- package/dist/checks/missing-render-partial-arguments/index.js.map +1 -0
- package/dist/checks/nested-graphql-query/index.d.ts +2 -0
- package/dist/checks/nested-graphql-query/index.js +146 -0
- package/dist/checks/nested-graphql-query/index.js.map +1 -0
- package/dist/checks/pagination-size/index.js +1 -1
- package/dist/checks/pagination-size/index.js.map +1 -1
- package/dist/checks/translation-key-exists/index.js +16 -19
- package/dist/checks/translation-key-exists/index.js.map +1 -1
- package/dist/checks/translation-utils.d.ts +20 -0
- package/dist/checks/translation-utils.js +51 -0
- package/dist/checks/translation-utils.js.map +1 -0
- package/dist/checks/undefined-object/index.js +35 -13
- package/dist/checks/undefined-object/index.js.map +1 -1
- package/dist/checks/unknown-property/index.js +75 -10
- package/dist/checks/unknown-property/index.js.map +1 -1
- package/dist/checks/unknown-property/property-shape.js +14 -1
- package/dist/checks/unknown-property/property-shape.js.map +1 -1
- package/dist/checks/unrecognized-content-for-arguments/index.js +1 -1
- package/dist/checks/unrecognized-content-for-arguments/index.js.map +1 -1
- package/dist/checks/unused-assign/index.js +23 -1
- package/dist/checks/unused-assign/index.js.map +1 -1
- package/dist/checks/unused-translation-key/index.d.ts +4 -0
- package/dist/checks/unused-translation-key/index.js +85 -0
- package/dist/checks/unused-translation-key/index.js.map +1 -0
- package/dist/checks/valid-content-for-argument-types/index.js +1 -1
- package/dist/checks/valid-content-for-argument-types/index.js.map +1 -1
- package/dist/checks/valid-render-partial-argument-types/index.js +2 -1
- package/dist/checks/valid-render-partial-argument-types/index.js.map +1 -1
- package/dist/checks/variable-name/index.js +4 -0
- package/dist/checks/variable-name/index.js.map +1 -1
- package/dist/context-utils.d.ts +2 -1
- package/dist/context-utils.js +31 -1
- package/dist/context-utils.js.map +1 -1
- package/dist/doc-generator/DocBlockGenerator.d.ts +16 -0
- package/dist/doc-generator/DocBlockGenerator.js +464 -0
- package/dist/doc-generator/DocBlockGenerator.js.map +1 -0
- package/dist/doc-generator/index.d.ts +1 -0
- package/dist/doc-generator/index.js +6 -0
- package/dist/doc-generator/index.js.map +1 -0
- package/dist/frontmatter/index.d.ts +59 -0
- package/dist/frontmatter/index.js +301 -0
- package/dist/frontmatter/index.js.map +1 -0
- package/dist/index.d.ts +3 -1
- package/dist/index.js +6 -1
- package/dist/index.js.map +1 -1
- package/dist/liquid-doc/arguments.js +9 -0
- package/dist/liquid-doc/arguments.js.map +1 -1
- package/dist/liquid-doc/utils.d.ts +10 -2
- package/dist/liquid-doc/utils.js +26 -1
- package/dist/liquid-doc/utils.js.map +1 -1
- package/dist/path.d.ts +1 -1
- package/dist/path.js +3 -1
- package/dist/path.js.map +1 -1
- package/dist/to-schema.d.ts +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/dist/types.d.ts +8 -1
- package/dist/types.js.map +1 -1
- package/dist/url-helpers.d.ts +55 -0
- package/dist/url-helpers.js +334 -0
- package/dist/url-helpers.js.map +1 -0
- package/dist/utils/block.js.map +1 -1
- package/dist/utils/index.d.ts +1 -0
- package/dist/utils/index.js +1 -0
- package/dist/utils/index.js.map +1 -1
- package/dist/utils/levenshtein.d.ts +3 -0
- package/dist/utils/levenshtein.js +39 -0
- package/dist/utils/levenshtein.js.map +1 -0
- package/package.json +2 -2
- package/src/AugmentedPlatformOSDocset.ts +1 -0
- package/src/checks/deprecated-filter/index.spec.ts +41 -1
- package/src/checks/deprecated-filter/index.ts +17 -0
- package/src/checks/graphql/index.spec.ts +173 -0
- package/src/checks/graphql/index.ts +21 -10
- package/src/checks/index.ts +6 -0
- package/src/checks/invalid-hash-assign-target/index.spec.ts +26 -0
- package/src/checks/invalid-hash-assign-target/index.ts +6 -4
- package/src/checks/missing-page/index.spec.ts +755 -0
- package/src/checks/missing-page/index.ts +89 -0
- package/src/checks/missing-partial/index.spec.ts +361 -0
- package/src/checks/missing-partial/index.ts +39 -47
- package/src/checks/missing-render-partial-arguments/index.spec.ts +74 -0
- package/src/checks/missing-render-partial-arguments/index.ts +44 -0
- package/src/checks/nested-graphql-query/index.spec.ts +175 -0
- package/src/checks/nested-graphql-query/index.ts +203 -0
- package/src/checks/parser-blocking-script/index.spec.ts +7 -3
- package/src/checks/translation-key-exists/index.spec.ts +79 -2
- package/src/checks/translation-key-exists/index.ts +18 -27
- package/src/checks/translation-utils.ts +63 -0
- package/src/checks/undefined-object/index.spec.ts +153 -19
- package/src/checks/undefined-object/index.ts +43 -19
- package/src/checks/unknown-property/index.spec.ts +133 -0
- package/src/checks/unknown-property/index.ts +84 -10
- package/src/checks/unknown-property/property-shape.ts +15 -1
- package/src/checks/unused-assign/index.spec.ts +75 -1
- package/src/checks/unused-assign/index.ts +26 -1
- package/src/checks/unused-doc-param/index.spec.ts +4 -2
- package/src/checks/valid-doc-param-types/index.spec.ts +1 -1
- package/src/checks/valid-render-partial-argument-types/index.spec.ts +24 -1
- package/src/checks/valid-render-partial-argument-types/index.ts +3 -2
- package/src/checks/variable-name/index.spec.ts +10 -1
- package/src/checks/variable-name/index.ts +5 -0
- package/src/context-utils.ts +33 -1
- package/src/frontmatter/index.ts +344 -0
- package/src/index.ts +6 -0
- package/src/liquid-doc/arguments.ts +9 -0
- package/src/liquid-doc/utils.ts +26 -2
- package/src/path.ts +2 -0
- package/src/types.ts +9 -1
- package/src/url-helpers.spec.ts +241 -0
- package/src/url-helpers.ts +363 -0
- package/src/utils/index.ts +1 -0
- package/src/utils/levenshtein.ts +41 -0
package/dist/types.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { LiquidHtmlNode, NodeTypes as LiquidHtmlNodeTypes } from '@platformos/liquid-html-parser';
|
|
2
2
|
import { Schema, Settings } from './types/schema-prop-factory';
|
|
3
|
-
import { AbstractFileSystem, UriString } from '@platformos/platformos-common';
|
|
3
|
+
import { AbstractFileSystem, RouteTable, UriString } from '@platformos/platformos-common';
|
|
4
4
|
import { JSONCorrector, StringCorrector } from './fixes';
|
|
5
5
|
import { ArrayNode, ASTNode, JSONNode, JSONNodeTypes, LiteralNode, ObjectNode, PropertyNode, ValueNode } from './jsonc/types';
|
|
6
6
|
import { JsonValidationSet, PlatformOSDocset } from './types/platformos-liquid-docs';
|
|
@@ -262,6 +262,11 @@ export interface Dependencies {
|
|
|
262
262
|
* Returns an empty array if no files reference this file
|
|
263
263
|
*/
|
|
264
264
|
getReferences?: (uri: string) => Promise<Reference[]>;
|
|
265
|
+
/**
|
|
266
|
+
* Optional pre-built RouteTable. When provided (e.g. by the LSP),
|
|
267
|
+
* the check pipeline reuses it instead of building a new one per run.
|
|
268
|
+
*/
|
|
269
|
+
routeTable?: RouteTable;
|
|
265
270
|
}
|
|
266
271
|
export type ValidateJSON = (uri: string, jsonString: string) => Promise<{
|
|
267
272
|
message: string;
|
|
@@ -282,6 +287,8 @@ export interface AugmentedDependencies extends Dependencies {
|
|
|
282
287
|
* Covers both `{base}/{locale}.yml` and `{base}/{locale}/*.yml`.
|
|
283
288
|
*/
|
|
284
289
|
getTranslationsForBase(translationBaseUri: string, locale: string): Promise<Translations>;
|
|
290
|
+
/** Lazily builds and returns a shared RouteTable for the current check run. */
|
|
291
|
+
getRouteTable(): Promise<RouteTable>;
|
|
285
292
|
}
|
|
286
293
|
type StaticContextProperties<T extends SourceCodeType> = T extends SourceCodeType ? {
|
|
287
294
|
report(problem: Problem<T>): void;
|
package/dist/types.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAAA,uEAAkG;AAwEzE,oGAxEa,8BAAmB,OAwEb;AAnD5C,gDAA8B;AAC9B,8DAA4C;AAC5C,iEAA+C;AAExC,MAAM,YAAY,GAAG,CAAC,IAAc,EAAsB,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,QAAQ,CAAC;AAA/E,QAAA,YAAY,gBAAmE;AACrF,MAAM,WAAW,GAAG,CAAC,IAAc,EAAqB,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,OAAO,CAAC;AAA5E,QAAA,WAAW,eAAiE;AAClF,MAAM,cAAc,GAAG,CAAC,IAAc,EAAwB,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,UAAU,CAAC;AAArF,QAAA,cAAc,kBAAuE;AAC3F,MAAM,WAAW,GAAG,CAAC,IAAc,EAAqB,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,OAAO,CAAC;AAA5E,QAAA,WAAW,eAAiE;AAClF,MAAM,aAAa,GAAG,CAAC,IAAc,EAAuB,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,SAAS,CAAC;AAAlF,QAAA,aAAa,iBAAqE;AAkB/F,IAAY,cAKX;AALD,WAAY,cAAc;IACxB,+BAAa,CAAA;IACb,2CAAyB,CAAA;IACzB,qCAAmB,CAAA;IACnB,+BAAa,CAAA;AACf,CAAC,EALW,cAAc,8BAAd,cAAc,QAKzB;
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAAA,uEAAkG;AAwEzE,oGAxEa,8BAAmB,OAwEb;AAnD5C,gDAA8B;AAC9B,8DAA4C;AAC5C,iEAA+C;AAExC,MAAM,YAAY,GAAG,CAAC,IAAc,EAAsB,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,QAAQ,CAAC;AAA/E,QAAA,YAAY,gBAAmE;AACrF,MAAM,WAAW,GAAG,CAAC,IAAc,EAAqB,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,OAAO,CAAC;AAA5E,QAAA,WAAW,eAAiE;AAClF,MAAM,cAAc,GAAG,CAAC,IAAc,EAAwB,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,UAAU,CAAC;AAArF,QAAA,cAAc,kBAAuE;AAC3F,MAAM,WAAW,GAAG,CAAC,IAAc,EAAqB,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,OAAO,CAAC;AAA5E,QAAA,WAAW,eAAiE;AAClF,MAAM,aAAa,GAAG,CAAC,IAAc,EAAuB,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,SAAS,CAAC;AAAlF,QAAA,aAAa,iBAAqE;AAkB/F,IAAY,cAKX;AALD,WAAY,cAAc;IACxB,+BAAa,CAAA;IACb,2CAAyB,CAAA;IACzB,qCAAmB,CAAA;IACnB,+BAAa,CAAA;AACf,CAAC,EALW,cAAc,8BAAd,cAAc,QAKzB;AAkfD,gEAAgE;AAChE,IAAY,QAIX;AAJD,WAAY,QAAQ;IAClB,yCAAS,CAAA;IACT,6CAAW,CAAA;IACX,uCAAQ,CAAA;AACV,CAAC,EAJW,QAAQ,wBAAR,QAAQ,QAInB;AAED,+CAA+C;AAC/C,IAAY,YAGX;AAHD,WAAY,YAAY;IACtB,2BAAW,CAAA;IACX,2CAA2B,CAAA;AAC7B,CAAC,EAHW,YAAY,4BAAZ,YAAY,QAGvB"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import { LiquidHtmlNode, HtmlElement, AssignMarkup, AttrDoubleQuoted, AttrSingleQuoted, AttrUnquoted } from '@platformos/liquid-html-parser';
|
|
2
|
+
export declare function shouldSkipUrl(url: string): boolean;
|
|
3
|
+
export type ValuedAttrNode = AttrDoubleQuoted | AttrSingleQuoted | AttrUnquoted;
|
|
4
|
+
export declare function isValuedAttrNode(node: LiquidHtmlNode): node is ValuedAttrNode;
|
|
5
|
+
export declare function getAttrName(attr: ValuedAttrNode): string | null;
|
|
6
|
+
export declare function getStaticAttrValue(attr: ValuedAttrNode): string | null;
|
|
7
|
+
/**
|
|
8
|
+
* Resolve an assign markup's RHS to a URL pattern string.
|
|
9
|
+
* Handles string literals with `append` and `prepend` filters.
|
|
10
|
+
* Variable arguments to append/prepend become `:_liquid_` placeholders.
|
|
11
|
+
* Returns null if the value can't be statically resolved to a URL pattern.
|
|
12
|
+
*/
|
|
13
|
+
export declare function resolveAssignToUrlPattern(markup: AssignMarkup): string | null;
|
|
14
|
+
/**
|
|
15
|
+
* Extract a URL pattern from an attribute value.
|
|
16
|
+
* Returns null if the URL cannot be analyzed (contains Liquid tags or is fully dynamic).
|
|
17
|
+
*
|
|
18
|
+
* Static text becomes literal path segments.
|
|
19
|
+
* Each {{ expression }} becomes `:_liquid_` (matches one path segment).
|
|
20
|
+
* {{ context.location.host }} is recognized and stripped from absolute self-referencing URLs.
|
|
21
|
+
*
|
|
22
|
+
* When a `variableMap` is provided, a single `{{ varName }}` in the attribute
|
|
23
|
+
* will be resolved through the map (from tracked {% assign %} statements).
|
|
24
|
+
*/
|
|
25
|
+
export declare function extractUrlPattern(attr: ValuedAttrNode, variableMap?: Map<string, string>): string | null;
|
|
26
|
+
/**
|
|
27
|
+
* Determine the effective HTTP method for a <form> element,
|
|
28
|
+
* accounting for _method hidden input overrides.
|
|
29
|
+
* Returns null if the method can't be statically determined.
|
|
30
|
+
*/
|
|
31
|
+
export declare function getEffectiveMethod(formNode: HtmlElement): string | null;
|
|
32
|
+
/**
|
|
33
|
+
* If the given node is a `{% assign %}` tag whose RHS resolves to a URL pattern,
|
|
34
|
+
* returns `{ name, urlPattern }`. Otherwise returns null.
|
|
35
|
+
*
|
|
36
|
+
* Shared by `buildVariableMap` (full AST walk) and `MissingPage` (incremental
|
|
37
|
+
* visitor), so the assign-to-URL resolution logic lives in one place.
|
|
38
|
+
*/
|
|
39
|
+
export declare function tryExtractAssignUrl(node: LiquidHtmlNode): {
|
|
40
|
+
name: string;
|
|
41
|
+
urlPattern: string;
|
|
42
|
+
} | null;
|
|
43
|
+
/**
|
|
44
|
+
* Walk an AST subtree and collect {% assign %} variable mappings that resolve to URL patterns.
|
|
45
|
+
* Not scope-aware: assigns inside {% if %} / {% for %} blocks are tracked even though they
|
|
46
|
+
* may not be in scope when the href is evaluated. This is an acceptable trade-off — the
|
|
47
|
+
* alternative (full scope analysis) would add significant complexity for marginal accuracy gains.
|
|
48
|
+
*
|
|
49
|
+
* Uses document-order traversal so that reassignments correctly overwrite earlier values.
|
|
50
|
+
*
|
|
51
|
+
* @param beforeOffset When provided, only assigns whose position.end is before this
|
|
52
|
+
* offset are included. Used by the LSP definition provider so that each cursor
|
|
53
|
+
* position sees only the assigns that precede it.
|
|
54
|
+
*/
|
|
55
|
+
export declare function buildVariableMap(children: LiquidHtmlNode[], beforeOffset?: number): Map<string, string>;
|
|
@@ -0,0 +1,334 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.shouldSkipUrl = shouldSkipUrl;
|
|
4
|
+
exports.isValuedAttrNode = isValuedAttrNode;
|
|
5
|
+
exports.getAttrName = getAttrName;
|
|
6
|
+
exports.getStaticAttrValue = getStaticAttrValue;
|
|
7
|
+
exports.resolveAssignToUrlPattern = resolveAssignToUrlPattern;
|
|
8
|
+
exports.extractUrlPattern = extractUrlPattern;
|
|
9
|
+
exports.getEffectiveMethod = getEffectiveMethod;
|
|
10
|
+
exports.tryExtractAssignUrl = tryExtractAssignUrl;
|
|
11
|
+
exports.buildVariableMap = buildVariableMap;
|
|
12
|
+
const liquid_html_parser_1 = require("@platformos/liquid-html-parser");
|
|
13
|
+
/**
|
|
14
|
+
* Shared URL extraction and HTTP method detection helpers
|
|
15
|
+
* for route-aware checks and LSP features.
|
|
16
|
+
*
|
|
17
|
+
* These helpers depend on liquid-html-parser AST types and live in
|
|
18
|
+
* platformos-check-common (not platformos-common) to keep the lower-level
|
|
19
|
+
* package free of parser dependencies. The pure RouteTable/slug logic
|
|
20
|
+
* remains in platformos-common.
|
|
21
|
+
*/
|
|
22
|
+
/** Extract the `children` array from a node if it has one (block tags, elements). */
|
|
23
|
+
function getTraversableChildren(node) {
|
|
24
|
+
if ('children' in node) {
|
|
25
|
+
const children = node.children;
|
|
26
|
+
if (Array.isArray(children))
|
|
27
|
+
return children;
|
|
28
|
+
}
|
|
29
|
+
return null;
|
|
30
|
+
}
|
|
31
|
+
/** Extract the `markup` array from a node if it is an array ({% liquid %} tags). */
|
|
32
|
+
function getTraversableMarkup(node) {
|
|
33
|
+
if ('markup' in node) {
|
|
34
|
+
const markup = node.markup;
|
|
35
|
+
if (Array.isArray(markup))
|
|
36
|
+
return markup;
|
|
37
|
+
}
|
|
38
|
+
return null;
|
|
39
|
+
}
|
|
40
|
+
const SKIP_PREFIXES = ['http://', 'https://', '//', 'mailto:', 'tel:', 'javascript:', 'data:', '#'];
|
|
41
|
+
function shouldSkipUrl(url) {
|
|
42
|
+
if (url === '' || url === '#')
|
|
43
|
+
return true;
|
|
44
|
+
const lower = url.toLowerCase();
|
|
45
|
+
return SKIP_PREFIXES.some((prefix) => lower.startsWith(prefix));
|
|
46
|
+
}
|
|
47
|
+
function isValuedAttrNode(node) {
|
|
48
|
+
return (node.type === liquid_html_parser_1.NodeTypes.AttrDoubleQuoted ||
|
|
49
|
+
node.type === liquid_html_parser_1.NodeTypes.AttrSingleQuoted ||
|
|
50
|
+
node.type === liquid_html_parser_1.NodeTypes.AttrUnquoted);
|
|
51
|
+
}
|
|
52
|
+
function getAttrName(attr) {
|
|
53
|
+
if (attr.name.length !== 1)
|
|
54
|
+
return null;
|
|
55
|
+
if (attr.name[0].type !== liquid_html_parser_1.NodeTypes.TextNode)
|
|
56
|
+
return null;
|
|
57
|
+
return attr.name[0].value.toLowerCase();
|
|
58
|
+
}
|
|
59
|
+
function getStaticAttrValue(attr) {
|
|
60
|
+
if (attr.value.length !== 1)
|
|
61
|
+
return null;
|
|
62
|
+
if (attr.value[0].type !== liquid_html_parser_1.NodeTypes.TextNode)
|
|
63
|
+
return null;
|
|
64
|
+
return attr.value[0].value;
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Check if a LiquidVariableOutput node contains exactly `context.location.host`.
|
|
68
|
+
*/
|
|
69
|
+
function isContextLocationHost(node) {
|
|
70
|
+
if (node.type !== liquid_html_parser_1.NodeTypes.LiquidVariableOutput)
|
|
71
|
+
return false;
|
|
72
|
+
const { markup } = node;
|
|
73
|
+
const raw = typeof markup === 'string' ? markup : markup.rawSource;
|
|
74
|
+
return raw.trim() === 'context.location.host';
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* Get the simple variable name from a LiquidVariableOutput node.
|
|
78
|
+
* Returns the name if it's a plain variable lookup (e.g. `{{ url }}`) with no
|
|
79
|
+
* filters or nested lookups. Returns null otherwise.
|
|
80
|
+
*/
|
|
81
|
+
function getSimpleVariableName(node) {
|
|
82
|
+
if (node.type !== liquid_html_parser_1.NodeTypes.LiquidVariableOutput)
|
|
83
|
+
return null;
|
|
84
|
+
const { markup } = node;
|
|
85
|
+
if (typeof markup === 'string')
|
|
86
|
+
return null;
|
|
87
|
+
const variable = markup;
|
|
88
|
+
if (variable.filters.length > 0)
|
|
89
|
+
return null;
|
|
90
|
+
if (variable.expression.type !== liquid_html_parser_1.NodeTypes.VariableLookup)
|
|
91
|
+
return null;
|
|
92
|
+
const lookup = variable.expression;
|
|
93
|
+
if (lookup.name === null || lookup.lookups.length > 0)
|
|
94
|
+
return null;
|
|
95
|
+
return lookup.name;
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* Evaluate a filter argument to either a static string or `:_liquid_` placeholder.
|
|
99
|
+
*/
|
|
100
|
+
function evaluateFilterArg(filter) {
|
|
101
|
+
if (filter.args.length !== 1)
|
|
102
|
+
return null;
|
|
103
|
+
const arg = filter.args[0];
|
|
104
|
+
if (arg.type === liquid_html_parser_1.NodeTypes.String)
|
|
105
|
+
return arg.value;
|
|
106
|
+
if (arg.type === liquid_html_parser_1.NodeTypes.VariableLookup)
|
|
107
|
+
return ':_liquid_';
|
|
108
|
+
return null;
|
|
109
|
+
}
|
|
110
|
+
/**
|
|
111
|
+
* Resolve an assign markup's RHS to a URL pattern string.
|
|
112
|
+
* Handles string literals with `append` and `prepend` filters.
|
|
113
|
+
* Variable arguments to append/prepend become `:_liquid_` placeholders.
|
|
114
|
+
* Returns null if the value can't be statically resolved to a URL pattern.
|
|
115
|
+
*/
|
|
116
|
+
function resolveAssignToUrlPattern(markup) {
|
|
117
|
+
if (markup.operator !== '=')
|
|
118
|
+
return null;
|
|
119
|
+
const value = markup.value;
|
|
120
|
+
if (value.type !== liquid_html_parser_1.NodeTypes.LiquidVariable)
|
|
121
|
+
return null;
|
|
122
|
+
const variable = value;
|
|
123
|
+
let result;
|
|
124
|
+
// Base expression must be a string literal or a variable lookup
|
|
125
|
+
if (variable.expression.type === liquid_html_parser_1.NodeTypes.String) {
|
|
126
|
+
result = variable.expression.value;
|
|
127
|
+
}
|
|
128
|
+
else if (variable.expression.type === liquid_html_parser_1.NodeTypes.VariableLookup) {
|
|
129
|
+
result = ':_liquid_';
|
|
130
|
+
}
|
|
131
|
+
else {
|
|
132
|
+
return null;
|
|
133
|
+
}
|
|
134
|
+
// Apply append/prepend filters in order
|
|
135
|
+
for (const filter of variable.filters) {
|
|
136
|
+
const arg = evaluateFilterArg(filter);
|
|
137
|
+
if (arg === null)
|
|
138
|
+
return null;
|
|
139
|
+
if (filter.name === 'append') {
|
|
140
|
+
result = result + arg;
|
|
141
|
+
}
|
|
142
|
+
else if (filter.name === 'prepend') {
|
|
143
|
+
result = arg + result;
|
|
144
|
+
}
|
|
145
|
+
else {
|
|
146
|
+
// Unknown filter — can't determine the result
|
|
147
|
+
return null;
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
return normalizeUrlPattern(result);
|
|
151
|
+
}
|
|
152
|
+
/**
|
|
153
|
+
* Normalize a raw URL string into a matchable URL pattern.
|
|
154
|
+
* Strips query/fragment, validates segments, returns null if not analyzable.
|
|
155
|
+
*/
|
|
156
|
+
function normalizeUrlPattern(raw) {
|
|
157
|
+
let url = raw;
|
|
158
|
+
// Handle self-referencing absolute URLs
|
|
159
|
+
url = url.replace(/^https?:\/\/:_context_host_\//, '/');
|
|
160
|
+
url = url.replace(/^\/\/:_context_host_\//, '/');
|
|
161
|
+
// Must start with / to be a relative URL we can check
|
|
162
|
+
if (!url.startsWith('/'))
|
|
163
|
+
return null;
|
|
164
|
+
// Strip query string and fragment
|
|
165
|
+
const queryIdx = url.indexOf('?');
|
|
166
|
+
if (queryIdx !== -1)
|
|
167
|
+
url = url.slice(0, queryIdx);
|
|
168
|
+
const hashIdx = url.indexOf('#');
|
|
169
|
+
if (hashIdx !== -1)
|
|
170
|
+
url = url.slice(0, hashIdx);
|
|
171
|
+
// If any segment has :_liquid_ mixed with other text, skip
|
|
172
|
+
const segments = url.split('/').filter((s) => s.length > 0);
|
|
173
|
+
if (segments.some((s) => s.includes(':_liquid_') && s !== ':_liquid_'))
|
|
174
|
+
return null;
|
|
175
|
+
return url;
|
|
176
|
+
}
|
|
177
|
+
/**
|
|
178
|
+
* Extract a URL pattern from an attribute value.
|
|
179
|
+
* Returns null if the URL cannot be analyzed (contains Liquid tags or is fully dynamic).
|
|
180
|
+
*
|
|
181
|
+
* Static text becomes literal path segments.
|
|
182
|
+
* Each {{ expression }} becomes `:_liquid_` (matches one path segment).
|
|
183
|
+
* {{ context.location.host }} is recognized and stripped from absolute self-referencing URLs.
|
|
184
|
+
*
|
|
185
|
+
* When a `variableMap` is provided, a single `{{ varName }}` in the attribute
|
|
186
|
+
* will be resolved through the map (from tracked {% assign %} statements).
|
|
187
|
+
*/
|
|
188
|
+
function extractUrlPattern(attr, variableMap) {
|
|
189
|
+
// Check if the entire attribute is a single variable that we can resolve
|
|
190
|
+
if (variableMap && attr.value.length === 1) {
|
|
191
|
+
const varName = getSimpleVariableName(attr.value[0]);
|
|
192
|
+
if (varName !== null && variableMap.has(varName)) {
|
|
193
|
+
return variableMap.get(varName);
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
const parts = [];
|
|
197
|
+
let hasStatic = false;
|
|
198
|
+
for (const node of attr.value) {
|
|
199
|
+
if (node.type === liquid_html_parser_1.NodeTypes.TextNode) {
|
|
200
|
+
parts.push(node.value);
|
|
201
|
+
hasStatic = true;
|
|
202
|
+
}
|
|
203
|
+
else if (node.type === liquid_html_parser_1.NodeTypes.LiquidVariableOutput) {
|
|
204
|
+
parts.push(isContextLocationHost(node) ? ':_context_host_' : ':_liquid_');
|
|
205
|
+
}
|
|
206
|
+
else {
|
|
207
|
+
// Liquid tags — unpredictable structure
|
|
208
|
+
return null;
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
// Fully dynamic (no static text at all)
|
|
212
|
+
if (!hasStatic)
|
|
213
|
+
return null;
|
|
214
|
+
return normalizeUrlPattern(parts.join(''));
|
|
215
|
+
}
|
|
216
|
+
function isHtmlVoidElement(node) {
|
|
217
|
+
return node.type === liquid_html_parser_1.NodeTypes.HtmlVoidElement;
|
|
218
|
+
}
|
|
219
|
+
/**
|
|
220
|
+
* Recursively scan a form subtree for <input type="hidden" name="_method" value="...">
|
|
221
|
+
* Returns the _method value if found, or null.
|
|
222
|
+
*/
|
|
223
|
+
function findMethodOverride(formNode) {
|
|
224
|
+
const stack = [...formNode.children];
|
|
225
|
+
while (stack.length > 0) {
|
|
226
|
+
const child = stack.pop();
|
|
227
|
+
if (isHtmlVoidElement(child) && child.name === 'input') {
|
|
228
|
+
const attrs = child.attributes.filter(isValuedAttrNode);
|
|
229
|
+
const typeAttr = attrs.find((a) => getAttrName(a) === 'type');
|
|
230
|
+
const nameAttr = attrs.find((a) => getAttrName(a) === 'name');
|
|
231
|
+
const valueAttr = attrs.find((a) => getAttrName(a) === 'value');
|
|
232
|
+
if (!typeAttr || !nameAttr || !valueAttr)
|
|
233
|
+
continue;
|
|
234
|
+
const typeVal = getStaticAttrValue(typeAttr);
|
|
235
|
+
const nameVal = getStaticAttrValue(nameAttr);
|
|
236
|
+
if (typeVal?.toLowerCase() !== 'hidden' || nameVal !== '_method')
|
|
237
|
+
continue;
|
|
238
|
+
const methodVal = getStaticAttrValue(valueAttr);
|
|
239
|
+
if (methodVal)
|
|
240
|
+
return methodVal.toLowerCase();
|
|
241
|
+
// Liquid value for _method — can't determine method
|
|
242
|
+
return null;
|
|
243
|
+
}
|
|
244
|
+
// Recurse into elements that have children
|
|
245
|
+
if (child.type === liquid_html_parser_1.NodeTypes.HtmlElement) {
|
|
246
|
+
const el = child;
|
|
247
|
+
for (const grandchild of el.children) {
|
|
248
|
+
stack.push(grandchild);
|
|
249
|
+
}
|
|
250
|
+
}
|
|
251
|
+
}
|
|
252
|
+
return null;
|
|
253
|
+
}
|
|
254
|
+
/**
|
|
255
|
+
* Determine the effective HTTP method for a <form> element,
|
|
256
|
+
* accounting for _method hidden input overrides.
|
|
257
|
+
* Returns null if the method can't be statically determined.
|
|
258
|
+
*/
|
|
259
|
+
function getEffectiveMethod(formNode) {
|
|
260
|
+
const methodAttr = formNode.attributes.find((a) => isValuedAttrNode(a) && getAttrName(a) === 'method');
|
|
261
|
+
let formMethod = 'get';
|
|
262
|
+
if (methodAttr) {
|
|
263
|
+
const val = getStaticAttrValue(methodAttr);
|
|
264
|
+
if (val === null)
|
|
265
|
+
return null; // Liquid in method attr — skip
|
|
266
|
+
formMethod = val.toLowerCase();
|
|
267
|
+
}
|
|
268
|
+
if (formMethod === 'post') {
|
|
269
|
+
const override = findMethodOverride(formNode);
|
|
270
|
+
if (override !== null)
|
|
271
|
+
return override;
|
|
272
|
+
return formMethod;
|
|
273
|
+
}
|
|
274
|
+
return formMethod;
|
|
275
|
+
}
|
|
276
|
+
/**
|
|
277
|
+
* If the given node is a `{% assign %}` tag whose RHS resolves to a URL pattern,
|
|
278
|
+
* returns `{ name, urlPattern }`. Otherwise returns null.
|
|
279
|
+
*
|
|
280
|
+
* Shared by `buildVariableMap` (full AST walk) and `MissingPage` (incremental
|
|
281
|
+
* visitor), so the assign-to-URL resolution logic lives in one place.
|
|
282
|
+
*/
|
|
283
|
+
function tryExtractAssignUrl(node) {
|
|
284
|
+
if (node.type !== liquid_html_parser_1.NodeTypes.LiquidTag || node.name !== liquid_html_parser_1.NamedTags.assign) {
|
|
285
|
+
return null;
|
|
286
|
+
}
|
|
287
|
+
const markup = node.markup;
|
|
288
|
+
if (markup.lookups.length > 0)
|
|
289
|
+
return null;
|
|
290
|
+
const urlPattern = resolveAssignToUrlPattern(markup);
|
|
291
|
+
if (urlPattern === null)
|
|
292
|
+
return null;
|
|
293
|
+
return { name: markup.name, urlPattern };
|
|
294
|
+
}
|
|
295
|
+
/**
|
|
296
|
+
* Walk an AST subtree and collect {% assign %} variable mappings that resolve to URL patterns.
|
|
297
|
+
* Not scope-aware: assigns inside {% if %} / {% for %} blocks are tracked even though they
|
|
298
|
+
* may not be in scope when the href is evaluated. This is an acceptable trade-off — the
|
|
299
|
+
* alternative (full scope analysis) would add significant complexity for marginal accuracy gains.
|
|
300
|
+
*
|
|
301
|
+
* Uses document-order traversal so that reassignments correctly overwrite earlier values.
|
|
302
|
+
*
|
|
303
|
+
* @param beforeOffset When provided, only assigns whose position.end is before this
|
|
304
|
+
* offset are included. Used by the LSP definition provider so that each cursor
|
|
305
|
+
* position sees only the assigns that precede it.
|
|
306
|
+
*/
|
|
307
|
+
function buildVariableMap(children, beforeOffset) {
|
|
308
|
+
const variableMap = new Map();
|
|
309
|
+
function walk(nodes) {
|
|
310
|
+
for (const node of nodes) {
|
|
311
|
+
// Apply the beforeOffset cutoff only to assign nodes themselves, not to block
|
|
312
|
+
// containers. A block tag ({% if %}, {% for %}, HTML element, etc.) may start
|
|
313
|
+
// before the cursor but end after it — we must still recurse into its children
|
|
314
|
+
// to find any assigns that precede the cursor within that block.
|
|
315
|
+
const extracted = tryExtractAssignUrl(node);
|
|
316
|
+
if (extracted) {
|
|
317
|
+
if (beforeOffset === undefined || node.position.end <= beforeOffset) {
|
|
318
|
+
variableMap.set(extracted.name, extracted.urlPattern);
|
|
319
|
+
}
|
|
320
|
+
}
|
|
321
|
+
// Recurse into children (block tags like {% if %}, {% for %})
|
|
322
|
+
const children = getTraversableChildren(node);
|
|
323
|
+
if (children)
|
|
324
|
+
walk(children);
|
|
325
|
+
// Recurse into markup arrays ({% liquid %} block contains assigns in markup)
|
|
326
|
+
const markupArray = getTraversableMarkup(node);
|
|
327
|
+
if (markupArray)
|
|
328
|
+
walk(markupArray);
|
|
329
|
+
}
|
|
330
|
+
}
|
|
331
|
+
walk(children);
|
|
332
|
+
return variableMap;
|
|
333
|
+
}
|
|
334
|
+
//# sourceMappingURL=url-helpers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"url-helpers.js","sourceRoot":"","sources":["../src/url-helpers.ts"],"names":[],"mappings":"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"}
|
package/dist/utils/block.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"block.js","sourceRoot":"","sources":["../../src/utils/block.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"block.js","sourceRoot":"","sources":["../../src/utils/block.ts"],"names":[],"mappings":"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"}
|
package/dist/utils/index.d.ts
CHANGED
package/dist/utils/index.js
CHANGED
|
@@ -21,4 +21,5 @@ __exportStar(require("./error"), exports);
|
|
|
21
21
|
__exportStar(require("./types"), exports);
|
|
22
22
|
__exportStar(require("./memo"), exports);
|
|
23
23
|
__exportStar(require("./indexBy"), exports);
|
|
24
|
+
__exportStar(require("./levenshtein"), exports);
|
|
24
25
|
//# sourceMappingURL=index.js.map
|
package/dist/utils/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,2CAAyB;AACzB,0CAAwB;AACxB,6CAA2B;AAC3B,0CAAwB;AACxB,0CAAwB;AACxB,yCAAuB;AACvB,4CAA0B"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,2CAAyB;AACzB,0CAAwB;AACxB,6CAA2B;AAC3B,0CAAwB;AACxB,0CAAwB;AACxB,yCAAuB;AACvB,4CAA0B;AAC1B,gDAA8B"}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
export declare function levenshtein(a: string, b: string): number;
|
|
2
|
+
export declare function flattenTranslationKeys(obj: Record<string, any>, prefix?: string): string[];
|
|
3
|
+
export declare function findNearestKeys(missingKey: string, allKeys: string[], maxDistance?: number, maxResults?: number): string[];
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.levenshtein = levenshtein;
|
|
4
|
+
exports.flattenTranslationKeys = flattenTranslationKeys;
|
|
5
|
+
exports.findNearestKeys = findNearestKeys;
|
|
6
|
+
function levenshtein(a, b) {
|
|
7
|
+
const dp = Array.from({ length: a.length + 1 }, (_, i) => Array.from({ length: b.length + 1 }, (_, j) => (i === 0 ? j : j === 0 ? i : 0)));
|
|
8
|
+
for (let i = 1; i <= a.length; i++) {
|
|
9
|
+
for (let j = 1; j <= b.length; j++) {
|
|
10
|
+
dp[i][j] =
|
|
11
|
+
a[i - 1] === b[j - 1]
|
|
12
|
+
? dp[i - 1][j - 1]
|
|
13
|
+
: 1 + Math.min(dp[i - 1][j], dp[i][j - 1], dp[i - 1][j - 1]);
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
return dp[a.length][b.length];
|
|
17
|
+
}
|
|
18
|
+
function flattenTranslationKeys(obj, prefix = '') {
|
|
19
|
+
const keys = [];
|
|
20
|
+
for (const [k, v] of Object.entries(obj)) {
|
|
21
|
+
const full = prefix ? `${prefix}.${k}` : k;
|
|
22
|
+
if (typeof v === 'object' && v !== null) {
|
|
23
|
+
keys.push(...flattenTranslationKeys(v, full));
|
|
24
|
+
}
|
|
25
|
+
else {
|
|
26
|
+
keys.push(full);
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
return keys;
|
|
30
|
+
}
|
|
31
|
+
function findNearestKeys(missingKey, allKeys, maxDistance = 3, maxResults = 3) {
|
|
32
|
+
return allKeys
|
|
33
|
+
.map((key) => ({ key, distance: levenshtein(missingKey, key) }))
|
|
34
|
+
.filter(({ distance }) => distance <= maxDistance)
|
|
35
|
+
.sort((a, b) => a.distance - b.distance)
|
|
36
|
+
.slice(0, maxResults)
|
|
37
|
+
.map(({ key }) => key);
|
|
38
|
+
}
|
|
39
|
+
//# sourceMappingURL=levenshtein.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"levenshtein.js","sourceRoot":"","sources":["../../src/utils/levenshtein.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@platformos/platformos-check-common",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.13",
|
|
4
4
|
"license": "MIT",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
@@ -26,7 +26,7 @@
|
|
|
26
26
|
"type-check": "tsc --noEmit"
|
|
27
27
|
},
|
|
28
28
|
"dependencies": {
|
|
29
|
-
"@platformos/liquid-html-parser": "0.0.
|
|
29
|
+
"@platformos/liquid-html-parser": "0.0.12",
|
|
30
30
|
"graphql": "^16.12.0",
|
|
31
31
|
"js-yaml": "^4.1.1",
|
|
32
32
|
"jsonc-parser": "^3.3.1",
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { expect, describe, it } from 'vitest';
|
|
2
|
-
import { highlightedOffenses, runLiquidCheck } from '../../test';
|
|
2
|
+
import { applySuggestions, highlightedOffenses, runLiquidCheck } from '../../test';
|
|
3
3
|
import { DeprecatedFilter } from './index';
|
|
4
4
|
|
|
5
5
|
const mockDependencies = {
|
|
@@ -99,4 +99,44 @@ describe('Module: DeprecatedFilter', () => {
|
|
|
99
99
|
);
|
|
100
100
|
expect(offenses).toHaveLength(2);
|
|
101
101
|
});
|
|
102
|
+
|
|
103
|
+
it('should provide a suggestion to replace deprecated filter with recommended alternative', async () => {
|
|
104
|
+
const sourceCode = `{{ value | old_filter }}`;
|
|
105
|
+
|
|
106
|
+
const offenses = await runLiquidCheck(
|
|
107
|
+
DeprecatedFilter,
|
|
108
|
+
sourceCode,
|
|
109
|
+
'file.liquid',
|
|
110
|
+
mockDependencies,
|
|
111
|
+
);
|
|
112
|
+
expect(offenses).toHaveLength(1);
|
|
113
|
+
expect(offenses[0].suggest).toHaveLength(1);
|
|
114
|
+
expect(offenses[0].suggest![0].message).toEqual("Replace 'old_filter' with 'new_filter'");
|
|
115
|
+
});
|
|
116
|
+
|
|
117
|
+
it('should apply the suggestion to replace the filter name', async () => {
|
|
118
|
+
const sourceCode = `{{ value | old_filter }}`;
|
|
119
|
+
|
|
120
|
+
const offenses = await runLiquidCheck(
|
|
121
|
+
DeprecatedFilter,
|
|
122
|
+
sourceCode,
|
|
123
|
+
'file.liquid',
|
|
124
|
+
mockDependencies,
|
|
125
|
+
);
|
|
126
|
+
const suggestions = applySuggestions(sourceCode, offenses[0]);
|
|
127
|
+
expect(suggestions).toContain('{{ value | new_filter }}');
|
|
128
|
+
});
|
|
129
|
+
|
|
130
|
+
it('should not provide a suggestion when no replacement exists', async () => {
|
|
131
|
+
const sourceCode = `{{ value | deprecated_no_replacement }}`;
|
|
132
|
+
|
|
133
|
+
const offenses = await runLiquidCheck(
|
|
134
|
+
DeprecatedFilter,
|
|
135
|
+
sourceCode,
|
|
136
|
+
'file.liquid',
|
|
137
|
+
mockDependencies,
|
|
138
|
+
);
|
|
139
|
+
expect(offenses).toHaveLength(1);
|
|
140
|
+
expect(offenses[0].suggest).toBeUndefined();
|
|
141
|
+
});
|
|
102
142
|
});
|