xq-lsp 1.0.0 → 1.2.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 (598) hide show
  1. package/CHANGELOG.md +54 -0
  2. package/README.md +119 -12
  3. package/builtins/builtins-array.xq +34 -9
  4. package/builtins/builtins-fn.xq +492 -101
  5. package/builtins/builtins-map.xq +6 -2
  6. package/builtins/builtins-math.xq +1 -1
  7. package/builtins/builtins-xs.xq +63 -0
  8. package/demo/index.html +151 -0
  9. package/demo/main.ts +307 -0
  10. package/demo/package-lock.json +1301 -0
  11. package/demo/package.json +20 -0
  12. package/demo/vite.config.ts +15 -0
  13. package/dist/analyzer.d.ts +28 -0
  14. package/dist/analyzer.js +128 -40
  15. package/dist/ast-nodes.d.ts +90 -0
  16. package/dist/ast-nodes.js +305 -0
  17. package/dist/builtins.js +3 -0
  18. package/dist/completion-core.d.ts +17 -0
  19. package/dist/completion-core.js +113 -0
  20. package/dist/completion.d.ts +3 -8
  21. package/dist/completion.js +10 -150
  22. package/dist/config.d.ts +13 -0
  23. package/dist/config.js +81 -0
  24. package/dist/context-item-diagnostics.d.ts +19 -0
  25. package/dist/context-item-diagnostics.js +133 -0
  26. package/dist/definition.d.ts +4 -0
  27. package/dist/definition.js +67 -0
  28. package/dist/features.d.ts +1 -2
  29. package/dist/features.js +81 -112
  30. package/dist/functioncall-diagnostics.d.ts +12 -0
  31. package/dist/functioncall-diagnostics.js +87 -0
  32. package/dist/hover-core.d.ts +39 -0
  33. package/dist/hover-core.js +87 -0
  34. package/dist/namespace-diagnostics.d.ts +33 -0
  35. package/dist/namespace-diagnostics.js +108 -0
  36. package/dist/qt4-worker.d.ts +18 -0
  37. package/dist/qt4-worker.js +46 -0
  38. package/dist/runtimes.d.ts +2 -0
  39. package/dist/runtimes.js +67 -0
  40. package/dist/server.js +254 -50
  41. package/dist/test-utils.d.ts +3 -0
  42. package/dist/test-utils.js +16 -0
  43. package/dist/typechecker.d.ts +7 -0
  44. package/dist/typechecker.js +388 -0
  45. package/dist/types.d.ts +30 -6
  46. package/dist/types.js +6 -0
  47. package/dist/unused-diagnostics.d.ts +19 -0
  48. package/dist/unused-diagnostics.js +202 -0
  49. package/firebase.json +12 -0
  50. package/package.json +31 -27
  51. package/release-please-config.json +16 -0
  52. package/scripts/generate-existdb.ts +890 -0
  53. package/src/analyzer.test.ts +163 -0
  54. package/src/analyzer.ts +139 -41
  55. package/src/ast-nodes.ts +348 -0
  56. package/src/builtins.test.ts +32 -0
  57. package/src/builtins.ts +3 -0
  58. package/src/completion-core.ts +139 -0
  59. package/src/completion.test.ts +152 -0
  60. package/src/completion.ts +11 -173
  61. package/src/config.ts +90 -0
  62. package/src/context-item-diagnostics.test.ts +182 -0
  63. package/src/context-item-diagnostics.ts +143 -0
  64. package/src/definition.ts +82 -0
  65. package/src/features.test.ts +110 -0
  66. package/src/features.ts +87 -128
  67. package/src/functioncall-diagnostics.test.ts +169 -0
  68. package/src/functioncall-diagnostics.ts +110 -0
  69. package/src/hover-core.ts +114 -0
  70. package/src/lsp-config.test.ts +183 -0
  71. package/src/namespace-diagnostics.test.ts +162 -0
  72. package/src/namespace-diagnostics.ts +133 -0
  73. package/src/qt4-diagnostic.test.ts +271 -0
  74. package/src/qt4-snaps/app-CatalogCheck.snap +1 -0
  75. package/src/qt4-snaps/app-Demos.snap +18 -0
  76. package/src/qt4-snaps/app-Duplicates.snap +1 -0
  77. package/src/qt4-snaps/app-FunctxFn.snap +162 -0
  78. package/src/qt4-snaps/app-FunctxFunctx.snap +714 -0
  79. package/src/qt4-snaps/app-UseCaseCompoundValues.snap +1 -0
  80. package/src/qt4-snaps/app-UseCaseJSON.snap +1 -0
  81. package/src/qt4-snaps/app-UseCaseNLP.snap +1 -0
  82. package/src/qt4-snaps/app-UseCaseNS.snap +1 -0
  83. package/src/qt4-snaps/app-UseCaseR.snap +1 -0
  84. package/src/qt4-snaps/app-UseCaseR31.snap +1 -0
  85. package/src/qt4-snaps/app-UseCaseSEQ.snap +1 -0
  86. package/src/qt4-snaps/app-UseCaseSGML.snap +1 -0
  87. package/src/qt4-snaps/app-UseCaseSTRING.snap +1 -0
  88. package/src/qt4-snaps/app-UseCaseTREE.snap +1 -0
  89. package/src/qt4-snaps/app-UseCaseXMP.snap +1 -0
  90. package/src/qt4-snaps/app-Walmsley.snap +1 -0
  91. package/src/qt4-snaps/app-XMark.snap +10 -0
  92. package/src/qt4-snaps/array-append.snap +1 -0
  93. package/src/qt4-snaps/array-filter.snap +10 -0
  94. package/src/qt4-snaps/array-flatten.snap +1 -0
  95. package/src/qt4-snaps/array-fold-left.snap +1 -0
  96. package/src/qt4-snaps/array-fold-right.snap +1 -0
  97. package/src/qt4-snaps/array-for-each-pair.snap +1 -0
  98. package/src/qt4-snaps/array-for-each.snap +1 -0
  99. package/src/qt4-snaps/array-get.snap +1 -0
  100. package/src/qt4-snaps/array-head.snap +1 -0
  101. package/src/qt4-snaps/array-insert-before.snap +1 -0
  102. package/src/qt4-snaps/array-join.snap +1 -0
  103. package/src/qt4-snaps/array-put.snap +1 -0
  104. package/src/qt4-snaps/array-remove.snap +1 -0
  105. package/src/qt4-snaps/array-reverse.snap +1 -0
  106. package/src/qt4-snaps/array-size.snap +1 -0
  107. package/src/qt4-snaps/array-sort.snap +1 -0
  108. package/src/qt4-snaps/array-subarray.snap +1 -0
  109. package/src/qt4-snaps/array-tail.snap +1 -0
  110. package/src/qt4-snaps/bin-and.snap +1 -0
  111. package/src/qt4-snaps/bin-bin.snap +1 -0
  112. package/src/qt4-snaps/bin-decode-string.snap +1 -0
  113. package/src/qt4-snaps/bin-encode-string.snap +1 -0
  114. package/src/qt4-snaps/bin-find.snap +1 -0
  115. package/src/qt4-snaps/bin-from-octets.snap +1 -0
  116. package/src/qt4-snaps/bin-hex.snap +1 -0
  117. package/src/qt4-snaps/bin-insert-before.snap +1 -0
  118. package/src/qt4-snaps/bin-join.snap +1 -0
  119. package/src/qt4-snaps/bin-length.snap +1 -0
  120. package/src/qt4-snaps/bin-not.snap +1 -0
  121. package/src/qt4-snaps/bin-octal.snap +1 -0
  122. package/src/qt4-snaps/bin-or.snap +1 -0
  123. package/src/qt4-snaps/bin-pack-double.snap +1 -0
  124. package/src/qt4-snaps/bin-pack-float.snap +1 -0
  125. package/src/qt4-snaps/bin-pack-integer.snap +1 -0
  126. package/src/qt4-snaps/bin-pad-left.snap +1 -0
  127. package/src/qt4-snaps/bin-pad-right.snap +1 -0
  128. package/src/qt4-snaps/bin-part.snap +1 -0
  129. package/src/qt4-snaps/bin-shift.snap +1 -0
  130. package/src/qt4-snaps/bin-to-octets.snap +1 -0
  131. package/src/qt4-snaps/bin-unpack-double.snap +1 -0
  132. package/src/qt4-snaps/bin-unpack-float.snap +1 -0
  133. package/src/qt4-snaps/bin-unpack-integer.snap +1 -0
  134. package/src/qt4-snaps/bin-unpack-unsigned-integer.snap +1 -0
  135. package/src/qt4-snaps/bin-xor.snap +1 -0
  136. package/src/qt4-snaps/file-file.snap +1 -0
  137. package/src/qt4-snaps/fn-QName.snap +1 -0
  138. package/src/qt4-snaps/fn-abs.snap +1 -0
  139. package/src/qt4-snaps/fn-adjust-date-to-timezone.snap +1 -0
  140. package/src/qt4-snaps/fn-adjust-dateTime-to-timezone.snap +1 -0
  141. package/src/qt4-snaps/fn-adjust-time-to-timezone.snap +1 -0
  142. package/src/qt4-snaps/fn-analyze-string.snap +1 -0
  143. package/src/qt4-snaps/fn-apply.snap +1 -0
  144. package/src/qt4-snaps/fn-available-environment-variables.snap +1 -0
  145. package/src/qt4-snaps/fn-avg.snap +1 -0
  146. package/src/qt4-snaps/fn-base-uri.snap +1 -0
  147. package/src/qt4-snaps/fn-boolean.snap +1 -0
  148. package/src/qt4-snaps/fn-ceiling.snap +1 -0
  149. package/src/qt4-snaps/fn-codepoint-equal.snap +1 -0
  150. package/src/qt4-snaps/fn-codepoints-to-string.snap +1 -0
  151. package/src/qt4-snaps/fn-collation-key.snap +1 -0
  152. package/src/qt4-snaps/fn-collection.snap +1 -0
  153. package/src/qt4-snaps/fn-compare.snap +1 -0
  154. package/src/qt4-snaps/fn-concat.snap +1 -0
  155. package/src/qt4-snaps/fn-contains-token.snap +1 -0
  156. package/src/qt4-snaps/fn-contains.snap +1 -0
  157. package/src/qt4-snaps/fn-count.snap +1 -0
  158. package/src/qt4-snaps/fn-current-date.snap +1 -0
  159. package/src/qt4-snaps/fn-current-dateTime.snap +1 -0
  160. package/src/qt4-snaps/fn-current-time.snap +1 -0
  161. package/src/qt4-snaps/fn-data.snap +8 -0
  162. package/src/qt4-snaps/fn-dateTime.snap +1 -0
  163. package/src/qt4-snaps/fn-day-from-date.snap +1 -0
  164. package/src/qt4-snaps/fn-day-from-dateTime.snap +1 -0
  165. package/src/qt4-snaps/fn-days-from-duration.snap +1 -0
  166. package/src/qt4-snaps/fn-deep-equal.snap +1 -0
  167. package/src/qt4-snaps/fn-default-collation.snap +1 -0
  168. package/src/qt4-snaps/fn-default-language.snap +1 -0
  169. package/src/qt4-snaps/fn-distinct-values.snap +1 -0
  170. package/src/qt4-snaps/fn-doc-available.snap +1 -0
  171. package/src/qt4-snaps/fn-doc.snap +1 -0
  172. package/src/qt4-snaps/fn-document-uri.snap +8 -0
  173. package/src/qt4-snaps/fn-element-with-id.snap +1 -0
  174. package/src/qt4-snaps/fn-empty.snap +1 -0
  175. package/src/qt4-snaps/fn-encode-for-uri.snap +1 -0
  176. package/src/qt4-snaps/fn-ends-with.snap +1 -0
  177. package/src/qt4-snaps/fn-environment-variable.snap +1 -0
  178. package/src/qt4-snaps/fn-error.snap +128 -0
  179. package/src/qt4-snaps/fn-escape-html-uri.snap +1 -0
  180. package/src/qt4-snaps/fn-exactly-one.snap +1 -0
  181. package/src/qt4-snaps/fn-exists.snap +1 -0
  182. package/src/qt4-snaps/fn-false.snap +1 -0
  183. package/src/qt4-snaps/fn-filter.snap +10 -0
  184. package/src/qt4-snaps/fn-floor.snap +1 -0
  185. package/src/qt4-snaps/fn-fold-left.snap +1 -0
  186. package/src/qt4-snaps/fn-fold-right.snap +1 -0
  187. package/src/qt4-snaps/fn-for-each-pair.snap +10 -0
  188. package/src/qt4-snaps/fn-for-each.snap +10 -0
  189. package/src/qt4-snaps/fn-format-date.snap +26 -0
  190. package/src/qt4-snaps/fn-format-dateTime.snap +1 -0
  191. package/src/qt4-snaps/fn-format-integer.snap +1 -0
  192. package/src/qt4-snaps/fn-format-number.snap +38 -0
  193. package/src/qt4-snaps/fn-format-time.snap +1 -0
  194. package/src/qt4-snaps/fn-function-arity.snap +1 -0
  195. package/src/qt4-snaps/fn-function-lookup.snap +1 -0
  196. package/src/qt4-snaps/fn-function-name.snap +1 -0
  197. package/src/qt4-snaps/fn-generate-id.snap +18 -0
  198. package/src/qt4-snaps/fn-has-children.snap +26 -0
  199. package/src/qt4-snaps/fn-head.snap +1 -0
  200. package/src/qt4-snaps/fn-hours-from-dateTime.snap +1 -0
  201. package/src/qt4-snaps/fn-hours-from-duration.snap +1 -0
  202. package/src/qt4-snaps/fn-hours-from-time.snap +1 -0
  203. package/src/qt4-snaps/fn-id.snap +10 -0
  204. package/src/qt4-snaps/fn-idref.snap +10 -0
  205. package/src/qt4-snaps/fn-implicit-timezone.snap +1 -0
  206. package/src/qt4-snaps/fn-in-scope-prefixes.snap +26 -0
  207. package/src/qt4-snaps/fn-index-of.snap +1 -0
  208. package/src/qt4-snaps/fn-innermost.snap +58 -0
  209. package/src/qt4-snaps/fn-insert-before.snap +1 -0
  210. package/src/qt4-snaps/fn-iri-to-uri.snap +1 -0
  211. package/src/qt4-snaps/fn-json-doc.snap +1 -0
  212. package/src/qt4-snaps/fn-json-to-xml.snap +1 -0
  213. package/src/qt4-snaps/fn-lang.snap +10 -0
  214. package/src/qt4-snaps/fn-last.snap +1 -0
  215. package/src/qt4-snaps/fn-load-xquery-module.snap +1 -0
  216. package/src/qt4-snaps/fn-local-name-from-QName.snap +1 -0
  217. package/src/qt4-snaps/fn-local-name.snap +10 -0
  218. package/src/qt4-snaps/fn-lower-case.snap +1 -0
  219. package/src/qt4-snaps/fn-matches.re.snap +1 -0
  220. package/src/qt4-snaps/fn-matches.snap +1 -0
  221. package/src/qt4-snaps/fn-max.snap +1 -0
  222. package/src/qt4-snaps/fn-min.snap +1 -0
  223. package/src/qt4-snaps/fn-minutes-from-dateTime.snap +1 -0
  224. package/src/qt4-snaps/fn-minutes-from-duration.snap +1 -0
  225. package/src/qt4-snaps/fn-minutes-from-time.snap +1 -0
  226. package/src/qt4-snaps/fn-month-from-date.snap +1 -0
  227. package/src/qt4-snaps/fn-month-from-dateTime.snap +1 -0
  228. package/src/qt4-snaps/fn-months-from-duration.snap +1 -0
  229. package/src/qt4-snaps/fn-name.snap +10 -0
  230. package/src/qt4-snaps/fn-namespace-uri-for-prefix.snap +1 -0
  231. package/src/qt4-snaps/fn-namespace-uri-from-QName.snap +1 -0
  232. package/src/qt4-snaps/fn-namespace-uri.snap +1 -0
  233. package/src/qt4-snaps/fn-nilled.snap +16 -0
  234. package/src/qt4-snaps/fn-node-name.snap +32 -0
  235. package/src/qt4-snaps/fn-normalize-space.snap +1 -0
  236. package/src/qt4-snaps/fn-normalize-unicode.snap +26 -0
  237. package/src/qt4-snaps/fn-not.snap +1 -0
  238. package/src/qt4-snaps/fn-number.snap +1 -0
  239. package/src/qt4-snaps/fn-one-or-more.snap +1 -0
  240. package/src/qt4-snaps/fn-outermost.snap +58 -0
  241. package/src/qt4-snaps/fn-parse-ietf-date.snap +1 -0
  242. package/src/qt4-snaps/fn-parse-json.snap +1 -0
  243. package/src/qt4-snaps/fn-parse-xml-fragment.snap +1 -0
  244. package/src/qt4-snaps/fn-parse-xml.snap +1 -0
  245. package/src/qt4-snaps/fn-path.snap +26 -0
  246. package/src/qt4-snaps/fn-position.snap +1 -0
  247. package/src/qt4-snaps/fn-prefix-from-QName.snap +1 -0
  248. package/src/qt4-snaps/fn-random-number-generator.snap +1 -0
  249. package/src/qt4-snaps/fn-remove.snap +1 -0
  250. package/src/qt4-snaps/fn-replace.snap +330 -0
  251. package/src/qt4-snaps/fn-resolve-QName.snap +1 -0
  252. package/src/qt4-snaps/fn-resolve-uri.snap +1 -0
  253. package/src/qt4-snaps/fn-reverse.snap +1 -0
  254. package/src/qt4-snaps/fn-root.snap +10 -0
  255. package/src/qt4-snaps/fn-round-half-to-even.snap +1 -0
  256. package/src/qt4-snaps/fn-round.snap +8 -0
  257. package/src/qt4-snaps/fn-seconds-from-dateTime.snap +1 -0
  258. package/src/qt4-snaps/fn-seconds-from-duration.snap +1 -0
  259. package/src/qt4-snaps/fn-seconds-from-time.snap +1 -0
  260. package/src/qt4-snaps/fn-serialize.snap +50 -0
  261. package/src/qt4-snaps/fn-sort.snap +1 -0
  262. package/src/qt4-snaps/fn-starts-with.snap +1 -0
  263. package/src/qt4-snaps/fn-static-base-uri.snap +1 -0
  264. package/src/qt4-snaps/fn-string-join.snap +8 -0
  265. package/src/qt4-snaps/fn-string-length.snap +1 -0
  266. package/src/qt4-snaps/fn-string-to-codepoints.snap +1 -0
  267. package/src/qt4-snaps/fn-string.snap +10 -0
  268. package/src/qt4-snaps/fn-subsequence.snap +1 -0
  269. package/src/qt4-snaps/fn-substring-after.snap +1 -0
  270. package/src/qt4-snaps/fn-substring-before.snap +1 -0
  271. package/src/qt4-snaps/fn-substring.snap +1 -0
  272. package/src/qt4-snaps/fn-sum.snap +1 -0
  273. package/src/qt4-snaps/fn-tail.snap +1 -0
  274. package/src/qt4-snaps/fn-timezone-from-date.snap +1 -0
  275. package/src/qt4-snaps/fn-timezone-from-dateTime.snap +1 -0
  276. package/src/qt4-snaps/fn-timezone-from-time.snap +1 -0
  277. package/src/qt4-snaps/fn-tokenize.snap +16 -0
  278. package/src/qt4-snaps/fn-trace.snap +8 -0
  279. package/src/qt4-snaps/fn-transform.snap +1 -0
  280. package/src/qt4-snaps/fn-translate.snap +1 -0
  281. package/src/qt4-snaps/fn-true.snap +1 -0
  282. package/src/qt4-snaps/fn-unordered.snap +1 -0
  283. package/src/qt4-snaps/fn-unparsed-text-available.snap +1 -0
  284. package/src/qt4-snaps/fn-unparsed-text-lines.snap +1 -0
  285. package/src/qt4-snaps/fn-unparsed-text.snap +1 -0
  286. package/src/qt4-snaps/fn-upper-case.snap +1 -0
  287. package/src/qt4-snaps/fn-uri-collection.snap +1 -0
  288. package/src/qt4-snaps/fn-xml-to-json.snap +1 -0
  289. package/src/qt4-snaps/fn-year-from-date.snap +1 -0
  290. package/src/qt4-snaps/fn-year-from-dateTime.snap +1 -0
  291. package/src/qt4-snaps/fn-years-from-duration.snap +1 -0
  292. package/src/qt4-snaps/fn-zero-or-one.snap +1 -0
  293. package/src/qt4-snaps/map-contains.snap +1 -0
  294. package/src/qt4-snaps/map-entry.snap +1 -0
  295. package/src/qt4-snaps/map-find.snap +1 -0
  296. package/src/qt4-snaps/map-for-each.snap +1 -0
  297. package/src/qt4-snaps/map-get.snap +1 -0
  298. package/src/qt4-snaps/map-keys.snap +1 -0
  299. package/src/qt4-snaps/map-merge.snap +1 -0
  300. package/src/qt4-snaps/map-put.snap +1 -0
  301. package/src/qt4-snaps/map-remove.snap +1 -0
  302. package/src/qt4-snaps/map-size.snap +1 -0
  303. package/src/qt4-snaps/math-math-acos.snap +1 -0
  304. package/src/qt4-snaps/math-math-asin.snap +1 -0
  305. package/src/qt4-snaps/math-math-atan.snap +1 -0
  306. package/src/qt4-snaps/math-math-atan2.snap +1 -0
  307. package/src/qt4-snaps/math-math-cos.snap +1 -0
  308. package/src/qt4-snaps/math-math-exp.snap +1 -0
  309. package/src/qt4-snaps/math-math-exp10.snap +1 -0
  310. package/src/qt4-snaps/math-math-log.snap +1 -0
  311. package/src/qt4-snaps/math-math-log10.snap +1 -0
  312. package/src/qt4-snaps/math-math-pi.snap +1 -0
  313. package/src/qt4-snaps/math-math-pow.snap +1 -0
  314. package/src/qt4-snaps/math-math-sin.snap +1 -0
  315. package/src/qt4-snaps/math-math-sqrt.snap +1 -0
  316. package/src/qt4-snaps/math-math-tan.snap +1 -0
  317. package/src/qt4-snaps/misc-AnnexE.snap +1 -0
  318. package/src/qt4-snaps/misc-AppendixA4.snap +1 -0
  319. package/src/qt4-snaps/misc-CombinedErrorCodes.snap +350 -0
  320. package/src/qt4-snaps/misc-ErrorsAndOptimization.snap +1 -0
  321. package/src/qt4-snaps/misc-HigherOrderFunctions.snap +32 -0
  322. package/src/qt4-snaps/misc-JsonTestSuite.snap +1 -0
  323. package/src/qt4-snaps/misc-StaticContext.snap +8 -0
  324. package/src/qt4-snaps/misc-Surrogates.snap +34 -0
  325. package/src/qt4-snaps/misc-UCACollation.snap +1 -0
  326. package/src/qt4-snaps/misc-XMLEdition.snap +22 -0
  327. package/src/qt4-snaps/op-QName-equal.snap +1 -0
  328. package/src/qt4-snaps/op-add-dayTimeDuration-to-date.snap +1 -0
  329. package/src/qt4-snaps/op-add-dayTimeDuration-to-dateTime.snap +1 -0
  330. package/src/qt4-snaps/op-add-dayTimeDuration-to-time.snap +1 -0
  331. package/src/qt4-snaps/op-add-dayTimeDurations.snap +1 -0
  332. package/src/qt4-snaps/op-add-yearMonthDuration-to-date.snap +1 -0
  333. package/src/qt4-snaps/op-add-yearMonthDuration-to-dateTime.snap +1 -0
  334. package/src/qt4-snaps/op-add-yearMonthDurations.snap +1 -0
  335. package/src/qt4-snaps/op-anyURI-equal.snap +1 -0
  336. package/src/qt4-snaps/op-anyURI-greater-than.snap +1 -0
  337. package/src/qt4-snaps/op-anyURI-less-than.snap +1 -0
  338. package/src/qt4-snaps/op-bang.snap +1 -0
  339. package/src/qt4-snaps/op-base64Binary-equal.snap +1 -0
  340. package/src/qt4-snaps/op-base64Binary-greater-than.snap +1 -0
  341. package/src/qt4-snaps/op-base64Binary-less-than.snap +1 -0
  342. package/src/qt4-snaps/op-boolean-equal.snap +1 -0
  343. package/src/qt4-snaps/op-boolean-greater-than.snap +1 -0
  344. package/src/qt4-snaps/op-boolean-less-than.snap +1 -0
  345. package/src/qt4-snaps/op-concat.snap +1 -0
  346. package/src/qt4-snaps/op-concatenate.snap +1 -0
  347. package/src/qt4-snaps/op-date-equal.snap +1 -0
  348. package/src/qt4-snaps/op-date-greater-than.snap +1 -0
  349. package/src/qt4-snaps/op-date-less-than.snap +1 -0
  350. package/src/qt4-snaps/op-dateTime-equal.snap +1 -0
  351. package/src/qt4-snaps/op-dateTime-greater-than.snap +1 -0
  352. package/src/qt4-snaps/op-dateTime-less-than.snap +1 -0
  353. package/src/qt4-snaps/op-dayTimeDuration-greater-than.snap +1 -0
  354. package/src/qt4-snaps/op-dayTimeDuration-less-than.snap +1 -0
  355. package/src/qt4-snaps/op-divide-dayTimeDuration-by-dayTimeDuration.snap +1 -0
  356. package/src/qt4-snaps/op-divide-dayTimeDuration.snap +1 -0
  357. package/src/qt4-snaps/op-divide-yearMonthDuration-by-yearMonthDuration.snap +1 -0
  358. package/src/qt4-snaps/op-divide-yearMonthDuration.snap +1 -0
  359. package/src/qt4-snaps/op-duration-equal.snap +1 -0
  360. package/src/qt4-snaps/op-except.snap +1 -0
  361. package/src/qt4-snaps/op-gDay-equal.snap +1 -0
  362. package/src/qt4-snaps/op-gMonth-equal.snap +1 -0
  363. package/src/qt4-snaps/op-gMonthDay-equal.snap +1 -0
  364. package/src/qt4-snaps/op-gYear-equal.snap +1 -0
  365. package/src/qt4-snaps/op-gYearMonth-equal.snap +1 -0
  366. package/src/qt4-snaps/op-hexBinary-equal.snap +1 -0
  367. package/src/qt4-snaps/op-hexBinary-greater-than.snap +1 -0
  368. package/src/qt4-snaps/op-hexBinary-less-than.snap +1 -0
  369. package/src/qt4-snaps/op-intersect.snap +1 -0
  370. package/src/qt4-snaps/op-is-same-node.snap +1 -0
  371. package/src/qt4-snaps/op-multiply-dayTimeDuration.snap +1 -0
  372. package/src/qt4-snaps/op-multiply-yearMonthDuration.snap +1 -0
  373. package/src/qt4-snaps/op-node-after.snap +1 -0
  374. package/src/qt4-snaps/op-node-before.snap +1 -0
  375. package/src/qt4-snaps/op-numeric-add.snap +1 -0
  376. package/src/qt4-snaps/op-numeric-divide.snap +1 -0
  377. package/src/qt4-snaps/op-numeric-equal.snap +1 -0
  378. package/src/qt4-snaps/op-numeric-greater-than.snap +1 -0
  379. package/src/qt4-snaps/op-numeric-integer-divide.snap +1 -0
  380. package/src/qt4-snaps/op-numeric-less-than.snap +1 -0
  381. package/src/qt4-snaps/op-numeric-mod.snap +1 -0
  382. package/src/qt4-snaps/op-numeric-multiply.snap +1 -0
  383. package/src/qt4-snaps/op-numeric-subtract.snap +1 -0
  384. package/src/qt4-snaps/op-numeric-unary-minus.snap +1 -0
  385. package/src/qt4-snaps/op-numeric-unary-plus.snap +1 -0
  386. package/src/qt4-snaps/op-same-key.snap +1 -0
  387. package/src/qt4-snaps/op-string-equal.snap +1 -0
  388. package/src/qt4-snaps/op-string-greater-than.snap +1 -0
  389. package/src/qt4-snaps/op-string-less-than.snap +1 -0
  390. package/src/qt4-snaps/op-subtract-dateTimes.snap +1 -0
  391. package/src/qt4-snaps/op-subtract-dates.snap +1 -0
  392. package/src/qt4-snaps/op-subtract-dayTimeDuration-from-date.snap +1 -0
  393. package/src/qt4-snaps/op-subtract-dayTimeDuration-from-dateTime.snap +1 -0
  394. package/src/qt4-snaps/op-subtract-dayTimeDuration-from-time.snap +1 -0
  395. package/src/qt4-snaps/op-subtract-dayTimeDurations.snap +1 -0
  396. package/src/qt4-snaps/op-subtract-times.snap +1 -0
  397. package/src/qt4-snaps/op-subtract-yearMonthDuration-from-date.snap +1 -0
  398. package/src/qt4-snaps/op-subtract-yearMonthDuration-from-dateTime.snap +1 -0
  399. package/src/qt4-snaps/op-subtract-yearMonthDurations.snap +1 -0
  400. package/src/qt4-snaps/op-time-equal.snap +1 -0
  401. package/src/qt4-snaps/op-time-greater-than.snap +1 -0
  402. package/src/qt4-snaps/op-time-less-than.snap +1 -0
  403. package/src/qt4-snaps/op-to.snap +1 -0
  404. package/src/qt4-snaps/op-union.snap +1 -0
  405. package/src/qt4-snaps/op-yearMonthDuration-greater-than.snap +1 -0
  406. package/src/qt4-snaps/op-yearMonthDuration-less-than.snap +1 -0
  407. package/src/qt4-snaps/prod-AllowingEmpty.snap +1 -0
  408. package/src/qt4-snaps/prod-Annotation.snap +146 -0
  409. package/src/qt4-snaps/prod-ArrayType.snap +1 -0
  410. package/src/qt4-snaps/prod-ArrowExpr.snap +1 -0
  411. package/src/qt4-snaps/prod-AxisStep.abbr.snap +1 -0
  412. package/src/qt4-snaps/prod-AxisStep.ancestor-or-self.snap +1 -0
  413. package/src/qt4-snaps/prod-AxisStep.ancestor.snap +1 -0
  414. package/src/qt4-snaps/prod-AxisStep.following-sibling.snap +1 -0
  415. package/src/qt4-snaps/prod-AxisStep.following.snap +1 -0
  416. package/src/qt4-snaps/prod-AxisStep.preceding-sibling.snap +1 -0
  417. package/src/qt4-snaps/prod-AxisStep.preceding.snap +1 -0
  418. package/src/qt4-snaps/prod-AxisStep.snap +114 -0
  419. package/src/qt4-snaps/prod-AxisStep.unabbr.snap +1 -0
  420. package/src/qt4-snaps/prod-BaseURIDecl.snap +20 -0
  421. package/src/qt4-snaps/prod-BoundarySpaceDecl.snap +14 -0
  422. package/src/qt4-snaps/prod-CastExpr.derived.snap +1 -0
  423. package/src/qt4-snaps/prod-CastExpr.snap +218 -0
  424. package/src/qt4-snaps/prod-CastableExpr.snap +56 -0
  425. package/src/qt4-snaps/prod-Comment.snap +1 -0
  426. package/src/qt4-snaps/prod-CompAttrConstructor.snap +14 -0
  427. package/src/qt4-snaps/prod-CompCommentConstructor.snap +8 -0
  428. package/src/qt4-snaps/prod-CompDocConstructor.snap +1 -0
  429. package/src/qt4-snaps/prod-CompElemConstructor.snap +1 -0
  430. package/src/qt4-snaps/prod-CompNamespaceConstructor.snap +1 -0
  431. package/src/qt4-snaps/prod-CompPIConstructor.snap +1 -0
  432. package/src/qt4-snaps/prod-CompTextConstructor.snap +8 -0
  433. package/src/qt4-snaps/prod-ConstructionDecl.snap +14 -0
  434. package/src/qt4-snaps/prod-ContextItemDecl.snap +20 -0
  435. package/src/qt4-snaps/prod-ContextItemExpr.snap +1 -0
  436. package/src/qt4-snaps/prod-CopyNamespacesDecl.snap +14 -0
  437. package/src/qt4-snaps/prod-CountClause.snap +1 -0
  438. package/src/qt4-snaps/prod-CurlyArrayConstructor.snap +1 -0
  439. package/src/qt4-snaps/prod-DecimalFormatDecl.snap +92 -0
  440. package/src/qt4-snaps/prod-DefaultCollationDecl.snap +32 -0
  441. package/src/qt4-snaps/prod-DefaultNamespaceDecl.snap +92 -0
  442. package/src/qt4-snaps/prod-DirAttributeList.snap +58 -0
  443. package/src/qt4-snaps/prod-DirElemConstructor.snap +62 -0
  444. package/src/qt4-snaps/prod-DirElemContent.namespace.snap +176 -0
  445. package/src/qt4-snaps/prod-DirElemContent.snap +14 -0
  446. package/src/qt4-snaps/prod-DirElemContent.whitespace.snap +178 -0
  447. package/src/qt4-snaps/prod-DirectConstructor.snap +56 -0
  448. package/src/qt4-snaps/prod-EQName.snap +48 -0
  449. package/src/qt4-snaps/prod-EmptyOrderDecl.snap +14 -0
  450. package/src/qt4-snaps/prod-ExtensionExpr.snap +50 -0
  451. package/src/qt4-snaps/prod-ForClause.snap +158 -0
  452. package/src/qt4-snaps/prod-FunctionCall.snap +102 -0
  453. package/src/qt4-snaps/prod-FunctionDecl.snap +256 -0
  454. package/src/qt4-snaps/prod-GeneralComp.eq.snap +1 -0
  455. package/src/qt4-snaps/prod-GeneralComp.ge.snap +1 -0
  456. package/src/qt4-snaps/prod-GeneralComp.gt.snap +1 -0
  457. package/src/qt4-snaps/prod-GeneralComp.le.snap +1 -0
  458. package/src/qt4-snaps/prod-GeneralComp.lt.snap +1 -0
  459. package/src/qt4-snaps/prod-GeneralComp.ne.snap +1 -0
  460. package/src/qt4-snaps/prod-GroupByClause.snap +8 -0
  461. package/src/qt4-snaps/prod-IfExpr.snap +1 -0
  462. package/src/qt4-snaps/prod-InlineFunctionExpr.snap +14 -0
  463. package/src/qt4-snaps/prod-InstanceofExpr.snap +38 -0
  464. package/src/qt4-snaps/prod-LetClause.snap +40 -0
  465. package/src/qt4-snaps/prod-Literal.snap +68 -0
  466. package/src/qt4-snaps/prod-Lookup.snap +1 -0
  467. package/src/qt4-snaps/prod-MapConstructor.snap +1 -0
  468. package/src/qt4-snaps/prod-MapType.snap +8 -0
  469. package/src/qt4-snaps/prod-ModuleImport.snap +224 -0
  470. package/src/qt4-snaps/prod-NameTest.snap +164 -0
  471. package/src/qt4-snaps/prod-NamedFunctionRef.snap +1 -0
  472. package/src/qt4-snaps/prod-NamespaceDecl.snap +80 -0
  473. package/src/qt4-snaps/prod-NodeTest.snap +50 -0
  474. package/src/qt4-snaps/prod-OptionDecl.serialization.snap +14 -0
  475. package/src/qt4-snaps/prod-OptionDecl.snap +20 -0
  476. package/src/qt4-snaps/prod-OrExpr.snap +1 -0
  477. package/src/qt4-snaps/prod-OrderByClause.snap +20 -0
  478. package/src/qt4-snaps/prod-OrderingModeDecl.snap +14 -0
  479. package/src/qt4-snaps/prod-ParenthesizedExpr.snap +1 -0
  480. package/src/qt4-snaps/prod-PathExpr.snap +34 -0
  481. package/src/qt4-snaps/prod-PositionalVar.snap +26 -0
  482. package/src/qt4-snaps/prod-Predicate.snap +14 -0
  483. package/src/qt4-snaps/prod-QuantifiedExpr.snap +164 -0
  484. package/src/qt4-snaps/prod-ReturnClause.snap +8 -0
  485. package/src/qt4-snaps/prod-SequenceType.snap +1 -0
  486. package/src/qt4-snaps/prod-SquareArrayConstructor.snap +1 -0
  487. package/src/qt4-snaps/prod-StepExpr.snap +1 -0
  488. package/src/qt4-snaps/prod-StringConstructor.snap +26 -0
  489. package/src/qt4-snaps/prod-SwitchExpr.snap +1 -0
  490. package/src/qt4-snaps/prod-TreatExpr.snap +14 -0
  491. package/src/qt4-snaps/prod-TryCatchExpr.snap +38 -0
  492. package/src/qt4-snaps/prod-TypeswitchExpr.snap +50 -0
  493. package/src/qt4-snaps/prod-UnaryLookup.snap +1 -0
  494. package/src/qt4-snaps/prod-UnorderedExpr.snap +14 -0
  495. package/src/qt4-snaps/prod-ValueComp.snap +1 -0
  496. package/src/qt4-snaps/prod-VarDecl.external.snap +82 -0
  497. package/src/qt4-snaps/prod-VarDecl.snap +146 -0
  498. package/src/qt4-snaps/prod-VarDefaultValue.snap +8 -0
  499. package/src/qt4-snaps/prod-VersionDecl.snap +68 -0
  500. package/src/qt4-snaps/prod-WhereClause.snap +26 -0
  501. package/src/qt4-snaps/prod-WindowClause.snap +98 -0
  502. package/src/qt4-snaps/ser-method-adaptive.snap +1 -0
  503. package/src/qt4-snaps/ser-method-html.snap +1 -0
  504. package/src/qt4-snaps/ser-method-xml.snap +1 -0
  505. package/src/qt4-snaps/upd-AdditionalTyping.snap +1 -0
  506. package/src/qt4-snaps/upd-AddressBookUpdates.snap +1 -0
  507. package/src/qt4-snaps/upd-AttrDataModelErrs.snap +1 -0
  508. package/src/qt4-snaps/upd-CommaExpression.snap +1 -0
  509. package/src/qt4-snaps/upd-Compatibility.snap +1 -0
  510. package/src/qt4-snaps/upd-ConditionalExpression.snap +1 -0
  511. package/src/qt4-snaps/upd-DeleteExpressions.snap +1 -0
  512. package/src/qt4-snaps/upd-FLWORExpression.snap +1 -0
  513. package/src/qt4-snaps/upd-FullAxis.snap +1 -0
  514. package/src/qt4-snaps/upd-FunctionCall.snap +1 -0
  515. package/src/qt4-snaps/upd-FunctionDeclaration.snap +114 -0
  516. package/src/qt4-snaps/upd-InsertExpressions.snap +1 -0
  517. package/src/qt4-snaps/upd-MinOther.snap +1 -0
  518. package/src/qt4-snaps/upd-NSBindingConflictErrs.snap +1 -0
  519. package/src/qt4-snaps/upd-NamespacesUpdates.snap +1 -0
  520. package/src/qt4-snaps/upd-NilUpdates.snap +10 -0
  521. package/src/qt4-snaps/upd-OtherExpressions.snap +1 -0
  522. package/src/qt4-snaps/upd-ParenthesizedExpressions.snap +1 -0
  523. package/src/qt4-snaps/upd-PartsUpdates.snap +1 -0
  524. package/src/qt4-snaps/upd-RelationalDataUpdates.snap +1 -0
  525. package/src/qt4-snaps/upd-RenameExpressions.snap +1 -0
  526. package/src/qt4-snaps/upd-ReplaceNode.snap +1 -0
  527. package/src/qt4-snaps/upd-ReplaceValue.snap +1 -0
  528. package/src/qt4-snaps/upd-RevalidationDeclarationLax.snap +1 -0
  529. package/src/qt4-snaps/upd-RevalidationDeclarationLaxUnsupported.snap +1 -0
  530. package/src/qt4-snaps/upd-RevalidationDeclarationSkip.snap +10 -0
  531. package/src/qt4-snaps/upd-RevalidationDeclarationSkipUnsupported.snap +1 -0
  532. package/src/qt4-snaps/upd-RevalidationDeclarationStrict.snap +1 -0
  533. package/src/qt4-snaps/upd-RevalidationDeclarationStrictUnsupported.snap +1 -0
  534. package/src/qt4-snaps/upd-RevalidationDeclarationStrictandSkip.snap +1 -0
  535. package/src/qt4-snaps/upd-SoapUpdates.snap +1 -0
  536. package/src/qt4-snaps/upd-TransformExpressions.snap +1 -0
  537. package/src/qt4-snaps/upd-TypeswitchExpression.snap +1 -0
  538. package/src/qt4-snaps/upd-VariableDeclaration.snap +1 -0
  539. package/src/qt4-snaps/upd-applyUpdates.snap +1 -0
  540. package/src/qt4-snaps/upd-fnput-document.snap +1 -0
  541. package/src/qt4-snaps/upd-mergeUpdates.snap +1 -0
  542. package/src/qt4-snaps/upd-propagateNamespace.snap +1 -0
  543. package/src/qt4-snaps/upd-setToUntyped.snap +1 -0
  544. package/src/qt4-snaps/xs-anyAtomicType.snap +1 -0
  545. package/src/qt4-snaps/xs-anySimpleType.snap +8 -0
  546. package/src/qt4-snaps/xs-anyURI.snap +34 -0
  547. package/src/qt4-snaps/xs-base64Binary.snap +1 -0
  548. package/src/qt4-snaps/xs-dateTimeStamp.snap +1 -0
  549. package/src/qt4-snaps/xs-double.snap +1 -0
  550. package/src/qt4-snaps/xs-error.snap +10 -0
  551. package/src/qt4-snaps/xs-float.snap +1 -0
  552. package/src/qt4-snaps/xs-hexBinary.snap +1 -0
  553. package/src/qt4-snaps/xs-normalizedString.snap +1 -0
  554. package/src/qt4-snaps/xs-notation.snap +1 -0
  555. package/src/qt4-snaps/xs-numeric.snap +1 -0
  556. package/src/qt4-snaps/xs-token.snap +1 -0
  557. package/src/qt4-worker.ts +63 -0
  558. package/src/runtimes/existdb/cache.xq +83 -0
  559. package/src/runtimes/existdb/compression.xq +198 -0
  560. package/src/runtimes/existdb/console.xq +24 -0
  561. package/src/runtimes/existdb/contentextraction.xq +31 -0
  562. package/src/runtimes/existdb/counter.xq +30 -0
  563. package/src/runtimes/existdb/crypto.xq +97 -0
  564. package/src/runtimes/existdb/datetime.xq +91 -0
  565. package/src/runtimes/existdb/file.xq +129 -0
  566. package/src/runtimes/existdb/ft.xq +325 -0
  567. package/src/runtimes/existdb/httpclient.xq +118 -0
  568. package/src/runtimes/existdb/image.xq +65 -0
  569. package/src/runtimes/existdb/inspect.xq +49 -0
  570. package/src/runtimes/existdb/kwic.xq +24 -0
  571. package/src/runtimes/existdb/mail.xq +124 -0
  572. package/src/runtimes/existdb/ngram.xq +57 -0
  573. package/src/runtimes/existdb/process.xq +8 -0
  574. package/src/runtimes/existdb/range.xq +171 -0
  575. package/src/runtimes/existdb/repo.xq +125 -0
  576. package/src/runtimes/existdb/request.xq +242 -0
  577. package/src/runtimes/existdb/response.xq +50 -0
  578. package/src/runtimes/existdb/scheduler.xq +35 -0
  579. package/src/runtimes/existdb/session.xq +111 -0
  580. package/src/runtimes/existdb/sm.xq +497 -0
  581. package/src/runtimes/existdb/sort.xq +59 -0
  582. package/src/runtimes/existdb/system.xq +267 -0
  583. package/src/runtimes/existdb/transform.xq +88 -0
  584. package/src/runtimes/existdb/util.xq +860 -0
  585. package/src/runtimes/existdb/validation.xq +83 -0
  586. package/src/runtimes/existdb/xmldb.xq +482 -0
  587. package/src/runtimes/existdb/xmldiff.xq +22 -0
  588. package/src/runtimes/fonto/fonto.xq +164 -0
  589. package/src/runtimes.test.ts +152 -0
  590. package/src/runtimes.ts +70 -0
  591. package/src/server.ts +352 -122
  592. package/src/test-utils.ts +17 -0
  593. package/src/typechecker.test.ts +548 -0
  594. package/src/typechecker.ts +416 -0
  595. package/src/types.ts +41 -7
  596. package/src/unused-diagnostics.test.ts +174 -0
  597. package/src/unused-diagnostics.ts +232 -0
  598. package/tsconfig.json +3 -3
