@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,55 +0,0 @@
1
- import { describe, it, expect } from 'vitest';
2
- import { runLiquidCheck } from '../../test';
3
- import { UniqueStaticBlockId } from './index';
4
-
5
- describe('Module: UniqueStaticBlockId', () => {
6
- it('should report an error when two static blocks have the same id', async () => {
7
- const sourceCode = `
8
- {% content_for "block", type: "text", id: "static-block" %}
9
- {% content_for "block", type: "text", id: "static-block" %}
10
- `;
11
-
12
- const offenses = await runLiquidCheck(UniqueStaticBlockId, sourceCode);
13
-
14
- expect(offenses).to.have.length(1);
15
- expect(offenses[0].message).to.equal(
16
- "The id 'static-block' is already being used by another static block",
17
- );
18
- });
19
-
20
- it('should not report an error when two static blocks have differnt id', async () => {
21
- const sourceCode = `
22
- {% content_for "block", type: "text", id: "static-block1" %}
23
- {% content_for "block", type: "text", id: "static-block2" %}
24
- `;
25
-
26
- const offenses = await runLiquidCheck(UniqueStaticBlockId, sourceCode);
27
-
28
- expect(offenses).to.have.length(0);
29
- });
30
-
31
- it('should report an error when two static blocks have same id and different types', async () => {
32
- const sourceCode = `
33
- {% content_for "block", type: "text", id: "static-block" %}
34
- {% content_for "block", type: "url", id: "static-block" %}
35
- `;
36
-
37
- const offenses = await runLiquidCheck(UniqueStaticBlockId, sourceCode);
38
-
39
- expect(offenses).to.have.length(1);
40
- expect(offenses[0].message).to.equal(
41
- "The id 'static-block' is already being used by another static block",
42
- );
43
- });
44
-
45
- it('should not report an error when two static blocks have different id and different types', async () => {
46
- const sourceCode = `
47
- {% content_for "block", type: "text", id: "static-block1" %}
48
- {% content_for "block", type: "url", id: "static-block2" %}
49
- `;
50
-
51
- const offenses = await runLiquidCheck(UniqueStaticBlockId, sourceCode);
52
-
53
- expect(offenses).to.have.length(0);
54
- });
55
- });
@@ -1,60 +0,0 @@
1
- import { NamedTags, NodeTypes } from '@platformos/liquid-html-parser';
2
- import { LiquidCheckDefinition, Severity, SourceCodeType } from '../../types';
3
- import { isContentForBlock } from '../../utils/markup';
4
-
5
- export const UniqueStaticBlockId: LiquidCheckDefinition = {
6
- meta: {
7
- code: 'UniqueStaticBlockId',
8
- name: 'Prevent use of duplicated ids for blocks rendered statically',
9
- docs: {
10
- description:
11
- 'This check is aimed at preventing the use of duplicated ids for blocks rendered statically.',
12
- url: 'https://shopify.dev/docs/storefronts/themes/tools/theme-check/checks/unique-static-block-id',
13
- recommended: true,
14
- },
15
- type: SourceCodeType.LiquidHtml,
16
- severity: Severity.ERROR,
17
- schema: {},
18
- targets: [],
19
- },
20
-
21
- create(context) {
22
- const usedIds: Set<string> = new Set();
23
- const idRegex = /id:\s*["'](\S+)["']/;
24
- return {
25
- async LiquidTag(node) {
26
- if (node.name !== NamedTags.content_for) {
27
- return;
28
- }
29
-
30
- if (!isContentForBlock(node.markup)) {
31
- return;
32
- }
33
-
34
- const idNode = node.markup.args.find((arg) => arg.name === 'id');
35
-
36
- if (!idNode) {
37
- return; // covered by VariableContentForArguments
38
- }
39
-
40
- const idValueNode = idNode.value;
41
- if (idValueNode.type !== NodeTypes.String) {
42
- return; // covered by VariableContentForArguments
43
- }
44
-
45
- const id = idValueNode.value;
46
-
47
- if (usedIds.has(id)) {
48
- context.report({
49
- message: `The id '${id}' is already being used by another static block`,
50
- startIndex: idValueNode.position.start,
51
- endIndex: idValueNode.position.end,
52
- suggest: [],
53
- });
54
- } else {
55
- usedIds.add(id);
56
- }
57
- },
58
- };
59
- },
60
- };
@@ -1,145 +0,0 @@
1
- import { describe, it, expect } from 'vitest';
2
- import { runLiquidCheck } from '../../test';
3
- import { UnrecognizedContentForArguments } from '.';
4
- import { RESERVED_CONTENT_FOR_ARGUMENTS } from '../../tags/content-for';
5
-
6
- function check(snippet: string, source: string) {
7
- return runLiquidCheck(
8
- UnrecognizedContentForArguments,
9
- source,
10
- undefined,
11
- {},
12
- {
13
- 'blocks/card.liquid': snippet,
14
- },
15
- );
16
- }
17
-
18
- const defaultSnippet = `
19
- {% doc %}
20
- @param {string} required_string - A required string
21
- @param {number} required_number - A required number
22
- @param {boolean} required_boolean - A required boolean
23
- @param {object} required_object - A required object
24
- @param {string} [optional_string] - An optional string
25
- @param {number} [optional_number] - An optional number
26
- @param {object} [optional_object] - An optional object
27
- @param {boolean} [optional_boolean] - An optional boolean
28
- {% enddoc %}
29
- `;
30
-
31
- describe('Module: UnrecognizedContentForArguments', () => {
32
- describe('unknown arguments', () => {
33
- it('should report unknown arguments that are provided in the content_for markup', async () => {
34
- const sourceCode = `
35
- {% content_for 'block',
36
- type: 'card',
37
- required_string: 'My Card',
38
- required_number: 1,
39
- required_boolean: true,
40
- required_object: product,
41
- unknown_param: 'unknown',
42
- second_unknown_param: 'second unknown',
43
- %}
44
- `;
45
- const offenses = await check(defaultSnippet, sourceCode);
46
-
47
- expect(offenses).toHaveLength(2);
48
- expect(offenses[0].message).toBe(
49
- "Unknown argument 'unknown_param' in content_for tag for static block 'card'.",
50
- );
51
- expect(offenses[1].message).toBe(
52
- "Unknown argument 'second_unknown_param' in content_for tag for static block 'card'.",
53
- );
54
- });
55
- });
56
-
57
- describe('edge cases', () => {
58
- it('should not report when static block has no doc comment', async () => {
59
- const sourceCode = `{% content_for 'block', type: 'card', title: 'My Card' %}`;
60
- const offenses = await runLiquidCheck(
61
- UnrecognizedContentForArguments,
62
- sourceCode,
63
- undefined,
64
- {},
65
- {
66
- 'blocks/card.liquid': `<h1>This block has no doc comment</h1>`,
67
- },
68
- );
69
-
70
- expect(offenses).toHaveLength(0);
71
- });
72
-
73
- it('should not report when LiquidDoc definition has no defined params', async () => {
74
- const sourceCode = `{% content_for 'block', type: 'card', title: 'My Card' %}`;
75
- const offenses = await runLiquidCheck(
76
- UnrecognizedContentForArguments,
77
- sourceCode,
78
- undefined,
79
- {},
80
- {
81
- 'blocks/card.liquid': `
82
- {% doc %}
83
- @description this is a description
84
- @example this is an example
85
- {% enddoc %}
86
- <div>{{ title }}</div>
87
- <div>{{ description }}</div>
88
- `,
89
- },
90
- );
91
-
92
- expect(offenses).toHaveLength(0);
93
- });
94
-
95
- it('should not report when block name is a VariableLookup', async () => {
96
- const sourceCode = `{% assign block_name = 'card' %}{% content_for 'block', type: block_name, title: 'My Card' %}`;
97
- const offenses = await runLiquidCheck(
98
- UnrecognizedContentForArguments,
99
- sourceCode,
100
- undefined,
101
- {},
102
- {
103
- 'blocks/card.liquid': `
104
- {% doc %}
105
- @param {string} title - The title of the card
106
- @param {string} description - The description of the card
107
- {% enddoc %}
108
- <div>{{ title }}</div>
109
- <div>{{ description }}</div>
110
- `,
111
- },
112
- );
113
-
114
- expect(offenses).toHaveLength(0);
115
- });
116
-
117
- it('should not report when argument begins with `.closest`', async () => {
118
- const offenses = await check(
119
- `
120
- {% doc %}
121
- @param {string} title - The title of the card
122
- {% enddoc %}
123
- <div>{{ title }}</div>
124
- `,
125
- `{% content_for 'block', type: 'card', id: '123', closest.product: product %}`,
126
- );
127
-
128
- expect(offenses).toHaveLength(0);
129
- });
130
-
131
- it('should not report when argument is a reserved word', async () => {
132
- const offenses = await check(
133
- `
134
- {% doc %}
135
- @param {string} title - The title of the card
136
- {% enddoc %}
137
- <div>{{ title }}</div>
138
- `,
139
- `{% content_for 'block', type: 'card', id: '123', ${RESERVED_CONTENT_FOR_ARGUMENTS[0]}: product %}`,
140
- );
141
-
142
- expect(offenses).toHaveLength(0);
143
- });
144
- });
145
- });
@@ -1,55 +0,0 @@
1
- import { LiquidCheckDefinition, Severity, SourceCodeType } from '../../types';
2
- import { ContentForMarkup } from '@platformos/liquid-html-parser';
3
- import {
4
- getBlockName,
5
- getLiquidDocParams,
6
- reportUnknownArguments,
7
- } from '../../liquid-doc/arguments';
8
- import {
9
- CLOSEST_ARGUMENT,
10
- REQUIRED_CONTENT_FOR_ARGUMENTS,
11
- RESERVED_CONTENT_FOR_ARGUMENTS,
12
- } from '../../tags/content-for';
13
-
14
- export const UnrecognizedContentForArguments: LiquidCheckDefinition = {
15
- meta: {
16
- code: 'UnrecognizedContentForArguments',
17
- name: 'Unrecognized ContentFor Arguments',
18
- docs: {
19
- description:
20
- 'This check ensures that no unknown arguments are used when rendering a static block.',
21
- recommended: true,
22
- url: 'https://shopify.dev/docs/storefronts/themes/tools/theme-check/checks/unrecognized-content-for-arguments',
23
- },
24
- type: SourceCodeType.LiquidHtml,
25
- severity: Severity.WARNING,
26
- schema: {},
27
- targets: [],
28
- },
29
-
30
- create(context) {
31
- const DEFAULT_CONTENT_FOR_ARGS = new Set([
32
- ...RESERVED_CONTENT_FOR_ARGUMENTS,
33
- ...REQUIRED_CONTENT_FOR_ARGUMENTS,
34
- ]);
35
-
36
- return {
37
- async ContentForMarkup(node: ContentForMarkup) {
38
- const blockName = getBlockName(node);
39
-
40
- if (!blockName) return;
41
-
42
- const liquidDocParameters = await getLiquidDocParams(context, `blocks/${blockName}.liquid`);
43
-
44
- if (!liquidDocParameters) return;
45
-
46
- const unknownProvidedParams = node.args
47
- .filter((p) => !liquidDocParameters.has(p.name))
48
- .filter((p) => !DEFAULT_CONTENT_FOR_ARGS.has(p.name))
49
- .filter((p) => !p.name.startsWith(CLOSEST_ARGUMENT));
50
-
51
- reportUnknownArguments(context, node, unknownProvidedParams, blockName);
52
- },
53
- };
54
- },
55
- };