rightsize 0.3.0 → 0.5.0

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.
Files changed (68) hide show
  1. package/README.md +33 -27
  2. package/dist/backend-docker/backend.d.ts +14 -0
  3. package/dist/backend-docker/backend.d.ts.map +1 -1
  4. package/dist/backend-docker/backend.js +28 -0
  5. package/dist/backend-docker/backend.js.map +1 -1
  6. package/dist/backend-docker/cli.d.ts +4 -0
  7. package/dist/backend-docker/cli.d.ts.map +1 -1
  8. package/dist/backend-docker/cli.js +8 -0
  9. package/dist/backend-docker/cli.js.map +1 -1
  10. package/dist/backend-msb/backend.d.ts +30 -0
  11. package/dist/backend-msb/backend.d.ts.map +1 -1
  12. package/dist/backend-msb/backend.js +64 -0
  13. package/dist/backend-msb/backend.js.map +1 -1
  14. package/dist/backend-msb/commands.d.ts +6 -0
  15. package/dist/backend-msb/commands.d.ts.map +1 -1
  16. package/dist/backend-msb/commands.js +12 -0
  17. package/dist/backend-msb/commands.js.map +1 -1
  18. package/dist/backend-msb/snapshot-import.d.ts +33 -0
  19. package/dist/backend-msb/snapshot-import.d.ts.map +1 -0
  20. package/dist/backend-msb/snapshot-import.js +48 -0
  21. package/dist/backend-msb/snapshot-import.js.map +1 -0
  22. package/dist/backend-msb/snapshot-list.d.ts +43 -0
  23. package/dist/backend-msb/snapshot-list.d.ts.map +1 -0
  24. package/dist/backend-msb/snapshot-list.js +53 -0
  25. package/dist/backend-msb/snapshot-list.js.map +1 -0
  26. package/dist/core/backend.d.ts +29 -0
  27. package/dist/core/backend.d.ts.map +1 -1
  28. package/dist/core/checkpoint/api.d.ts +49 -0
  29. package/dist/core/checkpoint/api.d.ts.map +1 -1
  30. package/dist/core/checkpoint/api.js +124 -1
  31. package/dist/core/checkpoint/api.js.map +1 -1
  32. package/dist/core/checkpoint/archive.d.ts +52 -0
  33. package/dist/core/checkpoint/archive.d.ts.map +1 -0
  34. package/dist/core/checkpoint/archive.js +134 -0
  35. package/dist/core/checkpoint/archive.js.map +1 -0
  36. package/dist/core/checkpoint/registry.d.ts +2 -0
  37. package/dist/core/checkpoint/registry.d.ts.map +1 -1
  38. package/dist/core/checkpoint/registry.js +2 -1
  39. package/dist/core/checkpoint/registry.js.map +1 -1
  40. package/dist/core/checkpoint/tar-cli.d.ts +45 -0
  41. package/dist/core/checkpoint/tar-cli.d.ts.map +1 -0
  42. package/dist/core/checkpoint/tar-cli.js +86 -0
  43. package/dist/core/checkpoint/tar-cli.js.map +1 -0
  44. package/dist/core/errors.d.ts +37 -0
  45. package/dist/core/errors.d.ts.map +1 -1
  46. package/dist/core/errors.js +44 -0
  47. package/dist/core/errors.js.map +1 -1
  48. package/dist/index.d.ts +2 -2
  49. package/dist/index.d.ts.map +1 -1
  50. package/dist/index.js +2 -2
  51. package/dist/index.js.map +1 -1
  52. package/dist/modules/cassandra.d.ts +49 -0
  53. package/dist/modules/cassandra.d.ts.map +1 -0
  54. package/dist/modules/cassandra.js +69 -0
  55. package/dist/modules/cassandra.js.map +1 -0
  56. package/dist/modules/index.d.ts +4 -1
  57. package/dist/modules/index.d.ts.map +1 -1
  58. package/dist/modules/index.js +4 -1
  59. package/dist/modules/index.js.map +1 -1
  60. package/dist/modules/minio.d.ts +35 -0
  61. package/dist/modules/minio.d.ts.map +1 -0
  62. package/dist/modules/minio.js +64 -0
  63. package/dist/modules/minio.js.map +1 -0
  64. package/dist/modules/valkey.d.ts +21 -0
  65. package/dist/modules/valkey.d.ts.map +1 -0
  66. package/dist/modules/valkey.js +32 -0
  67. package/dist/modules/valkey.js.map +1 -0
  68. package/package.json +1 -1
@@ -192,4 +192,48 @@ export class InvalidCheckpointNameError extends Error {
192
192
  this.name = "InvalidCheckpointNameError";
193
193
  }
194
194
  }
