@goldstack/template-dynamodb 0.3.34 → 0.3.36

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 (32) hide show
  1. package/dist/src/local/config.d.ts +27 -0
  2. package/dist/src/local/config.d.ts.map +1 -0
  3. package/dist/src/local/config.js +29 -0
  4. package/dist/src/local/config.js.map +1 -0
  5. package/dist/src/local/instanceManager.d.ts +61 -0
  6. package/dist/src/local/instanceManager.d.ts.map +1 -0
  7. package/dist/src/local/instanceManager.js +212 -0
  8. package/dist/src/local/instanceManager.js.map +1 -0
  9. package/dist/src/{localDynamoDB.d.ts → local/localDynamoDB.d.ts} +13 -4
  10. package/dist/src/local/localDynamoDB.d.ts.map +1 -0
  11. package/dist/src/local/localDynamoDB.js +101 -0
  12. package/dist/src/local/localDynamoDB.js.map +1 -0
  13. package/dist/src/{localInstances.d.ts → local/localInstances.d.ts} +3 -20
  14. package/dist/src/local/localInstances.d.ts.map +1 -0
  15. package/dist/src/{localInstances.js → local/localInstances.js} +74 -12
  16. package/dist/src/local/localInstances.js.map +1 -0
  17. package/dist/src/local/processManager.d.ts +9 -0
  18. package/dist/src/local/processManager.d.ts.map +1 -0
  19. package/dist/src/local/processManager.js +85 -0
  20. package/dist/src/local/processManager.js.map +1 -0
  21. package/dist/src/local/spawner.d.ts +15 -0
  22. package/dist/src/local/spawner.d.ts.map +1 -0
  23. package/dist/src/local/spawner.js +138 -0
  24. package/dist/src/local/spawner.js.map +1 -0
  25. package/dist/src/templateDynamoDBTable.js +4 -4
  26. package/dist/src/templateDynamoDBTable.js.map +1 -1
  27. package/package.json +7 -7
  28. package/dist/src/localDynamoDB.d.ts.map +0 -1
  29. package/dist/src/localDynamoDB.js +0 -294
  30. package/dist/src/localDynamoDB.js.map +0 -1
  31. package/dist/src/localInstances.d.ts.map +0 -1
  32. package/dist/src/localInstances.js.map +0 -1
