rightsize 0.4.0 → 0.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (118) hide show
  1. package/README.md +16 -3
  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 +10 -0
  7. package/dist/backend-msb/backend.d.ts.map +1 -1
  8. package/dist/backend-msb/backend.js +26 -1
  9. package/dist/backend-msb/backend.js.map +1 -1
  10. package/dist/core/docker-image-name.d.ts +58 -0
  11. package/dist/core/docker-image-name.d.ts.map +1 -0
  12. package/dist/core/docker-image-name.js +127 -0
  13. package/dist/core/docker-image-name.js.map +1 -0
  14. package/dist/core/errors.d.ts +21 -0
  15. package/dist/core/errors.d.ts.map +1 -1
  16. package/dist/core/errors.js +26 -0
  17. package/dist/core/errors.js.map +1 -1
  18. package/dist/index.d.ts +8 -5
  19. package/dist/index.d.ts.map +1 -1
  20. package/dist/index.js +8 -5
  21. package/dist/index.js.map +1 -1
  22. package/dist/modules/arango.d.ts +11 -3
  23. package/dist/modules/arango.d.ts.map +1 -1
  24. package/dist/modules/arango.js +14 -4
  25. package/dist/modules/arango.js.map +1 -1
  26. package/dist/modules/cassandra.d.ts +57 -0
  27. package/dist/modules/cassandra.d.ts.map +1 -0
  28. package/dist/modules/cassandra.js +79 -0
  29. package/dist/modules/cassandra.js.map +1 -0
  30. package/dist/modules/clickhouse.d.ts +8 -2
  31. package/dist/modules/clickhouse.d.ts.map +1 -1
  32. package/dist/modules/clickhouse.js +11 -3
  33. package/dist/modules/clickhouse.js.map +1 -1
  34. package/dist/modules/elasticsearch.d.ts +49 -0
  35. package/dist/modules/elasticsearch.d.ts.map +1 -0
  36. package/dist/modules/elasticsearch.js +66 -0
  37. package/dist/modules/elasticsearch.js.map +1 -0
  38. package/dist/modules/flink.d.ts +8 -2
  39. package/dist/modules/flink.d.ts.map +1 -1
  40. package/dist/modules/flink.js +13 -4
  41. package/dist/modules/flink.js.map +1 -1
  42. package/dist/modules/floci.d.ts +30 -6
  43. package/dist/modules/floci.d.ts.map +1 -1
  44. package/dist/modules/floci.js +39 -9
  45. package/dist/modules/floci.js.map +1 -1
  46. package/dist/modules/index.d.ts +6 -1
  47. package/dist/modules/index.d.ts.map +1 -1
  48. package/dist/modules/index.js +6 -1
  49. package/dist/modules/index.js.map +1 -1
  50. package/dist/modules/kafka.d.ts +10 -3
  51. package/dist/modules/kafka.d.ts.map +1 -1
  52. package/dist/modules/kafka.js +13 -4
  53. package/dist/modules/kafka.js.map +1 -1
  54. package/dist/modules/keycloak.d.ts +10 -2
  55. package/dist/modules/keycloak.d.ts.map +1 -1
  56. package/dist/modules/keycloak.js +13 -3
  57. package/dist/modules/keycloak.js.map +1 -1
  58. package/dist/modules/mariadb.d.ts +8 -2
  59. package/dist/modules/mariadb.d.ts.map +1 -1
  60. package/dist/modules/mariadb.js +11 -3
  61. package/dist/modules/mariadb.js.map +1 -1
  62. package/dist/modules/memcached.d.ts +12 -3
  63. package/dist/modules/memcached.d.ts.map +1 -1
  64. package/dist/modules/memcached.js +15 -4
  65. package/dist/modules/memcached.js.map +1 -1
  66. package/dist/modules/minio.d.ts +40 -0
  67. package/dist/modules/minio.d.ts.map +1 -0
  68. package/dist/modules/minio.js +71 -0
  69. package/dist/modules/minio.js.map +1 -0
  70. package/dist/modules/mongodb.d.ts +7 -2
  71. package/dist/modules/mongodb.d.ts.map +1 -1
  72. package/dist/modules/mongodb.js +16 -4
  73. package/dist/modules/mongodb.js.map +1 -1
  74. package/dist/modules/mysql.d.ts +8 -2
  75. package/dist/modules/mysql.d.ts.map +1 -1
  76. package/dist/modules/mysql.js +11 -3
  77. package/dist/modules/mysql.js.map +1 -1
  78. package/dist/modules/neo4j.d.ts +7 -2
  79. package/dist/modules/neo4j.d.ts.map +1 -1
  80. package/dist/modules/neo4j.js +10 -3
  81. package/dist/modules/neo4j.js.map +1 -1
  82. package/dist/modules/pinot.d.ts +7 -2
  83. package/dist/modules/pinot.d.ts.map +1 -1
  84. package/dist/modules/pinot.js +10 -3
  85. package/dist/modules/pinot.js.map +1 -1
  86. package/dist/modules/postgres.d.ts +11 -2
  87. package/dist/modules/postgres.d.ts.map +1 -1
  88. package/dist/modules/postgres.js +14 -3
  89. package/dist/modules/postgres.js.map +1 -1
  90. package/dist/modules/qdrant.d.ts +26 -0
  91. package/dist/modules/qdrant.d.ts.map +1 -0
  92. package/dist/modules/qdrant.js +38 -0
  93. package/dist/modules/qdrant.js.map +1 -0
  94. package/dist/modules/rabbitmq.d.ts +11 -2
  95. package/dist/modules/rabbitmq.d.ts.map +1 -1
  96. package/dist/modules/rabbitmq.js +14 -3
  97. package/dist/modules/rabbitmq.js.map +1 -1
  98. package/dist/modules/redis.d.ts +8 -2
  99. package/dist/modules/redis.d.ts.map +1 -1
  100. package/dist/modules/redis.js +11 -3
  101. package/dist/modules/redis.js.map +1 -1
  102. package/dist/modules/redpanda.d.ts +15 -6
  103. package/dist/modules/redpanda.d.ts.map +1 -1
  104. package/dist/modules/redpanda.js +18 -7
  105. package/dist/modules/redpanda.js.map +1 -1
  106. package/dist/modules/spring-cloud-config.d.ts +7 -2
  107. package/dist/modules/spring-cloud-config.d.ts.map +1 -1
  108. package/dist/modules/spring-cloud-config.js +10 -3
  109. package/dist/modules/spring-cloud-config.js.map +1 -1
  110. package/dist/modules/valkey.d.ts +28 -0
  111. package/dist/modules/valkey.d.ts.map +1 -0
  112. package/dist/modules/valkey.js +41 -0
  113. package/dist/modules/valkey.js.map +1 -0
  114. package/dist/modules/wiremock.d.ts +7 -2
  115. package/dist/modules/wiremock.d.ts.map +1 -1
  116. package/dist/modules/wiremock.js +10 -3
  117. package/dist/modules/wiremock.js.map +1 -1
  118. package/package.json +1 -1
