package spin

  1. Overview
  2. Docs
Legend:
Page
Library
Module
Module type
Parameter
Class
Class type
Source

Source file bin.ml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
(* Generated by: ocaml-crunch
   Creation date: Sat, 17 May 2025 18:04:16 GMT *)

module Internal = struct
  let d_051a88b0e6b49747bfd810b00ed1be49 = "name: CI\n\non: [push, pull_request]\n\n{% if package_manager == 'Esy' -%}\n{% raw -%}\njobs:\n  build:\n    name: Build and test\n    runs-on: ${{ matrix.os }}\n    strategy:\n      matrix:\n        os: [ubuntu-latest, macos-latest, windows-latest]\n    steps:\n      - uses: actions/setup-node@v1\n        with:\n          node-version: 12\n\n      - uses: actions/checkout@v2\n      - name: Cache esy dependencies\n        uses: actions/cache@v1\n        id: cache\n        with:\n          path: _export\n          key: ${{ runner.OS }}-build-${{ hashFiles('esy.lock/index.json') }}\n          restore-keys: |\n            ${{ runner.OS }}-build-${{ env.cache-name }}-\n            ${{ runner.OS }}-build-\n            ${{ runner.OS }}-\n\n      - name: Install esy\n        run: npm install -g esy@latest\n\n      - name: Import dependencies\n        if: steps.cache.outputs.cache-hit == 'true'\n        run: esy import-build _export/*\n\n      - name: Install dependencies\n        run: esy install\n\n      - name: Build\n        run: esy build --release\n\n      - name: Check formatting\n        run: esy format\n\n      - name: Run tests\n        run: esy test\n        \n      - name: Export dependencies\n        run: esy export-dependencies\n{%- endraw %}\n{% else -%}\n{% raw -%}\njobs:\n  build:\n    name: Build and test\n    runs-on: ${{ matrix.os }}\n    strategy:\n      matrix:\n        os: [ubuntu-latest, macos-latest, windows-latest]\n        ocaml-version: ['4.09.0', '4.08.1']\n    steps:\n      - uses: avsm/setup-ocaml@master\n        with:\n          ocaml-version: ${{ matrix.ocaml-version }}\n\n      - uses: actions/checkout@v2\n\n      - name: Pin package\n        run: opam pin add {% endraw %}{{ project_slug }}{% raw %}.dev -n .\n\n      - name: Query and install external dependencies\n        run: opam depext -yt {% endraw %}{{ project_slug }}{% raw %}\n\n      - name: Install dependencies\n        run: make dev\n\n      - name: Build\n        run: make build\n\n      - name: Check formatting\n        run: make format\n\n      - name: Run tests\n        run: make test\n{%- endraw %}\n{% endif %}"

  let d_1237ff6c780eba5569308125f0c665aa = "(executable\n (name main)\n (public_name {{ project_slug }})\n (libraries {{ project_slug }})\n (flags (:standard -open StdLabels)))\n\n(include_subdirs unqualified)\n"

  let d_132072893c4898750d2418b319b29683 = "# 0.1.0 - 2020-01-01\n\n## Added\n\n- Initial release\n"

  let d_19be71cf8e481a8a7c188d8ba64f37a6 = "let greet name = \"Hello \" ^ name ^ \"!\"\n"

  let d_26624629ac302b31c7028b2f85d1437f = "MIT License\n\nCopyright (c) 2020 {{ username }}\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE."

  let d_294e21980329963f8c4fbb361c23c359 = "(library\n (name {{ project_snake }}_test)\n (libraries {% if test_framework == 'Rely' %}rely.lib{% else %}alcotest{% endif %} {{ project_slug }})\n (modules\n  (:standard \\ test_runner))\n (flags (:standard -linkall -g -open StdLabels{% if test_framework == 'Rely' %} -w +A-48-42-40{% endif %})))\n\n(executable\n (name test_runner)\n (libraries {% if test_framework == 'Rely' %}rely.lib{% else %}alcotest{% endif %} {{ project_snake }}_test)\n (modules test_runner)\n (flags (:standard -open StdLabels{% if test_framework == 'Rely' %} -w +A-48-42-40{% endif %})))\n\n(rule\n (alias runtest)\n (action\n  (run ./test_runner.exe -q --color=always)))\n\n(include_subdirs unqualified)\n"

  let d_2953c63d6b7001b2333aa6d1f0fa49a7 = "# {{ project_name }}\n\n{%- if ci_cd == 'Github' %}\n\n[![Actions Status](https://github.com/{{ github_username }}/{{ project_slug }}/workflows/CI/badge.svg)](https://github.com/{{ github_username }}/{{ project_slug }}/actions)\n{%- endif %}\n\n{%- if project_description %}\n\n{{ project_description }}\n{%- endif %}\n\n## Contributing\n\nTake a look at our [Contributing Guide](CONTRIBUTING.md).\n"

  let d_2f5148d85d16e0e800f592231d12da07 = "{% if test_framework == 'Rely' -%}\n(** Main entry point for our test runner.\n\n    This simply calls the test framework CLI defined by Rely in the test\n    library.\n\n    We separate the test runner binary and the test library so that we can link\n    all the modules in the library when compiling. This allows us to discover\n    all the test automatically, instead of having to manually include them. *)\n\nlet () = {{ project_snake | capitalize }}_test.Test_framework.cli ()\n{%- else -%}\nopen {{ project_snake | capitalize }}_test\n\n(** Main entry point for our test runner.\n\n    This aggregates all the test suites and call Alcotes to run them. When\n    creating a new test suite, don't forget to add it here! *)\n\nlet () =\n  Alcotest.run \"{{ project_slug }}\" [ \"Utils\", Utils_test.suite ]\n{% endif -%}\n"

  let d_53fc07b4ed3efdd7428f9dfc039fd9b0 = "# Contributing\n\n## Setup your development environment\n\n{% if package_manager == 'Esy' -%}\nYou need Esy, you can install the latest version from [npm](https://npmjs.com):\n\n```bash\nyarn global add esy@latest\n# Or\nnpm install -g esy@latest\n```\n\nThen run the `esy` command from this project root to install and build depenencies.\n\n```bash\nesy\n```\n\nThis project uses [Dune](https://dune.build/) as a build system, if you add a dependency in your `package.json` file, don't forget to add it to your `dune` and `dune-project` files too.\n{%- else -%}\nYou need Opam, you can install it by following [Opam's documentation](https://opam.ocaml.org/doc/Install.html).\n\nWith Opam installed, you can install the dependencies with:\n\n```bash\nmake dev\n```\n\nThen, build the project with:\n\n```bash\nmake build\n```\n{%- endif %}\n\n### Running Binary\n\nAfter building the project, you can run the main binary that is produced.\n\n{% if package_manager == 'Esy' -%}\n```bash\nesy start\n```\n{%- else %}\n```bash\nmake start\n```\n{%- endif %}\n\n### Running Tests\n\nYou can run the test compiled executable:\n\n{% if package_manager == 'Esy' -%}\n\n```bash\nesy test\n```\n{%- else %}\n```bash\nmake test\n```\n{%- endif %}\n\n### Building documentation\n\nDocumentation for the libraries in the project can be generated with:\n\n{% if package_manager == 'Esy' -%}\n```bash\nesy doc\nopen-cli $(esy doc-path)\n```\n\nThis assumes you have a command like [open-cli](https://github.com/sindresorhus/open-cli) installed on your system.\n\n> NOTE: On macOS, you can use the system command `open`, for instance `open $(esy doc-path)`\n{%- else %}\n```bash\nmake doc\nopen-cli $(make doc-path)\n```\n\nThis assumes you have a command like [open-cli](https://github.com/sindresorhus/open-cli) installed on your system.\n\n> NOTE: On macOS, you can use the system command `open`, for instance `open $(make doc-path)`\n{%- endif %}\n\n### Repository Structure\n\nThe following snippet describes {{ project_name }}'s repository structure.\n\n```text\n.\n\226\148\156\226\148\128\226\148\128 bin/\n|   Source for {{ project_slug }}'s binary. This links to the library defined in `lib/`.\n\226\148\130\n\226\148\156\226\148\128\226\148\128 lib/\n|   Source for {{ project_name }}'s library. Contains {{ project_name }}'s core functionnalities.\n\226\148\130\n\226\148\156\226\148\128\226\148\128 test/\n|   Unit tests and integration tests for {{ project_name }}.\n\226\148\130\n\226\148\156\226\148\128\226\148\128 dune-project\n|   Dune file used to mark the root of the project and define project-wide parameters.\n|   For the documentation of the syntax, see https://dune.readthedocs.io/en/stable/dune-files.html#dune-project\n\226\148\130\n\226\148\156\226\148\128\226\148\128 LICENSE\n\226\148\130\n{%- if package_manager == 'Esy' %}\n\226\148\156\226\148\128\226\148\128 package.json\n|   Esy package definition.\n|   To know more about creating Esy packages, see https://esy.sh/docs/en/configuration.html.\n{%- else %}\n\226\148\156\226\148\128\226\148\128 Makefile\n|   Make file containing common development command.\n{%- endif %}\n\226\148\130\n\226\148\156\226\148\128\226\148\128 README.md\n\226\148\130\n\226\148\148\226\148\128\226\148\128 {{ project_slug }}.opam\n    Opam package definition.\n    To know more about creating and publishing opam packages, see https://opam.ocaml.org/doc/Packaging.html.\n```\n"

  let d_67a6fe7f9907d4c763ae341f1b48520f = "# ocamlbuild working directory\n_build/\n\n# ocamlbuild targets\n*.byte\n*.native\n\n# Merlin configuring file for Vim and Emacs\n.merlin\n\n# Dune generated files\n*.install\n\n# Local OPAM switch\n_opam/\n\n{%- if package_manager == 'Esy' %}\n\n# Esy generated files\n_esy/\n_release/\n_export/\nnpm-debug.log\nyarn-error.log\nnode_modules/\n{% endif %}"

  let d_6e1115889eb69926a1c2c30f62bf2c3c = "(env\n (dev\n  (flags (:standard -open StdLabels -w +A-48-42 -warn-error +A-3-44)))\n (release\n  (flags (:standard -O3))))\n"

  let d_6e7dd3e0d0807f407ca58813149368cf = "(library\n (name {{ project_snake }})\n (public_name {{ project_slug }})\n (flags (:standard -open StdLabels)))\n\n(include_subdirs unqualified)\n"

  let d_72bcae06e663ac12514922e810b34108 = "(name bin)\n(description \"Native project containing a binary\")\n\n(config project_name\n  (input (prompt \"Project name\")))\n\n(config project_slug\n  (input (prompt \"Project slug\"))\n  (default (slugify :project_name))\n  (rules\n    (\"The project slug must be lowercase and contain ASCII characters and '-' only.\"\n      (eq :project_slug (slugify :project_slug)))))\n\n(config project_snake\n  (default (snake_case :project_slug)))\n\n(config project_description\n  (input (prompt \"Description\"))\n  (default \"A short, but powerful statement about your project\")\n  (rules\n    (\"The last character of the description cannot be a \\\".\\\" to comply with Opam\"\n      (neq . (last_char :project_description)))))\n\n(config username\n  (input (prompt \"Name of the author\")))\n\n(config github_username\n  (input (prompt \"Github username\"))\n  (default :username))\n\n(config npm_username\n  (input (prompt \"NPM username\"))\n  (default :username))\n\n(config syntax\n  (select\n    (prompt \"Which syntax do you use?\")\n    (values OCaml Reason)))\n\n(config package_manager\n  (select\n    (prompt \"Which package manager do you use?\")\n    (values Opam Esy))\n  (default (if (eq :syntax Reason) Esy Opam)))\n\n(config test_framework\n  (select\n    (prompt \"Which test framework do you prefer?\")\n    (values Alcotest Rely))\n  (default (if (eq :syntax Reason) Rely Alcotest)))\n\n(config ci_cd\n  (select\n    (prompt \"Which CI/CD do you use\")\n    (values Github None))\n  (default Github))\n\n(ignore \n  (files .ocamlformat)\n  (enabled_if (neq :syntax OCaml)))\n\n(ignore \n  (files test/support/test_framework.* *.opam.template)\n  (enabled_if (neq :test_framework Rely)))\n\n(ignore\n  (files github/*)\n  (enabled_if (neq :ci_cd Github)))\n\n(ignore\n  (files esy.json)\n  (enabled_if (neq :package_manager Esy)))\n\n(ignore\n  (files Makefile)\n  (enabled_if (neq :package_manager Opam)))\n\n(post_gen\n  (actions \n    (refmt */*.ml */*.mli))\n  (enabled_if (eq :syntax Reason)))\n\n; We need to do this because Dune won't copy .github during build\n(post_gen\n  (actions \n    (run mv github .github))\n  (enabled_if (eq :ci_cd Github)))\n\n(post_gen\n  (actions \n    (run esy install)\n    (run esy dune build))\n  (message \"\240\159\142\129  Installing packages. This might take a couple minutes.\")\n  (enabled_if (eq :package_manager Esy)))\n\n(post_gen\n  (actions \n    (run make dev)\n    (run make build))\n  (message \"\240\159\142\129  Installing packages. This might take a couple minutes.\")\n  (enabled_if (eq :package_manager Opam)))\n\n(example_commands\n  (commands \n    (\"esy install\" \"Download and lock the dependencies.\")\n    (\"esy build\" \"Build the dependencies and the project.\")\n    (\"esy test\" \"Starts the test runner.\"))\n  (enabled_if (eq :package_manager Esy)))\n\n(example_commands\n  (commands\n    (\"make dev\" \"Download runtime and development dependencies.\")\n    (\"make build\" \"Build the dependencies and the project.\")\n    (\"make test\" \"Starts the test runner.\"))\n  (enabled_if (eq :package_manager Opam)))\n"

  let d_74af67b7565e3cc935eb9f22375a9aab = "(** The Utils module define helper functions commonly used throughout the\n    project. *)\n\nval greet : string -> string\n(** Returns a greeting message.\n\n    {4 Examples}\n\n    {[ print_endline @@ greet \"Jane\" ]} *)\n"

  let d_7ec0ecd10e38a79154a479759546528e = "(lang dune 2.0)\n(name {{ project_slug }})\n(documentation \"https://{{ github_username }}.github.io/{{ project_slug }}/\")\n(source (github {{ github_username }}/{{ project_slug }}))\n(license MIT)\n(authors \"{{ username }}{% if author_email %} <{{ author_email }}>{% endif %}\")\n(maintainers \"{{ username }}{% if author_email %} <{{ author_email }}>{% endif %}\")\n\n(generate_opam_files true)\n\n(package\n (name {{ project_slug }})\n (synopsis \"{{ project_description }}\")\n (description \"\\\n{{ project_description }}\n\")\n (depends\n  (ocaml (>= 4.08.0))\n  (dune (>= 2.0))\n  {%- if test_framework == 'Rely' %}\n  ; Add Rely when released on Opam\n  ; (rely :with-test)\n  {%- else %}\n  (alcotest :with-test)\n  {%- endif %}\n  (odoc :with-doc)\n  {%- if syntax == 'Reason' %}\n  (reason :build)\n  {%- endif %}))\n"

  let d_8eaf15ff4849a95f5d0d4db844a92b66 = "{% if test_framework == 'Rely' -%}\nopen Test_framework\nopen {{ project_snake | capitalize }}\n\n(** Test suite for the Utils module. *)\n\nlet test_hello_with_name name { expect ; _ } =\n  let greeting = Utils.greet name in\n  let expected = \"Hello \" ^ name ^ \"!\" in\n  (expect.string greeting).toEqual expected\n\nlet () =\n  describe \"Utils\" @@ fun { test; _ } ->\n  test \"can greet Tom\" (test_hello_with_name \"Tom\");\n  test \"can greet John\" (test_hello_with_name \"John\")\n{%- else -%}\nopen Alcotest\nopen {{ project_snake | capitalize }}\n\n(** Test suite for the Utils module. *)\n\nlet test_hello_with_name name () =\n  let greeting = Utils.greet name in\n  let expected = \"Hello \" ^ name ^ \"!\" in\n  check string \"same string\" greeting expected\n\nlet suite =\n  [ \"can greet Tom\", `Quick, test_hello_with_name \"Tom\"\n  ; \"can greet John\", `Quick, test_hello_with_name \"John\"\n  ]\n{% endif %}"

  let d_910dbe5235098137b0ba12488b29e488 = "# We need to avoid \"@runtest\", since it depends on rely\nbuild: [\n  [\"dune\" \"subst\"] {pinned}\n  [\n    \"dune\"\n    \"build\"\n    \"-p\"\n    name\n    \"-j\"\n    jobs\n    \"@install\"\n    \"@doc\" {with-doc}\n  ]\n]"

  let d_9259c59c4360d349661ec1b827f8b459 = "{% if package_manager == 'Esy' -%}\n# Supresses the lock folder from the diffs\nesy.lock/* linguist-generated=true\n\n{% endif -%}\n\n{% if syntax == 'Reason' -%}\n# Tell github that .re and .rei files are Reason\n*.re linguist-language=Reason\n*.rei linguist-language=Reason\n{%- else -%}\n# Tell github that .ml and .mli files are OCaml\n*.ml linguist-language=OCaml\n*.mli linguist-language=OCaml\n{%- endif %}\n\n# Disable syntax detection for .spin\n.spin linguist-language=Text\n\n# Declare shell files to have LF endings on checkout\n# On Windows, the default git setting for `core.autocrlf`\n# means that when checking out code, LF endings get converted\n# to CRLF. This causes problems for shell scripts, as bash\n# gets choked up on the extra `\\r` character.\n* text eol=lf\n"

  let d_a9ae90c99b4bd03c4b1e8ffa0df76909 = "# This file is generated by dune, edit dune-project instead\nopam-version: \"2.0\"\nsynopsis: \"{{ project_description }}\"\ndescription: \"\"\"\n{{ project_description }}\n\"\"\"\nmaintainer: [\"{{ username }}{% if author_email %} <{{ author_email }}>{% endif %}\"]\nauthors: [\"{{ username }}{% if author_email %} <{{ author_email }}>{% endif %}\"]\nlicense: \"MIT\"\nhomepage: \"https://github.com/{{ github_username }}/{{ project_slug }}\"\ndoc: \"https://{{ github_username }}.github.io/{{ project_slug }}\"\nbug-reports: \"https://github.com/{{ github_username }}/{{ project_slug }}/issues\"\ndepends: [\n  \"ocaml\" {>= \"4.08.0\"}\n  \"dune\" {>= \"2.0\"}\n  {% if test_framework == 'Alcotest' -%}\n  \"alcotest\" {with-test}\n  {% endif -%}\n  \"odoc\" {with-doc}\n  {% if syntax == 'Reason' -%}\n  \"reason\" {build}\n  {% endif -%}\n]\nbuild: [\n  [\"dune\" \"subst\"] {pinned}\n  [\n    \"dune\"\n    \"build\"\n    \"-p\"\n    name\n    \"-j\"\n    jobs\n    \"@install\"\n    \"@runtest\" {with-test}\n    \"@doc\" {with-doc}\n  ]\n]\ndev-repo: \"git+https://github.com/{{ github_username }}/{{ project_slug }}.git\"\n"

  let d_ada646288dc3fdd569756a66b8430826 = "profile = sparse\nbreak-cases = nested\nbreak-fun-decl = smart\ncases-exp-indent = 2\nif-then-else = fit-or-vertical\nparens-tuple = multi-line-only\nparens-tuple-patterns = multi-line-only\nparens-ite = false\ninfix-precedence = parens\nbreak-infix-before-func = false\nsequence-style = terminator\nsequence-blank-line = compact\nindicate-multiline-delimiters = no\nocp-indent-compat = true\nwrap-comments = true\nparse-docstrings = true\nlet-binding-spacing = compact\ntype-decl = sparse"

  let d_bd62c2894765315d27c49c40b3aa987e = "open {{ project_snake | capitalize }}\n\n(** Main entry point for our application. *)\n\nlet () = print_endline @@ Utils.greet \"World\"\n"

  let d_d171486544dcbe78f38c1a38010b058d = "(** Main entry point for our application. *)\n"

  let d_ea2b09bcd1ac1de9bb8e93dee89e8e18 = "# bin\n\nNative project containing a binary.\n\n```bash\nspin new bin\n```\n\n## Acknowledgments\n\nThis template is inspired by these awesome projects:\n\n- [hello-reason](https://github.com/esy-ocaml/hello-reason) - An example esy-powered Reason project.\n- [pesy-reason-template](https://github.com/esy/pesy-reason-template) - Default template for pesy.\n"

  let d_f119cfbbe8503d940958eaa2f59e215e = "(** Initialize the test framework.\n\n    Here we are specifying where snapshots should be stored as well as the root\n    directory of the project for the formatting of terminal output. *)\n\ninclude Rely.Make (struct\n  let config =\n    Rely.TestFrameworkConfig.initialize\n      { snapshotDir = \"test/_snapshots\"; projectDir = \"\" }\nend)\n"

  let d_f38d291237783bba8088527af89489ee = "ifeq (start,$(firstword $(MAKECMDGOALS)))\n  START_ARGS := $(wordlist 2,$(words $(MAKECMDGOALS)),$(MAKECMDGOALS))\n  $(eval $(START_ARGS):;@:)\nendif\n\n.PHONY: all\nall:\n\topam exec -- dune build @install\n\n.PHONY: dev\ndev:\n\topam install -y dune-release merlin ocamlformat utop\n\t{%- if test_framework == 'Rely' %}\n\topam pin add -y pastel https://github.com/facebookexperimental/reason-native.git\n\topam pin add -y cli https://github.com/facebookexperimental/reason-native.git\n\topam pin add -y file-context-printer https://github.com/facebookexperimental/reason-native.git\n\topam pin add -y rely https://github.com/facebookexperimental/reason-native.git\n\t{%- endif %}\n\topam install --deps-only --with-test --with-doc -y .\n\n.PHONY: build\nbuild:\n\topam exec -- dune build\n\n.PHONY: install\ninstall:\n\topam exec -- dune install\n\n.PHONY: start\nstart: all\n\topam exec -- dune exec bin/main.exe $(START_ARGS)\n\n.PHONY: test\ntest:\n\topam exec -- {% if test_framework == 'Rely' %}dune exec test/test_runner.exe{% else %}dune build @test/runtest -f{% endif %}\n\n.PHONY: clean\nclean:\n\topam exec -- dune clean\n\n.PHONY: doc\ndoc:\n\topam exec -- dune build @doc\n\n.PHONY: doc-path\ndoc-path:\n\t@echo \"_build/default/_doc/_html/index.html\"\n\n.PHONY: format\nformat:\n\topam exec -- dune build @fmt --auto-promote\n\n.PHONY: watch\nwatch:\n\topam exec -- dune build --watch\n\n.PHONY: utop\nutop:\n\topam exec -- dune utop lib -- -implicit-bindings\n"

  let d_fa7384dc7347bc2553747f14d3c6fc32 = "{\n  \"name\": \"{{ project_slug }}\",\n  \"esy\": {\n    \"build\": \"dune build -p #{self.name}\",\n    {%- if syntax == 'Reason' %}\n    \"buildDev\": \"refmterr dune build --root . --only-package #{self.name}\",\n    {% else %}\n    \"buildDev\": \"dune build --root . --only-package #{self.name}\",\n    {% endif -%}\n    \"buildEnv\": {\n      \"ODOC_SYNTAX\": \"{% if syntax == 'Reason' %}re{% else %}ml{% endif %}\"\n    }\n  },\n  \"dependencies\": {\n    \"@opam/dune\": \">= 2.0\",\n    {%- if syntax == 'Reason' %}\n    \"@opam/reason\": \"*\",\n    {%- endif %}\n    \"ocaml\": \">= 4.8.1000\"\n  },\n  \"devDependencies\": {\n    {% if test_framework == 'Alcotest' -%}\n    \"@opam/alcotest\": \"*\",\n    {% endif -%}\n    \"@opam/dune-release\": \"*\",\n    \"@opam/merlin\": \"*\",\n    {% if syntax == 'OCaml' -%}\n    \"@opam/ocamlformat\": \"*\",\n    {% endif -%}\n    \"@opam/odoc\": \"*\",\n    \"@opam/utop\": \"*\",\n    {% if test_framework == 'Rely' -%}\n    \"@reason-native/rely\": \"*\",\n    {%- endif -%}\n    {%- if syntax == 'Reason' %}\n    \"refmterr\": \">= 3.3.0\",\n    {%- endif %}\n    \"ocaml\": \"~4.09.0\"\n  },\n  \"scripts\": {\n    \"start\": \"esy x main\",\n    \"test\": \"esy {% if test_framework == 'Rely' %}dune exec test/test_runner.exe{% else %}dune build @test/runtest -f{% endif %}\",\n    \"doc\": \"esy dune build @doc\",\n    \"doc-path\": \"esy echo #{self.target_dir}/default/_doc/_html/index.html\",\n    \"format\": \"esy dune build @fmt --auto-promote\",\n    \"watch\": \"esy dune build -p #{self.name} --watch\",\n    \"utop\": \"esy dune utop lib -- -implicit-bindings\"\n  }\n}"

  let file_chunks = function
    | "README.md" | "/README.md" -> Some [ d_ea2b09bcd1ac1de9bb8e93dee89e8e18; ]
    | "spin" | "/spin" -> Some [ d_72bcae06e663ac12514922e810b34108; ]
    | "template/.gitattributes" | "/template/.gitattributes" -> Some [ d_9259c59c4360d349661ec1b827f8b459; ]
    | "template/.gitignore" | "/template/.gitignore" -> Some [ d_67a6fe7f9907d4c763ae341f1b48520f; ]
    | "template/.ocamlformat" | "/template/.ocamlformat" -> Some [ d_ada646288dc3fdd569756a66b8430826; ]
    | "template/CHANGES.md" | "/template/CHANGES.md" -> Some [ d_132072893c4898750d2418b319b29683; ]
    | "template/CONTRIBUTING.md" | "/template/CONTRIBUTING.md" -> Some [ d_53fc07b4ed3efdd7428f9dfc039fd9b0; ]
    | "template/LICENSE" | "/template/LICENSE" -> Some [ d_26624629ac302b31c7028b2f85d1437f; ]
    | "template/Makefile" | "/template/Makefile" -> Some [ d_f38d291237783bba8088527af89489ee; ]
    | "template/README.md" | "/template/README.md" -> Some [ d_2953c63d6b7001b2333aa6d1f0fa49a7; ]
    | "template/bin/dune" | "/template/bin/dune" -> Some [ d_1237ff6c780eba5569308125f0c665aa; ]
    | "template/bin/main.ml" | "/template/bin/main.ml" -> Some [ d_bd62c2894765315d27c49c40b3aa987e; ]
    | "template/bin/main.mli" | "/template/bin/main.mli" -> Some [ d_d171486544dcbe78f38c1a38010b058d; ]
    | "template/dune" | "/template/dune" -> Some [ d_6e1115889eb69926a1c2c30f62bf2c3c; ]
    | "template/dune-project" | "/template/dune-project" -> Some [ d_7ec0ecd10e38a79154a479759546528e; ]
    | "template/esy.json" | "/template/esy.json" -> Some [ d_fa7384dc7347bc2553747f14d3c6fc32; ]
    | "template/github/workflows/ci.yml" | "/template/github/workflows/ci.yml" -> Some [ d_051a88b0e6b49747bfd810b00ed1be49; ]
    | "template/lib/dune" | "/template/lib/dune" -> Some [ d_6e7dd3e0d0807f407ca58813149368cf; ]
    | "template/lib/utils.ml" | "/template/lib/utils.ml" -> Some [ d_19be71cf8e481a8a7c188d8ba64f37a6; ]
    | "template/lib/utils.mli" | "/template/lib/utils.mli" -> Some [ d_74af67b7565e3cc935eb9f22375a9aab; ]
    | "template/test/dune" | "/template/test/dune" -> Some [ d_294e21980329963f8c4fbb361c23c359; ]
    | "template/test/support/test_framework.ml" | "/template/test/support/test_framework.ml" -> Some [ d_f119cfbbe8503d940958eaa2f59e215e; ]
    | "template/test/support/test_runner.ml" | "/template/test/support/test_runner.ml" -> Some [ d_2f5148d85d16e0e800f592231d12da07; ]
    | "template/test/utils_test.ml" | "/template/test/utils_test.ml" -> Some [ d_8eaf15ff4849a95f5d0d4db844a92b66; ]
    | "template/{{ project_slug }}.opam" | "/template/{{ project_slug }}.opam" -> Some [ d_a9ae90c99b4bd03c4b1e8ffa0df76909; ]
    | "template/{{ project_slug }}.opam.template" | "/template/{{ project_slug }}.opam.template" -> Some [ d_910dbe5235098137b0ba12488b29e488; ]
    | _ -> None

  let file_list = [ "README.md"; "spin"; "template/.gitattributes"; "template/.gitignore"; "template/.ocamlformat"; "template/CHANGES.md"; "template/CONTRIBUTING.md"; "template/LICENSE"; "template/Makefile"; "template/README.md"; "template/bin/dune"; "template/bin/main.ml"; "template/bin/main.mli"; "template/dune"; "template/dune-project"; "template/esy.json"; "template/github/workflows/ci.yml"; "template/lib/dune"; "template/lib/utils.ml"; "template/lib/utils.mli"; "template/test/dune"; "template/test/support/test_framework.ml"; "template/test/support/test_runner.ml"; "template/test/utils_test.ml"; "template/{{ project_slug }}.opam"; "template/{{ project_slug }}.opam.template"; ]
