@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
@@ -15,7 +15,7 @@ exports.JSONSyntaxError = {
15
15
  docs: {
16
16
  description: 'This check exists to prevent invalid JSON files in themes.',
17
17
  recommended: true,
18
- url: 'https://shopify.dev/docs/storefronts/themes/tools/theme-check/checks/json-syntax-error',
18
+ url: 'https://documentation.platformos.com/developer-guide/platformos-check/checks/json-syntax-error',
19
19
  },
20
20
  type: types_1.SourceCodeType.JSON,
21
21
  severity: types_1.Severity.ERROR,
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/checks/json-syntax-error/index.ts"],"names":[],"mappings":";;;AACA,6CAAqD;AACrD,uCAA4E;AAC5E,uCAAsC;AAEtC,SAAS,iBAAiB,CAAC,KAAY;IACrC,MAAM,OAAO,GAAG,YAAY,IAAI,KAAK,CAAC,CAAC,CAAE,KAAK,CAAC,UAAqB,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC;IACrF,OAAO,OAAO,CAAC,OAAO,CAAC,eAAe,EAAE,EAAE,CAAC,CAAC;AAC9C,CAAC;AAEY,QAAA,eAAe,GAAwB;IAClD,IAAI,EAAE;QACJ,IAAI,EAAE,iBAAiB;QACvB,IAAI,EAAE,oBAAoB;QAC1B,IAAI,EAAE;YACJ,WAAW,EAAE,4DAA4D;YACzE,WAAW,EAAE,IAAI;YACjB,GAAG,EAAE,wFAAwF;SAC9F;QACD,IAAI,EAAE,sBAAc,CAAC,IAAI;QACzB,QAAQ,EAAE,gBAAQ,CAAC,KAAK;QACxB,MAAM,EAAE,EAAE;QACV,OAAO,EAAE,EAAE;QACX,UAAU,EAAE,IAAI;KACjB;IAED,MAAM,CAAC,OAAO;QACZ,IAAI,OAAO,CAAC,YAAY;YAAE,OAAO,EAAE,CAAC,CAAC,qDAAqD;QAE1F,MAAM,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC;QAC/B,IAAI,CAAC,IAAA,eAAO,EAAC,KAAK,CAAC;YAAE,OAAO,EAAE,CAAC;QAE/B,OAAO;YACL,KAAK,CAAC,eAAe,CAAC,IAAI;gBACxB,IAAI,IAAI,CAAC,GAAG,YAAY,wBAAgB,EAAE,CAAC;oBACzC,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC;wBACpC,OAAO,CAAC,MAAM,CAAC;4BACb,OAAO,EAAE,sBAAsB,CAAC,KAAK,CAAC,KAAK,CAAC;4BAC5C,UAAU,EAAE,KAAK,CAAC,MAAM;4BACxB,QAAQ,EAAE,KAAK,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM;yBACtC,CAAC,CAAC;oBACL,CAAC;gBACH,CAAC;qBAAM,CAAC;oBACN,OAAO,CAAC,MAAM,CAAC;wBACb,OAAO,EAAE,iBAAiB,CAAC,KAAK,CAAC;wBACjC,UAAU,EAAE,CAAC;wBACb,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM;qBAC7B,CAAC,CAAC;gBACL,CAAC;YACH,CAAC;SACF,CAAC;IACJ,CAAC;CACF,CAAC;AAEF,SAAS,sBAAsB,CAAC,SAAyB;IACvD,QAAQ,SAAS,EAAE,CAAC;QAClB;YACE,OAAO,gBAAgB,CAAC;QAC1B;YACE,OAAO,uBAAuB,CAAC;QACjC;YACE,OAAO,wBAAwB,CAAC;QAClC;YACE,OAAO,mBAAmB,CAAC;QAC7B;YACE,OAAO,6CAA6C,CAAC;QACvD;YACE,OAAO,mBAAmB,CAAC;QAC7B;YACE,OAAO,+BAA+B,CAAC;QACzC;YACE,OAAO,iCAAiC,CAAC;QAC3C;YACE,OAAO,uBAAuB,CAAC;QACjC;YACE,OAAO,uBAAuB,CAAC;QACjC;YACE,OAAO,2BAA2B,CAAC;QACrC;YACE,OAAO,0BAA0B,CAAC;QACpC;YACE,OAAO,0BAA0B,CAAC;QACpC;YACE,OAAO,iBAAiB,CAAC;QAC3B;YACE,OAAO,0BAA0B,CAAC;QACpC;YACE,OAAO,mBAAmB,CAAC;QAC7B;YACE,OAAO,qCAAqC,CAAC;IACjD,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/checks/json-syntax-error/index.ts"],"names":[],"mappings":";;;AACA,6CAAqD;AACrD,uCAA4E;AAC5E,uCAAsC;AAEtC,SAAS,iBAAiB,CAAC,KAAY;IACrC,MAAM,OAAO,GAAG,YAAY,IAAI,KAAK,CAAC,CAAC,CAAE,KAAK,CAAC,UAAqB,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC;IACrF,OAAO,OAAO,CAAC,OAAO,CAAC,eAAe,EAAE,EAAE,CAAC,CAAC;AAC9C,CAAC;AAEY,QAAA,eAAe,GAAwB;IAClD,IAAI,EAAE;QACJ,IAAI,EAAE,iBAAiB;QACvB,IAAI,EAAE,oBAAoB;QAC1B,IAAI,EAAE;YACJ,WAAW,EAAE,4DAA4D;YACzE,WAAW,EAAE,IAAI;YACjB,GAAG,EAAE,gGAAgG;SACtG;QACD,IAAI,EAAE,sBAAc,CAAC,IAAI;QACzB,QAAQ,EAAE,gBAAQ,CAAC,KAAK;QACxB,MAAM,EAAE,EAAE;QACV,OAAO,EAAE,EAAE;QACX,UAAU,EAAE,IAAI;KACjB;IAED,MAAM,CAAC,OAAO;QACZ,IAAI,OAAO,CAAC,YAAY;YAAE,OAAO,EAAE,CAAC,CAAC,qDAAqD;QAE1F,MAAM,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC;QAC/B,IAAI,CAAC,IAAA,eAAO,EAAC,KAAK,CAAC;YAAE,OAAO,EAAE,CAAC;QAE/B,OAAO;YACL,KAAK,CAAC,eAAe,CAAC,IAAI;gBACxB,IAAI,IAAI,CAAC,GAAG,YAAY,wBAAgB,EAAE,CAAC;oBACzC,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC;wBACpC,OAAO,CAAC,MAAM,CAAC;4BACb,OAAO,EAAE,sBAAsB,CAAC,KAAK,CAAC,KAAK,CAAC;4BAC5C,UAAU,EAAE,KAAK,CAAC,MAAM;4BACxB,QAAQ,EAAE,KAAK,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM;yBACtC,CAAC,CAAC;oBACL,CAAC;gBACH,CAAC;qBAAM,CAAC;oBACN,OAAO,CAAC,MAAM,CAAC;wBACb,OAAO,EAAE,iBAAiB,CAAC,KAAK,CAAC;wBACjC,UAAU,EAAE,CAAC;wBACb,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM;qBAC7B,CAAC,CAAC;gBACL,CAAC;YACH,CAAC;SACF,CAAC;IACJ,CAAC;CACF,CAAC;AAEF,SAAS,sBAAsB,CAAC,SAAyB;IACvD,QAAQ,SAAS,EAAE,CAAC;QAClB;YACE,OAAO,gBAAgB,CAAC;QAC1B;YACE,OAAO,uBAAuB,CAAC;QACjC;YACE,OAAO,wBAAwB,CAAC;QAClC;YACE,OAAO,mBAAmB,CAAC;QAC7B;YACE,OAAO,6CAA6C,CAAC;QACvD;YACE,OAAO,mBAAmB,CAAC;QAC7B;YACE,OAAO,+BAA+B,CAAC;QACzC;YACE,OAAO,iCAAiC,CAAC;QAC3C;YACE,OAAO,uBAAuB,CAAC;QACjC;YACE,OAAO,uBAAuB,CAAC;QACjC;YACE,OAAO,2BAA2B,CAAC;QACrC;YACE,OAAO,0BAA0B,CAAC;QACpC;YACE,OAAO,0BAA0B,CAAC;QACpC;YACE,OAAO,iBAAiB,CAAC;QAC3B;YACE,OAAO,0BAA0B,CAAC;QACpC;YACE,OAAO,mBAAmB,CAAC;QAC7B;YACE,OAAO,qCAAqC,CAAC;IACjD,CAAC;AACH,CAAC"}
@@ -66,7 +66,7 @@ function detectInvalidLoopArguments(node, tags = []) {
66
66
  };
67
67
  }
