kibi-swipl-linux-x64-gnu 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (550) hide show
  1. package/README.md +29 -0
  2. package/bin/swipl +0 -0
  3. package/bin/swipl-win +0 -0
  4. package/build-manifest.json +70 -0
  5. package/lib/cmake/swipl/SWIPLConfig.cmake +21 -0
  6. package/lib/cmake/swipl/SWIPLConfigVersion.cmake +65 -0
  7. package/lib/cmake/swipl/SWIPLTargets-release.cmake +28 -0
  8. package/lib/cmake/swipl/SWIPLTargets.cmake +109 -0
  9. package/lib/swipl/ABI +1 -0
  10. package/lib/swipl/LICENSE +41 -0
  11. package/lib/swipl/README.md +116 -0
  12. package/lib/swipl/app/README.md +25 -0
  13. package/lib/swipl/app/app.pl +87 -0
  14. package/lib/swipl/app/pack.pl +350 -0
  15. package/lib/swipl/app/qlf.pl +521 -0
  16. package/lib/swipl/app/splfr.pl +177 -0
  17. package/lib/swipl/app/sys.pl +310 -0
  18. package/lib/swipl/bin/swipl.home +1 -0
  19. package/lib/swipl/boot/apply.pl +73 -0
  20. package/lib/swipl/boot/attvar.pl +344 -0
  21. package/lib/swipl/boot/autoload.pl +1226 -0
  22. package/lib/swipl/boot/bags.pl +283 -0
  23. package/lib/swipl/boot/dcg.pl +388 -0
  24. package/lib/swipl/boot/dicts.pl +193 -0
  25. package/lib/swipl/boot/dwim.pl +485 -0
  26. package/lib/swipl/boot/engines.pl +152 -0
  27. package/lib/swipl/boot/expand.pl +1628 -0
  28. package/lib/swipl/boot/gc.pl +65 -0
  29. package/lib/swipl/boot/history.pl +304 -0
  30. package/lib/swipl/boot/init.pl +4682 -0
  31. package/lib/swipl/boot/iri.pl +64 -0
  32. package/lib/swipl/boot/license.pl +390 -0
  33. package/lib/swipl/boot/load.pl +81 -0
  34. package/lib/swipl/boot/messages.pl +2521 -0
  35. package/lib/swipl/boot/packs.pl +306 -0
  36. package/lib/swipl/boot/predopts.pl +154 -0
  37. package/lib/swipl/boot/qlf.pl +141 -0
  38. package/lib/swipl/boot/rc.pl +263 -0
  39. package/lib/swipl/boot/syspred.pl +1634 -0
  40. package/lib/swipl/boot/tabling.pl +2321 -0
  41. package/lib/swipl/boot/threads.pl +42 -0
  42. package/lib/swipl/boot/toplevel.pl +2248 -0
  43. package/lib/swipl/boot/topvars.pl +261 -0
  44. package/lib/swipl/boot.prc +0 -0
  45. package/lib/swipl/cmake/swipl.cmake +131 -0
  46. package/lib/swipl/customize/README.md +23 -0
  47. package/lib/swipl/customize/edit +101 -0
  48. package/lib/swipl/customize/init.pl +164 -0
  49. package/lib/swipl/demo/README.md +33 -0
  50. package/lib/swipl/demo/likes.pl +44 -0
  51. package/lib/swipl/doc/packages/examples/chr/bool.chr +281 -0
  52. package/lib/swipl/doc/packages/examples/chr/chrdif.chr +87 -0
  53. package/lib/swipl/doc/packages/examples/chr/chrfreeze.chr +6 -0
  54. package/lib/swipl/doc/packages/examples/chr/family.chr +116 -0
  55. package/lib/swipl/doc/packages/examples/chr/fib.chr +24 -0
  56. package/lib/swipl/doc/packages/examples/chr/fibonacci.chr +31 -0
  57. package/lib/swipl/doc/packages/examples/chr/gcd.chr +28 -0
  58. package/lib/swipl/doc/packages/examples/chr/leq.chr +34 -0
  59. package/lib/swipl/doc/packages/examples/chr/listdom.chr +138 -0
  60. package/lib/swipl/doc/packages/examples/chr/primes.chr +29 -0
  61. package/lib/swipl/doc/packages/examples/http/README.md +98 -0
  62. package/lib/swipl/doc/packages/examples/http/calc.pl +92 -0
  63. package/lib/swipl/doc/packages/examples/http/demo_body.pl +232 -0
  64. package/lib/swipl/doc/packages/examples/http/demo_client.pl +165 -0
  65. package/lib/swipl/doc/packages/examples/http/demo_daemon.pl +38 -0
  66. package/lib/swipl/doc/packages/examples/http/demo_files.pl +50 -0
  67. package/lib/swipl/doc/packages/examples/http/demo_hello.pl +15 -0
  68. package/lib/swipl/doc/packages/examples/http/demo_login.pl +280 -0
  69. package/lib/swipl/doc/packages/examples/http/demo_openid.pl +177 -0
  70. package/lib/swipl/doc/packages/examples/http/demo_pwp.pl +20 -0
  71. package/lib/swipl/doc/packages/examples/http/demo_rest.pl +56 -0
  72. package/lib/swipl/doc/packages/examples/http/demo_threads.pl +52 -0
  73. package/lib/swipl/doc/packages/examples/http/linux-init-script +126 -0
  74. package/lib/swipl/doc/packages/examples/http/pwp/context.pwp +23 -0
  75. package/lib/swipl/doc/packages/examples/http/pwp/index.pwp +25 -0
  76. package/lib/swipl/doc/packages/examples/http/pwp/pwp1.pwp +12 -0
  77. package/lib/swipl/doc/packages/examples/http/pwp/pwp2.pwp +10 -0
  78. package/lib/swipl/doc/packages/examples/http/pwp/pwp3.pwp +25 -0
  79. package/lib/swipl/doc/packages/examples/http/pwp/pwp4.pwp +23 -0
  80. package/lib/swipl/doc/packages/examples/http/pwp/pwp5.pwp +11 -0
  81. package/lib/swipl/doc/packages/examples/http/pwp/pwp6.pwp +3 -0
  82. package/lib/swipl/doc/packages/examples/http/pwp/pwp7.pwp +3 -0
  83. package/lib/swipl/doc/packages/examples/http/pwp/pwp8.pwp +3 -0
  84. package/lib/swipl/doc/packages/examples/http/pwp/pwpdb.pl +12 -0
  85. package/lib/swipl/doc/packages/examples/http/systemd-script.service +18 -0
  86. package/lib/swipl/doc/packages/examples/http/upstart-script.conf +20 -0
  87. package/lib/swipl/doc/packages/examples/plunit/read.pl +17 -0
  88. package/lib/swipl/doc/packages/examples/plunit/simple.pl +33 -0
  89. package/lib/swipl/doc/packages/examples/ssl/client.pl +83 -0
  90. package/lib/swipl/doc/packages/examples/ssl/etc/README +52 -0
  91. package/lib/swipl/doc/packages/examples/ssl/etc/client/client-cert.p12 +0 -0
  92. package/lib/swipl/doc/packages/examples/ssl/etc/client/client-cert.pem +85 -0
  93. package/lib/swipl/doc/packages/examples/ssl/etc/client/client-key.pem +30 -0
  94. package/lib/swipl/doc/packages/examples/ssl/etc/demoCA/cacert.pem +82 -0
  95. package/lib/swipl/doc/packages/examples/ssl/etc/demoCA/careq.pem +18 -0
  96. package/lib/swipl/doc/packages/examples/ssl/etc/demoCA/crlnumber +1 -0
  97. package/lib/swipl/doc/packages/examples/ssl/etc/demoCA/index.txt +3 -0
  98. package/lib/swipl/doc/packages/examples/ssl/etc/demoCA/index.txt.attr +1 -0
  99. package/lib/swipl/doc/packages/examples/ssl/etc/demoCA/newcerts/9DC08797A0F63F7C.pem +85 -0
  100. package/lib/swipl/doc/packages/examples/ssl/etc/demoCA/newcerts/9DC08797A0F63F7D.pem +85 -0
  101. package/lib/swipl/doc/packages/examples/ssl/etc/demoCA/private/cakey.pem +30 -0
  102. package/lib/swipl/doc/packages/examples/ssl/etc/demoCA/serial +1 -0
  103. package/lib/swipl/doc/packages/examples/ssl/etc/server/server-cert.pem +85 -0
  104. package/lib/swipl/doc/packages/examples/ssl/etc/server/server-key.pem +30 -0
  105. package/lib/swipl/doc/packages/examples/ssl/https.pl +267 -0
  106. package/lib/swipl/doc/packages/examples/ssl/server.pl +106 -0
  107. package/lib/swipl/include/SWI-Prolog.h +1544 -0
  108. package/lib/swipl/include/SWI-Stream.h +537 -0
  109. package/lib/swipl/include/Yap/YapInterface.h +283 -0
  110. package/lib/swipl/include/sicstus/sicstus.h +452 -0
  111. package/lib/swipl/lib/x86_64-linux/cgi.so +0 -0
  112. package/lib/swipl/lib/x86_64-linux/crypt.so +0 -0
  113. package/lib/swipl/lib/x86_64-linux/crypto4pl.so +0 -0
  114. package/lib/swipl/lib/x86_64-linux/double_metaphone.so +0 -0
  115. package/lib/swipl/lib/x86_64-linux/files.so +0 -0
  116. package/lib/swipl/lib/x86_64-linux/hashstream.so +0 -0
  117. package/lib/swipl/lib/x86_64-linux/http_stream.so +0 -0
  118. package/lib/swipl/lib/x86_64-linux/isub.so +0 -0
  119. package/lib/swipl/lib/x86_64-linux/json.so +0 -0
  120. package/lib/swipl/lib/x86_64-linux/libswipl.so.10 +0 -0
  121. package/lib/swipl/lib/x86_64-linux/mallocinfo.so +0 -0
  122. package/lib/swipl/lib/x86_64-linux/md54pl.so +0 -0
  123. package/lib/swipl/lib/x86_64-linux/memfile.so +0 -0
  124. package/lib/swipl/lib/x86_64-linux/ntriples.so +0 -0
  125. package/lib/swipl/lib/x86_64-linux/pcre4pl.so +0 -0
  126. package/lib/swipl/lib/x86_64-linux/porter_stem.so +0 -0
  127. package/lib/swipl/lib/x86_64-linux/process.so +0 -0
  128. package/lib/swipl/lib/x86_64-linux/prolog_stream.so +0 -0
  129. package/lib/swipl/lib/x86_64-linux/rdf_db.so +0 -0
  130. package/lib/swipl/lib/x86_64-linux/readutil.so +0 -0
  131. package/lib/swipl/lib/x86_64-linux/rlimit.so +0 -0
  132. package/lib/swipl/lib/x86_64-linux/sched.so +0 -0
  133. package/lib/swipl/lib/x86_64-linux/sgml2pl.so +0 -0
  134. package/lib/swipl/lib/x86_64-linux/sha4pl.so +0 -0
  135. package/lib/swipl/lib/x86_64-linux/snowball.so +0 -0
  136. package/lib/swipl/lib/x86_64-linux/socket.so +0 -0
  137. package/lib/swipl/lib/x86_64-linux/ssl4pl.so +0 -0
  138. package/lib/swipl/lib/x86_64-linux/streaminfo.so +0 -0
  139. package/lib/swipl/lib/x86_64-linux/syslog.so +0 -0
  140. package/lib/swipl/lib/x86_64-linux/time.so +0 -0
  141. package/lib/swipl/lib/x86_64-linux/turtle.so +0 -0
  142. package/lib/swipl/lib/x86_64-linux/uid.so +0 -0
  143. package/lib/swipl/lib/x86_64-linux/unix.so +0 -0
  144. package/lib/swipl/lib/x86_64-linux/uri.so +0 -0
  145. package/lib/swipl/lib/x86_64-linux/websocket.so +0 -0
  146. package/lib/swipl/lib/x86_64-linux/zlib4pl.so +0 -0
  147. package/lib/swipl/library/INDEX.pl +1020 -0
  148. package/lib/swipl/library/aggregate.pl +755 -0
  149. package/lib/swipl/library/ansi_term.pl +653 -0
  150. package/lib/swipl/library/apply.pl +426 -0
  151. package/lib/swipl/library/apply_macros.pl +497 -0
  152. package/lib/swipl/library/arithmetic.pl +320 -0
  153. package/lib/swipl/library/assoc.pl +522 -0
  154. package/lib/swipl/library/atom.pl +169 -0
  155. package/lib/swipl/library/backcomp.pl +688 -0
  156. package/lib/swipl/library/base32.pl +291 -0
  157. package/lib/swipl/library/base64.pl +441 -0
  158. package/lib/swipl/library/broadcast.pl +161 -0
  159. package/lib/swipl/library/build/cmake.pl +137 -0
  160. package/lib/swipl/library/build/conan.pl +232 -0
  161. package/lib/swipl/library/build/make.pl +168 -0
  162. package/lib/swipl/library/build/tools.pl +825 -0
  163. package/lib/swipl/library/charsio.pl +195 -0
  164. package/lib/swipl/library/check.pl +1097 -0
  165. package/lib/swipl/library/check_installation.pl +912 -0
  166. package/lib/swipl/library/clp/INDEX.pl +157 -0
  167. package/lib/swipl/library/clp/bounds.pl +2036 -0
  168. package/lib/swipl/library/clp/clp_distinct.pl +263 -0
  169. package/lib/swipl/library/clp/clp_events.pl +92 -0
  170. package/lib/swipl/library/clp/clpb.pl +1896 -0
  171. package/lib/swipl/library/clp/clpfd.pl +7906 -0
  172. package/lib/swipl/library/clp/simplex.pl +1580 -0
  173. package/lib/swipl/library/codesio.pl +182 -0
  174. package/lib/swipl/library/coinduction.pl +183 -0
  175. package/lib/swipl/library/console_input.pl +289 -0
  176. package/lib/swipl/library/csv.pl +611 -0
  177. package/lib/swipl/library/ctypes.pl +161 -0
  178. package/lib/swipl/library/date.pl +370 -0
  179. package/lib/swipl/library/dcg/INDEX.pl +35 -0
  180. package/lib/swipl/library/dcg/basics.pl +514 -0
  181. package/lib/swipl/library/dcg/high_order.pl +227 -0
  182. package/lib/swipl/library/debug.pl +499 -0
  183. package/lib/swipl/library/dialect/bim.pl +186 -0
  184. package/lib/swipl/library/dialect/commons.pl +77 -0
  185. package/lib/swipl/library/dialect/eclipse/test_util_iso.pl +355 -0
  186. package/lib/swipl/library/dialect/hprolog/format.pl +44 -0
  187. package/lib/swipl/library/dialect/hprolog.pl +314 -0
  188. package/lib/swipl/library/dialect/ifprolog.pl +1317 -0
  189. package/lib/swipl/library/dialect/iso/iso_predicates.pl +277 -0
  190. package/lib/swipl/library/dialect/sicstus/README.TXT +1 -0
  191. package/lib/swipl/library/dialect/sicstus/arrays.pl +121 -0
  192. package/lib/swipl/library/dialect/sicstus/block.pl +278 -0
  193. package/lib/swipl/library/dialect/sicstus/lists.pl +167 -0
  194. package/lib/swipl/library/dialect/sicstus/ordsets.pl +52 -0
  195. package/lib/swipl/library/dialect/sicstus/sockets.pl +174 -0
  196. package/lib/swipl/library/dialect/sicstus/system.pl +262 -0
  197. package/lib/swipl/library/dialect/sicstus/terms.pl +57 -0
  198. package/lib/swipl/library/dialect/sicstus/timeout.pl +92 -0
  199. package/lib/swipl/library/dialect/sicstus.pl +582 -0
  200. package/lib/swipl/library/dialect/sicstus4/aggregate.pl +60 -0
  201. package/lib/swipl/library/dialect/sicstus4/between.pl +62 -0
  202. package/lib/swipl/library/dialect/sicstus4/clpfd.pl +75 -0
  203. package/lib/swipl/library/dialect/sicstus4/file_systems.pl +413 -0
  204. package/lib/swipl/library/dialect/sicstus4/lists.pl +274 -0
  205. package/lib/swipl/library/dialect/sicstus4/ordsets.pl +54 -0
  206. package/lib/swipl/library/dialect/sicstus4/samsort.pl +86 -0
  207. package/lib/swipl/library/dialect/sicstus4/sets.pl +124 -0
  208. package/lib/swipl/library/dialect/sicstus4/sockets.pl +164 -0
  209. package/lib/swipl/library/dialect/sicstus4/system.pl +80 -0
  210. package/lib/swipl/library/dialect/sicstus4/terms.pl +89 -0
  211. package/lib/swipl/library/dialect/sicstus4/timeout.pl +43 -0
  212. package/lib/swipl/library/dialect/sicstus4/types.pl +103 -0
  213. package/lib/swipl/library/dialect/sicstus4.pl +200 -0
  214. package/lib/swipl/library/dialect/swi/syspred_options.pl +250 -0
  215. package/lib/swipl/library/dialect/xsb/README.md +20 -0
  216. package/lib/swipl/library/dialect/xsb/basics.pl +318 -0
  217. package/lib/swipl/library/dialect/xsb/consult.pl +87 -0
  218. package/lib/swipl/library/dialect/xsb/curr_sym.pl +57 -0
  219. package/lib/swipl/library/dialect/xsb/error_handler.pl +111 -0
  220. package/lib/swipl/library/dialect/xsb/gensym.pl +53 -0
  221. package/lib/swipl/library/dialect/xsb/gpp.pl +138 -0
  222. package/lib/swipl/library/dialect/xsb/intern.pl +48 -0
  223. package/lib/swipl/library/dialect/xsb/lists.pl +47 -0
  224. package/lib/swipl/library/dialect/xsb/machine.pl +295 -0
  225. package/lib/swipl/library/dialect/xsb/ordsets.pl +53 -0
  226. package/lib/swipl/library/dialect/xsb/setof.pl +54 -0
  227. package/lib/swipl/library/dialect/xsb/source.pl +308 -0
  228. package/lib/swipl/library/dialect/xsb/standard.pl +169 -0
  229. package/lib/swipl/library/dialect/xsb/storage.pl +70 -0
  230. package/lib/swipl/library/dialect/xsb/string.pl +76 -0
  231. package/lib/swipl/library/dialect/xsb/thread.pl +62 -0
  232. package/lib/swipl/library/dialect/xsb/timed_call.pl +158 -0
  233. package/lib/swipl/library/dialect/xsb.pl +688 -0
  234. package/lib/swipl/library/dialect/yap/README.TXT +8 -0
  235. package/lib/swipl/library/dialect/yap.pl +283 -0
  236. package/lib/swipl/library/dialect.pl +123 -0
  237. package/lib/swipl/library/dicts.pl +399 -0
  238. package/lib/swipl/library/dif.pl +426 -0
  239. package/lib/swipl/library/edinburgh.pl +138 -0
  240. package/lib/swipl/library/edit.pl +783 -0
  241. package/lib/swipl/library/error.pl +495 -0
  242. package/lib/swipl/library/exceptions.pl +231 -0
  243. package/lib/swipl/library/explain.pl +543 -0
  244. package/lib/swipl/library/ext/RDF/INDEX.pl +25 -0
  245. package/lib/swipl/library/ext/RDF/rdf.pl +450 -0
  246. package/lib/swipl/library/ext/RDF/rdf_parser.pl +649 -0
  247. package/lib/swipl/library/ext/RDF/rdf_triple.pl +448 -0
  248. package/lib/swipl/library/ext/RDF/rdf_write.pl +701 -0
  249. package/lib/swipl/library/ext/RDF/rewrite_term.pl +177 -0
  250. package/lib/swipl/library/ext/chr/chr/a_star.pl +80 -0
  251. package/lib/swipl/library/ext/chr/chr/binomialheap.pl +142 -0
  252. package/lib/swipl/library/ext/chr/chr/builtins.pl +629 -0
  253. package/lib/swipl/library/ext/chr/chr/chr_compiler_errors.pl +179 -0
  254. package/lib/swipl/library/ext/chr/chr/chr_compiler_options.pl +382 -0
  255. package/lib/swipl/library/ext/chr/chr/chr_compiler_utility.pl +338 -0
  256. package/lib/swipl/library/ext/chr/chr/chr_debug.pl +59 -0
  257. package/lib/swipl/library/ext/chr/chr/chr_hashtable_store.pl +425 -0
  258. package/lib/swipl/library/ext/chr/chr/chr_integertable_store.pl +139 -0
  259. package/lib/swipl/library/ext/chr/chr/chr_messages.pl +176 -0
  260. package/lib/swipl/library/ext/chr/chr/chr_op.pl +53 -0
  261. package/lib/swipl/library/ext/chr/chr/chr_runtime.pl +1016 -0
  262. package/lib/swipl/library/ext/chr/chr/chr_translate.pl +25424 -0
  263. package/lib/swipl/library/ext/chr/chr/clean_code.pl +252 -0
  264. package/lib/swipl/library/ext/chr/chr/find.pl +78 -0
  265. package/lib/swipl/library/ext/chr/chr/guard_entailment.pl +19432 -0
  266. package/lib/swipl/library/ext/chr/chr/listmap.pl +108 -0
  267. package/lib/swipl/library/ext/chr/chr/pairlist.pl +78 -0
  268. package/lib/swipl/library/ext/chr/chr.pl +686 -0
  269. package/lib/swipl/library/ext/clib/INDEX.pl +158 -0
  270. package/lib/swipl/library/ext/clib/cgi.pl +86 -0
  271. package/lib/swipl/library/ext/clib/crypt.pl +44 -0
  272. package/lib/swipl/library/ext/clib/filesex.pl +644 -0
  273. package/lib/swipl/library/ext/clib/hash_stream.pl +119 -0
  274. package/lib/swipl/library/ext/clib/mallocinfo.pl +138 -0
  275. package/lib/swipl/library/ext/clib/md5.pl +68 -0
  276. package/lib/swipl/library/ext/clib/memfile.pl +61 -0
  277. package/lib/swipl/library/ext/clib/process.pl +573 -0
  278. package/lib/swipl/library/ext/clib/prolog_server.pl +157 -0
  279. package/lib/swipl/library/ext/clib/prolog_stream.pl +80 -0
  280. package/lib/swipl/library/ext/clib/rlimit.pl +54 -0
  281. package/lib/swipl/library/ext/clib/sched.pl +85 -0
  282. package/lib/swipl/library/ext/clib/sha.pl +162 -0
  283. package/lib/swipl/library/ext/clib/socket.pl +1102 -0
  284. package/lib/swipl/library/ext/clib/streaminfo.pl +103 -0
  285. package/lib/swipl/library/ext/clib/streampool.pl +136 -0
  286. package/lib/swipl/library/ext/clib/syslog.pl +180 -0
  287. package/lib/swipl/library/ext/clib/time.pl +194 -0
  288. package/lib/swipl/library/ext/clib/udp_broadcast.pl +975 -0
  289. package/lib/swipl/library/ext/clib/uid.pl +220 -0
  290. package/lib/swipl/library/ext/clib/unix.pl +317 -0
  291. package/lib/swipl/library/ext/clib/uri.pl +530 -0
  292. package/lib/swipl/library/ext/clib/uuid.pl +207 -0
  293. package/lib/swipl/library/ext/http/http/INDEX.pl +266 -0
  294. package/lib/swipl/library/ext/http/http/README.md +34 -0
  295. package/lib/swipl/library/ext/http/http/ax.pl +189 -0
  296. package/lib/swipl/library/ext/http/http/dcg_basics.pl +49 -0
  297. package/lib/swipl/library/ext/http/http/graphql.pl +1367 -0
  298. package/lib/swipl/library/ext/http/http/html_decl.pl +416 -0
  299. package/lib/swipl/library/ext/http/http/html_head.pl +654 -0
  300. package/lib/swipl/library/ext/http/http/html_quasiquotations.pl +120 -0
  301. package/lib/swipl/library/ext/http/http/html_write.pl +1425 -0
  302. package/lib/swipl/library/ext/http/http/htmx.pl +139 -0
  303. package/lib/swipl/library/ext/http/http/http_authenticate.pl +364 -0
  304. package/lib/swipl/library/ext/http/http/http_client.pl +412 -0
  305. package/lib/swipl/library/ext/http/http/http_cookie.pl +245 -0
  306. package/lib/swipl/library/ext/http/http/http_cors.pl +176 -0
  307. package/lib/swipl/library/ext/http/http/http_digest.pl +820 -0
  308. package/lib/swipl/library/ext/http/http/http_dirindex.pl +296 -0
  309. package/lib/swipl/library/ext/http/http/http_dispatch.pl +1552 -0
  310. package/lib/swipl/library/ext/http/http/http_dyn_workers.pl +214 -0
  311. package/lib/swipl/library/ext/http/http/http_error.pl +126 -0
  312. package/lib/swipl/library/ext/http/http/http_exception.pl +225 -0
  313. package/lib/swipl/library/ext/http/http/http_files.pl +163 -0
  314. package/lib/swipl/library/ext/http/http/http_header.pl +2820 -0
  315. package/lib/swipl/library/ext/http/http/http_hook.pl +106 -0
  316. package/lib/swipl/library/ext/http/http/http_host.pl +204 -0
  317. package/lib/swipl/library/ext/http/http/http_load.pl +113 -0
  318. package/lib/swipl/library/ext/http/http/http_log.pl +738 -0
  319. package/lib/swipl/library/ext/http/http/http_multipart_plugin.pl +232 -0
  320. package/lib/swipl/library/ext/http/http/http_open.pl +1821 -0
  321. package/lib/swipl/library/ext/http/http/http_openid.pl +1561 -0
  322. package/lib/swipl/library/ext/http/http/http_parameters.pl +504 -0
  323. package/lib/swipl/library/ext/http/http/http_path.pl +380 -0
  324. package/lib/swipl/library/ext/http/http/http_proxy.pl +80 -0
  325. package/lib/swipl/library/ext/http/http/http_pwp.pl +351 -0
  326. package/lib/swipl/library/ext/http/http/http_redis_plugin.pl +332 -0
  327. package/lib/swipl/library/ext/http/http/http_server.pl +105 -0
  328. package/lib/swipl/library/ext/http/http/http_server_files.pl +126 -0
  329. package/lib/swipl/library/ext/http/http/http_server_health.pl +186 -0
  330. package/lib/swipl/library/ext/http/http/http_session.pl +1040 -0
  331. package/lib/swipl/library/ext/http/http/http_sgml_plugin.pl +137 -0
  332. package/lib/swipl/library/ext/http/http/http_stream.pl +376 -0
  333. package/lib/swipl/library/ext/http/http/http_unix_daemon.pl +989 -0
  334. package/lib/swipl/library/ext/http/http/http_wrapper.pl +559 -0
  335. package/lib/swipl/library/ext/http/http/hub.pl +600 -0
  336. package/lib/swipl/library/ext/http/http/js_write.pl +461 -0
  337. package/lib/swipl/library/ext/http/http/mimepack.pl +224 -0
  338. package/lib/swipl/library/ext/http/http/mimetype.pl +276 -0
  339. package/lib/swipl/library/ext/http/http/term_html.pl +797 -0
  340. package/lib/swipl/library/ext/http/http/thread_httpd.pl +1181 -0
  341. package/lib/swipl/library/ext/http/http/web/css/dirindex.css +24 -0
  342. package/lib/swipl/library/ext/http/http/web/css/openid.css +57 -0
  343. package/lib/swipl/library/ext/http/http/web/icons/back.png +0 -0
  344. package/lib/swipl/library/ext/http/http/web/icons/c.png +0 -0
  345. package/lib/swipl/library/ext/http/http/web/icons/compressed.png +0 -0
  346. package/lib/swipl/library/ext/http/http/web/icons/folder.png +0 -0
  347. package/lib/swipl/library/ext/http/http/web/icons/generic.png +0 -0
  348. package/lib/swipl/library/ext/http/http/web/icons/layout.png +0 -0
  349. package/lib/swipl/library/ext/http/http/web/icons/openid-logo-square.png +0 -0
  350. package/lib/swipl/library/ext/http/http/web/icons/openid-logo-tiny.png +0 -0
  351. package/lib/swipl/library/ext/http/http/websocket.pl +729 -0
  352. package/lib/swipl/library/ext/http/http/yadis.pl +205 -0
  353. package/lib/swipl/library/ext/json/INDEX.pl +36 -0
  354. package/lib/swipl/library/ext/json/http/INDEX.pl +16 -0
  355. package/lib/swipl/library/ext/json/http/http_json.pl +490 -0
  356. package/lib/swipl/library/ext/json/http/js_grammar.pl +53 -0
  357. package/lib/swipl/library/ext/json/http/json.pl +48 -0
  358. package/lib/swipl/library/ext/json/http/json_convert.pl +48 -0
  359. package/lib/swipl/library/ext/json/json.pl +1215 -0
  360. package/lib/swipl/library/ext/json/json_convert.pl +681 -0
  361. package/lib/swipl/library/ext/json/json_grammar.pl +349 -0
  362. package/lib/swipl/library/ext/json/json_rpc_client.pl +423 -0
  363. package/lib/swipl/library/ext/json/json_rpc_common.pl +104 -0
  364. package/lib/swipl/library/ext/json/json_rpc_server.pl +489 -0
  365. package/lib/swipl/library/ext/json/json_schema.pl +2111 -0
  366. package/lib/swipl/library/ext/nlp/INDEX.pl +15 -0
  367. package/lib/swipl/library/ext/nlp/double_metaphone.pl +86 -0
  368. package/lib/swipl/library/ext/nlp/isub.pl +162 -0
  369. package/lib/swipl/library/ext/nlp/porter_stem.pl +50 -0
  370. package/lib/swipl/library/ext/nlp/snowball.pl +97 -0
  371. package/lib/swipl/library/ext/pcre/INDEX.pl +17 -0
  372. package/lib/swipl/library/ext/pcre/pcre.pl +974 -0
  373. package/lib/swipl/library/ext/plunit/INDEX.pl +20 -0
  374. package/lib/swipl/library/ext/plunit/plunit.pl +2631 -0
  375. package/lib/swipl/library/ext/plunit/test_wizard.pl +249 -0
  376. package/lib/swipl/library/ext/semweb/semweb/INDEX.pl +288 -0
  377. package/lib/swipl/library/ext/semweb/semweb/rdf11.pl +2106 -0
  378. package/lib/swipl/library/ext/semweb/semweb/rdf11_containers.pl +299 -0
  379. package/lib/swipl/library/ext/semweb/semweb/rdf_cache.pl +278 -0
  380. package/lib/swipl/library/ext/semweb/semweb/rdf_compare.pl +132 -0
  381. package/lib/swipl/library/ext/semweb/semweb/rdf_db.pl +3468 -0
  382. package/lib/swipl/library/ext/semweb/semweb/rdf_edit.pl +1145 -0
  383. package/lib/swipl/library/ext/semweb/semweb/rdf_http_plugin.pl +274 -0
  384. package/lib/swipl/library/ext/semweb/semweb/rdf_library.pl +1021 -0
  385. package/lib/swipl/library/ext/semweb/semweb/rdf_litindex.pl +1035 -0
  386. package/lib/swipl/library/ext/semweb/semweb/rdf_ntriples.pl +422 -0
  387. package/lib/swipl/library/ext/semweb/semweb/rdf_persistency.pl +1576 -0
  388. package/lib/swipl/library/ext/semweb/semweb/rdf_portray.pl +182 -0
  389. package/lib/swipl/library/ext/semweb/semweb/rdf_prefixes.pl +681 -0
  390. package/lib/swipl/library/ext/semweb/semweb/rdf_sandbox.pl +153 -0
  391. package/lib/swipl/library/ext/semweb/semweb/rdf_turtle.pl +54 -0
  392. package/lib/swipl/library/ext/semweb/semweb/rdf_turtle_write.pl +1587 -0
  393. package/lib/swipl/library/ext/semweb/semweb/rdf_zlib_plugin.pl +52 -0
  394. package/lib/swipl/library/ext/semweb/semweb/rdfa.pl +1510 -0
  395. package/lib/swipl/library/ext/semweb/semweb/rdfs.pl +475 -0
  396. package/lib/swipl/library/ext/semweb/semweb/sparql_client.pl +643 -0
  397. package/lib/swipl/library/ext/semweb/semweb/turtle.pl +455 -0
  398. package/lib/swipl/library/ext/sgml/DTD/HTML4.dcl +88 -0
  399. package/lib/swipl/library/ext/sgml/DTD/HTML4.dtd +1092 -0
  400. package/lib/swipl/library/ext/sgml/DTD/HTML4.soc +6 -0
  401. package/lib/swipl/library/ext/sgml/DTD/HTML5.dtd +906 -0
  402. package/lib/swipl/library/ext/sgml/DTD/HTMLlat1.ent +195 -0
  403. package/lib/swipl/library/ext/sgml/DTD/HTMLspec.ent +77 -0
  404. package/lib/swipl/library/ext/sgml/DTD/HTMLsym.ent +241 -0
  405. package/lib/swipl/library/ext/sgml/INDEX.pl +64 -0
  406. package/lib/swipl/library/ext/sgml/c14n2.pl +203 -0
  407. package/lib/swipl/library/ext/sgml/iso_639.pl +631 -0
  408. package/lib/swipl/library/ext/sgml/pwp.pl +705 -0
  409. package/lib/swipl/library/ext/sgml/sgml.pl +815 -0
  410. package/lib/swipl/library/ext/sgml/sgml_write.pl +1003 -0
  411. package/lib/swipl/library/ext/sgml/xpath.pl +620 -0
  412. package/lib/swipl/library/ext/sgml/xsdp_types.pl +232 -0
  413. package/lib/swipl/library/ext/ssl/INDEX.pl +60 -0
  414. package/lib/swipl/library/ext/ssl/crypto.pl +1015 -0
  415. package/lib/swipl/library/ext/ssl/http/INDEX.pl +5 -0
  416. package/lib/swipl/library/ext/ssl/http/http_ssl_plugin.pl +296 -0
  417. package/lib/swipl/library/ext/ssl/saml.pl +609 -0
  418. package/lib/swipl/library/ext/ssl/ssl.pl +647 -0
  419. package/lib/swipl/library/ext/ssl/xmldsig.pl +391 -0
  420. package/lib/swipl/library/ext/ssl/xmlenc.pl +354 -0
  421. package/lib/swipl/library/ext/zlib/INDEX.pl +8 -0
  422. package/lib/swipl/library/ext/zlib/zlib.pl +112 -0
  423. package/lib/swipl/library/fastrw.pl +105 -0
  424. package/lib/swipl/library/files.pl +80 -0
  425. package/lib/swipl/library/gensym.pl +111 -0
  426. package/lib/swipl/library/git.pl +1027 -0
  427. package/lib/swipl/library/hashtable.pl +365 -0
  428. package/lib/swipl/library/heaps.pl +252 -0
  429. package/lib/swipl/library/hotfix.pl +239 -0
  430. package/lib/swipl/library/http/jquery.pl +103 -0
  431. package/lib/swipl/library/http/web/js/jquery-3.6.0.min.js +2 -0
  432. package/lib/swipl/library/increval.pl +217 -0
  433. package/lib/swipl/library/intercept.pl +263 -0
  434. package/lib/swipl/library/iostream.pl +237 -0
  435. package/lib/swipl/library/iri_scheme/file.pl +70 -0
  436. package/lib/swipl/library/lazy_lists.pl +481 -0
  437. package/lib/swipl/library/listing.pl +1362 -0
  438. package/lib/swipl/library/lists.pl +860 -0
  439. package/lib/swipl/library/lynx/INDEX.pl +14 -0
  440. package/lib/swipl/library/lynx/format.pl +380 -0
  441. package/lib/swipl/library/lynx/html_style.pl +129 -0
  442. package/lib/swipl/library/lynx/html_text.pl +865 -0
  443. package/lib/swipl/library/lynx/pldoc_style.pl +87 -0
  444. package/lib/swipl/library/macros.pl +451 -0
  445. package/lib/swipl/library/main.pl +1200 -0
  446. package/lib/swipl/library/make.pl +197 -0
  447. package/lib/swipl/library/modules.pl +129 -0
  448. package/lib/swipl/library/nb_rbtrees.pl +267 -0
  449. package/lib/swipl/library/nb_set.pl +203 -0
  450. package/lib/swipl/library/obfuscate.pl +115 -0
  451. package/lib/swipl/library/occurs.pl +241 -0
  452. package/lib/swipl/library/operators.pl +182 -0
  453. package/lib/swipl/library/option.pl +388 -0
  454. package/lib/swipl/library/optparse.pl +966 -0
  455. package/lib/swipl/library/ordsets.pl +518 -0
  456. package/lib/swipl/library/oset.pl +160 -0
  457. package/lib/swipl/library/pairs.pl +187 -0
  458. package/lib/swipl/library/persistency.pl +713 -0
  459. package/lib/swipl/library/pio.pl +47 -0
  460. package/lib/swipl/library/portray_text.pl +277 -0
  461. package/lib/swipl/library/pprint.pl +940 -0
  462. package/lib/swipl/library/predicate_options.pl +975 -0
  463. package/lib/swipl/library/prolog_autoload.pl +233 -0
  464. package/lib/swipl/library/prolog_breakpoints.pl +396 -0
  465. package/lib/swipl/library/prolog_clause.pl +1104 -0
  466. package/lib/swipl/library/prolog_code.pl +416 -0
  467. package/lib/swipl/library/prolog_codewalk.pl +1248 -0
  468. package/lib/swipl/library/prolog_colour.pl +3301 -0
  469. package/lib/swipl/library/prolog_colour.qlf +0 -0
  470. package/lib/swipl/library/prolog_config.pl +154 -0
  471. package/lib/swipl/library/prolog_coverage.pl +1333 -0
  472. package/lib/swipl/library/prolog_debug.pl +404 -0
  473. package/lib/swipl/library/prolog_deps.pl +675 -0
  474. package/lib/swipl/library/prolog_evaluable.pl +234 -0
  475. package/lib/swipl/library/prolog_format.pl +219 -0
  476. package/lib/swipl/library/prolog_history.pl +161 -0
  477. package/lib/swipl/library/prolog_jiti.pl +333 -0
  478. package/lib/swipl/library/prolog_locale.pl +61 -0
  479. package/lib/swipl/library/prolog_metainference.pl +307 -0
  480. package/lib/swipl/library/prolog_pack.pl +3906 -0
  481. package/lib/swipl/library/prolog_profile.pl +346 -0
  482. package/lib/swipl/library/prolog_qlfmake.pl +533 -0
  483. package/lib/swipl/library/prolog_source.pl +1188 -0
  484. package/lib/swipl/library/prolog_stack.pl +794 -0
  485. package/lib/swipl/library/prolog_trace.pl +365 -0
  486. package/lib/swipl/library/prolog_versions.pl +347 -0
  487. package/lib/swipl/library/prolog_wrap.pl +164 -0
  488. package/lib/swipl/library/prolog_xref.pl +3090 -0
  489. package/lib/swipl/library/prolog_xref.qlf +0 -0
  490. package/lib/swipl/library/pure_input.pl +266 -0
  491. package/lib/swipl/library/qpforeign.pl +695 -0
  492. package/lib/swipl/library/qsave.pl +1516 -0
  493. package/lib/swipl/library/quasi_quotations.pl +300 -0
  494. package/lib/swipl/library/quintus.pl +437 -0
  495. package/lib/swipl/library/random.pl +459 -0
  496. package/lib/swipl/library/rbtrees.pl +1153 -0
  497. package/lib/swipl/library/readln.pl +256 -0
  498. package/lib/swipl/library/readutil.pl +304 -0
  499. package/lib/swipl/library/record.pl +544 -0
  500. package/lib/swipl/library/rwlocks.pl +172 -0
  501. package/lib/swipl/library/sandbox.pl +1384 -0
  502. package/lib/swipl/library/semweb/dc.rdfs +198 -0
  503. package/lib/swipl/library/semweb/eor.rdfs +95 -0
  504. package/lib/swipl/library/semweb/owl.owl +287 -0
  505. package/lib/swipl/library/semweb/rdf_library.ttl +90 -0
  506. package/lib/swipl/library/semweb/rdfs.rdfs +251 -0
  507. package/lib/swipl/library/settings.pl +755 -0
  508. package/lib/swipl/library/shell.pl +462 -0
  509. package/lib/swipl/library/shlib.pl +670 -0
  510. package/lib/swipl/library/solution_sequences.pl +439 -0
  511. package/lib/swipl/library/sort.pl +119 -0
  512. package/lib/swipl/library/statistics.pl +541 -0
  513. package/lib/swipl/library/streams.pl +118 -0
  514. package/lib/swipl/library/strings.pl +469 -0
  515. package/lib/swipl/library/system.pl +95 -0
  516. package/lib/swipl/library/tables.pl +381 -0
  517. package/lib/swipl/library/tableutil.pl +771 -0
  518. package/lib/swipl/library/tabling.pl +42 -0
  519. package/lib/swipl/library/terms.pl +457 -0
  520. package/lib/swipl/library/theme/auto.pl +61 -0
  521. package/lib/swipl/library/theme/dark.pl +455 -0
  522. package/lib/swipl/library/theme/light.pl +45 -0
  523. package/lib/swipl/library/thread.pl +810 -0
  524. package/lib/swipl/library/thread_pool.pl +508 -0
  525. package/lib/swipl/library/threadutil.pl +574 -0
  526. package/lib/swipl/library/tty.pl +316 -0
  527. package/lib/swipl/library/ugraphs.pl +644 -0
  528. package/lib/swipl/library/unicode/INDEX.pl +6 -0
  529. package/lib/swipl/library/unicode/blocks.pl +414 -0
  530. package/lib/swipl/library/url.pl +1129 -0
  531. package/lib/swipl/library/utf8.pl +145 -0
  532. package/lib/swipl/library/varnumbers.pl +221 -0
  533. package/lib/swipl/library/vm.pl +251 -0
  534. package/lib/swipl/library/wfs.pl +205 -0
  535. package/lib/swipl/library/when.pl +263 -0
  536. package/lib/swipl/library/writef.pl +278 -0
  537. package/lib/swipl/library/www_browser.pl +251 -0
  538. package/lib/swipl/library/yall.pl +574 -0
  539. package/lib/swipl/library/zip.pl +211 -0
  540. package/lib/swipl/swipl.home +1 -0
  541. package/lib/vendor/libcrypto.so.3 +0 -0
  542. package/lib/vendor/libpcre2-8.so.0 +0 -0
  543. package/lib/vendor/libssl.so.3 +0 -0
  544. package/lib/vendor/libz.so.1 +0 -0
  545. package/licenses/OpenSSL-LICENSE.txt +177 -0
  546. package/licenses/PCRE2-COPYING +5 -0
  547. package/licenses/README.md +12 -0
  548. package/licenses/SWI-Prolog-LICENSE +41 -0
  549. package/licenses/zlib-LICENSE +22 -0
  550. package/package.json +27 -0