end

let file_list = Internal.file_list

let read name =
  match Internal.file_chunks name with
  | None -> None
  | Some c -> Some (String.concat "" c)

let hash = function
  | "README.md" | "/README.md" -> Some "ea2b09bcd1ac1de9bb8e93dee89e8e18"
  | "spin" | "/spin" -> Some "72bcae06e663ac12514922e810b34108"
  | "template/.gitattributes" | "/template/.gitattributes" -> Some "9259c59c4360d349661ec1b827f8b459"
  | "template/.gitignore" | "/template/.gitignore" -> Some "67a6fe7f9907d4c763ae341f1b48520f"
  | "template/.ocamlformat" | "/template/.ocamlformat" -> Some "ada646288dc3fdd569756a66b8430826"
  | "template/CHANGES.md" | "/template/CHANGES.md" -> Some "132072893c4898750d2418b319b29683"
  | "template/CONTRIBUTING.md" | "/template/CONTRIBUTING.md" -> Some "53fc07b4ed3efdd7428f9dfc039fd9b0"
  | "template/LICENSE" | "/template/LICENSE" -> Some "26624629ac302b31c7028b2f85d1437f"
  | "template/Makefile" | "/template/Makefile" -> Some "f38d291237783bba8088527af89489ee"
  | "template/README.md" | "/template/README.md" -> Some "2953c63d6b7001b2333aa6d1f0fa49a7"
  | "template/bin/dune" | "/template/bin/dune" -> Some "1237ff6c780eba5569308125f0c665aa"
  | "template/bin/main.ml" | "/template/bin/main.ml" -> Some "bd62c2894765315d27c49c40b3aa987e"
  | "template/bin/main.mli" | "/template/bin/main.mli" -> Some "d171486544dcbe78f38c1a38010b058d"
  | "template/dune" | "/template/dune" -> Some "6e1115889eb69926a1c2c30f62bf2c3c"
  | "template/dune-project" | "/template/dune-project" -> Some "7ec0ecd10e38a79154a479759546528e"
  | "template/esy.json" | "/template/esy.json" -> Some "fa7384dc7347bc2553747f14d3c6fc32"
  | "template/github/workflows/ci.yml" | "/template/github/workflows/ci.yml" -> Some "051a88b0e6b49747bfd810b00ed1be49"
  | "template/lib/dune" | "/template/lib/dune" -> Some "6e7dd3e0d0807f407ca58813149368cf"
  | "template/lib/utils.ml" | "/template/lib/utils.ml" -> Some "19be71cf8e481a8a7c188d8ba64f37a6"
  | "template/lib/utils.mli" | "/template/lib/utils.mli" -> Some "74af67b7565e3cc935eb9f22375a9aab"
  | "template/test/dune" | "/template/test/dune" -> Some "294e21980329963f8c4fbb361c23c359"
  | "template/test/support/test_framework.ml" | "/template/test/support/test_framework.ml" -> Some "f119cfbbe8503d940958eaa2f59e215e"
  | "template/test/support/test_runner.ml" | "/template/test/support/test_runner.ml" -> Some "2f5148d85d16e0e800f592231d12da07"
  | "template/test/utils_test.ml" | "/template/test/utils_test.ml" -> Some "8eaf15ff4849a95f5d0d4db844a92b66"
  | "template/{{ project_slug }}.opam" | "/template/{{ project_slug }}.opam" -> Some "a9ae90c99b4bd03c4b1e8ffa0df76909"
  | "template/{{ project_slug }}.opam.template" | "/template/{{ project_slug }}.opam.template" -> Some "910dbe5235098137b0ba12488b29e488"
  | _ -> None

