@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
package/src/index.ts CHANGED
@@ -1,13 +1,10 @@
1
- import { AugmentedThemeDocset } from './AugmentedThemeDocset';
1
+ import { AugmentedPlatformOSDocset } from './AugmentedPlatformOSDocset';
2
2
  import { JSONValidator } from './JSONValidator';
3
3
  import {
4
4
  makeFileExists,
5
5
  makeFileSize,
6
6
  makeGetDefaultLocale,
7
- makeGetDefaultSchemaLocale,
8
- makeGetDefaultSchemaTranslations,
9
7
  makeGetDefaultTranslations,
10
- makeGetMetafieldDefinitions,
11
8
  } from './context-utils';
12
9
  import { createDisabledChecksModule } from './disabled-checks';
13
10
  import { isIgnored } from './ignore';
@@ -35,13 +32,16 @@ import {
35
32
  Settings,
36
33
  SourceCode,
37
34
  SourceCodeType,
38
- Theme,
35
+ App,
39
36
  ValidateJSON,
37
+ YAMLCheck,
38
+ YAMLSourceCode,
40
39
  } from './types';
41
40
  import { getPosition } from './utils';
42
41
  import { visitJSON, visitLiquid } from './visitors';
43
42
 
44
- export * from './AugmentedThemeDocset';
43
+ export * from './AugmentedPlatformOSDocset';
44
+ export * from './types/platformos-liquid-docs';
45
45
  export * from './checks';
46
46
  export * from './context-utils';
47
47
  export * from './find-root';
@@ -50,7 +50,6 @@ export * from './ignore';
50
50
  export * from './json';
51
51
  export * from './JSONValidator';
52
52
  export * as path from './path';
53
- export * from './to-schema';
54
53
  export * from './to-source-code';
55
54
  export * from './types';
56
55
  export * from './utils/error';
@@ -60,7 +59,6 @@ export * from './utils/types';
60
59
  export * from './utils/object';
61
60
  export * from './visitor';
62
61
  export * from './liquid-doc/liquidDoc';
63
- export { getBlockName } from './liquid-doc/arguments';
64
62
  export * from './liquid-doc/utils';
65
63
 