195
+ /**
196
+ * Thrown by `Checkpoints.exportTo` when the checkpoint's own backend artifact
197
+ * no longer exists (`hasCheckpoint` reports `false`) — exporting a stale
198
+ * checkpoint would otherwise produce an archive whose `artifact` member the
199
+ * backend simply failed to write. Thrown before any filesystem work (no temp
200
+ * dir, no tar), after the backend-match check has already passed.
201
+ */
202
+ export class CheckpointArtifactMissingError extends Error {
203
+ ref;
204
+ backend;
205
+ constructor(
206
+ /** The checkpoint's ref, exactly as recorded on the `Checkpoint` being exported. */
207
+ ref,
208
+ /** The backend this ref was supposed to exist on. */
209
+ backend) {
210
+ super(`cannot export checkpoint '${ref}' — its backend artifact no longer exists on the '${backend}' backend ` +
211
+ "(removed by hand, or by something outside this library); this checkpoint is stale.");
212
+ this.ref = ref;
213
+ this.backend = backend;
214
+ this.name = "CheckpointArtifactMissingError";
215
+ }
216
+ }
217
+ /**
218
+ * Thrown by `Checkpoints.importFrom` when `srcPath` isn't a well-formed
219
+ * rightsize checkpoint archive: the file doesn't exist, it isn't a valid tar,
220
+ * it has no `checkpoint.json` member, that member isn't valid JSON, isn't
221
+ * shaped like the pinned archive format, or its `rightsizeArchive` field
222
+ * isn't the version this library understands. Thrown before any backend call
223
+ * and before any registry write.
224
+ */
225
+ export class MalformedCheckpointArchiveError extends Error {
226
+ archivePath;
227
+ reason;
228
+ constructor(
229
+ /** The archive path passed to `importFrom`, exactly as given. */
230
+ archivePath,
231
+ /** A noun-phrase-ish description of what's wrong with it. */
232
+ reason) {
233
+ super(`checkpoint archive '${archivePath}' is malformed — ${reason}`);
234
+ this.archivePath = archivePath;
235
+ this.reason = reason;
236
+ this.name = "MalformedCheckpointArchiveError";
237
+ }
238
+ }
195
239
  //# sourceMappingURL=errors.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/core/errors.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/core/errors.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -8,11 +8,11 @@
8
8
  * contracts plus the `registerBackend` registry, and the typed error
9
9
  * classes. This module depends on no backend — import `rightsize/backend-msb`
10
10
  * and/or `rightsize/backend-docker` to register one, or `rightsize/modules`
11
- * for the eighteen preconfigured containers built on top of this surface.
11
+ * for the twenty-one preconfigured containers built on top of this surface.
12
12
  *
13
13
  * @packageDocumentation
14
14
  */
15
- export { UnsupportedByBackendError, PortBindConflictError, ContainerLaunchError, BackendError, ProvisionError, ReuseWithNetworkError, IsolationRequiredError, CheckpointUnsupportedError, CheckpointBackendMismatchError, ReuseFromCheckpointError, RelativeContainerPathError, InvalidCheckpointNameError, } from "./core/errors.js";
15
+ export { UnsupportedByBackendError, PortBindConflictError, ContainerLaunchError, BackendError, ProvisionError, ReuseWithNetworkError, IsolationRequiredError, CheckpointUnsupportedError, CheckpointBackendMismatchError, ReuseFromCheckpointError, RelativeContainerPathError, InvalidCheckpointNameError, CheckpointArtifactMissingError, MalformedCheckpointArchiveError, } from "./core/errors.js";
16
16
  export type { PortBinding, FileMount, ExecResult, ContainerSpec, Checkpoint } from "./core/model.js";
17
17
  export type { NetworkLink, SandboxHandle, FollowHandle, SandboxBackend, BackendProvider, ReaperKillCommand, BackendCapabilities, } from "./core/backend.js";
18
18
  export { registerBackend, Backends } from "./core/backends.js";
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AACH,OAAO,EACL,yBAAyB,EACzB,qBAAqB,EACrB,oBAAoB,EACpB,YAAY,EACZ,cAAc,EACd,qBAAqB,EACrB,sBAAsB,EACtB,0BAA0B,EAC1B,8BAA8B,EAC9B,wBAAwB,EACxB,0BAA0B,EAC1B,0BAA0B,GAC3B,MAAM,kBAAkB,CAAC;AAC1B,YAAY,EAAE,WAAW,EAAE,SAAS,EAAE,UAAU,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AACrG,YAAY,EACV,WAAW,EACX,aAAa,EACb,YAAY,EACZ,cAAc,EACd,eAAe,EACf,iBAAiB,EACjB,mBAAmB,GACpB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,eAAe,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC/D,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACjD,OAAO,EAAE,IAAI,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AACxD,YAAY,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC/D,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AACzC,OAAO,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAC5C,YAAY,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AACzD,OAAO,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AAC/D,OAAO,EAAE,WAAW,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AACzE,YAAY,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AACH,OAAO,EACL,yBAAyB,EACzB,qBAAqB,EACrB,oBAAoB,EACpB,YAAY,EACZ,cAAc,EACd,qBAAqB,EACrB,sBAAsB,EACtB,0BAA0B,EAC1B,8BAA8B,EAC9B,wBAAwB,EACxB,0BAA0B,EAC1B,0BAA0B,EAC1B,8BAA8B,EAC9B,+BAA+B,GAChC,MAAM,kBAAkB,CAAC;AAC1B,YAAY,EAAE,WAAW,EAAE,SAAS,EAAE,UAAU,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AACrG,YAAY,EACV,WAAW,EACX,aAAa,EACb,YAAY,EACZ,cAAc,EACd,eAAe,EACf,iBAAiB,EACjB,mBAAmB,GACpB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,eAAe,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC/D,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACjD,OAAO,EAAE,IAAI,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AACxD,YAAY,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC/D,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AACzC,OAAO,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAC5C,YAAY,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AACzD,OAAO,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AAC/D,OAAO,EAAE,WAAW,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AACzE,YAAY,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC"}
package/dist/index.js CHANGED
@@ -8,11 +8,11 @@
8
8
  * contracts plus the `registerBackend` registry, and the typed error