let size = function
  | "README.md" | "/README.md" -> Some 344
  | "spin" | "/spin" -> Some 2911
  | "template/.gitattributes" | "/template/.gitattributes" -> Some 760
  | "template/.gitignore" | "/template/.gitignore" -> Some 330
  | "template/.ocamlformat" | "/template/.ocamlformat" -> Some 472
  | "template/CHANGES.md" | "/template/CHANGES.md" -> Some 50
  | "template/CONTRIBUTING.md" | "/template/CONTRIBUTING.md" -> Some 2996
  | "template/LICENSE" | "/template/LICENSE" -> Some 1070
  | "template/Makefile" | "/template/Makefile" -> Some 1398
  | "template/README.md" | "/template/README.md" -> Some 384
  | "template/bin/dune" | "/template/bin/dune" -> Some 160
  | "template/bin/main.ml" | "/template/bin/main.ml" -> Some 131
  | "template/bin/main.mli" | "/template/bin/main.mli" -> Some 45
  | "template/dune" | "/template/dune" -> Some 120
  | "template/dune-project" | "/template/dune-project" -> Some 790
  | "template/esy.json" | "/template/esy.json" -> Some 1492
  | "template/github/workflows/ci.yml" | "/template/github/workflows/ci.yml" -> Some 2051
  | "template/lib/dune" | "/template/lib/dune" -> Some 140
  | "template/lib/utils.ml" | "/template/lib/utils.ml" -> Some 39
  | "template/lib/utils.mli" | "/template/lib/utils.mli" -> Some 214
  | "template/test/dune" | "/template/test/dune" -> Some 665
  | "template/test/support/test_framework.ml" | "/template/test/support/test_framework.ml" -> Some 333
  | "template/test/support/test_runner.ml" | "/template/test/support/test_runner.ml" -> Some 799
  | "template/test/utils_test.ml" | "/template/test/utils_test.ml" -> Some 873
  | "template/{{ project_slug }}.opam" | "/template/{{ project_slug }}.opam" -> Some 1038
  | "template/{{ project_slug }}.opam.template" | "/template/{{ project_slug }}.opam.template" -> Some 198
  | _ -> None
OCaml

Innovation. Community. Security.