@@ -0,0 +1,164 @@
1
+ module namespace fonto = "http://www.fontoxml.com/functions";
2
+
3
+ (:~
4
+ : Returns the common ancestor node of the current editor selection.
5
+ : @see https://documentation.fontoxml.com/latest/fonto-selection-common-ancestor-bc3ca1b4b8ef
6
+ :)
7
+ declare function fonto:selection-common-ancestor() as node()? external;
8
+
9
+ (:~
10
+ : Returns true if both edges of the global selection are within the given node or its descendants.
11
+ : @param $node The node to test.
12
+ : @see https://documentation.fontoxml.com/latest/fonto-selection-in-node-85e16ee4b6be
13
+ :)
14
+ declare function fonto:selection-in-node($node as node()) as xs:boolean external;
15
+
16
+ (:~
17
+ : Serializes a node as JsonML. Returns xs:string for text nodes, array() for other node types.
18
+ : @param $node The node to serialize.
19
+ : @see https://documentation.fontoxml.com/latest/fonto-serialize-as-jsonml-a1d656f6c5ca
20
+ :)
21
+ declare function fonto:serialize-as-jsonml($node as node()) as item() external;
22
+
23
+ (:~
24
+ : Returns the current hierarchy node ID, as set via the currentHierarchyNodeId option on evaluateXPath.
25
+ : May return the empty sequence in Hooks or mutations where all hierarchy nodes are considered current.
26
+ : @see https://documentation.fontoxml.com/latest/fonto-current-hierarchy-node-id-e69ed148e068
27
+ :)
28
+ declare function fonto:current-hierarchy-node-id() as xs:string? external;
29
+
30
+ (:~
31
+ : Returns the column index of a table cell. Returns the empty sequence if the node is not a cell.
32
+ : @param $node The table cell node.
33
+ : @see https://documentation.fontoxml.com/latest/fonto-get-column-index-ec839ee74c89
34
+ :)
35
+ declare function fonto:get-column-index($node as node()) as xs:integer? external;
36
+
37
+ (:~
38
+ : Returns true when the review route is open, false otherwise.
39
+ : @see https://documentation.fontoxml.com/latest/fonto-is-on-review-route-e29d1a0ba87f
40
+ :)
41
+ declare function fonto:is-on-review-route() as xs:boolean external;
42
+
43
+ (:~
44
+ : Returns true if the application is on the editor route and suggestion mode is active, false otherwise.
45
+ : @see https://documentation.fontoxml.com/latest/fonto-is-in-suggestion-mode-8aac7e957513
46
+ :)
47
+ declare function fonto:is-in-suggestion-mode() as xs:boolean external;
48
+
49
+ (:~
50
+ : Returns true if the given node is configured as removed.
51
+ : @param $node The node to check.
52
+ : @see https://documentation.fontoxml.com/latest/fonto-is-removed-a1bfbc4d67e7
53
+ :)
54
+ declare function fonto:is-removed($node as node()) as xs:boolean external;
55
+
56
+ (:~
57
+ : Returns true if the given node has the given DITA class, using the schema.
58
+ : @param $node The node to test.
59
+ : @param $ditaclass The DITA class string, e.g. "topic/p".
60
+ : @see https://documentation.fontoxml.com/latest/fonto-dita-class-9dd8240eb51f
61
+ :)
62
+ declare function fonto:dita-class($node as node(), $ditaclass as xs:string) as xs:boolean external;
63
+
64
+ (:~
65
+ : Returns the markup label of the given node, as configured via the markupLabel property in configureProperties.
66
+ : @param $node The node whose markup label to retrieve.
67
+ : @see https://documentation.fontoxml.com/latest/fonto-markup-label-94d77791388a
68
+ :)
69
+ declare function fonto:markup-label($node as node()) as xs:string external;
70
+
71
+ (:~
72
+ : Returns true if the given node is visualized as a block (e.g. configured as frame, structure, or block).
73
+ : Cannot be used in family configuration for the same node. Use fonto:in-inline-layout to check
74
+ : the expected layout context instead.
75
+ : @param $node The node to check.
76
+ : @see https://documentation.fontoxml.com/latest/fonto-block-layout-63c8bd99d28a
77
+ :)
78
+ declare function fonto:block-layout($node as node()) as xs:boolean external;
79
+
80
+ (:~
81
+ : Returns true if the given node should be rendered as inline, as determined by its parent's family.
82
+ : @param $node The node to check.
83
+ : @see https://documentation.fontoxml.com/latest/fonto-in-inline-layout-4073a50b4330
84
+ :)
85
+ declare function fonto:in-inline-layout($node as node()) as xs:boolean external;
86
+
87
+ (:~
88
+ : Returns a plain-text representation of the node's content, ignoring removed and detached descendants.
89
+ : Inserts newlines at block/inline boundaries and for break elements.
90
+ : @param $node The node to extract text from.
91
+ : @see https://documentation.fontoxml.com/latest/fonto-curated-text-in-node-4623872061c2
92
+ :)
93
+ declare function fonto:curated-text-in-node($node as node()) as xs:string? external;
94
+
95
+ (:~
96
+ : Returns a plain-text representation of the node's content with options (e.g. dfcs for bidi text).
97
+ : @param $node The node to extract text from.
98
+ : @param $options Options map (see CuratedTextOptions).
99
+ : @see https://documentation.fontoxml.com/latest/fonto-curated-text-in-node-4623872061c2
100
+ :)
101
+ declare function fonto:curated-text-in-node($node as node(), $options as map(*)) as xs:string? external;
102
+
103
+ (:~
104
+ : Returns a plain-text representation of a document range, ignoring removed and detached descendants.
105
+ : Returns the empty sequence for invalid or empty ranges.
106
+ : @param $startContainer The node containing the start of the range.
107
+ : @param $startOffset The offset within the start container.
108
+ : @param $endContainer The node containing the end of the range.
109
+ : @param $endOffset The offset within the end container.
110
+ : @see https://documentation.fontoxml.com/latest/fonto-curated-text-in-range-33986dbff804
111
+ :)
112
+ declare function fonto:curated-text-in-range(
113
+ $startContainer as node(),
114
+ $startOffset as xs:numeric,
115
+ $endContainer as node(),
116
+ $endOffset as xs:numeric
117
+ ) as xs:string? external;
118
+
119
+ (:~
120
+ : Returns a plain-text representation of a document range with options (e.g. dfcs for bidi text).
121
+ : Returns the empty sequence for invalid or empty ranges.
122
+ : @param $startContainer The node containing the start of the range.
123
+ : @param $startOffset The offset within the start container.
124
+ : @param $endContainer The node containing the end of the range.
125
+ : @param $endOffset The offset within the end container.
126
+ : @param $options Options map (see CuratedTextOptions).
127
+ : @see https://documentation.fontoxml.com/latest/fonto-curated-text-in-range-33986dbff804
128
+ :)
129
+ declare function fonto:curated-text-in-range(
130
+ $startContainer as node(),
131
+ $startOffset as xs:numeric,
132
+ $endContainer as node(),
133
+ $endOffset as xs:numeric,
134
+ $options as map(*)
135
+ ) as xs:string? external;
136
+
137
+ (:~
138
+ : Returns true if the document with the given remote document id is loaded.
139
+ : @param $remoteDocumentId The remote document id to check.
140
+ : @see https://documentation.fontoxml.com/latest/fonto-is-document-loaded-b22eba5424ed
141
+ :)
142
+ declare function fonto:is-document-loaded($remoteDocumentId as xs:string) as xs:boolean external;
143
+
144
+ (:~
145
+ : Returns true if the document with the given remote document id is in error state.
146
+ : @param $remoteDocumentId The remote document id to check.
147
+ : @see https://documentation.fontoxml.com/latest/fonto-is-document-errored-2b43985649f9
148
+ :)
149
+ declare function fonto:is-document-errored($remoteDocumentId as xs:string) as xs:boolean external;
150
+
151
+ (:~
152
+ : Returns the document node for the given remote document id if it is loaded, otherwise the empty sequence.
153
+ : @param $remoteDocumentId The remote document id.
154
+ : @see https://documentation.fontoxml.com/latest/fonto-document-fb5c19e1ad6d
155
+ :)
156
+ declare function fonto:document($remoteDocumentId as xs:string?) as node()? external;
157
+
158
+ (:~
159
+ : Returns a state map for the given remote document id (matching RemoteDocumentStateProperties),
160
+ : or the empty sequence if the document is not loaded.
161
+ : @param $remoteDocumentId The remote document id.
162
+ : @see https://documentation.fontoxml.com/latest/fonto-remote-document-state-03df124b223a
163
+ :)
164
+ declare function fonto:remote-document-state($remoteDocumentId as xs:string) as map(*)? external;
@@ -0,0 +1,152 @@
1
+ import { test, describe } from "node:test";
2
+ import assert from "node:assert/strict";
3
+ import * as fs from "node:fs";
4
+ import * as path from "node:path";
5
+ import { fileURLToPath } from "node:url";
6
+ import { analyze } from "./analyzer.ts";
7
+ import { getCompletions } from "./completion.ts";
8
+ import { formatQName } from "./types.ts";
9
+ import { getRuntimeAnalyses } from "./runtimes.ts";
10
+
11
+ const runtimesDir = path.join(path.dirname(fileURLToPath(import.meta.url)), "runtimes");
12
+
13
+ describe("runtime defs: fonto", () => {
14
+ const fontoPath = path.join(runtimesDir, "fonto", "fonto.xq");
15
+ const fonto = analyze(fs.readFileSync(fontoPath, "utf-8"), "builtin:fonto");
16
+
17
+ test("fonto:selection-common-ancestor is present", () => {
18
+ assert.ok(
19
+ fonto.functions.map((f) => formatQName(f.qname)).includes("fonto:selection-common-ancestor"),
20
+ "fonto:selection-common-ancestor not found",
21
+ );
22
+ });
23
+
24
+ test("fonto:dita-class has arity 2", () => {
25
+ const fn = fonto.functions.find((f) => formatQName(f.qname) === "fonto:dita-class");
26
+ assert.ok(fn, "fonto:dita-class not found");
27
+ assert.equal(fn.arity, 2);
28
+ });
29
+
30
+ test("functions have @see doc links", () => {
31
+ const raw = fs.readFileSync(fontoPath, "utf-8");
32
+ assert.ok(raw.includes("@see https://documentation.fontoxml.com"), "expected @see links");
33
+ });
34
+ });
35
+
36
+ describe("runtime defs: completions", () => {
37
+ function buildImported(libs: string[]) {
38
+ const byNamespace = new Map(
39
+ getRuntimeAnalyses(libs)
40
+ .filter((a) => a.moduleNamespaceUri)
41
+ .map((a) => [a.moduleNamespaceUri!, a]),
42
+ );
43
+ return (analysis: ReturnType<typeof analyze>) => {
44
+ const imported = new Map<string, ReturnType<typeof analyze>>();
45
+ for (const imp of analysis.imports) {
46
+ if (!imp.atPath) {
47
+ const a = byNamespace.get(imp.namespaceUri);
48
+ if (a) imported.set(imp.namespaceUri, a);
49
+ }
50
+ }
51
+ return imported;
52
+ };
53
+ }
54
+
55
+ test("fonto functions appear when namespace is imported", () => {
56
+ const src = `import module namespace fonto="http://www.fontoxml.com/functions"; fonto:`;
57
+ const analysis = analyze(src, "file:///main.xq");
58
+ const imported = buildImported(["fonto"])(analysis);
59
+ const labels = getCompletions({ textBeforeCursor: "fonto:", cursorOffset: 6 }, analysis, imported).map(
60
+ (i) => i.label,
61
+ );
62
+ assert.ok(labels.includes("selection-common-ancestor"), `expected fonto functions, got ${labels}`);
63
+ });
64
+
65
+ test("fonto functions absent without import", () => {
66
+ const src = `let $x := 1 return $x`;
67
+ const analysis = analyze(src, "file:///main.xq");
68
+ const imported = buildImported(["fonto"])(analysis);
69
+ const labels = getCompletions({ textBeforeCursor: "fonto:", cursorOffset: 6 }, analysis, imported).map(
70
+ (i) => i.label,
71
+ );
72
+ assert.ok(!labels.includes("selection-common-ancestor"), `fonto functions should not appear without import`);
73
+ });
74
+ });
75
+
76
+ describe("runtime defs: existdb smoketest", () => {
77
+ const existdbDir = path.join(runtimesDir, "existdb");
78
+ const xqFiles = fs.readdirSync(existdbDir).filter((f) => f.endsWith(".xq"));
79
+
80
+ test("all .xq files parse without throwing", () => {
81
+ const errors: string[] = [];
82
+ for (const file of xqFiles) {
83
+ const src = fs.readFileSync(path.join(existdbDir, file), "utf-8");
84
+ try {
85
+ analyze(src, `builtin:existdb/${file}`);
86
+ } catch (e) {
87
+ errors.push(`${file}: ${e}`);
88
+ }
89
+ }
90
+ assert.deepEqual(errors, [], `parse errors in existdb files`);
91
+ });
92
+
93
+ test("all .xq files export at least one function", () => {
94
+ const empty: string[] = [];
95
+ for (const file of xqFiles) {
96
+ const src = fs.readFileSync(path.join(existdbDir, file), "utf-8");
97
+ const analysis = analyze(src, `builtin:existdb/${file}`);
98
+ if (analysis.functions.length === 0) empty.push(file);
99
+ }
100
+ assert.deepEqual(empty, [], `existdb files with no functions`);
101
+ });
102
+
103
+ test("request:get-parameter has arity 2 and typed params", () => {
104
+ const src = fs.readFileSync(path.join(existdbDir, "request.xq"), "utf-8");
105
+ const analysis = analyze(src, "builtin:existdb/request.xq");
106
+ const fn = analysis.functions.find(
107
+ (f) => formatQName(f.qname) === "request:get-parameter" && f.arity === 2,
108
+ );
109
+ assert.ok(fn, "request:get-parameter#2 not found");
110
+ assert.equal(fn.params[0].name, "name");
111
+ assert.equal(fn.params[0].type, "xs:string");
112
+ });
113
+
114
+ test("sm:create-account has arity 3", () => {
115
+ const src = fs.readFileSync(path.join(existdbDir, "sm.xq"), "utf-8");
116
+ const analysis = analyze(src, "builtin:existdb/sm.xq");
117
+ const fn = analysis.functions.find(
118
+ (f) => formatQName(f.qname) === "sm:create-account" && f.arity === 3,
119
+ );
120
+ assert.ok(fn, "sm:create-account#3 not found");
121
+ });
122
+
123
+ test("cache:put has arity 3 with typed params", () => {
124
+ const src = fs.readFileSync(path.join(existdbDir, "cache.xq"), "utf-8");
125
+ const analysis = analyze(src, "builtin:existdb/cache.xq");
126
+ const fn = analysis.functions.find(
127
+ (f) => formatQName(f.qname) === "cache:put" && f.arity === 3,
128
+ );
129
+ assert.ok(fn, "cache:put#3 not found");
130
+ assert.equal(fn.params[0].name, "cache-name");
131
+ });
132
+
133
+ test("request functions appear in completions when namespace is imported", () => {
134
+ const src = `import module namespace request="http://exist-db.org/xquery/request"; request:`;
135
+ const analysis = analyze(src, "file:///main.xq");
136
+ const byNamespace = new Map(
137
+ getRuntimeAnalyses(["existdb"])
138
+ .filter((a) => a.moduleNamespaceUri)
139
+ .map((a) => [a.moduleNamespaceUri!, a]),
140
+ );
141
+ const imported = new Map<string, ReturnType<typeof analyze>>();
142
+ for (const imp of analysis.imports) {
143
+ const a = byNamespace.get(imp.namespaceUri);
144
+ if (a) imported.set(imp.namespaceUri, a);
145
+ }
146
+ const labels = getCompletions({ textBeforeCursor: "request:", cursorOffset: 8 }, analysis, imported).map(
147
+ (i) => i.label,
148
+ );
149
+ assert.ok(labels.includes("get-parameter"), `expected request functions, got ${labels.slice(0, 5)}`);
150
+ assert.ok(labels.includes("get-header"), `expected get-header in completions`);
151
+ });
152
+ });
@@ -0,0 +1,70 @@
1
+ import * as path from "path";
2
+ import * as fs from "fs";
3
+ import { fileURLToPath } from "url";
4
+ import { analyze } from "./analyzer.ts";
5
+ import type { FileAnalysis } from "./types.ts";
6
+
7
+ const runtimesDir = path.join(path.dirname(fileURLToPath(import.meta.url)), "runtimes");
8
+
9
+ const RUNTIME_FILES: Record<string, string[]> = {
10
+ fonto: [path.join(runtimesDir, "fonto", "fonto.xq")],
11
+ existdb: [
12
+ path.join(runtimesDir, "existdb", "cache.xq"),
13
+ path.join(runtimesDir, "existdb", "compression.xq"),
14
+ path.join(runtimesDir, "existdb", "console.xq"),
15
+ path.join(runtimesDir, "existdb", "contentextraction.xq"),
16
+ path.join(runtimesDir, "existdb", "counter.xq"),
17
+ path.join(runtimesDir, "existdb", "crypto.xq"),
18
+ path.join(runtimesDir, "existdb", "datetime.xq"),
19
+ path.join(runtimesDir, "existdb", "file.xq"),
20
+ path.join(runtimesDir, "existdb", "ft.xq"),
21
+ path.join(runtimesDir, "existdb", "httpclient.xq"),
22
+ path.join(runtimesDir, "existdb", "image.xq"),
23
+ path.join(runtimesDir, "existdb", "inspect.xq"),
24
+ path.join(runtimesDir, "existdb", "kwic.xq"),
25
+ path.join(runtimesDir, "existdb", "mail.xq"),
26
+ path.join(runtimesDir, "existdb", "ngram.xq"),
27
+ path.join(runtimesDir, "existdb", "process.xq"),
28
+ path.join(runtimesDir, "existdb", "range.xq"),
29
+ path.join(runtimesDir, "existdb", "repo.xq"),
30
+ path.join(runtimesDir, "existdb", "request.xq"),
31
+ path.join(runtimesDir, "existdb", "response.xq"),
32
+ path.join(runtimesDir, "existdb", "scheduler.xq"),
33
+ path.join(runtimesDir, "existdb", "session.xq"),
34
+ path.join(runtimesDir, "existdb", "sm.xq"),
35
+ path.join(runtimesDir, "existdb", "sort.xq"),
36
+ path.join(runtimesDir, "existdb", "system.xq"),
37
+ path.join(runtimesDir, "existdb", "transform.xq"),
38
+ path.join(runtimesDir, "existdb", "util.xq"),
39
+ path.join(runtimesDir, "existdb", "validation.xq"),
40
+ path.join(runtimesDir, "existdb", "xmldb.xq"),
41
+ path.join(runtimesDir, "existdb", "xmldiff.xq"),
42
+ ],
43
+ };
44
+
45
+ const runtimeAnalysisCache = new Map<string, FileAnalysis>();
46
+
47
+ export function getRuntimeAnalyses(runtimes: string[]): FileAnalysis[] {
48
+ const results: FileAnalysis[] = [];
49
+ for (const runtime of runtimes) {
50
+ const filePaths = RUNTIME_FILES[runtime];
51
+ if (!filePaths) continue;
52
+ for (const filePath of filePaths) {
53
+ const cacheKey = filePath;
54
+ const cached = runtimeAnalysisCache.get(cacheKey);
55
+ if (cached) {
56
+ results.push(cached);
57
+ continue;
58
+ }
59
+ try {
60
+ const text = fs.readFileSync(filePath, "utf-8");
61
+ const analysis = analyze(text, `builtin:${runtime}`);
62
+ runtimeAnalysisCache.set(cacheKey, analysis);
63
+ results.push(analysis);
64
+ } catch {
65
+ // ignore missing or unreadable runtime files
66
+ }
67
+ }
68
+ }
69
+ return results;
70
+ }