@@ -0,0 +1,1367 @@
1
+ /* Part of SWI-Prolog
2
+
3
+ Author: Eshel Yaron
4
+ E-mail: eshel@swi-prolog.org
5
+ Copyright (c) 2022, SWI-Prolog Solutions B.V.
6
+ All rights reserved.
7
+
8
+ Redistribution and use in source and binary forms, with or without
9
+ modification, are permitted provided that the following conditions
10
+ are met:
11
+
12
+ 1. Redistributions of source code must retain the above copyright
13
+ notice, this list of conditions and the following disclaimer.
14
+
15
+ 2. Redistributions in binary form must reproduce the above copyright
16
+ notice, this list of conditions and the following disclaimer in
17
+ the documentation and/or other materials provided with the
18
+ distribution.
19
+
20
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
21
+ "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
22
+ LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
23
+ FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
24
+ COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
25
+ INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
26
+ BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
27
+ LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
28
+ CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
29
+ LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
30
+ ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
31
+ POSSIBILITY OF SUCH DAMAGE.
32
+ */
33
+
34
+ :- module(graphql,
35
+ [ graphql_read_document/3, % +Source, -Document, +Options
36
+ graphql_execute_document/4, % +URI, +Document, -Result, +Options
37
+ graphql_document_to_string/3, % +Document, -String, +Options
38
+ graphql_document_to_codes/3, % +Document, -Codes, +Options
39
+ graphql/4 % Quasi-quotation syntax
40
+ ]).
41
+
42
+ /** <module> GraphQL interface
43
+
44
+ This module provides predicates for working with GraphQL, a query
45
+ language for HTTP-based APIs.
46
+
47
+ */
48
+
49
+ :- autoload(library(quasi_quotations),
50
+ [phrase_from_quasi_quotation/2, quasi_quotation_syntax/1]).
51
+ :- autoload(library(dcg/basics),
52
+ [ prolog_var_name//1,
53
+ digit//1,
54
+ digits//1,
55
+ xdigit//1,
56
+ xinteger//1
57
+ ]).
58
+ :- autoload(library(dcg/high_order), [optional//2, sequence//2]).
59
+ :- autoload(library(json), [atom_json_dict/3]).
60
+ :- autoload(library(http/http_client), [http_post/4]).
61
+ :- autoload(library(apply), [include/3]).
62
+ :- autoload(library(lists), [member/2, append/3]).
63
+ :- autoload(library(option), [option/3, option/2]).
64
+ :- autoload(library(pure_input), [phrase_from_stream/2]).
65
+ :- use_module(library(http/http_json), []).
66
+
67
+
68
+ %! graphql_execute_document(+URI, +Document, -Result, +Options) is det.
69
+ %
70
+ % Send GraphQL document Document to be executed by the GraphQL
71
+ % endpoint at URI.
72
+ %
73
+ % Document is a Prolog term representing the abstract syntax tree of
74
+ % the GraphQL document, as obtained from e.g. graphql_read_document/3
75
+ % or graphql/4 quasi-quotation. Result is unified with a dict
76
+ % representing the JSON formatted response received from the server.
77
+ %
78
+ % The following example shows how graphql_execute_document/4 can be
79
+ % used to expose a simple GraphQL interface to Prolog:
80
+ %
81
+ % ```prolog
82
+ % sourcehut_repository_description(Owner, Repo, Desc) :-
83
+ % graphql_execute_document("https://git.sr.ht/query",
84
+ % {| graphql(Owner, Repo) ||
85
+ % { user(username: <Owner>)
86
+ % { repository(name: <Repo>)
87
+ % { description } } } |},
88
+ % Dict,
89
+ % [token(...)]),
90
+ % Desc = Dict.get(data/user/repository/description).
91
+ %
92
+ %
93
+ % ?- sourcehut_repository_description("eshel", "sourcehut.pl", Desc).
94
+ % Desc = "SWI-Prolog package implementing a SourceHut GraphQL API client.".
95
+ % ```
96
+ %
97
+ % Options is a list whose elements are one of the following:
98
+ % - token(+Token)
99
+ % Token is string that will be used as an OAuth2.0 token. See also
100
+ % graphql_auth_token_hook/2.
101
+ % - variables(+Variables)
102
+ % Variables is a dict with keys corresponding to GraphQL
103
+ % variables that occur in Document as `$key`.
104
+ % Variables is sent to the remote to the GraphQL endpoint in
105
+ % JSON format for server-side interpolation.
106
+ % For more information about GraphQL variables, see
107
+ % https://spec.graphql.org/draft/#sec-Language.
108
+
109
+
110
+ :- predicate_options(graphql_execute_document/4, 4,
111
+ [variables(list),
112
+ data(list),
113
+ pass_to(graphql_auth_token/3, 3),
114
+ pass_to(graphql_document_to_string/3, 3)]).
115
+
116
+
117
+ graphql_execute_document(URI,
118
+ Document,
119
+ Result,
120
+ Options) :-
121
+ option(variables(Variables), Options, null),
122
+ option(data(Data), Options, [map=null]),
123
+ graphql_auth_token(URI, Token, Options),
124
+ graphql_document_to_string(Document, Text, Options),
125
+ atom_json_dict(Operations,
126
+ _{query: Text, variables: Variables},
127
+ []),
128
+ http_post(URI,
129
+ form_data([operations=Operations|Data]),
130
+ Result,
131
+ [json_object(dict), authorization(bearer(Token))]).
132
+
133
+
134
+ :- predicate_options(graphql_auth_token/3, 3,
135
+ [token(string)]).
136
+
137
+
138
+ graphql_auth_token(_URI, Token, Options) :-
139
+ option(token(Token), Options),
140
+ !.
141
+ graphql_auth_token(URI, Token, _Options) :-
142
+ graphql_auth_token_hook(URI, Token),
143
+ !.
144
+
145
+
146
+ %! graphql_auth_token_hook(+URI, -Token) is nondet.
147
+ %
148
+ % Multifile, dynamic hook. graphql_execute_document/4 consults this
149
+ % hook to set authorization token for the GraphQL endpoint at URI.
150
+ :- multifile graphql_auth_token_hook/2.
151
+ :- dynamic graphql_auth_token_hook/2.
152
+
153
+
154
+
155
+
156
+ %! graphql(+Content, +Args, -VariableNames, -Result) is det.
157
+ %
158
+ % Quasi-quotation syntax for embedding GraphQL in Prolog text.
159
+ % Prolog variables can be incorporated in the quasi-quotation using
160
+ % the special lexical construct "<VarName>" where VarName is the name
161
+ % of a variable that is an element of Args. See also option
162
+ % variable_names(+VarNames) in graphql_read_document/3.
163
+ %
164
+ % Result is a term representing the given GraphQL document in the
165
+ % same format as used by graphql_read_document/3.
166
+
167
+ :- quasi_quotation_syntax(graphql).
168
+
169
+ graphql(Content, Args, VariableNames0, Result) :-
170
+ include(qq_var(Args), VariableNames0, VariableNames),
171
+ phrase_from_quasi_quotation(graphql_tokens(Tokens,
172
+ [variable_names(VariableNames)]),
173
+ Content),
174
+ phrase(graphql_executable_document(Result), Tokens).
175
+
176
+
177
+ qq_var(Vars, _=Var) :- member(V, Vars), V == Var, !.
178
+
179
+
180
+ %! graphql_read_document(+Source, -Document, +Options) is semidet.
181
+ %
182
+ % True when Document is a term representing the abstract syntax tree
183
+ % obtained from parsing Source as a GraphQL executable document.
184
+ %
185
+ % Document is a list of terms representing _GraphQL executable
186
+ % definitions_, each being one of:
187
+ %
188
+ % - operation(Type, Name, VariableDefinitions, Directives, SelectionSet)
189
+ % Type is one of the atoms _query_, _mutation_ or _subscription_.
190
+ % Name is either the atom _null_ or a string denoting the
191
+ % name given to this specific operation.
192
+ %
193
+ % VariableDefinitions is a list of terms of the form
194
+ % variable_definition(VarName, VarType, VarDefault, VarDirs)
195
+ % where _VarName_ is a string denoting the name of the variable,
196
+ % _VarType_ is a term denoting the _GraphQL type_ of the defined
197
+ % variable in the format described below, _VarDefault_ is a term
198
+ % denoting a default _GraphQL value_ associated with the defined
199
+ % variable, and _VarDirs_ is a possibly empty list of _GraphQL
200
+ % directives_, each of which a term DirName-DirArgs where DirName
201
+ % is the string name of the directive and DirArgs is a Prolog
202
+ % dict denoting the directive arguments.
203
+ %
204
+ % Directives is a possibly empty list of _GraphQL
205
+ % directives_ associated with the given GraphQL operation.
206
+ %
207
+ % SelectionSet is a list of _GraphQL selections_, each selection
208
+ % is one of field(FieldAlias, FieldName, FieldArgs, FieldDirs,
209
+ % FieldSelection), in which case _FieldAlias_ is either _null_ or
210
+ % a string denoting the alias of the field, _FieldName_ is a
211
+ % string denoting the name of the field, _FieldArgs_ is a dict
212
+ % denoting the field arguments, _FieldDirs_ is a list of _GraphQL
213
+ % directives_ and _FieldSelection_ is a list of _GraphQL
214
+ % selections_ nested below the given field. Otherwise, each
215
+ % selection can have the from fragment_spread(FragName,
216
+ % FragDirs) where _FragName_ is a string denoting the name of
217
+ % the fragment and FragDirs is a possibly empty list of _GraphQL
218
+ % directives_. Lastly, each selection can have the form
219
+ % inline_fragment(IFragTypeCondition, IFragDirs,
220
+ % IFragSelectionSet) where _IFragTypeCondition_ is a string
221
+ % denoting a type condition associated with the inline fragment,
222
+ % _IFragDirs_ denotes _GraphQL directives_ associated with it,
223
+ % and _IFragSelectionSet_ is a list of _GraphQL selections_
224
+ % specified by the fragment.
225
+ %
226
+ % - fragment(Name, Type, Directives, SelectionSet)
227
+ % Where Name is a string denoting the name of the fragment, Type
228
+ % is a _GraphQL type_ term, directives is possibly empty list
229
+ % of _GraphQL directives_, and SelectionSet is a list of
230
+ % _GraphQL selections_ associated with the fragment.
231
+ %
232
+ % A _GraphQL type_ is represented as one of:
233
+ %
234
+ % - named_type(Name)
235
+ % Where Name is a string denoting the name of the type.
236
+ % - list_type(Type)
237
+ % Where Type is a _GraphQL type_.
238
+ % - non_null_type(Type)
239
+ % Where Type is a _GraphQL type_.
240
+ %
241
+ % A _GraphQL value_ is represented as one of:
242
+ %
243
+ % - true
244
+ % Represents the GraphQL `true` value.
245
+ % - false
246
+ % Represents the GraphQL `false` value.
247
+ % - null
248
+ % Represents the GraphQL `null` value.
249
+ % - enum(E)
250
+ % Represents the GraphQL enum corresponding to the string E.
251
+ % - String
252
+ % A Prolog string String represents the same GraphQL string.
253
+ % - Integer
254
+ % A Prolog integer Integer represents the same GraphQL integer.
255
+ % - Float
256
+ % A Prolog float Float represents the same GraphQL float.
257
+ % - ListOfValues
258
+ % A Prolog list ListOfValues whose elements are _GraphQL values_
259
+ % represents the GraphQL list value whose elements are
260
+ % represented by the elements of ListOfValues.
261
+ % - DictOfValues
262
+ % A Prolog dict DictOfValues with _GraphQL values_ for values
263
+ % represents the GraphQL object value whose fields are represented
264
+ % by the key-value pairs of DictOfValues.
265
+ %
266
+ % Source can be one of:
267
+ %
268
+ % - codes(+Codes, -Rest)
269
+ % Codes is a list of codes representing the source GraphQL text.
270
+ % Rest is unified with the list of trailing codes starting from
271
+ % the first code that was not recognized as part of a valid
272
+ % GraphQL token.
273
+ % - codes(+Codes)
274
+ % Same as codes(Codes, []).
275
+ % - string(+String)
276
+ % String is a string representing the source GraphQL text.
277
+ % - Stream
278
+ % Stream is a stream from which the source GraphQL text
279
+ % is read with phrase_from_stream/2.
280
+ %
281
+ % Options is a list whose elements can be one of:
282
+ %
283
+ % - variable_names([Name=Value|...])
284
+ % A list of associations of Prolog variable names, given as atoms,
285
+ % to _GraphQL values_.
286
+ %
287
+ % Occurrences of the special lexical construct "<Name>" (that is,
288
+ % ASCII 60, then the codes of the atom Name, then ASCII 62) in
289
+ % Source are expanded in Document to the _GraphQL value_ Value.
290
+ % This option can be used to interpolate GraphQL documents with
291
+ % values given in Prolog representation.
292
+
293
+ :- predicate_options(graphql_read_document/3, 3,
294
+ [variable_names(list)]).
295
+
296
+ graphql_read_document(codes(Codes, Rest), Document, Options) =>
297
+ phrase(graphql_tokens(Tokens, Options), Codes, Rest),
298
+ phrase(graphql_executable_document(Document), Tokens).
299
+ graphql_read_document(codes(Codes), Document, Options) =>
300
+ phrase(graphql_tokens(Tokens, Options), Codes),
301
+ phrase(graphql_executable_document(Document), Tokens).
302
+ graphql_read_document(string(String), Document, Options) =>
303
+ string_codes(String, Codes),
304
+ phrase(graphql_tokens(Tokens, Options), Codes),
305
+ phrase(graphql_executable_document(Document), Tokens).
306
+ graphql_read_document(Stream, Document, Options) =>
307
+ phrase_from_stream(graphql_tokens(Tokens, Options), Stream),
308
+ phrase(graphql_executable_document(Document), Tokens).
309
+
310
+
311
+ graphql_executable_document([H|T]) -->
312
+ graphql_executable_definition(H),
313
+ graphql_executable_definitions(T).
314
+
315
+
316
+ graphql_executable_definitions([H|T]) -->
317
+ graphql_executable_definition(H),
318
+ !,
319
+ graphql_executable_definitions(T).
320
+ graphql_executable_definitions([]) --> [].
321
+
322
+
323
+ graphql_executable_definition(operation(Type,
324
+ Name,
325
+ VariableDefinitions,
326
+ Directives,
327
+ SelectionSet)) -->
328
+ graphql_operation_definition(Type,
329
+ Name,
330
+ VariableDefinitions,
331
+ Directives,
332
+ SelectionSet),
333
+ !.
334
+ graphql_executable_definition(fragment(Name,
335
+ Type,
336
+ Directives,
337
+ SelectionSet)) -->
338
+ [name("fragment"), name(Name), name("on"), name(Type)],
339
+ graphql_inline_fragment(Directives, SelectionSet).
340
+
341
+
342
+ graphql_operation_definition(T, N, V, D, S) -->
343
+ graphql_operation_type(T),
344
+ !,
345
+ graphql_query(N, V, D, S).
346
+ graphql_operation_definition(query, null, [], [], S) -->
347
+ graphql_selection_set(S).
348
+
349
+
350
+ graphql_operation_type(query) -->
351
+ [name("query")],
352
+ !.
353
+ graphql_operation_type(mutation) -->
354
+ [name("mutation")],
355
+ !.
356
+ graphql_operation_type(subscription) -->
357
+ [name("subscription")],
358
+ !.
359
+
360
+
361
+ graphql_query(N, V, D, S) -->
362
+ optional([name(N)],
363
+ {N=null}),
364
+ optional(graphql_variables_definition(V),
365
+ {V=[]}),
366
+ optional(graphql_directives(D),
367
+ {D=[]}),
368
+ graphql_selection_set(S).
369
+
370
+
371
+ graphql_variables_definition([H|T]) -->
372
+ ['('],
373
+ graphql_variable_definition(H),
374
+ sequence(graphql_variable_definition, T),
375
+ [')'].
376
+
377
+
378
+ graphql_variable_definition(variable_definition(Var, Type, Def, Dirs)) -->
379
+ graphql_variable(Var),
380
+ [':'],
381
+ graphql_type(Type),
382
+ optional(graphql_default_value(Def),
383
+ {Def=null}),
384
+ optional(graphql_directives(Dirs),
385
+ {Dirs=[]}).
386
+
387
+
388
+ graphql_type(T) -->
389
+ graphql_type_(T0),
390
+ graphql_type_nullable(T0, T).
391
+
392
+
393
+ graphql_type_(named_type(N)) -->
394
+ [name(N)],
395
+ !.
396
+ graphql_type_(list_type(T)) -->
397
+ ['['],
398
+ !,
399
+ graphql_type(T),
400
+ [']'].
401
+
402
+
403
+ graphql_type_nullable(T, non_null_type(T)) -->
404
+ ['!'],
405
+ !.
406
+ graphql_type_nullable(T, T) -->
407
+ [].
408
+
409
+ graphql_variable(V) -->
410
+ ['$', name(V)].
411
+
412
+
413
+ graphql_default_value(V) -->
414
+ graphql_value([const(true)], V).
415
+
416
+
417
+ graphql_value(_, V) -->
418
+ [prolog(V)],
419
+ !.
420
+ graphql_value(Options, variable(V)) -->
421
+ { \+ option(const(true), Options) },
422
+ graphql_variable(V),
423
+ !.
424
+ graphql_value(_, N) -->
425
+ [integer(N)],
426
+ !.
427
+ graphql_value(_, F) -->
428
+ [float(F)],
429
+ !.
430
+ graphql_value(_, S) -->
431
+ [string(S)],
432
+ !.
433
+ graphql_value(_, V) -->
434
+ [name(N)],
435
+ !,
436
+ { graphql_name_value(N, V) }.
437
+ graphql_value(Options, L) -->
438
+ graphql_list_value(Options, L),
439
+ !.
440
+ graphql_value(Options, O) -->
441
+ graphql_object_value(Options, O),
442
+ !.
443
+
444
+
445
+ graphql_name_value("true" , true ) :- !.
446
+ graphql_name_value("false", false ) :- !.
447
+ graphql_name_value("null" , null ) :- !.
448
+ graphql_name_value(N , enum(N)).
449
+
450
+
451
+ graphql_list_value(Options, L) -->
452
+ ['['],
453
+ sequence(graphql_value(Options), L),
454
+ [']'].
455
+
456
+
457
+ graphql_object_value(Options, O) -->
458
+ ['{'],
459
+ sequence(graphql_object_field(Options), O0),
460
+ ['}'],
461
+ { dict_pairs(O, _, O0) }.
462
+
463
+
464
+ graphql_object_field(Options, Name-Value) -->
465
+ [name(Name0), ':'],
466
+ { atom_string(Name, Name0) },
467
+ graphql_value(Options, Value).
468
+
469
+
470
+ graphql_directives([H|T]) -->
471
+ graphql_directive(H),
472
+ graphql_directives_(T).
473
+
474
+
475
+ graphql_directives_([H|T]) -->
476
+ graphql_directive(H),
477
+ !,
478
+ graphql_directives_(T).
479
+ graphql_directives_([]) --> [].
480
+
481
+
482
+ graphql_directive(N-A) -->
483
+ ['@', name(N)],
484
+ optional(graphql_arguments(A),
485
+ {A=_{}}).
486
+
487
+
488
+ graphql_arguments(A) -->
489
+ ['('],
490
+ graphql_argument(H),
491
+ sequence(graphql_argument, T),
492
+ [')'],
493
+ { dict_pairs(A, _, [H|T]) }.
494
+
495
+
496
+ graphql_argument(N-V) -->
497
+ [name(N0), ':'],
498
+ { atom_string(N, N0) },
499
+ graphql_value([], V).
500
+
501
+
502
+ graphql_selection_set([H|T]) -->
503
+ ['{'],
504
+ graphql_selection(H),
505
+ sequence(graphql_selection, T),
506
+ ['}'].
507
+
508
+ graphql_selection(field(A, N, R, D, S)) -->
509
+ graphql_field(A, N, R, D, S),
510
+ !.
511
+ graphql_selection(F) -->
512
+ ['...'],
513
+ graphql_selection_(F).
514
+
515
+
516
+ graphql_selection_(F) -->
517
+ [name(N)],
518
+ !,
519
+ graphql_selection__(N, F).
520
+ graphql_selection_(inline_fragment(null, D, S)) -->
521
+ graphql_inline_fragment(D, S).
522
+
523
+
524
+ graphql_selection__("on", inline_fragment(T, D, S)) -->
525
+ !,
526
+ [name(T)],
527
+ graphql_inline_fragment(D, S).
528
+ graphql_selection__(N, fragment_spread(N, D)) -->
529
+ optional(graphql_directives(D),
530
+ {D=[]}).
531
+
532
+
533
+ graphql_inline_fragment(D, S) -->
534
+ optional(graphql_directives(D),
535
+ {D=[]}),
536
+ graphql_selection_set(S).
537
+
538
+
539
+ graphql_field(Alias, Name, Args, Directives, SelectionSet) -->
540
+ [name(Name0)],
541
+ graphql_field_(Name0, Alias, Name, Args, Directives, SelectionSet).
542
+
543
+
544
+ graphql_field_(Alias, Alias, Name, Args, Directives, SelectionSet) -->
545
+ [':'],
546
+ !,
547
+ [name(Name)],
548
+ graphql_field__(Args, Directives, SelectionSet).
549
+ graphql_field_(Name, null, Name, Args, Directives, SelectionSet) -->
550
+ graphql_field__(Args, Directives, SelectionSet).
551
+
552
+
553
+ graphql_field__(Args, Directives, SelectionSet) -->
554
+ optional(graphql_arguments(Args),
555
+ {Args=[]}),
556
+ optional(graphql_directives(Directives),
557
+ {Directives=[]}),
558
+ optional(graphql_selection_set(SelectionSet),
559
+ {SelectionSet=[]}).
560
+
561
+
562
+ %! graphql_tokens(-Ts, +Options)// is det.
563
+ graphql_tokens(Ts, Options) -->
564
+ graphql_ignored,
565
+ graphql_tokens_(Ts, Options).
566
+
567
+
568
+ graphql_tokens_([H|T], Options) -->
569
+ graphql_token(H, Options),
570
+ !,
571
+ graphql_tokens(T, Options).
572
+ graphql_tokens_([ ], _Options) --> [].
573
+
574
+
575
+ %! graphql_token(-T)// is semidet.
576
+ %
577
+ % https://spec.graphql.org/draft/#Token
578
+ graphql_token(P, _Options) --> graphql_punctuator(P).
579
+ graphql_token(name(N), _Options) --> graphql_name(N).
580
+ graphql_token(N, _Options) --> graphql_numeric_value(N).
581
+ graphql_token(string(S), _Options) --> graphql_string_value(S).
582
+ graphql_token(prolog(E), Options) --> graphql_prolog(E, Options).
583
+
584
+
585
+ graphql_prolog(V, Options) -->
586
+ "<",
587
+ prolog_var_name(N),
588
+ ">",
589
+ { option(variable_names(VarNames), Options, []),
590
+ memberchk(N=V, VarNames)
591
+ }.
592
+
593
+
594
+
595
+ %! graphql_ignored// is semidet.
596
+ %
597
+ % https://spec.graphql.org/draft/#Ignored
598
+ graphql_ignored --> graphql_white_space , !, graphql_ignored.
599
+ graphql_ignored --> graphql_line_terminator, !, graphql_ignored.
600
+ graphql_ignored --> graphql_comment , !, graphql_ignored.
601
+ graphql_ignored --> graphql_comma , !, graphql_ignored.
602
+ graphql_ignored --> [].
603
+
604
+
605
+ %! graphql_white_space// is semidet.
606
+ %
607
+ % https://spec.graphql.org/draft/#WhiteSpace
608
+ graphql_white_space --> graphql_white_space(_).
609
+
610
+
611
+ graphql_white_space(0' ) --> " ", !.
612
+ graphql_white_space(0'\t) --> "\t".
613
+
614
+
615
+ %! graphql_line_terminator// is semidet.
616
+ %
617
+ % https://spec.graphql.org/draft/#LineTerminator
618
+ graphql_line_terminator --> "\n".
619
+ graphql_line_terminator --> "\r".
620
+
621
+
622
+ %! graphql_comment// is semidet.
623
+ %
624
+ % https://spec.graphql.org/draft/#Comment
625
+ graphql_comment --> "#", graphql_comment_chars.
626
+
627
+
628
+ %! graphql_comment_chars// is semidet.
629
+ graphql_comment_chars --> graphql_comment_char, !, graphql_comment_chars.
630
+ graphql_comment_chars --> [].
631
+
632
+
633
+ %! graphql_comment_char// is semidet.
634
+ %
635
+ % https://spec.graphql.org/draft/#CommentChar
636
+ graphql_comment_char --> graphql_line_terminator, !, { false }.
637
+ graphql_comment_char --> [_], !.
638
+
639
+
640
+ %! graphql_commma// is semidet.
641
+ %
642
+ % https://spec.graphql.org/draft/#Comma
643
+ graphql_comma --> ",".
644
+
645
+
646
+ %! graphql_punctuator(-P)// is semidet.
647
+ %
648
+ % https://spec.graphql.org/draft/#Punctuator
649
+ graphql_punctuator('!') --> "!", !.
650
+ graphql_punctuator('$') --> "$", !.
651
+ graphql_punctuator('&') --> "&", !.
652
+ graphql_punctuator('(') --> "(", !.
653
+ graphql_punctuator(')') --> ")", !.
654
+ graphql_punctuator('...') --> "...", !.
655
+ graphql_punctuator(':') --> ":", !.
656
+ graphql_punctuator('=') --> "=", !.
657
+ graphql_punctuator('@') --> "@", !.
658
+ graphql_punctuator('[') --> "[", !.
659
+ graphql_punctuator(']') --> "]", !.
660
+ graphql_punctuator('{') --> "{", !.
661
+ graphql_punctuator('}') --> "}", !.
662
+ graphql_punctuator('|') --> "|", !.
663
+
664
+
665
+ %! graphql_name(-N)// is semidet.
666
+ %
667
+ % https://spec.graphql.org/draft/#Name
668
+ graphql_name(N) -->
669
+ graphql_name_start(H),
670
+ graphql_name_(T),
671
+ { string_codes(N, [H|T]) }.
672
+
673
+
674
+ graphql_name_([H|T]) -->
675
+ graphql_name_continue(H),
676
+ !,
677
+ graphql_name_(T).
678
+ graphql_name_([]) --> [].
679
+
680
+
681
+ %! graphql_name_start(-S)// is semidet.
682
+ %
683
+ % https://spec.graphql.org/draft/#NameStart
684
+ graphql_name_start(L) --> graphql_letter(L).
685
+ graphql_name_start(0'_) --> "_".
686
+
687
+
688
+ %! graphql_name_continue(-C)// is semidet.
689
+ %
690
+ % https://spec.graphql.org/draft/#NameContinue
691
+ graphql_name_continue(L) --> graphql_letter(L).
692
+ graphql_name_continue(D) --> digit(D).
693
+ graphql_name_continue(0'_) --> "_".
694
+
695
+
696
+ %! graphql_letter(-L)// is semidet.
697
+ %
698
+ % https://spec.graphql.org/draft/#Letter
699
+ graphql_letter(L) -->
700
+ [L],
701
+ { ( 0'A =< L, L =< 0'Z
702
+ -> true
703
+ ; 0'a =< L, L =< 0'z
704
+ )
705
+ }.
706
+
707
+
708
+ graphql_numeric_value(N) -->
709
+ graphql_integer_part(I),
710
+ graphql_numeric_value_(I, N).
711
+
712
+
713
+ graphql_numeric_value_(I, N) -->
714
+ graphql_fractional_part(F),
715
+ !,
716
+ graphql_numeric_value__(I, F, N).
717
+ graphql_numeric_value_(I, N) -->
718
+ graphql_numeric_value__(I, [], N).
719
+
720
+
721
+ graphql_fractional_part([0'., H|T]) -->
722
+ ".",
723
+ !,
724
+ digits([H|T]).
725
+
726
+
727
+ graphql_exponent_part([E|T]) -->
728
+ graphql_exponent_indicator(E),
729
+ !,
730
+ graphql_exponent_part_(T).
731
+
732
+
733
+ graphql_exponent_part_([S,H|T]) -->
734
+ graphql_sign(S),
735
+ digits([H|T]).
736
+ graphql_exponent_part_([H|T]) -->
737
+ digits([H|T]).
738
+
739
+
740
+ graphql_exponent_indicator(0'e) --> "e", !.
741
+ graphql_exponent_indicator(0'E) --> "E".
742
+
743
+
744
+ graphql_sign(0'-) --> "-", !.
745
+ graphql_sign(0'+) --> "+".
746
+
747
+
748
+ graphql_numeric_value__(I, F, float(N)) -->
749
+ graphql_exponent_part(E),
750
+ !,
751
+ { append(I, F, H),
752
+ append(H, E, C),
753
+ number_codes(N, C)
754
+ }.
755
+ graphql_numeric_value__(I, [], integer(N)) -->
756
+ !,
757
+ { number_codes(N, I)
758
+ }.
759
+ graphql_numeric_value__(I, F, float(N)) -->
760
+ { append(I, F, C),
761
+ number_codes(N, C)
762
+ }.
763
+
764
+
765
+ graphql_integer_part([0'-|T]) -->
766
+ "-",
767
+ !,
768
+ graphql_natural_part(T).
769
+ graphql_integer_part(T) -->
770
+ graphql_natural_part(T).
771
+
772
+ graphql_natural_part([0'0]) -->
773
+ "0",
774
+ !.
775
+ graphql_natural_part([H|T]) -->
776
+ graphql_non_zero_digit(H),
777
+ digits(T).
778
+
779
+
780
+ graphql_non_zero_digit(D) -->
781
+ [D],
782
+ { 0'1 =< D, D =< 0'9 }.
783
+
784
+
785
+ graphql_string_value(S) -->
786
+ "\"",
787
+ graphql_string_value_(S).
788
+
789
+
790
+ graphql_string_value_(S) -->
791
+ "\"",
792
+ !,
793
+ graphql_string_value__(S).
794
+ graphql_string_value_(S) -->
795
+ graphql_string_body(S).
796
+
797
+
798
+ graphql_string_value__(S) -->
799
+ "\"",
800
+ !,
801
+ graphql_block_string(S).
802
+ graphql_string_value__("") --> [].
803
+
804
+
805
+ graphql_string_body(S) -->
806
+ graphql_string_character(H),
807
+ graphql_string_body_(H, S).
808
+
809
+ graphql_string_body_(H, S) -->
810
+ graphql_string_characters(T),
811
+ { string_codes(S, [H|T]) }.
812
+
813
+
814
+ graphql_string_characters([]) --> "\"", !.
815
+ graphql_string_characters([H|T]) -->
816
+ graphql_string_character(H),
817
+ graphql_string_characters(T).
818
+
819
+
820
+ graphql_string_character(C) -->
821
+ "\\",
822
+ !,
823
+ graphql_string_escape_sequence(C).
824
+ graphql_string_character(C) -->
825
+ [C].
826
+
827
+
828
+ graphql_string_escape_sequence(U) -->
829
+ "u",
830
+ !,
831
+ graphql_string_escape_hex(U).
832
+ graphql_string_escape_sequence(C) -->
833
+ [C],
834
+ { memberchk(C, `\"\\/bfnrt`) }.
835
+
836
+ graphql_string_escape_hex(U) -->
837
+ "{",
838
+ !,
839
+ xinteger(U),
840
+ "}".
841
+ graphql_string_escape_hex(U) -->
842
+ xdigit(A),
843
+ xdigit(B),
844
+ xdigit(C),
845
+ xdigit(D),
846
+ { U is (A << 12) + (B << 8) + (C << 4) + D }.
847
+
848
+
849
+ graphql_block_string("") -->
850
+ graphql_block_string_quote,
851
+ !.
852
+ graphql_block_string(S) -->
853
+ graphql_line_terminator,
854
+ !,
855
+ graphql_block_string(S).
856
+ graphql_block_string(S) -->
857
+ graphql_white_space(C),
858
+ !,
859
+ graphql_block_string_empty_initial_line([C|T]-T, 1, S).
860
+ graphql_block_string(S) -->
861
+ graphql_block_string_characters(C),
862
+ { append(C, T, H) },
863
+ graphql_block_string_first_line(H-T, S).
864
+
865
+
866
+ graphql_block_string_empty_initial_line(_, _, "") -->
867
+ graphql_block_string_quote,
868
+ !.
869
+ graphql_block_string_empty_initial_line(_, _, S) -->
870
+ graphql_line_terminator,
871
+ !,
872
+ graphql_block_string(S).
873
+ graphql_block_string_empty_initial_line(H-[C|T], I0, S) -->
874
+ graphql_white_space(C),
875
+ !,
876
+ { I is I0 + 1 },
877
+ graphql_block_string_empty_initial_line(H-T, I, S).
878
+ graphql_block_string_empty_initial_line(H-T0, I, S) -->
879
+ graphql_block_string_characters(C),
880
+ { append(C, T, T0),
881
+ length(C, N0),
882
+ N is N0 + I
883
+ },
884
+ graphql_block_string_initial_line(H-T, N, I, S).
885
+
886
+
887
+ graphql_block_string_first_line(L, S) -->
888
+ graphql_block_string_quote,
889
+ !,
890
+ { graphql_block_string_close(L, [], 0, S) }.
891
+ graphql_block_string_first_line(L, S) -->
892
+ graphql_line_terminator,
893
+ !,
894
+ graphql_block_string_line_indent(L, M-M, C-C, 0, 1.0Inf, S).
895
+ graphql_block_string_first_line(H-T0, S) -->
896
+ graphql_block_string_characters(C),
897
+ { append(C, T, T0) },
898
+ graphql_block_string_first_line(H-T, S).
899
+
900
+
901
+ graphql_block_string_initial_line(CH-CT, N, I, S) -->
902
+ graphql_block_string_quote,
903
+ !,
904
+ { graphql_block_string_close(F-F, [line(CH, CT, N)], I, S) }.
905
+ graphql_block_string_initial_line(CH-CT, N, I, S) -->
906
+ graphql_line_terminator,
907
+ !,
908
+ graphql_block_string_line_indent(F-F, [line(CH,CT,N)|MoreLines]-MoreLines, L-L, 0, I, S).
909
+ graphql_block_string_initial_line(H-T0, N0, I, S) -->
910
+ graphql_block_string_characters(C),
911
+ { append(C, T, T0),
912
+ length(C, N1),
913
+ N is N0 + N1
914
+ },
915
+ graphql_block_string_initial_line(H-T, N, I, S).
916
+
917
+
918
+ graphql_block_string_characters([34,34,34]) -->
919
+ "\\",
920
+ graphql_block_string_quote,
921
+ !.
922
+ graphql_block_string_characters([C]) -->
923
+ [C].
924
+
925
+
926
+ graphql_block_string_line_indent(F, MH-[], _, _, I, S) -->
927
+ graphql_block_string_quote,
928
+ !,
929
+ { graphql_block_string_close(F, MH, I, S) }.
930
+ graphql_block_string_line_indent(F, M, LH-LT, N, I, S) -->
931
+ graphql_line_terminator,
932
+ !,
933
+ graphql_block_string_maybe_trailing_empty_line(F, M, [line(LH, LT, N)|T]-T, C-C, 0, I, S).
934
+ graphql_block_string_line_indent(F, M, H-[C|T], N0, I, S) -->
935
+ graphql_white_space(C),
936
+ !,
937
+ { N is N0 + 1 },
938
+ graphql_block_string_line_indent(F, M, H-T, N, I, S).
939
+ graphql_block_string_line_indent(F, M, H-T0, N0, I0, S) -->
940
+ graphql_block_string_characters(C),
941
+ { append(C, T, T0),
942
+ I is min(N0, I0),
943
+ length(C, N1),
944
+ N is N0 + N1
945
+ },
946
+ graphql_block_string_line(F, M, H-T, N, I, S).
947
+
948
+
949
+ graphql_block_string_maybe_trailing_empty_line(F, MH-[], _W, _C, _N, I, S) -->
950
+ graphql_block_string_quote,
951
+ !,
952
+ { graphql_block_string_close(F, MH, I, S) }.
953
+ graphql_block_string_maybe_trailing_empty_line(F, M, WH-[line(CH0,CT0,N)|WT], CH0-CT0, N, I, S) -->
954
+ graphql_line_terminator,
955
+ !,
956
+ graphql_block_string_maybe_trailing_empty_line(F, M, WH-WT, C-C, 0, I, S).
957
+ graphql_block_string_maybe_trailing_empty_line(F, M, W, CH-[C|CT], N0, I, S) -->
958
+ graphql_white_space(C),
959
+ !,
960
+ { N is N0 + 1 },
961
+ graphql_block_string_maybe_trailing_empty_line(F, M, W, CH-CT, N, I, S).
962
+ graphql_block_string_maybe_trailing_empty_line(F, MH-WH, WH-WT, H-T0, N0, I0, S) -->
963
+ graphql_block_string_characters(C),
964
+ { append(C, T, T0),
965
+ I is min(N0, I0),
966
+ length(C, N1),
967
+ N is N0 + N1
968
+ },
969
+ graphql_block_string_line(F, MH-WT, H-T, N, I, S).
970
+
971
+
972
+ graphql_block_string_line(F, MH-[line(CH, CT, N)], CH-CT, N, I, S) -->
973
+ graphql_block_string_quote,
974
+ !,
975
+ { graphql_block_string_close(F, MH, I, S) }.
976
+ graphql_block_string_line(F, MH-[line(CH, CT, N)|MT], CH-CT, N, I, S) -->
977
+ graphql_line_terminator,
978
+ !,
979
+ graphql_block_string_maybe_trailing_empty_line(F, MH-MT, W-W, C-C, 0, I, S).
980
+ graphql_block_string_line(F, M, H-T0, N0, I, S) -->
981
+ graphql_block_string_characters(C),
982
+ { append(C, T, T0),
983
+ length(C, N1),
984
+ N is N0 + N1
985
+ },
986
+ graphql_block_string_line(F, M, H-T, N, I, S).
987
+
988
+
989
+ graphql_block_string_close(FirstLineH-FirstLineT, [line(H0, T, L)|MoreLines], Indent, String) :-
990
+ FirstLineH == FirstLineT,
991
+ !,
992
+ graphql_block_string_dedent_line(H0, L, Indent, H),
993
+ graphql_block_string_combine_more_lines(MoreLines, Indent, T),
994
+ string_codes(String, H).
995
+ graphql_block_string_close(FirstLineH-FirstLineT, MoreLines, Indent, String) :-
996
+ graphql_block_string_combine_more_lines(MoreLines, Indent, FirstLineT),
997
+ string_codes(String, FirstLineH).
998
+
999
+ graphql_block_string_combine_more_lines([], _, []) :-
1000
+ !.
1001
+ graphql_block_string_combine_more_lines([line(H0, T, L)|MoreLines],
1002
+ Indent,
1003
+ [0'\n|H]) :-
1004
+ graphql_block_string_dedent_line(H0, L, Indent, H),
1005
+ graphql_block_string_combine_more_lines(MoreLines, Indent, T).
1006
+
1007
+
1008
+ graphql_block_string_dedent_line(Line0, Length, Indent, Line) :-
1009
+ PrefixLength is min(Length, Indent),
1010
+ length(Prefix, PrefixLength),
1011
+ append(Prefix, Line, Line0).
1012
+
1013
+
1014
+ graphql_block_string_quote --> "\"\"\"".
1015
+
1016
+
1017
+
1018
+
1019
+ %! graphql_document_to_string(+Document, -String, +Options) is det.
1020
+ %
1021
+ % Serialize the GraphQL document Document and unify String with the
1022
+ % resulting string.
1023
+ %
1024
+ % Options are passed on to graphql_document_to_codes/3.
1025
+
1026
+ :- predicate_options(graphql_document_to_string/3, 3,
1027
+ [pass_to(graphql_document_to_codes/3, 3)]).
1028
+
1029
+ graphql_document_to_string(Document, String, Options) :-
1030
+ graphql_document_to_codes(Document, Codes, Options),
1031
+ string_codes(String, Codes).
1032
+
1033
+
1034
+ %! graphql_document_to_codes(+Document, -Codes, +Options) is det.
1035
+ %
1036
+ % Serialize Document, a Prolog term representing a GraphQL document
1037
+ % as obtained from graphql_read_document/3 or the graphql/4
1038
+ % quasi-quotation, and unify Codes with the resulting list of
1039
+ % character codes.
1040
+ %
1041
+ % Options are a list whose elements are one of:
1042
+ % - separator(+Sep)
1043
+ % Sep is a list of codes to be used for separating adjacent
1044
+ % GraphQL values in Codes. Defaults to a single space.
1045
+ % This option can be used to separate values with commas
1046
+ % (which are optional throughout GraphQL) by passing
1047
+ % e.g. separator(`, `).
1048
+
1049
+ :- predicate_options(graphql_document_to_codes/3, 3,
1050
+ [separator(list)]).
1051
+
1052
+ graphql_document_to_codes(Document, Codes, Options) :-
1053
+ phrase(graphql_write_document(Document, Options), Codes).
1054
+
1055
+
1056
+ graphql_write_document([H|T], Options) -->
1057
+ graphql_write_definition(H, Options),
1058
+ graphql_write_document(T, Options).
1059
+ graphql_write_document([], _Options) --> [], !.
1060
+
1061
+
1062
+ graphql_write_definition(operation(Type,
1063
+ Name,
1064
+ VariableDefinitions,
1065
+ Directives,
1066
+ SelectionSet), Options) -->
1067
+ graphql_write_name(Type, Options),
1068
+ graphql_write_name_maybe(Name, Options),
1069
+ graphql_write_variable_definitions(VariableDefinitions, Options),
1070
+ graphql_write_directives_and_selection_set(Directives,
1071
+ SelectionSet,
1072
+ Options).
1073
+
1074
+
1075
+ graphql_write_name(Name, _Options) -->
1076
+ { string_codes(Name, Codes) },
1077
+ Codes.
1078
+
1079
+
1080
+ graphql_write_name_maybe(null, _Options) --> [], !.
1081
+ graphql_write_name_maybe(Name, Options) -->
1082
+ graphql_write_separator(Options),
1083
+ graphql_write_name(Name, Options).
1084
+
1085
+
1086
+ graphql_write_variable_definitions([ ], _Options) --> [], !.
1087
+ graphql_write_variable_definitions([H|T], Options) -->
1088
+ "(",
1089
+ graphql_write_variable_definition(H, Options),
1090
+ graphql_write_variable_definitions_(T, Options),
1091
+ ")".
1092
+
1093
+
1094
+ graphql_write_variable_definitions_([ ], _Options) --> [], !.
1095
+ graphql_write_variable_definitions_([H|T], Options) -->
1096
+ graphql_write_separator(Options),
1097
+ graphql_write_variable_definition(H, Options),
1098
+ graphql_write_variable_definitions_(T, Options).
1099
+
1100
+
1101
+ graphql_write_variable_definition(variable_definition(Name,
1102
+ Type,
1103
+ Default,
1104
+ Directives),
1105
+ Options) -->
1106
+ `$`,
1107
+ graphql_write_name(Name, Options),
1108
+ `:`,
1109
+ graphql_write_type(Type, Options),
1110
+ graphql_write_value_maybe(Default, Options),
1111
+ graphql_write_directives(Directives, Options).
1112
+
1113
+
1114
+ graphql_write_value_maybe(null, _Options) -->
1115
+ !,
1116
+ [].
1117
+ graphql_write_value_maybe(Value, Options) -->
1118
+ graphql_write_separator(Options),
1119
+ graphql_write_value(Value, Options).
1120
+
1121
+ graphql_write_value(enum(N), _Options) -->
1122
+ !,
1123
+ format('~s', [N]).
1124
+ graphql_write_value(variable(V), _Options) -->
1125
+ !,
1126
+ format('$~s', [V]).
1127
+ graphql_write_value(Atom, _Options) -->
1128
+ { atom(Atom)
1129
+ },
1130
+ !,
1131
+ format('~a', [Atom]).
1132
+ graphql_write_value(String, Options) -->
1133
+ { string(String),
1134
+ !,
1135
+ string_codes(String, Codes)
1136
+ },
1137
+ "\"",
1138
+ graphql_write_string(Codes, Options),
1139
+ "\"".
1140
+ graphql_write_value(Number, _Options) -->
1141
+ { number(Number)
1142
+ },
1143
+ !,
1144
+ format('~w', [Number]).
1145
+ graphql_write_value(List, Options) -->
1146
+ { is_list(List) },
1147
+ !,
1148
+ "[",
1149
+ graphql_write_list_value(List, Options),
1150
+ "]".
1151
+ graphql_write_value(Dict, Options) -->
1152
+ { is_dict(Dict),
1153
+ !,
1154
+ dict_pairs(Dict, _, Object)
1155
+ },
1156
+ "{",
1157
+ graphql_write_pairs(Object, Options),
1158
+ "}".
1159
+
1160
+
1161
+ graphql_write_pairs([H|T], Options) -->
1162
+ !,
1163
+ graphql_write_pair(H, Options),
1164
+ graphql_write_pairs_(T, Options).
1165
+ graphql_write_pairs([], _) --> [].
1166
+
1167
+
1168
+ graphql_write_pairs_([H|T], Options) -->
1169
+ graphql_write_separator(Options),
1170
+ graphql_write_pair(H, Options),
1171
+ graphql_write_pairs_(T, Options).
1172
+ graphql_write_pairs_([], _) --> [].
1173
+
1174
+
1175
+ graphql_write_pair(N-V, Options) -->
1176
+ graphql_write_name(N, Options),
1177
+ ":",
1178
+ graphql_write_value(V, Options).
1179
+
1180
+
1181
+ %! graphql_write_string(+Codes, +Options)// is det.
1182
+ %
1183
+ % Generates Codes, except that codes in Codes that are not allowed in
1184
+ % GraphQL string values are replaced by their escape sequences.
1185
+ graphql_write_string([], _Options) --> !, [].
1186
+ graphql_write_string([0'\"|T], Options) -->
1187
+ !,
1188
+ "\\\"",
1189
+ graphql_write_string(T, Options).
1190
+ graphql_write_string([0'\\|T], Options) -->
1191
+ !,
1192
+ "\\\\",
1193
+ graphql_write_string(T, Options).
1194
+ graphql_write_string([0'\n|T], Options) -->
1195
+ !,
1196
+ "\\n",
1197
+ graphql_write_string(T, Options).
1198
+ graphql_write_string([0'\r|T], Options) -->
1199
+ !,
1200
+ "\\r",
1201
+ graphql_write_string(T, Options).
1202
+ graphql_write_string([H|T], Options) -->
1203
+ [H],
1204
+ graphql_write_string(T, Options).
1205
+
1206
+
1207
+ graphql_write_list_value([], _Options) --> !, [].
1208
+ graphql_write_list_value([H|T], Options) -->
1209
+ graphql_write_value(H, Options),
1210
+ graphql_write_list_value_(T, Options).
1211
+
1212
+
1213
+ graphql_write_list_value_([], _Options) --> !, [].
1214
+ graphql_write_list_value_([H|T], Options) -->
1215
+ graphql_write_separator(Options),
1216
+ graphql_write_value(H, Options),
1217
+ graphql_write_list_value_(T, Options).
1218
+
1219
+
1220
+ graphql_write_type(non_null_type(Type), Options) -->
1221
+ !,
1222
+ graphql_write_type(Type, Options),
1223
+ "!".
1224
+ graphql_write_type(named_type(Name), Options) -->
1225
+ !,
1226
+ graphql_write_name(Name, Options).
1227
+ graphql_write_type(list_type(Type), Options) -->
1228
+ "[",
1229
+ graphql_write_type(Type, Options),
1230
+ "]".
1231
+
1232
+
1233
+ graphql_write_directives([ ], _Options) --> [], !.
1234
+ graphql_write_directives([H|T], Options) -->
1235
+ graphql_write_separator(Options),
1236
+ graphql_write_directive(H, Options),
1237
+ graphql_write_directives(T, Options).
1238
+
1239
+
1240
+ graphql_write_directive(Name-Arguments, Options) -->
1241
+ graphql_write_name(Name, Options),
1242
+ graphql_write_arguments(Arguments, Options).
1243
+
1244
+
1245
+ graphql_write_arguments(_{}, _Options) --> !, [].
1246
+ graphql_write_arguments(Args, Options) -->
1247
+ { dict_pairs(Args, _, Pairs) },
1248
+ "(",
1249
+ graphql_write_pairs(Pairs, Options),
1250
+ ")".
1251
+
1252
+
1253
+ graphql_write_selection_set([ ], _Options) --> [], !.
1254
+ graphql_write_selection_set([H|T], Options) -->
1255
+ "{",
1256
+ graphql_write_selection(H, Options),
1257
+ graphql_write_selection_set_(T, Options),
1258
+ "}".
1259
+
1260
+
1261
+ graphql_write_selection_set_([ ], _Options) --> [], !.
1262
+ graphql_write_selection_set_([H|T], Options) -->
1263
+ graphql_write_separator(Options),
1264
+ graphql_write_selection(H, Options),
1265
+ graphql_write_selection_set_(T, Options).
1266
+
1267
+
1268
+ graphql_write_selection(field(Alias,
1269
+ Name,
1270
+ Args,
1271
+ Directives,
1272
+ SelectionSet),
1273
+ Options) -->
1274
+ graphql_write_field(Alias,
1275
+ Name,
1276
+ Args,
1277
+ Directives,
1278
+ SelectionSet,
1279
+ Options).
1280
+ graphql_write_selection(fragment_spread(Name, Directives),
1281
+ Options) -->
1282
+ graphql_write_fragment_spread(Name, Directives, Options).
1283
+ graphql_write_selection(inline_fragment(Type,
1284
+ Directives,
1285
+ SelectionSet),
1286
+ Options) -->
1287
+ graphql_write_inline_fragment(Type,
1288
+ Directives,
1289
+ SelectionSet,
1290
+ Options).
1291
+
1292
+
1293
+ graphql_write_field(null,
1294
+ Name,
1295
+ Arguments,
1296
+ Directives,
1297
+ SelectionSet,
1298
+ Options) -->
1299
+ !,
1300
+ graphql_write_field_(Name,
1301
+ Arguments,
1302
+ Directives,
1303
+ SelectionSet,
1304
+ Options).
1305
+ graphql_write_field(Alias,
1306
+ Name,
1307
+ Arguments,
1308
+ Directives,
1309
+ SelectionSet,
1310
+ Options) -->
1311
+ graphql_write_name(Alias, Options),
1312
+ ": ",
1313
+ graphql_write_field_(Name,
1314
+ Arguments,
1315
+ Directives,
1316
+ SelectionSet,
1317
+ Options).
1318
+
1319
+
1320
+ graphql_write_field_(Name,
1321
+ Arguments,
1322
+ Directives,
1323
+ SelectionSet,
1324
+ Options) -->
1325
+ graphql_write_name(Name, Options),
1326
+ graphql_write_arguments(Arguments, Options),
1327
+ graphql_write_directives_and_selection_set(Directives,
1328
+ SelectionSet,
1329
+ Options).
1330
+
1331
+
1332
+ graphql_write_directives_and_selection_set(Directives,
1333
+ SelectionSet,
1334
+ Options) -->
1335
+ graphql_write_directives(Directives, Options),
1336
+ graphql_write_selection_set(SelectionSet, Options).
1337
+
1338
+
1339
+ graphql_write_separator(Options) -->
1340
+ { option(separator(Sep), Options, [0' ]) },
1341
+ Sep.
1342
+
1343
+
1344
+ graphql_write_fragment_spread(Name, Directives, Options) -->
1345
+ "...",
1346
+ graphql_write_separator(Options),
1347
+ graphql_write_name(Name, Options),
1348
+ graphql_write_directives(Directives, Options).
1349
+
1350
+
1351
+ graphql_write_inline_fragment(TypeCondition,
1352
+ Directives,
1353
+ SelectionSet,
1354
+ Options) -->
1355
+ "...",
1356
+ graphql_write_separator(Options),
1357
+ graphql_write_type_condition(TypeCondition, Options),
1358
+ graphql_write_directives_and_selection_set(Directives,
1359
+ SelectionSet,
1360
+ Options).
1361
+
1362
+
1363
+ graphql_write_type_condition(TypeCondition, Options) -->
1364
+ "on ", graphql_write_name(TypeCondition, Options).
1365
+
1366
+ format(Format, Args, Head, Tail) :-
1367
+ format(codes(Head, Tail), Format, Args).