├── .gitignore ├── .merlin ├── Readme.md ├── bsconfig.json ├── devtools.png ├── package-lock.json ├── package.json ├── public ├── awesome ├── index.html ├── more.html ├── script.js ├── style.css └── thing.txt ├── screenshot.png ├── server ├── .merlin ├── dune-project ├── esy.json ├── esy.lock │ ├── .gitattributes │ ├── .gitignore │ ├── index.json │ ├── opam │ │ ├── astring.0.8.3 │ │ │ └── opam │ │ ├── base-bytes.base │ │ │ └── opam │ │ ├── base-threads.base │ │ │ └── opam │ │ ├── base-unix.base │ │ │ └── opam │ │ ├── base.v0.11.1 │ │ │ └── opam │ │ ├── base64.2.3.0 │ │ │ └── opam │ │ ├── cmdliner.1.0.3 │ │ │ └── opam │ │ ├── cohttp-lwt-unix.1.2.0 │ │ │ └── opam │ │ ├── cohttp-lwt.1.2.0 │ │ │ └── opam │ │ ├── cohttp.1.2.0 │ │ │ └── opam │ │ ├── conduit-lwt-unix.1.3.0 │ │ │ └── opam │ │ ├── conduit-lwt.1.3.0 │ │ │ └── opam │ │ ├── conduit.1.3.0 │ │ │ └── opam │ │ ├── conf-m4.1 │ │ │ └── opam │ │ ├── cppo.1.6.5 │ │ │ └── opam │ │ ├── cstruct.3.7.0 │ │ │ └── opam │ │ ├── dune.1.8.2 │ │ │ └── opam │ │ ├── fieldslib.v0.11.0 │ │ │ └── opam │ │ ├── fmt.0.8.5 │ │ │ └── opam │ │ ├── hex.1.3.0 │ │ │ └── opam │ │ ├── ipaddr.2.9.0 │ │ │ └── opam │ │ ├── jbuilder.transition │ │ │ └── opam │ │ ├── jsonm.1.0.1 │ │ │ └── opam │ │ ├── logs.0.6.2 │ │ │ └── opam │ │ ├── lwt.4.2.0 │ │ │ └── opam │ │ ├── magic-mime.1.1.1 │ │ │ └── opam │ │ ├── menhir.20181113 │ │ │ └── opam │ │ ├── merlin-extend.0.3 │ │ │ └── opam │ │ ├── mmap.1.0.2 │ │ │ └── opam │ │ ├── num.1.1 │ │ │ ├── files │ │ │ │ ├── findlib-install.patch │ │ │ │ └── installation-warning.patch │ │ │ └── opam │ │ ├── ocaml-compiler-libs.v0.11.0 │ │ │ └── opam │ │ ├── ocaml-migrate-parsetree.1.2.0 │ │ │ └── opam │ │ ├── ocamlbuild.0.14.0 │ │ │ └── opam │ │ ├── ocamlfind.1.8.0 │ │ │ ├── files │ │ │ │ ├── no-awk-check.patch │ │ │ │ ├── ocaml-stub │ │ │ │ └── ocamlfind.install │ │ │ └── opam │ │ ├── parsexp.v0.11.0 │ │ │ └── opam │ │ ├── ppx_derivers.1.0 │ │ │ └── opam │ │ ├── ppx_fields_conv.v0.11.0 │ │ │ └── opam │ │ ├── ppx_sexp_conv.v0.11.2 │ │ │ └── opam │ │ ├── ppx_tools_versioned.5.2.1 │ │ │ └── opam │ │ ├── ppxlib.0.5.0 │ │ │ └── opam │ │ ├── re.1.8.0 │ │ │ └── opam │ │ ├── result.1.3 │ │ │ └── opam │ │ ├── seq.0.1 │ │ │ └── opam │ │ ├── sexplib.v0.11.0 │ │ │ └── opam │ │ ├── sexplib0.v0.11.0 │ │ │ └── opam │ │ ├── stdio.v0.11.0 │ │ │ └── opam │ │ ├── stringext.1.5.0 │ │ │ └── opam │ │ ├── topkg.1.0.0 │ │ │ └── opam │ │ ├── uchar.0.0.2 │ │ │ └── opam │ │ ├── uri.2.2.0 │ │ │ └── opam │ │ └── uutf.1.0.2 │ │ │ └── opam │ └── overrides │ │ ├── opam__s__base_opam__c__v0.11.1_opam_override │ │ ├── files │ │ │ └── base-v0.11.1.patch │ │ └── package.json │ │ ├── opam__s__dune_opam__c__1.8.2_opam_override │ │ └── package.json │ │ ├── opam__s__merlin_extend_opam__c__0.3_opam_override │ │ ├── files │ │ │ └── merlin-extend-winfix.patch │ │ └── package.json │ │ ├── opam__s__num_opam__c__1.1_opam_override │ │ ├── files │ │ │ └── num-1.1.patch │ │ └── package.json │ │ ├── opam__s__ocamlbuild_opam__c__0.14.0_opam_override │ │ ├── files │ │ │ └── ocamlbuild-0.14.0.patch │ │ └── package.json │ │ └── opam__s__ocamlfind_opam__c__1.8.0_opam_override │ │ ├── files │ │ └── findlib-1.8.0.patch │ │ └── package.json ├── isomagic-todos.install ├── isomagic-todos.opam └── server │ ├── .merlin │ ├── Ez2.ml │ ├── Main.re │ ├── Server.re │ └── dune ├── src ├── client │ ├── Api.re │ ├── App.re │ ├── Devtools.re │ ├── DevtoolsDemo.re │ ├── Editor.re │ ├── Loader.re │ ├── Serde.re │ ├── demo.re │ └── lib.re └── shared │ ├── .merlin │ ├── SApi.re │ ├── Shared.re │ ├── dune │ ├── dune-project │ ├── esy.json │ ├── esy.lock │ ├── .gitattributes │ ├── .gitignore │ ├── index.json │ ├── opam │ │ ├── base-threads.base │ │ │ └── opam │ │ ├── base-unix.base │ │ │ └── opam │ │ ├── conf-m4.1 │ │ │ └── opam │ │ ├── cppo.1.6.5 │ │ │ └── opam │ │ ├── cstruct.3.7.0 │ │ │ └── opam │ │ ├── dune.1.8.2 │ │ │ └── opam │ │ ├── hex.1.3.0 │ │ │ └── opam │ │ ├── jbuilder.transition │ │ │ └── opam │ │ ├── jsonm.1.0.1 │ │ │ └── opam │ │ ├── menhir.20181113 │ │ │ └── opam │ │ ├── merlin-extend.0.3 │ │ │ └── opam │ │ ├── num.1.1 │ │ │ ├── files │ │ │ │ ├── findlib-install.patch │ │ │ │ └── installation-warning.patch │ │ │ └── opam │ │ ├── ocaml-migrate-parsetree.1.2.0 │ │ │ └── opam │ │ ├── ocamlbuild.0.14.0 │ │ │ └── opam │ │ ├── ocamlfind.1.8.0 │ │ │ ├── files │ │ │ │ ├── no-awk-check.patch │ │ │ │ ├── ocaml-stub │ │ │ │ └── ocamlfind.install │ │ │ └── opam │ │ ├── ppx_derivers.1.0 │ │ │ └── opam │ │ ├── ppx_tools_versioned.5.2.1 │ │ │ └── opam │ │ ├── result.1.3 │ │ │ └── opam │ │ ├── sexplib.v0.10.0 │ │ │ └── opam │ │ ├── topkg.1.0.0 │ │ │ └── opam │ │ ├── uchar.0.0.2 │ │ │ └── opam │ │ └── uutf.1.0.2 │ │ │ └── opam │ └── overrides │ │ ├── opam__s__dune_opam__c__1.8.2_opam_override │ │ └── package.json │ │ ├── opam__s__merlin_extend_opam__c__0.3_opam_override │ │ ├── files │ │ │ └── merlin-extend-winfix.patch │ │ └── package.json │ │ ├── opam__s__num_opam__c__1.1_opam_override │ │ ├── files │ │ │ └── num-1.1.patch │ │ └── package.json │ │ ├── opam__s__ocamlbuild_opam__c__0.14.0_opam_override │ │ ├── files │ │ │ └── ocamlbuild-0.14.0.patch │ │ └── package.json │ │ └── opam__s__ocamlfind_opam__c__1.8.0_opam_override │ │ ├── files │ │ └── findlib-1.8.0.patch │ │ └── package.json │ ├── isomagic-shared.opam │ ├── locked │ ├── .merlin │ ├── LockedTypes.re │ ├── Types.re │ └── dune │ └── server │ ├── .merlin │ ├── Serde.re │ └── dune ├── types.json ├── types.lock.json └── webpack.config.js /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | _esy 3 | lib 4 | public/bundle.js 5 | -------------------------------------------------------------------------------- /.merlin: -------------------------------------------------------------------------------- 1 | ####{BSB GENERATED: NO EDIT 2 | FLG -ppx /Users/jared/clone/apps/isomagic-todos/node_modules/let-anything/ppx 3 | FLG -ppx '/Users/jared/clone/apps/isomagic-todos/node_modules/bs-platform/lib/reactjs_jsx_ppx_2.exe' 4 | FLG -ppx /Users/jared/clone/apps/isomagic-todos/node_modules/bs-platform/lib/bsppx.exe 5 | S /Users/jared/clone/apps/isomagic-todos/node_modules/bs-platform/lib/ocaml 6 | B /Users/jared/clone/apps/isomagic-todos/node_modules/bs-platform/lib/ocaml 7 | FLG -nostdlib -w -40 -w -30 -color always 8 | FLG -w -30-40+6+7+27+32..39+44+45+101 9 | S /Users/jared/clone/apps/isomagic-todos/node_modules/reason-react/lib/ocaml 10 | B /Users/jared/clone/apps/isomagic-todos/node_modules/reason-react/lib/ocaml 11 | S /Users/jared/clone/apps/isomagic-todos/node_modules/bs-css/lib/ocaml 12 | B /Users/jared/clone/apps/isomagic-todos/node_modules/bs-css/lib/ocaml 13 | S src/shared 14 | B lib/bs/src/shared 15 | S src/shared/locked 16 | B lib/bs/src/shared/locked 17 | S src/client 18 | B lib/bs/src/client 19 | ####BSB GENERATED: NO EDIT} 20 | -------------------------------------------------------------------------------- /Readme.md: -------------------------------------------------------------------------------- 1 | # Isomagic Todos App 2 | 3 | 4 | 5 | Here's an example app that does a couple of neat tricks: 6 | 7 | - the server is compiled with bsb-native 8 | - the client is compiled with bsb 9 | - they share some code 10 | - it uses some custom ppxs that are installed via npm 11 | - `ppx_autoserialize`, which gives us json stringify/parse for free for all 12 | custom types, as well as nice chrome devtools object printing 13 | - `ppx_async`, for `async/await` goodness 14 | - `ppx_guard`, for `guard let` a la swift 15 | 16 | 17 | #### Here's some chrome devtools 18 | ![devtools](devtools.png) 19 | -------------------------------------------------------------------------------- /bsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "isomagic-todos", 3 | "version": "0.1.0", 4 | "sources": [ 5 | { 6 | "dir": "src", 7 | "subdirs": [ 8 | "client", 9 | {"dir": "shared","subdirs": [ 10 | "locked" 11 | ]} 12 | ] 13 | } 14 | ], 15 | "refmt": 3, 16 | "bsc-flags": ["-w", "-40", "-w", "-30", "-bs-super-errors"], 17 | "reason": { 18 | "react-jsx": 2 19 | }, 20 | "ppx-flags": [ 21 | "let-anything/ppx" 22 | ], 23 | "bs-dependencies" : [ 24 | "reason-react", 25 | "bs-css" 26 | ] 27 | } 28 | -------------------------------------------------------------------------------- /devtools.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jaredly/isomagic-todos/1ad477a9cefeea57e63b64b1f60f898baf76dac8/devtools.png -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "isomagic-todos", 3 | "version": "2.0.0", 4 | "scripts": { 5 | "build": "bsb -make-world", 6 | "start": "bsb -make-world -w -ws _ ", 7 | "types": "../../tools/reason-language-server/_esy/default/build/install/default/bin/type-digger types.json" 8 | }, 9 | "keywords": [ 10 | "BuckleScript" 11 | ], 12 | "author": "", 13 | "license": "MIT", 14 | "dependencies": { 15 | "bs-css": "^7.1.0", 16 | "react": "^16.2.0", 17 | "react-dom": "^16.2.0", 18 | "reason-react": ">=0.4.0", 19 | "let-anything": "1.0.3", 20 | "webpack": "^4.20.2" 21 | }, 22 | "devDependencies": { 23 | "bs-platform": "^4.0.18", 24 | "webpack-cli": "^3.1.1" 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /public/awesome: -------------------------------------------------------------------------------- 1 | hello 2 | -------------------------------------------------------------------------------- /public/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Autoserialize 5 | 6 |
7 | 8 | 9 | -------------------------------------------------------------------------------- /public/more.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | hi 4 |
5 | 6 | 7 |
8 | 9 | -------------------------------------------------------------------------------- /public/script.js: -------------------------------------------------------------------------------- 1 | document.body.innerHTML += "awesome sauce" 2 | 3 | document.getElementById("submit").onclick = e => { 4 | e.preventDefault() 5 | e.stopPropagation() 6 | console.log('yeah') 7 | const name = document.querySelector('[name=name]').value; 8 | fetch('/name', { 9 | body: name, 10 | method: 'POST', 11 | }).then(res => res.json()) 12 | .then(res => console.log('got', res)) 13 | .catch(err => console.log('fail', err)) 14 | } -------------------------------------------------------------------------------- /public/style.css: -------------------------------------------------------------------------------- 1 | 2 | body { 3 | font-family: -apple-system, sans-serif; 4 | font-weight: 200; 5 | } 6 | 7 | input { 8 | font-family: inherit; 9 | font-weight: inherit; 10 | font-style: inherit; 11 | } 12 | 13 | div { 14 | flex-direction: column; 15 | display: flex; 16 | flex-shrink: 0; 17 | min-width: 0; 18 | min-height: 0; 19 | } 20 | -------------------------------------------------------------------------------- /public/thing.txt: -------------------------------------------------------------------------------- 1 | hello folks 2 | -------------------------------------------------------------------------------- /screenshot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jaredly/isomagic-todos/1ad477a9cefeea57e63b64b1f60f898baf76dac8/screenshot.png -------------------------------------------------------------------------------- /server/.merlin: -------------------------------------------------------------------------------- 1 | ####{BSB GENERATED: NO EDIT 2 | FLG -ppx /Users/jared/clone/tools/isomagic-todos/server/../node_modules/.bin/ppx_magic_native 3 | FLG -ppx /Users/jared/clone/tools/isomagic-todos/server/../node_modules/.bin/ppx_guard 4 | FLG -ppx /Users/jared/clone/tools/isomagic-todos/server/../node_modules/.bin/reason_async 5 | FLG -ppx '/Users/jared/clone/tools/isomagic-todos/node_modules/bs-platform/bin/reactjs_jsx_ppx_2.exe' 6 | FLG -ppx /Users/jared/clone/tools/isomagic-todos/node_modules/bs-platform/bin/bsppx.exe 7 | S /Users/jared/clone/tools/isomagic-todos/node_modules/bs-platform/lib/ocaml/native 8 | B /Users/jared/clone/tools/isomagic-todos/node_modules/bs-platform/lib/ocaml/native 9 | FLG -nostdlib -w -40 -w -30 -no-alias-deps -color always 10 | S ../src 11 | B lib/bs/native/../src 12 | S ../src/server 13 | B lib/bs/native/../src/server 14 | S ../src/shared 15 | B lib/bs/native/../src/shared 16 | S ../src/client 17 | B lib/bs/native/../src/client 18 | PKG lwt lwt.unix cohttp cohttp.lwt yojson 19 | ####BSB GENERATED: NO EDIT} 20 | -------------------------------------------------------------------------------- /server/dune-project: -------------------------------------------------------------------------------- 1 | (lang dune 1.0) 2 | (name isomagic-todos) 3 | -------------------------------------------------------------------------------- /server/esy.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "isomagic-todos", 3 | "version": "0.0.0-dont-publish", 4 | "private": true, 5 | "scripts": { 6 | "symlink": "esy ln -s '#{self.target_dir}/install/default/bin/Bin' bin.exe", 7 | "cp-bin": "cp \"#{self.target_dir}/default/bin/Bin.exe\" bin.exe", 8 | "run-codemod": "./_build/install/default/bin/ExampleCodemod.exe ./examples/example-codemod", 9 | "types": "./_esy/default/build/install/default/bin/type-digger type-digger/types.json" 10 | }, 11 | "keywords": [ 12 | "Reason", 13 | "lsp", 14 | "IDE" 15 | ], 16 | "description": "A pure-reason implementation of a language server", 17 | "author": "Jared Forsyth", 18 | "license": "ISC", 19 | "esy": { 20 | "build": "dune build -p #{self.name}" 21 | }, 22 | "dependencies": { 23 | "@opam/dune": "*", 24 | "@opam/conduit-lwt": "*", 25 | "@opam/conduit-lwt-unix": "1.3.0", 26 | "@opam/cohttp-lwt-unix": "1.2.0", 27 | "@esy-ocaml/reason": "*", 28 | "ezjsonm": "jaredly/ezjsonm#esy", 29 | "@opam/ppx_sexp_conv": "v0.11.2", 30 | "let-anything-esy": "*", 31 | "@opam/sexplib": "v0.11.0", 32 | "isomagic-shared": "*", 33 | "ocaml": "~4.6.0" 34 | }, 35 | "resolutions": { 36 | "isomagic-shared": "link:../src/shared/esy.json" 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /server/esy.lock/.gitattributes: -------------------------------------------------------------------------------- 1 | 2 | # Set eol to LF so files aren't converted to CRLF-eol on Windows. 3 | * text eol=lf 4 | -------------------------------------------------------------------------------- /server/esy.lock/.gitignore: -------------------------------------------------------------------------------- 1 | 2 | # Reset any possible .gitignore, we want all esy.lock to be un-ignored. 3 | !* 4 | -------------------------------------------------------------------------------- /server/esy.lock/opam/astring.0.8.3/opam: -------------------------------------------------------------------------------- 1 | opam-version: "2.0" 2 | maintainer: "Daniel Bünzli " 3 | authors: ["Daniel Bünzli "] 4 | homepage: "http://erratique.ch/software/astring" 5 | doc: "http://erratique.ch/software/astring/doc" 6 | dev-repo: "git+http://erratique.ch/repos/astring.git" 7 | bug-reports: "https://github.com/dbuenzli/astring/issues" 8 | tags: [ "string" "org:erratique" ] 9 | license: "ISC" 10 | depends: [ 11 | "ocaml" {>= "4.01.0"} 12 | "ocamlfind" {build} 13 | "ocamlbuild" {build} 14 | "topkg" {build} 15 | "base-bytes" 16 | ] 17 | build: [[ 18 | "ocaml" "pkg/pkg.ml" "build" 19 | "--pinned" "%{pinned}%" ]] 20 | synopsis: "Alternative String module for OCaml" 21 | description: """ 22 | Astring exposes an alternative `String` module for OCaml. This module 23 | tries to balance minimality and expressiveness for basic, index-free, 24 | string processing and provides types and functions for substrings, 25 | string sets and string maps. 26 | 27 | Remaining compatible with the OCaml `String` module is a non-goal. The 28 | `String` module exposed by Astring has exception safe functions, 29 | removes deprecated and rarely used functions, alters some signatures 30 | and names, adds a few missing functions and fully exploits OCaml's 31 | newfound string immutability. 32 | 33 | Astring depends only on the OCaml standard library. It is distributed 34 | under the ISC license.""" 35 | url { 36 | src: "http://erratique.ch/software/astring/releases/astring-0.8.3.tbz" 37 | checksum: "md5=c5bf6352b9ac27fbeab342740f4fa870" 38 | } 39 | -------------------------------------------------------------------------------- /server/esy.lock/opam/base-bytes.base/opam: -------------------------------------------------------------------------------- 1 | opam-version: "2.0" 2 | maintainer: " " 3 | authors: " " 4 | homepage: " " 5 | depends: [ 6 | "ocaml" {>= "4.02.0"} 7 | "ocamlfind" {>= "1.5.3"} 8 | ] 9 | synopsis: "Bytes library distributed with the OCaml compiler" 10 | -------------------------------------------------------------------------------- /server/esy.lock/opam/base-threads.base/opam: -------------------------------------------------------------------------------- 1 | opam-version: "2.0" 2 | maintainer: "https://github.com/ocaml/opam-repository/issues" 3 | description: """ 4 | Threads library distributed with the OCaml compiler 5 | """ 6 | 7 | -------------------------------------------------------------------------------- /server/esy.lock/opam/base-unix.base/opam: -------------------------------------------------------------------------------- 1 | opam-version: "2.0" 2 | maintainer: "https://github.com/ocaml/opam-repository/issues" 3 | description: """ 4 | Unix library distributed with the OCaml compiler 5 | """ 6 | 7 | -------------------------------------------------------------------------------- /server/esy.lock/opam/base.v0.11.1/opam: -------------------------------------------------------------------------------- 1 | opam-version: "2.0" 2 | maintainer: "opensource@janestreet.com" 3 | authors: ["Jane Street Group, LLC "] 4 | homepage: "https://github.com/janestreet/base" 5 | bug-reports: "https://github.com/janestreet/base/issues" 6 | dev-repo: "git+https://github.com/janestreet/base.git" 7 | license: "Apache-2.0" 8 | build: [ 9 | ["jbuilder" "build" "-p" name "-j" jobs] 10 | ] 11 | depends: [ 12 | "ocaml" {>= "4.04.1" & < "4.08.0"} 13 | "sexplib0" {>= "v0.11" & < "v0.12"} 14 | "jbuilder" {build & >= "1.0+beta18.1"} 15 | ] 16 | depopts: [ 17 | "base-native-int63" 18 | ] 19 | synopsis: "Full standard library replacement for OCaml" 20 | description: """ 21 | Full standard library replacement for OCaml 22 | 23 | Base is a complete and portable alternative to the OCaml standard 24 | library. It provides all standard functionalities one would expect 25 | from a language standard library. It uses consistent conventions 26 | across all of its module. 27 | 28 | Base aims to be usable in any context. As a result system dependent 29 | features such as I/O are not offered by Base. They are instead 30 | provided by companion libraries such as stdio: 31 | 32 | https://github.com/janestreet/stdio""" 33 | url { 34 | src: 35 | "https://github.com/janestreet/base/releases/download/v0.11.1/base-v0.11.1.tbz" 36 | checksum: "md5=e7e7dc5db3f1fea19d74a31bbd4ac621" 37 | } 38 | -------------------------------------------------------------------------------- /server/esy.lock/opam/base64.2.3.0/opam: -------------------------------------------------------------------------------- 1 | opam-version: "2.0" 2 | maintainer: "mirageos-devel@lists.xenproject.org" 3 | authors: [ "Thomas Gazagnaire" 4 | "Anil Madhavapeddy" 5 | "Peter Zotov" ] 6 | license: "ISC" 7 | homepage: "https://github.com/mirage/ocaml-base64" 8 | doc: "http://mirage.github.io/ocaml-base64/" 9 | bug-reports: "https://github.com/mirage/ocaml-base64/issues" 10 | dev-repo: "git+https://github.com/mirage/ocaml-base64.git" 11 | synopsis: "Base64 encoding for OCaml" 12 | description: """ 13 | Base64 is a group of similar binary-to-text encoding schemes that represent 14 | binary data in an ASCII string format by translating it into a radix-64 15 | representation. It is specified in RFC 4648. 16 | """ 17 | depends: [ 18 | "base-bytes" 19 | "dune" {build & >= "1.0.1"} 20 | "bos" {with-test} 21 | "rresult" {with-test} 22 | "alcotest" {with-test} 23 | ] 24 | build: [ 25 | ["dune" "subst"] 26 | ["dune" "build" "-p" name "-j" jobs] 27 | ["dune" "runtest" "-p" name] {with-test} 28 | ] 29 | url { 30 | src: 31 | "https://github.com/mirage/ocaml-base64/releases/download/v2.3.0/base64-v2.3.0.tbz" 32 | checksum: "md5=f0b29524dbaff3ac6eb4d6c578b1b80d" 33 | } 34 | -------------------------------------------------------------------------------- /server/esy.lock/opam/cmdliner.1.0.3/opam: -------------------------------------------------------------------------------- 1 | opam-version: "2.0" 2 | maintainer: "Daniel Bünzli " 3 | authors: ["Daniel Bünzli "] 4 | homepage: "http://erratique.ch/software/cmdliner" 5 | doc: "http://erratique.ch/software/cmdliner/doc/Cmdliner" 6 | dev-repo: "git+http://erratique.ch/repos/cmdliner.git" 7 | bug-reports: "https://github.com/dbuenzli/cmdliner/issues" 8 | tags: [ "cli" "system" "declarative" "org:erratique" ] 9 | license: "ISC" 10 | depends:[ "ocaml" {>= "4.03.0"} ] 11 | build: [[ make "all" "PREFIX=%{prefix}%" ]] 12 | install: 13 | [[make "install" "LIBDIR=%{_:lib}%" "DOCDIR=%{_:doc}%" ] 14 | [make "install-doc" "LIBDIR=%{_:lib}%" "DOCDIR=%{_:doc}%" ]] 15 | 16 | synopsis: """Declarative definition of command line interfaces for OCaml""" 17 | description: """\ 18 | 19 | Cmdliner allows the declarative definition of command line interfaces 20 | for OCaml. 21 | 22 | It provides a simple and compositional mechanism to convert command 23 | line arguments to OCaml values and pass them to your functions. The 24 | module automatically handles syntax errors, help messages and UNIX man 25 | page generation. It supports programs with single or multiple commands 26 | and respects most of the [POSIX][1] and [GNU][2] conventions. 27 | 28 | Cmdliner has no dependencies and is distributed under the ISC license. 29 | 30 | [1]: http://pubs.opengroup.org/onlinepubs/009695399/basedefs/xbd_chap12.html 31 | [2]: http://www.gnu.org/software/libc/manual/html_node/Argument-Syntax.html 32 | """ 33 | url { 34 | archive: "http://erratique.ch/software/cmdliner/releases/cmdliner-1.0.3.tbz" 35 | checksum: "3674ad01d4445424105d33818c78fba8" 36 | } 37 | -------------------------------------------------------------------------------- /server/esy.lock/opam/cohttp-lwt-unix.1.2.0/opam: -------------------------------------------------------------------------------- 1 | opam-version: "2.0" 2 | synopsis: "An OCaml library for HTTP clients and servers" 3 | description: """ 4 | [![Join the chat at https://gitter.im/mirage/ocaml-cohttp](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/mirage/ocaml-cohttp?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge) 5 | 6 | Cohttp is an OCaml library for creating HTTP daemons. It has a portable 7 | HTTP parser, and implementations using various asynchronous programming 8 | libraries: 9 | 10 | * `Cohttp_lwt_unix` uses the [Lwt](https://ocsigen.org/lwt/) library, and 11 | specifically the UNIX bindings. 12 | * `Cohttp_async` uses the [Async](https://realworldocaml.org/v1/en/html/concurrent-programming-with-async.html) 13 | library. 14 | * `Cohttp_lwt` exposes an OS-independent Lwt interface, which is used 15 | by the [Mirage](https://mirage.io/) interface to generate standalone 16 | microkernels (use the cohttp-mirage subpackage). 17 | * `Cohttp_lwt_xhr` compiles to a JavaScript module that maps the Cohttp 18 | calls to XMLHTTPRequests. This is used to compile OCaml libraries like 19 | the GitHub bindings to JavaScript and still run efficiently. 20 | 21 | You can implement other targets using the parser very easily. Look at the `IO` 22 | signature in `lib/s.mli` and implement that in the desired backend. 23 | 24 | You can activate some runtime debugging by setting `COHTTP_DEBUG` to any 25 | value, and all requests and responses will be written to stderr. Further 26 | debugging of the connection layer can be obtained by setting `CONDUIT_DEBUG` 27 | to any value.""" 28 | maintainer: "anil@recoil.org" 29 | authors: [ 30 | "Anil Madhavapeddy" 31 | "Stefano Zacchiroli" 32 | "David Sheets" 33 | "Thomas Gazagnaire" 34 | "David Scott" 35 | "Rudi Grinberg" 36 | "Andy Ray" 37 | ] 38 | license: "ISC" 39 | tags: ["org:mirage" "org:xapi-project"] 40 | homepage: "https://github.com/mirage/ocaml-cohttp" 41 | doc: "https://mirage.github.io/ocaml-cohttp/" 42 | bug-reports: "https://github.com/mirage/ocaml-cohttp/issues" 43 | depends: [ 44 | "ocaml" {>= "4.04.1"} 45 | "dune" {build & >= "1.1.0"} 46 | "conduit-lwt-unix" {>= "1.0.3"} 47 | "cmdliner" 48 | "magic-mime" 49 | "logs" 50 | "fmt" {>= "0.8.2"} 51 | "cohttp-lwt" {="1.2.0"} 52 | "lwt" {>= "3.0.0"} 53 | "base-unix" 54 | "ounit" {with-test} 55 | ] 56 | conflicts: [ 57 | "lwt" {< "2.5.0"} 58 | ] 59 | build: [ 60 | ["dune" "subst"] {pinned} 61 | ["dune" "build" "-p" name "-j" jobs] 62 | ["dune" "runtest" "-p" name "-j" jobs] {with-test & os != "macos"} 63 | ] 64 | dev-repo: "git+https://github.com/mirage/ocaml-cohttp.git" 65 | url { 66 | src: 67 | "https://github.com/mirage/ocaml-cohttp/releases/download/v1.2.0/cohttp-v1.2.0.tbz" 68 | checksum: "md5=7aa3d4582848afff9a62f866b23173e1" 69 | } 70 | -------------------------------------------------------------------------------- /server/esy.lock/opam/cohttp-lwt.1.2.0/opam: -------------------------------------------------------------------------------- 1 | opam-version: "2.0" 2 | synopsis: "An OCaml library for HTTP clients and servers" 3 | description: """ 4 | [![Join the chat at https://gitter.im/mirage/ocaml-cohttp](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/mirage/ocaml-cohttp?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge) 5 | 6 | Cohttp is an OCaml library for creating HTTP daemons. It has a portable 7 | HTTP parser, and implementations using various asynchronous programming 8 | libraries: 9 | 10 | * `Cohttp_lwt_unix` uses the [Lwt](https://ocsigen.org/lwt/) library, and 11 | specifically the UNIX bindings. 12 | * `Cohttp_async` uses the [Async](https://realworldocaml.org/v1/en/html/concurrent-programming-with-async.html) 13 | library. 14 | * `Cohttp_lwt` exposes an OS-independent Lwt interface, which is used 15 | by the [Mirage](https://mirage.io/) interface to generate standalone 16 | microkernels (use the cohttp-mirage subpackage). 17 | * `Cohttp_lwt_xhr` compiles to a JavaScript module that maps the Cohttp 18 | calls to XMLHTTPRequests. This is used to compile OCaml libraries like 19 | the GitHub bindings to JavaScript and still run efficiently. 20 | 21 | You can implement other targets using the parser very easily. Look at the `IO` 22 | signature in `lib/s.mli` and implement that in the desired backend. 23 | 24 | You can activate some runtime debugging by setting `COHTTP_DEBUG` to any 25 | value, and all requests and responses will be written to stderr. Further 26 | debugging of the connection layer can be obtained by setting `CONDUIT_DEBUG` 27 | to any value.""" 28 | maintainer: "anil@recoil.org" 29 | authors: [ 30 | "Anil Madhavapeddy" 31 | "Stefano Zacchiroli" 32 | "David Sheets" 33 | "Thomas Gazagnaire" 34 | "David Scott" 35 | "Rudi Grinberg" 36 | "Andy Ray" 37 | ] 38 | license: "ISC" 39 | tags: ["org:mirage" "org:xapi-project"] 40 | homepage: "https://github.com/mirage/ocaml-cohttp" 41 | doc: "https://mirage.github.io/ocaml-cohttp/" 42 | bug-reports: "https://github.com/mirage/ocaml-cohttp/issues" 43 | depends: [ 44 | "ocaml" {>= "4.04.1"} 45 | "dune" {build & >= "1.1.0"} 46 | "cohttp" {>= "1.2.0" & <"1.3.0"} 47 | "lwt" 48 | "sexplib0" {< "v0.12"} 49 | "ppx_sexp_conv" {>= "v0.9.0" & < "v0.12"} 50 | ] 51 | conflicts: [ 52 | "lwt" {< "2.5.0"} 53 | ] 54 | build: [ 55 | ["dune" "subst"] {pinned} 56 | ["dune" "build" "-p" name "-j" jobs] 57 | ["dune" "runtest" "-p" name "-j" jobs] {with-test} 58 | ] 59 | dev-repo: "git+https://github.com/mirage/ocaml-cohttp.git" 60 | url { 61 | src: 62 | "https://github.com/mirage/ocaml-cohttp/releases/download/v1.2.0/cohttp-v1.2.0.tbz" 63 | checksum: "md5=7aa3d4582848afff9a62f866b23173e1" 64 | } 65 | -------------------------------------------------------------------------------- /server/esy.lock/opam/cohttp.1.2.0/opam: -------------------------------------------------------------------------------- 1 | opam-version: "2.0" 2 | synopsis: "An OCaml library for HTTP clients and servers" 3 | description: """ 4 | [![Join the chat at https://gitter.im/mirage/ocaml-cohttp](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/mirage/ocaml-cohttp?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge) 5 | 6 | Cohttp is an OCaml library for creating HTTP daemons. It has a portable 7 | HTTP parser, and implementations using various asynchronous programming 8 | libraries: 9 | 10 | * `Cohttp_lwt_unix` uses the [Lwt](https://ocsigen.org/lwt/) library, and 11 | specifically the UNIX bindings. 12 | * `Cohttp_async` uses the [Async](https://realworldocaml.org/v1/en/html/concurrent-programming-with-async.html) 13 | library. 14 | * `Cohttp_lwt` exposes an OS-independent Lwt interface, which is used 15 | by the [Mirage](https://mirage.io/) interface to generate standalone 16 | microkernels (use the cohttp-mirage subpackage). 17 | * `Cohttp_lwt_xhr` compiles to a JavaScript module that maps the Cohttp 18 | calls to XMLHTTPRequests. This is used to compile OCaml libraries like 19 | the GitHub bindings to JavaScript and still run efficiently. 20 | 21 | You can implement other targets using the parser very easily. Look at the `IO` 22 | signature in `lib/s.mli` and implement that in the desired backend. 23 | 24 | You can activate some runtime debugging by setting `COHTTP_DEBUG` to any 25 | value, and all requests and responses will be written to stderr. Further 26 | debugging of the connection layer can be obtained by setting `CONDUIT_DEBUG` 27 | to any value.""" 28 | maintainer: "anil@recoil.org" 29 | authors: [ 30 | "Anil Madhavapeddy" 31 | "Stefano Zacchiroli" 32 | "David Sheets" 33 | "Thomas Gazagnaire" 34 | "David Scott" 35 | "Rudi Grinberg" 36 | "Andy Ray" 37 | ] 38 | license: "ISC" 39 | tags: ["org:mirage" "org:xapi-project"] 40 | homepage: "https://github.com/mirage/ocaml-cohttp" 41 | doc: "https://mirage.github.io/ocaml-cohttp/" 42 | bug-reports: "https://github.com/mirage/ocaml-cohttp/issues" 43 | depends: [ 44 | "ocaml" {>= "4.04.1"} 45 | "dune" {build & >= "1.1.0"} 46 | "re" {>= "1.7.2"} 47 | "uri" {>= "2.0.0"} 48 | "fieldslib" {< "v0.12"} 49 | "sexplib0" {< "v0.12"} 50 | "ppx_fields_conv" {>= "v0.9.0" & < "v0.12"} 51 | "ppx_sexp_conv" {>= "v0.9.0" & < "v0.12"} 52 | "stringext" 53 | "base64" {>= "2.0.0" & < "3.0.0"} 54 | "fmt" {with-test} 55 | "jsonm" {build} 56 | "alcotest" {with-test} 57 | ] 58 | build: [ 59 | ["dune" "subst"] {pinned} 60 | ["dune" "build" "-p" name "-j" jobs] 61 | ["dune" "runtest" "-p" name "-j" jobs] {with-test} 62 | ] 63 | dev-repo: "git+https://github.com/mirage/ocaml-cohttp.git" 64 | url { 65 | src: 66 | "https://github.com/mirage/ocaml-cohttp/releases/download/v1.2.0/cohttp-v1.2.0.tbz" 67 | checksum: "md5=7aa3d4582848afff9a62f866b23173e1" 68 | } 69 | -------------------------------------------------------------------------------- /server/esy.lock/opam/conduit-lwt-unix.1.3.0/opam: -------------------------------------------------------------------------------- 1 | opam-version: "2.0" 2 | synopsis: "An OCaml network connection establishment library" 3 | description: """ 4 | [![Build Status](https://travis-ci.org/mirage/ocaml-conduit.svg?branch=master)](https://travis-ci.org/mirage/ocaml-conduit) 5 | 6 | The `conduit` library takes care of establishing and listening for 7 | TCP and SSL/TLS connections for the Lwt and Async libraries. 8 | 9 | The reason this library exists is to provide a degree of abstraction 10 | from the precise SSL library used, since there are a variety of ways 11 | to bind to a library (e.g. the C FFI, or the Ctypes library), as well 12 | as well as which library is used (just OpenSSL for now). 13 | 14 | By default, OpenSSL is used as the preferred connection library, but 15 | you can force the use of the pure OCaml TLS stack by setting the 16 | environment variable `CONDUIT_TLS=native` when starting your program. 17 | 18 | The opam packages available are: 19 | 20 | - `conduit`: the main `Conduit` module 21 | - `conduit-lwt`: the portable Lwt implementation 22 | - `conduit-lwt-unix`: the Lwt/Unix implementation 23 | - `conduit-async` the Jane Street Async implementation 24 | - `mirage-conduit`: the MirageOS compatible implementation 25 | 26 | ### Debugging 27 | 28 | Some of the `Lwt_unix`-based modules use a non-empty `CONDUIT_DEBUG` 29 | environment variable to output debugging information to standard error. 30 | Just set this variable when running the program to see what URIs 31 | are being resolved to. 32 | 33 | ### Further Informartion 34 | 35 | * **API Docs:** http://docs.mirage.io/ 36 | * **WWW:** https://github.com/mirage/ocaml-conduit 37 | * **E-mail:** 38 | * **Bugs:** https://github.com/mirage/ocaml-conduit/issues""" 39 | maintainer: "anil@recoil.org" 40 | authors: [ 41 | "Anil Madhavapeddy" "Thomas Leonard" "Thomas Gazagnaire" "Rudi Grinberg" 42 | ] 43 | license: "ISC" 44 | tags: "org:mirage" 45 | homepage: "https://github.com/mirage/ocaml-conduit" 46 | bug-reports: "https://github.com/mirage/ocaml-conduit/issues" 47 | depends: [ 48 | "ocaml" {>= "4.03.0"} 49 | "dune" {build} 50 | "base-unix" 51 | "ppx_sexp_conv" {< "v0.12"} 52 | "conduit-lwt" {>= "1.3.0"} 53 | "lwt" {>= "3.0.0"} 54 | "uri" {>= "1.9.4"} 55 | "ipaddr" {>= "2.8.0" & < "3.0.0"} 56 | ] 57 | depopts: ["tls" "lwt_ssl" "launchd"] 58 | conflicts: [ 59 | "tls" {< "0.8.0"} 60 | ] 61 | build: [ 62 | ["dune" "subst"] {pinned} 63 | ["dune" "build" "-p" name "-j" jobs] 64 | ] 65 | dev-repo: "git+https://github.com/mirage/ocaml-conduit.git" 66 | url { 67 | src: 68 | "https://github.com/mirage/ocaml-conduit/releases/download/v1.3.0/conduit-v1.3.0.tbz" 69 | checksum: "md5=df1c271a56537f8176eba811ab40ec19" 70 | } 71 | -------------------------------------------------------------------------------- /server/esy.lock/opam/conduit-lwt.1.3.0/opam: -------------------------------------------------------------------------------- 1 | opam-version: "2.0" 2 | synopsis: "An OCaml network connection establishment library" 3 | description: """ 4 | [![Build Status](https://travis-ci.org/mirage/ocaml-conduit.svg?branch=master)](https://travis-ci.org/mirage/ocaml-conduit) 5 | 6 | The `conduit` library takes care of establishing and listening for 7 | TCP and SSL/TLS connections for the Lwt and Async libraries. 8 | 9 | The reason this library exists is to provide a degree of abstraction 10 | from the precise SSL library used, since there are a variety of ways 11 | to bind to a library (e.g. the C FFI, or the Ctypes library), as well 12 | as well as which library is used (just OpenSSL for now). 13 | 14 | By default, OpenSSL is used as the preferred connection library, but 15 | you can force the use of the pure OCaml TLS stack by setting the 16 | environment variable `CONDUIT_TLS=native` when starting your program. 17 | 18 | The opam packages available are: 19 | 20 | - `conduit`: the main `Conduit` module 21 | - `conduit-lwt`: the portable Lwt implementation 22 | - `conduit-lwt-unix`: the Lwt/Unix implementation 23 | - `conduit-async` the Jane Street Async implementation 24 | - `mirage-conduit`: the MirageOS compatible implementation 25 | 26 | ### Debugging 27 | 28 | Some of the `Lwt_unix`-based modules use a non-empty `CONDUIT_DEBUG` 29 | environment variable to output debugging information to standard error. 30 | Just set this variable when running the program to see what URIs 31 | are being resolved to. 32 | 33 | ### Further Informartion 34 | 35 | * **API Docs:** http://docs.mirage.io/ 36 | * **WWW:** https://github.com/mirage/ocaml-conduit 37 | * **E-mail:** 38 | * **Bugs:** https://github.com/mirage/ocaml-conduit/issues""" 39 | maintainer: "anil@recoil.org" 40 | authors: [ 41 | "Anil Madhavapeddy" "Thomas Leonard" "Thomas Gazagnaire" "Rudi Grinberg" 42 | ] 43 | license: "ISC" 44 | tags: "org:mirage" 45 | homepage: "https://github.com/mirage/ocaml-conduit" 46 | bug-reports: "https://github.com/mirage/ocaml-conduit/issues" 47 | depends: [ 48 | "ocaml" {>= "4.03.0"} 49 | "dune" {build} 50 | "base-unix" 51 | "ppx_sexp_conv" {< "v0.12"} 52 | "sexplib" {< "v0.12"} 53 | "conduit" {="1.3.0"} 54 | "lwt" {>= "3.0.0"} 55 | ] 56 | build: [ 57 | ["dune" "subst"] {pinned} 58 | ["dune" "build" "-p" name "-j" jobs] 59 | ] 60 | dev-repo: "git+https://github.com/mirage/ocaml-conduit.git" 61 | url { 62 | src: 63 | "https://github.com/mirage/ocaml-conduit/releases/download/v1.3.0/conduit-v1.3.0.tbz" 64 | checksum: "md5=df1c271a56537f8176eba811ab40ec19" 65 | } 66 | -------------------------------------------------------------------------------- /server/esy.lock/opam/conduit.1.3.0/opam: -------------------------------------------------------------------------------- 1 | opam-version: "2.0" 2 | synopsis: "An OCaml network connection establishment library" 3 | description: """ 4 | [![Build Status](https://travis-ci.org/mirage/ocaml-conduit.svg?branch=master)](https://travis-ci.org/mirage/ocaml-conduit) 5 | 6 | The `conduit` library takes care of establishing and listening for 7 | TCP and SSL/TLS connections for the Lwt and Async libraries. 8 | 9 | The reason this library exists is to provide a degree of abstraction 10 | from the precise SSL library used, since there are a variety of ways 11 | to bind to a library (e.g. the C FFI, or the Ctypes library), as well 12 | as well as which library is used (just OpenSSL for now). 13 | 14 | By default, OpenSSL is used as the preferred connection library, but 15 | you can force the use of the pure OCaml TLS stack by setting the 16 | environment variable `CONDUIT_TLS=native` when starting your program. 17 | 18 | The opam packages available are: 19 | 20 | - `conduit`: the main `Conduit` module 21 | - `conduit-lwt`: the portable Lwt implementation 22 | - `conduit-lwt-unix`: the Lwt/Unix implementation 23 | - `conduit-async` the Jane Street Async implementation 24 | - `mirage-conduit`: the MirageOS compatible implementation 25 | 26 | ### Debugging 27 | 28 | Some of the `Lwt_unix`-based modules use a non-empty `CONDUIT_DEBUG` 29 | environment variable to output debugging information to standard error. 30 | Just set this variable when running the program to see what URIs 31 | are being resolved to. 32 | 33 | ### Further Informartion 34 | 35 | * **API Docs:** http://docs.mirage.io/ 36 | * **WWW:** https://github.com/mirage/ocaml-conduit 37 | * **E-mail:** 38 | * **Bugs:** https://github.com/mirage/ocaml-conduit/issues""" 39 | maintainer: "anil@recoil.org" 40 | authors: [ 41 | "Anil Madhavapeddy" "Thomas Leonard" "Thomas Gazagnaire" "Rudi Grinberg" 42 | ] 43 | license: "ISC" 44 | tags: "org:mirage" 45 | homepage: "https://github.com/mirage/ocaml-conduit" 46 | doc: "https://mirage.github.io/ocaml-conduit/" 47 | bug-reports: "https://github.com/mirage/ocaml-conduit/issues" 48 | depends: [ 49 | "ocaml" {>= "4.03.0"} 50 | "dune" {build} 51 | "ppx_sexp_conv" {< "v0.12"} 52 | "sexplib" {< "v0.12"} 53 | "astring" 54 | "uri" 55 | "result" 56 | "logs" {>= "0.5.0"} 57 | "ipaddr" {>= "2.5.0" & < "3.0.0"} 58 | ] 59 | build: [ 60 | ["dune" "subst"] {pinned} 61 | ["dune" "build" "-p" name "-j" jobs] 62 | ] 63 | dev-repo: "git+https://github.com/mirage/ocaml-conduit.git" 64 | url { 65 | src: 66 | "https://github.com/mirage/ocaml-conduit/releases/download/v1.3.0/conduit-v1.3.0.tbz" 67 | checksum: "md5=df1c271a56537f8176eba811ab40ec19" 68 | } 69 | -------------------------------------------------------------------------------- /server/esy.lock/opam/conf-m4.1/opam: -------------------------------------------------------------------------------- 1 | opam-version: "2.0" 2 | maintainer: "tim@gfxmonk.net" 3 | homepage: "http://www.gnu.org/software/m4/m4.html" 4 | bug-reports: "https://github.com/ocaml/opam-repository/issues" 5 | authors: "GNU Project" 6 | license: "GPL-3" 7 | build: [["sh" "-exc" "echo | m4"]] 8 | depexts: [ 9 | ["m4"] {os-distribution = "debian"} 10 | ["m4"] {os-distribution = "ubuntu"} 11 | ["m4"] {os-distribution = "fedora"} 12 | ["m4"] {os-distribution = "rhel"} 13 | ["m4"] {os-distribution = "centos"} 14 | ["m4"] {os-distribution = "alpine"} 15 | ["m4"] {os-distribution = "nixos"} 16 | ["m4"] {os-family = "suse"} 17 | ["m4"] {os-distribution = "ol"} 18 | ["m4"] {os-distribution = "arch"} 19 | ] 20 | synopsis: "Virtual package relying on m4" 21 | description: 22 | "This package can only install if the m4 binary is installed on the system." 23 | flags: conf 24 | -------------------------------------------------------------------------------- /server/esy.lock/opam/cppo.1.6.5/opam: -------------------------------------------------------------------------------- 1 | opam-version: "2.0" 2 | maintainer: "martin@mjambon.com" 3 | authors: ["Martin Jambon"] 4 | homepage: "https://github.com/mjambon/cppo" 5 | dev-repo: "git+https://github.com/mjambon/cppo.git" 6 | bug-reports: "https://github.com/mjambon/cppo/issues" 7 | license: "BSD-3-Clause" 8 | 9 | build: [ 10 | ["jbuilder" "subst" "-p" name] {pinned} 11 | ["jbuilder" "build" "-p" name "-j" jobs] 12 | ["jbuilder" "runtest" "-p" name] {with-test} 13 | ] 14 | depends: [ 15 | "ocaml" 16 | "jbuilder" {build & >= "1.0+beta17"} 17 | "base-unix" 18 | ] 19 | synopsis: "Equivalent of the C preprocessor for OCaml programs" 20 | url { 21 | src: "https://github.com/mjambon/cppo/archive/v1.6.5.tar.gz" 22 | checksum: "md5=1cd25741d31417995b0973fe0b6f6c82" 23 | } 24 | -------------------------------------------------------------------------------- /server/esy.lock/opam/cstruct.3.7.0/opam: -------------------------------------------------------------------------------- 1 | opam-version: "2.0" 2 | maintainer: "anil@recoil.org" 3 | authors: ["Anil Madhavapeddy" "Richard Mortier" "Thomas Gazagnaire" 4 | "Pierre Chambart" "David Kaloper" "Jeremy Yallop" "David Scott" 5 | "Mindy Preston" "Thomas Leonard" "Anton Kochkov" "Etienne Millon" ] 6 | homepage: "https://github.com/mirage/ocaml-cstruct" 7 | license: "ISC" 8 | dev-repo: "git+https://github.com/mirage/ocaml-cstruct.git" 9 | bug-reports: "https://github.com/mirage/ocaml-cstruct/issues" 10 | doc: "https://mirage.github.io/ocaml-cstruct/" 11 | 12 | tags: [ "org:mirage" "org:ocamllabs" ] 13 | build: [ 14 | ["dune" "subst"] {pinned} 15 | ["dune" "build" "-p" name "-j" jobs] 16 | ["dune" "runtest" "-p" name "-j" jobs] {with-test} 17 | ] 18 | depends: [ 19 | "ocaml" {>= "4.03.0"} 20 | "dune" {build & >= "1.0"} 21 | "sexplib" {< "v0.12"} 22 | "alcotest" {with-test} 23 | ] 24 | synopsis: "Access C-like structures directly from OCaml" 25 | description: """ 26 | Cstruct is a library and syntax extension to make it easier to access C-like 27 | structures directly from OCaml. It supports both reading and writing to these 28 | structures, and they are accessed via the `Bigarray` module.""" 29 | url { 30 | src: 31 | "https://github.com/mirage/ocaml-cstruct/releases/download/v3.7.0/cstruct-v3.7.0.tbz" 32 | checksum: "md5=60a83c96f5871a3caae091fd116f4f24" 33 | } 34 | -------------------------------------------------------------------------------- /server/esy.lock/opam/dune.1.8.2/opam: -------------------------------------------------------------------------------- 1 | opam-version: "2.0" 2 | maintainer: "opensource@janestreet.com" 3 | authors: ["Jane Street Group, LLC "] 4 | homepage: "https://github.com/ocaml/dune" 5 | bug-reports: "https://github.com/ocaml/dune/issues" 6 | dev-repo: "git+https://github.com/ocaml/dune.git" 7 | license: "MIT" 8 | depends: [ 9 | "ocaml" {>= "4.02"} 10 | "base-unix" 11 | "base-threads" 12 | ] 13 | build: [ 14 | # opam 2 sets OPAM_SWITCH_PREFIX, so we don't need a hardcoded path 15 | ["ocaml" "configure.ml" "--libdir" lib] {opam-version < "2"} 16 | ["ocaml" "bootstrap.ml"] 17 | ["./boot.exe" "--release" "--subst"] {pinned} 18 | ["./boot.exe" "--release" "-j" jobs] 19 | ] 20 | conflicts: [ 21 | "jbuilder" {!= "transition"} 22 | "odoc" {< "1.3.0"} 23 | ] 24 | 25 | synopsis: "Fast, portable and opinionated build system" 26 | description: """ 27 | dune is a build system that was designed to simplify the release of 28 | Jane Street packages. It reads metadata from "dune" files following a 29 | very simple s-expression syntax. 30 | 31 | dune is fast, it has very low-overhead and support parallel builds on 32 | all platforms. It has no system dependencies, all you need to build 33 | dune and packages using dune is OCaml. You don't need or make or bash 34 | as long as the packages themselves don't use bash explicitly. 35 | 36 | dune supports multi-package development by simply dropping multiple 37 | repositories into the same directory. 38 | 39 | It also supports multi-context builds, such as building against 40 | several opam roots/switches simultaneously. This helps maintaining 41 | packages across several versions of OCaml and gives cross-compilation 42 | for free. 43 | """ 44 | url { 45 | src: "https://github.com/ocaml/dune/releases/download/1.8.2/dune-1.8.2.tbz" 46 | checksum: "md5=2b7f45a6e14865f2318d34f12221ec1e" 47 | } 48 | -------------------------------------------------------------------------------- /server/esy.lock/opam/fieldslib.v0.11.0/opam: -------------------------------------------------------------------------------- 1 | opam-version: "2.0" 2 | maintainer: "opensource@janestreet.com" 3 | authors: ["Jane Street Group, LLC "] 4 | homepage: "https://github.com/janestreet/fieldslib" 5 | bug-reports: "https://github.com/janestreet/fieldslib/issues" 6 | dev-repo: "git+https://github.com/janestreet/fieldslib.git" 7 | license: "Apache-2.0" 8 | build: [ 9 | ["jbuilder" "build" "-p" name "-j" jobs] 10 | ] 11 | conflicts: [ "jbuilder" { = "1.0+beta19" } ] 12 | depends: [ 13 | "ocaml" {>= "4.04.1"} 14 | "base" {>= "v0.11" & < "v0.12"} 15 | "jbuilder" {build & >= "1.0+beta18.1"} 16 | "ocaml-migrate-parsetree" {>= "1.0"} 17 | "ppxlib" {>= "0.1.0"} 18 | ] 19 | synopsis: 20 | "Syntax extension to define first class values representing record fields, to get and set record fields, iterate and fold over all fields of a record and create new record values" 21 | description: """ 22 | Part of Jane Street's Core library 23 | The Core suite of libraries is an industrial strength alternative to 24 | OCaml's standard library that was developed by Jane Street, the 25 | largest industrial user of OCaml.""" 26 | url { 27 | src: 28 | "https://ocaml.janestreet.com/ocaml-core/v0.11/files/fieldslib-v0.11.0.tar.gz" 29 | checksum: "md5=a42506b460a1dc47fb65a37d875211ae" 30 | } 31 | -------------------------------------------------------------------------------- /server/esy.lock/opam/fmt.0.8.5/opam: -------------------------------------------------------------------------------- 1 | opam-version: "2.0" 2 | maintainer: "Daniel Bünzli " 3 | authors: [ 4 | "Daniel Bünzli " 5 | "Gabriel Radanne" 6 | ] 7 | homepage: "http://erratique.ch/software/fmt" 8 | doc: "http://erratique.ch/software/fmt" 9 | dev-repo: "git+http://erratique.ch/repos/fmt.git" 10 | bug-reports: "https://github.com/dbuenzli/fmt/issues" 11 | tags: [ "string" "format" "pretty-print" "org:erratique" ] 12 | license: "ISC" 13 | depends: [ 14 | "ocaml" {>= "4.01.0"} 15 | "ocamlfind" {build} 16 | "ocamlbuild" {build} 17 | "topkg" {build & >= "0.9.0"} 18 | "result" 19 | "uchar" 20 | ] 21 | depopts: [ "base-unix" "cmdliner" ] 22 | conflicts: [ "cmdliner" {< "0.9.8"} ] 23 | build: [[ 24 | "ocaml" "pkg/pkg.ml" "build" 25 | "--dev-pkg" "%{pinned}%" 26 | "--with-base-unix" "%{base-unix:installed}%" 27 | "--with-cmdliner" "%{cmdliner:installed}%" ]] 28 | synopsis: "OCaml Format pretty-printer combinators" 29 | description: """ 30 | Fmt exposes combinators to devise `Format` pretty-printing functions. 31 | 32 | Fmt depends only on the OCaml standard library. The optional `Fmt_tty` 33 | library that allows to setup formatters for terminal color output 34 | depends on the Unix library. The optional `Fmt_cli` library that 35 | provides command line support for Fmt depends on [`Cmdliner`][cmdliner]. 36 | 37 | Fmt is distributed under the ISC license. 38 | 39 | [cmdliner]: http://erratique.ch/software/cmdliner""" 40 | url { 41 | src: "http://erratique.ch/software/fmt/releases/fmt-0.8.5.tbz" 42 | checksum: "md5=77b64aa6f20f09de28f2405d6195f12c" 43 | } 44 | -------------------------------------------------------------------------------- /server/esy.lock/opam/hex.1.3.0/opam: -------------------------------------------------------------------------------- 1 | opam-version: "2.0" 2 | maintainer: "thomas@gazagnaire.org" 3 | authors: ["Thomas Gazagnaire" "Trevor Summers Smith"] 4 | license: "ISC" 5 | homepage: "https://github.com/mirage/ocaml-hex" 6 | doc: "https://mirage.github.io/ocaml-hex/" 7 | bug-reports: "https://github.com/mirage/ocaml-hex/issues" 8 | depends: [ 9 | "ocaml" 10 | "dune" {build & >= "1.0"} 11 | "cstruct" {>= "1.7.0"} 12 | ] 13 | build: [ 14 | ["dune" "subst"] {pinned} 15 | ["dune" "build" "-p" name "-j" jobs] 16 | ["dune" "runtest" "-p" name "-j" jobs] {with-test} 17 | ] 18 | dev-repo: "git+https://github.com/mirage/ocaml-hex.git" 19 | synopsis: "Library providing hexadecimal converters" 20 | description: """ 21 | ```ocaml 22 | #require "hex";; 23 | # Hex.of_string "Hello world!";; 24 | - : Hex.t = "48656c6c6f20776f726c6421" 25 | # Hex.to_string "dead-beef";; 26 | - : string = "ޭ��" 27 | # Hex.hexdump (Hex.of_string "Hello world!\n") 28 | 00000000: 4865 6c6c 6f20 776f 726c 6421 0a Hello world!. 29 | - : unit = () 30 | ``` 31 | """ 32 | url { 33 | src: 34 | "https://github.com/mirage/ocaml-hex/releases/download/v1.3.0/hex-v1.3.0.tbz" 35 | checksum: "md5=c0baa72c9d7495cd3c6646f9a50b03c7" 36 | } 37 | -------------------------------------------------------------------------------- /server/esy.lock/opam/ipaddr.2.9.0/opam: -------------------------------------------------------------------------------- 1 | opam-version: "2.0" 2 | maintainer: "anil@recoil.org" 3 | authors: ["David Sheets" "Anil Madhavapeddy" "Hugo Heuzard"] 4 | synopsis: "A library for manipulation of IP (and MAC) address representations" 5 | description: """ 6 | Features: 7 | * Depends only on sexplib (conditionalization under consideration) 8 | * oUnit-based tests 9 | * IPv4 and IPv6 support 10 | * IPv4 and IPv6 CIDR prefix support 11 | * IPv4 and IPv6 [CIDR-scoped address](http://tools.ietf.org/html/rfc4291#section-2.3) support 12 | * `Ipaddr.V4` and `Ipaddr.V4.Prefix` modules are `Map.OrderedType` 13 | * `Ipaddr.V6` and `Ipaddr.V6.Prefix` modules are `Map.OrderedType` 14 | * `Ipaddr` and `Ipaddr.Prefix` modules are `Map.OrderedType` 15 | * `Ipaddr_unix` in findlib subpackage `ipaddr.unix` provides compatibility with the standard library `Unix` module 16 | * `Ipaddr_top` in findlib subpackage `ipaddr.top` provides top-level pretty printers (requires compiler-libs default since OCaml 4.0) 17 | * IP address scope classification 18 | * IPv4-mapped addresses in IPv6 (::ffff:0:0/96) are an embedding of IPv4 19 | * MAC-48 (Ethernet) address support 20 | * `Macaddr` is a `Map.OrderedType` 21 | * All types have sexplib serializers/deserializers 22 | """ 23 | 24 | license: "ISC" 25 | tags: ["org:mirage" "org:xapi-project"] 26 | homepage: "https://github.com/mirage/ocaml-ipaddr" 27 | doc: "https://mirage.github.io/ocaml-ipaddr/" 28 | bug-reports: "https://github.com/mirage/ocaml-ipaddr/issues" 29 | depends: [ 30 | "ocaml" {>= "4.03.0"} 31 | "dune" {build & >= "1.6.0"} 32 | "base-bytes" 33 | "ppx_sexp_conv" {>= "v0.9.0" & < "v0.12"} 34 | "sexplib" {< "v0.12"} 35 | "base-unix" 36 | "ounit" {with-test} 37 | ] 38 | build: [ 39 | ["dune" "subst"] {pinned} 40 | ["dune" "build" "-p" name "-j" jobs] 41 | ["dune" "runtest" "-p" name "-j" jobs] {with-test} 42 | ] 43 | dev-repo: "git+https://github.com/mirage/ocaml-ipaddr.git" 44 | url { 45 | src: 46 | "https://github.com/mirage/ocaml-ipaddr/releases/download/2.9.0/ipaddr-2.9.0.tbz" 47 | checksum: "md5=7d4fa9d31d57d900f0042bd96cb76323" 48 | } 49 | -------------------------------------------------------------------------------- /server/esy.lock/opam/jbuilder.transition/opam: -------------------------------------------------------------------------------- 1 | opam-version: "2.0" 2 | maintainer: "opensource@janestreet.com" 3 | authors: ["Jane Street Group, LLC "] 4 | homepage: "https://github.com/ocaml/dune" 5 | bug-reports: "https://github.com/ocaml/dune/issues" 6 | dev-repo: "git+https://github.com/ocaml/dune.git" 7 | license: "MIT" 8 | depends: ["ocaml" "dune"] 9 | post-messages: [ 10 | "Jbuilder has been renamed and the jbuilder package is now a transition \ 11 | package. Use the dune package instead." 12 | ] 13 | synopsis: 14 | "This is a transition package, jbuilder is now named dune. Use the dune" 15 | description: "package instead." 16 | -------------------------------------------------------------------------------- /server/esy.lock/opam/jsonm.1.0.1/opam: -------------------------------------------------------------------------------- 1 | opam-version: "2.0" 2 | maintainer: "Daniel Bünzli " 3 | authors: ["Daniel Bünzli "] 4 | homepage: "http://erratique.ch/software/jsonm" 5 | doc: "http://erratique.ch/software/jsonm/doc/Jsonm" 6 | dev-repo: "git+http://erratique.ch/repos/jsonm.git" 7 | bug-reports: "https://github.com/dbuenzli/jsonm/issues" 8 | tags: [ "json" "codec" "org:erratique" ] 9 | license: "ISC" 10 | depends: [ 11 | "ocaml" {>= "4.01.0"} 12 | "ocamlfind" {build} 13 | "ocamlbuild" {build} 14 | "topkg" {build} 15 | "uchar" 16 | "uutf" {>= "1.0.0"} 17 | ] 18 | build:[[ 19 | "ocaml" "pkg/pkg.ml" "build" 20 | "--pinned" "%{pinned}%" ]] 21 | synopsis: "Non-blocking streaming JSON codec for OCaml" 22 | description: """ 23 | Jsonm is a non-blocking streaming codec to decode and encode the JSON 24 | data format. It can process JSON text without blocking on IO and 25 | without a complete in-memory representation of the data. 26 | 27 | The alternative "uncut" codec also processes whitespace and 28 | (non-standard) JSON with JavaScript comments. 29 | 30 | Jsonm is made of a single module and depends on [Uutf][uutf]. It is distributed 31 | under the ISC license. 32 | 33 | [uutf]: http://erratique.ch/software/uutf""" 34 | url { 35 | src: "http://erratique.ch/software/jsonm/releases/jsonm-1.0.1.tbz" 36 | checksum: "md5=e2ca39eaefd55b8d155c4f1ec5885311" 37 | } 38 | -------------------------------------------------------------------------------- /server/esy.lock/opam/logs.0.6.2/opam: -------------------------------------------------------------------------------- 1 | opam-version: "2.0" 2 | maintainer: "Daniel Bünzli " 3 | authors: ["Daniel Bünzli "] 4 | homepage: "http://erratique.ch/software/logs" 5 | doc: "http://erratique.ch/software/logs/doc" 6 | dev-repo: "git+http://erratique.ch/repos/logs.git" 7 | bug-reports: "https://github.com/dbuenzli/logs/issues" 8 | tags: [ "log" "system" "org:erratique" ] 9 | license: "ISC" 10 | depends: [ 11 | "ocaml" {>= "4.01.0"} 12 | "ocamlfind" {build} 13 | "ocamlbuild" {build} 14 | "topkg" {build} 15 | "result" 16 | "mtime" {with-test} 17 | ] 18 | depopts: [ 19 | "js_of_ocaml" 20 | "fmt" 21 | "cmdliner" 22 | "lwt" ] 23 | conflicts: [ "cmdliner" {< "0.9.8"} ] 24 | build: [[ 25 | "ocaml" "pkg/pkg.ml" "build" 26 | "--pinned" "%{pinned}%" 27 | "--with-js_of_ocaml" "%{js_of_ocaml:installed}%" 28 | "--with-fmt" "%{fmt:installed}%" 29 | "--with-cmdliner" "%{cmdliner:installed}%" 30 | "--with-lwt" "%{lwt:installed}%" ]] 31 | synopsis: "Logging infrastructure for OCaml" 32 | description: """ 33 | Logs provides a logging infrastructure for OCaml. Logging is performed 34 | on sources whose reporting level can be set independently. Log message 35 | report is decoupled from logging and is handled by a reporter. 36 | 37 | A few optional log reporters are distributed with the base library and 38 | the API easily allows to implement your own. 39 | 40 | `Logs` depends only on the `result` compatibility package. The 41 | optional `Logs_fmt` reporter on OCaml formatters depends on [Fmt][fmt]. 42 | The optional `Logs_browser` reporter that reports to the web browser 43 | console depends on [js_of_ocaml][jsoo]. The optional `Logs_cli` library 44 | that provides command line support for controlling Logs depends on 45 | [`Cmdliner`][cmdliner]. The optional `Logs_lwt` library that provides Lwt logging 46 | functions depends on [`Lwt`][lwt] 47 | 48 | Logs and its reporters are distributed under the ISC license. 49 | 50 | [fmt]: http://erratique.ch/software/fmt 51 | [jsoo]: http://ocsigen.org/js_of_ocaml/ 52 | [cmdliner]: http://erratique.ch/software/cmdliner 53 | [lwt]: http://ocsigen.org/lwt/""" 54 | url { 55 | src: "http://erratique.ch/software/logs/releases/logs-0.6.2.tbz" 56 | checksum: "md5=19f824c02c83c6dddc3bfb6459e4743e" 57 | } 58 | -------------------------------------------------------------------------------- /server/esy.lock/opam/lwt.4.2.0/opam: -------------------------------------------------------------------------------- 1 | opam-version: "2.0" 2 | 3 | synopsis: "Promises and event-driven I/O" 4 | 5 | license: "MIT" 6 | homepage: "https://github.com/ocsigen/lwt" 7 | doc: "https://ocsigen.org/lwt/manual/" 8 | bug-reports: "https://github.com/ocsigen/lwt/issues" 9 | 10 | authors: [ 11 | "Jérôme Vouillon" 12 | "Jérémie Dimino" 13 | ] 14 | maintainer: [ 15 | "Anton Bachin " 16 | "Mauricio Fernandez " 17 | "Simon Cruanes " 18 | ] 19 | dev-repo: "git+https://github.com/ocsigen/lwt.git" 20 | 21 | depends: [ 22 | "cppo" {build & >= "1.1.0"} 23 | "dune" {build} 24 | "mmap" 25 | "ocaml" {>= "4.02.0"} 26 | "result" # result is needed as long as Lwt supports OCaml 4.02. 27 | "seq" # seq is needed as long as Lwt supports OCaml < 4.07.0. 28 | 29 | "bisect_ppx" {dev & >= "1.3.0"} 30 | "ocamlfind" {dev & >= "1.7.3-1"} 31 | ] 32 | depopts: [ 33 | "base-threads" 34 | "base-unix" 35 | "conf-libev" 36 | ] 37 | 38 | conflicts: [ 39 | "ocaml-variants" {= "4.02.1+BER"} 40 | ] 41 | 42 | build: [ 43 | ["dune" "build" "-p" name "-j" jobs] 44 | ] 45 | 46 | description: "A promise is a value that may become determined in the future. 47 | 48 | Lwt provides typed, composable promises. Promises that are resolved by I/O are 49 | resolved by Lwt in parallel. 50 | 51 | Meanwhile, OCaml code, including code creating and waiting on promises, runs in 52 | a single thread by default. This reduces the need for locks or other 53 | synchronization primitives. Code can be run in parallel on an opt-in basis." 54 | 55 | url { 56 | src: "https://github.com/ocsigen/lwt/archive/4.2.0.tar.gz" 57 | checksum: "md5=2ce7827948adc611319f9449e4519070" 58 | } 59 | -------------------------------------------------------------------------------- /server/esy.lock/opam/magic-mime.1.1.1/opam: -------------------------------------------------------------------------------- 1 | opam-version: "2.0" 2 | name: "magic-mime" 3 | synopsis: "Map filenames to common MIME types" 4 | description: """ 5 | This library contains a database of MIME types that maps filename extensions 6 | into MIME types suitable for use in many Internet protocols such as HTTP or 7 | e-mail. It is generated from the `mime.types` file found in Unix systems, but 8 | has no dependency on a filesystem since it includes the contents of the 9 | database as an ML datastructure. 10 | 11 | For example, here's how to lookup MIME types in the [utop] REPL: 12 | 13 | #require "magic-mime";; 14 | Magic_mime.lookup "/foo/bar.txt";; 15 | - : bytes = "text/plain" 16 | Magic_mime.lookup "bar.css";; 17 | - : bytes = "text/css" 18 | """ 19 | maintainer: "Anil Madhavapeddy " 20 | authors: ["Anil Madhavapeddy" "Maxence Guesdon"] 21 | license: "ISC" 22 | homepage: "https://github.com/mirage/ocaml-magic-mime" 23 | doc: "https://mirage.github.io/ocaml-magic-mime/" 24 | bug-reports: "https://github.com/mirage/ocaml-magic-mime/issues" 25 | dev-repo: "git+https://github.com/mirage/ocaml-magic-mime.git" 26 | depends: [ 27 | "ocaml" {>= "4.03.0"} 28 | "dune" {build} 29 | ] 30 | build: [ 31 | ["dune" "subst"] {pinned} 32 | ["dune" "build" "-p" name "-j" jobs] 33 | ] 34 | url { 35 | src: 36 | "https://github.com/mirage/ocaml-magic-mime/releases/download/v1.1.1/magic-mime-v1.1.1.tbz" 37 | checksum: "md5=8430a2686206517f2753e47c9c038b5c" 38 | } 39 | -------------------------------------------------------------------------------- /server/esy.lock/opam/menhir.20181113/opam: -------------------------------------------------------------------------------- 1 | opam-version: "2.0" 2 | maintainer: "francois.pottier@inria.fr" 3 | authors: [ 4 | "François Pottier " 5 | "Yann Régis-Gianas " 6 | ] 7 | homepage: "http://gitlab.inria.fr/fpottier/menhir" 8 | dev-repo: "git+https://gitlab.inria.fr/fpottier/menhir.git" 9 | bug-reports: "menhir@inria.fr" 10 | build: [ 11 | [make "-f" "Makefile" "PREFIX=%{prefix}%" "USE_OCAMLFIND=true" "docdir=%{doc}%/menhir" "libdir=%{lib}%/menhir" "mandir=%{man}%/man1"] 12 | ] 13 | install: [ 14 | [make "-f" "Makefile" "install" "PREFIX=%{prefix}%" "docdir=%{doc}%/menhir" "libdir=%{lib}%/menhir" "mandir=%{man}%/man1"] 15 | ] 16 | remove: [ 17 | [make "-f" "Makefile" "uninstall" "PREFIX=%{prefix}%" "docdir=%{doc}%/menhir" "libdir=%{lib}%/menhir" "mandir=%{man}%/man1"] 18 | ] 19 | depends: [ 20 | "ocaml" {>= "4.02"} 21 | "ocamlfind" {build} 22 | "ocamlbuild" {build} 23 | ] 24 | synopsis: "An LR(1) parser generator" 25 | url { 26 | src: 27 | "https://gitlab.inria.fr/fpottier/menhir/repository/20181113/archive.tar.gz" 28 | checksum: [ 29 | "md5=69ce441a06ea131cd43e7b44c4303f3c" 30 | "sha512=4ddefcd71d305bfb933a4056da57e36c13c99ec6dfcc4695814798fbbd78b4d65828381ebcb0e58c4c0394105ac763af3d475474e05e408f7080315bc3cf6176" 31 | ] 32 | } 33 | -------------------------------------------------------------------------------- /server/esy.lock/opam/merlin-extend.0.3/opam: -------------------------------------------------------------------------------- 1 | opam-version: "2.0" 2 | maintainer: "Frederic Bour " 3 | authors: "Frederic Bour " 4 | homepage: "https://github.com/let-def/merlin-extend" 5 | bug-reports: "https://github.com/let-def/merlin-extend" 6 | license: "MIT" 7 | dev-repo: "git+https://github.com/let-def/merlin-extend.git" 8 | build: [make] 9 | install: [make "install"] 10 | remove: ["ocamlfind" "remove" "merlin_extend"] 11 | depends: [ 12 | "ocaml" {>= "4.02.3"} 13 | "ocamlfind" {build} 14 | "cppo" {build} 15 | ] 16 | synopsis: "A protocol to provide custom frontend to Merlin" 17 | description: """ 18 | This protocol allows to replace the OCaml frontend of Merlin. 19 | It extends what used to be done with the `-pp' flag to handle a few more cases.""" 20 | flags: light-uninstall 21 | url { 22 | src: "https://github.com/let-def/merlin-extend/archive/v0.3.tar.gz" 23 | checksum: "md5=9c6dfd4f53328f02f12fcc265f4e2dda" 24 | } 25 | -------------------------------------------------------------------------------- /server/esy.lock/opam/mmap.1.0.2/opam: -------------------------------------------------------------------------------- 1 | opam-version: "2.0" 2 | maintainer: "jeremie@dimino.org" 3 | authors: ["Jérémie Dimino "] 4 | homepage: "https://github.com/mirage/mmap" 5 | bug-reports: "https://github.com/mirage/mmap/issues" 6 | doc: "https://mirage.github.io/mmap/" 7 | dev-repo: "git+https://github.com/mirage/mmap.git" 8 | license: "LGPL 2.1 with linking exception" 9 | build: [ 10 | ["dune" "build" "-p" name "-j" jobs] 11 | ] 12 | depends: [ 13 | "ocaml" {>= "4.02.3"} 14 | "dune" {build & >= "1.6"} 15 | ] 16 | synopsis: "File mapping functionality" 17 | description: """ 18 | This project provides a Mmap.map_file functions for mapping files in memory. 19 | """ 20 | url { 21 | src: 22 | "https://github.com/mirage/mmap/releases/download/v1.0.2/mmap-v1.0.2.tbz" 23 | checksum: "md5=7880d4d74b37664f9bb0906ae1cadf6b" 24 | } 25 | -------------------------------------------------------------------------------- /server/esy.lock/opam/num.1.1/files/findlib-install.patch: -------------------------------------------------------------------------------- 1 | From 7688bb4fea24463c92e9c4870acc08495a4c77cb Mon Sep 17 00:00:00 2001 2 | From: David Allsopp 3 | Date: Wed, 10 Jan 2018 15:20:46 +0000 4 | Subject: [PATCH] Provide findlib-install target 5 | 6 | Allows installing the entire library using ocamlfind. 7 | --- 8 | Makefile | 10 +++++++++- 9 | src/META | 17 ----------------- 10 | src/META.in | 19 +++++++++++++++++++ 11 | src/Makefile | 17 +++++++++++++++-- 12 | 4 files changed, 43 insertions(+), 20 deletions(-) 13 | delete mode 100644 src/META 14 | create mode 100644 src/META.in 15 | 16 | diff --git a/Makefile b/Makefile 17 | index 6a5d08f..b40e588 100644 18 | --- a/Makefile 19 | +++ b/Makefile 20 | @@ -14,8 +14,16 @@ install: 21 | $(MAKE) -C src install 22 | $(MAKE) -C toplevel install 23 | 24 | +findlib-install: 25 | + $(MAKE) -C src findlib-install 26 | + $(MAKE) -C toplevel install 27 | + 28 | uninstall: 29 | $(MAKE) -C src uninstall 30 | $(MAKE) -C toplevel uninstall 31 | 32 | -.PHONY: all test clean install uninstall 33 | +findlib-uninstall: 34 | + $(MAKE) -C src findlib-uninstall 35 | + $(MAKE) -C toplevel uninstall 36 | + 37 | +.PHONY: all test clean install uninstall findlib-install findlib-uninstall 38 | diff --git a/src/META b/src/META 39 | deleted file mode 100644 40 | index 66ac170..0000000 41 | --- a/src/META 42 | +++ /dev/null 43 | @@ -1,17 +0,0 @@ 44 | -# This META is the one provided by findlib when the "num" library was 45 | -# part of the core OCaml distribution. For backward compatibility, 46 | -# it installs into OCaml's standard library directory, not in a subdirectory 47 | - 48 | -requires = "num.core" 49 | -requires(toploop) = "num.core,num-top" 50 | -version = "1.0" 51 | -description = "Arbitrary-precision rational arithmetic" 52 | -package "core" ( 53 | - directory = "^" 54 | - version = "1.0" 55 | - browse_interfaces = "" 56 | - archive(byte) = "nums.cma" 57 | - archive(native) = "nums.cmxa" 58 | - plugin(byte) = "nums.cma" 59 | - plugin(native) = "nums.cmxs" 60 | -) 61 | diff --git a/src/META.in b/src/META.in 62 | new file mode 100644 63 | index 0000000..b5678b7 64 | --- /dev/null 65 | +++ b/src/META.in 66 | @@ -0,0 +1,19 @@ 67 | +# This META is the one provided by findlib when the "num" library was 68 | +# part of the core OCaml distribution. For backward compatibility, 69 | +# it is installed into OCaml's standard library directory. If the 70 | +# directory line below is removed, then it's installed in a 71 | +# subdirectory, as normal for a findlib package. 72 | + 73 | +requires = "num.core" 74 | +requires(toploop) = "num.core,num-top" 75 | +version = "1.0" 76 | +description = "Arbitrary-precision rational arithmetic" 77 | +package "core" ( 78 | + directory = "^" 79 | + version = "1.0" 80 | + browse_interfaces = "" 81 | + archive(byte) = "nums.cma" 82 | + archive(native) = "nums.cmxa" 83 | + plugin(byte) = "nums.cma" 84 | + plugin(native) = "nums.cmxs" 85 | +) 86 | diff --git a/src/Makefile b/src/Makefile 87 | index 97dc074..ff271fe 100644 88 | --- a/src/Makefile 89 | +++ b/src/Makefile 90 | @@ -80,21 +80,34 @@ endif 91 | ifeq "$(NATDYNLINK)" "true" 92 | TOINSTALL+=nums.cmxs 93 | endif 94 | +ifeq "$(SUPPORTS_SHARED_LIBRARIES)" "true" 95 | TOINSTALL_STUBS=dllnums.$(SO) 96 | +else 97 | +TOINSTALL_STUBS= 98 | +endif 99 | 100 | install: 101 | + cp META.in META 102 | $(OCAMLFIND) install num META 103 | + rm -f META 104 | $(INSTALL_DATA) $(TOINSTALL) $(STDLIBDIR) 105 | ifeq "$(SUPPORTS_SHARED_LIBRARIES)" "true" 106 | $(INSTALL_DLL) $(TOINSTALL_STUBS) $(STDLIBDIR)/stublibs 107 | endif 108 | 109 | -uninstall: 110 | +findlib-install: 111 | + grep -Fv '^' META.in > META 112 | + $(OCAMLFIND) install num META $(TOINSTALL) $(TOINSTALL_STUBS) 113 | + rm -f META 114 | + 115 | +findlib-uninstall: 116 | + $(OCAMLFIND) remove num 117 | + 118 | +uninstall: findlib-uninstall 119 | cd $(STDLIBDIR) && rm -f $(TOINSTALL) 120 | ifeq "$(SUPPORTS_SHARED_LIBRARIES)" "true" 121 | cd $(STDLIBDIR)/stublibs && rm -f $(TOINSTALL_STUBS) 122 | endif 123 | - $(OCAMLFIND) remove num 124 | 125 | clean: 126 | rm -f *.cm[ioxta] *.cmx[as] *.cmti *.$(O) *.$(A) *.$(SO) 127 | -- 128 | 2.14.1 129 | 130 | -------------------------------------------------------------------------------- /server/esy.lock/opam/num.1.1/files/installation-warning.patch: -------------------------------------------------------------------------------- 1 | From db8d748b2cad0adc2698e9fcf28727083a711bae Mon Sep 17 00:00:00 2001 2 | From: David Allsopp 3 | Date: Wed, 24 Jan 2018 16:01:56 +0000 4 | Subject: [PATCH] Warn about installations broken by previous faulty package 5 | 6 | --- 7 | Makefile | 33 +++++++++++++++++++++++++++++++++ 8 | 1 file changed, 33 insertions(+) 9 | 10 | diff --git a/Makefile b/Makefile 11 | index b40e588..d4dcd70 100644 12 | --- a/Makefile 13 | +++ b/Makefile 14 | @@ -14,9 +14,42 @@ install: 15 | $(MAKE) -C src install 16 | $(MAKE) -C toplevel install 17 | 18 | +OCAMLFIND_DIR:=$(dir $(shell command -v ocamlfind 2>/dev/null)) 19 | +OCAMLC_DIR:=$(dir $(shell command -v ocamlc 2>/dev/null)) 20 | +NUM_INSTALLED:=$(shell ocamlfind query num 2>/dev/null) 21 | + 22 | +ifeq ($(NUM_INSTALLED),) 23 | +# The num findlib package is not already present - wohoo! 24 | +OUR_FAULT=no 25 | +else 26 | +ifeq ($(OCAMLFIND_DIR),$(OCAMLC_DIR)) 27 | +# The num findlib package is present, but ocamlc and ocamlfind are in the 28 | +# same place, which means that either we're looking at a system-installed 29 | +# ocamlfind (which isn't supported), or the user has done something else 30 | +# nefarious and doesn't deserve our sympathy (or, at least, our potentially 31 | +# unhelpful advice) 32 | +OUR_FAULT=no 33 | +else 34 | +# The num findlib package package is present, and ocamlc and ocamlfind reside 35 | +# in different directories, which means that we're almost certainly looking at 36 | +# a system switch which has been damaged by a previous num package installation 37 | +# on an OS which didn't protect the system lib directory. 38 | +OUR_FAULT=probably 39 | +endif 40 | +endif 41 | + 42 | findlib-install: 43 | +ifeq ($(OUR_FAULT),no) 44 | $(MAKE) -C src findlib-install 45 | $(MAKE) -C toplevel install 46 | +else 47 | + @echo "\033[0;31m[ERROR]\033[m It appears that the num library was previously installed to your system" 48 | + @echo " compiler's lib directory, probably by a faulty opam package." 49 | + @echo " You will need to remove arith_flags.*, arith_status.*, big_int.*," 50 | + @echo " int_misc.*, nat.*, num.*, ratio.*, nums.*, libnums.* and" 51 | + @echo " stublibs/dllnums.* from $(shell ocamlc -where)." 52 | + @false 53 | +endif 54 | 55 | uninstall: 56 | $(MAKE) -C src uninstall 57 | -- 58 | 2.14.1 59 | 60 | -------------------------------------------------------------------------------- /server/esy.lock/opam/num.1.1/opam: -------------------------------------------------------------------------------- 1 | opam-version: "2.0" 2 | name: "num" 3 | version: "1.1" 4 | maintainer: "Xavier Leroy " 5 | authors: [ 6 | "Valérie Ménissier-Morain" 7 | "Pierre Weis" 8 | "Xavier Leroy" 9 | ] 10 | license: "LGPL 2.1 with OCaml linking exception" 11 | 12 | homepage: "https://github.com/ocaml/num/" 13 | bug-reports: "https://github.com/ocaml/num/issues" 14 | dev-repo: "git+https://github.com/ocaml/num.git" 15 | build: [ 16 | [make] 17 | ] 18 | install: [ 19 | make 20 | "install" {!ocaml:preinstalled} 21 | "findlib-install" {ocaml:preinstalled} 22 | ] 23 | remove: [ 24 | make 25 | "uninstall" {!ocaml:preinstalled} 26 | "findlib-uninstall" {ocaml:preinstalled} 27 | ] 28 | depends: [ 29 | "ocaml" {>= "4.06.0"} 30 | "ocamlfind" {build & >= "1.7.3"} 31 | ] 32 | conflicts: [ "base-num" ] 33 | patches: [ "findlib-install.patch" "installation-warning.patch" ] 34 | synopsis: 35 | "The legacy Num library for arbitrary-precision integer and rational arithmetic" 36 | extra-files: [ 37 | ["installation-warning.patch" "md5=93c92bf6da6bae09d068da42b1bbaaac"] 38 | ["findlib-install.patch" "md5=3163a4c3f8dd084653eeb64d95311a2a"] 39 | ] 40 | url { 41 | src: "https://github.com/ocaml/num/archive/v1.1.tar.gz" 42 | checksum: "md5=710cbe18b144955687a03ebab439ff2b" 43 | } 44 | -------------------------------------------------------------------------------- /server/esy.lock/opam/ocaml-compiler-libs.v0.11.0/opam: -------------------------------------------------------------------------------- 1 | opam-version: "2.0" 2 | maintainer: "opensource@janestreet.com" 3 | authors: ["Jane Street Group, LLC "] 4 | homepage: "https://github.com/janestreet/ocaml-compiler-libs" 5 | bug-reports: "https://github.com/janestreet/ocaml-compiler-libs/issues" 6 | dev-repo: "git+https://github.com/janestreet/ocaml-compiler-libs.git" 7 | license: "Apache-2.0" 8 | build: [ 9 | ["jbuilder" "build" "-p" name "-j" jobs] 10 | ] 11 | depends: [ 12 | "ocaml" {>= "4.04.1"} 13 | "jbuilder" {build & >= "1.0+beta12"} 14 | ] 15 | synopsis: "OCaml compiler libraries repackaged" 16 | description: """ 17 | This packages exposes the OCaml compiler libraries repackages under 18 | the toplevel names Ocaml_common, Ocaml_bytecomp, ...""" 19 | url { 20 | src: 21 | "https://ocaml.janestreet.com/ocaml-core/v0.11/files/ocaml-compiler-libs-v0.11.0.tar.gz" 22 | checksum: "md5=e170c16186aa55b7e8b11e461418a10a" 23 | } 24 | -------------------------------------------------------------------------------- /server/esy.lock/opam/ocaml-migrate-parsetree.1.2.0/opam: -------------------------------------------------------------------------------- 1 | opam-version: "2.0" 2 | maintainer: "frederic.bour@lakaban.net" 3 | authors: [ 4 | "Frédéric Bour " 5 | "Jérémie Dimino " 6 | ] 7 | license: "LGPL-2.1" 8 | homepage: "https://github.com/ocaml-ppx/ocaml-migrate-parsetree" 9 | bug-reports: "https://github.com/ocaml-ppx/ocaml-migrate-parsetree/issues" 10 | dev-repo: "git+https://github.com/ocaml-ppx/ocaml-migrate-parsetree.git" 11 | doc: "https://ocaml-ppx.github.io/ocaml-migrate-parsetree/" 12 | tags: [ "syntax" "org:ocamllabs" ] 13 | build: [ 14 | ["dune" "build" "-p" name "-j" jobs] 15 | ] 16 | depends: [ 17 | "result" 18 | "ppx_derivers" 19 | "dune" {build & >= "1.6.0"} 20 | "ocaml" {>= "4.02.3" & < "4.08.0"} 21 | ] 22 | synopsis: "Convert OCaml parsetrees between different versions" 23 | description: """ 24 | Convert OCaml parsetrees between different versions 25 | 26 | This library converts parsetrees, outcometree and ast mappers between 27 | different OCaml versions. High-level functions help making PPX 28 | rewriters independent of a compiler version. 29 | """ 30 | url { 31 | src: 32 | "https://github.com/ocaml-ppx/ocaml-migrate-parsetree/releases/download/v1.2.0/ocaml-migrate-parsetree-v1.2.0.tbz" 33 | checksum: "md5=cc6fb09ad6f99156c7dba47711c62c6f" 34 | } 35 | -------------------------------------------------------------------------------- /server/esy.lock/opam/ocamlbuild.0.14.0/opam: -------------------------------------------------------------------------------- 1 | opam-version: "2.0" 2 | maintainer: "Gabriel Scherer " 3 | authors: ["Nicolas Pouillard" "Berke Durak"] 4 | homepage: "https://github.com/ocaml/ocamlbuild/" 5 | bug-reports: "https://github.com/ocaml/ocamlbuild/issues" 6 | license: "LGPL-2 with OCaml linking exception" 7 | doc: "https://github.com/ocaml/ocamlbuild/blob/master/manual/manual.adoc" 8 | dev-repo: "git+https://github.com/ocaml/ocamlbuild.git" 9 | build: [ 10 | [ 11 | make 12 | "-f" 13 | "configure.make" 14 | "all" 15 | "OCAMLBUILD_PREFIX=%{prefix}%" 16 | "OCAMLBUILD_BINDIR=%{bin}%" 17 | "OCAMLBUILD_LIBDIR=%{lib}%" 18 | "OCAMLBUILD_MANDIR=%{man}%" 19 | "OCAML_NATIVE=%{ocaml:native}%" 20 | "OCAML_NATIVE_TOOLS=%{ocaml:native}%" 21 | ] 22 | [make "check-if-preinstalled" "all" "opam-install"] 23 | ] 24 | conflicts: [ 25 | "base-ocamlbuild" 26 | "ocamlfind" {< "1.6.2"} 27 | ] 28 | synopsis: 29 | "OCamlbuild is a build system with builtin rules to easily build most OCaml projects." 30 | depends: [ 31 | "ocaml" {>= "4.03"} 32 | ] 33 | url { 34 | src: "https://github.com/ocaml/ocamlbuild/archive/0.14.0.tar.gz" 35 | checksum: "sha256=87b29ce96958096c0a1a8eeafeb6268077b2d11e1bf2b3de0f5ebc9cf8d42e78" 36 | } 37 | -------------------------------------------------------------------------------- /server/esy.lock/opam/ocamlfind.1.8.0/files/no-awk-check.patch: -------------------------------------------------------------------------------- 1 | commit 40142bc941e6e308686e86be6fc2da92f346a22f 2 | Author: Kate 3 | Date: Tue Mar 19 16:29:06 2019 +0000 4 | 5 | Remove awk from the set of checked unix tools as it's not used anywhere 6 | 7 | diff --git a/configure b/configure 8 | index d9b587c..20e8dca 100755 9 | --- a/configure 10 | +++ b/configure 11 | @@ -184,7 +184,7 @@ echo "Configuring core..." 12 | 13 | # Some standard Unix tools must be available: 14 | 15 | -for tool in sed awk ocaml ocamlc uname rm make cat m4 dirname basename; do 16 | +for tool in sed ocaml ocamlc uname rm make cat m4 dirname basename; do 17 | if in_path $tool; then true; else 18 | echo "configure: $tool not in PATH; this is required" 1>&2 19 | exit 1 20 | -------------------------------------------------------------------------------- /server/esy.lock/opam/ocamlfind.1.8.0/files/ocaml-stub: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | BINDIR=$(dirname "$(command -v ocamlc)") 4 | "$BINDIR/ocaml" -I "$OCAML_TOPLEVEL_PATH" "$@" 5 | -------------------------------------------------------------------------------- /server/esy.lock/opam/ocamlfind.1.8.0/files/ocamlfind.install: -------------------------------------------------------------------------------- 1 | bin: [ 2 | "src/findlib/ocamlfind" {"ocamlfind"} 3 | "?src/findlib/ocamlfind_opt" {"ocamlfind"} 4 | "?tools/safe_camlp4" 5 | ] 6 | toplevel: ["src/findlib/topfind"] 7 | -------------------------------------------------------------------------------- /server/esy.lock/opam/ocamlfind.1.8.0/opam: -------------------------------------------------------------------------------- 1 | opam-version: "2.0" 2 | maintainer: "Thomas Gazagnaire " 3 | homepage: "http://projects.camlcity.org/projects/findlib.html" 4 | bug-reports: "https://gitlab.camlcity.org/gerd/lib-findlib/issues" 5 | dev-repo: "git+https://gitlab.camlcity.org/gerd/lib-findlib.git" 6 | patches: ["no-awk-check.patch"] 7 | build: [ 8 | [ 9 | "./configure" 10 | "-bindir" 11 | bin 12 | "-sitelib" 13 | lib 14 | "-mandir" 15 | man 16 | "-config" 17 | "%{lib}%/findlib.conf" 18 | "-no-custom" 19 | "-no-topfind" {ocaml:preinstalled} 20 | ] 21 | [make "all"] 22 | [make "opt"] {ocaml:native} 23 | ] 24 | install: [ 25 | [make "install"] 26 | ["install" "-m" "0755" "ocaml-stub" "%{bin}%/ocaml"] {ocaml:preinstalled} 27 | ] 28 | remove: [ 29 | ["ocamlfind" "remove" "bytes"] 30 | [ 31 | "./configure" 32 | "-bindir" 33 | bin 34 | "-sitelib" 35 | lib 36 | "-mandir" 37 | man 38 | "-config" 39 | "%{lib}%/findlib.conf" 40 | "-no-topfind" {ocaml:preinstalled} 41 | ] 42 | [make "uninstall"] 43 | ["rm" "-f" "%{bin}%/ocaml"] {ocaml:preinstalled} 44 | ] 45 | depends: [ 46 | "ocaml" {>= "4.00.0"} 47 | "conf-m4" {build} 48 | ] 49 | synopsis: "A library manager for OCaml" 50 | description: """ 51 | Findlib is a library manager for OCaml. It provides a convention how 52 | to store libraries, and a file format ("META") to describe the 53 | properties of libraries. There is also a tool (ocamlfind) for 54 | interpreting the META files, so that it is very easy to use libraries 55 | in programs and scripts.""" 56 | authors: "Gerd Stolpmann " 57 | extra-files: [ 58 | ["ocamlfind.install" "md5=06f2c282ab52d93aa6adeeadd82a2543"] 59 | ["ocaml-stub" "md5=181f259c9e0bad9ef523e7d4abfdf87a"] 60 | ["no-awk-check.patch" "md5=0378123bf1a45fccdea434c053ddb687"] 61 | ] 62 | url { 63 | src: "http://download.camlcity.org/download/findlib-1.8.0.tar.gz" 64 | checksum: "md5=a710c559667672077a93d34eb6a42e5b" 65 | mirrors: "http://download2.camlcity.org/download/findlib-1.8.0.tar.gz" 66 | } 67 | -------------------------------------------------------------------------------- /server/esy.lock/opam/parsexp.v0.11.0/opam: -------------------------------------------------------------------------------- 1 | opam-version: "2.0" 2 | maintainer: "opensource@janestreet.com" 3 | authors: ["Jane Street Group, LLC "] 4 | homepage: "https://github.com/janestreet/parsexp" 5 | bug-reports: "https://github.com/janestreet/parsexp/issues" 6 | dev-repo: "git+https://github.com/janestreet/parsexp.git" 7 | license: "Apache-2.0" 8 | build: [ 9 | ["jbuilder" "build" "-p" name "-j" jobs] 10 | ] 11 | depends: [ 12 | "ocaml" {>= "4.04.1"} 13 | "sexplib0" {>= "v0.11" & < "v0.12"} 14 | "jbuilder" {build & >= "1.0+beta18.1"} 15 | ] 16 | synopsis: "S-expression parsing library" 17 | description: """ 18 | This library provides generic parsers for parsing S-expressions from 19 | strings or other medium. 20 | 21 | The library is focused on performances but still provide full generic 22 | parsers that can be used with strings, bigstrings, lexing buffers, 23 | character streams or any other sources effortlessly. 24 | 25 | It provides three different class of parsers: 26 | - the normal parsers, producing [Sexp.t] or [Sexp.t list] values 27 | - the parsers with positions, building compact position sequences so 28 | that one can recover original positions in order to report properly 29 | located errors at little cost 30 | - the Concrete Syntax Tree parsers, produce values of type 31 | [Parsexp.Cst.t] which record the concrete layout of the s-expression 32 | syntax, including comments 33 | 34 | This library is portable and doesn't provide IO functions. To read 35 | s-expressions from files or other external sources, you should use 36 | parsexp_io.""" 37 | url { 38 | src: 39 | "https://ocaml.janestreet.com/ocaml-core/v0.11/files/parsexp-v0.11.0.tar.gz" 40 | checksum: "md5=816fce8d14b71a379296577c803bdbca" 41 | } 42 | -------------------------------------------------------------------------------- /server/esy.lock/opam/ppx_derivers.1.0/opam: -------------------------------------------------------------------------------- 1 | opam-version: "2.0" 2 | maintainer: "jeremie@dimino.org" 3 | authors: ["Jérémie Dimino"] 4 | license: "BSD3" 5 | homepage: "https://github.com/ocaml-ppx/ppx_derivers" 6 | bug-reports: "https://github.com/ocaml-ppx/ppx_derivers/issues" 7 | dev-repo: "git://github.com/ocaml-ppx/ppx_derivers.git" 8 | build: [ 9 | ["jbuilder" "build" "-p" name "-j" jobs] 10 | ] 11 | depends: [ 12 | "ocaml" 13 | "jbuilder" {build & >= "1.0+beta7"} 14 | ] 15 | synopsis: "Shared [@@deriving] plugin registry" 16 | description: """ 17 | Ppx_derivers is a tiny package whose sole purpose is to allow 18 | ppx_deriving and ppx_type_conv to inter-operate gracefully when linked 19 | as part of the same ocaml-migrate-parsetree driver.""" 20 | url { 21 | src: "https://github.com/ocaml-ppx/ppx_derivers/archive/1.0.tar.gz" 22 | checksum: "md5=4ddce8f43fdb9b0ef0ab6a7cbfebc3e3" 23 | } 24 | -------------------------------------------------------------------------------- /server/esy.lock/opam/ppx_fields_conv.v0.11.0/opam: -------------------------------------------------------------------------------- 1 | opam-version: "2.0" 2 | maintainer: "opensource@janestreet.com" 3 | authors: ["Jane Street Group, LLC "] 4 | homepage: "https://github.com/janestreet/ppx_fields_conv" 5 | bug-reports: "https://github.com/janestreet/ppx_fields_conv/issues" 6 | dev-repo: "git+https://github.com/janestreet/ppx_fields_conv.git" 7 | license: "Apache-2.0" 8 | build: [ 9 | ["jbuilder" "build" "-p" name "-j" jobs] 10 | ] 11 | depends: [ 12 | "ocaml" {>= "4.04.1"} 13 | "base" {>= "v0.11" & < "v0.12"} 14 | "fieldslib" {>= "v0.11" & < "v0.12"} 15 | "jbuilder" {build & >= "1.0+beta18.1"} 16 | "ocaml-migrate-parsetree" {>= "1.0"} 17 | "ppxlib" {>= "0.1.0"} 18 | ] 19 | synopsis: "Generation of accessor and iteration functions for ocaml records" 20 | description: "Part of the Jane Street's PPX rewriters collection." 21 | url { 22 | src: 23 | "https://ocaml.janestreet.com/ocaml-core/v0.11/files/ppx_fields_conv-v0.11.0.tar.gz" 24 | checksum: "md5=72f207c23d65f7f3eaabcc92e33ccdab" 25 | } 26 | -------------------------------------------------------------------------------- /server/esy.lock/opam/ppx_sexp_conv.v0.11.2/opam: -------------------------------------------------------------------------------- 1 | opam-version: "2.0" 2 | maintainer: "opensource@janestreet.com" 3 | authors: ["Jane Street Group, LLC "] 4 | homepage: "https://github.com/janestreet/ppx_sexp_conv" 5 | bug-reports: "https://github.com/janestreet/ppx_sexp_conv/issues" 6 | dev-repo: "git+https://github.com/janestreet/ppx_sexp_conv.git" 7 | license: "Apache-2.0" 8 | build: [ 9 | ["jbuilder" "build" "-p" name "-j" jobs] 10 | ] 11 | conflicts: [ "jbuilder" { = "1.0+beta19" } ] 12 | depends: [ 13 | "ocaml" {>= "4.04.1"} 14 | "base" {>= "v0.11" & < "v0.12"} 15 | "jbuilder" {build & >= "1.0+beta18.1"} 16 | "ocaml-migrate-parsetree" {>= "1.0"} 17 | "ppxlib" {>= "0.3.0"} 18 | ] 19 | synopsis: 20 | "Generation of S-expression conversion functions from type definitions" 21 | description: "Part of the Jane Street's PPX rewriters collection." 22 | url { 23 | src: "https://github.com/janestreet/ppx_sexp_conv/archive/v0.11.2.tar.gz" 24 | checksum: "md5=77d3b30b3d9c5810552bde2027656b8d" 25 | } 26 | -------------------------------------------------------------------------------- /server/esy.lock/opam/ppx_tools_versioned.5.2.1/opam: -------------------------------------------------------------------------------- 1 | opam-version: "2.0" 2 | maintainer: "frederic.bour@lakaban.net" 3 | authors: [ 4 | "Frédéric Bour " 5 | "Alain Frisch " 6 | ] 7 | license: "MIT" 8 | homepage: "https://github.com/let-def/ppx_tools_versioned" 9 | bug-reports: "https://github.com/let-def/ppx_tools_versioned/issues" 10 | dev-repo: "git://github.com/let-def/ppx_tools_versioned.git" 11 | tags: [ "syntax" ] 12 | build: [ 13 | ["jbuilder" "subst" "-p" name] {pinned} 14 | ["jbuilder" "build" "-p" name "-j" jobs] 15 | ["jbuilder" "runtest" "-p" name "-j" jobs] {with-test} 16 | ] 17 | depends: [ 18 | "ocaml" {>= "4.02.0"} 19 | "jbuilder" {build & >= "1.0+beta17"} 20 | "ocaml-migrate-parsetree" {>= "1.0.10"} 21 | ] 22 | synopsis: "A variant of ppx_tools based on ocaml-migrate-parsetree" 23 | url { 24 | src: 25 | "https://github.com/ocaml-ppx/ppx_tools_versioned/archive/5.2.1.tar.gz" 26 | checksum: "md5=1ae6ae43ec161fbbf12c2b4d3a7e26f5" 27 | } 28 | -------------------------------------------------------------------------------- /server/esy.lock/opam/ppxlib.0.5.0/opam: -------------------------------------------------------------------------------- 1 | opam-version: "2.0" 2 | maintainer: "opensource@janestreet.com" 3 | authors: ["Jane Street Group, LLC "] 4 | homepage: "https://github.com/ocaml-ppx/ppxlib" 5 | bug-reports: "https://github.com/ocaml-ppx/ppxlib/issues" 6 | dev-repo: "git+https://github.com/ocaml-ppx/ppxlib.git" 7 | doc: "https://ocaml-ppx.github.io/ppxlib/" 8 | license: "MIT" 9 | build: [ 10 | ["dune" "subst"] {pinned} 11 | ["dune" "build" "-p" name "-j" jobs] 12 | ] 13 | run-test: [ 14 | ["dune" "runtest" "-p" name "-j" jobs] { ocaml >= "4.06" } 15 | ] 16 | depends: [ 17 | "ocaml" {>= "4.04.1"} 18 | "base" {>= "v0.11.0" & < "v0.13"} 19 | "dune" {build} 20 | "ocaml-compiler-libs" {>= "v0.11.0"} 21 | "ocaml-migrate-parsetree" {>= "1.0.9"} 22 | "ppx_derivers" {>= "1.0"} 23 | "stdio" {>= "v0.11.0" & < "v0.13"} 24 | "ocamlfind" {with-test} 25 | ] 26 | synopsis: "Base library and tools for ppx rewriters" 27 | description: """ 28 | A comprehensive toolbox for ppx development. It features: 29 | - a OCaml AST / parser / pretty-printer snapshot,to create a full 30 | frontend independent of the version of OCaml; 31 | - a library for library for ppx rewriters in general, and type-driven 32 | code generators in particular; 33 | - a feature-full driver for OCaml AST transformers; 34 | - a quotation mechanism allowing to write values representing the 35 | OCaml AST in the OCaml syntax; 36 | - a generator of open recursion classes from type definitions. 37 | """ 38 | url { 39 | src: 40 | "https://github.com/ocaml-ppx/ppxlib/releases/download/0.5.0/ppxlib-0.5.0.tbz" 41 | checksum: "md5=bb278ff6e819e0e4a4d8a005bb2512a4" 42 | } 43 | -------------------------------------------------------------------------------- /server/esy.lock/opam/re.1.8.0/opam: -------------------------------------------------------------------------------- 1 | opam-version: "2.0" 2 | maintainer: "rudi.grinberg@gmail.com" 3 | authors: [ 4 | "Jerome Vouillon" 5 | "Thomas Gazagnaire" 6 | "Anil Madhavapeddy" 7 | "Rudi Grinberg" 8 | "Gabriel Radanne" 9 | ] 10 | license: "LGPL-2.0 with OCaml linking exception" 11 | homepage: "https://github.com/ocaml/ocaml-re" 12 | bug-reports: "https://github.com/ocaml/ocaml-re/issues" 13 | dev-repo: "git+https://github.com/ocaml/ocaml-re.git" 14 | build: [ 15 | ["jbuilder" "subst" "-n" name] {pinned} 16 | ["jbuilder" "build" "-p" name "-j" jobs] 17 | ["jbuilder" "runtest" "-p" name "-j" jobs] {with-test} 18 | ] 19 | depends: [ 20 | "ocaml" {>= "4.02.3"} 21 | "jbuilder" {build & >= "1.0+beta10"} 22 | "ounit" {with-test} 23 | "seq" 24 | ] 25 | synopsis: "RE is a regular expression library for OCaml" 26 | description: """ 27 | Pure OCaml regular expressions with: 28 | * Perl-style regular expressions (module Re.Perl) 29 | * Posix extended regular expressions (module Re.Posix) 30 | * Emacs-style regular expressions (module Re.Emacs) 31 | * Shell-style file globbing (module Re.Glob) 32 | * Compatibility layer for OCaml's built-in Str module (module Re.Str)""" 33 | url { 34 | src: 35 | "https://github.com/ocaml/ocaml-re/releases/download/1.8.0/re-1.8.0.tbz" 36 | checksum: "md5=765f6f8d3e6ab200866e719ed7e5178d" 37 | } 38 | -------------------------------------------------------------------------------- /server/esy.lock/opam/result.1.3/opam: -------------------------------------------------------------------------------- 1 | opam-version: "2.0" 2 | maintainer: "opensource@janestreet.com" 3 | authors: ["Jane Street Group, LLC "] 4 | homepage: "https://github.com/janestreet/result" 5 | dev-repo: "git+https://github.com/janestreet/result.git" 6 | bug-reports: "https://github.com/janestreet/result/issues" 7 | license: "BSD3" 8 | build: [["jbuilder" "build" "-p" name "-j" jobs]] 9 | depends: [ 10 | "ocaml" 11 | "jbuilder" {build & >= "1.0+beta11"} 12 | ] 13 | synopsis: "Compatibility Result module" 14 | description: """ 15 | Projects that want to use the new result type defined in OCaml >= 4.03 16 | while staying compatible with older version of OCaml should use the 17 | Result module defined in this library.""" 18 | url { 19 | src: 20 | "https://github.com/janestreet/result/releases/download/1.3/result-1.3.tbz" 21 | checksum: "md5=4beebefd41f7f899b6eeba7414e7ae01" 22 | } 23 | -------------------------------------------------------------------------------- /server/esy.lock/opam/seq.0.1/opam: -------------------------------------------------------------------------------- 1 | opam-version: "2.0" 2 | maintainer: "simon.cruanes.2007@m4x.org" 3 | authors: "Simon Cruanes" 4 | homepage: "https://github.com/c-cube/seq/" 5 | bug-reports: "https://github.com/c-cube/seq/issues" 6 | license: "GPL" 7 | tags: ["iterator" "seq" "pure" "list" "compatibility" "cascade"] 8 | dev-repo: "git+https://github.com/c-cube/seq.git" 9 | build: [make "build"] 10 | install: [make "install"] 11 | remove: [ "ocamlfind" "remove" "seq" ] 12 | depends: [ 13 | "ocaml" {< "4.07.0"} 14 | "ocamlfind" {build} 15 | "ocamlbuild" {build} 16 | ] 17 | synopsis: 18 | "Compatibility package for OCaml's standard iterator type starting from 4.07." 19 | flags: light-uninstall 20 | url { 21 | src: "https://github.com/c-cube/seq/archive/0.1.tar.gz" 22 | checksum: "md5=0e87f9709541ed46ecb6f414bc31458c" 23 | } 24 | -------------------------------------------------------------------------------- /server/esy.lock/opam/sexplib.v0.11.0/opam: -------------------------------------------------------------------------------- 1 | opam-version: "2.0" 2 | maintainer: "opensource@janestreet.com" 3 | authors: ["Jane Street Group, LLC "] 4 | homepage: "https://github.com/janestreet/sexplib" 5 | bug-reports: "https://github.com/janestreet/sexplib/issues" 6 | dev-repo: "git+https://github.com/janestreet/sexplib.git" 7 | license: "Apache-2.0" 8 | build: [ 9 | ["jbuilder" "build" "-p" name "-j" jobs] 10 | ] 11 | depends: [ 12 | "ocaml" {>= "4.04.1"} 13 | "parsexp" {>= "v0.11" & < "v0.12"} 14 | "sexplib0" {>= "v0.11" & < "v0.12"} 15 | "jbuilder" {build & >= "1.0+beta18.1"} 16 | "num" 17 | ] 18 | synopsis: "Library for serializing OCaml values to and from S-expressions" 19 | description: """ 20 | Part of Jane Street's Core library 21 | The Core suite of libraries is an industrial strength alternative to 22 | OCaml's standard library that was developed by Jane Street, the 23 | largest industrial user of OCaml.""" 24 | url { 25 | src: 26 | "https://ocaml.janestreet.com/ocaml-core/v0.11/files/sexplib-v0.11.0.tar.gz" 27 | checksum: "md5=1d53d945914b6b9a380dc8923f19e9ae" 28 | } 29 | -------------------------------------------------------------------------------- /server/esy.lock/opam/sexplib0.v0.11.0/opam: -------------------------------------------------------------------------------- 1 | opam-version: "2.0" 2 | maintainer: "opensource@janestreet.com" 3 | authors: ["Jane Street Group, LLC "] 4 | homepage: "https://github.com/janestreet/sexplib0" 5 | bug-reports: "https://github.com/janestreet/sexplib0/issues" 6 | dev-repo: "git+https://github.com/janestreet/sexplib0.git" 7 | license: "Apache-2.0" 8 | build: [ 9 | ["jbuilder" "build" "-p" name "-j" jobs] 10 | ] 11 | depends: [ 12 | "ocaml" {>= "4.04.1"} 13 | "jbuilder" {build & >= "1.0+beta18.1"} 14 | ] 15 | conflicts: [ 16 | "sexplib" { < "v0.11"} 17 | ] 18 | synopsis: 19 | "Library containing the definition of S-expressions and some base converters" 20 | description: """ 21 | Part of Jane Street's Core library 22 | The Core suite of libraries is an industrial strength alternative to 23 | OCaml's standard library that was developed by Jane Street, the 24 | largest industrial user of OCaml.""" 25 | url { 26 | src: 27 | "https://ocaml.janestreet.com/ocaml-core/v0.11/files/sexplib0-v0.11.0.tar.gz" 28 | checksum: "md5=1c14ba30b471e49f1b23fea5ff99ea6b" 29 | } 30 | -------------------------------------------------------------------------------- /server/esy.lock/opam/stdio.v0.11.0/opam: -------------------------------------------------------------------------------- 1 | opam-version: "2.0" 2 | maintainer: "opensource@janestreet.com" 3 | authors: ["Jane Street Group, LLC "] 4 | homepage: "https://github.com/janestreet/stdio" 5 | bug-reports: "https://github.com/janestreet/stdio/issues" 6 | dev-repo: "git+https://github.com/janestreet/stdio.git" 7 | license: "Apache-2.0" 8 | build: [ 9 | ["jbuilder" "build" "-p" name "-j" jobs] 10 | ] 11 | depends: [ 12 | "ocaml" {>= "4.04.1"} 13 | "base" {>= "v0.11" & < "v0.12"} 14 | "jbuilder" {build & >= "1.0+beta18.1"} 15 | ] 16 | synopsis: "Standard IO library for OCaml" 17 | description: """ 18 | Stdio implements simple input/output functionalities for OCaml. 19 | 20 | It re-exports the input/output functions of the OCaml standard 21 | libraries using a more consistent API.""" 22 | url { 23 | src: 24 | "https://ocaml.janestreet.com/ocaml-core/v0.11/files/stdio-v0.11.0.tar.gz" 25 | checksum: "md5=2db42ee38c91b3ff7126c2634c407b99" 26 | } 27 | -------------------------------------------------------------------------------- /server/esy.lock/opam/stringext.1.5.0/opam: -------------------------------------------------------------------------------- 1 | opam-version: "2.0" 2 | maintainer: "rudi.grinberg@gmail.com" 3 | authors: "Rudi Grinberg" 4 | homepage: "https://github.com/rgrinberg/stringext" 5 | bug-reports: "https://github.com/rgrinberg/stringext/issues" 6 | license: "MIT" 7 | dev-repo: "git+https://github.com/rgrinberg/stringext.git" 8 | build: [ 9 | ["jbuilder" "subst" "-p" name] {pinned} 10 | ["jbuilder" "build" "-p" name "-j" jobs] 11 | ["jbuilder" "runtest" "-p" name "-j" jobs] {with-test} 12 | ] 13 | depends: [ 14 | "ocaml" {>= "4.02.3"} 15 | "jbuilder" {build & >= "1.0+beta10"} 16 | "ounit" {with-test} 17 | "qtest" {with-test & >= "2.2"} 18 | "base-bytes" 19 | ] 20 | synopsis: "Extra string functions for OCaml" 21 | description: """ 22 | Extra string functions for OCaml. Mainly splitting. All functions are in the 23 | `Stringext` module.""" 24 | url { 25 | src: "https://github.com/rgrinberg/stringext/archive/1.5.0.zip" 26 | checksum: "md5=867263ea97532f150516677fa994cdf2" 27 | } 28 | -------------------------------------------------------------------------------- /server/esy.lock/opam/topkg.1.0.0/opam: -------------------------------------------------------------------------------- 1 | opam-version: "2.0" 2 | maintainer: "Daniel Bünzli " 3 | authors: ["Daniel Bünzli "] 4 | homepage: "http://erratique.ch/software/topkg" 5 | doc: "http://erratique.ch/software/topkg/doc" 6 | license: "ISC" 7 | dev-repo: "git+http://erratique.ch/repos/topkg.git" 8 | bug-reports: "https://github.com/dbuenzli/topkg/issues" 9 | tags: ["packaging" "ocamlbuild" "org:erratique"] 10 | depends: [ 11 | "ocaml" {>= "4.01.0"} 12 | "ocamlfind" {build & >= "1.6.1"} 13 | "ocamlbuild" 14 | "result" ] 15 | build: [[ 16 | "ocaml" "pkg/pkg.ml" "build" 17 | "--pkg-name" name 18 | "--dev-pkg" "%{pinned}%" ]] 19 | synopsis: """The transitory OCaml software packager""" 20 | description: """\ 21 | 22 | Topkg is a packager for distributing OCaml software. It provides an 23 | API to describe the files a package installs in a given build 24 | configuration and to specify information about the package's 25 | distribution, creation and publication procedures. 26 | 27 | The optional topkg-care package provides the `topkg` command line tool 28 | which helps with various aspects of a package's life cycle: creating 29 | and linting a distribution, releasing it on the WWW, publish its 30 | documentation, add it to the OCaml opam repository, etc. 31 | 32 | Topkg is distributed under the ISC license and has **no** 33 | dependencies. This is what your packages will need as a *build* 34 | dependency. 35 | 36 | Topkg-care is distributed under the ISC license it depends on 37 | [fmt][fmt], [logs][logs], [bos][bos], [cmdliner][cmdliner], 38 | [webbrowser][webbrowser] and `opam-format`. 39 | 40 | [fmt]: http://erratique.ch/software/fmt 41 | [logs]: http://erratique.ch/software/logs 42 | [bos]: http://erratique.ch/software/bos 43 | [cmdliner]: http://erratique.ch/software/cmdliner 44 | [webbrowser]: http://erratique.ch/software/webbrowser 45 | """ 46 | url { 47 | src: "http://erratique.ch/software/topkg/releases/topkg-1.0.0.tbz" 48 | checksum: "md5=e3d76bda06bf68cb5853caf6627da603" 49 | } 50 | -------------------------------------------------------------------------------- /server/esy.lock/opam/uchar.0.0.2/opam: -------------------------------------------------------------------------------- 1 | opam-version: "2.0" 2 | maintainer: "Daniel Bünzli " 3 | authors: ["Daniel Bünzli "] 4 | homepage: "http://ocaml.org" 5 | doc: "https://ocaml.github.io/uchar/" 6 | dev-repo: "git+https://github.com/ocaml/uchar.git" 7 | bug-reports: "https://github.com/ocaml/uchar/issues" 8 | tags: [ "text" "character" "unicode" "compatibility" "org:ocaml.org" ] 9 | license: "typeof OCaml system" 10 | depends: [ 11 | "ocaml" {>= "3.12.0"} 12 | "ocamlbuild" {build} 13 | ] 14 | build: [ 15 | ["ocaml" "pkg/git.ml"] 16 | [ 17 | "ocaml" 18 | "pkg/build.ml" 19 | "native=%{ocaml:native}%" 20 | "native-dynlink=%{ocaml:native-dynlink}%" 21 | ] 22 | ] 23 | synopsis: "Compatibility library for OCaml's Uchar module" 24 | description: """ 25 | The `uchar` package provides a compatibility library for the 26 | [`Uchar`][1] module introduced in OCaml 4.03. 27 | 28 | The `uchar` package is distributed under the license of the OCaml 29 | compiler. See [LICENSE](LICENSE) for details. 30 | 31 | [1]: http://caml.inria.fr/pub/docs/manual-ocaml/libref/Uchar.html""" 32 | url { 33 | src: 34 | "https://github.com/ocaml/uchar/releases/download/v0.0.2/uchar-0.0.2.tbz" 35 | checksum: "md5=c9ba2c738d264c420c642f7bb1cf4a36" 36 | } 37 | -------------------------------------------------------------------------------- /server/esy.lock/opam/uri.2.2.0/opam: -------------------------------------------------------------------------------- 1 | opam-version: "2.0" 2 | maintainer: "anil@recoil.org" 3 | authors: ["Anil Madhavapeddy" "David Sheets" "Rudi Grinberg"] 4 | license: "ISC" 5 | tags: ["url" "uri" "org:mirage" "org:xapi-project"] 6 | homepage: "https://github.com/mirage/ocaml-uri" 7 | bug-reports: "https://github.com/mirage/ocaml-uri/issues" 8 | dev-repo: "git+https://github.com/mirage/ocaml-uri.git" 9 | doc: "https://mirage.github.io/ocaml-uri/" 10 | synopsis: "An RFC3986 URI/URL parsing library" 11 | description: """ 12 | This is an OCaml implementation of the [RFC3986](http://tools.ietf.org/html/rfc3986) specification 13 | for parsing URI or URLs. 14 | """ 15 | depends: [ 16 | "ocaml" {>= "4.04.0"} 17 | "dune" {build & >= "1.2.0"} 18 | "ounit" {with-test & >= "1.0.2"} 19 | "ppx_sexp_conv" {build & >= "v0.9.0" & < "v0.13"} 20 | "re" {>= "1.7.2"} 21 | "sexplib0" {< "v0.13"} 22 | "stringext" {>= "1.4.0"} 23 | ] 24 | build: [ 25 | ["dune" "subst"] {pinned} 26 | ["dune" "build" "-p" name "-j" jobs] 27 | ["dune" "runtest" "-p" name "-j" jobs] {with-test} 28 | ] 29 | url { 30 | src: 31 | "https://github.com/mirage/ocaml-uri/releases/download/v2.2.0/uri-v2.2.0.tbz" 32 | checksum: "md5=e52e17fc6cc3491ab44994e6ebc5664c" 33 | } 34 | -------------------------------------------------------------------------------- /server/esy.lock/opam/uutf.1.0.2/opam: -------------------------------------------------------------------------------- 1 | opam-version: "2.0" 2 | maintainer: "Daniel Bünzli " 3 | authors: ["Daniel Bünzli "] 4 | homepage: "http://erratique.ch/software/uutf" 5 | doc: "http://erratique.ch/software/uutf/doc/Uutf" 6 | dev-repo: "git+http://erratique.ch/repos/uutf.git" 7 | bug-reports: "https://github.com/dbuenzli/uutf/issues" 8 | tags: [ "unicode" "text" "utf-8" "utf-16" "codec" "org:erratique" ] 9 | license: "ISC" 10 | depends: [ 11 | "ocaml" {>= "4.01.0"} 12 | "ocamlfind" {build} 13 | "ocamlbuild" {build} 14 | "topkg" {build} 15 | "uchar" 16 | ] 17 | depopts: ["cmdliner"] 18 | conflicts: ["cmdliner" { < "0.9.6"} ] 19 | build: [[ 20 | "ocaml" "pkg/pkg.ml" "build" 21 | "--pinned" "%{pinned}%" 22 | "--with-cmdliner" "%{cmdliner:installed}%" ]] 23 | synopsis: """Non-blocking streaming Unicode codec for OCaml""" 24 | description: """\ 25 | 26 | Uutf is a non-blocking streaming codec to decode and encode the UTF-8, 27 | UTF-16, UTF-16LE and UTF-16BE encoding schemes. It can efficiently 28 | work character by character without blocking on IO. Decoders perform 29 | character position tracking and support newline normalization. 30 | 31 | Functions are also provided to fold over the characters of UTF encoded 32 | OCaml string values and to directly encode characters in OCaml 33 | Buffer.t values. 34 | 35 | Uutf has no dependency and is distributed under the ISC license. 36 | """ 37 | url { 38 | archive: "http://erratique.ch/software/uutf/releases/uutf-1.0.2.tbz" 39 | checksum: "a7c542405a39630c689a82bd7ef2292c" 40 | } 41 | -------------------------------------------------------------------------------- /server/esy.lock/overrides/opam__s__base_opam__c__v0.11.1_opam_override/files/base-v0.11.1.patch: -------------------------------------------------------------------------------- 1 | --- ./src/exn_stubs.c 2 | +++ ./src/exn_stubs.c 3 | @@ -1,8 +1,13 @@ 4 | #include 5 | 6 | extern int caml_backtrace_pos; 7 | +#ifndef _MSC_VER 8 | +#define UNUSED __attribute__((unused)) 9 | +#else 10 | +#define UNUSED 11 | +#endif 12 | 13 | -CAMLprim value Base_clear_caml_backtrace_pos (value __attribute__((unused)) unit) { 14 | +CAMLprim value Base_clear_caml_backtrace_pos (value UNUSED unit) { 15 | caml_backtrace_pos = 0; 16 | return Val_unit; 17 | } 18 | --- ./src/int_math_stubs.c 19 | +++ ./src/int_math_stubs.c 20 | @@ -5,6 +5,25 @@ 21 | #include 22 | #include 23 | 24 | +#if defined(_MSC_VER) 25 | +#include 26 | +#ifdef ARCH_SIXTYFOUR 27 | +#define __builtin_popcountll(x) __popcnt64((uint64_t)(x)) 28 | +static __inline uint32_t __builtin_clzll(uint64_t value) { 29 | + uint32_t leading_zero = 0; 30 | + _BitScanReverse64(&leading_zero, value); 31 | + return (63 - leading_zero); 32 | +} 33 | +#else 34 | +#define __builtin_popcount(x) __popcnt((unsigned int)(x)) 35 | +static __inline uint32_t __builtin_clz(uint32_t value) { 36 | + uint32_t leading_zero = 0; 37 | + _BitScanReverse(&leading_zero, value); 38 | + return (31 - leading_zero); 39 | +} 40 | +#endif /* ARCH_SIXTYFOUR */ 41 | +#endif /* defined(_MSC_VER) */ 42 | + 43 | static int64_t int_pow(int64_t base, int64_t exponent) { 44 | int64_t ret = 1; 45 | int64_t mul[4]; 46 | --- ./src/jbuild 47 | +++ ./src/jbuild 48 | @@ -65,7 +65,7 @@ 49 | (progn 50 | (with-stdout-to popcnt_test.c 51 | (echo "int main(int argc, char ** argv) { return __builtin_popcount(argc); }")) 52 | - (system "${CC} -mpopcnt -c popcnt_test.c 2> ${null} && \ 53 | + (bash "${CC} -mpopcnt -c popcnt_test.c 2> ${null} && \ 54 | echo '(-mpopcnt)' > ${@} || echo '()' > ${@}")))))) 55 | 56 | (ocamllex (hex_lexer)) 57 | -------------------------------------------------------------------------------- /server/esy.lock/overrides/opam__s__base_opam__c__v0.11.1_opam_override/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "build": [ 3 | [ 4 | "bash", 5 | "-c", 6 | "#{os == 'windows' ? 'patch -p1 < base-v0.11.1.patch' : 'true'}" 7 | ], 8 | [ 9 | "jbuilder", 10 | "build", 11 | "-p", 12 | "base", 13 | "-j", 14 | "4" 15 | ] 16 | ] 17 | } 18 | -------------------------------------------------------------------------------- /server/esy.lock/overrides/opam__s__dune_opam__c__1.8.2_opam_override/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "build": [ 3 | [ 4 | "ocaml", 5 | "bootstrap.ml" 6 | ], 7 | [ 8 | "./boot.exe", 9 | "--release", 10 | "-j", 11 | "4" 12 | ] 13 | ] 14 | } 15 | -------------------------------------------------------------------------------- /server/esy.lock/overrides/opam__s__merlin_extend_opam__c__0.3_opam_override/files/merlin-extend-winfix.patch: -------------------------------------------------------------------------------- 1 | --- ./extend_helper.ml 2 | +++ ./extend_helper.ml 3 | @@ -1,13 +1,6 @@ 4 | -(*pp cppo -V OCAML:`ocamlc -version` *) 5 | open Parsetree 6 | open Extend_protocol 7 | 8 | -#if OCAML_VERSION < (4, 3, 0) 9 | -# define CONST_STRING Asttypes.Const_string 10 | -#else 11 | -# define CONST_STRING Parsetree.Pconst_string 12 | -#endif 13 | - 14 | (** Default implementation for [Reader_def.print_outcome] using 15 | [Oprint] from compiler-libs *) 16 | let print_outcome_using_oprint ppf = function 17 | @@ -28,7 +21,7 @@ 18 | pstr_loc = Location.none; 19 | pstr_desc = Pstr_eval ({ 20 | pexp_loc = Location.none; 21 | - pexp_desc = Pexp_constant (CONST_STRING (msg, None)); 22 | + pexp_desc = Pexp_constant (Parsetree.Pconst_string (msg, None)); 23 | pexp_attributes = []; 24 | }, []); 25 | }] 26 | @@ -112,7 +105,7 @@ 27 | let msg = match payload with 28 | | PStr [{ 29 | pstr_desc = Pstr_eval ({ 30 | - pexp_desc = Pexp_constant (CONST_STRING (msg, _)); 31 | + pexp_desc = Pexp_constant (Parsetree.Pconst_string (msg, _)); 32 | }, _); 33 | }] -> msg 34 | | _ -> "Warning: extension produced an incorrect syntax-error node" 35 | -------------------------------------------------------------------------------- /server/esy.lock/overrides/opam__s__merlin_extend_opam__c__0.3_opam_override/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "build": [ 3 | [ 4 | "bash", 5 | "-c", 6 | "#{os == 'windows' ? 'patch -p1 < merlin-extend-winfix.patch' : 'true'}" 7 | ], 8 | [ 9 | "make" 10 | ] 11 | ] 12 | } 13 | -------------------------------------------------------------------------------- /server/esy.lock/overrides/opam__s__num_opam__c__1.1_opam_override/files/num-1.1.patch: -------------------------------------------------------------------------------- 1 | --- ./src/Makefile 2 | +++ ./src/Makefile 3 | @@ -80,7 +80,7 @@ 4 | ifeq "$(NATDYNLINK)" "true" 5 | TOINSTALL+=nums.cmxs 6 | endif 7 | ifeq "$(SUPPORTS_SHARED_LIBRARIES)" "true" 8 | -TOINSTALL_STUBS=dllnums.$(SO) 9 | +TOINSTALL_STUBS=dllnums$(EXT_DLL) 10 | else 11 | TOINSTALL_STUBS= 12 | @@ -112,7 +112,7 @@ 13 | endif 14 | 15 | clean: 16 | - rm -f *.cm[ioxta] *.cmx[as] *.cmti *.$(O) *.$(A) *.$(SO) 17 | + rm -f *.cm[ioxta] *.cmx[as] *.cmti *.$(O) *.$(A) *$(EXE_DLL) 18 | 19 | depend: 20 | $(OCAMLDEP) -slash *.mli *.ml > .depend 21 | -------------------------------------------------------------------------------- /server/esy.lock/overrides/opam__s__num_opam__c__1.1_opam_override/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "build": [ 3 | [ 4 | "bash", 5 | "-c", 6 | "#{os == 'windows' ? 'patch -p1 < num-1.1.patch' : 'true'}" 7 | ], 8 | [ 9 | "make" 10 | ] 11 | ], 12 | "install": [ 13 | [ 14 | "make", 15 | "findlib-install" 16 | ] 17 | ], 18 | "exportedEnv": { 19 | "CAML_LD_LIBRARY_PATH": { 20 | "val": "#{self.install / 'lib' / 'num' : $CAML_LD_LIBRARY_PATH}", 21 | "scope": "global" 22 | } 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /server/esy.lock/overrides/opam__s__ocamlbuild_opam__c__0.14.0_opam_override/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "build": [ 3 | [ 4 | "bash", 5 | "-c", 6 | "#{os == 'windows' ? 'patch -p1 < ocamlbuild-0.14.0.patch' : 'true'}" 7 | ], 8 | [ 9 | "make", 10 | "-f", 11 | "configure.make", 12 | "all", 13 | "OCAMLBUILD_PREFIX=#{self.install}", 14 | "OCAMLBUILD_BINDIR=#{self.bin}", 15 | "OCAMLBUILD_LIBDIR=#{self.lib}", 16 | "OCAMLBUILD_MANDIR=#{self.man}", 17 | "OCAMLBUILD_NATIVE=true", 18 | "OCAMLBUILD_NATIVE_TOOLS=true" 19 | ], 20 | [ 21 | "make", 22 | "check-if-preinstalled", 23 | "all", 24 | "#{os == 'windows' ? 'install' : 'opam-install'}" 25 | ] 26 | ] 27 | } 28 | -------------------------------------------------------------------------------- /server/esy.lock/overrides/opam__s__ocamlfind_opam__c__1.8.0_opam_override/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "build": [ 3 | [ 4 | "bash", 5 | "-c", 6 | "#{os == 'windows' ? 'patch -p1 < findlib-1.8.0.patch' : 'true'}" 7 | ], 8 | [ 9 | "./configure", 10 | "-bindir", 11 | "#{self.bin}", 12 | "-sitelib", 13 | "#{self.lib}", 14 | "-mandir", 15 | "#{self.man}", 16 | "-config", 17 | "#{self.lib}/findlib.conf", 18 | "-no-custom", 19 | "-no-topfind" 20 | ], 21 | [ 22 | "make", 23 | "all" 24 | ], 25 | [ 26 | "make", 27 | "opt" 28 | ] 29 | ], 30 | "install": [ 31 | [ 32 | "make", 33 | "install" 34 | ], 35 | [ 36 | "install", 37 | "-m", 38 | "0755", 39 | "ocaml-stub", 40 | "#{self.bin}/ocaml" 41 | ], 42 | [ 43 | "mkdir", 44 | "-p", 45 | "#{self.toplevel}" 46 | ], 47 | [ 48 | "install", 49 | "-m", 50 | "0644", 51 | "src/findlib/topfind", 52 | "#{self.toplevel}/topfind" 53 | ] 54 | ], 55 | "exportedEnv": { 56 | "OCAML_TOPLEVEL_PATH": { 57 | "val": "#{self.toplevel}", 58 | "scope": "global" 59 | } 60 | } 61 | } 62 | -------------------------------------------------------------------------------- /server/isomagic-todos.install: -------------------------------------------------------------------------------- 1 | lib: [ 2 | "/Users/jared/clone/apps/isomagic-todos/server/_esy/default/store/b/isomagic_todos-22f31068/install/default/lib/isomagic-todos/META" {"META"} 3 | "/Users/jared/clone/apps/isomagic-todos/server/_esy/default/store/b/isomagic_todos-22f31068/install/default/lib/isomagic-todos/dune-package" {"dune-package"} 4 | "/Users/jared/clone/apps/isomagic-todos/server/_esy/default/store/b/isomagic_todos-22f31068/install/default/lib/isomagic-todos/opam" {"opam"} 5 | ] 6 | bin: [ 7 | "/Users/jared/clone/apps/isomagic-todos/server/_esy/default/store/b/isomagic_todos-22f31068/install/default/bin/server" {"server"} 8 | ] 9 | -------------------------------------------------------------------------------- /server/isomagic-todos.opam: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jaredly/isomagic-todos/1ad477a9cefeea57e63b64b1f60f898baf76dac8/server/isomagic-todos.opam -------------------------------------------------------------------------------- /server/server/.merlin: -------------------------------------------------------------------------------- 1 | EXCLUDE_QUERY_DIR 2 | B /Users/jared/.esy/3___________________________________________________________________/i/belt-8ec1f6ae/lib/belt 3 | B /Users/jared/.esy/3___________________________________________________________________/i/ezjsonm-c252ee44/lib/ezjsonm 4 | B /Users/jared/.esy/3___________________________________________________________________/i/ocaml-4.6.10-1dc037cc/lib/ocaml 5 | B /Users/jared/.esy/3___________________________________________________________________/i/ocaml-4.6.10-1dc037cc/lib/ocaml/threads 6 | B /Users/jared/.esy/3___________________________________________________________________/i/opam__s__astring-opam__c__0.8.3-a2e7f011/lib/astring 7 | B /Users/jared/.esy/3___________________________________________________________________/i/opam__s__base-opam__c__v0.11.1-902ad087/lib/base 8 | B /Users/jared/.esy/3___________________________________________________________________/i/opam__s__base-opam__c__v0.11.1-902ad087/lib/base/caml 9 | B /Users/jared/.esy/3___________________________________________________________________/i/opam__s__base-opam__c__v0.11.1-902ad087/lib/base/shadow_stdlib 10 | B /Users/jared/.esy/3___________________________________________________________________/i/opam__s__base64-opam__c__2.3.0-bf76300f/lib/base64 11 | B /Users/jared/.esy/3___________________________________________________________________/i/opam__s__cohttp-opam__c__1.2.0-c683eb31/lib/cohttp 12 | B /Users/jared/.esy/3___________________________________________________________________/i/opam__s__cohttp_lwt-opam__c__1.2.0-d726ab72/lib/cohttp-lwt 13 | B /Users/jared/.esy/3___________________________________________________________________/i/opam__s__cohttp_lwt_unix-opam__c__1.2.0-162b0ed4/lib/cohttp-lwt-unix 14 | B /Users/jared/.esy/3___________________________________________________________________/i/opam__s__conduit-opam__c__1.3.0-2f25a23d/lib/conduit 15 | B /Users/jared/.esy/3___________________________________________________________________/i/opam__s__conduit_lwt-opam__c__1.3.0-f51d5f64/lib/conduit-lwt 16 | B /Users/jared/.esy/3___________________________________________________________________/i/opam__s__conduit_lwt_unix-opam__c__1.3.0-2ffe3ce8/lib/conduit-lwt-unix 17 | B /Users/jared/.esy/3___________________________________________________________________/i/opam__s__cstruct-opam__c__3.7.0-7261a4bb/lib/cstruct 18 | B /Users/jared/.esy/3___________________________________________________________________/i/opam__s__fieldslib-opam__c__v0.11.0-e278b921/lib/fieldslib 19 | B /Users/jared/.esy/3___________________________________________________________________/i/opam__s__fmt-opam__c__0.8.5-64e33b37/lib/fmt 20 | B /Users/jared/.esy/3___________________________________________________________________/i/opam__s__hex-opam__c__1.3.0-02a2da67/lib/hex 21 | B /Users/jared/.esy/3___________________________________________________________________/i/opam__s__ipaddr-opam__c__2.9.0-b1a7228d/lib/ipaddr 22 | B /Users/jared/.esy/3___________________________________________________________________/i/opam__s__ipaddr-opam__c__2.9.0-b1a7228d/lib/ipaddr/unix 23 | B /Users/jared/.esy/3___________________________________________________________________/i/opam__s__jsonm-opam__c__1.0.1-3945a8fe/lib/jsonm 24 | B /Users/jared/.esy/3___________________________________________________________________/i/opam__s__logs-opam__c__0.6.2-b3be181e/lib/logs 25 | B /Users/jared/.esy/3___________________________________________________________________/i/opam__s__lwt-opam__c__4.2.0-82b92000/lib/lwt 26 | B /Users/jared/.esy/3___________________________________________________________________/i/opam__s__lwt-opam__c__4.2.0-82b92000/lib/lwt/unix 27 | B /Users/jared/.esy/3___________________________________________________________________/i/opam__s__magic_mime-opam__c__1.1.1-2e9ad273/lib/magic-mime 28 | B /Users/jared/.esy/3___________________________________________________________________/i/opam__s__mmap-opam__c__1.0.2-14efb515/lib/mmap 29 | B /Users/jared/.esy/3___________________________________________________________________/i/opam__s__ocamlfind-opam__c__1.8.0-4f31610a/lib/bytes 30 | B /Users/jared/.esy/3___________________________________________________________________/i/opam__s__parsexp-opam__c__v0.11.0-10bd8cdc/lib/parsexp 31 | B /Users/jared/.esy/3___________________________________________________________________/i/opam__s__ppx__sexp__conv-opam__c__v0.11.2-89adb138/lib/ppx_sexp_conv/runtime-lib 32 | B /Users/jared/.esy/3___________________________________________________________________/i/opam__s__re-opam__c__1.8.0-f48f4142/lib/re 33 | B /Users/jared/.esy/3___________________________________________________________________/i/opam__s__re-opam__c__1.8.0-f48f4142/lib/re/posix 34 | B /Users/jared/.esy/3___________________________________________________________________/i/opam__s__result-opam__c__1.3-14b0e3fb/lib/result 35 | B /Users/jared/.esy/3___________________________________________________________________/i/opam__s__seq-opam__c__0.1-25472c8f/lib/seq 36 | B /Users/jared/.esy/3___________________________________________________________________/i/opam__s__sexplib-opam__c__v0.11.0-838b4094/lib/sexplib 37 | B /Users/jared/.esy/3___________________________________________________________________/i/opam__s__sexplib0-opam__c__v0.11.0-dbef4899/lib/sexplib0 38 | B /Users/jared/.esy/3___________________________________________________________________/i/opam__s__stringext-opam__c__1.5.0-d963eb25/lib/stringext 39 | B /Users/jared/.esy/3___________________________________________________________________/i/opam__s__uchar-opam__c__0.0.2-03db5b5e/lib/uchar 40 | B /Users/jared/.esy/3___________________________________________________________________/i/opam__s__uri-opam__c__2.2.0-f7d6a0d0/lib/uri 41 | B /Users/jared/.esy/3___________________________________________________________________/i/opam__s__uri-opam__c__2.2.0-f7d6a0d0/lib/uri/services 42 | B /Users/jared/.esy/3___________________________________________________________________/i/opam__s__uri-opam__c__2.2.0-f7d6a0d0/lib/uri/sexp 43 | B /Users/jared/.esy/3___________________________________________________________________/i/opam__s__uutf-opam__c__1.0.2-baf42320/lib/uutf 44 | B /Users/jared/clone/apps/isomagic-todos/server/_esy/default/store/i/isomagic_shared-b2f36703/lib/isomagic-shared 45 | B /Users/jared/clone/apps/isomagic-todos/server/_esy/default/store/i/isomagic_shared-b2f36703/lib/isomagic-shared/Serde 46 | B /Users/jared/clone/apps/isomagic-todos/server/_esy/default/store/i/isomagic_shared-b2f36703/lib/isomagic-shared/types 47 | B /Users/jared/clone/apps/isomagic-todos/server/_esy/default/store/b/isomagic_todos-22f31068/default/server/.main.eobjs/byte 48 | S /Users/jared/.esy/3___________________________________________________________________/i/belt-8ec1f6ae/lib/belt 49 | S /Users/jared/.esy/3___________________________________________________________________/i/ezjsonm-c252ee44/lib/ezjsonm 50 | S /Users/jared/.esy/3___________________________________________________________________/i/ocaml-4.6.10-1dc037cc/lib/ocaml 51 | S /Users/jared/.esy/3___________________________________________________________________/i/ocaml-4.6.10-1dc037cc/lib/ocaml/threads 52 | S /Users/jared/.esy/3___________________________________________________________________/i/opam__s__astring-opam__c__0.8.3-a2e7f011/lib/astring 53 | S /Users/jared/.esy/3___________________________________________________________________/i/opam__s__base-opam__c__v0.11.1-902ad087/lib/base 54 | S /Users/jared/.esy/3___________________________________________________________________/i/opam__s__base-opam__c__v0.11.1-902ad087/lib/base/caml 55 | S /Users/jared/.esy/3___________________________________________________________________/i/opam__s__base-opam__c__v0.11.1-902ad087/lib/base/shadow_stdlib 56 | S /Users/jared/.esy/3___________________________________________________________________/i/opam__s__base64-opam__c__2.3.0-bf76300f/lib/base64 57 | S /Users/jared/.esy/3___________________________________________________________________/i/opam__s__cohttp-opam__c__1.2.0-c683eb31/lib/cohttp 58 | S /Users/jared/.esy/3___________________________________________________________________/i/opam__s__cohttp_lwt-opam__c__1.2.0-d726ab72/lib/cohttp-lwt 59 | S /Users/jared/.esy/3___________________________________________________________________/i/opam__s__cohttp_lwt_unix-opam__c__1.2.0-162b0ed4/lib/cohttp-lwt-unix 60 | S /Users/jared/.esy/3___________________________________________________________________/i/opam__s__conduit-opam__c__1.3.0-2f25a23d/lib/conduit 61 | S /Users/jared/.esy/3___________________________________________________________________/i/opam__s__conduit_lwt-opam__c__1.3.0-f51d5f64/lib/conduit-lwt 62 | S /Users/jared/.esy/3___________________________________________________________________/i/opam__s__conduit_lwt_unix-opam__c__1.3.0-2ffe3ce8/lib/conduit-lwt-unix 63 | S /Users/jared/.esy/3___________________________________________________________________/i/opam__s__cstruct-opam__c__3.7.0-7261a4bb/lib/cstruct 64 | S /Users/jared/.esy/3___________________________________________________________________/i/opam__s__fieldslib-opam__c__v0.11.0-e278b921/lib/fieldslib 65 | S /Users/jared/.esy/3___________________________________________________________________/i/opam__s__fmt-opam__c__0.8.5-64e33b37/lib/fmt 66 | S /Users/jared/.esy/3___________________________________________________________________/i/opam__s__hex-opam__c__1.3.0-02a2da67/lib/hex 67 | S /Users/jared/.esy/3___________________________________________________________________/i/opam__s__ipaddr-opam__c__2.9.0-b1a7228d/lib/ipaddr 68 | S /Users/jared/.esy/3___________________________________________________________________/i/opam__s__ipaddr-opam__c__2.9.0-b1a7228d/lib/ipaddr/unix 69 | S /Users/jared/.esy/3___________________________________________________________________/i/opam__s__jsonm-opam__c__1.0.1-3945a8fe/lib/jsonm 70 | S /Users/jared/.esy/3___________________________________________________________________/i/opam__s__logs-opam__c__0.6.2-b3be181e/lib/logs 71 | S /Users/jared/.esy/3___________________________________________________________________/i/opam__s__lwt-opam__c__4.2.0-82b92000/lib/lwt 72 | S /Users/jared/.esy/3___________________________________________________________________/i/opam__s__lwt-opam__c__4.2.0-82b92000/lib/lwt/unix 73 | S /Users/jared/.esy/3___________________________________________________________________/i/opam__s__magic_mime-opam__c__1.1.1-2e9ad273/lib/magic-mime 74 | S /Users/jared/.esy/3___________________________________________________________________/i/opam__s__mmap-opam__c__1.0.2-14efb515/lib/mmap 75 | S /Users/jared/.esy/3___________________________________________________________________/i/opam__s__ocamlfind-opam__c__1.8.0-4f31610a/lib/bytes 76 | S /Users/jared/.esy/3___________________________________________________________________/i/opam__s__parsexp-opam__c__v0.11.0-10bd8cdc/lib/parsexp 77 | S /Users/jared/.esy/3___________________________________________________________________/i/opam__s__ppx__sexp__conv-opam__c__v0.11.2-89adb138/lib/ppx_sexp_conv/runtime-lib 78 | S /Users/jared/.esy/3___________________________________________________________________/i/opam__s__re-opam__c__1.8.0-f48f4142/lib/re 79 | S /Users/jared/.esy/3___________________________________________________________________/i/opam__s__re-opam__c__1.8.0-f48f4142/lib/re/posix 80 | S /Users/jared/.esy/3___________________________________________________________________/i/opam__s__result-opam__c__1.3-14b0e3fb/lib/result 81 | S /Users/jared/.esy/3___________________________________________________________________/i/opam__s__seq-opam__c__0.1-25472c8f/lib/seq 82 | S /Users/jared/.esy/3___________________________________________________________________/i/opam__s__sexplib-opam__c__v0.11.0-838b4094/lib/sexplib 83 | S /Users/jared/.esy/3___________________________________________________________________/i/opam__s__sexplib0-opam__c__v0.11.0-dbef4899/lib/sexplib0 84 | S /Users/jared/.esy/3___________________________________________________________________/i/opam__s__stringext-opam__c__1.5.0-d963eb25/lib/stringext 85 | S /Users/jared/.esy/3___________________________________________________________________/i/opam__s__uchar-opam__c__0.0.2-03db5b5e/lib/uchar 86 | S /Users/jared/.esy/3___________________________________________________________________/i/opam__s__uri-opam__c__2.2.0-f7d6a0d0/lib/uri 87 | S /Users/jared/.esy/3___________________________________________________________________/i/opam__s__uri-opam__c__2.2.0-f7d6a0d0/lib/uri/services 88 | S /Users/jared/.esy/3___________________________________________________________________/i/opam__s__uri-opam__c__2.2.0-f7d6a0d0/lib/uri/sexp 89 | S /Users/jared/.esy/3___________________________________________________________________/i/opam__s__uutf-opam__c__1.0.2-baf42320/lib/uutf 90 | S /Users/jared/clone/apps/isomagic-todos/server/_esy/default/store/i/isomagic_shared-b2f36703/lib/isomagic-shared 91 | S /Users/jared/clone/apps/isomagic-todos/server/_esy/default/store/i/isomagic_shared-b2f36703/lib/isomagic-shared/Serde 92 | S /Users/jared/clone/apps/isomagic-todos/server/_esy/default/store/i/isomagic_shared-b2f36703/lib/isomagic-shared/types 93 | S . 94 | FLG -ppx '/Users/jared/clone/apps/isomagic-todos/server/_esy/default/store/b/isomagic_todos-22f31068/default/.ppx/725e931e634fa304d75f70b7d5d3947b/ppx.exe --as-ppx' 95 | FLG -w -40 96 | -------------------------------------------------------------------------------- /server/server/Ez2.ml: -------------------------------------------------------------------------------- 1 | type value = 2 | [ `Null 3 | | `Bool of bool 4 | | `Float of float 5 | | `String of string 6 | | `A of value list 7 | | `O of (string * value) list ] 8 | 9 | type t = 10 | [ `A of value list 11 | | `O of (string * value) list ] 12 | 13 | let value: t -> value = fun t -> (t :> value) 14 | 15 | exception Escape of ((int * int) * (int * int)) * Jsonm.error 16 | 17 | let json_of_src src = 18 | let d = Jsonm.decoder src in 19 | let dec () = match Jsonm.decode d with 20 | | `Lexeme l -> l 21 | | `Error e -> raise (Escape (Jsonm.decoded_range d, e)) 22 | | `End 23 | | `Await -> assert false 24 | in 25 | let rec value v k = match v with 26 | | `Os -> obj [] k 27 | | `As -> arr [] k 28 | | `Null 29 | | `Bool _ 30 | | `String _ 31 | | `Float _ as v -> k v 32 | | _ -> assert false 33 | and arr vs k = match dec () with 34 | | `Ae -> k (`A (List.rev vs)) 35 | | v -> value v (fun v -> arr (v :: vs) k) 36 | and obj ms k = match dec () with 37 | | `Oe -> k (`O (List.rev ms)) 38 | | `Name n -> value (dec ()) (fun v -> obj ((n, v) :: ms) k) 39 | | _ -> assert false 40 | in 41 | try `JSON (value (dec ()) (fun x -> x)) 42 | with Escape (r, e) -> `Error (r, e) 43 | 44 | let to_dst ?(minify=true) dst json = 45 | let enc e l = ignore (Jsonm.encode e (`Lexeme l)) in 46 | let rec t v k e = match v with 47 | | `A vs -> arr vs k e 48 | | `O ms -> obj ms k e 49 | and value v k e = match v with 50 | | `Null | `Bool _ | `Float _ | `String _ as v -> enc e v; k e 51 | | #t as x -> t (x :> t) k e 52 | and arr vs k e = enc e `As; arr_vs vs k e 53 | and arr_vs vs k e = match vs with 54 | | v :: vs' -> value v (arr_vs vs' k) e 55 | | [] -> enc e `Ae; k e 56 | and obj ms k e = enc e `Os; obj_ms ms k e 57 | and obj_ms ms k e = match ms with 58 | | (n, v) :: ms -> enc e (`Name n); value v (obj_ms ms k) e 59 | | [] -> enc e `Oe; k e 60 | in 61 | let e = Jsonm.encoder ~minify dst in 62 | let finish e = ignore (Jsonm.encode e `End) in 63 | value json finish e 64 | 65 | let to_buffer ?minify buf json = 66 | to_dst ?minify (`Buffer buf) json 67 | 68 | let to_string ?minify json = 69 | let buf = Buffer.create 1024 in 70 | to_buffer ?minify buf json; 71 | Buffer.contents buf 72 | 73 | let to_channel ?minify oc json = 74 | to_dst ?minify (`Channel oc) json 75 | 76 | exception Parse_error of value * string 77 | 78 | let parse_error t fmt = 79 | Printf.kprintf (fun msg -> 80 | raise (Parse_error (t, msg)) 81 | ) fmt 82 | 83 | let wrap t = `A [t] 84 | 85 | let unwrap = function 86 | | `A [t] -> t 87 | | v -> parse_error (v :> value) "Not unwrappable" 88 | 89 | let string_of_error error = 90 | Jsonm.pp_error Format.str_formatter error; 91 | Format.flush_str_formatter () 92 | 93 | let from_src src = 94 | match json_of_src src with 95 | | `JSON t -> t 96 | | `Error (_,e) -> parse_error `Null "JSON.of_buffer %s" (string_of_error e) 97 | 98 | let from_string str = from_src (`String str) 99 | 100 | let from_channel chan = from_src (`Channel chan) -------------------------------------------------------------------------------- /server/server/Main.re: -------------------------------------------------------------------------------- 1 | open All_types.Types; 2 | 3 | type appState = { 4 | nextId: int, 5 | todos 6 | }; 7 | 8 | let appState = ref({nextId: 1, todos: [{id: 0, text: "Add some things to do", completed: None}]}); 9 | 10 | Server.get_prefix("/", Server.serveStatic("../public")); 11 | 12 | module type E = {}; 13 | 14 | let _: list((module E)) = [ 15 | (module 16 | Server.Get( 17 | SApi.Endpoints.Todos, 18 | { 19 | let handle = (req) => appState^.todos; 20 | } 21 | )), 22 | (module 23 | Server.Post( 24 | SApi.Endpoints.AddTodo, 25 | { 26 | let handle = (req, text) => { 27 | let id = appState^.nextId; 28 | let todo = {completed: None, id, text}; 29 | let todos = List.append(appState^.todos, [todo]); 30 | appState := {nextId: id + 1, todos}; 31 | todos; 32 | }; 33 | } 34 | )), 35 | (module 36 | Server.Post( 37 | SApi.Endpoints.RemoveTodo, 38 | { 39 | let handle = (req, id) => { 40 | let todos = List.filter((item) => item.id !== id, appState^.todos); 41 | appState := {...appState^, todos}; 42 | todos; 43 | }; 44 | } 45 | )), 46 | (module 47 | Server.Post( 48 | SApi.Endpoints.UpdateTodo, 49 | { 50 | let handle = (req, data) => { 51 | let todos = List.map((item) => item.id === data.id ? data : item, appState^.todos); 52 | appState := {...appState^, todos}; 53 | todos; 54 | }; 55 | } 56 | )) 57 | ]; /* fallback */ 58 | 59 | Server.get_prefix( 60 | "/", 61 | (_, _, _, _) => 62 | Cohttp_lwt_unix.Server.respond_string(~status=`Not_found, ~body="Welcome to never land", ()) 63 | ); 64 | 65 | Server.listen(8000); 66 | -------------------------------------------------------------------------------- /server/server/Server.re: -------------------------------------------------------------------------------- 1 | open Lwt; 2 | 3 | open Cohttp; 4 | 5 | open Cohttp_lwt_unix; 6 | 7 | module CoServer = Cohttp_lwt_unix.Server; 8 | 9 | let json = (data) => { 10 | let body = Ezjsonm.value_to_string(data); 11 | module H = Cohttp.Header; 12 | let headers = H.init(); 13 | let headers = H.add(headers, "content-type", "application/json"); 14 | CoServer.respond_string(~headers=headers, ~status=`OK, ~body=body, ()); 15 | }; 16 | 17 | let serveStatic = (base, req, body, path, next) => { 18 | let fname = Filename.concat(base, path); 19 | if (Sys.file_exists(fname)) { 20 | if (Sys.is_directory(fname)) { 21 | if (Sys.file_exists(Filename.concat(fname, "index.html"))) { 22 | CoServer.respond_file(~fname=Filename.concat(fname, "index.html"), ()); 23 | } else { 24 | next 25 | () /* TODO do a directory listing maybe */; 26 | }; 27 | } else { 28 | CoServer.respond_file(~fname=fname, ()); 29 | }; 30 | } else if (Sys.file_exists(fname ++ ".html")) { 31 | CoServer.respond_file(~fname=fname ++ ".html", ()); 32 | } else { 33 | next(); 34 | }; 35 | }; 36 | 37 | let handlers = ref([]); 38 | 39 | let all = (path, fn) => 40 | handlers := 41 | [ 42 | (req, body, path', next) => 43 | if (path == path') { 44 | fn(req, body, next); 45 | } else { 46 | next(); 47 | }, 48 | ...handlers^ 49 | ]; 50 | 51 | let handle = (meth, path, fn) => 52 | handlers := 53 | [ 54 | (req, body, path', next) => 55 | if (meth == Request.meth(req) && path == path') { 56 | fn(req, body, next); 57 | } else { 58 | next(); 59 | }, 60 | ...handlers^ 61 | ]; 62 | 63 | let handle_prefix = (meth, path, fn) => { 64 | let size = String.length(path); 65 | handlers:= 66 | [ 67 | (req, body, path', next) => { 68 | let pathLen = String.length(path'); 69 | if (meth == Request.meth(req) && pathLen >= size && String.sub(path', 0, size) == path) { 70 | fn(req, body, String.sub(path', size, pathLen - size), next); 71 | } else { 72 | next(); 73 | }; 74 | }, 75 | ...handlers^ 76 | ]; 77 | }; 78 | 79 | let maybe_parse = (text) => 80 | try (Ok( 81 | Ezjsonm.value_from_string(text) 82 | )) { 83 | | _ => Error("Unable to parse") 84 | }; 85 | 86 | let get = handle(`GET); 87 | 88 | let post = handle(`POST); 89 | 90 | let delete = handle(`DELETE); 91 | 92 | let get_prefix = handle_prefix(`GET); 93 | 94 | let post_prefix = handle_prefix(`POST); 95 | 96 | let delete_prefix = handle_prefix(`DELETE); 97 | 98 | module Get = (Config: SApi.Get, Handler: {let handle: Cohttp.Request.t => Config.Response.t;}) => { 99 | handle(`GET, Config.path, (req, _, _) => { 100 | json(Config.Response.serialize(Handler.handle(req))) 101 | }); 102 | }; 103 | 104 | module Await = { 105 | let let_ = (value, ~f) => Lwt.bind(value, f); 106 | let map = (value, ~f) => Lwt.map(f, value); 107 | }; 108 | 109 | module Try = { 110 | module Double = { 111 | let let_ = (value, ~f) => switch value { 112 | | Error(error) => error 113 | | Ok(v) => f(v) 114 | } 115 | }; 116 | let let_ = (value, ~f) => switch value { 117 | | Error(error) => Error(error) 118 | | Ok(v) => f(v) 119 | }; 120 | let try_ = (value, ~f) => switch value { 121 | | Ok(v) => Ok(v) 122 | | Error(error) => f(error) 123 | } 124 | }; 125 | 126 | module Post = 127 | ( 128 | Config: SApi.Post, 129 | Handler: {let handle: (Cohttp.Request.t, Config.Request.t) => Config.Response.t;} 130 | ) => { 131 | handle( 132 | `POST, 133 | Config.path, 134 | (req, body, _) => { 135 | let%Await body = Cohttp_lwt.Body.to_string(body); 136 | let m = { 137 | let%Try data = try%Try (maybe_parse(body)) { 138 | | message => Error(CoServer.respond_string(~status=`Bad_request, ~body="", ())) 139 | }; 140 | let%Try data = try%Try (Config.Request.deserialize(data)) { 141 | | messages => Error(CoServer.respond_string(~status=`Bad_request, ~body="", ())) 142 | }; 143 | Ok(json(Config.Response.serialize(Handler.handle(req, data)))) 144 | }; 145 | switch m { 146 | | Ok(m) => m 147 | | Error(m) => m 148 | } 149 | } 150 | ); 151 | }; 152 | 153 | let server = (port) => { 154 | let handlers = List.rev(handlers^); 155 | let rec next = (req, body, path, items, ()) => { 156 | switch items { 157 | | [] => CoServer.respond_string(~status=`Not_found, ~body="Not found", ()) 158 | | [fn, ...rest] => fn(req, body, path, next(req, body, path, rest)) 159 | }; 160 | }; 161 | let callback = (_conn, req, body) => { 162 | let path = req |> Request.uri |> Uri.path; 163 | next(req, body, path, handlers, ()); 164 | }; 165 | CoServer.create(~mode=`TCP(`Port(port)), CoServer.make(~callback=callback, ())); 166 | }; 167 | 168 | let listen = (port) => { 169 | Printf.printf("Listening at http://localhost:%d", port); 170 | print_newline(); 171 | ignore(Lwt_main.run(server(port))); 172 | }; 173 | -------------------------------------------------------------------------------- /server/server/dune: -------------------------------------------------------------------------------- 1 | (executable 2 | (name main) 3 | (public_name server) 4 | (preprocess (pps let-anything-esy.ppx)) 5 | (libraries lwt cohttp cohttp.lwt isomagic-shared isomagic-shared.types 6 | )) 7 | -------------------------------------------------------------------------------- /src/client/Api.re: -------------------------------------------------------------------------------- 1 | open! Shared.Types; 2 | 3 | let post: (string, Js.Json.t, Js.Json.t => unit) => unit = [%bs.raw 4 | {| 5 | function (path, json, onDone) { 6 | fetch(path, {body: JSON.stringify(json), method: 'POST', headers: {'Content-Type': 'application/json'}}) 7 | .then(res => res.json()) 8 | .then(res => onDone(res), err => console.error('failed', err)) 9 | } 10 | |} 11 | ]; 12 | 13 | module Post = (Config: SApi.Post) => { 14 | let run = (body, onDone) => 15 | post(Config.path, Config.Request.serialize(body), data => 16 | switch (Config.Response.deserialize(data)) { 17 | | Error(error) => Js.log("Failed to parse data") 18 | | Ok(result) => 19 | // Js.log(Config.Response.(result)); 20 | onDone(result) 21 | } 22 | ); 23 | }; 24 | 25 | module RemoveTodo = Post(SApi.Endpoints.RemoveTodo); 26 | 27 | module AddTodo = Post(SApi.Endpoints.AddTodo); 28 | 29 | module UpdateTodo = Post(SApi.Endpoints.UpdateTodo); -------------------------------------------------------------------------------- /src/client/App.re: -------------------------------------------------------------------------------- 1 | open! Types; 2 | 3 | let str = ReasonReact.string; 4 | 5 | // let style = ReactDOMRe.Style.make; 6 | let todoItemStyle = Css.( 7 | style([ 8 | backgroundColor(white), 9 | alignItems(`center), 10 | cursor(`pointer), 11 | flexDirection(`row), 12 | padding(px(10)), 13 | hover([backgroundColor(hex("eee"))]), 14 | ]) 15 | ); 16 | 17 | module TodoItem = { 18 | let component = ReasonReact.statelessComponent("Todo"); 19 | let make = (~item, ~onToggle, ~onEdit, _) => { 20 | ...component, 21 | render: _ => 22 |
25 | 30 |
31 | 32 |
, 33 | }; 34 | }; 35 | 36 | let jsNow: unit => int = [%bs.raw "function(unit) {return Date.now()}"]; 37 | 38 | let toggleItem = (item, update) => { 39 | let item = 40 | item.completed === None ? 41 | {...item, completed: Some(jsNow())} : {...item, completed: None}; 42 | Api.UpdateTodo.run(item, update); 43 | }; 44 | 45 | let editItem = (item, text, update) => 46 | if (text == "") { 47 | Api.RemoveTodo.run(item.id, update); 48 | } else { 49 | text !== item.text ? Api.UpdateTodo.run({...item, text}, update) : (); 50 | }; 51 | 52 | module Todos = { 53 | let component = ReasonReact.reducerComponent("Todos"); 54 | let url = "/todos"; 55 | type state = todos; 56 | type action = state; 57 | module Data = Serde.Modules.Todos; 58 | let make = (~data, _) => { 59 | ...component, 60 | initialState: () => data, 61 | reducer: (action, state) => ReasonReact.Update(action), 62 | render: ({state, send}) => { 63 |
64 | 65 | {List.map( 66 | item => 67 | string_of_int} 70 | onToggle={_ => toggleItem(item, send)} 71 | onEdit={text => editItem(item, text, send)} 72 | />, 73 | state, 74 | ) 75 | |> Array.of_list 76 | |> ReasonReact.array} 77 |
78 | Api.AddTodo.run(text, send)} 82 | placeholder="Add an item" 83 | clear=true 84 | /> 85 |
86 |
; 87 | // let updateTodos = update((todos, _) => ReasonReact.Update(todos)); 88 | }, 89 | }; 90 | }; 91 | 92 | module LoadedTodos = Loader.F(Todos); 93 | 94 | module Page = { 95 | let component = ReasonReact.statelessComponent("Page"); 96 | let make = _children => { 97 | ...component, 98 | render: _ => 99 |
103 |
111 | {str("A Nice Todo List")} 112 |
113 | 114 |
, 115 | }; 116 | }; 117 | 118 | Devtools.register(); 119 | 120 | ReactDOMRe.renderToElementWithId(, "index"); -------------------------------------------------------------------------------- /src/client/Devtools.re: -------------------------------------------------------------------------------- 1 | 2 | /* let x = 10; */ 3 | 4 | let register = () => { 5 | [%bs.raw{| (() => { 6 | 7 | window.devtoolsFormatters = window.devtoolsFormatters || []; 8 | window.devtoolsFormatters.push({ 9 | header: function(value) { 10 | if (!value.$bs) return null 11 | switch (value.$bs) { 12 | case "list": 13 | return ["div", {"style": "background-color: #eef"}, 14 | "List(", value.items.length, ")"] 15 | case "optional": 16 | if (value.empty) return ["div", {}, "None"] 17 | return ["div", {}, "Some(", ["object", {"object": value.value}], ")"] 18 | case "record": 19 | return ["div", {style: "background-color: #efe"}, value.type, ["span", {style: "font-style: italic"}, " record"]] 20 | case "variant": 21 | return ["div", {}, ["span", {style: "font-style: italic"}, value.type, ": "], value.constructor] 22 | } 23 | return null 24 | }, 25 | hasBody: function(value) { 26 | return value.$bs === "list" || value.$bs === "record" || (value.$bs === "variant" && value.arguments.length) 27 | }, 28 | body: function(value) { 29 | switch (value.$bs) { 30 | case "list": 31 | return ["div", {style: "padding-left: 20px"}].concat(value.items.map(item => ["div", {}, ["object", {"object": item}]])) 32 | case "record": 33 | return ["div", {style: "padding-left: 20px"}].concat(Object.keys(value.attributes).map(attr => { 34 | return ["div", {}, attr, ": ", ["object", {"object": value.attributes[attr]}]] 35 | })) 36 | case "variant": 37 | return ["div", {style: "padding-left: 20px"}].concat(value.arguments.map(arg => [ 38 | "div", 39 | {}, 40 | ["object", {"object": arg}] 41 | ])) 42 | default:return null 43 | } 44 | } 45 | }) 46 | })() 47 | |}]; 48 | 49 | }; -------------------------------------------------------------------------------- /src/client/DevtoolsDemo.re: -------------------------------------------------------------------------------- 1 | Js.log("Hello, BuckleScript and Reason!"); 2 | 3 | type sum = 4 | | One(int) 5 | | Two(float, string) 6 | | Three; 7 | 8 | type my_int = int; 9 | 10 | type string_list = list(string); 11 | 12 | type nested = {name: string}; 13 | 14 | type jumbo = { 15 | str: string, 16 | num: int, 17 | float, 18 | my_int, 19 | string_list, 20 | nums: array(int), 21 | nested, 22 | cross_module: Lib.person, 23 | sum: list(option(sum)) 24 | }; 25 | 26 | Devtools.register(); 27 | 28 | let value = { 29 | str: "str", 30 | num: 10, 31 | float: 5.2, 32 | my_int: 3, 33 | string_list: ["one", "two", "threee"], 34 | nums: [|1, 2, 3|], 35 | nested: { 36 | name: "Me" 37 | }, 38 | cross_module: { 39 | Lib.name: "Reason" 40 | }, 41 | sum: [None, None, Some(Three), Some(One(2)), Some(Two(4.5, "hi"))] 42 | }; 43 | 44 | Js.log((value)); 45 | -------------------------------------------------------------------------------- /src/client/Editor.re: -------------------------------------------------------------------------------- 1 | let str = ReasonReact.string; 2 | 3 | let style = ReactDOMRe.Style.make; 4 | 5 | let evtValue = event => 6 | ReactDOMRe.domElementToObj(ReactEventRe.Form.target(event))##value; 7 | 8 | type retainedProps = {value: string}; 9 | 10 | let component = ReasonReact.reducerComponentWithRetainedProps("Editor"); 11 | 12 | type state = option(string); 13 | 14 | let make = (~value, ~onChange, ~placeholder, ~className="", ~clear=false, _) => { 15 | ...component, 16 | initialState: () => None, 17 | retainedProps: { 18 | value: value, 19 | }, 20 | willReceiveProps: ({state, retainedProps}) => 21 | switch (state) { 22 | | None => None 23 | | Some(text) => 24 | retainedProps.value === value && value !== text ? Some(text) : None 25 | }, 26 | reducer: (action, state) => ReasonReact.Update(action), 27 | render: ({state, send}) => 28 | switch (state) { 29 | | None => 30 |
{ 34 | ReactEventRe.Mouse.stopPropagation(evt); 35 | send(Some(value)); 36 | }}> 37 | {str(value === "" ? placeholder : value)} 38 |
39 | | Some(text) => 40 | send(Some(evtValue(evt)))} 46 | onClick={evt => ReactEventRe.Mouse.stopPropagation(evt)} 47 | onKeyDown={evt => 48 | switch (ReactEventRe.Keyboard.key(evt)) { 49 | | "Enter" => 50 | if (text == value) { 51 | send(None); 52 | } else { 53 | onChange(text); 54 | if (clear) { 55 | send(Some(value)); 56 | }; 57 | } 58 | | _ => () 59 | } 60 | } 61 | style={style( 62 | ~fontFamily="inherit", 63 | ~flex="1", 64 | ~fontSize="inherit", 65 | (), 66 | )} 67 | onBlur={_ => 68 | if (text != value) { 69 | onChange(text); /* TODO I want a different state value that is "waiting" */ 70 | if (clear) { 71 | send(Some(value)); 72 | }; 73 | } else { 74 | send(None); 75 | } 76 | } 77 | /> 78 | }, 79 | }; -------------------------------------------------------------------------------- /src/client/Loader.re: -------------------------------------------------------------------------------- 1 | module type Config = { 2 | module Data: SApi.SerdeType; 3 | type state; 4 | type action; 5 | let url: string; 6 | let make: 7 | (~data: Data.t, array(int)) => 8 | ReasonReact.componentSpec( 9 | state, 10 | state, 11 | ReasonReact.noRetainedProps, 12 | ReasonReact.noRetainedProps, 13 | action, 14 | ); 15 | }; 16 | 17 | let str = ReasonReact.string; 18 | 19 | let style = ReactDOMRe.Style.make; 20 | 21 | let fetchJson: (string, Js.Json.t => unit) => unit = [%bs.raw 22 | {| function (url, fn) { 23 | fetch(url).then(res => res.json()).then(fn) 24 | } |} 25 | ]; 26 | 27 | module F = (Config: Config) => { 28 | type state = 29 | | Loading 30 | | Error(string) 31 | | Loaded(Config.Data.t); 32 | let component = ReasonReact.reducerComponent("Loader"); 33 | let make = _children => { 34 | ...component, 35 | initialState: () => Loading, 36 | reducer: (action, state) => ReasonReact.Update(action), 37 | didMount: ({send}) => { 38 | fetchJson(Config.url, json => 39 | switch (Config.Data.deserialize(json)) { 40 | | Error(_error) => Js.log2("Failed to load", _error) 41 | | Ok(data) => send(Loaded(data)) 42 | } 43 | ); 44 | }, 45 | render: self => 46 | switch (self.state) { 47 | | Loading => 48 |
55 | {str("Loading")} 56 |
57 | | Error(text) =>
{str("Error")} {str(text)}
58 | | Loaded(data) => 59 | }, 60 | }; 61 | }; -------------------------------------------------------------------------------- /src/client/Serde.re: -------------------------------------------------------------------------------- 1 | [@ocaml.warning "-34"]; 2 | open LockedTypes; 3 | type target = Js.Json.t; 4 | module Version1 = { 5 | open Types1; 6 | let rec deserialize_Types____id: 7 | Js.Json.t => Belt.Result.t(_Types__id, list(string)) = 8 | value => 9 | ( 10 | number => 11 | switch (Js.Json.classify(number)) { 12 | | JSONNumber(number) => Belt.Result.Ok(int_of_float(number)) 13 | | _ => Error(["Expected a float"]) 14 | } 15 | )( 16 | value, 17 | ) 18 | and deserialize_Types____text: 19 | Js.Json.t => Belt.Result.t(_Types__text, list(string)) = 20 | value => 21 | ( 22 | string => 23 | switch (Js.Json.classify(string)) { 24 | | JSONString(string) => Belt.Result.Ok(string) 25 | | _ => Error(["expected a string"]) 26 | } 27 | )( 28 | value, 29 | ) 30 | and deserialize_Types____todo: 31 | Js.Json.t => Belt.Result.t(_Types__todo, list(string)) = 32 | record => 33 | switch (Js.Json.classify(record)) { 34 | | JSONObject(dict) => 35 | let inner = attr_completed => { 36 | let inner = attr_id => { 37 | let inner = attr_text => 38 | Belt.Result.Ok( 39 | {text: attr_text, id: attr_id, completed: attr_completed}: _Types__todo, 40 | ); 41 | switch (Js.Dict.get(dict, "text")) { 42 | | None => Belt.Result.Error(["No attribute 'text'"]) 43 | | Some(json) => 44 | switch (deserialize_Types____text(json)) { 45 | | Belt.Result.Error(error) => 46 | Belt.Result.Error(["attribute 'text'", ...error]) 47 | | Ok(data) => inner(data) 48 | } 49 | }; 50 | }; 51 | switch (Js.Dict.get(dict, "id")) { 52 | | None => Belt.Result.Error(["No attribute 'id'"]) 53 | | Some(json) => 54 | switch (deserialize_Types____id(json)) { 55 | | Belt.Result.Error(error) => 56 | Belt.Result.Error(["attribute 'id'", ...error]) 57 | | Ok(data) => inner(data) 58 | } 59 | }; 60 | }; 61 | switch (Js.Dict.get(dict, "completed")) { 62 | | None => inner(None) 63 | | Some(json) => 64 | switch ( 65 | ( 66 | ( 67 | (transformer, option) => 68 | switch (Js.Json.classify(option)) { 69 | | JSONNull => Belt.Result.Ok(None) 70 | | _ => 71 | switch (transformer(option)) { 72 | | Belt.Result.Error(error) => 73 | Belt.Result.Error(["optional value", ...error]) 74 | | Ok(value) => Ok(Some(value)) 75 | } 76 | } 77 | )( 78 | number => 79 | switch (Js.Json.classify(number)) { 80 | | JSONNumber(number) => Belt.Result.Ok(int_of_float(number)) 81 | | _ => Error(["Expected a float"]) 82 | } 83 | ) 84 | )( 85 | json, 86 | ) 87 | ) { 88 | | Belt.Result.Error(error) => 89 | Belt.Result.Error(["attribute 'completed'", ...error]) 90 | | Ok(data) => inner(data) 91 | } 92 | }; 93 | | _ => Belt.Result.Error(["Expected an object"]) 94 | } 95 | and deserialize_Types____todos: 96 | Js.Json.t => Belt.Result.t(_Types__todos, list(string)) = 97 | value => 98 | ( 99 | list => 100 | switch (Js.Json.classify(list)) { 101 | | JSONArray(items) => 102 | let transformer = deserialize_Types____todo; 103 | let rec loop = (i, collected, items) => 104 | switch (items) { 105 | | [] => Belt.Result.Ok(Belt.List.reverse(collected)) 106 | | [one, ...rest] => 107 | switch (transformer(one)) { 108 | | Belt.Result.Error(error) => 109 | Belt.Result.Error([ 110 | "list element " ++ string_of_int(i), 111 | ...error, 112 | ]) 113 | | Belt.Result.Ok(value) => 114 | loop(i + 1, [value, ...collected], rest) 115 | } 116 | }; 117 | loop(0, [], Belt.List.fromArray(items)); 118 | | _ => Belt.Result.Error(["expected an array"]) 119 | } 120 | )( 121 | value, 122 | ) 123 | and serialize_Types____id: _Types__id => Js.Json.t = 124 | value => (int => Js.Json.number(float_of_int(int)))(value) 125 | and serialize_Types____text: _Types__text => Js.Json.t = 126 | value => Js.Json.string(value) 127 | and serialize_Types____todo: _Types__todo => Js.Json.t = 128 | record => 129 | Js.Json.object_( 130 | Js.Dict.fromArray([| 131 | ("text", serialize_Types____text(record.text)), 132 | ("id", serialize_Types____id(record.id)), 133 | ( 134 | "completed", 135 | ( 136 | ( 137 | transformer => 138 | fun 139 | | Some(inner) => transformer(inner) 140 | | None => Js.Json.null 141 | )( 142 | int => 143 | Js.Json.number(float_of_int(int)) 144 | ) 145 | )( 146 | record.completed, 147 | ), 148 | ), 149 | |]), 150 | ) 151 | and serialize_Types____todos: _Types__todos => Js.Json.t = 152 | value => 153 | ( 154 | list => 155 | Js.Json.array( 156 | Belt.List.toArray(Belt.List.map(list, serialize_Types____todo)), 157 | ) 158 | )( 159 | value, 160 | ); 161 | }; 162 | module Current = Version1; 163 | let parseVersion = json => 164 | switch (Js.Json.classify(json)) { 165 | | JSONObject(dict) => 166 | switch (Js.Dict.get(dict, "$schemaVersion")) { 167 | | Some(schemaVersion) => 168 | switch (Js.Json.classify(schemaVersion)) { 169 | | JSONNumber(version) => 170 | [@implicit_arity] Belt.Result.Ok(int_of_float(version), json) 171 | | _ => Belt.Result.Error("Invalid $schemaVersion") 172 | } 173 | | None => Belt.Result.Error("No $schemaVersion present") 174 | } 175 | | JSONArray([|version, payload|]) => 176 | switch (Js.Json.classify(version)) { 177 | | JSONNumber(version) => 178 | [@implicit_arity] Belt.Result.Ok(int_of_float(version), payload) 179 | | _ => Belt.Result.Error("Invalid wrapped version") 180 | } 181 | | _ => Belt.Result.Error("Must have a schema version") 182 | }; 183 | let wrapWithVersion = (version, payload) => 184 | switch (Js.Json.classify(payload)) { 185 | | JSONObject(dict) => 186 | Js.Dict.set( 187 | dict, 188 | "$schemaVersion", 189 | Js.Json.number(float_of_int(version)), 190 | ); 191 | Js.Json.object_(dict); 192 | | _ => Js.Json.array([|Js.Json.number(float_of_int(version)), payload|]) 193 | }; 194 | let serializeTodo = data => 195 | wrapWithVersion(currentVersion, Version1.serialize_Types____todo(data)) 196 | and deserializeTodo = data => 197 | switch (parseVersion(data)) { 198 | | Belt.Result.Error(err) => Belt.Result.Error([err]) 199 | | [@implicit_arity] Ok(version, data) => 200 | switch (version) { 201 | | 1 => 202 | switch (Version1.deserialize_Types____todo(data)) { 203 | | Belt.Result.Error(error) => Belt.Result.Error(error) 204 | | Ok(data) => Belt.Result.Ok(data) 205 | } 206 | | _ => 207 | Belt.Result.Error(["Unexpected version " ++ string_of_int(version)]) 208 | } 209 | }; 210 | let serializeTodos = data => 211 | wrapWithVersion(currentVersion, Version1.serialize_Types____todos(data)) 212 | and deserializeTodos = data => 213 | switch (parseVersion(data)) { 214 | | Belt.Result.Error(err) => Belt.Result.Error([err]) 215 | | [@implicit_arity] Ok(version, data) => 216 | switch (version) { 217 | | 1 => 218 | switch (Version1.deserialize_Types____todos(data)) { 219 | | Belt.Result.Error(error) => Belt.Result.Error(error) 220 | | Ok(data) => Belt.Result.Ok(data) 221 | } 222 | | _ => 223 | Belt.Result.Error(["Unexpected version " ++ string_of_int(version)]) 224 | } 225 | }; 226 | let serializeId = data => 227 | wrapWithVersion(currentVersion, Version1.serialize_Types____id(data)) 228 | and deserializeId = data => 229 | switch (parseVersion(data)) { 230 | | Belt.Result.Error(err) => Belt.Result.Error([err]) 231 | | [@implicit_arity] Ok(version, data) => 232 | switch (version) { 233 | | 1 => 234 | switch (Version1.deserialize_Types____id(data)) { 235 | | Belt.Result.Error(error) => Belt.Result.Error(error) 236 | | Ok(data) => Belt.Result.Ok(data) 237 | } 238 | | _ => 239 | Belt.Result.Error(["Unexpected version " ++ string_of_int(version)]) 240 | } 241 | }; 242 | let serializeText = data => 243 | wrapWithVersion(currentVersion, Version1.serialize_Types____text(data)) 244 | and deserializeText = data => 245 | switch (parseVersion(data)) { 246 | | Belt.Result.Error(err) => Belt.Result.Error([err]) 247 | | [@implicit_arity] Ok(version, data) => 248 | switch (version) { 249 | | 1 => 250 | switch (Version1.deserialize_Types____text(data)) { 251 | | Belt.Result.Error(error) => Belt.Result.Error(error) 252 | | Ok(data) => Belt.Result.Ok(data) 253 | } 254 | | _ => 255 | Belt.Result.Error(["Unexpected version " ++ string_of_int(version)]) 256 | } 257 | }; 258 | module Modules = { 259 | module Todo = { 260 | type t = Types1._Types__todo; 261 | let serialize = serializeTodo; 262 | let deserialize = deserializeTodo; 263 | }; 264 | module Todos = { 265 | type t = Types1._Types__todos; 266 | let serialize = serializeTodos; 267 | let deserialize = deserializeTodos; 268 | }; 269 | module Id = { 270 | type t = Types1._Types__id; 271 | let serialize = serializeId; 272 | let deserialize = deserializeId; 273 | }; 274 | module Text = { 275 | type t = Types1._Types__text; 276 | let serialize = serializeText; 277 | let deserialize = deserializeText; 278 | }; 279 | }; 280 | -------------------------------------------------------------------------------- /src/client/demo.re: -------------------------------------------------------------------------------- 1 | Js.log("Hello, BuckleScript and Reason!"); 2 | 3 | type sum = 4 | | One(int) 5 | | Two(float, string) 6 | | Three; 7 | 8 | type my_int = int; 9 | 10 | type string_list = list(string); 11 | 12 | type nested = {name: string}; 13 | 14 | type jumbo = { 15 | str: string, 16 | num: int, 17 | float, 18 | my_int, 19 | string_list, 20 | nums: array(int), 21 | nested, 22 | cross_module: Lib.person, 23 | sum: list(option(sum)), 24 | }; 25 | 26 | Devtools.register(); 27 | 28 | let value = { 29 | str: "str", 30 | num: 10, 31 | float: 5.2, 32 | my_int: 3, 33 | string_list: ["one", "two", "threee"], 34 | nums: [|1, 2, 3|], 35 | nested: { 36 | name: "Me", 37 | }, 38 | cross_module: { 39 | Lib.name: "Reason", 40 | }, 41 | sum: [None, None, Some(Three), Some(One(2)), Some(Two(4.5, "hi"))], 42 | }; 43 | 44 | Js.log(value); 45 | 46 | Js.log(10); 47 | 48 | let ss = value; 49 | 50 | Js.log(ss); -------------------------------------------------------------------------------- /src/client/lib.re: -------------------------------------------------------------------------------- 1 | type person = {name: string}; 2 | let me = {name: "Reason"}; -------------------------------------------------------------------------------- /src/shared/.merlin: -------------------------------------------------------------------------------- 1 | EXCLUDE_QUERY_DIR 2 | B /Users/jared/clone/apps/isomagic-todos/src/shared/_esy/default/store/b/isomagic_shared-88da164f/default/.shared.objs/byte 3 | B /Users/jared/clone/apps/isomagic-todos/src/shared/_esy/default/store/b/isomagic_shared-88da164f/default/locked/.All_types.objs/byte 4 | B /Users/jared/clone/apps/isomagic-todos/src/shared/_esy/default/store/b/isomagic_shared-88da164f/default/server/.Serde.objs/byte 5 | S . 6 | S locked 7 | S server 8 | FLG -open Shared__ -open All_types 9 | -------------------------------------------------------------------------------- /src/shared/SApi.re: -------------------------------------------------------------------------------- 1 | module type Endpoint = { 2 | type request; 3 | type response; 4 | let path: string; 5 | let method: [ | `GET | `POST]; 6 | }; 7 | 8 | module type SerdeType = { 9 | type t; 10 | let serialize: t => Serde.target; 11 | let deserialize: Serde.target => Belt.Result.t(t, list(string)); 12 | }; 13 | 14 | // TODO serializeResponse, deserializeResponse or something... 15 | module type Get = { 16 | module Response: SerdeType; 17 | let path: string; 18 | }; 19 | 20 | module type Post = { 21 | module Request: SerdeType; 22 | module Response: SerdeType; 23 | let path: string; 24 | }; 25 | 26 | // module type Serde = { 27 | // type t; 28 | // let serializeTodo: Types.todo => t; 29 | // let deserializeTodo: t => Belt.Result.t(Types.todo, list(string)); 30 | // let serializeTodos: Types.todos => t; 31 | // let deserializeTodos: t => Belt.Result.t(Types.todos, list(string)); 32 | // }; 33 | 34 | module Endpoints = { 35 | open Types; 36 | // open! Serde.Modules; 37 | module Todos = { 38 | module Response = Serde.Modules.Todos; 39 | let path = "/todos"; 40 | let pub_ = `GET; 41 | }; 42 | module AddTodo = { 43 | module Request = Serde.Modules.Text; 44 | module Response = Serde.Modules.Todos; 45 | type request = string; 46 | type response = todos; 47 | let path = "/todo/add"; 48 | let pub_ = `POST; 49 | }; 50 | module RemoveTodo = { 51 | module Request = Serde.Modules.Id; 52 | module Response = Serde.Modules.Todos; 53 | let path = "/todo/remove"; 54 | let pub_ = `POST; 55 | }; 56 | module UpdateTodo = { 57 | module Request = Serde.Modules.Todo; 58 | module Response = Serde.Modules.Todos; 59 | let path = "/todo"; 60 | let pub_ = `POST; 61 | }; 62 | }; 63 | 64 | module type Config = { 65 | type t; 66 | module type Done; 67 | module Get: (Endpoint: Get) => Done; 68 | module Post: (Endpoint: Post) => Done; 69 | }; 70 | 71 | module Setup = (Config: Config) => {}; -------------------------------------------------------------------------------- /src/shared/Shared.re: -------------------------------------------------------------------------------- 1 | 2 | let module Types = Types; -------------------------------------------------------------------------------- /src/shared/dune: -------------------------------------------------------------------------------- 1 | 2 | (library 3 | (name SApi) 4 | (public_name isomagic-shared) 5 | (flags -open All_types) 6 | (libraries Serde All_types) 7 | ) 8 | -------------------------------------------------------------------------------- /src/shared/dune-project: -------------------------------------------------------------------------------- 1 | (lang dune 1.0) 2 | (name isomagic-shared) 3 | -------------------------------------------------------------------------------- /src/shared/esy.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "isomagic-shared", 3 | "dependencies": { 4 | "ocaml": ">4.02.3", 5 | "@opam/dune": "*", 6 | "ezjsonm": "jaredly/ezjsonm#esy", 7 | "belt": "jaredly/belt", 8 | "@esy-ocaml/reason": "*" 9 | }, 10 | "esy": { 11 | "build": "dune build -p #{self.name}", 12 | "buildsInSource": true 13 | } 14 | } -------------------------------------------------------------------------------- /src/shared/esy.lock/.gitattributes: -------------------------------------------------------------------------------- 1 | 2 | # Set eol to LF so files aren't converted to CRLF-eol on Windows. 3 | * text eol=lf 4 | -------------------------------------------------------------------------------- /src/shared/esy.lock/.gitignore: -------------------------------------------------------------------------------- 1 | 2 | # Reset any possible .gitignore, we want all esy.lock to be un-ignored. 3 | !* 4 | -------------------------------------------------------------------------------- /src/shared/esy.lock/opam/base-threads.base/opam: -------------------------------------------------------------------------------- 1 | opam-version: "2.0" 2 | maintainer: "https://github.com/ocaml/opam-repository/issues" 3 | description: """ 4 | Threads library distributed with the OCaml compiler 5 | """ 6 | 7 | -------------------------------------------------------------------------------- /src/shared/esy.lock/opam/base-unix.base/opam: -------------------------------------------------------------------------------- 1 | opam-version: "2.0" 2 | maintainer: "https://github.com/ocaml/opam-repository/issues" 3 | description: """ 4 | Unix library distributed with the OCaml compiler 5 | """ 6 | 7 | -------------------------------------------------------------------------------- /src/shared/esy.lock/opam/conf-m4.1/opam: -------------------------------------------------------------------------------- 1 | opam-version: "2.0" 2 | maintainer: "tim@gfxmonk.net" 3 | homepage: "http://www.gnu.org/software/m4/m4.html" 4 | bug-reports: "https://github.com/ocaml/opam-repository/issues" 5 | authors: "GNU Project" 6 | license: "GPL-3" 7 | build: [["sh" "-exc" "echo | m4"]] 8 | depexts: [ 9 | ["m4"] {os-distribution = "debian"} 10 | ["m4"] {os-distribution = "ubuntu"} 11 | ["m4"] {os-distribution = "fedora"} 12 | ["m4"] {os-distribution = "rhel"} 13 | ["m4"] {os-distribution = "centos"} 14 | ["m4"] {os-distribution = "alpine"} 15 | ["m4"] {os-distribution = "nixos"} 16 | ["m4"] {os-family = "suse"} 17 | ["m4"] {os-distribution = "ol"} 18 | ["m4"] {os-distribution = "arch"} 19 | ] 20 | synopsis: "Virtual package relying on m4" 21 | description: 22 | "This package can only install if the m4 binary is installed on the system." 23 | flags: conf 24 | -------------------------------------------------------------------------------- /src/shared/esy.lock/opam/cppo.1.6.5/opam: -------------------------------------------------------------------------------- 1 | opam-version: "2.0" 2 | maintainer: "martin@mjambon.com" 3 | authors: ["Martin Jambon"] 4 | homepage: "https://github.com/mjambon/cppo" 5 | dev-repo: "git+https://github.com/mjambon/cppo.git" 6 | bug-reports: "https://github.com/mjambon/cppo/issues" 7 | license: "BSD-3-Clause" 8 | 9 | build: [ 10 | ["jbuilder" "subst" "-p" name] {pinned} 11 | ["jbuilder" "build" "-p" name "-j" jobs] 12 | ["jbuilder" "runtest" "-p" name] {with-test} 13 | ] 14 | depends: [ 15 | "ocaml" 16 | "jbuilder" {build & >= "1.0+beta17"} 17 | "base-unix" 18 | ] 19 | synopsis: "Equivalent of the C preprocessor for OCaml programs" 20 | url { 21 | src: "https://github.com/mjambon/cppo/archive/v1.6.5.tar.gz" 22 | checksum: "md5=1cd25741d31417995b0973fe0b6f6c82" 23 | } 24 | -------------------------------------------------------------------------------- /src/shared/esy.lock/opam/cstruct.3.7.0/opam: -------------------------------------------------------------------------------- 1 | opam-version: "2.0" 2 | maintainer: "anil@recoil.org" 3 | authors: ["Anil Madhavapeddy" "Richard Mortier" "Thomas Gazagnaire" 4 | "Pierre Chambart" "David Kaloper" "Jeremy Yallop" "David Scott" 5 | "Mindy Preston" "Thomas Leonard" "Anton Kochkov" "Etienne Millon" ] 6 | homepage: "https://github.com/mirage/ocaml-cstruct" 7 | license: "ISC" 8 | dev-repo: "git+https://github.com/mirage/ocaml-cstruct.git" 9 | bug-reports: "https://github.com/mirage/ocaml-cstruct/issues" 10 | doc: "https://mirage.github.io/ocaml-cstruct/" 11 | 12 | tags: [ "org:mirage" "org:ocamllabs" ] 13 | build: [ 14 | ["dune" "subst"] {pinned} 15 | ["dune" "build" "-p" name "-j" jobs] 16 | ["dune" "runtest" "-p" name "-j" jobs] {with-test} 17 | ] 18 | depends: [ 19 | "ocaml" {>= "4.03.0"} 20 | "dune" {build & >= "1.0"} 21 | "sexplib" {< "v0.12"} 22 | "alcotest" {with-test} 23 | ] 24 | synopsis: "Access C-like structures directly from OCaml" 25 | description: """ 26 | Cstruct is a library and syntax extension to make it easier to access C-like 27 | structures directly from OCaml. It supports both reading and writing to these 28 | structures, and they are accessed via the `Bigarray` module.""" 29 | url { 30 | src: 31 | "https://github.com/mirage/ocaml-cstruct/releases/download/v3.7.0/cstruct-v3.7.0.tbz" 32 | checksum: "md5=60a83c96f5871a3caae091fd116f4f24" 33 | } 34 | -------------------------------------------------------------------------------- /src/shared/esy.lock/opam/dune.1.8.2/opam: -------------------------------------------------------------------------------- 1 | opam-version: "2.0" 2 | maintainer: "opensource@janestreet.com" 3 | authors: ["Jane Street Group, LLC "] 4 | homepage: "https://github.com/ocaml/dune" 5 | bug-reports: "https://github.com/ocaml/dune/issues" 6 | dev-repo: "git+https://github.com/ocaml/dune.git" 7 | license: "MIT" 8 | depends: [ 9 | "ocaml" {>= "4.02"} 10 | "base-unix" 11 | "base-threads" 12 | ] 13 | build: [ 14 | # opam 2 sets OPAM_SWITCH_PREFIX, so we don't need a hardcoded path 15 | ["ocaml" "configure.ml" "--libdir" lib] {opam-version < "2"} 16 | ["ocaml" "bootstrap.ml"] 17 | ["./boot.exe" "--release" "--subst"] {pinned} 18 | ["./boot.exe" "--release" "-j" jobs] 19 | ] 20 | conflicts: [ 21 | "jbuilder" {!= "transition"} 22 | "odoc" {< "1.3.0"} 23 | ] 24 | 25 | synopsis: "Fast, portable and opinionated build system" 26 | description: """ 27 | dune is a build system that was designed to simplify the release of 28 | Jane Street packages. It reads metadata from "dune" files following a 29 | very simple s-expression syntax. 30 | 31 | dune is fast, it has very low-overhead and support parallel builds on 32 | all platforms. It has no system dependencies, all you need to build 33 | dune and packages using dune is OCaml. You don't need or make or bash 34 | as long as the packages themselves don't use bash explicitly. 35 | 36 | dune supports multi-package development by simply dropping multiple 37 | repositories into the same directory. 38 | 39 | It also supports multi-context builds, such as building against 40 | several opam roots/switches simultaneously. This helps maintaining 41 | packages across several versions of OCaml and gives cross-compilation 42 | for free. 43 | """ 44 | url { 45 | src: "https://github.com/ocaml/dune/releases/download/1.8.2/dune-1.8.2.tbz" 46 | checksum: "md5=2b7f45a6e14865f2318d34f12221ec1e" 47 | } 48 | -------------------------------------------------------------------------------- /src/shared/esy.lock/opam/hex.1.3.0/opam: -------------------------------------------------------------------------------- 1 | opam-version: "2.0" 2 | maintainer: "thomas@gazagnaire.org" 3 | authors: ["Thomas Gazagnaire" "Trevor Summers Smith"] 4 | license: "ISC" 5 | homepage: "https://github.com/mirage/ocaml-hex" 6 | doc: "https://mirage.github.io/ocaml-hex/" 7 | bug-reports: "https://github.com/mirage/ocaml-hex/issues" 8 | depends: [ 9 | "ocaml" 10 | "dune" {build & >= "1.0"} 11 | "cstruct" {>= "1.7.0"} 12 | ] 13 | build: [ 14 | ["dune" "subst"] {pinned} 15 | ["dune" "build" "-p" name "-j" jobs] 16 | ["dune" "runtest" "-p" name "-j" jobs] {with-test} 17 | ] 18 | dev-repo: "git+https://github.com/mirage/ocaml-hex.git" 19 | synopsis: "Library providing hexadecimal converters" 20 | description: """ 21 | ```ocaml 22 | #require "hex";; 23 | # Hex.of_string "Hello world!";; 24 | - : Hex.t = "48656c6c6f20776f726c6421" 25 | # Hex.to_string "dead-beef";; 26 | - : string = "ޭ��" 27 | # Hex.hexdump (Hex.of_string "Hello world!\n") 28 | 00000000: 4865 6c6c 6f20 776f 726c 6421 0a Hello world!. 29 | - : unit = () 30 | ``` 31 | """ 32 | url { 33 | src: 34 | "https://github.com/mirage/ocaml-hex/releases/download/v1.3.0/hex-v1.3.0.tbz" 35 | checksum: "md5=c0baa72c9d7495cd3c6646f9a50b03c7" 36 | } 37 | -------------------------------------------------------------------------------- /src/shared/esy.lock/opam/jbuilder.transition/opam: -------------------------------------------------------------------------------- 1 | opam-version: "2.0" 2 | maintainer: "opensource@janestreet.com" 3 | authors: ["Jane Street Group, LLC "] 4 | homepage: "https://github.com/ocaml/dune" 5 | bug-reports: "https://github.com/ocaml/dune/issues" 6 | dev-repo: "git+https://github.com/ocaml/dune.git" 7 | license: "MIT" 8 | depends: ["ocaml" "dune"] 9 | post-messages: [ 10 | "Jbuilder has been renamed and the jbuilder package is now a transition \ 11 | package. Use the dune package instead." 12 | ] 13 | synopsis: 14 | "This is a transition package, jbuilder is now named dune. Use the dune" 15 | description: "package instead." 16 | -------------------------------------------------------------------------------- /src/shared/esy.lock/opam/jsonm.1.0.1/opam: -------------------------------------------------------------------------------- 1 | opam-version: "2.0" 2 | maintainer: "Daniel Bünzli " 3 | authors: ["Daniel Bünzli "] 4 | homepage: "http://erratique.ch/software/jsonm" 5 | doc: "http://erratique.ch/software/jsonm/doc/Jsonm" 6 | dev-repo: "git+http://erratique.ch/repos/jsonm.git" 7 | bug-reports: "https://github.com/dbuenzli/jsonm/issues" 8 | tags: [ "json" "codec" "org:erratique" ] 9 | license: "ISC" 10 | depends: [ 11 | "ocaml" {>= "4.01.0"} 12 | "ocamlfind" {build} 13 | "ocamlbuild" {build} 14 | "topkg" {build} 15 | "uchar" 16 | "uutf" {>= "1.0.0"} 17 | ] 18 | build:[[ 19 | "ocaml" "pkg/pkg.ml" "build" 20 | "--pinned" "%{pinned}%" ]] 21 | synopsis: "Non-blocking streaming JSON codec for OCaml" 22 | description: """ 23 | Jsonm is a non-blocking streaming codec to decode and encode the JSON 24 | data format. It can process JSON text without blocking on IO and 25 | without a complete in-memory representation of the data. 26 | 27 | The alternative "uncut" codec also processes whitespace and 28 | (non-standard) JSON with JavaScript comments. 29 | 30 | Jsonm is made of a single module and depends on [Uutf][uutf]. It is distributed 31 | under the ISC license. 32 | 33 | [uutf]: http://erratique.ch/software/uutf""" 34 | url { 35 | src: "http://erratique.ch/software/jsonm/releases/jsonm-1.0.1.tbz" 36 | checksum: "md5=e2ca39eaefd55b8d155c4f1ec5885311" 37 | } 38 | -------------------------------------------------------------------------------- /src/shared/esy.lock/opam/menhir.20181113/opam: -------------------------------------------------------------------------------- 1 | opam-version: "2.0" 2 | maintainer: "francois.pottier@inria.fr" 3 | authors: [ 4 | "François Pottier " 5 | "Yann Régis-Gianas " 6 | ] 7 | homepage: "http://gitlab.inria.fr/fpottier/menhir" 8 | dev-repo: "git+https://gitlab.inria.fr/fpottier/menhir.git" 9 | bug-reports: "menhir@inria.fr" 10 | build: [ 11 | [make "-f" "Makefile" "PREFIX=%{prefix}%" "USE_OCAMLFIND=true" "docdir=%{doc}%/menhir" "libdir=%{lib}%/menhir" "mandir=%{man}%/man1"] 12 | ] 13 | install: [ 14 | [make "-f" "Makefile" "install" "PREFIX=%{prefix}%" "docdir=%{doc}%/menhir" "libdir=%{lib}%/menhir" "mandir=%{man}%/man1"] 15 | ] 16 | remove: [ 17 | [make "-f" "Makefile" "uninstall" "PREFIX=%{prefix}%" "docdir=%{doc}%/menhir" "libdir=%{lib}%/menhir" "mandir=%{man}%/man1"] 18 | ] 19 | depends: [ 20 | "ocaml" {>= "4.02"} 21 | "ocamlfind" {build} 22 | "ocamlbuild" {build} 23 | ] 24 | synopsis: "An LR(1) parser generator" 25 | url { 26 | src: 27 | "https://gitlab.inria.fr/fpottier/menhir/repository/20181113/archive.tar.gz" 28 | checksum: [ 29 | "md5=69ce441a06ea131cd43e7b44c4303f3c" 30 | "sha512=4ddefcd71d305bfb933a4056da57e36c13c99ec6dfcc4695814798fbbd78b4d65828381ebcb0e58c4c0394105ac763af3d475474e05e408f7080315bc3cf6176" 31 | ] 32 | } 33 | -------------------------------------------------------------------------------- /src/shared/esy.lock/opam/merlin-extend.0.3/opam: -------------------------------------------------------------------------------- 1 | opam-version: "2.0" 2 | maintainer: "Frederic Bour " 3 | authors: "Frederic Bour " 4 | homepage: "https://github.com/let-def/merlin-extend" 5 | bug-reports: "https://github.com/let-def/merlin-extend" 6 | license: "MIT" 7 | dev-repo: "git+https://github.com/let-def/merlin-extend.git" 8 | build: [make] 9 | install: [make "install"] 10 | remove: ["ocamlfind" "remove" "merlin_extend"] 11 | depends: [ 12 | "ocaml" {>= "4.02.3"} 13 | "ocamlfind" {build} 14 | "cppo" {build} 15 | ] 16 | synopsis: "A protocol to provide custom frontend to Merlin" 17 | description: """ 18 | This protocol allows to replace the OCaml frontend of Merlin. 19 | It extends what used to be done with the `-pp' flag to handle a few more cases.""" 20 | flags: light-uninstall 21 | url { 22 | src: "https://github.com/let-def/merlin-extend/archive/v0.3.tar.gz" 23 | checksum: "md5=9c6dfd4f53328f02f12fcc265f4e2dda" 24 | } 25 | -------------------------------------------------------------------------------- /src/shared/esy.lock/opam/num.1.1/files/findlib-install.patch: -------------------------------------------------------------------------------- 1 | From 7688bb4fea24463c92e9c4870acc08495a4c77cb Mon Sep 17 00:00:00 2001 2 | From: David Allsopp 3 | Date: Wed, 10 Jan 2018 15:20:46 +0000 4 | Subject: [PATCH] Provide findlib-install target 5 | 6 | Allows installing the entire library using ocamlfind. 7 | --- 8 | Makefile | 10 +++++++++- 9 | src/META | 17 ----------------- 10 | src/META.in | 19 +++++++++++++++++++ 11 | src/Makefile | 17 +++++++++++++++-- 12 | 4 files changed, 43 insertions(+), 20 deletions(-) 13 | delete mode 100644 src/META 14 | create mode 100644 src/META.in 15 | 16 | diff --git a/Makefile b/Makefile 17 | index 6a5d08f..b40e588 100644 18 | --- a/Makefile 19 | +++ b/Makefile 20 | @@ -14,8 +14,16 @@ install: 21 | $(MAKE) -C src install 22 | $(MAKE) -C toplevel install 23 | 24 | +findlib-install: 25 | + $(MAKE) -C src findlib-install 26 | + $(MAKE) -C toplevel install 27 | + 28 | uninstall: 29 | $(MAKE) -C src uninstall 30 | $(MAKE) -C toplevel uninstall 31 | 32 | -.PHONY: all test clean install uninstall 33 | +findlib-uninstall: 34 | + $(MAKE) -C src findlib-uninstall 35 | + $(MAKE) -C toplevel uninstall 36 | + 37 | +.PHONY: all test clean install uninstall findlib-install findlib-uninstall 38 | diff --git a/src/META b/src/META 39 | deleted file mode 100644 40 | index 66ac170..0000000 41 | --- a/src/META 42 | +++ /dev/null 43 | @@ -1,17 +0,0 @@ 44 | -# This META is the one provided by findlib when the "num" library was 45 | -# part of the core OCaml distribution. For backward compatibility, 46 | -# it installs into OCaml's standard library directory, not in a subdirectory 47 | - 48 | -requires = "num.core" 49 | -requires(toploop) = "num.core,num-top" 50 | -version = "1.0" 51 | -description = "Arbitrary-precision rational arithmetic" 52 | -package "core" ( 53 | - directory = "^" 54 | - version = "1.0" 55 | - browse_interfaces = "" 56 | - archive(byte) = "nums.cma" 57 | - archive(native) = "nums.cmxa" 58 | - plugin(byte) = "nums.cma" 59 | - plugin(native) = "nums.cmxs" 60 | -) 61 | diff --git a/src/META.in b/src/META.in 62 | new file mode 100644 63 | index 0000000..b5678b7 64 | --- /dev/null 65 | +++ b/src/META.in 66 | @@ -0,0 +1,19 @@ 67 | +# This META is the one provided by findlib when the "num" library was 68 | +# part of the core OCaml distribution. For backward compatibility, 69 | +# it is installed into OCaml's standard library directory. If the 70 | +# directory line below is removed, then it's installed in a 71 | +# subdirectory, as normal for a findlib package. 72 | + 73 | +requires = "num.core" 74 | +requires(toploop) = "num.core,num-top" 75 | +version = "1.0" 76 | +description = "Arbitrary-precision rational arithmetic" 77 | +package "core" ( 78 | + directory = "^" 79 | + version = "1.0" 80 | + browse_interfaces = "" 81 | + archive(byte) = "nums.cma" 82 | + archive(native) = "nums.cmxa" 83 | + plugin(byte) = "nums.cma" 84 | + plugin(native) = "nums.cmxs" 85 | +) 86 | diff --git a/src/Makefile b/src/Makefile 87 | index 97dc074..ff271fe 100644 88 | --- a/src/Makefile 89 | +++ b/src/Makefile 90 | @@ -80,21 +80,34 @@ endif 91 | ifeq "$(NATDYNLINK)" "true" 92 | TOINSTALL+=nums.cmxs 93 | endif 94 | +ifeq "$(SUPPORTS_SHARED_LIBRARIES)" "true" 95 | TOINSTALL_STUBS=dllnums.$(SO) 96 | +else 97 | +TOINSTALL_STUBS= 98 | +endif 99 | 100 | install: 101 | + cp META.in META 102 | $(OCAMLFIND) install num META 103 | + rm -f META 104 | $(INSTALL_DATA) $(TOINSTALL) $(STDLIBDIR) 105 | ifeq "$(SUPPORTS_SHARED_LIBRARIES)" "true" 106 | $(INSTALL_DLL) $(TOINSTALL_STUBS) $(STDLIBDIR)/stublibs 107 | endif 108 | 109 | -uninstall: 110 | +findlib-install: 111 | + grep -Fv '^' META.in > META 112 | + $(OCAMLFIND) install num META $(TOINSTALL) $(TOINSTALL_STUBS) 113 | + rm -f META 114 | + 115 | +findlib-uninstall: 116 | + $(OCAMLFIND) remove num 117 | + 118 | +uninstall: findlib-uninstall 119 | cd $(STDLIBDIR) && rm -f $(TOINSTALL) 120 | ifeq "$(SUPPORTS_SHARED_LIBRARIES)" "true" 121 | cd $(STDLIBDIR)/stublibs && rm -f $(TOINSTALL_STUBS) 122 | endif 123 | - $(OCAMLFIND) remove num 124 | 125 | clean: 126 | rm -f *.cm[ioxta] *.cmx[as] *.cmti *.$(O) *.$(A) *.$(SO) 127 | -- 128 | 2.14.1 129 | 130 | -------------------------------------------------------------------------------- /src/shared/esy.lock/opam/num.1.1/files/installation-warning.patch: -------------------------------------------------------------------------------- 1 | From db8d748b2cad0adc2698e9fcf28727083a711bae Mon Sep 17 00:00:00 2001 2 | From: David Allsopp 3 | Date: Wed, 24 Jan 2018 16:01:56 +0000 4 | Subject: [PATCH] Warn about installations broken by previous faulty package 5 | 6 | --- 7 | Makefile | 33 +++++++++++++++++++++++++++++++++ 8 | 1 file changed, 33 insertions(+) 9 | 10 | diff --git a/Makefile b/Makefile 11 | index b40e588..d4dcd70 100644 12 | --- a/Makefile 13 | +++ b/Makefile 14 | @@ -14,9 +14,42 @@ install: 15 | $(MAKE) -C src install 16 | $(MAKE) -C toplevel install 17 | 18 | +OCAMLFIND_DIR:=$(dir $(shell command -v ocamlfind 2>/dev/null)) 19 | +OCAMLC_DIR:=$(dir $(shell command -v ocamlc 2>/dev/null)) 20 | +NUM_INSTALLED:=$(shell ocamlfind query num 2>/dev/null) 21 | + 22 | +ifeq ($(NUM_INSTALLED),) 23 | +# The num findlib package is not already present - wohoo! 24 | +OUR_FAULT=no 25 | +else 26 | +ifeq ($(OCAMLFIND_DIR),$(OCAMLC_DIR)) 27 | +# The num findlib package is present, but ocamlc and ocamlfind are in the 28 | +# same place, which means that either we're looking at a system-installed 29 | +# ocamlfind (which isn't supported), or the user has done something else 30 | +# nefarious and doesn't deserve our sympathy (or, at least, our potentially 31 | +# unhelpful advice) 32 | +OUR_FAULT=no 33 | +else 34 | +# The num findlib package package is present, and ocamlc and ocamlfind reside 35 | +# in different directories, which means that we're almost certainly looking at 36 | +# a system switch which has been damaged by a previous num package installation 37 | +# on an OS which didn't protect the system lib directory. 38 | +OUR_FAULT=probably 39 | +endif 40 | +endif 41 | + 42 | findlib-install: 43 | +ifeq ($(OUR_FAULT),no) 44 | $(MAKE) -C src findlib-install 45 | $(MAKE) -C toplevel install 46 | +else 47 | + @echo "\033[0;31m[ERROR]\033[m It appears that the num library was previously installed to your system" 48 | + @echo " compiler's lib directory, probably by a faulty opam package." 49 | + @echo " You will need to remove arith_flags.*, arith_status.*, big_int.*," 50 | + @echo " int_misc.*, nat.*, num.*, ratio.*, nums.*, libnums.* and" 51 | + @echo " stublibs/dllnums.* from $(shell ocamlc -where)." 52 | + @false 53 | +endif 54 | 55 | uninstall: 56 | $(MAKE) -C src uninstall 57 | -- 58 | 2.14.1 59 | 60 | -------------------------------------------------------------------------------- /src/shared/esy.lock/opam/num.1.1/opam: -------------------------------------------------------------------------------- 1 | opam-version: "2.0" 2 | name: "num" 3 | version: "1.1" 4 | maintainer: "Xavier Leroy " 5 | authors: [ 6 | "Valérie Ménissier-Morain" 7 | "Pierre Weis" 8 | "Xavier Leroy" 9 | ] 10 | license: "LGPL 2.1 with OCaml linking exception" 11 | 12 | homepage: "https://github.com/ocaml/num/" 13 | bug-reports: "https://github.com/ocaml/num/issues" 14 | dev-repo: "git+https://github.com/ocaml/num.git" 15 | build: [ 16 | [make] 17 | ] 18 | install: [ 19 | make 20 | "install" {!ocaml:preinstalled} 21 | "findlib-install" {ocaml:preinstalled} 22 | ] 23 | remove: [ 24 | make 25 | "uninstall" {!ocaml:preinstalled} 26 | "findlib-uninstall" {ocaml:preinstalled} 27 | ] 28 | depends: [ 29 | "ocaml" {>= "4.06.0"} 30 | "ocamlfind" {build & >= "1.7.3"} 31 | ] 32 | conflicts: [ "base-num" ] 33 | patches: [ "findlib-install.patch" "installation-warning.patch" ] 34 | synopsis: 35 | "The legacy Num library for arbitrary-precision integer and rational arithmetic" 36 | extra-files: [ 37 | ["installation-warning.patch" "md5=93c92bf6da6bae09d068da42b1bbaaac"] 38 | ["findlib-install.patch" "md5=3163a4c3f8dd084653eeb64d95311a2a"] 39 | ] 40 | url { 41 | src: "https://github.com/ocaml/num/archive/v1.1.tar.gz" 42 | checksum: "md5=710cbe18b144955687a03ebab439ff2b" 43 | } 44 | -------------------------------------------------------------------------------- /src/shared/esy.lock/opam/ocaml-migrate-parsetree.1.2.0/opam: -------------------------------------------------------------------------------- 1 | opam-version: "2.0" 2 | maintainer: "frederic.bour@lakaban.net" 3 | authors: [ 4 | "Frédéric Bour " 5 | "Jérémie Dimino " 6 | ] 7 | license: "LGPL-2.1" 8 | homepage: "https://github.com/ocaml-ppx/ocaml-migrate-parsetree" 9 | bug-reports: "https://github.com/ocaml-ppx/ocaml-migrate-parsetree/issues" 10 | dev-repo: "git+https://github.com/ocaml-ppx/ocaml-migrate-parsetree.git" 11 | doc: "https://ocaml-ppx.github.io/ocaml-migrate-parsetree/" 12 | tags: [ "syntax" "org:ocamllabs" ] 13 | build: [ 14 | ["dune" "build" "-p" name "-j" jobs] 15 | ] 16 | depends: [ 17 | "result" 18 | "ppx_derivers" 19 | "dune" {build & >= "1.6.0"} 20 | "ocaml" {>= "4.02.3" & < "4.08.0"} 21 | ] 22 | synopsis: "Convert OCaml parsetrees between different versions" 23 | description: """ 24 | Convert OCaml parsetrees between different versions 25 | 26 | This library converts parsetrees, outcometree and ast mappers between 27 | different OCaml versions. High-level functions help making PPX 28 | rewriters independent of a compiler version. 29 | """ 30 | url { 31 | src: 32 | "https://github.com/ocaml-ppx/ocaml-migrate-parsetree/releases/download/v1.2.0/ocaml-migrate-parsetree-v1.2.0.tbz" 33 | checksum: "md5=cc6fb09ad6f99156c7dba47711c62c6f" 34 | } 35 | -------------------------------------------------------------------------------- /src/shared/esy.lock/opam/ocamlbuild.0.14.0/opam: -------------------------------------------------------------------------------- 1 | opam-version: "2.0" 2 | maintainer: "Gabriel Scherer " 3 | authors: ["Nicolas Pouillard" "Berke Durak"] 4 | homepage: "https://github.com/ocaml/ocamlbuild/" 5 | bug-reports: "https://github.com/ocaml/ocamlbuild/issues" 6 | license: "LGPL-2 with OCaml linking exception" 7 | doc: "https://github.com/ocaml/ocamlbuild/blob/master/manual/manual.adoc" 8 | dev-repo: "git+https://github.com/ocaml/ocamlbuild.git" 9 | build: [ 10 | [ 11 | make 12 | "-f" 13 | "configure.make" 14 | "all" 15 | "OCAMLBUILD_PREFIX=%{prefix}%" 16 | "OCAMLBUILD_BINDIR=%{bin}%" 17 | "OCAMLBUILD_LIBDIR=%{lib}%" 18 | "OCAMLBUILD_MANDIR=%{man}%" 19 | "OCAML_NATIVE=%{ocaml:native}%" 20 | "OCAML_NATIVE_TOOLS=%{ocaml:native}%" 21 | ] 22 | [make "check-if-preinstalled" "all" "opam-install"] 23 | ] 24 | conflicts: [ 25 | "base-ocamlbuild" 26 | "ocamlfind" {< "1.6.2"} 27 | ] 28 | synopsis: 29 | "OCamlbuild is a build system with builtin rules to easily build most OCaml projects." 30 | depends: [ 31 | "ocaml" {>= "4.03"} 32 | ] 33 | url { 34 | src: "https://github.com/ocaml/ocamlbuild/archive/0.14.0.tar.gz" 35 | checksum: "sha256=87b29ce96958096c0a1a8eeafeb6268077b2d11e1bf2b3de0f5ebc9cf8d42e78" 36 | } 37 | -------------------------------------------------------------------------------- /src/shared/esy.lock/opam/ocamlfind.1.8.0/files/no-awk-check.patch: -------------------------------------------------------------------------------- 1 | commit 40142bc941e6e308686e86be6fc2da92f346a22f 2 | Author: Kate 3 | Date: Tue Mar 19 16:29:06 2019 +0000 4 | 5 | Remove awk from the set of checked unix tools as it's not used anywhere 6 | 7 | diff --git a/configure b/configure 8 | index d9b587c..20e8dca 100755 9 | --- a/configure 10 | +++ b/configure 11 | @@ -184,7 +184,7 @@ echo "Configuring core..." 12 | 13 | # Some standard Unix tools must be available: 14 | 15 | -for tool in sed awk ocaml ocamlc uname rm make cat m4 dirname basename; do 16 | +for tool in sed ocaml ocamlc uname rm make cat m4 dirname basename; do 17 | if in_path $tool; then true; else 18 | echo "configure: $tool not in PATH; this is required" 1>&2 19 | exit 1 20 | -------------------------------------------------------------------------------- /src/shared/esy.lock/opam/ocamlfind.1.8.0/files/ocaml-stub: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | BINDIR=$(dirname "$(command -v ocamlc)") 4 | "$BINDIR/ocaml" -I "$OCAML_TOPLEVEL_PATH" "$@" 5 | -------------------------------------------------------------------------------- /src/shared/esy.lock/opam/ocamlfind.1.8.0/files/ocamlfind.install: -------------------------------------------------------------------------------- 1 | bin: [ 2 | "src/findlib/ocamlfind" {"ocamlfind"} 3 | "?src/findlib/ocamlfind_opt" {"ocamlfind"} 4 | "?tools/safe_camlp4" 5 | ] 6 | toplevel: ["src/findlib/topfind"] 7 | -------------------------------------------------------------------------------- /src/shared/esy.lock/opam/ocamlfind.1.8.0/opam: -------------------------------------------------------------------------------- 1 | opam-version: "2.0" 2 | maintainer: "Thomas Gazagnaire " 3 | homepage: "http://projects.camlcity.org/projects/findlib.html" 4 | bug-reports: "https://gitlab.camlcity.org/gerd/lib-findlib/issues" 5 | dev-repo: "git+https://gitlab.camlcity.org/gerd/lib-findlib.git" 6 | patches: ["no-awk-check.patch"] 7 | build: [ 8 | [ 9 | "./configure" 10 | "-bindir" 11 | bin 12 | "-sitelib" 13 | lib 14 | "-mandir" 15 | man 16 | "-config" 17 | "%{lib}%/findlib.conf" 18 | "-no-custom" 19 | "-no-topfind" {ocaml:preinstalled} 20 | ] 21 | [make "all"] 22 | [make "opt"] {ocaml:native} 23 | ] 24 | install: [ 25 | [make "install"] 26 | ["install" "-m" "0755" "ocaml-stub" "%{bin}%/ocaml"] {ocaml:preinstalled} 27 | ] 28 | remove: [ 29 | ["ocamlfind" "remove" "bytes"] 30 | [ 31 | "./configure" 32 | "-bindir" 33 | bin 34 | "-sitelib" 35 | lib 36 | "-mandir" 37 | man 38 | "-config" 39 | "%{lib}%/findlib.conf" 40 | "-no-topfind" {ocaml:preinstalled} 41 | ] 42 | [make "uninstall"] 43 | ["rm" "-f" "%{bin}%/ocaml"] {ocaml:preinstalled} 44 | ] 45 | depends: [ 46 | "ocaml" {>= "4.00.0"} 47 | "conf-m4" {build} 48 | ] 49 | synopsis: "A library manager for OCaml" 50 | description: """ 51 | Findlib is a library manager for OCaml. It provides a convention how 52 | to store libraries, and a file format ("META") to describe the 53 | properties of libraries. There is also a tool (ocamlfind) for 54 | interpreting the META files, so that it is very easy to use libraries 55 | in programs and scripts.""" 56 | authors: "Gerd Stolpmann " 57 | extra-files: [ 58 | ["ocamlfind.install" "md5=06f2c282ab52d93aa6adeeadd82a2543"] 59 | ["ocaml-stub" "md5=181f259c9e0bad9ef523e7d4abfdf87a"] 60 | ["no-awk-check.patch" "md5=0378123bf1a45fccdea434c053ddb687"] 61 | ] 62 | url { 63 | src: "http://download.camlcity.org/download/findlib-1.8.0.tar.gz" 64 | checksum: "md5=a710c559667672077a93d34eb6a42e5b" 65 | mirrors: "http://download2.camlcity.org/download/findlib-1.8.0.tar.gz" 66 | } 67 | -------------------------------------------------------------------------------- /src/shared/esy.lock/opam/ppx_derivers.1.0/opam: -------------------------------------------------------------------------------- 1 | opam-version: "2.0" 2 | maintainer: "jeremie@dimino.org" 3 | authors: ["Jérémie Dimino"] 4 | license: "BSD3" 5 | homepage: "https://github.com/ocaml-ppx/ppx_derivers" 6 | bug-reports: "https://github.com/ocaml-ppx/ppx_derivers/issues" 7 | dev-repo: "git://github.com/ocaml-ppx/ppx_derivers.git" 8 | build: [ 9 | ["jbuilder" "build" "-p" name "-j" jobs] 10 | ] 11 | depends: [ 12 | "ocaml" 13 | "jbuilder" {build & >= "1.0+beta7"} 14 | ] 15 | synopsis: "Shared [@@deriving] plugin registry" 16 | description: """ 17 | Ppx_derivers is a tiny package whose sole purpose is to allow 18 | ppx_deriving and ppx_type_conv to inter-operate gracefully when linked 19 | as part of the same ocaml-migrate-parsetree driver.""" 20 | url { 21 | src: "https://github.com/ocaml-ppx/ppx_derivers/archive/1.0.tar.gz" 22 | checksum: "md5=4ddce8f43fdb9b0ef0ab6a7cbfebc3e3" 23 | } 24 | -------------------------------------------------------------------------------- /src/shared/esy.lock/opam/ppx_tools_versioned.5.2.1/opam: -------------------------------------------------------------------------------- 1 | opam-version: "2.0" 2 | maintainer: "frederic.bour@lakaban.net" 3 | authors: [ 4 | "Frédéric Bour " 5 | "Alain Frisch " 6 | ] 7 | license: "MIT" 8 | homepage: "https://github.com/let-def/ppx_tools_versioned" 9 | bug-reports: "https://github.com/let-def/ppx_tools_versioned/issues" 10 | dev-repo: "git://github.com/let-def/ppx_tools_versioned.git" 11 | tags: [ "syntax" ] 12 | build: [ 13 | ["jbuilder" "subst" "-p" name] {pinned} 14 | ["jbuilder" "build" "-p" name "-j" jobs] 15 | ["jbuilder" "runtest" "-p" name "-j" jobs] {with-test} 16 | ] 17 | depends: [ 18 | "ocaml" {>= "4.02.0"} 19 | "jbuilder" {build & >= "1.0+beta17"} 20 | "ocaml-migrate-parsetree" {>= "1.0.10"} 21 | ] 22 | synopsis: "A variant of ppx_tools based on ocaml-migrate-parsetree" 23 | url { 24 | src: 25 | "https://github.com/ocaml-ppx/ppx_tools_versioned/archive/5.2.1.tar.gz" 26 | checksum: "md5=1ae6ae43ec161fbbf12c2b4d3a7e26f5" 27 | } 28 | -------------------------------------------------------------------------------- /src/shared/esy.lock/opam/result.1.3/opam: -------------------------------------------------------------------------------- 1 | opam-version: "2.0" 2 | maintainer: "opensource@janestreet.com" 3 | authors: ["Jane Street Group, LLC "] 4 | homepage: "https://github.com/janestreet/result" 5 | dev-repo: "git+https://github.com/janestreet/result.git" 6 | bug-reports: "https://github.com/janestreet/result/issues" 7 | license: "BSD3" 8 | build: [["jbuilder" "build" "-p" name "-j" jobs]] 9 | depends: [ 10 | "ocaml" 11 | "jbuilder" {build & >= "1.0+beta11"} 12 | ] 13 | synopsis: "Compatibility Result module" 14 | description: """ 15 | Projects that want to use the new result type defined in OCaml >= 4.03 16 | while staying compatible with older version of OCaml should use the 17 | Result module defined in this library.""" 18 | url { 19 | src: 20 | "https://github.com/janestreet/result/releases/download/1.3/result-1.3.tbz" 21 | checksum: "md5=4beebefd41f7f899b6eeba7414e7ae01" 22 | } 23 | -------------------------------------------------------------------------------- /src/shared/esy.lock/opam/sexplib.v0.10.0/opam: -------------------------------------------------------------------------------- 1 | opam-version: "2.0" 2 | maintainer: "opensource@janestreet.com" 3 | authors: ["Jane Street Group, LLC "] 4 | homepage: "https://github.com/janestreet/sexplib" 5 | bug-reports: "https://github.com/janestreet/sexplib/issues" 6 | dev-repo: "git+https://github.com/janestreet/sexplib.git" 7 | license: "Apache-2.0" 8 | build: [ 9 | ["jbuilder" "build" "-p" name "-j" jobs] 10 | ] 11 | depends: [ 12 | "ocaml" {>= "4.04.1"} 13 | "jbuilder" {build & >= "1.0+beta12"} 14 | "num" 15 | ] 16 | conflicts: [ 17 | "sexplib0" 18 | ] 19 | synopsis: "Library for serializing OCaml values to and from S-expressions" 20 | description: """ 21 | Part of Jane Street's Core library 22 | The Core suite of libraries is an industrial strength alternative to 23 | OCaml's standard library that was developed by Jane Street, the 24 | largest industrial user of OCaml.""" 25 | url { 26 | src: 27 | "https://ocaml.janestreet.com/ocaml-core/v0.10/files/sexplib-v0.10.0.tar.gz" 28 | checksum: "md5=b8f5db21a2b19aadc753c6e626019068" 29 | } 30 | -------------------------------------------------------------------------------- /src/shared/esy.lock/opam/topkg.1.0.0/opam: -------------------------------------------------------------------------------- 1 | opam-version: "2.0" 2 | maintainer: "Daniel Bünzli " 3 | authors: ["Daniel Bünzli "] 4 | homepage: "http://erratique.ch/software/topkg" 5 | doc: "http://erratique.ch/software/topkg/doc" 6 | license: "ISC" 7 | dev-repo: "git+http://erratique.ch/repos/topkg.git" 8 | bug-reports: "https://github.com/dbuenzli/topkg/issues" 9 | tags: ["packaging" "ocamlbuild" "org:erratique"] 10 | depends: [ 11 | "ocaml" {>= "4.01.0"} 12 | "ocamlfind" {build & >= "1.6.1"} 13 | "ocamlbuild" 14 | "result" ] 15 | build: [[ 16 | "ocaml" "pkg/pkg.ml" "build" 17 | "--pkg-name" name 18 | "--dev-pkg" "%{pinned}%" ]] 19 | synopsis: """The transitory OCaml software packager""" 20 | description: """\ 21 | 22 | Topkg is a packager for distributing OCaml software. It provides an 23 | API to describe the files a package installs in a given build 24 | configuration and to specify information about the package's 25 | distribution, creation and publication procedures. 26 | 27 | The optional topkg-care package provides the `topkg` command line tool 28 | which helps with various aspects of a package's life cycle: creating 29 | and linting a distribution, releasing it on the WWW, publish its 30 | documentation, add it to the OCaml opam repository, etc. 31 | 32 | Topkg is distributed under the ISC license and has **no** 33 | dependencies. This is what your packages will need as a *build* 34 | dependency. 35 | 36 | Topkg-care is distributed under the ISC license it depends on 37 | [fmt][fmt], [logs][logs], [bos][bos], [cmdliner][cmdliner], 38 | [webbrowser][webbrowser] and `opam-format`. 39 | 40 | [fmt]: http://erratique.ch/software/fmt 41 | [logs]: http://erratique.ch/software/logs 42 | [bos]: http://erratique.ch/software/bos 43 | [cmdliner]: http://erratique.ch/software/cmdliner 44 | [webbrowser]: http://erratique.ch/software/webbrowser 45 | """ 46 | url { 47 | src: "http://erratique.ch/software/topkg/releases/topkg-1.0.0.tbz" 48 | checksum: "md5=e3d76bda06bf68cb5853caf6627da603" 49 | } 50 | -------------------------------------------------------------------------------- /src/shared/esy.lock/opam/uchar.0.0.2/opam: -------------------------------------------------------------------------------- 1 | opam-version: "2.0" 2 | maintainer: "Daniel Bünzli " 3 | authors: ["Daniel Bünzli "] 4 | homepage: "http://ocaml.org" 5 | doc: "https://ocaml.github.io/uchar/" 6 | dev-repo: "git+https://github.com/ocaml/uchar.git" 7 | bug-reports: "https://github.com/ocaml/uchar/issues" 8 | tags: [ "text" "character" "unicode" "compatibility" "org:ocaml.org" ] 9 | license: "typeof OCaml system" 10 | depends: [ 11 | "ocaml" {>= "3.12.0"} 12 | "ocamlbuild" {build} 13 | ] 14 | build: [ 15 | ["ocaml" "pkg/git.ml"] 16 | [ 17 | "ocaml" 18 | "pkg/build.ml" 19 | "native=%{ocaml:native}%" 20 | "native-dynlink=%{ocaml:native-dynlink}%" 21 | ] 22 | ] 23 | synopsis: "Compatibility library for OCaml's Uchar module" 24 | description: """ 25 | The `uchar` package provides a compatibility library for the 26 | [`Uchar`][1] module introduced in OCaml 4.03. 27 | 28 | The `uchar` package is distributed under the license of the OCaml 29 | compiler. See [LICENSE](LICENSE) for details. 30 | 31 | [1]: http://caml.inria.fr/pub/docs/manual-ocaml/libref/Uchar.html""" 32 | url { 33 | src: 34 | "https://github.com/ocaml/uchar/releases/download/v0.0.2/uchar-0.0.2.tbz" 35 | checksum: "md5=c9ba2c738d264c420c642f7bb1cf4a36" 36 | } 37 | -------------------------------------------------------------------------------- /src/shared/esy.lock/opam/uutf.1.0.2/opam: -------------------------------------------------------------------------------- 1 | opam-version: "2.0" 2 | maintainer: "Daniel Bünzli " 3 | authors: ["Daniel Bünzli "] 4 | homepage: "http://erratique.ch/software/uutf" 5 | doc: "http://erratique.ch/software/uutf/doc/Uutf" 6 | dev-repo: "git+http://erratique.ch/repos/uutf.git" 7 | bug-reports: "https://github.com/dbuenzli/uutf/issues" 8 | tags: [ "unicode" "text" "utf-8" "utf-16" "codec" "org:erratique" ] 9 | license: "ISC" 10 | depends: [ 11 | "ocaml" {>= "4.01.0"} 12 | "ocamlfind" {build} 13 | "ocamlbuild" {build} 14 | "topkg" {build} 15 | "uchar" 16 | ] 17 | depopts: ["cmdliner"] 18 | conflicts: ["cmdliner" { < "0.9.6"} ] 19 | build: [[ 20 | "ocaml" "pkg/pkg.ml" "build" 21 | "--pinned" "%{pinned}%" 22 | "--with-cmdliner" "%{cmdliner:installed}%" ]] 23 | synopsis: """Non-blocking streaming Unicode codec for OCaml""" 24 | description: """\ 25 | 26 | Uutf is a non-blocking streaming codec to decode and encode the UTF-8, 27 | UTF-16, UTF-16LE and UTF-16BE encoding schemes. It can efficiently 28 | work character by character without blocking on IO. Decoders perform 29 | character position tracking and support newline normalization. 30 | 31 | Functions are also provided to fold over the characters of UTF encoded 32 | OCaml string values and to directly encode characters in OCaml 33 | Buffer.t values. 34 | 35 | Uutf has no dependency and is distributed under the ISC license. 36 | """ 37 | url { 38 | archive: "http://erratique.ch/software/uutf/releases/uutf-1.0.2.tbz" 39 | checksum: "a7c542405a39630c689a82bd7ef2292c" 40 | } 41 | -------------------------------------------------------------------------------- /src/shared/esy.lock/overrides/opam__s__dune_opam__c__1.8.2_opam_override/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "build": [ 3 | [ 4 | "ocaml", 5 | "bootstrap.ml" 6 | ], 7 | [ 8 | "./boot.exe", 9 | "--release", 10 | "-j", 11 | "4" 12 | ] 13 | ] 14 | } 15 | -------------------------------------------------------------------------------- /src/shared/esy.lock/overrides/opam__s__merlin_extend_opam__c__0.3_opam_override/files/merlin-extend-winfix.patch: -------------------------------------------------------------------------------- 1 | --- ./extend_helper.ml 2 | +++ ./extend_helper.ml 3 | @@ -1,13 +1,6 @@ 4 | -(*pp cppo -V OCAML:`ocamlc -version` *) 5 | open Parsetree 6 | open Extend_protocol 7 | 8 | -#if OCAML_VERSION < (4, 3, 0) 9 | -# define CONST_STRING Asttypes.Const_string 10 | -#else 11 | -# define CONST_STRING Parsetree.Pconst_string 12 | -#endif 13 | - 14 | (** Default implementation for [Reader_def.print_outcome] using 15 | [Oprint] from compiler-libs *) 16 | let print_outcome_using_oprint ppf = function 17 | @@ -28,7 +21,7 @@ 18 | pstr_loc = Location.none; 19 | pstr_desc = Pstr_eval ({ 20 | pexp_loc = Location.none; 21 | - pexp_desc = Pexp_constant (CONST_STRING (msg, None)); 22 | + pexp_desc = Pexp_constant (Parsetree.Pconst_string (msg, None)); 23 | pexp_attributes = []; 24 | }, []); 25 | }] 26 | @@ -112,7 +105,7 @@ 27 | let msg = match payload with 28 | | PStr [{ 29 | pstr_desc = Pstr_eval ({ 30 | - pexp_desc = Pexp_constant (CONST_STRING (msg, _)); 31 | + pexp_desc = Pexp_constant (Parsetree.Pconst_string (msg, _)); 32 | }, _); 33 | }] -> msg 34 | | _ -> "Warning: extension produced an incorrect syntax-error node" 35 | -------------------------------------------------------------------------------- /src/shared/esy.lock/overrides/opam__s__merlin_extend_opam__c__0.3_opam_override/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "build": [ 3 | [ 4 | "bash", 5 | "-c", 6 | "#{os == 'windows' ? 'patch -p1 < merlin-extend-winfix.patch' : 'true'}" 7 | ], 8 | [ 9 | "make" 10 | ] 11 | ] 12 | } 13 | -------------------------------------------------------------------------------- /src/shared/esy.lock/overrides/opam__s__num_opam__c__1.1_opam_override/files/num-1.1.patch: -------------------------------------------------------------------------------- 1 | --- ./src/Makefile 2 | +++ ./src/Makefile 3 | @@ -80,7 +80,7 @@ 4 | ifeq "$(NATDYNLINK)" "true" 5 | TOINSTALL+=nums.cmxs 6 | endif 7 | ifeq "$(SUPPORTS_SHARED_LIBRARIES)" "true" 8 | -TOINSTALL_STUBS=dllnums.$(SO) 9 | +TOINSTALL_STUBS=dllnums$(EXT_DLL) 10 | else 11 | TOINSTALL_STUBS= 12 | @@ -112,7 +112,7 @@ 13 | endif 14 | 15 | clean: 16 | - rm -f *.cm[ioxta] *.cmx[as] *.cmti *.$(O) *.$(A) *.$(SO) 17 | + rm -f *.cm[ioxta] *.cmx[as] *.cmti *.$(O) *.$(A) *$(EXE_DLL) 18 | 19 | depend: 20 | $(OCAMLDEP) -slash *.mli *.ml > .depend 21 | -------------------------------------------------------------------------------- /src/shared/esy.lock/overrides/opam__s__num_opam__c__1.1_opam_override/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "build": [ 3 | [ 4 | "bash", 5 | "-c", 6 | "#{os == 'windows' ? 'patch -p1 < num-1.1.patch' : 'true'}" 7 | ], 8 | [ 9 | "make" 10 | ] 11 | ], 12 | "install": [ 13 | [ 14 | "make", 15 | "findlib-install" 16 | ] 17 | ], 18 | "exportedEnv": { 19 | "CAML_LD_LIBRARY_PATH": { 20 | "val": "#{self.install / 'lib' / 'num' : $CAML_LD_LIBRARY_PATH}", 21 | "scope": "global" 22 | } 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /src/shared/esy.lock/overrides/opam__s__ocamlbuild_opam__c__0.14.0_opam_override/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "build": [ 3 | [ 4 | "bash", 5 | "-c", 6 | "#{os == 'windows' ? 'patch -p1 < ocamlbuild-0.14.0.patch' : 'true'}" 7 | ], 8 | [ 9 | "make", 10 | "-f", 11 | "configure.make", 12 | "all", 13 | "OCAMLBUILD_PREFIX=#{self.install}", 14 | "OCAMLBUILD_BINDIR=#{self.bin}", 15 | "OCAMLBUILD_LIBDIR=#{self.lib}", 16 | "OCAMLBUILD_MANDIR=#{self.man}", 17 | "OCAMLBUILD_NATIVE=true", 18 | "OCAMLBUILD_NATIVE_TOOLS=true" 19 | ], 20 | [ 21 | "make", 22 | "check-if-preinstalled", 23 | "all", 24 | "#{os == 'windows' ? 'install' : 'opam-install'}" 25 | ] 26 | ] 27 | } 28 | -------------------------------------------------------------------------------- /src/shared/esy.lock/overrides/opam__s__ocamlfind_opam__c__1.8.0_opam_override/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "build": [ 3 | [ 4 | "bash", 5 | "-c", 6 | "#{os == 'windows' ? 'patch -p1 < findlib-1.8.0.patch' : 'true'}" 7 | ], 8 | [ 9 | "./configure", 10 | "-bindir", 11 | "#{self.bin}", 12 | "-sitelib", 13 | "#{self.lib}", 14 | "-mandir", 15 | "#{self.man}", 16 | "-config", 17 | "#{self.lib}/findlib.conf", 18 | "-no-custom", 19 | "-no-topfind" 20 | ], 21 | [ 22 | "make", 23 | "all" 24 | ], 25 | [ 26 | "make", 27 | "opt" 28 | ] 29 | ], 30 | "install": [ 31 | [ 32 | "make", 33 | "install" 34 | ], 35 | [ 36 | "install", 37 | "-m", 38 | "0755", 39 | "ocaml-stub", 40 | "#{self.bin}/ocaml" 41 | ], 42 | [ 43 | "mkdir", 44 | "-p", 45 | "#{self.toplevel}" 46 | ], 47 | [ 48 | "install", 49 | "-m", 50 | "0644", 51 | "src/findlib/topfind", 52 | "#{self.toplevel}/topfind" 53 | ] 54 | ], 55 | "exportedEnv": { 56 | "OCAML_TOPLEVEL_PATH": { 57 | "val": "#{self.toplevel}", 58 | "scope": "global" 59 | } 60 | } 61 | } 62 | -------------------------------------------------------------------------------- /src/shared/isomagic-shared.opam: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jaredly/isomagic-todos/1ad477a9cefeea57e63b64b1f60f898baf76dac8/src/shared/isomagic-shared.opam -------------------------------------------------------------------------------- /src/shared/locked/.merlin: -------------------------------------------------------------------------------- 1 | EXCLUDE_QUERY_DIR 2 | B /Users/jared/clone/apps/isomagic-todos/src/shared/_esy/default/store/b/isomagic_shared-88da164f/default/locked/.All_types.objs/byte 3 | S . 4 | FLG -open All_types -w -40 5 | -------------------------------------------------------------------------------- /src/shared/locked/LockedTypes.re: -------------------------------------------------------------------------------- 1 | [@ocaml.warning "-34"]; 2 | module Types1 = { 3 | type _Types__id = int 4 | and _Types__text = string 5 | and _Types__todo = 6 | Types.todo = { 7 | text: _Types__text, 8 | id: _Types__id, 9 | completed: option(int), 10 | } 11 | and _Types__todos = list(_Types__todo); 12 | }; 13 | let currentVersion = 1; 14 | -------------------------------------------------------------------------------- /src/shared/locked/Types.re: -------------------------------------------------------------------------------- 1 | 2 | type id = int; 3 | type text = string; 4 | 5 | type person = { 6 | id, 7 | name: string, 8 | age: int, 9 | friends: list(int) 10 | }; 11 | 12 | type todo = { 13 | text, 14 | id, 15 | completed: option(int) 16 | }; 17 | 18 | type todos = list(todo); 19 | 20 | type new_todo = string; 21 | -------------------------------------------------------------------------------- /src/shared/locked/dune: -------------------------------------------------------------------------------- 1 | (library (name All_types) (public_name isomagic-shared.types)) 2 | -------------------------------------------------------------------------------- /src/shared/server/.merlin: -------------------------------------------------------------------------------- 1 | EXCLUDE_QUERY_DIR 2 | B /Users/jared/clone/apps/isomagic-todos/src/shared/_esy/default/store/b/isomagic_shared-88da164f/default/locked/.All_types.objs/byte 3 | B /Users/jared/clone/apps/isomagic-todos/src/shared/_esy/default/store/b/isomagic_shared-88da164f/default/server/.Serde.objs/byte 4 | S ../locked 5 | S . 6 | FLG -open All_types 7 | -------------------------------------------------------------------------------- /src/shared/server/Serde.re: -------------------------------------------------------------------------------- 1 | [@ocaml.warning "-34"]; 2 | open LockedTypes; 3 | type target = Ezjsonm.value; 4 | module Version1 = { 5 | open Types1; 6 | let rec deserialize_Types____id: 7 | Ezjsonm.value => Belt.Result.t(_Types__id, list(string)) = 8 | value => 9 | ( 10 | number => 11 | switch (number) { 12 | | `Float(number) => Belt.Result.Ok(int_of_float(number)) 13 | | _ => Error(["Expected a float"]) 14 | } 15 | )( 16 | value, 17 | ) 18 | and deserialize_Types____text: 19 | Ezjsonm.value => Belt.Result.t(_Types__text, list(string)) = 20 | value => 21 | ( 22 | string => 23 | switch (string) { 24 | | `String(string) => Belt.Result.Ok(string) 25 | | _ => Error(["epected a string"]) 26 | } 27 | )( 28 | value, 29 | ) 30 | and deserialize_Types____todo: 31 | Ezjsonm.value => Belt.Result.t(_Types__todo, list(string)) = 32 | record => 33 | switch (record) { 34 | | `O(items) => 35 | let inner = attr_completed => { 36 | let inner = attr_id => { 37 | let inner = attr_text => 38 | Belt.Result.Ok( 39 | {text: attr_text, id: attr_id, completed: attr_completed}: _Types__todo, 40 | ); 41 | switch (Belt.List.getAssoc(items, "text", (==))) { 42 | | None => Belt.Result.Error(["No attribute 'text'"]) 43 | | Some(json) => 44 | switch (deserialize_Types____text(json)) { 45 | | Belt.Result.Error(error) => 46 | Belt.Result.Error(["attribute 'text'", ...error]) 47 | | Belt.Result.Ok(data) => inner(data) 48 | } 49 | }; 50 | }; 51 | switch (Belt.List.getAssoc(items, "id", (==))) { 52 | | None => Belt.Result.Error(["No attribute 'id'"]) 53 | | Some(json) => 54 | switch (deserialize_Types____id(json)) { 55 | | Belt.Result.Error(error) => 56 | Belt.Result.Error(["attribute 'id'", ...error]) 57 | | Belt.Result.Ok(data) => inner(data) 58 | } 59 | }; 60 | }; 61 | switch (Belt.List.getAssoc(items, "completed", (==))) { 62 | | None => inner(None) 63 | | Some(json) => 64 | switch ( 65 | ( 66 | ( 67 | (transformer, option) => 68 | switch (option) { 69 | | `Null => Belt.Result.Ok(None) 70 | | _ => 71 | switch (transformer(option)) { 72 | | Belt.Result.Error(error) => 73 | Belt.Result.Error(["optional value", ...error]) 74 | | Belt.Result.Ok(value) => Belt.Result.Ok(Some(value)) 75 | } 76 | } 77 | )( 78 | number => 79 | switch (number) { 80 | | `Float(number) => Belt.Result.Ok(int_of_float(number)) 81 | | _ => Error(["Expected a float"]) 82 | } 83 | ) 84 | )( 85 | json, 86 | ) 87 | ) { 88 | | Belt.Result.Error(error) => 89 | Belt.Result.Error(["attribute 'completed'", ...error]) 90 | | Belt.Result.Ok(data) => inner(data) 91 | } 92 | }; 93 | | _ => Belt.Result.Error(["Expected an object"]) 94 | } 95 | and deserialize_Types____todos: 96 | Ezjsonm.value => Belt.Result.t(_Types__todos, list(string)) = 97 | value => 98 | ( 99 | list => 100 | switch (list) { 101 | | `A(items) => 102 | let transformer = deserialize_Types____todo; 103 | let rec loop = (collected, items) => 104 | switch (items) { 105 | | [] => Belt.Result.Ok(Belt.List.reverse(collected)) 106 | | [one, ...rest] => 107 | switch (transformer(one)) { 108 | | Belt.Result.Error(error) => 109 | Belt.Result.Error(["list item", ...error]) 110 | | Belt.Result.Ok(value) => loop([value, ...collected], rest) 111 | } 112 | }; 113 | loop([], items); 114 | | _ => Belt.Result.Error(["expected an array"]) 115 | } 116 | )( 117 | value, 118 | ) 119 | and serialize_Types____id: _Types__id => Ezjsonm.value = 120 | value => (i => `Float(float_of_int(i)))(value) 121 | and serialize_Types____text: _Types__text => Ezjsonm.value = 122 | value => (s => `String(s))(value) 123 | and serialize_Types____todo: _Types__todo => Ezjsonm.value = 124 | record => 125 | `O([ 126 | ("text", serialize_Types____text(record.text)), 127 | ("id", serialize_Types____id(record.id)), 128 | ( 129 | "completed", 130 | ( 131 | ( 132 | transformer => 133 | fun 134 | | None => `Null 135 | | Some(v) => transformer(v) 136 | )( 137 | i => 138 | `Float(float_of_int(i)) 139 | ) 140 | )( 141 | record.completed, 142 | ), 143 | ), 144 | ]) 145 | and serialize_Types____todos: _Types__todos => Ezjsonm.value = 146 | value => 147 | (list => `A(Belt.List.map(list, serialize_Types____todo)))(value); 148 | }; 149 | module Current = Version1; 150 | let parseVersion = json => 151 | switch (json) { 152 | | `O(items) => 153 | switch ((Belt.List.getAssoc(items))("$schemaVersion", (==))) { 154 | | Some(`Float(schemaVersion)) => 155 | [@implicit_arity] Belt.Result.Ok(int_of_float(schemaVersion), json) 156 | | Some(_) => Belt.Result.Error("Invalid schema version - expected number") 157 | | None => Belt.Result.Error("No $schemaVersion") 158 | } 159 | | `A([`Float(version), payload]) => 160 | [@implicit_arity] Belt.Result.Ok(int_of_float(version), payload) 161 | | _ => Belt.Result.Error("Not wrapped in a version") 162 | }; 163 | let wrapWithVersion = (version, payload) => 164 | switch (payload) { 165 | | `O(items) => 166 | `O([("$schemaVersion", `Float(float_of_int(version))), ...items]) 167 | | _ => `A([`Float(float_of_int(version)), payload]) 168 | }; 169 | let serializeTodo = data => 170 | wrapWithVersion(currentVersion, Version1.serialize_Types____todo(data)) 171 | and deserializeTodo = data => 172 | switch (parseVersion(data)) { 173 | | Belt.Result.Error(err) => Belt.Result.Error([err]) 174 | | [@implicit_arity] Ok(version, data) => 175 | switch (version) { 176 | | 1 => 177 | switch (Version1.deserialize_Types____todo(data)) { 178 | | Belt.Result.Error(error) => Belt.Result.Error(error) 179 | | Ok(data) => Belt.Result.Ok(data) 180 | } 181 | | _ => 182 | Belt.Result.Error(["Unexpected version " ++ string_of_int(version)]) 183 | } 184 | }; 185 | let serializeTodos = data => 186 | wrapWithVersion(currentVersion, Version1.serialize_Types____todos(data)) 187 | and deserializeTodos = data => 188 | switch (parseVersion(data)) { 189 | | Belt.Result.Error(err) => Belt.Result.Error([err]) 190 | | [@implicit_arity] Ok(version, data) => 191 | switch (version) { 192 | | 1 => 193 | switch (Version1.deserialize_Types____todos(data)) { 194 | | Belt.Result.Error(error) => Belt.Result.Error(error) 195 | | Ok(data) => Belt.Result.Ok(data) 196 | } 197 | | _ => 198 | Belt.Result.Error(["Unexpected version " ++ string_of_int(version)]) 199 | } 200 | }; 201 | let serializeId = data => 202 | wrapWithVersion(currentVersion, Version1.serialize_Types____id(data)) 203 | and deserializeId = data => 204 | switch (parseVersion(data)) { 205 | | Belt.Result.Error(err) => Belt.Result.Error([err]) 206 | | [@implicit_arity] Ok(version, data) => 207 | switch (version) { 208 | | 1 => 209 | switch (Version1.deserialize_Types____id(data)) { 210 | | Belt.Result.Error(error) => Belt.Result.Error(error) 211 | | Ok(data) => Belt.Result.Ok(data) 212 | } 213 | | _ => 214 | Belt.Result.Error(["Unexpected version " ++ string_of_int(version)]) 215 | } 216 | }; 217 | let serializeText = data => 218 | wrapWithVersion(currentVersion, Version1.serialize_Types____text(data)) 219 | and deserializeText = data => 220 | switch (parseVersion(data)) { 221 | | Belt.Result.Error(err) => Belt.Result.Error([err]) 222 | | [@implicit_arity] Ok(version, data) => 223 | switch (version) { 224 | | 1 => 225 | switch (Version1.deserialize_Types____text(data)) { 226 | | Belt.Result.Error(error) => Belt.Result.Error(error) 227 | | Ok(data) => Belt.Result.Ok(data) 228 | } 229 | | _ => 230 | Belt.Result.Error(["Unexpected version " ++ string_of_int(version)]) 231 | } 232 | }; 233 | module Modules = { 234 | module Todo = { 235 | type t = Types1._Types__todo; 236 | let serialize = serializeTodo; 237 | let deserialize = deserializeTodo; 238 | }; 239 | module Todos = { 240 | type t = Types1._Types__todos; 241 | let serialize = serializeTodos; 242 | let deserialize = deserializeTodos; 243 | }; 244 | module Id = { 245 | type t = Types1._Types__id; 246 | let serialize = serializeId; 247 | let deserialize = deserializeId; 248 | }; 249 | module Text = { 250 | type t = Types1._Types__text; 251 | let serialize = serializeText; 252 | let deserialize = deserializeText; 253 | }; 254 | }; 255 | -------------------------------------------------------------------------------- /src/shared/server/dune: -------------------------------------------------------------------------------- 1 | (library (name Serde) (public_name isomagic-shared.Serde) 2 | (flags -open All_types) 3 | (libraries All_types ezjsonm belt) 4 | ) -------------------------------------------------------------------------------- /types.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schemaVersion": 2, 3 | "version": 1, 4 | "lockedTypes": "./src/shared/LockedTypes.re", 5 | "engines": { 6 | "Js.Json": { 7 | "output": "./src/client/Serde.re" 8 | }, 9 | "ezjsonm": { 10 | "output": "./src/server/Serde.re" 11 | } 12 | }, 13 | "entries": [ 14 | { "file": "./src/shared/Types.re", "type": "todo" }, 15 | { "file": "./src/shared/Types.re", "type": "todos" }, 16 | { "file": "./src/shared/Types.re", "type": "id" }, 17 | { "file": "./src/shared/Types.re", "type": "text" } 18 | ], 19 | "custom": [] 20 | } 21 | -------------------------------------------------------------------------------- /types.lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schemaVersion": 2, 3 | "versions": [ 4 | { 5 | "entries": [ 6 | { 7 | "moduleName": "Types", 8 | "modulePath": [], 9 | "engines": [ 10 | [ 11 | ["ezjsonm"], 12 | 1 13 | ], 14 | [ 15 | ["Js.Json"], 16 | 1 17 | ] 18 | ], 19 | "name": "todo" 20 | }, 21 | { 22 | "moduleName": "Types", 23 | "modulePath": [], 24 | "engines": [ 25 | [ 26 | ["ezjsonm"], 27 | 1 28 | ], 29 | [ 30 | ["Js.Json"], 31 | 1 32 | ] 33 | ], 34 | "name": "todos" 35 | }, 36 | { 37 | "moduleName": "Types", 38 | "modulePath": [], 39 | "engines": [ 40 | [ 41 | ["ezjsonm"], 42 | 1 43 | ], 44 | [ 45 | ["Js.Json"], 46 | 1 47 | ] 48 | ], 49 | "name": "id" 50 | }, 51 | { 52 | "moduleName": "Types", 53 | "modulePath": [], 54 | "engines": [ 55 | [ 56 | ["ezjsonm"], 57 | 1 58 | ], 59 | [ 60 | ["Js.Json"], 61 | 1 62 | ] 63 | ], 64 | "name": "text" 65 | } 66 | ], 67 | "typeMap": [ 68 | [ 69 | [ 70 | "Types", 71 | [], 72 | "id" 73 | ], 74 | [ 75 | [], 76 | { 77 | "name": "id", 78 | "variables": [], 79 | "body": [ 80 | "Expr", 81 | [ 82 | "Reference", 83 | [ 84 | "Builtin", 85 | "int" 86 | ], 87 | [] 88 | ] 89 | ] 90 | } 91 | ] 92 | ], 93 | [ 94 | [ 95 | "Types", 96 | [], 97 | "text" 98 | ], 99 | [ 100 | [], 101 | { 102 | "name": "text", 103 | "variables": [], 104 | "body": [ 105 | "Expr", 106 | [ 107 | "Reference", 108 | [ 109 | "Builtin", 110 | "string" 111 | ], 112 | [] 113 | ] 114 | ] 115 | } 116 | ] 117 | ], 118 | [ 119 | [ 120 | "Types", 121 | [], 122 | "todo" 123 | ], 124 | [ 125 | [], 126 | { 127 | "name": "todo", 128 | "variables": [], 129 | "body": [ 130 | "Record", 131 | [ 132 | [ 133 | "text", 134 | [ 135 | "Reference", 136 | [ 137 | "Public", 138 | [ 139 | "Types", 140 | [], 141 | "text" 142 | ] 143 | ], 144 | [] 145 | ] 146 | ], 147 | [ 148 | "id", 149 | [ 150 | "Reference", 151 | [ 152 | "Public", 153 | [ 154 | "Types", 155 | [], 156 | "id" 157 | ] 158 | ], 159 | [] 160 | ] 161 | ], 162 | [ 163 | "completed", 164 | [ 165 | "Reference", 166 | [ 167 | "Builtin", 168 | "option" 169 | ], 170 | [ 171 | [ 172 | "Reference", 173 | [ 174 | "Builtin", 175 | "int" 176 | ], 177 | [] 178 | ] 179 | ] 180 | ] 181 | ] 182 | ] 183 | ] 184 | } 185 | ] 186 | ], 187 | [ 188 | [ 189 | "Types", 190 | [], 191 | "todos" 192 | ], 193 | [ 194 | [], 195 | { 196 | "name": "todos", 197 | "variables": [], 198 | "body": [ 199 | "Expr", 200 | [ 201 | "Reference", 202 | [ 203 | "Builtin", 204 | "list" 205 | ], 206 | [ 207 | [ 208 | "Reference", 209 | [ 210 | "Public", 211 | [ 212 | "Types", 213 | [], 214 | "todo" 215 | ] 216 | ], 217 | [] 218 | ] 219 | ] 220 | ] 221 | ] 222 | } 223 | ] 224 | ] 225 | ] 226 | } 227 | ] 228 | } -------------------------------------------------------------------------------- /webpack.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | mode: 'development', 3 | entry: './lib/js/src/client/app.js', 4 | output: { 5 | path: __dirname +'/public', 6 | filename: 'bundle.js', 7 | }, 8 | }; 9 | --------------------------------------------------------------------------------