68
68
  function isSupportedTagArgument(tags, tagName, key, positional) {
69
- return (tags
69
+ return ((tags ?? [])
70
70
  .find((tag) => tag.name === tagName)
71
71
  ?.parameters?.some((parameter) => parameter.name === key && parameter.positional === positional) || false);
72
72
  }
@@ -1 +1 @@
1
- {"version":3,"file":"InvalidLoopArguments.js","sourceRoot":"","sources":["../../../../src/checks/liquid-html-syntax-error/checks/InvalidLoopArguments.ts"],"names":[],"mappings":";;AAeA,gEAqFC;AApGD,uEAMwC;AAExC,mCAIiB;AACjB,uCAA8C;AAE9C,SAAgB,0BAA0B,CACxC,IAAe,EACf,OAAmB,EAAE;IAErB,IAAI,IAAI,CAAC,IAAI,KAAK,8BAAS,CAAC,SAAS,IAAI,CAAC,IAAA,uBAAe,EAAC,IAAI,CAAC,EAAE,CAAC;QAChE,OAAO;IACT,CAAC;IAED,IAAI,MAAM,GAAwB,IAAyC,CAAC,MAAM,CAAC;IAEnF,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,OAAO;IACT,CAAC;IAED,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE,CAAC;QAC/B,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;IAC3E,CAAC;IAED,MAAM,SAAS,GAAG,IAAA,4BAAoB,EAAC,MAAM,CAAC,CAAC;IAE/C,yDAAyD;IACzD,4EAA4E;IAC5E,IAAI,SAAS,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC;QAC1B,OAAO;IACT,CAAC;IAED,MAAM,WAAW,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IACrE,IAAI,UAAU,GAAG,WAAW,GAAG,SAAS,CAAC,EAAE,CAAC,CAAC,CAAE,CAAC,KAAM,CAAC;IACvD,IAAI,QAAQ,GAAG,WAAW,GAAG,SAAS,CAAC,EAAE,CAAC,CAAC,CAAC,CAAE,CAAC,KAAM,GAAG,SAAS,CAAC,EAAE,CAAC,CAAC,CAAC,CAAE,CAAC,KAAK,CAAC,MAAM,CAAC;IAEvF,MAAM,iBAAiB,GAAa,EAAE,CAAC;IAEvC,4FAA4F;IAC5F,IAAI,yBAAyB,GAAG,KAAK,CAAC;IACtC,MAAM,gBAAgB,GAAa,EAAE,CAAC;IAEtC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QAC1C,MAAM,QAAQ,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;QAE9B,IAAI,IAAA,iDAAyC,EAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;YAC9D,yBAAyB,GAAG,IAAI,CAAC;YACjC,gBAAgB,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;YACtC,SAAS;QACX,CAAC;QAED,MAAM,YAAY,GAAG,IAAA,4BAAoB,EAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;QAE1D,qBAAqB;QACrB,IAAI,YAAY,EAAE,CAAC;YACjB,yBAAyB,GAAG,IAAI,CAAC;YAEjC,IAAI,CAAC,sBAAsB,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,YAAY,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,CAAC;gBACtE,gBAAgB,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;gBACtC,SAAS;YACX,CAAC;QACH,CAAC;QACD,sCAAsC;aACjC,IACH,yBAAyB;YACzB,CAAC,sBAAsB,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,QAAQ,CAAC,KAAK,EAAE,IAAI,CAAC,EAC9D,CAAC;YACD,yBAAyB,GAAG,IAAI,CAAC;YACjC,gBAAgB,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;YACtC,SAAS;QACX,CAAC;QAED,iBAAiB,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IACzC,CAAC;IAED,IAAI,gBAAgB,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAClC,OAAO;IACT,CAAC;IAED,OAAO;QACL,OAAO,EAAE,8CACP,IAAI,CAAC,IACP,sFAAsF,gBAAgB,CAAC,IAAI,CACzG,IAAI,CACL,EAAE;QACH,UAAU;QACV,QAAQ;QACR,GAAG,EAAE,CAAC,SAAS,EAAE,EAAE;YACjB,SAAS,CAAC,OAAO,CAAC,UAAU,EAAE,QAAQ,EAAE,iBAAiB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;QACvE,CAAC;KACF,CAAC;AACJ,CAAC;AAED,SAAS,sBAAsB,CAC7B,IAAgB,EAChB,OAAe,EACf,GAAW,EACX,UAAmB;IAEnB,OAAO,CACL,IAAI;SACD,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,KAAK,OAAO,CAAC;QACpC,EAAE,UAAU,EAAE,IAAI,CAChB,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,IAAI,KAAK,GAAG,IAAI,SAAS,CAAC,UAAU,KAAK,UAAU,CAC7E,IAAI,KAAK,CACb,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"InvalidLoopArguments.js","sourceRoot":"","sources":["../../../../src/checks/liquid-html-syntax-error/checks/InvalidLoopArguments.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ import { LiquidTag } from '@platformos/liquid-html-parser';
2
+ import { Problem, SourceCodeType, TagEntry } from '../../..';
3
+ /**
4
+ * Detects known tags whose markup couldn't be parsed by the grammar.
5
+ *
6
+ * When the tolerant parser encounters a known tag name (e.g. "render") but can't parse
7
+ * the markup with the strict grammar rule, it falls back to the base case and stores
8
+ * the markup as a raw string. This function detects that situation.
9
+ *
10
+ * This check only applies to tags that DON'T have more specific sub-checks.
11
+ * Tags like assign, echo, if, for etc. have dedicated checks that provide
12
+ * better error messages and autofixes for their specific syntax patterns.
13
+ *
14
+ * Examples:
15
+ * {% graphql %} → name: 'graphql', markup: '' (string — invalid)
16
+ * {% render %} → name: 'render', markup: '' (string — invalid)
17
+ * {% function res 'path' %} → name: 'function', markup: "res 'path'" (string — invalid)
18
+ */
19
+ export declare function detectInvalidTagSyntax(node: LiquidTag, tags?: TagEntry[]): Problem<SourceCodeType.LiquidHtml> | undefined;
@@ -0,0 +1,79 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.detectInvalidTagSyntax = detectInvalidTagSyntax;
4
+ const liquid_html_parser_1 = require("@platformos/liquid-html-parser");
5
+ /**
6
+ * Tags that use no markup at all — they are valid as `{% else %}`, `{% break %}`, etc.
7
+ * When their markup is a string, it's always '' (empty), so they should not trigger this check.
8
+ */
9
+ const TAGS_WITH_NO_EXPECTED_MARKUP = new Set(liquid_html_parser_1.TAGS_WITHOUT_MARKUP);
10
+ /**
11
+ * Tags that have dedicated sub-checks handling their string-markup cases with
12
+ * more specific error messages and autofixes. This check should NOT fire on these
13
+ * to avoid double-reporting or overriding their nuanced decisions.
14
+ *
15
+ * - assign → MultipleAssignValues, InvalidFilterName, InvalidPipeSyntax
16
+ * - echo → InvalidEchoValue, InvalidFilterName, InvalidPipeSyntax
17
+ * - if/elsif/unless → InvalidConditionalNode, InvalidConditionalNodeParenthesis
18
+ * - for/tablerow → InvalidLoopRange, InvalidLoopArguments
19
+ */
20
+ const TAGS_WITH_DEDICATED_CHECKS = new Set([
21
+ liquid_html_parser_1.NamedTags.assign,
22
+ liquid_html_parser_1.NamedTags.echo,
23
+ liquid_html_parser_1.NamedTags.if,
24
+ liquid_html_parser_1.NamedTags.elsif,
25
+ liquid_html_parser_1.NamedTags.unless,
26
+ liquid_html_parser_1.NamedTags.for,
27
+ liquid_html_parser_1.NamedTags.tablerow,
28
+ liquid_html_parser_1.NamedTags.when,
29
+ ]);
30
+ /**
31
+ * All tag names in the NamedTags enum — these have specific grammar rules for their markup.
32
+ * If a NamedTag's markup is a string (instead of a parsed object), it means the strict grammar
33
+ * rule failed and the tag fell through to the base case.
34
+ */
35
+ const NAMED_TAGS = new Set(Object.values(liquid_html_parser_1.NamedTags));
36
+ /**
37
+ * Detects known tags whose markup couldn't be parsed by the grammar.
38
+ *
39
+ * When the tolerant parser encounters a known tag name (e.g. "render") but can't parse
40
+ * the markup with the strict grammar rule, it falls back to the base case and stores
41
+ * the markup as a raw string. This function detects that situation.
42
+ *
43
+ * This check only applies to tags that DON'T have more specific sub-checks.
44
+ * Tags like assign, echo, if, for etc. have dedicated checks that provide
45
+ * better error messages and autofixes for their specific syntax patterns.
46
+ *
47
+ * Examples:
48
+ * {% graphql %} → name: 'graphql', markup: '' (string — invalid)
49
+ * {% render %} → name: 'render', markup: '' (string — invalid)
50
+ * {% function res 'path' %} → name: 'function', markup: "res 'path'" (string — invalid)
51
+ */
52
+ function detectInvalidTagSyntax(node, tags = []) {
53
+ const tagName = node.name;
54
+ // Only check tags known to the grammar with specific markup rules
55
+ if (!NAMED_TAGS.has(tagName)) {
56
+ return;
57
+ }
58
+ // Tags without expected markup (else, break, continue, etc.) always have string markup
59
+ if (TAGS_WITH_NO_EXPECTED_MARKUP.has(tagName)) {
60
+ return;
61
+ }
62
+ // Skip tags that have dedicated sub-checks with more specific error handling
63
+ if (TAGS_WITH_DEDICATED_CHECKS.has(tagName)) {
64
+ return;
65
+ }
66
+ // If markup is not a string, it was parsed successfully — no error
67
+ if (typeof node.markup !== 'string') {
68
+ return;
69
+ }
70
+ // Build a helpful hint from the docset if available
71
+ const tagEntry = tags.find((t) => t.name === tagName);
72
+ const syntaxHint = tagEntry?.syntax ? ` Expected syntax: ${tagEntry.syntax}` : '';
73
+ return {
74
+ message: `Invalid syntax for tag '${tagName}'${syntaxHint}`,
75
+ startIndex: node.position.start,
76
+ endIndex: node.position.end,
77
+ };
78
+ }
79
+ //# sourceMappingURL=InvalidTagSyntax.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"InvalidTagSyntax.js","sourceRoot":"","sources":["../../../../src/checks/liquid-html-syntax-error/checks/InvalidTagSyntax.ts"],"names":[],"mappings":";;AAqDA,wDAmCC;AAxFD,uEAA2F;AAG3F;;;GAGG;AACH,MAAM,4BAA4B,GAAG,IAAI,GAAG,CAAS,wCAAmB,CAAC,CAAC;AAE1E;;;;;;;;;GASG;AACH,MAAM,0BAA0B,GAAG,IAAI,GAAG,CAAS;IACjD,8BAAS,CAAC,MAAM;IAChB,8BAAS,CAAC,IAAI;IACd,8BAAS,CAAC,EAAE;IACZ,8BAAS,CAAC,KAAK;IACf,8BAAS,CAAC,MAAM;IAChB,8BAAS,CAAC,GAAG;IACb,8BAAS,CAAC,QAAQ;IAClB,8BAAS,CAAC,IAAI;CACf,CAAC,CAAC;AAEH;;;;GAIG;AACH,MAAM,UAAU,GAAG,IAAI,GAAG,CAAS,MAAM,CAAC,MAAM,CAAC,8BAAS,CAAC,CAAC,CAAC;AAE7D;;;;;;;;;;;;;;;GAeG;AACH,SAAgB,sBAAsB,CACpC,IAAe,EACf,OAAmB,EAAE;IAErB,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC;IAE1B,kEAAkE;IAClE,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC;QAC7B,OAAO;IACT,CAAC;IAED,uFAAuF;IACvF,IAAI,4BAA4B,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC;QAC9C,OAAO;IACT,CAAC;IAED,6EAA6E;IAC7E,IAAI,0BAA0B,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC;QAC5C,OAAO;IACT,CAAC;IAED,mEAAmE;IACnE,IAAI,OAAO,IAAI,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;QACpC,OAAO;IACT,CAAC;IAED,oDAAoD;IACpD,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,OAAO,CAAC,CAAC;IACtD,MAAM,UAAU,GAAG,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC,qBAAqB,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IAElF,OAAO;QACL,OAAO,EAAE,2BAA2B,OAAO,IAAI,UAAU,EAAE;QAC3D,UAAU,EAAE,IAAI,CAAC,QAAQ,CAAC,KAAK;QAC/B,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,GAAG;KAC5B,CAAC;AACJ,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { LiquidTag } from '@platformos/liquid-html-parser';
2
+ import { Problem, SourceCodeType, TagEntry } from '../../..';
3
+ export declare function detectUnknownTag(node: LiquidTag, tags?: TagEntry[]): Problem<SourceCodeType.LiquidHtml> | undefined;
@@ -0,0 +1,32 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.detectUnknownTag = detectUnknownTag;
4
+ const liquid_html_parser_1 = require("@platformos/liquid-html-parser");
5
+ /**
6
+ * All tag names known to the grammar (NamedTags enum + TAGS_WITHOUT_MARKUP + BLOCKS + RAW_TAGS).
7
+ * These are tags that the parser recognizes with specific grammar rules.
8
+ */
9
+ const GRAMMAR_KNOWN_TAGS = new Set([
10
+ ...Object.values(liquid_html_parser_1.NamedTags),
11
+ ...liquid_html_parser_1.TAGS_WITHOUT_MARKUP,
12
+ ...liquid_html_parser_1.BLOCKS,
13
+ ...liquid_html_parser_1.RAW_TAGS,
14
+ '#', // inline comment: {% # this is a comment %}
15
+ ]);
16
+ function detectUnknownTag(node, tags = []) {
17
+ const tagName = node.name;
18
+ // If the tag is known to the grammar, it's not unknown
19
+ if (GRAMMAR_KNOWN_TAGS.has(tagName)) {
20
+ return;
21
+ }
22
+ // If the tag is known to the docset, it's not unknown
23
+ if (tags.some((tag) => tag.name === tagName)) {
24
+ return;
25
+ }
26
+ return {
27
+ message: `Unknown tag '${tagName}'`,
28
+ startIndex: node.position.start,
29
+ endIndex: node.position.end,
30
+ };
31
+ }
32
+ //# sourceMappingURL=UnknownTag.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"UnknownTag.js","sourceRoot":"","sources":["../../../../src/checks/liquid-html-syntax-error/checks/UnknownTag.ts"],"names":[],"mappings":";;AAqBA,4CAqBC;AA1CD,uEAMwC;AAGxC;;;GAGG;AACH,MAAM,kBAAkB,GAAG,IAAI,GAAG,CAAS;IACzC,GAAG,MAAM,CAAC,MAAM,CAAC,8BAAS,CAAC;IAC3B,GAAG,wCAAmB;IACtB,GAAG,2BAAM;IACT,GAAG,6BAAQ;IACX,GAAG,EAAE,4CAA4C;CAClD,CAAC,CAAC;AAEH,SAAgB,gBAAgB,CAC9B,IAAe,EACf,OAAmB,EAAE;IAErB,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC;IAE1B,uDAAuD;IACvD,IAAI,kBAAkB,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC;QACpC,OAAO;IACT,CAAC;IAED,sDAAsD;IACtD,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,KAAK,OAAO,CAAC,EAAE,CAAC;QAC7C,OAAO;IACT,CAAC;IAED,OAAO;QACL,OAAO,EAAE,gBAAgB,OAAO,GAAG;QACnC,UAAU,EAAE,IAAI,CAAC,QAAQ,CAAC,KAAK;QAC/B,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,GAAG;KAC5B,CAAC;AACJ,CAAC"}
@@ -12,6 +12,8 @@ const InvalidLoopArguments_1 = require("./checks/InvalidLoopArguments");
12
12
  const InvalidConditionalNodeParenthesis_1 = require("./checks/InvalidConditionalNodeParenthesis");
13
13
  const InvalidFilterName_1 = require("./checks/InvalidFilterName");
14
14
  const InvalidPipeSyntax_1 = require("./checks/InvalidPipeSyntax");
15
+ const UnknownTag_1 = require("./checks/UnknownTag");
16
+ const InvalidTagSyntax_1 = require("./checks/InvalidTagSyntax");
15
17
  const utils_2 = require("../utils");
16
18
  function isParsingErrorWithLocation(error) {
17
19
  return 'name' in error && error.name === 'LiquidHTMLParsingError' && 'loc' in error;
@@ -37,8 +39,8 @@ exports.LiquidHTMLSyntaxError = {
37
39
  },
38
40
  create(context) {
39
41
  const ast = context.file.ast;
40
- const filtersPromise = context.themeDocset?.filters();
41
- const tagsPromise = context.themeDocset?.tags();
42
+ const filtersPromise = context.platformosDocset?.filters();
43
+ const tagsPromise = context.platformosDocset?.tags();
42
44
  if (!(0, utils_1.isError)(ast)) {
43
45
  return {
44
46
  async BooleanExpression(node, ancestors) {
@@ -53,11 +55,19 @@ exports.LiquidHTMLSyntaxError = {
53
55
  async LiquidTag(node, ancestors) {
54
56
  if ((0, utils_2.isWithinRawTagThatDoesNotParseItsContents)(ancestors))
55
57
  return;
58
+ const tags = (await tagsPromise) ?? [];
59
+ // Unknown tags are fatal — no point in further syntax checks.
60
+ const unknownTagProblem = (0, UnknownTag_1.detectUnknownTag)(node, tags);
61
+ if (unknownTagProblem) {
62
+ context.report(unknownTagProblem);
63
+ return;
64
+ }
65
+ // Run specific sub-checks first — they provide better error messages and autofixes.
56
66
  const problems = [
57
67
  (0, MultipleAssignValues_1.detectMultipleAssignValues)(node),
58
68
  (0, InvalidEchoValue_1.detectInvalidEchoValue)(node),
59
69
  (0, InvalidLoopRange_1.detectInvalidLoopRange)(node),
60
- (0, InvalidLoopArguments_1.detectInvalidLoopArguments)(node, await tagsPromise),
70
+ (0, InvalidLoopArguments_1.detectInvalidLoopArguments)(node, tags),
61
71
  ].filter(Boolean);
62
72
  // Fixers for `detectConditionalNodeUnsupportedParenthesis` and `detectInvalidConditionalNode` consume
63
73
  // the whole node markup, so we MUST not run both.
@@ -65,8 +75,16 @@ exports.LiquidHTMLSyntaxError = {
65
75
  if (conditionalNodeProblem) {
66
76
  problems.push(conditionalNodeProblem);
67
77
  }
78
+ // InvalidTagSyntax is a catch-all for known tags with unparseable markup.
79
+ // Only fire it if no more specific sub-check already reported on this tag.
80
+ if (problems.length === 0) {
81
+ const invalidSyntaxProblem = (0, InvalidTagSyntax_1.detectInvalidTagSyntax)(node, tags);
82
+ if (invalidSyntaxProblem) {
83
+ problems.push(invalidSyntaxProblem);
84
+ }
85
+ }
68
86
  problems.forEach(context.report);
69
- const filterProblems = await (0, InvalidFilterName_1.detectInvalidFilterName)(node, await filtersPromise);
87
+ const filterProblems = await (0, InvalidFilterName_1.detectInvalidFilterName)(node, (await filtersPromise) ?? []);
70
88
  if (filterProblems.length > 0) {
71
89
  filterProblems.forEach((filterProblem) => context.report(filterProblem));
72
90
  }
@@ -87,7 +105,7 @@ exports.LiquidHTMLSyntaxError = {
87
105
  async LiquidVariableOutput(node, ancestors) {
88
106
  if ((0, utils_2.isWithinRawTagThatDoesNotParseItsContents)(ancestors))
89
107
  return;
90
- const filterProblems = await (0, InvalidFilterName_1.detectInvalidFilterName)(node, await filtersPromise);
108
+ const filterProblems = await (0, InvalidFilterName_1.detectInvalidFilterName)(node, (await filtersPromise) ?? []);
91
109
  if (filterProblems.length > 0) {
92
110
  filterProblems.forEach((problem) => context.report(problem));
93
111
  }
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/checks/liquid-html-syntax-error/index.ts"],"names":[],"mappings":";;;AAAA,uCAAuF;AACvF,uCAAiD;AACjD,wEAA2E;AAC3E,kFAAqF;AACrF,gEAAmE;AACnE,4EAA+E;AAC/E,gEAAmE;AACnE,wEAA2E;AAC3E,kGAAyG;AACzG,kEAAqE;AACrE,kEAAqE;AACrE,oCAAqE;AAOrE,SAAS,0BAA0B,CACjC,KAAY;IAEZ,OAAO,MAAM,IAAI,KAAK,IAAI,KAAK,CAAC,IAAI,KAAK,wBAAwB,IAAI,KAAK,IAAI,KAAK,CAAC;AACtF,CAAC;AAED,SAAS,iBAAiB,CAAC,OAAe,EAAE,SAAiB;IAC3D,OAAO,OAAO;SACX,OAAO,CAAC,uBAAuB,EAAE,eAAe,CAAC;SACjD,OAAO,CAAC,4BAA4B,EAAE,SAAS,SAAS,GAAG,CAAC,CAAC;AAClE,CAAC;AAEY,QAAA,qBAAqB,GAA0B;IAC1D,IAAI,EAAE;QACJ,IAAI,EAAE,uBAAuB;QAC7B,OAAO,EAAE,CAAC,aAAa,EAAE,kBAAkB,CAAC;QAC5C,IAAI,EAAE,kCAAkC;QACxC,IAAI,EAAE;YACJ,WAAW,EAAE,oEAAoE;YACjF,WAAW,EAAE,IAAI;SAClB;QACD,IAAI,EAAE,sBAAc,CAAC,UAAU;QAC/B,QAAQ,EAAE,gBAAQ,CAAC,KAAK;QACxB,MAAM,EAAE,EAAE;QACV,OAAO,EAAE,EAAE;KACZ;IAED,MAAM,CAAC,OAAO;QACZ,MAAM,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC;QAC7B,MAAM,cAAc,GAAG,OAAO,CAAC,WAAW,EAAE,OAAO,EAAE,CAAC;QACtD,MAAM,WAAW,GAAG,OAAO,CAAC,WAAW,EAAE,IAAI,EAAE,CAAC;QAEhD,IAAI,CAAC,IAAA,eAAO,EAAC,GAAG,CAAC,EAAE,CAAC;YAClB,OAAO;gBACL,KAAK,CAAC,iBAAiB,CAAC,IAAI,EAAE,SAAS;oBACrC,IAAI,IAAA,iDAAyC,EAAC,SAAS,CAAC;wBAAE,OAAO;oBAEjE,MAAM,OAAO,GAAG,IAAA,2DAA+B,EAAC,IAAI,EAAE,SAAS,CAAC,CAAC;oBAEjE,IAAI,CAAC,OAAO,EAAE,CAAC;wBACb,OAAO;oBACT,CAAC;oBAED,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;gBAC1B,CAAC;gBACD,KAAK,CAAC,SAAS,CAAC,IAAI,EAAE,SAAS;oBAC7B,IAAI,IAAA,iDAAyC,EAAC,SAAS,CAAC;wBAAE,OAAO;oBAEjE,MAAM,QAAQ,GAAG;wBACf,IAAA,iDAA0B,EAAC,IAAI,CAAC;wBAChC,IAAA,yCAAsB,EAAC,IAAI,CAAC;wBAC5B,IAAA,yCAAsB,EAAC,IAAI,CAAC;wBAC5B,IAAA,iDAA0B,EAAC,IAAI,EAAE,MAAM,WAAW,CAAC;qBACpD,CAAC,MAAM,CAAC,OAAO,CAAyC,CAAC;oBAE1D,sGAAsG;oBACtG,kDAAkD;oBAClD,MAAM,sBAAsB,GAC1B,IAAA,+EAA2C,EAAC,IAAI,CAAC,IAAI,IAAA,qDAA4B,EAAC,IAAI,CAAC,CAAC;oBAE1F,IAAI,sBAAsB,EAAE,CAAC;wBAC3B,QAAQ,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC;oBACxC,CAAC;oBAED,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;oBAEjC,MAAM,cAAc,GAAG,MAAM,IAAA,2CAAuB,EAAC,IAAI,EAAE,MAAM,cAAc,CAAC,CAAC;oBACjF,IAAI,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;wBAC9B,cAAc,CAAC,OAAO,CAAC,CAAC,aAAa,EAAE,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC;oBAC3E,CAAC;oBAED,MAAM,YAAY,GAAG,MAAM,IAAA,2CAAuB,EAAC,IAAI,CAAC,CAAC;oBACzD,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;wBAC5B,YAAY,CAAC,OAAO,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC;oBACrE,CAAC;gBACH,CAAC;gBAED,KAAK,CAAC,YAAY,CAAC,IAAI,EAAE,SAAS;oBAChC,IAAI,IAAA,iDAAyC,EAAC,SAAS,CAAC;wBAAE,OAAO;oBAEjE,MAAM,OAAO,GAAG,IAAA,qDAA4B,EAAC,IAAI,CAAC,CAAC;oBAEnD,IAAI,CAAC,OAAO,EAAE,CAAC;wBACb,OAAO;oBACT,CAAC;oBAED,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;gBAC1B,CAAC;gBAED,KAAK,CAAC,oBAAoB,CAAC,IAAI,EAAE,SAAS;oBACxC,IAAI,IAAA,iDAAyC,EAAC,SAAS,CAAC;wBAAE,OAAO;oBAEjE,MAAM,cAAc,GAAG,MAAM,IAAA,2CAAuB,EAAC,IAAI,EAAE,MAAM,cAAc,CAAC,CAAC;oBACjF,IAAI,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;wBAC9B,cAAc,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC;oBAC/D,CAAC;oBAED,MAAM,YAAY,GAAG,MAAM,IAAA,2CAAuB,EAAC,IAAI,CAAC,CAAC;oBACzD,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;wBAC5B,YAAY,CAAC,OAAO,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC;oBACrE,CAAC;oBAED,MAAM,OAAO,GAAG,IAAA,yCAAsB,EAAC,IAAI,CAAC,CAAC;oBAC7C,IAAI,OAAO,EAAE,CAAC;wBACZ,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;oBAC1B,CAAC;gBACH,CAAC;aACF,CAAC;QACJ,CAAC;QAED,OAAO;YACL,KAAK,CAAC,eAAe,CAAC,IAAI;gBACxB,IAAI,0BAA0B,CAAC,GAAG,CAAC,EAAE,CAAC;oBACpC,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,GAAG,CAAC,GAAG,CAAC;oBAC/B,MAAM,UAAU,GAAG,IAAA,iBAAS,EAAC,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;oBACpE,IAAI,QAAQ,GAAG,IAAA,iBAAS,EAAC,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;oBAC5D,IAAI,UAAU,KAAK,QAAQ;wBAAE,QAAQ,IAAI,CAAC,CAAC;oBAC3C,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;oBAC1D,OAAO,CAAC,MAAM,CAAC;wBACb,OAAO,EAAE,iBAAiB,CAAC,GAAG,CAAC,OAAO,EAAE,SAAS,CAAC;wBAClD,UAAU;wBACV,QAAQ,EAAE,QAAQ;qBACnB,CAAC,CAAC;gBACL,CAAC;qBAAM,CAAC;oBACN,OAAO,CAAC,MAAM,CAAC;wBACb,OAAO,EAAE,GAAG,CAAC,OAAO;wBACpB,UAAU,EAAE,CAAC;wBACb,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM;qBAC7B,CAAC,CAAC;gBACL,CAAC;YACH,CAAC;SACF,CAAC;IACJ,CAAC;CACF,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/checks/liquid-html-syntax-error/index.ts"],"names":[],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- import { JSONCheckDefinition } from '../../types';
2
- export declare const MatchingTranslations: JSONCheckDefinition;
1
+ import { YAMLCheckDefinition } from '../../types';
2
+ export declare const MatchingTranslations: YAMLCheckDefinition;
@@ -3,6 +3,36 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.MatchingTranslations = void 0;
4
4
  const types_1 = require("../../types");
5
5
  const PLURALIZATION_KEYS = new Set(['zero', 'one', 'two', 'few', 'many', 'other']);
6
+ /**
7
+ * Returns the locale declared in a YAML translation file by reading its first
8
+ * top-level key (e.g. `en`, `pt-BR`, `fr`). platformOS determines a file's
9
+ * locale from content, not from its path.
10
+ */
11
+ function getLocaleFromAst(ast) {
12
+ if (ast instanceof Error)
13
+ return null;
14
+ if (ast.type !== 'Object')
15
+ return null;
16
+ const firstProp = ast.children[0];
17
+ if (!firstProp || firstProp.type !== 'Property')
18
+ return null;
19
+ return firstProp.key.value || null;
20
+ }
21
+ /**
22
+ * Extracts the translations base directory from a relative file path.
23
+ *
24
+ * e.g. `app/translations/pt-BR.yml` → `app/translations`
25
+ * `app/translations/pt-BR/validation.yml` → `app/translations`
26
+ * `modules/x/public/translations/en.yml` → `modules/x/public/translations`
27
+ *
28
+ * Returns `null` if the path doesn't contain a `/translations/` segment.
29
+ */
30
+ function getTranslationRelativeBase(relativePath) {
31
+ const idx = relativePath.lastIndexOf('/translations/');
32
+ if (idx === -1)
33
+ return null;
34
+ return relativePath.substring(0, idx + '/translations'.length);
35
+ }
6
36
  exports.MatchingTranslations = {
7
37
  meta: {
8
38
  code: 'MatchingTranslations',
@@ -10,135 +40,129 @@ exports.MatchingTranslations = {
10
40
  docs: {
11
41
  description: 'TODO',
12
42
  recommended: true,
13
- url: 'https://shopify.dev/docs/storefronts/themes/tools/theme-check/checks/matching-translations',
43
+ url: 'https://documentation.platformos.com/developer-guide/platformos-check/checks/matching-translations',
14
44
  },
15
- type: types_1.SourceCodeType.JSON,
45
+ type: types_1.SourceCodeType.YAML,
16
46
  severity: types_1.Severity.ERROR,
17
47
  schema: {},
18
48
  targets: [],
19
49
  },
20
50
  create(context) {
21
- // State
22
- const defaultTranslations = new Set();
23
- const missingTranslations = new Set();
51
+ // ── State ──────────────────────────────────────────────────────────────
52
+ const enTranslations = new Set(); // keys present in the en scope
53
+ const missingFromLocale = new Set(); // en keys absent from the entire locale scope
24
54
  const nodesByPath = new Map();
25
55
  const file = context.file;
26
56
  const fileUri = file.uri;
27
57
  const relativePath = context.toRelativePath(fileUri);
28
58
  const ast = file.ast;
29
- const isLocaleFile = relativePath.startsWith('locales/');
30
- const isDefaultTranslationsFile = fileUri.endsWith('.default.json') || fileUri.endsWith('.default.schema.json');
31
- const isSchemaTranslationFile = fileUri.endsWith('.schema.json');
32
- if (!isLocaleFile || isDefaultTranslationsFile || ast instanceof Error) {
33
- // No need to lint a file that isn't a translation file, we return an
34
- // empty object as the check for those.
59
+ // ── Guard: only lint translation files ────────────────────────────────
60
+ const isTranslationFile = relativePath.includes('/translations/');
61
+ // The locale is always the first top-level key in the YAML file (e.g. `en`,
62
+ // `pt-BR`). platformOS resolves locale from content, not from the file path.
63
+ const locale = getLocaleFromAst(ast);
64
+ if (!isTranslationFile || !locale || locale === 'en' || ast instanceof Error) {
35
65
  return {};
36
66
  }
37
- // Helpers
38
- const hasDefaultTranslations = () => defaultTranslations.size > 0;
67
+ // ── Derive scope (translation base URI) ──────────────────────────────
68
+ const relativeBase = getTranslationRelativeBase(relativePath);
69
+ if (!relativeBase)
70
+ return {};
71
+ const translationBaseUri = context.toUri(relativeBase);
72
+ // A "primary" locale file is the top-level `{locale}.yml` (not inside a
73
+ // locale sub-directory like `pt-BR/`). Only the primary file reports
74
+ // missing translations to avoid duplicate offenses across split files.
75
+ const pathAfterBase = relativePath.substring(relativeBase.length + 1);
76
+ const isPrimaryLocaleFile = !pathAfterBase.includes('/');
77
+ // ── Helpers ───────────────────────────────────────────────────────────
39
78
  const isTerminalNode = ({ type }) => type === 'Literal';
40
79
  const isPluralizationNode = (node) => PLURALIZATION_KEYS.has(node.key.value);
41
- const isShopifyPath = (path) => path.startsWith('shopify.');
42
- const hasDefaultTranslation = (translationPath) => defaultTranslations.has(translationPath) ?? false;
43
80
  const isPluralizationPath = (path) => [...PLURALIZATION_KEYS].some((key) => path.endsWith(key));
44
- const jsonPaths = (json) => {
45
- const keys = Object.keys(json);
46
- return keys.reduce((acc, key) => {
47
- if (typeof json[key] !== 'object') {
48
- return acc.concat(key);
49
- }
50
- const childJson = json[key];
51
- const childPaths = jsonPaths(childJson);
52
- return acc.concat(childPaths.map((path) => `${key}.${path}`));
53
- }, []);
54
- };
55
- const objectPath = (nodes) => {
56
- return nodes
57
- .filter((node) => node.type === 'Property')
58
- .reduce((acc, val) => acc.concat(val.key.value), [])
59
- .join('.');
60
- };
61
- const countCommonParts = (arrayA, arrayB) => {
62
- const minLength = Math.min(arrayA.length, arrayB.length);
63
- for (let i = 0; i < minLength; i++) {
64
- if (arrayA[i] !== arrayB[i]) {
81
+ const countCommonParts = (a, b) => {
82
+ const min = Math.min(a.length, b.length);
83
+ for (let i = 0; i < min; i++)
84
+ if (a[i] !== b[i])
65
85
  return i;
66
- }
67
- }
68
- return minLength;
86
+ return min;
69
87
  };
70
- const closestTranslationKey = (translationKey) => {
71
- const translationKeyParts = translationKey.split('.');
72
- let closestMatch = '';
73
- let maxCommonParts = 0;
88
+ const closestTranslationKey = (key) => {
89
+ const keyParts = key.split('.');
90
+ let closest = '';
91
+ let max = 0;
74
92
  for (const path of nodesByPath.keys()) {
75
- const pathParts = path.split('.');
76
- const commonParts = countCommonParts(pathParts, translationKeyParts);
77
- if (commonParts > maxCommonParts) {
78
- maxCommonParts = commonParts;
79
- closestMatch = path;
93
+ const common = countCommonParts(path.split('.'), keyParts);
94
+ if (common > max) {
95
+ max = common;
96
+ closest = path;
80
97
  }
81
98
  }
82
- return nodesByPath.get(closestMatch) ?? ast;
99
+ return nodesByPath.get(closest) ?? ast;
100
+ };
101
+ // Strip the locale prefix (first Property in the ancestors chain).
102
+ // YAML files wrap content under a locale key: { en: { hello: 'Hello' } }
103
+ // We want paths like 'hello', not 'en.hello'.
104
+ const objectPath = (nodes) => {
105
+ const props = nodes.filter((n) => n.type === 'Property');
106
+ if (props.length <= 1)
107
+ return '';
108
+ return props
109
+ .slice(1)
110
+ .map((p) => p.key.value)
111
+ .join('.');
83
112
  };
113
+ const jsonPaths = (json) => Object.keys(json).reduce((acc, key) => {
114
+ if (typeof json[key] !== 'object')
115
+ return acc.concat(key);
116
+ return acc.concat(jsonPaths(json[key]).map((p) => `${key}.${p}`));
117
+ }, []);
84
118
  return {
85
119
  async onCodePathStart() {
86
- const getDefaultTranslations = isSchemaTranslationFile
87
- ? context.getDefaultSchemaTranslations
88
- : context.getDefaultTranslations;
89
- const defaultTranslationPaths = await getDefaultTranslations().then(jsonPaths);
90
- defaultTranslationPaths.forEach(Set.prototype.add, defaultTranslations);
91
- // At the `onCodePathStart`, we assume that all translations are missing,
92
- // and remove translation paths while traversing through the file.
93
- defaultTranslationPaths.forEach(Set.prototype.add, missingTranslations);
120
+ // Aggregate ALL en translations in this scope (en.yml + en/*.yml)
121
+ const en = await context.getTranslationsForBase(translationBaseUri, 'en');
122
+ jsonPaths(en).forEach(Set.prototype.add, enTranslations);
123
+ if (!isPrimaryLocaleFile)
124
+ return;
125
+ // For the primary locale file: pre-compute which en keys are absent
126
+ // from the entire locale scope (locale.yml + locale/*.yml).
127
+ const localeAgg = await context.getTranslationsForBase(translationBaseUri, locale);
128
+ const localeKeys = new Set(jsonPaths(localeAgg));
129
+ for (const key of enTranslations) {
130
+ if (!localeKeys.has(key))
131
+ missingFromLocale.add(key);
132
+ }
94
133
  },
95
134
  async Property(node, ancestors) {
96
135
  const path = objectPath(ancestors.concat(node));
97
- nodesByPath.set(path, node);
98
- if (!hasDefaultTranslations())
136
+ if (!path)
99
137
  return;
138
+ nodesByPath.set(path, node);
100
139
  if (isPluralizationNode(node))
101
140
  return;
102
141
  if (!isTerminalNode(node.value))
103
142
  return;
104
- if (isShopifyPath(path))
105
- return;
106
- if (hasDefaultTranslation(path)) {
107
- // As `path` is present, we remove it from the
108
- // `missingTranslationsPerFile` bucket.
109
- missingTranslations.delete(path);
110
- return;
143
+ if (!enTranslations.size)
144
+ return; // no en reference — skip
145
+ if (!enTranslations.has(path)) {
146
+ context.report({
147
+ message: `A translation for '${path}' does not exist in the en locale`,
148
+ startIndex: node.loc.start.offset,
149
+ endIndex: node.loc.end.offset,
150
+ });
111
151
  }
112
- context.report({
113
- message: `A default translation for '${path}' does not exist`,
114
- startIndex: node.loc.start.offset,
115
- endIndex: node.loc.end.offset,
116
- suggest: [
117
- {
118
- message: 'Delete unneeded translation key',
119
- fix(corrector) {
120
- corrector.remove(path);
121
- },
122
- },
123
- ],
124
- });
125
152
  },
126
153
  async onCodePathEnd() {
127
- missingTranslations.forEach((path) => {
128
- const closest = closestTranslationKey(path);
129
- if (isPluralizationPath(path))
130
- return;
131
- if (isShopifyPath(path))
132
- return;
154
+ if (!isPrimaryLocaleFile)
155
+ return;
156
+ for (const key of missingFromLocale) {
157
+ if (isPluralizationPath(key))
158
+ continue;
159
+ const closest = closestTranslationKey(key);
133
160
  context.report({
134
- message: `The translation for '${path}' is missing`,
161
+ message: `The translation for '${key}' is missing`,
135
162
  startIndex: closest.loc.start.offset,
136
163
  endIndex: closest.loc.end.offset,
137
- fix(corrector) {
138
- corrector.add(path, 'TODO');
139
- },
140
164
  });
141
- });
165
+ }
142
166
  },
143
167
  };
144
168
  },
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/checks/matching-translations/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/checks/matching-translations/index.ts"],"names":[],"mappings":"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"}
@@ -8,7 +8,6 @@ const types_1 = require("../../types");
8
8
  const js_yaml_1 = __importDefault(require("js-yaml"));
9
9
  const platformos_common_1 = require("@platformos/platformos-common");
10
10
  const vscode_uri_1 = require("vscode-uri");
11
- const arguments_1 = require("../../liquid-doc/arguments");
12
11
  const path_1 = require("../../path");
13
12
  function extractMetadataParams(source) {
14
13
  source = source.trim();
@@ -49,9 +48,13 @@ exports.MetadataParamsCheck = {
49
48
  }
50
49
  let params = extractMetadataParams(await context.fs.readFile(locatedFile));
51
50
  if (!params) {
52
- const liquidDocParameters = await (0, arguments_1.getLiquidDocParams)(context, (0, path_1.relative)(locatedFile, context.config.rootUri));
53
- if (!liquidDocParameters)
51
+ if (!context.getDocDefinition)
54
52
  return;
53
+ const relativePath = (0, path_1.relative)(locatedFile, context.config.rootUri);
54
+ const docDef = await context.getDocDefinition(relativePath);
55
+ if (!docDef?.liquidDoc?.parameters)
56
+ return;
57
+ const liquidDocParameters = new Map(docDef.liquidDoc.parameters.map((p) => [p.name, p]));
55
58
  params = Array.from(liquidDocParameters.values())
56
59
  .filter((p) => p.required)
57
60
  .map((p) => p.name);