diff --git a/esy.lock/overrides/opam__s__ocamlbuild_opam__c__0.14.2+win_opam_override/files/ocamlbuild-0.14.2.patch b/.ocamlformat similarity index 100% rename from esy.lock/overrides/opam__s__ocamlbuild_opam__c__0.14.2+win_opam_override/files/ocamlbuild-0.14.2.patch rename to .ocamlformat diff --git a/bin/Color.ml b/bin/Color.ml new file mode 100644 index 00000000..b2ea7775 --- /dev/null +++ b/bin/Color.ml @@ -0,0 +1,21 @@ +let ofHexString s = + if String.length s = 4 || String.length s = 7 then + let short = String.length s = 4 in + let r' = + match short with true -> String.sub s 1 1 | false -> String.sub s 1 2 + in + let g' = + match short with true -> String.sub s 2 1 | false -> String.sub s 3 2 + in + let b' = + match short with true -> String.sub s 3 1 | false -> String.sub s 5 2 + in + let r = int_of_string_opt ("0x" ^ r') in + let g = int_of_string_opt ("0x" ^ g') in + let b = int_of_string_opt ("0x" ^ b') in + match (r, g, b) with + | Some r, Some g, Some b when short -> + Some ((16 * r) + r, (16 * g) + g, (16 * b) + b) + | Some r, Some g, Some b -> Some (r, g, b) + | _ -> None + else None diff --git a/bin/Color.re b/bin/Color.re deleted file mode 100644 index abe35c89..00000000 --- a/bin/Color.re +++ /dev/null @@ -1,19 +0,0 @@ -let ofHexString = s => - if (String.length(s) == 4 || String.length(s) == 7) { - let short = String.length(s) == 4; - let r' = short ? String.sub(s, 1, 1) : String.sub(s, 1, 2); - let g' = short ? String.sub(s, 2, 1) : String.sub(s, 3, 2); - let b' = short ? String.sub(s, 3, 1) : String.sub(s, 5, 2); - - let r = int_of_string_opt("0x" ++ r'); - let g = int_of_string_opt("0x" ++ g'); - let b = int_of_string_opt("0x" ++ b'); - - switch (r, g, b) { - | (Some(r), Some(g), Some(b)) when short => Some((16 * r + r, 16 * g + g, 16 * b + b)) - | (Some(r), Some(g), Some(b)) => Some((r, g, b)) - | _ => None - }; - } else { - None; - }; diff --git a/bin/Main.ml b/bin/Main.ml new file mode 100644 index 00000000..e7232cda --- /dev/null +++ b/bin/Main.ml @@ -0,0 +1,45 @@ +open Odiff.ImageIO +open Odiff.Diff + +let getIOModule filename = + Filename.extension filename |> function + | ".png" -> (module ODiffIO.Png.IO : ImageIO) + | ".jpg" | ".jpeg" -> (module ODiffIO.Jpg.IO : ImageIO) + | ".bmp" -> (module ODiffIO.Bmp.IO : ImageIO) + | ".tiff" -> (module ODiffIO.Tiff.IO : ImageIO) + | f -> failwith ("This format is not supported: " ^ f) + +type 'output diffResult = { exitCode : int; diff : 'output option } + +let main img1Path img2Path diffPath threshold outputDiffMask failOnLayoutChange + diffColorHex stdoutParsableString antialiasing ignoreRegions diffLines = + let module IO1 = (val getIOModule img1Path) in + let module IO2 = (val getIOModule img2Path) in + let module Diff = MakeDiff (IO1) (IO2) in + let img1 = IO1.loadImage img1Path in + let img2 = IO2.loadImage img2Path in + let { diff; exitCode } = + Diff.diff img1 img2 ~outputDiffMask ~threshold ~failOnLayoutChange + ~antialiasing ~ignoreRegions ~diffLines + ~diffPixel: + (Color.ofHexString diffColorHex |> function + | Some col -> col + | None -> (255, 0, 0)) + () + |> Print.printDiffResult stdoutParsableString + |> function + | Layout -> { diff = None; exitCode = 21 } + | Pixel (diffOutput, diffCount, stdoutParsableString, _) when diffCount = 0 + -> + { exitCode = 0; diff = Some diffOutput } + | Pixel (diffOutput, diffCount, diffPercentage, _) -> + IO1.saveImage diffOutput diffPath; + { exitCode = 22; diff = Some diffOutput } + in + IO1.freeImage img1; + IO2.freeImage img2; + (match diff with + | ((Some output) [@explicit_arity]) when outputDiffMask -> + IO1.freeImage output + | _ -> ()); + exit exitCode diff --git a/bin/Main.re b/bin/Main.re deleted file mode 100644 index 255b8d5b..00000000 --- a/bin/Main.re +++ /dev/null @@ -1,86 +0,0 @@ -open Odiff.ImageIO; -open Odiff.Diff; - -let getIOModule = filename => - Filename.extension(filename) - |> ( - fun - | ".png" => ((module ODiffIO.Png.IO): (module ImageIO)) - | ".jpg" - | ".jpeg" => ((module ODiffIO.Jpg.IO): (module ImageIO)) - | ".bmp" => ((module ODiffIO.Bmp.IO): (module ImageIO)) - | ".tiff" => ((module ODiffIO.Tiff.IO): (module ImageIO)) - | f => failwith("This format is not supported: " ++ f) - ); - -type diffResult('output) = { - exitCode: int, - diff: option('output), -}; - -let main = - ( - img1Path, - img2Path, - diffPath, - threshold, - outputDiffMask, - failOnLayoutChange, - diffColorHex, - stdoutParsableString, - antialiasing, - ignoreRegions, - diffLines, - ) => { - module IO1 = (val getIOModule(img1Path)); - module IO2 = (val getIOModule(img2Path)); - - module Diff = MakeDiff(IO1, IO2); - - let img1 = IO1.loadImage(img1Path); - let img2 = IO2.loadImage(img2Path); - - let {diff, exitCode} = - Diff.diff( - img1, - img2, - ~outputDiffMask, - ~threshold, - ~failOnLayoutChange, - ~antialiasing, - ~ignoreRegions, - ~diffLines, - ~diffPixel= - Color.ofHexString(diffColorHex) - |> ( - fun - | Some(col) => col - | None => (255, 0, 0) // red - ), - (), - ) - |> Print.printDiffResult(stdoutParsableString) - |> ( - fun - | Layout => {diff: None, exitCode: 21} - | Pixel((diffOutput, diffCount, stdoutParsableString, _)) - when diffCount == 0 => { - exitCode: 0, - diff: Some(diffOutput), - } - | Pixel((diffOutput, diffCount, diffPercentage, _)) => { - IO1.saveImage(diffOutput, diffPath); - {exitCode: 22, diff: Some(diffOutput)}; - } - ); - - IO1.freeImage(img1); - IO2.freeImage(img2); - - switch (diff) { - | Some(output) when outputDiffMask => IO1.freeImage(output) - | _ => () - }; - - exit(exitCode); -}; diff --git a/bin/ODiffBin.ml b/bin/ODiffBin.ml new file mode 100644 index 00000000..03e65964 --- /dev/null +++ b/bin/ODiffBin.ml @@ -0,0 +1,98 @@ +open Cmdliner + +let diffPath = + let open Arg in + value & pos 2 string "" + & info [] ~docv:"DIFF" ~doc:"Diff output path (.png only)" + +let base = + let open Arg in + value & pos 0 file "" & info [] ~docv:"BASE" ~doc:"Path to base image" + +let comp = + let open Arg in + value & pos 1 file "" + & info [] ~docv:"COMPARING" ~doc:"Path to comparing image" + +let threshold = + let open Arg in + value & opt float 0.1 + & info [ "t"; "threshold" ] ~docv:"THRESHOLD" + ~doc:"Color difference threshold (from 0 to 1). Less more precise." + +let diffMask = + let open Arg in + value & flag + & info [ "dm"; "diff-mask" ] ~docv:"DIFF_IMAGE" + ~doc:"Output only changed pixel over transparent background." + +let failOnLayout = + let open Arg in + value & flag + & info [ "fail-on-layout" ] ~docv:"FAIL_ON_LAYOUT" + ~doc: + "Do not compare images and produce output if images layout is \ + different." + +let parsableOutput = + let open Arg in + value & flag + & info [ "parsable-stdout" ] ~docv:"PARSABLE_OUTPUT" + ~doc:"Stdout parsable output" + +let diffColor = + let open Arg in + value & opt string "" + & info [ "diff-color" ] + ~doc: + "Color used to highlight different pixels in the output (in hex format \ + e.g. #cd2cc9)." + +let antialiasing = + let open Arg in + value & flag + & info [ "aa"; "antialiasing" ] + ~doc: + "With this flag enabled, antialiased pixels are not counted to the \ + diff of an image" + +let diffLines = + let open Arg in + value & flag + & info [ "output-diff-lines" ] + ~doc: + "With this flag enabled, output result in case of different images \ + will output lines for all the different pixels" + +let ignoreRegions = + let open Arg in + value + & opt + (list ~sep:',' (t2 ~sep:'-' (t2 ~sep:':' int int) (t2 ~sep:':' int int))) + [] + & info [ "i"; "ignore" ] + ~doc: + "An array of regions to ignore in the diff. One region looks like \ + \"x1:y1-x2:y2\". Multiple regions are separated with a ','." + +let cmd = + let man = + [ + `S Manpage.s_description; + `P "$(tname) is the fastest pixel-by-pixel image comparison tool."; + `P "Supported image types: .png, .jpg, .jpeg, .bitmap"; + ] + in + ( (let open Term in + const Main.main $ base $ comp $ diffPath $ threshold $ diffMask + $ failOnLayout $ diffColor $ parsableOutput $ antialiasing $ ignoreRegions + $ diffLines), + Term.info "odiff" ~version:"2.6.1" ~doc:"Find difference between 2 images." + ~exits: + (Term.exit_info 0 ~doc:"on image match" + :: Term.exit_info 21 ~doc:"on layout diff when --fail-on-layout" + :: Term.exit_info 22 ~doc:"on image pixel difference" + :: Term.default_error_exits) + ~man ) + +let () = Term.eval cmd |> Term.exit diff --git a/bin/ODiffBin.re b/bin/ODiffBin.re deleted file mode 100644 index d64e23b9..00000000 --- a/bin/ODiffBin.re +++ /dev/null @@ -1,161 +0,0 @@ -open Cmdliner; - -let diffPath = - Arg.( - value - & pos(2, string, "") - & info([], ~docv="DIFF", ~doc="Diff output path (.png only)") - ); - -let base = - Arg.( - value - & pos(0, file, "") - & info([], ~docv="BASE", ~doc="Path to base image") - ); - -let comp = - Arg.( - value - & pos(1, file, "") - & info([], ~docv="COMPARING", ~doc="Path to comparing image") - ); - -let threshold = { - Arg.( - value - & opt(float, 0.1) - & info( - ["t", "threshold"], - ~docv="THRESHOLD", - ~doc="Color difference threshold (from 0 to 1). Less more precise.", - ) - ); -}; - -let diffMask = { - Arg.( - value - & flag - & info( - ["dm", "diff-mask"], - ~docv="DIFF_IMAGE", - ~doc="Output only changed pixel over transparent background.", - ) - ); -}; - -let failOnLayout = - Arg.( - value - & flag - & info( - ["fail-on-layout"], - ~docv="FAIL_ON_LAYOUT", - ~doc= - "Do not compare images and produce output if images layout is different.", - ) - ); - -let parsableOutput = - Arg.( - value - & flag - & info( - ["parsable-stdout"], - ~docv="PARSABLE_OUTPUT", - ~doc="Stdout parsable output", - ) - ); - -let diffColor = - Arg.( - value - & opt(string, "") - & info( - ["diff-color"], - ~doc= - "Color used to highlight different pixels in the output (in hex format e.g. #cd2cc9).", - ) - ); - -let antialiasing = { - Arg.( - value - & flag - & info( - ["aa", "antialiasing"], - ~doc= - "With this flag enabled, antialiased pixels are not counted to the diff of an image", - ) - ); -}; - -let diffLines = { - Arg.( - value - & flag - & info( - ["output-diff-lines"], - ~doc= - "With this flag enabled, output result in case of different images will output lines for all the different pixels", - ) - ); -}; - -let ignoreRegions = { - Arg.( - value - & opt( - list( - ~sep=',', - t2(~sep='-', t2(~sep=':', int, int), t2(~sep=':', int, int)), - ), - [], - ) - & info( - ["i", "ignore"], - ~doc= - "An array of regions to ignore in the diff. One region looks like \"x1:y1-x2:y2\". Multiple regions are separated with a ','.", - ) - ); -}; - -let cmd = { - let man = [ - `S(Manpage.s_description), - `P("$(tname) is the fastest pixel-by-pixel image comparison tool."), - `P("Supported image types: .png, .jpg, .jpeg, .bitmap"), - ]; - - ( - Term.( - const(Main.main) - $ base - $ comp - $ diffPath - $ threshold - $ diffMask - $ failOnLayout - $ diffColor - $ parsableOutput - $ antialiasing - $ ignoreRegions - $ diffLines - ), - Term.info( - "odiff", - ~version="2.6.1", - ~doc="Find difference between 2 images.", - ~exits=[ - Term.exit_info(0, ~doc="on image match"), - Term.exit_info(21, ~doc="on layout diff when --fail-on-layout"), - Term.exit_info(22, ~doc="on image pixel difference"), - ...Term.default_error_exits, - ], - ~man, - ), - ); -}; - -let () = Term.eval(cmd) |> Term.exit; diff --git a/bin/Print.ml b/bin/Print.ml new file mode 100644 index 00000000..239c37c9 --- /dev/null +++ b/bin/Print.ml @@ -0,0 +1,53 @@ +open Odiff.Diff + +let printDiffResult makeParsableOutput result = + (match (result, makeParsableOutput) with + | Layout, true -> "" + | Layout, false -> + Pastel.createElement + ~children: + [ + (Pastel.createElement ~color:Red ~bold:true ~children:[ "Failure!" ] + () [@JSX]); + " Images have different layout.\n"; + ] + () [@JSX] + | Pixel (_output, diffCount, _percentage, _lines), true when diffCount == 0 -> + "" + | Pixel (_output, diffCount, _percentage, _lines), false when diffCount == 0 + -> + Pastel.createElement + ~children: + [ + (Pastel.createElement ~color:Green ~bold:true + ~children:[ "Success!" ] () [@JSX]); + " Images are equal.\n"; + (Pastel.createElement ~dim:true + ~children:[ "No diff output created." ] + () [@JSX]); + ] + () [@JSX] + | Pixel (_output, diffCount, diffPercentage, stack), true + when not (Stack.is_empty stack) -> + Int.to_string diffCount ^ ";" + ^ Float.to_string diffPercentage + ^ ";" + ^ (stack + |> Stack.fold (fun acc line -> (line |> Int.to_string) ^ "," ^ acc) "") + | Pixel (_output, diffCount, diffPercentage, _), true -> + Int.to_string diffCount ^ ";" ^ Float.to_string diffPercentage + | Pixel (_output, diffCount, diffPercentage, _lines), false -> + Pastel.createElement + ~children: + [ + (Pastel.createElement ~color:Red ~bold:true ~children:[ "Failure!" ] + () [@JSX]); + " Images are different.\n"; + "Different pixels: "; + (Pastel.createElement ~color:Red ~bold:true + ~children:[ Printf.sprintf "%i (%f%%)" diffCount diffPercentage ] + () [@JSX]); + ] + () [@JSX]) + |> Console.log; + result diff --git a/bin/Print.re b/bin/Print.re deleted file mode 100644 index 996e70b9..00000000 --- a/bin/Print.re +++ /dev/null @@ -1,55 +0,0 @@ -open Odiff.Diff; - -let printDiffResult = (makeParsableOutput, result) => { - ( - switch (result, makeParsableOutput) { - | (Layout, true) => "" - | (Layout, false) => - - "Failure! " - "Images have different layout.\n" - - - // SUCCESS - | (Pixel((_output, diffCount, _percentage, _lines)), true) - when diffCount === 0 => "" - | (Pixel((_output, diffCount, _percentage, _lines)), false) - when diffCount === 0 => - - "Success! " - "Images are equal.\n" - "No diff output created." - - - // FAILURE - | (Pixel((_output, diffCount, diffPercentage, stack)), true) when !Stack.is_empty(stack) => - Int.to_string(diffCount) - ++ ";" - ++ Float.to_string(diffPercentage) - ++ ";" - ++ ( - stack - |> Stack.fold( - (acc, line) => (line |> Int.to_string) ++ "," ++ acc, - "", - ) - ) - - | (Pixel((_output, diffCount, diffPercentage, _)), true) => - Int.to_string(diffCount) ++ ";" ++ Float.to_string(diffPercentage) - - | (Pixel((_output, diffCount, diffPercentage, _lines)), false) => - - "Failure! " - "Images are different.\n" - "Different pixels: " - - {Printf.sprintf("%i (%f%%)", diffCount, diffPercentage)} - - - } - ) - |> Console.log; - - result; -}; diff --git a/bin/dune b/bin/dune index 74d00c59..78ee6dc9 100644 --- a/bin/dune +++ b/bin/dune @@ -2,5 +2,6 @@ (name ODiffBin) (public_name ODiffBin) (package odiff) - (flags (:standard -w -27)) - (libraries console.lib pastel.lib odiff-core odiff-io cmdliner)) \ No newline at end of file + (flags + (:standard -w -27)) + (libraries console.lib pastel.lib odiff-core odiff-io cmdliner)) diff --git a/esy.lock/index.json b/esy.lock/index.json index c6ed0da2..f3c71cfa 100644 --- a/esy.lock/index.json +++ b/esy.lock/index.json @@ -30,7 +30,7 @@ "dependencies": [ "yargs-parser@20.2.9@d41d8cd9", "y18n@5.0.8@d41d8cd9", "string-width@4.2.3@d41d8cd9", "require-directory@2.1.1@d41d8cd9", - "get-caller-file@2.0.5@d41d8cd9", "escalade@3.1.1@d41d8cd9", + "get-caller-file@2.0.5@d41d8cd9", "escalade@3.1.2@d41d8cd9", "cliui@7.0.4@d41d8cd9" ], "devDependencies": [] @@ -224,7 +224,7 @@ "overrides": [], "dependencies": [ "xdg-basedir@4.0.0@d41d8cd9", "semver-diff@3.1.1@d41d8cd9", - "semver@7.5.4@d41d8cd9", "pupa@2.1.1@d41d8cd9", + "semver@7.6.0@d41d8cd9", "pupa@2.1.1@d41d8cd9", "latest-version@5.1.0@d41d8cd9", "is-yarn-global@0.3.0@d41d8cd9", "is-npm@5.0.0@d41d8cd9", "is-installed-globally@0.4.0@d41d8cd9", "is-ci@2.0.0@d41d8cd9", "import-lazy@2.1.0@d41d8cd9", @@ -563,14 +563,14 @@ "dependencies": [], "devDependencies": [] }, - "spdx-license-ids@3.0.13@d41d8cd9": { - "id": "spdx-license-ids@3.0.13@d41d8cd9", + "spdx-license-ids@3.0.17@d41d8cd9": { + "id": "spdx-license-ids@3.0.17@d41d8cd9", "name": "spdx-license-ids", - "version": "3.0.13", + "version": "3.0.17", "source": { "type": "install", "source": [ - "archive:https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.13.tgz#sha1:7189a474c46f8d47c7b0da4b987bb45e908bd2d5" + "archive:https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.17.tgz#sha1:887da8aa73218e51a1d917502d79863161a93f9c" ] }, "overrides": [], @@ -589,18 +589,18 @@ }, "overrides": [], "dependencies": [ - "spdx-license-ids@3.0.13@d41d8cd9", "spdx-exceptions@2.3.0@d41d8cd9" + "spdx-license-ids@3.0.17@d41d8cd9", "spdx-exceptions@2.5.0@d41d8cd9" ], "devDependencies": [] }, - "spdx-exceptions@2.3.0@d41d8cd9": { - "id": "spdx-exceptions@2.3.0@d41d8cd9", + "spdx-exceptions@2.5.0@d41d8cd9": { + "id": "spdx-exceptions@2.5.0@d41d8cd9", "name": "spdx-exceptions", - "version": "2.3.0", + "version": "2.5.0", "source": { "type": "install", "source": [ - "archive:https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz#sha1:3f28ce1a77a00372683eade4a433183527a2163d" + "archive:https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.5.0.tgz#sha1:5d607d27fc806f66d7b64a766650fa890f04ed66" ] }, "overrides": [], @@ -619,7 +619,7 @@ }, "overrides": [], "dependencies": [ - "spdx-license-ids@3.0.13@d41d8cd9", + "spdx-license-ids@3.0.17@d41d8cd9", "spdx-expression-parse@3.0.1@d41d8cd9" ], "devDependencies": [] @@ -741,14 +741,14 @@ "dependencies": [ "semver@6.3.1@d41d8cd9" ], "devDependencies": [] }, - "semver@7.5.4@d41d8cd9": { - "id": "semver@7.5.4@d41d8cd9", + "semver@7.6.0@d41d8cd9": { + "id": "semver@7.6.0@d41d8cd9", "name": "semver", - "version": "7.5.4", + "version": "7.6.0", "source": { "type": "install", "source": [ - "archive:https://registry.npmjs.org/semver/-/semver-7.5.4.tgz#sha1:483986ec4ed38e1c6c48c34894a9182dbff68a6e" + "archive:https://registry.npmjs.org/semver/-/semver-7.6.0.tgz#sha1:1a46a4db4bffcccd97b743b5005c8325f23d4e2d" ] }, "overrides": [], @@ -897,20 +897,20 @@ "dependencies": [ "resolve-from@5.0.0@d41d8cd9" ], "devDependencies": [] }, - "resolve@1.22.4@d41d8cd9": { - "id": "resolve@1.22.4@d41d8cd9", + "resolve@1.22.8@d41d8cd9": { + "id": "resolve@1.22.8@d41d8cd9", "name": "resolve", - "version": "1.22.4", + "version": "1.22.8", "source": { "type": "install", "source": [ - "archive:https://registry.npmjs.org/resolve/-/resolve-1.22.4.tgz#sha1:1dc40df46554cdaf8948a486a10f6ba1e2026c34" + "archive:https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz#sha1:b6c87a9f2aa06dfab52e3d70ac8cde321fa5a48d" ] }, "overrides": [], "dependencies": [ "supports-preserve-symlinks-flag@1.0.0@d41d8cd9", - "path-parse@1.0.7@d41d8cd9", "is-core-module@2.13.0@d41d8cd9" + "path-parse@1.0.7@d41d8cd9", "is-core-module@2.13.1@d41d8cd9" ], "devDependencies": [] }, @@ -971,9 +971,9 @@ "ocaml@4.14.1000@d41d8cd9", "@reason-native/pastel@github:reasonml/reason-native:pastel.json#a0ddab6ab25237961e32d8732b0a222ec2372d4a@d41d8cd9", "@reason-native/console@github:reasonml/reason-native:console.json#a0ddab6ab25237961e32d8732b0a222ec2372d4a@d41d8cd9", - "@opam/reason@opam:3.9.0@2a7c0e6f", "@opam/re@opam:1.10.4@c4910ba6", - "@opam/dune@opam:3.10.0@d5991a42", - "@opam/atdgen@opam:2.12.0@bc126d9d" + "@opam/reason@opam:3.9.0@2a7c0e6f", "@opam/re@opam:1.11.0@87deb463", + "@opam/dune@opam:3.14.0@bfa03801", + "@opam/atdgen@opam:2.12.0@205ff7f3" ], "devDependencies": [ "ocaml@4.14.1000@d41d8cd9", "@opam/reason@opam:3.9.0@2a7c0e6f" @@ -1024,7 +1024,7 @@ "dependencies": [ "type-fest@0.6.0@d41d8cd9", "parse-json@5.2.0@d41d8cd9", "normalize-package-data@2.5.0@d41d8cd9", - "@types/normalize-package-data@2.4.1@d41d8cd9" + "@types/normalize-package-data@2.4.4@d41d8cd9" ], "devDependencies": [] }, @@ -1287,7 +1287,7 @@ "dependencies": [ "lines-and-columns@1.2.4@d41d8cd9", "json-parse-even-better-errors@2.3.1@d41d8cd9", - "error-ex@1.3.2@d41d8cd9", "@babel/code-frame@7.22.10@d41d8cd9" + "error-ex@1.3.2@d41d8cd9", "@babel/code-frame@7.23.5@d41d8cd9" ], "devDependencies": [] }, @@ -1478,7 +1478,7 @@ "dependencies": [ "wcwidth@1.0.1@d41d8cd9", "strip-ansi@6.0.1@d41d8cd9", "log-symbols@4.1.0@d41d8cd9", "is-unicode-supported@0.1.0@d41d8cd9", - "is-interactive@1.0.0@d41d8cd9", "cli-spinners@2.9.0@d41d8cd9", + "is-interactive@1.0.0@d41d8cd9", "cli-spinners@2.9.2@d41d8cd9", "cli-cursor@3.1.0@d41d8cd9", "chalk@4.1.2@d41d8cd9", "bl@4.1.0@d41d8cd9" ], @@ -1532,16 +1532,17 @@ "@reason-native/pastel@github:reasonml/reason-native:pastel.json#a0ddab6ab25237961e32d8732b0a222ec2372d4a@d41d8cd9", "@reason-native/console@github:reasonml/reason-native:console.json#a0ddab6ab25237961e32d8732b0a222ec2372d4a@d41d8cd9", "@opam/reason@opam:3.9.0@2a7c0e6f", - "@opam/dune-configurator@opam:3.10.0@f2df97f2", - "@opam/dune@opam:3.10.0@d5991a42", + "@opam/ocaml-lsp-server@opam:1.17.0@12f65153", + "@opam/dune-configurator@opam:3.14.0@aa6780d6", + "@opam/dune@opam:3.14.0@bfa03801", "@opam/cmdliner@opam:1.0.4@93208aac" ], "devDependencies": [ "typescript@4.9.5@d41d8cd9", "simple-git-hooks@2.9.0@d41d8cd9", "refmterr@github:reasonml/reason-native:refmterr.json#a0ddab6ab25237961e32d8732b0a222ec2372d4a@d41d8cd9", - "ava@3.15.0@d41d8cd9", "@opam/odoc@opam:2.2.1@3e6e45b8", - "@opam/ocaml-lsp-server@opam:1.16.2@1425cb09", - "@opam/merlin@opam:4.9-414@e1587db3" + "ava@3.15.0@d41d8cd9", "@opam/odoc@opam:2.4.1@58f09945", + "@opam/ocaml-lsp-server@opam:1.17.0@12f65153", + "@opam/merlin@opam:4.13-414@3f34cd37" ] }, "ocaml@4.14.1000@d41d8cd9": { @@ -1599,7 +1600,7 @@ "overrides": [], "dependencies": [ "validate-npm-package-license@3.0.4@d41d8cd9", - "semver@5.7.2@d41d8cd9", "resolve@1.22.4@d41d8cd9", + "semver@5.7.2@d41d8cd9", "resolve@1.22.8@d41d8cd9", "hosted-git-info@2.8.9@d41d8cd9" ], "devDependencies": [] @@ -2276,18 +2277,18 @@ "dependencies": [], "devDependencies": [] }, - "is-core-module@2.13.0@d41d8cd9": { - "id": "is-core-module@2.13.0@d41d8cd9", + "is-core-module@2.13.1@d41d8cd9": { + "id": "is-core-module@2.13.1@d41d8cd9", "name": "is-core-module", - "version": "2.13.0", + "version": "2.13.1", "source": { "type": "install", "source": [ - "archive:https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.0.tgz#sha1:bb52aa6e2cbd49a30c2ba68c42bf3435ba6072db" + "archive:https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.1.tgz#sha1:ad0d7532c6fea9da1ebdc82742d74525c6273384" ] }, "overrides": [], - "dependencies": [ "has@1.0.3@d41d8cd9" ], + "dependencies": [ "hasown@2.0.1@d41d8cd9" ], "devDependencies": [] }, "is-ci@2.0.0@d41d8cd9": { @@ -2474,14 +2475,14 @@ "dependencies": [], "devDependencies": [] }, - "ignore@5.2.4@d41d8cd9": { - "id": "ignore@5.2.4@d41d8cd9", + "ignore@5.3.1@d41d8cd9": { + "id": "ignore@5.3.1@d41d8cd9", "name": "ignore", - "version": "5.2.4", + "version": "5.3.1", "source": { "type": "install", "source": [ - "archive:https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz#sha1:a291c0c6178ff1b960befe47fcdec301674a6324" + "archive:https://registry.npmjs.org/ignore/-/ignore-5.3.1.tgz#sha1:5073e554cd42c5b33b394375f538b8593e34d4ef" ] }, "overrides": [], @@ -2530,6 +2531,20 @@ "dependencies": [], "devDependencies": [] }, + "hasown@2.0.1@d41d8cd9": { + "id": "hasown@2.0.1@d41d8cd9", + "name": "hasown", + "version": "2.0.1", + "source": { + "type": "install", + "source": [ + "archive:https://registry.npmjs.org/hasown/-/hasown-2.0.1.tgz#sha1:26f48f039de2c0f8d3356c223fb8d50253519faa" + ] + }, + "overrides": [], + "dependencies": [ "function-bind@1.1.2@d41d8cd9" ], + "devDependencies": [] + }, "has-yarn@2.1.0@d41d8cd9": { "id": "has-yarn@2.1.0@d41d8cd9", "name": "has-yarn", @@ -2572,20 +2587,6 @@ "dependencies": [], "devDependencies": [] }, - "has@1.0.3@d41d8cd9": { - "id": "has@1.0.3@d41d8cd9", - "name": "has", - "version": "1.0.3", - "source": { - "type": "install", - "source": [ - "archive:https://registry.npmjs.org/has/-/has-1.0.3.tgz#sha1:722d7cbfc1f6aa8241f16dd814e011e1f41e8796" - ] - }, - "overrides": [], - "dependencies": [ "function-bind@1.1.1@d41d8cd9" ], - "devDependencies": [] - }, "graceful-fs@4.2.11@d41d8cd9": { "id": "graceful-fs@4.2.11@d41d8cd9", "name": "graceful-fs", @@ -2635,7 +2636,7 @@ "overrides": [], "dependencies": [ "slash@3.0.0@d41d8cd9", "merge2@1.4.1@d41d8cd9", - "ignore@5.2.4@d41d8cd9", "fast-glob@3.3.1@d41d8cd9", + "ignore@5.3.1@d41d8cd9", "fast-glob@3.3.2@d41d8cd9", "dir-glob@3.0.1@d41d8cd9", "array-union@2.1.0@d41d8cd9" ], "devDependencies": [] @@ -2728,28 +2729,14 @@ "dependencies": [], "devDependencies": [] }, - "function-bind@1.1.1@d41d8cd9": { - "id": "function-bind@1.1.1@d41d8cd9", + "function-bind@1.1.2@d41d8cd9": { + "id": "function-bind@1.1.2@d41d8cd9", "name": "function-bind", - "version": "1.1.1", - "source": { - "type": "install", - "source": [ - "archive:https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz#sha1:a56899d3ea3c9bab874bb9773b7c5ede92f4895d" - ] - }, - "overrides": [], - "dependencies": [], - "devDependencies": [] - }, - "fsevents@2.3.2@d41d8cd9": { - "id": "fsevents@2.3.2@d41d8cd9", - "name": "fsevents", - "version": "2.3.2", + "version": "1.1.2", "source": { "type": "install", "source": [ - "archive:https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz#sha1:8a526f78b8fdf4623b709e0b975c52c24c02fd1a" + "archive:https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz#sha1:2c02d864d97f3ea6c8830c464cbd11ab6eab7a1c" ] }, "overrides": [], @@ -2828,28 +2815,28 @@ "dependencies": [ "escape-string-regexp@1.0.5@d41d8cd9" ], "devDependencies": [] }, - "fastq@1.15.0@d41d8cd9": { - "id": "fastq@1.15.0@d41d8cd9", + "fastq@1.17.1@d41d8cd9": { + "id": "fastq@1.17.1@d41d8cd9", "name": "fastq", - "version": "1.15.0", + "version": "1.17.1", "source": { "type": "install", "source": [ - "archive:https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz#sha1:d04d07c6a2a68fe4599fea8d2e103a937fae6b3a" + "archive:https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz#sha1:2a523f07a4e7b1e81a42b91b8bf2254107753b47" ] }, "overrides": [], "dependencies": [ "reusify@1.0.4@d41d8cd9" ], "devDependencies": [] }, - "fast-glob@3.3.1@d41d8cd9": { - "id": "fast-glob@3.3.1@d41d8cd9", + "fast-glob@3.3.2@d41d8cd9": { + "id": "fast-glob@3.3.2@d41d8cd9", "name": "fast-glob", - "version": "3.3.1", + "version": "3.3.2", "source": { "type": "install", "source": [ - "archive:https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.1.tgz#sha1:784b4e897340f3dbbef17413b3f11acf03c874c4" + "archive:https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz#sha1:a904501e57cfdd2ffcded45e99a54fef55e46129" ] }, "overrides": [], @@ -3037,14 +3024,14 @@ "dependencies": [], "devDependencies": [] }, - "escalade@3.1.1@d41d8cd9": { - "id": "escalade@3.1.1@d41d8cd9", + "escalade@3.1.2@d41d8cd9": { + "id": "escalade@3.1.2@d41d8cd9", "name": "escalade", - "version": "3.1.1", + "version": "3.1.2", "source": { "type": "install", "source": [ - "archive:https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz#sha1:d8cfdc7000965c5a0174b4a82eaa5c0552742e40" + "archive:https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz#sha1:54076e9ab29ea5bf3d8f1ed62acffbb88272df27" ] }, "overrides": [], @@ -3352,7 +3339,7 @@ }, "overrides": [], "dependencies": [ - "well-known-symbols@2.0.0@d41d8cd9", "semver@7.5.4@d41d8cd9", + "well-known-symbols@2.0.0@d41d8cd9", "semver@7.6.0@d41d8cd9", "md5-hex@3.0.1@d41d8cd9", "lodash@4.17.21@d41d8cd9", "js-string-escape@1.0.1@d41d8cd9", "fast-diff@1.3.0@d41d8cd9", "esutils@2.0.3@d41d8cd9", "date-time@3.1.0@d41d8cd9" @@ -3518,14 +3505,14 @@ ], "devDependencies": [] }, - "cli-spinners@2.9.0@d41d8cd9": { - "id": "cli-spinners@2.9.0@d41d8cd9", + "cli-spinners@2.9.2@d41d8cd9": { + "id": "cli-spinners@2.9.2@d41d8cd9", "name": "cli-spinners", - "version": "2.9.0", + "version": "2.9.2", "source": { "type": "install", "source": [ - "archive:https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.9.0.tgz#sha1:5881d0ad96381e117bbe07ad91f2008fe6ffd8db" + "archive:https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.9.2.tgz#sha1:1773a8f4b9c4d6ac31563df53b3fc1d79462fe41" ] }, "overrides": [], @@ -3630,22 +3617,22 @@ "dependencies": [], "devDependencies": [] }, - "chokidar@3.5.3@d41d8cd9": { - "id": "chokidar@3.5.3@d41d8cd9", + "chokidar@3.6.0@d41d8cd9": { + "id": "chokidar@3.6.0@d41d8cd9", "name": "chokidar", - "version": "3.5.3", + "version": "3.6.0", "source": { "type": "install", "source": [ - "archive:https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz#sha1:1cf37c8707b932bd1af1ae22c0432e2acd1903bd" + "archive:https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz#sha1:197c6cc669ef2a8dc5e7b4d97ee4e092c3eb0d5b" ] }, "overrides": [], "dependencies": [ "readdirp@3.6.0@d41d8cd9", "normalize-path@3.0.0@d41d8cd9", "is-glob@4.0.3@d41d8cd9", "is-binary-path@2.1.0@d41d8cd9", - "glob-parent@5.1.2@d41d8cd9", "fsevents@2.3.2@d41d8cd9", - "braces@3.0.2@d41d8cd9", "anymatch@3.1.3@d41d8cd9" + "glob-parent@5.1.2@d41d8cd9", "braces@3.0.2@d41d8cd9", + "anymatch@3.1.3@d41d8cd9" ], "devDependencies": [] }, @@ -3916,11 +3903,11 @@ "cli-truncate@2.1.0@d41d8cd9", "cli-cursor@3.1.0@d41d8cd9", "clean-yaml-object@0.1.0@d41d8cd9", "ci-parallel-vars@1.0.1@d41d8cd9", "ci-info@2.0.0@d41d8cd9", - "chunkd@2.0.1@d41d8cd9", "chokidar@3.5.3@d41d8cd9", + "chunkd@2.0.1@d41d8cd9", "chokidar@3.6.0@d41d8cd9", "chalk@4.1.2@d41d8cd9", "callsites@3.1.0@d41d8cd9", "arrify@2.0.1@d41d8cd9", "arrgv@1.0.2@d41d8cd9", - "ansi-styles@5.2.0@d41d8cd9", "acorn-walk@8.2.0@d41d8cd9", - "acorn@8.10.0@d41d8cd9", "@concordance/react@2.0.0@d41d8cd9" + "ansi-styles@5.2.0@d41d8cd9", "acorn-walk@8.3.2@d41d8cd9", + "acorn@8.11.3@d41d8cd9", "@concordance/react@2.0.0@d41d8cd9" ], "devDependencies": [] }, @@ -4124,42 +4111,42 @@ ], "devDependencies": [] }, - "acorn-walk@8.2.0@d41d8cd9": { - "id": "acorn-walk@8.2.0@d41d8cd9", + "acorn-walk@8.3.2@d41d8cd9": { + "id": "acorn-walk@8.3.2@d41d8cd9", "name": "acorn-walk", - "version": "8.2.0", + "version": "8.3.2", "source": { "type": "install", "source": [ - "archive:https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz#sha1:741210f2e2426454508853a2f44d0ab83b7f69c1" + "archive:https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.2.tgz#sha1:7703af9415f1b6db9315d6895503862e231d34aa" ] }, "overrides": [], "dependencies": [], "devDependencies": [] }, - "acorn@8.10.0@d41d8cd9": { - "id": "acorn@8.10.0@d41d8cd9", + "acorn@8.11.3@d41d8cd9": { + "id": "acorn@8.11.3@d41d8cd9", "name": "acorn", - "version": "8.10.0", + "version": "8.11.3", "source": { "type": "install", "source": [ - "archive:https://registry.npmjs.org/acorn/-/acorn-8.10.0.tgz#sha1:8be5b3907a67221a81ab23c7889c4c5526b62ec5" + "archive:https://registry.npmjs.org/acorn/-/acorn-8.11.3.tgz#sha1:71e0b14e13a4ec160724b38fb7b0f233b1b81d7a" ] }, "overrides": [], "dependencies": [], "devDependencies": [] }, - "@types/normalize-package-data@2.4.1@d41d8cd9": { - "id": "@types/normalize-package-data@2.4.1@d41d8cd9", + "@types/normalize-package-data@2.4.4@d41d8cd9": { + "id": "@types/normalize-package-data@2.4.4@d41d8cd9", "name": "@types/normalize-package-data", - "version": "2.4.1", + "version": "2.4.4", "source": { "type": "install", "source": [ - "archive:https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.1.tgz#sha1:d3357479a0fdfdd5907fe67e17e0a85c906e1301" + "archive:https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.4.tgz#sha1:56e2cc26c397c038fab0e3a917a12d5c5909e901" ] }, "overrides": [], @@ -4211,8 +4198,8 @@ "@reason-native/file-context-printer@github:reasonml/reason-native:file-context-printer.json#a0ddab6ab25237961e32d8732b0a222ec2372d4a@d41d8cd9", "@reason-native/cli@github:reasonml/reason-native:cli.json#a0ddab6ab25237961e32d8732b0a222ec2372d4a@d41d8cd9", "@opam/stdlib-shims@opam:0.3.0@72c7bc98", - "@opam/reason@opam:3.9.0@2a7c0e6f", "@opam/re@opam:1.10.4@c4910ba6", - "@opam/dune@opam:3.10.0@d5991a42" + "@opam/reason@opam:3.9.0@2a7c0e6f", "@opam/re@opam:1.11.0@87deb463", + "@opam/dune@opam:3.14.0@bfa03801" ], "devDependencies": [] }, @@ -4229,7 +4216,7 @@ "overrides": [], "dependencies": [ "ocaml@4.14.1000@d41d8cd9", "@opam/reason@opam:3.9.0@2a7c0e6f", - "@opam/re@opam:1.10.4@c4910ba6", "@opam/dune@opam:3.10.0@d5991a42" + "@opam/re@opam:1.11.0@87deb463", "@opam/dune@opam:3.14.0@bfa03801" ], "devDependencies": [] }, @@ -4247,8 +4234,8 @@ "dependencies": [ "ocaml@4.14.1000@d41d8cd9", "@reason-native/pastel@github:reasonml/reason-native:pastel.json#a0ddab6ab25237961e32d8732b0a222ec2372d4a@d41d8cd9", - "@opam/reason@opam:3.9.0@2a7c0e6f", "@opam/re@opam:1.10.4@c4910ba6", - "@opam/dune@opam:3.10.0@d5991a42" + "@opam/reason@opam:3.9.0@2a7c0e6f", "@opam/re@opam:1.11.0@87deb463", + "@opam/dune@opam:3.14.0@bfa03801" ], "devDependencies": [] }, @@ -4265,7 +4252,7 @@ "overrides": [], "dependencies": [ "ocaml@4.14.1000@d41d8cd9", "@opam/reason@opam:3.9.0@2a7c0e6f", - "@opam/dune@opam:3.10.0@d5991a42" + "@opam/dune@opam:3.14.0@bfa03801" ], "devDependencies": [ "ocaml@4.14.1000@d41d8cd9" ] }, @@ -4283,61 +4270,61 @@ "dependencies": [ "ocaml@4.14.1000@d41d8cd9", "@reason-native/pastel@github:reasonml/reason-native:pastel.json#a0ddab6ab25237961e32d8732b0a222ec2372d4a@d41d8cd9", - "@opam/reason@opam:3.9.0@2a7c0e6f", "@opam/re@opam:1.10.4@c4910ba6", - "@opam/dune@opam:3.10.0@d5991a42" + "@opam/reason@opam:3.9.0@2a7c0e6f", "@opam/re@opam:1.11.0@87deb463", + "@opam/dune@opam:3.14.0@bfa03801" ], "devDependencies": [] }, - "@opam/yojson@opam:2.1.0@157478b0": { - "id": "@opam/yojson@opam:2.1.0@157478b0", + "@opam/yojson@opam:2.1.2@9fd14300": { + "id": "@opam/yojson@opam:2.1.2@9fd14300", "name": "@opam/yojson", - "version": "opam:2.1.0", + "version": "opam:2.1.2", "source": { "type": "install", "source": [ - "archive:https://opam.ocaml.org/cache/sha256/9f/9fcb1ff2db58ab259f9228796b0ada4794eae97177b1833371380c4e4f90b15d#sha256:9fcb1ff2db58ab259f9228796b0ada4794eae97177b1833371380c4e4f90b15d", - "archive:https://github.com/ocaml-community/yojson/releases/download/2.1.0/yojson-2.1.0.tbz#sha256:9fcb1ff2db58ab259f9228796b0ada4794eae97177b1833371380c4e4f90b15d" + "archive:https://opam.ocaml.org/cache/sha256/59/59f2f1abbfc8a7ccbdbf608894e5c75e8a76006e34899254446f83e200dfb4f9#sha256:59f2f1abbfc8a7ccbdbf608894e5c75e8a76006e34899254446f83e200dfb4f9", + "archive:https://github.com/ocaml-community/yojson/releases/download/2.1.2/yojson-2.1.2.tbz#sha256:59f2f1abbfc8a7ccbdbf608894e5c75e8a76006e34899254446f83e200dfb4f9" ], "opam": { "name": "yojson", - "version": "2.1.0", - "path": "esy.lock/opam/yojson.2.1.0" + "version": "2.1.2", + "path": "esy.lock/opam/yojson.2.1.2" } }, "overrides": [], "dependencies": [ "ocaml@4.14.1000@d41d8cd9", "@opam/seq@opam:base@d8d7de1d", - "@opam/dune@opam:3.10.0@d5991a42", "@opam/cppo@opam:1.6.9@db929a12", + "@opam/dune@opam:3.14.0@bfa03801", "@opam/cppo@opam:1.6.9@db929a12", "@esy-ocaml/substs@0.0.1@d41d8cd9" ], "devDependencies": [ "ocaml@4.14.1000@d41d8cd9", "@opam/seq@opam:base@d8d7de1d", - "@opam/dune@opam:3.10.0@d5991a42" + "@opam/dune@opam:3.14.0@bfa03801" ] }, - "@opam/xdg@opam:3.10.0@620c5589": { - "id": "@opam/xdg@opam:3.10.0@620c5589", + "@opam/xdg@opam:3.14.0@c69773d6": { + "id": "@opam/xdg@opam:3.14.0@c69773d6", "name": "@opam/xdg", - "version": "opam:3.10.0", + "version": "opam:3.14.0", "source": { "type": "install", "source": [ - "archive:https://opam.ocaml.org/cache/sha256/9f/9ff03384a98a8df79852cc674f0b4738ba8aec17029b6e2eeb514f895e710355#sha256:9ff03384a98a8df79852cc674f0b4738ba8aec17029b6e2eeb514f895e710355", - "archive:https://github.com/ocaml/dune/releases/download/3.10.0/dune-3.10.0.tbz#sha256:9ff03384a98a8df79852cc674f0b4738ba8aec17029b6e2eeb514f895e710355" + "archive:https://opam.ocaml.org/cache/sha256/f4/f4d09d89162621fdff424c253fa50c4920d2179fb5b3d1debab7bbe97c68b2fc#sha256:f4d09d89162621fdff424c253fa50c4920d2179fb5b3d1debab7bbe97c68b2fc", + "archive:https://github.com/ocaml/dune/releases/download/3.14.0/dune-3.14.0.tbz#sha256:f4d09d89162621fdff424c253fa50c4920d2179fb5b3d1debab7bbe97c68b2fc" ], "opam": { "name": "xdg", - "version": "3.10.0", - "path": "esy.lock/opam/xdg.3.10.0" + "version": "3.14.0", + "path": "esy.lock/opam/xdg.3.14.0" } }, "overrides": [], "dependencies": [ - "ocaml@4.14.1000@d41d8cd9", "@opam/dune@opam:3.10.0@d5991a42", + "ocaml@4.14.1000@d41d8cd9", "@opam/dune@opam:3.14.0@bfa03801", "@esy-ocaml/substs@0.0.1@d41d8cd9" ], "devDependencies": [ - "ocaml@4.14.1000@d41d8cd9", "@opam/dune@opam:3.10.0@d5991a42" + "ocaml@4.14.1000@d41d8cd9", "@opam/dune@opam:3.14.0@bfa03801" ] }, "@opam/uutf@opam:1.0.3@47c95a18": { @@ -4360,38 +4347,38 @@ "dependencies": [ "ocaml@4.14.1000@d41d8cd9", "@opam/topkg@opam:1.0.7@7ee47d76", "@opam/ocamlfind@opam:1.9.6@da5169c7", - "@opam/ocamlbuild@opam:0.14.2+win@39b9f56d", + "@opam/ocamlbuild@opam:0.14.3@6ab20ab3", "@opam/cmdliner@opam:1.0.4@93208aac", "@esy-ocaml/substs@0.0.1@d41d8cd9" ], "devDependencies": [ "ocaml@4.14.1000@d41d8cd9" ] }, - "@opam/tyxml@opam:4.5.0@0a609297": { - "id": "@opam/tyxml@opam:4.5.0@0a609297", + "@opam/tyxml@opam:4.6.0@5ced2c2c": { + "id": "@opam/tyxml@opam:4.6.0@5ced2c2c", "name": "@opam/tyxml", - "version": "opam:4.5.0", + "version": "opam:4.6.0", "source": { "type": "install", "source": [ - "archive:https://opam.ocaml.org/cache/sha256/c6/c69accef5df4dd89d38f6aa0baad01e8fda4e9e98bb7dad61bec1452c5716068#sha256:c69accef5df4dd89d38f6aa0baad01e8fda4e9e98bb7dad61bec1452c5716068", - "archive:https://github.com/ocsigen/tyxml/releases/download/4.5.0/tyxml-4.5.0.tbz#sha256:c69accef5df4dd89d38f6aa0baad01e8fda4e9e98bb7dad61bec1452c5716068" + "archive:https://opam.ocaml.org/cache/sha256/bf/bfeb673c6b4e120a4eca4c48448add47dc3f8d02c2b40f63ffdccc4e91c902dd#sha256:bfeb673c6b4e120a4eca4c48448add47dc3f8d02c2b40f63ffdccc4e91c902dd", + "archive:https://github.com/ocsigen/tyxml/releases/download/4.6.0/tyxml-4.6.0.tbz#sha256:bfeb673c6b4e120a4eca4c48448add47dc3f8d02c2b40f63ffdccc4e91c902dd" ], "opam": { "name": "tyxml", - "version": "4.5.0", - "path": "esy.lock/opam/tyxml.4.5.0" + "version": "4.6.0", + "path": "esy.lock/opam/tyxml.4.6.0" } }, "overrides": [], "dependencies": [ "ocaml@4.14.1000@d41d8cd9", "@opam/uutf@opam:1.0.3@47c95a18", - "@opam/seq@opam:base@d8d7de1d", "@opam/re@opam:1.10.4@c4910ba6", - "@opam/dune@opam:3.10.0@d5991a42", "@esy-ocaml/substs@0.0.1@d41d8cd9" + "@opam/seq@opam:base@d8d7de1d", "@opam/re@opam:1.11.0@87deb463", + "@opam/dune@opam:3.14.0@bfa03801", "@esy-ocaml/substs@0.0.1@d41d8cd9" ], "devDependencies": [ "ocaml@4.14.1000@d41d8cd9", "@opam/uutf@opam:1.0.3@47c95a18", - "@opam/seq@opam:base@d8d7de1d", "@opam/re@opam:1.10.4@c4910ba6", - "@opam/dune@opam:3.10.0@d5991a42" + "@opam/seq@opam:base@d8d7de1d", "@opam/re@opam:1.11.0@87deb463", + "@opam/dune@opam:3.14.0@bfa03801" ] }, "@opam/topkg@opam:1.0.7@7ee47d76": { @@ -4413,43 +4400,42 @@ "overrides": [], "dependencies": [ "ocaml@4.14.1000@d41d8cd9", "@opam/ocamlfind@opam:1.9.6@da5169c7", - "@opam/ocamlbuild@opam:0.14.2+win@39b9f56d", + "@opam/ocamlbuild@opam:0.14.3@6ab20ab3", "@esy-ocaml/substs@0.0.1@d41d8cd9" ], "devDependencies": [ - "ocaml@4.14.1000@d41d8cd9", - "@opam/ocamlbuild@opam:0.14.2+win@39b9f56d" + "ocaml@4.14.1000@d41d8cd9", "@opam/ocamlbuild@opam:0.14.3@6ab20ab3" ] }, - "@opam/stdune@opam:3.10.0@7e2a8959": { - "id": "@opam/stdune@opam:3.10.0@7e2a8959", + "@opam/stdune@opam:3.14.0@45da491f": { + "id": "@opam/stdune@opam:3.14.0@45da491f", "name": "@opam/stdune", - "version": "opam:3.10.0", + "version": "opam:3.14.0", "source": { "type": "install", "source": [ - "archive:https://opam.ocaml.org/cache/sha256/9f/9ff03384a98a8df79852cc674f0b4738ba8aec17029b6e2eeb514f895e710355#sha256:9ff03384a98a8df79852cc674f0b4738ba8aec17029b6e2eeb514f895e710355", - "archive:https://github.com/ocaml/dune/releases/download/3.10.0/dune-3.10.0.tbz#sha256:9ff03384a98a8df79852cc674f0b4738ba8aec17029b6e2eeb514f895e710355" + "archive:https://opam.ocaml.org/cache/sha256/f4/f4d09d89162621fdff424c253fa50c4920d2179fb5b3d1debab7bbe97c68b2fc#sha256:f4d09d89162621fdff424c253fa50c4920d2179fb5b3d1debab7bbe97c68b2fc", + "archive:https://github.com/ocaml/dune/releases/download/3.14.0/dune-3.14.0.tbz#sha256:f4d09d89162621fdff424c253fa50c4920d2179fb5b3d1debab7bbe97c68b2fc" ], "opam": { "name": "stdune", - "version": "3.10.0", - "path": "esy.lock/opam/stdune.3.10.0" + "version": "3.14.0", + "path": "esy.lock/opam/stdune.3.14.0" } }, "overrides": [], "dependencies": [ - "ocaml@4.14.1000@d41d8cd9", "@opam/pp@opam:1.1.2@89ad03b5", - "@opam/ordering@opam:3.10.0@eade5884", - "@opam/dyn@opam:3.10.0@0fc13d1c", "@opam/dune@opam:3.10.0@d5991a42", + "ocaml@4.14.1000@d41d8cd9", "@opam/pp@opam:1.2.0@16430027", + "@opam/ordering@opam:3.14.0@5506a75a", + "@opam/dyn@opam:3.14.0@fdb13680", "@opam/dune@opam:3.14.0@bfa03801", "@opam/csexp@opam:1.5.2@46614bf4", "@opam/base-unix@opam:base@87d0b2eb", "@esy-ocaml/substs@0.0.1@d41d8cd9" ], "devDependencies": [ - "ocaml@4.14.1000@d41d8cd9", "@opam/pp@opam:1.1.2@89ad03b5", - "@opam/ordering@opam:3.10.0@eade5884", - "@opam/dyn@opam:3.10.0@0fc13d1c", "@opam/dune@opam:3.10.0@d5991a42", + "ocaml@4.14.1000@d41d8cd9", "@opam/pp@opam:1.2.0@16430027", + "@opam/ordering@opam:3.14.0@5506a75a", + "@opam/dyn@opam:3.14.0@fdb13680", "@opam/dune@opam:3.14.0@bfa03801", "@opam/csexp@opam:1.5.2@46614bf4", "@opam/base-unix@opam:base@87d0b2eb" ] @@ -4472,11 +4458,11 @@ }, "overrides": [], "dependencies": [ - "ocaml@4.14.1000@d41d8cd9", "@opam/dune@opam:3.10.0@d5991a42", + "ocaml@4.14.1000@d41d8cd9", "@opam/dune@opam:3.14.0@bfa03801", "@esy-ocaml/substs@0.0.1@d41d8cd9" ], "devDependencies": [ - "ocaml@4.14.1000@d41d8cd9", "@opam/dune@opam:3.10.0@d5991a42" + "ocaml@4.14.1000@d41d8cd9", "@opam/dune@opam:3.14.0@bfa03801" ] }, "@opam/spawn@opam:v0.15.1@85e9d6f1": { @@ -4497,11 +4483,11 @@ }, "overrides": [], "dependencies": [ - "ocaml@4.14.1000@d41d8cd9", "@opam/dune@opam:3.10.0@d5991a42", + "ocaml@4.14.1000@d41d8cd9", "@opam/dune@opam:3.14.0@bfa03801", "@esy-ocaml/substs@0.0.1@d41d8cd9" ], "devDependencies": [ - "ocaml@4.14.1000@d41d8cd9", "@opam/dune@opam:3.10.0@d5991a42" + "ocaml@4.14.1000@d41d8cd9", "@opam/dune@opam:3.14.0@bfa03801" ] }, "@opam/sexplib0@opam:v0.16.0@c0ffad0c": { @@ -4522,11 +4508,11 @@ }, "overrides": [], "dependencies": [ - "ocaml@4.14.1000@d41d8cd9", "@opam/dune@opam:3.10.0@d5991a42", + "ocaml@4.14.1000@d41d8cd9", "@opam/dune@opam:3.14.0@bfa03801", "@esy-ocaml/substs@0.0.1@d41d8cd9" ], "devDependencies": [ - "ocaml@4.14.1000@d41d8cd9", "@opam/dune@opam:3.10.0@d5991a42" + "ocaml@4.14.1000@d41d8cd9", "@opam/dune@opam:3.14.0@bfa03801" ] }, "@opam/seq@opam:base@d8d7de1d": { @@ -4566,11 +4552,11 @@ }, "overrides": [], "dependencies": [ - "ocaml@4.14.1000@d41d8cd9", "@opam/dune@opam:3.10.0@d5991a42", + "ocaml@4.14.1000@d41d8cd9", "@opam/dune@opam:3.14.0@bfa03801", "@esy-ocaml/substs@0.0.1@d41d8cd9" ], "devDependencies": [ - "ocaml@4.14.1000@d41d8cd9", "@opam/dune@opam:3.10.0@d5991a42" + "ocaml@4.14.1000@d41d8cd9", "@opam/dune@opam:3.14.0@bfa03801" ] }, "@opam/reason@opam:3.9.0@2a7c0e6f": { @@ -4595,65 +4581,96 @@ } ], "dependencies": [ - "ocaml@4.14.1000@d41d8cd9", "@opam/ppxlib@opam:0.29.1@a8bb9506", + "ocaml@4.14.1000@d41d8cd9", + "@opam/ppxlib@opam:0.32.1~5.2preview@4c456794", "@opam/ppx_derivers@opam:1.2.1@e2cbad12", "@opam/ocamlfind@opam:1.9.6@da5169c7", "@opam/merlin-extend@opam:0.6.1@7d979feb", - "@opam/menhir@opam:20230608@c0081728", + "@opam/menhir@opam:20231231@f35eae6a", "@opam/fix@opam:20230505@941a65ff", - "@opam/dune-build-info@opam:3.10.0@457c29c8", - "@opam/dune@opam:3.10.0@d5991a42", "@esy-ocaml/substs@0.0.1@d41d8cd9" + "@opam/dune-build-info@opam:3.14.0@4ff7c5a2", + "@opam/dune@opam:3.14.0@bfa03801", "@esy-ocaml/substs@0.0.1@d41d8cd9" ], "devDependencies": [ - "ocaml@4.14.1000@d41d8cd9", "@opam/ppxlib@opam:0.29.1@a8bb9506", + "ocaml@4.14.1000@d41d8cd9", + "@opam/ppxlib@opam:0.32.1~5.2preview@4c456794", "@opam/ppx_derivers@opam:1.2.1@e2cbad12", "@opam/merlin-extend@opam:0.6.1@7d979feb", - "@opam/menhir@opam:20230608@c0081728", + "@opam/menhir@opam:20231231@f35eae6a", "@opam/fix@opam:20230505@941a65ff", - "@opam/dune-build-info@opam:3.10.0@457c29c8", - "@opam/dune@opam:3.10.0@d5991a42" + "@opam/dune-build-info@opam:3.14.0@4ff7c5a2", + "@opam/dune@opam:3.14.0@bfa03801" ] }, - "@opam/re@opam:1.10.4@c4910ba6": { - "id": "@opam/re@opam:1.10.4@c4910ba6", + "@opam/re@opam:1.11.0@87deb463": { + "id": "@opam/re@opam:1.11.0@87deb463", "name": "@opam/re", - "version": "opam:1.10.4", + "version": "opam:1.11.0", "source": { "type": "install", "source": [ - "archive:https://opam.ocaml.org/cache/sha256/83/83eb3e4300aa9b1dc7820749010f4362ea83524742130524d78c20ce99ca747c#sha256:83eb3e4300aa9b1dc7820749010f4362ea83524742130524d78c20ce99ca747c", - "archive:https://github.com/ocaml/ocaml-re/releases/download/1.10.4/re-1.10.4.tbz#sha256:83eb3e4300aa9b1dc7820749010f4362ea83524742130524d78c20ce99ca747c" + "archive:https://opam.ocaml.org/cache/sha256/01/01fc244780c0f6be72ae796b1fb750f367de18624fd75d07ee79782ed6df8d4f#sha256:01fc244780c0f6be72ae796b1fb750f367de18624fd75d07ee79782ed6df8d4f", + "archive:https://github.com/ocaml/ocaml-re/releases/download/1.11.0/re-1.11.0.tbz#sha256:01fc244780c0f6be72ae796b1fb750f367de18624fd75d07ee79782ed6df8d4f" ], "opam": { "name": "re", - "version": "1.10.4", - "path": "esy.lock/opam/re.1.10.4" + "version": "1.11.0", + "path": "esy.lock/opam/re.1.11.0" } }, "overrides": [], "dependencies": [ "ocaml@4.14.1000@d41d8cd9", "@opam/seq@opam:base@d8d7de1d", - "@opam/dune@opam:3.10.0@d5991a42", "@esy-ocaml/substs@0.0.1@d41d8cd9" + "@opam/dune@opam:3.14.0@bfa03801", "@esy-ocaml/substs@0.0.1@d41d8cd9" ], "devDependencies": [ "ocaml@4.14.1000@d41d8cd9", "@opam/seq@opam:base@d8d7de1d", - "@opam/dune@opam:3.10.0@d5991a42" + "@opam/dune@opam:3.14.0@bfa03801" ] }, - "@opam/ppxlib@opam:0.29.1@a8bb9506": { - "id": "@opam/ppxlib@opam:0.29.1@a8bb9506", + "@opam/ptime@opam:1.1.0@d6f12219": { + "id": "@opam/ptime@opam:1.1.0@d6f12219", + "name": "@opam/ptime", + "version": "opam:1.1.0", + "source": { + "type": "install", + "source": [ + "archive:https://opam.ocaml.org/cache/sha512/30/309b8383f61b58840e58a82802ec8fbc61b7cc95a4590d38ad427e484cbaaf66f03fa8e6484b5b6855468a87e745aed103bf6f1041ec05062230a9fa5fb86cc6#sha512:309b8383f61b58840e58a82802ec8fbc61b7cc95a4590d38ad427e484cbaaf66f03fa8e6484b5b6855468a87e745aed103bf6f1041ec05062230a9fa5fb86cc6", + "archive:https://erratique.ch/software/ptime/releases/ptime-1.1.0.tbz#sha512:309b8383f61b58840e58a82802ec8fbc61b7cc95a4590d38ad427e484cbaaf66f03fa8e6484b5b6855468a87e745aed103bf6f1041ec05062230a9fa5fb86cc6" + ], + "opam": { + "name": "ptime", + "version": "1.1.0", + "path": "esy.lock/opam/ptime.1.1.0" + } + }, + "overrides": [ + { + "opamoverride": "esy.lock/overrides/opam__s__ptime_opam__c__1.1.0_opam_override" + } + ], + "dependencies": [ + "ocaml@4.14.1000@d41d8cd9", "@opam/topkg@opam:1.0.7@7ee47d76", + "@opam/ocamlfind@opam:1.9.6@da5169c7", + "@opam/ocamlbuild@opam:0.14.3@6ab20ab3", + "@esy-ocaml/substs@0.0.1@d41d8cd9" + ], + "devDependencies": [ "ocaml@4.14.1000@d41d8cd9" ] + }, + "@opam/ppxlib@opam:0.32.1~5.2preview@4c456794": { + "id": "@opam/ppxlib@opam:0.32.1~5.2preview@4c456794", "name": "@opam/ppxlib", - "version": "opam:0.29.1", + "version": "opam:0.32.1~5.2preview", "source": { "type": "install", "source": [ - "archive:https://opam.ocaml.org/cache/sha256/c8/c8ea8c8770414fdba6612e7f2d814b21a493daa974ea862a90c8e6c766e5dd79#sha256:c8ea8c8770414fdba6612e7f2d814b21a493daa974ea862a90c8e6c766e5dd79", - "archive:https://github.com/ocaml-ppx/ppxlib/releases/download/0.29.1/ppxlib-0.29.1.tbz#sha256:c8ea8c8770414fdba6612e7f2d814b21a493daa974ea862a90c8e6c766e5dd79" + "archive:https://opam.ocaml.org/cache/sha256/71/71c606dc9214769e5ea767b65559ae1d8296f5096dac30bd9ef91f645f1f60a3#sha256:71c606dc9214769e5ea767b65559ae1d8296f5096dac30bd9ef91f645f1f60a3", + "archive:https://github.com/ocaml-ppx/ppxlib/archive/51851b4f9b18fe75a0bc24c383d5843855de87e3.tar.gz#sha256:71c606dc9214769e5ea767b65559ae1d8296f5096dac30bd9ef91f645f1f60a3" ], "opam": { "name": "ppxlib", - "version": "0.29.1", - "path": "esy.lock/opam/ppxlib.0.29.1" + "version": "0.32.1~5.2preview", + "path": "esy.lock/opam/ppxlib.0.32.1~5.2preview" } }, "overrides": [], @@ -4661,15 +4678,15 @@ "ocaml@4.14.1000@d41d8cd9", "@opam/stdlib-shims@opam:0.3.0@72c7bc98", "@opam/sexplib0@opam:v0.16.0@c0ffad0c", "@opam/ppx_derivers@opam:1.2.1@e2cbad12", - "@opam/ocaml-compiler-libs@opam:v0.12.4@41979882", - "@opam/dune@opam:3.10.0@d5991a42", "@esy-ocaml/substs@0.0.1@d41d8cd9" + "@opam/ocaml-compiler-libs@opam:v0.12.4@57a85ad1", + "@opam/dune@opam:3.14.0@bfa03801", "@esy-ocaml/substs@0.0.1@d41d8cd9" ], "devDependencies": [ "ocaml@4.14.1000@d41d8cd9", "@opam/stdlib-shims@opam:0.3.0@72c7bc98", "@opam/sexplib0@opam:v0.16.0@c0ffad0c", "@opam/ppx_derivers@opam:1.2.1@e2cbad12", - "@opam/ocaml-compiler-libs@opam:v0.12.4@41979882", - "@opam/dune@opam:3.10.0@d5991a42" + "@opam/ocaml-compiler-libs@opam:v0.12.4@57a85ad1", + "@opam/dune@opam:3.14.0@bfa03801" ] }, "@opam/ppx_yojson_conv_lib@opam:v0.16.0@33740c3c": { @@ -4690,12 +4707,12 @@ }, "overrides": [], "dependencies": [ - "ocaml@4.14.1000@d41d8cd9", "@opam/yojson@opam:2.1.0@157478b0", - "@opam/dune@opam:3.10.0@d5991a42", "@esy-ocaml/substs@0.0.1@d41d8cd9" + "ocaml@4.14.1000@d41d8cd9", "@opam/yojson@opam:2.1.2@9fd14300", + "@opam/dune@opam:3.14.0@bfa03801", "@esy-ocaml/substs@0.0.1@d41d8cd9" ], "devDependencies": [ - "ocaml@4.14.1000@d41d8cd9", "@opam/yojson@opam:2.1.0@157478b0", - "@opam/dune@opam:3.10.0@d5991a42" + "ocaml@4.14.1000@d41d8cd9", "@opam/yojson@opam:2.1.2@9fd14300", + "@opam/dune@opam:3.14.0@bfa03801" ] }, "@opam/ppx_derivers@opam:1.2.1@e2cbad12": { @@ -4716,154 +4733,156 @@ }, "overrides": [], "dependencies": [ - "ocaml@4.14.1000@d41d8cd9", "@opam/dune@opam:3.10.0@d5991a42", + "ocaml@4.14.1000@d41d8cd9", "@opam/dune@opam:3.14.0@bfa03801", "@esy-ocaml/substs@0.0.1@d41d8cd9" ], "devDependencies": [ - "ocaml@4.14.1000@d41d8cd9", "@opam/dune@opam:3.10.0@d5991a42" + "ocaml@4.14.1000@d41d8cd9", "@opam/dune@opam:3.14.0@bfa03801" ] }, - "@opam/pp@opam:1.1.2@89ad03b5": { - "id": "@opam/pp@opam:1.1.2@89ad03b5", + "@opam/pp@opam:1.2.0@16430027": { + "id": "@opam/pp@opam:1.2.0@16430027", "name": "@opam/pp", - "version": "opam:1.1.2", + "version": "opam:1.2.0", "source": { "type": "install", "source": [ - "archive:https://opam.ocaml.org/cache/sha256/e4/e4a4e98d96b1bb76950fcd6da4e938c86d989df4d7e48f02f7a44595f5af1d56#sha256:e4a4e98d96b1bb76950fcd6da4e938c86d989df4d7e48f02f7a44595f5af1d56", - "archive:https://github.com/ocaml-dune/pp/releases/download/1.1.2/pp-1.1.2.tbz#sha256:e4a4e98d96b1bb76950fcd6da4e938c86d989df4d7e48f02f7a44595f5af1d56" + "archive:https://opam.ocaml.org/cache/sha256/a5/a5e822573c55afb42db29ec56eacd1f2acd8f65cf2df2878e291de374ce6909c#sha256:a5e822573c55afb42db29ec56eacd1f2acd8f65cf2df2878e291de374ce6909c", + "archive:https://github.com/ocaml-dune/pp/releases/download/1.2.0/pp-1.2.0.tbz#sha256:a5e822573c55afb42db29ec56eacd1f2acd8f65cf2df2878e291de374ce6909c" ], "opam": { "name": "pp", - "version": "1.1.2", - "path": "esy.lock/opam/pp.1.1.2" + "version": "1.2.0", + "path": "esy.lock/opam/pp.1.2.0" } }, "overrides": [], "dependencies": [ - "ocaml@4.14.1000@d41d8cd9", "@opam/dune@opam:3.10.0@d5991a42", + "ocaml@4.14.1000@d41d8cd9", "@opam/dune@opam:3.14.0@bfa03801", "@esy-ocaml/substs@0.0.1@d41d8cd9" ], "devDependencies": [ - "ocaml@4.14.1000@d41d8cd9", "@opam/dune@opam:3.10.0@d5991a42" + "ocaml@4.14.1000@d41d8cd9", "@opam/dune@opam:3.14.0@bfa03801" ] }, - "@opam/ordering@opam:3.10.0@eade5884": { - "id": "@opam/ordering@opam:3.10.0@eade5884", + "@opam/ordering@opam:3.14.0@5506a75a": { + "id": "@opam/ordering@opam:3.14.0@5506a75a", "name": "@opam/ordering", - "version": "opam:3.10.0", + "version": "opam:3.14.0", "source": { "type": "install", "source": [ - "archive:https://opam.ocaml.org/cache/sha256/9f/9ff03384a98a8df79852cc674f0b4738ba8aec17029b6e2eeb514f895e710355#sha256:9ff03384a98a8df79852cc674f0b4738ba8aec17029b6e2eeb514f895e710355", - "archive:https://github.com/ocaml/dune/releases/download/3.10.0/dune-3.10.0.tbz#sha256:9ff03384a98a8df79852cc674f0b4738ba8aec17029b6e2eeb514f895e710355" + "archive:https://opam.ocaml.org/cache/sha256/f4/f4d09d89162621fdff424c253fa50c4920d2179fb5b3d1debab7bbe97c68b2fc#sha256:f4d09d89162621fdff424c253fa50c4920d2179fb5b3d1debab7bbe97c68b2fc", + "archive:https://github.com/ocaml/dune/releases/download/3.14.0/dune-3.14.0.tbz#sha256:f4d09d89162621fdff424c253fa50c4920d2179fb5b3d1debab7bbe97c68b2fc" ], "opam": { "name": "ordering", - "version": "3.10.0", - "path": "esy.lock/opam/ordering.3.10.0" + "version": "3.14.0", + "path": "esy.lock/opam/ordering.3.14.0" } }, "overrides": [], "dependencies": [ - "ocaml@4.14.1000@d41d8cd9", "@opam/dune@opam:3.10.0@d5991a42", + "ocaml@4.14.1000@d41d8cd9", "@opam/dune@opam:3.14.0@bfa03801", "@esy-ocaml/substs@0.0.1@d41d8cd9" ], "devDependencies": [ - "ocaml@4.14.1000@d41d8cd9", "@opam/dune@opam:3.10.0@d5991a42" + "ocaml@4.14.1000@d41d8cd9", "@opam/dune@opam:3.14.0@bfa03801" ] }, - "@opam/odoc-parser@opam:2.0.0@a08011a0": { - "id": "@opam/odoc-parser@opam:2.0.0@a08011a0", + "@opam/odoc-parser@opam:2.4.1@38222354": { + "id": "@opam/odoc-parser@opam:2.4.1@38222354", "name": "@opam/odoc-parser", - "version": "opam:2.0.0", + "version": "opam:2.4.1", "source": { "type": "install", "source": [ - "archive:https://opam.ocaml.org/cache/sha256/40/407919fbb0eb95761d6fc6ec6777628d94aa1907343bdca678b1880bafb33922#sha256:407919fbb0eb95761d6fc6ec6777628d94aa1907343bdca678b1880bafb33922", - "archive:https://github.com/ocaml-doc/odoc-parser/releases/download/2.0.0/odoc-parser-2.0.0.tbz#sha256:407919fbb0eb95761d6fc6ec6777628d94aa1907343bdca678b1880bafb33922" + "archive:https://opam.ocaml.org/cache/sha256/b8/b814a0b9020b503eb67f17d1d9a969d052b63d8cdc7cdfa5fb793b137558cedb#sha256:b814a0b9020b503eb67f17d1d9a969d052b63d8cdc7cdfa5fb793b137558cedb", + "archive:https://github.com/ocaml/odoc/releases/download/2.4.1/odoc-2.4.1.tbz#sha256:b814a0b9020b503eb67f17d1d9a969d052b63d8cdc7cdfa5fb793b137558cedb" ], "opam": { "name": "odoc-parser", - "version": "2.0.0", - "path": "esy.lock/opam/odoc-parser.2.0.0" + "version": "2.4.1", + "path": "esy.lock/opam/odoc-parser.2.4.1" } }, "overrides": [], "dependencies": [ "ocaml@4.14.1000@d41d8cd9", "@opam/result@opam:1.5@1c6a6533", - "@opam/dune@opam:3.10.0@d5991a42", + "@opam/dune@opam:3.14.0@bfa03801", "@opam/camlp-streams@opam:5.0.1@daaa0f94", "@opam/astring@opam:0.8.5@1300cee8", "@esy-ocaml/substs@0.0.1@d41d8cd9" ], "devDependencies": [ "ocaml@4.14.1000@d41d8cd9", "@opam/result@opam:1.5@1c6a6533", - "@opam/dune@opam:3.10.0@d5991a42", + "@opam/dune@opam:3.14.0@bfa03801", "@opam/camlp-streams@opam:5.0.1@daaa0f94", "@opam/astring@opam:0.8.5@1300cee8" ] }, - "@opam/odoc@opam:2.2.1@3e6e45b8": { - "id": "@opam/odoc@opam:2.2.1@3e6e45b8", + "@opam/odoc@opam:2.4.1@58f09945": { + "id": "@opam/odoc@opam:2.4.1@58f09945", "name": "@opam/odoc", - "version": "opam:2.2.1", + "version": "opam:2.4.1", "source": { "type": "install", "source": [ - "archive:https://opam.ocaml.org/cache/sha256/17/1786e53bf0824fe1c7c7b81d2a7d846846a5d11677969e6396361f77a3816803#sha256:1786e53bf0824fe1c7c7b81d2a7d846846a5d11677969e6396361f77a3816803", - "archive:https://github.com/ocaml/odoc/releases/download/2.2.1/odoc-2.2.1.tbz#sha256:1786e53bf0824fe1c7c7b81d2a7d846846a5d11677969e6396361f77a3816803" + "archive:https://opam.ocaml.org/cache/sha256/b8/b814a0b9020b503eb67f17d1d9a969d052b63d8cdc7cdfa5fb793b137558cedb#sha256:b814a0b9020b503eb67f17d1d9a969d052b63d8cdc7cdfa5fb793b137558cedb", + "archive:https://github.com/ocaml/odoc/releases/download/2.4.1/odoc-2.4.1.tbz#sha256:b814a0b9020b503eb67f17d1d9a969d052b63d8cdc7cdfa5fb793b137558cedb" ], "opam": { "name": "odoc", - "version": "2.2.1", - "path": "esy.lock/opam/odoc.2.2.1" + "version": "2.4.1", + "path": "esy.lock/opam/odoc.2.4.1" } }, "overrides": [], "dependencies": [ - "ocaml@4.14.1000@d41d8cd9", "@opam/tyxml@opam:4.5.0@0a609297", + "ocaml@4.14.1000@d41d8cd9", "@opam/tyxml@opam:4.6.0@5ced2c2c", "@opam/result@opam:1.5@1c6a6533", - "@opam/odoc-parser@opam:2.0.0@a08011a0", + "@opam/odoc-parser@opam:2.4.1@38222354", "@opam/fpath@opam:0.7.3@674d8125", "@opam/fmt@opam:0.9.0@87213963", - "@opam/dune@opam:3.10.0@d5991a42", "@opam/cppo@opam:1.6.9@db929a12", + "@opam/dune@opam:3.14.0@bfa03801", + "@opam/crunch@opam:3.2.0@832f19f8", "@opam/cppo@opam:1.6.9@db929a12", "@opam/cmdliner@opam:1.0.4@93208aac", "@opam/astring@opam:0.8.5@1300cee8", "@esy-ocaml/substs@0.0.1@d41d8cd9" ], "devDependencies": [ - "ocaml@4.14.1000@d41d8cd9", "@opam/tyxml@opam:4.5.0@0a609297", + "ocaml@4.14.1000@d41d8cd9", "@opam/tyxml@opam:4.6.0@5ced2c2c", "@opam/result@opam:1.5@1c6a6533", - "@opam/odoc-parser@opam:2.0.0@a08011a0", + "@opam/odoc-parser@opam:2.4.1@38222354", "@opam/fpath@opam:0.7.3@674d8125", "@opam/fmt@opam:0.9.0@87213963", - "@opam/dune@opam:3.10.0@d5991a42", + "@opam/dune@opam:3.14.0@bfa03801", + "@opam/crunch@opam:3.2.0@832f19f8", "@opam/cmdliner@opam:1.0.4@93208aac", "@opam/astring@opam:0.8.5@1300cee8" ] }, - "@opam/ocamlformat-rpc-lib@opam:0.26.0@ba3de905": { - "id": "@opam/ocamlformat-rpc-lib@opam:0.26.0@ba3de905", + "@opam/ocamlformat-rpc-lib@opam:0.26.1@1f552fda": { + "id": "@opam/ocamlformat-rpc-lib@opam:0.26.1@1f552fda", "name": "@opam/ocamlformat-rpc-lib", - "version": "opam:0.26.0", + "version": "opam:0.26.1", "source": { "type": "install", "source": [ - "archive:https://opam.ocaml.org/cache/sha256/03/031494ab770cef10a8f6aa1cbeb5660e46c3aa6c0cd457b110fec859a75e877d#sha256:031494ab770cef10a8f6aa1cbeb5660e46c3aa6c0cd457b110fec859a75e877d", - "archive:https://github.com/ocaml-ppx/ocamlformat/releases/download/0.26.0/ocamlformat-0.26.0.tbz#sha256:031494ab770cef10a8f6aa1cbeb5660e46c3aa6c0cd457b110fec859a75e877d" + "archive:https://opam.ocaml.org/cache/sha256/da/da006e427f15b9ec612fb808d446599bd9b7c3ee25abeb3d555747a70d74c6d7#sha256:da006e427f15b9ec612fb808d446599bd9b7c3ee25abeb3d555747a70d74c6d7", + "archive:https://github.com/ocaml-ppx/ocamlformat/releases/download/0.26.1/ocamlformat-0.26.1.tbz#sha256:da006e427f15b9ec612fb808d446599bd9b7c3ee25abeb3d555747a70d74c6d7" ], "opam": { "name": "ocamlformat-rpc-lib", - "version": "0.26.0", - "path": "esy.lock/opam/ocamlformat-rpc-lib.0.26.0" + "version": "0.26.1", + "path": "esy.lock/opam/ocamlformat-rpc-lib.0.26.1" } }, "overrides": [], "dependencies": [ - "ocaml@4.14.1000@d41d8cd9", "@opam/dune@opam:3.10.0@d5991a42", + "ocaml@4.14.1000@d41d8cd9", "@opam/dune@opam:3.14.0@bfa03801", "@opam/csexp@opam:1.5.2@46614bf4", "@esy-ocaml/substs@0.0.1@d41d8cd9" ], "devDependencies": [ - "ocaml@4.14.1000@d41d8cd9", "@opam/dune@opam:3.10.0@d5991a42", + "ocaml@4.14.1000@d41d8cd9", "@opam/dune@opam:3.14.0@bfa03801", "@opam/csexp@opam:1.5.2@46614bf4" ] }, @@ -4893,122 +4912,117 @@ ], "devDependencies": [ "ocaml@4.14.1000@d41d8cd9" ] }, - "@opam/ocamlc-loc@opam:3.10.0@10088627": { - "id": "@opam/ocamlc-loc@opam:3.10.0@10088627", + "@opam/ocamlc-loc@opam:3.14.0@ed3b75f7": { + "id": "@opam/ocamlc-loc@opam:3.14.0@ed3b75f7", "name": "@opam/ocamlc-loc", - "version": "opam:3.10.0", + "version": "opam:3.14.0", "source": { "type": "install", "source": [ - "archive:https://opam.ocaml.org/cache/sha256/9f/9ff03384a98a8df79852cc674f0b4738ba8aec17029b6e2eeb514f895e710355#sha256:9ff03384a98a8df79852cc674f0b4738ba8aec17029b6e2eeb514f895e710355", - "archive:https://github.com/ocaml/dune/releases/download/3.10.0/dune-3.10.0.tbz#sha256:9ff03384a98a8df79852cc674f0b4738ba8aec17029b6e2eeb514f895e710355" + "archive:https://opam.ocaml.org/cache/sha256/f4/f4d09d89162621fdff424c253fa50c4920d2179fb5b3d1debab7bbe97c68b2fc#sha256:f4d09d89162621fdff424c253fa50c4920d2179fb5b3d1debab7bbe97c68b2fc", + "archive:https://github.com/ocaml/dune/releases/download/3.14.0/dune-3.14.0.tbz#sha256:f4d09d89162621fdff424c253fa50c4920d2179fb5b3d1debab7bbe97c68b2fc" ], "opam": { "name": "ocamlc-loc", - "version": "3.10.0", - "path": "esy.lock/opam/ocamlc-loc.3.10.0" + "version": "3.14.0", + "path": "esy.lock/opam/ocamlc-loc.3.14.0" } }, "overrides": [], "dependencies": [ - "ocaml@4.14.1000@d41d8cd9", "@opam/dyn@opam:3.10.0@0fc13d1c", - "@opam/dune@opam:3.10.0@d5991a42", "@esy-ocaml/substs@0.0.1@d41d8cd9" + "ocaml@4.14.1000@d41d8cd9", "@opam/dyn@opam:3.14.0@fdb13680", + "@opam/dune@opam:3.14.0@bfa03801", "@esy-ocaml/substs@0.0.1@d41d8cd9" ], "devDependencies": [ - "ocaml@4.14.1000@d41d8cd9", "@opam/dyn@opam:3.10.0@0fc13d1c", - "@opam/dune@opam:3.10.0@d5991a42" + "ocaml@4.14.1000@d41d8cd9", "@opam/dyn@opam:3.14.0@fdb13680", + "@opam/dune@opam:3.14.0@bfa03801" ] }, - "@opam/ocamlbuild@opam:0.14.2+win@39b9f56d": { - "id": "@opam/ocamlbuild@opam:0.14.2+win@39b9f56d", + "@opam/ocamlbuild@opam:0.14.3@6ab20ab3": { + "id": "@opam/ocamlbuild@opam:0.14.3@6ab20ab3", "name": "@opam/ocamlbuild", - "version": "opam:0.14.2+win", + "version": "opam:0.14.3", "source": { "type": "install", "source": [ - "archive:https://opam.ocaml.org/cache/md5/2f/2f407fadd57b073155a6aead887d9676#md5:2f407fadd57b073155a6aead887d9676", - "archive:https://github.com/ocaml/ocamlbuild/archive/refs/tags/0.14.2.tar.gz#md5:2f407fadd57b073155a6aead887d9676" + "archive:https://opam.ocaml.org/cache/md5/22/220df59060c916e8aac2eb471c870485#md5:220df59060c916e8aac2eb471c870485", + "archive:https://github.com/ocaml/ocamlbuild/archive/refs/tags/0.14.3.tar.gz#md5:220df59060c916e8aac2eb471c870485" ], "opam": { "name": "ocamlbuild", - "version": "0.14.2+win", - "path": "esy.lock/opam/ocamlbuild.0.14.2+win" + "version": "0.14.3", + "path": "esy.lock/opam/ocamlbuild.0.14.3" } }, "overrides": [ { - "opamoverride": "esy.lock/overrides/opam__s__ocamlbuild_opam__c__0.14.2+win_opam_override" + "opamoverride": "esy.lock/overrides/opam__s__ocamlbuild_opam__c__0.14.3_opam_override" } ], "dependencies": [ "ocaml@4.14.1000@d41d8cd9", "@esy-ocaml/substs@0.0.1@d41d8cd9" ], - "devDependencies": [ "ocaml@4.14.1000@d41d8cd9" ], - "extraSources": [ - { - "checksum": "sha256:a9b7e1829a3304e5a073d8ddea29d3d8272698e93b7e1ee659ae5e31e5cfb6b9", - "url": "https://raw.githubusercontent.com/ocaml-opam/opam-repository-mingw/354a87b397856f2a70024c5c83fc5001074935b6/packages/ocamlbuild/ocamlbuild.0.14.2/files/ocamlbuild-0.14.2.patch", - "relativePath": "ocamlbuild-0.14.2.patch" - } - ] + "devDependencies": [ "ocaml@4.14.1000@d41d8cd9" ] }, - "@opam/ocaml-lsp-server@opam:1.16.2@1425cb09": { - "id": "@opam/ocaml-lsp-server@opam:1.16.2@1425cb09", + "@opam/ocaml-lsp-server@opam:1.17.0@12f65153": { + "id": "@opam/ocaml-lsp-server@opam:1.17.0@12f65153", "name": "@opam/ocaml-lsp-server", - "version": "opam:1.16.2", + "version": "opam:1.17.0", "source": { "type": "install", "source": [ - "archive:https://opam.ocaml.org/cache/sha256/14/1487d5a4e2f2d4f023341058551bdb8ba86c23367b7c5b4fdda3aa7dc02aaec4#sha256:1487d5a4e2f2d4f023341058551bdb8ba86c23367b7c5b4fdda3aa7dc02aaec4", - "archive:https://github.com/ocaml/ocaml-lsp/releases/download/1.16.2/lsp-1.16.2.tbz#sha256:1487d5a4e2f2d4f023341058551bdb8ba86c23367b7c5b4fdda3aa7dc02aaec4" + "archive:https://opam.ocaml.org/cache/sha256/8f/8fb8bbd717eefd2608b4d83458105b660e0de3a1134dc8fc216ae659d4d19600#sha256:8fb8bbd717eefd2608b4d83458105b660e0de3a1134dc8fc216ae659d4d19600", + "archive:https://github.com/ocaml/ocaml-lsp/releases/download/1.17.0/lsp-1.17.0.tbz#sha256:8fb8bbd717eefd2608b4d83458105b660e0de3a1134dc8fc216ae659d4d19600" ], "opam": { "name": "ocaml-lsp-server", - "version": "1.16.2", - "path": "esy.lock/opam/ocaml-lsp-server.1.16.2" + "version": "1.17.0", + "path": "esy.lock/opam/ocaml-lsp-server.1.17.0" } }, "overrides": [], "dependencies": [ - "ocaml@4.14.1000@d41d8cd9", "@opam/yojson@opam:2.1.0@157478b0", - "@opam/xdg@opam:3.10.0@620c5589", "@opam/uutf@opam:1.0.3@47c95a18", - "@opam/stdune@opam:3.10.0@7e2a8959", - "@opam/spawn@opam:v0.15.1@85e9d6f1", "@opam/re@opam:1.10.4@c4910ba6", + "ocaml@4.14.1000@d41d8cd9", "@opam/yojson@opam:2.1.2@9fd14300", + "@opam/xdg@opam:3.14.0@c69773d6", "@opam/uutf@opam:1.0.3@47c95a18", + "@opam/stdune@opam:3.14.0@45da491f", + "@opam/spawn@opam:v0.15.1@85e9d6f1", "@opam/re@opam:1.11.0@87deb463", "@opam/ppx_yojson_conv_lib@opam:v0.16.0@33740c3c", - "@opam/pp@opam:1.1.2@89ad03b5", - "@opam/ordering@opam:3.10.0@eade5884", - "@opam/odoc-parser@opam:2.0.0@a08011a0", - "@opam/ocamlformat-rpc-lib@opam:0.26.0@ba3de905", - "@opam/ocamlc-loc@opam:3.10.0@10088627", - "@opam/merlin-lib@opam:4.9-414@16618f99", - "@opam/fiber@opam:3.7.0@d70e2471", "@opam/dyn@opam:3.10.0@0fc13d1c", - "@opam/dune-rpc@opam:3.10.0@c0378e53", - "@opam/dune-build-info@opam:3.10.0@457c29c8", - "@opam/dune@opam:3.10.0@d5991a42", "@opam/csexp@opam:1.5.2@46614bf4", - "@opam/chrome-trace@opam:3.10.0@62089f3e", + "@opam/pp@opam:1.2.0@16430027", + "@opam/ordering@opam:3.14.0@5506a75a", + "@opam/ocamlformat-rpc-lib@opam:0.26.1@1f552fda", + "@opam/ocamlc-loc@opam:3.14.0@ed3b75f7", + "@opam/merlin-lib@opam:4.13-414@05ab671e", + "@opam/fiber@opam:3.7.0@d70e2471", "@opam/dyn@opam:3.14.0@fdb13680", + "@opam/dune-rpc@opam:3.14.0@32a56211", + "@opam/dune-build-info@opam:3.14.0@4ff7c5a2", + "@opam/dune@opam:3.14.0@bfa03801", "@opam/csexp@opam:1.5.2@46614bf4", + "@opam/chrome-trace@opam:3.14.0@dcad8740", + "@opam/camlp-streams@opam:5.0.1@daaa0f94", + "@opam/astring@opam:0.8.5@1300cee8", "@esy-ocaml/substs@0.0.1@d41d8cd9" ], "devDependencies": [ - "ocaml@4.14.1000@d41d8cd9", "@opam/yojson@opam:2.1.0@157478b0", - "@opam/xdg@opam:3.10.0@620c5589", "@opam/uutf@opam:1.0.3@47c95a18", - "@opam/stdune@opam:3.10.0@7e2a8959", - "@opam/spawn@opam:v0.15.1@85e9d6f1", "@opam/re@opam:1.10.4@c4910ba6", + "ocaml@4.14.1000@d41d8cd9", "@opam/yojson@opam:2.1.2@9fd14300", + "@opam/xdg@opam:3.14.0@c69773d6", "@opam/uutf@opam:1.0.3@47c95a18", + "@opam/stdune@opam:3.14.0@45da491f", + "@opam/spawn@opam:v0.15.1@85e9d6f1", "@opam/re@opam:1.11.0@87deb463", "@opam/ppx_yojson_conv_lib@opam:v0.16.0@33740c3c", - "@opam/pp@opam:1.1.2@89ad03b5", - "@opam/ordering@opam:3.10.0@eade5884", - "@opam/odoc-parser@opam:2.0.0@a08011a0", - "@opam/ocamlformat-rpc-lib@opam:0.26.0@ba3de905", - "@opam/ocamlc-loc@opam:3.10.0@10088627", - "@opam/merlin-lib@opam:4.9-414@16618f99", - "@opam/fiber@opam:3.7.0@d70e2471", "@opam/dyn@opam:3.10.0@0fc13d1c", - "@opam/dune-rpc@opam:3.10.0@c0378e53", - "@opam/dune-build-info@opam:3.10.0@457c29c8", - "@opam/dune@opam:3.10.0@d5991a42", "@opam/csexp@opam:1.5.2@46614bf4", - "@opam/chrome-trace@opam:3.10.0@62089f3e" + "@opam/pp@opam:1.2.0@16430027", + "@opam/ordering@opam:3.14.0@5506a75a", + "@opam/ocamlformat-rpc-lib@opam:0.26.1@1f552fda", + "@opam/ocamlc-loc@opam:3.14.0@ed3b75f7", + "@opam/merlin-lib@opam:4.13-414@05ab671e", + "@opam/fiber@opam:3.7.0@d70e2471", "@opam/dyn@opam:3.14.0@fdb13680", + "@opam/dune-rpc@opam:3.14.0@32a56211", + "@opam/dune-build-info@opam:3.14.0@4ff7c5a2", + "@opam/dune@opam:3.14.0@bfa03801", "@opam/csexp@opam:1.5.2@46614bf4", + "@opam/chrome-trace@opam:3.14.0@dcad8740", + "@opam/camlp-streams@opam:5.0.1@daaa0f94", + "@opam/astring@opam:0.8.5@1300cee8" ] }, - "@opam/ocaml-compiler-libs@opam:v0.12.4@41979882": { - "id": "@opam/ocaml-compiler-libs@opam:v0.12.4@41979882", + "@opam/ocaml-compiler-libs@opam:v0.12.4@57a85ad1": { + "id": "@opam/ocaml-compiler-libs@opam:v0.12.4@57a85ad1", "name": "@opam/ocaml-compiler-libs", "version": "opam:v0.12.4", "source": { @@ -5025,36 +5039,36 @@ }, "overrides": [], "dependencies": [ - "ocaml@4.14.1000@d41d8cd9", "@opam/dune@opam:3.10.0@d5991a42", + "ocaml@4.14.1000@d41d8cd9", "@opam/dune@opam:3.14.0@bfa03801", "@esy-ocaml/substs@0.0.1@d41d8cd9" ], "devDependencies": [ - "ocaml@4.14.1000@d41d8cd9", "@opam/dune@opam:3.10.0@d5991a42" + "ocaml@4.14.1000@d41d8cd9", "@opam/dune@opam:3.14.0@bfa03801" ] }, - "@opam/merlin-lib@opam:4.9-414@16618f99": { - "id": "@opam/merlin-lib@opam:4.9-414@16618f99", + "@opam/merlin-lib@opam:4.13-414@05ab671e": { + "id": "@opam/merlin-lib@opam:4.13-414@05ab671e", "name": "@opam/merlin-lib", - "version": "opam:4.9-414", + "version": "opam:4.13-414", "source": { "type": "install", "source": [ - "archive:https://opam.ocaml.org/cache/sha256/e2/e23fc47813591269ff9d27c820988e520a662c89dd0af7ea652b21517499cbfd#sha256:e23fc47813591269ff9d27c820988e520a662c89dd0af7ea652b21517499cbfd", - "archive:https://github.com/ocaml/merlin/releases/download/v4.9-414/merlin-4.9-414.tbz#sha256:e23fc47813591269ff9d27c820988e520a662c89dd0af7ea652b21517499cbfd" + "archive:https://opam.ocaml.org/cache/sha256/02/025cf1a93ba1e40916f5d9cf22fe7569bbfbaf403f54e4b724e4f92078b1db03#sha256:025cf1a93ba1e40916f5d9cf22fe7569bbfbaf403f54e4b724e4f92078b1db03", + "archive:https://github.com/ocaml/merlin/releases/download/v4.13-414/merlin-4.13-414.tbz#sha256:025cf1a93ba1e40916f5d9cf22fe7569bbfbaf403f54e4b724e4f92078b1db03" ], "opam": { "name": "merlin-lib", - "version": "4.9-414", - "path": "esy.lock/opam/merlin-lib.4.9-414" + "version": "4.13-414", + "path": "esy.lock/opam/merlin-lib.4.13-414" } }, "overrides": [], "dependencies": [ - "ocaml@4.14.1000@d41d8cd9", "@opam/dune@opam:3.10.0@d5991a42", + "ocaml@4.14.1000@d41d8cd9", "@opam/dune@opam:3.14.0@bfa03801", "@opam/csexp@opam:1.5.2@46614bf4", "@esy-ocaml/substs@0.0.1@d41d8cd9" ], "devDependencies": [ - "ocaml@4.14.1000@d41d8cd9", "@opam/dune@opam:3.10.0@d5991a42", + "ocaml@4.14.1000@d41d8cd9", "@opam/dune@opam:3.14.0@bfa03801", "@opam/csexp@opam:1.5.2@46614bf4" ] }, @@ -5076,120 +5090,147 @@ }, "overrides": [], "dependencies": [ - "ocaml@4.14.1000@d41d8cd9", "@opam/dune@opam:3.10.0@d5991a42", + "ocaml@4.14.1000@d41d8cd9", "@opam/dune@opam:3.14.0@bfa03801", "@opam/cppo@opam:1.6.9@db929a12", "@esy-ocaml/substs@0.0.1@d41d8cd9" ], "devDependencies": [ - "ocaml@4.14.1000@d41d8cd9", "@opam/dune@opam:3.10.0@d5991a42" + "ocaml@4.14.1000@d41d8cd9", "@opam/dune@opam:3.14.0@bfa03801" ] }, - "@opam/merlin@opam:4.9-414@e1587db3": { - "id": "@opam/merlin@opam:4.9-414@e1587db3", + "@opam/merlin@opam:4.13-414@3f34cd37": { + "id": "@opam/merlin@opam:4.13-414@3f34cd37", "name": "@opam/merlin", - "version": "opam:4.9-414", + "version": "opam:4.13-414", "source": { "type": "install", "source": [ - "archive:https://opam.ocaml.org/cache/sha256/e2/e23fc47813591269ff9d27c820988e520a662c89dd0af7ea652b21517499cbfd#sha256:e23fc47813591269ff9d27c820988e520a662c89dd0af7ea652b21517499cbfd", - "archive:https://github.com/ocaml/merlin/releases/download/v4.9-414/merlin-4.9-414.tbz#sha256:e23fc47813591269ff9d27c820988e520a662c89dd0af7ea652b21517499cbfd" + "archive:https://opam.ocaml.org/cache/sha256/02/025cf1a93ba1e40916f5d9cf22fe7569bbfbaf403f54e4b724e4f92078b1db03#sha256:025cf1a93ba1e40916f5d9cf22fe7569bbfbaf403f54e4b724e4f92078b1db03", + "archive:https://github.com/ocaml/merlin/releases/download/v4.13-414/merlin-4.13-414.tbz#sha256:025cf1a93ba1e40916f5d9cf22fe7569bbfbaf403f54e4b724e4f92078b1db03" ], "opam": { "name": "merlin", - "version": "4.9-414", - "path": "esy.lock/opam/merlin.4.9-414" + "version": "4.13-414", + "path": "esy.lock/opam/merlin.4.13-414" } }, "overrides": [], "dependencies": [ - "ocaml@4.14.1000@d41d8cd9", "@opam/yojson@opam:2.1.0@157478b0", - "@opam/merlin-lib@opam:4.9-414@16618f99", - "@opam/dune@opam:3.10.0@d5991a42", - "@opam/dot-merlin-reader@opam:4.9@5d77f68f", + "ocaml@4.14.1000@d41d8cd9", "@opam/yojson@opam:2.1.2@9fd14300", + "@opam/merlin-lib@opam:4.13-414@05ab671e", + "@opam/dune@opam:3.14.0@bfa03801", + "@opam/dot-merlin-reader@opam:4.9@6b69f4a0", "@esy-ocaml/substs@0.0.1@d41d8cd9" ], "devDependencies": [ - "ocaml@4.14.1000@d41d8cd9", "@opam/yojson@opam:2.1.0@157478b0", - "@opam/merlin-lib@opam:4.9-414@16618f99", - "@opam/dune@opam:3.10.0@d5991a42", - "@opam/dot-merlin-reader@opam:4.9@5d77f68f" + "ocaml@4.14.1000@d41d8cd9", "@opam/yojson@opam:2.1.2@9fd14300", + "@opam/merlin-lib@opam:4.13-414@05ab671e", + "@opam/dune@opam:3.14.0@bfa03801", + "@opam/dot-merlin-reader@opam:4.9@6b69f4a0" ] }, - "@opam/menhirSdk@opam:20230608@36f21a74": { - "id": "@opam/menhirSdk@opam:20230608@36f21a74", + "@opam/menhirSdk@opam:20231231@b20b8a51": { + "id": "@opam/menhirSdk@opam:20231231@b20b8a51", "name": "@opam/menhirSdk", - "version": "opam:20230608", + "version": "opam:20231231", "source": { "type": "install", "source": [ - "archive:https://opam.ocaml.org/cache/md5/8f/8ff26b1e3685c472b7b3aba2fe938a43#md5:8ff26b1e3685c472b7b3aba2fe938a43", - "archive:https://gitlab.inria.fr/fpottier/menhir/-/archive/20230608/archive.tar.gz#md5:8ff26b1e3685c472b7b3aba2fe938a43" + "archive:https://opam.ocaml.org/cache/md5/79/799748bc3b7a542798a85956c7863865#md5:799748bc3b7a542798a85956c7863865", + "archive:https://gitlab.inria.fr/fpottier/menhir/-/archive/20231231/archive.tar.gz#md5:799748bc3b7a542798a85956c7863865" ], "opam": { "name": "menhirSdk", - "version": "20230608", - "path": "esy.lock/opam/menhirSdk.20230608" + "version": "20231231", + "path": "esy.lock/opam/menhirSdk.20231231" } }, "overrides": [], "dependencies": [ - "ocaml@4.14.1000@d41d8cd9", "@opam/dune@opam:3.10.0@d5991a42", + "ocaml@4.14.1000@d41d8cd9", "@opam/dune@opam:3.14.0@bfa03801", "@esy-ocaml/substs@0.0.1@d41d8cd9" ], "devDependencies": [ - "ocaml@4.14.1000@d41d8cd9", "@opam/dune@opam:3.10.0@d5991a42" + "ocaml@4.14.1000@d41d8cd9", "@opam/dune@opam:3.14.0@bfa03801" ] }, - "@opam/menhirLib@opam:20230608@cf13bc0d": { - "id": "@opam/menhirLib@opam:20230608@cf13bc0d", + "@opam/menhirLib@opam:20231231@14d79986": { + "id": "@opam/menhirLib@opam:20231231@14d79986", "name": "@opam/menhirLib", - "version": "opam:20230608", + "version": "opam:20231231", "source": { "type": "install", "source": [ - "archive:https://opam.ocaml.org/cache/md5/8f/8ff26b1e3685c472b7b3aba2fe938a43#md5:8ff26b1e3685c472b7b3aba2fe938a43", - "archive:https://gitlab.inria.fr/fpottier/menhir/-/archive/20230608/archive.tar.gz#md5:8ff26b1e3685c472b7b3aba2fe938a43" + "archive:https://opam.ocaml.org/cache/md5/79/799748bc3b7a542798a85956c7863865#md5:799748bc3b7a542798a85956c7863865", + "archive:https://gitlab.inria.fr/fpottier/menhir/-/archive/20231231/archive.tar.gz#md5:799748bc3b7a542798a85956c7863865" ], "opam": { "name": "menhirLib", - "version": "20230608", - "path": "esy.lock/opam/menhirLib.20230608" + "version": "20231231", + "path": "esy.lock/opam/menhirLib.20231231" + } + }, + "overrides": [], + "dependencies": [ + "ocaml@4.14.1000@d41d8cd9", "@opam/dune@opam:3.14.0@bfa03801", + "@esy-ocaml/substs@0.0.1@d41d8cd9" + ], + "devDependencies": [ + "ocaml@4.14.1000@d41d8cd9", "@opam/dune@opam:3.14.0@bfa03801" + ] + }, + "@opam/menhirCST@opam:20231231@0f42b5d1": { + "id": "@opam/menhirCST@opam:20231231@0f42b5d1", + "name": "@opam/menhirCST", + "version": "opam:20231231", + "source": { + "type": "install", + "source": [ + "archive:https://opam.ocaml.org/cache/md5/79/799748bc3b7a542798a85956c7863865#md5:799748bc3b7a542798a85956c7863865", + "archive:https://gitlab.inria.fr/fpottier/menhir/-/archive/20231231/archive.tar.gz#md5:799748bc3b7a542798a85956c7863865" + ], + "opam": { + "name": "menhirCST", + "version": "20231231", + "path": "esy.lock/opam/menhirCST.20231231" } }, "overrides": [], "dependencies": [ - "ocaml@4.14.1000@d41d8cd9", "@opam/dune@opam:3.10.0@d5991a42", + "ocaml@4.14.1000@d41d8cd9", "@opam/dune@opam:3.14.0@bfa03801", "@esy-ocaml/substs@0.0.1@d41d8cd9" ], "devDependencies": [ - "ocaml@4.14.1000@d41d8cd9", "@opam/dune@opam:3.10.0@d5991a42" + "ocaml@4.14.1000@d41d8cd9", "@opam/dune@opam:3.14.0@bfa03801" ] }, - "@opam/menhir@opam:20230608@c0081728": { - "id": "@opam/menhir@opam:20230608@c0081728", + "@opam/menhir@opam:20231231@f35eae6a": { + "id": "@opam/menhir@opam:20231231@f35eae6a", "name": "@opam/menhir", - "version": "opam:20230608", + "version": "opam:20231231", "source": { "type": "install", "source": [ - "archive:https://opam.ocaml.org/cache/md5/8f/8ff26b1e3685c472b7b3aba2fe938a43#md5:8ff26b1e3685c472b7b3aba2fe938a43", - "archive:https://gitlab.inria.fr/fpottier/menhir/-/archive/20230608/archive.tar.gz#md5:8ff26b1e3685c472b7b3aba2fe938a43" + "archive:https://opam.ocaml.org/cache/md5/79/799748bc3b7a542798a85956c7863865#md5:799748bc3b7a542798a85956c7863865", + "archive:https://gitlab.inria.fr/fpottier/menhir/-/archive/20231231/archive.tar.gz#md5:799748bc3b7a542798a85956c7863865" ], "opam": { "name": "menhir", - "version": "20230608", - "path": "esy.lock/opam/menhir.20230608" + "version": "20231231", + "path": "esy.lock/opam/menhir.20231231" } }, "overrides": [], "dependencies": [ - "ocaml@4.14.1000@d41d8cd9", "@opam/menhirSdk@opam:20230608@36f21a74", - "@opam/menhirLib@opam:20230608@cf13bc0d", - "@opam/dune@opam:3.10.0@d5991a42", "@esy-ocaml/substs@0.0.1@d41d8cd9" + "ocaml@4.14.1000@d41d8cd9", "@opam/menhirSdk@opam:20231231@b20b8a51", + "@opam/menhirLib@opam:20231231@14d79986", + "@opam/menhirCST@opam:20231231@0f42b5d1", + "@opam/dune@opam:3.14.0@bfa03801", "@esy-ocaml/substs@0.0.1@d41d8cd9" ], "devDependencies": [ - "ocaml@4.14.1000@d41d8cd9", "@opam/menhirSdk@opam:20230608@36f21a74", - "@opam/menhirLib@opam:20230608@cf13bc0d", - "@opam/dune@opam:3.10.0@d5991a42" + "ocaml@4.14.1000@d41d8cd9", "@opam/menhirSdk@opam:20231231@b20b8a51", + "@opam/menhirLib@opam:20231231@14d79986", + "@opam/menhirCST@opam:20231231@0f42b5d1", + "@opam/dune@opam:3.14.0@bfa03801" ] }, "@opam/fpath@opam:0.7.3@674d8125": { @@ -5212,7 +5253,7 @@ "dependencies": [ "ocaml@4.14.1000@d41d8cd9", "@opam/topkg@opam:1.0.7@7ee47d76", "@opam/ocamlfind@opam:1.9.6@da5169c7", - "@opam/ocamlbuild@opam:0.14.2+win@39b9f56d", + "@opam/ocamlbuild@opam:0.14.3@6ab20ab3", "@opam/astring@opam:0.8.5@1300cee8", "@esy-ocaml/substs@0.0.1@d41d8cd9" ], @@ -5240,7 +5281,7 @@ "dependencies": [ "ocaml@4.14.1000@d41d8cd9", "@opam/topkg@opam:1.0.7@7ee47d76", "@opam/ocamlfind@opam:1.9.6@da5169c7", - "@opam/ocamlbuild@opam:0.14.2+win@39b9f56d", + "@opam/ocamlbuild@opam:0.14.3@6ab20ab3", "@opam/cmdliner@opam:1.0.4@93208aac", "@opam/base-unix@opam:base@87d0b2eb", "@esy-ocaml/substs@0.0.1@d41d8cd9" @@ -5265,11 +5306,11 @@ }, "overrides": [], "dependencies": [ - "ocaml@4.14.1000@d41d8cd9", "@opam/dune@opam:3.10.0@d5991a42", + "ocaml@4.14.1000@d41d8cd9", "@opam/dune@opam:3.14.0@bfa03801", "@esy-ocaml/substs@0.0.1@d41d8cd9" ], "devDependencies": [ - "ocaml@4.14.1000@d41d8cd9", "@opam/dune@opam:3.10.0@d5991a42" + "ocaml@4.14.1000@d41d8cd9", "@opam/dune@opam:3.14.0@bfa03801" ] }, "@opam/fiber@opam:3.7.0@d70e2471": { @@ -5290,17 +5331,17 @@ }, "overrides": [], "dependencies": [ - "ocaml@4.14.1000@d41d8cd9", "@opam/stdune@opam:3.10.0@7e2a8959", - "@opam/dyn@opam:3.10.0@0fc13d1c", "@opam/dune@opam:3.10.0@d5991a42", + "ocaml@4.14.1000@d41d8cd9", "@opam/stdune@opam:3.14.0@45da491f", + "@opam/dyn@opam:3.14.0@fdb13680", "@opam/dune@opam:3.14.0@bfa03801", "@esy-ocaml/substs@0.0.1@d41d8cd9" ], "devDependencies": [ - "ocaml@4.14.1000@d41d8cd9", "@opam/stdune@opam:3.10.0@7e2a8959", - "@opam/dyn@opam:3.10.0@0fc13d1c", "@opam/dune@opam:3.10.0@d5991a42" + "ocaml@4.14.1000@d41d8cd9", "@opam/stdune@opam:3.14.0@45da491f", + "@opam/dyn@opam:3.14.0@fdb13680", "@opam/dune@opam:3.14.0@bfa03801" ] }, - "@opam/easy-format@opam:1.3.4@b358e98e": { - "id": "@opam/easy-format@opam:1.3.4@b358e98e", + "@opam/easy-format@opam:1.3.4@21f6fe23": { + "id": "@opam/easy-format@opam:1.3.4@21f6fe23", "name": "@opam/easy-format", "version": "opam:1.3.4", "source": { @@ -5317,141 +5358,141 @@ }, "overrides": [], "dependencies": [ - "ocaml@4.14.1000@d41d8cd9", "@opam/dune@opam:3.10.0@d5991a42", + "ocaml@4.14.1000@d41d8cd9", "@opam/dune@opam:3.14.0@bfa03801", "@esy-ocaml/substs@0.0.1@d41d8cd9" ], "devDependencies": [ - "ocaml@4.14.1000@d41d8cd9", "@opam/dune@opam:3.10.0@d5991a42" + "ocaml@4.14.1000@d41d8cd9", "@opam/dune@opam:3.14.0@bfa03801" ] }, - "@opam/dyn@opam:3.10.0@0fc13d1c": { - "id": "@opam/dyn@opam:3.10.0@0fc13d1c", + "@opam/dyn@opam:3.14.0@fdb13680": { + "id": "@opam/dyn@opam:3.14.0@fdb13680", "name": "@opam/dyn", - "version": "opam:3.10.0", + "version": "opam:3.14.0", "source": { "type": "install", "source": [ - "archive:https://opam.ocaml.org/cache/sha256/9f/9ff03384a98a8df79852cc674f0b4738ba8aec17029b6e2eeb514f895e710355#sha256:9ff03384a98a8df79852cc674f0b4738ba8aec17029b6e2eeb514f895e710355", - "archive:https://github.com/ocaml/dune/releases/download/3.10.0/dune-3.10.0.tbz#sha256:9ff03384a98a8df79852cc674f0b4738ba8aec17029b6e2eeb514f895e710355" + "archive:https://opam.ocaml.org/cache/sha256/f4/f4d09d89162621fdff424c253fa50c4920d2179fb5b3d1debab7bbe97c68b2fc#sha256:f4d09d89162621fdff424c253fa50c4920d2179fb5b3d1debab7bbe97c68b2fc", + "archive:https://github.com/ocaml/dune/releases/download/3.14.0/dune-3.14.0.tbz#sha256:f4d09d89162621fdff424c253fa50c4920d2179fb5b3d1debab7bbe97c68b2fc" ], "opam": { "name": "dyn", - "version": "3.10.0", - "path": "esy.lock/opam/dyn.3.10.0" + "version": "3.14.0", + "path": "esy.lock/opam/dyn.3.14.0" } }, "overrides": [], "dependencies": [ - "ocaml@4.14.1000@d41d8cd9", "@opam/pp@opam:1.1.2@89ad03b5", - "@opam/ordering@opam:3.10.0@eade5884", - "@opam/dune@opam:3.10.0@d5991a42", "@esy-ocaml/substs@0.0.1@d41d8cd9" + "ocaml@4.14.1000@d41d8cd9", "@opam/pp@opam:1.2.0@16430027", + "@opam/ordering@opam:3.14.0@5506a75a", + "@opam/dune@opam:3.14.0@bfa03801", "@esy-ocaml/substs@0.0.1@d41d8cd9" ], "devDependencies": [ - "ocaml@4.14.1000@d41d8cd9", "@opam/pp@opam:1.1.2@89ad03b5", - "@opam/ordering@opam:3.10.0@eade5884", - "@opam/dune@opam:3.10.0@d5991a42" + "ocaml@4.14.1000@d41d8cd9", "@opam/pp@opam:1.2.0@16430027", + "@opam/ordering@opam:3.14.0@5506a75a", + "@opam/dune@opam:3.14.0@bfa03801" ] }, - "@opam/dune-rpc@opam:3.10.0@c0378e53": { - "id": "@opam/dune-rpc@opam:3.10.0@c0378e53", + "@opam/dune-rpc@opam:3.14.0@32a56211": { + "id": "@opam/dune-rpc@opam:3.14.0@32a56211", "name": "@opam/dune-rpc", - "version": "opam:3.10.0", + "version": "opam:3.14.0", "source": { "type": "install", "source": [ - "archive:https://opam.ocaml.org/cache/sha256/9f/9ff03384a98a8df79852cc674f0b4738ba8aec17029b6e2eeb514f895e710355#sha256:9ff03384a98a8df79852cc674f0b4738ba8aec17029b6e2eeb514f895e710355", - "archive:https://github.com/ocaml/dune/releases/download/3.10.0/dune-3.10.0.tbz#sha256:9ff03384a98a8df79852cc674f0b4738ba8aec17029b6e2eeb514f895e710355" + "archive:https://opam.ocaml.org/cache/sha256/f4/f4d09d89162621fdff424c253fa50c4920d2179fb5b3d1debab7bbe97c68b2fc#sha256:f4d09d89162621fdff424c253fa50c4920d2179fb5b3d1debab7bbe97c68b2fc", + "archive:https://github.com/ocaml/dune/releases/download/3.14.0/dune-3.14.0.tbz#sha256:f4d09d89162621fdff424c253fa50c4920d2179fb5b3d1debab7bbe97c68b2fc" ], "opam": { "name": "dune-rpc", - "version": "3.10.0", - "path": "esy.lock/opam/dune-rpc.3.10.0" + "version": "3.14.0", + "path": "esy.lock/opam/dune-rpc.3.14.0" } }, "overrides": [], "dependencies": [ - "@opam/xdg@opam:3.10.0@620c5589", - "@opam/stdune@opam:3.10.0@7e2a8959", "@opam/pp@opam:1.1.2@89ad03b5", - "@opam/ordering@opam:3.10.0@eade5884", - "@opam/dyn@opam:3.10.0@0fc13d1c", "@opam/dune@opam:3.10.0@d5991a42", + "@opam/xdg@opam:3.14.0@c69773d6", + "@opam/stdune@opam:3.14.0@45da491f", "@opam/pp@opam:1.2.0@16430027", + "@opam/ordering@opam:3.14.0@5506a75a", + "@opam/dyn@opam:3.14.0@fdb13680", "@opam/dune@opam:3.14.0@bfa03801", "@opam/csexp@opam:1.5.2@46614bf4", "@esy-ocaml/substs@0.0.1@d41d8cd9" ], "devDependencies": [ - "@opam/xdg@opam:3.10.0@620c5589", - "@opam/stdune@opam:3.10.0@7e2a8959", "@opam/pp@opam:1.1.2@89ad03b5", - "@opam/ordering@opam:3.10.0@eade5884", - "@opam/dyn@opam:3.10.0@0fc13d1c", "@opam/dune@opam:3.10.0@d5991a42", + "@opam/xdg@opam:3.14.0@c69773d6", + "@opam/stdune@opam:3.14.0@45da491f", "@opam/pp@opam:1.2.0@16430027", + "@opam/ordering@opam:3.14.0@5506a75a", + "@opam/dyn@opam:3.14.0@fdb13680", "@opam/dune@opam:3.14.0@bfa03801", "@opam/csexp@opam:1.5.2@46614bf4" ] }, - "@opam/dune-configurator@opam:3.10.0@f2df97f2": { - "id": "@opam/dune-configurator@opam:3.10.0@f2df97f2", + "@opam/dune-configurator@opam:3.14.0@aa6780d6": { + "id": "@opam/dune-configurator@opam:3.14.0@aa6780d6", "name": "@opam/dune-configurator", - "version": "opam:3.10.0", + "version": "opam:3.14.0", "source": { "type": "install", "source": [ - "archive:https://opam.ocaml.org/cache/sha256/9f/9ff03384a98a8df79852cc674f0b4738ba8aec17029b6e2eeb514f895e710355#sha256:9ff03384a98a8df79852cc674f0b4738ba8aec17029b6e2eeb514f895e710355", - "archive:https://github.com/ocaml/dune/releases/download/3.10.0/dune-3.10.0.tbz#sha256:9ff03384a98a8df79852cc674f0b4738ba8aec17029b6e2eeb514f895e710355" + "archive:https://opam.ocaml.org/cache/sha256/f4/f4d09d89162621fdff424c253fa50c4920d2179fb5b3d1debab7bbe97c68b2fc#sha256:f4d09d89162621fdff424c253fa50c4920d2179fb5b3d1debab7bbe97c68b2fc", + "archive:https://github.com/ocaml/dune/releases/download/3.14.0/dune-3.14.0.tbz#sha256:f4d09d89162621fdff424c253fa50c4920d2179fb5b3d1debab7bbe97c68b2fc" ], "opam": { "name": "dune-configurator", - "version": "3.10.0", - "path": "esy.lock/opam/dune-configurator.3.10.0" + "version": "3.14.0", + "path": "esy.lock/opam/dune-configurator.3.14.0" } }, "overrides": [], "dependencies": [ - "ocaml@4.14.1000@d41d8cd9", "@opam/dune@opam:3.10.0@d5991a42", + "ocaml@4.14.1000@d41d8cd9", "@opam/dune@opam:3.14.0@bfa03801", "@opam/csexp@opam:1.5.2@46614bf4", "@opam/base-unix@opam:base@87d0b2eb", "@esy-ocaml/substs@0.0.1@d41d8cd9" ], "devDependencies": [ - "ocaml@4.14.1000@d41d8cd9", "@opam/dune@opam:3.10.0@d5991a42", + "ocaml@4.14.1000@d41d8cd9", "@opam/dune@opam:3.14.0@bfa03801", "@opam/csexp@opam:1.5.2@46614bf4", "@opam/base-unix@opam:base@87d0b2eb" ] }, - "@opam/dune-build-info@opam:3.10.0@457c29c8": { - "id": "@opam/dune-build-info@opam:3.10.0@457c29c8", + "@opam/dune-build-info@opam:3.14.0@4ff7c5a2": { + "id": "@opam/dune-build-info@opam:3.14.0@4ff7c5a2", "name": "@opam/dune-build-info", - "version": "opam:3.10.0", + "version": "opam:3.14.0", "source": { "type": "install", "source": [ - "archive:https://opam.ocaml.org/cache/sha256/9f/9ff03384a98a8df79852cc674f0b4738ba8aec17029b6e2eeb514f895e710355#sha256:9ff03384a98a8df79852cc674f0b4738ba8aec17029b6e2eeb514f895e710355", - "archive:https://github.com/ocaml/dune/releases/download/3.10.0/dune-3.10.0.tbz#sha256:9ff03384a98a8df79852cc674f0b4738ba8aec17029b6e2eeb514f895e710355" + "archive:https://opam.ocaml.org/cache/sha256/f4/f4d09d89162621fdff424c253fa50c4920d2179fb5b3d1debab7bbe97c68b2fc#sha256:f4d09d89162621fdff424c253fa50c4920d2179fb5b3d1debab7bbe97c68b2fc", + "archive:https://github.com/ocaml/dune/releases/download/3.14.0/dune-3.14.0.tbz#sha256:f4d09d89162621fdff424c253fa50c4920d2179fb5b3d1debab7bbe97c68b2fc" ], "opam": { "name": "dune-build-info", - "version": "3.10.0", - "path": "esy.lock/opam/dune-build-info.3.10.0" + "version": "3.14.0", + "path": "esy.lock/opam/dune-build-info.3.14.0" } }, "overrides": [], "dependencies": [ - "ocaml@4.14.1000@d41d8cd9", "@opam/dune@opam:3.10.0@d5991a42", + "ocaml@4.14.1000@d41d8cd9", "@opam/dune@opam:3.14.0@bfa03801", "@esy-ocaml/substs@0.0.1@d41d8cd9" ], "devDependencies": [ - "ocaml@4.14.1000@d41d8cd9", "@opam/dune@opam:3.10.0@d5991a42" + "ocaml@4.14.1000@d41d8cd9", "@opam/dune@opam:3.14.0@bfa03801" ] }, - "@opam/dune@opam:3.10.0@d5991a42": { - "id": "@opam/dune@opam:3.10.0@d5991a42", + "@opam/dune@opam:3.14.0@bfa03801": { + "id": "@opam/dune@opam:3.14.0@bfa03801", "name": "@opam/dune", - "version": "opam:3.10.0", + "version": "opam:3.14.0", "source": { "type": "install", "source": [ - "archive:https://opam.ocaml.org/cache/sha256/9f/9ff03384a98a8df79852cc674f0b4738ba8aec17029b6e2eeb514f895e710355#sha256:9ff03384a98a8df79852cc674f0b4738ba8aec17029b6e2eeb514f895e710355", - "archive:https://github.com/ocaml/dune/releases/download/3.10.0/dune-3.10.0.tbz#sha256:9ff03384a98a8df79852cc674f0b4738ba8aec17029b6e2eeb514f895e710355" + "archive:https://opam.ocaml.org/cache/sha256/f4/f4d09d89162621fdff424c253fa50c4920d2179fb5b3d1debab7bbe97c68b2fc#sha256:f4d09d89162621fdff424c253fa50c4920d2179fb5b3d1debab7bbe97c68b2fc", + "archive:https://github.com/ocaml/dune/releases/download/3.14.0/dune-3.14.0.tbz#sha256:f4d09d89162621fdff424c253fa50c4920d2179fb5b3d1debab7bbe97c68b2fc" ], "opam": { "name": "dune", - "version": "3.10.0", - "path": "esy.lock/opam/dune.3.10.0" + "version": "3.14.0", + "path": "esy.lock/opam/dune.3.14.0" } }, "overrides": [], @@ -5465,8 +5506,8 @@ "@opam/base-threads@opam:base@36803084" ] }, - "@opam/dot-merlin-reader@opam:4.9@5d77f68f": { - "id": "@opam/dot-merlin-reader@opam:4.9@5d77f68f", + "@opam/dot-merlin-reader@opam:4.9@6b69f4a0": { + "id": "@opam/dot-merlin-reader@opam:4.9@6b69f4a0", "name": "@opam/dot-merlin-reader", "version": "opam:4.9", "source": { @@ -5484,13 +5525,13 @@ "overrides": [], "dependencies": [ "ocaml@4.14.1000@d41d8cd9", "@opam/ocamlfind@opam:1.9.6@da5169c7", - "@opam/merlin-lib@opam:4.9-414@16618f99", - "@opam/dune@opam:3.10.0@d5991a42", "@esy-ocaml/substs@0.0.1@d41d8cd9" + "@opam/merlin-lib@opam:4.13-414@05ab671e", + "@opam/dune@opam:3.14.0@bfa03801", "@esy-ocaml/substs@0.0.1@d41d8cd9" ], "devDependencies": [ "ocaml@4.14.1000@d41d8cd9", "@opam/ocamlfind@opam:1.9.6@da5169c7", - "@opam/merlin-lib@opam:4.9-414@16618f99", - "@opam/dune@opam:3.10.0@d5991a42" + "@opam/merlin-lib@opam:4.13-414@05ab671e", + "@opam/dune@opam:3.14.0@bfa03801" ] }, "@opam/csexp@opam:1.5.2@46614bf4": { @@ -5511,11 +5552,40 @@ }, "overrides": [], "dependencies": [ - "ocaml@4.14.1000@d41d8cd9", "@opam/dune@opam:3.10.0@d5991a42", + "ocaml@4.14.1000@d41d8cd9", "@opam/dune@opam:3.14.0@bfa03801", "@esy-ocaml/substs@0.0.1@d41d8cd9" ], "devDependencies": [ - "ocaml@4.14.1000@d41d8cd9", "@opam/dune@opam:3.10.0@d5991a42" + "ocaml@4.14.1000@d41d8cd9", "@opam/dune@opam:3.14.0@bfa03801" + ] + }, + "@opam/crunch@opam:3.2.0@832f19f8": { + "id": "@opam/crunch@opam:3.2.0@832f19f8", + "name": "@opam/crunch", + "version": "opam:3.2.0", + "source": { + "type": "install", + "source": [ + "archive:https://opam.ocaml.org/cache/sha256/0a/0a1a4ebb86ab643dd193b5c0046e4d168c6e1cb41e6e5e5b6fbd3b7492e8c6de#sha256:0a1a4ebb86ab643dd193b5c0046e4d168c6e1cb41e6e5e5b6fbd3b7492e8c6de", + "archive:https://github.com/mirage/ocaml-crunch/releases/download/v3.2.0/crunch-v3.2.0.tbz#sha256:0a1a4ebb86ab643dd193b5c0046e4d168c6e1cb41e6e5e5b6fbd3b7492e8c6de" + ], + "opam": { + "name": "crunch", + "version": "3.2.0", + "path": "esy.lock/opam/crunch.3.2.0" + } + }, + "overrides": [], + "dependencies": [ + "ocaml@4.14.1000@d41d8cd9", "@opam/ptime@opam:1.1.0@d6f12219", + "@opam/dune@opam:3.14.0@bfa03801", + "@opam/cmdliner@opam:1.0.4@93208aac", + "@esy-ocaml/substs@0.0.1@d41d8cd9" + ], + "devDependencies": [ + "ocaml@4.14.1000@d41d8cd9", "@opam/ptime@opam:1.1.0@d6f12219", + "@opam/dune@opam:3.14.0@bfa03801", + "@opam/cmdliner@opam:1.0.4@93208aac" ] }, "@opam/cppo@opam:1.6.9@db929a12": { @@ -5536,12 +5606,12 @@ }, "overrides": [], "dependencies": [ - "ocaml@4.14.1000@d41d8cd9", "@opam/dune@opam:3.10.0@d5991a42", + "ocaml@4.14.1000@d41d8cd9", "@opam/dune@opam:3.14.0@bfa03801", "@opam/base-unix@opam:base@87d0b2eb", "@esy-ocaml/substs@0.0.1@d41d8cd9" ], "devDependencies": [ - "ocaml@4.14.1000@d41d8cd9", "@opam/dune@opam:3.10.0@d5991a42", + "ocaml@4.14.1000@d41d8cd9", "@opam/dune@opam:3.14.0@bfa03801", "@opam/base-unix@opam:base@87d0b2eb" ] }, @@ -5567,29 +5637,29 @@ ], "devDependencies": [ "ocaml@4.14.1000@d41d8cd9" ] }, - "@opam/chrome-trace@opam:3.10.0@62089f3e": { - "id": "@opam/chrome-trace@opam:3.10.0@62089f3e", + "@opam/chrome-trace@opam:3.14.0@dcad8740": { + "id": "@opam/chrome-trace@opam:3.14.0@dcad8740", "name": "@opam/chrome-trace", - "version": "opam:3.10.0", + "version": "opam:3.14.0", "source": { "type": "install", "source": [ - "archive:https://opam.ocaml.org/cache/sha256/9f/9ff03384a98a8df79852cc674f0b4738ba8aec17029b6e2eeb514f895e710355#sha256:9ff03384a98a8df79852cc674f0b4738ba8aec17029b6e2eeb514f895e710355", - "archive:https://github.com/ocaml/dune/releases/download/3.10.0/dune-3.10.0.tbz#sha256:9ff03384a98a8df79852cc674f0b4738ba8aec17029b6e2eeb514f895e710355" + "archive:https://opam.ocaml.org/cache/sha256/f4/f4d09d89162621fdff424c253fa50c4920d2179fb5b3d1debab7bbe97c68b2fc#sha256:f4d09d89162621fdff424c253fa50c4920d2179fb5b3d1debab7bbe97c68b2fc", + "archive:https://github.com/ocaml/dune/releases/download/3.14.0/dune-3.14.0.tbz#sha256:f4d09d89162621fdff424c253fa50c4920d2179fb5b3d1debab7bbe97c68b2fc" ], "opam": { "name": "chrome-trace", - "version": "3.10.0", - "path": "esy.lock/opam/chrome-trace.3.10.0" + "version": "3.14.0", + "path": "esy.lock/opam/chrome-trace.3.14.0" } }, "overrides": [], "dependencies": [ - "ocaml@4.14.1000@d41d8cd9", "@opam/dune@opam:3.10.0@d5991a42", + "ocaml@4.14.1000@d41d8cd9", "@opam/dune@opam:3.14.0@bfa03801", "@esy-ocaml/substs@0.0.1@d41d8cd9" ], "devDependencies": [ - "ocaml@4.14.1000@d41d8cd9", "@opam/dune@opam:3.10.0@d5991a42" + "ocaml@4.14.1000@d41d8cd9", "@opam/dune@opam:3.14.0@bfa03801" ] }, "@opam/camlp-streams@opam:5.0.1@daaa0f94": { @@ -5610,11 +5680,11 @@ }, "overrides": [], "dependencies": [ - "ocaml@4.14.1000@d41d8cd9", "@opam/dune@opam:3.10.0@d5991a42", + "ocaml@4.14.1000@d41d8cd9", "@opam/dune@opam:3.14.0@bfa03801", "@esy-ocaml/substs@0.0.1@d41d8cd9" ], "devDependencies": [ - "ocaml@4.14.1000@d41d8cd9", "@opam/dune@opam:3.10.0@d5991a42" + "ocaml@4.14.1000@d41d8cd9", "@opam/dune@opam:3.14.0@bfa03801" ] }, "@opam/biniou@opam:1.2.2@c7862a8d": { @@ -5635,14 +5705,14 @@ }, "overrides": [], "dependencies": [ - "ocaml@4.14.1000@d41d8cd9", "@opam/easy-format@opam:1.3.4@b358e98e", - "@opam/dune@opam:3.10.0@d5991a42", + "ocaml@4.14.1000@d41d8cd9", "@opam/easy-format@opam:1.3.4@21f6fe23", + "@opam/dune@opam:3.14.0@bfa03801", "@opam/camlp-streams@opam:5.0.1@daaa0f94", "@esy-ocaml/substs@0.0.1@d41d8cd9" ], "devDependencies": [ - "ocaml@4.14.1000@d41d8cd9", "@opam/easy-format@opam:1.3.4@b358e98e", - "@opam/dune@opam:3.10.0@d5991a42", + "ocaml@4.14.1000@d41d8cd9", "@opam/easy-format@opam:1.3.4@21f6fe23", + "@opam/dune@opam:3.14.0@bfa03801", "@opam/camlp-streams@opam:5.0.1@daaa0f94" ] }, @@ -5680,36 +5750,36 @@ "dependencies": [ "@esy-ocaml/substs@0.0.1@d41d8cd9" ], "devDependencies": [] }, - "@opam/atdgen-runtime@opam:2.12.0@84f686a9": { - "id": "@opam/atdgen-runtime@opam:2.12.0@84f686a9", + "@opam/atdgen-runtime@opam:2.15.0@05de7755": { + "id": "@opam/atdgen-runtime@opam:2.15.0@05de7755", "name": "@opam/atdgen-runtime", - "version": "opam:2.12.0", + "version": "opam:2.15.0", "source": { "type": "install", "source": [ - "archive:https://opam.ocaml.org/cache/sha256/02/02530cbc92ddb1cb6021951af4f62f95c2f39abf091a996c5e44ecadb20a4fc0#sha256:02530cbc92ddb1cb6021951af4f62f95c2f39abf091a996c5e44ecadb20a4fc0", - "archive:https://github.com/ahrefs/atd/releases/download/2.12.0/atdts-2.12.0.tbz#sha256:02530cbc92ddb1cb6021951af4f62f95c2f39abf091a996c5e44ecadb20a4fc0" + "archive:https://opam.ocaml.org/cache/sha256/ba/ba4279bed54d13dcf3f6703a4b31744db815df22c0502d9965d6c674ce083933#sha256:ba4279bed54d13dcf3f6703a4b31744db815df22c0502d9965d6c674ce083933", + "archive:https://github.com/ahrefs/atd/releases/download/2.15.0/atd-2.15.0.tbz#sha256:ba4279bed54d13dcf3f6703a4b31744db815df22c0502d9965d6c674ce083933" ], "opam": { "name": "atdgen-runtime", - "version": "2.12.0", - "path": "esy.lock/opam/atdgen-runtime.2.12.0" + "version": "2.15.0", + "path": "esy.lock/opam/atdgen-runtime.2.15.0" } }, "overrides": [], "dependencies": [ - "ocaml@4.14.1000@d41d8cd9", "@opam/yojson@opam:2.1.0@157478b0", - "@opam/dune@opam:3.10.0@d5991a42", + "ocaml@4.14.1000@d41d8cd9", "@opam/yojson@opam:2.1.2@9fd14300", + "@opam/dune@opam:3.14.0@bfa03801", "@opam/biniou@opam:1.2.2@c7862a8d", "@esy-ocaml/substs@0.0.1@d41d8cd9" ], "devDependencies": [ - "ocaml@4.14.1000@d41d8cd9", "@opam/yojson@opam:2.1.0@157478b0", - "@opam/dune@opam:3.10.0@d5991a42", "@opam/biniou@opam:1.2.2@c7862a8d" + "ocaml@4.14.1000@d41d8cd9", "@opam/yojson@opam:2.1.2@9fd14300", + "@opam/dune@opam:3.14.0@bfa03801", "@opam/biniou@opam:1.2.2@c7862a8d" ] }, - "@opam/atdgen@opam:2.12.0@bc126d9d": { - "id": "@opam/atdgen@opam:2.12.0@bc126d9d", + "@opam/atdgen@opam:2.12.0@205ff7f3": { + "id": "@opam/atdgen@opam:2.12.0@205ff7f3", "name": "@opam/atdgen", "version": "opam:2.12.0", "source": { @@ -5726,17 +5796,17 @@ }, "overrides": [], "dependencies": [ - "ocaml@4.14.1000@d41d8cd9", "@opam/yojson@opam:2.1.0@157478b0", - "@opam/re@opam:1.10.4@c4910ba6", "@opam/dune@opam:3.10.0@d5991a42", + "ocaml@4.14.1000@d41d8cd9", "@opam/yojson@opam:2.1.2@9fd14300", + "@opam/re@opam:1.11.0@87deb463", "@opam/dune@opam:3.14.0@bfa03801", "@opam/biniou@opam:1.2.2@c7862a8d", - "@opam/atdgen-runtime@opam:2.12.0@84f686a9", + "@opam/atdgen-runtime@opam:2.15.0@05de7755", "@opam/atd@opam:2.12.0@d1e656e5", "@esy-ocaml/substs@0.0.1@d41d8cd9" ], "devDependencies": [ - "ocaml@4.14.1000@d41d8cd9", "@opam/yojson@opam:2.1.0@157478b0", - "@opam/re@opam:1.10.4@c4910ba6", "@opam/dune@opam:3.10.0@d5991a42", + "ocaml@4.14.1000@d41d8cd9", "@opam/yojson@opam:2.1.2@9fd14300", + "@opam/re@opam:1.11.0@87deb463", "@opam/dune@opam:3.14.0@bfa03801", "@opam/biniou@opam:1.2.2@c7862a8d", - "@opam/atdgen-runtime@opam:2.12.0@84f686a9", + "@opam/atdgen-runtime@opam:2.15.0@05de7755", "@opam/atd@opam:2.12.0@d1e656e5" ] }, @@ -5758,18 +5828,18 @@ }, "overrides": [], "dependencies": [ - "ocaml@4.14.1000@d41d8cd9", "@opam/yojson@opam:2.1.0@157478b0", - "@opam/re@opam:1.10.4@c4910ba6", - "@opam/menhir@opam:20230608@c0081728", - "@opam/easy-format@opam:1.3.4@b358e98e", - "@opam/dune@opam:3.10.0@d5991a42", "@esy-ocaml/substs@0.0.1@d41d8cd9" + "ocaml@4.14.1000@d41d8cd9", "@opam/yojson@opam:2.1.2@9fd14300", + "@opam/re@opam:1.11.0@87deb463", + "@opam/menhir@opam:20231231@f35eae6a", + "@opam/easy-format@opam:1.3.4@21f6fe23", + "@opam/dune@opam:3.14.0@bfa03801", "@esy-ocaml/substs@0.0.1@d41d8cd9" ], "devDependencies": [ - "ocaml@4.14.1000@d41d8cd9", "@opam/yojson@opam:2.1.0@157478b0", - "@opam/re@opam:1.10.4@c4910ba6", - "@opam/menhir@opam:20230608@c0081728", - "@opam/easy-format@opam:1.3.4@b358e98e", - "@opam/dune@opam:3.10.0@d5991a42" + "ocaml@4.14.1000@d41d8cd9", "@opam/yojson@opam:2.1.2@9fd14300", + "@opam/re@opam:1.11.0@87deb463", + "@opam/menhir@opam:20231231@f35eae6a", + "@opam/easy-format@opam:1.3.4@21f6fe23", + "@opam/dune@opam:3.14.0@bfa03801" ] }, "@opam/astring@opam:0.8.5@1300cee8": { @@ -5792,7 +5862,7 @@ "dependencies": [ "ocaml@4.14.1000@d41d8cd9", "@opam/topkg@opam:1.0.7@7ee47d76", "@opam/ocamlfind@opam:1.9.6@da5169c7", - "@opam/ocamlbuild@opam:0.14.2+win@39b9f56d", + "@opam/ocamlbuild@opam:0.14.3@6ab20ab3", "@esy-ocaml/substs@0.0.1@d41d8cd9" ], "devDependencies": [ "ocaml@4.14.1000@d41d8cd9" ] @@ -5809,7 +5879,7 @@ }, "overrides": [], "dependencies": [ - "fastq@1.15.0@d41d8cd9", "@nodelib/fs.scandir@2.1.5@d41d8cd9" + "fastq@1.17.1@d41d8cd9", "@nodelib/fs.scandir@2.1.5@d41d8cd9" ], "devDependencies": [] }, @@ -5871,50 +5941,50 @@ "dependencies": [ "arrify@1.0.1@d41d8cd9" ], "devDependencies": [] }, - "@babel/highlight@7.22.10@d41d8cd9": { - "id": "@babel/highlight@7.22.10@d41d8cd9", + "@babel/highlight@7.23.4@d41d8cd9": { + "id": "@babel/highlight@7.23.4@d41d8cd9", "name": "@babel/highlight", - "version": "7.22.10", + "version": "7.23.4", "source": { "type": "install", "source": [ - "archive:https://registry.npmjs.org/@babel/highlight/-/highlight-7.22.10.tgz#sha1:02a3f6d8c1cb4521b2fd0ab0da8f4739936137d7" + "archive:https://registry.npmjs.org/@babel/highlight/-/highlight-7.23.4.tgz#sha1:edaadf4d8232e1a961432db785091207ead0621b" ] }, "overrides": [], "dependencies": [ "js-tokens@4.0.0@d41d8cd9", "chalk@2.4.2@d41d8cd9", - "@babel/helper-validator-identifier@7.22.5@d41d8cd9" + "@babel/helper-validator-identifier@7.22.20@d41d8cd9" ], "devDependencies": [] }, - "@babel/helper-validator-identifier@7.22.5@d41d8cd9": { - "id": "@babel/helper-validator-identifier@7.22.5@d41d8cd9", + "@babel/helper-validator-identifier@7.22.20@d41d8cd9": { + "id": "@babel/helper-validator-identifier@7.22.20@d41d8cd9", "name": "@babel/helper-validator-identifier", - "version": "7.22.5", + "version": "7.22.20", "source": { "type": "install", "source": [ - "archive:https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.5.tgz#sha1:9544ef6a33999343c8740fa51350f30eeaaaf193" + "archive:https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz#sha1:c4ae002c61d2879e724581d96665583dbc1dc0e0" ] }, "overrides": [], "dependencies": [], "devDependencies": [] }, - "@babel/code-frame@7.22.10@d41d8cd9": { - "id": "@babel/code-frame@7.22.10@d41d8cd9", + "@babel/code-frame@7.23.5@d41d8cd9": { + "id": "@babel/code-frame@7.23.5@d41d8cd9", "name": "@babel/code-frame", - "version": "7.22.10", + "version": "7.23.5", "source": { "type": "install", "source": [ - "archive:https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.22.10.tgz#sha1:1c20e612b768fefa75f6e90d6ecb86329247f0a3" + "archive:https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.23.5.tgz#sha1:9009b69a8c602293476ad598ff53e4562e15c244" ] }, "overrides": [], "dependencies": [ - "chalk@2.4.2@d41d8cd9", "@babel/highlight@7.22.10@d41d8cd9" + "chalk@2.4.2@d41d8cd9", "@babel/highlight@7.23.4@d41d8cd9" ], "devDependencies": [] } diff --git a/esy.lock/opam/atdgen-runtime.2.12.0/opam b/esy.lock/opam/atdgen-runtime.2.15.0/opam similarity index 88% rename from esy.lock/opam/atdgen-runtime.2.12.0/opam rename to esy.lock/opam/atdgen-runtime.2.15.0/opam index d6394780..979437c3 100644 --- a/esy.lock/opam/atdgen-runtime.2.12.0/opam +++ b/esy.lock/opam/atdgen-runtime.2.15.0/opam @@ -84,10 +84,10 @@ build: [ ] url { src: - "https://github.com/ahrefs/atd/releases/download/2.12.0/atdts-2.12.0.tbz" + "https://github.com/ahrefs/atd/releases/download/2.15.0/atd-2.15.0.tbz" checksum: [ - "sha256=02530cbc92ddb1cb6021951af4f62f95c2f39abf091a996c5e44ecadb20a4fc0" - "sha512=43cbbc4fd9491fcc0e543a488940f17468f5b31e263c7322bad1cc497fb4662a2d7e6aa219377a7105bd31ba80ec69b214247b63406a335ce2fdee886195bae9" + "sha256=ba4279bed54d13dcf3f6703a4b31744db815df22c0502d9965d6c674ce083933" + "sha512=33b7943ae6afd14e5a0709d9131d288e663d3f2b962caa065f1b11db8f6adfe081becba7968c8596b3ff2420577295ac248d521858cb0748e95971390eb29829" ] } -x-commit-hash: "652a65aa7635cd44afd0669ebec7af87bf894a45" +x-commit-hash: "91a5e6165d4741e19451c41189328f52d33e5c7d" diff --git a/esy.lock/opam/atdgen.2.12.0/opam b/esy.lock/opam/atdgen.2.12.0/opam index 4b070a66..8aed89e1 100644 --- a/esy.lock/opam/atdgen.2.12.0/opam +++ b/esy.lock/opam/atdgen.2.12.0/opam @@ -73,7 +73,7 @@ depends: [ "dune" {>= "2.8"} "ocaml" {>= "4.08"} "alcotest" {with-test} - "atd" {>= "2.12.0"} + "atd" {>= "2.12.0" & < "2.14.0"} "atdgen-runtime" {>= "2.1.0"} "atdgen-codec-runtime" {with-test} "biniou" {>= "1.0.6"} diff --git a/esy.lock/opam/chrome-trace.3.10.0/opam b/esy.lock/opam/chrome-trace.3.14.0/opam similarity index 67% rename from esy.lock/opam/chrome-trace.3.10.0/opam rename to esy.lock/opam/chrome-trace.3.14.0/opam index 583f59b3..6ec37f0f 100644 --- a/esy.lock/opam/chrome-trace.3.10.0/opam +++ b/esy.lock/opam/chrome-trace.3.14.0/opam @@ -9,7 +9,7 @@ homepage: "https://github.com/ocaml/dune" doc: "https://dune.readthedocs.io/" bug-reports: "https://github.com/ocaml/dune/issues" depends: [ - "dune" {>= "3.5"} + "dune" {>= "3.12"} "ocaml" {>= "4.08.0"} "odoc" {with-doc} ] @@ -31,10 +31,10 @@ build: [ ] url { src: - "https://github.com/ocaml/dune/releases/download/3.10.0/dune-3.10.0.tbz" + "https://github.com/ocaml/dune/releases/download/3.14.0/dune-3.14.0.tbz" checksum: [ - "sha256=9ff03384a98a8df79852cc674f0b4738ba8aec17029b6e2eeb514f895e710355" - "sha512=8133cdcc5499a6bf21cd65b4fc8b12445ae39366731006773fcd3b348c553a8d89d004db161c655aa167a2a3653b7919d32b27f29217106ef762bd01b43afc76" + "sha256=f4d09d89162621fdff424c253fa50c4920d2179fb5b3d1debab7bbe97c68b2fc" + "sha512=f5ead1a9a0cc26e00a762e83e107b47c3c3fe9b44d9e505547c385c7938208d4fdcc91a8099512e76ea4a426f3543445b4d75ef0b621dc7dbfdcbb615bc0b999" ] } -x-commit-hash: "fc382520272012638088848d7f3dd1ef6687a284" +x-commit-hash: "73250f00372d3f28a25963ded6138728f4202663" diff --git a/esy.lock/opam/crunch.3.2.0/opam b/esy.lock/opam/crunch.3.2.0/opam new file mode 100644 index 00000000..5e2c41c0 --- /dev/null +++ b/esy.lock/opam/crunch.3.2.0/opam @@ -0,0 +1,42 @@ +opam-version: "2.0" +maintainer: "MirageOS team" +authors: ["Anil Madhavapeddy" "Thomas Gazagnaire" "Stefanie Schirmer" "Hannes Mehnert"] +homepage: "https://github.com/mirage/ocaml-crunch" +bug-reports: "https://github.com/mirage/ocaml-crunch/issues" +doc: "https://mirage.github.io/ocaml-crunch/" +license: "ISC" +dev-repo: "git+https://github.com/mirage/ocaml-crunch.git" +tags: ["org:mirage" "org:xapi-project"] + +depends: [ + "ocaml" {>= "4.05.0"} + "cmdliner" + "ptime" + "dune" {>= "1.0"} + "lwt" {with-test} + "mirage-kv" {with-test & >= "3.0.0"} + "mirage-kv-mem" {with-test & >= "3.0.0"} +] +conflicts: [ + "mirage-kv" {< "3.0.0"} +] +build: [ + ["dune" "subst"] {dev} + ["dune" "build" "-p" name "-j" jobs] + ["dune" "runtest" "-p" name "-j" jobs] {with-test} +] +synopsis: "Convert a filesystem into a static OCaml module" +description: """ +`ocaml-crunch` takes a directory of files and compiles them into a standalone +OCaml module which serves the contents directly from memory. This can be +convenient for libraries that need a few embedded files (such as a web server) +and do not want to deal with all the trouble of file configuration. +""" +url { + src: + "https://github.com/mirage/ocaml-crunch/releases/download/v3.2.0/crunch-v3.2.0.tbz" + checksum: [ + "sha256=0a1a4ebb86ab643dd193b5c0046e4d168c6e1cb41e6e5e5b6fbd3b7492e8c6de" + "sha512=8666e4081c96b7e0820c621197cb02de2238ddc911e4e95f439c69a685a5791dd4f874ba1084f56c9b44d3d579b877b1ed1f7b0421cd56d3f36ad39c669ee4eb" + ] +} diff --git a/esy.lock/opam/dot-merlin-reader.4.9/opam b/esy.lock/opam/dot-merlin-reader.4.9/opam index e2a8ce56..208b904f 100644 --- a/esy.lock/opam/dot-merlin-reader.4.9/opam +++ b/esy.lock/opam/dot-merlin-reader.4.9/opam @@ -13,7 +13,7 @@ build: [ depends: [ "ocaml" {>= "4.08" & < "6.0"} "dune" {>= "2.9.0"} - "merlin-lib" {>= "4.9"} + "merlin-lib" {>= "4.9" & < "4.14"} "ocamlfind" {>= "1.6.0"} ] description: diff --git a/esy.lock/opam/dune-build-info.3.10.0/opam b/esy.lock/opam/dune-build-info.3.14.0/opam similarity index 73% rename from esy.lock/opam/dune-build-info.3.10.0/opam rename to esy.lock/opam/dune-build-info.3.14.0/opam index 0f7e9ed7..26ed132a 100644 --- a/esy.lock/opam/dune-build-info.3.10.0/opam +++ b/esy.lock/opam/dune-build-info.3.14.0/opam @@ -15,7 +15,7 @@ homepage: "https://github.com/ocaml/dune" doc: "https://dune.readthedocs.io/" bug-reports: "https://github.com/ocaml/dune/issues" depends: [ - "dune" {>= "3.5"} + "dune" {>= "3.12"} "ocaml" {>= "4.08"} "odoc" {with-doc} ] @@ -37,10 +37,10 @@ build: [ ] url { src: - "https://github.com/ocaml/dune/releases/download/3.10.0/dune-3.10.0.tbz" + "https://github.com/ocaml/dune/releases/download/3.14.0/dune-3.14.0.tbz" checksum: [ - "sha256=9ff03384a98a8df79852cc674f0b4738ba8aec17029b6e2eeb514f895e710355" - "sha512=8133cdcc5499a6bf21cd65b4fc8b12445ae39366731006773fcd3b348c553a8d89d004db161c655aa167a2a3653b7919d32b27f29217106ef762bd01b43afc76" + "sha256=f4d09d89162621fdff424c253fa50c4920d2179fb5b3d1debab7bbe97c68b2fc" + "sha512=f5ead1a9a0cc26e00a762e83e107b47c3c3fe9b44d9e505547c385c7938208d4fdcc91a8099512e76ea4a426f3543445b4d75ef0b621dc7dbfdcbb615bc0b999" ] } -x-commit-hash: "fc382520272012638088848d7f3dd1ef6687a284" +x-commit-hash: "73250f00372d3f28a25963ded6138728f4202663" diff --git a/esy.lock/opam/dune-configurator.3.10.0/opam b/esy.lock/opam/dune-configurator.3.14.0/opam similarity index 74% rename from esy.lock/opam/dune-configurator.3.10.0/opam rename to esy.lock/opam/dune-configurator.3.14.0/opam index 5572ff66..b24f7b0a 100644 --- a/esy.lock/opam/dune-configurator.3.10.0/opam +++ b/esy.lock/opam/dune-configurator.3.14.0/opam @@ -17,7 +17,7 @@ homepage: "https://github.com/ocaml/dune" doc: "https://dune.readthedocs.io/" bug-reports: "https://github.com/ocaml/dune/issues" depends: [ - "dune" {>= "3.5"} + "dune" {>= "3.12"} "ocaml" {>= "4.04.0"} "base-unix" "csexp" {>= "1.5.0"} @@ -41,10 +41,10 @@ build: [ ] url { src: - "https://github.com/ocaml/dune/releases/download/3.10.0/dune-3.10.0.tbz" + "https://github.com/ocaml/dune/releases/download/3.14.0/dune-3.14.0.tbz" checksum: [ - "sha256=9ff03384a98a8df79852cc674f0b4738ba8aec17029b6e2eeb514f895e710355" - "sha512=8133cdcc5499a6bf21cd65b4fc8b12445ae39366731006773fcd3b348c553a8d89d004db161c655aa167a2a3653b7919d32b27f29217106ef762bd01b43afc76" + "sha256=f4d09d89162621fdff424c253fa50c4920d2179fb5b3d1debab7bbe97c68b2fc" + "sha512=f5ead1a9a0cc26e00a762e83e107b47c3c3fe9b44d9e505547c385c7938208d4fdcc91a8099512e76ea4a426f3543445b4d75ef0b621dc7dbfdcbb615bc0b999" ] } -x-commit-hash: "fc382520272012638088848d7f3dd1ef6687a284" +x-commit-hash: "73250f00372d3f28a25963ded6138728f4202663" diff --git a/esy.lock/opam/dune-rpc.3.10.0/opam b/esy.lock/opam/dune-rpc.3.14.0/opam similarity index 68% rename from esy.lock/opam/dune-rpc.3.10.0/opam rename to esy.lock/opam/dune-rpc.3.14.0/opam index 6f175c2d..bae0059d 100644 --- a/esy.lock/opam/dune-rpc.3.10.0/opam +++ b/esy.lock/opam/dune-rpc.3.14.0/opam @@ -8,7 +8,7 @@ homepage: "https://github.com/ocaml/dune" doc: "https://dune.readthedocs.io/" bug-reports: "https://github.com/ocaml/dune/issues" depends: [ - "dune" {>= "3.5"} + "dune" {>= "3.12"} "csexp" "ordering" "dyn" @@ -35,10 +35,10 @@ build: [ ] url { src: - "https://github.com/ocaml/dune/releases/download/3.10.0/dune-3.10.0.tbz" + "https://github.com/ocaml/dune/releases/download/3.14.0/dune-3.14.0.tbz" checksum: [ - "sha256=9ff03384a98a8df79852cc674f0b4738ba8aec17029b6e2eeb514f895e710355" - "sha512=8133cdcc5499a6bf21cd65b4fc8b12445ae39366731006773fcd3b348c553a8d89d004db161c655aa167a2a3653b7919d32b27f29217106ef762bd01b43afc76" + "sha256=f4d09d89162621fdff424c253fa50c4920d2179fb5b3d1debab7bbe97c68b2fc" + "sha512=f5ead1a9a0cc26e00a762e83e107b47c3c3fe9b44d9e505547c385c7938208d4fdcc91a8099512e76ea4a426f3543445b4d75ef0b621dc7dbfdcbb615bc0b999" ] } -x-commit-hash: "fc382520272012638088848d7f3dd1ef6687a284" +x-commit-hash: "73250f00372d3f28a25963ded6138728f4202663" diff --git a/esy.lock/opam/dune.3.10.0/opam b/esy.lock/opam/dune.3.14.0/opam similarity index 69% rename from esy.lock/opam/dune.3.10.0/opam rename to esy.lock/opam/dune.3.14.0/opam index 79fe0a12..b390e871 100644 --- a/esy.lock/opam/dune.3.10.0/opam +++ b/esy.lock/opam/dune.3.14.0/opam @@ -2,19 +2,19 @@ opam-version: "2.0" synopsis: "Fast, portable, and opinionated build system" description: """ -dune is a build system that was designed to simplify the release of +Dune is a build system that was designed to simplify the release of Jane Street packages. It reads metadata from "dune" files following a very simple s-expression syntax. -dune is fast, has very low-overhead, and supports parallel builds on +Dune is fast, has very low-overhead, and supports parallel builds on all platforms. It has no system dependencies; all you need to build dune or packages using dune is OCaml. You don't need make or bash as long as the packages themselves don't use bash explicitly. -dune supports multi-package development by simply dropping multiple -repositories into the same directory. +Dune is composable; supporting multi-package development by simply +dropping multiple repositories into the same directory. -It also supports multi-context builds, such as building against +Dune also supports multi-context builds, such as building against several opam roots/switches simultaneously. This helps maintaining packages across several versions of OCaml and gives cross-compilation for free. @@ -48,10 +48,10 @@ depends: [ ] url { src: - "https://github.com/ocaml/dune/releases/download/3.10.0/dune-3.10.0.tbz" + "https://github.com/ocaml/dune/releases/download/3.14.0/dune-3.14.0.tbz" checksum: [ - "sha256=9ff03384a98a8df79852cc674f0b4738ba8aec17029b6e2eeb514f895e710355" - "sha512=8133cdcc5499a6bf21cd65b4fc8b12445ae39366731006773fcd3b348c553a8d89d004db161c655aa167a2a3653b7919d32b27f29217106ef762bd01b43afc76" + "sha256=f4d09d89162621fdff424c253fa50c4920d2179fb5b3d1debab7bbe97c68b2fc" + "sha512=f5ead1a9a0cc26e00a762e83e107b47c3c3fe9b44d9e505547c385c7938208d4fdcc91a8099512e76ea4a426f3543445b4d75ef0b621dc7dbfdcbb615bc0b999" ] } -x-commit-hash: "fc382520272012638088848d7f3dd1ef6687a284" +x-commit-hash: "73250f00372d3f28a25963ded6138728f4202663" diff --git a/esy.lock/opam/dyn.3.10.0/opam b/esy.lock/opam/dyn.3.14.0/opam similarity index 66% rename from esy.lock/opam/dyn.3.10.0/opam rename to esy.lock/opam/dyn.3.14.0/opam index ae6bdb0d..d835562e 100644 --- a/esy.lock/opam/dyn.3.10.0/opam +++ b/esy.lock/opam/dyn.3.14.0/opam @@ -8,7 +8,7 @@ homepage: "https://github.com/ocaml/dune" doc: "https://dune.readthedocs.io/" bug-reports: "https://github.com/ocaml/dune/issues" depends: [ - "dune" {>= "3.5"} + "dune" {>= "3.12"} "ocaml" {>= "4.08.0"} "ordering" {= version} "pp" {>= "1.1.0"} @@ -32,10 +32,10 @@ build: [ ] url { src: - "https://github.com/ocaml/dune/releases/download/3.10.0/dune-3.10.0.tbz" + "https://github.com/ocaml/dune/releases/download/3.14.0/dune-3.14.0.tbz" checksum: [ - "sha256=9ff03384a98a8df79852cc674f0b4738ba8aec17029b6e2eeb514f895e710355" - "sha512=8133cdcc5499a6bf21cd65b4fc8b12445ae39366731006773fcd3b348c553a8d89d004db161c655aa167a2a3653b7919d32b27f29217106ef762bd01b43afc76" + "sha256=f4d09d89162621fdff424c253fa50c4920d2179fb5b3d1debab7bbe97c68b2fc" + "sha512=f5ead1a9a0cc26e00a762e83e107b47c3c3fe9b44d9e505547c385c7938208d4fdcc91a8099512e76ea4a426f3543445b4d75ef0b621dc7dbfdcbb615bc0b999" ] } -x-commit-hash: "fc382520272012638088848d7f3dd1ef6687a284" +x-commit-hash: "73250f00372d3f28a25963ded6138728f4202663" diff --git a/esy.lock/opam/easy-format.1.3.4/opam b/esy.lock/opam/easy-format.1.3.4/opam index 39b3d63e..5d5f62ee 100644 --- a/esy.lock/opam/easy-format.1.3.4/opam +++ b/esy.lock/opam/easy-format.1.3.4/opam @@ -23,7 +23,7 @@ maintainer: ["martin@mjambon.com" "rudi.grinberg@gmail.com"] authors: ["Martin Jambon"] license: "BSD-3-Clause" homepage: "https://github.com/ocaml-community/easy-format" -doc: "https://mjambon.github.io/easy-format/" +doc: "https://mjambon.github.io/mjambon2016/easy-format.html" bug-reports: "https://github.com/ocaml-community/easy-format/issues" depends: [ "dune" {>= "3.2" & >= "1.10"} diff --git a/esy.lock/opam/menhir.20230608/opam b/esy.lock/opam/menhir.20231231/opam similarity index 69% rename from esy.lock/opam/menhir.20230608/opam rename to esy.lock/opam/menhir.20231231/opam index 994e202c..adf52bf1 100644 --- a/esy.lock/opam/menhir.20230608/opam +++ b/esy.lock/opam/menhir.20231231/opam @@ -17,13 +17,14 @@ depends: [ "dune" {>= "2.8.0"} "menhirLib" {= version} "menhirSdk" {= version} + "menhirCST" {= version} ] synopsis: "An LR(1) parser generator" url { src: - "https://gitlab.inria.fr/fpottier/menhir/-/archive/20230608/archive.tar.gz" + "https://gitlab.inria.fr/fpottier/menhir/-/archive/20231231/archive.tar.gz" checksum: [ - "md5=8ff26b1e3685c472b7b3aba2fe938a43" - "sha512=334b9dcb1283a28b8547082a89536b1d439ff588290b8eaecdf4802c5f74dbc8d16ad6fc6c0820036183518d83e2cc273a75787a8b41137424c8e7ee82e2b50a" + "md5=799748bc3b7a542798a85956c7863865" + "sha512=620ff3443143535e03ac98c5e8ee2ddf9ba48f8cfe441302118def1da3e03ffac7f48d4d4cb129766b625ecad0fb341da1baa0169dee8b6d07a5b0bbb735cf2f" ] } diff --git a/esy.lock/opam/menhirCST.20231231/opam b/esy.lock/opam/menhirCST.20231231/opam new file mode 100644 index 00000000..9a49a859 --- /dev/null +++ b/esy.lock/opam/menhirCST.20231231/opam @@ -0,0 +1,29 @@ + +opam-version: "2.0" +maintainer: "francois.pottier@inria.fr" +authors: [ + "François Pottier " +] +homepage: "http://gitlab.inria.fr/fpottier/menhir" +dev-repo: "git+https://gitlab.inria.fr/fpottier/menhir.git" +bug-reports: "https://gitlab.inria.fr/fpottier/menhir/-/issues" +license: "LGPL-2.0-only with OCaml-LGPL-linking-exception" +build: [ + ["dune" "build" "-p" name "-j" jobs] +] +depends: [ + "ocaml" { >= "4.08" } + "dune" { >= "2.8.0" } +] +conflicts: [ + "menhir" { != version } +] +synopsis: "Runtime support library for parsers generated by Menhir" +url { + src: + "https://gitlab.inria.fr/fpottier/menhir/-/archive/20231231/archive.tar.gz" + checksum: [ + "md5=799748bc3b7a542798a85956c7863865" + "sha512=620ff3443143535e03ac98c5e8ee2ddf9ba48f8cfe441302118def1da3e03ffac7f48d4d4cb129766b625ecad0fb341da1baa0169dee8b6d07a5b0bbb735cf2f" + ] +} diff --git a/esy.lock/opam/menhirLib.20230608/opam b/esy.lock/opam/menhirLib.20231231/opam similarity index 73% rename from esy.lock/opam/menhirLib.20230608/opam rename to esy.lock/opam/menhirLib.20231231/opam index a83c2db7..1f321b18 100644 --- a/esy.lock/opam/menhirLib.20230608/opam +++ b/esy.lock/opam/menhirLib.20231231/opam @@ -22,9 +22,9 @@ conflicts: [ synopsis: "Runtime support library for parsers generated by Menhir" url { src: - "https://gitlab.inria.fr/fpottier/menhir/-/archive/20230608/archive.tar.gz" + "https://gitlab.inria.fr/fpottier/menhir/-/archive/20231231/archive.tar.gz" checksum: [ - "md5=8ff26b1e3685c472b7b3aba2fe938a43" - "sha512=334b9dcb1283a28b8547082a89536b1d439ff588290b8eaecdf4802c5f74dbc8d16ad6fc6c0820036183518d83e2cc273a75787a8b41137424c8e7ee82e2b50a" + "md5=799748bc3b7a542798a85956c7863865" + "sha512=620ff3443143535e03ac98c5e8ee2ddf9ba48f8cfe441302118def1da3e03ffac7f48d4d4cb129766b625ecad0fb341da1baa0169dee8b6d07a5b0bbb735cf2f" ] } diff --git a/esy.lock/opam/menhirSdk.20230608/opam b/esy.lock/opam/menhirSdk.20231231/opam similarity index 73% rename from esy.lock/opam/menhirSdk.20230608/opam rename to esy.lock/opam/menhirSdk.20231231/opam index 892f0922..0e2649fc 100644 --- a/esy.lock/opam/menhirSdk.20230608/opam +++ b/esy.lock/opam/menhirSdk.20231231/opam @@ -22,9 +22,9 @@ conflicts: [ synopsis: "Compile-time library for auxiliary tools related to Menhir" url { src: - "https://gitlab.inria.fr/fpottier/menhir/-/archive/20230608/archive.tar.gz" + "https://gitlab.inria.fr/fpottier/menhir/-/archive/20231231/archive.tar.gz" checksum: [ - "md5=8ff26b1e3685c472b7b3aba2fe938a43" - "sha512=334b9dcb1283a28b8547082a89536b1d439ff588290b8eaecdf4802c5f74dbc8d16ad6fc6c0820036183518d83e2cc273a75787a8b41137424c8e7ee82e2b50a" + "md5=799748bc3b7a542798a85956c7863865" + "sha512=620ff3443143535e03ac98c5e8ee2ddf9ba48f8cfe441302118def1da3e03ffac7f48d4d4cb129766b625ecad0fb341da1baa0169dee8b6d07a5b0bbb735cf2f" ] } diff --git a/esy.lock/opam/merlin-lib.4.9-414/opam b/esy.lock/opam/merlin-lib.4.13-414/opam similarity index 70% rename from esy.lock/opam/merlin-lib.4.9-414/opam rename to esy.lock/opam/merlin-lib.4.13-414/opam index c3d8af20..858c6898 100644 --- a/esy.lock/opam/merlin-lib.4.9-414/opam +++ b/esy.lock/opam/merlin-lib.4.13-414/opam @@ -25,10 +25,10 @@ description: thoroughly documented, and its public API might break with any new release." url { src: - "https://github.com/ocaml/merlin/releases/download/v4.9-414/merlin-4.9-414.tbz" + "https://github.com/ocaml/merlin/releases/download/v4.13-414/merlin-4.13-414.tbz" checksum: [ - "sha256=e23fc47813591269ff9d27c820988e520a662c89dd0af7ea652b21517499cbfd" - "sha512=2199f963368597d10cc197e41ebb883f6a166018c9da3fe259c354550df41b713781003598a2fe5956b0a4ae96f8c07ba33831d3cf6f9d494b731944f87e491e" + "sha256=025cf1a93ba1e40916f5d9cf22fe7569bbfbaf403f54e4b724e4f92078b1db03" + "sha512=cf7e292a515122756bd614eedbf11cc09108e6afab77cd5805428207b3ca5a98494ee43ad59fcfb667b48fe0874f0a8359882b3c14ee270769f99c41e176d455" ] } -x-commit-hash: "df75a4550704c113ac29505fd68ef9b7893d4bf5" +x-commit-hash: "b06a4e4f976100c23173d715f1b35cd91f8131f0" diff --git a/esy.lock/opam/merlin.4.9-414/opam b/esy.lock/opam/merlin.4.13-414/opam similarity index 79% rename from esy.lock/opam/merlin.4.9-414/opam rename to esy.lock/opam/merlin.4.13-414/opam index 23c0bae6..1d542263 100644 --- a/esy.lock/opam/merlin.4.9-414/opam +++ b/esy.lock/opam/merlin.4.13-414/opam @@ -51,8 +51,11 @@ Add opam emacs directory to your load-path by appending this to your .emacs: (add-hook 'tuareg-mode-hook 'merlin-mode t) (add-hook 'caml-mode-hook 'merlin-mode t) ;; Use opam switch to lookup ocamlmerlin binary - (setq merlin-command 'opam))) - + (setq merlin-command 'opam) + ;; To easily change opam switches within a given Emacs session, you can + ;; install the minor mode https://github.com/ProofGeneral/opam-switch-mode + ;; and use one of its \"OPSW\" menus. + )) Take a look at https://github.com/ocaml/merlin for more information Quick setup with opam-user-setup @@ -69,10 +72,10 @@ See https://github.com/OCamlPro/opam-user-setup ] url { src: - "https://github.com/ocaml/merlin/releases/download/v4.9-414/merlin-4.9-414.tbz" + "https://github.com/ocaml/merlin/releases/download/v4.13-414/merlin-4.13-414.tbz" checksum: [ - "sha256=e23fc47813591269ff9d27c820988e520a662c89dd0af7ea652b21517499cbfd" - "sha512=2199f963368597d10cc197e41ebb883f6a166018c9da3fe259c354550df41b713781003598a2fe5956b0a4ae96f8c07ba33831d3cf6f9d494b731944f87e491e" + "sha256=025cf1a93ba1e40916f5d9cf22fe7569bbfbaf403f54e4b724e4f92078b1db03" + "sha512=cf7e292a515122756bd614eedbf11cc09108e6afab77cd5805428207b3ca5a98494ee43ad59fcfb667b48fe0874f0a8359882b3c14ee270769f99c41e176d455" ] } -x-commit-hash: "df75a4550704c113ac29505fd68ef9b7893d4bf5" +x-commit-hash: "b06a4e4f976100c23173d715f1b35cd91f8131f0" diff --git a/esy.lock/opam/ocaml-compiler-libs.v0.12.4/opam b/esy.lock/opam/ocaml-compiler-libs.v0.12.4/opam index 14c9f753..a2df8c61 100644 --- a/esy.lock/opam/ocaml-compiler-libs.v0.12.4/opam +++ b/esy.lock/opam/ocaml-compiler-libs.v0.12.4/opam @@ -10,7 +10,7 @@ homepage: "https://github.com/janestreet/ocaml-compiler-libs" bug-reports: "https://github.com/janestreet/ocaml-compiler-libs/issues" depends: [ "dune" {>= "2.8"} - "ocaml" {>= "4.04.1"} + "ocaml" {>= "4.04.1" & < "5.2.0"} "odoc" {with-doc} ] build: [ diff --git a/esy.lock/opam/ocaml-lsp-server.1.16.2/opam b/esy.lock/opam/ocaml-lsp-server.1.17.0/opam similarity index 78% rename from esy.lock/opam/ocaml-lsp-server.1.16.2/opam rename to esy.lock/opam/ocaml-lsp-server.1.17.0/opam index 4db194f3..e3a53b04 100644 --- a/esy.lock/opam/ocaml-lsp-server.1.16.2/opam +++ b/esy.lock/opam/ocaml-lsp-server.1.17.0/opam @@ -31,7 +31,8 @@ depends: [ "ordering" "dune-build-info" "spawn" - "odoc-parser" {>= "2.0.0"} + "astring" + "camlp-streams" "ppx_expect" {>= "v0.15.0" & with-test} "ocamlformat" {with-test & = "0.24.1"} "ocamlc-loc" {>= "3.7.0"} @@ -57,10 +58,10 @@ build: [ ] url { src: - "https://github.com/ocaml/ocaml-lsp/releases/download/1.16.2/lsp-1.16.2.tbz" + "https://github.com/ocaml/ocaml-lsp/releases/download/1.17.0/lsp-1.17.0.tbz" checksum: [ - "sha256=1487d5a4e2f2d4f023341058551bdb8ba86c23367b7c5b4fdda3aa7dc02aaec4" - "sha512=4a392f6d3deafc6dd37f9603250e736c8d8195ea42c782252386616e8c1562d744e02beee54ec45254cba23efd343ebb33789babb093b0e70122ba86d7e67717" + "sha256=8fb8bbd717eefd2608b4d83458105b660e0de3a1134dc8fc216ae659d4d19600" + "sha512=6876df760dbcb51f85e7fd9d08cc8498c69ede38a52f4e12407187da3fbd9657c71f3223f9490ad97edd5259cfdeb2819d943db65bb9ce3c2a18dace3b65ffa8" ] } -x-commit-hash: "22cefd841bb0b6b9a6fd4fe5befe5eb68d213ce3" +x-commit-hash: "d3d8de5a4213c2a16e43ac4f87cbbe88a894d05f" diff --git a/esy.lock/opam/ocamlbuild.0.14.2+win/opam b/esy.lock/opam/ocamlbuild.0.14.3/opam similarity index 50% rename from esy.lock/opam/ocamlbuild.0.14.2+win/opam rename to esy.lock/opam/ocamlbuild.0.14.3/opam index 19651dfb..d1c725b3 100644 --- a/esy.lock/opam/ocamlbuild.0.14.2+win/opam +++ b/esy.lock/opam/ocamlbuild.0.14.3/opam @@ -15,24 +15,26 @@ conflicts: [ "ocamlfind" {< "1.6.2"} ] build: [ - [make "all"] -] -install: [ - [make "install"] - ["mkdir" "-p" "%{lib}%/ocamlbuild"] - ["install" "-m" "0644" "META" "%{lib}%/ocamlbuild"] + [ + make + "-f" + "configure.make" + "all" + "OCAMLBUILD_PREFIX=%{prefix}%" + "OCAMLBUILD_BINDIR=%{bin}%" + "OCAMLBUILD_LIBDIR=%{lib}%" + "OCAMLBUILD_MANDIR=%{man}%" + "OCAML_NATIVE=%{ocaml:native}%" + "OCAML_NATIVE_TOOLS=%{ocaml:native}%" + ] + [make "check-if-preinstalled" "all" "opam-install"] ] dev-repo: "git+https://github.com/ocaml/ocamlbuild.git" +available: os != "win32" url { - src: "https://github.com/ocaml/ocamlbuild/archive/refs/tags/0.14.2.tar.gz" + src: "https://github.com/ocaml/ocamlbuild/archive/refs/tags/0.14.3.tar.gz" checksum: [ - "md5=2f407fadd57b073155a6aead887d9676" - "sha512=f568bf10431a1f701e8bd7554dc662400a0d978411038bbad93d44dceab02874490a8a5886a9b44e017347e7949997f13f5c3752f74e1eb5e273d2beb19a75fd" + "md5=220df59060c916e8aac2eb471c870485" + "sha512=def8fa1d5488905fda31f72b7f6f0ebdccefa55a8e984a6ea4a7c1e0856e8ea1f7814410202e0f7f7d5e72aca7e8ae0d6623f7f2bade78b0dd82155de76ec4e5" ] -} -extra-source "ocamlbuild-0.14.2.patch" { - src: "https://raw.githubusercontent.com/ocaml-opam/opam-repository-mingw/354a87b397856f2a70024c5c83fc5001074935b6/packages/ocamlbuild/ocamlbuild.0.14.2/files/ocamlbuild-0.14.2.patch" - checksum: "sha256=a9b7e1829a3304e5a073d8ddea29d3d8272698e93b7e1ee659ae5e31e5cfb6b9" -} -patches: "ocamlbuild-0.14.2.patch" -available: os = "win32" +} \ No newline at end of file diff --git a/esy.lock/opam/ocamlc-loc.3.10.0/opam b/esy.lock/opam/ocamlc-loc.3.14.0/opam similarity index 69% rename from esy.lock/opam/ocamlc-loc.3.10.0/opam rename to esy.lock/opam/ocamlc-loc.3.14.0/opam index 8cc1ab14..9b034c14 100644 --- a/esy.lock/opam/ocamlc-loc.3.10.0/opam +++ b/esy.lock/opam/ocamlc-loc.3.14.0/opam @@ -9,7 +9,7 @@ homepage: "https://github.com/ocaml/dune" doc: "https://dune.readthedocs.io/" bug-reports: "https://github.com/ocaml/dune/issues" depends: [ - "dune" {>= "3.5"} + "dune" {>= "3.12"} "ocaml" {>= "4.08.0"} "dyn" {= version} "odoc" {with-doc} @@ -35,10 +35,10 @@ build: [ ] url { src: - "https://github.com/ocaml/dune/releases/download/3.10.0/dune-3.10.0.tbz" + "https://github.com/ocaml/dune/releases/download/3.14.0/dune-3.14.0.tbz" checksum: [ - "sha256=9ff03384a98a8df79852cc674f0b4738ba8aec17029b6e2eeb514f895e710355" - "sha512=8133cdcc5499a6bf21cd65b4fc8b12445ae39366731006773fcd3b348c553a8d89d004db161c655aa167a2a3653b7919d32b27f29217106ef762bd01b43afc76" + "sha256=f4d09d89162621fdff424c253fa50c4920d2179fb5b3d1debab7bbe97c68b2fc" + "sha512=f5ead1a9a0cc26e00a762e83e107b47c3c3fe9b44d9e505547c385c7938208d4fdcc91a8099512e76ea4a426f3543445b4d75ef0b621dc7dbfdcbb615bc0b999" ] } -x-commit-hash: "fc382520272012638088848d7f3dd1ef6687a284" +x-commit-hash: "73250f00372d3f28a25963ded6138728f4202663" diff --git a/esy.lock/opam/ocamlformat-rpc-lib.0.26.0/opam b/esy.lock/opam/ocamlformat-rpc-lib.0.26.1/opam similarity index 54% rename from esy.lock/opam/ocamlformat-rpc-lib.0.26.0/opam rename to esy.lock/opam/ocamlformat-rpc-lib.0.26.1/opam index 710d152d..e685d68a 100644 --- a/esy.lock/opam/ocamlformat-rpc-lib.0.26.0/opam +++ b/esy.lock/opam/ocamlformat-rpc-lib.0.26.1/opam @@ -2,8 +2,18 @@ opam-version: "2.0" synopsis: "Auto-formatter for OCaml code (RPC mode)" description: "OCamlFormat is a tool to automatically format OCaml code in a uniform style. This package defines a RPC interface to OCamlFormat" -maintainer: ["OCamlFormat Team "] -authors: ["Josh Berdine "] +maintainer: [ + "Guillaume Petiot " + "Jules Aguillon " + "Emile Trotignon " +] +authors: [ + "Josh Berdine " + "Hugo Heuzard " + "Etienne Millon " + "Guillaume Petiot " + "Jules Aguillon " +] license: "MIT" homepage: "https://github.com/ocaml-ppx/ocamlformat" bug-reports: "https://github.com/ocaml-ppx/ocamlformat/issues" @@ -30,10 +40,10 @@ build: [ dev-repo: "git+https://github.com/ocaml-ppx/ocamlformat.git" url { src: - "https://github.com/ocaml-ppx/ocamlformat/releases/download/0.26.0/ocamlformat-0.26.0.tbz" + "https://github.com/ocaml-ppx/ocamlformat/releases/download/0.26.1/ocamlformat-0.26.1.tbz" checksum: [ - "sha256=031494ab770cef10a8f6aa1cbeb5660e46c3aa6c0cd457b110fec859a75e877d" - "sha512=35c0131f04c2c8ceb94f0f400e4b56690405ddebb482aec0c9962163001d9fd5b593455df08b508394949f2740ba28f1714dff9e1f17b618bdec62fd26fae281" + "sha256=da006e427f15b9ec612fb808d446599bd9b7c3ee25abeb3d555747a70d74c6d7" + "sha512=b7413f8dc47ba3a2372e89d59cae54f9a602ab81e31cd14ed986a831111080b79a5a3cc45dac04d8ffae5054c35bf29fe9559f145c76c87a30e191ed5400942a" ] } -x-commit-hash: "fe70498a8982bef951311b37aa8568218ce8801a" +x-commit-hash: "6734dfc1992eb782f0a936ce3cd7c78b7c1d39d3" diff --git a/esy.lock/opam/odoc-parser.2.0.0/opam b/esy.lock/opam/odoc-parser.2.0.0/opam deleted file mode 100644 index 602b2bdf..00000000 --- a/esy.lock/opam/odoc-parser.2.0.0/opam +++ /dev/null @@ -1,47 +0,0 @@ -opam-version: "2.0" -synopsis: "Parser for ocaml documentation comments" -description: """ -Odoc_parser is a library for parsing the contents of OCaml documentation -comments, formatted using 'odoc' syntax, an extension of the language -understood by ocamldoc.""" -maintainer: ["Jon Ludlam "] -authors: ["Anton Bachin "] -license: "ISC" -homepage: "https://github.com/ocaml-doc/odoc-parser" -bug-reports: "https://github.com/ocaml-doc/odoc-parser/issues" -dev-repo: "git+https://github.com/ocaml-doc/odoc-parser.git" -# This template exists because without it dune pop is dependencies and build rules -# involving odoc. Since odoc depends on this package, this doesn't work. -doc: "https://ocaml-doc.github.io/odoc-parser/" -depends: [ - "dune" {>= "2.8"} - "ocaml" {>= "4.02.0"} - "astring" - "result" - "camlp-streams" - "ppx_expect" {with-test} - ("ocaml" {< "4.04.1" & with-test} | "sexplib0" {with-test}) -] -build: [ - ["dune" "subst"] {dev} - [ - "dune" - "build" - "-p" - name - "-j" - jobs - "@install" - "@runtest" {with-test} - ] -] -url { - src: - "https://github.com/ocaml-doc/odoc-parser/releases/download/2.0.0/odoc-parser-2.0.0.tbz" - checksum: [ - "sha256=407919fbb0eb95761d6fc6ec6777628d94aa1907343bdca678b1880bafb33922" - "sha512=d2bffa3e9f30471045682e390dcee7a2c1caf3831bca4bd57c16939e782c2e23434e6f1c9887580a1804800b3629ef4c4311a9d418fca5a939f324650d54006e" - ] -} -x-commit-hash: "ebfd3b9489e44187da2c67d79a32b6fc1e92bda4" - diff --git a/esy.lock/opam/odoc-parser.2.4.1/opam b/esy.lock/opam/odoc-parser.2.4.1/opam new file mode 100644 index 00000000..3fb74ed8 --- /dev/null +++ b/esy.lock/opam/odoc-parser.2.4.1/opam @@ -0,0 +1,45 @@ +opam-version: "2.0" +synopsis: "Parser for ocaml documentation comments" +description: """ +Odoc_parser is a library for parsing the contents of OCaml documentation +comments, formatted using 'odoc' syntax, an extension of the language +understood by ocamldoc.""" +maintainer: ["Jon Ludlam "] +authors: ["Anton Bachin "] +license: "ISC" +homepage: "https://github.com/ocaml/odoc" +bug-reports: "https://github.com/ocaml/odoc/issues" +dev-repo: "git+https://github.com/ocaml/odoc.git" +doc: "https://ocaml.github.io/odoc/odoc_parser" +depends: [ + "dune" {>= "3.7"} + "ocaml" {>= "4.02.0"} + "astring" + "result" + "camlp-streams" + "ppx_expect" {with-test} + ("ocaml" {< "4.04.1" & with-test} | "sexplib0" {with-test}) +] +build: [ + ["dune" "subst"] {dev} + [ + "dune" + "build" + "-p" + name + "-j" + jobs + "@install" + # Tests are not all associated with a package and would be run if using the + # default '@runtest'. + "@src/parser/runtest" {with-test} + ] +] +url { + src: "https://github.com/ocaml/odoc/releases/download/2.4.1/odoc-2.4.1.tbz" + checksum: [ + "sha256=b814a0b9020b503eb67f17d1d9a969d052b63d8cdc7cdfa5fb793b137558cedb" + "sha512=8ed2ed6ef705c00a2c90b7c57e7e5c747247e3406f1b7415a46db7cbd19d02678db40be761984d627f4fa2d9b38f696c77d8b5d40108e12563e101d07949821c" + ] +} +x-commit-hash: "0e671097a35ef938ea390a6bb894f25d8dc847a8" diff --git a/esy.lock/opam/odoc.2.2.1/opam b/esy.lock/opam/odoc.2.2.1/opam deleted file mode 100644 index f10e20dd..00000000 --- a/esy.lock/opam/odoc.2.2.1/opam +++ /dev/null @@ -1,61 +0,0 @@ -opam-version: "2.0" -homepage: "http://github.com/ocaml/odoc" -doc: "https://ocaml.github.io/odoc/" -bug-reports: "https://github.com/ocaml/odoc/issues" -license: "ISC" - -authors: [ - "Thomas Refis " - "David Sheets " - "Leo White " - "Anton Bachin " - "Jon Ludlam " - "Jules Aguillon " - "Lubega Simon " -] -maintainer: "Jon Ludlam " -dev-repo: "git+https://github.com/ocaml/odoc.git" - -synopsis: "OCaml documentation generator" -description: """ -Odoc is a documentation generator for OCaml. It reads doc comments, -delimited with `(** ... *)`, and outputs HTML. -""" - -depends: [ - "odoc-parser" {>= "2.0.0"} - "astring" - "cmdliner" {>= "1.0.0"} - "cppo" {build & >= "1.1.0"} - "dune" {>= "3.0.2"} - "fpath" - "ocaml" {>= "4.02.0"} - "result" - "tyxml" {>= "4.3.0"} - "fmt" - - "ocamlfind" {with-test} - "yojson" {< "2.0.0" & with-test} - ("ocaml" {< "4.04.1" & with-test} | "sexplib0" {with-test}) - "conf-jq" {with-test} - - "ppx_expect" {with-test} - "bos" {with-test} - "crunch" {with-test} - - ("ocaml" {< "4.07.0" & with-test} | "bisect_ppx" {with-test & > "2.5.0"}) - ("ocaml" {< "4.03.0" & with-test} | "mdx" {with-test}) -] - -build: [ - ["dune" "subst"] {dev} - ["dune" "build" "-p" name "-j" jobs] -] -url { - src: "https://github.com/ocaml/odoc/releases/download/2.2.1/odoc-2.2.1.tbz" - checksum: [ - "sha256=1786e53bf0824fe1c7c7b81d2a7d846846a5d11677969e6396361f77a3816803" - "sha512=044e37eb3dcc77d9cc8124be558cce77a438723b90225273fb3401d3315c57c8c2f395a48ebd1b6aacc01b00cbfa4bd0be1923d2bd9bd3cc92d0604eadaabc4f" - ] -} -x-commit-hash: "2d8a6776c19ffa995ae285cd1dfc27f2fea3820a" diff --git a/esy.lock/opam/odoc.2.4.1/opam b/esy.lock/opam/odoc.2.4.1/opam new file mode 100644 index 00000000..c5867e7f --- /dev/null +++ b/esy.lock/opam/odoc.2.4.1/opam @@ -0,0 +1,84 @@ +opam-version: "2.0" +homepage: "https://github.com/ocaml/odoc" +doc: "https://ocaml.github.io/odoc/" +bug-reports: "https://github.com/ocaml/odoc/issues" +license: "ISC" + +maintainer: [ + "Daniel Bünzli " + "Jon Ludlam " + "Jules Aguillon " + "Paul-Elliot Anglès d'Auriac " +] +authors: [ + "Anton Bachin " + "Daniel Bünzli " + "David Sheets " + "Jon Ludlam " + "Jules Aguillon " + "Leo White " + "Lubega Simon " + "Paul-Elliot Anglès d'Auriac " + "Thomas Refis " +] +dev-repo: "git+https://github.com/ocaml/odoc.git" + +synopsis: "OCaml Documentation Generator" +description: """ +**odoc** is a powerful and flexible documentation generator for OCaml. It reads *doc comments*, demarcated by `(** ... *)`, and transforms them into a variety of output formats, including HTML, LaTeX, and man pages. + +- **Output Formats:** Odoc generates HTML for web browsing, LaTeX for PDF generation, and man pages for use on Unix-like systems. +- **Cross-References:** odoc uses the `ocamldoc` markup, which allows to create links for functions, types, modules, and documentation pages. +- **Link to Source Code:** Documentation generated includes links to the source code of functions, providing an easy way to navigate from the docs to the actual implementation. +- **Code Highlighting:** odoc automatically highlights syntax in code snippets for different languages. + +odoc is part of the [OCaml Platform](https://ocaml.org/docs/platform), the recommended set of tools for OCaml. +""" + + +depends: [ + "odoc-parser" {= version} + "astring" + "cmdliner" {>= "1.0.0"} + "cppo" {build & >= "1.1.0"} + "dune" {>= "3.7.0"} + "fpath" + "ocaml" {>= "4.02.0" & < "5.2"} + "result" + "tyxml" {>= "4.4.0"} + "fmt" + + "ocamlfind" {with-test} + "yojson" {>= "1.6.0" & with-test} + ("ocaml" {< "4.04.1" & with-test} | "sexplib0" {with-test}) + "conf-jq" {with-test} + + "ppx_expect" {with-test} + "bos" {with-test} + "crunch" {> "1.1.0"} + + ("ocaml" {< "4.07.0" & with-test} | "bisect_ppx" {with-test & > "2.5.0"}) +] + +build: [ + ["dune" "subst"] {dev} + [ + "dune" + "build" + "-p" + name + "-j" + jobs + "@install" + "@runtest" {with-test} + "@doc" {with-doc} + ] +] +url { + src: "https://github.com/ocaml/odoc/releases/download/2.4.1/odoc-2.4.1.tbz" + checksum: [ + "sha256=b814a0b9020b503eb67f17d1d9a969d052b63d8cdc7cdfa5fb793b137558cedb" + "sha512=8ed2ed6ef705c00a2c90b7c57e7e5c747247e3406f1b7415a46db7cbd19d02678db40be761984d627f4fa2d9b38f696c77d8b5d40108e12563e101d07949821c" + ] +} +x-commit-hash: "0e671097a35ef938ea390a6bb894f25d8dc847a8" diff --git a/esy.lock/opam/ordering.3.10.0/opam b/esy.lock/opam/ordering.3.14.0/opam similarity index 64% rename from esy.lock/opam/ordering.3.10.0/opam rename to esy.lock/opam/ordering.3.14.0/opam index 13c515fc..d3778d6f 100644 --- a/esy.lock/opam/ordering.3.10.0/opam +++ b/esy.lock/opam/ordering.3.14.0/opam @@ -8,7 +8,7 @@ homepage: "https://github.com/ocaml/dune" doc: "https://dune.readthedocs.io/" bug-reports: "https://github.com/ocaml/dune/issues" depends: [ - "dune" {>= "3.5"} + "dune" {>= "3.12"} "ocaml" {>= "4.08.0"} "odoc" {with-doc} ] @@ -30,10 +30,10 @@ build: [ ] url { src: - "https://github.com/ocaml/dune/releases/download/3.10.0/dune-3.10.0.tbz" + "https://github.com/ocaml/dune/releases/download/3.14.0/dune-3.14.0.tbz" checksum: [ - "sha256=9ff03384a98a8df79852cc674f0b4738ba8aec17029b6e2eeb514f895e710355" - "sha512=8133cdcc5499a6bf21cd65b4fc8b12445ae39366731006773fcd3b348c553a8d89d004db161c655aa167a2a3653b7919d32b27f29217106ef762bd01b43afc76" + "sha256=f4d09d89162621fdff424c253fa50c4920d2179fb5b3d1debab7bbe97c68b2fc" + "sha512=f5ead1a9a0cc26e00a762e83e107b47c3c3fe9b44d9e505547c385c7938208d4fdcc91a8099512e76ea4a426f3543445b4d75ef0b621dc7dbfdcbb615bc0b999" ] } -x-commit-hash: "fc382520272012638088848d7f3dd1ef6687a284" +x-commit-hash: "73250f00372d3f28a25963ded6138728f4202663" diff --git a/esy.lock/opam/pp.1.1.2/opam b/esy.lock/opam/pp.1.2.0/opam similarity index 76% rename from esy.lock/opam/pp.1.1.2/opam rename to esy.lock/opam/pp.1.2.0/opam index e09edbfd..9f4fad20 100644 --- a/esy.lock/opam/pp.1.1.2/opam +++ b/esy.lock/opam/pp.1.2.0/opam @@ -20,7 +20,7 @@ one [2] should be applicable to Pp as well. """ maintainer: ["Jeremie Dimino "] authors: [ - "Jane Street Group, LLC" + "Jane Street Group, LLC " "Jeremie Dimino " ] license: "MIT" @@ -28,9 +28,10 @@ homepage: "https://github.com/ocaml-dune/pp" doc: "https://ocaml-dune.github.io/pp/" bug-reports: "https://github.com/ocaml-dune/pp/issues" depends: [ - "dune" {>= "2.0"} + "dune" {>= "2.8"} "ocaml" {>= "4.08.0"} "ppx_expect" {with-test} + "odoc" {with-doc} ] build: [ ["dune" "subst"] {dev} @@ -47,12 +48,12 @@ build: [ ] ] dev-repo: "git+https://github.com/ocaml-dune/pp.git" -x-commit-hash: "395b95c89cfe2c6d538dad9d56721b6a7278d46c" url { src: - "https://github.com/ocaml-dune/pp/releases/download/1.1.2/pp-1.1.2.tbz" + "https://github.com/ocaml-dune/pp/releases/download/1.2.0/pp-1.2.0.tbz" checksum: [ - "sha256=e4a4e98d96b1bb76950fcd6da4e938c86d989df4d7e48f02f7a44595f5af1d56" - "sha512=58f78b083483006b40814be9aac33c895349eb1c6427d2762b4d760192613401262478bd5deff909763517560b06af7bf013c6a6f87d549aafa77b26345303f2" + "sha256=a5e822573c55afb42db29ec56eacd1f2acd8f65cf2df2878e291de374ce6909c" + "sha512=912164c2aa7241d73f735dadfbefe8ed0138d241579d2e885440e068fac78eb9f0b3d782c2420e757e313168c1725daff6ab91800dd315b1e05288456998b40a" ] } +x-commit-hash: "83b68c740f21acdcfe54436355ab328372871357" diff --git a/esy.lock/opam/ppxlib.0.29.1/opam b/esy.lock/opam/ppxlib.0.32.1~5.2preview/opam similarity index 65% rename from esy.lock/opam/ppxlib.0.29.1/opam rename to esy.lock/opam/ppxlib.0.32.1~5.2preview/opam index 0a04c32e..b7353cae 100644 --- a/esy.lock/opam/ppxlib.0.29.1/opam +++ b/esy.lock/opam/ppxlib.0.32.1~5.2preview/opam @@ -1,9 +1,9 @@ opam-version: "2.0" -synopsis: "Standard library for ppx rewriters" +synopsis: "Standard infrastructure for ppx rewriters" description: """ -Ppxlib is the standard library for ppx rewriters and other programs -that manipulate the in-memory representation of OCaml programs, a.k.a -the "Parsetree". +Ppxlib is the standard infrastructure for ppx rewriters +and other programs that manipulate the in-memory representation of +OCaml programs, a.k.a the "Parsetree". It also comes bundled with two ppx rewriters that are commonly used to write tools that manipulate and/or generate Parsetree values; @@ -20,7 +20,7 @@ doc: "https://ocaml-ppx.github.io/ppxlib/" bug-reports: "https://github.com/ocaml-ppx/ppxlib/issues" depends: [ "dune" {>= "2.7"} - "ocaml" {>= "4.04.1" & < "5.1.0"} + "ocaml" {>= "4.04.1" & < "5.3.0"} "ocaml-compiler-libs" {>= "v0.11.0"} "ppx_derivers" {>= "1.0"} "sexplib0" {>= "v0.12"} @@ -29,13 +29,13 @@ depends: [ "ocamlfind" {with-test} "re" {with-test & >= "1.9.0"} "cinaps" {with-test & >= "v0.12.1"} - "base" {with-test & < "v0.16.0" } - "stdio" {with-test} "odoc" {with-doc} ] conflicts: [ "ocaml-migrate-parsetree" {< "2.0.0"} "base-effects" + "ocaml-base-compiler" {= "5.1.0~alpha1"} + "ocaml-variants" {= "5.1.0~alpha1+options"} ] build: [ ["dune" "subst"] {dev} @@ -52,12 +52,12 @@ build: [ ] ] dev-repo: "git+https://github.com/ocaml-ppx/ppxlib.git" +flags: avoid-version +available: opam-version >= "2.1.0" url { - src: - "https://github.com/ocaml-ppx/ppxlib/releases/download/0.29.1/ppxlib-0.29.1.tbz" + src: "https://github.com/ocaml-ppx/ppxlib/archive/51851b4f9b18fe75a0bc24c383d5843855de87e3.tar.gz" checksum: [ - "sha256=c8ea8c8770414fdba6612e7f2d814b21a493daa974ea862a90c8e6c766e5dd79" - "sha512=edc468e9111cc26e31825e475fd72f55123a22fe86548e07e7d111796fecb8d60359b1b53c7eac383e5e2114cbae74dfd9c166f330e84cbeab4ddfd5797e322f" + "sha256=71c606dc9214769e5ea767b65559ae1d8296f5096dac30bd9ef91f645f1f60a3" + "sha512=dd7e6524789d99bd7394e1e7b1177ec3e36f2f7ef90e614ec908525255ad190378533501d88489d9677aabcce9e3a880d88947faec0718a2164a96772e7678f9" ] } -x-commit-hash: "36fcba0408b78963a730e0be92abdbab00b0ea26" diff --git a/esy.lock/opam/ptime.1.1.0/opam b/esy.lock/opam/ptime.1.1.0/opam new file mode 100644 index 00000000..39796c2a --- /dev/null +++ b/esy.lock/opam/ptime.1.1.0/opam @@ -0,0 +1,41 @@ +opam-version: "2.0" +synopsis: "POSIX time for OCaml" +description: """\ +Ptime has platform independent POSIX time support in pure OCaml. It +provides a type to represent a well-defined range of POSIX timestamps +with picosecond precision, conversion with date-time values, +conversion with [RFC 3339 timestamps][rfc3339] and pretty printing to +a human-readable, locale-independent representation. + +The additional Ptime_clock library provides access to a system POSIX +clock and to the system's current time zone offset. + +Ptime is not a calendar library. + +Ptime has no dependency. Ptime_clock depends on your system library or +JavaScript runtime system. Ptime and its libraries are distributed +under the ISC license. + +[rfc3339]: http://tools.ietf.org/html/rfc3339 + +Home page: """ +maintainer: "Daniel Bünzli " +authors: "The ptime programmers" +license: "ISC" +tags: ["time" "posix" "system" "org:erratique"] +homepage: "https://erratique.ch/software/ptime" +doc: "https://erratique.ch/software/ptime/doc/" +bug-reports: "https://github.com/dbuenzli/ptime/issues" +depends: [ + "ocaml" {>= "4.08.0"} + "ocamlfind" {build} + "ocamlbuild" {build & != "0.9.0"} + "topkg" {build & >= "1.0.3"} +] +build: ["ocaml" "pkg/pkg.ml" "build" "--dev-pkg" "%{dev}%"] +dev-repo: "git+https://erratique.ch/repos/ptime.git" +url { + src: "https://erratique.ch/software/ptime/releases/ptime-1.1.0.tbz" + checksum: + "sha512=309b8383f61b58840e58a82802ec8fbc61b7cc95a4590d38ad427e484cbaaf66f03fa8e6484b5b6855468a87e745aed103bf6f1041ec05062230a9fa5fb86cc6" +} \ No newline at end of file diff --git a/esy.lock/opam/re.1.10.4/opam b/esy.lock/opam/re.1.11.0/opam similarity index 69% rename from esy.lock/opam/re.1.10.4/opam rename to esy.lock/opam/re.1.11.0/opam index 9dad6613..303af008 100644 --- a/esy.lock/opam/re.1.10.4/opam +++ b/esy.lock/opam/re.1.11.0/opam @@ -8,7 +8,7 @@ authors: [ "Rudi Grinberg" "Gabriel Radanne" ] -license: "LGPL-2.0-or-later WITH OCaml-LGPL-linking-exception" +license: "LGPL-2.1-or-later WITH OCaml-LGPL-linking-exception" homepage: "https://github.com/ocaml/ocaml-re" bug-reports: "https://github.com/ocaml/ocaml-re/issues" dev-repo: "git+https://github.com/ocaml/ocaml-re.git" @@ -37,10 +37,10 @@ Pure OCaml regular expressions with: """ url { src: - "https://github.com/ocaml/ocaml-re/releases/download/1.10.4/re-1.10.4.tbz" + "https://github.com/ocaml/ocaml-re/releases/download/1.11.0/re-1.11.0.tbz" checksum: [ - "sha256=83eb3e4300aa9b1dc7820749010f4362ea83524742130524d78c20ce99ca747c" - "sha512=92b05cf92c389fa8c753f2acca837b15dd05a4a2e8e2bec7a269d2e14c35b1a786d394258376648f80b4b99250ba1900cfe68230b8385aeac153149d9ce56099" + "sha256=01fc244780c0f6be72ae796b1fb750f367de18624fd75d07ee79782ed6df8d4f" + "sha512=3e3712cc1266ec1f27620f3508ea2ebba338f4083b07d8a69dccee1facfdc1971a6c39f9deea664d2a62fd7f2cfd2eae816ca4c274acfadaee992a3befc4b757" ] } -x-commit-hash: "e9a4cecb8294c1839db18b1d0c30e755ec85ed5e" +x-commit-hash: "2dd38515c76c40299596d39f18d9b9a20f00d788" diff --git a/esy.lock/opam/stdune.3.10.0/opam b/esy.lock/opam/stdune.3.14.0/opam similarity index 68% rename from esy.lock/opam/stdune.3.10.0/opam rename to esy.lock/opam/stdune.3.14.0/opam index 7b84cc64..a1c0372f 100644 --- a/esy.lock/opam/stdune.3.10.0/opam +++ b/esy.lock/opam/stdune.3.14.0/opam @@ -9,12 +9,12 @@ homepage: "https://github.com/ocaml/dune" doc: "https://dune.readthedocs.io/" bug-reports: "https://github.com/ocaml/dune/issues" depends: [ - "dune" {>= "3.5"} + "dune" {>= "3.12"} "ocaml" {>= "4.08.0"} "base-unix" "dyn" {= version} "ordering" {= version} - "pp" {>= "1.1.0"} + "pp" {>= "1.2.0"} "csexp" {>= "1.5.0"} "odoc" {with-doc} ] @@ -36,10 +36,10 @@ build: [ ] url { src: - "https://github.com/ocaml/dune/releases/download/3.10.0/dune-3.10.0.tbz" + "https://github.com/ocaml/dune/releases/download/3.14.0/dune-3.14.0.tbz" checksum: [ - "sha256=9ff03384a98a8df79852cc674f0b4738ba8aec17029b6e2eeb514f895e710355" - "sha512=8133cdcc5499a6bf21cd65b4fc8b12445ae39366731006773fcd3b348c553a8d89d004db161c655aa167a2a3653b7919d32b27f29217106ef762bd01b43afc76" + "sha256=f4d09d89162621fdff424c253fa50c4920d2179fb5b3d1debab7bbe97c68b2fc" + "sha512=f5ead1a9a0cc26e00a762e83e107b47c3c3fe9b44d9e505547c385c7938208d4fdcc91a8099512e76ea4a426f3543445b4d75ef0b621dc7dbfdcbb615bc0b999" ] } -x-commit-hash: "fc382520272012638088848d7f3dd1ef6687a284" +x-commit-hash: "73250f00372d3f28a25963ded6138728f4202663" diff --git a/esy.lock/opam/tyxml.4.5.0/opam b/esy.lock/opam/tyxml.4.6.0/opam similarity index 72% rename from esy.lock/opam/tyxml.4.5.0/opam rename to esy.lock/opam/tyxml.4.6.0/opam index 22c77607..a0e62e11 100644 --- a/esy.lock/opam/tyxml.4.5.0/opam +++ b/esy.lock/opam/tyxml.4.6.0/opam @@ -9,12 +9,13 @@ homepage: "https://github.com/ocsigen/tyxml" doc: "https://ocsigen.org/tyxml/latest/manual/intro" bug-reports: "https://github.com/ocsigen/tyxml/issues" depends: [ - "dune" {>= "2.0"} - "ocaml" {>= "4.02"} + "dune" {>= "2.7"} + "ocaml" {>= "4.04"} "alcotest" {with-test} - "re" {>= "1.5.0"} + "re" {>= "1.7.2"} "seq" "uutf" {>= "1.0.0"} + "odoc" {with-doc} ] build: [ ["dune" "subst"] {dev} @@ -31,12 +32,12 @@ build: [ ] ] dev-repo: "git+https://github.com/ocsigen/tyxml.git" -x-commit-hash: "ef431a4bceaefb2d9248e79092e6c1a1a9420095" url { src: - "https://github.com/ocsigen/tyxml/releases/download/4.5.0/tyxml-4.5.0.tbz" + "https://github.com/ocsigen/tyxml/releases/download/4.6.0/tyxml-4.6.0.tbz" checksum: [ - "sha256=c69accef5df4dd89d38f6aa0baad01e8fda4e9e98bb7dad61bec1452c5716068" - "sha512=772535441b09c393d53c27152e65f404a0a541aa0cea1bda899a8d751ab64d1729237e583618c3ff33d75e3865d53503d1ea413c6bbc8c68c413347efd1709b3" + "sha256=bfeb673c6b4e120a4eca4c48448add47dc3f8d02c2b40f63ffdccc4e91c902dd" + "sha512=69750eeaf467014282087bf9628f3278f3e5f00f4c7400358750d208664cfc3f79a5cba16767d2935e53477d1a6862fe08c5b801b69052ec12e09d1a93a5e9b4" ] } +x-commit-hash: "d2916535536f2134bad7793a598ba5b7327cae41" diff --git a/esy.lock/opam/xdg.3.10.0/opam b/esy.lock/opam/xdg.3.14.0/opam similarity index 67% rename from esy.lock/opam/xdg.3.10.0/opam rename to esy.lock/opam/xdg.3.14.0/opam index fa7d65c3..55d99b69 100644 --- a/esy.lock/opam/xdg.3.10.0/opam +++ b/esy.lock/opam/xdg.3.14.0/opam @@ -9,7 +9,7 @@ homepage: "https://github.com/ocaml/dune" doc: "https://dune.readthedocs.io/" bug-reports: "https://github.com/ocaml/dune/issues" depends: [ - "dune" {>= "3.5"} + "dune" {>= "3.12"} "ocaml" {>= "4.08"} "odoc" {with-doc} ] @@ -31,10 +31,10 @@ build: [ ] url { src: - "https://github.com/ocaml/dune/releases/download/3.10.0/dune-3.10.0.tbz" + "https://github.com/ocaml/dune/releases/download/3.14.0/dune-3.14.0.tbz" checksum: [ - "sha256=9ff03384a98a8df79852cc674f0b4738ba8aec17029b6e2eeb514f895e710355" - "sha512=8133cdcc5499a6bf21cd65b4fc8b12445ae39366731006773fcd3b348c553a8d89d004db161c655aa167a2a3653b7919d32b27f29217106ef762bd01b43afc76" + "sha256=f4d09d89162621fdff424c253fa50c4920d2179fb5b3d1debab7bbe97c68b2fc" + "sha512=f5ead1a9a0cc26e00a762e83e107b47c3c3fe9b44d9e505547c385c7938208d4fdcc91a8099512e76ea4a426f3543445b4d75ef0b621dc7dbfdcbb615bc0b999" ] } -x-commit-hash: "fc382520272012638088848d7f3dd1ef6687a284" +x-commit-hash: "73250f00372d3f28a25963ded6138728f4202663" diff --git a/esy.lock/opam/yojson.2.1.0/opam b/esy.lock/opam/yojson.2.1.2/opam similarity index 77% rename from esy.lock/opam/yojson.2.1.0/opam rename to esy.lock/opam/yojson.2.1.2/opam index 4e90c158..df37a739 100644 --- a/esy.lock/opam/yojson.2.1.0/opam +++ b/esy.lock/opam/yojson.2.1.2/opam @@ -39,10 +39,10 @@ build: [ dev-repo: "git+https://github.com/ocaml-community/yojson.git" url { src: - "https://github.com/ocaml-community/yojson/releases/download/2.1.0/yojson-2.1.0.tbz" + "https://github.com/ocaml-community/yojson/releases/download/2.1.2/yojson-2.1.2.tbz" checksum: [ - "sha256=9fcb1ff2db58ab259f9228796b0ada4794eae97177b1833371380c4e4f90b15d" - "sha512=31ab8580e0e4e8a05459fbec2fb9424a3df4cf5aef6df21fc577dbe3d32e81103a632c6a511c4dcf1f51819e88b38d2ce7d6888545bc3f359e69e070f8d2e69c" + "sha256=59f2f1abbfc8a7ccbdbf608894e5c75e8a76006e34899254446f83e200dfb4f9" + "sha512=309cba7568dec51de20c7ab8df033258c275b8d58b0a36a66b26e673a3bc050cbd7e39ff8fe4796e89263e125bcc21e04dc36a394f3cc201956887eee1fb281a" ] } -x-commit-hash: "42fa0887cb870bdbd1751d98cd23f99d6b29751d" +x-commit-hash: "e51163ee04ad79408975545ec5fc3b7dc41f68eb" diff --git a/esy.lock/overrides/opam__s__ocamlbuild_opam__c__0.14.3_opam_override/files/ocamlbuild-0.14.2.patch b/esy.lock/overrides/opam__s__ocamlbuild_opam__c__0.14.3_opam_override/files/ocamlbuild-0.14.2.patch new file mode 100644 index 00000000..e69de29b diff --git a/esy.lock/overrides/opam__s__ocamlbuild_opam__c__0.14.2+win_opam_override/files/winpatch.patch b/esy.lock/overrides/opam__s__ocamlbuild_opam__c__0.14.3_opam_override/files/winpatch.patch similarity index 100% rename from esy.lock/overrides/opam__s__ocamlbuild_opam__c__0.14.2+win_opam_override/files/winpatch.patch rename to esy.lock/overrides/opam__s__ocamlbuild_opam__c__0.14.3_opam_override/files/winpatch.patch diff --git a/esy.lock/overrides/opam__s__ocamlbuild_opam__c__0.14.2+win_opam_override/package.json b/esy.lock/overrides/opam__s__ocamlbuild_opam__c__0.14.3_opam_override/package.json similarity index 100% rename from esy.lock/overrides/opam__s__ocamlbuild_opam__c__0.14.2+win_opam_override/package.json rename to esy.lock/overrides/opam__s__ocamlbuild_opam__c__0.14.3_opam_override/package.json diff --git a/esy.lock/overrides/opam__s__ptime_opam__c__1.1.0_opam_override/package.json b/esy.lock/overrides/opam__s__ptime_opam__c__1.1.0_opam_override/package.json new file mode 100644 index 00000000..59515d3d --- /dev/null +++ b/esy.lock/overrides/opam__s__ptime_opam__c__1.1.0_opam_override/package.json @@ -0,0 +1,3 @@ +{ + "build": "bash -c 'ocaml pkg/pkg.ml build --dev-pkg false || (./_build/sanitize.sh; ocaml pkg/pkg.ml build --dev-pkg false)'" +} diff --git a/io/ODiffIO.ml b/io/ODiffIO.ml new file mode 100644 index 00000000..c8c70786 --- /dev/null +++ b/io/ODiffIO.ml @@ -0,0 +1,4 @@ +module Bmp = Bmp +module Png = Png +module Jpg = Jpg +module Tiff = Tiff diff --git a/io/ODiffIO.re b/io/ODiffIO.re deleted file mode 100644 index 0b231c16..00000000 --- a/io/ODiffIO.re +++ /dev/null @@ -1,4 +0,0 @@ -module Bmp = Bmp; -module Png = Png; -module Jpg = Jpg; -module Tiff = Tiff; diff --git a/io/bmp/Bmp.ml b/io/bmp/Bmp.ml new file mode 100644 index 00000000..7612ddc1 --- /dev/null +++ b/io/bmp/Bmp.ml @@ -0,0 +1,30 @@ +open Bigarray + +type data = (int32, int32_elt, c_layout) Array1.t + +module IO : Odiff.ImageIO.ImageIO = struct + type t = data + + let loadImage filename : t Odiff.ImageIO.img = + let width, height, data = ReadBmp.load filename in + { width; height; image = data } + + let readDirectPixel ~(x : int) ~(y : int) (img : t Odiff.ImageIO.img) = + let image : data = img.image in + Array1.unsafe_get image ((y * img.width) + x) + [@@inline] + + let setImgColor ~x ~y color (img : t Odiff.ImageIO.img) = + let image : data = img.image in + Array1.unsafe_set image ((y * img.width) + x) color + [@@inline] + + let saveImage (img : t Odiff.ImageIO.img) filename = + WritePng.write_png_bigarray filename img.image img.width img.height + + let freeImage (img : t Odiff.ImageIO.img) = () + + let makeSameAsLayout (img : t Odiff.ImageIO.img) = + let image = Array1.create int32 c_layout (Array1.dim img.image) in + { img with image } +end diff --git a/io/bmp/Bmp.mli b/io/bmp/Bmp.mli new file mode 100644 index 00000000..913c029c --- /dev/null +++ b/io/bmp/Bmp.mli @@ -0,0 +1,3 @@ +type data = (int32, Bigarray.int32_elt, Bigarray.c_layout) Bigarray.Array1.t + +module IO : Odiff.ImageIO.ImageIO diff --git a/io/bmp/Bmp.re b/io/bmp/Bmp.re deleted file mode 100644 index ff5371da..00000000 --- a/io/bmp/Bmp.re +++ /dev/null @@ -1,38 +0,0 @@ -open Bigarray; - -type data = Array1.t(int32, int32_elt, c_layout); - -module IO: Odiff.ImageIO.ImageIO = { - type t = data; - - let loadImage = (filename): Odiff.ImageIO.img(t) => { - let (width, height, data) = ReadBmp.load(filename); - - {width, height, image: data}; - }; - - [@inline] - let readDirectPixel = (~x: int, ~y: int, img: Odiff.ImageIO.img(t)) => { - let image: data = img.image; - Array1.unsafe_get(image, y * img.width + x); - }; - - [@inline] - let setImgColor = (~x, ~y, color, img: Odiff.ImageIO.img(t)) => { - let image: data = img.image; - Array1.unsafe_set(image, y * img.width + x, color); - }; - - let saveImage = (img: Odiff.ImageIO.img(t), filename) => { - WritePng.write_png_bigarray(filename, img.image, img.width, img.height); - }; - - let freeImage = (img: Odiff.ImageIO.img(t)) => { - (); - }; - - let makeSameAsLayout = (img: Odiff.ImageIO.img(t)) => { - let image = Array1.create(int32, c_layout, Array1.dim(img.image)); - {...img, image}; - }; -}; diff --git a/io/bmp/Bmp.rei b/io/bmp/Bmp.rei deleted file mode 100644 index 256a8d3f..00000000 --- a/io/bmp/Bmp.rei +++ /dev/null @@ -1,3 +0,0 @@ -type data = Bigarray.Array1.t(int32, Bigarray.int32_elt, Bigarray.c_layout); - -module IO: Odiff.ImageIO.ImageIO; diff --git a/io/bmp/ReadBmp.ml b/io/bmp/ReadBmp.ml new file mode 100644 index 00000000..c203e98f --- /dev/null +++ b/io/bmp/ReadBmp.ml @@ -0,0 +1,169 @@ +open Bigarray + +type bicompression = BI_RGB | BI_RLE8 | BI_RLE4 | BI_BITFIELDS +type bibitcount = Monochrome | Color16 | Color256 | ColorRGB | ColorRGBA + +type bitmapfileheader = { + bfType : int; + bfSize : int; + bfReserved1 : int; + bfReserved2 : int; + bfOffBits : int; +} + +type bitmapinfoheader = { + biSize : int; + biWidth : int; + biHeight : int; + biPlanes : int; + biBitCount : bibitcount; + biCompression : bicompression; + biSizeImage : int; + biXPelsPerMeter : int; + biYPelsPerMeter : int; + biClrUsed : int; + biClrImportant : int; +} + +type bmp = { + bmpFileHeader : bitmapfileheader; + bmpInfoHeader : bitmapinfoheader; + bmpBytes : (int32, Bigarray.int32_elt, Bigarray.c_layout) Bigarray.Array1.t; +} + +let bytes_read = ref 0 + +let read_byte ic = + incr bytes_read; + input_byte ic + +let skip_byte ic = + incr bytes_read; + ignore (input_byte ic) + +let read_16bit ic = + let b0 = read_byte ic in + let b1 = read_byte ic in + (b1 lsl 8) + b0 + +let read_32bit ic = + let b0 = read_byte ic in + let b1 = read_byte ic in + let b2 = read_byte ic in + let b3 = read_byte ic in + (b3 lsl 24) + (b2 lsl 16) + (b1 lsl 8) + b0 + +let read_bit_count ic = + match read_16bit ic with + | 1 -> Monochrome + | 4 -> Color16 + | 8 -> Color256 + | 24 -> ColorRGB + | 32 -> ColorRGBA + | n -> failwith ("invalid number of colors in bitmap: " ^ string_of_int n) + +let read_compression ic = + match read_32bit ic with + | 0 -> BI_RGB + | 1 -> BI_RLE8 + | 2 -> BI_RLE4 + | 3 -> BI_BITFIELDS + | n -> failwith ("invalid compression: " ^ string_of_int n) + +let load_bitmapfileheader ic = + let bfType = read_16bit ic in + if bfType <> 19778 then failwith "Invalid bitmap file"; + let bfSize = read_32bit ic in + let bfReserved1 = read_16bit ic in + let bfReserved2 = read_16bit ic in + let bfOffBits = read_32bit ic in + { bfType; bfSize; bfReserved1; bfReserved2; bfOffBits } + +let load_bitmapinfoheader ic = + try + let biSize = read_32bit ic in + let biWidth = read_32bit ic in + let biHeight = read_32bit ic in + let biPlanes = read_16bit ic in + let biBitCount = read_bit_count ic in + let biCompression = read_compression ic in + let biSizeImage = read_32bit ic in + let biXPelsPerMeter = read_32bit ic in + let biYPelsPerMeter = read_32bit ic in + let biClrUsed = read_32bit ic in + let biClrImportant = read_32bit ic in + { + biSize; + biWidth; + biHeight; + biPlanes; + biBitCount; + biCompression; + biSizeImage; + biXPelsPerMeter; + biYPelsPerMeter; + biClrUsed; + biClrImportant; + } + with ((Failure s) [@explicit_arity]) as e -> + prerr_endline s; + raise e + +let load_image24data bih ic = + let data = Array1.create int32 c_layout (bih.biWidth * bih.biHeight) in + let pad = (4 - (bih.biWidth * 3 mod 4)) land 3 in + for y = bih.biHeight - 1 downto 0 do + for x = 0 to bih.biWidth - 1 do + let b = (read_byte ic land 255) lsl 16 in + let g = (read_byte ic land 255) lsl 8 in + let r = (read_byte ic land 255) lsl 0 in + let a = 255 lsl 24 in + Array1.set data + ((y * bih.biWidth) + x) + (Int32.of_int (a lor b lor g lor r)) + done; + for _j = 0 to pad - 1 do + skip_byte ic + done + done; + data + +let load_image32data bih ic = + let data = Array1.create int32 c_layout (bih.biWidth * bih.biHeight) in + for y = bih.biHeight - 1 downto 0 do + for x = 0 to bih.biWidth - 1 do + let b = (read_byte ic land 255) lsl 16 in + let g = (read_byte ic land 255) lsl 8 in + let r = (read_byte ic land 255) lsl 0 in + let a = (read_byte ic land 255) lsl 24 in + Array1.set data + ((y * bih.biWidth) + x) + (Int32.of_int (a lor b lor g lor r)) + done + done; + data + +let load_imagedata bih ic = + match bih.biBitCount with + | ColorRGBA -> load_image32data bih ic + | ColorRGB -> load_image24data bih ic + | _ -> failwith "BMP has to be 32 or 24 bit" + +let skip_to ic n = + while !bytes_read <> n do + skip_byte ic + done + +let read_bmp ic = + bytes_read := 0; + let bmpFileHeader = load_bitmapfileheader ic in + let bmpInfoHeader = load_bitmapinfoheader ic in + skip_to ic bmpFileHeader.bfOffBits; + let bmpBytes = load_imagedata bmpInfoHeader ic in + { bmpFileHeader; bmpInfoHeader; bmpBytes } + +let load filename = + let ic = open_in_bin filename in + let bmp = read_bmp ic in + close_in ic; + (bmp.bmpInfoHeader.biWidth, bmp.bmpInfoHeader.biHeight, bmp.bmpBytes) diff --git a/io/bmp/ReadBmp.mli b/io/bmp/ReadBmp.mli new file mode 100644 index 00000000..da354d47 --- /dev/null +++ b/io/bmp/ReadBmp.mli @@ -0,0 +1,3 @@ +val load : + string -> + int * int * (int32, Bigarray.int32_elt, Bigarray.c_layout) Bigarray.Array1.t diff --git a/io/bmp/ReadBmp.re b/io/bmp/ReadBmp.re deleted file mode 100644 index ee7583d0..00000000 --- a/io/bmp/ReadBmp.re +++ /dev/null @@ -1,208 +0,0 @@ -open Bigarray; - -type bicompression = - | BI_RGB - | BI_RLE8 - | BI_RLE4 - | BI_BITFIELDS; - -type bibitcount = - | Monochrome - | Color16 - | Color256 - | ColorRGB - | ColorRGBA; - -type bitmapfileheader = { - bfType: int, - bfSize: int, - bfReserved1: int, - bfReserved2: int, - bfOffBits: int, -}; - -type bitmapinfoheader = { - biSize: int, - biWidth: int, - biHeight: int, - biPlanes: int, - biBitCount: bibitcount, - biCompression: bicompression, - biSizeImage: int, - biXPelsPerMeter: int, - biYPelsPerMeter: int, - biClrUsed: int, - biClrImportant: int, -}; - -type bmp = { - bmpFileHeader: bitmapfileheader, - bmpInfoHeader: bitmapinfoheader, - bmpBytes: Bigarray.Array1.t(int32, Bigarray.int32_elt, Bigarray.c_layout), -}; - -let bytes_read = ref(0); - -let read_byte = ic => { - incr(bytes_read); - input_byte(ic); -}; -let skip_byte = ic => { - incr(bytes_read); - ignore(input_byte(ic)); -}; - -let read_16bit = ic => { - let b0 = read_byte(ic); - let b1 = read_byte(ic); - - b1 lsl 8 + b0; -}; - -let read_32bit = ic => { - let b0 = read_byte(ic); - let b1 = read_byte(ic); - let b2 = read_byte(ic); - let b3 = read_byte(ic); - - b3 lsl 24 + b2 lsl 16 + b1 lsl 8 + b0; -}; - -let read_bit_count = ic => - switch (read_16bit(ic)) { - | 1 => Monochrome - | 4 => Color16 - | 8 => Color256 - | 24 => ColorRGB - | 32 => ColorRGBA - | n => failwith("invalid number of colors in bitmap: " ++ string_of_int(n)) - }; - -let read_compression = ic => - switch (read_32bit(ic)) { - | 0 => BI_RGB - | 1 => BI_RLE8 - | 2 => BI_RLE4 - | 3 => BI_BITFIELDS - | n => failwith("invalid compression: " ++ string_of_int(n)) - }; - -let load_bitmapfileheader = ic => { - let bfType = read_16bit(ic); - if (bfType != 19778) { - failwith("Invalid bitmap file"); - }; - let bfSize = read_32bit(ic); - let bfReserved1 = read_16bit(ic); - let bfReserved2 = read_16bit(ic); - let bfOffBits = read_32bit(ic); - {bfType, bfSize, bfReserved1, bfReserved2, bfOffBits}; -}; - -let load_bitmapinfoheader = ic => - try({ - let biSize = read_32bit(ic); - let biWidth = read_32bit(ic); - let biHeight = read_32bit(ic); - let biPlanes = read_16bit(ic); - let biBitCount = read_bit_count(ic); - let biCompression = read_compression(ic); - let biSizeImage = read_32bit(ic); - let biXPelsPerMeter = read_32bit(ic); - let biYPelsPerMeter = read_32bit(ic); - let biClrUsed = read_32bit(ic); - let biClrImportant = read_32bit(ic); - { - biSize, - biWidth, - biHeight, - biPlanes, - biBitCount, - biCompression, - biSizeImage, - biXPelsPerMeter, - biYPelsPerMeter, - biClrUsed, - biClrImportant, - }; - }) { - | Failure(s) as e => - prerr_endline(s); - raise(e); - }; - -let load_image24data = (bih, ic) => { - let data = Array1.create(int32, c_layout, bih.biWidth * bih.biHeight); - let pad = (4 - bih.biWidth * 3 mod 4) land 3; - - for (y in bih.biHeight - 1 downto 0) { - for (x in 0 to bih.biWidth - 1) { - let b = (read_byte(ic) land 0xFF) lsl 16; - let g = (read_byte(ic) land 0xFF) lsl 8; - let r = (read_byte(ic) land 0xFF) lsl 0; - let a = 0xFF lsl 24; - Array1.set( - data, - y * bih.biWidth + x, - Int32.of_int(a lor b lor g lor r), - ); - }; - for (_j in 0 to pad - 1) { - skip_byte(ic); - }; - }; - data; -}; - -let load_image32data = (bih, ic) => { - let data = Array1.create(int32, c_layout, bih.biWidth * bih.biHeight); - - for (y in bih.biHeight - 1 downto 0) { - for (x in 0 to bih.biWidth - 1) { - let b = (read_byte(ic) land 0xFF) lsl 16; - let g = (read_byte(ic) land 0xFF) lsl 8; - let r = (read_byte(ic) land 0xFF) lsl 0; - let a = (read_byte(ic) land 0xFF) lsl 24; - Array1.set( - data, - y * bih.biWidth + x, - Int32.of_int(a lor b lor g lor r), - ); - }; - }; - data; -}; - -let load_imagedata = (bih, ic) => { - switch (bih.biBitCount) { - | ColorRGBA => load_image32data(bih, ic) - | ColorRGB => load_image24data(bih, ic) - | _ => failwith("BMP has to be 32 or 24 bit") - }; -}; - -let skip_to = (ic, n) => { - while (bytes_read^ != n) { - skip_byte(ic); - }; -}; - -let read_bmp = ic => { - bytes_read := 0; - - let bmpFileHeader = load_bitmapfileheader(ic); - let bmpInfoHeader = load_bitmapinfoheader(ic); - - skip_to(ic, bmpFileHeader.bfOffBits); - let bmpBytes = load_imagedata(bmpInfoHeader, ic); - - {bmpFileHeader, bmpInfoHeader, bmpBytes}; -}; - -let load = filename => { - let ic = open_in_bin(filename); - let bmp = read_bmp(ic); - close_in(ic); - - (bmp.bmpInfoHeader.biWidth, bmp.bmpInfoHeader.biHeight, bmp.bmpBytes); -}; diff --git a/io/bmp/ReadBmp.rei b/io/bmp/ReadBmp.rei deleted file mode 100644 index 4738f862..00000000 --- a/io/bmp/ReadBmp.rei +++ /dev/null @@ -1,3 +0,0 @@ -let load: - string => - (int, int, Bigarray.Array1.t(int32, Bigarray.int32_elt, Bigarray.c_layout)); diff --git a/io/config/discover.ml b/io/config/discover.ml new file mode 100644 index 00000000..da8da519 --- /dev/null +++ b/io/config/discover.ml @@ -0,0 +1,27 @@ +module C = Configurator.V1 + +let _ = + C.main ~name:"odiff-c-lib-package-resolver" (fun _c -> + let spng_include_path = Sys.getenv "SPNG_INCLUDE_PATH" |> String.trim in + let spng_lib_path = Sys.getenv "SPNG_LIB_PATH" |> String.trim in + let libspng = spng_lib_path ^ "/libspng_static.a" in + let jpeg_include_path = Sys.getenv "JPEG_INCLUDE_PATH" |> String.trim in + let jpeg_lib_path = Sys.getenv "JPEG_LIB_PATH" |> String.trim in + let libjpeg = jpeg_lib_path ^ "/libjpeg.a" in + let tiff_include_path = Sys.getenv "TIFF_INCLUDE_PATH" |> String.trim in + let tiff_lib_path = Sys.getenv "TIFF_LIB_PATH" |> String.trim in + let libtiff = tiff_lib_path ^ "/libtiff.a" in + let z_lib_path = Sys.getenv "Z_LIB_PATH" |> String.trim in + let zlib = z_lib_path ^ "/libz.a" in + C.Flags.write_sexp "png_write_c_flags.sexp" [ "-I" ^ spng_include_path ]; + C.Flags.write_sexp "png_write_c_library_flags.sexp" [ libspng; zlib ]; + C.Flags.write_sexp "png_write_flags.sexp" [ "-cclib"; libspng ]; + C.Flags.write_sexp "png_c_flags.sexp" [ "-I" ^ spng_include_path ]; + C.Flags.write_sexp "png_c_library_flags.sexp" [ libspng; zlib ]; + C.Flags.write_sexp "png_flags.sexp" [ "-cclib"; libspng ]; + C.Flags.write_sexp "jpg_c_flags.sexp" [ "-I" ^ jpeg_include_path ]; + C.Flags.write_sexp "jpg_c_library_flags.sexp" [ libjpeg ]; + C.Flags.write_sexp "jpg_flags.sexp" [ "-cclib"; libjpeg ]; + C.Flags.write_sexp "tiff_c_flags.sexp" [ "-I" ^ tiff_include_path ]; + C.Flags.write_sexp "tiff_c_library_flags.sexp" [ libtiff; zlib ]; + C.Flags.write_sexp "tiff_flags.sexp" [ "-cclib"; libtiff ]) diff --git a/io/config/discover.re b/io/config/discover.re deleted file mode 100644 index c2814f92..00000000 --- a/io/config/discover.re +++ /dev/null @@ -1,34 +0,0 @@ -module C = Configurator.V1; - -C.main(~name="odiff-c-lib-package-resolver", _c => { - let spng_include_path = Sys.getenv("SPNG_INCLUDE_PATH") |> String.trim; - let spng_lib_path = Sys.getenv("SPNG_LIB_PATH") |> String.trim; - let libspng = spng_lib_path ++ "/libspng_static.a"; - - let jpeg_include_path = Sys.getenv("JPEG_INCLUDE_PATH") |> String.trim; - let jpeg_lib_path = Sys.getenv("JPEG_LIB_PATH") |> String.trim; - let libjpeg = jpeg_lib_path ++ "/libjpeg.a"; - - let tiff_include_path = Sys.getenv("TIFF_INCLUDE_PATH") |> String.trim; - let tiff_lib_path = Sys.getenv("TIFF_LIB_PATH") |> String.trim; - let libtiff = tiff_lib_path ++ "/libtiff.a"; - - let z_lib_path = Sys.getenv("Z_LIB_PATH") |> String.trim; - let zlib = z_lib_path ++ "/libz.a"; - - C.Flags.write_sexp("png_write_c_flags.sexp", ["-I" ++ spng_include_path]); - C.Flags.write_sexp("png_write_c_library_flags.sexp", [libspng, zlib]); - C.Flags.write_sexp("png_write_flags.sexp", ["-cclib", libspng]); - - C.Flags.write_sexp("png_c_flags.sexp", ["-I" ++ spng_include_path]); - C.Flags.write_sexp("png_c_library_flags.sexp", [libspng, zlib]); - C.Flags.write_sexp("png_flags.sexp", ["-cclib", libspng]); - - C.Flags.write_sexp("jpg_c_flags.sexp", ["-I" ++ jpeg_include_path]); - C.Flags.write_sexp("jpg_c_library_flags.sexp", [libjpeg]); - C.Flags.write_sexp("jpg_flags.sexp", ["-cclib", libjpeg]); - - C.Flags.write_sexp("tiff_c_flags.sexp", ["-I" ++ tiff_include_path]); - C.Flags.write_sexp("tiff_c_library_flags.sexp", [libtiff, zlib]); - C.Flags.write_sexp("tiff_flags.sexp", ["-cclib", libtiff]); -}); diff --git a/io/config/dune b/io/config/dune index d07fdf0f..bc2970ff 100644 --- a/io/config/dune +++ b/io/config/dune @@ -2,4 +2,4 @@ (name discover) (ocamlc_flags str.cma) (ocamlopt_flags str.cmxa) - (libraries dune-configurator)) \ No newline at end of file + (libraries dune-configurator)) diff --git a/io/jpg/Jpg.ml b/io/jpg/Jpg.ml new file mode 100644 index 00000000..73fc3439 --- /dev/null +++ b/io/jpg/Jpg.ml @@ -0,0 +1,28 @@ +open Bigarray + +type data = (int32, int32_elt, c_layout) Array1.t + +module IO = struct + type buffer + type t = { data : data; buffer : buffer } + + let loadImage filename : t Odiff.ImageIO.img = + let width, height, data, buffer = ReadJpg.read_jpeg_image filename in + { width; height; image = { data; buffer } } + + let readDirectPixel ~x ~y (img : t Odiff.ImageIO.img) = + Array1.unsafe_get img.image.data ((y * img.width) + x) + + let setImgColor ~x ~y color (img : t Odiff.ImageIO.img) = + Array1.unsafe_set img.image.data ((y * img.width) + x) color + + let saveImage (img : t Odiff.ImageIO.img) filename = + WritePng.write_png_bigarray filename img.image.data img.width img.height + + let freeImage (img : t Odiff.ImageIO.img) = + ReadJpg.cleanup_jpg img.image.buffer + + let makeSameAsLayout (img : t Odiff.ImageIO.img) = + let data = Array1.create int32 c_layout (Array1.dim img.image.data) in + { img with image = { data; buffer = img.image.buffer } } +end diff --git a/io/jpg/Jpg.mli b/io/jpg/Jpg.mli new file mode 100644 index 00000000..913c029c --- /dev/null +++ b/io/jpg/Jpg.mli @@ -0,0 +1,3 @@ +type data = (int32, Bigarray.int32_elt, Bigarray.c_layout) Bigarray.Array1.t + +module IO : Odiff.ImageIO.ImageIO diff --git a/io/jpg/Jpg.re b/io/jpg/Jpg.re deleted file mode 100644 index 126f53a8..00000000 --- a/io/jpg/Jpg.re +++ /dev/null @@ -1,56 +0,0 @@ -open Bigarray; - -type data = Array1.t(int32, int32_elt, c_layout); - -module IO = { - type buffer; - type t = { - data, - buffer, - }; - - let loadImage = (filename): Odiff.ImageIO.img(t) => { - let (width, height, data, buffer) = ReadJpg.read_jpeg_image(filename); - - { - width, - height, - image: { - data, - buffer, - }, - }; - }; - - let readDirectPixel = (~x, ~y, img: Odiff.ImageIO.img(t)) => { - Array1.unsafe_get(img.image.data, y * img.width + x); - }; - - let setImgColor = (~x, ~y, color, img: Odiff.ImageIO.img(t)) => { - Array1.unsafe_set(img.image.data, y * img.width + x, color); - }; - - let saveImage = (img: Odiff.ImageIO.img(t), filename) => { - WritePng.write_png_bigarray( - filename, - img.image.data, - img.width, - img.height, - ); - }; - - let freeImage = (img: Odiff.ImageIO.img(t)) => { - ReadJpg.cleanup_jpg(img.image.buffer); - }; - - let makeSameAsLayout = (img: Odiff.ImageIO.img(t)) => { - let data = Array1.create(int32, c_layout, Array1.dim(img.image.data)); - { - ...img, - image: { - data, - buffer: img.image.buffer, - }, - }; - }; -}; diff --git a/io/jpg/Jpg.rei b/io/jpg/Jpg.rei deleted file mode 100644 index 256a8d3f..00000000 --- a/io/jpg/Jpg.rei +++ /dev/null @@ -1,3 +0,0 @@ -type data = Bigarray.Array1.t(int32, Bigarray.int32_elt, Bigarray.c_layout); - -module IO: Odiff.ImageIO.ImageIO; diff --git a/io/jpg/ReadJpg.ml b/io/jpg/ReadJpg.ml new file mode 100644 index 00000000..43d7433f --- /dev/null +++ b/io/jpg/ReadJpg.ml @@ -0,0 +1,8 @@ +external read_jpeg_image : + string -> + int + * int + * (int32, Bigarray.int32_elt, Bigarray.c_layout) Bigarray.Array1.t + * 'a = "read_jpeg_file_to_tuple" + +external cleanup_jpg : 'a -> unit = "cleanup_jpg" [@@noalloc] diff --git a/io/jpg/ReadJpg.re b/io/jpg/ReadJpg.re deleted file mode 100644 index 70a645b3..00000000 --- a/io/jpg/ReadJpg.re +++ /dev/null @@ -1,11 +0,0 @@ -external read_jpeg_image: - string => - ( - int, - int, - Bigarray.Array1.t(int32, Bigarray.int32_elt, Bigarray.c_layout), - 'a, - ) = - "read_jpeg_file_to_tuple"; - -[@noalloc] external cleanup_jpg: 'a => unit = "cleanup_jpg"; diff --git a/io/png/Png.ml b/io/png/Png.ml new file mode 100644 index 00000000..b05b9bac --- /dev/null +++ b/io/png/Png.ml @@ -0,0 +1,29 @@ +open Bigarray +open Odiff.ImageIO + +type data = (int32, int32_elt, c_layout) Array1.t + +module IO : Odiff.ImageIO.ImageIO = struct + type t = data + + let readDirectPixel ~(x : int) ~(y : int) (img : t Odiff.ImageIO.img) = + let image : data = img.image in + Array1.unsafe_get image ((y * img.width) + x) + + let setImgColor ~x ~y color (img : t Odiff.ImageIO.img) = + let image : data = img.image in + Array1.unsafe_set image ((y * img.width) + x) color + + let loadImage filename : t Odiff.ImageIO.img = + let width, height, data, _buffer = ReadPng.read_png_image filename in + { width; height; image = data } + + let saveImage (img : t Odiff.ImageIO.img) filename = + WritePng.write_png_bigarray filename img.image img.width img.height + + let freeImage (img : t Odiff.ImageIO.img) = () + + let makeSameAsLayout (img : t Odiff.ImageIO.img) = + let image = Array1.create int32 c_layout (Array1.dim img.image) in + { img with image } +end diff --git a/io/png/Png.re b/io/png/Png.re deleted file mode 100644 index 52395b97..00000000 --- a/io/png/Png.re +++ /dev/null @@ -1,37 +0,0 @@ -open Bigarray; -open Odiff.ImageIO; - -type data = Array1.t(int32, int32_elt, c_layout); - -module IO: Odiff.ImageIO.ImageIO = { - type t = data; - - let readDirectPixel = (~x: int, ~y: int, img: Odiff.ImageIO.img(t)) => { - let image: data = img.image; - Array1.unsafe_get(image, y * img.width + x); - }; - - let setImgColor = (~x, ~y, color, img: Odiff.ImageIO.img(t)) => { - let image: data = img.image; - Array1.unsafe_set(image, y * img.width + x, color); - }; - - let loadImage = (filename): Odiff.ImageIO.img(t) => { - let (width, height, data, _buffer) = ReadPng.read_png_image(filename); - - {width, height, image: data}; - }; - - let saveImage = (img: Odiff.ImageIO.img(t), filename) => { - WritePng.write_png_bigarray(filename, img.image, img.width, img.height); - }; - - let freeImage = (img: Odiff.ImageIO.img(t)) => { - (); - }; - - let makeSameAsLayout = (img: Odiff.ImageIO.img(t)) => { - let image = Array1.create(int32, c_layout, Array1.dim(img.image)); - {...img, image}; - }; -}; diff --git a/io/png/ReadPng.c b/io/png/ReadPng.c index fc509338..661e2922 100644 --- a/io/png/ReadPng.c +++ b/io/png/ReadPng.c @@ -2,15 +2,13 @@ #include -#include #include -#include -#include #include +#include +#include +#include -CAMLprim value -read_png_file(value file) -{ +CAMLprim value read_png_file(value file) { CAMLparam1(file); CAMLlocal2(res, ba); @@ -21,15 +19,13 @@ read_png_file(value file) const char *filename = String_val(file); png = fopen(filename, "rb"); - if (png == NULL) - { + if (png == NULL) { caml_failwith("error opening input file"); } ctx = spng_ctx_new(0); - if (ctx == NULL) - { + if (ctx == NULL) { caml_failwith("spng_ctx_new() failed"); spng_ctx_free(ctx); free(out); @@ -49,8 +45,7 @@ read_png_file(value file) struct spng_ihdr ihdr; result = spng_get_ihdr(ctx, &ihdr); - if (result) - { + if (result) { caml_failwith("spng_get_ihdr() error!"); spng_ctx_free(ctx); free(out); @@ -58,21 +53,18 @@ read_png_file(value file) size_t out_size; result = spng_decoded_image_size(ctx, SPNG_FMT_RGBA8, &out_size); - if (result) - { + if (result) { spng_ctx_free(ctx); }; out = malloc(out_size); - if (out == NULL) - { + if (out == NULL) { spng_ctx_free(ctx); free(out); }; result = spng_decode_image(ctx, out, out_size, SPNG_FMT_RGBA8, 0); - if (result) - { + if (result) { spng_ctx_free(ctx); free(out); caml_failwith(spng_strerror(result)); diff --git a/io/png/ReadPng.ml b/io/png/ReadPng.ml new file mode 100644 index 00000000..fc894c3c --- /dev/null +++ b/io/png/ReadPng.ml @@ -0,0 +1,6 @@ +external read_png_image : + string -> + int + * int + * (int32, Bigarray.int32_elt, Bigarray.c_layout) Bigarray.Array1.t + * 'a = "read_png_file" diff --git a/io/png/ReadPng.re b/io/png/ReadPng.re deleted file mode 100644 index 43a979a7..00000000 --- a/io/png/ReadPng.re +++ /dev/null @@ -1,9 +0,0 @@ -external read_png_image: - string => - ( - int, - int, - Bigarray.Array1.t(int32, Bigarray.int32_elt, Bigarray.c_layout), - 'a, - ) = - "read_png_file"; diff --git a/io/png_write/WritePng.ml b/io/png_write/WritePng.ml new file mode 100644 index 00000000..84a811b8 --- /dev/null +++ b/io/png_write/WritePng.ml @@ -0,0 +1,6 @@ +open Bigarray + +external write_png_bigarray : + string -> (int32, int32_elt, c_layout) Array1.t -> int -> int -> unit + = "write_png_bigarray" +[@@noalloc] diff --git a/io/png_write/WritePng.re b/io/png_write/WritePng.re deleted file mode 100644 index 277c112e..00000000 --- a/io/png_write/WritePng.re +++ /dev/null @@ -1,6 +0,0 @@ -open Bigarray; - -[@noalloc] -external write_png_bigarray: - (string, Array1.t(int32, int32_elt, c_layout), int, int) => unit = - "write_png_bigarray"; diff --git a/io/tiff/ReadTiff.c b/io/tiff/ReadTiff.c index a09577dc..876c5320 100644 --- a/io/tiff/ReadTiff.c +++ b/io/tiff/ReadTiff.c @@ -2,17 +2,15 @@ #include -#include #include -#include -#include #include +#include +#include +#include #include -CAMLprim value -read_tiff_file_to_tuple(value file) -{ +CAMLprim value read_tiff_file_to_tuple(value file) { CAMLparam1(file); CAMLlocal2(res, ba); @@ -23,8 +21,7 @@ read_tiff_file_to_tuple(value file) TIFF *image; - if (!(image = TIFFOpen(filename, "r"))) - { + if (!(image = TIFFOpen(filename, "r"))) { caml_failwith("opening input file failed!"); } @@ -34,20 +31,20 @@ read_tiff_file_to_tuple(value file) int buffer_size = width * height; buffer = (uint32_t *)malloc(buffer_size * 4); - if (!buffer) - { + if (!buffer) { TIFFClose(image); caml_failwith("allocating TIFF buffer failed"); } - if (!(TIFFReadRGBAImageOriented(image, width, height, buffer, ORIENTATION_TOPLEFT, 0))) - { + if (!(TIFFReadRGBAImageOriented(image, width, height, buffer, + ORIENTATION_TOPLEFT, 0))) { TIFFClose(image); caml_failwith("reading input file failed"); } res = caml_alloc(4, 0); - ba = caml_ba_alloc_dims(CAML_BA_INT32 | CAML_BA_C_LAYOUT, 1, buffer, buffer_size); + ba = caml_ba_alloc_dims(CAML_BA_INT32 | CAML_BA_C_LAYOUT, 1, buffer, + buffer_size); Store_field(res, 0, Val_int(width)); Store_field(res, 1, Val_int(height)); @@ -59,9 +56,7 @@ read_tiff_file_to_tuple(value file) CAMLreturn(res); } -CAMLprim value -cleanup_tiff(value buffer) -{ +CAMLprim value cleanup_tiff(value buffer) { CAMLparam1(buffer); free(Bp_val(buffer)); CAMLreturn(Val_unit); diff --git a/io/tiff/ReadTiff.ml b/io/tiff/ReadTiff.ml new file mode 100644 index 00000000..cf2a8fa4 --- /dev/null +++ b/io/tiff/ReadTiff.ml @@ -0,0 +1,8 @@ +external load : + string -> + int + * int + * (int32, Bigarray.int32_elt, Bigarray.c_layout) Bigarray.Array1.t + * 'a = "read_tiff_file_to_tuple" + +external cleanup_tiff : 'a -> unit = "cleanup_tiff" [@@noalloc] diff --git a/io/tiff/ReadTiff.re b/io/tiff/ReadTiff.re deleted file mode 100644 index 02a8650d..00000000 --- a/io/tiff/ReadTiff.re +++ /dev/null @@ -1,11 +0,0 @@ -external load: - string => - ( - int, - int, - Bigarray.Array1.t(int32, Bigarray.int32_elt, Bigarray.c_layout), - 'a, - ) = - "read_tiff_file_to_tuple"; - -[@noalloc] external cleanup_tiff: 'a => unit = "cleanup_tiff"; diff --git a/io/tiff/Tiff.ml b/io/tiff/Tiff.ml new file mode 100644 index 00000000..1a6cb962 --- /dev/null +++ b/io/tiff/Tiff.ml @@ -0,0 +1,28 @@ +open Bigarray + +type data = (int32, int32_elt, c_layout) Array1.t + +module IO : Odiff.ImageIO.ImageIO = struct + type buffer + type t = { data : data; buffer : buffer } + + let loadImage filename : t Odiff.ImageIO.img = + let width, height, data, buffer = ReadTiff.load filename in + { width; height; image = { data; buffer } } + + let readDirectPixel ~(x : int) ~(y : int) (img : t Odiff.ImageIO.img) = + Array1.unsafe_get img.image.data ((y * img.width) + x) + + let setImgColor ~x ~y color (img : t Odiff.ImageIO.img) = + Array1.unsafe_set img.image.data ((y * img.width) + x) color + + let saveImage (img : t Odiff.ImageIO.img) filename = + WritePng.write_png_bigarray filename img.image.data img.width img.height + + let freeImage (img : t Odiff.ImageIO.img) = + ReadTiff.cleanup_tiff img.image.buffer + + let makeSameAsLayout (img : t Odiff.ImageIO.img) = + let data = Array1.create int32 c_layout (Array1.dim img.image.data) in + { img with image = { data; buffer = img.image.buffer } } +end diff --git a/io/tiff/Tiff.mli b/io/tiff/Tiff.mli new file mode 100644 index 00000000..913c029c --- /dev/null +++ b/io/tiff/Tiff.mli @@ -0,0 +1,3 @@ +type data = (int32, Bigarray.int32_elt, Bigarray.c_layout) Bigarray.Array1.t + +module IO : Odiff.ImageIO.ImageIO diff --git a/io/tiff/Tiff.re b/io/tiff/Tiff.re deleted file mode 100644 index d4f29dbe..00000000 --- a/io/tiff/Tiff.re +++ /dev/null @@ -1,56 +0,0 @@ -open Bigarray; - -type data = Array1.t(int32, int32_elt, c_layout); - -module IO: Odiff.ImageIO.ImageIO = { - type buffer; - type t = { - data, - buffer, - }; - - let loadImage = (filename): Odiff.ImageIO.img(t) => { - let (width, height, data, buffer) = ReadTiff.load(filename); - - { - width, - height, - image: { - data, - buffer, - }, - }; - }; - - let readDirectPixel = (~x: int, ~y: int, img: Odiff.ImageIO.img(t)) => { - Array1.unsafe_get(img.image.data, y * img.width + x); - }; - - let setImgColor = (~x, ~y, color, img: Odiff.ImageIO.img(t)) => { - Array1.unsafe_set(img.image.data, y * img.width + x, color); - }; - - let saveImage = (img: Odiff.ImageIO.img(t), filename) => { - WritePng.write_png_bigarray( - filename, - img.image.data, - img.width, - img.height, - ); - }; - - let freeImage = (img: Odiff.ImageIO.img(t)) => { - ReadTiff.cleanup_tiff(img.image.buffer); - }; - - let makeSameAsLayout = (img: Odiff.ImageIO.img(t)) => { - let data = Array1.create(int32, c_layout, Array1.dim(img.image.data)); - { - ...img, - image: { - data, - buffer: img.image.buffer, - }, - }; - }; -}; diff --git a/io/tiff/Tiff.rei b/io/tiff/Tiff.rei deleted file mode 100644 index 256a8d3f..00000000 --- a/io/tiff/Tiff.rei +++ /dev/null @@ -1,3 +0,0 @@ -type data = Bigarray.Array1.t(int32, Bigarray.int32_elt, Bigarray.c_layout); - -module IO: Odiff.ImageIO.ImageIO; diff --git a/package.json b/package.json index d6f18bb0..057aeb93 100644 --- a/package.json +++ b/package.json @@ -29,16 +29,16 @@ "process:readme": "esy node scripts/process-readme.js" }, "dependencies": { - "@opam/reason": "3.9.0", "@opam/cmdliner": "1.0.4", "@opam/dune": "< 4.0.0", "@opam/dune-configurator": "< 4.0.0", + "@opam/reason": "3.9.0", "@reason-native/console": "*", "@reason-native/pastel": "*", "@reason-native/rely": "*", - "esy-libtiff": "*", - "esy-libspng": "*", "esy-libjpeg": "*", + "esy-libspng": "*", + "esy-libtiff": "*", "esy-zlib": "*", "ocaml": "4.14.x" }, @@ -75,3 +75,4 @@ "url": "https://dmtrkovalenko.dev" } } + diff --git a/src/Antialiasing.ml b/src/Antialiasing.ml new file mode 100644 index 00000000..241cf505 --- /dev/null +++ b/src/Antialiasing.ml @@ -0,0 +1,89 @@ +open ImageIO + +module MakeAntialiasing (IO1 : ImageIO.ImageIO) (IO2 : ImageIO.ImageIO) = struct + let hasManySiblingsWithSameColor ~x ~y ~width ~height ~readColor = + if x <= width - 1 && y <= height - 1 then ( + let x0 = max (x - 1) 0 in + let y0 = max (y - 1) 0 in + let x1 = min (x + 1) (width - 1) in + let y1 = min (y + 1) (height - 1) in + let zeroes = + match x = x0 || x = x1 || y = y0 || y = y1 with + | true -> ref 1 + | false -> ref 0 + in + let baseColor = readColor ~x ~y in + for adj_y = y0 to y1 do + for adj_x = x0 to x1 do + if !zeroes < 3 && (x <> adj_x || y <> adj_y) then + let adjacentColor = readColor ~x:adj_x ~y:adj_y in + if baseColor = adjacentColor then incr zeroes + done + done; + !zeroes >= 3) + else false + + let detect ~x ~y ~baseImg ~compImg = + let x0 = max (x - 1) 0 in + let y0 = max (y - 1) 0 in + let x1 = min (x + 1) (baseImg.width - 1) in + let y1 = min (y + 1) (baseImg.height - 1) in + let minSiblingDelta = ref 0.0 in + let maxSiblingDelta = ref 0.0 in + let minSiblingDeltaCoord = ref (0, 0) in + let maxSiblingDeltaCoord = ref (0, 0) in + let zeroes = + ref + (match x = x0 || x = x1 || y = y0 || y = y1 with + | true -> 1 + | false -> 0) + in + + let baseColor = baseImg |> IO1.readDirectPixel ~x ~y in + for adj_y = y0 to y1 do + for adj_x = x0 to x1 do + if !zeroes < 3 && (x <> adj_x || y <> adj_y) then + let adjacentColor = + baseImg |> IO1.readDirectPixel ~x:adj_x ~y:adj_y + in + if baseColor = adjacentColor then incr zeroes + else + let delta = + ColorDelta.calculatePixelBrightnessDelta baseColor adjacentColor + in + if delta < !minSiblingDelta then ( + minSiblingDelta := delta; + minSiblingDeltaCoord := (adj_x, adj_y)) + else if delta > !maxSiblingDelta then ( + maxSiblingDelta := delta; + maxSiblingDeltaCoord := (adj_x, adj_y)) + done + done; + + if !zeroes >= 3 || !minSiblingDelta = 0.0 || !maxSiblingDelta = 0.0 then + (* + If we found more than 2 equal siblings or there are + no darker pixels among other siblings or + there are not brighter pixels among the siblings + *) + false + else + (* + If either the darkest or the brightest pixel has 3+ equal siblings in both images + (definitely not anti-aliased), this pixel is anti-aliased + *) + let minX, minY = !minSiblingDeltaCoord in + let maxX, maxY = !maxSiblingDeltaCoord in + (hasManySiblingsWithSameColor ~x:minX ~y:minY ~width:baseImg.width + ~height:baseImg.height + ~readColor:(IO1.readDirectPixel baseImg) + || hasManySiblingsWithSameColor ~x:maxX ~y:maxY ~width:baseImg.width + ~height:baseImg.height + ~readColor:(IO1.readDirectPixel baseImg)) + && (hasManySiblingsWithSameColor ~x:minX ~y:minY ~width:compImg.width + ~height:compImg.height + ~readColor:(IO2.readDirectPixel compImg) + || hasManySiblingsWithSameColor ~x:maxX ~y:maxY ~width:compImg.width + ~height:compImg.height + ~readColor:(IO2.readDirectPixel compImg)) +end diff --git a/src/Antialiasing.re b/src/Antialiasing.re deleted file mode 100644 index 432be68a..00000000 --- a/src/Antialiasing.re +++ /dev/null @@ -1,124 +0,0 @@ -open ImageIO; - -module MakeAntialiasing = (IO1: ImageIO.ImageIO, IO2: ImageIO.ImageIO) => { - let hasManySiblingsWithSameColor = (~x, ~y, ~width, ~height, ~readColor) => - if (x <= width - 1 && y <= height - 1) { - let x0 = max(x - 1, 0); - let y0 = max(y - 1, 0); - - let x1 = min(x + 1, width - 1); - let y1 = min(y + 1, height - 1); - - let zeroes = - x == x0 || x == x1 || y == y0 || y == y1 ? ref(1) : ref(0); - - let baseColor = readColor(~x, ~y); - - // go through 8 adjacent pixels - for (adj_y in y0 to y1) { - for (adj_x in x0 to x1) { - /* This is not the current pixel and we don't have our result */ - if (zeroes^ < 3 && (x != adj_x || y != adj_y)) { - let adjacentColor = readColor(~x=adj_x, ~y=adj_y); - if (baseColor == adjacentColor) { - incr(zeroes); - }; - }; - }; - }; - - zeroes^ >= 3; - } else { - false; - }; - - let detect = (~x, ~y, ~baseImg, ~compImg) => { - let x0 = max(x - 1, 0); - let y0 = max(y - 1, 0); - - let x1 = min(x + 1, baseImg.width - 1); - let y1 = min(y + 1, baseImg.height - 1); - - let minSiblingDelta = ref(0.0); - let maxSiblingDelta = ref(0.0); - - let minSiblingDeltaCoord = ref((0, 0)); - let maxSiblingDeltaCoord = ref((0, 0)); - - let zeroes = ref(x == x0 || x == x1 || y == y0 || y == y1 ? 1 : 0); - - let baseColor = baseImg |> IO1.readDirectPixel(~x, ~y); - - for (adj_y in y0 to y1) { - for (adj_x in x0 to x1) { - /* This is not the current pixel and we don't have our result */ - if (zeroes^ < 3 && (x != adj_x || y != adj_y)) { - let adjacentColor = - baseImg |> IO1.readDirectPixel(~x=adj_x, ~y=adj_y); - - if (baseColor == adjacentColor) { - incr(zeroes); - } else { - let delta = - ColorDelta.calculatePixelBrightnessDelta( - baseColor, - adjacentColor, - ); - - if (delta < minSiblingDelta^) { - minSiblingDelta := delta; - minSiblingDeltaCoord := (adj_x, adj_y); - } else if (delta > maxSiblingDelta^) { - maxSiblingDelta := delta; - maxSiblingDeltaCoord := (adj_x, adj_y); - }; - }; - }; - }; - }; - - // if we found more than 2 equal siblings or - // there are no darker pixels among the siblings or - // there are no brighter pixels among the siblings it's not anti-aliasing - if (zeroes^ >= 3 || minSiblingDelta^ == 0.0 || maxSiblingDelta^ == 0.0) { - false; - } else { - // if either the darkest or the brightest pixel has 3+ equal siblings in both images - // (definitely not anti-aliased), this pixel is anti-aliased - let (minX, minY) = minSiblingDeltaCoord^; - let (maxX, maxY) = maxSiblingDeltaCoord^; - ( - hasManySiblingsWithSameColor( - ~x=minX, - ~y=minY, - ~width=baseImg.width, - ~height=baseImg.height, - ~readColor=IO1.readDirectPixel(baseImg), - ) - || hasManySiblingsWithSameColor( - ~x=maxX, - ~y=maxY, - ~width=baseImg.width, - ~height=baseImg.height, - ~readColor=IO1.readDirectPixel(baseImg), - ) - ) - && ( - hasManySiblingsWithSameColor( - ~x=minX, - ~y=minY, - ~width=compImg.width, - ~height=compImg.height, - ~readColor=IO2.readDirectPixel(compImg), - ) - || hasManySiblingsWithSameColor( - ~x=maxX, - ~y=maxY, - ~width=compImg.width, - ~height=compImg.height, - ~readColor=IO2.readDirectPixel(compImg), - ) - ); - }; - }; -}; diff --git a/src/ColorDelta.ml b/src/ColorDelta.ml new file mode 100644 index 00000000..3482982c --- /dev/null +++ b/src/ColorDelta.ml @@ -0,0 +1,36 @@ +let blend color alpha = 255. +. ((color -. 255.) *. alpha) + +let blendSemiTransparentColor = function + | r, g, b, alpha when alpha < 255. -> + (blend r alpha, blend g alpha, blend b alpha, alpha /. 255.) + | colors -> colors + +let convertPixelToFloat pixel = + let pixel = pixel |> Int32.to_int in + let a = (pixel lsr 24) land 255 in + let b = (pixel lsr 16) land 255 in + let g = (pixel lsr 8) land 255 in + let r = pixel land 255 in + (Float.of_int r, Float.of_int g, Float.of_int b, Float.of_int a) + +let rgb2y (r, g, b, a) = + (r *. 0.29889531) +. (g *. 0.58662247) +. (b *. 0.11448223) + +let rgb2i (r, g, b, a) = + (r *. 0.59597799) -. (g *. 0.27417610) -. (b *. 0.32180189) + +let rgb2q (r, g, b, a) = + (r *. 0.21147017) -. (g *. 0.52261711) +. (b *. 0.31114694) + +let calculatePixelColorDelta _pixelA _pixelB = + let pixelA = _pixelA |> convertPixelToFloat |> blendSemiTransparentColor in + let pixelB = _pixelB |> convertPixelToFloat |> blendSemiTransparentColor in + let y = rgb2y pixelA -. rgb2y pixelB in + let i = rgb2i pixelA -. rgb2i pixelB in + let q = rgb2q pixelA -. rgb2q pixelB in + (0.5053 *. y *. y) +. (0.299 *. i *. i) +. (0.1957 *. q *. q) + +let calculatePixelBrightnessDelta pixelA pixelB = + let pixelA = pixelA |> convertPixelToFloat |> blendSemiTransparentColor in + let pixelB = pixelB |> convertPixelToFloat |> blendSemiTransparentColor in + rgb2y pixelA -. rgb2y pixelB diff --git a/src/ColorDelta.re b/src/ColorDelta.re deleted file mode 100644 index 9a8b94f5..00000000 --- a/src/ColorDelta.re +++ /dev/null @@ -1,48 +0,0 @@ -let blend = (color, alpha) => 255. +. (color -. 255.) *. alpha; - -let blendSemiTransparentColor = - fun - | (r, g, b, alpha) when alpha < 255. => ( - blend(r, alpha), - blend(g, alpha), - blend(b, alpha), - alpha /. 255., - ) - | colors => colors; - -let convertPixelToFloat = pixel => { - let pixel = pixel |> Int32.to_int; - let a = pixel lsr 24 land 0xFF; - let b = pixel lsr 16 land 0xFF; - let g = pixel lsr 8 land 0xFF; - let r = pixel land 0xFF; - - (Float.of_int(r), Float.of_int(g), Float.of_int(b), Float.of_int(a)); -}; - -let rgb2y = ((r, g, b, a)) => - r *. 0.29889531 +. g *. 0.58662247 +. b *. 0.11448223; - -let rgb2i = ((r, g, b, a)) => - r *. 0.59597799 -. g *. 0.27417610 -. b *. 0.32180189; - -let rgb2q = ((r, g, b, a)) => - r *. 0.21147017 -. g *. 0.52261711 +. b *. 0.31114694; - -let calculatePixelColorDelta = (_pixelA, _pixelB) => { - let pixelA = _pixelA |> convertPixelToFloat |> blendSemiTransparentColor; - let pixelB = _pixelB |> convertPixelToFloat |> blendSemiTransparentColor; - - let y = rgb2y(pixelA) -. rgb2y(pixelB); - let i = rgb2i(pixelA) -. rgb2i(pixelB); - let q = rgb2q(pixelA) -. rgb2q(pixelB); - - 0.5053 *. y *. y +. 0.299 *. i *. i +. 0.1957 *. q *. q; -}; - -let calculatePixelBrightnessDelta = (pixelA, pixelB) => { - let pixelA = pixelA |> convertPixelToFloat |> blendSemiTransparentColor; - let pixelB = pixelB |> convertPixelToFloat |> blendSemiTransparentColor; - - rgb2y(pixelA) -. rgb2y(pixelB); -}; diff --git a/src/Diff.ml b/src/Diff.ml new file mode 100644 index 00000000..b450deb3 --- /dev/null +++ b/src/Diff.ml @@ -0,0 +1,107 @@ +let redPixel = (255, 0, 0) +let maxYIQPossibleDelta = 35215. + +type 'a diffVariant = Layout | Pixel of ('a * int * float * int Stack.t) + +let computeIgnoreRegionOffsets width = + List.map (fun ((x1, y1), (x2, y2)) -> + let p1 = (y1 * width) + x1 in + let p2 = (y2 * width) + x2 in + (p1, p2)) + +let isInIgnoreRegion offset = + List.exists (fun ((p1 : int), (p2 : int)) -> offset >= p1 && offset <= p2) + +module MakeDiff (IO1 : ImageIO.ImageIO) (IO2 : ImageIO.ImageIO) = struct + module BaseAA = Antialiasing.MakeAntialiasing (IO1) (IO2) + module CompAA = Antialiasing.MakeAntialiasing (IO2) (IO1) + + let compare (base : IO1.t ImageIO.img) (comp : IO2.t ImageIO.img) + ?(antialiasing = false) ?(outputDiffMask = false) ?(diffLines = false) + ?(diffPixel : int * int * int = redPixel) ?(threshold = 0.1) + ?(ignoreRegions = []) () = + let maxDelta = maxYIQPossibleDelta *. (threshold ** 2.) in + let diffOutput = + match outputDiffMask with + | true -> IO1.makeSameAsLayout base + | false -> base + in + let diffPixelQueue = Queue.create () in + let diffLinesStack = Stack.create () in + let countDifference x y = + diffPixelQueue |> Queue.push (x, y); + if + diffLines + && (diffLinesStack |> Stack.is_empty || diffLinesStack |> Stack.top < y) + then diffLinesStack |> Stack.push y + in + + let ignoreRegions = + ignoreRegions |> computeIgnoreRegionOffsets base.width + in + + let size = (base.height * base.width) - 1 in + let x = ref 0 in + let y = ref 0 in + + for offset = 0 to size do + (if !x >= comp.width || !y >= comp.height then ( + let alpha = + (Int32.to_int (IO1.readDirectPixel ~x:!x ~y:!y base) lsr 24) land 255 + in + if alpha <> 0 then countDifference !x !y) + else + let baseColor = IO1.readDirectPixel ~x:!x ~y:!y base in + let compColor = IO2.readDirectPixel ~x:!x ~y:!y comp in + if baseColor <> compColor then + let delta = + ColorDelta.calculatePixelColorDelta baseColor compColor + in + if delta > maxDelta then + let isIgnored = isInIgnoreRegion offset ignoreRegions in + if not isIgnored then + let isAntialiased = + if not antialiasing then false + else + BaseAA.detect ~x:!x ~y:!y ~baseImg:base ~compImg:comp + || CompAA.detect ~x:!x ~y:!y ~baseImg:comp ~compImg:base + in + if not isAntialiased then countDifference !x !y); + if !x = base.width - 1 then ( + x := 0; + incr y) + else incr x + done; + + let diffCount = diffPixelQueue |> Queue.length in + (if diffCount > 0 then + let r, g, b = diffPixel in + let a = (255 land 255) lsl 24 in + let b = (b land 255) lsl 16 in + let g = (g land 255) lsl 8 in + let r = (r land 255) lsl 0 in + let diffPixel = Int32.of_int (a lor b lor g lor r) in + diffPixelQueue + |> Queue.iter (fun (x, y) -> + diffOutput |> IO1.setImgColor ~x ~y diffPixel)); + + let diffPercentage = + 100.0 *. Float.of_int diffCount + /. (Float.of_int base.width *. Float.of_int base.height) + in + (diffOutput, diffCount, diffPercentage, diffLinesStack) + + let diff (base : IO1.t ImageIO.img) (comp : IO2.t ImageIO.img) ~outputDiffMask + ?(threshold = 0.1) ?(diffPixel = redPixel) ?(failOnLayoutChange = true) + ?(antialiasing = false) ?(diffLines = false) ?(ignoreRegions = []) () = + if + failOnLayoutChange = true + && (base.width <> comp.width || base.height <> comp.height) + then Layout + else + let diffResult = + compare base comp ~threshold ~diffPixel ~outputDiffMask ~antialiasing + ~diffLines ~ignoreRegions () + in + (Pixel diffResult [@explicit_arity]) +end diff --git a/src/Diff.re b/src/Diff.re deleted file mode 100644 index c8ec74a7..00000000 --- a/src/Diff.re +++ /dev/null @@ -1,159 +0,0 @@ -let redPixel = (255, 0, 0); -let maxYIQPossibleDelta = 35215.; - -type diffVariant('a) = - | Layout - | Pixel(('a, int, float, Stack.t(int))); - -let computeIngoreRegionOffsets = width => { - List.map((((x1, y1), (x2, y2))) => { - let p1 = y1 * width + x1; - let p2 = y2 * width + x2; - (p1, p2); - }); -}; - -let isInIgnoreRegion = offset => { - List.exists(((p1: int, p2: int)) => offset >= p1 && offset <= p2); -}; - -module MakeDiff = (IO1: ImageIO.ImageIO, IO2: ImageIO.ImageIO) => { - module BaseAA = Antialiasing.MakeAntialiasing(IO1, IO2); - module CompAA = Antialiasing.MakeAntialiasing(IO2, IO1); - - let compare = - ( - base: ImageIO.img(IO1.t), - comp: ImageIO.img(IO2.t), - ~antialiasing=false, - ~outputDiffMask=false, - ~diffLines=false, - ~diffPixel: (int, int, int)=redPixel, - ~threshold=0.1, - ~ignoreRegions=[], - (), - ) => { - let maxDelta = maxYIQPossibleDelta *. threshold ** 2.; - let diffOutput = outputDiffMask ? IO1.makeSameAsLayout(base) : base; - - let diffPixelQueue = Queue.create(); - let diffLinesStack = Stack.create(); - - let countDifference = (x, y) => { - diffPixelQueue |> Queue.push((x, y)); - - if (diffLines && (diffLinesStack |> Stack.is_empty || diffLinesStack |> Stack.top < y)) { - diffLinesStack |> Stack.push(y); - } - }; - - let ignoreRegions = - ignoreRegions |> computeIngoreRegionOffsets(base.width); - - let size = base.height * base.width - 1; - - let x = ref(0); - let y = ref(0); - - for (offset in 0 to size) { - if (x^ >= comp.width || y^ >= comp.height) { - let alpha = - Int32.to_int(IO1.readDirectPixel(~x=x^, ~y=y^, base)) - lsr 24 - land 0xFF; - - if (alpha != 0) { - countDifference(x^, y^); - }; - } else { - let baseColor = IO1.readDirectPixel(~x=x^, ~y=y^, base); - let compColor = IO2.readDirectPixel(~x=x^, ~y=y^, comp); - - if (baseColor != compColor) { - let delta = - ColorDelta.calculatePixelColorDelta(baseColor, compColor); - - if (delta > maxDelta) { - let isIgnored = isInIgnoreRegion(offset, ignoreRegions); - - if (!isIgnored) { - let isAntialiased = - if (!antialiasing) { - false; - } else { - BaseAA.detect(~x=x^, ~y=y^, ~baseImg=base, ~compImg=comp) - || CompAA.detect(~x=x^, ~y=y^, ~baseImg=comp, ~compImg=base); - }; - - if (!isAntialiased) { - countDifference(x^, y^); - }; - }; - }; - }; - }; - if (x^ == base.width - 1) { - x := 0; - incr(y); - } else { - incr(x); - }; - }; - - let diffCount = diffPixelQueue |> Queue.length; - - if (diffCount > 0) { - let (r, g, b) = diffPixel; - let a = (255 land 0xFF) lsl 24; - let b = (b land 0xFF) lsl 16; - let g = (g land 0xFF) lsl 8; - let r = (r land 0xFF) lsl 0; - let diffPixel = Int32.of_int(a lor b lor g lor r); - - diffPixelQueue - |> Queue.iter(((x, y)) => { - diffOutput |> IO1.setImgColor(~x, ~y, diffPixel) - }); - }; - - let diffPercentage = - 100.0 - *. Float.of_int(diffCount) - /. (Float.of_int(base.width) *. Float.of_int(base.height)); - - (diffOutput, diffCount, diffPercentage, diffLinesStack); - }; - - let diff = - ( - base: ImageIO.img(IO1.t), - comp: ImageIO.img(IO2.t), - ~outputDiffMask, - ~threshold=0.1, - ~diffPixel=redPixel, - ~failOnLayoutChange=true, - ~antialiasing=false, - ~diffLines=false, - ~ignoreRegions=[], - (), - ) => - if (failOnLayoutChange == true - && (base.width != comp.width || base.height != comp.height)) { - Layout; - } else { - let diffResult = - compare( - base, - comp, - ~threshold, - ~diffPixel, - ~outputDiffMask, - ~antialiasing, - ~diffLines, - ~ignoreRegions, - (), - ); - - Pixel(diffResult); - }; -}; diff --git a/src/ImageIO.ml b/src/ImageIO.ml new file mode 100644 index 00000000..38b52a33 --- /dev/null +++ b/src/ImageIO.ml @@ -0,0 +1,14 @@ +type 'a img = { width : int; height : int; image : 'a } + +exception ImageNotLoaded + +module type ImageIO = sig + type t + + val loadImage : string -> t img + val makeSameAsLayout : t img -> t img + val readDirectPixel : x:int -> y:int -> t img -> Int32.t + val setImgColor : x:int -> y:int -> Int32.t -> t img -> unit + val saveImage : t img -> string -> unit + val freeImage : t img -> unit +end diff --git a/src/ImageIO.re b/src/ImageIO.re deleted file mode 100644 index 62ae1aa6..00000000 --- a/src/ImageIO.re +++ /dev/null @@ -1,18 +0,0 @@ -type img('a) = { - width: int, - height: int, - image: 'a, -}; - -exception ImageNotLoaded; - -module type ImageIO = { - type t; - - let loadImage: string => img(t); - let makeSameAsLayout: img(t) => img(t); - let readDirectPixel: (~x: int, ~y: int, img(t)) => Int32.t; - let setImgColor: (~x: int, ~y: int, Int32.t, img(t)) => unit; - let saveImage: (img(t), string) => unit; - let freeImage: img(t) => unit; -}; diff --git a/src/PerfTest.ml b/src/PerfTest.ml new file mode 100644 index 00000000..581931c5 --- /dev/null +++ b/src/PerfTest.ml @@ -0,0 +1,11 @@ +let now (name : string) = (name, ref (Sys.time ())) + +let cycle (name, timepoint) ?(cycleName = "") () = + Printf.printf "'%s %s' executed for: %f ms \n" name cycleName + ((Sys.time () -. !timepoint) *. 1000.); + timepoint := Sys.time () + +let ifTimeMore amount (name, timepoint) = + (Sys.time () -. timepoint) *. 1000. > amount + +let cycleIf point predicate = if predicate point then cycle point () diff --git a/src/PerfTest.re b/src/PerfTest.re deleted file mode 100644 index 06fbd3d7..00000000 --- a/src/PerfTest.re +++ /dev/null @@ -1,21 +0,0 @@ -let now = (name: string) => (name, ref(Unix.gettimeofday())); - -let cycle = ((name, timepoint), ~cycleName="", ()) => { - Printf.printf( - "'%s %s' executed for: %f ms \n", - name, - cycleName, - (Unix.gettimeofday() -. timepoint^) *. 1000., - ); - - timepoint := Unix.gettimeofday() -}; - -let ifTimeMore = (amount, (name, timepoint)) => { - (Unix.gettimeofday() -. timepoint) *. 1000. > amount; -}; - -let cycleIf = (point, predicate) => - if (predicate(point)) { - cycle(point, ()); - }; \ No newline at end of file diff --git a/src/dune b/src/dune index a6336b7a..190fb24b 100644 --- a/src/dune +++ b/src/dune @@ -2,5 +2,4 @@ (name odiff) (public_name odiff-core) (flags - (-w -40 -w +26)) - ) + (-w -40 -w +26))) diff --git a/test/RunTests.ml b/test/RunTests.ml new file mode 100644 index 00000000..70c218cc --- /dev/null +++ b/test/RunTests.ml @@ -0,0 +1 @@ +OdiffTests.TestFramework.cli () diff --git a/test/RunTests.re b/test/RunTests.re deleted file mode 100644 index f10dc787..00000000 --- a/test/RunTests.re +++ /dev/null @@ -1 +0,0 @@ -OdiffTests.TestFramework.cli() \ No newline at end of file diff --git a/test/TestFramework.ml b/test/TestFramework.ml new file mode 100644 index 00000000..42715b50 --- /dev/null +++ b/test/TestFramework.ml @@ -0,0 +1,5 @@ +include Rely.Make (struct + let config = + Rely.TestFrameworkConfig.initialize + { snapshotDir = "test/__snapshots__"; projectDir = "." } +end) diff --git a/test/TestFramework.re b/test/TestFramework.re deleted file mode 100644 index e046fa79..00000000 --- a/test/TestFramework.re +++ /dev/null @@ -1,7 +0,0 @@ -include Rely.Make({ - let config = - Rely.TestFrameworkConfig.initialize({ - snapshotDir: "test/__snapshots__", - projectDir: "." - }); -}); \ No newline at end of file diff --git a/test/Test_Core.ml b/test/Test_Core.ml new file mode 100644 index 00000000..f58fca21 --- /dev/null +++ b/test/Test_Core.ml @@ -0,0 +1,82 @@ +open TestFramework +open ODiffIO +module PNG_Diff = Odiff.Diff.MakeDiff (Png.IO) (Png.IO) + +let _ = + describe "CORE: Antialiasing" (fun { test; _ } -> + let open Png.IO in + test "does not count anti-aliased pixels as different" + (fun { expect; _ } -> + let img1 = loadImage "test/test-images/aa/antialiasing-on.png" in + let img2 = loadImage "test/test-images/aa/antialiasing-off.png" in + let _, diffPixels, diffPercentage, _ = + PNG_Diff.compare img1 img2 ~outputDiffMask:false ~antialiasing:true + () + in + (expect.int diffPixels).toBe 38; + (expect.float diffPercentage).toBeCloseTo 0.095); + test "tests different sized AA images" (fun { expect; _ } -> + let img1 = loadImage "test/test-images/aa/antialiasing-on.png" in + let img2 = + loadImage "test/test-images/aa/antialiasing-off-small.png" + in + let _, diffPixels, diffPercentage, _ = + PNG_Diff.compare img1 img2 ~outputDiffMask:true ~antialiasing:true + () + in + (expect.int diffPixels).toBe 417; + (expect.float diffPercentage).toBeCloseTo 1.04)) + +let _ = + describe "CORE: Threshold" (fun { test; _ } -> + test "uses provided threshold" (fun { expect; _ } -> + let img1 = Png.IO.loadImage "test/test-images/png/orange.png" in + let img2 = + Png.IO.loadImage "test/test-images/png/orange_changed.png" + in + let _, diffPixels, diffPercentage, _ = + PNG_Diff.compare img1 img2 ~threshold:0.5 () + in + (expect.int diffPixels).toBe 222; + (expect.float diffPercentage).toBeCloseTo 0.19)) + +let _ = + describe "CORE: Ignore Regions" (fun { test; _ } -> + test "uses provided irgnore regions" (fun { expect; _ } -> + let img1 = Png.IO.loadImage "test/test-images/png/orange.png" in + let img2 = + Png.IO.loadImage "test/test-images/png/orange_changed.png" + in + let _diffOutput, diffPixels, diffPercentage, _ = + PNG_Diff.compare img1 img2 + ~ignoreRegions: + [ ((150, 30), (310, 105)); ((20, 175), (105, 200)) ] + () + in + (expect.int diffPixels).toBe 0; + (expect.float diffPercentage).toBeCloseTo 0.0)) + +let _ = + describe "CORE: Diff Color" (fun { test; _ } -> + test "creates diff output image with custom diff color" + (fun { expect; _ } -> + let img1 = Png.IO.loadImage "test/test-images/png/orange.png" in + let img2 = + Png.IO.loadImage "test/test-images/png/orange_changed.png" + in + let diffOutput, _, _, _ = + PNG_Diff.compare img1 img2 ~diffPixel:(0, 255, 0) () + in + let originalDiff = + Png.IO.loadImage "test/test-images/png/orange_diff_green.png" + in + let diffMaskOfDiff, diffOfDiffPixels, diffOfDiffPercentage, _ = + PNG_Diff.compare originalDiff diffOutput () + in + if diffOfDiffPixels > 0 then ( + Png.IO.saveImage diffOutput + "test/test-images/png/diff-output-green.png"; + Png.IO.saveImage diffMaskOfDiff + "test/test-images/png/diff-of-diff-green.png"); + (expect.int diffOfDiffPixels).toBe 0; + (expect.float diffOfDiffPercentage).toBeCloseTo 0.0)) diff --git a/test/Test_Core.re b/test/Test_Core.re deleted file mode 100644 index 538dfdab..00000000 --- a/test/Test_Core.re +++ /dev/null @@ -1,104 +0,0 @@ -open TestFramework; -open ODiffIO; - -module PNG_Diff = Odiff.Diff.MakeDiff(Png.IO, Png.IO); - -describe("CORE: Antialiasing", ({test, _}) => { - open Png.IO; - - test("does not count anti-aliased pixels as different", ({expect, _}) => { - let img1 = loadImage("test/test-images/aa/antialiasing-on.png"); - let img2 = loadImage("test/test-images/aa/antialiasing-off.png"); - - let (_, diffPixels, diffPercentage, _) = - PNG_Diff.compare( - img1, - img2, - ~outputDiffMask=false, - ~antialiasing=true, - (), - ); - - expect.int(diffPixels).toBe(38); - expect.float(diffPercentage).toBeCloseTo(0.095); - }); - - test("tests diffrent sized AA images", ({expect, _}) => { - let img1 = loadImage("test/test-images/aa/antialiasing-on.png"); - let img2 = loadImage("test/test-images/aa/antialiasing-off-small.png"); - - let (_, diffPixels, diffPercentage, _) = - PNG_Diff.compare( - img1, - img2, - ~outputDiffMask=true, - ~antialiasing=true, - (), - ); - - expect.int(diffPixels).toBe(417); - expect.float(diffPercentage).toBeCloseTo(1.04); - }); -}); - -describe("CORE: Threshold", ({test, _}) => { - test("uses provided threshold", ({expect, _}) => { - let img1 = Png.IO.loadImage("test/test-images/png/orange.png"); - let img2 = Png.IO.loadImage("test/test-images/png/orange_changed.png"); - - let (_, diffPixels, diffPercentage, _) = - PNG_Diff.compare(img1, img2, ~threshold=0.5, ()); - expect.int(diffPixels).toBe(222); - expect.float(diffPercentage).toBeCloseTo(0.19); - }) -}); - -describe("CORE: Ignore Regions", ({test, _}) => { - test("uses provided irgnore regions", ({expect, _}) => { - let img1 = Png.IO.loadImage("test/test-images/png/orange.png"); - let img2 = Png.IO.loadImage("test/test-images/png/orange_changed.png"); - - let (_diffOutput, diffPixels, diffPercentage, _) = - PNG_Diff.compare( - img1, - img2, - ~ignoreRegions=[ - ((150, 30), (310, 105)), - ((20, 175), (105, 200)), - ], - (), - ); - - expect.int(diffPixels).toBe(0); - expect.float(diffPercentage).toBeCloseTo(0.0); - }) -}); - -describe("CORE: Diff Color", ({test, _}) => { - test("creates diff output image with custom diff color", ({expect, _}) => { - let img1 = Png.IO.loadImage("test/test-images/png/orange.png"); - let img2 = Png.IO.loadImage("test/test-images/png/orange_changed.png"); - - let (diffOutput, _, _, _) = - PNG_Diff.compare(img1, img2, ~diffPixel=(0, 255, 0), ()); - - let originalDiff = - Png.IO.loadImage("test/test-images/png/orange_diff_green.png"); - let (diffMaskOfDiff, diffOfDiffPixels, diffOfDiffPercentage, _) = - PNG_Diff.compare(originalDiff, diffOutput, ()); - - if (diffOfDiffPixels > 0) { - Png.IO.saveImage( - diffOutput, - "test/test-images/png/diff-output-green.png", - ); - Png.IO.saveImage( - diffMaskOfDiff, - "test/test-images/png/diff-of-diff-green.png", - ); - }; - - expect.int(diffOfDiffPixels).toBe(0); - expect.float(diffOfDiffPercentage).toBeCloseTo(0.0); - }) -}); diff --git a/test/Test_IO_BMP.ml b/test/Test_IO_BMP.ml new file mode 100644 index 00000000..ce2bb67f --- /dev/null +++ b/test/Test_IO_BMP.ml @@ -0,0 +1,42 @@ +open TestFramework +open ODiffIO +module Diff = Odiff.Diff.MakeDiff (Bmp.IO) (Bmp.IO) +module Output_Diff = Odiff.Diff.MakeDiff (Png.IO) (Bmp.IO) + +let _ = + describe "IO: BMP" (fun { test; _ } -> + test "finds difference between 2 images" (fun { expect; _ } -> + let img1 = Bmp.IO.loadImage "test/test-images/bmp/clouds.bmp" in + let img2 = Bmp.IO.loadImage "test/test-images/bmp/clouds-2.bmp" in + let _, diffPixels, diffPercentage, _ = Diff.compare img1 img2 () in + (expect.int diffPixels).toBe 191; + (expect.float diffPercentage).toBeCloseTo 0.076); + test "Diff of mask and no mask are equal" (fun { expect; _ } -> + let img1 = Bmp.IO.loadImage "test/test-images/bmp/clouds.bmp" in + let img2 = Bmp.IO.loadImage "test/test-images/bmp/clouds-2.bmp" in + let _, diffPixels, diffPercentage, _ = + Diff.compare img1 img2 ~outputDiffMask:false () + in + let img1 = Bmp.IO.loadImage "test/test-images/bmp/clouds.bmp" in + let img2 = Bmp.IO.loadImage "test/test-images/bmp/clouds-2.bmp" in + let _, diffPixelsMask, diffPercentageMask, _ = + Diff.compare img1 img2 ~outputDiffMask:true () + in + (expect.int diffPixels).toBe diffPixelsMask; + (expect.float diffPercentage).toBeCloseTo diffPercentageMask); + test "Creates correct diff output image" (fun { expect; _ } -> + let img1 = Bmp.IO.loadImage "test/test-images/bmp/clouds.bmp" in + let img2 = Bmp.IO.loadImage "test/test-images/bmp/clouds-2.bmp" in + let diffOutput, _, _, _ = Diff.compare img1 img2 () in + let originalDiff = + Png.IO.loadImage "test/test-images/bmp/clouds-diff.png" + in + let diffMaskOfDiff, diffOfDiffPixels, diffOfDiffPercentage, _ = + Output_Diff.compare originalDiff diffOutput () + in + if diffOfDiffPixels > 0 then ( + Bmp.IO.saveImage diffOutput "test/test-images/bmp/_diff-output.png"; + Png.IO.saveImage diffMaskOfDiff + "test/test-images/bmp/_diff-of-diff.png"); + (expect.int diffOfDiffPixels).toBe 0; + (expect.float diffOfDiffPercentage).toBeCloseTo 0.0)) diff --git a/test/Test_IO_BMP.re b/test/Test_IO_BMP.re deleted file mode 100644 index f2fec7a6..00000000 --- a/test/Test_IO_BMP.re +++ /dev/null @@ -1,57 +0,0 @@ -open TestFramework; -open ODiffIO; - -module Diff = Odiff.Diff.MakeDiff(Bmp.IO, Bmp.IO); -module Output_Diff = Odiff.Diff.MakeDiff(Png.IO, Bmp.IO); - -describe("IO: BMP", ({test, _}) => { - test("finds difference between 2 images", ({expect, _}) => { - let img1 = Bmp.IO.loadImage("test/test-images/bmp/clouds.bmp"); - let img2 = Bmp.IO.loadImage("test/test-images/bmp/clouds-2.bmp"); - - let (_, diffPixels, diffPercentage, _) = Diff.compare(img1, img2, ()); - - expect.int(diffPixels).toBe(191); - expect.float(diffPercentage).toBeCloseTo(0.076); - }); - - test("Diff of mask and no mask are equal", ({expect, _}) => { - let img1 = Bmp.IO.loadImage("test/test-images/bmp/clouds.bmp"); - let img2 = Bmp.IO.loadImage("test/test-images/bmp/clouds-2.bmp"); - - let (_, diffPixels, diffPercentage, _) = - Diff.compare(img1, img2, ~outputDiffMask=false, ()); - - let img1 = Bmp.IO.loadImage("test/test-images/bmp/clouds.bmp"); - let img2 = Bmp.IO.loadImage("test/test-images/bmp/clouds-2.bmp"); - - let (_, diffPixelsMask, diffPercentageMask, _) = - Diff.compare(img1, img2, ~outputDiffMask=true, ()); - - expect.int(diffPixels).toBe(diffPixelsMask); - expect.float(diffPercentage).toBeCloseTo(diffPercentageMask); - }); - - test("Creates correct diff output image", ({expect, _}) => { - let img1 = Bmp.IO.loadImage("test/test-images/bmp/clouds.bmp"); - let img2 = Bmp.IO.loadImage("test/test-images/bmp/clouds-2.bmp"); - - let (diffOutput, _, _, _) = Diff.compare(img1, img2, ()); - - let originalDiff = - Png.IO.loadImage("test/test-images/bmp/clouds-diff.png"); - let (diffMaskOfDiff, diffOfDiffPixels, diffOfDiffPercentage, _) = - Output_Diff.compare(originalDiff, diffOutput, ()); - - if (diffOfDiffPixels > 0) { - Bmp.IO.saveImage(diffOutput, "test/test-images/bmp/_diff-output.png"); - Png.IO.saveImage( - diffMaskOfDiff, - "test/test-images/bmp/_diff-of-diff.png", - ); - }; - - expect.int(diffOfDiffPixels).toBe(0); - expect.float(diffOfDiffPercentage).toBeCloseTo(0.0); - }); -}); diff --git a/test/Test_IO_JPG.ml b/test/Test_IO_JPG.ml new file mode 100644 index 00000000..a052a60c --- /dev/null +++ b/test/Test_IO_JPG.ml @@ -0,0 +1,42 @@ +open TestFramework +open ODiffIO +module Diff = Odiff.Diff.MakeDiff (Jpg.IO) (Jpg.IO) +module Output_Diff = Odiff.Diff.MakeDiff (Png.IO) (Jpg.IO) + +let _ = + describe "IO: JPG / JPEG" (fun { test; _ } -> + test "finds difference between 2 images" (fun { expect; _ } -> + let img1 = Jpg.IO.loadImage "test/test-images/jpg/tiger.jpg" in + let img2 = Jpg.IO.loadImage "test/test-images/jpg/tiger-2.jpg" in + let _, diffPixels, diffPercentage, _ = Diff.compare img1 img2 () in + (expect.int diffPixels).toBe 7586; + (expect.float diffPercentage).toBeCloseTo 1.14); + test "Diff of mask and no mask are equal" (fun { expect; _ } -> + let img1 = Jpg.IO.loadImage "test/test-images/jpg/tiger.jpg" in + let img2 = Jpg.IO.loadImage "test/test-images/jpg/tiger-2.jpg" in + let _, diffPixels, diffPercentage, _ = + Diff.compare img1 img2 ~outputDiffMask:false () + in + let img1 = Jpg.IO.loadImage "test/test-images/jpg/tiger.jpg" in + let img2 = Jpg.IO.loadImage "test/test-images/jpg/tiger-2.jpg" in + let _, diffPixelsMask, diffPercentageMask, _ = + Diff.compare img1 img2 ~outputDiffMask:true () + in + (expect.int diffPixels).toBe diffPixelsMask; + (expect.float diffPercentage).toBeCloseTo diffPercentageMask); + test "Creates correct diff output image" (fun { expect; _ } -> + let img1 = Jpg.IO.loadImage "test/test-images/jpg/tiger.jpg" in + let img2 = Jpg.IO.loadImage "test/test-images/jpg/tiger-2.jpg" in + let diffOutput, _, _, _ = Diff.compare img1 img2 () in + let originalDiff = + Png.IO.loadImage "test/test-images/jpg/tiger-diff.png" + in + let diffMaskOfDiff, diffOfDiffPixels, diffOfDiffPercentage, _ = + Output_Diff.compare originalDiff diffOutput () + in + if diffOfDiffPixels > 0 then ( + Jpg.IO.saveImage diffOutput "test/test-images/jpg/_diff-output.png"; + Png.IO.saveImage diffMaskOfDiff + "test/test-images/jpg/_diff-of-diff.png"); + (expect.int diffOfDiffPixels).toBe 0; + (expect.float diffOfDiffPercentage).toBeCloseTo 0.0)) diff --git a/test/Test_IO_JPG.re b/test/Test_IO_JPG.re deleted file mode 100644 index 92c66d26..00000000 --- a/test/Test_IO_JPG.re +++ /dev/null @@ -1,57 +0,0 @@ -open TestFramework; -open ODiffIO; - -module Diff = Odiff.Diff.MakeDiff(Jpg.IO, Jpg.IO); -module Output_Diff = Odiff.Diff.MakeDiff(Png.IO, Jpg.IO); - -describe("IO: JPG / JPEG", ({test, _}) => { - test("finds difference between 2 images", ({expect, _}) => { - let img1 = Jpg.IO.loadImage("test/test-images/jpg/tiger.jpg"); - let img2 = Jpg.IO.loadImage("test/test-images/jpg/tiger-2.jpg"); - - let (_, diffPixels, diffPercentage, _) = Diff.compare(img1, img2, ()); - - expect.int(diffPixels).toBe(7586); - expect.float(diffPercentage).toBeCloseTo(1.14); - }); - - test("Diff of mask and no mask are equal", ({expect, _}) => { - let img1 = Jpg.IO.loadImage("test/test-images/jpg/tiger.jpg"); - let img2 = Jpg.IO.loadImage("test/test-images/jpg/tiger-2.jpg"); - - let (_, diffPixels, diffPercentage, _) = - Diff.compare(img1, img2, ~outputDiffMask=false, ()); - - let img1 = Jpg.IO.loadImage("test/test-images/jpg/tiger.jpg"); - let img2 = Jpg.IO.loadImage("test/test-images/jpg/tiger-2.jpg"); - - let (_, diffPixelsMask, diffPercentageMask, _) = - Diff.compare(img1, img2, ~outputDiffMask=true, ()); - - expect.int(diffPixels).toBe(diffPixelsMask); - expect.float(diffPercentage).toBeCloseTo(diffPercentageMask); - }); - - test("Creates correct diff output image", ({expect, _}) => { - let img1 = Jpg.IO.loadImage("test/test-images/jpg/tiger.jpg"); - let img2 = Jpg.IO.loadImage("test/test-images/jpg/tiger-2.jpg"); - - let (diffOutput, _, _, _) = Diff.compare(img1, img2, ()); - - let originalDiff = - Png.IO.loadImage("test/test-images/jpg/tiger-diff.png"); - let (diffMaskOfDiff, diffOfDiffPixels, diffOfDiffPercentage, _) = - Output_Diff.compare(originalDiff, diffOutput, ()); - - if (diffOfDiffPixels > 0) { - Jpg.IO.saveImage(diffOutput, "test/test-images/jpg/_diff-output.png"); - Png.IO.saveImage( - diffMaskOfDiff, - "test/test-images/jpg/_diff-of-diff.png", - ); - }; - - expect.int(diffOfDiffPixels).toBe(0); - expect.float(diffOfDiffPercentage).toBeCloseTo(0.0); - }); -}); diff --git a/test/Test_IO_PNG.ml b/test/Test_IO_PNG.ml new file mode 100644 index 00000000..4c8f83e8 --- /dev/null +++ b/test/Test_IO_PNG.ml @@ -0,0 +1,39 @@ +open TestFramework +open ODiffIO +module Diff = Odiff.Diff.MakeDiff (Png.IO) (Png.IO) + +let _ = + describe "IO: PNG" (fun { test; _ } -> + let open Png.IO in + test "finds difference between 2 images" (fun { expect; _ } -> + let img1 = loadImage "test/test-images/png/orange.png" in + let img2 = loadImage "test/test-images/png/orange_changed.png" in + let _, diffPixels, diffPercentage, _ = Diff.compare img1 img2 () in + (expect.int diffPixels).toBe 1430; + (expect.float diffPercentage).toBeCloseTo 1.20); + test "Diff of mask and no mask are equal" (fun { expect; _ } -> + let img1 = loadImage "test/test-images/png/orange.png" in + let img2 = loadImage "test/test-images/png/orange_changed.png" in + let _, diffPixels, diffPercentage, _ = + Diff.compare img1 img2 ~outputDiffMask:false () + in + let img1 = loadImage "test/test-images/png/orange.png" in + let img2 = loadImage "test/test-images/png/orange_changed.png" in + let _, diffPixelsMask, diffPercentageMask, _ = + Diff.compare img1 img2 ~outputDiffMask:true () + in + (expect.int diffPixels).toBe diffPixelsMask; + (expect.float diffPercentage).toBeCloseTo diffPercentageMask); + test "Creates correct diff output image" (fun { expect; _ } -> + let img1 = loadImage "test/test-images/png/orange.png" in + let img2 = loadImage "test/test-images/png/orange_changed.png" in + let diffOutput, _, _, _ = Diff.compare img1 img2 () in + let originalDiff = loadImage "test/test-images/png/orange_diff.png" in + let diffMaskOfDiff, diffOfDiffPixels, diffOfDiffPercentage, _ = + Diff.compare originalDiff diffOutput () + in + if diffOfDiffPixels > 0 then ( + saveImage diffOutput "test/test-images/png/diff-output.png"; + saveImage diffMaskOfDiff "test/test-images/png/diff-of-diff.png"); + (expect.int diffOfDiffPixels).toBe 0; + (expect.float diffOfDiffPercentage).toBeCloseTo 0.0)) diff --git a/test/Test_IO_PNG.re b/test/Test_IO_PNG.re deleted file mode 100644 index 0c859cbd..00000000 --- a/test/Test_IO_PNG.re +++ /dev/null @@ -1,54 +0,0 @@ -open TestFramework; -open ODiffIO; - -module Diff = Odiff.Diff.MakeDiff(Png.IO, Png.IO); - -describe("IO: PNG", ({test, _}) => { - open Png.IO; - - test("finds difference between 2 images", ({expect, _}) => { - let img1 = loadImage("test/test-images/png/orange.png"); - let img2 = loadImage("test/test-images/png/orange_changed.png"); - - let (_, diffPixels, diffPercentage, _) = Diff.compare(img1, img2, ()); - - expect.int(diffPixels).toBe(1430); - expect.float(diffPercentage).toBeCloseTo(1.20); - }); - - test("Diff of mask and no mask are equal", ({expect, _}) => { - let img1 = loadImage("test/test-images/png/orange.png"); - let img2 = loadImage("test/test-images/png/orange_changed.png"); - - let (_, diffPixels, diffPercentage, _) = - Diff.compare(img1, img2, ~outputDiffMask=false, ()); - - let img1 = loadImage("test/test-images/png/orange.png"); - let img2 = loadImage("test/test-images/png/orange_changed.png"); - - let (_, diffPixelsMask, diffPercentageMask, _) = - Diff.compare(img1, img2, ~outputDiffMask=true, ()); - - expect.int(diffPixels).toBe(diffPixelsMask); - expect.float(diffPercentage).toBeCloseTo(diffPercentageMask); - }); - - test("Creates correct diff output image", ({expect, _}) => { - let img1 = loadImage("test/test-images/png/orange.png"); - let img2 = loadImage("test/test-images/png/orange_changed.png"); - - let (diffOutput, _, _, _) = Diff.compare(img1, img2, ()); - - let originalDiff = loadImage("test/test-images/png/orange_diff.png"); - let (diffMaskOfDiff, diffOfDiffPixels, diffOfDiffPercentage, _) = - Diff.compare(originalDiff, diffOutput, ()); - - if (diffOfDiffPixels > 0) { - saveImage(diffOutput, "test/test-images/png/diff-output.png"); - saveImage(diffMaskOfDiff, "test/test-images/png/diff-of-diff.png"); - }; - - expect.int(diffOfDiffPixels).toBe(0); - expect.float(diffOfDiffPercentage).toBeCloseTo(0.0); - }); -}); diff --git a/test/Test_IO_TIFF.ml b/test/Test_IO_TIFF.ml new file mode 100644 index 00000000..1deb0b35 --- /dev/null +++ b/test/Test_IO_TIFF.ml @@ -0,0 +1,44 @@ +open TestFramework +open ODiffIO +module Diff = Odiff.Diff.MakeDiff (Tiff.IO) (Tiff.IO) +module Output_Diff = Odiff.Diff.MakeDiff (Png.IO) (Tiff.IO) + +let _ = + describe "IO: TIFF" (fun { test; _ } -> + test "finds difference between 2 images" (fun { expect; _ } -> + let img1 = Tiff.IO.loadImage "test/test-images/tiff/laptops.tiff" in + let img2 = Tiff.IO.loadImage "test/test-images/tiff/laptops-2.tiff" in + let _, diffPixels, diffPercentage, _ = Diff.compare img1 img2 () in + (expect.int diffPixels).toBe 8569; + (expect.float diffPercentage).toBeCloseTo 3.79); + + test "Diff of mask and no mask are equal" (fun { expect; _ } -> + let img1 = Tiff.IO.loadImage "test/test-images/tiff/laptops.tiff" in + let img2 = Tiff.IO.loadImage "test/test-images/tiff/laptops-2.tiff" in + let _, diffPixels, diffPercentage, _ = + Diff.compare img1 img2 ~outputDiffMask:false () + in + let img1 = Tiff.IO.loadImage "test/test-images/tiff/laptops.tiff" in + let img2 = Tiff.IO.loadImage "test/test-images/tiff/laptops-2.tiff" in + let _, diffPixelsMask, diffPercentageMask, _ = + Diff.compare img1 img2 ~outputDiffMask:true () + in + (expect.int diffPixels).toBe diffPixelsMask; + (expect.float diffPercentage).toBeCloseTo diffPercentageMask); + test "Creates correct diff output image" (fun { expect; _ } -> + let img1 = Tiff.IO.loadImage "test/test-images/tiff/laptops.tiff" in + let img2 = Tiff.IO.loadImage "test/test-images/tiff/laptops-2.tiff" in + let diffOutput, _, _, _ = Diff.compare img1 img2 () in + let originalDiff = + Png.IO.loadImage "test/test-images/tiff/laptops-diff.png" + in + let diffMaskOfDiff, diffOfDiffPixels, diffOfDiffPercentage, _ = + Output_Diff.compare originalDiff diffOutput () + in + if diffOfDiffPixels > 0 then ( + Tiff.IO.saveImage diffOutput + "test/test-images/tiff/_diff-output.png"; + Png.IO.saveImage diffMaskOfDiff + "test/test-images/tiff/_diff-of-diff.png"); + (expect.int diffOfDiffPixels).toBe 0; + (expect.float diffOfDiffPercentage).toBeCloseTo 0.0)) diff --git a/test/Test_IO_TIFF.re b/test/Test_IO_TIFF.re deleted file mode 100644 index 56c2e238..00000000 --- a/test/Test_IO_TIFF.re +++ /dev/null @@ -1,57 +0,0 @@ -open TestFramework; -open ODiffIO; - -module Diff = Odiff.Diff.MakeDiff(Tiff.IO, Tiff.IO); -module Output_Diff = Odiff.Diff.MakeDiff(Png.IO, Tiff.IO); - -describe("IO: TIFF", ({test, _}) => { - test("finds difference between 2 images", ({expect, _}) => { - let img1 = Tiff.IO.loadImage("test/test-images/tiff/laptops.tiff"); - let img2 = Tiff.IO.loadImage("test/test-images/tiff/laptops-2.tiff"); - - let (_, diffPixels, diffPercentage, _) = Diff.compare(img1, img2, ()); - - expect.int(diffPixels).toBe(8569); - expect.float(diffPercentage).toBeCloseTo(3.79); - }); - - test("Diff of mask and no mask are equal", ({expect, _}) => { - let img1 = Tiff.IO.loadImage("test/test-images/tiff/laptops.tiff"); - let img2 = Tiff.IO.loadImage("test/test-images/tiff/laptops-2.tiff"); - - let (_, diffPixels, diffPercentage, _) = - Diff.compare(img1, img2, ~outputDiffMask=false, ()); - - let img1 = Tiff.IO.loadImage("test/test-images/tiff/laptops.tiff"); - let img2 = Tiff.IO.loadImage("test/test-images/tiff/laptops-2.tiff"); - - let (_, diffPixelsMask, diffPercentageMask, _) = - Diff.compare(img1, img2, ~outputDiffMask=true, ()); - - expect.int(diffPixels).toBe(diffPixelsMask); - expect.float(diffPercentage).toBeCloseTo(diffPercentageMask); - }); - - test("Creates correct diff output image", ({expect, _}) => { - let img1 = Tiff.IO.loadImage("test/test-images/tiff/laptops.tiff"); - let img2 = Tiff.IO.loadImage("test/test-images/tiff/laptops-2.tiff"); - - let (diffOutput, _, _, _) = Diff.compare(img1, img2, ()); - - let originalDiff = - Png.IO.loadImage("test/test-images/tiff/laptops-diff.png"); - let (diffMaskOfDiff, diffOfDiffPixels, diffOfDiffPercentage, _) = - Output_Diff.compare(originalDiff, diffOutput, ()); - - if (diffOfDiffPixels > 0) { - Tiff.IO.saveImage(diffOutput, "test/test-images/tiff/_diff-output.png"); - Png.IO.saveImage( - diffMaskOfDiff, - "test/test-images/tiff/_diff-of-diff.png", - ); - }; - - expect.int(diffOfDiffPixels).toBe(0); - expect.float(diffOfDiffPercentage).toBeCloseTo(0.0); - }); -}); diff --git a/test/dune b/test/dune index d1d9b628..e60f682d 100644 --- a/test/dune +++ b/test/dune @@ -6,16 +6,14 @@ ; you will want to depend on the library you are testing as well, however for ; the purposes of this example we are only depending on the test runner itself (libraries rely.lib odiff odiff-io) - (modules (:standard \ RunTests)) -) + (modules + (:standard \ RunTests))) + (executable ; the for the library is automatically detected because of the name, but we ; need to explicitly specify the package here (name RunTests) (package odiff) (public_name RunTests.exe) - (libraries - OdiffTests - ) - (modules RunTests) -) \ No newline at end of file + (libraries OdiffTests) + (modules RunTests))