9
9
  * classes. This module depends on no backend — import `rightsize/backend-msb`
10
10
  * and/or `rightsize/backend-docker` to register one, or `rightsize/modules`
11
- * for the eighteen preconfigured containers built on top of this surface.
11
+ * for the twenty-one preconfigured containers built on top of this surface.
12
12
  *
13
13
  * @packageDocumentation
14
14
  */
15
- export { UnsupportedByBackendError, PortBindConflictError, ContainerLaunchError, BackendError, ProvisionError, ReuseWithNetworkError, IsolationRequiredError, CheckpointUnsupportedError, CheckpointBackendMismatchError, ReuseFromCheckpointError, RelativeContainerPathError, InvalidCheckpointNameError, } from "./core/errors.js";
15
+ export { UnsupportedByBackendError, PortBindConflictError, ContainerLaunchError, BackendError, ProvisionError, ReuseWithNetworkError, IsolationRequiredError, CheckpointUnsupportedError, CheckpointBackendMismatchError, ReuseFromCheckpointError, RelativeContainerPathError, InvalidCheckpointNameError, CheckpointArtifactMissingError, MalformedCheckpointArchiveError, } from "./core/errors.js";
16
16
  export { registerBackend, Backends } from "./core/backends.js";
17
17
  export { FreePorts } from "./core/free-ports.js";