@@ -0,0 +1,27 @@
1
+ /**
2
+ * Configuration options for local DynamoDB instances
3
+ */
4
+ export interface DynamoDBConfig {
5
+ /** Port to use for the DynamoDB instance */
6
+ port: number;
7
+ /** Region to use for the DynamoDB client */
8
+ region: string;
9
+ /** Credentials for local DynamoDB access */
10
+ credentials: {
11
+ accessKeyId: string;
12
+ secretAccessKey: string;
13
+ };
14
+ }
15
+ /**
16
+ * Default configuration for local DynamoDB instances
17
+ */
18
+ export declare const defaultConfig: DynamoDBConfig;
19
+ /**
20
+ * Gets the endpoint URL for a DynamoDB instance
21
+ */
22
+ export declare function getEndpointUrl(port: number): string;
23
+ /**
24
+ * Checks if we are running in a Jest test environment
25
+ */
26
+ export declare function isTestEnvironment(): boolean;
27
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../src/local/config.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,4CAA4C;IAC5C,IAAI,EAAE,MAAM,CAAC;IACb,4CAA4C;IAC5C,MAAM,EAAE,MAAM,CAAC;IACf,4CAA4C;IAC5C,WAAW,EAAE;QACX,WAAW,EAAE,MAAM,CAAC;QACpB,eAAe,EAAE,MAAM,CAAC;KACzB,CAAC;CACH;AAED;;GAEG;AACH,eAAO,MAAM,aAAa,EAAE,cAO3B,CAAC;AAEF;;GAEG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAEnD;AAED;;GAEG;AACH,wBAAgB,iBAAiB,IAAI,OAAO,CAE3C"}
@@ -0,0 +1,29 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.defaultConfig = void 0;
4
+ exports.getEndpointUrl = getEndpointUrl;
5
+ exports.isTestEnvironment = isTestEnvironment;
6
+ /**
7
+ * Default configuration for local DynamoDB instances
8
+ */
9
+ exports.defaultConfig = {
10
+ port: parseInt(process.env.DYNAMODB_LOCAL_PORT || '8000'),
11
+ region: 'eu-central-1',
12
+ credentials: {
13
+ accessKeyId: 'dummy',
14
+ secretAccessKey: 'dummy',
15
+ },
16
+ };
17
+ /**
18
+ * Gets the endpoint URL for a DynamoDB instance
19
+ */
20
+ function getEndpointUrl(port) {
21
+ return `http://127.0.0.1:${port}`;
22
+ }
23
+ /**
24
+ * Checks if we are running in a Jest test environment
25
+ */
26
+ function isTestEnvironment() {
27
+ return process.env.JEST_WORKER_ID !== undefined;
28
+ }
29
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../../src/local/config.ts"],"names":[],"mappings":";;;AA8BA,wCAEC;AAKD,8CAEC;AAxBD;;GAEG;AACU,QAAA,aAAa,GAAmB;IAC3C,IAAI,EAAE,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,mBAAmB,IAAI,MAAM,CAAC;IACzD,MAAM,EAAE,cAAc;IACtB,WAAW,EAAE;QACX,WAAW,EAAE,OAAO;QACpB,eAAe,EAAE,OAAO;KACzB;CACF,CAAC;AAEF;;GAEG;AACH,SAAgB,cAAc,CAAC,IAAY;IACzC,OAAO,oBAAoB,IAAI,EAAE,CAAC;AACpC,CAAC;AAED;;GAEG;AACH,SAAgB,iBAAiB;IAC/B,OAAO,OAAO,CAAC,GAAG,CAAC,cAAc,KAAK,SAAS,CAAC;AAClD,CAAC"}
@@ -0,0 +1,61 @@
1
+ import { DynamoDBInstance } from './localDynamoDB';
2
+ /**
3
+ * Manages DynamoDB instance lifecycle and state
4
+ */
5
+ export declare class InstanceManager {
6
+ private readonly stateFile;
7
+ private instances;
8
+ private usageCounts;
9
+ private constructor();
10
+ /**
11
+ * Creates and initializes a new InstanceManager
12
+ */
13
+ static create(): Promise<InstanceManager>;
14
+ /**
15
+ * Gets an instance for a specific port
16
+ */
17
+ getInstance(port: number): Promise<DynamoDBInstance | 'stopped' | undefined>;
18
+ /**
19
+ * Gets the first running instance
20
+ */
21
+ getFirstRunningInstance(): Promise<DynamoDBInstance | undefined>;
22
+ /**
23
+ * Sets an instance for a specific port
24
+ */
25
+ setInstance(port: number, instance: DynamoDBInstance | 'stopped'): void;
26
+ /**
27
+ * Gets all instances
28
+ */
29
+ getAllInstances(): Map<number, DynamoDBInstance | 'stopped'>;
30
+ /**
31
+ * Gets the number of instances
32
+ */
33
+ getInstanceCount(): number;
34
+ /**
35
+ * Increments the usage counter for a port
36
+ */
37
+ incrementUsageCounter(port: number): void;
38
+ /**
39
+ * Decrements the usage counter for a port
40
+ */
41
+ decrementUsageCounter(port: number): number;
42
+ /**
43
+ * Gets the usage count for a port
44
+ */
45
+ getUsageCount(port: number): number;
46
+ /**
47
+ * Removes the usage counter for a port
48
+ */
49
+ removeUsageCounter(port: number): void;
50
+ /**
51
+ * Stops an instance
52
+ */
53
+ stopInstance(instance: DynamoDBInstance): Promise<void>;
54
+ private loadState;
55
+ private saveState;
56
+ }
57
+ /**
58
+ * Gets the singleton instance of InstanceManager
59
+ */
60
+ export declare function getInstanceManager(): Promise<InstanceManager>;
61
+ //# sourceMappingURL=instanceManager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"instanceManager.d.ts","sourceRoot":"","sources":["../../../src/local/instanceManager.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAgBnD;;GAEG;AACH,qBAAa,eAAe;IAC1B,OAAO,CAAC,QAAQ,CAAC,SAAS,CAA0B;IACpD,OAAO,CAAC,SAAS,CAAwD;IACzE,OAAO,CAAC,WAAW,CAAkC;IAErD,OAAO;IAEP;;OAEG;WACiB,MAAM,IAAI,OAAO,CAAC,eAAe,CAAC;IAMtD;;OAEG;IACG,WAAW,CACf,IAAI,EAAE,MAAM,GACX,OAAO,CAAC,gBAAgB,GAAG,SAAS,GAAG,SAAS,CAAC;IAapD;;OAEG;IACG,uBAAuB,IAAI,OAAO,CAAC,gBAAgB,GAAG,SAAS,CAAC;IAgBtE;;OAEG;IACH,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,gBAAgB,GAAG,SAAS,GAAG,IAAI;IAiBvE;;OAEG;IACH,eAAe,IAAI,GAAG,CAAC,MAAM,EAAE,gBAAgB,GAAG,SAAS,CAAC;IAI5D;;OAEG;IACH,gBAAgB,IAAI,MAAM;IAI1B;;OAEG;IACH,qBAAqB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAKzC;;OAEG;IACH,qBAAqB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;IAY3C;;OAEG;IACH,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;IAInC;;OAEG;IACH,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAKtC;;OAEG;IACG,YAAY,CAAC,QAAQ,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC;YAQ/C,SAAS;IA0CvB,OAAO,CAAC,SAAS;CA6BlB;AAKD;;GAEG;AACH,wBAAsB,kBAAkB,IAAI,OAAO,CAAC,eAAe,CAAC,CAKnE"}
@@ -0,0 +1,212 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.InstanceManager = void 0;
7
+ exports.getInstanceManager = getInstanceManager;
8
+ const utils_log_1 = require("@goldstack/utils-log");
9
+ const tcp_port_used_1 = require("tcp-port-used");
10
+ const fs_1 = __importDefault(require("fs"));
11
+ const processManager_1 = require("./processManager");
12
+ /**
13
+ * Manages DynamoDB instance lifecycle and state
14
+ */
15
+ class InstanceManager {
16
+ constructor() {
17
+ this.stateFile = '.localInstances.json';
18
+ this.instances = new Map();
19
+ this.usageCounts = new Map();
20
+ }
21
+ /**
22
+ * Creates and initializes a new InstanceManager
23
+ */
24
+ static async create() {
25
+ const manager = new InstanceManager();
26
+ await manager.loadState();
27
+ return manager;
28
+ }
29
+ /**
30
+ * Gets an instance for a specific port
31
+ */
32
+ async getInstance(port) {
33
+ const instance = this.instances.get(port);
34
+ if (instance && instance !== 'stopped') {
35
+ const isPortInUse = await (0, tcp_port_used_1.check)(port);
36
+ if (!isPortInUse) {
37
+ (0, utils_log_1.debug)(`Port ${port} not in use, marking instance as stopped`);
38
+ this.setInstance(port, 'stopped');
39
+ return 'stopped';
40
+ }
41
+ }
42
+ return instance;
43
+ }
44
+ /**
45
+ * Gets the first running instance
46
+ */
47
+ async getFirstRunningInstance() {
48
+ for (const [port, instance] of this.instances.entries()) {
49
+ if (instance !== 'stopped') {
50
+ const isPortInUse = await (0, tcp_port_used_1.check)(port);
51
+ if (!isPortInUse) {
52
+ (0, utils_log_1.debug)(`Port ${port} not in use, marking instance as stopped`);
53
+ this.setInstance(port, 'stopped');
54
+ continue;
55
+ }
56
+ (0, utils_log_1.debug)(`Found existing local DynamoDB instance on port ${port}`);
57
+ return instance;
58
+ }
59
+ }
60
+ return undefined;
61
+ }
62
+ /**
63
+ * Sets an instance for a specific port
64
+ */
65
+ setInstance(port, instance) {
66
+ this.instances.set(port, instance);
67
+ (0, utils_log_1.debug)(`DynamoDB local instance ${instance === 'stopped' ? 'stopped' : 'started'} on port ${port}. Currently defined instances: ${this.instances.size}`, {
68
+ definedInstances: this.instances.size,
69
+ stoppedInstances: [...this.instances.entries()].filter((e) => e[1] === 'stopped').length,
70
+ allInstances: [...this.instances.entries()],
71
+ });
72
+ this.saveState();
73
+ }
74
+ /**
75
+ * Gets all instances
76
+ */
77
+ getAllInstances() {
78
+ return this.instances;
79
+ }
80
+ /**
81
+ * Gets the number of instances
82
+ */
83
+ getInstanceCount() {
84
+ return this.instances.size;
85
+ }
86
+ /**
87
+ * Increments the usage counter for a port
88
+ */
89
+ incrementUsageCounter(port) {
90
+ this.usageCounts.set(port, (this.usageCounts.get(port) || 0) + 1);
91
+ this.saveState();
92
+ }
93
+ /**
94
+ * Decrements the usage counter for a port
95
+ */
96
+ decrementUsageCounter(port) {
97
+ const currentCount = this.usageCounts.get(port) || 0;
98
+ if (currentCount <= 1) {
99
+ this.usageCounts.delete(port);
100
+ this.saveState();
101
+ return 0;
102
+ }
103
+ this.usageCounts.set(port, currentCount - 1);
104
+ this.saveState();
105
+ return currentCount - 1;
106
+ }
107
+ /**
108
+ * Gets the usage count for a port
109
+ */
110
+ getUsageCount(port) {
111
+ return this.usageCounts.get(port) || 0;
112
+ }
113
+ /**
114
+ * Removes the usage counter for a port
115
+ */
116
+ removeUsageCounter(port) {
117
+ this.usageCounts.delete(port);
118
+ this.saveState();
119
+ }
120
+ /**
121
+ * Stops an instance
122
+ */
123
+ async stopInstance(instance) {
124
+ if (instance.processId) {
125
+ await (0, processManager_1.terminateProcess)(instance.processId);
126
+ }
127
+ else if (instance.dockerContainerId) {
128
+ await (0, processManager_1.stopContainer)(instance.dockerContainerId);
129
+ }
130
+ }
131
+ async loadState() {
132
+ try {
133
+ const data = fs_1.default.readFileSync(this.stateFile, 'utf8');
134
+ const state = JSON.parse(data);
135
+ // Clear existing maps
136
+ this.instances.clear();
137
+ this.usageCounts.clear();
138
+ // Restore instances
139
+ for (const [port, instance] of Object.entries(state.instances)) {
140
+ const portNum = parseInt(port);
141
+ if (instance === 'stopped') {
142
+ this.instances.set(portNum, 'stopped');
143
+ }
144
+ else {
145
+ // Check if port is actually in use
146
+ const isPortInUse = await (0, tcp_port_used_1.check)(portNum);
147
+ if (!isPortInUse) {
148
+ (0, utils_log_1.debug)(`Port ${portNum} not in use, marking instance as stopped`);
149
+ this.instances.set(portNum, 'stopped');
150
+ }
151
+ else {
152
+ this.instances.set(portNum, {
153
+ port: portNum,
154
+ processId: instance.processId,
155
+ dockerContainerId: instance.dockerContainerId,
156
+ });
157
+ }
158
+ }
159
+ }
160
+ // Restore usage counts
161
+ Object.entries(state.usageCounts).forEach(([port, count]) => {
162
+ this.usageCounts.set(parseInt(port), count);
163
+ });
164
+ }
165
+ catch (err) {
166
+ if (err.code !== 'ENOENT') {
167
+ (0, utils_log_1.error)('Failed to load local instances state:', err);
168
+ }
169
+ // File doesn't exist yet, that's fine
170
+ }
171
+ }
172
+ saveState() {
173
+ try {
174
+ const state = {
175
+ instances: {},
176
+ usageCounts: {},
177
+ };
178
+ // Save instances
179
+ this.instances.forEach((instance, port) => {
180
+ state.instances[port] =
181
+ instance === 'stopped'
182
+ ? 'stopped'
183
+ : {
184
+ port: instance.port,
185
+ processId: instance.processId,
186
+ dockerContainerId: instance.dockerContainerId,
187
+ };
188
+ });
189
+ // Save usage counts
190
+ this.usageCounts.forEach((count, port) => {
191
+ state.usageCounts[port] = count;
192
+ });
193
+ fs_1.default.writeFileSync(this.stateFile, JSON.stringify(state, null, 2));
194
+ }
195
+ catch (err) {
196
+ (0, utils_log_1.error)('Failed to save local instances state:', err);
197
+ }
198
+ }
199
+ }
200
+ exports.InstanceManager = InstanceManager;
201
+ // Initialize singleton instance
202
+ let instanceManagerInstance;
203
+ /**
204
+ * Gets the singleton instance of InstanceManager
205
+ */
206
+ async function getInstanceManager() {
207
+ if (!instanceManagerInstance) {
208
+ instanceManagerInstance = await InstanceManager.create();
209
+ }
210
+ return instanceManagerInstance;
211
+ }
212
+ //# sourceMappingURL=instanceManager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"instanceManager.js","sourceRoot":"","sources":["../../../src/local/instanceManager.ts"],"names":[],"mappings":"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"}
@@ -1,12 +1,11 @@
1
1
  import { EmbeddedPackageConfig } from '@goldstack/utils-package-config-embedded';
