rightsize 0.5.0 → 0.6.1

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 (144) hide show
  1. package/README.md +14 -9
  2. package/dist/backend-msb/agent-endpoint.d.ts +25 -0
  3. package/dist/backend-msb/agent-endpoint.d.ts.map +1 -0
  4. package/dist/backend-msb/agent-endpoint.js +27 -0
  5. package/dist/backend-msb/agent-endpoint.js.map +1 -0
  6. package/dist/backend-msb/backend.d.ts +47 -6
  7. package/dist/backend-msb/backend.d.ts.map +1 -1
  8. package/dist/backend-msb/backend.js +123 -10
  9. package/dist/backend-msb/backend.js.map +1 -1
  10. package/dist/backend-msb/commands.d.ts +2 -2
  11. package/dist/backend-msb/commands.d.ts.map +1 -1
  12. package/dist/backend-msb/commands.js +22 -7
  13. package/dist/backend-msb/commands.js.map +1 -1
  14. package/dist/backend-msb/platform.js +2 -2
  15. package/dist/backend-msb/provisioner.d.ts +1 -1
  16. package/dist/backend-msb/provisioner.js +1 -1
  17. package/dist/backend-msb/snapshot-import.d.ts +4 -4
  18. package/dist/backend-msb/snapshot-import.js +4 -4
  19. package/dist/backend-msb/snapshot-list.d.ts +3 -3
  20. package/dist/backend-msb/snapshot-list.js +3 -3
  21. package/dist/backend-msb/snapshot-not-found.d.ts +1 -1
  22. package/dist/backend-msb/snapshot-not-found.js +1 -1
  23. package/dist/backend-msb/snapshot-save-fsync.d.ts +55 -0
  24. package/dist/backend-msb/snapshot-save-fsync.d.ts.map +1 -0
  25. package/dist/backend-msb/snapshot-save-fsync.js +79 -0
  26. package/dist/backend-msb/snapshot-save-fsync.js.map +1 -0
  27. package/dist/core/backend.d.ts +2 -2
  28. package/dist/core/checkpoint/api.d.ts +1 -1
  29. package/dist/core/checkpoint/api.js +1 -1
  30. package/dist/core/docker-image-name.d.ts +58 -0
  31. package/dist/core/docker-image-name.d.ts.map +1 -0
  32. package/dist/core/docker-image-name.js +127 -0
  33. package/dist/core/docker-image-name.js.map +1 -0
  34. package/dist/core/errors.d.ts +21 -0
  35. package/dist/core/errors.d.ts.map +1 -1
  36. package/dist/core/errors.js +26 -0
  37. package/dist/core/errors.js.map +1 -1
  38. package/dist/core/generic-container.d.ts +7 -1
  39. package/dist/core/generic-container.d.ts.map +1 -1
  40. package/dist/core/generic-container.js +8 -2
  41. package/dist/core/generic-container.js.map +1 -1
  42. package/dist/core/model.d.ts +9 -4
  43. package/dist/core/model.d.ts.map +1 -1
  44. package/dist/index.d.ts +8 -5
  45. package/dist/index.d.ts.map +1 -1
  46. package/dist/index.js +8 -5
  47. package/dist/index.js.map +1 -1
  48. package/dist/modules/arango.d.ts +11 -3
  49. package/dist/modules/arango.d.ts.map +1 -1
  50. package/dist/modules/arango.js +14 -4
  51. package/dist/modules/arango.js.map +1 -1
  52. package/dist/modules/cassandra.d.ts +12 -3
  53. package/dist/modules/cassandra.d.ts.map +1 -1
  54. package/dist/modules/cassandra.js +15 -4
  55. package/dist/modules/cassandra.js.map +1 -1
  56. package/dist/modules/clickhouse.d.ts +8 -2
  57. package/dist/modules/clickhouse.d.ts.map +1 -1
  58. package/dist/modules/clickhouse.js +11 -3
  59. package/dist/modules/clickhouse.js.map +1 -1
  60. package/dist/modules/elasticsearch.d.ts +49 -0
  61. package/dist/modules/elasticsearch.d.ts.map +1 -0
  62. package/dist/modules/elasticsearch.js +66 -0
  63. package/dist/modules/elasticsearch.js.map +1 -0
  64. package/dist/modules/flink.d.ts +8 -2
  65. package/dist/modules/flink.d.ts.map +1 -1
  66. package/dist/modules/flink.js +13 -4
  67. package/dist/modules/flink.js.map +1 -1
  68. package/dist/modules/floci.d.ts +30 -6
  69. package/dist/modules/floci.d.ts.map +1 -1
  70. package/dist/modules/floci.js +39 -9
  71. package/dist/modules/floci.js.map +1 -1
  72. package/dist/modules/index.d.ts +3 -1
  73. package/dist/modules/index.d.ts.map +1 -1
  74. package/dist/modules/index.js +3 -1
  75. package/dist/modules/index.js.map +1 -1
  76. package/dist/modules/kafka.d.ts +10 -3
  77. package/dist/modules/kafka.d.ts.map +1 -1
  78. package/dist/modules/kafka.js +13 -4
  79. package/dist/modules/kafka.js.map +1 -1
  80. package/dist/modules/keycloak.d.ts +10 -2
  81. package/dist/modules/keycloak.d.ts.map +1 -1
  82. package/dist/modules/keycloak.js +13 -3
  83. package/dist/modules/keycloak.js.map +1 -1
  84. package/dist/modules/mariadb.d.ts +8 -2
  85. package/dist/modules/mariadb.d.ts.map +1 -1
  86. package/dist/modules/mariadb.js +11 -3
  87. package/dist/modules/mariadb.js.map +1 -1
  88. package/dist/modules/memcached.d.ts +12 -3
  89. package/dist/modules/memcached.d.ts.map +1 -1
  90. package/dist/modules/memcached.js +15 -4
  91. package/dist/modules/memcached.js.map +1 -1
  92. package/dist/modules/minio.d.ts +7 -2
  93. package/dist/modules/minio.d.ts.map +1 -1
  94. package/dist/modules/minio.js +10 -3
  95. package/dist/modules/minio.js.map +1 -1
  96. package/dist/modules/mongodb.d.ts +7 -2
  97. package/dist/modules/mongodb.d.ts.map +1 -1
  98. package/dist/modules/mongodb.js +16 -4
  99. package/dist/modules/mongodb.js.map +1 -1
  100. package/dist/modules/mysql.d.ts +8 -2
  101. package/dist/modules/mysql.d.ts.map +1 -1
  102. package/dist/modules/mysql.js +11 -3
  103. package/dist/modules/mysql.js.map +1 -1
  104. package/dist/modules/neo4j.d.ts +7 -2
  105. package/dist/modules/neo4j.d.ts.map +1 -1
  106. package/dist/modules/neo4j.js +10 -3
  107. package/dist/modules/neo4j.js.map +1 -1
  108. package/dist/modules/pinot.d.ts +7 -2
  109. package/dist/modules/pinot.d.ts.map +1 -1
  110. package/dist/modules/pinot.js +10 -3
  111. package/dist/modules/pinot.js.map +1 -1
  112. package/dist/modules/postgres.d.ts +11 -2
  113. package/dist/modules/postgres.d.ts.map +1 -1
  114. package/dist/modules/postgres.js +14 -3
  115. package/dist/modules/postgres.js.map +1 -1
  116. package/dist/modules/qdrant.d.ts +26 -0
  117. package/dist/modules/qdrant.d.ts.map +1 -0
  118. package/dist/modules/qdrant.js +38 -0
  119. package/dist/modules/qdrant.js.map +1 -0
  120. package/dist/modules/rabbitmq.d.ts +11 -2
  121. package/dist/modules/rabbitmq.d.ts.map +1 -1
  122. package/dist/modules/rabbitmq.js +14 -3
  123. package/dist/modules/rabbitmq.js.map +1 -1
  124. package/dist/modules/redis.d.ts +8 -2
  125. package/dist/modules/redis.d.ts.map +1 -1
  126. package/dist/modules/redis.js +11 -3
  127. package/dist/modules/redis.js.map +1 -1
  128. package/dist/modules/redpanda.d.ts +15 -6
  129. package/dist/modules/redpanda.d.ts.map +1 -1
  130. package/dist/modules/redpanda.js +18 -7
  131. package/dist/modules/redpanda.js.map +1 -1
  132. package/dist/modules/spring-cloud-config.d.ts +7 -2
  133. package/dist/modules/spring-cloud-config.d.ts.map +1 -1
  134. package/dist/modules/spring-cloud-config.js +10 -3
  135. package/dist/modules/spring-cloud-config.js.map +1 -1
  136. package/dist/modules/valkey.d.ts +9 -2
  137. package/dist/modules/valkey.d.ts.map +1 -1
  138. package/dist/modules/valkey.js +12 -3
  139. package/dist/modules/valkey.js.map +1 -1
  140. package/dist/modules/wiremock.d.ts +7 -2
  141. package/dist/modules/wiremock.d.ts.map +1 -1
  142. package/dist/modules/wiremock.js +10 -3
  143. package/dist/modules/wiremock.js.map +1 -1
  144. package/package.json +1 -1
@@ -1,18 +1,29 @@
1
1
  import { GenericContainer } from "../core/generic-container.js";
