solid-ui 3.1.3-5 → 3.1.3-7

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 (621) hide show
  1. package/dist/_virtual/~icons/lucide/chevron-down.cjs.js +1 -1
  2. package/dist/_virtual/~icons/lucide/chevron-down.esm.js +1 -0
  3. package/dist/_virtual/~icons/lucide/circle-user.cjs.js +1 -1
  4. package/dist/_virtual/~icons/lucide/circle-user.esm.js +1 -0
  5. package/dist/_virtual/~icons/lucide/log-in.cjs.js +1 -1
  6. package/dist/_virtual/~icons/lucide/log-in.esm.js +1 -0
  7. package/dist/_virtual/~icons/lucide/log-out.cjs.js +1 -1
  8. package/dist/_virtual/~icons/lucide/log-out.esm.js +1 -0
  9. package/dist/_virtual/~icons/lucide/user.cjs.js +1 -1
  10. package/dist/_virtual/~icons/lucide/user.esm.js +1 -0
  11. package/dist/_virtual/~icons/lucide/x.cjs.js +1 -1
  12. package/dist/_virtual/~icons/lucide/x.esm.js +1 -0
  13. package/dist/_virtual/~icons/svg-spinners/180-ring.cjs.js +1 -1
  14. package/dist/_virtual/~icons/svg-spinners/180-ring.esm.js +1 -0
  15. package/dist/acl/access-controller.cjs.js +1 -1
  16. package/dist/acl/access-controller.cjs.js.map +1 -1
  17. package/dist/acl/access-controller.esm.js.map +1 -1
  18. package/dist/acl/access-groups.cjs.js.map +1 -1
  19. package/dist/acl/access-groups.esm.js.map +1 -1
  20. package/dist/acl/acl-control.cjs.js +1 -1
  21. package/dist/acl/acl-control.cjs.js.map +1 -1
  22. package/dist/acl/acl-control.esm.js +1 -1
  23. package/dist/acl/acl-control.esm.js.map +1 -1
  24. package/dist/acl/acl.cjs.js.map +1 -1
  25. package/dist/acl/acl.esm.js.map +1 -1
  26. package/dist/acl/add-agent-buttons.cjs.js.map +1 -1
  27. package/dist/acl/add-agent-buttons.esm.js.map +1 -1
  28. package/dist/chat/bookmarks.cjs.js +1 -1
  29. package/dist/chat/bookmarks.cjs.js.map +1 -1
  30. package/dist/chat/bookmarks.esm.js +1 -1
  31. package/dist/chat/bookmarks.esm.js.map +1 -1
  32. package/dist/chat/chatLogic.cjs.js.map +1 -1
  33. package/dist/chat/chatLogic.esm.js.map +1 -1
  34. package/dist/chat/dateFolder.cjs.js +1 -1
  35. package/dist/chat/dateFolder.cjs.js.map +1 -1
  36. package/dist/chat/dateFolder.esm.js +1 -1
  37. package/dist/chat/dateFolder.esm.js.map +1 -1
  38. package/dist/chat/infinite.cjs.js +1 -1
  39. package/dist/chat/infinite.cjs.js.map +1 -1
  40. package/dist/chat/infinite.esm.js +1 -1
  41. package/dist/chat/infinite.esm.js.map +1 -1
  42. package/dist/chat/keys.cjs.js +1 -1
  43. package/dist/chat/keys.cjs.js.map +1 -1
  44. package/dist/chat/keys.esm.js +1 -1
  45. package/dist/chat/keys.esm.js.map +1 -1
  46. package/dist/chat/message.cjs.js +1 -1
  47. package/dist/chat/message.cjs.js.map +1 -1
  48. package/dist/chat/message.esm.js +24 -24
  49. package/dist/chat/message.esm.js.map +1 -1
  50. package/dist/chat/messageTools.cjs.js.map +1 -1
  51. package/dist/chat/messageTools.esm.js.map +1 -1
  52. package/dist/chat/signature.cjs.js +1 -1
  53. package/dist/chat/signature.cjs.js.map +1 -1
  54. package/dist/chat/signature.esm.js +1 -1
  55. package/dist/chunks/{menu-items-DKKcQrb6.js → DialogProvider-Bt65G0Tk.js} +157 -56
  56. package/dist/chunks/DialogProvider-Bt65G0Tk.js.map +1 -0
  57. package/dist/chunks/{account-B4BktCv0.js → account-BZ2rYQhV.js} +23 -26
  58. package/dist/chunks/account-BZ2rYQhV.js.map +1 -0
  59. package/dist/chunks/{auth-BPQUXz9Q.js → auth-RHyQ2iIl.js} +32 -29
  60. package/dist/chunks/auth-RHyQ2iIl.js.map +1 -0
  61. package/dist/chunks/{avatar-B5DCduCy.js → avatar-Jx8xm2Op.js} +8 -8
  62. package/dist/chunks/avatar-Jx8xm2Op.js.map +1 -0
  63. package/dist/chunks/{button-GHRF3psH.js → button-0s0lZdxm.js} +7 -7
  64. package/dist/chunks/{button-GHRF3psH.js.map → button-0s0lZdxm.js.map} +1 -1
  65. package/dist/chunks/chevron-down-ujxRg3MD.js +10 -0
  66. package/dist/chunks/chevron-down-ujxRg3MD.js.map +1 -0
  67. package/dist/chunks/chunk.K442ELDU-TtQSV9g1.js +1516 -0
  68. package/dist/chunks/chunk.K442ELDU-TtQSV9g1.js.map +1 -0
  69. package/dist/chunks/combobox-Cxi8xUMn.js +473 -0
  70. package/dist/chunks/combobox-Cxi8xUMn.js.map +1 -0
  71. package/dist/chunks/{combobox-option-CW1ZwMC7.js → combobox-option-DiR3VpyT.js} +4 -4
  72. package/dist/chunks/{combobox-option-CW1ZwMC7.js.map → combobox-option-DiR3VpyT.js.map} +1 -1
  73. package/dist/chunks/{components-Dlw2zOvI.js → components-C1LEhsaK.js} +85 -21
  74. package/dist/chunks/components-C1LEhsaK.js.map +1 -0
  75. package/dist/chunks/{create-context-IPEkU7ze.js → context-uE5jJlS0.js} +8 -4
  76. package/dist/chunks/context-uE5jJlS0.js.map +1 -0
  77. package/dist/chunks/{decorators-CJJL4XBH.js → decorators-BiCkPd_3.js} +28 -35
  78. package/dist/chunks/decorators-BiCkPd_3.js.map +1 -0
  79. package/dist/chunks/{dialog-DmDA1aY8.js → dialog-BAzrHJ8w.js} +106 -64
  80. package/dist/chunks/dialog-BAzrHJ8w.js.map +1 -0
  81. package/dist/chunks/{dialog-content-C8VhHg5G.js → dialog-content-fdJrkCyB.js} +3 -3
  82. package/dist/chunks/{dialog-content-C8VhHg5G.js.map → dialog-content-fdJrkCyB.js.map} +1 -1
  83. package/dist/chunks/{dialog-footer-CtHFoTZS.js → dialog-footer-Bs_p2Nn9.js} +3 -3
  84. package/dist/chunks/{dialog-footer-CtHFoTZS.js.map → dialog-footer-Bs_p2Nn9.js.map} +1 -1
  85. package/dist/chunks/{dialog-header-D9jjujFf.js → dialog-header-CWIAAoDo.js} +3 -3
  86. package/dist/chunks/{dialog-header-D9jjujFf.js.map → dialog-header-CWIAAoDo.js.map} +1 -1
  87. package/dist/chunks/{dialogs-root-C4igEIk0.js → dialogs-root-Cv932Aqm.js} +10 -9
  88. package/dist/chunks/dialogs-root-Cv932Aqm.js.map +1 -0
  89. package/dist/chunks/{footer-CS8u8ycB.js → footer-D64T6XLO.js} +8 -8
  90. package/dist/chunks/{footer-CS8u8ycB.js.map → footer-D64T6XLO.js.map} +1 -1
  91. package/dist/chunks/{guard-BIc50Lps.js → guard-CjUBGVDk.js} +5 -5
  92. package/dist/chunks/{guard-BIc50Lps.js.map → guard-CjUBGVDk.js.map} +1 -1
  93. package/dist/chunks/{header-0TLBh_PG.js → header-COBaJDdB.js} +41 -41
  94. package/dist/chunks/{header-0TLBh_PG.js.map → header-COBaJDdB.js.map} +1 -1
  95. package/dist/chunks/{headerFooterHelpers-5LYv-0Rt.js → headerFooterHelpers-7O_ln1QD.js} +2 -2
  96. package/dist/chunks/{headerFooterHelpers-5LYv-0Rt.js.map → headerFooterHelpers-7O_ln1QD.js.map} +1 -1
  97. package/dist/chunks/{combobox-eju-wypA.js → input-BF224Jid.js} +114 -113
  98. package/dist/chunks/input-BF224Jid.js.map +1 -0
  99. package/dist/chunks/{jsonld-DZG2v1pE.js → jsonld-DRZuoyoU.js} +54 -54
  100. package/dist/chunks/{jsonld-DZG2v1pE.js.map → jsonld-DRZuoyoU.js.map} +1 -1
  101. package/dist/chunks/{lit-CC2G_f_C.js → lit-C4H1jI4q.js} +110 -95
  102. package/dist/chunks/lit-C4H1jI4q.js.map +1 -0
  103. package/dist/chunks/{login-button-BKp1-O2q.js → login-button-DPeMi00d.js} +10 -7
  104. package/dist/chunks/login-button-DPeMi00d.js.map +1 -0
  105. package/dist/chunks/{logout-button-DlU-q-o5.js → logout-button-CbiLE7jO.js} +10 -7
  106. package/dist/chunks/logout-button-CbiLE7jO.js.map +1 -0
  107. package/dist/chunks/menu-DNcuV-1J.js +1741 -0
  108. package/dist/chunks/menu-DNcuV-1J.js.map +1 -0
  109. package/dist/chunks/{menu-item-DoTy3MUu.js → menu-item-Ck0l-uEI.js} +69 -55
  110. package/dist/chunks/menu-item-Ck0l-uEI.js.map +1 -0
  111. package/dist/chunks/{photo-capture-COoxZRW_.js → photo-capture-tiBsdSbA.js} +20 -20
  112. package/dist/chunks/{photo-capture-COoxZRW_.js.map → photo-capture-tiBsdSbA.js.map} +1 -1
  113. package/dist/chunks/{provider-uRz_fGWb.js → provider-C4eSzopG.js} +7 -7
  114. package/dist/chunks/{provider-uRz_fGWb.js.map → provider-C4eSzopG.js.map} +1 -1
  115. package/dist/chunks/select-D8dW53pr.js +292 -0
  116. package/dist/chunks/select-D8dW53pr.js.map +1 -0
  117. package/dist/chunks/select-option-B-6ULCpQ.js +195 -0
  118. package/dist/chunks/select-option-B-6ULCpQ.js.map +1 -0
  119. package/dist/chunks/{signup-button-BC4LmOXx.js → signup-button-BfIxbpwa.js} +10 -7
  120. package/dist/chunks/signup-button-BfIxbpwa.js.map +1 -0
  121. package/dist/chunks/{solid-logic.esm-7q6hmfIF.js → solid-logic.esm-T70qfHAr.js} +2521 -2504
  122. package/dist/chunks/solid-logic.esm-T70qfHAr.js.map +1 -0
  123. package/dist/chunks/{src-f1UXhE9W.js → src-Bx4GAnWq.js} +16 -17
  124. package/dist/chunks/{src-f1UXhE9W.js.map → src-Bx4GAnWq.js.map} +1 -1
  125. package/dist/components/account/Account.cjs.js +9 -11
  126. package/dist/components/account/Account.cjs.js.map +1 -1
  127. package/dist/components/account/Account.d.ts.map +1 -1
  128. package/dist/components/account/Account.esm.js +8 -11
  129. package/dist/components/account/Account.esm.js.map +1 -1
  130. package/dist/components/account/Account.styles.cjs.js +1 -1
  131. package/dist/components/account/Account.styles.cjs.js.map +1 -1
  132. package/dist/components/account/Account.styles.esm.js +1 -1
  133. package/dist/components/account/Account.styles.esm.js.map +1 -1
  134. package/dist/components/account/index.cjs.js +1 -1
  135. package/dist/components/account/index.esm.js +1 -1
  136. package/dist/components/account.js +1 -1
  137. package/dist/components/avatar/Avatar.cjs.js +1 -1
  138. package/dist/components/avatar/Avatar.cjs.js.map +1 -1
  139. package/dist/components/avatar/Avatar.esm.js +1 -1
  140. package/dist/components/avatar/Avatar.styles.cjs.js +1 -1
  141. package/dist/components/avatar/Avatar.styles.cjs.js.map +1 -1
  142. package/dist/components/avatar/Avatar.styles.esm.js +1 -1
  143. package/dist/components/avatar/Avatar.styles.esm.js.map +1 -1
  144. package/dist/components/avatar/index.cjs.js +1 -1
  145. package/dist/components/avatar/index.esm.js +1 -1
  146. package/dist/components/avatar.js +1 -1
  147. package/dist/components/button/Button.cjs.js +1 -1
  148. package/dist/components/button/Button.cjs.js.map +1 -1
  149. package/dist/components/button/Button.esm.js +1 -1
  150. package/dist/components/button/Button.esm.js.map +1 -1
  151. package/dist/components/button/index.cjs.js +1 -1
  152. package/dist/components/button/index.esm.js +3 -3
  153. package/dist/components/button.js +1 -1
  154. package/dist/components/combobox/Combobox.cjs.js +56 -15
  155. package/dist/components/combobox/Combobox.cjs.js.map +1 -1
  156. package/dist/components/combobox/Combobox.d.ts +27 -6
  157. package/dist/components/combobox/Combobox.d.ts.map +1 -1
  158. package/dist/components/combobox/Combobox.esm.js +257 -87
  159. package/dist/components/combobox/Combobox.esm.js.map +1 -1
  160. package/dist/components/combobox/Combobox.styles.cjs.js +1 -1
  161. package/dist/components/combobox/Combobox.styles.cjs.js.map +1 -1
  162. package/dist/components/combobox/Combobox.styles.esm.js +1 -1
  163. package/dist/components/combobox/Combobox.styles.esm.js.map +1 -1
  164. package/dist/components/combobox/index.cjs.js +1 -1
  165. package/dist/components/combobox/index.esm.js +1 -1
  166. package/dist/components/combobox-option/ComboboxOption.cjs.js +1 -1
  167. package/dist/components/combobox-option/ComboboxOption.cjs.js.map +1 -1
  168. package/dist/components/combobox-option/ComboboxOption.esm.js +1 -1
  169. package/dist/components/combobox-option/index.cjs.js +1 -1
  170. package/dist/components/combobox-option/index.esm.js +1 -1
  171. package/dist/components/combobox-option.js +1 -1
  172. package/dist/components/combobox.js +1 -1
  173. package/dist/components/dialog/Dialog.cjs.js +2 -2
  174. package/dist/components/dialog/Dialog.cjs.js.map +1 -1
  175. package/dist/components/dialog/Dialog.d.ts +3 -1
  176. package/dist/components/dialog/Dialog.d.ts.map +1 -1
  177. package/dist/components/dialog/Dialog.esm.js +60 -61
  178. package/dist/components/dialog/Dialog.esm.js.map +1 -1
  179. package/dist/components/dialog/index.cjs.js +1 -1
  180. package/dist/components/dialog/index.esm.js +1 -1
  181. package/dist/components/dialog-content/DialogContent.cjs.js +1 -1
  182. package/dist/components/dialog-content/DialogContent.cjs.js.map +1 -1
  183. package/dist/components/dialog-content/DialogContent.esm.js +1 -1
  184. package/dist/components/dialog-content/DialogContent.esm.js.map +1 -1
  185. package/dist/components/dialog-content/index.cjs.js +1 -1
  186. package/dist/components/dialog-content/index.esm.js +1 -1
  187. package/dist/components/dialog-content.js +1 -1
  188. package/dist/components/dialog-footer/DialogFooter.cjs.js +1 -1
  189. package/dist/components/dialog-footer/DialogFooter.cjs.js.map +1 -1
  190. package/dist/components/dialog-footer/DialogFooter.esm.js +1 -1
  191. package/dist/components/dialog-footer/DialogFooter.esm.js.map +1 -1
  192. package/dist/components/dialog-footer/index.cjs.js +1 -1
  193. package/dist/components/dialog-footer/index.esm.js +1 -1
  194. package/dist/components/dialog-footer.js +1 -1
  195. package/dist/components/dialog-header/DialogHeader.cjs.js +1 -1
  196. package/dist/components/dialog-header/DialogHeader.cjs.js.map +1 -1
  197. package/dist/components/dialog-header/DialogHeader.esm.js +1 -1
  198. package/dist/components/dialog-header/DialogHeader.esm.js.map +1 -1
  199. package/dist/components/dialog-header/index.cjs.js +1 -1
  200. package/dist/components/dialog-header/index.esm.js +1 -1
  201. package/dist/components/dialog-header.js +1 -1
  202. package/dist/components/dialog-provider/DialogProvider.cjs.js +1 -1
  203. package/dist/components/dialog-provider/DialogProvider.cjs.js.map +1 -1
  204. package/dist/components/dialog-provider/DialogProvider.esm.js +2 -2
  205. package/dist/components/dialog-provider/DialogProvider.esm.js.map +1 -1
  206. package/dist/components/dialog-provider/index.cjs.js +1 -1
  207. package/dist/components/dialog-provider/index.esm.js +1 -1
  208. package/dist/components/dialog-provider.js +1 -1
  209. package/dist/components/dialog.js +1 -1
  210. package/dist/components/dialogs-root/DialogsRoot.cjs.js +2 -2
  211. package/dist/components/dialogs-root/DialogsRoot.cjs.js.map +1 -1
  212. package/dist/components/dialogs-root/DialogsRoot.d.ts.map +1 -1
  213. package/dist/components/dialogs-root/DialogsRoot.esm.js +5 -3
  214. package/dist/components/dialogs-root/DialogsRoot.esm.js.map +1 -1
  215. package/dist/components/dialogs-root/index.cjs.js +1 -1
  216. package/dist/components/dialogs-root/index.esm.js +1 -1
  217. package/dist/components/dialogs-root.js +1 -1
  218. package/dist/components/footer.js +1 -1
  219. package/dist/components/guard/Guard.cjs.js +1 -1
  220. package/dist/components/guard/Guard.cjs.js.map +1 -1
  221. package/dist/components/guard/Guard.esm.js +1 -1
  222. package/dist/components/guard/index.cjs.js +1 -1
  223. package/dist/components/guard/index.esm.js +1 -1
  224. package/dist/components/guard.js +1 -1
  225. package/dist/components/header.js +1 -1
  226. package/dist/components/index.cjs.js +1 -1
  227. package/dist/components/index.esm.js +2 -1
  228. package/dist/components/input/Input.cjs.js +17 -0
  229. package/dist/components/input/Input.cjs.js.map +1 -0
  230. package/dist/components/input/Input.d.ts +17 -0
  231. package/dist/components/input/Input.d.ts.map +1 -0
  232. package/dist/{chunks/menu-DCsLCND4.js → components/input/Input.esm.js} +157 -96
  233. package/dist/components/input/Input.esm.js.map +1 -0
  234. package/dist/components/input/Input.stories.d.ts +43 -0
  235. package/dist/components/input/Input.stories.d.ts.map +1 -0
  236. package/dist/components/input/Input.styles.cjs.js +2 -0
  237. package/dist/components/input/Input.styles.cjs.js.map +1 -0
  238. package/dist/components/input/Input.styles.esm.js +7 -0
  239. package/dist/components/input/Input.styles.esm.js.map +1 -0
  240. package/dist/components/input/index.cjs.js +2 -0
  241. package/dist/components/input/index.cjs.js.map +1 -0
  242. package/dist/components/input/index.d.ts +4 -0
  243. package/dist/components/input/index.d.ts.map +1 -0
  244. package/dist/components/input/index.esm.js +7 -0
  245. package/dist/components/input/index.esm.js.map +1 -0
  246. package/dist/components/input.js +2 -0
  247. package/dist/components/login-button/LoginButton.cjs.js +1 -1
  248. package/dist/components/login-button/LoginButton.cjs.js.map +1 -1
  249. package/dist/components/login-button/LoginButton.d.ts +1 -0
  250. package/dist/components/login-button/LoginButton.d.ts.map +1 -1
  251. package/dist/components/login-button/LoginButton.esm.js +5 -2
  252. package/dist/components/login-button/LoginButton.esm.js.map +1 -1
  253. package/dist/components/login-button/index.cjs.js +1 -1
  254. package/dist/components/login-button/index.esm.js +1 -1
  255. package/dist/components/login-button.js +1 -1
  256. package/dist/components/login-modal/LoginModal.cjs.js +1 -1
  257. package/dist/components/login-modal/LoginModal.cjs.js.map +1 -1
  258. package/dist/components/login-modal/LoginModal.esm.js +1 -1
  259. package/dist/components/login-modal/index.cjs.js +1 -1
  260. package/dist/components/login-modal/index.esm.js +1 -1
  261. package/dist/components/login-modal.js +1 -1
  262. package/dist/components/logout-button/LogoutButton.cjs.js +1 -1
  263. package/dist/components/logout-button/LogoutButton.cjs.js.map +1 -1
  264. package/dist/components/logout-button/LogoutButton.d.ts +1 -0
  265. package/dist/components/logout-button/LogoutButton.d.ts.map +1 -1
  266. package/dist/components/logout-button/LogoutButton.esm.js +5 -2
  267. package/dist/components/logout-button/LogoutButton.esm.js.map +1 -1
  268. package/dist/components/logout-button/index.cjs.js +1 -1
  269. package/dist/components/logout-button/index.esm.js +1 -1
  270. package/dist/components/logout-button.js +1 -1
  271. package/dist/components/menu/Menu.cjs.js +13 -8
  272. package/dist/components/menu/Menu.cjs.js.map +1 -1
  273. package/dist/components/menu/Menu.d.ts +13 -8
  274. package/dist/components/menu/Menu.d.ts.map +1 -1
  275. package/dist/components/menu/Menu.esm.js +132 -88
  276. package/dist/components/menu/Menu.esm.js.map +1 -1
  277. package/dist/components/menu/Menu.stories.d.ts.map +1 -1
  278. package/dist/components/menu/Menu.styles.cjs.js +2 -0
  279. package/dist/components/menu/Menu.styles.cjs.js.map +1 -0
  280. package/dist/components/menu/Menu.styles.esm.js +7 -0
  281. package/dist/components/menu/Menu.styles.esm.js.map +1 -0
  282. package/dist/components/menu/index.cjs.js +1 -1
  283. package/dist/components/menu/index.esm.js +1 -1
  284. package/dist/components/menu-item/MenuItem.cjs.js +5 -7
  285. package/dist/components/menu-item/MenuItem.cjs.js.map +1 -1
  286. package/dist/components/menu-item/MenuItem.d.ts +2 -0
  287. package/dist/components/menu-item/MenuItem.d.ts.map +1 -1
  288. package/dist/components/menu-item/MenuItem.esm.js +61 -47
  289. package/dist/components/menu-item/MenuItem.esm.js.map +1 -1
  290. package/dist/components/menu-item/MenuItem.styles.cjs.js +1 -1
  291. package/dist/components/menu-item/MenuItem.styles.cjs.js.map +1 -1
  292. package/dist/components/menu-item/MenuItem.styles.esm.js +1 -1
  293. package/dist/components/menu-item/MenuItem.styles.esm.js.map +1 -1
  294. package/dist/components/menu-item/index.cjs.js +1 -1
  295. package/dist/components/menu-item/index.esm.js +1 -1
  296. package/dist/components/menu-item.js +1 -1
  297. package/dist/components/menu.js +1 -1
  298. package/dist/components/photo-capture.js +1 -1
  299. package/dist/components/provider/Provider.cjs.js +1 -1
  300. package/dist/components/provider/Provider.cjs.js.map +1 -1
  301. package/dist/components/provider/Provider.esm.js +1 -1
  302. package/dist/components/provider/index.cjs.js +1 -1
  303. package/dist/components/provider/index.esm.js +1 -1
  304. package/dist/components/provider.js +1 -1
  305. package/dist/components/select/Select.cjs.js +21 -0
  306. package/dist/components/select/Select.cjs.js.map +1 -0
  307. package/dist/components/select/Select.d.ts +15 -0
  308. package/dist/components/select/Select.d.ts.map +1 -0
  309. package/dist/components/{menu-items/MenuItems.esm.js → select/Select.esm.js} +140 -65
  310. package/dist/components/select/Select.esm.js.map +1 -0
  311. package/dist/components/select/Select.stories.d.ts +27 -0
  312. package/dist/components/select/Select.stories.d.ts.map +1 -0
  313. package/dist/components/select/Select.styles.cjs.js +2 -0
  314. package/dist/components/select/Select.styles.cjs.js.map +1 -0
  315. package/dist/components/select/Select.styles.esm.js +7 -0
  316. package/dist/components/select/Select.styles.esm.js.map +1 -0
  317. package/dist/components/select/index.cjs.js +2 -1
  318. package/dist/components/select/index.cjs.js.map +1 -0
  319. package/dist/components/select/index.d.ts +3 -1
  320. package/dist/components/select/index.d.ts.map +1 -1
  321. package/dist/components/select/index.esm.js +7 -3
  322. package/dist/components/select/index.esm.js.map +1 -0
  323. package/dist/components/select-option/SelectOption.cjs.js +2 -0
  324. package/dist/components/select-option/SelectOption.cjs.js.map +1 -0
  325. package/dist/components/select-option/SelectOption.d.ts +6 -0
  326. package/dist/components/select-option/SelectOption.d.ts.map +1 -0
  327. package/dist/components/select-option/SelectOption.esm.js +194 -0
  328. package/dist/components/select-option/SelectOption.esm.js.map +1 -0
  329. package/dist/components/select-option/index.cjs.js +2 -0
  330. package/dist/components/select-option/index.cjs.js.map +1 -0
  331. package/dist/components/select-option/index.d.ts +4 -0
  332. package/dist/components/select-option/index.d.ts.map +1 -0
  333. package/dist/components/select-option/index.esm.js +7 -0
  334. package/dist/components/select-option/index.esm.js.map +1 -0
  335. package/dist/components/select-option.js +2 -0
  336. package/dist/components/select.js +2 -2
  337. package/dist/components/signup-button/SignupButton.cjs.js +1 -1
  338. package/dist/components/signup-button/SignupButton.cjs.js.map +1 -1
  339. package/dist/components/signup-button/SignupButton.d.ts +1 -0
  340. package/dist/components/signup-button/SignupButton.d.ts.map +1 -1
  341. package/dist/components/signup-button/SignupButton.esm.js +5 -2
  342. package/dist/components/signup-button/SignupButton.esm.js.map +1 -1
  343. package/dist/components/signup-button/index.cjs.js +1 -1
  344. package/dist/components/signup-button/index.esm.js +1 -1
  345. package/dist/components/signup-button.js +1 -1
  346. package/dist/components.js +24 -23
  347. package/dist/create/create.cjs.js.map +1 -1
  348. package/dist/create/create.esm.js.map +1 -1
  349. package/dist/create/index.cjs.js.map +1 -1
  350. package/dist/footer/index.cjs.js +1 -1
  351. package/dist/footer/index.esm.js +1 -1
  352. package/dist/header/index.cjs.js +1 -1
  353. package/dist/header/index.cjs.js.map +1 -1
  354. package/dist/header/index.esm.js +1 -1
  355. package/dist/header/index.esm.js.map +1 -1
  356. package/dist/index.cjs.js +1 -1
  357. package/dist/index.cjs.js.map +1 -1
  358. package/dist/index.d.ts +0 -1
  359. package/dist/index.d.ts.map +1 -1
  360. package/dist/index.esm.js +13 -13
  361. package/dist/index.esm.js.map +1 -1
  362. package/dist/index.js +7 -9
  363. package/dist/lib/auth/SolidAuth.cjs.js.map +1 -1
  364. package/dist/lib/auth/SolidAuth.esm.js.map +1 -1
  365. package/dist/lib/auth/context.cjs.js.map +1 -1
  366. package/dist/lib/auth/index.cjs.js +1 -1
  367. package/dist/lib/auth/index.esm.js +5 -4
  368. package/dist/lib/components/ids.cjs.js.map +1 -1
  369. package/dist/lib/components/ids.esm.js.map +1 -1
  370. package/dist/lib/components/index.cjs.js +1 -1
  371. package/dist/lib/components/index.d.ts +1 -0
  372. package/dist/lib/components/index.d.ts.map +1 -1
  373. package/dist/lib/components/index.esm.js +7 -3
  374. package/dist/lib/components/traits/DialogTrait.cjs.js +2 -0
  375. package/dist/lib/components/traits/DialogTrait.cjs.js.map +1 -0
  376. package/dist/lib/components/traits/DialogTrait.d.ts +13 -0
  377. package/dist/lib/components/traits/DialogTrait.d.ts.map +1 -0
  378. package/dist/lib/components/traits/DialogTrait.esm.js +16 -0
  379. package/dist/lib/components/traits/DialogTrait.esm.js.map +1 -0
  380. package/dist/lib/components/traits/InputTrait.cjs.js +2 -0
  381. package/dist/lib/components/traits/InputTrait.cjs.js.map +1 -0
  382. package/dist/lib/components/traits/InputTrait.d.ts +30 -0
  383. package/dist/lib/components/traits/InputTrait.d.ts.map +1 -0
  384. package/dist/lib/components/traits/InputTrait.esm.js +45 -0
  385. package/dist/lib/components/traits/InputTrait.esm.js.map +1 -0
  386. package/dist/lib/components/traits/WebComponentTrait.d.ts +11 -0
  387. package/dist/lib/components/traits/WebComponentTrait.d.ts.map +1 -0
  388. package/dist/lib/components/traits/index.cjs.js +1 -0
  389. package/dist/lib/components/traits/index.d.ts +6 -0
  390. package/dist/lib/components/traits/index.d.ts.map +1 -0
  391. package/dist/lib/components/traits/index.esm.js +3 -0
  392. package/dist/lib/components/web-component/WebComponent.cjs.js +1 -1
  393. package/dist/lib/components/web-component/WebComponent.cjs.js.map +1 -1
  394. package/dist/lib/components/web-component/WebComponent.d.ts +7 -0
  395. package/dist/lib/components/web-component/WebComponent.d.ts.map +1 -1
  396. package/dist/lib/components/web-component/WebComponent.esm.js +17 -6
  397. package/dist/lib/components/web-component/WebComponent.esm.js.map +1 -1
  398. package/dist/lib/components/web-component/WebComponent.styles.cjs.js.map +1 -1
  399. package/dist/lib/components/web-component/WebComponent.styles.esm.js.map +1 -1
  400. package/dist/lib/components/web-component/index.cjs.js +1 -1
  401. package/dist/lib/components/web-component/index.esm.js +2 -1
  402. package/dist/lib/dialogs/Dialog.cjs.js +1 -1
  403. package/dist/lib/dialogs/Dialog.cjs.js.map +1 -1
  404. package/dist/lib/dialogs/Dialog.d.ts +6 -1
  405. package/dist/lib/dialogs/Dialog.d.ts.map +1 -1
  406. package/dist/lib/dialogs/Dialog.esm.js +6 -2
  407. package/dist/lib/dialogs/Dialog.esm.js.map +1 -1
  408. package/dist/lib/dialogs/context.cjs.js +1 -1
  409. package/dist/lib/dialogs/context.cjs.js.map +1 -1
  410. package/dist/lib/dialogs/context.d.ts +3 -0
  411. package/dist/lib/dialogs/context.d.ts.map +1 -1
  412. package/dist/lib/dialogs/context.esm.js +4 -3
  413. package/dist/lib/dialogs/context.esm.js.map +1 -1
  414. package/dist/lib/dialogs/events/close-dialog.cjs.js +1 -1
  415. package/dist/lib/dialogs/events/close-dialog.cjs.js.map +1 -1
  416. package/dist/lib/dialogs/events/close-dialog.d.ts +2 -1
  417. package/dist/lib/dialogs/events/close-dialog.d.ts.map +1 -1
  418. package/dist/lib/dialogs/events/close-dialog.esm.js +3 -2
  419. package/dist/lib/dialogs/events/close-dialog.esm.js.map +1 -1
  420. package/dist/lib/dialogs/helpers.cjs.js +1 -1
  421. package/dist/lib/dialogs/helpers.cjs.js.map +1 -1
  422. package/dist/lib/dialogs/helpers.d.ts +2 -1
  423. package/dist/lib/dialogs/helpers.d.ts.map +1 -1
  424. package/dist/lib/dialogs/helpers.esm.js +3 -3
  425. package/dist/lib/dialogs/helpers.esm.js.map +1 -1
  426. package/dist/lib/dialogs/index.cjs.js +1 -1
  427. package/dist/lib/dialogs/index.esm.js +6 -5
  428. package/dist/lib/log.cjs.js +1 -1
  429. package/dist/lib/log.cjs.js.map +1 -1
  430. package/dist/lib/log.esm.js +1 -1
  431. package/dist/lib/log.esm.js.map +1 -1
  432. package/dist/lib/messageArea.cjs.js.map +1 -1
  433. package/dist/lib/messageArea.esm.js.map +1 -1
  434. package/dist/lib/ns.cjs.js.map +1 -1
  435. package/dist/lib/pad.cjs.js +1 -1
  436. package/dist/lib/pad.cjs.js.map +1 -1
  437. package/dist/lib/pad.esm.js +1 -1
  438. package/dist/lib/pad.esm.js.map +1 -1
  439. package/dist/lib/participation.cjs.js.map +1 -1
  440. package/dist/lib/participation.esm.js.map +1 -1
  441. package/dist/lib/preferences.cjs.js +1 -1
  442. package/dist/lib/preferences.cjs.js.map +1 -1
  443. package/dist/lib/preferences.esm.js +1 -1
  444. package/dist/lib/preferences.esm.js.map +1 -1
  445. package/dist/lib/table.cjs.js.map +1 -1
  446. package/dist/lib/table.esm.js.map +1 -1
  447. package/dist/lib/tabs.cjs.js +1 -1
  448. package/dist/lib/tabs.cjs.js.map +1 -1
  449. package/dist/lib/tabs.esm.js +1 -1
  450. package/dist/lib/tabs.esm.js.map +1 -1
  451. package/dist/loader.js +7 -9
  452. package/dist/login/login.cjs.js +1 -1
  453. package/dist/login/login.cjs.js.map +1 -1
  454. package/dist/login/login.esm.js +1 -1
  455. package/dist/login/login.esm.js.map +1 -1
  456. package/dist/matrix/index.cjs.js.map +1 -1
  457. package/dist/matrix/matrix.cjs.js.map +1 -1
  458. package/dist/matrix/matrix.esm.js.map +1 -1
  459. package/dist/media/media-capture.cjs.js.map +1 -1
  460. package/dist/media/media-capture.esm.js.map +1 -1
  461. package/dist/signup/signup.cjs.js.map +1 -1
  462. package/dist/signup/signup.esm.js.map +1 -1
  463. package/dist/solid-ui.js +1053 -446
  464. package/dist/solid-ui.min.js +1053 -446
  465. package/dist/solid-ui.min.js.map +1 -1
  466. package/dist/theme.css +1 -1
  467. package/dist/utils/headerFooterHelpers.cjs.js.map +1 -1
  468. package/dist/utils/headerFooterHelpers.esm.js.map +1 -1
  469. package/dist/utils/index.cjs.js +2 -2
  470. package/dist/utils/index.cjs.js.map +1 -1
  471. package/dist/utils/index.esm.js +1 -1
  472. package/dist/utils/index.esm.js.map +1 -1
  473. package/dist/utils/keyHelpers/accessData.cjs.js +1 -1
  474. package/dist/utils/keyHelpers/accessData.cjs.js.map +1 -1
  475. package/dist/utils/keyHelpers/accessData.esm.js +1 -1
  476. package/dist/utils/keyHelpers/accessData.esm.js.map +1 -1
  477. package/dist/utils/keyHelpers/acl.cjs.js.map +1 -1
  478. package/dist/utils/keyHelpers/acl.esm.js.map +1 -1
  479. package/dist/utils/keyHelpers/otherHelpers.cjs.js.map +1 -1
  480. package/dist/utils/keyHelpers/otherHelpers.esm.js.map +1 -1
  481. package/dist/utils/label.cjs.js.map +1 -1
  482. package/dist/utils/label.esm.js.map +1 -1
  483. package/dist/v2/components/auth/loginButton/LoginButton.cjs.js.map +1 -1
  484. package/dist/v2/components/auth/loginButton/LoginButton.esm.js.map +1 -1
  485. package/dist/v2/components/auth/loginButton/downArrow.cjs.js.map +1 -1
  486. package/dist/v2/components/auth/loginButton/index.cjs.js +1 -1
  487. package/dist/v2/components/auth/loginButton/index.esm.js +1 -0
  488. package/dist/v2/components/auth/signupButton/index.cjs.js +1 -1
  489. package/dist/v2/components/auth/signupButton/index.esm.js +1 -0
  490. package/dist/v2/components/layout/footer/index.cjs.js +1 -1
  491. package/dist/v2/components/layout/footer/index.esm.js +1 -0
  492. package/dist/v2/components/layout/header/Header.cjs.js.map +1 -1
  493. package/dist/v2/components/layout/header/Header.esm.js.map +1 -1
  494. package/dist/v2/components/layout/header/index.cjs.js +1 -1
  495. package/dist/v2/components/layout/header/index.esm.js +1 -0
  496. package/dist/v2/components/media/photoCapture/PhotoCapture.cjs.js.map +1 -1
  497. package/dist/v2/components/media/photoCapture/PhotoCapture.esm.js.map +1 -1
  498. package/dist/v2/components/media/photoCapture/index.cjs.js +1 -1
  499. package/dist/v2/components/media/photoCapture/index.esm.js +1 -0
  500. package/dist/widgets/buttons/iconLinks.cjs.js.map +1 -1
  501. package/dist/widgets/buttons/iconLinks.esm.js.map +1 -1
  502. package/dist/widgets/buttons.cjs.js.map +1 -1
  503. package/dist/widgets/buttons.esm.js.map +1 -1
  504. package/dist/widgets/dragAndDrop.cjs.js.map +1 -1
  505. package/dist/widgets/dragAndDrop.esm.js.map +1 -1
  506. package/dist/widgets/error.cjs.js.map +1 -1
  507. package/dist/widgets/error.esm.js.map +1 -1
  508. package/dist/widgets/forms/autocomplete/autocompleteField.cjs.js.map +1 -1
  509. package/dist/widgets/forms/autocomplete/autocompleteField.esm.js.map +1 -1
  510. package/dist/widgets/forms/autocomplete/autocompletePicker.cjs.js.map +1 -1
  511. package/dist/widgets/forms/autocomplete/autocompletePicker.esm.js.map +1 -1
  512. package/dist/widgets/forms/autocomplete/language.cjs.js +1 -1
  513. package/dist/widgets/forms/autocomplete/language.cjs.js.map +1 -1
  514. package/dist/widgets/forms/autocomplete/language.esm.js +1 -1
  515. package/dist/widgets/forms/autocomplete/language.esm.js.map +1 -1
  516. package/dist/widgets/forms/autocomplete/publicData.cjs.js +1 -1
  517. package/dist/widgets/forms/autocomplete/publicData.cjs.js.map +1 -1
  518. package/dist/widgets/forms/autocomplete/publicData.esm.js +1 -1
  519. package/dist/widgets/forms/autocomplete/publicData.esm.js.map +1 -1
  520. package/dist/widgets/forms/basic.cjs.js.map +1 -1
  521. package/dist/widgets/forms/basic.esm.js.map +1 -1
  522. package/dist/widgets/forms/fieldFunction.cjs.js.map +1 -1
  523. package/dist/widgets/forms/fieldParams.cjs.js.map +1 -1
  524. package/dist/widgets/forms/fieldParams.esm.js.map +1 -1
  525. package/dist/widgets/forms/formStyle.cjs.js.map +1 -1
  526. package/dist/widgets/forms/formStyle.esm.js.map +1 -1
  527. package/dist/widgets/forms.cjs.js +1 -1
  528. package/dist/widgets/forms.cjs.js.map +1 -1
  529. package/dist/widgets/forms.esm.js +1 -1
  530. package/dist/widgets/forms.esm.js.map +1 -1
  531. package/dist/widgets/index.cjs.js +1 -1
  532. package/dist/widgets/index.esm.js +65 -65
  533. package/dist/widgets/multiSelect.cjs.js.map +1 -1
  534. package/dist/widgets/multiSelect.esm.js.map +1 -1
  535. package/dist/widgets/peoplePicker.cjs.js.map +1 -1
  536. package/dist/widgets/peoplePicker.esm.js.map +1 -1
  537. package/dist/widgets/widgetHelpers.cjs.js.map +1 -1
  538. package/dist/widgets/widgetHelpers.esm.js.map +1 -1
  539. package/package.json +9 -10
  540. package/dist/chunks/DialogProvider-BbWGIFN5.js +0 -211
  541. package/dist/chunks/DialogProvider-BbWGIFN5.js.map +0 -1
  542. package/dist/chunks/account-B4BktCv0.js.map +0 -1
  543. package/dist/chunks/auth-BPQUXz9Q.js.map +0 -1
  544. package/dist/chunks/avatar-B5DCduCy.js.map +0 -1
  545. package/dist/chunks/close-dialog-qpl1X44Q.js +0 -14
  546. package/dist/chunks/close-dialog-qpl1X44Q.js.map +0 -1
  547. package/dist/chunks/combobox-eju-wypA.js.map +0 -1
  548. package/dist/chunks/components-Dlw2zOvI.js.map +0 -1
  549. package/dist/chunks/consume-BefsVEGX.js +0 -49
  550. package/dist/chunks/consume-BefsVEGX.js.map +0 -1
  551. package/dist/chunks/context-ChcZyr30.js +0 -7
  552. package/dist/chunks/context-ChcZyr30.js.map +0 -1
  553. package/dist/chunks/context-ImtIQIYP.js +0 -7
  554. package/dist/chunks/context-ImtIQIYP.js.map +0 -1
  555. package/dist/chunks/create-context-IPEkU7ze.js.map +0 -1
  556. package/dist/chunks/decorators-CJJL4XBH.js.map +0 -1
  557. package/dist/chunks/dialog-DmDA1aY8.js.map +0 -1
  558. package/dist/chunks/dialogs-root-C4igEIk0.js.map +0 -1
  559. package/dist/chunks/lit-CC2G_f_C.js.map +0 -1
  560. package/dist/chunks/login-button-BKp1-O2q.js.map +0 -1
  561. package/dist/chunks/logout-button-DlU-q-o5.js.map +0 -1
  562. package/dist/chunks/menu-DCsLCND4.js.map +0 -1
  563. package/dist/chunks/menu-item-DoTy3MUu.js.map +0 -1
  564. package/dist/chunks/menu-items-DKKcQrb6.js.map +0 -1
  565. package/dist/chunks/provide-CqCWUUfi.js +0 -113
  566. package/dist/chunks/provide-CqCWUUfi.js.map +0 -1
  567. package/dist/chunks/select-bVnWqF4c.js +0 -560
  568. package/dist/chunks/select-bVnWqF4c.js.map +0 -1
  569. package/dist/chunks/signup-button-BC4LmOXx.js.map +0 -1
  570. package/dist/chunks/solid-logic.esm-7q6hmfIF.js.map +0 -1
  571. package/dist/components/menu-items/MenuItems.cjs.js +0 -6
  572. package/dist/components/menu-items/MenuItems.cjs.js.map +0 -1
  573. package/dist/components/menu-items/MenuItems.d.ts +0 -8
  574. package/dist/components/menu-items/MenuItems.d.ts.map +0 -1
  575. package/dist/components/menu-items/MenuItems.esm.js.map +0 -1
  576. package/dist/components/menu-items/MenuItems.styles.cjs.js +0 -2
  577. package/dist/components/menu-items/MenuItems.styles.cjs.js.map +0 -1
  578. package/dist/components/menu-items/MenuItems.styles.esm.js +0 -7
  579. package/dist/components/menu-items/MenuItems.styles.esm.js.map +0 -1
  580. package/dist/components/menu-items/index.cjs.js +0 -2
  581. package/dist/components/menu-items/index.cjs.js.map +0 -1
  582. package/dist/components/menu-items/index.d.ts +0 -4
  583. package/dist/components/menu-items/index.d.ts.map +0 -1
  584. package/dist/components/menu-items/index.esm.js +0 -7
  585. package/dist/components/menu-items/index.esm.js.map +0 -1
  586. package/dist/components/menu-items.js +0 -2
  587. package/dist/lib/menus/context.cjs.js +0 -2
  588. package/dist/lib/menus/context.cjs.js.map +0 -1
  589. package/dist/lib/menus/context.d.ts +0 -7
  590. package/dist/lib/menus/context.d.ts.map +0 -1
  591. package/dist/lib/menus/context.esm.js +0 -7
  592. package/dist/lib/menus/context.esm.js.map +0 -1
  593. package/dist/lib/menus/index.cjs.js +0 -1
  594. package/dist/lib/menus/index.d.ts +0 -2
  595. package/dist/lib/menus/index.d.ts.map +0 -1
  596. package/dist/lib/menus/index.esm.js +0 -1
  597. package/dist/solid-ui.js.map +0 -1
  598. package/dist/v2/components/forms/select/Select.cjs.js +0 -225
  599. package/dist/v2/components/forms/select/Select.cjs.js.map +0 -1
  600. package/dist/v2/components/forms/select/Select.esm.js +0 -394
  601. package/dist/v2/components/forms/select/Select.esm.js.map +0 -1
  602. package/dist/v2/components/forms/select/index.cjs.js +0 -2
  603. package/dist/v2/components/forms/select/index.cjs.js.map +0 -1
  604. package/dist/v2/components/forms/select/index.esm.js +0 -7
  605. package/dist/v2/components/forms/select/index.esm.js.map +0 -1
  606. package/dist/v2/components/forms/shared/downArrow.cjs.js +0 -9
  607. package/dist/v2/components/forms/shared/downArrow.cjs.js.map +0 -1
  608. package/dist/v2/components/forms/shared/downArrow.esm.js +0 -14
  609. package/dist/v2/components/forms/shared/downArrow.esm.js.map +0 -1
  610. package/dist/v2/components/forms/shared/keyboard.cjs.js +0 -2
  611. package/dist/v2/components/forms/shared/keyboard.cjs.js.map +0 -1
  612. package/dist/v2/components/forms/shared/keyboard.esm.js +0 -34
  613. package/dist/v2/components/forms/shared/keyboard.esm.js.map +0 -1
  614. package/dist/v2/components/forms/shared/listboxStyles.cjs.js +0 -95
  615. package/dist/v2/components/forms/shared/listboxStyles.cjs.js.map +0 -1
  616. package/dist/v2/components/forms/shared/listboxStyles.esm.js +0 -100
  617. package/dist/v2/components/forms/shared/listboxStyles.esm.js.map +0 -1
  618. package/dist/v2/components/forms/shared/listboxTemplate.cjs.js +0 -24
  619. package/dist/v2/components/forms/shared/listboxTemplate.cjs.js.map +0 -1
  620. package/dist/v2/components/forms/shared/listboxTemplate.esm.js +0 -37
  621. package/dist/v2/components/forms/shared/listboxTemplate.esm.js.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"file":"solid-logic.esm-7q6hmfIF.js","names":["Node","BlankNode","Node","NamedNode","Node","NamedNode","Literal","Node","XSD","RDFlibNamedNode","Literal","Node","RdflibBlankNode","Node","NamedNode","DefaultGraph","Node","defaultGraph","DefaultGraphNode","Node","document","RDFlibNamedNode","Variable","Node","Uri.join","defaultGraph","DefaultGraph","BlankNode","Variable","Literal","NamedNode","log","RDFlibNamedNode","NamedNode","DOMParser","Uri.refTo","hexify","Util.heavyCompareSPO","Util.uri.refTo","ttl2jsonld","Serializer","rdf","Node","NamedNode","Variable","Node","ns","NamedNode","Node","BlankNode","DefaultGraph","Literal","Variable","RDF","Uri.join","Variable","namespaces","xsd","Buffer","namespaces","quad","namedNode","blankNode","literal","variable","defaultGraph","namespaces","N3DataFactory","Node","rdf","Uri.join","BlankNode","Literal","Util.domToString","NamedNode","uriUtil.join","N3Parser","parse","N3Parser","Util.parseXML","N3jsParser","DataFactory","exports","Util.parseXML","N3Parser","crossFetch","Uri.protocol","uriIn","Headers","Uri.docpart","Uri.join","RDFlibNamedNode","Util.mediaTypeClass","hostpart","Uri.hostpart","protocol","str","uriJoin","Util.stackString","Serializer","DataFactory","DataFactory","Node","BlankNode","Store","solidNamespace","$rdf","SessionEvents","__WEBPACK_EXTERNAL_MODULE__uvdsl_solid_oidc_client_browser_core_9566af4e__","__WEBPACK_EXTERNAL_MODULE__uvdsl_solid_oidc_client_browser_144ab6cc_Session__","__WEBPACK_EXTERNAL_MODULE_rdflib__"],"sources":["../../node_modules/solid-namespace/index.js","../../node_modules/@babel/runtime/helpers/esm/typeof.js","../../node_modules/@babel/runtime/helpers/esm/toPrimitive.js","../../node_modules/@babel/runtime/helpers/esm/toPropertyKey.js","../../node_modules/@babel/runtime/helpers/esm/defineProperty.js","../../node_modules/rdflib/esm/class-order.js","../../node_modules/rdflib/esm/node-internal.js","../../node_modules/rdflib/esm/types.js","../../node_modules/rdflib/esm/blank-node.js","../../node_modules/rdflib/esm/utils/termValue.js","../../node_modules/rdflib/esm/utils/terms.js","../../node_modules/rdflib/esm/named-node.js","../../node_modules/rdflib/esm/xsd-internal.js","../../node_modules/rdflib/esm/literal.js","../../node_modules/rdflib/esm/collection.js","../../node_modules/rdflib/esm/empty.js","../../node_modules/rdflib/esm/utils/default-graph-uri.js","../../node_modules/rdflib/esm/default-graph.js","../../node_modules/rdflib/esm/statement.js","../../node_modules/rdflib/esm/uri.js","../../node_modules/rdflib/esm/variable.js","../../node_modules/rdflib/esm/factories/factory-types.js","../../node_modules/rdflib/esm/factories/canonical-data-factory.js","../../node_modules/rdflib/esm/log.js","../../node_modules/rdflib/esm/namespace.js","../../node_modules/@frogcat/ttl2jsonld/ttl2jsonld.js","../../node_modules/@xmldom/xmldom/lib/conventions.js","../../node_modules/@xmldom/xmldom/lib/errors.js","../../node_modules/@xmldom/xmldom/lib/grammar.js","../../node_modules/@xmldom/xmldom/lib/dom.js","../../node_modules/@xmldom/xmldom/lib/entities.js","../../node_modules/@xmldom/xmldom/lib/sax.js","../../node_modules/@xmldom/xmldom/lib/dom-parser.js","../../node_modules/@xmldom/xmldom/lib/index.js","../../node_modules/rdflib/esm/utils-js.js","../../node_modules/rdflib/esm/xsd.js","../../node_modules/rdflib/esm/serializer.js","../../node_modules/rdflib/esm/serialize.js","../../node_modules/rdflib/esm/utils.js","../../node_modules/rdflib/esm/formula.js","../../node_modules/rdflib/esm/node.js","../../node_modules/rdflib/esm/query.js","../../node_modules/rdflib/esm/store.js","../../node_modules/rdflib/esm/lists.js","../../node_modules/rdflib/esm/n3parser.js","../../node_modules/rdflib/esm/factories/extended-term-factory.js","../../node_modules/rdflib/esm/jsonldparser.js","../../node_modules/base64-js/index.js","../../node_modules/ieee754/index.js","../../node_modules/buffer/index.js","../../node_modules/n3/src/IRIs.js","../../node_modules/n3/src/N3Lexer.js","../../node_modules/n3/src/N3DataFactory.js","../../node_modules/n3/src/N3Parser.js","../../node_modules/rdflib/esm/rdfaparser.js","../../node_modules/rdflib/esm/rdfxmlparser.js","../../node_modules/rdflib/esm/patch-parser.js","../../node_modules/rdflib/esm/parse.js","../../node_modules/cross-fetch/dist/browser-ponyfill.js","../../node_modules/rdflib/esm/fetcher.js","../../node_modules/rdflib/esm/jsonparser.js","../../node_modules/rdflib/esm/query-to-sparql.js","../../node_modules/rdflib/esm/sparql-to-query.js","../../node_modules/rdflib/esm/update-manager.js","../../node_modules/rdflib/esm/factories/rdflib-data-factory.js","../../node_modules/rdflib/esm/updates-via.js","../../node_modules/rdflib/esm/index.js","../../src/lib/ns.js","../../node_modules/@uvdsl/solid-oidc-client-browser/dist/esm/web/index.js","../../node_modules/@uvdsl/solid-oidc-client-browser/dist/esm/core/index.js","../../node_modules/solid-logic/dist/solid-logic.esm.js"],"sourcesContent":["/**\n * Provides a way to access commonly used namespaces\n *\n * Usage:\n *\n * ```\n * const $rdf = require('rdflib'); //or any other RDF/JS-compatible library\n * const ns = require('solid-namespace')($rdf);\n * const store = $rdf.graph();\n *\n * let me = ...;\n * let name = store.any(me, ns.vcard(‘fn’)) || store.any(me, ns.foaf(‘name’));\n * ```\n * @module vocab\n */\nconst aliases = {\n acl: 'http://www.w3.org/ns/auth/acl#',\n arg: 'http://www.w3.org/ns/pim/arg#',\n as: 'https://www.w3.org/ns/activitystreams#',\n bookmark: 'http://www.w3.org/2002/01/bookmark#',\n cal: 'http://www.w3.org/2002/12/cal/ical#',\n cco: 'http://www.ontologyrepository.com/CommonCoreOntologies/',\n cert: 'http://www.w3.org/ns/auth/cert#',\n contact: 'http://www.w3.org/2000/10/swap/pim/contact#',\n dc: 'http://purl.org/dc/elements/1.1/',\n dct: 'http://purl.org/dc/terms/',\n doap: 'http://usefulinc.com/ns/doap#',\n foaf: 'http://xmlns.com/foaf/0.1/',\n geo: 'http://www.w3.org/2003/01/geo/wgs84_pos#',\n gpx: 'http://www.w3.org/ns/pim/gpx#',\n gr: 'http://purl.org/goodrelations/v1#',\n http: 'http://www.w3.org/2007/ont/http#',\n httph: 'http://www.w3.org/2007/ont/httph#',\n icalTZ: 'http://www.w3.org/2002/12/cal/icaltzd#', // Beware: not cal:\n ldp: 'http://www.w3.org/ns/ldp#',\n link: 'http://www.w3.org/2007/ont/link#',\n log: 'http://www.w3.org/2000/10/swap/log#',\n meeting: 'http://www.w3.org/ns/pim/meeting#',\n mo: 'http://purl.org/ontology/mo/',\n org: 'http://www.w3.org/ns/org#',\n owl: 'http://www.w3.org/2002/07/owl#',\n pad: 'http://www.w3.org/ns/pim/pad#',\n patch: 'http://www.w3.org/ns/pim/patch#',\n prov: 'http://www.w3.org/ns/prov#',\n pto: 'http://www.productontology.org/id/',\n qu: 'http://www.w3.org/2000/10/swap/pim/qif#',\n trip: 'http://www.w3.org/ns/pim/trip#',\n rdf: 'http://www.w3.org/1999/02/22-rdf-syntax-ns#',\n rdfs: 'http://www.w3.org/2000/01/rdf-schema#',\n rss: 'http://purl.org/rss/1.0/',\n sched: 'http://www.w3.org/ns/pim/schedule#',\n schema: 'http://schema.org/', // @@ beware confusion with documents no 303\n sioc: 'http://rdfs.org/sioc/ns#',\n skos: 'http://www.w3.org/2004/02/skos/core#',\n solid: 'http://www.w3.org/ns/solid/terms#',\n space: 'http://www.w3.org/ns/pim/space#',\n stat: 'http://www.w3.org/ns/posix/stat#',\n tab: 'http://www.w3.org/2007/ont/link#',\n tabont: 'http://www.w3.org/2007/ont/link#',\n ui: 'http://www.w3.org/ns/ui#',\n vann: 'http://purl.org/vocab/vann/',\n vcard: 'http://www.w3.org/2006/vcard/ns#',\n wf: 'http://www.w3.org/2005/01/wf/flow#',\n xsd: 'http://www.w3.org/2001/XMLSchema#',\n}\n\n/**\n * @param [rdflib] {RDF} Optional RDF Library (such as rdflib.js or rdf-ext) to inject\n */\nfunction vocab (rdf = { namedNode: u => u }) {\n const namespaces = {}\n for (const alias in aliases) {\n const expansion = aliases[alias]\n namespaces[alias] = function (localName = '') {\n return rdf.namedNode(expansion + localName)\n }\n };\n\n return namespaces\n};\n\nmodule.exports = vocab\n","function _typeof(o) {\n \"@babel/helpers - typeof\";\n\n return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) {\n return typeof o;\n } : function (o) {\n return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o;\n }, _typeof(o);\n}\nexport { _typeof as default };","import _typeof from \"./typeof.js\";\nfunction toPrimitive(t, r) {\n if (\"object\" != _typeof(t) || !t) return t;\n var e = t[Symbol.toPrimitive];\n if (void 0 !== e) {\n var i = e.call(t, r || \"default\");\n if (\"object\" != _typeof(i)) return i;\n throw new TypeError(\"@@toPrimitive must return a primitive value.\");\n }\n return (\"string\" === r ? String : Number)(t);\n}\nexport { toPrimitive as default };","import _typeof from \"./typeof.js\";\nimport toPrimitive from \"./toPrimitive.js\";\nfunction toPropertyKey(t) {\n var i = toPrimitive(t, \"string\");\n return \"symbol\" == _typeof(i) ? i : i + \"\";\n}\nexport { toPropertyKey as default };","import toPropertyKey from \"./toPropertyKey.js\";\nfunction _defineProperty(e, r, t) {\n return (r = toPropertyKey(r)) in e ? Object.defineProperty(e, r, {\n value: t,\n enumerable: !0,\n configurable: !0,\n writable: !0\n }) : e[r] = t, e;\n}\nexport { _defineProperty as default };","/**\n* Class orders\n*/\nconst ClassOrder = {\n 'Literal': 1,\n 'Collection': 3,\n 'Graph': 4,\n 'NamedNode': 5,\n 'BlankNode': 6,\n 'Variable': 7\n};\nexport default ClassOrder;","import _defineProperty from \"@babel/runtime/helpers/defineProperty\";\n/**\n * The superclass of all RDF Statement objects, that is\n * NamedNode, Literal, BlankNode, etc.\n * Should not be instantiated directly.\n * Also called Term.\n * @link https://rdf.js.org/data-model-spec/#term-interface\n * @class Node\n */\nexport default class Node {\n constructor(value) {\n /** The type of node */\n _defineProperty(this, \"termType\", void 0);\n /** The class order for this node */\n _defineProperty(this, \"classOrder\", void 0);\n /** The node's value */\n _defineProperty(this, \"value\", void 0);\n this.value = value;\n }\n\n /**\n * Creates the substituted node for this one, according to the specified bindings\n * @param bindings - Bindings of identifiers to nodes\n */\n substitute(bindings) {\n return this;\n }\n\n /**\n * Compares this node with another\n * @see {equals} to check if two nodes are equal\n * @param other - The other node\n */\n compareTerm(other) {\n if (this.classOrder < other.classOrder) {\n return -1;\n }\n if (this.classOrder > other.classOrder) {\n return +1;\n }\n if (this.value < other.value) {\n return -1;\n }\n if (this.value > other.value) {\n return +1;\n }\n return 0;\n }\n\n /**\n * Compares whether the two nodes are equal\n * @param other The other node\n */\n equals(other) {\n if (!other) {\n return false;\n }\n return this.termType === other.termType && this.value === other.value;\n }\n\n /**\n * Creates a hash for this node\n * @deprecated use {rdfFactory.id} instead if possible\n */\n hashString() {\n return this.toCanonical();\n }\n\n /**\n * Compares whether this node is the same as the other one\n * @param other - Another node\n */\n sameTerm(other) {\n return this.equals(other);\n }\n\n /**\n * Creates a canonical string representation of this node\n */\n toCanonical() {\n return this.toNT();\n }\n\n /**\n * Creates a n-triples string representation of this node\n */\n toNT() {\n return this.toString();\n }\n\n /**\n * Creates a n-quads string representation of this node\n */\n toNQ() {\n return this.toNT();\n }\n\n /**\n * Creates a string representation of this node\n */\n toString() {\n throw new Error('Node.toString() is abstract - see the subclasses instead');\n }\n}\n// Specified in './node.ts' to prevent circular dependency\n_defineProperty(Node, \"fromValue\", void 0);\n// Specified in './node.ts' to prevent circular dependency\n_defineProperty(Node, \"toJS\", void 0);","export const NamedNodeTermType = \"NamedNode\";\nexport const BlankNodeTermType = \"BlankNode\";\nexport const LiteralTermType = \"Literal\";\nexport const VariableTermType = \"Variable\";\nexport const DefaultGraphTermType = \"DefaultGraph\";\n// Non-RDF/JS types:\nexport const CollectionTermType = \"Collection\";\nexport const EmptyTermType = \"Empty\";\nexport const GraphTermType = \"Graph\";\nexport const HTMLContentType = \"text/html\";\nexport const JSONLDContentType = \"application/ld+json\";\nexport const N3ContentType = \"text/n3\";\nexport const N3LegacyContentType = \"application/n3\";\nexport const NQuadsAltContentType = \"application/nquads\";\nexport const NQuadsContentType = \"application/n-quads\";\nexport const NTriplesContentType = \"application/n-triples\";\nexport const RDFXMLContentType = \"application/rdf+xml\";\nexport const SPARQLUpdateContentType = \"application/sparql-update\";\nexport const SPARQLUpdateSingleMatchContentType = \"application/sparql-update-single-match\";\nexport const TurtleContentType = \"text/turtle\";\nexport const TurtleLegacyContentType = \"application/x-turtle\";\nexport const XHTMLContentType = \"application/xhtml+xml\";\n\n/**\n * A valid mime type header\n */\n\n/** A type for values that serves as inputs */\n\n/**\n * In this project, there exist two types for the same kind of RDF concept.\n * We have RDF/JS spec types (standardized, generic), and RDFlib types (internal, specific).\n * When deciding which type to use in a function, it is preferable to accept generic inputs,\n * whenever possible, and provide strict outputs.\n * In some ways, the TF types in here are a bit more strict.\n * Variables are missing, and the statement requires specific types of terms (e.g. NamedNode instead of Term).\n */\n\n/** An RDF/JS Subject */\n\n/** An RDF/JS Predicate */\n\n/** An RDF/JS Object */\n\n/** An RDF/JS Graph */\n// | Formula\n\n/** All the types that a .fromValue() method might return */","import _defineProperty from \"@babel/runtime/helpers/defineProperty\";\nimport ClassOrder from './class-order';\nimport Node from './node-internal';\nimport { BlankNodeTermType } from './types';\n/**\n * An RDF blank node is a Node without a URI\n * @link https://rdf.js.org/data-model-spec/#blanknode-interface\n */\nexport default class BlankNode extends Node {\n static getId(id) {\n if (id) {\n if (typeof id !== 'string') {\n throw new Error('Bad id argument to new blank node: ' + id);\n }\n if (id.includes('#')) {\n // Is a URI with hash fragment\n let fragments = id.split('#');\n return fragments[fragments.length - 1];\n }\n return id;\n }\n return 'n' + BlankNode.nextId++;\n }\n /**\n * Initializes this node\n * @param [id] The identifier for the blank node\n */\n constructor(id) {\n super(BlankNode.getId(id));\n _defineProperty(this, \"termType\", BlankNodeTermType);\n _defineProperty(this, \"classOrder\", ClassOrder.BlankNode);\n /** Whether this is a blank node */\n _defineProperty(this, \"isBlank\", 1);\n /**\n * This type of node is a variable.\n *\n * Note that the existence of this property already indicates that it is a variable.\n */\n _defineProperty(this, \"isVar\", 1);\n }\n\n /**\n * The identifier for the blank node\n */\n get id() {\n return this.value;\n }\n set id(value) {\n this.value = value;\n }\n compareTerm(other) {\n if (this.classOrder < other.classOrder) {\n return -1;\n }\n if (this.classOrder > other.classOrder) {\n return +1;\n }\n if (this.id < other.id) {\n return -1;\n }\n if (this.id > other.id) {\n return +1;\n }\n return 0;\n }\n\n /**\n * Gets a copy of this blank node in the specified formula\n * @param formula The formula\n */\n copy(formula) {\n // depends on the formula\n var bnodeNew = new BlankNode();\n formula.copyTo(this, bnodeNew);\n return bnodeNew;\n }\n toCanonical() {\n return BlankNode.NTAnonymousNodePrefix + this.value;\n }\n toString() {\n return BlankNode.NTAnonymousNodePrefix + this.id;\n }\n}\n/**\n * The next unique identifier for blank nodes\n */\n_defineProperty(BlankNode, \"nextId\", 0);\n_defineProperty(BlankNode, \"NTAnonymousNodePrefix\", '_:');","/** Retrieve the value of a term, or self if already a string. */\nexport function termValue(node) {\n if (typeof node === 'string') {\n return node;\n }\n return node.value;\n}","import { CollectionTermType, NamedNodeTermType, VariableTermType, BlankNodeTermType, LiteralTermType, GraphTermType, DefaultGraphTermType } from '../types';\n/** TypeGuard for RDFLib Statements */\nexport function isStatement(obj) {\n return typeof obj === 'object' && obj !== null && 'subject' in obj;\n}\n\n/** TypeGuard for RDFlib Stores */\nexport function isStore(obj) {\n return typeof obj === 'object' && obj !== null && 'statements' in obj;\n}\n\n/** TypeGuard for RDFLib Collections */\nexport function isCollection(obj) {\n return isTerm(obj) && obj.termType === CollectionTermType;\n}\n\n/** TypeGuard for valid RDFlib Object types, also allows Collections, Graphs */\nexport function isRDFlibObject(obj) {\n return obj && Object.prototype.hasOwnProperty.call(obj, 'termType') && (obj.termType === NamedNodeTermType || obj.termType === VariableTermType || obj.termType === BlankNodeTermType || obj.termType === CollectionTermType || obj.termType === LiteralTermType || obj.termType === GraphTermType);\n}\n\n/** TypeGuard for valid RDFlib Subject types, same as Object as RDFLib symmetrical.\n*/\nexport function isRDFlibSubject(obj) {\n return obj && Object.prototype.hasOwnProperty.call(obj, 'termType') && (obj.termType === NamedNodeTermType || obj.termType === VariableTermType || obj.termType === BlankNodeTermType || obj.termType === CollectionTermType || obj.termType === LiteralTermType || obj.termType === GraphTermType);\n}\n\n/** TypeGuard for valid RDF/JS spec Predicate types */\nexport function isRDFlibPredicate(obj) {\n return isTerm(obj) && (obj.termType === NamedNodeTermType || obj.termType === BlankNodeTermType || obj.termType === VariableTermType);\n}\n\n/** TypeGuard for RDFLib Variables */\nexport function isVariable(obj) {\n return isTerm(obj) && obj.termType === VariableTermType;\n}\n\n/** TypeGuard for RDF/JS spec Terms */\nexport function isTerm(obj) {\n return typeof obj === 'object' && obj !== null && 'termType' in obj;\n}\n\n/** TypeGuard for RDF/JS spec Literals */\nexport function isLiteral(value) {\n return value.termType === LiteralTermType;\n}\n\n/** TypeGuard for RDF/JS spec Quads */\nexport function isQuad(obj) {\n return typeof obj === \"object\" && obj !== null && 'subject' in obj && 'predicate' in obj && 'object' in obj;\n}\n\n/** TypeGuard for RDF/JS spec NamedNodes */\nexport function isNamedNode(obj) {\n return isTerm(obj) && obj.termType === 'NamedNode';\n}\n\n/** TypeGuard for RDF/JS spec BlankNodes */\nexport function isBlankNode(obj) {\n return isTerm(obj) && 'termType' in obj && obj.termType === 'BlankNode';\n}\n\n/** TypeGuard for valid RDF/JS spec Subject types */\nexport function isSubject(obj) {\n return isTerm(obj) && (obj.termType === NamedNodeTermType || obj.termType === VariableTermType || obj.termType === BlankNodeTermType);\n}\n\n/** TypeGuard for valid RDF/JS spec Predicate types */\nexport function isPredicate(obj) {\n return isTerm(obj) && (obj.termType === NamedNodeTermType || obj.termType === VariableTermType);\n}\n\n/** TypeGuard for valid RDF/JS spec Object types */\nexport function isRDFObject(obj) {\n return isTerm(obj) && (obj.termType === NamedNodeTermType || obj.termType === VariableTermType || obj.termType === BlankNodeTermType || obj.termType === LiteralTermType);\n}\n\n/** TypeGuard for valid RDF/JS Graph types */\nexport function isGraph(obj) {\n return isTerm(obj) && (obj.termType === NamedNodeTermType || obj.termType === VariableTermType || obj.termType === BlankNodeTermType || obj.termType === DefaultGraphTermType);\n}","import _defineProperty from \"@babel/runtime/helpers/defineProperty\";\nimport ClassOrder from './class-order';\nimport Node from './node-internal';\nimport { NamedNodeTermType } from './types';\nimport { termValue } from './utils/termValue';\nimport { isTerm } from './utils/terms';\n\n/**\n * A named (IRI) RDF node\n */\nexport default class NamedNode extends Node {\n /**\n * Create a named (IRI) RDF Node\n * @constructor\n * @param iri - The IRI for this node\n */\n constructor(iri) {\n super(termValue(iri));\n _defineProperty(this, \"termType\", NamedNodeTermType);\n _defineProperty(this, \"classOrder\", ClassOrder.NamedNode);\n if (!this.value) {\n throw new Error('Missing IRI for NamedNode');\n }\n if (!this.value.includes(':')) {\n throw new Error('NamedNode IRI \"' + iri + '\" must be absolute.');\n }\n if (this.value.includes(' ')) {\n var message = 'Error: NamedNode IRI \"' + iri + '\" must not contain unencoded spaces.';\n throw new Error(message);\n }\n }\n\n /**\n * Returns an $rdf node for the containing directory, ending in slash.\n */\n dir() {\n var str = this.value.split('#')[0];\n var p = str.slice(0, -1).lastIndexOf('/');\n var q = str.indexOf('//');\n if (q >= 0 && p < q + 2 || p < 0) return null;\n return new NamedNode(str.slice(0, p + 1));\n }\n\n /**\n * Returns an NN for the whole web site, ending in slash.\n * Contrast with the \"origin\" which does NOT have a trailing slash\n */\n site() {\n var str = this.value.split('#')[0];\n var p = str.indexOf('//');\n if (p < 0) throw new Error('This URI does not have a web site part (origin)');\n var q = str.indexOf('/', p + 2);\n if (q < 0) {\n return new NamedNode(str.slice(0) + '/'); // Add slash to a bare origin\n } else {\n return new NamedNode(str.slice(0, q + 1));\n }\n }\n\n /**\n * Creates the fetchable named node for the document.\n * Removes everything from the # anchor tag.\n */\n doc() {\n if (this.value.indexOf('#') < 0) {\n return this;\n } else {\n return new NamedNode(this.value.split('#')[0]);\n }\n }\n\n /**\n * Returns the URI including <brackets>\n */\n toString() {\n return '<' + this.value + '>';\n }\n\n /** The local identifier with the document */\n id() {\n return this.value.split('#')[1];\n }\n\n /** Alias for value, favored by Tim */\n get uri() {\n return this.value;\n }\n set uri(uri) {\n this.value = uri;\n }\n\n /**\n * Creates a named node from the specified input value\n * @param value - An input value\n */\n static fromValue(value) {\n if (typeof value === 'undefined' || value === null) {\n return value;\n }\n if (isTerm(value)) {\n return value;\n }\n return new NamedNode(value);\n }\n}","import NamedNode from './named-node';\nexport default {\n boolean: new NamedNode('http://www.w3.org/2001/XMLSchema#boolean'),\n dateTime: new NamedNode('http://www.w3.org/2001/XMLSchema#dateTime'),\n decimal: new NamedNode('http://www.w3.org/2001/XMLSchema#decimal'),\n double: new NamedNode('http://www.w3.org/2001/XMLSchema#double'),\n integer: new NamedNode('http://www.w3.org/2001/XMLSchema#integer'),\n langString: new NamedNode('http://www.w3.org/1999/02/22-rdf-syntax-ns#langString'),\n string: new NamedNode('http://www.w3.org/2001/XMLSchema#string')\n};","import _defineProperty from \"@babel/runtime/helpers/defineProperty\";\nimport ClassOrder from './class-order';\nimport RDFlibNamedNode from './named-node';\nimport Node from './node-internal';\nimport { LiteralTermType } from './types';\nimport { isLiteral } from './utils/terms';\nimport XSD from './xsd-internal';\n/**\n * An RDF literal, containing some value which isn't expressed as an IRI.\n * @link https://rdf.js.org/data-model-spec/#literal-interface\n */\nexport default class Literal extends Node {\n /**\n * Initializes a literal\n * @param value - The literal's lexical value\n * @param language - The language for the literal. Defaults to ''.\n * @param datatype - The literal's datatype as a named node. Defaults to xsd:string.\n */\n constructor(value, language, datatype) {\n super(value);\n _defineProperty(this, \"termType\", LiteralTermType);\n _defineProperty(this, \"classOrder\", ClassOrder.Literal);\n /**\n * The literal's datatype as a named node\n */\n _defineProperty(this, \"datatype\", XSD.string);\n _defineProperty(this, \"isVar\", 0);\n /**\n * The language for the literal\n */\n _defineProperty(this, \"language\", '');\n if (language) {\n this.language = language;\n this.datatype = XSD.langString;\n } else if (datatype) {\n this.datatype = RDFlibNamedNode.fromValue(datatype);\n } else {\n this.datatype = XSD.string;\n }\n }\n\n /**\n * Gets a copy of this literal\n */\n copy() {\n return new Literal(this.value, this.lang, this.datatype);\n }\n\n /**\n * Gets whether two literals are the same\n * @param other The other statement\n */\n equals(other) {\n if (!other) {\n return false;\n }\n return this.termType === other.termType && this.value === other.value && this.language === other.language && (!this.datatype && !other.datatype || this.datatype && this.datatype.equals(other.datatype));\n }\n\n /**\n * The language for the literal\n * @deprecated use {language} instead\n */\n get lang() {\n return this.language;\n }\n set lang(language) {\n this.language = language || '';\n }\n toNT() {\n return Literal.toNT(this);\n }\n\n /** Serializes a literal to an N-Triples string */\n static toNT(literal) {\n if (typeof literal.value === 'number') {\n return '' + literal.value;\n } else if (typeof literal.value !== 'string') {\n throw new Error('Value of RDF literal is not string or number: ' + literal.value);\n }\n var str = literal.value;\n // #x22 (\"), #x5C (\\), #x0A (\\n) and #xD (\\r) are disallowed and need to be replaced\n // see https://www.w3.org/TR/n-triples/#grammar-production-STRING_LITERAL_QUOTE\n str = str.replace(/\\\\/g, '\\\\\\\\');\n str = str.replace(/\\\"/g, '\\\\\"');\n str = str.replace(/\\n/g, '\\\\n');\n str = str.replace(/\\r/g, '\\\\r');\n str = '\"' + str + '\"';\n if (literal.language) {\n str += '@' + literal.language;\n } else if (!literal.datatype.equals(XSD.string)) {\n // Only add datatype if it's not a string\n str += '^^' + literal.datatype.toCanonical();\n }\n return str;\n }\n toString() {\n return '' + this.value;\n }\n\n /**\n * Builds a literal node from a boolean value\n * @param value - The value\n */\n static fromBoolean(value) {\n let strValue = value ? '1' : '0';\n return new Literal(strValue, null, XSD.boolean);\n }\n\n /**\n * Builds a literal node from a date value\n * @param value The value\n */\n static fromDate(value) {\n if (!(value instanceof Date)) {\n throw new TypeError('Invalid argument to Literal.fromDate()');\n }\n let d2 = function (x) {\n return ('' + (100 + x)).slice(1, 3);\n };\n let date = '' + value.getUTCFullYear() + '-' + d2(value.getUTCMonth() + 1) + '-' + d2(value.getUTCDate()) + 'T' + d2(value.getUTCHours()) + ':' + d2(value.getUTCMinutes()) + ':' + d2(value.getUTCSeconds()) + 'Z';\n return new Literal(date, null, XSD.dateTime);\n }\n\n /**\n * Builds a literal node from a number value\n * @param value - The value\n */\n static fromNumber(value) {\n if (typeof value !== 'number') {\n throw new TypeError('Invalid argument to Literal.fromNumber()');\n }\n let datatype;\n const strValue = value.toString();\n if (strValue.indexOf('e') < 0 && Math.abs(value) <= Number.MAX_SAFE_INTEGER) {\n datatype = Number.isInteger(value) ? XSD.integer : XSD.decimal;\n } else {\n datatype = XSD.double;\n }\n return new Literal(strValue, null, datatype);\n }\n\n /**\n * Builds a literal node from an input value\n * @param value - The input value\n */\n static fromValue(value) {\n if (isLiteral(value)) {\n return value;\n }\n switch (typeof value) {\n case 'object':\n if (value instanceof Date) {\n return Literal.fromDate(value);\n }\n case 'boolean':\n return Literal.fromBoolean(value);\n case 'number':\n return Literal.fromNumber(value);\n case 'string':\n return new Literal(value);\n }\n throw new Error(\"Can't make literal from \" + value + ' of type ' + typeof value);\n }\n}","import _defineProperty from \"@babel/runtime/helpers/defineProperty\";\nimport RdflibBlankNode from './blank-node';\nimport ClassOrder from './class-order';\nimport Literal from './literal';\nimport Node from './node-internal';\nimport { CollectionTermType } from './types';\nimport { isTerm } from './utils/terms';\n/**\n * Creates an RDF Node from a native javascript value.\n * RDF Nodes are returned unchanged, undefined returned as itself.\n * Arrays return Collections.\n * Strings, numbers and booleans return Literals.\n * @param value {Node|Date|String|Number|Boolean|Undefined}\n * @return {Node|Collection}\n */\nexport function fromValue(value) {\n if (typeof value === 'undefined' || value === null) {\n return value;\n }\n if (isTerm(value)) {\n // a Node subclass or a Collection\n return value;\n }\n if (Array.isArray(value)) {\n return new Collection(value);\n }\n return Literal.fromValue(value);\n}\n\n/**\n * A collection of other RDF nodes\n *\n * Use generic T to control the contents of the array.\n */\nexport default class Collection extends Node {\n constructor(initial) {\n super((RdflibBlankNode.nextId++).toString());\n _defineProperty(this, \"termType\", CollectionTermType);\n _defineProperty(this, \"classOrder\", ClassOrder.Collection);\n _defineProperty(this, \"closed\", false);\n _defineProperty(this, \"compareTerm\", RdflibBlankNode.prototype.compareTerm);\n /**\n * The nodes in this collection\n */\n _defineProperty(this, \"elements\", []);\n _defineProperty(this, \"isVar\", 0);\n if (initial && initial.length > 0) {\n initial.forEach(element => {\n this.elements.push(fromValue(element));\n });\n }\n }\n get id() {\n return this.value;\n }\n set id(value) {\n this.value = value;\n }\n\n /**\n * Appends an element to this collection\n * @param element - The new element\n */\n append(element) {\n return this.elements.push(element);\n }\n\n /**\n * Closes this collection\n */\n close() {\n this.closed = true;\n return this.closed;\n }\n\n /**\n * Removes the first element from the collection (and return it)\n */\n shift() {\n return this.elements.shift();\n }\n\n /**\n * Creates a new Collection with the substituting bindings applied\n * @param bindings - The bindings to substitute\n */\n substitute(bindings) {\n const elementsCopy = this.elements.map(ea => ea.substitute(bindings));\n return new Collection(elementsCopy);\n }\n toNT() {\n return Collection.toNT(this);\n }\n static toNT(collection) {\n // return '(' + collection.elements.map(x => x.toNT()).join(' ') + ')'\n // As lists are not in NT and toNT() must be a reversible function, we kludge it for a list\n return RdflibBlankNode.NTAnonymousNodePrefix + collection.id;\n }\n\n /**\n * Serializes the collection to a string.\n * Surrounded by (parentheses) and separated by spaces.\n */\n toString() {\n return '(' + this.elements.join(' ') + ')';\n }\n\n /**\n * Prepends the specified element to the collection's front\n * @param element - The element to prepend\n */\n unshift(element) {\n return this.elements.unshift(element);\n }\n}\n_defineProperty(Collection, \"termType\", CollectionTermType);","import _defineProperty from \"@babel/runtime/helpers/defineProperty\";\nimport Node from './node-internal';\nimport { EmptyTermType } from './types';\n/**\n* An empty node\n*/\nexport default class Empty extends Node {\n constructor() {\n super('');\n _defineProperty(this, \"termType\", EmptyTermType);\n }\n toString() {\n return '()';\n }\n}","// Prevents circular dependencies between data-factory-internal and statement\n\nimport NamedNode from '../named-node';\nexport const defaultGraphURI = 'chrome:theSession';\nexport const defaultGraphNode = new NamedNode(defaultGraphURI);","import _defineProperty from \"@babel/runtime/helpers/defineProperty\";\nimport Node from './node-internal';\nimport { DefaultGraphTermType } from './types';\nimport { defaultGraphURI } from './utils/default-graph-uri';\n\n/** The RDF default graph */\nexport default class DefaultGraph extends Node {\n constructor() {\n super('');\n _defineProperty(this, \"value\", '');\n _defineProperty(this, \"termType\", DefaultGraphTermType);\n _defineProperty(this, \"uri\", defaultGraphURI);\n }\n toCanonical() {\n return this.value;\n }\n toString() {\n return 'DefaultGraph';\n }\n}\nexport function isDefaultGraph(object) {\n return !!object && object.termType === DefaultGraphTermType;\n}","import _defineProperty from \"@babel/runtime/helpers/defineProperty\";\nimport Node from './node-internal';\nimport { DefaultGraphTermType } from './types';\nimport DefaultGraphNode, { isDefaultGraph } from './default-graph';\nconst defaultGraph = new DefaultGraphNode();\n\n/** A Statement represents an RDF Triple or Quad. */\nexport default class Statement {\n /**\n * Construct a new statement\n *\n * @param subject - The subject of the triple. What the fact is about\n * @param predicate - The relationship which is asserted between the subject and object\n * @param object - The thing or data value which is asserted to be related to the subject\n * @param {NamedNode} graph - The document where the triple is or was or will be stored on the web.\n *\n * The graph param is a named node of the document in which the triple when it is stored\n * on the web. It exists because when you have read data from various places in the web,\n * the “graph” tells you _why_ you have the triple. (At the moment, it is just the\n * document, in future it could be an inference step)\n *\n * When you do UpdateManager.update() then the graph’s of all the statements must be the same,\n * and give the document you are patching. In future, we may have a more\n * powerful update() which can update more than one document.\n */\n constructor(subject, predicate, object, graph) {\n /** The subject of the triple. What the Statement is about. */\n _defineProperty(this, \"subject\", void 0);\n /** The relationship which is asserted between the subject and object */\n _defineProperty(this, \"predicate\", void 0);\n /** The thing or data value which is asserted to be related to the subject */\n _defineProperty(this, \"object\", void 0);\n /**\n * The graph param is a named node of the document in which the triple when\n * it is stored on the web.\n */\n _defineProperty(this, \"graph\", void 0);\n this.subject = Node.fromValue(subject);\n this.predicate = Node.fromValue(predicate);\n this.object = Node.fromValue(object);\n this.graph = graph == undefined ? defaultGraph : Node.fromValue(graph); // property currently used by rdflib\n }\n\n /** Alias for graph, favored by Tim */\n get why() {\n return this.graph;\n }\n set why(g) {\n this.graph = g;\n }\n\n /**\n * Checks whether two statements are the same\n * @param other - The other statement\n */\n equals(other) {\n return other.subject.equals(this.subject) && other.predicate.equals(this.predicate) && other.object.equals(this.object) && other.graph.equals(this.graph);\n }\n\n /**\n * Creates a statement with the bindings substituted\n * @param bindings The bindings\n */\n substitute(bindings) {\n const y = new Statement(this.subject.substitute(bindings), this.predicate.substitute(bindings), this.object.substitute(bindings), isDefaultGraph(this.graph) ? this.graph : this.graph.substitute(bindings)); // 2016\n // console.log('@@@ statement substitute:' + y)\n return y;\n }\n\n /** Creates a canonical string representation of this statement. */\n toCanonical() {\n let terms = [this.subject.toCanonical(), this.predicate.toCanonical(), this.object.toCanonical()];\n if (this.graph && this.graph.termType !== DefaultGraphTermType) {\n terms.push(this.graph.toCanonical());\n }\n return terms.join(' ') + ' .';\n }\n\n /** Creates a n-triples string representation of this statement */\n toNT() {\n return [this.subject.toNT(), this.predicate.toNT(), this.object.toNT()].join(' ') + ' .';\n }\n\n /** Creates a n-quads string representation of this statement */\n toNQ() {\n return [this.subject.toNT(), this.predicate.toNT(), this.object.toNT(), isDefaultGraph(this.graph) ? '' : this.graph.toNT()].join(' ') + ' .';\n }\n\n /** Creates a string representation of this statement */\n toString() {\n /*\n return [\n this.subject.toString(),\n this.predicate.toString(),\n this.object.toString(),\n ].join(' ') + ' .'\n */\n return this.toNT();\n }\n}","/*\n * Implements URI-specific functions\n *\n * See RFC 2386\n *\n * See also:\n * http://www.w3.org/2005/10/ajaw/uri.js\n * http://www.w3.org/2000/10/swap/uripath.py\n *\n */\nvar alert = alert || console.log;\nimport RDFlibNamedNode from './named-node';\n\n/**\n * Gets the document part of an URI\n * @param uri The URI\n */\nexport function docpart(uri) {\n var i;\n i = uri.indexOf('#');\n if (i < 0) {\n return uri;\n } else {\n return uri.slice(0, i);\n }\n}\n\n/**\n * Gets the document part of an URI as a named node\n * @param x - The URI\n */\nexport function document(x) {\n return new RDFlibNamedNode(docpart(x));\n}\n\n/**\n * Gets the hostname in an URI\n * @param u The URI\n */\nexport function hostpart(u) {\n var m = /[^\\/]*\\/\\/([^\\/]*)\\//.exec(u);\n if (m) {\n return m[1];\n } else {\n return '';\n }\n}\n\n/**\n * Joins an URI with a base\n * @param given - The relative part\n * @param base - The base URI\n */\nexport function join(given, base) {\n var baseColon, baseScheme, baseSingle;\n var colon, lastSlash, path;\n var baseHash = base.indexOf('#');\n if (baseHash > 0) {\n base = base.slice(0, baseHash);\n }\n if (given.length === 0) {\n return base;\n }\n if (given.indexOf('#') === 0) {\n return base + given;\n }\n colon = given.indexOf(':');\n if (colon >= 0) {\n return given;\n }\n baseColon = base.indexOf(':');\n if (base.length === 0) {\n return given;\n }\n if (baseColon < 0) {\n alert('Invalid base: ' + base + ' in join with given: ' + given);\n return given;\n }\n baseScheme = base.slice(0, +baseColon + 1 || 9e9);\n if (given.indexOf('//') === 0) {\n return baseScheme + given;\n }\n if (base.indexOf('//', baseColon) === baseColon + 1) {\n baseSingle = base.indexOf('/', baseColon + 3);\n if (baseSingle < 0) {\n if (base.length - baseColon - 3 > 0) {\n return base + '/' + given;\n } else {\n return baseScheme + given;\n }\n }\n } else {\n baseSingle = base.indexOf('/', baseColon + 1);\n if (baseSingle < 0) {\n if (base.length - baseColon - 1 > 0) {\n return base + '/' + given;\n } else {\n return baseScheme + given;\n }\n }\n }\n if (given.indexOf('/') === 0) {\n return base.slice(0, baseSingle) + given;\n }\n path = base.slice(baseSingle);\n lastSlash = path.lastIndexOf('/');\n if (lastSlash < 0) {\n return baseScheme + given;\n }\n if (lastSlash >= 0 && lastSlash < path.length - 1) {\n path = path.slice(0, +lastSlash + 1 || 9e9);\n }\n path += given;\n while (path.match(/[^\\/]*\\/\\.\\.\\//)) {\n path = path.replace(/[^\\/]*\\/\\.\\.\\//, '');\n }\n path = path.replace(/\\.\\//g, '');\n path = path.replace(/\\/\\.$/, '/');\n return base.slice(0, baseSingle) + path;\n}\n\n/**\n * Gets the protocol part of an URI\n * @param uri The URI\n */\nexport function protocol(uri) {\n const i = uri.indexOf(':');\n if (i < 0) {\n return null;\n } else {\n return uri.slice(0, i);\n }\n}\n\n/**\n * Gets a relative uri\n * @param base The base URI\n * @param uri The absolute URI\n */\nexport function refTo(base, uri) {\n var c, i, k, l, len, len1, n, o, p, q, ref, ref1, s;\n var commonHost = new RegExp('^[-_a-zA-Z0-9.]+:(//[^/]*)?/[^/]*$');\n if (!base) {\n return uri;\n }\n if (base === uri) {\n return '';\n }\n for (i = o = 0, len = uri.length; o < len; i = ++o) {\n const c = uri[i];\n if (c !== base[i]) {\n break;\n }\n }\n if (base.slice(0, i).match(commonHost)) {\n k = uri.indexOf('//');\n if (k < 0) {\n k = -2;\n }\n l = uri.indexOf('/', k + 2);\n if (uri[l + 1] !== '/' && base[l + 1] !== '/' && uri.slice(0, l) === base.slice(0, l)) {\n return uri.slice(l);\n }\n }\n if (uri[i] === '#' && base.length === i) {\n return uri.slice(i);\n }\n while (i > 0 && uri[i - 1] !== '/') {\n i--;\n }\n if (i < 3) {\n return uri;\n }\n if (base.indexOf('//', i - 2) > 0 || uri.indexOf('//', i - 2) > 0) {\n return uri;\n }\n if (base.indexOf(':', i) > 0) {\n return uri;\n }\n n = 0;\n ref = base.slice(i);\n for (p = 0, len1 = ref.length; p < len1; p++) {\n c = ref[p];\n if (c === '/') {\n n++;\n }\n }\n if (n === 0 && i < uri.length && uri[i] === '#') {\n return './' + uri.slice(i);\n }\n if (n === 0 && i === uri.length) {\n return './';\n }\n s = '';\n if (n > 0) {\n for (q = 1, ref1 = n; ref1 >= 1 ? q <= ref1 : q >= ref1; ref1 >= 1 ? ++q : --q) {\n s += '../';\n }\n }\n return s + uri.slice(i);\n}","import _defineProperty from \"@babel/runtime/helpers/defineProperty\";\nimport ClassOrder from './class-order';\nimport Node from './node-internal';\nimport { VariableTermType } from './types';\nimport * as Uri from './uri';\n/**\n* Variables are placeholders used in patterns to be matched.\n* In cwm they are symbols which are the formula's list of quantified variables.\n* In sparql they are not visibly URIs. Here we compromise, by having\n* a common special base URI for variables. Their names are uris,\n* but the ? notation has an implicit base uri of 'varid:'\n*/\nexport default class Variable extends Node {\n /**\n * Initializes this variable\n * @param name The variable's name\n */\n constructor(name = '') {\n super(name);\n _defineProperty(this, \"termType\", VariableTermType);\n /** The base string for a variable's name */\n _defineProperty(this, \"base\", 'varid:');\n _defineProperty(this, \"classOrder\", ClassOrder.Variable);\n _defineProperty(this, \"isVar\", 1);\n /** The unique identifier of this variable */\n _defineProperty(this, \"uri\", void 0);\n this.base = 'varid:';\n this.uri = Uri.join(name, this.base);\n }\n equals(other) {\n if (!other) {\n return false;\n }\n return this.termType === other.termType && this.value === other.value;\n }\n hashString() {\n return this.toString();\n }\n substitute(bindings) {\n var ref;\n return (ref = bindings[this.toNT()]) != null ? ref : this;\n }\n toString() {\n return Variable.toString(this);\n }\n static toString(variable) {\n if (variable.uri.slice(0, variable.base.length) === variable.base) {\n return `?${variable.uri.slice(variable.base.length)}`;\n }\n return `?${variable.uri}`;\n }\n}","/** A set of features that may be supported by a Data Factory */\n\nexport let Feature = /*#__PURE__*/function (Feature) {\n /** Whether the factory supports termType:Collection terms */\n Feature[\"collections\"] = \"COLLECTIONS\";\n /** Whether the factory supports termType:DefaultGraph terms */\n Feature[\"defaultGraphType\"] = \"DEFAULT_GRAPH_TYPE\";\n /** Whether the factory supports equals on produced instances */\n Feature[\"equalsMethod\"] = \"EQUALS_METHOD\";\n /** Whether the factory can create a unique idempotent identifier for the given term. */\n Feature[\"id\"] = \"ID\";\n /**\n * Whether the factory will return the same instance for subsequent calls.\n * This implies `===`, which means methods like `indexOf` can be used.\n */\n Feature[\"identity\"] = \"IDENTITY\";\n /** Whether the factory supports mapping ids back to instances (should adhere to the identity setting) */\n Feature[\"reversibleId\"] = \"REVERSIBLE_ID\";\n /** Whether the factory supports termType:Variable terms */\n Feature[\"variableType\"] = \"VARIABLE_TYPE\";\n return Feature;\n}({});\n\n/**\n * Defines a DataFactory as used in rdflib, based on the RDF/JS: Data model specification,\n * but with additional extensions\n *\n * bnIndex is optional but useful.\n */","import BlankNode from '../blank-node';\nimport Literal from '../literal';\nimport NamedNode from '../named-node';\nimport Statement from '../statement';\nimport Variable from '../variable';\nimport { EmptyTermType, DefaultGraphTermType, VariableTermType, BlankNodeTermType, LiteralTermType, NamedNodeTermType, CollectionTermType, GraphTermType } from '../types';\nimport DefaultGraph from '../default-graph';\nimport { Feature } from './factory-types';\nimport { isQuad, isTerm } from '../utils/terms';\nimport Collection from \"../collection\";\nexport { defaultGraphURI } from '../utils/default-graph-uri';\n\n/**\n * Gets the default graph\n */\nconst defaultGraph = new DefaultGraph();\n\n/** A basic internal RDFlib datafactory, which does not support Collections */\nconst CanonicalDataFactory = {\n supports: {\n [Feature.collections]: false,\n [Feature.defaultGraphType]: false,\n [Feature.equalsMethod]: true,\n [Feature.identity]: false,\n [Feature.id]: true,\n [Feature.reversibleId]: false,\n [Feature.variableType]: true\n },\n /**\n * Creates a new blank node\n * @param value - The blank node's identifier\n */\n blankNode(value) {\n return new BlankNode(value);\n },\n defaultGraph: () => defaultGraph,\n /**\n * Compares to (rdf) objects for equality.\n */\n equals(a, b) {\n if (a === b || !a || !b) {\n return true;\n }\n if (isQuad(a) || isQuad(b)) {\n if (isQuad(a) && isQuad(b)) {\n return this.equals(a.subject, b.subject) && this.equals(a.predicate, b.predicate) && this.equals(a.object, b.object) && this.equals(a.graph, b.graph);\n }\n return false;\n }\n if (isTerm(a) && isTerm(b)) {\n return this.id(a) === this.id(b);\n }\n return false;\n },\n /**\n * Generates a uniquely identifiably *idempotent* string for the given {term}.\n *\n * Equivalent to [[Term.hashString]]\n *\n * @example Use this to associate data with a term in an object\n * { obj[id(term)] = \"myData\" }\n */\n id(term) {\n if (!term) {\n return 'undefined';\n }\n if (isQuad(term)) {\n return this.quadToNQ(term);\n }\n switch (term.termType) {\n case DefaultGraphTermType:\n return 'defaultGraph';\n case CollectionTermType:\n // Collections are mutable (elements can change), so ID must be stable.\n // Use the collection's blank-node-like identifier, not element content.\n return Collection.toNT(term);\n case VariableTermType:\n return Variable.toString(term);\n default:\n const nq = this.termToNQ(term);\n if (nq) {\n return nq;\n }\n throw new Error(`Can't id term with type '${term.termType}'`);\n }\n },\n isQuad(obj) {\n return obj instanceof Statement;\n },\n /**\n * Creates a new literal node. Does some JS literal parsing for ease of use.\n * @param value - The lexical value\n * @param languageOrDatatype - Either the language or the datatype\n */\n literal(value, languageOrDatatype) {\n if (typeof value !== \"string\" && !languageOrDatatype) {\n return Literal.fromValue(value);\n }\n const strValue = typeof value === 'string' ? value : '' + value;\n if (typeof languageOrDatatype === 'string') {\n if (languageOrDatatype.indexOf(':') === -1) {\n return new Literal(strValue, languageOrDatatype);\n } else {\n return new Literal(strValue, null, this.namedNode(languageOrDatatype));\n }\n } else {\n return new Literal(strValue, null, languageOrDatatype);\n }\n },\n /**\n * Creates a new named node\n * @param value - The new named node\n */\n namedNode(value) {\n return new NamedNode(value);\n },\n /**\n * Creates a new statement\n * @param subject - The subject\n * @param predicate - The predicate\n * @param object - The object\n * @param graph - The containing graph\n */\n quad(subject, predicate, object, graph) {\n return new Statement(subject, predicate, object, graph || defaultGraph);\n },\n /**\n * Creates a new statement\n * @param subject - The subject\n * @param predicate - The predicate\n * @param object - The object\n * @param graph - The containing graph\n */\n triple(subject, predicate, object, graph) {\n return this.quad(subject, predicate, object, graph);\n },\n quadToNQ(q) {\n return `${this.termToNQ(q.subject)} ${this.termToNQ(q.predicate)} ${this.termToNQ(q.object)} ${this.termToNQ(q.graph)} .`;\n },\n /** Stringify a {term} to n-quads serialization. */\n termToNQ(term) {\n switch (term.termType) {\n case BlankNodeTermType:\n return '_:' + term.value;\n case DefaultGraphTermType:\n return '';\n case EmptyTermType:\n return '<http://www.w3.org/1999/02/22-rdf-syntax-ns#nil>';\n case LiteralTermType:\n return Literal.toNT(term);\n case GraphTermType:\n case NamedNodeTermType:\n return '<' + term.value + '>';\n case CollectionTermType:\n return '(' + term.elements.map(t => this.termToNQ(t)).join(' ') + ')';\n default:\n throw new Error(`Can't serialize nonstandard term type (was '${term.termType}')`);\n }\n },\n /** Convert an rdf object (term or quad) to n-quads serialization. */\n toNQ(term) {\n if (this.isQuad(term)) {\n return this.quadToNQ(term);\n }\n return this.termToNQ(term);\n },\n /**\n * Creates a new variable\n * @param name - The name for the variable\n */\n variable(name) {\n return new Variable(name);\n }\n};\n\n/** Contains the factory methods as defined in the spec, plus id */\nexport default CanonicalDataFactory;","/**\n * A Dummy log\n * @module log\n */\nconst log = {\n debug(x) {},\n warn(x) {},\n info(x) {},\n error(x) {},\n success(x) {},\n msg(x) {}\n};\nexport default log;","import RDFlibNamedNode from './named-node';\n/**\n * Gets a namespace for the specified namespace's URI\n * @param nsuri - The URI for the namespace\n * @param [factory] - The factory for creating named nodes with\n */\nexport default function Namespace(nsuri, factory) {\n const dataFactory = factory || {\n namedNode: value => new RDFlibNamedNode(value)\n };\n return function (ln) {\n return dataFactory.namedNode(nsuri + (ln || ''));\n };\n}","/*\n * Generated by PEG.js 0.10.0.\n *\n * http://pegjs.org/\n */\n(function(root, factory) {\n if (typeof define === \"function\" && define.amd) {\n define([], factory);\n } else if (typeof module === \"object\" && module.exports) {\n module.exports = factory();\n } else {\n root.ttl2jsonld = factory();\n }\n})(this, function() {\n \"use strict\";\n\n function peg$subclass(child, parent) {\n function ctor() { this.constructor = child; }\n ctor.prototype = parent.prototype;\n child.prototype = new ctor();\n }\n\n function peg$SyntaxError(message, expected, found, location) {\n this.message = message;\n this.expected = expected;\n this.found = found;\n this.location = location;\n this.name = \"SyntaxError\";\n\n if (typeof Error.captureStackTrace === \"function\") {\n Error.captureStackTrace(this, peg$SyntaxError);\n }\n }\n\n peg$subclass(peg$SyntaxError, Error);\n\n peg$SyntaxError.buildMessage = function(expected, found) {\n var DESCRIBE_EXPECTATION_FNS = {\n literal: function(expectation) {\n return \"\\\"\" + literalEscape(expectation.text) + \"\\\"\";\n },\n\n \"class\": function(expectation) {\n var escapedParts = \"\",\n i;\n\n for (i = 0; i < expectation.parts.length; i++) {\n escapedParts += expectation.parts[i] instanceof Array\n ? classEscape(expectation.parts[i][0]) + \"-\" + classEscape(expectation.parts[i][1])\n : classEscape(expectation.parts[i]);\n }\n\n return \"[\" + (expectation.inverted ? \"^\" : \"\") + escapedParts + \"]\";\n },\n\n any: function(expectation) {\n return \"any character\";\n },\n\n end: function(expectation) {\n return \"end of input\";\n },\n\n other: function(expectation) {\n return expectation.description;\n }\n };\n\n function hex(ch) {\n return ch.charCodeAt(0).toString(16).toUpperCase();\n }\n\n function literalEscape(s) {\n return s\n .replace(/\\\\/g, '\\\\\\\\')\n .replace(/\"/g, '\\\\\"')\n .replace(/\\0/g, '\\\\0')\n .replace(/\\t/g, '\\\\t')\n .replace(/\\n/g, '\\\\n')\n .replace(/\\r/g, '\\\\r')\n .replace(/[\\x00-\\x0F]/g, function(ch) { return '\\\\x0' + hex(ch); })\n .replace(/[\\x10-\\x1F\\x7F-\\x9F]/g, function(ch) { return '\\\\x' + hex(ch); });\n }\n\n function classEscape(s) {\n return s\n .replace(/\\\\/g, '\\\\\\\\')\n .replace(/\\]/g, '\\\\]')\n .replace(/\\^/g, '\\\\^')\n .replace(/-/g, '\\\\-')\n .replace(/\\0/g, '\\\\0')\n .replace(/\\t/g, '\\\\t')\n .replace(/\\n/g, '\\\\n')\n .replace(/\\r/g, '\\\\r')\n .replace(/[\\x00-\\x0F]/g, function(ch) { return '\\\\x0' + hex(ch); })\n .replace(/[\\x10-\\x1F\\x7F-\\x9F]/g, function(ch) { return '\\\\x' + hex(ch); });\n }\n\n function describeExpectation(expectation) {\n return DESCRIBE_EXPECTATION_FNS[expectation.type](expectation);\n }\n\n function describeExpected(expected) {\n var descriptions = new Array(expected.length),\n i, j;\n\n for (i = 0; i < expected.length; i++) {\n descriptions[i] = describeExpectation(expected[i]);\n }\n\n descriptions.sort();\n\n if (descriptions.length > 0) {\n for (i = 1, j = 1; i < descriptions.length; i++) {\n if (descriptions[i - 1] !== descriptions[i]) {\n descriptions[j] = descriptions[i];\n j++;\n }\n }\n descriptions.length = j;\n }\n\n switch (descriptions.length) {\n case 1:\n return descriptions[0];\n\n case 2:\n return descriptions[0] + \" or \" + descriptions[1];\n\n default:\n return descriptions.slice(0, -1).join(\", \")\n + \", or \"\n + descriptions[descriptions.length - 1];\n }\n }\n\n function describeFound(found) {\n return found ? \"\\\"\" + literalEscape(found) + \"\\\"\" : \"end of input\";\n }\n\n return \"Expected \" + describeExpected(expected) + \" but \" + describeFound(found) + \" found.\";\n };\n\n function peg$parse(input, options) {\n options = options !== void 0 ? options : {};\n\n var peg$FAILED = {},\n\n peg$startRuleFunctions = { turtleDoc: peg$parseturtleDoc },\n peg$startRuleFunction = peg$parseturtleDoc,\n\n peg$c0 = function(statements) {\n var jsonld = context.toJSON();\n jsonld[\"@graph\"] = [];\n statements.filter(a=>Array.isArray(a)).forEach(a=>{\n a.forEach(b=>{\n jsonld[\"@graph\"].push(b);\n });\n });\n\n if(jsonld[\"@graph\"].length===1){\n Object.assign(jsonld,jsonld[\"@graph\"][0]);\n delete jsonld[\"@graph\"];\n }\n\n return jsonld;\n },\n peg$c1 = \"\\uFEFF\",\n peg$c2 = peg$literalExpectation(\"\\uFEFF\", false),\n peg$c3 = \".\",\n peg$c4 = peg$literalExpectation(\".\", false),\n peg$c5 = function(a) {return a;},\n peg$c6 = \"#\",\n peg$c7 = peg$literalExpectation(\"#\", false),\n peg$c8 = /^[^\\n]/,\n peg$c9 = peg$classExpectation([\"\\n\"], true, false),\n peg$c10 = \"\\n\",\n peg$c11 = peg$literalExpectation(\"\\n\", false),\n peg$c12 = function(a) {return a.join(\"\");},\n peg$c13 = \"@prefix\",\n peg$c14 = peg$literalExpectation(\"@prefix\", false),\n peg$c15 = function(a, b) {\n context.addPrefix(a===\"\" ? \"0\" : a,b);\n return {};\n },\n peg$c16 = \"@base\",\n peg$c17 = peg$literalExpectation(\"@base\", false),\n peg$c18 = function(a) {\n context.addBase(a);\n return {};\n },\n peg$c19 = /^[Bb]/,\n peg$c20 = peg$classExpectation([\"B\", \"b\"], false, false),\n peg$c21 = /^[Aa]/,\n peg$c22 = peg$classExpectation([\"A\", \"a\"], false, false),\n peg$c23 = /^[Ss]/,\n peg$c24 = peg$classExpectation([\"S\", \"s\"], false, false),\n peg$c25 = /^[Ee]/,\n peg$c26 = peg$classExpectation([\"E\", \"e\"], false, false),\n peg$c27 = /^[Pp]/,\n peg$c28 = peg$classExpectation([\"P\", \"p\"], false, false),\n peg$c29 = /^[Rr]/,\n peg$c30 = peg$classExpectation([\"R\", \"r\"], false, false),\n peg$c31 = /^[Ff]/,\n peg$c32 = peg$classExpectation([\"F\", \"f\"], false, false),\n peg$c33 = /^[Ii]/,\n peg$c34 = peg$classExpectation([\"I\", \"i\"], false, false),\n peg$c35 = /^[Xx]/,\n peg$c36 = peg$classExpectation([\"X\", \"x\"], false, false),\n peg$c37 = function(s, p) {\n var x = {};\n if(typeof s==='string' && s!=='[]') x[\"@id\"] = s;\n else if(typeof s==='object') Object.assign(x,s);\n if(p) Object.assign(x,p);\n return [x];\n },\n peg$c38 = function(s, p) {\n var x = {};\n if(s) Object.assign(x,s);\n if(p) Object.assign(x,p);\n return [x];\n },\n peg$c39 = \";\",\n peg$c40 = peg$literalExpectation(\";\", false),\n peg$c41 = function(a, b, e, f) {var x={};x[e]=f;return x;},\n peg$c42 = function(a, b, d) {return d;},\n peg$c43 = function(a, b, c) {\n var x = {};\n c.unshift(createObject(a,b));\n c.forEach(t=>{\n if(!t) return;\n Object.keys(t).forEach(key=>{\n t[key].forEach(val=>{\n if(key===\"@type\" && val[\"@id\"]!==undefined) val = val[\"@id\"];\n if(x[key]===undefined) x[key] = val;\n else if(Array.isArray(x[key])) x[key].push(val);\n else x[key] = [x[key],val];\n });\n });\n });\n return x;\n },\n peg$c44 = \",\",\n peg$c45 = peg$literalExpectation(\",\", false),\n peg$c46 = function(a, c) {return c;},\n peg$c47 = function(a, b) {\n b.unshift(a);\n return b;\n },\n peg$c48 = \"a\",\n peg$c49 = peg$literalExpectation(\"a\", false),\n peg$c50 = function() {return '@type';},\n peg$c51 = function(a) {return expandList(a,true);},\n peg$c52 = function(a) {return expandList(a,false);},\n peg$c53 = function(a) {return a===\"[]\" ? {} : {\"@id\":a};},\n peg$c54 = function(a) {return {\"@id\":a};},\n peg$c55 = \"[\",\n peg$c56 = peg$literalExpectation(\"[\", false),\n peg$c57 = \"]\",\n peg$c58 = peg$literalExpectation(\"]\", false),\n peg$c59 = \"(\",\n peg$c60 = peg$literalExpectation(\"(\", false),\n peg$c61 = \")\",\n peg$c62 = peg$literalExpectation(\")\", false),\n peg$c63 = function(a) {return {\"@list\":a};},\n peg$c64 = function(a, b) {return {\"@value\":a,\"@language\":b};},\n peg$c65 = \"^^\",\n peg$c66 = peg$literalExpectation(\"^^\", false),\n peg$c67 = function(a, b) {\n if(b===\"http://www.w3.org/2001/XMLSchema#boolean\" && a===\"true\") return true;\n if(b===\"http://www.w3.org/2001/XMLSchema#boolean\" && a===\"false\") return false;\n if(b===\"http://www.w3.org/2001/XMLSchema#integer\") return parseInt(a);\n if(b===\"http://www.w3.org/2001/XMLSchema#double\") return parseFloat(a);\n\n const uri = context.resolve(b,true);\n if(uri){\n const prefix = b.split(\":\")[0];\n if(uri===\"http://www.w3.org/2001/XMLSchema#boolean\" && a===\"true\"){\n context.decrement(prefix);\n return true;\n }\n if(uri===\"http://www.w3.org/2001/XMLSchema#boolean\" && a===\"false\"){\n context.decrement(prefix);\n return false;\n }\n if(uri===\"http://www.w3.org/2001/XMLSchema#integer\"){\n context.decrement(prefix);\n return parseInt(a);\n }\n if(uri===\"http://www.w3.org/2001/XMLSchema#double\"){\n context.decrement(prefix);\n return parseFloat(a);\n }\n }\n return {\"@value\":a,\"@type\":b};\n },\n peg$c68 = \"true\",\n peg$c69 = peg$literalExpectation(\"true\", false),\n peg$c70 = function() {return true;},\n peg$c71 = \"false\",\n peg$c72 = peg$literalExpectation(\"false\", false),\n peg$c73 = function() {return false;},\n peg$c74 = function(a) {return a+\":\";},\n peg$c75 = \"<\",\n peg$c76 = peg$literalExpectation(\"<\", false),\n peg$c77 = /^[^\\0- <>\"{}|\\^`\\\\]/,\n peg$c78 = peg$classExpectation([[\"\\0\", \" \"], \"<\", \">\", \"\\\"\", \"{\", \"}\", \"|\", \"^\", \"`\", \"\\\\\"], true, false),\n peg$c79 = \">\",\n peg$c80 = peg$literalExpectation(\">\", false),\n peg$c81 = function(a) {\n const decoded = a.map(s=> {\n if(0x10000 <= s.codePointAt(0) && s.codePointAt(0) <= 0xeffff) return 'a';\n if(s.length===1) return s;\n if(s.length===6) return String.fromCharCode(\"0x\"+s.substring(2));\n if(s.length===10) return String.fromCodePoint(\"0x\"+s.substring(2));\n return s;\n }).join(\"\");\n if(decoded.match(/^[^\\u0000-\\u0020<>\"{}|^`\\\\]*$/)){\n var join = a.join(\"\");\n try{\n return context.resolve(join);\n }catch(e){\n error(\"Invalid IRIREF \"+join);\n }\n }\n else error(\"Invalid IRIREF \"+a.join(\"\")+\" / \"+decoded);\n },\n peg$c82 = \":\",\n peg$c83 = peg$literalExpectation(\":\", false),\n peg$c84 = function(a) {\n a = a || \"0\";\n if(context.hasPrefix(a)===false)\n error(\"undefined prefix \"+a);\n return a;\n },\n peg$c85 = function(a) {return (a||\"\");},\n peg$c86 = function(a, b) {\n context.increment(a);\n return context.resolve(a+\":\"+b);\n },\n peg$c87 = \"_:\",\n peg$c88 = peg$literalExpectation(\"_:\", false),\n peg$c89 = /^[0-9]/,\n peg$c90 = peg$classExpectation([[\"0\", \"9\"]], false, false),\n peg$c91 = \"@\",\n peg$c92 = peg$literalExpectation(\"@\", false),\n peg$c93 = /^[a-zA-Z]/,\n peg$c94 = peg$classExpectation([[\"a\", \"z\"], [\"A\", \"Z\"]], false, false),\n peg$c95 = \"-\",\n peg$c96 = peg$literalExpectation(\"-\", false),\n peg$c97 = /^[a-zA-Z0-9]/,\n peg$c98 = peg$classExpectation([[\"a\", \"z\"], [\"A\", \"Z\"], [\"0\", \"9\"]], false, false),\n peg$c99 = function(a, s) {return '-'+s.join(\"\");},\n peg$c100 = function(a, b) {return a.join(\"\")+b.join(\"\");},\n peg$c101 = /^[+\\-]/,\n peg$c102 = peg$classExpectation([\"+\", \"-\"], false, false),\n peg$c103 = function(a) {\n if(a.match(/^[0+][0-9]+$/))\n return {\n \"@value\" : a,\n \"@type\" : \"http://www.w3.org/2001/XMLSchema#integer\"\n };\n return parseInt(a);\n },\n peg$c104 = function(a) {\n return {\n \"@value\" : a,\n \"@type\" : \"http://www.w3.org/2001/XMLSchema#decimal\"\n }\n },\n peg$c105 = function(a) {\n return {\n \"@value\" : a,\n \"@type\" : \"http://www.w3.org/2001/XMLSchema#double\"\n };\n },\n peg$c106 = /^[eE]/,\n peg$c107 = peg$classExpectation([\"e\", \"E\"], false, false),\n peg$c108 = \"\\\"\",\n peg$c109 = peg$literalExpectation(\"\\\"\", false),\n peg$c110 = /^[^\"\\\\\\n\\r]/,\n peg$c111 = peg$classExpectation([\"\\\"\", \"\\\\\", \"\\n\", \"\\r\"], true, false),\n peg$c112 = \"'\",\n peg$c113 = peg$literalExpectation(\"'\", false),\n peg$c114 = /^[^'\\\\\\n\\r]/,\n peg$c115 = peg$classExpectation([\"'\", \"\\\\\", \"\\n\", \"\\r\"], true, false),\n peg$c116 = \"'''\",\n peg$c117 = peg$literalExpectation(\"'''\", false),\n peg$c118 = /^[^'\\\\]/,\n peg$c119 = peg$classExpectation([\"'\", \"\\\\\"], true, false),\n peg$c120 = \"''\",\n peg$c121 = peg$literalExpectation(\"''\", false),\n peg$c122 = function(head, a) {return \"''\"+a.join(\"\");},\n peg$c123 = function(head, a) {return \"'\" +a.join(\"\");},\n peg$c124 = function(head, body) {return head.join(\"\")+body.join(\"\");},\n peg$c125 = \"\\\"\\\"\\\"\",\n peg$c126 = peg$literalExpectation(\"\\\"\\\"\\\"\", false),\n peg$c127 = /^[^\"\\\\]/,\n peg$c128 = peg$classExpectation([\"\\\"\", \"\\\\\"], true, false),\n peg$c129 = \"\\\"\\\"\",\n peg$c130 = peg$literalExpectation(\"\\\"\\\"\", false),\n peg$c131 = function(head, a) {return '\"\"'+a.join(\"\");},\n peg$c132 = function(head, a) {return '\"' +a.join(\"\");},\n peg$c133 = \"\\\\U\",\n peg$c134 = peg$literalExpectation(\"\\\\U\", false),\n peg$c135 = function(hex) {\n return String.fromCodePoint(parseInt(hex.join(\"\"),16));\n },\n peg$c136 = \"\\\\u\",\n peg$c137 = peg$literalExpectation(\"\\\\u\", false),\n peg$c138 = function(hex) {\n return String.fromCharCode(parseInt(hex.join(\"\"),16));\n },\n peg$c139 = \"\\\\t\",\n peg$c140 = peg$literalExpectation(\"\\\\t\", false),\n peg$c141 = function() {return '\\t';},\n peg$c142 = \"\\\\b\",\n peg$c143 = peg$literalExpectation(\"\\\\b\", false),\n peg$c144 = function() {return '\\b';},\n peg$c145 = \"\\\\n\",\n peg$c146 = peg$literalExpectation(\"\\\\n\", false),\n peg$c147 = function() {return '\\n';},\n peg$c148 = \"\\\\r\",\n peg$c149 = peg$literalExpectation(\"\\\\r\", false),\n peg$c150 = function() {return '\\r';},\n peg$c151 = \"\\\\f\",\n peg$c152 = peg$literalExpectation(\"\\\\f\", false),\n peg$c153 = function() {return '\\f';},\n peg$c154 = \"\\\\\\\"\",\n peg$c155 = peg$literalExpectation(\"\\\\\\\"\", false),\n peg$c156 = function() {return '\"';},\n peg$c157 = \"\\\\'\",\n peg$c158 = peg$literalExpectation(\"\\\\'\", false),\n peg$c159 = function() {return \"'\";},\n peg$c160 = \"\\\\\\\\\",\n peg$c161 = peg$literalExpectation(\"\\\\\\\\\", false),\n peg$c162 = function() {return '\\\\';},\n peg$c163 = /^[ \\t\\r\\n]/,\n peg$c164 = peg$classExpectation([\" \", \"\\t\", \"\\r\", \"\\n\"], false, false),\n peg$c165 = function() {return \"[]\";},\n peg$c166 = /^[\\uD800-\\uDBFF]/,\n peg$c167 = peg$classExpectation([[\"\\uD800\", \"\\uDBFF\"]], false, false),\n peg$c168 = /^[\\uDC00-\\uDFFF]/,\n peg$c169 = peg$classExpectation([[\"\\uDC00\", \"\\uDFFF\"]], false, false),\n peg$c170 = function(a, b) {return a+b;},\n peg$c171 = /^[A-Za-z\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD]/,\n peg$c172 = peg$classExpectation([[\"A\", \"Z\"], [\"a\", \"z\"], [\"\\xC0\", \"\\xD6\"], [\"\\xD8\", \"\\xF6\"], [\"\\xF8\", \"\\u02FF\"], [\"\\u0370\", \"\\u037D\"], [\"\\u037F\", \"\\u1FFF\"], [\"\\u200C\", \"\\u200D\"], [\"\\u2070\", \"\\u218F\"], [\"\\u2C00\", \"\\u2FEF\"], [\"\\u3001\", \"\\uD7FF\"], [\"\\uF900\", \"\\uFDCF\"], [\"\\uFDF0\", \"\\uFFFD\"]], false, false),\n peg$c173 = \"_\",\n peg$c174 = peg$literalExpectation(\"_\", false),\n peg$c175 = \"\\xB7\",\n peg$c176 = peg$literalExpectation(\"\\xB7\", false),\n peg$c177 = /^[\\u0300-\\u036F]/,\n peg$c178 = peg$classExpectation([[\"\\u0300\", \"\\u036F\"]], false, false),\n peg$c179 = /^[\\u203F-\\u2040]/,\n peg$c180 = peg$classExpectation([[\"\\u203F\", \"\\u2040\"]], false, false),\n peg$c181 = function(head, body, a, b) {return a.join(\"\")+b.join(\"\");},\n peg$c182 = function(head, body, tail) {return head+body.join(\"\")+tail.join(\"\");},\n peg$c183 = \"%\",\n peg$c184 = peg$literalExpectation(\"%\", false),\n peg$c185 = /^[0-9A-Fa-f]/,\n peg$c186 = peg$classExpectation([[\"0\", \"9\"], [\"A\", \"F\"], [\"a\", \"f\"]], false, false),\n peg$c187 = \"\\\\\",\n peg$c188 = peg$literalExpectation(\"\\\\\", false),\n peg$c189 = /^[_~.!$&'()*+,;=\\/?#@%\\-]/,\n peg$c190 = peg$classExpectation([\"_\", \"~\", \".\", \"!\", \"$\", \"&\", \"'\", \"(\", \")\", \"*\", \"+\", \",\", \";\", \"=\", \"/\", \"?\", \"#\", \"@\", \"%\", \"-\"], false, false),\n\n peg$currPos = 0,\n peg$savedPos = 0,\n peg$posDetailsCache = [{ line: 1, column: 1 }],\n peg$maxFailPos = 0,\n peg$maxFailExpected = [],\n peg$silentFails = 0,\n\n peg$result;\n\n if (\"startRule\" in options) {\n if (!(options.startRule in peg$startRuleFunctions)) {\n throw new Error(\"Can't start parsing from rule \\\"\" + options.startRule + \"\\\".\");\n }\n\n peg$startRuleFunction = peg$startRuleFunctions[options.startRule];\n }\n\n function text() {\n return input.substring(peg$savedPos, peg$currPos);\n }\n\n function location() {\n return peg$computeLocation(peg$savedPos, peg$currPos);\n }\n\n function expected(description, location) {\n location = location !== void 0 ? location : peg$computeLocation(peg$savedPos, peg$currPos)\n\n throw peg$buildStructuredError(\n [peg$otherExpectation(description)],\n input.substring(peg$savedPos, peg$currPos),\n location\n );\n }\n\n function error(message, location) {\n location = location !== void 0 ? location : peg$computeLocation(peg$savedPos, peg$currPos)\n\n throw peg$buildSimpleError(message, location);\n }\n\n function peg$literalExpectation(text, ignoreCase) {\n return { type: \"literal\", text: text, ignoreCase: ignoreCase };\n }\n\n function peg$classExpectation(parts, inverted, ignoreCase) {\n return { type: \"class\", parts: parts, inverted: inverted, ignoreCase: ignoreCase };\n }\n\n function peg$anyExpectation() {\n return { type: \"any\" };\n }\n\n function peg$endExpectation() {\n return { type: \"end\" };\n }\n\n function peg$otherExpectation(description) {\n return { type: \"other\", description: description };\n }\n\n function peg$computePosDetails(pos) {\n var details = peg$posDetailsCache[pos], p;\n\n if (details) {\n return details;\n } else {\n p = pos - 1;\n while (!peg$posDetailsCache[p]) {\n p--;\n }\n\n details = peg$posDetailsCache[p];\n details = {\n line: details.line,\n column: details.column\n };\n\n while (p < pos) {\n if (input.charCodeAt(p) === 10) {\n details.line++;\n details.column = 1;\n } else {\n details.column++;\n }\n\n p++;\n }\n\n peg$posDetailsCache[pos] = details;\n return details;\n }\n }\n\n function peg$computeLocation(startPos, endPos) {\n var startPosDetails = peg$computePosDetails(startPos),\n endPosDetails = peg$computePosDetails(endPos);\n\n return {\n start: {\n offset: startPos,\n line: startPosDetails.line,\n column: startPosDetails.column\n },\n end: {\n offset: endPos,\n line: endPosDetails.line,\n column: endPosDetails.column\n }\n };\n }\n\n function peg$fail(expected) {\n if (peg$currPos < peg$maxFailPos) { return; }\n\n if (peg$currPos > peg$maxFailPos) {\n peg$maxFailPos = peg$currPos;\n peg$maxFailExpected = [];\n }\n\n peg$maxFailExpected.push(expected);\n }\n\n function peg$buildSimpleError(message, location) {\n return new peg$SyntaxError(message, null, null, location);\n }\n\n function peg$buildStructuredError(expected, found, location) {\n return new peg$SyntaxError(\n peg$SyntaxError.buildMessage(expected, found),\n expected,\n found,\n location\n );\n }\n\n function peg$parseturtleDoc() {\n var s0, s1, s2, s3, s4;\n\n s0 = peg$currPos;\n s1 = [];\n s2 = peg$parseBOM();\n while (s2 !== peg$FAILED) {\n s1.push(s2);\n s2 = peg$parseBOM();\n }\n if (s1 !== peg$FAILED) {\n s2 = [];\n s3 = peg$parsestatement();\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n s3 = peg$parsestatement();\n }\n if (s2 !== peg$FAILED) {\n s3 = [];\n s4 = peg$parseIGNORE();\n while (s4 !== peg$FAILED) {\n s3.push(s4);\n s4 = peg$parseIGNORE();\n }\n if (s3 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c0(s2);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n function peg$parseBOM() {\n var s0;\n\n if (input.charCodeAt(peg$currPos) === 65279) {\n s0 = peg$c1;\n peg$currPos++;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c2); }\n }\n\n return s0;\n }\n\n function peg$parsestatement() {\n var s0, s1, s2, s3;\n\n s0 = peg$parsedirective();\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n s1 = peg$parsetriples();\n if (s1 !== peg$FAILED) {\n s2 = [];\n s3 = peg$parseIGNORE();\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n s3 = peg$parseIGNORE();\n }\n if (s2 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 46) {\n s3 = peg$c3;\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c4); }\n }\n if (s3 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c5(s1);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n }\n\n return s0;\n }\n\n function peg$parseCOMMENT() {\n var s0, s1, s2, s3;\n\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 35) {\n s1 = peg$c6;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c7); }\n }\n if (s1 !== peg$FAILED) {\n s2 = [];\n if (peg$c8.test(input.charAt(peg$currPos))) {\n s3 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c9); }\n }\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n if (peg$c8.test(input.charAt(peg$currPos))) {\n s3 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c9); }\n }\n }\n if (s2 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 10) {\n s3 = peg$c10;\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c11); }\n }\n if (s3 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c12(s2);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n function peg$parseIGNORE() {\n var s0;\n\n s0 = peg$parseWS();\n if (s0 === peg$FAILED) {\n s0 = peg$parseCOMMENT();\n }\n\n return s0;\n }\n\n function peg$parsedirective() {\n var s0;\n\n s0 = peg$parseprefixID();\n if (s0 === peg$FAILED) {\n s0 = peg$parsebase();\n if (s0 === peg$FAILED) {\n s0 = peg$parsesparqlPrefix();\n if (s0 === peg$FAILED) {\n s0 = peg$parsesparqlBase();\n }\n }\n }\n\n return s0;\n }\n\n function peg$parseprefixID() {\n var s0, s1, s2, s3, s4, s5, s6, s7, s8;\n\n s0 = peg$currPos;\n s1 = [];\n s2 = peg$parseIGNORE();\n while (s2 !== peg$FAILED) {\n s1.push(s2);\n s2 = peg$parseIGNORE();\n }\n if (s1 !== peg$FAILED) {\n if (input.substr(peg$currPos, 7) === peg$c13) {\n s2 = peg$c13;\n peg$currPos += 7;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c14); }\n }\n if (s2 !== peg$FAILED) {\n s3 = [];\n s4 = peg$parseIGNORE();\n while (s4 !== peg$FAILED) {\n s3.push(s4);\n s4 = peg$parseIGNORE();\n }\n if (s3 !== peg$FAILED) {\n s4 = peg$parsePNAME_NS_NO_CHECK();\n if (s4 !== peg$FAILED) {\n s5 = [];\n s6 = peg$parseIGNORE();\n while (s6 !== peg$FAILED) {\n s5.push(s6);\n s6 = peg$parseIGNORE();\n }\n if (s5 !== peg$FAILED) {\n s6 = peg$parseIRIREF();\n if (s6 !== peg$FAILED) {\n s7 = [];\n s8 = peg$parseIGNORE();\n while (s8 !== peg$FAILED) {\n s7.push(s8);\n s8 = peg$parseIGNORE();\n }\n if (s7 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 46) {\n s8 = peg$c3;\n peg$currPos++;\n } else {\n s8 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c4); }\n }\n if (s8 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c15(s4, s6);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n function peg$parsebase() {\n var s0, s1, s2, s3, s4, s5, s6;\n\n s0 = peg$currPos;\n s1 = [];\n s2 = peg$parseIGNORE();\n while (s2 !== peg$FAILED) {\n s1.push(s2);\n s2 = peg$parseIGNORE();\n }\n if (s1 !== peg$FAILED) {\n if (input.substr(peg$currPos, 5) === peg$c16) {\n s2 = peg$c16;\n peg$currPos += 5;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c17); }\n }\n if (s2 !== peg$FAILED) {\n s3 = [];\n s4 = peg$parseIGNORE();\n while (s4 !== peg$FAILED) {\n s3.push(s4);\n s4 = peg$parseIGNORE();\n }\n if (s3 !== peg$FAILED) {\n s4 = peg$parseIRIREF();\n if (s4 !== peg$FAILED) {\n s5 = [];\n s6 = peg$parseIGNORE();\n while (s6 !== peg$FAILED) {\n s5.push(s6);\n s6 = peg$parseIGNORE();\n }\n if (s5 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 46) {\n s6 = peg$c3;\n peg$currPos++;\n } else {\n s6 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c4); }\n }\n if (s6 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c18(s4);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n function peg$parsesparqlBase() {\n var s0, s1, s2, s3, s4, s5, s6, s7;\n\n s0 = peg$currPos;\n s1 = [];\n s2 = peg$parseIGNORE();\n while (s2 !== peg$FAILED) {\n s1.push(s2);\n s2 = peg$parseIGNORE();\n }\n if (s1 !== peg$FAILED) {\n if (peg$c19.test(input.charAt(peg$currPos))) {\n s2 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c20); }\n }\n if (s2 !== peg$FAILED) {\n if (peg$c21.test(input.charAt(peg$currPos))) {\n s3 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c22); }\n }\n if (s3 !== peg$FAILED) {\n if (peg$c23.test(input.charAt(peg$currPos))) {\n s4 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s4 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c24); }\n }\n if (s4 !== peg$FAILED) {\n if (peg$c25.test(input.charAt(peg$currPos))) {\n s5 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s5 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c26); }\n }\n if (s5 !== peg$FAILED) {\n s6 = [];\n s7 = peg$parseIGNORE();\n while (s7 !== peg$FAILED) {\n s6.push(s7);\n s7 = peg$parseIGNORE();\n }\n if (s6 !== peg$FAILED) {\n s7 = peg$parseIRIREF();\n if (s7 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c18(s7);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n function peg$parsesparqlPrefix() {\n var s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, s10, s11;\n\n s0 = peg$currPos;\n s1 = [];\n s2 = peg$parseIGNORE();\n while (s2 !== peg$FAILED) {\n s1.push(s2);\n s2 = peg$parseIGNORE();\n }\n if (s1 !== peg$FAILED) {\n if (peg$c27.test(input.charAt(peg$currPos))) {\n s2 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c28); }\n }\n if (s2 !== peg$FAILED) {\n if (peg$c29.test(input.charAt(peg$currPos))) {\n s3 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c30); }\n }\n if (s3 !== peg$FAILED) {\n if (peg$c25.test(input.charAt(peg$currPos))) {\n s4 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s4 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c26); }\n }\n if (s4 !== peg$FAILED) {\n if (peg$c31.test(input.charAt(peg$currPos))) {\n s5 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s5 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c32); }\n }\n if (s5 !== peg$FAILED) {\n if (peg$c33.test(input.charAt(peg$currPos))) {\n s6 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s6 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c34); }\n }\n if (s6 !== peg$FAILED) {\n if (peg$c35.test(input.charAt(peg$currPos))) {\n s7 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s7 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c36); }\n }\n if (s7 !== peg$FAILED) {\n s8 = [];\n s9 = peg$parseIGNORE();\n while (s9 !== peg$FAILED) {\n s8.push(s9);\n s9 = peg$parseIGNORE();\n }\n if (s8 !== peg$FAILED) {\n s9 = peg$parsePNAME_NS_NO_CHECK();\n if (s9 !== peg$FAILED) {\n s10 = [];\n s11 = peg$parseIGNORE();\n while (s11 !== peg$FAILED) {\n s10.push(s11);\n s11 = peg$parseIGNORE();\n }\n if (s10 !== peg$FAILED) {\n s11 = peg$parseIRIREF();\n if (s11 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c15(s9, s11);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n function peg$parsetriples() {\n var s0, s1, s2;\n\n s0 = peg$currPos;\n s1 = peg$parsesubject();\n if (s1 !== peg$FAILED) {\n s2 = peg$parsepredicateObjectList();\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c37(s1, s2);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n s1 = peg$parseblankNodePropertyList();\n if (s1 !== peg$FAILED) {\n s2 = peg$parsepredicateObjectList();\n if (s2 === peg$FAILED) {\n s2 = null;\n }\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c38(s1, s2);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n }\n\n return s0;\n }\n\n function peg$parsepredicateObjectList() {\n var s0, s1, s2, s3, s4, s5, s6, s7, s8, s9;\n\n s0 = peg$currPos;\n s1 = peg$parseverb();\n if (s1 !== peg$FAILED) {\n s2 = peg$parseobjectList();\n if (s2 !== peg$FAILED) {\n s3 = [];\n s4 = peg$currPos;\n s5 = [];\n s6 = peg$parseIGNORE();\n while (s6 !== peg$FAILED) {\n s5.push(s6);\n s6 = peg$parseIGNORE();\n }\n if (s5 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 59) {\n s6 = peg$c39;\n peg$currPos++;\n } else {\n s6 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c40); }\n }\n if (s6 !== peg$FAILED) {\n s7 = peg$currPos;\n s8 = peg$parseverb();\n if (s8 !== peg$FAILED) {\n s9 = peg$parseobjectList();\n if (s9 !== peg$FAILED) {\n peg$savedPos = s7;\n s8 = peg$c41(s1, s2, s8, s9);\n s7 = s8;\n } else {\n peg$currPos = s7;\n s7 = peg$FAILED;\n }\n } else {\n peg$currPos = s7;\n s7 = peg$FAILED;\n }\n if (s7 === peg$FAILED) {\n s7 = null;\n }\n if (s7 !== peg$FAILED) {\n peg$savedPos = s4;\n s5 = peg$c42(s1, s2, s7);\n s4 = s5;\n } else {\n peg$currPos = s4;\n s4 = peg$FAILED;\n }\n } else {\n peg$currPos = s4;\n s4 = peg$FAILED;\n }\n } else {\n peg$currPos = s4;\n s4 = peg$FAILED;\n }\n while (s4 !== peg$FAILED) {\n s3.push(s4);\n s4 = peg$currPos;\n s5 = [];\n s6 = peg$parseIGNORE();\n while (s6 !== peg$FAILED) {\n s5.push(s6);\n s6 = peg$parseIGNORE();\n }\n if (s5 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 59) {\n s6 = peg$c39;\n peg$currPos++;\n } else {\n s6 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c40); }\n }\n if (s6 !== peg$FAILED) {\n s7 = peg$currPos;\n s8 = peg$parseverb();\n if (s8 !== peg$FAILED) {\n s9 = peg$parseobjectList();\n if (s9 !== peg$FAILED) {\n peg$savedPos = s7;\n s8 = peg$c41(s1, s2, s8, s9);\n s7 = s8;\n } else {\n peg$currPos = s7;\n s7 = peg$FAILED;\n }\n } else {\n peg$currPos = s7;\n s7 = peg$FAILED;\n }\n if (s7 === peg$FAILED) {\n s7 = null;\n }\n if (s7 !== peg$FAILED) {\n peg$savedPos = s4;\n s5 = peg$c42(s1, s2, s7);\n s4 = s5;\n } else {\n peg$currPos = s4;\n s4 = peg$FAILED;\n }\n } else {\n peg$currPos = s4;\n s4 = peg$FAILED;\n }\n } else {\n peg$currPos = s4;\n s4 = peg$FAILED;\n }\n }\n if (s3 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c43(s1, s2, s3);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n function peg$parseobjectList() {\n var s0, s1, s2, s3, s4, s5, s6;\n\n s0 = peg$currPos;\n s1 = peg$parseobject();\n if (s1 !== peg$FAILED) {\n s2 = [];\n s3 = peg$currPos;\n s4 = [];\n s5 = peg$parseIGNORE();\n while (s5 !== peg$FAILED) {\n s4.push(s5);\n s5 = peg$parseIGNORE();\n }\n if (s4 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 44) {\n s5 = peg$c44;\n peg$currPos++;\n } else {\n s5 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c45); }\n }\n if (s5 !== peg$FAILED) {\n s6 = peg$parseobject();\n if (s6 !== peg$FAILED) {\n peg$savedPos = s3;\n s4 = peg$c46(s1, s6);\n s3 = s4;\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n s3 = peg$currPos;\n s4 = [];\n s5 = peg$parseIGNORE();\n while (s5 !== peg$FAILED) {\n s4.push(s5);\n s5 = peg$parseIGNORE();\n }\n if (s4 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 44) {\n s5 = peg$c44;\n peg$currPos++;\n } else {\n s5 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c45); }\n }\n if (s5 !== peg$FAILED) {\n s6 = peg$parseobject();\n if (s6 !== peg$FAILED) {\n peg$savedPos = s3;\n s4 = peg$c46(s1, s6);\n s3 = s4;\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n }\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c47(s1, s2);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n function peg$parseverb() {\n var s0, s1, s2;\n\n s0 = peg$currPos;\n s1 = peg$parsepredicate();\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c5(s1);\n }\n s0 = s1;\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n s1 = [];\n s2 = peg$parseIGNORE();\n while (s2 !== peg$FAILED) {\n s1.push(s2);\n s2 = peg$parseIGNORE();\n }\n if (s1 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 97) {\n s2 = peg$c48;\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c49); }\n }\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c50();\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n }\n\n return s0;\n }\n\n function peg$parsesubject() {\n var s0, s1;\n\n s0 = peg$currPos;\n s1 = peg$parsecollection();\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c51(s1);\n }\n s0 = s1;\n if (s0 === peg$FAILED) {\n s0 = peg$parseBlankNode();\n if (s0 === peg$FAILED) {\n s0 = peg$parseiri();\n }\n }\n\n return s0;\n }\n\n function peg$parsepredicate() {\n var s0, s1, s2;\n\n s0 = peg$currPos;\n s1 = [];\n s2 = peg$parseIGNORE();\n while (s2 !== peg$FAILED) {\n s1.push(s2);\n s2 = peg$parseIGNORE();\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$parseiri();\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c5(s2);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n function peg$parseobject() {\n var s0, s1;\n\n s0 = peg$parseliteral();\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n s1 = peg$parsecollection();\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c52(s1);\n }\n s0 = s1;\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n s1 = peg$parseBlankNode();\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c53(s1);\n }\n s0 = s1;\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n s1 = peg$parseblankNodePropertyList();\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c5(s1);\n }\n s0 = s1;\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n s1 = peg$parseiri();\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c54(s1);\n }\n s0 = s1;\n }\n }\n }\n }\n\n return s0;\n }\n\n function peg$parseliteral() {\n var s0;\n\n s0 = peg$parseRDFLiteral();\n if (s0 === peg$FAILED) {\n s0 = peg$parseNumericLiteral();\n if (s0 === peg$FAILED) {\n s0 = peg$parseBooleanLiteral();\n }\n }\n\n return s0;\n }\n\n function peg$parseblankNodePropertyList() {\n var s0, s1, s2, s3, s4, s5;\n\n s0 = peg$currPos;\n s1 = [];\n s2 = peg$parseIGNORE();\n while (s2 !== peg$FAILED) {\n s1.push(s2);\n s2 = peg$parseIGNORE();\n }\n if (s1 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 91) {\n s2 = peg$c55;\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c56); }\n }\n if (s2 !== peg$FAILED) {\n s3 = peg$parsepredicateObjectList();\n if (s3 !== peg$FAILED) {\n s4 = [];\n s5 = peg$parseIGNORE();\n while (s5 !== peg$FAILED) {\n s4.push(s5);\n s5 = peg$parseIGNORE();\n }\n if (s4 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 93) {\n s5 = peg$c57;\n peg$currPos++;\n } else {\n s5 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c58); }\n }\n if (s5 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c5(s3);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n function peg$parsecollection() {\n var s0, s1, s2, s3, s4, s5;\n\n s0 = peg$currPos;\n s1 = [];\n s2 = peg$parseIGNORE();\n while (s2 !== peg$FAILED) {\n s1.push(s2);\n s2 = peg$parseIGNORE();\n }\n if (s1 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 40) {\n s2 = peg$c59;\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c60); }\n }\n if (s2 !== peg$FAILED) {\n s3 = [];\n s4 = peg$parseobject();\n while (s4 !== peg$FAILED) {\n s3.push(s4);\n s4 = peg$parseobject();\n }\n if (s3 !== peg$FAILED) {\n s4 = [];\n s5 = peg$parseIGNORE();\n while (s5 !== peg$FAILED) {\n s4.push(s5);\n s5 = peg$parseIGNORE();\n }\n if (s4 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 41) {\n s5 = peg$c61;\n peg$currPos++;\n } else {\n s5 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c62); }\n }\n if (s5 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c63(s3);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n function peg$parseNumericLiteral() {\n var s0, s1, s2;\n\n s0 = peg$currPos;\n s1 = [];\n s2 = peg$parseIGNORE();\n while (s2 !== peg$FAILED) {\n s1.push(s2);\n s2 = peg$parseIGNORE();\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$parseDOUBLE();\n if (s2 === peg$FAILED) {\n s2 = peg$parseDECIMAL();\n if (s2 === peg$FAILED) {\n s2 = peg$parseINTEGER();\n }\n }\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c5(s2);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n function peg$parseRDFLiteral() {\n var s0, s1, s2, s3, s4, s5, s6;\n\n s0 = peg$currPos;\n s1 = [];\n s2 = peg$parseIGNORE();\n while (s2 !== peg$FAILED) {\n s1.push(s2);\n s2 = peg$parseIGNORE();\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$parseString();\n if (s2 !== peg$FAILED) {\n s3 = [];\n s4 = peg$parseIGNORE();\n while (s4 !== peg$FAILED) {\n s3.push(s4);\n s4 = peg$parseIGNORE();\n }\n if (s3 !== peg$FAILED) {\n s4 = peg$parseLANGTAG();\n if (s4 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c64(s2, s4);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n s1 = [];\n s2 = peg$parseIGNORE();\n while (s2 !== peg$FAILED) {\n s1.push(s2);\n s2 = peg$parseIGNORE();\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$parseString();\n if (s2 !== peg$FAILED) {\n s3 = [];\n s4 = peg$parseIGNORE();\n while (s4 !== peg$FAILED) {\n s3.push(s4);\n s4 = peg$parseIGNORE();\n }\n if (s3 !== peg$FAILED) {\n if (input.substr(peg$currPos, 2) === peg$c65) {\n s4 = peg$c65;\n peg$currPos += 2;\n } else {\n s4 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c66); }\n }\n if (s4 !== peg$FAILED) {\n s5 = [];\n s6 = peg$parseIGNORE();\n while (s6 !== peg$FAILED) {\n s5.push(s6);\n s6 = peg$parseIGNORE();\n }\n if (s5 !== peg$FAILED) {\n s6 = peg$parseiri();\n if (s6 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c67(s2, s6);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n s1 = [];\n s2 = peg$parseIGNORE();\n while (s2 !== peg$FAILED) {\n s1.push(s2);\n s2 = peg$parseIGNORE();\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$parseString();\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c5(s2);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n }\n }\n\n return s0;\n }\n\n function peg$parseBooleanLiteral() {\n var s0, s1, s2;\n\n s0 = peg$currPos;\n s1 = [];\n s2 = peg$parseIGNORE();\n while (s2 !== peg$FAILED) {\n s1.push(s2);\n s2 = peg$parseIGNORE();\n }\n if (s1 !== peg$FAILED) {\n if (input.substr(peg$currPos, 4) === peg$c68) {\n s2 = peg$c68;\n peg$currPos += 4;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c69); }\n }\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c70();\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n s1 = [];\n s2 = peg$parseIGNORE();\n while (s2 !== peg$FAILED) {\n s1.push(s2);\n s2 = peg$parseIGNORE();\n }\n if (s1 !== peg$FAILED) {\n if (input.substr(peg$currPos, 5) === peg$c71) {\n s2 = peg$c71;\n peg$currPos += 5;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c72); }\n }\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c73();\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n }\n\n return s0;\n }\n\n function peg$parseString() {\n var s0, s1, s2;\n\n s0 = peg$currPos;\n s1 = [];\n s2 = peg$parseIGNORE();\n while (s2 !== peg$FAILED) {\n s1.push(s2);\n s2 = peg$parseIGNORE();\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$parseSTRING_LITERAL_LONG_SINGLE_QUOTE();\n if (s2 === peg$FAILED) {\n s2 = peg$parseSTRING_LITERAL_LONG_QUOTE();\n if (s2 === peg$FAILED) {\n s2 = peg$parseSTRING_LITERAL_SINGLE_QUOTE();\n if (s2 === peg$FAILED) {\n s2 = peg$parseSTRING_LITERAL_QUOTE();\n }\n }\n }\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c5(s2);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n function peg$parseiri() {\n var s0, s1, s2;\n\n s0 = peg$currPos;\n s1 = [];\n s2 = peg$parseIGNORE();\n while (s2 !== peg$FAILED) {\n s1.push(s2);\n s2 = peg$parseIGNORE();\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$parseIRIREF();\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c5(s2);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n s1 = [];\n s2 = peg$parseIGNORE();\n while (s2 !== peg$FAILED) {\n s1.push(s2);\n s2 = peg$parseIGNORE();\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$parsePrefixedName();\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c5(s2);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n }\n\n return s0;\n }\n\n function peg$parsePrefixedName() {\n var s0, s1;\n\n s0 = peg$parsePNAME_LN();\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n s1 = peg$parsePNAME_NS();\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c74(s1);\n }\n s0 = s1;\n }\n\n return s0;\n }\n\n function peg$parseBlankNode() {\n var s0, s1, s2;\n\n s0 = peg$currPos;\n s1 = [];\n s2 = peg$parseIGNORE();\n while (s2 !== peg$FAILED) {\n s1.push(s2);\n s2 = peg$parseIGNORE();\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$parseBLANK_NODE_LABEL();\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c5(s2);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n s1 = [];\n s2 = peg$parseIGNORE();\n while (s2 !== peg$FAILED) {\n s1.push(s2);\n s2 = peg$parseIGNORE();\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$parseANON();\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c5(s2);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n }\n\n return s0;\n }\n\n function peg$parseIRIREF() {\n var s0, s1, s2, s3;\n\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 60) {\n s1 = peg$c75;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c76); }\n }\n if (s1 !== peg$FAILED) {\n s2 = [];\n if (peg$c77.test(input.charAt(peg$currPos))) {\n s3 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c78); }\n }\n if (s3 === peg$FAILED) {\n s3 = peg$parseUCHAR();\n }\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n if (peg$c77.test(input.charAt(peg$currPos))) {\n s3 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c78); }\n }\n if (s3 === peg$FAILED) {\n s3 = peg$parseUCHAR();\n }\n }\n if (s2 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 62) {\n s3 = peg$c79;\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c80); }\n }\n if (s3 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c81(s2);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n function peg$parsePNAME_NS() {\n var s0, s1, s2;\n\n s0 = peg$currPos;\n s1 = peg$parsePN_PREFIX();\n if (s1 === peg$FAILED) {\n s1 = null;\n }\n if (s1 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 58) {\n s2 = peg$c82;\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c83); }\n }\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c84(s1);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n function peg$parsePNAME_NS_NO_CHECK() {\n var s0, s1, s2;\n\n s0 = peg$currPos;\n s1 = peg$parsePN_PREFIX();\n if (s1 === peg$FAILED) {\n s1 = null;\n }\n if (s1 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 58) {\n s2 = peg$c82;\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c83); }\n }\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c85(s1);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n function peg$parsePNAME_LN() {\n var s0, s1, s2;\n\n s0 = peg$currPos;\n s1 = peg$parsePNAME_NS();\n if (s1 !== peg$FAILED) {\n s2 = peg$parsePN_LOCAL();\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c86(s1, s2);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n function peg$parseBLANK_NODE_LABEL() {\n var s0, s1, s2, s3, s4, s5, s6, s7, s8, s9;\n\n s0 = peg$currPos;\n s1 = peg$currPos;\n if (input.substr(peg$currPos, 2) === peg$c87) {\n s2 = peg$c87;\n peg$currPos += 2;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c88); }\n }\n if (s2 !== peg$FAILED) {\n s3 = peg$parsePN_CHARS_U();\n if (s3 === peg$FAILED) {\n if (peg$c89.test(input.charAt(peg$currPos))) {\n s3 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c90); }\n }\n }\n if (s3 !== peg$FAILED) {\n s4 = [];\n s5 = peg$parsePN_CHARS();\n while (s5 !== peg$FAILED) {\n s4.push(s5);\n s5 = peg$parsePN_CHARS();\n }\n if (s4 !== peg$FAILED) {\n s5 = [];\n s6 = peg$currPos;\n s7 = [];\n if (input.charCodeAt(peg$currPos) === 46) {\n s8 = peg$c3;\n peg$currPos++;\n } else {\n s8 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c4); }\n }\n if (s8 !== peg$FAILED) {\n while (s8 !== peg$FAILED) {\n s7.push(s8);\n if (input.charCodeAt(peg$currPos) === 46) {\n s8 = peg$c3;\n peg$currPos++;\n } else {\n s8 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c4); }\n }\n }\n } else {\n s7 = peg$FAILED;\n }\n if (s7 !== peg$FAILED) {\n s8 = [];\n s9 = peg$parsePN_CHARS();\n if (s9 !== peg$FAILED) {\n while (s9 !== peg$FAILED) {\n s8.push(s9);\n s9 = peg$parsePN_CHARS();\n }\n } else {\n s8 = peg$FAILED;\n }\n if (s8 !== peg$FAILED) {\n s7 = [s7, s8];\n s6 = s7;\n } else {\n peg$currPos = s6;\n s6 = peg$FAILED;\n }\n } else {\n peg$currPos = s6;\n s6 = peg$FAILED;\n }\n while (s6 !== peg$FAILED) {\n s5.push(s6);\n s6 = peg$currPos;\n s7 = [];\n if (input.charCodeAt(peg$currPos) === 46) {\n s8 = peg$c3;\n peg$currPos++;\n } else {\n s8 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c4); }\n }\n if (s8 !== peg$FAILED) {\n while (s8 !== peg$FAILED) {\n s7.push(s8);\n if (input.charCodeAt(peg$currPos) === 46) {\n s8 = peg$c3;\n peg$currPos++;\n } else {\n s8 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c4); }\n }\n }\n } else {\n s7 = peg$FAILED;\n }\n if (s7 !== peg$FAILED) {\n s8 = [];\n s9 = peg$parsePN_CHARS();\n if (s9 !== peg$FAILED) {\n while (s9 !== peg$FAILED) {\n s8.push(s9);\n s9 = peg$parsePN_CHARS();\n }\n } else {\n s8 = peg$FAILED;\n }\n if (s8 !== peg$FAILED) {\n s7 = [s7, s8];\n s6 = s7;\n } else {\n peg$currPos = s6;\n s6 = peg$FAILED;\n }\n } else {\n peg$currPos = s6;\n s6 = peg$FAILED;\n }\n }\n if (s5 !== peg$FAILED) {\n s2 = [s2, s3, s4, s5];\n s1 = s2;\n } else {\n peg$currPos = s1;\n s1 = peg$FAILED;\n }\n } else {\n peg$currPos = s1;\n s1 = peg$FAILED;\n }\n } else {\n peg$currPos = s1;\n s1 = peg$FAILED;\n }\n } else {\n peg$currPos = s1;\n s1 = peg$FAILED;\n }\n if (s1 !== peg$FAILED) {\n s0 = input.substring(s0, peg$currPos);\n } else {\n s0 = s1;\n }\n\n return s0;\n }\n\n function peg$parseLANGTAG() {\n var s0, s1, s2, s3, s4, s5, s6, s7;\n\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 64) {\n s1 = peg$c91;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c92); }\n }\n if (s1 !== peg$FAILED) {\n s2 = [];\n if (peg$c93.test(input.charAt(peg$currPos))) {\n s3 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c94); }\n }\n if (s3 !== peg$FAILED) {\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n if (peg$c93.test(input.charAt(peg$currPos))) {\n s3 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c94); }\n }\n }\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n s3 = [];\n s4 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 45) {\n s5 = peg$c95;\n peg$currPos++;\n } else {\n s5 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c96); }\n }\n if (s5 !== peg$FAILED) {\n s6 = [];\n if (peg$c97.test(input.charAt(peg$currPos))) {\n s7 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s7 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c98); }\n }\n if (s7 !== peg$FAILED) {\n while (s7 !== peg$FAILED) {\n s6.push(s7);\n if (peg$c97.test(input.charAt(peg$currPos))) {\n s7 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s7 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c98); }\n }\n }\n } else {\n s6 = peg$FAILED;\n }\n if (s6 !== peg$FAILED) {\n peg$savedPos = s4;\n s5 = peg$c99(s2, s6);\n s4 = s5;\n } else {\n peg$currPos = s4;\n s4 = peg$FAILED;\n }\n } else {\n peg$currPos = s4;\n s4 = peg$FAILED;\n }\n while (s4 !== peg$FAILED) {\n s3.push(s4);\n s4 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 45) {\n s5 = peg$c95;\n peg$currPos++;\n } else {\n s5 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c96); }\n }\n if (s5 !== peg$FAILED) {\n s6 = [];\n if (peg$c97.test(input.charAt(peg$currPos))) {\n s7 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s7 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c98); }\n }\n if (s7 !== peg$FAILED) {\n while (s7 !== peg$FAILED) {\n s6.push(s7);\n if (peg$c97.test(input.charAt(peg$currPos))) {\n s7 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s7 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c98); }\n }\n }\n } else {\n s6 = peg$FAILED;\n }\n if (s6 !== peg$FAILED) {\n peg$savedPos = s4;\n s5 = peg$c99(s2, s6);\n s4 = s5;\n } else {\n peg$currPos = s4;\n s4 = peg$FAILED;\n }\n } else {\n peg$currPos = s4;\n s4 = peg$FAILED;\n }\n }\n if (s3 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c100(s2, s3);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n function peg$parseINTEGER() {\n var s0, s1, s2, s3, s4, s5;\n\n s0 = peg$currPos;\n s1 = peg$currPos;\n s2 = peg$currPos;\n if (peg$c101.test(input.charAt(peg$currPos))) {\n s3 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c102); }\n }\n if (s3 === peg$FAILED) {\n s3 = null;\n }\n if (s3 !== peg$FAILED) {\n s4 = [];\n if (peg$c89.test(input.charAt(peg$currPos))) {\n s5 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s5 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c90); }\n }\n if (s5 !== peg$FAILED) {\n while (s5 !== peg$FAILED) {\n s4.push(s5);\n if (peg$c89.test(input.charAt(peg$currPos))) {\n s5 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s5 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c90); }\n }\n }\n } else {\n s4 = peg$FAILED;\n }\n if (s4 !== peg$FAILED) {\n s3 = [s3, s4];\n s2 = s3;\n } else {\n peg$currPos = s2;\n s2 = peg$FAILED;\n }\n } else {\n peg$currPos = s2;\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n s1 = input.substring(s1, peg$currPos);\n } else {\n s1 = s2;\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c103(s1);\n }\n s0 = s1;\n\n return s0;\n }\n\n function peg$parseDECIMAL() {\n var s0, s1, s2, s3, s4, s5, s6, s7;\n\n s0 = peg$currPos;\n s1 = peg$currPos;\n s2 = peg$currPos;\n if (peg$c101.test(input.charAt(peg$currPos))) {\n s3 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c102); }\n }\n if (s3 === peg$FAILED) {\n s3 = null;\n }\n if (s3 !== peg$FAILED) {\n s4 = [];\n if (peg$c89.test(input.charAt(peg$currPos))) {\n s5 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s5 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c90); }\n }\n while (s5 !== peg$FAILED) {\n s4.push(s5);\n if (peg$c89.test(input.charAt(peg$currPos))) {\n s5 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s5 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c90); }\n }\n }\n if (s4 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 46) {\n s5 = peg$c3;\n peg$currPos++;\n } else {\n s5 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c4); }\n }\n if (s5 !== peg$FAILED) {\n s6 = [];\n if (peg$c89.test(input.charAt(peg$currPos))) {\n s7 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s7 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c90); }\n }\n if (s7 !== peg$FAILED) {\n while (s7 !== peg$FAILED) {\n s6.push(s7);\n if (peg$c89.test(input.charAt(peg$currPos))) {\n s7 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s7 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c90); }\n }\n }\n } else {\n s6 = peg$FAILED;\n }\n if (s6 !== peg$FAILED) {\n s3 = [s3, s4, s5, s6];\n s2 = s3;\n } else {\n peg$currPos = s2;\n s2 = peg$FAILED;\n }\n } else {\n peg$currPos = s2;\n s2 = peg$FAILED;\n }\n } else {\n peg$currPos = s2;\n s2 = peg$FAILED;\n }\n } else {\n peg$currPos = s2;\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n s1 = input.substring(s1, peg$currPos);\n } else {\n s1 = s2;\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c104(s1);\n }\n s0 = s1;\n\n return s0;\n }\n\n function peg$parseDOUBLE() {\n var s0, s1, s2, s3, s4, s5, s6, s7, s8;\n\n s0 = peg$currPos;\n s1 = peg$currPos;\n s2 = peg$currPos;\n if (peg$c101.test(input.charAt(peg$currPos))) {\n s3 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c102); }\n }\n if (s3 === peg$FAILED) {\n s3 = null;\n }\n if (s3 !== peg$FAILED) {\n s4 = peg$currPos;\n s5 = [];\n if (peg$c89.test(input.charAt(peg$currPos))) {\n s6 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s6 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c90); }\n }\n if (s6 !== peg$FAILED) {\n while (s6 !== peg$FAILED) {\n s5.push(s6);\n if (peg$c89.test(input.charAt(peg$currPos))) {\n s6 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s6 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c90); }\n }\n }\n } else {\n s5 = peg$FAILED;\n }\n if (s5 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 46) {\n s6 = peg$c3;\n peg$currPos++;\n } else {\n s6 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c4); }\n }\n if (s6 !== peg$FAILED) {\n s7 = [];\n if (peg$c89.test(input.charAt(peg$currPos))) {\n s8 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s8 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c90); }\n }\n while (s8 !== peg$FAILED) {\n s7.push(s8);\n if (peg$c89.test(input.charAt(peg$currPos))) {\n s8 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s8 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c90); }\n }\n }\n if (s7 !== peg$FAILED) {\n s8 = peg$parseEXPONENT();\n if (s8 !== peg$FAILED) {\n s5 = [s5, s6, s7, s8];\n s4 = s5;\n } else {\n peg$currPos = s4;\n s4 = peg$FAILED;\n }\n } else {\n peg$currPos = s4;\n s4 = peg$FAILED;\n }\n } else {\n peg$currPos = s4;\n s4 = peg$FAILED;\n }\n } else {\n peg$currPos = s4;\n s4 = peg$FAILED;\n }\n if (s4 === peg$FAILED) {\n s4 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 46) {\n s5 = peg$c3;\n peg$currPos++;\n } else {\n s5 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c4); }\n }\n if (s5 !== peg$FAILED) {\n s6 = [];\n if (peg$c89.test(input.charAt(peg$currPos))) {\n s7 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s7 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c90); }\n }\n if (s7 !== peg$FAILED) {\n while (s7 !== peg$FAILED) {\n s6.push(s7);\n if (peg$c89.test(input.charAt(peg$currPos))) {\n s7 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s7 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c90); }\n }\n }\n } else {\n s6 = peg$FAILED;\n }\n if (s6 !== peg$FAILED) {\n s7 = peg$parseEXPONENT();\n if (s7 !== peg$FAILED) {\n s5 = [s5, s6, s7];\n s4 = s5;\n } else {\n peg$currPos = s4;\n s4 = peg$FAILED;\n }\n } else {\n peg$currPos = s4;\n s4 = peg$FAILED;\n }\n } else {\n peg$currPos = s4;\n s4 = peg$FAILED;\n }\n if (s4 === peg$FAILED) {\n s4 = peg$currPos;\n s5 = [];\n if (peg$c89.test(input.charAt(peg$currPos))) {\n s6 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s6 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c90); }\n }\n if (s6 !== peg$FAILED) {\n while (s6 !== peg$FAILED) {\n s5.push(s6);\n if (peg$c89.test(input.charAt(peg$currPos))) {\n s6 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s6 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c90); }\n }\n }\n } else {\n s5 = peg$FAILED;\n }\n if (s5 !== peg$FAILED) {\n s6 = peg$parseEXPONENT();\n if (s6 !== peg$FAILED) {\n s5 = [s5, s6];\n s4 = s5;\n } else {\n peg$currPos = s4;\n s4 = peg$FAILED;\n }\n } else {\n peg$currPos = s4;\n s4 = peg$FAILED;\n }\n }\n }\n if (s4 !== peg$FAILED) {\n s3 = [s3, s4];\n s2 = s3;\n } else {\n peg$currPos = s2;\n s2 = peg$FAILED;\n }\n } else {\n peg$currPos = s2;\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n s1 = input.substring(s1, peg$currPos);\n } else {\n s1 = s2;\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c105(s1);\n }\n s0 = s1;\n\n return s0;\n }\n\n function peg$parseEXPONENT() {\n var s0, s1, s2, s3, s4, s5;\n\n s0 = peg$currPos;\n s1 = peg$currPos;\n if (peg$c106.test(input.charAt(peg$currPos))) {\n s2 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c107); }\n }\n if (s2 !== peg$FAILED) {\n if (peg$c101.test(input.charAt(peg$currPos))) {\n s3 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c102); }\n }\n if (s3 === peg$FAILED) {\n s3 = null;\n }\n if (s3 !== peg$FAILED) {\n s4 = [];\n if (peg$c89.test(input.charAt(peg$currPos))) {\n s5 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s5 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c90); }\n }\n if (s5 !== peg$FAILED) {\n while (s5 !== peg$FAILED) {\n s4.push(s5);\n if (peg$c89.test(input.charAt(peg$currPos))) {\n s5 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s5 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c90); }\n }\n }\n } else {\n s4 = peg$FAILED;\n }\n if (s4 !== peg$FAILED) {\n s2 = [s2, s3, s4];\n s1 = s2;\n } else {\n peg$currPos = s1;\n s1 = peg$FAILED;\n }\n } else {\n peg$currPos = s1;\n s1 = peg$FAILED;\n }\n } else {\n peg$currPos = s1;\n s1 = peg$FAILED;\n }\n if (s1 !== peg$FAILED) {\n s0 = input.substring(s0, peg$currPos);\n } else {\n s0 = s1;\n }\n\n return s0;\n }\n\n function peg$parseSTRING_LITERAL_QUOTE() {\n var s0, s1, s2, s3;\n\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 34) {\n s1 = peg$c108;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c109); }\n }\n if (s1 !== peg$FAILED) {\n s2 = [];\n if (peg$c110.test(input.charAt(peg$currPos))) {\n s3 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c111); }\n }\n if (s3 === peg$FAILED) {\n s3 = peg$parseECHAR();\n if (s3 === peg$FAILED) {\n s3 = peg$parseUCHAR();\n }\n }\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n if (peg$c110.test(input.charAt(peg$currPos))) {\n s3 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c111); }\n }\n if (s3 === peg$FAILED) {\n s3 = peg$parseECHAR();\n if (s3 === peg$FAILED) {\n s3 = peg$parseUCHAR();\n }\n }\n }\n if (s2 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 34) {\n s3 = peg$c108;\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c109); }\n }\n if (s3 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c12(s2);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n function peg$parseSTRING_LITERAL_SINGLE_QUOTE() {\n var s0, s1, s2, s3;\n\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 39) {\n s1 = peg$c112;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c113); }\n }\n if (s1 !== peg$FAILED) {\n s2 = [];\n if (peg$c114.test(input.charAt(peg$currPos))) {\n s3 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c115); }\n }\n if (s3 === peg$FAILED) {\n s3 = peg$parseECHAR();\n if (s3 === peg$FAILED) {\n s3 = peg$parseUCHAR();\n }\n }\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n if (peg$c114.test(input.charAt(peg$currPos))) {\n s3 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c115); }\n }\n if (s3 === peg$FAILED) {\n s3 = peg$parseECHAR();\n if (s3 === peg$FAILED) {\n s3 = peg$parseUCHAR();\n }\n }\n }\n if (s2 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 39) {\n s3 = peg$c112;\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c113); }\n }\n if (s3 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c12(s2);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n function peg$parseSTRING_LITERAL_LONG_SINGLE_QUOTE() {\n var s0, s1, s2, s3, s4, s5, s6, s7;\n\n s0 = peg$currPos;\n if (input.substr(peg$currPos, 3) === peg$c116) {\n s1 = peg$c116;\n peg$currPos += 3;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c117); }\n }\n if (s1 !== peg$FAILED) {\n s2 = [];\n if (peg$c118.test(input.charAt(peg$currPos))) {\n s3 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c119); }\n }\n if (s3 === peg$FAILED) {\n s3 = peg$parseECHAR();\n if (s3 === peg$FAILED) {\n s3 = peg$parseUCHAR();\n }\n }\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n if (peg$c118.test(input.charAt(peg$currPos))) {\n s3 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c119); }\n }\n if (s3 === peg$FAILED) {\n s3 = peg$parseECHAR();\n if (s3 === peg$FAILED) {\n s3 = peg$parseUCHAR();\n }\n }\n }\n if (s2 !== peg$FAILED) {\n s3 = [];\n s4 = peg$currPos;\n if (input.substr(peg$currPos, 2) === peg$c120) {\n s5 = peg$c120;\n peg$currPos += 2;\n } else {\n s5 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c121); }\n }\n if (s5 !== peg$FAILED) {\n s6 = [];\n if (peg$c118.test(input.charAt(peg$currPos))) {\n s7 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s7 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c119); }\n }\n if (s7 === peg$FAILED) {\n s7 = peg$parseECHAR();\n if (s7 === peg$FAILED) {\n s7 = peg$parseUCHAR();\n }\n }\n if (s7 !== peg$FAILED) {\n while (s7 !== peg$FAILED) {\n s6.push(s7);\n if (peg$c118.test(input.charAt(peg$currPos))) {\n s7 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s7 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c119); }\n }\n if (s7 === peg$FAILED) {\n s7 = peg$parseECHAR();\n if (s7 === peg$FAILED) {\n s7 = peg$parseUCHAR();\n }\n }\n }\n } else {\n s6 = peg$FAILED;\n }\n if (s6 !== peg$FAILED) {\n peg$savedPos = s4;\n s5 = peg$c122(s2, s6);\n s4 = s5;\n } else {\n peg$currPos = s4;\n s4 = peg$FAILED;\n }\n } else {\n peg$currPos = s4;\n s4 = peg$FAILED;\n }\n if (s4 === peg$FAILED) {\n s4 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 39) {\n s5 = peg$c112;\n peg$currPos++;\n } else {\n s5 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c113); }\n }\n if (s5 !== peg$FAILED) {\n s6 = [];\n if (peg$c118.test(input.charAt(peg$currPos))) {\n s7 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s7 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c119); }\n }\n if (s7 === peg$FAILED) {\n s7 = peg$parseECHAR();\n if (s7 === peg$FAILED) {\n s7 = peg$parseUCHAR();\n }\n }\n if (s7 !== peg$FAILED) {\n while (s7 !== peg$FAILED) {\n s6.push(s7);\n if (peg$c118.test(input.charAt(peg$currPos))) {\n s7 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s7 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c119); }\n }\n if (s7 === peg$FAILED) {\n s7 = peg$parseECHAR();\n if (s7 === peg$FAILED) {\n s7 = peg$parseUCHAR();\n }\n }\n }\n } else {\n s6 = peg$FAILED;\n }\n if (s6 !== peg$FAILED) {\n peg$savedPos = s4;\n s5 = peg$c123(s2, s6);\n s4 = s5;\n } else {\n peg$currPos = s4;\n s4 = peg$FAILED;\n }\n } else {\n peg$currPos = s4;\n s4 = peg$FAILED;\n }\n }\n while (s4 !== peg$FAILED) {\n s3.push(s4);\n s4 = peg$currPos;\n if (input.substr(peg$currPos, 2) === peg$c120) {\n s5 = peg$c120;\n peg$currPos += 2;\n } else {\n s5 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c121); }\n }\n if (s5 !== peg$FAILED) {\n s6 = [];\n if (peg$c118.test(input.charAt(peg$currPos))) {\n s7 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s7 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c119); }\n }\n if (s7 === peg$FAILED) {\n s7 = peg$parseECHAR();\n if (s7 === peg$FAILED) {\n s7 = peg$parseUCHAR();\n }\n }\n if (s7 !== peg$FAILED) {\n while (s7 !== peg$FAILED) {\n s6.push(s7);\n if (peg$c118.test(input.charAt(peg$currPos))) {\n s7 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s7 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c119); }\n }\n if (s7 === peg$FAILED) {\n s7 = peg$parseECHAR();\n if (s7 === peg$FAILED) {\n s7 = peg$parseUCHAR();\n }\n }\n }\n } else {\n s6 = peg$FAILED;\n }\n if (s6 !== peg$FAILED) {\n peg$savedPos = s4;\n s5 = peg$c122(s2, s6);\n s4 = s5;\n } else {\n peg$currPos = s4;\n s4 = peg$FAILED;\n }\n } else {\n peg$currPos = s4;\n s4 = peg$FAILED;\n }\n if (s4 === peg$FAILED) {\n s4 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 39) {\n s5 = peg$c112;\n peg$currPos++;\n } else {\n s5 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c113); }\n }\n if (s5 !== peg$FAILED) {\n s6 = [];\n if (peg$c118.test(input.charAt(peg$currPos))) {\n s7 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s7 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c119); }\n }\n if (s7 === peg$FAILED) {\n s7 = peg$parseECHAR();\n if (s7 === peg$FAILED) {\n s7 = peg$parseUCHAR();\n }\n }\n if (s7 !== peg$FAILED) {\n while (s7 !== peg$FAILED) {\n s6.push(s7);\n if (peg$c118.test(input.charAt(peg$currPos))) {\n s7 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s7 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c119); }\n }\n if (s7 === peg$FAILED) {\n s7 = peg$parseECHAR();\n if (s7 === peg$FAILED) {\n s7 = peg$parseUCHAR();\n }\n }\n }\n } else {\n s6 = peg$FAILED;\n }\n if (s6 !== peg$FAILED) {\n peg$savedPos = s4;\n s5 = peg$c123(s2, s6);\n s4 = s5;\n } else {\n peg$currPos = s4;\n s4 = peg$FAILED;\n }\n } else {\n peg$currPos = s4;\n s4 = peg$FAILED;\n }\n }\n }\n if (s3 !== peg$FAILED) {\n if (input.substr(peg$currPos, 3) === peg$c116) {\n s4 = peg$c116;\n peg$currPos += 3;\n } else {\n s4 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c117); }\n }\n if (s4 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c124(s2, s3);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n function peg$parseSTRING_LITERAL_LONG_QUOTE() {\n var s0, s1, s2, s3, s4, s5, s6, s7;\n\n s0 = peg$currPos;\n if (input.substr(peg$currPos, 3) === peg$c125) {\n s1 = peg$c125;\n peg$currPos += 3;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c126); }\n }\n if (s1 !== peg$FAILED) {\n s2 = [];\n if (peg$c127.test(input.charAt(peg$currPos))) {\n s3 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c128); }\n }\n if (s3 === peg$FAILED) {\n s3 = peg$parseECHAR();\n if (s3 === peg$FAILED) {\n s3 = peg$parseUCHAR();\n }\n }\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n if (peg$c127.test(input.charAt(peg$currPos))) {\n s3 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c128); }\n }\n if (s3 === peg$FAILED) {\n s3 = peg$parseECHAR();\n if (s3 === peg$FAILED) {\n s3 = peg$parseUCHAR();\n }\n }\n }\n if (s2 !== peg$FAILED) {\n s3 = [];\n s4 = peg$currPos;\n if (input.substr(peg$currPos, 2) === peg$c129) {\n s5 = peg$c129;\n peg$currPos += 2;\n } else {\n s5 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c130); }\n }\n if (s5 !== peg$FAILED) {\n s6 = [];\n if (peg$c127.test(input.charAt(peg$currPos))) {\n s7 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s7 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c128); }\n }\n if (s7 === peg$FAILED) {\n s7 = peg$parseECHAR();\n if (s7 === peg$FAILED) {\n s7 = peg$parseUCHAR();\n }\n }\n if (s7 !== peg$FAILED) {\n while (s7 !== peg$FAILED) {\n s6.push(s7);\n if (peg$c127.test(input.charAt(peg$currPos))) {\n s7 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s7 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c128); }\n }\n if (s7 === peg$FAILED) {\n s7 = peg$parseECHAR();\n if (s7 === peg$FAILED) {\n s7 = peg$parseUCHAR();\n }\n }\n }\n } else {\n s6 = peg$FAILED;\n }\n if (s6 !== peg$FAILED) {\n peg$savedPos = s4;\n s5 = peg$c131(s2, s6);\n s4 = s5;\n } else {\n peg$currPos = s4;\n s4 = peg$FAILED;\n }\n } else {\n peg$currPos = s4;\n s4 = peg$FAILED;\n }\n if (s4 === peg$FAILED) {\n s4 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 34) {\n s5 = peg$c108;\n peg$currPos++;\n } else {\n s5 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c109); }\n }\n if (s5 !== peg$FAILED) {\n s6 = [];\n if (peg$c127.test(input.charAt(peg$currPos))) {\n s7 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s7 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c128); }\n }\n if (s7 === peg$FAILED) {\n s7 = peg$parseECHAR();\n if (s7 === peg$FAILED) {\n s7 = peg$parseUCHAR();\n }\n }\n if (s7 !== peg$FAILED) {\n while (s7 !== peg$FAILED) {\n s6.push(s7);\n if (peg$c127.test(input.charAt(peg$currPos))) {\n s7 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s7 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c128); }\n }\n if (s7 === peg$FAILED) {\n s7 = peg$parseECHAR();\n if (s7 === peg$FAILED) {\n s7 = peg$parseUCHAR();\n }\n }\n }\n } else {\n s6 = peg$FAILED;\n }\n if (s6 !== peg$FAILED) {\n peg$savedPos = s4;\n s5 = peg$c132(s2, s6);\n s4 = s5;\n } else {\n peg$currPos = s4;\n s4 = peg$FAILED;\n }\n } else {\n peg$currPos = s4;\n s4 = peg$FAILED;\n }\n }\n while (s4 !== peg$FAILED) {\n s3.push(s4);\n s4 = peg$currPos;\n if (input.substr(peg$currPos, 2) === peg$c129) {\n s5 = peg$c129;\n peg$currPos += 2;\n } else {\n s5 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c130); }\n }\n if (s5 !== peg$FAILED) {\n s6 = [];\n if (peg$c127.test(input.charAt(peg$currPos))) {\n s7 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s7 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c128); }\n }\n if (s7 === peg$FAILED) {\n s7 = peg$parseECHAR();\n if (s7 === peg$FAILED) {\n s7 = peg$parseUCHAR();\n }\n }\n if (s7 !== peg$FAILED) {\n while (s7 !== peg$FAILED) {\n s6.push(s7);\n if (peg$c127.test(input.charAt(peg$currPos))) {\n s7 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s7 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c128); }\n }\n if (s7 === peg$FAILED) {\n s7 = peg$parseECHAR();\n if (s7 === peg$FAILED) {\n s7 = peg$parseUCHAR();\n }\n }\n }\n } else {\n s6 = peg$FAILED;\n }\n if (s6 !== peg$FAILED) {\n peg$savedPos = s4;\n s5 = peg$c131(s2, s6);\n s4 = s5;\n } else {\n peg$currPos = s4;\n s4 = peg$FAILED;\n }\n } else {\n peg$currPos = s4;\n s4 = peg$FAILED;\n }\n if (s4 === peg$FAILED) {\n s4 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 34) {\n s5 = peg$c108;\n peg$currPos++;\n } else {\n s5 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c109); }\n }\n if (s5 !== peg$FAILED) {\n s6 = [];\n if (peg$c127.test(input.charAt(peg$currPos))) {\n s7 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s7 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c128); }\n }\n if (s7 === peg$FAILED) {\n s7 = peg$parseECHAR();\n if (s7 === peg$FAILED) {\n s7 = peg$parseUCHAR();\n }\n }\n if (s7 !== peg$FAILED) {\n while (s7 !== peg$FAILED) {\n s6.push(s7);\n if (peg$c127.test(input.charAt(peg$currPos))) {\n s7 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s7 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c128); }\n }\n if (s7 === peg$FAILED) {\n s7 = peg$parseECHAR();\n if (s7 === peg$FAILED) {\n s7 = peg$parseUCHAR();\n }\n }\n }\n } else {\n s6 = peg$FAILED;\n }\n if (s6 !== peg$FAILED) {\n peg$savedPos = s4;\n s5 = peg$c132(s2, s6);\n s4 = s5;\n } else {\n peg$currPos = s4;\n s4 = peg$FAILED;\n }\n } else {\n peg$currPos = s4;\n s4 = peg$FAILED;\n }\n }\n }\n if (s3 !== peg$FAILED) {\n if (input.substr(peg$currPos, 3) === peg$c125) {\n s4 = peg$c125;\n peg$currPos += 3;\n } else {\n s4 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c126); }\n }\n if (s4 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c124(s2, s3);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n function peg$parseUCHAR() {\n var s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, s10;\n\n s0 = peg$currPos;\n if (input.substr(peg$currPos, 2) === peg$c133) {\n s1 = peg$c133;\n peg$currPos += 2;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c134); }\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$currPos;\n s3 = peg$parseHEX();\n if (s3 !== peg$FAILED) {\n s4 = peg$parseHEX();\n if (s4 !== peg$FAILED) {\n s5 = peg$parseHEX();\n if (s5 !== peg$FAILED) {\n s6 = peg$parseHEX();\n if (s6 !== peg$FAILED) {\n s7 = peg$parseHEX();\n if (s7 !== peg$FAILED) {\n s8 = peg$parseHEX();\n if (s8 !== peg$FAILED) {\n s9 = peg$parseHEX();\n if (s9 !== peg$FAILED) {\n s10 = peg$parseHEX();\n if (s10 !== peg$FAILED) {\n s3 = [s3, s4, s5, s6, s7, s8, s9, s10];\n s2 = s3;\n } else {\n peg$currPos = s2;\n s2 = peg$FAILED;\n }\n } else {\n peg$currPos = s2;\n s2 = peg$FAILED;\n }\n } else {\n peg$currPos = s2;\n s2 = peg$FAILED;\n }\n } else {\n peg$currPos = s2;\n s2 = peg$FAILED;\n }\n } else {\n peg$currPos = s2;\n s2 = peg$FAILED;\n }\n } else {\n peg$currPos = s2;\n s2 = peg$FAILED;\n }\n } else {\n peg$currPos = s2;\n s2 = peg$FAILED;\n }\n } else {\n peg$currPos = s2;\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c135(s2);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n if (input.substr(peg$currPos, 2) === peg$c136) {\n s1 = peg$c136;\n peg$currPos += 2;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c137); }\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$currPos;\n s3 = peg$parseHEX();\n if (s3 !== peg$FAILED) {\n s4 = peg$parseHEX();\n if (s4 !== peg$FAILED) {\n s5 = peg$parseHEX();\n if (s5 !== peg$FAILED) {\n s6 = peg$parseHEX();\n if (s6 !== peg$FAILED) {\n s3 = [s3, s4, s5, s6];\n s2 = s3;\n } else {\n peg$currPos = s2;\n s2 = peg$FAILED;\n }\n } else {\n peg$currPos = s2;\n s2 = peg$FAILED;\n }\n } else {\n peg$currPos = s2;\n s2 = peg$FAILED;\n }\n } else {\n peg$currPos = s2;\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c138(s2);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n }\n\n return s0;\n }\n\n function peg$parseECHAR() {\n var s0, s1;\n\n s0 = peg$currPos;\n if (input.substr(peg$currPos, 2) === peg$c139) {\n s1 = peg$c139;\n peg$currPos += 2;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c140); }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c141();\n }\n s0 = s1;\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n if (input.substr(peg$currPos, 2) === peg$c142) {\n s1 = peg$c142;\n peg$currPos += 2;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c143); }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c144();\n }\n s0 = s1;\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n if (input.substr(peg$currPos, 2) === peg$c145) {\n s1 = peg$c145;\n peg$currPos += 2;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c146); }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c147();\n }\n s0 = s1;\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n if (input.substr(peg$currPos, 2) === peg$c148) {\n s1 = peg$c148;\n peg$currPos += 2;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c149); }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c150();\n }\n s0 = s1;\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n if (input.substr(peg$currPos, 2) === peg$c151) {\n s1 = peg$c151;\n peg$currPos += 2;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c152); }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c153();\n }\n s0 = s1;\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n if (input.substr(peg$currPos, 2) === peg$c154) {\n s1 = peg$c154;\n peg$currPos += 2;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c155); }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c156();\n }\n s0 = s1;\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n if (input.substr(peg$currPos, 2) === peg$c157) {\n s1 = peg$c157;\n peg$currPos += 2;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c158); }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c159();\n }\n s0 = s1;\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n if (input.substr(peg$currPos, 2) === peg$c160) {\n s1 = peg$c160;\n peg$currPos += 2;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c161); }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c162();\n }\n s0 = s1;\n }\n }\n }\n }\n }\n }\n }\n\n return s0;\n }\n\n function peg$parseWS() {\n var s0;\n\n if (peg$c163.test(input.charAt(peg$currPos))) {\n s0 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c164); }\n }\n\n return s0;\n }\n\n function peg$parseANON() {\n var s0, s1, s2, s3;\n\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 91) {\n s1 = peg$c55;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c56); }\n }\n if (s1 !== peg$FAILED) {\n s2 = [];\n s3 = peg$parseIGNORE();\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n s3 = peg$parseIGNORE();\n }\n if (s2 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 93) {\n s3 = peg$c57;\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c58); }\n }\n if (s3 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c165();\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n function peg$parsePN_CHARS_BASE() {\n var s0, s1, s2;\n\n s0 = peg$currPos;\n if (peg$c166.test(input.charAt(peg$currPos))) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c167); }\n }\n if (s1 !== peg$FAILED) {\n if (peg$c168.test(input.charAt(peg$currPos))) {\n s2 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c169); }\n }\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c170(s1, s2);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n if (s0 === peg$FAILED) {\n if (peg$c171.test(input.charAt(peg$currPos))) {\n s0 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c172); }\n }\n }\n\n return s0;\n }\n\n function peg$parsePN_CHARS_U() {\n var s0;\n\n s0 = peg$parsePN_CHARS_BASE();\n if (s0 === peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 95) {\n s0 = peg$c173;\n peg$currPos++;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c174); }\n }\n }\n\n return s0;\n }\n\n function peg$parsePN_CHARS() {\n var s0;\n\n s0 = peg$parsePN_CHARS_U();\n if (s0 === peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 45) {\n s0 = peg$c95;\n peg$currPos++;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c96); }\n }\n if (s0 === peg$FAILED) {\n if (peg$c89.test(input.charAt(peg$currPos))) {\n s0 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c90); }\n }\n if (s0 === peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 183) {\n s0 = peg$c175;\n peg$currPos++;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c176); }\n }\n if (s0 === peg$FAILED) {\n if (peg$c177.test(input.charAt(peg$currPos))) {\n s0 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c178); }\n }\n if (s0 === peg$FAILED) {\n if (peg$c179.test(input.charAt(peg$currPos))) {\n s0 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c180); }\n }\n }\n }\n }\n }\n }\n\n return s0;\n }\n\n function peg$parsePN_PREFIX() {\n var s0, s1, s2, s3, s4, s5, s6, s7, s8;\n\n s0 = peg$currPos;\n s1 = peg$currPos;\n s2 = peg$parsePN_CHARS_BASE();\n if (s2 !== peg$FAILED) {\n s3 = [];\n s4 = peg$parsePN_CHARS();\n while (s4 !== peg$FAILED) {\n s3.push(s4);\n s4 = peg$parsePN_CHARS();\n }\n if (s3 !== peg$FAILED) {\n s4 = [];\n s5 = peg$currPos;\n s6 = [];\n if (input.charCodeAt(peg$currPos) === 46) {\n s7 = peg$c3;\n peg$currPos++;\n } else {\n s7 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c4); }\n }\n if (s7 !== peg$FAILED) {\n while (s7 !== peg$FAILED) {\n s6.push(s7);\n if (input.charCodeAt(peg$currPos) === 46) {\n s7 = peg$c3;\n peg$currPos++;\n } else {\n s7 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c4); }\n }\n }\n } else {\n s6 = peg$FAILED;\n }\n if (s6 !== peg$FAILED) {\n s7 = [];\n s8 = peg$parsePN_CHARS();\n if (s8 !== peg$FAILED) {\n while (s8 !== peg$FAILED) {\n s7.push(s8);\n s8 = peg$parsePN_CHARS();\n }\n } else {\n s7 = peg$FAILED;\n }\n if (s7 !== peg$FAILED) {\n s6 = [s6, s7];\n s5 = s6;\n } else {\n peg$currPos = s5;\n s5 = peg$FAILED;\n }\n } else {\n peg$currPos = s5;\n s5 = peg$FAILED;\n }\n while (s5 !== peg$FAILED) {\n s4.push(s5);\n s5 = peg$currPos;\n s6 = [];\n if (input.charCodeAt(peg$currPos) === 46) {\n s7 = peg$c3;\n peg$currPos++;\n } else {\n s7 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c4); }\n }\n if (s7 !== peg$FAILED) {\n while (s7 !== peg$FAILED) {\n s6.push(s7);\n if (input.charCodeAt(peg$currPos) === 46) {\n s7 = peg$c3;\n peg$currPos++;\n } else {\n s7 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c4); }\n }\n }\n } else {\n s6 = peg$FAILED;\n }\n if (s6 !== peg$FAILED) {\n s7 = [];\n s8 = peg$parsePN_CHARS();\n if (s8 !== peg$FAILED) {\n while (s8 !== peg$FAILED) {\n s7.push(s8);\n s8 = peg$parsePN_CHARS();\n }\n } else {\n s7 = peg$FAILED;\n }\n if (s7 !== peg$FAILED) {\n s6 = [s6, s7];\n s5 = s6;\n } else {\n peg$currPos = s5;\n s5 = peg$FAILED;\n }\n } else {\n peg$currPos = s5;\n s5 = peg$FAILED;\n }\n }\n if (s4 !== peg$FAILED) {\n s2 = [s2, s3, s4];\n s1 = s2;\n } else {\n peg$currPos = s1;\n s1 = peg$FAILED;\n }\n } else {\n peg$currPos = s1;\n s1 = peg$FAILED;\n }\n } else {\n peg$currPos = s1;\n s1 = peg$FAILED;\n }\n if (s1 !== peg$FAILED) {\n s0 = input.substring(s0, peg$currPos);\n } else {\n s0 = s1;\n }\n\n return s0;\n }\n\n function peg$parsePN_LOCAL() {\n var s0, s1, s2, s3, s4, s5, s6, s7;\n\n s0 = peg$currPos;\n s1 = peg$parsePN_CHARS_U();\n if (s1 === peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 58) {\n s1 = peg$c82;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c83); }\n }\n if (s1 === peg$FAILED) {\n if (peg$c89.test(input.charAt(peg$currPos))) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c90); }\n }\n if (s1 === peg$FAILED) {\n s1 = peg$parsePLX();\n }\n }\n }\n if (s1 !== peg$FAILED) {\n s2 = [];\n s3 = peg$parsePN_CHARS();\n if (s3 === peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 58) {\n s3 = peg$c82;\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c83); }\n }\n if (s3 === peg$FAILED) {\n s3 = peg$parsePLX();\n }\n }\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n s3 = peg$parsePN_CHARS();\n if (s3 === peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 58) {\n s3 = peg$c82;\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c83); }\n }\n if (s3 === peg$FAILED) {\n s3 = peg$parsePLX();\n }\n }\n }\n if (s2 !== peg$FAILED) {\n s3 = [];\n s4 = peg$currPos;\n s5 = [];\n if (input.charCodeAt(peg$currPos) === 46) {\n s6 = peg$c3;\n peg$currPos++;\n } else {\n s6 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c4); }\n }\n if (s6 !== peg$FAILED) {\n while (s6 !== peg$FAILED) {\n s5.push(s6);\n if (input.charCodeAt(peg$currPos) === 46) {\n s6 = peg$c3;\n peg$currPos++;\n } else {\n s6 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c4); }\n }\n }\n } else {\n s5 = peg$FAILED;\n }\n if (s5 !== peg$FAILED) {\n s6 = [];\n s7 = peg$parsePN_CHARS();\n if (s7 === peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 58) {\n s7 = peg$c82;\n peg$currPos++;\n } else {\n s7 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c83); }\n }\n if (s7 === peg$FAILED) {\n s7 = peg$parsePLX();\n }\n }\n if (s7 !== peg$FAILED) {\n while (s7 !== peg$FAILED) {\n s6.push(s7);\n s7 = peg$parsePN_CHARS();\n if (s7 === peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 58) {\n s7 = peg$c82;\n peg$currPos++;\n } else {\n s7 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c83); }\n }\n if (s7 === peg$FAILED) {\n s7 = peg$parsePLX();\n }\n }\n }\n } else {\n s6 = peg$FAILED;\n }\n if (s6 !== peg$FAILED) {\n peg$savedPos = s4;\n s5 = peg$c181(s1, s2, s5, s6);\n s4 = s5;\n } else {\n peg$currPos = s4;\n s4 = peg$FAILED;\n }\n } else {\n peg$currPos = s4;\n s4 = peg$FAILED;\n }\n while (s4 !== peg$FAILED) {\n s3.push(s4);\n s4 = peg$currPos;\n s5 = [];\n if (input.charCodeAt(peg$currPos) === 46) {\n s6 = peg$c3;\n peg$currPos++;\n } else {\n s6 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c4); }\n }\n if (s6 !== peg$FAILED) {\n while (s6 !== peg$FAILED) {\n s5.push(s6);\n if (input.charCodeAt(peg$currPos) === 46) {\n s6 = peg$c3;\n peg$currPos++;\n } else {\n s6 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c4); }\n }\n }\n } else {\n s5 = peg$FAILED;\n }\n if (s5 !== peg$FAILED) {\n s6 = [];\n s7 = peg$parsePN_CHARS();\n if (s7 === peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 58) {\n s7 = peg$c82;\n peg$currPos++;\n } else {\n s7 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c83); }\n }\n if (s7 === peg$FAILED) {\n s7 = peg$parsePLX();\n }\n }\n if (s7 !== peg$FAILED) {\n while (s7 !== peg$FAILED) {\n s6.push(s7);\n s7 = peg$parsePN_CHARS();\n if (s7 === peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 58) {\n s7 = peg$c82;\n peg$currPos++;\n } else {\n s7 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c83); }\n }\n if (s7 === peg$FAILED) {\n s7 = peg$parsePLX();\n }\n }\n }\n } else {\n s6 = peg$FAILED;\n }\n if (s6 !== peg$FAILED) {\n peg$savedPos = s4;\n s5 = peg$c181(s1, s2, s5, s6);\n s4 = s5;\n } else {\n peg$currPos = s4;\n s4 = peg$FAILED;\n }\n } else {\n peg$currPos = s4;\n s4 = peg$FAILED;\n }\n }\n if (s3 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c182(s1, s2, s3);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n function peg$parsePLX() {\n var s0;\n\n s0 = peg$parsePERCENT();\n if (s0 === peg$FAILED) {\n s0 = peg$parsePN_LOCAL_ESC();\n }\n\n return s0;\n }\n\n function peg$parsePERCENT() {\n var s0, s1, s2, s3, s4;\n\n s0 = peg$currPos;\n s1 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 37) {\n s2 = peg$c183;\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c184); }\n }\n if (s2 !== peg$FAILED) {\n s3 = peg$parseHEX();\n if (s3 !== peg$FAILED) {\n s4 = peg$parseHEX();\n if (s4 !== peg$FAILED) {\n s2 = [s2, s3, s4];\n s1 = s2;\n } else {\n peg$currPos = s1;\n s1 = peg$FAILED;\n }\n } else {\n peg$currPos = s1;\n s1 = peg$FAILED;\n }\n } else {\n peg$currPos = s1;\n s1 = peg$FAILED;\n }\n if (s1 !== peg$FAILED) {\n s0 = input.substring(s0, peg$currPos);\n } else {\n s0 = s1;\n }\n\n return s0;\n }\n\n function peg$parseHEX() {\n var s0;\n\n if (peg$c185.test(input.charAt(peg$currPos))) {\n s0 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c186); }\n }\n\n return s0;\n }\n\n function peg$parsePN_LOCAL_ESC() {\n var s0, s1, s2;\n\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 92) {\n s1 = peg$c187;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c188); }\n }\n if (s1 !== peg$FAILED) {\n if (peg$c189.test(input.charAt(peg$currPos))) {\n s2 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c190); }\n }\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c5(s2);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n\n var isIRI = function(a){return a.match(/^[a-z](.*?):(.+?)/g);};\n function createObject(property,value){var a={};a[property]=value;return a;}\n var context = {\n base : [],\n data : {},\n addBase : function(uri){\n if(context.base.length===0){\n context.base.push(uri);\n return;\n }\n const last = context.base[context.base.length-1];\n if(last!==uri) context.base.push(new URL(uri,last).toString());\n },\n addPrefix : function(prefix,uri){\n const list = context.data[prefix];\n if(list===undefined){\n context.data[prefix] = [{uri:uri,count:0}];\n }else if(list[list.length-1].uri!==uri){\n list.push({uri:uri,count:0});\n }\n },\n hasPrefix : function(prefix){\n return this.data[prefix]!==undefined;\n },\n resolve : function(pname,force){\n const prefix = Object.keys(context.data).find(key=>pname.indexOf(key+\":\")===0);\n if(prefix!==undefined) {\n const list = context.data[prefix];\n if(list.length===1 && force!==true && isIRI(list[0].uri)) return pname;\n const uri = list[list.length-1].uri;\n return pname.replace(prefix+\":\",uri);\n }else{\n var base = context.base.length === 0 ? options.baseIRI : context.base[context.base.length-1];\n if(!base || pname.match(/^(http:|https:|urn:|file:)/)) return pname;\n if(pname.indexOf(\"//\")===0 && base) return base.split(\"//\")[0]+pname;\n return new URL(pname,base).toString();\n }\n },\n increment : function(prefix){\n const list = context.data[prefix];\n if(list!==undefined)list[list.length-1].count++;\n },\n decrement : function(prefix){\n const list = context.data[prefix];\n if(list!==undefined)list[list.length-1].count--;\n },\n toJSON : function(){\n const root = {};\n if(context.base.length>0){\n if(root[\"@context\"]===undefined)root[\"@context\"] = {};\n root[\"@context\"][\"@base\"] = context.base[0];\n }\n Object.keys(context.data).forEach(key=>{\n const head = context.data[key][0];\n if(head.uri===\"http://www.w3.org/2001/XMLSchema#\" && head.count < 1) return;\n if(!isIRI(head.uri)) return;\n if(root[\"@context\"]===undefined) root[\"@context\"] = {};\n root[\"@context\"][key] = head.uri;\n });\n return root;\n }\n };\n\n function expandList(container,force){\n if(container[\"@list\"]===undefined) return container;\n if(!force && !container[\"@list\"].find(x=>x[\"@list\"]!==undefined)) return container;\n\n if(container[\"@list\"].length===0)\n return {\"@id\" : \"http://www.w3.org/1999/02/22-rdf-syntax-ns#nil\"};\n\n var root = {};\n var focus = null;\n container[\"@list\"].forEach(b=>{\n if(focus===null) focus = root;\n else {\n focus[\"http://www.w3.org/1999/02/22-rdf-syntax-ns#rest\"] = {};\n focus = focus[\"http://www.w3.org/1999/02/22-rdf-syntax-ns#rest\"];\n }\n focus[\"http://www.w3.org/1999/02/22-rdf-syntax-ns#first\"] = expandList(b,true);\n focus[\"http://www.w3.org/1999/02/22-rdf-syntax-ns#rest\"] = {\n \"@id\" : \"http://www.w3.org/1999/02/22-rdf-syntax-ns#nil\"\n };\n });\n return root;\n }\n\n\n peg$result = peg$startRuleFunction();\n\n if (peg$result !== peg$FAILED && peg$currPos === input.length) {\n return peg$result;\n } else {\n if (peg$result !== peg$FAILED && peg$currPos < input.length) {\n peg$fail(peg$endExpectation());\n }\n\n throw peg$buildStructuredError(\n peg$maxFailExpected,\n peg$maxFailPos < input.length ? input.charAt(peg$maxFailPos) : null,\n peg$maxFailPos < input.length\n ? peg$computeLocation(peg$maxFailPos, peg$maxFailPos + 1)\n : peg$computeLocation(peg$maxFailPos, peg$maxFailPos)\n );\n }\n }\n\n return {\n SyntaxError: peg$SyntaxError,\n parse: peg$parse\n };\n});\n","'use strict';\n\n/**\n * Ponyfill for `Array.prototype.find` which is only available in ES6 runtimes.\n *\n * Works with anything that has a `length` property and index access properties,\n * including NodeList.\n *\n * @param {T[] | { length: number; [number]: T }} list\n * @param {function (item: T, index: number, list:T[]):boolean} predicate\n * @param {Partial<Pick<ArrayConstructor['prototype'], 'find'>>?} ac\n * Allows injecting a custom implementation in tests (`Array.prototype` by default).\n * @returns {T | undefined}\n * @template {unknown} T\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/find\n * @see https://tc39.es/ecma262/multipage/indexed-collections.html#sec-array.prototype.find\n */\nfunction find(list, predicate, ac) {\n\tif (ac === undefined) {\n\t\tac = Array.prototype;\n\t}\n\tif (list && typeof ac.find === 'function') {\n\t\treturn ac.find.call(list, predicate);\n\t}\n\tfor (var i = 0; i < list.length; i++) {\n\t\tif (hasOwn(list, i)) {\n\t\t\tvar item = list[i];\n\t\t\tif (predicate.call(undefined, item, i, list)) {\n\t\t\t\treturn item;\n\t\t\t}\n\t\t}\n\t}\n}\n\n/**\n * \"Shallow freezes\" an object to render it immutable.\n * Uses `Object.freeze` if available,\n * otherwise the immutability is only in the type.\n *\n * Is used to create \"enum like\" objects.\n *\n * If `Object.getOwnPropertyDescriptors` is available,\n * a new object with all properties of object but without any prototype is created and returned\n * after freezing it.\n *\n * @param {T} object\n * The object to freeze.\n * @param {Pick<ObjectConstructor, 'create' | 'freeze' | 'getOwnPropertyDescriptors'>} [oc=Object]\n * `Object` by default,\n * allows to inject custom object constructor for tests.\n * @returns {Readonly<T>}\n * @template {Object} T\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/freeze\n * @prettierignore\n */\nfunction freeze(object, oc) {\n\tif (oc === undefined) {\n\t\toc = Object;\n\t}\n\tif (oc && typeof oc.getOwnPropertyDescriptors === 'function') {\n\t\tobject = oc.create(null, oc.getOwnPropertyDescriptors(object));\n\t}\n\treturn oc && typeof oc.freeze === 'function' ? oc.freeze(object) : object;\n}\n\n/**\n * Implementation for `Object.hasOwn` but ES5 compatible.\n *\n * @param {any} object\n * @param {string | number} key\n * @returns {boolean}\n */\nfunction hasOwn(object, key) {\n\treturn Object.prototype.hasOwnProperty.call(object, key);\n}\n\n/**\n * Since xmldom can not rely on `Object.assign`,\n * it uses/provides a simplified version that is sufficient for its needs.\n *\n * @param {Object} target\n * @param {Object | null | undefined} source\n * @returns {Object}\n * The target with the merged/overridden properties.\n * @throws {TypeError}\n * If target is not an object.\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/assign\n * @see https://tc39.es/ecma262/multipage/fundamental-objects.html#sec-object.assign\n */\nfunction assign(target, source) {\n\tif (target === null || typeof target !== 'object') {\n\t\tthrow new TypeError('target is not an object');\n\t}\n\tfor (var key in source) {\n\t\tif (hasOwn(source, key)) {\n\t\t\ttarget[key] = source[key];\n\t\t}\n\t}\n\treturn target;\n}\n\n/**\n * A number of attributes are boolean attributes.\n * The presence of a boolean attribute on an element represents the `true` value,\n * and the absence of the attribute represents the `false` value.\n *\n * If the attribute is present, its value must either be the empty string, or a value that is\n * an ASCII case-insensitive match for the attribute's canonical name,\n * with no leading or trailing whitespace.\n *\n * Note: The values `\"true\"` and `\"false\"` are not allowed on boolean attributes.\n * To represent a `false` value, the attribute has to be omitted altogether.\n *\n * @see https://html.spec.whatwg.org/#boolean-attributes\n * @see https://html.spec.whatwg.org/#attributes-3\n */\nvar HTML_BOOLEAN_ATTRIBUTES = freeze({\n\tallowfullscreen: true,\n\tasync: true,\n\tautofocus: true,\n\tautoplay: true,\n\tchecked: true,\n\tcontrols: true,\n\tdefault: true,\n\tdefer: true,\n\tdisabled: true,\n\tformnovalidate: true,\n\thidden: true,\n\tismap: true,\n\titemscope: true,\n\tloop: true,\n\tmultiple: true,\n\tmuted: true,\n\tnomodule: true,\n\tnovalidate: true,\n\topen: true,\n\tplaysinline: true,\n\treadonly: true,\n\trequired: true,\n\treversed: true,\n\tselected: true,\n});\n\n/**\n * Check if `name` is matching one of the HTML boolean attribute names.\n * This method doesn't check if such attributes are allowed in the context of the current\n * document/parsing.\n *\n * @param {string} name\n * @returns {boolean}\n * @see {@link HTML_BOOLEAN_ATTRIBUTES}\n * @see https://html.spec.whatwg.org/#boolean-attributes\n * @see https://html.spec.whatwg.org/#attributes-3\n */\nfunction isHTMLBooleanAttribute(name) {\n\treturn hasOwn(HTML_BOOLEAN_ATTRIBUTES, name.toLowerCase());\n}\n\n/**\n * Void elements only have a start tag; end tags must not be specified for void elements.\n * These elements should be written as self-closing like this: `<area />`.\n * This should not be confused with optional tags that HTML allows to omit the end tag for\n * (like `li`, `tr` and others), which can have content after them,\n * so they can not be written as self-closing.\n * xmldom does not have any logic for optional end tags cases,\n * and will report them as a warning.\n * Content that would go into the unopened element,\n * will instead be added as a sibling text node.\n *\n * @type {Readonly<{\n * \tarea: boolean;\n * \tcol: boolean;\n * \timg: boolean;\n * \twbr: boolean;\n * \tlink: boolean;\n * \thr: boolean;\n * \tsource: boolean;\n * \tbr: boolean;\n * \tinput: boolean;\n * \tparam: boolean;\n * \tmeta: boolean;\n * \tembed: boolean;\n * \ttrack: boolean;\n * \tbase: boolean;\n * }>}\n * @see https://html.spec.whatwg.org/#void-elements\n * @see https://html.spec.whatwg.org/#optional-tags\n */\nvar HTML_VOID_ELEMENTS = freeze({\n\tarea: true,\n\tbase: true,\n\tbr: true,\n\tcol: true,\n\tembed: true,\n\thr: true,\n\timg: true,\n\tinput: true,\n\tlink: true,\n\tmeta: true,\n\tparam: true,\n\tsource: true,\n\ttrack: true,\n\twbr: true,\n});\n\n/**\n * Check if `tagName` is matching one of the HTML void element names.\n * This method doesn't check if such tags are allowed in the context of the current\n * document/parsing.\n *\n * @param {string} tagName\n * @returns {boolean}\n * @see {@link HTML_VOID_ELEMENTS}\n * @see https://html.spec.whatwg.org/#void-elements\n */\nfunction isHTMLVoidElement(tagName) {\n\treturn hasOwn(HTML_VOID_ELEMENTS, tagName.toLowerCase());\n}\n\n/**\n * Tag names that are raw text elements according to HTML spec.\n * The value denotes whether they are escapable or not.\n *\n * @see {@link isHTMLEscapableRawTextElement}\n * @see {@link isHTMLRawTextElement}\n * @see https://html.spec.whatwg.org/#raw-text-elements\n * @see https://html.spec.whatwg.org/#escapable-raw-text-elements\n */\nvar HTML_RAW_TEXT_ELEMENTS = freeze({\n\tscript: false,\n\tstyle: false,\n\ttextarea: true,\n\ttitle: true,\n});\n\n/**\n * Check if `tagName` is matching one of the HTML raw text element names.\n * This method doesn't check if such tags are allowed in the context of the current\n * document/parsing.\n *\n * @param {string} tagName\n * @returns {boolean}\n * @see {@link isHTMLEscapableRawTextElement}\n * @see {@link HTML_RAW_TEXT_ELEMENTS}\n * @see https://html.spec.whatwg.org/#raw-text-elements\n * @see https://html.spec.whatwg.org/#escapable-raw-text-elements\n */\nfunction isHTMLRawTextElement(tagName) {\n\tvar key = tagName.toLowerCase();\n\treturn hasOwn(HTML_RAW_TEXT_ELEMENTS, key) && !HTML_RAW_TEXT_ELEMENTS[key];\n}\n/**\n * Check if `tagName` is matching one of the HTML escapable raw text element names.\n * This method doesn't check if such tags are allowed in the context of the current\n * document/parsing.\n *\n * @param {string} tagName\n * @returns {boolean}\n * @see {@link isHTMLRawTextElement}\n * @see {@link HTML_RAW_TEXT_ELEMENTS}\n * @see https://html.spec.whatwg.org/#raw-text-elements\n * @see https://html.spec.whatwg.org/#escapable-raw-text-elements\n */\nfunction isHTMLEscapableRawTextElement(tagName) {\n\tvar key = tagName.toLowerCase();\n\treturn hasOwn(HTML_RAW_TEXT_ELEMENTS, key) && HTML_RAW_TEXT_ELEMENTS[key];\n}\n/**\n * Only returns true if `value` matches MIME_TYPE.HTML, which indicates an HTML document.\n *\n * @param {string} mimeType\n * @returns {mimeType is 'text/html'}\n * @see https://www.iana.org/assignments/media-types/text/html\n * @see https://en.wikipedia.org/wiki/HTML\n * @see https://developer.mozilla.org/en-US/docs/Web/API/DOMParser/parseFromString\n * @see https://html.spec.whatwg.org/multipage/dynamic-markup-insertion.html#dom-domparser-parsefromstring\n */\nfunction isHTMLMimeType(mimeType) {\n\treturn mimeType === MIME_TYPE.HTML;\n}\n/**\n * For both the `text/html` and the `application/xhtml+xml` namespace the spec defines that the\n * HTML namespace is provided as the default.\n *\n * @param {string} mimeType\n * @returns {boolean}\n * @see https://dom.spec.whatwg.org/#dom-document-createelement\n * @see https://dom.spec.whatwg.org/#dom-domimplementation-createdocument\n * @see https://dom.spec.whatwg.org/#dom-domimplementation-createhtmldocument\n */\nfunction hasDefaultHTMLNamespace(mimeType) {\n\treturn isHTMLMimeType(mimeType) || mimeType === MIME_TYPE.XML_XHTML_APPLICATION;\n}\n\n/**\n * All mime types that are allowed as input to `DOMParser.parseFromString`\n *\n * @see https://developer.mozilla.org/en-US/docs/Web/API/DOMParser/parseFromString#Argument02\n * MDN\n * @see https://html.spec.whatwg.org/multipage/dynamic-markup-insertion.html#domparsersupportedtype\n * WHATWG HTML Spec\n * @see {@link DOMParser.prototype.parseFromString}\n */\nvar MIME_TYPE = freeze({\n\t/**\n\t * `text/html`, the only mime type that triggers treating an XML document as HTML.\n\t *\n\t * @see https://www.iana.org/assignments/media-types/text/html IANA MimeType registration\n\t * @see https://en.wikipedia.org/wiki/HTML Wikipedia\n\t * @see https://developer.mozilla.org/en-US/docs/Web/API/DOMParser/parseFromString MDN\n\t * @see https://html.spec.whatwg.org/multipage/dynamic-markup-insertion.html#dom-domparser-parsefromstring\n\t * WHATWG HTML Spec\n\t */\n\tHTML: 'text/html',\n\n\t/**\n\t * `application/xml`, the standard mime type for XML documents.\n\t *\n\t * @see https://www.iana.org/assignments/media-types/application/xml IANA MimeType\n\t * registration\n\t * @see https://tools.ietf.org/html/rfc7303#section-9.1 RFC 7303\n\t * @see https://en.wikipedia.org/wiki/XML_and_MIME Wikipedia\n\t */\n\tXML_APPLICATION: 'application/xml',\n\n\t/**\n\t * `text/xml`, an alias for `application/xml`.\n\t *\n\t * @see https://tools.ietf.org/html/rfc7303#section-9.2 RFC 7303\n\t * @see https://www.iana.org/assignments/media-types/text/xml IANA MimeType registration\n\t * @see https://en.wikipedia.org/wiki/XML_and_MIME Wikipedia\n\t */\n\tXML_TEXT: 'text/xml',\n\n\t/**\n\t * `application/xhtml+xml`, indicates an XML document that has the default HTML namespace,\n\t * but is parsed as an XML document.\n\t *\n\t * @see https://www.iana.org/assignments/media-types/application/xhtml+xml IANA MimeType\n\t * registration\n\t * @see https://dom.spec.whatwg.org/#dom-domimplementation-createdocument WHATWG DOM Spec\n\t * @see https://en.wikipedia.org/wiki/XHTML Wikipedia\n\t */\n\tXML_XHTML_APPLICATION: 'application/xhtml+xml',\n\n\t/**\n\t * `image/svg+xml`,\n\t *\n\t * @see https://www.iana.org/assignments/media-types/image/svg+xml IANA MimeType registration\n\t * @see https://www.w3.org/TR/SVG11/ W3C SVG 1.1\n\t * @see https://en.wikipedia.org/wiki/Scalable_Vector_Graphics Wikipedia\n\t */\n\tXML_SVG_IMAGE: 'image/svg+xml',\n});\n/**\n * @typedef {'application/xhtml+xml' | 'application/xml' | 'image/svg+xml' | 'text/html' | 'text/xml'}\n * MimeType\n */\n/**\n * @type {MimeType[]}\n * @private\n * Basically `Object.values`, which is not available in ES5.\n */\nvar _MIME_TYPES = Object.keys(MIME_TYPE).map(function (key) {\n\treturn MIME_TYPE[key];\n});\n\n/**\n * Only returns true if `mimeType` is one of the allowed values for\n * `DOMParser.parseFromString`.\n *\n * @param {string} mimeType\n * @returns {mimeType is 'application/xhtml+xml' | 'application/xml' | 'image/svg+xml' | 'text/html' | 'text/xml'}\n *\n */\nfunction isValidMimeType(mimeType) {\n\treturn _MIME_TYPES.indexOf(mimeType) > -1;\n}\n/**\n * Namespaces that are used in this code base.\n *\n * @see http://www.w3.org/TR/REC-xml-names\n */\nvar NAMESPACE = freeze({\n\t/**\n\t * The XHTML namespace.\n\t *\n\t * @see http://www.w3.org/1999/xhtml\n\t */\n\tHTML: 'http://www.w3.org/1999/xhtml',\n\n\t/**\n\t * The SVG namespace.\n\t *\n\t * @see http://www.w3.org/2000/svg\n\t */\n\tSVG: 'http://www.w3.org/2000/svg',\n\n\t/**\n\t * The `xml:` namespace.\n\t *\n\t * @see http://www.w3.org/XML/1998/namespace\n\t */\n\tXML: 'http://www.w3.org/XML/1998/namespace',\n\n\t/**\n\t * The `xmlns:` namespace.\n\t *\n\t * @see https://www.w3.org/2000/xmlns/\n\t */\n\tXMLNS: 'http://www.w3.org/2000/xmlns/',\n});\n\nexports.assign = assign;\nexports.find = find;\nexports.freeze = freeze;\nexports.HTML_BOOLEAN_ATTRIBUTES = HTML_BOOLEAN_ATTRIBUTES;\nexports.HTML_RAW_TEXT_ELEMENTS = HTML_RAW_TEXT_ELEMENTS;\nexports.HTML_VOID_ELEMENTS = HTML_VOID_ELEMENTS;\nexports.hasDefaultHTMLNamespace = hasDefaultHTMLNamespace;\nexports.hasOwn = hasOwn;\nexports.isHTMLBooleanAttribute = isHTMLBooleanAttribute;\nexports.isHTMLRawTextElement = isHTMLRawTextElement;\nexports.isHTMLEscapableRawTextElement = isHTMLEscapableRawTextElement;\nexports.isHTMLMimeType = isHTMLMimeType;\nexports.isHTMLVoidElement = isHTMLVoidElement;\nexports.isValidMimeType = isValidMimeType;\nexports.MIME_TYPE = MIME_TYPE;\nexports.NAMESPACE = NAMESPACE;\n","'use strict';\n\nvar conventions = require('./conventions');\n\nfunction extendError(constructor, writableName) {\n\tconstructor.prototype = Object.create(Error.prototype, {\n\t\tconstructor: { value: constructor },\n\t\tname: { value: constructor.name, enumerable: true, writable: writableName },\n\t});\n}\n\nvar DOMExceptionName = conventions.freeze({\n\t/**\n\t * the default value as defined by the spec\n\t */\n\tError: 'Error',\n\t/**\n\t * @deprecated\n\t * Use RangeError instead.\n\t */\n\tIndexSizeError: 'IndexSizeError',\n\t/**\n\t * @deprecated\n\t * Just to match the related static code, not part of the spec.\n\t */\n\tDomstringSizeError: 'DomstringSizeError',\n\tHierarchyRequestError: 'HierarchyRequestError',\n\tWrongDocumentError: 'WrongDocumentError',\n\tInvalidCharacterError: 'InvalidCharacterError',\n\t/**\n\t * @deprecated\n\t * Just to match the related static code, not part of the spec.\n\t */\n\tNoDataAllowedError: 'NoDataAllowedError',\n\tNoModificationAllowedError: 'NoModificationAllowedError',\n\tNotFoundError: 'NotFoundError',\n\tNotSupportedError: 'NotSupportedError',\n\tInUseAttributeError: 'InUseAttributeError',\n\tInvalidStateError: 'InvalidStateError',\n\tSyntaxError: 'SyntaxError',\n\tInvalidModificationError: 'InvalidModificationError',\n\tNamespaceError: 'NamespaceError',\n\t/**\n\t * @deprecated\n\t * Use TypeError for invalid arguments,\n\t * \"NotSupportedError\" DOMException for unsupported operations,\n\t * and \"NotAllowedError\" DOMException for denied requests instead.\n\t */\n\tInvalidAccessError: 'InvalidAccessError',\n\t/**\n\t * @deprecated\n\t * Just to match the related static code, not part of the spec.\n\t */\n\tValidationError: 'ValidationError',\n\t/**\n\t * @deprecated\n\t * Use TypeError instead.\n\t */\n\tTypeMismatchError: 'TypeMismatchError',\n\tSecurityError: 'SecurityError',\n\tNetworkError: 'NetworkError',\n\tAbortError: 'AbortError',\n\t/**\n\t * @deprecated\n\t * Just to match the related static code, not part of the spec.\n\t */\n\tURLMismatchError: 'URLMismatchError',\n\tQuotaExceededError: 'QuotaExceededError',\n\tTimeoutError: 'TimeoutError',\n\tInvalidNodeTypeError: 'InvalidNodeTypeError',\n\tDataCloneError: 'DataCloneError',\n\tEncodingError: 'EncodingError',\n\tNotReadableError: 'NotReadableError',\n\tUnknownError: 'UnknownError',\n\tConstraintError: 'ConstraintError',\n\tDataError: 'DataError',\n\tTransactionInactiveError: 'TransactionInactiveError',\n\tReadOnlyError: 'ReadOnlyError',\n\tVersionError: 'VersionError',\n\tOperationError: 'OperationError',\n\tNotAllowedError: 'NotAllowedError',\n\tOptOutError: 'OptOutError',\n});\nvar DOMExceptionNames = Object.keys(DOMExceptionName);\n\nfunction isValidDomExceptionCode(value) {\n\treturn typeof value === 'number' && value >= 1 && value <= 25;\n}\nfunction endsWithError(value) {\n\treturn typeof value === 'string' && value.substring(value.length - DOMExceptionName.Error.length) === DOMExceptionName.Error;\n}\n/**\n * DOM operations only raise exceptions in \"exceptional\" circumstances, i.e., when an operation\n * is impossible to perform (either for logical reasons, because data is lost, or because the\n * implementation has become unstable). In general, DOM methods return specific error values in\n * ordinary processing situations, such as out-of-bound errors when using NodeList.\n *\n * Implementations should raise other exceptions under other circumstances. For example,\n * implementations should raise an implementation-dependent exception if a null argument is\n * passed when null was not expected.\n *\n * This implementation supports the following usages:\n * 1. according to the living standard (both arguments are optional):\n * ```\n * new DOMException(\"message (can be empty)\", DOMExceptionNames.HierarchyRequestError)\n * ```\n * 2. according to previous xmldom implementation (only the first argument is required):\n * ```\n * new DOMException(DOMException.HIERARCHY_REQUEST_ERR, \"optional message\")\n * ```\n * both result in the proper name being set.\n *\n * @class DOMException\n * @param {number | string} messageOrCode\n * The reason why an operation is not acceptable.\n * If it is a number, it is used to determine the `name`, see\n * {@link https://www.w3.org/TR/DOM-Level-3-Core/core.html#ID-258A00AF ExceptionCode}\n * @param {string | keyof typeof DOMExceptionName | Error} [nameOrMessage]\n * The `name` to use for the error.\n * If `messageOrCode` is a number, this arguments is used as the `message` instead.\n * @augments Error\n * @see https://webidl.spec.whatwg.org/#idl-DOMException\n * @see https://webidl.spec.whatwg.org/#dfn-error-names-table\n * @see https://www.w3.org/TR/DOM-Level-3-Core/core.html#ID-17189187\n * @see http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/ecma-script-binding.html\n * @see http://www.w3.org/TR/REC-DOM-Level-1/ecma-script-language-binding.html\n */\nfunction DOMException(messageOrCode, nameOrMessage) {\n\t// support old way of passing arguments: first argument is a valid number\n\tif (isValidDomExceptionCode(messageOrCode)) {\n\t\tthis.name = DOMExceptionNames[messageOrCode];\n\t\tthis.message = nameOrMessage || '';\n\t} else {\n\t\tthis.message = messageOrCode;\n\t\tthis.name = endsWithError(nameOrMessage) ? nameOrMessage : DOMExceptionName.Error;\n\t}\n\tif (Error.captureStackTrace) Error.captureStackTrace(this, DOMException);\n}\nextendError(DOMException, true);\nObject.defineProperties(DOMException.prototype, {\n\tcode: {\n\t\tenumerable: true,\n\t\tget: function () {\n\t\t\tvar code = DOMExceptionNames.indexOf(this.name);\n\t\t\tif (isValidDomExceptionCode(code)) return code;\n\t\t\treturn 0;\n\t\t},\n\t},\n});\n\nvar ExceptionCode = {\n\tINDEX_SIZE_ERR: 1,\n\tDOMSTRING_SIZE_ERR: 2,\n\tHIERARCHY_REQUEST_ERR: 3,\n\tWRONG_DOCUMENT_ERR: 4,\n\tINVALID_CHARACTER_ERR: 5,\n\tNO_DATA_ALLOWED_ERR: 6,\n\tNO_MODIFICATION_ALLOWED_ERR: 7,\n\tNOT_FOUND_ERR: 8,\n\tNOT_SUPPORTED_ERR: 9,\n\tINUSE_ATTRIBUTE_ERR: 10,\n\tINVALID_STATE_ERR: 11,\n\tSYNTAX_ERR: 12,\n\tINVALID_MODIFICATION_ERR: 13,\n\tNAMESPACE_ERR: 14,\n\tINVALID_ACCESS_ERR: 15,\n\tVALIDATION_ERR: 16,\n\tTYPE_MISMATCH_ERR: 17,\n\tSECURITY_ERR: 18,\n\tNETWORK_ERR: 19,\n\tABORT_ERR: 20,\n\tURL_MISMATCH_ERR: 21,\n\tQUOTA_EXCEEDED_ERR: 22,\n\tTIMEOUT_ERR: 23,\n\tINVALID_NODE_TYPE_ERR: 24,\n\tDATA_CLONE_ERR: 25,\n};\n\nvar entries = Object.entries(ExceptionCode);\nfor (var i = 0; i < entries.length; i++) {\n\tvar key = entries[i][0];\n\tDOMException[key] = entries[i][1];\n}\n\n/**\n * Creates an error that will not be caught by XMLReader aka the SAX parser.\n *\n * @class\n * @param {string} message\n * @param {any} [locator]\n */\nfunction ParseError(message, locator) {\n\tthis.message = message;\n\tthis.locator = locator;\n\tif (Error.captureStackTrace) Error.captureStackTrace(this, ParseError);\n}\nextendError(ParseError);\n\nexports.DOMException = DOMException;\nexports.DOMExceptionName = DOMExceptionName;\nexports.ExceptionCode = ExceptionCode;\nexports.ParseError = ParseError;\n","'use strict';\n\n/**\n * Detects relevant unicode support for regular expressions in the runtime.\n * Should the runtime not accepts the flag `u` or unicode ranges,\n * character classes without unicode handling will be used.\n *\n * @param {typeof RegExp} [RegExpImpl=RegExp]\n * For testing: the RegExp class.\n * @returns {boolean}\n * @see https://node.green/#ES2015-syntax-RegExp--y--and--u--flags\n */\nfunction detectUnicodeSupport(RegExpImpl) {\n\ttry {\n\t\tif (typeof RegExpImpl !== 'function') {\n\t\t\tRegExpImpl = RegExp;\n\t\t}\n\t\t// eslint-disable-next-line es5/no-unicode-regex,es5/no-unicode-code-point-escape\n\t\tvar match = new RegExpImpl('\\u{1d306}', 'u').exec('𝌆');\n\t\treturn !!match && match[0].length === 2;\n\t} catch (error) {}\n\treturn false;\n}\nvar UNICODE_SUPPORT = detectUnicodeSupport();\n\n/**\n * Removes `[`, `]` and any trailing quantifiers from the source of a RegExp.\n *\n * @param {RegExp} regexp\n */\nfunction chars(regexp) {\n\tif (regexp.source[0] !== '[') {\n\t\tthrow new Error(regexp + ' can not be used with chars');\n\t}\n\treturn regexp.source.slice(1, regexp.source.lastIndexOf(']'));\n}\n\n/**\n * Creates a new character list regular expression,\n * by removing `search` from the source of `regexp`.\n *\n * @param {RegExp} regexp\n * @param {string} search\n * The character(s) to remove.\n * @returns {RegExp}\n */\nfunction chars_without(regexp, search) {\n\tif (regexp.source[0] !== '[') {\n\t\tthrow new Error('/' + regexp.source + '/ can not be used with chars_without');\n\t}\n\tif (!search || typeof search !== 'string') {\n\t\tthrow new Error(JSON.stringify(search) + ' is not a valid search');\n\t}\n\tif (regexp.source.indexOf(search) === -1) {\n\t\tthrow new Error('\"' + search + '\" is not is /' + regexp.source + '/');\n\t}\n\tif (search === '-' && regexp.source.indexOf(search) !== 1) {\n\t\tthrow new Error('\"' + search + '\" is not at the first postion of /' + regexp.source + '/');\n\t}\n\treturn new RegExp(regexp.source.replace(search, ''), UNICODE_SUPPORT ? 'u' : '');\n}\n\n/**\n * Combines and Regular expressions correctly by using `RegExp.source`.\n *\n * @param {...(RegExp | string)[]} args\n * @returns {RegExp}\n */\nfunction reg(args) {\n\tvar self = this;\n\treturn new RegExp(\n\t\tArray.prototype.slice\n\t\t\t.call(arguments)\n\t\t\t.map(function (part) {\n\t\t\t\tvar isStr = typeof part === 'string';\n\t\t\t\tif (isStr && self === undefined && part === '|') {\n\t\t\t\t\tthrow new Error('use regg instead of reg to wrap expressions with `|`!');\n\t\t\t\t}\n\t\t\t\treturn isStr ? part : part.source;\n\t\t\t})\n\t\t\t.join(''),\n\t\tUNICODE_SUPPORT ? 'mu' : 'm'\n\t);\n}\n\n/**\n * Like `reg` but wraps the expression in `(?:`,`)` to create a non tracking group.\n *\n * @param {...(RegExp | string)[]} args\n * @returns {RegExp}\n */\nfunction regg(args) {\n\tif (arguments.length === 0) {\n\t\tthrow new Error('no parameters provided');\n\t}\n\treturn reg.apply(regg, ['(?:'].concat(Array.prototype.slice.call(arguments), [')']));\n}\n\n// /**\n// * Append ^ to the beginning of the expression.\n// * @param {...(RegExp | string)[]} args\n// * @returns {RegExp}\n// */\n// function reg_start(args) {\n// \tif (arguments.length === 0) {\n// \t\tthrow new Error('no parameters provided');\n// \t}\n// \treturn reg.apply(reg_start, ['^'].concat(Array.prototype.slice.call(arguments)));\n// }\n\n// https://www.w3.org/TR/xml/#document\n// `[1] document ::= prolog element Misc*`\n// https://www.w3.org/TR/xml11/#NT-document\n// `[1] document ::= ( prolog element Misc* ) - ( Char* RestrictedChar Char* )`\n\n/**\n * A character usually appearing in wrongly converted strings.\n *\n * @type {string}\n * @see https://en.wikipedia.org/wiki/Specials_(Unicode_block)#Replacement_character\n * @see https://nodejs.dev/en/api/v18/buffer/#buffers-and-character-encodings\n * @see https://www.unicode.org/faq/utf_bom.html#BOM\n * @readonly\n */\nvar UNICODE_REPLACEMENT_CHARACTER = '\\uFFFD';\n// https://www.w3.org/TR/xml/#NT-Char\n// any Unicode character, excluding the surrogate blocks, FFFE, and FFFF.\n// `[2] Char ::= #x9 | #xA | #xD | [#x20-#xD7FF] | [#xE000-#xFFFD] | [#x10000-#x10FFFF]`\n// https://www.w3.org/TR/xml11/#NT-Char\n// `[2] Char ::= [#x1-#xD7FF] | [#xE000-#xFFFD] | [#x10000-#x10FFFF]`\n// https://www.w3.org/TR/xml11/#NT-RestrictedChar\n// `[2a] RestrictedChar ::= [#x1-#x8] | [#xB-#xC] | [#xE-#x1F] | [#x7F-#x84] | [#x86-#x9F]`\n// https://www.w3.org/TR/xml11/#charsets\nvar Char = /[-\\x09\\x0A\\x0D\\x20-\\x2C\\x2E-\\uD7FF\\uE000-\\uFFFD]/; // without \\u10000-\\uEFFFF\nif (UNICODE_SUPPORT) {\n\t// eslint-disable-next-line es5/no-unicode-code-point-escape\n\tChar = reg('[', chars(Char), '\\\\u{10000}-\\\\u{10FFFF}', ']');\n}\n// Negation of Char: matches any character that is NOT a valid XML 1.0 Char.\n// Derived directly from the Char character class above (after the unicode-support extension).\n// XML 1.0 Char production [2]: #x9 | #xA | #xD | [#x20-#xD7FF] | [#xE000-#xFFFD] | [#x10000-#x10FFFF]\n// @see https://www.w3.org/TR/xml/#NT-Char\nvar InvalidChar = new RegExp('[^' + chars(Char) + ']', UNICODE_SUPPORT ? 'u' : '');\n\nvar _SChar = /[\\x20\\x09\\x0D\\x0A]/;\nvar SChar_s = chars(_SChar);\n// https://www.w3.org/TR/xml11/#NT-S\n// `[3] S ::= (#x20 | #x9 | #xD | #xA)+`\nvar S = reg(_SChar, '+');\n// optional whitespace described as `S?` in the grammar,\n// simplified to 0-n occurrences of the character class\n// instead of 0-1 occurrences of a non-capturing group around S\nvar S_OPT = reg(_SChar, '*');\n\n// https://www.w3.org/TR/xml11/#NT-NameStartChar\n// `[4] NameStartChar ::= \":\" | [A-Z] | \"_\" | [a-z] | [#xC0-#xD6] | [#xD8-#xF6] | [#xF8-#x2FF] | [#x370-#x37D] | [#x37F-#x1FFF] | [#x200C-#x200D] | [#x2070-#x218F] | [#x2C00-#x2FEF] | [#x3001-#xD7FF] | [#xF900-#xFDCF] | [#xFDF0-#xFFFD] | [#x10000-#xEFFFF]`\nvar NameStartChar =\n\t/[:_a-zA-Z\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\u02FF\\u0370-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD]/; // without \\u10000-\\uEFFFF\nif (UNICODE_SUPPORT) {\n\t// eslint-disable-next-line es5/no-unicode-code-point-escape\n\tNameStartChar = reg('[', chars(NameStartChar), '\\\\u{10000}-\\\\u{10FFFF}', ']');\n}\nvar NameStartChar_s = chars(NameStartChar);\n\n// https://www.w3.org/TR/xml11/#NT-NameChar\n// `[4a] NameChar ::= NameStartChar | \"-\" | \".\" | [0-9] | #xB7 | [#x0300-#x036F] | [#x203F-#x2040]`\nvar NameChar = reg('[', NameStartChar_s, chars(/[-.0-9\\xB7]/), chars(/[\\u0300-\\u036F\\u203F-\\u2040]/), ']');\n// https://www.w3.org/TR/xml11/#NT-Name\n// `[5] Name ::= NameStartChar (NameChar)*`\nvar Name = reg(NameStartChar, NameChar, '*');\n/*\nhttps://www.w3.org/TR/xml11/#NT-Names\n`[6] Names ::= Name (#x20 Name)*`\n*/\n\n// https://www.w3.org/TR/xml11/#NT-Nmtoken\n// `[7] Nmtoken ::= (NameChar)+`\nvar Nmtoken = reg(NameChar, '+');\n/*\nhttps://www.w3.org/TR/xml11/#NT-Nmtokens\n`[8] Nmtokens ::= Nmtoken (#x20 Nmtoken)*`\nvar Nmtokens = reg(Nmtoken, regg(/\\x20/, Nmtoken), '*');\n*/\n\n// https://www.w3.org/TR/xml11/#NT-EntityRef\n// `[68] EntityRef ::= '&' Name ';'` [WFC: Entity Declared] [VC: Entity Declared] [WFC: Parsed Entity] [WFC: No Recursion]\nvar EntityRef = reg('&', Name, ';');\n// https://www.w3.org/TR/xml11/#NT-CharRef\n// `[66] CharRef ::= '&#' [0-9]+ ';' | '&#x' [0-9a-fA-F]+ ';'` [WFC: Legal Character]\nvar CharRef = regg(/&#[0-9]+;|&#x[0-9a-fA-F]+;/);\n\n/*\nhttps://www.w3.org/TR/xml11/#NT-Reference\n- `[67] Reference ::= EntityRef | CharRef`\n- `[66] CharRef ::= '&#' [0-9]+ ';' | '&#x' [0-9a-fA-F]+ ';'` [WFC: Legal Character]\n- `[68] EntityRef ::= '&' Name ';'` [WFC: Entity Declared] [VC: Entity Declared] [WFC: Parsed Entity] [WFC: No Recursion]\n*/\nvar Reference = regg(EntityRef, '|', CharRef);\n\n// https://www.w3.org/TR/xml11/#NT-PEReference\n// `[69] PEReference ::= '%' Name ';'`\n// [VC: Entity Declared] [WFC: No Recursion] [WFC: In DTD]\nvar PEReference = reg('%', Name, ';');\n\n// https://www.w3.org/TR/xml11/#NT-EntityValue\n// `[9] EntityValue ::= '\"' ([^%&\"] | PEReference | Reference)* '\"' | \"'\" ([^%&'] | PEReference | Reference)* \"'\"`\nvar EntityValue = regg(\n\treg('\"', regg(/[^%&\"]/, '|', PEReference, '|', Reference), '*', '\"'),\n\t'|',\n\treg(\"'\", regg(/[^%&']/, '|', PEReference, '|', Reference), '*', \"'\")\n);\n\n// https://www.w3.org/TR/xml11/#NT-AttValue\n// `[10] AttValue ::= '\"' ([^<&\"] | Reference)* '\"' | \"'\" ([^<&'] | Reference)* \"'\"`\nvar AttValue = regg('\"', regg(/[^<&\"]/, '|', Reference), '*', '\"', '|', \"'\", regg(/[^<&']/, '|', Reference), '*', \"'\");\n\n// https://www.w3.org/TR/xml-names/#ns-decl\n// https://www.w3.org/TR/xml-names/#ns-qualnames\n// NameStartChar without \":\"\nvar NCNameStartChar = chars_without(NameStartChar, ':');\n// https://www.w3.org/TR/xml-names/#orphans\n// `[5] NCNameChar ::= NameChar - ':'`\n// An XML NameChar, minus the \":\"\nvar NCNameChar = chars_without(NameChar, ':');\n// https://www.w3.org/TR/xml-names/#NT-NCName\n// `[4] NCName ::= Name - (Char* ':' Char*)`\n// An XML Name, minus the \":\"\nvar NCName = reg(NCNameStartChar, NCNameChar, '*');\n\n/**\nhttps://www.w3.org/TR/xml-names/#ns-qualnames\n\n```\n[7] QName ::= PrefixedName | UnprefixedName\n\t\t\t\t === (NCName ':' NCName) | NCName\n\t\t\t\t === NCName (':' NCName)?\n[8] PrefixedName ::= Prefix ':' LocalPart\n\t\t\t\t\t\t\t\t === NCName ':' NCName\n[9] UnprefixedName ::= LocalPart\n\t\t\t\t\t\t\t\t\t === NCName\n[10] Prefix ::= NCName\n[11] LocalPart ::= NCName\n```\n*/\nvar QName = reg(NCName, regg(':', NCName), '?');\nvar QName_exact = reg('^', QName, '$');\nvar QName_group = reg('(', QName, ')');\n\n// https://www.w3.org/TR/xml11/#NT-SystemLiteral\n// `[11] SystemLiteral ::= ('\"' [^\"]* '\"') | (\"'\" [^']* \"'\")`\nvar SystemLiteral = regg(/\"[^\"]*\"|'[^']*'/);\n\n/*\n https://www.w3.org/TR/xml11/#NT-PI\n ```\n [17] PITarget ::= Name - (('X' | 'x') ('M' | 'm') ('L' | 'l'))\n [16] PI ::= '<?' PITarget (S (Char* - (Char* '?>' Char*)))? '?>'\n ```\n target /xml/i is not excluded!\n*/\nvar PI = reg(/^<\\?/, '(', Name, ')', regg(S, '(', Char, '*?)'), '?', /\\?>/);\n\n// https://www.w3.org/TR/xml11/#NT-PubidChar\n// `[13] PubidChar ::= #x20 | #xD | #xA | [a-zA-Z0-9] | [-'()+,./:=?;!*#@$_%]`\nvar PubidChar = /[\\x20\\x0D\\x0Aa-zA-Z0-9-'()+,./:=?;!*#@$_%]/;\n\n// https://www.w3.org/TR/xml11/#NT-PubidLiteral\n// `[12] PubidLiteral ::= '\"' PubidChar* '\"' | \"'\" (PubidChar - \"'\")* \"'\"`\nvar PubidLiteral = regg('\"', PubidChar, '*\"', '|', \"'\", chars_without(PubidChar, \"'\"), \"*'\");\n\n// https://www.w3.org/TR/xml11/#NT-CharData\n// `[14] CharData ::= [^<&]* - ([^<&]* ']]>' [^<&]*)`\n\nvar COMMENT_START = '<!--';\nvar COMMENT_END = '-->';\n// https://www.w3.org/TR/xml11/#NT-Comment\n// `[15] Comment ::= '<!--' ((Char - '-') | ('-' (Char - '-')))* '-->'`\nvar Comment = reg(COMMENT_START, regg(chars_without(Char, '-'), '|', reg('-', chars_without(Char, '-'))), '*', COMMENT_END);\n\nvar PCDATA = '#PCDATA';\n// https://www.w3.org/TR/xml11/#NT-Mixed\n// `[51] Mixed ::= '(' S? '#PCDATA' (S? '|' S? Name)* S? ')*' | '(' S? '#PCDATA' S? ')'`\n// https://www.w3.org/TR/xml-names/#NT-Mixed\n// `[51] Mixed ::= '(' S? '#PCDATA' (S? '|' S? QName)* S? ')*' | '(' S? '#PCDATA' S? ')'`\n// [VC: Proper Group/PE Nesting] [VC: No Duplicate Types]\nvar Mixed = regg(\n\treg(/\\(/, S_OPT, PCDATA, regg(S_OPT, /\\|/, S_OPT, QName), '*', S_OPT, /\\)\\*/),\n\t'|',\n\treg(/\\(/, S_OPT, PCDATA, S_OPT, /\\)/)\n);\n\nvar _children_quantity = /[?*+]?/;\n/*\n `[49] choice ::= '(' S? cp ( S? '|' S? cp )+ S? ')'` [VC: Proper Group/PE Nesting]\n `[50] seq ::= '(' S? cp ( S? ',' S? cp )* S? ')'` [VC: Proper Group/PE Nesting]\n simplification to solve circular referencing, but doesn't check validity constraint \"Proper Group/PE Nesting\"\n var _choice_or_seq = reg('[', NameChar_s, SChar_s, chars(_children_quantity), '()|,]*');\n ```\n [48] cp ::= (Name | choice | seq) ('?' | '*' | '+')?\n === (Name | '(' S? cp ( S? '|' S? cp )+ S? ')' | '(' S? cp ( S? ',' S? cp )* S? ')') ('?' | '*' | '+')?\n !== (Name | [_choice_or_seq]*) ('?' | '*' | '+')?\n ```\n simplification to solve circular referencing, but doesn't check validity constraint \"Proper Group/PE Nesting\"\n var cp = reg(regg(Name, '|', _choice_or_seq), _children_quantity);\n*/\n/*\nInefficient regular expression (High)\nThis part of the regular expression may cause exponential backtracking on strings starting with '(|' and containing many repetitions of '|'.\nhttps://github.com/xmldom/xmldom/security/code-scanning/91\nvar choice = regg(/\\(/, S_OPT, cp, regg(S_OPT, /\\|/, S_OPT, cp), '+', S_OPT, /\\)/);\n*/\n/*\nInefficient regular expression (High)\nThis part of the regular expression may cause exponential backtracking on strings starting with '(,' and containing many repetitions of ','.\nhttps://github.com/xmldom/xmldom/security/code-scanning/92\nvar seq = regg(/\\(/, S_OPT, cp, regg(S_OPT, /,/, S_OPT, cp), '*', S_OPT, /\\)/);\n*/\n\n// `[47] children ::= (choice | seq) ('?' | '*' | '+')?`\n// simplification to solve circular referencing, but doesn't check validity constraint \"Proper Group/PE Nesting\"\nvar children = reg(/\\([^>]+\\)/, _children_quantity /*regg(choice, '|', seq), _children_quantity*/);\n\n// https://www.w3.org/TR/xml11/#NT-contentspec\n// `[46] contentspec ::= 'EMPTY' | 'ANY' | Mixed | children`\nvar contentspec = regg('EMPTY', '|', 'ANY', '|', Mixed, '|', children);\n\nvar ELEMENTDECL_START = '<!ELEMENT';\n// https://www.w3.org/TR/xml11/#NT-elementdecl\n// `[45] elementdecl ::= '<!ELEMENT' S Name S contentspec S? '>'`\n// https://www.w3.org/TR/xml-names/#NT-elementdecl\n// `[17] elementdecl ::= '<!ELEMENT' S QName S contentspec S? '>'`\n// because of https://www.w3.org/TR/xml11/#NT-PEReference\n// since xmldom is not supporting replacements of PEReferences in the DTD\n// this also supports PEReference in the possible places\nvar elementdecl = reg(ELEMENTDECL_START, S, regg(QName, '|', PEReference), S, regg(contentspec, '|', PEReference), S_OPT, '>');\n\n// https://www.w3.org/TR/xml11/#NT-NotationType\n// `[58] NotationType ::= 'NOTATION' S '(' S? Name (S? '|' S? Name)* S? ')'`\n// [VC: Notation Attributes] [VC: One Notation Per Element Type] [VC: No Notation on Empty Element] [VC: No Duplicate Tokens]\nvar NotationType = reg('NOTATION', S, /\\(/, S_OPT, Name, regg(S_OPT, /\\|/, S_OPT, Name), '*', S_OPT, /\\)/);\n// https://www.w3.org/TR/xml11/#NT-Enumeration\n// `[59] Enumeration ::= '(' S? Nmtoken (S? '|' S? Nmtoken)* S? ')'`\n// [VC: Enumeration] [VC: No Duplicate Tokens]\nvar Enumeration = reg(/\\(/, S_OPT, Nmtoken, regg(S_OPT, /\\|/, S_OPT, Nmtoken), '*', S_OPT, /\\)/);\n\n// https://www.w3.org/TR/xml11/#NT-EnumeratedType\n// `[57] EnumeratedType ::= NotationType | Enumeration`\nvar EnumeratedType = regg(NotationType, '|', Enumeration);\n\n/*\n```\n[55] StringType ::= 'CDATA'\n[56] TokenizedType ::= 'ID' [VC: ID] [VC: One ID per Element Type] [VC: ID Attribute Default]\n | 'IDREF' [VC: IDREF]\n | 'IDREFS' [VC: IDREF]\n\t | 'ENTITY' [VC: Entity Name]\n\t | 'ENTITIES' [VC: Entity Name]\n\t | 'NMTOKEN' [VC: Name Token]\n\t | 'NMTOKENS' [VC: Name Token]\n [54] AttType ::= StringType | TokenizedType | EnumeratedType\n```*/\nvar AttType = regg(/CDATA|ID|IDREF|IDREFS|ENTITY|ENTITIES|NMTOKEN|NMTOKENS/, '|', EnumeratedType);\n\n// `[60] DefaultDecl ::= '#REQUIRED' | '#IMPLIED' | (('#FIXED' S)? AttValue)`\n// [WFC: No < in Attribute Values] [WFC: No External Entity References]\n// [VC: Fixed Attribute Default] [VC: Required Attribute] [VC: Attribute Default Value Syntactically Correct]\nvar DefaultDecl = regg(/#REQUIRED|#IMPLIED/, '|', regg(regg('#FIXED', S), '?', AttValue));\n\n// https://www.w3.org/TR/xml11/#NT-AttDef\n// [53] AttDef ::= S Name S AttType S DefaultDecl\n// https://www.w3.org/TR/xml-names/#NT-AttDef\n// [1] NSAttName ::= PrefixedAttName | DefaultAttName\n// [2] PrefixedAttName ::= 'xmlns:' NCName [NSC: Reserved Prefixes and Namespace Names]\n// [3] DefaultAttName ::= 'xmlns'\n// [21] AttDef ::= S (QName | NSAttName) S AttType S DefaultDecl\n// \t\t\t\t\t\t === S Name S AttType S DefaultDecl\n// xmldom is not distinguishing between QName and NSAttName on this level\n// to support XML without namespaces in DTD we can not restrict it to QName\nvar AttDef = regg(S, Name, S, AttType, S, DefaultDecl);\n\nvar ATTLIST_DECL_START = '<!ATTLIST';\n// https://www.w3.org/TR/xml11/#NT-AttlistDecl\n// `[52] AttlistDecl ::= '<!ATTLIST' S Name AttDef* S? '>'`\n// https://www.w3.org/TR/xml-names/#NT-AttlistDecl\n// `[20] AttlistDecl ::= '<!ATTLIST' S QName AttDef* S? '>'`\n// to support XML without namespaces in DTD we can not restrict it to QName\nvar AttlistDecl = reg(ATTLIST_DECL_START, S, Name, AttDef, '*', S_OPT, '>');\n\n// https://html.spec.whatwg.org/multipage/urls-and-fetching.html#about:legacy-compat\nvar ABOUT_LEGACY_COMPAT = 'about:legacy-compat';\nvar ABOUT_LEGACY_COMPAT_SystemLiteral = regg('\"' + ABOUT_LEGACY_COMPAT + '\"', '|', \"'\" + ABOUT_LEGACY_COMPAT + \"'\");\nvar SYSTEM = 'SYSTEM';\nvar PUBLIC = 'PUBLIC';\n// https://www.w3.org/TR/xml11/#NT-ExternalID\n// `[75] ExternalID ::= 'SYSTEM' S SystemLiteral | 'PUBLIC' S PubidLiteral S SystemLiteral`\nvar ExternalID = regg(regg(SYSTEM, S, SystemLiteral), '|', regg(PUBLIC, S, PubidLiteral, S, SystemLiteral));\nvar ExternalID_match = reg(\n\t'^',\n\tregg(\n\t\tregg(SYSTEM, S, '(?<SystemLiteralOnly>', SystemLiteral, ')'),\n\t\t'|',\n\t\tregg(PUBLIC, S, '(?<PubidLiteral>', PubidLiteral, ')', S, '(?<SystemLiteral>', SystemLiteral, ')')\n\t)\n);\n// Full-string anchored matcher for requireWellFormed serializer checks\n// https://w3c.github.io/DOM-Parsing/#xml-serializing-a-document-node\nvar PubidLiteral_match = reg('^', PubidLiteral, '$');\n// Full-string anchored matcher for requireWellFormed serializer checks\n// https://w3c.github.io/DOM-Parsing/#xml-serializing-a-document-node\nvar SystemLiteral_match = reg('^', SystemLiteral, '$');\n\n// https://www.w3.org/TR/xml11/#NT-NDataDecl\n// `[76] NDataDecl ::= S 'NDATA' S Name` [VC: Notation Declared]\nvar NDataDecl = regg(S, 'NDATA', S, Name);\n\n// https://www.w3.org/TR/xml11/#NT-EntityDef\n// `[73] EntityDef ::= EntityValue | (ExternalID NDataDecl?)`\nvar EntityDef = regg(EntityValue, '|', regg(ExternalID, NDataDecl, '?'));\n\nvar ENTITY_DECL_START = '<!ENTITY';\n// https://www.w3.org/TR/xml11/#NT-GEDecl\n// `[71] GEDecl ::= '<!ENTITY' S Name S EntityDef S? '>'`\nvar GEDecl = reg(ENTITY_DECL_START, S, Name, S, EntityDef, S_OPT, '>');\n// https://www.w3.org/TR/xml11/#NT-PEDef\n// `[74] PEDef ::= EntityValue | ExternalID`\nvar PEDef = regg(EntityValue, '|', ExternalID);\n// https://www.w3.org/TR/xml11/#NT-PEDecl\n// `[72] PEDecl ::= '<!ENTITY' S '%' S Name S PEDef S? '>'`\nvar PEDecl = reg(ENTITY_DECL_START, S, '%', S, Name, S, PEDef, S_OPT, '>');\n// https://www.w3.org/TR/xml11/#NT-EntityDecl\n// `[70] EntityDecl ::= GEDecl | PEDecl`\nvar EntityDecl = regg(GEDecl, '|', PEDecl);\n\n// https://www.w3.org/TR/xml11/#NT-PublicID\n// `[83] PublicID ::= 'PUBLIC' S PubidLiteral`\nvar PublicID = reg(PUBLIC, S, PubidLiteral);\n// https://www.w3.org/TR/xml11/#NT-NotationDecl\n// `[82] NotationDecl ::= '<!NOTATION' S Name S (ExternalID | PublicID) S? '>'` [VC: Unique Notation Name]\nvar NotationDecl = reg('<!NOTATION', S, Name, S, regg(ExternalID, '|', PublicID), S_OPT, '>');\n\n// https://www.w3.org/TR/xml11/#NT-Eq\n// `[25] Eq ::= S? '=' S?`\nvar Eq = reg(S_OPT, '=', S_OPT);\n// https://www.w3.org/TR/xml/#NT-VersionNum\n// `[26] VersionNum ::= '1.' [0-9]+`\n// https://www.w3.org/TR/xml11/#NT-VersionNum\n// `[26] VersionNum ::= '1.1'`\nvar VersionNum = /1[.]\\d+/;\n// https://www.w3.org/TR/xml11/#NT-VersionInfo\n// `[24] VersionInfo ::= S 'version' Eq (\"'\" VersionNum \"'\" | '\"' VersionNum '\"')`\nvar VersionInfo = reg(S, 'version', Eq, regg(\"'\", VersionNum, \"'\", '|', '\"', VersionNum, '\"'));\n// https://www.w3.org/TR/xml11/#NT-EncName\n// `[81] EncName ::= [A-Za-z] ([A-Za-z0-9._] | '-')*`\nvar EncName = /[A-Za-z][-A-Za-z0-9._]*/;\n// https://www.w3.org/TR/xml11/#NT-EncDecl\n// `[80] EncodingDecl ::= S 'encoding' Eq ('\"' EncName '\"' | \"'\" EncName \"'\" )`\nvar EncodingDecl = regg(S, 'encoding', Eq, regg('\"', EncName, '\"', '|', \"'\", EncName, \"'\"));\n// https://www.w3.org/TR/xml11/#NT-SDDecl\n// `[32] SDDecl ::= S 'standalone' Eq ((\"'\" ('yes' | 'no') \"'\") | ('\"' ('yes' | 'no') '\"'))`\nvar SDDecl = regg(S, 'standalone', Eq, regg(\"'\", regg('yes', '|', 'no'), \"'\", '|', '\"', regg('yes', '|', 'no'), '\"'));\n// https://www.w3.org/TR/xml11/#NT-XMLDecl\n// [23] XMLDecl ::= '<?xml' VersionInfo EncodingDecl? SDDecl? S? '?>'\nvar XMLDecl = reg(/^<\\?xml/, VersionInfo, EncodingDecl, '?', SDDecl, '?', S_OPT, /\\?>/);\n\n/*\n https://www.w3.org/TR/xml/#NT-markupdecl\n https://www.w3.org/TR/xml11/#NT-markupdecl\n `[29] markupdecl ::= elementdecl | AttlistDecl | EntityDecl | NotationDecl | PI | Comment`\n var markupdecl = regg(elementdecl, '|', AttlistDecl, '|', EntityDecl, '|', NotationDecl, '|', PI_unsafe, '|', Comment);\n*/\n/*\n https://www.w3.org/TR/xml-names/#NT-doctypedecl\n`[28a] DeclSep ::= PEReference | S`\n https://www.w3.org/TR/xml11/#NT-intSubset\n```\n [28b] intSubset ::= (markupdecl | DeclSep)*\n === (markupdecl | PEReference | S)*\n```\n [WFC: PE Between Declarations]\n var intSubset = reg(regg(markupdecl, '|', PEReference, '|', S), '*');\n*/\nvar DOCTYPE_DECL_START = '<!DOCTYPE';\n/*\n https://www.w3.org/TR/xml11/#NT-doctypedecl\n `[28] doctypedecl ::= '<!DOCTYPE' S Name (S ExternalID)? S? ('[' intSubset ']' S?)? '>'`\n https://www.afterwardsw3.org/TR/xml-names/#NT-doctypedecl\n `[16] doctypedecl ::= '<!DOCTYPE' S QName (S ExternalID)? S? ('[' (markupdecl | PEReference | S)* ']' S?)? '>'`\n var doctypedecl = reg('<!DOCTYPE', S, Name, regg(S, ExternalID), '?', S_OPT, regg(/\\[/, intSubset, /]/, S_OPT), '?', '>');\n*/\n\nvar CDATA_START = '<![CDATA[';\nvar CDATA_END = ']]>';\nvar CDStart = /<!\\[CDATA\\[/;\nvar CDEnd = /\\]\\]>/;\nvar CData = reg(Char, '*?', CDEnd);\n/*\n https://www.w3.org/TR/xml/#dt-cdsection\n `[18] \tCDSect\t ::= \tCDStart CData CDEnd`\n `[19] \tCDStart\t ::= \t'<![CDATA['`\n `[20] \tCData\t ::= \t(Char* - (Char* ']]>' Char*))`\n `[21] \tCDEnd\t ::= \t']]>'`\n*/\nvar CDSect = reg(CDStart, CData);\n\n// unit tested\nexports.chars = chars;\nexports.chars_without = chars_without;\nexports.detectUnicodeSupport = detectUnicodeSupport;\nexports.reg = reg;\nexports.regg = regg;\nexports.ABOUT_LEGACY_COMPAT = ABOUT_LEGACY_COMPAT;\nexports.ABOUT_LEGACY_COMPAT_SystemLiteral = ABOUT_LEGACY_COMPAT_SystemLiteral;\nexports.AttlistDecl = AttlistDecl;\nexports.CDATA_START = CDATA_START;\nexports.CDATA_END = CDATA_END;\nexports.CDSect = CDSect;\nexports.Char = Char;\nexports.Comment = Comment;\nexports.COMMENT_START = COMMENT_START;\nexports.COMMENT_END = COMMENT_END;\nexports.DOCTYPE_DECL_START = DOCTYPE_DECL_START;\nexports.elementdecl = elementdecl;\nexports.EntityDecl = EntityDecl;\nexports.EntityValue = EntityValue;\nexports.ExternalID = ExternalID;\nexports.ExternalID_match = ExternalID_match;\nexports.Name = Name;\nexports.NotationDecl = NotationDecl;\nexports.Reference = Reference;\nexports.PEReference = PEReference;\nexports.PI = PI;\nexports.PUBLIC = PUBLIC;\nexports.PubidLiteral = PubidLiteral;\nexports.PubidLiteral_match = PubidLiteral_match;\nexports.QName = QName;\nexports.QName_exact = QName_exact;\nexports.QName_group = QName_group;\nexports.S = S;\nexports.SChar_s = SChar_s;\nexports.S_OPT = S_OPT;\nexports.SYSTEM = SYSTEM;\nexports.SystemLiteral = SystemLiteral;\nexports.SystemLiteral_match = SystemLiteral_match;\nexports.InvalidChar = InvalidChar;\nexports.UNICODE_REPLACEMENT_CHARACTER = UNICODE_REPLACEMENT_CHARACTER;\nexports.UNICODE_SUPPORT = UNICODE_SUPPORT;\nexports.XMLDecl = XMLDecl;\n","'use strict';\n\nvar conventions = require('./conventions');\nvar find = conventions.find;\nvar hasDefaultHTMLNamespace = conventions.hasDefaultHTMLNamespace;\nvar hasOwn = conventions.hasOwn;\nvar isHTMLMimeType = conventions.isHTMLMimeType;\nvar isHTMLRawTextElement = conventions.isHTMLRawTextElement;\nvar isHTMLVoidElement = conventions.isHTMLVoidElement;\nvar MIME_TYPE = conventions.MIME_TYPE;\nvar NAMESPACE = conventions.NAMESPACE;\n\n/**\n * Private DOM Constructor symbol\n *\n * Internal symbol used for construction of all classes whose constructors should be private.\n * Currently used for checks in `Node`, `Document`, `Element`, `Attr`, `CharacterData`, `Text`, `Comment`,\n * `CDATASection`, `DocumentType`, `Notation`, `Entity`, `EntityReference`, `DocumentFragment`, `ProcessingInstruction`\n * so the constructor can't be used from outside the module.\n */\nvar PDC = Symbol();\n\nvar errors = require('./errors');\nvar DOMException = errors.DOMException;\nvar DOMExceptionName = errors.DOMExceptionName;\n\nvar g = require('./grammar');\n\n/**\n * Checks if the given symbol equals the Private DOM Constructor symbol (PDC)\n * and throws an Illegal constructor exception when the symbols don't match.\n * This ensures that the constructor remains private and can't be used outside this module.\n */\nfunction checkSymbol(symbol) {\n\tif (symbol !== PDC) {\n\t\tthrow new TypeError('Illegal constructor');\n\t}\n}\n\n/**\n * A prerequisite for `[].filter`, to drop elements that are empty.\n *\n * @param {string} input\n * The string to be checked.\n * @returns {boolean}\n * Returns `true` if the input string is not empty, `false` otherwise.\n */\nfunction notEmptyString(input) {\n\treturn input !== '';\n}\n/**\n * Splits a string on ASCII whitespace characters (U+0009 TAB, U+000A LF, U+000C FF, U+000D CR,\n * U+0020 SPACE).\n * It follows the definition from the infra specification from WHATWG.\n *\n * @param {string} input\n * The string to be split.\n * @returns {string[]}\n * An array of the split strings. The array can be empty if the input string is empty or only\n * contains whitespace characters.\n * @see {@link https://infra.spec.whatwg.org/#split-on-ascii-whitespace}\n * @see {@link https://infra.spec.whatwg.org/#ascii-whitespace}\n */\nfunction splitOnASCIIWhitespace(input) {\n\t// U+0009 TAB, U+000A LF, U+000C FF, U+000D CR, U+0020 SPACE\n\treturn input ? input.split(/[\\t\\n\\f\\r ]+/).filter(notEmptyString) : [];\n}\n\n/**\n * Adds element as a key to current if it is not already present.\n *\n * @param {Record<string, boolean | undefined>} current\n * The current record object to which the element will be added as a key.\n * The object's keys are string types and values are either boolean or undefined.\n * @param {string} element\n * The string to be added as a key to the current record.\n * @returns {Record<string, boolean | undefined>}\n * The updated record object after the addition of the new element.\n */\nfunction orderedSetReducer(current, element) {\n\tif (!hasOwn(current, element)) {\n\t\tcurrent[element] = true;\n\t}\n\treturn current;\n}\n\n/**\n * Converts a string into an ordered set by splitting the input on ASCII whitespace and\n * ensuring uniqueness of elements.\n * This follows the definition of an ordered set from the infra specification by WHATWG.\n *\n * @param {string} input\n * The input string to be transformed into an ordered set.\n * @returns {string[]}\n * An array of unique strings obtained from the input, preserving the original order.\n * The array can be empty if the input string is empty or only contains whitespace characters.\n * @see {@link https://infra.spec.whatwg.org/#ordered-set}\n */\nfunction toOrderedSet(input) {\n\tif (!input) return [];\n\tvar list = splitOnASCIIWhitespace(input);\n\treturn Object.keys(list.reduce(orderedSetReducer, {}));\n}\n\n/**\n * Uses `list.indexOf` to implement a function that behaves like `Array.prototype.includes`.\n * This function is used in environments where `Array.prototype.includes` may not be available.\n *\n * @param {any[]} list\n * The array in which to search for the element.\n * @returns {function(any): boolean}\n * A function that accepts an element and returns a boolean indicating whether the element is\n * included in the provided list.\n */\nfunction arrayIncludes(list) {\n\treturn function (element) {\n\t\treturn list && list.indexOf(element) !== -1;\n\t};\n}\n\n/**\n * Validates a qualified name based on the criteria provided in the DOM specification by\n * WHATWG.\n *\n * @param {string} qualifiedName\n * The qualified name to be validated.\n * @throws {DOMException}\n * With code {@link DOMException.INVALID_CHARACTER_ERR} if the qualified name contains an\n * invalid character.\n * @see {@link https://dom.spec.whatwg.org/#validate}\n */\nfunction validateQualifiedName(qualifiedName) {\n\tif (!g.QName_exact.test(qualifiedName)) {\n\t\tthrow new DOMException(DOMException.INVALID_CHARACTER_ERR, 'invalid character in qualified name \"' + qualifiedName + '\"');\n\t}\n}\n\n/**\n * Validates a qualified name and the namespace associated with it,\n * based on the criteria provided in the DOM specification by WHATWG.\n *\n * @param {string | null} namespace\n * The namespace to be validated. It can be a string or null.\n * @param {string} qualifiedName\n * The qualified name to be validated.\n * @returns {[namespace: string | null, prefix: string | null, localName: string]}\n * Returns a tuple with the namespace,\n * prefix and local name of the qualified name.\n * @throws {DOMException}\n * Throws a DOMException if the qualified name or the namespace is not valid.\n * @see {@link https://dom.spec.whatwg.org/#validate-and-extract}\n */\nfunction validateAndExtract(namespace, qualifiedName) {\n\tvalidateQualifiedName(qualifiedName);\n\tnamespace = namespace || null;\n\t/**\n\t * @type {string | null}\n\t */\n\tvar prefix = null;\n\tvar localName = qualifiedName;\n\tif (qualifiedName.indexOf(':') >= 0) {\n\t\tvar splitResult = qualifiedName.split(':');\n\t\tprefix = splitResult[0];\n\t\tlocalName = splitResult[1];\n\t}\n\tif (prefix !== null && namespace === null) {\n\t\tthrow new DOMException(DOMException.NAMESPACE_ERR, 'prefix is non-null and namespace is null');\n\t}\n\tif (prefix === 'xml' && namespace !== conventions.NAMESPACE.XML) {\n\t\tthrow new DOMException(DOMException.NAMESPACE_ERR, 'prefix is \"xml\" and namespace is not the XML namespace');\n\t}\n\tif ((prefix === 'xmlns' || qualifiedName === 'xmlns') && namespace !== conventions.NAMESPACE.XMLNS) {\n\t\tthrow new DOMException(\n\t\t\tDOMException.NAMESPACE_ERR,\n\t\t\t'either qualifiedName or prefix is \"xmlns\" and namespace is not the XMLNS namespace'\n\t\t);\n\t}\n\tif (namespace === conventions.NAMESPACE.XMLNS && prefix !== 'xmlns' && qualifiedName !== 'xmlns') {\n\t\tthrow new DOMException(\n\t\t\tDOMException.NAMESPACE_ERR,\n\t\t\t'namespace is the XMLNS namespace and neither qualifiedName nor prefix is \"xmlns\"'\n\t\t);\n\t}\n\treturn [namespace, prefix, localName];\n}\n\n/**\n * Copies properties from one object to another.\n * It only copies the object's own (not inherited) properties.\n *\n * @param {Object} src\n * The source object from which properties are copied.\n * @param {Object} dest\n * The destination object to which properties are copied.\n */\nfunction copy(src, dest) {\n\tfor (var p in src) {\n\t\tif (hasOwn(src, p)) {\n\t\t\tdest[p] = src[p];\n\t\t}\n\t}\n}\n\n/**\n * Extends a class with the properties and methods of a super class.\n * It uses a form of prototypal inheritance, and establishes the `constructor` property\n * correctly(?).\n *\n * It is not clear to the current maintainers if this implementation is making sense,\n * since it creates an intermediate prototype function,\n * which all properties of `Super` are copied onto using `_copy`.\n *\n * @param {Object} Class\n * The class that is to be extended.\n * @param {Object} Super\n * The super class from which properties and methods are inherited.\n * @private\n */\nfunction _extends(Class, Super) {\n\tvar pt = Class.prototype;\n\tif (!(pt instanceof Super)) {\n\t\tfunction t() {}\n\t\tt.prototype = Super.prototype;\n\t\tt = new t();\n\t\tcopy(pt, t);\n\t\tClass.prototype = pt = t;\n\t}\n\tif (pt.constructor != Class) {\n\t\tif (typeof Class != 'function') {\n\t\t\tconsole.error('unknown Class:' + Class);\n\t\t}\n\t\tpt.constructor = Class;\n\t}\n}\n\nvar NodeType = {};\nvar ELEMENT_NODE = (NodeType.ELEMENT_NODE = 1);\nvar ATTRIBUTE_NODE = (NodeType.ATTRIBUTE_NODE = 2);\nvar TEXT_NODE = (NodeType.TEXT_NODE = 3);\nvar CDATA_SECTION_NODE = (NodeType.CDATA_SECTION_NODE = 4);\nvar ENTITY_REFERENCE_NODE = (NodeType.ENTITY_REFERENCE_NODE = 5);\nvar ENTITY_NODE = (NodeType.ENTITY_NODE = 6);\nvar PROCESSING_INSTRUCTION_NODE = (NodeType.PROCESSING_INSTRUCTION_NODE = 7);\nvar COMMENT_NODE = (NodeType.COMMENT_NODE = 8);\nvar DOCUMENT_NODE = (NodeType.DOCUMENT_NODE = 9);\nvar DOCUMENT_TYPE_NODE = (NodeType.DOCUMENT_TYPE_NODE = 10);\nvar DOCUMENT_FRAGMENT_NODE = (NodeType.DOCUMENT_FRAGMENT_NODE = 11);\nvar NOTATION_NODE = (NodeType.NOTATION_NODE = 12);\n\nvar DocumentPosition = conventions.freeze({\n\tDOCUMENT_POSITION_DISCONNECTED: 1,\n\tDOCUMENT_POSITION_PRECEDING: 2,\n\tDOCUMENT_POSITION_FOLLOWING: 4,\n\tDOCUMENT_POSITION_CONTAINS: 8,\n\tDOCUMENT_POSITION_CONTAINED_BY: 16,\n\tDOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC: 32,\n});\n\n//helper functions for compareDocumentPosition\n/**\n * Finds the common ancestor in two parent chains.\n *\n * @param {Node[]} a\n * The first parent chain.\n * @param {Node[]} b\n * The second parent chain.\n * @returns {Node}\n * The common ancestor node if it exists. If there is no common ancestor, the function will\n * return `null`.\n */\nfunction commonAncestor(a, b) {\n\tif (b.length < a.length) return commonAncestor(b, a);\n\tvar c = null;\n\tfor (var n in a) {\n\t\tif (a[n] !== b[n]) return c;\n\t\tc = a[n];\n\t}\n\treturn c;\n}\n\n/**\n * Assigns a unique identifier to a document to ensure consistency while comparing unrelated\n * nodes.\n *\n * @param {Document} doc\n * The document to which a unique identifier is to be assigned.\n * @returns {string}\n * The unique identifier of the document. If the document already had a unique identifier, the\n * function will return the existing one.\n */\nfunction docGUID(doc) {\n\tif (!doc.guid) doc.guid = Math.random();\n\treturn doc.guid;\n}\n//-- end of helper functions\n\n/**\n * The NodeList interface provides the abstraction of an ordered collection of nodes,\n * without defining or constraining how this collection is implemented.\n * NodeList objects in the DOM are live.\n * The items in the NodeList are accessible via an integral index, starting from 0.\n * You can also access the items of the NodeList with a `for...of` loop.\n *\n * @class NodeList\n * @see http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/core.html#ID-536297177\n * @constructs NodeList\n */\nfunction NodeList() {}\nNodeList.prototype = {\n\t/**\n\t * The number of nodes in the list. The range of valid child node indices is 0 to length-1\n\t * inclusive.\n\t *\n\t * @type {number}\n\t */\n\tlength: 0,\n\t/**\n\t * Returns the item at `index`. If index is greater than or equal to the number of nodes in\n\t * the list, this returns null.\n\t *\n\t * @param index\n\t * Unsigned long Index into the collection.\n\t * @returns {Node | null}\n\t * The node at position `index` in the NodeList,\n\t * or null if that is not a valid index.\n\t */\n\titem: function (index) {\n\t\treturn index >= 0 && index < this.length ? this[index] : null;\n\t},\n\t/**\n\t * Returns a string representation of the NodeList.\n\t *\n\t * Accepts the same `options` object as `XMLSerializer.prototype.serializeToString`\n\t * (`requireWellFormed`, `splitCDATASections`, `nodeFilter`). Passing a function is treated as\n\t * a legacy `nodeFilter` for backward compatibility.\n\t *\n\t * @param {Object | function} [options]\n\t * @param {boolean} [options.requireWellFormed=false]\n\t * @param {boolean} [options.splitCDATASections=true]\n\t * @param {function} [options.nodeFilter]\n\t * @returns {string}\n\t */\n\ttoString: function (options) {\n\t\tvar opts;\n\t\tif (typeof options === 'function') {\n\t\t\topts = { requireWellFormed: false, splitCDATASections: true, nodeFilter: options };\n\t\t} else if (!!options) {\n\t\t\topts = {\n\t\t\t\trequireWellFormed: !!options.requireWellFormed,\n\t\t\t\tsplitCDATASections: options.splitCDATASections !== false,\n\t\t\t\tnodeFilter: options.nodeFilter || null,\n\t\t\t};\n\t\t} else {\n\t\t\topts = { requireWellFormed: false, splitCDATASections: true, nodeFilter: null };\n\t\t}\n\t\tfor (var buf = [], i = 0; i < this.length; i++) {\n\t\t\tserializeToString(this[i], buf, null, opts);\n\t\t}\n\t\treturn buf.join('');\n\t},\n\t/**\n\t * Filters the NodeList based on a predicate.\n\t *\n\t * @param {function(Node): boolean} predicate\n\t * - A predicate function to filter the NodeList.\n\t * @returns {Node[]}\n\t * An array of nodes that satisfy the predicate.\n\t * @private\n\t */\n\tfilter: function (predicate) {\n\t\treturn Array.prototype.filter.call(this, predicate);\n\t},\n\t/**\n\t * Returns the first index at which a given node can be found in the NodeList, or -1 if it is\n\t * not present.\n\t *\n\t * @param {Node} item\n\t * - The Node item to locate in the NodeList.\n\t * @returns {number}\n\t * The first index of the node in the NodeList; -1 if not found.\n\t * @private\n\t */\n\tindexOf: function (item) {\n\t\treturn Array.prototype.indexOf.call(this, item);\n\t},\n};\nNodeList.prototype[Symbol.iterator] = function () {\n\tvar me = this;\n\tvar index = 0;\n\n\treturn {\n\t\tnext: function () {\n\t\t\tif (index < me.length) {\n\t\t\t\treturn {\n\t\t\t\t\tvalue: me[index++],\n\t\t\t\t\tdone: false,\n\t\t\t\t};\n\t\t\t} else {\n\t\t\t\treturn {\n\t\t\t\t\tdone: true,\n\t\t\t\t};\n\t\t\t}\n\t\t},\n\t\treturn: function () {\n\t\t\treturn {\n\t\t\t\tdone: true,\n\t\t\t};\n\t\t},\n\t};\n};\n\n/**\n * Represents a live collection of nodes that is automatically updated when its associated\n * document changes.\n *\n * @class LiveNodeList\n * @param {Node} node\n * The associated node.\n * @param {function} refresh\n * The function to refresh the live node list.\n * @augments NodeList\n * @constructs LiveNodeList\n */\nfunction LiveNodeList(node, refresh) {\n\tthis._node = node;\n\tthis._refresh = refresh;\n\t_updateLiveList(this);\n}\n/**\n * Updates the live node list.\n *\n * @param {LiveNodeList} list\n * The live node list to update.\n * @private\n */\nfunction _updateLiveList(list) {\n\tvar inc = list._node._inc || list._node.ownerDocument._inc;\n\tif (list._inc !== inc) {\n\t\tvar ls = list._refresh(list._node);\n\t\t__set__(list, 'length', ls.length);\n\t\tif (!list.$$length || ls.length < list.$$length) {\n\t\t\tfor (var i = ls.length; i in list; i++) {\n\t\t\t\tif (hasOwn(list, i)) {\n\t\t\t\t\tdelete list[i];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tcopy(ls, list);\n\t\tlist._inc = inc;\n\t}\n}\n/**\n * Returns the node at position `index` in the LiveNodeList, or null if that is not a valid\n * index.\n *\n * @param {number} i\n * Index into the collection.\n * @returns {Node | null}\n * The node at position `index` in the LiveNodeList, or null if that is not a valid index.\n */\nLiveNodeList.prototype.item = function (i) {\n\t_updateLiveList(this);\n\treturn this[i] || null;\n};\n\n_extends(LiveNodeList, NodeList);\n\n/**\n * Objects implementing the NamedNodeMap interface are used to represent collections of nodes\n * that can be accessed by name.\n * Note that NamedNodeMap does not inherit from NodeList;\n * NamedNodeMaps are not maintained in any particular order.\n * Objects contained in an object implementing NamedNodeMap may also be accessed by an ordinal\n * index,\n * but this is simply to allow convenient enumeration of the contents of a NamedNodeMap,\n * and does not imply that the DOM specifies an order to these Nodes.\n * NamedNodeMap objects in the DOM are live.\n * used for attributes or DocumentType entities\n *\n * This implementation only supports property indices, but does not support named properties,\n * as specified in the living standard.\n *\n * @class NamedNodeMap\n * @see https://dom.spec.whatwg.org/#interface-namednodemap\n * @see https://webidl.spec.whatwg.org/#dfn-supported-property-names\n * @constructs NamedNodeMap\n */\nfunction NamedNodeMap() {}\n/**\n * Returns the index of a node within the list.\n *\n * @param {Array} list\n * The list of nodes.\n * @param {Node} node\n * The node to find.\n * @returns {number}\n * The index of the node within the list, or -1 if not found.\n * @private\n */\nfunction _findNodeIndex(list, node) {\n\tvar i = 0;\n\twhile (i < list.length) {\n\t\tif (list[i] === node) {\n\t\t\treturn i;\n\t\t}\n\t\ti++;\n\t}\n}\n/**\n * Adds a new attribute to the list and updates the owner element of the attribute.\n *\n * @param {Element} el\n * The element which will become the owner of the new attribute.\n * @param {NamedNodeMap} list\n * The list to which the new attribute will be added.\n * @param {Attr} newAttr\n * The new attribute to be added.\n * @param {Attr} oldAttr\n * The old attribute to be replaced, or null if no attribute is to be replaced.\n * @returns {void}\n * @private\n */\nfunction _addNamedNode(el, list, newAttr, oldAttr) {\n\tif (oldAttr) {\n\t\tlist[_findNodeIndex(list, oldAttr)] = newAttr;\n\t} else {\n\t\tlist[list.length] = newAttr;\n\t\tlist.length++;\n\t}\n\tif (el) {\n\t\tnewAttr.ownerElement = el;\n\t\tvar doc = el.ownerDocument;\n\t\tif (doc) {\n\t\t\toldAttr && _onRemoveAttribute(doc, el, oldAttr);\n\t\t\t_onAddAttribute(doc, el, newAttr);\n\t\t}\n\t}\n}\n/**\n * Removes an attribute from the list and updates the owner element of the attribute.\n *\n * @param {Element} el\n * The element which is the current owner of the attribute.\n * @param {NamedNodeMap} list\n * The list from which the attribute will be removed.\n * @param {Attr} attr\n * The attribute to be removed.\n * @returns {void}\n * @private\n */\nfunction _removeNamedNode(el, list, attr) {\n\t//console.log('remove attr:'+attr)\n\tvar i = _findNodeIndex(list, attr);\n\tif (i >= 0) {\n\t\tvar lastIndex = list.length - 1;\n\t\twhile (i <= lastIndex) {\n\t\t\tlist[i] = list[++i];\n\t\t}\n\t\tlist.length = lastIndex;\n\t\tif (el) {\n\t\t\tvar doc = el.ownerDocument;\n\t\t\tif (doc) {\n\t\t\t\t_onRemoveAttribute(doc, el, attr);\n\t\t\t}\n\t\t\tattr.ownerElement = null;\n\t\t}\n\t}\n}\nNamedNodeMap.prototype = {\n\tlength: 0,\n\titem: NodeList.prototype.item,\n\n\t/**\n\t * Get an attribute by name. Note: Name is in lower case in case of HTML namespace and\n\t * document.\n\t *\n\t * @param {string} localName\n\t * The local name of the attribute.\n\t * @returns {Attr | null}\n\t * The attribute with the given local name, or null if no such attribute exists.\n\t * @see https://dom.spec.whatwg.org/#concept-element-attributes-get-by-name\n\t */\n\tgetNamedItem: function (localName) {\n\t\tif (this._ownerElement && this._ownerElement._isInHTMLDocumentAndNamespace()) {\n\t\t\tlocalName = localName.toLowerCase();\n\t\t}\n\t\tvar i = 0;\n\t\twhile (i < this.length) {\n\t\t\tvar attr = this[i];\n\t\t\tif (attr.nodeName === localName) {\n\t\t\t\treturn attr;\n\t\t\t}\n\t\t\ti++;\n\t\t}\n\t\treturn null;\n\t},\n\n\t/**\n\t * Set an attribute.\n\t *\n\t * @param {Attr} attr\n\t * The attribute to set.\n\t * @returns {Attr | null}\n\t * The old attribute with the same local name and namespace URI as the new one, or null if no\n\t * such attribute exists.\n\t * @throws {DOMException}\n\t * With code:\n\t * - {@link INUSE_ATTRIBUTE_ERR} - If the attribute is already an attribute of another\n\t * element.\n\t * @see https://dom.spec.whatwg.org/#concept-element-attributes-set\n\t */\n\tsetNamedItem: function (attr) {\n\t\tvar el = attr.ownerElement;\n\t\tif (el && el !== this._ownerElement) {\n\t\t\tthrow new DOMException(DOMException.INUSE_ATTRIBUTE_ERR);\n\t\t}\n\t\tvar oldAttr = this.getNamedItemNS(attr.namespaceURI, attr.localName);\n\t\tif (oldAttr === attr) {\n\t\t\treturn attr;\n\t\t}\n\t\t_addNamedNode(this._ownerElement, this, attr, oldAttr);\n\t\treturn oldAttr;\n\t},\n\n\t/**\n\t * Set an attribute, replacing an existing attribute with the same local name and namespace\n\t * URI if one exists.\n\t *\n\t * @param {Attr} attr\n\t * The attribute to set.\n\t * @returns {Attr | null}\n\t * The old attribute with the same local name and namespace URI as the new one, or null if no\n\t * such attribute exists.\n\t * @throws {DOMException}\n\t * Throws a DOMException with the name \"InUseAttributeError\" if the attribute is already an\n\t * attribute of another element.\n\t * @see https://dom.spec.whatwg.org/#concept-element-attributes-set\n\t */\n\tsetNamedItemNS: function (attr) {\n\t\treturn this.setNamedItem(attr);\n\t},\n\n\t/**\n\t * Removes an attribute specified by the local name.\n\t *\n\t * @param {string} localName\n\t * The local name of the attribute to be removed.\n\t * @returns {Attr}\n\t * The attribute node that was removed.\n\t * @throws {DOMException}\n\t * With code:\n\t * - {@link DOMException.NOT_FOUND_ERR} if no attribute with the given name is found.\n\t * @see https://dom.spec.whatwg.org/#dom-namednodemap-removenameditem\n\t * @see https://dom.spec.whatwg.org/#concept-element-attributes-remove-by-name\n\t */\n\tremoveNamedItem: function (localName) {\n\t\tvar attr = this.getNamedItem(localName);\n\t\tif (!attr) {\n\t\t\tthrow new DOMException(DOMException.NOT_FOUND_ERR, localName);\n\t\t}\n\t\t_removeNamedNode(this._ownerElement, this, attr);\n\t\treturn attr;\n\t},\n\n\t/**\n\t * Removes an attribute specified by the namespace and local name.\n\t *\n\t * @param {string | null} namespaceURI\n\t * The namespace URI of the attribute to be removed.\n\t * @param {string} localName\n\t * The local name of the attribute to be removed.\n\t * @returns {Attr}\n\t * The attribute node that was removed.\n\t * @throws {DOMException}\n\t * With code:\n\t * - {@link DOMException.NOT_FOUND_ERR} if no attribute with the given namespace URI and local\n\t * name is found.\n\t * @see https://dom.spec.whatwg.org/#dom-namednodemap-removenameditemns\n\t * @see https://dom.spec.whatwg.org/#concept-element-attributes-remove-by-namespace\n\t */\n\tremoveNamedItemNS: function (namespaceURI, localName) {\n\t\tvar attr = this.getNamedItemNS(namespaceURI, localName);\n\t\tif (!attr) {\n\t\t\tthrow new DOMException(DOMException.NOT_FOUND_ERR, namespaceURI ? namespaceURI + ' : ' + localName : localName);\n\t\t}\n\t\t_removeNamedNode(this._ownerElement, this, attr);\n\t\treturn attr;\n\t},\n\n\t/**\n\t * Get an attribute by namespace and local name.\n\t *\n\t * @param {string | null} namespaceURI\n\t * The namespace URI of the attribute.\n\t * @param {string} localName\n\t * The local name of the attribute.\n\t * @returns {Attr | null}\n\t * The attribute with the given namespace URI and local name, or null if no such attribute\n\t * exists.\n\t * @see https://dom.spec.whatwg.org/#concept-element-attributes-get-by-namespace\n\t */\n\tgetNamedItemNS: function (namespaceURI, localName) {\n\t\tif (!namespaceURI) {\n\t\t\tnamespaceURI = null;\n\t\t}\n\t\tvar i = 0;\n\t\twhile (i < this.length) {\n\t\t\tvar node = this[i];\n\t\t\tif (node.localName === localName && node.namespaceURI === namespaceURI) {\n\t\t\t\treturn node;\n\t\t\t}\n\t\t\ti++;\n\t\t}\n\t\treturn null;\n\t},\n};\nNamedNodeMap.prototype[Symbol.iterator] = function () {\n\tvar me = this;\n\tvar index = 0;\n\n\treturn {\n\t\tnext: function () {\n\t\t\tif (index < me.length) {\n\t\t\t\treturn {\n\t\t\t\t\tvalue: me[index++],\n\t\t\t\t\tdone: false,\n\t\t\t\t};\n\t\t\t} else {\n\t\t\t\treturn {\n\t\t\t\t\tdone: true,\n\t\t\t\t};\n\t\t\t}\n\t\t},\n\t\treturn: function () {\n\t\t\treturn {\n\t\t\t\tdone: true,\n\t\t\t};\n\t\t},\n\t};\n};\n\n/**\n * The DOMImplementation interface provides a number of methods for performing operations that\n * are independent of any particular instance of the document object model.\n *\n * The DOMImplementation interface represents an object providing methods which are not\n * dependent on any particular document.\n * Such an object is returned by the `Document.implementation` property.\n *\n * **The individual methods describe the differences compared to the specs**.\n *\n * @class DOMImplementation\n * @see https://developer.mozilla.org/en-US/docs/Web/API/DOMImplementation MDN\n * @see https://www.w3.org/TR/REC-DOM-Level-1/level-one-core.html#ID-102161490 DOM Level 1 Core\n * (Initial)\n * @see https://www.w3.org/TR/DOM-Level-2-Core/core.html#ID-102161490 DOM Level 2 Core\n * @see https://www.w3.org/TR/DOM-Level-3-Core/core.html#ID-102161490 DOM Level 3 Core\n * @see https://dom.spec.whatwg.org/#domimplementation DOM Living Standard\n * @constructs DOMImplementation\n */\nfunction DOMImplementation() {}\n\nDOMImplementation.prototype = {\n\t/**\n\t * Test if the DOM implementation implements a specific feature and version, as specified in\n\t * {@link https://www.w3.org/TR/DOM-Level-3-Core/core.html#DOMFeatures DOM Features}.\n\t *\n\t * The DOMImplementation.hasFeature() method returns a Boolean flag indicating if a given\n\t * feature is supported. The different implementations fairly diverged in what kind of\n\t * features were reported. The latest version of the spec settled to force this method to\n\t * always return true, where the functionality was accurate and in use.\n\t *\n\t * @deprecated\n\t * It is deprecated and modern browsers return true in all cases.\n\t * @function DOMImplementation#hasFeature\n\t * @param {string} feature\n\t * The name of the feature to test.\n\t * @param {string} [version]\n\t * This is the version number of the feature to test.\n\t * @returns {boolean}\n\t * Always returns true.\n\t * @see https://developer.mozilla.org/en-US/docs/Web/API/DOMImplementation/hasFeature MDN\n\t * @see https://www.w3.org/TR/REC-DOM-Level-1/level-one-core.html#ID-5CED94D7 DOM Level 1 Core\n\t * @see https://dom.spec.whatwg.org/#dom-domimplementation-hasfeature DOM Living Standard\n\t * @see https://www.w3.org/TR/DOM-Level-3-Core/core.html#ID-5CED94D7 DOM Level 3 Core\n\t */\n\thasFeature: function (feature, version) {\n\t\treturn true;\n\t},\n\t/**\n\t * Creates a DOM Document object of the specified type with its document element. Note that\n\t * based on the {@link DocumentType}\n\t * given to create the document, the implementation may instantiate specialized\n\t * {@link Document} objects that support additional features than the \"Core\", such as \"HTML\"\n\t * {@link https://www.w3.org/TR/DOM-Level-3-Core/references.html#DOM2HTML DOM Level 2 HTML}.\n\t * On the other hand, setting the {@link DocumentType} after the document was created makes\n\t * this very unlikely to happen. Alternatively, specialized {@link Document} creation methods,\n\t * such as createHTMLDocument\n\t * {@link https://www.w3.org/TR/DOM-Level-3-Core/references.html#DOM2HTML DOM Level 2 HTML},\n\t * can be used to obtain specific types of {@link Document} objects.\n\t *\n\t * __It behaves slightly different from the description in the living standard__:\n\t * - There is no interface/class `XMLDocument`, it returns a `Document`\n\t * instance (with it's `type` set to `'xml'`).\n\t * - `encoding`, `mode`, `origin`, `url` fields are currently not declared.\n\t *\n\t * @function DOMImplementation.createDocument\n\t * @param {string | null} namespaceURI\n\t * The\n\t * {@link https://www.w3.org/TR/DOM-Level-3-Core/glossary.html#dt-namespaceURI namespace URI}\n\t * of the document element to create or null.\n\t * @param {string | null} qualifiedName\n\t * The\n\t * {@link https://www.w3.org/TR/DOM-Level-3-Core/glossary.html#dt-qualifiedname qualified name}\n\t * of the document element to be created or null.\n\t * @param {DocumentType | null} [doctype=null]\n\t * The type of document to be created or null. When doctype is not null, its\n\t * {@link Node#ownerDocument} attribute is set to the document being created. Default is\n\t * `null`\n\t * @returns {Document}\n\t * A new {@link Document} object with its document element. If the NamespaceURI,\n\t * qualifiedName, and doctype are null, the returned {@link Document} is empty with no\n\t * document element.\n\t * @throws {DOMException}\n\t * With code:\n\t *\n\t * - `INVALID_CHARACTER_ERR`: Raised if the specified qualified name is not an XML name\n\t * according to {@link https://www.w3.org/TR/DOM-Level-3-Core/references.html#XML XML 1.0}.\n\t * - `NAMESPACE_ERR`: Raised if the qualifiedName is malformed, if the qualifiedName has a\n\t * prefix and the namespaceURI is null, or if the qualifiedName is null and the namespaceURI\n\t * is different from null, or if the qualifiedName has a prefix that is \"xml\" and the\n\t * namespaceURI is different from \"{@link http://www.w3.org/XML/1998/namespace}\"\n\t * {@link https://www.w3.org/TR/DOM-Level-3-Core/references.html#Namespaces XML Namespaces},\n\t * or if the DOM implementation does not support the \"XML\" feature but a non-null namespace\n\t * URI was provided, since namespaces were defined by XML.\n\t * - `WRONG_DOCUMENT_ERR`: Raised if doctype has already been used with a different document\n\t * or was created from a different implementation.\n\t * - `NOT_SUPPORTED_ERR`: May be raised if the implementation does not support the feature\n\t * \"XML\" and the language exposed through the Document does not support XML Namespaces (such\n\t * as {@link https://www.w3.org/TR/DOM-Level-3-Core/references.html#HTML40 HTML 4.01}).\n\t * @since DOM Level 2.\n\t * @see {@link #createHTMLDocument}\n\t * @see https://developer.mozilla.org/en-US/docs/Web/API/DOMImplementation/createDocument MDN\n\t * @see https://dom.spec.whatwg.org/#dom-domimplementation-createdocument DOM Living Standard\n\t * @see https://www.w3.org/TR/DOM-Level-3-Core/core.html#Level-2-Core-DOM-createDocument DOM\n\t * Level 3 Core\n\t * @see https://www.w3.org/TR/DOM-Level-2-Core/core.html#Level-2-Core-DOM-createDocument DOM\n\t * Level 2 Core (initial)\n\t */\n\tcreateDocument: function (namespaceURI, qualifiedName, doctype) {\n\t\tvar contentType = MIME_TYPE.XML_APPLICATION;\n\t\tif (namespaceURI === NAMESPACE.HTML) {\n\t\t\tcontentType = MIME_TYPE.XML_XHTML_APPLICATION;\n\t\t} else if (namespaceURI === NAMESPACE.SVG) {\n\t\t\tcontentType = MIME_TYPE.XML_SVG_IMAGE;\n\t\t}\n\t\tvar doc = new Document(PDC, { contentType: contentType });\n\t\tdoc.implementation = this;\n\t\tdoc.childNodes = new NodeList();\n\t\tdoc.doctype = doctype || null;\n\t\tif (doctype) {\n\t\t\tdoc.appendChild(doctype);\n\t\t}\n\t\tif (qualifiedName) {\n\t\t\tvar root = doc.createElementNS(namespaceURI, qualifiedName);\n\t\t\tdoc.appendChild(root);\n\t\t}\n\t\treturn doc;\n\t},\n\t/**\n\t * Creates an empty DocumentType node. Entity declarations and notations are not made\n\t * available. Entity reference expansions and default attribute additions do not occur.\n\t *\n\t * **This behavior is slightly different from the one in the specs**:\n\t * - `encoding`, `mode`, `origin`, `url` fields are currently not declared.\n\t * - `publicId` and `systemId` contain the raw data including any possible quotes,\n\t * so they can always be serialized back to the original value\n\t * - `internalSubset` contains the raw string between `[` and `]` if present,\n\t * but is not parsed or validated in any form.\n\t *\n\t * @function DOMImplementation#createDocumentType\n\t * @param {string} qualifiedName\n\t * The {@link https://www.w3.org/TR/DOM-Level-3-Core/glossary.html#dt-qualifiedname qualified\n\t * name} of the document type to be created.\n\t * @param {string} [publicId]\n\t * The external subset public identifier. Stored verbatim including surrounding quotes.\n\t * When serialized with `requireWellFormed: true`, the serializer throws `InvalidStateError`\n\t * if the value is non-empty and does not match the XML `PubidLiteral` production\n\t * (W3C DOM Parsing §3.2.1.3; XML 1.0 production [12]). Creation-time validation is not\n\t * enforced — deferred to a future breaking release.\n\t * @param {string} [systemId]\n\t * The external subset system identifier. Stored verbatim including surrounding quotes.\n\t * When serialized with `requireWellFormed: true`, the serializer throws `InvalidStateError`\n\t * if the value is non-empty and does not match the XML `SystemLiteral` production\n\t * (W3C DOM Parsing §3.2.1.3; XML 1.0 production [11]). Creation-time validation is not\n\t * enforced — deferred to a future breaking release.\n\t * @param {string} [internalSubset]\n\t * The internal subset or an empty string if it is not present. Stored verbatim.\n\t * When serialized with `requireWellFormed: true`, the serializer throws `InvalidStateError`\n\t * if the value contains `\"]>\"`. Creation-time validation is not enforced.\n\t * @returns {DocumentType}\n\t * A new {@link DocumentType} node with {@link Node#ownerDocument} set to null.\n\t * @throws {DOMException}\n\t * With code:\n\t *\n\t * - `INVALID_CHARACTER_ERR`: Raised if the specified qualified name is not an XML name\n\t * according to {@link https://www.w3.org/TR/DOM-Level-3-Core/references.html#XML XML 1.0}.\n\t * - `NAMESPACE_ERR`: Raised if the qualifiedName is malformed.\n\t * - `NOT_SUPPORTED_ERR`: May be raised if the implementation does not support the feature\n\t * \"XML\" and the language exposed through the Document does not support XML Namespaces (such\n\t * as {@link https://www.w3.org/TR/DOM-Level-3-Core/references.html#HTML40 HTML 4.01}).\n\t * @since DOM Level 2.\n\t * @see https://developer.mozilla.org/en-US/docs/Web/API/DOMImplementation/createDocumentType\n\t * MDN\n\t * @see https://dom.spec.whatwg.org/#dom-domimplementation-createdocumenttype DOM Living\n\t * Standard\n\t * @see https://www.w3.org/TR/DOM-Level-3-Core/core.html#Level-3-Core-DOM-createDocType DOM\n\t * Level 3 Core\n\t * @see https://www.w3.org/TR/DOM-Level-2-Core/core.html#Level-2-Core-DOM-createDocType DOM\n\t * Level 2 Core\n\t * @see https://github.com/xmldom/xmldom/blob/master/CHANGELOG.md#050\n\t * @see https://www.w3.org/TR/DOM-Level-2-Core/#core-ID-Core-DocType-internalSubset\n\t * @prettierignore\n\t */\n\tcreateDocumentType: function (qualifiedName, publicId, systemId, internalSubset) {\n\t\tvalidateQualifiedName(qualifiedName);\n\t\tvar node = new DocumentType(PDC);\n\t\tnode.name = qualifiedName;\n\t\tnode.nodeName = qualifiedName;\n\t\tnode.publicId = publicId || '';\n\t\tnode.systemId = systemId || '';\n\t\tnode.internalSubset = internalSubset || '';\n\t\tnode.childNodes = new NodeList();\n\n\t\treturn node;\n\t},\n\t/**\n\t * Returns an HTML document, that might already have a basic DOM structure.\n\t *\n\t * __It behaves slightly different from the description in the living standard__:\n\t * - If the first argument is `false` no initial nodes are added (steps 3-7 in the specs are\n\t * omitted)\n\t * - `encoding`, `mode`, `origin`, `url` fields are currently not declared.\n\t *\n\t * @param {string | false} [title]\n\t * A string containing the title to give the new HTML document.\n\t * @returns {Document}\n\t * The HTML document.\n\t * @since WHATWG Living Standard.\n\t * @see {@link #createDocument}\n\t * @see https://dom.spec.whatwg.org/#dom-domimplementation-createhtmldocument\n\t * @see https://dom.spec.whatwg.org/#html-document\n\t */\n\tcreateHTMLDocument: function (title) {\n\t\tvar doc = new Document(PDC, { contentType: MIME_TYPE.HTML });\n\t\tdoc.implementation = this;\n\t\tdoc.childNodes = new NodeList();\n\t\tif (title !== false) {\n\t\t\tdoc.doctype = this.createDocumentType('html');\n\t\t\tdoc.doctype.ownerDocument = doc;\n\t\t\tdoc.appendChild(doc.doctype);\n\t\t\tvar htmlNode = doc.createElement('html');\n\t\t\tdoc.appendChild(htmlNode);\n\t\t\tvar headNode = doc.createElement('head');\n\t\t\thtmlNode.appendChild(headNode);\n\t\t\tif (typeof title === 'string') {\n\t\t\t\tvar titleNode = doc.createElement('title');\n\t\t\t\ttitleNode.appendChild(doc.createTextNode(title));\n\t\t\t\theadNode.appendChild(titleNode);\n\t\t\t}\n\t\t\thtmlNode.appendChild(doc.createElement('body'));\n\t\t}\n\t\treturn doc;\n\t},\n};\n\n/**\n * The DOM Node interface is an abstract base class upon which many other DOM API objects are\n * based, thus letting those object types to be used similarly and often interchangeably. As an\n * abstract class, there is no such thing as a plain Node object. All objects that implement\n * Node functionality are based on one of its subclasses. Most notable are Document, Element,\n * and DocumentFragment.\n *\n * In addition, every kind of DOM node is represented by an interface based on Node. These\n * include Attr, CharacterData (which Text, Comment, CDATASection and ProcessingInstruction are\n * all based on), and DocumentType.\n *\n * In some cases, a particular feature of the base Node interface may not apply to one of its\n * child interfaces; in that case, the inheriting node may return null or throw an exception,\n * depending on circumstances. For example, attempting to add children to a node type that\n * cannot have children will throw an exception.\n *\n * **This behavior is slightly different from the in the specs**:\n * - unimplemented interfaces: `EventTarget`\n *\n * @class\n * @abstract\n * @param {Symbol} symbol\n * @see http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/core.html#ID-1950641247\n * @see https://dom.spec.whatwg.org/#node\n * @prettierignore\n */\nfunction Node(symbol) {\n\tcheckSymbol(symbol);\n}\n\nNode.prototype = {\n\t/**\n\t * The first child of this node.\n\t *\n\t * @type {Node | null}\n\t */\n\tfirstChild: null,\n\t/**\n\t * The last child of this node.\n\t *\n\t * @type {Node | null}\n\t */\n\tlastChild: null,\n\t/**\n\t * The previous sibling of this node.\n\t *\n\t * @type {Node | null}\n\t */\n\tpreviousSibling: null,\n\t/**\n\t * The next sibling of this node.\n\t *\n\t * @type {Node | null}\n\t */\n\tnextSibling: null,\n\t/**\n\t * The parent node of this node.\n\t *\n\t * @type {Node | null}\n\t */\n\tparentNode: null,\n\t/**\n\t * The parent element of this node.\n\t *\n\t * @type {Element | null}\n\t */\n\tget parentElement() {\n\t\treturn this.parentNode && this.parentNode.nodeType === this.ELEMENT_NODE ? this.parentNode : null;\n\t},\n\t/**\n\t * The child nodes of this node.\n\t *\n\t * @type {NodeList}\n\t */\n\tchildNodes: null,\n\t/**\n\t * The document object associated with this node.\n\t *\n\t * @type {Document | null}\n\t */\n\townerDocument: null,\n\t/**\n\t * The value of this node.\n\t *\n\t * @type {string | null}\n\t */\n\tnodeValue: null,\n\t/**\n\t * The namespace URI of this node.\n\t *\n\t * @type {string | null}\n\t */\n\tnamespaceURI: null,\n\t/**\n\t * The prefix of the namespace for this node.\n\t *\n\t * @type {string | null}\n\t */\n\tprefix: null,\n\t/**\n\t * The local part of the qualified name of this node.\n\t *\n\t * @type {string | null}\n\t */\n\tlocalName: null,\n\t/**\n\t * The baseURI is currently always `about:blank`,\n\t * since that's what happens when you create a document from scratch.\n\t *\n\t * @type {'about:blank'}\n\t */\n\tbaseURI: 'about:blank',\n\t/**\n\t * Is true if this node is part of a document.\n\t *\n\t * @type {boolean}\n\t */\n\tget isConnected() {\n\t\tvar rootNode = this.getRootNode();\n\t\treturn rootNode && rootNode.nodeType === rootNode.DOCUMENT_NODE;\n\t},\n\t/**\n\t * Checks whether `other` is an inclusive descendant of this node.\n\t *\n\t * @param {Node | null | undefined} other\n\t * The node to check.\n\t * @returns {boolean}\n\t * True if `other` is an inclusive descendant of this node; false otherwise.\n\t * @see https://dom.spec.whatwg.org/#dom-node-contains\n\t */\n\tcontains: function (other) {\n\t\tif (!other) return false;\n\t\tvar parent = other;\n\t\tdo {\n\t\t\tif (this === parent) return true;\n\t\t\tparent = parent.parentNode;\n\t\t} while (parent);\n\t\treturn false;\n\t},\n\t/**\n\t * @typedef GetRootNodeOptions\n\t * @property {boolean} [composed=false]\n\t */\n\t/**\n\t * Searches for the root node of this node.\n\t *\n\t * **This behavior is slightly different from the in the specs**:\n\t * - ignores `options.composed`, since `ShadowRoot`s are unsupported, always returns root.\n\t *\n\t * @param {GetRootNodeOptions} [options]\n\t * @returns {Node}\n\t * Root node.\n\t * @see https://dom.spec.whatwg.org/#dom-node-getrootnode\n\t * @see https://dom.spec.whatwg.org/#concept-shadow-including-root\n\t */\n\tgetRootNode: function (options) {\n\t\tvar parent = this;\n\t\tdo {\n\t\t\tif (!parent.parentNode) {\n\t\t\t\treturn parent;\n\t\t\t}\n\t\t\tparent = parent.parentNode;\n\t\t} while (parent);\n\t},\n\t/**\n\t * Checks whether the given node is equal to this node.\n\t *\n\t * Two nodes are equal when they have the same type, defining characteristics (for the type),\n\t * and the same childNodes. The comparison is iterative to avoid stack overflows on\n\t * deeply-nested trees. Attribute nodes of each Element pair are also pushed onto the stack\n\t * and compared the same way.\n\t *\n\t * @param {Node} [otherNode]\n\t * @returns {boolean}\n\t * @see https://dom.spec.whatwg.org/#concept-node-equals\n\t * @see ../docs/walk-dom.md.\n\t */\n\tisEqualNode: function (otherNode) {\n\t\tif (!otherNode) return false;\n\n\t\t// Use an explicit {node, other} pair stack to avoid call-stack overflow on deep trees.\n\t\t// walkDOM cannot be used here — parallel two-tree traversal requires pairing\n\t\t// corresponding nodes at each step across both trees simultaneously.\n\t\tvar stack = [{ node: this, other: otherNode }];\n\t\twhile (stack.length > 0) {\n\t\t\tvar pair = stack.pop();\n\t\t\tvar node = pair.node;\n\t\t\tvar other = pair.other;\n\n\t\t\tif (node.nodeType !== other.nodeType) return false;\n\n\t\t\tswitch (node.nodeType) {\n\t\t\t\tcase node.DOCUMENT_TYPE_NODE:\n\t\t\t\t\tif (node.name !== other.name) return false;\n\t\t\t\t\tif (node.publicId !== other.publicId) return false;\n\t\t\t\t\tif (node.systemId !== other.systemId) return false;\n\t\t\t\t\tbreak;\n\t\t\t\tcase node.ELEMENT_NODE:\n\t\t\t\t\tif (node.namespaceURI !== other.namespaceURI) return false;\n\t\t\t\t\tif (node.prefix !== other.prefix) return false;\n\t\t\t\t\tif (node.localName !== other.localName) return false;\n\t\t\t\t\tif (node.attributes.length !== other.attributes.length) return false;\n\t\t\t\t\tfor (var i = 0; i < node.attributes.length; i++) {\n\t\t\t\t\t\tvar attr = node.attributes.item(i);\n\t\t\t\t\t\tvar otherAttr = other.getAttributeNodeNS(attr.namespaceURI, attr.localName);\n\t\t\t\t\t\tif (!otherAttr) return false;\n\t\t\t\t\t\tstack.push({ node: attr, other: otherAttr });\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tcase node.ATTRIBUTE_NODE:\n\t\t\t\t\tif (node.namespaceURI !== other.namespaceURI) return false;\n\t\t\t\t\tif (node.localName !== other.localName) return false;\n\t\t\t\t\tif (node.value !== other.value) return false;\n\t\t\t\t\tbreak;\n\t\t\t\tcase node.PROCESSING_INSTRUCTION_NODE:\n\t\t\t\t\tif (node.target !== other.target || node.data !== other.data) return false;\n\t\t\t\t\tbreak;\n\t\t\t\tcase node.TEXT_NODE:\n\t\t\t\tcase node.CDATA_SECTION_NODE:\n\t\t\t\tcase node.COMMENT_NODE:\n\t\t\t\t\tif (node.data !== other.data) return false;\n\t\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tif (node.childNodes.length !== other.childNodes.length) return false;\n\n\t\t\t// Push children in reverse order so index 0 is processed first (LIFO).\n\t\t\tfor (var i = node.childNodes.length - 1; i >= 0; i--) {\n\t\t\t\tstack.push({ node: node.childNodes[i], other: other.childNodes[i] });\n\t\t\t}\n\t\t}\n\n\t\treturn true;\n\t},\n\t/**\n\t * Checks whether or not the given node is this node.\n\t *\n\t * @param {Node} [otherNode]\n\t */\n\tisSameNode: function (otherNode) {\n\t\treturn this === otherNode;\n\t},\n\t/**\n\t * Inserts a node before a reference node as a child of this node.\n\t *\n\t * @param {Node} newChild\n\t * The new child node to be inserted.\n\t * @param {Node | null} refChild\n\t * The reference node before which newChild will be inserted.\n\t * @returns {Node}\n\t * The new child node successfully inserted.\n\t * @throws {DOMException}\n\t * Throws a DOMException if inserting the node would result in a DOM tree that is not\n\t * well-formed, or if `child` is provided but is not a child of `parent`.\n\t * See {@link _insertBefore} for more details.\n\t * @since Modified in DOM L2\n\t */\n\tinsertBefore: function (newChild, refChild) {\n\t\treturn _insertBefore(this, newChild, refChild);\n\t},\n\t/**\n\t * Replaces an old child node with a new child node within this node.\n\t *\n\t * @param {Node} newChild\n\t * The new node that is to replace the old node.\n\t * If it already exists in the DOM, it is removed from its original position.\n\t * @param {Node} oldChild\n\t * The existing child node to be replaced.\n\t * @returns {Node}\n\t * Returns the replaced child node.\n\t * @throws {DOMException}\n\t * Throws a DOMException if replacing the node would result in a DOM tree that is not\n\t * well-formed, or if `oldChild` is not a child of `this`.\n\t * This can also occur if the pre-replacement validity assertion fails.\n\t * See {@link _insertBefore}, {@link Node.removeChild}, and\n\t * {@link assertPreReplacementValidityInDocument} for more details.\n\t * @see https://dom.spec.whatwg.org/#concept-node-replace\n\t */\n\treplaceChild: function (newChild, oldChild) {\n\t\t_insertBefore(this, newChild, oldChild, assertPreReplacementValidityInDocument);\n\t\tif (oldChild) {\n\t\t\tthis.removeChild(oldChild);\n\t\t}\n\t},\n\t/**\n\t * Removes an existing child node from this node.\n\t *\n\t * @param {Node} oldChild\n\t * The child node to be removed.\n\t * @returns {Node}\n\t * Returns the removed child node.\n\t * @throws {DOMException}\n\t * Throws a DOMException if `oldChild` is not a child of `this`.\n\t * See {@link _removeChild} for more details.\n\t */\n\tremoveChild: function (oldChild) {\n\t\treturn _removeChild(this, oldChild);\n\t},\n\t/**\n\t * Appends a child node to this node.\n\t *\n\t * @param {Node} newChild\n\t * The child node to be appended to this node.\n\t * If it already exists in the DOM, it is removed from its original position.\n\t * @returns {Node}\n\t * Returns the appended child node.\n\t * @throws {DOMException}\n\t * Throws a DOMException if appending the node would result in a DOM tree that is not\n\t * well-formed, or if `newChild` is not a valid Node.\n\t * See {@link insertBefore} for more details.\n\t */\n\tappendChild: function (newChild) {\n\t\treturn this.insertBefore(newChild, null);\n\t},\n\t/**\n\t * Determines whether this node has any child nodes.\n\t *\n\t * @returns {boolean}\n\t * Returns true if this node has any child nodes, and false otherwise.\n\t */\n\thasChildNodes: function () {\n\t\treturn this.firstChild != null;\n\t},\n\t/**\n\t * Creates a copy of the calling node.\n\t *\n\t * @param {boolean} deep\n\t * If true, the contents of the node are recursively copied.\n\t * If false, only the node itself (and its attributes, if it is an element) are copied.\n\t * @returns {Node}\n\t * Returns the newly created copy of the node.\n\t * @throws {DOMException}\n\t * May throw a DOMException if operations within {@link Element#setAttributeNode} or\n\t * {@link Node#appendChild} (which are potentially invoked in this method) do not meet their\n\t * specific constraints.\n\t * @see {@link cloneNode}\n\t */\n\tcloneNode: function (deep) {\n\t\treturn cloneNode(this.ownerDocument || this, this, deep);\n\t},\n\t/**\n\t * Puts the specified node and all of its subtree into a \"normalized\" form. In a normalized\n\t * subtree, no text nodes in the subtree are empty and there are no adjacent text nodes.\n\t *\n\t * Specifically, this method merges any adjacent text nodes (i.e., nodes for which `nodeType`\n\t * is `TEXT_NODE`) into a single node with the combined data. It also removes any empty text\n\t * nodes.\n\t *\n\t * This method iterativly traverses all child nodes to normalize all descendent nodes within\n\t * the subtree.\n\t *\n\t * @throws {DOMException}\n\t * May throw a DOMException if operations within removeChild or appendData (which are\n\t * potentially invoked in this method) do not meet their specific constraints.\n\t * @since Modified in DOM Level 2\n\t * @see {@link Node.removeChild}\n\t * @see {@link CharacterData.appendData}\n\t * @see ../docs/walk-dom.md.\n\t */\n\tnormalize: function () {\n\t\twalkDOM(this, null, {\n\t\t\tenter: function (node) {\n\t\t\t\t// Merge adjacent text children of node before walkDOM schedules them.\n\t\t\t\t// walkDOM reads lastChild/previousSibling after enter returns, so the\n\t\t\t\t// surviving post-merge children are what it descends into.\n\t\t\t\tvar child = node.firstChild;\n\t\t\t\twhile (child) {\n\t\t\t\t\tvar next = child.nextSibling;\n\t\t\t\t\tif (next !== null && next.nodeType === TEXT_NODE && child.nodeType === TEXT_NODE) {\n\t\t\t\t\t\tnode.removeChild(next);\n\t\t\t\t\t\tchild.appendData(next.data);\n\t\t\t\t\t\t// Do not advance child: re-check new nextSibling for another text run\n\t\t\t\t\t} else {\n\t\t\t\t\t\tchild = next;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn true; // descend into surviving children\n\t\t\t},\n\t\t});\n\t},\n\t/**\n\t * Checks whether the DOM implementation implements a specific feature and its version.\n\t *\n\t * @deprecated\n\t * Since `DOMImplementation.hasFeature` is deprecated and always returns true.\n\t * @param {string} feature\n\t * The package name of the feature to test. This is the same name that can be passed to the\n\t * method `hasFeature` on `DOMImplementation`.\n\t * @param {string} version\n\t * This is the version number of the package name to test.\n\t * @returns {boolean}\n\t * Returns true in all cases in the current implementation.\n\t * @since Introduced in DOM Level 2\n\t * @see {@link DOMImplementation.hasFeature}\n\t */\n\tisSupported: function (feature, version) {\n\t\treturn this.ownerDocument.implementation.hasFeature(feature, version);\n\t},\n\t/**\n\t * Look up the prefix associated to the given namespace URI, starting from this node.\n\t * **The default namespace declarations are ignored by this method.**\n\t * See Namespace Prefix Lookup for details on the algorithm used by this method.\n\t *\n\t * **This behavior is different from the in the specs**:\n\t * - no node type specific handling\n\t * - uses the internal attribute _nsMap for resolving namespaces that is updated when changing attributes\n\t *\n\t * @param {string | null} namespaceURI\n\t * The namespace URI for which to find the associated prefix.\n\t * @returns {string | null}\n\t * The associated prefix, if found; otherwise, null.\n\t * @see https://www.w3.org/TR/DOM-Level-3-Core/core.html#Node3-lookupNamespacePrefix\n\t * @see https://www.w3.org/TR/DOM-Level-3-Core/namespaces-algorithms.html#lookupNamespacePrefixAlgo\n\t * @see https://dom.spec.whatwg.org/#dom-node-lookupprefix\n\t * @see https://github.com/xmldom/xmldom/issues/322\n\t * @prettierignore\n\t */\n\tlookupPrefix: function (namespaceURI) {\n\t\tvar el = this;\n\t\twhile (el) {\n\t\t\tvar map = el._nsMap;\n\t\t\t//console.dir(map)\n\t\t\tif (map) {\n\t\t\t\tfor (var n in map) {\n\t\t\t\t\tif (hasOwn(map, n) && map[n] === namespaceURI) {\n\t\t\t\t\t\treturn n;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tel = el.nodeType == ATTRIBUTE_NODE ? el.ownerDocument : el.parentNode;\n\t\t}\n\t\treturn null;\n\t},\n\t/**\n\t * This function is used to look up the namespace URI associated with the given prefix,\n\t * starting from this node.\n\t *\n\t * **This behavior is different from the in the specs**:\n\t * - no node type specific handling\n\t * - uses the internal attribute _nsMap for resolving namespaces that is updated when changing attributes\n\t *\n\t * @param {string | null} prefix\n\t * The prefix for which to find the associated namespace URI.\n\t * @returns {string | null}\n\t * The associated namespace URI, if found; otherwise, null.\n\t * @since DOM Level 3\n\t * @see https://dom.spec.whatwg.org/#dom-node-lookupnamespaceuri\n\t * @see https://www.w3.org/TR/DOM-Level-3-Core/core.html#Node3-lookupNamespaceURI\n\t * @prettierignore\n\t */\n\tlookupNamespaceURI: function (prefix) {\n\t\tvar el = this;\n\t\twhile (el) {\n\t\t\tvar map = el._nsMap;\n\t\t\t//console.dir(map)\n\t\t\tif (map) {\n\t\t\t\tif (hasOwn(map, prefix)) {\n\t\t\t\t\treturn map[prefix];\n\t\t\t\t}\n\t\t\t}\n\t\t\tel = el.nodeType == ATTRIBUTE_NODE ? el.ownerDocument : el.parentNode;\n\t\t}\n\t\treturn null;\n\t},\n\t/**\n\t * Determines whether the given namespace URI is the default namespace.\n\t *\n\t * The function works by looking up the prefix associated with the given namespace URI. If no\n\t * prefix is found (i.e., the namespace URI is not registered in the namespace map of this\n\t * node or any of its ancestors), it returns `true`, implying the namespace URI is considered\n\t * the default.\n\t *\n\t * **This behavior is different from the in the specs**:\n\t * - no node type specific handling\n\t * - uses the internal attribute _nsMap for resolving namespaces that is updated when changing attributes\n\t *\n\t * @param {string | null} namespaceURI\n\t * The namespace URI to be checked.\n\t * @returns {boolean}\n\t * Returns true if the given namespace URI is the default namespace, false otherwise.\n\t * @since DOM Level 3\n\t * @see https://www.w3.org/TR/DOM-Level-3-Core/core.html#Node3-isDefaultNamespace\n\t * @see https://dom.spec.whatwg.org/#dom-node-isdefaultnamespace\n\t * @prettierignore\n\t */\n\tisDefaultNamespace: function (namespaceURI) {\n\t\tvar prefix = this.lookupPrefix(namespaceURI);\n\t\treturn prefix == null;\n\t},\n\t/**\n\t * Compares the reference node with a node with regard to their position in the document and\n\t * according to the document order.\n\t *\n\t * @param {Node} other\n\t * The node to compare the reference node to.\n\t * @returns {number}\n\t * Returns how the node is positioned relatively to the reference node according to the\n\t * bitmask. 0 if reference node and given node are the same.\n\t * @since DOM Level 3\n\t * @see https://www.w3.org/TR/2004/REC-DOM-Level-3-Core-20040407/core.html#Node3-compare\n\t * @see https://dom.spec.whatwg.org/#dom-node-comparedocumentposition\n\t */\n\tcompareDocumentPosition: function (other) {\n\t\tif (this === other) return 0;\n\t\tvar node1 = other;\n\t\tvar node2 = this;\n\t\tvar attr1 = null;\n\t\tvar attr2 = null;\n\t\tif (node1 instanceof Attr) {\n\t\t\tattr1 = node1;\n\t\t\tnode1 = attr1.ownerElement;\n\t\t}\n\t\tif (node2 instanceof Attr) {\n\t\t\tattr2 = node2;\n\t\t\tnode2 = attr2.ownerElement;\n\t\t\tif (attr1 && node1 && node2 === node1) {\n\t\t\t\tfor (var i = 0, attr; (attr = node2.attributes[i]); i++) {\n\t\t\t\t\tif (attr === attr1)\n\t\t\t\t\t\treturn DocumentPosition.DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC + DocumentPosition.DOCUMENT_POSITION_PRECEDING;\n\t\t\t\t\tif (attr === attr2)\n\t\t\t\t\t\treturn DocumentPosition.DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC + DocumentPosition.DOCUMENT_POSITION_FOLLOWING;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tif (!node1 || !node2 || node2.ownerDocument !== node1.ownerDocument) {\n\t\t\treturn (\n\t\t\t\tDocumentPosition.DOCUMENT_POSITION_DISCONNECTED +\n\t\t\t\tDocumentPosition.DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC +\n\t\t\t\t(docGUID(node2.ownerDocument) > docGUID(node1.ownerDocument)\n\t\t\t\t\t? DocumentPosition.DOCUMENT_POSITION_FOLLOWING\n\t\t\t\t\t: DocumentPosition.DOCUMENT_POSITION_PRECEDING)\n\t\t\t);\n\t\t}\n\t\tif (attr2 && node1 === node2) {\n\t\t\treturn DocumentPosition.DOCUMENT_POSITION_CONTAINS + DocumentPosition.DOCUMENT_POSITION_PRECEDING;\n\t\t}\n\t\tif (attr1 && node1 === node2) {\n\t\t\treturn DocumentPosition.DOCUMENT_POSITION_CONTAINED_BY + DocumentPosition.DOCUMENT_POSITION_FOLLOWING;\n\t\t}\n\n\t\tvar chain1 = [];\n\t\tvar ancestor1 = node1.parentNode;\n\t\twhile (ancestor1) {\n\t\t\tif (!attr2 && ancestor1 === node2) {\n\t\t\t\treturn DocumentPosition.DOCUMENT_POSITION_CONTAINED_BY + DocumentPosition.DOCUMENT_POSITION_FOLLOWING;\n\t\t\t}\n\t\t\tchain1.push(ancestor1);\n\t\t\tancestor1 = ancestor1.parentNode;\n\t\t}\n\t\tchain1.reverse();\n\n\t\tvar chain2 = [];\n\t\tvar ancestor2 = node2.parentNode;\n\t\twhile (ancestor2) {\n\t\t\tif (!attr1 && ancestor2 === node1) {\n\t\t\t\treturn DocumentPosition.DOCUMENT_POSITION_CONTAINS + DocumentPosition.DOCUMENT_POSITION_PRECEDING;\n\t\t\t}\n\t\t\tchain2.push(ancestor2);\n\t\t\tancestor2 = ancestor2.parentNode;\n\t\t}\n\t\tchain2.reverse();\n\n\t\tvar ca = commonAncestor(chain1, chain2);\n\t\tfor (var n in ca.childNodes) {\n\t\t\tvar child = ca.childNodes[n];\n\t\t\tif (child === node2) return DocumentPosition.DOCUMENT_POSITION_FOLLOWING;\n\t\t\tif (child === node1) return DocumentPosition.DOCUMENT_POSITION_PRECEDING;\n\t\t\tif (chain2.indexOf(child) >= 0) return DocumentPosition.DOCUMENT_POSITION_FOLLOWING;\n\t\t\tif (chain1.indexOf(child) >= 0) return DocumentPosition.DOCUMENT_POSITION_PRECEDING;\n\t\t}\n\t\treturn 0;\n\t},\n};\n\n/**\n * Encodes special XML characters to their corresponding entities.\n *\n * @param {string} c\n * The character to be encoded.\n * @returns {string}\n * The encoded character.\n * @private\n */\nfunction _xmlEncoder(c) {\n\treturn (\n\t\t(c == '<' && '&lt;') || (c == '>' && '&gt;') || (c == '&' && '&amp;') || (c == '\"' && '&quot;') || '&#' + c.charCodeAt() + ';'\n\t);\n}\n\ncopy(NodeType, Node);\ncopy(NodeType, Node.prototype);\ncopy(DocumentPosition, Node);\ncopy(DocumentPosition, Node.prototype);\n\n/**\n * Visits every node in the subtree rooted at `node` in depth-first pre-order.\n *\n * Delegates to {@link walkDOM} for traversal. The `callback` is called on each node;\n * if it returns a truthy value, traversal stops immediately.\n *\n * @param {Node} node\n * Root of the subtree to visit.\n * @param {function(Node): *} callback\n * Called for each node. A truthy return value stops traversal early.\n */\nfunction _visitNode(node, callback) {\n\twalkDOM(node, null, {\n\t\tenter: function (n) {\n\t\t\treturn callback(n) ? walkDOM.STOP : true;\n\t\t},\n\t});\n}\n\n/**\n * Depth-first pre/post-order DOM tree walker.\n *\n * Visits every node in the subtree rooted at `node`. For each node:\n *\n * 1. Calls `callbacks.enter(node, context)` before descending into the node's children. The\n * return value becomes the `context` passed to each child's `enter` call and to the matching\n * `exit` call.\n * 2. If `enter` returns `null` or `undefined`, the node's children are skipped;\n * sibling traversal continues normally.\n * 3. If `enter` returns `walkDOM.STOP`, the entire traversal is aborted immediately — no\n * further `enter` or `exit` calls are made.\n * 4. `lastChild` and `previousSibling` are read **after** `enter` returns, so `enter` may\n * safely modify the node's own child list before the walker descends. Modifying siblings of\n * the current node or any other part of the tree produces unpredictable results: nodes already\n * queued on the stack are visited regardless of DOM changes, and newly inserted nodes outside\n * the current child list are never visited.\n * 5. Calls `callbacks.exit(node, context)` (if provided) after all of a node's children have\n * been visited, passing the same `context` that `enter`\n * returned for that node.\n *\n * This implementation uses an explicit stack and does not recurse — it is safe on arbitrarily\n * deep trees.\n *\n * @param {Node} node\n * Root of the subtree to walk.\n * @param {*} context\n * Initial context value passed to the root node's `enter`.\n * @param {{ enter: function(Node, *): *, exit?: function(Node, *): void }} callbacks\n * @returns {void | walkDOM.STOP}\n * @see ../docs/walk-dom.md.\n */\nfunction walkDOM(node, context, callbacks) {\n\t// Each stack frame is {node, context, phase}:\n\t// walkDOM.ENTER — call enter, then push children\n\t// walkDOM.EXIT — call exit\n\tvar stack = [{ node: node, context: context, phase: walkDOM.ENTER }];\n\twhile (stack.length > 0) {\n\t\tvar frame = stack.pop();\n\t\tif (frame.phase === walkDOM.ENTER) {\n\t\t\tvar childContext = callbacks.enter(frame.node, frame.context);\n\t\t\tif (childContext === walkDOM.STOP) {\n\t\t\t\treturn walkDOM.STOP;\n\t\t\t}\n\t\t\t// Push exit frame before children so it fires after all children are processed (Last In First Out)\n\t\t\tstack.push({ node: frame.node, context: childContext, phase: walkDOM.EXIT });\n\t\t\tif (childContext === null || childContext === undefined) {\n\t\t\t\tcontinue; // skip children\n\t\t\t}\n\t\t\t// lastChild is read after enter returns, so enter may modify the child list.\n\t\t\tvar child = frame.node.lastChild;\n\t\t\t// Traverse from lastChild backwards so that pushing onto the stack\n\t\t\t// naturally yields firstChild on top (processed first).\n\t\t\twhile (child) {\n\t\t\t\tstack.push({ node: child, context: childContext, phase: walkDOM.ENTER });\n\t\t\t\tchild = child.previousSibling;\n\t\t\t}\n\t\t} else {\n\t\t\t// frame.phase === walkDOM.EXIT\n\t\t\tif (callbacks.exit) {\n\t\t\t\tcallbacks.exit(frame.node, frame.context);\n\t\t\t}\n\t\t}\n\t}\n}\n\n/**\n * Sentinel value returned from a `walkDOM` `enter` callback to abort the entire traversal\n * immediately.\n *\n * @type {symbol}\n */\nwalkDOM.STOP = Symbol('walkDOM.STOP');\n/**\n * Phase constant for a stack frame that has not yet been visited.\n * The `enter` callback is called and children are scheduled.\n *\n * @type {number}\n */\nwalkDOM.ENTER = 0;\n/**\n * Phase constant for a stack frame whose subtree has been fully visited.\n * The `exit` callback is called.\n *\n * @type {number}\n */\nwalkDOM.EXIT = 1;\n\n/**\n * @typedef DocumentOptions\n * @property {string} [contentType=MIME_TYPE.XML_APPLICATION]\n */\n/**\n * The Document interface describes the common properties and methods for any kind of document.\n *\n * It should usually be created using `new DOMImplementation().createDocument(...)`\n * or `new DOMImplementation().createHTMLDocument(...)`.\n *\n * The constructor is considered a private API and offers to initially set the `contentType`\n * property via it's options parameter.\n *\n * @class\n * @param {Symbol} symbol\n * @param {DocumentOptions} [options]\n * @augments Node\n * @private\n * @see https://developer.mozilla.org/en-US/docs/Web/API/Document\n * @see https://dom.spec.whatwg.org/#interface-document\n */\nfunction Document(symbol, options) {\n\tcheckSymbol(symbol);\n\n\tvar opt = options || {};\n\tthis.ownerDocument = this;\n\t/**\n\t * The mime type of the document is determined at creation time and can not be modified.\n\t *\n\t * @type {string}\n\t * @see https://dom.spec.whatwg.org/#concept-document-content-type\n\t * @see {@link DOMImplementation}\n\t * @see {@link MIME_TYPE}\n\t * @readonly\n\t */\n\tthis.contentType = opt.contentType || MIME_TYPE.XML_APPLICATION;\n\t/**\n\t * @type {'html' | 'xml'}\n\t * @see https://dom.spec.whatwg.org/#concept-document-type\n\t * @see {@link DOMImplementation}\n\t * @readonly\n\t */\n\tthis.type = isHTMLMimeType(this.contentType) ? 'html' : 'xml';\n}\n\n/**\n * Updates the namespace mapping of an element when a new attribute is added.\n *\n * @param {Document} doc\n * The document that the element belongs to.\n * @param {Element} el\n * The element to which the attribute is being added.\n * @param {Attr} newAttr\n * The new attribute being added.\n * @private\n */\nfunction _onAddAttribute(doc, el, newAttr) {\n\tdoc && doc._inc++;\n\tvar ns = newAttr.namespaceURI;\n\tif (ns === NAMESPACE.XMLNS) {\n\t\t//update namespace\n\t\tel._nsMap[newAttr.prefix ? newAttr.localName : ''] = newAttr.value;\n\t}\n}\n\n/**\n * Updates the namespace mapping of an element when an attribute is removed.\n *\n * @param {Document} doc\n * The document that the element belongs to.\n * @param {Element} el\n * The element from which the attribute is being removed.\n * @param {Attr} newAttr\n * The attribute being removed.\n * @param {boolean} remove\n * Indicates whether the attribute is to be removed.\n * @private\n */\nfunction _onRemoveAttribute(doc, el, newAttr, remove) {\n\tdoc && doc._inc++;\n\tvar ns = newAttr.namespaceURI;\n\tif (ns === NAMESPACE.XMLNS) {\n\t\t//update namespace\n\t\tdelete el._nsMap[newAttr.prefix ? newAttr.localName : ''];\n\t}\n}\n\n/**\n * Updates `parent.childNodes`, adjusting the indexed items and its `length`.\n * If `newChild` is provided and has no nextSibling, it will be appended.\n * Otherwise, it's assumed that an item has been removed or inserted,\n * and `parent.firstNode` and its `.nextSibling` to re-indexing all child nodes of `parent`.\n *\n * @param {Document} doc\n * The parent document of `el`.\n * @param {Node} parent\n * The parent node whose childNodes list needs to be updated.\n * @param {Node} [newChild]\n * The new child node to be appended. If not provided, the function assumes a node has been\n * removed.\n * @private\n */\nfunction _onUpdateChild(doc, parent, newChild) {\n\tif (doc && doc._inc) {\n\t\tdoc._inc++;\n\t\tvar childNodes = parent.childNodes;\n\t\t// assumes nextSibling and previousSibling were already configured upfront\n\t\tif (newChild && !newChild.nextSibling) {\n\t\t\t// if an item has been appended, we only need to update the last index and the length\n\t\t\tchildNodes[childNodes.length++] = newChild;\n\t\t} else {\n\t\t\t// otherwise we need to reindex all items,\n\t\t\t// which can take a while when processing nodes with a lot of children\n\t\t\tvar child = parent.firstChild;\n\t\t\tvar i = 0;\n\t\t\twhile (child) {\n\t\t\t\tchildNodes[i++] = child;\n\t\t\t\tchild = child.nextSibling;\n\t\t\t}\n\t\t\tchildNodes.length = i;\n\t\t\tdelete childNodes[childNodes.length];\n\t\t}\n\t}\n}\n\n/**\n * Removes the connections between `parentNode` and `child`\n * and any existing `child.previousSibling` or `child.nextSibling`.\n *\n * @param {Node} parentNode\n * The parent node from which the child node is to be removed.\n * @param {Node} child\n * The child node to be removed from the parentNode.\n * @returns {Node}\n * Returns the child node that was removed.\n * @throws {DOMException}\n * With code:\n * - {@link DOMException.NOT_FOUND_ERR} If the parentNode is not the parent of the child node.\n * @private\n * @see https://github.com/xmldom/xmldom/issues/135\n * @see https://github.com/xmldom/xmldom/issues/145\n */\nfunction _removeChild(parentNode, child) {\n\tif (parentNode !== child.parentNode) {\n\t\tthrow new DOMException(DOMException.NOT_FOUND_ERR, \"child's parent is not parent\");\n\t}\n\tvar oldPreviousSibling = child.previousSibling;\n\tvar oldNextSibling = child.nextSibling;\n\tif (oldPreviousSibling) {\n\t\toldPreviousSibling.nextSibling = oldNextSibling;\n\t} else {\n\t\tparentNode.firstChild = oldNextSibling;\n\t}\n\tif (oldNextSibling) {\n\t\toldNextSibling.previousSibling = oldPreviousSibling;\n\t} else {\n\t\tparentNode.lastChild = oldPreviousSibling;\n\t}\n\t_onUpdateChild(parentNode.ownerDocument, parentNode);\n\tchild.parentNode = null;\n\tchild.previousSibling = null;\n\tchild.nextSibling = null;\n\treturn child;\n}\n\n/**\n * Returns `true` if `node` can be a parent for insertion.\n *\n * @param {Node} node\n * @returns {boolean}\n */\nfunction hasValidParentNodeType(node) {\n\treturn (\n\t\tnode &&\n\t\t(node.nodeType === Node.DOCUMENT_NODE || node.nodeType === Node.DOCUMENT_FRAGMENT_NODE || node.nodeType === Node.ELEMENT_NODE)\n\t);\n}\n\n/**\n * Returns `true` if `node` can be inserted according to it's `nodeType`.\n *\n * @param {Node} node\n * @returns {boolean}\n */\nfunction hasInsertableNodeType(node) {\n\treturn (\n\t\tnode &&\n\t\t(node.nodeType === Node.CDATA_SECTION_NODE ||\n\t\t\tnode.nodeType === Node.COMMENT_NODE ||\n\t\t\tnode.nodeType === Node.DOCUMENT_FRAGMENT_NODE ||\n\t\t\tnode.nodeType === Node.DOCUMENT_TYPE_NODE ||\n\t\t\tnode.nodeType === Node.ELEMENT_NODE ||\n\t\t\tnode.nodeType === Node.PROCESSING_INSTRUCTION_NODE ||\n\t\t\tnode.nodeType === Node.TEXT_NODE)\n\t);\n}\n\n/**\n * Returns true if `node` is a DOCTYPE node.\n *\n * @param {Node} node\n * @returns {boolean}\n */\nfunction isDocTypeNode(node) {\n\treturn node && node.nodeType === Node.DOCUMENT_TYPE_NODE;\n}\n\n/**\n * Returns true if the node is an element.\n *\n * @param {Node} node\n * @returns {boolean}\n */\nfunction isElementNode(node) {\n\treturn node && node.nodeType === Node.ELEMENT_NODE;\n}\n/**\n * Returns true if `node` is a text node.\n *\n * @param {Node} node\n * @returns {boolean}\n */\nfunction isTextNode(node) {\n\treturn node && node.nodeType === Node.TEXT_NODE;\n}\n\n/**\n * Check if en element node can be inserted before `child`, or at the end if child is falsy,\n * according to the presence and position of a doctype node on the same level.\n *\n * @param {Document} doc\n * The document node.\n * @param {Node} child\n * The node that would become the nextSibling if the element would be inserted.\n * @returns {boolean}\n * `true` if an element can be inserted before child.\n * @private\n */\nfunction isElementInsertionPossible(doc, child) {\n\tvar parentChildNodes = doc.childNodes || [];\n\tif (find(parentChildNodes, isElementNode) || isDocTypeNode(child)) {\n\t\treturn false;\n\t}\n\tvar docTypeNode = find(parentChildNodes, isDocTypeNode);\n\treturn !(child && docTypeNode && parentChildNodes.indexOf(docTypeNode) > parentChildNodes.indexOf(child));\n}\n\n/**\n * Check if en element node can be inserted before `child`, or at the end if child is falsy,\n * according to the presence and position of a doctype node on the same level.\n *\n * @param {Node} doc\n * The document node.\n * @param {Node} child\n * The node that would become the nextSibling if the element would be inserted.\n * @returns {boolean}\n * `true` if an element can be inserted before child.\n * @private\n */\nfunction isElementReplacementPossible(doc, child) {\n\tvar parentChildNodes = doc.childNodes || [];\n\n\tfunction hasElementChildThatIsNotChild(node) {\n\t\treturn isElementNode(node) && node !== child;\n\t}\n\n\tif (find(parentChildNodes, hasElementChildThatIsNotChild)) {\n\t\treturn false;\n\t}\n\tvar docTypeNode = find(parentChildNodes, isDocTypeNode);\n\treturn !(child && docTypeNode && parentChildNodes.indexOf(docTypeNode) > parentChildNodes.indexOf(child));\n}\n\n/**\n * Asserts pre-insertion validity of a node into a parent before a child.\n * Throws errors for invalid node combinations that would result in an ill-formed DOM.\n *\n * @param {Node} parent\n * The parent node to insert `node` into.\n * @param {Node} node\n * The node to insert.\n * @param {Node | null} child\n * The node that should become the `nextSibling` of `node`. If null, no sibling is considered.\n * @throws {DOMException}\n * With code:\n * - {@link DOMException.HIERARCHY_REQUEST_ERR} If `parent` is not a Document,\n * DocumentFragment, or Element node.\n * - {@link DOMException.HIERARCHY_REQUEST_ERR} If `node` is a host-including inclusive\n * ancestor of `parent`. (Currently not implemented)\n * - {@link DOMException.NOT_FOUND_ERR} If `child` is non-null and its `parent` is not\n * `parent`.\n * - {@link DOMException.HIERARCHY_REQUEST_ERR} If `node` is not a DocumentFragment,\n * DocumentType, Element, or CharacterData node.\n * - {@link DOMException.HIERARCHY_REQUEST_ERR} If either `node` is a Text node and `parent` is\n * a document, or if `node` is a doctype and `parent` is not a document.\n * @private\n * @see https://dom.spec.whatwg.org/#concept-node-ensure-pre-insertion-validity\n * @see https://dom.spec.whatwg.org/#concept-node-replace\n */\nfunction assertPreInsertionValidity1to5(parent, node, child) {\n\t// 1. If `parent` is not a Document, DocumentFragment, or Element node, then throw a \"HierarchyRequestError\" DOMException.\n\tif (!hasValidParentNodeType(parent)) {\n\t\tthrow new DOMException(DOMException.HIERARCHY_REQUEST_ERR, 'Unexpected parent node type ' + parent.nodeType);\n\t}\n\t// 2. If `node` is a host-including inclusive ancestor of `parent`, then throw a \"HierarchyRequestError\" DOMException.\n\t// not implemented!\n\t// 3. If `child` is non-null and its parent is not `parent`, then throw a \"NotFoundError\" DOMException.\n\tif (child && child.parentNode !== parent) {\n\t\tthrow new DOMException(DOMException.NOT_FOUND_ERR, 'child not in parent');\n\t}\n\tif (\n\t\t// 4. If `node` is not a DocumentFragment, DocumentType, Element, or CharacterData node, then throw a \"HierarchyRequestError\" DOMException.\n\t\t!hasInsertableNodeType(node) ||\n\t\t// 5. If either `node` is a Text node and `parent` is a document,\n\t\t// the sax parser currently adds top level text nodes, this will be fixed in 0.9.0\n\t\t// || (node.nodeType === Node.TEXT_NODE && parent.nodeType === Node.DOCUMENT_NODE)\n\t\t// or `node` is a doctype and `parent` is not a document, then throw a \"HierarchyRequestError\" DOMException.\n\t\t(isDocTypeNode(node) && parent.nodeType !== Node.DOCUMENT_NODE)\n\t) {\n\t\tthrow new DOMException(\n\t\t\tDOMException.HIERARCHY_REQUEST_ERR,\n\t\t\t'Unexpected node type ' + node.nodeType + ' for parent node type ' + parent.nodeType\n\t\t);\n\t}\n}\n\n/**\n * Asserts pre-insertion validity of a node into a document before a child.\n * Throws errors for invalid node combinations that would result in an ill-formed DOM.\n *\n * @param {Document} parent\n * The parent node to insert `node` into.\n * @param {Node} node\n * The node to insert.\n * @param {Node | undefined} child\n * The node that should become the `nextSibling` of `node`. If undefined, no sibling is\n * considered.\n * @returns {Node}\n * @throws {DOMException}\n * With code:\n * - {@link DOMException.HIERARCHY_REQUEST_ERR} If `node` is a DocumentFragment with more than\n * one element child or has a Text node child.\n * - {@link DOMException.HIERARCHY_REQUEST_ERR} If `node` is a DocumentFragment with one\n * element child and either `parent` has an element child, `child` is a doctype, or `child` is\n * non-null and a doctype is following `child`.\n * - {@link DOMException.HIERARCHY_REQUEST_ERR} If `node` is an Element and `parent` has an\n * element child, `child` is a doctype, or `child` is non-null and a doctype is following\n * `child`.\n * - {@link DOMException.HIERARCHY_REQUEST_ERR} If `node` is a DocumentType and `parent` has a\n * doctype child, `child` is non-null and an element is preceding `child`, or `child` is null\n * and `parent` has an element child.\n * @private\n * @see https://dom.spec.whatwg.org/#concept-node-ensure-pre-insertion-validity\n * @see https://dom.spec.whatwg.org/#concept-node-replace\n */\nfunction assertPreInsertionValidityInDocument(parent, node, child) {\n\tvar parentChildNodes = parent.childNodes || [];\n\tvar nodeChildNodes = node.childNodes || [];\n\n\t// DocumentFragment\n\tif (node.nodeType === Node.DOCUMENT_FRAGMENT_NODE) {\n\t\tvar nodeChildElements = nodeChildNodes.filter(isElementNode);\n\t\t// If node has more than one element child or has a Text node child.\n\t\tif (nodeChildElements.length > 1 || find(nodeChildNodes, isTextNode)) {\n\t\t\tthrow new DOMException(DOMException.HIERARCHY_REQUEST_ERR, 'More than one element or text in fragment');\n\t\t}\n\t\t// Otherwise, if `node` has one element child and either `parent` has an element child,\n\t\t// `child` is a doctype, or `child` is non-null and a doctype is following `child`.\n\t\tif (nodeChildElements.length === 1 && !isElementInsertionPossible(parent, child)) {\n\t\t\tthrow new DOMException(DOMException.HIERARCHY_REQUEST_ERR, 'Element in fragment can not be inserted before doctype');\n\t\t}\n\t}\n\t// Element\n\tif (isElementNode(node)) {\n\t\t// `parent` has an element child, `child` is a doctype,\n\t\t// or `child` is non-null and a doctype is following `child`.\n\t\tif (!isElementInsertionPossible(parent, child)) {\n\t\t\tthrow new DOMException(DOMException.HIERARCHY_REQUEST_ERR, 'Only one element can be added and only after doctype');\n\t\t}\n\t}\n\t// DocumentType\n\tif (isDocTypeNode(node)) {\n\t\t// `parent` has a doctype child,\n\t\tif (find(parentChildNodes, isDocTypeNode)) {\n\t\t\tthrow new DOMException(DOMException.HIERARCHY_REQUEST_ERR, 'Only one doctype is allowed');\n\t\t}\n\t\tvar parentElementChild = find(parentChildNodes, isElementNode);\n\t\t// `child` is non-null and an element is preceding `child`,\n\t\tif (child && parentChildNodes.indexOf(parentElementChild) < parentChildNodes.indexOf(child)) {\n\t\t\tthrow new DOMException(DOMException.HIERARCHY_REQUEST_ERR, 'Doctype can only be inserted before an element');\n\t\t}\n\t\t// or `child` is null and `parent` has an element child.\n\t\tif (!child && parentElementChild) {\n\t\t\tthrow new DOMException(DOMException.HIERARCHY_REQUEST_ERR, 'Doctype can not be appended since element is present');\n\t\t}\n\t}\n}\n\n/**\n * @param {Document} parent\n * The parent node to insert `node` into.\n * @param {Node} node\n * The node to insert.\n * @param {Node | undefined} child\n * the node that should become the `nextSibling` of `node`\n * @returns {Node}\n * @throws {DOMException}\n * For several node combinations that would create a DOM that is not well-formed.\n * @throws {DOMException}\n * If `child` is provided but is not a child of `parent`.\n * @private\n * @see https://dom.spec.whatwg.org/#concept-node-ensure-pre-insertion-validity\n * @see https://dom.spec.whatwg.org/#concept-node-replace\n */\nfunction assertPreReplacementValidityInDocument(parent, node, child) {\n\tvar parentChildNodes = parent.childNodes || [];\n\tvar nodeChildNodes = node.childNodes || [];\n\n\t// DocumentFragment\n\tif (node.nodeType === Node.DOCUMENT_FRAGMENT_NODE) {\n\t\tvar nodeChildElements = nodeChildNodes.filter(isElementNode);\n\t\t// If `node` has more than one element child or has a Text node child.\n\t\tif (nodeChildElements.length > 1 || find(nodeChildNodes, isTextNode)) {\n\t\t\tthrow new DOMException(DOMException.HIERARCHY_REQUEST_ERR, 'More than one element or text in fragment');\n\t\t}\n\t\t// Otherwise, if `node` has one element child and either `parent` has an element child that is not `child` or a doctype is following `child`.\n\t\tif (nodeChildElements.length === 1 && !isElementReplacementPossible(parent, child)) {\n\t\t\tthrow new DOMException(DOMException.HIERARCHY_REQUEST_ERR, 'Element in fragment can not be inserted before doctype');\n\t\t}\n\t}\n\t// Element\n\tif (isElementNode(node)) {\n\t\t// `parent` has an element child that is not `child` or a doctype is following `child`.\n\t\tif (!isElementReplacementPossible(parent, child)) {\n\t\t\tthrow new DOMException(DOMException.HIERARCHY_REQUEST_ERR, 'Only one element can be added and only after doctype');\n\t\t}\n\t}\n\t// DocumentType\n\tif (isDocTypeNode(node)) {\n\t\tfunction hasDoctypeChildThatIsNotChild(node) {\n\t\t\treturn isDocTypeNode(node) && node !== child;\n\t\t}\n\n\t\t// `parent` has a doctype child that is not `child`,\n\t\tif (find(parentChildNodes, hasDoctypeChildThatIsNotChild)) {\n\t\t\tthrow new DOMException(DOMException.HIERARCHY_REQUEST_ERR, 'Only one doctype is allowed');\n\t\t}\n\t\tvar parentElementChild = find(parentChildNodes, isElementNode);\n\t\t// or an element is preceding `child`.\n\t\tif (child && parentChildNodes.indexOf(parentElementChild) < parentChildNodes.indexOf(child)) {\n\t\t\tthrow new DOMException(DOMException.HIERARCHY_REQUEST_ERR, 'Doctype can only be inserted before an element');\n\t\t}\n\t}\n}\n\n/**\n * Inserts a node into a parent node before a child node.\n *\n * @param {Node} parent\n * The parent node to insert the node into.\n * @param {Node} node\n * The node to insert into the parent.\n * @param {Node | null} child\n * The node that should become the next sibling of the node.\n * If null, the function inserts the node at the end of the children of the parent node.\n * @param {Function} [_inDocumentAssertion]\n * An optional function to check pre-insertion validity if parent is a document node.\n * Defaults to {@link assertPreInsertionValidityInDocument}\n * @returns {Node}\n * Returns the inserted node.\n * @throws {DOMException}\n * Throws a DOMException if inserting the node would result in a DOM tree that is not\n * well-formed. See {@link assertPreInsertionValidity1to5},\n * {@link assertPreInsertionValidityInDocument}.\n * @throws {DOMException}\n * Throws a DOMException if child is provided but is not a child of the parent. See\n * {@link Node.removeChild}\n * @private\n * @see https://dom.spec.whatwg.org/#concept-node-ensure-pre-insertion-validity\n */\nfunction _insertBefore(parent, node, child, _inDocumentAssertion) {\n\t// To ensure pre-insertion validity of a node into a parent before a child, run these steps:\n\tassertPreInsertionValidity1to5(parent, node, child);\n\n\t// If parent is a document, and any of the statements below, switched on the interface node implements,\n\t// are true, then throw a \"HierarchyRequestError\" DOMException.\n\tif (parent.nodeType === Node.DOCUMENT_NODE) {\n\t\t(_inDocumentAssertion || assertPreInsertionValidityInDocument)(parent, node, child);\n\t}\n\n\tvar cp = node.parentNode;\n\tif (cp) {\n\t\tcp.removeChild(node); //remove and update\n\t}\n\tif (node.nodeType === DOCUMENT_FRAGMENT_NODE) {\n\t\tvar newFirst = node.firstChild;\n\t\tif (newFirst == null) {\n\t\t\treturn node;\n\t\t}\n\t\tvar newLast = node.lastChild;\n\t} else {\n\t\tnewFirst = newLast = node;\n\t}\n\tvar pre = child ? child.previousSibling : parent.lastChild;\n\n\tnewFirst.previousSibling = pre;\n\tnewLast.nextSibling = child;\n\n\tif (pre) {\n\t\tpre.nextSibling = newFirst;\n\t} else {\n\t\tparent.firstChild = newFirst;\n\t}\n\tif (child == null) {\n\t\tparent.lastChild = newLast;\n\t} else {\n\t\tchild.previousSibling = newLast;\n\t}\n\tdo {\n\t\tnewFirst.parentNode = parent;\n\t} while (newFirst !== newLast && (newFirst = newFirst.nextSibling));\n\t_onUpdateChild(parent.ownerDocument || parent, parent, node);\n\tif (node.nodeType == DOCUMENT_FRAGMENT_NODE) {\n\t\tnode.firstChild = node.lastChild = null;\n\t}\n\n\treturn node;\n}\n\nDocument.prototype = {\n\t/**\n\t * The implementation that created this document.\n\t *\n\t * @type DOMImplementation\n\t * @readonly\n\t */\n\timplementation: null,\n\tnodeName: '#document',\n\tnodeType: DOCUMENT_NODE,\n\t/**\n\t * The DocumentType node of the document.\n\t *\n\t * @type DocumentType\n\t * @readonly\n\t */\n\tdoctype: null,\n\tdocumentElement: null,\n\t_inc: 1,\n\n\tinsertBefore: function (newChild, refChild) {\n\t\t//raises\n\t\tif (newChild.nodeType === DOCUMENT_FRAGMENT_NODE) {\n\t\t\tvar child = newChild.firstChild;\n\t\t\twhile (child) {\n\t\t\t\tvar next = child.nextSibling;\n\t\t\t\tthis.insertBefore(child, refChild);\n\t\t\t\tchild = next;\n\t\t\t}\n\t\t\treturn newChild;\n\t\t}\n\t\t_insertBefore(this, newChild, refChild);\n\t\tnewChild.ownerDocument = this;\n\t\tif (this.documentElement === null && newChild.nodeType === ELEMENT_NODE) {\n\t\t\tthis.documentElement = newChild;\n\t\t}\n\n\t\treturn newChild;\n\t},\n\tremoveChild: function (oldChild) {\n\t\tvar removed = _removeChild(this, oldChild);\n\t\tif (removed === this.documentElement) {\n\t\t\tthis.documentElement = null;\n\t\t}\n\t\treturn removed;\n\t},\n\treplaceChild: function (newChild, oldChild) {\n\t\t//raises\n\t\t_insertBefore(this, newChild, oldChild, assertPreReplacementValidityInDocument);\n\t\tnewChild.ownerDocument = this;\n\t\tif (oldChild) {\n\t\t\tthis.removeChild(oldChild);\n\t\t}\n\t\tif (isElementNode(newChild)) {\n\t\t\tthis.documentElement = newChild;\n\t\t}\n\t},\n\t/**\n\t * Imports a node from another document into this document, creating a new copy owned by this\n\t * document. The source node and its subtree are not modified.\n\t *\n\t * @param {Node} importedNode\n\t * The node to import.\n\t * @param {boolean} deep\n\t * If true, the contents of the node are recursively imported.\n\t * If false, only the node itself (and its attributes, if it is an element) are imported.\n\t * @returns {Node}\n\t * Returns the newly created import of the node.\n\t * @see {@link importNode}\n\t * @see {@link https://dom.spec.whatwg.org/#dom-document-importnode}\n\t */\n\timportNode: function (importedNode, deep) {\n\t\treturn importNode(this, importedNode, deep);\n\t},\n\t// Introduced in DOM Level 2:\n\tgetElementById: function (id) {\n\t\tvar rtv = null;\n\t\t_visitNode(this.documentElement, function (node) {\n\t\t\tif (node.nodeType == ELEMENT_NODE) {\n\t\t\t\tif (node.getAttribute('id') == id) {\n\t\t\t\t\trtv = node;\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t\treturn rtv;\n\t},\n\n\t/**\n\t * Creates a new `Element` that is owned by this `Document`.\n\t * In HTML Documents `localName` is the lower cased `tagName`,\n\t * otherwise no transformation is being applied.\n\t * When `contentType` implies the HTML namespace, it will be set as `namespaceURI`.\n\t *\n\t * __This implementation differs from the specification:__ - The provided name is not checked\n\t * against the `Name` production,\n\t * so no related error will be thrown.\n\t * - There is no interface `HTMLElement`, it is always an `Element`.\n\t * - There is no support for a second argument to indicate using custom elements.\n\t *\n\t * @param {string} tagName\n\t * @returns {Element}\n\t * @see https://developer.mozilla.org/en-US/docs/Web/API/Document/createElement\n\t * @see https://dom.spec.whatwg.org/#dom-document-createelement\n\t * @see https://dom.spec.whatwg.org/#concept-create-element\n\t */\n\tcreateElement: function (tagName) {\n\t\tvar node = new Element(PDC);\n\t\tnode.ownerDocument = this;\n\t\tif (this.type === 'html') {\n\t\t\ttagName = tagName.toLowerCase();\n\t\t}\n\t\tif (hasDefaultHTMLNamespace(this.contentType)) {\n\t\t\tnode.namespaceURI = NAMESPACE.HTML;\n\t\t}\n\t\tnode.nodeName = tagName;\n\t\tnode.tagName = tagName;\n\t\tnode.localName = tagName;\n\t\tnode.childNodes = new NodeList();\n\t\tvar attrs = (node.attributes = new NamedNodeMap());\n\t\tattrs._ownerElement = node;\n\t\treturn node;\n\t},\n\t/**\n\t * @returns {DocumentFragment}\n\t */\n\tcreateDocumentFragment: function () {\n\t\tvar node = new DocumentFragment(PDC);\n\t\tnode.ownerDocument = this;\n\t\tnode.childNodes = new NodeList();\n\t\treturn node;\n\t},\n\t/**\n\t * @param {string} data\n\t * @returns {Text}\n\t */\n\tcreateTextNode: function (data) {\n\t\tvar node = new Text(PDC);\n\t\tnode.ownerDocument = this;\n\t\tnode.childNodes = new NodeList();\n\t\tnode.appendData(data);\n\t\treturn node;\n\t},\n\t/**\n\t * @param {string} data\n\t * @returns {Comment}\n\t * @see https://dom.spec.whatwg.org/#dom-document-createcomment\n\t * @see https://www.w3.org/TR/xml/#NT-Comment XML 1.0 production [15]\n\t * @see https://www.w3.org/TR/DOM-Parsing/#dfn-concept-serialize-xml §3.2.1.3\n\t *\n\t * Note: no validation is performed at creation time. When the resulting document is\n\t * serialized with `requireWellFormed: true`, the serializer throws `InvalidStateError`\n\t * if the comment data contains `--` anywhere, ends with `-`, or contains characters\n\t * outside the XML Char production (W3C DOM Parsing §3.2.1.3). Without that option the\n\t * data is emitted verbatim.\n\t */\n\tcreateComment: function (data) {\n\t\tvar node = new Comment(PDC);\n\t\tnode.ownerDocument = this;\n\t\tnode.childNodes = new NodeList();\n\t\tnode.appendData(data);\n\t\treturn node;\n\t},\n\t/**\n\t * Returns a new CDATASection node whose data is `data`.\n\t *\n\t * __This implementation differs from the specification:__ - calling this method on an HTML\n\t * document does not throw `NotSupportedError`.\n\t *\n\t * @param {string} data\n\t * @returns {CDATASection}\n\t * @throws {DOMException}\n\t * With code `INVALID_CHARACTER_ERR` if `data` contains `\"]]>\"`.\n\t * @see https://developer.mozilla.org/en-US/docs/Web/API/Document/createCDATASection\n\t * @see https://dom.spec.whatwg.org/#dom-document-createcdatasection\n\t */\n\tcreateCDATASection: function (data) {\n\t\tif (data.indexOf(']]>') !== -1) {\n\t\t\tthrow new DOMException(DOMException.INVALID_CHARACTER_ERR, 'data contains \"]]>\"');\n\t\t}\n\t\tvar node = new CDATASection(PDC);\n\t\tnode.ownerDocument = this;\n\t\tnode.childNodes = new NodeList();\n\t\tnode.appendData(data);\n\t\treturn node;\n\t},\n\t/**\n\t * Returns a ProcessingInstruction node whose target is target and data is data.\n\t *\n\t * __This behavior is slightly different from the in the specs__:\n\t * - it does not do any input validation on the arguments and doesn't throw\n\t * \"InvalidCharacterError\".\n\t *\n\t * Note: When the resulting document is serialized with `requireWellFormed: true`, the\n\t * serializer throws `InvalidStateError` if `.target` contains `:` or is an ASCII\n\t * case-insensitive match for `\"xml\"`, or if `.data` contains `?>` or characters outside the\n\t * XML Char production (W3C DOM Parsing §3.2.1.7). Without that option the data is emitted\n\t * verbatim.\n\t *\n\t * @param {string} target\n\t * @param {string} data\n\t * @returns {ProcessingInstruction}\n\t * @see https://developer.mozilla.org/docs/Web/API/Document/createProcessingInstruction\n\t * @see https://dom.spec.whatwg.org/#dom-document-createprocessinginstruction\n\t * @see https://www.w3.org/TR/DOM-Parsing/#dfn-concept-serialize-xml §3.2.1.7\n\t */\n\tcreateProcessingInstruction: function (target, data) {\n\t\tvar node = new ProcessingInstruction(PDC);\n\t\tnode.ownerDocument = this;\n\t\tnode.childNodes = new NodeList();\n\t\tnode.nodeName = node.target = target;\n\t\tnode.nodeValue = node.data = data;\n\t\treturn node;\n\t},\n\t/**\n\t * Creates an `Attr` node that is owned by this document.\n\t * In HTML Documents `localName` is the lower cased `name`,\n\t * otherwise no transformation is being applied.\n\t *\n\t * __This implementation differs from the specification:__ - The provided name is not checked\n\t * against the `Name` production,\n\t * so no related error will be thrown.\n\t *\n\t * @param {string} name\n\t * @returns {Attr}\n\t * @see https://developer.mozilla.org/en-US/docs/Web/API/Document/createAttribute\n\t * @see https://dom.spec.whatwg.org/#dom-document-createattribute\n\t */\n\tcreateAttribute: function (name) {\n\t\tif (!g.QName_exact.test(name)) {\n\t\t\tthrow new DOMException(DOMException.INVALID_CHARACTER_ERR, 'invalid character in name \"' + name + '\"');\n\t\t}\n\t\tif (this.type === 'html') {\n\t\t\tname = name.toLowerCase();\n\t\t}\n\t\treturn this._createAttribute(name);\n\t},\n\t_createAttribute: function (name) {\n\t\tvar node = new Attr(PDC);\n\t\tnode.ownerDocument = this;\n\t\tnode.childNodes = new NodeList();\n\t\tnode.name = name;\n\t\tnode.nodeName = name;\n\t\tnode.localName = name;\n\t\tnode.specified = true;\n\t\treturn node;\n\t},\n\t/**\n\t * Creates an EntityReference object.\n\t * The current implementation does not fill the `childNodes` with those of the corresponding\n\t * `Entity`\n\t *\n\t * @deprecated\n\t * In DOM Level 4.\n\t * @param {string} name\n\t * The name of the entity to reference. No namespace well-formedness checks are performed.\n\t * @returns {EntityReference}\n\t * @throws {DOMException}\n\t * With code `INVALID_CHARACTER_ERR` when `name` is not valid.\n\t * @throws {DOMException}\n\t * with code `NOT_SUPPORTED_ERR` when the document is of type `html`\n\t * @see https://www.w3.org/TR/DOM-Level-3-Core/core.html#ID-392B75AE\n\t */\n\tcreateEntityReference: function (name) {\n\t\tif (!g.Name.test(name)) {\n\t\t\tthrow new DOMException(DOMException.INVALID_CHARACTER_ERR, 'not a valid xml name \"' + name + '\"');\n\t\t}\n\t\tif (this.type === 'html') {\n\t\t\tthrow new DOMException('document is an html document', DOMExceptionName.NotSupportedError);\n\t\t}\n\n\t\tvar node = new EntityReference(PDC);\n\t\tnode.ownerDocument = this;\n\t\tnode.childNodes = new NodeList();\n\t\tnode.nodeName = name;\n\t\treturn node;\n\t},\n\t// Introduced in DOM Level 2:\n\t/**\n\t * @param {string} namespaceURI\n\t * @param {string} qualifiedName\n\t * @returns {Element}\n\t */\n\tcreateElementNS: function (namespaceURI, qualifiedName) {\n\t\tvar validated = validateAndExtract(namespaceURI, qualifiedName);\n\t\tvar node = new Element(PDC);\n\t\tvar attrs = (node.attributes = new NamedNodeMap());\n\t\tnode.childNodes = new NodeList();\n\t\tnode.ownerDocument = this;\n\t\tnode.nodeName = qualifiedName;\n\t\tnode.tagName = qualifiedName;\n\t\tnode.namespaceURI = validated[0];\n\t\tnode.prefix = validated[1];\n\t\tnode.localName = validated[2];\n\t\tattrs._ownerElement = node;\n\t\treturn node;\n\t},\n\t// Introduced in DOM Level 2:\n\t/**\n\t * @param {string} namespaceURI\n\t * @param {string} qualifiedName\n\t * @returns {Attr}\n\t */\n\tcreateAttributeNS: function (namespaceURI, qualifiedName) {\n\t\tvar validated = validateAndExtract(namespaceURI, qualifiedName);\n\t\tvar node = new Attr(PDC);\n\t\tnode.ownerDocument = this;\n\t\tnode.childNodes = new NodeList();\n\t\tnode.nodeName = qualifiedName;\n\t\tnode.name = qualifiedName;\n\t\tnode.specified = true;\n\t\tnode.namespaceURI = validated[0];\n\t\tnode.prefix = validated[1];\n\t\tnode.localName = validated[2];\n\t\treturn node;\n\t},\n};\n_extends(Document, Node);\n\nfunction Element(symbol) {\n\tcheckSymbol(symbol);\n\n\tthis._nsMap = Object.create(null);\n}\nElement.prototype = {\n\tnodeType: ELEMENT_NODE,\n\t/**\n\t * The attributes of this element.\n\t *\n\t * @type {NamedNodeMap | null}\n\t */\n\tattributes: null,\n\tgetQualifiedName: function () {\n\t\treturn this.prefix ? this.prefix + ':' + this.localName : this.localName;\n\t},\n\t_isInHTMLDocumentAndNamespace: function () {\n\t\treturn this.ownerDocument.type === 'html' && this.namespaceURI === NAMESPACE.HTML;\n\t},\n\t/**\n\t * Implementaton of Level2 Core function hasAttributes.\n\t *\n\t * @returns {boolean}\n\t * True if attribute list is not empty.\n\t * @see https://www.w3.org/TR/DOM-Level-2-Core/#core-ID-NodeHasAttrs\n\t */\n\thasAttributes: function () {\n\t\treturn !!(this.attributes && this.attributes.length);\n\t},\n\thasAttribute: function (name) {\n\t\treturn !!this.getAttributeNode(name);\n\t},\n\t/**\n\t * Returns element’s first attribute whose qualified name is `name`, and `null`\n\t * if there is no such attribute.\n\t *\n\t * @param {string} name\n\t * @returns {string | null}\n\t */\n\tgetAttribute: function (name) {\n\t\tvar attr = this.getAttributeNode(name);\n\t\treturn attr ? attr.value : null;\n\t},\n\tgetAttributeNode: function (name) {\n\t\tif (this._isInHTMLDocumentAndNamespace()) {\n\t\t\tname = name.toLowerCase();\n\t\t}\n\t\treturn this.attributes.getNamedItem(name);\n\t},\n\t/**\n\t * Sets the value of element’s first attribute whose qualified name is qualifiedName to value.\n\t *\n\t * @param {string} name\n\t * @param {string} value\n\t */\n\tsetAttribute: function (name, value) {\n\t\tif (this._isInHTMLDocumentAndNamespace()) {\n\t\t\tname = name.toLowerCase();\n\t\t}\n\t\tvar attr = this.getAttributeNode(name);\n\t\tif (attr) {\n\t\t\tattr.value = attr.nodeValue = '' + value;\n\t\t} else {\n\t\t\tattr = this.ownerDocument._createAttribute(name);\n\t\t\tattr.value = attr.nodeValue = '' + value;\n\t\t\tthis.setAttributeNode(attr);\n\t\t}\n\t},\n\tremoveAttribute: function (name) {\n\t\tvar attr = this.getAttributeNode(name);\n\t\tattr && this.removeAttributeNode(attr);\n\t},\n\tsetAttributeNode: function (newAttr) {\n\t\treturn this.attributes.setNamedItem(newAttr);\n\t},\n\tsetAttributeNodeNS: function (newAttr) {\n\t\treturn this.attributes.setNamedItemNS(newAttr);\n\t},\n\tremoveAttributeNode: function (oldAttr) {\n\t\t//console.log(this == oldAttr.ownerElement)\n\t\treturn this.attributes.removeNamedItem(oldAttr.nodeName);\n\t},\n\t//get real attribute name,and remove it by removeAttributeNode\n\tremoveAttributeNS: function (namespaceURI, localName) {\n\t\tvar old = this.getAttributeNodeNS(namespaceURI, localName);\n\t\told && this.removeAttributeNode(old);\n\t},\n\n\thasAttributeNS: function (namespaceURI, localName) {\n\t\treturn this.getAttributeNodeNS(namespaceURI, localName) != null;\n\t},\n\t/**\n\t * Returns element’s attribute whose namespace is `namespaceURI` and local name is\n\t * `localName`,\n\t * or `null` if there is no such attribute.\n\t *\n\t * @param {string} namespaceURI\n\t * @param {string} localName\n\t * @returns {string | null}\n\t */\n\tgetAttributeNS: function (namespaceURI, localName) {\n\t\tvar attr = this.getAttributeNodeNS(namespaceURI, localName);\n\t\treturn attr ? attr.value : null;\n\t},\n\t/**\n\t * Sets the value of element’s attribute whose namespace is `namespaceURI` and local name is\n\t * `localName` to value.\n\t *\n\t * @param {string} namespaceURI\n\t * @param {string} qualifiedName\n\t * @param {string} value\n\t * @see https://dom.spec.whatwg.org/#dom-element-setattributens\n\t */\n\tsetAttributeNS: function (namespaceURI, qualifiedName, value) {\n\t\tvar validated = validateAndExtract(namespaceURI, qualifiedName);\n\t\tvar localName = validated[2];\n\t\tvar attr = this.getAttributeNodeNS(namespaceURI, localName);\n\t\tif (attr) {\n\t\t\tattr.value = attr.nodeValue = '' + value;\n\t\t} else {\n\t\t\tattr = this.ownerDocument.createAttributeNS(namespaceURI, qualifiedName);\n\t\t\tattr.value = attr.nodeValue = '' + value;\n\t\t\tthis.setAttributeNode(attr);\n\t\t}\n\t},\n\tgetAttributeNodeNS: function (namespaceURI, localName) {\n\t\treturn this.attributes.getNamedItemNS(namespaceURI, localName);\n\t},\n\n\t/**\n\t * Returns a LiveNodeList of all child elements which have **all** of the given class name(s).\n\t *\n\t * Returns an empty list if `classNames` is an empty string or only contains HTML white space\n\t * characters.\n\t *\n\t * Warning: This returns a live LiveNodeList.\n\t * Changes in the DOM will reflect in the array as the changes occur.\n\t * If an element selected by this array no longer qualifies for the selector,\n\t * it will automatically be removed. Be aware of this for iteration purposes.\n\t *\n\t * @param {string} classNames\n\t * Is a string representing the class name(s) to match; multiple class names are separated by\n\t * (ASCII-)whitespace.\n\t * @see https://developer.mozilla.org/en-US/docs/Web/API/Element/getElementsByClassName\n\t * @see https://developer.mozilla.org/en-US/docs/Web/API/Document/getElementsByClassName\n\t * @see https://dom.spec.whatwg.org/#concept-getelementsbyclassname\n\t */\n\tgetElementsByClassName: function (classNames) {\n\t\tvar classNamesSet = toOrderedSet(classNames);\n\t\treturn new LiveNodeList(this, function (base) {\n\t\t\tvar ls = [];\n\t\t\tif (classNamesSet.length > 0) {\n\t\t\t\t_visitNode(base, function (node) {\n\t\t\t\t\tif (node !== base && node.nodeType === ELEMENT_NODE) {\n\t\t\t\t\t\tvar nodeClassNames = node.getAttribute('class');\n\t\t\t\t\t\t// can be null if the attribute does not exist\n\t\t\t\t\t\tif (nodeClassNames) {\n\t\t\t\t\t\t\t// before splitting and iterating just compare them for the most common case\n\t\t\t\t\t\t\tvar matches = classNames === nodeClassNames;\n\t\t\t\t\t\t\tif (!matches) {\n\t\t\t\t\t\t\t\tvar nodeClassNamesSet = toOrderedSet(nodeClassNames);\n\t\t\t\t\t\t\t\tmatches = classNamesSet.every(arrayIncludes(nodeClassNamesSet));\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (matches) {\n\t\t\t\t\t\t\t\tls.push(node);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\t\t\treturn ls;\n\t\t});\n\t},\n\n\t/**\n\t * Returns a LiveNodeList of elements with the given qualifiedName.\n\t * Searching for all descendants can be done by passing `*` as `qualifiedName`.\n\t *\n\t * All descendants of the specified element are searched, but not the element itself.\n\t * The returned list is live, which means it updates itself with the DOM tree automatically.\n\t * Therefore, there is no need to call `Element.getElementsByTagName()`\n\t * with the same element and arguments repeatedly if the DOM changes in between calls.\n\t *\n\t * When called on an HTML element in an HTML document,\n\t * `getElementsByTagName` lower-cases the argument before searching for it.\n\t * This is undesirable when trying to match camel-cased SVG elements (such as\n\t * `<linearGradient>`) in an HTML document.\n\t * Instead, use `Element.getElementsByTagNameNS()`,\n\t * which preserves the capitalization of the tag name.\n\t *\n\t * `Element.getElementsByTagName` is similar to `Document.getElementsByTagName()`,\n\t * except that it only searches for elements that are descendants of the specified element.\n\t *\n\t * @param {string} qualifiedName\n\t * @returns {LiveNodeList}\n\t * @see https://developer.mozilla.org/en-US/docs/Web/API/Element/getElementsByTagName\n\t * @see https://dom.spec.whatwg.org/#concept-getelementsbytagname\n\t */\n\tgetElementsByTagName: function (qualifiedName) {\n\t\tvar isHTMLDocument = (this.nodeType === DOCUMENT_NODE ? this : this.ownerDocument).type === 'html';\n\t\tvar lowerQualifiedName = qualifiedName.toLowerCase();\n\t\treturn new LiveNodeList(this, function (base) {\n\t\t\tvar ls = [];\n\t\t\t_visitNode(base, function (node) {\n\t\t\t\tif (node === base || node.nodeType !== ELEMENT_NODE) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tif (qualifiedName === '*') {\n\t\t\t\t\tls.push(node);\n\t\t\t\t} else {\n\t\t\t\t\tvar nodeQualifiedName = node.getQualifiedName();\n\t\t\t\t\tvar matchingQName = isHTMLDocument && node.namespaceURI === NAMESPACE.HTML ? lowerQualifiedName : qualifiedName;\n\t\t\t\t\tif (nodeQualifiedName === matchingQName) {\n\t\t\t\t\t\tls.push(node);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t\treturn ls;\n\t\t});\n\t},\n\tgetElementsByTagNameNS: function (namespaceURI, localName) {\n\t\treturn new LiveNodeList(this, function (base) {\n\t\t\tvar ls = [];\n\t\t\t_visitNode(base, function (node) {\n\t\t\t\tif (\n\t\t\t\t\tnode !== base &&\n\t\t\t\t\tnode.nodeType === ELEMENT_NODE &&\n\t\t\t\t\t(namespaceURI === '*' || node.namespaceURI === namespaceURI) &&\n\t\t\t\t\t(localName === '*' || node.localName == localName)\n\t\t\t\t) {\n\t\t\t\t\tls.push(node);\n\t\t\t\t}\n\t\t\t});\n\t\t\treturn ls;\n\t\t});\n\t},\n};\nDocument.prototype.getElementsByClassName = Element.prototype.getElementsByClassName;\nDocument.prototype.getElementsByTagName = Element.prototype.getElementsByTagName;\nDocument.prototype.getElementsByTagNameNS = Element.prototype.getElementsByTagNameNS;\n\n_extends(Element, Node);\nfunction Attr(symbol) {\n\tcheckSymbol(symbol);\n\n\tthis.namespaceURI = null;\n\tthis.prefix = null;\n\tthis.ownerElement = null;\n}\nAttr.prototype.nodeType = ATTRIBUTE_NODE;\n_extends(Attr, Node);\n\nfunction CharacterData(symbol) {\n\tcheckSymbol(symbol);\n}\nCharacterData.prototype = {\n\tdata: '',\n\tsubstringData: function (offset, count) {\n\t\treturn this.data.substring(offset, offset + count);\n\t},\n\tappendData: function (text) {\n\t\ttext = this.data + text;\n\t\tthis.nodeValue = this.data = text;\n\t\tthis.length = text.length;\n\t},\n\tinsertData: function (offset, text) {\n\t\tthis.replaceData(offset, 0, text);\n\t},\n\tdeleteData: function (offset, count) {\n\t\tthis.replaceData(offset, count, '');\n\t},\n\treplaceData: function (offset, count, text) {\n\t\tvar start = this.data.substring(0, offset);\n\t\tvar end = this.data.substring(offset + count);\n\t\ttext = start + text + end;\n\t\tthis.nodeValue = this.data = text;\n\t\tthis.length = text.length;\n\t},\n};\n_extends(CharacterData, Node);\nfunction Text(symbol) {\n\tcheckSymbol(symbol);\n}\nText.prototype = {\n\tnodeName: '#text',\n\tnodeType: TEXT_NODE,\n\tsplitText: function (offset) {\n\t\tvar text = this.data;\n\t\tvar newText = text.substring(offset);\n\t\ttext = text.substring(0, offset);\n\t\tthis.data = this.nodeValue = text;\n\t\tthis.length = text.length;\n\t\tvar newNode = this.ownerDocument.createTextNode(newText);\n\t\tif (this.parentNode) {\n\t\t\tthis.parentNode.insertBefore(newNode, this.nextSibling);\n\t\t}\n\t\treturn newNode;\n\t},\n};\n_extends(Text, CharacterData);\nfunction Comment(symbol) {\n\tcheckSymbol(symbol);\n}\nComment.prototype = {\n\tnodeName: '#comment',\n\tnodeType: COMMENT_NODE,\n};\n_extends(Comment, CharacterData);\n\nfunction CDATASection(symbol) {\n\tcheckSymbol(symbol);\n}\nCDATASection.prototype = {\n\tnodeName: '#cdata-section',\n\tnodeType: CDATA_SECTION_NODE,\n};\n_extends(CDATASection, Text);\n\n/**\n * @class DocumentType\n * @augments Node\n * @property {string} publicId\n * The external subset public identifier, stored verbatim (including surrounding quotes).\n * Declared `readonly` by the WHATWG DOM spec; xmldom does not enforce this constraint —\n * direct property writes succeed and the written value is serialized verbatim.\n * When serialized with `requireWellFormed: true`, the serializer validates the value against\n * the XML `PubidLiteral` production and throws `InvalidStateError` if it does not match.\n * @property {string} systemId\n * The external subset system identifier, stored verbatim (including surrounding quotes).\n * Declared `readonly` by the WHATWG DOM spec; xmldom does not enforce this constraint —\n * direct property writes succeed and the written value is serialized verbatim.\n * When serialized with `requireWellFormed: true`, the serializer validates the value against\n * the XML `SystemLiteral` production and throws `InvalidStateError` if it does not match.\n * @property {string} internalSubset\n * The internal subset string (the raw content between `[` and `]`), or an empty string.\n * Declared `readonly` by the WHATWG DOM spec; xmldom does not enforce this constraint —\n * direct property writes succeed and the written value is serialized verbatim.\n * When serialized with `requireWellFormed: true`, the serializer throws `InvalidStateError`\n * if the value contains `\"]>\"`.\n * @see https://developer.mozilla.org/en-US/docs/Web/API/DocumentType MDN\n * @see https://dom.spec.whatwg.org/#interface-documenttype WHATWG DOM\n * @prettierignore\n */\nfunction DocumentType(symbol) {\n\tcheckSymbol(symbol);\n}\nDocumentType.prototype.nodeType = DOCUMENT_TYPE_NODE;\n_extends(DocumentType, Node);\n\nfunction Notation(symbol) {\n\tcheckSymbol(symbol);\n}\nNotation.prototype.nodeType = NOTATION_NODE;\n_extends(Notation, Node);\n\nfunction Entity(symbol) {\n\tcheckSymbol(symbol);\n}\nEntity.prototype.nodeType = ENTITY_NODE;\n_extends(Entity, Node);\n\nfunction EntityReference(symbol) {\n\tcheckSymbol(symbol);\n}\nEntityReference.prototype.nodeType = ENTITY_REFERENCE_NODE;\n_extends(EntityReference, Node);\n\nfunction DocumentFragment(symbol) {\n\tcheckSymbol(symbol);\n}\nDocumentFragment.prototype.nodeName = '#document-fragment';\nDocumentFragment.prototype.nodeType = DOCUMENT_FRAGMENT_NODE;\n_extends(DocumentFragment, Node);\n\nfunction ProcessingInstruction(symbol) {\n\tcheckSymbol(symbol);\n}\nProcessingInstruction.prototype.nodeType = PROCESSING_INSTRUCTION_NODE;\n_extends(ProcessingInstruction, CharacterData);\nfunction XMLSerializer() {}\n/**\n * Returns the result of serializing `node` to XML.\n *\n * When `options.requireWellFormed` is `true`, the serializer throws `InvalidStateError` for\n * content that would produce ill-formed XML (e.g. CDATASection data containing `\"]]>\"`, Text\n * data containing characters outside the XML Char production, or a Document with no\n * `documentElement`).\n *\n * When `options.splitCDATASections` is `false`, CDATASection data is emitted verbatim even\n * when it contains `\"]]>\"`. When `true` (the default), `\"]]>\"` sequences are split across\n * concatenated CDATA sections — this behavior is **deprecated** and will be removed in the\n * next breaking release. Callers should migrate to `{ requireWellFormed: true }`, which throws\n * `InvalidStateError` instead of transforming.\n *\n * __This implementation differs from the specification:__ - CDATASection serialization is not\n * specified by W3C DOM Parsing or WHATWG DOM Parsing (see\n * {@link https://github.com/w3c/DOM-Parsing/issues/38 w3c/DOM-Parsing#38}).\n * When `splitCDATASections` is `true` (the default), `\"]]>\"` sequences in CDATASection data\n * are split across concatenated CDATA sections — this mechanism is derived from DOM Level 3\n * Core and is **deprecated**. The split mechanics will be removed in the next breaking\n * release. Callers that rely on this behavior should migrate to `{ requireWellFormed: true }`.\n * - W3C DOM Parsing §3.2.1.1 requires well-formedness checks on Element `localName`s,\n * prefixes,\n * and attribute serialization (duplicate attributes, namespace declarations, attribute value\n * characters) when `requireWellFormed` is `true`. These checks are **not implemented** in this\n * release — see the tracking issue filed against the next breaking milestone.\n *\n * @param {Node} node\n * @param {Object | function} [options]\n * Options object, or a legacy nodeFilter function (backward compatible).\n * @param {boolean} [options.requireWellFormed=false]\n * When `true`, throws `InvalidStateError` for content that would produce ill-formed XML.\n * @param {boolean} [options.splitCDATASections=true]\n * When `true` (default), splits `\"]]>\"` sequences in CDATASection data across concatenated\n * CDATA sections. **Deprecated** — will be removed in the next breaking release.\n * @param {function} [options.nodeFilter]\n * A filter function applied to each node before serialization.\n * @returns {string}\n * @throws {DOMException}\n * With name `InvalidStateError` when `requireWellFormed` is `true` and any of the following\n * conditions hold:\n * - CDATASection data contains `\"]]>\"`\n * - Text data contains characters outside the XML Char production\n * - a Comment node's data contains `--` anywhere or ends with `-`\n * - a ProcessingInstruction's target contains `:` or is an ASCII case-insensitive match for\n * `\"xml\"`, or its data contains `?>` or characters outside the XML Char production\n * - a DocumentType's `publicId` is non-empty and does not match the XML `PubidLiteral`\n * production (W3C DOM Parsing §3.2.1.3; XML 1.0 production [12])\n * - a DocumentType's `systemId` is non-empty and does not match the XML `SystemLiteral`\n * production (W3C DOM Parsing §3.2.1.3; XML 1.0 production [11])\n * - a DocumentType's `internalSubset` contains `\"]>\"`\n * - the Document has no `documentElement`\n * @see https://developer.mozilla.org/docs/Web/API/XMLSerializer/serializeToString\n * @see https://html.spec.whatwg.org/#dom-xmlserializer-serializetostring\n * @see https://github.com/w3c/DOM-Parsing/issues/84\n * @prettierignore\n */\nXMLSerializer.prototype.serializeToString = function (node, options) {\n\treturn nodeSerializeToString.call(node, options);\n};\nNode.prototype.toString = nodeSerializeToString;\nfunction nodeSerializeToString(options) {\n\t// Normalize the user-supplied options into a single internal opts object so that the\n\t// internal serializer always works with a consistent shape rather than positional flags.\n\tvar opts;\n\tif (typeof options === 'function') {\n\t\topts = { requireWellFormed: false, splitCDATASections: true, nodeFilter: options };\n\t} else if (options != null) {\n\t\topts = {\n\t\t\trequireWellFormed: !!options.requireWellFormed,\n\t\t\tsplitCDATASections: options.splitCDATASections !== false,\n\t\t\tnodeFilter: options.nodeFilter || null,\n\t\t};\n\t} else {\n\t\topts = { requireWellFormed: false, splitCDATASections: true, nodeFilter: null };\n\t}\n\tvar buf = [];\n\tvar refNode = (this.nodeType === DOCUMENT_NODE && this.documentElement) || this;\n\tvar prefix = refNode.prefix;\n\tvar uri = refNode.namespaceURI;\n\n\tif (uri && prefix == null) {\n\t\tvar prefix = refNode.lookupPrefix(uri);\n\t\tif (prefix == null) {\n\t\t\tvar visibleNamespaces = [\n\t\t\t\t{ namespace: uri, prefix: null },\n\t\t\t\t//{namespace:uri,prefix:''}\n\t\t\t];\n\t\t}\n\t}\n\tserializeToString(this, buf, visibleNamespaces, opts);\n\treturn buf.join('');\n}\n\nfunction needNamespaceDefine(node, isHTML, visibleNamespaces) {\n\tvar prefix = node.prefix || '';\n\tvar uri = node.namespaceURI;\n\t// According to [Namespaces in XML 1.0](https://www.w3.org/TR/REC-xml-names/#ns-using) ,\n\t// and more specifically https://www.w3.org/TR/REC-xml-names/#nsc-NoPrefixUndecl :\n\t// > In a namespace declaration for a prefix [...], the attribute value MUST NOT be empty.\n\t// in a similar manner [Namespaces in XML 1.1](https://www.w3.org/TR/xml-names11/#ns-using)\n\t// and more specifically https://www.w3.org/TR/xml-names11/#nsc-NSDeclared :\n\t// > [...] Furthermore, the attribute value [...] must not be an empty string.\n\t// so serializing empty namespace value like xmlns:ds=\"\" would produce an invalid XML document.\n\tif (!uri) {\n\t\treturn false;\n\t}\n\tif ((prefix === 'xml' && uri === NAMESPACE.XML) || uri === NAMESPACE.XMLNS) {\n\t\treturn false;\n\t}\n\n\tvar i = visibleNamespaces.length;\n\twhile (i--) {\n\t\tvar ns = visibleNamespaces[i];\n\t\t// get namespace prefix\n\t\tif (ns.prefix === prefix) {\n\t\t\treturn ns.namespace !== uri;\n\t\t}\n\t}\n\treturn true;\n}\n/**\n * Literal whitespace other than space that appear in attribute values are serialized as\n * their entity references, so they will be preserved.\n * (In contrast to whitespace literals in the input which are normalized to spaces).\n *\n * Well-formed constraint: No < in Attribute Values:\n * > The replacement text of any entity referred to directly or indirectly\n * > in an attribute value must not contain a <.\n *\n * @see https://www.w3.org/TR/xml11/#CleanAttrVals\n * @see https://www.w3.org/TR/xml11/#NT-AttValue\n * @see https://www.w3.org/TR/xml11/#AVNormalize\n * @see https://w3c.github.io/DOM-Parsing/#serializing-an-element-s-attributes\n * @prettierignore\n */\nfunction addSerializedAttribute(buf, qualifiedName, value) {\n\tbuf.push(' ', qualifiedName, '=\"', value.replace(/[<>&\"\\t\\n\\r]/g, _xmlEncoder), '\"');\n}\n\nfunction serializeToString(node, buf, visibleNamespaces, opts) {\n\tif (!visibleNamespaces) {\n\t\tvisibleNamespaces = [];\n\t}\n\tvar nodeFilter = opts.nodeFilter;\n\tvar requireWellFormed = opts.requireWellFormed;\n\tvar splitCDATASections = opts.splitCDATASections;\n\tvar doc = node.nodeType === DOCUMENT_NODE ? node : node.ownerDocument;\n\tvar isHTML = doc.type === 'html';\n\n\twalkDOM(\n\t\tnode,\n\t\t{ ns: visibleNamespaces },\n\t\t{\n\t\t\tenter: function (n, ctx) {\n\t\t\t\tvar namespaces = ctx.ns;\n\n\t\t\t\tif (nodeFilter) {\n\t\t\t\t\tn = nodeFilter(n);\n\t\t\t\t\tif (n) {\n\t\t\t\t\t\tif (typeof n == 'string') {\n\t\t\t\t\t\t\tbuf.push(n);\n\t\t\t\t\t\t\treturn null;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn null;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tswitch (n.nodeType) {\n\t\t\t\t\tcase ELEMENT_NODE:\n\t\t\t\t\t\tvar attrs = n.attributes;\n\t\t\t\t\t\tvar len = attrs.length;\n\t\t\t\t\t\tvar nodeName = n.tagName;\n\n\t\t\t\t\t\tvar prefixedNodeName = nodeName;\n\t\t\t\t\t\tif (!isHTML && !n.prefix && n.namespaceURI) {\n\t\t\t\t\t\t\tvar defaultNS;\n\t\t\t\t\t\t\t// lookup current default ns from `xmlns` attribute\n\t\t\t\t\t\t\tfor (var ai = 0; ai < attrs.length; ai++) {\n\t\t\t\t\t\t\t\tif (attrs.item(ai).name === 'xmlns') {\n\t\t\t\t\t\t\t\t\tdefaultNS = attrs.item(ai).value;\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (!defaultNS) {\n\t\t\t\t\t\t\t\t// lookup current default ns in visibleNamespaces\n\t\t\t\t\t\t\t\tfor (var nsi = namespaces.length - 1; nsi >= 0; nsi--) {\n\t\t\t\t\t\t\t\t\tvar nsEntry = namespaces[nsi];\n\t\t\t\t\t\t\t\t\tif (nsEntry.prefix === '' && nsEntry.namespace === n.namespaceURI) {\n\t\t\t\t\t\t\t\t\t\tdefaultNS = nsEntry.namespace;\n\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (defaultNS !== n.namespaceURI) {\n\t\t\t\t\t\t\t\tfor (var nsi = namespaces.length - 1; nsi >= 0; nsi--) {\n\t\t\t\t\t\t\t\t\tvar nsEntry = namespaces[nsi];\n\t\t\t\t\t\t\t\t\tif (nsEntry.namespace === n.namespaceURI) {\n\t\t\t\t\t\t\t\t\t\tif (nsEntry.prefix) {\n\t\t\t\t\t\t\t\t\t\t\tprefixedNodeName = nsEntry.prefix + ':' + nodeName;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tbuf.push('<', prefixedNodeName);\n\n\t\t\t\t\t\t// Build a fresh namespace snapshot for this element's children.\n\t\t\t\t\t\t// The slice prevents sibling elements from inheriting each other's declarations.\n\t\t\t\t\t\tvar childNamespaces = namespaces.slice();\n\n\t\t\t\t\t\tfor (var i = 0; i < len; i++) {\n\t\t\t\t\t\t\t// add namespaces for attributes\n\t\t\t\t\t\t\tvar attr = attrs.item(i);\n\t\t\t\t\t\t\tif (attr.prefix == 'xmlns') {\n\t\t\t\t\t\t\t\tchildNamespaces.push({\n\t\t\t\t\t\t\t\t\tprefix: attr.localName,\n\t\t\t\t\t\t\t\t\tnamespace: attr.value,\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t} else if (attr.nodeName == 'xmlns') {\n\t\t\t\t\t\t\t\tchildNamespaces.push({ prefix: '', namespace: attr.value });\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tfor (var i = 0; i < len; i++) {\n\t\t\t\t\t\t\tvar attr = attrs.item(i);\n\t\t\t\t\t\t\tif (needNamespaceDefine(attr, isHTML, childNamespaces)) {\n\t\t\t\t\t\t\t\tvar attrPrefix = attr.prefix || '';\n\t\t\t\t\t\t\t\tvar uri = attr.namespaceURI;\n\t\t\t\t\t\t\t\taddSerializedAttribute(buf, attrPrefix ? 'xmlns:' + attrPrefix : 'xmlns', uri);\n\t\t\t\t\t\t\t\tchildNamespaces.push({ prefix: attrPrefix, namespace: uri });\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t// Apply nodeFilter and serialize the attribute.\n\t\t\t\t\t\t\tvar filteredAttr = nodeFilter ? nodeFilter(attr) : attr;\n\t\t\t\t\t\t\tif (filteredAttr) {\n\t\t\t\t\t\t\t\tif (typeof filteredAttr === 'string') {\n\t\t\t\t\t\t\t\t\tbuf.push(filteredAttr);\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\taddSerializedAttribute(buf, filteredAttr.name, filteredAttr.value);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// add namespace for current node\n\t\t\t\t\t\tif (nodeName === prefixedNodeName && needNamespaceDefine(n, isHTML, childNamespaces)) {\n\t\t\t\t\t\t\tvar nodePrefix = n.prefix || '';\n\t\t\t\t\t\t\tvar uri = n.namespaceURI;\n\t\t\t\t\t\t\taddSerializedAttribute(buf, nodePrefix ? 'xmlns:' + nodePrefix : 'xmlns', uri);\n\t\t\t\t\t\t\tchildNamespaces.push({ prefix: nodePrefix, namespace: uri });\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// in XML elements can be closed when they have no children\n\t\t\t\t\t\tvar canCloseTag = !n.firstChild;\n\t\t\t\t\t\tif (canCloseTag && (isHTML || n.namespaceURI === NAMESPACE.HTML)) {\n\t\t\t\t\t\t\t// in HTML (doc or ns) only void elements can be closed right away\n\t\t\t\t\t\t\tcanCloseTag = isHTMLVoidElement(nodeName);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (canCloseTag) {\n\t\t\t\t\t\t\tbuf.push('/>');\n\t\t\t\t\t\t\t// Self-closing: no children and no closing tag needed from exit.\n\t\t\t\t\t\t\treturn null;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tbuf.push('>');\n\n\t\t\t\t\t\t// HTML raw text elements: serialize children as raw data without further descent.\n\t\t\t\t\t\tif (isHTML && isHTMLRawTextElement(nodeName)) {\n\t\t\t\t\t\t\tvar child = n.firstChild;\n\t\t\t\t\t\t\twhile (child) {\n\t\t\t\t\t\t\t\tif (child.data) {\n\t\t\t\t\t\t\t\t\tbuf.push(child.data);\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tserializeToString(child, buf, childNamespaces.slice(), opts);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tchild = child.nextSibling;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tbuf.push('</', prefixedNodeName, '>');\n\t\t\t\t\t\t\t// Children handled manually above; prevent walkDOM from also traversing them.\n\t\t\t\t\t\t\treturn null;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Return child context so walkDOM descends; exit will emit the closing tag.\n\t\t\t\t\t\treturn { ns: childNamespaces, tag: prefixedNodeName };\n\t\t\t\t\tcase DOCUMENT_NODE:\n\t\t\t\t\tcase DOCUMENT_FRAGMENT_NODE:\n\t\t\t\t\t\tif (requireWellFormed && n.nodeType === DOCUMENT_NODE && n.documentElement == null) {\n\t\t\t\t\t\t\tthrow new DOMException('The Document has no documentElement', DOMExceptionName.InvalidStateError);\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// Pass namespaces through; each child element will slice independently.\n\t\t\t\t\t\treturn { ns: namespaces };\n\t\t\t\t\tcase ATTRIBUTE_NODE:\n\t\t\t\t\t\taddSerializedAttribute(buf, n.name, n.value);\n\t\t\t\t\t\treturn null;\n\t\t\t\t\tcase TEXT_NODE:\n\t\t\t\t\t\t/*\n\t\t\t\t\t\t * The ampersand character (&) and the left angle bracket (<) must not appear in their literal form,\n\t\t\t\t\t\t * except when used as markup delimiters, or within a comment, a processing instruction,\n\t\t\t\t\t\t * or a CDATA section.\n\t\t\t\t\t\t * If they are needed elsewhere, they must be escaped using either numeric character\n\t\t\t\t\t\t * references or the strings `&amp;` and `&lt;` respectively.\n\t\t\t\t\t\t * The right angle bracket (>) may be represented using the string \" &gt; \",\n\t\t\t\t\t\t * and must, for compatibility, be escaped using either `&gt;`,\n\t\t\t\t\t\t * or a character reference when it appears in the string `]]>` in content,\n\t\t\t\t\t\t * when that string is not marking the end of a CDATA section.\n\t\t\t\t\t\t *\n\t\t\t\t\t\t * In the content of elements, character data is any string of characters which does not\n\t\t\t\t\t\t * contain the start-delimiter of any markup and does not include the CDATA-section-close\n\t\t\t\t\t\t * delimiter, `]]>`.\n\t\t\t\t\t\t *\n\t\t\t\t\t\t * @see https://www.w3.org/TR/xml/#NT-CharData\n\t\t\t\t\t\t * @see https://w3c.github.io/DOM-Parsing/#xml-serializing-a-text-node\n\t\t\t\t\t\t */\n\t\t\t\t\t\tif (requireWellFormed && g.InvalidChar.test(n.data)) {\n\t\t\t\t\t\t\tthrow new DOMException(\n\t\t\t\t\t\t\t\t'The Text node data contains characters outside the XML Char production',\n\t\t\t\t\t\t\t\tDOMExceptionName.InvalidStateError\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbuf.push(n.data.replace(/[<&>]/g, _xmlEncoder));\n\t\t\t\t\t\treturn null;\n\t\t\t\t\tcase CDATA_SECTION_NODE:\n\t\t\t\t\t\tif (requireWellFormed && n.data.indexOf(']]>') !== -1) {\n\t\t\t\t\t\t\tthrow new DOMException('The CDATASection data contains \"]]>\"', DOMExceptionName.InvalidStateError);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (splitCDATASections) {\n\t\t\t\t\t\t\tbuf.push(g.CDATA_START, n.data.replace(/]]>/g, ']]]]><![CDATA[>'), g.CDATA_END);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tbuf.push(g.CDATA_START, n.data, g.CDATA_END);\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn null;\n\t\t\t\t\tcase COMMENT_NODE:\n\t\t\t\t\t\tif (requireWellFormed) {\n\t\t\t\t\t\t\tif (g.InvalidChar.test(n.data)) {\n\t\t\t\t\t\t\t\tthrow new DOMException(\n\t\t\t\t\t\t\t\t\t'The comment node data contains characters outside the XML Char production',\n\t\t\t\t\t\t\t\t\tDOMExceptionName.InvalidStateError\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (n.data.indexOf('--') !== -1 || n.data[n.data.length - 1] === '-') {\n\t\t\t\t\t\t\t\tthrow new DOMException(\n\t\t\t\t\t\t\t\t\t'The comment node data contains \"--\" or ends with \"-\"',\n\t\t\t\t\t\t\t\t\tDOMExceptionName.InvalidStateError\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbuf.push(g.COMMENT_START, n.data, g.COMMENT_END);\n\t\t\t\t\t\treturn null;\n\t\t\t\t\tcase DOCUMENT_TYPE_NODE:\n\t\t\t\t\t\tvar pubid = n.publicId;\n\t\t\t\t\t\tvar sysid = n.systemId;\n\t\t\t\t\t\tif (requireWellFormed) {\n\t\t\t\t\t\t\tif (pubid && !g.PubidLiteral_match.test(pubid)) {\n\t\t\t\t\t\t\t\tthrow new DOMException('DocumentType publicId is not a valid PubidLiteral', DOMExceptionName.InvalidStateError);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (sysid && sysid !== '.' && !g.SystemLiteral_match.test(sysid)) {\n\t\t\t\t\t\t\t\tthrow new DOMException('DocumentType systemId is not a valid SystemLiteral', DOMExceptionName.InvalidStateError);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (n.internalSubset && n.internalSubset.indexOf(']>') !== -1) {\n\t\t\t\t\t\t\t\tthrow new DOMException('DocumentType internalSubset contains \"]>\"', DOMExceptionName.InvalidStateError);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbuf.push(g.DOCTYPE_DECL_START, ' ', n.name);\n\t\t\t\t\t\tif (pubid) {\n\t\t\t\t\t\t\tbuf.push(' ', g.PUBLIC, ' ', pubid);\n\t\t\t\t\t\t\tif (sysid && sysid !== '.') {\n\t\t\t\t\t\t\t\tbuf.push(' ', sysid);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else if (sysid && sysid !== '.') {\n\t\t\t\t\t\t\tbuf.push(' ', g.SYSTEM, ' ', sysid);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (n.internalSubset) {\n\t\t\t\t\t\t\tbuf.push(' [', n.internalSubset, ']');\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbuf.push('>');\n\t\t\t\t\t\treturn null;\n\t\t\t\t\tcase PROCESSING_INSTRUCTION_NODE:\n\t\t\t\t\t\tif (requireWellFormed) {\n\t\t\t\t\t\t\tif (n.target.indexOf(':') !== -1 || n.target.toLowerCase() === 'xml') {\n\t\t\t\t\t\t\t\tthrow new DOMException('The ProcessingInstruction target is not well-formed', DOMExceptionName.InvalidStateError);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (g.InvalidChar.test(n.data)) {\n\t\t\t\t\t\t\t\tthrow new DOMException(\n\t\t\t\t\t\t\t\t\t'The ProcessingInstruction data contains characters outside the XML Char production',\n\t\t\t\t\t\t\t\t\tDOMExceptionName.InvalidStateError\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (n.data.indexOf('?>') !== -1) {\n\t\t\t\t\t\t\t\tthrow new DOMException('The ProcessingInstruction data contains \"?>\"', DOMExceptionName.InvalidStateError);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbuf.push('<?', n.target, ' ', n.data, '?>');\n\t\t\t\t\t\treturn null;\n\t\t\t\t\tcase ENTITY_REFERENCE_NODE:\n\t\t\t\t\t\tbuf.push('&', n.nodeName, ';');\n\t\t\t\t\t\treturn null;\n\t\t\t\t\t//case ENTITY_NODE:\n\t\t\t\t\t//case NOTATION_NODE:\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tbuf.push('??', n.nodeName);\n\t\t\t\t\t\treturn null;\n\t\t\t\t}\n\t\t\t},\n\t\t\texit: function (n, childCtx) {\n\t\t\t\t// Emit the closing tag for elements that were opened (not self-closed, not raw text).\n\t\t\t\tif (childCtx && childCtx.tag) {\n\t\t\t\t\tbuf.push('</', childCtx.tag, '>');\n\t\t\t\t}\n\t\t\t},\n\t\t}\n\t);\n}\n/**\n * Imports a node from a different document into `doc`, creating a new copy.\n * Delegates to {@link walkDOM} for traversal. Each node in the subtree is shallow-cloned,\n * stamped with `doc` as its `ownerDocument`, and detached (`parentNode` set to `null`).\n * Children are imported recursively when `deep` is `true`; for {@link Attr} nodes `deep` is\n * always forced to `true`\n * because an attribute's value lives in a child text node.\n *\n * @param {Document} doc\n * The document that will own the imported node.\n * @param {Node} node\n * The node to import.\n * @param {boolean} deep\n * If `true`, descendants are imported recursively.\n * @returns {Node}\n * The newly imported node, now owned by `doc`.\n */\nfunction importNode(doc, node, deep) {\n\tvar destRoot;\n\twalkDOM(node, null, {\n\t\tenter: function (srcNode, destParent) {\n\t\t\t// Shallow-clone the node and stamp it into the target document.\n\t\t\tvar destNode = srcNode.cloneNode(false);\n\t\t\tdestNode.ownerDocument = doc;\n\t\t\tdestNode.parentNode = null;\n\t\t\t// capture as the root of the imported subtree or attach to parent.\n\t\t\tif (destParent === null) {\n\t\t\t\tdestRoot = destNode;\n\t\t\t} else {\n\t\t\t\tdestParent.appendChild(destNode);\n\t\t\t}\n\t\t\t// ATTRIBUTE_NODE must always be imported deeply: its value lives in a child text node.\n\t\t\tvar shouldDeep = srcNode.nodeType === ATTRIBUTE_NODE || deep;\n\t\t\treturn shouldDeep ? destNode : null;\n\t\t},\n\t});\n\treturn destRoot;\n}\n\n/**\n * Creates a copy of a node from an existing one.\n *\n * @param {Document} doc\n * The Document object representing the document that the new node will belong to.\n * @param {Node} node\n * The node to clone.\n * @param {boolean} deep\n * If true, the contents of the node are recursively copied.\n * If false, only the node itself (and its attributes, if it is an element) are copied.\n * @returns {Node}\n * Returns the newly created copy of the node.\n * @throws {DOMException}\n * May throw a DOMException if operations within setAttributeNode or appendChild (which are\n * potentially invoked in this function) do not meet their specific constraints.\n */\nfunction cloneNode(doc, node, deep) {\n\tvar destRoot;\n\twalkDOM(node, null, {\n\t\tenter: function (srcNode, destParent) {\n\t\t\t// 1. Create a blank node of the same type and copy all scalar own properties.\n\t\t\tvar destNode = new srcNode.constructor(PDC);\n\t\t\tfor (var n in srcNode) {\n\t\t\t\tif (hasOwn(srcNode, n)) {\n\t\t\t\t\tvar v = srcNode[n];\n\t\t\t\t\tif (typeof v != 'object') {\n\t\t\t\t\t\tif (v != destNode[n]) {\n\t\t\t\t\t\t\tdestNode[n] = v;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (srcNode.childNodes) {\n\t\t\t\tdestNode.childNodes = new NodeList();\n\t\t\t}\n\t\t\tdestNode.ownerDocument = doc;\n\t\t\t// 2. Handle node-type-specific setup.\n\t\t\t// Attributes are not DOM children, so they are cloned inline here\n\t\t\t// rather than by walkDOM descent.\n\t\t\t// ATTRIBUTE_NODE forces deep=true so its own children are walked.\n\t\t\tvar shouldDeep = deep;\n\t\t\tswitch (destNode.nodeType) {\n\t\t\t\tcase ELEMENT_NODE:\n\t\t\t\t\tvar attrs = srcNode.attributes;\n\t\t\t\t\tvar attrs2 = (destNode.attributes = new NamedNodeMap());\n\t\t\t\t\tvar len = attrs.length;\n\t\t\t\t\tattrs2._ownerElement = destNode;\n\t\t\t\t\tfor (var i = 0; i < len; i++) {\n\t\t\t\t\t\tdestNode.setAttributeNode(cloneNode(doc, attrs.item(i), true));\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tcase ATTRIBUTE_NODE:\n\t\t\t\t\tshouldDeep = true;\n\t\t\t}\n\t\t\t// 3. Attach to parent, or capture as the root of the cloned subtree.\n\t\t\tif (destParent !== null) {\n\t\t\t\tdestParent.appendChild(destNode);\n\t\t\t} else {\n\t\t\t\tdestRoot = destNode;\n\t\t\t}\n\t\t\t// 4. Return destNode as the context for children (causes walkDOM to descend),\n\t\t\t// or null to skip children (shallow clone).\n\t\t\treturn shouldDeep ? destNode : null;\n\t\t},\n\t});\n\treturn destRoot;\n}\n\nfunction __set__(object, key, value) {\n\tobject[key] = value;\n}\n\n// Returns a new array of direct Element children.\n// Passed to LiveNodeList to implement ParentNode.children.\n// https://dom.spec.whatwg.org/#dom-parentnode-children\nfunction childrenRefresh(node) {\n\tvar ls = [];\n\tvar child = node.firstChild;\n\twhile (child) {\n\t\tif (child.nodeType === ELEMENT_NODE) {\n\t\t\tls.push(child);\n\t\t}\n\t\tchild = child.nextSibling;\n\t}\n\treturn ls;\n}\n\n//do dynamic\ntry {\n\tif (Object.defineProperty) {\n\t\tObject.defineProperty(LiveNodeList.prototype, 'length', {\n\t\t\tget: function () {\n\t\t\t\t_updateLiveList(this);\n\t\t\t\treturn this.$$length;\n\t\t\t},\n\t\t});\n\n\t\t/**\n\t\t * The text content of this node and its descendants.\n\t\t *\n\t\t * For {@link Element} and {@link DocumentFragment} nodes, returns the concatenation of the\n\t\t * `nodeValue` of every descendant text node, excluding processing instruction and comment\n\t\t * nodes. For all other node types, returns `nodeValue`.\n\t\t *\n\t\t * Setting `textContent` on an element or document fragment replaces all child nodes with a\n\t\t * single text node; on other nodes it sets `data`, `value`, and `nodeValue` directly.\n\t\t *\n\t\t * @type {string | null}\n\t\t * @see {@link https://dom.spec.whatwg.org/#dom-node-textcontent}\n\t\t */\n\t\tObject.defineProperty(Node.prototype, 'textContent', {\n\t\t\tget: function () {\n\t\t\t\tif (this.nodeType === ELEMENT_NODE || this.nodeType === DOCUMENT_FRAGMENT_NODE) {\n\t\t\t\t\tvar buf = [];\n\t\t\t\t\twalkDOM(this, null, {\n\t\t\t\t\t\tenter: function (n) {\n\t\t\t\t\t\t\tif (n.nodeType === ELEMENT_NODE || n.nodeType === DOCUMENT_FRAGMENT_NODE) {\n\t\t\t\t\t\t\t\treturn true; // enter children\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (n.nodeType === PROCESSING_INSTRUCTION_NODE || n.nodeType === COMMENT_NODE) {\n\t\t\t\t\t\t\t\treturn null; // excluded from text content\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tbuf.push(n.nodeValue);\n\t\t\t\t\t\t},\n\t\t\t\t\t});\n\t\t\t\t\treturn buf.join('');\n\t\t\t\t}\n\t\t\t\treturn this.nodeValue;\n\t\t\t},\n\n\t\t\tset: function (data) {\n\t\t\t\tswitch (this.nodeType) {\n\t\t\t\t\tcase ELEMENT_NODE:\n\t\t\t\t\tcase DOCUMENT_FRAGMENT_NODE:\n\t\t\t\t\t\twhile (this.firstChild) {\n\t\t\t\t\t\t\tthis.removeChild(this.firstChild);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (data || String(data)) {\n\t\t\t\t\t\t\tthis.appendChild(this.ownerDocument.createTextNode(data));\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tthis.data = data;\n\t\t\t\t\t\tthis.value = data;\n\t\t\t\t\t\tthis.nodeValue = data;\n\t\t\t\t}\n\t\t\t},\n\t\t});\n\n\t\tObject.defineProperty(Element.prototype, 'children', {\n\t\t\tget: function () {\n\t\t\t\treturn new LiveNodeList(this, childrenRefresh);\n\t\t\t},\n\t\t});\n\t\tObject.defineProperty(Document.prototype, 'children', {\n\t\t\tget: function () {\n\t\t\t\treturn new LiveNodeList(this, childrenRefresh);\n\t\t\t},\n\t\t});\n\t\tObject.defineProperty(DocumentFragment.prototype, 'children', {\n\t\t\tget: function () {\n\t\t\t\treturn new LiveNodeList(this, childrenRefresh);\n\t\t\t},\n\t\t});\n\n\t\t__set__ = function (object, key, value) {\n\t\t\t//console.log(value)\n\t\t\tobject['$$' + key] = value;\n\t\t};\n\t}\n} catch (e) {\n\t//ie8\n}\n\nexports._updateLiveList = _updateLiveList;\nexports.Attr = Attr;\nexports.CDATASection = CDATASection;\nexports.CharacterData = CharacterData;\nexports.Comment = Comment;\nexports.Document = Document;\nexports.DocumentFragment = DocumentFragment;\nexports.DocumentType = DocumentType;\nexports.DOMImplementation = DOMImplementation;\nexports.Element = Element;\nexports.Entity = Entity;\nexports.EntityReference = EntityReference;\nexports.LiveNodeList = LiveNodeList;\nexports.NamedNodeMap = NamedNodeMap;\nexports.Node = Node;\nexports.NodeList = NodeList;\nexports.Notation = Notation;\nexports.Text = Text;\nexports.ProcessingInstruction = ProcessingInstruction;\nexports.walkDOM = walkDOM;\nexports.XMLSerializer = XMLSerializer;\n","'use strict';\n\nvar freeze = require('./conventions').freeze;\n\n/**\n * The entities that are predefined in every XML document.\n *\n * @see https://www.w3.org/TR/2006/REC-xml11-20060816/#sec-predefined-ent W3C XML 1.1\n * @see https://www.w3.org/TR/2008/REC-xml-20081126/#sec-predefined-ent W3C XML 1.0\n * @see https://en.wikipedia.org/wiki/List_of_XML_and_HTML_character_entity_references#Predefined_entities_in_XML\n * Wikipedia\n */\nexports.XML_ENTITIES = freeze({\n\tamp: '&',\n\tapos: \"'\",\n\tgt: '>',\n\tlt: '<',\n\tquot: '\"',\n});\n\n/**\n * A map of all entities that are detected in an HTML document.\n * They contain all entries from `XML_ENTITIES`.\n *\n * @see {@link XML_ENTITIES}\n * @see {@link DOMParser.parseFromString}\n * @see {@link DOMImplementation.prototype.createHTMLDocument}\n * @see https://html.spec.whatwg.org/#named-character-references WHATWG HTML(5)\n * Spec\n * @see https://html.spec.whatwg.org/entities.json JSON\n * @see https://www.w3.org/TR/xml-entity-names/ W3C XML Entity Names\n * @see https://www.w3.org/TR/html4/sgml/entities.html W3C HTML4/SGML\n * @see https://en.wikipedia.org/wiki/List_of_XML_and_HTML_character_entity_references#Character_entity_references_in_HTML\n * Wikipedia (HTML)\n * @see https://en.wikipedia.org/wiki/List_of_XML_and_HTML_character_entity_references#Entities_representing_special_characters_in_XHTML\n * Wikpedia (XHTML)\n */\nexports.HTML_ENTITIES = freeze({\n\tAacute: '\\u00C1',\n\taacute: '\\u00E1',\n\tAbreve: '\\u0102',\n\tabreve: '\\u0103',\n\tac: '\\u223E',\n\tacd: '\\u223F',\n\tacE: '\\u223E\\u0333',\n\tAcirc: '\\u00C2',\n\tacirc: '\\u00E2',\n\tacute: '\\u00B4',\n\tAcy: '\\u0410',\n\tacy: '\\u0430',\n\tAElig: '\\u00C6',\n\taelig: '\\u00E6',\n\taf: '\\u2061',\n\tAfr: '\\uD835\\uDD04',\n\tafr: '\\uD835\\uDD1E',\n\tAgrave: '\\u00C0',\n\tagrave: '\\u00E0',\n\talefsym: '\\u2135',\n\taleph: '\\u2135',\n\tAlpha: '\\u0391',\n\talpha: '\\u03B1',\n\tAmacr: '\\u0100',\n\tamacr: '\\u0101',\n\tamalg: '\\u2A3F',\n\tAMP: '\\u0026',\n\tamp: '\\u0026',\n\tAnd: '\\u2A53',\n\tand: '\\u2227',\n\tandand: '\\u2A55',\n\tandd: '\\u2A5C',\n\tandslope: '\\u2A58',\n\tandv: '\\u2A5A',\n\tang: '\\u2220',\n\tange: '\\u29A4',\n\tangle: '\\u2220',\n\tangmsd: '\\u2221',\n\tangmsdaa: '\\u29A8',\n\tangmsdab: '\\u29A9',\n\tangmsdac: '\\u29AA',\n\tangmsdad: '\\u29AB',\n\tangmsdae: '\\u29AC',\n\tangmsdaf: '\\u29AD',\n\tangmsdag: '\\u29AE',\n\tangmsdah: '\\u29AF',\n\tangrt: '\\u221F',\n\tangrtvb: '\\u22BE',\n\tangrtvbd: '\\u299D',\n\tangsph: '\\u2222',\n\tangst: '\\u00C5',\n\tangzarr: '\\u237C',\n\tAogon: '\\u0104',\n\taogon: '\\u0105',\n\tAopf: '\\uD835\\uDD38',\n\taopf: '\\uD835\\uDD52',\n\tap: '\\u2248',\n\tapacir: '\\u2A6F',\n\tapE: '\\u2A70',\n\tape: '\\u224A',\n\tapid: '\\u224B',\n\tapos: '\\u0027',\n\tApplyFunction: '\\u2061',\n\tapprox: '\\u2248',\n\tapproxeq: '\\u224A',\n\tAring: '\\u00C5',\n\taring: '\\u00E5',\n\tAscr: '\\uD835\\uDC9C',\n\tascr: '\\uD835\\uDCB6',\n\tAssign: '\\u2254',\n\tast: '\\u002A',\n\tasymp: '\\u2248',\n\tasympeq: '\\u224D',\n\tAtilde: '\\u00C3',\n\tatilde: '\\u00E3',\n\tAuml: '\\u00C4',\n\tauml: '\\u00E4',\n\tawconint: '\\u2233',\n\tawint: '\\u2A11',\n\tbackcong: '\\u224C',\n\tbackepsilon: '\\u03F6',\n\tbackprime: '\\u2035',\n\tbacksim: '\\u223D',\n\tbacksimeq: '\\u22CD',\n\tBackslash: '\\u2216',\n\tBarv: '\\u2AE7',\n\tbarvee: '\\u22BD',\n\tBarwed: '\\u2306',\n\tbarwed: '\\u2305',\n\tbarwedge: '\\u2305',\n\tbbrk: '\\u23B5',\n\tbbrktbrk: '\\u23B6',\n\tbcong: '\\u224C',\n\tBcy: '\\u0411',\n\tbcy: '\\u0431',\n\tbdquo: '\\u201E',\n\tbecaus: '\\u2235',\n\tBecause: '\\u2235',\n\tbecause: '\\u2235',\n\tbemptyv: '\\u29B0',\n\tbepsi: '\\u03F6',\n\tbernou: '\\u212C',\n\tBernoullis: '\\u212C',\n\tBeta: '\\u0392',\n\tbeta: '\\u03B2',\n\tbeth: '\\u2136',\n\tbetween: '\\u226C',\n\tBfr: '\\uD835\\uDD05',\n\tbfr: '\\uD835\\uDD1F',\n\tbigcap: '\\u22C2',\n\tbigcirc: '\\u25EF',\n\tbigcup: '\\u22C3',\n\tbigodot: '\\u2A00',\n\tbigoplus: '\\u2A01',\n\tbigotimes: '\\u2A02',\n\tbigsqcup: '\\u2A06',\n\tbigstar: '\\u2605',\n\tbigtriangledown: '\\u25BD',\n\tbigtriangleup: '\\u25B3',\n\tbiguplus: '\\u2A04',\n\tbigvee: '\\u22C1',\n\tbigwedge: '\\u22C0',\n\tbkarow: '\\u290D',\n\tblacklozenge: '\\u29EB',\n\tblacksquare: '\\u25AA',\n\tblacktriangle: '\\u25B4',\n\tblacktriangledown: '\\u25BE',\n\tblacktriangleleft: '\\u25C2',\n\tblacktriangleright: '\\u25B8',\n\tblank: '\\u2423',\n\tblk12: '\\u2592',\n\tblk14: '\\u2591',\n\tblk34: '\\u2593',\n\tblock: '\\u2588',\n\tbne: '\\u003D\\u20E5',\n\tbnequiv: '\\u2261\\u20E5',\n\tbNot: '\\u2AED',\n\tbnot: '\\u2310',\n\tBopf: '\\uD835\\uDD39',\n\tbopf: '\\uD835\\uDD53',\n\tbot: '\\u22A5',\n\tbottom: '\\u22A5',\n\tbowtie: '\\u22C8',\n\tboxbox: '\\u29C9',\n\tboxDL: '\\u2557',\n\tboxDl: '\\u2556',\n\tboxdL: '\\u2555',\n\tboxdl: '\\u2510',\n\tboxDR: '\\u2554',\n\tboxDr: '\\u2553',\n\tboxdR: '\\u2552',\n\tboxdr: '\\u250C',\n\tboxH: '\\u2550',\n\tboxh: '\\u2500',\n\tboxHD: '\\u2566',\n\tboxHd: '\\u2564',\n\tboxhD: '\\u2565',\n\tboxhd: '\\u252C',\n\tboxHU: '\\u2569',\n\tboxHu: '\\u2567',\n\tboxhU: '\\u2568',\n\tboxhu: '\\u2534',\n\tboxminus: '\\u229F',\n\tboxplus: '\\u229E',\n\tboxtimes: '\\u22A0',\n\tboxUL: '\\u255D',\n\tboxUl: '\\u255C',\n\tboxuL: '\\u255B',\n\tboxul: '\\u2518',\n\tboxUR: '\\u255A',\n\tboxUr: '\\u2559',\n\tboxuR: '\\u2558',\n\tboxur: '\\u2514',\n\tboxV: '\\u2551',\n\tboxv: '\\u2502',\n\tboxVH: '\\u256C',\n\tboxVh: '\\u256B',\n\tboxvH: '\\u256A',\n\tboxvh: '\\u253C',\n\tboxVL: '\\u2563',\n\tboxVl: '\\u2562',\n\tboxvL: '\\u2561',\n\tboxvl: '\\u2524',\n\tboxVR: '\\u2560',\n\tboxVr: '\\u255F',\n\tboxvR: '\\u255E',\n\tboxvr: '\\u251C',\n\tbprime: '\\u2035',\n\tBreve: '\\u02D8',\n\tbreve: '\\u02D8',\n\tbrvbar: '\\u00A6',\n\tBscr: '\\u212C',\n\tbscr: '\\uD835\\uDCB7',\n\tbsemi: '\\u204F',\n\tbsim: '\\u223D',\n\tbsime: '\\u22CD',\n\tbsol: '\\u005C',\n\tbsolb: '\\u29C5',\n\tbsolhsub: '\\u27C8',\n\tbull: '\\u2022',\n\tbullet: '\\u2022',\n\tbump: '\\u224E',\n\tbumpE: '\\u2AAE',\n\tbumpe: '\\u224F',\n\tBumpeq: '\\u224E',\n\tbumpeq: '\\u224F',\n\tCacute: '\\u0106',\n\tcacute: '\\u0107',\n\tCap: '\\u22D2',\n\tcap: '\\u2229',\n\tcapand: '\\u2A44',\n\tcapbrcup: '\\u2A49',\n\tcapcap: '\\u2A4B',\n\tcapcup: '\\u2A47',\n\tcapdot: '\\u2A40',\n\tCapitalDifferentialD: '\\u2145',\n\tcaps: '\\u2229\\uFE00',\n\tcaret: '\\u2041',\n\tcaron: '\\u02C7',\n\tCayleys: '\\u212D',\n\tccaps: '\\u2A4D',\n\tCcaron: '\\u010C',\n\tccaron: '\\u010D',\n\tCcedil: '\\u00C7',\n\tccedil: '\\u00E7',\n\tCcirc: '\\u0108',\n\tccirc: '\\u0109',\n\tCconint: '\\u2230',\n\tccups: '\\u2A4C',\n\tccupssm: '\\u2A50',\n\tCdot: '\\u010A',\n\tcdot: '\\u010B',\n\tcedil: '\\u00B8',\n\tCedilla: '\\u00B8',\n\tcemptyv: '\\u29B2',\n\tcent: '\\u00A2',\n\tCenterDot: '\\u00B7',\n\tcenterdot: '\\u00B7',\n\tCfr: '\\u212D',\n\tcfr: '\\uD835\\uDD20',\n\tCHcy: '\\u0427',\n\tchcy: '\\u0447',\n\tcheck: '\\u2713',\n\tcheckmark: '\\u2713',\n\tChi: '\\u03A7',\n\tchi: '\\u03C7',\n\tcir: '\\u25CB',\n\tcirc: '\\u02C6',\n\tcirceq: '\\u2257',\n\tcirclearrowleft: '\\u21BA',\n\tcirclearrowright: '\\u21BB',\n\tcircledast: '\\u229B',\n\tcircledcirc: '\\u229A',\n\tcircleddash: '\\u229D',\n\tCircleDot: '\\u2299',\n\tcircledR: '\\u00AE',\n\tcircledS: '\\u24C8',\n\tCircleMinus: '\\u2296',\n\tCirclePlus: '\\u2295',\n\tCircleTimes: '\\u2297',\n\tcirE: '\\u29C3',\n\tcire: '\\u2257',\n\tcirfnint: '\\u2A10',\n\tcirmid: '\\u2AEF',\n\tcirscir: '\\u29C2',\n\tClockwiseContourIntegral: '\\u2232',\n\tCloseCurlyDoubleQuote: '\\u201D',\n\tCloseCurlyQuote: '\\u2019',\n\tclubs: '\\u2663',\n\tclubsuit: '\\u2663',\n\tColon: '\\u2237',\n\tcolon: '\\u003A',\n\tColone: '\\u2A74',\n\tcolone: '\\u2254',\n\tcoloneq: '\\u2254',\n\tcomma: '\\u002C',\n\tcommat: '\\u0040',\n\tcomp: '\\u2201',\n\tcompfn: '\\u2218',\n\tcomplement: '\\u2201',\n\tcomplexes: '\\u2102',\n\tcong: '\\u2245',\n\tcongdot: '\\u2A6D',\n\tCongruent: '\\u2261',\n\tConint: '\\u222F',\n\tconint: '\\u222E',\n\tContourIntegral: '\\u222E',\n\tCopf: '\\u2102',\n\tcopf: '\\uD835\\uDD54',\n\tcoprod: '\\u2210',\n\tCoproduct: '\\u2210',\n\tCOPY: '\\u00A9',\n\tcopy: '\\u00A9',\n\tcopysr: '\\u2117',\n\tCounterClockwiseContourIntegral: '\\u2233',\n\tcrarr: '\\u21B5',\n\tCross: '\\u2A2F',\n\tcross: '\\u2717',\n\tCscr: '\\uD835\\uDC9E',\n\tcscr: '\\uD835\\uDCB8',\n\tcsub: '\\u2ACF',\n\tcsube: '\\u2AD1',\n\tcsup: '\\u2AD0',\n\tcsupe: '\\u2AD2',\n\tctdot: '\\u22EF',\n\tcudarrl: '\\u2938',\n\tcudarrr: '\\u2935',\n\tcuepr: '\\u22DE',\n\tcuesc: '\\u22DF',\n\tcularr: '\\u21B6',\n\tcularrp: '\\u293D',\n\tCup: '\\u22D3',\n\tcup: '\\u222A',\n\tcupbrcap: '\\u2A48',\n\tCupCap: '\\u224D',\n\tcupcap: '\\u2A46',\n\tcupcup: '\\u2A4A',\n\tcupdot: '\\u228D',\n\tcupor: '\\u2A45',\n\tcups: '\\u222A\\uFE00',\n\tcurarr: '\\u21B7',\n\tcurarrm: '\\u293C',\n\tcurlyeqprec: '\\u22DE',\n\tcurlyeqsucc: '\\u22DF',\n\tcurlyvee: '\\u22CE',\n\tcurlywedge: '\\u22CF',\n\tcurren: '\\u00A4',\n\tcurvearrowleft: '\\u21B6',\n\tcurvearrowright: '\\u21B7',\n\tcuvee: '\\u22CE',\n\tcuwed: '\\u22CF',\n\tcwconint: '\\u2232',\n\tcwint: '\\u2231',\n\tcylcty: '\\u232D',\n\tDagger: '\\u2021',\n\tdagger: '\\u2020',\n\tdaleth: '\\u2138',\n\tDarr: '\\u21A1',\n\tdArr: '\\u21D3',\n\tdarr: '\\u2193',\n\tdash: '\\u2010',\n\tDashv: '\\u2AE4',\n\tdashv: '\\u22A3',\n\tdbkarow: '\\u290F',\n\tdblac: '\\u02DD',\n\tDcaron: '\\u010E',\n\tdcaron: '\\u010F',\n\tDcy: '\\u0414',\n\tdcy: '\\u0434',\n\tDD: '\\u2145',\n\tdd: '\\u2146',\n\tddagger: '\\u2021',\n\tddarr: '\\u21CA',\n\tDDotrahd: '\\u2911',\n\tddotseq: '\\u2A77',\n\tdeg: '\\u00B0',\n\tDel: '\\u2207',\n\tDelta: '\\u0394',\n\tdelta: '\\u03B4',\n\tdemptyv: '\\u29B1',\n\tdfisht: '\\u297F',\n\tDfr: '\\uD835\\uDD07',\n\tdfr: '\\uD835\\uDD21',\n\tdHar: '\\u2965',\n\tdharl: '\\u21C3',\n\tdharr: '\\u21C2',\n\tDiacriticalAcute: '\\u00B4',\n\tDiacriticalDot: '\\u02D9',\n\tDiacriticalDoubleAcute: '\\u02DD',\n\tDiacriticalGrave: '\\u0060',\n\tDiacriticalTilde: '\\u02DC',\n\tdiam: '\\u22C4',\n\tDiamond: '\\u22C4',\n\tdiamond: '\\u22C4',\n\tdiamondsuit: '\\u2666',\n\tdiams: '\\u2666',\n\tdie: '\\u00A8',\n\tDifferentialD: '\\u2146',\n\tdigamma: '\\u03DD',\n\tdisin: '\\u22F2',\n\tdiv: '\\u00F7',\n\tdivide: '\\u00F7',\n\tdivideontimes: '\\u22C7',\n\tdivonx: '\\u22C7',\n\tDJcy: '\\u0402',\n\tdjcy: '\\u0452',\n\tdlcorn: '\\u231E',\n\tdlcrop: '\\u230D',\n\tdollar: '\\u0024',\n\tDopf: '\\uD835\\uDD3B',\n\tdopf: '\\uD835\\uDD55',\n\tDot: '\\u00A8',\n\tdot: '\\u02D9',\n\tDotDot: '\\u20DC',\n\tdoteq: '\\u2250',\n\tdoteqdot: '\\u2251',\n\tDotEqual: '\\u2250',\n\tdotminus: '\\u2238',\n\tdotplus: '\\u2214',\n\tdotsquare: '\\u22A1',\n\tdoublebarwedge: '\\u2306',\n\tDoubleContourIntegral: '\\u222F',\n\tDoubleDot: '\\u00A8',\n\tDoubleDownArrow: '\\u21D3',\n\tDoubleLeftArrow: '\\u21D0',\n\tDoubleLeftRightArrow: '\\u21D4',\n\tDoubleLeftTee: '\\u2AE4',\n\tDoubleLongLeftArrow: '\\u27F8',\n\tDoubleLongLeftRightArrow: '\\u27FA',\n\tDoubleLongRightArrow: '\\u27F9',\n\tDoubleRightArrow: '\\u21D2',\n\tDoubleRightTee: '\\u22A8',\n\tDoubleUpArrow: '\\u21D1',\n\tDoubleUpDownArrow: '\\u21D5',\n\tDoubleVerticalBar: '\\u2225',\n\tDownArrow: '\\u2193',\n\tDownarrow: '\\u21D3',\n\tdownarrow: '\\u2193',\n\tDownArrowBar: '\\u2913',\n\tDownArrowUpArrow: '\\u21F5',\n\tDownBreve: '\\u0311',\n\tdowndownarrows: '\\u21CA',\n\tdownharpoonleft: '\\u21C3',\n\tdownharpoonright: '\\u21C2',\n\tDownLeftRightVector: '\\u2950',\n\tDownLeftTeeVector: '\\u295E',\n\tDownLeftVector: '\\u21BD',\n\tDownLeftVectorBar: '\\u2956',\n\tDownRightTeeVector: '\\u295F',\n\tDownRightVector: '\\u21C1',\n\tDownRightVectorBar: '\\u2957',\n\tDownTee: '\\u22A4',\n\tDownTeeArrow: '\\u21A7',\n\tdrbkarow: '\\u2910',\n\tdrcorn: '\\u231F',\n\tdrcrop: '\\u230C',\n\tDscr: '\\uD835\\uDC9F',\n\tdscr: '\\uD835\\uDCB9',\n\tDScy: '\\u0405',\n\tdscy: '\\u0455',\n\tdsol: '\\u29F6',\n\tDstrok: '\\u0110',\n\tdstrok: '\\u0111',\n\tdtdot: '\\u22F1',\n\tdtri: '\\u25BF',\n\tdtrif: '\\u25BE',\n\tduarr: '\\u21F5',\n\tduhar: '\\u296F',\n\tdwangle: '\\u29A6',\n\tDZcy: '\\u040F',\n\tdzcy: '\\u045F',\n\tdzigrarr: '\\u27FF',\n\tEacute: '\\u00C9',\n\teacute: '\\u00E9',\n\teaster: '\\u2A6E',\n\tEcaron: '\\u011A',\n\tecaron: '\\u011B',\n\tecir: '\\u2256',\n\tEcirc: '\\u00CA',\n\tecirc: '\\u00EA',\n\tecolon: '\\u2255',\n\tEcy: '\\u042D',\n\tecy: '\\u044D',\n\teDDot: '\\u2A77',\n\tEdot: '\\u0116',\n\teDot: '\\u2251',\n\tedot: '\\u0117',\n\tee: '\\u2147',\n\tefDot: '\\u2252',\n\tEfr: '\\uD835\\uDD08',\n\tefr: '\\uD835\\uDD22',\n\teg: '\\u2A9A',\n\tEgrave: '\\u00C8',\n\tegrave: '\\u00E8',\n\tegs: '\\u2A96',\n\tegsdot: '\\u2A98',\n\tel: '\\u2A99',\n\tElement: '\\u2208',\n\telinters: '\\u23E7',\n\tell: '\\u2113',\n\tels: '\\u2A95',\n\telsdot: '\\u2A97',\n\tEmacr: '\\u0112',\n\temacr: '\\u0113',\n\tempty: '\\u2205',\n\temptyset: '\\u2205',\n\tEmptySmallSquare: '\\u25FB',\n\temptyv: '\\u2205',\n\tEmptyVerySmallSquare: '\\u25AB',\n\temsp: '\\u2003',\n\temsp13: '\\u2004',\n\temsp14: '\\u2005',\n\tENG: '\\u014A',\n\teng: '\\u014B',\n\tensp: '\\u2002',\n\tEogon: '\\u0118',\n\teogon: '\\u0119',\n\tEopf: '\\uD835\\uDD3C',\n\teopf: '\\uD835\\uDD56',\n\tepar: '\\u22D5',\n\teparsl: '\\u29E3',\n\teplus: '\\u2A71',\n\tepsi: '\\u03B5',\n\tEpsilon: '\\u0395',\n\tepsilon: '\\u03B5',\n\tepsiv: '\\u03F5',\n\teqcirc: '\\u2256',\n\teqcolon: '\\u2255',\n\teqsim: '\\u2242',\n\teqslantgtr: '\\u2A96',\n\teqslantless: '\\u2A95',\n\tEqual: '\\u2A75',\n\tequals: '\\u003D',\n\tEqualTilde: '\\u2242',\n\tequest: '\\u225F',\n\tEquilibrium: '\\u21CC',\n\tequiv: '\\u2261',\n\tequivDD: '\\u2A78',\n\teqvparsl: '\\u29E5',\n\terarr: '\\u2971',\n\terDot: '\\u2253',\n\tEscr: '\\u2130',\n\tescr: '\\u212F',\n\tesdot: '\\u2250',\n\tEsim: '\\u2A73',\n\tesim: '\\u2242',\n\tEta: '\\u0397',\n\teta: '\\u03B7',\n\tETH: '\\u00D0',\n\teth: '\\u00F0',\n\tEuml: '\\u00CB',\n\teuml: '\\u00EB',\n\teuro: '\\u20AC',\n\texcl: '\\u0021',\n\texist: '\\u2203',\n\tExists: '\\u2203',\n\texpectation: '\\u2130',\n\tExponentialE: '\\u2147',\n\texponentiale: '\\u2147',\n\tfallingdotseq: '\\u2252',\n\tFcy: '\\u0424',\n\tfcy: '\\u0444',\n\tfemale: '\\u2640',\n\tffilig: '\\uFB03',\n\tfflig: '\\uFB00',\n\tffllig: '\\uFB04',\n\tFfr: '\\uD835\\uDD09',\n\tffr: '\\uD835\\uDD23',\n\tfilig: '\\uFB01',\n\tFilledSmallSquare: '\\u25FC',\n\tFilledVerySmallSquare: '\\u25AA',\n\tfjlig: '\\u0066\\u006A',\n\tflat: '\\u266D',\n\tfllig: '\\uFB02',\n\tfltns: '\\u25B1',\n\tfnof: '\\u0192',\n\tFopf: '\\uD835\\uDD3D',\n\tfopf: '\\uD835\\uDD57',\n\tForAll: '\\u2200',\n\tforall: '\\u2200',\n\tfork: '\\u22D4',\n\tforkv: '\\u2AD9',\n\tFouriertrf: '\\u2131',\n\tfpartint: '\\u2A0D',\n\tfrac12: '\\u00BD',\n\tfrac13: '\\u2153',\n\tfrac14: '\\u00BC',\n\tfrac15: '\\u2155',\n\tfrac16: '\\u2159',\n\tfrac18: '\\u215B',\n\tfrac23: '\\u2154',\n\tfrac25: '\\u2156',\n\tfrac34: '\\u00BE',\n\tfrac35: '\\u2157',\n\tfrac38: '\\u215C',\n\tfrac45: '\\u2158',\n\tfrac56: '\\u215A',\n\tfrac58: '\\u215D',\n\tfrac78: '\\u215E',\n\tfrasl: '\\u2044',\n\tfrown: '\\u2322',\n\tFscr: '\\u2131',\n\tfscr: '\\uD835\\uDCBB',\n\tgacute: '\\u01F5',\n\tGamma: '\\u0393',\n\tgamma: '\\u03B3',\n\tGammad: '\\u03DC',\n\tgammad: '\\u03DD',\n\tgap: '\\u2A86',\n\tGbreve: '\\u011E',\n\tgbreve: '\\u011F',\n\tGcedil: '\\u0122',\n\tGcirc: '\\u011C',\n\tgcirc: '\\u011D',\n\tGcy: '\\u0413',\n\tgcy: '\\u0433',\n\tGdot: '\\u0120',\n\tgdot: '\\u0121',\n\tgE: '\\u2267',\n\tge: '\\u2265',\n\tgEl: '\\u2A8C',\n\tgel: '\\u22DB',\n\tgeq: '\\u2265',\n\tgeqq: '\\u2267',\n\tgeqslant: '\\u2A7E',\n\tges: '\\u2A7E',\n\tgescc: '\\u2AA9',\n\tgesdot: '\\u2A80',\n\tgesdoto: '\\u2A82',\n\tgesdotol: '\\u2A84',\n\tgesl: '\\u22DB\\uFE00',\n\tgesles: '\\u2A94',\n\tGfr: '\\uD835\\uDD0A',\n\tgfr: '\\uD835\\uDD24',\n\tGg: '\\u22D9',\n\tgg: '\\u226B',\n\tggg: '\\u22D9',\n\tgimel: '\\u2137',\n\tGJcy: '\\u0403',\n\tgjcy: '\\u0453',\n\tgl: '\\u2277',\n\tgla: '\\u2AA5',\n\tglE: '\\u2A92',\n\tglj: '\\u2AA4',\n\tgnap: '\\u2A8A',\n\tgnapprox: '\\u2A8A',\n\tgnE: '\\u2269',\n\tgne: '\\u2A88',\n\tgneq: '\\u2A88',\n\tgneqq: '\\u2269',\n\tgnsim: '\\u22E7',\n\tGopf: '\\uD835\\uDD3E',\n\tgopf: '\\uD835\\uDD58',\n\tgrave: '\\u0060',\n\tGreaterEqual: '\\u2265',\n\tGreaterEqualLess: '\\u22DB',\n\tGreaterFullEqual: '\\u2267',\n\tGreaterGreater: '\\u2AA2',\n\tGreaterLess: '\\u2277',\n\tGreaterSlantEqual: '\\u2A7E',\n\tGreaterTilde: '\\u2273',\n\tGscr: '\\uD835\\uDCA2',\n\tgscr: '\\u210A',\n\tgsim: '\\u2273',\n\tgsime: '\\u2A8E',\n\tgsiml: '\\u2A90',\n\tGt: '\\u226B',\n\tGT: '\\u003E',\n\tgt: '\\u003E',\n\tgtcc: '\\u2AA7',\n\tgtcir: '\\u2A7A',\n\tgtdot: '\\u22D7',\n\tgtlPar: '\\u2995',\n\tgtquest: '\\u2A7C',\n\tgtrapprox: '\\u2A86',\n\tgtrarr: '\\u2978',\n\tgtrdot: '\\u22D7',\n\tgtreqless: '\\u22DB',\n\tgtreqqless: '\\u2A8C',\n\tgtrless: '\\u2277',\n\tgtrsim: '\\u2273',\n\tgvertneqq: '\\u2269\\uFE00',\n\tgvnE: '\\u2269\\uFE00',\n\tHacek: '\\u02C7',\n\thairsp: '\\u200A',\n\thalf: '\\u00BD',\n\thamilt: '\\u210B',\n\tHARDcy: '\\u042A',\n\thardcy: '\\u044A',\n\thArr: '\\u21D4',\n\tharr: '\\u2194',\n\tharrcir: '\\u2948',\n\tharrw: '\\u21AD',\n\tHat: '\\u005E',\n\thbar: '\\u210F',\n\tHcirc: '\\u0124',\n\thcirc: '\\u0125',\n\thearts: '\\u2665',\n\theartsuit: '\\u2665',\n\thellip: '\\u2026',\n\thercon: '\\u22B9',\n\tHfr: '\\u210C',\n\thfr: '\\uD835\\uDD25',\n\tHilbertSpace: '\\u210B',\n\thksearow: '\\u2925',\n\thkswarow: '\\u2926',\n\thoarr: '\\u21FF',\n\thomtht: '\\u223B',\n\thookleftarrow: '\\u21A9',\n\thookrightarrow: '\\u21AA',\n\tHopf: '\\u210D',\n\thopf: '\\uD835\\uDD59',\n\thorbar: '\\u2015',\n\tHorizontalLine: '\\u2500',\n\tHscr: '\\u210B',\n\thscr: '\\uD835\\uDCBD',\n\thslash: '\\u210F',\n\tHstrok: '\\u0126',\n\thstrok: '\\u0127',\n\tHumpDownHump: '\\u224E',\n\tHumpEqual: '\\u224F',\n\thybull: '\\u2043',\n\thyphen: '\\u2010',\n\tIacute: '\\u00CD',\n\tiacute: '\\u00ED',\n\tic: '\\u2063',\n\tIcirc: '\\u00CE',\n\ticirc: '\\u00EE',\n\tIcy: '\\u0418',\n\ticy: '\\u0438',\n\tIdot: '\\u0130',\n\tIEcy: '\\u0415',\n\tiecy: '\\u0435',\n\tiexcl: '\\u00A1',\n\tiff: '\\u21D4',\n\tIfr: '\\u2111',\n\tifr: '\\uD835\\uDD26',\n\tIgrave: '\\u00CC',\n\tigrave: '\\u00EC',\n\tii: '\\u2148',\n\tiiiint: '\\u2A0C',\n\tiiint: '\\u222D',\n\tiinfin: '\\u29DC',\n\tiiota: '\\u2129',\n\tIJlig: '\\u0132',\n\tijlig: '\\u0133',\n\tIm: '\\u2111',\n\tImacr: '\\u012A',\n\timacr: '\\u012B',\n\timage: '\\u2111',\n\tImaginaryI: '\\u2148',\n\timagline: '\\u2110',\n\timagpart: '\\u2111',\n\timath: '\\u0131',\n\timof: '\\u22B7',\n\timped: '\\u01B5',\n\tImplies: '\\u21D2',\n\tin: '\\u2208',\n\tincare: '\\u2105',\n\tinfin: '\\u221E',\n\tinfintie: '\\u29DD',\n\tinodot: '\\u0131',\n\tInt: '\\u222C',\n\tint: '\\u222B',\n\tintcal: '\\u22BA',\n\tintegers: '\\u2124',\n\tIntegral: '\\u222B',\n\tintercal: '\\u22BA',\n\tIntersection: '\\u22C2',\n\tintlarhk: '\\u2A17',\n\tintprod: '\\u2A3C',\n\tInvisibleComma: '\\u2063',\n\tInvisibleTimes: '\\u2062',\n\tIOcy: '\\u0401',\n\tiocy: '\\u0451',\n\tIogon: '\\u012E',\n\tiogon: '\\u012F',\n\tIopf: '\\uD835\\uDD40',\n\tiopf: '\\uD835\\uDD5A',\n\tIota: '\\u0399',\n\tiota: '\\u03B9',\n\tiprod: '\\u2A3C',\n\tiquest: '\\u00BF',\n\tIscr: '\\u2110',\n\tiscr: '\\uD835\\uDCBE',\n\tisin: '\\u2208',\n\tisindot: '\\u22F5',\n\tisinE: '\\u22F9',\n\tisins: '\\u22F4',\n\tisinsv: '\\u22F3',\n\tisinv: '\\u2208',\n\tit: '\\u2062',\n\tItilde: '\\u0128',\n\titilde: '\\u0129',\n\tIukcy: '\\u0406',\n\tiukcy: '\\u0456',\n\tIuml: '\\u00CF',\n\tiuml: '\\u00EF',\n\tJcirc: '\\u0134',\n\tjcirc: '\\u0135',\n\tJcy: '\\u0419',\n\tjcy: '\\u0439',\n\tJfr: '\\uD835\\uDD0D',\n\tjfr: '\\uD835\\uDD27',\n\tjmath: '\\u0237',\n\tJopf: '\\uD835\\uDD41',\n\tjopf: '\\uD835\\uDD5B',\n\tJscr: '\\uD835\\uDCA5',\n\tjscr: '\\uD835\\uDCBF',\n\tJsercy: '\\u0408',\n\tjsercy: '\\u0458',\n\tJukcy: '\\u0404',\n\tjukcy: '\\u0454',\n\tKappa: '\\u039A',\n\tkappa: '\\u03BA',\n\tkappav: '\\u03F0',\n\tKcedil: '\\u0136',\n\tkcedil: '\\u0137',\n\tKcy: '\\u041A',\n\tkcy: '\\u043A',\n\tKfr: '\\uD835\\uDD0E',\n\tkfr: '\\uD835\\uDD28',\n\tkgreen: '\\u0138',\n\tKHcy: '\\u0425',\n\tkhcy: '\\u0445',\n\tKJcy: '\\u040C',\n\tkjcy: '\\u045C',\n\tKopf: '\\uD835\\uDD42',\n\tkopf: '\\uD835\\uDD5C',\n\tKscr: '\\uD835\\uDCA6',\n\tkscr: '\\uD835\\uDCC0',\n\tlAarr: '\\u21DA',\n\tLacute: '\\u0139',\n\tlacute: '\\u013A',\n\tlaemptyv: '\\u29B4',\n\tlagran: '\\u2112',\n\tLambda: '\\u039B',\n\tlambda: '\\u03BB',\n\tLang: '\\u27EA',\n\tlang: '\\u27E8',\n\tlangd: '\\u2991',\n\tlangle: '\\u27E8',\n\tlap: '\\u2A85',\n\tLaplacetrf: '\\u2112',\n\tlaquo: '\\u00AB',\n\tLarr: '\\u219E',\n\tlArr: '\\u21D0',\n\tlarr: '\\u2190',\n\tlarrb: '\\u21E4',\n\tlarrbfs: '\\u291F',\n\tlarrfs: '\\u291D',\n\tlarrhk: '\\u21A9',\n\tlarrlp: '\\u21AB',\n\tlarrpl: '\\u2939',\n\tlarrsim: '\\u2973',\n\tlarrtl: '\\u21A2',\n\tlat: '\\u2AAB',\n\tlAtail: '\\u291B',\n\tlatail: '\\u2919',\n\tlate: '\\u2AAD',\n\tlates: '\\u2AAD\\uFE00',\n\tlBarr: '\\u290E',\n\tlbarr: '\\u290C',\n\tlbbrk: '\\u2772',\n\tlbrace: '\\u007B',\n\tlbrack: '\\u005B',\n\tlbrke: '\\u298B',\n\tlbrksld: '\\u298F',\n\tlbrkslu: '\\u298D',\n\tLcaron: '\\u013D',\n\tlcaron: '\\u013E',\n\tLcedil: '\\u013B',\n\tlcedil: '\\u013C',\n\tlceil: '\\u2308',\n\tlcub: '\\u007B',\n\tLcy: '\\u041B',\n\tlcy: '\\u043B',\n\tldca: '\\u2936',\n\tldquo: '\\u201C',\n\tldquor: '\\u201E',\n\tldrdhar: '\\u2967',\n\tldrushar: '\\u294B',\n\tldsh: '\\u21B2',\n\tlE: '\\u2266',\n\tle: '\\u2264',\n\tLeftAngleBracket: '\\u27E8',\n\tLeftArrow: '\\u2190',\n\tLeftarrow: '\\u21D0',\n\tleftarrow: '\\u2190',\n\tLeftArrowBar: '\\u21E4',\n\tLeftArrowRightArrow: '\\u21C6',\n\tleftarrowtail: '\\u21A2',\n\tLeftCeiling: '\\u2308',\n\tLeftDoubleBracket: '\\u27E6',\n\tLeftDownTeeVector: '\\u2961',\n\tLeftDownVector: '\\u21C3',\n\tLeftDownVectorBar: '\\u2959',\n\tLeftFloor: '\\u230A',\n\tleftharpoondown: '\\u21BD',\n\tleftharpoonup: '\\u21BC',\n\tleftleftarrows: '\\u21C7',\n\tLeftRightArrow: '\\u2194',\n\tLeftrightarrow: '\\u21D4',\n\tleftrightarrow: '\\u2194',\n\tleftrightarrows: '\\u21C6',\n\tleftrightharpoons: '\\u21CB',\n\tleftrightsquigarrow: '\\u21AD',\n\tLeftRightVector: '\\u294E',\n\tLeftTee: '\\u22A3',\n\tLeftTeeArrow: '\\u21A4',\n\tLeftTeeVector: '\\u295A',\n\tleftthreetimes: '\\u22CB',\n\tLeftTriangle: '\\u22B2',\n\tLeftTriangleBar: '\\u29CF',\n\tLeftTriangleEqual: '\\u22B4',\n\tLeftUpDownVector: '\\u2951',\n\tLeftUpTeeVector: '\\u2960',\n\tLeftUpVector: '\\u21BF',\n\tLeftUpVectorBar: '\\u2958',\n\tLeftVector: '\\u21BC',\n\tLeftVectorBar: '\\u2952',\n\tlEg: '\\u2A8B',\n\tleg: '\\u22DA',\n\tleq: '\\u2264',\n\tleqq: '\\u2266',\n\tleqslant: '\\u2A7D',\n\tles: '\\u2A7D',\n\tlescc: '\\u2AA8',\n\tlesdot: '\\u2A7F',\n\tlesdoto: '\\u2A81',\n\tlesdotor: '\\u2A83',\n\tlesg: '\\u22DA\\uFE00',\n\tlesges: '\\u2A93',\n\tlessapprox: '\\u2A85',\n\tlessdot: '\\u22D6',\n\tlesseqgtr: '\\u22DA',\n\tlesseqqgtr: '\\u2A8B',\n\tLessEqualGreater: '\\u22DA',\n\tLessFullEqual: '\\u2266',\n\tLessGreater: '\\u2276',\n\tlessgtr: '\\u2276',\n\tLessLess: '\\u2AA1',\n\tlesssim: '\\u2272',\n\tLessSlantEqual: '\\u2A7D',\n\tLessTilde: '\\u2272',\n\tlfisht: '\\u297C',\n\tlfloor: '\\u230A',\n\tLfr: '\\uD835\\uDD0F',\n\tlfr: '\\uD835\\uDD29',\n\tlg: '\\u2276',\n\tlgE: '\\u2A91',\n\tlHar: '\\u2962',\n\tlhard: '\\u21BD',\n\tlharu: '\\u21BC',\n\tlharul: '\\u296A',\n\tlhblk: '\\u2584',\n\tLJcy: '\\u0409',\n\tljcy: '\\u0459',\n\tLl: '\\u22D8',\n\tll: '\\u226A',\n\tllarr: '\\u21C7',\n\tllcorner: '\\u231E',\n\tLleftarrow: '\\u21DA',\n\tllhard: '\\u296B',\n\tlltri: '\\u25FA',\n\tLmidot: '\\u013F',\n\tlmidot: '\\u0140',\n\tlmoust: '\\u23B0',\n\tlmoustache: '\\u23B0',\n\tlnap: '\\u2A89',\n\tlnapprox: '\\u2A89',\n\tlnE: '\\u2268',\n\tlne: '\\u2A87',\n\tlneq: '\\u2A87',\n\tlneqq: '\\u2268',\n\tlnsim: '\\u22E6',\n\tloang: '\\u27EC',\n\tloarr: '\\u21FD',\n\tlobrk: '\\u27E6',\n\tLongLeftArrow: '\\u27F5',\n\tLongleftarrow: '\\u27F8',\n\tlongleftarrow: '\\u27F5',\n\tLongLeftRightArrow: '\\u27F7',\n\tLongleftrightarrow: '\\u27FA',\n\tlongleftrightarrow: '\\u27F7',\n\tlongmapsto: '\\u27FC',\n\tLongRightArrow: '\\u27F6',\n\tLongrightarrow: '\\u27F9',\n\tlongrightarrow: '\\u27F6',\n\tlooparrowleft: '\\u21AB',\n\tlooparrowright: '\\u21AC',\n\tlopar: '\\u2985',\n\tLopf: '\\uD835\\uDD43',\n\tlopf: '\\uD835\\uDD5D',\n\tloplus: '\\u2A2D',\n\tlotimes: '\\u2A34',\n\tlowast: '\\u2217',\n\tlowbar: '\\u005F',\n\tLowerLeftArrow: '\\u2199',\n\tLowerRightArrow: '\\u2198',\n\tloz: '\\u25CA',\n\tlozenge: '\\u25CA',\n\tlozf: '\\u29EB',\n\tlpar: '\\u0028',\n\tlparlt: '\\u2993',\n\tlrarr: '\\u21C6',\n\tlrcorner: '\\u231F',\n\tlrhar: '\\u21CB',\n\tlrhard: '\\u296D',\n\tlrm: '\\u200E',\n\tlrtri: '\\u22BF',\n\tlsaquo: '\\u2039',\n\tLscr: '\\u2112',\n\tlscr: '\\uD835\\uDCC1',\n\tLsh: '\\u21B0',\n\tlsh: '\\u21B0',\n\tlsim: '\\u2272',\n\tlsime: '\\u2A8D',\n\tlsimg: '\\u2A8F',\n\tlsqb: '\\u005B',\n\tlsquo: '\\u2018',\n\tlsquor: '\\u201A',\n\tLstrok: '\\u0141',\n\tlstrok: '\\u0142',\n\tLt: '\\u226A',\n\tLT: '\\u003C',\n\tlt: '\\u003C',\n\tltcc: '\\u2AA6',\n\tltcir: '\\u2A79',\n\tltdot: '\\u22D6',\n\tlthree: '\\u22CB',\n\tltimes: '\\u22C9',\n\tltlarr: '\\u2976',\n\tltquest: '\\u2A7B',\n\tltri: '\\u25C3',\n\tltrie: '\\u22B4',\n\tltrif: '\\u25C2',\n\tltrPar: '\\u2996',\n\tlurdshar: '\\u294A',\n\tluruhar: '\\u2966',\n\tlvertneqq: '\\u2268\\uFE00',\n\tlvnE: '\\u2268\\uFE00',\n\tmacr: '\\u00AF',\n\tmale: '\\u2642',\n\tmalt: '\\u2720',\n\tmaltese: '\\u2720',\n\tMap: '\\u2905',\n\tmap: '\\u21A6',\n\tmapsto: '\\u21A6',\n\tmapstodown: '\\u21A7',\n\tmapstoleft: '\\u21A4',\n\tmapstoup: '\\u21A5',\n\tmarker: '\\u25AE',\n\tmcomma: '\\u2A29',\n\tMcy: '\\u041C',\n\tmcy: '\\u043C',\n\tmdash: '\\u2014',\n\tmDDot: '\\u223A',\n\tmeasuredangle: '\\u2221',\n\tMediumSpace: '\\u205F',\n\tMellintrf: '\\u2133',\n\tMfr: '\\uD835\\uDD10',\n\tmfr: '\\uD835\\uDD2A',\n\tmho: '\\u2127',\n\tmicro: '\\u00B5',\n\tmid: '\\u2223',\n\tmidast: '\\u002A',\n\tmidcir: '\\u2AF0',\n\tmiddot: '\\u00B7',\n\tminus: '\\u2212',\n\tminusb: '\\u229F',\n\tminusd: '\\u2238',\n\tminusdu: '\\u2A2A',\n\tMinusPlus: '\\u2213',\n\tmlcp: '\\u2ADB',\n\tmldr: '\\u2026',\n\tmnplus: '\\u2213',\n\tmodels: '\\u22A7',\n\tMopf: '\\uD835\\uDD44',\n\tmopf: '\\uD835\\uDD5E',\n\tmp: '\\u2213',\n\tMscr: '\\u2133',\n\tmscr: '\\uD835\\uDCC2',\n\tmstpos: '\\u223E',\n\tMu: '\\u039C',\n\tmu: '\\u03BC',\n\tmultimap: '\\u22B8',\n\tmumap: '\\u22B8',\n\tnabla: '\\u2207',\n\tNacute: '\\u0143',\n\tnacute: '\\u0144',\n\tnang: '\\u2220\\u20D2',\n\tnap: '\\u2249',\n\tnapE: '\\u2A70\\u0338',\n\tnapid: '\\u224B\\u0338',\n\tnapos: '\\u0149',\n\tnapprox: '\\u2249',\n\tnatur: '\\u266E',\n\tnatural: '\\u266E',\n\tnaturals: '\\u2115',\n\tnbsp: '\\u00A0',\n\tnbump: '\\u224E\\u0338',\n\tnbumpe: '\\u224F\\u0338',\n\tncap: '\\u2A43',\n\tNcaron: '\\u0147',\n\tncaron: '\\u0148',\n\tNcedil: '\\u0145',\n\tncedil: '\\u0146',\n\tncong: '\\u2247',\n\tncongdot: '\\u2A6D\\u0338',\n\tncup: '\\u2A42',\n\tNcy: '\\u041D',\n\tncy: '\\u043D',\n\tndash: '\\u2013',\n\tne: '\\u2260',\n\tnearhk: '\\u2924',\n\tneArr: '\\u21D7',\n\tnearr: '\\u2197',\n\tnearrow: '\\u2197',\n\tnedot: '\\u2250\\u0338',\n\tNegativeMediumSpace: '\\u200B',\n\tNegativeThickSpace: '\\u200B',\n\tNegativeThinSpace: '\\u200B',\n\tNegativeVeryThinSpace: '\\u200B',\n\tnequiv: '\\u2262',\n\tnesear: '\\u2928',\n\tnesim: '\\u2242\\u0338',\n\tNestedGreaterGreater: '\\u226B',\n\tNestedLessLess: '\\u226A',\n\tNewLine: '\\u000A',\n\tnexist: '\\u2204',\n\tnexists: '\\u2204',\n\tNfr: '\\uD835\\uDD11',\n\tnfr: '\\uD835\\uDD2B',\n\tngE: '\\u2267\\u0338',\n\tnge: '\\u2271',\n\tngeq: '\\u2271',\n\tngeqq: '\\u2267\\u0338',\n\tngeqslant: '\\u2A7E\\u0338',\n\tnges: '\\u2A7E\\u0338',\n\tnGg: '\\u22D9\\u0338',\n\tngsim: '\\u2275',\n\tnGt: '\\u226B\\u20D2',\n\tngt: '\\u226F',\n\tngtr: '\\u226F',\n\tnGtv: '\\u226B\\u0338',\n\tnhArr: '\\u21CE',\n\tnharr: '\\u21AE',\n\tnhpar: '\\u2AF2',\n\tni: '\\u220B',\n\tnis: '\\u22FC',\n\tnisd: '\\u22FA',\n\tniv: '\\u220B',\n\tNJcy: '\\u040A',\n\tnjcy: '\\u045A',\n\tnlArr: '\\u21CD',\n\tnlarr: '\\u219A',\n\tnldr: '\\u2025',\n\tnlE: '\\u2266\\u0338',\n\tnle: '\\u2270',\n\tnLeftarrow: '\\u21CD',\n\tnleftarrow: '\\u219A',\n\tnLeftrightarrow: '\\u21CE',\n\tnleftrightarrow: '\\u21AE',\n\tnleq: '\\u2270',\n\tnleqq: '\\u2266\\u0338',\n\tnleqslant: '\\u2A7D\\u0338',\n\tnles: '\\u2A7D\\u0338',\n\tnless: '\\u226E',\n\tnLl: '\\u22D8\\u0338',\n\tnlsim: '\\u2274',\n\tnLt: '\\u226A\\u20D2',\n\tnlt: '\\u226E',\n\tnltri: '\\u22EA',\n\tnltrie: '\\u22EC',\n\tnLtv: '\\u226A\\u0338',\n\tnmid: '\\u2224',\n\tNoBreak: '\\u2060',\n\tNonBreakingSpace: '\\u00A0',\n\tNopf: '\\u2115',\n\tnopf: '\\uD835\\uDD5F',\n\tNot: '\\u2AEC',\n\tnot: '\\u00AC',\n\tNotCongruent: '\\u2262',\n\tNotCupCap: '\\u226D',\n\tNotDoubleVerticalBar: '\\u2226',\n\tNotElement: '\\u2209',\n\tNotEqual: '\\u2260',\n\tNotEqualTilde: '\\u2242\\u0338',\n\tNotExists: '\\u2204',\n\tNotGreater: '\\u226F',\n\tNotGreaterEqual: '\\u2271',\n\tNotGreaterFullEqual: '\\u2267\\u0338',\n\tNotGreaterGreater: '\\u226B\\u0338',\n\tNotGreaterLess: '\\u2279',\n\tNotGreaterSlantEqual: '\\u2A7E\\u0338',\n\tNotGreaterTilde: '\\u2275',\n\tNotHumpDownHump: '\\u224E\\u0338',\n\tNotHumpEqual: '\\u224F\\u0338',\n\tnotin: '\\u2209',\n\tnotindot: '\\u22F5\\u0338',\n\tnotinE: '\\u22F9\\u0338',\n\tnotinva: '\\u2209',\n\tnotinvb: '\\u22F7',\n\tnotinvc: '\\u22F6',\n\tNotLeftTriangle: '\\u22EA',\n\tNotLeftTriangleBar: '\\u29CF\\u0338',\n\tNotLeftTriangleEqual: '\\u22EC',\n\tNotLess: '\\u226E',\n\tNotLessEqual: '\\u2270',\n\tNotLessGreater: '\\u2278',\n\tNotLessLess: '\\u226A\\u0338',\n\tNotLessSlantEqual: '\\u2A7D\\u0338',\n\tNotLessTilde: '\\u2274',\n\tNotNestedGreaterGreater: '\\u2AA2\\u0338',\n\tNotNestedLessLess: '\\u2AA1\\u0338',\n\tnotni: '\\u220C',\n\tnotniva: '\\u220C',\n\tnotnivb: '\\u22FE',\n\tnotnivc: '\\u22FD',\n\tNotPrecedes: '\\u2280',\n\tNotPrecedesEqual: '\\u2AAF\\u0338',\n\tNotPrecedesSlantEqual: '\\u22E0',\n\tNotReverseElement: '\\u220C',\n\tNotRightTriangle: '\\u22EB',\n\tNotRightTriangleBar: '\\u29D0\\u0338',\n\tNotRightTriangleEqual: '\\u22ED',\n\tNotSquareSubset: '\\u228F\\u0338',\n\tNotSquareSubsetEqual: '\\u22E2',\n\tNotSquareSuperset: '\\u2290\\u0338',\n\tNotSquareSupersetEqual: '\\u22E3',\n\tNotSubset: '\\u2282\\u20D2',\n\tNotSubsetEqual: '\\u2288',\n\tNotSucceeds: '\\u2281',\n\tNotSucceedsEqual: '\\u2AB0\\u0338',\n\tNotSucceedsSlantEqual: '\\u22E1',\n\tNotSucceedsTilde: '\\u227F\\u0338',\n\tNotSuperset: '\\u2283\\u20D2',\n\tNotSupersetEqual: '\\u2289',\n\tNotTilde: '\\u2241',\n\tNotTildeEqual: '\\u2244',\n\tNotTildeFullEqual: '\\u2247',\n\tNotTildeTilde: '\\u2249',\n\tNotVerticalBar: '\\u2224',\n\tnpar: '\\u2226',\n\tnparallel: '\\u2226',\n\tnparsl: '\\u2AFD\\u20E5',\n\tnpart: '\\u2202\\u0338',\n\tnpolint: '\\u2A14',\n\tnpr: '\\u2280',\n\tnprcue: '\\u22E0',\n\tnpre: '\\u2AAF\\u0338',\n\tnprec: '\\u2280',\n\tnpreceq: '\\u2AAF\\u0338',\n\tnrArr: '\\u21CF',\n\tnrarr: '\\u219B',\n\tnrarrc: '\\u2933\\u0338',\n\tnrarrw: '\\u219D\\u0338',\n\tnRightarrow: '\\u21CF',\n\tnrightarrow: '\\u219B',\n\tnrtri: '\\u22EB',\n\tnrtrie: '\\u22ED',\n\tnsc: '\\u2281',\n\tnsccue: '\\u22E1',\n\tnsce: '\\u2AB0\\u0338',\n\tNscr: '\\uD835\\uDCA9',\n\tnscr: '\\uD835\\uDCC3',\n\tnshortmid: '\\u2224',\n\tnshortparallel: '\\u2226',\n\tnsim: '\\u2241',\n\tnsime: '\\u2244',\n\tnsimeq: '\\u2244',\n\tnsmid: '\\u2224',\n\tnspar: '\\u2226',\n\tnsqsube: '\\u22E2',\n\tnsqsupe: '\\u22E3',\n\tnsub: '\\u2284',\n\tnsubE: '\\u2AC5\\u0338',\n\tnsube: '\\u2288',\n\tnsubset: '\\u2282\\u20D2',\n\tnsubseteq: '\\u2288',\n\tnsubseteqq: '\\u2AC5\\u0338',\n\tnsucc: '\\u2281',\n\tnsucceq: '\\u2AB0\\u0338',\n\tnsup: '\\u2285',\n\tnsupE: '\\u2AC6\\u0338',\n\tnsupe: '\\u2289',\n\tnsupset: '\\u2283\\u20D2',\n\tnsupseteq: '\\u2289',\n\tnsupseteqq: '\\u2AC6\\u0338',\n\tntgl: '\\u2279',\n\tNtilde: '\\u00D1',\n\tntilde: '\\u00F1',\n\tntlg: '\\u2278',\n\tntriangleleft: '\\u22EA',\n\tntrianglelefteq: '\\u22EC',\n\tntriangleright: '\\u22EB',\n\tntrianglerighteq: '\\u22ED',\n\tNu: '\\u039D',\n\tnu: '\\u03BD',\n\tnum: '\\u0023',\n\tnumero: '\\u2116',\n\tnumsp: '\\u2007',\n\tnvap: '\\u224D\\u20D2',\n\tnVDash: '\\u22AF',\n\tnVdash: '\\u22AE',\n\tnvDash: '\\u22AD',\n\tnvdash: '\\u22AC',\n\tnvge: '\\u2265\\u20D2',\n\tnvgt: '\\u003E\\u20D2',\n\tnvHarr: '\\u2904',\n\tnvinfin: '\\u29DE',\n\tnvlArr: '\\u2902',\n\tnvle: '\\u2264\\u20D2',\n\tnvlt: '\\u003C\\u20D2',\n\tnvltrie: '\\u22B4\\u20D2',\n\tnvrArr: '\\u2903',\n\tnvrtrie: '\\u22B5\\u20D2',\n\tnvsim: '\\u223C\\u20D2',\n\tnwarhk: '\\u2923',\n\tnwArr: '\\u21D6',\n\tnwarr: '\\u2196',\n\tnwarrow: '\\u2196',\n\tnwnear: '\\u2927',\n\tOacute: '\\u00D3',\n\toacute: '\\u00F3',\n\toast: '\\u229B',\n\tocir: '\\u229A',\n\tOcirc: '\\u00D4',\n\tocirc: '\\u00F4',\n\tOcy: '\\u041E',\n\tocy: '\\u043E',\n\todash: '\\u229D',\n\tOdblac: '\\u0150',\n\todblac: '\\u0151',\n\todiv: '\\u2A38',\n\todot: '\\u2299',\n\todsold: '\\u29BC',\n\tOElig: '\\u0152',\n\toelig: '\\u0153',\n\tofcir: '\\u29BF',\n\tOfr: '\\uD835\\uDD12',\n\tofr: '\\uD835\\uDD2C',\n\togon: '\\u02DB',\n\tOgrave: '\\u00D2',\n\tograve: '\\u00F2',\n\togt: '\\u29C1',\n\tohbar: '\\u29B5',\n\tohm: '\\u03A9',\n\toint: '\\u222E',\n\tolarr: '\\u21BA',\n\tolcir: '\\u29BE',\n\tolcross: '\\u29BB',\n\toline: '\\u203E',\n\tolt: '\\u29C0',\n\tOmacr: '\\u014C',\n\tomacr: '\\u014D',\n\tOmega: '\\u03A9',\n\tomega: '\\u03C9',\n\tOmicron: '\\u039F',\n\tomicron: '\\u03BF',\n\tomid: '\\u29B6',\n\tominus: '\\u2296',\n\tOopf: '\\uD835\\uDD46',\n\toopf: '\\uD835\\uDD60',\n\topar: '\\u29B7',\n\tOpenCurlyDoubleQuote: '\\u201C',\n\tOpenCurlyQuote: '\\u2018',\n\toperp: '\\u29B9',\n\toplus: '\\u2295',\n\tOr: '\\u2A54',\n\tor: '\\u2228',\n\torarr: '\\u21BB',\n\tord: '\\u2A5D',\n\torder: '\\u2134',\n\torderof: '\\u2134',\n\tordf: '\\u00AA',\n\tordm: '\\u00BA',\n\torigof: '\\u22B6',\n\toror: '\\u2A56',\n\torslope: '\\u2A57',\n\torv: '\\u2A5B',\n\toS: '\\u24C8',\n\tOscr: '\\uD835\\uDCAA',\n\toscr: '\\u2134',\n\tOslash: '\\u00D8',\n\toslash: '\\u00F8',\n\tosol: '\\u2298',\n\tOtilde: '\\u00D5',\n\totilde: '\\u00F5',\n\tOtimes: '\\u2A37',\n\totimes: '\\u2297',\n\totimesas: '\\u2A36',\n\tOuml: '\\u00D6',\n\touml: '\\u00F6',\n\tovbar: '\\u233D',\n\tOverBar: '\\u203E',\n\tOverBrace: '\\u23DE',\n\tOverBracket: '\\u23B4',\n\tOverParenthesis: '\\u23DC',\n\tpar: '\\u2225',\n\tpara: '\\u00B6',\n\tparallel: '\\u2225',\n\tparsim: '\\u2AF3',\n\tparsl: '\\u2AFD',\n\tpart: '\\u2202',\n\tPartialD: '\\u2202',\n\tPcy: '\\u041F',\n\tpcy: '\\u043F',\n\tpercnt: '\\u0025',\n\tperiod: '\\u002E',\n\tpermil: '\\u2030',\n\tperp: '\\u22A5',\n\tpertenk: '\\u2031',\n\tPfr: '\\uD835\\uDD13',\n\tpfr: '\\uD835\\uDD2D',\n\tPhi: '\\u03A6',\n\tphi: '\\u03C6',\n\tphiv: '\\u03D5',\n\tphmmat: '\\u2133',\n\tphone: '\\u260E',\n\tPi: '\\u03A0',\n\tpi: '\\u03C0',\n\tpitchfork: '\\u22D4',\n\tpiv: '\\u03D6',\n\tplanck: '\\u210F',\n\tplanckh: '\\u210E',\n\tplankv: '\\u210F',\n\tplus: '\\u002B',\n\tplusacir: '\\u2A23',\n\tplusb: '\\u229E',\n\tpluscir: '\\u2A22',\n\tplusdo: '\\u2214',\n\tplusdu: '\\u2A25',\n\tpluse: '\\u2A72',\n\tPlusMinus: '\\u00B1',\n\tplusmn: '\\u00B1',\n\tplussim: '\\u2A26',\n\tplustwo: '\\u2A27',\n\tpm: '\\u00B1',\n\tPoincareplane: '\\u210C',\n\tpointint: '\\u2A15',\n\tPopf: '\\u2119',\n\tpopf: '\\uD835\\uDD61',\n\tpound: '\\u00A3',\n\tPr: '\\u2ABB',\n\tpr: '\\u227A',\n\tprap: '\\u2AB7',\n\tprcue: '\\u227C',\n\tprE: '\\u2AB3',\n\tpre: '\\u2AAF',\n\tprec: '\\u227A',\n\tprecapprox: '\\u2AB7',\n\tpreccurlyeq: '\\u227C',\n\tPrecedes: '\\u227A',\n\tPrecedesEqual: '\\u2AAF',\n\tPrecedesSlantEqual: '\\u227C',\n\tPrecedesTilde: '\\u227E',\n\tpreceq: '\\u2AAF',\n\tprecnapprox: '\\u2AB9',\n\tprecneqq: '\\u2AB5',\n\tprecnsim: '\\u22E8',\n\tprecsim: '\\u227E',\n\tPrime: '\\u2033',\n\tprime: '\\u2032',\n\tprimes: '\\u2119',\n\tprnap: '\\u2AB9',\n\tprnE: '\\u2AB5',\n\tprnsim: '\\u22E8',\n\tprod: '\\u220F',\n\tProduct: '\\u220F',\n\tprofalar: '\\u232E',\n\tprofline: '\\u2312',\n\tprofsurf: '\\u2313',\n\tprop: '\\u221D',\n\tProportion: '\\u2237',\n\tProportional: '\\u221D',\n\tpropto: '\\u221D',\n\tprsim: '\\u227E',\n\tprurel: '\\u22B0',\n\tPscr: '\\uD835\\uDCAB',\n\tpscr: '\\uD835\\uDCC5',\n\tPsi: '\\u03A8',\n\tpsi: '\\u03C8',\n\tpuncsp: '\\u2008',\n\tQfr: '\\uD835\\uDD14',\n\tqfr: '\\uD835\\uDD2E',\n\tqint: '\\u2A0C',\n\tQopf: '\\u211A',\n\tqopf: '\\uD835\\uDD62',\n\tqprime: '\\u2057',\n\tQscr: '\\uD835\\uDCAC',\n\tqscr: '\\uD835\\uDCC6',\n\tquaternions: '\\u210D',\n\tquatint: '\\u2A16',\n\tquest: '\\u003F',\n\tquesteq: '\\u225F',\n\tQUOT: '\\u0022',\n\tquot: '\\u0022',\n\trAarr: '\\u21DB',\n\trace: '\\u223D\\u0331',\n\tRacute: '\\u0154',\n\tracute: '\\u0155',\n\tradic: '\\u221A',\n\traemptyv: '\\u29B3',\n\tRang: '\\u27EB',\n\trang: '\\u27E9',\n\trangd: '\\u2992',\n\trange: '\\u29A5',\n\trangle: '\\u27E9',\n\traquo: '\\u00BB',\n\tRarr: '\\u21A0',\n\trArr: '\\u21D2',\n\trarr: '\\u2192',\n\trarrap: '\\u2975',\n\trarrb: '\\u21E5',\n\trarrbfs: '\\u2920',\n\trarrc: '\\u2933',\n\trarrfs: '\\u291E',\n\trarrhk: '\\u21AA',\n\trarrlp: '\\u21AC',\n\trarrpl: '\\u2945',\n\trarrsim: '\\u2974',\n\tRarrtl: '\\u2916',\n\trarrtl: '\\u21A3',\n\trarrw: '\\u219D',\n\trAtail: '\\u291C',\n\tratail: '\\u291A',\n\tratio: '\\u2236',\n\trationals: '\\u211A',\n\tRBarr: '\\u2910',\n\trBarr: '\\u290F',\n\trbarr: '\\u290D',\n\trbbrk: '\\u2773',\n\trbrace: '\\u007D',\n\trbrack: '\\u005D',\n\trbrke: '\\u298C',\n\trbrksld: '\\u298E',\n\trbrkslu: '\\u2990',\n\tRcaron: '\\u0158',\n\trcaron: '\\u0159',\n\tRcedil: '\\u0156',\n\trcedil: '\\u0157',\n\trceil: '\\u2309',\n\trcub: '\\u007D',\n\tRcy: '\\u0420',\n\trcy: '\\u0440',\n\trdca: '\\u2937',\n\trdldhar: '\\u2969',\n\trdquo: '\\u201D',\n\trdquor: '\\u201D',\n\trdsh: '\\u21B3',\n\tRe: '\\u211C',\n\treal: '\\u211C',\n\trealine: '\\u211B',\n\trealpart: '\\u211C',\n\treals: '\\u211D',\n\trect: '\\u25AD',\n\tREG: '\\u00AE',\n\treg: '\\u00AE',\n\tReverseElement: '\\u220B',\n\tReverseEquilibrium: '\\u21CB',\n\tReverseUpEquilibrium: '\\u296F',\n\trfisht: '\\u297D',\n\trfloor: '\\u230B',\n\tRfr: '\\u211C',\n\trfr: '\\uD835\\uDD2F',\n\trHar: '\\u2964',\n\trhard: '\\u21C1',\n\trharu: '\\u21C0',\n\trharul: '\\u296C',\n\tRho: '\\u03A1',\n\trho: '\\u03C1',\n\trhov: '\\u03F1',\n\tRightAngleBracket: '\\u27E9',\n\tRightArrow: '\\u2192',\n\tRightarrow: '\\u21D2',\n\trightarrow: '\\u2192',\n\tRightArrowBar: '\\u21E5',\n\tRightArrowLeftArrow: '\\u21C4',\n\trightarrowtail: '\\u21A3',\n\tRightCeiling: '\\u2309',\n\tRightDoubleBracket: '\\u27E7',\n\tRightDownTeeVector: '\\u295D',\n\tRightDownVector: '\\u21C2',\n\tRightDownVectorBar: '\\u2955',\n\tRightFloor: '\\u230B',\n\trightharpoondown: '\\u21C1',\n\trightharpoonup: '\\u21C0',\n\trightleftarrows: '\\u21C4',\n\trightleftharpoons: '\\u21CC',\n\trightrightarrows: '\\u21C9',\n\trightsquigarrow: '\\u219D',\n\tRightTee: '\\u22A2',\n\tRightTeeArrow: '\\u21A6',\n\tRightTeeVector: '\\u295B',\n\trightthreetimes: '\\u22CC',\n\tRightTriangle: '\\u22B3',\n\tRightTriangleBar: '\\u29D0',\n\tRightTriangleEqual: '\\u22B5',\n\tRightUpDownVector: '\\u294F',\n\tRightUpTeeVector: '\\u295C',\n\tRightUpVector: '\\u21BE',\n\tRightUpVectorBar: '\\u2954',\n\tRightVector: '\\u21C0',\n\tRightVectorBar: '\\u2953',\n\tring: '\\u02DA',\n\trisingdotseq: '\\u2253',\n\trlarr: '\\u21C4',\n\trlhar: '\\u21CC',\n\trlm: '\\u200F',\n\trmoust: '\\u23B1',\n\trmoustache: '\\u23B1',\n\trnmid: '\\u2AEE',\n\troang: '\\u27ED',\n\troarr: '\\u21FE',\n\trobrk: '\\u27E7',\n\tropar: '\\u2986',\n\tRopf: '\\u211D',\n\tropf: '\\uD835\\uDD63',\n\troplus: '\\u2A2E',\n\trotimes: '\\u2A35',\n\tRoundImplies: '\\u2970',\n\trpar: '\\u0029',\n\trpargt: '\\u2994',\n\trppolint: '\\u2A12',\n\trrarr: '\\u21C9',\n\tRrightarrow: '\\u21DB',\n\trsaquo: '\\u203A',\n\tRscr: '\\u211B',\n\trscr: '\\uD835\\uDCC7',\n\tRsh: '\\u21B1',\n\trsh: '\\u21B1',\n\trsqb: '\\u005D',\n\trsquo: '\\u2019',\n\trsquor: '\\u2019',\n\trthree: '\\u22CC',\n\trtimes: '\\u22CA',\n\trtri: '\\u25B9',\n\trtrie: '\\u22B5',\n\trtrif: '\\u25B8',\n\trtriltri: '\\u29CE',\n\tRuleDelayed: '\\u29F4',\n\truluhar: '\\u2968',\n\trx: '\\u211E',\n\tSacute: '\\u015A',\n\tsacute: '\\u015B',\n\tsbquo: '\\u201A',\n\tSc: '\\u2ABC',\n\tsc: '\\u227B',\n\tscap: '\\u2AB8',\n\tScaron: '\\u0160',\n\tscaron: '\\u0161',\n\tsccue: '\\u227D',\n\tscE: '\\u2AB4',\n\tsce: '\\u2AB0',\n\tScedil: '\\u015E',\n\tscedil: '\\u015F',\n\tScirc: '\\u015C',\n\tscirc: '\\u015D',\n\tscnap: '\\u2ABA',\n\tscnE: '\\u2AB6',\n\tscnsim: '\\u22E9',\n\tscpolint: '\\u2A13',\n\tscsim: '\\u227F',\n\tScy: '\\u0421',\n\tscy: '\\u0441',\n\tsdot: '\\u22C5',\n\tsdotb: '\\u22A1',\n\tsdote: '\\u2A66',\n\tsearhk: '\\u2925',\n\tseArr: '\\u21D8',\n\tsearr: '\\u2198',\n\tsearrow: '\\u2198',\n\tsect: '\\u00A7',\n\tsemi: '\\u003B',\n\tseswar: '\\u2929',\n\tsetminus: '\\u2216',\n\tsetmn: '\\u2216',\n\tsext: '\\u2736',\n\tSfr: '\\uD835\\uDD16',\n\tsfr: '\\uD835\\uDD30',\n\tsfrown: '\\u2322',\n\tsharp: '\\u266F',\n\tSHCHcy: '\\u0429',\n\tshchcy: '\\u0449',\n\tSHcy: '\\u0428',\n\tshcy: '\\u0448',\n\tShortDownArrow: '\\u2193',\n\tShortLeftArrow: '\\u2190',\n\tshortmid: '\\u2223',\n\tshortparallel: '\\u2225',\n\tShortRightArrow: '\\u2192',\n\tShortUpArrow: '\\u2191',\n\tshy: '\\u00AD',\n\tSigma: '\\u03A3',\n\tsigma: '\\u03C3',\n\tsigmaf: '\\u03C2',\n\tsigmav: '\\u03C2',\n\tsim: '\\u223C',\n\tsimdot: '\\u2A6A',\n\tsime: '\\u2243',\n\tsimeq: '\\u2243',\n\tsimg: '\\u2A9E',\n\tsimgE: '\\u2AA0',\n\tsiml: '\\u2A9D',\n\tsimlE: '\\u2A9F',\n\tsimne: '\\u2246',\n\tsimplus: '\\u2A24',\n\tsimrarr: '\\u2972',\n\tslarr: '\\u2190',\n\tSmallCircle: '\\u2218',\n\tsmallsetminus: '\\u2216',\n\tsmashp: '\\u2A33',\n\tsmeparsl: '\\u29E4',\n\tsmid: '\\u2223',\n\tsmile: '\\u2323',\n\tsmt: '\\u2AAA',\n\tsmte: '\\u2AAC',\n\tsmtes: '\\u2AAC\\uFE00',\n\tSOFTcy: '\\u042C',\n\tsoftcy: '\\u044C',\n\tsol: '\\u002F',\n\tsolb: '\\u29C4',\n\tsolbar: '\\u233F',\n\tSopf: '\\uD835\\uDD4A',\n\tsopf: '\\uD835\\uDD64',\n\tspades: '\\u2660',\n\tspadesuit: '\\u2660',\n\tspar: '\\u2225',\n\tsqcap: '\\u2293',\n\tsqcaps: '\\u2293\\uFE00',\n\tsqcup: '\\u2294',\n\tsqcups: '\\u2294\\uFE00',\n\tSqrt: '\\u221A',\n\tsqsub: '\\u228F',\n\tsqsube: '\\u2291',\n\tsqsubset: '\\u228F',\n\tsqsubseteq: '\\u2291',\n\tsqsup: '\\u2290',\n\tsqsupe: '\\u2292',\n\tsqsupset: '\\u2290',\n\tsqsupseteq: '\\u2292',\n\tsqu: '\\u25A1',\n\tSquare: '\\u25A1',\n\tsquare: '\\u25A1',\n\tSquareIntersection: '\\u2293',\n\tSquareSubset: '\\u228F',\n\tSquareSubsetEqual: '\\u2291',\n\tSquareSuperset: '\\u2290',\n\tSquareSupersetEqual: '\\u2292',\n\tSquareUnion: '\\u2294',\n\tsquarf: '\\u25AA',\n\tsquf: '\\u25AA',\n\tsrarr: '\\u2192',\n\tSscr: '\\uD835\\uDCAE',\n\tsscr: '\\uD835\\uDCC8',\n\tssetmn: '\\u2216',\n\tssmile: '\\u2323',\n\tsstarf: '\\u22C6',\n\tStar: '\\u22C6',\n\tstar: '\\u2606',\n\tstarf: '\\u2605',\n\tstraightepsilon: '\\u03F5',\n\tstraightphi: '\\u03D5',\n\tstrns: '\\u00AF',\n\tSub: '\\u22D0',\n\tsub: '\\u2282',\n\tsubdot: '\\u2ABD',\n\tsubE: '\\u2AC5',\n\tsube: '\\u2286',\n\tsubedot: '\\u2AC3',\n\tsubmult: '\\u2AC1',\n\tsubnE: '\\u2ACB',\n\tsubne: '\\u228A',\n\tsubplus: '\\u2ABF',\n\tsubrarr: '\\u2979',\n\tSubset: '\\u22D0',\n\tsubset: '\\u2282',\n\tsubseteq: '\\u2286',\n\tsubseteqq: '\\u2AC5',\n\tSubsetEqual: '\\u2286',\n\tsubsetneq: '\\u228A',\n\tsubsetneqq: '\\u2ACB',\n\tsubsim: '\\u2AC7',\n\tsubsub: '\\u2AD5',\n\tsubsup: '\\u2AD3',\n\tsucc: '\\u227B',\n\tsuccapprox: '\\u2AB8',\n\tsucccurlyeq: '\\u227D',\n\tSucceeds: '\\u227B',\n\tSucceedsEqual: '\\u2AB0',\n\tSucceedsSlantEqual: '\\u227D',\n\tSucceedsTilde: '\\u227F',\n\tsucceq: '\\u2AB0',\n\tsuccnapprox: '\\u2ABA',\n\tsuccneqq: '\\u2AB6',\n\tsuccnsim: '\\u22E9',\n\tsuccsim: '\\u227F',\n\tSuchThat: '\\u220B',\n\tSum: '\\u2211',\n\tsum: '\\u2211',\n\tsung: '\\u266A',\n\tSup: '\\u22D1',\n\tsup: '\\u2283',\n\tsup1: '\\u00B9',\n\tsup2: '\\u00B2',\n\tsup3: '\\u00B3',\n\tsupdot: '\\u2ABE',\n\tsupdsub: '\\u2AD8',\n\tsupE: '\\u2AC6',\n\tsupe: '\\u2287',\n\tsupedot: '\\u2AC4',\n\tSuperset: '\\u2283',\n\tSupersetEqual: '\\u2287',\n\tsuphsol: '\\u27C9',\n\tsuphsub: '\\u2AD7',\n\tsuplarr: '\\u297B',\n\tsupmult: '\\u2AC2',\n\tsupnE: '\\u2ACC',\n\tsupne: '\\u228B',\n\tsupplus: '\\u2AC0',\n\tSupset: '\\u22D1',\n\tsupset: '\\u2283',\n\tsupseteq: '\\u2287',\n\tsupseteqq: '\\u2AC6',\n\tsupsetneq: '\\u228B',\n\tsupsetneqq: '\\u2ACC',\n\tsupsim: '\\u2AC8',\n\tsupsub: '\\u2AD4',\n\tsupsup: '\\u2AD6',\n\tswarhk: '\\u2926',\n\tswArr: '\\u21D9',\n\tswarr: '\\u2199',\n\tswarrow: '\\u2199',\n\tswnwar: '\\u292A',\n\tszlig: '\\u00DF',\n\tTab: '\\u0009',\n\ttarget: '\\u2316',\n\tTau: '\\u03A4',\n\ttau: '\\u03C4',\n\ttbrk: '\\u23B4',\n\tTcaron: '\\u0164',\n\ttcaron: '\\u0165',\n\tTcedil: '\\u0162',\n\ttcedil: '\\u0163',\n\tTcy: '\\u0422',\n\ttcy: '\\u0442',\n\ttdot: '\\u20DB',\n\ttelrec: '\\u2315',\n\tTfr: '\\uD835\\uDD17',\n\ttfr: '\\uD835\\uDD31',\n\tthere4: '\\u2234',\n\tTherefore: '\\u2234',\n\ttherefore: '\\u2234',\n\tTheta: '\\u0398',\n\ttheta: '\\u03B8',\n\tthetasym: '\\u03D1',\n\tthetav: '\\u03D1',\n\tthickapprox: '\\u2248',\n\tthicksim: '\\u223C',\n\tThickSpace: '\\u205F\\u200A',\n\tthinsp: '\\u2009',\n\tThinSpace: '\\u2009',\n\tthkap: '\\u2248',\n\tthksim: '\\u223C',\n\tTHORN: '\\u00DE',\n\tthorn: '\\u00FE',\n\tTilde: '\\u223C',\n\ttilde: '\\u02DC',\n\tTildeEqual: '\\u2243',\n\tTildeFullEqual: '\\u2245',\n\tTildeTilde: '\\u2248',\n\ttimes: '\\u00D7',\n\ttimesb: '\\u22A0',\n\ttimesbar: '\\u2A31',\n\ttimesd: '\\u2A30',\n\ttint: '\\u222D',\n\ttoea: '\\u2928',\n\ttop: '\\u22A4',\n\ttopbot: '\\u2336',\n\ttopcir: '\\u2AF1',\n\tTopf: '\\uD835\\uDD4B',\n\ttopf: '\\uD835\\uDD65',\n\ttopfork: '\\u2ADA',\n\ttosa: '\\u2929',\n\ttprime: '\\u2034',\n\tTRADE: '\\u2122',\n\ttrade: '\\u2122',\n\ttriangle: '\\u25B5',\n\ttriangledown: '\\u25BF',\n\ttriangleleft: '\\u25C3',\n\ttrianglelefteq: '\\u22B4',\n\ttriangleq: '\\u225C',\n\ttriangleright: '\\u25B9',\n\ttrianglerighteq: '\\u22B5',\n\ttridot: '\\u25EC',\n\ttrie: '\\u225C',\n\ttriminus: '\\u2A3A',\n\tTripleDot: '\\u20DB',\n\ttriplus: '\\u2A39',\n\ttrisb: '\\u29CD',\n\ttritime: '\\u2A3B',\n\ttrpezium: '\\u23E2',\n\tTscr: '\\uD835\\uDCAF',\n\ttscr: '\\uD835\\uDCC9',\n\tTScy: '\\u0426',\n\ttscy: '\\u0446',\n\tTSHcy: '\\u040B',\n\ttshcy: '\\u045B',\n\tTstrok: '\\u0166',\n\ttstrok: '\\u0167',\n\ttwixt: '\\u226C',\n\ttwoheadleftarrow: '\\u219E',\n\ttwoheadrightarrow: '\\u21A0',\n\tUacute: '\\u00DA',\n\tuacute: '\\u00FA',\n\tUarr: '\\u219F',\n\tuArr: '\\u21D1',\n\tuarr: '\\u2191',\n\tUarrocir: '\\u2949',\n\tUbrcy: '\\u040E',\n\tubrcy: '\\u045E',\n\tUbreve: '\\u016C',\n\tubreve: '\\u016D',\n\tUcirc: '\\u00DB',\n\tucirc: '\\u00FB',\n\tUcy: '\\u0423',\n\tucy: '\\u0443',\n\tudarr: '\\u21C5',\n\tUdblac: '\\u0170',\n\tudblac: '\\u0171',\n\tudhar: '\\u296E',\n\tufisht: '\\u297E',\n\tUfr: '\\uD835\\uDD18',\n\tufr: '\\uD835\\uDD32',\n\tUgrave: '\\u00D9',\n\tugrave: '\\u00F9',\n\tuHar: '\\u2963',\n\tuharl: '\\u21BF',\n\tuharr: '\\u21BE',\n\tuhblk: '\\u2580',\n\tulcorn: '\\u231C',\n\tulcorner: '\\u231C',\n\tulcrop: '\\u230F',\n\tultri: '\\u25F8',\n\tUmacr: '\\u016A',\n\tumacr: '\\u016B',\n\tuml: '\\u00A8',\n\tUnderBar: '\\u005F',\n\tUnderBrace: '\\u23DF',\n\tUnderBracket: '\\u23B5',\n\tUnderParenthesis: '\\u23DD',\n\tUnion: '\\u22C3',\n\tUnionPlus: '\\u228E',\n\tUogon: '\\u0172',\n\tuogon: '\\u0173',\n\tUopf: '\\uD835\\uDD4C',\n\tuopf: '\\uD835\\uDD66',\n\tUpArrow: '\\u2191',\n\tUparrow: '\\u21D1',\n\tuparrow: '\\u2191',\n\tUpArrowBar: '\\u2912',\n\tUpArrowDownArrow: '\\u21C5',\n\tUpDownArrow: '\\u2195',\n\tUpdownarrow: '\\u21D5',\n\tupdownarrow: '\\u2195',\n\tUpEquilibrium: '\\u296E',\n\tupharpoonleft: '\\u21BF',\n\tupharpoonright: '\\u21BE',\n\tuplus: '\\u228E',\n\tUpperLeftArrow: '\\u2196',\n\tUpperRightArrow: '\\u2197',\n\tUpsi: '\\u03D2',\n\tupsi: '\\u03C5',\n\tupsih: '\\u03D2',\n\tUpsilon: '\\u03A5',\n\tupsilon: '\\u03C5',\n\tUpTee: '\\u22A5',\n\tUpTeeArrow: '\\u21A5',\n\tupuparrows: '\\u21C8',\n\turcorn: '\\u231D',\n\turcorner: '\\u231D',\n\turcrop: '\\u230E',\n\tUring: '\\u016E',\n\turing: '\\u016F',\n\turtri: '\\u25F9',\n\tUscr: '\\uD835\\uDCB0',\n\tuscr: '\\uD835\\uDCCA',\n\tutdot: '\\u22F0',\n\tUtilde: '\\u0168',\n\tutilde: '\\u0169',\n\tutri: '\\u25B5',\n\tutrif: '\\u25B4',\n\tuuarr: '\\u21C8',\n\tUuml: '\\u00DC',\n\tuuml: '\\u00FC',\n\tuwangle: '\\u29A7',\n\tvangrt: '\\u299C',\n\tvarepsilon: '\\u03F5',\n\tvarkappa: '\\u03F0',\n\tvarnothing: '\\u2205',\n\tvarphi: '\\u03D5',\n\tvarpi: '\\u03D6',\n\tvarpropto: '\\u221D',\n\tvArr: '\\u21D5',\n\tvarr: '\\u2195',\n\tvarrho: '\\u03F1',\n\tvarsigma: '\\u03C2',\n\tvarsubsetneq: '\\u228A\\uFE00',\n\tvarsubsetneqq: '\\u2ACB\\uFE00',\n\tvarsupsetneq: '\\u228B\\uFE00',\n\tvarsupsetneqq: '\\u2ACC\\uFE00',\n\tvartheta: '\\u03D1',\n\tvartriangleleft: '\\u22B2',\n\tvartriangleright: '\\u22B3',\n\tVbar: '\\u2AEB',\n\tvBar: '\\u2AE8',\n\tvBarv: '\\u2AE9',\n\tVcy: '\\u0412',\n\tvcy: '\\u0432',\n\tVDash: '\\u22AB',\n\tVdash: '\\u22A9',\n\tvDash: '\\u22A8',\n\tvdash: '\\u22A2',\n\tVdashl: '\\u2AE6',\n\tVee: '\\u22C1',\n\tvee: '\\u2228',\n\tveebar: '\\u22BB',\n\tveeeq: '\\u225A',\n\tvellip: '\\u22EE',\n\tVerbar: '\\u2016',\n\tverbar: '\\u007C',\n\tVert: '\\u2016',\n\tvert: '\\u007C',\n\tVerticalBar: '\\u2223',\n\tVerticalLine: '\\u007C',\n\tVerticalSeparator: '\\u2758',\n\tVerticalTilde: '\\u2240',\n\tVeryThinSpace: '\\u200A',\n\tVfr: '\\uD835\\uDD19',\n\tvfr: '\\uD835\\uDD33',\n\tvltri: '\\u22B2',\n\tvnsub: '\\u2282\\u20D2',\n\tvnsup: '\\u2283\\u20D2',\n\tVopf: '\\uD835\\uDD4D',\n\tvopf: '\\uD835\\uDD67',\n\tvprop: '\\u221D',\n\tvrtri: '\\u22B3',\n\tVscr: '\\uD835\\uDCB1',\n\tvscr: '\\uD835\\uDCCB',\n\tvsubnE: '\\u2ACB\\uFE00',\n\tvsubne: '\\u228A\\uFE00',\n\tvsupnE: '\\u2ACC\\uFE00',\n\tvsupne: '\\u228B\\uFE00',\n\tVvdash: '\\u22AA',\n\tvzigzag: '\\u299A',\n\tWcirc: '\\u0174',\n\twcirc: '\\u0175',\n\twedbar: '\\u2A5F',\n\tWedge: '\\u22C0',\n\twedge: '\\u2227',\n\twedgeq: '\\u2259',\n\tweierp: '\\u2118',\n\tWfr: '\\uD835\\uDD1A',\n\twfr: '\\uD835\\uDD34',\n\tWopf: '\\uD835\\uDD4E',\n\twopf: '\\uD835\\uDD68',\n\twp: '\\u2118',\n\twr: '\\u2240',\n\twreath: '\\u2240',\n\tWscr: '\\uD835\\uDCB2',\n\twscr: '\\uD835\\uDCCC',\n\txcap: '\\u22C2',\n\txcirc: '\\u25EF',\n\txcup: '\\u22C3',\n\txdtri: '\\u25BD',\n\tXfr: '\\uD835\\uDD1B',\n\txfr: '\\uD835\\uDD35',\n\txhArr: '\\u27FA',\n\txharr: '\\u27F7',\n\tXi: '\\u039E',\n\txi: '\\u03BE',\n\txlArr: '\\u27F8',\n\txlarr: '\\u27F5',\n\txmap: '\\u27FC',\n\txnis: '\\u22FB',\n\txodot: '\\u2A00',\n\tXopf: '\\uD835\\uDD4F',\n\txopf: '\\uD835\\uDD69',\n\txoplus: '\\u2A01',\n\txotime: '\\u2A02',\n\txrArr: '\\u27F9',\n\txrarr: '\\u27F6',\n\tXscr: '\\uD835\\uDCB3',\n\txscr: '\\uD835\\uDCCD',\n\txsqcup: '\\u2A06',\n\txuplus: '\\u2A04',\n\txutri: '\\u25B3',\n\txvee: '\\u22C1',\n\txwedge: '\\u22C0',\n\tYacute: '\\u00DD',\n\tyacute: '\\u00FD',\n\tYAcy: '\\u042F',\n\tyacy: '\\u044F',\n\tYcirc: '\\u0176',\n\tycirc: '\\u0177',\n\tYcy: '\\u042B',\n\tycy: '\\u044B',\n\tyen: '\\u00A5',\n\tYfr: '\\uD835\\uDD1C',\n\tyfr: '\\uD835\\uDD36',\n\tYIcy: '\\u0407',\n\tyicy: '\\u0457',\n\tYopf: '\\uD835\\uDD50',\n\tyopf: '\\uD835\\uDD6A',\n\tYscr: '\\uD835\\uDCB4',\n\tyscr: '\\uD835\\uDCCE',\n\tYUcy: '\\u042E',\n\tyucy: '\\u044E',\n\tYuml: '\\u0178',\n\tyuml: '\\u00FF',\n\tZacute: '\\u0179',\n\tzacute: '\\u017A',\n\tZcaron: '\\u017D',\n\tzcaron: '\\u017E',\n\tZcy: '\\u0417',\n\tzcy: '\\u0437',\n\tZdot: '\\u017B',\n\tzdot: '\\u017C',\n\tzeetrf: '\\u2128',\n\tZeroWidthSpace: '\\u200B',\n\tZeta: '\\u0396',\n\tzeta: '\\u03B6',\n\tZfr: '\\u2128',\n\tzfr: '\\uD835\\uDD37',\n\tZHcy: '\\u0416',\n\tzhcy: '\\u0436',\n\tzigrarr: '\\u21DD',\n\tZopf: '\\u2124',\n\tzopf: '\\uD835\\uDD6B',\n\tZscr: '\\uD835\\uDCB5',\n\tzscr: '\\uD835\\uDCCF',\n\tzwj: '\\u200D',\n\tzwnj: '\\u200C',\n});\n\n/**\n * @deprecated\n * Use `HTML_ENTITIES` instead.\n * @see {@link HTML_ENTITIES}\n */\nexports.entityMap = exports.HTML_ENTITIES;\n","'use strict';\n\nvar conventions = require('./conventions');\nvar g = require('./grammar');\nvar errors = require('./errors');\n\nvar isHTMLEscapableRawTextElement = conventions.isHTMLEscapableRawTextElement;\nvar isHTMLMimeType = conventions.isHTMLMimeType;\nvar isHTMLRawTextElement = conventions.isHTMLRawTextElement;\nvar hasOwn = conventions.hasOwn;\nvar NAMESPACE = conventions.NAMESPACE;\nvar ParseError = errors.ParseError;\nvar DOMException = errors.DOMException;\n\n//var handlers = 'resolveEntity,getExternalSubset,characters,endDocument,endElement,endPrefixMapping,ignorableWhitespace,processingInstruction,setDocumentLocator,skippedEntity,startDocument,startElement,startPrefixMapping,notationDecl,unparsedEntityDecl,error,fatalError,warning,attributeDecl,elementDecl,externalEntityDecl,internalEntityDecl,comment,endCDATA,endDTD,endEntity,startCDATA,startDTD,startEntity'.split(',')\n\n//S_TAG,\tS_ATTR,\tS_EQ,\tS_ATTR_NOQUOT_VALUE\n//S_ATTR_SPACE,\tS_ATTR_END,\tS_TAG_SPACE, S_TAG_CLOSE\nvar S_TAG = 0; //tag name offerring\nvar S_ATTR = 1; //attr name offerring\nvar S_ATTR_SPACE = 2; //attr name end and space offer\nvar S_EQ = 3; //=space?\nvar S_ATTR_NOQUOT_VALUE = 4; //attr value(no quot value only)\nvar S_ATTR_END = 5; //attr value end and no space(quot end)\nvar S_TAG_SPACE = 6; //(attr value end || tag end ) && (space offer)\nvar S_TAG_CLOSE = 7; //closed el<el />\n\nfunction XMLReader() {}\n\nXMLReader.prototype = {\n\tparse: function (source, defaultNSMap, entityMap) {\n\t\tvar domBuilder = this.domBuilder;\n\t\tdomBuilder.startDocument();\n\t\t_copy(defaultNSMap, (defaultNSMap = Object.create(null)));\n\t\tparse(source, defaultNSMap, entityMap, domBuilder, this.errorHandler);\n\t\tdomBuilder.endDocument();\n\t},\n};\n\n/**\n * Detecting everything that might be a reference,\n * including those without ending `;`, since those are allowed in HTML.\n * The entityReplacer takes care of verifying and transforming each occurrence,\n * and reports to the errorHandler on those that are not OK,\n * depending on the context.\n */\nvar ENTITY_REG = /&#?\\w+;?/g;\n\nfunction parse(source, defaultNSMapCopy, entityMap, domBuilder, errorHandler) {\n\tvar isHTML = isHTMLMimeType(domBuilder.mimeType);\n\tif (source.indexOf(g.UNICODE_REPLACEMENT_CHARACTER) >= 0) {\n\t\terrorHandler.warning('Unicode replacement character detected, source encoding issues?');\n\t}\n\n\tfunction fixedFromCharCode(code) {\n\t\t// String.prototype.fromCharCode does not supports\n\t\t// > 2 bytes unicode chars directly\n\t\tif (code > 0xffff) {\n\t\t\tcode -= 0x10000;\n\t\t\tvar surrogate1 = 0xd800 + (code >> 10),\n\t\t\t\tsurrogate2 = 0xdc00 + (code & 0x3ff);\n\n\t\t\treturn String.fromCharCode(surrogate1, surrogate2);\n\t\t} else {\n\t\t\treturn String.fromCharCode(code);\n\t\t}\n\t}\n\n\tfunction entityReplacer(a) {\n\t\tvar complete = a[a.length - 1] === ';' ? a : a + ';';\n\t\tif (!isHTML && complete !== a) {\n\t\t\terrorHandler.error('EntityRef: expecting ;');\n\t\t\treturn a;\n\t\t}\n\t\tvar match = g.Reference.exec(complete);\n\t\tif (!match || match[0].length !== complete.length) {\n\t\t\terrorHandler.error('entity not matching Reference production: ' + a);\n\t\t\treturn a;\n\t\t}\n\t\tvar k = complete.slice(1, -1);\n\t\tif (hasOwn(entityMap, k)) {\n\t\t\treturn entityMap[k];\n\t\t} else if (k.charAt(0) === '#') {\n\t\t\treturn fixedFromCharCode(parseInt(k.substring(1).replace('x', '0x')));\n\t\t} else {\n\t\t\terrorHandler.error('entity not found:' + a);\n\t\t\treturn a;\n\t\t}\n\t}\n\n\tfunction appendText(end) {\n\t\t//has some bugs\n\t\tif (end > start) {\n\t\t\tvar xt = source.substring(start, end).replace(ENTITY_REG, entityReplacer);\n\t\t\tlocator && position(start);\n\t\t\tdomBuilder.characters(xt, 0, end - start);\n\t\t\tstart = end;\n\t\t}\n\t}\n\n\tvar lineStart = 0;\n\tvar lineEnd = 0;\n\tvar linePattern = /\\r\\n?|\\n|$/g;\n\tvar locator = domBuilder.locator;\n\n\tfunction position(p, m) {\n\t\twhile (p >= lineEnd && (m = linePattern.exec(source))) {\n\t\t\tlineStart = lineEnd;\n\t\t\tlineEnd = m.index + m[0].length;\n\t\t\tlocator.lineNumber++;\n\t\t}\n\t\tlocator.columnNumber = p - lineStart + 1;\n\t}\n\n\tvar parseStack = [{ currentNSMap: defaultNSMapCopy }];\n\tvar unclosedTags = [];\n\tvar start = 0;\n\twhile (true) {\n\t\ttry {\n\t\t\tvar tagStart = source.indexOf('<', start);\n\t\t\tif (tagStart < 0) {\n\t\t\t\tif (!isHTML && unclosedTags.length > 0) {\n\t\t\t\t\treturn errorHandler.fatalError('unclosed xml tag(s): ' + unclosedTags.join(', '));\n\t\t\t\t}\n\t\t\t\tif (!source.substring(start).match(/^\\s*$/)) {\n\t\t\t\t\tvar doc = domBuilder.doc;\n\t\t\t\t\tvar text = doc.createTextNode(source.substring(start));\n\t\t\t\t\tif (doc.documentElement) {\n\t\t\t\t\t\treturn errorHandler.error('Extra content at the end of the document');\n\t\t\t\t\t}\n\t\t\t\t\tdoc.appendChild(text);\n\t\t\t\t\tdomBuilder.currentElement = text;\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (tagStart > start) {\n\t\t\t\tvar fromSource = source.substring(start, tagStart);\n\t\t\t\tif (!isHTML && unclosedTags.length === 0) {\n\t\t\t\t\tfromSource = fromSource.replace(new RegExp(g.S_OPT.source, 'g'), '');\n\t\t\t\t\tfromSource && errorHandler.error(\"Unexpected content outside root element: '\" + fromSource + \"'\");\n\t\t\t\t}\n\t\t\t\tappendText(tagStart);\n\t\t\t}\n\t\t\tswitch (source.charAt(tagStart + 1)) {\n\t\t\t\tcase '/':\n\t\t\t\t\tvar end = source.indexOf('>', tagStart + 2);\n\t\t\t\t\tvar tagNameRaw = source.substring(tagStart + 2, end > 0 ? end : undefined);\n\t\t\t\t\tif (!tagNameRaw) {\n\t\t\t\t\t\treturn errorHandler.fatalError('end tag name missing');\n\t\t\t\t\t}\n\t\t\t\t\tvar tagNameMatch = end > 0 && g.reg('^', g.QName_group, g.S_OPT, '$').exec(tagNameRaw);\n\t\t\t\t\tif (!tagNameMatch) {\n\t\t\t\t\t\treturn errorHandler.fatalError('end tag name contains invalid characters: \"' + tagNameRaw + '\"');\n\t\t\t\t\t}\n\t\t\t\t\tif (!domBuilder.currentElement && !domBuilder.doc.documentElement) {\n\t\t\t\t\t\t// not enough information to provide a helpful error message,\n\t\t\t\t\t\t// but parsing will throw since there is no root element\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tvar currentTagName =\n\t\t\t\t\t\tunclosedTags[unclosedTags.length - 1] ||\n\t\t\t\t\t\tdomBuilder.currentElement.tagName ||\n\t\t\t\t\t\tdomBuilder.doc.documentElement.tagName ||\n\t\t\t\t\t\t'';\n\t\t\t\t\tif (currentTagName !== tagNameMatch[1]) {\n\t\t\t\t\t\tvar tagNameLower = tagNameMatch[1].toLowerCase();\n\t\t\t\t\t\tif (!isHTML || currentTagName.toLowerCase() !== tagNameLower) {\n\t\t\t\t\t\t\treturn errorHandler.fatalError('Opening and ending tag mismatch: \"' + currentTagName + '\" != \"' + tagNameRaw + '\"');\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tvar config = parseStack.pop();\n\t\t\t\t\tunclosedTags.pop();\n\t\t\t\t\tvar localNSMap = config.localNSMap;\n\t\t\t\t\tdomBuilder.endElement(config.uri, config.localName, currentTagName);\n\t\t\t\t\tif (localNSMap) {\n\t\t\t\t\t\tfor (var prefix in localNSMap) {\n\t\t\t\t\t\t\tif (hasOwn(localNSMap, prefix)) {\n\t\t\t\t\t\t\t\tdomBuilder.endPrefixMapping(prefix);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tend++;\n\t\t\t\t\tbreak;\n\t\t\t\t// end element\n\t\t\t\tcase '?': // <?...?>\n\t\t\t\t\tlocator && position(tagStart);\n\t\t\t\t\tend = parseProcessingInstruction(source, tagStart, domBuilder, errorHandler);\n\t\t\t\t\tbreak;\n\t\t\t\tcase '!': // <!doctype,<![CDATA,<!--\n\t\t\t\t\tlocator && position(tagStart);\n\t\t\t\t\tend = parseDoctypeCommentOrCData(source, tagStart, domBuilder, errorHandler, isHTML);\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\tlocator && position(tagStart);\n\t\t\t\t\tvar el = new ElementAttributes();\n\t\t\t\t\tvar currentNSMap = parseStack[parseStack.length - 1].currentNSMap;\n\t\t\t\t\t//elStartEnd\n\t\t\t\t\tvar end = parseElementStartPart(source, tagStart, el, currentNSMap, entityReplacer, errorHandler, isHTML);\n\t\t\t\t\tvar len = el.length;\n\n\t\t\t\t\tif (!el.closed) {\n\t\t\t\t\t\tif (isHTML && conventions.isHTMLVoidElement(el.tagName)) {\n\t\t\t\t\t\t\tel.closed = true;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tunclosedTags.push(el.tagName);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (locator && len) {\n\t\t\t\t\t\tvar locator2 = copyLocator(locator, {});\n\t\t\t\t\t\t//try{//attribute position fixed\n\t\t\t\t\t\tfor (var i = 0; i < len; i++) {\n\t\t\t\t\t\t\tvar a = el[i];\n\t\t\t\t\t\t\tposition(a.offset);\n\t\t\t\t\t\t\ta.locator = copyLocator(locator, {});\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdomBuilder.locator = locator2;\n\t\t\t\t\t\tif (appendElement(el, domBuilder, currentNSMap)) {\n\t\t\t\t\t\t\tparseStack.push(el);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdomBuilder.locator = locator;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tif (appendElement(el, domBuilder, currentNSMap)) {\n\t\t\t\t\t\t\tparseStack.push(el);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tif (isHTML && !el.closed) {\n\t\t\t\t\t\tend = parseHtmlSpecialContent(source, end, el.tagName, entityReplacer, domBuilder);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tend++;\n\t\t\t\t\t}\n\t\t\t}\n\t\t} catch (e) {\n\t\t\tif (e instanceof ParseError) {\n\t\t\t\tthrow e;\n\t\t\t} else if (e instanceof DOMException) {\n\t\t\t\tthrow new ParseError(e.name + ': ' + e.message, domBuilder.locator, e);\n\t\t\t}\n\t\t\terrorHandler.error('element parse error: ' + e);\n\t\t\tend = -1;\n\t\t}\n\t\tif (end > start) {\n\t\t\tstart = end;\n\t\t} else {\n\t\t\t//Possible sax fallback here, risk of positional error\n\t\t\tappendText(Math.max(tagStart, start) + 1);\n\t\t}\n\t}\n}\n\nfunction copyLocator(f, t) {\n\tt.lineNumber = f.lineNumber;\n\tt.columnNumber = f.columnNumber;\n\treturn t;\n}\n\n/**\n * @returns\n * end of the elementStartPart(end of elementEndPart for selfClosed el)\n * @see {@link #appendElement}\n */\nfunction parseElementStartPart(source, start, el, currentNSMap, entityReplacer, errorHandler, isHTML) {\n\t/**\n\t * @param {string} qname\n\t * @param {string} value\n\t * @param {number} startIndex\n\t */\n\tfunction addAttribute(qname, value, startIndex) {\n\t\tif (hasOwn(el.attributeNames, qname)) {\n\t\t\treturn errorHandler.fatalError('Attribute ' + qname + ' redefined');\n\t\t}\n\t\tif (!isHTML && value.indexOf('<') >= 0) {\n\t\t\treturn errorHandler.fatalError(\"Unescaped '<' not allowed in attributes values\");\n\t\t}\n\t\tel.addValue(\n\t\t\tqname,\n\t\t\t// @see https://www.w3.org/TR/xml/#AVNormalize\n\t\t\t// since the xmldom sax parser does not \"interpret\" DTD the following is not implemented:\n\t\t\t// - recursive replacement of (DTD) entity references\n\t\t\t// - trimming and collapsing multiple spaces into a single one for attributes that are not of type CDATA\n\t\t\tvalue.replace(/[\\t\\n\\r]/g, ' ').replace(ENTITY_REG, entityReplacer),\n\t\t\tstartIndex\n\t\t);\n\t}\n\n\tvar attrName;\n\tvar value;\n\tvar p = ++start;\n\tvar s = S_TAG; //status\n\twhile (true) {\n\t\tvar c = source.charAt(p);\n\t\tswitch (c) {\n\t\t\tcase '=':\n\t\t\t\tif (s === S_ATTR) {\n\t\t\t\t\t//attrName\n\t\t\t\t\tattrName = source.slice(start, p);\n\t\t\t\t\ts = S_EQ;\n\t\t\t\t} else if (s === S_ATTR_SPACE) {\n\t\t\t\t\ts = S_EQ;\n\t\t\t\t} else {\n\t\t\t\t\t//fatalError: equal must after attrName or space after attrName\n\t\t\t\t\tthrow new Error('attribute equal must after attrName'); // No known test case\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase \"'\":\n\t\t\tcase '\"':\n\t\t\t\tif (\n\t\t\t\t\ts === S_EQ ||\n\t\t\t\t\ts === S_ATTR //|| s == S_ATTR_SPACE\n\t\t\t\t) {\n\t\t\t\t\t//equal\n\t\t\t\t\tif (s === S_ATTR) {\n\t\t\t\t\t\terrorHandler.warning('attribute value must after \"=\"');\n\t\t\t\t\t\tattrName = source.slice(start, p);\n\t\t\t\t\t}\n\t\t\t\t\tstart = p + 1;\n\t\t\t\t\tp = source.indexOf(c, start);\n\t\t\t\t\tif (p > 0) {\n\t\t\t\t\t\tvalue = source.slice(start, p);\n\t\t\t\t\t\taddAttribute(attrName, value, start - 1);\n\t\t\t\t\t\ts = S_ATTR_END;\n\t\t\t\t\t} else {\n\t\t\t\t\t\t//fatalError: no end quot match\n\t\t\t\t\t\tthrow new Error(\"attribute value no end '\" + c + \"' match\");\n\t\t\t\t\t}\n\t\t\t\t} else if (s == S_ATTR_NOQUOT_VALUE) {\n\t\t\t\t\tvalue = source.slice(start, p);\n\t\t\t\t\taddAttribute(attrName, value, start);\n\t\t\t\t\terrorHandler.warning('attribute \"' + attrName + '\" missed start quot(' + c + ')!!');\n\t\t\t\t\tstart = p + 1;\n\t\t\t\t\ts = S_ATTR_END;\n\t\t\t\t} else {\n\t\t\t\t\t//fatalError: no equal before\n\t\t\t\t\tthrow new Error('attribute value must after \"=\"'); // No known test case\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase '/':\n\t\t\t\tswitch (s) {\n\t\t\t\t\tcase S_TAG:\n\t\t\t\t\t\tel.setTagName(source.slice(start, p));\n\t\t\t\t\tcase S_ATTR_END:\n\t\t\t\t\tcase S_TAG_SPACE:\n\t\t\t\t\tcase S_TAG_CLOSE:\n\t\t\t\t\t\ts = S_TAG_CLOSE;\n\t\t\t\t\t\tel.closed = true;\n\t\t\t\t\tcase S_ATTR_NOQUOT_VALUE:\n\t\t\t\t\tcase S_ATTR:\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase S_ATTR_SPACE:\n\t\t\t\t\t\tel.closed = true;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t//case S_EQ:\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tthrow new Error(\"attribute invalid close char('/')\"); // No known test case\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase '': //end document\n\t\t\t\terrorHandler.error('unexpected end of input');\n\t\t\t\tif (s == S_TAG) {\n\t\t\t\t\tel.setTagName(source.slice(start, p));\n\t\t\t\t}\n\t\t\t\treturn p;\n\t\t\tcase '>':\n\t\t\t\tswitch (s) {\n\t\t\t\t\tcase S_TAG:\n\t\t\t\t\t\tel.setTagName(source.slice(start, p));\n\t\t\t\t\tcase S_ATTR_END:\n\t\t\t\t\tcase S_TAG_SPACE:\n\t\t\t\t\tcase S_TAG_CLOSE:\n\t\t\t\t\t\tbreak; //normal\n\t\t\t\t\tcase S_ATTR_NOQUOT_VALUE: //Compatible state\n\t\t\t\t\tcase S_ATTR:\n\t\t\t\t\t\tvalue = source.slice(start, p);\n\t\t\t\t\t\tif (value.slice(-1) === '/') {\n\t\t\t\t\t\t\tel.closed = true;\n\t\t\t\t\t\t\tvalue = value.slice(0, -1);\n\t\t\t\t\t\t}\n\t\t\t\t\tcase S_ATTR_SPACE:\n\t\t\t\t\t\tif (s === S_ATTR_SPACE) {\n\t\t\t\t\t\t\tvalue = attrName;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (s == S_ATTR_NOQUOT_VALUE) {\n\t\t\t\t\t\t\terrorHandler.warning('attribute \"' + value + '\" missed quot(\")!');\n\t\t\t\t\t\t\taddAttribute(attrName, value, start);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tif (!isHTML) {\n\t\t\t\t\t\t\t\terrorHandler.warning('attribute \"' + value + '\" missed value!! \"' + value + '\" instead!!');\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\taddAttribute(value, value, start);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase S_EQ:\n\t\t\t\t\t\tif (!isHTML) {\n\t\t\t\t\t\t\treturn errorHandler.fatalError('AttValue: \\' or \" expected');\n\t\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn p;\n\t\t\t/*xml space '\\x20' | #x9 | #xD | #xA; */\n\t\t\tcase '\\u0080':\n\t\t\t\tc = ' ';\n\t\t\tdefault:\n\t\t\t\tif (c <= ' ') {\n\t\t\t\t\t//space\n\t\t\t\t\tswitch (s) {\n\t\t\t\t\t\tcase S_TAG:\n\t\t\t\t\t\t\tel.setTagName(source.slice(start, p)); //tagName\n\t\t\t\t\t\t\ts = S_TAG_SPACE;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase S_ATTR:\n\t\t\t\t\t\t\tattrName = source.slice(start, p);\n\t\t\t\t\t\t\ts = S_ATTR_SPACE;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase S_ATTR_NOQUOT_VALUE:\n\t\t\t\t\t\t\tvar value = source.slice(start, p);\n\t\t\t\t\t\t\terrorHandler.warning('attribute \"' + value + '\" missed quot(\")!!');\n\t\t\t\t\t\t\taddAttribute(attrName, value, start);\n\t\t\t\t\t\tcase S_ATTR_END:\n\t\t\t\t\t\t\ts = S_TAG_SPACE;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t//case S_TAG_SPACE:\n\t\t\t\t\t\t//case S_EQ:\n\t\t\t\t\t\t//case S_ATTR_SPACE:\n\t\t\t\t\t\t//\tvoid();break;\n\t\t\t\t\t\t//case S_TAG_CLOSE:\n\t\t\t\t\t\t//ignore warning\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\t//not space\n\t\t\t\t\t//S_TAG,\tS_ATTR,\tS_EQ,\tS_ATTR_NOQUOT_VALUE\n\t\t\t\t\t//S_ATTR_SPACE,\tS_ATTR_END,\tS_TAG_SPACE, S_TAG_CLOSE\n\t\t\t\t\tswitch (s) {\n\t\t\t\t\t\t//case S_TAG:void();break;\n\t\t\t\t\t\t//case S_ATTR:void();break;\n\t\t\t\t\t\t//case S_ATTR_NOQUOT_VALUE:void();break;\n\t\t\t\t\t\tcase S_ATTR_SPACE:\n\t\t\t\t\t\t\tif (!isHTML) {\n\t\t\t\t\t\t\t\terrorHandler.warning('attribute \"' + attrName + '\" missed value!! \"' + attrName + '\" instead2!!');\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\taddAttribute(attrName, attrName, start);\n\t\t\t\t\t\t\tstart = p;\n\t\t\t\t\t\t\ts = S_ATTR;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase S_ATTR_END:\n\t\t\t\t\t\t\terrorHandler.warning('attribute space is required\"' + attrName + '\"!!');\n\t\t\t\t\t\tcase S_TAG_SPACE:\n\t\t\t\t\t\t\ts = S_ATTR;\n\t\t\t\t\t\t\tstart = p;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase S_EQ:\n\t\t\t\t\t\t\ts = S_ATTR_NOQUOT_VALUE;\n\t\t\t\t\t\t\tstart = p;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase S_TAG_CLOSE:\n\t\t\t\t\t\t\tthrow new Error(\"elements closed character '/' and '>' must be connected to\");\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t} //end outer switch\n\t\tp++;\n\t}\n}\n\n/**\n * @returns\n * `true` if a new namespace has been defined.\n */\nfunction appendElement(el, domBuilder, currentNSMap) {\n\tvar tagName = el.tagName;\n\tvar localNSMap = null;\n\tvar i = el.length;\n\twhile (i--) {\n\t\tvar a = el[i];\n\t\tvar qName = a.qName;\n\t\tvar value = a.value;\n\t\tvar nsp = qName.indexOf(':');\n\t\tif (nsp > 0) {\n\t\t\tvar prefix = (a.prefix = qName.slice(0, nsp));\n\t\t\tvar localName = qName.slice(nsp + 1);\n\t\t\tvar nsPrefix = prefix === 'xmlns' && localName;\n\t\t} else {\n\t\t\tlocalName = qName;\n\t\t\tprefix = null;\n\t\t\tnsPrefix = qName === 'xmlns' && '';\n\t\t}\n\t\t//can not set prefix,because prefix !== ''\n\t\ta.localName = localName;\n\t\t//prefix == null for no ns prefix attribute\n\t\tif (nsPrefix !== false) {\n\t\t\t//hack!!\n\t\t\tif (localNSMap == null) {\n\t\t\t\tlocalNSMap = Object.create(null);\n\t\t\t\t_copy(currentNSMap, (currentNSMap = Object.create(null)));\n\t\t\t}\n\t\t\tcurrentNSMap[nsPrefix] = localNSMap[nsPrefix] = value;\n\t\t\ta.uri = NAMESPACE.XMLNS;\n\t\t\tdomBuilder.startPrefixMapping(nsPrefix, value);\n\t\t}\n\t}\n\tvar i = el.length;\n\twhile (i--) {\n\t\ta = el[i];\n\t\tif (a.prefix) {\n\t\t\t//no prefix attribute has no namespace\n\t\t\tif (a.prefix === 'xml') {\n\t\t\t\ta.uri = NAMESPACE.XML;\n\t\t\t}\n\t\t\tif (a.prefix !== 'xmlns') {\n\t\t\t\ta.uri = currentNSMap[a.prefix];\n\t\t\t}\n\t\t}\n\t}\n\tvar nsp = tagName.indexOf(':');\n\tif (nsp > 0) {\n\t\tprefix = el.prefix = tagName.slice(0, nsp);\n\t\tlocalName = el.localName = tagName.slice(nsp + 1);\n\t} else {\n\t\tprefix = null; //important!!\n\t\tlocalName = el.localName = tagName;\n\t}\n\t//no prefix element has default namespace\n\tvar ns = (el.uri = currentNSMap[prefix || '']);\n\tdomBuilder.startElement(ns, localName, tagName, el);\n\t//endPrefixMapping and startPrefixMapping have not any help for dom builder\n\t//localNSMap = null\n\tif (el.closed) {\n\t\tdomBuilder.endElement(ns, localName, tagName);\n\t\tif (localNSMap) {\n\t\t\tfor (prefix in localNSMap) {\n\t\t\t\tif (hasOwn(localNSMap, prefix)) {\n\t\t\t\t\tdomBuilder.endPrefixMapping(prefix);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t} else {\n\t\tel.currentNSMap = currentNSMap;\n\t\tel.localNSMap = localNSMap;\n\t\t//parseStack.push(el);\n\t\treturn true;\n\t}\n}\n\nfunction parseHtmlSpecialContent(source, elStartEnd, tagName, entityReplacer, domBuilder) {\n\t// https://html.spec.whatwg.org/#raw-text-elements\n\t// https://html.spec.whatwg.org/#escapable-raw-text-elements\n\t// https://html.spec.whatwg.org/#cdata-rcdata-restrictions:raw-text-elements\n\t// TODO: https://html.spec.whatwg.org/#cdata-rcdata-restrictions\n\tvar isEscapableRaw = isHTMLEscapableRawTextElement(tagName);\n\tif (isEscapableRaw || isHTMLRawTextElement(tagName)) {\n\t\tvar elEndStart = source.indexOf('</' + tagName + '>', elStartEnd);\n\t\tvar text = source.substring(elStartEnd + 1, elEndStart);\n\n\t\tif (isEscapableRaw) {\n\t\t\ttext = text.replace(ENTITY_REG, entityReplacer);\n\t\t}\n\t\tdomBuilder.characters(text, 0, text.length);\n\t\treturn elEndStart;\n\t}\n\treturn elStartEnd + 1;\n}\n\nfunction _copy(source, target) {\n\tfor (var n in source) {\n\t\tif (hasOwn(source, n)) {\n\t\t\ttarget[n] = source[n];\n\t\t}\n\t}\n}\n\n/**\n * @typedef ParseUtils\n * @property {function(relativeIndex: number?): string | undefined} char\n * Provides look ahead access to a singe character relative to the current index.\n * @property {function(): number} getIndex\n * Provides read-only access to the current index.\n * @property {function(reg: RegExp): string | null} getMatch\n * Applies the provided regular expression enforcing that it starts at the current index and\n * returns the complete matching string,\n * and moves the current index by the length of the matching string.\n * @property {function(): string} getSource\n * Provides read-only access to the complete source.\n * @property {function(places: number?): void} skip\n * moves the current index by places (defaults to 1)\n * @property {function(): number} skipBlanks\n * Moves the current index by the amount of white space that directly follows the current index\n * and returns the amount of whitespace chars skipped (0..n),\n * or -1 if the end of the source was reached.\n * @property {function(): string} substringFromIndex\n * creates a substring from the current index to the end of `source`\n * @property {function(compareWith: string): boolean} substringStartsWith\n * Checks if `source` contains `compareWith`, starting from the current index.\n * @property {function(compareWith: string): boolean} substringStartsWithCaseInsensitive\n * Checks if `source` contains `compareWith`, starting from the current index,\n * comparing the upper case of both sides.\n * @see {@link parseUtils}\n */\n\n/**\n * A temporary scope for parsing and look ahead operations in `source`,\n * starting from index `start`.\n *\n * Some operations move the current index by a number of positions,\n * after which `getIndex` returns the new index.\n *\n * @param {string} source\n * @param {number} start\n * @returns {ParseUtils}\n */\nfunction parseUtils(source, start) {\n\tvar index = start;\n\n\tfunction char(n) {\n\t\tn = n || 0;\n\t\treturn source.charAt(index + n);\n\t}\n\n\tfunction skip(n) {\n\t\tn = n || 1;\n\t\tindex += n;\n\t}\n\n\tfunction skipBlanks() {\n\t\tvar blanks = 0;\n\t\twhile (index < source.length) {\n\t\t\tvar c = char();\n\t\t\tif (c !== ' ' && c !== '\\n' && c !== '\\t' && c !== '\\r') {\n\t\t\t\treturn blanks;\n\t\t\t}\n\t\t\tblanks++;\n\t\t\tskip();\n\t\t}\n\t\treturn -1;\n\t}\n\tfunction substringFromIndex() {\n\t\treturn source.substring(index);\n\t}\n\tfunction substringStartsWith(text) {\n\t\treturn source.substring(index, index + text.length) === text;\n\t}\n\tfunction substringStartsWithCaseInsensitive(text) {\n\t\treturn source.substring(index, index + text.length).toUpperCase() === text.toUpperCase();\n\t}\n\n\tfunction getMatch(args) {\n\t\tvar expr = g.reg('^', args);\n\t\tvar match = expr.exec(substringFromIndex());\n\t\tif (match) {\n\t\t\tskip(match[0].length);\n\t\t\treturn match[0];\n\t\t}\n\t\treturn null;\n\t}\n\treturn {\n\t\tchar: char,\n\t\tgetIndex: function () {\n\t\t\treturn index;\n\t\t},\n\t\tgetMatch: getMatch,\n\t\tgetSource: function () {\n\t\t\treturn source;\n\t\t},\n\t\tskip: skip,\n\t\tskipBlanks: skipBlanks,\n\t\tsubstringFromIndex: substringFromIndex,\n\t\tsubstringStartsWith: substringStartsWith,\n\t\tsubstringStartsWithCaseInsensitive: substringStartsWithCaseInsensitive,\n\t};\n}\n\n/**\n * @param {ParseUtils} p\n * @param {DOMHandler} errorHandler\n * @returns {string}\n */\nfunction parseDoctypeInternalSubset(p, errorHandler) {\n\t/**\n\t * @param {ParseUtils} p\n\t * @param {DOMHandler} errorHandler\n\t * @returns {string}\n\t */\n\tfunction parsePI(p, errorHandler) {\n\t\tvar match = g.PI.exec(p.substringFromIndex());\n\t\tif (!match) {\n\t\t\treturn errorHandler.fatalError('processing instruction is not well-formed at position ' + p.getIndex());\n\t\t}\n\t\tif (match[1].toLowerCase() === 'xml') {\n\t\t\treturn errorHandler.fatalError(\n\t\t\t\t'xml declaration is only allowed at the start of the document, but found at position ' + p.getIndex()\n\t\t\t);\n\t\t}\n\t\tp.skip(match[0].length);\n\t\treturn match[0];\n\t}\n\t// Parse internal subset\n\tvar source = p.getSource();\n\tif (p.char() === '[') {\n\t\tp.skip(1);\n\t\tvar intSubsetStart = p.getIndex();\n\t\twhile (p.getIndex() < source.length) {\n\t\t\tp.skipBlanks();\n\t\t\tif (p.char() === ']') {\n\t\t\t\tvar internalSubset = source.substring(intSubsetStart, p.getIndex());\n\t\t\t\tp.skip(1);\n\t\t\t\treturn internalSubset;\n\t\t\t}\n\t\t\tvar current = null;\n\t\t\t// Only in external subset\n\t\t\t// if (char() === '<' && char(1) === '!' && char(2) === '[') {\n\t\t\t// \tparseConditionalSections(p, errorHandler);\n\t\t\t// } else\n\t\t\tif (p.char() === '<' && p.char(1) === '!') {\n\t\t\t\tswitch (p.char(2)) {\n\t\t\t\t\tcase 'E': // ELEMENT | ENTITY\n\t\t\t\t\t\tif (p.char(3) === 'L') {\n\t\t\t\t\t\t\tcurrent = p.getMatch(g.elementdecl);\n\t\t\t\t\t\t} else if (p.char(3) === 'N') {\n\t\t\t\t\t\t\tcurrent = p.getMatch(g.EntityDecl);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'A': // ATTRIBUTE\n\t\t\t\t\t\tcurrent = p.getMatch(g.AttlistDecl);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'N': // NOTATION\n\t\t\t\t\t\tcurrent = p.getMatch(g.NotationDecl);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase '-': // COMMENT\n\t\t\t\t\t\tcurrent = p.getMatch(g.Comment);\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t} else if (p.char() === '<' && p.char(1) === '?') {\n\t\t\t\tcurrent = parsePI(p, errorHandler);\n\t\t\t} else if (p.char() === '%') {\n\t\t\t\tcurrent = p.getMatch(g.PEReference);\n\t\t\t} else {\n\t\t\t\treturn errorHandler.fatalError('Error detected in Markup declaration');\n\t\t\t}\n\t\t\tif (!current) {\n\t\t\t\treturn errorHandler.fatalError('Error in internal subset at position ' + p.getIndex());\n\t\t\t}\n\t\t}\n\t\treturn errorHandler.fatalError('doctype internal subset is not well-formed, missing ]');\n\t}\n}\n\n/**\n * Called when the parser encounters an element starting with '<!'.\n *\n * @param {string} source\n * The xml.\n * @param {number} start\n * the start index of the '<!'\n * @param {DOMHandler} domBuilder\n * @param {DOMHandler} errorHandler\n * @param {boolean} isHTML\n * @returns {number | never}\n * The end index of the element.\n * @throws {ParseError}\n * In case the element is not well-formed.\n */\nfunction parseDoctypeCommentOrCData(source, start, domBuilder, errorHandler, isHTML) {\n\tvar p = parseUtils(source, start);\n\n\tswitch (isHTML ? p.char(2).toUpperCase() : p.char(2)) {\n\t\tcase '-':\n\t\t\t// should be a comment\n\t\t\tvar comment = p.getMatch(g.Comment);\n\t\t\tif (comment) {\n\t\t\t\tdomBuilder.comment(comment, g.COMMENT_START.length, comment.length - g.COMMENT_START.length - g.COMMENT_END.length);\n\t\t\t\treturn p.getIndex();\n\t\t\t} else {\n\t\t\t\treturn errorHandler.fatalError('comment is not well-formed at position ' + p.getIndex());\n\t\t\t}\n\t\tcase '[':\n\t\t\t// should be CDATA\n\t\t\tvar cdata = p.getMatch(g.CDSect);\n\t\t\tif (cdata) {\n\t\t\t\tif (!isHTML && !domBuilder.currentElement) {\n\t\t\t\t\treturn errorHandler.fatalError('CDATA outside of element');\n\t\t\t\t}\n\t\t\t\tdomBuilder.startCDATA();\n\t\t\t\tdomBuilder.characters(cdata, g.CDATA_START.length, cdata.length - g.CDATA_START.length - g.CDATA_END.length);\n\t\t\t\tdomBuilder.endCDATA();\n\t\t\t\treturn p.getIndex();\n\t\t\t} else {\n\t\t\t\treturn errorHandler.fatalError('Invalid CDATA starting at position ' + start);\n\t\t\t}\n\t\tcase 'D': {\n\t\t\t// should be DOCTYPE\n\t\t\tif (domBuilder.doc && domBuilder.doc.documentElement) {\n\t\t\t\treturn errorHandler.fatalError('Doctype not allowed inside or after documentElement at position ' + p.getIndex());\n\t\t\t}\n\t\t\tif (isHTML ? !p.substringStartsWithCaseInsensitive(g.DOCTYPE_DECL_START) : !p.substringStartsWith(g.DOCTYPE_DECL_START)) {\n\t\t\t\treturn errorHandler.fatalError('Expected ' + g.DOCTYPE_DECL_START + ' at position ' + p.getIndex());\n\t\t\t}\n\t\t\tp.skip(g.DOCTYPE_DECL_START.length);\n\t\t\tif (p.skipBlanks() < 1) {\n\t\t\t\treturn errorHandler.fatalError('Expected whitespace after ' + g.DOCTYPE_DECL_START + ' at position ' + p.getIndex());\n\t\t\t}\n\n\t\t\tvar doctype = {\n\t\t\t\tname: undefined,\n\t\t\t\tpublicId: undefined,\n\t\t\t\tsystemId: undefined,\n\t\t\t\tinternalSubset: undefined,\n\t\t\t};\n\t\t\t// Parse the DOCTYPE name\n\t\t\tdoctype.name = p.getMatch(g.Name);\n\t\t\tif (!doctype.name)\n\t\t\t\treturn errorHandler.fatalError('doctype name missing or contains unexpected characters at position ' + p.getIndex());\n\n\t\t\tif (isHTML && doctype.name.toLowerCase() !== 'html') {\n\t\t\t\terrorHandler.warning('Unexpected DOCTYPE in HTML document at position ' + p.getIndex());\n\t\t\t}\n\t\t\tp.skipBlanks();\n\n\t\t\t// Check for ExternalID\n\t\t\tif (p.substringStartsWith(g.PUBLIC) || p.substringStartsWith(g.SYSTEM)) {\n\t\t\t\tvar match = g.ExternalID_match.exec(p.substringFromIndex());\n\t\t\t\tif (!match) {\n\t\t\t\t\treturn errorHandler.fatalError('doctype external id is not well-formed at position ' + p.getIndex());\n\t\t\t\t}\n\t\t\t\tif (match.groups.SystemLiteralOnly !== undefined) {\n\t\t\t\t\tdoctype.systemId = match.groups.SystemLiteralOnly;\n\t\t\t\t} else {\n\t\t\t\t\tdoctype.systemId = match.groups.SystemLiteral;\n\t\t\t\t\tdoctype.publicId = match.groups.PubidLiteral;\n\t\t\t\t}\n\t\t\t\tp.skip(match[0].length);\n\t\t\t} else if (isHTML && p.substringStartsWithCaseInsensitive(g.SYSTEM)) {\n\t\t\t\t// https://html.spec.whatwg.org/multipage/syntax.html#doctype-legacy-string\n\t\t\t\tp.skip(g.SYSTEM.length);\n\t\t\t\tif (p.skipBlanks() < 1) {\n\t\t\t\t\treturn errorHandler.fatalError('Expected whitespace after ' + g.SYSTEM + ' at position ' + p.getIndex());\n\t\t\t\t}\n\t\t\t\tdoctype.systemId = p.getMatch(g.ABOUT_LEGACY_COMPAT_SystemLiteral);\n\t\t\t\tif (!doctype.systemId) {\n\t\t\t\t\treturn errorHandler.fatalError(\n\t\t\t\t\t\t'Expected ' + g.ABOUT_LEGACY_COMPAT + ' in single or double quotes after ' + g.SYSTEM + ' at position ' + p.getIndex()\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (isHTML && doctype.systemId && !g.ABOUT_LEGACY_COMPAT_SystemLiteral.test(doctype.systemId)) {\n\t\t\t\terrorHandler.warning('Unexpected doctype.systemId in HTML document at position ' + p.getIndex());\n\t\t\t}\n\t\t\tif (!isHTML) {\n\t\t\t\tp.skipBlanks();\n\t\t\t\tdoctype.internalSubset = parseDoctypeInternalSubset(p, errorHandler);\n\t\t\t}\n\t\t\tp.skipBlanks();\n\t\t\tif (p.char() !== '>') {\n\t\t\t\treturn errorHandler.fatalError('doctype not terminated with > at position ' + p.getIndex());\n\t\t\t}\n\t\t\tp.skip(1);\n\t\t\tdomBuilder.startDTD(doctype.name, doctype.publicId, doctype.systemId, doctype.internalSubset);\n\t\t\tdomBuilder.endDTD();\n\t\t\treturn p.getIndex();\n\t\t}\n\t\tdefault:\n\t\t\treturn errorHandler.fatalError('Not well-formed XML starting with \"<!\" at position ' + start);\n\t}\n}\n\nfunction parseProcessingInstruction(source, start, domBuilder, errorHandler) {\n\tvar match = source.substring(start).match(g.PI);\n\tif (!match) {\n\t\treturn errorHandler.fatalError('Invalid processing instruction starting at position ' + start);\n\t}\n\tif (match[1].toLowerCase() === 'xml') {\n\t\tif (start > 0) {\n\t\t\treturn errorHandler.fatalError(\n\t\t\t\t'processing instruction at position ' + start + ' is an xml declaration which is only at the start of the document'\n\t\t\t);\n\t\t}\n\t\tif (!g.XMLDecl.test(source.substring(start))) {\n\t\t\treturn errorHandler.fatalError('xml declaration is not well-formed');\n\t\t}\n\t}\n\tdomBuilder.processingInstruction(match[1], match[2]);\n\treturn start + match[0].length;\n}\n\nfunction ElementAttributes() {\n\tthis.attributeNames = Object.create(null);\n}\n\nElementAttributes.prototype = {\n\tsetTagName: function (tagName) {\n\t\tif (!g.QName_exact.test(tagName)) {\n\t\t\tthrow new Error('invalid tagName:' + tagName);\n\t\t}\n\t\tthis.tagName = tagName;\n\t},\n\taddValue: function (qName, value, offset) {\n\t\tif (!g.QName_exact.test(qName)) {\n\t\t\tthrow new Error('invalid attribute:' + qName);\n\t\t}\n\t\tthis.attributeNames[qName] = this.length;\n\t\tthis[this.length++] = { qName: qName, value: value, offset: offset };\n\t},\n\tlength: 0,\n\tgetLocalName: function (i) {\n\t\treturn this[i].localName;\n\t},\n\tgetLocator: function (i) {\n\t\treturn this[i].locator;\n\t},\n\tgetQName: function (i) {\n\t\treturn this[i].qName;\n\t},\n\tgetURI: function (i) {\n\t\treturn this[i].uri;\n\t},\n\tgetValue: function (i) {\n\t\treturn this[i].value;\n\t},\n\t//\t,getIndex:function(uri, localName)){\n\t//\t\tif(localName){\n\t//\n\t//\t\t}else{\n\t//\t\t\tvar qName = uri\n\t//\t\t}\n\t//\t},\n\t//\tgetValue:function(){return this.getValue(this.getIndex.apply(this,arguments))},\n\t//\tgetType:function(uri,localName){}\n\t//\tgetType:function(i){},\n};\n\nexports.XMLReader = XMLReader;\nexports.parseUtils = parseUtils;\nexports.parseDoctypeCommentOrCData = parseDoctypeCommentOrCData;\n","'use strict';\n\nvar conventions = require('./conventions');\nvar dom = require('./dom');\nvar errors = require('./errors');\nvar entities = require('./entities');\nvar sax = require('./sax');\n\nvar DOMImplementation = dom.DOMImplementation;\n\nvar hasDefaultHTMLNamespace = conventions.hasDefaultHTMLNamespace;\nvar isHTMLMimeType = conventions.isHTMLMimeType;\nvar isValidMimeType = conventions.isValidMimeType;\nvar MIME_TYPE = conventions.MIME_TYPE;\nvar NAMESPACE = conventions.NAMESPACE;\nvar ParseError = errors.ParseError;\n\nvar XMLReader = sax.XMLReader;\n\n/**\n * Normalizes line ending according to <https://www.w3.org/TR/xml11/#sec-line-ends>,\n * including some Unicode \"newline\" characters:\n *\n * > XML parsed entities are often stored in computer files which,\n * > for editing convenience, are organized into lines.\n * > These lines are typically separated by some combination\n * > of the characters CARRIAGE RETURN (#xD) and LINE FEED (#xA).\n * >\n * > To simplify the tasks of applications, the XML processor must behave\n * > as if it normalized all line breaks in external parsed entities (including the document entity)\n * > on input, before parsing, by translating the following to a single #xA character:\n * >\n * > 1. the two-character sequence #xD #xA,\n * > 2. the two-character sequence #xD #x85,\n * > 3. the single character #x85,\n * > 4. the single character #x2028,\n * > 5. the single character #x2029,\n * > 6. any #xD character that is not immediately followed by #xA or #x85.\n *\n * @param {string} input\n * @returns {string}\n * @prettierignore\n */\nfunction normalizeLineEndings(input) {\n\treturn input.replace(/\\r[\\n\\u0085]/g, '\\n').replace(/[\\r\\u0085\\u2028\\u2029]/g, '\\n');\n}\n\n/**\n * @typedef Locator\n * @property {number} [columnNumber]\n * @property {number} [lineNumber]\n */\n\n/**\n * @typedef DOMParserOptions\n * @property {typeof assign} [assign]\n * The method to use instead of `conventions.assign`, which is used to copy values from\n * `options` before they are used for parsing.\n * @property {typeof DOMHandler} [domHandler]\n * For internal testing: The class for creating an instance for handling events from the SAX\n * parser.\n * *****Warning: By configuring a faulty implementation, the specified behavior can completely\n * be broken.*****.\n * @property {Function} [errorHandler]\n * DEPRECATED! use `onError` instead.\n * @property {function(level:ErrorLevel, message:string, context: DOMHandler):void}\n * [onError]\n * A function invoked for every error that occurs during parsing.\n *\n * If it is not provided, all errors are reported to `console.error`\n * and only `fatalError`s are thrown as a `ParseError`,\n * which prevents any further processing.\n * If the provided method throws, a `ParserError` is thrown,\n * which prevents any further processing.\n *\n * Be aware that many `warning`s are considered an error that prevents further processing in\n * most implementations.\n * @property {boolean} [locator=true]\n * Configures if the nodes created during parsing will have a `lineNumber` and a `columnNumber`\n * attribute describing their location in the XML string.\n * Default is true.\n * @property {(string) => string} [normalizeLineEndings]\n * used to replace line endings before parsing, defaults to exported `normalizeLineEndings`,\n * which normalizes line endings according to <https://www.w3.org/TR/xml11/#sec-line-ends>,\n * including some Unicode \"newline\" characters.\n * @property {Object} [xmlns]\n * The XML namespaces that should be assumed when parsing.\n * The default namespace can be provided by the key that is the empty string.\n * When the `mimeType` for HTML, XHTML or SVG are passed to `parseFromString`,\n * the default namespace that will be used,\n * will be overridden according to the specification.\n * @see {@link normalizeLineEndings}\n */\n\n/**\n * The DOMParser interface provides the ability to parse XML or HTML source code from a string\n * into a DOM `Document`.\n *\n * ***xmldom is different from the spec in that it allows an `options` parameter,\n * to control the behavior***.\n *\n * @class\n * @param {DOMParserOptions} [options]\n * @see https://developer.mozilla.org/en-US/docs/Web/API/DOMParser\n * @see https://html.spec.whatwg.org/multipage/dynamic-markup-insertion.html#dom-parsing-and-serialization\n */\nfunction DOMParser(options) {\n\toptions = options || {};\n\tif (options.locator === undefined) {\n\t\toptions.locator = true;\n\t}\n\n\t/**\n\t * The method to use instead of `conventions.assign`, which is used to copy values from\n\t * `options`\n\t * before they are used for parsing.\n\t *\n\t * @type {conventions.assign}\n\t * @private\n\t * @see {@link conventions.assign}\n\t * @readonly\n\t */\n\tthis.assign = options.assign || conventions.assign;\n\n\t/**\n\t * For internal testing: The class for creating an instance for handling events from the SAX\n\t * parser.\n\t * *****Warning: By configuring a faulty implementation, the specified behavior can completely\n\t * be broken*****.\n\t *\n\t * @type {typeof DOMHandler}\n\t * @private\n\t * @readonly\n\t */\n\tthis.domHandler = options.domHandler || DOMHandler;\n\n\t/**\n\t * A function that is invoked for every error that occurs during parsing.\n\t *\n\t * If it is not provided, all errors are reported to `console.error`\n\t * and only `fatalError`s are thrown as a `ParseError`,\n\t * which prevents any further processing.\n\t * If the provided method throws, a `ParserError` is thrown,\n\t * which prevents any further processing.\n\t *\n\t * Be aware that many `warning`s are considered an error that prevents further processing in\n\t * most implementations.\n\t *\n\t * @type {function(level:ErrorLevel, message:string, context: DOMHandler):void}\n\t * @see {@link onErrorStopParsing}\n\t * @see {@link onWarningStopParsing}\n\t */\n\tthis.onError = options.onError || options.errorHandler;\n\tif (options.errorHandler && typeof options.errorHandler !== 'function') {\n\t\tthrow new TypeError('errorHandler object is no longer supported, switch to onError!');\n\t} else if (options.errorHandler) {\n\t\toptions.errorHandler('warning', 'The `errorHandler` option has been deprecated, use `onError` instead!', this);\n\t}\n\n\t/**\n\t * used to replace line endings before parsing, defaults to `normalizeLineEndings`\n\t *\n\t * @type {(string) => string}\n\t * @readonly\n\t */\n\tthis.normalizeLineEndings = options.normalizeLineEndings || normalizeLineEndings;\n\n\t/**\n\t * Configures if the nodes created during parsing will have a `lineNumber` and a\n\t * `columnNumber`\n\t * attribute describing their location in the XML string.\n\t * Default is true.\n\t *\n\t * @type {boolean}\n\t * @readonly\n\t */\n\tthis.locator = !!options.locator;\n\n\t/**\n\t * The default namespace can be provided by the key that is the empty string.\n\t * When the `mimeType` for HTML, XHTML or SVG are passed to `parseFromString`,\n\t * the default namespace that will be used,\n\t * will be overridden according to the specification.\n\t *\n\t * @type {Readonly<Object>}\n\t * @readonly\n\t */\n\tthis.xmlns = this.assign(Object.create(null), options.xmlns);\n}\n\n/**\n * Parses `source` using the options in the way configured by the `DOMParserOptions` of `this`\n * `DOMParser`. If `mimeType` is `text/html` an HTML `Document` is created,\n * otherwise an XML `Document` is created.\n *\n * __It behaves different from the description in the living standard__:\n * - Uses the `options` passed to the `DOMParser` constructor to modify the behavior.\n * - Any unexpected input is reported to `onError` with either a `warning`,\n * `error` or `fatalError` level.\n * - Any `fatalError` throws a `ParseError` which prevents further processing.\n * - Any error thrown by `onError` is converted to a `ParseError` which prevents further\n * processing - If no `Document` was created during parsing it is reported as a `fatalError`.\n * *****Warning: By configuring a faulty DOMHandler implementation,\n * the specified behavior can completely be broken*****.\n *\n * @param {string} source\n * The XML mime type only allows string input!\n * @param {string} [mimeType='application/xml']\n * the mimeType or contentType of the document to be created determines the `type` of document\n * created (XML or HTML)\n * @returns {Document}\n * The `Document` node.\n * @throws {ParseError}\n * for any `fatalError` or anything that is thrown by `onError`\n * @throws {TypeError}\n * for any invalid `mimeType`\n * @see https://developer.mozilla.org/en-US/docs/Web/API/DOMParser/parseFromString\n * @see https://html.spec.whatwg.org/#dom-domparser-parsefromstring-dev\n */\nDOMParser.prototype.parseFromString = function (source, mimeType) {\n\tif (!isValidMimeType(mimeType)) {\n\t\tthrow new TypeError('DOMParser.parseFromString: the provided mimeType \"' + mimeType + '\" is not valid.');\n\t}\n\tvar defaultNSMap = this.assign(Object.create(null), this.xmlns);\n\tvar entityMap = entities.XML_ENTITIES;\n\tvar defaultNamespace = defaultNSMap[''] || null;\n\tif (hasDefaultHTMLNamespace(mimeType)) {\n\t\tentityMap = entities.HTML_ENTITIES;\n\t\tdefaultNamespace = NAMESPACE.HTML;\n\t} else if (mimeType === MIME_TYPE.XML_SVG_IMAGE) {\n\t\tdefaultNamespace = NAMESPACE.SVG;\n\t}\n\tdefaultNSMap[''] = defaultNamespace;\n\tdefaultNSMap.xml = defaultNSMap.xml || NAMESPACE.XML;\n\n\tvar domBuilder = new this.domHandler({\n\t\tmimeType: mimeType,\n\t\tdefaultNamespace: defaultNamespace,\n\t\tonError: this.onError,\n\t});\n\tvar locator = this.locator ? {} : undefined;\n\tif (this.locator) {\n\t\tdomBuilder.setDocumentLocator(locator);\n\t}\n\n\tvar sax = new XMLReader();\n\tsax.errorHandler = domBuilder;\n\tsax.domBuilder = domBuilder;\n\tvar isXml = !conventions.isHTMLMimeType(mimeType);\n\tif (isXml && typeof source !== 'string') {\n\t\tsax.errorHandler.fatalError('source is not a string');\n\t}\n\tsax.parse(this.normalizeLineEndings(String(source)), defaultNSMap, entityMap);\n\tif (!domBuilder.doc.documentElement) {\n\t\tsax.errorHandler.fatalError('missing root element');\n\t}\n\treturn domBuilder.doc;\n};\n\n/**\n * @typedef DOMHandlerOptions\n * @property {string} [mimeType=MIME_TYPE.XML_APPLICATION]\n * @property {string | null} [defaultNamespace=null]\n */\n/**\n * The class that is used to handle events from the SAX parser to create the related DOM\n * elements.\n *\n * Some methods are only implemented as an empty function,\n * since they are (at least currently) not relevant for xmldom.\n *\n * @class\n * @param {DOMHandlerOptions} [options]\n * @see http://www.saxproject.org/apidoc/org/xml/sax/ext/DefaultHandler2.html\n */\nfunction DOMHandler(options) {\n\tvar opt = options || {};\n\t/**\n\t * The mime type is used to determine if the DOM handler will create an XML or HTML document.\n\t * Only if it is set to `text/html` it will create an HTML document.\n\t * It defaults to MIME_TYPE.XML_APPLICATION.\n\t *\n\t * @type {string}\n\t * @see {@link MIME_TYPE}\n\t * @readonly\n\t */\n\tthis.mimeType = opt.mimeType || MIME_TYPE.XML_APPLICATION;\n\n\t/**\n\t * The namespace to use to create an XML document.\n\t * For the following reasons this is required:\n\t * - The SAX API for `startDocument` doesn't offer any way to pass a namespace,\n\t * since at that point there is no way for the parser to know what the default namespace from\n\t * the document will be.\n\t * - When creating using `DOMImplementation.createDocument` it is required to pass a\n\t * namespace,\n\t * to determine the correct `Document.contentType`, which should match `this.mimeType`.\n\t * - When parsing an XML document with the `application/xhtml+xml` mimeType,\n\t * the HTML namespace needs to be the default namespace.\n\t *\n\t * @type {string | null}\n\t * @private\n\t * @readonly\n\t */\n\tthis.defaultNamespace = opt.defaultNamespace || null;\n\n\t/**\n\t * @type {boolean}\n\t * @private\n\t */\n\tthis.cdata = false;\n\n\t/**\n\t * The last `Element` that was created by `startElement`.\n\t * `endElement` sets it to the `currentElement.parentNode`.\n\t *\n\t * Note: The sax parser currently sets it to white space text nodes between tags.\n\t *\n\t * @type {Element | Node | undefined}\n\t * @private\n\t */\n\tthis.currentElement = undefined;\n\n\t/**\n\t * The Document that is created as part of `startDocument`,\n\t * and returned by `DOMParser.parseFromString`.\n\t *\n\t * @type {Document | undefined}\n\t * @readonly\n\t */\n\tthis.doc = undefined;\n\n\t/**\n\t * The locator is stored as part of setDocumentLocator.\n\t * It is controlled and mutated by the SAX parser to store the current parsing position.\n\t * It is used by DOMHandler to set `columnNumber` and `lineNumber`\n\t * on the DOM nodes.\n\t *\n\t * @type {Readonly<Locator> | undefined}\n\t * @private\n\t * @readonly (the\n\t * sax parser currently sometimes set's it)\n\t */\n\tthis.locator = undefined;\n\t/**\n\t * @type {function (level:ErrorLevel ,message:string, context:DOMHandler):void}\n\t * @readonly\n\t */\n\tthis.onError = opt.onError;\n}\n\nfunction position(locator, node) {\n\tnode.lineNumber = locator.lineNumber;\n\tnode.columnNumber = locator.columnNumber;\n}\n\nDOMHandler.prototype = {\n\t/**\n\t * Either creates an XML or an HTML document and stores it under `this.doc`.\n\t * If it is an XML document, `this.defaultNamespace` is used to create it,\n\t * and it will not contain any `childNodes`.\n\t * If it is an HTML document, it will be created without any `childNodes`.\n\t *\n\t * @see http://www.saxproject.org/apidoc/org/xml/sax/ContentHandler.html\n\t */\n\tstartDocument: function () {\n\t\tvar impl = new DOMImplementation();\n\t\tthis.doc = isHTMLMimeType(this.mimeType) ? impl.createHTMLDocument(false) : impl.createDocument(this.defaultNamespace, '');\n\t},\n\tstartElement: function (namespaceURI, localName, qName, attrs) {\n\t\tvar doc = this.doc;\n\t\tvar el = doc.createElementNS(namespaceURI, qName || localName);\n\t\tvar len = attrs.length;\n\t\tappendElement(this, el);\n\t\tthis.currentElement = el;\n\n\t\tthis.locator && position(this.locator, el);\n\t\tfor (var i = 0; i < len; i++) {\n\t\t\tvar namespaceURI = attrs.getURI(i);\n\t\t\tvar value = attrs.getValue(i);\n\t\t\tvar qName = attrs.getQName(i);\n\t\t\tvar attr = doc.createAttributeNS(namespaceURI, qName);\n\t\t\tthis.locator && position(attrs.getLocator(i), attr);\n\t\t\tattr.value = attr.nodeValue = value;\n\t\t\tel.setAttributeNode(attr);\n\t\t}\n\t},\n\tendElement: function (namespaceURI, localName, qName) {\n\t\tthis.currentElement = this.currentElement.parentNode;\n\t},\n\tstartPrefixMapping: function (prefix, uri) {},\n\tendPrefixMapping: function (prefix) {},\n\tprocessingInstruction: function (target, data) {\n\t\tvar ins = this.doc.createProcessingInstruction(target, data);\n\t\tthis.locator && position(this.locator, ins);\n\t\tappendElement(this, ins);\n\t},\n\tignorableWhitespace: function (ch, start, length) {},\n\tcharacters: function (chars, start, length) {\n\t\tchars = _toString.apply(this, arguments);\n\t\t//console.log(chars)\n\t\tif (chars) {\n\t\t\tif (this.cdata) {\n\t\t\t\tvar charNode = this.doc.createCDATASection(chars);\n\t\t\t} else {\n\t\t\t\tvar charNode = this.doc.createTextNode(chars);\n\t\t\t}\n\t\t\tif (this.currentElement) {\n\t\t\t\tthis.currentElement.appendChild(charNode);\n\t\t\t} else if (/^\\s*$/.test(chars)) {\n\t\t\t\tthis.doc.appendChild(charNode);\n\t\t\t\t//process xml\n\t\t\t}\n\t\t\tthis.locator && position(this.locator, charNode);\n\t\t}\n\t},\n\tskippedEntity: function (name) {},\n\tendDocument: function () {\n\t\tthis.doc.normalize();\n\t},\n\t/**\n\t * Stores the locator to be able to set the `columnNumber` and `lineNumber`\n\t * on the created DOM nodes.\n\t *\n\t * @param {Locator} locator\n\t */\n\tsetDocumentLocator: function (locator) {\n\t\tif (locator) {\n\t\t\tlocator.lineNumber = 0;\n\t\t}\n\t\tthis.locator = locator;\n\t},\n\t//LexicalHandler\n\tcomment: function (chars, start, length) {\n\t\tchars = _toString.apply(this, arguments);\n\t\tvar comm = this.doc.createComment(chars);\n\t\tthis.locator && position(this.locator, comm);\n\t\tappendElement(this, comm);\n\t},\n\n\tstartCDATA: function () {\n\t\t//used in characters() methods\n\t\tthis.cdata = true;\n\t},\n\tendCDATA: function () {\n\t\tthis.cdata = false;\n\t},\n\n\tstartDTD: function (name, publicId, systemId, internalSubset) {\n\t\tvar impl = this.doc.implementation;\n\t\tif (impl && impl.createDocumentType) {\n\t\t\tvar dt = impl.createDocumentType(name, publicId, systemId, internalSubset);\n\t\t\tthis.locator && position(this.locator, dt);\n\t\t\tappendElement(this, dt);\n\t\t\tthis.doc.doctype = dt;\n\t\t}\n\t},\n\treportError: function (level, message) {\n\t\tif (typeof this.onError === 'function') {\n\t\t\ttry {\n\t\t\t\tthis.onError(level, message, this);\n\t\t\t} catch (e) {\n\t\t\t\tthrow new ParseError('Reporting ' + level + ' \"' + message + '\" caused ' + e, this.locator);\n\t\t\t}\n\t\t} else {\n\t\t\tconsole.error('[xmldom ' + level + ']\\t' + message, _locator(this.locator));\n\t\t}\n\t},\n\t/**\n\t * @see http://www.saxproject.org/apidoc/org/xml/sax/ErrorHandler.html\n\t */\n\twarning: function (message) {\n\t\tthis.reportError('warning', message);\n\t},\n\terror: function (message) {\n\t\tthis.reportError('error', message);\n\t},\n\t/**\n\t * This function reports a fatal error and throws a ParseError.\n\t *\n\t * @param {string} message\n\t * - The message to be used for reporting and throwing the error.\n\t * @returns {never}\n\t * This function always throws an error and never returns a value.\n\t * @throws {ParseError}\n\t * Always throws a ParseError with the provided message.\n\t */\n\tfatalError: function (message) {\n\t\tthis.reportError('fatalError', message);\n\t\tthrow new ParseError(message, this.locator);\n\t},\n};\n\nfunction _locator(l) {\n\tif (l) {\n\t\treturn '\\n@#[line:' + l.lineNumber + ',col:' + l.columnNumber + ']';\n\t}\n}\n\nfunction _toString(chars, start, length) {\n\tif (typeof chars == 'string') {\n\t\treturn chars.substr(start, length);\n\t} else {\n\t\t//java sax connect width xmldom on rhino(what about: \"? && !(chars instanceof String)\")\n\t\tif (chars.length >= start + length || start) {\n\t\t\treturn new java.lang.String(chars, start, length) + '';\n\t\t}\n\t\treturn chars;\n\t}\n}\n\n/*\n * @link http://www.saxproject.org/apidoc/org/xml/sax/ext/LexicalHandler.html\n * used method of org.xml.sax.ext.LexicalHandler:\n * #comment(chars, start, length)\n * #startCDATA()\n * #endCDATA()\n * #startDTD(name, publicId, systemId)\n *\n *\n * IGNORED method of org.xml.sax.ext.LexicalHandler:\n * #endDTD()\n * #startEntity(name)\n * #endEntity(name)\n *\n *\n * @link http://www.saxproject.org/apidoc/org/xml/sax/ext/DeclHandler.html\n * IGNORED method of org.xml.sax.ext.DeclHandler\n * \t#attributeDecl(eName, aName, type, mode, value)\n * #elementDecl(name, model)\n * #externalEntityDecl(name, publicId, systemId)\n * #internalEntityDecl(name, value)\n * @link http://www.saxproject.org/apidoc/org/xml/sax/ext/EntityResolver2.html\n * IGNORED method of org.xml.sax.EntityResolver2\n * #resolveEntity(String name,String publicId,String baseURI,String systemId)\n * #resolveEntity(publicId, systemId)\n * #getExternalSubset(name, baseURI)\n * @link http://www.saxproject.org/apidoc/org/xml/sax/DTDHandler.html\n * IGNORED method of org.xml.sax.DTDHandler\n * #notationDecl(name, publicId, systemId) {};\n * #unparsedEntityDecl(name, publicId, systemId, notationName) {};\n */\n'endDTD,startEntity,endEntity,attributeDecl,elementDecl,externalEntityDecl,internalEntityDecl,resolveEntity,getExternalSubset,notationDecl,unparsedEntityDecl'.replace(\n\t/\\w+/g,\n\tfunction (key) {\n\t\tDOMHandler.prototype[key] = function () {\n\t\t\treturn null;\n\t\t};\n\t}\n);\n\n/* Private static helpers treated below as private instance methods, so don't need to add these to the public API; we might use a Relator to also get rid of non-standard public properties */\nfunction appendElement(handler, node) {\n\tif (!handler.currentElement) {\n\t\thandler.doc.appendChild(node);\n\t} else {\n\t\thandler.currentElement.appendChild(node);\n\t}\n}\n\n/**\n * A method that prevents any further parsing when an `error`\n * with level `error` is reported during parsing.\n *\n * @see {@link DOMParserOptions.onError}\n * @see {@link onWarningStopParsing}\n */\nfunction onErrorStopParsing(level) {\n\tif (level === 'error') throw 'onErrorStopParsing';\n}\n\n/**\n * A method that prevents any further parsing when any `error` is reported during parsing.\n *\n * @see {@link DOMParserOptions.onError}\n * @see {@link onErrorStopParsing}\n */\nfunction onWarningStopParsing() {\n\tthrow 'onWarningStopParsing';\n}\n\nexports.__DOMHandler = DOMHandler;\nexports.DOMParser = DOMParser;\nexports.normalizeLineEndings = normalizeLineEndings;\nexports.onErrorStopParsing = onErrorStopParsing;\nexports.onWarningStopParsing = onWarningStopParsing;\n","'use strict';\nvar conventions = require('./conventions');\nexports.assign = conventions.assign;\nexports.hasDefaultHTMLNamespace = conventions.hasDefaultHTMLNamespace;\nexports.isHTMLMimeType = conventions.isHTMLMimeType;\nexports.isValidMimeType = conventions.isValidMimeType;\nexports.MIME_TYPE = conventions.MIME_TYPE;\nexports.NAMESPACE = conventions.NAMESPACE;\n\nvar errors = require('./errors');\nexports.DOMException = errors.DOMException;\nexports.DOMExceptionName = errors.DOMExceptionName;\nexports.ExceptionCode = errors.ExceptionCode;\nexports.ParseError = errors.ParseError;\n\nvar dom = require('./dom');\nexports.Attr = dom.Attr;\nexports.CDATASection = dom.CDATASection;\nexports.CharacterData = dom.CharacterData;\nexports.Comment = dom.Comment;\nexports.Document = dom.Document;\nexports.DocumentFragment = dom.DocumentFragment;\nexports.DocumentType = dom.DocumentType;\nexports.DOMImplementation = dom.DOMImplementation;\nexports.Element = dom.Element;\nexports.Entity = dom.Entity;\nexports.EntityReference = dom.EntityReference;\nexports.LiveNodeList = dom.LiveNodeList;\nexports.NamedNodeMap = dom.NamedNodeMap;\nexports.Node = dom.Node;\nexports.NodeList = dom.NodeList;\nexports.Notation = dom.Notation;\nexports.ProcessingInstruction = dom.ProcessingInstruction;\nexports.Text = dom.Text;\nexports.XMLSerializer = dom.XMLSerializer;\n\nvar domParser = require('./dom-parser');\nexports.DOMParser = domParser.DOMParser;\nexports.normalizeLineEndings = domParser.normalizeLineEndings;\nexports.onErrorStopParsing = domParser.onErrorStopParsing;\nexports.onWarningStopParsing = domParser.onWarningStopParsing;\n","/**\n * Utility functions for $rdf\n * @module util\n */\nimport { docpart } from './uri';\nimport log from './log';\nimport * as uri from './uri';\nimport NamedNode from './named-node';\nconst string = {\n template: stringTemplate\n};\nexport { log, uri, string };\nexport function mediaTypeClass(mediaType) {\n mediaType = mediaType.split(';')[0].trim(); // remove media type parameters\n return new NamedNode('http://www.w3.org/ns/iana/media-types/' + mediaType + '#Resource');\n}\nexport function linkRelationProperty(relation) {\n return new NamedNode('http://www.w3.org/ns/iana/link-relations/relation#' + relation.trim());\n}\n\n/**\n * Adds callback functionality to an object.\n * Callback functions are indexed by a 'hook' string.\n * They return true if they want to be called again.\n * @method callbackify\n * @param obj {Object}\n * @param callbacks {Array<string>}\n */\nexport function callbackify(obj, callbacks) {\n obj.callbacks = {};\n for (var x = callbacks.length - 1; x >= 0; x--) {\n obj.callbacks[callbacks[x]] = [];\n }\n obj.addHook = function (hook) {\n if (!obj.callbacks[hook]) {\n obj.callbacks[hook] = [];\n }\n };\n obj.addCallback = function (hook, func) {\n obj.callbacks[hook].push(func);\n };\n obj.removeCallback = function (hook, funcName) {\n for (var i = 0; i < obj.callbacks[hook].length; i++) {\n if (obj.callbacks[hook][i].name === funcName) {\n obj.callbacks[hook].splice(i, 1);\n return true;\n }\n }\n return false;\n };\n obj.insertCallback = function (hook, func) {\n obj.callbacks[hook].unshift(func);\n };\n obj.fireCallbacks = function fireCallbacks(hook, args) {\n var newCallbacks = [];\n var replaceCallbacks = [];\n var len = obj.callbacks[hook].length;\n var x;\n let callback;\n\n // log.info('!@$ Firing '+hook+' call back with length'+len)\n for (x = len - 1; x >= 0; x--) {\n // log.info('@@ Firing '+hook+' callback '+ obj.callbacks[hook][x])\n callback = obj.callbacks[hook][x];\n if (callback && callback.apply(obj, args)) {\n newCallbacks.push(callback);\n }\n }\n for (x = newCallbacks.length - 1; x >= 0; x--) {\n replaceCallbacks.push(newCallbacks[x]);\n }\n for (x = len; x < obj.callbacks[hook].length; x++) {\n replaceCallbacks.push(obj.callbacks[hook][x]);\n }\n obj.callbacks[hook] = replaceCallbacks;\n };\n}\n\n/**\n * Returns a DOM parser based on current runtime environment.\n */\nexport function DOMParserFactory() {\n if (window.DOMParser) {\n return new DOMParser();\n } else if (window.ActiveXObject) {\n return new ActiveXObject('Microsoft.XMLDOM');\n } else {\n return false;\n }\n}\n\n// From https://github.com/linkeddata/dokieli\nexport function domToString(node, options) {\n options = options || {};\n var selfClosing = [];\n if (options && options.selfClosing) {\n options.selfClosing.split(' ').forEach(function (n) {\n selfClosing[n] = true;\n });\n }\n var skipAttributes = [];\n if (options && options.skipAttributes) {\n options.skipAttributes.split(' ').forEach(function (n) {\n skipAttributes[n] = true;\n });\n }\n return dumpNode(node, options, selfClosing, skipAttributes);\n}\nexport function dumpNode(node, options, selfClosing, skipAttributes) {\n var i;\n var out = '';\n var noEsc = [false];\n if (typeof node.nodeType === 'undefined') return out;\n if (node.nodeType === 1) {\n if (node.hasAttribute('class') && options && options.classWithChildText && node.matches(options.classWithChildText.class)) {\n out += node.querySelector(options.classWithChildText.element).textContent;\n } else if (!(options && options.skipNodeWithClass && node.matches('.' + options.skipNodeWithClass))) {\n var ename = node.nodeName.toLowerCase();\n out += '<' + ename;\n var attrList = [];\n for (i = node.attributes.length - 1; i >= 0; i--) {\n var atn = node.attributes[i];\n if (skipAttributes && skipAttributes.length > 0 && skipAttributes[atn.name]) continue;\n if (/^\\d+$/.test(atn.name)) continue;\n if (atn.name === 'class' && options && options.replaceClassItemWith && atn.value.split(' ').indexOf(options.replaceClassItemWith.source) > -1) {\n var re = new RegExp(options.replaceClassItemWith.source, 'g');\n atn.value = atn.value.replace(re, options.replaceClassItemWith.target).trim();\n }\n if (!(atn.name === 'class' && options && options.skipClassWithValue && options.skipClassWithValue === atn.value)) {\n attrList.push(atn.name + '=\\'' + atn.value.replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;').replace(/'/g, '&quot;') + '\\'');\n }\n }\n if (attrList.length > 0) {\n if (options && options.sortAttributes) {\n attrList.sort(function (a, b) {\n return a.toLowerCase().localeCompare(b.toLowerCase());\n });\n }\n out += ' ' + attrList.join(' ');\n }\n if (selfClosing && selfClosing.ename) {\n out += ' />';\n } else {\n out += '>';\n out += ename === 'html' ? '\\n ' : '';\n noEsc.push(ename === 'style' || ename === 'script');\n for (i = 0; i < node.childNodes.length; i++) out += dumpNode(node.childNodes[i]);\n noEsc.pop();\n out += ename === 'body' ? '</' + ename + '>' + '\\n' : '</' + ename + '>';\n }\n }\n } else if (node.nodeType === 8) {\n // FIXME: If comments are not tabbed in source, a new line is not prepended\n out += '<!--' + node.nodeValue + '-->';\n } else if (node.nodeType === 3 || node.nodeType === 4) {\n // XXX: Remove new lines which were added after DOM ready\n var nl = node.nodeValue.replace(/\\n+$/, '');\n out += noEsc[noEsc.length - 1] ? nl : nl.replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;');\n } else {\n console.log('Warning; Cannot handle serialising nodes of type: ' + node.nodeType);\n console.log(node);\n }\n return out;\n}\nexport function dtstamp() {\n var now = new Date();\n var year = now.getYear() + 1900;\n var month = now.getMonth() + 1;\n var day = now.getDate();\n var hour = now.getUTCHours();\n var minute = now.getUTCMinutes();\n var second = now.getSeconds();\n if (month < 10) month = '0' + month;\n if (day < 10) day = '0' + day;\n if (hour < 10) hour = '0' + hour;\n if (minute < 10) minute = '0' + minute;\n if (second < 10) second = '0' + second;\n return year + '-' + month + '-' + day + 'T' + hour + ':' + minute + ':' + second + 'Z';\n}\n\n/**\n * Compares statements (heavy comparison for repeatable canonical ordering)\n */\nexport function heavyCompare(x, y, g, uriMap) {\n var nonBlank = function (x) {\n return x.termType === 'BlankNode' ? null : x;\n };\n var signature = function (x) {\n var lis = g.statementsMatching(x).map(function (st) {\n return '' + nonBlank(st.subject) + ' ' + nonBlank(st.predicate) + ' ' + nonBlank(st.object);\n }).concat(g.statementsMatching(undefined, undefined, x).map(function (st) {\n return '' + nonBlank(st.subject) + ' ' + nonBlank(st.predicate) + ' ' + nonBlank(st.object);\n }));\n lis.sort();\n return lis.join('\\n');\n };\n const comparison = Object.prototype.hasOwnProperty.call(g, \"compareTerms\") ? g.compareTerms(x, y) : x.compareTerm(y);\n if (x.termType === 'BlankNode' && y.termType === 'BlankNode') {\n if (comparison === 0) return 0; // Same\n if (signature(x) > signature(y)) return +1;\n if (signature(x) < signature(y)) return -1;\n return comparison; // Too bad -- this order not canonical.\n // throw \"different bnodes indistinquishable for sorting\"\n } else {\n if (uriMap && x.uri && y.uri) {\n return (uriMap[x.uri] || x.uri).localeCompare(uriMap[y.uri] || y.uri);\n }\n return comparison;\n }\n}\nexport function heavyCompareSPO(x, y, g, uriMap) {\n return heavyCompare(x.subject, y.subject, g, uriMap) || heavyCompare(x.predicate, y.predicate, g, uriMap) || heavyCompare(x.object, y.object, g, uriMap);\n}\n\n/**\n * Defines a simple debugging function\n * @method output\n * @param o {String}\n */\nexport function output(o) {\n var k = document.createElement('div');\n k.textContent = o;\n document.body.appendChild(k);\n}\nimport { DOMParser } from '@xmldom/xmldom';\n\n/**\n * Returns a DOM from parsed XML.\n * @returns {Document}\n */\nexport function parseXML(str, options) {\n var dparser;\n options = options || {};\n if (typeof module !== 'undefined' && module && module.exports) {\n // Node.js\n var dom = new DOMParser().parseFromString(str, options.contentType || 'application/xhtml+xml');\n return dom;\n } else {\n if (typeof window !== 'undefined' && window.DOMParser) {\n dparser = new window.DOMParser(); // seems to actually work\n } else {\n dparser = new DOMParser(); // Doc says this works\n }\n }\n return dparser.parseFromString(str, 'application/xml');\n}\n\n/**\n * Removes all statements equal to x from a\n */\nexport function RDFArrayRemove(a, x) {\n for (var i = 0; i < a.length; i++) {\n // TODO: This used to be the following, which didnt always work..why\n // if(a[i] === x)\n if (a[i].subject.equals(x.subject) && a[i].predicate.equals(x.predicate) && a[i].object.equals(x.object) && a[i].why.equals(x.why)) {\n a.splice(i, 1);\n return;\n }\n }\n throw new Error('RDFArrayRemove: Array did not contain ' + x + ' ' + x.why);\n}\nexport function string_startswith(str, pref) {\n // missing library routines\n return str.slice(0, pref.length) === pref;\n}\n\n/**\n * C++, python style %s -> subs\n */\nfunction stringTemplate(base, subs) {\n var baseA = base.split('%s');\n var result = '';\n for (var i = 0; i < subs.length; i++) {\n subs[i] += '';\n result += baseA[i] + subs[i];\n }\n return result + baseA.slice(subs.length).join();\n}\n\n// Stack dump on errors - to pass errors back\n\nexport function stackString(e) {\n var str = '' + e + '\\n';\n if (!e.stack) {\n return str + 'No stack available.\\n';\n }\n var lines = e.stack.toString().split('\\n');\n var toprint = [];\n for (var i = 0; i < lines.length; i++) {\n var line = lines[i];\n if (line.indexOf('ecmaunit.js') > -1) {\n // remove useless bit of traceback\n break;\n }\n if (line.charAt(0) == '(') {\n line = 'function' + line;\n }\n var chunks = line.split('@');\n toprint.push(chunks);\n }\n // toprint.reverse(); No - I prefer the latest at the top by the error message -tbl\n\n for (var i = 0; i < toprint.length; i++) {\n str += ' ' + toprint[i][1] + '\\n ' + toprint[i][0];\n }\n return str;\n}","import CanonicalDataFactory from \"./factories/canonical-data-factory\";\nexport function createXSD(localFactory = CanonicalDataFactory) {\n return {\n boolean: localFactory.namedNode(\"http://www.w3.org/2001/XMLSchema#boolean\"),\n dateTime: localFactory.namedNode(\"http://www.w3.org/2001/XMLSchema#dateTime\"),\n decimal: localFactory.namedNode(\"http://www.w3.org/2001/XMLSchema#decimal\"),\n double: localFactory.namedNode(\"http://www.w3.org/2001/XMLSchema#double\"),\n integer: localFactory.namedNode(\"http://www.w3.org/2001/XMLSchema#integer\"),\n langString: localFactory.namedNode(\"http://www.w3.org/1999/02/22-rdf-syntax-ns#langString\"),\n string: localFactory.namedNode(\"http://www.w3.org/2001/XMLSchema#string\")\n };\n}\nconst defaultXSD = createXSD(CanonicalDataFactory);\nexport default defaultXSD;","import _defineProperty from \"@babel/runtime/helpers/defineProperty\";\n/* Serialization of RDF Graphs\n**\n** Tim Berners-Lee 2006\n** This is was http://dig.csail.mit.edu/2005/ajar/ajaw/js/rdf/serialize.js\n** This is or was https://github.com/linkeddata/rdflib.js/blob/main/src/serializer.js\n** Licence: MIT\n*/\nimport * as ttl2jsonld from '@frogcat/ttl2jsonld';\nimport solidNs from 'solid-namespace';\nimport CanonicalDataFactory from './factories/canonical-data-factory';\nimport * as Uri from './uri';\nimport * as Util from './utils-js';\nimport { createXSD } from './xsd';\nexport default function createSerializer(store) {\n return new Serializer(store);\n}\n;\nexport class Serializer {\n constructor(store) {\n _defineProperty(this, \"_notQNameChars\", '\\t\\r\\n !\"#$%&\\'()*,+/;<=>?@[\\\\]^`{|}~');\n // issue#228\n _defineProperty(this, \"_notNameChars\", this._notQNameChars + ':');\n // stringToN3: String escaping for N3\n _defineProperty(this, \"validPrefix\", new RegExp(/^[a-zA-Z][a-zA-Z0-9]*$/));\n _defineProperty(this, \"forbidden1\", new RegExp(/[\\\\\"\\b\\f\\r\\v\\t\\n\\u0080-\\uffff]/gm));\n _defineProperty(this, \"forbidden3\", new RegExp(/[\\\\\"\\b\\f\\r\\v\\u0080-\\uffff]/gm));\n this.flags = '';\n this.base = null;\n this.prefixes = []; // suggested prefixes\n this.namespaces = []; // complementary\n const nsKeys = Object.keys(solidNs());\n for (const i in nsKeys) {\n const uri = solidNs()[nsKeys[i]]('');\n const prefix = nsKeys[i];\n this.prefixes[uri] = prefix;\n this.namespaces[prefix] = uri;\n }\n this.suggestPrefix('rdf', 'http://www.w3.org/1999/02/22-rdf-syntax-ns#'); // XML code assumes this!\n this.suggestPrefix('xml', 'reserved:reservedForFutureUse'); // XML reserves xml: in the spec.\n\n this.namespacesUsed = []; // Count actually used and so needed in @prefixes\n this.keywords = ['a']; // The only one we generate at the moment\n this.prefixchars = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';\n this.incoming = null; // Array not calculated yet\n this.formulas = []; // remembering original formulae from hashes\n this.store = store;\n this.rdfFactory = store.rdfFactory || CanonicalDataFactory;\n this.xsd = createXSD(this.rdfFactory);\n }\n setBase(base) {\n this.base = base;\n return this;\n }\n\n /**\n * Set serializer behavior flags. Letters can be combined with spaces.\n * Examples: 'si', 'deinprstux', 'si dr', 'o'.\n * Notable flags:\n * - 'o': do not abbreviate to a prefixed name when the local part contains a dot\n */\n setFlags(flags) {\n this.flags = flags || '';\n return this;\n }\n toStr(x) {\n var s = x.toNT();\n if (x.termType === 'Graph') {\n this.formulas[s] = x; // remember as reverse does not work\n }\n return s;\n }\n fromStr(s) {\n if (s[0] === '{') {\n var x = this.formulas[s];\n if (!x) console.log('No formula object for ' + s);\n return x;\n }\n return this.store.fromNT(s);\n }\n\n /**\n * Defines a set of [prefix, namespace] pairs to be used by this Serializer instance.\n * Overrides previous prefixes if any\n * @param namespaces\n * @return {Serializer}\n */\n setNamespaces(namespaces) {\n for (var px in namespaces) {\n this.setPrefix(px, namespaces[px]);\n }\n return this;\n }\n\n /**\n * Defines a namespace prefix, overriding any existing prefix for that URI\n * @param prefix\n * @param uri\n */\n setPrefix(prefix, uri) {\n if (prefix.slice(0, 7) === 'default') return; // Try to weed these out\n if (prefix.slice(0, 2) === 'ns') return; // From others inferior algos\n if (!prefix || !uri) return; // empty strings not suitable\n\n // remove any existing prefix targeting this uri\n // for (let existingPrefix in this.namespaces) {\n // if (this.namespaces[existingPrefix] == uri)\n // delete this.namespaces[existingPrefix];\n // }\n\n // remove any existing mapping for this prefix\n for (let existingNs in this.prefixes) {\n if (this.prefixes[existingNs] == prefix) delete this.prefixes[existingNs];\n }\n this.prefixes[uri] = prefix;\n this.namespaces[prefix] = uri;\n }\n\n /* Accumulate Namespaces\n **\n ** These are only hints. If two overlap, only one gets used\n ** There is therefore no guarantee in general.\n */\n suggestPrefix(prefix, uri) {\n if (prefix.slice(0, 7) === 'default') return; // Try to weed these out\n if (prefix.slice(0, 2) === 'ns') return; // From others inferior algos\n if (!prefix || !uri) return; // empty strings not suitable\n if (prefix in this.namespaces || uri in this.prefixes) return; // already used\n this.prefixes[uri] = prefix;\n this.namespaces[prefix] = uri;\n }\n\n // Takes a namespace -> prefix map\n suggestNamespaces(namespaces) {\n for (var px in namespaces) {\n this.suggestPrefix(px, namespaces[px]);\n }\n return this;\n }\n checkIntegrity() {\n var p, ns;\n for (p in this.namespaces) {\n if (this.prefixes[this.namespaces[p]] !== p) {\n throw new Error('Serializer integity error 1: ' + p + ', ' + this.namespaces[p] + ', ' + this.prefixes[this.namespaces[p]] + '!');\n }\n }\n for (ns in this.prefixes) {\n if (this.namespaces[this.prefixes[ns]] !== ns) {\n throw new Error('Serializer integity error 2: ' + ns + ', ' + this.prefixs[ns] + ', ' + this.namespaces[this.prefixes[ns]] + '!');\n }\n }\n }\n\n // Make up an unused prefix for a random namespace\n makeUpPrefix(uri) {\n var p = uri;\n function canUseMethod(pp) {\n if (!this.validPrefix.test(pp)) return false; // bad format\n if (pp === 'ns') return false; // boring\n if (pp in this.namespaces) return false; // already used\n this.prefixes[uri] = pp;\n this.namespaces[pp] = uri;\n return pp;\n }\n var canUse = canUseMethod.bind(this);\n if ('#/'.indexOf(p[p.length - 1]) >= 0) p = p.slice(0, -1);\n var slash = p.lastIndexOf('/');\n if (slash >= 0) p = p.slice(slash + 1);\n var i = 0;\n while (i < p.length) {\n if (this.prefixchars.indexOf(p[i]) >= 0) {\n i++;\n } else {\n break;\n }\n }\n p = p.slice(0, i);\n if (p.length < 6 && canUse(p)) return p; // exact is best\n if (canUse(p.slice(0, 3))) return p.slice(0, 3);\n if (canUse(p.slice(0, 2))) return p.slice(0, 2);\n if (canUse(p.slice(0, 4))) return p.slice(0, 4);\n if (canUse(p.slice(0, 1))) return p.slice(0, 1);\n if (canUse(p.slice(0, 5))) return p.slice(0, 5);\n if (!this.validPrefix.test(p)) {\n p = 'n'; // Otherwise the loop below may never termimnate\n }\n for (var j = 0;; j++) if (canUse(p.slice(0, 3) + j)) return p.slice(0, 3) + j;\n }\n rootSubjects(sts) {\n var incoming = {};\n var subjects = {};\n var allBnodes = {};\n\n /* This scan is to find out which nodes will have to be the roots of trees\n ** in the serialized form. This will be any symbols, and any bnodes\n ** which hve more or less than one incoming arc, and any bnodes which have\n ** one incoming arc but it is an uninterrupted loop of such nodes back to itself.\n ** This should be kept linear time with repect to the number of statements.\n ** Note it does not use any indexing of the store.\n */\n for (var i = 0; i < sts.length; i++) {\n var st = sts[i];\n var checkMentions = function (x) {\n if (!incoming.hasOwnProperty(x)) incoming[x] = [];\n incoming[x].push(st.subject); // List of things which will cause this to be printed\n };\n var st2 = [st.subject, st.predicate, st.object];\n st2.map(function (y) {\n if (y.termType === 'BlankNode') {\n allBnodes[y.toNT()] = true;\n } else if (y.termType === 'Collection') {\n y.elements.forEach(function (z) {\n checkMentions(z); // bnodes in collections important\n });\n }\n });\n checkMentions(sts[i].object);\n var ss = subjects[this.toStr(st.subject)]; // Statements with this as subject\n if (!ss) ss = [];\n ss.push(st);\n subjects[this.toStr(st.subject)] = ss; // Make hash. @@ too slow for formula?\n }\n var roots = [];\n for (var xNT in subjects) {\n if (!subjects.hasOwnProperty(xNT)) continue;\n var y = this.fromStr(xNT);\n if (y.termType !== 'BlankNode' || !incoming[y] || incoming[y].length !== 1) {\n roots.push(y);\n continue;\n }\n }\n this.incoming = incoming; // Keep for serializing @@ Bug for nested formulas\n\n // Now do the scan using existing roots\n var rootsHash = {};\n for (var k = 0; k < roots.length; k++) {\n rootsHash[roots[k].toNT()] = true;\n }\n return {\n 'roots': roots,\n 'subjects': subjects,\n 'rootsHash': rootsHash,\n 'incoming': incoming\n };\n }\n\n // //////////////////////////////////////////////////////\n\n toN3(f) {\n return this.statementsToN3(f.statements);\n }\n // Validate if a string is a valid PN_LOCAL per Turtle 1.1 spec\n // Allows dots inside the local name but not as trailing character\n // Also allows empty local names (for URIs ending in / or #)\n isValidPNLocal(local) {\n // Empty local name is valid (e.g., ex: for http://example.com/)\n if (local.length === 0) return true;\n\n // Cannot end with a dot\n if (local[local.length - 1] === '.') return false;\n\n // Check each character (allow dots mid-string)\n for (var i = 0; i < local.length; i++) {\n var ch = local[i];\n // Dot is allowed unless it's the last character (checked above)\n if (ch === '.') continue;\n // Other characters must not be in the blacklist\n if (this._notNameChars.indexOf(ch) >= 0) {\n return false;\n }\n }\n return true;\n }\n explicitURI(uri) {\n if (this.flags.indexOf('r') < 0 && this.base) {\n uri = Uri.refTo(this.base, uri);\n } else if (this.flags.indexOf('u') >= 0) {\n // Unicode encoding NTriples style\n uri = backslashUify(uri);\n } else {\n uri = hexify(decodeURI(uri));\n }\n return '<' + uri + '>';\n }\n statementsToNTriples(sts) {\n var sorted = sts.slice();\n sorted.sort();\n var str = '';\n var rdfns = 'http://www.w3.org/1999/02/22-rdf-syntax-ns#';\n var self = this;\n var kb = this.store;\n var factory = this.rdfFactory;\n var termToNT = function (x) {\n if (x.termType !== 'Collection') {\n return self.atomicTermToN3(x);\n }\n var list = x.elements;\n var rest = kb.sym(rdfns + 'nill');\n for (var i = list.length - 1; i >= 0; i--) {\n var bnode = factory.blankNode();\n str += termToNT(bnode) + ' ' + termToNT(kb.sym(rdfns + 'first')) + ' ' + termToNT(list[i]) + '.\\n';\n str += termToNT(bnode) + ' ' + termToNT(kb.sym(rdfns + 'rest')) + ' ' + termToNT(rest) + '.\\n';\n rest = bnode;\n }\n return self.atomicTermToN3(rest);\n };\n for (var i = 0; i < sorted.length; i++) {\n var st = sorted[i];\n var s = '';\n s += termToNT(st.subject) + ' ';\n s += termToNT(st.predicate) + ' ';\n s += termToNT(st.object) + ' ';\n if (this.flags.indexOf('q') >= 0) {\n // Do quads not nrtiples\n s += termToNT(st.why) + ' ';\n }\n s += '.\\n';\n str += s;\n }\n return str;\n }\n statementsToN3(sts) {\n var indent = 4;\n var width = 80;\n var kb = this.store;\n // A URI Map alows us to put the type statemnts at the top.\n var uriMap = {\n 'http://www.w3.org/1999/02/22-rdf-syntax-ns#type': 'aaa:00'\n };\n var SPO = function (x, y) {\n // Do limited canonicalization of bnodes\n return Util.heavyCompareSPO(x, y, kb, uriMap);\n };\n sts.sort(SPO);\n if (this.base && !this.defaultNamespace) {\n this.defaultNamespace = this.base + '#';\n }\n var predMap = {};\n if (this.flags.indexOf('s') < 0) {\n predMap['http://www.w3.org/2002/07/owl#sameAs'] = '=';\n }\n if (this.flags.indexOf('t') < 0) {\n predMap['http://www.w3.org/1999/02/22-rdf-syntax-ns#type'] = 'a';\n }\n if (this.flags.indexOf('i') < 0) {\n predMap['http://www.w3.org/2000/10/swap/log#implies'] = '=>';\n }\n // //////////////////////// Arrange the bits of text\n\n var spaces = function (n) {\n var s = '';\n for (var i = 0; i < n; i++) s += ' ';\n return s;\n };\n var treeToLine = function (tree) {\n var str = '';\n for (var i = 0; i < tree.length; i++) {\n var branch = tree[i];\n var s2 = typeof branch === 'string' ? branch : treeToLine(branch);\n // Note the space before the dot in case statement ends with 123 or colon. which is in fact allowed but be conservative.\n if (i !== 0) {\n var ch = str.slice(-1) || ' ';\n if (s2 === ',' || s2 === ';') {\n // no gap\n } else if (s2 === '.' && !'0123456789.:'.includes(ch)) {// no gap except after number and colon\n // no gap\n } else {\n str += ' '; // separate from previous token\n }\n }\n str += s2;\n }\n return str;\n };\n\n // Convert a nested tree of lists and strings to a string\n var treeToString = function (tree, level) {\n var str = '';\n var lastLength = 100000;\n if (level === undefined) level = -1;\n for (var i = 0; i < tree.length; i++) {\n var branch = tree[i];\n if (typeof branch !== 'string') {\n var substr = treeToString(branch, level + 1);\n if (substr.length < 10 * (width - indent * level) && substr.indexOf('\"\"\"') < 0) {\n // Don't mess up multiline strings\n var line = treeToLine(branch);\n if (line.length < width - indent * level) {\n branch = line; // Note! treat as string below\n substr = '';\n }\n }\n if (substr) lastLength = 10000;\n str += substr;\n }\n if (typeof branch === 'string') {\n if (branch.length === 1 && str.slice(-1) === '\\n') {\n if (',.;'.indexOf(branch) >= 0) {\n str = str.slice(0, -1);\n // be conservative and ensure a whitespace between some chars and a final dot, as in treeToLine above\n if (branch == '.' && '0123456789.:'.includes(str.charAt(str.length - 1))) {\n str += ' ';\n lastLength += 1;\n }\n str += branch + '\\n'; // slip punct'n on end\n lastLength += 1;\n continue;\n }\n }\n if (lastLength < indent * level + 4 ||\n // if new line not necessary\n lastLength + branch.length + 1 < width && ';.'.indexOf(str[str.length - 2]) < 0) {\n // or the string fits on last line\n str = str.slice(0, -1) + ' ' + branch + '\\n'; // then continue on this line\n lastLength += branch.length + 1;\n } else {\n let line = spaces(indent * level) + branch;\n str += line + '\\n';\n lastLength = line.length;\n if (level < 0) {\n str += '\\n'; // extra blank line\n lastLength = 100000; // don't touch\n }\n }\n }\n }\n return str;\n };\n\n // //////////////////////////////////////////// Structure for N3\n // Convert a set of statements into a nested tree of lists and strings\n function statementListToTreeMethod(statements) {\n var stats = this.rootSubjects(statements);\n var roots = stats.roots;\n var results = [];\n for (var i = 0; i < roots.length; i++) {\n var root = roots[i];\n results.push(subjectTree(root, stats));\n }\n return results;\n }\n var statementListToTree = statementListToTreeMethod.bind(this);\n\n // The tree for a subject\n function subjectTree(subject, stats) {\n if (subject.termType === 'BlankNode' && !stats.incoming[subject]) {\n return objectTree(subject, stats, true).concat(['.']); // Anonymous bnode subject\n }\n return [termToN3(subject, stats)].concat([propertyTree(subject, stats)]).concat(['.']);\n }\n // The property tree for a single subject or anonymous node\n function propertyTreeMethod(subject, stats) {\n var results = [];\n var lastPred = null;\n var sts = stats.subjects[this.toStr(subject)] || []; // relevant statements\n if (typeof sts === 'undefined') {\n throw new Error('Cant find statements for ' + subject);\n }\n var objects = [];\n for (var i = 0; i < sts.length; i++) {\n var st = sts[i];\n if (st.predicate.uri === lastPred) {\n objects.push(',');\n } else {\n if (lastPred) {\n results = results.concat([objects]).concat([';']);\n objects = [];\n }\n results.push(predMap[st.predicate.uri] ? predMap[st.predicate.uri] : termToN3(st.predicate, stats));\n }\n lastPred = st.predicate.uri;\n objects.push(objectTree(st.object, stats));\n }\n results = results.concat([objects]);\n return results;\n }\n var propertyTree = propertyTreeMethod.bind(this);\n function objectTreeMethod(obj, stats, force) {\n if (obj.termType === 'BlankNode' && (force || stats.rootsHash[obj.toNT()] === undefined)) {\n // if not a root\n if (stats.subjects[this.toStr(obj)]) {\n return ['[', propertyTree(obj, stats), ']'];\n } else {\n return '[]';\n }\n }\n return termToN3(obj, stats);\n }\n var objectTree = objectTreeMethod.bind(this);\n function termToN3Method(expr, stats) {\n //\n var i, res;\n switch (expr.termType) {\n case 'Graph':\n res = ['{'];\n res = res.concat(statementListToTree(expr.statements));\n return res.concat(['}']);\n case 'Collection':\n res = ['('];\n for (i = 0; i < expr.elements.length; i++) {\n res.push([objectTree(expr.elements[i], stats)]);\n }\n res.push(')');\n return res;\n default:\n return this.atomicTermToN3(expr);\n }\n }\n Serializer.prototype.termToN3 = termToN3;\n var termToN3 = termToN3Method.bind(this);\n function prefixDirectivesMethod() {\n var str = '';\n if (this.flags.indexOf('d') < 0 && this.defaultNamespace) {\n str += '@prefix : ' + this.explicitURI(this.defaultNamespace) + '.\\n';\n }\n for (var ns in this.prefixes) {\n if (!this.prefixes.hasOwnProperty(ns)) continue;\n if (!this.namespacesUsed[ns]) continue;\n str += '@prefix ' + this.prefixes[ns] + ': ' + this.explicitURI(ns) + '.\\n';\n }\n return str + '\\n';\n }\n var prefixDirectives = prefixDirectivesMethod.bind(this);\n // Body of statementsToN3:\n var tree = statementListToTree(sts);\n return prefixDirectives() + treeToString(tree);\n }\n // //////////////////////////////////////////// Atomic Terms\n\n // Deal with term level things and nesting with no bnode structure\n atomicTermToN3(expr, stats) {\n switch (expr.termType) {\n case 'BlankNode':\n case 'Variable':\n return expr.toNT();\n case 'Literal':\n var val = expr.value;\n if (typeof val !== 'string') {\n throw new TypeError('Value of RDF literal node must be a string');\n }\n // var val = expr.value.toString() // should be a string already\n if (expr.datatype && this.flags.indexOf('x') < 0) {\n // Supress native numbers\n switch (expr.datatype.uri) {\n case 'http://www.w3.org/2001/XMLSchema#integer':\n return val;\n case 'http://www.w3.org/2001/XMLSchema#decimal':\n // In Turtle, must have dot\n if (val.indexOf('.') < 0) val += '.0';\n return val;\n case 'http://www.w3.org/2001/XMLSchema#double':\n {\n // Must force use of 'e'\n const eNotation = val.toLowerCase().indexOf('e') > 0;\n if (val.indexOf('.') < 0 && !eNotation) val += '.0';\n if (!eNotation) val += 'e0';\n return val;\n }\n case 'http://www.w3.org/2001/XMLSchema#boolean':\n return expr.value === '1' ? 'true' : 'false';\n }\n }\n var str = this.stringToN3(expr.value, this.flags);\n if (expr.language) {\n str += '@' + expr.language;\n } else if (!expr.datatype.equals(this.xsd.string)) {\n str += '^^' + this.atomicTermToN3(expr.datatype, stats);\n }\n return str;\n case 'NamedNode':\n return this.symbolToN3(expr);\n case 'DefaultGraph':\n return '';\n default:\n throw new Error('Internal: atomicTermToN3 cannot handle ' + expr + ' of termType: ' + expr.termType);\n }\n }\n stringToN3(str, flags) {\n if (!flags) flags = 'e';\n var res = '';\n var i, j, k;\n var delim;\n var forbidden;\n if (str.length > 20 &&\n // Long enough to make sense\n str.slice(-1) !== '\"' &&\n // corner case'\n flags.indexOf('n') < 0 && (\n // Force single line\n str.indexOf('\\n') > 0 || str.indexOf('\"') > 0)) {\n delim = '\"\"\"';\n forbidden = this.forbidden3;\n } else {\n delim = '\"';\n forbidden = this.forbidden1;\n }\n for (i = 0; i < str.length;) {\n forbidden.lastIndex = 0;\n var m = forbidden.exec(str.slice(i));\n if (m == null) break;\n j = i + forbidden.lastIndex - 1;\n res += str.slice(i, j);\n var ch = str[j];\n if (ch === '\"' && delim === '\"\"\"' && str.slice(j, j + 3) !== '\"\"\"') {\n res += ch;\n } else {\n k = '\\b\\f\\r\\t\\v\\n\\\\\"'.indexOf(ch); // No escaping of bell (7)?\n if (k >= 0) {\n res += '\\\\' + 'bfrtvn\\\\\"'[k];\n } else {\n if (flags.indexOf('e') >= 0) {\n // Unicode escaping in strings not unix style\n res += '\\\\u' + ('000' + ch.charCodeAt(0).toString(16).toLowerCase()).slice(-4);\n } else {\n // no 'e' flag\n res += ch;\n }\n }\n }\n i = j + 1;\n }\n return delim + res + str.slice(i) + delim;\n }\n // A single symbol, either in <> or namespace notation\n\n symbolToN3(x) {\n // c.f. symbolString() in notation3.py\n var uri = x.uri;\n var j = uri.indexOf('#');\n if (j < 0 && this.flags.indexOf('/') < 0) {\n j = uri.lastIndexOf('/');\n }\n if (j >= 0 && this.flags.indexOf('p') < 0 && (\n // Can split at namespace but only if http[s]: URI or file: or ws[s] (why not others?)\n uri.indexOf('http') === 0 || uri.indexOf('ws') === 0 || uri.indexOf('file') === 0)) {\n var localid = uri.slice(j + 1);\n var namesp = uri.slice(0, j + 1);\n // Don't split if namespace is just the protocol (e.g., https://)\n // A valid namespace should have content after the protocol\n var minNamespaceLength = uri.indexOf('://') + 4; // e.g., \"http://x\" minimum\n // Also don't split if namespace is the base directory (would serialize as relative URI)\n var baseDir = this.base ? this.base.slice(0, Math.max(this.base.lastIndexOf('/'), this.base.lastIndexOf('#')) + 1) : null;\n var namespaceIsBaseDir = baseDir && namesp === baseDir;\n // If flag 'o' is present, forbid dots in local part when abbreviating\n var forbidDotLocal = this.flags.indexOf('o') >= 0 && localid.indexOf('.') >= 0;\n var canSplit = !namespaceIsBaseDir && !forbidDotLocal && namesp.length > minNamespaceLength && this.isValidPNLocal(localid);\n /*\n if (uri.slice(0, j + 1) === this.base + '#') { // base-relative\n if (canSplit) {\n return ':' + uri.slice(j + 1) // assume deafult ns is local\n } else {\n return '<#' + uri.slice(j + 1) + '>'\n }\n }\n */\n if (canSplit) {\n if (this.defaultNamespace && this.defaultNamespace === namesp && this.flags.indexOf('d') < 0) {\n // d -> suppress default\n if (this.flags.indexOf('k') >= 0 && this.keyords.indexOf(localid) < 0) {\n return localid;\n }\n return ':' + localid;\n }\n // this.checkIntegrity() // @@@ Remove when not testing\n var prefix = this.prefixes[namesp];\n if (!prefix) prefix = this.makeUpPrefix(namesp);\n if (prefix) {\n this.namespacesUsed[namesp] = true;\n return prefix + ':' + localid;\n }\n // Fall though if can't do qname\n }\n }\n return this.explicitURI(uri);\n }\n\n // /////////////////////////// Quad store serialization\n\n // @para. write - a function taking a single string to be output\n //\n writeStore(write) {\n var kb = this.store;\n var fetcher = kb.fetcher;\n var session = fetcher && fetcher.appNode;\n\n // The core data\n\n var sources = this.store.index[3];\n for (var s in sources) {\n // -> assume we can use -> as short for log:semantics\n var source = kb.fromNT(s);\n if (session && source.equals(session)) continue;\n write('\\n' + this.atomicTermToN3(source) + ' ' + this.atomicTermToN3(kb.sym('http://www.w3.org/2000/10/swap/log#semantics')) + ' { ' + this.statementsToN3(kb.statementsMatching(undefined, undefined, undefined, source)) + ' }.\\n');\n }\n\n // The metadata from HTTP interactions:\n\n kb.statementsMatching(undefined, kb.sym('http://www.w3.org/2007/ont/link#requestedURI')).map(function (st) {\n write('\\n<' + st.object.value + '> log:metadata {\\n');\n var sts = kb.statementsMatching(undefined, undefined, undefined, st.subject);\n write(this.statementsToN3(this.statementsToN3(sts)));\n write('}.\\n');\n });\n\n // Inferences we have made ourselves not attributable to anyone else\n\n var metaSources = [];\n if (session) metaSources.push(session);\n var metadata = [];\n metaSources.map(function (source) {\n metadata = metadata.concat(kb.statementsMatching(undefined, undefined, undefined, source));\n });\n write(this.statementsToN3(metadata));\n }\n\n // ////////////////////////////////////////////// XML serialization\n\n statementsToXML(sts) {\n var indent = 4;\n var width = 80;\n var namespaceCounts = []; // which have been used\n namespaceCounts['http://www.w3.org/1999/02/22-rdf-syntax-ns#'] = true;\n var liPrefix = 'http://www.w3.org/1999/02/22-rdf-syntax-ns#_'; // prefix for ordered list items\n\n // //////////////////////// Arrange the bits of XML text\n\n var spaces = function (n) {\n var s = '';\n for (var i = 0; i < n; i++) s += ' ';\n return s;\n };\n var XMLtreeToLine = function (tree) {\n var str = '';\n for (var i = 0; i < tree.length; i++) {\n var branch = tree[i];\n var s2 = typeof branch === 'string' ? branch : XMLtreeToLine(branch);\n str += s2;\n }\n return str;\n };\n\n // Convert a nested tree of lists and strings to a string\n var XMLtreeToString = function (tree, level) {\n var str = '';\n var line;\n var lastLength = 100000;\n if (!level) level = 0;\n for (var i = 0; i < tree.length; i++) {\n var branch = tree[i];\n if (typeof branch !== 'string') {\n var substr = XMLtreeToString(branch, level + 1);\n if (substr.length < 10 * (width - indent * level) && substr.indexOf('\"\"\"') < 0) {\n // Don't mess up multiline strings\n line = XMLtreeToLine(branch);\n if (line.length < width - indent * level) {\n branch = ' ' + line; // @@ Hack: treat as string below\n substr = '';\n }\n }\n if (substr) lastLength = 10000;\n str += substr;\n }\n if (typeof branch === 'string') {\n if (lastLength < indent * level + 4) {\n // continue\n str = str.slice(0, -1) + ' ' + branch + '\\n';\n lastLength += branch.length + 1;\n } else {\n line = spaces(indent * level) + branch;\n str += line + '\\n';\n lastLength = line.length;\n }\n } else {// not string\n }\n }\n return str;\n };\n function statementListToXMLTreeMethod(statements) {\n this.suggestPrefix('rdf', 'http://www.w3.org/1999/02/22-rdf-syntax-ns#');\n var stats = this.rootSubjects(statements);\n var roots = stats.roots;\n var results = [];\n for (var i = 0; i < roots.length; i++) {\n var root = roots[i];\n results.push(subjectXMLTree(root, stats));\n }\n return results;\n }\n var statementListToXMLTree = statementListToXMLTreeMethod.bind(this);\n function escapeForXML(str) {\n if (typeof str === 'undefined') return '@@@undefined@@@@';\n return str.replace(/[&<\"]/g, function (m) {\n switch (m[0]) {\n case '&':\n return '&amp;';\n case '<':\n return '&lt;';\n case '\"':\n return '&quot;';\n // '\n }\n });\n }\n function relURIMethod(term) {\n return escapeForXML(this.base ? Util.uri.refTo(this.base, term.uri) : term.uri);\n }\n var relURI = relURIMethod.bind(this);\n\n // The tree for a subject\n function subjectXMLTreeMethod(subject, stats) {\n var results = [];\n var type, t, st, pred;\n var sts = stats.subjects[this.toStr(subject)]; // relevant statements\n if (typeof sts === 'undefined') {\n // empty bnode\n return propertyXMLTree(subject, stats);\n }\n\n // Sort only on the predicate, leave the order at object\n // level undisturbed. This leaves multilingual content in\n // the order of entry (for partner literals), which helps\n // readability.\n //\n // For the predicate sort, we attempt to split the uri\n // as a hint to the sequence\n sts.sort(function (a, b) {\n var ap = a.predicate.uri;\n var bp = b.predicate.uri;\n if (ap.substring(0, liPrefix.length) === liPrefix || bp.substring(0, liPrefix.length) === liPrefix) {\n // we're only interested in sorting list items\n return ap.localeCompare(bp);\n }\n var as = ap.substring(liPrefix.length);\n var bs = bp.substring(liPrefix.length);\n var an = parseInt(as, 10);\n var bn = parseInt(bs, 10);\n if (isNaN(an) || isNaN(bn) || an !== as || bn !== bs) {\n // we only care about integers\n return ap.localeCompare(bp);\n }\n return an - bn;\n });\n for (var i = 0; i < sts.length; i++) {\n st = sts[i];\n // look for a type\n if (st.predicate.uri === 'http://www.w3.org/1999/02/22-rdf-syntax-ns#type' && !type && st.object.termType === 'NamedNode') {\n type = st.object;\n continue; // don't include it as a child element\n }\n\n // see whether predicate can be replaced with \"li\"\n pred = st.predicate;\n if (pred.uri.substr(0, liPrefix.length) === liPrefix) {\n var number = pred.uri.substr(liPrefix.length);\n // make sure these are actually numeric list items\n var intNumber = parseInt(number, 10);\n if (number === intNumber.toString()) {\n // was numeric; don't need to worry about ordering since we've already\n // sorted the statements\n pred = this.rdfFactory.namedNode('http://www.w3.org/1999/02/22-rdf-syntax-ns#li');\n }\n }\n t = qname(pred);\n switch (st.object.termType) {\n case 'BlankNode':\n if (stats.incoming[st.object].length === 1) {\n // there should always be something in the incoming array for a bnode\n results = results.concat(['<' + t + ' rdf:parseType=\"Resource\">', subjectXMLTree(st.object, stats), '</' + t + '>']);\n } else {\n results = results.concat(['<' + t + ' rdf:nodeID=\"' + st.object.toNT().slice(2) + '\"/>']);\n }\n break;\n case 'NamedNode':\n results = results.concat(['<' + t + ' rdf:resource=\"' + relURI(st.object) + '\"/>']);\n break;\n case 'Literal':\n results = results.concat(['<' + t + (st.object.language ? ' xml:lang=\"' + st.object.language + '\"' : st.object.datatype.equals(this.xsd.string) ? '' : ' rdf:datatype=\"' + escapeForXML(st.object.datatype.uri) + '\"') + '>' + escapeForXML(st.object.value) + '</' + t + '>']);\n break;\n case 'Collection':\n results = results.concat(['<' + t + ' rdf:parseType=\"Collection\">', collectionXMLTree(st.object, stats), '</' + t + '>']);\n break;\n default:\n throw new Error(\"Can't serialize object of type \" + st.object.termType + ' into XML');\n } // switch\n }\n var tag = type ? qname(type) : 'rdf:Description';\n var attrs = '';\n if (subject.termType === 'BlankNode') {\n if (!stats.incoming[subject] || stats.incoming[subject].length !== 1) {\n // not an anonymous bnode\n attrs = ' rdf:nodeID=\"' + subject.toNT().slice(2) + '\"';\n }\n } else {\n attrs = ' rdf:about=\"' + relURI(subject) + '\"';\n }\n return ['<' + tag + attrs + '>'].concat([results]).concat(['</' + tag + '>']);\n }\n var subjectXMLTree = subjectXMLTreeMethod.bind(this);\n function collectionXMLTree(subject, stats) {\n var res = [];\n for (var i = 0; i < subject.elements.length; i++) {\n res.push(subjectXMLTree(subject.elements[i], stats));\n }\n return res;\n }\n\n // The property tree for a single subject or anonymos node\n function propertyXMLTreeMethod(subject, stats) {\n var results = [];\n var sts = stats.subjects[this.toStr(subject)]; // relevant statements\n if (!sts) return results; // No relevant statements\n sts.sort();\n for (var i = 0; i < sts.length; i++) {\n var st = sts[i];\n switch (st.object.termType) {\n case 'BlankNode':\n if (stats.rootsHash[st.object.toNT()]) {\n // This bnode has been done as a root -- no content here @@ what bout first time\n results = results.concat(['<' + qname(st.predicate) + ' rdf:nodeID=\"' + st.object.toNT().slice(2) + '\">', '</' + qname(st.predicate) + '>']);\n } else {\n results = results.concat(['<' + qname(st.predicate) + ' rdf:parseType=\"Resource\">', propertyXMLTree(st.object, stats), '</' + qname(st.predicate) + '>']);\n }\n break;\n case 'NamedNode':\n results = results.concat(['<' + qname(st.predicate) + ' rdf:resource=\"' + relURI(st.object) + '\"/>']);\n break;\n case 'Literal':\n results = results.concat(['<' + qname(st.predicate) + (st.object.language ? ' xml:lang=\"' + st.object.language + '\"' : st.object.datatype.equals(this.xsd.string) ? '' : ' rdf:datatype=\"' + escapeForXML(st.object.datatype.value) + '\"') + '>' + escapeForXML(st.object.value) + '</' + qname(st.predicate) + '>']);\n break;\n case 'Collection':\n results = results.concat(['<' + qname(st.predicate) + ' rdf:parseType=\"Collection\">', collectionXMLTree(st.object, stats), '</' + qname(st.predicate) + '>']);\n break;\n default:\n throw new Error(\"Can't serialize object of type \" + st.object.termType + ' into XML');\n } // switch\n }\n return results;\n }\n var propertyXMLTree = propertyXMLTreeMethod.bind(this);\n function qnameMethod(term) {\n var uri = term.uri;\n var j = uri.indexOf('#');\n if (j < 0 && this.flags.indexOf('/') < 0) {\n j = uri.lastIndexOf('/');\n }\n if (j < 0) throw new Error('Cannot make qname out of <' + uri + '>');\n for (var k = j + 1; k < uri.length; k++) {\n if (this._notNameChars.indexOf(uri[k]) >= 0) {\n throw new Error('Invalid character \"' + uri[k] + '\" cannot be in XML qname for URI: ' + uri);\n }\n }\n var localid = uri.slice(j + 1);\n var namesp = uri.slice(0, j + 1);\n if (this.defaultNamespace && this.defaultNamespace === namesp && this.flags.indexOf('d') < 0) {\n // d -> suppress default\n return localid;\n }\n var prefix = this.prefixes[namesp];\n if (!prefix) prefix = this.makeUpPrefix(namesp);\n namespaceCounts[namesp] = true;\n return prefix + ':' + localid;\n }\n var qname = qnameMethod.bind(this);\n\n // Body of toXML:\n\n var tree = statementListToXMLTree(sts);\n var str = '<rdf:RDF';\n if (this.defaultNamespace) {\n str += ' xmlns=\"' + escapeForXML(this.defaultNamespace) + '\"';\n }\n for (var ns in namespaceCounts) {\n if (!namespaceCounts.hasOwnProperty(ns)) continue;\n // Rel uris in xml ns is not strictly allowed in the XMLNS spec but needed in practice often\n var ns2 = this.base && this.flags.includes('z') ? Util.uri.refTo(this.base, ns) : ns;\n str += '\\n xmlns:' + this.prefixes[ns] + '=\"' + escapeForXML(ns2) + '\"';\n }\n str += '>';\n var tree2 = [str, tree, '</rdf:RDF>']; // @@ namespace declrations\n return XMLtreeToString(tree2, -1);\n } // End @@ body\n\n statementsToJsonld(sts) {\n // ttl2jsonld creates context keys for all ttl prefix\n // context keys must be absolute IRI ttl2jsonld@0.0.8\n /* function findId (itemObj) {\n if (itemObj['@id']) {\n const item = itemObj['@id'].split(':')\n if (keys[item[0]]) itemObj['@id'] = jsonldObj['@context'][item[0]] + item[1]\n }\n const itemValues = Object.values(itemObj)\n for (const i in itemValues) {\n if (typeof itemValues[i] !== 'string') { // @list contains array\n findId(itemValues[i])\n }\n }\n } */\n const turtleDoc = this.statementsToN3(sts);\n const jsonldObj = ttl2jsonld.parse(turtleDoc);\n return JSON.stringify(jsonldObj, null, 2);\n }\n}\n\n// String escaping utilities\n\nfunction hexify(str) {\n // also used in parser\n return encodeURI(str);\n}\nfunction backslashUify(str) {\n var res = '';\n var k;\n for (var i = 0; i < str.length; i++) {\n k = str.charCodeAt(i);\n if (k > 65535) {\n res += '\\\\U' + ('00000000' + k.toString(16)).slice(-8); // convert to upper?\n } else if (k > 126) {\n res += '\\\\u' + ('0000' + k.toString(16)).slice(-4);\n } else {\n res += str[i];\n }\n }\n return res;\n}","import Serializer from './serializer';\nimport { JSONLDContentType, N3ContentType, N3LegacyContentType, NQuadsAltContentType, NQuadsContentType, NTriplesContentType, RDFXMLContentType, TurtleContentType, TurtleLegacyContentType } from './types';\n/**\n * Serialize to the appropriate format\n */\nexport default function serialize(/** The graph or nodes that should be serialized */\ntarget, /** The store */\nkb, base,\n/**\n * The mime type.\n * Defaults to Turtle.\n */\ncontentType, callback, options) {\n base = base || target?.value;\n const opts = options || {};\n contentType = contentType || TurtleContentType; // text/n3 if complex?\n var documentString = undefined;\n try {\n var sz = Serializer(kb);\n if (opts.flags) sz.setFlags(opts.flags);\n var newSts = kb.statementsMatching(undefined, undefined, undefined, target);\n\n // If an IndexedFormula, use the namespaces from the given graph as suggestions\n if ('namespaces' in kb) {\n sz.suggestNamespaces(kb.namespaces);\n }\n\n // use the provided options.namespaces are mandatory prefixes\n if (opts.namespaces) {\n sz.setNamespaces(opts.namespaces);\n }\n sz.setBase(base);\n switch (contentType) {\n case RDFXMLContentType:\n documentString = sz.statementsToXML(newSts);\n return executeCallback(null, documentString);\n case N3ContentType:\n case N3LegacyContentType:\n documentString = sz.statementsToN3(newSts);\n return executeCallback(null, documentString);\n case TurtleContentType:\n case TurtleLegacyContentType:\n // Suppress = for sameAs and => for implies; preserve any user-specified flags (e.g., 'o')\n sz.setFlags('si' + (opts.flags ? ' ' + opts.flags : ''));\n documentString = sz.statementsToN3(newSts);\n return executeCallback(null, documentString);\n case NTriplesContentType:\n sz.setFlags('deinprstux'); // Suppress nice parts of N3 to make ntriples\n documentString = sz.statementsToNTriples(newSts);\n return executeCallback(null, documentString);\n case JSONLDContentType:\n // turtle + dr (means no default, no relative prefix); preserve user flags\n sz.setFlags('si dr' + (opts.flags ? ' ' + opts.flags : ''));\n documentString = sz.statementsToJsonld(newSts); // convert via turtle\n return executeCallback(null, documentString);\n case NQuadsContentType:\n case NQuadsAltContentType:\n // @@@ just outpout the quads? Does not work for collections\n sz.setFlags('deinprstux q'); // Suppress nice parts of N3 to make ntriples\n documentString = sz.statementsToNTriples(newSts); // q in flag means actually quads\n return executeCallback(null, documentString);\n default:\n throw new Error('Serialize: Content-type ' + contentType + ' not supported for data write.');\n }\n } catch (err) {\n if (callback) {\n // @ts-ignore\n return callback(err, undefined);\n }\n throw err; // Don't hide problems from caller in sync mode\n }\n function executeCallback(err, result) {\n if (callback) {\n callback(err, result);\n return;\n } else {\n return result;\n }\n }\n}","import log from './log';\nimport { docpart } from './uri';\nimport { string_startswith } from './utils-js';\n/** RDF/JS spec Typeguards */\n\n/**\n * Loads ontologies of the data we load (this is the callback from the kb to\n * the fetcher).\n */\nexport function AJAR_handleNewTerm(kb, p, requestedBy) {\n var sf = null;\n if (typeof kb.fetcher !== 'undefined') {\n sf = kb.fetcher;\n } else {\n return;\n }\n if (p.termType !== 'NamedNode') return;\n var docuri = docpart(p.uri);\n var fixuri;\n if (p.uri.indexOf('#') < 0) {\n // No hash\n // @@ major hack for dbpedia Categories, which spread indefinitely\n if (string_startswith(p.uri, 'http://dbpedia.org/resource/Category:')) return;\n\n /*\n if (string_startswith(p.uri, 'http://xmlns.com/foaf/0.1/')) {\n fixuri = \"http://dig.csail.mit.edu/2005/ajar/ajaw/test/foaf\"\n // should give HTTP 303 to ontology -- now is :-)\n } else\n */\n if (string_startswith(p.uri, 'http://purl.org/dc/elements/1.1/') || string_startswith(p.uri, 'http://purl.org/dc/terms/')) {\n fixuri = 'http://dublincore.org/2005/06/13/dcq';\n // dc fetched multiple times\n } else if (string_startswith(p.uri, 'http://xmlns.com/wot/0.1/')) {\n fixuri = 'http://xmlns.com/wot/0.1/index.rdf';\n } else if (string_startswith(p.uri, 'http://web.resource.org/cc/')) {\n // log.warn(\"creative commons links to html instead of rdf. doesn't seem to content-negotiate.\")\n fixuri = 'http://web.resource.org/cc/schema.rdf';\n }\n }\n if (fixuri) {\n docuri = fixuri;\n }\n if (sf && sf.getState(docuri) !== 'unrequested') return;\n if (fixuri) {\n // only give warning once: else happens too often\n log.warn('Assuming server still broken, faking redirect of <' + p.uri + '> to <' + docuri + '>');\n }\n return sf.fetch(docuri, {\n referringTerm: requestedBy\n });\n}\nexport const appliedFactoryMethods = ['blankNode', 'defaultGraph', 'literal', 'namedNode', 'quad', 'variable', 'supports'];\nconst rdf = {\n first: 'http://www.w3.org/1999/02/22-rdf-syntax-ns#first',\n rest: 'http://www.w3.org/1999/02/22-rdf-syntax-ns#rest',\n nil: 'http://www.w3.org/1999/02/22-rdf-syntax-ns#nil'\n};\n\n/**\n * Expands an array of Terms to a set of statements representing the rdf:list.\n * @param rdfFactory - The factory to use\n * @param subject - The iri of the first list item.\n * @param data - The terms to expand into the list.\n * @return The {data} as a set of statements.\n */\nexport function arrayToStatements(rdfFactory, subject, data) {\n const statements = [];\n data.reduce((id, _listObj, i, listData) => {\n statements.push(rdfFactory.quad(id, rdfFactory.namedNode(rdf.first), listData[i]));\n let nextNode;\n if (i < listData.length - 1) {\n nextNode = rdfFactory.blankNode();\n statements.push(rdfFactory.quad(id, rdfFactory.namedNode(rdf.rest), nextNode));\n } else {\n statements.push(rdfFactory.quad(id, rdfFactory.namedNode(rdf.rest), rdfFactory.namedNode(rdf.nil)));\n }\n return nextNode;\n }, subject);\n return statements;\n}\nexport function ArrayIndexOf(arr, item, i = 0) {\n var length = arr.length;\n if (i < 0) i = length + i;\n for (; i < length; i++) {\n if (arr[i] === item) {\n return i;\n }\n }\n return -1;\n}","import _defineProperty from \"@babel/runtime/helpers/defineProperty\";\nimport ClassOrder from './class-order';\nimport Collection from './collection';\nimport CanonicalDataFactory from './factories/canonical-data-factory';\nimport log from './log';\nimport Namespace from './namespace';\nimport Node from './node-internal';\nimport serialize from './serialize';\nimport { GraphTermType } from './types';\nimport { isStatement } from './utils/terms';\nimport Variable from './variable';\nimport { appliedFactoryMethods, arrayToStatements } from './utils';\nimport NamedNode from './named-node';\n/**\n * A formula, or store of RDF statements\n */\nexport default class Formula extends Node {\n /**\n * Initializes this formula\n * @constructor\n * @param statements - Initial array of statements\n * @param constraints - initial array of constraints\n * @param initBindings - initial bindings used in Query\n * @param optional - optional\n * @param opts\n * @param opts.rdfFactory - The rdf factory that should be used by the store\n */\n constructor(statements = [], constraints = [], initBindings = [], optional = [], opts = {}) {\n super('');\n this.statements = statements;\n this.constraints = constraints;\n this.initBindings = initBindings;\n this.optional = optional;\n _defineProperty(this, \"termType\", GraphTermType);\n _defineProperty(this, \"classOrder\", ClassOrder.Graph);\n /**\n * The accompanying fetcher instance.\n *\n * Is set by the fetcher when initialized.\n */\n _defineProperty(this, \"fetcher\", void 0);\n _defineProperty(this, \"isVar\", 0);\n /**\n * A namespace for the specified namespace's URI\n * @param nsuri The URI for the namespace\n */\n _defineProperty(this, \"ns\", Namespace);\n /** The factory used to generate statements and terms */\n _defineProperty(this, \"rdfFactory\", void 0);\n this.rdfFactory = opts && opts.rdfFactory || CanonicalDataFactory;\n // Enable default factory methods on this while preserving factory context.\n for (const factoryMethod of appliedFactoryMethods) {\n this[factoryMethod] = (...args) => this.rdfFactory[factoryMethod](...args);\n }\n }\n\n /** Add a statement from its parts\n * @param subject - the first part of the statement\n * @param predicate - the second part of the statement\n * @param object - the third part of the statement\n * @param graph - the last part of the statement\n */\n add(subject, predicate, object, graph) {\n if (arguments.length === 1) {\n subject.forEach(st => this.add(st.subject, st.predicate, st.object, st.graph));\n }\n return this.statements.push(this.rdfFactory.quad(subject, predicate, object, graph));\n }\n\n /** Add a statment object\n * @param {Statement} statement - An existing constructed statement to add\n */\n addStatement(statement) {\n return this.add(statement);\n }\n\n /**\n * Shortcut for adding blankNodes\n * @param [id]\n */\n bnode(id) {\n return this.rdfFactory.blankNode(id);\n }\n\n /**\n * Adds all the statements to this formula\n * @param statements - A collection of statements\n */\n addAll(statements) {\n statements.forEach(quad => {\n this.add(quad.subject, quad.predicate, quad.object, quad.graph);\n });\n }\n\n /** Follow link from one node, using one wildcard, looking for one\n *\n * For example, any(me, knows, null, profile) - a person I know accoring to my profile .\n * any(me, knows, null, null) - a person I know accoring to anything in store .\n * any(null, knows, me, null) - a person who know me accoring to anything in store .\n *\n * @param s - A node to search for as subject, or if null, a wildcard\n * @param p - A node to search for as predicate, or if null, a wildcard\n * @param o - A node to search for as object, or if null, a wildcard\n * @param g - A node to search for as graph, or if null, a wildcard\n * @returns A node which match the wildcard position, or null\n */\n any(s, p, o, g) {\n const st = this.anyStatementMatching(s, p, o, g);\n if (st == null) {\n return null;\n } else if (s == null) {\n return st.subject;\n } else if (p == null) {\n return st.predicate;\n } else if (o == null) {\n return st.object;\n }\n return null;\n }\n\n /**\n * Gets the value of a node that matches the specified pattern\n * @param s The subject\n * @param p The predicate\n * @param o The object\n * @param g The graph that contains the statement\n */\n anyValue(s, p, o, g) {\n const y = this.any(s, p, o, g);\n return y ? y.value : void 0;\n }\n\n /**\n * Gets the first JavaScript object equivalent to a node based on the specified pattern\n * @param s The subject\n * @param p The predicate\n * @param o The object\n * @param g The graph that contains the statement\n */\n anyJS(s, p, o, g) {\n const y = this.any(s, p, o, g);\n return y ? Node.toJS(y) : void 0;\n }\n\n /**\n * Gets the first statement that matches the specified pattern\n */\n anyStatementMatching(s, p, o, g) {\n let x = this.statementsMatching(s, p, o, g, true);\n if (!x || x.length === 0) {\n return undefined;\n }\n return x[0];\n }\n\n /**\n * Returns a unique index-safe identifier for the given term.\n *\n * Falls back to the rdflib hashString implementation if the given factory doesn't support id.\n */\n id(term) {\n return this.rdfFactory.id(term);\n }\n\n /**\n * Search the Store\n * This is really a teaching method as to do this properly you would use IndexedFormula\n *\n * @param s - A node to search for as subject, or if null, a wildcard\n * @param p - A node to search for as predicate, or if null, a wildcard\n * @param o - A node to search for as object, or if null, a wildcard\n * @param g - A node to search for as graph, or if null, a wildcard\n * @param justOne - flag - stop when found one rather than get all of them?\n * @returns {Array<Node>} - An array of nodes which match the wildcard position\n */\n statementsMatching(s, p, o, g, justOne) {\n const sts = this.statements.filter(st => (!s || s.equals(st.subject)) && (!p || p.equals(st.predicate)) && (!o || o.equals(st.object)) && (!g || g.equals(st.graph)));\n if (justOne) {\n return sts.length === 0 ? [] : [sts[0]];\n }\n return sts;\n }\n\n /**\n * Finds the types in the list which have no *stored* subtypes\n * These are a set of classes which provide by themselves complete\n * information -- the other classes are redundant for those who\n * know the class DAG.\n * @param types A map of the types\n */\n bottomTypeURIs(types) {\n let bots;\n let bottom;\n let elt;\n let i;\n let len;\n let ref;\n let subs;\n let v;\n bots = [];\n for (let k in types) {\n if (!types.hasOwnProperty(k)) continue;\n v = types[k];\n subs = this.each(void 0, this.rdfFactory.namedNode('http://www.w3.org/2000/01/rdf-schema#subClassOf'), this.rdfFactory.namedNode(k));\n bottom = true;\n i = 0;\n for (len = subs.length; i < len; i++) {\n elt = subs[i];\n ref = elt.uri;\n if (ref in types) {\n // the subclass is one we know\n bottom = false;\n break;\n }\n }\n if (bottom) {\n bots[k] = v;\n }\n }\n return bots;\n }\n\n /** Creates a new collection */\n collection() {\n return new Collection();\n }\n\n /** Follow links from one node, using one wildcard.\n *\n * For example, each(me, knows, null, profile) - people I know accoring to my profile .\n * each(me, knows, null, null) - people I know accoring to anything in store .\n * each(null, knows, me, null) - people who know me accoring to anything in store .\n *\n * @param s - A node to search for as subject, or if null, a wildcard\n * @param p - A node to search for as predicate, or if null, a wildcard\n * @param o - A node to search for as object, or if null, a wildcard\n * @param g - A node to search for as graph, or if null, a wildcard\n * @returns {Array<Node>} - An array of nodes which match the wildcard position\n */\n each(s, p, o, g) {\n const results = [];\n let sts = this.statementsMatching(s, p, o, g, false);\n if (s == null) {\n for (let i = 0, len = sts.length; i < len; i++) {\n results.push(sts[i].subject);\n }\n } else if (p == null) {\n for (let l = 0, len1 = sts.length; l < len1; l++) {\n results.push(sts[l].predicate);\n }\n } else if (o == null) {\n for (let m = 0, len2 = sts.length; m < len2; m++) {\n results.push(sts[m].object);\n }\n } else if (g == null) {\n for (let q = 0, len3 = sts.length; q < len3; q++) {\n results.push(new NamedNode(sts[q].graph.value));\n }\n }\n return results;\n }\n\n /**\n * Test whether this formula is equals to {other}\n * @param other - The other formula\n */\n equals(other) {\n if (!other) {\n return false;\n }\n return this.hashString() === other.hashString();\n }\n\n /**\n * For thisClass or any subclass, anything which has it is its type\n * or is the object of something which has the type as its range, or subject\n * of something which has the type as its domain\n * We don't bother doing subproperty (yet?)as it doesn't seeem to be used\n * much.\n * Get all the Classes of which we can RDFS-infer the subject is a member\n * @return a hash of URIs\n */\n findMembersNT(thisClass) {\n let len2;\n let len4;\n let m;\n let members;\n let pred;\n let ref;\n let ref1;\n let ref2;\n let ref3;\n let ref4;\n let ref5;\n let seeds;\n let st;\n let u;\n seeds = {};\n seeds[thisClass.toNT()] = true;\n members = {};\n ref = this.transitiveClosure(seeds, this.rdfFactory.namedNode('http://www.w3.org/2000/01/rdf-schema#subClassOf'), true);\n for (let t in ref) {\n if (!ref.hasOwnProperty(t)) continue;\n ref1 = this.statementsMatching(void 0, this.rdfFactory.namedNode('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), this.fromNT(t));\n for (let i = 0, len = ref1.length; i < len; i++) {\n st = ref1[i];\n members[st.subject.toNT()] = st;\n }\n ref2 = this.each(void 0, this.rdfFactory.namedNode('http://www.w3.org/2000/01/rdf-schema#domain'), this.fromNT(t));\n for (let l = 0, len1 = ref2.length; l < len1; l++) {\n pred = ref2[l];\n ref3 = this.statementsMatching(void 0, pred);\n for (m = 0, len2 = ref3.length; m < len2; m++) {\n st = ref3[m];\n members[st.subject.toNT()] = st;\n }\n }\n ref4 = this.each(void 0, this.rdfFactory.namedNode('http://www.w3.org/2000/01/rdf-schema#range'), this.fromNT(t));\n for (let q = 0, len3 = ref4.length; q < len3; q++) {\n pred = ref4[q];\n ref5 = this.statementsMatching(void 0, pred);\n for (u = 0, len4 = ref5.length; u < len4; u++) {\n st = ref5[u];\n members[st.object.toNT()] = st;\n }\n }\n }\n return members;\n }\n\n /**\n * For thisClass or any subclass, anything which has it is its type\n * or is the object of something which has the type as its range, or subject\n * of something which has the type as its domain\n * We don't bother doing subproperty (yet?)as it doesn't seeem to be used\n * much.\n * Get all the Classes of which we can RDFS-infer the subject is a member\n * @param subject - A named node\n */\n findMemberURIs(subject) {\n return this.NTtoURI(this.findMembersNT(subject));\n }\n\n /**\n * Get all the Classes of which we can RDFS-infer the subject is a superclass\n * Returns a hash table where key is NT of type and value is statement why we\n * think so.\n * Does NOT return terms, returns URI strings.\n * We use NT representations in this version because they handle blank nodes.\n */\n findSubClassesNT(subject) {\n let types = {};\n types[subject.toNT()] = true;\n return this.transitiveClosure(types, this.rdfFactory.namedNode('http://www.w3.org/2000/01/rdf-schema#subClassOf'), true);\n }\n\n /**\n * Get all the Classes of which we can RDFS-infer the subject is a subclass\n * @param {RDFlibNamedNode} subject - The thing whose classes are to be found\n * @returns a hash table where key is NT of type and value is statement why we\n * think so.\n * Does NOT return terms, returns URI strings.\n * We use NT representations in this version because they handle blank nodes.\n */\n findSuperClassesNT(subject) {\n let types = {};\n types[subject.toNT()] = true;\n return this.transitiveClosure(types, this.rdfFactory.namedNode('http://www.w3.org/2000/01/rdf-schema#subClassOf'), false);\n }\n\n /**\n * Get all the Classes of which we can RDFS-infer the subject is a member\n * todo: This will loop is there is a class subclass loop (Sublass loops are\n * not illegal)\n * @param {RDFlibNamedNode} subject - The thing whose classes are to be found\n * @returns a hash table where key is NT of type and value is statement why we think so.\n * Does NOT return terms, returns URI strings.\n * We use NT representations in this version because they handle blank nodes.\n */\n findTypesNT(subject) {\n let domain;\n let range;\n let rdftype;\n let ref;\n let ref1;\n let ref2;\n let ref3;\n let st;\n let types;\n rdftype = 'http://www.w3.org/1999/02/22-rdf-syntax-ns#type';\n types = [];\n ref = this.statementsMatching(subject, void 0, void 0);\n for (let i = 0, len = ref.length; i < len; i++) {\n st = ref[i];\n if (st.predicate.uri === rdftype) {\n types[st.object.toNT()] = st;\n } else {\n ref1 = this.each(st.predicate, this.rdfFactory.namedNode('http://www.w3.org/2000/01/rdf-schema#domain'));\n for (let l = 0, len1 = ref1.length; l < len1; l++) {\n range = ref1[l];\n types[range.toNT()] = st;\n }\n }\n }\n ref2 = this.statementsMatching(void 0, void 0, subject);\n for (let m = 0, len2 = ref2.length; m < len2; m++) {\n st = ref2[m];\n ref3 = this.each(st.predicate, this.rdfFactory.namedNode('http://www.w3.org/2000/01/rdf-schema#range'));\n for (let q = 0, len3 = ref3.length; q < len3; q++) {\n domain = ref3[q];\n types[domain.toNT()] = st;\n }\n }\n return this.transitiveClosure(types, this.rdfFactory.namedNode('http://www.w3.org/2000/01/rdf-schema#subClassOf'), false);\n }\n\n /**\n * Get all the Classes of which we can RDFS-infer the subject is a member\n * todo: This will loop is there is a class subclass loop (Sublass loops are\n * not illegal)\n * Returns a hash table where key is NT of type and value is statement why we\n * think so.\n * Does NOT return terms, returns URI strings.\n * We use NT representations in this version because they handle blank nodes.\n * @param subject - A subject node\n */\n findTypeURIs(subject) {\n return this.NTtoURI(this.findTypesNT(subject));\n }\n\n /** Trace statements which connect directly, or through bnodes\n *\n * @param subject - The node to start looking for statments\n * @param doc - The document to be searched, or null to search all documents\n * @returns an array of statements, duplicate statements are suppresssed.\n */\n connectedStatements(subject, doc, excludePredicateURIs) {\n excludePredicateURIs = excludePredicateURIs || [];\n let todo = [subject];\n let done = {};\n let doneArcs = {};\n let result = [];\n let self = this;\n let follow = function (x) {\n let queue = function (x) {\n if (x.termType === 'BlankNode' && !done[x.value]) {\n done[x.value] = true;\n todo.push(x);\n }\n };\n let sts = self.statementsMatching(null, null, x, doc).concat(self.statementsMatching(x, null, null, doc));\n sts = sts.filter(function (st) {\n if (excludePredicateURIs[st.predicate.value]) return false;\n let hash = st.toNT();\n if (doneArcs[hash]) return false;\n doneArcs[hash] = true;\n return true;\n });\n sts.forEach(function (st) {\n queue(st.subject);\n queue(st.object);\n });\n result = result.concat(sts);\n };\n while (todo.length) {\n follow(todo.shift());\n }\n return result;\n }\n\n /**\n * Creates a new empty formula\n *\n * @param _features - Not applicable, but necessary for typing to pass\n */\n formula(_features) {\n return new Formula();\n }\n\n /**\n * Transforms an NTriples string format into a Node.\n * The blank node bit should not be used on program-external values; designed\n * for internal work such as storing a blank node id in an HTML attribute.\n * This will only parse the strings generated by the various toNT() methods.\n */\n fromNT(str) {\n let dt, k, lang;\n switch (str[0]) {\n case '<':\n return this.sym(str.slice(1, -1));\n case '\"':\n lang = void 0;\n dt = void 0;\n k = str.lastIndexOf('\"');\n if (k < str.length - 1) {\n if (str[k + 1] === '@') {\n lang = str.slice(k + 2);\n } else if (str.slice(k + 1, k + 3) === '^^') {\n dt = this.fromNT(str.slice(k + 3));\n } else {\n throw new Error(\"Can't convert string from NT: \" + str);\n }\n }\n str = str.slice(1, k);\n str = str.replace(/\\\\\"/g, '\"');\n str = str.replace(/\\\\n/g, '\\n');\n str = str.replace(/\\\\\\\\/g, '\\\\');\n return this.rdfFactory.literal(str, lang || dt);\n case '_':\n return this.rdfFactory.blankNode(str.slice(2));\n case '?':\n return new Variable(str.slice(1));\n }\n throw new Error(\"Can't convert from NT: \" + str);\n }\n\n /** Returns true if this formula holds the specified statement(s) */\n holds(s, p, o, g) {\n let i;\n if (arguments.length === 1) {\n if (!s) {\n return true;\n }\n if (s instanceof Array) {\n for (i = 0; i < s.length; i++) {\n if (!this.holds(s[i])) {\n return false;\n }\n }\n return true;\n } else if (isStatement(s)) {\n return this.holds(s.subject, s.predicate, s.object, s.graph);\n } else if (s.statements) {\n return this.holds(s.statements);\n }\n }\n let st = this.anyStatementMatching(s, p, o, g);\n return st != null;\n }\n\n /**\n * Returns true if this formula holds the specified {statement}\n */\n holdsStatement(statement) {\n return this.holds(statement.subject, statement.predicate, statement.object, statement.graph);\n }\n\n /**\n * Used by the n3parser to generate list elements\n * @param values - The values of the collection\n * @param context - The store\n * @return {BlankNode|Collection} - The term for the statement\n */\n list(values, context) {\n if (context.rdfFactory.supports[\"COLLECTIONS\"]) {\n const collection = context.rdfFactory.collection();\n values.forEach(function (val) {\n collection.append(val);\n });\n return collection;\n } else {\n const node = context.rdfFactory.blankNode();\n const statements = arrayToStatements(context.rdfFactory, node, values);\n context.addAll(statements);\n return node;\n }\n }\n\n /**\n * Transform a collection of NTriple URIs into their URI strings\n * @param t - Some iterable collection of NTriple URI strings\n * @return A collection of the URIs as strings\n * todo: explain why it is important to go through NT\n */\n NTtoURI(t) {\n let k, v;\n let uris = {};\n for (k in t) {\n if (!t.hasOwnProperty(k)) continue;\n v = t[k];\n if (k[0] === '<') {\n uris[k.slice(1, -1)] = v;\n }\n }\n return uris;\n }\n\n /**\n * Serializes this formula\n * @param base - The base string\n * @param contentType - The content type of the syntax to use\n * @param provenance - The provenance URI\n * @param options - options to pass to the serializer, as defined in serialize method\n */\n serialize(base, contentType, provenance, options) {\n // delegate the graph serialization to the implementation in ./serialize\n return serialize(provenance, this, base, contentType, undefined, options);\n }\n\n /**\n * Creates a new formula with the substituting bindings applied\n * @param bindings - The bindings to substitute\n */\n substitute(bindings) {\n let statementsCopy = this.statements.map(function (ea) {\n return ea.substitute(bindings);\n });\n // console.log('Formula subs statmnts:' + statementsCopy)\n const y = new Formula();\n y.addAll(statementsCopy);\n // console.log('indexed-form subs formula:' + y)\n return y;\n }\n sym(uri, name) {\n if (name) {\n throw new Error('This feature (kb.sym with 2 args) is removed. Do not assume prefix mappings.');\n }\n return this.rdfFactory.namedNode(uri);\n }\n\n /**\n * Gets the node matching the specified pattern. Throws when no match could be made.\n * @param s - The subject\n * @param p - The predicate\n * @param o - The object\n * @param g - The graph that contains the statement\n */\n the(s, p, o, g) {\n let x = this.any(s, p, o, g);\n if (x == null) {\n log.error('No value found for the() {' + s + ' ' + p + ' ' + o + '}.');\n }\n return x;\n }\n\n /**\n * RDFS Inference\n * These are hand-written implementations of a backward-chaining reasoner\n * over the RDFS axioms.\n * @param seeds - A hash of NTs of classes to start with\n * @param predicate - The property to trace though\n * @param inverse - Trace inverse direction\n */\n transitiveClosure(seeds, predicate, inverse) {\n let elt, i, len, s, sups, t;\n let agenda = {};\n Object.assign(agenda, seeds); // make a copy\n let done = {}; // classes we have looked up\n while (true) {\n t = function () {\n for (let p in agenda) {\n if (!agenda.hasOwnProperty(p)) continue;\n return p;\n }\n }();\n if (t == null) {\n return done;\n }\n sups = inverse ? this.each(void 0, predicate, this.fromNT(t)) : this.each(this.fromNT(t), predicate);\n for (i = 0, len = sups.length; i < len; i++) {\n elt = sups[i];\n s = elt.toNT();\n if (s in done) {\n continue;\n }\n if (s in agenda) {\n continue;\n }\n agenda[s] = agenda[t];\n }\n done[t] = agenda[t];\n delete agenda[t];\n }\n }\n\n /**\n * Finds the types in the list which have no *stored* supertypes\n * We exclude the universal class, owl:Things and rdf:Resource, as it is\n * information-free.\n * @param types - The types\n */\n topTypeURIs(types) {\n let i;\n let j;\n let k;\n let len;\n let n;\n let ref;\n let tops;\n let v;\n tops = [];\n for (k in types) {\n if (!types.hasOwnProperty(k)) continue;\n v = types[k];\n n = 0;\n ref = this.each(this.rdfFactory.namedNode(k), this.rdfFactory.namedNode('http://www.w3.org/2000/01/rdf-schema#subClassOf'));\n for (i = 0, len = ref.length; i < len; i++) {\n j = ref[i];\n if (j.uri !== 'http://www.w3.org/2000/01/rdf-schema#Resource') {\n n++;\n break;\n }\n }\n if (!n) {\n tops[k] = v;\n }\n }\n if (tops['http://www.w3.org/2000/01/rdf-schema#Resource']) {\n delete tops['http://www.w3.org/2000/01/rdf-schema#Resource'];\n }\n if (tops['http://www.w3.org/2002/07/owl#Thing']) {\n delete tops['http://www.w3.org/2002/07/owl#Thing'];\n }\n return tops;\n }\n\n /**\n * Serializes this formula to a string\n */\n toString() {\n return '{' + this.statements.join('\\n') + '}';\n }\n\n /**\n * Gets a new variable\n * @param name - The variable's name\n */\n variable(name) {\n return new Variable(name);\n }\n\n /**\n * Gets the number of statements in this formula that matches the specified pattern\n * @param s - The subject\n * @param p - The predicate\n * @param o - The object\n * @param g - The graph that contains the statement\n */\n whether(s, p, o, g) {\n return this.statementsMatching(s, p, o, g, false).length;\n }\n}","// This file attaches all functionality to Node\n// that would otherwise require circular dependencies.\nimport { fromValue } from './collection';\nimport Node from './node-internal';\nimport Namespace from './namespace';\nimport { isCollection, isLiteral } from './utils/terms';\n/**\n * Creates an RDF Node from a native javascript value.\n * RDF Nodes are returned unchanged, undefined returned as itself.\n * @method fromValue\n * @static\n * @param value {Node|Date|String|Number|Boolean|Undefined}\n * @return {Node|Collection}\n */\nNode.fromValue = fromValue;\nexport default Node;\nconst ns = {\n xsd: Namespace('http://www.w3.org/2001/XMLSchema#')\n};\n\n/**\n * Gets the javascript object equivalent to a node\n * @param term The RDF node\n */\nNode.toJS = function (term) {\n if (isCollection(term)) {\n return term.elements.map(Node.toJS); // Array node (not standard RDFJS)\n }\n if (!isLiteral(term)) return term;\n if (term.datatype.equals(ns.xsd('boolean'))) {\n return term.value === '1' || term.value === 'true';\n }\n if (term.datatype.equals(ns.xsd('dateTime')) || term.datatype.equals(ns.xsd('date'))) {\n return new Date(term.value);\n }\n if (term.datatype.equals(ns.xsd('integer')) || term.datatype.equals(ns.xsd('float')) || term.datatype.equals(ns.xsd('decimal'))) {\n return Number(term.value);\n }\n return term.value;\n};","// Matching a formula against another formula\n// Assync as well as Synchronously\n//\n// W3C open source licence 2005.\n//\n// This builds on term.js, match.js (and identity.js?)\n// to allow a query of a formula.\n//\n// Here we introduce for the first time a subclass of term: variable.\n//\n// SVN ID: $Id: query.js 25116 2008-11-15 16:13:48Z timbl $\n\n// Variable\n//\n// Compare with BlankNode. They are similar, but a variable\n// stands for something whose value is to be returned.\n// Also, users name variables and want the same name back when stuff is printed\n/* jsl:option explicit */ // Turn on JavaScriptLint variable declaration checking\n\nimport IndexedFormula from './store';\nimport { defaultGraphURI as defaultDocumentURI } from './utils/default-graph-uri';\nimport log from './log';\nimport { docpart } from './uri';\n\n/**\n * Query class, for tracking queries the user has in the UI.\n */\nexport class Query {\n constructor(name, id) {\n this.pat = new IndexedFormula(); // The pattern to search for\n this.vars = []; // Used by UI code but not in query.js\n // this.orderBy = [] // Not used yet\n this.name = name;\n this.id = id;\n }\n}\n\n/**\n * This function will match a pattern to the current Store\n *\n * The callback function is called whenever a match is found\n * When fetcher is supplied this will be called to load from the web\n * any new nodes as they are discovered. This will cause the query to traverse the\n * graph of linked data, sometimes called \"Link Following Query\"\n *\n * @param myQuery - a knowledgebase containing a pattern to use as query\n * @param callback - whenever the pattern in myQuery is met this is called with\n * the new bindings as parameter\n * @param fetcher? - If and only if, you want link following, give a fetcher\n * which has been created for the quadstore being queried.\n * @param onDone - callback when query finished\n */\nexport function indexedFormulaQuery(myQuery, callback, fetcher, onDone) {\n /** Debug strings\n */\n function bindingDebug(b) {\n var str = '';\n var v;\n for (v in b) {\n if (b.hasOwnProperty(v)) {\n str += ' ' + v + ' -> ' + b[v];\n }\n }\n return str;\n }\n function bindingsDebug(nbs) {\n var str = 'Bindings: ';\n var i;\n var n = nbs.length;\n for (i = 0; i < n; i++) {\n str += bindingDebug(nbs[i][0]) + ';\\n\\t';\n }\n return str;\n } // bindingsDebug\n\n /** Unification\n *\n * Unification finds all bindings such that when the binding is applied\n * to one term it is equal to the other.\n * @returns {Arrray}- a list of bindings, where a binding is an associative array\n * mapping variuable to value.\n */\n function unifyTerm(self, other, bindings, formula) {\n var actual = bindings[self];\n if (actual === undefined) {\n // Not mapped\n if (self.isVar) {\n var b = [];\n b[self] = other;\n return [[b, null]]; // Match\n }\n actual = self;\n }\n if (!actual.complexType) {\n if (formula.redirections[actual]) {\n actual = formula.redirections[actual];\n }\n if (formula.redirections[other]) {\n other = formula.redirections[other];\n }\n if (actual.equals(other) || actual.uri && actual.uri === defaultDocumentURI) {\n // Used to mean 'any graph' in a query\n return [[[], null]];\n }\n return [];\n }\n if (self instanceof Array) {\n if (!(other instanceof Array)) {\n return [];\n }\n return unifyContents(self, other, bindings);\n }\n throw new Error('query.js: oops - code not written yet');\n // return undefined; // for lint - no jslint objects to unreachables\n // return actual.unifyContents(other, bindings)\n } // unifyTerm\n\n function unifyContents(self, other, bindings, formula) {\n var nbs2;\n if (self.length !== other.length) {\n return []; // no way\n }\n if (!self.length) {\n return [[[], null]]; // Success\n }\n var nbs = unifyTerm(self[0], other[0], bindings, formula);\n if (nbs.length === 0) {\n return nbs;\n }\n var res = [];\n var i;\n var n = nbs.length;\n var nb;\n var j;\n var m;\n var v;\n var nb2;\n var bindings2;\n for (i = 0; i < n; i++) {\n // for each possibility from the first term\n nb = nbs[i][0]; // new bindings\n bindings2 = [];\n for (v in nb) {\n if (nb.hasOwnProperty(v)) {\n bindings2[v] = nb[v]; // copy\n }\n }\n for (v in bindings) {\n if (bindings.hasOwnProperty(v)) {\n bindings2[v] = bindings[v]; // copy\n }\n }\n nbs2 = unifyContents(self.slice(1), other.slice(1), bindings2, formula);\n m = nbs2.length;\n for (j = 0; j < m; j++) {\n nb2 = nbs2[j][0]; // @@@@ no idea whether this is used or right\n for (v in nb) {\n if (nb.hasOwnProperty(v)) {\n nb2[v] = nb[v];\n }\n }\n res.push([nb2, null]);\n }\n }\n return res;\n } // unifyContents\n\n // Matching\n //\n // Matching finds all bindings such that when the binding is applied\n // to one term it is equal to the other term. We only match formulae.\n\n /** if x is not in the bindings array, return the var; otherwise, return the bindings **/\n function bind(x, binding) {\n var y = binding[x];\n if (y === undefined) {\n return x;\n }\n return y;\n }\n\n // When there are OPTIONAL clauses, we must return bindings without them if none of them\n // succeed. However, if any of them do succeed, we should not. (This is what branchCount()\n // tracked. The problem currently is (2011/7) that when several optionals exist, and they\n // all match, multiple sets of bindings are returned, each with one optional filled in.)\n\n function union(a, b) {\n var c = {};\n var x;\n for (x in a) {\n if (a.hasOwnProperty(x)) {\n c[x] = a[x];\n }\n }\n for (x in b) {\n if (b.hasOwnProperty(x)) {\n c[x] = b[x];\n }\n }\n return c;\n }\n function OptionalBranchJunction(originalCallback, trunkBindings) {\n this.trunkBindings = trunkBindings;\n this.originalCallback = originalCallback;\n this.branches = [];\n // this.results = []; // result[i] is an array of bindings for branch i\n // this.done = {}; // done[i] means all/any results are in for branch i\n // this.count = {}\n return this;\n }\n OptionalBranchJunction.prototype.checkAllDone = function () {\n var i;\n for (i = 0; i < this.branches.length; i++) {\n if (!this.branches[i].done) {\n return;\n }\n }\n log.debug('OPTIONAL BIDNINGS ALL DONE:');\n this.doCallBacks(this.branches.length - 1, this.trunkBindings);\n };\n // Recrursively generate the cross product of the bindings\n OptionalBranchJunction.prototype.doCallBacks = function (b, bindings) {\n var j;\n if (b < 0) {\n return this.originalCallback(bindings);\n }\n for (j = 0; j < this.branches[b].results.length; j++) {\n this.doCallBacks(b - 1, union(bindings, this.branches[b].results[j]));\n }\n };\n\n // A mandatory branch is the normal one, where callbacks\n // are made immediately and no junction is needed.\n // Might be useful for onFinsihed callback for query API.\n function MandatoryBranch(callback, onDone) {\n this.count = 0;\n this.success = false;\n this.done = false;\n // this.results = []\n this.callback = callback;\n this.onDone = onDone;\n // this.junction = junction\n // junction.branches.push(this)\n return this;\n }\n MandatoryBranch.prototype.reportMatch = function (bindings) {\n // log.error(\"@@@@ query.js 1\"); // @@\n this.callback(bindings);\n this.success = true;\n };\n MandatoryBranch.prototype.reportDone = function () {\n this.done = true;\n log.info('Mandatory query branch finished.***');\n if (this.onDone !== undefined) {\n this.onDone();\n }\n };\n\n // An optional branch hoards its results.\n var OptionalBranch = function (junction) {\n this.count = 0;\n this.done = false;\n this.results = [];\n this.junction = junction;\n junction.branches.push(this);\n return this;\n };\n OptionalBranch.prototype.reportMatch = function (bindings) {\n this.results.push(bindings);\n };\n OptionalBranch.prototype.reportDone = function () {\n log.debug('Optional branch finished - results.length = ' + this.results.length);\n if (this.results.length === 0) {\n // This is what optional means: if no hits,\n this.results.push({}); // mimic success, but with no bindings\n log.debug(\"Optional branch FAILED - that's OK.\");\n }\n this.done = true;\n this.junction.checkAllDone();\n };\n\n /** prepare -- sets the index of the item to the possible matches\n * @param f - formula\n * @param item - an Statement, possibly w/ vars in it\n * @param bindings - Bindings so far\n * @returns false if the query fails -- there are no items that match\n */\n function prepare(f, item, bindings) {\n var terms, termIndex, i, ind;\n item.nvars = 0;\n item.index = null;\n // if (!f.statements) log.warn(\"@@@ prepare: f is \"+f)\n // log.debug(\"Prepare: f has \"+ f.statements.length)\n // log.debug(\"Prepare: Kb size \"+f.statements.length+\" Preparing \"+item)\n\n terms = [item.subject, item.predicate, item.object, item.why];\n ind = [f.subjectIndex, f.predicateIndex, f.objectIndex, f.whyIndex];\n for (i = 0; i < 4; i++) {\n let t = terms[i];\n // console.log(\" Prepare (\" + t + \") \"+(t in bindings))\n if (t.uri && t.uri === defaultDocumentURI) {// chrome:session\n // console.log(' query: Ignoring slot ' + i)\n } else if (t.isVar && !(bindings[t] !== undefined)) {\n item.nvars++;\n } else {\n t = bind(terms[i], bindings); // returns the RDF binding if bound, otherwise itself\n // if (terms[i]!=bind(terms[i],bindings) alert(\"Term: \"+terms[i]+\"Binding: \"+bind(terms[i], bindings))\n if (f.redirections[f.id(t)]) {\n t = f.redirections[f.id(t)]; // redirect\n }\n termIndex = ind[i][f.id(t)];\n if (!termIndex) {\n item.index = [];\n return false; // Query line cannot match\n }\n if (item.index === null || item.index.length > termIndex.length) {\n // Find smallest index\n item.index = termIndex;\n }\n }\n }\n if (item.index === null) {\n // All 4 are variables?\n item.index = f.statements;\n }\n return true;\n } // prepare\n\n /** sorting function -- negative if self is easier **/\n // We always prefer to start with a URI to be able to browse a graph\n // this is why we put off items with more variables till later.\n function easiestQuery(self, other) {\n if (self.nvars !== other.nvars) {\n return self.nvars - other.nvars;\n }\n return self.index.length - other.index.length;\n }\n var matchIndex = 0; // index\n /** matches a pattern formula against the knowledge base, e.g. to find matches for table-view\n *\n * @param f - knowledge base formula\n * @param g - pattern formula (may have vars)\n * @param bindingsSoFar - bindings accumulated in matching to date\n * @param level - spaces to indent stuff also lets you know what level of recursion you're at\n * @param fetcher - function (term, requestedBy) If you want link following\n * @param localCallback - function(bindings, pattern, branch) called on sucess\n * @returns nothing\n *\n * Will fetch linked data from the web iff the knowledge base an associated source fetcher (f.fetcher)\n ***/\n var match = function (f, g, bindingsSoFar, level, fetcher, localCallback, branch) {\n log.debug('Match begins, Branch count now: ' + branch.count + ' for ' + branch.pattern_debug);\n\n // log.debug(\"match: f has \"+f.statements.length+\", g has \"+g.statements.length)\n var pattern = g.statements;\n if (pattern.length === 0) {\n // when it's satisfied all the pattern triples\n log.debug('FOUND MATCH WITH BINDINGS:' + bindingDebug(bindingsSoFar));\n if (g.optional.length === 0) {\n branch.reportMatch(bindingsSoFar);\n } else {\n log.debug('OPTIONAL: ' + g.optional);\n var junction = new OptionalBranchJunction(callback, bindingsSoFar); // @@ won't work with nested optionals? nest callbacks\n var br = [];\n var b;\n for (b = 0; b < g.optional.length; b++) {\n br[b] = new OptionalBranch(junction); // Allocate branches to prevent premature ending\n br[b].pattern_debug = g.optional[b]; // for diagnotics only\n }\n for (b = 0; b < g.optional.length; b++) {\n br[b].count = br[b].count + 1; // Count how many matches we have yet to complete\n match(f, g.optional[b], bindingsSoFar, '', fetcher, callback, br[b]);\n }\n }\n branch.count--;\n log.debug('Match ends -- success , Branch count now: ' + branch.count + ' for ' + branch.pattern_debug);\n return; // Success\n }\n var item;\n var i;\n var n = pattern.length;\n // log.debug(level + \"Match \"+n+\" left, bs so far:\"+bindingDebug(bindingsSoFar))\n\n // Follow links from variables in query\n if (fetcher) {\n // Fetcher is used to fetch URIs, function first term is a URI term, second is the requester\n var id = 'match' + matchIndex++;\n var fetchResource = function (requestedTerm, id) {\n var docuri = requestedTerm.uri.split('#')[0];\n fetcher.nowOrWhenFetched(docuri, undefined, function (ok, body, xhr) {\n if (!ok) {\n console.log('Error following link to <' + requestedTerm.uri + '> in query: ' + body);\n }\n match(f, g, bindingsSoFar, level, fetcher,\n // match not match2 to look up any others necessary.\n localCallback, branch);\n });\n };\n for (i = 0; i < n; i++) {\n item = pattern[i]; // for each of the triples in the query\n if (bindingsSoFar[item.subject] !== undefined && bindingsSoFar[item.subject].uri && fetcher && fetcher.getState(docpart(bindingsSoFar[item.subject].uri)) === 'unrequested') {\n // fetch the subject info and return to id\n fetchResource(bindingsSoFar[item.subject], id);\n return; // only look up one per line this time, but we will come back again though match\n }\n if (bindingsSoFar[item.object] !== undefined && bindingsSoFar[item.object].uri && fetcher && fetcher.getState(docpart(bindingsSoFar[item.object].uri)) === 'unrequested') {\n fetchResource(bindingsSoFar[item.object], id);\n return;\n }\n }\n } // if fetcher\n match2(f, g, bindingsSoFar, level, fetcher, localCallback, branch);\n }; // match\n\n var constraintsSatisfied = function (bindings, constraints) {\n var res = true;\n var x;\n var test;\n for (x in bindings) {\n if (bindings.hasOwnProperty(x)) {\n if (constraints[x]) {\n test = constraints[x].test;\n if (test && !test(bindings[x])) {\n res = false;\n }\n }\n }\n }\n return res;\n };\n\n /** match2 -- stuff after the fetch **/\n var match2 = function (f, g, bindingsSoFar, level, fetcher, callback, branch) {\n // post fetch\n var pattern = g.statements;\n var n = pattern.length;\n var i;\n var k;\n var nk;\n var v;\n var bindings2;\n var newBindings1;\n var item;\n for (i = 0; i < n; i++) {\n // For each statement left in the query, run prepare\n item = pattern[i];\n // log.info('match2: item=' + item + ', bindingsSoFar=' + bindingDebug(bindingsSoFar))\n prepare(f, item, bindingsSoFar);\n // if (item.index) console.log(' item.index.length ' + item.index.length)\n }\n pattern.sort(easiestQuery);\n item = pattern[0];\n // log.debug(\"Sorted pattern:\\n\"+pattern)\n var rest = f.formula();\n rest.optional = g.optional;\n rest.constraints = g.constraints;\n rest.statements = pattern.slice(1); // No indexes: we will not query g.\n log.debug(level + 'match2 searching ' + item.index.length + ' for ' + item + '; bindings so far=' + bindingDebug(bindingsSoFar));\n // var results = []\n var c;\n var nc = item.index.length;\n var nbs1;\n var st;\n var onward = 0;\n // var x\n for (c = 0; c < nc; c++) {\n // For each candidate statement\n st = item.index[c]; // for each statement in the item's index, spawn a new match with that binding\n nbs1 = unifyContents([item.subject, item.predicate, item.object, item.why], [st.subject, st.predicate, st.object, st.why], bindingsSoFar, f);\n log.info(level + ' From first: ' + nbs1.length + ': ' + bindingsDebug(nbs1));\n nk = nbs1.length;\n // branch.count += nk\n // log.debug(\"Branch count bumped \"+nk+\" to: \"+branch.count)\n for (k = 0; k < nk; k++) {\n // For each way that statement binds\n bindings2 = [];\n newBindings1 = nbs1[k][0];\n if (!constraintsSatisfied(newBindings1, g.constraints)) {\n // branch.count--\n log.debug('Branch count CS: ' + branch.count);\n } else {\n for (v in newBindings1) {\n if (newBindings1.hasOwnProperty(v)) {\n bindings2[v] = newBindings1[v]; // copy\n }\n }\n for (v in bindingsSoFar) {\n if (bindingsSoFar.hasOwnProperty(v)) {\n bindings2[v] = bindingsSoFar[v]; // copy\n }\n }\n branch.count++; // Count how many matches we have yet to complete\n onward++;\n match(f, rest, bindings2, level + ' ', fetcher, callback, branch); // call match\n }\n }\n }\n branch.count--;\n if (onward === 0) {\n log.debug('Match2 fails completely on ' + item);\n }\n log.debug('Match2 ends, Branch count: ' + branch.count + ' for ' + branch.pattern_debug);\n if (branch.count === 0) {\n log.debug('Branch finished.');\n branch.reportDone();\n }\n }; // match2\n // ////////////////////////// Body of query() ///////////////////////\n var f = this;\n log.debug('Query on ' + this.statements.length);\n var trunck = new MandatoryBranch(callback, onDone);\n trunck.count++; // count one branch to complete at the moment\n if (myQuery.sync) {\n match(f, myQuery.pat, myQuery.pat.initBindings, '', fetcher, callback, trunck);\n } else {\n // Give up thread: Allow other activities to run\n setTimeout(function () {\n match(f, myQuery.pat, myQuery.pat.initBindings, '', fetcher, callback, trunck);\n }, 0);\n }\n\n // returns nothing; callback does the work\n} // query","import _defineProperty from \"@babel/runtime/helpers/defineProperty\";\n/* Identity management and indexing for RDF\n *\n * This file provides IndexedFormula a formula (set of triples) which\n * indexed by predicate, subject and object.\n *\n * It \"smushes\" (merges into a single node) things which are identical\n * according to owl:sameAs or an owl:InverseFunctionalProperty\n * or an owl:FunctionalProperty\n *\n *\n * 2005-10 Written Tim Berners-Lee\n * 2007 Changed so as not to munge statements from documents when smushing\n * 2019 Converted to typescript\n *\n *\n*/\n\n/** @module store */\n\nimport ClassOrder from './class-order';\nimport { defaultGraphURI } from './factories/canonical-data-factory';\nimport Formula from './formula';\nimport { ArrayIndexOf } from './utils';\nimport { RDFArrayRemove } from './utils-js';\nimport { isRDFlibSubject, isRDFlibPredicate, isRDFlibObject, isStore, isGraph,\n// isPredicate,\nisQuad\n// isSubject\n} from './utils/terms';\nimport Node from './node';\nimport Variable from './variable';\nimport { Query, indexedFormulaQuery } from './query';\nimport { BlankNodeTermType, CollectionTermType, DefaultGraphTermType, EmptyTermType, GraphTermType, LiteralTermType, NamedNodeTermType, VariableTermType } from './types';\nimport NamedNode from './named-node';\nimport serialize from \"./serialize\";\nimport BlankNode from './blank-node';\nimport DefaultGraph from './default-graph';\nimport Literal from './literal';\nconst owlNamespaceURI = 'http://www.w3.org/2002/07/owl#';\nexport { defaultGraphURI };\n// var link_ns = 'http://www.w3.org/2007/ont/link#'\n\n// Handle Functional Property\nfunction handleFP(formula, subj, pred, obj) {\n var o1 = formula.any(subj, pred, undefined);\n if (!o1) {\n return false; // First time with this value\n }\n // log.warn(\"Equating \"+o1.uri+\" and \"+obj.uri + \" because FP \"+pred.uri); //@@\n formula.equate(o1, obj);\n return true;\n} // handleFP\n\n// Handle Inverse Functional Property\nfunction handleIFP(formula, subj, pred, obj) {\n var s1 = formula.any(undefined, pred, obj);\n if (!s1) {\n return false; // First time with this value\n }\n // log.warn(\"Equating \"+s1.uri+\" and \"+subj.uri + \" because IFP \"+pred.uri); //@@\n formula.equate(s1, subj);\n return true;\n} // handleIFP\n\nfunction handleRDFType(formula, subj, pred, obj, why) {\n //@ts-ignore this method does not seem to exist in this library\n if (formula.typeCallback) {\n formula.typeCallback(formula, obj, why);\n }\n var x = formula.classActions[formula.id(obj)];\n var done = false;\n if (x) {\n for (var i = 0; i < x.length; i++) {\n done = done || x[i](formula, subj, pred, obj, why);\n }\n }\n return done; // statement given is not needed if true\n}\n\n/**\n * Indexed Formula aka Store\n */\nexport default class IndexedFormula extends Formula {\n /**\n * Creates a new formula\n * @param features - What sort of automatic processing to do? Array of string\n * @param features.sameAs - Smush together A and B nodes whenever { A sameAs B }\n * @param opts\n * @param [opts.rdfFactory] - The data factory that should be used by the store\n * @param [opts.rdfArrayRemove] - Function which removes statements from the store\n * @param [opts.dataCallback] - Callback when a statement is added to the store, will not trigger when adding duplicates\n */\n constructor(features, opts = {}) {\n super(undefined, undefined, undefined, undefined, opts);\n // IN future - allow pass array of statements to constructor\n /**\n * An UpdateManager initialised to this store\n */\n _defineProperty(this, \"updater\", void 0);\n /**\n * Dictionary of namespace prefixes\n */\n _defineProperty(this, \"namespaces\", void 0);\n /** Map of iri predicates to functions to call when adding { s type X } */\n _defineProperty(this, \"classActions\", void 0);\n /** Map of iri predicates to functions to call when getting statement with {s X o} */\n _defineProperty(this, \"propertyActions\", void 0);\n /** Redirect to lexically smaller equivalent symbol */\n _defineProperty(this, \"redirections\", void 0);\n /** Reverse mapping to redirection: aliases for this */\n _defineProperty(this, \"aliases\", void 0);\n /** Redirections we got from HTTP */\n _defineProperty(this, \"HTTPRedirects\", void 0);\n /** Array of statements with this X as subject */\n _defineProperty(this, \"subjectIndex\", void 0);\n /** Array of statements with this X as predicate */\n _defineProperty(this, \"predicateIndex\", void 0);\n /** Array of statements with this X as object */\n _defineProperty(this, \"objectIndex\", void 0);\n /** Array of statements with X as provenance */\n _defineProperty(this, \"whyIndex\", void 0);\n _defineProperty(this, \"index\", void 0);\n _defineProperty(this, \"features\", void 0);\n _defineProperty(this, \"_universalVariables\", void 0);\n _defineProperty(this, \"_existentialVariables\", void 0);\n /** Function to remove quads from the store arrays with */\n _defineProperty(this, \"rdfArrayRemove\", void 0);\n /** Callbacks which are triggered after a statement has been added to the store */\n _defineProperty(this, \"dataCallbacks\", []);\n /** Callbacks which are triggered after a statement has been removed from the store */\n _defineProperty(this, \"dataRemovalCallbacks\", []);\n this.propertyActions = {};\n this.classActions = {};\n this.redirections = [];\n this.aliases = [];\n this.HTTPRedirects = [];\n this.subjectIndex = [];\n this.predicateIndex = [];\n this.objectIndex = [];\n this.whyIndex = [];\n this.index = [this.subjectIndex, this.predicateIndex, this.objectIndex, this.whyIndex];\n this.namespaces = {}; // Dictionary of namespace prefixes\n this.features = features || [// By default, devs do not expect these features.\n // See https://github.com/linkeddata/rdflib.js/issues/458\n // 'sameAs',\n // 'InverseFunctionalProperty',\n // 'FunctionalProperty',\n ];\n this.rdfArrayRemove = opts.rdfArrayRemove || RDFArrayRemove;\n if (opts.dataCallback) {\n this.dataCallbacks = [opts.dataCallback];\n }\n if (opts.dataRemovalCallback) {\n this.dataRemovalCallbacks = [opts.dataRemovalCallback];\n }\n this.initPropertyActions(this.features);\n }\n\n /**\n * Gets the URI of the default graph\n */\n static get defaultGraphURI() {\n return defaultGraphURI;\n }\n\n /**\n * Gets this graph with the bindings substituted\n * @param bindings The bindings\n */\n substitute(bindings) {\n var statementsCopy = this.statements.map(function (ea) {\n return ea.substitute(bindings);\n });\n var y = new IndexedFormula();\n y.add(statementsCopy);\n return y;\n }\n\n /**\n * Add a callback which will be triggered after a statement has been added to the store.\n * @param cb\n */\n addDataCallback(cb) {\n this.dataCallbacks.push(cb);\n }\n addDataRemovalCallback(cb) {\n this.dataRemovalCallbacks.push(cb);\n }\n\n /**\n * Apply a set of statements to be deleted and to be inserted\n *\n * @param patch - The set of statements to be deleted and to be inserted\n * @param target - The name of the document to patch\n * @param patchCallback - Callback to be called when patching is complete\n */\n applyPatch(patch, target, patchCallback) {\n var targetKB = this;\n var ds;\n var binding = null;\n function doPatch(onDonePatch) {\n if (patch['delete']) {\n ds = patch['delete'];\n // console.log(bindingDebug(binding))\n // console.log('ds before substitute: ' + ds)\n if (binding) ds = ds.substitute(binding);\n // console.log('applyPatch: delete: ' + ds)\n ds = ds.statements;\n var bad = [];\n var ds2 = ds.map(function (st) {\n // Find the actual statements in the store\n var sts = targetKB.statementsMatching(st.subject, st.predicate, st.object, target);\n if (sts.length === 0) {\n // log.info(\"NOT FOUND deletable \" + st)\n bad.push(st);\n return null;\n } else {\n // log.info(\"Found deletable \" + st)\n return sts[0];\n }\n });\n if (bad.length) {\n // console.log('Could not find to delete ' + bad.length + 'statements')\n // console.log('despite ' + targetKB.statementsMatching(bad[0].subject, bad[0].predicate)[0])\n return patchCallback('Could not find to delete: ' + bad.join('\\n or '));\n }\n ds2.map(function (st) {\n targetKB.remove(st);\n });\n }\n if (patch['insert']) {\n // log.info(\"doPatch insert \"+patch['insert'])\n ds = patch['insert'];\n if (binding) ds = ds.substitute(binding);\n ds = ds.statements;\n ds.map(function (st) {\n st.graph = target;\n targetKB.add(st.subject, st.predicate, st.object, st.graph);\n });\n }\n onDonePatch();\n }\n if (patch.where) {\n // log.info(\"Processing WHERE: \" + patch.where + '\\n')\n var query = new Query('patch');\n query.pat = patch.where;\n query.pat.statements.map(function (st) {\n st.graph = new NamedNode(target.value);\n });\n //@ts-ignore TODO: add sync property to Query when converting Query to typescript\n query.sync = true;\n var bindingsFound = [];\n targetKB.query(query, function onBinding(binding) {\n bindingsFound.push(binding);\n // console.log(' got a binding: ' + bindingDebug(binding))\n }, targetKB.fetcher, function onDone() {\n if (bindingsFound.length === 0) {\n return patchCallback('No match found to be patched:' + patch.where);\n }\n if (bindingsFound.length > 1) {\n return patchCallback('Patch ambiguous. No patch done.');\n }\n binding = bindingsFound[0];\n doPatch(patchCallback);\n });\n } else {\n doPatch(patchCallback);\n }\n }\n\n /**\n * N3 allows for declaring blank nodes, this function enables that support\n *\n * @param x The blank node to be declared, supported in N3\n */\n declareExistential(x) {\n if (!this._existentialVariables) this._existentialVariables = [];\n this._existentialVariables.push(x);\n return x;\n }\n\n /**\n * @param features\n */\n initPropertyActions(features) {\n // If the predicate is #type, use handleRDFType to create a typeCallback on the object\n this.propertyActions[this.rdfFactory.id(this.rdfFactory.namedNode('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'))] = [handleRDFType];\n\n // Assumption: these terms are not redirected @@fixme\n if (ArrayIndexOf(features, 'sameAs') >= 0) {\n this.propertyActions[this.rdfFactory.id(this.rdfFactory.namedNode(`${owlNamespaceURI}sameAs`))] = [function (formula, subj, pred, obj, why) {\n // log.warn(\"Equating \"+subj.uri+\" sameAs \"+obj.uri); //@@\n formula.equate(subj, obj);\n return true; // true if statement given is NOT needed in the store\n }]; // sameAs -> equate & don't add to index\n }\n if (ArrayIndexOf(features, 'InverseFunctionalProperty') >= 0) {\n this.classActions[this.rdfFactory.id(this.rdfFactory.namedNode(`${owlNamespaceURI}InverseFunctionalProperty`))] = [function (formula, subj, pred, obj, addFn) {\n // yes subj not pred!\n return formula.newPropertyAction(subj, handleIFP);\n }]; // IFP -> handleIFP, do add to index\n }\n if (ArrayIndexOf(features, 'FunctionalProperty') >= 0) {\n this.classActions[this.rdfFactory.id(this.rdfFactory.namedNode(`${owlNamespaceURI}FunctionalProperty`))] = [function (formula, subj, proj, obj, addFn) {\n return formula.newPropertyAction(subj, handleFP);\n }]; // FP => handleFP, do add to index\n }\n }\n\n /** @deprecated Use {add} instead */\n addStatement(st) {\n this.add(st.subject, st.predicate, st.object, st.graph);\n return this.statements.length;\n }\n\n /**\n * Adds a triple (quad) to the store.\n *\n * @param subj - The thing about which the fact a relationship is asserted.\n * Also accepts a statement or an array of Statements.\n * @param pred - The relationship which is asserted\n * @param obj - The object of the relationship, e.g. another thing or a value. If passed a string, this will become a literal.\n * @param why - The document in which the triple (S,P,O) was or will be stored on the web\n * @returns The statement added to the store, or the store\n */\n add(subj, pred, obj, why) {\n var i;\n if (arguments.length === 1) {\n if (subj instanceof Array) {\n for (i = 0; i < subj.length; i++) {\n this.add(subj[i]);\n }\n } else if (isQuad(subj)) {\n this.add(subj.subject, subj.predicate, subj.object, subj.graph);\n } else if (isStore(subj)) {\n this.add(subj.statements);\n }\n return this;\n }\n var actions;\n var st;\n if (!why) {\n // system generated\n why = this.fetcher ? this.fetcher.appNode : this.rdfFactory.defaultGraph();\n }\n if (typeof subj == 'string') {\n subj = this.rdfFactory.namedNode(subj);\n }\n pred = Node.fromValue(pred);\n const objNode = Node.fromValue(obj);\n why = Node.fromValue(why);\n if (!isRDFlibSubject(subj)) {\n throw new Error('Subject is not a subject type');\n }\n if (!isRDFlibPredicate(pred)) {\n throw new Error(`Predicate ${pred} is not a predicate type`);\n }\n if (!isRDFlibObject(objNode)) {\n throw new Error(`Object ${objNode} is not an object type`);\n }\n if (!isGraph(why)) {\n throw new Error(\"Why is not a graph type\");\n }\n //@ts-ignore This is not used internally\n if (this.predicateCallback) {\n //@ts-ignore This is not used internally\n this.predicateCallback(this, pred, why);\n }\n // Action return true if the statement does not need to be added\n var predHash = this.id(this.canon(pred));\n actions = this.propertyActions[predHash]; // Predicate hash\n var done = false;\n if (actions) {\n // alert('type: '+typeof actions +' @@ actions='+actions)\n for (i = 0; i < actions.length; i++) {\n done = done || actions[i](this, subj, pred, objNode, why);\n }\n }\n if (this.holds(subj, pred, objNode, why)) {\n // Takes time but saves duplicates\n // console.log('rdflib: Ignoring dup! {' + subj + ' ' + pred + ' ' + obj + ' ' + why + '}')\n return null; // @@better to return self in all cases?\n }\n // If we are tracking provenance, every thing should be loaded into the store\n // if (done) return this.rdfFactory.quad(subj, pred, obj, why)\n // Don't put it in the store\n // still return this statement for owl:sameAs input\n var hash = [this.id(this.canon(subj)), predHash, this.id(this.canon(objNode)), this.id(this.canon(why))];\n // @ts-ignore this will fail if you pass a collection and the factory does not allow Collections\n st = this.rdfFactory.quad(subj, pred, objNode, why);\n for (i = 0; i < 4; i++) {\n var ix = this.index[i];\n var h = hash[i];\n if (!ix[h]) {\n ix[h] = [];\n }\n ix[h].push(st); // Set of things with this as subject, etc\n }\n\n // log.debug(\"ADDING {\"+subj+\" \"+pred+\" \"+objNode+\"} \"+why)\n this.statements.push(st);\n for (const callback of this.dataCallbacks) {\n callback(st);\n }\n return st;\n }\n\n /**\n * Returns the symbol with canonical URI as smushed\n * @param term - An RDF node\n */\n canon(term) {\n if (!term) {\n // @@ TODO Should improve this to return proper value - doing this to keep it backward compatible\n return term;\n }\n const y = this.redirections[this.id(term)];\n if (y) {\n return y;\n }\n switch (term.termType) {\n case BlankNodeTermType:\n return new BlankNode(term.value);\n case CollectionTermType:\n return term;\n // non-RDF/JS type, should just need to cast\n case DefaultGraphTermType:\n return new DefaultGraph();\n case EmptyTermType:\n // non-RDF/JS type, should just need to cast\n return term;\n case GraphTermType:\n // non-RDF/JS type, should just need to cast\n return term;\n case LiteralTermType:\n return new Literal(term.value, term.language, term.datatype);\n case NamedNodeTermType:\n return new NamedNode(term.value);\n case VariableTermType:\n return new Variable(term.value);\n default:\n throw new Error(`Term Type not recognized for canonization: ${term.termType}`);\n }\n }\n\n /**\n * Checks this formula for consistency\n */\n check() {\n this.checkStatementList(this.statements);\n for (var p = 0; p < 4; p++) {\n var ix = this.index[p];\n for (var key in ix) {\n if (ix.hasOwnProperty(key)) {\n // @ts-ignore should this pass an array or a single statement? checkStateMentsList expects an array.\n this.checkStatementList(ix[key], p);\n }\n }\n }\n }\n\n /**\n * Checks a list of statements for consistency\n * @param sts - The list of statements to check\n * @param from - An index with the array ['subject', 'predicate', 'object', 'why']\n */\n checkStatementList(sts, from) {\n if (from === undefined) {\n from = 0;\n }\n var names = ['subject', 'predicate', 'object', 'why'];\n var origin = ' found in ' + names[from] + ' index.';\n var st;\n for (var j = 0; j < sts.length; j++) {\n st = sts[j];\n var term = [st.subject, st.predicate, st.object, st.graph];\n var arrayContains = function (a, x) {\n for (var i = 0; i < a.length; i++) {\n if (a[i].subject.equals(x.subject) && a[i].predicate.equals(x.predicate) && a[i].object.equals(x.object) && a[i].why.equals(x.graph)) {\n return true;\n }\n }\n };\n for (var p = 0; p < 4; p++) {\n var c = this.canon(term[p]);\n var h = this.id(c);\n if (!this.index[p][h]) {\n // throw new Error('No ' + name[p] + ' index for statement ' + st + '@' + st.why + origin)\n } else {\n if (!arrayContains(this.index[p][h], st)) {\n // throw new Error('Index for ' + name[p] + ' does not have statement ' + st + '@' + st.why + origin)\n }\n }\n }\n if (!arrayContains(this.statements, st)) {\n throw new Error('Statement list does not statement ' + st + '@' + st.graph + origin);\n }\n }\n }\n\n /**\n * Closes this formula (and return it)\n */\n close() {\n return this;\n }\n compareTerms(u1, u2) {\n // Keep compatibility with downstream classOrder changes\n if (Object.prototype.hasOwnProperty.call(u1, \"compareTerm\")) {\n return u1.compareTerm(u2);\n }\n if (ClassOrder[u1.termType] < ClassOrder[u2.termType]) {\n return -1;\n }\n if (ClassOrder[u1.termType] > ClassOrder[u2.termType]) {\n return +1;\n }\n if (u1.value < u2.value) {\n return -1;\n }\n if (u1.value > u2.value) {\n return +1;\n }\n return 0;\n }\n\n /**\n * replaces @template with @target and add appropriate triples\n * removes no triples by default and is a one-direction replication\n * @param template node to copy\n * @param target node to copy to\n * @param flags Whether or not to do a two-directional copy and/or delete triples\n */\n copyTo(template, target, flags) {\n if (!flags) flags = [];\n var statList = this.statementsMatching(template);\n if (ArrayIndexOf(flags, 'two-direction') !== -1) {\n statList.concat(this.statementsMatching(undefined, undefined, template));\n }\n for (var i = 0; i < statList.length; i++) {\n var st = statList[i];\n switch (st.object.termType) {\n case 'NamedNode':\n this.add(target, st.predicate, st.object);\n break;\n case 'Literal':\n case 'BlankNode':\n // @ts-ignore Collections can appear here\n case 'Collection':\n // @ts-ignore Possible bug: copy is not available on Collections\n this.add(target, st.predicate, st.object.copy(this));\n }\n if (ArrayIndexOf(flags, 'delete') !== -1) {\n this.remove(st);\n }\n }\n }\n\n /**\n * Simplify graph in store when we realize two identifiers are equivalent\n * We replace the bigger with the smaller.\n * @param u1in The first node\n * @param u2in The second node\n */\n equate(u1in, u2in) {\n // log.warn(\"Equating \"+u1+\" and \"+u2); // @@\n // @@JAMBO Must canonicalize the uris to prevent errors from a=b=c\n // 03-21-2010\n const u1 = this.canon(u1in);\n const u2 = this.canon(u2in);\n var d = this.compareTerms(u1, u2);\n if (!d) {\n return true; // No information in {a = a}\n }\n // var big\n // var small\n if (d < 0) {\n // u1 less than u2\n return this.replaceWith(u2, u1);\n } else {\n return this.replaceWith(u1, u2);\n }\n }\n\n /**\n * Creates a new empty indexed formula\n * Only applicable for IndexedFormula, but TypeScript won't allow a subclass to override a property\n * @param features The list of features\n */\n formula(features) {\n return new IndexedFormula(features);\n }\n\n /**\n * Returns the number of statements contained in this IndexedFormula.\n * (Getter proxy to this.statements).\n * Usage:\n * ```\n * var kb = rdf.graph()\n * kb.length // -> 0\n * ```\n * @returns {Number}\n */\n get length() {\n return this.statements.length;\n }\n\n /**\n * Returns any quads matching the given arguments.\n * Standard RDFJS spec method for Source objects, implemented as an\n * alias to `statementsMatching()`\n * @param subject The subject\n * @param predicate The predicate\n * @param object The object\n * @param graph The graph that contains the statement\n */\n match(subject, predicate, object, graph) {\n return this.statementsMatching(Node.fromValue(subject), Node.fromValue(predicate), Node.fromValue(object), Node.fromValue(graph));\n }\n\n /**\n * Find out whether a given URI is used as symbol in the formula\n * @param uri The URI to look for\n */\n mentionsURI(uri) {\n var hash = '<' + uri + '>';\n return !!this.subjectIndex[hash] || !!this.objectIndex[hash] || !!this.predicateIndex[hash];\n }\n\n /**\n * Existentials are BNodes - something exists without naming\n * @param uri An URI\n */\n newExistential(uri) {\n if (!uri) return this.bnode();\n var x = this.sym(uri);\n // @ts-ignore x should be blanknode, but is namedNode.\n return this.declareExistential(x);\n }\n\n /**\n * Adds a new property action\n * @param pred the predicate that the function should be triggered on\n * @param action the function that should trigger\n */\n newPropertyAction(pred, action) {\n // log.debug(\"newPropertyAction: \"+pred)\n var hash = this.id(pred);\n if (!this.propertyActions[hash]) {\n this.propertyActions[hash] = [];\n }\n this.propertyActions[hash].push(action);\n // Now apply the function to to statements already in the store\n var toBeFixed = this.statementsMatching(undefined, pred, undefined);\n var done = false;\n for (var i = 0; i < toBeFixed.length; i++) {\n // NOT optimized - sort toBeFixed etc\n done = done || action(this, toBeFixed[i].subject, pred, toBeFixed[i].object);\n }\n return done;\n }\n\n /**\n * Creates a new universal node\n * Universals are Variables\n * @param uri An URI\n */\n newUniversal(uri) {\n var x = this.sym(uri);\n if (!this._universalVariables) this._universalVariables = [];\n this._universalVariables.push(x);\n return x;\n }\n\n // convenience function used by N3 parser\n variable(name) {\n return new Variable(name);\n }\n\n /**\n * Find an unused id for a file being edited: return a symbol\n * (Note: Slow iff a lot of them -- could be O(log(k)) )\n * @param doc A document named node\n */\n nextSymbol(doc) {\n for (var i = 0;; i++) {\n var uri = doc.value + '#n' + i;\n if (!this.mentionsURI(uri)) return this.sym(uri);\n }\n }\n\n /**\n * Query this store asynchronously, return bindings in callback\n *\n * @param myQuery The query to be run\n * @param callback Function to call when bindings\n * @param Fetcher | null If you want the query to do link following\n * @param onDone OBSOLETE - do not use this // @@ Why not ?? Called when query complete\n */\n query(myQuery, callback, fetcher, onDone) {\n return indexedFormulaQuery.call(this, myQuery, callback, fetcher, onDone);\n }\n\n /**\n * Query this store synchronously and return bindings\n *\n * @param myQuery The query to be run\n */\n querySync(myQuery) {\n var results = [];\n function saveBinginds(bindings) {\n results.push(bindings);\n }\n function onDone() {\n done = true;\n }\n var done = false;\n // @ts-ignore TODO: Add .sync to Query\n myQuery.sync = true;\n indexedFormulaQuery.call(this, myQuery, saveBinginds, null, onDone);\n if (!done) {\n throw new Error('Sync query should have called done function');\n }\n return results;\n }\n\n /**\n * Removes one or multiple statement(s) from this formula\n * @param st - A Statement or array of Statements to remove\n */\n remove(st) {\n if (st instanceof Array) {\n for (var i = 0; i < st.length; i++) {\n this.remove(st[i]);\n }\n return this;\n }\n if (isStore(st)) {\n return this.remove(st.statements);\n }\n var sts = this.statementsMatching(st.subject, st.predicate, st.object, st.graph);\n if (!sts.length) {\n throw new Error('Statement to be removed is not on store: ' + st);\n }\n this.removeStatement(sts[0]);\n return this;\n }\n\n /**\n * Removes all statements in a doc, along with the related metadata including request/response/status\n * @param doc - The document / graph\n */\n removeDocument(doc) {\n this.removeMetadata(doc);\n // remove document\n var sts = this.statementsMatching(undefined, undefined, undefined, doc).slice(); // Take a copy as this is the actual index\n for (var i = 0; i < sts.length; i++) {\n this.removeStatement(sts[i]);\n }\n this.removeMatches(doc, null, null);\n return this;\n }\n removeMetadata(doc) {\n const meta = this.sym('chrome://TheCurrentSession'); // or this.rdfFactory.namedNode('chrome://TheCurrentSession')\n const linkNamespaceURI = 'http://www.w3.org/2007/ont/link#';\n // remove status/response/request metadata\n const requests = this.statementsMatching(undefined, this.sym(`${linkNamespaceURI}requestedURI`), this.rdfFactory.literal(doc.value), meta).map(st => st.subject);\n for (var r = 0; r < requests.length; r++) {\n const request = requests[r];\n if (request != undefined) {\n // removeMatches unresolved issue with collection https://github.com/linkeddata/rdflib.js/issues/631\n let sts;\n // status collection\n const status = this.any(request, this.sym(`${linkNamespaceURI}status`), null, meta);\n if (status != undefined) {\n sts = this.statementsMatching(status, this.sym(`${linkNamespaceURI}status`), null, meta).slice();\n for (var i = 0; i < sts.length; i++) {\n this.removeStatement(sts[i]);\n }\n }\n // response items list\n const response = this.any(request, this.sym(`${linkNamespaceURI}response`), null, meta);\n if (response != undefined) {\n sts = this.statementsMatching(response, null, null, meta).slice();\n for (var i = 0; i < sts.length; i++) {\n this.removeStatement(sts[i]);\n }\n }\n // request triples\n sts = this.statementsMatching(request, null, null, meta).slice();\n for (var i = 0; i < sts.length; i++) {\n this.removeStatement(sts[i]);\n }\n }\n }\n this.removeMatches(this.sym(doc.value), null, null, meta); // content-type\n return this;\n }\n\n /**\n * Remove all statements matching args (within limit) *\n * @param subj The subject\n * @param pred The predicate\n * @param obj The object\n * @param why The graph that contains the statement\n * @param limit The number of statements to remove\n */\n removeMany(subj, pred, obj, why, limit) {\n // log.debug(\"entering removeMany w/ subj,pred,obj,why,limit = \" + subj +\", \"+ pred+\", \" + obj+\", \" + why+\", \" + limit)\n var sts = this.statementsMatching(subj, pred, obj, why, false);\n // This is a subtle bug that occurred in updateCenter.js too.\n // The fact is, this.statementsMatching returns this.whyIndex instead of a copy of it\n // but for perfromance consideration, it's better to just do that\n // so make a copy here.\n var statements = [];\n for (var i = 0; i < sts.length; i++) statements.push(sts[i]);\n if (limit) statements = statements.slice(0, limit);\n for (i = 0; i < statements.length; i++) this.remove(statements[i]);\n }\n\n /**\n * Remove all matching statements\n * @param subject The subject\n * @param predicate The predicate\n * @param object The object\n * @param graph The graph that contains the statement\n */\n removeMatches(subject, predicate, object, graph) {\n this.removeMany(subject, predicate, object, graph);\n return this;\n }\n\n /**\n * Remove a particular statement object from the store\n *\n * @param st - a statement which is already in the store and indexed.\n * Make sure you only use this for these.\n * Otherwise, you should use remove() above.\n */\n removeStatement(st) {\n // log.debug(\"entering remove w/ st=\" + st)\n var term = [st.subject, st.predicate, st.object, st.graph];\n for (var p = 0; p < 4; p++) {\n var c = this.canon(term[p]);\n var h = this.id(c);\n if (!this.index[p][h]) {\n // log.warn (\"Statement removal: no index '+p+': \"+st)\n } else {\n this.rdfArrayRemove(this.index[p][h], st);\n }\n }\n this.rdfArrayRemove(this.statements, st);\n for (const callback of this.dataRemovalCallbacks) {\n callback(st);\n }\n return this;\n }\n\n /**\n * Removes statements\n * @param sts The statements to remove\n */\n removeStatements(sts) {\n for (var i = 0; i < sts.length; i++) {\n this.remove(sts[i]);\n }\n return this;\n }\n\n /**\n * Replace big with small, obsoleted with obsoleting.\n */\n replaceWith(big, small) {\n // log.debug(\"Replacing \"+big+\" with \"+small) // this.id(@@\n var oldhash = this.id(big);\n var newhash = this.id(small);\n var moveIndex = function (ix) {\n var oldlist = ix[oldhash];\n if (!oldlist) {\n return; // none to move\n }\n var newlist = ix[newhash];\n if (!newlist) {\n ix[newhash] = oldlist;\n } else {\n ix[newhash] = oldlist.concat(newlist);\n }\n delete ix[oldhash];\n };\n // the canonical one carries all the indexes\n for (var i = 0; i < 4; i++) {\n moveIndex(this.index[i]);\n }\n this.redirections[oldhash] = small;\n if (big.value) {\n // @@JAMBO: must update redirections,aliases from sub-items, too.\n if (!this.aliases[newhash]) {\n this.aliases[newhash] = [];\n }\n this.aliases[newhash].push(big); // Back link\n if (this.aliases[oldhash]) {\n for (i = 0; i < this.aliases[oldhash].length; i++) {\n this.redirections[this.id(this.aliases[oldhash][i])] = small;\n this.aliases[newhash].push(this.aliases[oldhash][i]);\n }\n }\n this.add(small, this.sym('http://www.w3.org/2007/ont/link#uri'), big);\n // If two things are equal, and one is requested, we should request the other.\n if (this.fetcher) {\n this.fetcher.nowKnownAs(big, small);\n }\n }\n moveIndex(this.classActions);\n moveIndex(this.propertyActions);\n // log.debug(\"Equate done. \"+big+\" to be known as \"+small)\n return true; // true means the statement does not need to be put in\n }\n\n /**\n * Return all equivalent URIs by which this is known\n * @param x A named node\n */\n allAliases(x) {\n var a = this.aliases[this.id(this.canon(x))] || [];\n a.push(this.canon(x));\n return a;\n }\n\n /**\n * Compare by canonical URI as smushed\n * @param x A named node\n * @param y Another named node\n */\n sameThings(x, y) {\n if (x.equals(y)) {\n return true;\n }\n var x1 = this.canon(x);\n // alert('x1='+x1)\n if (!x1) return false;\n var y1 = this.canon(y);\n // alert('y1='+y1); //@@\n if (!y1) return false;\n return x1.value === y1.value;\n }\n setPrefixForURI(prefix, nsuri) {\n // TODO: This is a hack for our own issues, which ought to be fixed\n // post-release\n // See http://dig.csail.mit.edu/cgi-bin/roundup.cgi/$rdf/issue227\n if (prefix === 'tab' && this.namespaces['tab']) {\n return;\n } // There are files around with long badly generated prefixes like this\n if (prefix.slice(0, 2) === 'ns' || prefix.slice(0, 7) === 'default') {\n return;\n }\n\n // remove any prefix that currently targets nsuri\n for (let existingPrefix in this.namespaces) {\n if (this.namespaces[existingPrefix] == nsuri) delete this.namespaces[existingPrefix];\n }\n this.namespaces[prefix] = nsuri;\n }\n\n /** Search the Store\n *\n * ALL CONVENIENCE LOOKUP FUNCTIONS RELY ON THIS!\n * @param subj - A node to search for as subject, or if null, a wildcard\n * @param pred - A node to search for as predicate, or if null, a wildcard\n * @param obj - A node to search for as object, or if null, a wildcard\n * @param why - A node to search for as graph, or if null, a wildcard\n * @param justOne - flag - stop when found one rather than get all of them?\n * @returns An array of nodes which match the wildcard position\n */\n statementsMatching(subj, pred, obj, why, justOne) {\n // log.debug(\"Matching {\"+subj+\" \"+pred+\" \"+obj+\"}\")\n var pat = [subj, pred, obj, why];\n var pattern = [];\n var hash = [];\n var wild = []; // wildcards\n var given = []; // Not wild\n var p;\n var list;\n for (p = 0; p < 4; p++) {\n pattern[p] = this.canon(Node.fromValue(pat[p]));\n if (!pattern[p]) {\n wild.push(p);\n } else {\n given.push(p);\n hash[p] = this.id(pattern[p]);\n }\n }\n if (given.length === 0) {\n return this.statements;\n }\n if (given.length === 1) {\n // Easy too, we have an index for that\n p = given[0];\n list = this.index[p][hash[p]];\n if (list && justOne) {\n if (list.length > 1) {\n list = list.slice(0, 1);\n }\n }\n list = list || [];\n return list;\n }\n // Now given.length is 2, 3 or 4.\n // We hope that the scale-free nature of the data will mean we tend to get\n // a short index in there somewhere!\n var best = 1e10; // really bad\n var iBest;\n var i;\n for (i = 0; i < given.length; i++) {\n p = given[i]; // Which part we are dealing with\n list = this.index[p][hash[p]];\n if (!list) {\n return []; // No occurrences\n }\n if (list.length < best) {\n best = list.length;\n iBest = i; // (not p!)\n }\n }\n // Ok, we have picked the shortest index but now we have to filter it\n var pBest = given[iBest];\n var possibles = this.index[pBest][hash[pBest]];\n var check = given.slice(0, iBest).concat(given.slice(iBest + 1)); // remove iBest\n var results = [];\n var parts = ['subject', 'predicate', 'object', 'why'];\n for (var j = 0; j < possibles.length; j++) {\n var st = possibles[j];\n for (i = 0; i < check.length; i++) {\n // for each position to be checked\n p = check[i];\n if (!this.canon(st[parts[p]]).equals(pattern[p])) {\n st = null;\n break;\n }\n }\n if (st != null) {\n results.push(st);\n if (justOne) break;\n }\n }\n return results;\n }\n\n /**\n * A list of all the URIs by which this thing is known\n * @param term\n */\n uris(term) {\n var cterm = this.canon(term);\n var terms = this.aliases[this.id(cterm)];\n if (!cterm.value) return [];\n var res = [cterm.value];\n if (terms) {\n for (var i = 0; i < terms.length; i++) {\n res.push(terms[i].uri);\n }\n }\n return res;\n }\n serialize(base, contentType, provenance, options) {\n // override Formula.serialize to force the serializer namespace prefixes\n // to those of this IndexedFormula\n\n // if namespaces are explicitly passed in options, let them override the existing namespaces in this formula\n const namespaces = options?.namespaces ? {\n ...this.namespaces,\n ...options.namespaces\n } : {\n ...this.namespaces\n };\n options = {\n ...(options || {}),\n namespaces\n };\n return serialize(provenance, this, base, contentType, undefined, options);\n }\n}\n_defineProperty(IndexedFormula, \"handleRDFType\", void 0);\nIndexedFormula.handleRDFType = handleRDFType;","/* Lists form conversion\n*/\n\n// import DataFactory from './factories/extended-term-factory'\n// import jsonldParser from './jsonldparser'\n// @ts-ignore is this injected?\n// @@ Goal: remove this dependency\n// import N3Parser from './n3parser'\n// import { parseRDFaDOM } from './rdfaparser'\n// import RDFParser from './rdfxmlparser'\n// import sparqlUpdateParser from './patch-parser'\n// import * as Util from './utils-js'\n\n// import BlankNode from './blank-node'\n// import NamedNode from './named-node'\nimport Collection from './collection';\nimport Statement from './statement';\n// import Formula from './formula'\n\n// import { ContentType, TurtleContentType, N3ContentType, RDFXMLContentType, XHTMLContentType, HTMLContentType, SPARQLUpdateContentType, SPARQLUpdateSingleMatchContentType, JSONLDContentType, NQuadsContentType, NQuadsAltContentType } from './types'\n\n// import { Quad } from './tf-types'\n\nimport Namespace from './namespace';\nconst RDF = Namespace('http://www.w3.org/1999/02/22-rdf-syntax-ns#');\n\n/* Replace a given node with another node throughout a given document\n*\n* we do the predicate as well for complenesss though we don't expect Collections to use it\n*/\nexport function substituteInDoc(store, x, y, doc) {\n // console.log(`substituteInDoc put ${x} for ${y} in ${doc}}`)\n for (const quad of store.statementsMatching(y, null, null, doc)) {\n const newStatement = new Statement(x, quad.predicate, quad.object, doc);\n store.remove(quad);\n store.add(newStatement);\n }\n for (const quad of store.statementsMatching(null, y, null, doc)) {\n store.remove(quad);\n // console.log(` substituteInDoc predicate ${x} in ${quad}}`)\n store.add(new Statement(quad.subject, x, quad.object, doc));\n }\n for (const quad of store.statementsMatching(null, null, y, doc)) {\n store.remove(quad);\n store.add(new Statement(quad.subject, quad.predicate, x, doc));\n }\n}\n\n/* Change all lone rdf:nil nodes into empty Collections\n*/\nexport function substituteNillsInDoc(store, doc) {\n const x = RDF('nil');\n for (const quad of store.statementsMatching(x, null, null, doc)) {\n store.remove(quad);\n const y = new Collection();\n store.add(new Statement(y, quad.predicate, quad.object, doc));\n }\n for (const quad of store.statementsMatching(null, null, x, doc)) {\n if (!quad.predicate.sameTerm(RDF('rest'))) {\n // If not a tail\n store.remove(quad);\n const y = new Collection();\n store.add(new Statement(quad.subject, quad.predicate, y, doc));\n }\n }\n}\n/**\n * Convert lists reified as rdf:first, rest\n * Normal method is sync.\n * Unfortunately jsdonld is currently written to need to be called async.\n * Hence the mess below with executeCallback.\n * @param store - The quadstore\n * @param doc - The document in which the conversion is done\n */\n\nexport function convertFirstRestNil(store, doc // Do whole store?\n) {\n function preceding(ele, listSoFar, trash) {\n const rests = store.statementsMatching(ele, RDF('rest'), null, doc);\n if (rests.length !== 1) throw new Error(`Bad list structure: no rest at ${ele}`);\n const firsts = store.statementsMatching(ele, RDF('first'), null, doc);\n if (firsts.length !== 1) throw new Error(`Bad list structure: rest but ${firsts.length} firsts at ${ele}`);\n const value = firsts[0].object;\n const total = [value].concat(listSoFar);\n // console.log(' List now is: ', total)\n const totalTrash = trash.concat(rests).concat(firsts);\n const pres = store.statementsMatching(null, RDF('rest'), ele, doc);\n if (pres.length === 0) {\n // Head of the list\n const newList = new Collection(total);\n store.remove(totalTrash);\n // Replace old list with new list:\n substituteInDoc(store, newList, ele, doc);\n return;\n }\n if (pres.length !== 1) throw new Error(`Bad list structure: ${pres.length} pres at ${ele}`);\n const pre = pres[0].subject;\n if (pre.termType !== 'BlankNode') throw new Error(`Bad list element node ${pre} type: ${pre.termType} `);\n preceding(pre, total, totalTrash);\n return;\n }\n substituteNillsInDoc(store, doc); // lone ones only\n\n const tails = store.statementsMatching(null, RDF('rest'), RDF('nil'), doc);\n tails.forEach(tail => {\n if (tail.subject.termType !== 'BlankNode') throw new Error(`Bad list element node ${tail.subject} type: ${tail.subject.termType} `);\n preceding(tail.subject, [], []);\n });\n}","/**\n*\n* UTF-8 data encode / decode\n* http://www.webtoolkit.info/\n*\n**/\nimport * as Uri from './uri';\nimport { ArrayIndexOf } from './utils';\nimport { convertFirstRestNil } from './lists';\nfunction hexify(str) {\n // also used in parser\n return encodeURI(str);\n}\nvar Utf8 = {\n // public method for url encoding\n encode: function (string) {\n string = string.replace(/\\r\\n/g, \"\\n\");\n var utftext = \"\";\n for (var n = 0; n < string.length; n++) {\n var c = string.charCodeAt(n);\n if (c < 128) {\n utftext += String.fromCharCode(c);\n } else if (c > 127 && c < 2048) {\n utftext += String.fromCharCode(c >> 6 | 192);\n utftext += String.fromCharCode(c & 63 | 128);\n } else {\n utftext += String.fromCharCode(c >> 12 | 224);\n utftext += String.fromCharCode(c >> 6 & 63 | 128);\n utftext += String.fromCharCode(c & 63 | 128);\n }\n }\n return utftext;\n },\n // public method for url decoding\n decode: function (utftext) {\n var string = \"\";\n var i = 0;\n while (i < utftext.length) {\n var c = utftext.charCodeAt(i);\n if (c < 128) {\n string += String.fromCharCode(c);\n i++;\n } else if (c > 191 && c < 224) {\n string += String.fromCharCode((c & 31) << 6 | utftext.charCodeAt(i + 1) & 63);\n i += 2;\n } else {\n string += String.fromCharCode((c & 15) << 12 | (utftext.charCodeAt(i + 1) & 63) << 6 | utftext.charCodeAt(i + 2) & 63);\n i += 3;\n }\n }\n return string;\n }\n}; // Things we need to define to make converted pythn code work in js\n// environment of $rdf\n\nvar RDFSink_forSomeSym = \"http://www.w3.org/2000/10/swap/log#forSome\";\nvar RDFSink_forAllSym = \"http://www.w3.org/2000/10/swap/log#forAll\";\nvar Logic_NS = \"http://www.w3.org/2000/10/swap/log#\";\n\n// pyjs seems to reference runtime library which I didn't find\n\nvar pyjslib_Tuple = function (theList) {\n return theList;\n};\nvar pyjslib_List = function (theList) {\n return theList;\n};\nvar pyjslib_Dict = function (listOfPairs) {\n if (listOfPairs.length > 0) throw \"missing.js: oops nnonempty dict not imp\";\n return [];\n};\nvar pyjslib_len = function (s) {\n return s.length;\n};\nvar pyjslib_slice = function (str, i, j) {\n if (typeof str.slice == 'undefined') throw '@@ mising.js: No .slice function for ' + str + ' of type ' + typeof str;\n if (typeof j == 'undefined' || j == null) return str.slice(i);\n return str.slice(i, j); // @ exactly the same spec?\n};\nvar StopIteration = Error('dummy error stop iteration');\nvar pyjslib_Iterator = function (theList) {\n this.last = 0;\n this.li = theList;\n this.next = function () {\n if (this.last == this.li.length) throw StopIteration;\n return this.li[this.last++];\n };\n return this;\n};\nvar ord = function (str) {\n return str.charCodeAt(0);\n};\nvar string_find = function (str, s) {\n return str.indexOf(s);\n};\nvar assertFudge = function (condition, desc) {\n if (condition) return;\n if (desc) throw \"python Assertion failed: \" + desc;\n throw \"(python) Assertion failed.\";\n};\nvar stringFromCharCode = function (uesc) {\n return String.fromCharCode(uesc);\n};\nString.prototype.encode = function (encoding) {\n if (encoding != 'utf-8') throw \"UTF8_converter: can only do utf-8\";\n return Utf8.encode(this);\n};\nString.prototype.decode = function (encoding) {\n if (encoding != 'utf-8') throw \"UTF8_converter: can only do utf-8\";\n //return Utf8.decode(this);\n return this;\n};\nvar uripath_join = function (base, given) {\n return Uri.join(given, base); // sad but true\n};\nvar becauseSubexpression = null; // No reason needed\nvar diag_tracking = 0;\nvar diag_chatty_flag = 0;\nvar diag_progress = function (str) {/*$rdf.log.debug(str);*/};\n\n// why_BecauseOfData = function(doc, reason) { return doc };\n\nvar RDF_type_URI = \"http://www.w3.org/1999/02/22-rdf-syntax-ns#type\";\nvar RDF_nil_URI = \"http://www.w3.org/1999/02/22-rdf-syntax-ns#nil\";\nvar DAML_sameAs_URI = \"http://www.w3.org/2002/07/owl#sameAs\";\n\n/*\nfunction SyntaxError(details) {\n return new __SyntaxError(details);\n}\n*/\n\nfunction __SyntaxError(details) {\n this.details = details;\n}\n\n/*\n\n$Id: n3parser.js 14561 2008-02-23 06:37:26Z kennyluck $\n\nHAND EDITED FOR CONVERSION TO JAVASCRIPT\n\nThis module implements a Nptation3 parser, and the final\npart of a notation3 serializer.\n\nSee also:\n\nNotation 3\nhttp://www.w3.org/DesignIssues/Notation3\n\nClosed World Machine - and RDF Processor\nhttp://www.w3.org/2000/10/swap/cwm\n\nTo DO: See also \"@@\" in comments\n\n- Clean up interfaces\n______________________________________________\n\nModule originally by Dan Connolly, includeing notation3\nparser and RDF generator. TimBL added RDF stream model\nand N3 generation, replaced stream model with use\nof common store/formula API. Yosi Scharf developped\nthe module, including tests and test harness.\n\n*/\n\nvar ADDED_HASH = \"#\";\nvar LOG_implies_URI = \"http://www.w3.org/2000/10/swap/log#implies\";\nvar INTEGER_DATATYPE = \"http://www.w3.org/2001/XMLSchema#integer\";\nvar FLOAT_DATATYPE = \"http://www.w3.org/2001/XMLSchema#double\";\nvar DECIMAL_DATATYPE = \"http://www.w3.org/2001/XMLSchema#decimal\";\nvar DATE_DATATYPE = \"http://www.w3.org/2001/XMLSchema#date\";\nvar DATETIME_DATATYPE = \"http://www.w3.org/2001/XMLSchema#dateTime\";\nvar BOOLEAN_DATATYPE = \"http://www.w3.org/2001/XMLSchema#boolean\";\nvar option_noregen = 0;\nvar _notQNameChars = \"\\t\\r\\n !\\\"#$%&'()*.,+/;<=>?@[\\\\]^`{|}~\";\nvar _notNameChars = _notQNameChars + \":\";\nvar _rdfns = \"http://www.w3.org/1999/02/22-rdf-syntax-ns#\";\nvar N3CommentCharacter = \"#\";\nvar eol = new RegExp(\"^[ \\\\t]*(#[^\\\\n]*)?\\\\r?\\\\n\", 'g');\nvar eof = new RegExp(\"^[ \\\\t]*(#[^\\\\n]*)?$\", 'g');\nvar ws = new RegExp(\"^[ \\\\t]*\", 'g');\nvar signed_integer = new RegExp(\"^[-+]?[0-9]+\", 'g');\nvar number_syntax = new RegExp(\"^([-+]?[0-9]+)(\\\\.[0-9]+)?([eE][-+]?[0-9]+)?\", 'g');\nvar datetime_syntax = new RegExp('^[0-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9](T[0-9][0-9]:[0-9][0-9](:[0-9][0-9](\\\\.[0-9]*)?)?)?Z?');\n\n// Reused in tight loops to detect whitespace or comment after a dot\nvar wsOrHash = new RegExp(\"[\\\\s#]\");\nvar digitstring = new RegExp(\"^[0-9]+\", 'g');\nvar interesting = new RegExp(\"[\\\\\\\\\\\\r\\\\n\\\\\\\"]\", 'g');\nvar langcode = new RegExp(\"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*\", 'g');\n\n// Returns true when a dot at position i should terminate a name,\n// i.e., when the next character is whitespace, a comment start, or EOF\nfunction dotTerminatesName(str, i) {\n var next = str.charAt(i + 1);\n return next === '' || wsOrHash.test(next);\n}\nfunction createSinkParser(store, openFormula, thisDoc, baseURI, genPrefix, metaURI, flags, why) {\n return new SinkParser(store, openFormula, thisDoc, baseURI, genPrefix, metaURI, flags, why);\n}\nexport default createSinkParser;\nexport class SinkParser {\n constructor(store, openFormula, thisDoc, baseURI, genPrefix, metaURI, flags, why) {\n if (typeof openFormula == 'undefined') openFormula = null;\n if (typeof thisDoc == 'undefined') thisDoc = \"\";\n if (typeof baseURI == 'undefined') baseURI = null;\n if (typeof genPrefix == 'undefined') genPrefix = \"\";\n if (typeof metaURI == 'undefined') metaURI = null;\n if (typeof flags == 'undefined') flags = \"\";\n if (typeof why == 'undefined') why = null;\n /*\n note: namespace names should *not* end in #;\n the # will get added during qname processing */\n\n this._bindings = new pyjslib_Dict([]);\n this._flags = flags;\n if (thisDoc != \"\") {\n assertFudge(thisDoc.indexOf(\":\") >= 0, \"Document URI not absolute: \" + thisDoc);\n this._bindings[\"\"] = thisDoc + \"#\";\n }\n this._store = store;\n if (genPrefix) {\n store.setGenPrefix(genPrefix);\n }\n this._thisDoc = thisDoc;\n this.source = store.sym(thisDoc);\n this.lines = 0;\n this.statementCount = 0;\n this.hasNil = false;\n this.startOfLine = 0;\n this.previousLine = 0;\n this._genPrefix = genPrefix;\n this.keywords = new pyjslib_List([\"a\", \"this\", \"bind\", \"has\", \"is\", \"of\", \"true\", \"false\"]);\n this.keywordsSet = 0;\n this._anonymousNodes = new pyjslib_Dict([]);\n this._variables = new pyjslib_Dict([]);\n this._parentVariables = new pyjslib_Dict([]);\n this._reason = why;\n this._reason2 = null;\n if (diag_tracking) {\n this._reason2 = why_BecauseOfData(store.sym(thisDoc), this._reason);\n }\n if (baseURI) {\n this._baseURI = baseURI;\n } else {\n if (thisDoc) {\n this._baseURI = thisDoc;\n } else {\n this._baseURI = null;\n }\n }\n assertFudge(!this._baseURI || this._baseURI.indexOf(\":\") >= 0);\n if (!this._genPrefix) {\n if (this._thisDoc) {\n this._genPrefix = this._thisDoc + \"#_g\";\n } else {\n this._genPrefix = RDFSink_uniqueURI();\n }\n }\n if (openFormula == null) {\n if (this._thisDoc) {\n this._formula = store.formula(thisDoc + \"#_formula\");\n } else {\n this._formula = store.formula();\n }\n } else {\n this._formula = openFormula;\n }\n this._context = this._formula;\n this._parentContext = null;\n }\n here(i) {\n return this._genPrefix + \"_L\" + this.lines + \"C\" + (i - this.startOfLine + 1);\n }\n formula() {\n return this._formula;\n }\n loadStream(stream) {\n return this.loadBuf(stream.read());\n }\n loadBuf(buf) {\n /*\n Parses a buffer and returns its top level formula*/\n\n this.startDoc();\n this.feed(buf);\n return this.endDoc();\n }\n feed(octets) {\n /*\n Feed an octet stream tothe parser\n if BadSyntax is raised, the string\n passed in the exception object is the\n remainder after any statements have been parsed.\n So if there is more data to feed to the\n parser, it should be straightforward to recover.*/\n\n var str = octets.decode(\"utf-8\");\n var i = 0;\n while (i >= 0) {\n var j = this.skipSpace(str, i);\n if (j < 0) {\n return;\n }\n var i = this.directiveOrStatement(str, j);\n if (i < 0) {\n throw BadSyntax(this._thisDoc, this.lines, str, j, \"expected directive or statement\");\n }\n }\n }\n directiveOrStatement(str, h) {\n var i = this.skipSpace(str, h);\n if (i < 0) {\n return i;\n }\n var j = this.directive(str, i);\n if (j >= 0) {\n return this.checkDot(str, j);\n }\n var j = this.statement(str, i);\n if (j >= 0) {\n return this.checkDot(str, j);\n }\n return j;\n }\n tok(tok, str, i) {\n /*\n Check for keyword. Space must have been stripped on entry and\n we must not be at end of file.*/\n var whitespace = \"\\t\\n\\v\\f\\r \";\n if (str.slice(i, i + 1) == \"@\") {\n var i = i + 1;\n } else {\n if (ArrayIndexOf(this.keywords, tok) < 0) {\n return -1;\n }\n }\n var k = i + pyjslib_len(tok);\n if (str.slice(i, k) == tok && _notQNameChars.indexOf(str.charAt(k)) >= 0) {\n return k;\n } else {\n return -1;\n }\n }\n directive(str, i) {\n var j = this.skipSpace(str, i);\n if (j < 0) {\n return j;\n }\n var res = new pyjslib_List([]);\n var j = this.tok(\"bind\", str, i);\n if (j > 0) {\n throw BadSyntax(this._thisDoc, this.lines, str, i, \"keyword bind is obsolete: use @prefix\");\n }\n var j = this.tok(\"keywords\", str, i);\n if (j > 0) {\n var i = this.commaSeparatedList(str, j, res, false);\n if (i < 0) {\n throw BadSyntax(this._thisDoc, this.lines, str, i, \"'@keywords' needs comma separated list of words\");\n }\n this.setKeywords(pyjslib_slice(res, null, null));\n if (diag_chatty_flag > 80) {\n diag_progress(\"Keywords \", this.keywords);\n }\n return i;\n }\n var j = this.tok(\"forAll\", str, i);\n if (j > 0) {\n var i = this.commaSeparatedList(str, j, res, true);\n if (i < 0) {\n throw BadSyntax(this._thisDoc, this.lines, str, i, \"Bad variable list after @forAll\");\n }\n var __x = new pyjslib_Iterator(res);\n try {\n while (true) {\n var x = __x.next();\n if (ArrayIndexOf(this._variables, x) < 0 || ArrayIndexOf(this._parentVariables, x) >= 0) {\n this._variables[x] = this._context.newUniversal(x);\n }\n }\n } catch (e) {\n if (e != StopIteration) {\n throw e;\n }\n }\n return i;\n }\n var j = this.tok(\"forSome\", str, i);\n if (j > 0) {\n var i = this.commaSeparatedList(str, j, res, this.uri_ref2);\n if (i < 0) {\n throw BadSyntax(this._thisDoc, this.lines, str, i, \"Bad variable list after @forSome\");\n }\n var __x = new pyjslib_Iterator(res);\n try {\n while (true) {\n var x = __x.next();\n this._context.declareExistential(x);\n }\n } catch (e) {\n if (e != StopIteration) {\n throw e;\n }\n }\n return i;\n }\n var j = this.tok(\"prefix\", str, i);\n if (j >= 0) {\n var t = new pyjslib_List([]);\n var i = this.qname(str, j, t);\n if (i < 0) {\n throw BadSyntax(this._thisDoc, this.lines, str, j, \"expected qname after @prefix\");\n }\n var j = this.uri_ref2(str, i, t);\n if (j < 0) {\n throw BadSyntax(this._thisDoc, this.lines, str, i, \"expected <uriref> after @prefix _qname_\");\n }\n var ns = t[1].uri;\n if (this._baseURI) {\n var ns = uripath_join(this._baseURI, ns);\n } else {\n assertFudge(ns.indexOf(\":\") >= 0, \"With no base URI, cannot handle relative URI for NS\");\n }\n assertFudge(ns.indexOf(\":\") >= 0);\n this._bindings[t[0][0]] = ns;\n this.bind(t[0][0], hexify(ns));\n return j;\n }\n var j = this.tok(\"base\", str, i);\n if (j >= 0) {\n var t = new pyjslib_List([]);\n var i = this.uri_ref2(str, j, t);\n if (i < 0) {\n throw BadSyntax(this._thisDoc, this.lines, str, j, \"expected <uri> after @base \");\n }\n var ns = t[0].uri;\n if (this._baseURI) {\n var ns = uripath_join(this._baseURI, ns);\n } else {\n throw BadSyntax(this._thisDoc, this.lines, str, j, \"With no previous base URI, cannot use relative URI in @base <\" + ns + \">\");\n }\n assertFudge(ns.indexOf(\":\") >= 0);\n this._baseURI = ns;\n return i;\n }\n return -1;\n }\n bind(qn, uri) {\n if (qn == \"\") {} else {\n this._store.setPrefixForURI(qn, uri);\n }\n }\n setKeywords(k) {\n /*\n Takes a list of strings*/\n\n if (k == null) {\n this.keywordsSet = 0;\n } else {\n this.keywords = k;\n this.keywordsSet = 1;\n }\n }\n startDoc() {}\n /* Signal end of document and stop parsing. returns formula */\n endDoc() {\n if (this.hasNil && this._store.rdfFactory.supports[\"COLLECTIONS\"]) {\n convertFirstRestNil(this._store, this.source);\n }\n return this._formula;\n }\n makeStatement(quad) {\n quad[0].add(quad[2], quad[1], quad[3], this.source);\n if (quad[2].uri && quad[2].uri === RDF_nil_URI || quad[3].uri && quad[3].uri === RDF_nil_URI) {\n this.hasNil = true;\n }\n this.statementCount += 1;\n }\n statement(str, i) {\n var r = new pyjslib_List([]);\n var i = this.object(str, i, r);\n if (i < 0) {\n return i;\n }\n var j = this.property_list(str, i, r[0]);\n if (j < 0) {\n throw BadSyntax(this._thisDoc, this.lines, str, i, \"expected propertylist\");\n }\n return j;\n }\n subject(str, i, res) {\n return this.item(str, i, res);\n }\n verb(str, i, res) {\n /*\n has _prop_\n is _prop_ of\n a\n =\n _prop_\n >- prop ->\n <- prop -<\n _operator_*/\n\n var j = this.skipSpace(str, i);\n if (j < 0) {\n return j;\n }\n var r = new pyjslib_List([]);\n var j = this.tok(\"has\", str, i);\n if (j >= 0) {\n var i = this.prop(str, j, r);\n if (i < 0) {\n throw BadSyntax(this._thisDoc, this.lines, str, j, \"expected property after 'has'\");\n }\n res.push(new pyjslib_Tuple([\"->\", r[0]]));\n return i;\n }\n var j = this.tok(\"is\", str, i);\n if (j >= 0) {\n var i = this.prop(str, j, r);\n if (i < 0) {\n throw BadSyntax(this._thisDoc, this.lines, str, j, \"expected <property> after 'is'\");\n }\n var j = this.skipSpace(str, i);\n if (j < 0) {\n throw BadSyntax(this._thisDoc, this.lines, str, i, \"End of file found, expected property after 'is'\");\n return j;\n }\n var i = j;\n var j = this.tok(\"of\", str, i);\n if (j < 0) {\n throw BadSyntax(this._thisDoc, this.lines, str, i, \"expected 'of' after 'is' <prop>\");\n }\n res.push(new pyjslib_Tuple([\"<-\", r[0]]));\n return j;\n }\n var j = this.tok(\"a\", str, i);\n if (j >= 0) {\n res.push(new pyjslib_Tuple([\"->\", this._store.sym(RDF_type_URI)]));\n return j;\n }\n if (str.slice(i, i + 2) == \"<=\") {\n res.push(new pyjslib_Tuple([\"<-\", this._store.sym(Logic_NS + \"implies\")]));\n return i + 2;\n }\n if (str.slice(i, i + 1) == \"=\") {\n if (str.slice(i + 1, i + 2) == \">\") {\n res.push(new pyjslib_Tuple([\"->\", this._store.sym(Logic_NS + \"implies\")]));\n return i + 2;\n }\n res.push(new pyjslib_Tuple([\"->\", this._store.sym(DAML_sameAs_URI)]));\n return i + 1;\n }\n if (str.slice(i, i + 2) == \":=\") {\n res.push(new pyjslib_Tuple([\"->\", Logic_NS + \"becomes\"]));\n return i + 2;\n }\n var j = this.prop(str, i, r);\n if (j >= 0) {\n res.push(new pyjslib_Tuple([\"->\", r[0]]));\n return j;\n }\n if (str.slice(i, i + 2) == \">-\" || str.slice(i, i + 2) == \"<-\") {\n throw BadSyntax(this._thisDoc, this.lines, str, j, \">- ... -> syntax is obsolete.\");\n }\n return -1;\n }\n prop(str, i, res) {\n return this.item(str, i, res);\n }\n item(str, i, res) {\n return this.path(str, i, res);\n }\n blankNode(uri) {\n return this._context.bnode(uri, this._reason2);\n }\n path(str, i, res) {\n /*\n Parse the path production.\n */\n\n var j = this.nodeOrLiteral(str, i, res);\n if (j < 0) {\n return j;\n }\n while (\"!^.\".indexOf(str.slice(j, j + 1)) >= 0) {\n var ch = str.slice(j, j + 1);\n if (ch == \".\") {\n if (dotTerminatesName(str, j)) {\n break;\n }\n }\n var subj = res.pop();\n var obj = this.blankNode(this.here(j));\n var j = this.node(str, j + 1, res);\n if (j < 0) {\n throw BadSyntax(this._thisDoc, this.lines, str, j, \"EOF found in middle of path syntax\");\n }\n var pred = res.pop();\n if (ch == \"^\") {\n this.makeStatement(new pyjslib_Tuple([this._context, pred, obj, subj]));\n } else {\n this.makeStatement(new pyjslib_Tuple([this._context, pred, subj, obj]));\n }\n res.push(obj);\n }\n return j;\n }\n anonymousNode(ln) {\n /*\n Remember or generate a term for one of these _: anonymous nodes*/\n\n var term = this._anonymousNodes[ln];\n if (term) {\n return term;\n }\n var term = this._store.bnode(ln);\n // var term = this._store.bnode(this._context, this._reason2); eh?\n this._anonymousNodes[ln] = term;\n return term;\n }\n node(str, i, res, subjectAlready) {\n if (typeof subjectAlready == 'undefined') subjectAlready = null;\n /*\n Parse the <node> production.\n Space is now skipped once at the beginning\n instead of in multipe calls to self.skipSpace().\n */\n\n var subj = subjectAlready;\n var j = this.skipSpace(str, i);\n if (j < 0) {\n return j;\n }\n var i = j;\n var ch = str.slice(i, i + 1);\n if (ch == \"[\") {\n var bnodeID = this.here(i);\n var j = this.skipSpace(str, i + 1);\n if (j < 0) {\n throw BadSyntax(this._thisDoc, this.lines, str, i, \"EOF after '['\");\n }\n if (str.slice(j, j + 1) == \"=\") {\n var i = j + 1;\n var objs = new pyjslib_List([]);\n var j = this.objectList(str, i, objs);\n if (j >= 0) {\n var subj = objs[0];\n if (pyjslib_len(objs) > 1) {\n var __obj = new pyjslib_Iterator(objs);\n try {\n while (true) {\n var obj = __obj.next();\n this.makeStatement(new pyjslib_Tuple([this._context, this._store.sym(DAML_sameAs_URI), subj, obj]));\n }\n } catch (e) {\n if (e != StopIteration) {\n throw e;\n }\n }\n }\n var j = this.skipSpace(str, j);\n if (j < 0) {\n throw BadSyntax(this._thisDoc, this.lines, str, i, \"EOF when objectList expected after [ = \");\n }\n if (str.slice(j, j + 1) == \";\") {\n var j = j + 1;\n }\n } else {\n throw BadSyntax(this._thisDoc, this.lines, str, i, \"objectList expected after [= \");\n }\n }\n if (subj == null) {\n var subj = this.blankNode(bnodeID);\n }\n var i = this.property_list(str, j, subj);\n if (i < 0) {\n throw BadSyntax(this._thisDoc, this.lines, str, j, \"property_list expected\");\n }\n var j = this.skipSpace(str, i);\n if (j < 0) {\n throw BadSyntax(this._thisDoc, this.lines, str, i, \"EOF when ']' expected after [ <propertyList>\");\n }\n if (str.slice(j, j + 1) == \".\") {\n // If a dot is found after a blank node, treat it as a statement terminator.\n // Do NOT consume the '.' here: statement terminators are handled centrally by\n // checkDot() (called by directiveOrStatement after statement()). Consuming the dot\n // locally would bypass that unified logic and could cause inconsistencies.\n // We do consume ']' below because it is a structural closer of the blank node,\n // not a statement terminator.\n res.push(subj);\n return j; // leave '.' for checkDot()\n }\n if (str.slice(j, j + 1) != \"]\") {\n throw BadSyntax(this._thisDoc, this.lines, str, j, \"']' expected\");\n }\n res.push(subj);\n return j + 1;\n }\n if (ch == \"{\") {\n var ch2 = str.slice(i + 1, i + 2);\n if (ch2 == \"$\") {\n i += 1;\n var j = i + 1;\n var mylist = new pyjslib_List([]);\n var first_run = true;\n while (1) {\n var i = this.skipSpace(str, j);\n if (i < 0) {\n throw BadSyntax(this._thisDoc, this.lines, str, i, \"needed '$}', found end.\");\n }\n if (str.slice(i, i + 2) == \"$}\") {\n var j = i + 2;\n break;\n }\n if (!first_run) {\n if (str.slice(i, i + 1) == \",\") {\n i += 1;\n } else {\n throw BadSyntax(this._thisDoc, this.lines, str, i, \"expected: ','\");\n }\n } else {\n var first_run = false;\n }\n var item = new pyjslib_List([]);\n var j = this.item(str, i, item);\n if (j < 0) {\n throw BadSyntax(this._thisDoc, this.lines, str, i, \"expected item in set or '$}'\");\n }\n mylist.push(item[0]);\n }\n res.push(this._store.newSet(mylist, this._context));\n return j;\n } else {\n var j = i + 1;\n var oldParentContext = this._parentContext;\n this._parentContext = this._context;\n var parentAnonymousNodes = this._anonymousNodes;\n var grandParentVariables = this._parentVariables;\n this._parentVariables = this._variables;\n this._anonymousNodes = new pyjslib_Dict([]);\n this._variables = this._variables.slice();\n var reason2 = this._reason2;\n this._reason2 = becauseSubexpression;\n if (subj == null) {\n var subj = this._store.formula();\n }\n this._context = subj;\n while (1) {\n var i = this.skipSpace(str, j);\n if (i < 0) {\n throw BadSyntax(this._thisDoc, this.lines, str, i, \"needed '}', found end.\");\n }\n if (str.slice(i, i + 1) == \"}\") {\n var j = i + 1;\n break;\n }\n var j = this.directiveOrStatement(str, i);\n if (j < 0) {\n throw BadSyntax(this._thisDoc, this.lines, str, i, \"expected statement or '}'\");\n }\n }\n this._anonymousNodes = parentAnonymousNodes;\n this._variables = this._parentVariables;\n this._parentVariables = grandParentVariables;\n this._context = this._parentContext;\n this._reason2 = reason2;\n this._parentContext = oldParentContext;\n res.push(subj.close());\n return j;\n }\n }\n if (ch == \"(\") {\n var thing_type = this._store.list;\n var ch2 = str.slice(i + 1, i + 2);\n if (ch2 == \"$\") {\n var thing_type = this._store.newSet;\n i += 1;\n }\n var j = i + 1;\n var mylist = new pyjslib_List([]);\n while (1) {\n var i = this.skipSpace(str, j);\n if (i < 0) {\n throw BadSyntax(this._thisDoc, this.lines, str, i, \"needed ')', found end.\");\n }\n if (str.slice(i, i + 1) == \")\") {\n var j = i + 1;\n break;\n }\n var item = new pyjslib_List([]);\n var j = this.item(str, i, item);\n if (j < 0) {\n throw BadSyntax(this._thisDoc, this.lines, str, i, \"expected item in list or ')'\");\n }\n mylist.push(item[0]);\n }\n res.push(thing_type(mylist, this._context));\n return j;\n }\n var j = this.tok(\"this\", str, i);\n if (j >= 0) {\n throw BadSyntax(this._thisDoc, this.lines, str, i, \"Keyword 'this' was ancient N3. Now use @forSome and @forAll keywords.\");\n res.push(this._context);\n return j;\n }\n var j = this.tok(\"true\", str, i);\n if (j >= 0) {\n res.push(true);\n return j;\n }\n var j = this.tok(\"false\", str, i);\n if (j >= 0) {\n res.push(false);\n return j;\n }\n if (subj == null) {\n var j = this.uri_ref2(str, i, res);\n if (j >= 0) {\n return j;\n }\n }\n return -1;\n }\n property_list(str, i, subj) {\n /*\n Parse property list\n Leaves the terminating punctuation in the buffer\n */\n\n while (1) {\n var j = this.skipSpace(str, i);\n if (j < 0) {\n throw BadSyntax(this._thisDoc, this.lines, str, i, \"EOF found when expected verb in property list\");\n return j;\n }\n if (str.slice(j, j + 2) == \":-\") {\n var i = j + 2;\n var res = new pyjslib_List([]);\n var j = this.node(str, i, res, subj);\n if (j < 0) {\n throw BadSyntax(this._thisDoc, this.lines, str, i, \"bad {} or () or [] node after :- \");\n }\n var i = j;\n continue;\n }\n var i = j;\n var v = new pyjslib_List([]);\n var j = this.verb(str, i, v);\n if (j <= 0) {\n return i;\n }\n var objs = new pyjslib_List([]);\n var i = this.objectList(str, j, objs);\n if (i < 0) {\n throw BadSyntax(this._thisDoc, this.lines, str, j, \"objectList expected\");\n }\n var __obj = new pyjslib_Iterator(objs);\n try {\n while (true) {\n var obj = __obj.next();\n var pairFudge = v[0];\n var dir = pairFudge[0];\n var sym = pairFudge[1];\n if (dir == \"->\") {\n this.makeStatement(new pyjslib_Tuple([this._context, sym, subj, obj]));\n } else {\n this.makeStatement(new pyjslib_Tuple([this._context, sym, obj, subj]));\n }\n }\n } catch (e) {\n if (e != StopIteration) {\n throw e;\n }\n }\n var j = this.skipSpace(str, i);\n if (j < 0) {\n throw BadSyntax(this._thisDoc, this.lines, str, j, \"EOF found in list of objects\");\n return j;\n }\n if (str.slice(i, i + 1) != \";\") {\n return i;\n }\n var i = i + 1;\n }\n }\n commaSeparatedList(str, j, res, ofUris) {\n /*\n return value: -1 bad syntax; >1 new position in str\n res has things found appended\n Used to use a final value of the function to be called, e.g. this.bareWord\n but passing the function didn't work fo js converion pyjs\n */\n\n var i = this.skipSpace(str, j);\n if (i < 0) {\n throw BadSyntax(this._thisDoc, this.lines, str, i, \"EOF found expecting comma sep list\");\n return i;\n }\n if (str.charAt(i) == \".\") {\n return j;\n }\n if (ofUris) {\n var i = this.uri_ref2(str, i, res);\n } else {\n var i = this.bareWord(str, i, res);\n }\n if (i < 0) {\n return -1;\n }\n while (1) {\n var j = this.skipSpace(str, i);\n if (j < 0) {\n return j;\n }\n var ch = str.slice(j, j + 1);\n if (ch != \",\") {\n if (ch != \".\") {\n return -1;\n }\n return j;\n }\n if (ofUris) {\n var i = this.uri_ref2(str, j + 1, res);\n } else {\n var i = this.bareWord(str, j + 1, res);\n }\n if (i < 0) {\n throw BadSyntax(this._thisDoc, this.lines, str, i, \"bad list content\");\n return i;\n }\n }\n }\n objectList(str, i, res) {\n var i = this.object(str, i, res);\n if (i < 0) {\n return -1;\n }\n while (1) {\n var j = this.skipSpace(str, i);\n if (j < 0) {\n throw BadSyntax(this._thisDoc, this.lines, str, j, \"EOF found after object\");\n return j;\n }\n if (str.slice(j, j + 1) != \",\") {\n return j;\n }\n var i = this.object(str, j + 1, res);\n if (i < 0) {\n return i;\n }\n }\n }\n checkDot(str, i) {\n var j = this.skipSpace(str, i);\n if (j < 0) {\n return j;\n }\n if (str.slice(j, j + 1) == \".\") {\n return j + 1;\n }\n if (str.slice(j, j + 1) == \"}\") {\n return j;\n }\n if (str.slice(j, j + 1) == \"]\") {\n return j;\n }\n throw BadSyntax(this._thisDoc, this.lines, str, j, \"expected '.' or '}' or ']' at end of statement\");\n return i;\n }\n uri_ref2(str, i, res) {\n /*\n Generate uri from n3 representation.\n Note that the RDF convention of directly concatenating\n NS and local name is now used though I prefer inserting a '#'\n to make the namesapces look more like what XML folks expect.\n */\n\n var qn = new pyjslib_List([]);\n var j = this.qname(str, i, qn);\n if (j >= 0) {\n var pairFudge = qn[0];\n var pfx = pairFudge[0];\n var ln = pairFudge[1];\n if (pfx == null) {\n assertFudge(0, \"not used?\");\n var ns = this._baseURI + ADDED_HASH;\n } else {\n var ns = this._bindings[pfx];\n if (!ns) {\n if (pfx == \"_\") {\n res.push(this.anonymousNode(ln));\n return j;\n }\n throw BadSyntax(this._thisDoc, this.lines, str, i, \"Prefix \" + pfx + \" not bound.\");\n }\n }\n var symb = this._store.sym(ns + ln);\n if (ArrayIndexOf(this._variables, symb) >= 0) {\n res.push(this._variables[symb]);\n } else {\n res.push(symb);\n }\n return j;\n }\n var i = this.skipSpace(str, i);\n if (i < 0) {\n return -1;\n }\n if (str.charAt(i) == \"?\") {\n var v = new pyjslib_List([]);\n var j = this.variable(str, i, v);\n if (j > 0) {\n res.push(v[0]);\n return j;\n }\n return -1;\n } else if (str.charAt(i) == \"<\") {\n var i = i + 1;\n var st = i;\n while (i < pyjslib_len(str)) {\n if (str.charAt(i) == \">\") {\n var uref = str.slice(st, i);\n if (this._baseURI) {\n var uref = uripath_join(this._baseURI, uref);\n } else {\n assertFudge(uref.indexOf(\":\") >= 0, \"With no base URI, cannot deal with relative URIs\");\n }\n if (str.slice(i - 1, i) == \"#\" && !(pyjslib_slice(uref, -1, null) == \"#\")) {\n var uref = uref + \"#\";\n }\n var symb = this._store.sym(uref);\n if (ArrayIndexOf(this._variables, symb) >= 0) {\n res.push(this._variables[symb]);\n } else {\n res.push(symb);\n }\n return i + 1;\n }\n var i = i + 1;\n }\n throw BadSyntax(this._thisDoc, this.lines, str, j, \"unterminated URI reference\");\n } else if (this.keywordsSet) {\n var v = new pyjslib_List([]);\n var j = this.bareWord(str, i, v);\n if (j < 0) {\n return -1;\n }\n if (ArrayIndexOf(this.keywords, v[0]) >= 0) {\n throw BadSyntax(this._thisDoc, this.lines, str, i, \"Keyword \\\"\" + v[0] + \"\\\" not allowed here.\");\n }\n res.push(this._store.sym(this._bindings[\"\"] + v[0]));\n return j;\n } else {\n return -1;\n }\n }\n skipSpace(str, i) {\n /*\n Skip white space, newlines and comments.\n return -1 if EOF, else position of first non-ws character*/\n\n var whitespace = ' \\n\\r\\t\\f\\x0b\\xa0\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u200b\\u2028\\u2029\\u3000';\n for (var j = i ? i : 0; j < str.length; j++) {\n var ch = str.charAt(j);\n // console.log(\" skipspace j= \"+j + \" i= \" + i + \" n= \" + str.length);\n // console.log(\" skipspace ch <\" + ch + \">\");\n if (whitespace.indexOf(ch) < 0) {\n //not ws\n // console.log(\" skipspace 2 ch <\" + ch + \">\");\n if (str.charAt(j) === '#') {\n for (;; j++) {\n // console.log(\" skipspace2 j= \"+j + \" i= \" + i + \" n= \" + str.length);\n if (j === str.length) {\n return -1; // EOF\n }\n if (str.charAt(j) === '\\n') {\n this.lines = this.lines + 1;\n break;\n }\n }\n ;\n } else {\n // Not hash - something interesting\n // console.log(\" skipspace 3 ch <\" + ch + \">\");\n return j;\n }\n } else {\n // Whitespace\n // console.log(\" skipspace 5 ch <\" + ch + \">\");\n if (str.charAt(j) === '\\n') {\n this.lines = this.lines + 1;\n }\n }\n } // next j\n return -1; // EOF\n }\n variable(str, i, res) {\n /*\n ?abc -> variable(:abc)\n */\n\n var j = this.skipSpace(str, i);\n if (j < 0) {\n return -1;\n }\n if (str.slice(j, j + 1) != \"?\") {\n return -1;\n }\n var j = j + 1;\n var i = j;\n if (\"0123456789-\".indexOf(str.charAt(j)) >= 0) {\n throw BadSyntax(this._thisDoc, this.lines, str, j, \"Varible name can't start with '\" + str.charAt(j) + \"s'\");\n return -1;\n }\n while (i < pyjslib_len(str) && _notNameChars.indexOf(str.charAt(i)) < 0) {\n var i = i + 1;\n }\n if (this._parentContext == null) {\n throw BadSyntax(this._thisDoc, this.lines, str, j, \"Can't use ?xxx syntax for variable in outermost level: \" + str.slice(j - 1, i));\n }\n res.push(this._store.variable(str.slice(j, i)));\n return i;\n }\n bareWord(str, i, res) {\n /*\n abc -> :abc\n */\n\n var j = this.skipSpace(str, i);\n if (j < 0) {\n return -1;\n }\n var ch = str.charAt(j);\n if (\"0123456789-\".indexOf(ch) >= 0) {\n return -1;\n }\n if (_notNameChars.indexOf(ch) >= 0) {\n return -1;\n }\n var i = j;\n while (i < pyjslib_len(str)) {\n var c = str.charAt(i);\n if (c === '.') {\n if (dotTerminatesName(str, i)) {\n break; // treat as statement terminator, not part of name\n }\n // else: accept '.' as part of name\n } else if (_notNameChars.indexOf(c) >= 0) {\n // Other invalid characters terminate the name\n break;\n }\n var i = i + 1;\n }\n res.push(str.slice(j, i));\n return i;\n }\n qname(str, i, res) {\n /*\n xyz:def -> ('xyz', 'def')\n If not in keywords and keywordsSet: def -> ('', 'def')\n :def -> ('', 'def')\n */\n\n var i = this.skipSpace(str, i);\n if (i < 0) {\n return -1;\n }\n var c = str.charAt(i);\n if (\"0123456789-+\".indexOf(c) >= 0) {\n return -1;\n }\n if (_notNameChars.indexOf(c) < 0) {\n var ln = c;\n var i = i + 1;\n while (i < pyjslib_len(str)) {\n var c = str.charAt(i);\n if (c === '.') {\n if (dotTerminatesName(str, i)) {\n break; // dot ends the name here\n }\n } else if (_notNameChars.indexOf(c) >= 0) {\n break;\n }\n var ln = ln + c;\n var i = i + 1;\n }\n } else {\n var ln = \"\";\n }\n if (i < pyjslib_len(str) && str.charAt(i) == \":\") {\n var pfx = ln;\n var i = i + 1;\n var ln = \"\";\n while (i < pyjslib_len(str)) {\n var c = str.charAt(i);\n if (c === '.') {\n if (dotTerminatesName(str, i)) {\n break; // dot ends the name here\n }\n } else if (_notNameChars.indexOf(c) >= 0) {\n break;\n }\n var ln = ln + c;\n var i = i + 1;\n }\n res.push(new pyjslib_Tuple([pfx, ln]));\n return i;\n } else {\n if (ln && this.keywordsSet && ArrayIndexOf(this.keywords, ln) < 0) {\n res.push(new pyjslib_Tuple([\"\", ln]));\n return i;\n }\n return -1;\n }\n }\n object(str, i, res) {\n var j = this.subject(str, i, res);\n if (j >= 0) {\n return j;\n } else {\n var j = this.skipSpace(str, i);\n if (j < 0) {\n return -1;\n } else {\n var i = j;\n }\n var delim = null;\n let ch = str.charAt(i);\n if (ch == \"\\\"\" || ch == \"'\") {\n if (str.slice(i, i + 3 == ch + ch)) {\n delim = ch + ch + ch;\n } else {\n delim = ch;\n }\n var i = i + pyjslib_len(delim);\n var pairFudge = this.strconst(str, i, delim);\n var j = pairFudge[0];\n var s = pairFudge[1];\n res.push(this._store.literal(s));\n diag_progress(\"New string const \", s, j);\n return j;\n } else {\n return -1;\n }\n }\n }\n nodeOrLiteral(str, i, res) {\n var j = this.node(str, i, res);\n if (j >= 0) {\n return j;\n } else {\n var j = this.skipSpace(str, i);\n if (j < 0) {\n return -1;\n } else {\n var i = j;\n }\n var ch = str.charAt(i);\n if (\"-+0987654321\".indexOf(ch) >= 0) {\n datetime_syntax.lastIndex = 0;\n var m = datetime_syntax.exec(str.slice(i));\n if (m != null) {\n // j = ( i + datetime_syntax.lastIndex ) ;\n var val = m[0];\n j = i + val.length;\n if (val.indexOf(\"T\") >= 0) {\n res.push(this._store.literal(val, this._store.sym(DATETIME_DATATYPE)));\n } else {\n res.push(this._store.literal(val, this._store.sym(DATE_DATATYPE)));\n }\n } else {\n number_syntax.lastIndex = 0;\n var m = number_syntax.exec(str.slice(i));\n if (m == null) {\n throw BadSyntax(this._thisDoc, this.lines, str, i, \"Bad number or date syntax\");\n }\n j = i + number_syntax.lastIndex;\n var val = str.slice(i, j);\n if (val.indexOf(\"e\") >= 0) {\n res.push(this._store.literal(parseFloat(val), this._store.sym(FLOAT_DATATYPE)));\n } else if (str.slice(i, j).indexOf(\".\") >= 0) {\n res.push(this._store.literal(parseFloat(val), this._store.sym(DECIMAL_DATATYPE)));\n } else {\n res.push(this._store.literal(parseInt(val), this._store.sym(INTEGER_DATATYPE)));\n }\n }\n ;\n return j; // Where we have got up to\n }\n if (str.charAt(i) == \"\\\"\") {\n if (str.slice(i, i + 3) == \"\\\"\\\"\\\"\") {\n var delim = \"\\\"\\\"\\\"\";\n } else {\n var delim = \"\\\"\";\n }\n var i = i + pyjslib_len(delim);\n var dt = null;\n var pairFudge = this.strconst(str, i, delim);\n var j = pairFudge[0];\n var s = pairFudge[1];\n var lang = null;\n if (str.slice(j, j + 1) == \"@\") {\n langcode.lastIndex = 0;\n var m = langcode.exec(str.slice(j + 1));\n if (m == null) {\n throw BadSyntax(this._thisDoc, startline, str, i, \"Bad language code syntax on string literal, after @\");\n }\n var i = langcode.lastIndex + j + 1;\n var lang = str.slice(j + 1, i);\n var j = i;\n }\n if (str.slice(j, j + 2) == \"^^\") {\n var res2 = new pyjslib_List([]);\n var j = this.uri_ref2(str, j + 2, res2);\n var dt = res2[0];\n }\n res.push(this._store.literal(s, lang || dt));\n return j;\n } else {\n return -1;\n }\n }\n }\n strconst(str, i, delim) {\n /*\n parse an N3 string constant delimited by delim.\n return index, val\n */\n\n var j = i;\n var ustr = \"\";\n var startline = this.lines;\n while (j < pyjslib_len(str)) {\n var i = j + pyjslib_len(delim);\n if (str.slice(j, i) == delim) {\n return new pyjslib_Tuple([i, ustr]);\n }\n if (str.charAt(j) == \"\\\"\") {\n var ustr = ustr + \"\\\"\";\n var j = j + 1;\n continue;\n }\n interesting.lastIndex = 0;\n var m = interesting.exec(str.slice(j));\n if (!m) {\n throw BadSyntax(this._thisDoc, startline, str, j, \"Closing quote missing in string at ^ in \" + str.slice(j - 20, j) + \"^\" + str.slice(j, j + 20));\n }\n var i = j + interesting.lastIndex - 1;\n var ustr = ustr + str.slice(j, i);\n var ch = str.charAt(i);\n if (ch == \"\\\"\") {\n var j = i;\n continue;\n } else if (ch == \"\\r\") {\n var j = i + 1;\n continue;\n } else if (ch == \"\\n\") {\n if (delim == \"\\\"\") {\n throw BadSyntax(this._thisDoc, startline, str, i, \"newline found in string literal\");\n }\n this.lines = this.lines + 1;\n var ustr = ustr + ch;\n var j = i + 1;\n this.previousLine = this.startOfLine;\n this.startOfLine = j;\n } else if (ch == \"\\\\\") {\n var j = i + 1;\n var ch = str.slice(j, j + 1);\n if (!ch) {\n throw BadSyntax(this._thisDoc, startline, str, i, \"unterminated string literal (2)\");\n }\n var k = string_find(\"abfrtvn\\\\\\\"\", ch);\n if (k >= 0) {\n var uch = \"\\a\\b\\f\\r\\t\\v\\n\\\\\\\"\".charAt(k);\n var ustr = ustr + uch;\n var j = j + 1;\n } else if (ch == \"u\") {\n var pairFudge = this.uEscape(str, j + 1, startline);\n var j = pairFudge[0];\n var ch = pairFudge[1];\n var ustr = ustr + ch;\n } else if (ch == \"U\") {\n var pairFudge = this.UEscape(str, j + 1, startline);\n var j = pairFudge[0];\n var ch = pairFudge[1];\n var ustr = ustr + ch;\n } else {\n throw BadSyntax(this._thisDoc, this.lines, str, i, \"bad escape\");\n }\n }\n }\n throw BadSyntax(this._thisDoc, this.lines, str, i, \"unterminated string literal\");\n }\n uEscape(str, i, startline) {\n var j = i;\n var count = 0;\n var value = 0;\n while (count < 4) {\n var chFudge = str.slice(j, j + 1);\n var ch = chFudge.toLowerCase();\n var j = j + 1;\n if (ch == \"\") {\n throw BadSyntax(this._thisDoc, startline, str, i, \"unterminated string literal(3)\");\n }\n var k = string_find(\"0123456789abcdef\", ch);\n if (k < 0) {\n throw BadSyntax(this._thisDoc, startline, str, i, \"bad string literal hex escape\");\n }\n var value = value * 16 + k;\n var count = count + 1;\n }\n var uch = String.fromCharCode(value);\n return new pyjslib_Tuple([j, uch]);\n }\n UEscape(str, i, startline) {\n var j = i;\n var count = 0;\n var value = \"\\\\U\";\n while (count < 8) {\n var chFudge = str.slice(j, j + 1);\n var ch = chFudge.toLowerCase();\n var j = j + 1;\n if (ch == \"\") {\n throw BadSyntax(this._thisDoc, startline, str, i, \"unterminated string literal(3)\");\n }\n var k = string_find(\"0123456789abcdef\", ch);\n if (k < 0) {\n throw BadSyntax(this._thisDoc, startline, str, i, \"bad string literal hex escape\");\n }\n var value = value + ch;\n var count = count + 1;\n }\n var uch = stringFromCharCode(\"0x\" + pyjslib_slice(value, 2, 10) - 0);\n return new pyjslib_Tuple([j, uch]);\n }\n}\nfunction OLD_BadSyntax(uri, lines, str, i, why) {\n return new __OLD_BadSyntax(uri, lines, str, i, why);\n}\nfunction __OLD_BadSyntax(uri, lines, str, i, why) {\n this._str = str.encode(\"utf-8\");\n this._str = str;\n this._i = i;\n this._why = why;\n this.lines = lines;\n this._uri = uri;\n}\n__OLD_BadSyntax.prototype.toString = function () {\n var str = this._str;\n var i = this._i;\n var st = 0;\n if (i > 60) {\n var pre = \"...\";\n var st = i - 60;\n } else {\n var pre = \"\";\n }\n if (pyjslib_len(str) - i > 60) {\n var post = \"...\";\n } else {\n var post = \"\";\n }\n return \"Line %i of <%s>: Bad syntax (%s) at ^ in:\\n\\\"%s%s^%s%s\\\"\" % new pyjslib_Tuple([this.lines + 1, this._uri, this._why, pre, str.slice(st, i), str.slice(i, i + 60), post]);\n};\nfunction BadSyntax(uri, lines, str, i, why) {\n let lineNo = lines + 1;\n let msg = \"Line \" + lineNo + \" of <\" + uri + \">: Bad syntax: \" + why + \"\\nat: \\\"\" + str.slice(i, i + 30) + \"\\\"\";\n let e = new SyntaxError(msg, uri, lineNo);\n e.lineNo = lineNo;\n e.characterInFile = i;\n e.syntaxProblem = why;\n return e;\n}\nfunction stripCR(str) {\n var res = \"\";\n var __ch = new pyjslib_Iterator(str);\n try {\n while (true) {\n var ch = __ch.next();\n if (ch != \"\\r\") {\n var res = res + ch;\n }\n }\n } catch (e) {\n if (e != StopIteration) {\n throw e;\n }\n }\n return res;\n}\nfunction dummyWrite(x) {}","import Collection from '../collection';\nimport CanonicalDataFactory from './canonical-data-factory';\nimport { CollectionTermType } from '../types';\nimport { Feature } from './factory-types';\nimport { isCollection, isVariable } from '../utils/terms';\nimport Variable from '../variable';\n/**\n * Data factory which also supports Collections\n *\n * Necessary for preventing circular dependencies.\n */\nconst ExtendedTermFactory = {\n ...CanonicalDataFactory,\n supports: {\n [Feature.collections]: true,\n [Feature.defaultGraphType]: false,\n [Feature.equalsMethod]: true,\n [Feature.identity]: false,\n [Feature.id]: true,\n [Feature.reversibleId]: false,\n [Feature.variableType]: true\n },\n /**\n * Creates a new collection\n * @param elements - The initial element\n */\n collection(elements) {\n return new Collection(elements);\n },\n id(term) {\n if (isCollection(term)) {\n return Collection.toNT(term);\n }\n if (isVariable(term)) {\n return Variable.toString(term);\n }\n return CanonicalDataFactory.id(term);\n },\n termToNQ(term) {\n if (term.termType === CollectionTermType) {\n return Collection.toNT(term);\n }\n return CanonicalDataFactory.termToNQ(term);\n }\n};\nexport default ExtendedTermFactory;","import { arrayToStatements } from './utils';\n\n/**\n * Parses json-ld formatted JS objects to a rdf Term.\n * @param kb - The DataFactory to use.\n * @param obj - The json-ld object to process.\n * @return {Literal|NamedNode|BlankNode|Collection}\n */\nexport function jsonldObjectToTerm(kb, obj) {\n if (typeof obj === 'string') {\n return kb.rdfFactory.literal(obj);\n }\n if (Object.prototype.hasOwnProperty.call(obj, '@list')) {\n if (kb.rdfFactory.supports[\"COLLECTIONS\"] === true) {\n return listToCollection(kb, obj['@list']);\n }\n return listToStatements(kb, obj);\n }\n if (Object.prototype.hasOwnProperty.call(obj, '@id')) {\n return nodeType(kb, obj);\n }\n if (Object.prototype.hasOwnProperty.call(obj, '@language')) {\n return kb.rdfFactory.literal(obj['@value'], obj['@language']);\n }\n if (Object.prototype.hasOwnProperty.call(obj, '@type')) {\n return kb.rdfFactory.literal(obj['@value'], kb.rdfFactory.namedNode(obj['@type']));\n }\n if (Object.prototype.hasOwnProperty.call(obj, '@value')) {\n return kb.rdfFactory.literal(obj['@value']);\n }\n return kb.rdfFactory.literal(obj);\n}\n\n/**\n * Adds the statements in a json-ld list object to {kb}.\n */\nfunction listToStatements(kb, obj) {\n const listId = obj['@id'] ? nodeType(kb, obj) : kb.rdfFactory.blankNode();\n const items = obj['@list'].map(listItem => jsonldObjectToTerm(kb, listItem));\n const statements = arrayToStatements(kb.rdfFactory, listId, items);\n kb.addAll(statements);\n return listId;\n}\nfunction listToCollection(kb, obj) {\n if (!Array.isArray(obj)) {\n throw new TypeError(\"Object must be an array\");\n }\n return kb.rdfFactory.collection(obj.map(o => jsonldObjectToTerm(kb, o)));\n}\n\n/**\n * Takes a json-ld formatted string {str} and adds its statements to {kb}.\n *\n * Ensure that {kb.rdfFactory} is a DataFactory.\n */\nexport default async function jsonldParser(str, kb, base) {\n const baseString = base && Object.prototype.hasOwnProperty.call(base, 'termType') ? base.value : base;\n const jsonld = await import('jsonld');\n // ⚠ Unit tests also work without accessing `jsonld.default` explicitly, but real browser usage will fail with\n // just calling `jsonld.flatten`, so please do not remove `default`\n // Handle both ESM (browser) and CommonJS (Node.js) module formats\n // Browser ESM: jsonld.default.flatten\n // Node.js CommonJS: jsonld.flatten\n const jsonldLib = jsonld.default || jsonld;\n const flattened = await jsonldLib.flatten(JSON.parse(str), null, {\n base: baseString\n });\n return flattened.reduce((store, flatResource) => processResource(store, base, flatResource), kb);\n}\nfunction nodeType(kb, obj) {\n if (obj['@id'].startsWith('_:')) {\n // This object is a Blank Node. Pass the id without the `_:` prefix\n return kb.rdfFactory.blankNode(obj['@id'].substring(2));\n } else {\n // This object is a Named Node\n return kb.rdfFactory.namedNode(obj['@id']);\n }\n}\nfunction processResource(kb, base, flatResource) {\n const id = flatResource['@id'] ? nodeType(kb, flatResource) : kb.rdfFactory.blankNode();\n for (const property of Object.keys(flatResource)) {\n if (property === '@id') {\n continue;\n } else if (property == '@graph') {\n // the JSON-LD flattened structure may contain nested graphs\n // the id value for this object is the new base (named graph id) for all nested flat resources\n const graphId = id;\n // this is an array of resources\n const nestedFlatResources = flatResource[property];\n\n // recursively process all flat resources in the array, but with the graphId as base.\n for (let i = 0; i < nestedFlatResources.length; i++) {\n kb = processResource(kb, graphId, nestedFlatResources[i]);\n }\n }\n const value = flatResource[property];\n if (Array.isArray(value)) {\n for (let i = 0; i < value.length; i++) {\n kb.addStatement(createStatement(kb, id, property, value[i], base));\n }\n } else {\n kb.addStatement(createStatement(kb, id, property, value, base));\n }\n }\n return kb;\n}\n\n/**\n * Create statement quad depending on @type being a type node\n * @param kb\n * @param subject id\n * @param property\n * @param value\n * @return quad statement\n */\nfunction createStatement(kb, id, property, value, base) {\n let predicate, object;\n if (property === \"@type\") {\n predicate = kb.rdfFactory.namedNode(\"http://www.w3.org/1999/02/22-rdf-syntax-ns#type\");\n object = kb.rdfFactory.namedNode(value);\n } else {\n predicate = kb.rdfFactory.namedNode(property);\n object = jsonldObjectToTerm(kb, value);\n }\n return kb.rdfFactory.quad(id, predicate, object, kb.rdfFactory.namedNode(base));\n}","'use strict'\n\nexports.byteLength = byteLength\nexports.toByteArray = toByteArray\nexports.fromByteArray = fromByteArray\n\nvar lookup = []\nvar revLookup = []\nvar Arr = typeof Uint8Array !== 'undefined' ? Uint8Array : Array\n\nvar code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'\nfor (var i = 0, len = code.length; i < len; ++i) {\n lookup[i] = code[i]\n revLookup[code.charCodeAt(i)] = i\n}\n\n// Support decoding URL-safe base64 strings, as Node.js does.\n// See: https://en.wikipedia.org/wiki/Base64#URL_applications\nrevLookup['-'.charCodeAt(0)] = 62\nrevLookup['_'.charCodeAt(0)] = 63\n\nfunction getLens (b64) {\n var len = b64.length\n\n if (len % 4 > 0) {\n throw new Error('Invalid string. Length must be a multiple of 4')\n }\n\n // Trim off extra bytes after placeholder bytes are found\n // See: https://github.com/beatgammit/base64-js/issues/42\n var validLen = b64.indexOf('=')\n if (validLen === -1) validLen = len\n\n var placeHoldersLen = validLen === len\n ? 0\n : 4 - (validLen % 4)\n\n return [validLen, placeHoldersLen]\n}\n\n// base64 is 4/3 + up to two characters of the original data\nfunction byteLength (b64) {\n var lens = getLens(b64)\n var validLen = lens[0]\n var placeHoldersLen = lens[1]\n return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen\n}\n\nfunction _byteLength (b64, validLen, placeHoldersLen) {\n return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen\n}\n\nfunction toByteArray (b64) {\n var tmp\n var lens = getLens(b64)\n var validLen = lens[0]\n var placeHoldersLen = lens[1]\n\n var arr = new Arr(_byteLength(b64, validLen, placeHoldersLen))\n\n var curByte = 0\n\n // if there are placeholders, only get up to the last complete 4 chars\n var len = placeHoldersLen > 0\n ? validLen - 4\n : validLen\n\n var i\n for (i = 0; i < len; i += 4) {\n tmp =\n (revLookup[b64.charCodeAt(i)] << 18) |\n (revLookup[b64.charCodeAt(i + 1)] << 12) |\n (revLookup[b64.charCodeAt(i + 2)] << 6) |\n revLookup[b64.charCodeAt(i + 3)]\n arr[curByte++] = (tmp >> 16) & 0xFF\n arr[curByte++] = (tmp >> 8) & 0xFF\n arr[curByte++] = tmp & 0xFF\n }\n\n if (placeHoldersLen === 2) {\n tmp =\n (revLookup[b64.charCodeAt(i)] << 2) |\n (revLookup[b64.charCodeAt(i + 1)] >> 4)\n arr[curByte++] = tmp & 0xFF\n }\n\n if (placeHoldersLen === 1) {\n tmp =\n (revLookup[b64.charCodeAt(i)] << 10) |\n (revLookup[b64.charCodeAt(i + 1)] << 4) |\n (revLookup[b64.charCodeAt(i + 2)] >> 2)\n arr[curByte++] = (tmp >> 8) & 0xFF\n arr[curByte++] = tmp & 0xFF\n }\n\n return arr\n}\n\nfunction tripletToBase64 (num) {\n return lookup[num >> 18 & 0x3F] +\n lookup[num >> 12 & 0x3F] +\n lookup[num >> 6 & 0x3F] +\n lookup[num & 0x3F]\n}\n\nfunction encodeChunk (uint8, start, end) {\n var tmp\n var output = []\n for (var i = start; i < end; i += 3) {\n tmp =\n ((uint8[i] << 16) & 0xFF0000) +\n ((uint8[i + 1] << 8) & 0xFF00) +\n (uint8[i + 2] & 0xFF)\n output.push(tripletToBase64(tmp))\n }\n return output.join('')\n}\n\nfunction fromByteArray (uint8) {\n var tmp\n var len = uint8.length\n var extraBytes = len % 3 // if we have 1 byte left, pad 2 bytes\n var parts = []\n var maxChunkLength = 16383 // must be multiple of 3\n\n // go through the array every three bytes, we'll deal with trailing stuff later\n for (var i = 0, len2 = len - extraBytes; i < len2; i += maxChunkLength) {\n parts.push(encodeChunk(uint8, i, (i + maxChunkLength) > len2 ? len2 : (i + maxChunkLength)))\n }\n\n // pad the end with zeros, but make sure to not forget the extra bytes\n if (extraBytes === 1) {\n tmp = uint8[len - 1]\n parts.push(\n lookup[tmp >> 2] +\n lookup[(tmp << 4) & 0x3F] +\n '=='\n )\n } else if (extraBytes === 2) {\n tmp = (uint8[len - 2] << 8) + uint8[len - 1]\n parts.push(\n lookup[tmp >> 10] +\n lookup[(tmp >> 4) & 0x3F] +\n lookup[(tmp << 2) & 0x3F] +\n '='\n )\n }\n\n return parts.join('')\n}\n","/*! ieee754. BSD-3-Clause License. Feross Aboukhadijeh <https://feross.org/opensource> */\nexports.read = function (buffer, offset, isLE, mLen, nBytes) {\n var e, m\n var eLen = (nBytes * 8) - mLen - 1\n var eMax = (1 << eLen) - 1\n var eBias = eMax >> 1\n var nBits = -7\n var i = isLE ? (nBytes - 1) : 0\n var d = isLE ? -1 : 1\n var s = buffer[offset + i]\n\n i += d\n\n e = s & ((1 << (-nBits)) - 1)\n s >>= (-nBits)\n nBits += eLen\n for (; nBits > 0; e = (e * 256) + buffer[offset + i], i += d, nBits -= 8) {}\n\n m = e & ((1 << (-nBits)) - 1)\n e >>= (-nBits)\n nBits += mLen\n for (; nBits > 0; m = (m * 256) + buffer[offset + i], i += d, nBits -= 8) {}\n\n if (e === 0) {\n e = 1 - eBias\n } else if (e === eMax) {\n return m ? NaN : ((s ? -1 : 1) * Infinity)\n } else {\n m = m + Math.pow(2, mLen)\n e = e - eBias\n }\n return (s ? -1 : 1) * m * Math.pow(2, e - mLen)\n}\n\nexports.write = function (buffer, value, offset, isLE, mLen, nBytes) {\n var e, m, c\n var eLen = (nBytes * 8) - mLen - 1\n var eMax = (1 << eLen) - 1\n var eBias = eMax >> 1\n var rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0)\n var i = isLE ? 0 : (nBytes - 1)\n var d = isLE ? 1 : -1\n var s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0\n\n value = Math.abs(value)\n\n if (isNaN(value) || value === Infinity) {\n m = isNaN(value) ? 1 : 0\n e = eMax\n } else {\n e = Math.floor(Math.log(value) / Math.LN2)\n if (value * (c = Math.pow(2, -e)) < 1) {\n e--\n c *= 2\n }\n if (e + eBias >= 1) {\n value += rt / c\n } else {\n value += rt * Math.pow(2, 1 - eBias)\n }\n if (value * c >= 2) {\n e++\n c /= 2\n }\n\n if (e + eBias >= eMax) {\n m = 0\n e = eMax\n } else if (e + eBias >= 1) {\n m = ((value * c) - 1) * Math.pow(2, mLen)\n e = e + eBias\n } else {\n m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen)\n e = 0\n }\n }\n\n for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {}\n\n e = (e << mLen) | m\n eLen += mLen\n for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {}\n\n buffer[offset + i - d] |= s * 128\n}\n","/*!\n * The buffer module from node.js, for the browser.\n *\n * @author Feross Aboukhadijeh <https://feross.org>\n * @license MIT\n */\n/* eslint-disable no-proto */\n\n'use strict'\n\nconst base64 = require('base64-js')\nconst ieee754 = require('ieee754')\nconst customInspectSymbol =\n (typeof Symbol === 'function' && typeof Symbol['for'] === 'function') // eslint-disable-line dot-notation\n ? Symbol['for']('nodejs.util.inspect.custom') // eslint-disable-line dot-notation\n : null\n\nexports.Buffer = Buffer\nexports.SlowBuffer = SlowBuffer\nexports.INSPECT_MAX_BYTES = 50\n\nconst K_MAX_LENGTH = 0x7fffffff\nexports.kMaxLength = K_MAX_LENGTH\n\n/**\n * If `Buffer.TYPED_ARRAY_SUPPORT`:\n * === true Use Uint8Array implementation (fastest)\n * === false Print warning and recommend using `buffer` v4.x which has an Object\n * implementation (most compatible, even IE6)\n *\n * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+,\n * Opera 11.6+, iOS 4.2+.\n *\n * We report that the browser does not support typed arrays if the are not subclassable\n * using __proto__. Firefox 4-29 lacks support for adding new properties to `Uint8Array`\n * (See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438). IE 10 lacks support\n * for __proto__ and has a buggy typed array implementation.\n */\nBuffer.TYPED_ARRAY_SUPPORT = typedArraySupport()\n\nif (!Buffer.TYPED_ARRAY_SUPPORT && typeof console !== 'undefined' &&\n typeof console.error === 'function') {\n console.error(\n 'This browser lacks typed array (Uint8Array) support which is required by ' +\n '`buffer` v5.x. Use `buffer` v4.x if you require old browser support.'\n )\n}\n\nfunction typedArraySupport () {\n // Can typed array instances can be augmented?\n try {\n const arr = new Uint8Array(1)\n const proto = { foo: function () { return 42 } }\n Object.setPrototypeOf(proto, Uint8Array.prototype)\n Object.setPrototypeOf(arr, proto)\n return arr.foo() === 42\n } catch (e) {\n return false\n }\n}\n\nObject.defineProperty(Buffer.prototype, 'parent', {\n enumerable: true,\n get: function () {\n if (!Buffer.isBuffer(this)) return undefined\n return this.buffer\n }\n})\n\nObject.defineProperty(Buffer.prototype, 'offset', {\n enumerable: true,\n get: function () {\n if (!Buffer.isBuffer(this)) return undefined\n return this.byteOffset\n }\n})\n\nfunction createBuffer (length) {\n if (length > K_MAX_LENGTH) {\n throw new RangeError('The value \"' + length + '\" is invalid for option \"size\"')\n }\n // Return an augmented `Uint8Array` instance\n const buf = new Uint8Array(length)\n Object.setPrototypeOf(buf, Buffer.prototype)\n return buf\n}\n\n/**\n * The Buffer constructor returns instances of `Uint8Array` that have their\n * prototype changed to `Buffer.prototype`. Furthermore, `Buffer` is a subclass of\n * `Uint8Array`, so the returned instances will have all the node `Buffer` methods\n * and the `Uint8Array` methods. Square bracket notation works as expected -- it\n * returns a single octet.\n *\n * The `Uint8Array` prototype remains unmodified.\n */\n\nfunction Buffer (arg, encodingOrOffset, length) {\n // Common case.\n if (typeof arg === 'number') {\n if (typeof encodingOrOffset === 'string') {\n throw new TypeError(\n 'The \"string\" argument must be of type string. Received type number'\n )\n }\n return allocUnsafe(arg)\n }\n return from(arg, encodingOrOffset, length)\n}\n\nBuffer.poolSize = 8192 // not used by this implementation\n\nfunction from (value, encodingOrOffset, length) {\n if (typeof value === 'string') {\n return fromString(value, encodingOrOffset)\n }\n\n if (ArrayBuffer.isView(value)) {\n return fromArrayView(value)\n }\n\n if (value == null) {\n throw new TypeError(\n 'The first argument must be one of type string, Buffer, ArrayBuffer, Array, ' +\n 'or Array-like Object. Received type ' + (typeof value)\n )\n }\n\n if (isInstance(value, ArrayBuffer) ||\n (value && isInstance(value.buffer, ArrayBuffer))) {\n return fromArrayBuffer(value, encodingOrOffset, length)\n }\n\n if (typeof SharedArrayBuffer !== 'undefined' &&\n (isInstance(value, SharedArrayBuffer) ||\n (value && isInstance(value.buffer, SharedArrayBuffer)))) {\n return fromArrayBuffer(value, encodingOrOffset, length)\n }\n\n if (typeof value === 'number') {\n throw new TypeError(\n 'The \"value\" argument must not be of type number. Received type number'\n )\n }\n\n const valueOf = value.valueOf && value.valueOf()\n if (valueOf != null && valueOf !== value) {\n return Buffer.from(valueOf, encodingOrOffset, length)\n }\n\n const b = fromObject(value)\n if (b) return b\n\n if (typeof Symbol !== 'undefined' && Symbol.toPrimitive != null &&\n typeof value[Symbol.toPrimitive] === 'function') {\n return Buffer.from(value[Symbol.toPrimitive]('string'), encodingOrOffset, length)\n }\n\n throw new TypeError(\n 'The first argument must be one of type string, Buffer, ArrayBuffer, Array, ' +\n 'or Array-like Object. Received type ' + (typeof value)\n )\n}\n\n/**\n * Functionally equivalent to Buffer(arg, encoding) but throws a TypeError\n * if value is a number.\n * Buffer.from(str[, encoding])\n * Buffer.from(array)\n * Buffer.from(buffer)\n * Buffer.from(arrayBuffer[, byteOffset[, length]])\n **/\nBuffer.from = function (value, encodingOrOffset, length) {\n return from(value, encodingOrOffset, length)\n}\n\n// Note: Change prototype *after* Buffer.from is defined to workaround Chrome bug:\n// https://github.com/feross/buffer/pull/148\nObject.setPrototypeOf(Buffer.prototype, Uint8Array.prototype)\nObject.setPrototypeOf(Buffer, Uint8Array)\n\nfunction assertSize (size) {\n if (typeof size !== 'number') {\n throw new TypeError('\"size\" argument must be of type number')\n } else if (size < 0) {\n throw new RangeError('The value \"' + size + '\" is invalid for option \"size\"')\n }\n}\n\nfunction alloc (size, fill, encoding) {\n assertSize(size)\n if (size <= 0) {\n return createBuffer(size)\n }\n if (fill !== undefined) {\n // Only pay attention to encoding if it's a string. This\n // prevents accidentally sending in a number that would\n // be interpreted as a start offset.\n return typeof encoding === 'string'\n ? createBuffer(size).fill(fill, encoding)\n : createBuffer(size).fill(fill)\n }\n return createBuffer(size)\n}\n\n/**\n * Creates a new filled Buffer instance.\n * alloc(size[, fill[, encoding]])\n **/\nBuffer.alloc = function (size, fill, encoding) {\n return alloc(size, fill, encoding)\n}\n\nfunction allocUnsafe (size) {\n assertSize(size)\n return createBuffer(size < 0 ? 0 : checked(size) | 0)\n}\n\n/**\n * Equivalent to Buffer(num), by default creates a non-zero-filled Buffer instance.\n * */\nBuffer.allocUnsafe = function (size) {\n return allocUnsafe(size)\n}\n/**\n * Equivalent to SlowBuffer(num), by default creates a non-zero-filled Buffer instance.\n */\nBuffer.allocUnsafeSlow = function (size) {\n return allocUnsafe(size)\n}\n\nfunction fromString (string, encoding) {\n if (typeof encoding !== 'string' || encoding === '') {\n encoding = 'utf8'\n }\n\n if (!Buffer.isEncoding(encoding)) {\n throw new TypeError('Unknown encoding: ' + encoding)\n }\n\n const length = byteLength(string, encoding) | 0\n let buf = createBuffer(length)\n\n const actual = buf.write(string, encoding)\n\n if (actual !== length) {\n // Writing a hex string, for example, that contains invalid characters will\n // cause everything after the first invalid character to be ignored. (e.g.\n // 'abxxcd' will be treated as 'ab')\n buf = buf.slice(0, actual)\n }\n\n return buf\n}\n\nfunction fromArrayLike (array) {\n const length = array.length < 0 ? 0 : checked(array.length) | 0\n const buf = createBuffer(length)\n for (let i = 0; i < length; i += 1) {\n buf[i] = array[i] & 255\n }\n return buf\n}\n\nfunction fromArrayView (arrayView) {\n if (isInstance(arrayView, Uint8Array)) {\n const copy = new Uint8Array(arrayView)\n return fromArrayBuffer(copy.buffer, copy.byteOffset, copy.byteLength)\n }\n return fromArrayLike(arrayView)\n}\n\nfunction fromArrayBuffer (array, byteOffset, length) {\n if (byteOffset < 0 || array.byteLength < byteOffset) {\n throw new RangeError('\"offset\" is outside of buffer bounds')\n }\n\n if (array.byteLength < byteOffset + (length || 0)) {\n throw new RangeError('\"length\" is outside of buffer bounds')\n }\n\n let buf\n if (byteOffset === undefined && length === undefined) {\n buf = new Uint8Array(array)\n } else if (length === undefined) {\n buf = new Uint8Array(array, byteOffset)\n } else {\n buf = new Uint8Array(array, byteOffset, length)\n }\n\n // Return an augmented `Uint8Array` instance\n Object.setPrototypeOf(buf, Buffer.prototype)\n\n return buf\n}\n\nfunction fromObject (obj) {\n if (Buffer.isBuffer(obj)) {\n const len = checked(obj.length) | 0\n const buf = createBuffer(len)\n\n if (buf.length === 0) {\n return buf\n }\n\n obj.copy(buf, 0, 0, len)\n return buf\n }\n\n if (obj.length !== undefined) {\n if (typeof obj.length !== 'number' || numberIsNaN(obj.length)) {\n return createBuffer(0)\n }\n return fromArrayLike(obj)\n }\n\n if (obj.type === 'Buffer' && Array.isArray(obj.data)) {\n return fromArrayLike(obj.data)\n }\n}\n\nfunction checked (length) {\n // Note: cannot use `length < K_MAX_LENGTH` here because that fails when\n // length is NaN (which is otherwise coerced to zero.)\n if (length >= K_MAX_LENGTH) {\n throw new RangeError('Attempt to allocate Buffer larger than maximum ' +\n 'size: 0x' + K_MAX_LENGTH.toString(16) + ' bytes')\n }\n return length | 0\n}\n\nfunction SlowBuffer (length) {\n if (+length != length) { // eslint-disable-line eqeqeq\n length = 0\n }\n return Buffer.alloc(+length)\n}\n\nBuffer.isBuffer = function isBuffer (b) {\n return b != null && b._isBuffer === true &&\n b !== Buffer.prototype // so Buffer.isBuffer(Buffer.prototype) will be false\n}\n\nBuffer.compare = function compare (a, b) {\n if (isInstance(a, Uint8Array)) a = Buffer.from(a, a.offset, a.byteLength)\n if (isInstance(b, Uint8Array)) b = Buffer.from(b, b.offset, b.byteLength)\n if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) {\n throw new TypeError(\n 'The \"buf1\", \"buf2\" arguments must be one of type Buffer or Uint8Array'\n )\n }\n\n if (a === b) return 0\n\n let x = a.length\n let y = b.length\n\n for (let i = 0, len = Math.min(x, y); i < len; ++i) {\n if (a[i] !== b[i]) {\n x = a[i]\n y = b[i]\n break\n }\n }\n\n if (x < y) return -1\n if (y < x) return 1\n return 0\n}\n\nBuffer.isEncoding = function isEncoding (encoding) {\n switch (String(encoding).toLowerCase()) {\n case 'hex':\n case 'utf8':\n case 'utf-8':\n case 'ascii':\n case 'latin1':\n case 'binary':\n case 'base64':\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return true\n default:\n return false\n }\n}\n\nBuffer.concat = function concat (list, length) {\n if (!Array.isArray(list)) {\n throw new TypeError('\"list\" argument must be an Array of Buffers')\n }\n\n if (list.length === 0) {\n return Buffer.alloc(0)\n }\n\n let i\n if (length === undefined) {\n length = 0\n for (i = 0; i < list.length; ++i) {\n length += list[i].length\n }\n }\n\n const buffer = Buffer.allocUnsafe(length)\n let pos = 0\n for (i = 0; i < list.length; ++i) {\n let buf = list[i]\n if (isInstance(buf, Uint8Array)) {\n if (pos + buf.length > buffer.length) {\n if (!Buffer.isBuffer(buf)) buf = Buffer.from(buf)\n buf.copy(buffer, pos)\n } else {\n Uint8Array.prototype.set.call(\n buffer,\n buf,\n pos\n )\n }\n } else if (!Buffer.isBuffer(buf)) {\n throw new TypeError('\"list\" argument must be an Array of Buffers')\n } else {\n buf.copy(buffer, pos)\n }\n pos += buf.length\n }\n return buffer\n}\n\nfunction byteLength (string, encoding) {\n if (Buffer.isBuffer(string)) {\n return string.length\n }\n if (ArrayBuffer.isView(string) || isInstance(string, ArrayBuffer)) {\n return string.byteLength\n }\n if (typeof string !== 'string') {\n throw new TypeError(\n 'The \"string\" argument must be one of type string, Buffer, or ArrayBuffer. ' +\n 'Received type ' + typeof string\n )\n }\n\n const len = string.length\n const mustMatch = (arguments.length > 2 && arguments[2] === true)\n if (!mustMatch && len === 0) return 0\n\n // Use a for loop to avoid recursion\n let loweredCase = false\n for (;;) {\n switch (encoding) {\n case 'ascii':\n case 'latin1':\n case 'binary':\n return len\n case 'utf8':\n case 'utf-8':\n return utf8ToBytes(string).length\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return len * 2\n case 'hex':\n return len >>> 1\n case 'base64':\n return base64ToBytes(string).length\n default:\n if (loweredCase) {\n return mustMatch ? -1 : utf8ToBytes(string).length // assume utf8\n }\n encoding = ('' + encoding).toLowerCase()\n loweredCase = true\n }\n }\n}\nBuffer.byteLength = byteLength\n\nfunction slowToString (encoding, start, end) {\n let loweredCase = false\n\n // No need to verify that \"this.length <= MAX_UINT32\" since it's a read-only\n // property of a typed array.\n\n // This behaves neither like String nor Uint8Array in that we set start/end\n // to their upper/lower bounds if the value passed is out of range.\n // undefined is handled specially as per ECMA-262 6th Edition,\n // Section 13.3.3.7 Runtime Semantics: KeyedBindingInitialization.\n if (start === undefined || start < 0) {\n start = 0\n }\n // Return early if start > this.length. Done here to prevent potential uint32\n // coercion fail below.\n if (start > this.length) {\n return ''\n }\n\n if (end === undefined || end > this.length) {\n end = this.length\n }\n\n if (end <= 0) {\n return ''\n }\n\n // Force coercion to uint32. This will also coerce falsey/NaN values to 0.\n end >>>= 0\n start >>>= 0\n\n if (end <= start) {\n return ''\n }\n\n if (!encoding) encoding = 'utf8'\n\n while (true) {\n switch (encoding) {\n case 'hex':\n return hexSlice(this, start, end)\n\n case 'utf8':\n case 'utf-8':\n return utf8Slice(this, start, end)\n\n case 'ascii':\n return asciiSlice(this, start, end)\n\n case 'latin1':\n case 'binary':\n return latin1Slice(this, start, end)\n\n case 'base64':\n return base64Slice(this, start, end)\n\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return utf16leSlice(this, start, end)\n\n default:\n if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)\n encoding = (encoding + '').toLowerCase()\n loweredCase = true\n }\n }\n}\n\n// This property is used by `Buffer.isBuffer` (and the `is-buffer` npm package)\n// to detect a Buffer instance. It's not possible to use `instanceof Buffer`\n// reliably in a browserify context because there could be multiple different\n// copies of the 'buffer' package in use. This method works even for Buffer\n// instances that were created from another copy of the `buffer` package.\n// See: https://github.com/feross/buffer/issues/154\nBuffer.prototype._isBuffer = true\n\nfunction swap (b, n, m) {\n const i = b[n]\n b[n] = b[m]\n b[m] = i\n}\n\nBuffer.prototype.swap16 = function swap16 () {\n const len = this.length\n if (len % 2 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 16-bits')\n }\n for (let i = 0; i < len; i += 2) {\n swap(this, i, i + 1)\n }\n return this\n}\n\nBuffer.prototype.swap32 = function swap32 () {\n const len = this.length\n if (len % 4 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 32-bits')\n }\n for (let i = 0; i < len; i += 4) {\n swap(this, i, i + 3)\n swap(this, i + 1, i + 2)\n }\n return this\n}\n\nBuffer.prototype.swap64 = function swap64 () {\n const len = this.length\n if (len % 8 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 64-bits')\n }\n for (let i = 0; i < len; i += 8) {\n swap(this, i, i + 7)\n swap(this, i + 1, i + 6)\n swap(this, i + 2, i + 5)\n swap(this, i + 3, i + 4)\n }\n return this\n}\n\nBuffer.prototype.toString = function toString () {\n const length = this.length\n if (length === 0) return ''\n if (arguments.length === 0) return utf8Slice(this, 0, length)\n return slowToString.apply(this, arguments)\n}\n\nBuffer.prototype.toLocaleString = Buffer.prototype.toString\n\nBuffer.prototype.equals = function equals (b) {\n if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')\n if (this === b) return true\n return Buffer.compare(this, b) === 0\n}\n\nBuffer.prototype.inspect = function inspect () {\n let str = ''\n const max = exports.INSPECT_MAX_BYTES\n str = this.toString('hex', 0, max).replace(/(.{2})/g, '$1 ').trim()\n if (this.length > max) str += ' ... '\n return '<Buffer ' + str + '>'\n}\nif (customInspectSymbol) {\n Buffer.prototype[customInspectSymbol] = Buffer.prototype.inspect\n}\n\nBuffer.prototype.compare = function compare (target, start, end, thisStart, thisEnd) {\n if (isInstance(target, Uint8Array)) {\n target = Buffer.from(target, target.offset, target.byteLength)\n }\n if (!Buffer.isBuffer(target)) {\n throw new TypeError(\n 'The \"target\" argument must be one of type Buffer or Uint8Array. ' +\n 'Received type ' + (typeof target)\n )\n }\n\n if (start === undefined) {\n start = 0\n }\n if (end === undefined) {\n end = target ? target.length : 0\n }\n if (thisStart === undefined) {\n thisStart = 0\n }\n if (thisEnd === undefined) {\n thisEnd = this.length\n }\n\n if (start < 0 || end > target.length || thisStart < 0 || thisEnd > this.length) {\n throw new RangeError('out of range index')\n }\n\n if (thisStart >= thisEnd && start >= end) {\n return 0\n }\n if (thisStart >= thisEnd) {\n return -1\n }\n if (start >= end) {\n return 1\n }\n\n start >>>= 0\n end >>>= 0\n thisStart >>>= 0\n thisEnd >>>= 0\n\n if (this === target) return 0\n\n let x = thisEnd - thisStart\n let y = end - start\n const len = Math.min(x, y)\n\n const thisCopy = this.slice(thisStart, thisEnd)\n const targetCopy = target.slice(start, end)\n\n for (let i = 0; i < len; ++i) {\n if (thisCopy[i] !== targetCopy[i]) {\n x = thisCopy[i]\n y = targetCopy[i]\n break\n }\n }\n\n if (x < y) return -1\n if (y < x) return 1\n return 0\n}\n\n// Finds either the first index of `val` in `buffer` at offset >= `byteOffset`,\n// OR the last index of `val` in `buffer` at offset <= `byteOffset`.\n//\n// Arguments:\n// - buffer - a Buffer to search\n// - val - a string, Buffer, or number\n// - byteOffset - an index into `buffer`; will be clamped to an int32\n// - encoding - an optional encoding, relevant is val is a string\n// - dir - true for indexOf, false for lastIndexOf\nfunction bidirectionalIndexOf (buffer, val, byteOffset, encoding, dir) {\n // Empty buffer means no match\n if (buffer.length === 0) return -1\n\n // Normalize byteOffset\n if (typeof byteOffset === 'string') {\n encoding = byteOffset\n byteOffset = 0\n } else if (byteOffset > 0x7fffffff) {\n byteOffset = 0x7fffffff\n } else if (byteOffset < -0x80000000) {\n byteOffset = -0x80000000\n }\n byteOffset = +byteOffset // Coerce to Number.\n if (numberIsNaN(byteOffset)) {\n // byteOffset: it it's undefined, null, NaN, \"foo\", etc, search whole buffer\n byteOffset = dir ? 0 : (buffer.length - 1)\n }\n\n // Normalize byteOffset: negative offsets start from the end of the buffer\n if (byteOffset < 0) byteOffset = buffer.length + byteOffset\n if (byteOffset >= buffer.length) {\n if (dir) return -1\n else byteOffset = buffer.length - 1\n } else if (byteOffset < 0) {\n if (dir) byteOffset = 0\n else return -1\n }\n\n // Normalize val\n if (typeof val === 'string') {\n val = Buffer.from(val, encoding)\n }\n\n // Finally, search either indexOf (if dir is true) or lastIndexOf\n if (Buffer.isBuffer(val)) {\n // Special case: looking for empty string/buffer always fails\n if (val.length === 0) {\n return -1\n }\n return arrayIndexOf(buffer, val, byteOffset, encoding, dir)\n } else if (typeof val === 'number') {\n val = val & 0xFF // Search for a byte value [0-255]\n if (typeof Uint8Array.prototype.indexOf === 'function') {\n if (dir) {\n return Uint8Array.prototype.indexOf.call(buffer, val, byteOffset)\n } else {\n return Uint8Array.prototype.lastIndexOf.call(buffer, val, byteOffset)\n }\n }\n return arrayIndexOf(buffer, [val], byteOffset, encoding, dir)\n }\n\n throw new TypeError('val must be string, number or Buffer')\n}\n\nfunction arrayIndexOf (arr, val, byteOffset, encoding, dir) {\n let indexSize = 1\n let arrLength = arr.length\n let valLength = val.length\n\n if (encoding !== undefined) {\n encoding = String(encoding).toLowerCase()\n if (encoding === 'ucs2' || encoding === 'ucs-2' ||\n encoding === 'utf16le' || encoding === 'utf-16le') {\n if (arr.length < 2 || val.length < 2) {\n return -1\n }\n indexSize = 2\n arrLength /= 2\n valLength /= 2\n byteOffset /= 2\n }\n }\n\n function read (buf, i) {\n if (indexSize === 1) {\n return buf[i]\n } else {\n return buf.readUInt16BE(i * indexSize)\n }\n }\n\n let i\n if (dir) {\n let foundIndex = -1\n for (i = byteOffset; i < arrLength; i++) {\n if (read(arr, i) === read(val, foundIndex === -1 ? 0 : i - foundIndex)) {\n if (foundIndex === -1) foundIndex = i\n if (i - foundIndex + 1 === valLength) return foundIndex * indexSize\n } else {\n if (foundIndex !== -1) i -= i - foundIndex\n foundIndex = -1\n }\n }\n } else {\n if (byteOffset + valLength > arrLength) byteOffset = arrLength - valLength\n for (i = byteOffset; i >= 0; i--) {\n let found = true\n for (let j = 0; j < valLength; j++) {\n if (read(arr, i + j) !== read(val, j)) {\n found = false\n break\n }\n }\n if (found) return i\n }\n }\n\n return -1\n}\n\nBuffer.prototype.includes = function includes (val, byteOffset, encoding) {\n return this.indexOf(val, byteOffset, encoding) !== -1\n}\n\nBuffer.prototype.indexOf = function indexOf (val, byteOffset, encoding) {\n return bidirectionalIndexOf(this, val, byteOffset, encoding, true)\n}\n\nBuffer.prototype.lastIndexOf = function lastIndexOf (val, byteOffset, encoding) {\n return bidirectionalIndexOf(this, val, byteOffset, encoding, false)\n}\n\nfunction hexWrite (buf, string, offset, length) {\n offset = Number(offset) || 0\n const remaining = buf.length - offset\n if (!length) {\n length = remaining\n } else {\n length = Number(length)\n if (length > remaining) {\n length = remaining\n }\n }\n\n const strLen = string.length\n\n if (length > strLen / 2) {\n length = strLen / 2\n }\n let i\n for (i = 0; i < length; ++i) {\n const parsed = parseInt(string.substr(i * 2, 2), 16)\n if (numberIsNaN(parsed)) return i\n buf[offset + i] = parsed\n }\n return i\n}\n\nfunction utf8Write (buf, string, offset, length) {\n return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length)\n}\n\nfunction asciiWrite (buf, string, offset, length) {\n return blitBuffer(asciiToBytes(string), buf, offset, length)\n}\n\nfunction base64Write (buf, string, offset, length) {\n return blitBuffer(base64ToBytes(string), buf, offset, length)\n}\n\nfunction ucs2Write (buf, string, offset, length) {\n return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length)\n}\n\nBuffer.prototype.write = function write (string, offset, length, encoding) {\n // Buffer#write(string)\n if (offset === undefined) {\n encoding = 'utf8'\n length = this.length\n offset = 0\n // Buffer#write(string, encoding)\n } else if (length === undefined && typeof offset === 'string') {\n encoding = offset\n length = this.length\n offset = 0\n // Buffer#write(string, offset[, length][, encoding])\n } else if (isFinite(offset)) {\n offset = offset >>> 0\n if (isFinite(length)) {\n length = length >>> 0\n if (encoding === undefined) encoding = 'utf8'\n } else {\n encoding = length\n length = undefined\n }\n } else {\n throw new Error(\n 'Buffer.write(string, encoding, offset[, length]) is no longer supported'\n )\n }\n\n const remaining = this.length - offset\n if (length === undefined || length > remaining) length = remaining\n\n if ((string.length > 0 && (length < 0 || offset < 0)) || offset > this.length) {\n throw new RangeError('Attempt to write outside buffer bounds')\n }\n\n if (!encoding) encoding = 'utf8'\n\n let loweredCase = false\n for (;;) {\n switch (encoding) {\n case 'hex':\n return hexWrite(this, string, offset, length)\n\n case 'utf8':\n case 'utf-8':\n return utf8Write(this, string, offset, length)\n\n case 'ascii':\n case 'latin1':\n case 'binary':\n return asciiWrite(this, string, offset, length)\n\n case 'base64':\n // Warning: maxLength not taken into account in base64Write\n return base64Write(this, string, offset, length)\n\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return ucs2Write(this, string, offset, length)\n\n default:\n if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)\n encoding = ('' + encoding).toLowerCase()\n loweredCase = true\n }\n }\n}\n\nBuffer.prototype.toJSON = function toJSON () {\n return {\n type: 'Buffer',\n data: Array.prototype.slice.call(this._arr || this, 0)\n }\n}\n\nfunction base64Slice (buf, start, end) {\n if (start === 0 && end === buf.length) {\n return base64.fromByteArray(buf)\n } else {\n return base64.fromByteArray(buf.slice(start, end))\n }\n}\n\nfunction utf8Slice (buf, start, end) {\n end = Math.min(buf.length, end)\n const res = []\n\n let i = start\n while (i < end) {\n const firstByte = buf[i]\n let codePoint = null\n let bytesPerSequence = (firstByte > 0xEF)\n ? 4\n : (firstByte > 0xDF)\n ? 3\n : (firstByte > 0xBF)\n ? 2\n : 1\n\n if (i + bytesPerSequence <= end) {\n let secondByte, thirdByte, fourthByte, tempCodePoint\n\n switch (bytesPerSequence) {\n case 1:\n if (firstByte < 0x80) {\n codePoint = firstByte\n }\n break\n case 2:\n secondByte = buf[i + 1]\n if ((secondByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0x1F) << 0x6 | (secondByte & 0x3F)\n if (tempCodePoint > 0x7F) {\n codePoint = tempCodePoint\n }\n }\n break\n case 3:\n secondByte = buf[i + 1]\n thirdByte = buf[i + 2]\n if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | (thirdByte & 0x3F)\n if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) {\n codePoint = tempCodePoint\n }\n }\n break\n case 4:\n secondByte = buf[i + 1]\n thirdByte = buf[i + 2]\n fourthByte = buf[i + 3]\n if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | (fourthByte & 0x3F)\n if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) {\n codePoint = tempCodePoint\n }\n }\n }\n }\n\n if (codePoint === null) {\n // we did not generate a valid codePoint so insert a\n // replacement char (U+FFFD) and advance only 1 byte\n codePoint = 0xFFFD\n bytesPerSequence = 1\n } else if (codePoint > 0xFFFF) {\n // encode to utf16 (surrogate pair dance)\n codePoint -= 0x10000\n res.push(codePoint >>> 10 & 0x3FF | 0xD800)\n codePoint = 0xDC00 | codePoint & 0x3FF\n }\n\n res.push(codePoint)\n i += bytesPerSequence\n }\n\n return decodeCodePointsArray(res)\n}\n\n// Based on http://stackoverflow.com/a/22747272/680742, the browser with\n// the lowest limit is Chrome, with 0x10000 args.\n// We go 1 magnitude less, for safety\nconst MAX_ARGUMENTS_LENGTH = 0x1000\n\nfunction decodeCodePointsArray (codePoints) {\n const len = codePoints.length\n if (len <= MAX_ARGUMENTS_LENGTH) {\n return String.fromCharCode.apply(String, codePoints) // avoid extra slice()\n }\n\n // Decode in chunks to avoid \"call stack size exceeded\".\n let res = ''\n let i = 0\n while (i < len) {\n res += String.fromCharCode.apply(\n String,\n codePoints.slice(i, i += MAX_ARGUMENTS_LENGTH)\n )\n }\n return res\n}\n\nfunction asciiSlice (buf, start, end) {\n let ret = ''\n end = Math.min(buf.length, end)\n\n for (let i = start; i < end; ++i) {\n ret += String.fromCharCode(buf[i] & 0x7F)\n }\n return ret\n}\n\nfunction latin1Slice (buf, start, end) {\n let ret = ''\n end = Math.min(buf.length, end)\n\n for (let i = start; i < end; ++i) {\n ret += String.fromCharCode(buf[i])\n }\n return ret\n}\n\nfunction hexSlice (buf, start, end) {\n const len = buf.length\n\n if (!start || start < 0) start = 0\n if (!end || end < 0 || end > len) end = len\n\n let out = ''\n for (let i = start; i < end; ++i) {\n out += hexSliceLookupTable[buf[i]]\n }\n return out\n}\n\nfunction utf16leSlice (buf, start, end) {\n const bytes = buf.slice(start, end)\n let res = ''\n // If bytes.length is odd, the last 8 bits must be ignored (same as node.js)\n for (let i = 0; i < bytes.length - 1; i += 2) {\n res += String.fromCharCode(bytes[i] + (bytes[i + 1] * 256))\n }\n return res\n}\n\nBuffer.prototype.slice = function slice (start, end) {\n const len = this.length\n start = ~~start\n end = end === undefined ? len : ~~end\n\n if (start < 0) {\n start += len\n if (start < 0) start = 0\n } else if (start > len) {\n start = len\n }\n\n if (end < 0) {\n end += len\n if (end < 0) end = 0\n } else if (end > len) {\n end = len\n }\n\n if (end < start) end = start\n\n const newBuf = this.subarray(start, end)\n // Return an augmented `Uint8Array` instance\n Object.setPrototypeOf(newBuf, Buffer.prototype)\n\n return newBuf\n}\n\n/*\n * Need to make sure that buffer isn't trying to write out of bounds.\n */\nfunction checkOffset (offset, ext, length) {\n if ((offset % 1) !== 0 || offset < 0) throw new RangeError('offset is not uint')\n if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length')\n}\n\nBuffer.prototype.readUintLE =\nBuffer.prototype.readUIntLE = function readUIntLE (offset, byteLength, noAssert) {\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n let val = this[offset]\n let mul = 1\n let i = 0\n while (++i < byteLength && (mul *= 0x100)) {\n val += this[offset + i] * mul\n }\n\n return val\n}\n\nBuffer.prototype.readUintBE =\nBuffer.prototype.readUIntBE = function readUIntBE (offset, byteLength, noAssert) {\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) {\n checkOffset(offset, byteLength, this.length)\n }\n\n let val = this[offset + --byteLength]\n let mul = 1\n while (byteLength > 0 && (mul *= 0x100)) {\n val += this[offset + --byteLength] * mul\n }\n\n return val\n}\n\nBuffer.prototype.readUint8 =\nBuffer.prototype.readUInt8 = function readUInt8 (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 1, this.length)\n return this[offset]\n}\n\nBuffer.prototype.readUint16LE =\nBuffer.prototype.readUInt16LE = function readUInt16LE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 2, this.length)\n return this[offset] | (this[offset + 1] << 8)\n}\n\nBuffer.prototype.readUint16BE =\nBuffer.prototype.readUInt16BE = function readUInt16BE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 2, this.length)\n return (this[offset] << 8) | this[offset + 1]\n}\n\nBuffer.prototype.readUint32LE =\nBuffer.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return ((this[offset]) |\n (this[offset + 1] << 8) |\n (this[offset + 2] << 16)) +\n (this[offset + 3] * 0x1000000)\n}\n\nBuffer.prototype.readUint32BE =\nBuffer.prototype.readUInt32BE = function readUInt32BE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset] * 0x1000000) +\n ((this[offset + 1] << 16) |\n (this[offset + 2] << 8) |\n this[offset + 3])\n}\n\nBuffer.prototype.readBigUInt64LE = defineBigIntMethod(function readBigUInt64LE (offset) {\n offset = offset >>> 0\n validateNumber(offset, 'offset')\n const first = this[offset]\n const last = this[offset + 7]\n if (first === undefined || last === undefined) {\n boundsError(offset, this.length - 8)\n }\n\n const lo = first +\n this[++offset] * 2 ** 8 +\n this[++offset] * 2 ** 16 +\n this[++offset] * 2 ** 24\n\n const hi = this[++offset] +\n this[++offset] * 2 ** 8 +\n this[++offset] * 2 ** 16 +\n last * 2 ** 24\n\n return BigInt(lo) + (BigInt(hi) << BigInt(32))\n})\n\nBuffer.prototype.readBigUInt64BE = defineBigIntMethod(function readBigUInt64BE (offset) {\n offset = offset >>> 0\n validateNumber(offset, 'offset')\n const first = this[offset]\n const last = this[offset + 7]\n if (first === undefined || last === undefined) {\n boundsError(offset, this.length - 8)\n }\n\n const hi = first * 2 ** 24 +\n this[++offset] * 2 ** 16 +\n this[++offset] * 2 ** 8 +\n this[++offset]\n\n const lo = this[++offset] * 2 ** 24 +\n this[++offset] * 2 ** 16 +\n this[++offset] * 2 ** 8 +\n last\n\n return (BigInt(hi) << BigInt(32)) + BigInt(lo)\n})\n\nBuffer.prototype.readIntLE = function readIntLE (offset, byteLength, noAssert) {\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n let val = this[offset]\n let mul = 1\n let i = 0\n while (++i < byteLength && (mul *= 0x100)) {\n val += this[offset + i] * mul\n }\n mul *= 0x80\n\n if (val >= mul) val -= Math.pow(2, 8 * byteLength)\n\n return val\n}\n\nBuffer.prototype.readIntBE = function readIntBE (offset, byteLength, noAssert) {\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n let i = byteLength\n let mul = 1\n let val = this[offset + --i]\n while (i > 0 && (mul *= 0x100)) {\n val += this[offset + --i] * mul\n }\n mul *= 0x80\n\n if (val >= mul) val -= Math.pow(2, 8 * byteLength)\n\n return val\n}\n\nBuffer.prototype.readInt8 = function readInt8 (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 1, this.length)\n if (!(this[offset] & 0x80)) return (this[offset])\n return ((0xff - this[offset] + 1) * -1)\n}\n\nBuffer.prototype.readInt16LE = function readInt16LE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 2, this.length)\n const val = this[offset] | (this[offset + 1] << 8)\n return (val & 0x8000) ? val | 0xFFFF0000 : val\n}\n\nBuffer.prototype.readInt16BE = function readInt16BE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 2, this.length)\n const val = this[offset + 1] | (this[offset] << 8)\n return (val & 0x8000) ? val | 0xFFFF0000 : val\n}\n\nBuffer.prototype.readInt32LE = function readInt32LE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset]) |\n (this[offset + 1] << 8) |\n (this[offset + 2] << 16) |\n (this[offset + 3] << 24)\n}\n\nBuffer.prototype.readInt32BE = function readInt32BE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset] << 24) |\n (this[offset + 1] << 16) |\n (this[offset + 2] << 8) |\n (this[offset + 3])\n}\n\nBuffer.prototype.readBigInt64LE = defineBigIntMethod(function readBigInt64LE (offset) {\n offset = offset >>> 0\n validateNumber(offset, 'offset')\n const first = this[offset]\n const last = this[offset + 7]\n if (first === undefined || last === undefined) {\n boundsError(offset, this.length - 8)\n }\n\n const val = this[offset + 4] +\n this[offset + 5] * 2 ** 8 +\n this[offset + 6] * 2 ** 16 +\n (last << 24) // Overflow\n\n return (BigInt(val) << BigInt(32)) +\n BigInt(first +\n this[++offset] * 2 ** 8 +\n this[++offset] * 2 ** 16 +\n this[++offset] * 2 ** 24)\n})\n\nBuffer.prototype.readBigInt64BE = defineBigIntMethod(function readBigInt64BE (offset) {\n offset = offset >>> 0\n validateNumber(offset, 'offset')\n const first = this[offset]\n const last = this[offset + 7]\n if (first === undefined || last === undefined) {\n boundsError(offset, this.length - 8)\n }\n\n const val = (first << 24) + // Overflow\n this[++offset] * 2 ** 16 +\n this[++offset] * 2 ** 8 +\n this[++offset]\n\n return (BigInt(val) << BigInt(32)) +\n BigInt(this[++offset] * 2 ** 24 +\n this[++offset] * 2 ** 16 +\n this[++offset] * 2 ** 8 +\n last)\n})\n\nBuffer.prototype.readFloatLE = function readFloatLE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n return ieee754.read(this, offset, true, 23, 4)\n}\n\nBuffer.prototype.readFloatBE = function readFloatBE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n return ieee754.read(this, offset, false, 23, 4)\n}\n\nBuffer.prototype.readDoubleLE = function readDoubleLE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 8, this.length)\n return ieee754.read(this, offset, true, 52, 8)\n}\n\nBuffer.prototype.readDoubleBE = function readDoubleBE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 8, this.length)\n return ieee754.read(this, offset, false, 52, 8)\n}\n\nfunction checkInt (buf, value, offset, ext, max, min) {\n if (!Buffer.isBuffer(buf)) throw new TypeError('\"buffer\" argument must be a Buffer instance')\n if (value > max || value < min) throw new RangeError('\"value\" argument is out of bounds')\n if (offset + ext > buf.length) throw new RangeError('Index out of range')\n}\n\nBuffer.prototype.writeUintLE =\nBuffer.prototype.writeUIntLE = function writeUIntLE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) {\n const maxBytes = Math.pow(2, 8 * byteLength) - 1\n checkInt(this, value, offset, byteLength, maxBytes, 0)\n }\n\n let mul = 1\n let i = 0\n this[offset] = value & 0xFF\n while (++i < byteLength && (mul *= 0x100)) {\n this[offset + i] = (value / mul) & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeUintBE =\nBuffer.prototype.writeUIntBE = function writeUIntBE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) {\n const maxBytes = Math.pow(2, 8 * byteLength) - 1\n checkInt(this, value, offset, byteLength, maxBytes, 0)\n }\n\n let i = byteLength - 1\n let mul = 1\n this[offset + i] = value & 0xFF\n while (--i >= 0 && (mul *= 0x100)) {\n this[offset + i] = (value / mul) & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeUint8 =\nBuffer.prototype.writeUInt8 = function writeUInt8 (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0)\n this[offset] = (value & 0xff)\n return offset + 1\n}\n\nBuffer.prototype.writeUint16LE =\nBuffer.prototype.writeUInt16LE = function writeUInt16LE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n return offset + 2\n}\n\nBuffer.prototype.writeUint16BE =\nBuffer.prototype.writeUInt16BE = function writeUInt16BE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)\n this[offset] = (value >>> 8)\n this[offset + 1] = (value & 0xff)\n return offset + 2\n}\n\nBuffer.prototype.writeUint32LE =\nBuffer.prototype.writeUInt32LE = function writeUInt32LE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)\n this[offset + 3] = (value >>> 24)\n this[offset + 2] = (value >>> 16)\n this[offset + 1] = (value >>> 8)\n this[offset] = (value & 0xff)\n return offset + 4\n}\n\nBuffer.prototype.writeUint32BE =\nBuffer.prototype.writeUInt32BE = function writeUInt32BE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)\n this[offset] = (value >>> 24)\n this[offset + 1] = (value >>> 16)\n this[offset + 2] = (value >>> 8)\n this[offset + 3] = (value & 0xff)\n return offset + 4\n}\n\nfunction wrtBigUInt64LE (buf, value, offset, min, max) {\n checkIntBI(value, min, max, buf, offset, 7)\n\n let lo = Number(value & BigInt(0xffffffff))\n buf[offset++] = lo\n lo = lo >> 8\n buf[offset++] = lo\n lo = lo >> 8\n buf[offset++] = lo\n lo = lo >> 8\n buf[offset++] = lo\n let hi = Number(value >> BigInt(32) & BigInt(0xffffffff))\n buf[offset++] = hi\n hi = hi >> 8\n buf[offset++] = hi\n hi = hi >> 8\n buf[offset++] = hi\n hi = hi >> 8\n buf[offset++] = hi\n return offset\n}\n\nfunction wrtBigUInt64BE (buf, value, offset, min, max) {\n checkIntBI(value, min, max, buf, offset, 7)\n\n let lo = Number(value & BigInt(0xffffffff))\n buf[offset + 7] = lo\n lo = lo >> 8\n buf[offset + 6] = lo\n lo = lo >> 8\n buf[offset + 5] = lo\n lo = lo >> 8\n buf[offset + 4] = lo\n let hi = Number(value >> BigInt(32) & BigInt(0xffffffff))\n buf[offset + 3] = hi\n hi = hi >> 8\n buf[offset + 2] = hi\n hi = hi >> 8\n buf[offset + 1] = hi\n hi = hi >> 8\n buf[offset] = hi\n return offset + 8\n}\n\nBuffer.prototype.writeBigUInt64LE = defineBigIntMethod(function writeBigUInt64LE (value, offset = 0) {\n return wrtBigUInt64LE(this, value, offset, BigInt(0), BigInt('0xffffffffffffffff'))\n})\n\nBuffer.prototype.writeBigUInt64BE = defineBigIntMethod(function writeBigUInt64BE (value, offset = 0) {\n return wrtBigUInt64BE(this, value, offset, BigInt(0), BigInt('0xffffffffffffffff'))\n})\n\nBuffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) {\n const limit = Math.pow(2, (8 * byteLength) - 1)\n\n checkInt(this, value, offset, byteLength, limit - 1, -limit)\n }\n\n let i = 0\n let mul = 1\n let sub = 0\n this[offset] = value & 0xFF\n while (++i < byteLength && (mul *= 0x100)) {\n if (value < 0 && sub === 0 && this[offset + i - 1] !== 0) {\n sub = 1\n }\n this[offset + i] = ((value / mul) >> 0) - sub & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) {\n const limit = Math.pow(2, (8 * byteLength) - 1)\n\n checkInt(this, value, offset, byteLength, limit - 1, -limit)\n }\n\n let i = byteLength - 1\n let mul = 1\n let sub = 0\n this[offset + i] = value & 0xFF\n while (--i >= 0 && (mul *= 0x100)) {\n if (value < 0 && sub === 0 && this[offset + i + 1] !== 0) {\n sub = 1\n }\n this[offset + i] = ((value / mul) >> 0) - sub & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80)\n if (value < 0) value = 0xff + value + 1\n this[offset] = (value & 0xff)\n return offset + 1\n}\n\nBuffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n return offset + 2\n}\n\nBuffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)\n this[offset] = (value >>> 8)\n this[offset + 1] = (value & 0xff)\n return offset + 2\n}\n\nBuffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n this[offset + 2] = (value >>> 16)\n this[offset + 3] = (value >>> 24)\n return offset + 4\n}\n\nBuffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)\n if (value < 0) value = 0xffffffff + value + 1\n this[offset] = (value >>> 24)\n this[offset + 1] = (value >>> 16)\n this[offset + 2] = (value >>> 8)\n this[offset + 3] = (value & 0xff)\n return offset + 4\n}\n\nBuffer.prototype.writeBigInt64LE = defineBigIntMethod(function writeBigInt64LE (value, offset = 0) {\n return wrtBigUInt64LE(this, value, offset, -BigInt('0x8000000000000000'), BigInt('0x7fffffffffffffff'))\n})\n\nBuffer.prototype.writeBigInt64BE = defineBigIntMethod(function writeBigInt64BE (value, offset = 0) {\n return wrtBigUInt64BE(this, value, offset, -BigInt('0x8000000000000000'), BigInt('0x7fffffffffffffff'))\n})\n\nfunction checkIEEE754 (buf, value, offset, ext, max, min) {\n if (offset + ext > buf.length) throw new RangeError('Index out of range')\n if (offset < 0) throw new RangeError('Index out of range')\n}\n\nfunction writeFloat (buf, value, offset, littleEndian, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) {\n checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38)\n }\n ieee754.write(buf, value, offset, littleEndian, 23, 4)\n return offset + 4\n}\n\nBuffer.prototype.writeFloatLE = function writeFloatLE (value, offset, noAssert) {\n return writeFloat(this, value, offset, true, noAssert)\n}\n\nBuffer.prototype.writeFloatBE = function writeFloatBE (value, offset, noAssert) {\n return writeFloat(this, value, offset, false, noAssert)\n}\n\nfunction writeDouble (buf, value, offset, littleEndian, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) {\n checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308)\n }\n ieee754.write(buf, value, offset, littleEndian, 52, 8)\n return offset + 8\n}\n\nBuffer.prototype.writeDoubleLE = function writeDoubleLE (value, offset, noAssert) {\n return writeDouble(this, value, offset, true, noAssert)\n}\n\nBuffer.prototype.writeDoubleBE = function writeDoubleBE (value, offset, noAssert) {\n return writeDouble(this, value, offset, false, noAssert)\n}\n\n// copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length)\nBuffer.prototype.copy = function copy (target, targetStart, start, end) {\n if (!Buffer.isBuffer(target)) throw new TypeError('argument should be a Buffer')\n if (!start) start = 0\n if (!end && end !== 0) end = this.length\n if (targetStart >= target.length) targetStart = target.length\n if (!targetStart) targetStart = 0\n if (end > 0 && end < start) end = start\n\n // Copy 0 bytes; we're done\n if (end === start) return 0\n if (target.length === 0 || this.length === 0) return 0\n\n // Fatal error conditions\n if (targetStart < 0) {\n throw new RangeError('targetStart out of bounds')\n }\n if (start < 0 || start >= this.length) throw new RangeError('Index out of range')\n if (end < 0) throw new RangeError('sourceEnd out of bounds')\n\n // Are we oob?\n if (end > this.length) end = this.length\n if (target.length - targetStart < end - start) {\n end = target.length - targetStart + start\n }\n\n const len = end - start\n\n if (this === target && typeof Uint8Array.prototype.copyWithin === 'function') {\n // Use built-in when available, missing from IE11\n this.copyWithin(targetStart, start, end)\n } else {\n Uint8Array.prototype.set.call(\n target,\n this.subarray(start, end),\n targetStart\n )\n }\n\n return len\n}\n\n// Usage:\n// buffer.fill(number[, offset[, end]])\n// buffer.fill(buffer[, offset[, end]])\n// buffer.fill(string[, offset[, end]][, encoding])\nBuffer.prototype.fill = function fill (val, start, end, encoding) {\n // Handle string cases:\n if (typeof val === 'string') {\n if (typeof start === 'string') {\n encoding = start\n start = 0\n end = this.length\n } else if (typeof end === 'string') {\n encoding = end\n end = this.length\n }\n if (encoding !== undefined && typeof encoding !== 'string') {\n throw new TypeError('encoding must be a string')\n }\n if (typeof encoding === 'string' && !Buffer.isEncoding(encoding)) {\n throw new TypeError('Unknown encoding: ' + encoding)\n }\n if (val.length === 1) {\n const code = val.charCodeAt(0)\n if ((encoding === 'utf8' && code < 128) ||\n encoding === 'latin1') {\n // Fast path: If `val` fits into a single byte, use that numeric value.\n val = code\n }\n }\n } else if (typeof val === 'number') {\n val = val & 255\n } else if (typeof val === 'boolean') {\n val = Number(val)\n }\n\n // Invalid ranges are not set to a default, so can range check early.\n if (start < 0 || this.length < start || this.length < end) {\n throw new RangeError('Out of range index')\n }\n\n if (end <= start) {\n return this\n }\n\n start = start >>> 0\n end = end === undefined ? this.length : end >>> 0\n\n if (!val) val = 0\n\n let i\n if (typeof val === 'number') {\n for (i = start; i < end; ++i) {\n this[i] = val\n }\n } else {\n const bytes = Buffer.isBuffer(val)\n ? val\n : Buffer.from(val, encoding)\n const len = bytes.length\n if (len === 0) {\n throw new TypeError('The value \"' + val +\n '\" is invalid for argument \"value\"')\n }\n for (i = 0; i < end - start; ++i) {\n this[i + start] = bytes[i % len]\n }\n }\n\n return this\n}\n\n// CUSTOM ERRORS\n// =============\n\n// Simplified versions from Node, changed for Buffer-only usage\nconst errors = {}\nfunction E (sym, getMessage, Base) {\n errors[sym] = class NodeError extends Base {\n constructor () {\n super()\n\n Object.defineProperty(this, 'message', {\n value: getMessage.apply(this, arguments),\n writable: true,\n configurable: true\n })\n\n // Add the error code to the name to include it in the stack trace.\n this.name = `${this.name} [${sym}]`\n // Access the stack to generate the error message including the error code\n // from the name.\n this.stack // eslint-disable-line no-unused-expressions\n // Reset the name to the actual name.\n delete this.name\n }\n\n get code () {\n return sym\n }\n\n set code (value) {\n Object.defineProperty(this, 'code', {\n configurable: true,\n enumerable: true,\n value,\n writable: true\n })\n }\n\n toString () {\n return `${this.name} [${sym}]: ${this.message}`\n }\n }\n}\n\nE('ERR_BUFFER_OUT_OF_BOUNDS',\n function (name) {\n if (name) {\n return `${name} is outside of buffer bounds`\n }\n\n return 'Attempt to access memory outside buffer bounds'\n }, RangeError)\nE('ERR_INVALID_ARG_TYPE',\n function (name, actual) {\n return `The \"${name}\" argument must be of type number. Received type ${typeof actual}`\n }, TypeError)\nE('ERR_OUT_OF_RANGE',\n function (str, range, input) {\n let msg = `The value of \"${str}\" is out of range.`\n let received = input\n if (Number.isInteger(input) && Math.abs(input) > 2 ** 32) {\n received = addNumericalSeparator(String(input))\n } else if (typeof input === 'bigint') {\n received = String(input)\n if (input > BigInt(2) ** BigInt(32) || input < -(BigInt(2) ** BigInt(32))) {\n received = addNumericalSeparator(received)\n }\n received += 'n'\n }\n msg += ` It must be ${range}. Received ${received}`\n return msg\n }, RangeError)\n\nfunction addNumericalSeparator (val) {\n let res = ''\n let i = val.length\n const start = val[0] === '-' ? 1 : 0\n for (; i >= start + 4; i -= 3) {\n res = `_${val.slice(i - 3, i)}${res}`\n }\n return `${val.slice(0, i)}${res}`\n}\n\n// CHECK FUNCTIONS\n// ===============\n\nfunction checkBounds (buf, offset, byteLength) {\n validateNumber(offset, 'offset')\n if (buf[offset] === undefined || buf[offset + byteLength] === undefined) {\n boundsError(offset, buf.length - (byteLength + 1))\n }\n}\n\nfunction checkIntBI (value, min, max, buf, offset, byteLength) {\n if (value > max || value < min) {\n const n = typeof min === 'bigint' ? 'n' : ''\n let range\n if (byteLength > 3) {\n if (min === 0 || min === BigInt(0)) {\n range = `>= 0${n} and < 2${n} ** ${(byteLength + 1) * 8}${n}`\n } else {\n range = `>= -(2${n} ** ${(byteLength + 1) * 8 - 1}${n}) and < 2 ** ` +\n `${(byteLength + 1) * 8 - 1}${n}`\n }\n } else {\n range = `>= ${min}${n} and <= ${max}${n}`\n }\n throw new errors.ERR_OUT_OF_RANGE('value', range, value)\n }\n checkBounds(buf, offset, byteLength)\n}\n\nfunction validateNumber (value, name) {\n if (typeof value !== 'number') {\n throw new errors.ERR_INVALID_ARG_TYPE(name, 'number', value)\n }\n}\n\nfunction boundsError (value, length, type) {\n if (Math.floor(value) !== value) {\n validateNumber(value, type)\n throw new errors.ERR_OUT_OF_RANGE(type || 'offset', 'an integer', value)\n }\n\n if (length < 0) {\n throw new errors.ERR_BUFFER_OUT_OF_BOUNDS()\n }\n\n throw new errors.ERR_OUT_OF_RANGE(type || 'offset',\n `>= ${type ? 1 : 0} and <= ${length}`,\n value)\n}\n\n// HELPER FUNCTIONS\n// ================\n\nconst INVALID_BASE64_RE = /[^+/0-9A-Za-z-_]/g\n\nfunction base64clean (str) {\n // Node takes equal signs as end of the Base64 encoding\n str = str.split('=')[0]\n // Node strips out invalid characters like \\n and \\t from the string, base64-js does not\n str = str.trim().replace(INVALID_BASE64_RE, '')\n // Node converts strings with length < 2 to ''\n if (str.length < 2) return ''\n // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not\n while (str.length % 4 !== 0) {\n str = str + '='\n }\n return str\n}\n\nfunction utf8ToBytes (string, units) {\n units = units || Infinity\n let codePoint\n const length = string.length\n let leadSurrogate = null\n const bytes = []\n\n for (let i = 0; i < length; ++i) {\n codePoint = string.charCodeAt(i)\n\n // is surrogate component\n if (codePoint > 0xD7FF && codePoint < 0xE000) {\n // last char was a lead\n if (!leadSurrogate) {\n // no lead yet\n if (codePoint > 0xDBFF) {\n // unexpected trail\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n continue\n } else if (i + 1 === length) {\n // unpaired lead\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n continue\n }\n\n // valid lead\n leadSurrogate = codePoint\n\n continue\n }\n\n // 2 leads in a row\n if (codePoint < 0xDC00) {\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n leadSurrogate = codePoint\n continue\n }\n\n // valid surrogate pair\n codePoint = (leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00) + 0x10000\n } else if (leadSurrogate) {\n // valid bmp char, but last char was a lead\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n }\n\n leadSurrogate = null\n\n // encode utf8\n if (codePoint < 0x80) {\n if ((units -= 1) < 0) break\n bytes.push(codePoint)\n } else if (codePoint < 0x800) {\n if ((units -= 2) < 0) break\n bytes.push(\n codePoint >> 0x6 | 0xC0,\n codePoint & 0x3F | 0x80\n )\n } else if (codePoint < 0x10000) {\n if ((units -= 3) < 0) break\n bytes.push(\n codePoint >> 0xC | 0xE0,\n codePoint >> 0x6 & 0x3F | 0x80,\n codePoint & 0x3F | 0x80\n )\n } else if (codePoint < 0x110000) {\n if ((units -= 4) < 0) break\n bytes.push(\n codePoint >> 0x12 | 0xF0,\n codePoint >> 0xC & 0x3F | 0x80,\n codePoint >> 0x6 & 0x3F | 0x80,\n codePoint & 0x3F | 0x80\n )\n } else {\n throw new Error('Invalid code point')\n }\n }\n\n return bytes\n}\n\nfunction asciiToBytes (str) {\n const byteArray = []\n for (let i = 0; i < str.length; ++i) {\n // Node's code seems to be doing this and not & 0x7F..\n byteArray.push(str.charCodeAt(i) & 0xFF)\n }\n return byteArray\n}\n\nfunction utf16leToBytes (str, units) {\n let c, hi, lo\n const byteArray = []\n for (let i = 0; i < str.length; ++i) {\n if ((units -= 2) < 0) break\n\n c = str.charCodeAt(i)\n hi = c >> 8\n lo = c % 256\n byteArray.push(lo)\n byteArray.push(hi)\n }\n\n return byteArray\n}\n\nfunction base64ToBytes (str) {\n return base64.toByteArray(base64clean(str))\n}\n\nfunction blitBuffer (src, dst, offset, length) {\n let i\n for (i = 0; i < length; ++i) {\n if ((i + offset >= dst.length) || (i >= src.length)) break\n dst[i + offset] = src[i]\n }\n return i\n}\n\n// ArrayBuffer or Uint8Array objects from other contexts (i.e. iframes) do not pass\n// the `instanceof` check but they should be treated as of that type.\n// See: https://github.com/feross/buffer/issues/166\nfunction isInstance (obj, type) {\n return obj instanceof type ||\n (obj != null && obj.constructor != null && obj.constructor.name != null &&\n obj.constructor.name === type.name)\n}\nfunction numberIsNaN (obj) {\n // For IE11 support\n return obj !== obj // eslint-disable-line no-self-compare\n}\n\n// Create lookup table for `toString('hex')`\n// See: https://github.com/feross/buffer/issues/219\nconst hexSliceLookupTable = (function () {\n const alphabet = '0123456789abcdef'\n const table = new Array(256)\n for (let i = 0; i < 16; ++i) {\n const i16 = i * 16\n for (let j = 0; j < 16; ++j) {\n table[i16 + j] = alphabet[i] + alphabet[j]\n }\n }\n return table\n})()\n\n// Return not function with Error if BigInt not supported\nfunction defineBigIntMethod (fn) {\n return typeof BigInt === 'undefined' ? BufferBigIntNotDefined : fn\n}\n\nfunction BufferBigIntNotDefined () {\n throw new Error('BigInt not supported')\n}\n","const RDF = 'http://www.w3.org/1999/02/22-rdf-syntax-ns#',\n XSD = 'http://www.w3.org/2001/XMLSchema#',\n SWAP = 'http://www.w3.org/2000/10/swap/';\n\nexport default {\n xsd: {\n decimal: `${XSD}decimal`,\n boolean: `${XSD}boolean`,\n double: `${XSD}double`,\n integer: `${XSD}integer`,\n string: `${XSD}string`,\n },\n rdf: {\n type: `${RDF}type`,\n nil: `${RDF}nil`,\n first: `${RDF}first`,\n rest: `${RDF}rest`,\n langString: `${RDF}langString`,\n dirLangString: `${RDF}dirLangString`,\n reifies: `${RDF}reifies`,\n },\n owl: {\n sameAs: 'http://www.w3.org/2002/07/owl#sameAs',\n },\n r: {\n forSome: `${SWAP}reify#forSome`,\n forAll: `${SWAP}reify#forAll`,\n },\n log: {\n implies: `${SWAP}log#implies`,\n isImpliedBy: `${SWAP}log#isImpliedBy`,\n },\n};\n","// **N3Lexer** tokenizes N3 documents.\nimport { Buffer } from 'buffer';\nimport namespaces from './IRIs';\n\nconst { xsd } = namespaces;\n\n// Regular expression and replacement string to escape N3 strings\nconst escapeSequence = /\\\\u([a-fA-F0-9]{4})|\\\\U([a-fA-F0-9]{8})|\\\\([^])/g;\nconst escapeReplacements = {\n '\\\\': '\\\\', \"'\": \"'\", '\"': '\"',\n 'n': '\\n', 'r': '\\r', 't': '\\t', 'f': '\\f', 'b': '\\b',\n '_': '_', '~': '~', '.': '.', '-': '-', '!': '!', '$': '$', '&': '&',\n '(': '(', ')': ')', '*': '*', '+': '+', ',': ',', ';': ';', '=': '=',\n '/': '/', '?': '?', '#': '#', '@': '@', '%': '%',\n};\nconst illegalIriChars = /[\\x00-\\x20<>\\\\\"\\{\\}\\|\\^\\`]/;\n\nconst lineModeRegExps = {\n _iri: true,\n _unescapedIri: true,\n _simpleQuotedString: true,\n _langcode: true,\n _dircode: true,\n _blank: true,\n _newline: true,\n _comment: true,\n _whitespace: true,\n _endOfFile: true,\n};\nconst invalidRegExp = /$0^/;\n\n// ## Constructor\nexport default class N3Lexer {\n constructor(options) {\n // ## Regular expressions\n // It's slightly faster to have these as properties than as in-scope variables\n this._iri = /^<((?:[^ <>{}\\\\]|\\\\[uU])+)>[ \\t]*/; // IRI with escape sequences; needs sanity check after unescaping\n this._unescapedIri = /^<([^\\x00-\\x20<>\\\\\"\\{\\}\\|\\^\\`]*)>[ \\t]*/; // IRI without escape sequences; no unescaping\n this._simpleQuotedString = /^\"([^\"\\\\\\r\\n]*)\"(?=[^\"])/; // string without escape sequences\n this._simpleApostropheString = /^'([^'\\\\\\r\\n]*)'(?=[^'])/;\n this._langcode = /^@([a-z]+(?:-[a-z0-9]+)*)(?=[^a-z0-9])/i;\n this._dircode = /^--(ltr)|(rtl)/;\n this._prefix = /^((?:[A-Za-z\\xc0-\\xd6\\xd8-\\xf6\\xf8-\\u02ff\\u0370-\\u037d\\u037f-\\u1fff\\u200c\\u200d\\u2070-\\u218f\\u2c00-\\u2fef\\u3001-\\ud7ff\\uf900-\\ufdcf\\ufdf0-\\ufffd]|[\\ud800-\\udb7f][\\udc00-\\udfff])(?:\\.?[\\-0-9A-Z_a-z\\xb7\\xc0-\\xd6\\xd8-\\xf6\\xf8-\\u037d\\u037f-\\u1fff\\u200c\\u200d\\u203f\\u2040\\u2070-\\u218f\\u2c00-\\u2fef\\u3001-\\ud7ff\\uf900-\\ufdcf\\ufdf0-\\ufffd]|[\\ud800-\\udb7f][\\udc00-\\udfff])*)?:(?=[#\\s<])/;\n this._prefixed = /^((?:[A-Za-z\\xc0-\\xd6\\xd8-\\xf6\\xf8-\\u02ff\\u0370-\\u037d\\u037f-\\u1fff\\u200c\\u200d\\u2070-\\u218f\\u2c00-\\u2fef\\u3001-\\ud7ff\\uf900-\\ufdcf\\ufdf0-\\ufffd]|[\\ud800-\\udb7f][\\udc00-\\udfff])(?:\\.?[\\-0-9A-Z_a-z\\xb7\\xc0-\\xd6\\xd8-\\xf6\\xf8-\\u037d\\u037f-\\u1fff\\u200c\\u200d\\u203f\\u2040\\u2070-\\u218f\\u2c00-\\u2fef\\u3001-\\ud7ff\\uf900-\\ufdcf\\ufdf0-\\ufffd]|[\\ud800-\\udb7f][\\udc00-\\udfff])*)?:((?:(?:[0-:A-Z_a-z\\xc0-\\xd6\\xd8-\\xf6\\xf8-\\u02ff\\u0370-\\u037d\\u037f-\\u1fff\\u200c\\u200d\\u2070-\\u218f\\u2c00-\\u2fef\\u3001-\\ud7ff\\uf900-\\ufdcf\\ufdf0-\\ufffd]|[\\ud800-\\udb7f][\\udc00-\\udfff]|%[0-9a-fA-F]{2}|\\\\[!#-\\/;=?\\-@_~])(?:(?:[\\.\\-0-:A-Z_a-z\\xb7\\xc0-\\xd6\\xd8-\\xf6\\xf8-\\u037d\\u037f-\\u1fff\\u200c\\u200d\\u203f\\u2040\\u2070-\\u218f\\u2c00-\\u2fef\\u3001-\\ud7ff\\uf900-\\ufdcf\\ufdf0-\\ufffd]|[\\ud800-\\udb7f][\\udc00-\\udfff]|%[0-9a-fA-F]{2}|\\\\[!#-\\/;=?\\-@_~])*(?:[\\-0-:A-Z_a-z\\xb7\\xc0-\\xd6\\xd8-\\xf6\\xf8-\\u037d\\u037f-\\u1fff\\u200c\\u200d\\u203f\\u2040\\u2070-\\u218f\\u2c00-\\u2fef\\u3001-\\ud7ff\\uf900-\\ufdcf\\ufdf0-\\ufffd]|[\\ud800-\\udb7f][\\udc00-\\udfff]|%[0-9a-fA-F]{2}|\\\\[!#-\\/;=?\\-@_~]))?)?)(?:[ \\t]+|(?=\\.?[,;!\\^\\s#()\\[\\]\\{\\}\"'<>]))/;\n this._variable = /^\\?(?:(?:[A-Z_a-z\\xc0-\\xd6\\xd8-\\xf6\\xf8-\\u02ff\\u0370-\\u037d\\u037f-\\u1fff\\u200c\\u200d\\u2070-\\u218f\\u2c00-\\u2fef\\u3001-\\ud7ff\\uf900-\\ufdcf\\ufdf0-\\ufffd]|[\\ud800-\\udb7f][\\udc00-\\udfff])(?:[\\-0-:A-Z_a-z\\xb7\\xc0-\\xd6\\xd8-\\xf6\\xf8-\\u037d\\u037f-\\u1fff\\u200c\\u200d\\u203f\\u2040\\u2070-\\u218f\\u2c00-\\u2fef\\u3001-\\ud7ff\\uf900-\\ufdcf\\ufdf0-\\ufffd]|[\\ud800-\\udb7f][\\udc00-\\udfff])*)(?=[.,;!\\^\\s#()\\[\\]\\{\\}\"'<>])/;\n this._blank = /^_:((?:[0-9A-Z_a-z\\xc0-\\xd6\\xd8-\\xf6\\xf8-\\u02ff\\u0370-\\u037d\\u037f-\\u1fff\\u200c\\u200d\\u2070-\\u218f\\u2c00-\\u2fef\\u3001-\\ud7ff\\uf900-\\ufdcf\\ufdf0-\\ufffd]|[\\ud800-\\udb7f][\\udc00-\\udfff])(?:\\.?[\\-0-9A-Z_a-z\\xb7\\xc0-\\xd6\\xd8-\\xf6\\xf8-\\u037d\\u037f-\\u1fff\\u200c\\u200d\\u203f\\u2040\\u2070-\\u218f\\u2c00-\\u2fef\\u3001-\\ud7ff\\uf900-\\ufdcf\\ufdf0-\\ufffd]|[\\ud800-\\udb7f][\\udc00-\\udfff])*)(?:[ \\t]+|(?=\\.?[,;:\\s#()\\[\\]\\{\\}\"'<>]))/;\n this._number = /^[\\-+]?(?:(\\d+\\.\\d*|\\.?\\d+)[eE][\\-+]?|\\d*(\\.)?)\\d+(?=\\.?[,;:\\s#()\\[\\]\\{\\}\"'<>])/;\n this._boolean = /^(?:true|false)(?=[.,;\\s#()\\[\\]\\{\\}\"'<>])/;\n this._atKeyword = /^@[a-z]+(?=[\\s#<:])/i;\n this._keyword = /^(?:PREFIX|BASE|VERSION|GRAPH)(?=[\\s#<])/i;\n this._shortPredicates = /^a(?=[\\s#()\\[\\]\\{\\}\"'<>])/;\n this._newline = /^[ \\t]*(?:#[^\\n\\r]*)?(?:\\r\\n|\\n|\\r)[ \\t]*/;\n this._comment = /#([^\\n\\r]*)/;\n this._whitespace = /^[ \\t]+/;\n this._endOfFile = /^(?:#[^\\n\\r]*)?$/;\n options = options || {};\n\n // Whether the log:isImpliedBy predicate is supported\n this._isImpliedBy = options.isImpliedBy;\n\n // In line mode (N-Triples or N-Quads), only simple features may be parsed\n if (this._lineMode = !!options.lineMode) {\n this._n3Mode = false;\n // Don't tokenize special literals\n for (const key in this) {\n if (!(key in lineModeRegExps) && this[key] instanceof RegExp)\n this[key] = invalidRegExp;\n }\n }\n // When not in line mode, enable N3 functionality by default\n else {\n this._n3Mode = options.n3 !== false;\n }\n // Don't output comment tokens by default\n this.comments = !!options.comments;\n // Cache the last tested closing position of long literals\n this._literalClosingPos = 0;\n }\n\n // ## Private methods\n\n // ### `_tokenizeToEnd` tokenizes as for as possible, emitting tokens through the callback\n _tokenizeToEnd(callback, inputFinished) {\n // Continue parsing as far as possible; the loop will return eventually\n let input = this._input;\n let currentLineLength = input.length;\n while (true) {\n // Count and skip whitespace lines\n let whiteSpaceMatch, comment;\n while (whiteSpaceMatch = this._newline.exec(input)) {\n // Try to find a comment\n if (this.comments && (comment = this._comment.exec(whiteSpaceMatch[0])))\n emitToken('comment', comment[1], '', this._line, whiteSpaceMatch[0].length);\n // Advance the input\n input = input.substr(whiteSpaceMatch[0].length, input.length);\n currentLineLength = input.length;\n this._line++;\n }\n // Skip whitespace on current line\n if (!whiteSpaceMatch && (whiteSpaceMatch = this._whitespace.exec(input)))\n input = input.substr(whiteSpaceMatch[0].length, input.length);\n\n // Stop for now if we're at the end\n if (this._endOfFile.test(input)) {\n // If the input is finished, emit EOF\n if (inputFinished) {\n // Try to find a final comment\n if (this.comments && (comment = this._comment.exec(input)))\n emitToken('comment', comment[1], '', this._line, input.length);\n input = null;\n emitToken('eof', '', '', this._line, 0);\n }\n return this._input = input;\n }\n\n // Look for specific token types based on the first character\n const line = this._line, firstChar = input[0];\n let type = '', value = '', prefix = '',\n match = null, matchLength = 0, inconclusive = false;\n switch (firstChar) {\n case '^':\n // We need at least 3 tokens lookahead to distinguish ^^<IRI> and ^^pre:fixed\n if (input.length < 3)\n break;\n // Try to match a type\n else if (input[1] === '^') {\n this._previousMarker = '^^';\n // Move to type IRI or prefixed name\n input = input.substr(2);\n if (input[0] !== '<') {\n inconclusive = true;\n break;\n }\n }\n // If no type, it must be a path expression\n else {\n if (this._n3Mode) {\n matchLength = 1;\n type = '^';\n }\n break;\n }\n // Fall through in case the type is an IRI\n case '<':\n // Try to find a full IRI without escape sequences\n if (match = this._unescapedIri.exec(input))\n type = 'IRI', value = match[1];\n // Try to find a full IRI with escape sequences\n else if (match = this._iri.exec(input)) {\n value = this._unescape(match[1]);\n if (value === null || illegalIriChars.test(value))\n return reportSyntaxError(this);\n type = 'IRI';\n }\n // Try to find a triple term\n else if (input.length > 2 && input[1] === '<' && input[2] === '(')\n type = '<<(', matchLength = 3;\n // Try to find a reified triple\n else if (!this._lineMode && input.length > (inputFinished ? 1 : 2) && input[1] === '<')\n type = '<<', matchLength = 2;\n // Try to find a backwards implication arrow\n else if (this._n3Mode && input.length > 1 && input[1] === '=') {\n matchLength = 2;\n if (this._isImpliedBy) type = 'abbreviation', value = '<';\n else type = 'inverse', value = '>';\n }\n break;\n\n case '>':\n // Try to find a reified triple\n if (input.length > 1 && input[1] === '>')\n type = '>>', matchLength = 2;\n break;\n\n case '_':\n // Try to find a blank node. Since it can contain (but not end with) a dot,\n // we always need a non-dot character before deciding it is a blank node.\n // Therefore, try inserting a space if we're at the end of the input.\n if ((match = this._blank.exec(input)) ||\n inputFinished && (match = this._blank.exec(`${input} `)))\n type = 'blank', prefix = '_', value = match[1];\n break;\n\n case '\"':\n // Try to find a literal without escape sequences\n if (match = this._simpleQuotedString.exec(input))\n value = match[1];\n // Try to find a literal wrapped in three pairs of quotes\n else {\n ({ value, matchLength } = this._parseLiteral(input));\n if (value === null)\n return reportSyntaxError(this);\n }\n if (match !== null || matchLength !== 0) {\n type = 'literal';\n this._literalClosingPos = 0;\n }\n break;\n\n case \"'\":\n if (!this._lineMode) {\n // Try to find a literal without escape sequences\n if (match = this._simpleApostropheString.exec(input))\n value = match[1];\n // Try to find a literal wrapped in three pairs of quotes\n else {\n ({ value, matchLength } = this._parseLiteral(input));\n if (value === null)\n return reportSyntaxError(this);\n }\n if (match !== null || matchLength !== 0) {\n type = 'literal';\n this._literalClosingPos = 0;\n }\n }\n break;\n\n case '?':\n // Try to find a variable\n if (this._n3Mode && (match = this._variable.exec(input)))\n type = 'var', value = match[0];\n break;\n\n case '@':\n // Try to find a language code\n if (this._previousMarker === 'literal' && (match = this._langcode.exec(input)) && match[1] !== 'version')\n type = 'langcode', value = match[1];\n // Try to find a keyword\n else if (match = this._atKeyword.exec(input))\n type = match[0];\n break;\n\n case '.':\n // Try to find a dot as punctuation\n if (input.length === 1 ? inputFinished : (input[1] < '0' || input[1] > '9')) {\n type = '.';\n matchLength = 1;\n break;\n }\n // Fall through to numerical case (could be a decimal dot)\n\n case '0':\n case '1':\n case '2':\n case '3':\n case '4':\n case '5':\n case '6':\n case '7':\n case '8':\n case '9':\n case '+':\n case '-':\n if (input[1] === '-') {\n // Try to find a direction code\n if (this._previousMarker === 'langcode' && (match = this._dircode.exec(input)))\n type = 'dircode', matchLength = 2, value = (match[1] || match[2]), matchLength = value.length + 2;\n break;\n }\n\n // Try to find a number. Since it can contain (but not end with) a dot,\n // we always need a non-dot character before deciding it is a number.\n // Therefore, try inserting a space if we're at the end of the input.\n if (match = this._number.exec(input) ||\n inputFinished && (match = this._number.exec(`${input} `))) {\n type = 'literal', value = match[0];\n prefix = (typeof match[1] === 'string' ? xsd.double :\n (typeof match[2] === 'string' ? xsd.decimal : xsd.integer));\n }\n break;\n\n case 'B':\n case 'b':\n case 'p':\n case 'P':\n case 'G':\n case 'g':\n case 'V':\n case 'v':\n // Try to find a SPARQL-style keyword\n if (match = this._keyword.exec(input))\n type = match[0].toUpperCase();\n else\n inconclusive = true;\n break;\n\n case 'f':\n case 't':\n // Try to match a boolean\n if (match = this._boolean.exec(input))\n type = 'literal', value = match[0], prefix = xsd.boolean;\n else\n inconclusive = true;\n break;\n\n case 'a':\n // Try to find an abbreviated predicate\n if (match = this._shortPredicates.exec(input))\n type = 'abbreviation', value = 'a';\n else\n inconclusive = true;\n break;\n\n case '=':\n // Try to find an implication arrow or equals sign\n if (this._n3Mode && input.length > 1) {\n type = 'abbreviation';\n if (input[1] !== '>')\n matchLength = 1, value = '=';\n else\n matchLength = 2, value = '>';\n }\n break;\n\n case '!':\n if (!this._n3Mode)\n break;\n case ')':\n if (!inputFinished && (input.length === 1 || (input.length === 2 && input[1] === '>'))) {\n // Don't consume yet, as it *could* become a triple term end.\n break;\n }\n // Try to find a triple term\n if (input.length > 2 && input[1] === '>' && input[2] === '>') {\n type = ')>>', matchLength = 3;\n break;\n }\n case ',':\n case ';':\n case '[':\n case ']':\n case '(':\n case '}':\n case '~':\n if (!this._lineMode) {\n matchLength = 1;\n type = firstChar;\n }\n break;\n case '{':\n // We need at least 2 tokens lookahead to distinguish \"{|\" and \"{ \"\n if (!this._lineMode && input.length >= 2) {\n // Try to find a quoted triple annotation start\n if (input[1] === '|')\n type = '{|', matchLength = 2;\n else\n type = firstChar, matchLength = 1;\n }\n break;\n case '|':\n // We need 2 tokens lookahead to parse \"|}\"\n // Try to find a quoted triple annotation end\n if (input.length >= 2 && input[1] === '}')\n type = '|}', matchLength = 2;\n break;\n\n default:\n inconclusive = true;\n }\n\n // Some first characters do not allow an immediate decision, so inspect more\n if (inconclusive) {\n // Try to find a prefix\n if ((this._previousMarker === '@prefix' || this._previousMarker === 'PREFIX') &&\n (match = this._prefix.exec(input)))\n type = 'prefix', value = match[1] || '';\n // Try to find a prefixed name. Since it can contain (but not end with) a dot,\n // we always need a non-dot character before deciding it is a prefixed name.\n // Therefore, try inserting a space if we're at the end of the input.\n else if ((match = this._prefixed.exec(input)) ||\n inputFinished && (match = this._prefixed.exec(`${input} `)))\n type = 'prefixed', prefix = match[1] || '', value = this._unescape(match[2]);\n }\n\n // A type token is special: it can only be emitted after an IRI or prefixed name is read\n if (this._previousMarker === '^^') {\n switch (type) {\n case 'prefixed': type = 'type'; break;\n case 'IRI': type = 'typeIRI'; break;\n default: type = '';\n }\n }\n\n // What if nothing of the above was found?\n if (!type) {\n // We could be in streaming mode, and then we just wait for more input to arrive.\n // Otherwise, a syntax error has occurred in the input.\n // One exception: error on an unaccounted linebreak (= not inside a triple-quoted literal).\n if (inputFinished || (!/^'''|^\"\"\"/.test(input) && /\\n|\\r/.test(input)))\n return reportSyntaxError(this);\n else\n return this._input = input;\n }\n\n // Emit the parsed token\n const length = matchLength || match[0].length;\n const token = emitToken(type, value, prefix, line, length);\n this.previousToken = token;\n this._previousMarker = type;\n\n // Advance to next part to tokenize\n input = input.substr(length, input.length);\n }\n\n // Emits the token through the callback\n function emitToken(type, value, prefix, line, length) {\n const start = input ? currentLineLength - input.length : currentLineLength;\n const end = start + length;\n const token = { type, value, prefix, line, start, end };\n callback(null, token);\n return token;\n }\n // Signals the syntax error through the callback\n function reportSyntaxError(self) { callback(self._syntaxError(/^\\S*/.exec(input)[0])); }\n }\n\n // ### `_unescape` replaces N3 escape codes by their corresponding characters\n _unescape(item) {\n let invalid = false;\n const replaced = item.replace(escapeSequence, (sequence, unicode4, unicode8, escapedChar) => {\n // 4-digit unicode character\n if (typeof unicode4 === 'string')\n return String.fromCharCode(Number.parseInt(unicode4, 16));\n // 8-digit unicode character\n if (typeof unicode8 === 'string') {\n let charCode = Number.parseInt(unicode8, 16);\n return charCode <= 0xFFFF ? String.fromCharCode(Number.parseInt(unicode8, 16)) :\n String.fromCharCode(0xD800 + ((charCode -= 0x10000) >> 10), 0xDC00 + (charCode & 0x3FF));\n }\n // fixed escape sequence\n if (escapedChar in escapeReplacements)\n return escapeReplacements[escapedChar];\n // invalid escape sequence\n invalid = true;\n return '';\n });\n return invalid ? null : replaced;\n }\n\n // ### `_parseLiteral` parses a literal into an unescaped value\n _parseLiteral(input) {\n // Ensure we have enough lookahead to identify triple-quoted strings\n if (input.length >= 3) {\n // Identify the opening quote(s)\n const opening = input.match(/^(?:\"\"\"|\"|'''|'|)/)[0];\n const openingLength = opening.length;\n\n // Find the next candidate closing quotes\n let closingPos = Math.max(this._literalClosingPos, openingLength);\n while ((closingPos = input.indexOf(opening, closingPos)) > 0) {\n // Count backslashes right before the closing quotes\n let backslashCount = 0;\n while (input[closingPos - backslashCount - 1] === '\\\\')\n backslashCount++;\n\n // An even number of backslashes (in particular 0)\n // means these are actual, non-escaped closing quotes\n if (backslashCount % 2 === 0) {\n // Extract and unescape the value\n const raw = input.substring(openingLength, closingPos);\n const lines = raw.split(/\\r\\n|\\r|\\n/).length - 1;\n const matchLength = closingPos + openingLength;\n // Only triple-quoted strings can be multi-line\n if (openingLength === 1 && lines !== 0 ||\n openingLength === 3 && this._lineMode)\n break;\n this._line += lines;\n return { value: this._unescape(raw), matchLength };\n }\n closingPos++;\n }\n this._literalClosingPos = input.length - openingLength + 1;\n }\n return { value: '', matchLength: 0 };\n }\n\n // ### `_syntaxError` creates a syntax error for the given issue\n _syntaxError(issue) {\n this._input = null;\n const err = new Error(`Unexpected \"${issue}\" on line ${this._line}.`);\n err.context = {\n token: undefined,\n line: this._line,\n previousToken: this.previousToken,\n };\n return err;\n }\n\n // ### Strips off any starting UTF BOM mark.\n _readStartingBom(input) {\n return input.startsWith('\\ufeff') ? input.substr(1) : input;\n }\n\n // ## Public methods\n\n // ### `tokenize` starts the transformation of an N3 document into an array of tokens.\n // The input can be a string or a stream.\n tokenize(input, callback) {\n this._line = 1;\n\n // If the input is a string, continuously emit tokens through the callback until the end\n if (typeof input === 'string') {\n this._input = this._readStartingBom(input);\n // If a callback was passed, asynchronously call it\n if (typeof callback === 'function')\n queueMicrotask(() => this._tokenizeToEnd(callback, true));\n // If no callback was passed, tokenize synchronously and return\n else {\n const tokens = [];\n let error;\n this._tokenizeToEnd((e, t) => e ? (error = e) : tokens.push(t), true);\n if (error) throw error;\n return tokens;\n }\n }\n // Otherwise, the input must be a stream\n else {\n this._pendingBuffer = null;\n if (typeof input.setEncoding === 'function')\n input.setEncoding('utf8');\n // Adds the data chunk to the buffer and parses as far as possible\n input.on('data', data => {\n if (this._input !== null && data.length !== 0) {\n // Prepend any previous pending writes\n if (this._pendingBuffer) {\n data = Buffer.concat([this._pendingBuffer, data]);\n this._pendingBuffer = null;\n }\n // Hold if the buffer ends in an incomplete unicode sequence\n if (data[data.length - 1] & 0x80) {\n this._pendingBuffer = data;\n }\n // Otherwise, tokenize as far as possible\n else {\n // Only read a BOM at the start\n if (typeof this._input === 'undefined')\n this._input = this._readStartingBom(typeof data === 'string' ? data : data.toString());\n else\n this._input += data;\n this._tokenizeToEnd(callback, false);\n }\n }\n });\n // Parses until the end\n input.on('end', () => {\n if (typeof this._input === 'string')\n this._tokenizeToEnd(callback, true);\n });\n input.on('error', callback);\n }\n }\n}\n","// N3.js implementations of the RDF/JS core data types\n// See http://rdf.js.org/data-model-spec/\n\nimport namespaces from './IRIs';\n\nconst { rdf, xsd } = namespaces;\n\n// eslint-disable-next-line prefer-const\nlet DEFAULTGRAPH;\nlet _blankNodeCounter = 0;\n\nconst escapedLiteral = /^\"(.*\".*)(?=\"[^\"]*$)/;\n\n// ## DataFactory singleton\nconst DataFactory = {\n namedNode,\n blankNode,\n variable,\n literal,\n defaultGraph,\n quad,\n triple: quad,\n fromTerm,\n fromQuad,\n};\nexport default DataFactory;\n\n// ## Term constructor\nexport class Term {\n constructor(id) {\n this.id = id;\n }\n\n // ### The value of this term\n get value() {\n return this.id;\n }\n\n // ### Returns whether this object represents the same term as the other\n equals(other) {\n // If both terms were created by this library,\n // equality can be computed through ids\n if (other instanceof Term)\n return this.id === other.id;\n // Otherwise, compare term type and value\n return !!other && this.termType === other.termType &&\n this.value === other.value;\n }\n\n // ### Implement hashCode for Immutable.js, since we implement `equals`\n // https://immutable-js.com/docs/v4.0.0/ValueObject/#hashCode()\n hashCode() {\n return 0;\n }\n\n // ### Returns a plain object representation of this term\n toJSON() {\n return {\n termType: this.termType,\n value: this.value,\n };\n }\n}\n\n\n// ## NamedNode constructor\nexport class NamedNode extends Term {\n // ### The term type of this term\n get termType() {\n return 'NamedNode';\n }\n}\n\n// ## Literal constructor\nexport class Literal extends Term {\n // ### The term type of this term\n get termType() {\n return 'Literal';\n }\n\n // ### The text value of this literal\n get value() {\n return this.id.substring(1, this.id.lastIndexOf('\"'));\n }\n\n // ### The language of this literal\n get language() {\n // Find the last quotation mark (e.g., '\"abc\"@en-us')\n const id = this.id;\n let atPos = id.lastIndexOf('\"') + 1;\n const dirPos = id.lastIndexOf('--');\n // If \"@\" it follows, return the remaining substring; empty otherwise\n return atPos < id.length && id[atPos++] === '@' ? (dirPos > atPos ? id.substr(0, dirPos) : id).substr(atPos).toLowerCase() : '';\n }\n\n // ### The direction of this literal\n get direction() {\n // Find the last double dash after the closing quote (e.g., '\"abc\"@en-us--ltr')\n const id = this.id;\n const endPos = id.lastIndexOf('\"');\n const dirPos = id.lastIndexOf('--');\n return dirPos > endPos && dirPos + 2 < id.length ? id.substr(dirPos + 2).toLowerCase() : '';\n }\n\n // ### The datatype IRI of this literal\n get datatype() {\n return new NamedNode(this.datatypeString);\n }\n\n // ### The datatype string of this literal\n get datatypeString() {\n // Find the last quotation mark (e.g., '\"abc\"^^http://ex.org/types#t')\n const id = this.id, dtPos = id.lastIndexOf('\"') + 1;\n const char = dtPos < id.length ? id[dtPos] : '';\n // If \"^\" it follows, return the remaining substring\n return char === '^' ? id.substr(dtPos + 2) :\n // If \"@\" follows, return rdf:langString or rdf:dirLangString; xsd:string otherwise\n (char !== '@' ? xsd.string : (id.indexOf('--', dtPos) > 0 ? rdf.dirLangString : rdf.langString));\n }\n\n // ### Returns whether this object represents the same term as the other\n equals(other) {\n // If both literals were created by this library,\n // equality can be computed through ids\n if (other instanceof Literal)\n return this.id === other.id;\n // Otherwise, compare term type, value, language, and datatype\n return !!other && !!other.datatype &&\n this.termType === other.termType &&\n this.value === other.value &&\n this.language === other.language &&\n ((this.direction === other.direction) || (this.direction === '' && !other.direction)) &&\n this.datatype.value === other.datatype.value;\n }\n\n toJSON() {\n return {\n termType: this.termType,\n value: this.value,\n language: this.language,\n direction: this.direction,\n datatype: { termType: 'NamedNode', value: this.datatypeString },\n };\n }\n}\n\n// ## BlankNode constructor\nexport class BlankNode extends Term {\n constructor(name) {\n super(`_:${name}`);\n }\n\n // ### The term type of this term\n get termType() {\n return 'BlankNode';\n }\n\n // ### The name of this blank node\n get value() {\n return this.id.substr(2);\n }\n}\n\nexport class Variable extends Term {\n constructor(name) {\n super(`?${name}`);\n }\n\n // ### The term type of this term\n get termType() {\n return 'Variable';\n }\n\n // ### The name of this variable\n get value() {\n return this.id.substr(1);\n }\n}\n\n// ## DefaultGraph constructor\nexport class DefaultGraph extends Term {\n constructor() {\n super('');\n return DEFAULTGRAPH || this;\n }\n\n // ### The term type of this term\n get termType() {\n return 'DefaultGraph';\n }\n\n // ### Returns whether this object represents the same term as the other\n equals(other) {\n // If both terms were created by this library,\n // equality can be computed through strict equality;\n // otherwise, compare term types.\n return (this === other) || (!!other && (this.termType === other.termType));\n }\n}\n\n// ## DefaultGraph singleton\nDEFAULTGRAPH = new DefaultGraph();\n\n// ### Constructs a term from the given internal string ID\n// The third 'nested' parameter of this function is to aid\n// with recursion over nested terms. It should not be used\n// by consumers of this library.\n// See https://github.com/rdfjs/N3.js/pull/311#discussion_r1061042725\nexport function termFromId(id, factory, nested) {\n factory = factory || DataFactory;\n\n // Falsy value or empty string indicate the default graph\n if (!id)\n return factory.defaultGraph();\n\n // Identify the term type based on the first character\n switch (id[0]) {\n case '?':\n return factory.variable(id.substr(1));\n case '_':\n return factory.blankNode(id.substr(2));\n case '\"':\n // Shortcut for internal literals\n if (factory === DataFactory)\n return new Literal(id);\n // Literal without datatype or language\n if (id[id.length - 1] === '\"')\n return factory.literal(id.substr(1, id.length - 2));\n // Literal with datatype or language\n const endPos = id.lastIndexOf('\"', id.length - 1);\n let languageOrDatatype;\n if (id[endPos + 1] === '@') {\n languageOrDatatype = id.substr(endPos + 2);\n const dashDashIndex = languageOrDatatype.lastIndexOf('--');\n if (dashDashIndex > 0 && dashDashIndex < languageOrDatatype.length) {\n languageOrDatatype = {\n language: languageOrDatatype.substr(0, dashDashIndex),\n direction: languageOrDatatype.substr(dashDashIndex + 2),\n };\n }\n }\n else {\n languageOrDatatype = factory.namedNode(id.substr(endPos + 3));\n }\n return factory.literal(id.substr(1, endPos - 1),\n languageOrDatatype);\n case '[':\n id = JSON.parse(id);\n break;\n default:\n if (!nested || !Array.isArray(id)) {\n return factory.namedNode(id);\n }\n }\n return factory.quad(\n termFromId(id[0], factory, true),\n termFromId(id[1], factory, true),\n termFromId(id[2], factory, true),\n id[3] && termFromId(id[3], factory, true),\n );\n}\n\n// ### Constructs an internal string ID from the given term or ID string\n// The third 'nested' parameter of this function is to aid\n// with recursion over nested terms. It should not be used\n// by consumers of this library.\n// See https://github.com/rdfjs/N3.js/pull/311#discussion_r1061042725\nexport function termToId(term, nested) {\n if (typeof term === 'string')\n return term;\n if (term instanceof Term && term.termType !== 'Quad')\n return term.id;\n if (!term)\n return DEFAULTGRAPH.id;\n\n // Term instantiated with another library\n switch (term.termType) {\n case 'NamedNode': return term.value;\n case 'BlankNode': return `_:${term.value}`;\n case 'Variable': return `?${term.value}`;\n case 'DefaultGraph': return '';\n case 'Literal': return `\"${term.value}\"${\n term.language ? `@${term.language}${term.direction ? `--${term.direction}` : ''}` :\n (term.datatype && term.datatype.value !== xsd.string ? `^^${term.datatype.value}` : '')}`;\n case 'Quad':\n const res = [\n termToId(term.subject, true),\n termToId(term.predicate, true),\n termToId(term.object, true),\n ];\n if (term.graph && term.graph.termType !== 'DefaultGraph') {\n res.push(termToId(term.graph, true));\n }\n return nested ? res : JSON.stringify(res);\n default: throw new Error(`Unexpected termType: ${term.termType}`);\n }\n}\n\n\n// ## Quad constructor\nexport class Quad extends Term {\n constructor(subject, predicate, object, graph) {\n super('');\n this._subject = subject;\n this._predicate = predicate;\n this._object = object;\n this._graph = graph || DEFAULTGRAPH;\n }\n\n // ### The term type of this term\n get termType() {\n return 'Quad';\n }\n\n get subject() {\n return this._subject;\n }\n\n get predicate() {\n return this._predicate;\n }\n\n get object() {\n return this._object;\n }\n\n get graph() {\n return this._graph;\n }\n\n // ### Returns a plain object representation of this quad\n toJSON() {\n return {\n termType: this.termType,\n subject: this._subject.toJSON(),\n predicate: this._predicate.toJSON(),\n object: this._object.toJSON(),\n graph: this._graph.toJSON(),\n };\n }\n\n // ### Returns whether this object represents the same quad as the other\n equals(other) {\n return !!other && this._subject.equals(other.subject) &&\n this._predicate.equals(other.predicate) &&\n this._object.equals(other.object) &&\n this._graph.equals(other.graph);\n }\n}\nexport { Quad as Triple };\n\n// ### Escapes the quotes within the given literal\nexport function escapeQuotes(id) {\n return id.replace(escapedLiteral, (_, quoted) => `\"${quoted.replace(/\"/g, '\"\"')}`);\n}\n\n// ### Unescapes the quotes within the given literal\nexport function unescapeQuotes(id) {\n return id.replace(escapedLiteral, (_, quoted) => `\"${quoted.replace(/\"\"/g, '\"')}`);\n}\n\n// ### Creates an IRI\nfunction namedNode(iri) {\n return new NamedNode(iri);\n}\n\n// ### Creates a blank node\nfunction blankNode(name) {\n return new BlankNode(name || `n3-${_blankNodeCounter++}`);\n}\n\n// ### Creates a literal\nfunction literal(value, languageOrDataType) {\n // Create a language-tagged string\n if (typeof languageOrDataType === 'string')\n return new Literal(`\"${value}\"@${languageOrDataType.toLowerCase()}`);\n\n // Create a language-tagged string with base direction\n if (languageOrDataType !== undefined && !('termType' in languageOrDataType)) {\n return new Literal(`\"${value}\"@${languageOrDataType.language.toLowerCase()}${languageOrDataType.direction ? `--${languageOrDataType.direction.toLowerCase()}` : ''}`);\n }\n\n // Automatically determine datatype for booleans and numbers\n let datatype = languageOrDataType ? languageOrDataType.value : '';\n if (datatype === '') {\n // Convert a boolean\n if (typeof value === 'boolean')\n datatype = xsd.boolean;\n // Convert an integer or double\n else if (typeof value === 'number') {\n if (Number.isFinite(value))\n datatype = Number.isInteger(value) ? xsd.integer : xsd.double;\n else {\n datatype = xsd.double;\n if (!Number.isNaN(value))\n value = value > 0 ? 'INF' : '-INF';\n }\n }\n }\n\n // Create a datatyped literal\n return (datatype === '' || datatype === xsd.string) ?\n new Literal(`\"${value}\"`) :\n new Literal(`\"${value}\"^^${datatype}`);\n}\n\n// ### Creates a variable\nfunction variable(name) {\n return new Variable(name);\n}\n\n// ### Returns the default graph\nfunction defaultGraph() {\n return DEFAULTGRAPH;\n}\n\n// ### Creates a quad\nfunction quad(subject, predicate, object, graph) {\n return new Quad(subject, predicate, object, graph);\n}\n\nexport function fromTerm(term) {\n if (term instanceof Term)\n return term;\n\n // Term instantiated with another library\n switch (term.termType) {\n case 'NamedNode': return namedNode(term.value);\n case 'BlankNode': return blankNode(term.value);\n case 'Variable': return variable(term.value);\n case 'DefaultGraph': return DEFAULTGRAPH;\n case 'Literal': return literal(term.value, term.language || term.datatype);\n case 'Quad': return fromQuad(term);\n default: throw new Error(`Unexpected termType: ${term.termType}`);\n }\n}\n\nexport function fromQuad(inQuad) {\n if (inQuad instanceof Quad)\n return inQuad;\n\n if (inQuad.termType !== 'Quad')\n throw new Error(`Unexpected termType: ${inQuad.termType}`);\n\n return quad(fromTerm(inQuad.subject), fromTerm(inQuad.predicate), fromTerm(inQuad.object), fromTerm(inQuad.graph));\n}\n","// **N3Parser** parses N3 documents.\nimport N3Lexer from './N3Lexer';\nimport N3DataFactory from './N3DataFactory';\nimport namespaces from './IRIs';\n\nlet blankNodePrefix = 0;\n\n// ## Constructor\nexport default class N3Parser {\n constructor(options) {\n this._contextStack = [];\n this._graph = null;\n\n // Set the document IRI\n options = options || {};\n this._setBase(options.baseIRI);\n options.factory && initDataFactory(this, options.factory);\n\n // Set supported features depending on the format\n const format = (typeof options.format === 'string') ?\n options.format.match(/\\w*$/)[0].toLowerCase() : '',\n isTurtle = /turtle/.test(format), isTriG = /trig/.test(format),\n isNTriples = /triple/.test(format), isNQuads = /quad/.test(format),\n isN3 = this._n3Mode = /n3/.test(format),\n isLineMode = isNTriples || isNQuads;\n if (!(this._supportsNamedGraphs = !(isTurtle || isN3)))\n this._readPredicateOrNamedGraph = this._readPredicate;\n // Support triples in other graphs\n this._supportsQuads = !(isTurtle || isTriG || isNTriples || isN3);\n // Whether the log:isImpliedBy predicate is supported\n this._isImpliedBy = options.isImpliedBy;\n // Disable relative IRIs in N-Triples or N-Quads mode\n if (isLineMode)\n this._resolveRelativeIRI = iri => { return null; };\n this._blankNodePrefix = typeof options.blankNodePrefix !== 'string' ? '' :\n options.blankNodePrefix.replace(/^(?!_:)/, '_:');\n this._lexer = options.lexer || new N3Lexer({ lineMode: isLineMode, n3: isN3, isImpliedBy: this._isImpliedBy });\n // Disable explicit quantifiers by default\n this._explicitQuantifiers = !!options.explicitQuantifiers;\n // Disable parsing of unsupported versions by default\n this._parseUnsupportedVersions = !!options.parseUnsupportedVersions;\n this._version = options.version;\n }\n\n // ## Static class methods\n\n // ### `_resetBlankNodePrefix` restarts blank node prefix identification\n static _resetBlankNodePrefix() {\n blankNodePrefix = 0;\n }\n\n // ## Private methods\n\n // ### `_setBase` sets the base IRI to resolve relative IRIs\n _setBase(baseIRI) {\n if (!baseIRI) {\n this._base = '';\n this._basePath = '';\n }\n else {\n // Remove fragment if present\n const fragmentPos = baseIRI.indexOf('#');\n if (fragmentPos >= 0)\n baseIRI = baseIRI.substr(0, fragmentPos);\n // Set base IRI and its components\n this._base = baseIRI;\n this._basePath = baseIRI.indexOf('/') < 0 ? baseIRI :\n baseIRI.replace(/[^\\/?]*(?:\\?.*)?$/, '');\n baseIRI = baseIRI.match(/^(?:([a-z][a-z0-9+.-]*:))?(?:\\/\\/[^\\/]*)?/i);\n this._baseRoot = baseIRI[0];\n this._baseScheme = baseIRI[1];\n }\n }\n\n // ### `_saveContext` stores the current parsing context\n // when entering a new scope (list, blank node, formula)\n _saveContext(type, graph, subject, predicate, object) {\n const n3Mode = this._n3Mode;\n this._contextStack.push({\n type,\n subject, predicate, object, graph,\n inverse: n3Mode ? this._inversePredicate : false,\n blankPrefix: n3Mode ? this._prefixes._ : '',\n quantified: n3Mode ? this._quantified : null,\n });\n // The settings below only apply to N3 streams\n if (n3Mode) {\n // Every new scope resets the predicate direction\n this._inversePredicate = false;\n // In N3, blank nodes are scoped to a formula\n // (using a dot as separator, as a blank node label cannot start with it)\n this._prefixes._ = (this._graph ? `${this._graph.value}.` : '.');\n // Quantifiers are scoped to a formula\n this._quantified = Object.create(this._quantified);\n }\n }\n\n // ### `_restoreContext` restores the parent context\n // when leaving a scope (list, blank node, formula)\n _restoreContext(type, token) {\n // Obtain the previous context\n const context = this._contextStack.pop();\n if (!context || context.type !== type)\n return this._error(`Unexpected ${token.type}`, token);\n\n // Restore the quad of the previous context\n this._subject = context.subject;\n this._predicate = context.predicate;\n this._object = context.object;\n this._graph = context.graph;\n\n // Restore N3 context settings\n if (this._n3Mode) {\n this._inversePredicate = context.inverse;\n this._prefixes._ = context.blankPrefix;\n this._quantified = context.quantified;\n }\n }\n\n // ### `_readBeforeTopContext` is called once only at the start of parsing.\n _readBeforeTopContext(token) {\n if (this._version && !this._isValidVersion(this._version))\n return this._error(`Detected unsupported version as media type parameter: \"${this._version}\"`, token);\n return this._readInTopContext(token);\n }\n\n // ### `_readInTopContext` reads a token when in the top context\n _readInTopContext(token) {\n switch (token.type) {\n // If an EOF token arrives in the top context, signal that we're done\n case 'eof':\n if (this._graph !== null)\n return this._error('Unclosed graph', token);\n delete this._prefixes._;\n return this._callback(null, null, this._prefixes);\n // It could be a prefix declaration\n case 'PREFIX':\n this._sparqlStyle = true;\n case '@prefix':\n return this._readPrefix;\n // It could be a base declaration\n case 'BASE':\n this._sparqlStyle = true;\n case '@base':\n return this._readBaseIRI;\n // It could be a version declaration\n case 'VERSION':\n this._sparqlStyle = true;\n case '@version':\n return this._readVersion;\n // It could be a graph\n case '{':\n if (this._supportsNamedGraphs) {\n this._graph = '';\n this._subject = null;\n return this._readSubject;\n }\n case 'GRAPH':\n if (this._supportsNamedGraphs)\n return this._readNamedGraphLabel;\n // Otherwise, the next token must be a subject\n default:\n return this._readSubject(token);\n }\n }\n\n // ### `_readEntity` reads an IRI, prefixed name, blank node, or variable\n _readEntity(token, quantifier) {\n let value;\n switch (token.type) {\n // Read a relative or absolute IRI\n case 'IRI':\n case 'typeIRI':\n const iri = this._resolveIRI(token.value);\n if (iri === null)\n return this._error('Invalid IRI', token);\n value = this._factory.namedNode(iri);\n break;\n // Read a prefixed name\n case 'type':\n case 'prefixed':\n const prefix = this._prefixes[token.prefix];\n if (prefix === undefined)\n return this._error(`Undefined prefix \"${token.prefix}:\"`, token);\n value = this._factory.namedNode(prefix + token.value);\n break;\n // Read a blank node\n case 'blank':\n value = this._factory.blankNode(this._prefixes[token.prefix] + token.value);\n break;\n // Read a variable\n case 'var':\n value = this._factory.variable(token.value.substr(1));\n break;\n // Everything else is not an entity\n default:\n return this._error(`Expected entity but got ${token.type}`, token);\n }\n // In N3 mode, replace the entity if it is quantified\n if (!quantifier && this._n3Mode && (value.id in this._quantified))\n value = this._quantified[value.id];\n return value;\n }\n\n // ### `_readSubject` reads a quad's subject\n _readSubject(token) {\n this._predicate = null;\n switch (token.type) {\n case '[':\n // Start a new quad with a new blank node as subject\n this._saveContext('blank', this._graph,\n this._subject = this._factory.blankNode(), null, null);\n return this._readBlankNodeHead;\n case '(':\n const stack = this._contextStack, parent = stack.length && stack[stack.length - 1];\n if (parent.type === '<<') {\n return this._error('Unexpected list in reified triple', token);\n }\n // Start a new list\n this._saveContext('list', this._graph, this.RDF_NIL, null, null);\n this._subject = null;\n return this._readListItem;\n case '{':\n // Start a new formula\n if (!this._n3Mode)\n return this._error('Unexpected graph', token);\n this._saveContext('formula', this._graph,\n this._graph = this._factory.blankNode(), null, null);\n return this._readSubject;\n case '}':\n // No subject; the graph in which we are reading is closed instead\n return this._readPunctuation(token);\n case '@forSome':\n if (!this._n3Mode)\n return this._error('Unexpected \"@forSome\"', token);\n this._subject = null;\n this._predicate = this.N3_FORSOME;\n this._quantifier = 'blankNode';\n return this._readQuantifierList;\n case '@forAll':\n if (!this._n3Mode)\n return this._error('Unexpected \"@forAll\"', token);\n this._subject = null;\n this._predicate = this.N3_FORALL;\n this._quantifier = 'variable';\n return this._readQuantifierList;\n case 'literal':\n if (!this._n3Mode)\n return this._error('Unexpected literal', token);\n\n if (token.prefix.length === 0) {\n this._literalValue = token.value;\n return this._completeSubjectLiteral;\n }\n else\n this._subject = this._factory.literal(token.value, this._factory.namedNode(token.prefix));\n\n break;\n case '<<(':\n if (!this._n3Mode)\n return this._error('Disallowed triple term as subject', token);\n this._saveContext('<<(', this._graph, null, null, null);\n this._graph = null;\n return this._readSubject;\n case '<<':\n this._saveContext('<<', this._graph, null, null, null);\n this._graph = null;\n return this._readSubject;\n default:\n // Read the subject entity\n if ((this._subject = this._readEntity(token)) === undefined)\n return;\n // In N3 mode, the subject might be a path\n if (this._n3Mode)\n return this._getPathReader(this._readPredicateOrNamedGraph);\n }\n\n // The next token must be a predicate,\n // or, if the subject was actually a graph IRI, a named graph\n return this._readPredicateOrNamedGraph;\n }\n\n // ### `_readPredicate` reads a quad's predicate\n _readPredicate(token) {\n const type = token.type;\n switch (type) {\n case 'inverse':\n this._inversePredicate = true;\n case 'abbreviation':\n this._predicate = this.ABBREVIATIONS[token.value];\n break;\n case '.':\n case ']':\n case '}':\n case '|}':\n // Expected predicate didn't come, must have been trailing semicolon\n if (this._predicate === null)\n return this._error(`Unexpected ${type}`, token);\n this._subject = null;\n return type === ']' ? this._readBlankNodeTail(token) : this._readPunctuation(token);\n case ';':\n // Additional semicolons can be safely ignored\n return this._predicate !== null ? this._readPredicate :\n this._error('Expected predicate but got ;', token);\n case '[':\n if (this._n3Mode) {\n // Start a new quad with a new blank node as subject\n this._saveContext('blank', this._graph, this._subject,\n this._subject = this._factory.blankNode(), null);\n return this._readBlankNodeHead;\n }\n case 'blank':\n if (!this._n3Mode)\n return this._error('Disallowed blank node as predicate', token);\n default:\n if ((this._predicate = this._readEntity(token)) === undefined)\n return;\n }\n this._validAnnotation = true;\n // The next token must be an object\n return this._readObject;\n }\n\n // ### `_readObject` reads a quad's object\n _readObject(token) {\n switch (token.type) {\n case 'literal':\n // Regular literal, can still get a datatype or language\n if (token.prefix.length === 0) {\n this._literalValue = token.value;\n return this._readDataTypeOrLang;\n }\n // Pre-datatyped string literal (prefix stores the datatype)\n else\n this._object = this._factory.literal(token.value, this._factory.namedNode(token.prefix));\n break;\n case '[':\n // Start a new quad with a new blank node as subject\n this._saveContext('blank', this._graph, this._subject, this._predicate,\n this._subject = this._factory.blankNode());\n return this._readBlankNodeHead;\n case '(':\n const stack = this._contextStack, parent = stack.length && stack[stack.length - 1];\n if (parent.type === '<<') {\n return this._error('Unexpected list in reified triple', token);\n }\n // Start a new list\n this._saveContext('list', this._graph, this._subject, this._predicate, this.RDF_NIL);\n this._subject = null;\n return this._readListItem;\n case '{':\n // Start a new formula\n if (!this._n3Mode)\n return this._error('Unexpected graph', token);\n this._saveContext('formula', this._graph, this._subject, this._predicate,\n this._graph = this._factory.blankNode());\n return this._readSubject;\n case '<<(':\n this._saveContext('<<(', this._graph, this._subject, this._predicate, null);\n this._graph = null;\n return this._readSubject;\n case '<<':\n this._saveContext('<<', this._graph, this._subject, this._predicate, null);\n this._graph = null;\n return this._readSubject;\n default:\n // Read the object entity\n if ((this._object = this._readEntity(token)) === undefined)\n return;\n // In N3 mode, the object might be a path\n if (this._n3Mode)\n return this._getPathReader(this._getContextEndReader());\n }\n return this._getContextEndReader();\n }\n\n // ### `_readPredicateOrNamedGraph` reads a quad's predicate, or a named graph\n _readPredicateOrNamedGraph(token) {\n return token.type === '{' ? this._readGraph(token) : this._readPredicate(token);\n }\n\n // ### `_readGraph` reads a graph\n _readGraph(token) {\n if (token.type !== '{')\n return this._error(`Expected graph but got ${token.type}`, token);\n // The \"subject\" we read is actually the GRAPH's label\n this._graph = this._subject, this._subject = null;\n return this._readSubject;\n }\n\n // ### `_readBlankNodeHead` reads the head of a blank node\n _readBlankNodeHead(token) {\n if (token.type === ']') {\n this._subject = null;\n return this._readBlankNodeTail(token);\n }\n else {\n const stack = this._contextStack, parentParent = stack.length > 1 && stack[stack.length - 2];\n if (parentParent.type === '<<') {\n return this._error('Unexpected compound blank node expression in reified triple', token);\n }\n this._predicate = null;\n return this._readPredicate(token);\n }\n }\n\n // ### `_readBlankNodeTail` reads the end of a blank node\n _readBlankNodeTail(token) {\n if (token.type !== ']')\n return this._readBlankNodePunctuation(token);\n\n // Store blank node quad\n if (this._subject !== null)\n this._emit(this._subject, this._predicate, this._object, this._graph);\n\n // Restore the parent context containing this blank node\n const empty = this._predicate === null;\n this._restoreContext('blank', token);\n // If the blank node was the object, restore previous context and read punctuation\n if (this._object !== null)\n return this._getContextEndReader();\n // If the blank node was the predicate, continue reading the object\n else if (this._predicate !== null)\n return this._readObject;\n // If the blank node was the subject, continue reading the predicate\n else\n // If the blank node was empty, it could be a named graph label\n return empty ? this._readPredicateOrNamedGraph : this._readPredicateAfterBlank;\n }\n\n // ### `_readPredicateAfterBlank` reads a predicate after an anonymous blank node\n _readPredicateAfterBlank(token) {\n switch (token.type) {\n case '.':\n case '}':\n // No predicate is coming if the triple is terminated here\n this._subject = null;\n return this._readPunctuation(token);\n default:\n return this._readPredicate(token);\n }\n }\n\n // ### `_readListItem` reads items from a list\n _readListItem(token) {\n let item = null, // The item of the list\n list = null, // The list itself\n next = this._readListItem; // The next function to execute\n const previousList = this._subject, // The previous list that contains this list\n stack = this._contextStack, // The stack of parent contexts\n parent = stack[stack.length - 1]; // The parent containing the current list\n\n switch (token.type) {\n case '[':\n // Stack the current list quad and start a new quad with a blank node as subject\n this._saveContext('blank', this._graph,\n list = this._factory.blankNode(), this.RDF_FIRST,\n this._subject = item = this._factory.blankNode());\n next = this._readBlankNodeHead;\n break;\n case '(':\n // Stack the current list quad and start a new list\n this._saveContext('list', this._graph,\n list = this._factory.blankNode(), this.RDF_FIRST, this.RDF_NIL);\n this._subject = null;\n break;\n case ')':\n // Closing the list; restore the parent context\n this._restoreContext('list', token);\n // If this list is contained within a parent list, return the membership quad here.\n // This will be `<parent list element> rdf:first <this list>.`.\n if (stack.length !== 0 && stack[stack.length - 1].type === 'list')\n this._emit(this._subject, this._predicate, this._object, this._graph);\n // Was this list the parent's subject?\n if (this._predicate === null) {\n // The next token is the predicate\n next = this._readPredicate;\n // No list tail if this was an empty list\n if (this._subject === this.RDF_NIL)\n return next;\n }\n // The list was in the parent context's object\n else {\n next = this._getContextEndReader();\n // No list tail if this was an empty list\n if (this._object === this.RDF_NIL)\n return next;\n }\n // Close the list by making the head nil\n list = this.RDF_NIL;\n break;\n case 'literal':\n // Regular literal, can still get a datatype or language\n if (token.prefix.length === 0) {\n this._literalValue = token.value;\n next = this._readListItemDataTypeOrLang;\n }\n // Pre-datatyped string literal (prefix stores the datatype)\n else {\n item = this._factory.literal(token.value, this._factory.namedNode(token.prefix));\n next = this._getContextEndReader();\n }\n break;\n case '{':\n // Start a new formula\n if (!this._n3Mode)\n return this._error('Unexpected graph', token);\n this._saveContext('formula', this._graph, this._subject, this._predicate,\n this._graph = this._factory.blankNode());\n return this._readSubject;\n case '<<':\n this._saveContext('<<', this._graph, null, null, null);\n this._graph = null;\n next = this._readSubject;\n break;\n default:\n if ((item = this._readEntity(token)) === undefined)\n return;\n }\n\n // Create a new blank node if no item head was assigned yet\n if (list === null)\n this._subject = list = this._factory.blankNode();\n\n // When reading a reified triple, store the list as subject in the stack, as this will be overridden when reading the triple.\n if (token.type === '<<')\n stack[stack.length - 1].subject = this._subject;\n\n // Is this the first element of the list?\n if (previousList === null) {\n // This list is either the subject or the object of its parent\n if (parent.predicate === null)\n parent.subject = list;\n else\n parent.object = list;\n }\n else {\n // Continue the previous list with the current list\n this._emit(previousList, this.RDF_REST, list, this._graph);\n }\n // If an item was read, add it to the list\n if (item !== null) {\n // In N3 mode, the item might be a path\n if (this._n3Mode && (token.type === 'IRI' || token.type === 'prefixed')) {\n // Create a new context to add the item's path\n this._saveContext('item', this._graph, list, this.RDF_FIRST, item);\n this._subject = item, this._predicate = null;\n // _readPath will restore the context and output the item\n return this._getPathReader(this._readListItem);\n }\n // Output the item\n this._emit(list, this.RDF_FIRST, item, this._graph);\n }\n return next;\n }\n\n // ### `_readDataTypeOrLang` reads an _optional_ datatype or language\n _readDataTypeOrLang(token) {\n return this._completeObjectLiteral(token, false);\n }\n\n\n // ### `_readListItemDataTypeOrLang` reads an _optional_ datatype or language in a list\n _readListItemDataTypeOrLang(token) {\n return this._completeObjectLiteral(token, true);\n }\n\n // ### `_completeLiteral` completes a literal with an optional datatype or language\n _completeLiteral(token, component) {\n // Create a simple string literal by default\n let literal = this._factory.literal(this._literalValue);\n let readCb;\n\n switch (token.type) {\n // Create a datatyped literal\n case 'type':\n case 'typeIRI':\n const datatype = this._readEntity(token);\n if (datatype === undefined) return; // No datatype means an error occurred\n if (datatype.value === namespaces.rdf.langString || datatype.value === namespaces.rdf.dirLangString) {\n return this._error('Detected illegal (directional) languaged-tagged string with explicit datatype', token);\n }\n literal = this._factory.literal(this._literalValue, datatype);\n token = null;\n break;\n // Create a language-tagged string\n case 'langcode':\n if (token.value.split('-').some(t => t.length > 8))\n return this._error('Detected language tag with subtag longer than 8 characters', token);\n literal = this._factory.literal(this._literalValue, token.value);\n this._literalLanguage = token.value;\n token = null;\n readCb = this._readDirCode.bind(this, component);\n break;\n }\n\n return { token, literal, readCb };\n }\n\n _readDirCode(component, listItem, token) {\n // Attempt to read a dircode\n if (token.type === 'dircode') {\n const term = this._factory.literal(this._literalValue, { language: this._literalLanguage, direction: token.value });\n if (component === 'subject')\n this._subject = term;\n else\n this._object = term;\n this._literalLanguage = undefined;\n token = null;\n }\n\n if (component === 'subject')\n return token === null ? this._readPredicateOrNamedGraph : this._readPredicateOrNamedGraph(token);\n return this._completeObjectLiteralPost(token, listItem);\n }\n\n // Completes a literal in subject position\n _completeSubjectLiteral(token) {\n const completed = this._completeLiteral(token, 'subject');\n this._subject = completed.literal;\n\n // Postpone completion if the literal is only partially completed (such as lang+dir).\n if (completed.readCb)\n return completed.readCb.bind(this, false);\n\n return this._readPredicateOrNamedGraph;\n }\n\n // Completes a literal in object position\n _completeObjectLiteral(token, listItem) {\n const completed = this._completeLiteral(token, 'object');\n if (!completed)\n return;\n\n this._object = completed.literal;\n\n // Postpone completion if the literal is only partially completed (such as lang+dir).\n if (completed.readCb)\n return completed.readCb.bind(this, listItem);\n\n return this._completeObjectLiteralPost(completed.token, listItem);\n }\n\n _completeObjectLiteralPost(token, listItem) {\n // If this literal was part of a list, write the item\n // (we could also check the context stack, but passing in a flag is faster)\n if (listItem)\n this._emit(this._subject, this.RDF_FIRST, this._object, this._graph);\n // If the token was consumed, continue with the rest of the input\n if (token === null)\n return this._getContextEndReader();\n // Otherwise, consume the token now\n else {\n this._readCallback = this._getContextEndReader();\n return this._readCallback(token);\n }\n }\n\n // ### `_readFormulaTail` reads the end of a formula\n _readFormulaTail(token) {\n if (token.type !== '}')\n return this._readPunctuation(token);\n\n // Store the last quad of the formula\n if (this._subject !== null)\n this._emit(this._subject, this._predicate, this._object, this._graph);\n\n // Restore the parent context containing this formula\n this._restoreContext('formula', token);\n // If the formula was the subject, continue reading the predicate.\n // If the formula was the object, read punctuation.\n return this._object === null ? this._readPredicate : this._getContextEndReader();\n }\n\n // ### `_readPunctuation` reads punctuation between quads or quad parts\n _readPunctuation(token) {\n let next, graph = this._graph, startingAnnotation = false;\n const subject = this._subject, inversePredicate = this._inversePredicate;\n switch (token.type) {\n // A closing brace ends a graph\n case '}':\n if (this._graph === null)\n return this._error('Unexpected graph closing', token);\n if (this._n3Mode)\n return this._readFormulaTail(token);\n this._graph = null;\n // A dot just ends the statement, without sharing anything with the next\n case '.':\n this._subject = null;\n this._tripleTerm = null;\n next = this._contextStack.length ? this._readSubject : this._readInTopContext;\n if (inversePredicate) this._inversePredicate = false;\n break;\n // Semicolon means the subject is shared; predicate and object are different\n case ';':\n next = this._readPredicate;\n break;\n // Comma means both the subject and predicate are shared; the object is different\n case ',':\n next = this._readObject;\n break;\n // ~ is allowed in the annotation syntax\n case '~':\n next = this._readReifierInAnnotation;\n startingAnnotation = true;\n break;\n // {| means that the current triple is annotated with predicate-object pairs.\n case '{|':\n // Continue using the last triple as reified triple subject for the predicate-object pairs.\n this._subject = this._readTripleTerm();\n this._validAnnotation = false;\n startingAnnotation = true;\n next = this._readPredicate;\n break;\n // |} means that the current reified triple in annotation syntax is finalized.\n case '|}':\n if (!this._annotation)\n return this._error('Unexpected annotation syntax closing', token);\n if (!this._validAnnotation)\n return this._error('Annotation block can not be empty', token);\n this._subject = null;\n this._annotation = false;\n next = this._readPunctuation;\n break;\n default:\n // An entity means this is a quad (only allowed if not already inside a graph)\n if (this._supportsQuads && this._graph === null && (graph = this._readEntity(token)) !== undefined) {\n next = this._readQuadPunctuation;\n break;\n }\n return this._error(`Expected punctuation to follow \"${this._object.id}\"`, token);\n }\n // A quad has been completed now, so return it\n if (subject !== null && (!startingAnnotation || (startingAnnotation && !this._annotation))) {\n const predicate = this._predicate, object = this._object;\n if (!inversePredicate)\n this._emit(subject, predicate, object, graph);\n else\n this._emit(object, predicate, subject, graph);\n }\n if (startingAnnotation) {\n this._annotation = true;\n }\n return next;\n }\n\n // ### `_readBlankNodePunctuation` reads punctuation in a blank node\n _readBlankNodePunctuation(token) {\n let next;\n switch (token.type) {\n // Semicolon means the subject is shared; predicate and object are different\n case ';':\n next = this._readPredicate;\n break;\n // Comma means both the subject and predicate are shared; the object is different\n case ',':\n next = this._readObject;\n break;\n default:\n return this._error(`Expected punctuation to follow \"${this._object.id}\"`, token);\n }\n // A quad has been completed now, so return it\n this._emit(this._subject, this._predicate, this._object, this._graph);\n return next;\n }\n\n // ### `_readQuadPunctuation` reads punctuation after a quad\n _readQuadPunctuation(token) {\n if (token.type !== '.')\n return this._error('Expected dot to follow quad', token);\n return this._readInTopContext;\n }\n\n // ### `_readPrefix` reads the prefix of a prefix declaration\n _readPrefix(token) {\n if (token.type !== 'prefix')\n return this._error('Expected prefix to follow @prefix', token);\n this._prefix = token.value;\n return this._readPrefixIRI;\n }\n\n // ### `_readPrefixIRI` reads the IRI of a prefix declaration\n _readPrefixIRI(token) {\n if (token.type !== 'IRI')\n return this._error(`Expected IRI to follow prefix \"${this._prefix}:\"`, token);\n const prefixNode = this._readEntity(token);\n this._prefixes[this._prefix] = prefixNode.value;\n this._prefixCallback(this._prefix, prefixNode);\n return this._readDeclarationPunctuation;\n }\n\n // ### `_readBaseIRI` reads the IRI of a base declaration\n _readBaseIRI(token) {\n const iri = token.type === 'IRI' && this._resolveIRI(token.value);\n if (!iri)\n return this._error('Expected valid IRI to follow base declaration', token);\n this._setBase(iri);\n return this._readDeclarationPunctuation;\n }\n\n // ### `_isValidVersion` checks if the given version is valid for this parser to handle.\n _isValidVersion(version) {\n return this._parseUnsupportedVersions || N3Parser.SUPPORTED_VERSIONS.includes(version);\n }\n\n // ### `_readVersion` reads version string declaration\n _readVersion(token) {\n if (token.type !== 'literal')\n return this._error('Expected literal to follow version declaration', token);\n if ((token.end - token.start) !== token.value.length + 2)\n return this._error('Version declarations must use single quotes', token);\n this._versionCallback(token.value);\n if (!this._isValidVersion(token.value))\n return this._error(`Detected unsupported version: \"${token.value}\"`, token);\n return this._readDeclarationPunctuation;\n }\n\n // ### `_readNamedGraphLabel` reads the label of a named graph\n _readNamedGraphLabel(token) {\n switch (token.type) {\n case 'IRI':\n case 'blank':\n case 'prefixed':\n return this._readSubject(token), this._readGraph;\n case '[':\n return this._readNamedGraphBlankLabel;\n default:\n return this._error('Invalid graph label', token);\n }\n }\n\n // ### `_readNamedGraphLabel` reads a blank node label of a named graph\n _readNamedGraphBlankLabel(token) {\n if (token.type !== ']')\n return this._error('Invalid graph label', token);\n this._subject = this._factory.blankNode();\n return this._readGraph;\n }\n\n // ### `_readDeclarationPunctuation` reads the punctuation of a declaration\n _readDeclarationPunctuation(token) {\n // SPARQL-style declarations don't have punctuation\n if (this._sparqlStyle) {\n this._sparqlStyle = false;\n return this._readInTopContext(token);\n }\n\n if (token.type !== '.')\n return this._error('Expected declaration to end with a dot', token);\n return this._readInTopContext;\n }\n\n // Reads a list of quantified symbols from a @forSome or @forAll statement\n _readQuantifierList(token) {\n let entity;\n switch (token.type) {\n case 'IRI':\n case 'prefixed':\n if ((entity = this._readEntity(token, true)) !== undefined)\n break;\n default:\n return this._error(`Unexpected ${token.type}`, token);\n }\n // Without explicit quantifiers, map entities to a quantified entity\n if (!this._explicitQuantifiers)\n this._quantified[entity.id] = this._factory[this._quantifier](this._factory.blankNode().value);\n // With explicit quantifiers, output the reified quantifier\n else {\n // If this is the first item, start a new quantifier list\n if (this._subject === null)\n this._emit(this._graph || this.DEFAULTGRAPH, this._predicate,\n this._subject = this._factory.blankNode(), this.QUANTIFIERS_GRAPH);\n // Otherwise, continue the previous list\n else\n this._emit(this._subject, this.RDF_REST,\n this._subject = this._factory.blankNode(), this.QUANTIFIERS_GRAPH);\n // Output the list item\n this._emit(this._subject, this.RDF_FIRST, entity, this.QUANTIFIERS_GRAPH);\n }\n return this._readQuantifierPunctuation;\n }\n\n // Reads punctuation from a @forSome or @forAll statement\n _readQuantifierPunctuation(token) {\n // Read more quantifiers\n if (token.type === ',')\n return this._readQuantifierList;\n // End of the quantifier list\n else {\n // With explicit quantifiers, close the quantifier list\n if (this._explicitQuantifiers) {\n this._emit(this._subject, this.RDF_REST, this.RDF_NIL, this.QUANTIFIERS_GRAPH);\n this._subject = null;\n }\n // Read a dot\n this._readCallback = this._getContextEndReader();\n return this._readCallback(token);\n }\n }\n\n // ### `_getPathReader` reads a potential path and then resumes with the given function\n _getPathReader(afterPath) {\n this._afterPath = afterPath;\n return this._readPath;\n }\n\n // ### `_readPath` reads a potential path\n _readPath(token) {\n switch (token.type) {\n // Forward path\n case '!': return this._readForwardPath;\n // Backward path\n case '^': return this._readBackwardPath;\n // Not a path; resume reading where we left off\n default:\n const stack = this._contextStack, parent = stack.length && stack[stack.length - 1];\n // If we were reading a list item, we still need to output it\n if (parent && parent.type === 'item') {\n // The list item is the remaining subejct after reading the path\n const item = this._subject;\n // Switch back to the context of the list\n this._restoreContext('item', token);\n // Output the list item\n this._emit(this._subject, this.RDF_FIRST, item, this._graph);\n }\n return this._afterPath(token);\n }\n }\n\n // ### `_readForwardPath` reads a '!' path\n _readForwardPath(token) {\n let subject, predicate;\n const object = this._factory.blankNode();\n // The next token is the predicate\n if ((predicate = this._readEntity(token)) === undefined)\n return;\n // If we were reading a subject, replace the subject by the path's object\n if (this._predicate === null)\n subject = this._subject, this._subject = object;\n // If we were reading an object, replace the subject by the path's object\n else\n subject = this._object, this._object = object;\n // Emit the path's current quad and read its next section\n this._emit(subject, predicate, object, this._graph);\n return this._readPath;\n }\n\n // ### `_readBackwardPath` reads a '^' path\n _readBackwardPath(token) {\n const subject = this._factory.blankNode();\n let predicate, object;\n // The next token is the predicate\n if ((predicate = this._readEntity(token)) === undefined)\n return;\n // If we were reading a subject, replace the subject by the path's subject\n if (this._predicate === null)\n object = this._subject, this._subject = subject;\n // If we were reading an object, replace the subject by the path's subject\n else\n object = this._object, this._object = subject;\n // Emit the path's current quad and read its next section\n this._emit(subject, predicate, object, this._graph);\n return this._readPath;\n }\n\n// ### `_readTripleTermTail` reads the end of a triple term\n _readTripleTermTail(token) {\n if (token.type !== ')>>')\n return this._error(`Expected )>> but got ${token.type}`, token);\n // Read the quad and restore the previous context\n const quad = this._factory.quad(this._subject, this._predicate, this._object,\n this._graph || this.DEFAULTGRAPH);\n this._restoreContext('<<(', token);\n\n // If the triple was the subject, continue by reading the predicate.\n if (this._subject === null) {\n this._subject = quad;\n return this._readPredicate;\n }\n // If the triple was the object, read context end.\n else {\n this._object = quad;\n return this._getContextEndReader();\n }\n }\n\n // ### `_readReifiedTripleTailOrReifier` reads a reifier or the end of a nested reified triple\n _readReifiedTripleTailOrReifier(token) {\n if (token.type === '~') {\n return this._readReifier;\n }\n return this._readReifiedTripleTail(token);\n }\n\n // ### `_readReifiedTripleTail` reads the end of a nested reified triple\n _readReifiedTripleTail(token) {\n if (token.type !== '>>')\n return this._error(`Expected >> but got ${token.type}`, token);\n // Read the triple term and restore the previous context\n this._tripleTerm = null;\n const reifier = this._readTripleTerm();\n this._restoreContext('<<', token);\n\n // // If we're in a list, continue processing that list\n const stack = this._contextStack, parent = stack.length && stack[stack.length - 1];\n if (parent && parent.type === 'list') {\n this._emit(this._subject, this.RDF_FIRST, reifier, this._graph);\n return this._getContextEndReader();\n }\n // If the triple was the subject, continue by reading the predicate.\n else if (this._subject === null) {\n this._subject = reifier;\n return this._readPredicateOrReifierTripleEnd;\n }\n // If the triple was the object, read context end.\n else {\n this._object = reifier;\n return this._getContextEndReader();\n }\n }\n\n _readPredicateOrReifierTripleEnd(token) {\n if (token.type === '.') {\n this._subject = null;\n return this._readPunctuation(token);\n }\n return this._readPredicate(token);\n }\n\n // ### `_readReifier` reads the triple term identifier after a tilde when in a reifying triple.\n _readReifier(token) {\n this._reifier = this._readEntity(token);\n return this._readReifiedTripleTail;\n }\n\n // ### `_readReifier` reads the optional triple term identifier after a tilde when in annotation syntax.\n _readReifierInAnnotation(token) {\n // If next token is a reifier, read it as such.\n if (token.type === 'IRI' || token.type === 'typeIRI' || token.type === 'type' || token.type === 'prefixed' || token.type === 'blank' || token.type === 'var') {\n this._reifier = this._readEntity(token);\n return this._readPunctuation;\n }\n // Otherwise, emit and assert triple term.\n this._readTripleTerm();\n this._subject = null;\n return this._readPunctuation(token);\n }\n\n _readTripleTerm() {\n const stack = this._contextStack, parent = stack.length && stack[stack.length - 1];\n const parentGraph = parent ? parent.graph : undefined;\n const reifier = this._reifier || this._factory.blankNode();\n this._reifier = null;\n this._tripleTerm = this._tripleTerm || this._factory.quad(this._subject, this._predicate, this._object);\n this._emit(reifier, this.RDF_REIFIES, this._tripleTerm, parentGraph || this.DEFAULTGRAPH);\n return reifier;\n }\n\n // ### `_getContextEndReader` gets the next reader function at the end of a context\n _getContextEndReader() {\n const contextStack = this._contextStack;\n if (!contextStack.length)\n return this._readPunctuation;\n\n switch (contextStack[contextStack.length - 1].type) {\n case 'blank':\n return this._readBlankNodeTail;\n case 'list':\n return this._readListItem;\n case 'formula':\n return this._readFormulaTail;\n case '<<(':\n return this._readTripleTermTail;\n case '<<':\n return this._readReifiedTripleTailOrReifier;\n }\n }\n\n // ### `_emit` sends a quad through the callback\n _emit(subject, predicate, object, graph) {\n this._callback(null, this._factory.quad(subject, predicate, object, graph || this.DEFAULTGRAPH));\n }\n\n // ### `_error` emits an error message through the callback\n _error(message, token) {\n const err = new Error(`${message} on line ${token.line}.`);\n err.context = {\n token: token,\n line: token.line,\n previousToken: this._lexer.previousToken,\n };\n this._callback(err);\n this._callback = noop;\n }\n\n // ### `_resolveIRI` resolves an IRI against the base path\n _resolveIRI(iri) {\n return /^[a-z][a-z0-9+.-]*:/i.test(iri) ? iri : this._resolveRelativeIRI(iri);\n }\n\n // ### `_resolveRelativeIRI` resolves an IRI against the base path,\n // assuming that a base path has been set and that the IRI is indeed relative\n _resolveRelativeIRI(iri) {\n // An empty relative IRI indicates the base IRI\n if (!iri.length)\n return this._base;\n // Decide resolving strategy based in the first character\n switch (iri[0]) {\n // Resolve relative fragment IRIs against the base IRI\n case '#': return this._base + iri;\n // Resolve relative query string IRIs by replacing the query string\n case '?': return this._base.replace(/(?:\\?.*)?$/, iri);\n // Resolve root-relative IRIs at the root of the base IRI\n case '/':\n // Resolve scheme-relative IRIs to the scheme\n return (iri[1] === '/' ? this._baseScheme : this._baseRoot) + this._removeDotSegments(iri);\n // Resolve all other IRIs at the base IRI's path\n default:\n // Relative IRIs cannot contain a colon in the first path segment\n return (/^[^/:]*:/.test(iri)) ? null : this._removeDotSegments(this._basePath + iri);\n }\n }\n\n // ### `_removeDotSegments` resolves './' and '../' path segments in an IRI as per RFC3986\n _removeDotSegments(iri) {\n // Don't modify the IRI if it does not contain any dot segments\n if (!/(^|\\/)\\.\\.?($|[/#?])/.test(iri))\n return iri;\n\n // Start with an imaginary slash before the IRI in order to resolve trailing './' and '../'\n const length = iri.length;\n let result = '', i = -1, pathStart = -1, segmentStart = 0, next = '/';\n\n while (i < length) {\n switch (next) {\n // The path starts with the first slash after the authority\n case ':':\n if (pathStart < 0) {\n // Skip two slashes before the authority\n if (iri[++i] === '/' && iri[++i] === '/')\n // Skip to slash after the authority\n while ((pathStart = i + 1) < length && iri[pathStart] !== '/')\n i = pathStart;\n }\n break;\n // Don't modify a query string or fragment\n case '?':\n case '#':\n i = length;\n break;\n // Handle '/.' or '/..' path segments\n case '/':\n if (iri[i + 1] === '.') {\n next = iri[++i + 1];\n switch (next) {\n // Remove a '/.' segment\n case '/':\n result += iri.substring(segmentStart, i - 1);\n segmentStart = i + 1;\n break;\n // Remove a trailing '/.' segment\n case undefined:\n case '?':\n case '#':\n return result + iri.substring(segmentStart, i) + iri.substr(i + 1);\n // Remove a '/..' segment\n case '.':\n next = iri[++i + 1];\n if (next === undefined || next === '/' || next === '?' || next === '#') {\n result += iri.substring(segmentStart, i - 2);\n // Try to remove the parent path from result\n if ((segmentStart = result.lastIndexOf('/')) >= pathStart)\n result = result.substr(0, segmentStart);\n // Remove a trailing '/..' segment\n if (next !== '/')\n return `${result}/${iri.substr(i + 1)}`;\n segmentStart = i + 1;\n }\n }\n }\n }\n next = iri[++i];\n }\n return result + iri.substring(segmentStart);\n }\n\n // ## Public methods\n\n // ### `parse` parses the N3 input and emits each parsed quad through the onQuad callback.\n parse(input, quadCallback, prefixCallback, versionCallback) {\n // The second parameter accepts an object { onQuad: ..., onPrefix: ..., onComment: ...}\n // As a second and third parameter it still accepts a separate quadCallback and prefixCallback for backward compatibility as well\n let onQuad, onPrefix, onComment, onVersion;\n if (quadCallback && (quadCallback.onQuad || quadCallback.onPrefix || quadCallback.onComment || quadCallback.onVersion)) {\n onQuad = quadCallback.onQuad;\n onPrefix = quadCallback.onPrefix;\n onComment = quadCallback.onComment;\n onVersion = quadCallback.onVersion;\n }\n else {\n onQuad = quadCallback;\n onPrefix = prefixCallback;\n onVersion = versionCallback;\n }\n // The read callback is the next function to be executed when a token arrives.\n // We start reading in the top context.\n this._readCallback = this._readBeforeTopContext;\n this._sparqlStyle = false;\n this._prefixes = Object.create(null);\n this._prefixes._ = this._blankNodePrefix ? this._blankNodePrefix.substr(2)\n : `b${blankNodePrefix++}_`;\n this._prefixCallback = onPrefix || noop;\n this._versionCallback = onVersion || noop;\n this._inversePredicate = false;\n this._quantified = Object.create(null);\n\n // Parse synchronously if no quad callback is given\n if (!onQuad) {\n const quads = [];\n let error;\n this._callback = (e, t) => { e ? (error = e) : t && quads.push(t); };\n this._lexer.tokenize(input).every(token => {\n return this._readCallback = this._readCallback(token);\n });\n if (error) throw error;\n return quads;\n }\n\n let processNextToken = (error, token) => {\n if (error !== null)\n this._callback(error), this._callback = noop;\n else if (this._readCallback)\n this._readCallback = this._readCallback(token);\n };\n\n // Enable checking for comments on every token when a commentCallback has been set\n if (onComment) {\n // Enable the lexer to return comments as tokens first (disabled by default)\n this._lexer.comments = true;\n // Patch the processNextToken function\n processNextToken = (error, token) => {\n if (error !== null)\n this._callback(error), this._callback = noop;\n else if (this._readCallback) {\n if (token.type === 'comment')\n onComment(token.value);\n else\n this._readCallback = this._readCallback(token);\n }\n };\n }\n\n // Parse asynchronously otherwise, executing the read callback when a token arrives\n this._callback = onQuad;\n this._lexer.tokenize(input, processNextToken);\n }\n}\n\n// The empty function\nfunction noop() {}\n\n// Initializes the parser with the given data factory\nfunction initDataFactory(parser, factory) {\n parser._factory = factory;\n\n parser.DEFAULTGRAPH = factory.defaultGraph();\n\n // Set common named nodes\n parser.RDF_FIRST = factory.namedNode(namespaces.rdf.first);\n parser.RDF_REST = factory.namedNode(namespaces.rdf.rest);\n parser.RDF_NIL = factory.namedNode(namespaces.rdf.nil);\n parser.RDF_REIFIES = factory.namedNode(namespaces.rdf.reifies);\n parser.N3_FORALL = factory.namedNode(namespaces.r.forAll);\n parser.N3_FORSOME = factory.namedNode(namespaces.r.forSome);\n parser.ABBREVIATIONS = {\n 'a': factory.namedNode(namespaces.rdf.type),\n '=': factory.namedNode(namespaces.owl.sameAs),\n '>': factory.namedNode(namespaces.log.implies),\n '<': factory.namedNode(namespaces.log.isImpliedBy),\n };\n parser.QUANTIFIERS_GRAPH = factory.namedNode('urn:n3:quantifiers');\n}\nN3Parser.SUPPORTED_VERSIONS = [\n '1.2',\n '1.2-basic',\n '1.1',\n];\ninitDataFactory(N3Parser.prototype, N3DataFactory);\n","// RDFa Parser for rdflib.js\n\n// Originally by: Alex Milowski\n// From https://github.com/alexmilowski/green-turtle\n// Converted: timbl 2015-08-25 not yet working\n// Added wrapper: csarven 2016-05-09 working\n\n// RDFaProcessor.prototype = new Object() // Was URIResolver\n\n// RDFaProcessor.prototype.constructor=RDFaProcessor\n\n// options.base = base URI not really an option, shopuld always be set.\n//\n\nimport BlankNode from './blank-node';\nimport Literal from './literal';\nimport NamedNode from './named-node';\nimport * as Uri from './uri';\nimport * as Util from './utils-js';\nimport rdf from './factories/canonical-data-factory';\nif (typeof Node === 'undefined') {\n // @@@@@@ Global. Interface to xmldom.\n var Node = {\n ELEMENT_NODE: 1,\n ATTRIBUTE_NODE: 2,\n TEXT_NODE: 3,\n CDATA_SECTION_NODE: 4,\n ENTITY_REFERENCE_NODE: 5,\n ENTITY_NODE: 6,\n PROCESSING_INSTRUCTION_NODE: 7,\n COMMENT_NODE: 8,\n DOCUMENT_NODE: 9,\n DOCUMENT_TYPE_NODE: 10,\n DOCUMENT_FRAGMENT_NODE: 11,\n NOTATION_NODE: 12\n };\n}\nexport default class RDFaProcessor {\n constructor(kb, options) {\n this.options = options || {};\n this.kb = kb;\n this.target = options.target || {\n graph: {\n subjects: {},\n prefixes: {},\n terms: {}\n }\n };\n // XXX: Added to track bnodes\n this.blankNodes = [];\n // XXX: Added for normalisation\n this.htmlOptions = {\n 'selfClosing': 'br img input area base basefont col colgroup source wbr isindex link meta param hr'\n };\n this.theOne = '_:' + new Date().getTime();\n this.language = null;\n this.vocabulary = null;\n this.blankCounter = 0;\n this.langAttributes = [{\n namespaceURI: 'http://www.w3.org/XML/1998/namespace',\n localName: 'lang'\n }];\n this.inXHTMLMode = false;\n this.absURIRE = /[\\w\\_\\-]+:\\S+/;\n this.finishedHandlers = [];\n this.init();\n }\n addTriple(origin, subject, predicate, object) {\n var su, ob, pr, or;\n if (typeof subject === 'undefined') {\n su = rdf.namedNode(this.options.base);\n } else {\n su = this.toRDFNodeObject(subject);\n }\n pr = this.toRDFNodeObject(predicate);\n ob = this.toRDFNodeObject(object);\n or = rdf.namedNode(this.options.base);\n // console.log('Adding { ' + su + ' ' + pr + ' ' + ob + ' ' + or + ' }')\n this.kb.add(su, pr, ob, or);\n }\n ancestorPath(node) {\n var path = '';\n while (node && node.nodeType !== Node.DOCUMENT_NODE) {\n path = '/' + node.localName + path;\n node = node.parentNode;\n }\n return path;\n }\n copyMappings(mappings) {\n var newMappings = {};\n for (var k in mappings) {\n newMappings[k] = mappings[k];\n }\n return newMappings;\n }\n copyProperties() {}\n deriveDateTimeType(value) {\n for (var i = 0; i < RDFaProcessor.dateTimeTypes.length; i++) {\n // console.log(\"Checking \"+value+\" against \"+RDFaProcessor.dateTimeTypes[i].type)\n var matched = RDFaProcessor.dateTimeTypes[i].pattern.exec(value);\n if (matched && matched[0].length === value.length) {\n // console.log(\"Matched!\")\n return RDFaProcessor.dateTimeTypes[i].type;\n }\n }\n return null;\n }\n init() {}\n newBlankNode() {\n this.blankCounter++;\n return '_:' + this.blankCounter;\n }\n newSubjectOrigin(origin, subject) {}\n parseCURIE(value, prefixes, base) {\n var colon = value.indexOf(':');\n var uri;\n if (colon >= 0) {\n var prefix = value.substring(0, colon);\n if (prefix === '') {\n // default prefix\n uri = prefixes[''];\n return uri ? uri + value.substring(colon + 1) : null;\n } else if (prefix === '_') {\n // blank node\n return '_:' + value.substring(colon + 1);\n } else if (RDFaProcessor.NCNAME.test(prefix)) {\n uri = prefixes[prefix];\n if (uri) {\n return uri + value.substring(colon + 1);\n }\n }\n }\n return null;\n }\n parseCURIEOrURI(value, prefixes, base) {\n var curie = this.parseCURIE(value, prefixes, base);\n if (curie) {\n return curie;\n }\n return this.resolveAndNormalize(base, value);\n }\n parsePredicate(value, defaultVocabulary, terms, prefixes, base, ignoreTerms) {\n if (value === '') {\n return null;\n }\n var predicate = this.parseTermOrCURIEOrAbsURI(value, defaultVocabulary, ignoreTerms ? null : terms, prefixes, base);\n if (predicate && predicate.indexOf('_:') === 0) {\n return null;\n }\n return predicate;\n }\n parsePrefixMappings(str, target) {\n var values = this.tokenize(str);\n var prefix = null;\n // var uri = null\n for (var i = 0; i < values.length; i++) {\n if (values[i][values[i].length - 1] === ':') {\n prefix = values[i].substring(0, values[i].length - 1);\n } else if (prefix) {\n target[prefix] = this.options.base ? Uri.join(values[i], this.options.base) : values[i];\n prefix = null;\n }\n }\n }\n static parseRDFaDOM(dom, kb, base) {\n var p = new RDFaProcessor(kb, {\n 'base': base\n });\n // Cannot assign to read only property 'baseURI' of object '#<XMLDocument>':\n if (!dom.baseURI) {\n // Note this became a read-only attribute some time before 2018\n dom.baseURI = base; // oinly set if not already set\n }\n p.process(dom, {\n baseURI: base\n });\n }\n parseSafeCURIEOrCURIEOrURI(value, prefixes, base) {\n value = this.trim(value);\n if (value.charAt(0) === '[' && value.charAt(value.length - 1) === ']') {\n value = value.substring(1, value.length - 1);\n value = value.trim(value);\n if (value.length === 0) {\n return null;\n }\n if (value === '_:') {\n // the one node\n return this.theOne;\n }\n return this.parseCURIE(value, prefixes, base);\n } else {\n return this.parseCURIEOrURI(value, prefixes, base);\n }\n }\n parseTermOrCURIEOrAbsURI(value, defaultVocabulary, terms, prefixes, base) {\n // alert(\"Parsing \"+value+\" with default vocab \"+defaultVocabulary)\n value = this.trim(value);\n var curie = this.parseCURIE(value, prefixes, base);\n if (curie) {\n return curie;\n } else if (terms) {\n if (defaultVocabulary && !this.absURIRE.exec(value)) {\n return defaultVocabulary + value;\n }\n var term = terms[value];\n if (term) {\n return term;\n }\n var lcvalue = value.toLowerCase();\n term = terms[lcvalue];\n if (term) {\n return term;\n }\n }\n if (this.absURIRE.exec(value)) {\n return this.resolveAndNormalize(base, value);\n }\n return null;\n }\n parseTermOrCURIEOrURI(value, defaultVocabulary, terms, prefixes, base) {\n // alert(\"Parsing \"+value+\" with default vocab \"+defaultVocabulary)\n value = this.trim(value);\n var curie = this.parseCURIE(value, prefixes, base);\n if (curie) {\n return curie;\n } else {\n var term = terms[value];\n if (term) {\n return term;\n }\n var lcvalue = value.toLowerCase();\n term = terms[lcvalue];\n if (term) {\n return term;\n }\n if (defaultVocabulary && !this.absURIRE.exec(value)) {\n return defaultVocabulary + value;\n }\n }\n return this.resolveAndNormalize(base, value);\n }\n parseURI(uri) {\n return uri; // We just use strings as URIs, not objects now.\n }\n process(node, options) {\n /*\n if (!window.console) {\n window.console = { log: function() {} }\n } */\n options = options || {};\n var base;\n if (node.nodeType === Node.DOCUMENT_NODE) {\n if (node.baseURI && !options.baseURI) {\n options.baseURI = node.baseURI; // be defensive as DOM implementations vary\n }\n base = node.baseURI;\n node = node.documentElement;\n if (!node.baseURI) {\n node.baseURI = base;\n }\n this.setContext(node);\n } else if (node.parentNode.nodeType === Node.DOCUMENT_NODE) {\n this.setContext(node);\n }\n var queue = [];\n // Fix for Firefox that includes the hash in the base URI\n var removeHash = function (baseURI) {\n // xmldom 0.9 defaults XMLDocument.baseURI to about:blank, which is not a useful document base.\n if ((!baseURI || baseURI === 'about:blank') && options && options.baseURI) {\n return options.baseURI;\n }\n var hash = baseURI.indexOf('#');\n if (hash >= 0) {\n baseURI = baseURI.substring(0, hash);\n }\n if (options && options.baseURIMap) {\n baseURI = options.baseURIMap(baseURI);\n }\n return baseURI;\n };\n queue.push({\n current: node,\n context: this.push(null, removeHash(node.baseURI))\n });\n while (queue.length > 0) {\n var item = queue.shift();\n if (item.parent) {\n // Sequence Step 14: list triple generation\n if (item.context.parent && item.context.parent.listMapping === item.listMapping) {\n // Skip a child context with exactly the same mapping\n continue;\n }\n // console.log(\"Generating lists for \"+item.subject+\", tag \"+item.parent.localName)\n for (let predicate in item.listMapping) {\n var list = item.listMapping[predicate];\n if (list.length === 0) {\n this.addTriple(item.parent, item.subject, predicate, {\n type: RDFaProcessor.objectURI,\n value: 'http://www.w3.org/1999/02/22-rdf-syntax-ns#nil'\n });\n continue;\n }\n var bnodes = [];\n for (let i = 0; i < list.length; i++) {\n bnodes.push(this.newBlankNode());\n // this.newSubject(item.parent,bnodes[i])\n }\n for (let i = 0; i < bnodes.length; i++) {\n this.addTriple(item.parent, bnodes[i], 'http://www.w3.org/1999/02/22-rdf-syntax-ns#first', list[i]);\n this.addTriple(item.parent, bnodes[i], 'http://www.w3.org/1999/02/22-rdf-syntax-ns#rest', {\n type: RDFaProcessor.objectURI,\n value: i + 1 < bnodes.length ? bnodes[i + 1] : 'http://www.w3.org/1999/02/22-rdf-syntax-ns#nil'\n });\n }\n this.addTriple(item.parent, item.subject, predicate, {\n type: RDFaProcessor.objectURI,\n value: bnodes[0]\n });\n }\n continue;\n }\n var current = item.current;\n var context = item.context;\n // console.log(\"Tag: \"+current.localName+\", listMapping=\"+JSON.stringify(context.listMapping))\n // Sequence Step 1\n var skip = false;\n var newSubject = null;\n var currentObjectResource = null;\n var typedResource = null;\n var prefixes = context.prefixes;\n var prefixesCopied = false;\n var incomplete = [];\n var listMapping = context.listMapping;\n var listMappingDifferent = !context.parent;\n var language = context.language;\n var vocabulary = context.vocabulary;\n // TODO: the \"base\" element may be used for HTML+RDFa 1.1\n base = this.parseURI(removeHash(current.baseURI));\n current.item = null;\n // Sequence Step 2: set the default vocabulary\n var vocabAtt = current.getAttributeNode('vocab');\n if (vocabAtt) {\n let value = this.trim(vocabAtt.value);\n if (value.length > 0) {\n vocabulary = value;\n var baseSubject = base.spec;\n // this.newSubject(current,baseSubject)\n this.addTriple(current, baseSubject, 'http://www.w3.org/ns/rdfa#usesVocabulary', {\n type: RDFaProcessor.objectURI,\n value: vocabulary\n });\n } else {\n vocabulary = this.vocabulary;\n }\n }\n // Sequence Step 3: IRI mappings\n // handle xmlns attributes\n for (var i = 0; i < current.attributes.length; i++) {\n var att = current.attributes[i];\n // if (att.namespaceURI==\"http://www.w3.org/2000/xmlns/\") {\n if (att.nodeName.charAt(0) === 'x' && att.nodeName.indexOf('xmlns:') === 0) {\n if (!prefixesCopied) {\n prefixes = this.copyMappings(prefixes);\n prefixesCopied = true;\n }\n var prefix = att.nodeName.substring(6);\n // TODO: resolve relative?\n var ref = RDFaProcessor.trim(att.value);\n prefixes[prefix] = this.options.base ? Uri.join(ref, this.options.base) : ref;\n }\n }\n // Handle prefix mappings (@prefix)\n var prefixAtt = current.getAttributeNode('prefix');\n if (prefixAtt) {\n if (!prefixesCopied) {\n prefixes = this.copyMappings(prefixes);\n prefixesCopied = true;\n }\n this.parsePrefixMappings(prefixAtt.value, prefixes);\n }\n // Sequence Step 4: language\n var xmlLangAtt = null;\n for (let i = 0; !xmlLangAtt && i < this.langAttributes.length; i++) {\n xmlLangAtt = current.getAttributeNodeNS(this.langAttributes[i].namespaceURI, this.langAttributes[i].localName);\n }\n if (xmlLangAtt) {\n let value = RDFaProcessor.trim(xmlLangAtt.value);\n if (value.length > 0) {\n language = value;\n } else {\n language = null;\n }\n }\n var relAtt = current.getAttributeNode('rel');\n var revAtt = current.getAttributeNode('rev');\n var typeofAtt = current.getAttributeNode('typeof');\n var propertyAtt = current.getAttributeNode('property');\n var datatypeAtt = current.getAttributeNode('datatype');\n var datetimeAtt = this.inHTMLMode ? current.getAttributeNode('datetime') : null;\n var contentAtt = current.getAttributeNode('content');\n var aboutAtt = current.getAttributeNode('about');\n var srcAtt = current.getAttributeNode('src');\n var resourceAtt = current.getAttributeNode('resource');\n var hrefAtt = current.getAttributeNode('href');\n var inlistAtt = current.getAttributeNode('inlist');\n var relAttPredicates = [];\n var predicate, values;\n if (relAtt) {\n values = this.tokenize(relAtt.value);\n for (let i = 0; i < values.length; i++) {\n predicate = this.parsePredicate(values[i], vocabulary, context.terms, prefixes, base, this.inHTMLMode && propertyAtt !== null);\n if (predicate) {\n relAttPredicates.push(predicate);\n }\n }\n }\n var revAttPredicates = [];\n if (revAtt) {\n values = this.tokenize(revAtt.value);\n for (let i = 0; i < values.length; i++) {\n predicate = this.parsePredicate(values[i], vocabulary, context.terms, prefixes, base, this.inHTMLMode && propertyAtt);\n if (predicate) {\n revAttPredicates.push(predicate);\n }\n }\n }\n // Section 3.1, bullet 7\n if (this.inHTMLMode && (relAtt || revAtt) && propertyAtt) {\n if (relAttPredicates.length === 0) {\n relAtt = null;\n }\n if (revAttPredicates.length === 0) {\n revAtt = null;\n }\n }\n if (relAtt || revAtt) {\n // Sequence Step 6: establish new subject and value\n if (aboutAtt) {\n newSubject = this.parseSafeCURIEOrCURIEOrURI(aboutAtt.value, prefixes, base);\n }\n if (typeofAtt) {\n typedResource = newSubject;\n }\n if (!newSubject) {\n if (current.parentNode.nodeType === Node.DOCUMENT_NODE) {\n newSubject = removeHash(current.baseURI);\n } else if (context.parentObject) {\n // TODO: Verify: If the xml:base has been set and the parentObject is the baseURI of the parent, then the subject needs to be the new base URI\n newSubject = removeHash(current.parentNode.baseURI) === context.parentObject ? removeHash(current.baseURI) : context.parentObject;\n }\n }\n if (resourceAtt) {\n currentObjectResource = this.parseSafeCURIEOrCURIEOrURI(resourceAtt.value, prefixes, base);\n }\n if (!currentObjectResource) {\n if (hrefAtt) {\n currentObjectResource = this.resolveAndNormalize(base, encodeURI(hrefAtt.value));\n } else if (srcAtt) {\n currentObjectResource = this.resolveAndNormalize(base, encodeURI(srcAtt.value));\n } else if (typeofAtt && !aboutAtt && !(this.inXHTMLMode && (current.localName === 'head' || current.localName === 'body'))) {\n currentObjectResource = this.newBlankNode();\n }\n }\n if (typeofAtt && !aboutAtt && this.inXHTMLMode && (current.localName === 'head' || current.localName === 'body')) {\n typedResource = newSubject;\n } else if (typeofAtt && !aboutAtt) {\n typedResource = currentObjectResource;\n }\n } else if (propertyAtt && !contentAtt && !datatypeAtt) {\n // Sequence Step 5.1: establish a new subject\n if (aboutAtt) {\n newSubject = this.parseSafeCURIEOrCURIEOrURI(aboutAtt.value, prefixes, base);\n if (typeofAtt) {\n typedResource = newSubject;\n }\n }\n if (!newSubject && current.parentNode.nodeType === Node.DOCUMENT_NODE) {\n newSubject = removeHash(current.baseURI);\n if (typeofAtt) {\n typedResource = newSubject;\n }\n } else if (!newSubject && context.parentObject) {\n // TODO: Verify: If the xml:base has been set and the parentObject is the baseURI of the parent, then the subject needs to be the new base URI\n newSubject = removeHash(current.parentNode.baseURI) === context.parentObject ? removeHash(current.baseURI) : context.parentObject;\n }\n if (typeofAtt && !typedResource) {\n if (resourceAtt) {\n typedResource = this.parseSafeCURIEOrCURIEOrURI(resourceAtt.value, prefixes, base);\n }\n if (!typedResource && hrefAtt) {\n typedResource = this.resolveAndNormalize(base, encodeURI(hrefAtt.value));\n }\n if (!typedResource && srcAtt) {\n typedResource = this.resolveAndNormalize(base, encodeURI(srcAtt.value));\n }\n if (!typedResource && (this.inXHTMLMode || this.inHTMLMode) && (current.localName === 'head' || current.localName === 'body')) {\n typedResource = newSubject;\n }\n if (!typedResource) {\n typedResource = this.newBlankNode();\n }\n currentObjectResource = typedResource;\n }\n // console.log(current.localName+\", newSubject=\"+newSubject+\", typedResource=\"+typedResource+\", currentObjectResource=\"+currentObjectResource)\n } else {\n // Sequence Step 5.2: establish a new subject\n if (aboutAtt) {\n newSubject = this.parseSafeCURIEOrCURIEOrURI(aboutAtt.value, prefixes, base);\n }\n if (!newSubject && resourceAtt) {\n newSubject = this.parseSafeCURIEOrCURIEOrURI(resourceAtt.value, prefixes, base);\n }\n if (!newSubject && hrefAtt) {\n newSubject = this.resolveAndNormalize(base, encodeURI(hrefAtt.value));\n }\n if (!newSubject && srcAtt) {\n newSubject = this.resolveAndNormalize(base, encodeURI(srcAtt.value));\n }\n if (!newSubject) {\n if (current.parentNode.nodeType === Node.DOCUMENT_NODE) {\n newSubject = removeHash(current.baseURI);\n } else if ((this.inXHTMLMode || this.inHTMLMode) && (current.localName === 'head' || current.localName === 'body')) {\n newSubject = removeHash(current.parentNode.baseURI) === context.parentObject ? removeHash(current.baseURI) : context.parentObject;\n } else if (typeofAtt) {\n newSubject = this.newBlankNode();\n } else if (context.parentObject) {\n // TODO: Verify: If the xml:base has been set and the parentObject is the baseURI of the parent, then the subject needs to be the new base URI\n newSubject = removeHash(current.parentNode.baseURI) === context.parentObject ? removeHash(current.baseURI) : context.parentObject;\n if (!propertyAtt) {\n skip = true;\n }\n }\n }\n if (typeofAtt) {\n typedResource = newSubject;\n }\n }\n // console.log(current.tagName+\": newSubject=\"+newSubject+\", currentObjectResource=\"+currentObjectResource+\", typedResource=\"+typedResource+\", skip=\"+skip)\n // var rdfaData = null\n if (newSubject) {\n // this.newSubject(current,newSubject)\n if (aboutAtt || resourceAtt || typedResource) {\n var id = newSubject;\n if (typeofAtt && !aboutAtt && !resourceAtt && currentObjectResource) {\n id = currentObjectResource;\n }\n // console.log(\"Setting data attribute for \"+current.localName+\" for subject \"+id)\n this.newSubjectOrigin(current, id);\n }\n }\n // Sequence Step 7: generate type triple\n if (typedResource) {\n values = this.tokenize(typeofAtt.value);\n for (let i = 0; i < values.length; i++) {\n var object = this.parseTermOrCURIEOrAbsURI(values[i], vocabulary, context.terms, prefixes, base);\n if (object) {\n this.addTriple(current, typedResource, RDFaProcessor.typeURI, {\n type: RDFaProcessor.objectURI,\n value: object\n });\n }\n }\n }\n // Sequence Step 8: new list mappings if there is a new subject\n // console.log(\"Step 8: newSubject=\"+newSubject+\", context.parentObject=\"+context.parentObject)\n if (newSubject && newSubject !== context.parentObject) {\n // console.log(\"Generating new list mapping for \"+newSubject)\n listMapping = {};\n listMappingDifferent = true;\n }\n // Sequence Step 9: generate object triple\n if (currentObjectResource) {\n if (relAtt && inlistAtt) {\n for (let i = 0; i < relAttPredicates.length; i++) {\n let list = listMapping[relAttPredicates[i]];\n if (!list) {\n list = [];\n listMapping[relAttPredicates[i]] = list;\n }\n list.push({\n type: RDFaProcessor.objectURI,\n value: currentObjectResource\n });\n }\n } else if (relAtt) {\n for (let i = 0; i < relAttPredicates.length; i++) {\n this.addTriple(current, newSubject, relAttPredicates[i], {\n type: RDFaProcessor.objectURI,\n value: currentObjectResource\n });\n }\n }\n if (revAtt) {\n for (let i = 0; i < revAttPredicates.length; i++) {\n this.addTriple(current, currentObjectResource, revAttPredicates[i], {\n type: RDFaProcessor.objectURI,\n value: newSubject\n });\n }\n }\n } else {\n // Sequence Step 10: incomplete triples\n if (newSubject && !currentObjectResource && (relAtt || revAtt)) {\n currentObjectResource = this.newBlankNode();\n // alert(current.tagName+\": generated blank node, newSubject=\"+newSubject+\" currentObjectResource=\"+currentObjectResource)\n }\n if (relAtt && inlistAtt) {\n for (let i = 0; i < relAttPredicates.length; i++) {\n let list = listMapping[relAttPredicates[i]];\n if (!list) {\n list = [];\n listMapping[predicate] = list;\n }\n // console.log(\"Adding incomplete list for \"+predicate)\n incomplete.push({\n predicate: relAttPredicates[i],\n list: list\n });\n }\n } else if (relAtt) {\n for (let i = 0; i < relAttPredicates.length; i++) {\n incomplete.push({\n predicate: relAttPredicates[i],\n forward: true\n });\n }\n }\n if (revAtt) {\n for (let i = 0; i < revAttPredicates.length; i++) {\n incomplete.push({\n predicate: revAttPredicates[i],\n forward: false\n });\n }\n }\n }\n // Step 11: Current property values\n if (propertyAtt) {\n var datatype = null;\n var content = null;\n if (datatypeAtt) {\n datatype = datatypeAtt.value === '' ? RDFaProcessor.PlainLiteralURI : this.parseTermOrCURIEOrAbsURI(datatypeAtt.value, vocabulary, context.terms, prefixes, base);\n if (datetimeAtt && !contentAtt) {\n content = datetimeAtt.value;\n } else {\n content = datatype === RDFaProcessor.XMLLiteralURI || datatype === RDFaProcessor.HTMLLiteralURI ? null : contentAtt ? contentAtt.value : current.textContent;\n }\n } else if (contentAtt) {\n datatype = RDFaProcessor.PlainLiteralURI;\n content = contentAtt.value;\n } else if (datetimeAtt) {\n content = datetimeAtt.value;\n datatype = RDFaProcessor.deriveDateTimeType(content);\n if (!datatype) {\n datatype = RDFaProcessor.PlainLiteralURI;\n }\n } else if (!relAtt && !revAtt) {\n if (resourceAtt) {\n content = this.parseSafeCURIEOrCURIEOrURI(resourceAtt.value, prefixes, base);\n }\n if (!content && hrefAtt) {\n content = this.resolveAndNormalize(base, encodeURI(hrefAtt.value));\n } else if (!content && srcAtt) {\n content = this.resolveAndNormalize(base, encodeURI(srcAtt.value));\n }\n if (content) {\n datatype = RDFaProcessor.objectURI;\n }\n }\n if (!datatype) {\n if (typeofAtt && !aboutAtt) {\n datatype = RDFaProcessor.objectURI;\n content = typedResource;\n } else {\n content = current.textContent;\n if (this.inHTMLMode && current.localName === 'time') {\n datatype = RDFaProcessor.deriveDateTimeType(content);\n }\n if (!datatype) {\n datatype = RDFaProcessor.PlainLiteralURI;\n }\n }\n }\n values = this.tokenize(propertyAtt.value);\n for (let i = 0; i < values.length; i++) {\n let predicate = this.parsePredicate(values[i], vocabulary, context.terms, prefixes, base);\n if (predicate) {\n if (inlistAtt) {\n let list = listMapping[predicate];\n if (!list) {\n list = [];\n listMapping[predicate] = list;\n }\n list.push(datatype === RDFaProcessor.XMLLiteralURI || datatype === RDFaProcessor.HTMLLiteralURI ? {\n type: datatype,\n value: current.childNodes\n } : {\n type: datatype || RDFaProcessor.PlainLiteralURI,\n value: content,\n language: language\n });\n } else {\n if (datatype === RDFaProcessor.XMLLiteralURI || datatype === RDFaProcessor.HTMLLiteralURI) {\n this.addTriple(current, newSubject, predicate, {\n type: datatype,\n value: current.childNodes\n });\n } else {\n this.addTriple(current, newSubject, predicate, {\n type: datatype || RDFaProcessor.PlainLiteralURI,\n value: content,\n language: language\n });\n // console.log(newSubject+\" \"+predicate+\"=\"+content)\n }\n }\n }\n }\n }\n // Sequence Step 12: complete incomplete triples with new subject\n if (newSubject && !skip) {\n for (let i = 0; i < context.incomplete.length; i++) {\n if (context.incomplete[i].list) {\n // console.log(\"Adding subject \"+newSubject+\" to list for \"+context.incomplete[i].predicate)\n // TODO: it is unclear what to do here\n context.incomplete[i].list.push({\n type: RDFaProcessor.objectURI,\n value: newSubject\n });\n } else if (context.incomplete[i].forward) {\n // console.log(current.tagName+\": completing forward triple \"+context.incomplete[i].predicate+\" with object=\"+newSubject)\n this.addTriple(current, context.subject, context.incomplete[i].predicate, {\n type: RDFaProcessor.objectURI,\n value: newSubject\n });\n } else {\n // console.log(current.tagName+\": completing reverse triple with object=\"+context.subject)\n this.addTriple(current, newSubject, context.incomplete[i].predicate, {\n type: RDFaProcessor.objectURI,\n value: context.subject\n });\n }\n }\n }\n var childContext = null;\n var listSubject = newSubject;\n if (skip) {\n // TODO: should subject be null?\n childContext = this.push(context, context.subject);\n // TODO: should the entObject be passed along? If not, then intermediary children will keep properties from being associated with incomplete triples.\n // TODO: Verify: if the current baseURI has changed and the parentObject is the parent's base URI, then the baseURI should change\n childContext.parentObject = removeHash(current.parentNode.baseURI) === context.parentObject ? removeHash(current.baseURI) : context.parentObject;\n childContext.incomplete = context.incomplete;\n childContext.language = language;\n childContext.prefixes = prefixes;\n childContext.vocabulary = vocabulary;\n } else {\n childContext = this.push(context, newSubject);\n childContext.parentObject = currentObjectResource || newSubject || context.subject;\n childContext.prefixes = prefixes;\n childContext.incomplete = incomplete;\n if (currentObjectResource) {\n // console.log(\"Generating new list mapping for \"+currentObjectResource)\n listSubject = currentObjectResource;\n listMapping = {};\n listMappingDifferent = true;\n }\n childContext.listMapping = listMapping;\n childContext.language = language;\n childContext.vocabulary = vocabulary;\n }\n if (listMappingDifferent) {\n // console.log(\"Pushing list parent \"+current.localName)\n queue.unshift({\n parent: current,\n context: context,\n subject: listSubject,\n listMapping: listMapping\n });\n }\n for (var child = current.lastChild; child; child = child.previousSibling) {\n if (child.nodeType === Node.ELEMENT_NODE) {\n // console.log(\"Pushing child \"+child.localName)\n // child.baseURI = current.baseURI\n queue.unshift({\n current: child,\n context: childContext\n });\n }\n }\n }\n if (this.inHTMLMode) {\n this.copyProperties();\n }\n for (let i = 0; i < this.finishedHandlers.length; i++) {\n this.finishedHandlers[i](node);\n }\n }\n push(parent, subject) {\n return {\n parent: parent,\n subject: subject || (parent ? parent.subject : null),\n parentObject: null,\n incomplete: [],\n listMapping: parent ? parent.listMapping : {},\n language: parent ? parent.language : this.language,\n prefixes: parent ? parent.prefixes : this.target.graph.prefixes,\n terms: parent ? parent.terms : this.target.graph.terms,\n vocabulary: parent ? parent.vocabulary : this.vocabulary\n };\n }\n resolveAndNormalize(base, uri) {\n // console.log(\"Joining \" + uri + \" to \" + base + \" making \" + Uri.join(uri, base))\n return Uri.join(uri, base); // @@ normalize?\n }\n setContext(node) {\n // We only recognized XHTML+RDFa 1.1 if the version is set propertyly\n if (node.localName === 'html' && node.getAttribute('version') === 'XHTML+RDFa 1.1') {\n this.setXHTMLContext();\n } else if (node.localName === 'html' || node.namespaceURI === 'http://www.w3.org/1999/xhtml') {\n if (typeof document !== 'undefined' && document.doctype) {\n if (document.doctype.publicId === '-//W3C//DTD XHTML+RDFa 1.0//EN' && document.doctype.systemId === 'http://www.w3.org/MarkUp/DTD/xhtml-rdfa-1.dtd') {\n console.log('WARNING: RDF 1.0 is not supported. Defaulting to HTML5 mode.');\n this.setHTMLContext();\n } else if (document.doctype.publicId === '-//W3C//DTD XHTML+RDFa 1.1//EN' && document.doctype.systemId === 'http://www.w3.org/MarkUp/DTD/xhtml-rdfa-2.dtd') {\n this.setXHTMLContext();\n } else {\n this.setHTMLContext();\n }\n } else {\n this.setHTMLContext();\n }\n } else {\n this.setXMLContext();\n }\n }\n setHTMLContext() {\n this.setInitialContext();\n this.langAttributes = [{\n namespaceURI: 'http://www.w3.org/XML/1998/namespace',\n localName: 'lang'\n }, {\n namespaceURI: null,\n localName: 'lang'\n }];\n this.inXHTMLMode = false;\n this.inHTMLMode = true;\n }\n setInitialContext() {\n this.vocabulary = null;\n // By default, the prefixes are terms are loaded to the RDFa 1.1. standard within the graph constructor\n this.langAttributes = [{\n namespaceURI: 'http://www.w3.org/XML/1998/namespace',\n localName: 'lang'\n }];\n }\n setXHTMLContext() {\n this.setInitialContext();\n this.inXHTMLMode = true;\n this.inHTMLMode = false;\n this.langAttributes = [{\n namespaceURI: 'http://www.w3.org/XML/1998/namespace',\n localName: 'lang'\n }, {\n namespaceURI: null,\n localName: 'lang'\n }];\n // From http://www.w3.org/2011/rdfa-context/xhtml-rdfa-1.1\n this.target.graph.terms['alternate'] = 'http://www.w3.org/1999/xhtml/vocab#alternate';\n this.target.graph.terms['appendix'] = 'http://www.w3.org/1999/xhtml/vocab#appendix';\n this.target.graph.terms['bookmark'] = 'http://www.w3.org/1999/xhtml/vocab#bookmark';\n this.target.graph.terms['cite'] = 'http://www.w3.org/1999/xhtml/vocab#cite';\n this.target.graph.terms['chapter'] = 'http://www.w3.org/1999/xhtml/vocab#chapter';\n this.target.graph.terms['contents'] = 'http://www.w3.org/1999/xhtml/vocab#contents';\n this.target.graph.terms['copyright'] = 'http://www.w3.org/1999/xhtml/vocab#copyright';\n this.target.graph.terms['first'] = 'http://www.w3.org/1999/xhtml/vocab#first';\n this.target.graph.terms['glossary'] = 'http://www.w3.org/1999/xhtml/vocab#glossary';\n this.target.graph.terms['help'] = 'http://www.w3.org/1999/xhtml/vocab#help';\n this.target.graph.terms['icon'] = 'http://www.w3.org/1999/xhtml/vocab#icon';\n this.target.graph.terms['index'] = 'http://www.w3.org/1999/xhtml/vocab#index';\n this.target.graph.terms['last'] = 'http://www.w3.org/1999/xhtml/vocab#last';\n this.target.graph.terms['license'] = 'http://www.w3.org/1999/xhtml/vocab#license';\n this.target.graph.terms['meta'] = 'http://www.w3.org/1999/xhtml/vocab#meta';\n this.target.graph.terms['next'] = 'http://www.w3.org/1999/xhtml/vocab#next';\n this.target.graph.terms['prev'] = 'http://www.w3.org/1999/xhtml/vocab#prev';\n this.target.graph.terms['previous'] = 'http://www.w3.org/1999/xhtml/vocab#previous';\n this.target.graph.terms['section'] = 'http://www.w3.org/1999/xhtml/vocab#section';\n this.target.graph.terms['stylesheet'] = 'http://www.w3.org/1999/xhtml/vocab#stylesheet';\n this.target.graph.terms['subsection'] = 'http://www.w3.org/1999/xhtml/vocab#subsection';\n this.target.graph.terms['start'] = 'http://www.w3.org/1999/xhtml/vocab#start';\n this.target.graph.terms['top'] = 'http://www.w3.org/1999/xhtml/vocab#top';\n this.target.graph.terms['up'] = 'http://www.w3.org/1999/xhtml/vocab#up';\n this.target.graph.terms['p3pv1'] = 'http://www.w3.org/1999/xhtml/vocab#p3pv1';\n // other\n this.target.graph.terms['related'] = 'http://www.w3.org/1999/xhtml/vocab#related';\n this.target.graph.terms['role'] = 'http://www.w3.org/1999/xhtml/vocab#role';\n this.target.graph.terms['transformation'] = 'http://www.w3.org/1999/xhtml/vocab#transformation';\n }\n setXMLContext() {\n this.setInitialContext();\n this.inXHTMLMode = false;\n this.inHTMLMode = false;\n }\n tokenize(str) {\n return this.trim(str).split(/\\s+/);\n }\n static tokenize(str) {\n return this.trim(str).split(/\\s+/);\n }\n toRDFNodeObject(x) {\n if (typeof x === 'undefined') return undefined;\n if (typeof x === 'string') {\n if (x.substring(0, 2) === '_:') {\n if (typeof this.blankNodes[x.substring(2)] === 'undefined') {\n this.blankNodes[x.substring(2)] = new BlankNode(x.substring(2));\n }\n return this.blankNodes[x.substring(2)];\n }\n return rdf.namedNode(x);\n }\n switch (x.type) {\n case RDFaProcessor.objectURI:\n if (x.value.substring(0, 2) === '_:') {\n if (typeof this.blankNodes[x.value.substring(2)] === 'undefined') {\n this.blankNodes[x.value.substring(2)] = new BlankNode(x.value.substring(2));\n }\n return this.blankNodes[x.value.substring(2)];\n }\n return rdf.namedNode(x.value);\n case RDFaProcessor.PlainLiteralURI:\n return new Literal(x.value, x.language || '');\n case RDFaProcessor.XMLLiteralURI:\n case RDFaProcessor.HTMLLiteralURI:\n var string = '';\n Object.keys(x.value).forEach(i => {\n string += Util.domToString(x.value[i], this.htmlOptions);\n });\n return new Literal(string, '', new NamedNode(x.type));\n default:\n return new Literal(x.value, '', new NamedNode(x.type));\n }\n }\n trim(str) {\n return str.replace(/^\\s\\s*/, '').replace(/\\s\\s*$/, '');\n }\n static trim(str) {\n return str.replace(/^\\s\\s*/, '').replace(/\\s\\s*$/, '');\n }\n}\nRDFaProcessor.XMLLiteralURI = 'http://www.w3.org/1999/02/22-rdf-syntax-ns#XMLLiteral';\nRDFaProcessor.HTMLLiteralURI = 'http://www.w3.org/1999/02/22-rdf-syntax-ns#HTML';\nRDFaProcessor.PlainLiteralURI = 'http://www.w3.org/1999/02/22-rdf-syntax-ns#PlainLiteral';\nRDFaProcessor.objectURI = 'http://www.w3.org/1999/02/22-rdf-syntax-ns#object';\nRDFaProcessor.typeURI = 'http://www.w3.org/1999/02/22-rdf-syntax-ns#type';\nRDFaProcessor.nameChar = '[-A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD\\u10000-\\uEFFFF\\.0-9\\u00B7\\u0300-\\u036F\\u203F-\\u2040]';\nRDFaProcessor.nameStartChar = '[\\u0041-\\u005A\\u0061-\\u007A\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u00FF\\u0100-\\u0131\\u0134-\\u013E\\u0141-\\u0148\\u014A-\\u017E\\u0180-\\u01C3\\u01CD-\\u01F0\\u01F4-\\u01F5\\u01FA-\\u0217\\u0250-\\u02A8\\u02BB-\\u02C1\\u0386\\u0388-\\u038A\\u038C\\u038E-\\u03A1\\u03A3-\\u03CE\\u03D0-\\u03D6\\u03DA\\u03DC\\u03DE\\u03E0\\u03E2-\\u03F3\\u0401-\\u040C\\u040E-\\u044F\\u0451-\\u045C\\u045E-\\u0481\\u0490-\\u04C4\\u04C7-\\u04C8\\u04CB-\\u04CC\\u04D0-\\u04EB\\u04EE-\\u04F5\\u04F8-\\u04F9\\u0531-\\u0556\\u0559\\u0561-\\u0586\\u05D0-\\u05EA\\u05F0-\\u05F2\\u0621-\\u063A\\u0641-\\u064A\\u0671-\\u06B7\\u06BA-\\u06BE\\u06C0-\\u06CE\\u06D0-\\u06D3\\u06D5\\u06E5-\\u06E6\\u0905-\\u0939\\u093D\\u0958-\\u0961\\u0985-\\u098C\\u098F-\\u0990\\u0993-\\u09A8\\u09AA-\\u09B0\\u09B2\\u09B6-\\u09B9\\u09DC-\\u09DD\\u09DF-\\u09E1\\u09F0-\\u09F1\\u0A05-\\u0A0A\\u0A0F-\\u0A10\\u0A13-\\u0A28\\u0A2A-\\u0A30\\u0A32-\\u0A33\\u0A35-\\u0A36\\u0A38-\\u0A39\\u0A59-\\u0A5C\\u0A5E\\u0A72-\\u0A74\\u0A85-\\u0A8B\\u0A8D\\u0A8F-\\u0A91\\u0A93-\\u0AA8\\u0AAA-\\u0AB0\\u0AB2-\\u0AB3\\u0AB5-\\u0AB9\\u0ABD\\u0AE0\\u0B05-\\u0B0C\\u0B0F-\\u0B10\\u0B13-\\u0B28\\u0B2A-\\u0B30\\u0B32-\\u0B33\\u0B36-\\u0B39\\u0B3D\\u0B5C-\\u0B5D\\u0B5F-\\u0B61\\u0B85-\\u0B8A\\u0B8E-\\u0B90\\u0B92-\\u0B95\\u0B99-\\u0B9A\\u0B9C\\u0B9E-\\u0B9F\\u0BA3-\\u0BA4\\u0BA8-\\u0BAA\\u0BAE-\\u0BB5\\u0BB7-\\u0BB9\\u0C05-\\u0C0C\\u0C0E-\\u0C10\\u0C12-\\u0C28\\u0C2A-\\u0C33\\u0C35-\\u0C39\\u0C60-\\u0C61\\u0C85-\\u0C8C\\u0C8E-\\u0C90\\u0C92-\\u0CA8\\u0CAA-\\u0CB3\\u0CB5-\\u0CB9\\u0CDE\\u0CE0-\\u0CE1\\u0D05-\\u0D0C\\u0D0E-\\u0D10\\u0D12-\\u0D28\\u0D2A-\\u0D39\\u0D60-\\u0D61\\u0E01-\\u0E2E\\u0E30\\u0E32-\\u0E33\\u0E40-\\u0E45\\u0E81-\\u0E82\\u0E84\\u0E87-\\u0E88\\u0E8A\\u0E8D\\u0E94-\\u0E97\\u0E99-\\u0E9F\\u0EA1-\\u0EA3\\u0EA5\\u0EA7\\u0EAA-\\u0EAB\\u0EAD-\\u0EAE\\u0EB0\\u0EB2-\\u0EB3\\u0EBD\\u0EC0-\\u0EC4\\u0F40-\\u0F47\\u0F49-\\u0F69\\u10A0-\\u10C5\\u10D0-\\u10F6\\u1100\\u1102-\\u1103\\u1105-\\u1107\\u1109\\u110B-\\u110C\\u110E-\\u1112\\u113C\\u113E\\u1140\\u114C\\u114E\\u1150\\u1154-\\u1155\\u1159\\u115F-\\u1161\\u1163\\u1165\\u1167\\u1169\\u116D-\\u116E\\u1172-\\u1173\\u1175\\u119E\\u11A8\\u11AB\\u11AE-\\u11AF\\u11B7-\\u11B8\\u11BA\\u11BC-\\u11C2\\u11EB\\u11F0\\u11F9\\u1E00-\\u1E9B\\u1EA0-\\u1EF9\\u1F00-\\u1F15\\u1F18-\\u1F1D\\u1F20-\\u1F45\\u1F48-\\u1F4D\\u1F50-\\u1F57\\u1F59\\u1F5B\\u1F5D\\u1F5F-\\u1F7D\\u1F80-\\u1FB4\\u1FB6-\\u1FBC\\u1FBE\\u1FC2-\\u1FC4\\u1FC6-\\u1FCC\\u1FD0-\\u1FD3\\u1FD6-\\u1FDB\\u1FE0-\\u1FEC\\u1FF2-\\u1FF4\\u1FF6-\\u1FFC\\u2126\\u212A-\\u212B\\u212E\\u2180-\\u2182\\u3041-\\u3094\\u30A1-\\u30FA\\u3105-\\u312C\\uAC00-\\uD7A3\\u4E00-\\u9FA5\\u3007\\u3021-\\u3029_]';\nRDFaProcessor.NCNAME = new RegExp('^' + RDFaProcessor.nameStartChar + RDFaProcessor.nameChar + '*$');\n\n/*\nRDFaProcessor.prototype.resolveAndNormalize = function(base,href) {\n var u = base.resolve(href)\n var parsed = this.parseURI(u)\n parsed.normalize()\n return parsed.spec\n}\n*/\n\nRDFaProcessor.dateTimeTypes = [{\n pattern: /-?P(?:[0-9]+Y)?(?:[0-9]+M)?(?:[0-9]+D)?(?:T(?:[0-9]+H)?(?:[0-9]+M)?(?:[0-9]+(?:\\.[0-9]+)?S)?)?/,\n type: 'http://www.w3.org/2001/XMLSchema#duration'\n}, {\n pattern: /-?(?:[1-9][0-9][0-9][0-9]|0[1-9][0-9][0-9]|00[1-9][0-9]|000[1-9])-[0-9][0-9]-[0-9][0-9]T(?:[0-1][0-9]|2[0-4]):[0-5][0-9]:[0-5][0-9](?:\\.[0-9]+)?(?:Z|[+\\-][0-9][0-9]:[0-9][0-9])?/,\n type: 'http://www.w3.org/2001/XMLSchema#dateTime'\n}, {\n pattern: /-?(?:[1-9][0-9][0-9][0-9]|0[1-9][0-9][0-9]|00[1-9][0-9]|000[1-9])-[0-9][0-9]-[0-9][0-9](?:Z|[+\\-][0-9][0-9]:[0-9][0-9])?/,\n type: 'http://www.w3.org/2001/XMLSchema#date'\n}, {\n pattern: /(?:[0-1][0-9]|2[0-4]):[0-5][0-9]:[0-5][0-9](?:\\.[0-9]+)?(?:Z|[+\\-][0-9][0-9]:[0-9][0-9])?/,\n type: 'http://www.w3.org/2001/XMLSchema#time'\n}, {\n pattern: /-?(?:[1-9][0-9][0-9][0-9]|0[1-9][0-9][0-9]|00[1-9][0-9]|000[1-9])-[0-9][0-9]/,\n type: 'http://www.w3.org/2001/XMLSchema#gYearMonth'\n}, {\n pattern: /-?[1-9][0-9][0-9][0-9]|0[1-9][0-9][0-9]|00[1-9][0-9]|000[1-9]/,\n type: 'http://www.w3.org/2001/XMLSchema#gYear'\n}];\nconst parseRDFaDOM = RDFaProcessor.parseRDFaDOM;\nexport { parseRDFaDOM };","import _defineProperty from \"@babel/runtime/helpers/defineProperty\";\n/**\n * RDF/XML PARSER\n *\n * Parser believed to be in full positive RDF/XML parsing compliance\n * with the possible exception of handling deprecated RDF attributes\n * appropriately. Parser is believed to comply fully with other W3C\n * and industry standards where appropriate (DOM, ECMAScript, &c.)\n *\n * Author: David Sheets <dsheets@mit.edu>\n *\n * W3C® SOFTWARE NOTICE AND LICENSE\n * http://www.w3.org/Consortium/Legal/2002/copyright-software-20021231\n * This work (and included software, documentation such as READMEs, or\n * other related items) is being provided by the copyright holders under\n * the following license. By obtaining, using and/or copying this work,\n * you (the licensee) agree that you have read, understood, and will\n * comply with the following terms and conditions.\n *\n * Permission to copy, modify, and distribute this software and its\n * documentation, with or without modification, for any purpose and\n * without fee or royalty is hereby granted, provided that you include\n * the following on ALL copies of the software and documentation or\n * portions thereof, including modifications:\n *\n * 1. The full text of this NOTICE in a location viewable to users of\n * the redistributed or derivative work.\n * 2. Any pre-existing intellectual property disclaimers, notices, or terms and\n * conditions. If none exist, the W3C Software Short Notice should be\n * included (hypertext is preferred, text is permitted) within the body\n * of any redistributed or derivative code.\n * 3. Notice of any changes or modifications to the files, including the\n * date changes were made. (We recommend you provide URIs to the location\n * from which the code is derived.)\n *\n * THIS SOFTWARE AND DOCUMENTATION IS PROVIDED \"AS IS,\" AND COPYRIGHT\n * HOLDERS MAKE NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR IMPLIED,\n * INCLUDING BUT NOT LIMITED TO, WARRANTIES OF MERCHANTABILITY OR FITNESS\n * FOR ANY PARTICULAR PURPOSE OR THAT THE USE OF THE SOFTWARE OR\n * DOCUMENTATION WILL NOT INFRINGE ANY THIRD PARTY PATENTS, COPYRIGHTS,\n * TRADEMARKS OR OTHER RIGHTS.\n *\n * COPYRIGHT HOLDERS WILL NOT BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL\n * OR CONSEQUENTIAL DAMAGES ARISING OUT OF ANY USE OF THE SOFTWARE OR\n * DOCUMENTATION.\n *\n * The name and trademarks of copyright holders may NOT be used in\n * advertising or publicity pertaining to the software without specific,\n * written prior permission. Title to copyright in this software and any\n * associated documentation will at all times remain with copyright\n * holders.\n */\n/**\n * @class RDFParser resource object tied to an RDFStore\n *\n * @author David Sheets <dsheets@mit.edu>\n *\n*/\nimport * as uriUtil from './uri';\nexport default class RDFParser {\n /*\n * @constructor\n * @param {RDFStore} store An RDFStore object\n */\n constructor(store) {\n /** Our triple store reference @private */\n\n this.store = store; /** Our identified blank nodes @private */\n this.bnodes = {}; /** A context for context-aware stores @private */\n this.why = null; /** Reification flag */\n this.reify = false;\n }\n\n /** Standard namespaces that we know how to handle @final\n * @member RDFParser\n */\n\n /**\n * Frame class for namespace and base URI lookups\n * Base lookups will always resolve because the parser knows\n * the default base.\n *\n * @private\n */\n\n frameFactory(parser, parent, element) {\n return {\n 'NODE': 1,\n 'ARC': 2,\n 'parent': parent,\n 'parser': parser,\n 'store': parser.store,\n 'element': element,\n 'lastChild': 0,\n 'base': null,\n 'lang': null,\n 'node': null,\n 'nodeType': null,\n 'listIndex': 1,\n 'rdfid': null,\n 'datatype': null,\n 'collection': false,\n /** Terminate the frame and notify the store that we're done */\n 'terminateFrame': function () {\n if (this.collection) {\n this.node.close();\n }\n },\n /** Add a symbol of a certain type to the this frame */'addSymbol': function (type, uri) {\n uri = uriUtil.join(uri, this.base);\n this.node = this.store.sym(uri);\n this.nodeType = type;\n },\n /** Load any constructed triples into the store */'loadTriple': function () {\n if (this.parent.parent.collection) {\n this.parent.parent.node.append(this.node);\n } else {\n this.store.add(this.parent.parent.node, this.parent.node, this.node, this.parser.why);\n }\n if (this.parent.rdfid != null) {\n // reify\n var triple = this.store.sym(uriUtil.join('#' + this.parent.rdfid, this.base));\n this.store.add(triple, this.store.sym(RDFParser.ns.RDF + 'type'), this.store.sym(RDFParser.ns.RDF + 'Statement'), this.parser.why);\n this.store.add(triple, this.store.sym(RDFParser.ns.RDF + 'subject'), this.parent.parent.node, this.parser.why);\n this.store.add(triple, this.store.sym(RDFParser.ns.RDF + 'predicate'), this.parent.node, this.parser.why);\n this.store.add(triple, this.store.sym(RDFParser.ns.RDF + 'object'), this.node, this.parser.why);\n }\n },\n /** Check if it's OK to load a triple */'isTripleToLoad': function () {\n return this.parent != null && this.parent.parent != null && this.nodeType === this.NODE && this.parent.nodeType === this.ARC && this.parent.parent.nodeType === this.NODE;\n },\n /** Add a symbolic node to this frame */'addNode': function (uri) {\n this.addSymbol(this.NODE, uri);\n if (this.isTripleToLoad()) {\n this.loadTriple();\n }\n },\n /** Add a collection node to this frame */'addCollection': function () {\n this.nodeType = this.NODE;\n this.node = this.store.collection();\n this.collection = true;\n if (this.isTripleToLoad()) {\n this.loadTriple();\n }\n },\n /** Add a collection arc to this frame */'addCollectionArc': function () {\n this.nodeType = this.ARC;\n },\n /** Add a bnode to this frame */'addBNode': function (id) {\n if (id != null) {\n if (this.parser.bnodes[id] != null) {\n this.node = this.parser.bnodes[id];\n } else {\n this.node = this.parser.bnodes[id] = this.store.bnode();\n }\n } else {\n this.node = this.store.bnode();\n }\n this.nodeType = this.NODE;\n if (this.isTripleToLoad()) {\n this.loadTriple();\n }\n },\n /** Add an arc or property to this frame */'addArc': function (uri) {\n if (uri === RDFParser.ns.RDF + 'li') {\n uri = RDFParser.ns.RDF + '_' + this.parent.listIndex;\n this.parent.listIndex++;\n }\n this.addSymbol(this.ARC, uri);\n },\n /** Add a literal to this frame */'addLiteral': function (value) {\n if (this.parent.datatype && this.parent.datatype !== RDFParser.ns.RDF + 'langString') {\n this.node = this.store.literal(value, this.store.sym(this.parent.datatype));\n } else {\n this.node = this.store.literal(value, this.lang);\n }\n this.nodeType = this.NODE;\n if (this.isTripleToLoad()) {\n this.loadTriple();\n }\n }\n };\n }\n\n // from the OpenLayers source .. needed to get around IE problems.\n getAttributeNodeNS(node, uri, name) {\n var attributeNode = null;\n if (node.getAttributeNodeNS) {\n attributeNode = node.getAttributeNodeNS(uri, name);\n } else {\n var attributes = node.attributes;\n var potentialNode, fullName;\n for (var i = 0; i < attributes.length; ++i) {\n potentialNode = attributes[i];\n if (potentialNode.namespaceURI === uri) {\n fullName = potentialNode.prefix ? potentialNode.prefix + ':' + name : name;\n if (fullName === potentialNode.nodeName) {\n attributeNode = potentialNode;\n break;\n }\n }\n }\n }\n return attributeNode;\n }\n\n /**\n * Build our initial scope frame and parse the DOM into triples\n * @param {import('@xmldom/xmldom').Document} document The DOM to parse\n * @param {String} base The base URL to use\n * @param {Object} why The context to which this resource belongs\n */\n\n parse(document, base, why) {\n var children = document.childNodes; // clean up for the next run\n this.cleanParser(); // figure out the root element\n var root;\n if (document.nodeType === RDFParser.nodeType.DOCUMENT) {\n for (var c = 0; c < children.length; c++) {\n if (children[c].nodeType === RDFParser.nodeType.ELEMENT) {\n root = children[c];\n break;\n }\n }\n } else if (document.nodeType === RDFParser.nodeType.ELEMENT) {\n root = document;\n } else {\n throw new Error(\"RDFParser: can't find root in \" + base + '. Halting. ');\n // return false\n }\n this.why = why; // our topmost frame\n var f = this.frameFactory(this);\n this.base = base;\n f.base = base;\n f.lang = null; // was '' but can't have langs like that 2015 (!)\n this.parseDOM(this.buildFrame(f, root));\n return true;\n }\n parseDOM(frame) {\n // a DOM utility function used in parsing\n var rdfid;\n var elementURI = function (el) {\n var result = '';\n if (el.namespaceURI == null) {\n throw new Error('RDF/XML syntax error: No namespace for ' + el.localName + ' in ' + this.base);\n }\n if (el.namespaceURI) {\n result = result + el.namespaceURI;\n }\n if (el.localName) {\n result = result + el.localName;\n } else if (el.nodeName) {\n if (el.nodeName.indexOf(':') >= 0) result = result + el.nodeName.split(':')[1];else result = result + el.nodeName;\n }\n return result;\n }.bind(this);\n var dig = true; // if we'll dig down in the tree on the next iter\n while (frame.parent) {\n var dom = frame.element;\n var attrs = dom.attributes;\n if (dom.nodeType === RDFParser.nodeType.TEXT || dom.nodeType === RDFParser.nodeType.CDATA_SECTION) {\n // we have a literal\n if (frame.parent.nodeType === frame.NODE) {\n // must have had attributes, store as rdf:value\n frame.addArc(RDFParser.ns.RDF + 'value');\n frame = this.buildFrame(frame);\n }\n frame.addLiteral(dom.nodeValue);\n } else if (elementURI(dom) !== RDFParser.ns.RDF + 'RDF') {\n // not root\n if (frame.parent && frame.parent.collection) {\n // we're a collection element\n frame.addCollectionArc();\n frame = this.buildFrame(frame, frame.element);\n frame.parent.element = null;\n }\n if (!frame.parent || !frame.parent.nodeType || frame.parent.nodeType === frame.ARC) {\n // we need a node\n var about = this.getAttributeNodeNS(dom, RDFParser.ns.RDF, 'about');\n rdfid = this.getAttributeNodeNS(dom, RDFParser.ns.RDF, 'ID');\n if (about && rdfid) {\n throw new Error('RDFParser: ' + dom.nodeName + ' has both rdf:id and rdf:about.' + ' Halting. Only one of these' + ' properties may be specified on a' + ' node.');\n }\n if (!about && rdfid) {\n frame.addNode('#' + rdfid.nodeValue);\n dom.removeAttributeNode(rdfid);\n } else if (about == null && rdfid == null) {\n var bnid = this.getAttributeNodeNS(dom, RDFParser.ns.RDF, 'nodeID');\n if (bnid) {\n frame.addBNode(bnid.nodeValue);\n dom.removeAttributeNode(bnid);\n } else {\n frame.addBNode();\n }\n } else {\n frame.addNode(about.nodeValue);\n dom.removeAttributeNode(about);\n }\n // Typed nodes\n var rdftype = this.getAttributeNodeNS(dom, RDFParser.ns.RDF, 'type');\n if (RDFParser.ns.RDF + 'Description' !== elementURI(dom)) {\n rdftype = {\n 'nodeValue': elementURI(dom)\n };\n }\n if (rdftype != null) {\n this.store.add(frame.node, this.store.sym(RDFParser.ns.RDF + 'type'), this.store.sym(uriUtil.join(rdftype.nodeValue, frame.base)), this.why);\n if (rdftype.nodeName) {\n dom.removeAttributeNode(rdftype);\n }\n }\n // Property Attributes\n for (var x = attrs.length - 1; x >= 0; x--) {\n this.store.add(frame.node, this.store.sym(elementURI(attrs[x])), this.store.literal(attrs[x].nodeValue, frame.lang), this.why);\n }\n } else {\n // we should add an arc (or implicit bnode+arc)\n frame.addArc(elementURI(dom)); // save the arc's rdf:ID if it has one\n if (this.reify) {\n rdfid = this.getAttributeNodeNS(dom, RDFParser.ns.RDF, 'ID');\n if (rdfid) {\n frame.rdfid = rdfid.nodeValue;\n dom.removeAttributeNode(rdfid);\n }\n }\n var parsetype = this.getAttributeNodeNS(dom, RDFParser.ns.RDF, 'parseType');\n var datatype = this.getAttributeNodeNS(dom, RDFParser.ns.RDF, 'datatype');\n if (datatype) {\n frame.datatype = datatype.nodeValue;\n dom.removeAttributeNode(datatype);\n }\n if (parsetype) {\n var nv = parsetype.nodeValue;\n if (nv === 'Literal') {\n frame.datatype = RDFParser.ns.RDF + 'XMLLiteral';\n frame = this.buildFrame(frame);\n // Don't include the literal node, only its children\n // see https://github.com/linkeddata/rdflib.js/issues/75\n frame.addLiteral(dom.innerHTML || dom.childNodes);\n dig = false;\n } else if (nv === 'Resource') {\n frame = this.buildFrame(frame, frame.element);\n frame.parent.element = null;\n frame.addBNode();\n } else if (nv === 'Collection') {\n frame = this.buildFrame(frame, frame.element);\n frame.parent.element = null;\n frame.addCollection();\n }\n dom.removeAttributeNode(parsetype);\n }\n if (attrs.length !== 0) {\n var resource = this.getAttributeNodeNS(dom, RDFParser.ns.RDF, 'resource');\n var bnid2 = this.getAttributeNodeNS(dom, RDFParser.ns.RDF, 'nodeID');\n frame = this.buildFrame(frame);\n if (resource) {\n frame.addNode(resource.nodeValue);\n dom.removeAttributeNode(resource);\n } else {\n if (bnid2) {\n frame.addBNode(bnid2.nodeValue);\n dom.removeAttributeNode(bnid2);\n } else {\n frame.addBNode();\n }\n }\n for (var x1 = attrs.length - 1; x1 >= 0; x1--) {\n var f = this.buildFrame(frame);\n f.addArc(elementURI(attrs[x1]));\n if (elementURI(attrs[x1]) === RDFParser.ns.RDF + 'type') {\n this.buildFrame(f).addNode(attrs[x1].nodeValue);\n } else {\n this.buildFrame(f).addLiteral(attrs[x1].nodeValue);\n }\n }\n } else if (dom.childNodes.length === 0) {\n this.buildFrame(frame).addLiteral('');\n }\n }\n } // rdf:RDF\n // dig dug\n dom = frame.element;\n while (frame.parent) {\n var pframe = frame;\n while (dom == null) {\n frame = frame.parent;\n dom = frame.element;\n }\n var candidate = dom.childNodes && dom.childNodes[frame.lastChild];\n if (!candidate || !dig) {\n frame.terminateFrame();\n if (!(frame = frame.parent)) {\n break;\n } // done\n dom = frame.element;\n dig = true;\n } else if (candidate.nodeType !== RDFParser.nodeType.ELEMENT && candidate.nodeType !== RDFParser.nodeType.TEXT && candidate.nodeType !== RDFParser.nodeType.CDATA_SECTION || (candidate.nodeType === RDFParser.nodeType.TEXT || candidate.nodeType === RDFParser.nodeType.CDATA_SECTION) && dom.childNodes.length !== 1) {\n frame.lastChild++;\n } else {\n // not a leaf\n frame.lastChild++;\n frame = this.buildFrame(pframe, dom.childNodes[frame.lastChild - 1]);\n break;\n }\n }\n } // while\n }\n\n /**\n * Cleans out state from a previous parse run\n * @private\n */\n cleanParser() {\n this.bnodes = {};\n this.why = null;\n }\n\n /**\n * Builds scope frame\n * @private\n */\n buildFrame(parent, element) {\n var frame = this.frameFactory(this, parent, element);\n if (parent) {\n frame.base = parent.base;\n frame.lang = parent.lang;\n }\n if (!element || element.nodeType === RDFParser.nodeType.TEXT || element.nodeType === RDFParser.nodeType.CDATA_SECTION) {\n return frame;\n }\n var attrs = element.attributes;\n var base = element.getAttributeNode('xml:base');\n if (base != null) {\n frame.base = base.nodeValue;\n element.removeAttribute('xml:base');\n }\n var lang = element.getAttributeNode('xml:lang');\n if (lang != null) {\n frame.lang = lang.nodeValue;\n element.removeAttribute('xml:lang');\n }\n // remove all extraneous xml and xmlns attributes\n for (var x = attrs.length - 1; x >= 0; x--) {\n if (attrs[x].nodeName.substr(0, 3) === 'xml') {\n if (attrs[x].name.slice(0, 6) === 'xmlns:') {\n var uri = attrs[x].nodeValue; // alert('base for namespac attr:'+this.base)\n if (this.base) uri = uriUtil.join(uri, this.base);\n this.store.setPrefixForURI(attrs[x].name.slice(6), uri);\n }\n //\t\talert('rdfparser: xml atribute: '+attrs[x].name) //@@\n element.removeAttributeNode(attrs[x]);\n }\n }\n return frame;\n }\n}\n_defineProperty(RDFParser, \"ns\", {\n 'RDF': 'http://www.w3.org/1999/02/22-rdf-syntax-ns#',\n 'RDFS': 'http://www.w3.org/2000/01/rdf-schema#'\n});\n/** DOM Level 2 node type magic numbers @final\n * @member RDFParser\n */\n_defineProperty(RDFParser, \"nodeType\", {\n 'ELEMENT': 1,\n 'ATTRIBUTE': 2,\n 'TEXT': 3,\n 'CDATA_SECTION': 4,\n 'ENTITY_REFERENCE': 5,\n 'ENTITY': 6,\n 'PROCESSING_INSTRUCTION': 7,\n 'COMMENT': 8,\n 'DOCUMENT': 9,\n 'DOCUMENT_TYPE': 10,\n 'DOCUMENT_FRAGMENT': 11,\n 'NOTATION': 12\n});","// Parse a simple SPARL-Update subset syntax for patches.\n//\n// This parses\n// WHERE {xxx} DELETE {yyy} INSERT DATA {zzz}\n// (not necessarily in that order)\n// as though it were the n3\n// <#query> patch:where {xxx}; patch:delete {yyy}; patch:insert {zzz}.\nimport N3Parser from './n3parser';\nimport Namespace from './namespace';\nexport default function sparqlUpdateParser(str, kb, base) {\n var i, j, k;\n var keywords = ['INSERT', 'DELETE', 'WHERE'];\n var SQNS = Namespace('http://www.w3.org/ns/pim/patch#');\n var p = N3Parser(kb, kb, base, base, null, null, '', null);\n var clauses = {};\n var badSyntax = function (uri, lines, str, i, why) {\n return 'Line ' + (lines + 1) + ' of <' + uri + '>: Bad syntax:\\n ' + why + '\\n at: \"' + str.slice(i, i + 30) + '\"';\n };\n\n // var check = function (next, last, message) {\n // if (next < 0) {\n // throw badSyntax(p._thisDoc, p.lines, str, j, last, message)\n // }\n // return next\n // }\n i = 0;\n var query = kb.sym(base + '#query'); // Invent a URI for the query\n clauses['query'] = query; // A way of accessing it in its N3 model.\n\n while (true) {\n // console.log(\"A Now at i = \" + i)\n j = p.skipSpace(str, i);\n if (j < 0) {\n return clauses;\n }\n // console.log(\"B After space at j= \" + j)\n if (str[j] === ';') {\n i = p.skipSpace(str, j + 1);\n if (i < 0) {\n return clauses; // Allow end in a\n }\n j = i;\n }\n var found = false;\n for (k = 0; k < keywords.length; k++) {\n var key = keywords[k];\n if (str.slice(j, j + key.length) === key) {\n i = p.skipSpace(str, j + key.length);\n if (i < 0) {\n throw badSyntax(p._thisDoc, p.lines, str, j + key.length, 'found EOF, needed {...} after ' + key);\n }\n if ((key === 'INSERT' || key === 'DELETE') && str.slice(i, i + 4) === 'DATA') {\n // Some wanted 'DATA'. Whatever\n j = p.skipSpace(str, i + 4);\n if (j < 0) {\n throw badSyntax(p._thisDoc, p.lines, str, i + 4, 'needed {...} after INSERT DATA ' + key);\n }\n i = j;\n }\n var res2 = [];\n j = p.node(str, i, res2); // Parse all the complexity of the clause\n\n if (j < 0) {\n throw badSyntax(p._thisDoc, p.lines, str, i, 'bad syntax or EOF in {...} after ' + key);\n }\n clauses[key.toLowerCase()] = res2[0];\n kb.add(query, SQNS(key.toLowerCase()), res2[0]); // , kb.sym(base)\n // key is the keyword and res2 has the contents\n found = true;\n i = j;\n }\n }\n if (!found && str.slice(j, j + 7) === '@prefix') {\n i = p.directive(str, j);\n if (i < 0) {\n throw badSyntax(p._thisDoc, p.lines, str, i, 'bad syntax or EOF after @prefix ');\n }\n // console.log(\"P before dot i= \" + i)\n i = p.checkDot(str, i);\n // console.log(\"Q after dot i= \" + i)\n found = true;\n }\n if (!found) {\n // console.log(\"Bad syntax \" + j)\n throw badSyntax(p._thisDoc, p.lines, str, j, \"Unknown syntax at start of statememt: '\" + str.slice(j).slice(0, 20) + \"'\");\n }\n } // while\n // return clauses\n}","import DataFactory from './factories/extended-term-factory';\nimport jsonldParser from './jsonldparser';\n// @ts-ignore is this injected?\nimport { Parser as N3jsParser } from 'n3'; // @@ Goal: remove this dependency\nimport N3Parser from './n3parser';\nimport { parseRDFaDOM } from './rdfaparser';\nimport RDFParser from './rdfxmlparser';\nimport sparqlUpdateParser from './patch-parser';\nimport * as Util from './utils-js';\nimport { TurtleContentType, N3ContentType, RDFXMLContentType, XHTMLContentType, HTMLContentType, SPARQLUpdateContentType, SPARQLUpdateSingleMatchContentType, JSONLDContentType, NQuadsContentType, NQuadsAltContentType } from './types';\n/**\n * Parse a string and put the result into the graph kb.\n * Normal method is sync.\n * Unfortunately jsdonld is currently written to need to be called async.\n * If you are parsing JSON-LD and want to know when and whether it succeeded, you need to use the callback param.\n * @param str - The input string to parse\n * @param kb - The store to use\n * @param base - The base URI to use\n * @param contentType - The MIME content type string for the input - defaults to text/turtle\n * @param [callback] - The callback to call when the data has been loaded\n */\nexport default function parse(str, kb, base, contentType = 'text/turtle', callback) {\n contentType = contentType || TurtleContentType;\n contentType = contentType.split(';')[0];\n try {\n if (contentType === N3ContentType || contentType === TurtleContentType) {\n var p = N3Parser(kb, kb, base, base, null, null, '', null);\n p.loadBuf(str);\n executeCallback();\n } else if (contentType === RDFXMLContentType) {\n var parser = new RDFParser(kb);\n parser.parse(Util.parseXML(str), base, kb.sym(base));\n executeCallback();\n } else if (contentType === XHTMLContentType) {\n parseRDFaDOM(Util.parseXML(str, {\n contentType: XHTMLContentType\n }), kb, base);\n executeCallback();\n } else if (contentType === HTMLContentType) {\n parseRDFaDOM(Util.parseXML(str, {\n contentType: HTMLContentType\n }), kb, base);\n executeCallback();\n } else if (contentType === SPARQLUpdateContentType || contentType === SPARQLUpdateSingleMatchContentType) {\n // @@ we handle a subset\n sparqlUpdateParser(str, kb, base);\n executeCallback();\n } else if (contentType === JSONLDContentType) {\n // since we do not await the promise here, rejections will not be covered by the surrounding try catch\n // we do not use await, because parse() should stay sync\n // so, to not lose the async error, we need to catch the rejection and call the error callback here too\n jsonldParser(str, kb, base).then(executeCallback).catch(executeErrorCallback);\n } else if (contentType === NQuadsContentType || contentType === NQuadsAltContentType) {\n var n3Parser = new N3jsParser({\n factory: DataFactory\n });\n nquadCallback(null, str);\n } else if (contentType === undefined) {\n throw new Error(\"contentType is undefined\");\n } else {\n throw new Error(\"Don't know how to parse \" + contentType + ' yet');\n }\n } catch (e) {\n // @ts-ignore\n executeErrorCallback(e);\n }\n parse.handled = {\n 'text/n3': true,\n 'text/turtle': true,\n 'application/rdf+xml': true,\n 'application/xhtml+xml': true,\n 'text/html': true,\n 'application/sparql-update': true,\n 'application/sparql-update-single-match': true,\n 'application/ld+json': true,\n 'application/nquads': true,\n 'application/n-quads': true\n };\n function executeCallback() {\n if (callback) {\n callback(null, kb);\n } else {\n return;\n }\n }\n function executeErrorCallback(e) {\n if (\n // TODO: Always true, what is the right behavior\n contentType !== JSONLDContentType ||\n // @ts-ignore always true?\n contentType !== NQuadsContentType ||\n // @ts-ignore always true?\n contentType !== NQuadsAltContentType) {\n if (callback) {\n callback(e, kb);\n } else {\n let e2 = new Error('' + e + ' while trying to parse <' + base + '> as ' + contentType);\n //@ts-ignore .cause is not a default error property\n e2.cause = e;\n throw e2;\n }\n }\n }\n /*\n function setJsonLdBase (doc, base) {\n if (doc instanceof Array) {\n return\n }\n if (!('@context' in doc)) {\n doc['@context'] = {}\n }\n doc['@context']['@base'] = base\n }\n */\n function nquadCallback(err, nquads) {\n if (err) {\n callback(err, kb);\n }\n try {\n n3Parser.parse(nquads, tripleCallback);\n } catch (err) {\n callback(err, kb);\n }\n }\n function tripleCallback(err, triple) {\n if (triple) {\n kb.add(triple.subject, triple.predicate, triple.object, triple.graph);\n } else {\n callback(err, kb);\n }\n }\n}","// Save global object in a variable\nvar __global__ =\n(typeof globalThis !== 'undefined' && globalThis) ||\n(typeof self !== 'undefined' && self) ||\n(typeof global !== 'undefined' && global);\n// Create an object that extends from __global__ without the fetch function\nvar __globalThis__ = (function () {\nfunction F() {\nthis.fetch = false;\nthis.DOMException = __global__.DOMException\n}\nF.prototype = __global__; // Needed for feature detection on whatwg-fetch's code\nreturn new F();\n})();\n// Wraps whatwg-fetch with a function scope to hijack the global object\n// \"globalThis\" that's going to be patched\n(function(globalThis) {\n\nvar irrelevant = (function (exports) {\n\n /* eslint-disable no-prototype-builtins */\n var g =\n (typeof globalThis !== 'undefined' && globalThis) ||\n (typeof self !== 'undefined' && self) ||\n // eslint-disable-next-line no-undef\n (typeof global !== 'undefined' && global) ||\n {};\n\n var support = {\n searchParams: 'URLSearchParams' in g,\n iterable: 'Symbol' in g && 'iterator' in Symbol,\n blob:\n 'FileReader' in g &&\n 'Blob' in g &&\n (function() {\n try {\n new Blob();\n return true\n } catch (e) {\n return false\n }\n })(),\n formData: 'FormData' in g,\n arrayBuffer: 'ArrayBuffer' in g\n };\n\n function isDataView(obj) {\n return obj && DataView.prototype.isPrototypeOf(obj)\n }\n\n if (support.arrayBuffer) {\n var viewClasses = [\n '[object Int8Array]',\n '[object Uint8Array]',\n '[object Uint8ClampedArray]',\n '[object Int16Array]',\n '[object Uint16Array]',\n '[object Int32Array]',\n '[object Uint32Array]',\n '[object Float32Array]',\n '[object Float64Array]'\n ];\n\n var isArrayBufferView =\n ArrayBuffer.isView ||\n function(obj) {\n return obj && viewClasses.indexOf(Object.prototype.toString.call(obj)) > -1\n };\n }\n\n function normalizeName(name) {\n if (typeof name !== 'string') {\n name = String(name);\n }\n if (/[^a-z0-9\\-#$%&'*+.^_`|~!]/i.test(name) || name === '') {\n throw new TypeError('Invalid character in header field name: \"' + name + '\"')\n }\n return name.toLowerCase()\n }\n\n function normalizeValue(value) {\n if (typeof value !== 'string') {\n value = String(value);\n }\n return value\n }\n\n // Build a destructive iterator for the value list\n function iteratorFor(items) {\n var iterator = {\n next: function() {\n var value = items.shift();\n return {done: value === undefined, value: value}\n }\n };\n\n if (support.iterable) {\n iterator[Symbol.iterator] = function() {\n return iterator\n };\n }\n\n return iterator\n }\n\n function Headers(headers) {\n this.map = {};\n\n if (headers instanceof Headers) {\n headers.forEach(function(value, name) {\n this.append(name, value);\n }, this);\n } else if (Array.isArray(headers)) {\n headers.forEach(function(header) {\n if (header.length != 2) {\n throw new TypeError('Headers constructor: expected name/value pair to be length 2, found' + header.length)\n }\n this.append(header[0], header[1]);\n }, this);\n } else if (headers) {\n Object.getOwnPropertyNames(headers).forEach(function(name) {\n this.append(name, headers[name]);\n }, this);\n }\n }\n\n Headers.prototype.append = function(name, value) {\n name = normalizeName(name);\n value = normalizeValue(value);\n var oldValue = this.map[name];\n this.map[name] = oldValue ? oldValue + ', ' + value : value;\n };\n\n Headers.prototype['delete'] = function(name) {\n delete this.map[normalizeName(name)];\n };\n\n Headers.prototype.get = function(name) {\n name = normalizeName(name);\n return this.has(name) ? this.map[name] : null\n };\n\n Headers.prototype.has = function(name) {\n return this.map.hasOwnProperty(normalizeName(name))\n };\n\n Headers.prototype.set = function(name, value) {\n this.map[normalizeName(name)] = normalizeValue(value);\n };\n\n Headers.prototype.forEach = function(callback, thisArg) {\n for (var name in this.map) {\n if (this.map.hasOwnProperty(name)) {\n callback.call(thisArg, this.map[name], name, this);\n }\n }\n };\n\n Headers.prototype.keys = function() {\n var items = [];\n this.forEach(function(value, name) {\n items.push(name);\n });\n return iteratorFor(items)\n };\n\n Headers.prototype.values = function() {\n var items = [];\n this.forEach(function(value) {\n items.push(value);\n });\n return iteratorFor(items)\n };\n\n Headers.prototype.entries = function() {\n var items = [];\n this.forEach(function(value, name) {\n items.push([name, value]);\n });\n return iteratorFor(items)\n };\n\n if (support.iterable) {\n Headers.prototype[Symbol.iterator] = Headers.prototype.entries;\n }\n\n function consumed(body) {\n if (body._noBody) return\n if (body.bodyUsed) {\n return Promise.reject(new TypeError('Already read'))\n }\n body.bodyUsed = true;\n }\n\n function fileReaderReady(reader) {\n return new Promise(function(resolve, reject) {\n reader.onload = function() {\n resolve(reader.result);\n };\n reader.onerror = function() {\n reject(reader.error);\n };\n })\n }\n\n function readBlobAsArrayBuffer(blob) {\n var reader = new FileReader();\n var promise = fileReaderReady(reader);\n reader.readAsArrayBuffer(blob);\n return promise\n }\n\n function readBlobAsText(blob) {\n var reader = new FileReader();\n var promise = fileReaderReady(reader);\n var match = /charset=([A-Za-z0-9_-]+)/.exec(blob.type);\n var encoding = match ? match[1] : 'utf-8';\n reader.readAsText(blob, encoding);\n return promise\n }\n\n function readArrayBufferAsText(buf) {\n var view = new Uint8Array(buf);\n var chars = new Array(view.length);\n\n for (var i = 0; i < view.length; i++) {\n chars[i] = String.fromCharCode(view[i]);\n }\n return chars.join('')\n }\n\n function bufferClone(buf) {\n if (buf.slice) {\n return buf.slice(0)\n } else {\n var view = new Uint8Array(buf.byteLength);\n view.set(new Uint8Array(buf));\n return view.buffer\n }\n }\n\n function Body() {\n this.bodyUsed = false;\n\n this._initBody = function(body) {\n /*\n fetch-mock wraps the Response object in an ES6 Proxy to\n provide useful test harness features such as flush. However, on\n ES5 browsers without fetch or Proxy support pollyfills must be used;\n the proxy-pollyfill is unable to proxy an attribute unless it exists\n on the object before the Proxy is created. This change ensures\n Response.bodyUsed exists on the instance, while maintaining the\n semantic of setting Request.bodyUsed in the constructor before\n _initBody is called.\n */\n // eslint-disable-next-line no-self-assign\n this.bodyUsed = this.bodyUsed;\n this._bodyInit = body;\n if (!body) {\n this._noBody = true;\n this._bodyText = '';\n } else if (typeof body === 'string') {\n this._bodyText = body;\n } else if (support.blob && Blob.prototype.isPrototypeOf(body)) {\n this._bodyBlob = body;\n } else if (support.formData && FormData.prototype.isPrototypeOf(body)) {\n this._bodyFormData = body;\n } else if (support.searchParams && URLSearchParams.prototype.isPrototypeOf(body)) {\n this._bodyText = body.toString();\n } else if (support.arrayBuffer && support.blob && isDataView(body)) {\n this._bodyArrayBuffer = bufferClone(body.buffer);\n // IE 10-11 can't handle a DataView body.\n this._bodyInit = new Blob([this._bodyArrayBuffer]);\n } else if (support.arrayBuffer && (ArrayBuffer.prototype.isPrototypeOf(body) || isArrayBufferView(body))) {\n this._bodyArrayBuffer = bufferClone(body);\n } else {\n this._bodyText = body = Object.prototype.toString.call(body);\n }\n\n if (!this.headers.get('content-type')) {\n if (typeof body === 'string') {\n this.headers.set('content-type', 'text/plain;charset=UTF-8');\n } else if (this._bodyBlob && this._bodyBlob.type) {\n this.headers.set('content-type', this._bodyBlob.type);\n } else if (support.searchParams && URLSearchParams.prototype.isPrototypeOf(body)) {\n this.headers.set('content-type', 'application/x-www-form-urlencoded;charset=UTF-8');\n }\n }\n };\n\n if (support.blob) {\n this.blob = function() {\n var rejected = consumed(this);\n if (rejected) {\n return rejected\n }\n\n if (this._bodyBlob) {\n return Promise.resolve(this._bodyBlob)\n } else if (this._bodyArrayBuffer) {\n return Promise.resolve(new Blob([this._bodyArrayBuffer]))\n } else if (this._bodyFormData) {\n throw new Error('could not read FormData body as blob')\n } else {\n return Promise.resolve(new Blob([this._bodyText]))\n }\n };\n }\n\n this.arrayBuffer = function() {\n if (this._bodyArrayBuffer) {\n var isConsumed = consumed(this);\n if (isConsumed) {\n return isConsumed\n } else if (ArrayBuffer.isView(this._bodyArrayBuffer)) {\n return Promise.resolve(\n this._bodyArrayBuffer.buffer.slice(\n this._bodyArrayBuffer.byteOffset,\n this._bodyArrayBuffer.byteOffset + this._bodyArrayBuffer.byteLength\n )\n )\n } else {\n return Promise.resolve(this._bodyArrayBuffer)\n }\n } else if (support.blob) {\n return this.blob().then(readBlobAsArrayBuffer)\n } else {\n throw new Error('could not read as ArrayBuffer')\n }\n };\n\n this.text = function() {\n var rejected = consumed(this);\n if (rejected) {\n return rejected\n }\n\n if (this._bodyBlob) {\n return readBlobAsText(this._bodyBlob)\n } else if (this._bodyArrayBuffer) {\n return Promise.resolve(readArrayBufferAsText(this._bodyArrayBuffer))\n } else if (this._bodyFormData) {\n throw new Error('could not read FormData body as text')\n } else {\n return Promise.resolve(this._bodyText)\n }\n };\n\n if (support.formData) {\n this.formData = function() {\n return this.text().then(decode)\n };\n }\n\n this.json = function() {\n return this.text().then(JSON.parse)\n };\n\n return this\n }\n\n // HTTP methods whose capitalization should be normalized\n var methods = ['CONNECT', 'DELETE', 'GET', 'HEAD', 'OPTIONS', 'PATCH', 'POST', 'PUT', 'TRACE'];\n\n function normalizeMethod(method) {\n var upcased = method.toUpperCase();\n return methods.indexOf(upcased) > -1 ? upcased : method\n }\n\n function Request(input, options) {\n if (!(this instanceof Request)) {\n throw new TypeError('Please use the \"new\" operator, this DOM object constructor cannot be called as a function.')\n }\n\n options = options || {};\n var body = options.body;\n\n if (input instanceof Request) {\n if (input.bodyUsed) {\n throw new TypeError('Already read')\n }\n this.url = input.url;\n this.credentials = input.credentials;\n if (!options.headers) {\n this.headers = new Headers(input.headers);\n }\n this.method = input.method;\n this.mode = input.mode;\n this.signal = input.signal;\n if (!body && input._bodyInit != null) {\n body = input._bodyInit;\n input.bodyUsed = true;\n }\n } else {\n this.url = String(input);\n }\n\n this.credentials = options.credentials || this.credentials || 'same-origin';\n if (options.headers || !this.headers) {\n this.headers = new Headers(options.headers);\n }\n this.method = normalizeMethod(options.method || this.method || 'GET');\n this.mode = options.mode || this.mode || null;\n this.signal = options.signal || this.signal || (function () {\n if ('AbortController' in g) {\n var ctrl = new AbortController();\n return ctrl.signal;\n }\n }());\n this.referrer = null;\n\n if ((this.method === 'GET' || this.method === 'HEAD') && body) {\n throw new TypeError('Body not allowed for GET or HEAD requests')\n }\n this._initBody(body);\n\n if (this.method === 'GET' || this.method === 'HEAD') {\n if (options.cache === 'no-store' || options.cache === 'no-cache') {\n // Search for a '_' parameter in the query string\n var reParamSearch = /([?&])_=[^&]*/;\n if (reParamSearch.test(this.url)) {\n // If it already exists then set the value with the current time\n this.url = this.url.replace(reParamSearch, '$1_=' + new Date().getTime());\n } else {\n // Otherwise add a new '_' parameter to the end with the current time\n var reQueryString = /\\?/;\n this.url += (reQueryString.test(this.url) ? '&' : '?') + '_=' + new Date().getTime();\n }\n }\n }\n }\n\n Request.prototype.clone = function() {\n return new Request(this, {body: this._bodyInit})\n };\n\n function decode(body) {\n var form = new FormData();\n body\n .trim()\n .split('&')\n .forEach(function(bytes) {\n if (bytes) {\n var split = bytes.split('=');\n var name = split.shift().replace(/\\+/g, ' ');\n var value = split.join('=').replace(/\\+/g, ' ');\n form.append(decodeURIComponent(name), decodeURIComponent(value));\n }\n });\n return form\n }\n\n function parseHeaders(rawHeaders) {\n var headers = new Headers();\n // Replace instances of \\r\\n and \\n followed by at least one space or horizontal tab with a space\n // https://tools.ietf.org/html/rfc7230#section-3.2\n var preProcessedHeaders = rawHeaders.replace(/\\r?\\n[\\t ]+/g, ' ');\n // Avoiding split via regex to work around a common IE11 bug with the core-js 3.6.0 regex polyfill\n // https://github.com/github/fetch/issues/748\n // https://github.com/zloirock/core-js/issues/751\n preProcessedHeaders\n .split('\\r')\n .map(function(header) {\n return header.indexOf('\\n') === 0 ? header.substr(1, header.length) : header\n })\n .forEach(function(line) {\n var parts = line.split(':');\n var key = parts.shift().trim();\n if (key) {\n var value = parts.join(':').trim();\n try {\n headers.append(key, value);\n } catch (error) {\n console.warn('Response ' + error.message);\n }\n }\n });\n return headers\n }\n\n Body.call(Request.prototype);\n\n function Response(bodyInit, options) {\n if (!(this instanceof Response)) {\n throw new TypeError('Please use the \"new\" operator, this DOM object constructor cannot be called as a function.')\n }\n if (!options) {\n options = {};\n }\n\n this.type = 'default';\n this.status = options.status === undefined ? 200 : options.status;\n if (this.status < 200 || this.status > 599) {\n throw new RangeError(\"Failed to construct 'Response': The status provided (0) is outside the range [200, 599].\")\n }\n this.ok = this.status >= 200 && this.status < 300;\n this.statusText = options.statusText === undefined ? '' : '' + options.statusText;\n this.headers = new Headers(options.headers);\n this.url = options.url || '';\n this._initBody(bodyInit);\n }\n\n Body.call(Response.prototype);\n\n Response.prototype.clone = function() {\n return new Response(this._bodyInit, {\n status: this.status,\n statusText: this.statusText,\n headers: new Headers(this.headers),\n url: this.url\n })\n };\n\n Response.error = function() {\n var response = new Response(null, {status: 200, statusText: ''});\n response.ok = false;\n response.status = 0;\n response.type = 'error';\n return response\n };\n\n var redirectStatuses = [301, 302, 303, 307, 308];\n\n Response.redirect = function(url, status) {\n if (redirectStatuses.indexOf(status) === -1) {\n throw new RangeError('Invalid status code')\n }\n\n return new Response(null, {status: status, headers: {location: url}})\n };\n\n exports.DOMException = g.DOMException;\n try {\n new exports.DOMException();\n } catch (err) {\n exports.DOMException = function(message, name) {\n this.message = message;\n this.name = name;\n var error = Error(message);\n this.stack = error.stack;\n };\n exports.DOMException.prototype = Object.create(Error.prototype);\n exports.DOMException.prototype.constructor = exports.DOMException;\n }\n\n function fetch(input, init) {\n return new Promise(function(resolve, reject) {\n var request = new Request(input, init);\n\n if (request.signal && request.signal.aborted) {\n return reject(new exports.DOMException('Aborted', 'AbortError'))\n }\n\n var xhr = new XMLHttpRequest();\n\n function abortXhr() {\n xhr.abort();\n }\n\n xhr.onload = function() {\n var options = {\n statusText: xhr.statusText,\n headers: parseHeaders(xhr.getAllResponseHeaders() || '')\n };\n // This check if specifically for when a user fetches a file locally from the file system\n // Only if the status is out of a normal range\n if (request.url.indexOf('file://') === 0 && (xhr.status < 200 || xhr.status > 599)) {\n options.status = 200;\n } else {\n options.status = xhr.status;\n }\n options.url = 'responseURL' in xhr ? xhr.responseURL : options.headers.get('X-Request-URL');\n var body = 'response' in xhr ? xhr.response : xhr.responseText;\n setTimeout(function() {\n resolve(new Response(body, options));\n }, 0);\n };\n\n xhr.onerror = function() {\n setTimeout(function() {\n reject(new TypeError('Network request failed'));\n }, 0);\n };\n\n xhr.ontimeout = function() {\n setTimeout(function() {\n reject(new TypeError('Network request timed out'));\n }, 0);\n };\n\n xhr.onabort = function() {\n setTimeout(function() {\n reject(new exports.DOMException('Aborted', 'AbortError'));\n }, 0);\n };\n\n function fixUrl(url) {\n try {\n return url === '' && g.location.href ? g.location.href : url\n } catch (e) {\n return url\n }\n }\n\n xhr.open(request.method, fixUrl(request.url), true);\n\n if (request.credentials === 'include') {\n xhr.withCredentials = true;\n } else if (request.credentials === 'omit') {\n xhr.withCredentials = false;\n }\n\n if ('responseType' in xhr) {\n if (support.blob) {\n xhr.responseType = 'blob';\n } else if (\n support.arrayBuffer\n ) {\n xhr.responseType = 'arraybuffer';\n }\n }\n\n if (init && typeof init.headers === 'object' && !(init.headers instanceof Headers || (g.Headers && init.headers instanceof g.Headers))) {\n var names = [];\n Object.getOwnPropertyNames(init.headers).forEach(function(name) {\n names.push(normalizeName(name));\n xhr.setRequestHeader(name, normalizeValue(init.headers[name]));\n });\n request.headers.forEach(function(value, name) {\n if (names.indexOf(name) === -1) {\n xhr.setRequestHeader(name, value);\n }\n });\n } else {\n request.headers.forEach(function(value, name) {\n xhr.setRequestHeader(name, value);\n });\n }\n\n if (request.signal) {\n request.signal.addEventListener('abort', abortXhr);\n\n xhr.onreadystatechange = function() {\n // DONE (success or failure)\n if (xhr.readyState === 4) {\n request.signal.removeEventListener('abort', abortXhr);\n }\n };\n }\n\n xhr.send(typeof request._bodyInit === 'undefined' ? null : request._bodyInit);\n })\n }\n\n fetch.polyfill = true;\n\n if (!g.fetch) {\n g.fetch = fetch;\n g.Headers = Headers;\n g.Request = Request;\n g.Response = Response;\n }\n\n exports.Headers = Headers;\n exports.Request = Request;\n exports.Response = Response;\n exports.fetch = fetch;\n\n return exports;\n\n})({});\n})(__globalThis__);\n// This is a ponyfill, so...\n__globalThis__.fetch.ponyfill = true;\ndelete __globalThis__.fetch.polyfill;\n// Choose between native implementation (__global__) or custom implementation (__globalThis__)\nvar ctx = __global__.fetch ? __global__ : __globalThis__;\nexports = ctx.fetch // To enable: import fetch from 'cross-fetch'\nexports.default = ctx.fetch // For TypeScript consumers without esModuleInterop.\nexports.fetch = ctx.fetch // To enable: import {fetch} from 'cross-fetch'\nexports.Headers = ctx.Headers\nexports.Request = ctx.Request\nexports.Response = ctx.Response\nmodule.exports = exports\n","import _defineProperty from \"@babel/runtime/helpers/defineProperty\";\n/* global $SolidTestEnvironment */\n/**\n *\n * Project: rdflib.js\n *\n * @file: fetcher.js\n *\n * Description: contains functions for requesting/fetching/retracting\n * This implements quite a lot of the web architecture.\n * A fetcher is bound to a specific quad store, into which\n * it loads stuff and into which it writes its metadata\n * @@ The metadata could be optionally a separate graph\n *\n * - implements semantics of HTTP headers, Internet Content Types\n * - selects parsers for rdf/xml, n3, rdfa, grddl\n *\n * TO do:\n * - Implement a runtime registry for parsers and serializers\n * -\n */\n\n/**\n * Things to test: callbacks on request, refresh, retract\n * loading from HTTP, HTTPS, FTP, FILE, others?\n * To do:\n * Firing up a mail client for mid: (message:) URLs\n */\nimport IndexedFormula from './store';\nimport log from './log';\nimport N3Parser from './n3parser';\nimport RDFlibNamedNode from './named-node';\nimport Namespace from './namespace';\nimport rdfParse from './parse';\nimport { parseRDFaDOM } from './rdfaparser';\nimport RDFParser from './rdfxmlparser';\nimport * as Uri from './uri';\nimport { isCollection, isNamedNode } from './utils/terms';\nimport * as Util from './utils-js';\nimport serialize from './serialize';\nimport crossFetch, { Headers } from 'cross-fetch';\nimport { TurtleContentType, RDFXMLContentType, XHTMLContentType } from './types';\nimport { termValue } from './utils/termValue';\nimport jsonldParser from './jsonldparser';\nconst Parsable = {\n 'text/n3': true,\n 'text/turtle': true,\n 'application/rdf+xml': true,\n 'application/xhtml+xml': true,\n 'text/html': true,\n 'application/ld+json': true\n};\n\n// This is a minimal set to allow the use of damaged servers if necessary\nconst CONTENT_TYPE_BY_EXT = {\n 'rdf': RDFXMLContentType,\n 'owl': RDFXMLContentType,\n 'n3': 'text/n3',\n 'ttl': 'text/turtle',\n 'nt': 'text/n3',\n 'acl': 'text/n3',\n 'html': 'text/html',\n 'xml': 'text/xml'\n};\n\n// Convenience namespaces needed in this module.\n// These are deliberately not exported as the user application should\n// make its own list and not rely on the prefixes used here,\n// and not be tempted to add to them, and them clash with those of another\n// application.\nconst getNS = factory => {\n return {\n link: Namespace('http://www.w3.org/2007/ont/link#', factory),\n http: Namespace('http://www.w3.org/2007/ont/http#', factory),\n httph: Namespace('http://www.w3.org/2007/ont/httph#', factory),\n // headers\n rdf: Namespace('http://www.w3.org/1999/02/22-rdf-syntax-ns#', factory),\n rdfs: Namespace('http://www.w3.org/2000/01/rdf-schema#', factory),\n dc: Namespace('http://purl.org/dc/elements/1.1/', factory),\n ldp: Namespace('http://www.w3.org/ns/ldp#', factory)\n };\n};\nconst ns = getNS();\n\n/** An extended interface of Response, since RDFlib.js adds some properties. */\n\n/** tell typescript that a 'panes' child may exist on Window */\n\n/** All valid inputs for initFetchOptions */\n\n/** Initiated by initFetchOptions, which runs on load */\n\nclass Handler {\n constructor(response, dom) {\n // TODO: Document, type\n _defineProperty(this, \"response\", void 0);\n // TODO: Document, type\n _defineProperty(this, \"dom\", void 0);\n this.response = response;\n // The type assertion operator here might need to be removed.\n this.dom = dom;\n }\n}\n_defineProperty(Handler, \"pattern\", void 0);\nclass RDFXMLHandler extends Handler {\n static toString() {\n return 'RDFXMLHandler';\n }\n static register(fetcher) {\n fetcher.mediatypes[RDFXMLContentType] = {\n 'q': 0.9\n };\n }\n parse(fetcher, /** An XML String */\n responseText, /** Requires .original */\n options) {\n let kb = fetcher.store;\n if (!this.dom) {\n this.dom = Util.parseXML(responseText);\n }\n let root = this.dom.documentElement;\n if (root && root.nodeName === 'parsererror') {\n // Mozilla only See issue/issue110\n // have to fail the request\n return fetcher.failFetch(options, 'Badly formed XML in ' + options.resource.value, 'parse_error');\n }\n let parser = new RDFParser(kb);\n try {\n parser.parse(this.dom, options.original.value, options.original);\n } catch (err) {\n return fetcher.failFetch(options, 'Syntax error parsing RDF/XML! ' + err, 'parse_error');\n }\n if (!options.noMeta) {\n kb.add(options.original, ns.rdf('type'), ns.link('RDFDocument'), fetcher.appNode);\n }\n return fetcher.doneFetch(options, this.response);\n }\n}\nRDFXMLHandler.pattern = new RegExp('application/rdf\\\\+xml');\nclass XHTMLHandler extends Handler {\n static toString() {\n return 'XHTMLHandler';\n }\n static register(fetcher) {\n fetcher.mediatypes[XHTMLContentType] = {\n 'q': 0.8\n };\n }\n parse(fetcher, responseText, options) {\n let relation, reverse;\n if (!this.dom) {\n this.dom = Util.parseXML(responseText);\n }\n let kb = fetcher.store;\n\n // dc:title\n let title = this.dom.getElementsByTagName('title');\n if (title.length > 0) {\n kb.add(options.resource, ns.dc('title'), kb.rdfFactory.literal(title[0].textContent), options.resource);\n // log.info(\"Inferring title of \" + xhr.resource)\n }\n\n // link rel\n let links = this.dom.getElementsByTagName('link');\n for (let x = links.length - 1; x >= 0; x--) {\n // @@ rev\n relation = links[x].getAttribute('rel');\n reverse = false;\n if (!relation) {\n relation = links[x].getAttribute('rev');\n reverse = true;\n }\n if (relation) {\n fetcher.linkData(options.original, relation, links[x].getAttribute('href'), options.resource, reverse);\n }\n }\n\n // Data Islands\n let scripts = this.dom.getElementsByTagName('script');\n for (let i = 0; i < scripts.length; i++) {\n let contentType = scripts[i].getAttribute('type');\n if (Parsable[contentType]) {\n // @ts-ignore incompatibility between Store.add and Formula.add\n rdfParse(scripts[i].textContent, kb, options.original.value, contentType);\n // @ts-ignore incompatibility between Store.add and Formula.add\n rdfParse(scripts[i].textContent, kb, options.original.value, contentType);\n }\n }\n if (!options.noMeta) {\n kb.add(options.resource, ns.rdf('type'), ns.link('WebPage'), fetcher.appNode);\n }\n if (!options.noRDFa && parseRDFaDOM) {\n // enable by default\n try {\n parseRDFaDOM(this.dom, kb, options.original.value);\n } catch (err) {\n // @ts-ignore\n let msg = 'Error trying to parse ' + options.resource + ' as RDFa:\\n' + err + ':\\n' + err.stack;\n return fetcher.failFetch(options, msg, 'parse_error');\n }\n }\n return fetcher.doneFetch(options, this.response);\n }\n}\nXHTMLHandler.pattern = new RegExp('application/xhtml');\nclass XMLHandler extends Handler {\n static toString() {\n return 'XMLHandler';\n }\n static register(fetcher) {\n fetcher.mediatypes['text/xml'] = {\n 'q': 0.5\n };\n fetcher.mediatypes['application/xml'] = {\n 'q': 0.5\n };\n }\n static isElement(node) {\n return node.nodeType === Node.ELEMENT_NODE;\n }\n parse(fetcher, responseText, options) {\n let dom = Util.parseXML(responseText);\n\n // XML Semantics defined by root element namespace\n // figure out the root element\n for (let c = 0; c < dom.childNodes.length; c++) {\n const node = dom.childNodes[c];\n // is this node an element?\n if (XMLHandler.isElement(node)) {\n // We've found the first element, it's the root\n let ns = node.namespaceURI;\n\n // Is it RDF/XML?\n if (ns && ns === ns['rdf']) {\n fetcher.addStatus(options.req, 'Has XML root element in the RDF namespace, so assume RDF/XML.');\n let rdfHandler = new RDFXMLHandler(this.response, dom);\n return rdfHandler.parse(fetcher, responseText, options);\n }\n break;\n }\n }\n\n // Or it could be XHTML?\n // Maybe it has an XHTML DOCTYPE?\n if (dom.doctype) {\n // log.info(\"We found a DOCTYPE in \" + xhr.resource)\n if (dom.doctype.name === 'html' && dom.doctype.publicId.match(/^-\\/\\/W3C\\/\\/DTD XHTML/) && dom.doctype.systemId.match(/http:\\/\\/www.w3.org\\/TR\\/xhtml/)) {\n fetcher.addStatus(options.req, 'Has XHTML DOCTYPE. Switching to XHTML Handler.\\n');\n let xhtmlHandler = new XHTMLHandler(this.response, dom);\n return xhtmlHandler.parse(fetcher, responseText, options);\n }\n }\n\n // Or what about an XHTML namespace?\n let html = dom.getElementsByTagName('html')[0];\n if (html) {\n let xmlns = html.getAttribute('xmlns');\n if (xmlns && xmlns.match(/^http:\\/\\/www.w3.org\\/1999\\/xhtml/)) {\n fetcher.addStatus(options.req, 'Has a default namespace for ' + 'XHTML. Switching to XHTMLHandler.\\n');\n let xhtmlHandler = new XHTMLHandler(this.response, dom);\n return xhtmlHandler.parse(fetcher, responseText, options);\n }\n }\n\n // At this point we should check the namespace document (cache it!) and\n // look for a GRDDL transform\n // @@ Get namespace document <n>, parse it, look for <n> grddl:namespaceTransform ?y\n // Apply ?y to dom\n // We give up. What dialect is this?\n return fetcher.failFetch(options, 'Unsupported dialect of XML: not RDF or XHTML namespace, etc.\\n' + responseText.slice(0, 80), 901);\n }\n}\nXMLHandler.pattern = new RegExp('(text|application)/(.*)xml');\nclass HTMLHandler extends Handler {\n static toString() {\n return 'HTMLHandler';\n }\n static register(fetcher) {\n fetcher.mediatypes['text/html'] = {\n 'q': 0.8\n };\n }\n parse(fetcher, responseText, options) {\n let kb = fetcher.store;\n\n // We only handle XHTML so we have to figure out if this is XML\n // log.info(\"Sniffing HTML \" + xhr.resource + \" for XHTML.\")\n if (isXML(responseText)) {\n fetcher.addStatus(options.req, \"Has an XML declaration. We'll assume \" + \"it's XHTML as the content-type was text/html.\\n\");\n let xhtmlHandler = new XHTMLHandler(this.response);\n return xhtmlHandler.parse(fetcher, responseText, options);\n }\n\n // DOCTYPE html\n if (isXHTML(responseText)) {\n fetcher.addStatus(options.req, 'Has XHTML DOCTYPE. Switching to XHTMLHandler.\\n');\n let xhtmlHandler = new XHTMLHandler(this.response);\n return xhtmlHandler.parse(fetcher, responseText, options);\n }\n\n // xmlns\n if (isXMLNS(responseText)) {\n fetcher.addStatus(options.req, 'Has default namespace for XHTML, so switching to XHTMLHandler.\\n');\n let xhtmlHandler = new XHTMLHandler(this.response);\n return xhtmlHandler.parse(fetcher, responseText, options);\n }\n\n // dc:title\n // no need to escape '/' here\n let titleMatch = new RegExp('<title>([\\\\s\\\\S]+?)</title>', 'im').exec(responseText);\n if (titleMatch) {\n kb.add(options.resource, ns.dc('title'), kb.rdfFactory.literal(titleMatch[1]), options.resource); // think about xml:lang later\n }\n kb.add(options.resource, ns.rdf('type'), ns.link('WebPage'), fetcher.appNode);\n fetcher.addStatus(options.req, 'non-XML HTML document, not parsed for data.');\n return fetcher.doneFetch(options, this.response);\n }\n}\nHTMLHandler.pattern = new RegExp('text/html');\nclass JsonLdHandler extends Handler {\n static toString() {\n return 'JsonLdHandler';\n }\n static register(fetcher) {\n fetcher.mediatypes['application/ld+json'] = {\n 'q': 0.9\n };\n }\n async parse(fetcher, responseText, options, response) {\n const kb = fetcher.store;\n try {\n await jsonldParser(responseText, kb, options.original.value);\n fetcher.store.add(options.original, ns.rdf('type'), ns.link('RDFDocument'), fetcher.appNode);\n return fetcher.doneFetch(options, response);\n } catch (err) {\n const msg = 'Error trying to parse ' + options.resource + ' as JSON-LD:\\n' + err; // not err.stack -- irrelevant\n return fetcher.failFetch(options, msg, 'parse_error', response);\n }\n }\n}\nJsonLdHandler.pattern = /application\\/(ld\\+json|activity\\+json)/;\nclass TextHandler extends Handler {\n static toString() {\n return 'TextHandler';\n }\n static register(fetcher) {\n fetcher.mediatypes['text/plain'] = {\n 'q': 0.5\n };\n }\n parse(fetcher, responseText, options) {\n // We only speak dialects of XML right now. Is this XML?\n\n // Look for an XML declaration\n if (isXML(responseText)) {\n fetcher.addStatus(options.req, 'Warning: ' + options.resource + \" has an XML declaration. We'll assume \" + \"it's XML but its content-type wasn't XML.\\n\");\n let xmlHandler = new XMLHandler(this.response);\n return xmlHandler.parse(fetcher, responseText, options);\n }\n\n // Look for an XML declaration\n if (responseText.slice(0, 500).match(/xmlns:/)) {\n fetcher.addStatus(options.req, \"May have an XML namespace. We'll assume \" + \"it's XML but its content-type wasn't XML.\\n\");\n let xmlHandler = new XMLHandler(this.response);\n return xmlHandler.parse(fetcher, responseText, options);\n }\n\n // We give up finding semantics - this is not an error, just no data\n fetcher.addStatus(options.req, 'Plain text document, no known RDF semantics.');\n return fetcher.doneFetch(options, this.response);\n }\n}\nTextHandler.pattern = new RegExp('text/plain');\nclass N3Handler extends Handler {\n static toString() {\n return 'N3Handler';\n }\n static register(fetcher) {\n fetcher.mediatypes['text/n3'] = {};\n fetcher.mediatypes['text/turtle'] = {};\n }\n parse(fetcher, responseText, options, response) {\n // Parse the text of this N3 file\n let kb = fetcher.store;\n let p = N3Parser(kb, kb, options.original.value, options.original.value, null, null, '', null);\n // p.loadBuf(xhr.responseText)\n try {\n p.loadBuf(responseText);\n } catch (err) {\n let msg = 'Error trying to parse ' + options.resource + ' as Notation3:\\n' + err; // not err.stack -- irrelevant\n return fetcher.failFetch(options, msg, 'parse_error', response);\n }\n fetcher.addStatus(options.req, 'N3 parsed: ' + p.statementCount + ' triples in ' + p.lines + ' lines.');\n fetcher.store.add(options.original, ns.rdf('type'), ns.link('RDFDocument'), fetcher.appNode);\n return fetcher.doneFetch(options, this.response);\n }\n}\nN3Handler.pattern = new RegExp('(application|text)/(x-)?(rdf\\\\+)?(n3|turtle)');\nconst defaultHandlers = {\n RDFXMLHandler,\n XHTMLHandler,\n XMLHandler,\n HTMLHandler,\n TextHandler,\n N3Handler,\n JsonLdHandler\n};\nfunction isXHTML(responseText) {\n const docTypeStart = responseText.indexOf('<!DOCTYPE html');\n const docTypeEnd = responseText.indexOf('>');\n if (docTypeStart === -1 || docTypeEnd === -1 || docTypeStart > docTypeEnd) {\n return false;\n }\n return responseText.substr(docTypeStart, docTypeEnd - docTypeStart).indexOf('XHTML') !== -1;\n}\nfunction isXML(responseText) {\n const match = responseText.match(/\\s*<\\?xml\\s+version\\s*=[^<>]+\\?>/);\n return !!match;\n}\nfunction isXMLNS(responseText) {\n const match = responseText.match(/[^(<html)]*<html\\s+[^<]*xmlns=['\"]http:\\/\\/www.w3.org\\/1999\\/xhtml[\"'][^<]*>/);\n return !!match;\n}\n\n// Not sure about the shapes of this. Response? FetchError?\n\n/** Differs from normal Fetch, has an extended Response type */\n\n/** Fetcher\n *\n * The Fetcher object is a helper object for a quadstore\n * which turns it from an offline store to an online store.\n * The fetcher deals with loading data files rom the web,\n * figuring how to parse them. It will also refresh, remove, the data\n * and put back the data to the web.\n */\nexport default class Fetcher {\n constructor(store, options = {}) {\n _defineProperty(this, \"store\", void 0);\n _defineProperty(this, \"timeout\", void 0);\n _defineProperty(this, \"_fetch\", void 0);\n _defineProperty(this, \"mediatypes\", void 0);\n /** Denoting this session */\n _defineProperty(this, \"appNode\", void 0);\n /**\n * this.requested[uri] states:\n * undefined no record of web access or records reset\n * true has been requested, fetch in progress\n * 'done' received, Ok\n * 401 Not logged in\n * 403 HTTP status unauthorized\n * 404 Resource does not exist. Can be created etc.\n * 'redirected' In attempt to counter CORS problems retried.\n * 'parse_error' Parse error\n * 'unsupported_protocol' URI is not a protocol Fetcher can deal with\n * other strings mean various other errors.\n */\n _defineProperty(this, \"requested\", void 0);\n /** List of timeouts associated with a requested URL */\n _defineProperty(this, \"timeouts\", void 0);\n /** Redirected from *key uri* to *value uri* */\n _defineProperty(this, \"redirectedTo\", void 0);\n _defineProperty(this, \"fetchQueue\", void 0);\n /** fetchCallbacks[uri].push(callback) */\n _defineProperty(this, \"fetchCallbacks\", void 0);\n /** Keep track of explicit 404s -> we can overwrite etc */\n _defineProperty(this, \"nonexistent\", void 0);\n _defineProperty(this, \"lookedUp\", void 0);\n _defineProperty(this, \"handlers\", void 0);\n _defineProperty(this, \"ns\", void 0);\n /** Methods added by calling Util.callbackify in the constructor*/\n _defineProperty(this, \"fireCallbacks\", void 0);\n this.store = store || new IndexedFormula();\n this.ns = getNS(this.store.rdfFactory);\n this.timeout = options.timeout || 30000;\n\n // solidFetcher is deprecated\n let fetchFunc = options.fetch || typeof global !== 'undefined' && (global.solidFetcher || global.solidFetch) || typeof window !== 'undefined' && (window.solidFetcher || window.solidFetch) || crossFetch;\n if (!fetchFunc) {\n throw new Error('No _fetch function available for Fetcher');\n }\n // Bind fetch to its context to avoid \"Illegal invocation\" errors\n // Check if it's the native browser fetch or global fetch that needs binding\n if (typeof window !== 'undefined' && fetchFunc === window.fetch) {\n this._fetch = fetchFunc.bind(window);\n } else if (typeof global !== 'undefined' && fetchFunc === global.fetch) {\n this._fetch = fetchFunc.bind(global);\n } else {\n this._fetch = fetchFunc;\n }\n // This is the name of the graph we store all the HTTP metadata in\n this.appNode = this.store.sym('chrome://TheCurrentSession');\n // this.appNode = this.store.rdfFactory.blankNode() // Needs to have a URI in tests\n this.store.fetcher = this; // Bi-linked\n this.requested = {};\n this.timeouts = {};\n this.redirectedTo = {};\n this.fetchQueue = {};\n this.fetchCallbacks = {};\n this.nonexistent = {};\n this.lookedUp = {};\n this.handlers = [];\n this.mediatypes = {\n 'image/*': {\n 'q': 0.9\n },\n '*/*': {\n 'q': 0.1\n } // Must allow access to random content\n };\n\n // Util.callbackify(this, ['request', 'recv', 'headers', 'load', 'fail',\n // 'refresh', 'retract', 'done'])\n // In switching to fetch(), 'recv', 'headers' and 'load' do not make sense\n Util.callbackify(this, ['request', 'fail', 'refresh', 'retract', 'done']);\n Object.keys(options.handlers || defaultHandlers).map(key => this.addHandler(defaultHandlers[key]));\n }\n static crossSiteProxy(uri) {\n if (Fetcher.crossSiteProxyTemplate) {\n return Fetcher.crossSiteProxyTemplate.replace('{uri}', encodeURIComponent(uri));\n } else {\n return undefined;\n }\n }\n static offlineOverride(uri) {\n // Map the URI to a localhost proxy if we are running on localhost\n // This is used for working offline, e.g. on planes.\n // Is the script itself is running in localhost, then access all\n // data in a localhost mirror.\n // Do not remove without checking with TimBL\n let requestedURI = uri;\n var UI;\n if (typeof window !== 'undefined' && window.panes && (UI = window.panes.UI) && UI.preferences && UI.preferences.get('offlineModeUsingLocalhost')) {\n if (requestedURI.slice(0, 7) === 'http://' && requestedURI.slice(7, 17) !== 'localhost/') {\n requestedURI = 'http://localhost/' + requestedURI.slice(7);\n log.warn('Localhost kludge for offline use: actually getting <' + requestedURI + '>');\n } else {\n // log.warn(\"Localhost kludge NOT USED <\" + requestedURI + \">\")\n }\n } else {\n // log.warn(\"Localhost kludge OFF offline use: actually getting <\" +\n // requestedURI + \">\")\n }\n return requestedURI;\n }\n static proxyIfNecessary(uri) {\n var UI;\n if (typeof window !== 'undefined' && window.panes && (UI = window.panes.UI) && UI.isExtension) {\n return uri;\n } // Extension does not need proxy\n\n if (typeof $SolidTestEnvironment !== 'undefined' && $SolidTestEnvironment.localSiteMap) {\n // nested dictionaries of URI parts from origin down\n let hostpath = uri.split('/').slice(2); // the bit after the //\n\n const lookup = (parts, index) => {\n let z = index[parts.shift()];\n if (!z) {\n return null;\n }\n if (typeof z === 'string') {\n return z + parts.join('/');\n }\n if (!parts) {\n return null;\n }\n return lookup(parts, z);\n };\n const y = lookup(hostpath, $SolidTestEnvironment.localSiteMap);\n if (y) {\n return y;\n }\n }\n\n // browser does 2014 on as https browser script not trusted\n // If the web app origin is https: then the mixed content rules\n // prevent it loading insecure http: stuff so we need proxy.\n if (Fetcher.crossSiteProxyTemplate && typeof document !== 'undefined' && document.location && ('' + document.location).slice(0, 6) === 'https:' &&\n // origin is secure\n uri.slice(0, 5) === 'http:') {\n // requested data is not\n return Fetcher.crossSiteProxyTemplate.replace('{uri}', encodeURIComponent(uri));\n }\n return uri;\n }\n\n /**\n * Tests whether the uri's protocol is supported by the Fetcher.\n * @param uri\n */\n static unsupportedProtocol(uri) {\n let pcol = Uri.protocol(uri);\n return pcol === 'tel' || pcol === 'mailto' || pcol === 'urn';\n }\n\n /** Decide on credentials using old XXHR api or new fetch() one\n * @param requestedURI\n * @param options\n */\n static setCredentials(requestedURI, options = {}) {\n // 2014 CORS problem:\n // XMLHttpRequest cannot load http://www.w3.org/People/Berners-Lee/card.\n // A wildcard '*' cannot be used in the 'Access-Control-Allow-Origin'\n // header when the credentials flag is true.\n // @ Many ontology files under http: and need CORS wildcard ->\n // can't have credentials\n if (options.credentials === undefined) {\n // Caller using new fetch convention\n if (options.withCredentials !== undefined) {\n // XHR style is what Fetcher specified before\n options.credentials = options.withCredentials ? 'include' : 'omit';\n } else {\n options.credentials = 'include'; // default is to be logged on\n }\n }\n }\n\n /**\n * Promise-based load function\n *\n * Loads a web resource or resources into the store.\n *\n * A resource may be given as NamedNode object, or as a plain URI.\n * an array of resources will be given, in which they will be fetched in parallel.\n * By default, the HTTP headers are recorded also, in the same store, in a separate graph.\n * This allows code like editable() for example to test things about the resource.\n *\n * @param uri {Array<RDFlibNamedNode>|Array<string>|RDFlibNamedNode|string}\n *\n * @param [options={}] {Object}\n *\n * @param [options.fetch] {Function}\n *\n * @param [options.referringTerm] {RDFlibNamedNode} Referring term, the resource which\n * referred to this (for tracking bad links)\n *\n * @param [options.contentType] {string} Provided content type (for writes)\n *\n * @param [options.forceContentType] {string} Override the incoming header to\n * force the data to be treated as this content-type (for reads)\n *\n * @param [options.force] {boolean} Load the data even if loaded before.\n * Also sets the `Cache-Control:` header to `no-cache`\n *\n * @param [options.baseURI=docuri] {Node|string} Original uri to preserve\n * through proxying etc (`xhr.original`).\n *\n * @param [options.proxyUsed] {boolean} Whether this request is a retry via\n * a proxy (generally done from an error handler)\n *\n * @param [options.withCredentials] {boolean} flag for XHR/CORS etc\n *\n * @param [options.clearPreviousData] {boolean} Before we parse new data,\n * clear old, but only on status 200 responses\n *\n * @param [options.noMeta] {boolean} Prevents the addition of various metadata\n * triples (about the fetch request) to the store\n *\n * @param [options.noRDFa] {boolean}\n *\n * @returns {Promise<Result>}\n */\n load(uri, options = {}) {\n options = Object.assign({}, options); // Take a copy as we add stuff to the options!!\n if (uri instanceof Array) {\n return Promise.all(uri.map(x => {\n return this.load(x, Object.assign({}, options));\n }));\n }\n const uriIn = uri;\n let docuri = termValue(uriIn);\n docuri = docuri.split('#')[0];\n options = this.initFetchOptions(docuri, options);\n // if metadata flaged clear cache and removeDocument\n const meta = this.appNode;\n const kb = this.store;\n const requests = kb.statementsMatching(undefined, this.ns.link('requestedURI'), kb.sym(docuri), meta).map(st => st.subject);\n for (const request of requests) {\n const response = kb.any(request, this.ns.link('response'), null, meta);\n if (response != undefined) {\n // ts\n const quad = kb.statementsMatching(response, this.ns.link('outOfDate'), true, meta);\n kb.remove(quad);\n options.force = true;\n options.clearPreviousData = true;\n }\n }\n const initialisedOptions = this.initFetchOptions(docuri, options);\n return this.pendingFetchPromise(docuri, initialisedOptions.baseURI, initialisedOptions);\n }\n async pendingFetchPromise(uri, originalUri, options) {\n let pendingPromise;\n\n // Check to see if some request is already dealing with this uri\n if (!options.force && (await this.fetchQueue[originalUri])) {\n pendingPromise = this.fetchQueue[originalUri];\n } else {\n pendingPromise = Promise.race([this.setRequestTimeout(uri, options), this.fetchUri(uri, options)]);\n this.fetchQueue[originalUri] = pendingPromise;\n\n // Clean up the queued promise after a time, if it's resolved\n this.cleanupFetchRequest(originalUri, undefined, this.timeout);\n }\n return pendingPromise.then(x => {\n if (uri in this.timeouts) {\n this.timeouts[uri].forEach(clearTimeout);\n delete this.timeouts[uri];\n }\n return x;\n });\n }\n\n /**\n * @param _options - DEPRECATED\n */\n cleanupFetchRequest(originalUri, _options, timeout) {\n if (_options !== undefined) {\n console.warn(\"_options is deprecated\");\n }\n this.timeouts[originalUri] = (this.timeouts[originalUri] || []).concat(setTimeout(() => {\n if (!this.isPending(originalUri)) {\n delete this.fetchQueue[originalUri];\n }\n }, timeout));\n }\n initFetchOptions(uri, options) {\n let kb = this.store;\n let isGet = !options.method || options.method.toUpperCase() === 'GET';\n if (!isGet) {\n options.force = true;\n }\n options.resource = kb.rdfFactory.namedNode(uri); // This might be proxified\n options.baseURI = options.baseURI || uri; // Preserve though proxying etc\n options.original = kb.rdfFactory.namedNode(options.baseURI);\n options.req = kb.bnode();\n options.headers = options.headers || {};\n if (options.contentType) {\n // @ts-ignore\n options.headers['content-type'] = options.contentType;\n }\n if (options.force) {\n options.cache = 'no-cache';\n }\n let acceptString = this.acceptString();\n // @ts-ignore\n options.headers['accept'] = acceptString;\n let requestedURI = Fetcher.offlineOverride(uri);\n options.requestedURI = requestedURI;\n Fetcher.setCredentials(requestedURI, options);\n let actualProxyURI = Fetcher.proxyIfNecessary(requestedURI);\n if (requestedURI !== actualProxyURI) {\n options.proxyUsed = true;\n }\n options.actualProxyURI = actualProxyURI;\n return options;\n }\n\n /**\n * (The promise chain ends in either a `failFetch()` or a `doneFetch()`)\n *\n * @param docuri {string}\n * @param options {Object}\n *\n * @returns {Promise<Object>} fetch() result or an { error, status } object\n */\n fetchUri(docuri, options) {\n if (!docuri) {\n return Promise.reject(new Error('Cannot fetch an empty uri'));\n }\n if (Fetcher.unsupportedProtocol(docuri)) {\n return this.failFetch(options, 'fetcher: Unsupported protocol', 'unsupported_protocol');\n }\n let state = this.getState(docuri);\n if (!options.force) {\n if (state === 'fetched') {\n // URI already fetched and added to store\n return Promise.resolve(\n // @ts-ignore This is not a valid response object\n this.doneFetch(options, {\n status: 200,\n ok: true,\n statusText: 'Already loaded into quadstore.'\n }));\n }\n if (state === 'failed' && this.requested[docuri] === 404) {\n // Remember nonexistence\n let message = 'Previously failed: ' + this.requested[docuri];\n // @ts-ignore This is not a valid response object\n let dummyResponse = {\n url: docuri,\n // This does not comply to Fetch spec, it can be a string value in rdflib\n status: this.requested[docuri],\n statusText: message,\n responseText: message,\n headers: new Headers(),\n // Headers() ???\n ok: false,\n body: null,\n bodyUsed: false,\n size: 0,\n timeout: 0\n };\n return this.failFetch(options, message, this.requested[docuri], dummyResponse);\n }\n } else {\n // options.force == true\n delete this.nonexistent[docuri];\n }\n this.fireCallbacks('request', [docuri]);\n this.requested[docuri] = true; // mark this uri as 'requested'\n\n if (!options.noMeta) {\n this.saveRequestMetadata(docuri, options);\n }\n let {\n actualProxyURI\n } = options;\n\n // Map might get mistakenly added into headers\n // error TS2339: Property 'map' does not exist on type 'Headers'.\n /* let map\n if (options.headers && map in options.headers) {\n delete options.headers.map\n } */\n\n return this._fetch(actualProxyURI, options).then(response => this.handleResponse(response, docuri, options), error => {\n // @@ handleError?\n // @ts-ignore Invalid response object\n let dummyResponse = {\n url: actualProxyURI,\n status: 999,\n // @@ what number/string should fetch failures report?\n statusText: (error.name || 'network failure') + ': ' + (error.errno || error.code || error.type),\n responseText: error.message,\n headers: new Headers(),\n // Headers() ???\n ok: false,\n body: null,\n bodyUsed: false,\n size: 0,\n timeout: 0\n };\n // console.log('Fetcher: <' + actualProxyURI + '> Non-HTTP fetch exception: ' + error)\n return this.handleError(dummyResponse, docuri, options); // possible credentials retry\n // return this.failFetch(options, 'fetch failed: ' + error, 999, dummyResponse) // Fake status code: fetch exception\n\n // handleError expects a response so we fake some important bits.\n /*\n this.handleError(, docuri, options)\n */\n });\n }\n\n /**\n * Asks for a doc to be loaded if necessary then calls back\n *\n * Calling methods:\n * nowOrWhenFetched (uri, userCallback)\n * nowOrWhenFetched (uri, options, userCallback)\n * nowOrWhenFetched (uri, referringTerm, userCallback, options) <-- old\n * nowOrWhenFetched (uri, referringTerm, userCallback) <-- old\n *\n * Options include:\n * referringTerm The document in which this link was found.\n * this is valuable when finding the source of bad URIs\n * force boolean. Never mind whether you have tried before,\n * load this from scratch.\n * forceContentType Override the incoming header to force the data to be\n * treated as this content-type.\n *\n * Callback function takes:\n *\n * ok True if the fetch worked, and got a 200 response.\n * False if any error happened\n *\n * errmessage Text error message if not OK.\n *\n * response The fetch Response object (was: XHR) if there was was one\n * includes response.status as the HTTP status if any.\n */\n nowOrWhenFetched(uriIn, p2, userCallback, options = {}) {\n const uri = termValue(uriIn);\n if (typeof p2 === 'function') {\n // nowOrWhenFetched (uri, userCallback)\n userCallback = p2;\n } else if (typeof p2 === 'undefined') {// original calling signature\n // referringTerm = undefined\n } else if (isNamedNode(p2)) {\n // referringTerm = p2\n options.referringTerm = p2;\n } else {\n // nowOrWhenFetched (uri, options, userCallback)\n options = p2;\n }\n this.load(uri, options).then(fetchResponse => {\n if (userCallback) {\n if (fetchResponse) {\n if (fetchResponse.ok) {\n userCallback(true, 'OK', fetchResponse);\n } else {\n let oops = 'HTTP error: Status ' + fetchResponse.status + ' (' + fetchResponse.statusText + ')';\n if (fetchResponse.responseText) {\n oops += ' ' + fetchResponse.responseText; // not in 404, dns error, nock failure\n }\n userCallback(false, oops, fetchResponse);\n }\n } else {\n let oops = '@@ nowOrWhenFetched: no response object!';\n userCallback(false, oops);\n }\n }\n }, function (err) {\n var message = err.message || err.statusText;\n message = 'Failed to load <' + uri + '> ' + message;\n if (err.response && err.response.status) {\n message += ' status: ' + err.response.status;\n }\n userCallback(false, message, err.response);\n });\n }\n\n /**\n * Records a status message (as a literal node) by appending it to the\n * request's metadata status collection.\n *\n */\n addStatus(req, statusMessage) {\n // <Debug about=\"parsePerformance\">\n let now = new Date();\n statusMessage = '[' + now.getHours() + ':' + now.getMinutes() + ':' + now.getSeconds() + '.' + now.getMilliseconds() + '] ' + statusMessage;\n // </Debug>\n let kb = this.store;\n const statusNode = kb.the(req, this.ns.link('status'));\n if (isCollection(statusNode)) {\n statusNode.append(kb.rdfFactory.literal(statusMessage));\n } else {\n log.warn('web.js: No list to add to: ' + statusNode + ',' + statusMessage);\n }\n }\n\n /**\n * Records errors in the system on failure:\n *\n * - Adds an entry to the request status collection\n * - Adds an error triple with the fail message to the metadata\n * - Fires the 'fail' callback\n * - Rejects with an error result object, which has a response object if any\n */\n failFetch(options, errorMessage, statusCode, response) {\n this.addStatus(options.req, errorMessage);\n if (!options.noMeta) {\n this.store.add(options.original, this.ns.link('error'), this.store.rdfFactory.literal(errorMessage));\n }\n let meth = (options.method || 'GET').toUpperCase();\n let isGet = meth === 'GET' || meth === 'HEAD';\n if (isGet) {\n // only cache the status code on GET or HEAD\n if (!options.resource.equals(options.original)) {\n // console.log('@@ Recording failure ' + meth + ' original ' + options.original +option '( as ' + options.resource + ') : ' + statusCode)\n } else {\n // console.log('@@ Recording ' + meth + ' failure for ' + options.original + ': ' + statusCode)\n }\n this.requested[Uri.docpart(options.original.value)] = statusCode;\n this.fireCallbacks('fail', [options.original.value, errorMessage]);\n }\n var err = new Error('Fetcher: ' + errorMessage);\n\n // err.ok = false // Is taken as a response, will work too @@ phase out?\n err.status = statusCode;\n err.statusText = errorMessage;\n err.response = response;\n return Promise.reject(err);\n }\n\n // in the why part of the quad distinguish between HTML and HTTP header\n // Reverse is set iif the link was rev= as opposed to rel=\n linkData(originalUri, rel, uri, why, reverse) {\n if (!uri) return;\n let kb = this.store;\n let predicate;\n // See http://www.w3.org/TR/powder-dr/#httplink for describedby 2008-12-10\n let obj = kb.rdfFactory.namedNode(Uri.join(uri, originalUri.value));\n if (rel === 'alternate' || rel === 'seeAlso' || rel === 'meta' || rel === 'describedby') {\n if (obj.value === originalUri.value) {\n return;\n }\n predicate = this.ns.rdfs('seeAlso');\n } else if (rel === 'type') {\n predicate = kb.rdfFactory.namedNode('http://www.w3.org/1999/02/22-rdf-syntax-ns#type');\n } else {\n // See https://www.iana.org/assignments/link-relations/link-relations.xml\n // Alas not yet in RDF yet for each predicate\n // encode space in e.g. rel=\"shortcut icon\"\n predicate = kb.rdfFactory.namedNode(Uri.join(encodeURIComponent(rel), 'http://www.iana.org/assignments/link-relations/'));\n }\n if (reverse) {\n kb.add(obj, predicate, originalUri, why);\n } else {\n kb.add(originalUri, predicate, obj, why);\n }\n }\n parseLinkHeader(linkHeader, originalUri, reqNode) {\n if (!linkHeader) {\n return;\n }\n\n // const linkexp = /<[^>]*>\\s*(\\s*;\\s*[^()<>@,;:\"/[\\]?={} \\t]+=(([^()<>@,;:\"/[]?={} \\t]+)|(\"[^\"]*\")))*(,|$)/g\n // const paramexp = /[^()<>@,;:\"/[]?={} \\t]+=(([^()<>@,;:\"/[]?={} \\t]+)|(\"[^\"]*\"))/g\n\n // From https://www.dcode.fr/regular-expression-simplificator:\n // const linkexp = /<[^>]*>\\s*(\\s*;\\s*[^()<>@,;:\"/[\\]?={} t]+=[\"]))*[,$]/g\n // const paramexp = /[^\\\\<>@,;:\"\\/\\[\\]?={} \\t]+=[\"])/g\n // Original:\n const linkexp = /<[^>]*>\\s*(\\s*;\\s*[^()<>@,;:\"/[\\]?={} \\t]+=(([^\\(\\)<>@,;:\"\\/\\[\\]\\?={} \\t]+)|(\"[^\"]*\")))*(,|$)/g;\n const paramexp = /[^\\(\\)<>@,;:\"\\/\\[\\]\\?={} \\t]+=(([^\\(\\)<>@,;:\"\\/\\[\\]\\?={} \\t]+)|(\"[^\"]*\"))/g;\n const matches = linkHeader.match(linkexp);\n if (matches == null) return;\n for (let i = 0; i < matches.length; i++) {\n let split = matches[i].split('>');\n let href = split[0].substring(1);\n let ps = split[1];\n let s = ps.match(paramexp);\n if (s == null) return;\n for (let j = 0; j < s.length; j++) {\n let p = s[j];\n let paramsplit = p.split('=');\n // var name = paramsplit[0]\n let rel = paramsplit[1].replace(/[\"']/g, ''); // '\"\n this.linkData(originalUri, rel, href, reqNode);\n }\n }\n }\n doneFetch(options, response) {\n this.addStatus(options.req, 'Done.');\n this.requested[options.original.value] = 'done';\n this.fireCallbacks('done', [options.original.value]);\n response.req = options.req; // Set the request meta blank node\n\n return response;\n }\n\n /**\n * Note two nodes are now smushed\n * If only one was flagged as looked up, then the new node is looked up again,\n * which will make sure all the URIs are dereferenced\n */\n nowKnownAs(was, now) {\n if (this.lookedUp[was.value]) {\n // Transfer userCallback\n if (!this.lookedUp[now.value]) {\n this.lookUpThing(now, was);\n }\n } else if (this.lookedUp[now.value]) {\n if (!this.lookedUp[was.value]) {\n this.lookUpThing(was, now);\n }\n }\n }\n\n /**\n * Writes back to the web what we have in the store for this uri\n */\n putBack(uri, options = {}) {\n const uriSting = termValue(uri);\n let doc = new RDFlibNamedNode(uriSting).doc(); // strip off #\n options.contentType = options[\"content-type\"] || options[\"Content-Type\"] || options.contentType || TurtleContentType;\n if (options.contentType === 'application/ld+json') {\n return new Promise((resolve, reject) => {\n serialize(doc, this.store, doc.uri, options.contentType, (err, jsonString) => {\n if (err) {\n reject(err);\n } else {\n // @ts-ignore\n options.data = jsonString;\n this.webOperation('PUT', uri, options).then(res => resolve(res)).catch(error => reject(error));\n }\n });\n });\n }\n options.data = serialize(doc, this.store, doc.value, options.contentType);\n return this.webOperation('PUT', uriSting, options);\n }\n webCopy(here, there, contentType) {\n return this.webOperation('GET', here).then(result => {\n return this.webOperation('PUT',\n // change to binary from text\n there, {\n data: result.responseText,\n contentType\n });\n });\n }\n delete(uri, options) {\n return this.webOperation('DELETE', uri, options).then(response => {\n this.requested[uri] = 404;\n this.nonexistent[uri] = true;\n this.unload(this.store.rdfFactory.namedNode(uri));\n return response;\n });\n }\n\n /** Create an empty resource if it really does not exist\n * Be absolutely sure something does not exist before creating a new empty file\n * as otherwise existing could be deleted.\n * @param doc - The resource\n */\n async createIfNotExists(doc, contentType = TurtleContentType, data = '') {\n const fetcher = this;\n try {\n var response = await fetcher.load(doc);\n } catch (err) {\n // @ts-ignore\n if (err.response.status === 404) {\n // console.log('createIfNotExists: doc does NOT exist, will create... ' + doc)\n try {\n response = await fetcher.webOperation('PUT', doc.value, {\n data,\n contentType\n });\n } catch (err) {\n // console.log('createIfNotExists doc FAILED: ' + doc + ': ' + err)\n throw err;\n }\n delete fetcher.requested[doc.value]; // delete cached 404 error\n // console.log('createIfNotExists doc created ok ' + doc)\n return response;\n } else {\n // console.log('createIfNotExists doc load error NOT 404: ' + doc + ': ' + err)\n throw err;\n }\n }\n // console.log('createIfNotExists: doc exists, all good: ' + doc)\n return response;\n }\n\n /**\n * @param parentURI URI of parent container\n * @param folderName - Optional folder name (slug)\n * @param data - Optional folder metadata\n */\n createContainer(parentURI, folderName, data) {\n let headers = {\n // Force the right mime type for containers\n 'content-type': TurtleContentType,\n 'link': this.ns.ldp('BasicContainer') + '; rel=\"type\"'\n };\n if (folderName) {\n headers['slug'] = folderName;\n }\n\n // @ts-ignore These headers lack some of the required operators.\n let options = {\n headers\n };\n if (data) {\n options.body = data;\n }\n return this.webOperation('POST', parentURI, options);\n }\n invalidateCache(iri) {\n const uri = termValue(iri);\n const fetcher = this;\n // @ts-ignore\n if (fetcher.fetchQueue && fetcher.fetchQueue[uri]) {\n // console.log('Internal error - fetchQueue exists ' + uri)\n var promise = fetcher.fetchQueue[uri];\n if (promise['PromiseStatus'] === 'resolved') {\n delete fetcher.fetchQueue[uri];\n } else {\n // pending\n delete fetcher.fetchQueue[uri];\n // console.log('*** Fetcher: pending fetchQueue deleted ' + uri)\n }\n }\n if (fetcher.requested[uri] && fetcher.requested[uri] !== 'done' && fetcher.requested[uri] !== 'failed' && fetcher.requested[uri] !== 404) {\n let msg = `Rdflib: fetcher: Destructive operation on <${fetcher.requested[uri]}> file being fetched! ` + uri;\n console.error(msg);\n // alert(msg)\n } else {\n delete fetcher.requested[uri]; // invalidate read cache -- @@ messes up logic if request in progress ??\n delete fetcher.nonexistent[uri];\n }\n }\n\n /**\n * A generic web operation, at the fetch() level.\n * does not involve the quad store.\n *\n * Returns promise of Response\n * If data is returned, copies it to response.responseText before returning\n */\n webOperation(method, uriIn,\n // Not sure about this type. Maybe this Options is different?\n options = {}) {\n const uri = termValue(uriIn);\n options.method = method;\n options.body = options.data || options.body;\n options.force = true;\n const fetcher = this;\n if (options.body && !options.contentType) {\n throw new Error('Web operation sending data must have a defined contentType.');\n }\n if (options.contentType) {\n options.headers = options.headers || {};\n options.headers['content-type'] = options.contentType;\n }\n Fetcher.setCredentials(uri, options);\n return new Promise(function (resolve, reject) {\n fetcher._fetch(uri, options).then(response => {\n if (response.ok) {\n if (method === 'PUT' || method === 'PATCH' || method === 'POST' || method === 'DELETE') {\n fetcher.invalidateCache(uri);\n } // response.body with Chrome can't be relied on\n if (response.text) {\n // Was: response.body https://github.com/linkeddata/rdflib.js/issues/506\n response.text().then(data => {\n response.responseText = data;\n resolve(response);\n });\n } else {\n resolve(response);\n }\n } else {\n let msg = 'Web error: ' + response.status;\n if (response.statusText) msg += ' (' + response.statusText + ')';\n msg += ' on ' + method + ' of <' + uri + '>';\n if (response.responseText) msg += ': ' + response.responseText;\n let e2 = new Error(msg);\n e2.response = response;\n reject(e2);\n }\n }, err => {\n let msg = 'Fetch error for ' + method + ' of <' + uri + '>:' + err;\n reject(new Error(msg));\n });\n });\n }\n\n /**\n * Looks up something.\n * Looks up all the URIs a things has.\n *\n * @param term - canonical term for the thing whose URI is\n * to be dereferenced\n * @param rterm - the resource which referred to this\n * (for tracking bad links)\n */\n lookUpThing(term, rterm) {\n let uris = this.store.uris(term); // Get all URIs\n uris = uris.map(u => Uri.docpart(u)); // Drop hash fragments\n\n uris.forEach(u => {\n this.lookedUp[u] = true;\n });\n\n // @ts-ignore Recursive type\n return this.load(uris, {\n referringTerm: rterm\n });\n }\n\n /**\n * Looks up response header.\n *\n * @returns {Array|undefined} a list of header values found in a stored HTTP\n * response, or [] if response was found but no header found,\n * or undefined if no response is available.\n * Looks for { [] link:requestedURI ?uri; link:response [ httph:header-name ?value ] }\n */\n getHeader(doc, header) {\n const kb = this.store; // look for the URI (AS A STRING NOT A NODE) for a stored request\n const docuri = doc.value;\n const requests = kb.each(undefined, this.ns.link('requestedURI'), kb.rdfFactory.literal(docuri));\n for (let r = 0; r < requests.length; r++) {\n let request = requests[r];\n if (request !== undefined) {\n let response = kb.any(request, this.ns.link('response'));\n if (response !== undefined && kb.anyValue(response, this.ns.http('status')) && kb.anyValue(response, this.ns.http('status')).startsWith('2')) {\n // Only look at success returns - not 401 error messagess etc\n let results = kb.each(response, this.ns.httph(header.toLowerCase()));\n if (results.length) {\n return results.map(v => {\n return v.value;\n });\n }\n return [];\n }\n }\n }\n return undefined;\n }\n saveRequestMetadata(docuri, options) {\n let req = options.req;\n let kb = this.store;\n let rterm = options.referringTerm;\n this.addStatus(options.req, 'Accept: ' + options.headers['accept']);\n if (isNamedNode(rterm)) {\n kb.add(kb.rdfFactory.namedNode(docuri), this.ns.link('requestedBy'), rterm, this.appNode);\n }\n if (options.original && options.original.value !== docuri) {\n kb.add(req, this.ns.link('orginalURI'), kb.rdfFactory.literal(options.original.value), this.appNode);\n }\n const now = new Date();\n const timeNow = '[' + now.getHours() + ':' + now.getMinutes() + ':' + now.getSeconds() + '] ';\n kb.add(req, this.ns.rdfs('label'), kb.rdfFactory.literal(timeNow + ' Request for ' + docuri), this.appNode);\n // We store the docuri as a string, not as a node,\n // see https://github.com/linkeddata/rdflib.js/pull/427#pullrequestreview-447910061\n kb.add(req, this.ns.link('requestedURI'), kb.rdfFactory.literal(docuri), this.appNode);\n kb.add(req, this.ns.link('status'), kb.collection(), this.appNode);\n }\n saveResponseMetadata(response, options) {\n const kb = this.store;\n let responseNode = kb.bnode();\n kb.add(options.req, this.ns.link('response'), responseNode, this.appNode);\n kb.add(responseNode, this.ns.http('status'), kb.rdfFactory.literal(response.status), this.appNode);\n kb.add(responseNode, this.ns.http('statusText'), kb.rdfFactory.literal(response.statusText), this.appNode);\n\n // Save the response headers\n response.headers.forEach((value, header) => {\n kb.add(responseNode, this.ns.httph(header), this.store.rdfFactory.literal(value), this.appNode);\n if (header === 'content-type') {\n kb.add(options.resource, this.ns.rdf('type'), kb.rdfFactory.namedNode(Util.mediaTypeClass(value).value), this.appNode // responseNode\n );\n }\n });\n return responseNode;\n }\n objectRefresh(term) {\n let uris = this.store.uris(term); // Get all URIs\n if (typeof uris !== 'undefined') {\n for (let i = 0; i < uris.length; i++) {\n this.refresh(this.store.rdfFactory.namedNode(Uri.docpart(uris[i])));\n // what about rterm?\n }\n }\n }\n\n /* refresh Reload data from a given document\n **\n ** @param term - An RDF Named Node for the eodcument in question\n ** @param userCallback - A function userCallback(ok, message, response)\n */\n refresh(term, userCallback) {\n // sources_refresh\n this.fireCallbacks('refresh', arguments);\n this.nowOrWhenFetched(term, {\n force: true,\n clearPreviousData: true\n }, userCallback);\n }\n\n /* refreshIfExpired Conditional refresh if Expired\n **\n ** @param term - An RDF Named Node for the eodcument in question\n ** @param userCallback - A function userCallback(ok, message, response)\n */\n refreshIfExpired(term, userCallback) {\n let exp = this.getHeader(term, 'Expires');\n if (!exp || new Date(exp[0]).getTime() <= new Date().getTime()) {\n this.refresh(term, userCallback);\n } else {\n userCallback(true, 'Not expired', {});\n }\n }\n retract(term) {\n // sources_retract\n this.store.removeMany(undefined, undefined, undefined, term);\n if (term.value) {\n delete this.requested[Uri.docpart(term.value)];\n }\n this.fireCallbacks('retract', arguments);\n }\n getState(docuri) {\n if (typeof this.requested[docuri] === 'undefined') {\n return 'unrequested';\n } else if (this.requested[docuri] === true) {\n return 'requested';\n } else if (this.requested[docuri] === 'done') {\n return 'fetched';\n } else if (this.requested[docuri] === 'redirected') {\n return this.getState(this.redirectedTo[docuri]);\n } else {\n // An non-200 HTTP error status\n return 'failed';\n }\n }\n isPending(docuri) {\n // sources_pending\n // doing anyStatementMatching is wasting time\n // if it's not pending: false -> flailed\n // 'done' -> done 'redirected' -> redirected\n return this.requested[docuri] === true;\n }\n unload(term) {\n this.store.removeDocument(term);\n delete this.requested[term.value]; // So it can be load2ed again\n }\n addHandler(handler) {\n this.handlers.push(handler);\n handler.register(this);\n }\n retryNoCredentials(docuri, options) {\n // console.log('Fetcher: CORS: RETRYING with NO CREDENTIALS for ' + options.resource)\n\n options.retriedWithNoCredentials = true; // protect against being called twice\n\n delete this.requested[docuri]; // forget the original request happened\n delete this.fetchQueue[docuri];\n // Note: XHR property was withCredentials, but fetch property is just credentials\n let newOptions = Object.assign({}, options, {\n credentials: 'omit'\n });\n this.addStatus(options.req, 'Abort: Will retry with credentials SUPPRESSED to see if that helps');\n return this.load(docuri, newOptions);\n }\n\n /**\n * Tests whether a request is being made to a cross-site URI (for purposes\n * of retrying with a proxy)\n */\n isCrossSite(uri) {\n // Mashup situation, not node etc\n if (typeof document === 'undefined' || !document.location) {\n return false;\n }\n const hostpart = Uri.hostpart;\n const here = '' + document.location;\n return (hostpart(here) && hostpart(uri) && hostpart(here)) !== hostpart(uri);\n }\n\n /**\n * Called when there's a network error in fetch(), or a response\n * with status of 0.\n */\n handleError(response, docuri, options) {\n if (this.isCrossSite(docuri)) {\n // Make sure we haven't retried already\n if (options.credentials && options.credentials === 'include' && !options.retriedWithNoCredentials) {\n return this.retryNoCredentials(docuri, options);\n }\n\n // Now attempt retry via proxy\n let proxyUri = Fetcher.crossSiteProxy(docuri);\n if (proxyUri && !options.proxyUsed) {\n // console.log('web: Direct failed so trying proxy ' + proxyUri)\n return this.redirectToProxy(proxyUri, options);\n }\n }\n var message;\n if (response instanceof Error) {\n message = 'Fetch error: ' + response.message;\n } else {\n message = response.statusText;\n if (response.responseText) {\n message += ` ${response.responseText}`;\n }\n }\n\n // This is either not a CORS error, or retries have been made\n return this.failFetch(options, message, response.status || 998, response);\n }\n\n // deduce some things from the HTTP transaction\n addType(rdfType, req, kb, locURI) {\n // add type to all redirected resources too\n let prev = req;\n if (locURI) {\n var reqURI = kb.any(prev, this.ns.link('requestedURI'));\n if (reqURI && reqURI.value !== locURI) {\n kb.add(kb.rdfFactory.namedNode(locURI), this.ns.rdf('type'), rdfType, this.appNode);\n }\n }\n for (;;) {\n const doc = kb.any(prev, this.ns.link('requestedURI'));\n if (doc && doc.value) {\n kb.add(kb.rdfFactory.namedNode(doc.value), this.ns.rdf('type'), rdfType, this.appNode);\n } // convert Literal\n prev = kb.any(undefined, kb.rdfFactory.namedNode('http://www.w3.org/2007/ont/link#redirectedRequest'), prev);\n if (!prev) {\n break;\n }\n var response = kb.any(prev, kb.rdfFactory.namedNode('http://www.w3.org/2007/ont/link#response'));\n if (!response) {\n break;\n }\n var redirection = kb.any(response, kb.rdfFactory.namedNode('http://www.w3.org/2007/ont/http#status'));\n if (!redirection) {\n break;\n }\n // @ts-ignore always true?\n if (redirection !== '301' && redirection !== '302') {\n break;\n }\n }\n }\n\n /**\n * Handle fetch() response\n */\n handleResponse(response, docuri, options) {\n const kb = this.store;\n const headers = response.headers;\n const reqNode = options.req;\n const responseNode = this.saveResponseMetadata(response, options);\n const contentType = this.normalizedContentType(options, headers) || '';\n let contentLocation = headers.get('content-location');\n\n // this.fireCallbacks('recv', xhr.args)\n // this.fireCallbacks('headers', [{uri: docuri, headers: xhr.headers}])\n\n // Check for masked errors (CORS, etc)\n if (response.status === 0) {\n // console.log('Masked error - status 0 for ' + docuri)\n return this.handleError(response, docuri, options);\n }\n if (response.status >= 400) {\n if (response.status === 404) {\n this.nonexistent[options.original.value] = true;\n this.nonexistent[docuri] = true;\n }\n return this.saveErrorResponse(response, responseNode).then(() => {\n let errorMessage = options.resource + ' ' + response.statusText;\n return this.failFetch(options, errorMessage, response.status, response);\n });\n }\n var diffLocation = null;\n var absContentLocation = null;\n if (contentLocation) {\n absContentLocation = Uri.join(contentLocation, docuri);\n if (absContentLocation !== docuri) {\n diffLocation = absContentLocation;\n }\n }\n if (response.status === 200) {\n this.addType(this.ns.link('Document'), reqNode, kb, docuri);\n if (diffLocation) {\n this.addType(this.ns.link('Document'), reqNode, kb, diffLocation);\n }\n\n // Before we parse new data clear old but only on 200\n if (options.clearPreviousData) {\n // kb.removeDocument(options.resource)\n // only remove content, keep metatdata\n const sts = kb.statementsMatching(undefined, undefined, undefined, options.resource).slice(); // Take a copy as this is the actual index\n for (let i = 0; i < sts.length; i++) {\n kb.removeStatement(sts[i]);\n }\n }\n let isImage = contentType.includes('image/') || contentType.includes('application/pdf');\n if (contentType && isImage) {\n this.addType(kb.rdfFactory.namedNode('http://purl.org/dc/terms/Image'), reqNode, kb, docuri);\n if (diffLocation) {\n this.addType(kb.rdfFactory.namedNode('http://purl.org/dc/terms/Image'), reqNode, kb, diffLocation);\n }\n }\n }\n\n // If we have already got the thing at this location, abort\n if (contentLocation) {\n if (!options.force && diffLocation && this.requested[absContentLocation] === 'done') {\n // we have already fetched this\n // should we smush too?\n // log.info(\"HTTP headers indicate we have already\" + \" retrieved \" +\n // xhr.resource + \" as \" + absContentLocation + \". Aborting.\")\n return this.doneFetch(options, response);\n }\n this.requested[absContentLocation] = true;\n }\n this.parseLinkHeader(headers.get('link'), options.original, reqNode);\n let handler = this.handlerForContentType(contentType, response);\n if (!handler) {\n // Not a problem, we just don't extract data\n this.addStatus(reqNode, 'Fetch over. No data handled.');\n return this.doneFetch(options, response);\n }\n return response.text()\n // @ts-ignore Types seem right\n .then(responseText => {\n response.responseText = responseText;\n return handler.parse(this, responseText, options, response);\n });\n }\n saveErrorResponse(response, responseNode) {\n let kb = this.store;\n return response.text().then(content => {\n if (content.length > 10) {\n kb.add(responseNode, this.ns.http('content'), kb.rdfFactory.literal(content), responseNode);\n }\n });\n }\n handlerForContentType(contentType, response) {\n if (!contentType) {\n return null;\n }\n let Handler = this.handlers.find(handler => {\n return contentType.match(handler.pattern);\n });\n\n // @ts-ignore in practice all Handlers have constructors.\n return Handler ? new Handler(response) : null;\n }\n guessContentType(uri) {\n return CONTENT_TYPE_BY_EXT[uri.split('.').pop()];\n }\n normalizedContentType(options, headers) {\n if (options.forceContentType) {\n return options.forceContentType;\n }\n let contentType = headers.get('content-type');\n if (!contentType || contentType.includes('application/octet-stream')) {\n let guess = this.guessContentType(options.resource.value);\n if (guess) {\n return guess;\n }\n }\n let protocol = Uri.protocol(options.resource.value);\n if (!contentType && ['file', 'chrome'].includes(protocol)) {\n return 'text/xml';\n }\n return contentType;\n }\n\n /**\n * Sends a new request to the specified uri. (Extracted from `onerrorFactory()`)\n */\n redirectToProxy(newURI, options) {\n this.addStatus(options.req, 'BLOCKED -> Cross-site Proxy to <' + newURI + '>');\n options.proxyUsed = true;\n const kb = this.store;\n const oldReq = options.req; // request metadata blank node\n\n if (!options.noMeta) {\n kb.add(oldReq, this.ns.link('redirectedTo'), kb.rdfFactory.namedNode(newURI), oldReq);\n this.addStatus(oldReq, 'redirected to new request'); // why\n }\n this.requested[options.resource.value] = 'redirected';\n this.redirectedTo[options.resource.value] = newURI;\n let newOptions = Object.assign({}, options);\n newOptions.baseURI = options.resource.value;\n return this.fetchUri(newURI, newOptions).then(response => {\n if (!newOptions.noMeta) {\n kb.add(oldReq, this.ns.link('redirectedRequest'), newOptions.req, this.appNode);\n }\n return response;\n });\n }\n setRequestTimeout(uri, options) {\n return new Promise(resolve => {\n this.timeouts[uri] = (this.timeouts[uri] || []).concat(setTimeout(() => {\n if (this.isPending(uri) && !options.retriedWithNoCredentials && !options.proxyUsed) {\n resolve(this.failFetch(options, `Request to ${uri} timed out`, 'timeout'));\n }\n }, this.timeout));\n });\n }\n addFetchCallback(uri, callback) {\n if (!this.fetchCallbacks[uri]) {\n this.fetchCallbacks[uri] = [callback];\n } else {\n this.fetchCallbacks[uri].push(callback);\n }\n }\n acceptString() {\n let acceptstring = '';\n for (let mediaType in this.mediatypes) {\n if (acceptstring !== '') {\n acceptstring += ', ';\n }\n acceptstring += mediaType;\n for (let property in this.mediatypes[mediaType]) {\n acceptstring += ';' + property + '=' + this.mediatypes[mediaType][property];\n }\n }\n return acceptstring;\n }\n // var updatesVia = new $rdf.UpdatesVia(this) // Subscribe to headers\n // @@@@@@@@ This is turned off because it causes a websocket to be set up for ANY fetch\n // whether we want to track it ot not. including ontologies loaed though the XSSproxy\n}\n_defineProperty(Fetcher, \"HANDLERS\", void 0);\n_defineProperty(Fetcher, \"CONTENT_TYPE_BY_EXT\", void 0);\n// TODO: Document this\n_defineProperty(Fetcher, \"crossSiteProxyTemplate\", void 0);\nFetcher.HANDLERS = defaultHandlers;\nFetcher.CONTENT_TYPE_BY_EXT = CONTENT_TYPE_BY_EXT;","export default (function () {\n return {\n parseJSON: function (data, source, store) {\n var subject, predicate, object;\n var bnodes = {};\n var why = store.sym(source);\n for (var x in data) {\n if (x.indexOf('_:') === 0) {\n if (bnodes[x]) {\n subject = bnodes[x];\n } else {\n subject = store.bnode(x);\n bnodes[x] = subject;\n }\n } else {\n subject = store.sym(x);\n }\n var preds = data[x];\n for (var y in preds) {\n var objects = preds[y];\n predicate = store.sym(y);\n for (var z in objects) {\n var obj = objects[z];\n if (obj.type === 'uri') {\n object = store.sym(obj.value);\n store.add(subject, predicate, object, why);\n } else if (obj.type === 'BlankNode') {\n if (bnodes[obj.value]) {\n object = bnodes[obj.value];\n } else {\n object = store.bnode(obj.value);\n bnodes[obj.value] = object;\n }\n store.add(subject, predicate, object, why);\n } else if (obj.type === 'Literal') {\n // var datatype\n if (obj.datatype) {\n object = store.literal(obj.value, undefined, store.sym(obj.datatype));\n } else if (obj.lang) {\n object = store.literal(obj.value, obj.lang);\n } else {\n object = store.literal(obj.value);\n }\n store.add(subject, predicate, object, why);\n } else {\n throw new Error('error: unexpected termtype: ' + z.type);\n }\n }\n }\n }\n }\n };\n})();","import log from './log';\nexport default function queryToSPARQL(query) {\n var indent = 0;\n function getSelect(query) {\n var str = addIndent() + 'SELECT ';\n for (var i = 0; i < query.vars.length; i++) {\n str += query.vars[i] + ' ';\n }\n str += '\\n';\n return str;\n }\n function getPattern(pat) {\n var str = '';\n var st = pat.statements;\n for (var x in st) {\n log.debug('Found statement: ' + st);\n str += addIndent() + st[x] + '\\n';\n }\n return str;\n }\n function getConstraints(pat) {\n var str = '';\n for (var v in pat.constraints) {\n var foo = pat.constraints[v];\n str += addIndent() + 'FILTER ( ' + foo.describe(v) + ' ) ' + '\\n';\n }\n return str;\n }\n function getOptionals(pat) {\n var str = '';\n for (var x = 0; x < pat.optional.length; x++) {\n // alert(pat.optional.termType)\n log.debug('Found optional query');\n str += addIndent() + 'OPTIONAL { ' + '\\n';\n indent++;\n str += getPattern(pat.optional[x]);\n str += getConstraints(pat.optional[x]);\n str += getOptionals(pat.optional[x]);\n indent--;\n str += addIndent() + '}' + '\\n';\n }\n return str;\n }\n function getWhere(pat) {\n var str = addIndent() + 'WHERE \\n' + '{ \\n';\n indent++;\n str += getPattern(pat);\n str += getConstraints(pat);\n str += getOptionals(pat);\n indent--;\n str += '}';\n return str;\n }\n function addIndent() {\n var str = '';\n for (var i = 0; i < indent; i++) {\n str += ' ';\n }\n return str;\n }\n function getSPARQL(query) {\n return getSelect(query) + getWhere(query.pat);\n }\n return getSPARQL(query);\n}","// Converting between SPARQL queries and the $rdf query API\n/*\n\nfunction SQuery () {\n this.terms = []\n return this\n}\n\nSTerm.prototype.toString = STerm.val\nSQuery.prototype.add = function (str) {this.terms.push()}*/\n\nimport log from './log';\nimport { Query } from './query';\n\n/**\n * @SPARQL: SPARQL text that is converted to a query object which is returned.\n * @testMode: testing flag. Prevents loading of sources.\n */\nexport default function SPARQLToQuery(SPARQL, testMode, kb) {\n // AJAR_ClearTable()\n var variableHash = [];\n function makeVar(name) {\n if (variableHash[name]) {\n return variableHash[name];\n }\n var newVar = kb.variable(name);\n variableHash[name] = newVar;\n return newVar;\n }\n\n // term type functions\n function isRealText(term) {\n return typeof term === 'string' && term.match(/[^ \\n\\t]/);\n }\n function isVar(term) {\n return typeof term === 'string' && term.match(/^[\\?\\$]/);\n }\n function fixSymbolBrackets(term) {\n if (typeof term === 'string') {\n return term.replace(/^&lt;/, '<').replace(/&gt;$/, '>');\n } else {\n return term;\n }\n }\n function isSymbol(term) {\n return typeof term === 'string' && term.match(/^<[^>]*>$/);\n }\n function isBnode(term) {\n return typeof term === 'string' && (term.match(/^_:/) || term.match(/^$/));\n }\n function isPrefix(term) {\n return typeof term === 'string' && term.match(/:$/);\n }\n function isPrefixedSymbol(term) {\n return typeof term === 'string' && term.match(/^:|^[^_][^:]*:/);\n }\n function getPrefix(term) {\n var a = term.split(':');\n return a[0];\n }\n function getSuffix(term) {\n var a = term.split(':');\n return a[1];\n }\n function removeBrackets(term) {\n if (isSymbol(term)) {\n return term.slice(1, term.length - 1);\n } else {\n return term;\n }\n }\n // takes a string and returns an array of strings and Literals in the place of literals\n function parseLiterals(str) {\n // var sin = (str.indexOf(/[ \\n]\\'/)==-1)?null:str.indexOf(/[ \\n]\\'/), doub = (str.indexOf(/[ \\n]\\\"/)==-1)?null:str.indexOf(/[ \\n]\\\"/)\n var sin = str.indexOf(\"'\") === -1 ? null : str.indexOf(\"'\");\n var doub = str.indexOf('\"') === -1 ? null : str.indexOf('\"');\n // alert(\"S: \"+sin+\" D: \"+doub)\n if (!sin && !doub) {\n var a = new Array(1);\n a[0] = str;\n return a;\n }\n var res = new Array(2);\n var br;\n var ind;\n if (!sin || doub && doub < sin) {\n br = '\"';\n ind = doub;\n } else if (!doub || sin && sin < doub) {\n br = \"'\";\n ind = sin;\n } else {\n log.error('SQARQL QUERY OOPS!');\n return res;\n }\n res[0] = str.slice(0, ind);\n var end = str.slice(ind + 1).indexOf(br);\n if (end === -1) {\n log.error('SPARQL parsing error: no matching parentheses in literal ' + str);\n return str;\n }\n // alert(str.slice(end + ind + 2).match(/^\\^\\^/))\n var end2;\n if (str.slice(end + ind + 2).match(/^\\^\\^/)) {\n end2 = str.slice(end + ind + 2).indexOf(' ');\n // alert(end2)\n res[1] = kb.literal(str.slice(ind + 1, ind + 1 + end), kb.sym(removeBrackets(str.slice(ind + 4 + end, ind + 2 + end + end2))));\n // alert(res[1].datatype.uri)\n res = res.concat(parseLiterals(str.slice(end + ind + 3 + end2)));\n } else if (str.slice(end + ind + 2).match(/^@/)) {\n end2 = str.slice(end + ind + 2).indexOf(' ');\n // alert(end2)\n res[1] = kb.literal(str.slice(ind + 1, ind + 1 + end), str.slice(ind + 3 + end, ind + 2 + end + end2), null);\n // alert(res[1].datatype.uri)\n res = res.concat(parseLiterals(str.slice(end + ind + 2 + end2)));\n } else {\n res[1] = kb.literal(str.slice(ind + 1, ind + 1 + end));\n log.info('Literal found: ' + res[1]);\n res = res.concat(parseLiterals(str.slice(end + ind + 2))); // finds any other literals\n }\n return res;\n }\n function spaceDelimit(str) {\n str = str.replace(/\\(/g, ' ( ').replace(/\\)/g, ' ) ').replace(/</g, ' <').replace(/>/g, '> ').replace(/{/g, ' { ').replace(/}/g, ' } ').replace(/[\\t\\n\\r]/g, ' ').replace(/; /g, ' ; ').replace(/\\. /g, ' . ').replace(/, /g, ' , ');\n log.info('New str into spaceDelimit: \\n' + str);\n var res = [];\n var br = str.split(' ');\n for (var x in br) {\n if (isRealText(br[x])) {\n res = res.concat(br[x]);\n }\n }\n return res;\n }\n function replaceKeywords(input) {\n var strarr = input;\n for (var x = 0; x < strarr.length; x++) {\n if (strarr[x] === 'a') {\n strarr[x] = '<http://www.w3.org/1999/02/22-rdf-syntax-ns#type>';\n }\n if (strarr[x] === 'is' && strarr[x + 2] === 'of') {\n strarr.splice(x, 1);\n strarr.splice(x + 1, 1);\n var s = strarr[x - 1];\n strarr[x - 1] = strarr[x + 1];\n strarr[x + 1] = s;\n }\n }\n return strarr;\n }\n function toTerms(input) {\n var res = [];\n for (var x = 0; x < input.length; x++) {\n if (typeof input[x] !== 'string') {\n res[x] = input[x];\n continue;\n }\n input[x] = fixSymbolBrackets(input[x]);\n if (isVar(input[x])) {\n res[x] = makeVar(input[x].slice(1));\n } else if (isBnode(input[x])) {\n log.info(input[x] + ' was identified as a bnode.');\n res[x] = kb.bnode();\n } else if (isSymbol(input[x])) {\n log.info(input[x] + ' was identified as a symbol.');\n res[x] = kb.sym(removeBrackets(input[x]));\n } else if (isPrefixedSymbol(input[x])) {\n log.info(input[x] + ' was identified as a prefixed symbol');\n if (prefixes[getPrefix(input[x])]) {\n res[x] = kb.sym(input[x] = prefixes[getPrefix(input[x])] + getSuffix(input[x]));\n } else {\n log.error('SPARQL error: ' + input[x] + ' with prefix ' + getPrefix(input[x]) + ' does not have a correct prefix entry.');\n res[x] = input[x];\n }\n } else {\n res[x] = input[x];\n }\n }\n return res;\n }\n function tokenize(str) {\n var token1 = parseLiterals(str);\n var token2 = [];\n for (var x in token1) {\n if (typeof token1[x] === 'string') {\n token2 = token2.concat(spaceDelimit(token1[x]));\n } else {\n token2 = token2.concat(token1[x]);\n }\n }\n token2 = replaceKeywords(token2);\n log.info('SPARQL Tokens: ' + token2);\n return token2;\n }\n\n // CASE-INSENSITIVE\n function arrayIndexOf(str, arr) {\n for (var i = 0; i < arr.length; i++) {\n if (typeof arr[i] !== 'string') {\n continue;\n }\n if (arr[i].toLowerCase() === str.toLowerCase()) {\n return i;\n }\n }\n // log.warn(\"No instance of \"+str+\" in array \"+arr)\n return null;\n }\n\n // CASE-INSENSITIVE\n function arrayIndicesOf(str, arr) {\n var ind = [];\n for (var i = 0; i < arr.length; i++) {\n if (typeof arr[i] !== 'string') {\n continue;\n }\n if (arr[i].toLowerCase() === str.toLowerCase()) {\n ind.push(i);\n }\n }\n return ind;\n }\n function setVars(input, query) {\n log.info('SPARQL vars: ' + input);\n for (var x in input) {\n if (isVar(input[x])) {\n log.info('Added ' + input[x] + ' to query variables from SPARQL');\n var v = makeVar(input[x].slice(1));\n query.vars.push(v);\n v.label = input[x].slice(1);\n } else {\n log.warn('Incorrect SPARQL variable in SELECT: ' + input[x]);\n }\n }\n }\n function getPrefixDeclarations(input) {\n var prefInd = arrayIndicesOf('PREFIX', input);\n var res = [];\n for (var i in prefInd) {\n var a = input[prefInd[i] + 1];\n var b = input[prefInd[i] + 2];\n if (!isPrefix(a)) {\n log.error('Invalid SPARQL prefix: ' + a);\n } else if (!isSymbol(b)) {\n log.error('Invalid SPARQL symbol: ' + b);\n } else {\n log.info('Prefix found: ' + a + ' -> ' + b);\n var pref = getPrefix(a);\n var symbol = removeBrackets(b);\n res[pref] = symbol;\n }\n }\n return res;\n }\n function getMatchingBracket(arr, open, close) {\n log.info('Looking for a close bracket of type ' + close + ' in ' + arr);\n var index = 0;\n for (var i = 0; i < arr.length; i++) {\n if (arr[i] === open) {\n index++;\n }\n if (arr[i] === close) {\n index--;\n }\n if (index < 0) {\n return i;\n }\n }\n log.error('Statement had no close parenthesis in SPARQL query');\n return 0;\n }\n function constraintGreaterThan(value) {\n this.describe = function (varstr) {\n return varstr + ' > ' + value.toNT();\n };\n this.test = function (term) {\n if (term.value.match(/[0-9]+(\\.[0-9]+)?([eE][+-]?[0-9]+)?/)) {\n return parseFloat(term.value) > parseFloat(value);\n } else {\n return term.toNT() > value.toNT();\n }\n };\n return this;\n }\n function constraintLessThan(value) {\n // this is not the recommended usage. Should only work on literal, numeric, dateTime\n this.describe = function (varstr) {\n return varstr + ' < ' + value.toNT();\n };\n this.test = function (term) {\n // this.describe = function (varstr) { return varstr + \" < \"+value }\n if (term.value.match(/[0-9]+(\\.[0-9]+)?([eE][+-]?[0-9]+)?/)) {\n return parseFloat(term.value) < parseFloat(value);\n } else {\n return term.toNT() < value.toNT();\n }\n };\n return this;\n }\n // This should only work on literals but doesn't.\n function ConstraintEqualTo(value) {\n this.describe = function (varstr) {\n return varstr + ' = ' + value.toNT();\n };\n this.test = function (term) {\n return value.equals(term);\n };\n return this;\n }\n\n // value must be a literal\n function ConstraintRegexp(value) {\n this.describe = function (varstr) {\n return \"REGEXP( '\" + value + \"' , \" + varstr + ' )';\n };\n this.test = function (term) {\n var str = value;\n // str = str.replace(/^//,\"\").replace(//$/,\"\")\n var rg = new RegExp(str);\n if (term.value) {\n return rg.test(term.value);\n } else {\n return false;\n }\n };\n }\n function setConstraint(input, pat) {\n if (input.length === 3 && input[0].termType === 'Variable' && (input[2].termType === 'NamedNode' || input[2].termType === 'Literal')) {\n if (input[1] === '=') {\n log.debug('Constraint added: ' + input);\n pat.constraints[input[0]] = new ConstraintEqualTo(input[2]);\n } else if (input[1] === '>') {\n log.debug('Constraint added: ' + input);\n pat.constraints[input[0]] = new ConstraintEqualTo(input[2]);\n } else if (input[1] === '<') {\n log.debug('Constraint added: ' + input);\n pat.constraints[input[0]] = new ConstraintEqualTo(input[2]);\n } else {\n log.warn(\"I don't know how to handle the constraint: \" + input);\n }\n } else if (input.length === 6 && typeof input[0] === 'string' && input[0].toLowerCase() === 'regexp' && input[1] === '(' && input[5] === ')' && input[3] === ',' && input[4].termType === 'Variable' && input[2].termType === 'Literal') {\n log.debug('Constraint added: ' + input);\n pat.constraints[input[4]] = new ConstraintRegexp(input[2].value);\n }\n // log.warn(\"I don't know how to handle the constraint: \"+input)\n // alert(\"length: \"+input.length+\" input 0 type: \"+input[0].termType+\" input 1: \"+input[1]+\" input[2] type: \"+input[2].termType)\n }\n function setOptional(terms, pat) {\n log.debug('Optional query: ' + terms + ' not yet implemented.');\n var opt = kb.formula();\n setWhere(terms, opt);\n pat.optional.push(opt);\n }\n function setWhere(input, pat) {\n var terms = toTerms(input);\n var end;\n log.debug('WHERE: ' + terms);\n var opt;\n // var opt = arrayIndicesOf(\"OPTIONAL\",terms)\n while (arrayIndexOf('OPTIONAL', terms)) {\n opt = arrayIndexOf('OPTIONAL', terms);\n log.debug('OPT: ' + opt + ' ' + terms[opt] + ' in ' + terms);\n if (terms[opt + 1] !== '{') {\n log.warn('Bad optional opening bracket in word ' + opt);\n }\n end = getMatchingBracket(terms.slice(opt + 2), '{', '}');\n if (end === -1) {\n log.error('No matching bracket in word ' + opt);\n } else {\n setOptional(terms.slice(opt + 2, opt + 2 + end), pat);\n // alert(pat.statements[0].toNT())\n opt = arrayIndexOf('OPTIONAL', terms);\n end = getMatchingBracket(terms.slice(opt + 2), '{', '}');\n terms.splice(opt, end + 3);\n }\n }\n log.debug('WHERE after optionals: ' + terms);\n while (arrayIndexOf('FILTER', terms)) {\n var filt = arrayIndexOf('FILTER', terms);\n if (terms[filt + 1] !== '(') {\n log.warn('Bad filter opening bracket in word ' + filt);\n }\n end = getMatchingBracket(terms.slice(filt + 2), '(', ')');\n if (end === -1) {\n log.error('No matching bracket in word ' + filt);\n } else {\n setConstraint(terms.slice(filt + 2, filt + 2 + end), pat);\n filt = arrayIndexOf('FILTER', terms);\n end = getMatchingBracket(terms.slice(filt + 2), '(', ')');\n terms.splice(filt, end + 3);\n }\n }\n log.debug('WHERE after filters and optionals: ' + terms);\n extractStatements(terms, pat);\n }\n function extractStatements(terms, formula) {\n var arrayZero = new Array(1);\n arrayZero[0] = -1; // this is just to add the beginning of the where to the periods index.\n var per = arrayZero.concat(arrayIndicesOf('.', terms));\n var stat = [];\n for (var x = 0; x < per.length - 1; x++) {\n stat[x] = terms.slice(per[x] + 1, per[x + 1]);\n }\n // Now it's in an array of statements\n for (x in stat) {\n // THIS MUST BE CHANGED FOR COMMA, SEMICOLON\n log.info('s+p+o ' + x + ' = ' + stat[x]);\n var subj = stat[x][0];\n stat[x].splice(0, 1);\n var sem = arrayZero.concat(arrayIndicesOf(';', stat[x]));\n sem.push(stat[x].length);\n var stat2 = [];\n for (var y = 0; y < sem.length - 1; y++) {\n stat2[y] = stat[x].slice(sem[y] + 1, sem[y + 1]);\n }\n for (x in stat2) {\n log.info('p+o ' + x + ' = ' + stat[x]);\n var pred = stat2[x][0];\n stat2[x].splice(0, 1);\n var com = arrayZero.concat(arrayIndicesOf(',', stat2[x]));\n com.push(stat2[x].length);\n var stat3 = [];\n for (y = 0; y < com.length - 1; y++) {\n stat3[y] = stat2[x].slice(com[y] + 1, com[y + 1]);\n }\n for (x in stat3) {\n var obj = stat3[x][0];\n log.info('Subj=' + subj + ' Pred=' + pred + ' Obj=' + obj);\n formula.add(subj, pred, obj);\n }\n }\n }\n }\n\n // ******************************* Body of SPARQLToQuery ***************************//\n log.info('SPARQL input: \\n' + SPARQL);\n var q = new Query();\n var sp = tokenize(SPARQL); // first tokenize everything\n var prefixes = getPrefixDeclarations(sp);\n if (!prefixes.rdf) {\n prefixes.rdf = 'http://www.w3.org/1999/02/22-rdf-syntax-ns#';\n }\n if (!prefixes.rdfs) {\n prefixes.rdfs = 'http://www.w3.org/2000/01/rdf-schema#';\n }\n var selectLoc = arrayIndexOf('SELECT', sp);\n var whereLoc = arrayIndexOf('WHERE', sp);\n if (selectLoc < 0 || whereLoc < 0 || selectLoc > whereLoc) {\n log.error('Invalid or nonexistent SELECT and WHERE tags in SPARQL query');\n return false;\n }\n setVars(sp.slice(selectLoc + 1, whereLoc), q);\n setWhere(sp.slice(whereLoc + 2, sp.length - 1), q.pat);\n if (testMode) {\n return q;\n }\n for (var x in q.pat.statements) {\n var st = q.pat.statements[x];\n if (st.subject.termType === 'NamedNode') {\n if (kb.fetcher) {\n kb.fetcher.lookUpThing(st.subject, 'sparql:' + st.subject);\n }\n }\n if (st.object.termType === 'NamedNode') {\n if (kb.fetcher) {\n kb.fetcher.lookUpThing(st.object, 'sparql:' + st.object);\n }\n }\n }\n // alert(q.pat)\n return q;\n // checkVars()\n // *******************************************************************//\n}","import _defineProperty from \"@babel/runtime/helpers/defineProperty\";\n/* @file Update Manager Class\n**\n** 2007-07-15 original SPARQL Update module by Joe Presbrey <presbrey@mit.edu>\n** 2010-08-08 TimBL folded in Kenny's WEBDAV\n** 2010-12-07 TimBL added local file write code\n*/\nimport IndexedFormula from './store';\nimport { docpart, join as uriJoin } from './uri';\nimport Fetcher from './fetcher';\nimport Namespace from './namespace';\nimport Serializer from './serializer';\nimport { isBlankNode, isStore } from './utils/terms';\nimport * as Util from './utils-js';\nimport { termValue } from './utils/termValue';\n/**\n* The UpdateManager is a helper object for a store.\n* Just as a Fetcher provides the store with the ability to read and write,\n* the Update Manager provides functionality for making small patches in real time,\n* and also looking out for concurrent updates from other agents\n*/\nexport default class UpdateManager {\n /**\n * @param store - The quadstore to store data and metadata. Created if not passed.\n */\n constructor(store) {\n _defineProperty(this, \"store\", void 0);\n _defineProperty(this, \"ifps\", void 0);\n _defineProperty(this, \"fps\", void 0);\n /** Index of objects for coordinating incoming and outgoing patches */\n _defineProperty(this, \"patchControl\", void 0);\n /** Object of namespaces */\n _defineProperty(this, \"ns\", void 0);\n store = store || new IndexedFormula();\n if (store.updater) {\n throw new Error(\"You can't have two UpdateManagers for the same store\");\n }\n if (!store.fetcher) {\n store.fetcher = new Fetcher(store);\n }\n this.store = store;\n store.updater = this;\n this.ifps = {};\n this.fps = {};\n this.ns = {};\n this.ns.link = Namespace('http://www.w3.org/2007/ont/link#');\n this.ns.http = Namespace('http://www.w3.org/2007/ont/http#');\n this.ns.httph = Namespace('http://www.w3.org/2007/ont/httph#');\n this.ns.ldp = Namespace('http://www.w3.org/ns/ldp#');\n this.ns.rdf = Namespace('http://www.w3.org/1999/02/22-rdf-syntax-ns#');\n this.ns.rdfs = Namespace('http://www.w3.org/2000/01/rdf-schema#');\n this.ns.rdf = Namespace('http://www.w3.org/1999/02/22-rdf-syntax-ns#');\n this.ns.owl = Namespace('http://www.w3.org/2002/07/owl#');\n this.patchControl = [];\n }\n patchControlFor(doc) {\n if (!this.patchControl[doc.value]) {\n this.patchControl[doc.value] = [];\n }\n return this.patchControl[doc.value];\n }\n isHttpUri(uri) {\n return uri.slice(0, 4) === 'http';\n }\n\n /** Remove from the store HTTP authorization metadata\n * The editable function below relies on copies we have in the store\n * of the results of previous HTTP transactions. However, when\n * the user logs in, then that data misrepresents what would happen\n * if the user tried again.\n */\n flagAuthorizationMetadata(kb) {\n if (!kb) {\n kb = this.store;\n }\n const meta = kb.fetcher?.appNode;\n const requests = kb.statementsMatching(undefined, this.ns.link('requestedURI'), undefined, meta).map(st => st.subject);\n for (const request of requests) {\n const response = kb.any(request, this.ns.link('response'), null, meta);\n if (response != undefined) {\n // ts\n kb.add(response, this.ns.link('outOfDate'), true, meta); // @@ Boolean is fine - fix types\n }\n }\n }\n\n /**\n * Tests whether a file is editable.\n * If the file has a specific annotation that it is machine written,\n * for safety, it is editable (this doesn't actually check for write access)\n * If the file has wac-allow and accept patch headers, those are respected.\n * and local write access is determined by those headers.\n * This async version not only looks at past HTTP requests, it also makes new ones if necessary.\n *\n * @returns The method string N3PATCH or SPARQL or DAV or\n * LOCALFILE or false if known, undefined if not known.\n */\n async checkEditable(uri, kb) {\n if (!uri) {\n return false; // Eg subject is bnode, no known doc to write to\n }\n if (!kb) {\n kb = this.store;\n }\n const initial = this.editable(uri, kb);\n if (initial !== undefined) {\n return initial;\n }\n await kb.fetcher?.load(uri);\n const final = this.editable(uri, kb);\n // console.log(`Loaded ${uri} just to check editable, result: ${final}.`)\n return final;\n }\n /**\n * Tests whether a file is editable.\n * If the file has a specific annotation that it is machine written,\n * for safety, it is editable (this doesn't actually check for write access)\n * If the file has wac-allow and accept patch headers, those are respected.\n * and local write access is determined by those headers.\n * This synchronous version only looks at past HTTP requests, does not make new ones.\n *\n * @returns The method string SPARQL or DAV or\n * LOCALFILE or false if known, undefined if not known.\n */\n editable(uri, kb) {\n if (!uri) {\n return false; // Eg subject is bnode, no known doc to write to\n }\n if (!kb) {\n kb = this.store;\n }\n uri = termValue(uri);\n if (!this.isHttpUri(uri)) {\n if (kb.holds(kb.rdfFactory.namedNode(uri), kb.rdfFactory.namedNode('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), kb.rdfFactory.namedNode('http://www.w3.org/2007/ont/link#MachineEditableDocument'))) {\n return 'LOCALFILE';\n }\n }\n var request;\n var definitive = false;\n const meta = kb.fetcher?.appNode;\n // const kb = s\n\n // @ts-ignore passes a string to kb.each, which expects a term. Should this work?\n var requests = kb.each(undefined, this.ns.link('requestedURI'), docpart(uri), meta);\n var method;\n for (var r = 0; r < requests.length; r++) {\n request = requests[r];\n if (request !== undefined) {\n const response = kb.any(request, this.ns.link('response'), null, meta);\n if (response !== undefined) {\n // ts\n\n const outOfDate = kb.anyJS(response, this.ns.link('outOfDate'), null, meta);\n if (outOfDate) continue;\n var wacAllow = kb.anyValue(response, this.ns.httph('wac-allow'));\n if (wacAllow) {\n for (var bit of wacAllow.split(',')) {\n var lr = bit.split('=');\n if (lr[0].includes('user') && !lr[1].includes('write') && !lr[1].includes('append')) {\n // console.log(' editable? excluded by WAC-Allow: ', wacAllow)\n return false;\n }\n }\n }\n var acceptPatch = kb.each(response, this.ns.httph('accept-patch'));\n if (acceptPatch.length) {\n for (let i = 0; i < acceptPatch.length; i++) {\n method = acceptPatch[i].value.trim();\n // 2025/02 temporarily priorize SPARQL until N3PATCH spec revised on inserts with blankNodes\n if (method.indexOf('application/sparql-update') >= 0) return 'SPARQL';\n if (method.indexOf('application/sparql-update-single-match') >= 0) return 'SPARQL';\n if (method.indexOf('text/n3') >= 0) return 'N3PATCH';\n }\n }\n var authorVia = kb.each(response, this.ns.httph('ms-author-via'));\n if (authorVia.length) {\n for (let i = 0; i < authorVia.length; i++) {\n method = authorVia[i].value.trim();\n if (method.indexOf('SPARQL') >= 0) {\n return 'SPARQL';\n }\n if (method.indexOf('DAV') >= 0) {\n return 'DAV';\n }\n }\n }\n if (!this.isHttpUri(uri)) {\n if (!wacAllow) return false;else return 'LOCALFILE';\n }\n var status = kb.each(response, this.ns.http('status'));\n if (status.length) {\n for (let i = 0; i < status.length; i++) {\n // @ts-ignore since statuses should be TFTerms, this should always be false\n if (status[i] === 200 || status[i] === 404) {\n definitive = true;\n // return false // A definitive answer\n }\n }\n }\n } else {\n // console.log('UpdateManager.editable: No response for ' + uri + '\\n')\n }\n }\n }\n if (requests.length === 0) {\n // console.log('UpdateManager.editable: No request for ' + uri + '\\n')\n } else {\n if (definitive) {\n return false; // We have got a request and it did NOT say editable => not editable\n }\n }\n // console.log('UpdateManager.editable: inconclusive for ' + uri + '\\n')\n return undefined; // We don't know (yet) as we haven't had a response (yet)\n }\n anonymize(obj) {\n let anonymized = obj.toNT().substr(0, 2) === '_:' && this.mentioned(obj) ? '?' + obj.toNT().substr(2) : obj.toNT();\n return anonymized;\n }\n anonymizeNT(stmt) {\n return this.anonymize(stmt.subject) + ' ' + this.anonymize(stmt.predicate) + ' ' + this.anonymize(stmt.object) + ' .';\n }\n nTriples(stmt) {\n return `${stmt.subject.toNT()} ${stmt.predicate.toNT()} ${stmt.object.toNT()} .`;\n }\n\n /**\n * Returns a list of all bnodes occurring in a statement\n * @private\n */\n statementBnodes(st) {\n return [st.subject, st.predicate, st.object].filter(function (x) {\n return isBlankNode(x);\n });\n }\n\n /**\n * Returns a list of all bnodes occurring in a list of statements\n * @private\n */\n statementArrayBnodes(sts) {\n var bnodes = [];\n for (let i = 0; i < sts.length; i++) {\n bnodes = bnodes.concat(this.statementBnodes(sts[i]));\n }\n bnodes.sort(); // in place sort - result may have duplicates\n var bnodes2 = [];\n for (let j = 0; j < bnodes.length; j++) {\n if (j === 0 || !bnodes[j].equals(bnodes[j - 1])) {\n bnodes2.push(bnodes[j]);\n }\n }\n return bnodes2;\n }\n\n /**\n * Makes a cached list of [Inverse-]Functional properties\n * @private\n */\n cacheIfps() {\n this.ifps = {};\n var a = this.store.each(undefined, this.ns.rdf('type'), this.ns.owl('InverseFunctionalProperty'));\n for (let i = 0; i < a.length; i++) {\n this.ifps[a[i].value] = true;\n }\n this.fps = {};\n a = this.store.each(undefined, this.ns.rdf('type'), this.ns.owl('FunctionalProperty'));\n for (let i = 0; i < a.length; i++) {\n this.fps[a[i].value] = true;\n }\n }\n\n /**\n * Returns a context to bind a given node, up to a given depth\n * @private\n */\n bnodeContext2(x, source, depth) {\n // Return a list of statements which indirectly identify a node\n // Depth > 1 if try further indirection.\n // Return array of statements (possibly empty), or null if failure\n var sts = this.store.statementsMatching(undefined, undefined, x, source); // incoming links\n var y;\n var res;\n for (let i = 0; i < sts.length; i++) {\n if (this.fps[sts[i].predicate.value]) {\n y = sts[i].subject;\n if (!y.isBlank) {\n return [sts[i]];\n }\n if (depth) {\n res = this.bnodeContext2(y, source, depth - 1);\n if (res) {\n return res.concat([sts[i]]);\n }\n }\n }\n }\n // outgoing links\n sts = this.store.statementsMatching(x, undefined, undefined, source);\n for (let i = 0; i < sts.length; i++) {\n if (this.ifps[sts[i].predicate.value]) {\n y = sts[i].object;\n if (!y.isBlank) {\n return [sts[i]];\n }\n if (depth) {\n res = this.bnodeContext2(y, source, depth - 1);\n if (res) {\n return res.concat([sts[i]]);\n }\n }\n }\n }\n return null; // Failure\n }\n\n /**\n * Returns the smallest context to bind a given single bnode\n * @private\n */\n bnodeContext1(x, source) {\n // Return a list of statements which indirectly identify a node\n // Breadth-first\n for (var depth = 0; depth < 3; depth++) {\n // Try simple first\n var con = this.bnodeContext2(x, source, depth);\n if (con !== null) return con;\n }\n // If we can't guarantee unique with logic just send all info about node\n return this.store.connectedStatements(x, source); // was:\n // throw new Error('Unable to uniquely identify bnode: ' + x.toNT())\n }\n\n /**\n * @private\n */\n mentioned(x) {\n return this.store.statementsMatching(x, null, null, null).length !== 0 ||\n // Don't pin fresh bnodes\n this.store.statementsMatching(null, x).length !== 0 || this.store.statementsMatching(null, null, x).length !== 0;\n }\n\n /**\n * @private\n */\n bnodeContext(bnodes, doc) {\n var context = [];\n if (bnodes.length) {\n this.cacheIfps();\n for (let i = 0; i < bnodes.length; i++) {\n // Does this occur in old graph?\n var bnode = bnodes[i];\n if (!this.mentioned(bnode)) continue;\n context = context.concat(this.bnodeContext1(bnode, doc));\n }\n }\n return context;\n }\n\n /**\n * Returns the best context for a single statement\n * @private\n */\n statementContext(st) {\n var bnodes = this.statementBnodes(st);\n return this.bnodeContext(bnodes, st.graph);\n }\n\n /**\n * @private\n */\n contextWhere(context) {\n var updater = this;\n return !context || context.length === 0 ? '' : 'WHERE { ' + context.map(function (x) {\n return updater.anonymizeNT(x);\n }).join('\\n') + ' }\\n';\n }\n\n /**\n * @private\n */\n fire(uri, query, callbackFunction, options = {}) {\n return Promise.resolve().then(() => {\n if (!uri) {\n throw new Error('No URI given for remote editing operation: ' + query);\n }\n // console.log('UpdateManager: sending update to <' + uri + '>')\n\n options.noMeta = true;\n options.contentType = options.contentType || 'application/sparql-update';\n options.body = query;\n return this.store.fetcher.webOperation('PATCH', uri, options);\n }).then(response => {\n if (!response.ok) {\n let message = 'UpdateManager: update failed for <' + uri + '> status=' + response.status + ', ' + response.statusText + '\\n for query: ' + query;\n // console.log(message)\n throw new Error(message);\n }\n\n // console.log('UpdateManager: update Ok for <' + uri + '>')\n\n callbackFunction(uri, response.ok, response.responseText, response);\n }).catch(err => {\n callbackFunction(uri, false, err.message, err);\n });\n }\n\n // ARE THESE THREE FUNCTIONS USED? DEPRECATE?\n\n /** return a statemnet updating function\n *\n * This does NOT update the statement.\n * It returns an object which includes\n * function which can be used to change the object of the statement.\n */\n update_statement(statement) {\n if (statement && !statement.graph) {\n return;\n }\n var updater = this;\n var context = this.statementContext(statement);\n return {\n statement: statement ? [statement.subject, statement.predicate, statement.object, statement.graph] : undefined,\n statementNT: statement ? this.anonymizeNT(statement) : undefined,\n where: updater.contextWhere(context),\n set_object: function (obj, callbackFunction) {\n var query = this.where;\n query += 'DELETE DATA { ' + this.statementNT + ' } ;\\n';\n query += 'INSERT DATA { ' +\n // @ts-ignore `this` might refer to the wrong scope. Does this work?\n this.anonymize(this.statement[0]) + ' ' +\n // @ts-ignore\n this.anonymize(this.statement[1]) + ' ' +\n // @ts-ignore\n this.anonymize(obj) + ' ' + ' . }\\n';\n updater.fire(this.statement[3].value, query, callbackFunction);\n }\n };\n }\n insert_statement(st, callbackFunction) {\n var st0 = st instanceof Array ? st[0] : st;\n var query = this.contextWhere(this.statementContext(st0));\n if (st instanceof Array) {\n var stText = '';\n for (let i = 0; i < st.length; i++) stText += st[i] + '\\n';\n query += 'INSERT DATA { ' + stText + ' }\\n';\n } else {\n query += 'INSERT DATA { ' + this.anonymize(st.subject) + ' ' + this.anonymize(st.predicate) + ' ' + this.anonymize(st.object) + ' ' + ' . }\\n';\n }\n this.fire(st0.graph.value, query, callbackFunction);\n }\n delete_statement(st, callbackFunction) {\n var st0 = st instanceof Array ? st[0] : st;\n var query = this.contextWhere(this.statementContext(st0));\n if (st instanceof Array) {\n var stText = '';\n for (let i = 0; i < st.length; i++) stText += st[i] + '\\n';\n query += 'DELETE DATA { ' + stText + ' }\\n';\n } else {\n query += 'DELETE DATA { ' + this.anonymize(st.subject) + ' ' + this.anonymize(st.predicate) + ' ' + this.anonymize(st.object) + ' ' + ' . }\\n';\n }\n this.fire(st0.graph.value, query, callbackFunction);\n }\n\n /// //////////////////////\n\n /**\n * Requests a now or future action to refresh changes coming downstream\n * This is designed to allow the system to re-request the server version,\n * when a websocket has pinged to say there are changes.\n * If the websocket, by contrast, has sent a patch, then this may not be necessary.\n *\n * @param doc\n * @param action\n */\n requestDownstreamAction(doc, action) {\n var control = this.patchControlFor(doc);\n if (!control.pendingUpstream) {\n action(doc);\n } else {\n if (control.downstreamAction) {\n if ('' + control.downstreamAction !== '' + action) {\n // Kludge compare\n throw new Error(\"Can't wait for > 1 different downstream actions\");\n }\n } else {\n control.downstreamAction = action;\n }\n }\n }\n\n /**\n * We want to start counting websocket notifications\n * to distinguish the ones from others from our own.\n */\n clearUpstreamCount(doc) {\n var control = this.patchControlFor(doc);\n control.upstreamCount = 0;\n }\n getUpdatesVia(doc) {\n var linkHeaders = this.store.fetcher.getHeader(doc, 'updates-via');\n if (!linkHeaders || !linkHeaders.length) return null;\n return linkHeaders[0].trim();\n }\n addDownstreamChangeListener(doc, listener) {\n var control = this.patchControlFor(doc);\n if (!control.downstreamChangeListeners) {\n control.downstreamChangeListeners = [];\n }\n control.downstreamChangeListeners.push(listener);\n this.setRefreshHandler(doc, doc => {\n this.reloadAndSync(doc);\n });\n }\n reloadAndSync(doc) {\n var control = this.patchControlFor(doc);\n var updater = this;\n if (control.reloading) {\n // console.log(' Already reloading - note this load may be out of date')\n control.outOfDate = true;\n return; // once only needed @@ Not true, has changed again\n }\n control.reloading = true;\n var retryTimeout = 1000; // ms\n var tryReload = function () {\n // console.log('try reload - timeout = ' + retryTimeout)\n updater.reload(updater.store, doc, function (ok, message, response) {\n if (ok) {\n if (control.downstreamChangeListeners) {\n for (let i = 0; i < control.downstreamChangeListeners.length; i++) {\n // console.log(' Calling downstream listener ' + i)\n control.downstreamChangeListeners[i]();\n }\n }\n control.reloading = false;\n if (control.outOfDate) {\n // console.log(' Extra reload because of extra update.')\n control.outOfDate = false;\n tryReload();\n }\n } else {\n control.reloading = false;\n if (response && response.status === 0) {\n // console.log('Network error refreshing the data. Retrying in ' +\n // retryTimeout / 1000)\n control.reloading = true;\n retryTimeout = retryTimeout * 2;\n setTimeout(tryReload, retryTimeout);\n } else {\n // console.log('Error ' + (response as Response).status + 'refreshing the data:' +\n // message + '. Stopped' + doc)\n }\n }\n });\n };\n tryReload();\n }\n\n /**\n * Sets up websocket to listen on\n *\n * There is coordination between upstream changes and downstream ones\n * so that a reload is not done in the middle of an upstream patch.\n * If you use this API then you get called when a change happens, and you\n * have to reload the file yourself, and then refresh the UI.\n * Alternative is addDownstreamChangeListener(), where you do not\n * have to do the reload yourself. Do mot mix them.\n *\n * kb contains the HTTP metadata from previous operations\n *\n * @param doc\n * @param handler\n *\n * @returns {boolean}\n */\n setRefreshHandler(doc, handler) {\n let wssURI = this.getUpdatesVia(doc); // relative\n // var kb = this.store\n var theHandler = handler;\n var self = this;\n var updater = this;\n var retryTimeout = 1500; // *2 will be 3 Seconds, 6, 12, etc\n var retries = 0;\n if (!wssURI) {\n // console.log('Server does not support live updates through Updates-Via :-(')\n return false;\n }\n wssURI = uriJoin(wssURI, doc.value);\n const validWssURI = wssURI.replace(/^http:/, 'ws:').replace(/^https:/, 'wss:');\n // console.log('Web socket URI ' + wssURI)\n\n var openWebsocket = function () {\n // From https://github.com/solid/solid-spec#live-updates\n var socket;\n if (typeof WebSocket !== 'undefined') {\n socket = new WebSocket(validWssURI);\n } else if (typeof window !== 'undefined' && window.WebSocket) {\n socket = window.WebSocket(validWssURI);\n } else {\n // console.log('Live update disabled, as WebSocket not supported by platform :-(')\n return;\n }\n socket.onopen = function () {\n // console.log(' websocket open')\n retryTimeout = 1500; // reset timeout to fast on success\n this.send('sub ' + doc.value);\n if (retries) {\n // console.log('Web socket has been down, better check for any news.')\n updater.requestDownstreamAction(doc, theHandler);\n }\n };\n var control = self.patchControlFor(doc);\n control.upstreamCount = 0;\n socket.onerror = function onerror(err) {\n // console.log('Error on Websocket:', err)\n };\n\n // https://developer.mozilla.org/en-US/docs/Web/API/CloseEvent\n //\n // 1000 CLOSE_NORMAL Normal closure; the connection successfully completed whatever purpose for which it was created.\n // 1001 CLOSE_GOING_AWAY The endpoint is going away, either\n // because of a server failure or because the browser is navigating away from the page that opened the connection.\n // 1002 CLOSE_PROTOCOL_ERROR The endpoint is terminating the connection due to a protocol error.\n // 1003 CLOSE_UNSUPPORTED The connection is being terminated because the endpoint\n // received data of a type it cannot accept (for example, a text-only endpoint received binary data).\n // 1004 Reserved. A meaning might be defined in the future.\n // 1005 CLOSE_NO_STATUS Reserved. Indicates that no status code was provided even though one was expected.\n // 1006 CLOSE_ABNORMAL Reserved. Used to indicate that a connection was closed abnormally (\n //\n //\n socket.onclose = function (event) {\n // console.log('*** Websocket closed with code ' + event.code +\n // \", reason '\" + event.reason + \"' clean = \" + event.wasClean)\n retryTimeout *= 2;\n retries += 1;\n // console.log('Retrying in ' + retryTimeout + 'ms') // (ask user?)\n setTimeout(function () {\n // console.log('Trying websocket again')\n openWebsocket();\n }, retryTimeout);\n };\n socket.onmessage = function (msg) {\n if (msg.data && msg.data.slice(0, 3) === 'pub') {\n if ('upstreamCount' in control) {\n control.upstreamCount -= 1;\n if (control.upstreamCount >= 0) {\n // console.log('just an echo: ' + control.upstreamCount)\n return; // Just an echo\n }\n }\n // console.log('Assume a real downstream change: ' + control.upstreamCount + ' -> 0')\n control.upstreamCount = 0;\n self.requestDownstreamAction(doc, theHandler);\n }\n };\n }; // openWebsocket\n openWebsocket();\n return true;\n }\n\n /**\n * This high-level function updates the local store iff the web is changed successfully.\n * Deletions, insertions may be undefined or single statements or lists or formulae (may contain bnodes which can be indirectly identified by a where clause).\n * The `why` property of each statement must be the give the web document to be updated.\n * The statements to be deleted and inserted may span more than one web document.\n * @param deletions - Statement or statements to be deleted.\n * @param insertions - Statement or statements to be inserted.\n * @returns a promise\n */\n updateMany(deletions, insertions = []) {\n const docs = deletions.concat(insertions).map(st => st.why);\n const thisUpdater = this;\n const uniqueDocs = [];\n docs.forEach(doc => {\n if (!uniqueDocs.find(uniqueDoc => uniqueDoc.equals(doc))) uniqueDocs.push(doc);\n });\n const updates = uniqueDocs.map(doc => thisUpdater.update(deletions.filter(st => st.why.equals(doc)), insertions.filter(st => st.why.equals(doc))));\n if (updates.length > 1) {\n // console.log(`@@ updateMany to ${updates.length}: ${uniqueDocs}`)\n }\n return Promise.all(updates);\n }\n\n /**\n * @private\n * \n * This helper function constructs SPARQL Update query from resolved arguments.\n * \n * @param ds: deletions array.\n * @param is: insertions array.\n * @param bnodes_context: Additional context to uniquely identify any blank nodes.\n */\n constructSparqlUpdateQuery(ds, is, bnodes_context) {\n var whereClause = this.contextWhere(bnodes_context);\n var query = '';\n if (whereClause.length) {\n // Is there a WHERE clause?\n if (ds.length) {\n query += 'DELETE { ';\n for (let i = 0; i < ds.length; i++) {\n query += this.anonymizeNT(ds[i]) + '\\n';\n }\n query += ' }\\n';\n }\n if (is.length) {\n query += 'INSERT { ';\n for (let i = 0; i < is.length; i++) {\n query += this.anonymizeNT(is[i]) + '\\n';\n }\n query += ' }\\n';\n }\n query += whereClause;\n } else {\n // no where clause\n if (ds.length) {\n query += 'DELETE DATA { ';\n for (let i = 0; i < ds.length; i++) {\n query += this.anonymizeNT(ds[i]) + '\\n';\n }\n query += ' } \\n';\n }\n if (is.length) {\n if (ds.length) query += ' ; ';\n query += 'INSERT DATA { ';\n for (let i = 0; i < is.length; i++) {\n query += this.nTriples(is[i]) + '\\n';\n }\n query += ' }\\n';\n }\n }\n return query;\n }\n\n /**\n * @private\n * \n * This helper function constructs n3-patch query from resolved arguments.\n * \n * @param ds: deletions array.\n * @param is: insertions array.\n * @param bnodes_context: Additional context to uniquely identify any blanknodes.\n */\n constructN3PatchQuery(ds, is, bnodes_context) {\n var query = `\n@prefix solid: <http://www.w3.org/ns/solid/terms#>.\n@prefix ex: <http://www.example.org/terms#>.\n\n_:patch\n`;\n // If bnode context is non trivial, express it as ?conditions formula.\n if (bnodes_context && bnodes_context.length > 0) {\n query += `\n solid:where {\n ${bnodes_context.map(x => this.anonymizeNT(x)).join('\\n ')}\n };`;\n }\n if (ds.length > 0) {\n query += `\n solid:deletes {\n ${ds.map(x => this.anonymizeNT(x)).join('\\n ')}\n };`;\n }\n if (is.length > 0) {\n query += `\n solid:inserts {\n ${is.map(x => this.anonymizeNT(x)).join('\\n ')}\n };`;\n }\n query += \" a solid:InsertDeletePatch .\\n\";\n return query;\n }\n\n /**\n * This high-level function updates the local store if the web is changed successfully.\n * Deletions, insertions may be undefined or single statements or lists or formulae (may contain bnodes which can be indirectly identified by a where clause).\n * The `why` property of each statement must be the same and give the web document to be updated.\n * @param deletions - Statement or statements to be deleted.\n * @param insertions - Statement or statements to be inserted.\n * @param callback - called as callbackFunction(uri, success, errorbody)\n * OR returns a promise\n * @param options - Options for the fetch call\n */\n update(deletions, insertions, callback, secondTry, options = {}) {\n if (!callback) {\n var thisUpdater = this;\n return new Promise(function (resolve, reject) {\n // Promise version\n thisUpdater.update(deletions, insertions, function (uri, ok, errorBody) {\n if (!ok) {\n reject(new Error(errorBody));\n } else {\n resolve();\n }\n }, secondTry, options); // callbackFunction\n }); // promise\n } // if\n\n try {\n var kb = this.store;\n var ds = !deletions ? [] : isStore(deletions) ? deletions.statements : deletions instanceof Array ? deletions : [deletions];\n var is = !insertions ? [] : isStore(insertions) ? insertions.statements : insertions instanceof Array ? insertions : [insertions];\n if (!(ds instanceof Array)) {\n throw new Error('Type Error ' + typeof ds + ': ' + ds);\n }\n if (!(is instanceof Array)) {\n throw new Error('Type Error ' + typeof is + ': ' + is);\n }\n if (ds.length === 0 && is.length === 0) {\n return callback(null, true); // success -- nothing needed to be done.\n }\n var doc = ds.length ? ds[0].graph : is[0].graph;\n if (!doc) {\n let message = 'Error patching: statement does not specify which document to patch:' + ds[0] + ', ' + is[0];\n // console.log(message)\n throw new Error(message);\n }\n if (doc.termType !== 'NamedNode') {\n let message = 'Error patching: document not a NamedNode:' + ds[0] + ', ' + is[0];\n // console.log(message)\n throw new Error(message);\n }\n var control = this.patchControlFor(doc);\n var startTime = Date.now();\n var props = ['subject', 'predicate', 'object', 'why'];\n var verbs = ['insert', 'delete'];\n var clauses = {\n 'delete': ds,\n 'insert': is\n };\n verbs.map(function (verb) {\n clauses[verb].map(function (st) {\n if (!doc.equals(st.graph)) {\n throw new Error('update: destination ' + doc + ' inconsistent with delete quad ' + st.graph);\n }\n props.map(function (prop) {\n if (typeof st[prop] === 'undefined') {\n throw new Error('update: undefined ' + prop + ' of statement.');\n }\n });\n });\n });\n var protocol = this.editable(doc.value, kb);\n if (protocol === false) {\n throw new Error('Update: Can\\'t make changes in uneditable ' + doc);\n }\n if (protocol === undefined) {\n // Not enough metadata\n if (secondTry) {\n throw new Error('Update: Loaded ' + doc + \"but still can't figure out what editing protocol it supports.\");\n }\n // console.log(`Update: have not loaded ${doc} before: loading now...`);\n this.store.fetcher.load(doc).then(response => {\n this.update(deletions, insertions, callback, true, options);\n }, err => {\n if (err.response.status === 404) {\n // nonexistent files are fine\n this.update(deletions, insertions, callback, true, options);\n } else {\n throw new Error(`Update: Can't get updatability status ${doc} before patching: ${err}`);\n }\n });\n return;\n } else if (protocol.indexOf('SPARQL') >= 0 || protocol.indexOf('N3PATCH') >= 0) {\n var isSparql = protocol.indexOf('SPARQL') >= 0;\n var bnodes = [];\n // change ReadOnly type to Mutable type\n\n if (ds.length) bnodes = this.statementArrayBnodes(ds);\n if (is.length) bnodes = bnodes.concat(this.statementArrayBnodes(is));\n var context = this.bnodeContext(bnodes, doc);\n var query = isSparql ? this.constructSparqlUpdateQuery(ds, is, context) : this.constructN3PatchQuery(ds, is, context);\n options.contentType = isSparql ? 'application/sparql-update' : 'text/n3';\n\n // Track pending upstream patches until they have finished their callbackFunction\n control.pendingUpstream = control.pendingUpstream ? control.pendingUpstream + 1 : 1;\n if ('upstreamCount' in control) {\n control.upstreamCount += 1; // count changes we originated ourselves\n // console.log('upstream count up to : ' + control.upstreamCount)\n }\n this.fire(doc.value, query, (uri, success, body, response) => {\n response.elapsedTimeMs = Date.now() - startTime;\n /* console.log(' UpdateManager: Return ' +\n (success ? 'success ' : 'FAILURE ') + (response as Response).status +\n ' elapsed ' + (response as any).elapsedTimeMs + 'ms')\n */\n if (success) {\n try {\n kb.remove(ds);\n } catch (e) {\n success = false;\n body = 'Remote Ok BUT error deleting ' + ds.length + ' from store!!! ' + e;\n } // Add in any case -- help recover from weirdness??\n for (let i = 0; i < is.length; i++) {\n kb.add(is[i].subject, is[i].predicate, is[i].object, doc);\n }\n }\n callback(uri, success, body, response);\n control.pendingUpstream -= 1;\n // When upstream patches have been sent, reload state if downstream waiting\n if (control.pendingUpstream === 0 && control.downstreamAction) {\n var downstreamAction = control.downstreamAction;\n delete control.downstreamAction;\n // console.log('delayed downstream action:')\n downstreamAction(doc);\n }\n }, options);\n } else if (protocol.indexOf('DAV') >= 0) {\n this.updateDav(doc, ds, is, callback, options);\n } else {\n if (protocol.indexOf('LOCALFILE') >= 0) {\n try {\n this.updateLocalFile(doc, ds, is, callback, options);\n } catch (e) {\n callback(doc.value, false, 'Exception trying to write back file <' + doc.value + '>\\n'\n // + tabulator.Util.stackString(e))\n );\n }\n } else {\n throw new Error(\"Unhandled edit method: '\" + protocol + \"' for \" + doc);\n }\n }\n } catch (e) {\n callback(undefined, false, 'Exception in update: ' + e + '\\n' + Util.stackString(e));\n }\n }\n updateDav(doc, ds, is, callbackFunction, options = {}) {\n let kb = this.store;\n // The code below is derived from Kenny's UpdateCenter.js\n var request = kb.any(doc, this.ns.link('request'));\n if (!request) {\n throw new Error('No record of our HTTP GET request for document: ' + doc);\n } // should not happen\n var response = kb.any(request, this.ns.link('response'));\n if (!response) {\n return null; // throw \"No record HTTP GET response for document: \"+doc\n }\n var contentType = kb.the(response, this.ns.httph('content-type')).value;\n\n // prepare contents of revised document\n let newSts = kb.statementsMatching(undefined, undefined, undefined, doc).slice(); // copy!\n for (let i = 0; i < ds.length; i++) {\n Util.RDFArrayRemove(newSts, ds[i]);\n }\n for (let i = 0; i < is.length; i++) {\n newSts.push(is[i]);\n }\n const documentString = this.serialize(doc.value, newSts, contentType);\n\n // Write the new version back\n var candidateTarget = kb.the(response, this.ns.httph('content-location'));\n var targetURI;\n if (candidateTarget) {\n targetURI = uriJoin(candidateTarget.value, targetURI);\n }\n options.contentType = contentType;\n options.noMeta = true;\n options.body = documentString;\n return kb.fetcher.webOperation('PUT', targetURI, options).then(response => {\n if (!response.ok) {\n throw new Error(response.error);\n }\n for (let i = 0; i < ds.length; i++) {\n kb.remove(ds[i]);\n }\n for (let i = 0; i < is.length; i++) {\n kb.add(is[i].subject, is[i].predicate, is[i].object, doc);\n }\n callbackFunction(doc.value, response.ok, response.responseText, response);\n }).catch(err => {\n callbackFunction(doc.value, false, err.message, err);\n });\n }\n\n /**\n * Likely deprecated, since this lib no longer deals with browser extension\n *\n * @param doc\n * @param ds\n * @param is\n * @param callbackFunction\n * @param options\n */\n updateLocalFile(doc, ds, is, callbackFunction, options = {}) {\n const kb = this.store;\n // console.log('Writing back to local file\\n')\n\n // prepare contents of revised document\n let newSts = kb.statementsMatching(undefined, undefined, undefined, doc).slice(); // copy!\n\n for (let i = 0; i < ds.length; i++) {\n Util.RDFArrayRemove(newSts, ds[i]);\n }\n for (let i = 0; i < is.length; i++) {\n newSts.push(is[i]);\n }\n // serialize to the appropriate format\n var dot = doc.value.lastIndexOf('.');\n if (dot < 1) {\n throw new Error('Rewriting file: No filename extension: ' + doc.value);\n }\n var ext = doc.value.slice(dot + 1);\n let contentType = Fetcher.CONTENT_TYPE_BY_EXT[ext];\n if (!contentType) {\n throw new Error('File extension .' + ext + ' not supported for data write');\n }\n options.body = this.serialize(doc.value, newSts, contentType);\n options.contentType = contentType;\n kb.fetcher.webOperation('PUT', doc.value, options).then(response => {\n if (!response.ok) return callbackFunction(doc.value, false, response.error);\n for (let i = 0; i < ds.length; i++) {\n kb.remove(ds[i]);\n }\n for (let i = 0; i < is.length; i++) {\n kb.add(is[i].subject, is[i].predicate, is[i].object, doc);\n }\n callbackFunction(doc.value, true, ''); // success!\n });\n }\n\n /**\n * @throws {Error} On unsupported content type\n *\n * @returns {string}\n */\n serialize(uri, data, contentType) {\n const kb = this.store;\n let documentString;\n if (typeof data === 'string') {\n return data;\n }\n\n // serialize to the appropriate format\n var sz = Serializer(kb);\n sz.suggestNamespaces(kb.namespaces);\n sz.setBase(uri);\n switch (contentType) {\n case 'text/xml':\n case 'application/rdf+xml':\n documentString = sz.statementsToXML(data);\n break;\n case 'text/n3':\n case 'text/turtle':\n case 'application/x-turtle': // Legacy\n case 'application/n3':\n // Legacy\n documentString = sz.statementsToN3(data);\n break;\n default:\n throw new Error('Content-type ' + contentType + ' not supported for data serialization');\n }\n return documentString;\n }\n\n /**\n * This is suitable for an initial creation of a document.\n */\n put(doc, data, contentType, callback) {\n const kb = this.store;\n let documentString;\n return Promise.resolve().then(() => {\n documentString = this.serialize(doc.value, data, contentType);\n return kb.fetcher.webOperation('PUT', doc.value, {\n contentType,\n body: documentString\n });\n }).then(response => {\n if (!response.ok) {\n return callback(doc.value, response.ok, response.error, response);\n }\n delete kb.fetcher.nonexistent[doc.value];\n delete kb.fetcher.requested[doc.value]; // @@ could this mess with the requested state machine? if a fetch is in progress\n\n if (typeof data !== 'string') {\n data.map(st => {\n kb.addStatement(st);\n });\n }\n callback(doc.value, response.ok, '', response);\n }).catch(err => {\n callback(doc.value, false, err.message);\n });\n }\n\n /**\n * Reloads a document.\n *\n * Fast and cheap, no metadata. Measure times for the document.\n * Load it provisionally.\n * Don't delete the statements before the load, or it will leave a broken\n * document in the meantime.\n *\n * @param kb\n * @param doc {RDFlibNamedNode}\n * @param callbackFunction\n */\n reload(kb, doc, callbackFunction) {\n var startTime = Date.now();\n // force sets no-cache and\n const options = {\n force: true,\n noMeta: true,\n clearPreviousData: true\n };\n kb.fetcher.nowOrWhenFetched(doc.value, options, function (ok, body, response) {\n if (!ok) {\n // console.log(' ERROR reloading data: ' + body)\n callbackFunction(false, 'Error reloading data: ' + body, response);\n //@ts-ignore Where does onErrorWasCalled come from?\n } else if (response.onErrorWasCalled || response.status !== 200) {\n // console.log(' Non-HTTP error reloading data! onErrorWasCalled=' +\n //@ts-ignore Where does onErrorWasCalled come from?\n // response.onErrorWasCalled + ' status: ' + response.status)\n callbackFunction(false, 'Non-HTTP error reloading data: ' + body, response);\n } else {\n var elapsedTimeMs = Date.now() - startTime;\n if (!doc.reloadTimeTotal) doc.reloadTimeTotal = 0;\n if (!doc.reloadTimeCount) doc.reloadTimeCount = 0;\n doc.reloadTimeTotal += elapsedTimeMs;\n doc.reloadTimeCount += 1;\n\n // console.log(' Fetch took ' + elapsedTimeMs + 'ms, av. of ' +\n // doc.reloadTimeCount + ' = ' +\n // (doc.reloadTimeTotal / doc.reloadTimeCount) + 'ms.')\n\n callbackFunction(true);\n }\n });\n }\n}","import IndexedFormula from '../store';\nimport Fetcher from '../fetcher';\nimport ExtendedTermFactory from './extended-term-factory';\n/** Full RDFLib.js Data Factory */\nconst RDFlibDataFactory = {\n ...ExtendedTermFactory,\n /**\n * Creates a new fetcher\n * @param store - The store to use\n * @param options - The options\n */\n fetcher(store, options) {\n return new Fetcher(store, options);\n },\n /**\n * Creates a new graph (store)\n */\n graph(features = undefined, opts = undefined) {\n return new IndexedFormula(features, opts || {\n rdfFactory: ExtendedTermFactory\n });\n },\n /**\n * Creates a new literal node\n * @param val The lexical value\n * @param lang The language\n * @param dt The datatype\n */\n lit(val, lang, dt) {\n return this.literal('' + val, lang || dt);\n },\n /**\n * Creates a new statement\n * @param subject The subject\n * @param predicate The predicate\n * @param object The object\n * @param graph The containing graph\n */\n st(subject, predicate, object, graph) {\n return this.quad(subject, predicate, object, graph);\n }\n};\nexport default RDFlibDataFactory;","/*\n * Updates-Via\n */\nimport DataFactory from './factories/rdflib-data-factory';\nexport class UpdatesSocket {\n constructor(parent, via) {\n this.parent = parent;\n this.via = via;\n this.connected = false;\n this.pending = {};\n this.subscribed = {};\n this.socket = {};\n try {\n this.socket = new WebSocket(via);\n this.socket.onopen = this.onOpen;\n this.socket.onclose = this.onClose;\n this.socket.onmessage = this.onMessage;\n this.socket.onerror = this.onError;\n } catch (error) {\n this.onError(error);\n }\n }\n _decode(q) {\n var elt;\n var i;\n var k;\n var r;\n var ref;\n var ref1;\n var v;\n r = {};\n ref = function () {\n var j, len, ref, results;\n ref = q.split('&');\n results = [];\n for (j = 0, len = ref.length; j < len; j++) {\n elt = ref[j];\n results.push(elt.split('='));\n }\n return results;\n }();\n for (i in ref) {\n elt = ref[i];\n ref1 = [decodeURIComponent(elt[0]), decodeURIComponent(elt[1])];\n k = ref1[0];\n v = ref1[1];\n if (r[k] == null) {\n r[k] = [];\n }\n r[k].push(v);\n }\n return r;\n }\n _send(method, uri, data) {\n var base, message;\n message = [method, uri, data].join(' ');\n return typeof (base = this.socket).send === 'function' ? base.send(message) : void 0;\n }\n _subscribe(uri) {\n this._send('sub', uri, '');\n this.subscribed[uri] = true;\n return this.subscribed[uri];\n }\n onClose(e) {\n var uri;\n this.connected = false;\n for (uri in this.subscribed) {\n this.pending[uri] = true;\n }\n this.subscribed = {};\n return this.subscribed;\n }\n onError(e) {\n throw new Error('onError' + e);\n }\n onMessage(e) {\n var base, message;\n message = e.data.split(' ');\n if (message[0] === 'ping') {\n return typeof (base = this.socket).send === 'function' ? base.send('pong ' + message.slice(1).join(' ')) : void 0;\n } else if (message[0] === 'pub') {\n return this.parent.onUpdate(message[1], this._decode(message[2]));\n }\n }\n onOpen(e) {\n var results, uri;\n this.connected = true;\n results = [];\n for (uri in this.pending) {\n delete this.pending[uri];\n results.push(this._subscribe(uri));\n }\n return results;\n }\n subscribe(uri) {\n if (this.connected) {\n return this._subscribe(uri);\n } else {\n this.pending[uri] = true;\n return this.pending[uri];\n }\n }\n}\nexport class UpdatesVia {\n constructor(fetcher) {\n this.fetcher = fetcher;\n this.graph = {};\n this.via = {};\n this.fetcher.addCallback('headers', this.onHeaders);\n }\n onHeaders(d) {\n var etag, uri, via;\n if (d.headers == null) {\n return true;\n }\n if (typeof WebSocket === 'undefined' || WebSocket === null) {\n return true;\n }\n etag = d.headers['etag'];\n via = d.headers['updates-via'];\n uri = d.uri;\n if (etag && via) {\n this.graph[uri] = {\n etag: etag,\n via: via\n };\n this.register(via, uri);\n }\n return true;\n }\n onUpdate(uri, d) {\n return this.fetcher.refresh(DataFactory.namedNode(uri));\n }\n register(via, uri) {\n if (this.via[via] == null) {\n this.via[via] = new UpdatesSocket(this, via);\n }\n return this.via[via].subscribe(uri);\n }\n}","import _defineProperty from \"@babel/runtime/helpers/defineProperty\";\nimport BlankNode from './blank-node';\nimport Collection from './collection';\nimport Empty from './empty';\nimport Fetcher from './fetcher';\nimport Formula from './formula';\nimport Store from './store';\nimport jsonParser from './jsonparser';\nimport Literal from './literal';\nimport log from './log';\nimport N3Parser from './n3parser';\nimport NamedNode from './named-node';\nimport Namespace from './namespace';\nimport Node from './node';\nimport parse from './parse';\nimport { Query } from './query';\nimport queryToSPARQL from './query-to-sparql';\nimport RDFaProcessor from './rdfaparser';\nimport RDFParser from './rdfxmlparser';\nimport serialize from './serialize';\nimport Serializer from './serializer';\nimport SPARQLToQuery from './sparql-to-query';\nimport sparqlUpdateParser from './patch-parser';\nimport Statement from './statement';\nimport UpdateManager from './update-manager';\nimport { UpdatesSocket } from './updates-via';\nimport { UpdatesVia } from './updates-via';\nimport * as uri from './uri';\nimport * as Util from './utils-js';\nimport Variable from './variable';\nimport DataFactory from './factories/rdflib-data-factory';\n\n// Prepare bound versions of data factory methods for export\nconst boundDataFactory = {};\nfor (const name in DataFactory) {\n if (typeof DataFactory[name] === 'function') boundDataFactory[name] = DataFactory[name].bind(DataFactory);\n}\nconst {\n fetcher,\n graph,\n lit,\n st,\n namedNode,\n variable,\n blankNode,\n defaultGraph,\n literal,\n quad,\n triple\n} = boundDataFactory;\nconst formula = new Formula();\nconst fromNT = str => formula.fromNT(str);\nconst term = Node.fromValue;\n\n// TODO: this export is broken;\n// it exports the _current_ value of nextId, which is always 0\nconst NextId = BlankNode.nextId;\nexport * from './utils/terms';\nexport { BlankNode, Collection, DataFactory, Empty, Fetcher, Formula, Store, jsonParser, Literal, log, N3Parser, NamedNode, Namespace, Node, parse, Query, queryToSPARQL, RDFaProcessor, RDFParser, serialize, Serializer, SPARQLToQuery, sparqlUpdateParser, Statement, term, UpdateManager, UpdatesSocket, UpdatesVia, uri, Util, Variable, Store as IndexedFormula,\n// Alias\n\nNextId, fromNT, fetcher, graph, lit, st, namedNode as sym,\n// RDFJS DataFactory interface\nblankNode, defaultGraph, literal, namedNode, quad, triple, variable };\nexport { termValue } from './utils/termValue';\nexport class ConnectedStore extends Store {\n constructor(features) {\n super(features);\n _defineProperty(this, \"fetcher\", void 0);\n this.fetcher = new Fetcher(this, {});\n }\n}\nexport class LiveStore extends ConnectedStore {\n constructor(features) {\n super(features);\n _defineProperty(this, \"updater\", void 0);\n this.updater = new UpdateManager(this);\n }\n}","// Namespaces we commonly use and have common prefixes for around Solid\n\nimport solidNamespace from 'solid-namespace' // Delegate to this which takes RDFlib as param.\nimport * as $rdf from 'rdflib'\n\nexport default solidNamespace($rdf)\n","var crypto$1 = crypto;\nconst isCryptoKey = (key) => key instanceof CryptoKey;\n\nconst digest = async (algorithm, data) => {\n const subtleDigest = `SHA-${algorithm.slice(-3)}`;\n return new Uint8Array(await crypto$1.subtle.digest(subtleDigest, data));\n};\nvar digest$1 = digest;\n\nconst encoder = new TextEncoder();\nconst decoder = new TextDecoder();\nfunction concat(...buffers) {\n const size = buffers.reduce((acc, { length }) => acc + length, 0);\n const buf = new Uint8Array(size);\n let i = 0;\n for (const buffer of buffers) {\n buf.set(buffer, i);\n i += buffer.length;\n }\n return buf;\n}\n\nconst encodeBase64 = (input) => {\n let unencoded = input;\n if (typeof unencoded === 'string') {\n unencoded = encoder.encode(unencoded);\n }\n const CHUNK_SIZE = 0x8000;\n const arr = [];\n for (let i = 0; i < unencoded.length; i += CHUNK_SIZE) {\n arr.push(String.fromCharCode.apply(null, unencoded.subarray(i, i + CHUNK_SIZE)));\n }\n return btoa(arr.join(''));\n};\nconst encode = (input) => {\n return encodeBase64(input).replace(/=/g, '').replace(/\\+/g, '-').replace(/\\//g, '_');\n};\nconst decodeBase64 = (encoded) => {\n const binary = atob(encoded);\n const bytes = new Uint8Array(binary.length);\n for (let i = 0; i < binary.length; i++) {\n bytes[i] = binary.charCodeAt(i);\n }\n return bytes;\n};\nconst decode$1 = (input) => {\n let encoded = input;\n if (encoded instanceof Uint8Array) {\n encoded = decoder.decode(encoded);\n }\n encoded = encoded.replace(/-/g, '+').replace(/_/g, '/').replace(/\\s/g, '');\n try {\n return decodeBase64(encoded);\n }\n catch {\n throw new TypeError('The input to be decoded is not correctly encoded.');\n }\n};\n\nclass JOSEError extends Error {\n constructor(message, options) {\n super(message, options);\n this.code = 'ERR_JOSE_GENERIC';\n this.name = this.constructor.name;\n Error.captureStackTrace?.(this, this.constructor);\n }\n}\nJOSEError.code = 'ERR_JOSE_GENERIC';\nclass JWTClaimValidationFailed extends JOSEError {\n constructor(message, payload, claim = 'unspecified', reason = 'unspecified') {\n super(message, { cause: { claim, reason, payload } });\n this.code = 'ERR_JWT_CLAIM_VALIDATION_FAILED';\n this.claim = claim;\n this.reason = reason;\n this.payload = payload;\n }\n}\nJWTClaimValidationFailed.code = 'ERR_JWT_CLAIM_VALIDATION_FAILED';\nclass JWTExpired extends JOSEError {\n constructor(message, payload, claim = 'unspecified', reason = 'unspecified') {\n super(message, { cause: { claim, reason, payload } });\n this.code = 'ERR_JWT_EXPIRED';\n this.claim = claim;\n this.reason = reason;\n this.payload = payload;\n }\n}\nJWTExpired.code = 'ERR_JWT_EXPIRED';\nclass JOSEAlgNotAllowed extends JOSEError {\n constructor() {\n super(...arguments);\n this.code = 'ERR_JOSE_ALG_NOT_ALLOWED';\n }\n}\nJOSEAlgNotAllowed.code = 'ERR_JOSE_ALG_NOT_ALLOWED';\nclass JOSENotSupported extends JOSEError {\n constructor() {\n super(...arguments);\n this.code = 'ERR_JOSE_NOT_SUPPORTED';\n }\n}\nJOSENotSupported.code = 'ERR_JOSE_NOT_SUPPORTED';\nclass JWEDecryptionFailed extends JOSEError {\n constructor(message = 'decryption operation failed', options) {\n super(message, options);\n this.code = 'ERR_JWE_DECRYPTION_FAILED';\n }\n}\nJWEDecryptionFailed.code = 'ERR_JWE_DECRYPTION_FAILED';\nclass JWEInvalid extends JOSEError {\n constructor() {\n super(...arguments);\n this.code = 'ERR_JWE_INVALID';\n }\n}\nJWEInvalid.code = 'ERR_JWE_INVALID';\nclass JWSInvalid extends JOSEError {\n constructor() {\n super(...arguments);\n this.code = 'ERR_JWS_INVALID';\n }\n}\nJWSInvalid.code = 'ERR_JWS_INVALID';\nclass JWTInvalid extends JOSEError {\n constructor() {\n super(...arguments);\n this.code = 'ERR_JWT_INVALID';\n }\n}\nJWTInvalid.code = 'ERR_JWT_INVALID';\nclass JWKInvalid extends JOSEError {\n constructor() {\n super(...arguments);\n this.code = 'ERR_JWK_INVALID';\n }\n}\nJWKInvalid.code = 'ERR_JWK_INVALID';\nclass JWKSInvalid extends JOSEError {\n constructor() {\n super(...arguments);\n this.code = 'ERR_JWKS_INVALID';\n }\n}\nJWKSInvalid.code = 'ERR_JWKS_INVALID';\nclass JWKSNoMatchingKey extends JOSEError {\n constructor(message = 'no applicable key found in the JSON Web Key Set', options) {\n super(message, options);\n this.code = 'ERR_JWKS_NO_MATCHING_KEY';\n }\n}\nJWKSNoMatchingKey.code = 'ERR_JWKS_NO_MATCHING_KEY';\nclass JWKSMultipleMatchingKeys extends JOSEError {\n constructor(message = 'multiple matching keys found in the JSON Web Key Set', options) {\n super(message, options);\n this.code = 'ERR_JWKS_MULTIPLE_MATCHING_KEYS';\n }\n}\nJWKSMultipleMatchingKeys.code = 'ERR_JWKS_MULTIPLE_MATCHING_KEYS';\nclass JWKSTimeout extends JOSEError {\n constructor(message = 'request timed out', options) {\n super(message, options);\n this.code = 'ERR_JWKS_TIMEOUT';\n }\n}\nJWKSTimeout.code = 'ERR_JWKS_TIMEOUT';\nclass JWSSignatureVerificationFailed extends JOSEError {\n constructor(message = 'signature verification failed', options) {\n super(message, options);\n this.code = 'ERR_JWS_SIGNATURE_VERIFICATION_FAILED';\n }\n}\nJWSSignatureVerificationFailed.code = 'ERR_JWS_SIGNATURE_VERIFICATION_FAILED';\n\nfunction unusable(name, prop = 'algorithm.name') {\n return new TypeError(`CryptoKey does not support this operation, its ${prop} must be ${name}`);\n}\nfunction isAlgorithm(algorithm, name) {\n return algorithm.name === name;\n}\nfunction getHashLength(hash) {\n return parseInt(hash.name.slice(4), 10);\n}\nfunction getNamedCurve(alg) {\n switch (alg) {\n case 'ES256':\n return 'P-256';\n case 'ES384':\n return 'P-384';\n case 'ES512':\n return 'P-521';\n default:\n throw new Error('unreachable');\n }\n}\nfunction checkUsage(key, usages) {\n if (usages.length && !usages.some((expected) => key.usages.includes(expected))) {\n let msg = 'CryptoKey does not support this operation, its usages must include ';\n if (usages.length > 2) {\n const last = usages.pop();\n msg += `one of ${usages.join(', ')}, or ${last}.`;\n }\n else if (usages.length === 2) {\n msg += `one of ${usages[0]} or ${usages[1]}.`;\n }\n else {\n msg += `${usages[0]}.`;\n }\n throw new TypeError(msg);\n }\n}\nfunction checkSigCryptoKey(key, alg, ...usages) {\n switch (alg) {\n case 'HS256':\n case 'HS384':\n case 'HS512': {\n if (!isAlgorithm(key.algorithm, 'HMAC'))\n throw unusable('HMAC');\n const expected = parseInt(alg.slice(2), 10);\n const actual = getHashLength(key.algorithm.hash);\n if (actual !== expected)\n throw unusable(`SHA-${expected}`, 'algorithm.hash');\n break;\n }\n case 'RS256':\n case 'RS384':\n case 'RS512': {\n if (!isAlgorithm(key.algorithm, 'RSASSA-PKCS1-v1_5'))\n throw unusable('RSASSA-PKCS1-v1_5');\n const expected = parseInt(alg.slice(2), 10);\n const actual = getHashLength(key.algorithm.hash);\n if (actual !== expected)\n throw unusable(`SHA-${expected}`, 'algorithm.hash');\n break;\n }\n case 'PS256':\n case 'PS384':\n case 'PS512': {\n if (!isAlgorithm(key.algorithm, 'RSA-PSS'))\n throw unusable('RSA-PSS');\n const expected = parseInt(alg.slice(2), 10);\n const actual = getHashLength(key.algorithm.hash);\n if (actual !== expected)\n throw unusable(`SHA-${expected}`, 'algorithm.hash');\n break;\n }\n case 'EdDSA': {\n if (key.algorithm.name !== 'Ed25519' && key.algorithm.name !== 'Ed448') {\n throw unusable('Ed25519 or Ed448');\n }\n break;\n }\n case 'Ed25519': {\n if (!isAlgorithm(key.algorithm, 'Ed25519'))\n throw unusable('Ed25519');\n break;\n }\n case 'ES256':\n case 'ES384':\n case 'ES512': {\n if (!isAlgorithm(key.algorithm, 'ECDSA'))\n throw unusable('ECDSA');\n const expected = getNamedCurve(alg);\n const actual = key.algorithm.namedCurve;\n if (actual !== expected)\n throw unusable(expected, 'algorithm.namedCurve');\n break;\n }\n default:\n throw new TypeError('CryptoKey does not support this operation');\n }\n checkUsage(key, usages);\n}\n\nfunction message(msg, actual, ...types) {\n types = types.filter(Boolean);\n if (types.length > 2) {\n const last = types.pop();\n msg += `one of type ${types.join(', ')}, or ${last}.`;\n }\n else if (types.length === 2) {\n msg += `one of type ${types[0]} or ${types[1]}.`;\n }\n else {\n msg += `of type ${types[0]}.`;\n }\n if (actual == null) {\n msg += ` Received ${actual}`;\n }\n else if (typeof actual === 'function' && actual.name) {\n msg += ` Received function ${actual.name}`;\n }\n else if (typeof actual === 'object' && actual != null) {\n if (actual.constructor?.name) {\n msg += ` Received an instance of ${actual.constructor.name}`;\n }\n }\n return msg;\n}\nvar invalidKeyInput = (actual, ...types) => {\n return message('Key must be ', actual, ...types);\n};\nfunction withAlg(alg, actual, ...types) {\n return message(`Key for the ${alg} algorithm must be `, actual, ...types);\n}\n\nvar isKeyLike = (key) => {\n if (isCryptoKey(key)) {\n return true;\n }\n return key?.[Symbol.toStringTag] === 'KeyObject';\n};\nconst types = ['CryptoKey'];\n\nconst isDisjoint = (...headers) => {\n const sources = headers.filter(Boolean);\n if (sources.length === 0 || sources.length === 1) {\n return true;\n }\n let acc;\n for (const header of sources) {\n const parameters = Object.keys(header);\n if (!acc || acc.size === 0) {\n acc = new Set(parameters);\n continue;\n }\n for (const parameter of parameters) {\n if (acc.has(parameter)) {\n return false;\n }\n acc.add(parameter);\n }\n }\n return true;\n};\nvar isDisjoint$1 = isDisjoint;\n\nfunction isObjectLike(value) {\n return typeof value === 'object' && value !== null;\n}\nfunction isObject(input) {\n if (!isObjectLike(input) || Object.prototype.toString.call(input) !== '[object Object]') {\n return false;\n }\n if (Object.getPrototypeOf(input) === null) {\n return true;\n }\n let proto = input;\n while (Object.getPrototypeOf(proto) !== null) {\n proto = Object.getPrototypeOf(proto);\n }\n return Object.getPrototypeOf(input) === proto;\n}\n\nvar checkKeyLength = (alg, key) => {\n if (alg.startsWith('RS') || alg.startsWith('PS')) {\n const { modulusLength } = key.algorithm;\n if (typeof modulusLength !== 'number' || modulusLength < 2048) {\n throw new TypeError(`${alg} requires key modulusLength to be 2048 bits or larger`);\n }\n }\n};\n\nfunction isJWK(key) {\n return isObject(key) && typeof key.kty === 'string';\n}\nfunction isPrivateJWK(key) {\n return key.kty !== 'oct' && typeof key.d === 'string';\n}\nfunction isPublicJWK(key) {\n return key.kty !== 'oct' && typeof key.d === 'undefined';\n}\nfunction isSecretJWK(key) {\n return isJWK(key) && key.kty === 'oct' && typeof key.k === 'string';\n}\n\nfunction subtleMapping(jwk) {\n let algorithm;\n let keyUsages;\n switch (jwk.kty) {\n case 'RSA': {\n switch (jwk.alg) {\n case 'PS256':\n case 'PS384':\n case 'PS512':\n algorithm = { name: 'RSA-PSS', hash: `SHA-${jwk.alg.slice(-3)}` };\n keyUsages = jwk.d ? ['sign'] : ['verify'];\n break;\n case 'RS256':\n case 'RS384':\n case 'RS512':\n algorithm = { name: 'RSASSA-PKCS1-v1_5', hash: `SHA-${jwk.alg.slice(-3)}` };\n keyUsages = jwk.d ? ['sign'] : ['verify'];\n break;\n case 'RSA-OAEP':\n case 'RSA-OAEP-256':\n case 'RSA-OAEP-384':\n case 'RSA-OAEP-512':\n algorithm = {\n name: 'RSA-OAEP',\n hash: `SHA-${parseInt(jwk.alg.slice(-3), 10) || 1}`,\n };\n keyUsages = jwk.d ? ['decrypt', 'unwrapKey'] : ['encrypt', 'wrapKey'];\n break;\n default:\n throw new JOSENotSupported('Invalid or unsupported JWK \"alg\" (Algorithm) Parameter value');\n }\n break;\n }\n case 'EC': {\n switch (jwk.alg) {\n case 'ES256':\n algorithm = { name: 'ECDSA', namedCurve: 'P-256' };\n keyUsages = jwk.d ? ['sign'] : ['verify'];\n break;\n case 'ES384':\n algorithm = { name: 'ECDSA', namedCurve: 'P-384' };\n keyUsages = jwk.d ? ['sign'] : ['verify'];\n break;\n case 'ES512':\n algorithm = { name: 'ECDSA', namedCurve: 'P-521' };\n keyUsages = jwk.d ? ['sign'] : ['verify'];\n break;\n case 'ECDH-ES':\n case 'ECDH-ES+A128KW':\n case 'ECDH-ES+A192KW':\n case 'ECDH-ES+A256KW':\n algorithm = { name: 'ECDH', namedCurve: jwk.crv };\n keyUsages = jwk.d ? ['deriveBits'] : [];\n break;\n default:\n throw new JOSENotSupported('Invalid or unsupported JWK \"alg\" (Algorithm) Parameter value');\n }\n break;\n }\n case 'OKP': {\n switch (jwk.alg) {\n case 'Ed25519':\n algorithm = { name: 'Ed25519' };\n keyUsages = jwk.d ? ['sign'] : ['verify'];\n break;\n case 'EdDSA':\n algorithm = { name: jwk.crv };\n keyUsages = jwk.d ? ['sign'] : ['verify'];\n break;\n case 'ECDH-ES':\n case 'ECDH-ES+A128KW':\n case 'ECDH-ES+A192KW':\n case 'ECDH-ES+A256KW':\n algorithm = { name: jwk.crv };\n keyUsages = jwk.d ? ['deriveBits'] : [];\n break;\n default:\n throw new JOSENotSupported('Invalid or unsupported JWK \"alg\" (Algorithm) Parameter value');\n }\n break;\n }\n default:\n throw new JOSENotSupported('Invalid or unsupported JWK \"kty\" (Key Type) Parameter value');\n }\n return { algorithm, keyUsages };\n}\nconst parse = async (jwk) => {\n if (!jwk.alg) {\n throw new TypeError('\"alg\" argument is required when \"jwk.alg\" is not present');\n }\n const { algorithm, keyUsages } = subtleMapping(jwk);\n const rest = [\n algorithm,\n jwk.ext ?? false,\n jwk.key_ops ?? keyUsages,\n ];\n const keyData = { ...jwk };\n delete keyData.alg;\n delete keyData.use;\n return crypto$1.subtle.importKey('jwk', keyData, ...rest);\n};\nvar asKeyObject = parse;\n\nconst exportKeyValue = (k) => decode$1(k);\nlet privCache;\nlet pubCache;\nconst isKeyObject = (key) => {\n return key?.[Symbol.toStringTag] === 'KeyObject';\n};\nconst importAndCache = async (cache, key, jwk, alg, freeze = false) => {\n let cached = cache.get(key);\n if (cached?.[alg]) {\n return cached[alg];\n }\n const cryptoKey = await asKeyObject({ ...jwk, alg });\n if (freeze)\n Object.freeze(key);\n if (!cached) {\n cache.set(key, { [alg]: cryptoKey });\n }\n else {\n cached[alg] = cryptoKey;\n }\n return cryptoKey;\n};\nconst normalizePublicKey = (key, alg) => {\n if (isKeyObject(key)) {\n let jwk = key.export({ format: 'jwk' });\n delete jwk.d;\n delete jwk.dp;\n delete jwk.dq;\n delete jwk.p;\n delete jwk.q;\n delete jwk.qi;\n if (jwk.k) {\n return exportKeyValue(jwk.k);\n }\n pubCache || (pubCache = new WeakMap());\n return importAndCache(pubCache, key, jwk, alg);\n }\n if (isJWK(key)) {\n if (key.k)\n return decode$1(key.k);\n pubCache || (pubCache = new WeakMap());\n const cryptoKey = importAndCache(pubCache, key, key, alg, true);\n return cryptoKey;\n }\n return key;\n};\nconst normalizePrivateKey = (key, alg) => {\n if (isKeyObject(key)) {\n let jwk = key.export({ format: 'jwk' });\n if (jwk.k) {\n return exportKeyValue(jwk.k);\n }\n privCache || (privCache = new WeakMap());\n return importAndCache(privCache, key, jwk, alg);\n }\n if (isJWK(key)) {\n if (key.k)\n return decode$1(key.k);\n privCache || (privCache = new WeakMap());\n const cryptoKey = importAndCache(privCache, key, key, alg, true);\n return cryptoKey;\n }\n return key;\n};\nvar normalize = { normalizePublicKey, normalizePrivateKey };\n\nasync function importJWK(jwk, alg) {\n if (!isObject(jwk)) {\n throw new TypeError('JWK must be an object');\n }\n alg || (alg = jwk.alg);\n switch (jwk.kty) {\n case 'oct':\n if (typeof jwk.k !== 'string' || !jwk.k) {\n throw new TypeError('missing \"k\" (Key Value) Parameter value');\n }\n return decode$1(jwk.k);\n case 'RSA':\n if ('oth' in jwk && jwk.oth !== undefined) {\n throw new JOSENotSupported('RSA JWK \"oth\" (Other Primes Info) Parameter value is not supported');\n }\n case 'EC':\n case 'OKP':\n return asKeyObject({ ...jwk, alg });\n default:\n throw new JOSENotSupported('Unsupported \"kty\" (Key Type) Parameter value');\n }\n}\n\nconst tag = (key) => key?.[Symbol.toStringTag];\nconst jwkMatchesOp = (alg, key, usage) => {\n if (key.use !== undefined && key.use !== 'sig') {\n throw new TypeError('Invalid key for this operation, when present its use must be sig');\n }\n if (key.key_ops !== undefined && key.key_ops.includes?.(usage) !== true) {\n throw new TypeError(`Invalid key for this operation, when present its key_ops must include ${usage}`);\n }\n if (key.alg !== undefined && key.alg !== alg) {\n throw new TypeError(`Invalid key for this operation, when present its alg must be ${alg}`);\n }\n return true;\n};\nconst symmetricTypeCheck = (alg, key, usage, allowJwk) => {\n if (key instanceof Uint8Array)\n return;\n if (allowJwk && isJWK(key)) {\n if (isSecretJWK(key) && jwkMatchesOp(alg, key, usage))\n return;\n throw new TypeError(`JSON Web Key for symmetric algorithms must have JWK \"kty\" (Key Type) equal to \"oct\" and the JWK \"k\" (Key Value) present`);\n }\n if (!isKeyLike(key)) {\n throw new TypeError(withAlg(alg, key, ...types, 'Uint8Array', allowJwk ? 'JSON Web Key' : null));\n }\n if (key.type !== 'secret') {\n throw new TypeError(`${tag(key)} instances for symmetric algorithms must be of type \"secret\"`);\n }\n};\nconst asymmetricTypeCheck = (alg, key, usage, allowJwk) => {\n if (allowJwk && isJWK(key)) {\n switch (usage) {\n case 'sign':\n if (isPrivateJWK(key) && jwkMatchesOp(alg, key, usage))\n return;\n throw new TypeError(`JSON Web Key for this operation be a private JWK`);\n case 'verify':\n if (isPublicJWK(key) && jwkMatchesOp(alg, key, usage))\n return;\n throw new TypeError(`JSON Web Key for this operation be a public JWK`);\n }\n }\n if (!isKeyLike(key)) {\n throw new TypeError(withAlg(alg, key, ...types, allowJwk ? 'JSON Web Key' : null));\n }\n if (key.type === 'secret') {\n throw new TypeError(`${tag(key)} instances for asymmetric algorithms must not be of type \"secret\"`);\n }\n if (usage === 'sign' && key.type === 'public') {\n throw new TypeError(`${tag(key)} instances for asymmetric algorithm signing must be of type \"private\"`);\n }\n if (usage === 'decrypt' && key.type === 'public') {\n throw new TypeError(`${tag(key)} instances for asymmetric algorithm decryption must be of type \"private\"`);\n }\n if (key.algorithm && usage === 'verify' && key.type === 'private') {\n throw new TypeError(`${tag(key)} instances for asymmetric algorithm verifying must be of type \"public\"`);\n }\n if (key.algorithm && usage === 'encrypt' && key.type === 'private') {\n throw new TypeError(`${tag(key)} instances for asymmetric algorithm encryption must be of type \"public\"`);\n }\n};\nfunction checkKeyType(allowJwk, alg, key, usage) {\n const symmetric = alg.startsWith('HS') ||\n alg === 'dir' ||\n alg.startsWith('PBES2') ||\n /^A\\d{3}(?:GCM)?KW$/.test(alg);\n if (symmetric) {\n symmetricTypeCheck(alg, key, usage, allowJwk);\n }\n else {\n asymmetricTypeCheck(alg, key, usage, allowJwk);\n }\n}\ncheckKeyType.bind(undefined, false);\nconst checkKeyTypeWithJwk = checkKeyType.bind(undefined, true);\n\nfunction validateCrit(Err, recognizedDefault, recognizedOption, protectedHeader, joseHeader) {\n if (joseHeader.crit !== undefined && protectedHeader?.crit === undefined) {\n throw new Err('\"crit\" (Critical) Header Parameter MUST be integrity protected');\n }\n if (!protectedHeader || protectedHeader.crit === undefined) {\n return new Set();\n }\n if (!Array.isArray(protectedHeader.crit) ||\n protectedHeader.crit.length === 0 ||\n protectedHeader.crit.some((input) => typeof input !== 'string' || input.length === 0)) {\n throw new Err('\"crit\" (Critical) Header Parameter MUST be an array of non-empty strings when present');\n }\n let recognized;\n if (recognizedOption !== undefined) {\n recognized = new Map([...Object.entries(recognizedOption), ...recognizedDefault.entries()]);\n }\n else {\n recognized = recognizedDefault;\n }\n for (const parameter of protectedHeader.crit) {\n if (!recognized.has(parameter)) {\n throw new JOSENotSupported(`Extension Header Parameter \"${parameter}\" is not recognized`);\n }\n if (joseHeader[parameter] === undefined) {\n throw new Err(`Extension Header Parameter \"${parameter}\" is missing`);\n }\n if (recognized.get(parameter) && protectedHeader[parameter] === undefined) {\n throw new Err(`Extension Header Parameter \"${parameter}\" MUST be integrity protected`);\n }\n }\n return new Set(protectedHeader.crit);\n}\n\nconst validateAlgorithms = (option, algorithms) => {\n if (algorithms !== undefined &&\n (!Array.isArray(algorithms) || algorithms.some((s) => typeof s !== 'string'))) {\n throw new TypeError(`\"${option}\" option must be an array of strings`);\n }\n if (!algorithms) {\n return undefined;\n }\n return new Set(algorithms);\n};\nvar validateAlgorithms$1 = validateAlgorithms;\n\nconst keyToJWK = async (key) => {\n if (key instanceof Uint8Array) {\n return {\n kty: 'oct',\n k: encode(key),\n };\n }\n if (!isCryptoKey(key)) {\n throw new TypeError(invalidKeyInput(key, ...types, 'Uint8Array'));\n }\n if (!key.extractable) {\n throw new TypeError('non-extractable CryptoKey cannot be exported as a JWK');\n }\n const { ext, key_ops, alg, use, ...jwk } = await crypto$1.subtle.exportKey('jwk', key);\n return jwk;\n};\nvar keyToJWK$1 = keyToJWK;\n\nasync function exportJWK(key) {\n return keyToJWK$1(key);\n}\n\nfunction subtleDsa(alg, algorithm) {\n const hash = `SHA-${alg.slice(-3)}`;\n switch (alg) {\n case 'HS256':\n case 'HS384':\n case 'HS512':\n return { hash, name: 'HMAC' };\n case 'PS256':\n case 'PS384':\n case 'PS512':\n return { hash, name: 'RSA-PSS', saltLength: alg.slice(-3) >> 3 };\n case 'RS256':\n case 'RS384':\n case 'RS512':\n return { hash, name: 'RSASSA-PKCS1-v1_5' };\n case 'ES256':\n case 'ES384':\n case 'ES512':\n return { hash, name: 'ECDSA', namedCurve: algorithm.namedCurve };\n case 'Ed25519':\n return { name: 'Ed25519' };\n case 'EdDSA':\n return { name: algorithm.name };\n default:\n throw new JOSENotSupported(`alg ${alg} is not supported either by JOSE or your javascript runtime`);\n }\n}\n\nasync function getCryptoKey(alg, key, usage) {\n if (usage === 'sign') {\n key = await normalize.normalizePrivateKey(key, alg);\n }\n if (usage === 'verify') {\n key = await normalize.normalizePublicKey(key, alg);\n }\n if (isCryptoKey(key)) {\n checkSigCryptoKey(key, alg, usage);\n return key;\n }\n if (key instanceof Uint8Array) {\n if (!alg.startsWith('HS')) {\n throw new TypeError(invalidKeyInput(key, ...types));\n }\n return crypto$1.subtle.importKey('raw', key, { hash: `SHA-${alg.slice(-3)}`, name: 'HMAC' }, false, [usage]);\n }\n throw new TypeError(invalidKeyInput(key, ...types, 'Uint8Array', 'JSON Web Key'));\n}\n\nconst verify = async (alg, key, signature, data) => {\n const cryptoKey = await getCryptoKey(alg, key, 'verify');\n checkKeyLength(alg, cryptoKey);\n const algorithm = subtleDsa(alg, cryptoKey.algorithm);\n try {\n return await crypto$1.subtle.verify(algorithm, cryptoKey, signature, data);\n }\n catch {\n return false;\n }\n};\nvar verify$1 = verify;\n\nasync function flattenedVerify(jws, key, options) {\n if (!isObject(jws)) {\n throw new JWSInvalid('Flattened JWS must be an object');\n }\n if (jws.protected === undefined && jws.header === undefined) {\n throw new JWSInvalid('Flattened JWS must have either of the \"protected\" or \"header\" members');\n }\n if (jws.protected !== undefined && typeof jws.protected !== 'string') {\n throw new JWSInvalid('JWS Protected Header incorrect type');\n }\n if (jws.payload === undefined) {\n throw new JWSInvalid('JWS Payload missing');\n }\n if (typeof jws.signature !== 'string') {\n throw new JWSInvalid('JWS Signature missing or incorrect type');\n }\n if (jws.header !== undefined && !isObject(jws.header)) {\n throw new JWSInvalid('JWS Unprotected Header incorrect type');\n }\n let parsedProt = {};\n if (jws.protected) {\n try {\n const protectedHeader = decode$1(jws.protected);\n parsedProt = JSON.parse(decoder.decode(protectedHeader));\n }\n catch {\n throw new JWSInvalid('JWS Protected Header is invalid');\n }\n }\n if (!isDisjoint$1(parsedProt, jws.header)) {\n throw new JWSInvalid('JWS Protected and JWS Unprotected Header Parameter names must be disjoint');\n }\n const joseHeader = {\n ...parsedProt,\n ...jws.header,\n };\n const extensions = validateCrit(JWSInvalid, new Map([['b64', true]]), options?.crit, parsedProt, joseHeader);\n let b64 = true;\n if (extensions.has('b64')) {\n b64 = parsedProt.b64;\n if (typeof b64 !== 'boolean') {\n throw new JWSInvalid('The \"b64\" (base64url-encode payload) Header Parameter must be a boolean');\n }\n }\n const { alg } = joseHeader;\n if (typeof alg !== 'string' || !alg) {\n throw new JWSInvalid('JWS \"alg\" (Algorithm) Header Parameter missing or invalid');\n }\n const algorithms = options && validateAlgorithms$1('algorithms', options.algorithms);\n if (algorithms && !algorithms.has(alg)) {\n throw new JOSEAlgNotAllowed('\"alg\" (Algorithm) Header Parameter value not allowed');\n }\n if (b64) {\n if (typeof jws.payload !== 'string') {\n throw new JWSInvalid('JWS Payload must be a string');\n }\n }\n else if (typeof jws.payload !== 'string' && !(jws.payload instanceof Uint8Array)) {\n throw new JWSInvalid('JWS Payload must be a string or an Uint8Array instance');\n }\n let resolvedKey = false;\n if (typeof key === 'function') {\n key = await key(parsedProt, jws);\n resolvedKey = true;\n checkKeyTypeWithJwk(alg, key, 'verify');\n if (isJWK(key)) {\n key = await importJWK(key, alg);\n }\n }\n else {\n checkKeyTypeWithJwk(alg, key, 'verify');\n }\n const data = concat(encoder.encode(jws.protected ?? ''), encoder.encode('.'), typeof jws.payload === 'string' ? encoder.encode(jws.payload) : jws.payload);\n let signature;\n try {\n signature = decode$1(jws.signature);\n }\n catch {\n throw new JWSInvalid('Failed to base64url decode the signature');\n }\n const verified = await verify$1(alg, key, signature, data);\n if (!verified) {\n throw new JWSSignatureVerificationFailed();\n }\n let payload;\n if (b64) {\n try {\n payload = decode$1(jws.payload);\n }\n catch {\n throw new JWSInvalid('Failed to base64url decode the payload');\n }\n }\n else if (typeof jws.payload === 'string') {\n payload = encoder.encode(jws.payload);\n }\n else {\n payload = jws.payload;\n }\n const result = { payload };\n if (jws.protected !== undefined) {\n result.protectedHeader = parsedProt;\n }\n if (jws.header !== undefined) {\n result.unprotectedHeader = jws.header;\n }\n if (resolvedKey) {\n return { ...result, key };\n }\n return result;\n}\n\nasync function compactVerify(jws, key, options) {\n if (jws instanceof Uint8Array) {\n jws = decoder.decode(jws);\n }\n if (typeof jws !== 'string') {\n throw new JWSInvalid('Compact JWS must be a string or Uint8Array');\n }\n const { 0: protectedHeader, 1: payload, 2: signature, length } = jws.split('.');\n if (length !== 3) {\n throw new JWSInvalid('Invalid Compact JWS');\n }\n const verified = await flattenedVerify({ payload, protected: protectedHeader, signature }, key, options);\n const result = { payload: verified.payload, protectedHeader: verified.protectedHeader };\n if (typeof key === 'function') {\n return { ...result, key: verified.key };\n }\n return result;\n}\n\nvar epoch = (date) => Math.floor(date.getTime() / 1000);\n\nconst minute = 60;\nconst hour = minute * 60;\nconst day = hour * 24;\nconst week = day * 7;\nconst year = day * 365.25;\nconst REGEX = /^(\\+|\\-)? ?(\\d+|\\d+\\.\\d+) ?(seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)(?: (ago|from now))?$/i;\nvar secs = (str) => {\n const matched = REGEX.exec(str);\n if (!matched || (matched[4] && matched[1])) {\n throw new TypeError('Invalid time period format');\n }\n const value = parseFloat(matched[2]);\n const unit = matched[3].toLowerCase();\n let numericDate;\n switch (unit) {\n case 'sec':\n case 'secs':\n case 'second':\n case 'seconds':\n case 's':\n numericDate = Math.round(value);\n break;\n case 'minute':\n case 'minutes':\n case 'min':\n case 'mins':\n case 'm':\n numericDate = Math.round(value * minute);\n break;\n case 'hour':\n case 'hours':\n case 'hr':\n case 'hrs':\n case 'h':\n numericDate = Math.round(value * hour);\n break;\n case 'day':\n case 'days':\n case 'd':\n numericDate = Math.round(value * day);\n break;\n case 'week':\n case 'weeks':\n case 'w':\n numericDate = Math.round(value * week);\n break;\n default:\n numericDate = Math.round(value * year);\n break;\n }\n if (matched[1] === '-' || matched[4] === 'ago') {\n return -numericDate;\n }\n return numericDate;\n};\n\nconst normalizeTyp = (value) => value.toLowerCase().replace(/^application\\//, '');\nconst checkAudiencePresence = (audPayload, audOption) => {\n if (typeof audPayload === 'string') {\n return audOption.includes(audPayload);\n }\n if (Array.isArray(audPayload)) {\n return audOption.some(Set.prototype.has.bind(new Set(audPayload)));\n }\n return false;\n};\nvar jwtPayload = (protectedHeader, encodedPayload, options = {}) => {\n let payload;\n try {\n payload = JSON.parse(decoder.decode(encodedPayload));\n }\n catch {\n }\n if (!isObject(payload)) {\n throw new JWTInvalid('JWT Claims Set must be a top-level JSON object');\n }\n const { typ } = options;\n if (typ &&\n (typeof protectedHeader.typ !== 'string' ||\n normalizeTyp(protectedHeader.typ) !== normalizeTyp(typ))) {\n throw new JWTClaimValidationFailed('unexpected \"typ\" JWT header value', payload, 'typ', 'check_failed');\n }\n const { requiredClaims = [], issuer, subject, audience, maxTokenAge } = options;\n const presenceCheck = [...requiredClaims];\n if (maxTokenAge !== undefined)\n presenceCheck.push('iat');\n if (audience !== undefined)\n presenceCheck.push('aud');\n if (subject !== undefined)\n presenceCheck.push('sub');\n if (issuer !== undefined)\n presenceCheck.push('iss');\n for (const claim of new Set(presenceCheck.reverse())) {\n if (!(claim in payload)) {\n throw new JWTClaimValidationFailed(`missing required \"${claim}\" claim`, payload, claim, 'missing');\n }\n }\n if (issuer &&\n !(Array.isArray(issuer) ? issuer : [issuer]).includes(payload.iss)) {\n throw new JWTClaimValidationFailed('unexpected \"iss\" claim value', payload, 'iss', 'check_failed');\n }\n if (subject && payload.sub !== subject) {\n throw new JWTClaimValidationFailed('unexpected \"sub\" claim value', payload, 'sub', 'check_failed');\n }\n if (audience &&\n !checkAudiencePresence(payload.aud, typeof audience === 'string' ? [audience] : audience)) {\n throw new JWTClaimValidationFailed('unexpected \"aud\" claim value', payload, 'aud', 'check_failed');\n }\n let tolerance;\n switch (typeof options.clockTolerance) {\n case 'string':\n tolerance = secs(options.clockTolerance);\n break;\n case 'number':\n tolerance = options.clockTolerance;\n break;\n case 'undefined':\n tolerance = 0;\n break;\n default:\n throw new TypeError('Invalid clockTolerance option type');\n }\n const { currentDate } = options;\n const now = epoch(currentDate || new Date());\n if ((payload.iat !== undefined || maxTokenAge) && typeof payload.iat !== 'number') {\n throw new JWTClaimValidationFailed('\"iat\" claim must be a number', payload, 'iat', 'invalid');\n }\n if (payload.nbf !== undefined) {\n if (typeof payload.nbf !== 'number') {\n throw new JWTClaimValidationFailed('\"nbf\" claim must be a number', payload, 'nbf', 'invalid');\n }\n if (payload.nbf > now + tolerance) {\n throw new JWTClaimValidationFailed('\"nbf\" claim timestamp check failed', payload, 'nbf', 'check_failed');\n }\n }\n if (payload.exp !== undefined) {\n if (typeof payload.exp !== 'number') {\n throw new JWTClaimValidationFailed('\"exp\" claim must be a number', payload, 'exp', 'invalid');\n }\n if (payload.exp <= now - tolerance) {\n throw new JWTExpired('\"exp\" claim timestamp check failed', payload, 'exp', 'check_failed');\n }\n }\n if (maxTokenAge) {\n const age = now - payload.iat;\n const max = typeof maxTokenAge === 'number' ? maxTokenAge : secs(maxTokenAge);\n if (age - tolerance > max) {\n throw new JWTExpired('\"iat\" claim timestamp check failed (too far in the past)', payload, 'iat', 'check_failed');\n }\n if (age < 0 - tolerance) {\n throw new JWTClaimValidationFailed('\"iat\" claim timestamp check failed (it should be in the past)', payload, 'iat', 'check_failed');\n }\n }\n return payload;\n};\n\nasync function jwtVerify(jwt, key, options) {\n const verified = await compactVerify(jwt, key, options);\n if (verified.protectedHeader.crit?.includes('b64') && verified.protectedHeader.b64 === false) {\n throw new JWTInvalid('JWTs MUST NOT use unencoded payload');\n }\n const payload = jwtPayload(verified.protectedHeader, verified.payload, options);\n const result = { payload, protectedHeader: verified.protectedHeader };\n if (typeof key === 'function') {\n return { ...result, key: verified.key };\n }\n return result;\n}\n\nconst sign = async (alg, key, data) => {\n const cryptoKey = await getCryptoKey(alg, key, 'sign');\n checkKeyLength(alg, cryptoKey);\n const signature = await crypto$1.subtle.sign(subtleDsa(alg, cryptoKey.algorithm), cryptoKey, data);\n return new Uint8Array(signature);\n};\nvar sign$1 = sign;\n\nclass FlattenedSign {\n constructor(payload) {\n if (!(payload instanceof Uint8Array)) {\n throw new TypeError('payload must be an instance of Uint8Array');\n }\n this._payload = payload;\n }\n setProtectedHeader(protectedHeader) {\n if (this._protectedHeader) {\n throw new TypeError('setProtectedHeader can only be called once');\n }\n this._protectedHeader = protectedHeader;\n return this;\n }\n setUnprotectedHeader(unprotectedHeader) {\n if (this._unprotectedHeader) {\n throw new TypeError('setUnprotectedHeader can only be called once');\n }\n this._unprotectedHeader = unprotectedHeader;\n return this;\n }\n async sign(key, options) {\n if (!this._protectedHeader && !this._unprotectedHeader) {\n throw new JWSInvalid('either setProtectedHeader or setUnprotectedHeader must be called before #sign()');\n }\n if (!isDisjoint$1(this._protectedHeader, this._unprotectedHeader)) {\n throw new JWSInvalid('JWS Protected and JWS Unprotected Header Parameter names must be disjoint');\n }\n const joseHeader = {\n ...this._protectedHeader,\n ...this._unprotectedHeader,\n };\n const extensions = validateCrit(JWSInvalid, new Map([['b64', true]]), options?.crit, this._protectedHeader, joseHeader);\n let b64 = true;\n if (extensions.has('b64')) {\n b64 = this._protectedHeader.b64;\n if (typeof b64 !== 'boolean') {\n throw new JWSInvalid('The \"b64\" (base64url-encode payload) Header Parameter must be a boolean');\n }\n }\n const { alg } = joseHeader;\n if (typeof alg !== 'string' || !alg) {\n throw new JWSInvalid('JWS \"alg\" (Algorithm) Header Parameter missing or invalid');\n }\n checkKeyTypeWithJwk(alg, key, 'sign');\n let payload = this._payload;\n if (b64) {\n payload = encoder.encode(encode(payload));\n }\n let protectedHeader;\n if (this._protectedHeader) {\n protectedHeader = encoder.encode(encode(JSON.stringify(this._protectedHeader)));\n }\n else {\n protectedHeader = encoder.encode('');\n }\n const data = concat(protectedHeader, encoder.encode('.'), payload);\n const signature = await sign$1(alg, key, data);\n const jws = {\n signature: encode(signature),\n payload: '',\n };\n if (b64) {\n jws.payload = decoder.decode(payload);\n }\n if (this._unprotectedHeader) {\n jws.header = this._unprotectedHeader;\n }\n if (this._protectedHeader) {\n jws.protected = decoder.decode(protectedHeader);\n }\n return jws;\n }\n}\n\nclass CompactSign {\n constructor(payload) {\n this._flattened = new FlattenedSign(payload);\n }\n setProtectedHeader(protectedHeader) {\n this._flattened.setProtectedHeader(protectedHeader);\n return this;\n }\n async sign(key, options) {\n const jws = await this._flattened.sign(key, options);\n if (jws.payload === undefined) {\n throw new TypeError('use the flattened module for creating JWS with b64: false');\n }\n return `${jws.protected}.${jws.payload}.${jws.signature}`;\n }\n}\n\nfunction validateInput(label, input) {\n if (!Number.isFinite(input)) {\n throw new TypeError(`Invalid ${label} input`);\n }\n return input;\n}\nclass ProduceJWT {\n constructor(payload = {}) {\n if (!isObject(payload)) {\n throw new TypeError('JWT Claims Set MUST be an object');\n }\n this._payload = payload;\n }\n setIssuer(issuer) {\n this._payload = { ...this._payload, iss: issuer };\n return this;\n }\n setSubject(subject) {\n this._payload = { ...this._payload, sub: subject };\n return this;\n }\n setAudience(audience) {\n this._payload = { ...this._payload, aud: audience };\n return this;\n }\n setJti(jwtId) {\n this._payload = { ...this._payload, jti: jwtId };\n return this;\n }\n setNotBefore(input) {\n if (typeof input === 'number') {\n this._payload = { ...this._payload, nbf: validateInput('setNotBefore', input) };\n }\n else if (input instanceof Date) {\n this._payload = { ...this._payload, nbf: validateInput('setNotBefore', epoch(input)) };\n }\n else {\n this._payload = { ...this._payload, nbf: epoch(new Date()) + secs(input) };\n }\n return this;\n }\n setExpirationTime(input) {\n if (typeof input === 'number') {\n this._payload = { ...this._payload, exp: validateInput('setExpirationTime', input) };\n }\n else if (input instanceof Date) {\n this._payload = { ...this._payload, exp: validateInput('setExpirationTime', epoch(input)) };\n }\n else {\n this._payload = { ...this._payload, exp: epoch(new Date()) + secs(input) };\n }\n return this;\n }\n setIssuedAt(input) {\n if (typeof input === 'undefined') {\n this._payload = { ...this._payload, iat: epoch(new Date()) };\n }\n else if (input instanceof Date) {\n this._payload = { ...this._payload, iat: validateInput('setIssuedAt', epoch(input)) };\n }\n else if (typeof input === 'string') {\n this._payload = {\n ...this._payload,\n iat: validateInput('setIssuedAt', epoch(new Date()) + secs(input)),\n };\n }\n else {\n this._payload = { ...this._payload, iat: validateInput('setIssuedAt', input) };\n }\n return this;\n }\n}\n\nclass SignJWT extends ProduceJWT {\n setProtectedHeader(protectedHeader) {\n this._protectedHeader = protectedHeader;\n return this;\n }\n async sign(key, options) {\n const sig = new CompactSign(encoder.encode(JSON.stringify(this._payload)));\n sig.setProtectedHeader(this._protectedHeader);\n if (Array.isArray(this._protectedHeader?.crit) &&\n this._protectedHeader.crit.includes('b64') &&\n this._protectedHeader.b64 === false) {\n throw new JWTInvalid('JWTs MUST NOT use unencoded payload');\n }\n return sig.sign(key, options);\n }\n}\n\nconst check = (value, description) => {\n if (typeof value !== 'string' || !value) {\n throw new JWKInvalid(`${description} missing or invalid`);\n }\n};\nasync function calculateJwkThumbprint(jwk, digestAlgorithm) {\n if (!isObject(jwk)) {\n throw new TypeError('JWK must be an object');\n }\n digestAlgorithm ?? (digestAlgorithm = 'sha256');\n if (digestAlgorithm !== 'sha256' &&\n digestAlgorithm !== 'sha384' &&\n digestAlgorithm !== 'sha512') {\n throw new TypeError('digestAlgorithm must one of \"sha256\", \"sha384\", or \"sha512\"');\n }\n let components;\n switch (jwk.kty) {\n case 'EC':\n check(jwk.crv, '\"crv\" (Curve) Parameter');\n check(jwk.x, '\"x\" (X Coordinate) Parameter');\n check(jwk.y, '\"y\" (Y Coordinate) Parameter');\n components = { crv: jwk.crv, kty: jwk.kty, x: jwk.x, y: jwk.y };\n break;\n case 'OKP':\n check(jwk.crv, '\"crv\" (Subtype of Key Pair) Parameter');\n check(jwk.x, '\"x\" (Public Key) Parameter');\n components = { crv: jwk.crv, kty: jwk.kty, x: jwk.x };\n break;\n case 'RSA':\n check(jwk.e, '\"e\" (Exponent) Parameter');\n check(jwk.n, '\"n\" (Modulus) Parameter');\n components = { e: jwk.e, kty: jwk.kty, n: jwk.n };\n break;\n case 'oct':\n check(jwk.k, '\"k\" (Key Value) Parameter');\n components = { k: jwk.k, kty: jwk.kty };\n break;\n default:\n throw new JOSENotSupported('\"kty\" (Key Type) Parameter missing or unsupported');\n }\n const data = encoder.encode(JSON.stringify(components));\n return encode(await digest$1(digestAlgorithm, data));\n}\n\nfunction getKtyFromAlg(alg) {\n switch (typeof alg === 'string' && alg.slice(0, 2)) {\n case 'RS':\n case 'PS':\n return 'RSA';\n case 'ES':\n return 'EC';\n case 'Ed':\n return 'OKP';\n default:\n throw new JOSENotSupported('Unsupported \"alg\" value for a JSON Web Key Set');\n }\n}\nfunction isJWKSLike(jwks) {\n return (jwks &&\n typeof jwks === 'object' &&\n Array.isArray(jwks.keys) &&\n jwks.keys.every(isJWKLike));\n}\nfunction isJWKLike(key) {\n return isObject(key);\n}\nfunction clone(obj) {\n if (typeof structuredClone === 'function') {\n return structuredClone(obj);\n }\n return JSON.parse(JSON.stringify(obj));\n}\nclass LocalJWKSet {\n constructor(jwks) {\n this._cached = new WeakMap();\n if (!isJWKSLike(jwks)) {\n throw new JWKSInvalid('JSON Web Key Set malformed');\n }\n this._jwks = clone(jwks);\n }\n async getKey(protectedHeader, token) {\n const { alg, kid } = { ...protectedHeader, ...token?.header };\n const kty = getKtyFromAlg(alg);\n const candidates = this._jwks.keys.filter((jwk) => {\n let candidate = kty === jwk.kty;\n if (candidate && typeof kid === 'string') {\n candidate = kid === jwk.kid;\n }\n if (candidate && typeof jwk.alg === 'string') {\n candidate = alg === jwk.alg;\n }\n if (candidate && typeof jwk.use === 'string') {\n candidate = jwk.use === 'sig';\n }\n if (candidate && Array.isArray(jwk.key_ops)) {\n candidate = jwk.key_ops.includes('verify');\n }\n if (candidate) {\n switch (alg) {\n case 'ES256':\n candidate = jwk.crv === 'P-256';\n break;\n case 'ES256K':\n candidate = jwk.crv === 'secp256k1';\n break;\n case 'ES384':\n candidate = jwk.crv === 'P-384';\n break;\n case 'ES512':\n candidate = jwk.crv === 'P-521';\n break;\n case 'Ed25519':\n candidate = jwk.crv === 'Ed25519';\n break;\n case 'EdDSA':\n candidate = jwk.crv === 'Ed25519' || jwk.crv === 'Ed448';\n break;\n }\n }\n return candidate;\n });\n const { 0: jwk, length } = candidates;\n if (length === 0) {\n throw new JWKSNoMatchingKey();\n }\n if (length !== 1) {\n const error = new JWKSMultipleMatchingKeys();\n const { _cached } = this;\n error[Symbol.asyncIterator] = async function* () {\n for (const jwk of candidates) {\n try {\n yield await importWithAlgCache(_cached, jwk, alg);\n }\n catch { }\n }\n };\n throw error;\n }\n return importWithAlgCache(this._cached, jwk, alg);\n }\n}\nasync function importWithAlgCache(cache, jwk, alg) {\n const cached = cache.get(jwk) || cache.set(jwk, {}).get(jwk);\n if (cached[alg] === undefined) {\n const key = await importJWK({ ...jwk, ext: true }, alg);\n if (key instanceof Uint8Array || key.type !== 'public') {\n throw new JWKSInvalid('JSON Web Key Set members must be public keys');\n }\n cached[alg] = key;\n }\n return cached[alg];\n}\nfunction createLocalJWKSet(jwks) {\n const set = new LocalJWKSet(jwks);\n const localJWKSet = async (protectedHeader, token) => set.getKey(protectedHeader, token);\n Object.defineProperties(localJWKSet, {\n jwks: {\n value: () => clone(set._jwks),\n enumerable: true,\n configurable: false,\n writable: false,\n },\n });\n return localJWKSet;\n}\n\nconst fetchJwks = async (url, timeout, options) => {\n let controller;\n let id;\n let timedOut = false;\n if (typeof AbortController === 'function') {\n controller = new AbortController();\n id = setTimeout(() => {\n timedOut = true;\n controller.abort();\n }, timeout);\n }\n const response = await fetch(url.href, {\n signal: controller ? controller.signal : undefined,\n redirect: 'manual',\n headers: options.headers,\n }).catch((err) => {\n if (timedOut)\n throw new JWKSTimeout();\n throw err;\n });\n if (id !== undefined)\n clearTimeout(id);\n if (response.status !== 200) {\n throw new JOSEError('Expected 200 OK from the JSON Web Key Set HTTP response');\n }\n try {\n return await response.json();\n }\n catch {\n throw new JOSEError('Failed to parse the JSON Web Key Set HTTP response as JSON');\n }\n};\nvar fetchJwks$1 = fetchJwks;\n\nfunction isCloudflareWorkers() {\n return (typeof WebSocketPair !== 'undefined' ||\n (typeof navigator !== 'undefined' && navigator.userAgent === 'Cloudflare-Workers') ||\n (typeof EdgeRuntime !== 'undefined' && EdgeRuntime === 'vercel'));\n}\nlet USER_AGENT;\nif (typeof navigator === 'undefined' || !navigator.userAgent?.startsWith?.('Mozilla/5.0 ')) {\n const NAME = 'jose';\n const VERSION = 'v5.10.0';\n USER_AGENT = `${NAME}/${VERSION}`;\n}\nconst jwksCache = Symbol();\nfunction isFreshJwksCache(input, cacheMaxAge) {\n if (typeof input !== 'object' || input === null) {\n return false;\n }\n if (!('uat' in input) || typeof input.uat !== 'number' || Date.now() - input.uat >= cacheMaxAge) {\n return false;\n }\n if (!('jwks' in input) ||\n !isObject(input.jwks) ||\n !Array.isArray(input.jwks.keys) ||\n !Array.prototype.every.call(input.jwks.keys, isObject)) {\n return false;\n }\n return true;\n}\nclass RemoteJWKSet {\n constructor(url, options) {\n if (!(url instanceof URL)) {\n throw new TypeError('url must be an instance of URL');\n }\n this._url = new URL(url.href);\n this._options = { agent: options?.agent, headers: options?.headers };\n this._timeoutDuration =\n typeof options?.timeoutDuration === 'number' ? options?.timeoutDuration : 5000;\n this._cooldownDuration =\n typeof options?.cooldownDuration === 'number' ? options?.cooldownDuration : 30000;\n this._cacheMaxAge = typeof options?.cacheMaxAge === 'number' ? options?.cacheMaxAge : 600000;\n if (options?.[jwksCache] !== undefined) {\n this._cache = options?.[jwksCache];\n if (isFreshJwksCache(options?.[jwksCache], this._cacheMaxAge)) {\n this._jwksTimestamp = this._cache.uat;\n this._local = createLocalJWKSet(this._cache.jwks);\n }\n }\n }\n coolingDown() {\n return typeof this._jwksTimestamp === 'number'\n ? Date.now() < this._jwksTimestamp + this._cooldownDuration\n : false;\n }\n fresh() {\n return typeof this._jwksTimestamp === 'number'\n ? Date.now() < this._jwksTimestamp + this._cacheMaxAge\n : false;\n }\n async getKey(protectedHeader, token) {\n if (!this._local || !this.fresh()) {\n await this.reload();\n }\n try {\n return await this._local(protectedHeader, token);\n }\n catch (err) {\n if (err instanceof JWKSNoMatchingKey) {\n if (this.coolingDown() === false) {\n await this.reload();\n return this._local(protectedHeader, token);\n }\n }\n throw err;\n }\n }\n async reload() {\n if (this._pendingFetch && isCloudflareWorkers()) {\n this._pendingFetch = undefined;\n }\n const headers = new Headers(this._options.headers);\n if (USER_AGENT && !headers.has('User-Agent')) {\n headers.set('User-Agent', USER_AGENT);\n this._options.headers = Object.fromEntries(headers.entries());\n }\n this._pendingFetch || (this._pendingFetch = fetchJwks$1(this._url, this._timeoutDuration, this._options)\n .then((json) => {\n this._local = createLocalJWKSet(json);\n if (this._cache) {\n this._cache.uat = Date.now();\n this._cache.jwks = json;\n }\n this._jwksTimestamp = Date.now();\n this._pendingFetch = undefined;\n })\n .catch((err) => {\n this._pendingFetch = undefined;\n throw err;\n }));\n await this._pendingFetch;\n }\n}\nfunction createRemoteJWKSet(url, options) {\n const set = new RemoteJWKSet(url, options);\n const remoteJWKSet = async (protectedHeader, token) => set.getKey(protectedHeader, token);\n Object.defineProperties(remoteJWKSet, {\n coolingDown: {\n get: () => set.coolingDown(),\n enumerable: true,\n configurable: false,\n },\n fresh: {\n get: () => set.fresh(),\n enumerable: true,\n configurable: false,\n },\n reload: {\n value: () => set.reload(),\n enumerable: true,\n configurable: false,\n writable: false,\n },\n reloading: {\n get: () => !!set._pendingFetch,\n enumerable: true,\n configurable: false,\n },\n jwks: {\n value: () => set._local?.jwks(),\n enumerable: true,\n configurable: false,\n writable: false,\n },\n });\n return remoteJWKSet;\n}\n\nconst decode = decode$1;\n\nfunction decodeJwt(jwt) {\n if (typeof jwt !== 'string')\n throw new JWTInvalid('JWTs must use Compact JWS serialization, JWT must be a string');\n const { 1: payload, length } = jwt.split('.');\n if (length === 5)\n throw new JWTInvalid('Only JWTs using Compact JWS serialization can be decoded');\n if (length !== 3)\n throw new JWTInvalid('Invalid JWT');\n if (!payload)\n throw new JWTInvalid('JWTs must contain a payload');\n let decoded;\n try {\n decoded = decode(payload);\n }\n catch {\n throw new JWTInvalid('Failed to base64url decode the payload');\n }\n let result;\n try {\n result = JSON.parse(decoder.decode(decoded));\n }\n catch {\n throw new JWTInvalid('Failed to parse the decoded payload as JSON');\n }\n if (!isObject(result))\n throw new JWTInvalid('Invalid JWT Claims Set');\n return result;\n}\n\nfunction getModulusLengthOption(options) {\n const modulusLength = options?.modulusLength ?? 2048;\n if (typeof modulusLength !== 'number' || modulusLength < 2048) {\n throw new JOSENotSupported('Invalid or unsupported modulusLength option provided, 2048 bits or larger keys must be used');\n }\n return modulusLength;\n}\nasync function generateKeyPair$1(alg, options) {\n let algorithm;\n let keyUsages;\n switch (alg) {\n case 'PS256':\n case 'PS384':\n case 'PS512':\n algorithm = {\n name: 'RSA-PSS',\n hash: `SHA-${alg.slice(-3)}`,\n publicExponent: new Uint8Array([0x01, 0x00, 0x01]),\n modulusLength: getModulusLengthOption(options),\n };\n keyUsages = ['sign', 'verify'];\n break;\n case 'RS256':\n case 'RS384':\n case 'RS512':\n algorithm = {\n name: 'RSASSA-PKCS1-v1_5',\n hash: `SHA-${alg.slice(-3)}`,\n publicExponent: new Uint8Array([0x01, 0x00, 0x01]),\n modulusLength: getModulusLengthOption(options),\n };\n keyUsages = ['sign', 'verify'];\n break;\n case 'RSA-OAEP':\n case 'RSA-OAEP-256':\n case 'RSA-OAEP-384':\n case 'RSA-OAEP-512':\n algorithm = {\n name: 'RSA-OAEP',\n hash: `SHA-${parseInt(alg.slice(-3), 10) || 1}`,\n publicExponent: new Uint8Array([0x01, 0x00, 0x01]),\n modulusLength: getModulusLengthOption(options),\n };\n keyUsages = ['decrypt', 'unwrapKey', 'encrypt', 'wrapKey'];\n break;\n case 'ES256':\n algorithm = { name: 'ECDSA', namedCurve: 'P-256' };\n keyUsages = ['sign', 'verify'];\n break;\n case 'ES384':\n algorithm = { name: 'ECDSA', namedCurve: 'P-384' };\n keyUsages = ['sign', 'verify'];\n break;\n case 'ES512':\n algorithm = { name: 'ECDSA', namedCurve: 'P-521' };\n keyUsages = ['sign', 'verify'];\n break;\n case 'Ed25519':\n algorithm = { name: 'Ed25519' };\n keyUsages = ['sign', 'verify'];\n break;\n case 'EdDSA': {\n keyUsages = ['sign', 'verify'];\n const crv = options?.crv ?? 'Ed25519';\n switch (crv) {\n case 'Ed25519':\n case 'Ed448':\n algorithm = { name: crv };\n break;\n default:\n throw new JOSENotSupported('Invalid or unsupported crv option provided');\n }\n break;\n }\n case 'ECDH-ES':\n case 'ECDH-ES+A128KW':\n case 'ECDH-ES+A192KW':\n case 'ECDH-ES+A256KW': {\n keyUsages = ['deriveKey', 'deriveBits'];\n const crv = options?.crv ?? 'P-256';\n switch (crv) {\n case 'P-256':\n case 'P-384':\n case 'P-521': {\n algorithm = { name: 'ECDH', namedCurve: crv };\n break;\n }\n case 'X25519':\n case 'X448':\n algorithm = { name: crv };\n break;\n default:\n throw new JOSENotSupported('Invalid or unsupported crv option provided, supported values are P-256, P-384, P-521, X25519, and X448');\n }\n break;\n }\n default:\n throw new JOSENotSupported('Invalid or unsupported JWK \"alg\" (Algorithm) Parameter value');\n }\n return crypto$1.subtle.generateKey(algorithm, options?.extractable ?? false, keyUsages);\n}\n\nasync function generateKeyPair(alg, options) {\n return generateKeyPair$1(alg, options);\n}\n\n/**\n * When the client does not have a webid profile document, use this.\n *\n * @param registration_endpoint\n * @param redirect__uris\n * @returns\n */\nconst requestDynamicClientRegistration = async (registration_endpoint, client_details) => {\n // prepare dynamic client registration\n const client_registration_request_body = {\n ...client_details,\n grant_types: [\"authorization_code\", \"refresh_token\"],\n // id_token_signed_response_alg: \"ES256\", // omitting as NSS does not support ES256 while CSS does not support RS256\n token_endpoint_auth_method: \"none\",\n application_type: \"web\",\n subject_type: \"public\",\n };\n // register\n return fetch(registration_endpoint, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify(client_registration_request_body),\n });\n};\n\n/**\n * Login with the idp, using a provided `client_id` or dynamic client registration if none provided.\n *\n * @param idp\n * @param redirect_uri\n */\nconst redirectForLogin = async (idp, redirect_uri, client_details) => {\n // RFC 6749 - Section 3.1.2 - sanitize redirect_uri\n const redirect_uri_ = new URL(redirect_uri);\n const redirect_uri_sane = redirect_uri_.origin + redirect_uri_.pathname + redirect_uri_.search;\n // lookup openid configuration of idp\n const idp_origin = new URL(idp).origin;\n const openid_configuration = await fetch(`${idp_origin}/.well-known/openid-configuration`)\n .then((response) => {\n if (!response.ok) {\n throw new Error(`HTTP error! Status: ${response.status}`);\n }\n return response.json();\n });\n // RFC 9207 iss check: remember the identity provider (idp) / issuer (iss) - relaxing for trailing slash\n const issuer = openid_configuration[\"issuer\"];\n const trim_trailing_slash = (url) => (url.endsWith('/') ? url.slice(0, -1) : url);\n if (trim_trailing_slash(idp) !== trim_trailing_slash(issuer)) { // expected idp matches received issuer mod trailing slash?\n throw new Error(\"RFC 9207 - iss !== idp - \" + issuer + \" !== \" + idp);\n }\n sessionStorage.setItem(\"idp\", issuer);\n // remember token endpoint\n sessionStorage.setItem(\"token_endpoint\", openid_configuration[\"token_endpoint\"]);\n // remember jwks_uri for later token verification\n sessionStorage.setItem(\"jwks_uri\", openid_configuration[\"jwks_uri\"]);\n let client_id = client_details?.client_id;\n // no client_id => attempt dynamic registration\n if (!client_id) {\n // use registration endpoint\n const registration_endpoint = openid_configuration[\"registration_endpoint\"];\n // get client registration\n const client_registration = await requestDynamicClientRegistration(registration_endpoint, client_details ?? { redirect_uris: [redirect_uri_sane] })\n .then((response) => {\n if (!response.ok) {\n throw new Error(`HTTP error! Status: ${response.status}`);\n }\n return response.json();\n });\n client_id = client_registration[\"client_id\"];\n }\n // remember client_id if not URL\n try {\n new URL(client_id);\n }\n catch {\n sessionStorage.setItem(\"client_id\", client_id);\n }\n // RFC 7636 PKCE, remember code verifer\n const { pkce_code_verifier, pkce_code_challenge } = await getPKCEcode();\n sessionStorage.setItem(\"pkce_code_verifier\", pkce_code_verifier);\n // RFC 6749 OAuth 2.0 - CSRF token\n const csrf_token = window.crypto.randomUUID();\n sessionStorage.setItem(\"csrf_token\", csrf_token);\n // redirect to idp\n const redirect_to_idp = openid_configuration[\"authorization_endpoint\"] +\n `?response_type=code` +\n `&redirect_uri=${encodeURIComponent(redirect_uri_sane)}` +\n `&scope=openid offline_access webid` +\n `&client_id=${encodeURIComponent(client_id)}` +\n `&code_challenge_method=S256` +\n `&code_challenge=${pkce_code_challenge}` +\n `&state=${csrf_token}` +\n `&prompt=consent`; // this query parameter value MUST be present for CSS v7 to issue a refresh token ( // TODO open issue because prompting is the default behaviour but without this query param no refresh token is provided despite the \"remember this client\" box being checked)\n window.location.href = redirect_to_idp;\n};\n/**\n * RFC 7636 PKCE\n * @returns PKCE code verifier and PKCE code challenge\n */\nconst getPKCEcode = async () => {\n // create random string as PKCE code verifier\n const pkce_code_verifier = window.crypto.randomUUID() + \"-\" + window.crypto.randomUUID();\n // hash the verifier and base64URL encode as PKCE code challenge\n const digest = new Uint8Array(await window.crypto.subtle.digest(\"SHA-256\", new TextEncoder().encode(pkce_code_verifier)));\n const pkce_code_challenge = btoa(String.fromCharCode(...digest))\n .replace(/\\+/g, \"-\")\n .replace(/\\//g, \"_\")\n .replace(/=+$/, \"\");\n return { pkce_code_verifier, pkce_code_challenge };\n};\n/**\n * On incoming redirect from OpenID provider (idp/iss),\n * URL contains authrization code, issuer (idp) and state (csrf token),\n * get an access token for the authrization code.\n */\nconst onIncomingRedirect = async (client_details, database) => {\n const url = new URL(window.location.href);\n // authorization code\n const authorization_code = url.searchParams.get(\"code\");\n // if no code, session remains unauthenticated at this point\n if (authorization_code === null) {\n return { clientDetails: client_details };\n }\n // RFC 9207 issuer check\n const idp = sessionStorage.getItem(\"idp\");\n if (idp === null || url.searchParams.get(\"iss\") !== idp) {\n throw new Error(\"RFC 9207 - iss !== idp - \" + url.searchParams.get(\"iss\") + \" !== \" + idp);\n }\n // RFC 6749 OAuth 2.0\n if (url.searchParams.get(\"state\") !== sessionStorage.getItem(\"csrf_token\")) {\n throw new Error(\"RFC 6749 - state !== csrf_token - \" + url.searchParams.get(\"state\") + \" !== \" + sessionStorage.getItem(\"csrf_token\"));\n }\n // remove redirect query parameters from URL\n url.searchParams.delete(\"iss\");\n url.searchParams.delete(\"state\");\n url.searchParams.delete(\"code\");\n window.history.pushState({}, document.title, url.toString());\n // prepare token request\n const pkce_code_verifier = sessionStorage.getItem(\"pkce_code_verifier\");\n if (pkce_code_verifier === null) {\n throw new Error(\"Access Token Request preparation - Could not find in sessionStorage: pkce_code_verifier\");\n }\n const client_id = client_details?.client_id || sessionStorage.getItem(\"client_id\");\n if (!client_id) {\n throw new Error(\"Access Token Request preparation - Could not find in sessionStorage: client_id (dynamic registration)\");\n }\n const token_endpoint = sessionStorage.getItem(\"token_endpoint\");\n if (token_endpoint === null) {\n throw new Error(\"Access Token Request preparation - Could not find in sessionStorage: token_endpoint\");\n }\n // RFC 9449 DPoP\n const key_pair = await generateKeyPair(\"ES256\");\n // get access token\n const token_response = await requestAccessToken(authorization_code, pkce_code_verifier, url.toString(), client_id, token_endpoint, key_pair)\n .then((response) => {\n if (!response.ok) {\n throw new Error(`HTTP error! Status: ${response.status}`);\n }\n return response.json();\n });\n // verify access_token // ! Solid-OIDC specification says it should be a dpop-bound `id token` but implementations provide a dpop-bound `access token`\n const accessToken = token_response[\"access_token\"];\n const jwks_uri = sessionStorage.getItem(\"jwks_uri\");\n if (jwks_uri === null) {\n throw new Error(\"Access Token validation preparation - Could not find in sessionStorage: jwks_uri\");\n }\n const jwks = createRemoteJWKSet(new URL(jwks_uri));\n const { payload } = await jwtVerify(accessToken, jwks, {\n issuer: idp, // RFC 9207\n audience: \"solid\", // RFC 7519 // ! \"solid\" as per implementations ...\n // exp, nbf, iat - handled automatically\n });\n // check dpop thumbprint\n const dpopThumbprint = await calculateJwkThumbprint(await exportJWK(key_pair.publicKey));\n if (payload[\"cnf\"][\"jkt\"] !== dpopThumbprint) {\n throw new Error(\"Access Token validation failed on `jkt`: jkt !== DPoP thumbprint - \" + payload[\"cnf\"][\"jkt\"] + \" !== \" + dpopThumbprint);\n }\n // check client_id\n if (payload[\"client_id\"] !== client_id) {\n throw new Error(\"Access Token validation failed on `client_id`: JWT payload !== client_id - \" + payload[\"client_id\"] + \" !== \" + client_id);\n }\n // summarise session info\n const token_details = { ...token_response, dpop_key_pair: key_pair };\n const idp_details = { idp, jwks_uri, token_endpoint };\n if (!client_details)\n client_details = { redirect_uris: [url.toString()] };\n client_details.client_id = client_id;\n // and persist refresh token details\n if (database) {\n await database.init();\n await Promise.all([\n database.setItem(\"idp\", idp),\n database.setItem(\"jwks_uri\", jwks_uri),\n database.setItem(\"token_endpoint\", token_endpoint),\n database.setItem(\"client_id\", client_id),\n database.setItem(\"dpop_keypair\", key_pair),\n database.setItem(\"refresh_token\", token_response[\"refresh_token\"])\n ]);\n database.close();\n }\n // clean session storage\n sessionStorage.removeItem(\"csrf_token\");\n sessionStorage.removeItem(\"pkce_code_verifier\");\n sessionStorage.removeItem(\"idp\");\n sessionStorage.removeItem(\"jwks_uri\");\n sessionStorage.removeItem(\"token_endpoint\");\n sessionStorage.removeItem(\"client_id\");\n // return session information\n return {\n clientDetails: client_details,\n idpDetails: idp_details,\n tokenDetails: token_details\n };\n};\n/**\n * Request an dpop-bound access token from a token endpoint\n * @param authorization_code\n * @param pkce_code_verifier\n * @param redirect_uri\n * @param client_id\n * @param token_endpoint\n * @param key_pair\n * @returns\n */\nconst requestAccessToken = async (authorization_code, pkce_code_verifier, redirect_uri, client_id, token_endpoint, key_pair) => {\n // prepare public key to bind access token to\n const jwk_public_key = await exportJWK(key_pair.publicKey);\n jwk_public_key.alg = \"ES256\";\n // sign the access token request DPoP token\n const dpop = await new SignJWT({\n htu: token_endpoint,\n htm: \"POST\",\n })\n .setIssuedAt()\n .setJti(window.crypto.randomUUID())\n .setProtectedHeader({\n alg: \"ES256\",\n typ: \"dpop+jwt\",\n jwk: jwk_public_key,\n })\n .sign(key_pair.privateKey);\n return fetch(token_endpoint, {\n method: \"POST\",\n headers: {\n dpop,\n \"Content-Type\": \"application/x-www-form-urlencoded\",\n },\n body: new URLSearchParams({\n grant_type: \"authorization_code\",\n code: authorization_code,\n code_verifier: pkce_code_verifier,\n redirect_uri: redirect_uri,\n client_id: client_id,\n }),\n });\n};\n\nconst renewTokens = async (sessionDatabase) => {\n // remember session details\n try {\n await sessionDatabase.init();\n const client_id = await sessionDatabase.getItem(\"client_id\");\n const token_endpoint = await sessionDatabase.getItem(\"token_endpoint\");\n const key_pair = await sessionDatabase.getItem(\"dpop_keypair\");\n const refresh_token = await sessionDatabase.getItem(\"refresh_token\");\n if (client_id === null || token_endpoint === null || key_pair === null || refresh_token === null) {\n // we can not restore the old session\n throw new Error(\"Could not refresh tokens: details missing from database.\");\n }\n const token_response = await requestFreshTokens(refresh_token, client_id, token_endpoint, key_pair)\n .then((response) => {\n if (!response.ok) {\n throw new Error(`HTTP error! Status: ${response.status}`);\n }\n return response.json();\n });\n // verify access_token // ! Solid-OIDC specification says it should be a dpop-bound `id token` but implementations provide a dpop-bound `access token`\n const accessToken = token_response[\"access_token\"];\n const idp = await sessionDatabase.getItem(\"idp\");\n if (idp === null) {\n throw new Error(\"Access Token validation preparation - Could not find in sessionDatabase: idp\");\n }\n const jwks_uri = await sessionDatabase.getItem(\"jwks_uri\");\n if (jwks_uri === null) {\n throw new Error(\"Access Token validation preparation - Could not find in sessionDatabase: jwks_uri\");\n }\n const jwks = createRemoteJWKSet(new URL(jwks_uri));\n const { payload } = await jwtVerify(accessToken, jwks, {\n issuer: idp, // RFC 9207\n audience: \"solid\", // RFC 7519 // ! \"solid\" as per implementations ...\n // exp, nbf, iat - handled automatically\n });\n // check dpop thumbprint\n const dpopThumbprint = await calculateJwkThumbprint(await exportJWK(key_pair.publicKey));\n if (payload[\"cnf\"][\"jkt\"] !== dpopThumbprint) {\n throw new Error(\"Access Token validation failed on `jkt`: jkt !== DPoP thumbprint - \" + payload[\"cnf\"][\"jkt\"] + \" !== \" + dpopThumbprint);\n }\n // check client_id\n if (payload[\"client_id\"] !== client_id) {\n throw new Error(\"Access Token validation failed on `client_id`: JWT payload !== client_id - \" + payload[\"client_id\"] + \" !== \" + client_id);\n }\n // set new refresh token for token rotation\n await sessionDatabase.setItem(\"refresh_token\", token_response[\"refresh_token\"]);\n return {\n ...token_response,\n dpop_key_pair: key_pair,\n };\n }\n finally {\n sessionDatabase.close();\n }\n};\n/**\n * Request an dpop-bound access token from a token endpoint using a refresh token\n * @param authorization_code\n * @param pkce_code_verifier\n * @param redirect_uri\n * @param client_id\n * @param token_endpoint\n * @param key_pair\n * @returns\n */\nconst requestFreshTokens = async (refresh_token, client_id, token_endpoint, key_pair) => {\n // prepare public key to bind access token to\n const jwk_public_key = await exportJWK(key_pair.publicKey);\n jwk_public_key.alg = \"ES256\";\n // sign the access token request DPoP token\n const dpop = await new SignJWT({\n htu: token_endpoint,\n htm: \"POST\",\n })\n .setIssuedAt()\n .setJti(self.crypto.randomUUID())\n .setProtectedHeader({\n alg: \"ES256\",\n typ: \"dpop+jwt\",\n jwk: jwk_public_key,\n })\n .sign(key_pair.privateKey);\n return fetch(token_endpoint, {\n method: \"POST\",\n headers: {\n dpop,\n \"Content-Type\": \"application/x-www-form-urlencoded\",\n },\n body: new URLSearchParams({\n grant_type: \"refresh_token\",\n refresh_token,\n client_id\n }),\n });\n};\n\nvar SessionEvents;\n(function (SessionEvents) {\n SessionEvents[\"STATE_CHANGE\"] = \"sessionStateChange\";\n SessionEvents[\"EXPIRATION_WARNING\"] = \"sessionExpirationWarning\";\n SessionEvents[\"EXPIRATION\"] = \"sessionExpiration\";\n})(SessionEvents || (SessionEvents = {}));\n//\n//\n// Basic implementation\n//\n//\n/**\n * The SessionCore class manages session state and core logic but does not handle the refresh lifecycle.\n * It receives {@link SessionOptions} with a database to be able to restore a session.\n * That database can be re-used by (your!) surrounding implementation to handle the refresh lifecycle.\n * If no database was provided, refresh information cannot be stored, and thus token refresh (via the refresh token grant) is not possible in this case.\n *\n * If you are building a web app, use the Session implementation provided in the default `/web` version of this library.\n */\nclass SessionCore extends EventTarget {\n isActive_ = false;\n exp_;\n webId_ = undefined;\n currentAth_ = undefined;\n information;\n database;\n refreshPromise;\n resolveRefresh;\n rejectRefresh;\n constructor(clientDetails, sessionOptions) {\n super();\n this.authFetch = this.authFetch.bind(this);\n this.information = { clientDetails };\n this.database = sessionOptions?.database;\n if (sessionOptions?.onSessionStateChange)\n this.addEventListener(SessionEvents.STATE_CHANGE, (event) => sessionOptions.onSessionStateChange?.(event));\n if (sessionOptions?.onSessionExpirationWarning)\n this.addEventListener(SessionEvents.EXPIRATION_WARNING, (event) => sessionOptions?.onSessionExpirationWarning?.(event));\n if (sessionOptions?.onSessionExpiration)\n this.addEventListener(SessionEvents.EXPIRATION, (event) => sessionOptions?.onSessionExpiration?.(event));\n }\n async login(idp, redirect_uri) {\n await redirectForLogin(idp, redirect_uri, this.information.clientDetails);\n }\n /**\n * Handles the redirect from the identity provider after a login attempt.\n * It attempts to retrieve tokens using the authorization code.\n * Upon success, it tries to persist information to refresh tokens in the session database.\n * If no database was provided, no information is persisted.\n */\n async handleRedirectFromLogin() {\n // Redirect after Authorization Code Grant // memory via sessionStorage\n const newSessionInfo = await onIncomingRedirect(this.information.clientDetails, this.database);\n // no session - we remain unauthenticated\n if (!newSessionInfo.tokenDetails)\n return;\n // we got a session\n this.information.clientDetails = newSessionInfo.clientDetails;\n this.information.idpDetails = newSessionInfo.idpDetails;\n await this.setTokenDetails(newSessionInfo.tokenDetails);\n // callback state change \n this.dispatchStateChangeEvent(); // we logged in\n }\n /**\n * Handles session restoration using the refresh token grant.\n */\n async restore() {\n if (!this.database) {\n throw new Error(\"Could not refresh tokens: missing database. Provide database in sessionOption.\");\n }\n if (this.refreshPromise) {\n return this.refreshPromise;\n }\n this.refreshPromise = new Promise((resolve, reject) => {\n this.resolveRefresh = resolve;\n this.rejectRefresh = reject;\n });\n // Restore session using Refresh Token Grant \n const wasActive = this.isActive;\n renewTokens(this.database)\n .then(tokenDetails => this.setTokenDetails(tokenDetails))\n .then(() => this.resolveRefresh())\n .catch(error => {\n if (this.isActive) {\n this.rejectRefresh(new Error(error || 'Token refresh failed'));\n // do not change state (yet), let the app decide if they want to logout or if they just want to retry.\n if (!this.isExpired()) {\n this.dispatchExpirationWarningEvent();\n }\n else {\n this.dispatchExpirationEvent();\n }\n }\n else {\n this.rejectRefresh(new Error(\"No session to restore.\"));\n }\n }).finally(() => {\n this.clearRefreshPromise();\n if (wasActive !== this.isActive)\n this.dispatchStateChangeEvent();\n });\n return this.refreshPromise;\n }\n /**\n * This logs the user out.\n * Clears all session-related information, including IDP details and tokens.\n * Client ID is preserved if it is a URI.\n */\n async logout() {\n // clean session data\n this.isActive_ = false;\n this.exp_ = undefined;\n this.webId_ = undefined;\n this.currentAth_ = undefined;\n this.information.idpDetails = undefined;\n this.information.tokenDetails = undefined;\n // client details are preserved\n if (this.refreshPromise && this.rejectRefresh) {\n this.rejectRefresh(new Error('Logout during token refresh.'));\n this.clearRefreshPromise();\n }\n // clean session database\n if (this.database) {\n await this.database.init();\n await this.database.clear();\n this.database.close();\n }\n // callback state change\n this.dispatchStateChangeEvent(); // we logged out\n }\n /**\n * Makes an HTTP fetch request.\n * If a session is active, it includes the DPoP token and the access token in the `Authorization` header.\n *\n * @param input The URL or Request object to fetch.\n * @param init Optional fetch request options (RequestInit). Headers for `Authorization` and `DPoP` will be overwritten if a session is active.\n * @param dpopPayload Optional payload for the DPoP token. If provided, it overrides the default `htu` and `htm` claims.\n * @returns A promise that resolves to the fetch Response.\n */\n async authFetch(input, init, dpopPayload) {\n // if there is not session established, just delegate to the default fetch\n if (!this.isActive) {\n return fetch(input, init);\n }\n // TODO\n // TODO do HEAD request to check if authentication is actually required, only then include tokens\n // TODO\n // prepare authenticated call using a DPoP token (either provided payload, or default)\n let url;\n let method;\n let headers;\n // wrangle fetch input parameters into place\n if (input instanceof Request) {\n url = new URL(input.url);\n method = init?.method || input?.method || 'GET';\n headers = new Headers(input.headers);\n }\n else {\n init = init || {};\n url = new URL(input.toString());\n method = init.method || 'GET';\n headers = init.headers ? new Headers(init.headers) : new Headers();\n }\n // create DPoP token, and add tokens to request\n await this._renewTokensIfExpired();\n dpopPayload = dpopPayload ?? {\n htu: `${url.origin}${url.pathname}`,\n htm: method.toUpperCase()\n };\n const dpop = await this._createSignedDPoPToken(dpopPayload);\n // overwrite headers: authorization, dpop\n headers.set(\"dpop\", dpop);\n headers.set(\"authorization\", `DPoP ${this.information.tokenDetails.access_token}`);\n // check explicitly; to avoid unexpected behaviour\n if (input instanceof Request) { // clone the provided request, and override the headers\n return fetch(new Request(input, { ...init, headers }));\n }\n // just override the headers\n return fetch(url, { ...init, headers });\n }\n // \n // Setters\n //\n async setTokenDetails(tokenDetails) {\n this.information.tokenDetails = tokenDetails;\n await this._updateSessionDetailsFromToken(tokenDetails.access_token);\n }\n clearRefreshPromise() {\n this.refreshPromise = undefined;\n this.resolveRefresh = undefined;\n this.rejectRefresh = undefined;\n }\n //\n // Getters\n //\n get isActive() {\n return this.isActive_;\n }\n get webId() {\n return this.webId_;\n }\n isExpired() {\n if (!this.exp_)\n return true;\n return this._isTokenExpired(this.exp_);\n }\n getExpiresIn() {\n if (!this.exp_)\n return -1;\n return this._getTokenTTL(this.exp_);\n }\n getTokenDetails() {\n return this.information.tokenDetails;\n }\n //\n // Helpers\n //\n /**\n * Check if the current token is expired (which may happen during device/browser/tab hibernation),\n * and if expired, restore the session.\n */\n async _renewTokensIfExpired() {\n if (this.isExpired()) {\n if (!this.refreshPromise) {\n await this.restore(); // Initiate and wait\n }\n else {\n await this.refreshPromise; // Wait for already pending\n }\n }\n }\n /**\n * RFC 9449 - Hash of the access token\n */\n async _computeAth(accessToken) {\n // Convert the ASCII string of the token to a Uint8Array\n const encoder = new TextEncoder();\n const data = encoder.encode(accessToken); // ASCII by default\n // Compute SHA-256 hash\n const hashBuffer = await crypto.subtle.digest('SHA-256', data);\n // Convert ArrayBuffer to base64url string\n const hashArray = Array.from(new Uint8Array(hashBuffer));\n const base64 = btoa(String.fromCharCode(...hashArray));\n // Convert base64 to base64url\n const base64url = base64\n .replace(/\\+/g, '-')\n .replace(/\\//g, '_')\n .replace(/=+$/, '');\n return base64url;\n }\n /**\n * Creates a signed DPoP (Demonstration of Proof-of-Possession) token.\n *\n * @param payload The payload to include in the DPoP token. By default, it includes `htu` (HTTP target URI) and `htm` (HTTP method).\n * @returns A promise that resolves to the signed DPoP token string.\n * @throws Error if the session has not been initialized - if no token details are available.\n */\n async _createSignedDPoPToken(payload) {\n if (!this.information.tokenDetails || !this.currentAth_) {\n throw new Error(\"Session not established.\");\n }\n payload.ath = this.currentAth_;\n const jwk_public_key = await exportJWK(this.information.tokenDetails.dpop_key_pair.publicKey);\n return new SignJWT(payload)\n .setIssuedAt()\n .setJti(window.crypto.randomUUID())\n .setProtectedHeader({\n alg: \"ES256\",\n typ: \"dpop+jwt\",\n jwk: jwk_public_key,\n })\n .sign(this.information.tokenDetails.dpop_key_pair.privateKey);\n }\n async _updateSessionDetailsFromToken(access_token) {\n if (!access_token) {\n await this.logout();\n return;\n }\n try {\n const decodedToken = decodeJwt(access_token);\n const webId = decodedToken.webid;\n if (!webId) {\n throw new Error('Missing webid claim in access token');\n }\n const exp = decodedToken.exp;\n if (!exp) {\n throw new Error('Missing exp claim in access token');\n }\n this.currentAth_ = await this._computeAth(access_token); // must be done before session set to active\n this.webId_ = webId;\n this.exp_ = exp;\n this.isActive_ = true;\n }\n catch (error) {\n await this.logout();\n }\n }\n /**\n * Checks if a JWT expiration timestamp ('exp') has passed.\n */\n _isTokenExpired(exp, bufferSeconds = 0) {\n if (typeof exp !== 'number' || isNaN(exp)) {\n return true;\n }\n return this._getTokenTTL(exp, bufferSeconds) < 0;\n }\n _getTokenTTL(exp, bufferSeconds = 0) {\n const currentTimeSeconds = Math.floor(Date.now() / 1000);\n return exp - (currentTimeSeconds + bufferSeconds);\n }\n // \n // Events\n //\n dispatchStateChangeEvent() {\n this.dispatchEvent(new CustomEvent(SessionEvents.STATE_CHANGE, { detail: { isActive: this.isActive, webId: this.webId } }));\n }\n dispatchExpirationWarningEvent() {\n this.dispatchEvent(new CustomEvent(SessionEvents.EXPIRATION_WARNING, { detail: { expires_in: this.getExpiresIn() } }));\n }\n dispatchExpirationEvent() {\n this.dispatchEvent(new CustomEvent(SessionEvents.EXPIRATION));\n }\n}\n\n// extracting this from Session.ts such that the jest tests would compile :)\nconst getWorkerUrl = () => new URL('./RefreshWorker.js', import.meta.url);\n\nvar RefreshMessageTypes;\n(function (RefreshMessageTypes) {\n RefreshMessageTypes[\"SCHEDULE\"] = \"SCHEDULE\";\n RefreshMessageTypes[\"REFRESH\"] = \"REFRESH\";\n RefreshMessageTypes[\"STOP\"] = \"STOP\";\n RefreshMessageTypes[\"DISCONNECT\"] = \"DISCONNECT\";\n RefreshMessageTypes[\"TOKEN_DETAILS\"] = \"TOKEN_DETAILS\";\n RefreshMessageTypes[\"ERROR_ON_REFRESH\"] = \"ERROR_ON_REFRESH\";\n RefreshMessageTypes[\"EXPIRED\"] = \"EXPIRED\";\n})(RefreshMessageTypes || (RefreshMessageTypes = {}));\n\n/**\n * A simple IndexedDB wrapper.\n */\nclass SessionIDB {\n dbName;\n storeName;\n dbVersion;\n db = null;\n /**\n * Creates a new instance\n * @param dbName The name of the IndexedDB database\n * @param storeName The name of the object store\n * @param dbVersion The database version\n */\n constructor(dbName = 'soidc', storeName = 'session', dbVersion = 1) {\n this.dbName = dbName;\n this.storeName = storeName;\n this.dbVersion = dbVersion;\n }\n /**\n * Initializes the IndexedDB database\n * @returns Promise that resolves when the database is ready\n */\n async init() {\n return new Promise((resolve, reject) => {\n const request = indexedDB.open(this.dbName, this.dbVersion);\n request.onerror = (event) => {\n reject(new Error(`Database error: ${event.target.error}`));\n };\n request.onsuccess = (event) => {\n this.db = event.target.result;\n resolve(this);\n };\n request.onupgradeneeded = (event) => {\n const db = event.target.result;\n // Check if the object store already exists, if not create it\n if (!db.objectStoreNames.contains(this.storeName)) {\n db.createObjectStore(this.storeName);\n }\n };\n });\n }\n /**\n * Stores any value in the database with the given ID as key\n * @param id The identifier/key for the value\n * @param value The value to store\n */\n async setItem(id, value) {\n if (!this.db) {\n await this.init();\n }\n return new Promise((resolve, reject) => {\n const transaction = this.db.transaction(this.storeName, 'readwrite');\n // Handle transation\n transaction.oncomplete = () => {\n resolve();\n };\n transaction.onerror = (event) => {\n reject(new Error(`Transaction error for setItem(${id},...): ${event.target.error}`));\n };\n transaction.onabort = (event) => {\n reject(new Error(`Transaction aborted for setItem(${id},...): ${event.target.error}`));\n };\n // Perform the request within the transaction\n const store = transaction.objectStore(this.storeName);\n store.put(value, id);\n });\n }\n /**\n * Retrieves a value from the database by ID\n * @param id The identifier/key for the value\n * @returns The stored value or null if not found\n */\n async getItem(id) {\n if (!this.db) {\n await this.init();\n }\n return new Promise((resolve, reject) => {\n const transaction = this.db.transaction(this.storeName, 'readonly');\n // Handle transation\n transaction.onerror = (event) => {\n reject(new Error(`Transaction error for getItem(${id}): ${event.target.error}`));\n };\n transaction.onabort = (event) => {\n reject(new Error(`Transaction aborted for getItem(${id}): ${event.target.error}`));\n };\n // Perform the request within the transaction\n const store = transaction.objectStore(this.storeName);\n const request = store.get(id);\n request.onsuccess = () => {\n resolve(request.result || null);\n };\n });\n }\n /**\n * Removes an item from the database\n * @param id The identifier of the item to remove\n */\n async deleteItem(id) {\n if (!this.db) {\n await this.init();\n }\n return new Promise((resolve, reject) => {\n const transaction = this.db.transaction(this.storeName, 'readwrite');\n // Handle transation\n transaction.oncomplete = () => {\n resolve();\n };\n transaction.onerror = (event) => {\n reject(new Error(`Transaction error for deleteItem(${id}): ${event.target.error}`));\n };\n transaction.onabort = (event) => {\n reject(new Error(`Transaction aborted for deleteItem(${id}): ${event.target.error}`));\n };\n // Perform the request within the transaction\n const store = transaction.objectStore(this.storeName);\n store.delete(id);\n });\n }\n /**\n * Clears all items from the database\n */\n async clear() {\n if (!this.db) {\n await this.init();\n }\n return new Promise((resolve, reject) => {\n const transaction = this.db.transaction(this.storeName, 'readwrite');\n // Handle transation\n transaction.oncomplete = () => {\n resolve();\n };\n transaction.onerror = (event) => {\n reject(new Error(`Transaction error for clear(): ${event.target.error}`));\n };\n transaction.onabort = (event) => {\n reject(new Error(`Transaction aborted for clear(): ${event.target.error}`));\n };\n // Perform the request within the transaction\n const store = transaction.objectStore(this.storeName);\n store.clear();\n });\n }\n /**\n * Closes the database connection\n */\n close() {\n if (this.db) {\n this.db.close();\n this.db = null;\n }\n }\n}\n\n/**\n * This Session provides background token refreshing using a Web Worker.\n */\nclass WebWorkerSession extends SessionCore {\n worker;\n constructor(clientDetails, sessionOptions) {\n const database = new SessionIDB();\n const options = { ...sessionOptions, database };\n super(clientDetails, options);\n // Allow consumer to provide worker URL, or use default\n const workerUrl = sessionOptions?.workerUrl ?? getWorkerUrl();\n this.worker = new SharedWorker(workerUrl, { type: 'module' });\n this.worker.port.onmessage = (event) => {\n this.handleWorkerMessage(event.data).catch(console.error);\n };\n window.addEventListener('beforeunload', () => {\n this.worker.port.postMessage({ type: RefreshMessageTypes.DISCONNECT });\n });\n }\n async handleWorkerMessage(data) {\n const { type, payload, error } = data;\n switch (type) {\n case RefreshMessageTypes.TOKEN_DETAILS:\n const wasActive = this.isActive;\n await this.setTokenDetails(payload.tokenDetails);\n if (wasActive !== this.isActive)\n this.dispatchStateChangeEvent();\n if (this.refreshPromise && this.resolveRefresh) {\n this.resolveRefresh();\n this.clearRefreshPromise();\n }\n break;\n case RefreshMessageTypes.ERROR_ON_REFRESH:\n if (this.isActive)\n this.dispatchExpirationWarningEvent();\n if (this.refreshPromise && this.rejectRefresh) {\n if (this.isActive) {\n this.rejectRefresh(new Error(error || 'Token refresh failed'));\n }\n else {\n this.rejectRefresh(new Error(\"No session to restore\"));\n }\n this.clearRefreshPromise();\n }\n break;\n case RefreshMessageTypes.EXPIRED:\n if (this.isActive) {\n this.dispatchExpirationEvent();\n await this.logout();\n }\n if (this.refreshPromise && this.rejectRefresh) {\n this.rejectRefresh(new Error(error || 'Token refresh failed'));\n this.clearRefreshPromise();\n }\n break;\n }\n }\n ;\n async handleRedirectFromLogin() {\n await super.handleRedirectFromLogin();\n if (this.isActive) { // If login was successful, tell the worker to schedule refreshing\n this.worker.port.postMessage({\n type: RefreshMessageTypes.SCHEDULE,\n payload: { ...this.getTokenDetails(), expires_in: this.getExpiresIn() }\n });\n }\n }\n async restore() {\n if (this.refreshPromise) {\n return this.refreshPromise;\n }\n this.refreshPromise = new Promise((resolve, reject) => {\n this.resolveRefresh = resolve;\n this.rejectRefresh = reject;\n });\n this.worker.port.postMessage({ type: RefreshMessageTypes.REFRESH });\n return this.refreshPromise;\n }\n async logout() {\n this.worker.port.postMessage({ type: RefreshMessageTypes.STOP });\n await super.logout();\n }\n}\n\nexport { WebWorkerSession as Session, SessionEvents, SessionIDB };\n//# sourceMappingURL=index.js.map\n","var crypto$1 = crypto;\nconst isCryptoKey = (key) => key instanceof CryptoKey;\n\nconst digest = async (algorithm, data) => {\n const subtleDigest = `SHA-${algorithm.slice(-3)}`;\n return new Uint8Array(await crypto$1.subtle.digest(subtleDigest, data));\n};\nvar digest$1 = digest;\n\nconst encoder = new TextEncoder();\nconst decoder = new TextDecoder();\nfunction concat(...buffers) {\n const size = buffers.reduce((acc, { length }) => acc + length, 0);\n const buf = new Uint8Array(size);\n let i = 0;\n for (const buffer of buffers) {\n buf.set(buffer, i);\n i += buffer.length;\n }\n return buf;\n}\n\nconst encodeBase64 = (input) => {\n let unencoded = input;\n if (typeof unencoded === 'string') {\n unencoded = encoder.encode(unencoded);\n }\n const CHUNK_SIZE = 0x8000;\n const arr = [];\n for (let i = 0; i < unencoded.length; i += CHUNK_SIZE) {\n arr.push(String.fromCharCode.apply(null, unencoded.subarray(i, i + CHUNK_SIZE)));\n }\n return btoa(arr.join(''));\n};\nconst encode = (input) => {\n return encodeBase64(input).replace(/=/g, '').replace(/\\+/g, '-').replace(/\\//g, '_');\n};\nconst decodeBase64 = (encoded) => {\n const binary = atob(encoded);\n const bytes = new Uint8Array(binary.length);\n for (let i = 0; i < binary.length; i++) {\n bytes[i] = binary.charCodeAt(i);\n }\n return bytes;\n};\nconst decode$1 = (input) => {\n let encoded = input;\n if (encoded instanceof Uint8Array) {\n encoded = decoder.decode(encoded);\n }\n encoded = encoded.replace(/-/g, '+').replace(/_/g, '/').replace(/\\s/g, '');\n try {\n return decodeBase64(encoded);\n }\n catch {\n throw new TypeError('The input to be decoded is not correctly encoded.');\n }\n};\n\nclass JOSEError extends Error {\n constructor(message, options) {\n super(message, options);\n this.code = 'ERR_JOSE_GENERIC';\n this.name = this.constructor.name;\n Error.captureStackTrace?.(this, this.constructor);\n }\n}\nJOSEError.code = 'ERR_JOSE_GENERIC';\nclass JWTClaimValidationFailed extends JOSEError {\n constructor(message, payload, claim = 'unspecified', reason = 'unspecified') {\n super(message, { cause: { claim, reason, payload } });\n this.code = 'ERR_JWT_CLAIM_VALIDATION_FAILED';\n this.claim = claim;\n this.reason = reason;\n this.payload = payload;\n }\n}\nJWTClaimValidationFailed.code = 'ERR_JWT_CLAIM_VALIDATION_FAILED';\nclass JWTExpired extends JOSEError {\n constructor(message, payload, claim = 'unspecified', reason = 'unspecified') {\n super(message, { cause: { claim, reason, payload } });\n this.code = 'ERR_JWT_EXPIRED';\n this.claim = claim;\n this.reason = reason;\n this.payload = payload;\n }\n}\nJWTExpired.code = 'ERR_JWT_EXPIRED';\nclass JOSEAlgNotAllowed extends JOSEError {\n constructor() {\n super(...arguments);\n this.code = 'ERR_JOSE_ALG_NOT_ALLOWED';\n }\n}\nJOSEAlgNotAllowed.code = 'ERR_JOSE_ALG_NOT_ALLOWED';\nclass JOSENotSupported extends JOSEError {\n constructor() {\n super(...arguments);\n this.code = 'ERR_JOSE_NOT_SUPPORTED';\n }\n}\nJOSENotSupported.code = 'ERR_JOSE_NOT_SUPPORTED';\nclass JWEDecryptionFailed extends JOSEError {\n constructor(message = 'decryption operation failed', options) {\n super(message, options);\n this.code = 'ERR_JWE_DECRYPTION_FAILED';\n }\n}\nJWEDecryptionFailed.code = 'ERR_JWE_DECRYPTION_FAILED';\nclass JWEInvalid extends JOSEError {\n constructor() {\n super(...arguments);\n this.code = 'ERR_JWE_INVALID';\n }\n}\nJWEInvalid.code = 'ERR_JWE_INVALID';\nclass JWSInvalid extends JOSEError {\n constructor() {\n super(...arguments);\n this.code = 'ERR_JWS_INVALID';\n }\n}\nJWSInvalid.code = 'ERR_JWS_INVALID';\nclass JWTInvalid extends JOSEError {\n constructor() {\n super(...arguments);\n this.code = 'ERR_JWT_INVALID';\n }\n}\nJWTInvalid.code = 'ERR_JWT_INVALID';\nclass JWKInvalid extends JOSEError {\n constructor() {\n super(...arguments);\n this.code = 'ERR_JWK_INVALID';\n }\n}\nJWKInvalid.code = 'ERR_JWK_INVALID';\nclass JWKSInvalid extends JOSEError {\n constructor() {\n super(...arguments);\n this.code = 'ERR_JWKS_INVALID';\n }\n}\nJWKSInvalid.code = 'ERR_JWKS_INVALID';\nclass JWKSNoMatchingKey extends JOSEError {\n constructor(message = 'no applicable key found in the JSON Web Key Set', options) {\n super(message, options);\n this.code = 'ERR_JWKS_NO_MATCHING_KEY';\n }\n}\nJWKSNoMatchingKey.code = 'ERR_JWKS_NO_MATCHING_KEY';\nclass JWKSMultipleMatchingKeys extends JOSEError {\n constructor(message = 'multiple matching keys found in the JSON Web Key Set', options) {\n super(message, options);\n this.code = 'ERR_JWKS_MULTIPLE_MATCHING_KEYS';\n }\n}\nJWKSMultipleMatchingKeys.code = 'ERR_JWKS_MULTIPLE_MATCHING_KEYS';\nclass JWKSTimeout extends JOSEError {\n constructor(message = 'request timed out', options) {\n super(message, options);\n this.code = 'ERR_JWKS_TIMEOUT';\n }\n}\nJWKSTimeout.code = 'ERR_JWKS_TIMEOUT';\nclass JWSSignatureVerificationFailed extends JOSEError {\n constructor(message = 'signature verification failed', options) {\n super(message, options);\n this.code = 'ERR_JWS_SIGNATURE_VERIFICATION_FAILED';\n }\n}\nJWSSignatureVerificationFailed.code = 'ERR_JWS_SIGNATURE_VERIFICATION_FAILED';\n\nfunction unusable(name, prop = 'algorithm.name') {\n return new TypeError(`CryptoKey does not support this operation, its ${prop} must be ${name}`);\n}\nfunction isAlgorithm(algorithm, name) {\n return algorithm.name === name;\n}\nfunction getHashLength(hash) {\n return parseInt(hash.name.slice(4), 10);\n}\nfunction getNamedCurve(alg) {\n switch (alg) {\n case 'ES256':\n return 'P-256';\n case 'ES384':\n return 'P-384';\n case 'ES512':\n return 'P-521';\n default:\n throw new Error('unreachable');\n }\n}\nfunction checkUsage(key, usages) {\n if (usages.length && !usages.some((expected) => key.usages.includes(expected))) {\n let msg = 'CryptoKey does not support this operation, its usages must include ';\n if (usages.length > 2) {\n const last = usages.pop();\n msg += `one of ${usages.join(', ')}, or ${last}.`;\n }\n else if (usages.length === 2) {\n msg += `one of ${usages[0]} or ${usages[1]}.`;\n }\n else {\n msg += `${usages[0]}.`;\n }\n throw new TypeError(msg);\n }\n}\nfunction checkSigCryptoKey(key, alg, ...usages) {\n switch (alg) {\n case 'HS256':\n case 'HS384':\n case 'HS512': {\n if (!isAlgorithm(key.algorithm, 'HMAC'))\n throw unusable('HMAC');\n const expected = parseInt(alg.slice(2), 10);\n const actual = getHashLength(key.algorithm.hash);\n if (actual !== expected)\n throw unusable(`SHA-${expected}`, 'algorithm.hash');\n break;\n }\n case 'RS256':\n case 'RS384':\n case 'RS512': {\n if (!isAlgorithm(key.algorithm, 'RSASSA-PKCS1-v1_5'))\n throw unusable('RSASSA-PKCS1-v1_5');\n const expected = parseInt(alg.slice(2), 10);\n const actual = getHashLength(key.algorithm.hash);\n if (actual !== expected)\n throw unusable(`SHA-${expected}`, 'algorithm.hash');\n break;\n }\n case 'PS256':\n case 'PS384':\n case 'PS512': {\n if (!isAlgorithm(key.algorithm, 'RSA-PSS'))\n throw unusable('RSA-PSS');\n const expected = parseInt(alg.slice(2), 10);\n const actual = getHashLength(key.algorithm.hash);\n if (actual !== expected)\n throw unusable(`SHA-${expected}`, 'algorithm.hash');\n break;\n }\n case 'EdDSA': {\n if (key.algorithm.name !== 'Ed25519' && key.algorithm.name !== 'Ed448') {\n throw unusable('Ed25519 or Ed448');\n }\n break;\n }\n case 'Ed25519': {\n if (!isAlgorithm(key.algorithm, 'Ed25519'))\n throw unusable('Ed25519');\n break;\n }\n case 'ES256':\n case 'ES384':\n case 'ES512': {\n if (!isAlgorithm(key.algorithm, 'ECDSA'))\n throw unusable('ECDSA');\n const expected = getNamedCurve(alg);\n const actual = key.algorithm.namedCurve;\n if (actual !== expected)\n throw unusable(expected, 'algorithm.namedCurve');\n break;\n }\n default:\n throw new TypeError('CryptoKey does not support this operation');\n }\n checkUsage(key, usages);\n}\n\nfunction message(msg, actual, ...types) {\n types = types.filter(Boolean);\n if (types.length > 2) {\n const last = types.pop();\n msg += `one of type ${types.join(', ')}, or ${last}.`;\n }\n else if (types.length === 2) {\n msg += `one of type ${types[0]} or ${types[1]}.`;\n }\n else {\n msg += `of type ${types[0]}.`;\n }\n if (actual == null) {\n msg += ` Received ${actual}`;\n }\n else if (typeof actual === 'function' && actual.name) {\n msg += ` Received function ${actual.name}`;\n }\n else if (typeof actual === 'object' && actual != null) {\n if (actual.constructor?.name) {\n msg += ` Received an instance of ${actual.constructor.name}`;\n }\n }\n return msg;\n}\nvar invalidKeyInput = (actual, ...types) => {\n return message('Key must be ', actual, ...types);\n};\nfunction withAlg(alg, actual, ...types) {\n return message(`Key for the ${alg} algorithm must be `, actual, ...types);\n}\n\nvar isKeyLike = (key) => {\n if (isCryptoKey(key)) {\n return true;\n }\n return key?.[Symbol.toStringTag] === 'KeyObject';\n};\nconst types = ['CryptoKey'];\n\nconst isDisjoint = (...headers) => {\n const sources = headers.filter(Boolean);\n if (sources.length === 0 || sources.length === 1) {\n return true;\n }\n let acc;\n for (const header of sources) {\n const parameters = Object.keys(header);\n if (!acc || acc.size === 0) {\n acc = new Set(parameters);\n continue;\n }\n for (const parameter of parameters) {\n if (acc.has(parameter)) {\n return false;\n }\n acc.add(parameter);\n }\n }\n return true;\n};\nvar isDisjoint$1 = isDisjoint;\n\nfunction isObjectLike(value) {\n return typeof value === 'object' && value !== null;\n}\nfunction isObject(input) {\n if (!isObjectLike(input) || Object.prototype.toString.call(input) !== '[object Object]') {\n return false;\n }\n if (Object.getPrototypeOf(input) === null) {\n return true;\n }\n let proto = input;\n while (Object.getPrototypeOf(proto) !== null) {\n proto = Object.getPrototypeOf(proto);\n }\n return Object.getPrototypeOf(input) === proto;\n}\n\nvar checkKeyLength = (alg, key) => {\n if (alg.startsWith('RS') || alg.startsWith('PS')) {\n const { modulusLength } = key.algorithm;\n if (typeof modulusLength !== 'number' || modulusLength < 2048) {\n throw new TypeError(`${alg} requires key modulusLength to be 2048 bits or larger`);\n }\n }\n};\n\nfunction isJWK(key) {\n return isObject(key) && typeof key.kty === 'string';\n}\nfunction isPrivateJWK(key) {\n return key.kty !== 'oct' && typeof key.d === 'string';\n}\nfunction isPublicJWK(key) {\n return key.kty !== 'oct' && typeof key.d === 'undefined';\n}\nfunction isSecretJWK(key) {\n return isJWK(key) && key.kty === 'oct' && typeof key.k === 'string';\n}\n\nfunction subtleMapping(jwk) {\n let algorithm;\n let keyUsages;\n switch (jwk.kty) {\n case 'RSA': {\n switch (jwk.alg) {\n case 'PS256':\n case 'PS384':\n case 'PS512':\n algorithm = { name: 'RSA-PSS', hash: `SHA-${jwk.alg.slice(-3)}` };\n keyUsages = jwk.d ? ['sign'] : ['verify'];\n break;\n case 'RS256':\n case 'RS384':\n case 'RS512':\n algorithm = { name: 'RSASSA-PKCS1-v1_5', hash: `SHA-${jwk.alg.slice(-3)}` };\n keyUsages = jwk.d ? ['sign'] : ['verify'];\n break;\n case 'RSA-OAEP':\n case 'RSA-OAEP-256':\n case 'RSA-OAEP-384':\n case 'RSA-OAEP-512':\n algorithm = {\n name: 'RSA-OAEP',\n hash: `SHA-${parseInt(jwk.alg.slice(-3), 10) || 1}`,\n };\n keyUsages = jwk.d ? ['decrypt', 'unwrapKey'] : ['encrypt', 'wrapKey'];\n break;\n default:\n throw new JOSENotSupported('Invalid or unsupported JWK \"alg\" (Algorithm) Parameter value');\n }\n break;\n }\n case 'EC': {\n switch (jwk.alg) {\n case 'ES256':\n algorithm = { name: 'ECDSA', namedCurve: 'P-256' };\n keyUsages = jwk.d ? ['sign'] : ['verify'];\n break;\n case 'ES384':\n algorithm = { name: 'ECDSA', namedCurve: 'P-384' };\n keyUsages = jwk.d ? ['sign'] : ['verify'];\n break;\n case 'ES512':\n algorithm = { name: 'ECDSA', namedCurve: 'P-521' };\n keyUsages = jwk.d ? ['sign'] : ['verify'];\n break;\n case 'ECDH-ES':\n case 'ECDH-ES+A128KW':\n case 'ECDH-ES+A192KW':\n case 'ECDH-ES+A256KW':\n algorithm = { name: 'ECDH', namedCurve: jwk.crv };\n keyUsages = jwk.d ? ['deriveBits'] : [];\n break;\n default:\n throw new JOSENotSupported('Invalid or unsupported JWK \"alg\" (Algorithm) Parameter value');\n }\n break;\n }\n case 'OKP': {\n switch (jwk.alg) {\n case 'Ed25519':\n algorithm = { name: 'Ed25519' };\n keyUsages = jwk.d ? ['sign'] : ['verify'];\n break;\n case 'EdDSA':\n algorithm = { name: jwk.crv };\n keyUsages = jwk.d ? ['sign'] : ['verify'];\n break;\n case 'ECDH-ES':\n case 'ECDH-ES+A128KW':\n case 'ECDH-ES+A192KW':\n case 'ECDH-ES+A256KW':\n algorithm = { name: jwk.crv };\n keyUsages = jwk.d ? ['deriveBits'] : [];\n break;\n default:\n throw new JOSENotSupported('Invalid or unsupported JWK \"alg\" (Algorithm) Parameter value');\n }\n break;\n }\n default:\n throw new JOSENotSupported('Invalid or unsupported JWK \"kty\" (Key Type) Parameter value');\n }\n return { algorithm, keyUsages };\n}\nconst parse = async (jwk) => {\n if (!jwk.alg) {\n throw new TypeError('\"alg\" argument is required when \"jwk.alg\" is not present');\n }\n const { algorithm, keyUsages } = subtleMapping(jwk);\n const rest = [\n algorithm,\n jwk.ext ?? false,\n jwk.key_ops ?? keyUsages,\n ];\n const keyData = { ...jwk };\n delete keyData.alg;\n delete keyData.use;\n return crypto$1.subtle.importKey('jwk', keyData, ...rest);\n};\nvar asKeyObject = parse;\n\nconst exportKeyValue = (k) => decode$1(k);\nlet privCache;\nlet pubCache;\nconst isKeyObject = (key) => {\n return key?.[Symbol.toStringTag] === 'KeyObject';\n};\nconst importAndCache = async (cache, key, jwk, alg, freeze = false) => {\n let cached = cache.get(key);\n if (cached?.[alg]) {\n return cached[alg];\n }\n const cryptoKey = await asKeyObject({ ...jwk, alg });\n if (freeze)\n Object.freeze(key);\n if (!cached) {\n cache.set(key, { [alg]: cryptoKey });\n }\n else {\n cached[alg] = cryptoKey;\n }\n return cryptoKey;\n};\nconst normalizePublicKey = (key, alg) => {\n if (isKeyObject(key)) {\n let jwk = key.export({ format: 'jwk' });\n delete jwk.d;\n delete jwk.dp;\n delete jwk.dq;\n delete jwk.p;\n delete jwk.q;\n delete jwk.qi;\n if (jwk.k) {\n return exportKeyValue(jwk.k);\n }\n pubCache || (pubCache = new WeakMap());\n return importAndCache(pubCache, key, jwk, alg);\n }\n if (isJWK(key)) {\n if (key.k)\n return decode$1(key.k);\n pubCache || (pubCache = new WeakMap());\n const cryptoKey = importAndCache(pubCache, key, key, alg, true);\n return cryptoKey;\n }\n return key;\n};\nconst normalizePrivateKey = (key, alg) => {\n if (isKeyObject(key)) {\n let jwk = key.export({ format: 'jwk' });\n if (jwk.k) {\n return exportKeyValue(jwk.k);\n }\n privCache || (privCache = new WeakMap());\n return importAndCache(privCache, key, jwk, alg);\n }\n if (isJWK(key)) {\n if (key.k)\n return decode$1(key.k);\n privCache || (privCache = new WeakMap());\n const cryptoKey = importAndCache(privCache, key, key, alg, true);\n return cryptoKey;\n }\n return key;\n};\nvar normalize = { normalizePublicKey, normalizePrivateKey };\n\nasync function importJWK(jwk, alg) {\n if (!isObject(jwk)) {\n throw new TypeError('JWK must be an object');\n }\n alg || (alg = jwk.alg);\n switch (jwk.kty) {\n case 'oct':\n if (typeof jwk.k !== 'string' || !jwk.k) {\n throw new TypeError('missing \"k\" (Key Value) Parameter value');\n }\n return decode$1(jwk.k);\n case 'RSA':\n if ('oth' in jwk && jwk.oth !== undefined) {\n throw new JOSENotSupported('RSA JWK \"oth\" (Other Primes Info) Parameter value is not supported');\n }\n case 'EC':\n case 'OKP':\n return asKeyObject({ ...jwk, alg });\n default:\n throw new JOSENotSupported('Unsupported \"kty\" (Key Type) Parameter value');\n }\n}\n\nconst tag = (key) => key?.[Symbol.toStringTag];\nconst jwkMatchesOp = (alg, key, usage) => {\n if (key.use !== undefined && key.use !== 'sig') {\n throw new TypeError('Invalid key for this operation, when present its use must be sig');\n }\n if (key.key_ops !== undefined && key.key_ops.includes?.(usage) !== true) {\n throw new TypeError(`Invalid key for this operation, when present its key_ops must include ${usage}`);\n }\n if (key.alg !== undefined && key.alg !== alg) {\n throw new TypeError(`Invalid key for this operation, when present its alg must be ${alg}`);\n }\n return true;\n};\nconst symmetricTypeCheck = (alg, key, usage, allowJwk) => {\n if (key instanceof Uint8Array)\n return;\n if (allowJwk && isJWK(key)) {\n if (isSecretJWK(key) && jwkMatchesOp(alg, key, usage))\n return;\n throw new TypeError(`JSON Web Key for symmetric algorithms must have JWK \"kty\" (Key Type) equal to \"oct\" and the JWK \"k\" (Key Value) present`);\n }\n if (!isKeyLike(key)) {\n throw new TypeError(withAlg(alg, key, ...types, 'Uint8Array', allowJwk ? 'JSON Web Key' : null));\n }\n if (key.type !== 'secret') {\n throw new TypeError(`${tag(key)} instances for symmetric algorithms must be of type \"secret\"`);\n }\n};\nconst asymmetricTypeCheck = (alg, key, usage, allowJwk) => {\n if (allowJwk && isJWK(key)) {\n switch (usage) {\n case 'sign':\n if (isPrivateJWK(key) && jwkMatchesOp(alg, key, usage))\n return;\n throw new TypeError(`JSON Web Key for this operation be a private JWK`);\n case 'verify':\n if (isPublicJWK(key) && jwkMatchesOp(alg, key, usage))\n return;\n throw new TypeError(`JSON Web Key for this operation be a public JWK`);\n }\n }\n if (!isKeyLike(key)) {\n throw new TypeError(withAlg(alg, key, ...types, allowJwk ? 'JSON Web Key' : null));\n }\n if (key.type === 'secret') {\n throw new TypeError(`${tag(key)} instances for asymmetric algorithms must not be of type \"secret\"`);\n }\n if (usage === 'sign' && key.type === 'public') {\n throw new TypeError(`${tag(key)} instances for asymmetric algorithm signing must be of type \"private\"`);\n }\n if (usage === 'decrypt' && key.type === 'public') {\n throw new TypeError(`${tag(key)} instances for asymmetric algorithm decryption must be of type \"private\"`);\n }\n if (key.algorithm && usage === 'verify' && key.type === 'private') {\n throw new TypeError(`${tag(key)} instances for asymmetric algorithm verifying must be of type \"public\"`);\n }\n if (key.algorithm && usage === 'encrypt' && key.type === 'private') {\n throw new TypeError(`${tag(key)} instances for asymmetric algorithm encryption must be of type \"public\"`);\n }\n};\nfunction checkKeyType(allowJwk, alg, key, usage) {\n const symmetric = alg.startsWith('HS') ||\n alg === 'dir' ||\n alg.startsWith('PBES2') ||\n /^A\\d{3}(?:GCM)?KW$/.test(alg);\n if (symmetric) {\n symmetricTypeCheck(alg, key, usage, allowJwk);\n }\n else {\n asymmetricTypeCheck(alg, key, usage, allowJwk);\n }\n}\ncheckKeyType.bind(undefined, false);\nconst checkKeyTypeWithJwk = checkKeyType.bind(undefined, true);\n\nfunction validateCrit(Err, recognizedDefault, recognizedOption, protectedHeader, joseHeader) {\n if (joseHeader.crit !== undefined && protectedHeader?.crit === undefined) {\n throw new Err('\"crit\" (Critical) Header Parameter MUST be integrity protected');\n }\n if (!protectedHeader || protectedHeader.crit === undefined) {\n return new Set();\n }\n if (!Array.isArray(protectedHeader.crit) ||\n protectedHeader.crit.length === 0 ||\n protectedHeader.crit.some((input) => typeof input !== 'string' || input.length === 0)) {\n throw new Err('\"crit\" (Critical) Header Parameter MUST be an array of non-empty strings when present');\n }\n let recognized;\n if (recognizedOption !== undefined) {\n recognized = new Map([...Object.entries(recognizedOption), ...recognizedDefault.entries()]);\n }\n else {\n recognized = recognizedDefault;\n }\n for (const parameter of protectedHeader.crit) {\n if (!recognized.has(parameter)) {\n throw new JOSENotSupported(`Extension Header Parameter \"${parameter}\" is not recognized`);\n }\n if (joseHeader[parameter] === undefined) {\n throw new Err(`Extension Header Parameter \"${parameter}\" is missing`);\n }\n if (recognized.get(parameter) && protectedHeader[parameter] === undefined) {\n throw new Err(`Extension Header Parameter \"${parameter}\" MUST be integrity protected`);\n }\n }\n return new Set(protectedHeader.crit);\n}\n\nconst validateAlgorithms = (option, algorithms) => {\n if (algorithms !== undefined &&\n (!Array.isArray(algorithms) || algorithms.some((s) => typeof s !== 'string'))) {\n throw new TypeError(`\"${option}\" option must be an array of strings`);\n }\n if (!algorithms) {\n return undefined;\n }\n return new Set(algorithms);\n};\nvar validateAlgorithms$1 = validateAlgorithms;\n\nconst keyToJWK = async (key) => {\n if (key instanceof Uint8Array) {\n return {\n kty: 'oct',\n k: encode(key),\n };\n }\n if (!isCryptoKey(key)) {\n throw new TypeError(invalidKeyInput(key, ...types, 'Uint8Array'));\n }\n if (!key.extractable) {\n throw new TypeError('non-extractable CryptoKey cannot be exported as a JWK');\n }\n const { ext, key_ops, alg, use, ...jwk } = await crypto$1.subtle.exportKey('jwk', key);\n return jwk;\n};\nvar keyToJWK$1 = keyToJWK;\n\nasync function exportJWK(key) {\n return keyToJWK$1(key);\n}\n\nfunction subtleDsa(alg, algorithm) {\n const hash = `SHA-${alg.slice(-3)}`;\n switch (alg) {\n case 'HS256':\n case 'HS384':\n case 'HS512':\n return { hash, name: 'HMAC' };\n case 'PS256':\n case 'PS384':\n case 'PS512':\n return { hash, name: 'RSA-PSS', saltLength: alg.slice(-3) >> 3 };\n case 'RS256':\n case 'RS384':\n case 'RS512':\n return { hash, name: 'RSASSA-PKCS1-v1_5' };\n case 'ES256':\n case 'ES384':\n case 'ES512':\n return { hash, name: 'ECDSA', namedCurve: algorithm.namedCurve };\n case 'Ed25519':\n return { name: 'Ed25519' };\n case 'EdDSA':\n return { name: algorithm.name };\n default:\n throw new JOSENotSupported(`alg ${alg} is not supported either by JOSE or your javascript runtime`);\n }\n}\n\nasync function getCryptoKey(alg, key, usage) {\n if (usage === 'sign') {\n key = await normalize.normalizePrivateKey(key, alg);\n }\n if (usage === 'verify') {\n key = await normalize.normalizePublicKey(key, alg);\n }\n if (isCryptoKey(key)) {\n checkSigCryptoKey(key, alg, usage);\n return key;\n }\n if (key instanceof Uint8Array) {\n if (!alg.startsWith('HS')) {\n throw new TypeError(invalidKeyInput(key, ...types));\n }\n return crypto$1.subtle.importKey('raw', key, { hash: `SHA-${alg.slice(-3)}`, name: 'HMAC' }, false, [usage]);\n }\n throw new TypeError(invalidKeyInput(key, ...types, 'Uint8Array', 'JSON Web Key'));\n}\n\nconst verify = async (alg, key, signature, data) => {\n const cryptoKey = await getCryptoKey(alg, key, 'verify');\n checkKeyLength(alg, cryptoKey);\n const algorithm = subtleDsa(alg, cryptoKey.algorithm);\n try {\n return await crypto$1.subtle.verify(algorithm, cryptoKey, signature, data);\n }\n catch {\n return false;\n }\n};\nvar verify$1 = verify;\n\nasync function flattenedVerify(jws, key, options) {\n if (!isObject(jws)) {\n throw new JWSInvalid('Flattened JWS must be an object');\n }\n if (jws.protected === undefined && jws.header === undefined) {\n throw new JWSInvalid('Flattened JWS must have either of the \"protected\" or \"header\" members');\n }\n if (jws.protected !== undefined && typeof jws.protected !== 'string') {\n throw new JWSInvalid('JWS Protected Header incorrect type');\n }\n if (jws.payload === undefined) {\n throw new JWSInvalid('JWS Payload missing');\n }\n if (typeof jws.signature !== 'string') {\n throw new JWSInvalid('JWS Signature missing or incorrect type');\n }\n if (jws.header !== undefined && !isObject(jws.header)) {\n throw new JWSInvalid('JWS Unprotected Header incorrect type');\n }\n let parsedProt = {};\n if (jws.protected) {\n try {\n const protectedHeader = decode$1(jws.protected);\n parsedProt = JSON.parse(decoder.decode(protectedHeader));\n }\n catch {\n throw new JWSInvalid('JWS Protected Header is invalid');\n }\n }\n if (!isDisjoint$1(parsedProt, jws.header)) {\n throw new JWSInvalid('JWS Protected and JWS Unprotected Header Parameter names must be disjoint');\n }\n const joseHeader = {\n ...parsedProt,\n ...jws.header,\n };\n const extensions = validateCrit(JWSInvalid, new Map([['b64', true]]), options?.crit, parsedProt, joseHeader);\n let b64 = true;\n if (extensions.has('b64')) {\n b64 = parsedProt.b64;\n if (typeof b64 !== 'boolean') {\n throw new JWSInvalid('The \"b64\" (base64url-encode payload) Header Parameter must be a boolean');\n }\n }\n const { alg } = joseHeader;\n if (typeof alg !== 'string' || !alg) {\n throw new JWSInvalid('JWS \"alg\" (Algorithm) Header Parameter missing or invalid');\n }\n const algorithms = options && validateAlgorithms$1('algorithms', options.algorithms);\n if (algorithms && !algorithms.has(alg)) {\n throw new JOSEAlgNotAllowed('\"alg\" (Algorithm) Header Parameter value not allowed');\n }\n if (b64) {\n if (typeof jws.payload !== 'string') {\n throw new JWSInvalid('JWS Payload must be a string');\n }\n }\n else if (typeof jws.payload !== 'string' && !(jws.payload instanceof Uint8Array)) {\n throw new JWSInvalid('JWS Payload must be a string or an Uint8Array instance');\n }\n let resolvedKey = false;\n if (typeof key === 'function') {\n key = await key(parsedProt, jws);\n resolvedKey = true;\n checkKeyTypeWithJwk(alg, key, 'verify');\n if (isJWK(key)) {\n key = await importJWK(key, alg);\n }\n }\n else {\n checkKeyTypeWithJwk(alg, key, 'verify');\n }\n const data = concat(encoder.encode(jws.protected ?? ''), encoder.encode('.'), typeof jws.payload === 'string' ? encoder.encode(jws.payload) : jws.payload);\n let signature;\n try {\n signature = decode$1(jws.signature);\n }\n catch {\n throw new JWSInvalid('Failed to base64url decode the signature');\n }\n const verified = await verify$1(alg, key, signature, data);\n if (!verified) {\n throw new JWSSignatureVerificationFailed();\n }\n let payload;\n if (b64) {\n try {\n payload = decode$1(jws.payload);\n }\n catch {\n throw new JWSInvalid('Failed to base64url decode the payload');\n }\n }\n else if (typeof jws.payload === 'string') {\n payload = encoder.encode(jws.payload);\n }\n else {\n payload = jws.payload;\n }\n const result = { payload };\n if (jws.protected !== undefined) {\n result.protectedHeader = parsedProt;\n }\n if (jws.header !== undefined) {\n result.unprotectedHeader = jws.header;\n }\n if (resolvedKey) {\n return { ...result, key };\n }\n return result;\n}\n\nasync function compactVerify(jws, key, options) {\n if (jws instanceof Uint8Array) {\n jws = decoder.decode(jws);\n }\n if (typeof jws !== 'string') {\n throw new JWSInvalid('Compact JWS must be a string or Uint8Array');\n }\n const { 0: protectedHeader, 1: payload, 2: signature, length } = jws.split('.');\n if (length !== 3) {\n throw new JWSInvalid('Invalid Compact JWS');\n }\n const verified = await flattenedVerify({ payload, protected: protectedHeader, signature }, key, options);\n const result = { payload: verified.payload, protectedHeader: verified.protectedHeader };\n if (typeof key === 'function') {\n return { ...result, key: verified.key };\n }\n return result;\n}\n\nvar epoch = (date) => Math.floor(date.getTime() / 1000);\n\nconst minute = 60;\nconst hour = minute * 60;\nconst day = hour * 24;\nconst week = day * 7;\nconst year = day * 365.25;\nconst REGEX = /^(\\+|\\-)? ?(\\d+|\\d+\\.\\d+) ?(seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)(?: (ago|from now))?$/i;\nvar secs = (str) => {\n const matched = REGEX.exec(str);\n if (!matched || (matched[4] && matched[1])) {\n throw new TypeError('Invalid time period format');\n }\n const value = parseFloat(matched[2]);\n const unit = matched[3].toLowerCase();\n let numericDate;\n switch (unit) {\n case 'sec':\n case 'secs':\n case 'second':\n case 'seconds':\n case 's':\n numericDate = Math.round(value);\n break;\n case 'minute':\n case 'minutes':\n case 'min':\n case 'mins':\n case 'm':\n numericDate = Math.round(value * minute);\n break;\n case 'hour':\n case 'hours':\n case 'hr':\n case 'hrs':\n case 'h':\n numericDate = Math.round(value * hour);\n break;\n case 'day':\n case 'days':\n case 'd':\n numericDate = Math.round(value * day);\n break;\n case 'week':\n case 'weeks':\n case 'w':\n numericDate = Math.round(value * week);\n break;\n default:\n numericDate = Math.round(value * year);\n break;\n }\n if (matched[1] === '-' || matched[4] === 'ago') {\n return -numericDate;\n }\n return numericDate;\n};\n\nconst normalizeTyp = (value) => value.toLowerCase().replace(/^application\\//, '');\nconst checkAudiencePresence = (audPayload, audOption) => {\n if (typeof audPayload === 'string') {\n return audOption.includes(audPayload);\n }\n if (Array.isArray(audPayload)) {\n return audOption.some(Set.prototype.has.bind(new Set(audPayload)));\n }\n return false;\n};\nvar jwtPayload = (protectedHeader, encodedPayload, options = {}) => {\n let payload;\n try {\n payload = JSON.parse(decoder.decode(encodedPayload));\n }\n catch {\n }\n if (!isObject(payload)) {\n throw new JWTInvalid('JWT Claims Set must be a top-level JSON object');\n }\n const { typ } = options;\n if (typ &&\n (typeof protectedHeader.typ !== 'string' ||\n normalizeTyp(protectedHeader.typ) !== normalizeTyp(typ))) {\n throw new JWTClaimValidationFailed('unexpected \"typ\" JWT header value', payload, 'typ', 'check_failed');\n }\n const { requiredClaims = [], issuer, subject, audience, maxTokenAge } = options;\n const presenceCheck = [...requiredClaims];\n if (maxTokenAge !== undefined)\n presenceCheck.push('iat');\n if (audience !== undefined)\n presenceCheck.push('aud');\n if (subject !== undefined)\n presenceCheck.push('sub');\n if (issuer !== undefined)\n presenceCheck.push('iss');\n for (const claim of new Set(presenceCheck.reverse())) {\n if (!(claim in payload)) {\n throw new JWTClaimValidationFailed(`missing required \"${claim}\" claim`, payload, claim, 'missing');\n }\n }\n if (issuer &&\n !(Array.isArray(issuer) ? issuer : [issuer]).includes(payload.iss)) {\n throw new JWTClaimValidationFailed('unexpected \"iss\" claim value', payload, 'iss', 'check_failed');\n }\n if (subject && payload.sub !== subject) {\n throw new JWTClaimValidationFailed('unexpected \"sub\" claim value', payload, 'sub', 'check_failed');\n }\n if (audience &&\n !checkAudiencePresence(payload.aud, typeof audience === 'string' ? [audience] : audience)) {\n throw new JWTClaimValidationFailed('unexpected \"aud\" claim value', payload, 'aud', 'check_failed');\n }\n let tolerance;\n switch (typeof options.clockTolerance) {\n case 'string':\n tolerance = secs(options.clockTolerance);\n break;\n case 'number':\n tolerance = options.clockTolerance;\n break;\n case 'undefined':\n tolerance = 0;\n break;\n default:\n throw new TypeError('Invalid clockTolerance option type');\n }\n const { currentDate } = options;\n const now = epoch(currentDate || new Date());\n if ((payload.iat !== undefined || maxTokenAge) && typeof payload.iat !== 'number') {\n throw new JWTClaimValidationFailed('\"iat\" claim must be a number', payload, 'iat', 'invalid');\n }\n if (payload.nbf !== undefined) {\n if (typeof payload.nbf !== 'number') {\n throw new JWTClaimValidationFailed('\"nbf\" claim must be a number', payload, 'nbf', 'invalid');\n }\n if (payload.nbf > now + tolerance) {\n throw new JWTClaimValidationFailed('\"nbf\" claim timestamp check failed', payload, 'nbf', 'check_failed');\n }\n }\n if (payload.exp !== undefined) {\n if (typeof payload.exp !== 'number') {\n throw new JWTClaimValidationFailed('\"exp\" claim must be a number', payload, 'exp', 'invalid');\n }\n if (payload.exp <= now - tolerance) {\n throw new JWTExpired('\"exp\" claim timestamp check failed', payload, 'exp', 'check_failed');\n }\n }\n if (maxTokenAge) {\n const age = now - payload.iat;\n const max = typeof maxTokenAge === 'number' ? maxTokenAge : secs(maxTokenAge);\n if (age - tolerance > max) {\n throw new JWTExpired('\"iat\" claim timestamp check failed (too far in the past)', payload, 'iat', 'check_failed');\n }\n if (age < 0 - tolerance) {\n throw new JWTClaimValidationFailed('\"iat\" claim timestamp check failed (it should be in the past)', payload, 'iat', 'check_failed');\n }\n }\n return payload;\n};\n\nasync function jwtVerify(jwt, key, options) {\n const verified = await compactVerify(jwt, key, options);\n if (verified.protectedHeader.crit?.includes('b64') && verified.protectedHeader.b64 === false) {\n throw new JWTInvalid('JWTs MUST NOT use unencoded payload');\n }\n const payload = jwtPayload(verified.protectedHeader, verified.payload, options);\n const result = { payload, protectedHeader: verified.protectedHeader };\n if (typeof key === 'function') {\n return { ...result, key: verified.key };\n }\n return result;\n}\n\nconst sign = async (alg, key, data) => {\n const cryptoKey = await getCryptoKey(alg, key, 'sign');\n checkKeyLength(alg, cryptoKey);\n const signature = await crypto$1.subtle.sign(subtleDsa(alg, cryptoKey.algorithm), cryptoKey, data);\n return new Uint8Array(signature);\n};\nvar sign$1 = sign;\n\nclass FlattenedSign {\n constructor(payload) {\n if (!(payload instanceof Uint8Array)) {\n throw new TypeError('payload must be an instance of Uint8Array');\n }\n this._payload = payload;\n }\n setProtectedHeader(protectedHeader) {\n if (this._protectedHeader) {\n throw new TypeError('setProtectedHeader can only be called once');\n }\n this._protectedHeader = protectedHeader;\n return this;\n }\n setUnprotectedHeader(unprotectedHeader) {\n if (this._unprotectedHeader) {\n throw new TypeError('setUnprotectedHeader can only be called once');\n }\n this._unprotectedHeader = unprotectedHeader;\n return this;\n }\n async sign(key, options) {\n if (!this._protectedHeader && !this._unprotectedHeader) {\n throw new JWSInvalid('either setProtectedHeader or setUnprotectedHeader must be called before #sign()');\n }\n if (!isDisjoint$1(this._protectedHeader, this._unprotectedHeader)) {\n throw new JWSInvalid('JWS Protected and JWS Unprotected Header Parameter names must be disjoint');\n }\n const joseHeader = {\n ...this._protectedHeader,\n ...this._unprotectedHeader,\n };\n const extensions = validateCrit(JWSInvalid, new Map([['b64', true]]), options?.crit, this._protectedHeader, joseHeader);\n let b64 = true;\n if (extensions.has('b64')) {\n b64 = this._protectedHeader.b64;\n if (typeof b64 !== 'boolean') {\n throw new JWSInvalid('The \"b64\" (base64url-encode payload) Header Parameter must be a boolean');\n }\n }\n const { alg } = joseHeader;\n if (typeof alg !== 'string' || !alg) {\n throw new JWSInvalid('JWS \"alg\" (Algorithm) Header Parameter missing or invalid');\n }\n checkKeyTypeWithJwk(alg, key, 'sign');\n let payload = this._payload;\n if (b64) {\n payload = encoder.encode(encode(payload));\n }\n let protectedHeader;\n if (this._protectedHeader) {\n protectedHeader = encoder.encode(encode(JSON.stringify(this._protectedHeader)));\n }\n else {\n protectedHeader = encoder.encode('');\n }\n const data = concat(protectedHeader, encoder.encode('.'), payload);\n const signature = await sign$1(alg, key, data);\n const jws = {\n signature: encode(signature),\n payload: '',\n };\n if (b64) {\n jws.payload = decoder.decode(payload);\n }\n if (this._unprotectedHeader) {\n jws.header = this._unprotectedHeader;\n }\n if (this._protectedHeader) {\n jws.protected = decoder.decode(protectedHeader);\n }\n return jws;\n }\n}\n\nclass CompactSign {\n constructor(payload) {\n this._flattened = new FlattenedSign(payload);\n }\n setProtectedHeader(protectedHeader) {\n this._flattened.setProtectedHeader(protectedHeader);\n return this;\n }\n async sign(key, options) {\n const jws = await this._flattened.sign(key, options);\n if (jws.payload === undefined) {\n throw new TypeError('use the flattened module for creating JWS with b64: false');\n }\n return `${jws.protected}.${jws.payload}.${jws.signature}`;\n }\n}\n\nfunction validateInput(label, input) {\n if (!Number.isFinite(input)) {\n throw new TypeError(`Invalid ${label} input`);\n }\n return input;\n}\nclass ProduceJWT {\n constructor(payload = {}) {\n if (!isObject(payload)) {\n throw new TypeError('JWT Claims Set MUST be an object');\n }\n this._payload = payload;\n }\n setIssuer(issuer) {\n this._payload = { ...this._payload, iss: issuer };\n return this;\n }\n setSubject(subject) {\n this._payload = { ...this._payload, sub: subject };\n return this;\n }\n setAudience(audience) {\n this._payload = { ...this._payload, aud: audience };\n return this;\n }\n setJti(jwtId) {\n this._payload = { ...this._payload, jti: jwtId };\n return this;\n }\n setNotBefore(input) {\n if (typeof input === 'number') {\n this._payload = { ...this._payload, nbf: validateInput('setNotBefore', input) };\n }\n else if (input instanceof Date) {\n this._payload = { ...this._payload, nbf: validateInput('setNotBefore', epoch(input)) };\n }\n else {\n this._payload = { ...this._payload, nbf: epoch(new Date()) + secs(input) };\n }\n return this;\n }\n setExpirationTime(input) {\n if (typeof input === 'number') {\n this._payload = { ...this._payload, exp: validateInput('setExpirationTime', input) };\n }\n else if (input instanceof Date) {\n this._payload = { ...this._payload, exp: validateInput('setExpirationTime', epoch(input)) };\n }\n else {\n this._payload = { ...this._payload, exp: epoch(new Date()) + secs(input) };\n }\n return this;\n }\n setIssuedAt(input) {\n if (typeof input === 'undefined') {\n this._payload = { ...this._payload, iat: epoch(new Date()) };\n }\n else if (input instanceof Date) {\n this._payload = { ...this._payload, iat: validateInput('setIssuedAt', epoch(input)) };\n }\n else if (typeof input === 'string') {\n this._payload = {\n ...this._payload,\n iat: validateInput('setIssuedAt', epoch(new Date()) + secs(input)),\n };\n }\n else {\n this._payload = { ...this._payload, iat: validateInput('setIssuedAt', input) };\n }\n return this;\n }\n}\n\nclass SignJWT extends ProduceJWT {\n setProtectedHeader(protectedHeader) {\n this._protectedHeader = protectedHeader;\n return this;\n }\n async sign(key, options) {\n const sig = new CompactSign(encoder.encode(JSON.stringify(this._payload)));\n sig.setProtectedHeader(this._protectedHeader);\n if (Array.isArray(this._protectedHeader?.crit) &&\n this._protectedHeader.crit.includes('b64') &&\n this._protectedHeader.b64 === false) {\n throw new JWTInvalid('JWTs MUST NOT use unencoded payload');\n }\n return sig.sign(key, options);\n }\n}\n\nconst check = (value, description) => {\n if (typeof value !== 'string' || !value) {\n throw new JWKInvalid(`${description} missing or invalid`);\n }\n};\nasync function calculateJwkThumbprint(jwk, digestAlgorithm) {\n if (!isObject(jwk)) {\n throw new TypeError('JWK must be an object');\n }\n digestAlgorithm ?? (digestAlgorithm = 'sha256');\n if (digestAlgorithm !== 'sha256' &&\n digestAlgorithm !== 'sha384' &&\n digestAlgorithm !== 'sha512') {\n throw new TypeError('digestAlgorithm must one of \"sha256\", \"sha384\", or \"sha512\"');\n }\n let components;\n switch (jwk.kty) {\n case 'EC':\n check(jwk.crv, '\"crv\" (Curve) Parameter');\n check(jwk.x, '\"x\" (X Coordinate) Parameter');\n check(jwk.y, '\"y\" (Y Coordinate) Parameter');\n components = { crv: jwk.crv, kty: jwk.kty, x: jwk.x, y: jwk.y };\n break;\n case 'OKP':\n check(jwk.crv, '\"crv\" (Subtype of Key Pair) Parameter');\n check(jwk.x, '\"x\" (Public Key) Parameter');\n components = { crv: jwk.crv, kty: jwk.kty, x: jwk.x };\n break;\n case 'RSA':\n check(jwk.e, '\"e\" (Exponent) Parameter');\n check(jwk.n, '\"n\" (Modulus) Parameter');\n components = { e: jwk.e, kty: jwk.kty, n: jwk.n };\n break;\n case 'oct':\n check(jwk.k, '\"k\" (Key Value) Parameter');\n components = { k: jwk.k, kty: jwk.kty };\n break;\n default:\n throw new JOSENotSupported('\"kty\" (Key Type) Parameter missing or unsupported');\n }\n const data = encoder.encode(JSON.stringify(components));\n return encode(await digest$1(digestAlgorithm, data));\n}\n\nfunction getKtyFromAlg(alg) {\n switch (typeof alg === 'string' && alg.slice(0, 2)) {\n case 'RS':\n case 'PS':\n return 'RSA';\n case 'ES':\n return 'EC';\n case 'Ed':\n return 'OKP';\n default:\n throw new JOSENotSupported('Unsupported \"alg\" value for a JSON Web Key Set');\n }\n}\nfunction isJWKSLike(jwks) {\n return (jwks &&\n typeof jwks === 'object' &&\n Array.isArray(jwks.keys) &&\n jwks.keys.every(isJWKLike));\n}\nfunction isJWKLike(key) {\n return isObject(key);\n}\nfunction clone(obj) {\n if (typeof structuredClone === 'function') {\n return structuredClone(obj);\n }\n return JSON.parse(JSON.stringify(obj));\n}\nclass LocalJWKSet {\n constructor(jwks) {\n this._cached = new WeakMap();\n if (!isJWKSLike(jwks)) {\n throw new JWKSInvalid('JSON Web Key Set malformed');\n }\n this._jwks = clone(jwks);\n }\n async getKey(protectedHeader, token) {\n const { alg, kid } = { ...protectedHeader, ...token?.header };\n const kty = getKtyFromAlg(alg);\n const candidates = this._jwks.keys.filter((jwk) => {\n let candidate = kty === jwk.kty;\n if (candidate && typeof kid === 'string') {\n candidate = kid === jwk.kid;\n }\n if (candidate && typeof jwk.alg === 'string') {\n candidate = alg === jwk.alg;\n }\n if (candidate && typeof jwk.use === 'string') {\n candidate = jwk.use === 'sig';\n }\n if (candidate && Array.isArray(jwk.key_ops)) {\n candidate = jwk.key_ops.includes('verify');\n }\n if (candidate) {\n switch (alg) {\n case 'ES256':\n candidate = jwk.crv === 'P-256';\n break;\n case 'ES256K':\n candidate = jwk.crv === 'secp256k1';\n break;\n case 'ES384':\n candidate = jwk.crv === 'P-384';\n break;\n case 'ES512':\n candidate = jwk.crv === 'P-521';\n break;\n case 'Ed25519':\n candidate = jwk.crv === 'Ed25519';\n break;\n case 'EdDSA':\n candidate = jwk.crv === 'Ed25519' || jwk.crv === 'Ed448';\n break;\n }\n }\n return candidate;\n });\n const { 0: jwk, length } = candidates;\n if (length === 0) {\n throw new JWKSNoMatchingKey();\n }\n if (length !== 1) {\n const error = new JWKSMultipleMatchingKeys();\n const { _cached } = this;\n error[Symbol.asyncIterator] = async function* () {\n for (const jwk of candidates) {\n try {\n yield await importWithAlgCache(_cached, jwk, alg);\n }\n catch { }\n }\n };\n throw error;\n }\n return importWithAlgCache(this._cached, jwk, alg);\n }\n}\nasync function importWithAlgCache(cache, jwk, alg) {\n const cached = cache.get(jwk) || cache.set(jwk, {}).get(jwk);\n if (cached[alg] === undefined) {\n const key = await importJWK({ ...jwk, ext: true }, alg);\n if (key instanceof Uint8Array || key.type !== 'public') {\n throw new JWKSInvalid('JSON Web Key Set members must be public keys');\n }\n cached[alg] = key;\n }\n return cached[alg];\n}\nfunction createLocalJWKSet(jwks) {\n const set = new LocalJWKSet(jwks);\n const localJWKSet = async (protectedHeader, token) => set.getKey(protectedHeader, token);\n Object.defineProperties(localJWKSet, {\n jwks: {\n value: () => clone(set._jwks),\n enumerable: true,\n configurable: false,\n writable: false,\n },\n });\n return localJWKSet;\n}\n\nconst fetchJwks = async (url, timeout, options) => {\n let controller;\n let id;\n let timedOut = false;\n if (typeof AbortController === 'function') {\n controller = new AbortController();\n id = setTimeout(() => {\n timedOut = true;\n controller.abort();\n }, timeout);\n }\n const response = await fetch(url.href, {\n signal: controller ? controller.signal : undefined,\n redirect: 'manual',\n headers: options.headers,\n }).catch((err) => {\n if (timedOut)\n throw new JWKSTimeout();\n throw err;\n });\n if (id !== undefined)\n clearTimeout(id);\n if (response.status !== 200) {\n throw new JOSEError('Expected 200 OK from the JSON Web Key Set HTTP response');\n }\n try {\n return await response.json();\n }\n catch {\n throw new JOSEError('Failed to parse the JSON Web Key Set HTTP response as JSON');\n }\n};\nvar fetchJwks$1 = fetchJwks;\n\nfunction isCloudflareWorkers() {\n return (typeof WebSocketPair !== 'undefined' ||\n (typeof navigator !== 'undefined' && navigator.userAgent === 'Cloudflare-Workers') ||\n (typeof EdgeRuntime !== 'undefined' && EdgeRuntime === 'vercel'));\n}\nlet USER_AGENT;\nif (typeof navigator === 'undefined' || !navigator.userAgent?.startsWith?.('Mozilla/5.0 ')) {\n const NAME = 'jose';\n const VERSION = 'v5.10.0';\n USER_AGENT = `${NAME}/${VERSION}`;\n}\nconst jwksCache = Symbol();\nfunction isFreshJwksCache(input, cacheMaxAge) {\n if (typeof input !== 'object' || input === null) {\n return false;\n }\n if (!('uat' in input) || typeof input.uat !== 'number' || Date.now() - input.uat >= cacheMaxAge) {\n return false;\n }\n if (!('jwks' in input) ||\n !isObject(input.jwks) ||\n !Array.isArray(input.jwks.keys) ||\n !Array.prototype.every.call(input.jwks.keys, isObject)) {\n return false;\n }\n return true;\n}\nclass RemoteJWKSet {\n constructor(url, options) {\n if (!(url instanceof URL)) {\n throw new TypeError('url must be an instance of URL');\n }\n this._url = new URL(url.href);\n this._options = { agent: options?.agent, headers: options?.headers };\n this._timeoutDuration =\n typeof options?.timeoutDuration === 'number' ? options?.timeoutDuration : 5000;\n this._cooldownDuration =\n typeof options?.cooldownDuration === 'number' ? options?.cooldownDuration : 30000;\n this._cacheMaxAge = typeof options?.cacheMaxAge === 'number' ? options?.cacheMaxAge : 600000;\n if (options?.[jwksCache] !== undefined) {\n this._cache = options?.[jwksCache];\n if (isFreshJwksCache(options?.[jwksCache], this._cacheMaxAge)) {\n this._jwksTimestamp = this._cache.uat;\n this._local = createLocalJWKSet(this._cache.jwks);\n }\n }\n }\n coolingDown() {\n return typeof this._jwksTimestamp === 'number'\n ? Date.now() < this._jwksTimestamp + this._cooldownDuration\n : false;\n }\n fresh() {\n return typeof this._jwksTimestamp === 'number'\n ? Date.now() < this._jwksTimestamp + this._cacheMaxAge\n : false;\n }\n async getKey(protectedHeader, token) {\n if (!this._local || !this.fresh()) {\n await this.reload();\n }\n try {\n return await this._local(protectedHeader, token);\n }\n catch (err) {\n if (err instanceof JWKSNoMatchingKey) {\n if (this.coolingDown() === false) {\n await this.reload();\n return this._local(protectedHeader, token);\n }\n }\n throw err;\n }\n }\n async reload() {\n if (this._pendingFetch && isCloudflareWorkers()) {\n this._pendingFetch = undefined;\n }\n const headers = new Headers(this._options.headers);\n if (USER_AGENT && !headers.has('User-Agent')) {\n headers.set('User-Agent', USER_AGENT);\n this._options.headers = Object.fromEntries(headers.entries());\n }\n this._pendingFetch || (this._pendingFetch = fetchJwks$1(this._url, this._timeoutDuration, this._options)\n .then((json) => {\n this._local = createLocalJWKSet(json);\n if (this._cache) {\n this._cache.uat = Date.now();\n this._cache.jwks = json;\n }\n this._jwksTimestamp = Date.now();\n this._pendingFetch = undefined;\n })\n .catch((err) => {\n this._pendingFetch = undefined;\n throw err;\n }));\n await this._pendingFetch;\n }\n}\nfunction createRemoteJWKSet(url, options) {\n const set = new RemoteJWKSet(url, options);\n const remoteJWKSet = async (protectedHeader, token) => set.getKey(protectedHeader, token);\n Object.defineProperties(remoteJWKSet, {\n coolingDown: {\n get: () => set.coolingDown(),\n enumerable: true,\n configurable: false,\n },\n fresh: {\n get: () => set.fresh(),\n enumerable: true,\n configurable: false,\n },\n reload: {\n value: () => set.reload(),\n enumerable: true,\n configurable: false,\n writable: false,\n },\n reloading: {\n get: () => !!set._pendingFetch,\n enumerable: true,\n configurable: false,\n },\n jwks: {\n value: () => set._local?.jwks(),\n enumerable: true,\n configurable: false,\n writable: false,\n },\n });\n return remoteJWKSet;\n}\n\nconst decode = decode$1;\n\nfunction decodeJwt(jwt) {\n if (typeof jwt !== 'string')\n throw new JWTInvalid('JWTs must use Compact JWS serialization, JWT must be a string');\n const { 1: payload, length } = jwt.split('.');\n if (length === 5)\n throw new JWTInvalid('Only JWTs using Compact JWS serialization can be decoded');\n if (length !== 3)\n throw new JWTInvalid('Invalid JWT');\n if (!payload)\n throw new JWTInvalid('JWTs must contain a payload');\n let decoded;\n try {\n decoded = decode(payload);\n }\n catch {\n throw new JWTInvalid('Failed to base64url decode the payload');\n }\n let result;\n try {\n result = JSON.parse(decoder.decode(decoded));\n }\n catch {\n throw new JWTInvalid('Failed to parse the decoded payload as JSON');\n }\n if (!isObject(result))\n throw new JWTInvalid('Invalid JWT Claims Set');\n return result;\n}\n\nfunction getModulusLengthOption(options) {\n const modulusLength = options?.modulusLength ?? 2048;\n if (typeof modulusLength !== 'number' || modulusLength < 2048) {\n throw new JOSENotSupported('Invalid or unsupported modulusLength option provided, 2048 bits or larger keys must be used');\n }\n return modulusLength;\n}\nasync function generateKeyPair$1(alg, options) {\n let algorithm;\n let keyUsages;\n switch (alg) {\n case 'PS256':\n case 'PS384':\n case 'PS512':\n algorithm = {\n name: 'RSA-PSS',\n hash: `SHA-${alg.slice(-3)}`,\n publicExponent: new Uint8Array([0x01, 0x00, 0x01]),\n modulusLength: getModulusLengthOption(options),\n };\n keyUsages = ['sign', 'verify'];\n break;\n case 'RS256':\n case 'RS384':\n case 'RS512':\n algorithm = {\n name: 'RSASSA-PKCS1-v1_5',\n hash: `SHA-${alg.slice(-3)}`,\n publicExponent: new Uint8Array([0x01, 0x00, 0x01]),\n modulusLength: getModulusLengthOption(options),\n };\n keyUsages = ['sign', 'verify'];\n break;\n case 'RSA-OAEP':\n case 'RSA-OAEP-256':\n case 'RSA-OAEP-384':\n case 'RSA-OAEP-512':\n algorithm = {\n name: 'RSA-OAEP',\n hash: `SHA-${parseInt(alg.slice(-3), 10) || 1}`,\n publicExponent: new Uint8Array([0x01, 0x00, 0x01]),\n modulusLength: getModulusLengthOption(options),\n };\n keyUsages = ['decrypt', 'unwrapKey', 'encrypt', 'wrapKey'];\n break;\n case 'ES256':\n algorithm = { name: 'ECDSA', namedCurve: 'P-256' };\n keyUsages = ['sign', 'verify'];\n break;\n case 'ES384':\n algorithm = { name: 'ECDSA', namedCurve: 'P-384' };\n keyUsages = ['sign', 'verify'];\n break;\n case 'ES512':\n algorithm = { name: 'ECDSA', namedCurve: 'P-521' };\n keyUsages = ['sign', 'verify'];\n break;\n case 'Ed25519':\n algorithm = { name: 'Ed25519' };\n keyUsages = ['sign', 'verify'];\n break;\n case 'EdDSA': {\n keyUsages = ['sign', 'verify'];\n const crv = options?.crv ?? 'Ed25519';\n switch (crv) {\n case 'Ed25519':\n case 'Ed448':\n algorithm = { name: crv };\n break;\n default:\n throw new JOSENotSupported('Invalid or unsupported crv option provided');\n }\n break;\n }\n case 'ECDH-ES':\n case 'ECDH-ES+A128KW':\n case 'ECDH-ES+A192KW':\n case 'ECDH-ES+A256KW': {\n keyUsages = ['deriveKey', 'deriveBits'];\n const crv = options?.crv ?? 'P-256';\n switch (crv) {\n case 'P-256':\n case 'P-384':\n case 'P-521': {\n algorithm = { name: 'ECDH', namedCurve: crv };\n break;\n }\n case 'X25519':\n case 'X448':\n algorithm = { name: crv };\n break;\n default:\n throw new JOSENotSupported('Invalid or unsupported crv option provided, supported values are P-256, P-384, P-521, X25519, and X448');\n }\n break;\n }\n default:\n throw new JOSENotSupported('Invalid or unsupported JWK \"alg\" (Algorithm) Parameter value');\n }\n return crypto$1.subtle.generateKey(algorithm, options?.extractable ?? false, keyUsages);\n}\n\nasync function generateKeyPair(alg, options) {\n return generateKeyPair$1(alg, options);\n}\n\n/**\n * When the client does not have a webid profile document, use this.\n *\n * @param registration_endpoint\n * @param redirect__uris\n * @returns\n */\nconst requestDynamicClientRegistration = async (registration_endpoint, client_details) => {\n // prepare dynamic client registration\n const client_registration_request_body = {\n ...client_details,\n grant_types: [\"authorization_code\", \"refresh_token\"],\n // id_token_signed_response_alg: \"ES256\", // omitting as NSS does not support ES256 while CSS does not support RS256\n token_endpoint_auth_method: \"none\",\n application_type: \"web\",\n subject_type: \"public\",\n };\n // register\n return fetch(registration_endpoint, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify(client_registration_request_body),\n });\n};\n\n/**\n * Login with the idp, using a provided `client_id` or dynamic client registration if none provided.\n *\n * @param idp\n * @param redirect_uri\n */\nconst redirectForLogin = async (idp, redirect_uri, client_details) => {\n // RFC 6749 - Section 3.1.2 - sanitize redirect_uri\n const redirect_uri_ = new URL(redirect_uri);\n const redirect_uri_sane = redirect_uri_.origin + redirect_uri_.pathname + redirect_uri_.search;\n // lookup openid configuration of idp\n const idp_origin = new URL(idp).origin;\n const openid_configuration = await fetch(`${idp_origin}/.well-known/openid-configuration`)\n .then((response) => {\n if (!response.ok) {\n throw new Error(`HTTP error! Status: ${response.status}`);\n }\n return response.json();\n });\n // RFC 9207 iss check: remember the identity provider (idp) / issuer (iss) - relaxing for trailing slash\n const issuer = openid_configuration[\"issuer\"];\n const trim_trailing_slash = (url) => (url.endsWith('/') ? url.slice(0, -1) : url);\n if (trim_trailing_slash(idp) !== trim_trailing_slash(issuer)) { // expected idp matches received issuer mod trailing slash?\n throw new Error(\"RFC 9207 - iss !== idp - \" + issuer + \" !== \" + idp);\n }\n sessionStorage.setItem(\"idp\", issuer);\n // remember token endpoint\n sessionStorage.setItem(\"token_endpoint\", openid_configuration[\"token_endpoint\"]);\n // remember jwks_uri for later token verification\n sessionStorage.setItem(\"jwks_uri\", openid_configuration[\"jwks_uri\"]);\n let client_id = client_details?.client_id;\n // no client_id => attempt dynamic registration\n if (!client_id) {\n // use registration endpoint\n const registration_endpoint = openid_configuration[\"registration_endpoint\"];\n // get client registration\n const client_registration = await requestDynamicClientRegistration(registration_endpoint, client_details ?? { redirect_uris: [redirect_uri_sane] })\n .then((response) => {\n if (!response.ok) {\n throw new Error(`HTTP error! Status: ${response.status}`);\n }\n return response.json();\n });\n client_id = client_registration[\"client_id\"];\n }\n // remember client_id if not URL\n try {\n new URL(client_id);\n }\n catch {\n sessionStorage.setItem(\"client_id\", client_id);\n }\n // RFC 7636 PKCE, remember code verifer\n const { pkce_code_verifier, pkce_code_challenge } = await getPKCEcode();\n sessionStorage.setItem(\"pkce_code_verifier\", pkce_code_verifier);\n // RFC 6749 OAuth 2.0 - CSRF token\n const csrf_token = window.crypto.randomUUID();\n sessionStorage.setItem(\"csrf_token\", csrf_token);\n // redirect to idp\n const redirect_to_idp = openid_configuration[\"authorization_endpoint\"] +\n `?response_type=code` +\n `&redirect_uri=${encodeURIComponent(redirect_uri_sane)}` +\n `&scope=openid offline_access webid` +\n `&client_id=${encodeURIComponent(client_id)}` +\n `&code_challenge_method=S256` +\n `&code_challenge=${pkce_code_challenge}` +\n `&state=${csrf_token}` +\n `&prompt=consent`; // this query parameter value MUST be present for CSS v7 to issue a refresh token ( // TODO open issue because prompting is the default behaviour but without this query param no refresh token is provided despite the \"remember this client\" box being checked)\n window.location.href = redirect_to_idp;\n};\n/**\n * RFC 7636 PKCE\n * @returns PKCE code verifier and PKCE code challenge\n */\nconst getPKCEcode = async () => {\n // create random string as PKCE code verifier\n const pkce_code_verifier = window.crypto.randomUUID() + \"-\" + window.crypto.randomUUID();\n // hash the verifier and base64URL encode as PKCE code challenge\n const digest = new Uint8Array(await window.crypto.subtle.digest(\"SHA-256\", new TextEncoder().encode(pkce_code_verifier)));\n const pkce_code_challenge = btoa(String.fromCharCode(...digest))\n .replace(/\\+/g, \"-\")\n .replace(/\\//g, \"_\")\n .replace(/=+$/, \"\");\n return { pkce_code_verifier, pkce_code_challenge };\n};\n/**\n * On incoming redirect from OpenID provider (idp/iss),\n * URL contains authrization code, issuer (idp) and state (csrf token),\n * get an access token for the authrization code.\n */\nconst onIncomingRedirect = async (client_details, database) => {\n const url = new URL(window.location.href);\n // authorization code\n const authorization_code = url.searchParams.get(\"code\");\n // if no code, session remains unauthenticated at this point\n if (authorization_code === null) {\n return { clientDetails: client_details };\n }\n // RFC 9207 issuer check\n const idp = sessionStorage.getItem(\"idp\");\n if (idp === null || url.searchParams.get(\"iss\") !== idp) {\n throw new Error(\"RFC 9207 - iss !== idp - \" + url.searchParams.get(\"iss\") + \" !== \" + idp);\n }\n // RFC 6749 OAuth 2.0\n if (url.searchParams.get(\"state\") !== sessionStorage.getItem(\"csrf_token\")) {\n throw new Error(\"RFC 6749 - state !== csrf_token - \" + url.searchParams.get(\"state\") + \" !== \" + sessionStorage.getItem(\"csrf_token\"));\n }\n // remove redirect query parameters from URL\n url.searchParams.delete(\"iss\");\n url.searchParams.delete(\"state\");\n url.searchParams.delete(\"code\");\n window.history.pushState({}, document.title, url.toString());\n // prepare token request\n const pkce_code_verifier = sessionStorage.getItem(\"pkce_code_verifier\");\n if (pkce_code_verifier === null) {\n throw new Error(\"Access Token Request preparation - Could not find in sessionStorage: pkce_code_verifier\");\n }\n const client_id = client_details?.client_id || sessionStorage.getItem(\"client_id\");\n if (!client_id) {\n throw new Error(\"Access Token Request preparation - Could not find in sessionStorage: client_id (dynamic registration)\");\n }\n const token_endpoint = sessionStorage.getItem(\"token_endpoint\");\n if (token_endpoint === null) {\n throw new Error(\"Access Token Request preparation - Could not find in sessionStorage: token_endpoint\");\n }\n // RFC 9449 DPoP\n const key_pair = await generateKeyPair(\"ES256\");\n // get access token\n const token_response = await requestAccessToken(authorization_code, pkce_code_verifier, url.toString(), client_id, token_endpoint, key_pair)\n .then((response) => {\n if (!response.ok) {\n throw new Error(`HTTP error! Status: ${response.status}`);\n }\n return response.json();\n });\n // verify access_token // ! Solid-OIDC specification says it should be a dpop-bound `id token` but implementations provide a dpop-bound `access token`\n const accessToken = token_response[\"access_token\"];\n const jwks_uri = sessionStorage.getItem(\"jwks_uri\");\n if (jwks_uri === null) {\n throw new Error(\"Access Token validation preparation - Could not find in sessionStorage: jwks_uri\");\n }\n const jwks = createRemoteJWKSet(new URL(jwks_uri));\n const { payload } = await jwtVerify(accessToken, jwks, {\n issuer: idp, // RFC 9207\n audience: \"solid\", // RFC 7519 // ! \"solid\" as per implementations ...\n // exp, nbf, iat - handled automatically\n });\n // check dpop thumbprint\n const dpopThumbprint = await calculateJwkThumbprint(await exportJWK(key_pair.publicKey));\n if (payload[\"cnf\"][\"jkt\"] !== dpopThumbprint) {\n throw new Error(\"Access Token validation failed on `jkt`: jkt !== DPoP thumbprint - \" + payload[\"cnf\"][\"jkt\"] + \" !== \" + dpopThumbprint);\n }\n // check client_id\n if (payload[\"client_id\"] !== client_id) {\n throw new Error(\"Access Token validation failed on `client_id`: JWT payload !== client_id - \" + payload[\"client_id\"] + \" !== \" + client_id);\n }\n // summarise session info\n const token_details = { ...token_response, dpop_key_pair: key_pair };\n const idp_details = { idp, jwks_uri, token_endpoint };\n if (!client_details)\n client_details = { redirect_uris: [url.toString()] };\n client_details.client_id = client_id;\n // and persist refresh token details\n if (database) {\n await database.init();\n await Promise.all([\n database.setItem(\"idp\", idp),\n database.setItem(\"jwks_uri\", jwks_uri),\n database.setItem(\"token_endpoint\", token_endpoint),\n database.setItem(\"client_id\", client_id),\n database.setItem(\"dpop_keypair\", key_pair),\n database.setItem(\"refresh_token\", token_response[\"refresh_token\"])\n ]);\n database.close();\n }\n // clean session storage\n sessionStorage.removeItem(\"csrf_token\");\n sessionStorage.removeItem(\"pkce_code_verifier\");\n sessionStorage.removeItem(\"idp\");\n sessionStorage.removeItem(\"jwks_uri\");\n sessionStorage.removeItem(\"token_endpoint\");\n sessionStorage.removeItem(\"client_id\");\n // return session information\n return {\n clientDetails: client_details,\n idpDetails: idp_details,\n tokenDetails: token_details\n };\n};\n/**\n * Request an dpop-bound access token from a token endpoint\n * @param authorization_code\n * @param pkce_code_verifier\n * @param redirect_uri\n * @param client_id\n * @param token_endpoint\n * @param key_pair\n * @returns\n */\nconst requestAccessToken = async (authorization_code, pkce_code_verifier, redirect_uri, client_id, token_endpoint, key_pair) => {\n // prepare public key to bind access token to\n const jwk_public_key = await exportJWK(key_pair.publicKey);\n jwk_public_key.alg = \"ES256\";\n // sign the access token request DPoP token\n const dpop = await new SignJWT({\n htu: token_endpoint,\n htm: \"POST\",\n })\n .setIssuedAt()\n .setJti(window.crypto.randomUUID())\n .setProtectedHeader({\n alg: \"ES256\",\n typ: \"dpop+jwt\",\n jwk: jwk_public_key,\n })\n .sign(key_pair.privateKey);\n return fetch(token_endpoint, {\n method: \"POST\",\n headers: {\n dpop,\n \"Content-Type\": \"application/x-www-form-urlencoded\",\n },\n body: new URLSearchParams({\n grant_type: \"authorization_code\",\n code: authorization_code,\n code_verifier: pkce_code_verifier,\n redirect_uri: redirect_uri,\n client_id: client_id,\n }),\n });\n};\n\nconst renewTokens = async (sessionDatabase) => {\n // remember session details\n try {\n await sessionDatabase.init();\n const client_id = await sessionDatabase.getItem(\"client_id\");\n const token_endpoint = await sessionDatabase.getItem(\"token_endpoint\");\n const key_pair = await sessionDatabase.getItem(\"dpop_keypair\");\n const refresh_token = await sessionDatabase.getItem(\"refresh_token\");\n if (client_id === null || token_endpoint === null || key_pair === null || refresh_token === null) {\n // we can not restore the old session\n throw new Error(\"Could not refresh tokens: details missing from database.\");\n }\n const token_response = await requestFreshTokens(refresh_token, client_id, token_endpoint, key_pair)\n .then((response) => {\n if (!response.ok) {\n throw new Error(`HTTP error! Status: ${response.status}`);\n }\n return response.json();\n });\n // verify access_token // ! Solid-OIDC specification says it should be a dpop-bound `id token` but implementations provide a dpop-bound `access token`\n const accessToken = token_response[\"access_token\"];\n const idp = await sessionDatabase.getItem(\"idp\");\n if (idp === null) {\n throw new Error(\"Access Token validation preparation - Could not find in sessionDatabase: idp\");\n }\n const jwks_uri = await sessionDatabase.getItem(\"jwks_uri\");\n if (jwks_uri === null) {\n throw new Error(\"Access Token validation preparation - Could not find in sessionDatabase: jwks_uri\");\n }\n const jwks = createRemoteJWKSet(new URL(jwks_uri));\n const { payload } = await jwtVerify(accessToken, jwks, {\n issuer: idp, // RFC 9207\n audience: \"solid\", // RFC 7519 // ! \"solid\" as per implementations ...\n // exp, nbf, iat - handled automatically\n });\n // check dpop thumbprint\n const dpopThumbprint = await calculateJwkThumbprint(await exportJWK(key_pair.publicKey));\n if (payload[\"cnf\"][\"jkt\"] !== dpopThumbprint) {\n throw new Error(\"Access Token validation failed on `jkt`: jkt !== DPoP thumbprint - \" + payload[\"cnf\"][\"jkt\"] + \" !== \" + dpopThumbprint);\n }\n // check client_id\n if (payload[\"client_id\"] !== client_id) {\n throw new Error(\"Access Token validation failed on `client_id`: JWT payload !== client_id - \" + payload[\"client_id\"] + \" !== \" + client_id);\n }\n // set new refresh token for token rotation\n await sessionDatabase.setItem(\"refresh_token\", token_response[\"refresh_token\"]);\n return {\n ...token_response,\n dpop_key_pair: key_pair,\n };\n }\n finally {\n sessionDatabase.close();\n }\n};\n/**\n * Request an dpop-bound access token from a token endpoint using a refresh token\n * @param authorization_code\n * @param pkce_code_verifier\n * @param redirect_uri\n * @param client_id\n * @param token_endpoint\n * @param key_pair\n * @returns\n */\nconst requestFreshTokens = async (refresh_token, client_id, token_endpoint, key_pair) => {\n // prepare public key to bind access token to\n const jwk_public_key = await exportJWK(key_pair.publicKey);\n jwk_public_key.alg = \"ES256\";\n // sign the access token request DPoP token\n const dpop = await new SignJWT({\n htu: token_endpoint,\n htm: \"POST\",\n })\n .setIssuedAt()\n .setJti(self.crypto.randomUUID())\n .setProtectedHeader({\n alg: \"ES256\",\n typ: \"dpop+jwt\",\n jwk: jwk_public_key,\n })\n .sign(key_pair.privateKey);\n return fetch(token_endpoint, {\n method: \"POST\",\n headers: {\n dpop,\n \"Content-Type\": \"application/x-www-form-urlencoded\",\n },\n body: new URLSearchParams({\n grant_type: \"refresh_token\",\n refresh_token,\n client_id\n }),\n });\n};\n\nvar SessionEvents;\n(function (SessionEvents) {\n SessionEvents[\"STATE_CHANGE\"] = \"sessionStateChange\";\n SessionEvents[\"EXPIRATION_WARNING\"] = \"sessionExpirationWarning\";\n SessionEvents[\"EXPIRATION\"] = \"sessionExpiration\";\n})(SessionEvents || (SessionEvents = {}));\n//\n//\n// Basic implementation\n//\n//\n/**\n * The SessionCore class manages session state and core logic but does not handle the refresh lifecycle.\n * It receives {@link SessionOptions} with a database to be able to restore a session.\n * That database can be re-used by (your!) surrounding implementation to handle the refresh lifecycle.\n * If no database was provided, refresh information cannot be stored, and thus token refresh (via the refresh token grant) is not possible in this case.\n *\n * If you are building a web app, use the Session implementation provided in the default `/web` version of this library.\n */\nclass SessionCore extends EventTarget {\n isActive_ = false;\n exp_;\n webId_ = undefined;\n currentAth_ = undefined;\n information;\n database;\n refreshPromise;\n resolveRefresh;\n rejectRefresh;\n constructor(clientDetails, sessionOptions) {\n super();\n this.authFetch = this.authFetch.bind(this);\n this.information = { clientDetails };\n this.database = sessionOptions?.database;\n if (sessionOptions?.onSessionStateChange)\n this.addEventListener(SessionEvents.STATE_CHANGE, (event) => sessionOptions.onSessionStateChange?.(event));\n if (sessionOptions?.onSessionExpirationWarning)\n this.addEventListener(SessionEvents.EXPIRATION_WARNING, (event) => sessionOptions?.onSessionExpirationWarning?.(event));\n if (sessionOptions?.onSessionExpiration)\n this.addEventListener(SessionEvents.EXPIRATION, (event) => sessionOptions?.onSessionExpiration?.(event));\n }\n async login(idp, redirect_uri) {\n await redirectForLogin(idp, redirect_uri, this.information.clientDetails);\n }\n /**\n * Handles the redirect from the identity provider after a login attempt.\n * It attempts to retrieve tokens using the authorization code.\n * Upon success, it tries to persist information to refresh tokens in the session database.\n * If no database was provided, no information is persisted.\n */\n async handleRedirectFromLogin() {\n // Redirect after Authorization Code Grant // memory via sessionStorage\n const newSessionInfo = await onIncomingRedirect(this.information.clientDetails, this.database);\n // no session - we remain unauthenticated\n if (!newSessionInfo.tokenDetails)\n return;\n // we got a session\n this.information.clientDetails = newSessionInfo.clientDetails;\n this.information.idpDetails = newSessionInfo.idpDetails;\n await this.setTokenDetails(newSessionInfo.tokenDetails);\n // callback state change \n this.dispatchStateChangeEvent(); // we logged in\n }\n /**\n * Handles session restoration using the refresh token grant.\n */\n async restore() {\n if (!this.database) {\n throw new Error(\"Could not refresh tokens: missing database. Provide database in sessionOption.\");\n }\n if (this.refreshPromise) {\n return this.refreshPromise;\n }\n this.refreshPromise = new Promise((resolve, reject) => {\n this.resolveRefresh = resolve;\n this.rejectRefresh = reject;\n });\n // Restore session using Refresh Token Grant \n const wasActive = this.isActive;\n renewTokens(this.database)\n .then(tokenDetails => this.setTokenDetails(tokenDetails))\n .then(() => this.resolveRefresh())\n .catch(error => {\n if (this.isActive) {\n this.rejectRefresh(new Error(error || 'Token refresh failed'));\n // do not change state (yet), let the app decide if they want to logout or if they just want to retry.\n if (!this.isExpired()) {\n this.dispatchExpirationWarningEvent();\n }\n else {\n this.dispatchExpirationEvent();\n }\n }\n else {\n this.rejectRefresh(new Error(\"No session to restore.\"));\n }\n }).finally(() => {\n this.clearRefreshPromise();\n if (wasActive !== this.isActive)\n this.dispatchStateChangeEvent();\n });\n return this.refreshPromise;\n }\n /**\n * This logs the user out.\n * Clears all session-related information, including IDP details and tokens.\n * Client ID is preserved if it is a URI.\n */\n async logout() {\n // clean session data\n this.isActive_ = false;\n this.exp_ = undefined;\n this.webId_ = undefined;\n this.currentAth_ = undefined;\n this.information.idpDetails = undefined;\n this.information.tokenDetails = undefined;\n // client details are preserved\n if (this.refreshPromise && this.rejectRefresh) {\n this.rejectRefresh(new Error('Logout during token refresh.'));\n this.clearRefreshPromise();\n }\n // clean session database\n if (this.database) {\n await this.database.init();\n await this.database.clear();\n this.database.close();\n }\n // callback state change\n this.dispatchStateChangeEvent(); // we logged out\n }\n /**\n * Makes an HTTP fetch request.\n * If a session is active, it includes the DPoP token and the access token in the `Authorization` header.\n *\n * @param input The URL or Request object to fetch.\n * @param init Optional fetch request options (RequestInit). Headers for `Authorization` and `DPoP` will be overwritten if a session is active.\n * @param dpopPayload Optional payload for the DPoP token. If provided, it overrides the default `htu` and `htm` claims.\n * @returns A promise that resolves to the fetch Response.\n */\n async authFetch(input, init, dpopPayload) {\n // if there is not session established, just delegate to the default fetch\n if (!this.isActive) {\n return fetch(input, init);\n }\n // TODO\n // TODO do HEAD request to check if authentication is actually required, only then include tokens\n // TODO\n // prepare authenticated call using a DPoP token (either provided payload, or default)\n let url;\n let method;\n let headers;\n // wrangle fetch input parameters into place\n if (input instanceof Request) {\n url = new URL(input.url);\n method = init?.method || input?.method || 'GET';\n headers = new Headers(input.headers);\n }\n else {\n init = init || {};\n url = new URL(input.toString());\n method = init.method || 'GET';\n headers = init.headers ? new Headers(init.headers) : new Headers();\n }\n // create DPoP token, and add tokens to request\n await this._renewTokensIfExpired();\n dpopPayload = dpopPayload ?? {\n htu: `${url.origin}${url.pathname}`,\n htm: method.toUpperCase()\n };\n const dpop = await this._createSignedDPoPToken(dpopPayload);\n // overwrite headers: authorization, dpop\n headers.set(\"dpop\", dpop);\n headers.set(\"authorization\", `DPoP ${this.information.tokenDetails.access_token}`);\n // check explicitly; to avoid unexpected behaviour\n if (input instanceof Request) { // clone the provided request, and override the headers\n return fetch(new Request(input, { ...init, headers }));\n }\n // just override the headers\n return fetch(url, { ...init, headers });\n }\n // \n // Setters\n //\n async setTokenDetails(tokenDetails) {\n this.information.tokenDetails = tokenDetails;\n await this._updateSessionDetailsFromToken(tokenDetails.access_token);\n }\n clearRefreshPromise() {\n this.refreshPromise = undefined;\n this.resolveRefresh = undefined;\n this.rejectRefresh = undefined;\n }\n //\n // Getters\n //\n get isActive() {\n return this.isActive_;\n }\n get webId() {\n return this.webId_;\n }\n isExpired() {\n if (!this.exp_)\n return true;\n return this._isTokenExpired(this.exp_);\n }\n getExpiresIn() {\n if (!this.exp_)\n return -1;\n return this._getTokenTTL(this.exp_);\n }\n getTokenDetails() {\n return this.information.tokenDetails;\n }\n //\n // Helpers\n //\n /**\n * Check if the current token is expired (which may happen during device/browser/tab hibernation),\n * and if expired, restore the session.\n */\n async _renewTokensIfExpired() {\n if (this.isExpired()) {\n if (!this.refreshPromise) {\n await this.restore(); // Initiate and wait\n }\n else {\n await this.refreshPromise; // Wait for already pending\n }\n }\n }\n /**\n * RFC 9449 - Hash of the access token\n */\n async _computeAth(accessToken) {\n // Convert the ASCII string of the token to a Uint8Array\n const encoder = new TextEncoder();\n const data = encoder.encode(accessToken); // ASCII by default\n // Compute SHA-256 hash\n const hashBuffer = await crypto.subtle.digest('SHA-256', data);\n // Convert ArrayBuffer to base64url string\n const hashArray = Array.from(new Uint8Array(hashBuffer));\n const base64 = btoa(String.fromCharCode(...hashArray));\n // Convert base64 to base64url\n const base64url = base64\n .replace(/\\+/g, '-')\n .replace(/\\//g, '_')\n .replace(/=+$/, '');\n return base64url;\n }\n /**\n * Creates a signed DPoP (Demonstration of Proof-of-Possession) token.\n *\n * @param payload The payload to include in the DPoP token. By default, it includes `htu` (HTTP target URI) and `htm` (HTTP method).\n * @returns A promise that resolves to the signed DPoP token string.\n * @throws Error if the session has not been initialized - if no token details are available.\n */\n async _createSignedDPoPToken(payload) {\n if (!this.information.tokenDetails || !this.currentAth_) {\n throw new Error(\"Session not established.\");\n }\n payload.ath = this.currentAth_;\n const jwk_public_key = await exportJWK(this.information.tokenDetails.dpop_key_pair.publicKey);\n return new SignJWT(payload)\n .setIssuedAt()\n .setJti(window.crypto.randomUUID())\n .setProtectedHeader({\n alg: \"ES256\",\n typ: \"dpop+jwt\",\n jwk: jwk_public_key,\n })\n .sign(this.information.tokenDetails.dpop_key_pair.privateKey);\n }\n async _updateSessionDetailsFromToken(access_token) {\n if (!access_token) {\n await this.logout();\n return;\n }\n try {\n const decodedToken = decodeJwt(access_token);\n const webId = decodedToken.webid;\n if (!webId) {\n throw new Error('Missing webid claim in access token');\n }\n const exp = decodedToken.exp;\n if (!exp) {\n throw new Error('Missing exp claim in access token');\n }\n this.currentAth_ = await this._computeAth(access_token); // must be done before session set to active\n this.webId_ = webId;\n this.exp_ = exp;\n this.isActive_ = true;\n }\n catch (error) {\n await this.logout();\n }\n }\n /**\n * Checks if a JWT expiration timestamp ('exp') has passed.\n */\n _isTokenExpired(exp, bufferSeconds = 0) {\n if (typeof exp !== 'number' || isNaN(exp)) {\n return true;\n }\n return this._getTokenTTL(exp, bufferSeconds) < 0;\n }\n _getTokenTTL(exp, bufferSeconds = 0) {\n const currentTimeSeconds = Math.floor(Date.now() / 1000);\n return exp - (currentTimeSeconds + bufferSeconds);\n }\n // \n // Events\n //\n dispatchStateChangeEvent() {\n this.dispatchEvent(new CustomEvent(SessionEvents.STATE_CHANGE, { detail: { isActive: this.isActive, webId: this.webId } }));\n }\n dispatchExpirationWarningEvent() {\n this.dispatchEvent(new CustomEvent(SessionEvents.EXPIRATION_WARNING, { detail: { expires_in: this.getExpiresIn() } }));\n }\n dispatchExpirationEvent() {\n this.dispatchEvent(new CustomEvent(SessionEvents.EXPIRATION));\n }\n}\n\nexport { SessionCore, SessionEvents };\n//# sourceMappingURL=index.js.map\n","import { Session as __WEBPACK_EXTERNAL_MODULE__uvdsl_solid_oidc_client_browser_144ab6cc_Session__ } from \"@uvdsl/solid-oidc-client-browser\";\nimport * as __WEBPACK_EXTERNAL_MODULE__uvdsl_solid_oidc_client_browser_core_9566af4e__ from \"@uvdsl/solid-oidc-client-browser/core\";\nimport * as __WEBPACK_EXTERNAL_MODULE_rdflib__ from \"rdflib\";\n/******/ var __webpack_modules__ = ({\n\n/***/ 386\n(module) {\n\n/**\n * Provides a way to access commonly used namespaces\n *\n * Usage:\n *\n * ```\n * const $rdf = require('rdflib'); //or any other RDF/JS-compatible library\n * const ns = require('solid-namespace')($rdf);\n * const store = $rdf.graph();\n *\n * let me = ...;\n * let name = store.any(me, ns.vcard(‘fn’)) || store.any(me, ns.foaf(‘name’));\n * ```\n * @module vocab\n */\nconst aliases = {\n acl: 'http://www.w3.org/ns/auth/acl#',\n arg: 'http://www.w3.org/ns/pim/arg#',\n as: 'https://www.w3.org/ns/activitystreams#',\n bookmark: 'http://www.w3.org/2002/01/bookmark#',\n cal: 'http://www.w3.org/2002/12/cal/ical#',\n cco: 'http://www.ontologyrepository.com/CommonCoreOntologies/',\n cert: 'http://www.w3.org/ns/auth/cert#',\n contact: 'http://www.w3.org/2000/10/swap/pim/contact#',\n dc: 'http://purl.org/dc/elements/1.1/',\n dct: 'http://purl.org/dc/terms/',\n doap: 'http://usefulinc.com/ns/doap#',\n foaf: 'http://xmlns.com/foaf/0.1/',\n geo: 'http://www.w3.org/2003/01/geo/wgs84_pos#',\n gpx: 'http://www.w3.org/ns/pim/gpx#',\n gr: 'http://purl.org/goodrelations/v1#',\n http: 'http://www.w3.org/2007/ont/http#',\n httph: 'http://www.w3.org/2007/ont/httph#',\n icalTZ: 'http://www.w3.org/2002/12/cal/icaltzd#', // Beware: not cal:\n ldp: 'http://www.w3.org/ns/ldp#',\n link: 'http://www.w3.org/2007/ont/link#',\n log: 'http://www.w3.org/2000/10/swap/log#',\n meeting: 'http://www.w3.org/ns/pim/meeting#',\n mo: 'http://purl.org/ontology/mo/',\n org: 'http://www.w3.org/ns/org#',\n owl: 'http://www.w3.org/2002/07/owl#',\n pad: 'http://www.w3.org/ns/pim/pad#',\n patch: 'http://www.w3.org/ns/pim/patch#',\n prov: 'http://www.w3.org/ns/prov#',\n pto: 'http://www.productontology.org/id/',\n qu: 'http://www.w3.org/2000/10/swap/pim/qif#',\n trip: 'http://www.w3.org/ns/pim/trip#',\n rdf: 'http://www.w3.org/1999/02/22-rdf-syntax-ns#',\n rdfs: 'http://www.w3.org/2000/01/rdf-schema#',\n rss: 'http://purl.org/rss/1.0/',\n sched: 'http://www.w3.org/ns/pim/schedule#',\n schema: 'http://schema.org/', // @@ beware confusion with documents no 303\n sioc: 'http://rdfs.org/sioc/ns#',\n skos: 'http://www.w3.org/2004/02/skos/core#',\n solid: 'http://www.w3.org/ns/solid/terms#',\n space: 'http://www.w3.org/ns/pim/space#',\n stat: 'http://www.w3.org/ns/posix/stat#',\n tab: 'http://www.w3.org/2007/ont/link#',\n tabont: 'http://www.w3.org/2007/ont/link#',\n ui: 'http://www.w3.org/ns/ui#',\n vann: 'http://purl.org/vocab/vann/',\n vcard: 'http://www.w3.org/2006/vcard/ns#',\n wf: 'http://www.w3.org/2005/01/wf/flow#',\n xsd: 'http://www.w3.org/2001/XMLSchema#',\n}\n\n/**\n * @param [rdflib] {RDF} Optional RDF Library (such as rdflib.js or rdf-ext) to inject\n */\nfunction vocab (rdf = { namedNode: u => u }) {\n const namespaces = {}\n for (const alias in aliases) {\n const expansion = aliases[alias]\n namespaces[alias] = function (localName = '') {\n return rdf.namedNode(expansion + localName)\n }\n };\n\n return namespaces\n};\n\nmodule.exports = vocab\n\n\n/***/ }\n\n/******/ });\n/************************************************************************/\n/******/ // The module cache\n/******/ var __webpack_module_cache__ = {};\n/******/ \n/******/ // The require function\n/******/ function __webpack_require__(moduleId) {\n/******/ \t// Check if module is in cache\n/******/ \tvar cachedModule = __webpack_module_cache__[moduleId];\n/******/ \tif (cachedModule !== undefined) {\n/******/ \t\treturn cachedModule.exports;\n/******/ \t}\n/******/ \t// Create a new module (and put it into the cache)\n/******/ \tvar module = __webpack_module_cache__[moduleId] = {\n/******/ \t\t// no module.id needed\n/******/ \t\t// no module.loaded needed\n/******/ \t\texports: {}\n/******/ \t};\n/******/ \n/******/ \t// Execute the module function\n/******/ \t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n/******/ \n/******/ \t// Return the exports of the module\n/******/ \treturn module.exports;\n/******/ }\n/******/ \n/************************************************************************/\n/******/ /* webpack/runtime/compat get default export */\n/******/ (() => {\n/******/ \t// getDefaultExport function for compatibility with non-harmony modules\n/******/ \t__webpack_require__.n = (module) => {\n/******/ \t\tvar getter = module && module.__esModule ?\n/******/ \t\t\t() => (module['default']) :\n/******/ \t\t\t() => (module);\n/******/ \t\t__webpack_require__.d(getter, { a: getter });\n/******/ \t\treturn getter;\n/******/ \t};\n/******/ })();\n/******/ \n/******/ /* webpack/runtime/define property getters */\n/******/ (() => {\n/******/ \t// define getter functions for harmony exports\n/******/ \t__webpack_require__.d = (exports, definition) => {\n/******/ \t\tfor(var key in definition) {\n/******/ \t\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n/******/ \t\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n/******/ \t\t\t}\n/******/ \t\t}\n/******/ \t};\n/******/ })();\n/******/ \n/******/ /* webpack/runtime/global */\n/******/ (() => {\n/******/ \t__webpack_require__.g = (function() {\n/******/ \t\tif (typeof globalThis === 'object') return globalThis;\n/******/ \t\ttry {\n/******/ \t\t\treturn this || new Function('return this')();\n/******/ \t\t} catch (e) {\n/******/ \t\t\tif (typeof window === 'object') return window;\n/******/ \t\t}\n/******/ \t})();\n/******/ })();\n/******/ \n/******/ /* webpack/runtime/hasOwnProperty shorthand */\n/******/ (() => {\n/******/ \t__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))\n/******/ })();\n/******/ \n/************************************************************************/\n\n;// ./src/util/debug.ts\nfunction log(...args) {\n console.log(...args);\n}\nfunction warn(...args) {\n console.warn(...args);\n}\nfunction error(...args) {\n console.error(...args);\n}\nfunction trace(...args) {\n console.trace(...args);\n}\n\n;// external \"@uvdsl/solid-oidc-client-browser\"\n\n;// external \"@uvdsl/solid-oidc-client-browser/core\"\nconst core_namespaceObject = __WEBPACK_EXTERNAL_MODULE__uvdsl_solid_oidc_client_browser_core_9566af4e__;\n;// ./src/authSession/session.ts\n/**\n * OIDC session factory.\n *\n * Everything needed to create and configure the underlying auth session:\n * - Session database backends (in-memory and IndexedDB)\n * - Session instantiation (WebSession or SessionCore, with local-dev\n * fallbacks for environments where the service worker can't load)\n * - Login compatibility shim that normalises legacy call-site signatures\n * and resolves the canonical issuer through /.well-known discovery\n *\n * The raw session instance (_session) is consumed by authSession.ts where\n * the legacy event layer and logout listener are attached.\n *\n * DO NOT import _session directly — always go through authSession.ts so\n * the event wiring is guaranteed to run.\n */\n\n\n// ---------------------------------------------------------------------------\n// Session databases\n// ---------------------------------------------------------------------------\nclass MemorySessionDatabase {\n constructor() {\n this.map = new Map();\n }\n shouldPreserveExistingRefreshToken(id, value) {\n return id === 'refresh_token' && (value == null || value === '') && this.map.has(id);\n }\n async init() {\n return this;\n }\n async setItem(id, value) {\n // Some Solid IdPs do not include refresh_token on refresh responses.\n // Keep the previous token instead of overwriting it with null/undefined.\n if (this.shouldPreserveExistingRefreshToken(id, value)) {\n return;\n }\n this.map.set(id, value);\n }\n async getItem(id) {\n return this.map.has(id) ? this.map.get(id) : null;\n }\n async deleteItem(id) {\n this.map.delete(id);\n }\n async clear() {\n this.map.clear();\n }\n close() {\n // No-op for in-memory database\n }\n}\nclass IndexedDbSessionDatabase {\n constructor() {\n this.db = null;\n this.dbName = 'soidc';\n this.storeName = 'session';\n this.dbVersion = 1;\n }\n async shouldPreserveExistingRefreshToken(id, value) {\n if (id !== 'refresh_token' || !(value == null || value === '')) {\n return false;\n }\n const existing = await this.getItem(id);\n return existing != null && existing !== '';\n }\n async init() {\n if (this.db)\n return this;\n if (typeof indexedDB === 'undefined') {\n throw new Error('IndexedDB is not available in this environment');\n }\n await new Promise((resolve, reject) => {\n const request = indexedDB.open(this.dbName, this.dbVersion);\n request.onerror = () => reject(request.error);\n request.onsuccess = () => {\n this.db = request.result;\n resolve();\n };\n request.onupgradeneeded = () => {\n const db = request.result;\n if (!db.objectStoreNames.contains(this.storeName)) {\n db.createObjectStore(this.storeName);\n }\n };\n });\n return this;\n }\n async setItem(id, value) {\n await this.init();\n // Some Solid IdPs do not include refresh_token on refresh responses.\n // Keep the previous token instead of overwriting it with null/undefined.\n if (await this.shouldPreserveExistingRefreshToken(id, value)) {\n return;\n }\n await this.withStore('readwrite', store => store.put(value, id));\n }\n async getItem(id) {\n await this.init();\n return this.withStore('readonly', store => store.get(id));\n }\n async deleteItem(id) {\n await this.init();\n await this.withStore('readwrite', store => store.delete(id));\n }\n async clear() {\n await this.init();\n await this.withStore('readwrite', store => store.clear());\n }\n close() {\n if (this.db) {\n this.db.close();\n this.db = null;\n }\n }\n withStore(mode, op) {\n return new Promise((resolve, reject) => {\n if (!this.db) {\n reject(new Error('Session database not initialized'));\n return;\n }\n const tx = this.db.transaction(this.storeName, mode);\n const store = tx.objectStore(this.storeName);\n const request = op(store);\n let result = null;\n tx.onerror = () => { var _a; return reject((_a = tx.error) !== null && _a !== void 0 ? _a : request.error); };\n tx.onabort = () => { var _a, _b; return reject((_b = (_a = tx.error) !== null && _a !== void 0 ? _a : request.error) !== null && _b !== void 0 ? _b : new Error('IndexedDB transaction aborted')); };\n tx.oncomplete = () => resolve(result);\n request.onerror = () => reject(request.error);\n request.onsuccess = () => {\n var _a;\n result = (_a = request.result) !== null && _a !== void 0 ? _a : null;\n };\n });\n }\n}\n// ---------------------------------------------------------------------------\n// Session instantiation\n// ---------------------------------------------------------------------------\nfunction getSessionCoreCtor() {\n var _a, _b, _c;\n const coreAny = core_namespaceObject;\n const candidate = (_c = (_a = coreAny.SessionCore) !== null && _a !== void 0 ? _a : (_b = coreAny.default) === null || _b === void 0 ? void 0 : _b.SessionCore) !== null && _c !== void 0 ? _c : coreAny.default;\n if (typeof candidate !== 'function') {\n return null;\n }\n return candidate;\n}\nconst SessionCoreCtor = getSessionCoreCtor();\nfunction createSession() {\n const shouldSkipWorkerInLocalDev = typeof window !== 'undefined' && (() => {\n const host = window.location.hostname;\n // In local NSS setups (including subdomain mode like alice.localhost),\n // worker-based session storage can be brittle and lose state on reload.\n // Prefer SessionCore + IndexedDB for deterministic persistence.\n return host === 'localhost' || host === '127.0.0.1' || host.endsWith('.localhost');\n })();\n if (shouldSkipWorkerInLocalDev) {\n if (SessionCoreCtor) {\n return new SessionCoreCtor(undefined, { database: new IndexedDbSessionDatabase() });\n }\n return new __WEBPACK_EXTERNAL_MODULE__uvdsl_solid_oidc_client_browser_144ab6cc_Session__();\n }\n try {\n return new __WEBPACK_EXTERNAL_MODULE__uvdsl_solid_oidc_client_browser_144ab6cc_Session__();\n }\n catch (error) {\n // In some deployments, worker URL resolution can become file:// and fail cross-origin.\n // Fall back to SessionCore so auth still works without background refresh worker.\n // Use IndexedDB to keep refresh-token persistence across page reloads.\n console.warn('solid-logic: falling back to non-worker auth session:', error);\n try {\n if (SessionCoreCtor) {\n return new SessionCoreCtor(undefined, { database: new IndexedDbSessionDatabase() });\n }\n return new __WEBPACK_EXTERNAL_MODULE__uvdsl_solid_oidc_client_browser_144ab6cc_Session__();\n }\n catch (dbError) {\n console.warn('solid-logic: IndexedDB unavailable, using in-memory session database:', dbError);\n if (SessionCoreCtor) {\n return new SessionCoreCtor(undefined, { database: new MemorySessionDatabase() });\n }\n return new __WEBPACK_EXTERNAL_MODULE__uvdsl_solid_oidc_client_browser_144ab6cc_Session__();\n }\n }\n}\n// ---------------------------------------------------------------------------\n// Singleton session\n// ---------------------------------------------------------------------------\nconst _session = createSession();\n\n\n;// ./src/authSession/issuer.ts\n/**\n * Issuer discovery utilities.\n *\n * Resolves OIDC issuer endpoints from /.well-known/openid-configuration\n * so that login can use the canonical issuer host.\n */\nasync function discoverIssuerFromWellKnown(issuer) {\n try {\n const issuerUrl = new URL(issuer);\n const wellKnownUrl = new URL('/.well-known/openid-configuration', issuerUrl.origin);\n const wellKnownResponse = await fetch(wellKnownUrl.toString(), { credentials: 'include' });\n if (!wellKnownResponse.ok) {\n return null;\n }\n const wellKnownPayload = await wellKnownResponse.json();\n if (typeof (wellKnownPayload === null || wellKnownPayload === void 0 ? void 0 : wellKnownPayload.issuer) !== 'string' || !wellKnownPayload.issuer) {\n return null;\n }\n return wellKnownPayload.issuer.replace(/\\/$/, '');\n }\n catch (_err) {\n return null;\n }\n}\nasync function resolveIssuerForLogin(issuer) {\n // Prefer the issuer advertised by discovery; if app and issuer hosts still differ,\n // redirecting to the canonical issuer host is cleaner than rewriting the issuer here.\n const discoveredIssuer = await discoverIssuerFromWellKnown(issuer);\n if (discoveredIssuer) {\n return discoveredIssuer;\n }\n return issuer;\n}\n\n;// ./src/authSession/events.ts\n/**\n * Legacy event compatibility layer.\n *\n * Pure EventEmitter-style shim — no side effects, no uvdsl dependencies.\n * Wired into the auth session by authSession.ts.\n */\n/**\n * Minimal EventEmitter-style shim so that existing consumers using\n * `authSession.events.on('login' | 'logout' | 'sessionRestore', handler)`\n * continue working without modification.\n *\n * Events are emitted by SolidAuthnLogic.checkUser() (login/sessionRestore)\n * and by the sessionStateChange listener in authSession.ts (logout).\n */\nclass SessionEvents {\n constructor() {\n this.listeners = new Map();\n }\n on(event, handler) {\n if (!this.listeners.has(event))\n this.listeners.set(event, new Set());\n this.listeners.get(event).add(handler);\n }\n off(event, handler) {\n var _a;\n (_a = this.listeners.get(event)) === null || _a === void 0 ? void 0 : _a.delete(handler);\n }\n emit(event, ...args) {\n var _a;\n (_a = this.listeners.get(event)) === null || _a === void 0 ? void 0 : _a.forEach(h => h(...args));\n }\n}\n\n;// ./src/authSession/authSession.ts\n/**\n * Auth session wiring.\n *\n * Takes the raw OIDC session from session.ts and layers on:\n * - Login compatibility shim (normalises legacy call-site signatures\n * and resolves the canonical issuer)\n * - SessionEvents shim (legacy EventEmitter-style API)\n * - Logout listener (emits 'logout' on session deactivation)\n *\n * Exports the fully assembled authSession.\n */\nvar _a;\n\n\n\n// ---------------------------------------------------------------------------\n// Login compatibility shim\n// ---------------------------------------------------------------------------\n// Wraps _session.login() so that call sites with different calling\n// conventions all work. The underlying session expects:\n// login(issuer: string, redirectUrl: string)\n//\n// idpOrOptions can be:\n// - a string (issuer URL) — passed through with less resolution\n// - an options object with any of these field-name variants:\n// issuer: oidcIssuer | idp | issuer\n// redirect: redirectUrl | redirect_uri | redirectUri\n// (all redirect field names map to the same value: the URL the IdP\n// should send the browser back to after authentication)\n// - anything else — passed through to the underlying session as-is\n//\n// In all cases the issuer is resolved through\n// /.well-known/openid-configuration before redirect so the canonical\n// issuer host is used.\nconst sessionAny = _session;\nconst originalLogin = typeof sessionAny.login === 'function'\n ? sessionAny.login.bind(_session)\n : undefined;\nif (originalLogin) {\n const compatLogin = async (idpOrOptions, redirectUri) => {\n var _a, _b, _c, _d;\n if (idpOrOptions && typeof idpOrOptions === 'object' && !Array.isArray(idpOrOptions)) {\n const oidcIssuer = (_b = (_a = idpOrOptions.oidcIssuer) !== null && _a !== void 0 ? _a : idpOrOptions.idp) !== null && _b !== void 0 ? _b : idpOrOptions.issuer;\n const redirectUrl = (_d = (_c = idpOrOptions.redirectUrl) !== null && _c !== void 0 ? _c : idpOrOptions.redirect_uri) !== null && _d !== void 0 ? _d : idpOrOptions.redirectUri;\n if (typeof oidcIssuer === 'string' && typeof redirectUrl === 'string') {\n return originalLogin(await resolveIssuerForLogin(oidcIssuer), redirectUrl);\n }\n }\n if (typeof idpOrOptions === 'string') {\n return originalLogin(await resolveIssuerForLogin(idpOrOptions), redirectUri);\n }\n return originalLogin(idpOrOptions, redirectUri);\n };\n sessionAny.login = compatLogin;\n}\n// ---------------------------------------------------------------------------\n// Legacy event layer\n// ---------------------------------------------------------------------------\nconst events = new SessionEvents();\n// Emit the legacy 'logout' event when the session transitions from active to inactive.\n// 'login' and 'sessionRestore' are emitted in SolidAuthnLogic.checkUser()\n// because only that call site knows which path activated the session.\nlet _wasActive = (_a = _session.isActive) !== null && _a !== void 0 ? _a : Boolean(_session.webId);\nif (typeof _session.addEventListener === 'function') {\n ;\n _session.addEventListener('sessionStateChange', () => {\n var _a;\n const isNowActive = (_a = _session.isActive) !== null && _a !== void 0 ? _a : Boolean(_session.webId);\n if (_wasActive && !isNowActive) {\n events.emit('logout');\n }\n _wasActive = isNowActive;\n });\n}\nconst authSession = Object.assign(_session, { events });\n\n;// external \"rdflib\"\nconst external_rdflib_namespaceObject = __WEBPACK_EXTERNAL_MODULE_rdflib__;\n// EXTERNAL MODULE: ./node_modules/solid-namespace/index.js\nvar solid_namespace = __webpack_require__(386);\nvar solid_namespace_default = /*#__PURE__*/__webpack_require__.n(solid_namespace);\n;// ./src/util/ns.ts\n// Namespaces we commonly use and have common prefixes for around Solid\n // Delegate to this which takes RDFlib as param.\n\nconst ns_ns = solid_namespace_default()(external_rdflib_namespaceObject);\n\n;// ./src/acl/aclLogic.ts\n\n\nconst ACL_LINK = (0,external_rdflib_namespaceObject.sym)('http://www.iana.org/assignments/link-relations/acl');\nfunction createAclLogic(store) {\n const ns = ns_ns;\n async function findAclDocUrl(url) {\n await store.fetcher.load(url);\n const docNode = store.any(url, ACL_LINK);\n if (!docNode) {\n throw new Error(`No ACL link discovered for ${url}`);\n }\n return docNode.value;\n }\n /**\n * Simple Access Control\n *\n * This function sets up a simple default ACL for a resource, with\n * RWC for the owner, and a specified access (default none) for the public.\n * In all cases owner has read write control.\n * Parameter lists modes allowed to public\n *\n * @param options\n * @param options.public eg ['Read', 'Write']\n *\n * @returns Resolves with aclDoc uri on successful write\n */\n function setACLUserPublic(docURI, me, options) {\n const aclDoc = store.any(store.sym(docURI), ACL_LINK);\n return Promise.resolve()\n .then(() => {\n if (aclDoc) {\n return aclDoc;\n }\n return fetchACLRel(docURI).catch(err => {\n throw new Error(`Error fetching rel=ACL header for ${docURI}: ${err}`);\n });\n })\n .then(aclDoc => {\n const aclText = genACLText(docURI, me, aclDoc.uri, options);\n if (!store.fetcher) {\n throw new Error('Cannot PUT this, store has no fetcher');\n }\n return store.fetcher\n .webOperation('PUT', aclDoc.uri, {\n data: aclText,\n contentType: 'text/turtle'\n })\n .then(result => {\n if (!result.ok) {\n throw new Error('Error writing ACL text: ' + result.error);\n }\n return aclDoc;\n });\n });\n }\n /**\n * @param docURI\n * @returns\n */\n function fetchACLRel(docURI) {\n const fetcher = store.fetcher;\n if (!fetcher) {\n throw new Error('Cannot fetch ACL rel, store has no fetcher');\n }\n return fetcher.load(docURI).then(result => {\n if (!result.ok) {\n throw new Error('fetchACLRel: While loading:' + result.error);\n }\n const aclDoc = store.any(store.sym(docURI), ACL_LINK);\n if (!aclDoc) {\n throw new Error('fetchACLRel: No Link rel=ACL header for ' + docURI);\n }\n return aclDoc;\n });\n }\n /**\n * @param docURI\n * @param me\n * @param aclURI\n * @param options\n *\n * @returns Serialized ACL\n */\n function genACLText(docURI, me, aclURI, options = {}) {\n const optPublic = options.public || [];\n const g = (0,external_rdflib_namespaceObject.graph)();\n const auth = (0,external_rdflib_namespaceObject.Namespace)('http://www.w3.org/ns/auth/acl#');\n let a = g.sym(`${aclURI}#a1`);\n const acl = g.sym(aclURI);\n const doc = g.sym(docURI);\n g.add(a, ns.rdf('type'), auth('Authorization'), acl);\n g.add(a, auth('accessTo'), doc, acl);\n if (options.defaultForNew) {\n g.add(a, auth('default'), doc, acl);\n }\n g.add(a, auth('agent'), me, acl);\n g.add(a, auth('mode'), auth('Read'), acl);\n g.add(a, auth('mode'), auth('Write'), acl);\n g.add(a, auth('mode'), auth('Control'), acl);\n if (optPublic.length) {\n a = g.sym(`${aclURI}#a2`);\n g.add(a, ns.rdf('type'), auth('Authorization'), acl);\n g.add(a, auth('accessTo'), doc, acl);\n g.add(a, auth('agentClass'), ns.foaf('Agent'), acl);\n for (let p = 0; p < optPublic.length; p++) {\n g.add(a, auth('mode'), auth(optPublic[p]), acl); // Like 'Read' etc\n }\n }\n return (0,external_rdflib_namespaceObject.serialize)(acl, g, aclURI);\n }\n return {\n findAclDocUrl,\n setACLUserPublic,\n genACLText\n };\n}\n\n;// ./src/authn/authUtil.ts\n\n\n/**\n * find a user or app's context as set in window.SolidAppContext\n * this is a const, not a function, because we have problems to jest mock it otherwise\n * see: https://github.com/facebook/jest/issues/936#issuecomment-545080082 for more\n * @return {any} - an appContext object\n */\nconst appContext = () => {\n let { SolidAppContext } = window;\n SolidAppContext || (SolidAppContext = {});\n SolidAppContext.viewingNoAuthPage = false;\n if (SolidAppContext.noAuth && window.document) {\n const currentPage = window.document.location.href;\n if (currentPage.startsWith(SolidAppContext.noAuth)) {\n SolidAppContext.viewingNoAuthPage = true;\n const params = new URLSearchParams(window.document.location.search);\n if (params) {\n let viewedPage = SolidAppContext.viewedPage = params.get('uri') || null;\n if (viewedPage) {\n viewedPage = decodeURI(viewedPage);\n if (!viewedPage.startsWith(SolidAppContext.noAuth)) {\n const ary = viewedPage.split(/\\//);\n SolidAppContext.idp = ary[0] + '//' + ary[2];\n SolidAppContext.viewingNoAuthPage = false;\n }\n }\n }\n }\n }\n return SolidAppContext;\n};\n/**\n * Returns `sym($SolidTestEnvironment.username)` if\n * `$SolidTestEnvironment.username` is defined as a global\n * or\n * returns testID defined in the HTML page\n * @returns {NamedNode|null}\n */\nfunction offlineTestID() {\n const { $SolidTestEnvironment } = window;\n if (typeof $SolidTestEnvironment !== 'undefined' &&\n $SolidTestEnvironment.username) {\n // Test setup\n log('Assuming the user is ' + $SolidTestEnvironment.username);\n return (0,external_rdflib_namespaceObject.sym)($SolidTestEnvironment.username);\n }\n // hack that makes SolidOS work in offline mode by adding the webId directly in html\n // example usage: https://github.com/solidos/mashlib/blob/29b8b53c46bf02e0e219f0bacd51b0e9951001dd/test/contact/local.html#L37\n if (typeof document !== 'undefined' &&\n document.location &&\n ('' + document.location).slice(0, 16) === 'http://localhost') {\n const div = document.getElementById('appTarget');\n if (!div)\n return null;\n const id = div.getAttribute('testID');\n if (!id)\n return null;\n log('Assuming user is ' + id);\n return (0,external_rdflib_namespaceObject.sym)(id);\n }\n return null;\n}\n\n;// ./src/authn/SolidAuthnLogic.ts\n\n\n\nclass SolidAuthnLogic {\n constructor(solidAuthSession) {\n this.checkUserInFlight = null;\n this.sessionRestoreHookAttached = false;\n this.fallbackWebId = null;\n this.session = solidAuthSession;\n }\n // we created authSession getter because we want to access it as authn.authSession externally\n get authSession() { return this.session; }\n currentUser() {\n var _a, _b;\n const app = appContext();\n if (app.viewingNoAuthPage) {\n return (0,external_rdflib_namespaceObject.sym)(app.webId);\n }\n const sessionAny = this.session;\n const infoWebId = (_a = sessionAny === null || sessionAny === void 0 ? void 0 : sessionAny.info) === null || _a === void 0 ? void 0 : _a.webId;\n const sessionWebId = sessionAny === null || sessionAny === void 0 ? void 0 : sessionAny.webId;\n const webId = infoWebId || sessionWebId || this.fallbackWebId;\n const infoLoggedIn = (_b = sessionAny === null || sessionAny === void 0 ? void 0 : sessionAny.info) === null || _b === void 0 ? void 0 : _b.isLoggedIn;\n const sessionActive = sessionAny === null || sessionAny === void 0 ? void 0 : sessionAny.isActive;\n const isLoggedIn = infoLoggedIn === true || sessionActive === true ||\n ((infoLoggedIn == null && sessionActive == null) ? Boolean(webId) : false) ||\n Boolean(this.fallbackWebId);\n if (this && this.session && webId && isLoggedIn) {\n return (0,external_rdflib_namespaceObject.sym)(webId);\n }\n return offlineTestID(); // null unless testing\n }\n /**\n * Retrieves currently logged in webId from either\n * defaultTestUser or SolidAuth\n * Also activates a session after login\n * @param [setUserCallback] Optional callback\n * @returns Resolves with webId uri, if no callback provided\n */\n async checkUser(setUserCallback) {\n var _a;\n // Save hash for \"restorePreviousSession\"\n const preLoginRedirectHash = new URL(window.location.href).hash;\n if (preLoginRedirectHash) {\n window.localStorage.setItem('preLoginRedirectHash', preLoginRedirectHash);\n }\n const sessionAny = this.session;\n if (!this.sessionRestoreHookAttached && typeof ((_a = sessionAny === null || sessionAny === void 0 ? void 0 : sessionAny.events) === null || _a === void 0 ? void 0 : _a.on) === 'function') {\n // Backward-compatible hook for auth clients exposing an EventEmitter-style API.\n sessionAny.events.on('sessionRestore', (url) => {\n log(`Session restored to ${url}`);\n if (document.location.toString() !== url)\n history.replaceState(null, '', url);\n });\n this.sessionRestoreHookAttached = true;\n }\n if (!this.checkUserInFlight) {\n this.checkUserInFlight = this.resolveCurrentUser();\n }\n const inFlight = this.checkUserInFlight;\n let me;\n try {\n me = await inFlight;\n }\n finally {\n if (this.checkUserInFlight === inFlight) {\n this.checkUserInFlight = null;\n }\n }\n return Promise.resolve(setUserCallback ? setUserCallback(me) : me);\n }\n async resolveCurrentUser() {\n var _a, _b, _c, _d, _e, _f;\n const sessionAny = this.session;\n /**\n * Handle a successful authentication redirect\n */\n const redirectUrl = new URL(window.location.href);\n redirectUrl.hash = '';\n if (typeof (sessionAny === null || sessionAny === void 0 ? void 0 : sessionAny.handleIncomingRedirect) === 'function') {\n await sessionAny.handleIncomingRedirect({\n restorePreviousSession: true,\n url: redirectUrl.href\n });\n }\n else {\n if (typeof (sessionAny === null || sessionAny === void 0 ? void 0 : sessionAny.restore) === 'function') {\n const wasActive = (_a = sessionAny === null || sessionAny === void 0 ? void 0 : sessionAny.isActive) !== null && _a !== void 0 ? _a : Boolean(sessionAny === null || sessionAny === void 0 ? void 0 : sessionAny.webId);\n try {\n await sessionAny.restore();\n }\n catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n if (!/no session to restore/i.test(message)) {\n throw error;\n }\n log('No previous session to restore');\n }\n const isNowActive = (_b = sessionAny === null || sessionAny === void 0 ? void 0 : sessionAny.isActive) !== null && _b !== void 0 ? _b : Boolean(sessionAny === null || sessionAny === void 0 ? void 0 : sessionAny.webId);\n if (!wasActive && isNowActive) {\n (_c = sessionAny.events) === null || _c === void 0 ? void 0 : _c.emit('sessionRestore', window.location.href);\n }\n }\n if (typeof (sessionAny === null || sessionAny === void 0 ? void 0 : sessionAny.handleRedirectFromLogin) === 'function') {\n const wasActive = (_d = sessionAny === null || sessionAny === void 0 ? void 0 : sessionAny.isActive) !== null && _d !== void 0 ? _d : Boolean(sessionAny === null || sessionAny === void 0 ? void 0 : sessionAny.webId);\n await sessionAny.handleRedirectFromLogin();\n const isNowActive = (_e = sessionAny === null || sessionAny === void 0 ? void 0 : sessionAny.isActive) !== null && _e !== void 0 ? _e : Boolean(sessionAny === null || sessionAny === void 0 ? void 0 : sessionAny.webId);\n if (!wasActive && isNowActive) {\n (_f = sessionAny.events) === null || _f === void 0 ? void 0 : _f.emit('login');\n }\n }\n }\n // Check to see if a hash was stored in local storage\n const postLoginRedirectHash = window.localStorage.getItem('preLoginRedirectHash');\n if (postLoginRedirectHash) {\n const curUrl = new URL(window.location.href);\n if (curUrl.hash !== postLoginRedirectHash) {\n if (history.pushState) {\n // debug.log('Setting window.location.has using pushState')\n history.pushState(null, document.title, postLoginRedirectHash);\n }\n else {\n // debug.warn('Setting window.location.has using location.hash')\n location.hash = postLoginRedirectHash;\n }\n curUrl.hash = postLoginRedirectHash;\n }\n // See https://stackoverflow.com/questions/3870057/how-can-i-update-window-location-hash-without-jumping-the-document\n // window.location.href = curUrl.toString()// @@ See https://developer.mozilla.org/en-US/docs/Web/API/Window/location\n window.localStorage.setItem('preLoginRedirectHash', '');\n }\n // Check to see if already logged in / have the WebID\n let me = offlineTestID();\n if (me) {\n return me;\n }\n let webId = this.webIdFromSession(sessionAny === null || sessionAny === void 0 ? void 0 : sessionAny.info, sessionAny);\n if (!webId) {\n // NSS-specific fallback: recover WebID from NSS cookie session when client restore is empty.\n webId = await this.probeNssCookieBackedWebId();\n }\n if (webId) {\n this.fallbackWebId = webId;\n }\n else {\n this.fallbackWebId = null;\n }\n if (webId) {\n me = this.saveUser(webId);\n }\n if (me) {\n log(`(Logged in as ${me} by authentication)`);\n }\n return me;\n }\n async probeNssCookieBackedWebId() {\n if (typeof window === 'undefined') {\n return null;\n }\n const { hostname, port, protocol } = window.location;\n const localhostSuffix = '.localhost';\n // NSS local pods use subdomains like alice.localhost.\n if (!hostname.endsWith(localhostSuffix)) {\n return null;\n }\n const podName = hostname.slice(0, -localhostSuffix.length);\n if (!podName || podName === 'localhost' || podName.includes('.')) {\n return null;\n }\n try {\n // NSS returns 403 on this account page when the cookie session is valid.\n const probeResponse = await fetch('/account/password/change', {\n credentials: 'include',\n redirect: 'manual',\n cache: 'no-store'\n });\n if (probeResponse.status !== 403) {\n return null;\n }\n const origin = `${protocol}//${hostname}${port ? `:${port}` : ''}`;\n return `${origin}/profile/card#me`;\n }\n catch (_error) {\n return null;\n }\n }\n /**\n * Saves `webId` in `context.me`\n * @param webId\n * @param context\n *\n * @returns Returns the WebID, after setting it\n */\n saveUser(webId, context) {\n let webIdUri;\n if (webId) {\n webIdUri = (typeof webId === 'string') ? webId : webId.uri;\n const me = (0,external_rdflib_namespaceObject.namedNode)(webIdUri);\n if (context) {\n context.me = me;\n }\n return me;\n }\n return null;\n }\n /**\n * @returns {Promise<string|null>} Resolves with WebID URI or null\n */\n webIdFromSession(sessionInfo, sessionRoot) {\n const webId = (sessionInfo === null || sessionInfo === void 0 ? void 0 : sessionInfo.webId) || (sessionRoot === null || sessionRoot === void 0 ? void 0 : sessionRoot.webId);\n if (!webId) {\n return null;\n }\n const infoLoggedIn = sessionInfo === null || sessionInfo === void 0 ? void 0 : sessionInfo.isLoggedIn;\n const rootLoggedIn = sessionRoot === null || sessionRoot === void 0 ? void 0 : sessionRoot.isLoggedIn;\n const rootActive = sessionRoot === null || sessionRoot === void 0 ? void 0 : sessionRoot.isActive;\n if (infoLoggedIn === true || rootLoggedIn === true || rootActive === true) {\n return webId;\n }\n if (infoLoggedIn === false && rootLoggedIn === false && rootActive === false) {\n return null;\n }\n return webId;\n }\n}\n\n;// ./src/util/utils.ts\n/* unused harmony import specifier */ var NamedNode;\n\nfunction newThing(doc) {\n return (0,external_rdflib_namespaceObject.sym)(doc.uri + '#' + 'id' + ('' + Date.now()));\n}\nfunction uniqueNodes(arr) {\n const uris = arr.map(x => x.uri);\n const set = new Set(uris);\n const uris2 = Array.from(set);\n const arr2 = uris2.map(u => new NamedNode(u));\n return arr2; // Array.from(new Set(arr.map(x => x.uri))).map(u => sym(u))\n}\nfunction getArchiveUrl(baseUrl, date) {\n const year = date.getUTCFullYear();\n const month = ('0' + (date.getUTCMonth() + 1)).slice(-2);\n const day = ('0' + (date.getUTCDate())).slice(-2);\n const parts = baseUrl.split('/');\n const filename = parts[parts.length - 1];\n return new URL(`./archive/${year}/${month}/${day}/${filename}`, baseUrl).toString();\n}\nfunction differentOrigin(doc) {\n if (!doc) {\n return true;\n }\n return (`${window.location.origin}/` !== new URL(doc.value).origin);\n}\nfunction suggestPreferencesFile(me) {\n const stripped = me.uri.replace('/profile/', '/').replace('/public/', '/');\n // const stripped = me.uri.replace(\\/[p|P]rofile/\\g, '/').replace(\\/[p|P]ublic/\\g, '/')\n const folderURI = stripped.split('/').slice(0, -1).join('/') + '/settings/';\n const fileURI = folderURI + 'prefs.ttl';\n return (0,external_rdflib_namespaceObject.sym)(fileURI);\n}\nfunction determineChatContainer(invitee, podRoot) {\n // Create chat\n // See https://gitter.im/solid/chat-app?at=5f3c800f855be416a23ae74a\n const chatContainerStr = new URL(`IndividualChats/${new URL(invitee.value).host}/`, podRoot.value).toString();\n return new external_rdflib_namespaceObject.NamedNode(chatContainerStr);\n}\n\n;// ./src/chat/chatLogic.ts\n\n\n\nconst CHAT_LOCATION_IN_CONTAINER = 'index.ttl#this';\nfunction createChatLogic(store, profileLogic) {\n const ns = ns_ns;\n async function setAcl(chatContainer, me, invitee) {\n // Some servers don't present a Link http response header\n // if the container doesn't exist yet, so refetch the container\n // now that it has been created:\n await store.fetcher.load(chatContainer);\n // FIXME: check the Why value on this quad:\n const chatAclDoc = store.any(chatContainer, new external_rdflib_namespaceObject.NamedNode('http://www.iana.org/assignments/link-relations/acl'));\n if (!chatAclDoc) {\n throw new Error('Chat ACL doc not found!');\n }\n const aclBody = `\n @prefix acl: <http://www.w3.org/ns/auth/acl#>.\n <#owner>\n a acl:Authorization;\n acl:agent <${me.value}>;\n acl:accessTo <.>;\n acl:default <.>;\n acl:mode\n acl:Read, acl:Write, acl:Control.\n <#invitee>\n a acl:Authorization;\n acl:agent <${invitee.value}>;\n acl:accessTo <.>;\n acl:default <.>;\n acl:mode\n acl:Read, acl:Append.\n `;\n await store.fetcher.webOperation('PUT', chatAclDoc.value, {\n data: aclBody,\n contentType: 'text/turtle',\n });\n }\n async function addToPrivateTypeIndex(chatThing, me) {\n // Add to private type index\n const privateTypeIndex = store.any(me, ns.solid('privateTypeIndex'));\n if (!privateTypeIndex) {\n throw new Error('Private type index not found!');\n }\n await store.fetcher.load(privateTypeIndex);\n const reg = newThing(privateTypeIndex);\n const ins = [\n (0,external_rdflib_namespaceObject.st)(reg, ns.rdf('type'), ns.solid('TypeRegistration'), privateTypeIndex.doc()),\n (0,external_rdflib_namespaceObject.st)(reg, ns.solid('forClass'), ns.meeting('LongChat'), privateTypeIndex.doc()),\n (0,external_rdflib_namespaceObject.st)(reg, ns.solid('instance'), chatThing, privateTypeIndex.doc()),\n ];\n await new Promise((resolve, reject) => {\n store.updater.update([], ins, function (_uri, ok, errm) {\n if (!ok) {\n reject(new Error(errm));\n }\n else {\n resolve(null);\n }\n });\n });\n }\n async function findChat(invitee) {\n const me = await profileLogic.loadMe();\n const podRoot = await profileLogic.getPodRoot(me);\n const chatContainer = determineChatContainer(invitee, podRoot);\n let exists = true;\n try {\n await store.fetcher.load(new external_rdflib_namespaceObject.NamedNode(chatContainer.value + 'index.ttl#this'));\n }\n catch (e) {\n exists = false;\n }\n return { me, chatContainer, exists };\n }\n async function createChatThing(chatContainer, me) {\n const created = await mintNew({\n me,\n newBase: chatContainer.value,\n });\n return created.newInstance;\n }\n function mintNew(newPaneOptions) {\n const kb = store;\n const updater = kb.updater;\n if (newPaneOptions.me && !newPaneOptions.me.uri) {\n throw new Error('chat mintNew: Invalid userid ' + newPaneOptions.me);\n }\n const newInstance = (newPaneOptions.newInstance =\n newPaneOptions.newInstance ||\n kb.sym(newPaneOptions.newBase + CHAT_LOCATION_IN_CONTAINER));\n const newChatDoc = newInstance.doc();\n kb.add(newInstance, ns.rdf('type'), ns.meeting('LongChat'), newChatDoc);\n kb.add(newInstance, ns.dc('title'), 'Chat channel', newChatDoc);\n kb.add(newInstance, ns.dc('created'), (0,external_rdflib_namespaceObject.term)(new Date(Date.now())), newChatDoc);\n if (newPaneOptions.me) {\n kb.add(newInstance, ns.dc('author'), newPaneOptions.me, newChatDoc);\n }\n return new Promise(function (resolve, reject) {\n updater === null || updater === void 0 ? void 0 : updater.put(newChatDoc, kb.statementsMatching(undefined, undefined, undefined, newChatDoc), 'text/turtle', function (uri2, ok, message) {\n if (ok) {\n resolve({\n ...newPaneOptions,\n newInstance,\n });\n }\n else {\n reject(new Error('FAILED to save new chat channel at: ' + uri2 + ' : ' + message));\n }\n });\n });\n }\n /**\n * Find (and optionally create) an individual chat between the current user and the given invitee\n * @param invitee - The person to chat with\n * @param createIfMissing - Whether the chat should be created, if missing\n * @returns null if missing, or a node referring to an already existing chat, or the newly created chat\n */\n async function getChat(invitee, createIfMissing = true) {\n const { me, chatContainer, exists } = await findChat(invitee);\n if (exists) {\n return new external_rdflib_namespaceObject.NamedNode(chatContainer.value + CHAT_LOCATION_IN_CONTAINER);\n }\n if (createIfMissing) {\n const chatThing = await createChatThing(chatContainer, me);\n await sendInvite(invitee, chatThing);\n await setAcl(chatContainer, me, invitee);\n await addToPrivateTypeIndex(chatThing, me);\n return chatThing;\n }\n return null;\n }\n async function sendInvite(invitee, chatThing) {\n var _a;\n await store.fetcher.load(invitee.doc());\n const inviteeInbox = store.any(invitee, ns.ldp('inbox'), undefined, invitee.doc());\n if (!inviteeInbox) {\n throw new Error(`Invitee inbox not found! ${invitee.value}`);\n }\n const inviteBody = `\n <> a <http://www.w3.org/ns/pim/meeting#LongChatInvite> ;\n ${ns.rdf('seeAlso')} <${chatThing.value}> .\n `;\n const inviteResponse = await ((_a = store.fetcher) === null || _a === void 0 ? void 0 : _a.webOperation('POST', inviteeInbox.value, {\n data: inviteBody,\n contentType: 'text/turtle',\n }));\n const locationStr = inviteResponse === null || inviteResponse === void 0 ? void 0 : inviteResponse.headers.get('location');\n if (!locationStr) {\n throw new Error(`Invite sending returned a ${inviteResponse === null || inviteResponse === void 0 ? void 0 : inviteResponse.status}`);\n }\n }\n return {\n setAcl, addToPrivateTypeIndex, findChat, createChatThing, getChat, sendInvite, mintNew\n };\n}\n\n;// ./src/inbox/inboxLogic.ts\n\nfunction createInboxLogic(store, profileLogic, utilityLogic, containerLogic, aclLogic) {\n async function createInboxFor(peerWebId, nick) {\n const myWebId = await profileLogic.loadMe();\n const podRoot = await profileLogic.getPodRoot(myWebId);\n const ourInbox = `${podRoot.value}p2p-inboxes/${encodeURIComponent(nick)}/`;\n await containerLogic.createContainer(ourInbox);\n // const aclDocUrl = await aclLogic.findAclDocUrl(ourInbox);\n await utilityLogic.setSinglePeerAccess({\n ownerWebId: myWebId.value,\n peerWebId,\n accessToModes: 'acl:Append',\n target: ourInbox\n });\n return ourInbox;\n }\n async function getNewMessages(user) {\n if (!user) {\n user = await profileLogic.loadMe();\n }\n const inbox = await profileLogic.getMainInbox(user);\n const urls = await containerLogic.getContainerMembers(inbox);\n return urls.filter(url => !containerLogic.isContainer(url));\n }\n async function markAsRead(url, date) {\n const downloaded = await store.fetcher._fetch(url);\n if (downloaded.status !== 200) {\n throw new Error(`Not OK! ${url}`);\n }\n const archiveUrl = getArchiveUrl(url, date);\n const options = {\n method: 'PUT',\n body: await downloaded.text(),\n headers: [\n ['Content-Type', downloaded.headers.get('Content-Type') || 'application/octet-stream']\n ]\n };\n const uploaded = await store.fetcher._fetch(archiveUrl, options);\n if (uploaded.status.toString()[0] === '2') {\n await store.fetcher._fetch(url, {\n method: 'DELETE'\n });\n }\n }\n return {\n createInboxFor,\n getNewMessages,\n markAsRead\n };\n}\n\n;// ./src/logic/CustomError.ts\nclass CustomError extends Error {\n constructor(message) {\n super(message);\n // see: typescriptlang.org/docs/handbook/release-notes/typescript-2-2.html\n Object.setPrototypeOf(this, new.target.prototype); // restore prototype chain\n this.name = new.target.name; // stack traces display correctly now\n }\n}\nclass UnauthorizedError extends CustomError {\n}\nclass CrossOriginForbiddenError extends CustomError {\n}\nclass SameOriginForbiddenError extends CustomError {\n}\nclass NotFoundError extends CustomError {\n}\nclass NotEditableError extends CustomError {\n}\nclass WebOperationError extends CustomError {\n}\nclass FetchError extends CustomError {\n constructor(status, message) {\n super(message);\n this.status = status;\n }\n}\n\n;// ./src/typeIndex/typeIndexDocuments.ts\nfunction publicTypeIndexDocument() {\n return [\n '@prefix solid: <http://www.w3.org/ns/solid/terms#>.',\n '<>',\n ' a solid:TypeIndex ;',\n ' a solid:ListedDocument.'\n ].join('\\n');\n}\nfunction privateTypeIndexDocument() {\n return [\n '@prefix solid: <http://www.w3.org/ns/solid/terms#>.',\n '<>',\n ' a solid:TypeIndex ;',\n ' a solid:UnlistedDocument.'\n ].join('\\n');\n}\n\n;// ./src/typeIndex/typeIndexAclDocuments.ts\nfunction publicTypeIndexAclDocument(webId, publicTypeIndexUri) {\n const fileName = new URL(publicTypeIndexUri).pathname.split('/').pop() || 'publicTypeIndex.ttl';\n return [\n '# ACL resource for the Public Type Index',\n '',\n '@prefix acl: <http://www.w3.org/ns/auth/acl#>.',\n '@prefix foaf: <http://xmlns.com/foaf/0.1/>.',\n '',\n '<#owner>',\n ' a acl:Authorization;',\n '',\n ' acl:agent',\n ` <${webId}>;`,\n '',\n ` acl:accessTo <./${fileName}>;`,\n '',\n ' acl:mode',\n ' acl:Read, acl:Write, acl:Control.',\n '',\n '# Public-readable',\n '<#public>',\n ' a acl:Authorization;',\n '',\n ' acl:agentClass foaf:Agent;',\n '',\n ` acl:accessTo <./${fileName}>;`,\n '',\n ' acl:mode acl:Read.'\n ].join('\\n');\n}\n\n;// ./src/profile/profileDocuments.ts\nfunction preferencesFileDocument() {\n return [\n '@prefix dct: <http://purl.org/dc/terms/>.',\n '@prefix pim: <http://www.w3.org/ns/pim/space#>.',\n '@prefix solid: <http://www.w3.org/ns/solid/terms#>.',\n '<>',\n ' a pim:ConfigurationFile ;',\n ' dct:title \"Preferences file\".'\n ].join('\\n');\n}\n\n;// ./src/profile/profileAclDocuments.ts\nfunction ownerOnlyContainerAclDocument(webId) {\n return [\n '@prefix acl: <http://www.w3.org/ns/auth/acl#>.',\n '',\n '<#owner>',\n 'a acl:Authorization;',\n `acl:agent <${webId}>;`,\n 'acl:accessTo <./>;',\n 'acl:default <./>;',\n 'acl:mode acl:Read, acl:Write, acl:Control.'\n ].join('\\n');\n}\n\n;// ./src/util/containerLogic.ts\n\n/**\n * Container-related class\n */\nfunction createContainerLogic(store) {\n function getContainerElements(containerNode) {\n return store\n .statementsMatching(containerNode, (0,external_rdflib_namespaceObject.sym)('http://www.w3.org/ns/ldp#contains'), undefined)\n .map((st) => st.object);\n }\n function isContainer(url) {\n const nodeToString = url.value;\n return nodeToString.charAt(nodeToString.length - 1) === '/';\n }\n async function createContainer(url) {\n const stringToNode = (0,external_rdflib_namespaceObject.sym)(url);\n if (!isContainer(stringToNode)) {\n throw new Error(`Not a container URL ${url}`);\n }\n // Copied from https://github.com/solidos/solid-crud-tests/blob/v3.1.0/test/surface/create-container.test.ts#L56-L64\n const result = await store.fetcher._fetch(url, {\n method: 'PUT',\n headers: {\n 'Content-Type': 'text/turtle',\n 'If-None-Match': '*',\n Link: '<http://www.w3.org/ns/ldp#BasicContainer>; rel=\"type\"', // See https://github.com/solidos/node-solid-server/issues/1465\n },\n body: ' ', // work around https://github.com/michielbdejong/community-server/issues/4#issuecomment-776222863\n });\n // Treat 409 as idempotent success: another process/request already created the container.\n if (result.status === 409) {\n return;\n }\n if (result.status.toString()[0] !== '2') {\n throw new Error(`Not OK: got ${result.status} response while creating container at ${url}`);\n }\n }\n async function getContainerMembers(containerUrl) {\n await store.fetcher.load(containerUrl);\n return getContainerElements(containerUrl);\n }\n return {\n isContainer,\n createContainer,\n getContainerElements,\n getContainerMembers\n };\n}\n\n;// ./src/profile/profileLogic.ts\n\n\n\n\n\n\n\n\n\n\n\nfunction createProfileLogic(store, authn, utilityLogic) {\n const ns = ns_ns;\n const containerLogic = createContainerLogic(store);\n const loadPreferencesInFlight = new Map();\n const cachedPreferencesFileByWebId = new Map();\n function isAbsoluteHttpUri(uri) {\n return !!uri && (uri.startsWith('https://') || uri.startsWith('http://'));\n }\n function docDirUri(node) {\n const doc = node.doc();\n const dir = doc.dir();\n if ((dir === null || dir === void 0 ? void 0 : dir.uri) && isAbsoluteHttpUri(dir.uri))\n return dir.uri;\n const docUri = doc.uri;\n if (!docUri || !isAbsoluteHttpUri(docUri))\n return null;\n const withoutFragment = docUri.split('#')[0];\n const lastSlash = withoutFragment.lastIndexOf('/');\n if (lastSlash === -1)\n return null;\n return withoutFragment.slice(0, lastSlash + 1);\n }\n function suggestTypeIndexInPreferences(preferencesFile, filename) {\n const dirUri = docDirUri(preferencesFile);\n if (!dirUri)\n throw new Error(`Cannot derive directory for preferences file ${preferencesFile.uri}`);\n return (0,external_rdflib_namespaceObject.sym)(dirUri + filename);\n }\n function isNotFoundError(err) {\n var _a;\n if (((_a = err === null || err === void 0 ? void 0 : err.response) === null || _a === void 0 ? void 0 : _a.status) === 404)\n return true;\n const text = `${(err === null || err === void 0 ? void 0 : err.message) || err || ''}`;\n return text.includes('404') || text.includes('Not Found');\n }\n async function ensureContainerExists(containerUri) {\n const containerNode = (0,external_rdflib_namespaceObject.sym)(containerUri);\n try {\n await store.fetcher.load(containerNode);\n return;\n }\n catch (err) {\n if (!isNotFoundError(err))\n throw err;\n }\n await containerLogic.createContainer(containerUri);\n }\n async function ensureOwnerOnlyAclForSettings(user, preferencesFile) {\n var _a;\n const dirUri = docDirUri(preferencesFile);\n if (!dirUri)\n throw new Error(`Cannot derive settings directory from ${preferencesFile.uri}`);\n await ensureContainerExists(dirUri);\n const containerNode = (0,external_rdflib_namespaceObject.sym)(dirUri);\n let aclDocUri;\n try {\n await store.fetcher.load(containerNode);\n aclDocUri = (_a = store.any(containerNode, ACL_LINK)) === null || _a === void 0 ? void 0 : _a.value;\n }\n catch (err) {\n if (!isNotFoundError(err))\n throw err;\n }\n if (!aclDocUri) {\n // Fallback for servers/tests where rel=acl is not exposed in mocked headers.\n aclDocUri = `${dirUri}.acl`;\n }\n const aclDoc = (0,external_rdflib_namespaceObject.sym)(aclDocUri);\n try {\n await store.fetcher.load(aclDoc);\n return;\n }\n catch (err) {\n if (!isNotFoundError(err))\n throw err;\n }\n await store.fetcher.webOperation('PUT', aclDoc.uri, {\n data: ownerOnlyContainerAclDocument(user.uri),\n contentType: 'text/turtle'\n });\n }\n async function ensurePublicTypeIndexAclOnCreate(user, publicTypeIndex, ensureAcl = false) {\n var _a, _b, _c;\n const created = await utilityLogic.loadOrCreateWithContentOnCreate(publicTypeIndex, publicTypeIndexDocument());\n if (!created && !ensureAcl)\n return;\n let aclDocUri;\n try {\n await store.fetcher.load(publicTypeIndex);\n aclDocUri = (_a = store.any(publicTypeIndex, ACL_LINK)) === null || _a === void 0 ? void 0 : _a.value;\n }\n catch (err) {\n if (!isNotFoundError(err))\n throw err;\n }\n if (!aclDocUri) {\n aclDocUri = `${publicTypeIndex.uri}.acl`;\n }\n const aclDoc = (0,external_rdflib_namespaceObject.sym)(aclDocUri);\n try {\n await store.fetcher.webOperation('PUT', aclDoc.uri, {\n data: publicTypeIndexAclDocument(user.uri, publicTypeIndex.uri),\n contentType: 'text/turtle',\n headers: { 'If-None-Match': '*' }\n });\n }\n catch (err) {\n const status = (_c = (_b = err === null || err === void 0 ? void 0 : err.response) === null || _b === void 0 ? void 0 : _b.status) !== null && _c !== void 0 ? _c : err === null || err === void 0 ? void 0 : err.status;\n if (status !== 412)\n throw err;\n }\n }\n async function ensurePrivateTypeIndexOnCreate(privateTypeIndex) {\n await utilityLogic.loadOrCreateWithContentOnCreate(privateTypeIndex, privateTypeIndexDocument());\n }\n async function initializePreferencesDefaults(user, preferencesFile) {\n const preferencesDoc = preferencesFile.doc();\n const profileDoc = user.doc();\n await store.fetcher.load(preferencesDoc);\n const profilePublicTypeIndex = store.any(user, ns.solid('publicTypeIndex'), null, profileDoc);\n const preferencesPublicTypeIndex = store.any(user, ns.solid('publicTypeIndex'), null, preferencesDoc);\n const publicTypeIndex = profilePublicTypeIndex ||\n preferencesPublicTypeIndex ||\n suggestTypeIndexInPreferences(preferencesFile, 'publicTypeIndex.ttl');\n const privateTypeIndex = store.any(user, ns.solid('privateTypeIndex'), null, preferencesDoc) ||\n suggestTypeIndexInPreferences(preferencesFile, 'privateTypeIndex.ttl');\n // Keep discovery consistent with typeIndexLogic, which resolves publicTypeIndex from the profile doc.\n const createdProfilePublicTypeIndexLink = !profilePublicTypeIndex;\n if (createdProfilePublicTypeIndexLink) {\n await utilityLogic.followOrCreateLinkWithContentOnCreate(user, ns.solid('publicTypeIndex'), publicTypeIndex, profileDoc, publicTypeIndexDocument());\n }\n const toInsert = [];\n if (!store.holds(preferencesDoc, ns.rdf('type'), ns.space('ConfigurationFile'), preferencesDoc)) {\n toInsert.push((0,external_rdflib_namespaceObject.st)(preferencesDoc, ns.rdf('type'), ns.space('ConfigurationFile'), preferencesDoc));\n }\n if (!store.holds(preferencesDoc, ns.dct('title'), undefined, preferencesDoc)) {\n toInsert.push((0,external_rdflib_namespaceObject.st)(preferencesDoc, ns.dct('title'), (0,external_rdflib_namespaceObject.literal)('Preferences file'), preferencesDoc));\n }\n if (!store.holds(user, ns.solid('publicTypeIndex'), publicTypeIndex, preferencesDoc)) {\n toInsert.push((0,external_rdflib_namespaceObject.st)(user, ns.solid('publicTypeIndex'), publicTypeIndex, preferencesDoc));\n }\n if (!store.holds(user, ns.solid('privateTypeIndex'), privateTypeIndex, preferencesDoc)) {\n toInsert.push((0,external_rdflib_namespaceObject.st)(user, ns.solid('privateTypeIndex'), privateTypeIndex, preferencesDoc));\n }\n if (toInsert.length > 0) {\n await store.updater.update([], toInsert);\n await store.fetcher.load(preferencesDoc);\n }\n await ensurePublicTypeIndexAclOnCreate(user, publicTypeIndex, createdProfilePublicTypeIndexLink);\n await ensurePrivateTypeIndexOnCreate(privateTypeIndex);\n }\n async function ensurePreferencesDocExists(preferencesFile) {\n var _a, _b;\n try {\n const created = await utilityLogic.loadOrCreateWithContentOnCreate(preferencesFile, preferencesFileDocument());\n if (created) {\n return true;\n }\n return false;\n }\n catch (err) {\n if (((_a = err.response) === null || _a === void 0 ? void 0 : _a.status) === 401) {\n throw new UnauthorizedError();\n }\n if (((_b = err.response) === null || _b === void 0 ? void 0 : _b.status) === 403) {\n if (differentOrigin(preferencesFile)) {\n throw new CrossOriginForbiddenError();\n }\n throw new SameOriginForbiddenError();\n }\n throw err;\n }\n }\n /**\n * loads the preference without throwing errors - if it can create it it does so.\n * remark: it still throws error if it cannot load profile.\n * @param user\n * @returns undefined if preferenceFile cannot be returned or NamedNode if it can find it or create it\n */\n async function silencedLoadPreferences(user) {\n try {\n return await loadPreferences(user);\n }\n catch (err) {\n return undefined;\n }\n }\n /**\n * loads the preference without returning different errors if it cannot create or load it.\n * remark: it also throws error if it cannot load profile.\n * @param user\n * @returns undefined if preferenceFile cannot be an Error or NamedNode if it can find it or create it\n */\n async function loadPreferences(user) {\n const cachedPreferencesFile = cachedPreferencesFileByWebId.get(user.uri);\n if (cachedPreferencesFile) {\n return cachedPreferencesFile;\n }\n const inFlight = loadPreferencesInFlight.get(user.uri);\n if (inFlight) {\n return inFlight;\n }\n const run = (async () => {\n var _a;\n await loadProfile(user);\n const possiblePreferencesFile = suggestPreferencesFile(user);\n let preferencesFile;\n try {\n const existingPreferencesFile = store.any(user, ns.space('preferencesFile'), null, user.doc());\n if (existingPreferencesFile) {\n preferencesFile = existingPreferencesFile;\n }\n else {\n preferencesFile = await utilityLogic.followOrCreateLink(user, ns.space('preferencesFile'), possiblePreferencesFile, user.doc());\n }\n await ensureOwnerOnlyAclForSettings(user, preferencesFile);\n await ensurePreferencesDocExists(preferencesFile);\n await initializePreferencesDefaults(user, preferencesFile);\n }\n catch (err) {\n const message = `User ${user} has no pointer in profile to preferences file.`;\n warn(message);\n // we are listing the possible errors\n if (err instanceof NotEditableError) {\n throw err;\n }\n if (err instanceof WebOperationError) {\n throw err;\n }\n if (err instanceof UnauthorizedError) {\n throw err;\n }\n if (err instanceof CrossOriginForbiddenError) {\n throw err;\n }\n if (err instanceof SameOriginForbiddenError) {\n throw err;\n }\n if (err instanceof FetchError) {\n throw err;\n }\n throw err;\n }\n try {\n await store.fetcher.load(preferencesFile);\n }\n catch (err) { // Maybe a permission problem or origin problem\n const msg = `Unable to load preference of user ${user}: ${err}`;\n if (((_a = err.response) === null || _a === void 0 ? void 0 : _a.status) === 404) {\n // Self-heal when a stale profile pointer references a missing preferences file.\n await ensureOwnerOnlyAclForSettings(user, preferencesFile);\n await ensurePreferencesDocExists(preferencesFile);\n await initializePreferencesDefaults(user, preferencesFile);\n await store.fetcher.load(preferencesFile);\n return preferencesFile;\n }\n warn(msg);\n if (err.response.status === 401) {\n throw new UnauthorizedError();\n }\n if (err.response.status === 403) {\n if (differentOrigin(preferencesFile)) {\n throw new CrossOriginForbiddenError();\n }\n throw new SameOriginForbiddenError();\n }\n /*if (err.response.status === 404) {\n throw new NotFoundError();\n }*/\n throw new Error(msg);\n }\n cachedPreferencesFileByWebId.set(user.uri, preferencesFile);\n return preferencesFile;\n })();\n loadPreferencesInFlight.set(user.uri, run);\n try {\n return await run;\n }\n finally {\n if (loadPreferencesInFlight.get(user.uri) === run) {\n loadPreferencesInFlight.delete(user.uri);\n }\n }\n }\n async function loadProfile(user) {\n if (!user) {\n throw new Error('loadProfile: no user given.');\n }\n try {\n await store.fetcher.load(user.doc());\n }\n catch (err) {\n throw new Error(`Unable to load profile of user ${user}: ${err}`);\n }\n return user.doc();\n }\n async function loadMe() {\n const me = authn.currentUser();\n if (me === null) {\n throw new Error('Current user not found! Not logged in?');\n }\n await store.fetcher.load(me.doc());\n return me;\n }\n function getPodRoot(user) {\n const podRoot = findStorage(user);\n if (!podRoot) {\n throw new Error('User pod root not found!');\n }\n return podRoot;\n }\n async function getMainInbox(user) {\n await store.fetcher.load(user);\n const mainInbox = store.any(user, ns.ldp('inbox'), undefined, user.doc());\n if (!mainInbox) {\n throw new Error('User main inbox not found!');\n }\n return mainInbox;\n }\n function findStorage(me) {\n return store.any(me, ns.space('storage'), undefined, me.doc());\n }\n return {\n loadMe,\n getPodRoot,\n getMainInbox,\n findStorage,\n loadPreferences,\n loadProfile,\n silencedLoadPreferences\n };\n}\n\n;// ./src/typeIndex/typeIndexLogic.ts\n\n\n\n\n\nfunction createTypeIndexLogic(store, authn, profileLogic, utilityLogic) {\n const ns = ns_ns;\n function isAbsoluteHttpUri(uri) {\n return !!uri && (uri.startsWith('https://') || uri.startsWith('http://'));\n }\n function getRegistrations(instance, theClass) {\n return store\n .each(undefined, ns.solid('instance'), instance)\n .filter((r) => {\n return store.holds(r, ns.solid('forClass'), theClass);\n });\n }\n async function loadTypeIndexesFor(user) {\n if (!user)\n throw new Error('loadTypeIndexesFor: No user given');\n const profile = await profileLogic.loadProfile(user);\n let suggestion = null;\n try {\n suggestion = suggestPublicTypeIndex(user);\n }\n catch (err) {\n const message = `User ${user} has no usable profile document directory for publicTypeIndex.`;\n warn(message);\n }\n let publicTypeIndex;\n try {\n const existingPublicTypeIndex = store.any(user, ns.solid('publicTypeIndex'), undefined, profile);\n if (existingPublicTypeIndex) {\n publicTypeIndex = existingPublicTypeIndex;\n }\n else if (suggestion) {\n publicTypeIndex = await utilityLogic.followOrCreateLinkWithContentOnCreate(user, ns.solid('publicTypeIndex'), suggestion, profile, publicTypeIndexDocument());\n }\n else {\n publicTypeIndex = null;\n }\n }\n catch (err) {\n const message = `User ${user} has no pointer in profile to publicTypeIndex file: ${err}`;\n warn(message);\n }\n const publicScopes = publicTypeIndex ? [{ label: 'public', index: publicTypeIndex, agent: user }] : [];\n let preferencesFile;\n try {\n preferencesFile = await profileLogic.silencedLoadPreferences(user);\n }\n catch (err) {\n preferencesFile = null;\n }\n let privateScopes;\n if (preferencesFile) { // watch out - can be in either as spec was not clear. Legacy is profile.\n // If there is a legacy one linked from the profile, use that.\n // Otherwiae use or make one linked from Preferences\n let suggestedPrivateTypeIndex = null;\n try {\n suggestedPrivateTypeIndex = suggestPrivateTypeIndex(preferencesFile);\n }\n catch (err) {\n const message = `User ${user} has no usable preferences document directory for privateTypeIndex.`;\n warn(message);\n }\n let privateTypeIndex;\n try {\n const existingPrivateTypeIndex = store.any(user, ns.solid('privateTypeIndex'), undefined, profile);\n if (existingPrivateTypeIndex) {\n privateTypeIndex = existingPrivateTypeIndex;\n }\n else if (suggestedPrivateTypeIndex) {\n privateTypeIndex = await utilityLogic.followOrCreateLinkWithContentOnCreate(user, ns.solid('privateTypeIndex'), suggestedPrivateTypeIndex, preferencesFile, privateTypeIndexDocument());\n }\n else {\n privateTypeIndex = null;\n }\n }\n catch (err) {\n const message = `User ${user} has no pointer in preference file to privateTypeIndex file: ${err}`;\n warn(message);\n }\n privateScopes = privateTypeIndex ? [{ label: 'private', index: privateTypeIndex, agent: user }] : [];\n }\n else {\n privateScopes = [];\n }\n const scopes = publicScopes.concat(privateScopes);\n if (scopes.length === 0)\n return scopes;\n const files = scopes.map(scope => scope.index);\n try {\n await store.fetcher.load(files);\n }\n catch (err) {\n warn('Problems loading type index: ', err);\n }\n return scopes;\n }\n async function loadCommunityTypeIndexes(user) {\n let preferencesFile;\n try {\n preferencesFile = await profileLogic.silencedLoadPreferences(user);\n }\n catch (err) {\n const message = `User ${user} has no pointer in profile to preferences file.`;\n warn(message);\n }\n if (preferencesFile) { // For now, pick up communities as simple links from the preferences file.\n const communities = store.each(user, ns.solid('community'), undefined, preferencesFile).concat(store.each(user, ns.solid('community'), undefined, user.doc()));\n let result = [];\n for (const org of communities) {\n if (org.termType !== 'NamedNode' || !isAbsoluteHttpUri(org.uri)) {\n warn(`Skipping malformed community node for ${user}: ${org}`);\n continue;\n }\n try {\n result = result.concat(await loadTypeIndexesFor(org));\n }\n catch (err) {\n warn(`Skipping community type indexes for ${org.uri}: ${err}`);\n }\n }\n return result;\n }\n return []; // No communities\n }\n async function loadAllTypeIndexes(user) {\n return (await loadTypeIndexesFor(user)).concat(await loadCommunityTypeIndexes(user));\n }\n async function getScopedAppInstances(klass, user) {\n const scopes = await loadAllTypeIndexes(user);\n let scopedApps = [];\n for (const scope of scopes) {\n const scopedApps0 = await getScopedAppsFromIndex(scope, klass);\n scopedApps = scopedApps.concat(scopedApps0);\n }\n return scopedApps;\n }\n // This is the function signature which used to be in solid-ui/logic\n // Recommended to use getScopedAppInstances instead as it provides more information.\n //\n async function getAppInstances(klass) {\n const user = authn.currentUser();\n if (!user)\n throw new Error('getAppInstances: Must be logged in to find apps.');\n const scopedAppInstances = await getScopedAppInstances(klass, user);\n return scopedAppInstances.map(scoped => scoped.instance);\n }\n function docDirUri(node) {\n const doc = node.doc();\n const dir = doc.dir();\n if ((dir === null || dir === void 0 ? void 0 : dir.uri) && isAbsoluteHttpUri(dir.uri))\n return dir.uri;\n const docUri = doc.uri;\n if (!docUri || !isAbsoluteHttpUri(docUri)) {\n log(`docDirUri: missing or non-http(s) doc uri for ${node === null || node === void 0 ? void 0 : node.uri}`);\n return null;\n }\n const withoutFragment = docUri.split('#')[0];\n const lastSlash = withoutFragment.lastIndexOf('/');\n if (lastSlash === -1) {\n log(`docDirUri: no slash in doc uri ${docUri}`);\n return null;\n }\n return withoutFragment.slice(0, lastSlash + 1);\n }\n function suggestPublicTypeIndex(me) {\n const dirUri = docDirUri(me);\n if (!dirUri)\n throw new Error(`suggestPublicTypeIndex: Cannot derive directory for ${me.uri}`);\n return (0,external_rdflib_namespaceObject.sym)(dirUri + 'publicTypeIndex.ttl');\n }\n // Note this one is based off the pref file not the profile\n function suggestPrivateTypeIndex(preferencesFile) {\n const dirUri = docDirUri(preferencesFile);\n if (!dirUri)\n throw new Error(`suggestPrivateTypeIndex: Cannot derive directory for ${preferencesFile.uri}`);\n return (0,external_rdflib_namespaceObject.sym)(dirUri + 'privateTypeIndex.ttl');\n }\n /*\n * Register a new app in a type index\n * used in chat in bookmark.js (solid-ui)\n * Returns the registration object if successful else null\n */\n async function registerInTypeIndex(instance, index, theClass) {\n const registration = newThing(index);\n const ins = [\n // See https://github.com/solid/solid/blob/main/proposals/data-discovery.md\n (0,external_rdflib_namespaceObject.st)(registration, ns.rdf('type'), ns.solid('TypeRegistration'), index),\n (0,external_rdflib_namespaceObject.st)(registration, ns.solid('forClass'), theClass, index),\n (0,external_rdflib_namespaceObject.st)(registration, ns.solid('instance'), instance, index)\n ];\n try {\n await store.updater.update([], ins);\n }\n catch (err) {\n const msg = `Unable to register ${instance} in index ${index}: ${err}`;\n console.warn(msg);\n return null;\n }\n return registration;\n }\n async function deleteTypeIndexRegistration(item) {\n const reg = store.the(null, ns.solid('instance'), item.instance, item.scope.index);\n if (!reg)\n throw new Error(`deleteTypeIndexRegistration: No registration found for ${item.instance}`);\n const statements = store.statementsMatching(reg, null, null, item.scope.index);\n await store.updater.update(statements, []);\n }\n async function getScopedAppsFromIndex(scope, theClass) {\n const index = scope.index;\n const results = [];\n const registrations = store.statementsMatching(null, ns.solid('instance'), null, index)\n .concat(store.statementsMatching(null, ns.solid('instanceContainer'), null, index))\n .map(st => st.subject);\n for (const reg of registrations) {\n const klass = store.any(reg, ns.solid('forClass'), null, index);\n if (!theClass || klass.sameTerm(theClass)) {\n const instances = store.each(reg, ns.solid('instance'), null, index);\n for (const instance of instances) {\n results.push({ instance, type: klass, scope });\n }\n const containers = store.each(reg, ns.solid('instanceContainer'), null, index);\n for (const instance of containers) {\n await store.fetcher.load(instance);\n results.push({ instance: (0,external_rdflib_namespaceObject.sym)(instance.value), type: klass, scope });\n }\n }\n }\n return results;\n }\n return {\n registerInTypeIndex,\n getRegistrations,\n loadTypeIndexesFor,\n loadCommunityTypeIndexes,\n loadAllTypeIndexes,\n getScopedAppInstances,\n getAppInstances,\n suggestPublicTypeIndex,\n suggestPrivateTypeIndex,\n deleteTypeIndexRegistration,\n getScopedAppsFromIndex\n };\n}\n\n;// ./src/util/utilityLogic.ts\n\n\n\n\nfunction createUtilityLogic(store, aclLogic, containerLogic) {\n async function recursiveDelete(containerNode) {\n try {\n if (containerLogic.isContainer(containerNode)) {\n const aclDocUrl = await aclLogic.findAclDocUrl(containerNode);\n await store.fetcher._fetch(aclDocUrl, { method: 'DELETE' });\n const containerMembers = await containerLogic.getContainerMembers(containerNode);\n await Promise.all(containerMembers.map((url) => recursiveDelete(url)));\n }\n return store.fetcher._fetch(containerNode.value, { method: 'DELETE' });\n }\n catch (e) {\n log(`Please manually remove ${containerNode.value} from your system.`, e);\n }\n }\n /**\n * Create a resource if it really does not exist.\n * Be absolutely sure something does not exist before creating a new empty file,\n * as otherwise existing content could be deleted.\n */\n async function loadOrCreateIfNotExists(doc) {\n var _a, _b, _c, _d, _e;\n try {\n return await store.fetcher.load(doc);\n }\n catch (err) {\n if (((_a = err === null || err === void 0 ? void 0 : err.response) === null || _a === void 0 ? void 0 : _a.status) === 404) {\n try {\n await store.fetcher.webOperation('PUT', doc.uri, {\n data: '',\n contentType: 'text/turtle',\n headers: { 'If-None-Match': '*' }\n });\n }\n catch (putErr) {\n const status = (_c = (_b = putErr === null || putErr === void 0 ? void 0 : putErr.response) === null || _b === void 0 ? void 0 : _b.status) !== null && _c !== void 0 ? _c : putErr === null || putErr === void 0 ? void 0 : putErr.status;\n if (status !== 412) {\n const msg = `createIfNotExists: PUT FAILED: ${doc}: ${putErr}`;\n throw new WebOperationError(msg);\n }\n }\n return await store.fetcher.load(doc);\n }\n if (((_d = err === null || err === void 0 ? void 0 : err.response) === null || _d === void 0 ? void 0 : _d.status) === 401) {\n throw new UnauthorizedError();\n }\n if (((_e = err === null || err === void 0 ? void 0 : err.response) === null || _e === void 0 ? void 0 : _e.status) === 403) {\n if (differentOrigin(doc)) {\n throw new CrossOriginForbiddenError();\n }\n throw new SameOriginForbiddenError();\n }\n const msg = `createIfNotExists doc load error: ${doc}: ${err}`;\n throw new FetchError(err === null || err === void 0 ? void 0 : err.status, `${(err === null || err === void 0 ? void 0 : err.message) || ''}${msg}`);\n }\n }\n async function loadOrCreateWithContentOnCreate(doc, data) {\n var _a, _b, _c, _d;\n try {\n await store.fetcher.load(doc);\n return false;\n }\n catch (err) {\n const status = (_b = (_a = err === null || err === void 0 ? void 0 : err.response) === null || _a === void 0 ? void 0 : _a.status) !== null && _b !== void 0 ? _b : err === null || err === void 0 ? void 0 : err.status;\n if (status !== 404) {\n throw err;\n }\n }\n try {\n await store.fetcher.webOperation('PUT', doc.uri, {\n data,\n contentType: 'text/turtle',\n headers: { 'If-None-Match': '*' }\n });\n return true;\n }\n catch (err) {\n const status = (_d = (_c = err === null || err === void 0 ? void 0 : err.response) === null || _c === void 0 ? void 0 : _c.status) !== null && _d !== void 0 ? _d : err === null || err === void 0 ? void 0 : err.status;\n if (status === 412) {\n // Another client created the resource between our 404 check and PUT.\n return false;\n }\n throw err;\n }\n }\n /*\n * Follow link from this doc to another thing, or else make a new link.\n * Returns existing object, or creates it if non-existent.\n */\n async function followOrCreateLink(subject, predicate, object, doc) {\n await store.fetcher.load(doc);\n const result = store.any(subject, predicate, null, doc);\n if (result)\n return result;\n if (!store.updater.editable(doc)) {\n const msg = `followOrCreateLink: cannot edit ${doc.value}`;\n warn(msg);\n throw new NotEditableError(msg);\n }\n try {\n await store.updater.update([], [(0,external_rdflib_namespaceObject.st)(subject, predicate, object, doc)]);\n }\n catch (err) {\n const msg = `followOrCreateLink: Error making link in ${doc} to ${object}: ${err}`;\n warn(msg);\n throw new WebOperationError(err);\n }\n try {\n await loadOrCreateIfNotExists(object);\n }\n catch (err) {\n warn(`followOrCreateLink: Error loading or saving new linked document: ${object}: ${err}`);\n throw err;\n }\n return object;\n }\n async function followOrCreateLinkWithContentOnCreate(subject, predicate, object, doc, data) {\n await store.fetcher.load(doc);\n const result = store.any(subject, predicate, null, doc);\n if (result)\n return result;\n if (!store.updater.editable(doc)) {\n const msg = `followOrCreateLinkWithContentOnCreate: cannot edit ${doc.value}`;\n warn(msg);\n throw new NotEditableError(msg);\n }\n try {\n await store.updater.update([], [(0,external_rdflib_namespaceObject.st)(subject, predicate, object, doc)]);\n }\n catch (err) {\n const msg = `followOrCreateLinkWithContentOnCreate: Error making link in ${doc} to ${object}: ${err}`;\n warn(msg);\n throw new WebOperationError(msg);\n }\n try {\n await loadOrCreateWithContentOnCreate(object, data);\n }\n catch (err) {\n warn(`followOrCreateLinkWithContentOnCreate: Error loading or saving new linked document: ${object}: ${err}`);\n throw err;\n }\n return object;\n }\n // Copied from\n // https://github.com/solidos/web-access-control-tests/blob/v3.0.0/test/surface/delete.test.ts#L5\n async function setSinglePeerAccess(options) {\n let str = [\n '@prefix acl: <http://www.w3.org/ns/auth/acl#>.',\n '',\n '<#alice> a acl:Authorization;\\n acl:agent <' + options.ownerWebId + '>;',\n ` acl:accessTo <${options.target}>;`,\n ` acl:default <${options.target}>;`,\n ' acl:mode acl:Read, acl:Write, acl:Control.',\n ''\n ].join('\\n');\n if (options.accessToModes) {\n str += [\n '<#bobAccessTo> a acl:Authorization;',\n ` acl:agent <${options.peerWebId}>;`,\n ` acl:accessTo <${options.target}>;`,\n ` acl:mode ${options.accessToModes}.`,\n ''\n ].join('\\n');\n }\n if (options.defaultModes) {\n str += [\n '<#bobDefault> a acl:Authorization;',\n ` acl:agent <${options.peerWebId}>;`,\n ` acl:default <${options.target}>;`,\n ` acl:mode ${options.defaultModes}.`,\n ''\n ].join('\\n');\n }\n const aclDocUrl = await aclLogic.findAclDocUrl((0,external_rdflib_namespaceObject.sym)(options.target));\n return store.fetcher._fetch(aclDocUrl, {\n method: 'PUT',\n body: str,\n headers: [['Content-Type', 'text/turtle']]\n });\n }\n async function createEmptyRdfDoc(doc, comment) {\n await store.fetcher.webOperation('PUT', doc.uri, {\n data: `# ${new Date()} ${comment}\\n`,\n contentType: 'text/turtle'\n });\n }\n return {\n recursiveDelete,\n setSinglePeerAccess,\n createEmptyRdfDoc,\n followOrCreateLink,\n followOrCreateLinkWithContentOnCreate,\n loadOrCreateIfNotExists,\n loadOrCreateWithContentOnCreate\n };\n}\n\n;// ./src/logic/solidLogic.ts\n\n\n\n\n\n\n\n\n\n\n/*\n** It is important to distinquish `fetch`, a function provided by the browser\n** and `Fetcher`, a helper object for the rdflib Store which turns it\n** into a `ConnectedStore` or a `LiveStore`. A Fetcher object is\n** available at store.fetcher, and `fetch` function at `store.fetcher._fetch`,\n*/\nfunction createSolidLogic(specialFetch, session) {\n log('SolidLogic: Unique instance created. There should only be one of these.');\n const store = external_rdflib_namespaceObject.graph();\n external_rdflib_namespaceObject.fetcher(store, { fetch: specialFetch.fetch }); // Attach a web I/O module, store.fetcher\n store.updater = new external_rdflib_namespaceObject.UpdateManager(store); // Add real-time live updates store.updater\n store.features = []; // disable automatic node merging on store load\n const authn = new SolidAuthnLogic(session);\n const acl = createAclLogic(store);\n const containerLogic = createContainerLogic(store);\n const utilityLogic = createUtilityLogic(store, acl, containerLogic);\n const profile = createProfileLogic(store, authn, utilityLogic);\n const chat = createChatLogic(store, profile);\n const inbox = createInboxLogic(store, profile, utilityLogic, containerLogic, acl);\n const typeIndex = createTypeIndexLogic(store, authn, profile, utilityLogic);\n log('SolidAuthnLogic initialized');\n function load(doc) {\n return store.fetcher.load(doc);\n }\n // @@@@ use the one in rdflib.js when it is available and delete this\n function updatePromise(del, ins = []) {\n return new Promise((resolve, reject) => {\n store.updater.update(del, ins, function (_uri, ok, errorBody) {\n if (!ok) {\n reject(new Error(errorBody));\n }\n else {\n resolve();\n }\n }); // callback\n }); // promise\n }\n function clearStore() {\n store.statements.slice().forEach(store.remove.bind(store));\n }\n return {\n store,\n authn,\n acl,\n inbox,\n chat,\n profile,\n typeIndex,\n load,\n updatePromise,\n clearStore\n };\n}\n\n;// ./src/logic/solidLogicSingleton.ts\n\n\n\nconst _fetch = async (url, requestInit) => {\n var _a;\n const omitCreds = requestInit && requestInit.credentials && requestInit.credentials == 'omit';\n const sessionAny = authSession;\n const sessionWebId = ((_a = sessionAny === null || sessionAny === void 0 ? void 0 : sessionAny.info) === null || _a === void 0 ? void 0 : _a.webId) || (sessionAny === null || sessionAny === void 0 ? void 0 : sessionAny.webId);\n if (sessionWebId && !omitCreds) { // see https://github.com/solidos/solidos/issues/114\n // In fact fetch should respect credentials omit itself\n const authenticatedFetch = (typeof sessionAny.fetch === 'function')\n ? sessionAny.fetch.bind(sessionAny)\n : (typeof sessionAny.authFetch === 'function' ? sessionAny.authFetch.bind(sessionAny) : null);\n if (authenticatedFetch) {\n return authenticatedFetch(url, requestInit);\n }\n return window.fetch(url, requestInit);\n }\n else {\n return window.fetch(url, requestInit);\n }\n};\n// Global singleton pattern to ensure unique store across library versions\nconst SINGLETON_SYMBOL = Symbol.for('solid-logic-singleton');\nconst globalTarget = (typeof window !== 'undefined' ? window : __webpack_require__.g);\nfunction getOrCreateSingleton() {\n if (!globalTarget[SINGLETON_SYMBOL]) {\n log('SolidLogic: Creating new global singleton instance.');\n globalTarget[SINGLETON_SYMBOL] = createSolidLogic({ fetch: _fetch }, authSession);\n log('Unique quadstore initialized.');\n }\n else {\n log('SolidLogic: Using existing global singleton instance.');\n }\n return globalTarget[SINGLETON_SYMBOL];\n}\n//this const makes solidLogicSingleton global accessible in mashlib\nconst solidLogicSingleton = getOrCreateSingleton();\n\n\n;// ./src/authn/serverLogout.ts\nasync function performServerSideLogout(options = {}) {\n if (typeof window === 'undefined') {\n return false;\n }\n const issuer = options.issuer || '';\n const postLogoutRedirectPath = options.postLogoutRedirectPath || '/';\n // Provider-specific logout endpoint discovery (OIDC end_session_endpoint).\n try {\n if (issuer) {\n const wellKnownUri = new URL(issuer);\n wellKnownUri.pathname = '/.well-known/openid-configuration';\n const wellKnownResult = await fetch(wellKnownUri.toString(), { credentials: 'include' });\n if (wellKnownResult.status === 200) {\n const openidConfiguration = await wellKnownResult.json();\n if (openidConfiguration && openidConfiguration.end_session_endpoint) {\n await fetch(openidConfiguration.end_session_endpoint, { credentials: 'include' });\n }\n }\n }\n }\n catch (_err) {\n // Continue with local logout even if provider logout is unavailable.\n }\n // NSS well-known logout endpoint clears cookie-backed server sessions.\n try {\n const logoutResponse = await fetch('/.well-known/solid/logout', { credentials: 'include' });\n if (logoutResponse.ok || logoutResponse.redirected) {\n window.location.assign(postLogoutRedirectPath);\n return true;\n }\n }\n catch (_err) {\n // Not all deployments expose this endpoint.\n }\n return false;\n}\n\n;// ./src/issuer/issuerLogic.ts\nconst DEFAULT_ISSUERS = [\n {\n name: 'Solid Community',\n uri: 'https://solidcommunity.net'\n },\n {\n name: 'Solid Web',\n uri: 'https://solidweb.org'\n },\n {\n name: 'Solid Web ME',\n uri: 'https://solidweb.me'\n },\n {\n name: 'Inrupt.com',\n uri: 'https://login.inrupt.com'\n }\n];\n/**\n * @returns - A list of suggested OIDC issuers\n */\nfunction getSuggestedIssuers() {\n // Suggest a default list of OIDC issuers\n const issuers = [...DEFAULT_ISSUERS];\n // Suggest the current host if not already included\n const { host, origin } = new URL(location.href);\n const hosts = issuers.map(({ uri }) => new URL(uri).host);\n if (!hosts.includes(host)) {\n issuers.unshift({ name: host, uri: origin });\n }\n return issuers;\n}\n\n;// ./src/index.ts\n// Make these variables directly accessible as it is what you need most of the time\n// This also makes these variable globaly accesible in mashlib\n\nconst authn = solidLogicSingleton.authn;\nconst src_authSession = solidLogicSingleton.authn.authSession;\nconst store = solidLogicSingleton.store;\n\n\n\n\n\n\n\n\nexport { ACL_LINK, CrossOriginForbiddenError, FetchError, NotEditableError, NotFoundError, SameOriginForbiddenError, UnauthorizedError, WebOperationError, appContext, src_authSession as authSession, authn, createTypeIndexLogic, getSuggestedIssuers, offlineTestID, performServerSideLogout, solidLogicSingleton, store };\n\n//# sourceMappingURL=solid-logic.esm.js.map"],"x_google_ignoreList":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,68,69,70],"mappings":"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"}