66
64
  const defaultErrorHandler = (_error: Error): void => {
@@ -68,7 +66,7 @@ const defaultErrorHandler = (_error: Error): void => {
68
66
  };
69
67
 
70
68
  export async function check(
71
- theme: Theme,
69
+ app: App,
72
70
  config: Config,
73
71
  injectedDependencies: Dependencies,
74
72
  ): Promise<Offense[]> {
@@ -78,15 +76,10 @@ export async function check(
78
76
  const { rootUri } = config;
79
77
  const dependencies: AugmentedDependencies = {
80
78
  ...injectedDependencies,
81
- mode: config.context,
82
79
  fileExists: makeFileExists(fs),
83
80
  fileSize: makeFileSize(fs),
84
81
  getDefaultLocale: makeGetDefaultLocale(fs, rootUri),
85
- getDefaultTranslations: makeGetDefaultTranslations(fs, theme, rootUri),
86
- getDefaultSchemaLocale: makeGetDefaultSchemaLocale(fs, rootUri),
87
- getDefaultSchemaTranslations: makeGetDefaultSchemaTranslations(fs, theme, rootUri),
88
- getMetafieldDefinitions:
89
- injectedDependencies.getMetafieldDefinitions ?? makeGetMetafieldDefinitions(fs),
82
+ getDefaultTranslations: makeGetDefaultTranslations(fs, app, rootUri),
90
83
  };
91
84
 
92
85
  const { DisabledChecksVisitor, isDisabled } = createDisabledChecksModule();
@@ -94,14 +87,14 @@ export async function check(
94
87
  const validateJSON = jsonValidator?.validate;
95
88
 
96
89
  // We're memozing those deps here because they shouldn't change within a run.
97
- if (dependencies.themeDocset && !dependencies.themeDocset.isAugmented) {
98
- dependencies.themeDocset = new AugmentedThemeDocset(dependencies.themeDocset);
90
+ if (dependencies.platformosDocset && !dependencies.platformosDocset.isAugmented) {
91
+ dependencies.platformosDocset = new AugmentedPlatformOSDocset(dependencies.platformosDocset);
99
92
  }
100
93
 
101
94
  for (const type of Object.values(SourceCodeType)) {
102
95
  switch (type) {
103
96
  case SourceCodeType.JSON: {
104
- const files = filesOfType(type, theme);
97
+ const files = filesOfType(type, app);
105
98
  const checkDefs = checksOfType(type, config.checks);
106
99
  for (const file of files) {
107
100
  for (const checkDef of checkDefs) {
@@ -113,7 +106,7 @@ export async function check(
113
106
  break;
114
107
  }
115
108
  case SourceCodeType.GraphQL: {
116
- const files = filesOfType(type, theme);
109
+ const files = filesOfType(type, app);
117
110
  const checkDefs = checksOfType(type, config.checks);
118
111
  for (const file of files) {
119
112
  for (const checkDef of checkDefs) {
@@ -125,7 +118,7 @@ export async function check(
125
118
  break;
126
119
  }
127
120
  case SourceCodeType.LiquidHtml: {
128
- const files = filesOfType(type, theme);
121
+ const files = filesOfType(type, app);
129
122
  const checkDefs = [DisabledChecksVisitor, ...checksOfType(type, config.checks)];
130
123
  for (const file of files) {
131
124
  for (const checkDef of checkDefs) {
@@ -136,6 +129,18 @@ export async function check(
136
129
  }
137
130
  break;
138
131
  }
132
+ case SourceCodeType.YAML: {
133
+ const files = filesOfType(type, app);
134
+ const checkDefs = checksOfType(type, config.checks);
135
+ for (const file of files) {
136
+ for (const checkDef of checkDefs) {
137
+ if (isIgnored(file.uri, config, checkDef)) continue;
138
+ const check = createCheck(checkDef, file, config, offenses, dependencies, validateJSON);
139
+ pipelines.push(checkYAMLFile(check, file));
140
+ }
141
+ }
142
+ break;
143
+ }
139
144
  }
140
145
  }
141
146
 
@@ -210,7 +215,7 @@ function createCheck<S extends SourceCodeType>(
210
215
  return check.create(context as any) as Check<S>;
211
216
  }
212
217
 
213
- function filesOfType<S extends SourceCodeType>(type: S, sourceCodes: Theme): SourceCode<S>[] {
218
+ function filesOfType<S extends SourceCodeType>(type: S, sourceCodes: App): SourceCode<S>[] {
214
219
  return sourceCodes.filter((file): file is SourceCode<S> => file.type === type);
215
220
  }
216
221
 
@@ -232,3 +237,10 @@ async function checkLiquidFile(check: LiquidCheck, file: LiquidSourceCode): Prom
232
237
  if (Object.keys(check).length > 0) await visitLiquid(file.ast, check);
233
238
  if (check.onCodePathEnd) await check.onCodePathEnd(file as typeof file & { ast: LiquidHtmlNode });
234
239
  }
240
+
241
+ async function checkYAMLFile(check: YAMLCheck, file: YAMLSourceCode): Promise<void> {
242
+ if (check.onCodePathStart) await check.onCodePathStart(file);
243
+ if (file.ast instanceof Error) return;
244
+ if (Object.keys(check).length > 0) await visitJSON(file.ast, check as any);
245
+ if (check.onCodePathEnd) await check.onCodePathEnd(file as typeof file & { ast: JSONNode });
246
+ }
@@ -20,7 +20,7 @@ export class JSONCParseErrors extends Error {
20
20
  }
21
21
 
22
22
  /**
23
- * At some point, we started supporting JSONC. Theme Check 2 was built on top of
23
+ * At some point, we started supporting JSONC. App Check 2 was built on top of
24
24
  * `json-to-ast` which does not support comments.
25
25
  *
26
26
  * This little adapter here will take a tree we get from `jsonc-parser` and
@@ -1,7 +1,7 @@
1
1
  import { describe, expect, it } from 'vitest';
2
2
  import { applyFixToString, createCorrector } from '../fixes';
3
3
  import { makeAddArgumentCorrector, makeRemoveArgumentCorrector } from './arguments';
4
- import { ContentForMarkup, DocumentNode, LiquidTag } from '@platformos/liquid-html-parser';
4
+ import { DocumentNode, LiquidTag, RenderMarkup } from '@platformos/liquid-html-parser';
5
5
  import { SourceCodeType, toLiquidHTMLAST } from '..';
6
6
 
7
7
  describe('Arguments', () => {
@@ -15,53 +15,45 @@ describe('Arguments', () => {
15
15
  };
16
16
 
17
17
  it('should suggest adding missing required arguments when none already exist', () => {
18
- const node = makeContentForMarkup(
19
- `{% content_for 'block', type: 'swatches', id: 'fake', some-arg: '' %}`,
20
- );
18
+ const node = makeRenderMarkup(`{% render 'partial', some-arg: '' %}`);
21
19
 
22
20
  const fixer = createCorrector(SourceCodeType.LiquidHtml, node.source);
23
21
 
24
22
  makeAddArgumentCorrector(node, requiredParam)(fixer);
25
23
 
26
24
  expect(applyFixToString(node.source, fixer.fix)).toBe(
27
- `{% content_for 'block', type: 'swatches', id: 'fake', some-arg: '', required_string: '' %}`,
25
+ `{% render 'partial', some-arg: '', required_string: '' %}`,
28
26
  );
29
27
  });
30
28
 
31
29
  it('should suggest adding missing required arguments and correcting trailing comma + whitespace', () => {
32
- const node = makeContentForMarkup(
33
- `{% content_for 'block', type: 'swatches', id: 'fake', some-arg: '', %}`,
34
- );
30
+ const node = makeRenderMarkup(`{% render 'partial', some-arg: '', %}`);
35
31
 
36
32
  const fixer = createCorrector(SourceCodeType.LiquidHtml, node.source);
37
33
 
38
34
  makeAddArgumentCorrector(node, requiredParam)(fixer);
39
35
 
40
36
  expect(applyFixToString(node.source, fixer.fix)).toBe(
41
- `{% content_for 'block', type: 'swatches', id: 'fake', some-arg: '', required_string: '' %}`,
37
+ `{% render 'partial', some-arg: '', required_string: '' %}`,
42
38
  );
43
39
  });
44
40
 
45
41
  it('should suggest adding missing required arguments and correcting trailing spaces + comma', () => {
46
- const node = makeContentForMarkup(
47
- `{% content_for 'block', type: 'swatches', id: 'fake', some-arg: '' , %}`,
48
- );
42
+ const node = makeRenderMarkup(`{% render 'partial', some-arg: '' , %}`);
49
43
 
50
44
  const fixer = createCorrector(SourceCodeType.LiquidHtml, node.source);
51
45
 
52
46
  makeAddArgumentCorrector(node, requiredParam)(fixer);
53
47
 
54
48
  expect(applyFixToString(node.source, fixer.fix)).toBe(
55
- `{% content_for 'block', type: 'swatches', id: 'fake', some-arg: '', required_string: '' %}`,
49
+ `{% render 'partial', some-arg: '', required_string: '' %}`,
56
50
  );
57
51
  });
58
52
  });
59
53
 
60
54
  describe('makeRemoveArgumentCorrector', () => {
61
55
  it("should remove the last argument and it's leading comma", () => {
62
- const node = makeContentForMarkup(
63
- `{% content_for 'block', type: 'swatches', id: 'fake', some-arg: '' %}`,
64
- );
56
+ const node = makeRenderMarkup(`{% render 'partial', id: 'fake', some-arg: '' %}`);
65
57
 
66
58
  const argToRemove = node.args.at(-1)!;
67
59
 
@@ -69,15 +61,11 @@ describe('Arguments', () => {
69
61
 
70
62
  makeRemoveArgumentCorrector(node, argToRemove)(fixer);
71
63
 
72
- expect(applyFixToString(node.source, fixer.fix)).toBe(
73
- `{% content_for 'block', type: 'swatches', id: 'fake' %}`,
74
- );
64
+ expect(applyFixToString(node.source, fixer.fix)).toBe(`{% render 'partial', id: 'fake' %}`);
75
65
  });
76
66
 
77
67
  it('should remove an argument in the middle', () => {
78
- const node = makeContentForMarkup(
79
- `{% content_for 'block', type: 'swatches', id: 'fake', some-arg: '' %}`,
80
- );
68
+ const node = makeRenderMarkup(`{% render 'partial', id: 'fake', some-arg: '' %}`);
81
69
 
82
70
  const argToRemove = node.args.at(-2)!;
83
71
 
@@ -85,15 +73,11 @@ describe('Arguments', () => {
85
73
 
86
74
  makeRemoveArgumentCorrector(node, argToRemove)(fixer);
87
75
 
88
- expect(applyFixToString(node.source, fixer.fix)).toBe(
89
- `{% content_for 'block', type: 'swatches', some-arg: '' %}`,
90
- );
76
+ expect(applyFixToString(node.source, fixer.fix)).toBe(`{% render 'partial', some-arg: '' %}`);
91
77
  });
92
78
 
93
79
  it('should remove an argument with trailing comma', () => {
94
- const node = makeContentForMarkup(
95
- `{% content_for 'block', type: 'swatches', id: 'fake', some-arg: '', %}`,
96
- );
80
+ const node = makeRenderMarkup(`{% render 'partial', id: 'fake', some-arg: '', %}`);
97
81
 
98
82
  const argToRemove = node.args.at(-1)!;
99
83
 
@@ -101,16 +85,12 @@ describe('Arguments', () => {
101
85
 
102
86
  makeRemoveArgumentCorrector(node, argToRemove)(fixer);
103
87
 
104
- expect(applyFixToString(node.source, fixer.fix)).toBe(
105
- `{% content_for 'block', type: 'swatches', id: 'fake' %}`,
106
- );
88
+ expect(applyFixToString(node.source, fixer.fix)).toBe(`{% render 'partial', id: 'fake' %}`);
107
89
  });
108
90
  });
109
91
 
110
92
  it('should remove an argument with trailing space', () => {
111
- const node = makeContentForMarkup(
112
- `{% content_for 'block', type: 'swatches', id: 'fake' , some-arg: '' %}`,
113
- );
93
+ const node = makeRenderMarkup(`{% render 'partial', id: 'fake' , some-arg: '' %}`);
114
94
 
115
95
  const argToRemove = node.args.at(-2)!;
116
96
 
@@ -118,15 +98,11 @@ describe('Arguments', () => {
118
98
 
119
99
  makeRemoveArgumentCorrector(node, argToRemove)(fixer);
120
100
 
121
- expect(applyFixToString(node.source, fixer.fix)).toBe(
122
- `{% content_for 'block', type: 'swatches', some-arg: '' %}`,
123
- );
101
+ expect(applyFixToString(node.source, fixer.fix)).toBe(`{% render 'partial', some-arg: '' %}`);
124
102
  });
125
103
 
126
104
  it('should remove an argument with leading space', () => {
127
- const node = makeContentForMarkup(
128
- `{% content_for 'block', type: 'swatches', id: 'fake', some-arg: '' %}`,
129
- );
105
+ const node = makeRenderMarkup(`{% render 'partial', id: 'fake', some-arg: '' %}`);
130
106
 
131
107
  const argToRemove = node.args.at(-1)!;
132
108
 
@@ -134,13 +110,11 @@ describe('Arguments', () => {
134
110
 
135
111
  makeRemoveArgumentCorrector(node, argToRemove)(fixer);
136
112
 
137
- expect(applyFixToString(node.source, fixer.fix)).toBe(
138
- `{% content_for 'block', type: 'swatches', id: 'fake' %}`,
139
- );
113
+ expect(applyFixToString(node.source, fixer.fix)).toBe(`{% render 'partial', id: 'fake' %}`);
140
114
  });
141
115
  });
142
116
 
143
- function makeContentForMarkup(source: string): ContentForMarkup {
117
+ function makeRenderMarkup(source: string): RenderMarkup {
144
118
  const ast = toLiquidHTMLAST(source) as DocumentNode;
145
- return (ast.children[0] as LiquidTag).markup as ContentForMarkup;
119
+ return (ast.children[0] as LiquidTag).markup as RenderMarkup;
146
120
  }
@@ -3,7 +3,6 @@
3
3
  * errors when LiquidDoc exists
4
4
  */
5
5
  import {
6
- ContentForMarkup,
7
6
  RenderMarkup,
8
7
  FunctionMarkup,
9
8
  LiquidNamedArgument,
@@ -17,20 +16,21 @@ import {
17
16
  isTypeCompatible,
18
17
  } from './utils';
19
18
  import { isLiquidString } from '../checks/utils';
19
+ import { DocumentsLocator } from '@platformos/platformos-common';
20
+ import { URI } from 'vscode-uri';
21
+ import { relative } from '../path';
20
22
 
21
23
  /**
22
24
  * Report error when unknown arguments are provided for `content_for` tag or `render` tag
23
25
  */
24
26
  export function reportUnknownArguments(
25
27
  context: Context<SourceCodeType.LiquidHtml>,
26
- node: ContentForMarkup | RenderMarkup | FunctionMarkup,
28
+ node: RenderMarkup | FunctionMarkup,
27
29
  unknownProvidedArgs: LiquidNamedArgument[],
28
30
  name: string,
29
31
  ) {
30
32
  let errorOwnerMessage = '';
31
- if (node.type === NodeTypes.ContentForMarkup) {
32
- errorOwnerMessage = ` in content_for tag for static block '${name}'`;
33
- } else if (node.type === NodeTypes.RenderMarkup) {
33
+ if (node.type === NodeTypes.RenderMarkup) {
34
34
  errorOwnerMessage = ` in render tag for partial '${name}'`;
35
35
  } else if (node.type === NodeTypes.FunctionMarkup) {
36
36
  errorOwnerMessage = ` in function tag for partial '${name}'`;
@@ -56,14 +56,12 @@ export function reportUnknownArguments(
56
56
  */
57
57
  export function reportMissingArguments(
58
58
  context: Context<SourceCodeType.LiquidHtml>,
59
- node: ContentForMarkup | RenderMarkup | FunctionMarkup,
59
+ node: RenderMarkup | FunctionMarkup,
60
60
  missingRequiredArgs: LiquidDocParameter[],
61
61
  name: string,
62
62
  ) {
63
63
  let errorOwnerMessage = '';
64
- if (node.type === NodeTypes.ContentForMarkup) {
65
- errorOwnerMessage = ` in content_for tag for static block '${name}'`;
66
- } else if (node.type === NodeTypes.RenderMarkup) {
64
+ if (node.type === NodeTypes.RenderMarkup) {
67
65
  errorOwnerMessage = ` in render tag for partial '${name}'`;
68
66
  } else if (node.type === NodeTypes.FunctionMarkup) {
69
67
  errorOwnerMessage = ` in function tag for partial '${name}'`;
@@ -86,14 +84,12 @@ export function reportMissingArguments(
86
84
 
87
85
  export function reportDuplicateArguments(
88
86
  context: Context<SourceCodeType.LiquidHtml>,
89
- node: ContentForMarkup | RenderMarkup | FunctionMarkup,
87
+ node: RenderMarkup | FunctionMarkup,
90
88
  duplicateArgs: LiquidNamedArgument[],
91
89
  name: string,
92
90
  ) {
93
91
  let errorOwnerMessage = '';
94
- if (node.type === NodeTypes.ContentForMarkup) {
95
- errorOwnerMessage = ` in content_for tag for static block '${name}'`;
96
- } else if (node.type === NodeTypes.RenderMarkup) {
92
+ if (node.type === NodeTypes.RenderMarkup) {
97
93
  errorOwnerMessage = ` in render tag for partial '${name}'`;
98
94
  } else if (node.type === NodeTypes.FunctionMarkup) {
99
95
  errorOwnerMessage = ` in function tag for partial '${name}'`;
@@ -208,29 +204,12 @@ export function generateTypeMismatchSuggestions(
208
204
  return suggestions;
209
205
  }
210
206
 
211
- function isLastArg(
212
- node: RenderMarkup | ContentForMarkup | FunctionMarkup,
213
- arg: LiquidNamedArgument,
214
- ): boolean {
207
+ function isLastArg(node: RenderMarkup | FunctionMarkup, arg: LiquidNamedArgument): boolean {
215
208
  return (
216
209
  node.args.length == 1 || arg.position.start == node.args[node.args.length - 1].position.start
217
210
  );
218
211
  }
219
212
 
220
- export function getBlockName(node: ContentForMarkup) {
221
- if (node.contentForType.value !== 'block') {
222
- return;
223
- }
224
-
225
- const contentForTypeArg = node.args.find((arg) => arg.name == 'type')?.value;
226
-
227
- if (!contentForTypeArg || !isLiquidString(contentForTypeArg)) {
228
- return;
229
- }
230
-
231
- return contentForTypeArg.value;
232
- }
233
-
234
213
  export function getPartialName(node: RenderMarkup | FunctionMarkup): string | undefined {
235
214
  if (node.type === NodeTypes.RenderMarkup) {
236
215
  if (!isLiquidString(node.snippet)) {
@@ -249,19 +228,27 @@ export function getPartialName(node: RenderMarkup | FunctionMarkup): string | un
249
228
 
250
229
  export async function getLiquidDocParams(
251
230
  context: Context<SourceCodeType.LiquidHtml>,
252
- relativePath: string,
231
+ partialName: string,
253
232
  ) {
254
- const docDefinition = context.getDocDefinition && (await context.getDocDefinition(relativePath));
255
-
256
- if (!docDefinition?.liquidDoc?.parameters) {
257
- return;
233
+ if (!context.getDocDefinition) return;
234
+
235
+ // Use DocumentsLocator to find the partial across all platformOS locations,
236
+ // including app/views/partials/, app/lib/, and module paths.
237
+ const locator = new DocumentsLocator(context.fs);
238
+ const fileUri = await locator.locate(URI.parse(context.config.rootUri), 'render', partialName);
239
+ if (!fileUri) return undefined;
240
+
241
+ const relativePath = relative(fileUri, context.config.rootUri);
242
+ const docDefinition = await context.getDocDefinition(relativePath);
243
+ if (docDefinition?.liquidDoc?.parameters) {
244
+ return new Map(docDefinition.liquidDoc.parameters.map((p) => [p.name, p]));
258
245
  }
259
246
 
260
- return new Map(docDefinition.liquidDoc.parameters.map((p) => [p.name, p]));
247
+ return undefined;
261
248
  }
262
249
 
263
250
  export function makeRemoveArgumentCorrector(
264
- node: ContentForMarkup | RenderMarkup | FunctionMarkup,
251
+ node: RenderMarkup | FunctionMarkup,
265
252
  arg: LiquidNamedArgument,
266
253
  ) {
267
254
  return (fixer: StringCorrector) => {
@@ -287,7 +274,7 @@ export function makeRemoveArgumentCorrector(
287
274
  }
288
275
 
289
276
  export function makeAddArgumentCorrector(
290
- node: ContentForMarkup | RenderMarkup | FunctionMarkup,
277
+ node: RenderMarkup | FunctionMarkup,
291
278
  arg: LiquidDocParameter,
292
279
  ) {
293
280
  return (fixer: StringCorrector) => {
@@ -9,8 +9,7 @@ import {
9
9
 
10
10
  export type GetDocDefinitionForURI = (
11
11
  uri: UriString,
12
- category: 'blocks' | 'app/views/partials',
13
- name: string,
12
+ partialName: string,
14
13
  ) => Promise<DocDefinition | undefined>;
15
14
 
16
15
  export type DocDefinition = {
@@ -1,7 +1,6 @@
1
1
  import { LiquidExpression, NodeTypes } from '@platformos/liquid-html-parser';
2
2
  import { assertNever } from '../utils';
3
- import { isSnippet } from '../to-schema';
4
- import { isBlock } from '../to-schema';
3
+ import { isPartial } from '../path';
5
4
  import { ObjectEntry, UriString } from '../types';
6
5
 
7
6
  /**
@@ -55,6 +54,8 @@ export function inferArgumentType(arg: LiquidExpression): BasicParamTypes {
55
54
  return BasicParamTypes.Boolean;
56
55
  case NodeTypes.Range:
57
56
  case NodeTypes.VariableLookup:
57
+ case NodeTypes.JsonHashLiteral:
58
+ case NodeTypes.JsonArrayLiteral:
58
59
  return BasicParamTypes.Object;
59
60
  default:
60
61
  // This ensures that we have a case for every possible type for arg.value
@@ -81,7 +82,7 @@ export function isTypeCompatible(expectedType: string, actualType: BasicParamTyp
81
82
  * Checks if the provided file path supports the LiquidDoc tag.
82
83
  */
83
84
  export function filePathSupportsLiquidDoc(uri: UriString) {
84
- return isSnippet(uri) || isBlock(uri);
85
+ return isPartial(uri);
85
86
  }
86
87
 
87
88
  /**
package/src/path.ts CHANGED
@@ -1,5 +1,6 @@
1
1
  import { RelativePath, UriString } from './types';
2
2
  import { URI, Utils } from 'vscode-uri';
3
+ export { isPartial, isLayout, isPage } from '@platformos/platformos-common';
3
4
 
4
5
  export { URI, Utils };
5
6
 
@@ -12,6 +12,6 @@
12
12
  * }
13
13
  */
14
14
 
15
- export type MockTheme = {
15
+ export type MockApp = {
16
16
  [relativePath in string]: string;
17
17
  };
@@ -1,7 +1,7 @@
1
1
  import { AbstractFileSystem, FileStat, FileTuple, FileType } from '@platformos/platformos-common';
2
2
  import { deepGet } from '../utils';
3
3
  import { normalize, relative } from '../path';
4
- import { MockTheme } from './MockTheme';
4
+ import { MockApp } from './MockApp';
5
5
  import * as path from '../path';
6
6
 
7
7
  interface FileTree {
@@ -11,16 +11,19 @@ interface FileTree {
11
11
  export class MockFileSystem implements AbstractFileSystem {
12
12
  private rootUri: string;
13
13
 
14
- constructor(private mockTheme: MockTheme, rootUri = 'file:///') {
14
+ constructor(
15
+ private mockApp: MockApp,
16
+ rootUri = 'file:///',
17
+ ) {
15
18
  this.rootUri = normalize(rootUri);
16
19
  }
17
20
 
18
21
  async readFile(uri: string): Promise<string> {
19
22
  const relativePath = this.rootRelative(uri);
20
- if (this.mockTheme[relativePath] === undefined) {
23
+ if (this.mockApp[relativePath] === undefined) {
21
24
  throw new Error('File not found');
22
25
  } else {
23
- return this.mockTheme[relativePath];
26
+ return this.mockApp[relativePath];
24
27
  }
25
28
  }
26
29
 
@@ -47,7 +50,7 @@ export class MockFileSystem implements AbstractFileSystem {
47
50
 
48
51
  async stat(uri: string): Promise<FileStat> {
49
52
  const relativePath = this.rootRelative(uri);
50
- const source = this.mockTheme[relativePath];
53
+ const source = this.mockApp[relativePath];
51
54
  if (source) {
52
55
  return {
53
56
  type: FileType.File,
@@ -68,7 +71,7 @@ export class MockFileSystem implements AbstractFileSystem {
68
71
 
69
72
  private get fileTree(): FileTree {
70
73
  const result: FileTree = {};
71
- for (const [relativePath, source] of Object.entries(this.mockTheme)) {
74
+ for (const [relativePath, source] of Object.entries(this.mockApp)) {
72
75
  const segments = relativePath.split('/');
73
76
  let current = result;
74
77
  for (let i = 0; i < segments.length - 1; i++) {
package/src/test/index.ts CHANGED
@@ -1,3 +1,3 @@
1
1
  export * from './MockFileSystem';
2
- export * from './MockTheme';
2
+ export * from './MockApp';
3
3
  export * from './test-helper';