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
@@ -0,0 +1,49 @@
1
+ import { GenericContainer } from "../core/generic-container.js";
2
+ import { DockerImageName } from "../core/docker-image-name.js";
3
+ /**
4
+ * A single-node Elasticsearch container.
5
+ *
6
+ * ### No no-arg constructor — Elastic publishes no floating tag
7
+ *
8
+ * Every other module in this library floats to the image's own `:latest`
9
+ * (or an equivalent) when no image is given, so the version tracks upstream
10
+ * rather than this library's release cycle. Elasticsearch has no such tag to
11
+ * float to: `elasticsearch:latest`, `elasticsearch:9`, and `elasticsearch:8`
12
+ * are all 404 on Docker Hub — Elastic publishes only full version tags
13
+ * (verified against `elasticsearch:9.4.4`, arm64). An explicit image is
14
+ * therefore required on both the constructor and `start()`; there is no
15
+ * default to fall back to.
16
+ *
17
+ * ### Single-node config
18
+ *
19
+ * `discovery.type=single-node` skips the cluster-formation bootstrap
20
+ * checks a multi-node deployment would otherwise wait on;
21
+ * `xpack.security.enabled=false` disables TLS/auth so the REST API answers
22
+ * plain HTTP with no client-side certificate or credential setup;
23
+ * `ES_JAVA_OPTS=-Xms512m -Xmx512m` sizes the JVM heap down for a test boot.
24
+ *
25
+ * Exposes both the REST API (9200, what `restUrl` wraps) and the transport
26
+ * port (9300, published but not wrapped by any helper here).
27
+ *
28
+ * ### Memory and readiness
29
+ *
30
+ * `withMemoryLimit(2560)` — measured ~1.1 GB resident in a 2.48 GB guest at
31
+ * rest. Readiness is a plain HTTP 200 on `/`, reached in 27s on a quiet
32
+ * local machine; 300s absorbs a loaded CI runner without masking a real
33
+ * hang.
34
+ *
35
+ * **Cluster health never reaches `green` on a single node** — replica
36
+ * shards (Elasticsearch's own default is one replica per index) have
37
+ * nowhere to be assigned, so `/_cluster/health` reports `yellow`
38
+ * indefinitely. A readiness check that waited for `green` would hang until
39
+ * its own timeout; this module deliberately waits on the plain HTTP probe
40
+ * above instead.
41
+ */
42
+ export declare class ElasticsearchContainer extends GenericContainer {
43
+ constructor(image: string | DockerImageName);
44
+ /** No default image — see the class doc for why Elasticsearch has no floating tag to fall back to. */
45
+ static start(image: string | DockerImageName): Promise<ElasticsearchContainer>;
46
+ /** The REST API's base URL for the running container. */
47
+ get restUrl(): string;
48
+ }
49
+ //# sourceMappingURL=elasticsearch.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"elasticsearch.d.ts","sourceRoot":"","sources":["../../src/modules/elasticsearch.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AAEhE,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAO/D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsCG;AACH,qBAAa,sBAAuB,SAAQ,gBAAgB;gBAC9C,KAAK,EAAE,MAAM,GAAG,eAAe;IAU3C,sGAAsG;WAChF,KAAK,CAAC,KAAK,EAAE,MAAM,GAAG,eAAe,GAAG,OAAO,CAAC,sBAAsB,CAAC;IAI7F,yDAAyD;IACzD,IAAI,OAAO,IAAI,MAAM,CAEpB;CACF"}
@@ -0,0 +1,66 @@
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 = 9200;
5
+ const TRANSPORT_PORT = 9300;
6
+ const STARTUP_TIMEOUT_MS = 300_000;
7
+ const EXPECTED_REPOSITORY = "elasticsearch";
8
+ /**
9
+ * A single-node Elasticsearch container.
10
+ *
11
+ * ### No no-arg constructor — Elastic publishes no floating tag
12
+ *
13
+ * Every other module in this library floats to the image's own `:latest`
14
+ * (or an equivalent) when no image is given, so the version tracks upstream
15
+ * rather than this library's release cycle. Elasticsearch has no such tag to
16
+ * float to: `elasticsearch:latest`, `elasticsearch:9`, and `elasticsearch:8`
17
+ * are all 404 on Docker Hub — Elastic publishes only full version tags
18
+ * (verified against `elasticsearch:9.4.4`, arm64). An explicit image is
19
+ * therefore required on both the constructor and `start()`; there is no
20
+ * default to fall back to.
21
+ *
22
+ * ### Single-node config
23
+ *
24
+ * `discovery.type=single-node` skips the cluster-formation bootstrap
25
+ * checks a multi-node deployment would otherwise wait on;
26
+ * `xpack.security.enabled=false` disables TLS/auth so the REST API answers
27
+ * plain HTTP with no client-side certificate or credential setup;
28
+ * `ES_JAVA_OPTS=-Xms512m -Xmx512m` sizes the JVM heap down for a test boot.
29
+ *
30
+ * Exposes both the REST API (9200, what `restUrl` wraps) and the transport
31
+ * port (9300, published but not wrapped by any helper here).
32
+ *
33
+ * ### Memory and readiness
34
+ *
35
+ * `withMemoryLimit(2560)` — measured ~1.1 GB resident in a 2.48 GB guest at
36
+ * rest. Readiness is a plain HTTP 200 on `/`, reached in 27s on a quiet
37
+ * local machine; 300s absorbs a loaded CI runner without masking a real
38
+ * hang.
39
+ *
40
+ * **Cluster health never reaches `green` on a single node** — replica
41
+ * shards (Elasticsearch's own default is one replica per index) have
42
+ * nowhere to be assigned, so `/_cluster/health` reports `yellow`
43
+ * indefinitely. A readiness check that waited for `green` would hang until
44
+ * its own timeout; this module deliberately waits on the plain HTTP probe
45
+ * above instead.
46
+ */
47
+ export class ElasticsearchContainer extends GenericContainer {
48
+ constructor(image) {
49
+ super(DockerImageName.requireCompatible(image, EXPECTED_REPOSITORY));
50
+ this.withExposedPorts(REST_PORT, TRANSPORT_PORT)
51
+ .withEnv("discovery.type", "single-node")
52
+ .withEnv("xpack.security.enabled", "false")
53
+ .withEnv("ES_JAVA_OPTS", "-Xms512m -Xmx512m")
54
+ .withMemoryLimit(2560)
55
+ .waitingFor(Wait.forHttp("/").forPort(REST_PORT).withStartupTimeout(STARTUP_TIMEOUT_MS));
56
+ }
57
+ /** No default image — see the class doc for why Elasticsearch has no floating tag to fall back to. */
58
+ static async start(image) {
59
+ return (await new ElasticsearchContainer(image).start());
60
+ }
61
+ /** The REST API's base URL for the running container. */
62
+ get restUrl() {
63
+ return `http://${this.host}:${this.getMappedPort(REST_PORT)}`;
64
+ }
65
+ }
66
+ //# sourceMappingURL=elasticsearch.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"elasticsearch.js","sourceRoot":"","sources":["../../src/modules/elasticsearch.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,cAAc,GAAG,IAAI,CAAC;AAC5B,MAAM,kBAAkB,GAAG,OAAO,CAAC;AACnC,MAAM,mBAAmB,GAAG,eAAe,CAAC;AAE5C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsCG;AACH,MAAM,OAAO,sBAAuB,SAAQ,gBAAgB;IAC1D,YAAY,KAA+B;QACzC,KAAK,CAAC,eAAe,CAAC,iBAAiB,CAAC,KAAK,EAAE,mBAAmB,CAAC,CAAC,CAAC;QACrE,IAAI,CAAC,gBAAgB,CAAC,SAAS,EAAE,cAAc,CAAC;aAC7C,OAAO,CAAC,gBAAgB,EAAE,aAAa,CAAC;aACxC,OAAO,CAAC,wBAAwB,EAAE,OAAO,CAAC;aAC1C,OAAO,CAAC,cAAc,EAAE,mBAAmB,CAAC;aAC5C,eAAe,CAAC,IAAI,CAAC;aACrB,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,kBAAkB,CAAC,kBAAkB,CAAC,CAAC,CAAC;IAC7F,CAAC;IAED,sGAAsG;IACtG,MAAM,CAAU,KAAK,CAAC,KAAK,CAAC,KAA+B;QACzD,OAAO,CAAC,MAAM,IAAI,sBAAsB,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,CAA2B,CAAC;IACrF,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,9 +1,15 @@
1
1
  import { GenericContainer } from "../core/generic-container.js";