@@ -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` — eighteen 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)
@@ -11,6 +11,7 @@
11
11
  * @packageDocumentation
12
12
  */
13
13
  export { RedisContainer } from "./redis.js";
14
+ export { ValkeyContainer } from "./valkey.js";
14
15
  export { MemcachedContainer, MemcachedRespondsStrategy } from "./memcached.js";
15
16
  export { ArangoContainer } from "./arango.js";
16
17
  export { MongoDBContainer } from "./mongodb.js";
@@ -28,4 +29,8 @@ export { KeycloakContainer } from "./keycloak.js";
28
29
  export { ClickHouseContainer } from "./clickhouse.js";
29
30
  export { Neo4jContainer } from "./neo4j.js";
30
31
  export { FlociContainer } from "./floci.js";
32
+ export { MinIOContainer } from "./minio.js";
33
+ export { CassandraContainer } from "./cassandra.js";
34
+ export { ElasticsearchContainer } from "./elasticsearch.js";
35
+ export { QdrantContainer } from "./qdrant.js";
31
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,kBAAkB,EAAE,yBAAyB,EAAE,MAAM,gBAAgB,CAAC;AAC/E,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAChD,OAAO,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAClD,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAC5C,OAAO,EAAE,0BAA0B,EAAE,MAAM,0BAA0B,CAAC;AACtE,OAAO,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAClD,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAC5C,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAC5C,OAAO,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAClD,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAChD,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAC5C,OAAO,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAClD,OAAO,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAClD,OAAO,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AACtD,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAC5C,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/modules/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AACH,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAC5C,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,EAAE,kBAAkB,EAAE,yBAAyB,EAAE,MAAM,gBAAgB,CAAC;AAC/E,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAChD,OAAO,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAClD,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAC5C,OAAO,EAAE,0BAA0B,EAAE,MAAM,0BAA0B,CAAC;AACtE,OAAO,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAClD,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAC5C,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAC5C,OAAO,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAClD,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAChD,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAC5C,OAAO,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAClD,OAAO,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAClD,OAAO,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AACtD,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAC5C,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAC5C,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAC5C,OAAO,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;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` — eighteen 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)
@@ -11,6 +11,7 @@
11
11
  * @packageDocumentation
