@platformos/platformos-check-common 0.0.7 → 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 (309) hide show
  1. package/CHANGELOG.md +8 -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/doc-generator/DocBlockGenerator.d.ts +16 -0
  84. package/dist/doc-generator/DocBlockGenerator.js +464 -0
  85. package/dist/doc-generator/DocBlockGenerator.js.map +1 -0
  86. package/dist/doc-generator/index.d.ts +1 -0
  87. package/dist/doc-generator/index.js +6 -0
  88. package/dist/doc-generator/index.js.map +1 -0
  89. package/dist/find-root.d.ts +7 -10
  90. package/dist/find-root.js +10 -17
  91. package/dist/find-root.js.map +1 -1
  92. package/dist/fixes/autofix.d.ts +4 -4
  93. package/dist/fixes/autofix.js +2 -2
  94. package/dist/fixes/autofix.js.map +1 -1
  95. package/dist/fixes/correctors/index.js +4 -0
  96. package/dist/fixes/correctors/index.js.map +1 -1
  97. package/dist/index.d.ts +4 -5
  98. package/dist/index.js +34 -17
  99. package/dist/index.js.map +1 -1
  100. package/dist/jsonc/parse.d.ts +1 -1
  101. package/dist/jsonc/parse.js +1 -1
  102. package/dist/liquid-doc/arguments.d.ts +7 -8
  103. package/dist/liquid-doc/arguments.js +20 -28
  104. package/dist/liquid-doc/arguments.js.map +1 -1
  105. package/dist/liquid-doc/liquidDoc.d.ts +1 -1
  106. package/dist/liquid-doc/liquidDoc.js.map +1 -1
  107. package/dist/liquid-doc/utils.d.ts +1 -1
  108. package/dist/liquid-doc/utils.js +4 -3
  109. package/dist/liquid-doc/utils.js.map +1 -1
  110. package/dist/path.d.ts +1 -0
  111. package/dist/path.js +5 -1
  112. package/dist/path.js.map +1 -1
  113. package/dist/test/MockApp.d.ts +16 -0
  114. package/dist/test/MockApp.js +16 -0
  115. package/dist/test/MockApp.js.map +1 -0
  116. package/dist/test/MockFileSystem.d.ts +3 -3
  117. package/dist/test/MockFileSystem.js +6 -6
  118. package/dist/test/MockFileSystem.js.map +1 -1
  119. package/dist/test/index.d.ts +1 -1
  120. package/dist/test/index.js +1 -1
  121. package/dist/test/index.js.map +1 -1
  122. package/dist/test/test-helper.d.ts +10 -9
  123. package/dist/test/test-helper.js +15 -106
  124. package/dist/test/test-helper.js.map +1 -1
  125. package/dist/to-schema.d.ts +1 -1
  126. package/dist/to-source-code.d.ts +3 -2
  127. package/dist/to-source-code.js +20 -0
  128. package/dist/to-source-code.js.map +1 -1
  129. package/dist/tsconfig.tsbuildinfo +1 -1
  130. package/dist/types/platformos-liquid-docs.d.ts +128 -0
  131. package/dist/types/platformos-liquid-docs.js +3 -0
  132. package/dist/types/platformos-liquid-docs.js.map +1 -0
  133. package/dist/types/schemas/index.d.ts +0 -2
  134. package/dist/types/schemas/index.js.map +1 -1
  135. package/dist/types.d.ts +18 -67
  136. package/dist/types.js +3 -5
  137. package/dist/types.js.map +1 -1
  138. package/dist/utils/block.js.map +1 -1
  139. package/dist/utils/index.d.ts +0 -1
  140. package/dist/utils/index.js +0 -1
  141. package/dist/utils/index.js.map +1 -1
  142. package/dist/yaml/parse.d.ts +5 -0
  143. package/dist/yaml/parse.js +94 -0
  144. package/dist/yaml/parse.js.map +1 -0
  145. package/package.json +4 -3
  146. package/src/{AugmentedThemeDocset.spec.ts → AugmentedPlatformOSDocset.spec.ts} +47 -34
  147. package/src/AugmentedPlatformOSDocset.ts +89 -0
  148. package/src/JSONValidator.ts +1 -1
  149. package/src/checks/deprecated-filter/index.spec.ts +76 -248
  150. package/src/checks/deprecated-filter/index.ts +5 -53
  151. package/src/checks/deprecated-tag/index.spec.ts +85 -34
  152. package/src/checks/deprecated-tag/index.ts +27 -22
  153. package/src/checks/duplicate-function-arguments/index.ts +1 -1
  154. package/src/checks/duplicate-render-partial-arguments/index.ts +1 -1
  155. package/src/checks/graphql/index.ts +1 -1
  156. package/src/checks/img-width-and-height/index.ts +1 -1
  157. package/src/checks/index.ts +11 -80
  158. package/src/checks/invalid-hash-assign-target/index.spec.ts +14 -14
  159. package/src/checks/json-syntax-error/index.ts +1 -1
  160. package/src/checks/liquid-html-syntax-error/checks/InvalidBooleanExpression.spec.ts +0 -11
  161. package/src/checks/liquid-html-syntax-error/checks/InvalidLoopArguments.spec.ts +1 -2
  162. package/src/checks/liquid-html-syntax-error/index.spec.ts +1 -6
  163. package/src/checks/liquid-html-syntax-error/index.ts +2 -2
  164. package/src/checks/matching-translations/index.spec.ts +89 -346
  165. package/src/checks/matching-translations/index.ts +24 -35
  166. package/src/checks/metadata-params/index.ts +5 -7
  167. package/src/checks/missing-asset/index.ts +1 -1
  168. package/src/checks/{missing-template → missing-partial}/index.spec.ts +6 -6
  169. package/src/checks/{missing-template → missing-partial}/index.ts +6 -20
  170. package/src/checks/orphaned-partial/index.ts +3 -3
  171. package/src/checks/parser-blocking-script/index.spec.ts +0 -118
  172. package/src/checks/parser-blocking-script/index.ts +3 -33
  173. package/src/checks/parser-blocking-script/suggestions.ts +1 -28
  174. package/src/checks/translation-key-exists/index.ts +1 -1
  175. package/src/checks/unclosed-html-element/index.ts +5 -1
  176. package/src/checks/undefined-object/index.spec.ts +3 -109
  177. package/src/checks/undefined-object/index.ts +8 -33
  178. package/src/checks/unique-doc-param-names/index.ts +1 -1
  179. package/src/checks/unknown-filter/index.spec.ts +2 -2
  180. package/src/checks/unknown-filter/index.ts +3 -3
  181. package/src/checks/unknown-property/index.ts +1 -1
  182. package/src/checks/unrecognized-render-partial-arguments/index.spec.ts +5 -5
  183. package/src/checks/unrecognized-render-partial-arguments/index.ts +2 -5
  184. package/src/checks/unused-assign/index.spec.ts +0 -30
  185. package/src/checks/unused-assign/index.ts +1 -1
  186. package/src/checks/unused-doc-param/index.ts +1 -1
  187. package/src/checks/utils.ts +1 -1
  188. package/src/checks/valid-doc-param-types/index.ts +4 -4
  189. package/src/checks/valid-html-translation/index.spec.ts +42 -32
  190. package/src/checks/valid-html-translation/index.ts +7 -7
  191. package/src/checks/valid-json/index.ts +1 -1
  192. package/src/checks/valid-render-partial-argument-types/index.ts +2 -5
  193. package/src/checks/variable-name/index.ts +1 -1
  194. package/src/context-utils.spec.ts +49 -77
  195. package/src/context-utils.ts +39 -128
  196. package/src/disabled-checks/index.spec.ts +35 -0
  197. package/src/disabled-checks/index.ts +4 -2
  198. package/src/find-root.ts +12 -22
  199. package/src/fixes/autofix.spec.ts +2 -2
  200. package/src/fixes/autofix.ts +4 -4
  201. package/src/fixes/correctors/index.ts +4 -0
  202. package/src/ignore.spec.ts +0 -1
  203. package/src/index.ts +33 -21
  204. package/src/jsonc/parse.ts +1 -1
  205. package/src/liquid-doc/arguments.spec.ts +19 -45
  206. package/src/liquid-doc/arguments.ts +26 -39
  207. package/src/liquid-doc/liquidDoc.ts +1 -2
  208. package/src/liquid-doc/utils.ts +4 -3
  209. package/src/path.ts +1 -0
  210. package/src/test/{MockTheme.ts → MockApp.ts} +1 -1
  211. package/src/test/MockFileSystem.ts +6 -6
  212. package/src/test/index.ts +1 -1
  213. package/src/test/test-helper.ts +29 -127
  214. package/src/to-source-code.ts +20 -1
  215. package/src/types/{theme-liquid-docs.ts → platformos-liquid-docs.ts} +8 -13
  216. package/src/types/schemas/index.ts +0 -2
  217. package/src/types.ts +21 -92
  218. package/src/utils/index.ts +0 -1
  219. package/src/yaml/parse.ts +111 -0
  220. package/src/AugmentedThemeDocset.ts +0 -137
  221. package/src/checks/app-block-missing-schema/index.spec.ts +0 -121
  222. package/src/checks/app-block-missing-schema/index.ts +0 -46
  223. package/src/checks/app-block-valid-tags/index.spec.ts +0 -96
  224. package/src/checks/app-block-valid-tags/index.ts +0 -54
  225. package/src/checks/asset-preload/index.spec.ts +0 -78
  226. package/src/checks/asset-preload/index.ts +0 -65
  227. package/src/checks/asset-size-app-block-css/index.spec.ts +0 -88
  228. package/src/checks/asset-size-app-block-css/index.ts +0 -78
  229. package/src/checks/asset-size-app-block-javascript/index.spec.ts +0 -66
  230. package/src/checks/asset-size-app-block-javascript/index.ts +0 -78
  231. package/src/checks/asset-size-css/index.spec.ts +0 -166
  232. package/src/checks/asset-size-css/index.ts +0 -160
  233. package/src/checks/asset-size-javascript/index.spec.ts +0 -184
  234. package/src/checks/asset-size-javascript/index.ts +0 -144
  235. package/src/checks/block-id-usage/index.spec.ts +0 -76
  236. package/src/checks/block-id-usage/index.ts +0 -72
  237. package/src/checks/cdn-preconnect/index.spec.ts +0 -40
  238. package/src/checks/cdn-preconnect/index.ts +0 -43
  239. package/src/checks/content-for-header-modification/index.spec.ts +0 -65
  240. package/src/checks/content-for-header-modification/index.ts +0 -72
  241. package/src/checks/deprecate-bgsizes/index.spec.ts +0 -41
  242. package/src/checks/deprecate-bgsizes/index.ts +0 -49
  243. package/src/checks/deprecate-lazysizes/index.spec.ts +0 -26
  244. package/src/checks/deprecate-lazysizes/index.ts +0 -58
  245. package/src/checks/deprecated-filter/fixes.ts +0 -264
  246. package/src/checks/deprecated-fonts-on-sections-and-blocks/deprecated-fonts-data.ts +0 -1343
  247. package/src/checks/deprecated-fonts-on-sections-and-blocks/index.spec.ts +0 -613
  248. package/src/checks/deprecated-fonts-on-sections-and-blocks/index.ts +0 -284
  249. package/src/checks/deprecated-fonts-on-settings-schema/index.spec.ts +0 -102
  250. package/src/checks/deprecated-fonts-on-settings-schema/index.ts +0 -66
  251. package/src/checks/duplicate-content-for-arguments/index.spec.ts +0 -98
  252. package/src/checks/duplicate-content-for-arguments/index.ts +0 -43
  253. package/src/checks/empty-block-content/index.spec.ts +0 -117
  254. package/src/checks/empty-block-content/index.ts +0 -60
  255. package/src/checks/hardcoded-routes/index.spec.ts +0 -58
  256. package/src/checks/hardcoded-routes/index.ts +0 -100
  257. package/src/checks/json-missing-block/index.spec.ts +0 -435
  258. package/src/checks/json-missing-block/index.ts +0 -56
  259. package/src/checks/json-missing-block/missing-block-utils.ts +0 -147
  260. package/src/checks/liquid-free-settings/index.spec.ts +0 -180
  261. package/src/checks/liquid-free-settings/index.ts +0 -79
  262. package/src/checks/missing-content-for-arguments/index.spec.ts +0 -144
  263. package/src/checks/missing-content-for-arguments/index.ts +0 -46
  264. package/src/checks/pagination-size/index.spec.ts +0 -158
  265. package/src/checks/pagination-size/index.ts +0 -104
  266. package/src/checks/remote-asset/index.spec.ts +0 -280
  267. package/src/checks/remote-asset/index.ts +0 -238
  268. package/src/checks/reserved-doc-param-names/index.spec.ts +0 -62
  269. package/src/checks/reserved-doc-param-names/index.ts +0 -57
  270. package/src/checks/schema-presets-block-order/index.spec.ts +0 -344
  271. package/src/checks/schema-presets-block-order/index.ts +0 -154
  272. package/src/checks/schema-presets-static-blocks/index.spec.ts +0 -145
  273. package/src/checks/schema-presets-static-blocks/index.ts +0 -126
  274. package/src/checks/static-stylesheet-and-javascript-tags/index.spec.ts +0 -257
  275. package/src/checks/static-stylesheet-and-javascript-tags/index.ts +0 -48
  276. package/src/checks/unique-settings-id/index.spec.ts +0 -24
  277. package/src/checks/unique-settings-id/index.ts +0 -84
  278. package/src/checks/unique-settings-id/test-data.ts +0 -1191
  279. package/src/checks/unique-static-block-id/index.spec.ts +0 -55
  280. package/src/checks/unique-static-block-id/index.ts +0 -60
  281. package/src/checks/unrecognized-content-for-arguments/index.spec.ts +0 -145
  282. package/src/checks/unrecognized-content-for-arguments/index.ts +0 -55
  283. package/src/checks/valid-block-target/index.spec.ts +0 -1396
  284. package/src/checks/valid-block-target/index.ts +0 -142
  285. package/src/checks/valid-content-for-argument-types/index.spec.ts +0 -382
  286. package/src/checks/valid-content-for-argument-types/index.ts +0 -42
  287. package/src/checks/valid-content-for-arguments/index.spec.ts +0 -107
  288. package/src/checks/valid-content-for-arguments/index.ts +0 -98
  289. package/src/checks/valid-local-blocks/index.spec.ts +0 -286
  290. package/src/checks/valid-local-blocks/index.ts +0 -100
  291. package/src/checks/valid-local-blocks/valid-block-utils.ts +0 -97
  292. package/src/checks/valid-schema/index.spec.ts +0 -174
  293. package/src/checks/valid-schema/index.ts +0 -41
  294. package/src/checks/valid-schema-name/index.spec.ts +0 -112
  295. package/src/checks/valid-schema-name/index.ts +0 -75
  296. package/src/checks/valid-settings-key/index.spec.ts +0 -321
  297. package/src/checks/valid-settings-key/index.ts +0 -144
  298. package/src/checks/valid-static-block-type/index.spec.ts +0 -38
  299. package/src/checks/valid-static-block-type/index.ts +0 -58
  300. package/src/checks/valid-visible-if/index.spec.ts +0 -619
  301. package/src/checks/valid-visible-if/index.ts +0 -184
  302. package/src/checks/valid-visible-if/visible-if-utils.ts +0 -158
  303. package/src/tags/content-for.ts +0 -25
  304. package/src/to-schema.ts +0 -231
  305. package/src/types/schemas/section.ts +0 -86
  306. package/src/types/schemas/theme-block.ts +0 -34
  307. package/src/types/theme-schemas.ts +0 -80
  308. package/src/utils/block.ts +0 -300
  309. 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
- };