2
2
  import { DynamoDBClient } from '@aws-sdk/client-dynamodb';
3
- import { DynamoDBDeployment, DynamoDBPackage } from './templateDynamoDB';
3
+ import { DynamoDBPackage, DynamoDBDeployment } from '../types/DynamoDBPackage';
4
4
  export interface DynamoDBInstance {
5
5
  port: number;
6
6
  processId?: number;
7
7
  dockerContainerId?: string;
8
8
  }
9
- export declare function stopInstance(instance: DynamoDBInstance): Promise<void>;
10
9
  export type LocalConnectType = (packageConfig: EmbeddedPackageConfig<DynamoDBPackage, DynamoDBDeployment>, deploymentName?: string) => Promise<DynamoDBClient>;
11
10
  export type StartLocalDynamoDBType = (packageConfig: EmbeddedPackageConfig<DynamoDBPackage, DynamoDBDeployment>, options: {
12
11
  port: number;
@@ -16,10 +15,20 @@ export interface StopLocalDynamoDBOptions {
16
15
  }
17
16
  export type StopLocalDynamoDBType = (packageConfig: EmbeddedPackageConfig<DynamoDBPackage, DynamoDBDeployment>, options?: StopLocalDynamoDBOptions, deploymentName?: string) => Promise<void>;
18
17
  export type StopAllLocalDynamoDBType = (packageConfig: EmbeddedPackageConfig<DynamoDBPackage, DynamoDBDeployment>, deploymentName?: string) => Promise<void>;
18
+ /**
19
+ * Connects to a local DynamoDB instance, starting one if necessary
20
+ */
19
21
  export declare const localConnect: LocalConnectType;
20
- export declare const endpointUrl: (startedContainer: DynamoDBInstance) => string;
21
- export declare const createClient: (startedContainer: DynamoDBInstance) => DynamoDBClient;
22
+ /**
23
+ * Starts a local DynamoDB instance
24
+ */
22
25
  export declare const startLocalDynamoDB: StartLocalDynamoDBType;
26
+ /**
27
+ * Stops all local DynamoDB instances
28
+ */
23
29
  export declare const stopAllLocalDynamoDB: StopAllLocalDynamoDBType;
30
+ /**
31
+ * Stops a specific local DynamoDB instance
32
+ */
24
33
  export declare const stopLocalDynamoDB: StopLocalDynamoDBType;
25
34
  //# sourceMappingURL=localDynamoDB.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"localDynamoDB.d.ts","sourceRoot":"","sources":["../../../src/local/localDynamoDB.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,MAAM,0CAA0C,CAAC;AACjF,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAK1D,OAAO,EAAE,eAAe,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAE/E,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B;AAGD,MAAM,MAAM,gBAAgB,GAAG,CAC7B,aAAa,EAAE,qBAAqB,CAAC,eAAe,EAAE,kBAAkB,CAAC,EACzE,cAAc,CAAC,EAAE,MAAM,KACpB,OAAO,CAAC,cAAc,CAAC,CAAC;AAE7B,MAAM,MAAM,sBAAsB,GAAG,CACnC,aAAa,EAAE,qBAAqB,CAAC,eAAe,EAAE,kBAAkB,CAAC,EACzE,OAAO,EAAE;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,EACzB,cAAc,CAAC,EAAE,MAAM,KACpB,OAAO,CAAC,gBAAgB,CAAC,CAAC;AAE/B,MAAM,WAAW,wBAAwB;IACvC,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,MAAM,qBAAqB,GAAG,CAClC,aAAa,EAAE,qBAAqB,CAAC,eAAe,EAAE,kBAAkB,CAAC,EACzE,OAAO,CAAC,EAAE,wBAAwB,EAClC,cAAc,CAAC,EAAE,MAAM,KACpB,OAAO,CAAC,IAAI,CAAC,CAAC;AAEnB,MAAM,MAAM,wBAAwB,GAAG,CACrC,aAAa,EAAE,qBAAqB,CAAC,eAAe,EAAE,kBAAkB,CAAC,EACzE,cAAc,CAAC,EAAE,MAAM,KACpB,OAAO,CAAC,IAAI,CAAC,CAAC;AAiBnB;;GAEG;AACH,eAAO,MAAM,YAAY,EAAE,gBAuB1B,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,kBAAkB,EAAE,sBA+BhC,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,oBAAoB,EAAE,wBAmBlC,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,iBAAiB,EAAE,qBAiB/B,CAAC"}
@@ -0,0 +1,101 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.stopLocalDynamoDB = exports.stopAllLocalDynamoDB = exports.startLocalDynamoDB = exports.localConnect = void 0;
4
+ const client_dynamodb_1 = require("@aws-sdk/client-dynamodb");
5
+ const utils_log_1 = require("@goldstack/utils-log");
6
+ const instanceManager_1 = require("./instanceManager");
7
+ const config_1 = require("./config");
8
+ const spawner_1 = require("./spawner");
9
+ /**
10
+ * Creates a DynamoDB client for a local instance
11
+ */
12
+ async function createClient(instance) {
13
+ const endpoint = (0, config_1.getEndpointUrl)(instance.port);
14
+ (0, utils_log_1.debug)(`Connecting to local DynamoDB instance on endpoint: ${endpoint}`);
15
+ return new client_dynamodb_1.DynamoDBClient({
16
+ endpoint,
17
+ region: config_1.defaultConfig.region,
18
+ credentials: config_1.defaultConfig.credentials,
19
+ });
20
+ }
21
+ /**
22
+ * Connects to a local DynamoDB instance, starting one if necessary
23
+ */
24
+ const localConnect = async (packageConfig, deploymentName) => {
25
+ const manager = await (0, instanceManager_1.getInstanceManager)();
26
+ const existingInstance = await manager.getFirstRunningInstance();
27
+ if (existingInstance) {
28
+ return await createClient(existingInstance);
29
+ }
30
+ if ((0, config_1.isTestEnvironment)()) {
31
+ throw new Error('DynamoDB Local has not been started. When running Jest test, start Local DynamoDB explicitly with `startLocalDynamoDB` and shut the instance down with `stopLocalDynamoDB` when tests are completed.');
32
+ }
33
+ // No running instance found, start a new one
34
+ const newInstance = await (0, exports.startLocalDynamoDB)(packageConfig, { port: config_1.defaultConfig.port }, deploymentName);
35
+ return await createClient(newInstance);
36
+ };
37
+ exports.localConnect = localConnect;
38
+ /**
39
+ * Starts a local DynamoDB instance
40
+ */
41
+ const startLocalDynamoDB = async (packageConfig, { port }, deploymentName) => {
42
+ const manager = await (0, instanceManager_1.getInstanceManager)();
43
+ // Check if instance already exists on requested port
44
+ const existingInstance = await manager.getInstance(port);
45
+ if (existingInstance && existingInstance !== 'stopped') {
46
+ (0, utils_log_1.debug)(`Starting DynamoDB local not required since instance already running on port ${port}`);
47
+ manager.incrementUsageCounter(port);
48
+ return existingInstance;
49
+ }
50
+ // Check if any instance is already running on a different port
51
+ const allInstances = manager.getAllInstances();
52
+ for (const [existingPort, instance] of allInstances.entries()) {
53
+ if (instance !== 'stopped') {
54
+ (0, utils_log_1.warn)(`You are starting a new DynamoDB instance on port ${port}. But a local DynamoDB instance is already running on port ${existingPort}.
55
+ It is recommended to have only one instance of local DynamoDB running at a time (since one instance can support multiple tables).`);
56
+ }
57
+ }
58
+ (0, utils_log_1.debug)(`Starting new DynamoDB local instance on port ${port}`);
59
+ const newInstance = await (0, spawner_1.spawnInstance)({ port });
60
+ manager.setInstance(port, newInstance);
61
+ manager.incrementUsageCounter(port);
62
+ return newInstance;
63
+ };
64
+ exports.startLocalDynamoDB = startLocalDynamoDB;
65
+ /**
66
+ * Stops all local DynamoDB instances
67
+ */
68
+ const stopAllLocalDynamoDB = async (packageConfig, deploymentName) => {
69
+ const manager = await (0, instanceManager_1.getInstanceManager)();
70
+ (0, utils_log_1.debug)('Stopping all local DynamoDB instances. Currently defined: ' +
71
+ manager.getInstanceCount());
72
+ const allInstances = manager.getAllInstances();
73
+ for (const [port, instance] of allInstances.entries()) {
74
+ if (instance && instance !== 'stopped') {
75
+ (0, utils_log_1.debug)(`Stopping instance on port ${port}`);
76
+ manager.setInstance(port, 'stopped');
77
+ manager.removeUsageCounter(port);
78
+ await manager.stopInstance(instance);
79
+ }
80
+ }
81
+ };
82
+ exports.stopAllLocalDynamoDB = stopAllLocalDynamoDB;
83
+ /**
84
+ * Stops a specific local DynamoDB instance
85
+ */
86
+ const stopLocalDynamoDB = async (packageConfig, options, deploymentName) => {
87
+ var _a;
88
+ const manager = await (0, instanceManager_1.getInstanceManager)();
89
+ const portToStop = (_a = options === null || options === void 0 ? void 0 : options.port) !== null && _a !== void 0 ? _a : config_1.defaultConfig.port;
90
+ const instance = await manager.getInstance(portToStop);
91
+ if (instance && instance !== 'stopped') {
92
+ const remainingUsers = manager.decrementUsageCounter(portToStop);
93
+ if (remainingUsers === 0) {
94
+ // Last user, stop the instance
95
+ manager.setInstance(portToStop, 'stopped');
96
+ await manager.stopInstance(instance);
97
+ }
98
+ }
99
+ };
100
+ exports.stopLocalDynamoDB = stopLocalDynamoDB;
101
+ //# sourceMappingURL=localDynamoDB.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"localDynamoDB.js","sourceRoot":"","sources":["../../../src/local/localDynamoDB.ts"],"names":[],"mappings":"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"}
@@ -23,25 +23,8 @@ export interface LocalInstancesManager {
23
23
  removeUsageCounter(port: number): void;
24
24
  }
25
25
  /**
26
- * Implementation of LocalInstancesManager for managing DynamoDB local instances
26
+ * Gets the singleton instance of LocalInstancesManager, initializing it if necessary
27
27
  */
28
- declare class LocalInstancesManagerImpl implements LocalInstancesManager {
29
- private readonly stateFile;
30
- private startedInstances;
31
- private portUsageCounter;
32
- constructor();
33
- private loadState;
34
- private saveState;
35
- getInstance(port: number): DynamoDBInstance | 'stopped' | undefined;
36
- getFirstRunningInstance(): DynamoDBInstance | undefined;
37
- setInstance(port: number, instance: DynamoDBInstance | 'stopped'): void;
38
- getAllInstances(): Map<number, DynamoDBInstance | 'stopped'>;
39
- getInstanceCount(): number;
40
- incrementUsageCounter(port: number): void;
41
- decrementUsageCounter(port: number): number;
42
- getUsageCount(port: number): number;
43
- removeUsageCounter(port: number): void;
44
- }
45
- export declare const localInstancesManager: LocalInstancesManagerImpl;
46
- export {};
28
+ export declare function getLocalInstancesManager(): Promise<LocalInstancesManager>;
29
+ export declare const localInstancesManager: LocalInstancesManager;
47
30
  //# sourceMappingURL=localInstances.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"localInstances.d.ts","sourceRoot":"","sources":["../../../src/local/localInstances.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAoBnD;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC,sEAAsE;IACtE,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,gBAAgB,GAAG,SAAS,GAAG,SAAS,CAAC;IACpE,mDAAmD;IACnD,uBAAuB,IAAI,gBAAgB,GAAG,SAAS,CAAC;IACxD,0CAA0C;IAC1C,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,gBAAgB,GAAG,SAAS,GAAG,IAAI,CAAC;IACxE,gCAAgC;IAChC,eAAe,IAAI,GAAG,CAAC,MAAM,EAAE,gBAAgB,GAAG,SAAS,CAAC,CAAC;IAC7D,sCAAsC;IACtC,gBAAgB,IAAI,MAAM,CAAC;IAC3B,yCAAyC;IACzC,qBAAqB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1C,yCAAyC;IACzC,qBAAqB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC;IAC5C,yCAAyC;IACzC,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC;IACpC,sCAAsC;IACtC,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;CACxC;AA0KD;;GAEG;AACH,wBAAsB,wBAAwB,IAAI,OAAO,CAAC,qBAAqB,CAAC,CAK/E;AAQD,eAAO,MAAM,qBAAqB,EAAS,qBAAqB,CAAC"}