@vcollab/yaml-language-server-tag-validation 1.22.0

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 (865) hide show
  1. package/CHANGELOG.md +712 -0
  2. package/CONTRIBUTING.md +8 -0
  3. package/DCO +37 -0
  4. package/Dockerfile +11 -0
  5. package/LICENSE +21 -0
  6. package/README.md +475 -0
  7. package/bin/yaml-language-server +27 -0
  8. package/docs/scalaruri-custom-tags.md +269 -0
  9. package/l10n/bundle.l10n.de.json +62 -0
  10. package/l10n/bundle.l10n.fr.json +62 -0
  11. package/l10n/bundle.l10n.ja.json +62 -0
  12. package/l10n/bundle.l10n.json +61 -0
  13. package/l10n/bundle.l10n.ko.json +62 -0
  14. package/l10n/bundle.l10n.zh-cn.json +62 -0
  15. package/l10n/bundle.l10n.zh-tw.json +62 -0
  16. package/lib/esm/commands.d.ts +3 -0
  17. package/lib/esm/commands.js +9 -0
  18. package/lib/esm/commands.js.map +1 -0
  19. package/lib/esm/index.d.ts +3 -0
  20. package/lib/esm/index.js +4 -0
  21. package/lib/esm/index.js.map +1 -0
  22. package/lib/esm/languageserver/commandExecutor.d.ts +10 -0
  23. package/lib/esm/languageserver/commandExecutor.js +21 -0
  24. package/lib/esm/languageserver/commandExecutor.js.map +1 -0
  25. package/lib/esm/languageserver/handlers/languageHandlers.d.ts +61 -0
  26. package/lib/esm/languageserver/handlers/languageHandlers.js +236 -0
  27. package/lib/esm/languageserver/handlers/languageHandlers.js.map +1 -0
  28. package/lib/esm/languageserver/handlers/notificationHandlers.d.ts +29 -0
  29. package/lib/esm/languageserver/handlers/notificationHandlers.js +46 -0
  30. package/lib/esm/languageserver/handlers/notificationHandlers.js.map +1 -0
  31. package/lib/esm/languageserver/handlers/requestHandlers.d.ts +9 -0
  32. package/lib/esm/languageserver/handlers/requestHandlers.js +23 -0
  33. package/lib/esm/languageserver/handlers/requestHandlers.js.map +1 -0
  34. package/lib/esm/languageserver/handlers/schemaSelectionHandlers.d.ts +13 -0
  35. package/lib/esm/languageserver/handlers/schemaSelectionHandlers.js +72 -0
  36. package/lib/esm/languageserver/handlers/schemaSelectionHandlers.js.map +1 -0
  37. package/lib/esm/languageserver/handlers/settingsHandlers.d.ts +42 -0
  38. package/lib/esm/languageserver/handlers/settingsHandlers.js +316 -0
  39. package/lib/esm/languageserver/handlers/settingsHandlers.js.map +1 -0
  40. package/lib/esm/languageserver/handlers/validationHandlers.d.ts +15 -0
  41. package/lib/esm/languageserver/handlers/validationHandlers.js +108 -0
  42. package/lib/esm/languageserver/handlers/validationHandlers.js.map +1 -0
  43. package/lib/esm/languageserver/handlers/workspaceHandlers.d.ts +9 -0
  44. package/lib/esm/languageserver/handlers/workspaceHandlers.js +17 -0
  45. package/lib/esm/languageserver/handlers/workspaceHandlers.js.map +1 -0
  46. package/lib/esm/languageserver/telemetry.d.ts +9 -0
  47. package/lib/esm/languageserver/telemetry.js +20 -0
  48. package/lib/esm/languageserver/telemetry.js.map +1 -0
  49. package/lib/esm/languageservice/jsonASTTypes.d.ts +49 -0
  50. package/lib/esm/languageservice/jsonASTTypes.js +6 -0
  51. package/lib/esm/languageservice/jsonASTTypes.js.map +1 -0
  52. package/lib/esm/languageservice/jsonSchema.d.ts +103 -0
  53. package/lib/esm/languageservice/jsonSchema.js +12 -0
  54. package/lib/esm/languageservice/jsonSchema.js.map +1 -0
  55. package/lib/esm/languageservice/parser/ast-converter.d.ts +11 -0
  56. package/lib/esm/languageservice/parser/ast-converter.js +176 -0
  57. package/lib/esm/languageservice/parser/ast-converter.js.map +1 -0
  58. package/lib/esm/languageservice/parser/astNodeUtils.d.ts +4 -0
  59. package/lib/esm/languageservice/parser/astNodeUtils.js +48 -0
  60. package/lib/esm/languageservice/parser/astNodeUtils.js.map +1 -0
  61. package/lib/esm/languageservice/parser/custom-tag-provider.d.ts +7 -0
  62. package/lib/esm/languageservice/parser/custom-tag-provider.js +58 -0
  63. package/lib/esm/languageservice/parser/custom-tag-provider.js.map +1 -0
  64. package/lib/esm/languageservice/parser/isKubernetes.d.ts +4 -0
  65. package/lib/esm/languageservice/parser/isKubernetes.js +17 -0
  66. package/lib/esm/languageservice/parser/isKubernetes.js.map +1 -0
  67. package/lib/esm/languageservice/parser/jsonDocument.d.ts +83 -0
  68. package/lib/esm/languageservice/parser/jsonDocument.js +171 -0
  69. package/lib/esm/languageservice/parser/jsonDocument.js.map +1 -0
  70. package/lib/esm/languageservice/parser/scalar-type.d.ts +8 -0
  71. package/lib/esm/languageservice/parser/scalar-type.js +17 -0
  72. package/lib/esm/languageservice/parser/scalar-type.js.map +1 -0
  73. package/lib/esm/languageservice/parser/schemaValidation/baseValidator.d.ts +124 -0
  74. package/lib/esm/languageservice/parser/schemaValidation/baseValidator.js +1254 -0
  75. package/lib/esm/languageservice/parser/schemaValidation/baseValidator.js.map +1 -0
  76. package/lib/esm/languageservice/parser/schemaValidation/draft04Validator.d.ts +17 -0
  77. package/lib/esm/languageservice/parser/schemaValidation/draft04Validator.js +30 -0
  78. package/lib/esm/languageservice/parser/schemaValidation/draft04Validator.js.map +1 -0
  79. package/lib/esm/languageservice/parser/schemaValidation/draft07Validator.d.ts +15 -0
  80. package/lib/esm/languageservice/parser/schemaValidation/draft07Validator.js +28 -0
  81. package/lib/esm/languageservice/parser/schemaValidation/draft07Validator.js.map +1 -0
  82. package/lib/esm/languageservice/parser/schemaValidation/draft2019Validator.d.ts +28 -0
  83. package/lib/esm/languageservice/parser/schemaValidation/draft2019Validator.js +224 -0
  84. package/lib/esm/languageservice/parser/schemaValidation/draft2019Validator.js.map +1 -0
  85. package/lib/esm/languageservice/parser/schemaValidation/draft2020Validator.d.ts +17 -0
  86. package/lib/esm/languageservice/parser/schemaValidation/draft2020Validator.js +126 -0
  87. package/lib/esm/languageservice/parser/schemaValidation/draft2020Validator.js.map +1 -0
  88. package/lib/esm/languageservice/parser/schemaValidation/validatorFactory.d.ts +3 -0
  89. package/lib/esm/languageservice/parser/schemaValidation/validatorFactory.js +24 -0
  90. package/lib/esm/languageservice/parser/schemaValidation/validatorFactory.js.map +1 -0
  91. package/lib/esm/languageservice/parser/yaml-documents.d.ts +71 -0
  92. package/lib/esm/languageservice/parser/yaml-documents.js +258 -0
  93. package/lib/esm/languageservice/parser/yaml-documents.js.map +1 -0
  94. package/lib/esm/languageservice/parser/yamlParser07.d.ts +15 -0
  95. package/lib/esm/languageservice/parser/yamlParser07.js +50 -0
  96. package/lib/esm/languageservice/parser/yamlParser07.js.map +1 -0
  97. package/lib/esm/languageservice/services/crdUtil.d.ts +23 -0
  98. package/lib/esm/languageservice/services/crdUtil.js +74 -0
  99. package/lib/esm/languageservice/services/crdUtil.js.map +1 -0
  100. package/lib/esm/languageservice/services/documentSymbols.d.ts +12 -0
  101. package/lib/esm/languageservice/services/documentSymbols.js +67 -0
  102. package/lib/esm/languageservice/services/documentSymbols.js.map +1 -0
  103. package/lib/esm/languageservice/services/modelineUtil.d.ts +9 -0
  104. package/lib/esm/languageservice/services/modelineUtil.js +29 -0
  105. package/lib/esm/languageservice/services/modelineUtil.js.map +1 -0
  106. package/lib/esm/languageservice/services/schemaRequestHandler.d.ts +12 -0
  107. package/lib/esm/languageservice/services/schemaRequestHandler.js +84 -0
  108. package/lib/esm/languageservice/services/schemaRequestHandler.js.map +1 -0
  109. package/lib/esm/languageservice/services/validation/map-key-order.d.ts +7 -0
  110. package/lib/esm/languageservice/services/validation/map-key-order.js +35 -0
  111. package/lib/esm/languageservice/services/validation/map-key-order.js.map +1 -0
  112. package/lib/esm/languageservice/services/validation/types.d.ts +6 -0
  113. package/lib/esm/languageservice/services/validation/types.js +6 -0
  114. package/lib/esm/languageservice/services/validation/types.js.map +1 -0
  115. package/lib/esm/languageservice/services/validation/unused-anchors.d.ts +8 -0
  116. package/lib/esm/languageservice/services/validation/unused-anchors.js +91 -0
  117. package/lib/esm/languageservice/services/validation/unused-anchors.js.map +1 -0
  118. package/lib/esm/languageservice/services/validation/yaml-style.d.ts +12 -0
  119. package/lib/esm/languageservice/services/validation/yaml-style.js +28 -0
  120. package/lib/esm/languageservice/services/validation/yaml-style.js.map +1 -0
  121. package/lib/esm/languageservice/services/yamlCodeActions.d.ts +25 -0
  122. package/lib/esm/languageservice/services/yamlCodeActions.js +342 -0
  123. package/lib/esm/languageservice/services/yamlCodeActions.js.map +1 -0
  124. package/lib/esm/languageservice/services/yamlCodeLens.d.ts +11 -0
  125. package/lib/esm/languageservice/services/yamlCodeLens.js +46 -0
  126. package/lib/esm/languageservice/services/yamlCodeLens.js.map +1 -0
  127. package/lib/esm/languageservice/services/yamlCommands.d.ts +3 -0
  128. package/lib/esm/languageservice/services/yamlCommands.js +46 -0
  129. package/lib/esm/languageservice/services/yamlCommands.js.map +1 -0
  130. package/lib/esm/languageservice/services/yamlCompletion.d.ts +77 -0
  131. package/lib/esm/languageservice/services/yamlCompletion.js +1501 -0
  132. package/lib/esm/languageservice/services/yamlCompletion.js.map +1 -0
  133. package/lib/esm/languageservice/services/yamlDefinition.d.ts +9 -0
  134. package/lib/esm/languageservice/services/yamlDefinition.js +37 -0
  135. package/lib/esm/languageservice/services/yamlDefinition.js.map +1 -0
  136. package/lib/esm/languageservice/services/yamlFolding.d.ts +4 -0
  137. package/lib/esm/languageservice/services/yamlFolding.js +62 -0
  138. package/lib/esm/languageservice/services/yamlFolding.js.map +1 -0
  139. package/lib/esm/languageservice/services/yamlFormatter.d.ts +8 -0
  140. package/lib/esm/languageservice/services/yamlFormatter.js +46 -0
  141. package/lib/esm/languageservice/services/yamlFormatter.js.map +1 -0
  142. package/lib/esm/languageservice/services/yamlHover.d.ts +47 -0
  143. package/lib/esm/languageservice/services/yamlHover.js +366 -0
  144. package/lib/esm/languageservice/services/yamlHover.js.map +1 -0
  145. package/lib/esm/languageservice/services/yamlLinks.d.ts +8 -0
  146. package/lib/esm/languageservice/services/yamlLinks.js +27 -0
  147. package/lib/esm/languageservice/services/yamlLinks.js.map +1 -0
  148. package/lib/esm/languageservice/services/yamlOnTypeFormatting.d.ts +4 -0
  149. package/lib/esm/languageservice/services/yamlOnTypeFormatting.js +43 -0
  150. package/lib/esm/languageservice/services/yamlOnTypeFormatting.js.map +1 -0
  151. package/lib/esm/languageservice/services/yamlRename.d.ts +18 -0
  152. package/lib/esm/languageservice/services/yamlRename.js +184 -0
  153. package/lib/esm/languageservice/services/yamlRename.js.map +1 -0
  154. package/lib/esm/languageservice/services/yamlSchemaService.d.ts +99 -0
  155. package/lib/esm/languageservice/services/yamlSchemaService.js +1110 -0
  156. package/lib/esm/languageservice/services/yamlSchemaService.js.map +1 -0
  157. package/lib/esm/languageservice/services/yamlSelectionRanges.d.ts +3 -0
  158. package/lib/esm/languageservice/services/yamlSelectionRanges.js +130 -0
  159. package/lib/esm/languageservice/services/yamlSelectionRanges.js.map +1 -0
  160. package/lib/esm/languageservice/services/yamlValidation.d.ts +26 -0
  161. package/lib/esm/languageservice/services/yamlValidation.js +135 -0
  162. package/lib/esm/languageservice/services/yamlValidation.js.map +1 -0
  163. package/lib/esm/languageservice/telemetry.d.ts +16 -0
  164. package/lib/esm/languageservice/telemetry.js +6 -0
  165. package/lib/esm/languageservice/telemetry.js.map +1 -0
  166. package/lib/esm/languageservice/utils/arrUtils.d.ts +6 -0
  167. package/lib/esm/languageservice/utils/arrUtils.js +81 -0
  168. package/lib/esm/languageservice/utils/arrUtils.js.map +1 -0
  169. package/lib/esm/languageservice/utils/block-string-rewriter.d.ts +8 -0
  170. package/lib/esm/languageservice/utils/block-string-rewriter.js +215 -0
  171. package/lib/esm/languageservice/utils/block-string-rewriter.js.map +1 -0
  172. package/lib/esm/languageservice/utils/charCode.d.ts +415 -0
  173. package/lib/esm/languageservice/utils/charCode.js +6 -0
  174. package/lib/esm/languageservice/utils/charCode.js.map +1 -0
  175. package/lib/esm/languageservice/utils/diagnostic-filter.d.ts +50 -0
  176. package/lib/esm/languageservice/utils/diagnostic-filter.js +82 -0
  177. package/lib/esm/languageservice/utils/diagnostic-filter.js.map +1 -0
  178. package/lib/esm/languageservice/utils/documentPositionCalculator.d.ts +5 -0
  179. package/lib/esm/languageservice/utils/documentPositionCalculator.js +56 -0
  180. package/lib/esm/languageservice/utils/documentPositionCalculator.js.map +1 -0
  181. package/lib/esm/languageservice/utils/filePatternAssociation.d.ts +8 -0
  182. package/lib/esm/languageservice/utils/filePatternAssociation.js +23 -0
  183. package/lib/esm/languageservice/utils/filePatternAssociation.js.map +1 -0
  184. package/lib/esm/languageservice/utils/flow-style-rewriter.d.ts +6 -0
  185. package/lib/esm/languageservice/utils/flow-style-rewriter.js +53 -0
  186. package/lib/esm/languageservice/utils/flow-style-rewriter.js.map +1 -0
  187. package/lib/esm/languageservice/utils/indentationGuesser.d.ts +15 -0
  188. package/lib/esm/languageservice/utils/indentationGuesser.js +176 -0
  189. package/lib/esm/languageservice/utils/indentationGuesser.js.map +1 -0
  190. package/lib/esm/languageservice/utils/json.d.ts +11 -0
  191. package/lib/esm/languageservice/utils/json.js +79 -0
  192. package/lib/esm/languageservice/utils/json.js.map +1 -0
  193. package/lib/esm/languageservice/utils/math.d.ts +1 -0
  194. package/lib/esm/languageservice/utils/math.js +9 -0
  195. package/lib/esm/languageservice/utils/math.js.map +1 -0
  196. package/lib/esm/languageservice/utils/objects.d.ts +16 -0
  197. package/lib/esm/languageservice/utils/objects.js +92 -0
  198. package/lib/esm/languageservice/utils/objects.js.map +1 -0
  199. package/lib/esm/languageservice/utils/parseUtils.d.ts +17 -0
  200. package/lib/esm/languageservice/utils/parseUtils.js +2 -0
  201. package/lib/esm/languageservice/utils/parseUtils.js.map +1 -0
  202. package/lib/esm/languageservice/utils/paths.d.ts +5 -0
  203. package/lib/esm/languageservice/utils/paths.js +42 -0
  204. package/lib/esm/languageservice/utils/paths.js.map +1 -0
  205. package/lib/esm/languageservice/utils/schemaUrls.d.ts +14 -0
  206. package/lib/esm/languageservice/utils/schemaUrls.js +59 -0
  207. package/lib/esm/languageservice/utils/schemaUrls.js.map +1 -0
  208. package/lib/esm/languageservice/utils/schemaUtils.d.ts +19 -0
  209. package/lib/esm/languageservice/utils/schemaUtils.js +62 -0
  210. package/lib/esm/languageservice/utils/schemaUtils.js.map +1 -0
  211. package/lib/esm/languageservice/utils/strings.d.ts +10 -0
  212. package/lib/esm/languageservice/utils/strings.js +79 -0
  213. package/lib/esm/languageservice/utils/strings.js.map +1 -0
  214. package/lib/esm/languageservice/utils/textBuffer.d.ts +12 -0
  215. package/lib/esm/languageservice/utils/textBuffer.js +45 -0
  216. package/lib/esm/languageservice/utils/textBuffer.js.map +1 -0
  217. package/lib/esm/languageservice/utils/yamlAstUtils.d.ts +13 -0
  218. package/lib/esm/languageservice/utils/yamlAstUtils.js +108 -0
  219. package/lib/esm/languageservice/utils/yamlAstUtils.js.map +1 -0
  220. package/lib/esm/languageservice/utils/yamlScalar.d.ts +1 -0
  221. package/lib/esm/languageservice/utils/yamlScalar.js +69 -0
  222. package/lib/esm/languageservice/utils/yamlScalar.js.map +1 -0
  223. package/lib/esm/languageservice/yamlLanguageService.d.ts +135 -0
  224. package/lib/esm/languageservice/yamlLanguageService.js +101 -0
  225. package/lib/esm/languageservice/yamlLanguageService.js.map +1 -0
  226. package/lib/esm/languageservice/yamlTypes.d.ts +18 -0
  227. package/lib/esm/languageservice/yamlTypes.js +6 -0
  228. package/lib/esm/languageservice/yamlTypes.js.map +1 -0
  229. package/lib/esm/nodeTranslationSetup.d.ts +9 -0
  230. package/lib/esm/nodeTranslationSetup.js +34 -0
  231. package/lib/esm/nodeTranslationSetup.js.map +1 -0
  232. package/lib/esm/requestTypes.d.ts +63 -0
  233. package/lib/esm/requestTypes.js +46 -0
  234. package/lib/esm/requestTypes.js.map +1 -0
  235. package/lib/esm/server.d.ts +1 -0
  236. package/lib/esm/server.js +55 -0
  237. package/lib/esm/server.js.map +1 -0
  238. package/lib/esm/webworker/yamlServerMain.d.ts +1 -0
  239. package/lib/esm/webworker/yamlServerMain.js +40 -0
  240. package/lib/esm/webworker/yamlServerMain.js.map +1 -0
  241. package/lib/esm/yamlServerInit.d.ts +23 -0
  242. package/lib/esm/yamlServerInit.js +123 -0
  243. package/lib/esm/yamlServerInit.js.map +1 -0
  244. package/lib/esm/yamlSettings.d.ts +112 -0
  245. package/lib/esm/yamlSettings.js +69 -0
  246. package/lib/esm/yamlSettings.js.map +1 -0
  247. package/lib/umd/commands.d.ts +3 -0
  248. package/lib/umd/commands.js +22 -0
  249. package/lib/umd/commands.js.map +1 -0
  250. package/lib/umd/index.d.ts +3 -0
  251. package/lib/umd/index.js +32 -0
  252. package/lib/umd/index.js.map +1 -0
  253. package/lib/umd/languageserver/commandExecutor.d.ts +10 -0
  254. package/lib/umd/languageserver/commandExecutor.js +35 -0
  255. package/lib/umd/languageserver/commandExecutor.js.map +1 -0
  256. package/lib/umd/languageserver/handlers/languageHandlers.d.ts +61 -0
  257. package/lib/umd/languageserver/handlers/languageHandlers.js +250 -0
  258. package/lib/umd/languageserver/handlers/languageHandlers.js.map +1 -0
  259. package/lib/umd/languageserver/handlers/notificationHandlers.d.ts +29 -0
  260. package/lib/umd/languageserver/handlers/notificationHandlers.js +60 -0
  261. package/lib/umd/languageserver/handlers/notificationHandlers.js.map +1 -0
  262. package/lib/umd/languageserver/handlers/requestHandlers.d.ts +9 -0
  263. package/lib/umd/languageserver/handlers/requestHandlers.js +37 -0
  264. package/lib/umd/languageserver/handlers/requestHandlers.js.map +1 -0
  265. package/lib/umd/languageserver/handlers/schemaSelectionHandlers.d.ts +13 -0
  266. package/lib/umd/languageserver/handlers/schemaSelectionHandlers.js +86 -0
  267. package/lib/umd/languageserver/handlers/schemaSelectionHandlers.js.map +1 -0
  268. package/lib/umd/languageserver/handlers/settingsHandlers.d.ts +42 -0
  269. package/lib/umd/languageserver/handlers/settingsHandlers.js +330 -0
  270. package/lib/umd/languageserver/handlers/settingsHandlers.js.map +1 -0
  271. package/lib/umd/languageserver/handlers/validationHandlers.d.ts +15 -0
  272. package/lib/umd/languageserver/handlers/validationHandlers.js +122 -0
  273. package/lib/umd/languageserver/handlers/validationHandlers.js.map +1 -0
  274. package/lib/umd/languageserver/handlers/workspaceHandlers.d.ts +9 -0
  275. package/lib/umd/languageserver/handlers/workspaceHandlers.js +31 -0
  276. package/lib/umd/languageserver/handlers/workspaceHandlers.js.map +1 -0
  277. package/lib/umd/languageserver/telemetry.d.ts +9 -0
  278. package/lib/umd/languageserver/telemetry.js +34 -0
  279. package/lib/umd/languageserver/telemetry.js.map +1 -0
  280. package/lib/umd/languageservice/jsonASTTypes.d.ts +49 -0
  281. package/lib/umd/languageservice/jsonASTTypes.js +17 -0
  282. package/lib/umd/languageservice/jsonASTTypes.js.map +1 -0
  283. package/lib/umd/languageservice/jsonSchema.d.ts +103 -0
  284. package/lib/umd/languageservice/jsonSchema.js +25 -0
  285. package/lib/umd/languageservice/jsonSchema.js.map +1 -0
  286. package/lib/umd/languageservice/parser/ast-converter.d.ts +11 -0
  287. package/lib/umd/languageservice/parser/ast-converter.js +191 -0
  288. package/lib/umd/languageservice/parser/ast-converter.js.map +1 -0
  289. package/lib/umd/languageservice/parser/astNodeUtils.d.ts +4 -0
  290. package/lib/umd/languageservice/parser/astNodeUtils.js +64 -0
  291. package/lib/umd/languageservice/parser/astNodeUtils.js.map +1 -0
  292. package/lib/umd/languageservice/parser/custom-tag-provider.d.ts +7 -0
  293. package/lib/umd/languageservice/parser/custom-tag-provider.js +72 -0
  294. package/lib/umd/languageservice/parser/custom-tag-provider.js.map +1 -0
  295. package/lib/umd/languageservice/parser/isKubernetes.d.ts +4 -0
  296. package/lib/umd/languageservice/parser/isKubernetes.js +32 -0
  297. package/lib/umd/languageservice/parser/isKubernetes.js.map +1 -0
  298. package/lib/umd/languageservice/parser/jsonDocument.d.ts +83 -0
  299. package/lib/umd/languageservice/parser/jsonDocument.js +193 -0
  300. package/lib/umd/languageservice/parser/jsonDocument.js.map +1 -0
  301. package/lib/umd/languageservice/parser/scalar-type.d.ts +8 -0
  302. package/lib/umd/languageservice/parser/scalar-type.js +31 -0
  303. package/lib/umd/languageservice/parser/scalar-type.js.map +1 -0
  304. package/lib/umd/languageservice/parser/schemaValidation/baseValidator.d.ts +124 -0
  305. package/lib/umd/languageservice/parser/schemaValidation/baseValidator.js +1270 -0
  306. package/lib/umd/languageservice/parser/schemaValidation/baseValidator.js.map +1 -0
  307. package/lib/umd/languageservice/parser/schemaValidation/draft04Validator.d.ts +17 -0
  308. package/lib/umd/languageservice/parser/schemaValidation/draft04Validator.js +44 -0
  309. package/lib/umd/languageservice/parser/schemaValidation/draft04Validator.js.map +1 -0
  310. package/lib/umd/languageservice/parser/schemaValidation/draft07Validator.d.ts +15 -0
  311. package/lib/umd/languageservice/parser/schemaValidation/draft07Validator.js +42 -0
  312. package/lib/umd/languageservice/parser/schemaValidation/draft07Validator.js.map +1 -0
  313. package/lib/umd/languageservice/parser/schemaValidation/draft2019Validator.d.ts +28 -0
  314. package/lib/umd/languageservice/parser/schemaValidation/draft2019Validator.js +238 -0
  315. package/lib/umd/languageservice/parser/schemaValidation/draft2019Validator.js.map +1 -0
  316. package/lib/umd/languageservice/parser/schemaValidation/draft2020Validator.d.ts +17 -0
  317. package/lib/umd/languageservice/parser/schemaValidation/draft2020Validator.js +140 -0
  318. package/lib/umd/languageservice/parser/schemaValidation/draft2020Validator.js.map +1 -0
  319. package/lib/umd/languageservice/parser/schemaValidation/validatorFactory.d.ts +3 -0
  320. package/lib/umd/languageservice/parser/schemaValidation/validatorFactory.js +38 -0
  321. package/lib/umd/languageservice/parser/schemaValidation/validatorFactory.js.map +1 -0
  322. package/lib/umd/languageservice/parser/yaml-documents.d.ts +71 -0
  323. package/lib/umd/languageservice/parser/yaml-documents.js +274 -0
  324. package/lib/umd/languageservice/parser/yaml-documents.js.map +1 -0
  325. package/lib/umd/languageservice/parser/yamlParser07.d.ts +15 -0
  326. package/lib/umd/languageservice/parser/yamlParser07.js +65 -0
  327. package/lib/umd/languageservice/parser/yamlParser07.js.map +1 -0
  328. package/lib/umd/languageservice/services/crdUtil.d.ts +23 -0
  329. package/lib/umd/languageservice/services/crdUtil.js +89 -0
  330. package/lib/umd/languageservice/services/crdUtil.js.map +1 -0
  331. package/lib/umd/languageservice/services/documentSymbols.d.ts +12 -0
  332. package/lib/umd/languageservice/services/documentSymbols.js +81 -0
  333. package/lib/umd/languageservice/services/documentSymbols.js.map +1 -0
  334. package/lib/umd/languageservice/services/modelineUtil.d.ts +9 -0
  335. package/lib/umd/languageservice/services/modelineUtil.js +44 -0
  336. package/lib/umd/languageservice/services/modelineUtil.js.map +1 -0
  337. package/lib/umd/languageservice/services/schemaRequestHandler.d.ts +12 -0
  338. package/lib/umd/languageservice/services/schemaRequestHandler.js +98 -0
  339. package/lib/umd/languageservice/services/schemaRequestHandler.js.map +1 -0
  340. package/lib/umd/languageservice/services/validation/map-key-order.d.ts +7 -0
  341. package/lib/umd/languageservice/services/validation/map-key-order.js +49 -0
  342. package/lib/umd/languageservice/services/validation/map-key-order.js.map +1 -0
  343. package/lib/umd/languageservice/services/validation/types.d.ts +6 -0
  344. package/lib/umd/languageservice/services/validation/types.js +17 -0
  345. package/lib/umd/languageservice/services/validation/types.js.map +1 -0
  346. package/lib/umd/languageservice/services/validation/unused-anchors.d.ts +8 -0
  347. package/lib/umd/languageservice/services/validation/unused-anchors.js +105 -0
  348. package/lib/umd/languageservice/services/validation/unused-anchors.js.map +1 -0
  349. package/lib/umd/languageservice/services/validation/yaml-style.d.ts +12 -0
  350. package/lib/umd/languageservice/services/validation/yaml-style.js +42 -0
  351. package/lib/umd/languageservice/services/validation/yaml-style.js.map +1 -0
  352. package/lib/umd/languageservice/services/yamlCodeActions.d.ts +25 -0
  353. package/lib/umd/languageservice/services/yamlCodeActions.js +356 -0
  354. package/lib/umd/languageservice/services/yamlCodeActions.js.map +1 -0
  355. package/lib/umd/languageservice/services/yamlCodeLens.d.ts +11 -0
  356. package/lib/umd/languageservice/services/yamlCodeLens.js +60 -0
  357. package/lib/umd/languageservice/services/yamlCodeLens.js.map +1 -0
  358. package/lib/umd/languageservice/services/yamlCommands.d.ts +3 -0
  359. package/lib/umd/languageservice/services/yamlCommands.js +60 -0
  360. package/lib/umd/languageservice/services/yamlCommands.js.map +1 -0
  361. package/lib/umd/languageservice/services/yamlCompletion.d.ts +77 -0
  362. package/lib/umd/languageservice/services/yamlCompletion.js +1515 -0
  363. package/lib/umd/languageservice/services/yamlCompletion.js.map +1 -0
  364. package/lib/umd/languageservice/services/yamlDefinition.d.ts +9 -0
  365. package/lib/umd/languageservice/services/yamlDefinition.js +51 -0
  366. package/lib/umd/languageservice/services/yamlDefinition.js.map +1 -0
  367. package/lib/umd/languageservice/services/yamlFolding.d.ts +4 -0
  368. package/lib/umd/languageservice/services/yamlFolding.js +76 -0
  369. package/lib/umd/languageservice/services/yamlFolding.js.map +1 -0
  370. package/lib/umd/languageservice/services/yamlFormatter.d.ts +8 -0
  371. package/lib/umd/languageservice/services/yamlFormatter.js +60 -0
  372. package/lib/umd/languageservice/services/yamlFormatter.js.map +1 -0
  373. package/lib/umd/languageservice/services/yamlHover.d.ts +47 -0
  374. package/lib/umd/languageservice/services/yamlHover.js +380 -0
  375. package/lib/umd/languageservice/services/yamlHover.js.map +1 -0
  376. package/lib/umd/languageservice/services/yamlLinks.d.ts +8 -0
  377. package/lib/umd/languageservice/services/yamlLinks.js +41 -0
  378. package/lib/umd/languageservice/services/yamlLinks.js.map +1 -0
  379. package/lib/umd/languageservice/services/yamlOnTypeFormatting.d.ts +4 -0
  380. package/lib/umd/languageservice/services/yamlOnTypeFormatting.js +57 -0
  381. package/lib/umd/languageservice/services/yamlOnTypeFormatting.js.map +1 -0
  382. package/lib/umd/languageservice/services/yamlRename.d.ts +18 -0
  383. package/lib/umd/languageservice/services/yamlRename.js +198 -0
  384. package/lib/umd/languageservice/services/yamlRename.js.map +1 -0
  385. package/lib/umd/languageservice/services/yamlSchemaService.d.ts +99 -0
  386. package/lib/umd/languageservice/services/yamlSchemaService.js +1124 -0
  387. package/lib/umd/languageservice/services/yamlSchemaService.js.map +1 -0
  388. package/lib/umd/languageservice/services/yamlSelectionRanges.d.ts +3 -0
  389. package/lib/umd/languageservice/services/yamlSelectionRanges.js +144 -0
  390. package/lib/umd/languageservice/services/yamlSelectionRanges.js.map +1 -0
  391. package/lib/umd/languageservice/services/yamlValidation.d.ts +26 -0
  392. package/lib/umd/languageservice/services/yamlValidation.js +150 -0
  393. package/lib/umd/languageservice/services/yamlValidation.js.map +1 -0
  394. package/lib/umd/languageservice/telemetry.d.ts +16 -0
  395. package/lib/umd/languageservice/telemetry.js +17 -0
  396. package/lib/umd/languageservice/telemetry.js.map +1 -0
  397. package/lib/umd/languageservice/utils/arrUtils.d.ts +6 -0
  398. package/lib/umd/languageservice/utils/arrUtils.js +99 -0
  399. package/lib/umd/languageservice/utils/arrUtils.js.map +1 -0
  400. package/lib/umd/languageservice/utils/block-string-rewriter.d.ts +8 -0
  401. package/lib/umd/languageservice/utils/block-string-rewriter.js +229 -0
  402. package/lib/umd/languageservice/utils/block-string-rewriter.js.map +1 -0
  403. package/lib/umd/languageservice/utils/charCode.d.ts +415 -0
  404. package/lib/umd/languageservice/utils/charCode.js +17 -0
  405. package/lib/umd/languageservice/utils/charCode.js.map +1 -0
  406. package/lib/umd/languageservice/utils/diagnostic-filter.d.ts +50 -0
  407. package/lib/umd/languageservice/utils/diagnostic-filter.js +98 -0
  408. package/lib/umd/languageservice/utils/diagnostic-filter.js.map +1 -0
  409. package/lib/umd/languageservice/utils/documentPositionCalculator.d.ts +5 -0
  410. package/lib/umd/languageservice/utils/documentPositionCalculator.js +73 -0
  411. package/lib/umd/languageservice/utils/documentPositionCalculator.js.map +1 -0
  412. package/lib/umd/languageservice/utils/filePatternAssociation.d.ts +8 -0
  413. package/lib/umd/languageservice/utils/filePatternAssociation.js +37 -0
  414. package/lib/umd/languageservice/utils/filePatternAssociation.js.map +1 -0
  415. package/lib/umd/languageservice/utils/flow-style-rewriter.d.ts +6 -0
  416. package/lib/umd/languageservice/utils/flow-style-rewriter.js +67 -0
  417. package/lib/umd/languageservice/utils/flow-style-rewriter.js.map +1 -0
  418. package/lib/umd/languageservice/utils/indentationGuesser.d.ts +15 -0
  419. package/lib/umd/languageservice/utils/indentationGuesser.js +190 -0
  420. package/lib/umd/languageservice/utils/indentationGuesser.js.map +1 -0
  421. package/lib/umd/languageservice/utils/json.d.ts +11 -0
  422. package/lib/umd/languageservice/utils/json.js +93 -0
  423. package/lib/umd/languageservice/utils/json.js.map +1 -0
  424. package/lib/umd/languageservice/utils/math.d.ts +1 -0
  425. package/lib/umd/languageservice/utils/math.js +23 -0
  426. package/lib/umd/languageservice/utils/math.js.map +1 -0
  427. package/lib/umd/languageservice/utils/objects.d.ts +16 -0
  428. package/lib/umd/languageservice/utils/objects.js +112 -0
  429. package/lib/umd/languageservice/utils/objects.js.map +1 -0
  430. package/lib/umd/languageservice/utils/parseUtils.d.ts +17 -0
  431. package/lib/umd/languageservice/utils/parseUtils.js +15 -0
  432. package/lib/umd/languageservice/utils/parseUtils.js.map +1 -0
  433. package/lib/umd/languageservice/utils/paths.d.ts +5 -0
  434. package/lib/umd/languageservice/utils/paths.js +58 -0
  435. package/lib/umd/languageservice/utils/paths.js.map +1 -0
  436. package/lib/umd/languageservice/utils/schemaUrls.d.ts +14 -0
  437. package/lib/umd/languageservice/utils/schemaUrls.js +74 -0
  438. package/lib/umd/languageservice/utils/schemaUrls.js.map +1 -0
  439. package/lib/umd/languageservice/utils/schemaUtils.d.ts +19 -0
  440. package/lib/umd/languageservice/utils/schemaUtils.js +80 -0
  441. package/lib/umd/languageservice/utils/schemaUtils.js.map +1 -0
  442. package/lib/umd/languageservice/utils/strings.d.ts +10 -0
  443. package/lib/umd/languageservice/utils/strings.js +99 -0
  444. package/lib/umd/languageservice/utils/strings.js.map +1 -0
  445. package/lib/umd/languageservice/utils/textBuffer.d.ts +12 -0
  446. package/lib/umd/languageservice/utils/textBuffer.js +59 -0
  447. package/lib/umd/languageservice/utils/textBuffer.js.map +1 -0
  448. package/lib/umd/languageservice/utils/yamlAstUtils.d.ts +13 -0
  449. package/lib/umd/languageservice/utils/yamlAstUtils.js +126 -0
  450. package/lib/umd/languageservice/utils/yamlAstUtils.js.map +1 -0
  451. package/lib/umd/languageservice/utils/yamlScalar.d.ts +1 -0
  452. package/lib/umd/languageservice/utils/yamlScalar.js +83 -0
  453. package/lib/umd/languageservice/utils/yamlScalar.js.map +1 -0
  454. package/lib/umd/languageservice/yamlLanguageService.d.ts +135 -0
  455. package/lib/umd/languageservice/yamlLanguageService.js +115 -0
  456. package/lib/umd/languageservice/yamlLanguageService.js.map +1 -0
  457. package/lib/umd/languageservice/yamlTypes.d.ts +18 -0
  458. package/lib/umd/languageservice/yamlTypes.js +17 -0
  459. package/lib/umd/languageservice/yamlTypes.js.map +1 -0
  460. package/lib/umd/nodeTranslationSetup.d.ts +9 -0
  461. package/lib/umd/nodeTranslationSetup.js +48 -0
  462. package/lib/umd/nodeTranslationSetup.js.map +1 -0
  463. package/lib/umd/requestTypes.d.ts +63 -0
  464. package/lib/umd/requestTypes.js +59 -0
  465. package/lib/umd/requestTypes.js.map +1 -0
  466. package/lib/umd/server.d.ts +1 -0
  467. package/lib/umd/server.js +67 -0
  468. package/lib/umd/server.js.map +1 -0
  469. package/lib/umd/webworker/yamlServerMain.d.ts +1 -0
  470. package/lib/umd/webworker/yamlServerMain.js +52 -0
  471. package/lib/umd/webworker/yamlServerMain.js.map +1 -0
  472. package/lib/umd/yamlServerInit.d.ts +23 -0
  473. package/lib/umd/yamlServerInit.js +137 -0
  474. package/lib/umd/yamlServerInit.js.map +1 -0
  475. package/lib/umd/yamlSettings.d.ts +112 -0
  476. package/lib/umd/yamlSettings.js +84 -0
  477. package/lib/umd/yamlSettings.js.map +1 -0
  478. package/out/server/src/commands.d.ts +3 -0
  479. package/out/server/src/commands.js +12 -0
  480. package/out/server/src/commands.js.map +1 -0
  481. package/out/server/src/index.d.ts +3 -0
  482. package/out/server/src/index.js +22 -0
  483. package/out/server/src/index.js.map +1 -0
  484. package/out/server/src/languageserver/commandExecutor.d.ts +10 -0
  485. package/out/server/src/languageserver/commandExecutor.js +25 -0
  486. package/out/server/src/languageserver/commandExecutor.js.map +1 -0
  487. package/out/server/src/languageserver/handlers/languageHandlers.d.ts +61 -0
  488. package/out/server/src/languageserver/handlers/languageHandlers.js +240 -0
  489. package/out/server/src/languageserver/handlers/languageHandlers.js.map +1 -0
  490. package/out/server/src/languageserver/handlers/notificationHandlers.d.ts +29 -0
  491. package/out/server/src/languageserver/handlers/notificationHandlers.js +50 -0
  492. package/out/server/src/languageserver/handlers/notificationHandlers.js.map +1 -0
  493. package/out/server/src/languageserver/handlers/requestHandlers.d.ts +9 -0
  494. package/out/server/src/languageserver/handlers/requestHandlers.js +27 -0
  495. package/out/server/src/languageserver/handlers/requestHandlers.js.map +1 -0
  496. package/out/server/src/languageserver/handlers/schemaSelectionHandlers.d.ts +13 -0
  497. package/out/server/src/languageserver/handlers/schemaSelectionHandlers.js +76 -0
  498. package/out/server/src/languageserver/handlers/schemaSelectionHandlers.js.map +1 -0
  499. package/out/server/src/languageserver/handlers/settingsHandlers.d.ts +42 -0
  500. package/out/server/src/languageserver/handlers/settingsHandlers.js +320 -0
  501. package/out/server/src/languageserver/handlers/settingsHandlers.js.map +1 -0
  502. package/out/server/src/languageserver/handlers/validationHandlers.d.ts +15 -0
  503. package/out/server/src/languageserver/handlers/validationHandlers.js +112 -0
  504. package/out/server/src/languageserver/handlers/validationHandlers.js.map +1 -0
  505. package/out/server/src/languageserver/handlers/workspaceHandlers.d.ts +9 -0
  506. package/out/server/src/languageserver/handlers/workspaceHandlers.js +21 -0
  507. package/out/server/src/languageserver/handlers/workspaceHandlers.js.map +1 -0
  508. package/out/server/src/languageserver/telemetry.d.ts +9 -0
  509. package/out/server/src/languageserver/telemetry.js +24 -0
  510. package/out/server/src/languageserver/telemetry.js.map +1 -0
  511. package/out/server/src/languageservice/jsonASTTypes.d.ts +49 -0
  512. package/out/server/src/languageservice/jsonASTTypes.js +7 -0
  513. package/out/server/src/languageservice/jsonASTTypes.js.map +1 -0
  514. package/out/server/src/languageservice/jsonSchema.d.ts +103 -0
  515. package/out/server/src/languageservice/jsonSchema.js +15 -0
  516. package/out/server/src/languageservice/jsonSchema.js.map +1 -0
  517. package/out/server/src/languageservice/parser/ast-converter.d.ts +11 -0
  518. package/out/server/src/languageservice/parser/ast-converter.js +181 -0
  519. package/out/server/src/languageservice/parser/ast-converter.js.map +1 -0
  520. package/out/server/src/languageservice/parser/astNodeUtils.d.ts +4 -0
  521. package/out/server/src/languageservice/parser/astNodeUtils.js +54 -0
  522. package/out/server/src/languageservice/parser/astNodeUtils.js.map +1 -0
  523. package/out/server/src/languageservice/parser/custom-tag-provider.d.ts +7 -0
  524. package/out/server/src/languageservice/parser/custom-tag-provider.js +62 -0
  525. package/out/server/src/languageservice/parser/custom-tag-provider.js.map +1 -0
  526. package/out/server/src/languageservice/parser/isKubernetes.d.ts +4 -0
  527. package/out/server/src/languageservice/parser/isKubernetes.js +22 -0
  528. package/out/server/src/languageservice/parser/isKubernetes.js.map +1 -0
  529. package/out/server/src/languageservice/parser/jsonDocument.d.ts +83 -0
  530. package/out/server/src/languageservice/parser/jsonDocument.js +183 -0
  531. package/out/server/src/languageservice/parser/jsonDocument.js.map +1 -0
  532. package/out/server/src/languageservice/parser/scalar-type.d.ts +8 -0
  533. package/out/server/src/languageservice/parser/scalar-type.js +21 -0
  534. package/out/server/src/languageservice/parser/scalar-type.js.map +1 -0
  535. package/out/server/src/languageservice/parser/schemaValidation/baseValidator.d.ts +124 -0
  536. package/out/server/src/languageservice/parser/schemaValidation/baseValidator.js +1260 -0
  537. package/out/server/src/languageservice/parser/schemaValidation/baseValidator.js.map +1 -0
  538. package/out/server/src/languageservice/parser/schemaValidation/draft04Validator.d.ts +17 -0
  539. package/out/server/src/languageservice/parser/schemaValidation/draft04Validator.js +34 -0
  540. package/out/server/src/languageservice/parser/schemaValidation/draft04Validator.js.map +1 -0
  541. package/out/server/src/languageservice/parser/schemaValidation/draft07Validator.d.ts +15 -0
  542. package/out/server/src/languageservice/parser/schemaValidation/draft07Validator.js +32 -0
  543. package/out/server/src/languageservice/parser/schemaValidation/draft07Validator.js.map +1 -0
  544. package/out/server/src/languageservice/parser/schemaValidation/draft2019Validator.d.ts +28 -0
  545. package/out/server/src/languageservice/parser/schemaValidation/draft2019Validator.js +228 -0
  546. package/out/server/src/languageservice/parser/schemaValidation/draft2019Validator.js.map +1 -0
  547. package/out/server/src/languageservice/parser/schemaValidation/draft2020Validator.d.ts +17 -0
  548. package/out/server/src/languageservice/parser/schemaValidation/draft2020Validator.js +130 -0
  549. package/out/server/src/languageservice/parser/schemaValidation/draft2020Validator.js.map +1 -0
  550. package/out/server/src/languageservice/parser/schemaValidation/validatorFactory.d.ts +3 -0
  551. package/out/server/src/languageservice/parser/schemaValidation/validatorFactory.js +28 -0
  552. package/out/server/src/languageservice/parser/schemaValidation/validatorFactory.js.map +1 -0
  553. package/out/server/src/languageservice/parser/yaml-documents.d.ts +71 -0
  554. package/out/server/src/languageservice/parser/yaml-documents.js +264 -0
  555. package/out/server/src/languageservice/parser/yaml-documents.js.map +1 -0
  556. package/out/server/src/languageservice/parser/yamlParser07.d.ts +15 -0
  557. package/out/server/src/languageservice/parser/yamlParser07.js +55 -0
  558. package/out/server/src/languageservice/parser/yamlParser07.js.map +1 -0
  559. package/out/server/src/languageservice/services/crdUtil.d.ts +23 -0
  560. package/out/server/src/languageservice/services/crdUtil.js +79 -0
  561. package/out/server/src/languageservice/services/crdUtil.js.map +1 -0
  562. package/out/server/src/languageservice/services/documentSymbols.d.ts +12 -0
  563. package/out/server/src/languageservice/services/documentSymbols.js +71 -0
  564. package/out/server/src/languageservice/services/documentSymbols.js.map +1 -0
  565. package/out/server/src/languageservice/services/modelineUtil.d.ts +9 -0
  566. package/out/server/src/languageservice/services/modelineUtil.js +34 -0
  567. package/out/server/src/languageservice/services/modelineUtil.js.map +1 -0
  568. package/out/server/src/languageservice/services/schemaRequestHandler.d.ts +12 -0
  569. package/out/server/src/languageservice/services/schemaRequestHandler.js +88 -0
  570. package/out/server/src/languageservice/services/schemaRequestHandler.js.map +1 -0
  571. package/out/server/src/languageservice/services/validation/map-key-order.d.ts +7 -0
  572. package/out/server/src/languageservice/services/validation/map-key-order.js +39 -0
  573. package/out/server/src/languageservice/services/validation/map-key-order.js.map +1 -0
  574. package/out/server/src/languageservice/services/validation/types.d.ts +6 -0
  575. package/out/server/src/languageservice/services/validation/types.js +7 -0
  576. package/out/server/src/languageservice/services/validation/types.js.map +1 -0
  577. package/out/server/src/languageservice/services/validation/unused-anchors.d.ts +8 -0
  578. package/out/server/src/languageservice/services/validation/unused-anchors.js +95 -0
  579. package/out/server/src/languageservice/services/validation/unused-anchors.js.map +1 -0
  580. package/out/server/src/languageservice/services/validation/yaml-style.d.ts +12 -0
  581. package/out/server/src/languageservice/services/validation/yaml-style.js +32 -0
  582. package/out/server/src/languageservice/services/validation/yaml-style.js.map +1 -0
  583. package/out/server/src/languageservice/services/yamlCodeActions.d.ts +25 -0
  584. package/out/server/src/languageservice/services/yamlCodeActions.js +346 -0
  585. package/out/server/src/languageservice/services/yamlCodeActions.js.map +1 -0
  586. package/out/server/src/languageservice/services/yamlCodeLens.d.ts +11 -0
  587. package/out/server/src/languageservice/services/yamlCodeLens.js +50 -0
  588. package/out/server/src/languageservice/services/yamlCodeLens.js.map +1 -0
  589. package/out/server/src/languageservice/services/yamlCommands.d.ts +3 -0
  590. package/out/server/src/languageservice/services/yamlCommands.js +50 -0
  591. package/out/server/src/languageservice/services/yamlCommands.js.map +1 -0
  592. package/out/server/src/languageservice/services/yamlCompletion.d.ts +77 -0
  593. package/out/server/src/languageservice/services/yamlCompletion.js +1505 -0
  594. package/out/server/src/languageservice/services/yamlCompletion.js.map +1 -0
  595. package/out/server/src/languageservice/services/yamlDefinition.d.ts +9 -0
  596. package/out/server/src/languageservice/services/yamlDefinition.js +41 -0
  597. package/out/server/src/languageservice/services/yamlDefinition.js.map +1 -0
  598. package/out/server/src/languageservice/services/yamlFolding.d.ts +4 -0
  599. package/out/server/src/languageservice/services/yamlFolding.js +66 -0
  600. package/out/server/src/languageservice/services/yamlFolding.js.map +1 -0
  601. package/out/server/src/languageservice/services/yamlFormatter.d.ts +8 -0
  602. package/out/server/src/languageservice/services/yamlFormatter.js +50 -0
  603. package/out/server/src/languageservice/services/yamlFormatter.js.map +1 -0
  604. package/out/server/src/languageservice/services/yamlHover.d.ts +47 -0
  605. package/out/server/src/languageservice/services/yamlHover.js +370 -0
  606. package/out/server/src/languageservice/services/yamlHover.js.map +1 -0
  607. package/out/server/src/languageservice/services/yamlLinks.d.ts +8 -0
  608. package/out/server/src/languageservice/services/yamlLinks.js +31 -0
  609. package/out/server/src/languageservice/services/yamlLinks.js.map +1 -0
  610. package/out/server/src/languageservice/services/yamlOnTypeFormatting.d.ts +4 -0
  611. package/out/server/src/languageservice/services/yamlOnTypeFormatting.js +47 -0
  612. package/out/server/src/languageservice/services/yamlOnTypeFormatting.js.map +1 -0
  613. package/out/server/src/languageservice/services/yamlRename.d.ts +18 -0
  614. package/out/server/src/languageservice/services/yamlRename.js +188 -0
  615. package/out/server/src/languageservice/services/yamlRename.js.map +1 -0
  616. package/out/server/src/languageservice/services/yamlSchemaService.d.ts +99 -0
  617. package/out/server/src/languageservice/services/yamlSchemaService.js +1114 -0
  618. package/out/server/src/languageservice/services/yamlSchemaService.js.map +1 -0
  619. package/out/server/src/languageservice/services/yamlSelectionRanges.d.ts +3 -0
  620. package/out/server/src/languageservice/services/yamlSelectionRanges.js +134 -0
  621. package/out/server/src/languageservice/services/yamlSelectionRanges.js.map +1 -0
  622. package/out/server/src/languageservice/services/yamlValidation.d.ts +26 -0
  623. package/out/server/src/languageservice/services/yamlValidation.js +140 -0
  624. package/out/server/src/languageservice/services/yamlValidation.js.map +1 -0
  625. package/out/server/src/languageservice/telemetry.d.ts +16 -0
  626. package/out/server/src/languageservice/telemetry.js +7 -0
  627. package/out/server/src/languageservice/telemetry.js.map +1 -0
  628. package/out/server/src/languageservice/utils/arrUtils.d.ts +6 -0
  629. package/out/server/src/languageservice/utils/arrUtils.js +89 -0
  630. package/out/server/src/languageservice/utils/arrUtils.js.map +1 -0
  631. package/out/server/src/languageservice/utils/block-string-rewriter.d.ts +8 -0
  632. package/out/server/src/languageservice/utils/block-string-rewriter.js +219 -0
  633. package/out/server/src/languageservice/utils/block-string-rewriter.js.map +1 -0
  634. package/out/server/src/languageservice/utils/charCode.d.ts +415 -0
  635. package/out/server/src/languageservice/utils/charCode.js +7 -0
  636. package/out/server/src/languageservice/utils/charCode.js.map +1 -0
  637. package/out/server/src/languageservice/utils/diagnostic-filter.d.ts +50 -0
  638. package/out/server/src/languageservice/utils/diagnostic-filter.js +88 -0
  639. package/out/server/src/languageservice/utils/diagnostic-filter.js.map +1 -0
  640. package/out/server/src/languageservice/utils/documentPositionCalculator.d.ts +5 -0
  641. package/out/server/src/languageservice/utils/documentPositionCalculator.js +63 -0
  642. package/out/server/src/languageservice/utils/documentPositionCalculator.js.map +1 -0
  643. package/out/server/src/languageservice/utils/filePatternAssociation.d.ts +8 -0
  644. package/out/server/src/languageservice/utils/filePatternAssociation.js +27 -0
  645. package/out/server/src/languageservice/utils/filePatternAssociation.js.map +1 -0
  646. package/out/server/src/languageservice/utils/flow-style-rewriter.d.ts +6 -0
  647. package/out/server/src/languageservice/utils/flow-style-rewriter.js +57 -0
  648. package/out/server/src/languageservice/utils/flow-style-rewriter.js.map +1 -0
  649. package/out/server/src/languageservice/utils/indentationGuesser.d.ts +15 -0
  650. package/out/server/src/languageservice/utils/indentationGuesser.js +180 -0
  651. package/out/server/src/languageservice/utils/indentationGuesser.js.map +1 -0
  652. package/out/server/src/languageservice/utils/json.d.ts +11 -0
  653. package/out/server/src/languageservice/utils/json.js +83 -0
  654. package/out/server/src/languageservice/utils/json.js.map +1 -0
  655. package/out/server/src/languageservice/utils/math.d.ts +1 -0
  656. package/out/server/src/languageservice/utils/math.js +13 -0
  657. package/out/server/src/languageservice/utils/math.js.map +1 -0
  658. package/out/server/src/languageservice/utils/objects.d.ts +16 -0
  659. package/out/server/src/languageservice/utils/objects.js +102 -0
  660. package/out/server/src/languageservice/utils/objects.js.map +1 -0
  661. package/out/server/src/languageservice/utils/parseUtils.d.ts +17 -0
  662. package/out/server/src/languageservice/utils/parseUtils.js +5 -0
  663. package/out/server/src/languageservice/utils/parseUtils.js.map +1 -0
  664. package/out/server/src/languageservice/utils/paths.d.ts +5 -0
  665. package/out/server/src/languageservice/utils/paths.js +48 -0
  666. package/out/server/src/languageservice/utils/paths.js.map +1 -0
  667. package/out/server/src/languageservice/utils/schemaUrls.d.ts +14 -0
  668. package/out/server/src/languageservice/utils/schemaUrls.js +64 -0
  669. package/out/server/src/languageservice/utils/schemaUrls.js.map +1 -0
  670. package/out/server/src/languageservice/utils/schemaUtils.d.ts +19 -0
  671. package/out/server/src/languageservice/utils/schemaUtils.js +70 -0
  672. package/out/server/src/languageservice/utils/schemaUtils.js.map +1 -0
  673. package/out/server/src/languageservice/utils/strings.d.ts +10 -0
  674. package/out/server/src/languageservice/utils/strings.js +89 -0
  675. package/out/server/src/languageservice/utils/strings.js.map +1 -0
  676. package/out/server/src/languageservice/utils/textBuffer.d.ts +12 -0
  677. package/out/server/src/languageservice/utils/textBuffer.js +49 -0
  678. package/out/server/src/languageservice/utils/textBuffer.js.map +1 -0
  679. package/out/server/src/languageservice/utils/yamlAstUtils.d.ts +13 -0
  680. package/out/server/src/languageservice/utils/yamlAstUtils.js +116 -0
  681. package/out/server/src/languageservice/utils/yamlAstUtils.js.map +1 -0
  682. package/out/server/src/languageservice/utils/yamlScalar.d.ts +1 -0
  683. package/out/server/src/languageservice/utils/yamlScalar.js +73 -0
  684. package/out/server/src/languageservice/utils/yamlScalar.js.map +1 -0
  685. package/out/server/src/languageservice/yamlLanguageService.d.ts +135 -0
  686. package/out/server/src/languageservice/yamlLanguageService.js +105 -0
  687. package/out/server/src/languageservice/yamlLanguageService.js.map +1 -0
  688. package/out/server/src/languageservice/yamlTypes.d.ts +18 -0
  689. package/out/server/src/languageservice/yamlTypes.js +7 -0
  690. package/out/server/src/languageservice/yamlTypes.js.map +1 -0
  691. package/out/server/src/nodeTranslationSetup.d.ts +9 -0
  692. package/out/server/src/nodeTranslationSetup.js +38 -0
  693. package/out/server/src/nodeTranslationSetup.js.map +1 -0
  694. package/out/server/src/requestTypes.d.ts +63 -0
  695. package/out/server/src/requestTypes.js +49 -0
  696. package/out/server/src/requestTypes.js.map +1 -0
  697. package/out/server/src/server.d.ts +1 -0
  698. package/out/server/src/server.js +57 -0
  699. package/out/server/src/server.js.map +1 -0
  700. package/out/server/src/webworker/yamlServerMain.d.ts +1 -0
  701. package/out/server/src/webworker/yamlServerMain.js +42 -0
  702. package/out/server/src/webworker/yamlServerMain.js.map +1 -0
  703. package/out/server/src/yamlServerInit.d.ts +23 -0
  704. package/out/server/src/yamlServerInit.js +127 -0
  705. package/out/server/src/yamlServerInit.js.map +1 -0
  706. package/out/server/src/yamlSettings.d.ts +112 -0
  707. package/out/server/src/yamlSettings.js +74 -0
  708. package/out/server/src/yamlSettings.js.map +1 -0
  709. package/out/server/test/arrUtils.test.d.ts +1 -0
  710. package/out/server/test/arrUtils.test.js +60 -0
  711. package/out/server/test/arrUtils.test.js.map +1 -0
  712. package/out/server/test/astUtils.test.d.ts +1 -0
  713. package/out/server/test/astUtils.test.js +79 -0
  714. package/out/server/test/astUtils.test.js.map +1 -0
  715. package/out/server/test/autoCompletion.test.d.ts +1 -0
  716. package/out/server/test/autoCompletion.test.js +2832 -0
  717. package/out/server/test/autoCompletion.test.js.map +1 -0
  718. package/out/server/test/autoCompletionFix.test.d.ts +1 -0
  719. package/out/server/test/autoCompletionFix.test.js +1591 -0
  720. package/out/server/test/autoCompletionFix.test.js.map +1 -0
  721. package/out/server/test/bundlel10n.test.d.ts +1 -0
  722. package/out/server/test/bundlel10n.test.js +73 -0
  723. package/out/server/test/bundlel10n.test.js.map +1 -0
  724. package/out/server/test/code-action-schema.test.d.ts +1 -0
  725. package/out/server/test/code-action-schema.test.js +89 -0
  726. package/out/server/test/code-action-schema.test.js.map +1 -0
  727. package/out/server/test/customTags.test.d.ts +1 -0
  728. package/out/server/test/customTags.test.js +88 -0
  729. package/out/server/test/customTags.test.js.map +1 -0
  730. package/out/server/test/defaultSnippets.test.d.ts +1 -0
  731. package/out/server/test/defaultSnippets.test.js +384 -0
  732. package/out/server/test/defaultSnippets.test.js.map +1 -0
  733. package/out/server/test/diagnostic-filter.test.d.ts +1 -0
  734. package/out/server/test/diagnostic-filter.test.js +161 -0
  735. package/out/server/test/diagnostic-filter.test.js.map +1 -0
  736. package/out/server/test/documentPositionCalculator.test.d.ts +1 -0
  737. package/out/server/test/documentPositionCalculator.test.js +69 -0
  738. package/out/server/test/documentPositionCalculator.test.js.map +1 -0
  739. package/out/server/test/documentSymbols.test.d.ts +1 -0
  740. package/out/server/test/documentSymbols.test.js +267 -0
  741. package/out/server/test/documentSymbols.test.js.map +1 -0
  742. package/out/server/test/findLinks.test.d.ts +1 -0
  743. package/out/server/test/findLinks.test.js +58 -0
  744. package/out/server/test/findLinks.test.js.map +1 -0
  745. package/out/server/test/flow-style-rewriter.test.d.ts +1 -0
  746. package/out/server/test/flow-style-rewriter.test.js +79 -0
  747. package/out/server/test/flow-style-rewriter.test.js.map +1 -0
  748. package/out/server/test/formatter.test.d.ts +1 -0
  749. package/out/server/test/formatter.test.js +170 -0
  750. package/out/server/test/formatter.test.js.map +1 -0
  751. package/out/server/test/hover.test.d.ts +1 -0
  752. package/out/server/test/hover.test.js +1056 -0
  753. package/out/server/test/hover.test.js.map +1 -0
  754. package/out/server/test/integration.test.d.ts +1 -0
  755. package/out/server/test/integration.test.js +293 -0
  756. package/out/server/test/integration.test.js.map +1 -0
  757. package/out/server/test/invalid-metaschema.test.d.ts +1 -0
  758. package/out/server/test/invalid-metaschema.test.js +43 -0
  759. package/out/server/test/invalid-metaschema.test.js.map +1 -0
  760. package/out/server/test/jsonParser.test.d.ts +1 -0
  761. package/out/server/test/jsonParser.test.js +1682 -0
  762. package/out/server/test/jsonParser.test.js.map +1 -0
  763. package/out/server/test/multipleDocuments.test.d.ts +1 -0
  764. package/out/server/test/multipleDocuments.test.js +117 -0
  765. package/out/server/test/multipleDocuments.test.js.map +1 -0
  766. package/out/server/test/objects.test.d.ts +1 -0
  767. package/out/server/test/objects.test.js +110 -0
  768. package/out/server/test/objects.test.js.map +1 -0
  769. package/out/server/test/paths.test.d.ts +1 -0
  770. package/out/server/test/paths.test.js +223 -0
  771. package/out/server/test/paths.test.js.map +1 -0
  772. package/out/server/test/scalaruri.test.d.ts +1 -0
  773. package/out/server/test/scalaruri.test.js +363 -0
  774. package/out/server/test/scalaruri.test.js.map +1 -0
  775. package/out/server/test/schema.test.d.ts +1 -0
  776. package/out/server/test/schema.test.js +952 -0
  777. package/out/server/test/schema.test.js.map +1 -0
  778. package/out/server/test/schema2019Validation.test.d.ts +1 -0
  779. package/out/server/test/schema2019Validation.test.js +3630 -0
  780. package/out/server/test/schema2019Validation.test.js.map +1 -0
  781. package/out/server/test/schema2020Validation.test.d.ts +1 -0
  782. package/out/server/test/schema2020Validation.test.js +2037 -0
  783. package/out/server/test/schema2020Validation.test.js.map +1 -0
  784. package/out/server/test/schemaRequestHandler.test.d.ts +1 -0
  785. package/out/server/test/schemaRequestHandler.test.js +48 -0
  786. package/out/server/test/schemaRequestHandler.test.js.map +1 -0
  787. package/out/server/test/schemaSelectionHandlers.test.d.ts +1 -0
  788. package/out/server/test/schemaSelectionHandlers.test.js +99 -0
  789. package/out/server/test/schemaSelectionHandlers.test.js.map +1 -0
  790. package/out/server/test/schemaValidation.test.d.ts +1 -0
  791. package/out/server/test/schemaValidation.test.js +2269 -0
  792. package/out/server/test/schemaValidation.test.js.map +1 -0
  793. package/out/server/test/settingsHandlers.test.d.ts +1 -0
  794. package/out/server/test/settingsHandlers.test.js +299 -0
  795. package/out/server/test/settingsHandlers.test.js.map +1 -0
  796. package/out/server/test/strings.test.d.ts +1 -0
  797. package/out/server/test/strings.test.js +92 -0
  798. package/out/server/test/strings.test.js.map +1 -0
  799. package/out/server/test/telemetry.test.d.ts +1 -0
  800. package/out/server/test/telemetry.test.js +36 -0
  801. package/out/server/test/telemetry.test.js.map +1 -0
  802. package/out/server/test/textBuffer.test.d.ts +1 -0
  803. package/out/server/test/textBuffer.test.js +41 -0
  804. package/out/server/test/textBuffer.test.js.map +1 -0
  805. package/out/server/test/utils/errorMessages.d.ts +27 -0
  806. package/out/server/test/utils/errorMessages.js +38 -0
  807. package/out/server/test/utils/errorMessages.js.map +1 -0
  808. package/out/server/test/utils/serviceSetup.d.ts +17 -0
  809. package/out/server/test/utils/serviceSetup.js +74 -0
  810. package/out/server/test/utils/serviceSetup.js.map +1 -0
  811. package/out/server/test/utils/testHelper.d.ts +78 -0
  812. package/out/server/test/utils/testHelper.js +202 -0
  813. package/out/server/test/utils/testHelper.js.map +1 -0
  814. package/out/server/test/utils/testsTypes.d.ts +29 -0
  815. package/out/server/test/utils/testsTypes.js +61 -0
  816. package/out/server/test/utils/testsTypes.js.map +1 -0
  817. package/out/server/test/utils/verifyError.d.ts +8 -0
  818. package/out/server/test/utils/verifyError.js +82 -0
  819. package/out/server/test/utils/verifyError.js.map +1 -0
  820. package/out/server/test/yaml-documents.test.d.ts +1 -0
  821. package/out/server/test/yaml-documents.test.js +198 -0
  822. package/out/server/test/yaml-documents.test.js.map +1 -0
  823. package/out/server/test/yamlCodeActions.test.d.ts +1 -0
  824. package/out/server/test/yamlCodeActions.test.js +864 -0
  825. package/out/server/test/yamlCodeActions.test.js.map +1 -0
  826. package/out/server/test/yamlCodeLens.test.d.ts +1 -0
  827. package/out/server/test/yamlCodeLens.test.js +165 -0
  828. package/out/server/test/yamlCodeLens.test.js.map +1 -0
  829. package/out/server/test/yamlCommands.test.d.ts +1 -0
  830. package/out/server/test/yamlCommands.test.js +89 -0
  831. package/out/server/test/yamlCommands.test.js.map +1 -0
  832. package/out/server/test/yamlDefinition.test.d.ts +1 -0
  833. package/out/server/test/yamlDefinition.test.js +30 -0
  834. package/out/server/test/yamlDefinition.test.js.map +1 -0
  835. package/out/server/test/yamlFolding.test.d.ts +1 -0
  836. package/out/server/test/yamlFolding.test.js +142 -0
  837. package/out/server/test/yamlFolding.test.js.map +1 -0
  838. package/out/server/test/yamlLanguageService.test.d.ts +1 -0
  839. package/out/server/test/yamlLanguageService.test.js +90 -0
  840. package/out/server/test/yamlLanguageService.test.js.map +1 -0
  841. package/out/server/test/yamlOnTypeFormatting.test.d.ts +1 -0
  842. package/out/server/test/yamlOnTypeFormatting.test.js +69 -0
  843. package/out/server/test/yamlOnTypeFormatting.test.js.map +1 -0
  844. package/out/server/test/yamlParser.test.d.ts +1 -0
  845. package/out/server/test/yamlParser.test.js +242 -0
  846. package/out/server/test/yamlParser.test.js.map +1 -0
  847. package/out/server/test/yamlRename.test.d.ts +1 -0
  848. package/out/server/test/yamlRename.test.js +106 -0
  849. package/out/server/test/yamlRename.test.js.map +1 -0
  850. package/out/server/test/yamlSchema.test.d.ts +1 -0
  851. package/out/server/test/yamlSchema.test.js +62 -0
  852. package/out/server/test/yamlSchema.test.js.map +1 -0
  853. package/out/server/test/yamlSchemaService.test.d.ts +1 -0
  854. package/out/server/test/yamlSchemaService.test.js +403 -0
  855. package/out/server/test/yamlSchemaService.test.js.map +1 -0
  856. package/out/server/test/yamlSelectionRanges.test.d.ts +1 -0
  857. package/out/server/test/yamlSelectionRanges.test.js +248 -0
  858. package/out/server/test/yamlSelectionRanges.test.js.map +1 -0
  859. package/out/server/test/yamlValidation.test.d.ts +1 -0
  860. package/out/server/test/yamlValidation.test.js +303 -0
  861. package/out/server/test/yamlValidation.test.js.map +1 -0
  862. package/package.json +106 -0
  863. package/scripts/check-dependencies.js +21 -0
  864. package/tsconfig.esm.json +15 -0
  865. package/tsconfig.umd.json +14 -0