2
2
  import { Wait } from "../core/wait.js";
3
+ import { DockerImageName } from "../core/docker-image-name.js";
3
4
  const GUEST_PORT = 5432;
5
+ const EXPECTED_REPOSITORY = "postgres";
6
+ const DEFAULT_IMAGE = "postgres:latest";
4
7
  /**
5
8
  * A single-node PostgreSQL container. Defaults to a `test`/`test`/`test`
6
9
  * user/password/database trio so `connectionString` is usable with zero
7
10
  * configuration; call `withUsername`/`withPassword`/`withDatabase` before
8
11
  * `start()` to override any of them.
12
+ *
13
+ * No-arg construction floats to `postgres:latest`, so the version tracks
14
+ * upstream rather than this library's release cycle (verified against
15
+ * `postgres:18-alpine`, including the wait-strategy and `DOCKER_PG_LLVM_DEPS`
16
+ * facts below). `latest` is Debian-based rather than Alpine — functionally
17
+ * equivalent, larger to pull. The `DOCKER_PG_LLVM_DEPS` override stays in
18
+ * place regardless: it's a no-op against a build that never baked the
19
+ * problem tab character, and required against one that does.
9
20
  */
10
21
  export class PostgresContainer extends GenericContainer {
11
22
  usernameState = "test";
12
23
  passwordState = "test";
13
24
  databaseState = "test";
14
- constructor(image = "postgres:18-alpine") {
15
- super(image);
25
+ constructor(image = DEFAULT_IMAGE) {
26
+ super(DockerImageName.requireCompatible(image, EXPECTED_REPOSITORY));
16
27
  this.withExposedPorts(GUEST_PORT)
17
28
  .withEnv("POSTGRES_USER", this.usernameState)
18
29
  .withEnv("POSTGRES_PASSWORD", this.passwordState)
@@ -35,7 +46,7 @@ export class PostgresContainer extends GenericContainer {
35
46
  // down. times=2 waits for the second, durable listen.
36
47
  .waitingFor(Wait.forLogMessage(".*database system is ready to accept connections.*", 2));
37
48
  }
38
- static async start(image = "postgres:18-alpine") {
49
+ static async start(image = DEFAULT_IMAGE) {
39
50
  return (await new PostgresContainer(image).start());
40
51
  }
41
52
  /** Overrides `POSTGRES_USER` (default `test`). */
@@ -1 +1 @@
1
- {"version":3,"file":"postgres.js","sourceRoot":"","sources":["../../src/modules/postgres.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;;;;;GAKG;AACH,MAAM,OAAO,iBAAkB,SAAQ,gBAAgB;IAC7C,aAAa,GAAG,MAAM,CAAC;IACvB,aAAa,GAAG,MAAM,CAAC;IACvB,aAAa,GAAG,MAAM,CAAC;IAE/B,YAAY,KAAK,GAAG,oBAAoB;QACtC,KAAK,CAAC,KAAK,CAAC,CAAC;QACb,IAAI,CAAC,gBAAgB,CAAC,UAAU,CAAC;aAC9B,OAAO,CAAC,eAAe,EAAE,IAAI,CAAC,aAAa,CAAC;aAC5C,OAAO,CAAC,mBAAmB,EAAE,IAAI,CAAC,aAAa,CAAC;aAChD,OAAO,CAAC,aAAa,EAAE,IAAI,CAAC,aAAa,CAAC;YAC3C,sEAAsE;YACtE,4DAA4D;YAC5D,+DAA+D;YAC/D,qEAAqE;YACrE,mEAAmE;YACnE,oEAAoE;YACpE,qEAAqE;YACrE,kEAAkE;YAClE,mEAAmE;aAClE,OAAO,CAAC,qBAAqB,EAAE,EAAE,CAAC;YACnC,+DAA+D;YAC/D,qEAAqE;YACrE,iEAAiE;YACjE,gEAAgE;YAChE,mEAAmE;YACnE,sDAAsD;aACrD,UAAU,CAAC,IAAI,CAAC,aAAa,CAAC,oDAAoD,EAAE,CAAC,CAAC,CAAC,CAAC;IAC7F,CAAC;IAED,MAAM,CAAU,KAAK,CAAC,KAAK,CAAC,KAAK,GAAG,oBAAoB;QACtD,OAAO,CAAC,MAAM,IAAI,iBAAiB,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,CAAsB,CAAC;IAC3E,CAAC;IAED,kDAAkD;IAClD,YAAY,CAAC,QAAgB;QAC3B,IAAI,CAAC,aAAa,GAAG,QAAQ,CAAC;QAC9B,OAAO,IAAI,CAAC,OAAO,CAAC,eAAe,EAAE,QAAQ,CAAC,CAAC;IACjD,CAAC;IAED,sDAAsD;IACtD,YAAY,CAAC,QAAgB;QAC3B,IAAI,CAAC,aAAa,GAAG,QAAQ,CAAC;QAC9B,OAAO,IAAI,CAAC,OAAO,CAAC,mBAAmB,EAAE,QAAQ,CAAC,CAAC;IACrD,CAAC;IAED,gDAAgD;IAChD,YAAY,CAAC,QAAgB;QAC3B,IAAI,CAAC,aAAa,GAAG,QAAQ,CAAC;QAC9B,OAAO,IAAI,CAAC,OAAO,CAAC,aAAa,EAAE,QAAQ,CAAC,CAAC;IAC/C,CAAC;IAED,qDAAqD;IACrD,IAAI,QAAQ;QACV,OAAO,IAAI,CAAC,aAAa,CAAC;IAC5B,CAAC;IAED,yDAAyD;IACzD,IAAI,QAAQ;QACV,OAAO,IAAI,CAAC,aAAa,CAAC;IAC5B,CAAC;IAED,qDAAqD;IACrD,IAAI,YAAY;QACd,OAAO,IAAI,CAAC,aAAa,CAAC;IAC5B,CAAC;IAED,oFAAoF;IACpF,IAAI,gBAAgB;QAClB,OAAO,cAAc,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;IACvI,CAAC;CACF"}
1
+ {"version":3,"file":"postgres.js","sourceRoot":"","sources":["../../src/modules/postgres.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AAChE,OAAO,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAC;AACvC,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAE/D,MAAM,UAAU,GAAG,IAAI,CAAC;AACxB,MAAM,mBAAmB,GAAG,UAAU,CAAC;AACvC,MAAM,aAAa,GAAG,iBAAiB,CAAC;AAExC;;;;;;;;;;;;;GAaG;AACH,MAAM,OAAO,iBAAkB,SAAQ,gBAAgB;IAC7C,aAAa,GAAG,MAAM,CAAC;IACvB,aAAa,GAAG,MAAM,CAAC;IACvB,aAAa,GAAG,MAAM,CAAC;IAE/B,YAAY,QAAkC,aAAa;QACzD,KAAK,CAAC,eAAe,CAAC,iBAAiB,CAAC,KAAK,EAAE,mBAAmB,CAAC,CAAC,CAAC;QACrE,IAAI,CAAC,gBAAgB,CAAC,UAAU,CAAC;aAC9B,OAAO,CAAC,eAAe,EAAE,IAAI,CAAC,aAAa,CAAC;aAC5C,OAAO,CAAC,mBAAmB,EAAE,IAAI,CAAC,aAAa,CAAC;aAChD,OAAO,CAAC,aAAa,EAAE,IAAI,CAAC,aAAa,CAAC;YAC3C,sEAAsE;YACtE,4DAA4D;YAC5D,+DAA+D;YAC/D,qEAAqE;YACrE,mEAAmE;YACnE,oEAAoE;YACpE,qEAAqE;YACrE,kEAAkE;YAClE,mEAAmE;aAClE,OAAO,CAAC,qBAAqB,EAAE,EAAE,CAAC;YACnC,+DAA+D;YAC/D,qEAAqE;YACrE,iEAAiE;YACjE,gEAAgE;YAChE,mEAAmE;YACnE,sDAAsD;aACrD,UAAU,CAAC,IAAI,CAAC,aAAa,CAAC,oDAAoD,EAAE,CAAC,CAAC,CAAC,CAAC;IAC7F,CAAC;IAED,MAAM,CAAU,KAAK,CAAC,KAAK,CAAC,QAAkC,aAAa;QACzE,OAAO,CAAC,MAAM,IAAI,iBAAiB,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,CAAsB,CAAC;IAC3E,CAAC;IAED,kDAAkD;IAClD,YAAY,CAAC,QAAgB;QAC3B,IAAI,CAAC,aAAa,GAAG,QAAQ,CAAC;QAC9B,OAAO,IAAI,CAAC,OAAO,CAAC,eAAe,EAAE,QAAQ,CAAC,CAAC;IACjD,CAAC;IAED,sDAAsD;IACtD,YAAY,CAAC,QAAgB;QAC3B,IAAI,CAAC,aAAa,GAAG,QAAQ,CAAC;QAC9B,OAAO,IAAI,CAAC,OAAO,CAAC,mBAAmB,EAAE,QAAQ,CAAC,CAAC;IACrD,CAAC;IAED,gDAAgD;IAChD,YAAY,CAAC,QAAgB;QAC3B,IAAI,CAAC,aAAa,GAAG,QAAQ,CAAC;QAC9B,OAAO,IAAI,CAAC,OAAO,CAAC,aAAa,EAAE,QAAQ,CAAC,CAAC;IAC/C,CAAC;IAED,qDAAqD;IACrD,IAAI,QAAQ;QACV,OAAO,IAAI,CAAC,aAAa,CAAC;IAC5B,CAAC;IAED,yDAAyD;IACzD,IAAI,QAAQ;QACV,OAAO,IAAI,CAAC,aAAa,CAAC;IAC5B,CAAC;IAED,qDAAqD;IACrD,IAAI,YAAY;QACd,OAAO,IAAI,CAAC,aAAa,CAAC;IAC5B,CAAC;IAED,oFAAoF;IACpF,IAAI,gBAAgB;QAClB,OAAO,cAAc,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;IACvI,CAAC;CACF"}
@@ -0,0 +1,26 @@
1
+ import { GenericContainer } from "../core/generic-container.js";
2
+ import { DockerImageName } from "../core/docker-image-name.js";
3
+ /**
4
+ * A single-node Qdrant container — a vector search engine.
5
+ *
6
+ * No-arg construction floats to `qdrant/qdrant:latest`, so the version
7
+ * tracks upstream rather than this library's release cycle (verified
8
+ * against `qdrant/qdrant:v1.18.3`, arm64 — note the image's tags carry a
9
+ * leading `v`, unlike most catalog images here).
10
+ *
11
+ * Exposes both the REST API (6333, what `restUrl` wraps) and the gRPC port
12
+ * (6334, published but not wrapped by any helper here).
13
+ *
14
+ * Readiness is a plain HTTP 200 on `/readyz`, answered on the very first
15
+ * poll in the verified boot — no long startup timeout override is needed.
16
+ * No `withMemoryLimit` override either: a full create-collection/upsert/
17
+ * search round-trip was verified with no memory limit set, in a guest
18
+ * reporting ~480 MB total.
19
+ */
20
+ export declare class QdrantContainer extends GenericContainer {
21
+ constructor(image?: string | DockerImageName);
22
+ static start(image?: string | DockerImageName): Promise<QdrantContainer>;
23
+ /** The REST API's base URL for the running container. */
24
+ get restUrl(): string;
25
+ }
26
+ //# sourceMappingURL=qdrant.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"qdrant.d.ts","sourceRoot":"","sources":["../../src/modules/qdrant.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AAEhE,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAO/D;;;;;;;;;;;;;;;;GAgBG;AACH,qBAAa,eAAgB,SAAQ,gBAAgB;gBACvC,KAAK,GAAE,MAAM,GAAG,eAA+B;WAKrC,KAAK,CAAC,KAAK,GAAE,MAAM,GAAG,eAA+B,GAAG,OAAO,CAAC,eAAe,CAAC;IAItG,yDAAyD;IACzD,IAAI,OAAO,IAAI,MAAM,CAEpB;CACF"}
@@ -0,0 +1,38 @@
1
+ import { GenericContainer } from "../core/generic-container.js";
2
+ import { Wait } from "../core/wait.js";
3
+ import { DockerImageName } from "../core/docker-image-name.js";
4
+ const REST_PORT = 6333;
5
+ const GRPC_PORT = 6334;
6
+ const EXPECTED_REPOSITORY = "qdrant/qdrant";
7
+ const DEFAULT_IMAGE = "qdrant/qdrant:latest";
8
+ /**
9
+ * A single-node Qdrant container — a vector search engine.
10
+ *
11
+ * No-arg construction floats to `qdrant/qdrant:latest`, so the version
12
+ * tracks upstream rather than this library's release cycle (verified
13
+ * against `qdrant/qdrant:v1.18.3`, arm64 — note the image's tags carry a
14
+ * leading `v`, unlike most catalog images here).
15
+ *
16
+ * Exposes both the REST API (6333, what `restUrl` wraps) and the gRPC port
17
+ * (6334, published but not wrapped by any helper here).
18
+ *
19
+ * Readiness is a plain HTTP 200 on `/readyz`, answered on the very first
20
+ * poll in the verified boot — no long startup timeout override is needed.
21
+ * No `withMemoryLimit` override either: a full create-collection/upsert/
22
+ * search round-trip was verified with no memory limit set, in a guest
23
+ * reporting ~480 MB total.
24
+ */
25
+ export class QdrantContainer extends GenericContainer {
26
+ constructor(image = DEFAULT_IMAGE) {
27
+ super(DockerImageName.requireCompatible(image, EXPECTED_REPOSITORY));
28
+ this.withExposedPorts(REST_PORT, GRPC_PORT).waitingFor(Wait.forHttp("/readyz").forPort(REST_PORT));
29
+ }
30
+ static async start(image = DEFAULT_IMAGE) {
31
+ return (await new QdrantContainer(image).start());
32
+ }
33
+ /** The REST API's base URL for the running container. */
34
+ get restUrl() {
35
+ return `http://${this.host}:${this.getMappedPort(REST_PORT)}`;
36
+ }
37
+ }
38
+ //# sourceMappingURL=qdrant.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"qdrant.js","sourceRoot":"","sources":["../../src/modules/qdrant.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AAChE,OAAO,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAC;AACvC,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAE/D,MAAM,SAAS,GAAG,IAAI,CAAC;AACvB,MAAM,SAAS,GAAG,IAAI,CAAC;AACvB,MAAM,mBAAmB,GAAG,eAAe,CAAC;AAC5C,MAAM,aAAa,GAAG,sBAAsB,CAAC;AAE7C;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,OAAO,eAAgB,SAAQ,gBAAgB;IACnD,YAAY,QAAkC,aAAa;QACzD,KAAK,CAAC,eAAe,CAAC,iBAAiB,CAAC,KAAK,EAAE,mBAAmB,CAAC,CAAC,CAAC;QACrE,IAAI,CAAC,gBAAgB,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC;IACrG,CAAC;IAED,MAAM,CAAU,KAAK,CAAC,KAAK,CAAC,QAAkC,aAAa;QACzE,OAAO,CAAC,MAAM,IAAI,eAAe,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,CAAoB,CAAC;IACvE,CAAC;IAED,yDAAyD;IACzD,IAAI,OAAO;QACT,OAAO,UAAU,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,EAAE,CAAC;IAChE,CAAC;CACF"}
@@ -1,10 +1,19 @@
1
1
  import { GenericContainer } from "../core/generic-container.js";
2
+ import { DockerImageName } from "../core/docker-image-name.js";
2
3
  /**
3
4
  * A single-node RabbitMQ container with the management plugin enabled.
4
5
  * Defaults to the image's own `guest`/`guest` credentials; call
5
6
  * `withUsername`/`withPassword` before `start()` to override either (sets
6
7
  * `RABBITMQ_DEFAULT_USER`/`RABBITMQ_DEFAULT_PASS`).
7
8
  *
9
+ * No-arg construction floats to `rabbitmq:management`, not plain
10
+ * `rabbitmq:latest`: this module is built around the management plugin and
11
+ * its readiness check reads the plugin-count clause the management image
12
+ * prints on boot, and plain `latest` doesn't ship that plugin at all.
13
+ * Verified against `rabbitmq:4-management-alpine` — `management` carries no
14
+ * `-alpine` suffix, so it floats onto Debian rather than Alpine the same way
15
+ * the plain `latest` tag does elsewhere in this library.
16
+ *
8
17
  * Readiness waits on the boot log line captured from a real
9
18
  * `rabbitmq:4-management-alpine` run: `Server startup complete; N plugins
10
19
  * started.` — NOT the shorter "Server startup complete" alone some older
@@ -28,8 +37,8 @@ import { GenericContainer } from "../core/generic-container.js";
28
37
  export declare class RabbitMQContainer extends GenericContainer {
29
38
  private usernameState;
30
39
  private passwordState;
31
- constructor(image?: string);
32
- static start(image?: string): Promise<RabbitMQContainer>;
40
+ constructor(image?: string | DockerImageName);
41
+ static start(image?: string | DockerImageName): Promise<RabbitMQContainer>;
33
42
  /** Overrides `RABBITMQ_DEFAULT_USER` (default `guest`). */
34
43
  withUsername(username: string): this;
35
44
  /** Overrides `RABBITMQ_DEFAULT_PASS` (default `guest`). */
@@ -1 +1 @@
1
- {"version":3,"file":"rabbitmq.d.ts","sourceRoot":"","sources":["../../src/modules/rabbitmq.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AAMhE;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,qBAAa,iBAAkB,SAAQ,gBAAgB;IACrD,OAAO,CAAC,aAAa,CAAW;IAChC,OAAO,CAAC,aAAa,CAAW;gBAEpB,KAAK,SAAiC;WAO5B,KAAK,CAAC,KAAK,SAAiC,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAI/F,2DAA2D;IAC3D,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;IAKpC,2DAA2D;IAC3D,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;IAKpC,sDAAsD;IACtD,IAAI,QAAQ,IAAI,MAAM,CAErB;IAED,sDAAsD;IACtD,IAAI,QAAQ,IAAI,MAAM,CAErB;IAED,0DAA0D;IAC1D,IAAI,OAAO,IAAI,MAAM,CAEpB;IAED,iEAAiE;IACjE,IAAI,aAAa,IAAI,MAAM,CAE1B;CACF"}
1
+ {"version":3,"file":"rabbitmq.d.ts","sourceRoot":"","sources":["../../src/modules/rabbitmq.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AAEhE,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAO/D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AACH,qBAAa,iBAAkB,SAAQ,gBAAgB;IACrD,OAAO,CAAC,aAAa,CAAW;IAChC,OAAO,CAAC,aAAa,CAAW;gBAEpB,KAAK,GAAE,MAAM,GAAG,eAA+B;WAOrC,KAAK,CAAC,KAAK,GAAE,MAAM,GAAG,eAA+B,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAIxG,2DAA2D;IAC3D,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;IAKpC,2DAA2D;IAC3D,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;IAKpC,sDAAsD;IACtD,IAAI,QAAQ,IAAI,MAAM,CAErB;IAED,sDAAsD;IACtD,IAAI,QAAQ,IAAI,MAAM,CAErB;IAED,0DAA0D;IAC1D,IAAI,OAAO,IAAI,MAAM,CAEpB;IAED,iEAAiE;IACjE,IAAI,aAAa,IAAI,MAAM,CAE1B;CACF"}
@@ -1,13 +1,24 @@
1
1
  import { GenericContainer } from "../core/generic-container.js";
2
2
  import { Wait } from "../core/wait.js";
3
+ import { DockerImageName } from "../core/docker-image-name.js";
3
4
  const AMQP_PORT = 5672;
4
5
  const MANAGEMENT_PORT = 15672;
6
+ const EXPECTED_REPOSITORY = "rabbitmq";
7
+ const DEFAULT_IMAGE = "rabbitmq:management";
5
8
  /**
6
9
  * A single-node RabbitMQ container with the management plugin enabled.
7
10
  * Defaults to the image's own `guest`/`guest` credentials; call
8
11
  * `withUsername`/`withPassword` before `start()` to override either (sets
9
12
  * `RABBITMQ_DEFAULT_USER`/`RABBITMQ_DEFAULT_PASS`).
10
13
  *
14
+ * No-arg construction floats to `rabbitmq:management`, not plain
15
+ * `rabbitmq:latest`: this module is built around the management plugin and
16
+ * its readiness check reads the plugin-count clause the management image
17
+ * prints on boot, and plain `latest` doesn't ship that plugin at all.
18
+ * Verified against `rabbitmq:4-management-alpine` — `management` carries no
19
+ * `-alpine` suffix, so it floats onto Debian rather than Alpine the same way
20
+ * the plain `latest` tag does elsewhere in this library.
21
+ *
11
22
  * Readiness waits on the boot log line captured from a real
12
23
  * `rabbitmq:4-management-alpine` run: `Server startup complete; N plugins
13
24
  * started.` — NOT the shorter "Server startup complete" alone some older
@@ -31,11 +42,11 @@ const MANAGEMENT_PORT = 15672;
31
42
  export class RabbitMQContainer extends GenericContainer {
32
43
  usernameState = "guest";
33
44
  passwordState = "guest";
34
- constructor(image = "rabbitmq:4-management-alpine") {
35
- super(image);
45
+ constructor(image = DEFAULT_IMAGE) {
46
+ super(DockerImageName.requireCompatible(image, EXPECTED_REPOSITORY));
36
47
  this.withExposedPorts(AMQP_PORT, MANAGEMENT_PORT).waitingFor(Wait.forLogMessage(".*Server startup complete.*"));
37
48
  }
38
- static async start(image = "rabbitmq:4-management-alpine") {
49
+ static async start(image = DEFAULT_IMAGE) {
39
50
  return (await new RabbitMQContainer(image).start());
40
51
  }
41
52
  /** Overrides `RABBITMQ_DEFAULT_USER` (default `guest`). */
@@ -1 +1 @@
1
- {"version":3,"file":"rabbitmq.js","sourceRoot":"","sources":["../../src/modules/rabbitmq.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AAChE,OAAO,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAC;AAEvC,MAAM,SAAS,GAAG,IAAI,CAAC;AACvB,MAAM,eAAe,GAAG,KAAK,CAAC;AAE9B;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,MAAM,OAAO,iBAAkB,SAAQ,gBAAgB;IAC7C,aAAa,GAAG,OAAO,CAAC;IACxB,aAAa,GAAG,OAAO,CAAC;IAEhC,YAAY,KAAK,GAAG,8BAA8B;QAChD,KAAK,CAAC,KAAK,CAAC,CAAC;QACb,IAAI,CAAC,gBAAgB,CAAC,SAAS,EAAE,eAAe,CAAC,CAAC,UAAU,CAC1D,IAAI,CAAC,aAAa,CAAC,6BAA6B,CAAC,CAClD,CAAC;IACJ,CAAC;IAED,MAAM,CAAU,KAAK,CAAC,KAAK,CAAC,KAAK,GAAG,8BAA8B;QAChE,OAAO,CAAC,MAAM,IAAI,iBAAiB,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,CAAsB,CAAC;IAC3E,CAAC;IAED,2DAA2D;IAC3D,YAAY,CAAC,QAAgB;QAC3B,IAAI,CAAC,aAAa,GAAG,QAAQ,CAAC;QAC9B,OAAO,IAAI,CAAC,OAAO,CAAC,uBAAuB,EAAE,QAAQ,CAAC,CAAC;IACzD,CAAC;IAED,2DAA2D;IAC3D,YAAY,CAAC,QAAgB;QAC3B,IAAI,CAAC,aAAa,GAAG,QAAQ,CAAC;QAC9B,OAAO,IAAI,CAAC,OAAO,CAAC,uBAAuB,EAAE,QAAQ,CAAC,CAAC;IACzD,CAAC;IAED,sDAAsD;IACtD,IAAI,QAAQ;QACV,OAAO,IAAI,CAAC,aAAa,CAAC;IAC5B,CAAC;IAED,sDAAsD;IACtD,IAAI,QAAQ;QACV,OAAO,IAAI,CAAC,aAAa,CAAC;IAC5B,CAAC;IAED,0DAA0D;IAC1D,IAAI,OAAO;QACT,OAAO,UAAU,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,EAAE,CAAC;IAC5G,CAAC;IAED,iEAAiE;IACjE,IAAI,aAAa;QACf,OAAO,UAAU,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,aAAa,CAAC,eAAe,CAAC,EAAE,CAAC;IACtE,CAAC;CACF"}
1
+ {"version":3,"file":"rabbitmq.js","sourceRoot":"","sources":["../../src/modules/rabbitmq.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AAChE,OAAO,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAC;AACvC,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAE/D,MAAM,SAAS,GAAG,IAAI,CAAC;AACvB,MAAM,eAAe,GAAG,KAAK,CAAC;AAC9B,MAAM,mBAAmB,GAAG,UAAU,CAAC;AACvC,MAAM,aAAa,GAAG,qBAAqB,CAAC;AAE5C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AACH,MAAM,OAAO,iBAAkB,SAAQ,gBAAgB;IAC7C,aAAa,GAAG,OAAO,CAAC;IACxB,aAAa,GAAG,OAAO,CAAC;IAEhC,YAAY,QAAkC,aAAa;QACzD,KAAK,CAAC,eAAe,CAAC,iBAAiB,CAAC,KAAK,EAAE,mBAAmB,CAAC,CAAC,CAAC;QACrE,IAAI,CAAC,gBAAgB,CAAC,SAAS,EAAE,eAAe,CAAC,CAAC,UAAU,CAC1D,IAAI,CAAC,aAAa,CAAC,6BAA6B,CAAC,CAClD,CAAC;IACJ,CAAC;IAED,MAAM,CAAU,KAAK,CAAC,KAAK,CAAC,QAAkC,aAAa;QACzE,OAAO,CAAC,MAAM,IAAI,iBAAiB,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,CAAsB,CAAC;IAC3E,CAAC;IAED,2DAA2D;IAC3D,YAAY,CAAC,QAAgB;QAC3B,IAAI,CAAC,aAAa,GAAG,QAAQ,CAAC;QAC9B,OAAO,IAAI,CAAC,OAAO,CAAC,uBAAuB,EAAE,QAAQ,CAAC,CAAC;IACzD,CAAC;IAED,2DAA2D;IAC3D,YAAY,CAAC,QAAgB;QAC3B,IAAI,CAAC,aAAa,GAAG,QAAQ,CAAC;QAC9B,OAAO,IAAI,CAAC,OAAO,CAAC,uBAAuB,EAAE,QAAQ,CAAC,CAAC;IACzD,CAAC;IAED,sDAAsD;IACtD,IAAI,QAAQ;QACV,OAAO,IAAI,CAAC,aAAa,CAAC;IAC5B,CAAC;IAED,sDAAsD;IACtD,IAAI,QAAQ;QACV,OAAO,IAAI,CAAC,aAAa,CAAC;IAC5B,CAAC;IAED,0DAA0D;IAC1D,IAAI,OAAO;QACT,OAAO,UAAU,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,EAAE,CAAC;IAC5G,CAAC;IAED,iEAAiE;IACjE,IAAI,aAAa;QACf,OAAO,UAAU,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,aAAa,CAAC,eAAe,CAAC,EAAE,CAAC;IACtE,CAAC;CACF"}
@@ -1,14 +1,20 @@
1
1
  import { GenericContainer } from "../core/generic-container.js";
2
+ import { DockerImageName } from "../core/docker-image-name.js";
2
3
  /**
3
4
  * A single-node Redis container. Readiness is anchored on Redis's own
4
5
  * "Ready to accept connections" log line rather than a TCP probe: on a loaded
5
6
  * host the port forwarder can accept and hold a connection in the window
6
7
  * between Redis binding its socket and actually serving, which a bare
7
8
  * listening-port check cannot see through.
9
+ *
10
+ * No-arg construction floats to `redis:latest`, so the version tracks
11
+ * upstream rather than this library's release cycle (verified against
12
+ * `redis:8.6-alpine`). `latest` is Debian-based, not Alpine — functionally
13
+ * equivalent, just a larger pull.
8
14
  */
9
15
  export declare class RedisContainer extends GenericContainer {
10
- constructor(image?: string);
11
- static start(image?: string): Promise<RedisContainer>;
16
+ constructor(image?: string | DockerImageName);
17
+ static start(image?: string | DockerImageName): Promise<RedisContainer>;
12
18
  /** A `redis://` connection URI for the running container. */
13
19
  get uri(): string;
14
20
  }
@@ -1 +1 @@
1
- {"version":3,"file":"redis.d.ts","sourceRoot":"","sources":["../../src/modules/redis.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AAKhE;;;;;;GAMG;AACH,qBAAa,cAAe,SAAQ,gBAAgB;gBACtC,KAAK,SAAqB;WAKhB,KAAK,CAAC,KAAK,SAAqB,GAAG,OAAO,CAAC,cAAc,CAAC;IAIhF,6DAA6D;IAC7D,IAAI,GAAG,IAAI,MAAM,CAEhB;CACF"}
1
+ {"version":3,"file":"redis.d.ts","sourceRoot":"","sources":["../../src/modules/redis.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AAEhE,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAM/D;;;;;;;;;;;GAWG;AACH,qBAAa,cAAe,SAAQ,gBAAgB;gBACtC,KAAK,GAAE,MAAM,GAAG,eAA+B;WAKrC,KAAK,CAAC,KAAK,GAAE,MAAM,GAAG,eAA+B,GAAG,OAAO,CAAC,cAAc,CAAC;IAIrG,6DAA6D;IAC7D,IAAI,GAAG,IAAI,MAAM,CAEhB;CACF"}
@@ -1,19 +1,27 @@
1
1
  import { GenericContainer } from "../core/generic-container.js";
2
2
  import { Wait } from "../core/wait.js";
3
+ import { DockerImageName } from "../core/docker-image-name.js";
3
4
  const GUEST_PORT = 6379;
5
+ const EXPECTED_REPOSITORY = "redis";
6
+ const DEFAULT_IMAGE = "redis:latest";
4
7
  /**
5
8
  * A single-node Redis container. Readiness is anchored on Redis's own
6
9
  * "Ready to accept connections" log line rather than a TCP probe: on a loaded
7
10
  * host the port forwarder can accept and hold a connection in the window
8
11
  * between Redis binding its socket and actually serving, which a bare
9
12
  * listening-port check cannot see through.
13
+ *
14
+ * No-arg construction floats to `redis:latest`, so the version tracks
15
+ * upstream rather than this library's release cycle (verified against
16
+ * `redis:8.6-alpine`). `latest` is Debian-based, not Alpine — functionally
17
+ * equivalent, just a larger pull.
10
18
  */
11
19
  export class RedisContainer extends GenericContainer {
12
- constructor(image = "redis:8.6-alpine") {
13
- super(image);
20
+ constructor(image = DEFAULT_IMAGE) {
21
+ super(DockerImageName.requireCompatible(image, EXPECTED_REPOSITORY));
14
22
  this.withExposedPorts(GUEST_PORT).waitingFor(Wait.forLogMessage(".*Ready to accept connections.*", 1));
15
23
  }
16
- static async start(image = "redis:8.6-alpine") {
24
+ static async start(image = DEFAULT_IMAGE) {
17
25
  return (await new RedisContainer(image).start());
18
26
  }
19
27
  /** A `redis://` connection URI for the running container. */
@@ -1 +1 @@
1
- {"version":3,"file":"redis.js","sourceRoot":"","sources":["../../src/modules/redis.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;;;;;;GAMG;AACH,MAAM,OAAO,cAAe,SAAQ,gBAAgB;IAClD,YAAY,KAAK,GAAG,kBAAkB;QACpC,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;IACzG,CAAC;IAED,MAAM,CAAU,KAAK,CAAC,KAAK,CAAC,KAAK,GAAG,kBAAkB;QACpD,OAAO,CAAC,MAAM,IAAI,cAAc,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,CAAmB,CAAC;IACrE,CAAC;IAED,6DAA6D;IAC7D,IAAI,GAAG;QACL,OAAO,WAAW,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,EAAE,CAAC;IAClE,CAAC;CACF"}
1
+ {"version":3,"file":"redis.js","sourceRoot":"","sources":["../../src/modules/redis.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AAChE,OAAO,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAC;AACvC,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAE/D,MAAM,UAAU,GAAG,IAAI,CAAC;AACxB,MAAM,mBAAmB,GAAG,OAAO,CAAC;AACpC,MAAM,aAAa,GAAG,cAAc,CAAC;AAErC;;;;;;;;;;;GAWG;AACH,MAAM,OAAO,cAAe,SAAQ,gBAAgB;IAClD,YAAY,QAAkC,aAAa;QACzD,KAAK,CAAC,eAAe,CAAC,iBAAiB,CAAC,KAAK,EAAE,mBAAmB,CAAC,CAAC,CAAC;QACrE,IAAI,CAAC,gBAAgB,CAAC,UAAU,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,aAAa,CAAC,iCAAiC,EAAE,CAAC,CAAC,CAAC,CAAC;IACzG,CAAC;IAED,MAAM,CAAU,KAAK,CAAC,KAAK,CAAC,QAAkC,aAAa;QACzE,OAAO,CAAC,MAAM,IAAI,cAAc,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,CAAmB,CAAC;IACrE,CAAC;IAED,6DAA6D;IAC7D,IAAI,GAAG;QACL,OAAO,WAAW,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,EAAE,CAAC;IAClE,CAAC;CACF"}
@@ -1,15 +1,24 @@
1
1
  import { GenericContainer } from "../core/generic-container.js";
2
+ import { DockerImageName } from "../core/docker-image-name.js";
2
3
  import type { ContainerSpec } from "../core/model.js";
3
4
  /**
4
5
  * A single-node Redpanda broker (Kafka API-compatible) with its schema
5
- * registry enabled. Pinned to a versioned tag rather than `:latest`:
6
- * `docker.redpanda.com` rate-limits anonymous pulls (seed it into the msb
7
- * image cache once with `docker save <img> | msb load` ahead of integration
8
- * runs), and a versioned tag makes that seed step reproducible.
6
+ * registry enabled.
7
+ *
8
+ * No-arg construction floats to `redpandadata/redpanda:latest`, so the
9
+ * version tracks upstream rather than this library's release cycle
10
+ * (verified against `redpandadata/redpanda:v24.2.4`). This module previously
11
+ * pinned a versioned tag instead of floating, reasoning that
12
+ * `docker.redpanda.com` rate-limits anonymous pulls and a versioned tag made
13
+ * a one-time image seed (`docker save <img> | msb load`, ahead of
14
+ * microsandbox runs) reproducible — that rate limit is a pull-frequency
15
+ * property, not a tag one, and applies to `:latest` exactly the same as any
16
+ * other tag; seed the image into the cache once regardless of which
17
+ * reference you use.
9
18
  */
10
19
  export declare class RedpandaContainer extends GenericContainer {
11
- constructor(image?: string);
12
- static start(image?: string): Promise<RedpandaContainer>;
20
+ constructor(image?: string | DockerImageName);
21
+ static start(image?: string | DockerImageName): Promise<RedpandaContainer>;
13
22
  /**
14
23
  * The advertised listener must carry the mapped host port, known only now
15
24
  * (ports were allocated before boot) — the reason this hook exists at
@@ -1 +1 @@
1
- {"version":3,"file":"redpanda.d.ts","sourceRoot":"","sources":["../../src/modules/redpanda.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AAEhE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAUtD;;;;;;GAMG;AACH,qBAAa,iBAAkB,SAAQ,gBAAgB;gBACzC,KAAK,SAAkC;WAO7B,KAAK,CACzB,KAAK,SAAkC,GACtC,OAAO,CAAC,iBAAiB,CAAC;IAI7B;;;;;;;OAOG;cACgB,aAAa,CAAC,IAAI,EAAE,aAAa,EAAE,MAAM,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,GAAG,aAAa;IAkBvG,+FAA+F;IAC/F,IAAI,gBAAgB,IAAI,MAAM,CAE7B;IAED,6DAA6D;IAC7D,IAAI,iBAAiB,IAAI,MAAM,CAE9B;CACF"}
1
+ {"version":3,"file":"redpanda.d.ts","sourceRoot":"","sources":["../../src/modules/redpanda.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AAEhE,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAC/D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAYtD;;;;;;;;;;;;;;GAcG;AACH,qBAAa,iBAAkB,SAAQ,gBAAgB;gBACzC,KAAK,GAAE,MAAM,GAAG,eAA+B;WAOrC,KAAK,CACzB,KAAK,GAAE,MAAM,GAAG,eAA+B,GAC9C,OAAO,CAAC,iBAAiB,CAAC;IAI7B;;;;;;;OAOG;cACgB,aAAa,CAAC,IAAI,EAAE,aAAa,EAAE,MAAM,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,GAAG,aAAa;IAkBvG,+FAA+F;IAC/F,IAAI,gBAAgB,IAAI,MAAM,CAE7B;IAED,6DAA6D;IAC7D,IAAI,iBAAiB,IAAI,MAAM,CAE9B;CACF"}
@@ -1,24 +1,35 @@
1
1
  import { GenericContainer } from "../core/generic-container.js";
2
2
  import { Wait } from "../core/wait.js";
3
+ import { DockerImageName } from "../core/docker-image-name.js";
3
4
  const EXTERNAL_PORT = 9092;
4
5
  const INTERNAL_PORT = 9093;
5
6
  const SCHEMA_REGISTRY_PORT = 8081;
7
+ const EXPECTED_REPOSITORY = "redpandadata/redpanda";
8
+ const DEFAULT_IMAGE = "redpandadata/redpanda:latest";
6
9
  // The alias siblings resolve INTERNAL through — native docker networks, or
7
10
  // the msb exec-tunnel alias emulation.
8
11
  const INTERNAL_ALIAS = "redpanda";
9
12
  /**
10
13
  * A single-node Redpanda broker (Kafka API-compatible) with its schema
11
- * registry enabled. Pinned to a versioned tag rather than `:latest`:
12
- * `docker.redpanda.com` rate-limits anonymous pulls (seed it into the msb
13
- * image cache once with `docker save <img> | msb load` ahead of integration
14
- * runs), and a versioned tag makes that seed step reproducible.
14
+ * registry enabled.
15
+ *
16
+ * No-arg construction floats to `redpandadata/redpanda:latest`, so the
17
+ * version tracks upstream rather than this library's release cycle
18
+ * (verified against `redpandadata/redpanda:v24.2.4`). This module previously
19
+ * pinned a versioned tag instead of floating, reasoning that
20
+ * `docker.redpanda.com` rate-limits anonymous pulls and a versioned tag made
21
+ * a one-time image seed (`docker save <img> | msb load`, ahead of
22
+ * microsandbox runs) reproducible — that rate limit is a pull-frequency
23
+ * property, not a tag one, and applies to `:latest` exactly the same as any
24
+ * other tag; seed the image into the cache once regardless of which
25
+ * reference you use.
15
26
  */
16
27
  export class RedpandaContainer extends GenericContainer {
17
- constructor(image = "redpandadata/redpanda:v24.2.4") {
18
- super(image);
28
+ constructor(image = DEFAULT_IMAGE) {
29
+ super(DockerImageName.requireCompatible(image, EXPECTED_REPOSITORY));
19
30
  this.withExposedPorts(EXTERNAL_PORT, INTERNAL_PORT, SCHEMA_REGISTRY_PORT).waitingFor(Wait.forLogMessage(".*Successfully started Redpanda.*"));
20
31
  }
21
- static async start(image = "redpandadata/redpanda:v24.2.4") {
32
+ static async start(image = DEFAULT_IMAGE) {
22
33
  return (await new RedpandaContainer(image).start());
23
34
  }
24
35
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"redpanda.js","sourceRoot":"","sources":["../../src/modules/redpanda.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AAChE,OAAO,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAC;AAGvC,MAAM,aAAa,GAAG,IAAI,CAAC;AAC3B,MAAM,aAAa,GAAG,IAAI,CAAC;AAC3B,MAAM,oBAAoB,GAAG,IAAI,CAAC;AAElC,2EAA2E;AAC3E,uCAAuC;AACvC,MAAM,cAAc,GAAG,UAAU,CAAC;AAElC;;;;;;GAMG;AACH,MAAM,OAAO,iBAAkB,SAAQ,gBAAgB;IACrD,YAAY,KAAK,GAAG,+BAA+B;QACjD,KAAK,CAAC,KAAK,CAAC,CAAC;QACb,IAAI,CAAC,gBAAgB,CAAC,aAAa,EAAE,aAAa,EAAE,oBAAoB,CAAC,CAAC,UAAU,CAClF,IAAI,CAAC,aAAa,CAAC,mCAAmC,CAAC,CACxD,CAAC;IACJ,CAAC;IAED,MAAM,CAAU,KAAK,CAAC,KAAK,CACzB,KAAK,GAAG,+BAA+B;QAEvC,OAAO,CAAC,MAAM,IAAI,iBAAiB,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,CAAsB,CAAC;IAC3E,CAAC;IAED;;;;;;;OAOG;IACgB,aAAa,CAAC,IAAmB,EAAE,MAAiC;QACrF,MAAM,OAAO,GAAG;YACd,UAAU;YACV,OAAO;YACP,QAAQ;YACR,eAAe;YACf,OAAO;YACP,GAAG;YACH,cAAc;YACd,sBAAsB,aAAa,uBAAuB,aAAa,EAAE;YACzE,wBAAwB;YACxB,wBAAwB,MAAM,CAAC,aAAa,CAAC,eAAe,cAAc,IAAI,aAAa,EAAE;YAC7F,wBAAwB;YACxB,WAAW,oBAAoB,EAAE;SAClC,CAAC;QACF,OAAO,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,CAAC;IAC9B,CAAC;IAED,+FAA+F;IAC/F,IAAI,gBAAgB;QAClB,OAAO,eAAe,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC,EAAE,CAAC;IACzE,CAAC;IAED,6DAA6D;IAC7D,IAAI,iBAAiB;QACnB,OAAO,UAAU,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,aAAa,CAAC,oBAAoB,CAAC,EAAE,CAAC;IAC3E,CAAC;CACF"}
1
+ {"version":3,"file":"redpanda.js","sourceRoot":"","sources":["../../src/modules/redpanda.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AAChE,OAAO,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAC;AACvC,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAG/D,MAAM,aAAa,GAAG,IAAI,CAAC;AAC3B,MAAM,aAAa,GAAG,IAAI,CAAC;AAC3B,MAAM,oBAAoB,GAAG,IAAI,CAAC;AAClC,MAAM,mBAAmB,GAAG,uBAAuB,CAAC;AACpD,MAAM,aAAa,GAAG,8BAA8B,CAAC;AAErD,2EAA2E;AAC3E,uCAAuC;AACvC,MAAM,cAAc,GAAG,UAAU,CAAC;AAElC;;;;;;;;;;;;;;GAcG;AACH,MAAM,OAAO,iBAAkB,SAAQ,gBAAgB;IACrD,YAAY,QAAkC,aAAa;QACzD,KAAK,CAAC,eAAe,CAAC,iBAAiB,CAAC,KAAK,EAAE,mBAAmB,CAAC,CAAC,CAAC;QACrE,IAAI,CAAC,gBAAgB,CAAC,aAAa,EAAE,aAAa,EAAE,oBAAoB,CAAC,CAAC,UAAU,CAClF,IAAI,CAAC,aAAa,CAAC,mCAAmC,CAAC,CACxD,CAAC;IACJ,CAAC;IAED,MAAM,CAAU,KAAK,CAAC,KAAK,CACzB,QAAkC,aAAa;QAE/C,OAAO,CAAC,MAAM,IAAI,iBAAiB,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,CAAsB,CAAC;IAC3E,CAAC;IAED;;;;;;;OAOG;IACgB,aAAa,CAAC,IAAmB,EAAE,MAAiC;QACrF,MAAM,OAAO,GAAG;YACd,UAAU;YACV,OAAO;YACP,QAAQ;YACR,eAAe;YACf,OAAO;YACP,GAAG;YACH,cAAc;YACd,sBAAsB,aAAa,uBAAuB,aAAa,EAAE;YACzE,wBAAwB;YACxB,wBAAwB,MAAM,CAAC,aAAa,CAAC,eAAe,cAAc,IAAI,aAAa,EAAE;YAC7F,wBAAwB;YACxB,WAAW,oBAAoB,EAAE;SAClC,CAAC;QACF,OAAO,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,CAAC;IAC9B,CAAC;IAED,+FAA+F;IAC/F,IAAI,gBAAgB;QAClB,OAAO,eAAe,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC,EAAE,CAAC;IACzE,CAAC;IAED,6DAA6D;IAC7D,IAAI,iBAAiB;QACnB,OAAO,UAAU,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,aAAa,CAAC,oBAAoB,CAAC,EAAE,CAAC;IAC3E,CAAC;CACF"}
@@ -1,8 +1,13 @@
1
1
  import { GenericContainer } from "../core/generic-container.js";
2
+ import { DockerImageName } from "../core/docker-image-name.js";
2
3
  /**
3
4
  * A Spring Cloud Config Server container, ready-checked via its actuator
4
5
  * health endpoint.
5
6
  *
7
+ * No-arg construction floats to `hyness/spring-cloud-config-server:latest` —
8
+ * this module has always defaulted to the floating tag, so there is no
9
+ * pinned version its measurements below need to be re-attributed from.
10
+ *
6
11
  * Paketo's memory calculator sizes this JVM image's fixed regions
7
12
  * (measured ~704763K) above microsandbox's default microVM RAM (~450MB),
8
13
  * so `withMemoryLimit(1024)` is set by default here — without it, the
@@ -10,8 +15,8 @@ import { GenericContainer } from "../core/generic-container.js";
10
15
  * boot completes in roughly 19s.
11
16
  */
12
17
  export declare class SpringCloudConfigContainer extends GenericContainer {
13
- constructor(image?: string);
14
- static start(image?: string): Promise<SpringCloudConfigContainer>;
18
+ constructor(image?: string | DockerImageName);
19
+ static start(image?: string | DockerImageName): Promise<SpringCloudConfigContainer>;
15
20
  /** The config server's base URI for the running container. */
16
21
  get uri(): string;
17
22
  }
@@ -1 +1 @@
1
- {"version":3,"file":"spring-cloud-config.d.ts","sourceRoot":"","sources":["../../src/modules/spring-cloud-config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AAKhE;;;;;;;;;GASG;AACH,qBAAa,0BAA2B,SAAQ,gBAAgB;gBAClD,KAAK,SAA6C;WAMxC,KAAK,CAAC,KAAK,SAA6C,GAAG,OAAO,CAAC,0BAA0B,CAAC;IAIpH,8DAA8D;IAC9D,IAAI,GAAG,IAAI,MAAM,CAEhB;CACF"}
1
+ {"version":3,"file":"spring-cloud-config.d.ts","sourceRoot":"","sources":["../../src/modules/spring-cloud-config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AAEhE,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAM/D;;;;;;;;;;;;;GAaG;AACH,qBAAa,0BAA2B,SAAQ,gBAAgB;gBAClD,KAAK,GAAE,MAAM,GAAG,eAA+B;WAMrC,KAAK,CACzB,KAAK,GAAE,MAAM,GAAG,eAA+B,GAC9C,OAAO,CAAC,0BAA0B,CAAC;IAItC,8DAA8D;IAC9D,IAAI,GAAG,IAAI,MAAM,CAEhB;CACF"}
@@ -1,10 +1,17 @@
1
1
  import { GenericContainer } from "../core/generic-container.js";
2
2
  import { Wait } from "../core/wait.js";
3
+ import { DockerImageName } from "../core/docker-image-name.js";
3
4
  const GUEST_PORT = 8888;
5
+ const EXPECTED_REPOSITORY = "hyness/spring-cloud-config-server";
6
+ const DEFAULT_IMAGE = "hyness/spring-cloud-config-server:latest";
4
7
  /**
5
8
  * A Spring Cloud Config Server container, ready-checked via its actuator
6
9
  * health endpoint.
7
10
  *
11
+ * No-arg construction floats to `hyness/spring-cloud-config-server:latest` —
12
+ * this module has always defaulted to the floating tag, so there is no
13
+ * pinned version its measurements below need to be re-attributed from.
14
+ *
8
15
  * Paketo's memory calculator sizes this JVM image's fixed regions
9
16
  * (measured ~704763K) above microsandbox's default microVM RAM (~450MB),
10
17
  * so `withMemoryLimit(1024)` is set by default here — without it, the
@@ -12,12 +19,12 @@ const GUEST_PORT = 8888;
12
19
  * boot completes in roughly 19s.
13
20
  */
14
21
  export class SpringCloudConfigContainer extends GenericContainer {
15
- constructor(image = "hyness/spring-cloud-config-server:latest") {
16
- super(image);
22
+ constructor(image = DEFAULT_IMAGE) {
23
+ super(DockerImageName.requireCompatible(image, EXPECTED_REPOSITORY));
17
24
  this.withExposedPorts(GUEST_PORT).waitingFor(Wait.forHttp("/actuator/health").forPort(GUEST_PORT));
18
25
  this.withMemoryLimit(1024);
19
26
  }
20
- static async start(image = "hyness/spring-cloud-config-server:latest") {
27
+ static async start(image = DEFAULT_IMAGE) {
21
28
  return (await new SpringCloudConfigContainer(image).start());
22
29
  }
23
30
  /** The config server's base URI for the running container. */
@@ -1 +1 @@
1
- {"version":3,"file":"spring-cloud-config.js","sourceRoot":"","sources":["../../src/modules/spring-cloud-config.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;;;;;;;;;GASG;AACH,MAAM,OAAO,0BAA2B,SAAQ,gBAAgB;IAC9D,YAAY,KAAK,GAAG,0CAA0C;QAC5D,KAAK,CAAC,KAAK,CAAC,CAAC;QACb,IAAI,CAAC,gBAAgB,CAAC,UAAU,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC;QACnG,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;IAC7B,CAAC;IAED,MAAM,CAAU,KAAK,CAAC,KAAK,CAAC,KAAK,GAAG,0CAA0C;QAC5E,OAAO,CAAC,MAAM,IAAI,0BAA0B,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,CAA+B,CAAC;IAC7F,CAAC;IAED,8DAA8D;IAC9D,IAAI,GAAG;QACL,OAAO,UAAU,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,EAAE,CAAC;IACjE,CAAC;CACF"}
1
+ {"version":3,"file":"spring-cloud-config.js","sourceRoot":"","sources":["../../src/modules/spring-cloud-config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AAChE,OAAO,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAC;AACvC,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAE/D,MAAM,UAAU,GAAG,IAAI,CAAC;AACxB,MAAM,mBAAmB,GAAG,mCAAmC,CAAC;AAChE,MAAM,aAAa,GAAG,0CAA0C,CAAC;AAEjE;;;;;;;;;;;;;GAaG;AACH,MAAM,OAAO,0BAA2B,SAAQ,gBAAgB;IAC9D,YAAY,QAAkC,aAAa;QACzD,KAAK,CAAC,eAAe,CAAC,iBAAiB,CAAC,KAAK,EAAE,mBAAmB,CAAC,CAAC,CAAC;QACrE,IAAI,CAAC,gBAAgB,CAAC,UAAU,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC;QACnG,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;IAC7B,CAAC;IAED,MAAM,CAAU,KAAK,CAAC,KAAK,CACzB,QAAkC,aAAa;QAE/C,OAAO,CAAC,MAAM,IAAI,0BAA0B,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,CAA+B,CAAC;IAC7F,CAAC;IAED,8DAA8D;IAC9D,IAAI,GAAG;QACL,OAAO,UAAU,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,EAAE,CAAC;IACjE,CAAC;CACF"}
@@ -1,4 +1,5 @@
1
1
  import { GenericContainer } from "../core/generic-container.js";
2
+ import { DockerImageName } from "../core/docker-image-name.js";
2
3
  /**
3
4
  * A single-node Valkey container — the Redis-protocol-compatible fork,
4
5
  * following `RedisContainer`'s shape exactly. Readiness is anchored on the
@@ -11,10 +12,16 @@ import { GenericContainer } from "../core/generic-container.js";
11
12
  * client this library's tests and its users reach for — lettuce,
12
13
  * node-redis, or raw RESP over TCP — parses `redis://`, and Valkey speaks
13
14
  * that same wire protocol. This is not a copy-paste mistake.
15
+ *
16
+ * No-arg construction floats to `valkey/valkey:latest`, so the version
17
+ * tracks upstream rather than this library's release cycle (verified
18
+ * against `valkey/valkey:9.1-alpine`, including the no-memory-limit and PING
19
+ * facts below). `latest` is Debian-based rather than Alpine — functionally
20
+ * equivalent, larger to pull.
14
21
  */
15
22
  export declare class ValkeyContainer extends GenericContainer {
16
- constructor(image?: string);
17
- static start(image?: string): Promise<ValkeyContainer>;
23
+ constructor(image?: string | DockerImageName);
24
+ static start(image?: string | DockerImageName): Promise<ValkeyContainer>;
18
25
  /** A `redis://` connection URI for the running container (see the class doc for why not `valkey://`). */
19
26
  get uri(): string;
20
27
  }
@@ -1 +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"}
1
+ {"version":3,"file":"valkey.d.ts","sourceRoot":"","sources":["../../src/modules/valkey.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AAEhE,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAM/D;;;;;;;;;;;;;;;;;;GAkBG;AACH,qBAAa,eAAgB,SAAQ,gBAAgB;gBACvC,KAAK,GAAE,MAAM,GAAG,eAA+B;WAOrC,KAAK,CAAC,KAAK,GAAE,MAAM,GAAG,eAA+B,GAAG,OAAO,CAAC,eAAe,CAAC;IAItG,yGAAyG;IACzG,IAAI,GAAG,IAAI,MAAM,CAEhB;CACF"}
@@ -1,6 +1,9 @@
1
1
  import { GenericContainer } from "../core/generic-container.js";
2
2
  import { Wait } from "../core/wait.js";
3
+ import { DockerImageName } from "../core/docker-image-name.js";
3
4
  const GUEST_PORT = 6379;
5
+ const EXPECTED_REPOSITORY = "valkey/valkey";
6
+ const DEFAULT_IMAGE = "valkey/valkey:latest";
4
7
  /**
5
8
  * A single-node Valkey container — the Redis-protocol-compatible fork,
6
9
  * following `RedisContainer`'s shape exactly. Readiness is anchored on the
@@ -13,15 +16,21 @@ const GUEST_PORT = 6379;
13
16
  * client this library's tests and its users reach for — lettuce,
14
17
  * node-redis, or raw RESP over TCP — parses `redis://`, and Valkey speaks
15
18
  * that same wire protocol. This is not a copy-paste mistake.
19
+ *
20
+ * No-arg construction floats to `valkey/valkey:latest`, so the version
21
+ * tracks upstream rather than this library's release cycle (verified
22
+ * against `valkey/valkey:9.1-alpine`, including the no-memory-limit and PING
23
+ * facts below). `latest` is Debian-based rather than Alpine — functionally
24
+ * equivalent, larger to pull.
16
25
  */
17
26
  export class ValkeyContainer extends GenericContainer {
18
- constructor(image = "valkey/valkey:9.1-alpine") {
19
- super(image);
27
+ constructor(image = DEFAULT_IMAGE) {
28
+ super(DockerImageName.requireCompatible(image, EXPECTED_REPOSITORY));
20
29
  this.withExposedPorts(GUEST_PORT).waitingFor(Wait.forLogMessage(".*Ready to accept connections.*", 1));
21
30
  // No withMemoryLimit override: verified booting and answering PING with
22
31
  // no limit set beyond msb's default, well under 512 MB.
23
32
  }
24
- static async start(image = "valkey/valkey:9.1-alpine") {
33
+ static async start(image = DEFAULT_IMAGE) {
25
34
  return (await new ValkeyContainer(image).start());
26
35
  }
27
36
  /** A `redis://` connection URI for the running container (see the class doc for why not `valkey://`). */
@@ -1 +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"}
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;AACvC,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAE/D,MAAM,UAAU,GAAG,IAAI,CAAC;AACxB,MAAM,mBAAmB,GAAG,eAAe,CAAC;AAC5C,MAAM,aAAa,GAAG,sBAAsB,CAAC;AAE7C;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,OAAO,eAAgB,SAAQ,gBAAgB;IACnD,YAAY,QAAkC,aAAa;QACzD,KAAK,CAAC,eAAe,CAAC,iBAAiB,CAAC,KAAK,EAAE,mBAAmB,CAAC,CAAC,CAAC;QACrE,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,QAAkC,aAAa;QACzE,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"}
@@ -1,4 +1,5 @@
1
1
  import { GenericContainer } from "../core/generic-container.js";
2
+ import { DockerImageName } from "../core/docker-image-name.js";
2
3
  /**
3
4
  * A single-node WireMock container — the TypeScript ecosystem has no
4
5
  * in-process WireMock equivalent (unlike the JVM, where WireMock runs
@@ -9,10 +10,14 @@ import { GenericContainer } from "../core/generic-container.js";
9
10
  * dependency-free readiness signal, so it's preferred over polling
10
11
  * `/__admin/mappings` (which would also return 200 once the admin API is
11
12
  * up, but reads as "list of stubs" rather than "am I healthy").
13
+ *
14
+ * No-arg construction floats to `wiremock/wiremock:latest`, so the version
15
+ * tracks upstream rather than this library's release cycle (verified
16
+ * against `wiremock/wiremock:3.13.2`).
12
17
  */
13
18
  export declare class WireMockContainer extends GenericContainer {
14
- constructor(image?: string);
15
- static start(image?: string): Promise<WireMockContainer>;
19
+ constructor(image?: string | DockerImageName);
20
+ static start(image?: string | DockerImageName): Promise<WireMockContainer>;
16
21
  /** The stubbed API's base URL (mock endpoints are served from here). */
17
22
  get baseUrl(): string;
18
23
  /** The admin API's base URL (`/__admin/...` — mapping management, health, requests). */
@@ -1 +1 @@
1
- {"version":3,"file":"wiremock.d.ts","sourceRoot":"","sources":["../../src/modules/wiremock.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AAKhE;;;;;;;;;;GAUG;AACH,qBAAa,iBAAkB,SAAQ,gBAAgB;gBACzC,KAAK,SAA6B;WAKxB,KAAK,CAAC,KAAK,SAA6B,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAI3F,wEAAwE;IACxE,IAAI,OAAO,IAAI,MAAM,CAEpB;IAED,wFAAwF;IACxF,IAAI,QAAQ,IAAI,MAAM,CAErB;CACF"}
1
+ {"version":3,"file":"wiremock.d.ts","sourceRoot":"","sources":["../../src/modules/wiremock.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AAEhE,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAM/D;;;;;;;;;;;;;;GAcG;AACH,qBAAa,iBAAkB,SAAQ,gBAAgB;gBACzC,KAAK,GAAE,MAAM,GAAG,eAA+B;WAKrC,KAAK,CAAC,KAAK,GAAE,MAAM,GAAG,eAA+B,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAIxG,wEAAwE;IACxE,IAAI,OAAO,IAAI,MAAM,CAEpB;IAED,wFAAwF;IACxF,IAAI,QAAQ,IAAI,MAAM,CAErB;CACF"}
@@ -1,6 +1,9 @@
1
1
  import { GenericContainer } from "../core/generic-container.js";
2
2
  import { Wait } from "../core/wait.js";
3
+ import { DockerImageName } from "../core/docker-image-name.js";
3
4
  const GUEST_PORT = 8080;
5
+ const EXPECTED_REPOSITORY = "wiremock/wiremock";
6
+ const DEFAULT_IMAGE = "wiremock/wiremock:latest";
4
7
  /**
5
8
  * A single-node WireMock container — the TypeScript ecosystem has no
6
9
  * in-process WireMock equivalent (unlike the JVM, where WireMock runs
@@ -11,13 +14,17 @@ const GUEST_PORT = 8080;
11
14
  * dependency-free readiness signal, so it's preferred over polling
12
15
  * `/__admin/mappings` (which would also return 200 once the admin API is
13
16
  * up, but reads as "list of stubs" rather than "am I healthy").
17
+ *
18
+ * No-arg construction floats to `wiremock/wiremock:latest`, so the version
19
+ * tracks upstream rather than this library's release cycle (verified
20
+ * against `wiremock/wiremock:3.13.2`).
14
21
  */
15
22
  export class WireMockContainer extends GenericContainer {
16
- constructor(image = "wiremock/wiremock:3.13.2") {
17
- super(image);
23
+ constructor(image = DEFAULT_IMAGE) {
24
+ super(DockerImageName.requireCompatible(image, EXPECTED_REPOSITORY));
18
25
  this.withExposedPorts(GUEST_PORT).waitingFor(Wait.forHttp("/__admin/health").forPort(GUEST_PORT));
19
26
  }
20
- static async start(image = "wiremock/wiremock:3.13.2") {
27
+ static async start(image = DEFAULT_IMAGE) {
21
28
  return (await new WireMockContainer(image).start());
22
29
  }
23
30
  /** The stubbed API's base URL (mock endpoints are served from here). */
@@ -1 +1 @@
1
- {"version":3,"file":"wiremock.js","sourceRoot":"","sources":["../../src/modules/wiremock.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;;;;;;;;;;GAUG;AACH,MAAM,OAAO,iBAAkB,SAAQ,gBAAgB;IACrD,YAAY,KAAK,GAAG,0BAA0B;QAC5C,KAAK,CAAC,KAAK,CAAC,CAAC;QACb,IAAI,CAAC,gBAAgB,CAAC,UAAU,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC;IACpG,CAAC;IAED,MAAM,CAAU,KAAK,CAAC,KAAK,CAAC,KAAK,GAAG,0BAA0B;QAC5D,OAAO,CAAC,MAAM,IAAI,iBAAiB,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,CAAsB,CAAC;IAC3E,CAAC;IAED,wEAAwE;IACxE,IAAI,OAAO;QACT,OAAO,UAAU,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,EAAE,CAAC;IACjE,CAAC;IAED,wFAAwF;IACxF,IAAI,QAAQ;QACV,OAAO,GAAG,IAAI,CAAC,OAAO,UAAU,CAAC;IACnC,CAAC;CACF"}
1
+ {"version":3,"file":"wiremock.js","sourceRoot":"","sources":["../../src/modules/wiremock.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AAChE,OAAO,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAC;AACvC,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAE/D,MAAM,UAAU,GAAG,IAAI,CAAC;AACxB,MAAM,mBAAmB,GAAG,mBAAmB,CAAC;AAChD,MAAM,aAAa,GAAG,0BAA0B,CAAC;AAEjD;;;;;;;;;;;;;;GAcG;AACH,MAAM,OAAO,iBAAkB,SAAQ,gBAAgB;IACrD,YAAY,QAAkC,aAAa;QACzD,KAAK,CAAC,eAAe,CAAC,iBAAiB,CAAC,KAAK,EAAE,mBAAmB,CAAC,CAAC,CAAC;QACrE,IAAI,CAAC,gBAAgB,CAAC,UAAU,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC;IACpG,CAAC;IAED,MAAM,CAAU,KAAK,CAAC,KAAK,CAAC,QAAkC,aAAa;QACzE,OAAO,CAAC,MAAM,IAAI,iBAAiB,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,CAAsB,CAAC;IAC3E,CAAC;IAED,wEAAwE;IACxE,IAAI,OAAO;QACT,OAAO,UAAU,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,EAAE,CAAC;IACjE,CAAC;IAED,wFAAwF;IACxF,IAAI,QAAQ;QACV,OAAO,GAAG,IAAI,CAAC,OAAO,UAAU,CAAC;IACnC,CAAC;CACF"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "rightsize",
3
- "version": "0.5.0",
3
+ "version": "0.6.1",
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",