@platformos/platformos-check-common 0.0.18 → 0.0.20
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 +20 -0
- package/dist/checks/index.js +4 -0
- package/dist/checks/index.js.map +1 -1
- package/dist/checks/liquid-html-syntax-error/checks/InvalidAssignSyntax.d.ts +11 -0
- package/dist/checks/liquid-html-syntax-error/checks/InvalidAssignSyntax.js +34 -1
- package/dist/checks/liquid-html-syntax-error/checks/InvalidAssignSyntax.js.map +1 -1
- package/dist/checks/liquid-html-syntax-error/index.js +8 -0
- package/dist/checks/liquid-html-syntax-error/index.js.map +1 -1
- package/dist/checks/missing-content-for-layout/index.d.ts +2 -0
- package/dist/checks/missing-content-for-layout/index.js +89 -0
- package/dist/checks/missing-content-for-layout/index.js.map +1 -0
- package/dist/checks/reserved-variable-name/index.d.ts +2 -0
- package/dist/checks/reserved-variable-name/index.js +82 -0
- package/dist/checks/reserved-variable-name/index.js.map +1 -0
- package/dist/checks/unused-assign/index.js +21 -0
- package/dist/checks/unused-assign/index.js.map +1 -1
- package/dist/checks/utils.d.ts +7 -0
- package/dist/checks/utils.js +8 -0
- package/dist/checks/utils.js.map +1 -1
- package/dist/find-root.js +15 -2
- package/dist/find-root.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +3 -1
- package/dist/index.js.map +1 -1
- package/dist/liquid-doc/utils.d.ts +1 -1
- package/dist/to-source-code.d.ts +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/dist/types.d.ts +10 -0
- package/dist/types.js.map +1 -1
- package/package.json +2 -2
- package/src/checks/index.ts +4 -0
- package/src/checks/liquid-html-syntax-error/checks/InvalidAssignSyntax.spec.ts +49 -0
- package/src/checks/liquid-html-syntax-error/checks/InvalidAssignSyntax.ts +36 -2
- package/src/checks/liquid-html-syntax-error/checks/InvalidTagSyntax.spec.ts +23 -0
- package/src/checks/liquid-html-syntax-error/index.ts +12 -1
- package/src/checks/missing-content-for-layout/index.spec.ts +84 -0
- package/src/checks/missing-content-for-layout/index.ts +94 -0
- package/src/checks/missing-page/index.spec.ts +94 -0
- package/src/checks/reserved-variable-name/index.spec.ts +142 -0
- package/src/checks/reserved-variable-name/index.ts +85 -0
- package/src/checks/unused-assign/index.spec.ts +61 -0
- package/src/checks/unused-assign/index.ts +19 -1
- package/src/checks/utils.ts +11 -0
- package/src/find-root.ts +17 -2
- package/src/index.ts +2 -0
- package/src/types.ts +19 -0
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,25 @@
|
|
|
1
1
|
# @platformos/theme-check-common
|
|
2
2
|
|
|
3
|
+
## 0.0.20
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- bc1b71f: Release changes accumulated since 0.0.19: multi-line and JSON support in tags, refreshed warnings for referenced partials, platformos-graph project structural/dependency model for the supervisor, and updated linter documentation data.
|
|
8
|
+
- 4b6e0aa: Add ReservedVariableName check: using a reserved Liquid literal (`true`, `false`, `nil`, `null`, `empty`, `blank`) as a variable name is now an error. Liquid resolves these names as built-in literals before variable lookup, so assignments to them can never be read back. Covers assign, capture, function, graphql, parse_json, hash_assign, for, tablerow, background, increment, decrement, and catch targets. UnusedAssign no longer reports these names to avoid a misleading "assigned but not used" message. The reserved-name set is derived from `LiquidLiteralValues`, now exported from `@platformos/liquid-html-parser`.
|
|
9
|
+
- MCP Supervisor
|
|
10
|
+
- Updated dependencies [bc1b71f]
|
|
11
|
+
- Updated dependencies [4b6e0aa]
|
|
12
|
+
- Updated dependencies
|
|
13
|
+
- @platformos/liquid-html-parser@0.0.18
|
|
14
|
+
|
|
15
|
+
## 0.0.19
|
|
16
|
+
|
|
17
|
+
### Patch Changes
|
|
18
|
+
|
|
19
|
+
- Improved checks
|
|
20
|
+
- Updated dependencies
|
|
21
|
+
- @platformos/liquid-html-parser@0.0.17
|
|
22
|
+
|
|
3
23
|
## 0.0.18
|
|
4
24
|
|
|
5
25
|
### Patch Changes
|
package/dist/checks/index.js
CHANGED
|
@@ -13,6 +13,7 @@ const missing_asset_1 = require("./missing-asset");
|
|
|
13
13
|
const missing_partial_1 = require("./missing-partial");
|
|
14
14
|
const orphaned_partial_1 = require("./orphaned-partial");
|
|
15
15
|
const parser_blocking_script_1 = require("./parser-blocking-script");
|
|
16
|
+
const reserved_variable_name_1 = require("./reserved-variable-name");
|
|
16
17
|
const translation_key_exists_1 = require("./translation-key-exists");
|
|
17
18
|
const unclosed_html_element_1 = require("./unclosed-html-element");
|
|
18
19
|
const undefined_object_1 = require("./undefined-object");
|
|
@@ -37,6 +38,7 @@ const nested_graphql_query_1 = require("./nested-graphql-query");
|
|
|
37
38
|
const missing_page_1 = require("./missing-page");
|
|
38
39
|
const valid_frontmatter_1 = require("./valid-frontmatter");
|
|
39
40
|
const json_literal_quote_style_1 = require("./json-literal-quote-style");
|
|
41
|
+
const missing_content_for_layout_1 = require("./missing-content-for-layout");
|
|
40
42
|
exports.allChecks = [
|
|
41
43
|
deprecated_filter_1.DeprecatedFilter,
|
|
42
44
|
deprecated_tag_1.DeprecatedTag,
|
|
@@ -50,6 +52,7 @@ exports.allChecks = [
|
|
|
50
52
|
missing_partial_1.MissingPartial,
|
|
51
53
|
orphaned_partial_1.OrphanedPartial,
|
|
52
54
|
parser_blocking_script_1.ParserBlockingScript,
|
|
55
|
+
reserved_variable_name_1.ReservedVariableName,
|
|
53
56
|
translation_key_exists_1.TranslationKeyExists,
|
|
54
57
|
unclosed_html_element_1.UnclosedHTMLElement,
|
|
55
58
|
undefined_object_1.UndefinedObject,
|
|
@@ -73,6 +76,7 @@ exports.allChecks = [
|
|
|
73
76
|
missing_page_1.MissingPage,
|
|
74
77
|
valid_frontmatter_1.ValidFrontmatter,
|
|
75
78
|
json_literal_quote_style_1.JsonLiteralQuoteStyle,
|
|
79
|
+
missing_content_for_layout_1.MissingContentForLayout,
|
|
76
80
|
];
|
|
77
81
|
/**
|
|
78
82
|
* The recommended checks is populated by all checks with the following conditions:
|
package/dist/checks/index.js.map
CHANGED
|
@@ -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,qEAAgE;AAChE,2DAA4D;AAC5D,uCAAyC;AACzC,yDAAqD;AACrD,6EAAuE;AACvE,iFAA4E;AAC5E,yFAAmF;AACnF,iEAA4D;AAC5D,iDAA6C;AAC7C,2DAAuD;AACvD,yEAAmE;
|
|
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,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;AACnE,6EAAuE;AAE1D,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,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;IACrB,oDAAuB;CACxB,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"}
|
|
@@ -19,3 +19,14 @@ import { Problem, SourceCodeType } from '../../..';
|
|
|
19
19
|
* complements rather than duplicates the other sub-checks.
|
|
20
20
|
*/
|
|
21
21
|
export declare function detectInvalidAssignSyntax(node: LiquidTag): Problem<SourceCodeType.LiquidHtml> | undefined;
|
|
22
|
+
/**
|
|
23
|
+
* Fallback for assign tags where the tolerant parser landed in string markup even
|
|
24
|
+
* though the `target = value` skeleton looks fine — meaning the value or filter
|
|
25
|
+
* chain has parse-breaking characters (e.g. a stray `}` before `%}`) that no other
|
|
26
|
+
* dedicated sub-check (MultipleAssignValues, InvalidFilterName, InvalidPipeSyntax)
|
|
27
|
+
* surfaced. Re-parses the tag source in strict mode and reports on failure.
|
|
28
|
+
*
|
|
29
|
+
* Must run ONLY when no other sub-check already reported on this tag, otherwise
|
|
30
|
+
* it double-flags the same problem. The orchestrator enforces that gate.
|
|
31
|
+
*/
|
|
32
|
+
export declare function detectInvalidAssignFallback(node: LiquidTag): Problem<SourceCodeType.LiquidHtml> | undefined;
|
|
@@ -1,6 +1,9 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.detectInvalidAssignSyntax = detectInvalidAssignSyntax;
|
|
4
|
+
exports.detectInvalidAssignFallback = detectInvalidAssignFallback;
|
|
5
|
+
const liquid_html_parser_1 = require("@platformos/liquid-html-parser");
|
|
6
|
+
const INVALID_ASSIGN_MESSAGE = `Invalid syntax for tag 'assign'. Expected syntax: {% assign <var> = <value> %}`;
|
|
4
7
|
/**
|
|
5
8
|
* Detects structurally-invalid `assign` tags that neither `MultipleAssignValues` nor
|
|
6
9
|
* `InvalidPipeSyntax`/`InvalidFilterName` catch:
|
|
@@ -33,11 +36,41 @@ function detectInvalidAssignSyntax(node) {
|
|
|
33
36
|
if (!isStructurallyBroken)
|
|
34
37
|
return;
|
|
35
38
|
return {
|
|
36
|
-
message:
|
|
39
|
+
message: INVALID_ASSIGN_MESSAGE,
|
|
37
40
|
startIndex: node.position.start,
|
|
38
41
|
endIndex: node.position.end,
|
|
39
42
|
};
|
|
40
43
|
}
|
|
44
|
+
/**
|
|
45
|
+
* Fallback for assign tags where the tolerant parser landed in string markup even
|
|
46
|
+
* though the `target = value` skeleton looks fine — meaning the value or filter
|
|
47
|
+
* chain has parse-breaking characters (e.g. a stray `}` before `%}`) that no other
|
|
48
|
+
* dedicated sub-check (MultipleAssignValues, InvalidFilterName, InvalidPipeSyntax)
|
|
49
|
+
* surfaced. Re-parses the tag source in strict mode and reports on failure.
|
|
50
|
+
*
|
|
51
|
+
* Must run ONLY when no other sub-check already reported on this tag, otherwise
|
|
52
|
+
* it double-flags the same problem. The orchestrator enforces that gate.
|
|
53
|
+
*/
|
|
54
|
+
function detectInvalidAssignFallback(node) {
|
|
55
|
+
if (node.name !== 'assign' || typeof node.markup !== 'string')
|
|
56
|
+
return;
|
|
57
|
+
// Digit-starting targets (e.g. `23_hours_ago`) are accepted by the platformOS
|
|
58
|
+
// runtime but rejected by the Ohm grammar's `variableSegment` rule. Skipping
|
|
59
|
+
// them here mirrors the intentional tolerance in isValidAssignTarget above.
|
|
60
|
+
if (/^\s*\d/.test(node.markup))
|
|
61
|
+
return;
|
|
62
|
+
const tagSource = node.source.slice(node.position.start, node.position.end);
|
|
63
|
+
try {
|
|
64
|
+
(0, liquid_html_parser_1.toLiquidAST)(tagSource, { mode: 'strict', allowUnclosedDocumentNode: true });
|
|
65
|
+
}
|
|
66
|
+
catch {
|
|
67
|
+
return {
|
|
68
|
+
message: INVALID_ASSIGN_MESSAGE,
|
|
69
|
+
startIndex: node.position.start,
|
|
70
|
+
endIndex: node.position.end,
|
|
71
|
+
};
|
|
72
|
+
}
|
|
73
|
+
}
|
|
41
74
|
/**
|
|
42
75
|
* Rejects an LHS that is obviously not an assign target.
|
|
43
76
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"InvalidAssignSyntax.js","sourceRoot":"","sources":["../../../../src/checks/liquid-html-syntax-error/checks/InvalidAssignSyntax.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"InvalidAssignSyntax.js","sourceRoot":"","sources":["../../../../src/checks/liquid-html-syntax-error/checks/InvalidAssignSyntax.ts"],"names":[],"mappings":";;AAuBA,8DAuBC;AAYD,kEAoBC;AA9ED,uEAAwE;AAGxE,MAAM,sBAAsB,GAAG,gFAAgF,CAAC;AAEhH;;;;;;;;;;;;;;;;;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,sBAAsB;QAC/B,UAAU,EAAE,IAAI,CAAC,QAAQ,CAAC,KAAK;QAC/B,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,GAAG;KAC5B,CAAC;AACJ,CAAC;AAED;;;;;;;;;GASG;AACH,SAAgB,2BAA2B,CACzC,IAAe;IAEf,IAAI,IAAI,CAAC,IAAI,KAAK,QAAQ,IAAI,OAAO,IAAI,CAAC,MAAM,KAAK,QAAQ;QAAE,OAAO;IAEtE,8EAA8E;IAC9E,6EAA6E;IAC7E,4EAA4E;IAC5E,IAAI,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC;QAAE,OAAO;IAEvC,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;IAC5E,IAAI,CAAC;QACH,IAAA,gCAAW,EAAC,SAAS,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,yBAAyB,EAAE,IAAI,EAAE,CAAC,CAAC;IAC9E,CAAC;IAAC,MAAM,CAAC;QACP,OAAO;YACL,OAAO,EAAE,sBAAsB;YAC/B,UAAU,EAAE,IAAI,CAAC,QAAQ,CAAC,KAAK;YAC/B,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,GAAG;SAC5B,CAAC;IACJ,CAAC;AACH,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"}
|
|
@@ -102,6 +102,14 @@ exports.LiquidHTMLSyntaxError = {
|
|
|
102
102
|
if (pipeProblems.length > 0) {
|
|
103
103
|
pipeProblems.forEach((pipeProblem) => context.report(pipeProblem));
|
|
104
104
|
}
|
|
105
|
+
// Last-chance check for assign tags whose tolerant parse fell back to
|
|
106
|
+
// string markup (e.g. stray `}` before `%}`). Gated on "nothing else
|
|
107
|
+
// reported on this tag" to avoid double-flagging.
|
|
108
|
+
if (problems.length + filterProblems.length + pipeProblems.length === 0) {
|
|
109
|
+
const fallback = (0, InvalidAssignSyntax_1.detectInvalidAssignFallback)(node);
|
|
110
|
+
if (fallback)
|
|
111
|
+
context.report(fallback);
|
|
112
|
+
}
|
|
105
113
|
},
|
|
106
114
|
async LiquidBranch(node, ancestors) {
|
|
107
115
|
if ((0, utils_2.isWithinRawTagThatDoesNotParseItsContents)(ancestors))
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/checks/liquid-html-syntax-error/index.ts"],"names":[],"mappings":";;;AAAA,uCAAuF;AACvF,uCAAiD;AACjD,wEAA2E;AAC3E,
|
|
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,89 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.MissingContentForLayout = void 0;
|
|
4
|
+
const liquid_html_parser_1 = require("@platformos/liquid-html-parser");
|
|
5
|
+
const types_1 = require("../../types");
|
|
6
|
+
const path_1 = require("../../path");
|
|
7
|
+
/**
|
|
8
|
+
* Ensures every layout outputs `{{ content_for_layout }}`.
|
|
9
|
+
*
|
|
10
|
+
* `content_for_layout` is where platformOS injects the rendered page body. A
|
|
11
|
+
* layout that never references it renders its own chrome but drops the page
|
|
12
|
+
* entirely — a correctness defect, not a style issue. (Named slots use
|
|
13
|
+
* `{% yield 'name' %}` separately and do not substitute for it.)
|
|
14
|
+
*
|
|
15
|
+
* The check is scoped to layout files via `getFileType` (re-exported as
|
|
16
|
+
* `isLayout`) so it never fires on pages or partials. Both detection and the
|
|
17
|
+
* suggested fix are AST-based: any reference to the `content_for_layout`
|
|
18
|
+
* variable clears the check (whether emitted with `{{ … }}`, `{% echo … %}`,
|
|
19
|
+
* or inside a `{% liquid %}` block), and the fix is inserted before the
|
|
20
|
+
* `<body>` element's closing tag — using the parsed element's position, never
|
|
21
|
+
* a text scan of the raw source.
|
|
22
|
+
*/
|
|
23
|
+
const CONTENT_FOR_LAYOUT = 'content_for_layout';
|
|
24
|
+
exports.MissingContentForLayout = {
|
|
25
|
+
meta: {
|
|
26
|
+
code: 'MissingContentForLayout',
|
|
27
|
+
name: 'Missing Content For Layout',
|
|
28
|
+
docs: {
|
|
29
|
+
description: 'Ensures every layout references `content_for_layout` — without it the rendered page body is never output.',
|
|
30
|
+
recommended: true,
|
|
31
|
+
url: undefined,
|
|
32
|
+
},
|
|
33
|
+
type: types_1.SourceCodeType.LiquidHtml,
|
|
34
|
+
severity: types_1.Severity.ERROR,
|
|
35
|
+
schema: {},
|
|
36
|
+
targets: [],
|
|
37
|
+
},
|
|
38
|
+
create(context) {
|
|
39
|
+
// Scope to layout files only; pages/partials/etc. must not be flagged.
|
|
40
|
+
if (!(0, path_1.isLayout)(context.file.uri))
|
|
41
|
+
return {};
|
|
42
|
+
let referencesContentForLayout = false;
|
|
43
|
+
// Start index of the `</body>` closing tag, captured from the AST so the
|
|
44
|
+
// fix never has to scan the raw source for it.
|
|
45
|
+
let bodyCloseIndex;
|
|
46
|
+
return {
|
|
47
|
+
async VariableLookup(node) {
|
|
48
|
+
if (node.name === CONTENT_FOR_LAYOUT) {
|
|
49
|
+
referencesContentForLayout = true;
|
|
50
|
+
}
|
|
51
|
+
},
|
|
52
|
+
async HtmlElement(node) {
|
|
53
|
+
if (bodyCloseIndex !== undefined)
|
|
54
|
+
return; // first <body> wins
|
|
55
|
+
const tagName = node.name[0];
|
|
56
|
+
if (tagName?.type === liquid_html_parser_1.NodeTypes.TextNode && tagName.value.toLowerCase() === 'body') {
|
|
57
|
+
bodyCloseIndex = node.blockEndPosition.start;
|
|
58
|
+
}
|
|
59
|
+
},
|
|
60
|
+
async onCodePathEnd(file) {
|
|
61
|
+
if (referencesContentForLayout)
|
|
62
|
+
return;
|
|
63
|
+
// Insert before `</body>` when the layout has one (keeps it inside the
|
|
64
|
+
// body); otherwise append at the end of the document. Both positions
|
|
65
|
+
// come from the AST.
|
|
66
|
+
const hasBody = bodyCloseIndex !== undefined;
|
|
67
|
+
const insertAt = hasBody ? bodyCloseIndex : file.ast.position.end;
|
|
68
|
+
const insertText = hasBody ? '{{ content_for_layout }}\n' : '\n{{ content_for_layout }}\n';
|
|
69
|
+
const suggestMessage = hasBody
|
|
70
|
+
? 'Insert `{{ content_for_layout }}` before the closing </body> tag'
|
|
71
|
+
: 'Insert `{{ content_for_layout }}` at the end of the layout';
|
|
72
|
+
context.report({
|
|
73
|
+
message: "Layout is missing `{{ content_for_layout }}`. Every layout must output it exactly once — it renders the page body. (Named slots use `{% yield 'name' %}` separately and do not replace it.)",
|
|
74
|
+
startIndex: 0,
|
|
75
|
+
endIndex: 0,
|
|
76
|
+
suggest: [
|
|
77
|
+
{
|
|
78
|
+
message: suggestMessage,
|
|
79
|
+
fix: (corrector) => {
|
|
80
|
+
corrector.insert(insertAt, insertText);
|
|
81
|
+
},
|
|
82
|
+
},
|
|
83
|
+
],
|
|
84
|
+
});
|
|
85
|
+
},
|
|
86
|
+
};
|
|
87
|
+
},
|
|
88
|
+
};
|
|
89
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/checks/missing-content-for-layout/index.ts"],"names":[],"mappings":";;;AAAA,uEAA2D;AAC3D,uCAA8E;AAC9E,qCAAsC;AAEtC;;;;;;;;;;;;;;;GAeG;AAEH,MAAM,kBAAkB,GAAG,oBAAoB,CAAC;AAEnC,QAAA,uBAAuB,GAA0B;IAC5D,IAAI,EAAE;QACJ,IAAI,EAAE,yBAAyB;QAC/B,IAAI,EAAE,4BAA4B;QAClC,IAAI,EAAE;YACJ,WAAW,EACT,2GAA2G;YAC7G,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,uEAAuE;QACvE,IAAI,CAAC,IAAA,eAAQ,EAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC;YAAE,OAAO,EAAE,CAAC;QAE3C,IAAI,0BAA0B,GAAG,KAAK,CAAC;QACvC,yEAAyE;QACzE,+CAA+C;QAC/C,IAAI,cAAkC,CAAC;QAEvC,OAAO;YACL,KAAK,CAAC,cAAc,CAAC,IAAI;gBACvB,IAAI,IAAI,CAAC,IAAI,KAAK,kBAAkB,EAAE,CAAC;oBACrC,0BAA0B,GAAG,IAAI,CAAC;gBACpC,CAAC;YACH,CAAC;YAED,KAAK,CAAC,WAAW,CAAC,IAAI;gBACpB,IAAI,cAAc,KAAK,SAAS;oBAAE,OAAO,CAAC,oBAAoB;gBAC9D,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gBAC7B,IAAI,OAAO,EAAE,IAAI,KAAK,8BAAS,CAAC,QAAQ,IAAI,OAAO,CAAC,KAAK,CAAC,WAAW,EAAE,KAAK,MAAM,EAAE,CAAC;oBACnF,cAAc,GAAG,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC;gBAC/C,CAAC;YACH,CAAC;YAED,KAAK,CAAC,aAAa,CAAC,IAAI;gBACtB,IAAI,0BAA0B;oBAAE,OAAO;gBAEvC,uEAAuE;gBACvE,qEAAqE;gBACrE,qBAAqB;gBACrB,MAAM,OAAO,GAAG,cAAc,KAAK,SAAS,CAAC;gBAC7C,MAAM,QAAQ,GAAG,OAAO,CAAC,CAAC,CAAC,cAAe,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC;gBACnE,MAAM,UAAU,GAAG,OAAO,CAAC,CAAC,CAAC,4BAA4B,CAAC,CAAC,CAAC,8BAA8B,CAAC;gBAC3F,MAAM,cAAc,GAAG,OAAO;oBAC5B,CAAC,CAAC,kEAAkE;oBACpE,CAAC,CAAC,4DAA4D,CAAC;gBAEjE,OAAO,CAAC,MAAM,CAAC;oBACb,OAAO,EACL,6LAA6L;oBAC/L,UAAU,EAAE,CAAC;oBACb,QAAQ,EAAE,CAAC;oBACX,OAAO,EAAE;wBACP;4BACE,OAAO,EAAE,cAAc;4BACvB,GAAG,EAAE,CAAC,SAAS,EAAE,EAAE;gCACjB,SAAS,CAAC,MAAM,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;4BACzC,CAAC;yBACF;qBACF;iBACF,CAAC,CAAC;YACL,CAAC;SACF,CAAC;IACJ,CAAC;CACF,CAAC"}
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ReservedVariableName = void 0;
|
|
4
|
+
const liquid_html_parser_1 = require("@platformos/liquid-html-parser");
|
|
5
|
+
const types_1 = require("../../types");
|
|
6
|
+
const utils_1 = require("../utils");
|
|
7
|
+
exports.ReservedVariableName = {
|
|
8
|
+
meta: {
|
|
9
|
+
code: 'ReservedVariableName',
|
|
10
|
+
name: 'Reserved variable name',
|
|
11
|
+
docs: {
|
|
12
|
+
description: "Disallows using reserved Liquid literals ('true', 'false', 'nil', 'null', 'empty', 'blank') as variable names. Reading such a name always returns the built-in literal, never the assigned value.",
|
|
13
|
+
recommended: true,
|
|
14
|
+
url: undefined,
|
|
15
|
+
},
|
|
16
|
+
type: types_1.SourceCodeType.LiquidHtml,
|
|
17
|
+
severity: types_1.Severity.ERROR,
|
|
18
|
+
schema: {},
|
|
19
|
+
targets: [],
|
|
20
|
+
},
|
|
21
|
+
create(context) {
|
|
22
|
+
const report = (name, startIndex, endIndex) => {
|
|
23
|
+
context.report({
|
|
24
|
+
message: `'${name}' is a reserved Liquid literal and cannot be used as a variable name — reading '${name}' always returns the literal, never the assigned value`,
|
|
25
|
+
startIndex,
|
|
26
|
+
endIndex,
|
|
27
|
+
});
|
|
28
|
+
};
|
|
29
|
+
// Targets whose name is a plain string always sit at the start of their markup node
|
|
30
|
+
const checkStringTarget = (name, markup) => {
|
|
31
|
+
if (utils_1.RESERVED_VARIABLE_NAMES.has(name)) {
|
|
32
|
+
report(name, markup.position.start, markup.position.start + name.length);
|
|
33
|
+
}
|
|
34
|
+
};
|
|
35
|
+
const checkLookupTarget = (lookup) => {
|
|
36
|
+
if (lookup?.name && utils_1.RESERVED_VARIABLE_NAMES.has(lookup.name)) {
|
|
37
|
+
report(lookup.name, lookup.position.start, lookup.position.end);
|
|
38
|
+
}
|
|
39
|
+
};
|
|
40
|
+
return {
|
|
41
|
+
async LiquidTag(node) {
|
|
42
|
+
if (typeof node.markup === 'string')
|
|
43
|
+
return;
|
|
44
|
+
switch (node.name) {
|
|
45
|
+
case liquid_html_parser_1.NamedTags.assign:
|
|
46
|
+
checkStringTarget(node.markup.name, node.markup);
|
|
47
|
+
break;
|
|
48
|
+
case liquid_html_parser_1.NamedTags.capture:
|
|
49
|
+
case liquid_html_parser_1.NamedTags.parse_json:
|
|
50
|
+
case liquid_html_parser_1.NamedTags.increment:
|
|
51
|
+
case liquid_html_parser_1.NamedTags.decrement:
|
|
52
|
+
checkLookupTarget(node.markup);
|
|
53
|
+
break;
|
|
54
|
+
case liquid_html_parser_1.NamedTags.function:
|
|
55
|
+
checkLookupTarget(node.markup.name);
|
|
56
|
+
break;
|
|
57
|
+
case liquid_html_parser_1.NamedTags.graphql:
|
|
58
|
+
checkStringTarget(node.markup.name, node.markup);
|
|
59
|
+
break;
|
|
60
|
+
case liquid_html_parser_1.NamedTags.hash_assign:
|
|
61
|
+
checkLookupTarget(node.markup.target);
|
|
62
|
+
break;
|
|
63
|
+
case liquid_html_parser_1.NamedTags.for:
|
|
64
|
+
case liquid_html_parser_1.NamedTags.tablerow:
|
|
65
|
+
checkStringTarget(node.markup.variableName, node.markup);
|
|
66
|
+
break;
|
|
67
|
+
case liquid_html_parser_1.NamedTags.background:
|
|
68
|
+
if (node.markup.type === liquid_html_parser_1.NodeTypes.BackgroundMarkup) {
|
|
69
|
+
checkStringTarget(node.markup.jobId, node.markup);
|
|
70
|
+
}
|
|
71
|
+
break;
|
|
72
|
+
}
|
|
73
|
+
},
|
|
74
|
+
async LiquidBranch(node) {
|
|
75
|
+
if (node.name === liquid_html_parser_1.NamedTags.catch && typeof node.markup !== 'string') {
|
|
76
|
+
checkLookupTarget(node.markup);
|
|
77
|
+
}
|
|
78
|
+
},
|
|
79
|
+
};
|
|
80
|
+
},
|
|
81
|
+
};
|
|
82
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/checks/reserved-variable-name/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -25,6 +25,12 @@ exports.UnusedAssign = {
|
|
|
25
25
|
// effects on the original, so they count as "using" the variable.
|
|
26
26
|
const referenceAssignedVariables = new Set();
|
|
27
27
|
const usedVariables = new Set();
|
|
28
|
+
// Concatenated markup of LiquidTags whose parsing fell back to a raw string
|
|
29
|
+
// (e.g. a typo like `{% assign name = x | default: [...] } %}`). The AST has
|
|
30
|
+
// no VariableLookup nodes to traverse inside them, so onCodePathEnd scans
|
|
31
|
+
// this text for assigned-variable names — avoids compounding the user's
|
|
32
|
+
// syntax error with false "unused" warnings.
|
|
33
|
+
let fallbackText = '';
|
|
28
34
|
function checkVariableUsage(node) {
|
|
29
35
|
if (node.type === liquid_html_parser_1.NodeTypes.VariableLookup) {
|
|
30
36
|
usedVariables.add(node.name);
|
|
@@ -58,6 +64,9 @@ exports.UnusedAssign = {
|
|
|
58
64
|
else if (isLiquidTagCapture(node) && node.markup.name) {
|
|
59
65
|
assignedVariables.set(node.markup.name, node);
|
|
60
66
|
}
|
|
67
|
+
else if (typeof node.markup === 'string' && node.markup) {
|
|
68
|
+
fallbackText += '\n' + node.markup;
|
|
69
|
+
}
|
|
61
70
|
},
|
|
62
71
|
async VariableLookup(node, ancestors) {
|
|
63
72
|
if ((0, utils_1.isWithinRawTagThatDoesNotParseItsContents)(ancestors))
|
|
@@ -69,7 +78,19 @@ exports.UnusedAssign = {
|
|
|
69
78
|
checkVariableUsage(node);
|
|
70
79
|
},
|
|
71
80
|
async onCodePathEnd() {
|
|
81
|
+
if (fallbackText) {
|
|
82
|
+
for (const name of assignedVariables.keys()) {
|
|
83
|
+
if (usedVariables.has(name))
|
|
84
|
+
continue;
|
|
85
|
+
if (new RegExp(`\\b${name}\\b`).test(fallbackText))
|
|
86
|
+
usedVariables.add(name);
|
|
87
|
+
}
|
|
88
|
+
}
|
|
72
89
|
for (const [variable, node] of assignedVariables.entries()) {
|
|
90
|
+
// Reserved literal names are reported by ReservedVariableName instead —
|
|
91
|
+
// "unused" would be misleading when the source visibly references the name.
|
|
92
|
+
if (utils_1.RESERVED_VARIABLE_NAMES.has(variable))
|
|
93
|
+
continue;
|
|
73
94
|
if (!usedVariables.has(variable) && !variable.startsWith('_')) {
|
|
74
95
|
context.report({
|
|
75
96
|
message: `The variable '${variable}' is assigned but not used`,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/checks/unused-assign/index.ts"],"names":[],"mappings":";;;AAAA,uEAMwC;AACxC,uCAA8E;AAC9E,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/checks/unused-assign/index.ts"],"names":[],"mappings":"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"}
|
package/dist/checks/utils.d.ts
CHANGED
|
@@ -1,5 +1,12 @@
|
|
|
1
1
|
import { Position, NodeTypes, HtmlElement, AttrEmpty, AttrSingleQuoted, AttrDoubleQuoted, AttrUnquoted, LiquidHtmlNode, LiquidBranch, LiquidTagFor, LiquidTagTablerow, LiquidTag } from '@platformos/liquid-html-parser';
|
|
2
2
|
import { LiquidHtmlNodeOfType as NodeOfType } from '../types';
|
|
3
|
+
/**
|
|
4
|
+
* Names that Liquid resolves as built-in literals before looking up variables
|
|
5
|
+
* (Liquid::Expression::LITERALS in the backend, `LiquidLiteralValues` in the
|
|
6
|
+
* parser grammar). Assigning to them succeeds silently, but reading them
|
|
7
|
+
* always returns the literal, never the assigned value.
|
|
8
|
+
*/
|
|
9
|
+
export declare const RESERVED_VARIABLE_NAMES: ReadonlySet<string>;
|
|
3
10
|
type ElementType<T> = T extends (infer E)[] ? E : never;
|
|
4
11
|
export type ValuedHtmlAttribute = AttrSingleQuoted | AttrDoubleQuoted | AttrUnquoted;
|
|
5
12
|
export declare function isNodeOfType<T extends NodeTypes>(type: T, node?: LiquidHtmlNode): node is NodeOfType<T>;
|
package/dist/checks/utils.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.RESERVED_VARIABLE_NAMES = void 0;
|
|
3
4
|
exports.isNodeOfType = isNodeOfType;
|
|
4
5
|
exports.isLiquidBranch = isLiquidBranch;
|
|
5
6
|
exports.isHtmlTag = isHtmlTag;
|
|
@@ -13,6 +14,13 @@ exports.isLoopScopedVariable = isLoopScopedVariable;
|
|
|
13
14
|
exports.isLoopLiquidTag = isLoopLiquidTag;
|
|
14
15
|
exports.isWithinRawTagThatDoesNotParseItsContents = isWithinRawTagThatDoesNotParseItsContents;
|
|
15
16
|
const liquid_html_parser_1 = require("@platformos/liquid-html-parser");
|
|
17
|
+
/**
|
|
18
|
+
* Names that Liquid resolves as built-in literals before looking up variables
|
|
19
|
+
* (Liquid::Expression::LITERALS in the backend, `LiquidLiteralValues` in the
|
|
20
|
+
* parser grammar). Assigning to them succeeds silently, but reading them
|
|
21
|
+
* always returns the literal, never the assigned value.
|
|
22
|
+
*/
|
|
23
|
+
exports.RESERVED_VARIABLE_NAMES = new Set(Object.keys(liquid_html_parser_1.LiquidLiteralValues));
|
|
16
24
|
function isNodeOfType(type, node) {
|
|
17
25
|
return node?.type === type;
|
|
18
26
|
}
|
package/dist/checks/utils.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/checks/utils.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/checks/utils.ts"],"names":[],"mappings":";;;AAiCA,oCAKC;AAED,wCAEC;AAED,8BAUC;AAED,wBAMC;AAED,0CASC;AAED,sDAMC;AAED,sCAMC;AAED,kDAMC;AAED,wCAEC;AAED,oDAQC;AAED,0CAEC;AAUD,8FAEC;AA/HD,uEAgBwC;AAGxC;;;;;GAKG;AACU,QAAA,uBAAuB,GAAwB,IAAI,GAAG,CACjE,MAAM,CAAC,IAAI,CAAC,wCAAmB,CAAC,CACjC,CAAC;AAMF,SAAgB,YAAY,CAC1B,IAAO,EACP,IAAqB;IAErB,OAAO,IAAI,EAAE,IAAI,KAAK,IAAI,CAAC;AAC7B,CAAC;AAED,SAAgB,cAAc,CAAC,IAAoB;IACjD,OAAO,YAAY,CAAC,8BAAS,CAAC,YAAY,EAAE,IAAI,CAAC,CAAC;AACpD,CAAC;AAED,SAAgB,SAAS,CACvB,IAAiB,EACjB,IAAO;IAEP,OAAO,CACL,IAAI,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC;QACtB,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,8BAAS,CAAC,QAAQ;QACxC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,KAAK,IAAI;QAC3B,CAAC,CAAC,IAAI,CAAC,gBAAgB,CACxB,CAAC;AACJ,CAAC;AAED,SAAgB,MAAM,CAAC,IAAqC,EAAE,IAAY;IACxE,OAAO,CACL,IAAI,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC;QACtB,YAAY,CAAC,8BAAS,CAAC,QAAQ,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC9C,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,KAAK,IAAI,CAC5B,CAAC;AACJ,CAAC;AAED,SAAgB,eAAe,CAC7B,IAA4C;IAE5C,OAAO;QACL,8BAAS,CAAC,YAAY;QACtB,8BAAS,CAAC,gBAAgB;QAC1B,8BAAS,CAAC,gBAAgB;QAC1B,8BAAS,CAAC,SAAS;KACpB,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,YAAY,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC;AAC7C,CAAC;AAED,SAAgB,qBAAqB,CACnC,IAA4C;IAE5C,OAAO,CAAC,8BAAS,CAAC,YAAY,EAAE,8BAAS,CAAC,gBAAgB,EAAE,8BAAS,CAAC,gBAAgB,CAAC,CAAC,IAAI,CAC1F,CAAC,IAAI,EAAE,EAAE,CAAC,YAAY,CAAC,IAAI,EAAE,IAAI,CAAC,CACnC,CAAC;AACJ,CAAC;AAED,SAAgB,aAAa,CAAC,IAAyB,EAAE,IAAY;IACnE,MAAM,KAAK,GAAG,IAAI,MAAM,CAAC,UAAU,IAAI,SAAS,EAAE,GAAG,CAAC,CAAC;IAEvD,OAAO,IAAI,CAAC,KAAK;SACd,MAAM,CAAC,CAAC,IAAI,EAAoB,EAAE,CAAC,YAAY,CAAC,8BAAS,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;SAC1E,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC;AACtD,CAAC;AAED,SAAgB,mBAAmB,CAAC,IAAyB,EAAE,KAAa;IAC1E,OAAO,CACL,IAAI,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC;QACvB,YAAY,CAAC,8BAAS,CAAC,QAAQ,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QAC/C,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,KAAK,KAAK,CAC9B,CAAC;AACJ,CAAC;AAED,SAAgB,cAAc,CAAC,IAAoB;IACjD,OAAO,IAAI,CAAC,IAAI,KAAK,8BAAS,CAAC,MAAM,CAAC;AACxC,CAAC;AAED,SAAgB,oBAAoB,CAAC,YAAoB,EAAE,SAA2B;IACpF,OAAO,SAAS,CAAC,IAAI,CACnB,CAAC,QAAQ,EAAE,EAAE,CACX,QAAQ,CAAC,IAAI,KAAK,8BAAS,CAAC,SAAS;QACrC,eAAe,CAAC,QAAQ,CAAC;QACzB,OAAO,QAAQ,CAAC,MAAM,KAAK,QAAQ;QACnC,QAAQ,CAAC,MAAM,CAAC,YAAY,KAAK,YAAY,CAChD,CAAC;AACJ,CAAC;AAED,SAAgB,eAAe,CAAC,GAAc;IAC5C,OAAO,kCAAa,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAW,CAAC,CAAC;AACjD,CAAC;AAED,MAAM,kCAAkC,GAAG,CAAC,KAAK,CAAC,CAAC;AAEnD,SAAS,kCAAkC,CAAC,IAAoB;IAC9D,OAAO,CACL,IAAI,CAAC,IAAI,KAAK,8BAAS,CAAC,YAAY,IAAI,kCAAkC,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAC/F,CAAC;AACJ,CAAC;AAED,SAAgB,yCAAyC,CAAC,SAA2B;IACnF,OAAO,SAAS,CAAC,IAAI,CAAC,kCAAkC,CAAC,CAAC;AAC5D,CAAC"}
|
package/dist/find-root.js
CHANGED
|
@@ -35,10 +35,23 @@ var __importStar = (this && this.__importStar) || (function () {
|
|
|
35
35
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
36
|
exports.findRoot = findRoot;
|
|
37
37
|
const path = __importStar(require("./path"));
|
|
38
|
+
function isInsideApp(dir) {
|
|
39
|
+
let current = dir;
|
|
40
|
+
while (true) {
|
|
41
|
+
const parent = path.dirname(current);
|
|
42
|
+
if (parent === current)
|
|
43
|
+
return false;
|
|
44
|
+
if (path.basename(parent) === 'app')
|
|
45
|
+
return true;
|
|
46
|
+
current = parent;
|
|
47
|
+
}
|
|
48
|
+
}
|
|
38
49
|
async function isRoot(dir, fileExists) {
|
|
39
50
|
return or(fileExists(path.join(dir, '.pos')), fileExists(path.join(dir, '.platformos-check.yml')), fileExists(path.join(dir, 'app')),
|
|
40
|
-
// modules/ is a root indicator only when not inside
|
|
41
|
-
|
|
51
|
+
// modules/ is a root indicator only when not inside an app/ subtree.
|
|
52
|
+
// app/modules/ is a valid subdirectory, and app/views/partials/modules/ is a
|
|
53
|
+
// legitimate partial organization that should not be mistaken for a project root.
|
|
54
|
+
and(fileExists(path.join(dir, 'modules')), Promise.resolve(path.basename(dir) !== 'app' && !isInsideApp(dir))));
|
|
42
55
|
}
|
|
43
56
|
async function and(...promises) {
|
|
44
57
|
const bools = await Promise.all(promises);
|
package/dist/find-root.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"find-root.js","sourceRoot":"","sources":["../src/find-root.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"find-root.js","sourceRoot":"","sources":["../src/find-root.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAmDA,4BAaC;AA/DD,6CAA+B;AAI/B,SAAS,WAAW,CAAC,GAAc;IACjC,IAAI,OAAO,GAAG,GAAG,CAAC;IAClB,OAAO,IAAI,EAAE,CAAC;QACZ,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QACrC,IAAI,MAAM,KAAK,OAAO;YAAE,OAAO,KAAK,CAAC;QACrC,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,KAAK;YAAE,OAAO,IAAI,CAAC;QACjD,OAAO,GAAG,MAAM,CAAC;IACnB,CAAC;AACH,CAAC;AAED,KAAK,UAAU,MAAM,CAAC,GAAc,EAAE,UAAsB;IAC1D,OAAO,EAAE,CACP,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC,EAClC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,uBAAuB,CAAC,CAAC,EACnD,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;IACjC,qEAAqE;IACrE,6EAA6E;IAC7E,kFAAkF;IAClF,GAAG,CACD,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC,EACrC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,KAAK,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CACnE,CACF,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,GAAG,CAAC,GAAG,QAA4B;IAChD,MAAM,KAAK,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IAC1C,OAAO,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,CAAC;AAC9C,CAAC;AAED,KAAK,UAAU,EAAE,CAAC,GAAG,QAA4B;IAC/C,MAAM,KAAK,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IAC1C,OAAO,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,CAAC,CAAC;AAC/C,CAAC;AAED;;;;;;;;;;GAUG;AACI,KAAK,UAAU,QAAQ,CAAC,IAAe,EAAE,UAAsB;IACpE,MAAM,UAAU,GAAG,MAAM,MAAM,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;IAClD,IAAI,UAAU,EAAE,CAAC;QACf,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IAC/B,MAAM,kBAAkB,GAAG,GAAG,KAAK,IAAI,CAAC;IACxC,IAAI,kBAAkB,EAAE,CAAC;QACvB,OAAO,IAAI,CAAC,CAAC,kBAAkB;IACjC,CAAC;IAED,OAAO,QAAQ,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC;AACnC,CAAC"}
|
package/dist/index.d.ts
CHANGED
|
@@ -6,7 +6,7 @@ export * from './context-utils';
|
|
|
6
6
|
export * from './find-root';
|
|
7
7
|
export * from './fixes';
|
|
8
8
|
export * from './ignore';
|
|
9
|
-
export { FILE_TYPE_DIRS, getAppPaths, getFileType, getModulePaths, isApiCall, isAuthorization, isEmail, isFormConfiguration, isKnownGraphQLFile, isKnownLiquidFile, isLayout, isMigration, isPage, isPartial, isSms, PlatformOSFileType, } from '@platformos/platformos-common';
|
|
9
|
+
export { FILE_TYPE_DIRS, getAppPaths, getFileType, getModulePaths, isApiCall, isAuthorization, isEmail, isFormConfiguration, isKnownGraphQLFile, isKnownLiquidFile, isKnownYAMLFile, isLayout, isMigration, isPage, isPartial, isSms, isSupportedSourceFile, PlatformOSFileType, } from '@platformos/platformos-common';
|
|
10
10
|
export * from './frontmatter';
|
|
11
11
|
export * from './json';
|
|
12
12
|
export * from './JSONValidator';
|
package/dist/index.js
CHANGED
|
@@ -36,7 +36,7 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
|
36
36
|
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
37
37
|
};
|
|
38
38
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
|
-
exports.path = exports.PlatformOSFileType = exports.isSms = exports.isPartial = exports.isPage = exports.isMigration = exports.isLayout = exports.isKnownLiquidFile = exports.isKnownGraphQLFile = exports.isFormConfiguration = exports.isEmail = exports.isAuthorization = exports.isApiCall = exports.getModulePaths = exports.getFileType = exports.getAppPaths = exports.FILE_TYPE_DIRS = void 0;
|
|
39
|
+
exports.path = exports.PlatformOSFileType = exports.isSupportedSourceFile = exports.isSms = exports.isPartial = exports.isPage = exports.isMigration = exports.isLayout = exports.isKnownYAMLFile = exports.isKnownLiquidFile = exports.isKnownGraphQLFile = exports.isFormConfiguration = exports.isEmail = exports.isAuthorization = exports.isApiCall = exports.getModulePaths = exports.getFileType = exports.getAppPaths = exports.FILE_TYPE_DIRS = void 0;
|
|
40
40
|
exports.check = check;
|
|
41
41
|
const AugmentedPlatformOSDocset_1 = require("./AugmentedPlatformOSDocset");
|
|
42
42
|
const JSONValidator_1 = require("./JSONValidator");
|
|
@@ -65,11 +65,13 @@ Object.defineProperty(exports, "isEmail", { enumerable: true, get: function () {
|
|
|
65
65
|
Object.defineProperty(exports, "isFormConfiguration", { enumerable: true, get: function () { return platformos_common_1.isFormConfiguration; } });
|
|
66
66
|
Object.defineProperty(exports, "isKnownGraphQLFile", { enumerable: true, get: function () { return platformos_common_1.isKnownGraphQLFile; } });
|
|
67
67
|
Object.defineProperty(exports, "isKnownLiquidFile", { enumerable: true, get: function () { return platformos_common_1.isKnownLiquidFile; } });
|
|
68
|
+
Object.defineProperty(exports, "isKnownYAMLFile", { enumerable: true, get: function () { return platformos_common_1.isKnownYAMLFile; } });
|
|
68
69
|
Object.defineProperty(exports, "isLayout", { enumerable: true, get: function () { return platformos_common_1.isLayout; } });
|
|
69
70
|
Object.defineProperty(exports, "isMigration", { enumerable: true, get: function () { return platformos_common_1.isMigration; } });
|
|
70
71
|
Object.defineProperty(exports, "isPage", { enumerable: true, get: function () { return platformos_common_1.isPage; } });
|
|
71
72
|
Object.defineProperty(exports, "isPartial", { enumerable: true, get: function () { return platformos_common_1.isPartial; } });
|
|
72
73
|
Object.defineProperty(exports, "isSms", { enumerable: true, get: function () { return platformos_common_1.isSms; } });
|
|
74
|
+
Object.defineProperty(exports, "isSupportedSourceFile", { enumerable: true, get: function () { return platformos_common_1.isSupportedSourceFile; } });
|
|
73
75
|
Object.defineProperty(exports, "PlatformOSFileType", { enumerable: true, get: function () { return platformos_common_1.PlatformOSFileType; } });
|
|
74
76
|
__exportStar(require("./frontmatter"), exports);
|
|
75
77
|
__exportStar(require("./json"), exports);
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA2FA,sBAqFC;AAhLD,2EAAwE;AACxE,mDAAgD;AAChD,mDAOyB;AACzB,uDAA+D;AAC/D,qCAAqC;AACrC,6CAA+B;AAC/B,mCA2BiB;AACjB,mCAAsC;AACtC,yCAAoD;AAEpD,8DAA4C;AAC5C,iEAA+C;AAC/C,2CAAyB;AACzB,kDAAgC;AAChC,8CAA4B;AAC5B,0CAAwB;AACxB,2CAAyB;AACzB,mEAmBuC;AAlBrC,mHAAA,cAAc,OAAA;AACd,gHAAA,WAAW,OAAA;AACX,gHAAA,WAAW,OAAA;AACX,mHAAA,cAAc,OAAA;AACd,8GAAA,SAAS,OAAA;AACT,oHAAA,eAAe,OAAA;AACf,4GAAA,OAAO,OAAA;AACP,wHAAA,mBAAmB,OAAA;AACnB,uHAAA,kBAAkB,OAAA;AAClB,sHAAA,iBAAiB,OAAA;AACjB,oHAAA,eAAe,OAAA;AACf,6GAAA,QAAQ,OAAA;AACR,gHAAA,WAAW,OAAA;AACX,2GAAA,MAAM,OAAA;AACN,8GAAA,SAAS,OAAA;AACT,0GAAA,KAAK,OAAA;AACL,0HAAA,qBAAqB,OAAA;AACrB,uHAAA,kBAAkB,OAAA;AAEpB,gDAA8B;AAC9B,yCAAuB;AACvB,kDAAgC;AAChC,+CAA+B;AAC/B,mDAAiC;AACjC,0CAAwB;AACxB,gDAA8B;AAC9B,kDAAgC;AAChC,+CAA6B;AAC7B,gDAA8B;AAC9B,iDAA+B;AAC/B,4CAA0B;AAC1B,yDAAuC;AACvC,qDAAmC;AACnC,gDAA8B;AAE9B,MAAM,mBAAmB,GAAG,CAAC,MAAa,EAAQ,EAAE;IAClD,sCAAsC;AACxC,CAAC,CAAC;AAEK,KAAK,UAAU,KAAK,CACzB,GAAQ,EACR,MAAc,EACd,oBAAkC;IAElC,MAAM,SAAS,GAAoB,EAAE,CAAC;IACtC,MAAM,QAAQ,GAAc,EAAE,CAAC;IAC/B,MAAM,EAAE,EAAE,EAAE,GAAG,oBAAoB,CAAC;IACpC,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,CAAC;IAC3B,MAAM,YAAY,GAA0B;QAC1C,GAAG,oBAAoB;QACvB,UAAU,EAAE,IAAA,8BAAc,EAAC,EAAE,CAAC;QAC9B,QAAQ,EAAE,IAAA,4BAAY,EAAC,EAAE,CAAC;QAC1B,gBAAgB,EAAE,IAAA,oCAAoB,EAAC,EAAE,EAAE,OAAO,CAAC;QACnD,sBAAsB,EAAE,IAAA,0CAA0B,EAAC,EAAE,EAAE,GAAG,EAAE,OAAO,CAAC;QACpE,sBAAsB,EAAE,IAAA,0CAA0B,EAAC,EAAE,EAAE,GAAG,CAAC;QAC3D,aAAa,EAAE,IAAA,iCAAiB,EAAC,EAAE,EAAE,OAAO,EAAE,oBAAoB,CAAC,UAAU,CAAC;KAC/E,CAAC;IAEF,MAAM,EAAE,qBAAqB,EAAE,UAAU,EAAE,GAAG,IAAA,4CAA0B,GAAE,CAAC;IAC3E,MAAM,aAAa,GAAG,MAAM,6BAAa,CAAC,MAAM,CAAC,YAAY,CAAC,iBAAiB,EAAE,MAAM,CAAC,CAAC;IACzF,MAAM,YAAY,GAAG,aAAa,EAAE,QAAQ,CAAC;IAE7C,6EAA6E;IAC7E,IAAI,YAAY,CAAC,gBAAgB,IAAI,CAAC,YAAY,CAAC,gBAAgB,CAAC,WAAW,EAAE,CAAC;QAChF,YAAY,CAAC,gBAAgB,GAAG,IAAI,qDAAyB,CAAC,YAAY,CAAC,gBAAgB,CAAC,CAAC;IAC/F,CAAC;IAED,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,MAAM,CAAC,sBAAc,CAAC,EAAE,CAAC;QACjD,QAAQ,IAAI,EAAE,CAAC;YACb,KAAK,sBAAc,CAAC,IAAI,CAAC,CAAC,CAAC;gBACzB,MAAM,KAAK,GAAG,WAAW,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;gBACrC,MAAM,SAAS,GAAG,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;gBACpD,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;oBACzB,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;wBACjC,IAAI,IAAA,kBAAS,EAAC,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,CAAC;4BAAE,SAAS;wBACpD,MAAM,KAAK,GAAG,WAAW,CAAC,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,YAAY,EAAE,YAAY,CAAC,CAAC;wBACxF,SAAS,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC;oBAC7C,CAAC;gBACH,CAAC;gBACD,MAAM;YACR,CAAC;YACD,KAAK,sBAAc,CAAC,OAAO,CAAC,CAAC,CAAC;gBAC5B,MAAM,KAAK,GAAG,WAAW,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;gBACrC,MAAM,SAAS,GAAG,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;gBACpD,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;oBACzB,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;wBACjC,IAAI,IAAA,kBAAS,EAAC,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,CAAC;4BAAE,SAAS;wBACpD,MAAM,KAAK,GAAG,WAAW,CAAC,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,YAAY,EAAE,YAAY,CAAC,CAAC;wBACxF,SAAS,CAAC,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC;oBAChD,CAAC;gBACH,CAAC;gBACD,MAAM;YACR,CAAC;YACD,KAAK,sBAAc,CAAC,UAAU,CAAC,CAAC,CAAC;gBAC/B,MAAM,KAAK,GAAG,WAAW,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;gBACrC,MAAM,SAAS,GAAG,CAAC,qBAAqB,EAAE,GAAG,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC;gBAChF,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;oBACzB,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;wBACjC,IAAI,IAAA,kBAAS,EAAC,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,CAAC;4BAAE,SAAS;wBACpD,MAAM,KAAK,GAAG,WAAW,CAAC,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,YAAY,EAAE,YAAY,CAAC,CAAC;wBACxF,SAAS,CAAC,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC;oBAC/C,CAAC;gBACH,CAAC;gBACD,MAAM;YACR,CAAC;YACD,KAAK,sBAAc,CAAC,IAAI,CAAC,CAAC,CAAC;gBACzB,MAAM,KAAK,GAAG,WAAW,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;gBACrC,MAAM,SAAS,GAAG,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;gBACpD,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;oBACzB,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;wBACjC,IAAI,IAAA,kBAAS,EAAC,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,CAAC;4BAAE,SAAS;wBACpD,MAAM,KAAK,GAAG,WAAW,CAAC,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,YAAY,EAAE,YAAY,CAAC,CAAC;wBACxF,SAAS,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC;oBAC7C,CAAC;gBACH,CAAC;gBACD,MAAM;YACR,CAAC;QACH,CAAC;IACH,CAAC;IAED,MAAM,UAAU,GAAG,MAAM,CAAC,OAAO,IAAI,mBAAmB,CAAC;IACzD,MAAM,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;IAE3E,OAAO,QAAQ,CAAC,MAAM,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC;AAC5D,CAAC;AAED,SAAS,aAAa,CACpB,KAA4B,EAC5B,IAAmB,EACnB,QAAmB,EACnB,MAAc,EACd,YAA0B,EAC1B,YAA2B;IAE3B,MAAM,aAAa,GAAG,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACvD,OAAO;QACL,GAAG,YAAY;QACf,YAAY;QACZ,QAAQ,EAAE,cAAc,CAAC,aAAa,EAAE,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC;QAC1D,KAAK,EAAE,CAAC,YAAY,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,GAAG,YAAY,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAC9E,cAAc,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC,OAAO,CAAC;QAC3D,MAAM,CAAC,OAAmB;YACxB,QAAQ,CAAC,IAAI,CAAC;gBACZ,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI;gBACrB,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI;gBACtB,OAAO,EAAE,OAAO,CAAC,OAAO;gBACxB,GAAG,EAAE,IAAI,CAAC,GAAG;gBACb,QAAQ,EAAE,aAAa,EAAE,QAAQ,IAAI,KAAK,CAAC,IAAI,CAAC,QAAQ;gBACxD,KAAK,EAAE,IAAA,mBAAW,EAAC,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC,UAAU,CAAC;gBACnD,GAAG,EAAE,IAAA,mBAAW,EAAC,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC,QAAQ,CAAC;gBAC/C,GAAG,EAAE,OAAO,CAAC,GAAG;gBAChB,OAAO,EAAE,OAAO,CAAC,OAAO;aACA,CAAC,CAAC;QAC9B,CAAC;QACD,IAAI;QACJ,MAAM;KACU,CAAC;AACrB,CAAC;AAED,SAAS,cAAc,CACrB,aAAwC,EACxC,MAAS;IAET,MAAM,QAAQ,GAAyB,EAAE,CAAC;IAE1C,KAAK,MAAM,CAAC,GAAG,EAAE,UAAU,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;QACvD,QAAQ,CAAC,GAAc,CAAC,GAAG,aAAa,EAAE,CAAC,GAAG,CAAC,IAAI,UAAU,CAAC,YAAY,EAAE,CAAC;IAC/E,CAAC;IAED,OAAO,QAAuB,CAAC;AACjC,CAAC;AAED,SAAS,YAAY,CACnB,IAAO,EACP,MAAyC;IAEzC,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,EAA6B,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;AACnF,CAAC;AAED,SAAS,WAAW,CAClB,KAAyB,EACzB,IAAmB,EACnB,MAAc,EACd,QAAmB,EACnB,YAA0B,EAC1B,YAA2B;IAE3B,MAAM,OAAO,GAAG,aAAa,CAAC,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,YAAY,EAAE,YAAY,CAAC,CAAC;IACzF,OAAO,KAAK,CAAC,MAAM,CAAC,OAAc,CAAa,CAAC;AAClD,CAAC;AAED,SAAS,WAAW,CAA2B,IAAO,EAAE,WAAgB;IACtE,OAAO,WAAW,CAAC,MAAM,CAAC,CAAC,IAAI,EAAyB,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;AACjF,CAAC;AAED,KAAK,UAAU,aAAa,CAAC,KAAgB,EAAE,IAAoB;IACjE,IAAI,KAAK,CAAC,eAAe;QAAE,MAAM,KAAK,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;IAC7D,IAAI,IAAI,CAAC,GAAG,YAAY,KAAK;QAAE,OAAO;IACtC,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,GAAG,CAAC;QAAE,MAAM,IAAA,oBAAS,EAAC,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;IACpE,IAAI,KAAK,CAAC,aAAa;QAAE,MAAM,KAAK,CAAC,aAAa,CAAC,IAAuC,CAAC,CAAC;AAC9F,CAAC;AAED,KAAK,UAAU,gBAAgB,CAAC,KAAmB,EAAE,IAAuB;IAC1E,IAAI,KAAK,CAAC,aAAa;QACrB,MAAM,KAAK,CAAC,aAAa,CAAC,IAAkD,CAAC,CAAC;AAClF,CAAC;AAED,KAAK,UAAU,eAAe,CAAC,KAAkB,EAAE,IAAsB;IACvE,IAAI,KAAK,CAAC,eAAe;QAAE,MAAM,KAAK,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;IAC7D,IAAI,IAAI,CAAC,GAAG,YAAY,KAAK;QAAE,OAAO;IACtC,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,GAAG,CAAC;QAAE,MAAM,IAAA,sBAAW,EAAC,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;IACtE,IAAI,KAAK,CAAC,aAAa;QAAE,MAAM,KAAK,CAAC,aAAa,CAAC,IAA6C,CAAC,CAAC;AACpG,CAAC;AAED,KAAK,UAAU,aAAa,CAAC,KAAgB,EAAE,IAAoB;IACjE,IAAI,KAAK,CAAC,eAAe;QAAE,MAAM,KAAK,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;IAC7D,IAAI,IAAI,CAAC,GAAG,YAAY,KAAK;QAAE,OAAO;IACtC,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,GAAG,CAAC;QAAE,MAAM,IAAA,oBAAS,EAAC,IAAI,CAAC,GAAG,EAAE,KAAY,CAAC,CAAC;IAC3E,IAAI,KAAK,CAAC,aAAa;QAAE,MAAM,KAAK,CAAC,aAAa,CAAC,IAAuC,CAAC,CAAC;AAC9F,CAAC"}
|