@platformos/platformos-check-common 0.0.7 → 0.0.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (337) hide show
  1. package/CHANGELOG.md +16 -0
  2. package/README.md +4 -4
  3. package/dist/AugmentedPlatformOSDocset.d.ts +11 -0
  4. package/dist/AugmentedPlatformOSDocset.js +81 -0
  5. package/dist/AugmentedPlatformOSDocset.js.map +1 -0
  6. package/dist/JSONValidator.js +1 -1
  7. package/dist/JSONValidator.js.map +1 -1
  8. package/dist/checks/deprecated-filter/index.js +4 -41
  9. package/dist/checks/deprecated-filter/index.js.map +1 -1
  10. package/dist/checks/deprecated-tag/index.js +21 -22
  11. package/dist/checks/deprecated-tag/index.js.map +1 -1
  12. package/dist/checks/duplicate-function-arguments/index.js +1 -1
  13. package/dist/checks/duplicate-function-arguments/index.js.map +1 -1
  14. package/dist/checks/duplicate-render-partial-arguments/index.js +1 -1
  15. package/dist/checks/duplicate-render-partial-arguments/index.js.map +1 -1
  16. package/dist/checks/graphql/index.js +1 -1
  17. package/dist/checks/graphql/index.js.map +1 -1
  18. package/dist/checks/graphql-variables/index.js +4 -0
  19. package/dist/checks/graphql-variables/index.js.map +1 -1
  20. package/dist/checks/img-width-and-height/index.js +1 -1
  21. package/dist/checks/img-width-and-height/index.js.map +1 -1
  22. package/dist/checks/index.d.ts +3 -3
  23. package/dist/checks/index.js +4 -79
  24. package/dist/checks/index.js.map +1 -1
  25. package/dist/checks/json-syntax-error/index.js +1 -1
  26. package/dist/checks/json-syntax-error/index.js.map +1 -1
  27. package/dist/checks/liquid-html-syntax-error/checks/InvalidLoopArguments.js +1 -1
  28. package/dist/checks/liquid-html-syntax-error/checks/InvalidLoopArguments.js.map +1 -1
  29. package/dist/checks/liquid-html-syntax-error/checks/InvalidTagSyntax.d.ts +19 -0
  30. package/dist/checks/liquid-html-syntax-error/checks/InvalidTagSyntax.js +79 -0
  31. package/dist/checks/liquid-html-syntax-error/checks/InvalidTagSyntax.js.map +1 -0
  32. package/dist/checks/liquid-html-syntax-error/checks/UnknownTag.d.ts +3 -0
  33. package/dist/checks/liquid-html-syntax-error/checks/UnknownTag.js +32 -0
  34. package/dist/checks/liquid-html-syntax-error/checks/UnknownTag.js.map +1 -0
  35. package/dist/checks/liquid-html-syntax-error/index.js +23 -5
  36. package/dist/checks/liquid-html-syntax-error/index.js.map +1 -1
  37. package/dist/checks/matching-translations/index.d.ts +2 -2
  38. package/dist/checks/matching-translations/index.js +114 -90
  39. package/dist/checks/matching-translations/index.js.map +1 -1
  40. package/dist/checks/metadata-params/index.js +6 -3
  41. package/dist/checks/metadata-params/index.js.map +1 -1
  42. package/dist/checks/missing-asset/index.js +1 -1
  43. package/dist/checks/missing-asset/index.js.map +1 -1
  44. package/dist/checks/missing-partial/index.d.ts +6 -0
  45. package/dist/checks/missing-partial/index.js +70 -0
  46. package/dist/checks/missing-partial/index.js.map +1 -0
  47. package/dist/checks/orphaned-partial/index.js +4 -4
  48. package/dist/checks/orphaned-partial/index.js.map +1 -1
  49. package/dist/checks/parser-blocking-script/index.js +10 -36
  50. package/dist/checks/parser-blocking-script/index.js.map +1 -1
  51. package/dist/checks/parser-blocking-script/suggestions.d.ts +1 -2
  52. package/dist/checks/parser-blocking-script/suggestions.js +1 -11
  53. package/dist/checks/parser-blocking-script/suggestions.js.map +1 -1
  54. package/dist/checks/reserved-doc-param-names/index.js +6 -5
  55. package/dist/checks/reserved-doc-param-names/index.js.map +1 -1
  56. package/dist/checks/translation-key-exists/index.js +1 -1
  57. package/dist/checks/translation-key-exists/index.js.map +1 -1
  58. package/dist/checks/unclosed-html-element/index.js +5 -1
  59. package/dist/checks/unclosed-html-element/index.js.map +1 -1
  60. package/dist/checks/undefined-object/index.js +13 -31
  61. package/dist/checks/undefined-object/index.js.map +1 -1
  62. package/dist/checks/unique-doc-param-names/index.js +1 -1
  63. package/dist/checks/unique-doc-param-names/index.js.map +1 -1
  64. package/dist/checks/unknown-filter/index.js +3 -3
  65. package/dist/checks/unknown-filter/index.js.map +1 -1
  66. package/dist/checks/unknown-property/index.js +1 -1
  67. package/dist/checks/unknown-property/index.js.map +1 -1
  68. package/dist/checks/unrecognized-render-partial-arguments/index.js +2 -2
  69. package/dist/checks/unrecognized-render-partial-arguments/index.js.map +1 -1
  70. package/dist/checks/unused-assign/index.js +1 -1
  71. package/dist/checks/unused-assign/index.js.map +1 -1
  72. package/dist/checks/unused-doc-param/index.js +1 -1
  73. package/dist/checks/unused-doc-param/index.js.map +1 -1
  74. package/dist/checks/utils.js +1 -1
  75. package/dist/checks/utils.js.map +1 -1
  76. package/dist/checks/valid-content-for-arguments/index.js +1 -1
  77. package/dist/checks/valid-content-for-arguments/index.js.map +1 -1
  78. package/dist/checks/valid-doc-param-types/index.js +4 -4
  79. package/dist/checks/valid-doc-param-types/index.js.map +1 -1
  80. package/dist/checks/valid-html-translation/index.d.ts +2 -2
  81. package/dist/checks/valid-html-translation/index.js +4 -4
  82. package/dist/checks/valid-html-translation/index.js.map +1 -1
  83. package/dist/checks/valid-json/index.js +1 -1
  84. package/dist/checks/valid-json/index.js.map +1 -1
  85. package/dist/checks/valid-render-partial-argument-types/index.js +2 -2
  86. package/dist/checks/valid-render-partial-argument-types/index.js.map +1 -1
  87. package/dist/checks/variable-name/index.js +1 -1
  88. package/dist/checks/variable-name/index.js.map +1 -1
  89. package/dist/context-utils.d.ts +18 -7
  90. package/dist/context-utils.js +68 -109
  91. package/dist/context-utils.js.map +1 -1
  92. package/dist/disabled-checks/index.js +4 -2
  93. package/dist/disabled-checks/index.js.map +1 -1
  94. package/dist/doc-generator/DocBlockGenerator.d.ts +16 -0
  95. package/dist/doc-generator/DocBlockGenerator.js +464 -0
  96. package/dist/doc-generator/DocBlockGenerator.js.map +1 -0
  97. package/dist/doc-generator/index.d.ts +1 -0
  98. package/dist/doc-generator/index.js +6 -0
  99. package/dist/doc-generator/index.js.map +1 -0
  100. package/dist/find-root.d.ts +7 -10
  101. package/dist/find-root.js +10 -17
  102. package/dist/find-root.js.map +1 -1
  103. package/dist/fixes/autofix.d.ts +4 -4
  104. package/dist/fixes/autofix.js +2 -2
  105. package/dist/fixes/autofix.js.map +1 -1
  106. package/dist/fixes/correctors/index.js +4 -0
  107. package/dist/fixes/correctors/index.js.map +1 -1
  108. package/dist/index.d.ts +5 -5
  109. package/dist/index.js +50 -17
  110. package/dist/index.js.map +1 -1
  111. package/dist/jsonc/parse.d.ts +1 -1
  112. package/dist/jsonc/parse.js +1 -1
  113. package/dist/liquid-doc/arguments.d.ts +7 -8
  114. package/dist/liquid-doc/arguments.js +28 -29
  115. package/dist/liquid-doc/arguments.js.map +1 -1
  116. package/dist/liquid-doc/liquidDoc.d.ts +1 -1
  117. package/dist/liquid-doc/liquidDoc.js.map +1 -1
  118. package/dist/liquid-doc/utils.d.ts +3 -3
  119. package/dist/liquid-doc/utils.js +14 -3
  120. package/dist/liquid-doc/utils.js.map +1 -1
  121. package/dist/path.d.ts +1 -0
  122. package/dist/path.js +16 -1
  123. package/dist/path.js.map +1 -1
  124. package/{src/test/MockTheme.ts → dist/test/MockApp.d.ts} +2 -3
  125. package/dist/test/MockApp.js +16 -0
  126. package/dist/test/MockApp.js.map +1 -0
  127. package/dist/test/MockFileSystem.d.ts +3 -3
  128. package/dist/test/MockFileSystem.js +6 -6
  129. package/dist/test/MockFileSystem.js.map +1 -1
  130. package/dist/test/index.d.ts +1 -1
  131. package/dist/test/index.js +1 -1
  132. package/dist/test/index.js.map +1 -1
  133. package/dist/test/test-helper.d.ts +10 -9
  134. package/dist/test/test-helper.js +15 -106
  135. package/dist/test/test-helper.js.map +1 -1
  136. package/dist/to-schema.d.ts +1 -1
  137. package/dist/to-source-code.d.ts +3 -2
  138. package/dist/to-source-code.js +20 -0
  139. package/dist/to-source-code.js.map +1 -1
  140. package/dist/tsconfig.tsbuildinfo +1 -1
  141. package/dist/types/platformos-liquid-docs.d.ts +128 -0
  142. package/dist/types/platformos-liquid-docs.js +3 -0
  143. package/dist/types/platformos-liquid-docs.js.map +1 -0
  144. package/dist/types/schemas/index.d.ts +0 -2
  145. package/dist/types/schemas/index.js.map +1 -1
  146. package/dist/types.d.ts +26 -67
  147. package/dist/types.js +3 -5
  148. package/dist/types.js.map +1 -1
  149. package/dist/utils/block.js.map +1 -1
  150. package/dist/utils/index.d.ts +0 -1
  151. package/dist/utils/index.js +0 -1
  152. package/dist/utils/index.js.map +1 -1
  153. package/dist/yaml/parse.d.ts +5 -0
  154. package/dist/yaml/parse.js +94 -0
  155. package/dist/yaml/parse.js.map +1 -0
  156. package/package.json +4 -3
  157. package/src/{AugmentedThemeDocset.spec.ts → AugmentedPlatformOSDocset.spec.ts} +47 -34
  158. package/src/AugmentedPlatformOSDocset.ts +89 -0
  159. package/src/JSONValidator.ts +1 -1
  160. package/src/checks/deprecated-filter/index.spec.ts +76 -248
  161. package/src/checks/deprecated-filter/index.ts +5 -53
  162. package/src/checks/deprecated-tag/index.spec.ts +85 -34
  163. package/src/checks/deprecated-tag/index.ts +27 -22
  164. package/src/checks/duplicate-function-arguments/index.ts +1 -1
  165. package/src/checks/duplicate-render-partial-arguments/index.spec.ts +12 -12
  166. package/src/checks/duplicate-render-partial-arguments/index.ts +1 -1
  167. package/src/checks/graphql/index.ts +1 -1
  168. package/src/checks/graphql-variables/index.spec.ts +95 -0
  169. package/src/checks/graphql-variables/index.ts +4 -0
  170. package/src/checks/img-width-and-height/index.ts +2 -2
  171. package/src/checks/index.ts +11 -80
  172. package/src/checks/invalid-hash-assign-target/index.spec.ts +27 -27
  173. package/src/checks/json-syntax-error/index.ts +2 -2
  174. package/src/checks/liquid-html-syntax-error/checks/InvalidBooleanExpression.spec.ts +0 -11
  175. package/src/checks/liquid-html-syntax-error/checks/InvalidLoopArguments.spec.ts +1 -2
  176. package/src/checks/liquid-html-syntax-error/checks/InvalidLoopArguments.ts +2 -2
  177. package/src/checks/liquid-html-syntax-error/checks/InvalidTagSyntax.spec.ts +259 -0
  178. package/src/checks/liquid-html-syntax-error/checks/InvalidTagSyntax.ts +89 -0
  179. package/src/checks/liquid-html-syntax-error/checks/UnknownTag.spec.ts +293 -0
  180. package/src/checks/liquid-html-syntax-error/checks/UnknownTag.ts +43 -0
  181. package/src/checks/liquid-html-syntax-error/index.spec.ts +1 -6
  182. package/src/checks/liquid-html-syntax-error/index.ts +26 -5
  183. package/src/checks/matching-translations/index.spec.ts +187 -354
  184. package/src/checks/matching-translations/index.ts +117 -107
  185. package/src/checks/metadata-params/index.ts +6 -8
  186. package/src/checks/missing-asset/index.ts +1 -1
  187. package/src/checks/{missing-template → missing-partial}/index.spec.ts +6 -6
  188. package/src/checks/{missing-template → missing-partial}/index.ts +12 -26
  189. package/src/checks/orphaned-partial/index.ts +3 -3
  190. package/src/checks/parser-blocking-script/index.spec.ts +0 -118
  191. package/src/checks/parser-blocking-script/index.ts +3 -33
  192. package/src/checks/parser-blocking-script/suggestions.ts +1 -28
  193. package/src/checks/translation-key-exists/index.ts +1 -1
  194. package/src/checks/unclosed-html-element/index.ts +5 -1
  195. package/src/checks/undefined-object/index.spec.ts +32 -111
  196. package/src/checks/undefined-object/index.ts +15 -34
  197. package/src/checks/unique-doc-param-names/index.ts +1 -1
  198. package/src/checks/unknown-filter/index.spec.ts +2 -2
  199. package/src/checks/unknown-filter/index.ts +3 -3
  200. package/src/checks/unknown-property/index.ts +1 -1
  201. package/src/checks/unrecognized-render-partial-arguments/index.spec.ts +5 -5
  202. package/src/checks/unrecognized-render-partial-arguments/index.ts +2 -5
  203. package/src/checks/unused-assign/index.spec.ts +0 -30
  204. package/src/checks/unused-assign/index.ts +2 -2
  205. package/src/checks/unused-doc-param/index.ts +1 -1
  206. package/src/checks/utils.ts +1 -1
  207. package/src/checks/valid-doc-param-types/index.ts +4 -4
  208. package/src/checks/valid-html-translation/index.spec.ts +42 -32
  209. package/src/checks/valid-html-translation/index.ts +7 -7
  210. package/src/checks/valid-json/index.ts +2 -2
  211. package/src/checks/valid-render-partial-argument-types/index.spec.ts +13 -13
  212. package/src/checks/valid-render-partial-argument-types/index.ts +2 -5
  213. package/src/checks/variable-name/index.ts +1 -1
  214. package/src/context-utils.spec.ts +49 -77
  215. package/src/context-utils.ts +81 -129
  216. package/src/disabled-checks/index.spec.ts +26 -26
  217. package/src/disabled-checks/index.ts +2 -2
  218. package/src/disabled-checks/test-checks.ts +4 -4
  219. package/src/find-root.ts +12 -22
  220. package/src/fixes/autofix.spec.ts +2 -2
  221. package/src/fixes/autofix.ts +4 -4
  222. package/src/fixes/correctors/index.ts +4 -0
  223. package/src/ignore.spec.ts +4 -5
  224. package/src/index.ts +51 -21
  225. package/src/jsonc/parse.ts +1 -1
  226. package/src/liquid-doc/arguments.spec.ts +19 -45
  227. package/src/liquid-doc/arguments.ts +35 -42
  228. package/src/liquid-doc/liquidDoc.spec.ts +1 -1
  229. package/src/liquid-doc/liquidDoc.ts +1 -2
  230. package/src/liquid-doc/utils.ts +17 -8
  231. package/src/path.ts +16 -0
  232. package/src/test/MockApp.ts +17 -0
  233. package/src/test/MockFileSystem.spec.ts +10 -11
  234. package/src/test/MockFileSystem.ts +6 -6
  235. package/src/test/contain-offense.spec.ts +11 -3
  236. package/src/test/index.ts +1 -1
  237. package/src/test/test-helper.ts +43 -145
  238. package/src/to-source-code.ts +20 -1
  239. package/src/types/{theme-liquid-docs.ts → platformos-liquid-docs.ts} +8 -13
  240. package/src/types.ts +29 -92
  241. package/src/utils/index.ts +0 -1
  242. package/src/visitor.spec.ts +2 -2
  243. package/src/yaml/parse.ts +111 -0
  244. package/src/AugmentedThemeDocset.ts +0 -137
  245. package/src/checks/app-block-missing-schema/index.spec.ts +0 -121
  246. package/src/checks/app-block-missing-schema/index.ts +0 -46
  247. package/src/checks/app-block-valid-tags/index.spec.ts +0 -96
  248. package/src/checks/app-block-valid-tags/index.ts +0 -54
  249. package/src/checks/asset-preload/index.spec.ts +0 -78
  250. package/src/checks/asset-preload/index.ts +0 -65
  251. package/src/checks/asset-size-app-block-css/index.spec.ts +0 -88
  252. package/src/checks/asset-size-app-block-css/index.ts +0 -78
  253. package/src/checks/asset-size-app-block-javascript/index.spec.ts +0 -66
  254. package/src/checks/asset-size-app-block-javascript/index.ts +0 -78
  255. package/src/checks/asset-size-css/index.spec.ts +0 -166
  256. package/src/checks/asset-size-css/index.ts +0 -160
  257. package/src/checks/asset-size-javascript/index.spec.ts +0 -184
  258. package/src/checks/asset-size-javascript/index.ts +0 -144
  259. package/src/checks/block-id-usage/index.spec.ts +0 -76
  260. package/src/checks/block-id-usage/index.ts +0 -72
  261. package/src/checks/cdn-preconnect/index.spec.ts +0 -40
  262. package/src/checks/cdn-preconnect/index.ts +0 -43
  263. package/src/checks/content-for-header-modification/index.spec.ts +0 -65
  264. package/src/checks/content-for-header-modification/index.ts +0 -72
  265. package/src/checks/deprecate-bgsizes/index.spec.ts +0 -41
  266. package/src/checks/deprecate-bgsizes/index.ts +0 -49
  267. package/src/checks/deprecate-lazysizes/index.spec.ts +0 -26
  268. package/src/checks/deprecate-lazysizes/index.ts +0 -58
  269. package/src/checks/deprecated-filter/fixes.ts +0 -264
  270. package/src/checks/deprecated-fonts-on-sections-and-blocks/deprecated-fonts-data.ts +0 -1343
  271. package/src/checks/deprecated-fonts-on-sections-and-blocks/index.spec.ts +0 -613
  272. package/src/checks/deprecated-fonts-on-sections-and-blocks/index.ts +0 -284
  273. package/src/checks/deprecated-fonts-on-settings-schema/index.spec.ts +0 -102
  274. package/src/checks/deprecated-fonts-on-settings-schema/index.ts +0 -66
  275. package/src/checks/duplicate-content-for-arguments/index.spec.ts +0 -98
  276. package/src/checks/duplicate-content-for-arguments/index.ts +0 -43
  277. package/src/checks/empty-block-content/index.spec.ts +0 -117
  278. package/src/checks/empty-block-content/index.ts +0 -60
  279. package/src/checks/hardcoded-routes/index.spec.ts +0 -58
  280. package/src/checks/hardcoded-routes/index.ts +0 -100
  281. package/src/checks/json-missing-block/index.spec.ts +0 -435
  282. package/src/checks/json-missing-block/index.ts +0 -56
  283. package/src/checks/json-missing-block/missing-block-utils.ts +0 -147
  284. package/src/checks/liquid-free-settings/index.spec.ts +0 -180
  285. package/src/checks/liquid-free-settings/index.ts +0 -79
  286. package/src/checks/missing-content-for-arguments/index.spec.ts +0 -144
  287. package/src/checks/missing-content-for-arguments/index.ts +0 -46
  288. package/src/checks/pagination-size/index.spec.ts +0 -158
  289. package/src/checks/pagination-size/index.ts +0 -104
  290. package/src/checks/remote-asset/index.spec.ts +0 -280
  291. package/src/checks/remote-asset/index.ts +0 -238
  292. package/src/checks/reserved-doc-param-names/index.spec.ts +0 -62
  293. package/src/checks/reserved-doc-param-names/index.ts +0 -57
  294. package/src/checks/schema-presets-block-order/index.spec.ts +0 -344
  295. package/src/checks/schema-presets-block-order/index.ts +0 -154
  296. package/src/checks/schema-presets-static-blocks/index.spec.ts +0 -145
  297. package/src/checks/schema-presets-static-blocks/index.ts +0 -126
  298. package/src/checks/static-stylesheet-and-javascript-tags/index.spec.ts +0 -257
  299. package/src/checks/static-stylesheet-and-javascript-tags/index.ts +0 -48
  300. package/src/checks/unique-settings-id/index.spec.ts +0 -24
  301. package/src/checks/unique-settings-id/index.ts +0 -84
  302. package/src/checks/unique-settings-id/test-data.ts +0 -1191
  303. package/src/checks/unique-static-block-id/index.spec.ts +0 -55
  304. package/src/checks/unique-static-block-id/index.ts +0 -60
  305. package/src/checks/unrecognized-content-for-arguments/index.spec.ts +0 -145
  306. package/src/checks/unrecognized-content-for-arguments/index.ts +0 -55
  307. package/src/checks/valid-block-target/index.spec.ts +0 -1396
  308. package/src/checks/valid-block-target/index.ts +0 -142
  309. package/src/checks/valid-content-for-argument-types/index.spec.ts +0 -382
  310. package/src/checks/valid-content-for-argument-types/index.ts +0 -42
  311. package/src/checks/valid-content-for-arguments/index.spec.ts +0 -107
  312. package/src/checks/valid-content-for-arguments/index.ts +0 -98
  313. package/src/checks/valid-local-blocks/index.spec.ts +0 -286
  314. package/src/checks/valid-local-blocks/index.ts +0 -100
  315. package/src/checks/valid-local-blocks/valid-block-utils.ts +0 -97
  316. package/src/checks/valid-schema/index.spec.ts +0 -174
  317. package/src/checks/valid-schema/index.ts +0 -41
  318. package/src/checks/valid-schema-name/index.spec.ts +0 -112
  319. package/src/checks/valid-schema-name/index.ts +0 -75
  320. package/src/checks/valid-settings-key/index.spec.ts +0 -321
  321. package/src/checks/valid-settings-key/index.ts +0 -144
  322. package/src/checks/valid-static-block-type/index.spec.ts +0 -38
  323. package/src/checks/valid-static-block-type/index.ts +0 -58
  324. package/src/checks/valid-visible-if/index.spec.ts +0 -619
  325. package/src/checks/valid-visible-if/index.ts +0 -184
  326. package/src/checks/valid-visible-if/visible-if-utils.ts +0 -158
  327. package/src/tags/content-for.ts +0 -25
  328. package/src/to-schema.ts +0 -231
  329. package/src/types/schemas/index.ts +0 -5
  330. package/src/types/schemas/preset.ts +0 -52
  331. package/src/types/schemas/section.ts +0 -86
  332. package/src/types/schemas/setting.ts +0 -320
  333. package/src/types/schemas/template.ts +0 -34
  334. package/src/types/schemas/theme-block.ts +0 -34
  335. package/src/types/theme-schemas.ts +0 -80
  336. package/src/utils/block.ts +0 -300
  337. package/src/utils/markup.ts +0 -10
