@reventlessdev/rescript-node 2.0.0-alpha.10 → 2.0.0-alpha.12

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -3,6 +3,29 @@
3
3
  All notable changes to this project will be documented in this file.
4
4
  See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
5
5
 
6
+ # 2.0.0-alpha.12 (2026-09-16)
7
+
8
+ * fix(aws)!: stop a deploy that finds no Lambda layer ([62957f4](https://github.com/ReventlessDev/reventless-core/commit/62957f444ab2120f672b9ac0564f786d64090864))
9
+ ### Features
10
+
11
+ * **aws:** bake the component manifest with a command, in CI and by hand ([4b0dccc](https://github.com/ReventlessDev/reventless-core/commit/4b0dccc8fc3b99874108c82db282d73cc93a48e9))
12
+ * **aws:** deploy and remove a whole app with deploy-app up and down ([b7d0587](https://github.com/ReventlessDev/reventless-core/commit/b7d0587bd02a4b067a3a9fa21b5f77ea5210d792))
13
+
14
+ ### BREAKING CHANGES
15
+
16
+ * PulumiAws.Lambda.reventlessLayerArn is now a function that
17
+ returns the ARN and throws when there is none. Use Lambda.reventlessLayers()
18
+ for a function's layers argument.
19
+
20
+
21
+
22
+ # 2.0.0-alpha.11 (2026-09-09)
23
+
24
+ ### Bug Fixes
25
+
26
+ * **spec:** let the formatter settle the lifecycle model's layout ([09e1742](https://github.com/ReventlessDev/reventless-core/commit/09e17429c24d3b84ee6d324b0641d62db4f0d9f9))
27
+
28
+
6
29
  # 2.0.0-alpha.10 (2026-09-08)
7
30
 
8
31
  ### Features
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@reventlessdev/rescript-node",
3
- "version": "2.0.0-alpha.10",
3
+ "version": "2.0.0-alpha.12",
4
4
  "description": "ReScript bindings for the Node.js standard library",
5
5
  "license": "Apache-2.0",
6
6
  "devDependencies": {
@@ -23,6 +23,11 @@ external fromStringUtf8: (string, @as("utf8") _) => t = "from"
23
23
  @val @scope("Buffer")
24
24
  external fromStringBase64Url: (string, @as("base64url") _) => t = "from"
25
25
 
26
+ /** A `Buffer` over a copy of the bytes. A plain `Uint8Array` — what the AWS SDK
27
+ hands back — has only the array's own `toString`, which joins the numbers. */
28
+ @val @scope("Buffer")
29
+ external fromBytes: Uint8Array.t => t = "from"
30
+
26
31
  @send
27
32
  external toStringUtf8: (t, @as("utf8") _) => string = "toString"
28
33
 
@@ -1,12 +1,13 @@
1
1
  /** Bindings for
2
2
  [`node:child_process`](https://nodejs.org/api/child_process.html). */
3
-
4
3
  type execOptions = {
5
4
  cwd?: string,
6
5
  encoding?: string,
7
6
  env?: dict<string>,
8
7
  stdio?: array<string>,
9
8
  maxBuffer?: int,
9
+ /** Written to the child's stdin, which is then closed. */
10
+ input?: string,
10
11
  }
11
12
 
12
13
  @module("node:child_process")
@@ -17,6 +18,20 @@ external execSync: (string, execOptions) => string = "execSync"
17
18
  @module("node:child_process")
18
19
  external execFileSync: (string, array<string>, execOptions) => string = "execFileSync"
19
20
 
21
+ /** Pass `encoding` to get `stdout` / `stderr` as strings. All three stay null
22
+ when the program could not be started at all; `error` then says why. */
23
+ type spawnSyncResult = {
24
+ status: Nullable.t<int>,
25
+ stdout: Nullable.t<string>,
26
+ stderr: Nullable.t<string>,
27
+ error: Nullable.t<JsExn.t>,
28
+ }
29
+
30
+ /** Unlike `execFileSync`, never throws: a non-zero exit comes back as `status`
31
+ with the child's `stderr`, so a caller can tell one failure from another. */
32
+ @module("node:child_process")
33
+ external spawnSync: (string, array<string>, execOptions) => spawnSyncResult = "spawnSync"
34
+
20
35
  /** A running child process. Unlike the `*Sync` calls above, `spawn` returns
21
36
  while the child is still alive, so the caller keeps working alongside it —
22
37
  which is the whole reason to reach for this over `execFileSync`. */
@@ -1,5 +1,4 @@
1
1
  /** Bindings for [`node:crypto`](https://nodejs.org/api/crypto.html). */
2
-
3
2
  /** A Node `Buffer`. Abstract rather than aliased to `Uint8Array.t`: a digest
4
3
  buffer is only ever fed back into `createHmac` or stringified, and giving it
5
4
  its own type keeps those two uses from being confused with file bytes. */
package/src/NodeFs.res CHANGED
@@ -8,11 +8,10 @@
8
8
  passed wrongly — the `(string, string)` form is the one that permits
9
9
  `readFileSync(path, "utf-8")`, a different string, silently. Use
10
10
  {!readFileSyncBuffer} when the bytes are wanted rather than text. */
11
-
12
- // ── Existence and metadata ───────────────────────────────────────────────────
13
-
14
11
  @module("node:fs")
15
- external existsSync: string => bool = "existsSync"
12
+ external // ── Existence and metadata ───────────────────────────────────────────────────
13
+
14
+ existsSync: string => bool = "existsSync"
16
15
 
17
16
  @module("node:fs")
18
17
  external realpathSync: string => string = "realpathSync"
@@ -9,7 +9,6 @@
9
9
  `dirname` and `filename` are Node's own additions and are defined only for
10
10
  `file:` URLs; a bundler that rewrites modules to CommonJS drops them. `url`
11
11
  is the portable form and the one to reach for when either could apply. */
12
-
13
12
  @val @scope(("import", "meta"))
14
13
  external url: string = "url"
15
14
 
@@ -3,7 +3,6 @@
3
3
  `createRequire` is how an ESM module gets at CommonJS resolution, which is
4
4
  what `require.resolve` is wanted for here — locating a dependency's on-disk
5
5
  path without importing it. */
6
-
7
6
  type require
8
7
 
9
8
  @module("node:module")
package/src/NodeNet.res CHANGED
@@ -1,6 +1,5 @@
1
1
  /** Bindings for [`node:net`](https://nodejs.org/api/net.html) — TCP servers and
2
2
  the sockets they accept. */
3
-
4
3
  type socket
5
4
  type server
6
5
 
package/src/NodeOs.res CHANGED
@@ -1,4 +1,3 @@
1
1
  /** Bindings for [`node:os`](https://nodejs.org/api/os.html). */
2
-
3
2
  @module("node:os")
4
3
  external tmpdir: unit => string = "tmpdir"
package/src/NodePath.res CHANGED
@@ -5,7 +5,6 @@
5
5
  two-argument `join` and a variadic one are not duplicates of each other —
6
6
  they are different functions with the same name, and which one a call site
7
7
  got used to depend on which inline binding block it happened to sit near. */
8
-
9
8
  @module("node:path") @variadic
10
9
  external join: array<string> => string = "join"
11
10
 
@@ -5,7 +5,6 @@
5
5
  "process.env"` and `@val @scope("process") external env: dict<string> =
6
6
  "env"` compile to the same access, and the tree had both spellings. This is
7
7
  the one. */
8
-
9
8
  @val @scope("process")
10
9
  external argv: array<string> = "argv"
11
10
 
@@ -24,6 +23,10 @@ external exit: int => unit = "exit"
24
23
  @val @scope("process")
25
24
  external pid: int = "pid"
26
25
 
26
+ /** `versions["node"]` is the running Node's version, without the leading `v`. */
27
+ @val @scope("process")
28
+ external versions: dict<string> = "versions"
29
+
27
30
  /** Signalling another process — or, with signal `0`, asking whether it is still
28
31
  there without disturbing it. Throws when the pid is gone (`ESRCH`) or not
29
32
  ours to signal (`EPERM`), so a liveness check is a `try`. */
package/src/NodeUrl.res CHANGED
@@ -2,7 +2,6 @@
2
2
 
3
3
  Only the two path/URL converters — the `URL` class itself is a WHATWG global
4
4
  rather than a `node:` import, so it belongs to `rescript-web`, not here. */
5
-
6
5
  @module("node:url")
7
6
  external fileURLToPath: string => string = "fileURLToPath"
8
7