@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,117 +0,0 @@
1
- import { expect, describe, it } from 'vitest';
2
- import { EmptyBlockContent } from '.';
3
- import { check, MockTheme } from '../../test';
4
-
5
- describe('Module: EmptyBlockContent', () => {
6
- const paths = ['sections', 'blocks'];
7
-
8
- paths.forEach((path) => {
9
- it(`should not report offenses when the blocks array is not empty in ${path}`, async () => {
10
- const theme: MockTheme = {
11
- [`${path}/test_block.liquid`]: `
12
- <div>
13
- {% content_for 'blocks' %}
14
- </div>
15
- {% schema %}
16
- {
17
- "name": "Test",
18
- "blocks": [
19
- {
20
- "type": "test-block"
21
- }
22
- ]
23
- }
24
- {% endschema %}
25
- `,
26
- };
27
-
28
- const offenses = await check(theme, [EmptyBlockContent]);
29
- expect(offenses).to.have.length(0);
30
- });
31
-
32
- it(`should report offenses when the blocks array is empty in ${path}`, async () => {
33
- const theme: MockTheme = {
34
- [`${path}/test_block.liquid`]: `
35
- <div>
36
- {% content_for 'blocks' %}
37
- </div>
38
- {% schema %}
39
- {
40
- "name": "Test",
41
- "blocks": []
42
- }
43
- {% endschema %}
44
- `,
45
- };
46
-
47
- const offenses = await check(theme, [EmptyBlockContent]);
48
- expect(offenses).to.have.length(1);
49
- expect(offenses[0].message).to.equal(
50
- `The 'content_for "blocks"' tag is present, but the blocks array is empty.`,
51
- );
52
- });
53
-
54
- it(`should report offenses when the blocks array is empty with the correct indices in ${path}`, async () => {
55
- const theme: MockTheme = {
56
- [`${path}/test_block.liquid`]: `
57
- <div>
58
- {% content_for 'blocks' %}
59
- </div>
60
- {% schema %}
61
- {
62
- "name": "Test",
63
- "blocks": []
64
- }
65
- {% endschema %}
66
- `,
67
- };
68
-
69
- const offenses = await check(theme, [EmptyBlockContent]);
70
- expect(offenses).to.have.length(1);
71
- const content = theme[`${path}/test_block.liquid`];
72
- const erroredContent = content.slice(offenses[0].start.index, offenses[0].end.index);
73
- expect(erroredContent).to.equal("{% content_for 'blocks' %}");
74
- });
75
-
76
- it(`should report offenses when the blocks array has not been defined in ${path}`, async () => {
77
- const theme: MockTheme = {
78
- [`${path}/test_block.liquid`]: `
79
- <div>
80
- {% content_for 'blocks' %}
81
- </div>
82
- {% schema %}
83
- {
84
- "name": "Test"
85
- }
86
- {% endschema %}
87
- `,
88
- };
89
-
90
- const offenses = await check(theme, [EmptyBlockContent]);
91
- expect(offenses).to.have.length(1);
92
- expect(offenses[0].message).to.equal(
93
- `The 'content_for "blocks"' tag is present, but the blocks array is not defined.`,
94
- );
95
- });
96
-
97
- it(`should not report offenses when 'content_for blocks' is not present in ${path}`, async () => {
98
- const theme: MockTheme = {
99
- [`${path}/test_block.liquid`]: `
100
- {% schema %}
101
- {
102
- "name": "Test",
103
- "blocks": [
104
- {
105
- "type": "test-block"
106
- }
107
- ]
108
- }
109
- {% endschema %}
110
- `,
111
- };
112
-
113
- const offenses = await check(theme, [EmptyBlockContent]);
114
- expect(offenses).to.be.empty;
115
- });
116
- });
117
- });
@@ -1,60 +0,0 @@
1
- import { LiquidCheckDefinition, Severity, SourceCodeType } from '../../types';
2
- import { getSchema } from '../../to-schema';
3
- import { Position } from '@platformos/liquid-html-parser';
4
-
5
- export const EmptyBlockContent: LiquidCheckDefinition = {
6
- meta: {
7
- code: 'EmptyBlockContent',
8
- name: 'Prevent empty block content',
9
- docs: {
10
- description:
11
- 'This check exists to warn you when the blocks array at the root level of the schema is empty.',
12
- recommended: true,
13
- url: 'https://shopify.dev/docs/storefronts/themes/tools/theme-check/checks/empty-block-content',
14
- },
15
- type: SourceCodeType.LiquidHtml,
16
- severity: Severity.WARNING,
17
- schema: {},
18
- targets: [],
19
- },
20
-
21
- create(context) {
22
- let isContentForBlocksLocationSet = false;
23
- let contentForBlocksLocation: Position = { start: 0, end: 0 };
24
-
25
- return {
26
- async LiquidTag(node) {
27
- if (node.name !== 'content_for') return;
28
-
29
- const nodeMarkup = node.markup;
30
- if (typeof nodeMarkup === 'object' && nodeMarkup.contentForType.value === 'blocks') {
31
- contentForBlocksLocation.start = node.blockStartPosition.start;
32
- contentForBlocksLocation.end = node.blockStartPosition.end;
33
- isContentForBlocksLocationSet = true;
34
- }
35
- },
36
-
37
- async onCodePathEnd() {
38
- const schema = await getSchema(context);
39
- const { validSchema, ast } = schema ?? {};
40
- if (!validSchema || validSchema instanceof Error) return;
41
- if (!ast || ast instanceof Error) return;
42
-
43
- const blocks = validSchema.blocks;
44
- if (isContentForBlocksLocationSet && !blocks) {
45
- context.report({
46
- message: `The 'content_for "blocks"' tag is present, but the blocks array is not defined.`,
47
- startIndex: contentForBlocksLocation.start,
48
- endIndex: contentForBlocksLocation.end,
49
- });
50
- } else if (isContentForBlocksLocationSet && blocks && blocks.length === 0) {
51
- context.report({
52
- message: `The 'content_for "blocks"' tag is present, but the blocks array is empty.`,
53
- startIndex: contentForBlocksLocation.start,
54
- endIndex: contentForBlocksLocation.end,
55
- });
56
- }
57
- },
58
- };
59
- },
60
- };
@@ -1,58 +0,0 @@
1
- import { expect, describe, it } from 'vitest';
2
- import { HardcodedRoutes } from './index';
3
- import { runLiquidCheck, highlightedOffenses } from '../../test';
4
-
5
- describe('Module: HardcodedRoutes', () => {
6
- it('should report offenses for hardcoded routes', async () => {
7
- const sourceCode = `
8
- <a href="/"></a>
9
- <form action="/search"></form>
10
- <a href="/account/login"></a>
11
- <a href="/collections/{{ collection.handle }}"></a>
12
- <a href="/cart/change?line={{ forloop.index }}&amp;quantity=0"></a>
13
- <li>{{ 'Socks' | link_to: '/collections/socks' }}</li>
14
- <li>{{ 'Home' | link_to: '/' }}</li>
15
- <li>{{ 'Cart (' | append: cart.item_count | append: ')' | link_to: '/cart' }}</li>
16
- `;
17
-
18
- const offenses = await runLiquidCheck(HardcodedRoutes, sourceCode);
19
- expect(offenses).to.have.length(8);
20
-
21
- const errorMessages = offenses.map((offense) => offense.message);
22
- expect(errorMessages).to.deep.equal([
23
- 'Use routes object {{ routes.root_url }} instead of hardcoding /',
24
- 'Use routes object {{ routes.search_url }} instead of hardcoding /search',
25
- 'Use routes object {{ routes.account_login_url }} instead of hardcoding /account/login',
26
- 'Use routes object {{ routes.collections_url }} instead of hardcoding /collections',
27
- 'Use routes object {{ routes.cart_change_url }} instead of hardcoding /cart/change',
28
- 'Use routes object {{ routes.collections_url }} instead of hardcoding /collections',
29
- 'Use routes object {{ routes.root_url }} instead of hardcoding /',
30
- 'Use routes object {{ routes.cart_url }} instead of hardcoding /cart',
31
- ]);
32
-
33
- const highlights = highlightedOffenses({ 'file.liquid': sourceCode }, offenses);
34
- expect(highlights).to.deep.equal([
35
- '/',
36
- '/search',
37
- '/account/login',
38
- '/collections',
39
- '/cart/change',
40
- '/collections',
41
- '/',
42
- '/cart',
43
- ]);
44
- });
45
-
46
- it('should not report offenses for route objects', async () => {
47
- const sourceCode = `
48
- <form action="{{ routes.search_url }}"></form>
49
- <a href="/{{ blog.url }}"></a>
50
- <a href="/admin"></a>
51
- <a href="#MainContent"></a>
52
- <li>{{ 'About' | link_to: '/pages/about' }}</li>
53
- `;
54
-
55
- const offenses = await runLiquidCheck(HardcodedRoutes, sourceCode);
56
- expect(offenses).to.have.length(0);
57
- });
58
- });
@@ -1,100 +0,0 @@
1
- import { NodeTypes } from '@platformos/liquid-html-parser';
2
- import { Severity, SourceCodeType, LiquidCheckDefinition } from '../../types';
3
- import { isAttr, isNodeOfType, isValuedHtmlAttribute, ValuedHtmlAttribute } from '../utils';
4
-
5
- const ROUTES: Record<string, string> = {
6
- '/': 'root_url',
7
- '/account': 'account_url',
8
- '/account/addresses': 'account_addresses_url',
9
- '/account/login': 'account_login_url',
10
- '/account/logout': 'account_logout_url',
11
- '/account/recover': 'account_recover_url',
12
- '/account/register': 'account_register_url',
13
- '/cart': 'cart_url',
14
- '/cart/add': 'cart_add_url',
15
- '/cart/change': 'cart_change_url',
16
- '/cart/clear': 'cart_clear_url',
17
- '/cart/update': 'cart_update_url',
18
- '/collections': 'collections_url',
19
- '/collections/all': 'all_products_collection_url',
20
- '/customer_authentication/login': 'storefront_login_url',
21
- '/recommendations/products': 'product_recommendations_url',
22
- '/search': 'search_url',
23
- '/search/suggest': 'predictive_search_url',
24
- };
25
-
26
- const HARDCODED_ROUTES = Object.keys(ROUTES).reverse();
27
-
28
- export const HardcodedRoutes: LiquidCheckDefinition = {
29
- meta: {
30
- code: 'HardcodedRoutes',
31
- name: 'Hardcoded Routes',
32
- docs: {
33
- description: 'This check encourages using the routes object instead of hardcoding URLs.',
34
- recommended: true,
35
- url: 'https://shopify.dev/docs/storefronts/themes/tools/theme-check/checks/hardcoded-routes',
36
- },
37
- type: SourceCodeType.LiquidHtml,
38
- severity: Severity.WARNING,
39
- schema: {},
40
- targets: [],
41
- },
42
-
43
- create(context) {
44
- return {
45
- async HtmlElement(node) {
46
- // checks for hardcoded routes in href and action attributes
47
- const attrWithHardcodedRoute: ValuedHtmlAttribute | undefined = node.attributes
48
- .filter(isValuedHtmlAttribute)
49
- .find((attr) => (isAttr(attr, 'action') || isAttr(attr, 'href')) && hardcodedRoute(attr));
50
-
51
- if (attrWithHardcodedRoute) {
52
- const attr = attrWithHardcodedRoute;
53
- const route = hardcodedRoute(attr)!;
54
- const routeURL = ROUTES[route];
55
- const startIndex = attr.attributePosition.start;
56
- const endIndex = startIndex + route.length;
57
-
58
- context.report({
59
- message: `Use routes object {{ routes.${routeURL} }} instead of hardcoding ${route}`,
60
- startIndex,
61
- endIndex,
62
- });
63
- }
64
- },
65
-
66
- async LiquidFilter(node) {
67
- // checks for hardcoded routes in link_to values {{ 'Cart' | link_to: '/cart' }}
68
- if (node.name !== 'link_to') return;
69
-
70
- const linkToArg = node.args[0];
71
- const linkToValue = linkToArg.type === 'String' ? linkToArg.value : '';
72
- const route = HARDCODED_ROUTES.find((route) =>
73
- route === '/' ? route === linkToValue : linkToValue.startsWith(route),
74
- );
75
-
76
- if (route) {
77
- const routeURL = ROUTES[route];
78
- // we add 1 to the start index to exclude the quotes
79
- const startIndex = linkToArg.position.start + 1;
80
-
81
- context.report({
82
- message: `Use routes object {{ routes.${routeURL} }} instead of hardcoding ${route}`,
83
- startIndex,
84
- endIndex: startIndex + route.length,
85
- });
86
- }
87
- },
88
- };
89
- },
90
- };
91
-
92
- function hardcodedRoute(attr: ValuedHtmlAttribute): string | undefined {
93
- if (!isNodeOfType(NodeTypes.TextNode, attr.value[0])) return;
94
-
95
- const value = attr.value[0].value;
96
-
97
- return HARDCODED_ROUTES.find((route) =>
98
- route === '/' ? route === value && attr.value.length === 1 : value.startsWith(route),
99
- );
100
- }