12
12
  */
13
13
  export { RedisContainer } from "./redis.js";
14
+ export { ValkeyContainer } from "./valkey.js";
14
15
  export { MemcachedContainer, MemcachedRespondsStrategy } from "./memcached.js";
15
16
  export { ArangoContainer } from "./arango.js";
16
17
  export { MongoDBContainer } from "./mongodb.js";
@@ -28,4 +29,8 @@ export { KeycloakContainer } from "./keycloak.js";
28
29
  export { ClickHouseContainer } from "./clickhouse.js";
29
30
  export { Neo4jContainer } from "./neo4j.js";
30
31
  export { FlociContainer } from "./floci.js";
32
+ export { MinIOContainer } from "./minio.js";
33
+ export { CassandraContainer } from "./cassandra.js";
34
+ export { ElasticsearchContainer } from "./elasticsearch.js";
35
+ export { QdrantContainer } from "./qdrant.js";
31
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,kBAAkB,EAAE,yBAAyB,EAAE,MAAM,gBAAgB,CAAC;AAC/E,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAChD,OAAO,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAClD,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAC5C,OAAO,EAAE,0BAA0B,EAAE,MAAM,0BAA0B,CAAC;AACtE,OAAO,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAClD,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAC5C,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAC5C,OAAO,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAClD,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAChD,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAC5C,OAAO,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAClD,OAAO,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAClD,OAAO,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AACtD,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAC5C,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/modules/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AACH,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAC5C,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,EAAE,kBAAkB,EAAE,yBAAyB,EAAE,MAAM,gBAAgB,CAAC;AAC/E,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAChD,OAAO,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAClD,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAC5C,OAAO,EAAE,0BAA0B,EAAE,MAAM,0BAA0B,CAAC;AACtE,OAAO,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAClD,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAC5C,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAC5C,OAAO,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAClD,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAChD,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAC5C,OAAO,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAClD,OAAO,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAClD,OAAO,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AACtD,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAC5C,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAC5C,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAC5C,OAAO,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;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"}
@@ -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 = 3306;
5
+ const EXPECTED_REPOSITORY = "mariadb";
6
+ const DEFAULT_IMAGE = "mariadb:latest";
4
7
  /**
5
8
  * A single-node MariaDB container. Defaults to a `test`/`test`/`test`
6
9
  * user/password/database trio (plus `MARIADB_ROOT_PASSWORD=test`), mirroring
@@ -33,13 +36,18 @@ const GUEST_PORT = 3306;
33
36
  * `.*port: 3306.*mariadb\.org binary distribution.*` with `times=1` matches
34
37
  * only the last line above — the temp server's equivalent line has `port: 0`
35
38
  * instead of `port: 3306`, so it never satisfies the pattern.
39
+ *
40
+ * No-arg construction floats to `mariadb:latest`, so the version tracks
41
+ * upstream rather than this library's release cycle (verified against
42
+ * `mariadb:11.4`, including the readiness regex above and the log excerpt it
43
+ * was captured from).
36
44
  */
