@platformos/platformos-check-common 0.0.6 → 0.0.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (304) hide show
  1. package/CHANGELOG.md +16 -0
  2. package/dist/AugmentedPlatformOSDocset.d.ts +11 -0
  3. package/dist/AugmentedPlatformOSDocset.js +81 -0
  4. package/dist/AugmentedPlatformOSDocset.js.map +1 -0
  5. package/dist/JSONValidator.js +1 -1
  6. package/dist/JSONValidator.js.map +1 -1
  7. package/dist/checks/deprecated-filter/index.js +4 -41
  8. package/dist/checks/deprecated-filter/index.js.map +1 -1
  9. package/dist/checks/deprecated-tag/index.js +21 -22
  10. package/dist/checks/deprecated-tag/index.js.map +1 -1
  11. package/dist/checks/duplicate-function-arguments/index.js +1 -1
  12. package/dist/checks/duplicate-function-arguments/index.js.map +1 -1
  13. package/dist/checks/duplicate-render-partial-arguments/index.js +1 -1
  14. package/dist/checks/duplicate-render-partial-arguments/index.js.map +1 -1
  15. package/dist/checks/graphql/index.js +1 -1
  16. package/dist/checks/graphql/index.js.map +1 -1
  17. package/dist/checks/img-width-and-height/index.js +1 -1
  18. package/dist/checks/img-width-and-height/index.js.map +1 -1
  19. package/dist/checks/index.d.ts +3 -3
  20. package/dist/checks/index.js +4 -79
  21. package/dist/checks/index.js.map +1 -1
  22. package/dist/checks/json-syntax-error/index.js +1 -1
  23. package/dist/checks/json-syntax-error/index.js.map +1 -1
  24. package/dist/checks/liquid-html-syntax-error/index.js +2 -2
  25. package/dist/checks/liquid-html-syntax-error/index.js.map +1 -1
  26. package/dist/checks/matching-translations/index.d.ts +2 -2
  27. package/dist/checks/matching-translations/index.js +20 -31
  28. package/dist/checks/matching-translations/index.js.map +1 -1
  29. package/dist/checks/metadata-params/index.js +6 -3
  30. package/dist/checks/metadata-params/index.js.map +1 -1
  31. package/dist/checks/missing-asset/index.js +1 -1
  32. package/dist/checks/missing-asset/index.js.map +1 -1
  33. package/dist/checks/missing-partial/index.d.ts +6 -0
  34. package/dist/checks/missing-partial/index.js +70 -0
  35. package/dist/checks/missing-partial/index.js.map +1 -0
  36. package/dist/checks/orphaned-partial/index.js +4 -4
  37. package/dist/checks/orphaned-partial/index.js.map +1 -1
  38. package/dist/checks/parser-blocking-script/index.js +10 -36
  39. package/dist/checks/parser-blocking-script/index.js.map +1 -1
  40. package/dist/checks/parser-blocking-script/suggestions.d.ts +1 -2
  41. package/dist/checks/parser-blocking-script/suggestions.js +1 -11
  42. package/dist/checks/parser-blocking-script/suggestions.js.map +1 -1
  43. package/dist/checks/reserved-doc-param-names/index.js +6 -5
  44. package/dist/checks/reserved-doc-param-names/index.js.map +1 -1
  45. package/dist/checks/translation-key-exists/index.js +1 -1
  46. package/dist/checks/translation-key-exists/index.js.map +1 -1
  47. package/dist/checks/unclosed-html-element/index.js +5 -1
  48. package/dist/checks/unclosed-html-element/index.js.map +1 -1
  49. package/dist/checks/undefined-object/index.js +7 -30
  50. package/dist/checks/undefined-object/index.js.map +1 -1
  51. package/dist/checks/unique-doc-param-names/index.js +1 -1
  52. package/dist/checks/unique-doc-param-names/index.js.map +1 -1
  53. package/dist/checks/unknown-filter/index.js +3 -3
  54. package/dist/checks/unknown-filter/index.js.map +1 -1
  55. package/dist/checks/unknown-property/index.js +1 -1
  56. package/dist/checks/unknown-property/index.js.map +1 -1
  57. package/dist/checks/unrecognized-render-partial-arguments/index.js +2 -2
  58. package/dist/checks/unrecognized-render-partial-arguments/index.js.map +1 -1
  59. package/dist/checks/unused-assign/index.js +1 -1
  60. package/dist/checks/unused-assign/index.js.map +1 -1
  61. package/dist/checks/unused-doc-param/index.js +1 -1
  62. package/dist/checks/unused-doc-param/index.js.map +1 -1
  63. package/dist/checks/utils.js +1 -1
  64. package/dist/checks/utils.js.map +1 -1
  65. package/dist/checks/valid-content-for-arguments/index.js +1 -1
  66. package/dist/checks/valid-content-for-arguments/index.js.map +1 -1
  67. package/dist/checks/valid-doc-param-types/index.js +4 -4
  68. package/dist/checks/valid-doc-param-types/index.js.map +1 -1
  69. package/dist/checks/valid-html-translation/index.d.ts +2 -2
  70. package/dist/checks/valid-html-translation/index.js +4 -4
  71. package/dist/checks/valid-html-translation/index.js.map +1 -1
  72. package/dist/checks/valid-json/index.js +1 -1
  73. package/dist/checks/valid-json/index.js.map +1 -1
  74. package/dist/checks/valid-render-partial-argument-types/index.js +2 -2
  75. package/dist/checks/valid-render-partial-argument-types/index.js.map +1 -1
  76. package/dist/checks/variable-name/index.js +1 -1
  77. package/dist/checks/variable-name/index.js.map +1 -1
  78. package/dist/context-utils.d.ts +2 -7
  79. package/dist/context-utils.js +39 -109
  80. package/dist/context-utils.js.map +1 -1
  81. package/dist/disabled-checks/index.js +4 -2
  82. package/dist/disabled-checks/index.js.map +1 -1
  83. package/dist/find-root.d.ts +7 -10
  84. package/dist/find-root.js +10 -17
  85. package/dist/find-root.js.map +1 -1
  86. package/dist/fixes/autofix.d.ts +4 -4
  87. package/dist/fixes/autofix.js +2 -2
  88. package/dist/fixes/autofix.js.map +1 -1
  89. package/dist/fixes/correctors/index.js +4 -0
  90. package/dist/fixes/correctors/index.js.map +1 -1
  91. package/dist/index.d.ts +4 -5
  92. package/dist/index.js +34 -17
  93. package/dist/index.js.map +1 -1
  94. package/dist/jsonc/parse.d.ts +1 -1
  95. package/dist/jsonc/parse.js +1 -1
  96. package/dist/liquid-doc/arguments.d.ts +7 -8
  97. package/dist/liquid-doc/arguments.js +20 -28
  98. package/dist/liquid-doc/arguments.js.map +1 -1
  99. package/dist/liquid-doc/liquidDoc.d.ts +1 -1
  100. package/dist/liquid-doc/liquidDoc.js.map +1 -1
  101. package/dist/liquid-doc/utils.d.ts +1 -1
  102. package/dist/liquid-doc/utils.js +4 -3
  103. package/dist/liquid-doc/utils.js.map +1 -1
  104. package/dist/path.d.ts +1 -0
  105. package/dist/path.js +5 -1
  106. package/dist/path.js.map +1 -1
  107. package/dist/test/MockApp.d.ts +16 -0
  108. package/dist/test/MockApp.js +16 -0
  109. package/dist/test/MockApp.js.map +1 -0
  110. package/dist/test/MockFileSystem.d.ts +3 -3
  111. package/dist/test/MockFileSystem.js +6 -6
  112. package/dist/test/MockFileSystem.js.map +1 -1
  113. package/dist/test/index.d.ts +1 -1
  114. package/dist/test/index.js +1 -1
  115. package/dist/test/index.js.map +1 -1
  116. package/dist/test/test-helper.d.ts +10 -9
  117. package/dist/test/test-helper.js +15 -106
  118. package/dist/test/test-helper.js.map +1 -1
  119. package/dist/to-source-code.d.ts +4 -3
  120. package/dist/to-source-code.js +20 -0
  121. package/dist/to-source-code.js.map +1 -1
  122. package/dist/tsconfig.tsbuildinfo +1 -1
  123. package/dist/types/platformos-liquid-docs.d.ts +128 -0
  124. package/dist/types/platformos-liquid-docs.js +3 -0
  125. package/dist/types/platformos-liquid-docs.js.map +1 -0
  126. package/dist/types/schemas/index.d.ts +0 -2
  127. package/dist/types/schemas/index.js.map +1 -1
  128. package/dist/types.d.ts +18 -67
  129. package/dist/types.js +3 -5
  130. package/dist/types.js.map +1 -1
  131. package/dist/utils/file-utils.js +1 -2
  132. package/dist/utils/file-utils.js.map +1 -1
  133. package/dist/utils/index.d.ts +0 -1
  134. package/dist/utils/index.js +0 -1
  135. package/dist/utils/index.js.map +1 -1
  136. package/dist/yaml/parse.d.ts +5 -0
  137. package/dist/yaml/parse.js +94 -0
  138. package/dist/yaml/parse.js.map +1 -0
  139. package/package.json +9 -9
  140. package/src/{AugmentedThemeDocset.spec.ts → AugmentedPlatformOSDocset.spec.ts} +47 -34
  141. package/src/AugmentedPlatformOSDocset.ts +89 -0
  142. package/src/JSONValidator.ts +1 -1
  143. package/src/checks/deprecated-filter/index.spec.ts +76 -248
  144. package/src/checks/deprecated-filter/index.ts +5 -53
  145. package/src/checks/deprecated-tag/index.spec.ts +85 -34
  146. package/src/checks/deprecated-tag/index.ts +27 -22
  147. package/src/checks/duplicate-function-arguments/index.ts +1 -1
  148. package/src/checks/duplicate-render-partial-arguments/index.ts +1 -1
  149. package/src/checks/graphql/index.ts +1 -1
  150. package/src/checks/img-width-and-height/index.ts +1 -1
  151. package/src/checks/index.ts +11 -80
  152. package/src/checks/invalid-hash-assign-target/index.spec.ts +14 -14
  153. package/src/checks/json-syntax-error/index.ts +1 -1
  154. package/src/checks/liquid-html-syntax-error/checks/InvalidBooleanExpression.spec.ts +0 -11
  155. package/src/checks/liquid-html-syntax-error/checks/InvalidLoopArguments.spec.ts +1 -2
  156. package/src/checks/liquid-html-syntax-error/index.spec.ts +1 -6
  157. package/src/checks/liquid-html-syntax-error/index.ts +2 -2
  158. package/src/checks/matching-translations/index.spec.ts +89 -346
  159. package/src/checks/matching-translations/index.ts +24 -35
  160. package/src/checks/metadata-params/index.ts +5 -7
  161. package/src/checks/missing-asset/index.ts +1 -1
  162. package/src/checks/{missing-template → missing-partial}/index.spec.ts +6 -6
  163. package/src/checks/{missing-template → missing-partial}/index.ts +6 -20
  164. package/src/checks/orphaned-partial/index.ts +3 -3
  165. package/src/checks/parser-blocking-script/index.spec.ts +0 -118
  166. package/src/checks/parser-blocking-script/index.ts +3 -33
  167. package/src/checks/parser-blocking-script/suggestions.ts +1 -28
  168. package/src/checks/translation-key-exists/index.ts +1 -1
  169. package/src/checks/unclosed-html-element/index.ts +5 -1
  170. package/src/checks/undefined-object/index.spec.ts +3 -109
  171. package/src/checks/undefined-object/index.ts +8 -33
  172. package/src/checks/unique-doc-param-names/index.ts +1 -1
  173. package/src/checks/unknown-filter/index.spec.ts +2 -2
  174. package/src/checks/unknown-filter/index.ts +3 -3
  175. package/src/checks/unknown-property/index.ts +1 -1
  176. package/src/checks/unrecognized-render-partial-arguments/index.spec.ts +5 -5
  177. package/src/checks/unrecognized-render-partial-arguments/index.ts +2 -5
  178. package/src/checks/unused-assign/index.spec.ts +0 -30
  179. package/src/checks/unused-assign/index.ts +1 -1
  180. package/src/checks/unused-doc-param/index.ts +1 -1
  181. package/src/checks/utils.ts +1 -1
  182. package/src/checks/valid-doc-param-types/index.ts +4 -4
  183. package/src/checks/valid-html-translation/index.spec.ts +42 -32
  184. package/src/checks/valid-html-translation/index.ts +7 -7
  185. package/src/checks/valid-json/index.ts +1 -1
  186. package/src/checks/valid-render-partial-argument-types/index.ts +2 -5
  187. package/src/checks/variable-name/index.ts +1 -1
  188. package/src/context-utils.spec.ts +49 -77
  189. package/src/context-utils.ts +39 -128
  190. package/src/disabled-checks/index.spec.ts +35 -0
  191. package/src/disabled-checks/index.ts +4 -2
  192. package/src/find-root.ts +12 -22
  193. package/src/fixes/autofix.spec.ts +2 -2
  194. package/src/fixes/autofix.ts +4 -4
  195. package/src/fixes/correctors/index.ts +4 -0
  196. package/src/ignore.spec.ts +0 -1
  197. package/src/index.ts +33 -21
  198. package/src/jsonc/parse.ts +1 -1
  199. package/src/liquid-doc/arguments.spec.ts +19 -45
  200. package/src/liquid-doc/arguments.ts +26 -39
  201. package/src/liquid-doc/liquidDoc.ts +1 -2
  202. package/src/liquid-doc/utils.ts +4 -3
  203. package/src/path.ts +1 -0
  204. package/src/test/{MockTheme.ts → MockApp.ts} +1 -1
  205. package/src/test/MockFileSystem.ts +9 -6
  206. package/src/test/index.ts +1 -1
  207. package/src/test/test-helper.ts +29 -127
  208. package/src/to-source-code.ts +20 -1
  209. package/src/types/{theme-liquid-docs.ts → platformos-liquid-docs.ts} +8 -13
  210. package/src/types/schemas/index.ts +0 -2
  211. package/src/types.ts +21 -92
  212. package/src/utils/file-utils.ts +0 -1
  213. package/src/utils/index.ts +0 -1
  214. package/src/yaml/parse.ts +111 -0
  215. package/src/AugmentedThemeDocset.ts +0 -137
  216. package/src/checks/app-block-missing-schema/index.spec.ts +0 -121
  217. package/src/checks/app-block-missing-schema/index.ts +0 -46
  218. package/src/checks/app-block-valid-tags/index.spec.ts +0 -96
  219. package/src/checks/app-block-valid-tags/index.ts +0 -54
  220. package/src/checks/asset-preload/index.spec.ts +0 -78
  221. package/src/checks/asset-preload/index.ts +0 -65
  222. package/src/checks/asset-size-app-block-css/index.spec.ts +0 -88
  223. package/src/checks/asset-size-app-block-css/index.ts +0 -78
  224. package/src/checks/asset-size-app-block-javascript/index.spec.ts +0 -66
  225. package/src/checks/asset-size-app-block-javascript/index.ts +0 -78
  226. package/src/checks/asset-size-css/index.spec.ts +0 -166
  227. package/src/checks/asset-size-css/index.ts +0 -160
  228. package/src/checks/asset-size-javascript/index.spec.ts +0 -184
  229. package/src/checks/asset-size-javascript/index.ts +0 -144
  230. package/src/checks/block-id-usage/index.spec.ts +0 -76
  231. package/src/checks/block-id-usage/index.ts +0 -72
  232. package/src/checks/cdn-preconnect/index.spec.ts +0 -40
  233. package/src/checks/cdn-preconnect/index.ts +0 -43
  234. package/src/checks/content-for-header-modification/index.spec.ts +0 -65
  235. package/src/checks/content-for-header-modification/index.ts +0 -72
  236. package/src/checks/deprecate-bgsizes/index.spec.ts +0 -41
  237. package/src/checks/deprecate-bgsizes/index.ts +0 -49
  238. package/src/checks/deprecate-lazysizes/index.spec.ts +0 -26
  239. package/src/checks/deprecate-lazysizes/index.ts +0 -58
  240. package/src/checks/deprecated-filter/fixes.ts +0 -264
  241. package/src/checks/deprecated-fonts-on-sections-and-blocks/deprecated-fonts-data.ts +0 -1343
  242. package/src/checks/deprecated-fonts-on-sections-and-blocks/index.spec.ts +0 -613
  243. package/src/checks/deprecated-fonts-on-sections-and-blocks/index.ts +0 -284
  244. package/src/checks/deprecated-fonts-on-settings-schema/index.spec.ts +0 -102
  245. package/src/checks/deprecated-fonts-on-settings-schema/index.ts +0 -66
  246. package/src/checks/duplicate-content-for-arguments/index.spec.ts +0 -98
  247. package/src/checks/duplicate-content-for-arguments/index.ts +0 -43
  248. package/src/checks/empty-block-content/index.spec.ts +0 -117
  249. package/src/checks/empty-block-content/index.ts +0 -60
  250. package/src/checks/hardcoded-routes/index.spec.ts +0 -58
  251. package/src/checks/hardcoded-routes/index.ts +0 -100
  252. package/src/checks/json-missing-block/index.spec.ts +0 -435
  253. package/src/checks/json-missing-block/index.ts +0 -56
  254. package/src/checks/json-missing-block/missing-block-utils.ts +0 -147
  255. package/src/checks/liquid-free-settings/index.spec.ts +0 -180
  256. package/src/checks/liquid-free-settings/index.ts +0 -79
  257. package/src/checks/missing-content-for-arguments/index.spec.ts +0 -144
  258. package/src/checks/missing-content-for-arguments/index.ts +0 -46
  259. package/src/checks/pagination-size/index.spec.ts +0 -158
  260. package/src/checks/pagination-size/index.ts +0 -104
  261. package/src/checks/remote-asset/index.spec.ts +0 -280
  262. package/src/checks/remote-asset/index.ts +0 -238
  263. package/src/checks/reserved-doc-param-names/index.spec.ts +0 -62
  264. package/src/checks/reserved-doc-param-names/index.ts +0 -57
  265. package/src/checks/schema-presets-block-order/index.spec.ts +0 -344
  266. package/src/checks/schema-presets-block-order/index.ts +0 -154
  267. package/src/checks/schema-presets-static-blocks/index.spec.ts +0 -145
  268. package/src/checks/schema-presets-static-blocks/index.ts +0 -126
  269. package/src/checks/static-stylesheet-and-javascript-tags/index.spec.ts +0 -257
  270. package/src/checks/static-stylesheet-and-javascript-tags/index.ts +0 -48
  271. package/src/checks/unique-settings-id/index.spec.ts +0 -24
  272. package/src/checks/unique-settings-id/index.ts +0 -84
  273. package/src/checks/unique-settings-id/test-data.ts +0 -1191
  274. package/src/checks/unique-static-block-id/index.spec.ts +0 -55
  275. package/src/checks/unique-static-block-id/index.ts +0 -60
  276. package/src/checks/unrecognized-content-for-arguments/index.spec.ts +0 -145
  277. package/src/checks/unrecognized-content-for-arguments/index.ts +0 -55
  278. package/src/checks/valid-block-target/index.spec.ts +0 -1396
  279. package/src/checks/valid-block-target/index.ts +0 -142
  280. package/src/checks/valid-content-for-argument-types/index.spec.ts +0 -382
  281. package/src/checks/valid-content-for-argument-types/index.ts +0 -42
  282. package/src/checks/valid-content-for-arguments/index.spec.ts +0 -107
  283. package/src/checks/valid-content-for-arguments/index.ts +0 -98
  284. package/src/checks/valid-local-blocks/index.spec.ts +0 -286
  285. package/src/checks/valid-local-blocks/index.ts +0 -100
  286. package/src/checks/valid-local-blocks/valid-block-utils.ts +0 -97
  287. package/src/checks/valid-schema/index.spec.ts +0 -174
  288. package/src/checks/valid-schema/index.ts +0 -41
  289. package/src/checks/valid-schema-name/index.spec.ts +0 -112
  290. package/src/checks/valid-schema-name/index.ts +0 -75
  291. package/src/checks/valid-settings-key/index.spec.ts +0 -321
  292. package/src/checks/valid-settings-key/index.ts +0 -144
  293. package/src/checks/valid-static-block-type/index.spec.ts +0 -38
  294. package/src/checks/valid-static-block-type/index.ts +0 -58
  295. package/src/checks/valid-visible-if/index.spec.ts +0 -619
  296. package/src/checks/valid-visible-if/index.ts +0 -184
  297. package/src/checks/valid-visible-if/visible-if-utils.ts +0 -158
  298. package/src/tags/content-for.ts +0 -25
  299. package/src/to-schema.ts +0 -231
  300. package/src/types/schemas/section.ts +0 -86
  301. package/src/types/schemas/theme-block.ts +0 -34
  302. package/src/types/theme-schemas.ts +0 -80
  303. package/src/utils/block.ts +0 -300
  304. package/src/utils/markup.ts +0 -10
