@docker-harpoon/core 0.1.2 → 0.1.4

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 (42) hide show
  1. package/dist/__tests__/bindings.test.d.ts +10 -0
  2. package/dist/__tests__/bindings.test.d.ts.map +1 -0
  3. package/dist/__tests__/bindings.test.js +128 -0
  4. package/dist/__tests__/container.test.d.ts +12 -0
  5. package/dist/__tests__/container.test.d.ts.map +1 -0
  6. package/dist/__tests__/container.test.js +136 -0
  7. package/dist/__tests__/database.test.d.ts +10 -0
  8. package/dist/__tests__/database.test.d.ts.map +1 -0
  9. package/dist/__tests__/database.test.js +78 -0
  10. package/dist/__tests__/docker-infra.template.d.ts +2 -0
  11. package/dist/__tests__/docker-infra.template.d.ts.map +1 -0
  12. package/dist/__tests__/docker-infra.template.js +174 -0
  13. package/dist/__tests__/network.test.d.ts +10 -0
  14. package/dist/__tests__/network.test.d.ts.map +1 -0
  15. package/dist/__tests__/network.test.js +44 -0
  16. package/dist/__tests__/test-setup.d.ts +9 -0
  17. package/dist/__tests__/test-setup.d.ts.map +1 -0
  18. package/dist/__tests__/test-setup.js +20 -0
  19. package/dist/api/index.d.ts +1 -1
  20. package/dist/api/index.d.ts.map +1 -1
  21. package/dist/api/promise.d.ts +12 -2
  22. package/dist/api/promise.d.ts.map +1 -1
  23. package/dist/api/promise.js +5 -0
  24. package/dist/build-strategies/types.d.ts.map +1 -1
  25. package/dist/config-patchers/types.d.ts.map +1 -1
  26. package/dist/dockerfile-transformers/types.d.ts.map +1 -1
  27. package/dist/errors.d.ts.map +1 -1
  28. package/dist/helpers/database.d.ts.map +1 -1
  29. package/dist/index.d.ts +1 -1
  30. package/dist/index.d.ts.map +1 -1
  31. package/dist/resources/container.d.ts +18 -0
  32. package/dist/resources/container.d.ts.map +1 -1
  33. package/dist/resources/container.js +81 -48
  34. package/dist/resources/image.d.ts +1 -1
  35. package/dist/resources/image.d.ts.map +1 -1
  36. package/dist/resources/index.d.ts +1 -1
  37. package/dist/resources/index.d.ts.map +1 -1
  38. package/dist/resources/network.d.ts.map +1 -1
  39. package/dist/resources/schemas.d.ts +2 -1
  40. package/dist/resources/schemas.d.ts.map +1 -1
  41. package/dist/resources/schemas.js +1 -0
  42. package/package.json +4 -3
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Bindings Integration Tests
3
+ *
4
+ * Dogfoods the binding system to verify:
5
+ * - createEnvBinding helper
6
+ * - Env var injection into containers
7
+ * - Binding composition
8
+ */
9
+ export {};
10
+ //# sourceMappingURL=bindings.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bindings.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/bindings.test.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG"}
@@ -0,0 +1,128 @@
1
+ /**
2
+ * Bindings Integration Tests
3
+ *
4
+ * Dogfoods the binding system to verify:
5
+ * - createEnvBinding helper
6
+ * - Env var injection into containers
7
+ * - Binding composition
8
+ */
9
+ import { describe, test, expect, afterEach, beforeAll, setDefaultTimeout } from 'bun:test';
10
+ import { Container, database, createEnvBinding, destroyAll } from '../index';
11
+ import { buildTestImage, TEST_IMAGE } from './test-setup';
12
+ setDefaultTimeout(30_000);
13
+ const waitUntil = (fn, timeout = 5000) => {
14
+ return new Promise((resolve) => {
15
+ const interval = setInterval(() => {
16
+ if (fn()) {
17
+ clearInterval(interval);
18
+ resolve(true);
19
+ }
20
+ }, 100);
21
+ });
22
+ };
23
+ describe('Bindings', () => {
24
+ beforeAll(async () => {
25
+ await buildTestImage();
26
+ });
27
+ afterEach(async () => {
28
+ await destroyAll();
29
+ });
30
+ test('createEnvBinding creates a simple env binding', () => {
31
+ const binding = createEnvBinding('config', {
32
+ NODE_ENV: 'test',
33
+ LOG_LEVEL: 'debug',
34
+ });
35
+ expect(binding.type).toBe('config');
36
+ expect(binding.getEnv()).toEqual({
37
+ NODE_ENV: 'test',
38
+ LOG_LEVEL: 'debug',
39
+ });
40
+ });
41
+ test('container receives env vars from bindings', async () => {
42
+ const configBinding = createEnvBinding('config', {
43
+ APP_NAME: 'test-app',
44
+ APP_VERSION: '1.0.0',
45
+ });
46
+ const container = await Container('test-binding-env', {
47
+ image: TEST_IMAGE,
48
+ cmd: ['sleep', '30'],
49
+ bindings: {
50
+ config: configBinding,
51
+ },
52
+ });
53
+ await waitUntil(() => !!container.getIp('test-binding-env'), 5000);
54
+ const result = await container.exec([
55
+ 'sh',
56
+ '-c',
57
+ 'echo "$APP_NAME:$APP_VERSION"',
58
+ ]);
59
+ expect(result.stdout.trim()).toBe('test-app:1.0.0');
60
+ await container.destroy();
61
+ });
62
+ test('multiple bindings merge env vars', async () => {
63
+ const binding1 = createEnvBinding('env1', {
64
+ VAR_A: 'a',
65
+ VAR_B: 'b',
66
+ });
67
+ const binding2 = createEnvBinding('env2', {
68
+ VAR_C: 'c',
69
+ VAR_D: 'd',
70
+ });
71
+ const container = await Container('test-multi-binding', {
72
+ image: TEST_IMAGE,
73
+ cmd: ['sleep', '30'],
74
+ bindings: {
75
+ first: binding1,
76
+ second: binding2,
77
+ },
78
+ });
79
+ await waitUntil(() => !!container.getIp('test-multi-binding'), 5000);
80
+ const result = await container.exec([
81
+ 'sh',
82
+ '-c',
83
+ 'echo "$VAR_A$VAR_B$VAR_C$VAR_D"',
84
+ ]);
85
+ expect(result.stdout.trim()).toBe('abcd');
86
+ await container.destroy();
87
+ });
88
+ test('explicit env takes precedence over bindings', async () => {
89
+ const binding = createEnvBinding('config', {
90
+ MY_VAR: 'from-binding',
91
+ });
92
+ const container = await Container('test-env-precedence', {
93
+ image: TEST_IMAGE,
94
+ cmd: ['sleep', '30'],
95
+ bindings: {
96
+ config: binding,
97
+ },
98
+ env: {
99
+ MY_VAR: 'from-explicit',
100
+ },
101
+ });
102
+ await waitUntil(() => !!container.getIp('test-env-precedence'), 5000);
103
+ const result = await container.exec(['sh', '-c', 'echo "$MY_VAR"']);
104
+ expect(result.stdout.trim()).toBe('from-explicit');
105
+ await container.destroy();
106
+ });
107
+ test('database can be used as binding resource', async () => {
108
+ const db = await database('test-db-binding', {
109
+ image: 'redis:7-alpine',
110
+ hostPort: 16390,
111
+ });
112
+ const dbBinding = createEnvBinding('database', {
113
+ REDIS_URL: db.connectionString,
114
+ });
115
+ const container = await Container('test-db-consumer', {
116
+ image: TEST_IMAGE,
117
+ cmd: ['sleep', '30'],
118
+ bindings: {
119
+ db: dbBinding,
120
+ },
121
+ });
122
+ await waitUntil(() => !!container.getIp('test-db-consumer'), 5000);
123
+ const result = await container.exec(['sh', '-c', 'echo "$REDIS_URL"']);
124
+ expect(result.stdout.trim()).toBe('redis://localhost:16390');
125
+ await container.destroy();
126
+ await db.destroy();
127
+ });
128
+ });
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Container Resource Integration Tests
3
+ *
4
+ * Dogfoods the Container resource to verify:
5
+ * - Creation with network binding
6
+ * - waitForLog functionality
7
+ * - exec command execution
8
+ * - stats retrieval
9
+ * - Lifecycle (stop, destroy)
10
+ */
11
+ export {};
12
+ //# sourceMappingURL=container.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"container.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/container.test.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG"}
@@ -0,0 +1,136 @@
1
+ /**
2
+ * Container Resource Integration Tests
3
+ *
4
+ * Dogfoods the Container resource to verify:
5
+ * - Creation with network binding
6
+ * - waitForLog functionality
7
+ * - exec command execution
8
+ * - stats retrieval
9
+ * - Lifecycle (stop, destroy)
10
+ */
11
+ import { describe, test, expect, afterEach, beforeAll, setDefaultTimeout } from 'bun:test';
12
+ import { Network, Container, destroyAll } from '../index';
13
+ import { buildTestImage, TEST_IMAGE } from './test-setup';
14
+ setDefaultTimeout(30_000);
15
+ describe('Container', () => {
16
+ beforeAll(async () => {
17
+ await buildTestImage();
18
+ });
19
+ afterEach(async () => {
20
+ await destroyAll();
21
+ });
22
+ test('creates a container with basic config', async () => {
23
+ const container = await Container('test-container-basic', {
24
+ image: TEST_IMAGE,
25
+ cmd: ['sleep', '30'],
26
+ });
27
+ expect(container.id).toBeDefined();
28
+ expect(container.name).toBe('test-container-basic');
29
+ await container.destroy();
30
+ });
31
+ test('creates a container attached to a network', async () => {
32
+ const network = await Network('test-container-net');
33
+ const container = await Container('test-container-networked', {
34
+ image: TEST_IMAGE,
35
+ cmd: ['sleep', '30'],
36
+ networks: [network],
37
+ });
38
+ expect(container.id).toBeDefined();
39
+ const ip = await container.getIp('test-container-net');
40
+ expect(ip).toBeDefined();
41
+ await container.destroy();
42
+ await network.destroy();
43
+ });
44
+ test('exec runs commands inside container', async () => {
45
+ const container = await Container('test-container-exec', {
46
+ image: TEST_IMAGE,
47
+ cmd: ['sleep', '30'],
48
+ });
49
+ await new Promise((r) => setTimeout(r, 500));
50
+ const result = await container.exec(['echo', 'hello world']);
51
+ expect(result.exitCode).toBe(0);
52
+ expect(result.stdout.trim()).toBe('hello world');
53
+ expect(result.durationMs).toBeGreaterThan(0);
54
+ await container.destroy();
55
+ });
56
+ test('stats returns container resource statistics', async () => {
57
+ const container = await Container('test-container-stats', {
58
+ image: TEST_IMAGE,
59
+ cmd: ['sleep', '30'],
60
+ });
61
+ await new Promise((r) => setTimeout(r, 500));
62
+ const stats = await container.stats();
63
+ expect(stats.cpu).toBeDefined();
64
+ expect(stats.cpu.cores).toBeGreaterThan(0);
65
+ expect(stats.memory).toBeDefined();
66
+ expect(stats.memory.limit).toBeGreaterThan(0);
67
+ expect(stats.network).toBeDefined();
68
+ expect(stats.containerId).toBe(container.id);
69
+ await container.destroy();
70
+ });
71
+ test('waitForLog detects log patterns', async () => {
72
+ const container = await Container('test-container-logs', {
73
+ image: TEST_IMAGE,
74
+ cmd: ['sh', '-c', 'echo "Server started successfully" && sleep 30'],
75
+ });
76
+ await container.waitForLog('Server started', 5000);
77
+ expect(true).toBe(true);
78
+ await container.destroy();
79
+ });
80
+ test('stop gracefully shuts down container', async () => {
81
+ const container = await Container('test-container-stop', {
82
+ image: TEST_IMAGE,
83
+ cmd: ['sh', '-c', 'trap "exit 0" TERM; while true; do sleep 1; done'],
84
+ });
85
+ await new Promise((r) => setTimeout(r, 500));
86
+ const metadata = await container.stop('SIGTERM', 10000);
87
+ expect(metadata.signal).toBe('SIGTERM');
88
+ expect(metadata.signalCount).toBeGreaterThan(0);
89
+ expect(metadata.timeTakenMs).toBeGreaterThan(0);
90
+ await container.destroy();
91
+ });
92
+ test('supports environment variables', async () => {
93
+ const container = await Container('test-container-env', {
94
+ image: TEST_IMAGE,
95
+ cmd: ['sleep', '30'],
96
+ env: {
97
+ MY_VAR: 'hello',
98
+ ANOTHER_VAR: 'world',
99
+ },
100
+ });
101
+ await new Promise((r) => setTimeout(r, 500));
102
+ const result = await container.exec([
103
+ 'sh',
104
+ '-c',
105
+ 'echo $MY_VAR $ANOTHER_VAR',
106
+ ]);
107
+ expect(result.stdout.trim()).toBe('hello world');
108
+ await container.destroy();
109
+ });
110
+ test('supports port mappings', async () => {
111
+ const container = await Container('test-container-ports', {
112
+ image: TEST_IMAGE,
113
+ cmd: ['sleep', '30'],
114
+ ports: [{ internal: 8080, external: 18080 }],
115
+ });
116
+ expect(container.id).toBeDefined();
117
+ await container.destroy();
118
+ });
119
+ test('streamLogs terminates without follow option', async () => {
120
+ const container = await Container('test-logs-terminate', {
121
+ image: TEST_IMAGE,
122
+ cmd: ['sh', '-c', 'echo "line1" && echo "line2" && echo "line3" && sleep 30'],
123
+ });
124
+ await container.waitForLog('line3', 5000);
125
+ const lines = [];
126
+ const logStream = await container.streamLogs({ tail: 3 });
127
+ for await (const line of logStream) {
128
+ lines.push(line.message);
129
+ }
130
+ // Loop should exit naturally
131
+ expect(lines).toContain('line1');
132
+ expect(lines).toContain('line2');
133
+ expect(lines).toContain('line3');
134
+ await container.destroy();
135
+ });
136
+ });
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Database Helper Integration Tests
3
+ *
4
+ * Dogfoods the database helper to verify:
5
+ * - Connection string generation
6
+ * - Port mapping
7
+ * - Database-specific defaults
8
+ */
9
+ export {};
10
+ //# sourceMappingURL=database.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"database.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/database.test.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG"}
@@ -0,0 +1,78 @@
1
+ /**
2
+ * Database Helper Integration Tests
3
+ *
4
+ * Dogfoods the database helper to verify:
5
+ * - Connection string generation
6
+ * - Port mapping
7
+ * - Database-specific defaults
8
+ */
9
+ import { describe, test, expect, afterEach, setDefaultTimeout } from 'bun:test';
10
+ import { Network, database, destroyAll } from '../index';
11
+ setDefaultTimeout(60_000);
12
+ describe('database', () => {
13
+ afterEach(async () => {
14
+ await destroyAll();
15
+ });
16
+ test('creates a postgres database with connection string', async () => {
17
+ const db = await database('test-postgres', {
18
+ image: 'postgres:16-alpine',
19
+ env: {
20
+ POSTGRES_PASSWORD: 'testpass',
21
+ POSTGRES_DB: 'testdb',
22
+ },
23
+ hostPort: 15432,
24
+ });
25
+ expect(db.id).toBeDefined();
26
+ expect(db.name).toBe('test-postgres');
27
+ expect(db.port).toBe(5432);
28
+ expect(db.hostPort).toBe(15432);
29
+ expect(db.connectionString).toBe('postgresql://postgres:testpass@localhost:15432/testdb');
30
+ await db.destroy();
31
+ });
32
+ test('creates a redis database with connection string', async () => {
33
+ const db = await database('test-redis', {
34
+ image: 'redis:7-alpine',
35
+ hostPort: 16379,
36
+ });
37
+ expect(db.port).toBe(6379);
38
+ expect(db.hostPort).toBe(16379);
39
+ expect(db.connectionString).toBe('redis://localhost:16379');
40
+ await db.destroy();
41
+ });
42
+ test('creates a redis database with password', async () => {
43
+ const db = await database('test-redis-auth', {
44
+ image: 'redis:7-alpine',
45
+ hostPort: 16380,
46
+ env: {
47
+ REDIS_PASSWORD: 'secret',
48
+ },
49
+ });
50
+ expect(db.connectionString).toBe('redis://:secret@localhost:16380');
51
+ await db.destroy();
52
+ });
53
+ test('attaches database to network', async () => {
54
+ const network = await Network('test-db-net');
55
+ const db = await database('test-db-networked', {
56
+ image: 'redis:7-alpine',
57
+ networks: [network],
58
+ hostPort: 16381,
59
+ });
60
+ const ip = await db.getIp('test-db-net');
61
+ expect(ip).toBeDefined();
62
+ expect(ip).not.toBe('');
63
+ await db.destroy();
64
+ await network.destroy();
65
+ });
66
+ test('database inherits container methods', async () => {
67
+ const db = await database('test-db-methods', {
68
+ image: 'redis:7-alpine',
69
+ hostPort: 16382,
70
+ });
71
+ await db.waitForLog('Ready to accept connections', 10000);
72
+ const result = await db.exec(['redis-cli', 'PING']);
73
+ expect(result.stdout.trim()).toBe('PONG');
74
+ const stats = await db.stats();
75
+ expect(stats.cpu).toBeDefined();
76
+ await db.destroy();
77
+ });
78
+ });
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=docker-infra.template.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"docker-infra.template.d.ts","sourceRoot":"","sources":["../../src/__tests__/docker-infra.template.ts"],"names":[],"mappings":""}
@@ -0,0 +1,174 @@
1
+ /**
2
+ * Docker Infrastructure Test Template
3
+ *
4
+ * Copy and customize this file to test your project's Dockerfile and entrypoint.
5
+ * Replace {{PROJECT_NAME}} and {{PROJECT_IMAGE}} with your values.
6
+ *
7
+ * This template demonstrates Harpoon's complete API for testing Docker infrastructure:
8
+ * - Image building with buildArgs
9
+ * - Container creation with volumes, capabilities, and user overrides
10
+ * - Log waiting and streaming
11
+ * - Command execution inside containers
12
+ * - Network isolation testing
13
+ *
14
+ * @example
15
+ * ```bash
16
+ * # Copy and customize for your project
17
+ * cp docker-infra.template.ts my-project.test.ts
18
+ * # Edit PROJECT config and tests
19
+ * bun test my-project.test.ts
20
+ * ```
21
+ */
22
+ import { describe, test, expect, beforeAll, afterEach, setDefaultTimeout } from 'bun:test';
23
+ import { Image, Container, Network, destroyAll } from '@docker-harpoon/core';
24
+ // ============ PROJECT CONFIGURATION ============
25
+ // Customize these values for your project
26
+ const PROJECT = {
27
+ name: '{{PROJECT_NAME}}',
28
+ image: '{{PROJECT_IMAGE}}:latest',
29
+ context: './',
30
+ dockerfile: 'Dockerfile',
31
+ port: 3000,
32
+ healthPath: '/api/status',
33
+ };
34
+ // Set a generous timeout for Docker operations
35
+ setDefaultTimeout(120_000);
36
+ describe(`${PROJECT.name} Docker Infrastructure`, () => {
37
+ beforeAll(async () => {
38
+ // Build the project image
39
+ await Image(PROJECT.image, {
40
+ context: PROJECT.context,
41
+ dockerfile: PROJECT.dockerfile,
42
+ buildArgs: { SEED_DATABASE: 'true' },
43
+ });
44
+ });
45
+ afterEach(async () => {
46
+ await destroyAll();
47
+ });
48
+ // ============ HEALTH CHECK TEST ============
49
+ test('health check responds 200', async () => {
50
+ const container = await Container('test-health', {
51
+ image: PROJECT.image,
52
+ env: { PORT: String(PROJECT.port) },
53
+ ports: [{ internal: PROJECT.port, external: 13000 }],
54
+ });
55
+ await container.waitForLog(/listening|started|ready/i, 30000);
56
+ const res = await fetch(`http://localhost:13000${PROJECT.healthPath}`);
57
+ expect(res.status).toBe(200);
58
+ });
59
+ // ============ VOLUME MOUNT TEST ============
60
+ test('db snapshot copy-on-boot pattern', async () => {
61
+ const container = await Container('test-snapshot', {
62
+ image: PROJECT.image,
63
+ env: {
64
+ DB_SOURCE: '/data/snapshot/app.db',
65
+ DB_PATH: '/app/data/test.db',
66
+ },
67
+ volumes: [
68
+ { hostPath: '/tmp/test-snapshot.db', containerPath: '/data/snapshot/app.db', readonly: true },
69
+ ],
70
+ });
71
+ await container.waitForLog(/snapshot copied|database ready/i, 30000);
72
+ });
73
+ // ============ FILE SYSTEM TEST ============
74
+ test('file upload directory setup', async () => {
75
+ const container = await Container('test-uploads', {
76
+ image: PROJECT.image,
77
+ env: { FILE_UPLOAD_PATH: '/app/custom-uploads' },
78
+ });
79
+ await container.waitForLog(/upload directory|ensuring/i, 10000);
80
+ const result = await container.exec(['ls', '-la', '/app/custom-uploads']);
81
+ expect(result.exitCode).toBe(0);
82
+ expect(result.stdout).toContain('drwx'); // Directory exists with permissions
83
+ });
84
+ // ============ NETWORK ISOLATION TEST ============
85
+ test('network isolation with iptables', async () => {
86
+ const network = await Network('isolated-net');
87
+ const container = await Container('test-isolation', {
88
+ image: PROJECT.image,
89
+ networks: [network],
90
+ env: { ENABLE_NETWORK_ISOLATION: 'true' },
91
+ capAdd: ['NET_ADMIN'],
92
+ });
93
+ await container.waitForLog(/network isolation configured|iptables/i, 15000);
94
+ });
95
+ // ============ PRIVILEGE DROPPING TEST ============
96
+ test('privilege dropping', async () => {
97
+ const container = await Container('test-privileges', {
98
+ image: PROJECT.image,
99
+ });
100
+ await container.waitForLog(/dropping privileges|started/i, 15000);
101
+ const result = await container.exec(['whoami']);
102
+ expect(result.exitCode).toBe(0);
103
+ expect(result.stdout.trim()).not.toBe('root');
104
+ });
105
+ // ============ ENVIRONMENT VARIABLE TEST ============
106
+ test('environment variable propagation', async () => {
107
+ const container = await Container('test-env', {
108
+ image: PROJECT.image,
109
+ env: {
110
+ PORT: '8080',
111
+ LOG_LEVEL: 'debug',
112
+ CUSTOM_VAR: 'test-value',
113
+ },
114
+ ports: [{ internal: 8080, external: 18080 }],
115
+ });
116
+ await container.waitForLog(/listening|started/i, 30000);
117
+ // Verify env vars are set
118
+ const envResult = await container.exec(['printenv']);
119
+ expect(envResult.stdout).toContain('PORT=8080');
120
+ expect(envResult.stdout).toContain('LOG_LEVEL=debug');
121
+ expect(envResult.stdout).toContain('CUSTOM_VAR=test-value');
122
+ });
123
+ // ============ USER OVERRIDE TEST ============
124
+ test('user override', async () => {
125
+ const container = await Container('test-user', {
126
+ image: PROJECT.image,
127
+ user: '1000:1000',
128
+ });
129
+ await container.waitForLog(/started|ready/i, 15000);
130
+ const result = await container.exec(['id']);
131
+ expect(result.exitCode).toBe(0);
132
+ expect(result.stdout).toContain('uid=1000');
133
+ expect(result.stdout).toContain('gid=1000');
134
+ });
135
+ // ============ CAPABILITIES TEST ============
136
+ test('dropped capabilities', async () => {
137
+ const container = await Container('test-caps', {
138
+ image: PROJECT.image,
139
+ capDrop: ['ALL'],
140
+ capAdd: ['NET_BIND_SERVICE'],
141
+ });
142
+ await container.waitForLog(/started|ready/i, 15000);
143
+ // Container should be running with minimal capabilities
144
+ const result = await container.exec(['cat', '/proc/1/status']);
145
+ expect(result.exitCode).toBe(0);
146
+ // CapEff should show limited capabilities
147
+ expect(result.stdout).toContain('CapEff');
148
+ });
149
+ // ============ GRACEFUL SHUTDOWN TEST ============
150
+ test('graceful shutdown', async () => {
151
+ const container = await Container('test-shutdown', {
152
+ image: PROJECT.image,
153
+ env: { PORT: String(PROJECT.port) },
154
+ });
155
+ await container.waitForLog(/listening|started|ready/i, 30000);
156
+ const metadata = await container.stop('SIGTERM', 10000);
157
+ expect(metadata.graceful).toBe(true);
158
+ expect(metadata.signal).toBe('SIGTERM');
159
+ });
160
+ // ============ RESOURCE STATS TEST ============
161
+ test('container stats', async () => {
162
+ const container = await Container('test-stats', {
163
+ image: PROJECT.image,
164
+ env: { PORT: String(PROJECT.port) },
165
+ });
166
+ await container.waitForLog(/listening|started|ready/i, 30000);
167
+ const stats = await container.stats();
168
+ expect(stats.cpu).toBeDefined();
169
+ expect(stats.cpu.percent).toBeGreaterThanOrEqual(0);
170
+ expect(stats.memory).toBeDefined();
171
+ expect(stats.memory.usage).toBeGreaterThan(0);
172
+ expect(stats.network).toBeDefined();
173
+ });
174
+ });
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Network Resource Integration Tests
3
+ *
4
+ * Dogfoods the Network resource to verify:
5
+ * - Creation and destruction
6
+ * - Property access (id, name)
7
+ * - Duplicate network handling
8
+ */
9
+ export {};
10
+ //# sourceMappingURL=network.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"network.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/network.test.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG"}
@@ -0,0 +1,44 @@
1
+ /**
2
+ * Network Resource Integration Tests
3
+ *
4
+ * Dogfoods the Network resource to verify:
5
+ * - Creation and destruction
6
+ * - Property access (id, name)
7
+ * - Duplicate network handling
8
+ */
9
+ import { describe, test, expect, afterEach, setDefaultTimeout } from 'bun:test';
10
+ import { Network, destroyAll } from '../index';
11
+ setDefaultTimeout(30_000);
12
+ describe('Network', () => {
13
+ afterEach(async () => {
14
+ await destroyAll();
15
+ });
16
+ test('creates a network and returns resource with id and name', async () => {
17
+ const network = await Network('test-network-basic');
18
+ expect(network.id).toBeDefined();
19
+ expect(network.id.length).toBeGreaterThan(0);
20
+ expect(network.name).toBe('test-network-basic');
21
+ await network.destroy();
22
+ });
23
+ test('allows custom driver configuration', async () => {
24
+ const network = await Network('test-network-custom', {
25
+ driver: 'bridge',
26
+ });
27
+ expect(network.name).toBe('test-network-custom');
28
+ expect(network.id).toBeDefined();
29
+ await network.destroy();
30
+ });
31
+ test('handles creating network with same name (replaces existing)', async () => {
32
+ const network1 = await Network('test-network-duplicate');
33
+ const id1 = network1.id;
34
+ const network2 = await Network('test-network-duplicate');
35
+ const id2 = network2.id;
36
+ expect(id2).not.toBe(id1);
37
+ await network2.destroy();
38
+ });
39
+ test('destroy is idempotent', async () => {
40
+ const network = await Network('test-network-idempotent');
41
+ await network.destroy();
42
+ expect(network.destroy()).resolves.toBeUndefined();
43
+ });
44
+ });
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Shared test setup for integration tests.
3
+ *
4
+ * Builds a minimal test image that can be used across all tests,
5
+ * ensuring tests are self-contained and don't rely on external images.
6
+ */
7
+ export declare const TEST_IMAGE = "harpoon-test:latest";
8
+ export declare function buildTestImage(): Promise<void>;
9
+ //# sourceMappingURL=test-setup.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"test-setup.d.ts","sourceRoot":"","sources":["../../src/__tests__/test-setup.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAKH,eAAO,MAAM,UAAU,wBAAwB,CAAC;AAIhD,wBAAsB,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC,CAWpD"}
@@ -0,0 +1,20 @@
1
+ /**
2
+ * Shared test setup for integration tests.
3
+ *
4
+ * Builds a minimal test image that can be used across all tests,
5
+ * ensuring tests are self-contained and don't rely on external images.
6
+ */
7
+ import { Image } from '../index';
8
+ import { join } from 'path';
9
+ export const TEST_IMAGE = 'harpoon-test:latest';
10
+ let imageBuilt = false;
11
+ export async function buildTestImage() {
12
+ if (imageBuilt) {
13
+ return;
14
+ }
15
+ await Image(TEST_IMAGE, {
16
+ context: join(__dirname, 'fixtures'),
17
+ dockerfile: 'Dockerfile',
18
+ });
19
+ imageBuilt = true;
20
+ }
@@ -3,5 +3,5 @@
3
3
  *