18
18
  export { Wait, HttpWaitStrategy } from "./core/wait.js";
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AACH,OAAO,EACL,yBAAyB,EACzB,qBAAqB,EACrB,oBAAoB,EACpB,YAAY,EACZ,cAAc,EACd,qBAAqB,EACrB,sBAAsB,EACtB,0BAA0B,EAC1B,8BAA8B,EAC9B,wBAAwB,EACxB,0BAA0B,EAC1B,0BAA0B,GAC3B,MAAM,kBAAkB,CAAC;AAW1B,OAAO,EAAE,eAAe,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC/D,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACjD,OAAO,EAAE,IAAI,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAExD,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AACzC,OAAO,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAE5C,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AACzD,OAAO,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AAC/D,OAAO,EAAE,WAAW,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAEzE,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AACH,OAAO,EACL,yBAAyB,EACzB,qBAAqB,EACrB,oBAAoB,EACpB,YAAY,EACZ,cAAc,EACd,qBAAqB,EACrB,sBAAsB,EACtB,0BAA0B,EAC1B,8BAA8B,EAC9B,wBAAwB,EACxB,0BAA0B,EAC1B,0BAA0B,EAC1B,8BAA8B,EAC9B,+BAA+B,GAChC,MAAM,kBAAkB,CAAC;AAW1B,OAAO,EAAE,eAAe,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC/D,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACjD,OAAO,EAAE,IAAI,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAExD,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AACzC,OAAO,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAE5C,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AACzD,OAAO,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AAC/D,OAAO,EAAE,WAAW,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAEzE,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC"}
@@ -0,0 +1,49 @@
1
+ import { GenericContainer } from "../core/generic-container.js";
2
+ /**
3
+ * A single-node Cassandra container.
4
+ *
5
+ * ### `GPG_KEYS` must be overridden — this is the difference between booting and aborting
6
+ *
7
+ * `cassandra:5.0.8`'s baked-in `GPG_KEYS` build arg contains a literal TAB
8
+ * character, and msb 0.6.6 panics on any image whose baked env contains one
9
+ * — before the guest even boots:
10
+ *
11
+ * ```
12
+ * sandbox process exited (signal: 6 (SIGABRT)) before agent relay became available
13
+ * ```
14
+ *
15
+ * with `msb logs --source system` showing:
16
+ *
17
+ * ```
18
+ * panicked at msb_krun_vmm-0.1.25/src/builder.rs:1154: ... Err value: InvalidAscii
19
+ * ```
20
+ *
21
+ * `GPG_KEYS` is consumed only at image-build time (verifying the signing
22
+ * keys baked into that layer) — it has no effect on the running container,
23
+ * so overriding it to an empty, tab-free string here is safe and required.
24
+ * Without this override, `start()` never gets far enough to run its own
25
+ * wait strategy at all.
26
+ *
27
+ * ### Heap sized down, memory ceiling measured
28
+ *
29
+ * `MAX_HEAP_SIZE=512M`/`HEAP_NEWSIZE=128M` keep the JVM small; `2560` MB is
30
+ * the verified memory ceiling at that heap size.
31
+ *
32
+ * ### Readiness
33
+ *
34
+ * Anchored on the CQL native-transport log line (`Starting listening for
35
+ * CQL clients`), observed at 58s on a quiet local machine. 300s absorbs a
36
+ * loaded-host boot without masking a real hang — Cassandra is heavier than
37
+ * either Keycloak or MySQL, both of which carry 180s in this library.
38
+ */
39
+ export declare class CassandraContainer extends GenericContainer {
40
+ constructor(image?: string);
41
+ static start(image?: string): Promise<CassandraContainer>;
42
+ /** `<host>:<port>` for the running container — the shape most CQL drivers want for a contact point. */
43
+ get contactPoint(): string;
44
+ /** The mapped CQL native-transport port. */
45
+ get cqlPort(): number;
46
+ /** This single node's local datacenter name — required by drivers (e.g. the DataStax Node driver) that insist on an explicit value at connect time. */
47
+ get localDatacenter(): string;
48
+ }
49
+ //# sourceMappingURL=cassandra.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cassandra.d.ts","sourceRoot":"","sources":["../../src/modules/cassandra.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AAMhE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoCG;AACH,qBAAa,kBAAmB,SAAQ,gBAAgB;gBAC1C,KAAK,SAAoB;WAaf,KAAK,CAAC,KAAK,SAAoB,GAAG,OAAO,CAAC,kBAAkB,CAAC;IAInF,uGAAuG;IACvG,IAAI,YAAY,IAAI,MAAM,CAEzB;IAED,4CAA4C;IAC5C,IAAI,OAAO,IAAI,MAAM,CAEpB;IAED,uJAAuJ;IACvJ,IAAI,eAAe,IAAI,MAAM,CAE5B;CACF"}
@@ -0,0 +1,69 @@
1
+ import { GenericContainer } from "../core/generic-container.js";
2
+ import { Wait } from "../core/wait.js";
3
+ const CQL_PORT = 9042;
4
+ const STARTUP_TIMEOUT_MS = 300_000;
5
+ /**
6
+ * A single-node Cassandra container.
7
+ *
8
+ * ### `GPG_KEYS` must be overridden — this is the difference between booting and aborting
9
+ *
10
+ * `cassandra:5.0.8`'s baked-in `GPG_KEYS` build arg contains a literal TAB
11
+ * character, and msb 0.6.6 panics on any image whose baked env contains one
12
+ * — before the guest even boots:
13
+ *
14
+ * ```
15
+ * sandbox process exited (signal: 6 (SIGABRT)) before agent relay became available
16
+ * ```
17
+ *
18
+ * with `msb logs --source system` showing:
19
+ *
20
+ * ```
21
+ * panicked at msb_krun_vmm-0.1.25/src/builder.rs:1154: ... Err value: InvalidAscii
22
+ * ```
23
+ *
24
+ * `GPG_KEYS` is consumed only at image-build time (verifying the signing
25
+ * keys baked into that layer) — it has no effect on the running container,
26
+ * so overriding it to an empty, tab-free string here is safe and required.
27
+ * Without this override, `start()` never gets far enough to run its own
28
+ * wait strategy at all.
29
+ *
30
+ * ### Heap sized down, memory ceiling measured
31
+ *
32
+ * `MAX_HEAP_SIZE=512M`/`HEAP_NEWSIZE=128M` keep the JVM small; `2560` MB is
33
+ * the verified memory ceiling at that heap size.
34
+ *
35
+ * ### Readiness
36
+ *
37
+ * Anchored on the CQL native-transport log line (`Starting listening for
38
+ * CQL clients`), observed at 58s on a quiet local machine. 300s absorbs a
39
+ * loaded-host boot without masking a real hang — Cassandra is heavier than
40
+ * either Keycloak or MySQL, both of which carry 180s in this library.
41
+ */
42
+ export class CassandraContainer extends GenericContainer {
43
+ constructor(image = "cassandra:5.0.8") {
44
+ super(image);
45
+ this.withExposedPorts(CQL_PORT)
46
+ // Required — see the class doc for the exact panic this avoids.
47
+ .withEnv("GPG_KEYS", "")
48
+ .withEnv("MAX_HEAP_SIZE", "512M")
49
+ .withEnv("HEAP_NEWSIZE", "128M")
50
+ .withMemoryLimit(2560)
51
+ .waitingFor(Wait.forLogMessage(".*Starting listening for CQL clients.*", 1).withStartupTimeout(STARTUP_TIMEOUT_MS));
52
+ }
53
+ static async start(image = "cassandra:5.0.8") {
54
+ return (await new CassandraContainer(image).start());
55
+ }
56
+ /** `<host>:<port>` for the running container — the shape most CQL drivers want for a contact point. */
57
+ get contactPoint() {
58
+ return `${this.host}:${this.getMappedPort(CQL_PORT)}`;
59
+ }
60
+ /** The mapped CQL native-transport port. */
61
+ get cqlPort() {
62
+ return this.getMappedPort(CQL_PORT);
63
+ }
64
+ /** This single node's local datacenter name — required by drivers (e.g. the DataStax Node driver) that insist on an explicit value at connect time. */
65
+ get localDatacenter() {
66
+ return "datacenter1";
67
+ }
68
+ }
69
+ //# sourceMappingURL=cassandra.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cassandra.js","sourceRoot":"","sources":["../../src/modules/cassandra.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AAChE,OAAO,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAC;AAEvC,MAAM,QAAQ,GAAG,IAAI,CAAC;AACtB,MAAM,kBAAkB,GAAG,OAAO,CAAC;AAEnC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoCG;AACH,MAAM,OAAO,kBAAmB,SAAQ,gBAAgB;IACtD,YAAY,KAAK,GAAG,iBAAiB;QACnC,KAAK,CAAC,KAAK,CAAC,CAAC;QACb,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC;YAC7B,gEAAgE;aAC/D,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC;aACvB,OAAO,CAAC,eAAe,EAAE,MAAM,CAAC;aAChC,OAAO,CAAC,cAAc,EAAE,MAAM,CAAC;aAC/B,eAAe,CAAC,IAAI,CAAC;aACrB,UAAU,CACT,IAAI,CAAC,aAAa,CAAC,wCAAwC,EAAE,CAAC,CAAC,CAAC,kBAAkB,CAAC,kBAAkB,CAAC,CACvG,CAAC;IACN,CAAC;IAED,MAAM,CAAU,KAAK,CAAC,KAAK,CAAC,KAAK,GAAG,iBAAiB;QACnD,OAAO,CAAC,MAAM,IAAI,kBAAkB,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,CAAuB,CAAC;IAC7E,CAAC;IAED,uGAAuG;IACvG,IAAI,YAAY;QACd,OAAO,GAAG,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,EAAE,CAAC;IACxD,CAAC;IAED,4CAA4C;IAC5C,IAAI,OAAO;QACT,OAAO,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;IACtC,CAAC;IAED,uJAAuJ;IACvJ,IAAI,eAAe;QACjB,OAAO,aAAa,CAAC;IACvB,CAAC;CACF"}
@@ -1,5 +1,5 @@
1
1
  /**
2
- * `rightsize/modules` — eighteen preconfigured containers.
2
+ * `rightsize/modules` — twenty-one preconfigured containers.
3
3
  *
4
4
  * Each module is a `GenericContainer` subclass with sensible defaults (image
5
5
  * tag, exposed ports, wait strategy, and any memory floor its image needs)
@@ -11,6 +11,7 @@
11
11
  * @packageDocumentation
12
12
  */
