@platformos/platformos-check-common 0.0.7 → 0.0.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (309) hide show
  1. package/CHANGELOG.md +8 -0
  2. package/dist/AugmentedPlatformOSDocset.d.ts +11 -0
  3. package/dist/AugmentedPlatformOSDocset.js +81 -0
  4. package/dist/AugmentedPlatformOSDocset.js.map +1 -0
  5. package/dist/JSONValidator.js +1 -1
  6. package/dist/JSONValidator.js.map +1 -1
  7. package/dist/checks/deprecated-filter/index.js +4 -41
  8. package/dist/checks/deprecated-filter/index.js.map +1 -1
  9. package/dist/checks/deprecated-tag/index.js +21 -22
  10. package/dist/checks/deprecated-tag/index.js.map +1 -1
  11. package/dist/checks/duplicate-function-arguments/index.js +1 -1
  12. package/dist/checks/duplicate-function-arguments/index.js.map +1 -1
  13. package/dist/checks/duplicate-render-partial-arguments/index.js +1 -1
  14. package/dist/checks/duplicate-render-partial-arguments/index.js.map +1 -1
  15. package/dist/checks/graphql/index.js +1 -1
  16. package/dist/checks/graphql/index.js.map +1 -1
  17. package/dist/checks/img-width-and-height/index.js +1 -1
  18. package/dist/checks/img-width-and-height/index.js.map +1 -1
  19. package/dist/checks/index.d.ts +3 -3
  20. package/dist/checks/index.js +4 -79
  21. package/dist/checks/index.js.map +1 -1
  22. package/dist/checks/json-syntax-error/index.js +1 -1
  23. package/dist/checks/json-syntax-error/index.js.map +1 -1
  24. package/dist/checks/liquid-html-syntax-error/index.js +2 -2
  25. package/dist/checks/liquid-html-syntax-error/index.js.map +1 -1
  26. package/dist/checks/matching-translations/index.d.ts +2 -2
  27. package/dist/checks/matching-translations/index.js +20 -31
  28. package/dist/checks/matching-translations/index.js.map +1 -1
  29. package/dist/checks/metadata-params/index.js +6 -3
  30. package/dist/checks/metadata-params/index.js.map +1 -1
  31. package/dist/checks/missing-asset/index.js +1 -1
  32. package/dist/checks/missing-asset/index.js.map +1 -1
  33. package/dist/checks/missing-partial/index.d.ts +6 -0
  34. package/dist/checks/missing-partial/index.js +70 -0
  35. package/dist/checks/missing-partial/index.js.map +1 -0
  36. package/dist/checks/orphaned-partial/index.js +4 -4
  37. package/dist/checks/orphaned-partial/index.js.map +1 -1
  38. package/dist/checks/parser-blocking-script/index.js +10 -36
  39. package/dist/checks/parser-blocking-script/index.js.map +1 -1
  40. package/dist/checks/parser-blocking-script/suggestions.d.ts +1 -2
  41. package/dist/checks/parser-blocking-script/suggestions.js +1 -11
  42. package/dist/checks/parser-blocking-script/suggestions.js.map +1 -1
  43. package/dist/checks/reserved-doc-param-names/index.js +6 -5
  44. package/dist/checks/reserved-doc-param-names/index.js.map +1 -1
  45. package/dist/checks/translation-key-exists/index.js +1 -1
  46. package/dist/checks/translation-key-exists/index.js.map +1 -1
  47. package/dist/checks/unclosed-html-element/index.js +5 -1
  48. package/dist/checks/unclosed-html-element/index.js.map +1 -1
  49. package/dist/checks/undefined-object/index.js +7 -30
  50. package/dist/checks/undefined-object/index.js.map +1 -1
  51. package/dist/checks/unique-doc-param-names/index.js +1 -1
  52. package/dist/checks/unique-doc-param-names/index.js.map +1 -1
  53. package/dist/checks/unknown-filter/index.js +3 -3
  54. package/dist/checks/unknown-filter/index.js.map +1 -1
  55. package/dist/checks/unknown-property/index.js +1 -1
  56. package/dist/checks/unknown-property/index.js.map +1 -1
  57. package/dist/checks/unrecognized-render-partial-arguments/index.js +2 -2
  58. package/dist/checks/unrecognized-render-partial-arguments/index.js.map +1 -1
  59. package/dist/checks/unused-assign/index.js +1 -1
  60. package/dist/checks/unused-assign/index.js.map +1 -1
  61. package/dist/checks/unused-doc-param/index.js +1 -1
  62. package/dist/checks/unused-doc-param/index.js.map +1 -1
  63. package/dist/checks/utils.js +1 -1
  64. package/dist/checks/utils.js.map +1 -1
  65. package/dist/checks/valid-content-for-arguments/index.js +1 -1
  66. package/dist/checks/valid-content-for-arguments/index.js.map +1 -1
  67. package/dist/checks/valid-doc-param-types/index.js +4 -4
  68. package/dist/checks/valid-doc-param-types/index.js.map +1 -1
  69. package/dist/checks/valid-html-translation/index.d.ts +2 -2
  70. package/dist/checks/valid-html-translation/index.js +4 -4
  71. package/dist/checks/valid-html-translation/index.js.map +1 -1
  72. package/dist/checks/valid-json/index.js +1 -1
  73. package/dist/checks/valid-json/index.js.map +1 -1
  74. package/dist/checks/valid-render-partial-argument-types/index.js +2 -2
  75. package/dist/checks/valid-render-partial-argument-types/index.js.map +1 -1
  76. package/dist/checks/variable-name/index.js +1 -1
  77. package/dist/checks/variable-name/index.js.map +1 -1
  78. package/dist/context-utils.d.ts +2 -7
  79. package/dist/context-utils.js +39 -109
  80. package/dist/context-utils.js.map +1 -1
  81. package/dist/disabled-checks/index.js +4 -2
  82. package/dist/disabled-checks/index.js.map +1 -1
  83. package/dist/doc-generator/DocBlockGenerator.d.ts +16 -0
  84. package/dist/doc-generator/DocBlockGenerator.js +464 -0
  85. package/dist/doc-generator/DocBlockGenerator.js.map +1 -0
  86. package/dist/doc-generator/index.d.ts +1 -0
  87. package/dist/doc-generator/index.js +6 -0
  88. package/dist/doc-generator/index.js.map +1 -0
  89. package/dist/find-root.d.ts +7 -10
  90. package/dist/find-root.js +10 -17
  91. package/dist/find-root.js.map +1 -1
  92. package/dist/fixes/autofix.d.ts +4 -4
  93. package/dist/fixes/autofix.js +2 -2
  94. package/dist/fixes/autofix.js.map +1 -1
  95. package/dist/fixes/correctors/index.js +4 -0
  96. package/dist/fixes/correctors/index.js.map +1 -1
  97. package/dist/index.d.ts +4 -5
  98. package/dist/index.js +34 -17
  99. package/dist/index.js.map +1 -1
  100. package/dist/jsonc/parse.d.ts +1 -1
  101. package/dist/jsonc/parse.js +1 -1
  102. package/dist/liquid-doc/arguments.d.ts +7 -8
  103. package/dist/liquid-doc/arguments.js +20 -28
  104. package/dist/liquid-doc/arguments.js.map +1 -1
  105. package/dist/liquid-doc/liquidDoc.d.ts +1 -1
  106. package/dist/liquid-doc/liquidDoc.js.map +1 -1
  107. package/dist/liquid-doc/utils.d.ts +1 -1
  108. package/dist/liquid-doc/utils.js +4 -3
  109. package/dist/liquid-doc/utils.js.map +1 -1
  110. package/dist/path.d.ts +1 -0
  111. package/dist/path.js +5 -1
  112. package/dist/path.js.map +1 -1
  113. package/dist/test/MockApp.d.ts +16 -0
  114. package/dist/test/MockApp.js +16 -0
  115. package/dist/test/MockApp.js.map +1 -0
  116. package/dist/test/MockFileSystem.d.ts +3 -3
  117. package/dist/test/MockFileSystem.js +6 -6
  118. package/dist/test/MockFileSystem.js.map +1 -1
  119. package/dist/test/index.d.ts +1 -1
  120. package/dist/test/index.js +1 -1
  121. package/dist/test/index.js.map +1 -1
  122. package/dist/test/test-helper.d.ts +10 -9
  123. package/dist/test/test-helper.js +15 -106
  124. package/dist/test/test-helper.js.map +1 -1
  125. package/dist/to-schema.d.ts +1 -1
  126. package/dist/to-source-code.d.ts +3 -2
  127. package/dist/to-source-code.js +20 -0
  128. package/dist/to-source-code.js.map +1 -1
  129. package/dist/tsconfig.tsbuildinfo +1 -1
  130. package/dist/types/platformos-liquid-docs.d.ts +128 -0
  131. package/dist/types/platformos-liquid-docs.js +3 -0
  132. package/dist/types/platformos-liquid-docs.js.map +1 -0
  133. package/dist/types/schemas/index.d.ts +0 -2
  134. package/dist/types/schemas/index.js.map +1 -1
  135. package/dist/types.d.ts +18 -67
  136. package/dist/types.js +3 -5
  137. package/dist/types.js.map +1 -1
  138. package/dist/utils/block.js.map +1 -1
  139. package/dist/utils/index.d.ts +0 -1
  140. package/dist/utils/index.js +0 -1
  141. package/dist/utils/index.js.map +1 -1
  142. package/dist/yaml/parse.d.ts +5 -0
  143. package/dist/yaml/parse.js +94 -0
  144. package/dist/yaml/parse.js.map +1 -0
  145. package/package.json +4 -3
  146. package/src/{AugmentedThemeDocset.spec.ts → AugmentedPlatformOSDocset.spec.ts} +47 -34
  147. package/src/AugmentedPlatformOSDocset.ts +89 -0
  148. package/src/JSONValidator.ts +1 -1
  149. package/src/checks/deprecated-filter/index.spec.ts +76 -248
  150. package/src/checks/deprecated-filter/index.ts +5 -53
  151. package/src/checks/deprecated-tag/index.spec.ts +85 -34
  152. package/src/checks/deprecated-tag/index.ts +27 -22
  153. package/src/checks/duplicate-function-arguments/index.ts +1 -1
  154. package/src/checks/duplicate-render-partial-arguments/index.ts +1 -1
  155. package/src/checks/graphql/index.ts +1 -1
  156. package/src/checks/img-width-and-height/index.ts +1 -1
  157. package/src/checks/index.ts +11 -80
  158. package/src/checks/invalid-hash-assign-target/index.spec.ts +14 -14
  159. package/src/checks/json-syntax-error/index.ts +1 -1
  160. package/src/checks/liquid-html-syntax-error/checks/InvalidBooleanExpression.spec.ts +0 -11
  161. package/src/checks/liquid-html-syntax-error/checks/InvalidLoopArguments.spec.ts +1 -2
  162. package/src/checks/liquid-html-syntax-error/index.spec.ts +1 -6
  163. package/src/checks/liquid-html-syntax-error/index.ts +2 -2
  164. package/src/checks/matching-translations/index.spec.ts +89 -346
  165. package/src/checks/matching-translations/index.ts +24 -35
  166. package/src/checks/metadata-params/index.ts +5 -7
  167. package/src/checks/missing-asset/index.ts +1 -1
  168. package/src/checks/{missing-template → missing-partial}/index.spec.ts +6 -6
  169. package/src/checks/{missing-template → missing-partial}/index.ts +6 -20
  170. package/src/checks/orphaned-partial/index.ts +3 -3
  171. package/src/checks/parser-blocking-script/index.spec.ts +0 -118
  172. package/src/checks/parser-blocking-script/index.ts +3 -33
  173. package/src/checks/parser-blocking-script/suggestions.ts +1 -28
  174. package/src/checks/translation-key-exists/index.ts +1 -1
  175. package/src/checks/unclosed-html-element/index.ts +5 -1
  176. package/src/checks/undefined-object/index.spec.ts +3 -109
  177. package/src/checks/undefined-object/index.ts +8 -33
  178. package/src/checks/unique-doc-param-names/index.ts +1 -1
  179. package/src/checks/unknown-filter/index.spec.ts +2 -2
  180. package/src/checks/unknown-filter/index.ts +3 -3
  181. package/src/checks/unknown-property/index.ts +1 -1
  182. package/src/checks/unrecognized-render-partial-arguments/index.spec.ts +5 -5
  183. package/src/checks/unrecognized-render-partial-arguments/index.ts +2 -5
  184. package/src/checks/unused-assign/index.spec.ts +0 -30
  185. package/src/checks/unused-assign/index.ts +1 -1
  186. package/src/checks/unused-doc-param/index.ts +1 -1
  187. package/src/checks/utils.ts +1 -1
  188. package/src/checks/valid-doc-param-types/index.ts +4 -4
  189. package/src/checks/valid-html-translation/index.spec.ts +42 -32
  190. package/src/checks/valid-html-translation/index.ts +7 -7
  191. package/src/checks/valid-json/index.ts +1 -1
  192. package/src/checks/valid-render-partial-argument-types/index.ts +2 -5
  193. package/src/checks/variable-name/index.ts +1 -1
  194. package/src/context-utils.spec.ts +49 -77
  195. package/src/context-utils.ts +39 -128
  196. package/src/disabled-checks/index.spec.ts +35 -0
  197. package/src/disabled-checks/index.ts +4 -2
  198. package/src/find-root.ts +12 -22
  199. package/src/fixes/autofix.spec.ts +2 -2
  200. package/src/fixes/autofix.ts +4 -4
  201. package/src/fixes/correctors/index.ts +4 -0
  202. package/src/ignore.spec.ts +0 -1
  203. package/src/index.ts +33 -21
  204. package/src/jsonc/parse.ts +1 -1
  205. package/src/liquid-doc/arguments.spec.ts +19 -45
  206. package/src/liquid-doc/arguments.ts +26 -39
  207. package/src/liquid-doc/liquidDoc.ts +1 -2
  208. package/src/liquid-doc/utils.ts +4 -3
  209. package/src/path.ts +1 -0
  210. package/src/test/{MockTheme.ts → MockApp.ts} +1 -1
  211. package/src/test/MockFileSystem.ts +6 -6
  212. package/src/test/index.ts +1 -1
  213. package/src/test/test-helper.ts +29 -127
  214. package/src/to-source-code.ts +20 -1
  215. package/src/types/{theme-liquid-docs.ts → platformos-liquid-docs.ts} +8 -13
  216. package/src/types/schemas/index.ts +0 -2
  217. package/src/types.ts +21 -92
  218. package/src/utils/index.ts +0 -1
  219. package/src/yaml/parse.ts +111 -0
  220. package/src/AugmentedThemeDocset.ts +0 -137
  221. package/src/checks/app-block-missing-schema/index.spec.ts +0 -121
  222. package/src/checks/app-block-missing-schema/index.ts +0 -46
  223. package/src/checks/app-block-valid-tags/index.spec.ts +0 -96
  224. package/src/checks/app-block-valid-tags/index.ts +0 -54
  225. package/src/checks/asset-preload/index.spec.ts +0 -78
  226. package/src/checks/asset-preload/index.ts +0 -65
  227. package/src/checks/asset-size-app-block-css/index.spec.ts +0 -88
  228. package/src/checks/asset-size-app-block-css/index.ts +0 -78
  229. package/src/checks/asset-size-app-block-javascript/index.spec.ts +0 -66
  230. package/src/checks/asset-size-app-block-javascript/index.ts +0 -78
  231. package/src/checks/asset-size-css/index.spec.ts +0 -166
  232. package/src/checks/asset-size-css/index.ts +0 -160
  233. package/src/checks/asset-size-javascript/index.spec.ts +0 -184
  234. package/src/checks/asset-size-javascript/index.ts +0 -144
  235. package/src/checks/block-id-usage/index.spec.ts +0 -76
  236. package/src/checks/block-id-usage/index.ts +0 -72
  237. package/src/checks/cdn-preconnect/index.spec.ts +0 -40
  238. package/src/checks/cdn-preconnect/index.ts +0 -43
  239. package/src/checks/content-for-header-modification/index.spec.ts +0 -65
  240. package/src/checks/content-for-header-modification/index.ts +0 -72
  241. package/src/checks/deprecate-bgsizes/index.spec.ts +0 -41
  242. package/src/checks/deprecate-bgsizes/index.ts +0 -49
  243. package/src/checks/deprecate-lazysizes/index.spec.ts +0 -26
  244. package/src/checks/deprecate-lazysizes/index.ts +0 -58
  245. package/src/checks/deprecated-filter/fixes.ts +0 -264
  246. package/src/checks/deprecated-fonts-on-sections-and-blocks/deprecated-fonts-data.ts +0 -1343
  247. package/src/checks/deprecated-fonts-on-sections-and-blocks/index.spec.ts +0 -613
  248. package/src/checks/deprecated-fonts-on-sections-and-blocks/index.ts +0 -284
  249. package/src/checks/deprecated-fonts-on-settings-schema/index.spec.ts +0 -102
  250. package/src/checks/deprecated-fonts-on-settings-schema/index.ts +0 -66
  251. package/src/checks/duplicate-content-for-arguments/index.spec.ts +0 -98
  252. package/src/checks/duplicate-content-for-arguments/index.ts +0 -43
  253. package/src/checks/empty-block-content/index.spec.ts +0 -117
  254. package/src/checks/empty-block-content/index.ts +0 -60
  255. package/src/checks/hardcoded-routes/index.spec.ts +0 -58
  256. package/src/checks/hardcoded-routes/index.ts +0 -100
  257. package/src/checks/json-missing-block/index.spec.ts +0 -435
  258. package/src/checks/json-missing-block/index.ts +0 -56
  259. package/src/checks/json-missing-block/missing-block-utils.ts +0 -147
  260. package/src/checks/liquid-free-settings/index.spec.ts +0 -180
  261. package/src/checks/liquid-free-settings/index.ts +0 -79
  262. package/src/checks/missing-content-for-arguments/index.spec.ts +0 -144
  263. package/src/checks/missing-content-for-arguments/index.ts +0 -46
  264. package/src/checks/pagination-size/index.spec.ts +0 -158
  265. package/src/checks/pagination-size/index.ts +0 -104
  266. package/src/checks/remote-asset/index.spec.ts +0 -280
  267. package/src/checks/remote-asset/index.ts +0 -238
  268. package/src/checks/reserved-doc-param-names/index.spec.ts +0 -62
  269. package/src/checks/reserved-doc-param-names/index.ts +0 -57
  270. package/src/checks/schema-presets-block-order/index.spec.ts +0 -344
  271. package/src/checks/schema-presets-block-order/index.ts +0 -154
  272. package/src/checks/schema-presets-static-blocks/index.spec.ts +0 -145
  273. package/src/checks/schema-presets-static-blocks/index.ts +0 -126
  274. package/src/checks/static-stylesheet-and-javascript-tags/index.spec.ts +0 -257
  275. package/src/checks/static-stylesheet-and-javascript-tags/index.ts +0 -48
  276. package/src/checks/unique-settings-id/index.spec.ts +0 -24
  277. package/src/checks/unique-settings-id/index.ts +0 -84
  278. package/src/checks/unique-settings-id/test-data.ts +0 -1191
  279. package/src/checks/unique-static-block-id/index.spec.ts +0 -55
  280. package/src/checks/unique-static-block-id/index.ts +0 -60
  281. package/src/checks/unrecognized-content-for-arguments/index.spec.ts +0 -145
  282. package/src/checks/unrecognized-content-for-arguments/index.ts +0 -55
  283. package/src/checks/valid-block-target/index.spec.ts +0 -1396
  284. package/src/checks/valid-block-target/index.ts +0 -142
  285. package/src/checks/valid-content-for-argument-types/index.spec.ts +0 -382
  286. package/src/checks/valid-content-for-argument-types/index.ts +0 -42
  287. package/src/checks/valid-content-for-arguments/index.spec.ts +0 -107
  288. package/src/checks/valid-content-for-arguments/index.ts +0 -98
  289. package/src/checks/valid-local-blocks/index.spec.ts +0 -286
  290. package/src/checks/valid-local-blocks/index.ts +0 -100
  291. package/src/checks/valid-local-blocks/valid-block-utils.ts +0 -97
  292. package/src/checks/valid-schema/index.spec.ts +0 -174
  293. package/src/checks/valid-schema/index.ts +0 -41
  294. package/src/checks/valid-schema-name/index.spec.ts +0 -112
  295. package/src/checks/valid-schema-name/index.ts +0 -75
  296. package/src/checks/valid-settings-key/index.spec.ts +0 -321
  297. package/src/checks/valid-settings-key/index.ts +0 -144
  298. package/src/checks/valid-static-block-type/index.spec.ts +0 -38
  299. package/src/checks/valid-static-block-type/index.ts +0 -58
  300. package/src/checks/valid-visible-if/index.spec.ts +0 -619
  301. package/src/checks/valid-visible-if/index.ts +0 -184
  302. package/src/checks/valid-visible-if/visible-if-utils.ts +0 -158
  303. package/src/tags/content-for.ts +0 -25
  304. package/src/to-schema.ts +0 -231
  305. package/src/types/schemas/section.ts +0 -86
  306. package/src/types/schemas/theme-block.ts +0 -34
  307. package/src/types/theme-schemas.ts +0 -80
  308. package/src/utils/block.ts +0 -300
  309. package/src/utils/markup.ts +0 -10