@@ -0,0 +1,2037 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ /*---------------------------------------------------------------------------------------------
4
+ * Copyright (c) IBM Corporation. All rights reserved.
5
+ * Licensed under the MIT License. See License.txt in the project root for license information.
6
+ *--------------------------------------------------------------------------------------------*/
7
+ const testHelper_1 = require("./utils/testHelper");
8
+ const serviceSetup_1 = require("./utils/serviceSetup");
9
+ const chai_1 = require("chai");
10
+ const yamlSettings_1 = require("../src/yamlSettings");
11
+ const schemaUrls_1 = require("../src/languageservice/utils/schemaUrls");
12
+ describe('Validation Tests', () => {
13
+ let languageSettingsSetup;
14
+ let validationHandler;
15
+ let yamlSettings;
16
+ let schemaProvider;
17
+ const toContent = (data) => JSON.stringify(data, null, 2);
18
+ before(() => {
19
+ languageSettingsSetup = new serviceSetup_1.ServiceSetup()
20
+ .withValidate()
21
+ .withCompletion()
22
+ .withCustomTags(['!Test', '!Ref sequence'])
23
+ .withSchemaFileMatch({ uri: schemaUrls_1.KUBERNETES_SCHEMA_URL, fileMatch: ['.drone.yml'] })
24
+ .withSchemaFileMatch({ uri: 'https://json.schemastore.org/drone', fileMatch: ['.drone.yml'] })
25
+ .withSchemaFileMatch({ uri: schemaUrls_1.KUBERNETES_SCHEMA_URL, fileMatch: ['test.yml'] })
26
+ .withSchemaFileMatch({
27
+ uri: 'https://raw.githubusercontent.com/composer/composer/master/res/composer-schema.json',
28
+ fileMatch: ['test.yml'],
29
+ });
30
+ const { validationHandler: valHandler, yamlSettings: settings, schemaProvider: testSchemaProvider, } = (0, testHelper_1.setupLanguageService)(languageSettingsSetup.languageSettings);
31
+ validationHandler = valHandler;
32
+ yamlSettings = settings;
33
+ schemaProvider = testSchemaProvider;
34
+ });
35
+ function parseSetup(content, customSchemaID) {
36
+ const testTextDocument = (0, testHelper_1.setupSchemaIDTextDocument)(content, customSchemaID);
37
+ yamlSettings.documents = new yamlSettings_1.TextDocumentTestManager();
38
+ yamlSettings.documents.set(testTextDocument);
39
+ return validationHandler.validateTextDocument(testTextDocument);
40
+ }
41
+ afterEach(() => {
42
+ schemaProvider.deleteSchema(testHelper_1.SCHEMA_ID);
43
+ });
44
+ describe('keyword: prefixItems + items', () => {
45
+ describe('Open tuple', () => {
46
+ beforeEach(() => {
47
+ schemaProvider.addSchema(testHelper_1.SCHEMA_ID, {
48
+ $schema: 'https://json-schema.org/draft/2020-12/schema',
49
+ type: 'array',
50
+ prefixItems: [{ type: 'string' }, { type: 'number' }],
51
+ });
52
+ });
53
+ it('allows extra items by default (items is unconstrained)', async () => {
54
+ const content = `- hello
55
+ - 123
56
+ - { totally: "anything" }`;
57
+ const result = await parseSetup(content);
58
+ (0, chai_1.expect)(result).to.be.empty;
59
+ });
60
+ it('fails when a prefixItems position has the wrong type', async () => {
61
+ const content = `- 123\n- hello`;
62
+ const result = await parseSetup(content);
63
+ (0, chai_1.expect)(result).to.have.length(2);
64
+ (0, chai_1.expect)(result[0].message).to.include('Incorrect type');
65
+ (0, chai_1.expect)(result[0].message).to.include('string');
66
+ (0, chai_1.expect)(result[1].message).to.include('Incorrect type');
67
+ (0, chai_1.expect)(result[1].message).to.include('number');
68
+ });
69
+ });
70
+ describe('Closed tuple', () => {
71
+ beforeEach(() => {
72
+ schemaProvider.addSchema(testHelper_1.SCHEMA_ID, {
73
+ $schema: 'https://json-schema.org/draft/2020-12/schema',
74
+ type: 'array',
75
+ prefixItems: [{ type: 'string' }, { type: 'number' }],
76
+ items: false,
77
+ });
78
+ });
79
+ it('forbids extra items after prefixItems', async () => {
80
+ const content = `- hello\n- 123\n- extra`;
81
+ const result = await parseSetup(content);
82
+ (0, chai_1.expect)(result).to.have.length(1);
83
+ (0, chai_1.expect)(result[0].message).to.include('Array has too many items according to schema. Expected 2 or fewer.');
84
+ });
85
+ it('passes when length is within prefixItems', async () => {
86
+ const content = `- hello\n- 123`;
87
+ const result = await parseSetup(content);
88
+ (0, chai_1.expect)(result).to.be.empty;
89
+ });
90
+ });
91
+ describe('Tuple with constrained extra items', () => {
92
+ beforeEach(() => {
93
+ schemaProvider.addSchema(testHelper_1.SCHEMA_ID, {
94
+ $schema: 'https://json-schema.org/draft/2020-12/schema',
95
+ type: 'array',
96
+ prefixItems: [{ type: 'string' }, { type: 'number' }],
97
+ items: { type: 'boolean' },
98
+ });
99
+ });
100
+ it('fails when an extra item does not match items schema', async () => {
101
+ const content = `- hello
102
+ - 123
103
+ - notBoolean`;
104
+ const result = await parseSetup(content);
105
+ (0, chai_1.expect)(result).to.have.length(1);
106
+ (0, chai_1.expect)(result[0].message).to.include('Incorrect type');
107
+ (0, chai_1.expect)(result[0].message).to.include('boolean');
108
+ });
109
+ it('passes when extra items match items schema', async () => {
110
+ const content = `- hello
111
+ - 123
112
+ - true
113
+ - false`;
114
+ const result = await parseSetup(content);
115
+ (0, chai_1.expect)(result).to.be.empty;
116
+ });
117
+ });
118
+ });
119
+ describe('keyword: prefixItems', () => {
120
+ it('a schema given for prefixItems', async () => {
121
+ schemaProvider.addSchema(testHelper_1.SCHEMA_ID, {
122
+ $schema: 'https://json-schema.org/draft/2020-12/schema',
123
+ prefixItems: [{ type: 'integer' }, { type: 'string' }],
124
+ });
125
+ // correct types
126
+ let content = toContent([1, 'foo']);
127
+ let result = await parseSetup(content);
128
+ (0, chai_1.expect)(result).to.be.empty;
129
+ // wrong types
130
+ content = toContent(['foo', 1]);
131
+ result = await parseSetup(content);
132
+ (0, chai_1.expect)(result).to.have.length(2);
133
+ (0, chai_1.expect)(result[0].message).to.include('Incorrect type');
134
+ (0, chai_1.expect)(result[1].message).to.include('Incorrect type');
135
+ // incomplete array of items
136
+ content = toContent([1]);
137
+ result = await parseSetup(content);
138
+ (0, chai_1.expect)(result).to.be.empty;
139
+ // array with additional items
140
+ content = toContent([1, 'foo', true]);
141
+ result = await parseSetup(content);
142
+ (0, chai_1.expect)(result).to.be.empty;
143
+ // empty array
144
+ content = toContent([]);
145
+ result = await parseSetup(content);
146
+ (0, chai_1.expect)(result).to.be.empty;
147
+ // JavaScript pseudo-array is valid
148
+ content = toContent({
149
+ '0': 'invalid',
150
+ '1': 'valid',
151
+ length: 2,
152
+ });
153
+ result = await parseSetup(content);
154
+ (0, chai_1.expect)(result).to.be.empty;
155
+ });
156
+ it('prefixItems with boolean schemas', async () => {
157
+ schemaProvider.addSchema(testHelper_1.SCHEMA_ID, {
158
+ $schema: 'https://json-schema.org/draft/2020-12/schema',
159
+ prefixItems: [true, false],
160
+ });
161
+ // array with one item is valid
162
+ let content = toContent([1]);
163
+ let result = await parseSetup(content);
164
+ (0, chai_1.expect)(result).to.be.empty;
165
+ // array with two items is invalid
166
+ content = toContent([1, 'foo']);
167
+ result = await parseSetup(content);
168
+ (0, chai_1.expect)(result).to.have.length(1);
169
+ (0, chai_1.expect)(result[0].message).to.include('Matches a schema that is not allowed');
170
+ // empty array is valid
171
+ content = toContent([]);
172
+ result = await parseSetup(content);
173
+ (0, chai_1.expect)(result).to.be.empty;
174
+ });
175
+ it('additional items are allowed by default', async () => {
176
+ schemaProvider.addSchema(testHelper_1.SCHEMA_ID, {
177
+ $schema: 'https://json-schema.org/draft/2020-12/schema',
178
+ prefixItems: [{ type: 'integer' }],
179
+ });
180
+ // only the first item is validated
181
+ const content = toContent([1, 'foo', false]);
182
+ const result = await parseSetup(content);
183
+ (0, chai_1.expect)(result).to.be.empty;
184
+ });
185
+ it('prefixItems with null instance elements', async () => {
186
+ schemaProvider.addSchema(testHelper_1.SCHEMA_ID, {
187
+ $schema: 'https://json-schema.org/draft/2020-12/schema',
188
+ prefixItems: [
189
+ {
190
+ type: 'null',
191
+ },
192
+ ],
193
+ });
194
+ // allows null elements
195
+ const content = toContent([null]);
196
+ const result = await parseSetup(content);
197
+ (0, chai_1.expect)(result).to.be.empty;
198
+ });
199
+ });
200
+ describe('keyword: items', () => {
201
+ it('a schema given for items', async () => {
202
+ schemaProvider.addSchema(testHelper_1.SCHEMA_ID, {
203
+ $schema: 'https://json-schema.org/draft/2020-12/schema',
204
+ items: { type: 'integer' },
205
+ });
206
+ // valid items
207
+ let content = toContent([1, 2, 3]);
208
+ let result = await parseSetup(content);
209
+ (0, chai_1.expect)(result).to.be.empty;
210
+ // wrong type of items
211
+ content = toContent([1, 'x']);
212
+ result = await parseSetup(content);
213
+ (0, chai_1.expect)(result).to.have.length(1);
214
+ (0, chai_1.expect)(result[0].message).to.include('Incorrect type');
215
+ // ignores non-arrays
216
+ content = toContent({ foo: 'bar' });
217
+ result = await parseSetup(content);
218
+ (0, chai_1.expect)(result).to.be.empty;
219
+ // JavaScript pseudo-array is valid
220
+ content = toContent({
221
+ '0': 'invalid',
222
+ length: 1,
223
+ });
224
+ result = await parseSetup(content);
225
+ (0, chai_1.expect)(result).to.be.empty;
226
+ });
227
+ it('items with boolean schema (true)', async () => {
228
+ schemaProvider.addSchema(testHelper_1.SCHEMA_ID, {
229
+ $schema: 'https://json-schema.org/draft/2020-12/schema',
230
+ items: true,
231
+ });
232
+ // any array is valid
233
+ let content = toContent([1, 'foo', true]);
234
+ let result = await parseSetup(content);
235
+ (0, chai_1.expect)(result).to.be.empty;
236
+ // empty array is valid
237
+ content = toContent([]);
238
+ result = await parseSetup(content);
239
+ (0, chai_1.expect)(result).to.be.empty;
240
+ });
241
+ it('items with boolean schema (false)', async () => {
242
+ schemaProvider.addSchema(testHelper_1.SCHEMA_ID, {
243
+ $schema: 'https://json-schema.org/draft/2020-12/schema',
244
+ items: false,
245
+ });
246
+ // any non-empty array is invalid
247
+ let content = toContent([1, 'foo', true]);
248
+ let result = await parseSetup(content);
249
+ (0, chai_1.expect)(result).to.have.length(1);
250
+ (0, chai_1.expect)(result[0].message).to.include('Array has too many items according to schema. Expected 0 or fewer.');
251
+ // empty array is valid
252
+ content = toContent([]);
253
+ result = await parseSetup(content);
254
+ (0, chai_1.expect)(result).to.be.empty;
255
+ });
256
+ it('items and subitems', async () => {
257
+ schemaProvider.addSchema(testHelper_1.SCHEMA_ID, {
258
+ $schema: 'https://json-schema.org/draft/2020-12/schema',
259
+ $defs: {
260
+ item: {
261
+ type: 'array',
262
+ items: false,
263
+ prefixItems: [{ $ref: '#/$defs/sub-item' }, { $ref: '#/$defs/sub-item' }],
264
+ },
265
+ 'sub-item': {
266
+ type: 'object',
267
+ required: ['foo'],
268
+ },
269
+ },
270
+ type: 'array',
271
+ items: false,
272
+ prefixItems: [{ $ref: '#/$defs/item' }, { $ref: '#/$defs/item' }, { $ref: '#/$defs/item' }],
273
+ });
274
+ // valid items
275
+ let content = toContent([
276
+ [{ foo: null }, { foo: null }],
277
+ [{ foo: null }, { foo: null }],
278
+ [{ foo: null }, { foo: null }],
279
+ ]);
280
+ let result = await parseSetup(content);
281
+ (0, chai_1.expect)(result).to.be.empty;
282
+ // too many items
283
+ content = toContent([
284
+ [{ foo: null }, { foo: null }],
285
+ [{ foo: null }, { foo: null }],
286
+ [{ foo: null }, { foo: null }],
287
+ [{ foo: null }, { foo: null }],
288
+ ]);
289
+ result = await parseSetup(content);
290
+ (0, chai_1.expect)(result).to.have.length(1);
291
+ (0, chai_1.expect)(result[0].message).to.include('Array has too many items');
292
+ // too many sub-items
293
+ content = toContent([
294
+ [{ foo: null }, { foo: null }, { foo: null }],
295
+ [{ foo: null }, { foo: null }],
296
+ [{ foo: null }, { foo: null }],
297
+ ]);
298
+ result = await parseSetup(content);
299
+ (0, chai_1.expect)(result).to.have.length(1);
300
+ (0, chai_1.expect)(result[0].message).to.include('Array has too many items');
301
+ // wrong item
302
+ content = toContent([{ foo: null }, [{ foo: null }, { foo: null }], [{ foo: null }, { foo: null }]]);
303
+ result = await parseSetup(content);
304
+ (0, chai_1.expect)(result).to.have.length(1);
305
+ (0, chai_1.expect)(result[0].message).to.include('Incorrect type');
306
+ // wrong sub-item
307
+ content = toContent([
308
+ [{}, { foo: null }],
309
+ [{ foo: null }, { foo: null }],
310
+ [{ foo: null }, { foo: null }],
311
+ ]);
312
+ result = await parseSetup(content);
313
+ (0, chai_1.expect)(result).to.have.length(1);
314
+ (0, chai_1.expect)(result[0].message).to.include('Missing property');
315
+ // fewer items is valid
316
+ content = toContent([[{ foo: null }], [{ foo: null }]]);
317
+ result = await parseSetup(content);
318
+ (0, chai_1.expect)(result).to.be.empty;
319
+ });
320
+ it('nested items', async () => {
321
+ schemaProvider.addSchema(testHelper_1.SCHEMA_ID, {
322
+ $schema: 'https://json-schema.org/draft/2020-12/schema',
323
+ type: 'array',
324
+ items: {
325
+ type: 'array',
326
+ items: {
327
+ type: 'array',
328
+ items: {
329
+ type: 'array',
330
+ items: {
331
+ type: 'number',
332
+ },
333
+ },
334
+ },
335
+ },
336
+ });
337
+ // valid nested array
338
+ let content = toContent([[[[1]], [[2], [3]]], [[[4], [5], [6]]]]);
339
+ let result = await parseSetup(content);
340
+ (0, chai_1.expect)(result).to.be.empty;
341
+ // nested array with invalid type
342
+ content = toContent([[[['1']], [[2], [3]]], [[[4], [5], [6]]]]);
343
+ result = await parseSetup(content);
344
+ (0, chai_1.expect)(result).to.have.length(1);
345
+ (0, chai_1.expect)(result[0].message).to.include('Incorrect type');
346
+ // not deep enough
347
+ content = toContent([
348
+ [[1], [2], [3]],
349
+ [[4], [5], [6]],
350
+ ]);
351
+ result = await parseSetup(content);
352
+ (0, chai_1.expect)(result).to.have.length(6);
353
+ (0, chai_1.expect)(result[0].message).to.include('Incorrect type');
354
+ });
355
+ it('prefixItems with no additional items allowed', async () => {
356
+ schemaProvider.addSchema(testHelper_1.SCHEMA_ID, {
357
+ $schema: 'https://json-schema.org/draft/2020-12/schema',
358
+ prefixItems: [{}, {}, {}],
359
+ items: false,
360
+ });
361
+ // empty array
362
+ let content = toContent([]);
363
+ let result = await parseSetup(content);
364
+ (0, chai_1.expect)(result).to.be.empty;
365
+ // fewer number of items present (1)
366
+ content = toContent([1]);
367
+ result = await parseSetup(content);
368
+ (0, chai_1.expect)(result).to.be.empty;
369
+ // fewer number of items present (2)
370
+ content = toContent([1, 2]);
371
+ result = await parseSetup(content);
372
+ (0, chai_1.expect)(result).to.be.empty;
373
+ // equal number of items present
374
+ content = toContent([1, 2, 3]);
375
+ result = await parseSetup(content);
376
+ (0, chai_1.expect)(result).to.be.empty;
377
+ // additional items are not permitted
378
+ content = toContent([1, 2, 3, 4]);
379
+ result = await parseSetup(content);
380
+ (0, chai_1.expect)(result).to.have.length(1);
381
+ (0, chai_1.expect)(result[0].message).to.include('Array has too many items');
382
+ });
383
+ it('items does not look in applicators, valid case', async () => {
384
+ schemaProvider.addSchema(testHelper_1.SCHEMA_ID, {
385
+ $schema: 'https://json-schema.org/draft/2020-12/schema',
386
+ allOf: [{ prefixItems: [{ minimum: 3 }] }],
387
+ items: { minimum: 5 },
388
+ });
389
+ // prefixItems in allOf does not constrain items, invalid case
390
+ let content = toContent([3, 5]);
391
+ let result = await parseSetup(content);
392
+ (0, chai_1.expect)(result).to.have.length(1);
393
+ (0, chai_1.expect)(result[0].message).to.include('Value is below the minimum of 5.');
394
+ // prefixItems in allOf does not constrain items, valid case
395
+ content = toContent([5, 5]);
396
+ result = await parseSetup(content);
397
+ (0, chai_1.expect)(result).to.be.empty;
398
+ });
399
+ it('prefixItems validation adjusts the starting index for items', async () => {
400
+ schemaProvider.addSchema(testHelper_1.SCHEMA_ID, {
401
+ $schema: 'https://json-schema.org/draft/2020-12/schema',
402
+ prefixItems: [{ type: 'string' }],
403
+ items: { type: 'integer' },
404
+ });
405
+ // valid items
406
+ let content = toContent(['x', 2, 3]);
407
+ let result = await parseSetup(content);
408
+ (0, chai_1.expect)(result).to.be.empty;
409
+ // wrong type of second item
410
+ content = toContent(['x', 'y']);
411
+ result = await parseSetup(content);
412
+ (0, chai_1.expect)(result).to.have.length(1);
413
+ (0, chai_1.expect)(result[0].message).to.include('Incorrect type');
414
+ });
415
+ it('items with heterogeneous array', async () => {
416
+ schemaProvider.addSchema(testHelper_1.SCHEMA_ID, {
417
+ $schema: 'https://json-schema.org/draft/2020-12/schema',
418
+ prefixItems: [{}],
419
+ items: false,
420
+ });
421
+ // heterogeneous invalid instance
422
+ let content = toContent(['foo', 'bar', 37]);
423
+ let result = await parseSetup(content);
424
+ (0, chai_1.expect)(result).to.have.length(1);
425
+ (0, chai_1.expect)(result[0].message).to.include('Array has too many items');
426
+ // valid instance
427
+ content = toContent([null]);
428
+ result = await parseSetup(content);
429
+ (0, chai_1.expect)(result).to.be.empty;
430
+ });
431
+ it('items with null instance elements', async () => {
432
+ schemaProvider.addSchema(testHelper_1.SCHEMA_ID, {
433
+ $schema: 'https://json-schema.org/draft/2020-12/schema',
434
+ items: {
435
+ type: 'null',
436
+ },
437
+ });
438
+ // allows null elements
439
+ const content = toContent([null]);
440
+ const result = await parseSetup(content);
441
+ (0, chai_1.expect)(result).to.be.empty;
442
+ });
443
+ });
444
+ describe('keyword: unevaluatedItems', () => {
445
+ it('unevaluatedItems true', async () => {
446
+ const schema = {
447
+ $schema: 'https://json-schema.org/draft/2020-12/schema',
448
+ unevaluatedItems: true,
449
+ };
450
+ schemaProvider.addSchema(testHelper_1.SCHEMA_ID, schema);
451
+ (0, chai_1.expect)(await parseSetup(toContent([]))).to.be.empty;
452
+ (0, chai_1.expect)(await parseSetup(toContent(['foo']))).to.be.empty;
453
+ });
454
+ it('unevaluatedItems false', async () => {
455
+ const schema = {
456
+ $schema: 'https://json-schema.org/draft/2020-12/schema',
457
+ unevaluatedItems: false,
458
+ };
459
+ schemaProvider.addSchema(testHelper_1.SCHEMA_ID, schema);
460
+ (0, chai_1.expect)(await parseSetup(toContent([]))).to.be.empty;
461
+ const result = await parseSetup(toContent(['foo']));
462
+ (0, chai_1.expect)(result).to.have.length(1);
463
+ (0, chai_1.expect)(result[0].message).to.include('Array has too many items according to schema. Expected 0 or fewer.');
464
+ });
465
+ it('unevaluatedItems as schema', async () => {
466
+ const schema = {
467
+ $schema: 'https://json-schema.org/draft/2020-12/schema',
468
+ unevaluatedItems: { type: 'string' },
469
+ };
470
+ schemaProvider.addSchema(testHelper_1.SCHEMA_ID, schema);
471
+ (0, chai_1.expect)(await parseSetup(toContent([]))).to.be.empty;
472
+ (0, chai_1.expect)(await parseSetup(toContent(['foo']))).to.be.empty;
473
+ const result = await parseSetup(toContent([42]));
474
+ (0, chai_1.expect)(result).to.have.length(1);
475
+ (0, chai_1.expect)(result[0].message).to.include('Incorrect type. Expected');
476
+ (0, chai_1.expect)(result[0].message).to.include('string');
477
+ });
478
+ it('unevaluatedItems with uniform items', async () => {
479
+ const schema = {
480
+ $schema: 'https://json-schema.org/draft/2020-12/schema',
481
+ items: { type: 'string' },
482
+ unevaluatedItems: false,
483
+ };
484
+ schemaProvider.addSchema(testHelper_1.SCHEMA_ID, schema);
485
+ (0, chai_1.expect)(await parseSetup(toContent(['foo', 'bar']))).to.be.empty;
486
+ });
487
+ it('unevaluatedItems with tuple', async () => {
488
+ const schema = {
489
+ $schema: 'https://json-schema.org/draft/2020-12/schema',
490
+ prefixItems: [{ type: 'string' }],
491
+ unevaluatedItems: false,
492
+ };
493
+ schemaProvider.addSchema(testHelper_1.SCHEMA_ID, schema);
494
+ (0, chai_1.expect)(await parseSetup(toContent(['foo']))).to.be.empty;
495
+ const result = await parseSetup(toContent(['foo', 'bar']));
496
+ (0, chai_1.expect)(result).to.have.length(1);
497
+ (0, chai_1.expect)(result[0].message).to.include('Array has too many items according to schema. Expected 1 or fewer.');
498
+ });
499
+ it('unevaluatedItems with items and prefixItems', async () => {
500
+ const schema = {
501
+ $schema: 'https://json-schema.org/draft/2020-12/schema',
502
+ prefixItems: [{ type: 'string' }],
503
+ items: true,
504
+ unevaluatedItems: false,
505
+ };
506
+ schemaProvider.addSchema(testHelper_1.SCHEMA_ID, schema);
507
+ (0, chai_1.expect)(await parseSetup(toContent(['foo', 42]))).to.be.empty;
508
+ });
509
+ it('unevaluatedItems with items', async () => {
510
+ const schema = {
511
+ $schema: 'https://json-schema.org/draft/2020-12/schema',
512
+ items: { type: 'number' },
513
+ unevaluatedItems: { type: 'string' },
514
+ };
515
+ schemaProvider.addSchema(testHelper_1.SCHEMA_ID, schema);
516
+ (0, chai_1.expect)(await parseSetup(toContent([5, 6, 7, 8]))).to.be.empty;
517
+ const result = await parseSetup(toContent(['foo', 'bar', 'baz']));
518
+ (0, chai_1.expect)(result).to.have.length(3);
519
+ (0, chai_1.expect)(result[0].message).to.include('Incorrect type. Expected');
520
+ (0, chai_1.expect)(result[0].message).to.include('number');
521
+ });
522
+ it('unevaluatedItems with nested tuple', async () => {
523
+ const schema = {
524
+ $schema: 'https://json-schema.org/draft/2020-12/schema',
525
+ prefixItems: [{ type: 'string' }],
526
+ allOf: [
527
+ {
528
+ prefixItems: [true, { type: 'number' }],
529
+ },
530
+ ],
531
+ unevaluatedItems: false,
532
+ };
533
+ schemaProvider.addSchema(testHelper_1.SCHEMA_ID, schema);
534
+ (0, chai_1.expect)(await parseSetup(toContent(['foo', 42]))).to.be.empty;
535
+ const result = await parseSetup(toContent(['foo', 42, true]));
536
+ (0, chai_1.expect)(result).to.have.length(1);
537
+ (0, chai_1.expect)(result[0].message).to.include('Array has too many items according to schema. Expected 2 or fewer.');
538
+ });
539
+ it('unevaluatedItems with nested items', async () => {
540
+ const schema = {
541
+ $schema: 'https://json-schema.org/draft/2020-12/schema',
542
+ unevaluatedItems: { type: 'boolean' },
543
+ anyOf: [{ items: { type: 'string' } }, true],
544
+ };
545
+ schemaProvider.addSchema(testHelper_1.SCHEMA_ID, schema);
546
+ (0, chai_1.expect)(await parseSetup(toContent([true, false]))).to.be.empty;
547
+ (0, chai_1.expect)(await parseSetup(toContent(['yes', 'no']))).to.be.empty;
548
+ const result = await parseSetup(toContent(['yes', false]));
549
+ (0, chai_1.expect)(result).to.have.length(1);
550
+ (0, chai_1.expect)(result[0].message).to.include('Incorrect type. Expected');
551
+ (0, chai_1.expect)(result[0].message).to.include('boolean');
552
+ });
553
+ it('unevaluatedItems with nested prefixItems and items', async () => {
554
+ const schema = {
555
+ $schema: 'https://json-schema.org/draft/2020-12/schema',
556
+ allOf: [
557
+ {
558
+ prefixItems: [{ type: 'string' }],
559
+ items: true,
560
+ },
561
+ ],
562
+ unevaluatedItems: false,
563
+ };
564
+ schemaProvider.addSchema(testHelper_1.SCHEMA_ID, schema);
565
+ (0, chai_1.expect)(await parseSetup(toContent(['foo']))).to.be.empty;
566
+ (0, chai_1.expect)(await parseSetup(toContent(['foo', 42, true]))).to.be.empty;
567
+ });
568
+ it('unevaluatedItems with nested unevaluatedItems', async () => {
569
+ const schema = {
570
+ $schema: 'https://json-schema.org/draft/2020-12/schema',
571
+ allOf: [
572
+ {
573
+ prefixItems: [{ type: 'string' }],
574
+ },
575
+ { unevaluatedItems: true },
576
+ ],
577
+ unevaluatedItems: false,
578
+ };
579
+ schemaProvider.addSchema(testHelper_1.SCHEMA_ID, schema);
580
+ (0, chai_1.expect)(await parseSetup(toContent(['foo']))).to.be.empty;
581
+ (0, chai_1.expect)(await parseSetup(toContent(['foo', 42, true]))).to.be.empty;
582
+ });
583
+ it('unevaluatedItems with anyOf', async () => {
584
+ const schema = {
585
+ $schema: 'https://json-schema.org/draft/2020-12/schema',
586
+ prefixItems: [{ const: 'foo' }],
587
+ anyOf: [
588
+ {
589
+ prefixItems: [true, { const: 'bar' }],
590
+ },
591
+ {
592
+ prefixItems: [true, true, { const: 'baz' }],
593
+ },
594
+ ],
595
+ unevaluatedItems: false,
596
+ };
597
+ schemaProvider.addSchema(testHelper_1.SCHEMA_ID, schema);
598
+ (0, chai_1.expect)(await parseSetup(toContent(['foo', 'bar']))).to.be.empty;
599
+ const result1 = await parseSetup(toContent(['foo', 'bar', 42]));
600
+ (0, chai_1.expect)(result1).to.have.length(1);
601
+ (0, chai_1.expect)(result1[0].message).to.include('Array has too many items according to schema. Expected 2 or fewer.');
602
+ (0, chai_1.expect)(await parseSetup(toContent(['foo', 'bar', 'baz']))).to.be.empty;
603
+ const result2 = await parseSetup(toContent(['foo', 'bar', 'baz', 42]));
604
+ (0, chai_1.expect)(result2).to.have.length(1);
605
+ (0, chai_1.expect)(result2[0].message).to.include('Array has too many items according to schema. Expected 3 or fewer.');
606
+ });
607
+ it('unevaluatedItems with oneOf', async () => {
608
+ const schema = {
609
+ $schema: 'https://json-schema.org/draft/2020-12/schema',
610
+ prefixItems: [{ const: 'foo' }],
611
+ oneOf: [
612
+ {
613
+ prefixItems: [true, { const: 'bar' }],
614
+ },
615
+ {
616
+ prefixItems: [true, { const: 'baz' }],
617
+ },
618
+ ],
619
+ unevaluatedItems: false,
620
+ };
621
+ schemaProvider.addSchema(testHelper_1.SCHEMA_ID, schema);
622
+ (0, chai_1.expect)(await parseSetup(toContent(['foo', 'bar']))).to.be.empty;
623
+ const result = await parseSetup(toContent(['foo', 'bar', 42]));
624
+ (0, chai_1.expect)(result).to.have.length(1);
625
+ (0, chai_1.expect)(result[0].message).to.include('Array has too many items according to schema. Expected 2 or fewer.');
626
+ });
627
+ it('unevaluatedItems with not', async () => {
628
+ const schema = {
629
+ $schema: 'https://json-schema.org/draft/2020-12/schema',
630
+ prefixItems: [{ const: 'foo' }],
631
+ not: {
632
+ not: {
633
+ prefixItems: [true, { const: 'bar' }],
634
+ },
635
+ },
636
+ unevaluatedItems: false,
637
+ };
638
+ schemaProvider.addSchema(testHelper_1.SCHEMA_ID, schema);
639
+ const result = await parseSetup(toContent(['foo', 'bar']));
640
+ (0, chai_1.expect)(result).to.have.length(1);
641
+ (0, chai_1.expect)(result[0].message).to.include('Array has too many items according to schema. Expected 1 or fewer.');
642
+ });
643
+ it('unevaluatedItems with if/then/else', async () => {
644
+ const schema = {
645
+ $schema: 'https://json-schema.org/draft/2020-12/schema',
646
+ prefixItems: [{ const: 'foo' }],
647
+ if: {
648
+ prefixItems: [true, { const: 'bar' }],
649
+ },
650
+ then: {
651
+ prefixItems: [true, true, { const: 'then' }],
652
+ },
653
+ else: {
654
+ prefixItems: [true, true, true, { const: 'else' }],
655
+ },
656
+ unevaluatedItems: false,
657
+ };
658
+ schemaProvider.addSchema(testHelper_1.SCHEMA_ID, schema);
659
+ (0, chai_1.expect)(await parseSetup(toContent(['foo', 'bar', 'then']))).to.be.empty;
660
+ const result1 = await parseSetup(toContent(['foo', 'bar', 'then', 'else']));
661
+ (0, chai_1.expect)(result1).to.have.length(1);
662
+ (0, chai_1.expect)(result1[0].message).to.include('Array has too many items according to schema. Expected 3 or fewer.');
663
+ (0, chai_1.expect)(await parseSetup(toContent(['foo', 42, 42, 'else']))).to.be.empty;
664
+ const result2 = await parseSetup(toContent(['foo', 42, 42, 'else', 42]));
665
+ (0, chai_1.expect)(result2).to.have.length(1);
666
+ (0, chai_1.expect)(result2[0].message).to.include('Array has too many items according to schema. Expected 4 or fewer.');
667
+ });
668
+ it('unevaluatedItems with boolean schemas', async () => {
669
+ const schema = {
670
+ $schema: 'https://json-schema.org/draft/2020-12/schema',
671
+ allOf: [true],
672
+ unevaluatedItems: false,
673
+ };
674
+ schemaProvider.addSchema(testHelper_1.SCHEMA_ID, schema);
675
+ (0, chai_1.expect)(await parseSetup(toContent([]))).to.be.empty;
676
+ const result = await parseSetup(toContent(['foo']));
677
+ (0, chai_1.expect)(result).to.have.length(1);
678
+ (0, chai_1.expect)(result[0].message).to.include('Array has too many items according to schema. Expected 0 or fewer.');
679
+ });
680
+ it('unevaluatedItems with $ref', async () => {
681
+ const schema = {
682
+ $schema: 'https://json-schema.org/draft/2020-12/schema',
683
+ $ref: '#/$defs/bar',
684
+ prefixItems: [{ type: 'string' }],
685
+ unevaluatedItems: false,
686
+ $defs: {
687
+ bar: {
688
+ prefixItems: [true, { type: 'string' }],
689
+ },
690
+ },
691
+ };
692
+ schemaProvider.addSchema(testHelper_1.SCHEMA_ID, schema);
693
+ (0, chai_1.expect)(await parseSetup(toContent(['foo', 'bar']))).to.be.empty;
694
+ const result = await parseSetup(toContent(['foo', 'bar', 'baz']));
695
+ (0, chai_1.expect)(result).to.have.length(1);
696
+ (0, chai_1.expect)(result[0].message).to.include('Array has too many items according to schema. Expected 2 or fewer.');
697
+ });
698
+ it('unevaluatedItems before $ref', async () => {
699
+ const schema = {
700
+ $schema: 'https://json-schema.org/draft/2020-12/schema',
701
+ unevaluatedItems: false,
702
+ prefixItems: [{ type: 'string' }],
703
+ $ref: '#/$defs/bar',
704
+ $defs: {
705
+ bar: {
706
+ prefixItems: [true, { type: 'string' }],
707
+ },
708
+ },
709
+ };
710
+ schemaProvider.addSchema(testHelper_1.SCHEMA_ID, schema);
711
+ (0, chai_1.expect)(await parseSetup(toContent(['foo', 'bar']))).to.be.empty;
712
+ const result = await parseSetup(toContent(['foo', 'bar', 'baz']));
713
+ (0, chai_1.expect)(result).to.have.length(1);
714
+ (0, chai_1.expect)(result[0].message).to.include('Array has too many items according to schema. Expected 2 or fewer.');
715
+ });
716
+ it('unevaluatedItems with $dynamicRef', async () => {
717
+ const schema = {
718
+ $schema: 'https://json-schema.org/draft/2020-12/schema',
719
+ $id: 'https://example.com/unevaluated-items-with-dynamic-ref/derived',
720
+ $ref: './baseSchema',
721
+ $defs: {
722
+ derived: {
723
+ $dynamicAnchor: 'addons',
724
+ prefixItems: [true, { type: 'string' }],
725
+ },
726
+ baseSchema: {
727
+ $id: './baseSchema',
728
+ $comment: "unevaluatedItems comes first so it's more likely to catch bugs with implementations that are sensitive to keyword ordering",
729
+ unevaluatedItems: false,
730
+ type: 'array',
731
+ prefixItems: [{ type: 'string' }],
732
+ $dynamicRef: '#addons',
733
+ $defs: {
734
+ defaultAddons: {
735
+ $comment: 'Needed to satisfy the bookending requirement',
736
+ $dynamicAnchor: 'addons',
737
+ },
738
+ },
739
+ },
740
+ },
741
+ };
742
+ schemaProvider.addSchema(testHelper_1.SCHEMA_ID, schema);
743
+ (0, chai_1.expect)(await parseSetup(toContent(['foo', 'bar']))).to.be.empty;
744
+ const result = await parseSetup(toContent(['foo', 'bar', 'baz']));
745
+ (0, chai_1.expect)(result).to.have.length(1);
746
+ (0, chai_1.expect)(result[0].message).to.include('Array has too many items according to schema. Expected 2 or fewer.');
747
+ });
748
+ it("unevaluatedItems can't see inside cousins", async () => {
749
+ const schema = {
750
+ $schema: 'https://json-schema.org/draft/2020-12/schema',
751
+ allOf: [
752
+ {
753
+ prefixItems: [true],
754
+ },
755
+ { unevaluatedItems: false },
756
+ ],
757
+ };
758
+ schemaProvider.addSchema(testHelper_1.SCHEMA_ID, schema);
759
+ const result = await parseSetup(toContent([1]));
760
+ (0, chai_1.expect)(result).to.have.length(1);
761
+ (0, chai_1.expect)(result[0].message).to.include('Array has too many items according to schema. Expected 0 or fewer.');
762
+ });
763
+ it('item is evaluated in an uncle schema to unevaluatedItems', async () => {
764
+ const schema = {
765
+ $schema: 'https://json-schema.org/draft/2020-12/schema',
766
+ properties: {
767
+ foo: {
768
+ prefixItems: [{ type: 'string' }],
769
+ unevaluatedItems: false,
770
+ },
771
+ },
772
+ anyOf: [
773
+ {
774
+ properties: {
775
+ foo: {
776
+ prefixItems: [true, { type: 'string' }],
777
+ },
778
+ },
779
+ },
780
+ ],
781
+ };
782
+ schemaProvider.addSchema(testHelper_1.SCHEMA_ID, schema);
783
+ (0, chai_1.expect)(await parseSetup(toContent({ foo: ['test'] }))).to.be.empty;
784
+ const result = await parseSetup(toContent({ foo: ['test', 'test'] }));
785
+ (0, chai_1.expect)(result).to.have.length(1);
786
+ (0, chai_1.expect)(result[0].message).to.include('Array has too many items according to schema. Expected 1 or fewer.');
787
+ });
788
+ it('unevaluatedItems depends on adjacent contains', async () => {
789
+ const schema = {
790
+ $schema: 'https://json-schema.org/draft/2020-12/schema',
791
+ prefixItems: [true],
792
+ contains: { type: 'string' },
793
+ unevaluatedItems: false,
794
+ };
795
+ schemaProvider.addSchema(testHelper_1.SCHEMA_ID, schema);
796
+ (0, chai_1.expect)(await parseSetup(toContent([1, 'foo']))).to.be.empty;
797
+ const result1 = await parseSetup(toContent([1, 2]));
798
+ (0, chai_1.expect)(result1).to.have.length(2);
799
+ (0, chai_1.expect)(result1[0].message).to.include('Array has too few items matching');
800
+ (0, chai_1.expect)(result1[0].message).to.include('Expected 1 or more.');
801
+ (0, chai_1.expect)(result1[1].message).to.include('Array has too many items according to schema. Expected 1 or fewer.');
802
+ const result2 = await parseSetup(toContent([1, 2, 'foo']));
803
+ (0, chai_1.expect)(result2).to.have.length(1);
804
+ (0, chai_1.expect)(result2[0].message).to.include('Array has too many items according to schema. Expected 1 or fewer.');
805
+ });
806
+ it('unevaluatedItems depends on multiple nested contains', async () => {
807
+ const schema = {
808
+ $schema: 'https://json-schema.org/draft/2020-12/schema',
809
+ allOf: [{ contains: { multipleOf: 2 } }, { contains: { multipleOf: 3 } }],
810
+ unevaluatedItems: { multipleOf: 5 },
811
+ };
812
+ schemaProvider.addSchema(testHelper_1.SCHEMA_ID, schema);
813
+ (0, chai_1.expect)(await parseSetup(toContent([2, 3, 4, 5, 6]))).to.be.empty;
814
+ const result = await parseSetup(toContent([2, 3, 4, 7, 8]));
815
+ (0, chai_1.expect)(result).to.have.length(1);
816
+ (0, chai_1.expect)(result[0].message).to.include('Value is not divisible by 5.');
817
+ });
818
+ it('unevaluatedItems and contains interact to control item dependency relationship', async () => {
819
+ const schema = {
820
+ $schema: 'https://json-schema.org/draft/2020-12/schema',
821
+ if: {
822
+ contains: { const: 'a' },
823
+ },
824
+ then: {
825
+ if: {
826
+ contains: { const: 'b' },
827
+ },
828
+ then: {
829
+ if: {
830
+ contains: { const: 'c' },
831
+ },
832
+ },
833
+ },
834
+ unevaluatedItems: false,
835
+ };
836
+ schemaProvider.addSchema(testHelper_1.SCHEMA_ID, schema);
837
+ (0, chai_1.expect)(await parseSetup(toContent([]))).to.be.empty;
838
+ (0, chai_1.expect)(await parseSetup(toContent(['a', 'a']))).to.be.empty;
839
+ (0, chai_1.expect)(await parseSetup(toContent(['a', 'b', 'a', 'b', 'a']))).to.be.empty;
840
+ (0, chai_1.expect)(await parseSetup(toContent(['c', 'a', 'c', 'c', 'b', 'a']))).to.be.empty;
841
+ const result1 = await parseSetup(toContent(['b', 'b']));
842
+ (0, chai_1.expect)(result1).to.have.length(2);
843
+ (0, chai_1.expect)(result1[0].message).to.include('Array has too many items according to schema. Expected 0 or fewer.');
844
+ (0, chai_1.expect)(result1[1].message).to.include('Array has too many items according to schema. Expected 1 or fewer.');
845
+ const result2 = await parseSetup(toContent(['c', 'c']));
846
+ (0, chai_1.expect)(result2).to.have.length(2);
847
+ (0, chai_1.expect)(result2[0].message).to.include('Array has too many items according to schema. Expected 0 or fewer.');
848
+ (0, chai_1.expect)(result2[1].message).to.include('Array has too many items according to schema. Expected 1 or fewer.');
849
+ const result3 = await parseSetup(toContent(['c', 'b', 'c', 'b', 'c']));
850
+ (0, chai_1.expect)(result3).to.have.length(5);
851
+ (0, chai_1.expect)(result3[0].message).to.include('Array has too many items according to schema. Expected 0 or fewer.');
852
+ (0, chai_1.expect)(result3[1].message).to.include('Array has too many items according to schema. Expected 1 or fewer.');
853
+ (0, chai_1.expect)(result3[2].message).to.include('Array has too many items according to schema. Expected 2 or fewer.');
854
+ (0, chai_1.expect)(result3[3].message).to.include('Array has too many items according to schema. Expected 3 or fewer.');
855
+ (0, chai_1.expect)(result3[4].message).to.include('Array has too many items according to schema. Expected 4 or fewer.');
856
+ const result4 = await parseSetup(toContent(['c', 'a', 'c', 'a', 'c']));
857
+ (0, chai_1.expect)(result4).to.have.length(3);
858
+ (0, chai_1.expect)(result4[0].message).to.include('Array has too many items according to schema. Expected 0 or fewer.');
859
+ (0, chai_1.expect)(result4[1].message).to.include('Array has too many items according to schema. Expected 2 or fewer.');
860
+ (0, chai_1.expect)(result4[2].message).to.include('Array has too many items according to schema. Expected 4 or fewer.');
861
+ });
862
+ it('unevaluatedItems with minContains = 0', async () => {
863
+ const schema = {
864
+ $schema: 'https://json-schema.org/draft/2020-12/schema',
865
+ contains: { type: 'string' },
866
+ minContains: 0,
867
+ unevaluatedItems: false,
868
+ };
869
+ schemaProvider.addSchema(testHelper_1.SCHEMA_ID, schema);
870
+ (0, chai_1.expect)(await parseSetup(toContent([]))).to.be.empty;
871
+ const result1 = await parseSetup(toContent([0]));
872
+ (0, chai_1.expect)(result1).to.have.length(1);
873
+ (0, chai_1.expect)(result1[0].message).to.include('Array has too many items according to schema. Expected 0 or fewer.');
874
+ const result2 = await parseSetup(toContent(['foo', 0]));
875
+ (0, chai_1.expect)(result2).to.have.length(1);
876
+ (0, chai_1.expect)(result2[0].message).to.include('Array has too many items according to schema. Expected 1 or fewer.');
877
+ (0, chai_1.expect)(await parseSetup(toContent(['foo', 'bar']))).to.be.empty;
878
+ });
879
+ it('non-array instances are valid', async () => {
880
+ const schema = {
881
+ $schema: 'https://json-schema.org/draft/2020-12/schema',
882
+ unevaluatedItems: false,
883
+ };
884
+ schemaProvider.addSchema(testHelper_1.SCHEMA_ID, schema);
885
+ (0, chai_1.expect)(await parseSetup(toContent(true))).to.be.empty;
886
+ (0, chai_1.expect)(await parseSetup(toContent(123))).to.be.empty;
887
+ (0, chai_1.expect)(await parseSetup(toContent(1.0))).to.be.empty;
888
+ (0, chai_1.expect)(await parseSetup(toContent({}))).to.be.empty;
889
+ (0, chai_1.expect)(await parseSetup(toContent('foo'))).to.be.empty;
890
+ (0, chai_1.expect)(await parseSetup(toContent(null))).to.be.empty;
891
+ });
892
+ it('unevaluatedItems with null instance elements', async () => {
893
+ const schema = {
894
+ $schema: 'https://json-schema.org/draft/2020-12/schema',
895
+ unevaluatedItems: { type: 'null' },
896
+ };
897
+ schemaProvider.addSchema(testHelper_1.SCHEMA_ID, schema);
898
+ (0, chai_1.expect)(await parseSetup(toContent([null]))).to.be.empty;
899
+ });
900
+ it('unevaluatedItems can see annotations from if without then and else', async () => {
901
+ const schema = {
902
+ $schema: 'https://json-schema.org/draft/2020-12/schema',
903
+ if: {
904
+ prefixItems: [{ const: 'a' }],
905
+ },
906
+ unevaluatedItems: false,
907
+ };
908
+ schemaProvider.addSchema(testHelper_1.SCHEMA_ID, schema);
909
+ (0, chai_1.expect)(await parseSetup(toContent(['a']))).to.be.empty;
910
+ const result = await parseSetup(toContent(['b']));
911
+ (0, chai_1.expect)(result).to.have.length(1);
912
+ (0, chai_1.expect)(result[0].message).to.include('Array has too many items according to schema. Expected 0 or fewer.');
913
+ });
914
+ it('Evaluated items collection needs to consider instance location', async () => {
915
+ const schema = {
916
+ $schema: 'https://json-schema.org/draft/2020-12/schema',
917
+ prefixItems: [
918
+ {
919
+ prefixItems: [true, { type: 'string' }],
920
+ },
921
+ ],
922
+ unevaluatedItems: false,
923
+ };
924
+ schemaProvider.addSchema(testHelper_1.SCHEMA_ID, schema);
925
+ const result = await parseSetup(toContent([['foo', 'bar'], 'bar']));
926
+ (0, chai_1.expect)(result).to.have.length(1);
927
+ (0, chai_1.expect)(result[0].message).to.include('Array has too many items according to schema. Expected 1 or fewer.');
928
+ });
929
+ });
930
+ describe('keyword: contains', () => {
931
+ it('contains keyword validation', async () => {
932
+ schemaProvider.addSchema(testHelper_1.SCHEMA_ID, {
933
+ $schema: 'https://json-schema.org/draft/2020-12/schema',
934
+ contains: { minimum: 5 },
935
+ });
936
+ // array with item matching schema (5) is valid
937
+ let content = toContent([3, 4, 5]);
938
+ let result = await parseSetup(content);
939
+ (0, chai_1.expect)(result).to.be.empty;
940
+ // array with item matching schema (6) is valid
941
+ content = toContent([3, 4, 6]);
942
+ result = await parseSetup(content);
943
+ (0, chai_1.expect)(result).to.be.empty;
944
+ // array with two items matching schema (5, 6) is valid
945
+ content = toContent([3, 4, 5, 6]);
946
+ result = await parseSetup(content);
947
+ (0, chai_1.expect)(result).to.be.empty;
948
+ // array without items matching schema is invalid
949
+ content = toContent([2, 3, 4]);
950
+ result = await parseSetup(content);
951
+ (0, chai_1.expect)(result).to.have.length(1);
952
+ (0, chai_1.expect)(result[0].message).to.include('Array has too few items matching');
953
+ // empty array is invalid
954
+ content = toContent([]);
955
+ result = await parseSetup(content);
956
+ (0, chai_1.expect)(result).to.have.length(1);
957
+ (0, chai_1.expect)(result[0].message).to.include('Array has too few items matching');
958
+ // not array is valid
959
+ content = toContent({});
960
+ result = await parseSetup(content);
961
+ (0, chai_1.expect)(result).to.be.empty;
962
+ });
963
+ it('contains keyword with const keyword', async () => {
964
+ schemaProvider.addSchema(testHelper_1.SCHEMA_ID, {
965
+ $schema: 'https://json-schema.org/draft/2020-12/schema',
966
+ contains: { const: 5 },
967
+ });
968
+ // array with item 5 is valid
969
+ let content = toContent([3, 4, 5]);
970
+ let result = await parseSetup(content);
971
+ (0, chai_1.expect)(result).to.be.empty;
972
+ // array with two items 5 is valid
973
+ content = toContent([3, 4, 5, 5]);
974
+ result = await parseSetup(content);
975
+ (0, chai_1.expect)(result).to.be.empty;
976
+ // array without item 5 is invalid
977
+ content = toContent([1, 2, 3, 4]);
978
+ result = await parseSetup(content);
979
+ (0, chai_1.expect)(result).to.have.length(1);
980
+ (0, chai_1.expect)(result[0].message).to.include('Array has too few items matching');
981
+ });
982
+ it('contains keyword with boolean schema true', async () => {
983
+ schemaProvider.addSchema(testHelper_1.SCHEMA_ID, {
984
+ $schema: 'https://json-schema.org/draft/2020-12/schema',
985
+ contains: true,
986
+ });
987
+ // any non-empty array is valid
988
+ let content = toContent(['foo']);
989
+ let result = await parseSetup(content);
990
+ (0, chai_1.expect)(result).to.be.empty;
991
+ // empty array is invalid
992
+ content = toContent([]);
993
+ result = await parseSetup(content);
994
+ (0, chai_1.expect)(result).to.have.length(1);
995
+ (0, chai_1.expect)(result[0].message).to.include('Array has too few items matching');
996
+ });
997
+ it('contains keyword with boolean schema false', async () => {
998
+ schemaProvider.addSchema(testHelper_1.SCHEMA_ID, {
999
+ $schema: 'https://json-schema.org/draft/2020-12/schema',
1000
+ contains: false,
1001
+ });
1002
+ // any non-empty array is invalid
1003
+ let content = toContent(['foo']);
1004
+ let result = await parseSetup(content);
1005
+ (0, chai_1.expect)(result).to.have.length(1);
1006
+ (0, chai_1.expect)(result[0].message).to.include('Array has too few items matching');
1007
+ // empty array is invalid
1008
+ content = toContent([]);
1009
+ result = await parseSetup(content);
1010
+ (0, chai_1.expect)(result).to.have.length(1);
1011
+ (0, chai_1.expect)(result[0].message).to.include('Array has too few items matching');
1012
+ // non-arrays are valid
1013
+ content = toContent('contains does not apply to strings');
1014
+ result = await parseSetup(content);
1015
+ (0, chai_1.expect)(result).to.be.empty;
1016
+ });
1017
+ it('items + contains', async () => {
1018
+ schemaProvider.addSchema(testHelper_1.SCHEMA_ID, {
1019
+ $schema: 'https://json-schema.org/draft/2020-12/schema',
1020
+ items: { multipleOf: 2 },
1021
+ contains: { multipleOf: 3 },
1022
+ });
1023
+ // matches items, does not match contains
1024
+ let content = toContent([2, 4, 8]);
1025
+ let result = await parseSetup(content);
1026
+ (0, chai_1.expect)(result).to.have.length(1);
1027
+ (0, chai_1.expect)(result[0].message).to.include('Array has too few items matching');
1028
+ // does not match items, matches contains
1029
+ content = toContent([3, 6, 9]);
1030
+ result = await parseSetup(content);
1031
+ (0, chai_1.expect)(result).to.have.length(2);
1032
+ (0, chai_1.expect)(result[0].message).to.include('Value is not divisible by 2.');
1033
+ (0, chai_1.expect)(result[1].message).to.include('Value is not divisible by 2.');
1034
+ // matches both items and contains
1035
+ content = toContent([6, 12]);
1036
+ result = await parseSetup(content);
1037
+ (0, chai_1.expect)(result).to.be.empty;
1038
+ // matches neither items nor contains
1039
+ content = toContent([1, 5]);
1040
+ result = await parseSetup(content);
1041
+ (0, chai_1.expect)(result).to.have.length(3);
1042
+ (0, chai_1.expect)(result[0].message).to.include('Value is not divisible by 2.');
1043
+ (0, chai_1.expect)(result[1].message).to.include('Value is not divisible by 2.');
1044
+ (0, chai_1.expect)(result[2].message).to.include('Array has too few items matching');
1045
+ });
1046
+ it('contains with false if subschema', async () => {
1047
+ schemaProvider.addSchema(testHelper_1.SCHEMA_ID, {
1048
+ $schema: 'https://json-schema.org/draft/2020-12/schema',
1049
+ contains: {
1050
+ if: false,
1051
+ else: true,
1052
+ },
1053
+ });
1054
+ // any non-empty array is valid
1055
+ let content = toContent(['foo']);
1056
+ let result = await parseSetup(content);
1057
+ (0, chai_1.expect)(result).to.be.empty;
1058
+ // empty array is invalid
1059
+ content = toContent([]);
1060
+ result = await parseSetup(content);
1061
+ (0, chai_1.expect)(result).to.have.length(1);
1062
+ (0, chai_1.expect)(result[0].message).to.include('Array has too few items matching');
1063
+ });
1064
+ it('contains with null instance elements', async () => {
1065
+ schemaProvider.addSchema(testHelper_1.SCHEMA_ID, {
1066
+ $schema: 'https://json-schema.org/draft/2020-12/schema',
1067
+ contains: {
1068
+ type: 'null',
1069
+ },
1070
+ });
1071
+ // allows null items
1072
+ const content = toContent([null]);
1073
+ const result = await parseSetup(content);
1074
+ (0, chai_1.expect)(result).to.be.empty;
1075
+ });
1076
+ });
1077
+ describe('contains and unevaluatedItems tests', () => {
1078
+ beforeEach(() => {
1079
+ schemaProvider.addSchema(testHelper_1.SCHEMA_ID, {
1080
+ $schema: 'https://json-schema.org/draft/2020-12/schema',
1081
+ type: 'array',
1082
+ contains: { type: 'string' },
1083
+ unevaluatedItems: { type: 'number' },
1084
+ });
1085
+ });
1086
+ it('passes when there is at least one string and all non-matching items are numbers', async () => {
1087
+ const content = `- hello
1088
+ - 1
1089
+ - 2`;
1090
+ const result = await parseSetup(content);
1091
+ (0, chai_1.expect)(result).to.be.empty;
1092
+ });
1093
+ it('passes even if multiple items are strings (strings match contains => evaluated)', async () => {
1094
+ const content = `- hello
1095
+ - oops
1096
+ - 3`;
1097
+ const result = await parseSetup(content);
1098
+ (0, chai_1.expect)(result).to.be.empty;
1099
+ });
1100
+ it('fails if a non-matching item is not a number', async () => {
1101
+ const content = `- hello\n- a: 1`;
1102
+ const result = await parseSetup(content);
1103
+ (0, chai_1.expect)(result).to.have.length(1);
1104
+ (0, chai_1.expect)(result[0].message).to.include('Incorrect type');
1105
+ (0, chai_1.expect)(result[0].message).to.include('number');
1106
+ });
1107
+ it('fails if no item matches contains (minContains defaults to 1)', async () => {
1108
+ const content = `- 1\n- 2`;
1109
+ const result = await parseSetup(content);
1110
+ (0, chai_1.expect)(result).to.have.length(1);
1111
+ (0, chai_1.expect)(result[0].message).to.include('Array has too few items matching');
1112
+ (0, chai_1.expect)(result[0].message).to.include('contains');
1113
+ (0, chai_1.expect)(result[0].message).to.include('Expected 1 or more');
1114
+ });
1115
+ });
1116
+ it('passes ["a","b","ccc"] because "ccc" is evaluated by contains', async () => {
1117
+ schemaProvider.addSchema(testHelper_1.SCHEMA_ID, {
1118
+ $schema: 'https://json-schema.org/draft/2020-12/schema',
1119
+ type: 'array',
1120
+ prefixItems: [{ type: 'string' }, { type: 'string' }],
1121
+ contains: { type: 'string', minLength: 3 },
1122
+ unevaluatedItems: false,
1123
+ });
1124
+ const content = `- a
1125
+ - b
1126
+ - ccc`;
1127
+ const result = await parseSetup(content);
1128
+ (0, chai_1.expect)(result).to.be.empty;
1129
+ });
1130
+ it('fails ["a","b","ccc"] using boolean-algebra workaround', async () => {
1131
+ schemaProvider.addSchema(testHelper_1.SCHEMA_ID, {
1132
+ $schema: 'https://json-schema.org/draft/2020-12/schema',
1133
+ type: 'array',
1134
+ prefixItems: [{ type: 'string' }, { type: 'string' }],
1135
+ not: {
1136
+ items: {
1137
+ not: { type: 'string', minLength: 3 },
1138
+ },
1139
+ },
1140
+ unevaluatedItems: false,
1141
+ });
1142
+ const content = `- a
1143
+ - b
1144
+ - ccc`;
1145
+ const result = await parseSetup(content);
1146
+ (0, chai_1.expect)(result).to.have.length(1);
1147
+ (0, chai_1.expect)(result[0].message).to.include('Array has too many items according to schema. Expected 2 or fewer.');
1148
+ });
1149
+ describe('Mixed dialect subschema instance validation in Compound Schema Document', () => {
1150
+ it('draft-2020 root with draft-04 subschema', async () => {
1151
+ const schema = {
1152
+ $schema: 'https://json-schema.org/draft/2020-12/schema',
1153
+ type: 'object',
1154
+ properties: {
1155
+ age: {
1156
+ allOf: [
1157
+ {
1158
+ $schema: 'http://json-schema.org/draft-04/schema#',
1159
+ type: 'number',
1160
+ minimum: 0,
1161
+ exclusiveMinimum: true,
1162
+ },
1163
+ ],
1164
+ },
1165
+ },
1166
+ };
1167
+ schemaProvider.addSchema(testHelper_1.SCHEMA_ID, schema);
1168
+ const failResult = await parseSetup('age: 0');
1169
+ (0, chai_1.expect)(failResult).to.have.length(1);
1170
+ (0, chai_1.expect)(failResult[0].message).to.include('exclusive minimum of 0');
1171
+ const passResult = await parseSetup('age: 1');
1172
+ (0, chai_1.expect)(passResult).to.be.empty;
1173
+ });
1174
+ it('draft-2020 root with draft-07 subschema', async () => {
1175
+ const schema = {
1176
+ $schema: 'https://json-schema.org/draft/2020-12/schema',
1177
+ type: 'object',
1178
+ properties: {
1179
+ score: {
1180
+ anyOf: [
1181
+ {
1182
+ $schema: 'http://json-schema.org/draft-07/schema#',
1183
+ type: 'number',
1184
+ exclusiveMinimum: 0,
1185
+ },
1186
+ ],
1187
+ },
1188
+ },
1189
+ };
1190
+ schemaProvider.addSchema(testHelper_1.SCHEMA_ID, schema);
1191
+ const failResult = await parseSetup('score: 0');
1192
+ (0, chai_1.expect)(failResult).to.have.length(1);
1193
+ (0, chai_1.expect)(failResult[0].message).to.include('exclusive minimum of 0');
1194
+ const passResult = await parseSetup('score: 1');
1195
+ (0, chai_1.expect)(passResult).to.be.empty;
1196
+ });
1197
+ it('draft-07 root with draft-2019 subschema', async () => {
1198
+ const schema = {
1199
+ $schema: 'http://json-schema.org/draft-07/schema#',
1200
+ type: 'object',
1201
+ required: ['productId'],
1202
+ properties: {
1203
+ productId: { type: 'string' },
1204
+ metadata: {
1205
+ $schema: 'https://json-schema.org/draft/2019-09/schema',
1206
+ type: 'object',
1207
+ properties: {
1208
+ tags: {
1209
+ type: 'array',
1210
+ contains: { type: 'string' },
1211
+ maxContains: 5,
1212
+ },
1213
+ },
1214
+ },
1215
+ },
1216
+ };
1217
+ schemaProvider.addSchema(testHelper_1.SCHEMA_ID, schema);
1218
+ const failContent = `productId: "PROD-123"
1219
+ metadata:
1220
+ tags:
1221
+ - "electronics"
1222
+ - "sale"
1223
+ - "featured"
1224
+ - "new"
1225
+ - "popular"
1226
+ - "trending"`;
1227
+ const failResult = await parseSetup(failContent);
1228
+ (0, chai_1.expect)(failResult).to.have.length(1);
1229
+ (0, chai_1.expect)(failResult[0].message).to.include('too many items matching "contains"');
1230
+ (0, chai_1.expect)(failResult[0].message).to.include('5 or fewer');
1231
+ const passContent = `productId: "PROD-123"
1232
+ metadata:
1233
+ tags:
1234
+ - "electronics"
1235
+ - "sale"
1236
+ - "featured"
1237
+ - "new"
1238
+ - "popular"`;
1239
+ const passResult = await parseSetup(passContent);
1240
+ (0, chai_1.expect)(passResult).to.be.empty;
1241
+ });
1242
+ });
1243
+ describe('$dynamicAnchor and $dynamicRef resolution', () => {
1244
+ const treeSchema = {
1245
+ $schema: 'https://json-schema.org/draft/2020-12/schema',
1246
+ $id: 'http://localhost:1234/draft2020-12/tree.json',
1247
+ $dynamicAnchor: 'node',
1248
+ type: 'object',
1249
+ properties: {
1250
+ data: true,
1251
+ children: {
1252
+ type: 'array',
1253
+ items: { $dynamicRef: '#node' },
1254
+ },
1255
+ },
1256
+ };
1257
+ const extendibleDynamicRefSchema = {
1258
+ $schema: 'https://json-schema.org/draft/2020-12/schema',
1259
+ $id: 'http://localhost:1234/draft2020-12/extendible-dynamic-ref.json',
1260
+ type: 'object',
1261
+ additionalProperties: false,
1262
+ properties: {
1263
+ elements: {
1264
+ type: 'array',
1265
+ items: { $dynamicRef: '#elements' },
1266
+ },
1267
+ },
1268
+ $defs: {
1269
+ elements: {
1270
+ $comment: 'base dynamic anchor',
1271
+ $dynamicAnchor: 'elements',
1272
+ },
1273
+ },
1274
+ };
1275
+ const detachedDynamicRefSchema = {
1276
+ $schema: 'https://json-schema.org/draft/2020-12/schema',
1277
+ $id: 'http://localhost:1234/draft2020-12/detached-dynamicref.json',
1278
+ $defs: {
1279
+ foo: { $dynamicRef: '#number' },
1280
+ number: { $dynamicAnchor: 'number', type: 'number' },
1281
+ },
1282
+ };
1283
+ describe('basic $dynamicRef behavior', () => {
1284
+ it('A $dynamicRef to a $dynamicAnchor in the same schema resource behaves like a normal $ref to an $anchor', async () => {
1285
+ const schema = {
1286
+ $schema: 'https://json-schema.org/draft/2020-12/schema',
1287
+ $id: 'https://test.json-schema.org/dynamicRef-dynamicAnchor-same-schema/root',
1288
+ type: 'array',
1289
+ items: { $dynamicRef: '#items' },
1290
+ $defs: {
1291
+ foo: {
1292
+ $dynamicAnchor: 'items',
1293
+ type: 'string',
1294
+ },
1295
+ },
1296
+ };
1297
+ schemaProvider.addSchema(testHelper_1.SCHEMA_ID, schema);
1298
+ (0, chai_1.expect)(await parseSetup("['foo', 'bar']")).to.be.empty;
1299
+ const result = await parseSetup("['foo', 42]");
1300
+ (0, chai_1.expect)(result).to.have.length(1);
1301
+ (0, chai_1.expect)(result[0].message).to.include('Incorrect type.');
1302
+ (0, chai_1.expect)(result[0].message).to.include('string');
1303
+ });
1304
+ it('A $dynamicRef to an $anchor in the same schema resource behaves like a normal $ref to an $anchor', async () => {
1305
+ const schema = {
1306
+ $schema: 'https://json-schema.org/draft/2020-12/schema',
1307
+ $id: 'https://test.json-schema.org/dynamicRef-anchor-same-schema/root',
1308
+ type: 'array',
1309
+ items: { $dynamicRef: '#items' },
1310
+ $defs: {
1311
+ foo: {
1312
+ $anchor: 'items',
1313
+ type: 'string',
1314
+ },
1315
+ },
1316
+ };
1317
+ schemaProvider.addSchema(testHelper_1.SCHEMA_ID, schema);
1318
+ (0, chai_1.expect)(await parseSetup("['foo', 'bar']")).to.be.empty;
1319
+ const result = await parseSetup("['foo', 42]");
1320
+ (0, chai_1.expect)(result).to.have.length(1);
1321
+ (0, chai_1.expect)(result[0].message).to.include('Incorrect type.');
1322
+ (0, chai_1.expect)(result[0].message).to.include('string');
1323
+ });
1324
+ it('A $ref to a $dynamicAnchor in the same schema resource behaves like a normal $ref to an $anchor', async () => {
1325
+ const schema = {
1326
+ $schema: 'https://json-schema.org/draft/2020-12/schema',
1327
+ $id: 'https://test.json-schema.org/ref-dynamicAnchor-same-schema/root',
1328
+ type: 'array',
1329
+ items: { $ref: '#items' },
1330
+ $defs: {
1331
+ foo: {
1332
+ $dynamicAnchor: 'items',
1333
+ type: 'string',
1334
+ },
1335
+ },
1336
+ };
1337
+ schemaProvider.addSchema(testHelper_1.SCHEMA_ID, schema);
1338
+ (0, chai_1.expect)(await parseSetup("['foo', 'bar']")).to.be.empty;
1339
+ const result = await parseSetup("['foo', 42]");
1340
+ (0, chai_1.expect)(result).to.have.length(1);
1341
+ (0, chai_1.expect)(result[0].message).to.include('Incorrect type.');
1342
+ (0, chai_1.expect)(result[0].message).to.include('string');
1343
+ });
1344
+ it('A $dynamicRef resolves to the first $dynamicAnchor still in scope that is encountered when the schema is evaluated', async () => {
1345
+ const schema = {
1346
+ $schema: 'https://json-schema.org/draft/2020-12/schema',
1347
+ $id: 'https://test.json-schema.org/typical-dynamic-resolution/root',
1348
+ $ref: 'list',
1349
+ $defs: {
1350
+ foo: {
1351
+ $dynamicAnchor: 'items',
1352
+ type: 'string',
1353
+ },
1354
+ list: {
1355
+ $id: 'list',
1356
+ type: 'array',
1357
+ items: { $dynamicRef: '#items' },
1358
+ $defs: {
1359
+ items: {
1360
+ $comment: 'This is only needed to satisfy the bookending requirement',
1361
+ $dynamicAnchor: 'items',
1362
+ },
1363
+ },
1364
+ },
1365
+ },
1366
+ };
1367
+ schemaProvider.addSchema(testHelper_1.SCHEMA_ID, schema);
1368
+ (0, chai_1.expect)(await parseSetup("['foo', 'bar']")).to.be.empty;
1369
+ const result = await parseSetup("['foo', 42]");
1370
+ (0, chai_1.expect)(result).to.have.length(1);
1371
+ (0, chai_1.expect)(result[0].message).to.include('Incorrect type.');
1372
+ (0, chai_1.expect)(result[0].message).to.include('string');
1373
+ });
1374
+ it('A $dynamicRef without anchor in fragment behaves identical to $ref', async () => {
1375
+ const schema = {
1376
+ $schema: 'https://json-schema.org/draft/2020-12/schema',
1377
+ $id: 'https://test.json-schema.org/dynamicRef-without-anchor/root',
1378
+ $ref: 'list',
1379
+ $defs: {
1380
+ foo: {
1381
+ $dynamicAnchor: 'items',
1382
+ type: 'string',
1383
+ },
1384
+ list: {
1385
+ $id: 'list',
1386
+ type: 'array',
1387
+ items: { $dynamicRef: '#/$defs/items' },
1388
+ $defs: {
1389
+ items: {
1390
+ $comment: 'This is only needed to satisfy the bookending requirement',
1391
+ $dynamicAnchor: 'items',
1392
+ type: 'number',
1393
+ },
1394
+ },
1395
+ },
1396
+ },
1397
+ };
1398
+ schemaProvider.addSchema(testHelper_1.SCHEMA_ID, schema);
1399
+ const invalid = await parseSetup("['foo', 'bar']");
1400
+ (0, chai_1.expect)(invalid).to.have.length(1);
1401
+ (0, chai_1.expect)(invalid[0].message).to.include('Incorrect type.');
1402
+ (0, chai_1.expect)(invalid[0].message).to.include('number');
1403
+ (0, chai_1.expect)(await parseSetup('[24, 42]')).to.be.empty;
1404
+ });
1405
+ it("A $dynamicRef with intermediate scopes that don't include a matching $dynamicAnchor does not affect dynamic scope resolution", async () => {
1406
+ const schema = {
1407
+ $schema: 'https://json-schema.org/draft/2020-12/schema',
1408
+ $id: 'https://test.json-schema.org/dynamic-resolution-with-intermediate-scopes/root',
1409
+ $ref: 'intermediate-scope',
1410
+ $defs: {
1411
+ foo: {
1412
+ $dynamicAnchor: 'items',
1413
+ type: 'string',
1414
+ },
1415
+ 'intermediate-scope': {
1416
+ $id: 'intermediate-scope',
1417
+ $ref: 'list',
1418
+ },
1419
+ list: {
1420
+ $id: 'list',
1421
+ type: 'array',
1422
+ items: { $dynamicRef: '#items' },
1423
+ $defs: {
1424
+ items: {
1425
+ $comment: 'This is only needed to satisfy the bookending requirement',
1426
+ $dynamicAnchor: 'items',
1427
+ },
1428
+ },
1429
+ },
1430
+ },
1431
+ };
1432
+ schemaProvider.addSchema(testHelper_1.SCHEMA_ID, schema);
1433
+ (0, chai_1.expect)(await parseSetup("['foo', 'bar']")).to.be.empty;
1434
+ const result = await parseSetup("['foo', 42]");
1435
+ (0, chai_1.expect)(result).to.have.length(1);
1436
+ (0, chai_1.expect)(result[0].message).to.include('Incorrect type.');
1437
+ (0, chai_1.expect)(result[0].message).to.include('string');
1438
+ });
1439
+ it('An $anchor with the same name as a $dynamicAnchor is not used for dynamic scope resolution', async () => {
1440
+ const schema = {
1441
+ $schema: 'https://json-schema.org/draft/2020-12/schema',
1442
+ $id: 'https://test.json-schema.org/dynamic-resolution-ignores-anchors/root',
1443
+ $ref: 'list',
1444
+ $defs: {
1445
+ foo: {
1446
+ $anchor: 'items',
1447
+ type: 'string',
1448
+ },
1449
+ list: {
1450
+ $id: 'list',
1451
+ type: 'array',
1452
+ items: { $dynamicRef: '#items' },
1453
+ $defs: {
1454
+ items: {
1455
+ $comment: 'This is only needed to satisfy the bookending requirement',
1456
+ $dynamicAnchor: 'items',
1457
+ },
1458
+ },
1459
+ },
1460
+ },
1461
+ };
1462
+ schemaProvider.addSchema(testHelper_1.SCHEMA_ID, schema);
1463
+ (0, chai_1.expect)(await parseSetup("['foo', 42]")).to.be.empty;
1464
+ });
1465
+ it('A $dynamicRef without a matching $dynamicAnchor in the same schema resource behaves like a normal $ref to $anchor', async () => {
1466
+ const schema = {
1467
+ $schema: 'https://json-schema.org/draft/2020-12/schema',
1468
+ $id: 'https://test.json-schema.org/dynamic-resolution-without-bookend/root',
1469
+ $ref: 'list',
1470
+ $defs: {
1471
+ foo: {
1472
+ $dynamicAnchor: 'items',
1473
+ type: 'string',
1474
+ },
1475
+ list: {
1476
+ $id: 'list',
1477
+ type: 'array',
1478
+ items: { $dynamicRef: '#items' },
1479
+ $defs: {
1480
+ items: {
1481
+ $comment: 'This is only needed to give the reference somewhere to resolve to when it behaves like $ref',
1482
+ $anchor: 'items',
1483
+ },
1484
+ },
1485
+ },
1486
+ },
1487
+ };
1488
+ schemaProvider.addSchema(testHelper_1.SCHEMA_ID, schema);
1489
+ (0, chai_1.expect)(await parseSetup("['foo', 42]")).to.be.empty;
1490
+ });
1491
+ it('A $dynamicRef with a non-matching $dynamicAnchor in the same schema resource behaves like a normal $ref to $anchor', async () => {
1492
+ const schema = {
1493
+ $schema: 'https://json-schema.org/draft/2020-12/schema',
1494
+ $id: 'https://test.json-schema.org/unmatched-dynamic-anchor/root',
1495
+ $ref: 'list',
1496
+ $defs: {
1497
+ foo: {
1498
+ $dynamicAnchor: 'items',
1499
+ type: 'string',
1500
+ },
1501
+ list: {
1502
+ $id: 'list',
1503
+ type: 'array',
1504
+ items: { $dynamicRef: '#items' },
1505
+ $defs: {
1506
+ items: {
1507
+ $comment: 'This is only needed to give the reference somewhere to resolve to when it behaves like $ref',
1508
+ $anchor: 'items',
1509
+ $dynamicAnchor: 'foo',
1510
+ },
1511
+ },
1512
+ },
1513
+ },
1514
+ };
1515
+ schemaProvider.addSchemaWithUri(testHelper_1.SCHEMA_ID, schema.$id, schema);
1516
+ (0, chai_1.expect)(await parseSetup("['foo', 42]")).to.be.empty;
1517
+ });
1518
+ });
1519
+ describe('relative dynamic references', () => {
1520
+ it('A $dynamicRef that initially resolves to a schema with a matching $dynamicAnchor resolves to the first $dynamicAnchor in the dynamic scope', async () => {
1521
+ const schema = {
1522
+ $schema: 'https://json-schema.org/draft/2020-12/schema',
1523
+ $id: 'https://test.json-schema.org/relative-dynamic-reference/root',
1524
+ $dynamicAnchor: 'meta',
1525
+ type: 'object',
1526
+ properties: {
1527
+ foo: { const: 'pass' },
1528
+ },
1529
+ $ref: 'extended',
1530
+ $defs: {
1531
+ extended: {
1532
+ $id: 'extended',
1533
+ $dynamicAnchor: 'meta',
1534
+ type: 'object',
1535
+ properties: {
1536
+ bar: { $ref: 'bar' },
1537
+ },
1538
+ },
1539
+ bar: {
1540
+ $id: 'bar',
1541
+ type: 'object',
1542
+ properties: {
1543
+ baz: { $dynamicRef: 'extended#meta' },
1544
+ },
1545
+ },
1546
+ },
1547
+ };
1548
+ schemaProvider.addSchema(testHelper_1.SCHEMA_ID, schema);
1549
+ (0, chai_1.expect)(await parseSetup(`foo: "pass"
1550
+ bar:
1551
+ baz:
1552
+ foo: pass`)).to.be.empty;
1553
+ const result = await parseSetup(`foo: "pass"
1554
+ bar:
1555
+ baz:
1556
+ foo: fail`);
1557
+ (0, chai_1.expect)(result).to.have.length(1);
1558
+ (0, chai_1.expect)(result[0].message).to.include('Value must be');
1559
+ (0, chai_1.expect)(result[0].message).to.include('pass');
1560
+ });
1561
+ it('A $dynamicRef that initially resolves to a schema without a matching $dynamicAnchor behaves like a normal $ref to $anchor', async () => {
1562
+ const schema = {
1563
+ $schema: 'https://json-schema.org/draft/2020-12/schema',
1564
+ $id: 'https://test.json-schema.org/relative-dynamic-reference-without-bookend/root',
1565
+ $dynamicAnchor: 'meta',
1566
+ type: 'object',
1567
+ properties: {
1568
+ foo: { const: 'pass' },
1569
+ },
1570
+ $ref: 'extended',
1571
+ $defs: {
1572
+ extended: {
1573
+ $id: 'extended',
1574
+ $anchor: 'meta',
1575
+ type: 'object',
1576
+ properties: {
1577
+ bar: { $ref: 'bar' },
1578
+ },
1579
+ },
1580
+ bar: {
1581
+ $id: 'bar',
1582
+ type: 'object',
1583
+ properties: {
1584
+ baz: { $dynamicRef: 'extended#meta' },
1585
+ },
1586
+ },
1587
+ },
1588
+ };
1589
+ schemaProvider.addSchema(testHelper_1.SCHEMA_ID, schema);
1590
+ (0, chai_1.expect)(await parseSetup(`foo: "pass"
1591
+ bar:
1592
+ baz:
1593
+ foo: fail`)).to.be.empty;
1594
+ });
1595
+ });
1596
+ it('multiple dynamic paths to the $dynamicRef keyword', async () => {
1597
+ const schema = {
1598
+ $schema: 'https://json-schema.org/draft/2020-12/schema',
1599
+ $id: 'https://test.json-schema.org/dynamic-ref-with-multiple-paths/main',
1600
+ if: {
1601
+ properties: {
1602
+ kindOfList: { const: 'numbers' },
1603
+ },
1604
+ required: ['kindOfList'],
1605
+ },
1606
+ then: { $ref: 'numberList' },
1607
+ else: { $ref: 'stringList' },
1608
+ $defs: {
1609
+ genericList: {
1610
+ $id: 'genericList',
1611
+ properties: {
1612
+ list: {
1613
+ items: { $dynamicRef: '#itemType' },
1614
+ },
1615
+ },
1616
+ $defs: {
1617
+ defaultItemType: {
1618
+ $comment: 'Only needed to satisfy bookending requirement',
1619
+ $dynamicAnchor: 'itemType',
1620
+ },
1621
+ },
1622
+ },
1623
+ numberList: {
1624
+ $id: 'numberList',
1625
+ $defs: {
1626
+ itemType: {
1627
+ $dynamicAnchor: 'itemType',
1628
+ type: 'number',
1629
+ },
1630
+ },
1631
+ $ref: 'genericList',
1632
+ },
1633
+ stringList: {
1634
+ $id: 'stringList',
1635
+ $defs: {
1636
+ itemType: {
1637
+ $dynamicAnchor: 'itemType',
1638
+ type: 'string',
1639
+ },
1640
+ },
1641
+ $ref: 'genericList',
1642
+ },
1643
+ },
1644
+ };
1645
+ schemaProvider.addSchema(testHelper_1.SCHEMA_ID, schema);
1646
+ (0, chai_1.expect)(await parseSetup(`kindOfList: "numbers"\nlist: [1.1]`)).to.be.empty;
1647
+ const numbersInvalid = await parseSetup(`kindOfList: "numbers"\nlist: ["foo"]`);
1648
+ (0, chai_1.expect)(numbersInvalid).to.have.length(1);
1649
+ (0, chai_1.expect)(numbersInvalid[0].message).to.include('Incorrect type.');
1650
+ (0, chai_1.expect)(numbersInvalid[0].message).to.include('number');
1651
+ const stringsInvalid = await parseSetup(`kindOfList: "strings"\nlist: [1.1]`);
1652
+ (0, chai_1.expect)(stringsInvalid).to.have.length(1);
1653
+ (0, chai_1.expect)(stringsInvalid[0].message).to.include('Incorrect type.');
1654
+ (0, chai_1.expect)(stringsInvalid[0].message).to.include('string');
1655
+ (0, chai_1.expect)(await parseSetup(`kindOfList: "strings"\nlist: ["foo"]`)).to.be.empty;
1656
+ });
1657
+ it('after leaving a dynamic scope, it is not used by a $dynamicRef', async () => {
1658
+ const schema = {
1659
+ $schema: 'https://json-schema.org/draft/2020-12/schema',
1660
+ $id: 'https://test.json-schema.org/dynamic-ref-leaving-dynamic-scope/main',
1661
+ if: {
1662
+ $id: 'first_scope',
1663
+ $defs: {
1664
+ thingy: {
1665
+ $comment: 'this is first_scope#thingy',
1666
+ $dynamicAnchor: 'thingy',
1667
+ type: 'number',
1668
+ },
1669
+ },
1670
+ },
1671
+ then: {
1672
+ $id: 'second_scope',
1673
+ $ref: 'start',
1674
+ $defs: {
1675
+ thingy: {
1676
+ $comment: 'this is second_scope#thingy, the final destination of the $dynamicRef',
1677
+ $dynamicAnchor: 'thingy',
1678
+ type: 'null',
1679
+ },
1680
+ },
1681
+ },
1682
+ $defs: {
1683
+ start: {
1684
+ $comment: 'this is the landing spot from $ref',
1685
+ $id: 'start',
1686
+ $dynamicRef: 'inner_scope#thingy',
1687
+ },
1688
+ thingy: {
1689
+ $comment: 'this is the first stop for the $dynamicRef',
1690
+ $id: 'inner_scope',
1691
+ $dynamicAnchor: 'thingy',
1692
+ type: 'string',
1693
+ },
1694
+ },
1695
+ };
1696
+ schemaProvider.addSchema(testHelper_1.SCHEMA_ID, schema);
1697
+ const stringInvalid = await parseSetup('a string');
1698
+ (0, chai_1.expect)(stringInvalid).to.have.length(1);
1699
+ (0, chai_1.expect)(stringInvalid[0].message).to.include('null');
1700
+ const numberInvalid = await parseSetup('42');
1701
+ (0, chai_1.expect)(numberInvalid).to.have.length(1);
1702
+ (0, chai_1.expect)(stringInvalid[0].message).to.include('null');
1703
+ (0, chai_1.expect)(await parseSetup(null)).to.be.empty;
1704
+ });
1705
+ describe('strict-tree schema, guards against misspelled properties', () => {
1706
+ const strictTreeSchema = {
1707
+ $schema: 'https://json-schema.org/draft/2020-12/schema',
1708
+ $id: 'http://localhost:1234/draft2020-12/strict-tree.json',
1709
+ $dynamicAnchor: 'node',
1710
+ $ref: 'tree.json',
1711
+ unevaluatedProperties: false,
1712
+ };
1713
+ beforeEach(() => {
1714
+ schemaProvider.addSchemaWithUri(testHelper_1.SCHEMA_ID, treeSchema.$id, treeSchema);
1715
+ schemaProvider.addSchemaWithUri(testHelper_1.SCHEMA_ID, strictTreeSchema.$id, strictTreeSchema);
1716
+ });
1717
+ it('instance with misspelled field', async () => {
1718
+ const result = await parseSetup(`# yaml-language-server: $schema=http://localhost:1234/draft2020-12/strict-tree.json
1719
+ children:
1720
+ - daat: 1`);
1721
+ (0, chai_1.expect)(result).to.have.length(1);
1722
+ (0, chai_1.expect)(result[0].message).to.include('Property daat is not allowed.');
1723
+ });
1724
+ it('instance with correct field', async () => {
1725
+ (0, chai_1.expect)(await parseSetup(`# yaml-language-server: $schema=http://localhost:1234/draft2020-12/strict-tree.json
1726
+ children:
1727
+ - data: 1`)).to.be.empty;
1728
+ });
1729
+ });
1730
+ describe('tests for implementation dynamic anchor and reference link', () => {
1731
+ const strictExtendibleSchema = {
1732
+ $schema: 'https://json-schema.org/draft/2020-12/schema',
1733
+ $id: 'http://localhost:1234/draft2020-12/strict-extendible.json',
1734
+ $ref: 'extendible-dynamic-ref.json',
1735
+ $defs: {
1736
+ elements: {
1737
+ $dynamicAnchor: 'elements',
1738
+ properties: {
1739
+ a: true,
1740
+ },
1741
+ required: ['a'],
1742
+ additionalProperties: false,
1743
+ },
1744
+ },
1745
+ };
1746
+ beforeEach(() => {
1747
+ schemaProvider.addSchemaWithUri(testHelper_1.SCHEMA_ID, extendibleDynamicRefSchema.$id, extendibleDynamicRefSchema);
1748
+ schemaProvider.addSchemaWithUri(testHelper_1.SCHEMA_ID, strictExtendibleSchema.$id, strictExtendibleSchema);
1749
+ });
1750
+ it('incorrect parent schema', async () => {
1751
+ const result = await parseSetup(`# yaml-language-server: $schema=http://localhost:1234/draft2020-12/strict-extendible.json
1752
+ a: true`);
1753
+ (0, chai_1.expect)(result).to.have.length(1);
1754
+ (0, chai_1.expect)(result[0].message).to.include('Property a is not allowed.');
1755
+ });
1756
+ it('incorrect extended schema', async () => {
1757
+ const result = await parseSetup(`# yaml-language-server: $schema=http://localhost:1234/draft2020-12/strict-extendible.json
1758
+ elements:
1759
+ - b: 1`);
1760
+ (0, chai_1.expect)(result).to.have.length(2);
1761
+ (0, chai_1.expect)(result[0].message).to.include('Missing property');
1762
+ (0, chai_1.expect)(result[1].message).to.include('Property b is not allowed.');
1763
+ });
1764
+ it('correct extended schema', async () => {
1765
+ (0, chai_1.expect)(await parseSetup(`# yaml-language-server: $schema=http://localhost:1234/draft2020-12/strict-extendible.json
1766
+ elements:
1767
+ - a: 1`)).to.be.empty;
1768
+ });
1769
+ });
1770
+ describe('$ref and $dynamicAnchor are independent of order - $defs first', () => {
1771
+ const schema = {
1772
+ $schema: 'https://json-schema.org/draft/2020-12/schema',
1773
+ $id: 'http://localhost:1234/draft2020-12/strict-extendible-allof-defs-first.json',
1774
+ allOf: [
1775
+ {
1776
+ $ref: 'extendible-dynamic-ref.json',
1777
+ },
1778
+ {
1779
+ $defs: {
1780
+ elements: {
1781
+ $dynamicAnchor: 'elements',
1782
+ properties: {
1783
+ a: true,
1784
+ },
1785
+ required: ['a'],
1786
+ additionalProperties: false,
1787
+ },
1788
+ },
1789
+ },
1790
+ ],
1791
+ };
1792
+ beforeEach(() => {
1793
+ schemaProvider.addSchemaWithUri(testHelper_1.SCHEMA_ID, extendibleDynamicRefSchema.$id, extendibleDynamicRefSchema);
1794
+ schemaProvider.addSchemaWithUri(testHelper_1.SCHEMA_ID, schema.$id, schema);
1795
+ });
1796
+ it('incorrect parent schema', async () => {
1797
+ const result = await parseSetup(`# yaml-language-server: $schema=http://localhost:1234/draft2020-12/strict-extendible-allof-defs-first.json
1798
+ a: true`);
1799
+ (0, chai_1.expect)(result).to.have.length(1);
1800
+ (0, chai_1.expect)(result[0].message).to.include('Property a is not allowed.');
1801
+ });
1802
+ it('incorrect extended schema', async () => {
1803
+ const result = await parseSetup(`# yaml-language-server: $schema=http://localhost:1234/draft2020-12/strict-extendible-allof-defs-first.json
1804
+ elements:
1805
+ - b: 1`);
1806
+ (0, chai_1.expect)(result).to.have.length(2);
1807
+ (0, chai_1.expect)(result.some((d) => d.message.includes('Missing property') && d.message.includes('a'))).to.eq(true);
1808
+ (0, chai_1.expect)(result.some((d) => d.message.includes('Property b is not allowed.'))).to.eq(true);
1809
+ });
1810
+ it('correct extended schema', async () => {
1811
+ (0, chai_1.expect)(await parseSetup(`# yaml-language-server: $schema=http://localhost:1234/draft2020-12/strict-extendible-allof-defs-first.json
1812
+ elements:
1813
+ - a: 1`)).to.be.empty;
1814
+ });
1815
+ });
1816
+ describe('$ref and $dynamicAnchor are independent of order - $ref first', () => {
1817
+ const schema = {
1818
+ $schema: 'https://json-schema.org/draft/2020-12/schema',
1819
+ $id: 'http://localhost:1234/draft2020-12/strict-extendible-allof-ref-first.json',
1820
+ allOf: [
1821
+ {
1822
+ $defs: {
1823
+ elements: {
1824
+ $dynamicAnchor: 'elements',
1825
+ properties: {
1826
+ a: true,
1827
+ },
1828
+ required: ['a'],
1829
+ additionalProperties: false,
1830
+ },
1831
+ },
1832
+ },
1833
+ {
1834
+ $ref: 'extendible-dynamic-ref.json',
1835
+ },
1836
+ ],
1837
+ };
1838
+ beforeEach(() => {
1839
+ schemaProvider.addSchemaWithUri(testHelper_1.SCHEMA_ID, extendibleDynamicRefSchema.$id, extendibleDynamicRefSchema);
1840
+ schemaProvider.addSchemaWithUri(testHelper_1.SCHEMA_ID, schema.$id, schema);
1841
+ });
1842
+ it('incorrect parent schema', async () => {
1843
+ const result = await parseSetup(`# yaml-language-server: $schema=http://localhost:1234/draft2020-12/strict-extendible-allof-ref-first.json
1844
+ a: true`);
1845
+ (0, chai_1.expect)(result).to.have.length(1);
1846
+ (0, chai_1.expect)(result[0].message).to.include('Property a is not allowed.');
1847
+ });
1848
+ it('incorrect extended schema', async () => {
1849
+ const result = await parseSetup(`# yaml-language-server: $schema=http://localhost:1234/draft2020-12/strict-extendible-allof-ref-first.json
1850
+ elements:
1851
+ - b: 1`);
1852
+ (0, chai_1.expect)(result).to.have.length(2);
1853
+ (0, chai_1.expect)(result.some((d) => d.message.includes('Missing property') && d.message.includes('a'))).to.eq(true);
1854
+ (0, chai_1.expect)(result.some((d) => d.message.includes('Property b is not allowed.'))).to.eq(true);
1855
+ });
1856
+ it('correct extended schema', async () => {
1857
+ (0, chai_1.expect)(await parseSetup(`# yaml-language-server: $schema=http://localhost:1234/draft2020-12/strict-extendible-allof-ref-first.json
1858
+ elements:
1859
+ - a: 1`)).to.be.empty;
1860
+ });
1861
+ });
1862
+ it('$ref to $dynamicRef finds detached $dynamicAnchor', async () => {
1863
+ const schemaId = 'http://localhost:4242/dynamic-ref-detached.json';
1864
+ const schema = {
1865
+ $ref: 'http://localhost:1234/draft2020-12/detached-dynamicref.json#/$defs/foo',
1866
+ };
1867
+ schemaProvider.addSchemaWithUri(testHelper_1.SCHEMA_ID, detachedDynamicRefSchema.$id, detachedDynamicRefSchema);
1868
+ schemaProvider.addSchemaWithUri(testHelper_1.SCHEMA_ID, schemaId, schema);
1869
+ (0, chai_1.expect)(await parseSetup(`# yaml-language-server: $schema=${schemaId}
1870
+ 1`)).to.be.empty;
1871
+ const result = await parseSetup(`# yaml-language-server: $schema=${schemaId}
1872
+ a`);
1873
+ (0, chai_1.expect)(result).to.have.length(1);
1874
+ (0, chai_1.expect)(result[0].message).to.include('Incorrect type.');
1875
+ (0, chai_1.expect)(result[0].message).to.include('number');
1876
+ });
1877
+ it('$dynamicRef points to a boolean schema', async () => {
1878
+ const schemaId = 'http://localhost:4242/dynamic-ref-boolean.json';
1879
+ const schema = {
1880
+ $schema: 'https://json-schema.org/draft/2020-12/schema',
1881
+ $defs: {
1882
+ true: true,
1883
+ false: false,
1884
+ },
1885
+ properties: {
1886
+ true: {
1887
+ $dynamicRef: '#/$defs/true',
1888
+ },
1889
+ false: {
1890
+ $dynamicRef: '#/$defs/false',
1891
+ },
1892
+ },
1893
+ };
1894
+ schemaProvider.addSchemaWithUri(testHelper_1.SCHEMA_ID, schemaId, schema);
1895
+ (0, chai_1.expect)(await parseSetup(`# yaml-language-server: $schema=${schemaId}
1896
+ "true": 1`)).to.be.empty;
1897
+ const result = await parseSetup(`# yaml-language-server: $schema=${schemaId}
1898
+ "false": 1`);
1899
+ (0, chai_1.expect)(result).to.have.length(1);
1900
+ (0, chai_1.expect)(result[0].message).to.include('Matches a schema that is not allowed.');
1901
+ });
1902
+ it('$dynamicRef skips over intermediate resources - direct reference', async () => {
1903
+ const schemaId = 'https://test.json-schema.org/dynamic-ref-skips-intermediate-resource/main';
1904
+ const schema = {
1905
+ $schema: 'https://json-schema.org/draft/2020-12/schema',
1906
+ $id: schemaId,
1907
+ type: 'object',
1908
+ properties: {
1909
+ 'bar-item': {
1910
+ $ref: 'item',
1911
+ },
1912
+ },
1913
+ $defs: {
1914
+ bar: {
1915
+ $id: 'bar',
1916
+ type: 'array',
1917
+ items: {
1918
+ $ref: 'item',
1919
+ },
1920
+ $defs: {
1921
+ item: {
1922
+ $id: 'item',
1923
+ type: 'object',
1924
+ properties: {
1925
+ content: {
1926
+ $dynamicRef: '#content',
1927
+ },
1928
+ },
1929
+ $defs: {
1930
+ defaultContent: {
1931
+ $dynamicAnchor: 'content',
1932
+ type: 'integer',
1933
+ },
1934
+ },
1935
+ },
1936
+ content: {
1937
+ $dynamicAnchor: 'content',
1938
+ type: 'string',
1939
+ },
1940
+ },
1941
+ },
1942
+ },
1943
+ };
1944
+ schemaProvider.addSchemaWithUri(testHelper_1.SCHEMA_ID, schema.$id, schema);
1945
+ (0, chai_1.expect)(await parseSetup(`# yaml-language-server: $schema=${schemaId}
1946
+ bar-item:
1947
+ content: 42`)).to.be.empty;
1948
+ const result = await parseSetup(`# yaml-language-server: $schema=${schemaId}
1949
+ bar-item:
1950
+ content: value`);
1951
+ (0, chai_1.expect)(result).to.have.length(1);
1952
+ (0, chai_1.expect)(result[0].message).to.include('Incorrect type.');
1953
+ (0, chai_1.expect)(result[0].message).to.include('integer');
1954
+ });
1955
+ it('$dynamicRef avoids the root of each schema, but scopes are still registered', async () => {
1956
+ const schemaId = 'https://test.json-schema.org/dynamic-ref-avoids-root-of-each-schema/base';
1957
+ const schema = {
1958
+ $schema: 'https://json-schema.org/draft/2020-12/schema',
1959
+ $id: schemaId,
1960
+ $ref: 'first#/$defs/stuff',
1961
+ $defs: {
1962
+ first: {
1963
+ $id: 'first',
1964
+ $defs: {
1965
+ stuff: {
1966
+ $ref: 'second#/$defs/stuff',
1967
+ },
1968
+ length: {
1969
+ $comment: 'unused, because there is no $dynamicAnchor here',
1970
+ maxLength: 1,
1971
+ },
1972
+ },
1973
+ },
1974
+ second: {
1975
+ $id: 'second',
1976
+ $defs: {
1977
+ stuff: {
1978
+ $ref: 'third#/$defs/stuff',
1979
+ },
1980
+ length: {
1981
+ $dynamicAnchor: 'length',
1982
+ maxLength: 2,
1983
+ },
1984
+ },
1985
+ },
1986
+ third: {
1987
+ $id: 'third',
1988
+ $defs: {
1989
+ stuff: {
1990
+ $dynamicRef: '#length',
1991
+ },
1992
+ length: {
1993
+ $dynamicAnchor: 'length',
1994
+ maxLength: 3,
1995
+ },
1996
+ },
1997
+ },
1998
+ },
1999
+ };
2000
+ schemaProvider.addSchemaWithUri(testHelper_1.SCHEMA_ID, schema.$id, schema);
2001
+ (0, chai_1.expect)(await parseSetup(`# yaml-language-server: $schema=${schemaId}
2002
+ hi`)).to.be.empty;
2003
+ const result = await parseSetup(`# yaml-language-server: $schema=${schemaId}
2004
+ hey`);
2005
+ (0, chai_1.expect)(result).to.have.length(1);
2006
+ (0, chai_1.expect)(result[0].message).to.include('String is longer than the maximum length of 2.');
2007
+ });
2008
+ it('does not infinite loop on cyclic $ref with siblings', async () => {
2009
+ const schema = {
2010
+ $schema: 'https://json-schema.org/draft/2020-12/schema',
2011
+ $id: 'https://example.com/cyclic-ref-with-siblings.json',
2012
+ $defs: {
2013
+ a: {
2014
+ $ref: '#/$defs/b',
2015
+ properties: {
2016
+ a: { type: 'string' },
2017
+ },
2018
+ required: ['a'],
2019
+ },
2020
+ b: {
2021
+ $ref: '#/$defs/a',
2022
+ properties: {
2023
+ b: { type: 'string' },
2024
+ },
2025
+ required: ['b'],
2026
+ },
2027
+ },
2028
+ $ref: '#/$defs/a',
2029
+ };
2030
+ schemaProvider.addSchema(testHelper_1.SCHEMA_ID, schema);
2031
+ const result = await parseSetup(`a: hello`);
2032
+ (0, chai_1.expect)(result).to.have.length(1);
2033
+ (0, chai_1.expect)(result[0].message).to.include('Missing property "b".');
2034
+ });
2035
+ });
2036
+ });
2037
+ //# sourceMappingURL=schema2020Validation.test.js.map