13
13
  export { RedisContainer } from "./redis.js";
14
+ export { ValkeyContainer } from "./valkey.js";
14
15
  export { MemcachedContainer, MemcachedRespondsStrategy } from "./memcached.js";
15
16
  export { ArangoContainer } from "./arango.js";
16
17
  export { MongoDBContainer } from "./mongodb.js";
@@ -28,4 +29,6 @@ export { KeycloakContainer } from "./keycloak.js";
28
29
  export { ClickHouseContainer } from "./clickhouse.js";
29
30
  export { Neo4jContainer } from "./neo4j.js";
30
31
  export { FlociContainer } from "./floci.js";
32
+ export { MinIOContainer } from "./minio.js";
33
+ export { CassandraContainer } from "./cassandra.js";
31
34
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/modules/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AACH,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAC5C,OAAO,EAAE,kBAAkB,EAAE,yBAAyB,EAAE,MAAM,gBAAgB,CAAC;AAC/E,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAChD,OAAO,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAClD,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAC5C,OAAO,EAAE,0BAA0B,EAAE,MAAM,0BAA0B,CAAC;AACtE,OAAO,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAClD,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAC5C,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAC5C,OAAO,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAClD,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAChD,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAC5C,OAAO,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAClD,OAAO,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAClD,OAAO,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AACtD,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAC5C,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/modules/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AACH,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAC5C,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,EAAE,kBAAkB,EAAE,yBAAyB,EAAE,MAAM,gBAAgB,CAAC;AAC/E,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAChD,OAAO,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAClD,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAC5C,OAAO,EAAE,0BAA0B,EAAE,MAAM,0BAA0B,CAAC;AACtE,OAAO,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAClD,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAC5C,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAC5C,OAAO,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAClD,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAChD,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAC5C,OAAO,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAClD,OAAO,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAClD,OAAO,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AACtD,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAC5C,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAC5C,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAC5C,OAAO,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC"}
@@ -1,5 +1,5 @@
1
1
  /**
2
- * `rightsize/modules` — eighteen preconfigured containers.
2
+ * `rightsize/modules` — twenty-one preconfigured containers.
3
3
  *
4
4
  * Each module is a `GenericContainer` subclass with sensible defaults (image
5
5
  * tag, exposed ports, wait strategy, and any memory floor its image needs)
@@ -11,6 +11,7 @@
11
11
  * @packageDocumentation
12
12
  */
13
13
  export { RedisContainer } from "./redis.js";
14
+ export { ValkeyContainer } from "./valkey.js";
14
15
  export { MemcachedContainer, MemcachedRespondsStrategy } from "./memcached.js";
15
16
  export { ArangoContainer } from "./arango.js";
16
17
  export { MongoDBContainer } from "./mongodb.js";
@@ -28,4 +29,6 @@ export { KeycloakContainer } from "./keycloak.js";
28
29
  export { ClickHouseContainer } from "./clickhouse.js";
29
30
  export { Neo4jContainer } from "./neo4j.js";
30
31
  export { FlociContainer } from "./floci.js";
