@goldstack/template-dynamodb 0.3.35 → 0.3.37
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.
- package/dist/src/dynamoDBData.d.ts.map +1 -1
- package/dist/src/dynamoDBData.js +2 -1
- package/dist/src/dynamoDBData.js.map +1 -1
- package/dist/src/local/config.d.ts +27 -0
- package/dist/src/local/config.d.ts.map +1 -0
- package/dist/src/local/config.js +29 -0
- package/dist/src/local/config.js.map +1 -0
- package/dist/src/local/instanceManager.d.ts +61 -0
- package/dist/src/local/instanceManager.d.ts.map +1 -0
- package/dist/src/local/instanceManager.js +212 -0
- package/dist/src/local/instanceManager.js.map +1 -0
- package/dist/src/{localDynamoDB.d.ts → local/localDynamoDB.d.ts} +13 -4
- package/dist/src/local/localDynamoDB.d.ts.map +1 -0
- package/dist/src/local/localDynamoDB.js +101 -0
- package/dist/src/local/localDynamoDB.js.map +1 -0
- package/dist/src/{localInstances.d.ts → local/localInstances.d.ts} +3 -20
- package/dist/src/local/localInstances.d.ts.map +1 -0
- package/dist/src/{localInstances.js → local/localInstances.js} +74 -12
- package/dist/src/local/localInstances.js.map +1 -0
- package/dist/src/local/processManager.d.ts +9 -0
- package/dist/src/local/processManager.d.ts.map +1 -0
- package/dist/src/local/processManager.js +85 -0
- package/dist/src/local/processManager.js.map +1 -0
- package/dist/src/local/spawner.d.ts +15 -0
- package/dist/src/local/spawner.d.ts.map +1 -0
- package/dist/src/local/spawner.js +138 -0
- package/dist/src/local/spawner.js.map +1 -0
- package/dist/src/templateDynamoDBTable.js +4 -4
- package/dist/src/templateDynamoDBTable.js.map +1 -1
- package/package.json +1 -1
- package/dist/src/localDynamoDB.d.ts.map +0 -1
- package/dist/src/localDynamoDB.js +0 -294
- package/dist/src/localDynamoDB.js.map +0 -1
- package/dist/src/localInstances.d.ts.map +0 -1
- package/dist/src/localInstances.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dynamoDBData.d.ts","sourceRoot":"","sources":["../../src/dynamoDBData.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,MAAM,0CAA0C,CAAC;AACjF,OAAO,EAIL,cAAc,EAGf,MAAM,0BAA0B,CAAC;AAElC,OAAO,EAAE,kBAAkB,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AASzE,wBAAsB,iBAAiB,CACrC,aAAa,EAAE,qBAAqB,CAAC,eAAe,EAAE,kBAAkB,CAAC,EACzE,cAAc,EAAE,MAAM,EACtB,MAAM,EAAE,cAAc,GACrB,OAAO,CAAC,IAAI,CAAC,CA2Bf;AAED,eAAO,MAAM,WAAW,kBACP,qBAAqB,CAAC,eAAe,EAAE,kBAAkB,CAAC,kBACzD,MAAM,UACd,cAAc,KACrB,OAAO,CAAC,IAAI,CA4Cd,CAAC;AAEF,eAAO,MAAM,WAAW,kBACP,qBAAqB,CAAC,eAAe,EAAE,kBAAkB,CAAC,kBACzD,MAAM,UACd,cAAc,KACrB,OAAO,CAAC,IAAI,
|
|
1
|
+
{"version":3,"file":"dynamoDBData.d.ts","sourceRoot":"","sources":["../../src/dynamoDBData.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,MAAM,0CAA0C,CAAC;AACjF,OAAO,EAIL,cAAc,EAGf,MAAM,0BAA0B,CAAC;AAElC,OAAO,EAAE,kBAAkB,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AASzE,wBAAsB,iBAAiB,CACrC,aAAa,EAAE,qBAAqB,CAAC,eAAe,EAAE,kBAAkB,CAAC,EACzE,cAAc,EAAE,MAAM,EACtB,MAAM,EAAE,cAAc,GACrB,OAAO,CAAC,IAAI,CAAC,CA2Bf;AAED,eAAO,MAAM,WAAW,kBACP,qBAAqB,CAAC,eAAe,EAAE,kBAAkB,CAAC,kBACzD,MAAM,UACd,cAAc,KACrB,OAAO,CAAC,IAAI,CA4Cd,CAAC;AAEF,eAAO,MAAM,WAAW,kBACP,qBAAqB,CAAC,eAAe,EAAE,kBAAkB,CAAC,kBACzD,MAAM,UACd,cAAc,KACrB,OAAO,CAAC,IAAI,CAsBd,CAAC"}
|
package/dist/src/dynamoDBData.js
CHANGED
|
@@ -63,7 +63,7 @@ const assertTable = async (packageConfig, deploymentName, client) => {
|
|
|
63
63
|
await new Promise((resolve, reject) => {
|
|
64
64
|
res
|
|
65
65
|
.then(async () => {
|
|
66
|
-
(0, utils_log_1.
|
|
66
|
+
(0, utils_log_1.info)(`DynamoDB table '${tableName}' created.`);
|
|
67
67
|
resolve();
|
|
68
68
|
})
|
|
69
69
|
.catch((e) => {
|
|
@@ -82,6 +82,7 @@ const deleteTable = async (packageConfig, deploymentName, client) => {
|
|
|
82
82
|
const res = client.send(new client_dynamodb_1.DeleteTableCommand({
|
|
83
83
|
TableName: tableName,
|
|
84
84
|
}));
|
|
85
|
+
(0, utils_log_1.info)(`Deleted DynamoDB table: '${tableName}'`);
|
|
85
86
|
await new Promise((resolve, reject) => {
|
|
86
87
|
res
|
|
87
88
|
.then(async () => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dynamoDBData.js","sourceRoot":"","sources":["../../src/dynamoDBData.ts"],"names":[],"mappings":";;;AAmBA,8CA+BC;AAjDD,8DAOkC;AAClC,iEAAsD;AAEtD,
|
|
1
|
+
{"version":3,"file":"dynamoDBData.js","sourceRoot":"","sources":["../../src/dynamoDBData.ts"],"names":[],"mappings":"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"}
|
|
@@ -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 {
|
|
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
|
-
|
|
21
|
-
|
|
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":";;;AACA,8DAA0D;AAC1D,oDAAmD;AACnD,uDAAuD;AACvD,qCAA4E;AAC5E,uCAA0C;AAoC1C;;GAEG;AACH,KAAK,UAAU,YAAY,CACzB,QAA0B;IAE1B,MAAM,QAAQ,GAAG,IAAA,uBAAc,EAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;IAC/C,IAAA,iBAAK,EAAC,sDAAsD,QAAQ,EAAE,CAAC,CAAC;IACxE,OAAO,IAAI,gCAAc,CAAC;QACxB,QAAQ;QACR,MAAM,EAAE,sBAAa,CAAC,MAAM;QAC5B,WAAW,EAAE,sBAAa,CAAC,WAAW;KACvC,CAAC,CAAC;AACL,CAAC;AAED;;GAEG;AACI,MAAM,YAAY,GAAqB,KAAK,EACjD,aAAa,EACb,cAAc,EACd,EAAE;IACF,MAAM,OAAO,GAAG,MAAM,IAAA,oCAAkB,GAAE,CAAC;IAC3C,MAAM,gBAAgB,GAAG,MAAM,OAAO,CAAC,uBAAuB,EAAE,CAAC;IACjE,IAAI,gBAAgB,EAAE,CAAC;QACrB,OAAO,MAAM,YAAY,CAAC,gBAAgB,CAAC,CAAC;IAC9C,CAAC;IAED,IAAI,IAAA,0BAAiB,GAAE,EAAE,CAAC;QACxB,MAAM,IAAI,KAAK,CACb,sMAAsM,CACvM,CAAC;IACJ,CAAC;IAED,6CAA6C;IAC7C,MAAM,WAAW,GAAG,MAAM,IAAA,0BAAkB,EAC1C,aAAa,EACb,EAAE,IAAI,EAAE,sBAAa,CAAC,IAAI,EAAE,EAC5B,cAAc,CACf,CAAC;IACF,OAAO,MAAM,YAAY,CAAC,WAAW,CAAC,CAAC;AACzC,CAAC,CAAC;AAvBW,QAAA,YAAY,gBAuBvB;AAEF;;GAEG;AACI,MAAM,kBAAkB,GAA2B,KAAK,EAC7D,aAAa,EACb,EAAE,IAAI,EAAE,EACR,cAAc,EACd,EAAE;IACF,MAAM,OAAO,GAAG,MAAM,IAAA,oCAAkB,GAAE,CAAC;IAE3C,qDAAqD;IACrD,MAAM,gBAAgB,GAAG,MAAM,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;IACzD,IAAI,gBAAgB,IAAI,gBAAgB,KAAK,SAAS,EAAE,CAAC;QACvD,IAAA,iBAAK,EACH,+EAA+E,IAAI,EAAE,CACtF,CAAC;QACF,OAAO,CAAC,qBAAqB,CAAC,IAAI,CAAC,CAAC;QACpC,OAAO,gBAAgB,CAAC;IAC1B,CAAC;IAED,+DAA+D;IAC/D,MAAM,YAAY,GAAG,OAAO,CAAC,eAAe,EAAE,CAAC;IAC/C,KAAK,MAAM,CAAC,YAAY,EAAE,QAAQ,CAAC,IAAI,YAAY,CAAC,OAAO,EAAE,EAAE,CAAC;QAC9D,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;YAC3B,IAAA,gBAAI,EAAC,oDAAoD,IAAI,8DAA8D,YAAY;0IACH,CAAC,CAAC;QACxI,CAAC;IACH,CAAC;IAED,IAAA,iBAAK,EAAC,gDAAgD,IAAI,EAAE,CAAC,CAAC;IAC9D,MAAM,WAAW,GAAG,MAAM,IAAA,uBAAa,EAAC,EAAE,IAAI,EAAE,CAAC,CAAC;IAClD,OAAO,CAAC,WAAW,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;IACvC,OAAO,CAAC,qBAAqB,CAAC,IAAI,CAAC,CAAC;IACpC,OAAO,WAAW,CAAC;AACrB,CAAC,CAAC;AA/BW,QAAA,kBAAkB,sBA+B7B;AAEF;;GAEG;AACI,MAAM,oBAAoB,GAA6B,KAAK,EACjE,aAAa,EACb,cAAc,EACd,EAAE;IACF,MAAM,OAAO,GAAG,MAAM,IAAA,oCAAkB,GAAE,CAAC;IAC3C,IAAA,iBAAK,EACH,4DAA4D;QAC1D,OAAO,CAAC,gBAAgB,EAAE,CAC7B,CAAC;IAEF,MAAM,YAAY,GAAG,OAAO,CAAC,eAAe,EAAE,CAAC;IAC/C,KAAK,MAAM,CAAC,IAAI,EAAE,QAAQ,CAAC,IAAI,YAAY,CAAC,OAAO,EAAE,EAAE,CAAC;QACtD,IAAI,QAAQ,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;YACvC,IAAA,iBAAK,EAAC,6BAA6B,IAAI,EAAE,CAAC,CAAC;YAC3C,OAAO,CAAC,WAAW,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;YACrC,OAAO,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC;YACjC,MAAM,OAAO,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;QACvC,CAAC;IACH,CAAC;AACH,CAAC,CAAC;AAnBW,QAAA,oBAAoB,wBAmB/B;AAEF;;GAEG;AACI,MAAM,iBAAiB,GAA0B,KAAK,EAC3D,aAAa,EACb,OAAO,EACP,cAAc,EACd,EAAE;;IACF,MAAM,OAAO,GAAG,MAAM,IAAA,oCAAkB,GAAE,CAAC;IAC3C,MAAM,UAAU,GAAG,MAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,IAAI,mCAAI,sBAAa,CAAC,IAAI,CAAC;IAEvD,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC;IACvD,IAAI,QAAQ,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;QACvC,MAAM,cAAc,GAAG,OAAO,CAAC,qBAAqB,CAAC,UAAU,CAAC,CAAC;QACjE,IAAI,cAAc,KAAK,CAAC,EAAE,CAAC;YACzB,+BAA+B;YAC/B,OAAO,CAAC,WAAW,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC;YAC3C,MAAM,OAAO,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;QACvC,CAAC;IACH,CAAC;AACH,CAAC,CAAC;AAjBW,QAAA,iBAAiB,qBAiB5B"}
|
|
@@ -23,25 +23,8 @@ export interface LocalInstancesManager {
|
|
|
23
23
|
removeUsageCounter(port: number): void;
|
|
24
24
|
}
|
|
25
25
|
/**
|
|
26
|
-
*
|
|
26
|
+
* Gets the singleton instance of LocalInstancesManager, initializing it if necessary
|
|
27
27
|
*/
|
|
28
|
-
declare
|
|
29
|
-
|
|
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"}
|