4
4
  * Re-exports the Promise-based API for cleaner imports.
5
5
  */
6
- export { Network, Container, database, Image, setDocker, resetDocker, destroyAll, type NetworkConfig, type NetworkResource, type ContainerConfig, type ContainerResource, type PortMapping, type ShutdownMetadata, type DatabaseConfig, type DatabaseResource, type ImageConfig, type ImageResource, type ContainerStats, type ExecOptions, type ExecResult, type LogOptions, type LogLine, } from './promise';
6
+ export { Network, Container, database, Image, setDocker, resetDocker, destroyAll, type NetworkConfig, type NetworkResource, type ContainerConfig, type ContainerResource, type PortMapping, type ShutdownMetadata, type DatabaseConfig, type DatabaseResource, type ImageConfig, type ImageResource, type ContainerStats, type ExecOptions, type ExecResult, type LogOptions, type LogLine, type VolumeMapping, } from './promise';
7
7
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/api/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAEL,OAAO,EACP,SAAS,EACT,QAAQ,EACR,KAAK,EAGL,SAAS,EACT,WAAW,EACX,UAAU,EAGV,KAAK,aAAa,EAClB,KAAK,eAAe,EACpB,KAAK,eAAe,EACpB,KAAK,iBAAiB,EACtB,KAAK,WAAW,EAChB,KAAK,gBAAgB,EACrB,KAAK,cAAc,EACnB,KAAK,gBAAgB,EACrB,KAAK,WAAW,EAChB,KAAK,aAAa,EAGlB,KAAK,cAAc,EACnB,KAAK,WAAW,EAChB,KAAK,UAAU,EACf,KAAK,UAAU,EACf,KAAK,OAAO,GACb,MAAM,WAAW,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/api/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAEL,OAAO,EACP,SAAS,EACT,QAAQ,EACR,KAAK,EAGL,SAAS,EACT,WAAW,EACX,UAAU,EAGV,KAAK,aAAa,EAClB,KAAK,eAAe,EACpB,KAAK,eAAe,EACpB,KAAK,iBAAiB,EACtB,KAAK,WAAW,EAChB,KAAK,gBAAgB,EACrB,KAAK,cAAc,EACnB,KAAK,gBAAgB,EACrB,KAAK,WAAW,EAChB,KAAK,aAAa,EAGlB,KAAK,cAAc,EACnB,KAAK,WAAW,EAChB,KAAK,UAAU,EACf,KAAK,UAAU,EACf,KAAK,OAAO,EACZ,KAAK,aAAa,GACnB,MAAM,WAAW,CAAC"}
@@ -7,8 +7,8 @@
7
7
  * Inspired by Alchemy.run and Pulumi's IAC patterns.
