diff --git a/Cargo.lock b/Cargo.lock index 6c56874..8c07f4a 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -280,6 +280,12 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6245d59a3e82a7fc217c5828a6692dbc6dfb63a0c8c90495621f7b9d79704a0e" +[[package]] +name = "cooked-waker" +version = "5.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "147be55d677052dabc6b22252d5dd0fd4c29c8c27aa4f2fbef0f94aa003b406f" + [[package]] name = "core-foundation" version = "0.9.4" @@ -362,9 +368,9 @@ dependencies = [ [[package]] name = "deno_ast" -version = "0.31.3" +version = "0.31.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b8cdc4db9f967c84d8d122892e448e146a4e92987830dd94dbcee31896938dad" +checksum = "da7b09db895527a94de1305455338926cd2a7003231ba589b7b7b57e8da344f2" dependencies = [ "anyhow", "base64 0.13.1", @@ -398,12 +404,13 @@ dependencies = [ [[package]] name = "deno_core" -version = "0.233.0" +version = "0.238.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1b1c9dadf191bb484179cf4a599e0ccbe8ea62f35676a15397f171aff14bd9a0" +checksum = "0ded8b759e4435aa0929913909dd6c482ed6042dae19c53260e1caf9d55b37a9" dependencies = [ "anyhow", "bytes", + "cooked-waker", "deno_ops", "deno_unsync", "futures", @@ -416,6 +423,7 @@ dependencies = [ "serde_v8", "smallvec", "sourcemap 7.0.0", + "static_assertions", "tokio", "url", "v8", @@ -434,9 +442,9 @@ dependencies = [ [[package]] name = "deno_ops" -version = "0.109.0" +version = "0.114.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a3901bf4ce170c37d936ce8b947ba0217e5d235ebbbc1c340703268141c359d3" +checksum = "168a929496191fdd8e91f898c8454429df4d5489597777d89f47897f6a37da6b" dependencies = [ "proc-macro-rules", "proc-macro2", @@ -789,6 +797,19 @@ dependencies = [ "windows-sys", ] +[[package]] +name = "hstr" +version = "0.2.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "de90d3db62411eb62eddabe402d706ac4970f7ac8d088c05f11069cad9be9857" +dependencies = [ + "new_debug_unreachable", + "once_cell", + "phf", + "rustc-hash", + "smallvec", +] + [[package]] name = "http" version = "0.2.11" @@ -1269,20 +1290,19 @@ dependencies = [ [[package]] name = "phf" -version = "0.10.1" +version = "0.11.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fabbf1ead8a5bcbc20f5f8b939ee3f5b0f6f281b6ad3468b84656b658b455259" +checksum = "ade2d8b8f33c7333b51bcf0428d37e217e9f32192ae4772156f65063b8ce03dc" dependencies = [ "phf_macros", "phf_shared", - "proc-macro-hack", ] [[package]] name = "phf_generator" -version = "0.10.0" +version = "0.11.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5d5285893bb5eb82e6aaf5d59ee909a06a16737a8970984dd7746ba9283498d6" +checksum = "48e4cc64c2ad9ebe670cb8fd69dd50ae301650392e81c05f9bfcb2d5bdbc24b0" dependencies = [ "phf_shared", "rand", @@ -1290,23 +1310,22 @@ dependencies = [ [[package]] name = "phf_macros" -version = "0.10.0" +version = "0.11.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "58fdf3184dd560f160dd73922bea2d5cd6e8f064bf4b13110abd81b03697b4e0" +checksum = "3444646e286606587e49f3bcf1679b8cef1dc2c5ecc29ddacaffc305180d464b" dependencies = [ "phf_generator", "phf_shared", - "proc-macro-hack", "proc-macro2", "quote", - "syn 1.0.109", + "syn 2.0.38", ] [[package]] name = "phf_shared" -version = "0.10.0" +version = "0.11.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6796ad771acdc0123d2a88dc428b5e38ef24456743ddb1744ed628f9815c096" +checksum = "90fcb95eef784c2ac79119d1dd819e162b5da872ce6f3c3abe1e8ca1c082f72b" dependencies = [ "siphasher", ] @@ -1360,24 +1379,6 @@ version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391" -[[package]] -name = "ppv-lite86" -version = "0.2.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de" - -[[package]] -name = "precomputed-hash" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "925383efa346730478fb4838dbe9137d2a47675ad789c546d150a6e1dd4ab31c" - -[[package]] -name = "proc-macro-hack" -version = "0.5.20+deprecated" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc375e1527247fe1a97d8b7156678dfe7c1af2fc075c9a4db3690ecd2a148068" - [[package]] name = "proc-macro-rules" version = "0.4.0" @@ -1434,18 +1435,6 @@ version = "0.8.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" dependencies = [ - "libc", - "rand_chacha", - "rand_core", -] - -[[package]] -name = "rand_chacha" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" -dependencies = [ - "ppv-lite86", "rand_core", ] @@ -1454,9 +1443,6 @@ name = "rand_core" version = "0.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" -dependencies = [ - "getrandom", -] [[package]] name = "redox_syscall" @@ -1703,9 +1689,9 @@ dependencies = [ [[package]] name = "serde_v8" -version = "0.142.0" +version = "0.147.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6abec9ca384cb6869fcbf7ab816bd0d342cd2668fa7b090d80554831e2d93e60" +checksum = "2af950d83e1c70b762d48fa7a869d6db9a4f191548dfd666fa4e62f2229e1dce" dependencies = [ "bytes", "derive_more", @@ -1844,12 +1830,6 @@ dependencies = [ "url", ] -[[package]] -name = "stable_deref_trait" -version = "1.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3" - [[package]] name = "stacker" version = "0.1.15" @@ -1869,32 +1849,6 @@ version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" -[[package]] -name = "string_cache" -version = "0.8.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f91138e76242f575eb1d3b38b4f1362f10d3a43f47d182a5b359af488a02293b" -dependencies = [ - "new_debug_unreachable", - "once_cell", - "parking_lot", - "phf_shared", - "precomputed-hash", - "serde", -] - -[[package]] -name = "string_cache_codegen" -version = "0.5.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6bb30289b722be4ff74a408c3cc27edeaad656e06cb1fe8fa9231fa59c728988" -dependencies = [ - "phf_generator", - "phf_shared", - "proc-macro2", - "quote", -] - [[package]] name = "string_enum" version = "0.4.1" @@ -1938,23 +1892,21 @@ dependencies = [ [[package]] name = "swc_atoms" -version = "0.6.0" +version = "0.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ebf7a12229f0c0efb654a6a0f8cbfd94fbd320a57c764857a82d8abe9342b450" +checksum = "b8a9e1b6d97f27b6abe5571f8fe3bdbd2fa987299fc2126450c7cde6214896ef" dependencies = [ + "hstr", "once_cell", "rustc-hash", "serde", - "string_cache", - "string_cache_codegen", - "triomphe", ] [[package]] name = "swc_common" -version = "0.33.0" +version = "0.33.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "490e199e25d2aa3fbef675524fa81408651f4e7178b51110470ddd1b3e3bbe75" +checksum = "5ccb656cd57c93614e4e8b33a60e75ca095383565c1a8d2bbe6a1103942831e0" dependencies = [ "ast_node", "better_scoped_tls", @@ -1968,7 +1920,6 @@ dependencies = [ "serde", "siphasher", "sourcemap 6.4.1", - "string_cache", "swc_atoms", "swc_eq_ignore_macros", "swc_visit", @@ -2004,13 +1955,14 @@ dependencies = [ [[package]] name = "swc_ecma_ast" -version = "0.110.0" +version = "0.110.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5cbbf9918976a7e7fbdb4f76fe659d08e291a8b56b524b424183fc67d1189679" +checksum = "2c3d416121da2d56bcbd1b1623725a68890af4552fef0c6d1e4bfa92776ccd6a" dependencies = [ "bitflags 2.4.1", "is-macro", "num-bigint", + "phf", "scoped-tls", "serde", "string_enum", @@ -2021,9 +1973,9 @@ dependencies = [ [[package]] name = "swc_ecma_codegen" -version = "0.146.3" +version = "0.146.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "063562340cb1f928babd78951a0aa3d42feec8b8693c7a4db2b07b7d9e838659" +checksum = "7b7b37ef40385cc2e294ece3d42048dcda6392838724dd5f02ff8da3fa105271" dependencies = [ "memchr", "num-bigint", @@ -2053,9 +2005,9 @@ dependencies = [ [[package]] name = "swc_ecma_loader" -version = "0.45.0" +version = "0.45.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a7fe06d942fe20a5a81cc14f4a53e64a5efdc851fa895a869224b2d41df73276" +checksum = "31cf7549feec3698d0110a0a71ae547f31ae272dc92db3285ce126d6dcbdadf3" dependencies = [ "anyhow", "pathdiff", @@ -2066,13 +2018,15 @@ dependencies = [ [[package]] name = "swc_ecma_parser" -version = "0.141.3" +version = "0.141.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1a23445c5da841d4a5859b4e3a9cee0eb7c09a7b6fb0c0cc7eda2616b1204b12" +checksum = "9590deff1b29aafbff8901b9d38d00211393f6b17b5cab878562db89a8966d88" dependencies = [ "either", + "new_debug_unreachable", "num-bigint", "num-traits", + "phf", "serde", "smallvec", "smartstring", @@ -2086,9 +2040,9 @@ dependencies = [ [[package]] name = "swc_ecma_transforms_base" -version = "0.134.8" +version = "0.134.42" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a47ed8caf6d1c435e9e00bde780b1d449a2050b2689ff109fadeb30e3ffdefd" +checksum = "d74ca42a400257d8563624122813c1849c3d87e7abe3b9b2ed7514c76f64ad2f" dependencies = [ "better_scoped_tls", "bitflags 2.4.1", @@ -2109,9 +2063,9 @@ dependencies = [ [[package]] name = "swc_ecma_transforms_classes" -version = "0.123.8" +version = "0.123.43" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "95df25cfcc0429c2ea11d7c74082d587e09df9704e6ad1dfbfc14386cb421106" +checksum = "7e68880cf7d65b93e0446b3ee079f33d94e0eddac922f75b736a6ea7669517c0" dependencies = [ "swc_atoms", "swc_common", @@ -2136,9 +2090,9 @@ dependencies = [ [[package]] name = "swc_ecma_transforms_proposal" -version = "0.168.12" +version = "0.168.52" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d5b084515f9a4ced2637dcbb55897c99c0a6e48089eeb94be7806b35d3646264" +checksum = "c17e1f409e026be953fabb327923ebc5fdc7c664bcac036b76107834798640ed" dependencies = [ "either", "rustc-hash", @@ -2156,9 +2110,9 @@ dependencies = [ [[package]] name = "swc_ecma_transforms_react" -version = "0.180.11" +version = "0.180.52" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2aa0a0c071551b412034c9c3d8164f8aeae3ade2cf673877f8b9176c0b7c66ed" +checksum = "9fa7f368a80f28eeaa0f529cff6fb5d7578ef10a60be25bfd2582cb3f8ff5c9e" dependencies = [ "base64 0.13.1", "dashmap", @@ -2180,9 +2134,9 @@ dependencies = [ [[package]] name = "swc_ecma_transforms_typescript" -version = "0.185.8" +version = "0.185.52" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c40f2e9444f793693400a3114b947a358da8d52eb8ff1b76ffcbd8068e853e0" +checksum = "daa2950c85abb4d555e092503ad2fa4f6dec0ee36a719273fb7a7bb29ead9ab6" dependencies = [ "ryu-js", "serde", @@ -2197,9 +2151,9 @@ dependencies = [ [[package]] name = "swc_ecma_utils" -version = "0.124.7" +version = "0.124.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fd601a7d7088a95b93afde1dfcfdbf12fe2654a407629446ab42c758a47ba293" +checksum = "e4a4a0baf6cfa490666a9fe23a17490273f843d19ebc1d6ec89d64c3f8ccdb80" dependencies = [ "indexmap 1.9.3", "num_cpus", @@ -2215,9 +2169,9 @@ dependencies = [ [[package]] name = "swc_ecma_visit" -version = "0.96.0" +version = "0.96.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "47081acd84cdb2d49d6340ed3204e17738b444da10a3e1dd1eb3d7c8e4d47091" +checksum = "ba962f0becf83bab12a17365dface5a4f636c9e1743d479e292b96910a753743" dependencies = [ "num-bigint", "swc_atoms", @@ -2480,16 +2434,6 @@ dependencies = [ "once_cell", ] -[[package]] -name = "triomphe" -version = "0.1.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0eee8098afad3fb0c54a9007aab6804558410503ad676d4633f9c2559a00ac0f" -dependencies = [ - "serde", - "stable_deref_trait", -] - [[package]] name = "try-lock" version = "0.2.4" @@ -2820,18 +2764,18 @@ dependencies = [ [[package]] name = "zerocopy" -version = "0.7.29" +version = "0.7.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5d075cf85bbb114e933343e087b92f2146bac0d55b534cbb8188becf0039948e" +checksum = "1c4061bedbb353041c12f413700357bec76df2c7e2ca8e4df8bac24c6bf68e3d" dependencies = [ "zerocopy-derive", ] [[package]] name = "zerocopy-derive" -version = "0.7.29" +version = "0.7.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "86cd5ca076997b97ef09d3ad65efe811fa68c9e874cb636ccb211223a813b0c2" +checksum = "b3c129550b3e6de3fd0ba67ba5c81818f9805e58b8d7fee80a3a59d2c9fc601a" dependencies = [ "proc-macro2", "quote", diff --git a/Cargo.toml b/Cargo.toml index af55a67..a2213ec 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -15,8 +15,8 @@ name = "senc" anyhow = "1.0.75" clap = { version = "4.0", features = ["derive"] } ctrlc = "3.4.1" -deno_ast = { version = "0.31.3", features = ["transpiling"] } -deno_core = "0.233.0" +deno_ast = { version = "0.31.6", features = ["transpiling"] } +deno_core = "0.238.0" env_logger = "0.10.0" handlebars = "4.5.0" jsonschema = { version = "0.17.1", features = [ "draft202012" ] } @@ -31,4 +31,4 @@ uuid = { version = "1.5.0", features = ["v4"] } walkdir = "2.4.0" [build-dependencies] -deno_core = "0.233.0" +deno_core = "0.238.0" diff --git a/README.md b/README.md index 479a554..81d328e 100644 --- a/README.md +++ b/README.md @@ -10,9 +10,16 @@

[senc](https://docs.senc.sh) (seh-nn-see) is a [hermetic](https://bazel.build/basics/hermeticity) -[TypeScript](https://www.typescriptlang.org/) interpreter for generating Infrastructure as Code (IaC). Use a familiar, -type-safe programming language to define and provision infrastructure, with protections that make your code easy to -debug and test. +[TypeScript](https://www.typescriptlang.org/) interpreter for generating config files. `senc` supports generating any +arbitrary JSON/YAML configurations, including: + +- CI config, like `.circleci/config.yml` or `.github/workflows`. +- OpenTofu/Terraform configuration (in [JSON format](https://developer.hashicorp.com/terraform/language/syntax/json)). +- Kubernetes manifests. + +Use a familiar, type-safe programming language to define and provision infrastructure, with protections that make your +code easy to debug and test. + @@ -254,8 +261,8 @@ msg: "hello world" ### Restricted features -`senc` aims to be a [hermetic] runtime, and thus most system related calls and environment access is disabled in the -runtime. Specifically, the following standard JavaScript features are missing: +`senc` aims to be a [hermetic](https://bazel.build/basics/hermeticity) runtime, and thus most system related calls and +environment access is disabled in the runtime. Specifically, the following standard JavaScript features are missing: - Network calls (e.g., `fetch` and `XMLHttpRequest`). - Filesystem access (e.g., `fs`), except through imports. @@ -377,7 +384,11 @@ object does not match the schema. ### Type libraries -We publish various auto generated type libraries that can be useful +We publish various auto generated type libraries that can be useful. Here are the officially maintained type libraries +that we provide: + +- CI Configuration Files: [senc-schemastore-ciconfig](https://github.com/fensak-io/senc-schemastore-ciconfig) + ([NPM](https://www.npmjs.com/package/@fensak-io/senc-schemastore-ciconfig)). ## Technology diff --git a/_ci/main.sen.ts b/_ci/main.sen.ts index f1a38a4..8cc2bae 100644 --- a/_ci/main.sen.ts +++ b/_ci/main.sen.ts @@ -1,7 +1,7 @@ // Copyright (c) Fensak, LLC. // SPDX-License-Identifier: MPL-2.0 -import type { JSONSchemaForCircleCIConfigurationFiles } from "@fensak-io/senc-schemastore-ciconfig"; +import type { CircleCIConfig } from "@fensak-io/senc-schemastore-ciconfig"; import { addSSHKeyStep, @@ -25,7 +25,7 @@ const filterReleaseBranch = { }, }; -const cfg: JSONSchemaForCircleCIConfigurationFiles = { +const cfg: CircleCIConfig = { version: 2.1, workflows: { lint_test_release: { diff --git a/_ci/package.json b/_ci/package.json index bd50381..9d4dc01 100644 --- a/_ci/package.json +++ b/_ci/package.json @@ -5,7 +5,7 @@ "check": "tsc --noEmit" }, "devDependencies": { - "@fensak-io/senc-schemastore-ciconfig": "^0.0.6", + "@fensak-io/senc-schemastore-ciconfig": "^0.0.7", "@fensak-io/senc-types": "^0.0.3", "prettier": "3.0.3", "typescript": "^5.2.2" diff --git a/_ci/pnpm-lock.yaml b/_ci/pnpm-lock.yaml index 186e786..acfa125 100644 --- a/_ci/pnpm-lock.yaml +++ b/_ci/pnpm-lock.yaml @@ -6,8 +6,8 @@ settings: devDependencies: '@fensak-io/senc-schemastore-ciconfig': - specifier: ^0.0.6 - version: 0.0.6 + specifier: ^0.0.7 + version: 0.0.7 '@fensak-io/senc-types': specifier: ^0.0.3 version: 0.0.3 @@ -20,8 +20,8 @@ devDependencies: packages: - /@fensak-io/senc-schemastore-ciconfig@0.0.6: - resolution: {integrity: sha512-L6GaQyVfZVMl3BECC+G46lSN2tlF5DS60lgUuamr0wL668vhfD8wQb4Jq/cgi+ULynABlkTzN8hIzfL/+GnKpA==} + /@fensak-io/senc-schemastore-ciconfig@0.0.7: + resolution: {integrity: sha512-RnZZi11xXrLCiXMJATi2CRSY9t75SdFobtEBlAofAt8PYCCnOXWsVj9lPbcBs2Bd5vwNUQ2+/OkpYJxd5IK5Yw==} dev: true /@fensak-io/senc-types@0.0.3: diff --git a/src/engine.rs b/src/engine.rs index 24a3826..549461f 100644 --- a/src/engine.rs +++ b/src/engine.rs @@ -146,7 +146,11 @@ async fn load_main_module(js_runtime: &mut JsRuntime, file_path: &str) -> Result let main_module = resolve_path(file_path, std::env::current_dir()?.as_path())?; let mod_id = js_runtime.load_main_module(&main_module, None).await?; let result = js_runtime.mod_evaluate(mod_id); - js_runtime.run_event_loop(false).await?; + let opts = PollEventLoopOptions { + wait_for_inspector: false, + pump_v8_message_loop: true, + }; + js_runtime.run_event_loop(opts).await?; result.await?; return Ok(mod_id); } @@ -173,7 +177,7 @@ async fn call_main_fn( main_fn: v8::Global, ) -> Result> { match ctx.tla_jsons { - None => js_runtime.call_and_await(&main_fn).await, + None => js_runtime.call(&main_fn).await, Some(_) => { let mut args: vec::Vec> = vec::Vec::new(); { @@ -186,7 +190,7 @@ async fn call_main_fn( args.push(deserialized_tla); } } - js_runtime.call_with_args_and_await(&main_fn, &args).await + js_runtime.call_with_args(&main_fn, &args).await } } }