@@ -1,73 +1,83 @@
1
1
  import { ValidHTMLTranslation } from './index';
2
- import { highlightedOffenses, runJSONCheck } from '../../test';
2
+ import { highlightedOffenses, runYAMLCheck } from '../../test';
3
3
  import { expect, describe, it } from 'vitest';
4
4
 
5
5
  describe('Module: ValidHTMLTranslation', () => {
6
6
  it('should not report valid HTML in translations', async () => {
7
- const sourceCode = JSON.stringify({
8
- hello_html: '<h1>Hello, world</h1>',
9
- image_html: "<img src='spongebob.png'>",
10
- line_break_html: '<br>',
11
- self_closing_svg_html: '<svg />',
12
- foo: 'bar',
13
- });
7
+ const sourceCode = [
8
+ 'en:',
9
+ ' hello_html: "<h1>Hello, world</h1>"',
10
+ ' image_html: "<img src=\'spongebob.png\'>"',
11
+ ' line_break_html: "<br>"',
12
+ ' self_closing_svg_html: "<svg />"',
13
+ ' foo: bar',
14
+ ].join('\n');
14
15
 
15
- const offenses = await runJSONCheck(ValidHTMLTranslation, sourceCode, 'locales/en.json');
16
+ const offenses = await runYAMLCheck(
17
+ ValidHTMLTranslation,
18
+ sourceCode,
19
+ 'app/translations/en.yml',
20
+ );
16
21
  expect(offenses).toHaveLength(0);
17
22
  });
18
23
 
19
24
  it('should report invalid HTML in translations', async () => {
20
- const sourceCode = JSON.stringify({
21
- hello_html: '<h1>Hello, world',
22
- });
25
+ const sourceCode = 'en:\n hello_html: "<h1>Hello, world"';
23
26
 
24
- const offenses = await runJSONCheck(ValidHTMLTranslation, sourceCode, 'locales/en.json');
27
+ const offenses = await runYAMLCheck(
28
+ ValidHTMLTranslation,
29
+ sourceCode,
30
+ 'app/translations/en.yml',
31
+ );
25
32
  expect(offenses).toHaveLength(1);
26
33
  expect(offenses[0].message).to.equal(
27
34
  "LiquidHTMLParsingError: Attempting to end parsing before HtmlElement 'h1' was closed.",
28
35
  );
29
36
 
30
- const highlights = highlightedOffenses({ 'locales/en.json': sourceCode }, offenses);
37
+ const highlights = highlightedOffenses({ 'app/translations/en.yml': sourceCode }, offenses);
31
38
  expect(highlights).toHaveLength(1);
32
39
  expect(highlights[0]).to.equal(`"<h1>Hello, world"`);
33
40
  });
34
41
 
35
42
  it('should report nested invalid HTML in translations', async () => {
36
- const sourceCode = JSON.stringify({
37
- hello: {
38
- world: {
39
- today: {
40
- good: {
41
- day_html: '<h1>Hello, world',
42
- },
43
- },
44
- },
45
- },
46
- });
43
+ const sourceCode = [
44
+ 'en:',
45
+ ' hello:',
46
+ ' world:',
47
+ ' today:',
48
+ ' good:',
49
+ ' day_html: "<h1>Hello, world"',
50
+ ].join('\n');
47
51
 
48
- const offenses = await runJSONCheck(ValidHTMLTranslation, sourceCode, 'locales/en.json');
52
+ const offenses = await runYAMLCheck(
53
+ ValidHTMLTranslation,
54
+ sourceCode,
55
+ 'app/translations/en.yml',
56
+ );
49
57
  expect(offenses).toHaveLength(1);
50
58
  expect(offenses[0].message).to.equal(
51
59
  "LiquidHTMLParsingError: Attempting to end parsing before HtmlElement 'h1' was closed.",
52
60
  );
53
61
 
54
- const highlights = highlightedOffenses({ 'locales/en.json': sourceCode }, offenses);
62
+ const highlights = highlightedOffenses({ 'app/translations/en.yml': sourceCode }, offenses);
55
63
  expect(highlights).toHaveLength(1);
56
64
  expect(highlights[0]).to.equal(`"<h1>Hello, world"`);
57
65
  });
58
66
 
59
67
  it('should report pluralized key with invalid HTML', async () => {
60
- const sourceCode = JSON.stringify({
61
- hello_html: { one: '<h1>Hello, world' },
62
- });
68
+ const sourceCode = 'en:\n hello_html:\n one: "<h1>Hello, world"';
63
69
 
64
- const offenses = await runJSONCheck(ValidHTMLTranslation, sourceCode, 'locales/en.json');
70
+ const offenses = await runYAMLCheck(
71
+ ValidHTMLTranslation,
72
+ sourceCode,
73
+ 'app/translations/en.yml',
74
+ );
65
75
  expect(offenses).toHaveLength(1);
66
76
  expect(offenses[0].message).to.equal(
67
77
  "LiquidHTMLParsingError: Attempting to end parsing before HtmlElement 'h1' was closed.",
68
78
  );
69
79
 
70
- const highlights = highlightedOffenses({ 'locales/en.json': sourceCode }, offenses);
80
+ const highlights = highlightedOffenses({ 'app/translations/en.yml': sourceCode }, offenses);
71
81
  expect(highlights).toHaveLength(1);
72
82
  expect(highlights[0]).to.equal(`"<h1>Hello, world"`);
73
83
  });
@@ -1,25 +1,25 @@
1
- import { SourceCodeType, JSONCheckDefinition, Severity, Problem, LiteralNode } from '../../types';
1
+ import { SourceCodeType, YAMLCheckDefinition, Severity, Problem, LiteralNode } from '../../types';
2
2
  import { toLiquidHtmlAST } from '@platformos/liquid-html-parser';
3
3
 
4
- export const ValidHTMLTranslation: JSONCheckDefinition = {
4
+ export const ValidHTMLTranslation: YAMLCheckDefinition = {
5
5
  meta: {
6
6
  code: 'ValidHTMLTranslation',
7
7
  name: 'Valid HTML Translation',
8
8
  docs: {
9
9
  description: 'This check exists to prevent invalid HTML inside translations.',
10
- url: 'https://shopify.dev/docs/storefronts/themes/tools/theme-check/checks/valid-html-translation',
10
+ url: 'https://documentation.platformos.com/developer-guide/platformos-check/checks/valid-html-translation',
11
11
  recommended: true,
12
12
  },
13
- type: SourceCodeType.JSON,
13
+ type: SourceCodeType.YAML,
14
14
  severity: Severity.WARNING,
15
15
  schema: {},
16
16
  targets: [],
17
17
  },
18
18
 
19
19
  create(context) {
20
- // We ignore non-`locales/` json files.
20
+ // We ignore yaml files that aren't translation files.
21
21
  const relativePath = context.toRelativePath(context.file.uri);
22
- if (!relativePath.startsWith('locales/')) return {};
22
+ if (!relativePath.includes('/translations/')) return {};
23
23
 
24
24
  return {
25
25
  async Literal(node: LiteralNode) {
@@ -32,7 +32,7 @@ export const ValidHTMLTranslation: JSONCheckDefinition = {
32
32
  } catch (error) {
33
33
  const loc = node.loc;
34
34
 
35
- const problem: Problem<SourceCodeType.JSON> = {
35
+ const problem: Problem<SourceCodeType.YAML> = {
36
36
  message: `${error}.`,
37
37
  startIndex: loc.start.offset,
38
38
  endIndex: loc.end.offset,
@@ -7,9 +7,9 @@ export const ValidJSON: JSONCheckDefinition = {
7
7
  name: 'Enforce valid JSON',
8
8
  docs: {
9
9
  description:
10
- 'This check exists to prevent invalid JSON files in themes. Will check against schema if available.',
10
+ 'This check exists to prevent invalid JSON files in apps. Will check against schema if available.',
11
11
  recommended: true,
12
- url: 'https://shopify.dev/docs/storefronts/themes/tools/theme-check/checks/json-syntax-error',
12
+ url: 'https://documentation.platformos.com/developer-guide/platformos-check/checks/json-syntax-error',
13
13
  },
14
14
  type: SourceCodeType.JSON,
15
15
  severity: Severity.ERROR,
@@ -41,7 +41,7 @@ describe('Module: ValidRenderPartialParamTypes', () => {
41
41
 
42
42
  for (const test of typeTests) {
43
43
  describe(`${test.type} validation`, () => {
44
- const makeSnippet = (type: string) => `
44
+ const makePartial = (type: string) => `
45
45
  {% doc %}
46
46
  @param {${type}} param - Description
47
47
  {% enddoc %}
@@ -57,7 +57,7 @@ describe('Module: ValidRenderPartialParamTypes', () => {
57
57
  undefined,
58
58
  {},
59
59
  {
60
- 'app/views/partials/card.liquid': makeSnippet(test.type),
60
+ 'app/views/partials/card.liquid': makePartial(test.type),
61
61
  },
62
62
  );
63
63
  expect(offenses).toHaveLength(0);
@@ -73,7 +73,7 @@ describe('Module: ValidRenderPartialParamTypes', () => {
73
73
  undefined,
74
74
  {},
75
75
  {
76
- 'app/views/partials/card.liquid': makeSnippet(test.type),
76
+ 'app/views/partials/card.liquid': makePartial(test.type),
77
77
  },
78
78
  );
79
79
  expect(offenses).toHaveLength(1);
@@ -226,7 +226,7 @@ describe('Module: ValidRenderPartialParamTypes', () => {
226
226
  });
227
227
 
228
228
  describe('suggestions', () => {
229
- const makeSnippet = (type: string) => `
229
+ const makePartial = (type: string) => `
230
230
  {% doc %}
231
231
  @param {${type}} param - Description
232
232
  {% enddoc %}
@@ -241,7 +241,7 @@ describe('Module: ValidRenderPartialParamTypes', () => {
241
241
  undefined,
242
242
  {},
243
243
  {
244
- 'app/views/partials/card.liquid': makeSnippet('string'),
244
+ 'app/views/partials/card.liquid': makePartial('string'),
245
245
  },
246
246
  );
247
247
 
@@ -291,7 +291,7 @@ describe('Module: ValidRenderPartialParamTypes', () => {
291
291
  undefined,
292
292
  {},
293
293
  {
294
- 'app/views/partials/card.liquid': makeSnippet('string'),
294
+ 'app/views/partials/card.liquid': makePartial('string'),
295
295
  },
296
296
  );
297
297
 
@@ -338,7 +338,7 @@ describe('Module: ValidRenderPartialParamTypes', () => {
338
338
  undefined,
339
339
  {},
340
340
  {
341
- 'app/views/partials/card.liquid': makeSnippet('string'),
341
+ 'app/views/partials/card.liquid': makePartial('string'),
342
342
  },
343
343
  );
344
344
 
@@ -356,7 +356,7 @@ describe('Module: ValidRenderPartialParamTypes', () => {
356
356
  undefined,
357
357
  {},
358
358
  {
359
- 'app/views/partials/card.liquid': makeSnippet('string'),
359
+ 'app/views/partials/card.liquid': makePartial('string'),
360
360
  },
361
361
  );
362
362
 
@@ -376,7 +376,7 @@ describe('Module: ValidRenderPartialParamTypes', () => {
376
376
  undefined,
377
377
  {},
378
378
  {
379
- 'app/views/partials/card.liquid': makeSnippet('string'),
379
+ 'app/views/partials/card.liquid': makePartial('string'),
380
380
  },
381
381
  );
382
382
 
@@ -396,7 +396,7 @@ describe('Module: ValidRenderPartialParamTypes', () => {
396
396
  undefined,
397
397
  {},
398
398
  {
399
- 'app/views/partials/card.liquid': makeSnippet('string'),
399
+ 'app/views/partials/card.liquid': makePartial('string'),
400
400
  },
401
401
  );
402
402
 
@@ -414,7 +414,7 @@ describe('Module: ValidRenderPartialParamTypes', () => {
414
414
  undefined,
415
415
  {},
416
416
  {
417
- 'app/views/partials/card.liquid': makeSnippet('object'),
417
+ 'app/views/partials/card.liquid': makePartial('object'),
418
418
  },
419
419
  );
420
420
 
@@ -431,7 +431,7 @@ describe('Module: ValidRenderPartialParamTypes', () => {
431
431
  undefined,
432
432
  {},
433
433
  {
434
- 'app/views/partials/card.liquid': makeSnippet('string'),
434
+ 'app/views/partials/card.liquid': makePartial('string'),
435
435
  },
436
436
  );
437
437
 
@@ -452,7 +452,7 @@ describe('Module: ValidRenderPartialParamTypes', () => {
452
452
  undefined,
453
453
  {},
454
454
  {
455
- 'app/views/partials/card.liquid': makeSnippet('string'),
455
+ 'app/views/partials/card.liquid': makePartial('string'),
456
456
  },
457
457
  );
458
458
 
@@ -19,7 +19,7 @@ export const ValidRenderPartialArgumentTypes: LiquidCheckDefinition = {
19
19
  description:
20
20
  'This check ensures that arguments passed to partial match the expected types defined in the liquidDoc header if present.',
21
21
  recommended: true,
22
- url: 'https://shopify.dev/docs/storefronts/themes/tools/theme-check/checks/valid-render-partial-argument-types',
22
+ url: 'https://documentation.platformos.com/developer-guide/platformos-check/checks/valid-render-partial-argument-types',
23
23
  },
24
24
  type: SourceCodeType.LiquidHtml,
25
25
  severity: Severity.WARNING,
@@ -72,10 +72,7 @@ export const ValidRenderPartialArgumentTypes: LiquidCheckDefinition = {
72
72
 
73
73
  if (!partialName) return;
74
74
 
75
- const liquidDocParameters = await getLiquidDocParams(
76
- context,
77
- `app/views/partials/${partialName}.liquid`,
78
- );
75
+ const liquidDocParameters = await getLiquidDocParams(context, partialName);
79
76
 
80
77
  if (!liquidDocParameters) return;
81
78
 
@@ -48,7 +48,7 @@ export const VariableName: LiquidCheckDefinition<typeof schema> = {
48
48
  name: 'Invalid variable naming format',
49
49
  docs: {
50
50
  description: 'This check is aimed at using certain variable naming conventions',
51
- url: 'https://shopify.dev/docs/storefronts/themes/tools/theme-check/checks/variable-name',
51
+ url: 'https://documentation.platformos.com/developer-guide/platformos-check/checks/variable-name',
52
52
  recommended: true,
53
53
  },
54
54
  type: SourceCodeType.LiquidHtml,
@@ -1,103 +1,75 @@
1
1
  import { beforeEach, describe, expect, it } from 'vitest';
2
- import {
3
- makeGetDefaultLocale,
4
- makeGetDefaultTranslations,
5
- makeGetMetafieldDefinitions,
6
- } from './context-utils';
2
+ import { makeGetDefaultLocale, makeGetDefaultTranslations } from './context-utils';
7
3
  import { MockFileSystem } from './test';
8
4
  import { AbstractFileSystem } from '@platformos/platformos-common';
9
5
 
10
6
  describe('Unit: getDefaultLocale', () => {
11
- let fs: AbstractFileSystem;
12
- beforeEach(() => {
13
- fs = new MockFileSystem(
7
+ it('should always return en (en.yml is the reference locale file)', async () => {
8
+ const fs: AbstractFileSystem = new MockFileSystem(
14
9
  {
15
- 'gitRootTheme/locales/en.default.json': JSON.stringify({ beverage: 'coffee' }),
16
- 'gitRootTheme/locales/fr.json': JSON.stringify({ beverage: 'coffee' }),
17
- 'gitRootTheme/snippet/foo.liquid': JSON.stringify({ beverage: 'coffee' }),
18
- 'frenchDefault/locales/fr.default.json': JSON.stringify({ beverage: 'café' }),
19
- 'frenchDefault/snippet/foo.liquid': JSON.stringify({ beverage: 'coffee' }),
20
- '.shopify/metafields.json': JSON.stringify({
21
- product: [
22
- {
23
- key: 'color',
24
- name: 'color',
25
- namespace: 'custom',
26
- description: 'the color of the product',
27
- type: {
28
- category: 'COLOR',
29
- name: 'color',
30
- },
31
- },
32
- ],
33
- }),
10
+ 'app/translations/en.yml': 'en:\n beverage: coffee\n',
11
+ 'app/translations/fr.yml': 'fr:\n beverage: café\n',
34
12
  },
35
- 'shopify-vfs:/',
13
+ 'platformos-vfs:/',
36
14
  );
37
- });
38
15
 
39
- it('should return the correct translations depending on the root', async () => {
40
- let getDefaultLocale = makeGetDefaultLocale(fs, 'shopify-vfs:/gitRootTheme');
16
+ const getDefaultLocale = makeGetDefaultLocale(fs, 'platformos-vfs:/');
41
17
  expect(await getDefaultLocale()).to.eql('en');
42
-
43
- getDefaultLocale = makeGetDefaultLocale(fs, 'shopify-vfs:/frenchDefault');
44
- expect(await getDefaultLocale()).to.eql('fr');
45
18
  });
46
19
 
47
- describe('Unit: makeGetMetafieldDefinitions', () => {
48
- it('should return metafield definitions in correct format', async () => {
49
- const getMetafieldDefinitions = makeGetMetafieldDefinitions(fs);
50
-
51
- let definitions = await getMetafieldDefinitions('shopify-vfs:/');
20
+ it('should return en even when no translation files exist', async () => {
21
+ const fs: AbstractFileSystem = new MockFileSystem({}, 'platformos-vfs:/');
22
+ const getDefaultLocale = makeGetDefaultLocale(fs, 'platformos-vfs:/');
23
+ expect(await getDefaultLocale()).to.eql('en');
24
+ });
52
25
 
53
- expect(definitions.product).toHaveLength(1);
54
- expect(definitions.product[0]).deep.equals({
55
- key: 'color',
56
- name: 'color',
57
- namespace: 'custom',
58
- description: 'the color of the product',
59
- type: {
60
- category: 'COLOR',
61
- name: 'color',
26
+ describe('Unit: getDefaultTranslationsFactory', () => {
27
+ it('should return translations from en.yml stripped of the locale prefix', async () => {
28
+ const fs: AbstractFileSystem = new MockFileSystem(
29
+ {
30
+ 'app/translations/en.yml': 'en:\n beverage: coffee\n',
31
+ 'app/translations/fr.yml': 'fr:\n beverage: café\n',
62
32
  },
63
- });
33
+ 'platformos-vfs:/',
34
+ );
35
+
36
+ const getDefaultTranslations = makeGetDefaultTranslations(fs, [], 'platformos-vfs:/');
37
+ expect(await getDefaultTranslations()).to.eql({ beverage: 'coffee' });
64
38
  });
65
39
 
66
- it("should return no metafield definitions if file isn't in correct format", async () => {
67
- fs = new MockFileSystem(
40
+ it('should return empty object when no en.yml exists', async () => {
41
+ const fs: AbstractFileSystem = new MockFileSystem(
68
42
  {
69
- '.shopify/metafields.json': JSON.stringify('uhoh'),
43
+ 'app/translations/fr.yml': 'fr:\n beverage: café\n',
70
44
  },
71
- 'shopify-vfs:/',
45
+ 'platformos-vfs:/',
72
46
  );
73
- const getMetafieldDefinitions = makeGetMetafieldDefinitions(fs);
74
47
 
75
- let definitions = await getMetafieldDefinitions('shopify-vfs:/');
76
-
77
- expect(definitions).deep.equals({
78
- article: [],
79
- blog: [],
80
- collection: [],
81
- company: [],
82
- company_location: [],
83
- location: [],
84
- market: [],
85
- order: [],
86
- page: [],
87
- product: [],
88
- variant: [],
89
- shop: [],
90
- });
48
+ const getDefaultTranslations = makeGetDefaultTranslations(fs, [], 'platformos-vfs:/');
49
+ expect(await getDefaultTranslations()).to.eql({});
91
50
  });
92
- });
93
51
 
94
- describe('Unit: getDefaultTranslationsFactory', () => {
95
- it('should return the correct translations depending on the root', async () => {
96
- let getDefaultTranslations = makeGetDefaultTranslations(fs, [], 'shopify-vfs:/gitRootTheme');
97
- expect(await getDefaultTranslations()).to.eql({ beverage: 'coffee' });
52
+ it('should prefer translations from the in-memory app buffer over the filesystem', async () => {
53
+ const fs: AbstractFileSystem = new MockFileSystem(
54
+ {
55
+ 'app/translations/en.yml': 'en:\n beverage: coffee\n',
56
+ },
57
+ 'platformos-vfs:/',
58
+ );
98
59
 
99
- getDefaultTranslations = makeGetDefaultTranslations(fs, [], 'shopify-vfs:/frenchDefault');
100
- expect(await getDefaultTranslations()).to.eql({ beverage: 'café' });
60
+ // Simulate an open buffer with different content
61
+ const { toSourceCode } = await import('./to-source-code');
62
+ const bufferedSourceCode = toSourceCode(
63
+ 'platformos-vfs:/app/translations/en.yml',
64
+ 'en:\n beverage: tea\n',
65
+ );
66
+
67
+ const getDefaultTranslations = makeGetDefaultTranslations(
68
+ fs,
69
+ [bufferedSourceCode],
70
+ 'platformos-vfs:/',
71
+ );
72
+ expect(await getDefaultTranslations()).to.eql({ beverage: 'tea' });
101
73
  });
102
74
  });
103
75
  });