32
+ export { MinIOContainer } from "./minio.js";
33
+ export { CassandraContainer } from "./cassandra.js";
31
34
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/modules/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AACH,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAC5C,OAAO,EAAE,kBAAkB,EAAE,yBAAyB,EAAE,MAAM,gBAAgB,CAAC;AAC/E,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAChD,OAAO,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAClD,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAC5C,OAAO,EAAE,0BAA0B,EAAE,MAAM,0BAA0B,CAAC;AACtE,OAAO,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAClD,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAC5C,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAC5C,OAAO,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAClD,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAChD,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAC5C,OAAO,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAClD,OAAO,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAClD,OAAO,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AACtD,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAC5C,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/modules/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AACH,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAC5C,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,EAAE,kBAAkB,EAAE,yBAAyB,EAAE,MAAM,gBAAgB,CAAC;AAC/E,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAChD,OAAO,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAClD,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAC5C,OAAO,EAAE,0BAA0B,EAAE,MAAM,0BAA0B,CAAC;AACtE,OAAO,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAClD,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAC5C,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAC5C,OAAO,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAClD,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAChD,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAC5C,OAAO,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAClD,OAAO,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAClD,OAAO,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AACtD,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAC5C,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAC5C,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAC5C,OAAO,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC"}
@@ -0,0 +1,35 @@
1
+ import { GenericContainer } from "../core/generic-container.js";
2
+ /**
3
+ * A single-node MinIO container — an S3-compatible object store. Requires
4
+ * an explicit command: the image's default ENTRYPOINT alone does not serve,
5
+ * so this module always runs `server /data --console-address :9001`.
6
+ *
7
+ * `MINIO_ROOT_USER`/`MINIO_ROOT_PASSWORD` default to `testuser`/
8
+ * `testpassword`, not this library's usual `test`/`test` pair — MinIO
9
+ * itself rejects a root password shorter than 8 characters, so `test` (4
10
+ * characters) is a non-starter here.
11
+ *
12
+ * Exposes both the S3 API (9000, what `endpointUrl` wraps) and the web
13
+ * console (9001, published for anyone who wants to open it directly; no
14
+ * helper wraps it).
15
+ *
16
+ * Readiness is a protocol-aware HTTP check against `/minio/health/live` on
17
+ * the API port — verified answering 200 on the very first poll after boot.
18
+ */
19
+ export declare class MinIOContainer extends GenericContainer {
20
+ private rootUserState;
21
+ private rootPasswordState;
22
+ constructor(image?: string);
23
+ static start(image?: string): Promise<MinIOContainer>;
24
+ /** Overrides `MINIO_ROOT_USER` (default `testuser`). */
25
+ withRootUser(user: string): this;
26
+ /** Overrides `MINIO_ROOT_PASSWORD` (default `testpassword`). MinIO rejects anything shorter than 8 characters. */
27
+ withRootPassword(password: string): this;
28
+ /** The configured root user (default `testuser`). */
29
+ get rootUser(): string;
30
+ /** The configured root password (default `testpassword`). */
31
+ get rootPassword(): string;
32
+ /** The S3 API's base URL for the running container. */
33
+ get endpointUrl(): string;
34
+ }
35
+ //# sourceMappingURL=minio.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"minio.d.ts","sourceRoot":"","sources":["../../src/modules/minio.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AAMhE;;;;;;;;;;;;;;;;GAgBG;AACH,qBAAa,cAAe,SAAQ,gBAAgB;IAClD,OAAO,CAAC,aAAa,CAAc;IACnC,OAAO,CAAC,iBAAiB,CAAkB;gBAE/B,KAAK,SAA6C;WAcxC,KAAK,CAAC,KAAK,SAA6C,GAAG,OAAO,CAAC,cAAc,CAAC;IAIxG,wDAAwD;IACxD,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAKhC,kHAAkH;IAClH,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;IAKxC,qDAAqD;IACrD,IAAI,QAAQ,IAAI,MAAM,CAErB;IAED,6DAA6D;IAC7D,IAAI,YAAY,IAAI,MAAM,CAEzB;IAED,uDAAuD;IACvD,IAAI,WAAW,IAAI,MAAM,CAExB;CACF"}
@@ -0,0 +1,64 @@
1
+ import { GenericContainer } from "../core/generic-container.js";
2
+ import { Wait } from "../core/wait.js";
3
+ const API_PORT = 9000;
4
+ const CONSOLE_PORT = 9001;
5
+ /**
6
+ * A single-node MinIO container — an S3-compatible object store. Requires
7
+ * an explicit command: the image's default ENTRYPOINT alone does not serve,
8
+ * so this module always runs `server /data --console-address :9001`.
9
+ *
10
+ * `MINIO_ROOT_USER`/`MINIO_ROOT_PASSWORD` default to `testuser`/
11
+ * `testpassword`, not this library's usual `test`/`test` pair — MinIO
12
+ * itself rejects a root password shorter than 8 characters, so `test` (4
13
+ * characters) is a non-starter here.
14
+ *
15
+ * Exposes both the S3 API (9000, what `endpointUrl` wraps) and the web
16
+ * console (9001, published for anyone who wants to open it directly; no
17
+ * helper wraps it).
18
+ *
19
+ * Readiness is a protocol-aware HTTP check against `/minio/health/live` on
20
+ * the API port — verified answering 200 on the very first poll after boot.
21
+ */
22
+ export class MinIOContainer extends GenericContainer {
23
+ rootUserState = "testuser";
24
+ rootPasswordState = "testpassword";
25
+ constructor(image = "minio/minio:RELEASE.2025-09-07T16-13-09Z") {
26
+ super(image);
27
+ this.withExposedPorts(API_PORT, CONSOLE_PORT)
28
+ .withCommand("server", "/data", "--console-address", ":9001")
29
+ .withEnv("MINIO_ROOT_USER", this.rootUserState)
30
+ .withEnv("MINIO_ROOT_PASSWORD", this.rootPasswordState)
31
+ .waitingFor(Wait.forHttp("/minio/health/live").forPort(API_PORT));
32
+ // No withMemoryLimit override: the round-trip that verified this module
33
+ // ran at 1024 MB, but whether MinIO actually needs more than msb's
34
+ // default microVM sizing was never isolated in that pass — a floor
35
+ // belongs here once that's measured on its own, not assumed from a
36
+ // number that included the whole round-trip's overhead.
37
+ }
38
+ static async start(image = "minio/minio:RELEASE.2025-09-07T16-13-09Z") {
39
+ return (await new MinIOContainer(image).start());
40
+ }
41
+ /** Overrides `MINIO_ROOT_USER` (default `testuser`). */
42
+ withRootUser(user) {
43
+ this.rootUserState = user;
44
+ return this.withEnv("MINIO_ROOT_USER", user);
45
+ }
46
+ /** Overrides `MINIO_ROOT_PASSWORD` (default `testpassword`). MinIO rejects anything shorter than 8 characters. */
47
+ withRootPassword(password) {
48
+ this.rootPasswordState = password;
49
+ return this.withEnv("MINIO_ROOT_PASSWORD", password);
50
+ }
51
+ /** The configured root user (default `testuser`). */
52
+ get rootUser() {
53
+ return this.rootUserState;
54
+ }
55
+ /** The configured root password (default `testpassword`). */
56
+ get rootPassword() {
57
+ return this.rootPasswordState;
58
+ }
59
+ /** The S3 API's base URL for the running container. */
60
+ get endpointUrl() {
61
+ return `http://${this.host}:${this.getMappedPort(API_PORT)}`;
62
+ }
63
+ }
64
+ //# sourceMappingURL=minio.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"minio.js","sourceRoot":"","sources":["../../src/modules/minio.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AAChE,OAAO,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAC;AAEvC,MAAM,QAAQ,GAAG,IAAI,CAAC;AACtB,MAAM,YAAY,GAAG,IAAI,CAAC;AAE1B;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,OAAO,cAAe,SAAQ,gBAAgB;IAC1C,aAAa,GAAG,UAAU,CAAC;IAC3B,iBAAiB,GAAG,cAAc,CAAC;IAE3C,YAAY,KAAK,GAAG,0CAA0C;QAC5D,KAAK,CAAC,KAAK,CAAC,CAAC;QACb,IAAI,CAAC,gBAAgB,CAAC,QAAQ,EAAE,YAAY,CAAC;aAC1C,WAAW,CAAC,QAAQ,EAAE,OAAO,EAAE,mBAAmB,EAAE,OAAO,CAAC;aAC5D,OAAO,CAAC,iBAAiB,EAAE,IAAI,CAAC,aAAa,CAAC;aAC9C,OAAO,CAAC,qBAAqB,EAAE,IAAI,CAAC,iBAAiB,CAAC;aACtD,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,oBAAoB,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC;QACpE,wEAAwE;QACxE,mEAAmE;QACnE,mEAAmE;QACnE,mEAAmE;QACnE,wDAAwD;IAC1D,CAAC;IAED,MAAM,CAAU,KAAK,CAAC,KAAK,CAAC,KAAK,GAAG,0CAA0C;QAC5E,OAAO,CAAC,MAAM,IAAI,cAAc,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,CAAmB,CAAC;IACrE,CAAC;IAED,wDAAwD;IACxD,YAAY,CAAC,IAAY;QACvB,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;QAC1B,OAAO,IAAI,CAAC,OAAO,CAAC,iBAAiB,EAAE,IAAI,CAAC,CAAC;IAC/C,CAAC;IAED,kHAAkH;IAClH,gBAAgB,CAAC,QAAgB;QAC/B,IAAI,CAAC,iBAAiB,GAAG,QAAQ,CAAC;QAClC,OAAO,IAAI,CAAC,OAAO,CAAC,qBAAqB,EAAE,QAAQ,CAAC,CAAC;IACvD,CAAC;IAED,qDAAqD;IACrD,IAAI,QAAQ;QACV,OAAO,IAAI,CAAC,aAAa,CAAC;IAC5B,CAAC;IAED,6DAA6D;IAC7D,IAAI,YAAY;QACd,OAAO,IAAI,CAAC,iBAAiB,CAAC;IAChC,CAAC;IAED,uDAAuD;IACvD,IAAI,WAAW;QACb,OAAO,UAAU,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,EAAE,CAAC;IAC/D,CAAC;CACF"}
@@ -0,0 +1,21 @@
1
+ import { GenericContainer } from "../core/generic-container.js";
2
+ /**
3
+ * A single-node Valkey container — the Redis-protocol-compatible fork,
4
+ * following `RedisContainer`'s shape exactly. Readiness is anchored on the
5
+ * same `Ready to accept connections tcp` log line Redis prints, for the
6
+ * same reason: on a loaded host, msb's loopback forwarder can accept and
7
+ * hold a TCP connection before the guest process is actually listening, so
8
+ * a bare port probe risks returning before the server serves.
9
+ *
10
+ * `uri` deliberately uses the `redis://` scheme, not `valkey://`: every
11
+ * client this library's tests and its users reach for — lettuce,
12
+ * node-redis, or raw RESP over TCP — parses `redis://`, and Valkey speaks
13
+ * that same wire protocol. This is not a copy-paste mistake.
14
+ */
15
+ export declare class ValkeyContainer extends GenericContainer {
16
+ constructor(image?: string);
17
+ static start(image?: string): Promise<ValkeyContainer>;
18
+ /** A `redis://` connection URI for the running container (see the class doc for why not `valkey://`). */
19
+ get uri(): string;
20
+ }
21
+ //# sourceMappingURL=valkey.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"valkey.d.ts","sourceRoot":"","sources":["../../src/modules/valkey.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AAKhE;;;;;;;;;;;;GAYG;AACH,qBAAa,eAAgB,SAAQ,gBAAgB;gBACvC,KAAK,SAA6B;WAOxB,KAAK,CAAC,KAAK,SAA6B,GAAG,OAAO,CAAC,eAAe,CAAC;IAIzF,yGAAyG;IACzG,IAAI,GAAG,IAAI,MAAM,CAEhB;CACF"}
@@ -0,0 +1,32 @@
1
+ import { GenericContainer } from "../core/generic-container.js";
2
+ import { Wait } from "../core/wait.js";
3
+ const GUEST_PORT = 6379;
4
+ /**
5
+ * A single-node Valkey container — the Redis-protocol-compatible fork,
6
+ * following `RedisContainer`'s shape exactly. Readiness is anchored on the
7
+ * same `Ready to accept connections tcp` log line Redis prints, for the
8
+ * same reason: on a loaded host, msb's loopback forwarder can accept and
9
+ * hold a TCP connection before the guest process is actually listening, so
10
+ * a bare port probe risks returning before the server serves.
11
+ *
12
+ * `uri` deliberately uses the `redis://` scheme, not `valkey://`: every
13
+ * client this library's tests and its users reach for — lettuce,
14
+ * node-redis, or raw RESP over TCP — parses `redis://`, and Valkey speaks
15
+ * that same wire protocol. This is not a copy-paste mistake.
16
+ */
17
+ export class ValkeyContainer extends GenericContainer {
18
+ constructor(image = "valkey/valkey:9.1-alpine") {
19
+ super(image);
20
+ this.withExposedPorts(GUEST_PORT).waitingFor(Wait.forLogMessage(".*Ready to accept connections.*", 1));
21
+ // No withMemoryLimit override: verified booting and answering PING with
22
+ // no limit set beyond msb's default, well under 512 MB.
23
+ }
24
+ static async start(image = "valkey/valkey:9.1-alpine") {
25
+ return (await new ValkeyContainer(image).start());
26
+ }
27
+ /** A `redis://` connection URI for the running container (see the class doc for why not `valkey://`). */
28
+ get uri() {
29
+ return `redis://${this.host}:${this.getMappedPort(GUEST_PORT)}`;
30
+ }
31
+ }
32
+ //# sourceMappingURL=valkey.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"valkey.js","sourceRoot":"","sources":["../../src/modules/valkey.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AAChE,OAAO,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAC;AAEvC,MAAM,UAAU,GAAG,IAAI,CAAC;AAExB;;;;;;;;;;;;GAYG;AACH,MAAM,OAAO,eAAgB,SAAQ,gBAAgB;IACnD,YAAY,KAAK,GAAG,0BAA0B;QAC5C,KAAK,CAAC,KAAK,CAAC,CAAC;QACb,IAAI,CAAC,gBAAgB,CAAC,UAAU,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,aAAa,CAAC,iCAAiC,EAAE,CAAC,CAAC,CAAC,CAAC;QACvG,wEAAwE;QACxE,wDAAwD;IAC1D,CAAC;IAED,MAAM,CAAU,KAAK,CAAC,KAAK,CAAC,KAAK,GAAG,0BAA0B;QAC5D,OAAO,CAAC,MAAM,IAAI,eAAe,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,CAAoB,CAAC;IACvE,CAAC;IAED,yGAAyG;IACzG,IAAI,GAAG;QACL,OAAO,WAAW,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,EAAE,CAAC;IAClE,CAAC;CACF"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "rightsize",
3
- "version": "0.3.0",
3
+ "version": "0.5.0",
4
4
  "description": "Testcontainers-style integration testing on microsandbox microVMs, with a Docker fallback and an await-using lifecycle. No Docker required.",
5
5
  "keywords": [
6
6
  "testcontainers",