@@ -1,174 +0,0 @@
1
- import lodashSet from 'lodash/set';
2
- import { describe, expect, it } from 'vitest';
3
- import { runLiquidCheck, highlightedOffenses } from '../../test';
4
- import { ValidSchema } from './index';
5
- import { Dependencies } from '../../types';
6
-
7
- const DEFAULT_FILE_NAME = 'sections/file.liquid';
8
- const VALID_SECTION_SCHEMA = {
9
- shouldBeString: 't:sections.main-addresses.name',
10
- shouldBeNumber: 10,
11
- shouldBeIntegerLessThan51: 50,
12
- };
13
-
14
- // Deep copy valid data
15
- const INVALID_SECTION_SCHEMA = JSON.parse(JSON.stringify(VALID_SECTION_SCHEMA));
16
-
17
- lodashSet(INVALID_SECTION_SCHEMA, 'shouldBeString', 420);
18
- lodashSet(INVALID_SECTION_SCHEMA, 'shouldBeNumber', true);
19
- lodashSet(INVALID_SECTION_SCHEMA, 'shouldBeIntegerLessThan51', 51);
20
-
21
- const MockSectionSchemaJsonSchema = {
22
- $schema: 'http://json-schema.org/draft-07/schema#',
23
- type: 'object',
24
- properties: {
25
- shouldBeString: {
26
- type: 'string',
27
- },
28
- shouldBeNumber: {
29
- type: 'number',
30
- },
31
- shouldBeIntegerLessThan51: {
32
- type: 'integer',
33
- description: 'The number of times a section can be added to a template or section group.',
34
- maximum: 50,
35
- },
36
- },
37
- };
38
-
39
- const buildMockDeps = (): Partial<Dependencies> => ({
40
- jsonValidationSet: {
41
- schemas: async () => [
42
- {
43
- uri: 'https://shopify.dev/some-schema.json',
44
- schema: JSON.stringify(MockSectionSchemaJsonSchema),
45
- fileMatch: ['**/sections/*.liquid'],
46
- },
47
- ],
48
- },
49
- });
50
-
51
- describe('ValidSchema', () => {
52
- it('should report a syntax error when the schema json is malformed', async () => {
53
- const sourceCode = `
54
- {% schema %}
55
- {
56
-
57
- {% endschema %}
58
- `;
59
-
60
- const offenses = await runLiquidCheck(
61
- ValidSchema,
62
- sourceCode,
63
- DEFAULT_FILE_NAME,
64
- buildMockDeps(),
65
- );
66
- const highlights = highlightedOffenses({ [DEFAULT_FILE_NAME]: sourceCode }, offenses);
67
- expect(highlights).to.have.length(1);
68
- expect(highlights[0].trim()).to.equal('{');
69
-
70
- expect(offenses).to.have.length(1);
71
- expect(offenses).to.containOffense({
72
- check: ValidSchema.meta.code,
73
- message: expect.stringContaining('Expected comma or closing brace'),
74
- uri: `file:///${DEFAULT_FILE_NAME}`,
75
- });
76
- });
77
-
78
- it('should not report a syntax error when the schema json has a trailing comma', async () => {
79
- const sourceCode = `
80
- {% schema %}
81
- {
82
- "comma": "not trailing",
83
- }
84
- {% endschema %}
85
- `;
86
-
87
- const offenses = await runLiquidCheck(
88
- ValidSchema,
89
- sourceCode,
90
- DEFAULT_FILE_NAME,
91
- buildMockDeps(),
92
- );
93
-
94
- expect(offenses).to.have.length(0);
95
- });
96
-
97
- it('should complain appropriately when a section schema contains errors', async () => {
98
- const sourceCode = `
99
- {% schema %}
100
- ${JSON.stringify(INVALID_SECTION_SCHEMA, null, 2)}
101
- {% endschema %}
102
- `;
103
-
104
- const offenses = await runLiquidCheck(
105
- ValidSchema,
106
- sourceCode,
107
- DEFAULT_FILE_NAME,
108
- buildMockDeps(),
109
- );
110
-
111
- expect(offenses).to.have.length(3);
112
- expect(offenses).to.containOffense({
113
- check: ValidSchema.meta.code,
114
- message: 'Incorrect type. Expected "string".',
115
- uri: `file:///${DEFAULT_FILE_NAME}`,
116
- });
117
- expect(offenses).to.containOffense({
118
- check: ValidSchema.meta.code,
119
- message: 'Incorrect type. Expected "number".',
120
- uri: `file:///${DEFAULT_FILE_NAME}`,
121
- });
122
- expect(offenses).to.containOffense({
123
- check: ValidSchema.meta.code,
124
- message: 'Value is above the maximum of 50.',
125
- uri: `file:///${DEFAULT_FILE_NAME}`,
126
- });
127
- });
128
-
129
- it('should not complain when there is no JSON schema associated with the file', async () => {
130
- const sourceCode = `
131
- {% schema %}
132
- ${JSON.stringify(INVALID_SECTION_SCHEMA, null, 2)}
133
- {% endschema %}
134
- `;
135
-
136
- const offenses = await runLiquidCheck(
137
- ValidSchema,
138
- sourceCode,
139
- '/blocks/file.liquid',
140
- buildMockDeps(),
141
- );
142
-
143
- expect(offenses).to.have.length(0);
144
- });
145
-
146
- it('should not complain when a section schema is valid', async () => {
147
- const sourceCode = `
148
- {% schema %}
149
- ${JSON.stringify(VALID_SECTION_SCHEMA, null, 2)}
150
- {% endschema %}
151
- `;
152
-
153
- const offenses = await runLiquidCheck(
154
- ValidSchema,
155
- sourceCode,
156
- DEFAULT_FILE_NAME,
157
- buildMockDeps(),
158
- );
159
-
160
- expect(offenses).to.have.length(0);
161
- });
162
-
163
- it('should not complain when a schema is invalid outside of sections', async () => {
164
- const sourceCode = `
165
- {% schema %}
166
- ${JSON.stringify(INVALID_SECTION_SCHEMA, null, 2)}
167
- {% endschema %}
168
- `;
169
-
170
- const offenses = await runLiquidCheck(ValidSchema, sourceCode);
171
-
172
- expect(offenses).to.have.length(0);
173
- });
174
- });
@@ -1,41 +0,0 @@
1
- import { LiquidCheckDefinition, Severity, SourceCodeType } from '../../types';
2
-
3
- export const ValidSchema: LiquidCheckDefinition = {
4
- meta: {
5
- code: 'ValidSchema',
6
- name: 'Prevent invalid JSON in {% schema %} tags',
7
- docs: {
8
- description: 'This check is aimed at eliminating JSON errors in schema tags.',
9
- recommended: true,
10
- url: 'https://shopify.dev/docs/storefronts/themes/tools/theme-check/checks/valid-schema',
11
- },
12
- type: SourceCodeType.LiquidHtml,
13
- severity: Severity.ERROR,
14
- schema: {},
15
- targets: [],
16
- },
17
-
18
- create(context) {
19
- return {
20
- async LiquidRawTag(node) {
21
- if (node.name !== 'schema' || node.body.kind !== 'json' || !context.validateJSON) {
22
- return;
23
- }
24
- const jsonString = node.source.slice(
25
- node.blockStartPosition.end,
26
- node.blockEndPosition.start,
27
- );
28
- const problems = await context.validateJSON(context.file.uri, jsonString);
29
- if (!problems) return;
30
-
31
- for (const problem of problems) {
32
- context.report({
33
- message: problem.message,
34
- startIndex: node.blockStartPosition.end + problem.startIndex,
35
- endIndex: node.blockStartPosition.end + problem.endIndex,
36
- });
37
- }
38
- },
39
- };
40
- },
41
- };
@@ -1,112 +0,0 @@
1
- import { expect, describe, it } from 'vitest';
2
- import { highlightedOffenses, runLiquidCheck, check } from '../../test';
3
- import { ValidSchemaName } from './index';
4
- import { ThemeSchemaType } from '../..';
5
-
6
- const DEFAULT_FILE_NAME = 'sections/file.liquid';
7
-
8
- describe('Module: ValidSchemaName', () => {
9
- // We have a different check for that
10
- it('reports no offense when the schema is invalid', async () => {
11
- const sourceCode = `
12
- {% schema %}
13
- {
14
- "name": 10
15
- }
16
- {% endschema %}
17
- `;
18
- const offenses = await runLiquidCheck(ValidSchemaName, sourceCode, DEFAULT_FILE_NAME, {
19
- getSectionSchema: async () => ({
20
- ast: new Error('Invalid schema'),
21
- parsed: new Error('Invalid schema'),
22
- validSchema: new Error('Invalid schema'),
23
- name: 'file',
24
- type: ThemeSchemaType.Section,
25
- offset: 0,
26
- value: '',
27
- staticBlockDefs: [],
28
- }),
29
- });
30
-
31
- expect(offenses).toHaveLength(0);
32
- });
33
-
34
- it('reports offense with schema name over 25 characters long', async () => {
35
- const sourceCode = `
36
- {% schema %}
37
- {
38
- "name": "test-schema-name-that-is-too-long"
39
- }
40
- {% endschema %}
41
- `;
42
-
43
- const offenses = await runLiquidCheck(ValidSchemaName, sourceCode, DEFAULT_FILE_NAME);
44
- expect(offenses).toHaveLength(1);
45
- expect(offenses[0].message).toEqual(
46
- "Schema name 'test-schema-name-that-is-too-long' is too long (max 25 characters)",
47
- );
48
-
49
- const highlights = highlightedOffenses({ [DEFAULT_FILE_NAME]: sourceCode }, offenses);
50
- expect(highlights).to.have.length(1);
51
- expect(highlights[0]).toBe('"test-schema-name-that-is-too-long"');
52
- });
53
-
54
- it('reports no offenses with schema name translation that exists and is not over 25 chars long', async () => {
55
- const offenses = await check(
56
- {
57
- 'locales/en.default.schema.json':
58
- '{ "default": { "my_translation_key": "My translation is good."}}',
59
- 'code.liquid': `
60
- {% schema %}
61
- {
62
- "name": "t:default.my_translation_key"
63
- }
64
- {% endschema %}`,
65
- },
66
- [ValidSchemaName],
67
- );
68
-
69
- expect(offenses).toHaveLength(0);
70
- });
71
-
72
- it('reports an offense with schema name translation is missing', async () => {
73
- const offenses = await check(
74
- {
75
- 'locales/en.default.schema.json': '{ "another_translation_key": "Another translation"}',
76
- 'sections/file.liquid': `
77
- {% schema %}
78
- {
79
- "name": "t:my_translation_key"
80
- }
81
- {% endschema %}`,
82
- },
83
- [ValidSchemaName],
84
- );
85
-
86
- expect(offenses).toHaveLength(1);
87
- expect(offenses[0].message).toEqual(
88
- "'t:my_translation_key' does not have a matching entry in 'locales/en.default.schema.json'",
89
- );
90
- });
91
-
92
- it('reports an offense with schema name translation that exists and is over 25 chars long', async () => {
93
- const offenses = await check(
94
- {
95
- 'locales/en.default.schema.json':
96
- '{ "my_translation_key": "My translation is tooooooooo long."}',
97
- 'blocks/code.liquid': `
98
- {% schema %}
99
- {
100
- "name": "t:my_translation_key"
101
- }
102
- {% endschema %}`,
103
- },
104
- [ValidSchemaName],
105
- );
106
-
107
- expect(offenses).toHaveLength(1);
108
- expect(offenses[0].message).toEqual(
109
- "Schema name 'My translation is tooooooooo long.' from 'locales/en.default.schema.json' is too long (max 25 characters)",
110
- );
111
- });
112
- });
@@ -1,75 +0,0 @@
1
- import { getLocEnd, getLocStart, nodeAtPath } from '../../json';
2
- import { getSchema } from '../../to-schema';
3
- import { LiquidCheckDefinition, LiteralNode, Severity, SourceCodeType } from '../../types';
4
- import { deepGet } from '../../utils';
5
-
6
- const MAX_SCHEMA_NAME_LENGTH = 25;
7
-
8
- export const ValidSchemaName: LiquidCheckDefinition = {
9
- meta: {
10
- code: 'ValidSchemaName',
11
- name: 'Enforce valid schema name',
12
- docs: {
13
- description: 'This check is aimed at ensuring a valid schema name.',
14
- recommended: true,
15
- url: 'https://shopify.dev/docs/storefronts/themes/tools/theme-check/checks/valid-schema-name',
16
- },
17
- type: SourceCodeType.LiquidHtml,
18
- severity: Severity.ERROR,
19
- schema: {},
20
- targets: [],
21
- },
22
-
23
- create(context) {
24
- return {
25
- async LiquidRawTag(node) {
26
- if (node.name !== 'schema' || node.body.kind !== 'json') {
27
- return;
28
- }
29
-
30
- const offset = node.blockStartPosition.end;
31
- const schema = await getSchema(context);
32
- const { validSchema, ast } = schema ?? {};
33
- if (!validSchema || validSchema instanceof Error) return;
34
- if (!ast || ast instanceof Error) return;
35
-
36
- const name = validSchema.name;
37
- if (!name) return;
38
-
39
- // We can make this type assertion because we know the schema is valid
40
- const nameNode = nodeAtPath(ast, ['name'])! as LiteralNode;
41
- const startIndex = offset + getLocStart(nameNode);
42
- const endIndex = offset + getLocEnd(nameNode);
43
-
44
- if (name.startsWith('t:')) {
45
- const defaultLocale = await context.getDefaultLocale();
46
- const key = name.replace('t:', '');
47
- const defaultTranslations = await context.getDefaultSchemaTranslations();
48
- const translation = deepGet(defaultTranslations, key.split('.'));
49
-
50
- if (translation === undefined) {
51
- context.report({
52
- message: `'${name}' does not have a matching entry in 'locales/${defaultLocale}.default.schema.json'`,
53
- startIndex,
54
- endIndex,
55
- });
56
- }
57
-
58
- if (translation !== undefined && translation.length > MAX_SCHEMA_NAME_LENGTH) {
59
- context.report({
60
- message: `Schema name '${translation}' from 'locales/${defaultLocale}.default.schema.json' is too long (max 25 characters)`,
61
- startIndex,
62
- endIndex,
63
- });
64
- }
65
- } else if (name.length > MAX_SCHEMA_NAME_LENGTH) {
66
- context.report({
67
- message: `Schema name '${name}' is too long (max 25 characters)`,
68
- startIndex,
69
- endIndex,
70
- });
71
- }
72
- },
73
- };
74
- },
75
- };