@@ -109,7 +109,7 @@ describe('detectInvalidLoopArguments', async () => {
109
109
 
110
110
  function testCheck(sourceCode: string) {
111
111
  return runLiquidCheck(LiquidHTMLSyntaxError, sourceCode, undefined, {
112
- themeDocset: {
112
+ platformosDocset: {
113
113
  graphQL: async () => null,
114
114
  tags: () =>
115
115
  Promise.resolve([
@@ -139,7 +139,6 @@ function testCheck(sourceCode: string) {
139
139
  filters: () => Promise.resolve([]),
140
140
  objects: () => Promise.resolve([]),
141
141
  liquidDrops: () => Promise.resolve([]),
142
- systemTranslations: () => Promise.resolve({}),
143
142
  },
144
143
  });
145
144
  }
@@ -86,7 +86,7 @@ describe('Module: LiquidHTMLSyntaxError', () => {
86
86
  const offenses = await runLiquidCheck(LiquidHTMLSyntaxError, sourceCode);
87
87
  expect(offenses).to.have.length(1);
88
88
  expect(offenses[0].message).to.equal(
89
- `SyntaxError: expected "#", a letter, "yield", "theme_render_rc", "spam_protection", "sign_in", "session", "rollback", "return", "response_status", "response_headers", "redirect_to", "print", "log", "include_form", "export", "context", "catch", "background", "when", "sections", "section", "graphql", "function", "render", "liquid", "layout", "increment", "include", "elsif", "else", "echo", "decrement", "content_for", "cycle", "continue", "break", "hash_assign", "assign", "try", "transaction", "parse_json", "cache", "tablerow", "unless", "if", "ifchanged", "for", "case", "capture", "paginate", "form", "end", "style", "stylesheet", "schema", "javascript", "raw", "comment", or "doc"`,
89
+ `SyntaxError: expected "#", a letter, "yield", "theme_render_rc", "spam_protection", "sign_in", "session", "rollback", "return", "response_status", "response_headers", "redirect_to", "print", "log", "include_form", "export", "context", "catch", "background", "when", "graphql", "function", "render", "liquid", "layout", "increment", "include", "elsif", "else", "echo", "decrement", "cycle", "continue", "break", "hash_assign", "assign", "try", "transaction", "parse_json", "cache", "tablerow", "unless", "if", "ifchanged", "for", "case", "capture", "form", "content_for", "end", "raw", "comment", or "doc"`,
90
90
  );
91
91
  });
92
92
 
@@ -95,11 +95,6 @@ describe('Module: LiquidHTMLSyntaxError', () => {
95
95
  {% if some_variable %}
96
96
  Hello, world!
97
97
  {% endif %}
98
- {% schema %}
99
- {
100
- "settings": [{ "visible_if": "{{ foo.bar == true }}" }]
101
- }
102
- {% endschema %}
103
98
  `;
104
99
 
105
100
  const offenses = await runLiquidCheck(LiquidHTMLSyntaxError, sourceCode);
@@ -45,8 +45,8 @@ export const LiquidHTMLSyntaxError: LiquidCheckDefinition = {
45
45
 
46
46
  create(context) {
47
47
  const ast = context.file.ast;
48
- const filtersPromise = context.themeDocset?.filters();
49
- const tagsPromise = context.themeDocset?.tags();
48
+ const filtersPromise = context.platformosDocset?.filters();
49
+ const tagsPromise = context.platformosDocset?.tags();
50
50
 
51
51
  if (!isError(ast)) {
52
52
  return {
@@ -1,276 +1,129 @@
1
1
  import { expect, describe, it } from 'vitest';
2
- import { autofix, check, highlightedOffenses } from '../../test';
2
+ import { check } from '../../test';
3
3
  import { MatchingTranslations } from '../../checks/matching-translations/index';
4
4
 
5
- const prettyJSON = (json: any) => JSON.stringify(json, null, 2);
6
-
7
5
  describe('Module: MatchingTranslations', async () => {
8
6
  it('should report offenses when the translation file is missing a key', async () => {
9
- for (const prefix of ['', '.schema']) {
10
- const theme = {
11
- [`locales/en.default${prefix}.json`]: JSON.stringify({
12
- hello: 'Hello',
13
- world: 'World',
14
- }),
15
- [`locales/pt-BR${prefix}.json`]: JSON.stringify({
16
- hello: 'Olá',
17
- }),
18
- };
7
+ const theme = {
8
+ 'app/translations/en.yml': 'en:\n hello: Hello\n world: World\n',
9
+ 'app/translations/pt-BR.yml': 'pt-BR:\n hello: Olá\n',
10
+ };
19
11
 
20
- const offenses = await check(theme, [MatchingTranslations]);
12
+ const offenses = await check(theme, [MatchingTranslations]);
21
13
 
22
- expect(offenses).to.be.of.length(1);
23
- expect(offenses).to.containOffense("The translation for 'world' is missing");
24
- }
14
+ expect(offenses).to.be.of.length(1);
15
+ expect(offenses).to.containOffense("The translation for 'world' is missing");
25
16
  });
26
17
 
27
18
  it('should report offenses when the default translation is missing a key', async () => {
28
- for (const prefix of ['', '.schema']) {
29
- const theme = {
30
- [`locales/en.default${prefix}.json`]: JSON.stringify({
31
- hello: 'Hello',
32
- }),
33
- [`locales/pt-BR${prefix}.json`]: JSON.stringify({
34
- hello: 'Olá',
35
- world: 'Mundo',
36
- }),
37
- };
19
+ const theme = {
20
+ 'app/translations/en.yml': 'en:\n hello: Hello\n',
21
+ 'app/translations/pt-BR.yml': 'pt-BR:\n hello: Olá\n world: Mundo\n',
22
+ };
38
23
 
39
- const offenses = await check(theme, [MatchingTranslations]);
24
+ const offenses = await check(theme, [MatchingTranslations]);
40
25
 
41
- expect(offenses).to.be.of.length(1);
42
- expect(offenses).to.containOffense("A default translation for 'world' does not exist");
43
- expect(offenses[0]!).to.suggest(
44
- theme[`locales/pt-BR${prefix}.json`],
45
- 'Delete unneeded translation key',
46
- {
47
- startIndex: 0,
48
- endIndex: theme[`locales/pt-BR${prefix}.json`].length,
49
- insert: prettyJSON({
50
- hello: 'Olá',
51
- }),
52
- },
53
- );
54
- }
26
+ expect(offenses).to.be.of.length(1);
27
+ expect(offenses).to.containOffense("A default translation for 'world' does not exist");
55
28
  });
56
29
 
57
30
  it('should report offenses when nested translation keys do not exist', async () => {
58
- for (const prefix of ['', '.schema']) {
59
- const theme = {
60
- [`locales/en.default${prefix}.json`]: JSON.stringify({
61
- hello: { world: 'Hello, world!' },
62
- }),
63
- [`locales/pt-BR${prefix}.json`]: JSON.stringify({
64
- hello: {},
65
- }),
66
- };
67
-
68
- const offenses = await check(theme, [MatchingTranslations]);
31
+ const theme = {
32
+ 'app/translations/en.yml': 'en:\n hello:\n world: Hello, world!\n',
33
+ 'app/translations/pt-BR.yml': 'pt-BR:\n hello: {}\n',
34
+ };
69
35
 
70
- expect(offenses).to.be.of.length(1);
71
- expect(offenses).to.containOffense({
72
- message: "The translation for 'hello.world' is missing",
73
- uri: `file:///locales/pt-BR${prefix}.json`,
74
- });
36
+ const offenses = await check(theme, [MatchingTranslations]);
75
37
 
76
- const fixed = await autofix(theme, offenses);
77
- expect(fixed[`locales/pt-BR${prefix}.json`]).to.eql(
78
- prettyJSON({
79
- hello: {
80
- world: 'TODO',
81
- },
82
- }),
83
- );
84
- }
38
+ expect(offenses).to.be.of.length(1);
39
+ expect(offenses).to.containOffense({
40
+ message: "The translation for 'hello.world' is missing",
41
+ uri: `file:///app/translations/pt-BR.yml`,
42
+ });
85
43
  });
86
44
 
87
45
  it('should report offenses when translation shapes do not match', async () => {
88
- for (const prefix of ['', '.schema']) {
89
- const theme = {
90
- [`locales/en.default${prefix}.json`]: JSON.stringify({
91
- hello: { world: 'Hello, world!' },
92
- }),
93
- [`locales/pt-BR${prefix}.json`]: JSON.stringify({
94
- hello: 'Olá',
95
- }),
96
- };
97
-
98
- const offenses = await check(theme, [MatchingTranslations]);
99
-
100
- expect(offenses).to.be.of.length(2);
101
- expect(offenses).to.containOffense({
102
- message: "A default translation for 'hello' does not exist",
103
- uri: `file:///locales/pt-BR${prefix}.json`,
104
- });
105
- expect(offenses).to.containOffense({
106
- message: "The translation for 'hello.world' is missing",
107
- uri: `file:///locales/pt-BR${prefix}.json`,
108
- });
46
+ const theme = {
47
+ 'app/translations/en.yml': 'en:\n hello:\n world: Hello, world!\n',
48
+ 'app/translations/pt-BR.yml': 'pt-BR:\n hello: Olá\n',
49
+ };
109
50
 
110
- const fixed = await autofix(theme, offenses);
51
+ const offenses = await check(theme, [MatchingTranslations]);
111
52
 
112
- expect(fixed[`locales/pt-BR${prefix}.json`]).to.eql(
113
- prettyJSON({
114
- hello: { world: 'TODO' },
115
- }),
116
- );
117
- }
53
+ expect(offenses).to.be.of.length(2);
54
+ expect(offenses).to.containOffense({
55
+ message: "A default translation for 'hello' does not exist",
56
+ uri: `file:///app/translations/pt-BR.yml`,
57
+ });
58
+ expect(offenses).to.containOffense({
59
+ message: "The translation for 'hello.world' is missing",
60
+ uri: `file:///app/translations/pt-BR.yml`,
61
+ });
118
62
  });
119
63
 
120
64
  it('should report offenses when nested translation keys do not match', async () => {
121
- for (const prefix of ['', '.schema']) {
122
- const theme = {
123
- [`locales/en.default${prefix}.json`]: JSON.stringify({
124
- hello: { world: 'Hello, world!' },
125
- }),
126
- [`locales/fr${prefix}.json`]: JSON.stringify({
127
- hello: { monde: 'Bonjour, monde' },
128
- }),
129
- [`locales/es-ES${prefix}.json`]: JSON.stringify({
130
- hello: { world: 'Hello, world!', mundo: { hola: '¡Hola, mundo!' } },
131
- }),
132
- };
133
-
134
- const offenses = await check(theme, [MatchingTranslations]);
135
-
136
- expect(offenses).to.be.of.length(3);
137
- expect(offenses).to.containOffense({
138
- message: "A default translation for 'hello.monde' does not exist",
139
- uri: `file:///locales/fr${prefix}.json`,
140
- });
141
- expect(offenses).to.containOffense({
142
- message: "A default translation for 'hello.mundo.hola' does not exist",
143
- uri: `file:///locales/es-ES${prefix}.json`,
144
- });
145
- expect(offenses).to.containOffense({
146
- message: "The translation for 'hello.world' is missing",
147
- uri: `file:///locales/fr${prefix}.json`,
148
- });
149
-
150
- const fixed = await autofix(theme, offenses);
151
- expect(fixed[`locales/fr${prefix}.json`]).to.eql(
152
- prettyJSON({
153
- hello: { monde: 'Bonjour, monde', world: 'TODO' },
154
- }),
155
- );
65
+ const theme = {
66
+ 'app/translations/en.yml': 'en:\n hello:\n world: Hello, world!\n',
67
+ 'app/translations/fr.yml': 'fr:\n hello:\n monde: Bonjour, monde\n',
68
+ 'app/translations/es-ES.yml':
69
+ 'es-ES:\n hello:\n world: Hello, world!\n mundo:\n hola: "¡Hola, mundo!"\n',
70
+ };
156
71
 
157
- // Default does not exist should be a suggestion and not autofixed.
158
- expect(fixed[`locales/es-ES${prefix}.json`]).to.eql(theme[`locales/es-ES${prefix}.json`]);
159
- }
160
- });
72
+ const offenses = await check(theme, [MatchingTranslations]);
161
73
 
162
- it('should not report offenses when default translations do not exist', async () => {
163
- for (const prefix of ['', '.schema']) {
164
- const theme = {
165
- [`locales/en${prefix}.json`]: JSON.stringify({
166
- hello: 'Hello',
167
- }),
168
- [`locales/pt-BR${prefix}.json`]: JSON.stringify({
169
- hello: 'Olá',
170
- }),
171
- };
74
+ expect(offenses).to.be.of.length(3);
75
+ expect(offenses).to.containOffense({
76
+ message: "A default translation for 'hello.monde' does not exist",
77
+ uri: `file:///app/translations/fr.yml`,
78
+ });
79
+ expect(offenses).to.containOffense({
80
+ message: "A default translation for 'hello.mundo.hola' does not exist",
81
+ uri: `file:///app/translations/es-ES.yml`,
82
+ });
83
+ expect(offenses).to.containOffense({
84
+ message: "The translation for 'hello.world' is missing",
85
+ uri: `file:///app/translations/fr.yml`,
86
+ });
87
+ });
88
+
89
+ it('should not report offenses when default translations do not exist (no en.yml)', async () => {
90
+ const theme = {
91
+ 'app/translations/pt-BR.yml': 'pt-BR:\n hello: Olá\n',
92
+ };
172
93
 
173
- const offenses = await check(theme, [MatchingTranslations]);
94
+ const offenses = await check(theme, [MatchingTranslations]);
174
95
 
175
- expect(offenses).to.be.of.length(0);
176
- }
96
+ expect(offenses).to.be.of.length(0);
177
97
  });
178
98
 
179
99
  it('should not report offenses when translations match', async () => {
180
- for (const prefix of ['', '.schema']) {
181
- const theme = {
182
- [`locales/en.default${prefix}.json`]: JSON.stringify({
183
- hello: 'Hello',
184
- world: 'World',
185
- }),
186
- [`locales/pt-BR${prefix}.json`]: JSON.stringify({
187
- hello: 'Olá',
188
- world: 'Mundo',
189
- }),
190
- };
100
+ const theme = {
101
+ 'app/translations/en.yml': 'en:\n hello: Hello\n world: World\n',
102
+ 'app/translations/pt-BR.yml': 'pt-BR:\n hello: Olá\n world: Mundo\n',
103
+ };
191
104
 
192
- const offenses = await check(theme, [MatchingTranslations]);
105
+ const offenses = await check(theme, [MatchingTranslations]);
193
106
 
194
- expect(offenses).to.be.of.length(0);
195
- }
107
+ expect(offenses).to.be.of.length(0);
196
108
  });
197
109
 
198
110
  it('should not report offenses when nested translations match', async () => {
199
- for (const prefix of ['', '.schema']) {
200
- const theme = {
201
- [`locales/en.default${prefix}.json`]: JSON.stringify({
202
- hello: { world: 'Hello, world!' },
203
- }),
204
- [`locales/pt-BR${prefix}.json`]: JSON.stringify({
205
- hello: { world: 'Olá, mundo!' },
206
- }),
207
- [`locales/fr${prefix}.json`]: JSON.stringify({
208
- hello: { world: 'Bonjour, monde' },
209
- }),
210
- };
111
+ const theme = {
112
+ 'app/translations/en.yml': 'en:\n hello:\n world: Hello, world!\n',
113
+ 'app/translations/pt-BR.yml': 'pt-BR:\n hello:\n world: Olá, mundo!\n',
114
+ 'app/translations/fr.yml': 'fr:\n hello:\n world: Bonjour, monde\n',
115
+ };
211
116
 
212
- const offenses = await check(theme, [MatchingTranslations]);
117
+ const offenses = await check(theme, [MatchingTranslations]);
213
118
 
214
- expect(offenses).to.be.of.length(0);
215
- }
119
+ expect(offenses).to.be.of.length(0);
216
120
  });
217
121
 
218
122
  it('should not report offenses and ignore pluralization', async () => {
219
- for (const prefix of ['', '.schema']) {
220
- const theme = {
221
- [`locales/en.default${prefix}.json`]: JSON.stringify({
222
- hello: {
223
- one: 'Hello, you',
224
- other: "Hello, y'all",
225
- },
226
- }),
227
- [`locales/pt-BR${prefix}.json`]: JSON.stringify({
228
- hello: {
229
- zero: 'Estou sozinho :(',
230
- few: 'Olá, galerinha :)',
231
- },
232
- }),
233
- };
234
-
235
- const offenses = await check(theme, [MatchingTranslations]);
236
-
237
- expect(offenses).to.be.of.length(0);
238
- }
239
- });
240
-
241
- it('should not report offenses and ignore keys provided by Shopify', async () => {
242
- for (const prefix of ['', '.schema']) {
243
- const theme = {
244
- [`locales/en.default${prefix}.json`]: JSON.stringify({
245
- hello: 'Hello',
246
- shopify: {
247
- checkout: {
248
- general: {
249
- page_title: 'Checkout',
250
- },
251
- },
252
- },
253
- }),
254
- [`locales/pt-BR${prefix}.json`]: JSON.stringify({
255
- hello: 'Olá',
256
- shopify: {
257
- sentence: {
258
- words_connector: 'hello world',
259
- },
260
- },
261
- }),
262
- };
263
-
264
- const offenses = await check(theme, [MatchingTranslations]);
265
-
266
- expect(offenses).to.be.of.length(0);
267
- }
268
- });
269
-
270
- it('should not report offenses and ignore "*.schema.json" files', async () => {
271
123
  const theme = {
272
- 'locales/en.default.json': JSON.stringify({ hello: 'Hello' }),
273
- 'locales/pt-BR.schema.json': JSON.stringify({}),
124
+ 'app/translations/en.yml': 'en:\n hello:\n one: Hello, you\n other: "Hello, y\'all"\n',
125
+ 'app/translations/pt-BR.yml':
126
+ 'pt-BR:\n hello:\n zero: Estou sozinho :(\n few: "Olá, galerinha :)"\n',
274
127
  };
275
128
 
276
129
  const offenses = await check(theme, [MatchingTranslations]);
@@ -278,123 +131,13 @@ describe('Module: MatchingTranslations', async () => {
278
131
  expect(offenses).to.be.of.length(0);
279
132
  });
280
133
 
281
- it('should highlight the proper element when the translation file is missing a key', async () => {
282
- for (const prefix of ['', '.schema']) {
283
- const theme = {
284
- [`locales/en.default${prefix}.json`]: JSON.stringify({
285
- hello: 'Hello',
286
- world: 'World',
287
- }),
288
- [`locales/pt-BR${prefix}.json`]: JSON.stringify({
289
- hello: 'Olá',
290
- }),
291
- };
292
-
293
- const offenses = await check(theme, [MatchingTranslations]);
294
- const elements = highlightedOffenses(theme, offenses);
295
-
296
- expect(elements).to.deep.eq(['{"hello":"Olá"}']);
297
- }
298
- });
299
-
300
- it('should highlight the proper element when the default translation is missing a key', async () => {
301
- for (const prefix of ['', '.schema']) {
302
- const theme = {
303
- [`locales/en.default${prefix}.json`]: JSON.stringify({
304
- hello: 'Hello',
305
- }),
306
- [`locales/pt-BR${prefix}.json`]: JSON.stringify({
307
- hello: 'Olá',
308
- world: 'Mundo',
309
- }),
310
- };
311
-
312
- const offenses = await check(theme, [MatchingTranslations]);
313
- const elements = highlightedOffenses(theme, offenses);
314
-
315
- expect(elements).to.deep.eq(['"world":"Mundo"']);
316
- }
317
- });
318
-
319
- it('should highlight the proper element when nested translation keys do not exist', async () => {
320
- for (const prefix of ['', '.schema']) {
321
- const theme = {
322
- [`locales/en.default${prefix}.json`]: JSON.stringify({
323
- hello: {
324
- world: 'Hello, world!',
325
- },
326
- welcome: 'Welcome',
327
- }),
328
- [`locales/pt-BR${prefix}.json`]: JSON.stringify({
329
- hello: {},
330
- welcome: 'Bem-vinda',
331
- }),
332
- };
333
-
334
- const offenses = await check(theme, [MatchingTranslations]);
335
- const elements = highlightedOffenses(theme, offenses);
336
-
337
- expect(elements).to.deep.eq(['"hello":{}']);
338
- }
339
- });
340
-
341
- it('should highlight the proper element when nested translation keys do not exist and there is a sibling node', async () => {
342
- for (const prefix of ['', '.schema']) {
343
- const theme = {
344
- [`locales/en.default${prefix}.json`]: JSON.stringify({
345
- hello: {
346
- shopify: 'Shopify!',
347
- world: 'Hello, world!',
348
- },
349
- welcome: 'Welcome',
350
- }),
351
- [`locales/pt-BR${prefix}.json`]: JSON.stringify({
352
- hello: {
353
- shopify: 'Shopify!',
354
- },
355
- welcome: 'Bem-vinda',
356
- }),
357
- };
358
-
359
- const offenses = await check(theme, [MatchingTranslations]);
360
- const elements = highlightedOffenses(theme, offenses);
361
-
362
- expect(elements).to.deep.eq(['"hello":{"shopify":"Shopify!"}']);
363
- }
364
- });
365
-
366
- it('should highlight the proper element when translation shapes do not match', async () => {
367
- for (const prefix of ['', '.schema']) {
368
- const theme = {
369
- [`locales/en.default${prefix}.json`]: JSON.stringify({
370
- hello: { world: 'Hello, world!' },
371
- }),
372
- [`locales/pt-BR${prefix}.json`]: JSON.stringify({
373
- hello: 'Olá',
374
- }),
375
- };
376
-
377
- const offenses = await check(theme, [MatchingTranslations]);
378
- const elements = highlightedOffenses(theme, offenses);
379
-
380
- // We have two elements because we have two offenses:
381
- // - A default translation for 'hello' does not exist"
382
- // - The translation for 'hello.world' is missing"
383
- expect(elements).to.deep.eq(['"hello":"Olá"', '"hello":"Olá"']);
384
- }
385
- });
386
-
387
134
  it('should not highlight anything if the file is unparseable', async () => {
388
- for (const prefix of ['', '.schema']) {
389
- const theme = {
390
- [`locales/en.default${prefix}.json`]: JSON.stringify({
391
- hello: { world: 'Hello, world!' },
392
- }),
393
- [`locales/pt-BR${prefix}.json`]: `{"hello": }`,
394
- };
135
+ const theme = {
136
+ 'app/translations/en.yml': 'en:\n hello:\n world: Hello, world!\n',
137
+ 'app/translations/pt-BR.yml': 'pt-BR:\n hello: :\n bad yaml',
138
+ };
395
139
 
396
- const offenses = await check(theme, [MatchingTranslations]);
397
- expect(offenses).to.have.length(0);
398
- }
140
+ const offenses = await check(theme, [MatchingTranslations]);
141
+ expect(offenses).to.have.length(0);
399
142
  });
400
143
  });