@platformos/platformos-check-common 0.0.6 → 0.0.8

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