@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
|
@@ -1,57 +0,0 @@
|
|
|
1
|
-
import { TextNode } from '@platformos/liquid-html-parser';
|
|
2
|
-
import { LiquidCheckDefinition, Severity, SourceCodeType } from '../../types';
|
|
3
|
-
import { isBlock } from '../../to-schema';
|
|
4
|
-
import {
|
|
5
|
-
REQUIRED_CONTENT_FOR_ARGUMENTS,
|
|
6
|
-
RESERVED_CONTENT_FOR_ARGUMENTS,
|
|
7
|
-
} from '../../tags/content-for';
|
|
8
|
-
|
|
9
|
-
export const ReservedDocParamNames: LiquidCheckDefinition = {
|
|
10
|
-
meta: {
|
|
11
|
-
code: 'ReservedDocParamNames',
|
|
12
|
-
name: 'Valid doc parameter names',
|
|
13
|
-
docs: {
|
|
14
|
-
description:
|
|
15
|
-
'This check exists to ensure any parameter names defined in LiquidDoc do not collide with reserved words.',
|
|
16
|
-
recommended: true,
|
|
17
|
-
url: 'https://shopify.dev/docs/storefronts/themes/tools/theme-check/checks/reserved-doc-param-names',
|
|
18
|
-
},
|
|
19
|
-
type: SourceCodeType.LiquidHtml,
|
|
20
|
-
severity: Severity.ERROR,
|
|
21
|
-
schema: {},
|
|
22
|
-
targets: [],
|
|
23
|
-
},
|
|
24
|
-
|
|
25
|
-
create(context) {
|
|
26
|
-
if (!isBlock(context.file.uri)) {
|
|
27
|
-
return {};
|
|
28
|
-
}
|
|
29
|
-
|
|
30
|
-
const defaultParameterNames = [
|
|
31
|
-
...REQUIRED_CONTENT_FOR_ARGUMENTS,
|
|
32
|
-
...RESERVED_CONTENT_FOR_ARGUMENTS,
|
|
33
|
-
];
|
|
34
|
-
|
|
35
|
-
return {
|
|
36
|
-
async LiquidDocParamNode(node) {
|
|
37
|
-
const paramName = node.paramName.value;
|
|
38
|
-
|
|
39
|
-
if (defaultParameterNames.includes(paramName)) {
|
|
40
|
-
reportWarning(
|
|
41
|
-
context,
|
|
42
|
-
`The parameter name is not supported because it's a reserved argument for 'content_for' tags.`,
|
|
43
|
-
node.paramName,
|
|
44
|
-
);
|
|
45
|
-
}
|
|
46
|
-
},
|
|
47
|
-
};
|
|
48
|
-
},
|
|
49
|
-
};
|
|
50
|
-
|
|
51
|
-
function reportWarning(context: any, message: string, node: TextNode) {
|
|
52
|
-
context.report({
|
|
53
|
-
message,
|
|
54
|
-
startIndex: node.position.start,
|
|
55
|
-
endIndex: node.position.end,
|
|
56
|
-
});
|
|
57
|
-
}
|
|
@@ -1,344 +0,0 @@
|
|
|
1
|
-
import { expect, describe, it } from 'vitest';
|
|
2
|
-
import { highlightedOffenses, runLiquidCheck, check } from '../../test';
|
|
3
|
-
import { SchemaPresetsBlockOrder } from './index';
|
|
4
|
-
|
|
5
|
-
const DEFAULT_FILE_NAME = 'sections/file.liquid';
|
|
6
|
-
|
|
7
|
-
describe('Module: SchemaPresetsBlockOrder', () => {
|
|
8
|
-
it('reports no warning when the preset blocks are in the block_order', async () => {
|
|
9
|
-
const sourceCode = `
|
|
10
|
-
{% schema %}
|
|
11
|
-
{
|
|
12
|
-
"presets": [
|
|
13
|
-
{
|
|
14
|
-
"name": "Preset 1",
|
|
15
|
-
"blocks": {
|
|
16
|
-
"block-1": {
|
|
17
|
-
"type": "text"
|
|
18
|
-
},
|
|
19
|
-
"block-2": {
|
|
20
|
-
"type": "icon"
|
|
21
|
-
}
|
|
22
|
-
},
|
|
23
|
-
"block_order": ["block-1", "block-2"]
|
|
24
|
-
}
|
|
25
|
-
]
|
|
26
|
-
}
|
|
27
|
-
{% endschema %}`;
|
|
28
|
-
|
|
29
|
-
const offenses = await runLiquidCheck(SchemaPresetsBlockOrder, sourceCode, DEFAULT_FILE_NAME);
|
|
30
|
-
expect(offenses).toHaveLength(0);
|
|
31
|
-
});
|
|
32
|
-
|
|
33
|
-
it('reports a warning when not all preset blocks are in the block_order', async () => {
|
|
34
|
-
const sourceCode = `
|
|
35
|
-
{% schema %}
|
|
36
|
-
{
|
|
37
|
-
"name": "Test section",
|
|
38
|
-
"presets": [
|
|
39
|
-
{
|
|
40
|
-
"name": "Preset 1",
|
|
41
|
-
"blocks": {
|
|
42
|
-
"block-1": {
|
|
43
|
-
"type": "text"
|
|
44
|
-
},
|
|
45
|
-
"block-2": {
|
|
46
|
-
"type": "icon"
|
|
47
|
-
}
|
|
48
|
-
},
|
|
49
|
-
"block_order": ["block-1"]
|
|
50
|
-
}
|
|
51
|
-
]
|
|
52
|
-
}
|
|
53
|
-
{% endschema %}`;
|
|
54
|
-
|
|
55
|
-
const offenses = await runLiquidCheck(SchemaPresetsBlockOrder, sourceCode, DEFAULT_FILE_NAME);
|
|
56
|
-
expect(offenses).toHaveLength(1);
|
|
57
|
-
expect(offenses[0].message).toEqual("block 'block-2' is missing from the block_order");
|
|
58
|
-
|
|
59
|
-
const highlights = highlightedOffenses({ [DEFAULT_FILE_NAME]: sourceCode }, offenses);
|
|
60
|
-
expect(highlights).toHaveLength(1);
|
|
61
|
-
expect(highlights[0]).toBe('["block-1"]');
|
|
62
|
-
});
|
|
63
|
-
|
|
64
|
-
it('reports no warning when the preset blocks has static blocks that are not in the block_order', async () => {
|
|
65
|
-
const sourceCode = `
|
|
66
|
-
{% schema %}
|
|
67
|
-
{
|
|
68
|
-
"presets": [
|
|
69
|
-
{
|
|
70
|
-
"name": "Preset 1",
|
|
71
|
-
"blocks": {
|
|
72
|
-
"block-1": {
|
|
73
|
-
"type": "text"
|
|
74
|
-
},
|
|
75
|
-
"block-2": {
|
|
76
|
-
"type": "icon",
|
|
77
|
-
"static": true
|
|
78
|
-
}
|
|
79
|
-
},
|
|
80
|
-
"block_order": ["block-1"]
|
|
81
|
-
}
|
|
82
|
-
]
|
|
83
|
-
}
|
|
84
|
-
{% endschema %}`;
|
|
85
|
-
|
|
86
|
-
const offenses = await runLiquidCheck(SchemaPresetsBlockOrder, sourceCode, DEFAULT_FILE_NAME);
|
|
87
|
-
expect(offenses).toHaveLength(0);
|
|
88
|
-
});
|
|
89
|
-
|
|
90
|
-
it('reports a warning when preset blocks has static blocks that are in the block_order', async () => {
|
|
91
|
-
const sourceCode = `
|
|
92
|
-
{% schema %}
|
|
93
|
-
{
|
|
94
|
-
"presets": [
|
|
95
|
-
{
|
|
96
|
-
"name": "Preset 1",
|
|
97
|
-
"blocks": {
|
|
98
|
-
"block-1": {
|
|
99
|
-
"type": "text"
|
|
100
|
-
},
|
|
101
|
-
"block-2": {
|
|
102
|
-
"type": "icon",
|
|
103
|
-
"static": true
|
|
104
|
-
}
|
|
105
|
-
},
|
|
106
|
-
"block_order": ["block-1", "block-2"]
|
|
107
|
-
}
|
|
108
|
-
]
|
|
109
|
-
}
|
|
110
|
-
{% endschema %}`;
|
|
111
|
-
|
|
112
|
-
const offenses = await runLiquidCheck(SchemaPresetsBlockOrder, sourceCode, DEFAULT_FILE_NAME);
|
|
113
|
-
expect(offenses).toHaveLength(1);
|
|
114
|
-
expect(offenses[0].message).toEqual("static block 'block-2' cannot be in the block_order");
|
|
115
|
-
|
|
116
|
-
const highlights = highlightedOffenses({ [DEFAULT_FILE_NAME]: sourceCode }, offenses);
|
|
117
|
-
expect(highlights).toHaveLength(1);
|
|
118
|
-
expect(highlights[0]).toBe('["block-1", "block-2"]');
|
|
119
|
-
});
|
|
120
|
-
|
|
121
|
-
it('reports no warning when the nested preset blocks are in the block_order', async () => {
|
|
122
|
-
const sourceCode = `
|
|
123
|
-
{% schema %}
|
|
124
|
-
{
|
|
125
|
-
"presets": [
|
|
126
|
-
{
|
|
127
|
-
"name": "Preset 1",
|
|
128
|
-
"blocks": {
|
|
129
|
-
"block-1": {
|
|
130
|
-
"type": "text",
|
|
131
|
-
"blocks": {
|
|
132
|
-
"nested-1": {
|
|
133
|
-
"type": "nested"
|
|
134
|
-
},
|
|
135
|
-
"nested-2": {
|
|
136
|
-
"type": "nested"
|
|
137
|
-
}
|
|
138
|
-
},
|
|
139
|
-
"block_order": ["nested-1", "nested-2"]
|
|
140
|
-
},
|
|
141
|
-
"block-2": {
|
|
142
|
-
"type": "icon"
|
|
143
|
-
}
|
|
144
|
-
},
|
|
145
|
-
"block_order": ["block-1", "block-2"]
|
|
146
|
-
}
|
|
147
|
-
]
|
|
148
|
-
}
|
|
149
|
-
{% endschema %}`;
|
|
150
|
-
|
|
151
|
-
const offenses = await runLiquidCheck(SchemaPresetsBlockOrder, sourceCode, DEFAULT_FILE_NAME);
|
|
152
|
-
expect(offenses).toHaveLength(0);
|
|
153
|
-
});
|
|
154
|
-
|
|
155
|
-
it('reports a warning when the nested preset blocks are not in the block_order', async () => {
|
|
156
|
-
const sourceCode = `
|
|
157
|
-
{% schema %}
|
|
158
|
-
{
|
|
159
|
-
"presets": [
|
|
160
|
-
{
|
|
161
|
-
"name": "Preset 1",
|
|
162
|
-
"blocks": {
|
|
163
|
-
"block-1": {
|
|
164
|
-
"type": "text",
|
|
165
|
-
"blocks": {
|
|
166
|
-
"nested-1": {
|
|
167
|
-
"type": "nested"
|
|
168
|
-
},
|
|
169
|
-
"nested-2": {
|
|
170
|
-
"type": "nested"
|
|
171
|
-
}
|
|
172
|
-
},
|
|
173
|
-
"block_order": ["nested-1"]
|
|
174
|
-
},
|
|
175
|
-
"block-2": {
|
|
176
|
-
"type": "icon"
|
|
177
|
-
}
|
|
178
|
-
},
|
|
179
|
-
"block_order": ["block-1", "block-2"]
|
|
180
|
-
}
|
|
181
|
-
]
|
|
182
|
-
}
|
|
183
|
-
{% endschema %}`;
|
|
184
|
-
|
|
185
|
-
const offenses = await runLiquidCheck(SchemaPresetsBlockOrder, sourceCode, DEFAULT_FILE_NAME);
|
|
186
|
-
expect(offenses).toHaveLength(1);
|
|
187
|
-
expect(offenses[0].message).toEqual("block 'nested-2' is missing from the block_order");
|
|
188
|
-
|
|
189
|
-
const highlights = highlightedOffenses({ [DEFAULT_FILE_NAME]: sourceCode }, offenses);
|
|
190
|
-
expect(highlights).toHaveLength(1);
|
|
191
|
-
expect(highlights[0]).toBe('["nested-1"]');
|
|
192
|
-
});
|
|
193
|
-
|
|
194
|
-
it('reports no warning when the nested preset blocks has static blocks that are not in the block_order', async () => {
|
|
195
|
-
const sourceCode = `
|
|
196
|
-
{% schema %}
|
|
197
|
-
{
|
|
198
|
-
"presets": [
|
|
199
|
-
{
|
|
200
|
-
"name": "Preset 1",
|
|
201
|
-
"blocks": {
|
|
202
|
-
"block-1": {
|
|
203
|
-
"type": "text",
|
|
204
|
-
"blocks": {
|
|
205
|
-
"nested-1": {
|
|
206
|
-
"type": "nested",
|
|
207
|
-
"static": true
|
|
208
|
-
},
|
|
209
|
-
"nested-2": {
|
|
210
|
-
"type": "nested"
|
|
211
|
-
}
|
|
212
|
-
},
|
|
213
|
-
"block_order": ["nested-2"]
|
|
214
|
-
},
|
|
215
|
-
"block-2": {
|
|
216
|
-
"type": "icon"
|
|
217
|
-
}
|
|
218
|
-
},
|
|
219
|
-
"block_order": ["block-1", "block-2"]
|
|
220
|
-
}
|
|
221
|
-
]
|
|
222
|
-
}
|
|
223
|
-
{% endschema %}`;
|
|
224
|
-
|
|
225
|
-
const offenses = await runLiquidCheck(SchemaPresetsBlockOrder, sourceCode, DEFAULT_FILE_NAME);
|
|
226
|
-
expect(offenses).toHaveLength(0);
|
|
227
|
-
});
|
|
228
|
-
|
|
229
|
-
it('reports a warning when the nested preset blocks has static blocks that are in the block_order', async () => {
|
|
230
|
-
const sourceCode = `
|
|
231
|
-
{% schema %}
|
|
232
|
-
{
|
|
233
|
-
"presets": [
|
|
234
|
-
{
|
|
235
|
-
"name": "Preset 1",
|
|
236
|
-
"blocks": {
|
|
237
|
-
"block-1": {
|
|
238
|
-
"type": "text",
|
|
239
|
-
"blocks": {
|
|
240
|
-
"nested-1": {
|
|
241
|
-
"type": "nested",
|
|
242
|
-
"static": true
|
|
243
|
-
},
|
|
244
|
-
"nested-2": {
|
|
245
|
-
"type": "nested"
|
|
246
|
-
}
|
|
247
|
-
},
|
|
248
|
-
"block_order": ["nested-1", "nested-2"]
|
|
249
|
-
},
|
|
250
|
-
"block-2": {
|
|
251
|
-
"type": "icon"
|
|
252
|
-
}
|
|
253
|
-
},
|
|
254
|
-
"block_order": ["block-1", "block-2"]
|
|
255
|
-
}
|
|
256
|
-
]
|
|
257
|
-
}
|
|
258
|
-
{% endschema %}`;
|
|
259
|
-
|
|
260
|
-
const offenses = await runLiquidCheck(SchemaPresetsBlockOrder, sourceCode, DEFAULT_FILE_NAME);
|
|
261
|
-
expect(offenses).toHaveLength(1);
|
|
262
|
-
expect(offenses[0].message).toEqual("static block 'nested-1' cannot be in the block_order");
|
|
263
|
-
|
|
264
|
-
const highlights = highlightedOffenses({ [DEFAULT_FILE_NAME]: sourceCode }, offenses);
|
|
265
|
-
expect(highlights).toHaveLength(1);
|
|
266
|
-
expect(highlights[0]).toBe('["nested-1", "nested-2"]');
|
|
267
|
-
});
|
|
268
|
-
|
|
269
|
-
it('reports a warning when there should be a block_order but it is missing', async () => {
|
|
270
|
-
const sourceCode = `
|
|
271
|
-
{% schema %}
|
|
272
|
-
{
|
|
273
|
-
"name": "Test section",
|
|
274
|
-
"presets": [
|
|
275
|
-
{
|
|
276
|
-
"name": "Preset 1",
|
|
277
|
-
"blocks": {
|
|
278
|
-
"block-1": {
|
|
279
|
-
"type": "text"
|
|
280
|
-
}
|
|
281
|
-
}
|
|
282
|
-
}
|
|
283
|
-
]
|
|
284
|
-
}
|
|
285
|
-
{% endschema %}`;
|
|
286
|
-
|
|
287
|
-
const offenses = await runLiquidCheck(SchemaPresetsBlockOrder, sourceCode, DEFAULT_FILE_NAME);
|
|
288
|
-
expect(offenses).toHaveLength(1);
|
|
289
|
-
expect(offenses[0].message).toEqual('block_order is missing');
|
|
290
|
-
|
|
291
|
-
const highlights = highlightedOffenses({ [DEFAULT_FILE_NAME]: sourceCode }, offenses);
|
|
292
|
-
expect(highlights).toHaveLength(1);
|
|
293
|
-
});
|
|
294
|
-
|
|
295
|
-
it('reports no warning we have all static blocks and no block_order', async () => {
|
|
296
|
-
const sourceCode = `
|
|
297
|
-
{% schema %}
|
|
298
|
-
{
|
|
299
|
-
"presets": [
|
|
300
|
-
{
|
|
301
|
-
"name": "Preset 1",
|
|
302
|
-
"blocks": {
|
|
303
|
-
"block-1": {
|
|
304
|
-
"type": "text",
|
|
305
|
-
"static": true
|
|
306
|
-
}
|
|
307
|
-
}
|
|
308
|
-
}
|
|
309
|
-
]
|
|
310
|
-
}
|
|
311
|
-
{% endschema %}`;
|
|
312
|
-
|
|
313
|
-
const offenses = await runLiquidCheck(SchemaPresetsBlockOrder, sourceCode, DEFAULT_FILE_NAME);
|
|
314
|
-
expect(offenses).toHaveLength(0);
|
|
315
|
-
});
|
|
316
|
-
|
|
317
|
-
it("reports a warning when a block in 'block_order' is not in 'blocks'", async () => {
|
|
318
|
-
const sourceCode = `
|
|
319
|
-
{% schema %}
|
|
320
|
-
{
|
|
321
|
-
"name": "Test section",
|
|
322
|
-
"presets": [
|
|
323
|
-
{
|
|
324
|
-
"name": "Preset 1",
|
|
325
|
-
"blocks": {
|
|
326
|
-
"block-1": {
|
|
327
|
-
"type": "text"
|
|
328
|
-
}
|
|
329
|
-
},
|
|
330
|
-
"block_order": ["block-1", "block-2"]
|
|
331
|
-
}
|
|
332
|
-
]
|
|
333
|
-
}
|
|
334
|
-
{% endschema %}`;
|
|
335
|
-
|
|
336
|
-
const offenses = await runLiquidCheck(SchemaPresetsBlockOrder, sourceCode, DEFAULT_FILE_NAME);
|
|
337
|
-
expect(offenses).toHaveLength(1);
|
|
338
|
-
expect(offenses[0].message).toEqual("block 'block-2' is missing from 'blocks'");
|
|
339
|
-
|
|
340
|
-
const highlights = highlightedOffenses({ [DEFAULT_FILE_NAME]: sourceCode }, offenses);
|
|
341
|
-
expect(highlights).toHaveLength(1);
|
|
342
|
-
expect(highlights[0]).toBe('"block-2"');
|
|
343
|
-
});
|
|
344
|
-
});
|
|
@@ -1,154 +0,0 @@
|
|
|
1
|
-
import { getLocEnd, getLocStart, nodeAtPath } from '../../json';
|
|
2
|
-
import { getSchema } from '../../to-schema';
|
|
3
|
-
import {
|
|
4
|
-
ArrayNode,
|
|
5
|
-
Context,
|
|
6
|
-
JSONNode,
|
|
7
|
-
LiquidCheckDefinition,
|
|
8
|
-
Severity,
|
|
9
|
-
SourceCodeType,
|
|
10
|
-
} from '../../types';
|
|
11
|
-
import { Preset } from '../../types/schemas/preset';
|
|
12
|
-
|
|
13
|
-
export const SchemaPresetsBlockOrder: LiquidCheckDefinition = {
|
|
14
|
-
meta: {
|
|
15
|
-
code: 'SchemaPresetsBlockOrder',
|
|
16
|
-
name: 'Gives recommendations and validations for block_order',
|
|
17
|
-
docs: {
|
|
18
|
-
description:
|
|
19
|
-
'Gives recommendations and validations for block_order for preset blocks as a hash.',
|
|
20
|
-
recommended: true,
|
|
21
|
-
url: 'https://shopify.dev/docs/storefronts/themes/tools/theme-check/checks/schema-presets-block-order',
|
|
22
|
-
},
|
|
23
|
-
type: SourceCodeType.LiquidHtml,
|
|
24
|
-
severity: Severity.WARNING,
|
|
25
|
-
schema: {},
|
|
26
|
-
targets: [],
|
|
27
|
-
},
|
|
28
|
-
|
|
29
|
-
create(context) {
|
|
30
|
-
return {
|
|
31
|
-
async LiquidRawTag(node) {
|
|
32
|
-
if (node.name !== 'schema' || node.body.kind !== 'json') {
|
|
33
|
-
return;
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
const offset = node.blockStartPosition.end;
|
|
37
|
-
const schema = await getSchema(context);
|
|
38
|
-
const { validSchema, ast } = schema ?? {};
|
|
39
|
-
if (!validSchema || validSchema instanceof Error) return;
|
|
40
|
-
if (!ast || ast instanceof Error) return;
|
|
41
|
-
|
|
42
|
-
const presets = validSchema.presets;
|
|
43
|
-
if (!presets) return;
|
|
44
|
-
|
|
45
|
-
presets.forEach((preset, index) => {
|
|
46
|
-
if ('blocks' in preset && preset.blocks) {
|
|
47
|
-
checkBlockOrder(preset, context, offset, ast, ['presets', String(index)]);
|
|
48
|
-
}
|
|
49
|
-
});
|
|
50
|
-
},
|
|
51
|
-
};
|
|
52
|
-
},
|
|
53
|
-
};
|
|
54
|
-
|
|
55
|
-
function checkBlockOrder(
|
|
56
|
-
node: Preset.Preset | Preset.PresetBlockForHash,
|
|
57
|
-
context: Context<SourceCodeType.LiquidHtml>,
|
|
58
|
-
offset: number,
|
|
59
|
-
ast: JSONNode,
|
|
60
|
-
ast_path: string[],
|
|
61
|
-
) {
|
|
62
|
-
if ('blocks' in node && typeof node.blocks == 'object' && node.blocks) {
|
|
63
|
-
const blockOrder = 'block_order' in node ? node.block_order : undefined;
|
|
64
|
-
// check 1: is block_order missing?
|
|
65
|
-
if (!blockOrder) {
|
|
66
|
-
if (shouldHaveBlockOrder(node)) {
|
|
67
|
-
reportWarning(context, offset, ast, ast_path, `block_order is missing`, false);
|
|
68
|
-
}
|
|
69
|
-
}
|
|
70
|
-
|
|
71
|
-
// check 2: are items in block_order present in blocks?
|
|
72
|
-
blockOrder?.forEach((block_id, index) => {
|
|
73
|
-
if (!node.blocks || (!Array.isArray(node.blocks) && !node.blocks[block_id])) {
|
|
74
|
-
const warning_ast_path = ast_path.concat(['block_order']).concat([String(index)]);
|
|
75
|
-
reportWarning(
|
|
76
|
-
context,
|
|
77
|
-
offset,
|
|
78
|
-
ast,
|
|
79
|
-
warning_ast_path,
|
|
80
|
-
`block '${block_id}' is missing from 'blocks'`,
|
|
81
|
-
);
|
|
82
|
-
}
|
|
83
|
-
});
|
|
84
|
-
|
|
85
|
-
// check 3: are items in blocks correctly in block_order?
|
|
86
|
-
for (const [block_id, block] of Object.entries(node.blocks)) {
|
|
87
|
-
if (block.static) {
|
|
88
|
-
// if static block is in the block_order, that's an error
|
|
89
|
-
if (Array.isArray(blockOrder) && blockOrder.includes(block_id)) {
|
|
90
|
-
const warning_ast_path = ast_path.concat(['block_order']);
|
|
91
|
-
reportWarning(
|
|
92
|
-
context,
|
|
93
|
-
offset,
|
|
94
|
-
ast,
|
|
95
|
-
warning_ast_path,
|
|
96
|
-
`static block '${block_id}' cannot be in the block_order`,
|
|
97
|
-
);
|
|
98
|
-
}
|
|
99
|
-
} else {
|
|
100
|
-
// if non-static block is not in the block_order, that's a potential mistake
|
|
101
|
-
if (Array.isArray(blockOrder) && !blockOrder.includes(block_id)) {
|
|
102
|
-
const warning_ast_path = ast_path.concat(['block_order']);
|
|
103
|
-
reportWarning(
|
|
104
|
-
context,
|
|
105
|
-
offset,
|
|
106
|
-
ast,
|
|
107
|
-
warning_ast_path,
|
|
108
|
-
`block '${block_id}' is missing from the block_order`,
|
|
109
|
-
);
|
|
110
|
-
}
|
|
111
|
-
}
|
|
112
|
-
|
|
113
|
-
//recursive check for nested blocks
|
|
114
|
-
if (block.blocks) {
|
|
115
|
-
ast_path.push('blocks', block_id); // so we'll get ['presets', 0, 'blocks', 'my_block1'] for example to do nodeAtPath(schema.ast, ast_path)
|
|
116
|
-
checkBlockOrder(block, context, offset, ast, ast_path);
|
|
117
|
-
}
|
|
118
|
-
}
|
|
119
|
-
}
|
|
120
|
-
}
|
|
121
|
-
|
|
122
|
-
function shouldHaveBlockOrder(node: Preset.Preset | Preset.PresetBlockForHash): boolean {
|
|
123
|
-
if (
|
|
124
|
-
'blocks' in node &&
|
|
125
|
-
typeof node.blocks === 'object' &&
|
|
126
|
-
node.blocks !== null &&
|
|
127
|
-
!Array.isArray(node.blocks)
|
|
128
|
-
) {
|
|
129
|
-
return Object.entries(node.blocks).some(([_blockId, block]) => {
|
|
130
|
-
// If static is undefined or false, it's considered non-static
|
|
131
|
-
return block.static !== true;
|
|
132
|
-
});
|
|
133
|
-
}
|
|
134
|
-
|
|
135
|
-
return false;
|
|
136
|
-
}
|
|
137
|
-
|
|
138
|
-
function reportWarning(
|
|
139
|
-
context: Context<SourceCodeType.LiquidHtml>,
|
|
140
|
-
offset: number,
|
|
141
|
-
ast: JSONNode,
|
|
142
|
-
ast_path: string[],
|
|
143
|
-
message: string,
|
|
144
|
-
fullHighlight: boolean = true,
|
|
145
|
-
) {
|
|
146
|
-
const node = nodeAtPath(ast, ast_path)! as ArrayNode;
|
|
147
|
-
const startIndex = fullHighlight ? offset + getLocStart(node) : offset + getLocEnd(node) - 1; // start to finish of the node or last char of the node
|
|
148
|
-
const endIndex = offset + getLocEnd(node);
|
|
149
|
-
context.report({
|
|
150
|
-
message: message,
|
|
151
|
-
startIndex,
|
|
152
|
-
endIndex,
|
|
153
|
-
});
|
|
154
|
-
}
|
|
@@ -1,145 +0,0 @@
|
|
|
1
|
-
import { expect, describe, it } from 'vitest';
|
|
2
|
-
import { highlightedOffenses, runLiquidCheck, check } from '../../test';
|
|
3
|
-
import { SchemaPresetsStaticBlocks } from './index';
|
|
4
|
-
|
|
5
|
-
const DEFAULT_FILE_NAME = 'sections/file.liquid';
|
|
6
|
-
|
|
7
|
-
describe('Module: SchemaPresetsStaticBlocks', () => {
|
|
8
|
-
it('reports no errors when there are {% content_for "block" ... %} for each static block in the preset blocks array', async () => {
|
|
9
|
-
const sourceCode = `
|
|
10
|
-
{% content_for "block" type:"text" id: "block-1" %}
|
|
11
|
-
{% content_for "block" type:"icon" id: "block-2" %}
|
|
12
|
-
{% schema %}
|
|
13
|
-
{
|
|
14
|
-
"name": "Test section",
|
|
15
|
-
"blocks": [{"type": "@theme"}],
|
|
16
|
-
"presets": [
|
|
17
|
-
{
|
|
18
|
-
"name": "Preset with two static blocks",
|
|
19
|
-
"blocks": [
|
|
20
|
-
{
|
|
21
|
-
"type": "text",
|
|
22
|
-
"static": true,
|
|
23
|
-
"id": "block-1"
|
|
24
|
-
},
|
|
25
|
-
{
|
|
26
|
-
"type": "icon",
|
|
27
|
-
"static": true,
|
|
28
|
-
"id": "block-2"
|
|
29
|
-
}
|
|
30
|
-
]
|
|
31
|
-
}
|
|
32
|
-
]
|
|
33
|
-
}
|
|
34
|
-
{% endschema %}`;
|
|
35
|
-
|
|
36
|
-
const offenses = await runLiquidCheck(SchemaPresetsStaticBlocks, sourceCode, DEFAULT_FILE_NAME);
|
|
37
|
-
expect(offenses).toHaveLength(0);
|
|
38
|
-
});
|
|
39
|
-
|
|
40
|
-
it('reports an error when there are {% content_for "block" ... %} missing for static blocks in the preset blocks array', async () => {
|
|
41
|
-
const sourceCode = `
|
|
42
|
-
{% content_for "block" type:"text" id:"block-1" %}
|
|
43
|
-
{% comment %} here we are missing the other content_for block for block-2 {% endcomment %}
|
|
44
|
-
{% schema %}
|
|
45
|
-
{
|
|
46
|
-
"name": "Test section",
|
|
47
|
-
"blocks": [{"type": "@theme"}],
|
|
48
|
-
"presets": [
|
|
49
|
-
{
|
|
50
|
-
"name": "Preset with two static blocks",
|
|
51
|
-
"blocks": [
|
|
52
|
-
{
|
|
53
|
-
"type": "text",
|
|
54
|
-
"static": true,
|
|
55
|
-
"id": "block-1"
|
|
56
|
-
},
|
|
57
|
-
{
|
|
58
|
-
"type": "icon",
|
|
59
|
-
"static": true,
|
|
60
|
-
"id": "block-2"
|
|
61
|
-
}
|
|
62
|
-
]
|
|
63
|
-
}
|
|
64
|
-
]
|
|
65
|
-
}
|
|
66
|
-
{% endschema %}`;
|
|
67
|
-
|
|
68
|
-
const offenses = await runLiquidCheck(SchemaPresetsStaticBlocks, sourceCode, DEFAULT_FILE_NAME);
|
|
69
|
-
expect(offenses).toHaveLength(1);
|
|
70
|
-
console.log(offenses);
|
|
71
|
-
expect(offenses[0].message).toEqual(
|
|
72
|
-
'Static block block-2 is missing a corresponding content_for "block" tag.',
|
|
73
|
-
);
|
|
74
|
-
|
|
75
|
-
const highlights = highlightedOffenses({ [DEFAULT_FILE_NAME]: sourceCode }, offenses);
|
|
76
|
-
expect(highlights).toHaveLength(1);
|
|
77
|
-
});
|
|
78
|
-
|
|
79
|
-
it('reports no errors when there are {% content_for "block" ... %} for each static block in the preset blocks hash', async () => {
|
|
80
|
-
const sourceCode = `
|
|
81
|
-
{% content_for "block" type:"text" id: "block-1" %}
|
|
82
|
-
{% content_for "block" type:"icon" id: "block-2" %}
|
|
83
|
-
{% schema %}
|
|
84
|
-
{
|
|
85
|
-
"name": "Test section",
|
|
86
|
-
"blocks": [{"type": "@theme"}],
|
|
87
|
-
"presets": [
|
|
88
|
-
{
|
|
89
|
-
"name": "Preset with two static blocks",
|
|
90
|
-
"blocks": {
|
|
91
|
-
"block-1": {
|
|
92
|
-
"type": "text",
|
|
93
|
-
"static": true
|
|
94
|
-
},
|
|
95
|
-
"block-2": {
|
|
96
|
-
"type": "icon",
|
|
97
|
-
"static": true
|
|
98
|
-
}
|
|
99
|
-
}
|
|
100
|
-
}
|
|
101
|
-
]
|
|
102
|
-
}
|
|
103
|
-
{% endschema %}`;
|
|
104
|
-
|
|
105
|
-
const offenses = await runLiquidCheck(SchemaPresetsStaticBlocks, sourceCode, DEFAULT_FILE_NAME);
|
|
106
|
-
expect(offenses).toHaveLength(0);
|
|
107
|
-
});
|
|
108
|
-
|
|
109
|
-
it('reports an error when there are {% content_for "block" ... %} missing for static blocks in the preset blocks hash', async () => {
|
|
110
|
-
const sourceCode = `
|
|
111
|
-
{% content_for "block" type:"text" id:"block-1" %}
|
|
112
|
-
{% comment %} here we are missing the other content_for block for block-2 {% endcomment %}
|
|
113
|
-
{% schema %}
|
|
114
|
-
{
|
|
115
|
-
"name": "Test section",
|
|
116
|
-
"blocks": [{"type": "@theme"}],
|
|
117
|
-
"presets": [
|
|
118
|
-
{
|
|
119
|
-
"name": "Preset with two static blocks",
|
|
120
|
-
"blocks": {
|
|
121
|
-
"block-1": {
|
|
122
|
-
"type": "text",
|
|
123
|
-
"static": true
|
|
124
|
-
},
|
|
125
|
-
"block-2": {
|
|
126
|
-
"type": "icon",
|
|
127
|
-
"static": true
|
|
128
|
-
}
|
|
129
|
-
}
|
|
130
|
-
}
|
|
131
|
-
]
|
|
132
|
-
}
|
|
133
|
-
{% endschema %}`;
|
|
134
|
-
|
|
135
|
-
const offenses = await runLiquidCheck(SchemaPresetsStaticBlocks, sourceCode, DEFAULT_FILE_NAME);
|
|
136
|
-
expect(offenses).toHaveLength(1);
|
|
137
|
-
console.log(offenses);
|
|
138
|
-
expect(offenses[0].message).toEqual(
|
|
139
|
-
'Static block block-2 is missing a corresponding content_for "block" tag.',
|
|
140
|
-
);
|
|
141
|
-
|
|
142
|
-
const highlights = highlightedOffenses({ [DEFAULT_FILE_NAME]: sourceCode }, offenses);
|
|
143
|
-
expect(highlights).toHaveLength(1);
|
|
144
|
-
});
|
|
145
|
-
});
|