@platformos/platformos-check-common 0.0.6 → 0.0.8

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