From e2a1ff3cc656d33e67c7b2ff39f115b3295b0953 Mon Sep 17 00:00:00 2001 From: jared <> Date: Sat, 13 Apr 2024 00:43:45 -0600 Subject: [PATCH] Draft spinning up all the executables (not including dens-query) --- dens-testsuites/build.nix | 6 +- dens-testsuites/integration/.gitignore | 135 ++ dens-testsuites/integration/build.nix | 46 + dens-testsuites/integration/package-lock.json | 1158 +++++++++++++++++ dens-testsuites/integration/package.json | 27 + .../integration/src/lib/services.ts | 414 ++++++ .../integration/src/lib/tsconfig.json | 4 + dens-testsuites/integration/src/lib/utils.ts | 49 + .../integration/src/tests/more-valid-test.ts | 12 + .../integration/src/tests/tsconfig.json | 7 + .../integration/src/tests/valid-test.ts | 12 + .../integration/src/tsconfig-base.json | 109 ++ dens-testsuites/integration/src/tsconfig.json | 8 + flake.nix | 4 +- 14 files changed, 1989 insertions(+), 2 deletions(-) create mode 100644 dens-testsuites/integration/.gitignore create mode 100644 dens-testsuites/integration/build.nix create mode 100644 dens-testsuites/integration/package-lock.json create mode 100644 dens-testsuites/integration/package.json create mode 100644 dens-testsuites/integration/src/lib/services.ts create mode 100644 dens-testsuites/integration/src/lib/tsconfig.json create mode 100644 dens-testsuites/integration/src/lib/utils.ts create mode 100644 dens-testsuites/integration/src/tests/more-valid-test.ts create mode 100644 dens-testsuites/integration/src/tests/tsconfig.json create mode 100644 dens-testsuites/integration/src/tests/valid-test.ts create mode 100644 dens-testsuites/integration/src/tsconfig-base.json create mode 100644 dens-testsuites/integration/src/tsconfig.json diff --git a/dens-testsuites/build.nix b/dens-testsuites/build.nix index 40ba207..bb2d6c1 100644 --- a/dens-testsuites/build.nix +++ b/dens-testsuites/build.nix @@ -1,5 +1,9 @@ # TODO(jaredponn): put the entire thing (services, cardano, databases, clis) glued together for test suites _: { - imports = [ ./test-vm/build.nix ]; + imports = + [ + ./test-vm/build.nix + ./integration/build.nix + ]; } diff --git a/dens-testsuites/integration/.gitignore b/dens-testsuites/integration/.gitignore new file mode 100644 index 0000000..a807bfa --- /dev/null +++ b/dens-testsuites/integration/.gitignore @@ -0,0 +1,135 @@ +# Ignore extra dependencies provided by nix +.extra-dependencies +node_modules +data + +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +lerna-debug.log* +.pnpm-debug.log* + +# Diagnostic reports (https://nodejs.org/api/report.html) +report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json + +# Runtime data +pids +*.pid +*.seed +*.pid.lock + +# Directory for instrumented libs generated by jscoverage/JSCover +lib-cov + +# Coverage directory used by tools like istanbul +coverage +*.lcov + +# nyc test coverage +.nyc_output + +# Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files) +.grunt + +# Bower dependency directory (https://bower.io/) +bower_components + +# node-waf configuration +.lock-wscript + +# Compiled binary addons (https://nodejs.org/api/addons.html) +build/Release + +# Dependency directories +node_modules/ +jspm_packages/ + +# Snowpack dependency directory (https://snowpack.dev/) +web_modules/ + +# TypeScript cache +*.tsbuildinfo + +# Optional npm cache directory +.npm + +# Optional eslint cache +.eslintcache + +# Optional stylelint cache +.stylelintcache + +# Microbundle cache +.rpt2_cache/ +.rts2_cache_cjs/ +.rts2_cache_es/ +.rts2_cache_umd/ + +# Optional REPL history +.node_repl_history + +# Output of 'npm pack' +*.tgz + +# Yarn Integrity file +.yarn-integrity + +# dotenv environment variable files +.env +.env.development.local +.env.test.local +.env.production.local +.env.local + +# parcel-bundler cache (https://parceljs.org/) +.cache +.parcel-cache + +# Next.js build output +.next +out + +# Nuxt.js build / generate output +.nuxt +dist + +# Gatsby files +.cache/ +# Comment in the public line in if your project uses Gatsby and not Next.js +# https://nextjs.org/blog/next-9-1#public-directory-support +# public + +# vuepress build output +.vuepress/dist + +# vuepress v2.x temp and cache directory +.temp +.cache + +# Docusaurus cache and generated files +.docusaurus + +# Serverless directories +.serverless/ + +# FuseBox cache +.fusebox/ + +# DynamoDB Local files +.dynamodb/ + +# TernJS port file +.tern-port + +# Stores VSCode versions used for testing VSCode extensions +.vscode-test + +# yarn v2 +.yarn/cache +.yarn/unplugged +.yarn/build-state.yml +.yarn/install-state.gz +.pnp.* diff --git a/dens-testsuites/integration/build.nix b/dens-testsuites/integration/build.nix new file mode 100644 index 0000000..619d63f --- /dev/null +++ b/dens-testsuites/integration/build.nix @@ -0,0 +1,46 @@ +{ inputs, lib, ... }: +{ + imports = [ ]; + config = { + perSystem = { system, config, pkgs, ... }: + let + tsFlake = inputs.flake-lang.lib.${system}.typescriptFlake { + name = "dens-integration"; + src = ./.; + inherit (config.settings) + devShellTools + devShellHook; + + testTools = + [ + pkgs.postgresql + inputs.plutip.packages.${system}."plutip-core:exe:local-cluster" + inputs.ogmios.packages.${system}."ogmios:exe:ogmios" + config.packages.dens-query-cli + ]; + + npmExtraDependencies = + [ + inputs.prelude-typescript.packages.${system}.lib + inputs.plutus-ledger-api-typescript.packages.${system}.lib + + config.packages.lbf-dens-db-typescript + config.packages.lbf-dens-typescript + ]; + }; + in + { + # When developing, in this directory, run + # ```bash + # nix develop .#dens-integration-typescript + # ``` + # and it'll give you some goodies (`node_modules/` for dependencies + + # `./.extra-dependencies`). + devShells = { + inherit (tsFlake.devShells) dens-integration-typescript; + }; + + inherit (tsFlake) checks; + }; + }; +} diff --git a/dens-testsuites/integration/package-lock.json b/dens-testsuites/integration/package-lock.json new file mode 100644 index 0000000..1c230ab --- /dev/null +++ b/dens-testsuites/integration/package-lock.json @@ -0,0 +1,1158 @@ +{ + "name": "dens-integration", + "version": "1.0.0", + "lockfileVersion": 2, + "requires": true, + "packages": { + "": { + "name": "dens-integration", + "version": "1.0.0", + "license": "ISC", + "dependencies": { + "@emurgo/cardano-serialization-lib-nodejs": "^11.5.0", + "chalk": "^4.0.0", + "lbf-dens": "file:.extra-dependencies/lbf-dens", + "lbf-dens-db": "file:.extra-dependencies/lbf-dens-db", + "lbf-plutus": "file:.extra-dependencies/lbf-plutus", + "lbf-prelude": "file:.extra-dependencies/lbf-prelude", + "lbr-plutus": "file:.extra-dependencies/lbr-plutus", + "lbr-prelude": "file:.extra-dependencies/lbr-prelude", + "plutus-ledger-api": "file:.extra-dependencies/plutus-ledger-api", + "prelude": "file:.extra-dependencies/prelude", + "typescript": "^5.4.5" + }, + "devDependencies": { + "@types/node": "^20.12.7" + } + }, + ".extra-dependencies/lbf-dens": { + "version": "1.0.0", + "dependencies": { + "lbf-plutus": "file:.extra-dependencies/lbf-plutus", + "lbf-prelude": "file:.extra-dependencies/lbf-prelude", + "lbr-plutus": "file:.extra-dependencies/lbr-plutus", + "lbr-prelude": "file:.extra-dependencies/lbr-prelude", + "plutus-ledger-api": "file:.extra-dependencies/plutus-ledger-api", + "prelude": "file:.extra-dependencies/prelude" + }, + "devDependencies": { + "typescript": "^5.3.3" + } + }, + ".extra-dependencies/lbf-dens-db": { + "version": "1.0.0", + "dependencies": { + "lbf-dens": "file:.extra-dependencies/lbf-dens", + "lbf-plutus": "file:.extra-dependencies/lbf-plutus", + "lbf-prelude": "file:.extra-dependencies/lbf-prelude", + "lbr-plutus": "file:.extra-dependencies/lbr-plutus", + "lbr-prelude": "file:.extra-dependencies/lbr-prelude", + "plutus-ledger-api": "file:.extra-dependencies/plutus-ledger-api", + "prelude": "file:.extra-dependencies/prelude" + }, + "devDependencies": { + "typescript": "^5.3.3" + } + }, + ".extra-dependencies/lbf-dens-db/.extra-dependencies/lbf-dens": { + "version": "1.0.0", + "extraneous": true, + "dependencies": { + "lbf-plutus": "file:.extra-dependencies/lbf-plutus", + "lbf-prelude": "file:.extra-dependencies/lbf-prelude", + "lbr-plutus": "file:.extra-dependencies/lbr-plutus", + "lbr-prelude": "file:.extra-dependencies/lbr-prelude", + "plutus-ledger-api": "file:.extra-dependencies/plutus-ledger-api", + "prelude": "file:.extra-dependencies/prelude" + } + }, + ".extra-dependencies/lbf-dens-db/.extra-dependencies/lbf-dens/.extra-dependencies/lbf-plutus": { + "version": "1.0.0", + "extraneous": true, + "dependencies": { + "lbf-prelude": "file:.extra-dependencies/lbf-prelude", + "lbr-plutus": "file:.extra-dependencies/lbr-plutus", + "lbr-prelude": "file:.extra-dependencies/lbr-prelude", + "plutus-ledger-api": "file:.extra-dependencies/plutus-ledger-api", + "prelude": "file:.extra-dependencies/prelude" + } + }, + ".extra-dependencies/lbf-dens-db/.extra-dependencies/lbf-dens/.extra-dependencies/lbf-prelude": { + "version": "1.0.0", + "extraneous": true, + "dependencies": { + "lbr-prelude": "file:.extra-dependencies/lbr-prelude", + "prelude": "file:.extra-dependencies/prelude" + } + }, + ".extra-dependencies/lbf-dens-db/.extra-dependencies/lbf-dens/.extra-dependencies/lbr-plutus": { + "version": "1.0.0", + "extraneous": true, + "license": "ISC", + "dependencies": { + "lbr-prelude": "file:.extra-dependencies/lbr-prelude", + "plutus-ledger-api": "file:.extra-dependencies/plutus-ledger-api", + "prelude": "file:.extra-dependencies/prelude" + } + }, + ".extra-dependencies/lbf-dens-db/.extra-dependencies/lbf-dens/.extra-dependencies/lbr-prelude": { + "version": "1.0.0", + "extraneous": true, + "license": "ISC", + "dependencies": { + "prelude": "file:.extra-dependencies/prelude" + } + }, + ".extra-dependencies/lbf-dens-db/.extra-dependencies/lbf-dens/.extra-dependencies/plutus-ledger-api": { + "version": "1.0.0", + "extraneous": true, + "license": "ISC", + "dependencies": { + "prelude": "file:.extra-dependencies/prelude" + } + }, + ".extra-dependencies/lbf-dens-db/.extra-dependencies/lbf-dens/.extra-dependencies/prelude": { + "version": "1.0.1", + "extraneous": true, + "license": "ISC" + }, + ".extra-dependencies/lbf-dens-db/.extra-dependencies/lbf-plutus": { + "version": "1.0.0", + "extraneous": true, + "dependencies": { + "lbf-prelude": "file:.extra-dependencies/lbf-prelude", + "lbr-plutus": "file:.extra-dependencies/lbr-plutus", + "lbr-prelude": "file:.extra-dependencies/lbr-prelude", + "plutus-ledger-api": "file:.extra-dependencies/plutus-ledger-api", + "prelude": "file:.extra-dependencies/prelude" + } + }, + ".extra-dependencies/lbf-dens-db/.extra-dependencies/lbf-plutus/.extra-dependencies/lbf-prelude": { + "version": "1.0.0", + "extraneous": true, + "dependencies": { + "lbr-prelude": "file:.extra-dependencies/lbr-prelude", + "prelude": "file:.extra-dependencies/prelude" + } + }, + ".extra-dependencies/lbf-dens-db/.extra-dependencies/lbf-plutus/.extra-dependencies/lbr-plutus": { + "version": "1.0.0", + "extraneous": true, + "license": "ISC", + "dependencies": { + "lbr-prelude": "file:.extra-dependencies/lbr-prelude", + "plutus-ledger-api": "file:.extra-dependencies/plutus-ledger-api", + "prelude": "file:.extra-dependencies/prelude" + } + }, + ".extra-dependencies/lbf-dens-db/.extra-dependencies/lbf-plutus/.extra-dependencies/lbr-prelude": { + "version": "1.0.0", + "extraneous": true, + "license": "ISC", + "dependencies": { + "prelude": "file:.extra-dependencies/prelude" + } + }, + ".extra-dependencies/lbf-dens-db/.extra-dependencies/lbf-plutus/.extra-dependencies/plutus-ledger-api": { + "version": "1.0.0", + "extraneous": true, + "license": "ISC", + "dependencies": { + "prelude": "file:.extra-dependencies/prelude" + } + }, + ".extra-dependencies/lbf-dens-db/.extra-dependencies/lbf-plutus/.extra-dependencies/prelude": { + "version": "1.0.1", + "extraneous": true, + "license": "ISC" + }, + ".extra-dependencies/lbf-dens-db/.extra-dependencies/lbf-prelude": { + "version": "1.0.0", + "extraneous": true, + "dependencies": { + "lbr-prelude": "file:.extra-dependencies/lbr-prelude", + "prelude": "file:.extra-dependencies/prelude" + } + }, + ".extra-dependencies/lbf-dens-db/.extra-dependencies/lbf-prelude/.extra-dependencies/lbr-prelude": { + "version": "1.0.0", + "extraneous": true, + "license": "ISC", + "dependencies": { + "prelude": "file:.extra-dependencies/prelude" + } + }, + ".extra-dependencies/lbf-dens-db/.extra-dependencies/lbf-prelude/.extra-dependencies/prelude": { + "version": "1.0.1", + "extraneous": true, + "license": "ISC" + }, + ".extra-dependencies/lbf-dens-db/.extra-dependencies/lbr-plutus": { + "version": "1.0.0", + "extraneous": true, + "license": "ISC", + "dependencies": { + "lbr-prelude": "file:.extra-dependencies/lbr-prelude", + "plutus-ledger-api": "file:.extra-dependencies/plutus-ledger-api", + "prelude": "file:.extra-dependencies/prelude" + } + }, + ".extra-dependencies/lbf-dens-db/.extra-dependencies/lbr-plutus/.extra-dependencies/lbr-prelude": { + "version": "1.0.0", + "extraneous": true, + "license": "ISC", + "dependencies": { + "prelude": "file:.extra-dependencies/prelude" + } + }, + ".extra-dependencies/lbf-dens-db/.extra-dependencies/lbr-plutus/.extra-dependencies/plutus-ledger-api": { + "version": "1.0.0", + "extraneous": true, + "license": "ISC", + "dependencies": { + "prelude": "file:.extra-dependencies/prelude" + } + }, + ".extra-dependencies/lbf-dens-db/.extra-dependencies/lbr-plutus/.extra-dependencies/prelude": { + "version": "1.0.1", + "extraneous": true, + "license": "ISC" + }, + ".extra-dependencies/lbf-dens-db/.extra-dependencies/lbr-prelude": { + "version": "1.0.0", + "extraneous": true, + "license": "ISC", + "dependencies": { + "prelude": "file:.extra-dependencies/prelude" + } + }, + ".extra-dependencies/lbf-dens-db/.extra-dependencies/lbr-prelude/.extra-dependencies/prelude": { + "version": "1.0.1", + "extraneous": true, + "license": "ISC" + }, + ".extra-dependencies/lbf-dens-db/.extra-dependencies/plutus-ledger-api": { + "version": "1.0.0", + "extraneous": true, + "license": "ISC", + "dependencies": { + "prelude": "file:.extra-dependencies/prelude" + } + }, + ".extra-dependencies/lbf-dens-db/.extra-dependencies/plutus-ledger-api/.extra-dependencies/prelude": { + "version": "1.0.1", + "extraneous": true, + "license": "ISC" + }, + ".extra-dependencies/lbf-dens-db/.extra-dependencies/prelude": { + "version": "1.0.1", + "extraneous": true, + "license": "ISC" + }, + ".extra-dependencies/lbf-dens/.extra-dependencies/lbf-plutus": { + "version": "1.0.0", + "extraneous": true, + "dependencies": { + "lbf-prelude": "file:.extra-dependencies/lbf-prelude", + "lbr-plutus": "file:.extra-dependencies/lbr-plutus", + "lbr-prelude": "file:.extra-dependencies/lbr-prelude", + "plutus-ledger-api": "file:.extra-dependencies/plutus-ledger-api", + "prelude": "file:.extra-dependencies/prelude" + } + }, + ".extra-dependencies/lbf-dens/.extra-dependencies/lbf-plutus/.extra-dependencies/lbf-prelude": { + "version": "1.0.0", + "extraneous": true, + "dependencies": { + "lbr-prelude": "file:.extra-dependencies/lbr-prelude", + "prelude": "file:.extra-dependencies/prelude" + } + }, + ".extra-dependencies/lbf-dens/.extra-dependencies/lbf-plutus/.extra-dependencies/lbr-plutus": { + "version": "1.0.0", + "extraneous": true, + "license": "ISC", + "dependencies": { + "lbr-prelude": "file:.extra-dependencies/lbr-prelude", + "plutus-ledger-api": "file:.extra-dependencies/plutus-ledger-api", + "prelude": "file:.extra-dependencies/prelude" + } + }, + ".extra-dependencies/lbf-dens/.extra-dependencies/lbf-plutus/.extra-dependencies/lbr-prelude": { + "version": "1.0.0", + "extraneous": true, + "license": "ISC", + "dependencies": { + "prelude": "file:.extra-dependencies/prelude" + } + }, + ".extra-dependencies/lbf-dens/.extra-dependencies/lbf-plutus/.extra-dependencies/plutus-ledger-api": { + "version": "1.0.0", + "extraneous": true, + "license": "ISC", + "dependencies": { + "prelude": "file:.extra-dependencies/prelude" + } + }, + ".extra-dependencies/lbf-dens/.extra-dependencies/lbf-plutus/.extra-dependencies/prelude": { + "version": "1.0.1", + "extraneous": true, + "license": "ISC" + }, + ".extra-dependencies/lbf-dens/.extra-dependencies/lbf-prelude": { + "version": "1.0.0", + "extraneous": true, + "dependencies": { + "lbr-prelude": "file:.extra-dependencies/lbr-prelude", + "prelude": "file:.extra-dependencies/prelude" + } + }, + ".extra-dependencies/lbf-dens/.extra-dependencies/lbf-prelude/.extra-dependencies/lbr-prelude": { + "version": "1.0.0", + "extraneous": true, + "license": "ISC", + "dependencies": { + "prelude": "file:.extra-dependencies/prelude" + } + }, + ".extra-dependencies/lbf-dens/.extra-dependencies/lbf-prelude/.extra-dependencies/prelude": { + "version": "1.0.1", + "extraneous": true, + "license": "ISC" + }, + ".extra-dependencies/lbf-dens/.extra-dependencies/lbr-plutus": { + "version": "1.0.0", + "extraneous": true, + "license": "ISC", + "dependencies": { + "lbr-prelude": "file:.extra-dependencies/lbr-prelude", + "plutus-ledger-api": "file:.extra-dependencies/plutus-ledger-api", + "prelude": "file:.extra-dependencies/prelude" + } + }, + ".extra-dependencies/lbf-dens/.extra-dependencies/lbr-plutus/.extra-dependencies/lbr-prelude": { + "version": "1.0.0", + "extraneous": true, + "license": "ISC", + "dependencies": { + "prelude": "file:.extra-dependencies/prelude" + } + }, + ".extra-dependencies/lbf-dens/.extra-dependencies/lbr-plutus/.extra-dependencies/plutus-ledger-api": { + "version": "1.0.0", + "extraneous": true, + "license": "ISC", + "dependencies": { + "prelude": "file:.extra-dependencies/prelude" + } + }, + ".extra-dependencies/lbf-dens/.extra-dependencies/lbr-plutus/.extra-dependencies/prelude": { + "version": "1.0.1", + "extraneous": true, + "license": "ISC" + }, + ".extra-dependencies/lbf-dens/.extra-dependencies/lbr-prelude": { + "version": "1.0.0", + "extraneous": true, + "license": "ISC", + "dependencies": { + "prelude": "file:.extra-dependencies/prelude" + } + }, + ".extra-dependencies/lbf-dens/.extra-dependencies/lbr-prelude/.extra-dependencies/prelude": { + "version": "1.0.1", + "extraneous": true, + "license": "ISC" + }, + ".extra-dependencies/lbf-dens/.extra-dependencies/plutus-ledger-api": { + "version": "1.0.0", + "extraneous": true, + "license": "ISC", + "dependencies": { + "prelude": "file:.extra-dependencies/prelude" + } + }, + ".extra-dependencies/lbf-dens/.extra-dependencies/plutus-ledger-api/.extra-dependencies/prelude": { + "version": "1.0.1", + "extraneous": true, + "license": "ISC" + }, + ".extra-dependencies/lbf-dens/.extra-dependencies/prelude": { + "version": "1.0.1", + "extraneous": true, + "license": "ISC" + }, + ".extra-dependencies/lbf-plutus": { + "version": "1.0.0", + "dependencies": { + "lbf-prelude": "file:.extra-dependencies/lbf-prelude", + "lbr-plutus": "file:.extra-dependencies/lbr-plutus", + "lbr-prelude": "file:.extra-dependencies/lbr-prelude", + "plutus-ledger-api": "file:.extra-dependencies/plutus-ledger-api", + "prelude": "file:.extra-dependencies/prelude" + }, + "devDependencies": { + "typescript": "^5.3.3" + } + }, + ".extra-dependencies/lbf-plutus/.extra-dependencies/lbf-prelude": { + "version": "1.0.0", + "extraneous": true, + "dependencies": { + "lbr-prelude": "file:.extra-dependencies/lbr-prelude", + "prelude": "file:.extra-dependencies/prelude" + } + }, + ".extra-dependencies/lbf-plutus/.extra-dependencies/lbf-prelude/.extra-dependencies/lbr-prelude": { + "version": "1.0.0", + "extraneous": true, + "license": "ISC", + "dependencies": { + "prelude": "file:.extra-dependencies/prelude" + } + }, + ".extra-dependencies/lbf-plutus/.extra-dependencies/lbf-prelude/.extra-dependencies/prelude": { + "version": "1.0.1", + "extraneous": true, + "license": "ISC" + }, + ".extra-dependencies/lbf-plutus/.extra-dependencies/lbr-plutus": { + "version": "1.0.0", + "extraneous": true, + "license": "ISC", + "dependencies": { + "lbr-prelude": "file:.extra-dependencies/lbr-prelude", + "plutus-ledger-api": "file:.extra-dependencies/plutus-ledger-api", + "prelude": "file:.extra-dependencies/prelude" + } + }, + ".extra-dependencies/lbf-plutus/.extra-dependencies/lbr-plutus/.extra-dependencies/lbr-prelude": { + "version": "1.0.0", + "extraneous": true, + "license": "ISC", + "dependencies": { + "prelude": "file:.extra-dependencies/prelude" + } + }, + ".extra-dependencies/lbf-plutus/.extra-dependencies/lbr-plutus/.extra-dependencies/plutus-ledger-api": { + "version": "1.0.0", + "extraneous": true, + "license": "ISC", + "dependencies": { + "prelude": "file:.extra-dependencies/prelude" + } + }, + ".extra-dependencies/lbf-plutus/.extra-dependencies/lbr-plutus/.extra-dependencies/prelude": { + "version": "1.0.1", + "extraneous": true, + "license": "ISC" + }, + ".extra-dependencies/lbf-plutus/.extra-dependencies/lbr-prelude": { + "version": "1.0.0", + "extraneous": true, + "license": "ISC", + "dependencies": { + "prelude": "file:.extra-dependencies/prelude" + } + }, + ".extra-dependencies/lbf-plutus/.extra-dependencies/lbr-prelude/.extra-dependencies/prelude": { + "version": "1.0.1", + "extraneous": true, + "license": "ISC" + }, + ".extra-dependencies/lbf-plutus/.extra-dependencies/plutus-ledger-api": { + "version": "1.0.0", + "extraneous": true, + "license": "ISC", + "dependencies": { + "prelude": "file:.extra-dependencies/prelude" + } + }, + ".extra-dependencies/lbf-plutus/.extra-dependencies/plutus-ledger-api/.extra-dependencies/prelude": { + "version": "1.0.1", + "extraneous": true, + "license": "ISC" + }, + ".extra-dependencies/lbf-plutus/.extra-dependencies/prelude": { + "version": "1.0.1", + "extraneous": true, + "license": "ISC" + }, + ".extra-dependencies/lbf-prelude": { + "version": "1.0.0", + "dependencies": { + "lbr-prelude": "file:.extra-dependencies/lbr-prelude", + "prelude": "file:.extra-dependencies/prelude" + }, + "devDependencies": { + "typescript": "^5.3.3" + } + }, + ".extra-dependencies/lbf-prelude/.extra-dependencies/lbr-prelude": { + "version": "1.0.0", + "extraneous": true, + "license": "ISC", + "dependencies": { + "prelude": "file:.extra-dependencies/prelude" + } + }, + ".extra-dependencies/lbf-prelude/.extra-dependencies/lbr-prelude/.extra-dependencies/prelude": { + "version": "1.0.1", + "extraneous": true, + "license": "ISC" + }, + ".extra-dependencies/lbf-prelude/.extra-dependencies/prelude": { + "version": "1.0.1", + "extraneous": true, + "license": "ISC" + }, + ".extra-dependencies/lbr-plutus": { + "version": "1.0.0", + "license": "ISC", + "dependencies": { + "lbr-prelude": "file:.extra-dependencies/lbr-prelude", + "plutus-ledger-api": "file:.extra-dependencies/plutus-ledger-api", + "prelude": "file:.extra-dependencies/prelude" + }, + "devDependencies": { + "@types/node": "^20.8.10", + "fast-check": "^3.14.0", + "typescript": "^5.2.2" + } + }, + ".extra-dependencies/lbr-plutus/.extra-dependencies/lbr-prelude": { + "version": "1.0.0", + "extraneous": true, + "license": "ISC", + "dependencies": { + "prelude": "file:.extra-dependencies/prelude" + }, + "devDependencies": { + "typescript": "^5.3.3" + } + }, + ".extra-dependencies/lbr-plutus/.extra-dependencies/lbr-prelude/.extra-dependencies/prelude": { + "version": "1.0.1", + "extraneous": true, + "license": "ISC", + "devDependencies": { + "@types/node": "^20.8.10", + "fast-check": "^3.15.1", + "typedoc": "^0.25.4", + "typescript": "^5.2.2" + } + }, + ".extra-dependencies/lbr-plutus/.extra-dependencies/plutus-ledger-api": { + "version": "1.0.0", + "extraneous": true, + "license": "ISC", + "dependencies": { + "prelude": "file:.extra-dependencies/prelude" + }, + "devDependencies": { + "@types/node": "^20.8.10", + "fast-check": "^3.14.0", + "typedoc": "^0.25.4", + "typescript": "^5.2.2" + } + }, + ".extra-dependencies/lbr-plutus/.extra-dependencies/plutus-ledger-api/.extra-dependencies/prelude": { + "version": "1.0.1", + "extraneous": true, + "license": "ISC", + "devDependencies": { + "@types/node": "^20.8.10", + "fast-check": "^3.15.1", + "typedoc": "^0.25.4", + "typescript": "^5.2.2" + } + }, + ".extra-dependencies/lbr-plutus/.extra-dependencies/prelude": { + "version": "1.0.1", + "extraneous": true, + "license": "ISC", + "devDependencies": { + "@types/node": "^20.8.10", + "fast-check": "^3.15.1", + "typedoc": "^0.25.4", + "typescript": "^5.2.2" + } + }, + ".extra-dependencies/lbr-prelude": { + "version": "1.0.0", + "license": "ISC", + "dependencies": { + "prelude": "file:.extra-dependencies/prelude" + }, + "devDependencies": { + "typescript": "^5.3.3" + } + }, + ".extra-dependencies/lbr-prelude/.extra-dependencies/prelude": { + "version": "1.0.1", + "extraneous": true, + "license": "ISC", + "devDependencies": { + "@types/node": "^20.8.10", + "fast-check": "^3.15.1", + "typedoc": "^0.25.4", + "typescript": "^5.2.2" + } + }, + ".extra-dependencies/plutus-ledger-api": { + "version": "1.0.0", + "license": "ISC", + "dependencies": { + "prelude": "file:.extra-dependencies/prelude" + }, + "devDependencies": { + "@types/node": "^20.8.10", + "fast-check": "^3.14.0", + "typedoc": "^0.25.4", + "typescript": "^5.2.2" + } + }, + ".extra-dependencies/plutus-ledger-api/.extra-dependencies/prelude": { + "version": "1.0.1", + "extraneous": true, + "license": "ISC", + "devDependencies": { + "@types/node": "^20.8.10", + "fast-check": "^3.15.1", + "typedoc": "^0.25.4", + "typescript": "^5.2.2" + } + }, + ".extra-dependencies/prelude": { + "version": "1.0.1", + "license": "ISC", + "devDependencies": { + "@types/node": "^20.8.10", + "fast-check": "^3.15.1", + "typedoc": "^0.25.4", + "typescript": "^5.2.2" + } + }, + "node_modules/@emurgo/cardano-serialization-lib-nodejs": { + "version": "11.5.0", + "resolved": "https://registry.npmjs.org/@emurgo/cardano-serialization-lib-nodejs/-/cardano-serialization-lib-nodejs-11.5.0.tgz", + "integrity": "sha512-IlVABlRgo9XaTR1NunwZpWcxnfEv04ba2l1vkUz4S1W7Jt36F4CtffP+jPeqBZGnAe+fnUwo0XjIJC3ZTNToNQ==" + }, + "node_modules/@types/node": { + "version": "20.12.7", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.12.7.tgz", + "integrity": "sha512-wq0cICSkRLVaf3UGLMGItu/PtdY7oaXaI/RVU+xliKVOtRna3PRY57ZDfztpDL0n11vfymMUnXv8QwYCO7L1wg==", + "dev": true, + "dependencies": { + "undici-types": "~5.26.4" + } + }, + "node_modules/ansi-sequence-parser": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ansi-sequence-parser/-/ansi-sequence-parser-1.1.1.tgz", + "integrity": "sha512-vJXt3yiaUL4UU546s3rPXlsry/RnM730G1+HkpKE012AN0sx1eOrxSu95oKDIonskeLTijMgqWZ3uDEe3NFvyg==", + "dev": true + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true + }, + "node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "node_modules/fast-check": { + "version": "3.17.1", + "resolved": "https://registry.npmjs.org/fast-check/-/fast-check-3.17.1.tgz", + "integrity": "sha512-jIKXJVe6ZO0SpwEgVtEVujTf8TwjI9wMXFJCjsDHUB3RroUbXBgF4kOSz3A7MW0UR26aqsoB8i9O2mjtjERAiA==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/dubzzz" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/fast-check" + } + ], + "dependencies": { + "pure-rand": "^6.1.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/jsonc-parser": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.1.tgz", + "integrity": "sha512-AilxAyFOAcK5wA1+LeaySVBrHsGQvUFCDWXKpZjzaL0PqW+xfBOttn8GNtWKFWqneyMZj41MWF9Kl6iPWLwgOA==", + "dev": true + }, + "node_modules/lbf-dens": { + "resolved": ".extra-dependencies/lbf-dens", + "link": true + }, + "node_modules/lbf-dens-db": { + "resolved": ".extra-dependencies/lbf-dens-db", + "link": true + }, + "node_modules/lbf-plutus": { + "resolved": ".extra-dependencies/lbf-plutus", + "link": true + }, + "node_modules/lbf-prelude": { + "resolved": ".extra-dependencies/lbf-prelude", + "link": true + }, + "node_modules/lbr-plutus": { + "resolved": ".extra-dependencies/lbr-plutus", + "link": true + }, + "node_modules/lbr-prelude": { + "resolved": ".extra-dependencies/lbr-prelude", + "link": true + }, + "node_modules/lunr": { + "version": "2.3.9", + "resolved": "https://registry.npmjs.org/lunr/-/lunr-2.3.9.tgz", + "integrity": "sha512-zTU3DaZaF3Rt9rhN3uBMGQD3dD2/vFQqnvZCDv4dl5iOzq2IZQqTxu90r4E5J+nP70J3ilqVCrbho2eWaeW8Ow==", + "dev": true + }, + "node_modules/marked": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/marked/-/marked-4.3.0.tgz", + "integrity": "sha512-PRsaiG84bK+AMvxziE/lCFss8juXjNaWzVbN5tXAm4XjeaS9NAHhop+PjQxz2A9h8Q4M/xGmzP8vqNwy6JeK0A==", + "dev": true, + "bin": { + "marked": "bin/marked.js" + }, + "engines": { + "node": ">= 12" + } + }, + "node_modules/minimatch": { + "version": "9.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.4.tgz", + "integrity": "sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/plutus-ledger-api": { + "resolved": ".extra-dependencies/plutus-ledger-api", + "link": true + }, + "node_modules/prelude": { + "resolved": ".extra-dependencies/prelude", + "link": true + }, + "node_modules/pure-rand": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/pure-rand/-/pure-rand-6.1.0.tgz", + "integrity": "sha512-bVWawvoZoBYpp6yIoQtQXHZjmz35RSVHnUOTefl8Vcjr8snTPY1wnpSPMWekcFwbxI6gtmT7rSYPFvz71ldiOA==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/dubzzz" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/fast-check" + } + ] + }, + "node_modules/shiki": { + "version": "0.14.7", + "resolved": "https://registry.npmjs.org/shiki/-/shiki-0.14.7.tgz", + "integrity": "sha512-dNPAPrxSc87ua2sKJ3H5dQ/6ZaY8RNnaAqK+t0eG7p0Soi2ydiqbGOTaZCqaYvA/uZYfS1LJnemt3Q+mSfcPCg==", + "dev": true, + "dependencies": { + "ansi-sequence-parser": "^1.1.0", + "jsonc-parser": "^3.2.0", + "vscode-oniguruma": "^1.7.0", + "vscode-textmate": "^8.0.0" + } + }, + "node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/typedoc": { + "version": "0.25.13", + "resolved": "https://registry.npmjs.org/typedoc/-/typedoc-0.25.13.tgz", + "integrity": "sha512-pQqiwiJ+Z4pigfOnnysObszLiU3mVLWAExSPf+Mu06G/qsc3wzbuM56SZQvONhHLncLUhYzOVkjFFpFfL5AzhQ==", + "dev": true, + "dependencies": { + "lunr": "^2.3.9", + "marked": "^4.3.0", + "minimatch": "^9.0.3", + "shiki": "^0.14.7" + }, + "bin": { + "typedoc": "bin/typedoc" + }, + "engines": { + "node": ">= 16" + }, + "peerDependencies": { + "typescript": "4.6.x || 4.7.x || 4.8.x || 4.9.x || 5.0.x || 5.1.x || 5.2.x || 5.3.x || 5.4.x" + } + }, + "node_modules/typescript": { + "version": "5.4.5", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.4.5.tgz", + "integrity": "sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ==", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/undici-types": { + "version": "5.26.5", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", + "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==", + "dev": true + }, + "node_modules/vscode-oniguruma": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/vscode-oniguruma/-/vscode-oniguruma-1.7.0.tgz", + "integrity": "sha512-L9WMGRfrjOhgHSdOYgCt/yRMsXzLDJSL7BPrOZt73gU0iWO4mpqzqQzOz5srxqTvMBaR0XZTSrVWo4j55Rc6cA==", + "dev": true + }, + "node_modules/vscode-textmate": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/vscode-textmate/-/vscode-textmate-8.0.0.tgz", + "integrity": "sha512-AFbieoL7a5LMqcnOF04ji+rpXadgOXnZsxQr//r83kLPr7biP7am3g9zbaZIaBGwBRWeSvoMD4mgPdX3e4NWBg==", + "dev": true + } + }, + "dependencies": { + "@emurgo/cardano-serialization-lib-nodejs": { + "version": "11.5.0", + "resolved": "https://registry.npmjs.org/@emurgo/cardano-serialization-lib-nodejs/-/cardano-serialization-lib-nodejs-11.5.0.tgz", + "integrity": "sha512-IlVABlRgo9XaTR1NunwZpWcxnfEv04ba2l1vkUz4S1W7Jt36F4CtffP+jPeqBZGnAe+fnUwo0XjIJC3ZTNToNQ==" + }, + "@types/node": { + "version": "20.12.7", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.12.7.tgz", + "integrity": "sha512-wq0cICSkRLVaf3UGLMGItu/PtdY7oaXaI/RVU+xliKVOtRna3PRY57ZDfztpDL0n11vfymMUnXv8QwYCO7L1wg==", + "dev": true, + "requires": { + "undici-types": "~5.26.4" + } + }, + "ansi-sequence-parser": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ansi-sequence-parser/-/ansi-sequence-parser-1.1.1.tgz", + "integrity": "sha512-vJXt3yiaUL4UU546s3rPXlsry/RnM730G1+HkpKE012AN0sx1eOrxSu95oKDIonskeLTijMgqWZ3uDEe3NFvyg==", + "dev": true + }, + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "requires": { + "color-convert": "^2.0.1" + } + }, + "balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true + }, + "brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "requires": { + "balanced-match": "^1.0.0" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "fast-check": { + "version": "3.17.1", + "resolved": "https://registry.npmjs.org/fast-check/-/fast-check-3.17.1.tgz", + "integrity": "sha512-jIKXJVe6ZO0SpwEgVtEVujTf8TwjI9wMXFJCjsDHUB3RroUbXBgF4kOSz3A7MW0UR26aqsoB8i9O2mjtjERAiA==", + "dev": true, + "requires": { + "pure-rand": "^6.1.0" + } + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + }, + "jsonc-parser": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.1.tgz", + "integrity": "sha512-AilxAyFOAcK5wA1+LeaySVBrHsGQvUFCDWXKpZjzaL0PqW+xfBOttn8GNtWKFWqneyMZj41MWF9Kl6iPWLwgOA==", + "dev": true + }, + "lbf-dens": { + "version": "file:.extra-dependencies/lbf-dens", + "requires": { + "lbf-plutus": "file:.extra-dependencies/lbf-plutus", + "lbf-prelude": "file:.extra-dependencies/lbf-prelude", + "lbr-plutus": "file:.extra-dependencies/lbr-plutus", + "lbr-prelude": "file:.extra-dependencies/lbr-prelude", + "plutus-ledger-api": "file:.extra-dependencies/plutus-ledger-api", + "prelude": "file:.extra-dependencies/prelude", + "typescript": "^5.3.3" + } + }, + "lbf-dens-db": { + "version": "file:.extra-dependencies/lbf-dens-db", + "requires": { + "lbf-dens": "file:.extra-dependencies/lbf-dens", + "lbf-plutus": "file:.extra-dependencies/lbf-plutus", + "lbf-prelude": "file:.extra-dependencies/lbf-prelude", + "lbr-plutus": "file:.extra-dependencies/lbr-plutus", + "lbr-prelude": "file:.extra-dependencies/lbr-prelude", + "plutus-ledger-api": "file:.extra-dependencies/plutus-ledger-api", + "prelude": "file:.extra-dependencies/prelude", + "typescript": "^5.3.3" + } + }, + "lbf-plutus": { + "version": "file:.extra-dependencies/lbf-plutus", + "requires": { + "lbf-prelude": "file:.extra-dependencies/lbf-prelude", + "lbr-plutus": "file:.extra-dependencies/lbr-plutus", + "lbr-prelude": "file:.extra-dependencies/lbr-prelude", + "plutus-ledger-api": "file:.extra-dependencies/plutus-ledger-api", + "prelude": "file:.extra-dependencies/prelude", + "typescript": "^5.3.3" + } + }, + "lbf-prelude": { + "version": "file:.extra-dependencies/lbf-prelude", + "requires": { + "lbr-prelude": "file:.extra-dependencies/lbr-prelude", + "prelude": "file:.extra-dependencies/prelude", + "typescript": "^5.3.3" + } + }, + "lbr-plutus": { + "version": "file:.extra-dependencies/lbr-plutus", + "requires": { + "@types/node": "^20.8.10", + "fast-check": "^3.14.0", + "lbr-prelude": "file:.extra-dependencies/lbr-prelude", + "plutus-ledger-api": "file:.extra-dependencies/plutus-ledger-api", + "prelude": "file:.extra-dependencies/prelude", + "typescript": "^5.2.2" + } + }, + "lbr-prelude": { + "version": "file:.extra-dependencies/lbr-prelude", + "requires": { + "prelude": "file:.extra-dependencies/prelude", + "typescript": "^5.3.3" + } + }, + "lunr": { + "version": "2.3.9", + "resolved": "https://registry.npmjs.org/lunr/-/lunr-2.3.9.tgz", + "integrity": "sha512-zTU3DaZaF3Rt9rhN3uBMGQD3dD2/vFQqnvZCDv4dl5iOzq2IZQqTxu90r4E5J+nP70J3ilqVCrbho2eWaeW8Ow==", + "dev": true + }, + "marked": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/marked/-/marked-4.3.0.tgz", + "integrity": "sha512-PRsaiG84bK+AMvxziE/lCFss8juXjNaWzVbN5tXAm4XjeaS9NAHhop+PjQxz2A9h8Q4M/xGmzP8vqNwy6JeK0A==", + "dev": true + }, + "minimatch": { + "version": "9.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.4.tgz", + "integrity": "sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==", + "dev": true, + "requires": { + "brace-expansion": "^2.0.1" + } + }, + "plutus-ledger-api": { + "version": "file:.extra-dependencies/plutus-ledger-api", + "requires": { + "@types/node": "^20.8.10", + "fast-check": "^3.14.0", + "prelude": "file:.extra-dependencies/prelude", + "typedoc": "^0.25.4", + "typescript": "^5.2.2" + } + }, + "prelude": { + "version": "file:.extra-dependencies/prelude", + "requires": { + "@types/node": "^20.8.10", + "fast-check": "^3.15.1", + "typedoc": "^0.25.4", + "typescript": "^5.2.2" + } + }, + "pure-rand": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/pure-rand/-/pure-rand-6.1.0.tgz", + "integrity": "sha512-bVWawvoZoBYpp6yIoQtQXHZjmz35RSVHnUOTefl8Vcjr8snTPY1wnpSPMWekcFwbxI6gtmT7rSYPFvz71ldiOA==", + "dev": true + }, + "shiki": { + "version": "0.14.7", + "resolved": "https://registry.npmjs.org/shiki/-/shiki-0.14.7.tgz", + "integrity": "sha512-dNPAPrxSc87ua2sKJ3H5dQ/6ZaY8RNnaAqK+t0eG7p0Soi2ydiqbGOTaZCqaYvA/uZYfS1LJnemt3Q+mSfcPCg==", + "dev": true, + "requires": { + "ansi-sequence-parser": "^1.1.0", + "jsonc-parser": "^3.2.0", + "vscode-oniguruma": "^1.7.0", + "vscode-textmate": "^8.0.0" + } + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "requires": { + "has-flag": "^4.0.0" + } + }, + "typedoc": { + "version": "0.25.13", + "resolved": "https://registry.npmjs.org/typedoc/-/typedoc-0.25.13.tgz", + "integrity": "sha512-pQqiwiJ+Z4pigfOnnysObszLiU3mVLWAExSPf+Mu06G/qsc3wzbuM56SZQvONhHLncLUhYzOVkjFFpFfL5AzhQ==", + "dev": true, + "requires": { + "lunr": "^2.3.9", + "marked": "^4.3.0", + "minimatch": "^9.0.3", + "shiki": "^0.14.7" + } + }, + "typescript": { + "version": "5.4.5", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.4.5.tgz", + "integrity": "sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ==" + }, + "undici-types": { + "version": "5.26.5", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", + "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==", + "dev": true + }, + "vscode-oniguruma": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/vscode-oniguruma/-/vscode-oniguruma-1.7.0.tgz", + "integrity": "sha512-L9WMGRfrjOhgHSdOYgCt/yRMsXzLDJSL7BPrOZt73gU0iWO4mpqzqQzOz5srxqTvMBaR0XZTSrVWo4j55Rc6cA==", + "dev": true + }, + "vscode-textmate": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/vscode-textmate/-/vscode-textmate-8.0.0.tgz", + "integrity": "sha512-AFbieoL7a5LMqcnOF04ji+rpXadgOXnZsxQr//r83kLPr7biP7am3g9zbaZIaBGwBRWeSvoMD4mgPdX3e4NWBg==", + "dev": true + } + } +} diff --git a/dens-testsuites/integration/package.json b/dens-testsuites/integration/package.json new file mode 100644 index 0000000..3a534d0 --- /dev/null +++ b/dens-testsuites/integration/package.json @@ -0,0 +1,27 @@ +{ + "name": "dens-integration", + "version": "1.0.0", + "description": "Integration testsuite for DeNS", + "scripts": { + "build": "npx tsc -b src/", + "test": "npm run build && node --test" + }, + "author": "DeNS team", + "license": "ISC", + "dependencies": { + "@emurgo/cardano-serialization-lib-nodejs": "^11.5.0", + "chalk": "^4.0.0", + "lbf-dens": "file:.extra-dependencies/lbf-dens", + "lbf-dens-db": "file:.extra-dependencies/lbf-dens-db", + "lbf-plutus": "file:.extra-dependencies/lbf-plutus", + "lbf-prelude": "file:.extra-dependencies/lbf-prelude", + "lbr-plutus": "file:.extra-dependencies/lbr-plutus", + "lbr-prelude": "file:.extra-dependencies/lbr-prelude", + "plutus-ledger-api": "file:.extra-dependencies/plutus-ledger-api", + "prelude": "file:.extra-dependencies/prelude", + "typescript": "^5.4.5" + }, + "devDependencies": { + "@types/node": "^20.12.7" + } +} diff --git a/dens-testsuites/integration/src/lib/services.ts b/dens-testsuites/integration/src/lib/services.ts new file mode 100644 index 0000000..00da858 --- /dev/null +++ b/dens-testsuites/integration/src/lib/services.ts @@ -0,0 +1,414 @@ +/** + * Provides functionality for spawning a local instance of all the runtime + * services (safe for parallel execution with high probability). + * + * @module + */ + +// https://www.rfc-editor.org/rfc/rfc6335.html +import * as child_process from "node:child_process"; +import type { ChildProcess } from "node:child_process"; +import * as fs from "node:fs/promises"; +import * as os from "node:os"; +import * as timers from "timers/promises"; +import * as path from "node:path"; + +import chalk from "chalk"; + +import * as utils from "./utils.js"; +// import * as Pla from "plutus-ledger-api/V1.js"; + +interface Cardano { + /** Path to UNIX domain socket that the cardano node is running on */ + socketPath: string; + /** Path to the node's config */ + nodeConfigPath: string; + /** Wallet key pairs (secret key, and private key) */ + walletKeyPairs: { signingKey: Uint8Array; verificationKey: Uint8Array }[]; + + childProcess: ChildProcess; +} + +interface Database { + /** Path to UNIX domain socket that the database is running on */ + socketPath: string; + + childProcess: ChildProcess; +} + +interface Ogmios { + /** Path to UNIX domain socket */ + host: string; + port: string; + + childProcess: ChildProcess; +} + +/** + * {@link Services} a class to + */ +export class Services { + cardano: Cardano; + database: Database; + ogmios: Ogmios; + + constructor(cardano: Cardano, database: Database, ogmios: Ogmios) { + this.cardano = cardano; + this.database = database; + this.ogmios = ogmios; + } + + /** + * Spawns all runtime services for the DeNS protocol (safe for parallel + * execution with high probability) + */ + static async spawn(numWallets = 3): Promise { + const [cardano, database] = await Promise.all([ + spawnPlutip(numWallets), + spawnDatabase(), + ]); + const ogmios = await spawnOgmios(cardano); + return new Services(cardano, database, ogmios); + } + + kill(): Promise { + this.cardano.childProcess.kill("SIGINT"); + this.database.childProcess.kill("SIGINT"); // See {@link https://www.postgresql.org/docs/current/server-shutdown.html} + this.ogmios.childProcess.kill("SIGINT"); + } +} + +// export class DensQueryService { +// static async spawn( +// protocolNft: [string], +// services: Services, +// ): Promise { +// const [cardano, database] = await Promise.all([ +// spawnPlutip(numWallets), +// spawnDatabase(), +// ]); +// const ogmios = await spawnOgmios(cardano); +// return new Services(cardano, database, ogmios); +// } +// } + +/** + * This is needed because of the awkwardness of knowing when plutip is + * initialized... Plutip will dump a bunch of files to the file system, and we + * have to poll until they exist / are written to. + * + * Various tricks of using node's inotify / kqueue wrapper for the filesystem + * don't play nicely with internals of plutip -- namely, plutip likes to delete + * the directory and recreate it (making inotify useless for plutip as it + * watches the inodes). + * + * Moreover, node's wrapper of inotify/kqueue isn't guaranteed to provide the + * file name, and we need the file name + * + * TODO(jaredponn): it'd be great if we could remove the polling... Just write + * it in C and do the system calls yourself :^) + * @internal + */ +async function poll(action: () => Promise): Promise { + // NOTE(jaredponn): 2^13 = 8192 is about 8 seconds + const MAX_RETRIES = 13; + let DELAY = 2; + + await timers.setTimeout(DELAY); + + let result = await action(); + + for (let i = 0; i < MAX_RETRIES && result === undefined; ++i) { + await timers.setTimeout(DELAY *= 2); + result = await action(); + } + + if (result === undefined) { + throw new Error(`polling timed out`); + } + + return result; +} + +/** + * Polls, and reads / parses the provided JSON file + * + * @remarks + * This will poll until the file exists, and `JSON.parse` can parse it. The + * latter condition is to accept partial writes of JSON files + */ +// deno-lint-ignore no-explicit-any +async function pollReadJsonFile(filePath: string): Promise { + const result = await poll( + () => + fs.readFile(filePath, { encoding: "utf8" }) + .then((contents) => JSON.parse(contents)) + .catch((err) => { + if (err.code === "ENOENT") { + return undefined; + } else if (err instanceof SyntaxError) { + return undefined; + } else { + return Promise.reject(err); + } + }), + ); + return result; +} + +function spawnOgmios(cardano: Cardano): Promise { + // See {@link https://www.rfc-editor.org/rfc/rfc6335.html}'s Dynamic ports + // for why we choose this range + const host = "127.0.0.1"; + const port = Math.floor(Math.random() * ((65535 + 1) - 49152)) + 49152; + + console.error(chalk.blue(`Ogmios listening on: \n\t${host}:${port}`)); + + const ogmiosProcess = child_process.spawn(`ogmios`, [ + `--node-socket`, + cardano.socketPath, + `--node-config`, + cardano.nodeConfigPath, + `--host`, + host, + `--port`, + port.toString(), + ]); + + return { host, port: port.toString(), childProcess: ogmiosProcess }; +} + +/** + * Spawns a postgres database + */ +async function spawnDatabase(): Promise { + const result: Database = {} as Database; + const postgresDir = await fs.mkdtemp(path.join(os.tmpdir(), `postgres-`)); + + console.error(chalk.blue(`Postgres working directory:\n\t${postgresDir}`)); + + { + // Use `initdb` to initialize the database + const initDbChildProcess = child_process.spawn(`initdb`, [ + `--auth`, + `trust`, + `--pgdata`, + postgresDir, + ], { stdio: [`ignore`, `ignore`, `inherit`] }); + + await new Promise((resolve, reject) => + initDbChildProcess.on("close", (code) => { + if (code === 0) { + resolve(); + } else { + reject(new Error(`initdb failed with exit code ${code}`)); + } + }) + ); + } + + { + // Actually spawn postgres + + // NOTE(jaredponn): we only make postgres listen on its unix domain + // socket to help ensure "locality" of the test (running on the IP + // protocol will consume a precious port) + const postgresChildProcess = child_process.spawn(`postgres`, [ + `-h`, + ``, + `-k`, + postgresDir, + `-D`, + postgresDir, + `-r`, + path.join(postgresDir, `logs.output`), + ], { stdio: [`ignore`, `ignore`, `inherit`] }); + + // Somewhere in the postgres docs it says this is what the socket is + // named + result.socketPath = path.join(postgresDir); + result.childProcess = postgresChildProcess; + } + + // Busy loop until postgres is ready + await poll(() => + new Promise((resolve) => { + const pgIsReadChildProcess = child_process.spawn(`pg_isready`, [ + `-d`, + `postgres`, + `-h`, + result.socketPath, + ]); + + pgIsReadChildProcess.on("close", (code) => { + if (code === 0) { + return resolve(true); + } else { + return resolve(undefined); + } + }); + }) + ); + + return result; +} + +async function spawnPlutip(numWallets: number): Promise { + const result = {} as unknown as Cardano; + /** + * Spawning plutip + */ + const plutipDir = await fs.mkdtemp(path.join(os.tmpdir(), `plutip-`)); + const plutipWalletsDir = await fs.mkdtemp( + path.join(os.tmpdir(), `plutip-wallets-`), + ); + const localClusterInfoBaseName = `local-cluster-info.json`; + const localClusterInfoJsonPath = path.join( + plutipDir, + localClusterInfoBaseName, + ); + + console.error(chalk.blue(`Plutip wallets directory:\n\t${plutipWalletsDir}`)); + console.error(chalk.blue(`Plutip working directory:\n\t${plutipDir}`)); + + const childProcess = child_process.spawn(`local-cluster`, [ + `--working-dir`, + plutipDir, + `--dump-info-json`, + localClusterInfoJsonPath, + `--num-wallets`, + numWallets.toString(), + `--wallets-dir`, + plutipWalletsDir, + ], { stdio: [`ignore`, `ignore`, `inherit`] }); + + result.childProcess = childProcess; + + const localClusterInfo = await pollReadJsonFile(localClusterInfoJsonPath); + + { + // Adding the `socketPath` and `nodeConfigPath` fields + if ( + !(localClusterInfo?.ciNodeSocket !== undefined && + typeof localClusterInfo.ciNodeSocket === "string") + ) { + throw new Error( + `Malformed local-cluster-info.json invalid 'ciNodeSocket' key at ${localClusterInfoJsonPath}`, + ); + } + + result.socketPath = localClusterInfo.ciNodeSocket; + // NOTE(jaredponn): by inspection of the generated code, + // the `node.config` file is put here. + result.nodeConfigPath = path.join( + path.dirname(result.socketPath), + `node.config`, + ); + } + + { + // Adding the public / private keys of the wallets + result.walletKeyPairs = []; + if ( + !(localClusterInfo?.ciWallets !== undefined && + Array.isArray(localClusterInfo.ciWallets)) + ) { + throw new Error( + `Malformed local-cluster-info.json invalid 'ciWallets' key at ${localClusterInfoJsonPath}`, + ); + } + + const publicAndPrivateKeyTasks = []; + + // NOTE(jaredponn): Note that the local-cluster-info.json has an array of + // [public key hash, bech32 of verification key] + // {@link https://github.com/mlabs-haskell/plutip/blob/37f6303f1ddff66c5ab5d73cd065b9b98511cea0/local-cluster/Main.hs#L86-L98} + for (const ciWallet of localClusterInfo.ciWallets) { + if (!(Array.isArray(ciWallet) && ciWallet.length === 2)) { + throw new Error( + `Malformed local-cluster-info.json invalid array element of '${ciWallet}' in 'ciWallets' key at ${localClusterInfoJsonPath}`, + ); + } + + const [publicKeyHash, _bech32VKey] = ciWallet; + + // NOTE(jaredponn): by inspection of the generated values, the files + // are of the form + // ``` + // signing-key-.skey + // ``` + // with contents + // ``` + // { + // "type": "PaymentSigningKeyShelley_ed25519", + // "description": "Payment Signing Key", + // "cborHex": "58208101d38823613974976d5032fb66f6165808d63eaa861d36f65a6d8786964249" + // } + // ``` + // and + // ``` + // verification-key-.vkey + // ``` + // with contents + // ``` + // { + // "type": "PaymentSigningKeyShelley_ed25519", + // "description": "Payment Signing Key", + // "cborHex": "58208101d38823613974976d5032fb66f6165808d63eaa861d36f65a6d8786964249" + // } + // ``` + // + // See the source code {@link + // https://github.com/mlabs-haskell/plutip/blob/37f6303f1ddff66c5ab5d73cd065b9b98511cea0/src/Plutip/Keys.hs#L60-L74} + // for details + + const vkeyPath = path.join( + plutipWalletsDir, + `verification-key-${publicKeyHash}.vkey`, + ); + const skeyPath = path.join( + plutipWalletsDir, + `signing-key-${publicKeyHash}.skey`, + ); + + publicAndPrivateKeyTasks.push( + Promise.all([pollReadJsonFile(vkeyPath), pollReadJsonFile(skeyPath)]) + .then((_) => + Promise.all([vkeyPath, skeyPath].map( + (p) => + fs.readFile(p, { encoding: "utf8" }) + .then((contents) => JSON.parse(contents)), + )) + ) + .then((jsons) => { + const [vkeyJson, skeyJson] = jsons; + if ( + !(vkeyJson?.cborHex !== undefined && + typeof vkeyJson.cborHex === "string") + ) { + throw new Error(`Malformed verification key file at ${vkeyPath}`); + } + if ( + !(skeyJson?.cborHex !== undefined && + typeof skeyJson.cborHex === "string") + ) { + throw new Error(`Malformed verification key file at ${vkeyPath}`); + } + + result.walletKeyPairs.push( + { + signingKey: utils.cborHexPrivateKey(skeyJson.cborHex) + .as_bytes(), + verificationKey: utils.cborHexPublicKey(vkeyJson.cborHex) + .as_bytes(), + }, + ); + }), + ); + } + + await Promise.all(publicAndPrivateKeyTasks); + } + + return result; +} diff --git a/dens-testsuites/integration/src/lib/tsconfig.json b/dens-testsuites/integration/src/lib/tsconfig.json new file mode 100644 index 0000000..60d3b32 --- /dev/null +++ b/dens-testsuites/integration/src/lib/tsconfig.json @@ -0,0 +1,4 @@ +{ + "extends": "../tsconfig-base", + "include": ["**/*"] +} diff --git a/dens-testsuites/integration/src/lib/utils.ts b/dens-testsuites/integration/src/lib/utils.ts new file mode 100644 index 0000000..5cfd8ca --- /dev/null +++ b/dens-testsuites/integration/src/lib/utils.ts @@ -0,0 +1,49 @@ +import * as csl from "@emurgo/cardano-serialization-lib-nodejs"; + +/** + * Translates the hex encoded cbor of a private key as outputted from + * `cardano-cli` in the `cborHex` field to `cardano-serialization-lib`'s {@link + * csl.PrivateKey} + * + * @example + * As input, this should take the value of the `cborHex` key. + * ``` + * { + * "type": "PaymentSigningKeyShelley_ed25519", + * "description": "Payment Signing Key", + * "cborHex": "5820cdb9d333ea48021d7c74852d6411f8c253ff266f95b23d5da1352a530b4e1bb8" + * } + * ``` + */ +export function cborHexPrivateKey(cborHex: string): csl.PrivateKey { + const prvKeyPlutusData = csl.PlutusData.from_hex(cborHex); + const prvKeyBytes = prvKeyPlutusData.as_bytes(); + if (prvKeyBytes === undefined) { + throw new Error(`Invalid secret key`); + } + return csl.PrivateKey.from_normal_bytes(prvKeyBytes); +} + +/** + * Translates the hex encoded cbor of a public key as outputted from + * `cardano-cli` in the `cborHex` field to `cardano-serialization-lib`'s {@link + * csl.PublicKey} + * + * @example + * As input, this should take the value of the `cborHex` key. + * ``` + * { + * "type": "PaymentSigningKeyShelley_ed25519", + * "description": "Payment Signing Key", + * "cborHex": "5820cdb9d333ea48021d7c74852d6411f8c253ff266f95b23d5da1352a530b4e1bb8" + * } + * ``` + */ +export function cborHexPublicKey(cborHex: string): csl.PublicKey { + const pubKeyPlutusData = csl.PlutusData.from_hex(cborHex); + const pubKeyBytes = pubKeyPlutusData.as_bytes(); + if (pubKeyBytes === undefined) { + throw new Error(`Invalid public key`); + } + return csl.PublicKey.from_bytes(pubKeyBytes); +} diff --git a/dens-testsuites/integration/src/tests/more-valid-test.ts b/dens-testsuites/integration/src/tests/more-valid-test.ts new file mode 100644 index 0000000..1d89174 --- /dev/null +++ b/dens-testsuites/integration/src/tests/more-valid-test.ts @@ -0,0 +1,12 @@ +import test from "node:test"; +import { Services } from "../lib/services.js"; + +test.describe("Yet another runtime services can be initialized", async () => { + let result: Services | undefined; + await test.before(async () => { + result = await Services.spawn(); + }); + await test.after(async () => { + await result!.kill(); + }); +}); diff --git a/dens-testsuites/integration/src/tests/tsconfig.json b/dens-testsuites/integration/src/tests/tsconfig.json new file mode 100644 index 0000000..623b4ad --- /dev/null +++ b/dens-testsuites/integration/src/tests/tsconfig.json @@ -0,0 +1,7 @@ +{ + "extends": "../tsconfig-base", + "include": ["**/*"], + "references": [ + { "path": "../lib" } + ] +} diff --git a/dens-testsuites/integration/src/tests/valid-test.ts b/dens-testsuites/integration/src/tests/valid-test.ts new file mode 100644 index 0000000..b52332a --- /dev/null +++ b/dens-testsuites/integration/src/tests/valid-test.ts @@ -0,0 +1,12 @@ +import test from "node:test"; +import { Services } from "../lib/services.js"; + +test.describe("Runtime services can be initialized", async () => { + let result: Services | undefined; + await test.before(async () => { + result = await Services.spawn(); + }); + await test.after(async () => { + await result!.kill(); + }); +}); diff --git a/dens-testsuites/integration/src/tsconfig-base.json b/dens-testsuites/integration/src/tsconfig-base.json new file mode 100644 index 0000000..93bfcd3 --- /dev/null +++ b/dens-testsuites/integration/src/tsconfig-base.json @@ -0,0 +1,109 @@ +{ + "compilerOptions": { + /* Visit https://aka.ms/tsconfig to read more about this file */ + + /* Projects */ + "incremental": true, /* Save .tsbuildinfo files to allow for incremental compilation of projects. */ + "composite": true, /* Enable constraints that allow a TypeScript project to be used with project references. */ + // "tsBuildInfoFile": "./.tsbuildinfo", /* Specify the path to .tsbuildinfo incremental compilation file. */ + // "disableSourceOfProjectReferenceRedirect": true, /* Disable preferring source files instead of declaration files when referencing composite projects. */ + // "disableSolutionSearching": true, /* Opt a project out of multi-project reference checking when editing. */ + // "disableReferencedProjectLoad": true, /* Reduce the number of projects loaded automatically by TypeScript. */ + + /* Language and Environment */ + "target": "es2020", /* Set the JavaScript language version for emitted JavaScript and include compatible library declarations. */ + // "lib": [], /* Specify a set of bundled library declaration files that describe the target runtime environment. */ + // "jsx": "preserve", /* Specify what JSX code is generated. */ + // "experimentalDecorators": true, /* Enable experimental support for legacy experimental decorators. */ + // "emitDecoratorMetadata": true, /* Emit design-type metadata for decorated declarations in source files. */ + // "jsxFactory": "", /* Specify the JSX factory function used when targeting React JSX emit, e.g. 'React.createElement' or 'h'. */ + // "jsxFragmentFactory": "", /* Specify the JSX Fragment reference used for fragments when targeting React JSX emit e.g. 'React.Fragment' or 'Fragment'. */ + // "jsxImportSource": "", /* Specify module specifier used to import the JSX factory functions when using 'jsx: react-jsx*'. */ + // "reactNamespace": "", /* Specify the object invoked for 'createElement'. This only applies when targeting 'react' JSX emit. */ + // "noLib": true, /* Disable including any library files, including the default lib.d.ts. */ + // "useDefineForClassFields": true, /* Emit ECMAScript-standard-compliant class fields. */ + // "moduleDetection": "auto", /* Control what method is used to detect module-format JS files. */ + + /* Modules */ + "module": "node16", /* Specify what module code is generated. */ + "rootDir": "./", /* Specify the root folder within your source files. */ + // "moduleResolution": "node10", /* Specify how TypeScript looks up a file from a given module specifier. */ + // "baseUrl": "./", /* Specify the base directory to resolve non-relative module names. */ + // "paths": {}, /* Specify a set of entries that re-map imports to additional lookup locations. */ + // "rootDirs": [], /* Allow multiple folders to be treated as one when resolving modules. */ + // "typeRoots": [], /* Specify multiple folders that act like './node_modules/@types'. */ + // "types": [], /* Specify type package names to be included without being referenced in a source file. */ + // "allowUmdGlobalAccess": true, /* Allow accessing UMD globals from modules. */ + // "moduleSuffixes": [], /* List of file name suffixes to search when resolving a module. */ + // "allowImportingTsExtensions": true, /* Allow imports to include TypeScript file extensions. Requires '--moduleResolution bundler' and either '--noEmit' or '--emitDeclarationOnly' to be set. */ + // "resolvePackageJsonExports": true, /* Use the package.json 'exports' field when resolving package imports. */ + // "resolvePackageJsonImports": true, /* Use the package.json 'imports' field when resolving imports. */ + // "customConditions": [], /* Conditions to set in addition to the resolver-specific defaults when resolving imports. */ + // "resolveJsonModule": true, /* Enable importing .json files. */ + // "allowArbitraryExtensions": true, /* Enable importing files with any extension, provided a declaration file is present. */ + // "noResolve": true, /* Disallow 'import's, 'require's or ''s from expanding the number of files TypeScript should add to a project. */ + + /* JavaScript Support */ + // "allowJs": true, /* Allow JavaScript files to be a part of your program. Use the 'checkJS' option to get errors from these files. */ + // "checkJs": true, /* Enable error reporting in type-checked JavaScript files. */ + // "maxNodeModuleJsDepth": 1, /* Specify the maximum folder depth used for checking JavaScript files from 'node_modules'. Only applicable with 'allowJs'. */ + + /* Emit */ + "declaration": true, /* Generate .d.ts files from TypeScript and JavaScript files in your project. */ + "declarationMap": true, /* Create sourcemaps for d.ts files. */ + // "emitDeclarationOnly": true, /* Only output d.ts files and not JavaScript files. */ + "sourceMap": true, /* Create source map files for emitted JavaScript files. */ + // "inlineSourceMap": true, /* Include sourcemap files inside the emitted JavaScript. */ + // "outFile": "./", /* Specify a file that bundles all outputs into one JavaScript file. If 'declaration' is true, also designates a file that bundles all .d.ts output. */ + "outDir": "../dist", /* Specify an output folder for all emitted files. */ + // "removeComments": true, /* Disable emitting comments. */ + // "noEmit": true, /* Disable emitting files from a compilation. */ + // "importHelpers": true, /* Allow importing helper functions from tslib once per project, instead of including them per-file. */ + // "importsNotUsedAsValues": "remove", /* Specify emit/checking behavior for imports that are only used for types. */ + // "downlevelIteration": true, /* Emit more compliant, but verbose and less performant JavaScript for iteration. */ + // "sourceRoot": "", /* Specify the root path for debuggers to find the reference source code. */ + // "mapRoot": "", /* Specify the location where debugger should locate map files instead of generated locations. */ + // "inlineSources": true, /* Include source code in the sourcemaps inside the emitted JavaScript. */ + // "emitBOM": true, /* Emit a UTF-8 Byte Order Mark (BOM) in the beginning of output files. */ + // "newLine": "crlf", /* Set the newline character for emitting files. */ + // "stripInternal": true, /* Disable emitting declarations that have '@internal' in their JSDoc comments. */ + // "noEmitHelpers": true, /* Disable generating custom helper functions like '__extends' in compiled output. */ + // "noEmitOnError": true, /* Disable emitting files if any type checking errors are reported. */ + // "preserveConstEnums": true, /* Disable erasing 'const enum' declarations in generated code. */ + /// "declarationDir": "./", /* Specify the output directory for generated declaration files. */ + // "preserveValueImports": true, /* Preserve unused imported values in the JavaScript output that would otherwise be removed. */ + + /* Interop Constraints */ + // "isolatedModules": true, /* Ensure that each file can be safely transpiled without relying on other imports. */ + // "verbatimModuleSyntax": true, /* Do not transform or elide any imports or exports not marked as type-only, ensuring they are written in the output file's format based on the 'module' setting. */ + // "allowSyntheticDefaultImports": true, /* Allow 'import x from y' when a module doesn't have a default export. */ + // "esModuleInterop": true, /* Emit additional JavaScript to ease support for importing CommonJS modules. This enables 'allowSyntheticDefaultImports' for type compatibility. */ + // "preserveSymlinks": true, /* Disable resolving symlinks to their realpath. This correlates to the same flag in node. */ + "forceConsistentCasingInFileNames": true, /* Ensure that casing is correct in imports. */ + + /* Type Checking */ + "strict": true, /* Enable all strict type-checking options. */ + "noImplicitAny": true, /* Enable error reporting for expressions and declarations with an implied 'any' type. */ + "strictNullChecks": true, /* When type checking, take into account 'null' and 'undefined'. */ + "strictFunctionTypes": true, /* When assigning functions, check to ensure parameters and the return values are subtype-compatible. */ + "strictBindCallApply": true, /* Check that the arguments for 'bind', 'call', and 'apply' methods match the original function. */ + "strictPropertyInitialization": true, /* Check for class properties that are declared but not set in the constructor. */ + "noImplicitThis": true, /* Enable error reporting when 'this' is given the type 'any'. */ + "useUnknownInCatchVariables": true, /* Default catch clause variables as 'unknown' instead of 'any'. */ + "alwaysStrict": true, /* Ensure 'use strict' is always emitted. */ + "noUnusedLocals": true, /* Enable error reporting when local variables aren't read. */ + "noUnusedParameters": true, /* Raise an error when a function parameter isn't read. */ + "exactOptionalPropertyTypes": true, /* Interpret optional property types as written, rather than adding 'undefined'. */ + "noImplicitReturns": true, /* Enable error reporting for codepaths that do not explicitly return in a function. */ + "noFallthroughCasesInSwitch": true, /* Enable error reporting for fallthrough cases in switch statements. */ + "noUncheckedIndexedAccess": true, /* Add 'undefined' to a type when accessed using an index. */ + "noImplicitOverride": true, /* Ensure overriding members in derived classes are marked with an override modifier. */ + "noPropertyAccessFromIndexSignature": true, /* Enforces using indexed accessors for keys declared using an indexed type. */ + // "allowUnusedLabels": true, /* Disable error reporting for unused labels. */ + // "allowUnreachableCode": true, /* Disable error reporting for unreachable code. */ + + /* Completeness */ + // "skipDefaultLibCheck": true, /* Skip type checking .d.ts files that are included with TypeScript. */ + "skipLibCheck": true /* Skip type checking all .d.ts files. */ + } +} diff --git a/dens-testsuites/integration/src/tsconfig.json b/dens-testsuites/integration/src/tsconfig.json new file mode 100644 index 0000000..e93b240 --- /dev/null +++ b/dens-testsuites/integration/src/tsconfig.json @@ -0,0 +1,8 @@ +{ + "files": [], + "include": [], + "references": [ + { "path": "./lib" }, + { "path": "./tests" } + ] +} diff --git a/flake.nix b/flake.nix index e6b8754..3cffdac 100644 --- a/flake.nix +++ b/flake.nix @@ -21,9 +21,11 @@ plutarch.follows = "lambda-buffers/plutarch"; # ogmios: Websockets for interacting with the cardano-node - plutip.url = "github:mlabs-haskell/plutip/1bf0b547cd3689c727586abb8385c008fb2a3d1c"; ogmios.url = "github:mlabs-haskell/ogmios-nixos/78e829e9ebd50c5891024dcd1004c2ac51facd80"; + # plutip: local testnet cluster + plutip.url = "github:mlabs-haskell/plutip/1bf0b547cd3689c727586abb8385c008fb2a3d1c"; + # cardano-node: cardano-node.url = "github:input-output-hk/cardano-node";