37
45
  export class MariaDBContainer extends GenericContainer {
38
46
  usernameState = "test";
39
47
  passwordState = "test";
40
48
  databaseState = "test";
41
- constructor(image = "mariadb:11.4") {
42
- super(image);
49
+ constructor(image = DEFAULT_IMAGE) {
50
+ super(DockerImageName.requireCompatible(image, EXPECTED_REPOSITORY));
43
51
  this.withExposedPorts(GUEST_PORT)
44
52
  .withEnv("MARIADB_USER", this.usernameState)
45
53
  .withEnv("MARIADB_PASSWORD", this.passwordState)
@@ -51,7 +59,7 @@ export class MariaDBContainer extends GenericContainer {
51
59
  // No withMemoryLimit override, matching the MySQL precedent: MariaDB's
52
60
  // InnoDB default footprint fits msb's default microVM RAM comfortably.
53
61
  }
54
- static async start(image = "mariadb:11.4") {
62
+ static async start(image = DEFAULT_IMAGE) {
55
63
  return (await new MariaDBContainer(image).start());
56
64
  }
57
65
  /** Overrides `MARIADB_USER` (default `test`). */
@@ -1 +1 @@
1
- {"version":3,"file":"mariadb.js","sourceRoot":"","sources":["../../src/modules/mariadb.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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AACH,MAAM,OAAO,gBAAiB,SAAQ,gBAAgB;IAC5C,aAAa,GAAG,MAAM,CAAC;IACvB,aAAa,GAAG,MAAM,CAAC;IACvB,aAAa,GAAG,MAAM,CAAC;IAE/B,YAAY,KAAK,GAAG,cAAc;QAChC,KAAK,CAAC,KAAK,CAAC,CAAC;QACb,IAAI,CAAC,gBAAgB,CAAC,UAAU,CAAC;aAC9B,OAAO,CAAC,cAAc,EAAE,IAAI,CAAC,aAAa,CAAC;aAC3C,OAAO,CAAC,kBAAkB,EAAE,IAAI,CAAC,aAAa,CAAC;aAC/C,OAAO,CAAC,kBAAkB,EAAE,IAAI,CAAC,aAAa,CAAC;aAC/C,OAAO,CAAC,uBAAuB,EAAE,MAAM,CAAC;YACzC,gEAAgE;YAChE,yBAAyB;aACxB,UAAU,CAAC,IAAI,CAAC,aAAa,CAAC,mDAAmD,EAAE,CAAC,CAAC,CAAC,CAAC;QAC1F,uEAAuE;QACvE,uEAAuE;IACzE,CAAC;IAED,MAAM,CAAU,KAAK,CAAC,KAAK,CAAC,KAAK,GAAG,cAAc;QAChD,OAAO,CAAC,MAAM,IAAI,gBAAgB,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,CAAqB,CAAC;IACzE,CAAC;IAED,iDAAiD;IACjD,YAAY,CAAC,QAAgB;QAC3B,IAAI,CAAC,aAAa,GAAG,QAAQ,CAAC;QAC9B,OAAO,IAAI,CAAC,OAAO,CAAC,cAAc,EAAE,QAAQ,CAAC,CAAC;IAChD,CAAC;IAED,qDAAqD;IACrD,YAAY,CAAC,QAAgB;QAC3B,IAAI,CAAC,aAAa,GAAG,QAAQ,CAAC;QAC9B,OAAO,IAAI,CAAC,OAAO,CAAC,kBAAkB,EAAE,QAAQ,CAAC,CAAC;IACpD,CAAC;IAED,qDAAqD;IACrD,YAAY,CAAC,QAAgB;QAC3B,IAAI,CAAC,aAAa,GAAG,QAAQ,CAAC;QAC9B,OAAO,IAAI,CAAC,OAAO,CAAC,kBAAkB,EAAE,QAAQ,CAAC,CAAC;IACpD,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,0HAA0H;IAC1H,IAAI,gBAAgB;QAClB,OAAO,WAAW,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;IACpI,CAAC;CACF"}
1
+ {"version":3,"file":"mariadb.js","sourceRoot":"","sources":["../../src/modules/mariadb.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,SAAS,CAAC;AACtC,MAAM,aAAa,GAAG,gBAAgB,CAAC;AAEvC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqCG;AACH,MAAM,OAAO,gBAAiB,SAAQ,gBAAgB;IAC5C,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,cAAc,EAAE,IAAI,CAAC,aAAa,CAAC;aAC3C,OAAO,CAAC,kBAAkB,EAAE,IAAI,CAAC,aAAa,CAAC;aAC/C,OAAO,CAAC,kBAAkB,EAAE,IAAI,CAAC,aAAa,CAAC;aAC/C,OAAO,CAAC,uBAAuB,EAAE,MAAM,CAAC;YACzC,gEAAgE;YAChE,yBAAyB;aACxB,UAAU,CAAC,IAAI,CAAC,aAAa,CAAC,mDAAmD,EAAE,CAAC,CAAC,CAAC,CAAC;QAC1F,uEAAuE;QACvE,uEAAuE;IACzE,CAAC;IAED,MAAM,CAAU,KAAK,CAAC,KAAK,CAAC,QAAkC,aAAa;QACzE,OAAO,CAAC,MAAM,IAAI,gBAAgB,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,CAAqB,CAAC;IACzE,CAAC;IAED,iDAAiD;IACjD,YAAY,CAAC,QAAgB;QAC3B,IAAI,CAAC,aAAa,GAAG,QAAQ,CAAC;QAC9B,OAAO,IAAI,CAAC,OAAO,CAAC,cAAc,EAAE,QAAQ,CAAC,CAAC;IAChD,CAAC;IAED,qDAAqD;IACrD,YAAY,CAAC,QAAgB;QAC3B,IAAI,CAAC,aAAa,GAAG,QAAQ,CAAC;QAC9B,OAAO,IAAI,CAAC,OAAO,CAAC,kBAAkB,EAAE,QAAQ,CAAC,CAAC;IACpD,CAAC;IAED,qDAAqD;IACrD,YAAY,CAAC,QAAgB;QAC3B,IAAI,CAAC,aAAa,GAAG,QAAQ,CAAC;QAC9B,OAAO,IAAI,CAAC,OAAO,CAAC,kBAAkB,EAAE,QAAQ,CAAC,CAAC;IACpD,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,0HAA0H;IAC1H,IAAI,gBAAgB;QAClB,OAAO,WAAW,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;IACpI,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
  import type { WaitStrategy, WaitTarget } from "../core/wait.js";
3
4
  /**
4
5
  * Speaks the memcached text protocol instead of trusting a bare TCP
@@ -14,10 +15,18 @@ export declare class MemcachedRespondsStrategy implements WaitStrategy {
14
15
  private probe;
15
16
  waitUntilReady(target: WaitTarget): Promise<void>;
16
17
  }
17
- /** A single-node Memcached container, ready-checked with a protocol-level `version` probe. */
18
+ /**
19
+ * A single-node Memcached container, ready-checked with a protocol-level
20
+ * `version` probe.
21
+ *
22
+ * No-arg construction floats to `memcached:latest`, so the version tracks
23
+ * upstream rather than this library's release cycle (verified against
24
+ * `memcached:1.6-alpine`). `latest` is Debian-based rather than Alpine —
25
+ * functionally equivalent, larger to pull.
26
+ */
18
27
  export declare class MemcachedContainer extends GenericContainer {
19
- constructor(image?: string);
20
- static start(image?: string): Promise<MemcachedContainer>;
28
+ constructor(image?: string | DockerImageName);
29
+ static start(image?: string | DockerImageName): Promise<MemcachedContainer>;
21
30
  /** The `host:port` address of the running container. */
22
31
  get address(): string;
23
32
  }
@@ -1 +1 @@
1
- {"version":3,"file":"memcached.d.ts","sourceRoot":"","sources":["../../src/modules/memcached.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AAEhE,OAAO,KAAK,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAYhE;;;;;;;GAOG;AACH,qBAAa,yBAA0B,YAAW,YAAY;IAC5D,OAAO,CAAC,SAAS,CAAsB;IAEvC,kBAAkB,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI;IAKpC,OAAO,CAAC,KAAK;IA0CP,cAAc,CAAC,MAAM,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;CA0BxD;AAED,8FAA8F;AAC9F,qBAAa,kBAAmB,SAAQ,gBAAgB;gBAC1C,KAAK,SAAyB;WAKpB,KAAK,CAAC,KAAK,SAAyB,GAAG,OAAO,CAAC,kBAAkB,CAAC;IAIxF,wDAAwD;IACxD,IAAI,OAAO,IAAI,MAAM,CAEpB;CACF"}
1
+ {"version":3,"file":"memcached.d.ts","sourceRoot":"","sources":["../../src/modules/memcached.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AAEhE,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAC/D,OAAO,KAAK,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAchE;;;;;;;GAOG;AACH,qBAAa,yBAA0B,YAAW,YAAY;IAC5D,OAAO,CAAC,SAAS,CAAsB;IAEvC,kBAAkB,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI;IAKpC,OAAO,CAAC,KAAK;IA0CP,cAAc,CAAC,MAAM,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;CA0BxD;AAED;;;;;;;;GAQG;AACH,qBAAa,kBAAmB,SAAQ,gBAAgB;gBAC1C,KAAK,GAAE,MAAM,GAAG,eAA+B;WAKrC,KAAK,CAAC,KAAK,GAAE,MAAM,GAAG,eAA+B,GAAG,OAAO,CAAC,kBAAkB,CAAC;IAIzG,wDAAwD;IACxD,IAAI,OAAO,IAAI,MAAM,CAEpB;CACF"}
@@ -1,11 +1,14 @@
1
1
  import * as net from "node:net";
2
2
  import { GenericContainer } from "../core/generic-container.js";
3
3
  import { ContainerLaunchError } from "../core/errors.js";
4
+ import { DockerImageName } from "../core/docker-image-name.js";
4
5
  const GUEST_PORT = 11211;
5
6
  const DEFAULT_TIMEOUT_MS = 60_000;
6
7
  const POLL_INTERVAL_MS = 250;
7
8
  const PROBE_TIMEOUT_MS = 1_000;
8
9
  const LOG_TAIL_LINES = 50;
10
+ const EXPECTED_REPOSITORY = "memcached";
11
+ const DEFAULT_IMAGE = "memcached:latest";
9
12
  function sleep(ms) {
10
13
  return new Promise((r) => setTimeout(r, ms));
11
14
  }
@@ -88,13 +91,21 @@ export class MemcachedRespondsStrategy {
88
91
  }
89
92
  }
90
93
  }
91
- /** A single-node Memcached container, ready-checked with a protocol-level `version` probe. */
94
+ /**
95
+ * A single-node Memcached container, ready-checked with a protocol-level
96
+ * `version` probe.
97
+ *
98
+ * No-arg construction floats to `memcached:latest`, so the version tracks
99
+ * upstream rather than this library's release cycle (verified against
100
+ * `memcached:1.6-alpine`). `latest` is Debian-based rather than Alpine —
101
+ * functionally equivalent, larger to pull.
102
+ */
92
103
  export class MemcachedContainer extends GenericContainer {
93
- constructor(image = "memcached:1.6-alpine") {
94
- super(image);
104
+ constructor(image = DEFAULT_IMAGE) {
105
+ super(DockerImageName.requireCompatible(image, EXPECTED_REPOSITORY));
95
106
  this.withExposedPorts(GUEST_PORT).waitingFor(new MemcachedRespondsStrategy());
96
107
  }
97
- static async start(image = "memcached:1.6-alpine") {
108
+ static async start(image = DEFAULT_IMAGE) {
98
109
  return (await new MemcachedContainer(image).start());
99
110
  }
100
111
  /** The `host:port` address of the running container. */
@@ -1 +1 @@
1
- {"version":3,"file":"memcached.js","sourceRoot":"","sources":["../../src/modules/memcached.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"memcached.js","sourceRoot":"","sources":["../../src/modules/memcached.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,40 @@
1
+ import { GenericContainer } from "../core/generic-container.js";
2
+ import { DockerImageName } from "../core/docker-image-name.js";
3
+ /**
4
+ * A single-node MinIO container — an S3-compatible object store. Requires
5
+ * an explicit command: the image's default ENTRYPOINT alone does not serve,
6
+ * so this module always runs `server /data --console-address :9001`.
7
+ *
8
+ * `MINIO_ROOT_USER`/`MINIO_ROOT_PASSWORD` default to `testuser`/
9
+ * `testpassword`, not this library's usual `test`/`test` pair — MinIO
10
+ * itself rejects a root password shorter than 8 characters, so `test` (4
11
+ * characters) is a non-starter here.
12
+ *
13
+ * Exposes both the S3 API (9000, what `endpointUrl` wraps) and the web
14
+ * console (9001, published for anyone who wants to open it directly; no
15
+ * helper wraps it).
16
+ *
17
+ * Readiness is a protocol-aware HTTP check against `/minio/health/live` on
18
+ * the API port — verified answering 200 on the very first poll after boot.
19
+ *
20
+ * No-arg construction floats to `minio/minio:latest`, so the version tracks
21
+ * upstream rather than this library's release cycle (verified against
22
+ * `minio/minio:RELEASE.2025-09-07T16-13-09Z`).
23
+ */
24
+ export declare class MinIOContainer extends GenericContainer {
25
+ private rootUserState;
26
+ private rootPasswordState;
27
+ constructor(image?: string | DockerImageName);
28
+ static start(image?: string | DockerImageName): Promise<MinIOContainer>;
29
+ /** Overrides `MINIO_ROOT_USER` (default `testuser`). */
30
+ withRootUser(user: string): this;
31
+ /** Overrides `MINIO_ROOT_PASSWORD` (default `testpassword`). MinIO rejects anything shorter than 8 characters. */
32
+ withRootPassword(password: string): this;
33
+ /** The configured root user (default `testuser`). */
34
+ get rootUser(): string;
35
+ /** The configured root password (default `testpassword`). */
36
+ get rootPassword(): string;
37
+ /** The S3 API's base URL for the running container. */
38
+ get endpointUrl(): string;
39
+ }
40
+ //# sourceMappingURL=minio.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"minio.d.ts","sourceRoot":"","sources":["../../src/modules/minio.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AAEhE,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAO/D;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,qBAAa,cAAe,SAAQ,gBAAgB;IAClD,OAAO,CAAC,aAAa,CAAc;IACnC,OAAO,CAAC,iBAAiB,CAAkB;gBAE/B,KAAK,GAAE,MAAM,GAAG,eAA+B;WAcrC,KAAK,CAAC,KAAK,GAAE,MAAM,GAAG,eAA+B,GAAG,OAAO,CAAC,cAAc,CAAC;IAIrG,wDAAwD;IACxD,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAKhC,kHAAkH;IAClH,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;IAKxC,qDAAqD;IACrD,IAAI,QAAQ,IAAI,MAAM,CAErB;IAED,6DAA6D;IAC7D,IAAI,YAAY,IAAI,MAAM,CAEzB;IAED,uDAAuD;IACvD,IAAI,WAAW,IAAI,MAAM,CAExB;CACF"}
@@ -0,0 +1,71 @@
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 API_PORT = 9000;
5
+ const CONSOLE_PORT = 9001;
6
+ const EXPECTED_REPOSITORY = "minio/minio";
7
+ const DEFAULT_IMAGE = "minio/minio:latest";
8
+ /**
9
+ * A single-node MinIO container — an S3-compatible object store. Requires
10
+ * an explicit command: the image's default ENTRYPOINT alone does not serve,
11
+ * so this module always runs `server /data --console-address :9001`.
12
+ *
13
+ * `MINIO_ROOT_USER`/`MINIO_ROOT_PASSWORD` default to `testuser`/
14
+ * `testpassword`, not this library's usual `test`/`test` pair — MinIO
15
+ * itself rejects a root password shorter than 8 characters, so `test` (4
16
+ * characters) is a non-starter here.
17
+ *
18
+ * Exposes both the S3 API (9000, what `endpointUrl` wraps) and the web
19
+ * console (9001, published for anyone who wants to open it directly; no
20
+ * helper wraps it).
21
+ *
22
+ * Readiness is a protocol-aware HTTP check against `/minio/health/live` on
23
+ * the API port — verified answering 200 on the very first poll after boot.
24
+ *
25
+ * No-arg construction floats to `minio/minio:latest`, so the version tracks
26
+ * upstream rather than this library's release cycle (verified against
27
+ * `minio/minio:RELEASE.2025-09-07T16-13-09Z`).
28
+ */
29
+ export class MinIOContainer extends GenericContainer {
30
+ rootUserState = "testuser";
31
+ rootPasswordState = "testpassword";
32
+ constructor(image = DEFAULT_IMAGE) {
33
+ super(DockerImageName.requireCompatible(image, EXPECTED_REPOSITORY));
34
+ this.withExposedPorts(API_PORT, CONSOLE_PORT)
35
+ .withCommand("server", "/data", "--console-address", ":9001")
36
+ .withEnv("MINIO_ROOT_USER", this.rootUserState)
37
+ .withEnv("MINIO_ROOT_PASSWORD", this.rootPasswordState)
38
+ .waitingFor(Wait.forHttp("/minio/health/live").forPort(API_PORT));
39
+ // No withMemoryLimit override: the round-trip that verified this module
40
+ // ran at 1024 MB, but whether MinIO actually needs more than msb's
41
+ // default microVM sizing was never isolated in that pass — a floor
42
+ // belongs here once that's measured on its own, not assumed from a
43
+ // number that included the whole round-trip's overhead.
44
+ }
45
+ static async start(image = DEFAULT_IMAGE) {
46
+ return (await new MinIOContainer(image).start());
47
+ }
48
+ /** Overrides `MINIO_ROOT_USER` (default `testuser`). */
49
+ withRootUser(user) {
50
+ this.rootUserState = user;
51
+ return this.withEnv("MINIO_ROOT_USER", user);
52
+ }
53
+ /** Overrides `MINIO_ROOT_PASSWORD` (default `testpassword`). MinIO rejects anything shorter than 8 characters. */
54
+ withRootPassword(password) {
55
+ this.rootPasswordState = password;
56
+ return this.withEnv("MINIO_ROOT_PASSWORD", password);
57
+ }
58
+ /** The configured root user (default `testuser`). */
59
+ get rootUser() {
60
+ return this.rootUserState;
61
+ }
62
+ /** The configured root password (default `testpassword`). */
63
+ get rootPassword() {
64
+ return this.rootPasswordState;
65
+ }
66
+ /** The S3 API's base URL for the running container. */
67
+ get endpointUrl() {
68
+ return `http://${this.host}:${this.getMappedPort(API_PORT)}`;
69
+ }
70
+ }
71
+ //# sourceMappingURL=minio.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"minio.js","sourceRoot":"","sources":["../../src/modules/minio.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AAChE,OAAO,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAC;AACvC,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAE/D,MAAM,QAAQ,GAAG,IAAI,CAAC;AACtB,MAAM,YAAY,GAAG,IAAI,CAAC;AAC1B,MAAM,mBAAmB,GAAG,aAAa,CAAC;AAC1C,MAAM,aAAa,GAAG,oBAAoB,CAAC;AAE3C;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,MAAM,OAAO,cAAe,SAAQ,gBAAgB;IAC1C,aAAa,GAAG,UAAU,CAAC;IAC3B,iBAAiB,GAAG,cAAc,CAAC;IAE3C,YAAY,QAAkC,aAAa;QACzD,KAAK,CAAC,eAAe,CAAC,iBAAiB,CAAC,KAAK,EAAE,mBAAmB,CAAC,CAAC,CAAC;QACrE,IAAI,CAAC,gBAAgB,CAAC,QAAQ,EAAE,YAAY,CAAC;aAC1C,WAAW,CAAC,QAAQ,EAAE,OAAO,EAAE,mBAAmB,EAAE,OAAO,CAAC;aAC5D,OAAO,CAAC,iBAAiB,EAAE,IAAI,CAAC,aAAa,CAAC;aAC9C,OAAO,CAAC,qBAAqB,EAAE,IAAI,CAAC,iBAAiB,CAAC;aACtD,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,oBAAoB,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC;QACpE,wEAAwE;QACxE,mEAAmE;QACnE,mEAAmE;QACnE,mEAAmE;QACnE,wDAAwD;IAC1D,CAAC;IAED,MAAM,CAAU,KAAK,CAAC,KAAK,CAAC,QAAkC,aAAa;QACzE,OAAO,CAAC,MAAM,IAAI,cAAc,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,CAAmB,CAAC;IACrE,CAAC;IAED,wDAAwD;IACxD,YAAY,CAAC,IAAY;QACvB,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;QAC1B,OAAO,IAAI,CAAC,OAAO,CAAC,iBAAiB,EAAE,IAAI,CAAC,CAAC;IAC/C,CAAC;IAED,kHAAkH;IAClH,gBAAgB,CAAC,QAAgB;QAC/B,IAAI,CAAC,iBAAiB,GAAG,QAAQ,CAAC;QAClC,OAAO,IAAI,CAAC,OAAO,CAAC,qBAAqB,EAAE,QAAQ,CAAC,CAAC;IACvD,CAAC;IAED,qDAAqD;IACrD,IAAI,QAAQ;QACV,OAAO,IAAI,CAAC,aAAa,CAAC;IAC5B,CAAC;IAED,6DAA6D;IAC7D,IAAI,YAAY;QACd,OAAO,IAAI,CAAC,iBAAiB,CAAC;IAChC,CAAC;IAED,uDAAuD;IACvD,IAAI,WAAW;QACb,OAAO,UAAU,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,EAAE,CAAC;IAC/D,CAAC;CACF"}