@platformos/platformos-check-common 0.0.7 → 0.0.9
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 +16 -0
- package/README.md +4 -4
- package/dist/AugmentedPlatformOSDocset.d.ts +11 -0
- package/dist/AugmentedPlatformOSDocset.js +81 -0
- package/dist/AugmentedPlatformOSDocset.js.map +1 -0
- package/dist/JSONValidator.js +1 -1
- package/dist/JSONValidator.js.map +1 -1
- package/dist/checks/deprecated-filter/index.js +4 -41
- package/dist/checks/deprecated-filter/index.js.map +1 -1
- package/dist/checks/deprecated-tag/index.js +21 -22
- package/dist/checks/deprecated-tag/index.js.map +1 -1
- package/dist/checks/duplicate-function-arguments/index.js +1 -1
- package/dist/checks/duplicate-function-arguments/index.js.map +1 -1
- package/dist/checks/duplicate-render-partial-arguments/index.js +1 -1
- package/dist/checks/duplicate-render-partial-arguments/index.js.map +1 -1
- package/dist/checks/graphql/index.js +1 -1
- package/dist/checks/graphql/index.js.map +1 -1
- package/dist/checks/graphql-variables/index.js +4 -0
- package/dist/checks/graphql-variables/index.js.map +1 -1
- package/dist/checks/img-width-and-height/index.js +1 -1
- package/dist/checks/img-width-and-height/index.js.map +1 -1
- package/dist/checks/index.d.ts +3 -3
- package/dist/checks/index.js +4 -79
- package/dist/checks/index.js.map +1 -1
- package/dist/checks/json-syntax-error/index.js +1 -1
- package/dist/checks/json-syntax-error/index.js.map +1 -1
- package/dist/checks/liquid-html-syntax-error/checks/InvalidLoopArguments.js +1 -1
- package/dist/checks/liquid-html-syntax-error/checks/InvalidLoopArguments.js.map +1 -1
- package/dist/checks/liquid-html-syntax-error/checks/InvalidTagSyntax.d.ts +19 -0
- package/dist/checks/liquid-html-syntax-error/checks/InvalidTagSyntax.js +79 -0
- package/dist/checks/liquid-html-syntax-error/checks/InvalidTagSyntax.js.map +1 -0
- package/dist/checks/liquid-html-syntax-error/checks/UnknownTag.d.ts +3 -0
- package/dist/checks/liquid-html-syntax-error/checks/UnknownTag.js +32 -0
- package/dist/checks/liquid-html-syntax-error/checks/UnknownTag.js.map +1 -0
- package/dist/checks/liquid-html-syntax-error/index.js +23 -5
- package/dist/checks/liquid-html-syntax-error/index.js.map +1 -1
- package/dist/checks/matching-translations/index.d.ts +2 -2
- package/dist/checks/matching-translations/index.js +114 -90
- package/dist/checks/matching-translations/index.js.map +1 -1
- package/dist/checks/metadata-params/index.js +6 -3
- package/dist/checks/metadata-params/index.js.map +1 -1
- package/dist/checks/missing-asset/index.js +1 -1
- package/dist/checks/missing-asset/index.js.map +1 -1
- package/dist/checks/missing-partial/index.d.ts +6 -0
- package/dist/checks/missing-partial/index.js +70 -0
- package/dist/checks/missing-partial/index.js.map +1 -0
- package/dist/checks/orphaned-partial/index.js +4 -4
- package/dist/checks/orphaned-partial/index.js.map +1 -1
- package/dist/checks/parser-blocking-script/index.js +10 -36
- package/dist/checks/parser-blocking-script/index.js.map +1 -1
- package/dist/checks/parser-blocking-script/suggestions.d.ts +1 -2
- package/dist/checks/parser-blocking-script/suggestions.js +1 -11
- package/dist/checks/parser-blocking-script/suggestions.js.map +1 -1
- package/dist/checks/reserved-doc-param-names/index.js +6 -5
- package/dist/checks/reserved-doc-param-names/index.js.map +1 -1
- package/dist/checks/translation-key-exists/index.js +1 -1
- package/dist/checks/translation-key-exists/index.js.map +1 -1
- package/dist/checks/unclosed-html-element/index.js +5 -1
- package/dist/checks/unclosed-html-element/index.js.map +1 -1
- package/dist/checks/undefined-object/index.js +13 -31
- package/dist/checks/undefined-object/index.js.map +1 -1
- package/dist/checks/unique-doc-param-names/index.js +1 -1
- package/dist/checks/unique-doc-param-names/index.js.map +1 -1
- package/dist/checks/unknown-filter/index.js +3 -3
- package/dist/checks/unknown-filter/index.js.map +1 -1
- package/dist/checks/unknown-property/index.js +1 -1
- package/dist/checks/unknown-property/index.js.map +1 -1
- package/dist/checks/unrecognized-render-partial-arguments/index.js +2 -2
- package/dist/checks/unrecognized-render-partial-arguments/index.js.map +1 -1
- package/dist/checks/unused-assign/index.js +1 -1
- package/dist/checks/unused-assign/index.js.map +1 -1
- package/dist/checks/unused-doc-param/index.js +1 -1
- package/dist/checks/unused-doc-param/index.js.map +1 -1
- package/dist/checks/utils.js +1 -1
- package/dist/checks/utils.js.map +1 -1
- package/dist/checks/valid-content-for-arguments/index.js +1 -1
- package/dist/checks/valid-content-for-arguments/index.js.map +1 -1
- package/dist/checks/valid-doc-param-types/index.js +4 -4
- package/dist/checks/valid-doc-param-types/index.js.map +1 -1
- package/dist/checks/valid-html-translation/index.d.ts +2 -2
- package/dist/checks/valid-html-translation/index.js +4 -4
- package/dist/checks/valid-html-translation/index.js.map +1 -1
- package/dist/checks/valid-json/index.js +1 -1
- package/dist/checks/valid-json/index.js.map +1 -1
- package/dist/checks/valid-render-partial-argument-types/index.js +2 -2
- package/dist/checks/valid-render-partial-argument-types/index.js.map +1 -1
- package/dist/checks/variable-name/index.js +1 -1
- package/dist/checks/variable-name/index.js.map +1 -1
- package/dist/context-utils.d.ts +18 -7
- package/dist/context-utils.js +68 -109
- package/dist/context-utils.js.map +1 -1
- package/dist/disabled-checks/index.js +4 -2
- package/dist/disabled-checks/index.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/find-root.d.ts +7 -10
- package/dist/find-root.js +10 -17
- package/dist/find-root.js.map +1 -1
- package/dist/fixes/autofix.d.ts +4 -4
- package/dist/fixes/autofix.js +2 -2
- package/dist/fixes/autofix.js.map +1 -1
- package/dist/fixes/correctors/index.js +4 -0
- package/dist/fixes/correctors/index.js.map +1 -1
- package/dist/index.d.ts +5 -5
- package/dist/index.js +50 -17
- package/dist/index.js.map +1 -1
- package/dist/jsonc/parse.d.ts +1 -1
- package/dist/jsonc/parse.js +1 -1
- package/dist/liquid-doc/arguments.d.ts +7 -8
- package/dist/liquid-doc/arguments.js +28 -29
- package/dist/liquid-doc/arguments.js.map +1 -1
- package/dist/liquid-doc/liquidDoc.d.ts +1 -1
- package/dist/liquid-doc/liquidDoc.js.map +1 -1
- package/dist/liquid-doc/utils.d.ts +3 -3
- package/dist/liquid-doc/utils.js +14 -3
- package/dist/liquid-doc/utils.js.map +1 -1
- package/dist/path.d.ts +1 -0
- package/dist/path.js +16 -1
- package/dist/path.js.map +1 -1
- package/{src/test/MockTheme.ts → dist/test/MockApp.d.ts} +2 -3
- package/dist/test/MockApp.js +16 -0
- package/dist/test/MockApp.js.map +1 -0
- package/dist/test/MockFileSystem.d.ts +3 -3
- package/dist/test/MockFileSystem.js +6 -6
- package/dist/test/MockFileSystem.js.map +1 -1
- package/dist/test/index.d.ts +1 -1
- package/dist/test/index.js +1 -1
- package/dist/test/index.js.map +1 -1
- package/dist/test/test-helper.d.ts +10 -9
- package/dist/test/test-helper.js +15 -106
- package/dist/test/test-helper.js.map +1 -1
- package/dist/to-schema.d.ts +1 -1
- package/dist/to-source-code.d.ts +3 -2
- package/dist/to-source-code.js +20 -0
- package/dist/to-source-code.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/dist/types/platformos-liquid-docs.d.ts +128 -0
- package/dist/types/platformos-liquid-docs.js +3 -0
- package/dist/types/platformos-liquid-docs.js.map +1 -0
- package/dist/types/schemas/index.d.ts +0 -2
- package/dist/types/schemas/index.js.map +1 -1
- package/dist/types.d.ts +26 -67
- package/dist/types.js +3 -5
- package/dist/types.js.map +1 -1
- package/dist/utils/block.js.map +1 -1
- package/dist/utils/index.d.ts +0 -1
- package/dist/utils/index.js +0 -1
- package/dist/utils/index.js.map +1 -1
- package/dist/yaml/parse.d.ts +5 -0
- package/dist/yaml/parse.js +94 -0
- package/dist/yaml/parse.js.map +1 -0
- package/package.json +4 -3
- package/src/{AugmentedThemeDocset.spec.ts → AugmentedPlatformOSDocset.spec.ts} +47 -34
- package/src/AugmentedPlatformOSDocset.ts +89 -0
- package/src/JSONValidator.ts +1 -1
- package/src/checks/deprecated-filter/index.spec.ts +76 -248
- package/src/checks/deprecated-filter/index.ts +5 -53
- package/src/checks/deprecated-tag/index.spec.ts +85 -34
- package/src/checks/deprecated-tag/index.ts +27 -22
- package/src/checks/duplicate-function-arguments/index.ts +1 -1
- package/src/checks/duplicate-render-partial-arguments/index.spec.ts +12 -12
- package/src/checks/duplicate-render-partial-arguments/index.ts +1 -1
- package/src/checks/graphql/index.ts +1 -1
- package/src/checks/graphql-variables/index.spec.ts +95 -0
- package/src/checks/graphql-variables/index.ts +4 -0
- package/src/checks/img-width-and-height/index.ts +2 -2
- package/src/checks/index.ts +11 -80
- package/src/checks/invalid-hash-assign-target/index.spec.ts +27 -27
- package/src/checks/json-syntax-error/index.ts +2 -2
- package/src/checks/liquid-html-syntax-error/checks/InvalidBooleanExpression.spec.ts +0 -11
- package/src/checks/liquid-html-syntax-error/checks/InvalidLoopArguments.spec.ts +1 -2
- package/src/checks/liquid-html-syntax-error/checks/InvalidLoopArguments.ts +2 -2
- package/src/checks/liquid-html-syntax-error/checks/InvalidTagSyntax.spec.ts +259 -0
- package/src/checks/liquid-html-syntax-error/checks/InvalidTagSyntax.ts +89 -0
- package/src/checks/liquid-html-syntax-error/checks/UnknownTag.spec.ts +293 -0
- package/src/checks/liquid-html-syntax-error/checks/UnknownTag.ts +43 -0
- package/src/checks/liquid-html-syntax-error/index.spec.ts +1 -6
- package/src/checks/liquid-html-syntax-error/index.ts +26 -5
- package/src/checks/matching-translations/index.spec.ts +187 -354
- package/src/checks/matching-translations/index.ts +117 -107
- package/src/checks/metadata-params/index.ts +6 -8
- package/src/checks/missing-asset/index.ts +1 -1
- package/src/checks/{missing-template → missing-partial}/index.spec.ts +6 -6
- package/src/checks/{missing-template → missing-partial}/index.ts +12 -26
- package/src/checks/orphaned-partial/index.ts +3 -3
- package/src/checks/parser-blocking-script/index.spec.ts +0 -118
- package/src/checks/parser-blocking-script/index.ts +3 -33
- package/src/checks/parser-blocking-script/suggestions.ts +1 -28
- package/src/checks/translation-key-exists/index.ts +1 -1
- package/src/checks/unclosed-html-element/index.ts +5 -1
- package/src/checks/undefined-object/index.spec.ts +32 -111
- package/src/checks/undefined-object/index.ts +15 -34
- package/src/checks/unique-doc-param-names/index.ts +1 -1
- package/src/checks/unknown-filter/index.spec.ts +2 -2
- package/src/checks/unknown-filter/index.ts +3 -3
- package/src/checks/unknown-property/index.ts +1 -1
- package/src/checks/unrecognized-render-partial-arguments/index.spec.ts +5 -5
- package/src/checks/unrecognized-render-partial-arguments/index.ts +2 -5
- package/src/checks/unused-assign/index.spec.ts +0 -30
- package/src/checks/unused-assign/index.ts +2 -2
- package/src/checks/unused-doc-param/index.ts +1 -1
- package/src/checks/utils.ts +1 -1
- package/src/checks/valid-doc-param-types/index.ts +4 -4
- package/src/checks/valid-html-translation/index.spec.ts +42 -32
- package/src/checks/valid-html-translation/index.ts +7 -7
- package/src/checks/valid-json/index.ts +2 -2
- package/src/checks/valid-render-partial-argument-types/index.spec.ts +13 -13
- package/src/checks/valid-render-partial-argument-types/index.ts +2 -5
- package/src/checks/variable-name/index.ts +1 -1
- package/src/context-utils.spec.ts +49 -77
- package/src/context-utils.ts +81 -129
- package/src/disabled-checks/index.spec.ts +26 -26
- package/src/disabled-checks/index.ts +2 -2
- package/src/disabled-checks/test-checks.ts +4 -4
- package/src/find-root.ts +12 -22
- package/src/fixes/autofix.spec.ts +2 -2
- package/src/fixes/autofix.ts +4 -4
- package/src/fixes/correctors/index.ts +4 -0
- package/src/ignore.spec.ts +4 -5
- package/src/index.ts +51 -21
- package/src/jsonc/parse.ts +1 -1
- package/src/liquid-doc/arguments.spec.ts +19 -45
- package/src/liquid-doc/arguments.ts +35 -42
- package/src/liquid-doc/liquidDoc.spec.ts +1 -1
- package/src/liquid-doc/liquidDoc.ts +1 -2
- package/src/liquid-doc/utils.ts +17 -8
- package/src/path.ts +16 -0
- package/src/test/MockApp.ts +17 -0
- package/src/test/MockFileSystem.spec.ts +10 -11
- package/src/test/MockFileSystem.ts +6 -6
- package/src/test/contain-offense.spec.ts +11 -3
- package/src/test/index.ts +1 -1
- package/src/test/test-helper.ts +43 -145
- package/src/to-source-code.ts +20 -1
- package/src/types/{theme-liquid-docs.ts → platformos-liquid-docs.ts} +8 -13
- package/src/types.ts +29 -92
- package/src/utils/index.ts +0 -1
- package/src/visitor.spec.ts +2 -2
- package/src/yaml/parse.ts +111 -0
- package/src/AugmentedThemeDocset.ts +0 -137
- package/src/checks/app-block-missing-schema/index.spec.ts +0 -121
- package/src/checks/app-block-missing-schema/index.ts +0 -46
- package/src/checks/app-block-valid-tags/index.spec.ts +0 -96
- package/src/checks/app-block-valid-tags/index.ts +0 -54
- package/src/checks/asset-preload/index.spec.ts +0 -78
- package/src/checks/asset-preload/index.ts +0 -65
- package/src/checks/asset-size-app-block-css/index.spec.ts +0 -88
- package/src/checks/asset-size-app-block-css/index.ts +0 -78
- package/src/checks/asset-size-app-block-javascript/index.spec.ts +0 -66
- package/src/checks/asset-size-app-block-javascript/index.ts +0 -78
- package/src/checks/asset-size-css/index.spec.ts +0 -166
- package/src/checks/asset-size-css/index.ts +0 -160
- package/src/checks/asset-size-javascript/index.spec.ts +0 -184
- package/src/checks/asset-size-javascript/index.ts +0 -144
- package/src/checks/block-id-usage/index.spec.ts +0 -76
- package/src/checks/block-id-usage/index.ts +0 -72
- package/src/checks/cdn-preconnect/index.spec.ts +0 -40
- package/src/checks/cdn-preconnect/index.ts +0 -43
- package/src/checks/content-for-header-modification/index.spec.ts +0 -65
- package/src/checks/content-for-header-modification/index.ts +0 -72
- package/src/checks/deprecate-bgsizes/index.spec.ts +0 -41
- package/src/checks/deprecate-bgsizes/index.ts +0 -49
- package/src/checks/deprecate-lazysizes/index.spec.ts +0 -26
- package/src/checks/deprecate-lazysizes/index.ts +0 -58
- package/src/checks/deprecated-filter/fixes.ts +0 -264
- package/src/checks/deprecated-fonts-on-sections-and-blocks/deprecated-fonts-data.ts +0 -1343
- package/src/checks/deprecated-fonts-on-sections-and-blocks/index.spec.ts +0 -613
- package/src/checks/deprecated-fonts-on-sections-and-blocks/index.ts +0 -284
- package/src/checks/deprecated-fonts-on-settings-schema/index.spec.ts +0 -102
- package/src/checks/deprecated-fonts-on-settings-schema/index.ts +0 -66
- package/src/checks/duplicate-content-for-arguments/index.spec.ts +0 -98
- package/src/checks/duplicate-content-for-arguments/index.ts +0 -43
- package/src/checks/empty-block-content/index.spec.ts +0 -117
- package/src/checks/empty-block-content/index.ts +0 -60
- package/src/checks/hardcoded-routes/index.spec.ts +0 -58
- package/src/checks/hardcoded-routes/index.ts +0 -100
- package/src/checks/json-missing-block/index.spec.ts +0 -435
- package/src/checks/json-missing-block/index.ts +0 -56
- package/src/checks/json-missing-block/missing-block-utils.ts +0 -147
- package/src/checks/liquid-free-settings/index.spec.ts +0 -180
- package/src/checks/liquid-free-settings/index.ts +0 -79
- package/src/checks/missing-content-for-arguments/index.spec.ts +0 -144
- package/src/checks/missing-content-for-arguments/index.ts +0 -46
- package/src/checks/pagination-size/index.spec.ts +0 -158
- package/src/checks/pagination-size/index.ts +0 -104
- package/src/checks/remote-asset/index.spec.ts +0 -280
- package/src/checks/remote-asset/index.ts +0 -238
- package/src/checks/reserved-doc-param-names/index.spec.ts +0 -62
- package/src/checks/reserved-doc-param-names/index.ts +0 -57
- package/src/checks/schema-presets-block-order/index.spec.ts +0 -344
- package/src/checks/schema-presets-block-order/index.ts +0 -154
- package/src/checks/schema-presets-static-blocks/index.spec.ts +0 -145
- package/src/checks/schema-presets-static-blocks/index.ts +0 -126
- package/src/checks/static-stylesheet-and-javascript-tags/index.spec.ts +0 -257
- package/src/checks/static-stylesheet-and-javascript-tags/index.ts +0 -48
- package/src/checks/unique-settings-id/index.spec.ts +0 -24
- package/src/checks/unique-settings-id/index.ts +0 -84
- package/src/checks/unique-settings-id/test-data.ts +0 -1191
- package/src/checks/unique-static-block-id/index.spec.ts +0 -55
- package/src/checks/unique-static-block-id/index.ts +0 -60
- package/src/checks/unrecognized-content-for-arguments/index.spec.ts +0 -145
- package/src/checks/unrecognized-content-for-arguments/index.ts +0 -55
- package/src/checks/valid-block-target/index.spec.ts +0 -1396
- package/src/checks/valid-block-target/index.ts +0 -142
- package/src/checks/valid-content-for-argument-types/index.spec.ts +0 -382
- package/src/checks/valid-content-for-argument-types/index.ts +0 -42
- package/src/checks/valid-content-for-arguments/index.spec.ts +0 -107
- package/src/checks/valid-content-for-arguments/index.ts +0 -98
- package/src/checks/valid-local-blocks/index.spec.ts +0 -286
- package/src/checks/valid-local-blocks/index.ts +0 -100
- package/src/checks/valid-local-blocks/valid-block-utils.ts +0 -97
- package/src/checks/valid-schema/index.spec.ts +0 -174
- package/src/checks/valid-schema/index.ts +0 -41
- package/src/checks/valid-schema-name/index.spec.ts +0 -112
- package/src/checks/valid-schema-name/index.ts +0 -75
- package/src/checks/valid-settings-key/index.spec.ts +0 -321
- package/src/checks/valid-settings-key/index.ts +0 -144
- package/src/checks/valid-static-block-type/index.spec.ts +0 -38
- package/src/checks/valid-static-block-type/index.ts +0 -58
- package/src/checks/valid-visible-if/index.spec.ts +0 -619
- package/src/checks/valid-visible-if/index.ts +0 -184
- package/src/checks/valid-visible-if/visible-if-utils.ts +0 -158
- package/src/tags/content-for.ts +0 -25
- package/src/to-schema.ts +0 -231
- package/src/types/schemas/index.ts +0 -5
- package/src/types/schemas/preset.ts +0 -52
- package/src/types/schemas/section.ts +0 -86
- package/src/types/schemas/setting.ts +0 -320
- package/src/types/schemas/template.ts +0 -34
- package/src/types/schemas/theme-block.ts +0 -34
- package/src/types/theme-schemas.ts +0 -80
- package/src/utils/block.ts +0 -300
- package/src/utils/markup.ts +0 -10
|
@@ -15,7 +15,7 @@ exports.JSONSyntaxError = {
|
|
|
15
15
|
docs: {
|
|
16
16
|
description: 'This check exists to prevent invalid JSON files in themes.',
|
|
17
17
|
recommended: true,
|
|
18
|
-
url: 'https://
|
|
18
|
+
url: 'https://documentation.platformos.com/developer-guide/platformos-check/checks/json-syntax-error',
|
|
19
19
|
},
|
|
20
20
|
type: types_1.SourceCodeType.JSON,
|
|
21
21
|
severity: types_1.Severity.ERROR,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/checks/json-syntax-error/index.ts"],"names":[],"mappings":";;;AACA,6CAAqD;AACrD,uCAA4E;AAC5E,uCAAsC;AAEtC,SAAS,iBAAiB,CAAC,KAAY;IACrC,MAAM,OAAO,GAAG,YAAY,IAAI,KAAK,CAAC,CAAC,CAAE,KAAK,CAAC,UAAqB,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC;IACrF,OAAO,OAAO,CAAC,OAAO,CAAC,eAAe,EAAE,EAAE,CAAC,CAAC;AAC9C,CAAC;AAEY,QAAA,eAAe,GAAwB;IAClD,IAAI,EAAE;QACJ,IAAI,EAAE,iBAAiB;QACvB,IAAI,EAAE,oBAAoB;QAC1B,IAAI,EAAE;YACJ,WAAW,EAAE,4DAA4D;YACzE,WAAW,EAAE,IAAI;YACjB,GAAG,EAAE,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/checks/json-syntax-error/index.ts"],"names":[],"mappings":";;;AACA,6CAAqD;AACrD,uCAA4E;AAC5E,uCAAsC;AAEtC,SAAS,iBAAiB,CAAC,KAAY;IACrC,MAAM,OAAO,GAAG,YAAY,IAAI,KAAK,CAAC,CAAC,CAAE,KAAK,CAAC,UAAqB,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC;IACrF,OAAO,OAAO,CAAC,OAAO,CAAC,eAAe,EAAE,EAAE,CAAC,CAAC;AAC9C,CAAC;AAEY,QAAA,eAAe,GAAwB;IAClD,IAAI,EAAE;QACJ,IAAI,EAAE,iBAAiB;QACvB,IAAI,EAAE,oBAAoB;QAC1B,IAAI,EAAE;YACJ,WAAW,EAAE,4DAA4D;YACzE,WAAW,EAAE,IAAI;YACjB,GAAG,EAAE,gGAAgG;SACtG;QACD,IAAI,EAAE,sBAAc,CAAC,IAAI;QACzB,QAAQ,EAAE,gBAAQ,CAAC,KAAK;QACxB,MAAM,EAAE,EAAE;QACV,OAAO,EAAE,EAAE;QACX,UAAU,EAAE,IAAI;KACjB;IAED,MAAM,CAAC,OAAO;QACZ,IAAI,OAAO,CAAC,YAAY;YAAE,OAAO,EAAE,CAAC,CAAC,qDAAqD;QAE1F,MAAM,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC;QAC/B,IAAI,CAAC,IAAA,eAAO,EAAC,KAAK,CAAC;YAAE,OAAO,EAAE,CAAC;QAE/B,OAAO;YACL,KAAK,CAAC,eAAe,CAAC,IAAI;gBACxB,IAAI,IAAI,CAAC,GAAG,YAAY,wBAAgB,EAAE,CAAC;oBACzC,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC;wBACpC,OAAO,CAAC,MAAM,CAAC;4BACb,OAAO,EAAE,sBAAsB,CAAC,KAAK,CAAC,KAAK,CAAC;4BAC5C,UAAU,EAAE,KAAK,CAAC,MAAM;4BACxB,QAAQ,EAAE,KAAK,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM;yBACtC,CAAC,CAAC;oBACL,CAAC;gBACH,CAAC;qBAAM,CAAC;oBACN,OAAO,CAAC,MAAM,CAAC;wBACb,OAAO,EAAE,iBAAiB,CAAC,KAAK,CAAC;wBACjC,UAAU,EAAE,CAAC;wBACb,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM;qBAC7B,CAAC,CAAC;gBACL,CAAC;YACH,CAAC;SACF,CAAC;IACJ,CAAC;CACF,CAAC;AAEF,SAAS,sBAAsB,CAAC,SAAyB;IACvD,QAAQ,SAAS,EAAE,CAAC;QAClB;YACE,OAAO,gBAAgB,CAAC;QAC1B;YACE,OAAO,uBAAuB,CAAC;QACjC;YACE,OAAO,wBAAwB,CAAC;QAClC;YACE,OAAO,mBAAmB,CAAC;QAC7B;YACE,OAAO,6CAA6C,CAAC;QACvD;YACE,OAAO,mBAAmB,CAAC;QAC7B;YACE,OAAO,+BAA+B,CAAC;QACzC;YACE,OAAO,iCAAiC,CAAC;QAC3C;YACE,OAAO,uBAAuB,CAAC;QACjC;YACE,OAAO,uBAAuB,CAAC;QACjC;YACE,OAAO,2BAA2B,CAAC;QACrC;YACE,OAAO,0BAA0B,CAAC;QACpC;YACE,OAAO,0BAA0B,CAAC;QACpC;YACE,OAAO,iBAAiB,CAAC;QAC3B;YACE,OAAO,0BAA0B,CAAC;QACpC;YACE,OAAO,mBAAmB,CAAC;QAC7B;YACE,OAAO,qCAAqC,CAAC;IACjD,CAAC;AACH,CAAC"}
|
|
@@ -66,7 +66,7 @@ function detectInvalidLoopArguments(node, tags = []) {
|
|
|
66
66
|
};
|
|
67
67
|
}
|
|
68
68
|
function isSupportedTagArgument(tags, tagName, key, positional) {
|
|
69
|
-
return (tags
|
|
69
|
+
return ((tags ?? [])
|
|
70
70
|
.find((tag) => tag.name === tagName)
|
|
71
71
|
?.parameters?.some((parameter) => parameter.name === key && parameter.positional === positional) || false);
|
|
72
72
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"InvalidLoopArguments.js","sourceRoot":"","sources":["../../../../src/checks/liquid-html-syntax-error/checks/InvalidLoopArguments.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"InvalidLoopArguments.js","sourceRoot":"","sources":["../../../../src/checks/liquid-html-syntax-error/checks/InvalidLoopArguments.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { LiquidTag } from '@platformos/liquid-html-parser';
|
|
2
|
+
import { Problem, SourceCodeType, TagEntry } from '../../..';
|
|
3
|
+
/**
|
|
4
|
+
* Detects known tags whose markup couldn't be parsed by the grammar.
|
|
5
|
+
*
|
|
6
|
+
* When the tolerant parser encounters a known tag name (e.g. "render") but can't parse
|
|
7
|
+
* the markup with the strict grammar rule, it falls back to the base case and stores
|
|
8
|
+
* the markup as a raw string. This function detects that situation.
|
|
9
|
+
*
|
|
10
|
+
* This check only applies to tags that DON'T have more specific sub-checks.
|
|
11
|
+
* Tags like assign, echo, if, for etc. have dedicated checks that provide
|
|
12
|
+
* better error messages and autofixes for their specific syntax patterns.
|
|
13
|
+
*
|
|
14
|
+
* Examples:
|
|
15
|
+
* {% graphql %} → name: 'graphql', markup: '' (string — invalid)
|
|
16
|
+
* {% render %} → name: 'render', markup: '' (string — invalid)
|
|
17
|
+
* {% function res 'path' %} → name: 'function', markup: "res 'path'" (string — invalid)
|
|
18
|
+
*/
|
|
19
|
+
export declare function detectInvalidTagSyntax(node: LiquidTag, tags?: TagEntry[]): Problem<SourceCodeType.LiquidHtml> | undefined;
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.detectInvalidTagSyntax = detectInvalidTagSyntax;
|
|
4
|
+
const liquid_html_parser_1 = require("@platformos/liquid-html-parser");
|
|
5
|
+
/**
|
|
6
|
+
* Tags that use no markup at all — they are valid as `{% else %}`, `{% break %}`, etc.
|
|
7
|
+
* When their markup is a string, it's always '' (empty), so they should not trigger this check.
|
|
8
|
+
*/
|
|
9
|
+
const TAGS_WITH_NO_EXPECTED_MARKUP = new Set(liquid_html_parser_1.TAGS_WITHOUT_MARKUP);
|
|
10
|
+
/**
|
|
11
|
+
* Tags that have dedicated sub-checks handling their string-markup cases with
|
|
12
|
+
* more specific error messages and autofixes. This check should NOT fire on these
|
|
13
|
+
* to avoid double-reporting or overriding their nuanced decisions.
|
|
14
|
+
*
|
|
15
|
+
* - assign → MultipleAssignValues, InvalidFilterName, InvalidPipeSyntax
|
|
16
|
+
* - echo → InvalidEchoValue, InvalidFilterName, InvalidPipeSyntax
|
|
17
|
+
* - if/elsif/unless → InvalidConditionalNode, InvalidConditionalNodeParenthesis
|
|
18
|
+
* - for/tablerow → InvalidLoopRange, InvalidLoopArguments
|
|
19
|
+
*/
|
|
20
|
+
const TAGS_WITH_DEDICATED_CHECKS = new Set([
|
|
21
|
+
liquid_html_parser_1.NamedTags.assign,
|
|
22
|
+
liquid_html_parser_1.NamedTags.echo,
|
|
23
|
+
liquid_html_parser_1.NamedTags.if,
|
|
24
|
+
liquid_html_parser_1.NamedTags.elsif,
|
|
25
|
+
liquid_html_parser_1.NamedTags.unless,
|
|
26
|
+
liquid_html_parser_1.NamedTags.for,
|
|
27
|
+
liquid_html_parser_1.NamedTags.tablerow,
|
|
28
|
+
liquid_html_parser_1.NamedTags.when,
|
|
29
|
+
]);
|
|
30
|
+
/**
|
|
31
|
+
* All tag names in the NamedTags enum — these have specific grammar rules for their markup.
|
|
32
|
+
* If a NamedTag's markup is a string (instead of a parsed object), it means the strict grammar
|
|
33
|
+
* rule failed and the tag fell through to the base case.
|
|
34
|
+
*/
|
|
35
|
+
const NAMED_TAGS = new Set(Object.values(liquid_html_parser_1.NamedTags));
|
|
36
|
+
/**
|
|
37
|
+
* Detects known tags whose markup couldn't be parsed by the grammar.
|
|
38
|
+
*
|
|
39
|
+
* When the tolerant parser encounters a known tag name (e.g. "render") but can't parse
|
|
40
|
+
* the markup with the strict grammar rule, it falls back to the base case and stores
|
|
41
|
+
* the markup as a raw string. This function detects that situation.
|
|
42
|
+
*
|
|
43
|
+
* This check only applies to tags that DON'T have more specific sub-checks.
|
|
44
|
+
* Tags like assign, echo, if, for etc. have dedicated checks that provide
|
|
45
|
+
* better error messages and autofixes for their specific syntax patterns.
|
|
46
|
+
*
|
|
47
|
+
* Examples:
|
|
48
|
+
* {% graphql %} → name: 'graphql', markup: '' (string — invalid)
|
|
49
|
+
* {% render %} → name: 'render', markup: '' (string — invalid)
|
|
50
|
+
* {% function res 'path' %} → name: 'function', markup: "res 'path'" (string — invalid)
|
|
51
|
+
*/
|
|
52
|
+
function detectInvalidTagSyntax(node, tags = []) {
|
|
53
|
+
const tagName = node.name;
|
|
54
|
+
// Only check tags known to the grammar with specific markup rules
|
|
55
|
+
if (!NAMED_TAGS.has(tagName)) {
|
|
56
|
+
return;
|
|
57
|
+
}
|
|
58
|
+
// Tags without expected markup (else, break, continue, etc.) always have string markup
|
|
59
|
+
if (TAGS_WITH_NO_EXPECTED_MARKUP.has(tagName)) {
|
|
60
|
+
return;
|
|
61
|
+
}
|
|
62
|
+
// Skip tags that have dedicated sub-checks with more specific error handling
|
|
63
|
+
if (TAGS_WITH_DEDICATED_CHECKS.has(tagName)) {
|
|
64
|
+
return;
|
|
65
|
+
}
|
|
66
|
+
// If markup is not a string, it was parsed successfully — no error
|
|
67
|
+
if (typeof node.markup !== 'string') {
|
|
68
|
+
return;
|
|
69
|
+
}
|
|
70
|
+
// Build a helpful hint from the docset if available
|
|
71
|
+
const tagEntry = tags.find((t) => t.name === tagName);
|
|
72
|
+
const syntaxHint = tagEntry?.syntax ? ` Expected syntax: ${tagEntry.syntax}` : '';
|
|
73
|
+
return {
|
|
74
|
+
message: `Invalid syntax for tag '${tagName}'${syntaxHint}`,
|
|
75
|
+
startIndex: node.position.start,
|
|
76
|
+
endIndex: node.position.end,
|
|
77
|
+
};
|
|
78
|
+
}
|
|
79
|
+
//# sourceMappingURL=InvalidTagSyntax.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"InvalidTagSyntax.js","sourceRoot":"","sources":["../../../../src/checks/liquid-html-syntax-error/checks/InvalidTagSyntax.ts"],"names":[],"mappings":";;AAqDA,wDAmCC;AAxFD,uEAA2F;AAG3F;;;GAGG;AACH,MAAM,4BAA4B,GAAG,IAAI,GAAG,CAAS,wCAAmB,CAAC,CAAC;AAE1E;;;;;;;;;GASG;AACH,MAAM,0BAA0B,GAAG,IAAI,GAAG,CAAS;IACjD,8BAAS,CAAC,MAAM;IAChB,8BAAS,CAAC,IAAI;IACd,8BAAS,CAAC,EAAE;IACZ,8BAAS,CAAC,KAAK;IACf,8BAAS,CAAC,MAAM;IAChB,8BAAS,CAAC,GAAG;IACb,8BAAS,CAAC,QAAQ;IAClB,8BAAS,CAAC,IAAI;CACf,CAAC,CAAC;AAEH;;;;GAIG;AACH,MAAM,UAAU,GAAG,IAAI,GAAG,CAAS,MAAM,CAAC,MAAM,CAAC,8BAAS,CAAC,CAAC,CAAC;AAE7D;;;;;;;;;;;;;;;GAeG;AACH,SAAgB,sBAAsB,CACpC,IAAe,EACf,OAAmB,EAAE;IAErB,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC;IAE1B,kEAAkE;IAClE,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC;QAC7B,OAAO;IACT,CAAC;IAED,uFAAuF;IACvF,IAAI,4BAA4B,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC;QAC9C,OAAO;IACT,CAAC;IAED,6EAA6E;IAC7E,IAAI,0BAA0B,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC;QAC5C,OAAO;IACT,CAAC;IAED,mEAAmE;IACnE,IAAI,OAAO,IAAI,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;QACpC,OAAO;IACT,CAAC;IAED,oDAAoD;IACpD,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,OAAO,CAAC,CAAC;IACtD,MAAM,UAAU,GAAG,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC,qBAAqB,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IAElF,OAAO;QACL,OAAO,EAAE,2BAA2B,OAAO,IAAI,UAAU,EAAE;QAC3D,UAAU,EAAE,IAAI,CAAC,QAAQ,CAAC,KAAK;QAC/B,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,GAAG;KAC5B,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.detectUnknownTag = detectUnknownTag;
|
|
4
|
+
const liquid_html_parser_1 = require("@platformos/liquid-html-parser");
|
|
5
|
+
/**
|
|
6
|
+
* All tag names known to the grammar (NamedTags enum + TAGS_WITHOUT_MARKUP + BLOCKS + RAW_TAGS).
|
|
7
|
+
* These are tags that the parser recognizes with specific grammar rules.
|
|
8
|
+
*/
|
|
9
|
+
const GRAMMAR_KNOWN_TAGS = new Set([
|
|
10
|
+
...Object.values(liquid_html_parser_1.NamedTags),
|
|
11
|
+
...liquid_html_parser_1.TAGS_WITHOUT_MARKUP,
|
|
12
|
+
...liquid_html_parser_1.BLOCKS,
|
|
13
|
+
...liquid_html_parser_1.RAW_TAGS,
|
|
14
|
+
'#', // inline comment: {% # this is a comment %}
|
|
15
|
+
]);
|
|
16
|
+
function detectUnknownTag(node, tags = []) {
|
|
17
|
+
const tagName = node.name;
|
|
18
|
+
// If the tag is known to the grammar, it's not unknown
|
|
19
|
+
if (GRAMMAR_KNOWN_TAGS.has(tagName)) {
|
|
20
|
+
return;
|
|
21
|
+
}
|
|
22
|
+
// If the tag is known to the docset, it's not unknown
|
|
23
|
+
if (tags.some((tag) => tag.name === tagName)) {
|
|
24
|
+
return;
|
|
25
|
+
}
|
|
26
|
+
return {
|
|
27
|
+
message: `Unknown tag '${tagName}'`,
|
|
28
|
+
startIndex: node.position.start,
|
|
29
|
+
endIndex: node.position.end,
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
//# sourceMappingURL=UnknownTag.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"UnknownTag.js","sourceRoot":"","sources":["../../../../src/checks/liquid-html-syntax-error/checks/UnknownTag.ts"],"names":[],"mappings":";;AAqBA,4CAqBC;AA1CD,uEAMwC;AAGxC;;;GAGG;AACH,MAAM,kBAAkB,GAAG,IAAI,GAAG,CAAS;IACzC,GAAG,MAAM,CAAC,MAAM,CAAC,8BAAS,CAAC;IAC3B,GAAG,wCAAmB;IACtB,GAAG,2BAAM;IACT,GAAG,6BAAQ;IACX,GAAG,EAAE,4CAA4C;CAClD,CAAC,CAAC;AAEH,SAAgB,gBAAgB,CAC9B,IAAe,EACf,OAAmB,EAAE;IAErB,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC;IAE1B,uDAAuD;IACvD,IAAI,kBAAkB,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC;QACpC,OAAO;IACT,CAAC;IAED,sDAAsD;IACtD,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,KAAK,OAAO,CAAC,EAAE,CAAC;QAC7C,OAAO;IACT,CAAC;IAED,OAAO;QACL,OAAO,EAAE,gBAAgB,OAAO,GAAG;QACnC,UAAU,EAAE,IAAI,CAAC,QAAQ,CAAC,KAAK;QAC/B,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,GAAG;KAC5B,CAAC;AACJ,CAAC"}
|
|
@@ -12,6 +12,8 @@ const InvalidLoopArguments_1 = require("./checks/InvalidLoopArguments");
|
|
|
12
12
|
const InvalidConditionalNodeParenthesis_1 = require("./checks/InvalidConditionalNodeParenthesis");
|
|
13
13
|
const InvalidFilterName_1 = require("./checks/InvalidFilterName");
|
|
14
14
|
const InvalidPipeSyntax_1 = require("./checks/InvalidPipeSyntax");
|
|
15
|
+
const UnknownTag_1 = require("./checks/UnknownTag");
|
|
16
|
+
const InvalidTagSyntax_1 = require("./checks/InvalidTagSyntax");
|
|
15
17
|
const utils_2 = require("../utils");
|
|
16
18
|
function isParsingErrorWithLocation(error) {
|
|
17
19
|
return 'name' in error && error.name === 'LiquidHTMLParsingError' && 'loc' in error;
|
|
@@ -37,8 +39,8 @@ exports.LiquidHTMLSyntaxError = {
|
|
|
37
39
|
},
|
|
38
40
|
create(context) {
|
|
39
41
|
const ast = context.file.ast;
|
|
40
|
-
const filtersPromise = context.
|
|
41
|
-
const tagsPromise = context.
|
|
42
|
+
const filtersPromise = context.platformosDocset?.filters();
|
|
43
|
+
const tagsPromise = context.platformosDocset?.tags();
|
|
42
44
|
if (!(0, utils_1.isError)(ast)) {
|
|
43
45
|
return {
|
|
44
46
|
async BooleanExpression(node, ancestors) {
|
|
@@ -53,11 +55,19 @@ exports.LiquidHTMLSyntaxError = {
|
|
|
53
55
|
async LiquidTag(node, ancestors) {
|
|
54
56
|
if ((0, utils_2.isWithinRawTagThatDoesNotParseItsContents)(ancestors))
|
|
55
57
|
return;
|
|
58
|
+
const tags = (await tagsPromise) ?? [];
|
|
59
|
+
// Unknown tags are fatal — no point in further syntax checks.
|
|
60
|
+
const unknownTagProblem = (0, UnknownTag_1.detectUnknownTag)(node, tags);
|
|
61
|
+
if (unknownTagProblem) {
|
|
62
|
+
context.report(unknownTagProblem);
|
|
63
|
+
return;
|
|
64
|
+
}
|
|
65
|
+
// Run specific sub-checks first — they provide better error messages and autofixes.
|
|
56
66
|
const problems = [
|
|
57
67
|
(0, MultipleAssignValues_1.detectMultipleAssignValues)(node),
|
|
58
68
|
(0, InvalidEchoValue_1.detectInvalidEchoValue)(node),
|
|
59
69
|
(0, InvalidLoopRange_1.detectInvalidLoopRange)(node),
|
|
60
|
-
(0, InvalidLoopArguments_1.detectInvalidLoopArguments)(node,
|
|
70
|
+
(0, InvalidLoopArguments_1.detectInvalidLoopArguments)(node, tags),
|
|
61
71
|
].filter(Boolean);
|
|
62
72
|
// Fixers for `detectConditionalNodeUnsupportedParenthesis` and `detectInvalidConditionalNode` consume
|
|
63
73
|
// the whole node markup, so we MUST not run both.
|
|
@@ -65,8 +75,16 @@ exports.LiquidHTMLSyntaxError = {
|
|
|
65
75
|
if (conditionalNodeProblem) {
|
|
66
76
|
problems.push(conditionalNodeProblem);
|
|
67
77
|
}
|
|
78
|
+
// InvalidTagSyntax is a catch-all for known tags with unparseable markup.
|
|
79
|
+
// Only fire it if no more specific sub-check already reported on this tag.
|
|
80
|
+
if (problems.length === 0) {
|
|
81
|
+
const invalidSyntaxProblem = (0, InvalidTagSyntax_1.detectInvalidTagSyntax)(node, tags);
|
|
82
|
+
if (invalidSyntaxProblem) {
|
|
83
|
+
problems.push(invalidSyntaxProblem);
|
|
84
|
+
}
|
|
85
|
+
}
|
|
68
86
|
problems.forEach(context.report);
|
|
69
|
-
const filterProblems = await (0, InvalidFilterName_1.detectInvalidFilterName)(node, await filtersPromise);
|
|
87
|
+
const filterProblems = await (0, InvalidFilterName_1.detectInvalidFilterName)(node, (await filtersPromise) ?? []);
|
|
70
88
|
if (filterProblems.length > 0) {
|
|
71
89
|
filterProblems.forEach((filterProblem) => context.report(filterProblem));
|
|
72
90
|
}
|
|
@@ -87,7 +105,7 @@ exports.LiquidHTMLSyntaxError = {
|
|
|
87
105
|
async LiquidVariableOutput(node, ancestors) {
|
|
88
106
|
if ((0, utils_2.isWithinRawTagThatDoesNotParseItsContents)(ancestors))
|
|
89
107
|
return;
|
|
90
|
-
const filterProblems = await (0, InvalidFilterName_1.detectInvalidFilterName)(node, await filtersPromise);
|
|
108
|
+
const filterProblems = await (0, InvalidFilterName_1.detectInvalidFilterName)(node, (await filtersPromise) ?? []);
|
|
91
109
|
if (filterProblems.length > 0) {
|
|
92
110
|
filterProblems.forEach((problem) => context.report(problem));
|
|
93
111
|
}
|
|
@@ -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,kFAAqF;AACrF,gEAAmE;AACnE,4EAA+E;AAC/E,gEAAmE;AACnE,wEAA2E;AAC3E,kGAAyG;AACzG,kEAAqE;AACrE,kEAAqE;AACrE,oCAAqE;AAOrE,SAAS,0BAA0B,CACjC,KAAY;IAEZ,OAAO,MAAM,IAAI,KAAK,IAAI,KAAK,CAAC,IAAI,KAAK,wBAAwB,IAAI,KAAK,IAAI,KAAK,CAAC;AACtF,CAAC;AAED,SAAS,iBAAiB,CAAC,OAAe,EAAE,SAAiB;IAC3D,OAAO,OAAO;SACX,OAAO,CAAC,uBAAuB,EAAE,eAAe,CAAC;SACjD,OAAO,CAAC,4BAA4B,EAAE,SAAS,SAAS,GAAG,CAAC,CAAC;AAClE,CAAC;AAEY,QAAA,qBAAqB,GAA0B;IAC1D,IAAI,EAAE;QACJ,IAAI,EAAE,uBAAuB;QAC7B,OAAO,EAAE,CAAC,aAAa,EAAE,kBAAkB,CAAC;QAC5C,IAAI,EAAE,kCAAkC;QACxC,IAAI,EAAE;YACJ,WAAW,EAAE,oEAAoE;YACjF,WAAW,EAAE,IAAI;SAClB;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,MAAM,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC;QAC7B,MAAM,cAAc,GAAG,OAAO,CAAC,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/checks/liquid-html-syntax-error/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import {
|
|
2
|
-
export declare const MatchingTranslations:
|
|
1
|
+
import { YAMLCheckDefinition } from '../../types';
|
|
2
|
+
export declare const MatchingTranslations: YAMLCheckDefinition;
|
|
@@ -3,6 +3,36 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.MatchingTranslations = void 0;
|
|
4
4
|
const types_1 = require("../../types");
|
|
5
5
|
const PLURALIZATION_KEYS = new Set(['zero', 'one', 'two', 'few', 'many', 'other']);
|
|
6
|
+
/**
|
|
7
|
+
* Returns the locale declared in a YAML translation file by reading its first
|
|
8
|
+
* top-level key (e.g. `en`, `pt-BR`, `fr`). platformOS determines a file's
|
|
9
|
+
* locale from content, not from its path.
|
|
10
|
+
*/
|
|
11
|
+
function getLocaleFromAst(ast) {
|
|
12
|
+
if (ast instanceof Error)
|
|
13
|
+
return null;
|
|
14
|
+
if (ast.type !== 'Object')
|
|
15
|
+
return null;
|
|
16
|
+
const firstProp = ast.children[0];
|
|
17
|
+
if (!firstProp || firstProp.type !== 'Property')
|
|
18
|
+
return null;
|
|
19
|
+
return firstProp.key.value || null;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Extracts the translations base directory from a relative file path.
|
|
23
|
+
*
|
|
24
|
+
* e.g. `app/translations/pt-BR.yml` → `app/translations`
|
|
25
|
+
* `app/translations/pt-BR/validation.yml` → `app/translations`
|
|
26
|
+
* `modules/x/public/translations/en.yml` → `modules/x/public/translations`
|
|
27
|
+
*
|
|
28
|
+
* Returns `null` if the path doesn't contain a `/translations/` segment.
|
|
29
|
+
*/
|
|
30
|
+
function getTranslationRelativeBase(relativePath) {
|
|
31
|
+
const idx = relativePath.lastIndexOf('/translations/');
|
|
32
|
+
if (idx === -1)
|
|
33
|
+
return null;
|
|
34
|
+
return relativePath.substring(0, idx + '/translations'.length);
|
|
35
|
+
}
|
|
6
36
|
exports.MatchingTranslations = {
|
|
7
37
|
meta: {
|
|
8
38
|
code: 'MatchingTranslations',
|
|
@@ -10,135 +40,129 @@ exports.MatchingTranslations = {
|
|
|
10
40
|
docs: {
|
|
11
41
|
description: 'TODO',
|
|
12
42
|
recommended: true,
|
|
13
|
-
url: 'https://
|
|
43
|
+
url: 'https://documentation.platformos.com/developer-guide/platformos-check/checks/matching-translations',
|
|
14
44
|
},
|
|
15
|
-
type: types_1.SourceCodeType.
|
|
45
|
+
type: types_1.SourceCodeType.YAML,
|
|
16
46
|
severity: types_1.Severity.ERROR,
|
|
17
47
|
schema: {},
|
|
18
48
|
targets: [],
|
|
19
49
|
},
|
|
20
50
|
create(context) {
|
|
21
|
-
// State
|
|
22
|
-
const
|
|
23
|
-
const
|
|
51
|
+
// ── State ──────────────────────────────────────────────────────────────
|
|
52
|
+
const enTranslations = new Set(); // keys present in the en scope
|
|
53
|
+
const missingFromLocale = new Set(); // en keys absent from the entire locale scope
|
|
24
54
|
const nodesByPath = new Map();
|
|
25
55
|
const file = context.file;
|
|
26
56
|
const fileUri = file.uri;
|
|
27
57
|
const relativePath = context.toRelativePath(fileUri);
|
|
28
58
|
const ast = file.ast;
|
|
29
|
-
|
|
30
|
-
const
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
59
|
+
// ── Guard: only lint translation files ────────────────────────────────
|
|
60
|
+
const isTranslationFile = relativePath.includes('/translations/');
|
|
61
|
+
// The locale is always the first top-level key in the YAML file (e.g. `en`,
|
|
62
|
+
// `pt-BR`). platformOS resolves locale from content, not from the file path.
|
|
63
|
+
const locale = getLocaleFromAst(ast);
|
|
64
|
+
if (!isTranslationFile || !locale || locale === 'en' || ast instanceof Error) {
|
|
35
65
|
return {};
|
|
36
66
|
}
|
|
37
|
-
//
|
|
38
|
-
const
|
|
67
|
+
// ── Derive scope (translation base URI) ──────────────────────────────
|
|
68
|
+
const relativeBase = getTranslationRelativeBase(relativePath);
|
|
69
|
+
if (!relativeBase)
|
|
70
|
+
return {};
|
|
71
|
+
const translationBaseUri = context.toUri(relativeBase);
|
|
72
|
+
// A "primary" locale file is the top-level `{locale}.yml` (not inside a
|
|
73
|
+
// locale sub-directory like `pt-BR/`). Only the primary file reports
|
|
74
|
+
// missing translations to avoid duplicate offenses across split files.
|
|
75
|
+
const pathAfterBase = relativePath.substring(relativeBase.length + 1);
|
|
76
|
+
const isPrimaryLocaleFile = !pathAfterBase.includes('/');
|
|
77
|
+
// ── Helpers ───────────────────────────────────────────────────────────
|
|
39
78
|
const isTerminalNode = ({ type }) => type === 'Literal';
|
|
40
79
|
const isPluralizationNode = (node) => PLURALIZATION_KEYS.has(node.key.value);
|
|
41
|
-
const isShopifyPath = (path) => path.startsWith('shopify.');
|
|
42
|
-
const hasDefaultTranslation = (translationPath) => defaultTranslations.has(translationPath) ?? false;
|
|
43
80
|
const isPluralizationPath = (path) => [...PLURALIZATION_KEYS].some((key) => path.endsWith(key));
|
|
44
|
-
const
|
|
45
|
-
const
|
|
46
|
-
|
|
47
|
-
if (
|
|
48
|
-
return acc.concat(key);
|
|
49
|
-
}
|
|
50
|
-
const childJson = json[key];
|
|
51
|
-
const childPaths = jsonPaths(childJson);
|
|
52
|
-
return acc.concat(childPaths.map((path) => `${key}.${path}`));
|
|
53
|
-
}, []);
|
|
54
|
-
};
|
|
55
|
-
const objectPath = (nodes) => {
|
|
56
|
-
return nodes
|
|
57
|
-
.filter((node) => node.type === 'Property')
|
|
58
|
-
.reduce((acc, val) => acc.concat(val.key.value), [])
|
|
59
|
-
.join('.');
|
|
60
|
-
};
|
|
61
|
-
const countCommonParts = (arrayA, arrayB) => {
|
|
62
|
-
const minLength = Math.min(arrayA.length, arrayB.length);
|
|
63
|
-
for (let i = 0; i < minLength; i++) {
|
|
64
|
-
if (arrayA[i] !== arrayB[i]) {
|
|
81
|
+
const countCommonParts = (a, b) => {
|
|
82
|
+
const min = Math.min(a.length, b.length);
|
|
83
|
+
for (let i = 0; i < min; i++)
|
|
84
|
+
if (a[i] !== b[i])
|
|
65
85
|
return i;
|
|
66
|
-
|
|
67
|
-
}
|
|
68
|
-
return minLength;
|
|
86
|
+
return min;
|
|
69
87
|
};
|
|
70
|
-
const closestTranslationKey = (
|
|
71
|
-
const
|
|
72
|
-
let
|
|
73
|
-
let
|
|
88
|
+
const closestTranslationKey = (key) => {
|
|
89
|
+
const keyParts = key.split('.');
|
|
90
|
+
let closest = '';
|
|
91
|
+
let max = 0;
|
|
74
92
|
for (const path of nodesByPath.keys()) {
|
|
75
|
-
const
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
closestMatch = path;
|
|
93
|
+
const common = countCommonParts(path.split('.'), keyParts);
|
|
94
|
+
if (common > max) {
|
|
95
|
+
max = common;
|
|
96
|
+
closest = path;
|
|
80
97
|
}
|
|
81
98
|
}
|
|
82
|
-
return nodesByPath.get(
|
|
99
|
+
return nodesByPath.get(closest) ?? ast;
|
|
100
|
+
};
|
|
101
|
+
// Strip the locale prefix (first Property in the ancestors chain).
|
|
102
|
+
// YAML files wrap content under a locale key: { en: { hello: 'Hello' } }
|
|
103
|
+
// We want paths like 'hello', not 'en.hello'.
|
|
104
|
+
const objectPath = (nodes) => {
|
|
105
|
+
const props = nodes.filter((n) => n.type === 'Property');
|
|
106
|
+
if (props.length <= 1)
|
|
107
|
+
return '';
|
|
108
|
+
return props
|
|
109
|
+
.slice(1)
|
|
110
|
+
.map((p) => p.key.value)
|
|
111
|
+
.join('.');
|
|
83
112
|
};
|
|
113
|
+
const jsonPaths = (json) => Object.keys(json).reduce((acc, key) => {
|
|
114
|
+
if (typeof json[key] !== 'object')
|
|
115
|
+
return acc.concat(key);
|
|
116
|
+
return acc.concat(jsonPaths(json[key]).map((p) => `${key}.${p}`));
|
|
117
|
+
}, []);
|
|
84
118
|
return {
|
|
85
119
|
async onCodePathStart() {
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
//
|
|
92
|
-
//
|
|
93
|
-
|
|
120
|
+
// Aggregate ALL en translations in this scope (en.yml + en/*.yml)
|
|
121
|
+
const en = await context.getTranslationsForBase(translationBaseUri, 'en');
|
|
122
|
+
jsonPaths(en).forEach(Set.prototype.add, enTranslations);
|
|
123
|
+
if (!isPrimaryLocaleFile)
|
|
124
|
+
return;
|
|
125
|
+
// For the primary locale file: pre-compute which en keys are absent
|
|
126
|
+
// from the entire locale scope (locale.yml + locale/*.yml).
|
|
127
|
+
const localeAgg = await context.getTranslationsForBase(translationBaseUri, locale);
|
|
128
|
+
const localeKeys = new Set(jsonPaths(localeAgg));
|
|
129
|
+
for (const key of enTranslations) {
|
|
130
|
+
if (!localeKeys.has(key))
|
|
131
|
+
missingFromLocale.add(key);
|
|
132
|
+
}
|
|
94
133
|
},
|
|
95
134
|
async Property(node, ancestors) {
|
|
96
135
|
const path = objectPath(ancestors.concat(node));
|
|
97
|
-
|
|
98
|
-
if (!hasDefaultTranslations())
|
|
136
|
+
if (!path)
|
|
99
137
|
return;
|
|
138
|
+
nodesByPath.set(path, node);
|
|
100
139
|
if (isPluralizationNode(node))
|
|
101
140
|
return;
|
|
102
141
|
if (!isTerminalNode(node.value))
|
|
103
142
|
return;
|
|
104
|
-
if (
|
|
105
|
-
return;
|
|
106
|
-
if (
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
143
|
+
if (!enTranslations.size)
|
|
144
|
+
return; // no en reference — skip
|
|
145
|
+
if (!enTranslations.has(path)) {
|
|
146
|
+
context.report({
|
|
147
|
+
message: `A translation for '${path}' does not exist in the en locale`,
|
|
148
|
+
startIndex: node.loc.start.offset,
|
|
149
|
+
endIndex: node.loc.end.offset,
|
|
150
|
+
});
|
|
111
151
|
}
|
|
112
|
-
context.report({
|
|
113
|
-
message: `A default translation for '${path}' does not exist`,
|
|
114
|
-
startIndex: node.loc.start.offset,
|
|
115
|
-
endIndex: node.loc.end.offset,
|
|
116
|
-
suggest: [
|
|
117
|
-
{
|
|
118
|
-
message: 'Delete unneeded translation key',
|
|
119
|
-
fix(corrector) {
|
|
120
|
-
corrector.remove(path);
|
|
121
|
-
},
|
|
122
|
-
},
|
|
123
|
-
],
|
|
124
|
-
});
|
|
125
152
|
},
|
|
126
153
|
async onCodePathEnd() {
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
154
|
+
if (!isPrimaryLocaleFile)
|
|
155
|
+
return;
|
|
156
|
+
for (const key of missingFromLocale) {
|
|
157
|
+
if (isPluralizationPath(key))
|
|
158
|
+
continue;
|
|
159
|
+
const closest = closestTranslationKey(key);
|
|
133
160
|
context.report({
|
|
134
|
-
message: `The translation for '${
|
|
161
|
+
message: `The translation for '${key}' is missing`,
|
|
135
162
|
startIndex: closest.loc.start.offset,
|
|
136
163
|
endIndex: closest.loc.end.offset,
|
|
137
|
-
fix(corrector) {
|
|
138
|
-
corrector.add(path, 'TODO');
|
|
139
|
-
},
|
|
140
164
|
});
|
|
141
|
-
}
|
|
165
|
+
}
|
|
142
166
|
},
|
|
143
167
|
};
|
|
144
168
|
},
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/checks/matching-translations/index.ts"],"names":[],"mappings":";;;AAAA,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/checks/matching-translations/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -8,7 +8,6 @@ const types_1 = require("../../types");
|
|
|
8
8
|
const js_yaml_1 = __importDefault(require("js-yaml"));
|
|
9
9
|
const platformos_common_1 = require("@platformos/platformos-common");
|
|
10
10
|
const vscode_uri_1 = require("vscode-uri");
|
|
11
|
-
const arguments_1 = require("../../liquid-doc/arguments");
|
|
12
11
|
const path_1 = require("../../path");
|
|
13
12
|
function extractMetadataParams(source) {
|
|
14
13
|
source = source.trim();
|
|
@@ -49,9 +48,13 @@ exports.MetadataParamsCheck = {
|
|
|
49
48
|
}
|
|
50
49
|
let params = extractMetadataParams(await context.fs.readFile(locatedFile));
|
|
51
50
|
if (!params) {
|
|
52
|
-
|
|
53
|
-
if (!liquidDocParameters)
|
|
51
|
+
if (!context.getDocDefinition)
|
|
54
52
|
return;
|
|
53
|
+
const relativePath = (0, path_1.relative)(locatedFile, context.config.rootUri);
|
|
54
|
+
const docDef = await context.getDocDefinition(relativePath);
|
|
55
|
+
if (!docDef?.liquidDoc?.parameters)
|
|
56
|
+
return;
|
|
57
|
+
const liquidDocParameters = new Map(docDef.liquidDoc.parameters.map((p) => [p.name, p]));
|
|
55
58
|
params = Array.from(liquidDocParameters.values())
|
|
56
59
|
.filter((p) => p.required)
|
|
57
60
|
.map((p) => p.name);
|