8
8
  */
9
9
  import Docker from 'dockerode';
10
- import { type ContainerStats, type ExecOptions, type ExecResult, type LogOptions, type LogLine } from '../resources';
11
- export type { ContainerStats, ExecOptions, ExecResult, LogOptions, LogLine, } from '../resources';
10
+ import { type ContainerStats, type ExecOptions, type ExecResult, type LogOptions, type LogLine, type VolumeMapping } from '../resources';
11
+ export type { ContainerStats, ExecOptions, ExecResult, LogOptions, LogLine, VolumeMapping, } from '../resources';
12
12
  import type { Binding } from '../bindings/types';
13
13
  export interface NetworkConfig {
14
14
  /** Network driver (default: 'bridge') */
@@ -41,6 +41,16 @@ export interface ContainerConfig {
41
41
  cmd?: string[];
42
42
  /** Bindings that provide env vars and lifecycle hooks */
43
43
  bindings?: Record<string, Binding>;
44
+ /** Volume mounts (host:container) */
45
+ volumes?: VolumeMapping[];
46
+ /** Capabilities to add (e.g., 'NET_ADMIN', 'SYS_PTRACE') */
47
+ capAdd?: string[];
48
+ /** Capabilities to drop (e.g., 'ALL') */
49
+ capDrop?: string[];
50
+ /** Run in privileged mode */
51
+ privileged?: boolean;
52
+ /** User/group to run as (e.g., '1000:1000') */
53
+ user?: string;
44
54
  }
45
55
  export interface ContainerResource {
46
56
  readonly id: string;
@@ -1 +1 @@
1
- {"version":3,"file":"promise.d.ts","sourceRoot":"","sources":["../../src/api/promise.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"promise.d.ts","sourceRoot":"","sources":["../../src/api/promise.ts"],"names":[],"mappings":"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"}
@@ -237,6 +237,11 @@ export async function Container(name, config) {
237
237
  ...(config.env !== undefined && { env: config.env }),
238
238
  ...(config.cmd !== undefined && { cmd: config.cmd }),
239
239
  ...(config.bindings !== undefined && { bindings: config.bindings }),
240
+ ...(config.volumes !== undefined && { volumes: config.volumes }),
241
+ ...(config.capAdd !== undefined && { capAdd: config.capAdd }),
242
+ ...(config.capDrop !== undefined && { capDrop: config.capDrop }),
243
+ ...(config.privileged !== undefined && { privileged: config.privileged }),
244
+ ...(config.user !== undefined && { user: config.user }),
240
245
  };
241
246
  const effectResource = await Effect.runPromise(EffectContainer(name, effectConfig, docker).pipe(Scope.extend(scope)));
242
247
  const resourceId = `container:${effectResource.id}`;
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/build-strategies/types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAEhC;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,gCAAgC;IAChC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IAErB,0CAA0C;IAC1C,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IAEzB,sDAAsD;IACtD,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAE7B,6BAA6B;IAC7B,QAAQ,CAAC,SAAS,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IAEtD,uCAAuC;IACvC,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,CAAC;IAElC,mDAAmD;IACnD,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC;IAEjC,gCAAgC;IAChC,QAAQ,CAAC,OAAO,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;CACtD;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,yCAAyC;IACzC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAE7B,oCAAoC;IACpC,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAEhC,gEAAgE;IAChE,QAAQ,CAAC,eAAe,EAAE,OAAO,CAAC;IAElC,2CAA2C;IAC3C,QAAQ,CAAC,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAEpC,uDAAuD;IACvD,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED;;GAEG;AACH,qBAAa,kBAAmB,SAAQ,KAAK;IAC3C,QAAQ,CAAC,IAAI,EAAG,oBAAoB,CAAU;IAC9C,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,KAAK,CAAC,EAAE,KAAK,GAAG,SAAS,CAAC;gBAEvB,YAAY,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,KAAK;CAYjE;AAED;;;;;GAKG;AACH,MAAM,WAAW,aAAa;IAC5B,iCAAiC;IACjC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAEtB,iCAAiC;IACjC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAE7B;;;;;OAKG;IACH,QAAQ,CAAC,OAAO,EAAE,CAChB,KAAK,EAAE,kBAAkB,KACtB,MAAM,CAAC,MAAM,CAAC,YAAY,EAAE,kBAAkB,CAAC,CAAC;CACtD;AAED;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC,6BAA6B;IAC7B,QAAQ,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,aAAa,GAAG,SAAS,CAAC;IAE1D,8BAA8B;IAC9B,QAAQ,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE,aAAa,KAAK,IAAI,CAAC;IAErD,yCAAyC;IACzC,QAAQ,CAAC,IAAI,EAAE,MAAM,SAAS,MAAM,EAAE,CAAC;CACxC"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/build-strategies/types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAEhC;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,gCAAgC;IAChC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IAErB,0CAA0C;IAC1C,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IAEzB,sDAAsD;IACtD,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAE7B,6BAA6B;IAC7B,QAAQ,CAAC,SAAS,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IAEtD,uCAAuC;IACvC,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,CAAC;IAElC,mDAAmD;IACnD,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC;IAEjC,gCAAgC;IAChC,QAAQ,CAAC,OAAO,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;CACtD;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,yCAAyC;IACzC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAE7B,oCAAoC;IACpC,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAEhC,gEAAgE;IAChE,QAAQ,CAAC,eAAe,EAAE,OAAO,CAAC;IAElC,2CAA2C;IAC3C,QAAQ,CAAC,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAEpC,uDAAuD;IACvD,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED;;GAEG;AACH,qBAAa,kBAAmB,SAAQ,KAAK;IAC3C,QAAQ,CAAC,IAAI,uBAAiC;IAC9C,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,KAAK,CAAC,EAAE,KAAK,GAAG,SAAS,CAAC;IAEnC,YAAY,YAAY,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,KAAK,EAW/D;CACF;AAED;;;;;GAKG;AACH,MAAM,WAAW,aAAa;IAC5B,iCAAiC;IACjC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAEtB,iCAAiC;IACjC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAE7B;;;;;OAKG;IACH,QAAQ,CAAC,OAAO,EAAE,CAChB,KAAK,EAAE,kBAAkB,KACtB,MAAM,CAAC,MAAM,CAAC,YAAY,EAAE,kBAAkB,CAAC,CAAC;CACtD;AAED;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC,6BAA6B;IAC7B,QAAQ,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,aAAa,GAAG,SAAS,CAAC;IAE1D,8BAA8B;IAC9B,QAAQ,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE,aAAa,KAAK,IAAI,CAAC;IAErD,yCAAyC;IACzC,QAAQ,CAAC,IAAI,EAAE,MAAM,SAAS,MAAM,EAAE,CAAC;CACxC"}
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/config-patchers/types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAEhC;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,gCAAgC;IAChC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IAExB,kCAAkC;IAClC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IAEzB,sCAAsC;IACtC,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IAEjC,oDAAoD;IACpD,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAE1B,8BAA8B;IAC9B,QAAQ,CAAC,QAAQ,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;CACvD;AAED;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,oCAAoC;IACpC,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAE1B,+BAA+B;IAC/B,QAAQ,CAAC,aAAa,EAAE,SAAS,MAAM,EAAE,CAAC;IAE1C,sCAAsC;IACtC,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;CAC/B;AAED;;GAEG;AACH,qBAAa,gBAAiB,SAAQ,KAAK;IACzC,QAAQ,CAAC,IAAI,EAAG,kBAAkB,CAAU;IAC5C,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,KAAK,CAAC,EAAE,KAAK,GAAG,SAAS,CAAC;gBAEvB,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,KAAK;CAYhE;AAED;;;;;GAKG;AACH,MAAM,WAAW,aAAa;IAC5B,gCAAgC;IAChC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAEtB,iCAAiC;IACjC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAE7B;;;;;OAKG;IACH,QAAQ,CAAC,WAAW,EAAE,CACpB,GAAG,EAAE,YAAY,KACd,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,gBAAgB,CAAC,CAAC;IAE9C;;;;;OAKG;IACH,QAAQ,CAAC,KAAK,EAAE,CACd,GAAG,EAAE,YAAY,KACd,MAAM,CAAC,MAAM,CAAC,WAAW,EAAE,gBAAgB,CAAC,CAAC;CACnD;AAED;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC,4BAA4B;IAC5B,QAAQ,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,aAAa,GAAG,SAAS,CAAC;IAE1D,6BAA6B;IAC7B,QAAQ,CAAC,QAAQ,EAAE,CAAC,OAAO,EAAE,aAAa,KAAK,IAAI,CAAC;IAEpD,wCAAwC;IACxC,QAAQ,CAAC,IAAI,EAAE,MAAM,SAAS,MAAM,EAAE,CAAC;IAEvC,uDAAuD;IACvD,QAAQ,CAAC,aAAa,EAAE,CACtB,GAAG,EAAE,YAAY,KACd,MAAM,CAAC,MAAM,CAAC,SAAS,aAAa,EAAE,EAAE,gBAAgB,CAAC,CAAC;CAChE;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,8CAA8C;IAC9C,QAAQ,CAAC,GAAG,EAAE,CACZ,GAAG,EAAE,YAAY,KACd,MAAM,CAAC,MAAM,CAAC,SAAS,WAAW,EAAE,EAAE,gBAAgB,CAAC,CAAC;CAC9D"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/config-patchers/types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAEhC;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,gCAAgC;IAChC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IAExB,kCAAkC;IAClC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IAEzB,sCAAsC;IACtC,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IAEjC,oDAAoD;IACpD,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAE1B,8BAA8B;IAC9B,QAAQ,CAAC,QAAQ,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;CACvD;AAED;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,oCAAoC;IACpC,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAE1B,+BAA+B;IAC/B,QAAQ,CAAC,aAAa,EAAE,SAAS,MAAM,EAAE,CAAC;IAE1C,sCAAsC;IACtC,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;CAC/B;AAED;;GAEG;AACH,qBAAa,gBAAiB,SAAQ,KAAK;IACzC,QAAQ,CAAC,IAAI,qBAA+B;IAC5C,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,KAAK,CAAC,EAAE,KAAK,GAAG,SAAS,CAAC;IAEnC,YAAY,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,KAAK,EAW9D;CACF;AAED;;;;;GAKG;AACH,MAAM,WAAW,aAAa;IAC5B,gCAAgC;IAChC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAEtB,iCAAiC;IACjC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAE7B;;;;;OAKG;IACH,QAAQ,CAAC,WAAW,EAAE,CACpB,GAAG,EAAE,YAAY,KACd,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,gBAAgB,CAAC,CAAC;IAE9C;;;;;OAKG;IACH,QAAQ,CAAC,KAAK,EAAE,CACd,GAAG,EAAE,YAAY,KACd,MAAM,CAAC,MAAM,CAAC,WAAW,EAAE,gBAAgB,CAAC,CAAC;CACnD;AAED;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC,4BAA4B;IAC5B,QAAQ,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,aAAa,GAAG,SAAS,CAAC;IAE1D,6BAA6B;IAC7B,QAAQ,CAAC,QAAQ,EAAE,CAAC,OAAO,EAAE,aAAa,KAAK,IAAI,CAAC;IAEpD,wCAAwC;IACxC,QAAQ,CAAC,IAAI,EAAE,MAAM,SAAS,MAAM,EAAE,CAAC;IAEvC,uDAAuD;IACvD,QAAQ,CAAC,aAAa,EAAE,CACtB,GAAG,EAAE,YAAY,KACd,MAAM,CAAC,MAAM,CAAC,SAAS,aAAa,EAAE,EAAE,gBAAgB,CAAC,CAAC;CAChE;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,8CAA8C;IAC9C,QAAQ,CAAC,GAAG,EAAE,CACZ,GAAG,EAAE,YAAY,KACd,MAAM,CAAC,MAAM,CAAC,SAAS,WAAW,EAAE,EAAE,gBAAgB,CAAC,CAAC;CAC9D"}
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/dockerfile-transformers/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/dockerfile-transformers/types.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH;;GAEG;AACH,qBAAa,YAAa,SAAQ,KAAK;IACrC,sCAAsC;IACtC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAkB;IAEvC,gDAAgD;IAChD,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAE1B,4CAA4C;IAC5C,QAAQ,CAAC,KAAK,CAAC,EAAE,KAAK,CAAC;gBAEX,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,KAAK;CAY7D;AAED;;GAEG;AACH,qBAAa,YAAa,SAAQ,YAAY;IAC5C,SAAkB,IAAI,EAAE,cAAc,CAAkB;gBAE5C,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,KAAK;CAQ1D;AAED;;GAEG;AACH,qBAAa,UAAW,SAAQ,YAAY;IAC1C,SAAkB,IAAI,EAAE,YAAY,CAAgB;gBAExC,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,KAAK;CAQzD;AAED;;GAEG;AACH,qBAAa,cAAe,SAAQ,YAAY;IAC9C,SAAkB,IAAI,EAAE,gBAAgB,CAAoB;gBAEhD,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,KAAK;CAQ1D;AAED;;GAEG;AACH,qBAAa,UAAW,SAAQ,YAAY;IAC1C,SAAkB,IAAI,EAAE,YAAY,CAAgB;gBAExC,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,KAAK;CAI3C;AAED;;GAEG;AACH,qBAAa,YAAa,SAAQ,YAAY;IAC5C,SAAkB,IAAI,EAAE,cAAc,CAAkB;IAExD,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;gBAEjB,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,KAAK;CAKhE;AAID;;;GAGG;AACH,wBAAgB,OAAO,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,CAE7C;AAED;;GAEG;AACH,wBAAgB,cAAc,CAC5B,KAAK,EAAE,OAAO,EACd,QAAQ,EAAE,MAAM,EAChB,UAAU,GAAE,OAAO,YAA2B,GAC7C,YAAY,CA4Bd;AAID;;;GAGG;AACH,MAAM,MAAM,eAAe,GACvB,YAAY,GACZ,UAAU,GACV,cAAc,GACd,UAAU,GACV,YAAY,CAAC;AAIjB,eAAO,MAAM,cAAc,GAAI,GAAG,OAAO,KAAG,CAAC,IAAI,YACtB,CAAC;AAE5B,eAAO,MAAM,cAAc,GAAI,GAAG,OAAO,KAAG,CAAC,IAAI,YACtB,CAAC;AAE5B,eAAO,MAAM,YAAY,GAAI,GAAG,OAAO,KAAG,CAAC,IAAI,UACtB,CAAC;AAE1B,eAAO,MAAM,gBAAgB,GAAI,GAAG,OAAO,KAAG,CAAC,IAAI,cACtB,CAAC;AAE9B,eAAO,MAAM,YAAY,GAAI,GAAG,OAAO,KAAG,CAAC,IAAI,UACtB,CAAC;AAE1B,eAAO,MAAM,cAAc,GAAI,GAAG,OAAO,KAAG,CAAC,IAAI,YACtB,CAAC"}
1
+ {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH;;GAEG;AACH,qBAAa,YAAa,SAAQ,KAAK;IACrC,sCAAsC;IACtC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAkB;IAEvC,gDAAgD;IAChD,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAE1B,4CAA4C;IAC5C,QAAQ,CAAC,KAAK,CAAC,EAAE,KAAK,CAAC;IAEvB,YAAY,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,KAAK,EAW3D;CACF;AAED;;GAEG;AACH,qBAAa,YAAa,SAAQ,YAAY;IAC5C,SAAkB,IAAI,EAAE,cAAc,CAAkB;IAExD,YAAY,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,KAAK,EAOxD;CACF;AAED;;GAEG;AACH,qBAAa,UAAW,SAAQ,YAAY;IAC1C,SAAkB,IAAI,EAAE,YAAY,CAAgB;IAEpD,YAAY,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,KAAK,EAOvD;CACF;AAED;;GAEG;AACH,qBAAa,cAAe,SAAQ,YAAY;IAC9C,SAAkB,IAAI,EAAE,gBAAgB,CAAoB;IAE5D,YAAY,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,KAAK,EAOxD;CACF;AAED;;GAEG;AACH,qBAAa,UAAW,SAAQ,YAAY;IAC1C,SAAkB,IAAI,EAAE,YAAY,CAAgB;IAEpD,YAAY,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,KAAK,EAGzC;CACF;AAED;;GAEG;AACH,qBAAa,YAAa,SAAQ,YAAY;IAC5C,SAAkB,IAAI,EAAE,cAAc,CAAkB;IAExD,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAE7B,YAAY,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,KAAK,EAI9D;CACF;AAID;;;GAGG;AACH,wBAAgB,OAAO,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,CAE7C;AAED;;GAEG;AACH,wBAAgB,cAAc,CAC5B,KAAK,EAAE,OAAO,EACd,QAAQ,EAAE,MAAM,EAChB,UAAU,GAAE,OAAO,YAA2B,GAC7C,YAAY,CA4Bd;AAID;;;GAGG;AACH,MAAM,MAAM,eAAe,GACvB,YAAY,GACZ,UAAU,GACV,cAAc,GACd,UAAU,GACV,YAAY,CAAC;AAIjB,eAAO,MAAM,cAAc,mCACA,CAAC;AAE5B,eAAO,MAAM,cAAc,mCACA,CAAC;AAE5B,eAAO,MAAM,YAAY,iCACA,CAAC;AAE1B,eAAO,MAAM,gBAAgB,qCACA,CAAC;AAE9B,eAAO,MAAM,YAAY,iCACA,CAAC;AAE1B,eAAO,MAAM,cAAc,mCACA,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"database.d.ts","sourceRoot":"","sources":["../../src/helpers/database.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAC;AACvC,OAAO,MAAM,MAAM,WAAW,CAAC;AAC/B,OAAO,EAAmC,KAAK,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AACjG,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAYjD,MAAM,WAAW,cAAc;IAC7B,+DAA+D;IAC/D,KAAK,EAAE,MAAM,CAAC;IACd,mDAAmD;IACnD,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,8DAA8D;IAC9D,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,oEAAoE;IACpE,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC7B,6BAA6B;IAC7B,QAAQ,CAAC,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACnC,iCAAiC;IACjC,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACpC;AAED,MAAM,WAAW,gBAAiB,SAAQ,iBAAiB;IACzD,0CAA0C;IAC1C,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;IAClC,iDAAiD;IACjD,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,uCAAuC;IACvC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;CAC3B;AAyDD;;;;;;;;;;;;;;;;;GAiBG;AACH,eAAO,MAAM,QAAQ,GACnB,MAAM,MAAM,EACZ,QAAQ,cAAc,EACtB,QAAQ,MAAM,KACb,MAAM,CAAC,MAAM,CAAC,gBAAgB,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,CAiCjD,CAAC"}
1
+ {"version":3,"file":"database.d.ts","sourceRoot":"","sources":["../../src/helpers/database.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAC;AACvC,OAAO,MAAM,MAAM,WAAW,CAAC;AAC/B,OAAO,EAAmC,KAAK,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AACjG,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAYjD,MAAM,WAAW,cAAc;IAC7B,+DAA+D;IAC/D,KAAK,EAAE,MAAM,CAAC;IACd,mDAAmD;IACnD,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,8DAA8D;IAC9D,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,oEAAoE;IACpE,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC7B,6BAA6B;IAC7B,QAAQ,CAAC,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACnC,iCAAiC;IACjC,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACpC;AAED,MAAM,WAAW,gBAAiB,SAAQ,iBAAiB;IACzD,0CAA0C;IAC1C,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;IAClC,iDAAiD;IACjD,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,uCAAuC;IACvC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;CAC3B;AAyDD;;;;;;;;;;;;;;;;;GAiBG;AACH,eAAO,MAAM,QAAQ,+GAqCjB,CAAC"}
package/dist/index.d.ts CHANGED
@@ -27,7 +27,7 @@
27
27
  * - Binding interface for env var injection and lifecycle hooks
28
28
  * - BuildBinding interface for Dockerfile transformations
29
29
  */
30
- export { Network, Container, database, Image, setDocker, resetDocker, destroyAll, type NetworkConfig, type NetworkResource, type ContainerConfig, type ContainerResource, type PortMapping, type ShutdownMetadata, type DatabaseConfig, type DatabaseResource, type ImageConfig, type ImageResource, type ContainerStats, type ExecOptions, type ExecResult, type LogOptions, type LogLine, } from './api';
30
+ export { Network, Container, database, Image, setDocker, resetDocker, destroyAll, type NetworkConfig, type NetworkResource, type ContainerConfig, type ContainerResource, type PortMapping, type ShutdownMetadata, type DatabaseConfig, type DatabaseResource, type ImageConfig, type ImageResource, type ContainerStats, type ExecOptions, type ExecResult, type LogOptions, type LogLine, type VolumeMapping, } from './api';
31
31
  export type { Binding, BuildBinding, BindingsEnv, FlatBindingsEnv, } from './bindings';
32
32
  export { isBuildBinding, mergeBindingsEnv, createEnvBinding, } from './bindings';
33
33
  export { HarpoonError, NetworkError, ImageError, ContainerError, ScopeError, BindingError, toHarpoonError, asCause, isHarpoonError, isNetworkError, isImageError, isContainerError, isScopeError, isBindingError, } from './errors';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AAIH,OAAO,EAEL,OAAO,EACP,SAAS,EACT,QAAQ,EACR,KAAK,EAGL,SAAS,EACT,WAAW,EACX,UAAU,EAGV,KAAK,aAAa,EAClB,KAAK,eAAe,EACpB,KAAK,eAAe,EACpB,KAAK,iBAAiB,EACtB,KAAK,WAAW,EAChB,KAAK,gBAAgB,EACrB,KAAK,cAAc,EACnB,KAAK,gBAAgB,EACrB,KAAK,WAAW,EAChB,KAAK,aAAa,EAGlB,KAAK,cAAc,EACnB,KAAK,WAAW,EAChB,KAAK,UAAU,EACf,KAAK,UAAU,EACf,KAAK,OAAO,GACb,MAAM,OAAO,CAAC;AAIf,YAAY,EACV,OAAO,EACP,YAAY,EACZ,WAAW,EACX,eAAe,GAChB,MAAM,YAAY,CAAC;AAEpB,OAAO,EACL,cAAc,EACd,gBAAgB,EAChB,gBAAgB,GACjB,MAAM,YAAY,CAAC;AAIpB,OAAO,EACL,YAAY,EACZ,YAAY,EACZ,UAAU,EACV,cAAc,EACd,UAAU,EACV,YAAY,EACZ,cAAc,EACd,OAAO,EACP,cAAc,EACd,cAAc,EACd,YAAY,EACZ,gBAAgB,EAChB,YAAY,EACZ,cAAc,GACf,MAAM,UAAU,CAAC;AAElB,YAAY,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAIhD,OAAO,EACL,qBAAqB,EACrB,qBAAqB,EACrB,gBAAgB,EAChB,mBAAmB,EACnB,gBAAgB,EAChB,kBAAkB,GACnB,MAAM,oBAAoB,CAAC;AAE5B,YAAY,EACV,aAAa,EACb,kBAAkB,EAClB,YAAY,EACZ,qBAAqB,GACtB,MAAM,oBAAoB,CAAC;AAI5B,OAAO,EACL,qBAAqB,EACrB,qBAAqB,EACrB,gBAAgB,EAChB,kBAAkB,EAClB,kBAAkB,EAClB,gBAAgB,GACjB,MAAM,mBAAmB,CAAC;AAE3B,YAAY,EACV,aAAa,EACb,YAAY,EACZ,WAAW,EACX,qBAAqB,EACrB,YAAY,GACb,MAAM,mBAAmB,CAAC;AAI3B,OAAO,EACL,mBAAmB,EACnB,mBAAmB,EACnB,cAAc,EACd,gBAAgB,EAChB,sBAAsB,EACtB,qBAAqB,EACrB,8BAA8B,EAC9B,eAAe,EACf,qBAAqB,EACrB,mBAAmB,EACnB,cAAc,EACd,mBAAmB,EACnB,kBAAkB,EAClB,gBAAgB,EAChB,WAAW,EACX,MAAM,EACN,gBAAgB,GACjB,MAAM,2BAA2B,CAAC;AAEnC,YAAY,EACV,sBAAsB,EACtB,qBAAqB,EACrB,gBAAgB,EAChB,mBAAmB,EACnB,iBAAiB,EACjB,eAAe,GAChB,MAAM,2BAA2B,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AAIH,OAAO,EAEL,OAAO,EACP,SAAS,EACT,QAAQ,EACR,KAAK,EAGL,SAAS,EACT,WAAW,EACX,UAAU,EAGV,KAAK,aAAa,EAClB,KAAK,eAAe,EACpB,KAAK,eAAe,EACpB,KAAK,iBAAiB,EACtB,KAAK,WAAW,EAChB,KAAK,gBAAgB,EACrB,KAAK,cAAc,EACnB,KAAK,gBAAgB,EACrB,KAAK,WAAW,EAChB,KAAK,aAAa,EAGlB,KAAK,cAAc,EACnB,KAAK,WAAW,EAChB,KAAK,UAAU,EACf,KAAK,UAAU,EACf,KAAK,OAAO,EACZ,KAAK,aAAa,GACnB,MAAM,OAAO,CAAC;AAIf,YAAY,EACV,OAAO,EACP,YAAY,EACZ,WAAW,EACX,eAAe,GAChB,MAAM,YAAY,CAAC;AAEpB,OAAO,EACL,cAAc,EACd,gBAAgB,EAChB,gBAAgB,GACjB,MAAM,YAAY,CAAC;AAIpB,OAAO,EACL,YAAY,EACZ,YAAY,EACZ,UAAU,EACV,cAAc,EACd,UAAU,EACV,YAAY,EACZ,cAAc,EACd,OAAO,EACP,cAAc,EACd,cAAc,EACd,YAAY,EACZ,gBAAgB,EAChB,YAAY,EACZ,cAAc,GACf,MAAM,UAAU,CAAC;AAElB,YAAY,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAIhD,OAAO,EACL,qBAAqB,EACrB,qBAAqB,EACrB,gBAAgB,EAChB,mBAAmB,EACnB,gBAAgB,EAChB,kBAAkB,GACnB,MAAM,oBAAoB,CAAC;AAE5B,YAAY,EACV,aAAa,EACb,kBAAkB,EAClB,YAAY,EACZ,qBAAqB,GACtB,MAAM,oBAAoB,CAAC;AAI5B,OAAO,EACL,qBAAqB,EACrB,qBAAqB,EACrB,gBAAgB,EAChB,kBAAkB,EAClB,kBAAkB,EAClB,gBAAgB,GACjB,MAAM,mBAAmB,CAAC;AAE3B,YAAY,EACV,aAAa,EACb,YAAY,EACZ,WAAW,EACX,qBAAqB,EACrB,YAAY,GACb,MAAM,mBAAmB,CAAC;AAI3B,OAAO,EACL,mBAAmB,EACnB,mBAAmB,EACnB,cAAc,EACd,gBAAgB,EAChB,sBAAsB,EACtB,qBAAqB,EACrB,8BAA8B,EAC9B,eAAe,EACf,qBAAqB,EACrB,mBAAmB,EACnB,cAAc,EACd,mBAAmB,EACnB,kBAAkB,EAClB,gBAAgB,EAChB,WAAW,EACX,MAAM,EACN,gBAAgB,GACjB,MAAM,2BAA2B,CAAC;AAEnC,YAAY,EACV,sBAAsB,EACtB,qBAAqB,EACrB,gBAAgB,EAChB,mBAAmB,EACnB,iBAAiB,EACjB,eAAe,GAChB,MAAM,2BAA2B,CAAC"}
@@ -14,6 +14,14 @@ export interface PortMapping {
14
14
  internal: number;
15
15
  external: number;
16
16
  }
17
+ export interface VolumeMapping {
18
+ /** Host path to mount */
19
+ hostPath: string;
20
+ /** Container path to mount at */
21
+ containerPath: string;
22
+ /** Mount as read-only */
23
+ readonly?: boolean;
24
+ }
17
25
  export interface ContainerConfig {
18
26
  image: string;
19
27
  networks?: Array<{
@@ -24,6 +32,16 @@ export interface ContainerConfig {
24
32
  cmd?: string[];
25
33
  /** Bindings that provide env vars and lifecycle hooks */
26
34
  bindings?: Record<string, Binding>;
35
+ /** Volume mounts (host:container) */
36
+ volumes?: VolumeMapping[];
37
+ /** Capabilities to add (e.g., 'NET_ADMIN', 'SYS_PTRACE') */
38
+ capAdd?: string[];
39
+ /** Capabilities to drop (e.g., 'ALL') */
40
+ capDrop?: string[];
41
+ /** Run in privileged mode */
42
+ privileged?: boolean;
43
+ /** User/group to run as (e.g., '1000:1000') */
44
+ user?: string;
27
45
  }
28
46
  export interface ShutdownMetadata {
29
47
  signalCount: number;
@@ -1 +1 @@
1
- {"version":3,"file":"container.d.ts","sourceRoot":"","sources":["../../src/resources/container.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,MAAM,EAAE,KAAK,EAA0B,MAAM,QAAQ,CAAC;AAC/D,OAAO,MAAM,MAAM,WAAW,CAAC;AAE/B,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAEjD,OAAO,EAKL,KAAK,cAAc,EACnB,KAAK,WAAW,EAChB,KAAK,UAAU,EACf,KAAK,UAAU,EACf,KAAK,OAAO,EACb,MAAM,WAAW,CAAC;AAEnB,MAAM,WAAW,WAAW;IAC1B,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACnC,KAAK,CAAC,EAAE,WAAW,EAAE,CAAC;IACtB,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC7B,GAAG,CAAC,EAAE,MAAM,EAAE,CAAC;IACf,yDAAyD;IACzD,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACpC;AAED,MAAM,WAAW,gBAAgB;IAC/B,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,OAAO,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,uCAAuC;IACvC,QAAQ,CAAC,UAAU,EAAE,CACnB,OAAO,EAAE,MAAM,GAAG,MAAM,EACxB,SAAS,CAAC,EAAE,MAAM,KACf,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IAChC,4CAA4C;IAC5C,QAAQ,CAAC,cAAc,EAAE,CACvB,MAAM,CAAC,EAAE,MAAM,EACf,SAAS,CAAC,EAAE,MAAM,KACf,MAAM,CAAC,MAAM,CAAC,gBAAgB,EAAE,KAAK,CAAC,CAAC;IAC5C,6CAA6C;IAC7C,QAAQ,CAAC,KAAK,EAAE,CAAC,WAAW,EAAE,MAAM,KAAK,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;IACtE,+DAA+D;IAC/D,QAAQ,CAAC,KAAK,EAAE,MAAM,MAAM,CAAC,MAAM,CAAC,cAAc,EAAE,KAAK,CAAC,CAAC;IAC3D,6CAA6C;IAC7C,QAAQ,CAAC,IAAI,EAAE,CAAC,OAAO,EAAE,WAAW,KAAK,MAAM,CAAC,MAAM,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;IAC1E,iDAAiD;IACjD,QAAQ,CAAC,UAAU,EAAE,CAAC,OAAO,CAAC,EAAE,UAAU,KAAK,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,OAAO,CAAC,EAAE,KAAK,CAAC,CAAC;CAC7F;AA6ED,eAAO,MAAM,SAAS,GACpB,YAAY,MAAM,EAClB,QAAQ,eAAe,EACvB,QAAQ,MAAM,KACb,MAAM,CAAC,MAAM,CAAC,iBAAiB,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,CAuhBnD,CAAC"}
1
+ {"version":3,"file":"container.d.ts","sourceRoot":"","sources":["../../src/resources/container.ts"],"names":[],"mappings":"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"}
@@ -142,9 +142,14 @@ export const Container = (resourceId, config, docker) => Effect.acquireRelease(E
142
142
  NetworkMode: config.networks?.[0]?.name,
143
143
  AutoRemove: false,
144
144
  PortBindings,
145
+ Binds: config.volumes?.map(v => `${v.hostPath}:${v.containerPath}${v.readonly ? ':ro' : ''}`),
146
+ CapAdd: config.capAdd,
147
+ CapDrop: config.capDrop,
148
+ Privileged: config.privileged,
145
149
  },
146
150
  ExposedPorts,
147
151
  Cmd: config.cmd,
152
+ User: config.user,
148
153
  StopSignal: 'SIGTERM',
149
154
  StopTimeout: 10,
150
155
  });
@@ -376,66 +381,94 @@ export const Container = (resourceId, config, docker) => Effect.acquireRelease(E
376
381
  const stdout = opts.stdout ?? true;
377
382
  const stderr = opts.stderr ?? true;
378
383
  const timestamps = opts.timestamps ?? false;
379
- const stream = await container.logs({
380
- follow: true,
381
- stdout,
382
- stderr,
383
- since: opts.since,
384
- until: opts.until,
385
- tail: opts.tail,
386
- timestamps,
387
- });
388
- // Create a wrapper to make the stream async iterable
389
- const readable = stream;
390
- // Convert NodeJS.ReadableStream to AsyncIterable<LogLine>
391
- async function* logIterator() {
392
- const chunks = [];
393
- // Use Promise-based iteration for ReadableStream
394
- for await (const chunk of readable) {
395
- // Parse Docker log format (8-byte header + payload)
396
- let offset = 0;
397
- const buffer = Buffer.isBuffer(chunk) ? chunk : Buffer.from(chunk);
398
- while (offset < buffer.length) {
399
- if (offset + 8 > buffer.length) {
400
- // Incomplete header, yield rest as stdout
384
+ const follow = opts.follow ?? false;
385
+ // Helper to parse Docker log format from a buffer
386
+ function* parseLogBuffer(buffer) {
387
+ let offset = 0;
388
+ while (offset < buffer.length) {
389
+ if (offset + 8 > buffer.length) {
390
+ // Incomplete header, yield rest as stdout
391
+ const remaining = buffer.slice(offset).toString('utf-8').trim();
392
+ if (remaining) {
401
393
  yield {
402
394
  stream: 'stdout',
403
- message: buffer.slice(offset).toString('utf-8').trim(),
395
+ message: remaining,
404
396
  };
405
- break;
406
397
  }
407
- const streamType = buffer.readUInt8(offset);
408
- const size = buffer.readUInt32BE(offset + 4);
409
- if (offset + 8 + size > buffer.length) {
410
- // Incomplete payload
398
+ break;
399
+ }
400
+ const streamType = buffer.readUInt8(offset);
401
+ const size = buffer.readUInt32BE(offset + 4);
402
+ if (offset + 8 + size > buffer.length) {
403
+ // Incomplete payload
404
+ const remaining = buffer.slice(offset + 8).toString('utf-8').trim();
405
+ if (remaining) {
411
406
  yield {
412
407
  stream: streamType === 2 ? 'stderr' : 'stdout',
413
- message: buffer.slice(offset + 8).toString('utf-8').trim(),
408
+ message: remaining,
414
409
  };
415
- break;
416
410
  }
417
- const payload = buffer.slice(offset + 8, offset + 8 + size);
418
- const message = payload.toString('utf-8');
419
- // Parse timestamp if present (format: "2024-01-14T21:00:00.000000000Z message")
420
- let timestamp;
421
- let content = message;
422
- if (timestamps) {
423
- const match = message.match(/^(\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d+Z)\s+(.*)$/s);
424
- if (match) {
425
- timestamp = match[1];
426
- content = match[2] ?? '';
427
- }
411
+ break;
412
+ }
413
+ const payload = buffer.slice(offset + 8, offset + 8 + size);
414
+ const message = payload.toString('utf-8');
415
+ // Parse timestamp if present (format: "2024-01-14T21:00:00.000000000Z message")
416
+ let timestamp;
417
+ let content = message;
418
+ if (timestamps) {
419
+ const match = message.match(/^(\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d+Z)\s+(.*)$/s);
420
+ if (match) {
421
+ timestamp = match[1];
422
+ content = match[2] ?? '';
428
423
  }
429
- yield {
430
- stream: streamType === 2 ? 'stderr' : 'stdout',
431
- timestamp,
432
- message: content.trim(),
433
- };
434
- offset += 8 + size;
435
424
  }
425
+ yield {
426
+ stream: streamType === 2 ? 'stderr' : 'stdout',
427
+ timestamp,
428
+ message: content.trim(),
429
+ };
430
+ offset += 8 + size;
436
431
  }
437
432
  }
438
- return logIterator();
433
+ // Dockerode has different return types based on follow option:
434
+ // - follow: false (or undefined) returns Buffer
435
+ // - follow: true returns NodeJS.ReadableStream
436
+ // We branch explicitly so TypeScript can infer correct types
437
+ if (follow) {
438
+ const readable = await container.logs({
439
+ follow: true,
440
+ stdout,
441
+ stderr,
442
+ since: opts.since,
443
+ until: opts.until,
444
+ tail: opts.tail,
445
+ timestamps,
446
+ });
447
+ async function* streamIterator() {
448
+ for await (const chunk of readable) {
449
+ if (!Buffer.isBuffer(chunk) && typeof chunk !== 'string') {
450
+ continue;
451
+ }
452
+ const buffer = Buffer.isBuffer(chunk) ? chunk : Buffer.from(chunk);
453
+ yield* parseLogBuffer(buffer);
454
+ }
455
+ }
456
+ return streamIterator();
457
+ }
458
+ // Non-follow mode: Docker returns Buffer directly
459
+ const buffer = await container.logs({
460
+ follow: false,
461
+ stdout,
462
+ stderr,
463
+ since: opts.since,
464
+ until: opts.until,
465
+ tail: opts.tail,
466
+ timestamps,
467
+ });
468
+ async function* bufferIterator() {
469
+ yield* parseLogBuffer(buffer);
470
+ }
471
+ return bufferIterator();
439
472
  },
440
473
  catch: (e) => new Error(`streamLogs failed: ${e}`),
441
474
  }),
@@ -33,5 +33,5 @@ export interface ImageResource {
33
33
  * @param config Image build configuration
34
34
  * @returns Effect yielding the built image resource
35
35
  */
36
- export declare const Image: (tag: string, config: ImageConfig) => Effect.Effect<ImageResource, Error>;
36
+ export declare const Image: (tag: string, config: ImageConfig) => Effect.Effect<ImageResource, Error, never>;
37
37
  //# sourceMappingURL=image.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"image.d.ts","sourceRoot":"","sources":["../../src/resources/image.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAKhC,MAAM,WAAW,WAAW;IAC1B,0CAA0C;IAC1C,OAAO,EAAE,MAAM,CAAC;IAChB,6CAA6C;IAC7C,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,6BAA6B;IAC7B,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACnC,kDAAkD;IAClD,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,uCAAuC;IACvC,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,mDAAmD;IACnD,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;CACtB;AAED;;;;;;GAMG;AACH,eAAO,MAAM,KAAK,GAChB,KAAK,MAAM,EACX,QAAQ,WAAW,KAClB,MAAM,CAAC,MAAM,CAAC,aAAa,EAAE,KAAK,CAyHgC,CAAC"}
1
+ {"version":3,"file":"image.d.ts","sourceRoot":"","sources":["../../src/resources/image.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAKhC,MAAM,WAAW,WAAW;IAC1B,0CAA0C;IAC1C,OAAO,EAAE,MAAM,CAAC;IAChB,6CAA6C;IAC7C,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,6BAA6B;IAC7B,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACnC,kDAAkD;IAClD,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,uCAAuC;IACvC,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,mDAAmD;IACnD,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;CACtB;AAED;;;;;;GAMG;AACH,eAAO,MAAM,KAAK,kFA4HmD,CAAC"}
@@ -6,7 +6,7 @@
6
6
  export { Network } from './network';
7
7
  export type { NetworkConfig, NetworkResource } from './network';
8
8
  export { Container } from './container';
9
- export type { ContainerConfig, ContainerResource, PortMapping, ShutdownMetadata, } from './container';
9
+ export type { ContainerConfig, ContainerResource, PortMapping, ShutdownMetadata, VolumeMapping, } from './container';
10
10
  export { containerStatsSchema, execOptionsSchema, execResultSchema, logOptionsSchema, logLineSchema, cpuStatsSchema, memoryStatsSchema, networkStatsSchema, statsOptionsSchema, } from './schemas';
11
11
  export type { ContainerStats, CpuStats, MemoryStats, NetworkStats, ExecOptions, ExecResult, LogOptions, LogLine, StatsOptions, } from './schemas';
12
12
  export { Image } from './image';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/resources/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,YAAY,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AAEhE,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,YAAY,EACV,eAAe,EACf,iBAAiB,EACjB,WAAW,EACX,gBAAgB,GACjB,MAAM,aAAa,CAAC;AAGrB,OAAO,EACL,oBAAoB,EACpB,iBAAiB,EACjB,gBAAgB,EAChB,gBAAgB,EAChB,aAAa,EACb,cAAc,EACd,iBAAiB,EACjB,kBAAkB,EAClB,kBAAkB,GACnB,MAAM,WAAW,CAAC;AACnB,YAAY,EACV,cAAc,EACd,QAAQ,EACR,WAAW,EACX,YAAY,EACZ,WAAW,EACX,UAAU,EACV,UAAU,EACV,OAAO,EACP,YAAY,GACb,MAAM,WAAW,CAAC;AAEnB,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAChC,YAAY,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/resources/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,YAAY,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AAEhE,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,YAAY,EACV,eAAe,EACf,iBAAiB,EACjB,WAAW,EACX,gBAAgB,EAChB,aAAa,GACd,MAAM,aAAa,CAAC;AAGrB,OAAO,EACL,oBAAoB,EACpB,iBAAiB,EACjB,gBAAgB,EAChB,gBAAgB,EAChB,aAAa,EACb,cAAc,EACd,iBAAiB,EACjB,kBAAkB,EAClB,kBAAkB,GACnB,MAAM,WAAW,CAAC;AACnB,YAAY,EACV,cAAc,EACd,QAAQ,EACR,WAAW,EACX,YAAY,EACZ,WAAW,EACX,UAAU,EACV,UAAU,EACV,OAAO,EACP,YAAY,GACb,MAAM,WAAW,CAAC;AAEnB,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAChC,YAAY,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"network.d.ts","sourceRoot":"","sources":["../../src/resources/network.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,MAAM,EAAE,KAAK,EAAQ,MAAM,QAAQ,CAAC;AAC7C,OAAO,MAAM,MAAM,WAAW,CAAC;AAG/B,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACvB;AAiCD;;GAEG;AACH,eAAO,MAAM,OAAO,GAClB,YAAY,MAAM,EAClB,QAAQ,aAAa,EACrB,QAAQ,MAAM,KACb,MAAM,CAAC,MAAM,CAAC,eAAe,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,CA+EjD,CAAC"}
1
+ {"version":3,"file":"network.d.ts","sourceRoot":"","sources":["../../src/resources/network.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,MAAM,EAAE,KAAK,EAAQ,MAAM,QAAQ,CAAC;AAC7C,OAAO,MAAM,MAAM,WAAW,CAAC;AAG/B,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACvB;AAiCD;;GAEG;AACH,eAAO,MAAM,OAAO,mHAmFjB,CAAC"}
@@ -95,14 +95,15 @@ export declare const logOptionsSchema: z.ZodObject<{
95
95
  until: z.ZodOptional<z.ZodNumber>;
96
96
  tail: z.ZodOptional<z.ZodNumber>;
97
97
  timestamps: z.ZodOptional<z.ZodBoolean>;
98
+ follow: z.ZodOptional<z.ZodBoolean>;
98
99
  }, z.core.$strip>;
99
100
  /**
100
101
  * A single log line from a container
101
102
  */
102
103
  export declare const logLineSchema: z.ZodObject<{
103
104
  stream: z.ZodEnum<{
104
- stdout: "stdout";
105
105
  stderr: "stderr";
106
+ stdout: "stdout";
106
107
  }>;
107
108
  timestamp: z.ZodOptional<z.ZodString>;
108
109
  message: z.ZodString;
@@ -1 +1 @@
1
- {"version":3,"file":"schemas.d.ts","sourceRoot":"","sources":["../../src/resources/schemas.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAIxB;;GAEG;AACH,eAAO,MAAM,cAAc;;;;;iBAKzB,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,iBAAiB;;;;;;iBAM5B,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,kBAAkB;;;;;iBAK7B,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;;;;;iBAM/B,CAAC;AAEH,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAC;AAClE,MAAM,MAAM,QAAQ,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,cAAc,CAAC,CAAC;AACtD,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAC;AAC5D,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAC;AAI9D;;GAEG;AACH,eAAO,MAAM,iBAAiB;;;;;;;iBAO5B,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,gBAAgB;;;;;iBAK3B,CAAC;AAEH,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAC;AAC5D,MAAM,MAAM,UAAU,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,gBAAgB,CAAC,CAAC;AAI1D;;GAEG;AACH,eAAO,MAAM,gBAAgB;;;;;;;iBAO3B,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,aAAa;;;;;;;iBAIxB,CAAC;AAEH,MAAM,MAAM,UAAU,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,gBAAgB,CAAC,CAAC;AAC1D,MAAM,MAAM,OAAO,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,aAAa,CAAC,CAAC;AAIpD;;GAEG;AACH,eAAO,MAAM,kBAAkB;;;iBAG7B,CAAC;AAEH,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAC"}
1
+ {"version":3,"file":"schemas.d.ts","sourceRoot":"","sources":["../../src/resources/schemas.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAIxB;;GAEG;AACH,eAAO,MAAM,cAAc;;;;;iBAKzB,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,iBAAiB;;;;;;iBAM5B,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,kBAAkB;;;;;iBAK7B,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;;;;;iBAM/B,CAAC;AAEH,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAC;AAClE,MAAM,MAAM,QAAQ,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,cAAc,CAAC,CAAC;AACtD,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAC;AAC5D,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAC;AAI9D;;GAEG;AACH,eAAO,MAAM,iBAAiB;;;;;;;iBAO5B,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,gBAAgB;;;;;iBAK3B,CAAC;AAEH,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAC;AAC5D,MAAM,MAAM,UAAU,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,gBAAgB,CAAC,CAAC;AAI1D;;GAEG;AACH,eAAO,MAAM,gBAAgB;;;;;;;;iBAQ3B,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,aAAa;;;;;;;iBAIxB,CAAC;AAEH,MAAM,MAAM,UAAU,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,gBAAgB,CAAC,CAAC;AAC1D,MAAM,MAAM,OAAO,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,aAAa,CAAC,CAAC;AAIpD;;GAEG;AACH,eAAO,MAAM,kBAAkB;;;iBAG7B,CAAC;AAEH,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAC"}
@@ -76,6 +76,7 @@ export const logOptionsSchema = z.object({
76
76
  until: z.number().optional().describe('Unix timestamp to end at'),
77
77
  tail: z.number().int().min(0).optional().describe('Number of lines to tail'),
78
78
  timestamps: z.boolean().optional().describe('Include timestamps (default: false)'),
79
+ follow: z.boolean().optional().describe('Follow log output (default: false)'),
79
80
  });
80
81
  /**
81
82
  * A single log line from a container
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@docker-harpoon/core",
3
- "version": "0.1.2",
3
+ "version": "0.1.4",
4
4
  "license": "MIT",
5
5
  "description": "Core Docker resource primitives and binding interface",
6
6
  "type": "module",
@@ -16,8 +16,9 @@
16
16
  "dist"
17
17
  ],
18
18
  "scripts": {
19
- "build": "tsc",
20
- "typecheck": "tsc --noEmit"
19
+ "build": "tsgo",
20
+ "typecheck": "tsgo --noEmit",
21
+ "test": "bun test"
21
22
  },
22
23
  "dependencies": {
23
24
  "dockerode": "^4.0.9",