2
+ import { DockerImageName } from "../core/docker-image-name.js";
2
3
  import type { SandboxBackend } from "../core/backend.js";
3
4
  /**
4
5
  * A Flink JobManager container (REST 8081, RPC 6123), with an optional
5
6
  * companion TaskManager on Docker only — see `withTaskManager()`.
6
7
  *
8
+ * No-arg construction floats to `flink:latest`, so the version tracks
9
+ * upstream rather than this library's release cycle (verified against
10
+ * `flink:1.20.5`, including the `nc`/busybox absence this class doc relies
11
+ * on below).
12
+ *
7
13
  * `FLINK_PROPERTIES` must set `jobmanager.rpc.address` on the JobManager
8
14
  * itself (not just the TaskManager): the JobManager's own Pekko/Akka actor
9
15
  * system binds its external address from this property too, and the image's
@@ -38,8 +44,8 @@ export declare class FlinkContainer extends GenericContainer {
38
44
  private taskManagerContainer;
39
45
  private taskManagerNetwork;
40
46
  private ownedNetwork;
41
- constructor(image?: string);
42
- static start(image?: string): Promise<FlinkContainer>;
47
+ constructor(image?: string | DockerImageName);
48
+ static start(image?: string | DockerImageName): Promise<FlinkContainer>;
43
49
  /**
44
50
  * Requests a companion TaskManager, started on a shared `Network` once
45
51
  * the JobManager is ready. Docker only — see the class doc for why msb
@@ -1 +1 @@
1
- {"version":3,"file":"flink.d.ts","sourceRoot":"","sources":["../../src/modules/flink.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AAIhE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAQzD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AACH,qBAAa,cAAe,SAAQ,gBAAgB;IAClD,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;IAClC,OAAO,CAAC,oBAAoB,CAAS;IACrC,OAAO,CAAC,oBAAoB,CAA+B;IAC3D,OAAO,CAAC,kBAAkB,CAAsB;IAChD,OAAO,CAAC,YAAY,CAAsB;gBAE9B,KAAK,SAAiB;WAWZ,KAAK,CAAC,KAAK,SAAiB,GAAG,OAAO,CAAC,cAAc,CAAC;IAI5E;;;;;;OAMG;IACH,eAAe,IAAI,IAAI;IASvB;;;;;;;OAOG;cACsB,mBAAmB,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC;cAU3D,kBAAkB,IAAI,OAAO,CAAC,IAAI,CAAC;IAqB7C,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAYpC,oDAAoD;IACpD,IAAI,OAAO,IAAI,MAAM,CAEpB;CACF"}
1
+ {"version":3,"file":"flink.d.ts","sourceRoot":"","sources":["../../src/modules/flink.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AAIhE,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAC/D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAUzD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoCG;AACH,qBAAa,cAAe,SAAQ,gBAAgB;IAClD,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;IAClC,OAAO,CAAC,oBAAoB,CAAS;IACrC,OAAO,CAAC,oBAAoB,CAA+B;IAC3D,OAAO,CAAC,kBAAkB,CAAsB;IAChD,OAAO,CAAC,YAAY,CAAsB;gBAE9B,KAAK,GAAE,MAAM,GAAG,eAA+B;WAYrC,KAAK,CAAC,KAAK,GAAE,MAAM,GAAG,eAA+B,GAAG,OAAO,CAAC,cAAc,CAAC;IAIrG;;;;;;OAMG;IACH,eAAe,IAAI,IAAI;IASvB;;;;;;;OAOG;cACsB,mBAAmB,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC;cAU3D,kBAAkB,IAAI,OAAO,CAAC,IAAI,CAAC;IAqB7C,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAYpC,oDAAoD;IACpD,IAAI,OAAO,IAAI,MAAM,CAEpB;CACF"}
@@ -2,15 +2,23 @@ import { GenericContainer } from "../core/generic-container.js";
2
2
  import { Network } from "../core/network.js";
3
3
  import { Wait } from "../core/wait.js";
4
4
  import { UnsupportedByBackendError } from "../core/errors.js";
5
+ import { DockerImageName } from "../core/docker-image-name.js";
5
6
  const RPC_PORT = 6123;
6
7
  const REST_PORT = 8081;
7
8
  const JOBMANAGER_MEMORY_MB = 1024;
8
9
  const TASKMANAGER_MEMORY_MB = 1024;
9
10
  const JOBMANAGER_ALIAS = "flink-jobmanager";
11
+ const EXPECTED_REPOSITORY = "flink";
12
+ const DEFAULT_IMAGE = "flink:latest";
10
13
  /**
11
14
  * A Flink JobManager container (REST 8081, RPC 6123), with an optional
12
15
  * companion TaskManager on Docker only — see `withTaskManager()`.
13
16
  *
17
+ * No-arg construction floats to `flink:latest`, so the version tracks
18
+ * upstream rather than this library's release cycle (verified against
19
+ * `flink:1.20.5`, including the `nc`/busybox absence this class doc relies
20
+ * on below).
21
+ *
14
22
  * `FLINK_PROPERTIES` must set `jobmanager.rpc.address` on the JobManager
15
23
  * itself (not just the TaskManager): the JobManager's own Pekko/Akka actor
16
24
  * system binds its external address from this property too, and the image's
@@ -45,9 +53,10 @@ export class FlinkContainer extends GenericContainer {
45
53
  taskManagerContainer;
46
54
  taskManagerNetwork;
47
55
  ownedNetwork;
48
- constructor(image = "flink:1.20.5") {
49
- super(image);
50
- this.imageTag = image;
56
+ constructor(image = DEFAULT_IMAGE) {
57
+ const resolvedImage = DockerImageName.requireCompatible(image, EXPECTED_REPOSITORY);
58
+ super(resolvedImage);
59
+ this.imageTag = resolvedImage;
51
60
  this.withExposedPorts(RPC_PORT, REST_PORT)
52
61
  .withEnv("FLINK_PROPERTIES", `jobmanager.rpc.address: ${JOBMANAGER_ALIAS}`)
53
62
  .withCommand("jobmanager")
@@ -55,7 +64,7 @@ export class FlinkContainer extends GenericContainer {
55
64
  .withNetworkAliases(JOBMANAGER_ALIAS)
56
65
  .waitingFor(Wait.forHttp("/overview").forPort(REST_PORT).withStartupTimeout(120_000));
57
66
  }
58
- static async start(image = "flink:1.20.5") {
67
+ static async start(image = DEFAULT_IMAGE) {
59
68
  return (await new FlinkContainer(image).start());
60
69
  }
61
70
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"flink.js","sourceRoot":"","sources":["../../src/modules/flink.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"flink.js","sourceRoot":"","sources":["../../src/modules/flink.ts"],"names":[],"mappings":"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"}
@@ -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 [floci.io](https://floci.io) cloud emulator — one native Quarkus image
4
5
  * per cloud provider, each speaking that provider's REST APIs against an
@@ -17,6 +18,17 @@ import { GenericContainer } from "../core/generic-container.js";
17
18
  * `floci/floci-az:0.8.0`, and `floci/floci-gcp:0.4.0`) — pinned as the one
18
19
  * wait path that works across all three; no log-wait fallback was needed.
19
20
  *
21
+ * ### No-arg factories float, each to its own repository's `latest`
22
+ *
23
+ * `aws()`, `azure()`, and `gcp()` each default to that provider's
24
+ * `floci/floci*:latest`, so the version tracks upstream rather than this
25
+ * library's release cycle — verified against `floci/floci:1.5.30`,
26
+ * `floci/floci-az:0.8.0`, and `floci/floci-gcp:0.4.0` respectively, the same
27
+ * boots every other fact on this page cites. Each factory checks its own
28
+ * repository (`floci/floci`, `floci/floci-az`, `floci/floci-gcp`) — an image
29
+ * meant for one variant is rejected by another's factory with
30
+ * `IncompatibleImageError` before any backend call.
31
+ *
20
32
  * ### No signing needed — verified against the AWS variant's S3 surface
21
33
  *
22
34
  * The AWS variant's S3-shaped REST endpoints accept unsigned requests with
@@ -34,12 +46,24 @@ import { GenericContainer } from "../core/generic-container.js";
34
46
  export declare class FlociContainer extends GenericContainer {
35
47
  private readonly guestPort;
36
48
  private constructor();
37
- /** The AWS emulator (`floci/floci:1.5.30`), guest port 4566 — S3, DynamoDB, SQS, etc. */
38
- static aws(image?: string): FlociContainer;
39
- /** The Azure emulator (`floci/floci-az:0.8.0`), guest port 4577. */
40
- static azure(image?: string): FlociContainer;
41
- /** The GCP emulator (`floci/floci-gcp:0.4.0`), guest port 4588. */
42
- static gcp(image?: string): FlociContainer;
49
+ /**
50
+ * The AWS emulator, guest port 4566 — S3, DynamoDB, SQS, etc. Floats to
51
+ * `floci/floci:latest` (verified against `floci/floci:1.5.30`); only
52
+ * accepts images whose repository is `floci/floci`.
53
+ */
54
+ static aws(image?: string | DockerImageName): FlociContainer;
55
+ /**
56
+ * The Azure emulator, guest port 4577. Floats to
57
+ * `floci/floci-az:latest` (verified against `floci/floci-az:0.8.0`); only
58
+ * accepts images whose repository is `floci/floci-az`.
59
+ */
60
+ static azure(image?: string | DockerImageName): FlociContainer;
61
+ /**
62
+ * The GCP emulator, guest port 4588. Floats to
63
+ * `floci/floci-gcp:latest` (verified against `floci/floci-gcp:0.4.0`);
64
+ * only accepts images whose repository is `floci/floci-gcp`.
65
+ */
66
+ static gcp(image?: string | DockerImageName): FlociContainer;
43
67
  /** This variant's REST endpoint — the base URL for every emulated API call. */
