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