44
68
  get endpointUrl(): string;
45
69
  }
@@ -1 +1 @@
1
- {"version":3,"file":"floci.d.ts","sourceRoot":"","sources":["../../src/modules/floci.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AAOhE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AACH,qBAAa,cAAe,SAAQ,gBAAgB;IAClD,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IAEnC,OAAO;IAMP,yFAAyF;IACzF,MAAM,CAAC,GAAG,CAAC,KAAK,SAAuB,GAAG,cAAc;IAIxD,oEAAoE;IACpE,MAAM,CAAC,KAAK,CAAC,KAAK,SAAyB,GAAG,cAAc;IAI5D,mEAAmE;IACnE,MAAM,CAAC,GAAG,CAAC,KAAK,SAA0B,GAAG,cAAc;IAI3D,+EAA+E;IAC/E,IAAI,WAAW,IAAI,MAAM,CAExB;CACF"}
1
+ {"version":3,"file":"floci.d.ts","sourceRoot":"","sources":["../../src/modules/floci.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AAEhE,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAY/D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA0CG;AACH,qBAAa,cAAe,SAAQ,gBAAgB;IAClD,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IAEnC,OAAO;IAMP;;;;OAIG;IACH,MAAM,CAAC,GAAG,CAAC,KAAK,GAAE,MAAM,GAAG,eAAmC,GAAG,cAAc;IAI/E;;;;OAIG;IACH,MAAM,CAAC,KAAK,CAAC,KAAK,GAAE,MAAM,GAAG,eAAqC,GAAG,cAAc;IAInF;;;;OAIG;IACH,MAAM,CAAC,GAAG,CAAC,KAAK,GAAE,MAAM,GAAG,eAAmC,GAAG,cAAc;IAI/E,+EAA+E;IAC/E,IAAI,WAAW,IAAI,MAAM,CAExB;CACF"}
@@ -1,8 +1,15 @@
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 AWS_PORT = 4566;
4
5
  const AZURE_PORT = 4577;
5
6
  const GCP_PORT = 4588;
7
+ const AWS_REPOSITORY = "floci/floci";
8
+ const AZURE_REPOSITORY = "floci/floci-az";
9
+ const GCP_REPOSITORY = "floci/floci-gcp";
10
+ const AWS_DEFAULT_IMAGE = "floci/floci:latest";
11
+ const AZURE_DEFAULT_IMAGE = "floci/floci-az:latest";
12
+ const GCP_DEFAULT_IMAGE = "floci/floci-gcp:latest";
6
13
  /**
7
14
  * A [floci.io](https://floci.io) cloud emulator — one native Quarkus image
8
15
  * per cloud provider, each speaking that provider's REST APIs against an
@@ -21,6 +28,17 @@ const GCP_PORT = 4588;
21
28
  * `floci/floci-az:0.8.0`, and `floci/floci-gcp:0.4.0`) — pinned as the one
22
29
  * wait path that works across all three; no log-wait fallback was needed.
23
30
  *
31
+ * ### No-arg factories float, each to its own repository's `latest`
32
+ *
33
+ * `aws()`, `azure()`, and `gcp()` each default to that provider's
34
+ * `floci/floci*:latest`, so the version tracks upstream rather than this
35
+ * library's release cycle — verified against `floci/floci:1.5.30`,
36
+ * `floci/floci-az:0.8.0`, and `floci/floci-gcp:0.4.0` respectively, the same
37
+ * boots every other fact on this page cites. Each factory checks its own
38
+ * repository (`floci/floci`, `floci/floci-az`, `floci/floci-gcp`) — an image
39
+ * meant for one variant is rejected by another's factory with
40
+ * `IncompatibleImageError` before any backend call.
41
+ *
24
42
  * ### No signing needed — verified against the AWS variant's S3 surface
25
43
  *
26
44
  * The AWS variant's S3-shaped REST endpoints accept unsigned requests with
@@ -42,17 +60,29 @@ export class FlociContainer extends GenericContainer {
42
60
  this.guestPort = port;
43
61
  this.withExposedPorts(port).waitingFor(Wait.forHttp("/health").forPort(port));
44
62
  }
45
- /** The AWS emulator (`floci/floci:1.5.30`), guest port 4566 — S3, DynamoDB, SQS, etc. */
46
- static aws(image = "floci/floci:1.5.30") {
47
- return new FlociContainer(image, AWS_PORT);
63
+ /**
64
+ * The AWS emulator, guest port 4566 — S3, DynamoDB, SQS, etc. Floats to
65
+ * `floci/floci:latest` (verified against `floci/floci:1.5.30`); only
66
+ * accepts images whose repository is `floci/floci`.
67
+ */
68
+ static aws(image = AWS_DEFAULT_IMAGE) {
69
+ return new FlociContainer(DockerImageName.requireCompatible(image, AWS_REPOSITORY), AWS_PORT);
48
70
  }
49
- /** The Azure emulator (`floci/floci-az:0.8.0`), guest port 4577. */
50
- static azure(image = "floci/floci-az:0.8.0") {
51
- return new FlociContainer(image, AZURE_PORT);
71
+ /**
72
+ * The Azure emulator, guest port 4577. Floats to
73
+ * `floci/floci-az:latest` (verified against `floci/floci-az:0.8.0`); only
74
+ * accepts images whose repository is `floci/floci-az`.
75
+ */
76
+ static azure(image = AZURE_DEFAULT_IMAGE) {
77
+ return new FlociContainer(DockerImageName.requireCompatible(image, AZURE_REPOSITORY), AZURE_PORT);
52
78
  }
53
- /** The GCP emulator (`floci/floci-gcp:0.4.0`), guest port 4588. */
54
- static gcp(image = "floci/floci-gcp:0.4.0") {
55
- return new FlociContainer(image, GCP_PORT);
79
+ /**
80
+ * The GCP emulator, guest port 4588. Floats to
81
+ * `floci/floci-gcp:latest` (verified against `floci/floci-gcp:0.4.0`);
82
+ * only accepts images whose repository is `floci/floci-gcp`.
83
+ */
84
+ static gcp(image = GCP_DEFAULT_IMAGE) {
85
+ return new FlociContainer(DockerImageName.requireCompatible(image, GCP_REPOSITORY), GCP_PORT);
56
86
  }
57
87
  /** This variant's REST endpoint — the base URL for every emulated API call. */
58
88
  get endpointUrl() {
@@ -1 +1 @@
1
- {"version":3,"file":"floci.js","sourceRoot":"","sources":["../../src/modules/floci.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,UAAU,GAAG,IAAI,CAAC;AACxB,MAAM,QAAQ,GAAG,IAAI,CAAC;AAEtB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AACH,MAAM,OAAO,cAAe,SAAQ,gBAAgB;IACjC,SAAS,CAAS;IAEnC,YAAoB,KAAa,EAAE,IAAY;QAC7C,KAAK,CAAC,KAAK,CAAC,CAAC;QACb,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;QACtB,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;IAChF,CAAC;IAED,yFAAyF;IACzF,MAAM,CAAC,GAAG,CAAC,KAAK,GAAG,oBAAoB;QACrC,OAAO,IAAI,cAAc,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;IAC7C,CAAC;IAED,oEAAoE;IACpE,MAAM,CAAC,KAAK,CAAC,KAAK,GAAG,sBAAsB;QACzC,OAAO,IAAI,cAAc,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;IAC/C,CAAC;IAED,mEAAmE;IACnE,MAAM,CAAC,GAAG,CAAC,KAAK,GAAG,uBAAuB;QACxC,OAAO,IAAI,cAAc,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;IAC7C,CAAC;IAED,+EAA+E;IAC/E,IAAI,WAAW;QACb,OAAO,UAAU,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC;IACrE,CAAC;CACF"}
1
+ {"version":3,"file":"floci.js","sourceRoot":"","sources":["../../src/modules/floci.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,QAAQ,GAAG,IAAI,CAAC;AACtB,MAAM,UAAU,GAAG,IAAI,CAAC;AACxB,MAAM,QAAQ,GAAG,IAAI,CAAC;AACtB,MAAM,cAAc,GAAG,aAAa,CAAC;AACrC,MAAM,gBAAgB,GAAG,gBAAgB,CAAC;AAC1C,MAAM,cAAc,GAAG,iBAAiB,CAAC;AACzC,MAAM,iBAAiB,GAAG,oBAAoB,CAAC;AAC/C,MAAM,mBAAmB,GAAG,uBAAuB,CAAC;AACpD,MAAM,iBAAiB,GAAG,wBAAwB,CAAC;AAEnD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA0CG;AACH,MAAM,OAAO,cAAe,SAAQ,gBAAgB;IACjC,SAAS,CAAS;IAEnC,YAAoB,KAAa,EAAE,IAAY;QAC7C,KAAK,CAAC,KAAK,CAAC,CAAC;QACb,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;QACtB,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;IAChF,CAAC;IAED;;;;OAIG;IACH,MAAM,CAAC,GAAG,CAAC,QAAkC,iBAAiB;QAC5D,OAAO,IAAI,cAAc,CAAC,eAAe,CAAC,iBAAiB,CAAC,KAAK,EAAE,cAAc,CAAC,EAAE,QAAQ,CAAC,CAAC;IAChG,CAAC;IAED;;;;OAIG;IACH,MAAM,CAAC,KAAK,CAAC,QAAkC,mBAAmB;QAChE,OAAO,IAAI,cAAc,CAAC,eAAe,CAAC,iBAAiB,CAAC,KAAK,EAAE,gBAAgB,CAAC,EAAE,UAAU,CAAC,CAAC;IACpG,CAAC;IAED;;;;OAIG;IACH,MAAM,CAAC,GAAG,CAAC,QAAkC,iBAAiB;QAC5D,OAAO,IAAI,cAAc,CAAC,eAAe,CAAC,iBAAiB,CAAC,KAAK,EAAE,cAAc,CAAC,EAAE,QAAQ,CAAC,CAAC;IAChG,CAAC;IAED,+EAA+E;IAC/E,IAAI,WAAW;QACb,OAAO,UAAU,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC;IACrE,CAAC;CACF"}
@@ -1,5 +1,5 @@
1
1
  /**
2
- * `rightsize/modules` — twenty-one preconfigured containers.
2
+ * `rightsize/modules` — twenty-three 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)
@@ -31,4 +31,6 @@ export { Neo4jContainer } from "./neo4j.js";
31
31
  export { FlociContainer } from "./floci.js";
32
32
  export { MinIOContainer } from "./minio.js";
33
33
  export { CassandraContainer } from "./cassandra.js";
34
+ export { ElasticsearchContainer } from "./elasticsearch.js";
35
+ export { QdrantContainer } from "./qdrant.js";
34
36
  //# 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,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
+ {"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;AACpD,OAAO,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAC;AAC5D,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC"}
@@ -1,5 +1,5 @@
1
1
  /**
2
- * `rightsize/modules` — twenty-one preconfigured containers.
2
+ * `rightsize/modules` — twenty-three 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)
@@ -31,4 +31,6 @@ export { Neo4jContainer } from "./neo4j.js";
31
31
  export { FlociContainer } from "./floci.js";
32
32
  export { MinIOContainer } from "./minio.js";
33
33
  export { CassandraContainer } from "./cassandra.js";
34
+ export { ElasticsearchContainer } from "./elasticsearch.js";
35
+ export { QdrantContainer } from "./qdrant.js";
34
36
  //# 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,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
+ {"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;AACpD,OAAO,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAC;AAC5D,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC"}
@@ -1,9 +1,16 @@
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
- /** A single-node Kafka broker (KRaft mode, no ZooKeeper). */
4
+ /**
5
+ * A single-node Kafka broker (KRaft mode, no ZooKeeper).
6
+ *
7
+ * No-arg construction floats to `apache/kafka:latest`, so the version tracks
8
+ * upstream rather than this library's release cycle (verified against
9
+ * `apache/kafka:4.0.0`, including the JVM heap override below).
10
+ */
4
11
  export declare class KafkaContainer extends GenericContainer {
5
- constructor(image?: string);
6
- static start(image?: string): Promise<KafkaContainer>;
12
+ constructor(image?: string | DockerImageName);
13
+ static start(image?: string | DockerImageName): Promise<KafkaContainer>;
7
14
  protected customizeSpec(spec: ContainerSpec, mapped: (guest: number) => number): ContainerSpec;
8
15
  /** The `PLAINTEXT://` bootstrap-servers address for the running broker. */
9
16
  get bootstrapServers(): string;
@@ -1 +1 @@
1
- {"version":3,"file":"kafka.d.ts","sourceRoot":"","sources":["../../src/modules/kafka.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AAEhE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAItD,6DAA6D;AAC7D,qBAAa,cAAe,SAAQ,gBAAgB;gBACtC,KAAK,SAAuB;WAoBlB,KAAK,CAAC,KAAK,SAAuB,GAAG,OAAO,CAAC,cAAc,CAAC;cAM/D,aAAa,CAAC,IAAI,EAAE,aAAa,EAAE,MAAM,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,GAAG,aAAa;IAOvG,2EAA2E;IAC3E,IAAI,gBAAgB,IAAI,MAAM,CAE7B;CACF"}
1
+ {"version":3,"file":"kafka.d.ts","sourceRoot":"","sources":["../../src/modules/kafka.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;AAMtD;;;;;;GAMG;AACH,qBAAa,cAAe,SAAQ,gBAAgB;gBACtC,KAAK,GAAE,MAAM,GAAG,eAA+B;WAoBrC,KAAK,CAAC,KAAK,GAAE,MAAM,GAAG,eAA+B,GAAG,OAAO,CAAC,cAAc,CAAC;cAMlF,aAAa,CAAC,IAAI,EAAE,aAAa,EAAE,MAAM,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,GAAG,aAAa;IAOvG,2EAA2E;IAC3E,IAAI,gBAAgB,IAAI,MAAM,CAE7B;CACF"}
@@ -1,10 +1,19 @@
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 = 9092;
4
- /** A single-node Kafka broker (KRaft mode, no ZooKeeper). */
5
+ const EXPECTED_REPOSITORY = "apache/kafka";
6
+ const DEFAULT_IMAGE = "apache/kafka:latest";
7
+ /**
8
+ * A single-node Kafka broker (KRaft mode, no ZooKeeper).
9
+ *
10
+ * No-arg construction floats to `apache/kafka:latest`, so the version tracks
11
+ * upstream rather than this library's release cycle (verified against
12
+ * `apache/kafka:4.0.0`, including the JVM heap override below).
13
+ */
5
14
  export class KafkaContainer extends GenericContainer {
6
- constructor(image = "apache/kafka:4.0.0") {
7
- super(image);
15
+ constructor(image = DEFAULT_IMAGE) {
16
+ super(DockerImageName.requireCompatible(image, EXPECTED_REPOSITORY));
8
17
  this.withExposedPorts(GUEST_PORT)
9
18
  .withEnv("KAFKA_NODE_ID", "1")
10
19
  .withEnv("KAFKA_PROCESS_ROLES", "broker,controller")
@@ -22,7 +31,7 @@ export class KafkaContainer extends GenericContainer {
22
31
  .withEnv("KAFKA_HEAP_OPTS", "-Xmx256M -Xms256M")
23
32
  .waitingFor(Wait.forLogMessage(".*Kafka Server started.*"));
24
33
  }
25
- static async start(image = "apache/kafka:4.0.0") {
34
+ static async start(image = DEFAULT_IMAGE) {
26
35
  return (await new KafkaContainer(image).start());
27
36
  }
28
37
  // Rewrites the advertised listener to carry the mapped host port; see
@@ -1 +1 @@
1
- {"version":3,"file":"kafka.js","sourceRoot":"","sources":["../../src/modules/kafka.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AAChE,OAAO,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAC;AAGvC,MAAM,UAAU,GAAG,IAAI,CAAC;AAExB,6DAA6D;AAC7D,MAAM,OAAO,cAAe,SAAQ,gBAAgB;IAClD,YAAY,KAAK,GAAG,oBAAoB;QACtC,KAAK,CAAC,KAAK,CAAC,CAAC;QACb,IAAI,CAAC,gBAAgB,CAAC,UAAU,CAAC;aAC9B,OAAO,CAAC,eAAe,EAAE,GAAG,CAAC;aAC7B,OAAO,CAAC,qBAAqB,EAAE,mBAAmB,CAAC;aACnD,OAAO,CAAC,gCAAgC,EAAE,kBAAkB,CAAC;aAC7D,OAAO,CAAC,iBAAiB,EAAE,oDAAoD,CAAC;aAChF,OAAO,CAAC,iCAAiC,EAAE,YAAY,CAAC;aACxD,OAAO,CAAC,sCAAsC,EAAE,0CAA0C,CAAC;aAC3F,OAAO,CAAC,wCAAwC,EAAE,GAAG,CAAC;aACtD,OAAO,CAAC,wCAAwC,EAAE,GAAG,CAAC;YACvD,mEAAmE;YACnE,oEAAoE;YACpE,+DAA+D;YAC/D,oEAAoE;YACpE,kCAAkC;aACjC,OAAO,CAAC,iBAAiB,EAAE,mBAAmB,CAAC;aAC/C,UAAU,CAAC,IAAI,CAAC,aAAa,CAAC,0BAA0B,CAAC,CAAC,CAAC;IAChE,CAAC;IAED,MAAM,CAAU,KAAK,CAAC,KAAK,CAAC,KAAK,GAAG,oBAAoB;QACtD,OAAO,CAAC,MAAM,IAAI,cAAc,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,CAAmB,CAAC;IACrE,CAAC;IAED,sEAAsE;IACtE,0EAA0E;IACvD,aAAa,CAAC,IAAmB,EAAE,MAAiC;QACrF,OAAO;YACL,GAAG,IAAI;YACP,GAAG,EAAE,CAAC,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,4BAA4B,EAAE,yBAAyB,MAAM,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;SAClG,CAAC;IACJ,CAAC;IAED,2EAA2E;IAC3E,IAAI,gBAAgB;QAClB,OAAO,eAAe,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,EAAE,CAAC;IACtE,CAAC;CACF"}
1
+ {"version":3,"file":"kafka.js","sourceRoot":"","sources":["../../src/modules/kafka.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,UAAU,GAAG,IAAI,CAAC;AACxB,MAAM,mBAAmB,GAAG,cAAc,CAAC;AAC3C,MAAM,aAAa,GAAG,qBAAqB,CAAC;AAE5C;;;;;;GAMG;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;aAC9B,OAAO,CAAC,eAAe,EAAE,GAAG,CAAC;aAC7B,OAAO,CAAC,qBAAqB,EAAE,mBAAmB,CAAC;aACnD,OAAO,CAAC,gCAAgC,EAAE,kBAAkB,CAAC;aAC7D,OAAO,CAAC,iBAAiB,EAAE,oDAAoD,CAAC;aAChF,OAAO,CAAC,iCAAiC,EAAE,YAAY,CAAC;aACxD,OAAO,CAAC,sCAAsC,EAAE,0CAA0C,CAAC;aAC3F,OAAO,CAAC,wCAAwC,EAAE,GAAG,CAAC;aACtD,OAAO,CAAC,wCAAwC,EAAE,GAAG,CAAC;YACvD,mEAAmE;YACnE,oEAAoE;YACpE,+DAA+D;YAC/D,oEAAoE;YACpE,kCAAkC;aACjC,OAAO,CAAC,iBAAiB,EAAE,mBAAmB,CAAC;aAC/C,UAAU,CAAC,IAAI,CAAC,aAAa,CAAC,0BAA0B,CAAC,CAAC,CAAC;IAChE,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,sEAAsE;IACtE,0EAA0E;IACvD,aAAa,CAAC,IAAmB,EAAE,MAAiC;QACrF,OAAO;YACL,GAAG,IAAI;YACP,GAAG,EAAE,CAAC,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,4BAA4B,EAAE,yBAAyB,MAAM,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;SAClG,CAAC;IACJ,CAAC;IAED,2EAA2E;IAC3E,IAAI,gBAAgB;QAClB,OAAO,eAAe,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,EAAE,CAAC;IACtE,CAAC;CACF"}
@@ -1,8 +1,16 @@
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 Keycloak container started with `start-dev` (an
4
5
  * in-memory/dev-mode boot — no external database wiring needed for tests).
5
6
  *
7
+ * No-arg construction floats to `quay.io/keycloak/keycloak:latest`, so the
8
+ * version tracks upstream rather than this library's release cycle
9
+ * (verified against `quay.io/keycloak/keycloak:26.0`, patch `26.0.8`
10
+ * specifically). The compatibility check expects the repository
11
+ * `keycloak/keycloak` — `quay.io` is a registry host, stripped by the same
12
+ * Docker-reference convention this library applies everywhere else.
13
+ *
6
14
  * Two pins here are version-sensitive and were verified against 26.0.8
7
15
  * specifically:
8
16
  *
@@ -24,8 +32,8 @@ import { GenericContainer } from "../core/generic-container.js";
24
32
  export declare class KeycloakContainer extends GenericContainer {
25
33
  private adminUsernameState;
26
34
  private adminPasswordState;
27
- constructor(image?: string);
28
- static start(image?: string): Promise<KeycloakContainer>;
35
+ constructor(image?: string | DockerImageName);
36
+ static start(image?: string | DockerImageName): Promise<KeycloakContainer>;
29
37
  /** Overrides `KC_BOOTSTRAP_ADMIN_USERNAME` (default `admin`). */
30
38
  withAdminUsername(username: string): this;
31
39
  /** Overrides `KC_BOOTSTRAP_ADMIN_PASSWORD` (default `admin`). */
@@ -1 +1 @@
1
- {"version":3,"file":"keycloak.d.ts","sourceRoot":"","sources":["../../src/modules/keycloak.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AAOhE;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,qBAAa,iBAAkB,SAAQ,gBAAgB;IACrD,OAAO,CAAC,kBAAkB,CAAW;IACrC,OAAO,CAAC,kBAAkB,CAAW;gBAEzB,KAAK,SAAmC;WAW9B,KAAK,CAAC,KAAK,SAAmC,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAIjG,iEAAiE;IACjE,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;IAKzC,iEAAiE;IACjE,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;IAKzC,iEAAiE;IACjE,IAAI,aAAa,IAAI,MAAM,CAE1B;IAED,iEAAiE;IACjE,IAAI,aAAa,IAAI,MAAM,CAE1B;IAED,4DAA4D;IAC5D,IAAI,aAAa,IAAI,MAAM,CAE1B;CACF"}
1
+ {"version":3,"file":"keycloak.d.ts","sourceRoot":"","sources":["../../src/modules/keycloak.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AAEhE,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAQ/D;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,qBAAa,iBAAkB,SAAQ,gBAAgB;IACrD,OAAO,CAAC,kBAAkB,CAAW;IACrC,OAAO,CAAC,kBAAkB,CAAW;gBAEzB,KAAK,GAAE,MAAM,GAAG,eAA+B;WAWrC,KAAK,CAAC,KAAK,GAAE,MAAM,GAAG,eAA+B,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAIxG,iEAAiE;IACjE,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;IAKzC,iEAAiE;IACjE,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;IAKzC,iEAAiE;IACjE,IAAI,aAAa,IAAI,MAAM,CAE1B;IAED,iEAAiE;IACjE,IAAI,aAAa,IAAI,MAAM,CAE1B;IAED,4DAA4D;IAC5D,IAAI,aAAa,IAAI,MAAM,CAE1B;CACF"}
@@ -1,12 +1,22 @@
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 HTTP_PORT = 8080;
4
5
  const MANAGEMENT_PORT = 9000;
5
6
  const STARTUP_TIMEOUT_MS = 180_000;
7
+ const EXPECTED_REPOSITORY = "keycloak/keycloak";
8
+ const DEFAULT_IMAGE = "quay.io/keycloak/keycloak:latest";
6
9
  /**
7
10
  * A single-node Keycloak container started with `start-dev` (an
8
11
  * in-memory/dev-mode boot — no external database wiring needed for tests).
9
12
  *
13
+ * No-arg construction floats to `quay.io/keycloak/keycloak:latest`, so the
14
+ * version tracks upstream rather than this library's release cycle
15
+ * (verified against `quay.io/keycloak/keycloak:26.0`, patch `26.0.8`
16
+ * specifically). The compatibility check expects the repository
17
+ * `keycloak/keycloak` — `quay.io` is a registry host, stripped by the same
18
+ * Docker-reference convention this library applies everywhere else.
19
+ *
10
20
  * Two pins here are version-sensitive and were verified against 26.0.8
11
21
  * specifically:
12
22
  *
@@ -28,8 +38,8 @@ const STARTUP_TIMEOUT_MS = 180_000;
28
38
  export class KeycloakContainer extends GenericContainer {
29
39
  adminUsernameState = "admin";
30
40
  adminPasswordState = "admin";
31
- constructor(image = "quay.io/keycloak/keycloak:26.0") {
32
- super(image);
41
+ constructor(image = DEFAULT_IMAGE) {
42
+ super(DockerImageName.requireCompatible(image, EXPECTED_REPOSITORY));
33
43
  this.withExposedPorts(HTTP_PORT, MANAGEMENT_PORT)
34
44
  .withCommand("start-dev")
35
45
  .withEnv("KC_BOOTSTRAP_ADMIN_USERNAME", this.adminUsernameState)
@@ -38,7 +48,7 @@ export class KeycloakContainer extends GenericContainer {
38
48
  .withMemoryLimit(1024)
39
49
  .waitingFor(Wait.forHttp("/health/ready").forPort(MANAGEMENT_PORT).withStartupTimeout(STARTUP_TIMEOUT_MS));
40
50
  }
41
- static async start(image = "quay.io/keycloak/keycloak:26.0") {
51
+ static async start(image = DEFAULT_IMAGE) {
42
52
  return (await new KeycloakContainer(image).start());
43
53
  }
44
54
  /** Overrides `KC_BOOTSTRAP_ADMIN_USERNAME` (default `admin`). */
@@ -1 +1 @@
1
- {"version":3,"file":"keycloak.js","sourceRoot":"","sources":["../../src/modules/keycloak.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,IAAI,CAAC;AAC7B,MAAM,kBAAkB,GAAG,OAAO,CAAC;AAEnC;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,MAAM,OAAO,iBAAkB,SAAQ,gBAAgB;IAC7C,kBAAkB,GAAG,OAAO,CAAC;IAC7B,kBAAkB,GAAG,OAAO,CAAC;IAErC,YAAY,KAAK,GAAG,gCAAgC;QAClD,KAAK,CAAC,KAAK,CAAC,CAAC;QACb,IAAI,CAAC,gBAAgB,CAAC,SAAS,EAAE,eAAe,CAAC;aAC9C,WAAW,CAAC,WAAW,CAAC;aACxB,OAAO,CAAC,6BAA6B,EAAE,IAAI,CAAC,kBAAkB,CAAC;aAC/D,OAAO,CAAC,6BAA6B,EAAE,IAAI,CAAC,kBAAkB,CAAC;aAC/D,OAAO,CAAC,mBAAmB,EAAE,MAAM,CAAC;aACpC,eAAe,CAAC,IAAI,CAAC;aACrB,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC,kBAAkB,CAAC,kBAAkB,CAAC,CAAC,CAAC;IAC/G,CAAC;IAED,MAAM,CAAU,KAAK,CAAC,KAAK,CAAC,KAAK,GAAG,gCAAgC;QAClE,OAAO,CAAC,MAAM,IAAI,iBAAiB,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,CAAsB,CAAC;IAC3E,CAAC;IAED,iEAAiE;IACjE,iBAAiB,CAAC,QAAgB;QAChC,IAAI,CAAC,kBAAkB,GAAG,QAAQ,CAAC;QACnC,OAAO,IAAI,CAAC,OAAO,CAAC,6BAA6B,EAAE,QAAQ,CAAC,CAAC;IAC/D,CAAC;IAED,iEAAiE;IACjE,iBAAiB,CAAC,QAAgB;QAChC,IAAI,CAAC,kBAAkB,GAAG,QAAQ,CAAC;QACnC,OAAO,IAAI,CAAC,OAAO,CAAC,6BAA6B,EAAE,QAAQ,CAAC,CAAC;IAC/D,CAAC;IAED,iEAAiE;IACjE,IAAI,aAAa;QACf,OAAO,IAAI,CAAC,kBAAkB,CAAC;IACjC,CAAC;IAED,iEAAiE;IACjE,IAAI,aAAa;QACf,OAAO,IAAI,CAAC,kBAAkB,CAAC;IACjC,CAAC;IAED,4DAA4D;IAC5D,IAAI,aAAa;QACf,OAAO,UAAU,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,EAAE,CAAC;IAChE,CAAC;CACF"}
1
+ {"version":3,"file":"keycloak.js","sourceRoot":"","sources":["../../src/modules/keycloak.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,IAAI,CAAC;AAC7B,MAAM,kBAAkB,GAAG,OAAO,CAAC;AACnC,MAAM,mBAAmB,GAAG,mBAAmB,CAAC;AAChD,MAAM,aAAa,GAAG,kCAAkC,CAAC;AAEzD;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,MAAM,OAAO,iBAAkB,SAAQ,gBAAgB;IAC7C,kBAAkB,GAAG,OAAO,CAAC;IAC7B,kBAAkB,GAAG,OAAO,CAAC;IAErC,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;aAC9C,WAAW,CAAC,WAAW,CAAC;aACxB,OAAO,CAAC,6BAA6B,EAAE,IAAI,CAAC,kBAAkB,CAAC;aAC/D,OAAO,CAAC,6BAA6B,EAAE,IAAI,CAAC,kBAAkB,CAAC;aAC/D,OAAO,CAAC,mBAAmB,EAAE,MAAM,CAAC;aACpC,eAAe,CAAC,IAAI,CAAC;aACrB,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC,kBAAkB,CAAC,kBAAkB,CAAC,CAAC,CAAC;IAC/G,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,iEAAiE;IACjE,iBAAiB,CAAC,QAAgB;QAChC,IAAI,CAAC,kBAAkB,GAAG,QAAQ,CAAC;QACnC,OAAO,IAAI,CAAC,OAAO,CAAC,6BAA6B,EAAE,QAAQ,CAAC,CAAC;IAC/D,CAAC;IAED,iEAAiE;IACjE,iBAAiB,CAAC,QAAgB;QAChC,IAAI,CAAC,kBAAkB,GAAG,QAAQ,CAAC;QACnC,OAAO,IAAI,CAAC,OAAO,CAAC,6BAA6B,EAAE,QAAQ,CAAC,CAAC;IAC/D,CAAC;IAED,iEAAiE;IACjE,IAAI,aAAa;QACf,OAAO,IAAI,CAAC,kBAAkB,CAAC;IACjC,CAAC;IAED,iEAAiE;IACjE,IAAI,aAAa;QACf,OAAO,IAAI,CAAC,kBAAkB,CAAC;IACjC,CAAC;IAED,4DAA4D;IAC5D,IAAI,aAAa;QACf,OAAO,UAAU,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,EAAE,CAAC;IAChE,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 MariaDB container. Defaults to a `test`/`test`/`test`
4
5
  * user/password/database trio (plus `MARIADB_ROOT_PASSWORD=test`), mirroring
@@ -31,13 +32,18 @@ import { GenericContainer } from "../core/generic-container.js";
31
32
  * `.*port: 3306.*mariadb\.org binary distribution.*` with `times=1` matches
32
33
  * only the last line above — the temp server's equivalent line has `port: 0`
33
34
  * instead of `port: 3306`, so it never satisfies the pattern.
35
+ *
36
+ * No-arg construction floats to `mariadb:latest`, so the version tracks
37
+ * upstream rather than this library's release cycle (verified against
38
+ * `mariadb:11.4`, including the readiness regex above and the log excerpt it
39
+ * was captured from).
34
40
  */
35
41
  export declare class MariaDBContainer extends GenericContainer {
36
42
  private usernameState;
37
43
  private passwordState;
38
44
  private databaseState;
39
- constructor(image?: string);
40
- static start(image?: string): Promise<MariaDBContainer>;
45
+ constructor(image?: string | DockerImageName);
46
+ static start(image?: string | DockerImageName): Promise<MariaDBContainer>;
41
47
  /** Overrides `MARIADB_USER` (default `test`). */
42
48
  withUsername(username: string): this;
43
49
  /** Overrides `MARIADB_PASSWORD` (default `test`). */
@@ -1 +1 @@
1
- {"version":3,"file":"mariadb.d.ts","sourceRoot":"","sources":["../../src/modules/mariadb.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AAKhE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AACH,qBAAa,gBAAiB,SAAQ,gBAAgB;IACpD,OAAO,CAAC,aAAa,CAAU;IAC/B,OAAO,CAAC,aAAa,CAAU;IAC/B,OAAO,CAAC,aAAa,CAAU;gBAEnB,KAAK,SAAiB;WAcZ,KAAK,CAAC,KAAK,SAAiB,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAI9E,iDAAiD;IACjD,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;IAKpC,qDAAqD;IACrD,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;IAKpC,qDAAqD;IACrD,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;IAKpC,qDAAqD;IACrD,IAAI,QAAQ,IAAI,MAAM,CAErB;IAED,yDAAyD;IACzD,IAAI,QAAQ,IAAI,MAAM,CAErB;IAED,qDAAqD;IACrD,IAAI,YAAY,IAAI,MAAM,CAEzB;IAED,0HAA0H;IAC1H,IAAI,gBAAgB,IAAI,MAAM,CAE7B;CACF"}
1
+ {"version":3,"file":"mariadb.d.ts","sourceRoot":"","sources":["../../src/modules/mariadb.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AAEhE,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAM/D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqCG;AACH,qBAAa,gBAAiB,SAAQ,gBAAgB;IACpD,OAAO,CAAC,aAAa,CAAU;IAC/B,OAAO,CAAC,aAAa,CAAU;IAC/B,OAAO,CAAC,aAAa,CAAU;gBAEnB,KAAK,GAAE,MAAM,GAAG,eAA+B;WAcrC,KAAK,CAAC,KAAK,GAAE,MAAM,GAAG,eAA+B,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAIvG,iDAAiD;IACjD,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;IAKpC,qDAAqD;IACrD,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;IAKpC,qDAAqD;IACrD,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;IAKpC,qDAAqD;IACrD,IAAI,QAAQ,IAAI,MAAM,CAErB;IAED,yDAAyD;IACzD,IAAI,QAAQ,IAAI,MAAM,CAErB;IAED,qDAAqD;IACrD,IAAI,YAAY,IAAI,MAAM,CAEzB;IAED,0HAA0H;IAC1H,IAAI,gBAAgB,IAAI,MAAM,CAE7B;CACF"}